# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet v2.5.67 -> 1.1177 # drivers/i2c/chips/w83781d.c 1.2 -> 1.4 # fs/xfs/linux/xfs_lrw.c 1.18 -> 1.19 # drivers/i2c/i2c-frodo.c 1.6 -> 1.7 # net/ipv4/netfilter/ip_conntrack_core.c 1.22 -> 1.24 # drivers/char/drm/drm_agpsupport.h 1.16 -> 1.17 # drivers/char/drm/drm_context.h 1.10 -> 1.11 # arch/ia64/lib/io.c 1.2 -> 1.3 # drivers/net/3c59x.c 1.32 -> 1.33 # net/bridge/netfilter/ebtable_broute.c 1.4 -> 1.5 # arch/ia64/kernel/fsys.S 1.9 -> 1.10 # arch/sparc64/kernel/signal32.c 1.28 -> 1.29 # fs/xfs/xfs_mount.h 1.11 -> 1.12 # include/asm-alpha/pci.h 1.12 -> 1.13 # include/linux/kernel.h 1.34 -> 1.35 # drivers/media/dvb/av7110/av7110.c 1.5 -> (deleted) # sound/oss/opl3sa2.c 1.19 -> 1.20 # sound/core/seq/oss/seq_oss_midi.c 1.7 -> 1.8 # sound/oss/cs46xx.c 1.24 -> 1.25 # arch/ia64/sn/tools/make_textsym 1.3 -> 1.4 arch/ia64/sn/fakeprom/make_textsym (moved) # sound/oss/dmasound/dmasound_paula.c 1.6 -> 1.7 # sound/pci/cs46xx/dsp_spos.h 1.7 -> 1.8 # drivers/usb/input/kbtab.c 1.1 -> 1.2 # drivers/usb/misc/uss720.c 1.12 -> 1.13 # sound/oss/dmasound/dmasound_q40.c 1.8 -> 1.9 # sound/oss/sb_midi.c 1.3 -> 1.4 # drivers/base/hotplug.c 1.10 -> 1.11 # include/sound/initval.h 1.7 -> 1.8 # sound/i2c/cs8427.c 1.5 -> 1.6 # drivers/media/dvb/frontends/Makefile 1.3 -> 1.4 # include/asm-v850/teg.h 1.1 -> 1.2 # sound/pci/emu10k1/emupcm.c 1.13 -> 1.14 # arch/ia64/kernel/palinfo.c 1.12 -> 1.13 # fs/nfs/nfs4state.c 1.1 -> 1.3 # sound/pci/korg1212/korg1212.c 1.18 -> 1.19 # sound/pci/ac97/ac97_patch.h 1.5 -> 1.6 # drivers/i2c/Makefile 1.9 -> 1.10 # drivers/usb/serial/ipaq.h 1.7 -> 1.8 # net/ipv4/proc.c 1.10 -> 1.11 # drivers/net/wan/cosa.c 1.18 -> 1.19 # arch/ia64/ia32/ia32_signal.c 1.15 -> 1.17 # fs/xfs/support/atomic.h 1.2 -> (deleted) # fs/select.c 1.17 -> 1.18 # include/asm-ia64/machvec_init.h 1.3 -> 1.4 # drivers/usb/class/usb-midi.c 1.13 -> 1.14 # drivers/char/Kconfig 1.11 -> 1.12 # drivers/pnp/pnpbios/core.c 1.28 -> 1.29 # include/linux/kobject.h 1.18 -> 1.19 # arch/ia64/Makefile 1.39 -> 1.42 # include/linux/mm.h 1.114 -> 1.115 # arch/i386/kernel/cpu/common.c 1.20 -> 1.21 # drivers/char/agp/sis-agp.c 1.14 -> 1.15 # arch/i386/kernel/apm.c 1.48 -> 1.49 # include/sound/memalloc.h 1.1 -> 1.3 # fs/open.c 1.36 -> 1.37 # net/bridge/br_notify.c 1.1 -> 1.2 # include/asm-ia64/io.h 1.7 -> 1.9 # drivers/ide/pci/serverworks.c 1.16 -> 1.17 # drivers/base/core.c 1.63 -> 1.64 # fs/xfs/linux/xfs_lrw.h 1.10 -> 1.11 # drivers/usb/serial/io_edgeport.c 1.40 -> 1.41 # sound/oss/vidc.c 1.7 -> 1.8 # mm/page_alloc.c 1.150 -> 1.151 # arch/alpha/kernel/pci.c 1.29 -> 1.30 # drivers/i2c/busses/Makefile 1.6 -> 1.7 # mm/readahead.c 1.29 -> 1.30 # include/linux/irda.h 1.5 -> 1.6 # net/ipv6/ipv6_sockglue.c 1.16 -> 1.17 # sound/pci/cs46xx/cs46xx_lib.c 1.29 -> 1.30 # include/asm-ia64/spinlock.h 1.7 -> 1.9 # arch/sparc/kernel/sparc_ksyms.c 1.15 -> 1.16 # drivers/char/drm/i830_dma.c 1.13 -> 1.14 # drivers/usb/host/ohci-hcd.c 1.40 -> 1.41 # arch/v850/kernel/rte_cb.c 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dvb_net.h 1.2 -> 1.3 # include/linux/compatmac.h 1.3 -> (deleted) # include/asm-ia64/sn/io.h 1.3 -> 1.4 # drivers/char/drm/drm_proc.h 1.9 -> 1.10 # sound/oss/emu10k1/audio.c 1.14 -> 1.15 # include/asm-i386/mach-visws/irq_vectors.h 1.4 -> 1.5 # drivers/char/agp/i7x05-agp.c 1.8 -> (deleted) # include/linux/sched.h 1.138 -> 1.139 # sound/isa/als100.c 1.12 -> 1.13 # include/asm-ia64/machvec_hpzx1.h 1.5 -> 1.6 # arch/i386/kernel/vm86.c 1.23 -> 1.24 # kernel/sysctl.c 1.39 -> 1.41 # kernel/sys.c 1.42 -> 1.43 # sound/oss/wf_midi.c 1.6 -> 1.7 # include/linux/dvb/net.h 1.1 -> 1.2 # sound/core/seq/seq_memory.c 1.6 -> 1.7 # drivers/i2c/chips/via686a.c 1.3 -> 1.5 # fs/xfs/xfs_rw.h 1.4 -> 1.5 # include/sound/opl3.h 1.5 -> 1.6 # net/ipv4/xfrm4_input.c 1.4 -> 1.5 # include/net/tcp.h 1.33 -> 1.34 # net/rxrpc/krxtimod.c 1.4 -> 1.5 # drivers/media/dvb/frontends/alps_bsrv2.c 1.3 -> 1.4 # drivers/ieee1394/ohci1394.h 1.14 -> 1.15 # sound/isa/cs423x/cs4236.c 1.13 -> 1.14 # fs/dcache.c 1.47 -> 1.49 # drivers/ieee1394/sbp2.c 1.24 -> 1.25 # net/bridge/br_ioctl.c 1.2 -> 1.4 # sound/oss/esssolo1.c 1.21 -> 1.22 # include/linux/dvb/video.h 1.1 -> 1.2 # net/ipv4/af_inet.c 1.42 -> 1.43 # mm/vmscan.c 1.151 -> 1.152 # sound/oss/ac97_codec.c 1.13 -> 1.14 # drivers/media/dvb/frontends/grundig_29504-401.c 1.2 -> 1.3 # fs/proc/proc_misc.c 1.71 -> 1.72 # sound/isa/cmi8330.c 1.13 -> 1.14 # drivers/media/dvb/av7110/saa7146.c 1.3 -> (deleted) # drivers/char/agp/frontend.c 1.28 -> 1.31 # drivers/scsi/NCR_D700.c 1.6 -> 1.7 # sound/drivers/opl3/opl3_synth.c 1.2 -> 1.3 # arch/sparc/Makefile 1.22 -> 1.23 # arch/ia64/sn/kernel/Makefile 1.10 -> 1.11 # fs/proc/task_mmu.c 1.1 -> 1.2 # arch/sparc/kernel/process.c 1.22 -> 1.23 # sound/pci/cs46xx/cs46xx_lib.h 1.8 -> 1.9 # drivers/char/agp/generic-3.0.c 1.7 -> 1.9 # arch/ia64/hp/common/sba_iommu.c 1.10 -> 1.11 # include/asm-i386/uaccess.h 1.22 -> 1.23 # drivers/block/floppy.c 1.71 -> 1.72 # arch/i386/Kconfig 1.49 -> 1.50 # sound/oss/dmasound/dmasound_core.c 1.8 -> 1.9 # drivers/media/dvb/frontends/Kconfig 1.3 -> 1.4 # include/asm-i386/mach-visws/smpboot_hooks.h 1.2 -> 1.3 # include/sound/snd_wavefront.h 1.2 -> 1.3 # sound/oss/ics2101.c 1.3 -> 1.4 # sound/core/control.c 1.19 -> 1.20 # net/bridge/br.c 1.9 -> 1.10 # include/asm-sparc/pgtsun4c.h 1.1 -> 1.2 # net/ipv4/udp.c 1.34 -> 1.35 # sound/isa/opti9xx/opti92x-ad1848.c 1.12 -> 1.13 # drivers/media/dvb/dvb-core/dvb_demux.c 1.3 -> 1.4 # arch/v850/kernel/process.c 1.4 -> 1.5 # include/asm-i386/signal.h 1.7 -> 1.8 # drivers/ieee1394/ieee1394_core.h 1.12 -> 1.13 # include/asm-v850/rte_ma1_cb.h 1.1 -> 1.2 # net/sched/sch_dsmark.c 1.7 -> 1.8 # init/main.c 1.96 -> 1.97 # arch/i386/kernel/traps.c 1.48 -> 1.49 # sound/oss/sb_mixer.c 1.4 -> 1.5 # include/linux/i2c.h 1.21 -> 1.23 # sound/core/wrappers.c 1.6 -> 1.7 # arch/alpha/kernel/setup.c 1.30 -> 1.31 # fs/stat.c 1.17 -> 1.18 # drivers/ieee1394/sbp2.h 1.14 -> 1.15 # sound/oss/midi_synth.h 1.2 -> 1.3 # drivers/ieee1394/hosts.h 1.12 -> 1.13 # include/asm-ia64/atomic.h 1.4 -> 1.5 # drivers/media/dvb/dvb-core/dvb_net.c 1.2 -> 1.3 # include/asm-x86_64/fixmap.h 1.2 -> 1.3 # fs/xfs/xfs_vfsops.c 1.27 -> 1.28 # fs/nfs/Makefile 1.7 -> 1.8 # sound/oss/ite8172.c 1.10 -> 1.11 # sound/oss/v_midi.c 1.4 -> 1.5 # drivers/media/dvb/dvb-core/dvbdev.c 1.5 -> 1.6 # mm/swapfile.c 1.69 -> 1.72 # sound/drivers/opl3/opl3_lib.c 1.7 -> 1.8 # fs/xfs/xfs.h 1.4 -> 1.5 # drivers/media/dvb/frontends/alps_tdmb7.c 1.2 -> 1.3 # drivers/i2c/Kconfig 1.7 -> 1.8 # arch/ia64/kernel/time.c 1.16 -> 1.19 # drivers/media/dvb/dvb-core/dvb_i2c.h 1.2 -> 1.3 # include/asm-ia64/mca.h 1.5 -> 1.6 # drivers/ieee1394/csr.c 1.7 -> 1.8 # drivers/media/dvb/dvb-core/dvb_filter.h 1.2 -> 1.3 # include/linux/dvb/audio.h 1.1 -> 1.2 # drivers/char/drm/drm_bufs.h 1.10 -> 1.12 # drivers/block/Kconfig 1.3 -> 1.4 # net/ipv6/xfrm6_policy.c 1.1 -> 1.2 # include/net/ip6_route.h 1.5 -> 1.6 # drivers/i2c/i2c-adap-ite.c 1.10 -> 1.11 # kernel/time.c 1.10 -> 1.11 # include/asm-i386/mach-voyager/irq_vectors.h 1.2 -> 1.3 # drivers/media/dvb/dvb-core/dvb_frontend.c 1.3 -> 1.4 # drivers/char/drm/drm_ioctl.h 1.9 -> 1.10 # drivers/ieee1394/ieee1394_core.c 1.25 -> 1.26 # sound/isa/ad1816a/ad1816a.c 1.7 -> 1.8 # drivers/net/pcmcia/3c574_cs.c 1.13 -> 1.14 # sound/oss/pas2_pcm.c 1.4 -> 1.5 # sound/oss/btaudio.c 1.11 -> 1.12 # drivers/usb/core/message.c 1.24 -> 1.25 # net/ipv4/netfilter/ip_tables.c 1.13 -> 1.14 # drivers/base/bus.c 1.42 -> 1.43 # fs/mpage.c 1.40 -> 1.41 # fs/xfs/xfs_fs.h 1.5 -> 1.7 # kernel/softirq.c 1.36 -> 1.37 # net/ipv4/Makefile 1.16 -> 1.18 # arch/ia64/kernel/smpboot.c 1.27 -> 1.28 # arch/ia64/sn/io/Makefile 1.10 -> 1.11 # drivers/media/Kconfig 1.3 -> 1.4 # include/asm-i386/mach-default/irq_vectors.h 1.5 -> 1.6 # sound/oss/gus_wave.c 1.7 -> 1.8 # drivers/media/dvb/frontends/alps_tdlb7.c 1.2 -> 1.3 # arch/v850/kernel/rte_mb_a_pci.c 1.5 -> 1.6 # include/linux/i2c-dev.h 1.7 -> 1.8 # include/asm-sparc64/signal.h 1.7 -> 1.8 # include/linux/fs.h 1.226 -> 1.231 # drivers/usb/storage/usb.c 1.58 -> 1.60 # arch/ia64/kernel/entry.S 1.36 -> 1.39 # arch/ia64/sn/kernel/setup.c 1.10 -> 1.11 # kernel/futex.c 1.24 -> 1.25 # include/sound/emu10k1.h 1.12 -> 1.13 # include/asm-v850/processor.h 1.4 -> 1.5 # include/asm-i386/sigcontext.h 1.2 -> 1.3 # drivers/net/lp486e.c 1.9 -> 1.10 # sound/oss/via82cxxx_audio.c 1.24 -> 1.25 # sound/oss/dmasound/dmasound_atari.c 1.7 -> 1.8 # include/asm-generic/siginfo.h 1.5 -> 1.8 # drivers/ieee1394/ieee1394.h 1.4 -> 1.5 # drivers/net/appletalk/ltpc.c 1.8 -> 1.9 # net/ipv4/ip_sockglue.c 1.12 -> 1.13 # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 1.7 -> 1.8 # drivers/block/paride/pseudo.h 1.7 -> 1.8 # include/asm-ia64/pgtable.h 1.17 -> 1.18 # arch/v850/kernel/nb85e_intc.c 1.2 -> 1.3 # drivers/char/upd4990a.c 1.1 -> 1.2 # drivers/media/dvb/Kconfig 1.1 -> 1.2 # include/asm-i386/mach-default/smpboot_hooks.h 1.2 -> 1.3 # drivers/media/dvb/dvb-core/dvbdev.h 1.2 -> 1.3 # net/bridge/br_forward.c 1.6 -> 1.7 # arch/v850/kernel/rte_cb_multi.c 1.4 -> 1.5 # drivers/char/agp/Makefile 1.17 -> 1.19 # include/sound/cs46xx.h 1.11 -> 1.12 # include/asm-v850/nb85e_timer_d.h 1.1 -> 1.2 # drivers/ieee1394/ieee1394_transactions.c 1.10 -> 1.11 # include/linux/namei.h 1.4 -> 1.5 # include/asm-ia64/module.h 1.9 -> 1.11 # arch/i386/kernel/io_apic.c 1.60 -> 1.61 # drivers/ieee1394/highlevel.h 1.5 -> 1.6 # arch/parisc/kernel/sys_parisc32.c 1.11 -> 1.12 # sound/pci/rme9652/hdsp.c 1.15 -> 1.16 # sound/core/pcm_native.c 1.29 -> 1.30 # sound/pci/ice1712/ice1712.c 1.9 -> 1.10 # drivers/net/sunhme.c 1.30 -> 1.31 # include/asm-sparc/pgtsrmmu.h 1.4 -> 1.5 # mm/filemap.c 1.188 -> 1.189 # drivers/char/drm/i810_dma.c 1.21 -> 1.22 # arch/i386/kernel/edd.c 1.15 -> 1.16 # drivers/media/dvb/dvb-core/demux.h 1.1 -> 1.2 # sound/oss/waveartist.c 1.5 -> 1.6 # fs/namei.c 1.69 -> 1.70 # net/bridge/netfilter/ebtables.c 1.6 -> 1.7 # sound/oss/dmasound/dmasound_awacs.c 1.10 -> 1.11 # fs/xfs/xfs_mount.c 1.23 -> 1.24 # drivers/char/agp/generic.c 1.19 -> 1.25 # net/socket.c 1.48 -> 1.49 # drivers/ieee1394/pcilynx.c 1.26 -> 1.28 # include/asm-ia64/processor.h 1.32 -> 1.34 # sound/oss/sb_ess.c 1.5 -> 1.6 # arch/sparc/kernel/sys_sparc.c 1.9 -> 1.11 # sound/pci/rme96.c 1.15 -> 1.16 # sound/oss/pas2_mixer.c 1.3 -> 1.4 # include/linux/nfs_fs.h 1.43 -> 1.45 # drivers/input/keyboard/98kbd.c 1.1 -> 1.2 # drivers/net/macmace.c 1.8 -> 1.9 # net/ipv4/netfilter/iptable_filter.c 1.6 -> 1.7 # drivers/media/video/Makefile 1.17 -> 1.18 # sound/pci/rme9652/multiface_firmware.dat 1.2 -> (deleted) # net/xfrm/xfrm_algo.c 1.8 -> 1.9 # sound/isa/cs423x/pc98.c 1.1 -> 1.2 # sound/pci/ac97/ac97_codec.c 1.33 -> 1.35 # arch/ia64/sn/io/sn2/l1_command.c 1.1 -> 1.2 # drivers/base/base.h 1.23 -> 1.24 # drivers/media/dvb/dvb-core/dvb_demux.h 1.2 -> 1.3 # drivers/mtd/mtdblock.c 1.40 -> 1.41 # fs/exec.c 1.74 -> 1.76 # fs/xfs/linux/xfs_globals.h 1.4 -> 1.5 # include/sound/driver.h 1.5 -> 1.6 # include/asm-ia64/machvec_sn2.h 1.4 -> 1.7 # include/sound/ymfpci.h 1.4 -> 1.5 # drivers/usb/storage/transport.c 1.66 -> 1.68 # net/ipv4/netfilter/ip_fw_compat.c 1.13 -> 1.14 # arch/ia64/sn/fakeprom/fpmem.c 1.6 -> 1.7 # mm/msync.c 1.11 -> 1.12 # fs/eventpoll.c 1.17 -> 1.18 # net/ipv6/netfilter/ip6table_mangle.c 1.6 -> 1.7 # drivers/media/dvb/av7110/av7110_firm.h 1.1 -> (deleted) # mm/fadvise.c 1.3 -> 1.4 # kernel/signal.c 1.79 -> 1.80 # drivers/usb/storage/transport.h 1.20 -> 1.21 # sound/isa/dt019x.c 1.12 -> 1.13 # include/linux/net.h 1.11 -> 1.12 # sound/oss/awe_wave.c 1.11 -> 1.12 # net/netsyms.c 1.61 -> 1.63 # drivers/char/sx.c 1.21 -> 1.22 # net/sched/sch_prio.c 1.6 -> 1.7 # fs/xfs/support/ktrace.c 1.1 -> 1.2 # include/linux/pci_ids.h 1.87.1.1 -> 1.89 # drivers/media/video/saa7111.c 1.9 -> 1.10 # sound/core/pcm_lib.c 1.18 -> 1.19 # drivers/usb/serial/usb-serial.c 1.74 -> 1.75 # include/asm-sparc64/uaccess.h 1.6 -> 1.7 # sound/pci/ymfpci/ymfpci.c 1.10 -> 1.11 # include/asm-ia64/system.h 1.32 -> 1.34 # sound/usb/usbquirks.h 1.12 -> 1.13 # sound/isa/es18xx.c 1.14 -> 1.16 # kernel/itimer.c 1.3 -> 1.4 # drivers/char/agp/agp.h 1.44 -> 1.49 # arch/sparc64/kernel/process.c 1.40 -> 1.41 # mm/swap_state.c 1.58 -> 1.59 # drivers/media/radio/radio-cadet.c 1.12 -> 1.13 # sound/oss/nm256_audio.c 1.9 -> 1.10 # include/asm-v850/rte_cb.h 1.1 -> 1.2 # net/ipv4/netfilter/ip_conntrack_standalone.c 1.16 -> 1.17 # fs/super.c 1.99 -> 1.100 # sound/pci/rme9652/rme9652.c 1.16 -> 1.17 # arch/ia64/pci/pci.c 1.25 -> 1.26 # sound/oss/sonicvibes.c 1.16 -> 1.17 # include/linux/hdreg.h 1.24 -> 1.25 # arch/i386/kernel/signal.c 1.28 -> 1.29 # arch/v850/Kconfig 1.8 -> 1.9 # arch/ia64/kernel/ia64_ksyms.c 1.19 -> 1.21 # drivers/usb/core/hub.c 1.61 -> 1.62 # sound/oss/emu10k1/passthrough.c 1.6 -> 1.7 # net/core/netfilter.c 1.12 -> 1.13 # drivers/net/acenic.c 1.27 -> 1.28 # drivers/net/8139cp.c 1.34 -> 1.35 # drivers/block/genhd.c 1.78 -> 1.79 # drivers/net/e100/e100_main.c 1.59 -> 1.60 # arch/ia64/kernel/mca.c 1.18 -> 1.22 # fs/readdir.c 1.19 -> 1.20 # arch/ia64/kernel/process.c 1.26 -> 1.30 # drivers/i2c/scx200_i2c.c 1.2 -> 1.3 # include/linux/dvb/frontend.h 1.1 -> 1.2 # arch/i386/kernel/smpboot.c 1.55 -> 1.57 # include/linux/nfs4.h 1.4 -> 1.7 # sound/oss/sys_timer.c 1.4 -> 1.5 # include/sound/cs46xx_dsp_scb_types.h 1.2 -> 1.3 # arch/x86_64/kernel/suspend.c 1.4 -> 1.5 # fs/nfs/dir.c 1.52 -> 1.54 # arch/ia64/kernel/acpi.c 1.34 -> 1.36 # drivers/char/agp/intel-agp.c 1.24 -> 1.26 # include/asm-ia64/smp.h 1.8 -> 1.9 # sound/isa/sb/es968.c 1.11 -> 1.12 # include/asm-v850/nb85e_cache.h 1.1 -> 1.2 # sound/core/seq/instr/ainstr_iw.c 1.3 -> 1.4 # sound/oss/soundcard.c 1.14 -> 1.15 # include/linux/if_bridge.h 1.2 -> 1.3 # drivers/usb/storage/scsiglue.c 1.40 -> 1.42 # sound/core/ioctl32/rawmidi32.c 1.9 -> 1.11 # sound/i2c/l3/uda1341.c 1.7 -> 1.8 # drivers/net/appletalk/cops.c 1.14 -> 1.15 # fs/xfs/xfs_bmap_btree.h 1.5 -> 1.6 # net/xfrm/xfrm_policy.c 1.23 -> 1.24 # net/core/dev.c 1.60 -> 1.62 # include/sound/control.h 1.2 -> 1.3 # include/linux/igmp.h 1.4 -> 1.5 # drivers/usb/core/usb.c 1.117 -> 1.119 # drivers/media/dvb/frontends/ves1820.c 1.3 -> 1.4 # kernel/posix-timers.c 1.10 -> 1.11 # arch/alpha/kernel/time.c 1.15 -> 1.16 # arch/alpha/kernel/semaphore.c 1.4 -> 1.5 # sound/ppc/awacs.c 1.9 -> 1.10 # sound/pci/emu10k1/emufx.c 1.17 -> 1.18 # Documentation/sysctl/kernel.txt 1.6 -> 1.7 # sound/pci/rme9652/digiface_firmware.dat 1.2 -> (deleted) # fs/xfs/linux/xfs_file.c 1.11 -> 1.12 # include/sound/ac97_codec.h 1.17 -> 1.18 # sound/oss/cmpci.c 1.17 -> 1.18 # kernel/uid16.c 1.4 -> 1.5 # sound/isa/gus/interwave.c 1.11 -> 1.12 # drivers/usb/net/usbnet.c 1.47 -> 1.48 # include/asm-ia64/intrinsics.h 1.4 -> 1.5 # include/asm-ia64/machvec.h 1.10 -> 1.13 # drivers/base/firmware.c 1.5 -> 1.6 # sound/oss/opl3.c 1.3 -> 1.4 # drivers/pnp/isapnp/core.c 1.33 -> 1.34 # include/asm-ia64/fcntl.h 1.1 -> 1.2 # drivers/i2c/chips/Kconfig 1.8 -> 1.9 # include/linux/sysctl.h 1.40 -> 1.42 # sound/core/ioctl32/timer32.c 1.9 -> 1.11 # drivers/net/tg3.c 1.64 -> 1.65 # arch/ia64/ia32/ia32_entry.S 1.20 -> 1.21 # arch/sparc64/kernel/sys_sparc.c 1.17 -> 1.19 # drivers/ieee1394/nodemgr.h 1.9 -> 1.10 # arch/i386/boot/setup.S 1.20 -> 1.21 # net/ipv6/af_inet6.c 1.26 -> 1.28 # sound/pci/ice1712/ak4524.c 1.8 -> 1.9 # sound/oss/wavfront.c 1.13 -> 1.14 # include/asm-sparc/pgtable.h 1.13 -> 1.14 # fs/ext3/xattr.c 1.13 -> 1.14 # net/sched/sch_csz.c 1.6 -> 1.7 # drivers/ide/pci/hpt366.c 1.16 -> 1.17 # fs/xfs/xfs_ialloc.c 1.4 -> 1.5 # arch/sparc64/kernel/signal.c 1.27 -> 1.28 # fs/buffer.c 1.192 -> 1.193 # arch/ia64/kernel/signal.c 1.21 -> 1.22 # drivers/char/agp/Kconfig 1.11 -> 1.15 # arch/sparc/mm/srmmu.c 1.28 -> 1.29 # net/ipv4/esp.c 1.24 -> 1.26 # drivers/ide/ide-probe.c 1.36 -> 1.37 # drivers/usb/input/hid-core.c 1.52 -> 1.53 # include/sound/trident.h 1.6 -> 1.7 # arch/ia64/boot/Makefile 1.11 -> 1.12 # drivers/media/dvb/Makefile 1.2 -> 1.3 # sound/oss/cs4232.c 1.10 -> 1.11 # arch/alpha/kernel/core_cia.c 1.13 -> 1.14 # fs/afs/kafstimod.c 1.4 -> 1.5 # drivers/char/tty_io.c 1.72 -> 1.73 # include/sound/cs46xx_dsp_spos.h 1.9 -> 1.10 # include/asm-sparc/signal.h 1.4 -> 1.5 # drivers/char/agp/i460-agp.c 1.14 -> 1.16 # sound/pci/maestro3.c 1.17 -> 1.18 # net/ipv6/ndisc.c 1.26 -> 1.27 # drivers/usb/net/rtl8150.c 1.21 -> 1.22 # sound/pci/intel8x0.c 1.30 -> 1.31 # drivers/acpi/bus.c 1.30 -> 1.31 # net/irda/irlap_event.c 1.18 -> 1.19 # arch/ia64/ia32/sys_ia32.c 1.46 -> 1.49 # sound/core/ioctl32/pcm32.c 1.11 -> 1.13 # net/core/datagram.c 1.8 -> 1.9 # drivers/ieee1394/nodemgr.c 1.21 -> 1.22 # sound/oss/ad1848.c 1.18 -> 1.19 # sound/oss/msnd_pinnacle.c 1.9 -> 1.10 # sound/oss/ymfpci.c 1.30 -> 1.31 # fs/xfs/linux/xfs_globals.c 1.10 -> 1.11 # fs/ext2/xattr.c 1.11 -> 1.12 # sound/drivers/opl3/opl3_seq.c 1.10 -> 1.11 # sound/oss/uart6850.c 1.6 -> 1.7 # include/linux/time.h 1.10 -> 1.11 # net/sched/sch_htb.c 1.7 -> 1.8 # fs/read_write.c 1.28 -> 1.29 # net/ipv6/esp6.c 1.10 -> 1.12 # drivers/char/drm/drm_dma.h 1.11 -> 1.12 # arch/sparc64/kernel/sys_sparc32.c 1.68 -> 1.70 # drivers/net/typhoon.c 1.1 -> 1.2 # sound/pci/trident/trident_main.c 1.15 -> 1.16 # include/linux/compiler.h 1.13 -> 1.15 # sound/isa/sb/sb8.c 1.8 -> 1.9 # sound/core/oss/mixer_oss.c 1.15 -> 1.16 # arch/ia64/sn/kernel/sn2/iomv.c 1.2 -> 1.3 # sound/ppc/pmac.h 1.3 -> 1.4 # drivers/char/agp/ali-agp.c 1.14 -> 1.15 # include/sound/asound.h 1.14 -> 1.15 # fs/nfs/file.c 1.26 -> 1.27 # Makefile 1.401 -> 1.402 # sound/pci/cmipci.c 1.19 -> 1.20 # include/linux/inetdevice.h 1.5 -> 1.6 # include/asm-ia64/machvec_sn1.h 1.6 -> 1.8 # arch/ia64/kernel/head.S 1.8 -> 1.9 # drivers/media/dvb/av7110/saa7146_defs.h 1.1 -> (deleted) # drivers/char/agp/amd-k8-agp.c 1.24 -> 1.30 # drivers/block/paride/pf.c 1.38 -> 1.39 # net/sunrpc/xprt.c 1.52 -> 1.53 # sound/core/sound.c 1.23 -> 1.24 # mm/page-writeback.c 1.59 -> 1.60 # net/ipv6/ah6.c 1.10 -> 1.12 # drivers/acpi/processor.c 1.37 -> 1.38 # sound/core/sgbuf.c 1.1 -> 1.3 # net/ipv4/tcp_output.c 1.25 -> 1.26 # drivers/usb/serial/keyspan.h 1.16 -> 1.17 # include/net/ip.h 1.15 -> 1.16 # drivers/net/arcnet/arcnet.c 1.8 -> 1.9 # include/linux/scc.h 1.2 -> 1.3 # sound/pci/es1938.c 1.15 -> 1.16 # sound/oss/pas2_midi.c 1.4 -> 1.5 # include/linux/dvb/osd.h 1.2 -> 1.3 # sound/core/Makefile 1.25 -> 1.26 # drivers/char/agp/backend.c 1.71 -> 1.72 # include/linux/page-flags.h 1.37 -> 1.38 # arch/ppc64/kernel/sys_ppc32.c 1.53 -> 1.54 # include/asm-sparc/system.h 1.16 -> 1.17 # arch/sparc/kernel/signal.c 1.20 -> 1.21 # CREDITS 1.80 -> 1.81 # sound/oss/emu10k1/mixer.c 1.6 -> 1.7 # drivers/net/wireless/strip.c 1.9 -> 1.10 # fs/seq_file.c 1.8 -> 1.9 # drivers/media/dvb/av7110/saa7146_core.h 1.2 -> (deleted) # drivers/media/dvb/dvb-core/compat.h 1.1 -> (deleted) # kernel/module.c 1.76 -> 1.77 # net/xfrm/xfrm_state.c 1.21 -> 1.23 # net/core/skbuff.c 1.23 -> 1.24 # fs/xfs/xfs_inode.h 1.12 -> 1.13 # drivers/ieee1394/dv1394.c 1.23 -> 1.24 # include/asm-x86_64/byteorder.h 1.1 -> 1.2 # arch/ia64/lib/swiotlb.c 1.13 -> 1.14 # drivers/char/drm/drmP.h 1.18 -> 1.19 # drivers/ide/pci/pdc202xx_new.c 1.14 -> 1.15 # drivers/ieee1394/ieee1394_types.h 1.14 -> 1.15 # include/asm-sparc/pci.h 1.8 -> 1.9 # net/ipv4/ip_gre.c 1.20 -> 1.22 # sound/oss/nec_vrc5477.c 1.9 -> 1.10 # drivers/net/hamradio/yam.c 1.13 -> 1.14 # include/net/ip6_fib.h 1.2 -> 1.3 # fs/nfs/nfs4proc.c 1.13 -> 1.20 # net/ipv6/route.c 1.22 -> 1.23 # sound/oss/es1371.c 1.21 -> 1.22 # drivers/media/dvb/av7110/saa7146_core.c 1.6 -> (deleted) # sound/isa/wavefront/wavefront.c 1.10 -> 1.11 # sound/oss/mad16.c 1.10 -> 1.11 # net/ipv4/xfrm4_policy.c 1.1 -> 1.2 # drivers/media/dvb/dvb-core/dvb_i2c.c 1.3 -> 1.4 # include/asm-i386/i387.h 1.10 -> 1.11 # arch/sparc/mm/sun4c.c 1.26 -> 1.27 # include/asm-v850/system.h 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dmxdev.c 1.2 -> 1.3 # include/asm-i386/math_emu.h 1.2 -> 1.3 # sound/oss/i810_audio.c 1.33 -> 1.34 # sound/oss/trident.c 1.36 -> 1.37 # arch/ia64/sn/fakeprom/fprom.lds 1.3 -> 1.4 # fs/xfs/linux/xfs_ioctl.c 1.12 -> 1.13 # net/ipv4/Kconfig 1.5 -> 1.6 # include/asm-x86_64/rwsem.h 1.6 -> 1.7 # drivers/media/dvb/av7110/saa7146_v4l.h 1.1 -> (deleted) # drivers/i2c/i2c-dev.c 1.26 -> 1.27 # drivers/usb/storage/unusual_devs.h 1.26 -> 1.27 # mm/slab.c 1.73 -> 1.74 # net/ipv4/netfilter/arp_tables.c 1.5 -> 1.6 # fs/nfs/inode.c 1.73 -> 1.76 # arch/i386/kernel/suspend.c 1.13 -> 1.14 # include/asm-alpha/uaccess.h 1.4 -> 1.5 # net/core/wireless.c 1.6 -> 1.7 # net/sched/sch_ingress.c 1.7 -> 1.8 # net/ipv4/netfilter/ip_nat_standalone.c 1.20 -> 1.21 # include/asm-v850/nb85e_intc.h 1.1 -> 1.2 # fs/filesystems.c 1.12 -> 1.13 # sound/pci/fm801.c 1.13 -> 1.14 # arch/v850/kernel/simcons.c 1.2 -> 1.3 # kernel/sched.c 1.176 -> 1.177 # include/linux/agp_backend.h 1.26 -> 1.27 # sound/isa/sb/sb16.c 1.14 -> 1.15 # net/8021q/vlan.c 1.11 -> 1.13 # drivers/char/agp/hp-agp.c 1.14 -> 1.16 # include/asm-v850/rte_nb85e_cb.h 1.1 -> 1.2 # drivers/usb/host/ehci-q.c 1.44 -> 1.45 # net/ipv6/ip6_fib.c 1.9 -> 1.10 # include/linux/jbd.h 1.20 -> 1.21 # drivers/block/Makefile 1.14 -> 1.15 # arch/ia64/scripts/check-gas 1.1 -> 1.2 # arch/v850/kernel/rte_ma1_cb.c 1.2 -> 1.3 # drivers/ieee1394/iso.c 1.2 -> 1.3 # sound/oss/sb_audio.c 1.6 -> 1.7 # sound/pci/ens1370.c 1.26 -> 1.27 # sound/core/rtctimer.c 1.13 -> 1.14 # drivers/media/dvb/frontends/grundig_29504-491.c 1.2 -> 1.3 # include/sound/cs46xx_dsp_task_types.h 1.1 -> 1.2 # drivers/hotplug/pci_hotplug_core.c 1.36 -> 1.37 # drivers/usb/serial/ipaq.c 1.27 -> 1.28 # include/asm-x86_64/system.h 1.13 -> 1.14 # include/linux/nfs_xdr.h 1.26 -> 1.33 # include/net/xfrm.h 1.27 -> 1.29 # fs/nfsd/nfs4xdr.c 1.13 -> 1.14 # kernel/timer.c 1.49 -> 1.51 # sound/pci/via82xx.c 1.28 -> 1.29 # sound/core/memory_wrapper.c 1.1 -> (deleted) # sound/core/seq/seq_midi.c 1.10 -> 1.11 # sound/pci/cs46xx/dsp_spos.c 1.13 -> 1.14 # drivers/char/agp/via-agp.c 1.28 -> 1.33 # drivers/block/paride/pg.c 1.14 -> 1.15 # drivers/media/dvb/av7110/Makefile 1.3 -> (deleted) # include/linux/mtd/compatmac.h 1.4 -> 1.5 # include/asm-x86_64/mmzone.h 1.1 -> 1.2 # include/asm-i386/mach-default/mach_mpparse.h 1.2 -> 1.3 # scripts/per-cpu-check.awk 1.4 -> (deleted) # drivers/ieee1394/ohci1394.c 1.24 -> 1.25 # drivers/ieee1394/highlevel.c 1.9 -> 1.10 # drivers/media/dvb/av7110/av7110.h 1.3 -> (deleted) # drivers/net/hamradio/scc.c 1.20 -> 1.21 # arch/alpha/lib/strrchr.S 1.2 -> 1.3 # drivers/i2c/busses/Kconfig 1.9 -> 1.10 # include/linux/netlink.h 1.9 -> 1.10 # sound/oss/uart401.c 1.6 -> 1.7 # sound/pci/emu10k1/emumixer.c 1.7 -> 1.8 # sound/isa/Kconfig 1.2 -> 1.3 # sound/core/oss/pcm_oss.c 1.21 -> 1.22 # sound/pci/ymfpci/ymfpci_main.c 1.15 -> 1.16 # net/ipv4/netfilter/iptable_mangle.c 1.11 -> 1.12 # net/ipv4/ah.c 1.19 -> 1.21 # sound/oss/maestro.c 1.24 -> 1.25 # include/asm-ia64/acpi.h 1.6 -> 1.7 # net/ipv6/netfilter/ip6_tables.c 1.16 -> 1.17 # arch/ia64/sn/fakeprom/Makefile 1.11 -> 1.12 # include/linux/dvb/dmx.h 1.1 -> 1.2 # include/asm-sparc/uaccess.h 1.6 -> 1.10 # arch/sparc64/kernel/ioctl32.c 1.54 -> 1.55 # fs/xfs/linux/xfs_aops.c 1.28 -> 1.30 # sound/oss/ad1816.c 1.9 -> 1.10 # include/asm-ia64/bitops.h 1.10 -> 1.11 # sound/drivers/dummy.c 1.14 -> 1.15 # include/asm-alpha/mmzone.h 1.7 -> 1.8 # net/irda/irlmp.c 1.22 -> 1.23 # net/8021q/vlan_dev.c 1.8 -> 1.9 # arch/ia64/sn/io/sn2/pcibr/Makefile 1.1 -> 1.2 # lib/kobject.c 1.17 -> 1.18 # fs/partitions/check.c 1.102 -> 1.103 # drivers/char/drm/drm_os_linux.h 1.8 -> 1.9 # drivers/media/Makefile 1.6 -> 1.7 # fs/xfs/linux/xfs_super.c 1.33 -> 1.34 # include/asm-ia64/pci.h 1.13 -> 1.14 # arch/v850/kernel/entry.S 1.6 -> 1.7 # drivers/char/drm/gamma_dma.c 1.9 -> 1.10 # sound/pci/ac97/ac97_patch.c 1.9 -> 1.10 # sound/pci/cs46xx/dsp_spos_scb_lib.c 1.15 -> 1.16 # sound/core/seq/seq_midi_emul.c 1.7 -> 1.8 # Documentation/Changes 1.32 -> 1.33 # mm/rmap.c 1.23 -> 1.27 # sound/oss/mpu401.c 1.10 -> 1.11 # net/ipv6/sit.c 1.21 -> 1.23 # drivers/media/video/Kconfig 1.5 -> 1.6 # include/asm-ia64/unaligned.h 1.2 -> 1.3 # drivers/usb/host/ehci-mem.c 1.13 -> 1.14 # net/ipv6/addrconf.c 1.34 -> 1.35 # drivers/usb/host/ohci-q.c 1.39 -> 1.40 # arch/ia64/kernel/perfmon.c 1.38 -> 1.39 # sound/pci/ali5451/ali5451.c 1.22 -> 1.23 # drivers/usb/input/usbmouse.c 1.23 -> 1.24 # drivers/char/applicom.c 1.7 -> 1.8 # include/asm-ia64/compat.h 1.8 -> 1.11 # sound/isa/azt2320.c 1.9 -> 1.10 # arch/ia64/Kconfig 1.18 -> 1.19 # drivers/media/dvb/av7110/av7110_ir.c 1.2 -> (deleted) # include/asm-ia64/sal.h 1.14 -> 1.15 # sound/pci/cs4281.c 1.22 -> 1.23 # mm/truncate.c 1.8 -> 1.9 # kernel/panic.c 1.9 -> 1.10 # drivers/media/dvb/dvb-core/dvb_frontend.h 1.2 -> 1.3 # arch/v850/kernel/rte_nb85e_cb.c 1.1 -> 1.2 # fs/xfs/xfs_dmapi.h 1.7 -> 1.8 # sound/core/info.c 1.23 -> 1.24 # drivers/usb/input/usbkbd.c 1.26 -> 1.27 # arch/ia64/kernel/traps.c 1.27 -> 1.28 # drivers/serial/68360serial.c 1.7 -> 1.8 # drivers/net/sungem.c 1.32 -> 1.33 # drivers/usb/misc/Kconfig 1.5 -> 1.6 # include/linux/dvb/ca.h 1.2 -> 1.3 # net/bridge/br_netfilter.c 1.4 -> 1.5 # include/asm-ia64/fpu.h 1.2 -> 1.3 # arch/ia64/mm/fault.c 1.12 -> 1.13 # arch/alpha/kernel/pci_iommu.c 1.15 -> 1.16 # sound/pci/ac97/ac97_id.h 1.6 -> 1.7 # fs/xfs/xfs_inode.c 1.17 -> 1.18 # fs/xfs/xfs_iget.c 1.11 -> 1.12 # sound/oss/emu10k1/main.c 1.13 -> 1.14 # sound/pci/emu10k1/emu10k1_main.c 1.12 -> 1.13 # include/asm-v850/unistd.h 1.5 -> 1.6 # drivers/usb/class/audio.c 1.33 -> 1.34 # sound/core/memalloc.c 1.2 -> 1.4 # sound/isa/opl3sa2.c 1.15 -> 1.16 # drivers/usb/net/pegasus.h 1.23 -> 1.24 # drivers/media/dvb/dvb-core/dvb_ksyms.c 1.2 -> 1.3 # include/linux/poll.h 1.9 -> 1.10 # net/ipv4/ip_output.c 1.30 -> 1.31 # include/linux/pnp.h 1.19 -> 1.20 # drivers/usb/net/pegasus.c 1.42 -> 1.45 # net/ipv4/igmp.c 1.16 -> 1.20 # sound/pci/cs46xx/cs46xx.c 1.13 -> 1.14 # drivers/ieee1394/ieee1394_hotplug.h 1.2 -> 1.3 # arch/ia64/sn/kernel/sn2/Makefile 1.9 -> 1.10 # arch/alpha/math-emu/math.c 1.4 -> 1.5 # fs/inode.c 1.90 -> 1.91 # include/asm-ia64/ia32.h 1.17.1.1 -> 1.20 # net/bridge/br_if.c 1.6 -> 1.7 # net/ipv4/route.c 1.44 -> 1.45 # sound/oss/gus_midi.c 1.5 -> 1.6 # drivers/base/class.c 1.24 -> 1.25 # sound/pci/rme32.c 1.15 -> 1.16 # drivers/media/dvb/dvb-core/Makefile 1.3 -> 1.4 # sound/oss/cs4281/cs4281m.c 1.17 -> 1.18 # arch/ia64/kernel/Makefile 1.15 -> 1.16 # sound/oss/es1370.c 1.19 -> 1.20 # arch/v850/kernel/gbus_int.c 1.4 -> 1.5 # fs/nfs/nfs4xdr.c 1.14 -> 1.21 # kernel/printk.c 1.23 -> 1.24 # drivers/usb/misc/speedtch.c 1.74 -> 1.76 # sound/oss/emu10k1/midi.c 1.10 -> 1.11 # drivers/char/drm/drm_vm.h 1.22 -> 1.23 # Documentation/DocBook/usb.tmpl 1.1 -> 1.2 # sound/ppc/powermac.c 1.8 -> 1.9 # arch/ia64/sn/fakeprom/README 1.4 -> 1.5 # drivers/media/dvb/av7110/saa7146_v4l.c 1.2 -> (deleted) # include/linux/fdreg.h 1.1 -> 1.2 # net/ipv6/xfrm6_input.c 1.6 -> 1.7 # arch/v850/kernel/Makefile 1.6 -> 1.7 # arch/ia64/sn/io/sn2/Makefile 1.1 -> 1.2 # drivers/media/dvb/dvb-core/dmxdev.h 1.2 -> 1.3 # include/asm-v850/ptrace.h 1.1 -> 1.2 # kernel/ptrace.c 1.28 -> 1.29 # arch/i386/kernel/i387.c 1.14 -> 1.16 # drivers/media/dvb/av7110/Kconfig 1.1 -> (deleted) # fs/fs-writeback.c 1.33 -> 1.34 # sound/ppc/pmac.c 1.11 -> 1.12 # include/linux/in.h 1.5 -> 1.6 # drivers/char/agp/amd-k7-agp.c 1.18 -> 1.19 # sound/oss/pss.c 1.8 -> 1.9 # drivers/net/slip.c 1.10 -> 1.11 # drivers/media/dvb/dvb-core/dvb_filter.c 1.2 -> 1.3 # include/asm-v850/posix_types.h 1.1 -> 1.2 # net/ipv4/ipip.c 1.23 -> 1.26 # drivers/media/dvb/frontends/alps_bsru6.c 1.3 -> (deleted) # include/linux/nfs_fs_sb.h 1.8 -> 1.9 # arch/ia64/kernel/unwind.c 1.16 -> 1.19 # sound/isa/sgalaxy.c 1.11 -> 1.12 # (new) -> 1.1 arch/ia64/module.lds # (new) -> 1.1 Documentation/io_ordering.txt # (new) -> 1.1 drivers/media/dvb/frontends/nxt6000.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_firm.h # (new) -> 1.1 drivers/media/common/saa7146_vbi.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ipack.h # (new) -> 1.1 include/media/saa7146.h # (new) -> 1.1 include/asm-i386/mach-pc9800/irq_vectors.h # (new) -> 1.1 include/asm-ia64/acpi-ext.h # (new) -> 1.1 drivers/media/video/mxb.c # (new) -> 1.1 drivers/media/dvb/dvb-core/Makefile.lib # (new) -> 1.1 include/media/saa7146_vv.h # (new) -> 1.1 drivers/media/video/tea6415c.h # (new) -> 1.1 net/ipv4/xfrm4_tunnel.c # (new) -> 1.1 drivers/media/dvb/ttpci/budget-ci.c # (new) -> 1.1 drivers/media/dvb/ttpci/Kconfig # (new) -> 1.1 drivers/media/dvb/ttpci/Makefile # (new) -> 1.1 drivers/media/dvb/ttpci/budget-patch.c # (new) -> 1.1 include/asm-i386/mach-default/apm.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ir.c # (new) -> 1.1 fs/nfs/idmap.c # (new) -> 1.1 drivers/media/dvb/frontends/dvb_dummy_fe.c # (new) -> 1.1 drivers/media/dvb/ttpci/budget-core.c # (new) -> 1.1 include/asm-i386/mach-default/mach_time.h # (new) -> 1.1 include/linux/nfs_idmap.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_wakecpu.h # (new) -> 1.1 drivers/block/floppy98.c # (new) -> 1.1 include/asm-i386/mach-pc9800/apm.h # (new) -> 1.1 drivers/media/video/dpc7146.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ipack.c # (new) -> 1.4 arch/ia64/kernel/module.c # (new) -> 1.1 include/asm-ia64/sn/sn2/io.h # (new) -> 1.1 drivers/media/video/tea6420.c # (new) -> 1.1 drivers/media/common/saa7146_fops.c # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_time.h # (new) -> 1.1 include/asm-i386/mach-default/mach_traps.h # (new) -> 1.1 include/asm-i386/pc9800.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget.c # (new) -> 1.1 include/asm-i386/mach-default/mach_resources.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget.h # (new) -> 1.1 drivers/media/common/saa7146_hlp.c # (new) -> 1.1 arch/v850/rte_nb85e_cb.ld # (new) -> 1.1 drivers/media/common/saa7146_video.c # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_timer.h # (new) -> 1.1 drivers/media/dvb/dvb-core/dvb_ringbuffer.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110.c # (new) -> 1.1 arch/v850/kernel/teg.c # (new) -> 1.1 drivers/i2c/i2c-keywest.c # (new) -> 1.1 drivers/media/video/tda9840.c # (new) -> 1.1 arch/v850/kernel/nb85e_cache.c # (new) -> 1.1 include/asm-i386/mach-pc9800/do_timer.h # (new) -> 1.1 drivers/media/video/tea6420.h # (new) -> 1.1 drivers/media/dvb/frontends/nxt6000.c # (new) -> 1.1 drivers/media/common/saa7146_core.c # (new) -> 1.1 drivers/i2c/busses/i2c-viapro.c # (new) -> 1.1 arch/v850/rte_nb85e_cb-multi.ld # (new) -> 1.1 drivers/media/video/tea6415c.c # (new) -> 1.1 include/asm-i386/mach-pc9800/io_ports.h # (new) -> 1.1 include/asm-i386/mach-pc9800/smpboot_hooks.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget-av.c # (new) -> 1.1 drivers/media/common/Makefile # (new) -> 1.1 arch/ia64/sn/Makefile # (new) -> 1.1 drivers/media/video/mxb.h # (new) -> 1.1 drivers/media/dvb/frontends/at76c651.c # (new) -> 1.1 net/ipv4/ipcomp.c # (new) -> 1.1 include/sound/hdsp.h # (new) -> 1.1 drivers/i2c/i2c-keywest.h # (new) -> 1.1 arch/ia64/sn/kernel/sn2/io.c # (new) -> 1.1 include/asm-i386/mach-default/bios_ebda.h # (new) -> 1.1 drivers/media/video/tda9840.h # (new) -> 1.1 drivers/media/common/saa7146_i2c.c # (new) -> 1.1 include/asm-i386/mach-default/io_ports.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_resources.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_traps.h # (new) -> 1.1 drivers/media/common/Kconfig # (new) -> 1.1 drivers/media/dvb/dvb-core/dvb_ringbuffer.h # (new) -> 1.1 drivers/media/dvb/frontends/stv0299.c # (new) -> 1.1 include/asm-i386/mach-pc9800/bios_ebda.h # (new) -> 1.1 arch/ia64/kernel/acpi-ext.c # (new) -> 1.1 include/asm-i386/mach-default/mach_timer.h # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.1033.3.10 # Linux 2.5.67 # -------------------------------------------- # 03/04/07 hch@sgi.com 1.1033.5.1 # [XFS] remove busy inode check in the umount path - Linux checked it for us before calling into the filesystem. We're beyond the point of no return for umount anyway # # SGI Modid: 2.5.x-xfs:slinx:142731a # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.16 # [PATCH] usb-storage: fix CB/CBI # # When we fixed the error handling, we accidentally made a mistake. A STALL # on a control endpoint isn't necessarily a fatal thing -- it can be used to # indicate a command failure. # # This fixes bugzilla bug #510. # # - A control endpoint stall when sending the command to a CB/CBI device is # legal. Our error handling was just a little too agressive. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.17 # [PATCH] usb-storage: variable renames # # This patch changes the struct us_data 'ss' to 'us' to be consistent with # the rest of the code. The old name was a legacy artifact. # # There are no functional changes here. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.18 # [PATCH] usb-storage: remove BUG/BUG_ON # # This patch changes BUG and BUG_ON to print error messages. It is done to # be (a) a little more robust, and (b) complies with Linus' idea of no BUGs # unless absolutely necessary. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.19 # [PATCH] usb-storage: add info to /proc interface # # This patch adds some information about the quirks of the device to the # /proc interface. # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.1033.5.2 # [XFS] Fix definition of setresblks - nothing uses it yet, but DMF will (so fix now). # # SGI Modid: 2.5.x-xfs:slinx:142797a # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.1033.5.3 # [XFS] Fix a pagebuf leak with the pagebufs used to coordinate IO completion # for unwritten extent writes. # # SGI Modid: 2.5.x-xfs:slinx:143052a # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.1033.5.4 # [XFS] Fix up some minor namespace pollution problems. # # SGI Modid: 2.5.x-xfs:slinx:143053a # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.6.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/07 hch@sgi.com 1.1033.5.5 # [XFS] remove atomicIncWithWrap # # SGI Modid: 2.5.x-xfs:slinx:143647a # -------------------------------------------- # 03/04/07 alborchers@steinerpoint.com 1.1033.6.2 # [PATCH] USB: patch for oops in io_edgeport.c # # I tracked down a problem that caused an oops in io_edgeport.c. # # The oops is reliably reproduced by using an EdgePort USB serial # port in dosemu and then exiting dosemu. When dosemu closed # the port the oops would occur. (Tested in RH 7.3 2.4.18-10.) # # The problem was that a USB cmd callback would come in after the # close with the tty struct freed, and the edge_bulk_out_cmd_callback # function would do a wakeup on the tty->write_wait queue. The # tty struct was gone (I checked that tty->magic was bad) and the # wakeup would oops. # # As you did in other places in io_edgeport.c, I added a check that # edge_port->open was true before using the edge_port->port->tty # struct. # # I added a similar check in edge_bulk_out_data_callback, though # I never actually saw the problem here. # # I notice that in 2.4.20 a check has been added to be sure that # edge_port->port->tty is not null--however, this is not enough # because the tty pointer is not set to null when the port is # closed. An alternate solution in 2.4.20 would be to set the # usb_serial_port->tty pointer to null in usbserial.c serial_close(). # This seems like a good thing to do in general, since the tty # struct should not be used after a close which frees it. If # you would like I investigate this a bit more--it could affect # other usb serial drivers and reveal some hidden bugs. # -------------------------------------------- # 03/04/07 hch@sgi.com 1.1033.5.6 # [XFS] merge over some lost changes from the XFS tree # -------------------------------------------- # 03/04/07 hch@hera.kernel.org 1.1033.3.11 # Merge # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.6.3 # USB: set port->tty to NULL after we have closed the port # # This lets any of the many checks for this contition actually have a # chance of working :) # -------------------------------------------- # 03/04/07 davidm@wailua.hpl.hp.com 1.889.308.54 # ia64: Fix inconsistency in sys32_execve(). Reported by # Chandra Kapate). # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.7.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.8.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.12 # Fix a series of NFS read/readdir/readlink errors. # # Tightens consistency checks on the process of reading the reply skb in # the SunRPC client. Reject a reply if we didn't succeed in reading the # entire skb. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.13 # Remove bogus check on the size of NFSv4 'readdir' cookies. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.14 # Prepare for the introduction of NFSv4 state code. # # Split out the open() method for regular files from that of # directories. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.15 # Implement stateful open() for NFSv4 as per RFC3010-bis. # The resulting state is saved in the NFS-specific part of the # struct inode. # # Initially we just start with 3 possible states: # - open for read # - open for write # - open for read/write # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.16 # Setup code to tear down the NFSv4 state once we're done with a file. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.17 # Make NFSv4 'setattr()' method use the cached stateid if the file is # already open. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.18 # Make NFSv4 'read' code use the cached stateid if it exists. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.19 # Make the NFSv4 write code use the stateid if it exists. # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1039 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1033.1.3 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/08 marius@citi.umich.edu 1.1033.3.20 # Add support for mapping NFSv4 remote user/group names into local # unix-style uid/gids. # # Note that this makes use of the RPC client upcall mechanism # (rpc_pipefs) to notify a userland daemon that does the actual mapping. # The results are then cached in the kernel. # The userland daemon can be downloaded from the CITI NFSv4 page at # # http://www.citi.umich.edu/projects/nfsv4/ # -------------------------------------------- # 03/04/08 marius@citi.umich.edu 1.1033.3.21 # Add hooks into the NFSv4 XDR code to make use of the new uid/gid # mapper upcall mechanism. # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.8.2 # i2c: fix up compile error in scx200_i2c driver. # -------------------------------------------- # 03/04/07 alan@lxorguk.ukuu.org.uk 1.1040 # [SPARC64]: syscalls returning long # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1041 # [SPARC]: Fix sys_ipc to return ENOSYS instead of EINVAL as appropriate. # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.1042 # Merge http://nfsclient.bkbits.net/linux-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/07 jmorris@intercode.com.au 1.1033.1.4 # [IPSEC]: AH/ESP forget to free private structs. # -------------------------------------------- # 03/04/07 niv@us.ibm.com 1.1033.1.5 # [TCP]: Missing SNMP stats. # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1033.1.6 # Merge bk://kernel.bkbits.net/acme/net-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/07 jmorris@intercode.com.au 1.1033.1.7 # [IPSEC]: Really move type destructor out of spinlock. # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.1043 # Avoid using pointers to anonymous structure initializers. It's a # gcc'ism, and even gcc can apparently get confused by it. # -------------------------------------------- # 03/04/08 axboe@suse.de 1.1044 # [PATCH] no blk_queue_empty # # The single missing bit, please add that as well. Was missed because this # driver actually used elv_queue_empty, not blk_queue_empty. # -------------------------------------------- # 03/04/08 axboe@suse.de 1.1045 # [PATCH] move q->queuedata assign after queue init # # I want to make blk_init_queue() zero the queue, so we don't get anymore # nasty bugs with uninitialized variables. IDE is setting queuedata before # init though. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1046 # Make it more explicit that jiffies are "unsigned long", but # that we for the initial value ctually want to check only # wrap-around in an "unsigned int". # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1047 # [PATCH] alpha typos part 1 # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1048 # [PATCH] alpha typos part 2 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1049 # [PATCH] fix the mode for bios call in x86-32 as well as -64 # # (Andi Kleen) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1050 # [PATCH] Config.in typos # # (Steve Cole and co) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1051 # [PATCH] read extended cpu revision data # # (Dave Jones) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1052 # [PATCH] fix i387 fxsr conversion # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1053 # [PATCH] parisc - syscalls return long purity ... # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1054 # [PATCH] ppc64 syscalls return long purity # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1055 # [PATCH] v850 updates # # (Miles Bader) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1056 # [PATCH] compatmac not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1057 # [PATCH] compatmac not needed uaccess.h is # # Fixes unknown symbol copy_.. in some builds # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1058 # [PATCH] PC9800 floppy driver # # (Osamu Tomita) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1059 # [PATCH] config for PC98xx floppy # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1060 # [PATCH] MOD_* can go for floppy # # (Bob Miller) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1061 # [PATCH] makefile for pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1062 # [PATCH] unversion.h and compatmac applicom.c # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1063 # [PATCH] update char Kconfig for PC9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1064 # [PATCH] exterminate compatmac in sx # # (compatmac cleanup is all Adrian Bunk) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1065 # [PATCH] error handling for upd4990a # # (Stephan Maciej) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1066 # [PATCH] clean up pci interrupt line whacking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1067 # [PATCH] fix our handling of BIOS forced PIO serverworks OSB4 # # (Robert Hentosh & me) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1068 # [PATCH] fix up capslock on pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1069 # [PATCH] add drivers/media/common for mixed dvb/analog device stuff # # (Martin Hunold) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1070 # [PATCH] update the dvb core # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1071 # [PATCH] update the dvb front end chips # # (Again all DVB is Martin Hunold) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1072 # [PATCH] kill off a load of stuff now in common dvb # # (These changes are big because they are the result of Martin Hunold # resolving a *huge* long term fork in the DVB code base). We now have # one DVB codebase so the changes while big are very good news # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1073 # [PATCH] fix radio-cadet build # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1074 # [PATCH] bring core media/video up to date with dvb changes # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1075 # [PATCH] remaining dvb bits # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1076 # [PATCH] fix error in cops port to 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1077 # [PATCH] port ltpc to 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1078 # [PATCH] fix arcnet locking for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1079 # [PATCH] first cut at scc.c for 2.5 locking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1080 # [PATCH] fix up yam for 2.5 locking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1081 # [PATCH] Update lp486e for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1082 # [PATCH] fix macmace get_free_pages parameters # # (Matthew Wilcox) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1083 # [PATCH] first cut at 3c574_cs for SMP safety etc # # The old code was totally hosed for SMP, the windowing makes this # stuff tricky so it may need more work # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1084 # [PATCH] update slip to new tty module locks # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1085 # [PATCH] fix cosa verify_area # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1086 # [PATCH] first pass at fixing strip for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1087 # [PATCH] junk header removal # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1088 # [PATCH] compatmac is not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1089 # [PATCH] compatmac is not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1090 # [PATCH] asm-alpha typo fixe # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1091 # [PATCH] add but do not yet use mach specific definitions for ports etc on PC # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1092 # [PATCH] add the same mach specific headers for pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1093 # [PATCH] and visws # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1094 # [PATCH] and voyager # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1095 # [PATCH] header for pc9800 type detection # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1096 # [PATCH] x86-64 typo fixes # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1097 # [PATCH] goodbye compatmac.h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1098 # [PATCH] update dvb headers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1099 # [PATCH] possible way to clean up fdreg.h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1100 # [PATCH] hdreg.h typo fix # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1101 # [PATCH] continued compatmac exterminations # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1102 # [PATCH] lock for scc drivers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1103 # [PATCH] shared multimedia includes for saa71xx # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1104 # [PATCH] remove version crap # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1105 # [PATCH] wireless uses __init # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1106 # [PATCH] irda typo fixes # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1107 # [PATCH] remove version.h's # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1108 # [PATCH] small pc98xx fix for sound # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1109 # [PATCH] more audiov ersion scrubbing # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1110 # [PATCH] cs4232 should be devexit # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1111 # [PATCH] C99 for sound # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1112 # [PATCH] lots more version and C99 for audio # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1113 # [PATCH] fix modular gus shared lock # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1114 # [PATCH] another C99 and version casd # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1115 # [PATCH] ics2101 needs to match the gus_lock name too # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1116 # [PATCH] fix ; in mad16 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1117 # [PATCH] ite C99 and version/h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1118 # [PATCH] yet more sound version/c99 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1119 # [PATCH] sync opl3sa2 with 2.4 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1120 # [PATCH] last batch of audio C99 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1121 # [PATCH] suspend doesnt need compatmac either # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1122 # [PATCH] use mach io_ports definitions in io_apic # # Allows for the non standard cascade # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1123 # [PATCH] make vm86 machine independant using new headers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1124 # [PATCH] make APM machine independant using mach headers # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1125 # Fix up merge with Alan. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1126 # More left-over fixups from the merge with Alan. # -------------------------------------------- # 03/04/08 davidm@tiger.hpl.hp.com 1.889.308.55 # ia64: Sync sys32_ipc() with x86 counter-part. # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1127 # [PATCH] paride fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1128 # [PATCH] krxtimod.c fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1129 # [PATCH] kafstimod.c fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1130 # [PATCH] tty_io.c: make redirect static # -------------------------------------------- # 03/04/08 davidm@tiger.hpl.hp.com 1.1033.9.1 # Merge # -------------------------------------------- # 03/04/08 miles@lsi.nec.co.jp 1.1131 # [PATCH] On the v850/nb85e, acknowledge interrupts immediately after handling them # # Previously, it was done automatically by the `reti' isntruction upon # returning from the kernel, but that doesn't do the correct thing in # various cases, for instance if there's a context switch, or a softirq. # -------------------------------------------- # 03/04/08 akpm@digeo.com 1.1132 # [PATCH] Fix futexes in hugetlb pages # # There is a stunning bug. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1133 # Fix mtdblock.c compile. From Adrian Bunk. # -------------------------------------------- # 03/04/08 sfr@canb.auug.org.au 1.1033.9.2 # [PATCH] ia64: compat_sys_fcntl{,64} # # Here is the ia64 part of the patch. Pleas apply after Linus has applied # the generic part. # -------------------------------------------- # 03/04/08 sfr@canb.auug.org.au 1.1033.9.3 # [PATCH] ia64: compat_uptr_t and compat_ptr # # Here is the ia64 part of the patch. It depends on my previous COMPAT # patches. This is safe to apply even before Linus applies the generic # part. # -------------------------------------------- # 03/04/08 jmorris@intercode.com.au 1.1033.1.8 # [IPSEC]: Support for optional policies on input got lost. # -------------------------------------------- # 03/04/08 shemminger@osdl.org 1.1033.1.9 # [VLAN]: Update to new module semantics, use synchronize_net. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1134 # Add __user/__kernel address space modifiers. When not # checking, these end up being no-ops, but they get enabled # by the type checker as special address_space attributes. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1135 # Add the proper sprinkling of __user attributes to the # user space access functions. This allows the type checker # to check proper usage. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1136 # Add __user attributes to user pointers in kernel/signal.c. This # was the first file tested with my type checker with the anal # pointer attribute checking turned on. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1137 # Make __SI_MASK explicitly unsigned, instead of depending on # magic C promotion to silently do so for us. # -------------------------------------------- # 03/04/08 rusty@rustcorp.com.au 1.1033.1.10 # [IPSEC]: Avoid using SET_MODULE_OWNER. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1138 # Annotate scheduler system calls as taking user pointers. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1139 # Annotate i386/signal.c with address space type annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1140 # Add user pointer attributes to kernel/module.c # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1141 # Annotate fs/exec.c with user pointer annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1142 # Annotate fs/namei.c with user pointer annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1143 # Annotate x87 user space access functions with proper type attributes. # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1133.1.1 # Merge kroah.com:/home/linux/linux/BK/bleed-2.5 # into kroah.com:/home/linux/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/08 kraxel@bytesex.org 1.1133.1.2 # [PATCH] i2c: add i2c_clientname() # # This patch just adds a #define and a inline function to hide the # "i2c_client->name" => "i2c_client->dev.name" move introduced by # the recent i2c updates. That makes it easier to build i2c drivers # on both 2.4 and 2.5 kernels. # -------------------------------------------- # 03/04/08 azarah@gentoo.org 1.1133.1.3 # [PATCH] i2c: Fix w83781d sensor to use Milli-Volt for in_* in sysfs # # I did the w83781d sysfs update as per the old spec, which was not # milli-volt. This patch should fix it. # -------------------------------------------- # 03/04/08 azarah@gentoo.org 1.1133.1.4 # [PATCH] i2c: remove compiler warning in w83781d sensor driver # # On Wed, 2003-04-09 at 00:04, Greg KH wrote: # # > Oh, I'm getting the following warning when building the driver, want to # > look into this? # > # > drivers/i2c/chips/w83781d.c: In function `store_fan_div_reg': # > drivers/i2c/chips/w83781d.c:715: warning: `old3' might be used uninitialized in this function # > # # It is because old3 is only referenced if: # # ((data->type != w83781d) && data->type != as99127f) # # as those two chips don't have extended divisor bits ... # # It is however set in the first occurrence: # # /* w83781d and as99127f don't have extended divisor bits */ # if ((data->type != w83781d) && data->type != as99127f) { # old3 = w83781d_read_value(client, W83781D_REG_VBAT); # } # # and thus is rather gcc being brain dead for not being able to figure # old3 is only used within a if block like that. # # I was not sure about style policy in a case like this, so I left it as # is, it should however be possible to 'fix' it with: # -------------------------------------------- # 03/04/09 mort@wildopensource.com 1.1033.9.4 # [PATCH] ia64: Fix up "extern inline" # # Here is a trivial patch to processor.h to change "extern" to "static". # -------------------------------------------- # 03/04/09 schlicht@uni-mannheim.de 1.1133.1.5 # [PATCH] i2c: fix compilation error for various i2c-devices # # Changed the i2c_adapter name definition to match the current interface. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1144 # User pointers are not just in another address space, they also # must never be dereferenced directly. Make that clear in the # attribute. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1145 # Add user pointer attributes to kernel/sys.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1146 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1147 # [PATCH] fix wait_on_buffer() debug code # # The wait_on_buffer() debug code is generating false warnings when called from # __block_prepare_write(). It is legal to wait on a zero-ref buffer when its # page is locked. The page lock keeps try_to_free_buffers() away. # # This debug code hasn't found any bugs yet. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1148 # [PATCH] Enforce gcc-2.95 as the minimum compiler requirement # # Now that sparc64 is using gcc-3.x we can disallow gcc-2.91, etc. # # Documentation/Changes already says 2.95.3, which is working fine for me. # # With this change, we no longer require that per-cpu data definitions be # initialised. That was a workaround for a bug in older gccs. So remove the # build infrastructure which was checking for that. # # Also, mention that nfs-utils-1.0.3 is required. It isn't required yet, but # will be once we enable larger dev_t: there is an interface for exportfs which # passes dev_t's into the kernel which breaks with larger dev_t. That # interface is old, deprecated and is not used in nfs-utils-1.0.3. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1149 # [PATCH] null-terminate the kmalloc tables # # From: David Mosberger # # The cache_sizes array needs to be NULL terminated, otherwise an oversized # kmalloc request runs off the end of the table. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1150 # [PATCH] remove nr_reverse_maps VM accounting # # Maintaining the `nr_reverse_maps' provides makes a small but # measurable decrease in page_add_rmap() overhead. # # I don't think it's a very useful metric, and it can be sort-of inferred from # slabinfo. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1151 # [PATCH] speed up rmap searching # # several functions in rmap.c are searching the ptes[] array fo find the first # non-null entry. # # Despite the fact tha the whole lot is in L1 cache, it is expensive, # especially on 128-byte cacheline machines. # # We can encode the index of the first non-null pte entry inside the # pte_chain's `next' field and remove those searches altogether. # # This reduces the rmap CPU tax by about 25% on a P4. For a total runtime # reduction of around 5% in the bash-script intensive test which I use. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1152 # [PATCH] misc rmap speedups # # Even a BUG_ON() makes a measurable difference. So remove some gratuitous # ones which will just trigger a null pointer deref anyway. # # Also remove some debug code which isn't really being maintained any more. # # Also replace (effectively): # # test_bit(N, foo); # set_bit(N, foo); # # with # # set_bit(N, foo); # test_bit(N, foo); # # In the first case we'll go onto the bus twice: once for the cache miss and # once to get exclusive write access. In the second case we only go on the bus # once. I think. Certainly this trick chaved 40% off the cost of # shrink_list() when I did it there... # # This patch is worth 1% or so on the bash script testing. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1153 # [PATCH] Replace the radix-tree rwlock with a spinlock # # Spinlocks don't have a buslocked unlock and are faster. # # On a P4, time to write a 4M file with 4M one-byte-write()s: # # Before: # 0.72s user 5.47s system 99% cpu 6.227 total # 0.76s user 5.40s system 100% cpu 6.154 total # 0.77s user 5.38s system 100% cpu 6.146 total # # After: # 1.09s user 4.92s system 99% cpu 6.014 total # 0.74s user 5.28s system 99% cpu 6.023 total # 1.03s user 4.97s system 100% cpu 5.991 total # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1154 # [PATCH] rmap comments # # From: Hugh Dickins # # Update a few locking comments in rmap.c. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1155 # [PATCH] fix unuse_pmd fixme # # From: Hugh Dickins # # try_to_unuse drop mmlist_lock across unuse_process (with pretty dance # of atomic_incs and mmputs of various mmlist markers, and a polite new # cond_resched there), so unuse_process can pte_chain_alloc(GFP_KERNEL) # and pass that down and down and down and down to unuse_pte: which # cannot succeed more than once on a given mm (make that explicit by # returning back up once succeeded). Preliminary checks moved up from # unuse_pte to unuse_pmd, and done more efficiently (avoid that extra # pte_file test added recently), swapoff spends far too long in here. # Updated locking comments and references to try_to_swap_out. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1156 # [PATCH] JBD pasting warning fix # # From: "Hua Zhong" # # Fix a token-pasting warning from recent gcc's # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1157 # [PATCH] task_vsize() speedup # # From: William Lee Irwin III # # task_vsize() mysteriously appeared on my profiles. This should remove it # from them by using the already in-use elsewhere for rlimit checks # mm->total_vm for the benefit of O(1) cachelines touched. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1158 # [PATCH] Allow panics and reboots at oops time. # # From: Russell Miller # # A BUG or an oops will often leave a machine in a useless state. There is no # way to remotely recover the machine from that state. # # The patch adds a /proc/sys/kernel/panic_on_oops sysctl which, when set, will # cause the x86 kernel to call panic() at the end of the oops handler. If the # user has also set /proc/sys/kernel/panic then a reboot will occur. # # The implementation will try to sleep for a while before panicing so the oops # info has a chance of hitting the logs. # # The implementation is designed so that other architectures can easily do this # in their oops handlers. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1159 # [PATCH] epoll cross-thread deletion fix # # From: Davide Libenzi # # # This fixes a bug that might happen having a thread doing epoll_wait() with # another thread doing epoll_ctl(EPOLL_CTL_DEL) and close(). The fast check # inside eventpoll_release() is good to not effect performace of code not # using epoll, but it requires get_file() to be called ( that can be avoided # by dropping the fast check ). I opted to keep the fast check and to have # epoll to call get_file() before the event send loop. I tested it on UP and # 2SMP with a bug-exploiting program provided by @pivia.com ( thx to them ) # and it looks fine. I also update the 2.4.20 epoll patch with this fix : # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1160 # [PATCH] Missing brelse() in ext2/ext3 extended attribute code # # From: Andreas Gruenbacher # # Missing brelse() in ext2/ext3 extended attribute code # # The ext2 and ext3 EA implementations fail to release a buffer_head if # the inode that is being accessed is sharing EAs with another inode, and # an attribute is set to the same value that it has already, like so: # # $ touch f g # $ setfattr -n user.test -v test f g # # (Now, both f and g refer to the same EA block.) # $ setfattr -n user.test -v test f # # With the bug, an "invalidate: busy buffer" or "invalidate: dirty # buffer" message will be logged when the file system is unmounted. This # patch fixes the problem. # # At the implementation level: # # The code was assuming that ext3_xattr_cache_find cannot return the same # block the inode already is associated with, so testing for (old_bh != # new_bh) would determine whether the old block is resued or an additional # bh is held. This is wrong if the EA block is used by multiple inodes (in # which case it stays in the cache), and the block isn't actually # modified. Instead of testing for (old_bh != new_bh), the code now does # a get_bh() in the branch that keeps the old block, which assures that # new_bh now is either NULL or a handle that must be released at the end # of ext3_xattr_set_handle2(). # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1161 # [PATCH] Make msync(MS_ASYNC) no longer start the I/O # # MS_ASYNC will currently wait on previously-submitted I/O, then start new I/O # and not wait on it. This can cause undesirable blocking if msync is called # rapidly against the same memory. # # So instead, change msync(MS_ASYNC) to not start any IO at all. Just flush # the pte dirty bits into the pageframe and leave it at that. # # The IO _will_ happen within a kupdate period. And the application can use # fsync() or fadvise(FADV_DONTNEED) if it actually wants to schedule the IO # immediately. # # (This has triggered an ext3 bug - the page's buffers get dirtied so fast # that kjournald keeps writing the buffers over and over for 10-20 seconds # before deciding to give up for some reason) # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1162 # [PATCH] struct address_space comments # # From: "Martin J. Bligh" # # Fix the commentary around the address_space fields. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1163 # [PATCH] task_lock commentary fixes # # From: Manfred Spraul # # Update and clarify the incorrect commentary around task_lock() # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1164 # [PATCH] 3c59x EISA tidyup # # From: Marc Zyngier # # The included patch helps 3c59x to display the correct identification # string (3c592 and 3c597 were displayed as 3c590). It also gets rid of # the EISA_bus reference, which is not needed anymore since the driver # has been ported to the EISA probing API. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1165 # [PATCH] fix file leak in fadvise() # # It can miss an fput() if passed the fd of a file which has no ->mapping. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1166 # Tag more user-supplied path strings as being user pointers for # type evaluation. This tags the system call interfaces in # fs/open.c, fs/dcache.c and mm/swapfile.c - and tags the path # walking helper functions. # -------------------------------------------- # 03/04/09 davidm@tiger.hpl.hp.com 1.1033.9.5 # ia64: Initial sync with 2.5.67. # -------------------------------------------- # 03/04/09 torvalds@penguin.transmeta.com 1.1167 # Merge http://lia64.bkbits.net/to-linus-2.5 # into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1133.1.6 # i2c: clean up i2c-dev.c's formatting, DEBUG, and ioctl mess # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.1 # [SPARC]: Cleanup uaccess headers and add __user attributes. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.2 # [SPARC]: Make SA_ signal mask values explicitly unsigned. # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1168 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.3 # [SPARC64]: Fix copy_in_user args in process.c # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.4 # [SPARC64]: Use __user in ioctl32.c # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1033.7.2 # [PATCH] USB: fix uss720 driver to work properly with recent parport changes. # -------------------------------------------- # 03/04/09 davej@codemonkey.org.uk 1.1033.2.3 # [AGPGART] Fold Intel i7x05 GART into intel-agp driver. # Also includes various other fixes from Matt Tolentino # -------------------------------------------- # 03/04/09 davej@codemonkey.org.uk 1.1033.2.4 # [AGPGART] ia64 related AGP fixes from David Mosberger. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1033.2.5 # [AGPGART] Missing C99 struct initialiser for x86-64 GART # -------------------------------------------- # 03/04/10 davej@tetrachloride.(none) 1.1167.1.1 # Merge tetrachloride.(none):/mnt/raid/src/kernel/2.5/bk-linus # into tetrachloride.(none):/mnt/raid/src/kernel/2.5/agpgart # -------------------------------------------- # 03/04/09 baldrick@wanadoo.fr 1.1033.7.3 # [PATCH] USB speedtouch Kconfig fix; CREDITS entry out of order # # Follow the style of other entries in Kconfig. # # CREDITS | 8 ++++---- # drivers/usb/misc/Kconfig | 2 +- # 2 files changed, 5 insertions(+), 5 deletions(-) # -------------------------------------------- # 03/04/09 legoll@free.fr 1.1033.7.4 # [PATCH] USB: New USB serial device ID: Asus A600 PDA cradle # # Just managed to get usb-serial connection up and running # with my Asus PDA, great work ! # # If you want to integrate the patches into the kernel tree, # please do so. # -------------------------------------------- # 03/04/09 oliver@neukum.org 1.1033.7.5 # [PATCH] USB: remove unnecessary setting of configuration from audio # # audio should not mess with configurations. # -------------------------------------------- # 03/04/09 jcdutton@users.sourceforge.net 1.1033.7.6 # [PATCH] USB: Add support for Pentax Still Camera to linux kernel. # -------------------------------------------- # 03/04/09 baldrick@wanadoo.fr 1.1033.7.7 # [PATCH] USB speedtouch: don't open a connection if no firmware # # How about this one instead. MOD_INC_USE_COUNT is placed before I call # any functions that can sleep. Let's just hope that the call to me doesn't # come after some sleeping in the higher layers... # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.2 # [AGPGART] Kconfig cleanups. (Remove no longer needed E7x05 entries) # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.3 # [AGPGART] Remove CONFIG_AGP3. # This optioned saved just a handful of bytes, and uglied up the code # quite a lot. Saving less than a page of memory is not as important as # maintainable code. # -------------------------------------------- # 03/04/09 paulus@samba.org 1.1169 # [PATCH] i2c: Add driver for powermac keywest i2c interface # # Here is a patch that adds an i2c bus driver for the i2c interface # found in the "KeyWest" and later combo-I/O chips used in powermacs. # The patch is against Linus' current BK tree. # -------------------------------------------- # 03/04/09 shemminger@osdl.org 1.1166.2.1 # [VLAN]: More device registry error handling fixes. # -------------------------------------------- # 03/04/09 yoshfuji@linux-ipv6.org 1.1166.2.2 # [IPV{4,6}]: Convert from MOD_{INC,DEC}_USE_COUNT. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.4 # [AGPGART] x86-64 Kconfig fixes. # Offering the K7 GARTs on 64bit kernels causes sillyness, like reports of # "unrecognised device, try unsupported". We don't want people to even try # that, so don't offer it in the first place. # # There's really no good reason for offering any of the IA32 era GARTs on a # x86-64 64bit kernel. If Intel (or whoever) ever do an x86-64 clone, a new # gart driver will be started anyways, as has been done for amd-k8-agp. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.5 # [AGPGART] Print banner on detecting AMD64 GART. # All the other GART drivers display what they've found, so make this # one follow suit. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.6 # [AGPGART] update stale comment in x86-64 GART driver. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.1 # Annotate sysct with user pointer annotations # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.2 # Annotate kernel/time.c with user pointer annotations # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.3 # Annotate uid16 with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.4 # Annotate kernel/ptrace.c with user pointer information # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.5 # [SPARC]: __user tagging in sys_sparc.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.5 # Annotate kernel/printk.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.6 # Fix bad prototypes in kernel/softirq.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.7 # Fix kernel/posix-timers.c: # - bad preprocessor test always tested true, even when it shouldn't. # - annotate user pointers with proper annotations. # # Both found by my automatic type checker tool. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.7 # Merge bk://linux-dj.bkbits.net/agpgart # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.8 # Merge from DRI CVS: Use the list_entry() macro instead of depending # on the list-head being at the top of the DRI data structures and # using hard casts. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.6 # [SPARC]: __user attributes in signal handling. # -------------------------------------------- # 03/04/09 rusty@rustcorp.com.au 1.1166.2.3 # [NETFILTER]: Push skb linearization deeper inside of implementation. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.9 # Annotate fs/stat.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.10 # Annotate kernel/futex.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.11 # Annotate kernel/itimer.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.12 # Annotate read/write paths with user pointer annotations # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.1 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.4.1 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.2 # [sparc]: Fix typo in uaccess.h # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.3 # [sparc]: Add missing const qualifiers to uaccess.h # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.4 # [sparc]: Make sure -m32 gets added to AFLAGS when needed. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.5 # [SIGINFO]: asm-generic/siginfo.h needs linux/compiler.h # -------------------------------------------- # 03/04/09 davem@kernel.bkbits.net 1.1167.1.13 # Merge davem@nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # into kernel.bkbits.net:/home/davem/sparc-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.4.2 # [IPV4]: Do proper netdev module refcounting in tunnel drivers. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.4.3 # [IPV6]: Apply ipv4 tunnel module fixes to SIT driver. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.4.4 # [IPV6]: Typo, try_get_module --> try_module_get. # -------------------------------------------- # 03/04/10 davem@kernel.bkbits.net 1.1167.5.1 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/10 shemminger@osdl.org 1.1167.4.5 # [BRIDGE]: Fix several locking bugs, plus cleanups. # -------------------------------------------- # 03/04/10 perex@suse.cz 1.1166.3.1 # ALSA update # - documentation # - control API - added multi-elements to reduce memory usage # - improved preallocation of DMA buffers # - CS46xx driver - added support for secondary codec # - HDSP driver - big update # - firmware is loaded with hdsptool now # - pmac driver updates (fixed oops and beep stuff) # - VIA82xx driver updated # - ymfpci driver updated # - drivers updated to new PnP layer # - wavefront, ad1816a, cs423x, es18xx, interwave, opl3sa2, cmi8330 # # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.6.1 # [AGPGART] Fix up AMD64 references. # Spotted by Andi Kleen. AMD64 is the architecture, not the CPU. # -------------------------------------------- # 03/04/10 perex@suse.cz 1.1166.3.2 # ALSA and PnP update # - compilation fixes # - enhanced linux/pnp.h: # pnp_device_is_isapnp(dev) # pnp_device_is_pnpbios(dev) # isapnp_card_number(dev) # isapnp_csn_number(dev) # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.1 # Clean up types and remove unnecessary casts from fs/readdir.c. # # Add user pointer annotations. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.2 # Add user pointer annotations to fs/seq_file.c # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.3 # Add user pointer annotations to fs/super.c # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.6.2 # [AGPGART] Remove unnecessary AGP printk's in DRM. # If we build >1 DRM driver into the kernel, we get this lovely output.. # # [drm] Initialized tdfx 1.0.0 20010216 on minor 0 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized r128 2.3.0 20021029 on minor 1 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized radeon 1.8.0 20020828 on minor 2 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized mga 3.1.0 20021029 on minor 3 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized i810 1.2.1 20020211 on minor 4 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized i830 1.3.2 20021108 on minor 5 # # agpgart already outputs the info about the aperture address & size # before drm initialises, so its just repetition for no purpose. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.4 # Merge http://linux-sound.bkbits.net/linux-sound # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.5.2 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.1.14 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.1.15 # Merge bk://linux-dj.bkbits.net/agpgart # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@penguin.transmeta.com 1.1167.1.16 # Add user pointer annotations to fs/select.c # -------------------------------------------- # 03/04/10 torvalds@penguin.transmeta.com 1.1167.1.17 # Add a user pointer annotation to sysinfo() # -------------------------------------------- # 03/04/10 gandalf@netfilter.org 1.1167.4.6 # [NETFILTER]: Fix modify-after-free bug in ip_conntrack. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.8.1 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.9.1 # [ALSA]: Recent merge undid all of my build fixes, put them back in. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.8.2 # [SCHED]: Some schedulers forget to flush filter list at destroy. # -------------------------------------------- # 03/04/10 jef@linuxbe.org 1.1167.8.3 # [IPSEC]: Check xfrm state expiration on input after replay check. # -------------------------------------------- # 03/04/10 jmorris@intercode.com.au 1.1167.8.4 # [IPSEC]: Add initial IPCOMP support. # -------------------------------------------- # 03/04/10 ehabkost@conectiva.com.br 1.1167.9.2 # [SPARC]: Export phys_base on sparc32. # -------------------------------------------- # 03/04/10 dlstevens@us.ibm.com 1.1167.8.5 # [IPV4]: IGMPv3 support, with help from Vinay Kulkarni # -------------------------------------------- # 03/04/10 mrr@nexthop.com 1.1167.8.6 # [IPV6]: Allow protocol to percolate up into rt6 routing operations. # -------------------------------------------- # 03/04/11 davem@nuts.ninka.net 1.1167.8.7 # [IPV4]: Fix IGMP build with CONFIG_IP_MULTICAST disabled. # -------------------------------------------- # 03/04/11 davem@nuts.ninka.net 1.1167.8.8 # [PKTSCHED]: Fix double-define of __inline__ et al. # -------------------------------------------- # 03/04/10 davem@kernel.bkbits.net 1.1167.1.18 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1167.10.1 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1167.1.19 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1167.1.20 # Make sure to kunmap() the right address in fs/nfs/dir.c. # # Found by Rik van Riel: # # "There's a serious bug in the handling of the pointer returned # by kmap_atomic() in nfs/dir.c. The pointer (part of desc) is # passed into find_dirent_name and from there into dir_decode, # which modifies the pointer. # # That means you end up passing a wrong address to kunmap_atomic()." # -------------------------------------------- # 03/04/11 oliver@neukum.org 1.1033.7.8 # [PATCH] USB: remove configuration change from rtl8150 # # there's no reason this driver should mess with configurations. # -------------------------------------------- # 03/04/11 oliver@neukum.org 1.1033.7.9 # [PATCH] USB: remove configuration change from pegasus.c # # the driver should not mess with configurations here. # -------------------------------------------- # 03/04/11 kronos@kronoz.cjb.net 1.1170 # [PATCH] i2c: Add i2c-viapro.c driver # -------------------------------------------- # 03/04/11 greg@kroah.com 1.1171 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/11 greg@kroah.com 1.1167.1.21 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1172 # Merge bk://kernel.bkbits.net/gregkh/linux/linus-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 bcollins@debian.org 1.1173 # [PATCH] IEEE-1394/Firewire updates # # - Convert nodemgr to new driver model. # - Convert to new module_param() calls. # - Merged fixes for devfs mkdir and some sleep-in-atomic fixes from # mainline 2.5-bk # - Fix possible memory corruption on highlevel local read/write. # - Fix bitmap usage for some bitops. # - Fix bug in closing ISO stream. # - Fixes for nodemgr probing in the event of a reset storm. # - Workaround for nForce2 firewire chipset. This is preliminary. # - Conversion of SBP-2 to use new driver model in nodemgr, including # providing a driver for firewire unit directories and registering # proper callbacks. # -------------------------------------------- # 03/04/11 george@mvista.com 1.1174 # [PATCH] too much timer simplification... # # Noted by David Mosberger: # # "If someone happens to arm a periodic timer at exactly 256 jiffies (as # ohci happens to do on platforms with HZ=1024), then you end up getting # an endless loop of timer activations, causing a machine hang. # # The problem is that __run_timers updates base->timer_jiffies _before_ # running the callback routines. If a callback re-arms the timer at # exactly 256 jiffies, add_timers() will reinsert the timer into the list # that we're currently processing, which of course will cause the timer to # expire immediately again, etc., etc., ad naseum... " # # The answer here is to move the whole expired list to a local header and # to not look back. # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1175 # Annotate sys_uselib() with user pointer annotation # -------------------------------------------- # 03/04/11 akpm@digeo.com 1.1167.11.1 # [IPV4]: Fix bootup lockup when !CONFIG_IP_MULTICAST. # -------------------------------------------- # 03/04/11 shemminger@osdl.org 1.1167.11.2 # [BRIDGE]: Kill excessive stack usage in br_ioctl. # -------------------------------------------- # 03/04/11 shemminger@osdl.org 1.1167.11.3 # [EBTABLES]: Get rid of brlock in ebtable_broute. # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.1167.11.4 # [IPSEC]: Add ipv4 tunnel transformer. # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.1167.11.5 # [IGMP]: Dont dork with igmp timers on device down if not CONFIG_IP_MULTICAST. # -------------------------------------------- # 03/04/12 davem@kernel.bkbits.net 1.1176 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/12 bcollins@debian.org 1.1177 # [PATCH] Fix module param decleration in pcilynx # -------------------------------------------- # diff -Nru a/CREDITS b/CREDITS --- a/CREDITS Sat Apr 12 14:44:09 2003 +++ b/CREDITS Sat Apr 12 14:44:09 2003 @@ -2750,6 +2750,10 @@ E: wsalamon@nai.com D: portions of the Linux Security Module (LSM) framework and security modules +N: Robert Sanders +E: gt8134b@prism.gatech.edu +D: Dosemu + N: Duncan Sands E: duncan.sands@wanadoo.fr W: http://topo.math.u-psud.fr/~sands @@ -2757,10 +2761,6 @@ S: 69 rue Dunois S: 75013 Paris S: France - -N: Robert Sanders -E: gt8134b@prism.gatech.edu -D: Dosemu N: Hannu Savolainen E: hannu@opensound.com diff -Nru a/Documentation/Changes b/Documentation/Changes --- a/Documentation/Changes Sat Apr 12 14:44:10 2003 +++ b/Documentation/Changes Sat Apr 12 14:44:10 2003 @@ -62,6 +62,7 @@ o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version o procps 2.0.9 # ps --version o oprofile 0.5 # oprofiled --version +o nfs-utils 1.0.3 # showmount --version Kernel compilation ================== diff -Nru a/Documentation/DocBook/usb.tmpl b/Documentation/DocBook/usb.tmpl --- a/Documentation/DocBook/usb.tmpl Sat Apr 12 14:44:10 2003 +++ b/Documentation/DocBook/usb.tmpl Sat Apr 12 14:44:10 2003 @@ -100,7 +100,8 @@ USB Host-Side API Model - Host-side drivers for USB devices talk to the "usbcore" APIs. + Within the kernel, + host-side drivers for USB devices talk to the "usbcore" APIs. There are two types of public "usbcore" APIs, targetted at two different layers of USB driver. Those are general purpose drivers, exposed through @@ -287,6 +288,684 @@ !Edrivers/usb/core/hcd.c !Edrivers/usb/core/hcd-pci.c !Edrivers/usb/core/buffer.c + + + + The USB Filesystem (usbfs) + + This chapter presents the Linux usbfs. + You may prefer to avoid avoid writing new kernel code for your + USB driver; that's the problem that usbfs set out to solve. + User mode device drivers are usually packaged as applications + or libraries, and may use usbfs through some programming library + that wraps it. Such libraries include + libusb + for C/C++, and + jUSB for Java. + + + Unfinished + This particular documentation is incomplete, + especially with respect to the asynchronous mode. + As of kernel 2.5.66 the code and this (new) documentation + need to be cross-reviewed. + + + + Configure usbfs into Linux kernels by enabling the + USB filesystem option (CONFIG_USB_DEVICEFS), + and you get basic support for user mode USB device drivers. + Until relatively recently it was often (confusingly) called + usbdevfs although it wasn't solving what + devfs was. + Every USB device will appear in usbfs, regardless of whether or + not it has a kernel driver; but only devices with kernel drivers + show up in devfs. + + + + What files are in "usbfs"? + + Conventionally mounted at + /proc/bus/usb, usbfs + features include: + + /proc/bus/usb/devices + ... a text file + showing each of the USB devices on known to the kernel, + and their configuration descriptors. + You can also poll() this to learn about new devices. + + /proc/bus/usb/BBB/DDD + ... magic files + exposing the each device's configuration descriptors, and + supporting a series of ioctls for making device requests, + including I/O to devices. (Purely for access by programs.) + + + + + Each bus is given a number (BBB) based on when it was + enumerated; within each bus, each device is given a similar + number (DDD). + Those BBB/DDD paths are not "stable" identifiers; + expect them to change even if you always leave the devices + plugged in to the same hub port. + Don't even think of saving these in application + configuration files. + Stable identifiers are available, for user mode applications + that want to use them. HID and networking devices expose + these IDs. + + + + + + Mounting and Access Control + + There are a number of mount options for usbfs, which will + be of most interest to you if you need to override the default + access control policy. + That policy is that only root may read or write device files + (/proc/bus/BBB/DDD) although anyone may read + the devices + or drivers files. + I/O requests to the device also need the CAP_SYS_RAWIO capability, + + + The significance of that is that by default, all user mode + device drivers need super-user privileges. + You can change modes or ownership in a driver setup + when the device hotplugs, or maye just start the + driver right then, as a privileged server (or some activity + within one). + That's the most secure approach for multi-user systems, + but for single user systems ("trusted" by that user) + it's more convenient just to grant everyone all access + (using the devmode=0666 option) + so the driver can start whenever it's needed. + + + The mount options for usbfs, usable in /etc/fstab or + in command line invocations of mount, are: + + + + busgid=NNNNN + Controls the GID used for the + /proc/bus/usb/BBB + directories. (Default: 0) + busmode=MMM + Controls the file mode used for the + /proc/bus/usb/BBB + directories. (Default: 0555) + + busuid=NNNNN + Controls the UID used for the + /proc/bus/usb/BBB + directories. (Default: 0) + + devgid=NNNNN + Controls the GID used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0) + devmode=MMM + Controls the file mode used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0644) + devuid=NNNNN + Controls the UID used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0) + + listgid=NNNNN + Controls the GID used for the + /proc/bus/usb/devices and drivers files. + (Default: 0) + listmode=MMM + Controls the file mode used for the + /proc/bus/usb/devices and drivers files. + (Default: 0444) + listuid=NNNNN + Controls the UID used for the + /proc/bus/usb/devices and drivers files. + (Default: 0) + + + + + Note that many Linux distributions hard-wire the mount options + for usbfs in their init scripts, such as + /etc/rc.d/rc.sysinit, + rather than making it easy to set this per-system + policy in /etc/fstab. + + + + + + /proc/bus/usb/devices + + This file is handy for status viewing tools in user + mode, which can scan the text format and ignore most of it. + More detailed device status (including class and vendor + status) is available from device-specific files. + For information about the current format of this file, + see the + Documentation/usb/proc_usb_info.txt + file in your Linux kernel sources. + + + Otherwise the main use for this file from programs + is to poll() it to get notifications of usb devices + as they're plugged or unplugged. + To see what changed, you'd need to read the file and + compare "before" and "after" contents, scan the filesystem, + or see its hotplug event. + + + + + + /proc/bus/usb/BBB/DDD + + Use these files in one of these basic ways: + + + They can be read, + producing first the device descriptor + (18 bytes) and then the descriptors for the current configuration. + See the USB 2.0 spec for details about those binary data formats. + You'll need to convert most multibyte values from little endian + format to your native host byte order, although a few of the + fields in the device descriptor (both of the BCD-encoded fields, + and the vendor and product IDs) will be byteswapped for you. + Note that configuration descriptors include descriptors for + interfaces, altsettings, endpoints, and maybe additional + class descriptors. + + + Perform USB operations using + ioctl() requests to make endpoint I/O + requests (synchronously or asynchronously) or manage + the device. + These requests need the CAP_SYS_RAWIO capability, + as well as filesystem access permissions. + Only one ioctl request can be made on one of these + device files at a time. + This means that if you are synchronously reading an endpoint + from one thread, you won't be able to write to a different + endpoint from another thread until the read completes. + This works for half duplex protocols, + but otherwise you'd use asynchronous i/o requests. + + + + + + + Life Cycle of User Mode Drivers + + Such a driver first needs to find a device file + for a device it knows how to handle. + Maybe it was told about it because a + /sbin/hotplug event handling agent + chose that driver to handle the new device. + Or maybe it's an application that scans all the + /proc/bus/usb device files, and ignores most devices. + In either case, it should read() all + the descriptors from the device file, + and check them against what it knows how to handle. + It might just reject everything except a particular + vendor and product ID, or need a more complex policy. + + + Never assume there will only be one such device + on the system at a time! + If your code can't handle more than one device at + a time, at least detect when there's more than one, and + have your users choose which device to use. + + + Once your user mode driver knows what device to use, + it interacts with it in either of two styles. + The simple style is to make only control requests; some + devices don't need more complex interactions than those. + (An example might be software using vendor-specific control + requests for some initialization or configuration tasks, + with a kernel driver for the rest.) + + + More likely, you need a more complex style driver: + one using non-control endpoints, reading or writing data + and claiming exclusive use of an interface. + Bulk transfers are easiest to use, + but only their sibling interrupt transfers + work with low speed devices. + Both interrupt and isochronous transfers + offer service guarantees because their bandwidth is reserved. + Such "periodic" transfers are awkward to use through usbfs, + unless you're using the asynchronous calls. However, interrupt + transfers can also be used in a synchronous "one shot" style. + + + Your user-mode driver should never need to worry + about cleaning up request state when the device is + disconnected, although it should close its open file + descriptors as soon as it starts seeing the ENODEV + errors. + + + + + The ioctl() Requests + + To use these ioctls, you need to include the following + headers in your userspace program: +#include <linux/usb.h> +#include <linux/usbdevice_fs.h> +#include <asm/byteorder.h> + The standard USB device model requests, from "Chapter 9" of + the USB 2.0 specification, are automatically included from + the <linux/usb_ch9.h> header. + + + Unless noted otherwise, the ioctl requests + described here will + update the modification time on the usbfs file to which + they are applied (unless they fail). + A return of zero indicates success; otherwise, a + standard USB error code is returned. (These are + documented in + Documentation/usb/error-codes.txt + in your kernel sources.) + + + Each of these files multiplexes access to several + I/O streams, one per endpoint. + Each device has one control endpoint (endpoint zero) + which supports a limited RPC style RPC access. + Devices are configured + by khubd (in the kernel) setting a device-wide + configuration that affects things + like power consumption and basic functionality. + The endpoints are part of USB interfaces, + which may have altsettings + affecting things like which endpoints are available. + Many devices only have a single configuration and interface, + so drivers for them will ignore configurations and altsettings. + + + + + Management/Status Requests + + A number of usbfs requests don't deal very directly + with device I/O. + They mostly relate to device management and status. + These are all synchronous requests. + + + + + USBDEVFS_CLAIMINTERFACE + This is used to force usbfs to + claim a specific interface, + which has not previously been claimed by usbfs or any other + kernel driver. + The ioctl parameter is an integer holding the number of + the interface (bInterfaceNumber from descriptor). + + Note that if your driver doesn't claim an interface + before trying to use one of its endpoints, and no + other driver has bound to it, then the interface is + automatically claimed by usbfs. + + This claim will be released by a RELEASEINTERFACE ioctl, + or by closing the file descriptor. + File modification time is not updated by this request. + + + USBDEVFS_CONNECTINFO + Says whether the device is lowspeed. + The ioctl parameter points to a structure like this: +struct usbdevfs_connectinfo { + unsigned int devnum; + unsigned char slow; +}; + File modification time is not updated by this request. + + You can't tell whether a "not slow" + device is connected at high speed (480 MBit/sec) + or just full speed (12 MBit/sec). + You should know the devnum value already, + it's the DDD value of the device file name. + + + USBDEVFS_GETDRIVER + Returns the name of the kernel driver + bound to a given interface (a string). Parameter + is a pointer to this structure, which is modified: +struct usbdevfs_getdriver { + unsigned int interface; + char driver[USBDEVFS_MAXDRIVERNAME + 1]; +}; + File modification time is not updated by this request. + + + USBDEVFS_IOCTL + Passes a request from userspace through + to a kernel driver that has an ioctl entry in the + struct usb_driver it registered. +struct usbdevfs_ioctl { + int ifno; + int ioctl_code; + void *data; +}; + +/* user mode call looks like this. + * 'request' becomes the driver->ioctl() 'code' parameter. + * the size of 'param' is encoded in 'request', and that data + * is copied to or from the driver->ioctl() 'buf' parameter. + */ +static int +usbdev_ioctl (int fd, int ifno, unsigned request, void *param) +{ + struct usbdevfs_ioctl wrapper; + + wrapper.ifno = ifno; + wrapper.ioctl_code = request; + wrapper.data = param; + + return ioctl (fd, USBDEVFS_IOCTL, &wrapper); +} + File modification time is not updated by this request. + + This request lets kernel drivers talk to user mode code + through filesystem operations even when they don't create + a charactor or block special device. + It's also been used to do things like ask devices what + device special file should be used. + Two pre-defined ioctls are used + to disconnect and reconnect kernel drivers, so + that user mode code can completely manage binding + and configuration of devices. + + + USBDEVFS_RELEASEINTERFACE + This is used to release the claim usbfs + made on interface, either implicitly or because of a + USBDEVFS_CLAIMINTERFACE call, before the file + descriptor is closed. + The ioctl parameter is an integer holding the number of + the interface (bInterfaceNumber from descriptor); + File modification time is not updated by this request. + + No security check is made to ensure + that the task which made the claim is the one + which is releasing it. + This means that user mode driver may interfere + other ones. + + + USBDEVFS_RESETEP + Resets the data toggle value for an endpoint + (bulk or interrupt) to DATA0. + The ioctl parameter is an integer endpoint number + (1 to 15, as identified in the endpoint descriptor), + with USB_DIR_IN added if the device's endpoint sends + data to the host. + + Avoid using this request. + It should probably be removed. + Using it typically means the device and driver will lose + toggle synchronization. If you really lost synchronization, + you likely need to completely handshake with the device, + using a request like CLEAR_HALT + or SET_INTERFACE. + + + + + + + + Synchronous I/O Support + + Synchronous requests involve the kernel blocking + until until the user mode request completes, either by + finishing successfully or by reporting an error. + In most cases this is the simplest way to use usbfs, + although as noted above it does prevent performing I/O + to more than one endpoint at a time. + + + + + USBDEVFS_BULK + Issues a bulk read or write request to the + device. + The ioctl parameter is a pointer to this structure: +struct usbdevfs_bulktransfer { + unsigned int ep; + unsigned int len; + unsigned int timeout; /* in milliseconds */ + void *data; +}; + The "ep" value identifies a + bulk endpoint number (1 to 15, as identified in an endpoint + descriptor), + masked with USB_DIR_IN when referring to an endpoint which + sends data to the host from the device. + The length of the data buffer is identified by "len"; + Recent kernels support requests up to about 128KBytes. + FIXME say how read length is returned, + and how short reads are handled.. + + + USBDEVFS_CLEAR_HALT + Clears endpoint halt (stall) and + resets the endpoint toggle. This is only + meaningful for bulk or interrupt endpoints. + The ioctl parameter is an integer endpoint number + (1 to 15, as identified in an endpoint descriptor), + masked with USB_DIR_IN when referring to an endpoint which + sends data to the host from the device. + + Use this on bulk or interrupt endpoints which have + stalled, returning -EPIPE status + to a data transfer request. + Do not issue the control request directly, since + that could invalidate the host's record of the + data toggle. + + + USBDEVFS_CONTROL + Issues a control request to the device. + The ioctl parameter points to a structure like this: +struct usbdevfs_ctrltransfer { + __u8 bRequestType; + __u8 bRequest; + __u16 wValue; + __u16 wIndex; + __u16 wLength; + __u32 timeout; /* in milliseconds */ + void *data; +}; + + The first eight bytes of this structure are the contents + of the SETUP packet to be sent to the device; see the + USB 2.0 specification for details. + The bRequestType value is composed by combining a + USB_TYPE_* value, a USB_DIR_* value, and a + USB_RECIP_* value (from + <linux/usb.h>). + If wLength is nonzero, it describes the length of the data + buffer, which is either written to the device + (USB_DIR_OUT) or read from the device (USB_DIR_IN). + + At this writing, you can't transfer more than 4 KBytes + of data to or from a device; usbfs has a limit, and + some host controller drivers have a limit. + (That's not usually a problem.) + Also there's no way to say it's + not OK to get a short read back from the device. + + + USBDEVFS_RESET + Does a USB level device reset. + The ioctl parameter is ignored. + After the reset, this rebinds all device interfaces. + File modification time is not updated by this request. + + Avoid using this call + until some usbcore bugs get fixed, + since it does not fully synchronize device, interface, + and driver (not just usbfs) state. + + + USBDEVFS_SETINTERFACE + Sets the alternate setting for an + interface. The ioctl parameter is a pointer to a + structure like this: +struct usbdevfs_setinterface { + unsigned int interface; + unsigned int altsetting; +}; + File modification time is not updated by this request. + + Those struct members are from some interface descriptor + applying to the the current configuration. + The interface number is the bInterfaceNumber value, and + the altsetting number is the bAlternateSetting value. + (This resets each endpoint in the interface.) + + + USBDEVFS_SETCONFIGURATION + Issues the + usb_set_configuration call + for the device. + The parameter is an integer holding the number of + a configuration (bConfigurationValue from descriptor). + File modification time is not updated by this request. + + Avoid using this call + until some usbcore bugs get fixed, + since it does not fully synchronize device, interface, + and driver (not just usbfs) state. + + + + + + + Asynchronous I/O Support + + As mentioned above, there are situations where it may be + important to initiate concurrent operations from user mode code. + This is particularly important for periodic transfers + (interrupt and isochronous), but it can be used for other + kinds of USB requests too. + In such cases, the asynchronous requests described here + are essential. Rather than submitting one request and having + the kernel block until it completes, the blocking is separate. + + + These requests are packaged into a structure that + resembles the URB used by kernel device drivers. + (No POSIX Async I/O support here, sorry.) + It identifies the endpoint type (USBDEVFS_URB_TYPE_*), + endpoint (number, masked with USB_DIR_IN as appropriate), + buffer and length, and a user "context" value serving to + uniquely identify each request. + (It's usually a pointer to per-request data.) + Flags can modify requests (not as many as supported for + kernel drivers). + + + Each request can specify a realtime signal number + (between SIGRTMIN and SIGRTMAX, inclusive) to request a + signal be sent when the request completes. + + + When usbfs returns these urbs, the status value + is updated, and the buffer may have been modified. + Except for isochronous transfers, the actual_length is + updated to say how many bytes were transferred; if the + USBDEVFS_URB_DISABLE_SPD flag is set + ("short packets are not OK"), if fewer bytes were read + than were requested then you get an error report. + + +struct usbdevfs_iso_packet_desc { + unsigned int length; + unsigned int actual_length; + unsigned int status; +}; + +struct usbdevfs_urb { + unsigned char type; + unsigned char endpoint; + int status; + unsigned int flags; + void *buffer; + int buffer_length; + int actual_length; + int start_frame; + int number_of_packets; + int error_count; + unsigned int signr; + void *usercontext; + struct usbdevfs_iso_packet_desc iso_frame_desc[]; +}; + + For these asynchronous requests, the file modification + time reflects when the request was initiated. + This contrasts with their use with the synchronous requests, + where it reflects when requests complete. + + + + + USBDEVFS_DISCARDURB + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_DISCSIGNAL + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_REAPURB + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_REAPURBNDELAY + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_SUBMITURB + + TBS + + + + + + + + diff -Nru a/Documentation/io_ordering.txt b/Documentation/io_ordering.txt --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/io_ordering.txt Sat Apr 12 14:44:10 2003 @@ -0,0 +1,47 @@ +On some platforms, so-called memory-mapped I/O is weakly ordered. On such +platforms, driver writers are responsible for ensuring that I/O writes to +memory-mapped addresses on their device arrive in the order intended. This is +typically done by reading a 'safe' device or bridge register, causing the I/O +chipset to flush pending writes to the device before any reads are posted. A +driver would usually use this technique immediately prior to the exit of a +critical section of code protected by spinlocks. This would ensure that +subsequent writes to I/O space arrived only after all prior writes (much like a +memory barrier op, mb(), only with respect to I/O). + +A more concrete example from a hypothetical device driver: + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + ... + +In the case above, the device may receive newval2 before it receives newval, +which could cause problems. Fixing it is easy enough though: + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: (void)readl(safe_register); /* maybe a config register? */ +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: (void)readl(safe_register); /* maybe a config register? */ +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + +Here, the reads from safe_register will cause the I/O chipset to flush any +pending writes before actually posting the read to the chipset, preventing +possible data corruption. diff -Nru a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl Sat Apr 12 14:44:07 2003 +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl Sat Apr 12 14:44:07 2003 @@ -18,8 +18,8 @@ - Dec. 27, 2002 - 0.2 (reborn at Christmas) + Mar. 26, 2003 + 0.3 @@ -30,7 +30,7 @@ - Copyright (c) 2002 Takashi Iwai tiwai@suse.de + Copyright (c) 2002, 2003 Takashi Iwai tiwai@suse.de @@ -1425,11 +1425,11 @@
Resource Allocation - The allocation of ports and irqs are done via standard kernel + The allocation of I/O ports and irqs are done via standard kernel functions. Unlike ALSA ver.0.5.x., there are no helpers for that. And these resources must be released in the destructor - function (see below). Also, on ALSA 0.9.x, you don't need - allocate (pseudo-)DMA for PCI like 0.5.x. + function (see below). Also, on ALSA 0.9.x, you don't need to + allocate (pseudo-)DMA for PCI like ALSA 0.5.x. @@ -1461,7 +1461,7 @@ since irq 0 is valid. The port address and its resource pointer can be initialized as null by snd_magic_kcalloc() automatically, so you - don't have to take care of it. + don't have to take care of resetting them. @@ -2227,79 +2227,157 @@
-
- Operators - - OK, now let me explain the detail of each pcm callback - (ops). In general, every callback must - return 0 if successful, or a negative number with the error - number such as -EINVAL at any - error. - - - - The callback function takes at least the argument with - snd_pcm_substream_t pointer. For retrieving the - chip record from the given substream instance, you can use the - following macro. - - - - - - - - - - It's expanded with a magic-cast, so the cast-error is - automatically checked. You should define chip_t at - the beginning of the code, since this will be referred in many - places of pcm and control interfaces. - +
+ Runtime Pointer - The Chest of PCM Information + + When the PCM substream is opened, a PCM runtime instance is + allocated and assigned to the substream. This pointer is + accessible via substream->runtime. + This runtime pointer holds the various information; it holds + the copy of hw_params and sw_params configurations, the buffer + pointers, mmap records, spinlocks, etc. Almost everyhing you + need for controlling the PCM can be found there. + -
- open callback - + + The definition of runtime instance is found in + <sound/pcm.h>. Here is the + copy from the file. + - This is called when a pcm substream is opened. - + + For the operators (callbacks) of each sound driver, most of + these records are supposed to be read-only. Only the PCM + middle-layer changes / updates these info. The excpetions are + the hardware description (hw), interrupt callbacks + (transfer_ack_xxx), DMA buffer information, and the private + data. Besides, if you use the standard buffer allocation + method via snd_pcm_lib_malloc_pages(), + you don't need to set the DMA buffer information by yourself. + - - At least, here you have to initialize the runtime hardware - record. Typically, this is done by like this: + + In the sections below, important records are explained. + +
+ Hardware Description + + The hardware descriptor (snd_pcm_hardware_t) + contains the definitions of the fundamental hardware + configuration. Above all, you'll need to define this in + + the open callback. + Note that the runtime instance holds the copy of the + descriptor, not the pointer to the existing descriptor. That + is, in the open callback, you can modify the copied descriptor + (runtime->hw) as you need. For example, if the maximum + number of channels is 1 only on some chip models, you can + still use the same hardware descriptor and change the + channels_max later: runtime; - - runtime->hw = snd_mychip_playback_hw; - return 0; - } + ... + runtime->hw = snd_mychip_playback_hw; // common definition + if (chip->model == VERY_OLD_ONE) + runtime->hw.channels_max = 1; ]]> + - where snd_mychip_playback_hw is the - pre-defined hardware record. - + + Typically, you'll have a hardware descriptor like below: - The similar struct exists on ALSA 0.5.x driver, so you can - guess the values if you already wrote a driver. - - - + + The info field contains the type and capabilities of this pcm. The bit flags are defined in <sound/asound.h> as @@ -2366,6 +2441,17 @@ must handle the corresponding commands. + + When the PCM substreams can be synchronized (typically, + synchorinized start/stop of a playback and a capture streams), + you can give SNDRV_PCM_INFO_SYNC_START, + too. In this case, you'll need to check the linked-list of + PCM substreams in the trigger callback. This will be + described in the later section. + + + + formats field contains the bit-flags of supported formats (SNDRV_PCM_FMTBIT_XXX). @@ -2373,38 +2459,181 @@ bits. In the example above, the signed 16bit little-endian format is specified. + + rates field contains the bit-flags of supported rates (SNDRV_PCM_RATE_XXX). When the chip supports continuous rates, pass CONTINUOUS bit additionally. - The pre-defined rate bits are only for typical rates. If your - chip supports unconventional rates, you need to add - KNOT bit and set up the + The pre-defined rate bits are provided only for typical + rates. If your chip supports unconventional rates, you need to add + KNOT bit and set up the hardware constraint manually (explained later). + - - There have been many changes of terminology between - ALSA 0.5.x and 0.9.x. - On the ALSA 0.9.x world, period means what is - known as fragment in the OSS. It's the least - size of (a part of) the buffer to generate an interrupt. + + + rate_min and + rate_max define the minimal and + maximal sample rate. This should correspond somehow to + rates bits. + + + + + + channel_min and + channel_max + define, as you might already expected, the minimal and maximal + number of channels. + + + + + + buffer_bytes_max defines the + maximal buffer size in bytes. There is no + buffer_bytes_min field, since + it can be calculated from the minimal period size and the + minimal number of periods. + Meanwhile, period_bytes_min and + define the minimal and maximal size of the period in bytes. + periods_max and + periods_min define the maximal and + minimal number of periods in the buffer. - - Now, taking the new terminology into account, the other fields - are self-explanatory (I hope). Please note that here, both - min/max buffer and period sizes are specified in bytes. + + The period is a term, that corresponds to + fragment in the OSS world. The period defines the size at + which the PCM interrupt is generated. This size strongly + depends on the hardware. + Generally, the smaller period size will give you more + interrupts, that is, more controls. + In the case of capture, this size defines the input latency. + On the other hand, the whole buffer size defines the + output latency for the playback direction. + + + + + + There is also a field fifo_size. + This specifies the size of the hardware FIFO, but it's not + used currently in the driver nor in the alsa-lib. So, you + can ignore this field. + + + + +
+ +
+ PCM Configurations + + Ok, let's go back again to the PCM runtime records. + The most frequently referred records in the runtime instance are + the PCM configurations. + The PCM configurations are stored on runtime instance + after the application sends hw_params data via + alsa-lib. There are many fields copied from hw_params and + sw_params structs. For example, + format holds the format type + chosen by the application. This field contains the enum value + SNDRV_PCM_FORMAT_XXX. + + + + One thing to be noted is that the configured buffer and period + sizes are stored in frames in the runtime + In the ALSA world, 1 frame = channels * samples-size. + For conversion between frames and bytes, you can use the + helper functions, frames_to_bytes() and + bytes_to_frames(). + + +period_size); +]]> + + - - Some drivers allocate the private instance for each pcm - substream. It can be stored in - substream->runtime->private_data. - Since it's a void pointer, you - should use magic-kmalloc and magic-cast for such an object. + + Also, many software parameters (sw_params) are + stored in frames, too. Please check the type of the field. + snd_pcm_uframes_t is for the frames as unsigned + integer while snd_pcm_sframes_t is for the frames + as signed integer. + +
+ +
+ DMA Buffer Information + + The DMA buffer is defined by the following four fields, + dma_area, + dma_addr, + dma_bytes and + dma_private. + The dma_area holds the buffer + pointer (the logical address). You can call + memcpy from/to + this pointer. Meanwhile, dma_addr + holds the physical address of the buffer. This field is + specified only when the buffer is a linear buffer. + dma_bytes holds the size of buffer + in bytes. dma_private is used for + the ALSA DMA allocator. + + + + If you use a standard ALSA function, + snd_pcm_lib_malloc_pages(), for + allocating the buffer, these fields are set by the ALSA middle + layer, and you should not change them by + yourself. You can read them but not write them. + On the other hand, if you want to allocate the buffer by + yourself, you'll need to manage it in hw_params callback. + At least, dma_bytes is mandatory. + dma_area is necessary when the + buffer is mmapped. If your driver doesn't support mmap, this + field is not necessary. dma_addr + is also not mandatory. You can use + dma_private as you like, too. + +
+ +
+ Running Status + + The running status can be referred via runtime->status. + This is the pointer to snd_pcm_mmap_status_t + record. For example, you can get the current DMA hardware + pointer via runtime->status->hw_ptr. + + + + The DMA application pointer can be referred via + runtime->control, which points + snd_pcm_mmap_control_t record. + However, accessing directly to this value is not recommended. + +
+ +
+ Private Data + + You can allocate a record for the substream and store it in + runtime->private_data. Usually, this + done in + + the open callback. + Since it's a void pointer, you should use magic-kmalloc and + magic-cast for such an object. @@ -2423,8 +2652,110 @@ - The allocated object must be released in the close callback below. + The allocated object must be released in + + the close callback. +
+ +
+ Interrupt Callbacks + + The field transfer_ack_begin and + transfer_ack_end are called at + the beginning and the end of + snd_pcm_period_elapsed(), respectively. + +
+ +
+ +
+ Operators + + OK, now let me explain the detail of each pcm callback + (ops). In general, every callback must + return 0 if successful, or a negative number with the error + number such as -EINVAL at any + error. + + + + The callback function takes at least the argument with + snd_pcm_substream_t pointer. For retrieving the + chip record from the given substream instance, you can use the + following macro. + + + + + + + + + + It's expanded with a magic-cast, so the cast-error is + automatically checked. You should define chip_t at + the beginning of the code, since this will be referred in many + places of pcm and control interfaces. + + +
+ open callback + + + + + + + + This is called when a pcm substream is opened. + + + + At least, here you have to initialize the runtime->hw + record. Typically, this is done by like this: + + + +runtime; + + runtime->hw = snd_mychip_playback_hw; + return 0; + } +]]> + + + + where snd_mychip_playback_hw is the + pre-defined hardware description. + + + + You can allocate a private data in this callback, as described + in + Private Data section. + + + + If the hardware configuration needs more constraints, set the + hardware constraints here, too. + See + Constraints for more details. +
@@ -2622,23 +2953,6 @@ - Note that the period and the buffer sizes are stored in - frames. In the ALSA world, 1 frame = channels - * samples-size. For conversion between frames and bytes, you - can use the helper functions, - frames_to_bytes() and - bytes_to_frames(). - - - -period_size); -]]> - - - - - Be careful that this callback will be called many times at each set up, too. @@ -5115,6 +5429,217 @@ + + + + + + How To Put Your Driver Into ALSA Tree +
+ General + + So far, you've learned how to write the driver codes. + And you might have a question now: how to put my own + driver into the ALSA driver tree? + Here (finally :) the standard procedure is described briefly. + + + + Suppose that you'll create a new PCI driver for the card + xyz. The card module name would be + snd-xyz. The new driver is usually put into alsa-driver + tree. Then the driver is evaluated, audited and tested + by developers and users. After a certain time, the driver + will go to alsa-kernel tree and eventually integrated into + Linux 2.5 tree. + + + + In the following sections, the driver code is supposed + to be put into alsa-driver tree. The two cases are assumed: + a driver consisting of a single source file and one consisting + of several source files. + +
+ +
+ Driver with A Single Source File + + + + + Modify alsa-driver/pci/Makefile + + + + Suppose you have a file xyz.c. Add the following + two lines + + + + + + + + + + + Modify alsa-driver/acore/Makefile + + + + Here define the dependent modules. + + + + + + + If the driver supports PCM, snd-pcm.o, + snd-timer.o and snd-page-alloc.o + will be needed. + + + For rawmidi, snd-rawmidi.o is needed in addition. + The MIDI stuff is also related to the sequencer. + You'll need to modify alsa-driver/acore/seq/Makefile. + + + + For OPL3, snd-hwdep.o is needed, too. + It's involved with the sequencer, and as well as rawmidi, + you'll need to modify alsa-driver/acore/seq/Makefile + and acore/seq/instr/Makefile in addition. + Also, a new entry is necessary in + alsa-driver/drivers/opl3/Makefile. + + + + + + + Modify alsa-driver/utils/Modules.dep + + + + Add the module definition for configure, here. + The beginning of the line must be a vertical bar, following + the card module name (snd-xyz) and the list of its all + dependent modules. + + + + + + + + + + + + Run cvscompile script to re-generate the configure script and + build the whole stuff again. + + + + +
+ +
+ Drivers with Several Source Files + + Suppose that the driver snd-xyz have several source files. + They are located in the new subdirectory, + pci/xyz. + + + + + Add a new directory (xyz) to extra-subdir-y list in alsa-driver/pci/Makefile + + + + + + + + + + + + Under the directory xyz, create a Makefile + + + Sample Makefile for a driver xyz + + + + + + + + + + Modify alsa-driver/acore/Makefile + + + + This procedure is as same as in the last section. + + + + + + Modify alsa-driver/utils/Modules.dep + + + + + + + + + + + + + + Run cvscompile script to re-generate the configure script and + build the whole stuff again. + + + + +
+ +
diff -Nru a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt --- a/Documentation/sysctl/kernel.txt Sat Apr 12 14:44:08 2003 +++ b/Documentation/sysctl/kernel.txt Sat Apr 12 14:44:08 2003 @@ -204,6 +204,18 @@ ============================================================== +panic_on_oops: + +Controls the kernel's behaviour when an oops or BUG is encountered. + +0: try to continue operation + +1: delay a few seconds (to give klogd time to record the oops output) and + then panic. If the `panic' sysctl is also non-zero then the machine will + be rebooted. + +============================================================== + pid_max: PID allocation wrap value. When the kenrel's next PID value diff -Nru a/Makefile b/Makefile --- a/Makefile Sat Apr 12 14:44:08 2003 +++ b/Makefile Sat Apr 12 14:44:08 2003 @@ -342,17 +342,9 @@ echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd endef -ifdef CONFIG_SMP -# Final awk script makes sure per-cpu vars are in per-cpu section, as -# old gcc (eg egcs 2.92.11) ignores section attribute if uninitialized. - -check_per_cpu = $(AWK) -f $(srctree)/scripts/per-cpu-check.awk < System.map -endif - define rule_vmlinux $(rule_vmlinux__) $(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map - $(check_per_cpu) endef LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s diff -Nru a/arch/alpha/kernel/core_cia.c b/arch/alpha/kernel/core_cia.c --- a/arch/alpha/kernel/core_cia.c Sat Apr 12 14:44:08 2003 +++ b/arch/alpha/kernel/core_cia.c Sat Apr 12 14:44:08 2003 @@ -610,7 +610,7 @@ *(vip)CIA_IOC_CIA_CNFG = temp; } - /* Syncronize with all previous changes. */ + /* Synchronize with all previous changes. */ mb(); *(vip)CIA_IOC_CIA_REV; diff -Nru a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c --- a/arch/alpha/kernel/pci.c Sat Apr 12 14:44:06 2003 +++ b/arch/alpha/kernel/pci.c Sat Apr 12 14:44:06 2003 @@ -230,7 +230,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus) { - /* Propogate hose info into the subordinate devices. */ + /* Propagate hose info into the subordinate devices. */ struct pci_controller *hose = bus->sysdata; struct list_head *ln; diff -Nru a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c --- a/arch/alpha/kernel/pci_iommu.c Sat Apr 12 14:44:10 2003 +++ b/arch/alpha/kernel/pci_iommu.c Sat Apr 12 14:44:10 2003 @@ -431,7 +431,7 @@ /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must be values that were returned from pci_alloc_consistent. SIZE must be the same as what as passed into pci_alloc_consistent. - References to the memory and mappings assosciated with CPU_ADDR or + References to the memory and mappings associated with CPU_ADDR or DMA_ADDR past this call are illegal. */ void diff -Nru a/arch/alpha/kernel/semaphore.c b/arch/alpha/kernel/semaphore.c --- a/arch/alpha/kernel/semaphore.c Sat Apr 12 14:44:08 2003 +++ b/arch/alpha/kernel/semaphore.c Sat Apr 12 14:44:08 2003 @@ -122,7 +122,7 @@ long tmp, tmp2, tmp3; /* We must undo the sem->count down_interruptible decrement - simultaneously and atomicly with the sem->waking + simultaneously and atomically with the sem->waking adjustment, otherwise we can race with __up. This is accomplished by doing a 64-bit ll/sc on two 32-bit words. diff -Nru a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c --- a/arch/alpha/kernel/setup.c Sat Apr 12 14:44:06 2003 +++ b/arch/alpha/kernel/setup.c Sat Apr 12 14:44:06 2003 @@ -486,7 +486,7 @@ notifier_chain_register(&panic_notifier_list, &alpha_panic_block); #ifdef CONFIG_ALPHA_GENERIC - /* Assume that we've booted from SRM if we havn't booted from MILO. + /* Assume that we've booted from SRM if we haven't booted from MILO. Detect the later by looking for "MILO" in the system serial nr. */ alpha_using_srm = strncmp((const char *)hwrpb->ssn, "MILO", 4) != 0; #endif @@ -569,7 +569,7 @@ #endif /* - * Indentify and reconfigure for the current system. + * Identify and reconfigure for the current system. */ cpu = (struct percpu_struct*)((char*)hwrpb + hwrpb->processor_offset); diff -Nru a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c --- a/arch/alpha/kernel/time.c Sat Apr 12 14:44:08 2003 +++ b/arch/alpha/kernel/time.c Sat Apr 12 14:44:08 2003 @@ -331,7 +331,7 @@ /* From John Bowman : allow the values to settle, as the Update-In-Progress bit going low isn't good - enough on some hardware. 2ms is our guess; we havn't found + enough on some hardware. 2ms is our guess; we haven't found bogomips yet, but this is close on a 500Mhz box. */ __delay(1000000); diff -Nru a/arch/alpha/lib/strrchr.S b/arch/alpha/lib/strrchr.S --- a/arch/alpha/lib/strrchr.S Sat Apr 12 14:44:09 2003 +++ b/arch/alpha/lib/strrchr.S Sat Apr 12 14:44:09 2003 @@ -2,7 +2,7 @@ * arch/alpha/lib/strrchr.S * Contributed by Richard Henderson (rth@tamu.edu) * - * Return the address of the last occurrance of a given character + * Return the address of the last occurrence of a given character * within a null-terminated string, or null if it is not found. */ diff -Nru a/arch/alpha/math-emu/math.c b/arch/alpha/math-emu/math.c --- a/arch/alpha/math-emu/math.c Sat Apr 12 14:44:10 2003 +++ b/arch/alpha/math-emu/math.c Sat Apr 12 14:44:10 2003 @@ -294,7 +294,7 @@ * the appropriate signal to the translated program. * * In addition, properly track the exception state in software - * as described in the Alpha Architectre Handbook section 4.7.7.3. + * as described in the Alpha Architecture Handbook section 4.7.7.3. */ done: if (_fex) { diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig --- a/arch/i386/Kconfig Sat Apr 12 14:44:06 2003 +++ b/arch/i386/Kconfig Sat Apr 12 14:44:06 2003 @@ -142,7 +142,7 @@ config M486 bool "486" help - Select this for a x486 processor, ether Intel or one of the + Select this for a 486 series processor, either Intel or one of the compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S. @@ -150,8 +150,8 @@ config M586 bool "586/K5/5x86/6x86/6x86MX" help - Select this for an x586 or x686 processor such as the AMD K5, the - Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not + Select this for an 586 or 686 series processor such as the AMD K5, + the Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not assume the RDTSC (Read Time Stamp Counter) instruction. config M586TSC @@ -226,28 +226,28 @@ config MCRUSOE bool "Crusoe" help - Select this for Transmeta Crusoe processor. Treats the processor + Select this for a Transmeta Crusoe processor. Treats the processor like a 586 with TSC, and sets some GCC optimization flags (like a Pentium Pro with no alignment requirements). config MWINCHIPC6 bool "Winchip-C6" help - Select this for a IDT Winchip C6 chip. Linux and GCC + Select this for an IDT Winchip C6 chip. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment requirements. config MWINCHIP2 bool "Winchip-2" help - Select this for a IDT Winchip-2. Linux and GCC + Select this for an IDT Winchip-2. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment requirements. config MWINCHIP3D bool "Winchip-2A/Winchip-3" help - Select this for a IDT Winchip-2A or 3. Linux and GCC + Select this for an IDT Winchip-2A or 3. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment reqirements. Development kernels also enable out of order memory stores for this CPU, which can increase @@ -260,15 +260,15 @@ treat this chip as a generic 586. Whilst the CPU is 686 class, it lacks the cmov extension which gcc assumes is present when generating 686 code. - Note, that Nehemiah (Model 9) and above will not boot with this - kernel due to them lacking the 3dnow instructions used in earlier + Note that Nehemiah (Model 9) and above will not boot with this + kernel due to them lacking the 3DNow! instructions used in earlier incarnations of the CPU. config MVIAC3_2 bool "VIA C3-2 (Nehemiah)" help - Select this for a VIA C3 "Nehemiah". Selecting this enables usage of SSE - and tells gcc to treat the CPU as a 686. + Select this for a VIA C3 "Nehemiah". Selecting this enables usage + of SSE and tells gcc to treat the CPU as a 686. Note, this kernel will not boot on older (pre model 9) C3s. endchoice @@ -435,7 +435,8 @@ enable and use it. If you say Y here even though your machine doesn't have a local APIC, then the kernel will still run with no slowdown at all. The local APIC supports CPU-generated self-interrupts (timer, - performance counters), and the NMI watchdog which detects hard lockups. + performance counters), and the NMI watchdog which detects hard + lockups. If you have a system with several CPUs, you do not need to say Y here: the local APIC will be used automatically. @@ -522,7 +523,7 @@ ---help--- This adds a driver to safely access the System Management Mode of the CPU on Toshiba portables with a genuine Toshiba BIOS. It does - not work on models with a Pheonix BIOS. The System Management Mode + not work on models with a Phoenix BIOS. The System Management Mode is used to set the BIOS and power saving options on Toshiba portables. For information on utilities to make use of this driver see the diff -Nru a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S --- a/arch/i386/boot/setup.S Sat Apr 12 14:44:08 2003 +++ b/arch/i386/boot/setup.S Sat Apr 12 14:44:08 2003 @@ -213,7 +213,7 @@ # Part of above routine, this one just prints ascii al prtchr: pushw %ax pushw %cx - xorb %bh, %bh + movw $7,%bx movw $0x01, %cx movb $0x0e, %ah int $0x10 diff -Nru a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c --- a/arch/i386/kernel/apm.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/apm.c Sat Apr 12 14:44:06 2003 @@ -227,6 +227,8 @@ #include #include +#include "io_ports.h" + extern spinlock_t i8253_lock; extern unsigned long get_cmos_time(void); extern void machine_real_restart(unsigned char *, int); @@ -295,6 +297,8 @@ */ #define APM_ZERO_SEGS +#include "apm.h" + /* * Define to make all _set_limit calls use 64k limits. The APM 1.1 BIOS is * supposed to provide limit information that it recognizes. Many machines @@ -556,24 +560,11 @@ unsigned int saved_fs; unsigned int saved_gs; # define APM_DO_SAVE_SEGS \ savesegment(fs, saved_fs); savesegment(gs, saved_gs) -# define APM_DO_ZERO_SEGS \ - "pushl %%ds\n\t" \ - "pushl %%es\n\t" \ - "xorl %%edx, %%edx\n\t" \ - "mov %%dx, %%ds\n\t" \ - "mov %%dx, %%es\n\t" \ - "mov %%dx, %%fs\n\t" \ - "mov %%dx, %%gs\n\t" -# define APM_DO_POP_SEGS \ - "popl %%es\n\t" \ - "popl %%ds\n\t" # define APM_DO_RESTORE_SEGS \ loadsegment(fs, saved_fs); loadsegment(gs, saved_gs) #else # define APM_DECL_SEGS # define APM_DO_SAVE_SEGS -# define APM_DO_ZERO_SEGS -# define APM_DO_POP_SEGS # define APM_DO_RESTORE_SEGS #endif @@ -615,22 +606,7 @@ local_save_flags(flags); APM_DO_CLI; APM_DO_SAVE_SEGS; - /* - * N.B. We do NOT need a cld after the BIOS call - * because we always save and restore the flags. - */ - __asm__ __volatile__(APM_DO_ZERO_SEGS - "pushl %%edi\n\t" - "pushl %%ebp\n\t" - "lcall *%%cs:apm_bios_entry\n\t" - "setc %%al\n\t" - "popl %%ebp\n\t" - "popl %%edi\n\t" - APM_DO_POP_SEGS - : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx), - "=S" (*esi) - : "a" (func), "b" (ebx_in), "c" (ecx_in) - : "memory", "cc"); + apm_bios_call_asm(func, ebx_in, ecx_in, eax, ebx, ecx, edx, esi); APM_DO_RESTORE_SEGS; local_irq_restore(flags); cpu_gdt_table[cpu][0x40 / 8] = save_desc_40; @@ -673,26 +649,7 @@ local_save_flags(flags); APM_DO_CLI; APM_DO_SAVE_SEGS; - { - int cx, dx, si; - - /* - * N.B. We do NOT need a cld after the BIOS call - * because we always save and restore the flags. - */ - __asm__ __volatile__(APM_DO_ZERO_SEGS - "pushl %%edi\n\t" - "pushl %%ebp\n\t" - "lcall *%%cs:apm_bios_entry\n\t" - "setc %%bl\n\t" - "popl %%ebp\n\t" - "popl %%edi\n\t" - APM_DO_POP_SEGS - : "=a" (*eax), "=b" (error), "=c" (cx), "=d" (dx), - "=S" (si) - : "a" (func), "b" (ebx_in), "c" (ecx_in) - : "memory", "cc"); - } + error = apm_bios_call_simple_asm(func, ebx_in, ecx_in, eax); APM_DO_RESTORE_SEGS; local_irq_restore(flags); cpu_gdt_table[smp_processor_id()][0x40 / 8] = save_desc_40; @@ -1212,11 +1169,11 @@ { #ifdef INIT_TIMER_AFTER_SUSPEND /* set the clock to 100 Hz */ - outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */ + outb_p(0x34, PIT_MODE); /* binary, mode 2, LSB/MSB, ch 0 */ udelay(10); - outb_p(LATCH & 0xff , 0x40); /* LSB */ + outb_p(LATCH & 0xff, PIT_CH0); /* LSB */ udelay(10); - outb(LATCH >> 8 , 0x40); /* MSB */ + outb(LATCH >> 8, PIT_CH0); /* MSB */ udelay(10); #endif } diff -Nru a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c --- a/arch/i386/kernel/cpu/common.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/cpu/common.c Sat Apr 12 14:44:06 2003 @@ -217,6 +217,10 @@ c->x86_capability[4] = excap; c->x86 = (tfms >> 8) & 15; c->x86_model = (tfms >> 4) & 15; + if (c->x86 == 0xf) { + c->x86 += (tfms >> 20) & 0xff; + c->x86_model += ((tfms >> 16) & 0xF) << 4; + } c->x86_mask = tfms & 15; } else { /* Have CPUID level 0 only - unheard of */ diff -Nru a/arch/i386/kernel/edd.c b/arch/i386/kernel/edd.c --- a/arch/i386/kernel/edd.c Sat Apr 12 14:44:07 2003 +++ b/arch/i386/kernel/edd.c Sat Apr 12 14:44:07 2003 @@ -598,7 +598,7 @@ .default_attrs = def_attrs, }; -static decl_subsys(edd,&ktype_edd); +static decl_subsys(edd,&ktype_edd,NULL); /** diff -Nru a/arch/i386/kernel/i387.c b/arch/i386/kernel/i387.c --- a/arch/i386/kernel/i387.c Sat Apr 12 14:44:10 2003 +++ b/arch/i386/kernel/i387.c Sat Apr 12 14:44:10 2003 @@ -40,10 +40,10 @@ tsk->thread.i387.fxsave.mxcsr = 0x1f80; } else { memset(&tsk->thread.i387.fsave, 0, sizeof(struct i387_fsave_struct)); - tsk->thread.i387.fsave.cwd = 0xffff037f; - tsk->thread.i387.fsave.swd = 0xffff0000; - tsk->thread.i387.fsave.twd = 0xffffffff; - tsk->thread.i387.fsave.fos = 0xffff0000; + tsk->thread.i387.fsave.cwd = 0xffff037fu; + tsk->thread.i387.fsave.swd = 0xffff0000u; + tsk->thread.i387.fsave.twd = 0xffffffffu; + tsk->thread.i387.fsave.fos = 0xffff0000u; } tsk->used_math = 1; } @@ -98,7 +98,7 @@ struct _fpxreg *st = NULL; unsigned long twd = (unsigned long) fxsave->twd; unsigned long tag; - unsigned long ret = 0xffff0000; + unsigned long ret = 0xffff0000u; int i; #define FPREG_ADDR(f, n) ((char *)&(f)->st_space + (n) * 16); @@ -183,7 +183,7 @@ if ( cpu_has_fxsr ) { tsk->thread.i387.fxsave.cwd = cwd; } else { - tsk->thread.i387.fsave.cwd = ((long)cwd | 0xffff0000); + tsk->thread.i387.fsave.cwd = ((long)cwd | 0xffff0000u); } } @@ -192,7 +192,7 @@ if ( cpu_has_fxsr ) { tsk->thread.i387.fxsave.swd = swd; } else { - tsk->thread.i387.fsave.swd = ((long)swd | 0xffff0000); + tsk->thread.i387.fsave.swd = ((long)swd | 0xffff0000u); } } @@ -201,7 +201,7 @@ if ( cpu_has_fxsr ) { tsk->thread.i387.fxsave.twd = twd_i387_to_fxsr(twd); } else { - tsk->thread.i387.fsave.twd = ((long)twd | 0xffff0000); + tsk->thread.i387.fsave.twd = ((long)twd | 0xffff0000u); } } @@ -216,16 +216,16 @@ * FXSR floating point environment conversions. */ -static int convert_fxsr_to_user( struct _fpstate *buf, +static int convert_fxsr_to_user( struct _fpstate __user *buf, struct i387_fxsave_struct *fxsave ) { unsigned long env[7]; - struct _fpreg *to; + struct _fpreg __user *to; struct _fpxreg *from; int i; - env[0] = (unsigned long)fxsave->cwd | 0xffff0000; - env[1] = (unsigned long)fxsave->swd | 0xffff0000; + env[0] = (unsigned long)fxsave->cwd | 0xffff0000ul; + env[1] = (unsigned long)fxsave->swd | 0xffff0000ul; env[2] = twd_fxsr_to_i387(fxsave); env[3] = fxsave->fip; env[4] = fxsave->fcs | ((unsigned long)fxsave->fop << 16); @@ -250,11 +250,11 @@ } static int convert_fxsr_from_user( struct i387_fxsave_struct *fxsave, - struct _fpstate *buf ) + struct _fpstate __user *buf ) { unsigned long env[7]; struct _fpxreg *to; - struct _fpreg *from; + struct _fpreg __user *from; int i; if ( __copy_from_user( env, buf, 7 * sizeof(long) ) ) @@ -264,7 +264,7 @@ fxsave->swd = (unsigned short)(env[1] & 0xffff); fxsave->twd = twd_i387_to_fxsr((unsigned short)(env[2] & 0xffff)); fxsave->fip = env[3]; - fxsave->fop = (unsigned short)((env[4] & 0xffff0000) >> 16); + fxsave->fop = (unsigned short)((env[4] & 0xffff0000ul) >> 16); fxsave->fcs = (env[4] & 0xffff); fxsave->foo = env[5]; fxsave->fos = env[6]; @@ -275,9 +275,9 @@ unsigned long *t = (unsigned long *)to; unsigned long *f = (unsigned long *)from; - if (__get_user(*f, t) || - __get_user(*(f + 1), t + 1) || - __get_user(from->exponent, &to->exponent)) + if (__get_user(*t, f) || + __get_user(*(t + 1), f + 1) || + __get_user(to->exponent, &from->exponent)) return 1; } return 0; @@ -287,7 +287,7 @@ * Signal frame handlers. */ -static inline int save_i387_fsave( struct _fpstate *buf ) +static inline int save_i387_fsave( struct _fpstate __user *buf ) { struct task_struct *tsk = current; @@ -299,7 +299,7 @@ return 1; } -static int save_i387_fxsave( struct _fpstate *buf ) +static int save_i387_fxsave( struct _fpstate __user *buf ) { struct task_struct *tsk = current; int err = 0; @@ -320,7 +320,7 @@ return 1; } -int save_i387( struct _fpstate *buf ) +int save_i387( struct _fpstate __user *buf ) { if ( !current->used_math ) return 0; @@ -341,7 +341,7 @@ } } -static inline int restore_i387_fsave( struct _fpstate *buf ) +static inline int restore_i387_fsave( struct _fpstate __user *buf ) { struct task_struct *tsk = current; clear_fpu( tsk ); @@ -349,7 +349,7 @@ sizeof(struct i387_fsave_struct) ); } -static int restore_i387_fxsave( struct _fpstate *buf ) +static int restore_i387_fxsave( struct _fpstate __user *buf ) { int err; struct task_struct *tsk = current; @@ -361,7 +361,7 @@ return err ? 1 : convert_fxsr_from_user( &tsk->thread.i387.fxsave, buf ); } -int restore_i387( struct _fpstate *buf ) +int restore_i387( struct _fpstate __user *buf ) { int err; @@ -382,21 +382,21 @@ * ptrace request handlers. */ -static inline int get_fpregs_fsave( struct user_i387_struct *buf, +static inline int get_fpregs_fsave( struct user_i387_struct __user *buf, struct task_struct *tsk ) { return __copy_to_user( buf, &tsk->thread.i387.fsave, sizeof(struct user_i387_struct) ); } -static inline int get_fpregs_fxsave( struct user_i387_struct *buf, +static inline int get_fpregs_fxsave( struct user_i387_struct __user *buf, struct task_struct *tsk ) { - return convert_fxsr_to_user( (struct _fpstate *)buf, + return convert_fxsr_to_user( (struct _fpstate __user *)buf, &tsk->thread.i387.fxsave ); } -int get_fpregs( struct user_i387_struct *buf, struct task_struct *tsk ) +int get_fpregs( struct user_i387_struct __user *buf, struct task_struct *tsk ) { if ( HAVE_HWFP ) { if ( cpu_has_fxsr ) { @@ -406,25 +406,25 @@ } } else { return save_i387_soft( &tsk->thread.i387.soft, - (struct _fpstate *)buf ); + (struct _fpstate __user *)buf ); } } static inline int set_fpregs_fsave( struct task_struct *tsk, - struct user_i387_struct *buf ) + struct user_i387_struct __user *buf ) { return __copy_from_user( &tsk->thread.i387.fsave, buf, sizeof(struct user_i387_struct) ); } static inline int set_fpregs_fxsave( struct task_struct *tsk, - struct user_i387_struct *buf ) + struct user_i387_struct __user *buf ) { return convert_fxsr_from_user( &tsk->thread.i387.fxsave, - (struct _fpstate *)buf ); + (struct _fpstate __user *)buf ); } -int set_fpregs( struct task_struct *tsk, struct user_i387_struct *buf ) +int set_fpregs( struct task_struct *tsk, struct user_i387_struct __user *buf ) { if ( HAVE_HWFP ) { if ( cpu_has_fxsr ) { @@ -434,14 +434,14 @@ } } else { return restore_i387_soft( &tsk->thread.i387.soft, - (struct _fpstate *)buf ); + (struct _fpstate __user *)buf ); } } -int get_fpxregs( struct user_fxsr_struct *buf, struct task_struct *tsk ) +int get_fpxregs( struct user_fxsr_struct __user *buf, struct task_struct *tsk ) { if ( cpu_has_fxsr ) { - if (__copy_to_user( (void *)buf, &tsk->thread.i387.fxsave, + if (__copy_to_user( buf, &tsk->thread.i387.fxsave, sizeof(struct user_fxsr_struct) )) return -EFAULT; return 0; @@ -450,10 +450,10 @@ } } -int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct *buf ) +int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct __user *buf ) { if ( cpu_has_fxsr ) { - __copy_from_user( &tsk->thread.i387.fxsave, (void *)buf, + __copy_from_user( &tsk->thread.i387.fxsave, buf, sizeof(struct user_fxsr_struct) ); /* mxcsr bit 6 and 31-16 must be zero for security reasons */ tsk->thread.i387.fxsave.mxcsr &= 0xffbf; diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c --- a/arch/i386/kernel/io_apic.c Sat Apr 12 14:44:07 2003 +++ b/arch/i386/kernel/io_apic.c Sat Apr 12 14:44:07 2003 @@ -38,6 +38,8 @@ #include +#include "io_ports.h" + #undef APIC_LOCKUP_DEBUG #define APIC_LOCKUP_DEBUG @@ -2135,7 +2137,7 @@ * Additionally, something is definitely wrong with irq9 * on PIIX4 boards. */ -#define PIC_IRQS (1<<2) +#define PIC_IRQS (1 << PIC_CASCADE_IR) void __init setup_IO_APIC(void) { diff -Nru a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c --- a/arch/i386/kernel/signal.c Sat Apr 12 14:44:07 2003 +++ b/arch/i386/kernel/signal.c Sat Apr 12 14:44:07 2003 @@ -53,7 +53,7 @@ } asmlinkage int -sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize) +sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize) { struct pt_regs * regs = (struct pt_regs *) &unewset; sigset_t saveset, newset; @@ -82,8 +82,8 @@ } asmlinkage int -sys_sigaction(int sig, const struct old_sigaction *act, - struct old_sigaction *oact) +sys_sigaction(int sig, const struct old_sigaction __user *act, + struct old_sigaction __user *oact) { struct k_sigaction new_ka, old_ka; int ret; @@ -148,7 +148,7 @@ }; static int -restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *peax) +restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax) { unsigned int err = 0; @@ -192,7 +192,7 @@ } { - struct _fpstate * buf; + struct _fpstate __user * buf; err |= __get_user(buf, &sc->fpstate); if (buf) { if (verify_area(VERIFY_READ, buf, sizeof(*buf))) @@ -211,7 +211,7 @@ asmlinkage int sys_sigreturn(unsigned long __unused) { struct pt_regs *regs = (struct pt_regs *) &__unused; - struct sigframe *frame = (struct sigframe *)(regs->esp - 8); + struct sigframe __user *frame = (struct sigframe __user *)(regs->esp - 8); sigset_t set; int eax; @@ -241,7 +241,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long __unused) { struct pt_regs *regs = (struct pt_regs *) &__unused; - struct rt_sigframe *frame = (struct rt_sigframe *)(regs->esp - 4); + struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(regs->esp - 4); sigset_t set; stack_t st; int eax; @@ -278,7 +278,7 @@ */ static int -setup_sigcontext(struct sigcontext *sc, struct _fpstate *fpstate, +setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate, struct pt_regs *regs, unsigned long mask) { int tmp, err = 0; @@ -323,7 +323,7 @@ /* * Determine which stack to use.. */ -static inline void * +static inline void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) { unsigned long esp; @@ -344,14 +344,14 @@ esp = (unsigned long) ka->sa.sa_restorer; } - return (void *)((esp - frame_size) & -8ul); + return (void __user *)((esp - frame_size) & -8ul); } static void setup_frame(int sig, struct k_sigaction *ka, sigset_t *set, struct pt_regs * regs) { void *restorer; - struct sigframe *frame; + struct sigframe __user *frame; int err = 0; frame = get_sigframe(ka, regs, sizeof(*frame)); @@ -373,7 +373,7 @@ goto give_sigsegv; if (_NSIG_WORDS > 1) { - err |= __copy_to_user(frame->extramask, &set->sig[1], + err |= __copy_to_user(&frame->extramask, &set->sig[1], sizeof(frame->extramask)); } if (err) @@ -428,7 +428,7 @@ sigset_t *set, struct pt_regs * regs) { void *restorer; - struct rt_sigframe *frame; + struct rt_sigframe __user *frame; int err = 0; frame = get_sigframe(ka, regs, sizeof(*frame)); diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c --- a/arch/i386/kernel/smpboot.c Sat Apr 12 14:44:08 2003 +++ b/arch/i386/kernel/smpboot.c Sat Apr 12 14:44:08 2003 @@ -49,10 +49,10 @@ #include #include #include -#include "smpboot_hooks.h" #include #include +#include /* Set if we find a B stepping CPU */ static int __initdata smp_b_stepping; @@ -823,13 +823,7 @@ store_NMI_vector(&nmi_high, &nmi_low); - CMOS_WRITE(0xa, 0xf); - local_flush_tlb(); - Dprintk("1.\n"); - *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; - Dprintk("2.\n"); - *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; - Dprintk("3.\n"); + smpboot_setup_warm_reset_vector(start_eip); /* * Starting actual IPI sequence... @@ -1045,7 +1039,7 @@ /* * Cleanup possible dangling ends... */ - smpboot_setup_warm_reset_vector(); + smpboot_restore_warm_reset_vector(); /* * Allow the user to impress friends. diff -Nru a/arch/i386/kernel/suspend.c b/arch/i386/kernel/suspend.c --- a/arch/i386/kernel/suspend.c Sat Apr 12 14:44:09 2003 +++ b/arch/i386/kernel/suspend.c Sat Apr 12 14:44:09 2003 @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff -Nru a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c --- a/arch/i386/kernel/traps.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/traps.c Sat Apr 12 14:44:06 2003 @@ -257,6 +257,15 @@ show_registers(regs); bust_spinlocks(0); spin_unlock_irq(&die_lock); + if (in_interrupt()) + panic("Fatal exception in interrupt"); + + if (panic_on_oops) { + printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n"); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(5 * HZ); + panic("Fatal exception"); + } do_exit(SIGSEGV); } diff -Nru a/arch/i386/kernel/vm86.c b/arch/i386/kernel/vm86.c --- a/arch/i386/kernel/vm86.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/vm86.c Sat Apr 12 14:44:06 2003 @@ -30,6 +30,7 @@ * */ +#include #include #include #include @@ -725,7 +726,7 @@ void release_x86_irqs(struct task_struct *task) { int i; - for (i=3; i<16; i++) + for (i = FIRST_VM86_IRQ ; i <= LAST_VM86_IRQ; i++) if (vm86_irqs[i].tsk == task) free_vm86_irq(i); } @@ -735,7 +736,7 @@ int bit; unsigned long flags; - if ( (irqnumber<3) || (irqnumber>15) ) return 0; + if (invalid_vm86_irq(irqnumber)) return 0; if (vm86_irqs[irqnumber].tsk != current) return 0; spin_lock_irqsave(&irqbits_lock, flags); bit = irqbits & (1 << irqnumber); @@ -760,7 +761,7 @@ int irq = irqnumber & 255; if (!capable(CAP_SYS_ADMIN)) return -EPERM; if (!((1 << sig) & ALLOWED_SIGS)) return -EPERM; - if ( (irq<3) || (irq>15) ) return -EPERM; + if (invalid_vm86_irq(irq)) return -EPERM; if (vm86_irqs[irq].tsk) return -EPERM; ret = request_irq(irq, &irq_handler, 0, VM86_IRQNAME, 0); if (ret) return ret; @@ -769,7 +770,7 @@ return irq; } case VM86_FREE_IRQ: { - if ( (irqnumber<3) || (irqnumber>15) ) return -EPERM; + if (invalid_vm86_irq(irqnumber)) return -EPERM; if (!vm86_irqs[irqnumber].tsk) return 0; if (vm86_irqs[irqnumber].tsk != current) return -EPERM; free_vm86_irq(irqnumber); diff -Nru a/arch/ia64/Kconfig b/arch/ia64/Kconfig --- a/arch/ia64/Kconfig Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/Kconfig Sat Apr 12 14:44:10 2003 @@ -401,6 +401,15 @@ endchoice +config IA64_PAL_IDLE + bool "Use PAL_HALT_LIGHT in idle loop" + ---help--- + Say Y here to enable use of PAL_HALT_LIGHT in the cpu_idle loop. + This allows the CPU to enter a low power state when idle. You + can enable CONFIG_IA64_PALINFO and check /proc/pal/cpu0/power_info + to see the power consumption and latency for this state. If you're + unsure your firmware supports it, answer N. + config SMP bool "SMP support" ---help--- diff -Nru a/arch/ia64/Makefile b/arch/ia64/Makefile --- a/arch/ia64/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/Makefile Sat Apr 12 14:44:06 2003 @@ -14,6 +14,7 @@ OBJCOPYFLAGS := --strip-all LDFLAGS_vmlinux := -static +LDFLAGS_MODULE += -T arch/ia64/module.lds AFLAGS_KERNEL := -mconstant-gp EXTRA := @@ -23,7 +24,7 @@ GCC_VERSION=$(shell $(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f1 -d'.') -GAS_STATUS=$(shell arch/ia64/scripts/check-gas $(CC)) +GAS_STATUS=$(shell arch/ia64/scripts/check-gas $(CC) $(OBJDUMP)) ifeq ($(GAS_STATUS),buggy) $(error Sorry, you need a newer version of the assember, one that is built from \ @@ -50,11 +51,8 @@ core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/ arch/ia64/hp/common/ arch/ia64/hp/zx1/ \ arch/ia64/hp/sim/ core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/ -core-$(CONFIG_IA64_SGI_SN) += arch/ia64/sn/kernel/ \ - arch/ia64/sn/io/ \ - arch/ia64/sn/io/sn2/ \ - arch/ia64/sn/io/sn2/pcibr/ \ - arch/ia64/sn/kernel/sn2/ +core-$(CONFIG_IA64_SGI_SN) += arch/ia64/sn/ + drivers-$(CONFIG_PCI) += arch/ia64/pci/ drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/ drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ diff -Nru a/arch/ia64/boot/Makefile b/arch/ia64/boot/Makefile --- a/arch/ia64/boot/Makefile Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/boot/Makefile Sat Apr 12 14:44:08 2003 @@ -9,7 +9,6 @@ # targets-$(CONFIG_IA64_HP_SIM) += bootloader -targets-$(CONFIG_IA64_GENERIC) += bootloader targets := vmlinux.bin vmlinux.gz $(targets-y) quiet_cmd_cptotop = LN $@ diff -Nru a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c --- a/arch/ia64/hp/common/sba_iommu.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/hp/common/sba_iommu.c Sat Apr 12 14:44:06 2003 @@ -1497,7 +1497,7 @@ ioc = &sba_dev->ioc[0]; /* FIXME: Multi-IOC support! */ total_pages = (int) (ioc->res_size << 3); /* 8 bits per byte */ - sprintf(buf, "%s rev %d.%d\n", "Hewlett Packard zx1 SBA", + sprintf(buf, "%s rev %d.%d\n", "Hewlett-Packard zx1 SBA", ((sba_dev->hw_rev >> 4) & 0xF), (sba_dev->hw_rev & 0xF)); sprintf(buf, "%sIO PDIR size : %d bytes (%d entries)\n", buf, (int) ((ioc->res_size << 3) * sizeof(u64)), /* 8 bits/byte */ total_pages); diff -Nru a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S --- a/arch/ia64/ia32/ia32_entry.S Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/ia32/ia32_entry.S Sat Apr 12 14:44:08 2003 @@ -253,7 +253,7 @@ data8 sys_umount /* recycled never used phys( */ data8 sys32_ni_syscall /* old lock syscall holder */ data8 sys32_ioctl - data8 sys32_fcntl /* 55 */ + data8 compat_sys_fcntl /* 55 */ data8 sys32_ni_syscall /* old mpx syscall holder */ data8 sys_setpgid data8 sys32_ni_syscall /* old ulimit syscall holder */ @@ -419,7 +419,7 @@ data8 sys_mincore data8 sys_madvise data8 sys_getdents64 /* 220 */ - data8 sys32_fcntl64 + data8 compat_sys_fcntl64 data8 sys_ni_syscall /* reserved for TUX */ data8 sys_ni_syscall /* reserved for Security */ data8 sys_gettid diff -Nru a/arch/ia64/ia32/ia32_signal.c b/arch/ia64/ia32/ia32_signal.c --- a/arch/ia64/ia32/ia32_signal.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/ia32/ia32_signal.c Sat Apr 12 14:44:06 2003 @@ -114,6 +114,7 @@ int copy_siginfo_to_user32 (siginfo_t32 *to, siginfo_t *from) { + unsigned int addr; int err; if (!access_ok(VERIFY_WRITE, to, sizeof(siginfo_t32))) @@ -147,6 +148,12 @@ case __SI_POLL >> 16: err |= __put_user(from->si_band, &to->si_band); err |= __put_user(from->si_fd, &to->si_fd); + break; + case __SI_TIMER >> 16: + err |= __put_user(from->si_tid, &to->si_tid); + err |= __put_user(from->si_overrun, &to->si_overrun); + addr = (unsigned long) from->si_ptr; + err |= __put_user(addr, &to->si_ptr); break; /* case __SI_RT: This is not generated by the kernel as of now. */ } diff -Nru a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c --- a/arch/ia64/ia32/sys_ia32.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/ia32/sys_ia32.c Sat Apr 12 14:44:08 2003 @@ -119,10 +119,8 @@ asmlinkage long sys32_execve (char *filename, unsigned int argv, unsigned int envp, - int dummy3, int dummy4, int dummy5, int dummy6, int dummy7, - int stack) + struct pt_regs *regs) { - struct pt_regs *regs = (struct pt_regs *)&stack; unsigned long old_map_base, old_task_size, tssd; char **av, **ae; int na, ne, len; @@ -1701,7 +1699,7 @@ return shmctl32(first, second, (void *)AA(ptr)); default: - return -EINVAL; + return -ENOSYS; } return -EINVAL; } @@ -2156,26 +2154,23 @@ ret = -ESRCH; read_lock(&tasklist_lock); child = find_task_by_pid(pid); + if (child) + get_task_struct(child); read_unlock(&tasklist_lock); if (!child) goto out; ret = -EPERM; if (pid == 1) /* no messing around with init! */ - goto out; + goto out_tsk; if (request == PTRACE_ATTACH) { ret = sys_ptrace(request, pid, addr, data, arg4, arg5, arg6, arg7, stack); - goto out; - } - ret = -ESRCH; - if (!(child->ptrace & PT_PTRACED)) - goto out; - if (child->state != TASK_STOPPED) { - if (request != PTRACE_KILL) - goto out; + goto out_tsk; } - if (child->parent != current) - goto out; + + ret = ptrace_check_attach(child, request == PTRACE_KILL); + if (ret < 0) + goto out_tsk; switch (request) { case PTRACE_PEEKTEXT: @@ -2185,12 +2180,12 @@ ret = put_user(value, (unsigned int *) A(data)); else ret = -EIO; - goto out; + goto out_tsk; case PTRACE_POKETEXT: case PTRACE_POKEDATA: /* write the word at location addr */ ret = ia32_poke(regs, child, addr, data); - goto out; + goto out_tsk; case PTRACE_PEEKUSR: /* read word at addr in USER area */ ret = -EIO; @@ -2265,43 +2260,13 @@ break; } + out_tsk: + put_task_struct(child); out: unlock_kernel(); return ret; } -extern asmlinkage long sys_fcntl (unsigned int fd, unsigned int cmd, unsigned long arg); - -asmlinkage long -sys32_fcntl (unsigned int fd, unsigned int cmd, unsigned int arg) -{ - mm_segment_t old_fs; - struct flock f; - long ret; - - switch (cmd) { - case F_GETLK: - case F_SETLK: - case F_SETLKW: - if (get_compat_flock(&f, (struct compat_flock *) A(arg))) - return -EFAULT; - old_fs = get_fs(); - set_fs(KERNEL_DS); - ret = sys_fcntl(fd, cmd, (unsigned long) &f); - set_fs(old_fs); - if (cmd == F_GETLK && put_compat_flock(&f, (struct compat_flock *) A(arg))) - return -EFAULT; - return ret; - - default: - /* - * `sys_fcntl' lies about arg, for the F_SETOWN - * sub-function arg can have a negative value. - */ - return sys_fcntl(fd, cmd, arg); - } -} - asmlinkage long sys_ni_syscall(void); asmlinkage long @@ -2593,66 +2558,6 @@ set_fs(KERNEL_DS); ret = sys_setgroups(gidsetsize, gl); set_fs(old_fs); - return ret; -} - -/* - * Unfortunately, the x86 compiler aligns variables of type "long long" to a 4 byte boundary - * only, which means that the x86 version of "struct flock64" doesn't match the ia64 version - * of struct flock. - */ - -static inline long -ia32_put_flock (struct flock *l, unsigned long addr) -{ - return (put_user(l->l_type, (short *) addr) - | put_user(l->l_whence, (short *) (addr + 2)) - | put_user(l->l_start, (long *) (addr + 4)) - | put_user(l->l_len, (long *) (addr + 12)) - | put_user(l->l_pid, (int *) (addr + 20))); -} - -static inline long -ia32_get_flock (struct flock *l, unsigned long addr) -{ - unsigned int start_lo, start_hi, len_lo, len_hi; - int err = (get_user(l->l_type, (short *) addr) - | get_user(l->l_whence, (short *) (addr + 2)) - | get_user(start_lo, (int *) (addr + 4)) - | get_user(start_hi, (int *) (addr + 8)) - | get_user(len_lo, (int *) (addr + 12)) - | get_user(len_hi, (int *) (addr + 16)) - | get_user(l->l_pid, (int *) (addr + 20))); - l->l_start = ((unsigned long) start_hi << 32) | start_lo; - l->l_len = ((unsigned long) len_hi << 32) | len_lo; - return err; -} - -asmlinkage long -sys32_fcntl64 (unsigned int fd, unsigned int cmd, unsigned int arg) -{ - mm_segment_t old_fs; - struct flock f; - long ret; - - switch (cmd) { - case F_GETLK64: - case F_SETLK64: - case F_SETLKW64: - if (ia32_get_flock(&f, arg)) - return -EFAULT; - old_fs = get_fs(); - set_fs(KERNEL_DS); - ret = sys_fcntl(fd, cmd, (unsigned long) &f); - set_fs(old_fs); - if (cmd == F_GETLK && ia32_put_flock(&f, arg)) - return -EFAULT; - break; - - default: - ret = sys32_fcntl(fd, cmd, arg); - break; - } return ret; } diff -Nru a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile --- a/arch/ia64/kernel/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/Makefile Sat Apr 12 14:44:10 2003 @@ -4,16 +4,15 @@ extra-y := head.o init_task.o -obj-y := acpi.o entry.o gate.o efi.o efi_stub.o ia64_ksyms.o \ - irq.o irq_ia64.o irq_lsapic.o ivt.o \ - machvec.o pal.o process.o perfmon.o ptrace.o sal.o \ - semaphore.o setup.o \ - signal.o sys_ia64.o traps.o time.o unaligned.o unwind.o +obj-y := acpi.o entry.o efi.o efi_stub.o gate.o ia64_ksyms.o irq.o irq_ia64.o irq_lsapic.o \ + ivt.o machvec.o pal.o perfmon.o process.o ptrace.o sal.o semaphore.o setup.o signal.o \ + sys_ia64.o time.o traps.o unaligned.o unwind.o -obj-$(CONFIG_FSYS) += fsys.o -obj-$(CONFIG_IOSAPIC) += iosapic.o -obj-$(CONFIG_IA64_PALINFO) += palinfo.o -obj-$(CONFIG_EFI_VARS) += efivars.o -obj-$(CONFIG_SMP) += smp.o smpboot.o -obj-$(CONFIG_IA64_MCA) += mca.o mca_asm.o -obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o +obj-$(CONFIG_EFI_VARS) += efivars.o +obj-$(CONFIG_FSYS) += fsys.o +obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o +obj-$(CONFIG_IA64_MCA) += mca.o mca_asm.o +obj-$(CONFIG_IA64_PALINFO) += palinfo.o +obj-$(CONFIG_IOSAPIC) += iosapic.o +obj-$(CONFIG_MODULES) += module.o +obj-$(CONFIG_SMP) += smp.o smpboot.o diff -Nru a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/kernel/acpi-ext.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,71 @@ +/* + * arch/ia64/kernel/acpi-ext.c + * + * Copyright (C) 2003 Hewlett-Packard + * Copyright (C) Alex Williamson + * + * Vendor specific extensions to ACPI. These are used by both + * HP and NEC. + */ + +#include +#include +#include +#include + +#include + +/* + * Note: Strictly speaking, this is only needed for HP and NEC machines. + * However, NEC machines identify themselves as DIG-compliant, so there is + * no easy way to #ifdef this out. + */ +acpi_status +hp_acpi_csr_space (acpi_handle obj, u64 *csr_base, u64 *csr_length) +{ + int i, offset = 0; + acpi_status status; + struct acpi_buffer buf; + struct acpi_resource_vendor *res; + struct acpi_hp_vendor_long *hp_res; + efi_guid_t vendor_guid; + + *csr_base = 0; + *csr_length = 0; + + status = acpi_get_crs(obj, &buf); + if (ACPI_FAILURE(status)) { + printk(KERN_ERR PREFIX "Unable to get _CRS data on object\n"); + return status; + } + + res = (struct acpi_resource_vendor *)acpi_get_crs_type(&buf, &offset, ACPI_RSTYPE_VENDOR); + if (!res) { + printk(KERN_ERR PREFIX "Failed to find config space for device\n"); + acpi_dispose_crs(&buf); + return AE_NOT_FOUND; + } + + hp_res = (struct acpi_hp_vendor_long *)(res->reserved); + + if (res->length != HP_CCSR_LENGTH || hp_res->guid_id != HP_CCSR_TYPE) { + printk(KERN_ERR PREFIX "Unknown Vendor data\n"); + acpi_dispose_crs(&buf); + return AE_TYPE; /* Revisit error? */ + } + + memcpy(&vendor_guid, hp_res->guid, sizeof(efi_guid_t)); + if (efi_guidcmp(vendor_guid, HP_CCSR_GUID) != 0) { + printk(KERN_ERR PREFIX "Vendor GUID does not match\n"); + acpi_dispose_crs(&buf); + return AE_TYPE; /* Revisit error? */ + } + + for (i = 0 ; i < 8 ; i++) { + *csr_base |= ((u64)(hp_res->csr_base[i]) << (i * 8)); + *csr_length |= ((u64)(hp_res->csr_length[i]) << (i * 8)); + } + + acpi_dispose_crs(&buf); + return AE_OK; +} diff -Nru a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c --- a/arch/ia64/kernel/acpi.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/acpi.c Sat Apr 12 14:44:08 2003 @@ -9,7 +9,7 @@ * Copyright (C) 2000,2001 J.I. Lee * Copyright (C) 2001 Paul Diefenbaugh * Copyright (C) 2001 Jenna Hall - * Copyright (C) 2001 Takayoshi Kochi + * Copyright (C) 2001 Takayoshi Kochi * Copyright (C) 2002 Erich Focht * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -109,8 +109,6 @@ return "sn2"; # elif defined (CONFIG_IA64_DIG) return "dig"; -# elif defined (CONFIG_IA64_HP_ZX1) - return "hpzx1"; # else # error Unknown platform. Fix acpi.c. # endif @@ -176,6 +174,73 @@ kfree(buf->pointer); } +void +acpi_get_crs_addr (struct acpi_buffer *buf, int type, u64 *base, u64 *size, u64 *tra) +{ + int offset = 0; + struct acpi_resource_address16 *addr16; + struct acpi_resource_address32 *addr32; + struct acpi_resource_address64 *addr64; + + for (;;) { + struct acpi_resource *res = acpi_get_crs_next(buf, &offset); + if (!res) + return; + switch (res->id) { + case ACPI_RSTYPE_ADDRESS16: + addr16 = (struct acpi_resource_address16 *) &res->data; + + if (type == addr16->resource_type) { + *base = addr16->min_address_range; + *size = addr16->address_length; + *tra = addr16->address_translation_offset; + return; + } + break; + case ACPI_RSTYPE_ADDRESS32: + addr32 = (struct acpi_resource_address32 *) &res->data; + if (type == addr32->resource_type) { + *base = addr32->min_address_range; + *size = addr32->address_length; + *tra = addr32->address_translation_offset; + return; + } + break; + case ACPI_RSTYPE_ADDRESS64: + addr64 = (struct acpi_resource_address64 *) &res->data; + if (type == addr64->resource_type) { + *base = addr64->min_address_range; + *size = addr64->address_length; + *tra = addr64->address_translation_offset; + return; + } + break; + } + } +} + +int +acpi_get_addr_space(void *obj, u8 type, u64 *base, u64 *length, u64 *tra) +{ + acpi_status status; + struct acpi_buffer buf; + + *base = 0; + *length = 0; + *tra = 0; + + status = acpi_get_crs((acpi_handle)obj, &buf); + if (ACPI_FAILURE(status)) { + printk(KERN_ERR PREFIX "Unable to get _CRS data on object\n"); + return status; + } + + acpi_get_crs_addr(&buf, type, base, length, tra); + + acpi_dispose_crs(&buf); + + return AE_OK; +} #endif /* CONFIG_ACPI */ #ifdef CONFIG_ACPI_BOOT @@ -808,6 +873,7 @@ list_for_each(node, &acpi_prt.entries) { entry = (struct acpi_prt_entry *)node; + vector[i].segment = entry->id.segment; vector[i].bus = entry->id.bus; vector[i].pci_id = ((u32) entry->id.device << 16) | 0xffff; vector[i].pin = entry->pin; diff -Nru a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S --- a/arch/ia64/kernel/entry.S Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/kernel/entry.S Sat Apr 12 14:44:07 2003 @@ -91,7 +91,7 @@ END(ia64_execve) /* - * sys_clone2(u64 flags, u64 ustack_base, u64 ustack_size, u64 child_tidptr, u64 parent_tidptr, + * sys_clone2(u64 flags, u64 ustack_base, u64 ustack_size, u64 parent_tidptr, u64 child_tidptr, * u64 tls) */ GLOBAL_ENTRY(sys_clone2) @@ -105,10 +105,10 @@ mov out1=in1 mov out3=in2 tbit.nz p6,p0=in0,CLONE_SETTLS_BIT - mov out4=in3 // child_tidptr: valid only w/CLONE_CHILD_SETTID or CLONE_CHILD_CLEARTID + mov out4=in3 // parent_tidptr: valid only w/CLONE_PARENT_SETTID ;; (p6) st8 [r2]=in5 // store TLS in r16 for copy_thread() - mov out5=in4 // parent_tidptr: valid only w/CLONE_PARENT_SETTID + mov out5=in4 // child_tidptr: valid only w/CLONE_CHILD_SETTID or CLONE_CHILD_CLEARTID adds out2=IA64_SWITCH_STACK_SIZE+16,sp // out2 = ®s dep out0=0,in0,CLONE_IDLETASK_BIT,1 // out0 = clone_flags & ~CLONE_IDLETASK br.call.sptk.many rp=do_fork @@ -126,12 +126,12 @@ END(sys_clone2) /* - * sys_clone(u64 flags, u64 ustack_base, u64 user_tid, u64 tls) + * sys_clone(u64 flags, u64 ustack_base, u64 parent_tidptr, u64 child_tidptr, u64 tls) * Deprecated. Use sys_clone2() instead. */ GLOBAL_ENTRY(sys_clone) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) - alloc r16=ar.pfs,4,2,5,0 + alloc r16=ar.pfs,5,2,6,0 DO_SAVE_SWITCH_STACK adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp mov loc0=rp @@ -140,9 +140,10 @@ mov out1=in1 mov out3=16 // stacksize (compensates for 16-byte scratch area) tbit.nz p6,p0=in0,CLONE_SETTLS_BIT - mov out4=in2 // out4 = user_tid (optional) + mov out4=in2 // parent_tidptr: valid only w/CLONE_PARENT_SETTID ;; -(p6) st8 [r2]=in3 // store TLS in r13 (tp) +(p6) st8 [r2]=in4 // store TLS in r13 (tp) + mov out5=in3 // child_tidptr: valid only w/CLONE_CHILD_SETTID or CLONE_CHILD_CLEARTID adds out2=IA64_SWITCH_STACK_SIZE+16,sp // out2 = ®s dep out0=0,in0,CLONE_IDLETASK_BIT,1 // out0 = clone_flags & ~CLONE_IDLETASK br.call.sptk.many rp=do_fork diff -Nru a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S --- a/arch/ia64/kernel/fsys.S Sat Apr 12 14:44:05 2003 +++ b/arch/ia64/kernel/fsys.S Sat Apr 12 14:44:05 2003 @@ -533,15 +533,15 @@ data8 fsys_fallback_syscall // epoll_wait // 1245 data8 fsys_fallback_syscall // restart_syscall data8 fsys_fallback_syscall // semtimedop - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall // 1250 - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall // 1255 - data8 fsys_fallback_syscall + data8 fsys_fallback_syscall // timer_create + data8 fsys_fallback_syscall // timer_settime + data8 fsys_fallback_syscall // timer_gettime // 1250 + data8 fsys_fallback_syscall // timer_getoverrun + data8 fsys_fallback_syscall // timer_delete + data8 fsys_fallback_syscall // clock_settime + data8 fsys_fallback_syscall // clock_gettime + data8 fsys_fallback_syscall // clock_getres // 1255 + data8 fsys_fallback_syscall // clock_nanosleep data8 fsys_fallback_syscall data8 fsys_fallback_syscall data8 fsys_fallback_syscall diff -Nru a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S --- a/arch/ia64/kernel/head.S Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/head.S Sat Apr 12 14:44:08 2003 @@ -733,73 +733,3 @@ SET_REG(b5); #endif /* CONFIG_IA64_BRL_EMU */ - -#ifdef CONFIG_SMP - - /* - * This routine handles spinlock contention. It uses a simple exponential backoff - * algorithm to reduce unnecessary bus traffic. The initial delay is selected from - * the low-order bits of the cycle counter (a cheap "randomizer"). I'm sure this - * could use additional tuning, especially on systems with a large number of CPUs. - * Also, I think the maximum delay should be made a function of the number of CPUs in - * the system. --davidm 00/08/05 - * - * WARNING: This is not a normal procedure. It gets called from C code without - * the compiler knowing about it. Thus, we must not use any scratch registers - * beyond those that were declared "clobbered" at the call-site (see spin_lock() - * macro). We may not even use the stacked registers, because that could overwrite - * output registers. Similarly, we can't use the scratch stack area as it may be - * in use, too. - * - * Inputs: - * ar.ccv = 0 (and available for use) - * r28 = available for use - * r29 = available for use - * r30 = non-zero (and available for use) - * r31 = address of lock we're trying to acquire - * p15 = available for use - */ - -# define delay r28 -# define timeout r29 -# define tmp r30 - -GLOBAL_ENTRY(ia64_spinlock_contention) - mov tmp=ar.itc - ;; - and delay=0x3f,tmp - ;; - -.retry: add timeout=tmp,delay - shl delay=delay,1 - ;; - dep delay=delay,r0,0,13 // limit delay to 8192 cycles - ;; - // delay a little... -.wait: sub tmp=tmp,timeout - or delay=0xf,delay // make sure delay is non-zero (otherwise we get stuck with 0) - ;; - cmp.lt p15,p0=tmp,r0 - mov tmp=ar.itc -(p15) br.cond.sptk .wait - ;; - ld4 tmp=[r31] - ;; - cmp.ne p15,p0=tmp,r0 - mov tmp=ar.itc -(p15) br.cond.sptk .retry // lock is still busy - ;; - // try acquiring lock (we know ar.ccv is still zero!): - mov tmp=1 - ;; - cmpxchg4.acq tmp=[r31],tmp,ar.ccv - ;; - cmp.eq p15,p0=tmp,r0 - - mov tmp=ar.itc -(p15) br.ret.sptk.many b7 // got lock -> return - br .retry // still no luck, retry - -END(ia64_spinlock_contention) - -#endif diff -Nru a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c --- a/arch/ia64/kernel/ia64_ksyms.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/kernel/ia64_ksyms.c Sat Apr 12 14:44:07 2003 @@ -57,9 +57,7 @@ EXPORT_SYMBOL(clear_page); #include -# ifndef CONFIG_NUMA EXPORT_SYMBOL(cpu_info__per_cpu); -# endif EXPORT_SYMBOL(kernel_thread); #include @@ -147,3 +145,19 @@ EXPORT_SYMBOL(pfm_install_alternate_syswide_subsystem); EXPORT_SYMBOL(pfm_remove_alternate_syswide_subsystem); #endif + +#ifdef CONFIG_NUMA +#include +EXPORT_SYMBOL(cpu_to_node_map); +#endif + +#include +EXPORT_SYMBOL(unw_init_from_blocked_task); +EXPORT_SYMBOL(unw_init_running); +EXPORT_SYMBOL(unw_unwind); +EXPORT_SYMBOL(unw_unwind_to_user); +EXPORT_SYMBOL(unw_access_gr); +EXPORT_SYMBOL(unw_access_br); +EXPORT_SYMBOL(unw_access_fr); +EXPORT_SYMBOL(unw_access_ar); +EXPORT_SYMBOL(unw_access_pr); diff -Nru a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c --- a/arch/ia64/kernel/mca.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/mca.c Sat Apr 12 14:44:08 2003 @@ -42,6 +42,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -67,7 +71,7 @@ u64 ia64_mca_stack[1024] __attribute__((aligned(16))); u64 ia64_mca_stackframe[32]; u64 ia64_mca_bspstore[1024]; -u64 ia64_init_stack[KERNEL_STACK_SIZE] __attribute__((aligned(16))); +u64 ia64_init_stack[KERNEL_STACK_SIZE/8] __attribute__((aligned(16))); u64 ia64_mca_sal_data_area[1356]; u64 ia64_tlb_functional; u64 ia64_os_mca_recovery_successful; @@ -105,6 +109,19 @@ .name = "cpe_hndlr" }; +#define MAX_CPE_POLL_INTERVAL (15*60*HZ) /* 15 minutes */ +#define MIN_CPE_POLL_INTERVAL (2*60*HZ) /* 2 minutes */ +#define CMC_POLL_INTERVAL (1*60*HZ) /* 1 minute */ +#define CMC_HISTORY_LENGTH 5 + +static struct timer_list cpe_poll_timer; +static struct timer_list cmc_poll_timer; +/* + * Start with this in the wrong state so we won't play w/ timers + * before the system is ready. + */ +static int cmc_polling_enabled = 1; + /* * ia64_mca_log_sal_error_record * @@ -152,7 +169,8 @@ void ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs) { - IA64_MCA_DEBUG("ia64_mca_cpe_int_handler: received interrupt. vector = %#x\n", cpe_irq); + IA64_MCA_DEBUG("ia64_mca_cpe_int_handler: received interrupt. CPU:%d vector = %#x\n", + smp_processor_id(), cpe_irq); /* Get the CMC error record and log it */ ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CPE, 0); @@ -295,6 +313,60 @@ smp_processor_id(), ia64_get_cmcv()); } +/* + * ia64_mca_cmc_vector_disable + * + * Mask the corrected machine check vector register in the processor. + * This function is invoked on a per-processor basis. + * + * Inputs + * dummy(unused) + * + * Outputs + * None + */ +void +ia64_mca_cmc_vector_disable (void *dummy) +{ + cmcv_reg_t cmcv; + + cmcv = (cmcv_reg_t)ia64_get_cmcv(); + + cmcv.cmcv_mask = 1; /* Mask/disable interrupt */ + ia64_set_cmcv(cmcv.cmcv_regval); + + IA64_MCA_DEBUG("ia64_mca_cmc_vector_disable: CPU %d corrected " + "machine check vector %#x disabled.\n", + smp_processor_id(), cmcv.cmcv_vector); +} + +/* + * ia64_mca_cmc_vector_enable + * + * Unmask the corrected machine check vector register in the processor. + * This function is invoked on a per-processor basis. + * + * Inputs + * dummy(unused) + * + * Outputs + * None + */ +void +ia64_mca_cmc_vector_enable (void *dummy) +{ + cmcv_reg_t cmcv; + + cmcv = (cmcv_reg_t)ia64_get_cmcv(); + + cmcv.cmcv_mask = 0; /* Unmask/enable interrupt */ + ia64_set_cmcv(cmcv.cmcv_regval); + + IA64_MCA_DEBUG("ia64_mca_cmc_vector_enable: CPU %d corrected " + "machine check vector %#x enabled.\n", + smp_processor_id(), cmcv.cmcv_vector); +} + #if defined(MCA_TEST) @@ -396,7 +468,7 @@ SAL_MC_PARAM_MECHANISM_INT, IA64_MCA_RENDEZ_VECTOR, IA64_MCA_RENDEZ_TIMEOUT, - 0))) + SAL_MC_PARAM_RZ_ALWAYS))) { printk(KERN_ERR "ia64_mca_init: Failed to register rendezvous interrupt " "with SAL. rc = %ld\n", rc); @@ -494,9 +566,7 @@ setup_irq(irq, &mca_cpe_irqaction); } ia64_mca_register_cpev(cpev); - } else - printk(KERN_ERR - "ia64_mca_init: Failed to get routed CPEI vector from ACPI.\n"); + } } /* Initialize the areas set aside by the OS to buffer the @@ -610,14 +680,11 @@ ia64_mca_rendez_int_handler(int rendez_irq, void *arg, struct pt_regs *ptregs) { unsigned long flags; - int cpu = 0; + int cpu = smp_processor_id(); /* Mask all interrupts */ local_irq_save(flags); -#ifdef CONFIG_SMP - cpu = cpu_logical_id(hard_smp_processor_id()); -#endif ia64_mc_info.imi_rendez_checkin[cpu] = IA64_MCA_RENDEZ_CHECKIN_DONE; /* Register with the SAL monarch that the slave has * reached SAL @@ -751,11 +818,68 @@ void ia64_mca_cmc_int_handler(int cmc_irq, void *arg, struct pt_regs *ptregs) { + static unsigned long cmc_history[CMC_HISTORY_LENGTH]; + static int index; + static spinlock_t cmc_history_lock = SPIN_LOCK_UNLOCKED; + IA64_MCA_DEBUG("ia64_mca_cmc_int_handler: received interrupt vector = %#x on CPU %d\n", cmc_irq, smp_processor_id()); /* Get the CMC error record and log it */ ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CMC, 0); + + spin_lock(&cmc_history_lock); + if (!cmc_polling_enabled) { + int i, count = 1; /* we know 1 happened now */ + unsigned long now = jiffies; + + for (i = 0; i < CMC_HISTORY_LENGTH; i++) { + if (now - cmc_history[i] <= HZ) + count++; + } + + IA64_MCA_DEBUG(KERN_INFO "CMC threshold %d/%d\n", count, CMC_HISTORY_LENGTH); + if (count >= CMC_HISTORY_LENGTH) { + /* + * CMC threshold exceeded, clear the history + * so we have a fresh start when we return + */ + for (index = 0 ; index < CMC_HISTORY_LENGTH; index++) + cmc_history[index] = 0; + index = 0; + + /* Switch to polling mode */ + cmc_polling_enabled = 1; + + /* + * Unlock & enable interrupts before + * smp_call_function or risk deadlock + */ + spin_unlock(&cmc_history_lock); + ia64_mca_cmc_vector_disable(NULL); + + local_irq_enable(); + smp_call_function(ia64_mca_cmc_vector_disable, NULL, 1, 1); + + /* + * Corrected errors will still be corrected, but + * make sure there's a log somewhere that indicates + * something is generating more than we can handle. + */ + printk(KERN_WARNING "ia64_mca_cmc_int_handler: WARNING: Switching to polling CMC handler, error records may be lost\n"); + + + mod_timer(&cmc_poll_timer, jiffies + CMC_POLL_INTERVAL); + + /* lock already released, get out now */ + return; + } else { + cmc_history[index++] = now; + if (index == CMC_HISTORY_LENGTH) + index = 0; + } + } + spin_unlock(&cmc_history_lock); } /* @@ -768,6 +892,7 @@ { spinlock_t isl_lock; int isl_index; + unsigned long isl_count; ia64_err_rec_t *isl_log[IA64_MAX_LOGS]; /* need space to store header + error log */ } ia64_state_log_t; @@ -784,11 +909,145 @@ #define IA64_LOG_NEXT_INDEX(it) ia64_state_log[it].isl_index #define IA64_LOG_CURR_INDEX(it) 1 - ia64_state_log[it].isl_index #define IA64_LOG_INDEX_INC(it) \ - ia64_state_log[it].isl_index = 1 - ia64_state_log[it].isl_index + {ia64_state_log[it].isl_index = 1 - ia64_state_log[it].isl_index; \ + ia64_state_log[it].isl_count++;} #define IA64_LOG_INDEX_DEC(it) \ ia64_state_log[it].isl_index = 1 - ia64_state_log[it].isl_index #define IA64_LOG_NEXT_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)])) #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) +#define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count + +/* + * ia64_mca_cmc_int_caller + * + * Call CMC interrupt handler, only purpose is to have a + * smp_call_function callable entry. + * + * Inputs : dummy(unused) + * Outputs : None + * */ +static void +ia64_mca_cmc_int_caller(void *dummy) +{ + ia64_mca_cmc_int_handler(0, NULL, NULL); +} + +/* + * ia64_mca_cmc_poll + * + * Poll for Corrected Machine Checks (CMCs) + * + * Inputs : dummy(unused) + * Outputs : None + * + */ +static void +ia64_mca_cmc_poll (unsigned long dummy) +{ + int start_count; + + start_count = IA64_LOG_COUNT(SAL_INFO_TYPE_CMC); + + /* Call the interrupt handler */ + smp_call_function(ia64_mca_cmc_int_caller, NULL, 1, 1); + local_irq_disable(); + ia64_mca_cmc_int_caller(NULL); + local_irq_enable(); + + /* + * If no log recored, switch out of polling mode. + */ + if (start_count == IA64_LOG_COUNT(SAL_INFO_TYPE_CMC)) { + printk(KERN_WARNING "ia64_mca_cmc_poll: Returning to interrupt driven CMC handler\n"); + cmc_polling_enabled = 0; + smp_call_function(ia64_mca_cmc_vector_enable, NULL, 1, 1); + ia64_mca_cmc_vector_enable(NULL); + } else { + mod_timer(&cmc_poll_timer, jiffies + CMC_POLL_INTERVAL); + } +} + +/* + * ia64_mca_cpe_int_caller + * + * Call CPE interrupt handler, only purpose is to have a + * smp_call_function callable entry. + * + * Inputs : dummy(unused) + * Outputs : None + * */ +static void +ia64_mca_cpe_int_caller(void *dummy) +{ + ia64_mca_cpe_int_handler(0, NULL, NULL); +} + +/* + * ia64_mca_cpe_poll + * + * Poll for Corrected Platform Errors (CPEs), dynamically adjust + * polling interval based on occurance of an event. + * + * Inputs : dummy(unused) + * Outputs : None + * + */ +static void +ia64_mca_cpe_poll (unsigned long dummy) +{ + int start_count; + static int poll_time = MAX_CPE_POLL_INTERVAL; + + start_count = IA64_LOG_COUNT(SAL_INFO_TYPE_CPE); + + /* Call the interrupt handler */ + smp_call_function(ia64_mca_cpe_int_caller, NULL, 1, 1); + local_irq_disable(); + ia64_mca_cpe_int_caller(NULL); + local_irq_enable(); + + /* + * If a log was recorded, increase our polling frequency, + * otherwise, backoff. + */ + if (start_count != IA64_LOG_COUNT(SAL_INFO_TYPE_CPE)) { + poll_time = max(MIN_CPE_POLL_INTERVAL, poll_time/2); + } else { + poll_time = min(MAX_CPE_POLL_INTERVAL, poll_time * 2); + } + mod_timer(&cpe_poll_timer, jiffies + poll_time); +} + +/* + * ia64_mca_late_init + * + * Opportunity to setup things that require initialization later + * than ia64_mca_init. Setup a timer to poll for CPEs if the + * platform doesn't support an interrupt driven mechanism. + * + * Inputs : None + * Outputs : Status + */ +static int __init +ia64_mca_late_init(void) +{ + init_timer(&cmc_poll_timer); + cmc_poll_timer.function = ia64_mca_cmc_poll; + + /* Reset to the correct state */ + cmc_polling_enabled = 0; + + init_timer(&cpe_poll_timer); + cpe_poll_timer.function = ia64_mca_cpe_poll; + + /* If platform doesn't support CPEI, get the timer going. */ + if (acpi_request_vector(ACPI_INTERRUPT_CPEI) < 0) + ia64_mca_cpe_poll(0UL); + + return 0; +} + +device_initcall(ia64_mca_late_init); /* * C portion of the OS INIT handler @@ -949,7 +1208,6 @@ return total_len; } else { IA64_LOG_UNLOCK(sal_info_type); - prfunc("ia64_log_get: No SAL error record available for type %d\n", sal_info_type); return 0; } } diff -Nru a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/kernel/module.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,889 @@ +/* + * IA-64-specific support for kernel module loader. + * + * Copyright (C) 2003 Hewlett-Packard Co + * David Mosberger-Tang + * + * Loosely based on patch by Rusty Russell. + */ + +/* relocs tested so far: + + DIR64LSB + FPTR64LSB + GPREL22 + LDXMOV + LDXMOV + LTOFF22 + LTOFF22X + LTOFF22X + LTOFF_FPTR22 + PCREL21B + PCREL64LSB + SECREL32LSB + SEGREL64LSB + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#define ARCH_MODULE_DEBUG 0 + +#if ARCH_MODULE_DEBUG +# define DEBUGP printk +# define inline +#else +# define DEBUGP(fmt , a...) +#endif + +#ifdef CONFIG_ITANIUM +# define USE_BRL 0 +#else +# define USE_BRL 1 +#endif + +#define MAX_LTOFF ((uint64_t) (1 << 22)) /* max. allowable linkage-table offset */ + +/* Define some relocation helper macros/types: */ + +#define FORMAT_SHIFT 0 +#define FORMAT_BITS 3 +#define FORMAT_MASK ((1 << FORMAT_BITS) - 1) +#define VALUE_SHIFT 3 +#define VALUE_BITS 5 +#define VALUE_MASK ((1 << VALUE_BITS) - 1) + +enum reloc_target_format { + /* direct encoded formats: */ + RF_NONE = 0, + RF_INSN14 = 1, + RF_INSN22 = 2, + RF_INSN64 = 3, + RF_32MSB = 4, + RF_32LSB = 5, + RF_64MSB = 6, + RF_64LSB = 7, + + /* formats that cannot be directly decoded: */ + RF_INSN60, + RF_INSN21B, /* imm21 form 1 */ + RF_INSN21M, /* imm21 form 2 */ + RF_INSN21F /* imm21 form 3 */ +}; + +enum reloc_value_formula { + RV_DIRECT = 4, /* S + A */ + RV_GPREL = 5, /* @gprel(S + A) */ + RV_LTREL = 6, /* @ltoff(S + A) */ + RV_PLTREL = 7, /* @pltoff(S + A) */ + RV_FPTR = 8, /* @fptr(S + A) */ + RV_PCREL = 9, /* S + A - P */ + RV_LTREL_FPTR = 10, /* @ltoff(@fptr(S + A)) */ + RV_SEGREL = 11, /* @segrel(S + A) */ + RV_SECREL = 12, /* @secrel(S + A) */ + RV_BDREL = 13, /* BD + A */ + RV_LTV = 14, /* S + A (like RV_DIRECT, except frozen at static link-time) */ + RV_PCREL2 = 15, /* S + A - P */ + RV_SPECIAL = 16, /* various (see below) */ + RV_RSVD17 = 17, + RV_TPREL = 18, /* @tprel(S + A) */ + RV_LTREL_TPREL = 19, /* @ltoff(@tprel(S + A)) */ + RV_DTPMOD = 20, /* @dtpmod(S + A) */ + RV_LTREL_DTPMOD = 21, /* @ltoff(@dtpmod(S + A)) */ + RV_DTPREL = 22, /* @dtprel(S + A) */ + RV_LTREL_DTPREL = 23, /* @ltoff(@dtprel(S + A)) */ + RV_RSVD24 = 24, + RV_RSVD25 = 25, + RV_RSVD26 = 26, + RV_RSVD27 = 27 + /* 28-31 reserved for implementation-specific purposes. */ +}; + +#define N(reloc) [R_IA64_##reloc] = #reloc + +static const char *reloc_name[256] = { + N(NONE), N(IMM14), N(IMM22), N(IMM64), + N(DIR32MSB), N(DIR32LSB), N(DIR64MSB), N(DIR64LSB), + N(GPREL22), N(GPREL64I), N(GPREL32MSB), N(GPREL32LSB), + N(GPREL64MSB), N(GPREL64LSB), N(LTOFF22), N(LTOFF64I), + N(PLTOFF22), N(PLTOFF64I), N(PLTOFF64MSB), N(PLTOFF64LSB), + N(FPTR64I), N(FPTR32MSB), N(FPTR32LSB), N(FPTR64MSB), + N(FPTR64LSB), N(PCREL60B), N(PCREL21B), N(PCREL21M), + N(PCREL21F), N(PCREL32MSB), N(PCREL32LSB), N(PCREL64MSB), + N(PCREL64LSB), N(LTOFF_FPTR22), N(LTOFF_FPTR64I), N(LTOFF_FPTR32MSB), + N(LTOFF_FPTR32LSB), N(LTOFF_FPTR64MSB), N(LTOFF_FPTR64LSB), N(SEGREL32MSB), + N(SEGREL32LSB), N(SEGREL64MSB), N(SEGREL64LSB), N(SECREL32MSB), + N(SECREL32LSB), N(SECREL64MSB), N(SECREL64LSB), N(REL32MSB), + N(REL32LSB), N(REL64MSB), N(REL64LSB), N(LTV32MSB), + N(LTV32LSB), N(LTV64MSB), N(LTV64LSB), N(PCREL21BI), + N(PCREL22), N(PCREL64I), N(IPLTMSB), N(IPLTLSB), + N(COPY), N(LTOFF22X), N(LDXMOV), N(TPREL14), + N(TPREL22), N(TPREL64I), N(TPREL64MSB), N(TPREL64LSB), + N(LTOFF_TPREL22), N(DTPMOD64MSB), N(DTPMOD64LSB), N(LTOFF_DTPMOD22), + N(DTPREL14), N(DTPREL22), N(DTPREL64I), N(DTPREL32MSB), + N(DTPREL32LSB), N(DTPREL64MSB), N(DTPREL64LSB), N(LTOFF_DTPREL22) +}; + +#undef N + +struct got_entry { + uint64_t val; +}; + +struct fdesc { + uint64_t ip; + uint64_t gp; +}; + +/* Opaque struct for insns, to protect against derefs. */ +struct insn; + +static inline uint64_t +bundle (const struct insn *insn) +{ + return (uint64_t) insn & ~0xfUL; +} + +static inline int +slot (const struct insn *insn) +{ + return (uint64_t) insn & 0x3; +} + +/* Patch instruction with "val" where "mask" has 1 bits. */ +static void +apply (struct insn *insn, uint64_t mask, uint64_t val) +{ + uint64_t m0, m1, v0, v1, b0, b1, *b = (uint64_t *) bundle(insn); +# define insn_mask ((1UL << 41) - 1) + unsigned long shift; + + b0 = b[0]; b1 = b[1]; + shift = 5 + 41 * slot(insn); /* 5 bits of template, then 3 x 41-bit instructions */ + if (shift >= 64) { + m1 = mask << (shift - 64); + v1 = val << (shift - 64); + } else { + m0 = mask << shift; m1 = mask >> (64 - shift); + v0 = val << shift; v1 = val >> (64 - shift); + b[0] = (b0 & ~m0) | (v0 & m0); + } + b[1] = (b1 & ~m1) | (v1 & m1); +} + +static int +apply_imm64 (struct module *mod, struct insn *insn, uint64_t val) +{ + if (slot(insn) != 2) { + printk(KERN_ERR "%s: illegal slot number %d for IMM64\n", + mod->name, slot(insn)); + return 0; + } + apply(insn, 0x01fffefe000, ( ((val & 0x8000000000000000) >> 27) /* bit 63 -> 36 */ + | ((val & 0x0000000000200000) << 0) /* bit 21 -> 21 */ + | ((val & 0x00000000001f0000) << 6) /* bit 16 -> 22 */ + | ((val & 0x000000000000ff80) << 20) /* bit 7 -> 27 */ + | ((val & 0x000000000000007f) << 13) /* bit 0 -> 13 */)); + apply((void *) insn - 1, 0x1ffffffffff, val >> 22); + return 1; +} + +static int +apply_imm60 (struct module *mod, struct insn *insn, uint64_t val) +{ + if (slot(insn) != 2) { + printk(KERN_ERR "%s: illegal slot number %d for IMM60\n", + mod->name, slot(insn)); + return 0; + } + if (val + ((uint64_t) 1 << 59) >= (1UL << 60)) { + printk(KERN_ERR "%s: value %ld out of IMM60 range\n", mod->name, (int64_t) val); + return 0; + } + apply(insn, 0x011ffffe000, ( ((val & 0x1000000000000000) >> 24) /* bit 60 -> 36 */ + | ((val & 0x00000000000fffff) << 13) /* bit 0 -> 13 */)); + apply((void *) insn - 1, 0x1fffffffffc, val >> 18); + return 1; +} + +static int +apply_imm22 (struct module *mod, struct insn *insn, uint64_t val) +{ + if (val + (1 << 21) >= (1 << 22)) { + printk(KERN_ERR "%s: value %li out of IMM22 range\n", mod->name, (int64_t)val); + return 0; + } + apply(insn, 0x01fffcfe000, ( ((val & 0x200000) << 15) /* bit 21 -> 36 */ + | ((val & 0x1f0000) << 6) /* bit 16 -> 22 */ + | ((val & 0x00ff80) << 20) /* bit 7 -> 27 */ + | ((val & 0x00007f) << 13) /* bit 0 -> 13 */)); + return 1; +} + +static int +apply_imm21b (struct module *mod, struct insn *insn, uint64_t val) +{ + if (val + (1 << 20) >= (1 << 21)) { + printk(KERN_ERR "%s: value %li out of IMM21b range\n", mod->name, (int64_t)val); + return 0; + } + apply(insn, 0x11ffffe000, ( ((val & 0x100000) << 16) /* bit 20 -> 36 */ + | ((val & 0x0fffff) << 13) /* bit 0 -> 13 */)); + return 1; +} + +#if USE_BRL + +struct plt_entry { + /* Three instruction bundles in PLT. */ + unsigned char bundle[2][16]; +}; + +static const struct plt_entry ia64_plt_template = { + { + { + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* movl gp=TARGET_GP */ + 0x00, 0x00, 0x00, 0x60 + }, + { + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* brl.many gp=TARGET_GP */ + 0x08, 0x00, 0x00, 0xc0 + } + } +}; + +static int +patch_plt (struct module *mod, struct plt_entry *plt, long target_ip, unsigned long target_gp) +{ + if (apply_imm64(mod, (struct insn *) (plt->bundle[0] + 2), target_gp) + && apply_imm60(mod, (struct insn *) (plt->bundle[1] + 2), + (target_ip - (int64_t) plt->bundle[1]) / 16)) + return 1; + return 0; +} + +unsigned long +plt_target (struct plt_entry *plt) +{ + uint64_t b0, b1, *b = (uint64_t *) plt->bundle[1]; + long off; + + b0 = b[0]; b1 = b[1]; + off = ( ((b1 & 0x00fffff000000000) >> 36) /* imm20b -> bit 0 */ + | ((b0 >> 48) << 20) | ((b1 & 0x7fffff) << 36) /* imm39 -> bit 20 */ + | ((b1 & 0x0800000000000000) << 1)); /* i -> bit 60 */ + return (long) plt->bundle[1] + 16*off; +} + +#else /* !USE_BRL */ + +struct plt_entry { + /* Three instruction bundles in PLT. */ + unsigned char bundle[3][16]; +}; + +static const struct plt_entry ia64_plt_template = { + { + { + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* movl r16=TARGET_IP */ + 0x02, 0x00, 0x00, 0x60 + }, + { + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* movl gp=TARGET_GP */ + 0x00, 0x00, 0x00, 0x60 + }, + { + 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MIB] nop.m 0 */ + 0x60, 0x80, 0x04, 0x80, 0x03, 0x00, /* mov b6=r16 */ + 0x60, 0x00, 0x80, 0x00 /* br.few b6 */ + } + } +}; + +static int +patch_plt (struct module *mod, struct plt_entry *plt, long target_ip, unsigned long target_gp) +{ + if (apply_imm64(mod, (struct insn *) (plt->bundle[0] + 2), target_ip) + && apply_imm64(mod, (struct insn *) (plt->bundle[1] + 2), target_gp)) + return 1; + return 0; +} + +unsigned long +plt_target (struct plt_entry *plt) +{ + uint64_t b0, b1, *b = (uint64_t *) plt->bundle[0]; + + b0 = b[0]; b1 = b[1]; + return ( ((b1 & 0x000007f000000000) >> 36) /* imm7b -> bit 0 */ + | ((b1 & 0x07fc000000000000) >> 43) /* imm9d -> bit 7 */ + | ((b1 & 0x0003e00000000000) >> 29) /* imm5c -> bit 16 */ + | ((b1 & 0x0000100000000000) >> 23) /* ic -> bit 21 */ + | ((b0 >> 46) << 22) | ((b1 & 0x7fffff) << 40) /* imm41 -> bit 22 */ + | ((b1 & 0x0800000000000000) << 4)); /* i -> bit 63 */ +} + +#endif /* !USE_BRL */ + +void * +module_alloc (unsigned long size) +{ + if (!size) + return NULL; + return vmalloc(size); +} + +void +module_free (struct module *mod, void *module_region) +{ + vfree(module_region); +} + +/* Have we already seen one of these relocations? */ +/* FIXME: we could look in other sections, too --RR */ +static int +duplicate_reloc (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i; + + for (i = 0; i < num; i++) { + if (rela[i].r_info == rela[num].r_info && rela[i].r_addend == rela[num].r_addend) + return 1; + } + return 0; +} + +/* Count how many GOT entries we may need */ +static unsigned int +count_gots (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i, ret = 0; + + /* Sure, this is order(n^2), but it's usually short, and not + time critical */ + for (i = 0; i < num; i++) { + switch (ELF64_R_TYPE(rela[i].r_info)) { + case R_IA64_LTOFF22: + case R_IA64_LTOFF22X: + case R_IA64_LTOFF64I: + case R_IA64_LTOFF_FPTR22: + case R_IA64_LTOFF_FPTR64I: + case R_IA64_LTOFF_FPTR32MSB: + case R_IA64_LTOFF_FPTR32LSB: + case R_IA64_LTOFF_FPTR64MSB: + case R_IA64_LTOFF_FPTR64LSB: + if (!duplicate_reloc(rela, i)) + ret++; + break; + } + } + return ret; +} + +/* Count how many PLT entries we may need */ +static unsigned int +count_plts (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i, ret = 0; + + /* Sure, this is order(n^2), but it's usually short, and not + time critical */ + for (i = 0; i < num; i++) { + switch (ELF64_R_TYPE(rela[i].r_info)) { + case R_IA64_PCREL21B: + case R_IA64_PLTOFF22: + case R_IA64_PLTOFF64I: + case R_IA64_PLTOFF64MSB: + case R_IA64_PLTOFF64LSB: + case R_IA64_IPLTMSB: + case R_IA64_IPLTLSB: + if (!duplicate_reloc(rela, i)) + ret++; + break; + } + } + return ret; +} + +/* We need to create an function-descriptors for any internal function + which is referenced. */ +static unsigned int +count_fdescs (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i, ret = 0; + + /* Sure, this is order(n^2), but it's usually short, and not time critical. */ + for (i = 0; i < num; i++) { + switch (ELF64_R_TYPE(rela[i].r_info)) { + case R_IA64_FPTR64I: + case R_IA64_FPTR32LSB: + case R_IA64_FPTR32MSB: + case R_IA64_FPTR64LSB: + case R_IA64_FPTR64MSB: + case R_IA64_LTOFF_FPTR22: + case R_IA64_LTOFF_FPTR32LSB: + case R_IA64_LTOFF_FPTR32MSB: + case R_IA64_LTOFF_FPTR64I: + case R_IA64_LTOFF_FPTR64LSB: + case R_IA64_LTOFF_FPTR64MSB: + case R_IA64_IPLTMSB: + case R_IA64_IPLTLSB: + /* + * Jumps to static functions sometimes go straight to their + * offset. Of course, that may not be possible if the jump is + * from init -> core or vice. versa, so we need to generate an + * FDESC (and PLT etc) for that. + */ + case R_IA64_PCREL21B: + if (!duplicate_reloc(rela, i)) + ret++; + break; + } + } + return ret; +} + +int +module_frob_arch_sections (Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings, + struct module *mod) +{ + unsigned long core_plts = 0, init_plts = 0, gots = 0, fdescs = 0; + Elf64_Shdr *s, *sechdrs_end = sechdrs + ehdr->e_shnum; + + /* + * To store the PLTs and function-descriptors, we expand the .text section for + * core module-code and the .init.text section for initialization code. + */ + for (s = sechdrs; s < sechdrs_end; ++s) + if (strcmp(".core.plt", secstrings + s->sh_name) == 0) + mod->arch.core_plt = s; + else if (strcmp(".init.plt", secstrings + s->sh_name) == 0) + mod->arch.init_plt = s; + else if (strcmp(".got", secstrings + s->sh_name) == 0) + mod->arch.got = s; + else if (strcmp(".opd", secstrings + s->sh_name) == 0) + mod->arch.opd = s; + else if (strcmp(".IA_64.unwind", secstrings + s->sh_name) == 0) + mod->arch.unwind = s; + + if (!mod->arch.core_plt || !mod->arch.init_plt || !mod->arch.got || !mod->arch.opd) { + printk(KERN_ERR "%s: sections missing\n", mod->name); + return -ENOEXEC; + } + + /* GOT and PLTs can occur in any relocated section... */ + for (s = sechdrs + 1; s < sechdrs_end; ++s) { + const Elf64_Rela *rels = (void *)ehdr + s->sh_offset; + unsigned long numrels = s->sh_size/sizeof(Elf64_Rela); + + if (s->sh_type != SHT_RELA) + continue; + + gots += count_gots(rels, numrels); + fdescs += count_fdescs(rels, numrels); + if (strstr(secstrings + s->sh_name, ".init")) + init_plts += count_plts(rels, numrels); + else + core_plts += count_plts(rels, numrels); + } + + mod->arch.core_plt->sh_type = SHT_NOBITS; + mod->arch.core_plt->sh_flags = SHF_EXECINSTR | SHF_ALLOC; + mod->arch.core_plt->sh_addralign = 16; + mod->arch.core_plt->sh_size = core_plts * sizeof(struct plt_entry); + mod->arch.init_plt->sh_type = SHT_NOBITS; + mod->arch.init_plt->sh_flags = SHF_EXECINSTR | SHF_ALLOC; + mod->arch.init_plt->sh_addralign = 16; + mod->arch.init_plt->sh_size = init_plts * sizeof(struct plt_entry); + mod->arch.got->sh_type = SHT_NOBITS; + mod->arch.got->sh_flags = ARCH_SHF_SMALL | SHF_ALLOC; + mod->arch.got->sh_addralign = 8; + mod->arch.got->sh_size = gots * sizeof(struct got_entry); + mod->arch.opd->sh_type = SHT_NOBITS; + mod->arch.opd->sh_flags = SHF_ALLOC; + mod->arch.opd->sh_addralign = 8; + mod->arch.opd->sh_size = fdescs * sizeof(struct fdesc); + DEBUGP("%s: core.plt=%lx, init.plt=%lx, got=%lx, fdesc=%lx\n", + __FUNCTION__, mod->arch.core_plt->sh_size, mod->arch.init_plt->sh_size, + mod->arch.got->sh_size, mod->arch.opd->sh_size); + return 0; +} + +static inline int +in_init (const struct module *mod, uint64_t addr) +{ + return addr - (uint64_t) mod->module_init < mod->init_size; +} + +static inline int +in_core (const struct module *mod, uint64_t addr) +{ + return addr - (uint64_t) mod->module_core < mod->core_size; +} + +static inline int +is_internal (const struct module *mod, uint64_t value) +{ + return in_init(mod, value) || in_core(mod, value); +} + +/* + * Get gp-relative offset for the linkage-table entry of VALUE. + */ +static uint64_t +get_ltoff (struct module *mod, uint64_t value, int *okp) +{ + struct got_entry *got, *e; + + if (!*okp) + return 0; + + got = (void *) mod->arch.got->sh_addr; + for (e = got; e < got + mod->arch.next_got_entry; ++e) + if (e->val == value) + goto found; + + /* Not enough GOT entries? */ + if (e >= (struct got_entry *) (mod->arch.got->sh_addr + mod->arch.got->sh_size)) + BUG(); + + e->val = value; + ++mod->arch.next_got_entry; + found: + return (uint64_t) e - mod->arch.gp; +} + +static inline int +gp_addressable (struct module *mod, uint64_t value) +{ + return value - mod->arch.gp + MAX_LTOFF/2 < MAX_LTOFF; +} + +/* Get PC-relative PLT entry for this value. Returns 0 on failure. */ +static uint64_t +get_plt (struct module *mod, const struct insn *insn, uint64_t value, int *okp) +{ + struct plt_entry *plt, *plt_end; + uint64_t target_ip, target_gp; + + if (!*okp) + return 0; + + if (in_init(mod, (uint64_t) insn)) { + plt = (void *) mod->arch.init_plt->sh_addr; + plt_end = (void *) plt + mod->arch.init_plt->sh_size; + } else { + plt = (void *) mod->arch.core_plt->sh_addr; + plt_end = (void *) plt + mod->arch.core_plt->sh_size; + } + + /* "value" is a pointer to a function-descriptor; fetch the target ip/gp from it: */ + target_ip = ((uint64_t *) value)[0]; + target_gp = ((uint64_t *) value)[1]; + + /* Look for existing PLT entry. */ + while (plt->bundle[0][0]) { + if (plt_target(plt) == target_ip) + goto found; + if (++plt >= plt_end) + BUG(); + } + *plt = ia64_plt_template; + if (!patch_plt(mod, plt, target_ip, target_gp)) { + *okp = 0; + return 0; + } +#if ARCH_MODULE_DEBUG + if (plt_target(plt) != target_ip) { + printk("%s: mistargeted PLT: wanted %lx, got %lx\n", + __FUNCTION__, target_ip, plt_target(plt)); + *okp = 0; + return 0; + } +#endif + found: + return (uint64_t) plt; +} + +/* Get function descriptor for VALUE. */ +static uint64_t +get_fdesc (struct module *mod, uint64_t value, int *okp) +{ + struct fdesc *fdesc = (void *) mod->arch.opd->sh_addr; + + if (!*okp) + return 0; + + if (!value) { + printk(KERN_ERR "%s: fdesc for zero requested!\n", mod->name); + return 0; + } + + if (!is_internal(mod, value)) + /* + * If it's not a module-local entry-point, "value" already points to a + * function-descriptor. + */ + return value; + + /* Look for existing function descriptor. */ + while (fdesc->ip) { + if (fdesc->ip == value) + return (uint64_t)fdesc; + if ((uint64_t) ++fdesc >= mod->arch.opd->sh_addr + mod->arch.opd->sh_size) + BUG(); + } + + /* Create new one */ + fdesc->ip = value; + fdesc->gp = mod->arch.gp; + return (uint64_t) fdesc; +} + +static inline int +do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend, + Elf64_Shdr *sec, void *location) +{ + enum reloc_target_format format = (r_type >> FORMAT_SHIFT) & FORMAT_MASK; + enum reloc_value_formula formula = (r_type >> VALUE_SHIFT) & VALUE_MASK; + uint64_t val; + int ok = 1; + + val = sym->st_value + addend; + + switch (formula) { + case RV_SEGREL: /* segment base is arbitrarily chosen to be 0 for kernel modules */ + case RV_DIRECT: + break; + + case RV_GPREL: val -= mod->arch.gp; break; + case RV_LTREL: val = get_ltoff(mod, val, &ok); break; + case RV_PLTREL: val = get_plt(mod, location, val, &ok); break; + case RV_FPTR: val = get_fdesc(mod, val, &ok); break; + case RV_SECREL: val -= sec->sh_addr; break; + case RV_LTREL_FPTR: val = get_ltoff(mod, get_fdesc(mod, val, &ok), &ok); break; + + case RV_PCREL: + switch (r_type) { + case R_IA64_PCREL21B: + /* special because it can cross into other module/kernel-core. */ + if (!is_internal(mod, val)) + val = get_plt(mod, location, val, &ok); + /* FALL THROUGH */ + default: + val -= bundle(location); + break; + + case R_IA64_PCREL32MSB: + case R_IA64_PCREL32LSB: + case R_IA64_PCREL64MSB: + case R_IA64_PCREL64LSB: + val -= (uint64_t) location; + break; + + } + switch (r_type) { + case R_IA64_PCREL60B: format = RF_INSN60; break; + case R_IA64_PCREL21B: format = RF_INSN21B; break; + case R_IA64_PCREL21M: format = RF_INSN21M; break; + case R_IA64_PCREL21F: format = RF_INSN21F; break; + default: break; + } + break; + + case RV_BDREL: + val -= (uint64_t) (in_init(mod, val) ? mod->module_init : mod->module_core); + break; + + case RV_LTV: + /* can link-time value relocs happen here? */ + BUG(); + break; + + case RV_PCREL2: + if (r_type == R_IA64_PCREL21BI) { + if (!is_internal(mod, val)) { + printk(KERN_ERR "%s: %s reloc against non-local symbol (%lx)\n", + __FUNCTION__, reloc_name[r_type], val); + return -ENOEXEC; + } + format = RF_INSN21B; + } + val -= bundle(location); + break; + + case RV_SPECIAL: + switch (r_type) { + case R_IA64_IPLTMSB: + case R_IA64_IPLTLSB: + val = get_fdesc(mod, get_plt(mod, location, val, &ok), &ok); + format = RF_64LSB; + if (r_type == R_IA64_IPLTMSB) + format = RF_64MSB; + break; + + case R_IA64_SUB: + val = addend - sym->st_value; + format = RF_INSN64; + break; + + case R_IA64_LTOFF22X: + if (gp_addressable(mod, val)) + val -= mod->arch.gp; + else + val = get_ltoff(mod, val, &ok); + format = RF_INSN22; + break; + + case R_IA64_LDXMOV: + if (gp_addressable(mod, val)) { + /* turn "ld8" into "mov": */ + DEBUGP("%s: patching ld8 at %p to mov\n", __FUNCTION__, location); + apply(location, 0x1fff80fe000, 0x10000000000); + } + return 0; + + default: + if (reloc_name[r_type]) + printk(KERN_ERR "%s: special reloc %s not supported", + mod->name, reloc_name[r_type]); + else + printk(KERN_ERR "%s: unknown special reloc %x\n", + mod->name, r_type); + return -ENOEXEC; + } + break; + + case RV_TPREL: + case RV_LTREL_TPREL: + case RV_DTPMOD: + case RV_LTREL_DTPMOD: + case RV_DTPREL: + case RV_LTREL_DTPREL: + printk(KERN_ERR "%s: %s reloc not supported\n", + mod->name, reloc_name[r_type] ? reloc_name[r_type] : "?"); + return -ENOEXEC; + + default: + printk(KERN_ERR "%s: unknown reloc %x\n", mod->name, r_type); + return -ENOEXEC; + } + + if (!ok) + return -ENOEXEC; + + DEBUGP("%s: [%p]<-%016lx = %s(%lx)\n", __FUNCTION__, location, val, + reloc_name[r_type] ? reloc_name[r_type] : "?", sym->st_value + addend); + + switch (format) { + case RF_INSN21B: ok = apply_imm21b(mod, location, (int64_t) val / 16); break; + case RF_INSN22: ok = apply_imm22(mod, location, val); break; + case RF_INSN64: ok = apply_imm64(mod, location, val); break; + case RF_INSN60: ok = apply_imm60(mod, location, (int64_t) val / 16); break; + case RF_32LSB: put_unaligned(val, (uint32_t *) location); break; + case RF_64LSB: put_unaligned(val, (uint64_t *) location); break; + case RF_32MSB: /* ia64 Linux is little-endian... */ + case RF_64MSB: /* ia64 Linux is little-endian... */ + case RF_INSN14: /* must be within-module, i.e., resolved by "ld -r" */ + case RF_INSN21M: /* must be within-module, i.e., resolved by "ld -r" */ + case RF_INSN21F: /* must be within-module, i.e., resolved by "ld -r" */ + printk(KERN_ERR "%s: format %u needed by %s reloc is not supported\n", + mod->name, format, reloc_name[r_type] ? reloc_name[r_type] : "?"); + return -ENOEXEC; + + default: + printk(KERN_ERR "%s: relocation %s resulted in unknown format %u\n", + mod->name, reloc_name[r_type] ? reloc_name[r_type] : "?", format); + return -ENOEXEC; + } + return ok ? 0 : -ENOEXEC; +} + +int +apply_relocate_add (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symindex, + unsigned int relsec, struct module *mod) +{ + unsigned int i, n = sechdrs[relsec].sh_size / sizeof(Elf64_Rela); + Elf64_Rela *rela = (void *) sechdrs[relsec].sh_addr; + Elf64_Shdr *target_sec; + int ret; + + DEBUGP("%s: applying section %u (%u relocs) to %u\n", __FUNCTION__, + relsec, n, sechdrs[relsec].sh_info); + + target_sec = sechdrs + sechdrs[relsec].sh_info; + + if (target_sec->sh_entsize == ~0UL) + /* + * If target section wasn't allocated, we don't need to relocate it. + * Happens, e.g., for debug sections. + */ + return 0; + + if (!mod->arch.gp) { + /* + * XXX Should have an arch-hook for running this after final section + * addresses have been selected... + */ + /* See if gp can cover the entire core module: */ + uint64_t gp = (uint64_t) mod->module_core + MAX_LTOFF / 2; + if (mod->core_size >= MAX_LTOFF) + /* + * This takes advantage of fact that SHF_ARCH_SMALL gets allocated + * at the end of the module. + */ + gp = (uint64_t) mod->module_core + mod->core_size - MAX_LTOFF / 2; + mod->arch.gp = gp; + DEBUGP("%s: placing gp at 0x%lx\n", __FUNCTION__, gp); + } + + for (i = 0; i < n; i++) { + ret = do_reloc(mod, ELF64_R_TYPE(rela[i].r_info), + ((Elf64_Sym *) sechdrs[symindex].sh_addr + + ELF64_R_SYM(rela[i].r_info)), + rela[i].r_addend, target_sec, + (void *) target_sec->sh_addr + rela[i].r_offset); + if (ret < 0) + return ret; + } + return 0; +} + +int +apply_relocate (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symindex, + unsigned int relsec, struct module *mod) +{ + printk(KERN_ERR "module %s: REL relocs in section %u unsupported\n", mod->name, relsec); + return -ENOEXEC; +} + +int +module_finalize (const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *mod) +{ + DEBUGP("%s: init: entry=%p\n", __FUNCTION__, mod->init); + if (mod->arch.unwind) + mod->arch.unw_table = unw_add_unwind_table(mod->name, 0, mod->arch.gp, + (void *) mod->arch.unwind->sh_addr, + ((void *) mod->arch.unwind->sh_addr + + mod->arch.unwind->sh_size)); + return 0; +} + +void +module_arch_cleanup (struct module *mod) +{ + if (mod->arch.unwind) + unw_remove_unwind_table(mod->arch.unw_table); +} diff -Nru a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c --- a/arch/ia64/kernel/palinfo.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/kernel/palinfo.c Sat Apr 12 14:44:06 2003 @@ -27,9 +27,7 @@ #include #include #include -#ifdef CONFIG_SMP #include -#endif MODULE_AUTHOR("Stephane Eranian "); MODULE_DESCRIPTION("/proc interface to IA-64 PAL"); @@ -37,12 +35,6 @@ #define PALINFO_VERSION "0.5" -#ifdef CONFIG_SMP -#define cpu_is_online(i) (cpu_online_map & (1UL << i)) -#else -#define cpu_is_online(i) 1 -#endif - typedef int (*palinfo_func_t)(char*); typedef struct { @@ -933,7 +925,7 @@ */ for (i=0; i < NR_CPUS; i++) { - if (!cpu_is_online(i)) continue; + if (!cpu_online(i)) continue; sprintf(cpustr,CPUSTR, i); diff -Nru a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c --- a/arch/ia64/kernel/perfmon.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/perfmon.c Sat Apr 12 14:44:10 2003 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -134,12 +135,6 @@ #define PFM_CPUINFO_CLEAR(v) __get_cpu_var(pfm_syst_info) &= ~(v) #define PFM_CPUINFO_SET(v) __get_cpu_var(pfm_syst_info) |= (v) -#ifdef CONFIG_SMP -#define cpu_is_online(i) (cpu_online_map & (1UL << i)) -#else -#define cpu_is_online(i) (i==0) -#endif - /* * debugging */ @@ -1082,7 +1077,7 @@ * and it must be a valid CPU */ cpu = ffz(~pfx->ctx_cpu_mask); - if (cpu_is_online(cpu) == 0) { + if (cpu_online(cpu) == 0) { DBprintk(("CPU%d is not online\n", cpu)); return -EINVAL; } @@ -3153,7 +3148,7 @@ p += sprintf(p, "ovfl_mask : 0x%lx\n", pmu_conf.ovfl_val); for(i=0; i < NR_CPUS; i++) { - if (cpu_is_online(i) == 0) continue; + if (cpu_online(i) == 0) continue; p += sprintf(p, "CPU%-2d overflow intrs : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_count); p += sprintf(p, "CPU%-2d spurious intrs : %lu\n", i, pfm_stats[i].pfm_spurious_ovfl_intr_count); p += sprintf(p, "CPU%-2d recorded samples : %lu\n", i, pfm_stats[i].pfm_recorded_samples_count); diff -Nru a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c --- a/arch/ia64/kernel/process.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/process.c Sat Apr 12 14:44:08 2003 @@ -66,10 +66,7 @@ void show_trace_task (struct task_struct *task) { - struct unw_frame_info info; - - unw_init_from_blocked_task(&info, task); - do_show_stack(&info, 0); + show_stack(task); } void @@ -169,7 +166,10 @@ void default_idle (void) { - /* may want to do PAL_LIGHT_HALT here... */ +#ifdef CONFIG_IA64_PAL_IDLE + if (!need_resched()) + safe_halt(); +#endif } void __attribute__((noreturn)) @@ -177,6 +177,10 @@ { /* endless idle loop with no priority at all */ while (1) { + void (*idle)(void) = pm_idle; + if (!idle) + idle = default_idle; + #ifdef CONFIG_SMP if (!need_resched()) min_xtp(); @@ -186,10 +190,7 @@ #ifdef CONFIG_IA64_SGI_SN snidle(); #endif - if (pm_idle) - (*pm_idle)(); - else - default_idle(); + (*idle)(); } #ifdef CONFIG_IA64_SGI_SN @@ -581,6 +582,15 @@ tid = clone(flags | CLONE_VM | CLONE_UNTRACED, 0); if (parent != current) { +#ifdef CONFIG_IA32_SUPPORT + if (IS_IA32_PROCESS(ia64_task_regs(current))) { + /* A kernel thread is always a 64-bit process. */ + current->thread.map_base = DEFAULT_MAP_BASE; + current->thread.task_size = DEFAULT_TASK_SIZE; + ia64_set_kr(IA64_KR_IO_BASE, current->thread.old_iob); + ia64_set_kr(IA64_KR_TSSD, current->thread.old_k1); + } +#endif result = (*fn)(arg); _exit(result); } @@ -751,7 +761,7 @@ } void -__put_task_struct (struct task_struct *tsk) +free_task_struct (struct task_struct *tsk) { free_pages((unsigned long) tsk, KERNEL_STACK_SIZE_ORDER); } diff -Nru a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c --- a/arch/ia64/kernel/signal.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/signal.c Sat Apr 12 14:44:08 2003 @@ -191,6 +191,10 @@ err |= __put_user(from->si_pfm_ovfl[2], &to->si_pfm_ovfl[2]); err |= __put_user(from->si_pfm_ovfl[3], &to->si_pfm_ovfl[3]); } + case __SI_TIMER >> 16: + err |= __put_user(from->si_tid, &to->si_tid); + err |= __put_user(from->si_overrun, &to->si_overrun); + err |= __put_user(from->si_value, &to->si_value); break; default: err |= __put_user(from->si_uid, &to->si_uid); diff -Nru a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c --- a/arch/ia64/kernel/smpboot.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/kernel/smpboot.c Sat Apr 12 14:44:06 2003 @@ -279,12 +279,15 @@ smp_setup_percpu_timer(); - /* - * Synchronize the ITC with the BP - */ - Dprintk("Going to syncup ITC with BP.\n"); + if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) { + /* + * Synchronize the ITC with the BP + */ + Dprintk("Going to syncup ITC with BP.\n"); + + ia64_sync_itc(0); + } - ia64_sync_itc(0); /* * Get our bogomips. */ diff -Nru a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c --- a/arch/ia64/kernel/time.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/kernel/time.c Sat Apr 12 14:44:06 2003 @@ -60,7 +60,7 @@ } /* - * Return the number of micro-seconds that elapsed since the last update to jiffy. The + * Return the number of nano-seconds that elapsed since the last update to jiffy. The * xtime_lock must be at least read-locked when calling this routine. */ static inline unsigned long @@ -86,6 +86,9 @@ void do_settimeofday (struct timeval *tv) { + time_t sec = tv->tv_sec; + long nsec = tv->tv_usec * 1000; + write_seqlock_irq(&xtime_lock); { /* @@ -94,22 +97,22 @@ * Discover what correction gettimeofday would have done, and then undo * it! */ - tv->tv_usec -= gettimeoffset(); - tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); + nsec -= gettimeoffset(); - while (tv->tv_usec < 0) { - tv->tv_usec += 1000000; - tv->tv_sec--; + while (nsec < 0) { + nsec += 1000000000; + sec--; } - xtime.tv_sec = tv->tv_sec; - xtime.tv_nsec = 1000 * tv->tv_usec; + xtime.tv_sec = sec; + xtime.tv_nsec = nsec; time_adjust = 0; /* stop active adjtime() */ time_status |= STA_UNSYNC; time_maxerror = NTP_PHASE_LIMIT; time_esterror = NTP_PHASE_LIMIT; } write_sequnlock_irq(&xtime_lock); + clock_was_set(); } void diff -Nru a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c --- a/arch/ia64/kernel/traps.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/traps.c Sat Apr 12 14:44:10 2003 @@ -338,8 +338,8 @@ fpu_swa_count = 0; if ((++fpu_swa_count < 5) && !(current->thread.flags & IA64_THREAD_FPEMU_NOPRINT)) { last_time = jiffies; - printk(KERN_WARNING "%s(%d): floating-point assist fault at ip %016lx\n", - current->comm, current->pid, regs->cr_iip + ia64_psr(regs)->ri); + printk(KERN_WARNING "%s(%d): floating-point assist fault at ip %016lx, isr %016lx\n", + current->comm, current->pid, regs->cr_iip + ia64_psr(regs)->ri, isr); } exception = fp_emulate(fp_fault, bundle, ®s->cr_ipsr, ®s->ar_fpsr, &isr, ®s->pr, diff -Nru a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c --- a/arch/ia64/kernel/unwind.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/unwind.c Sat Apr 12 14:44:10 2003 @@ -253,6 +253,11 @@ struct pt_regs *pt; if ((unsigned) regnum - 1 >= 127) { + if (regnum == 0 && !write) { + *val = 0; /* read r0 always returns 0 */ + *nat = 0; + return 0; + } UNW_DPRINT(0, "unwind.%s: trying to access non-existent r%u\n", __FUNCTION__, regnum); return -1; @@ -318,13 +323,8 @@ } } else { /* access a scratch register */ - if (!info->pt) { - UNW_DPRINT(0, "unwind.%s: no pt-regs; cannot access r%d\n", - __FUNCTION__, regnum); - return -1; - } pt = get_scratch_regs(info); - addr = (unsigned long *) (pt + pt_regs_off(regnum)); + addr = (unsigned long *) ((unsigned long)pt + pt_regs_off(regnum)); if (info->pri_unat_loc) nat_addr = info->pri_unat_loc; else diff -Nru a/arch/ia64/lib/io.c b/arch/ia64/lib/io.c --- a/arch/ia64/lib/io.c Sat Apr 12 14:44:05 2003 +++ b/arch/ia64/lib/io.c Sat Apr 12 14:44:05 2003 @@ -87,12 +87,31 @@ __ia64_outl(val, port); } -void -ia64_mmiob (void) +unsigned char +ia64_readb (void *addr) { - __ia64_mmiob(); + return __ia64_readb (addr); } +unsigned short +ia64_readw (void *addr) +{ + return __ia64_readw (addr); +} + +unsigned int +ia64_readl (void *addr) +{ + return __ia64_readl (addr); +} + +unsigned long +ia64_readq (void *addr) +{ + return __ia64_readq (addr) +} + + /* define aliases: */ asm (".global __ia64_inb, __ia64_inw, __ia64_inl"); @@ -105,7 +124,11 @@ asm ("__ia64_outw = ia64_outw"); asm ("__ia64_outl = ia64_outl"); -asm (".global __ia64_mmiob"); -asm ("__ia64_mmiob = ia64_mmiob"); +asm (".global __ia64_readb, __ia64_readw, __ia64_readl, __ia64_readq"); +asm ("__ia64_readb = ia64_readb"); +asm ("__ia64_readw = ia64_readw"); +asm ("__ia64_readl = ia64_readl"); +asm ("__ia64_readq = ia64_readq"); + #endif /* CONFIG_IA64_GENERIC */ diff -Nru a/arch/ia64/lib/swiotlb.c b/arch/ia64/lib/swiotlb.c --- a/arch/ia64/lib/swiotlb.c Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/lib/swiotlb.c Sat Apr 12 14:44:09 2003 @@ -473,12 +473,6 @@ sync_single(hwdev, (void *) sg->dma_address, sg->dma_length, direction); } -unsigned long -swiotlb_dma_address (struct scatterlist *sg) -{ - return sg->dma_address; -} - /* * Return whether the given PCI device DMA address mask can be supported properly. For * example, if your device can only drive the low 24-bits during PCI bus mastering, then @@ -497,7 +491,6 @@ EXPORT_SYMBOL(swiotlb_unmap_sg); EXPORT_SYMBOL(swiotlb_sync_single); EXPORT_SYMBOL(swiotlb_sync_sg); -EXPORT_SYMBOL(swiotlb_dma_address); EXPORT_SYMBOL(swiotlb_alloc_consistent); EXPORT_SYMBOL(swiotlb_free_consistent); EXPORT_SYMBOL(swiotlb_pci_dma_supported); diff -Nru a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c --- a/arch/ia64/mm/fault.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/mm/fault.c Sat Apr 12 14:44:10 2003 @@ -194,6 +194,7 @@ up_read(&mm->mmap_sem); if (current->pid == 1) { yield(); + down_read(&mm->mmap_sem); goto survive; } printk(KERN_CRIT "VM: killing process %s\n", current->comm); diff -Nru a/arch/ia64/module.lds b/arch/ia64/module.lds --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/module.lds Sat Apr 12 14:44:10 2003 @@ -0,0 +1,13 @@ +SECTIONS { + /* Group unwind sections into a single section: */ + .IA_64.unwind_info : { *(.IA_64.unwind_info*) } + .IA_64.unwind : { *(.IA_64.unwind*) } + /* + * Create place-holder sections to hold the PLTs, GOT, and + * official procedure-descriptors (.opd). + */ + .core.plt : { BYTE(0) } + .init.plt : { BYTE(0) } + .got : { BYTE(0) } + .opd : { BYTE(0) } +} diff -Nru a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c --- a/arch/ia64/pci/pci.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/pci/pci.c Sat Apr 12 14:44:07 2003 @@ -49,11 +49,13 @@ /* * Low-level SAL-based PCI configuration access functions. Note that SAL * calls are already serialized (via sal_lock), so we don't need another - * synchronization mechanism here. Not using segment number (yet). + * synchronization mechanism here. */ -#define PCI_SAL_ADDRESS(bus, dev, fn, reg) \ - ((u64)(bus << 16) | (u64)(dev << 11) | (u64)(fn << 8) | (u64)(reg)) +#define PCI_SAL_ADDRESS(seg, bus, dev, fn, reg) \ + ((u64)(seg << 24) | (u64)(bus << 16) | \ + (u64)(dev << 11) | (u64)(fn << 8) | (u64)(reg)) + static int __pci_sal_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) @@ -61,10 +63,10 @@ int result = 0; u64 data = 0; - if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) + if (!value || (seg > 255) || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) return -EINVAL; - result = ia64_sal_pci_config_read(PCI_SAL_ADDRESS(bus, dev, fn, reg), len, &data); + result = ia64_sal_pci_config_read(PCI_SAL_ADDRESS(seg, bus, dev, fn, reg), len, &data); *value = (u32) data; @@ -74,24 +76,24 @@ static int __pci_sal_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) { - if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) + if ((seg > 255) || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) return -EINVAL; - return ia64_sal_pci_config_write(PCI_SAL_ADDRESS(bus, dev, fn, reg), len, value); + return ia64_sal_pci_config_write(PCI_SAL_ADDRESS(seg, bus, dev, fn, reg), len, value); } static int pci_sal_read (struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value) { - return __pci_sal_read(0, bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), + return __pci_sal_read(PCI_SEGMENT(bus), bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), where, size, value); } static int pci_sal_write (struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value) { - return __pci_sal_write(0, bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), + return __pci_sal_write(PCI_SEGMENT(bus), bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), where, size, value); } @@ -114,24 +116,91 @@ subsys_initcall(pci_acpi_init); +static void __init +pcibios_fixup_resource(struct resource *res, u64 offset) +{ + res->start += offset; + res->end += offset; +} + +void __init +pcibios_fixup_device_resources(struct pci_dev *dev, struct pci_bus *bus) +{ + int i; + + for (i = 0; i < PCI_NUM_RESOURCES; i++) { + if (!dev->resource[i].start) + continue; + if (dev->resource[i].flags & IORESOURCE_MEM) + pcibios_fixup_resource(&dev->resource[i], + PCI_CONTROLLER(dev)->mem_offset); + } +} + /* Called by ACPI when it finds a new root bus. */ + +static struct pci_controller * +alloc_pci_controller(int seg) +{ + struct pci_controller *controller; + + controller = kmalloc(sizeof(*controller), GFP_KERNEL); + if (!controller) + return NULL; + + memset(controller, 0, sizeof(*controller)); + controller->segment = seg; + return controller; +} + struct pci_bus * -pcibios_scan_root (int bus) +scan_root_bus(int bus, struct pci_ops *ops, void *sysdata) { - struct list_head *list; - struct pci_bus *pci_bus; + struct pci_bus *b; - list_for_each(list, &pci_root_buses) { - pci_bus = pci_bus_b(list); - if (pci_bus->number == bus) { - /* Already scanned */ - printk("PCI: Bus (%02x) already probed\n", bus); - return pci_bus; - } - } + /* + * We know this is a new root bus we haven't seen before, so + * scan it, even if we've seen the same bus number in a different + * segment. + */ + b = kmalloc(sizeof(*b), GFP_KERNEL); + if (!b) + return NULL; + + memset(b, 0, sizeof(*b)); + INIT_LIST_HEAD(&b->children); + INIT_LIST_HEAD(&b->devices); + + list_add_tail(&b->node, &pci_root_buses); + + b->number = b->secondary = bus; + b->resource[0] = &ioport_resource; + b->resource[1] = &iomem_resource; + + b->sysdata = sysdata; + b->ops = ops; + b->subordinate = pci_do_scan_bus(b); + + return b; +} + +struct pci_bus * +pcibios_scan_root(void *handle, int seg, int bus) +{ + struct pci_controller *controller; + u64 base, size, offset; + + printk("PCI: Probing PCI hardware on bus (%02x:%02x)\n", seg, bus); + controller = alloc_pci_controller(seg); + if (!controller) + return NULL; + + controller->acpi_handle = handle; - printk("PCI: Probing PCI hardware on bus (%02x)\n", bus); - return pci_scan_bus(bus, pci_root_ops, NULL); + acpi_get_addr_space(handle, ACPI_MEMORY_RANGE, &base, &size, &offset); + controller->mem_offset = offset; + + return scan_root_bus(bus, pci_root_ops, controller); } /* @@ -140,6 +209,11 @@ void __devinit pcibios_fixup_bus (struct pci_bus *b) { + struct list_head *ln; + + for (ln = b->devices.next; ln != &b->devices; ln = ln->next) + pcibios_fixup_device_resources(pci_dev_b(ln), b); + return; } diff -Nru a/arch/ia64/scripts/check-gas b/arch/ia64/scripts/check-gas --- a/arch/ia64/scripts/check-gas Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/scripts/check-gas Sat Apr 12 14:44:09 2003 @@ -1,8 +1,9 @@ #!/bin/sh dir=$(dirname $0) CC=$1 +OBJDUMP=$2 $CC -c $dir/check-gas-asm.S -res=$(objdump -r --section .data check-gas-asm.o | fgrep 00004 | tr -s ' ' |cut -f3 -d' ') +res=$($OBJDUMP -r --section .data check-gas-asm.o | fgrep 00004 | tr -s ' ' |cut -f3 -d' ') if [ $res != ".text" ]; then echo buggy else diff -Nru a/arch/ia64/sn/Makefile b/arch/ia64/sn/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/sn/Makefile Sat Apr 12 14:44:10 2003 @@ -0,0 +1,14 @@ +# arch/ia64/sn/Makefile +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (C) 2003 Silicon Graphics, Inc. All Rights Reserved. +# +# Makefile for the sn ia64 subplatform +# + +EXTRA_CFLAGS := -DLITTLE_ENDIAN + +obj-y += kernel/ # io/ diff -Nru a/arch/ia64/sn/fakeprom/Makefile b/arch/ia64/sn/fakeprom/Makefile --- a/arch/ia64/sn/fakeprom/Makefile Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/sn/fakeprom/Makefile Sat Apr 12 14:44:09 2003 @@ -1,20 +1,29 @@ +# arch/ia64/sn/fakeprom/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. # -# Copyright (c) 2000-2001 Silicon Graphics, Inc. All rights reserved. +# Copyright (c) 2000-2003 Silicon Graphics, Inc. All rights reserved. # +# Medusa fake PROM support +# + +EXTRA_TARGETS := fpromasm.o main.o fw-emu.o fpmem.o klgraph_init.o \ + fprom vmlinux.sym + +OBJS := $(obj)/fpromasm.o $(obj)/main.o $(obj)/fw-emu.o $(obj)/fpmem.o \ + $(obj)/klgraph_init.o + +LDFLAGS_fprom = -static -T -obj-y=fpromasm.o main.o fw-emu.o fpmem.o klgraph_init.o +.PHONY: fprom -fprom: $(OBJ) - $(LD) -static -Tfprom.lds -o fprom $(OBJ) $(LIB) +fprom: $(obj)/fprom -.S.o: - $(CC) -D__ASSEMBLY__ $(AFLAGS) $(AFLAGS_KERNEL) -c -o $*.o $< -.c.o: - $(CC) $(CFLAGS) $(CFLAGS_KERNEL) -c -o $*.o $< +$(obj)/fprom: $(src)/fprom.lds $(OBJS) arch/ia64/lib/lib.a FORCE + $(call if_changed,ld) -clean: - rm -f *.o fprom +$(obj)/vmlinux.sym: $(src)/make_textsym System.map + $(src)/make_textsym vmlinux > vmlinux.sym + $(call cmd,cptotop) diff -Nru a/arch/ia64/sn/fakeprom/README b/arch/ia64/sn/fakeprom/README --- a/arch/ia64/sn/fakeprom/README Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/sn/fakeprom/README Sat Apr 12 14:44:10 2003 @@ -1,3 +1,35 @@ +/* + * Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/NoticeExplan + */ + This directory contains the files required to build the fake PROM image that is currently being used to boot IA64 kernels running under the SGI Medusa kernel. diff -Nru a/arch/ia64/sn/fakeprom/fpmem.c b/arch/ia64/sn/fakeprom/fpmem.c --- a/arch/ia64/sn/fakeprom/fpmem.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/sn/fakeprom/fpmem.c Sat Apr 12 14:44:07 2003 @@ -4,7 +4,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2000-2002 Silicon Graphics, Inc. All rights reserved. + * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved. */ @@ -168,13 +168,13 @@ #endif void -build_mem_desc(efi_memory_desc_t *md, int type, long paddr, long numbytes) +build_mem_desc(efi_memory_desc_t *md, int type, long paddr, long numbytes, long attr) { md->type = type; md->phys_addr = paddr; md->virt_addr = 0; md->num_pages = numbytes >> 12; - md->attribute = EFI_MEMORY_WB; + md->attribute = attr; } int @@ -236,28 +236,40 @@ */ if (bank == 0) { if (cnode == 0) { + hole = 2*1024*1024; + build_mem_desc(md, EFI_PAL_CODE, paddr, hole, EFI_MEMORY_WB|EFI_MEMORY_WB); + numbytes -= hole; + paddr += hole; + count++ ; + md += mdsize; hole = 1*1024*1024; - build_mem_desc(md, EFI_PAL_CODE, paddr, hole); + build_mem_desc(md, EFI_CONVENTIONAL_MEMORY, paddr, hole, EFI_MEMORY_UC); numbytes -= hole; paddr += hole; count++ ; md += mdsize; - hole = 3*1024*1024; - build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole); + hole = 1*1024*1024; + build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole, EFI_MEMORY_WB|EFI_MEMORY_WB); numbytes -= hole; paddr += hole; count++ ; md += mdsize; } else { - hole = PROMRESERVED_SIZE; - build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole); + hole = 2*1024*1024; + build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole, EFI_MEMORY_WB|EFI_MEMORY_WB); + numbytes -= hole; + paddr += hole; + count++ ; + md += mdsize; + hole = 2*1024*1024; + build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole, EFI_MEMORY_UC); numbytes -= hole; paddr += hole; count++ ; md += mdsize; } } - build_mem_desc(md, EFI_CONVENTIONAL_MEMORY, paddr, numbytes); + build_mem_desc(md, EFI_CONVENTIONAL_MEMORY, paddr, numbytes, EFI_MEMORY_WB|EFI_MEMORY_WB); md += mdsize ; count++ ; diff -Nru a/arch/ia64/sn/fakeprom/fprom.lds b/arch/ia64/sn/fakeprom/fprom.lds --- a/arch/ia64/sn/fakeprom/fprom.lds Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/sn/fakeprom/fprom.lds Sat Apr 12 14:44:09 2003 @@ -1,3 +1,34 @@ +/* + * Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/NoticeExplan + */ OUTPUT_FORMAT("elf64-ia64-little") OUTPUT_ARCH(ia64) diff -Nru a/arch/ia64/sn/fakeprom/make_textsym b/arch/ia64/sn/fakeprom/make_textsym --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/sn/fakeprom/make_textsym Sat Apr 12 14:44:06 2003 @@ -0,0 +1,171 @@ +#!/bin/sh +# +# Build a textsym file for use in the Arium ITP probe. +# +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (c) 2001-2002 Silicon Graphics, Inc. All rights reserved. +# + +help() { +cat < []] + If no input file is specified, it defaults to vmlinux. + If no output file name is specified, it defaults to "textsym". +END +exit 1 +} + +err () { + echo "ERROR - $*" >&2 + exit 1 +} + + +OPTS="H" +while getopts "$OPTS" c ; do + case $c in + H) help;; + \?) help;; + esac + +done +shift `expr $OPTIND - 1` + +LINUX=${1:-vmlinux} +TEXTSYM=${2:-${LINUX}.sym} +TMPSYM=${2:-${LINUX}.sym.tmp} +trap "/bin/rm -f $TMPSYM" 0 + +[ -f $VMLINUX ] || help + +$OBJDUMP -t $LINUX | egrep -v '__ks' | sort > $TMPSYM +SN1=`egrep "dig_setup|Synergy_da_indr" $TMPSYM|wc -l` + +# Dataprefix and textprefix correspond to the VGLOBAL_BASE and VPERNODE_BASE. +# Eventually, these values should be: +# dataprefix ffffffff +# textprefix fffffffe +# but right now they're still changing, so make them dynamic. +dataprefix=`awk ' / \.data / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` +textprefix=`awk ' / \.text / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` + +# pipe everything thru sort +echo "TEXTSYM V1.0" +(cat < 0) { + n = n*16 + substr(s,1,1) + s = substr(s,2) + } + printf "GLOBAL | %s | DATA | %s | %d\n", $1, $NF, n + } + } + if($NF == "_end") + exit + +} +' $TMPSYM ) | egrep -v " __device| __vendor" | awk -v sn1="$SN1" ' +/GLOBAL/ { + print $0 + if (sn1 != 0) { + /* 32 bits of sn1 physical addrs, */ + print substr($0,1,9) "04" substr($0,20,16) "Phy_" substr($0,36) + } else { + /* 38 bits of sn2 physical addrs, need addr space bits */ + print substr($0,1,9) "3004" substr($0,20,16) "Phy_" substr($0,36) + } + +} ' | sort -k3 + +N=`wc -l $TEXTSYM|awk '{print $1}'` +echo "Generated TEXTSYM file" >&2 +echo " $LINUX --> $TEXTSYM" >&2 +echo " Found $N symbols" >&2 diff -Nru a/arch/ia64/sn/io/Makefile b/arch/ia64/sn/io/Makefile --- a/arch/ia64/sn/io/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/sn/io/Makefile Sat Apr 12 14:44:06 2003 @@ -1,3 +1,4 @@ +# arch/ia64/sn/io/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -5,7 +6,8 @@ # # Copyright (C) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. # -# Makefile for the sn kernel routines. +# Makefile for the sn io routines. +# EXTRA_CFLAGS := -DLITTLE_ENDIAN @@ -19,4 +21,6 @@ alenlist.o pci.o pci_dma.o ate_utils.o \ ifconfig_net.o io.o ioconfig_bus.o -obj-$(CONFIG_PCIBA) += pciba.o +obj-$(CONFIG_IA64_SGI_SN2) += sn2/ + +obj-$(CONFIG_PCIBA) += pciba.o diff -Nru a/arch/ia64/sn/io/sn2/Makefile b/arch/ia64/sn/io/sn2/Makefile --- a/arch/ia64/sn/io/sn2/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/sn/io/sn2/Makefile Sat Apr 12 14:44:10 2003 @@ -1,3 +1,4 @@ +# arch/ia64/sn/io/sn2/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -6,14 +7,14 @@ # Copyright (C) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. # # Makefile for the sn2 specific io routines. +# -EXTRA_CFLAGS := -DLITTLE_ENDIAN +EXTRA_CFLAGS := -DLITTLE_ENDIAN -obj-y += bte_error.o geo_op.o klconflib.o klgraph.o l1.o \ +obj-y += pcibr/ bte_error.o geo_op.o klconflib.o klgraph.o l1.o \ l1_command.o ml_iograph.o ml_SN_init.o ml_SN_intr.o module.o \ pci_bus_cvlink.o pciio.o pic.o sgi_io_init.o shub.o shuberror.o \ shub_intr.o shubio.o xbow.o xtalk.o obj-$(CONFIG_KDB) += kdba_io.o - obj-$(CONFIG_SHUB_1_0_SPECIFIC) += efi-rtc.o diff -Nru a/arch/ia64/sn/io/sn2/l1_command.c b/arch/ia64/sn/io/sn2/l1_command.c --- a/arch/ia64/sn/io/sn2/l1_command.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/sn/io/sn2/l1_command.c Sat Apr 12 14:44:07 2003 @@ -154,7 +154,7 @@ return ret; } - +#ifdef CONFIG_PCI /* * iobrick_module_get_nasid() returns a module_id which has the brick * type encoded in bits 15-12, but this is not the true brick type... @@ -185,7 +185,7 @@ return -1; /* unknown brick */ } - +#endif int iobrick_module_get_nasid(nasid_t nasid) { int io_moduleid; diff -Nru a/arch/ia64/sn/io/sn2/pcibr/Makefile b/arch/ia64/sn/io/sn2/pcibr/Makefile --- a/arch/ia64/sn/io/sn2/pcibr/Makefile Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/sn/io/sn2/pcibr/Makefile Sat Apr 12 14:44:09 2003 @@ -1,3 +1,4 @@ +# arch/ia64/sn/io/sn2/pcibr/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -6,6 +7,7 @@ # Copyright (C) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. # # Makefile for the sn2 specific pci bridge routines. +# EXTRA_CFLAGS := -DLITTLE_ENDIAN diff -Nru a/arch/ia64/sn/kernel/Makefile b/arch/ia64/sn/kernel/Makefile --- a/arch/ia64/sn/kernel/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/sn/kernel/Makefile Sat Apr 12 14:44:06 2003 @@ -1,46 +1,18 @@ # arch/ia64/sn/kernel/Makefile # -# Copyright (C) 1999,2001-2002 Silicon Graphics, Inc. All Rights Reserved. +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. # -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2 of the GNU General Public License -# as published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, -# Mountain View, CA 94043, or: -# -# http://www.sgi.com -# -# For further information regarding this notice, see: -# -# http://oss.sgi.com/projects/GenInfo/NoticeExplan +# Copyright (C) 1999,2001-2003 Silicon Graphics, Inc. All Rights Reserved. # -EXTRA_CFLAGS := -DLITTLE_ENDIAN +EXTRA_CFLAGS := -DLITTLE_ENDIAN -.S.s: - $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -o $*.s $< -.S.o: - $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -o $*.o $< +obj-y := probe.o setup.o sn_asm.o sv.o bte.o iomv.o \ + irq.o mca.o -obj-y = probe.o setup.o sn_asm.o sv.o bte.o iomv.o -obj-$(CONFIG_IA64_SGI_SN1) += irq.o mca.o -obj-$(CONFIG_IA64_SGI_SN2) += irq.o mca.o +obj-$(CONFIG_IA64_SGI_SN2) += sn2/ obj-$(CONFIG_IA64_SGI_AUTOTEST) += llsc4.o misctest.o obj-$(CONFIG_IA64_GENERIC) += machvec.o obj-$(CONFIG_MODULES) += sn_ksyms.o diff -Nru a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c --- a/arch/ia64/sn/kernel/setup.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/sn/kernel/setup.c Sat Apr 12 14:44:07 2003 @@ -237,7 +237,7 @@ "%x.%02x\n", SN_SAL_MIN_MAJOR, SN_SAL_MIN_MINOR); panic("PROM version too old\n"); } - +#ifdef CONFIG_PCI #ifdef CONFIG_IA64_SGI_SN2 { extern void io_sh_swapper(int, int); @@ -253,7 +253,7 @@ (void)get_master_baseio_nasid(); } #endif - +#endif /* CONFIG_PCI */ status = ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, &drift); if (status != 0 || ticks_per_sec < 100000) { printk(KERN_WARNING "unable to determine platform RTC clock frequency, guessing.\n"); @@ -349,7 +349,7 @@ for (cnode=0; cnode < numnodes; cnode++) memcpy(nodepdaindr[cnode]->pernode_pdaindr, nodepdaindr, sizeof(nodepdaindr)); - +#ifdef CONFIG_PCI /* * Set up IO related platform-dependent nodepda fields. * The following routine actually sets up the hubinfo struct @@ -359,6 +359,7 @@ init_platform_nodepda(nodepdaindr[cnode], cnode); bte_init_node (nodepdaindr[cnode], cnode); } +#endif } /** diff -Nru a/arch/ia64/sn/kernel/sn2/Makefile b/arch/ia64/sn/kernel/sn2/Makefile --- a/arch/ia64/sn/kernel/sn2/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/sn/kernel/sn2/Makefile Sat Apr 12 14:44:10 2003 @@ -1,38 +1,14 @@ -# # arch/ia64/sn/kernel/sn2/Makefile # +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# # Copyright (C) 1999,2001-2002 Silicon Graphics, Inc. All rights reserved. # -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2 of the GNU General Public License -# as published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, -# Mountain View, CA 94043, or: -# -# http://www.sgi.com -# -# For further information regarding this notice, see: -# -# http://oss.sgi.com/projects/GenInfo/NoticeExplan +# sn2 specific kernel files # -EXTRA_CFLAGS := -DLITTLE_ENDIAN +EXTRA_CFLAGS := -DLITTLE_ENDIAN -obj-y += cache.o iomv.o ptc_deadlock.o sn2_smp.o \ - sn_proc_fs.o +obj-y += cache.o iomv.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o diff -Nru a/arch/ia64/sn/kernel/sn2/io.c b/arch/ia64/sn/kernel/sn2/io.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/sn/kernel/sn2/io.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,98 @@ +/* + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2003 Silicon Graphics, Inc. All rights reserved. + * + * The generic kernel requires function pointers to these routines, so + * we wrap the inlines from asm/ia64/sn/sn2/io.h here. + */ + +#include +#include + +#include + +#ifdef CONFIG_IA64_GENERIC + +unsigned int +sn_inb (unsigned long port) +{ + return __sn_inb(port); +} + +unsigned int +sn_inw (unsigned long port) +{ + return __sn_inw(port); +} + +unsigned int +sn_inl (unsigned long port) +{ + return __sn_inl(port); +} + +void +sn_outb (unsigned char val, unsigned long port) +{ + __sn_outb(val, port); +} + +void +sn_outw (unsigned short val, unsigned long port) +{ + __sn_outw(val, port); +} + +void +sn_outl (unsigned int val, unsigned long port) +{ + __sn_outl(val, port); +} + +unsigned char +sn_readb (void *addr) +{ + return __sn_readb (addr); +} + +unsigned short +sn_readw (void *addr) +{ + return __sn_readw (addr); +} + +unsigned int +sn_readl (void *addr) +{ + return __sn_readl (addr); +} + +unsigned long +sn_readq (void *addr) +{ + return __sn_readq (addr) +} + + +/* define aliases: */ + +asm (".global __sn_inb, __sn_inw, __sn_inl"); +asm ("__sn_inb = sn_inb"); +asm ("__sn_inw = sn_inw"); +asm ("__sn_inl = sn_inl"); + +asm (".global __sn_outb, __sn_outw, __sn_outl"); +asm ("__sn_outb = sn_outb"); +asm ("__sn_outw = sn_outw"); +asm ("__sn_outl = sn_outl"); + +asm (".global __sn_readb, __sn_readw, __sn_readl, __sn_readq"); +asm ("__sn_readb = sn_readb"); +asm ("__sn_readw = sn_readw"); +asm ("__sn_readl = sn_readl"); +asm ("__sn_readq = sn_readq"); + +#endif /* CONFIG_IA64_GENERIC */ diff -Nru a/arch/ia64/sn/kernel/sn2/iomv.c b/arch/ia64/sn/kernel/sn2/iomv.c --- a/arch/ia64/sn/kernel/sn2/iomv.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/sn/kernel/sn2/iomv.c Sat Apr 12 14:44:08 2003 @@ -3,10 +3,11 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2000-2002 Silicon Graphics, Inc. All rights reserved. + * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved. */ #include +#include #include #include #include @@ -46,8 +47,10 @@ } } +EXPORT_SYMBOL(sn_io_addr); + /** - * sn2_mmiob - I/O space memory barrier + * sn_mmiob - I/O space memory barrier * * Acts as a memory mapped I/O barrier for platforms that queue writes to * I/O space. This ensures that subsequent writes to I/O space arrive after @@ -60,9 +63,9 @@ * */ void -sn2_mmiob (void) +sn_mmiob (void) { - while ((((volatile unsigned long) (*pda->pio_write_status_addr)) & SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT_MASK) != + while ((((volatile unsigned long) (*pda.pio_write_status_addr)) & SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT_MASK) != SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT_MASK) udelay(1); } diff -Nru a/arch/ia64/sn/tools/make_textsym b/arch/ia64/sn/tools/make_textsym --- a/arch/ia64/sn/tools/make_textsym Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,171 +0,0 @@ -#!/bin/sh -# -# Build a textsym file for use in the Arium ITP probe. -# -# -# This file is subject to the terms and conditions of the GNU General Public -# License. See the file "COPYING" in the main directory of this archive -# for more details. -# -# Copyright (c) 2001-2002 Silicon Graphics, Inc. All rights reserved. -# - -help() { -cat < []] - If no input file is specified, it defaults to vmlinux. - If no output file name is specified, it defaults to "textsym". -END -exit 1 -} - -err () { - echo "ERROR - $*" >&2 - exit 1 -} - - -OPTS="H" -while getopts "$OPTS" c ; do - case $c in - H) help;; - \?) help;; - esac - -done -shift `expr $OPTIND - 1` - -LINUX=${1:-vmlinux} -TEXTSYM=${2:-${LINUX}.sym} -TMPSYM=${2:-${LINUX}.sym.tmp} -trap "/bin/rm -f $TMPSYM" 0 - -[ -f $VMLINUX ] || help - -$OBJDUMP -t $LINUX | egrep -v '__ks' | sort > $TMPSYM -SN1=`egrep "dig_setup|Synergy_da_indr" $TMPSYM|wc -l` - -# Dataprefix and textprefix correspond to the VGLOBAL_BASE and VPERNODE_BASE. -# Eventually, these values should be: -# dataprefix ffffffff -# textprefix fffffffe -# but right now they're still changing, so make them dynamic. -dataprefix=`awk ' / \.data / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` -textprefix=`awk ' / \.text / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` - -# pipe everything thru sort -echo "TEXTSYM V1.0" -(cat < 0) { - n = n*16 + substr(s,1,1) - s = substr(s,2) - } - printf "GLOBAL | %s | DATA | %s | %d\n", $1, $NF, n - } - } - if($NF == "_end") - exit - -} -' $TMPSYM ) | egrep -v " __device| __vendor" | awk -v sn1="$SN1" ' -/GLOBAL/ { - print $0 - if (sn1 != 0) { - /* 32 bits of sn1 physical addrs, */ - print substr($0,1,9) "04" substr($0,20,16) "Phy_" substr($0,36) - } else { - /* 38 bits of sn2 physical addrs, need addr space bits */ - print substr($0,1,9) "3004" substr($0,20,16) "Phy_" substr($0,36) - } - -} ' | sort -k3 - -N=`wc -l $TEXTSYM|awk '{print $1}'` -echo "Generated TEXTSYM file" >&2 -echo " $LINUX --> $TEXTSYM" >&2 -echo " Found $N symbols" >&2 diff -Nru a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c --- a/arch/parisc/kernel/sys_parisc32.c Sat Apr 12 14:44:07 2003 +++ b/arch/parisc/kernel/sys_parisc32.c Sat Apr 12 14:44:07 2003 @@ -1592,7 +1592,7 @@ return sys_semctl (semid, semnum, cmd, arg); } -extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); +extern long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) diff -Nru a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c --- a/arch/ppc64/kernel/sys_ppc32.c Sat Apr 12 14:44:09 2003 +++ b/arch/ppc64/kernel/sys_ppc32.c Sat Apr 12 14:44:09 2003 @@ -2781,10 +2781,10 @@ return secs; } -extern asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2805,10 +2805,10 @@ return ret; } -extern asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2914,7 +2914,7 @@ return sys_ftruncate(fd, (high << 32) | low); } -extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); +extern long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); long ppc32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) diff -Nru a/arch/sparc/Makefile b/arch/sparc/Makefile --- a/arch/sparc/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/sparc/Makefile Sat Apr 12 14:44:06 2003 @@ -30,6 +30,7 @@ CFLAGS := $(CFLAGS) -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7 else CFLAGS := $(CFLAGS) -m32 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7 +AFLAGS := $(AFLAGS) -m32 endif #LDFLAGS_vmlinux = -N -Ttext 0xf0004000 diff -Nru a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c --- a/arch/sparc/kernel/process.c Sat Apr 12 14:44:06 2003 +++ b/arch/sparc/kernel/process.c Sat Apr 12 14:44:06 2003 @@ -523,9 +523,16 @@ new_stack = (((struct reg_window *) childregs) - 1); copy_regwin(new_stack, (((struct reg_window *) regs) - 1)); + /* + * A new process must start with interrupts closed in 2.5, + * because this is how Mingo's scheduler works (see schedule_tail + * and finish_arch_switch). If we do not do it, a timer interrupt hits + * before we unlock, attempts to re-take the rq->lock, and then we die. + * Thus, kpsr|=PSR_PIL. + */ ti->ksp = (unsigned long) new_stack; ti->kpc = (((unsigned long) ret_from_fork) - 0x8); - ti->kpsr = current->thread.fork_kpsr; + ti->kpsr = current->thread.fork_kpsr | PSR_PIL; ti->kwim = current->thread.fork_kwim; /* This is used for sun4c only */ diff -Nru a/arch/sparc/kernel/signal.c b/arch/sparc/kernel/signal.c --- a/arch/sparc/kernel/signal.c Sat Apr 12 14:44:09 2003 +++ b/arch/sparc/kernel/signal.c Sat Apr 12 14:44:09 2003 @@ -56,7 +56,7 @@ struct reg_window sig_window; int sig_num; int sig_code; - struct sigcontext *sig_scptr; + struct sigcontext __user *sig_scptr; int sig_address; struct sigcontext sig_context; unsigned int extramask[_NSIG_WORDS - 1]; @@ -71,8 +71,8 @@ struct new_signal_frame { struct sparc_stackf ss; __siginfo_t info; - __siginfo_fpu_t *fpu_save; - unsigned long insns [2] __attribute__ ((aligned (8))); + __siginfo_fpu_t __user *fpu_save; + unsigned long insns[2] __attribute__ ((aligned (8))); unsigned int extramask[_NSIG_WORDS - 1]; unsigned int extra_size; /* Should be 0 */ __siginfo_fpu_t fpu_state; @@ -83,8 +83,8 @@ siginfo_t info; struct pt_regs regs; sigset_t mask; - __siginfo_fpu_t *fpu_save; - unsigned int insns [2]; + __siginfo_fpu_t __user *fpu_save; + unsigned int insns[2]; stack_t stack; unsigned int extra_size; /* Should be 0 */ __siginfo_fpu_t fpu_state; @@ -142,7 +142,7 @@ _sigpause_common(regs->u_regs[UREG_I0], regs); } -asmlinkage void do_rt_sigsuspend(sigset_t *uset, size_t sigsetsize, +asmlinkage void do_rt_sigsuspend(sigset_t __user *uset, size_t sigsetsize, struct pt_regs *regs) { sigset_t oldset, set; @@ -190,7 +190,7 @@ } static inline int -restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { int err; #ifdef CONFIG_SMP @@ -205,7 +205,7 @@ current->used_math = 1; clear_tsk_thread_flag(current, TIF_USEDFPU); - if (verify_area (VERIFY_READ, fpu, sizeof(*fpu))) + if (verify_area(VERIFY_READ, fpu, sizeof(*fpu))) return -EFAULT; err = __copy_from_user(¤t->thread.float_regs[0], &fpu->si_float_regs[0], @@ -222,16 +222,16 @@ static inline void do_new_sigreturn (struct pt_regs *regs) { - struct new_signal_frame *sf; + struct new_signal_frame __user *sf; unsigned long up_psr, pc, npc; sigset_t set; - __siginfo_fpu_t *fpu_save; + __siginfo_fpu_t __user *fpu_save; int err; - sf = (struct new_signal_frame *) regs->u_regs [UREG_FP]; + sf = (struct new_signal_frame __user *) regs->u_regs[UREG_FP]; /* 1. Make sure we are not getting garbage from the user */ - if (verify_area (VERIFY_READ, sf, sizeof (*sf))) + if (verify_area(VERIFY_READ, sf, sizeof(*sf))) goto segv_and_exit; if (((uint) sf) & 3) @@ -245,7 +245,7 @@ /* 2. Restore the state */ up_psr = regs->psr; - err |= __copy_from_user(regs, &sf->info.si_regs, sizeof (struct pt_regs)); + err |= __copy_from_user(regs, &sf->info.si_regs, sizeof(struct pt_regs)); /* User can only change condition codes and FPU enabling in %psr. */ regs->psr = (up_psr & ~(PSR_ICC | PSR_EF)) @@ -279,7 +279,7 @@ asmlinkage void do_sigreturn(struct pt_regs *regs) { - struct sigcontext *scptr; + struct sigcontext __user *scptr; unsigned long pc, npc, psr; sigset_t set; int err; @@ -287,19 +287,19 @@ synchronize_user_stack(); if (current->thread.new_signal) - return do_new_sigreturn (regs); + return do_new_sigreturn(regs); - scptr = (struct sigcontext *) regs->u_regs[UREG_I0]; + scptr = (struct sigcontext __user *) regs->u_regs[UREG_I0]; /* Check sanity of the user arg. */ - if(verify_area(VERIFY_READ, scptr, sizeof(struct sigcontext)) || - (((unsigned long) scptr) & 3)) + if (verify_area(VERIFY_READ, scptr, sizeof(struct sigcontext)) || + (((unsigned long) scptr) & 3)) goto segv_and_exit; err = __get_user(pc, &scptr->sigc_pc); err |= __get_user(npc, &scptr->sigc_npc); - if((pc | npc) & 3) + if ((pc | npc) & 3) goto segv_and_exit; /* This is pretty much atomic, no amount locking would prevent @@ -341,17 +341,17 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; unsigned int psr, pc, npc; - __siginfo_fpu_t *fpu_save; + __siginfo_fpu_t __user *fpu_save; sigset_t set; stack_t st; int err; synchronize_user_stack(); - sf = (struct rt_signal_frame *) regs->u_regs[UREG_FP]; - if(verify_area(VERIFY_READ, sf, sizeof(*sf)) || - (((unsigned long) sf) & 0x03)) + sf = (struct rt_signal_frame __user *) regs->u_regs[UREG_FP]; + if (verify_area(VERIFY_READ, sf, sizeof(*sf)) || + (((unsigned long) sf) & 0x03)) goto segv; err = __get_user(pc, &sf->regs.pc); @@ -361,13 +361,14 @@ err |= __get_user(regs->y, &sf->regs.y); err |= __get_user(psr, &sf->regs.psr); - err |= __copy_from_user(®s->u_regs[UREG_G1], &sf->regs.u_regs[UREG_G1], 15*sizeof(u32)); + err |= __copy_from_user(®s->u_regs[UREG_G1], + &sf->regs.u_regs[UREG_G1], 15 * sizeof(u32)); regs->psr = (regs->psr & ~PSR_ICC) | (psr & PSR_ICC); err |= __get_user(fpu_save, &sf->fpu_save); - if(fpu_save) + if (fpu_save) err |= restore_fpu_state(regs, fpu_save); err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t)); @@ -380,7 +381,8 @@ regs->npc = npc; /* It is more difficult to avoid calling this function than to - call it and ignore errors. */ + * call it and ignore errors. + */ do_sigaltstack(&st, NULL, (unsigned long)sf); sigdelsetmask(&set, ~_BLOCKABLE); @@ -394,7 +396,7 @@ } /* Checks if the fp is valid */ -static inline int invalid_frame_pointer (void *fp, int fplen) +static inline int invalid_frame_pointer(void __user *fp, int fplen) { if ((((unsigned long) fp) & 7) || !__access_ok((unsigned long)fp, fplen) || @@ -405,7 +407,7 @@ return 0; } -static inline void *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) +static inline void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) { unsigned long sp; @@ -416,14 +418,14 @@ if (!on_sig_stack(sp) && !((current->sas_ss_sp + current->sas_ss_size) & 7)) sp = current->sas_ss_sp + current->sas_ss_size; } - return (void *)(sp - framesize); + return (void __user *)(sp - framesize); } static inline void setup_frame(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *oldset, siginfo_t *info) { - struct signal_sframe *sframep; - struct sigcontext *sc; + struct signal_sframe __user *sframep; + struct sigcontext __user *sc; int window = 0, err; unsigned long pc = regs->pc; unsigned long npc = regs->npc; @@ -431,8 +433,9 @@ int sig_code; synchronize_user_stack(); - sframep = (struct signal_sframe *)get_sigframe(sa, regs, SF_ALIGNEDSZ); - if (invalid_frame_pointer (sframep, sizeof(*sframep))){ + sframep = (struct signal_sframe __user *) + get_sigframe(sa, regs, SF_ALIGNEDSZ); + if (invalid_frame_pointer(sframep, sizeof(*sframep))){ /* Don't change signal code and address, so that * post mortem debuggers can have a look. */ @@ -454,16 +457,16 @@ err |= __put_user(regs->u_regs[UREG_G1], &sc->sigc_g1); err |= __put_user(regs->u_regs[UREG_I0], &sc->sigc_o0); err |= __put_user(current->thread.w_saved, &sc->sigc_oswins); - if(current->thread.w_saved) - for(window = 0; window < current->thread.w_saved; window++) { - sc->sigc_spbuf[window] = - (char *)current->thread.rwbuf_stkptrs[window]; + if (current->thread.w_saved) + for (window = 0; window < current->thread.w_saved; window++) { + put_user((char *)current->thread.rwbuf_stkptrs[window], + &sc->sigc_spbuf[window]); err |= __copy_to_user(&sc->sigc_wbuf[window], ¤t->thread.reg_window[window], sizeof(struct reg_window)); } else - err |= __copy_to_user(sframep, (char *)regs->u_regs[UREG_FP], + err |= __copy_to_user(sframep, (char *) regs->u_regs[UREG_FP], sizeof(struct reg_window)); current->thread.w_saved = 0; /* So process is allowed to execute. */ @@ -484,7 +487,7 @@ switch (info->si_code) { case ILL_ILLOPC: sig_code = SUBSIG_ILLINST; break; case ILL_PRVOPC: sig_code = SUBSIG_PRIVINST; break; - case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP (info->si_trapno); break; + case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP(info->si_trapno); break; default: sig_code = SUBSIG_STACK; break; } break; @@ -541,7 +544,7 @@ static inline int -save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { int err = 0; #ifdef CONFIG_SMP @@ -561,12 +564,14 @@ regs->psr &= ~(PSR_EF); } #endif - err |= __copy_to_user(&fpu->si_float_regs[0], ¤t->thread.float_regs[0], + err |= __copy_to_user(&fpu->si_float_regs[0], + ¤t->thread.float_regs[0], (sizeof(unsigned long) * 32)); err |= __put_user(current->thread.fsr, &fpu->si_fsr); err |= __put_user(current->thread.fpqdepth, &fpu->si_fpqdepth); if (current->thread.fpqdepth != 0) - err |= __copy_to_user(&fpu->si_fpqueue[0], ¤t->thread.fpqueue[0], + err |= __copy_to_user(&fpu->si_fpqueue[0], + ¤t->thread.fpqueue[0], ((sizeof(unsigned long) + (sizeof(unsigned long *)))*16)); current->used_math = 0; @@ -577,7 +582,7 @@ new_setup_frame(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset) { - struct new_signal_frame *sf; + struct new_signal_frame __user *sf; int sigframe_size, err; /* 1. Make sure everything is clean */ @@ -587,16 +592,17 @@ if (!current->used_math) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct new_signal_frame *)get_sigframe(&ka->sa, regs, sigframe_size); + sf = (struct new_signal_frame __user *) + get_sigframe(&ka->sa, regs, sigframe_size); - if (invalid_frame_pointer (sf, sigframe_size)) + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill_and_return; if (current->thread.w_saved != 0) goto sigill_and_return; /* 2. Save the current process state */ - err = __copy_to_user(&sf->info.si_regs, regs, sizeof (struct pt_regs)); + err = __copy_to_user(&sf->info.si_regs, regs, sizeof(struct pt_regs)); err |= __put_user(0, &sf->extra_size); @@ -610,8 +616,8 @@ err |= __put_user(oldset->sig[0], &sf->info.si_mask); err |= __copy_to_user(sf->extramask, &oldset->sig[1], (_NSIG_WORDS - 1) * sizeof(unsigned int)); - err |= __copy_to_user(sf, (char *) regs->u_regs [UREG_FP], - sizeof (struct reg_window)); + err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], + sizeof(struct reg_window)); if (err) goto sigsegv; @@ -653,32 +659,33 @@ new_setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset, siginfo_t *info) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; int sigframe_size; unsigned int psr; int err; synchronize_user_stack(); sigframe_size = RT_ALIGNEDSZ; - if(!current->used_math) + if (!current->used_math) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct rt_signal_frame *)get_sigframe(&ka->sa, regs, sigframe_size); - if(invalid_frame_pointer(sf, sigframe_size)) + sf = (struct rt_signal_frame __user *) + get_sigframe(&ka->sa, regs, sigframe_size); + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill; - if(current->thread.w_saved != 0) + if (current->thread.w_saved != 0) goto sigill; err = __put_user(regs->pc, &sf->regs.pc); err |= __put_user(regs->npc, &sf->regs.npc); err |= __put_user(regs->y, &sf->regs.y); psr = regs->psr; - if(current->used_math) + if (current->used_math) psr |= PSR_EF; err |= __put_user(psr, &sf->regs.psr); err |= __copy_to_user(&sf->regs.u_regs, regs->u_regs, sizeof(regs->u_regs)); err |= __put_user(0, &sf->extra_size); - if(psr & PSR_EF) { + if (psr & PSR_EF) { err |= save_fpu_state(regs, &sf->fpu_state); err |= __put_user(&sf->fpu_state, &sf->fpu_save); } else { @@ -691,8 +698,8 @@ err |= __put_user(sas_ss_flags(regs->u_regs[UREG_FP]), &sf->stack.ss_flags); err |= __put_user(current->sas_ss_size, &sf->stack.ss_size); - err |= __copy_to_user(sf, (char *) regs->u_regs [UREG_FP], - sizeof (struct reg_window)); + err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], + sizeof(struct reg_window)); err |= copy_siginfo_to_user(&sf->info, info); @@ -706,7 +713,7 @@ regs->pc = (unsigned long) ka->sa.sa_handler; regs->npc = (regs->pc + 4); - if(ka->ka_restorer) + if (ka->ka_restorer) regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer; else { regs->u_regs[UREG_I7] = (unsigned long)(&(sf->insns[0]) - 2); @@ -735,23 +742,24 @@ setup_svr4_frame(struct sigaction *sa, unsigned long pc, unsigned long npc, struct pt_regs *regs, int signr, sigset_t *oldset) { - svr4_signal_frame_t *sfp; - svr4_gregset_t *gr; - svr4_siginfo_t *si; - svr4_mcontext_t *mc; - svr4_gwindows_t *gw; - svr4_ucontext_t *uc; + svr4_signal_frame_t __user *sfp; + svr4_gregset_t __user *gr; + svr4_siginfo_t __user *si; + svr4_mcontext_t __user *mc; + svr4_gwindows_t __user *gw; + svr4_ucontext_t __user *uc; svr4_sigset_t setv; int window = 0, err; synchronize_user_stack(); - sfp = (svr4_signal_frame_t *) get_sigframe(sa, regs, SVR4_SF_ALIGNED + REGWIN_SZ); + sfp = (svr4_signal_frame_t __user *) + get_sigframe(sa, regs, SVR4_SF_ALIGNED + REGWIN_SZ); - if (invalid_frame_pointer (sfp, sizeof (*sfp))) + if (invalid_frame_pointer(sfp, sizeof(*sfp))) goto sigill_and_return; /* Start with a clean frame pointer and fill it */ - err = __clear_user(sfp, sizeof (*sfp)); + err = __clear_user(sfp, sizeof(*sfp)); /* Setup convenience variables */ si = &sfp->si; @@ -771,17 +779,20 @@ setv.sigbits[3] = oldset->sig[3]; err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t)); } else - err |= __copy_to_user(&uc->sigmask, &setv, 2 * sizeof(unsigned int)); + err |= __copy_to_user(&uc->sigmask, &setv, + 2 * sizeof(unsigned int)); /* Store registers */ - err |= __put_user(regs->pc, &((*gr) [SVR4_PC])); - err |= __put_user(regs->npc, &((*gr) [SVR4_NPC])); - err |= __put_user(regs->psr, &((*gr) [SVR4_PSR])); - err |= __put_user(regs->y, &((*gr) [SVR4_Y])); + err |= __put_user(regs->pc, &((*gr)[SVR4_PC])); + err |= __put_user(regs->npc, &((*gr)[SVR4_NPC])); + err |= __put_user(regs->psr, &((*gr)[SVR4_PSR])); + err |= __put_user(regs->y, &((*gr)[SVR4_Y])); - /* Copy g [1..7] and o [0..7] registers */ - err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs [UREG_G1], sizeof (long) * 7); - err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs [UREG_I0], sizeof (long) * 8); + /* Copy g[1..7] and o[0..7] registers */ + err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs[UREG_G1], + sizeof(long) * 7); + err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs[UREG_I0], + sizeof(long) * 8); /* Setup sigaltstack */ err |= __put_user(current->sas_ss_sp, &uc->stack.sp); @@ -793,7 +804,7 @@ /* 1. Link sfp->uc->gwins to our windows */ err |= __put_user(gw, &mc->gwin); - /* 2. Number of windows to restore at setcontext (): */ + /* 2. Number of windows to restore at setcontext(): */ err |= __put_user(current->thread.w_saved, &gw->count); /* 3. Save each valid window @@ -807,12 +818,12 @@ * These windows are just used in case synchronize_user_stack failed * to flush the user windows. */ - for(window = 0; window < current->thread.w_saved; window++) { - err |= __put_user((int *) &(gw->win [window]), &gw->winptr [window]); - err |= __copy_to_user(&gw->win [window], - ¤t->thread.reg_window [window], - sizeof (svr4_rwindow_t)); - err |= __put_user(0, gw->winptr [window]); + for (window = 0; window < current->thread.w_saved; window++) { + err |= __put_user((int *) &(gw->win[window]), &gw->winptr[window]); + err |= __copy_to_user(&gw->win[window], + ¤t->thread.reg_window[window], + sizeof(svr4_rwindow_t)); + err |= __put_user(0, gw->winptr[window]); } /* 4. We just pay attention to the gw->count field on setcontext */ @@ -832,13 +843,14 @@ regs->npc = (regs->pc + 4); /* Arguments passed to signal handler */ - if (regs->u_regs [14]){ - struct reg_window *rw = (struct reg_window *) regs->u_regs [14]; - - err |= __put_user(signr, &rw->ins [0]); - err |= __put_user(si, &rw->ins [1]); - err |= __put_user(uc, &rw->ins [2]); - err |= __put_user(sfp, &rw->ins [6]); /* frame pointer */ + if (regs->u_regs[14]){ + struct reg_window *rw = (struct reg_window __user *) + regs->u_regs[14]; + + err |= __put_user(signr, &rw->ins[0]); + err |= __put_user(si, &rw->ins[1]); + err |= __put_user(uc, &rw->ins[2]); + err |= __put_user(sfp, &rw->ins[6]); /* frame pointer */ if (err) goto sigsegv; @@ -854,10 +866,10 @@ do_exit(SIGSEGV); } -asmlinkage int svr4_getcontext (svr4_ucontext_t *uc, struct pt_regs *regs) +asmlinkage int svr4_getcontext(svr4_ucontext_t __user *uc, struct pt_regs *regs) { - svr4_gregset_t *gr; - svr4_mcontext_t *mc; + svr4_gregset_t __user *gr; + svr4_mcontext_t __user *mc; svr4_sigset_t setv; int err = 0; @@ -866,7 +878,7 @@ if (current->thread.w_saved) goto sigsegv_and_return; - err = clear_user(uc, sizeof (*uc)); + err = clear_user(uc, sizeof(*uc)); if (err) return -EFAULT; @@ -881,17 +893,20 @@ setv.sigbits[3] = current->blocked.sig[3]; err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t)); } else - err |= __copy_to_user(&uc->sigmask, &setv, 2 * sizeof(unsigned int)); + err |= __copy_to_user(&uc->sigmask, &setv, + 2 * sizeof(unsigned int)); /* Store registers */ - err |= __put_user(regs->pc, &uc->mcontext.greg [SVR4_PC]); - err |= __put_user(regs->npc, &uc->mcontext.greg [SVR4_NPC]); - err |= __put_user(regs->psr, &uc->mcontext.greg [SVR4_PSR]); - err |= __put_user(regs->y, &uc->mcontext.greg [SVR4_Y]); + err |= __put_user(regs->pc, &uc->mcontext.greg[SVR4_PC]); + err |= __put_user(regs->npc, &uc->mcontext.greg[SVR4_NPC]); + err |= __put_user(regs->psr, &uc->mcontext.greg[SVR4_PSR]); + err |= __put_user(regs->y, &uc->mcontext.greg[SVR4_Y]); - /* Copy g [1..7] and o [0..7] registers */ - err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs [UREG_G1], sizeof (uint) * 7); - err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs [UREG_I0], sizeof (uint) * 8); + /* Copy g[1..7] and o[0..7] registers */ + err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs[UREG_G1], + sizeof(uint) * 7); + err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs[UREG_I0], + sizeof(uint) * 8); /* Setup sigaltstack */ err |= __put_user(current->sas_ss_sp, &uc->stack.sp); @@ -908,10 +923,10 @@ } /* Set the context for a svr4 application, this is Solaris way to sigreturn */ -asmlinkage int svr4_setcontext (svr4_ucontext_t *c, struct pt_regs *regs) +asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs) { struct thread_struct *tp = ¤t->thread; - svr4_gregset_t *gr; + svr4_gregset_t __user *gr; unsigned long pc, npc, psr; sigset_t set; svr4_sigset_t setv; @@ -929,7 +944,7 @@ if (((uint) c) & 3) goto sigsegv_and_return; - if(!__access_ok((unsigned long)c, sizeof(*c))) + if (!__access_ok((unsigned long)c, sizeof(*c))) goto sigsegv_and_return; /* Check for valid PC and nPC */ @@ -937,7 +952,7 @@ err = __get_user(pc, &((*gr)[SVR4_PC])); err |= __get_user(npc, &((*gr)[SVR4_NPC])); - if((pc | npc) & 3) + if ((pc | npc) & 3) goto sigsegv_and_return; /* Retrieve information from passed ucontext */ @@ -973,16 +988,16 @@ spin_unlock_irq(¤t->sighand->siglock); regs->pc = pc; regs->npc = npc | 1; - err |= __get_user(regs->y, &((*gr) [SVR4_Y])); - err |= __get_user(psr, &((*gr) [SVR4_PSR])); + err |= __get_user(regs->y, &((*gr)[SVR4_Y])); + err |= __get_user(psr, &((*gr)[SVR4_PSR])); regs->psr &= ~(PSR_ICC); regs->psr |= (psr & PSR_ICC); /* Restore g[1..7] and o[0..7] registers */ - err |= __copy_from_user(®s->u_regs [UREG_G1], &(*gr)[SVR4_G1], - sizeof (long) * 7); - err |= __copy_from_user(®s->u_regs [UREG_I0], &(*gr)[SVR4_O0], - sizeof (long) * 8); + err |= __copy_from_user(®s->u_regs[UREG_G1], &(*gr)[SVR4_G1], + sizeof(long) * 7); + err |= __copy_from_user(®s->u_regs[UREG_I0], &(*gr)[SVR4_O0], + sizeof(long) * 8); return (err ? -EFAULT : 0); sigsegv_and_return: @@ -1000,13 +1015,13 @@ if (ka->sa.sa_flags & SA_SIGINFO) new_setup_rt_frame(ka, regs, signr, oldset, info); else if (current->thread.new_signal) - new_setup_frame (ka, regs, signr, oldset); + new_setup_frame(ka, regs, signr, oldset); else setup_frame(&ka->sa, regs, signr, oldset, info); } - if(ka->sa.sa_flags & SA_ONESHOT) + if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; - if(!(ka->sa.sa_flags & SA_NOMASK)) { + if (!(ka->sa.sa_flags & SA_NOMASK)) { spin_lock_irq(¤t->sighand->siglock); sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); sigaddset(¤t->blocked, signr); @@ -1028,7 +1043,7 @@ regs->psr |= PSR_C; break; case ERESTARTSYS: - if(!(sa->sa_flags & SA_RESTART)) + if (!(sa->sa_flags & SA_RESTART)) goto no_system_call_restart; /* fallthrough */ case ERESTARTNOINTR: @@ -1095,13 +1110,15 @@ } asmlinkage int -do_sys_sigstack(struct sigstack *ssptr, struct sigstack *ossptr, unsigned long sp) +do_sys_sigstack(struct sigstack __user *ssptr, struct sigstack __user *ossptr, + unsigned long sp) { int ret = -EFAULT; /* First see if old state is wanted. */ if (ossptr) { - if (put_user(current->sas_ss_sp + current->sas_ss_size, &ossptr->the_stack) || + if (put_user(current->sas_ss_sp + current->sas_ss_size, + &ossptr->the_stack) || __put_user(on_sig_stack(sp), &ossptr->cur_status)) goto out; } diff -Nru a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c --- a/arch/sparc/kernel/sparc_ksyms.c Sat Apr 12 14:44:06 2003 +++ b/arch/sparc/kernel/sparc_ksyms.c Sat Apr 12 14:44:06 2003 @@ -127,6 +127,7 @@ EXPORT_SYMBOL(__down_interruptible); EXPORT_SYMBOL(sparc_valid_addr_bitmap); +EXPORT_SYMBOL(phys_base); /* Atomic operations. */ EXPORT_SYMBOL_PRIVATE(_atomic_add); diff -Nru a/arch/sparc/kernel/sys_sparc.c b/arch/sparc/kernel/sys_sparc.c --- a/arch/sparc/kernel/sys_sparc.c Sat Apr 12 14:44:07 2003 +++ b/arch/sparc/kernel/sys_sparc.c Sat Apr 12 14:44:07 2003 @@ -113,7 +113,7 @@ * This is really horribly ugly. */ -asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr, long fifth) +asmlinkage int sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fifth) { int version, err; @@ -123,7 +123,7 @@ if (call <= SEMCTL) switch (call) { case SEMOP: - err = sys_semop (first, (struct sembuf *)ptr, second); + err = sys_semop (first, (struct sembuf __user *)ptr, second); goto out; case SEMGET: err = sys_semget (first, second, third); @@ -134,19 +134,19 @@ if (!ptr) goto out; err = -EFAULT; - if(get_user(fourth.__pad, (void **)ptr)) + if(get_user(fourth.__pad, (void __user **)ptr)) goto out; err = sys_semctl (first, second, third, fourth); goto out; } default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= MSGCTL) switch (call) { case MSGSND: - err = sys_msgsnd (first, (struct msgbuf *) ptr, + err = sys_msgsnd (first, (struct msgbuf __user *) ptr, second, third); goto out; case MSGRCV: @@ -157,7 +157,7 @@ if (!ptr) goto out; err = -EFAULT; - if(copy_from_user(&tmp,(struct ipc_kludge *) ptr, sizeof (tmp))) + if (copy_from_user(&tmp, (struct ipc_kludge __user *) ptr, sizeof (tmp))) goto out; err = sys_msgrcv (first, tmp.msgp, second, tmp.msgtyp, third); goto out; @@ -170,10 +170,10 @@ err = sys_msgget ((key_t) first, second); goto out; case MSGCTL: - err = sys_msgctl (first, second, (struct msqid_ds *) ptr); + err = sys_msgctl (first, second, (struct msqid_ds __user *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= SHMCTL) @@ -182,34 +182,34 @@ switch (version) { case 0: default: { ulong raddr; - err = sys_shmat (first, (char *) ptr, second, &raddr); + err = sys_shmat (first, (char __user *) ptr, second, &raddr); if (err) goto out; err = -EFAULT; - if(put_user (raddr, (ulong *) third)) + if (put_user (raddr, (ulong __user *) third)) goto out; err = 0; goto out; } case 1: /* iBCS2 emulator entry point */ - err = sys_shmat (first, (char *) ptr, second, (ulong *) third); + err = sys_shmat (first, (char __user *) ptr, second, (ulong __user *) third); goto out; } case SHMDT: - err = sys_shmdt ((char *)ptr); + err = sys_shmdt ((char __user *)ptr); goto out; case SHMGET: err = sys_shmget (first, second, third); goto out; case SHMCTL: - err = sys_shmctl (first, second, (struct shmid_ds *) ptr); + err = sys_shmctl (first, second, (struct shmid_ds __user *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } else - err = -EINVAL; + err = -ENOSYS; out: return err; } @@ -344,9 +344,11 @@ c_sys_nis_syscall (struct pt_regs *regs) { static int count = 0; - - if (count++ > 5) return -ENOSYS; - printk ("%s[%d]: Unimplemented SPARC system call %d\n", current->comm, current->pid, (int)regs->u_regs[1]); + + if (count++ > 5) + return -ENOSYS; + printk ("%s[%d]: Unimplemented SPARC system call %d\n", + current->comm, current->pid, (int)regs->u_regs[1]); #ifdef DEBUG_UNIMP_SYSCALL show_regs (regs); #endif @@ -378,8 +380,8 @@ } asmlinkage int -sparc_sigaction (int sig, const struct old_sigaction *act, - struct old_sigaction *oact) +sparc_sigaction (int sig, const struct old_sigaction __user *act, + struct old_sigaction __user *oact) { struct k_sigaction new_ka, old_ka; int ret; @@ -422,8 +424,11 @@ } asmlinkage int -sys_rt_sigaction(int sig, const struct sigaction *act, struct sigaction *oact, - void *restorer, size_t sigsetsize) +sys_rt_sigaction(int sig, + const struct sigaction __user *act, + struct sigaction __user *oact, + void __user *restorer, + size_t sigsetsize) { struct k_sigaction new_ka, old_ka; int ret; @@ -453,7 +458,7 @@ return ret; } -asmlinkage int sys_getdomainname(char *name, int len) +asmlinkage int sys_getdomainname(char __user *name, int len) { int nlen; int err = -EFAULT; @@ -464,9 +469,9 @@ if (nlen < len) len = nlen; - if(len > __NEW_UTS_LEN) + if (len > __NEW_UTS_LEN) goto done; - if(copy_to_user(name, system_utsname.domainname, len)) + if (copy_to_user(name, system_utsname.domainname, len)) goto done; err = 0; done: diff -Nru a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c --- a/arch/sparc/mm/srmmu.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc/mm/srmmu.c Sat Apr 12 14:44:08 2003 @@ -2162,6 +2162,16 @@ #endif +static pte_t srmmu_pgoff_to_pte(unsigned long pgoff) +{ + return __pte((pgoff << SRMMU_PTE_FILE_SHIFT) | SRMMU_FILE); +} + +static unsigned long srmmu_pte_to_pgoff(pte_t pte) +{ + return pte_val(pte) >> SRMMU_PTE_FILE_SHIFT; +} + /* Load up routines and constants for sun4m and sun4d mmu */ void __init ld_mmu_srmmu(void) { @@ -2188,7 +2198,9 @@ BTFIXUPSET_INT(page_kernel, pgprot_val(SRMMU_PAGE_KERNEL)); page_kernel = pgprot_val(SRMMU_PAGE_KERNEL); pg_iobits = SRMMU_VALID | SRMMU_WRITE | SRMMU_REF; - + + BTFIXUPSET_SIMM13(pte_file_max_bits, SRMMU_PTE_FILE_MAX_BITS); + /* Functions */ #ifndef CONFIG_SMP BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2); @@ -2239,6 +2251,7 @@ BTFIXUPSET_HALF(pte_writei, SRMMU_WRITE); BTFIXUPSET_HALF(pte_dirtyi, SRMMU_DIRTY); BTFIXUPSET_HALF(pte_youngi, SRMMU_REF); + BTFIXUPSET_HALF(pte_filei, SRMMU_FILE); BTFIXUPSET_HALF(pte_wrprotecti, SRMMU_WRITE); BTFIXUPSET_HALF(pte_mkcleani, SRMMU_DIRTY); BTFIXUPSET_HALF(pte_mkoldi, SRMMU_REF); @@ -2252,6 +2265,9 @@ BTFIXUPSET_CALL(alloc_thread_info, srmmu_alloc_thread_info, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(free_thread_info, srmmu_free_thread_info, BTFIXUPCALL_NORM); + + BTFIXUPSET_CALL(pte_to_pgoff, srmmu_pte_to_pgoff, BTFIXUPCALL_NORM); + BTFIXUPSET_CALL(pgoff_to_pte, srmmu_pgoff_to_pte, BTFIXUPCALL_NORM); get_srmmu_type(); patch_window_trap_handlers(); diff -Nru a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c --- a/arch/sparc/mm/sun4c.c Sat Apr 12 14:44:09 2003 +++ b/arch/sparc/mm/sun4c.c Sat Apr 12 14:44:09 2003 @@ -1798,9 +1798,20 @@ static unsigned long sun4c_pte_pfn(pte_t pte) { - return (unsigned long)(pte_val(pte) & SUN4C_PFN_MASK); + return pte_val(pte) & SUN4C_PFN_MASK; } +static pte_t sun4c_pgoff_to_pte(unsigned long pgoff) +{ + return __pte(pgoff | _SUN4C_PAGE_FILE); +} + +static unsigned long sun4c_pte_to_pgoff(pte_t pte) +{ + return pte_val(pte) & ((1UL << SUN4C_PTE_FILE_MAX_BITS) - 1); +} + + static __inline__ unsigned long sun4c_pmd_page_v(pmd_t pmd) { return (pmd_val(pmd) & PAGE_MASK); @@ -2115,7 +2126,9 @@ page_kernel = pgprot_val(SUN4C_PAGE_KERNEL); pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE | _SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE; - + + BTFIXUPSET_SIMM13(pte_file_max_bits, SUN4C_PTE_FILE_MAX_BITS); + /* Functions */ BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM); @@ -2190,6 +2203,7 @@ BTFIXUPSET_HALF(pte_writei, _SUN4C_PAGE_WRITE); BTFIXUPSET_HALF(pte_dirtyi, _SUN4C_PAGE_MODIFIED); BTFIXUPSET_HALF(pte_youngi, _SUN4C_PAGE_ACCESSED); + BTFIXUPSET_HALF(pte_filei, _SUN4C_PAGE_FILE); BTFIXUPSET_HALF(pte_wrprotecti, _SUN4C_PAGE_WRITE|_SUN4C_PAGE_SILENT_WRITE); BTFIXUPSET_HALF(pte_mkcleani, _SUN4C_PAGE_MODIFIED|_SUN4C_PAGE_SILENT_WRITE); BTFIXUPSET_HALF(pte_mkoldi, _SUN4C_PAGE_ACCESSED|_SUN4C_PAGE_SILENT_READ); @@ -2197,6 +2211,9 @@ BTFIXUPSET_CALL(pte_mkdirty, sun4c_pte_mkdirty, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(pte_mkyoung, sun4c_pte_mkyoung, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(update_mmu_cache, sun4c_update_mmu_cache, BTFIXUPCALL_NORM); + + BTFIXUPSET_CALL(pte_to_pgoff, sun4c_pte_to_pgoff, BTFIXUPCALL_NORM); + BTFIXUPSET_CALL(pgoff_to_pte, sun4c_pgoff_to_pte, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(mmu_lockarea, sun4c_lockarea, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(mmu_unlockarea, sun4c_unlockarea, BTFIXUPCALL_NORM); diff -Nru a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c --- a/arch/sparc64/kernel/ioctl32.c Sat Apr 12 14:44:09 2003 +++ b/arch/sparc64/kernel/ioctl32.c Sat Apr 12 14:44:09 2003 @@ -107,15 +107,9 @@ #include /* Use this to get at 32-bit user passed pointers. - See sys_sparc32.c for description about these. */ -#define A(__x) ((unsigned long)(__x)) -#define AA(__x) \ -({ unsigned long __ret; \ - __asm__ ("srl %0, 0, %0" \ - : "=r" (__ret) \ - : "0" (__x)); \ - __ret; \ -}) + * See sys_sparc32.c for description about it. + */ +#define A(__x) ((void __user *)(unsigned long)(__x)) /* Aiee. Someone does not find a difference between int and long */ #define EXT2_IOC32_GETFLAGS _IOR('f', 1, int) @@ -261,7 +255,7 @@ static int get_video_window32(struct video_window *kp, struct video_window32 *up) { - struct video_clip32 *ucp; + struct video_clip32 __user *ucp; struct video_clip *kcp; int nclips, err, i; u32 tmp; @@ -275,7 +269,7 @@ __get_user(kp->flags, &up->flags); __get_user(kp->clipcount, &up->clipcount); __get_user(tmp, &up->clips); - ucp = (struct video_clip32 *)A(tmp); + ucp = A(tmp); kp->clips = NULL; nclips = kp->clipcount; @@ -487,7 +481,7 @@ { struct ifconf32 ifc32; struct ifconf ifc; - struct ifreq32 *ifr32; + struct ifreq32 __user *ifr32; struct ifreq *ifr; mm_segment_t old_fs; unsigned int i, j; @@ -508,7 +502,7 @@ return -ENOMEM; } ifr = ifc.ifc_req; - ifr32 = (struct ifreq32 *)A(ifc32.ifcbuf); + ifr32 = A(ifc32.ifcbuf); for (i = 0; i < ifc32.ifc_len; i += sizeof (struct ifreq32)) { if (copy_from_user(ifr++, ifr32++, sizeof (struct ifreq32))) { kfree (ifc.ifc_buf); @@ -520,7 +514,7 @@ set_fs (old_fs); if (!err) { ifr = ifc.ifc_req; - ifr32 = (struct ifreq32 *)A(ifc32.ifcbuf); + ifr32 = A(ifc32.ifcbuf); for (i = 0, j = 0; i < ifc32.ifc_len && j < ifc.ifc_len; i += sizeof (struct ifreq32), j += sizeof (struct ifreq)) { if (copy_to_user(ifr32++, ifr++, sizeof (struct ifreq32))) { @@ -566,7 +560,7 @@ __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - if (get_user(ethcmd, (u32 *)A(data))) { + if (get_user(ethcmd, (u32 __user *) A(data))) { err = -EFAULT; goto out; } @@ -577,7 +571,7 @@ case ETHTOOL_GLINK: case ETHTOOL_NWAY_RST: len = sizeof(struct ethtool_value); break; case ETHTOOL_GREGS: { - struct ethtool_regs *regaddr = (struct ethtool_regs *)A(data); + struct ethtool_regs __user *regaddr = A(data); /* darned variable size arguments */ if (get_user(len, (u32 *)®addr->len)) { err = -EFAULT; @@ -593,7 +587,7 @@ goto out; } - if (copy_from_user(ifr.ifr_data, (char *)A(data), len)) { + if (copy_from_user(ifr.ifr_data, A(data), len)) { err = -EFAULT; goto out; } @@ -606,7 +600,7 @@ u32 data; __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - len = copy_to_user((char *)A(data), ifr.ifr_data, len); + len = copy_to_user(A(data), ifr.ifr_data, len); if (len) err = -EFAULT; } @@ -648,7 +642,7 @@ }; __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - if (copy_from_user(ifr.ifr_data, (char *)A(data), len)) { + if (copy_from_user(ifr.ifr_data, A(data), len)) { err = -EFAULT; goto out; } @@ -658,7 +652,7 @@ err = sys_ioctl (fd, cmd, (unsigned long)&ifr); set_fs (old_fs); if (!err) { - len = copy_to_user((char *)A(data), ifr.ifr_data, len); + len = copy_to_user(A(data), ifr.ifr_data, len); if (len) err = -EFAULT; } @@ -684,7 +678,7 @@ struct ifreq *u_ifreq64; struct ifreq32 *u_ifreq32 = (struct ifreq32 *) arg; char tmp_buf[IFNAMSIZ]; - void *data64; + void __user *data64; u32 data32; if (copy_from_user(&tmp_buf[0], &(u_ifreq32->ifr_ifrn.ifrn_name[0]), @@ -692,7 +686,7 @@ return -EFAULT; if (__get_user(data32, &u_ifreq32->ifr_ifru.ifru_data)) return -EFAULT; - data64 = (void *) A(data32); + data64 = A(data32); u_ifreq64 = alloc_user_space(sizeof(*u_ifreq64)); @@ -829,7 +823,7 @@ ret |= __get_user (r4.rt_irtt, &(((struct rtentry32 *)arg)->rt_irtt)); ret |= __get_user (rtdev, &(((struct rtentry32 *)arg)->rt_dev)); if (rtdev) { - ret |= copy_from_user (devname, (char *)A(rtdev), 15); + ret |= copy_from_user (devname, A(rtdev), 15); r4.rt_dev = devname; devname[15] = 0; } else r4.rt_dev = 0; @@ -932,9 +926,9 @@ if (f.index + f.count > 256) f.count = 256 - f.index; if (cmd == FBIOPUTCMAP32) { - ret = copy_from_user (red, (char *)A(r), f.count); - ret |= copy_from_user (green, (char *)A(g), f.count); - ret |= copy_from_user (blue, (char *)A(b), f.count); + ret = copy_from_user (red, A(r), f.count); + ret |= copy_from_user (green, A(g), f.count); + ret |= copy_from_user (blue, A(b), f.count); if (ret) return -EFAULT; } @@ -943,9 +937,9 @@ ret = sys_ioctl (fd, (cmd == FBIOPUTCMAP32) ? FBIOPUTCMAP_SPARC : FBIOGETCMAP_SPARC, (long)&f); set_fs (old_fs); if (!ret && cmd == FBIOGETCMAP32) { - ret = copy_to_user ((char *)A(r), red, f.count); - ret |= copy_to_user ((char *)A(g), green, f.count); - ret |= copy_to_user ((char *)A(b), blue, f.count); + ret = copy_to_user (A(r), red, f.count); + ret |= copy_to_user (A(g), green, f.count); + ret |= copy_to_user (A(b), blue, f.count); } return ret ? -EFAULT : 0; } @@ -989,16 +983,16 @@ if (f.set & FB_CUR_SETCMAP) { if ((uint) f.size.y > 32) return -EINVAL; - ret = copy_from_user (mask, (char *)A(m), f.size.y * 4); - ret |= copy_from_user (image, (char *)A(i), f.size.y * 4); + ret = copy_from_user (mask, A(m), f.size.y * 4); + ret |= copy_from_user (image, A(i), f.size.y * 4); if (ret) return -EFAULT; f.image = image; f.mask = mask; } if (f.set & FB_CUR_SETCMAP) { - ret = copy_from_user (red, (char *)A(r), 2); - ret |= copy_from_user (green, (char *)A(g), 2); - ret |= copy_from_user (blue, (char *)A(b), 2); + ret = copy_from_user (red, A(r), 2); + ret |= copy_from_user (green, A(g), 2); + ret |= copy_from_user (blue, A(b), 2); if (ret) return -EFAULT; f.cmap.red = red; f.cmap.green = green; f.cmap.blue = blue; @@ -1081,10 +1075,10 @@ if (cmd == FBIOGETCMAP) break; - err = __copy_from_user(cmap.red, (char *)A(red), cmap.len * sizeof(__u16)); - err |= __copy_from_user(cmap.green, (char *)A(green), cmap.len * sizeof(__u16)); - err |= __copy_from_user(cmap.blue, (char *)A(blue), cmap.len * sizeof(__u16)); - if (cmap.transp) err |= __copy_from_user(cmap.transp, (char *)A(transp), cmap.len * sizeof(__u16)); + err = __copy_from_user(cmap.red, A(red), cmap.len * sizeof(__u16)); + err |= __copy_from_user(cmap.green, A(green), cmap.len * sizeof(__u16)); + err |= __copy_from_user(cmap.blue, A(blue), cmap.len * sizeof(__u16)); + if (cmap.transp) err |= __copy_from_user(cmap.transp, A(transp), cmap.len * sizeof(__u16)); if (err) { err = -EFAULT; goto out; @@ -1123,11 +1117,11 @@ err |= __copy_to_user((char *)((struct fb_fix_screeninfo32 *)arg)->reserved, (char *)fix.reserved, sizeof(fix.reserved)); break; case FBIOGETCMAP: - err = __copy_to_user((char *)A(red), cmap.red, cmap.len * sizeof(__u16)); - err |= __copy_to_user((char *)A(green), cmap.blue, cmap.len * sizeof(__u16)); - err |= __copy_to_user((char *)A(blue), cmap.blue, cmap.len * sizeof(__u16)); + err = __copy_to_user(A(red), cmap.red, cmap.len * sizeof(__u16)); + err |= __copy_to_user(A(green), cmap.blue, cmap.len * sizeof(__u16)); + err |= __copy_to_user(A(blue), cmap.blue, cmap.len * sizeof(__u16)); if (cmap.transp) - err |= __copy_to_user((char *)A(transp), cmap.transp, cmap.len * sizeof(__u16)); + err |= __copy_to_user(A(transp), cmap.transp, cmap.len * sizeof(__u16)); break; case FBIOPUTCMAP: break; @@ -1504,7 +1498,7 @@ static int alloc_sg_iovec(sg_io_hdr_t *sgp, u32 uptr32) { - sg_iovec32_t *uiov = (sg_iovec32_t *) A(uptr32); + sg_iovec32_t __user *uiov = A(uptr32); sg_iovec_t *kiov; int i; @@ -1526,7 +1520,7 @@ if (!kiov->iov_base) return -ENOMEM; if (copy_from_user(kiov->iov_base, - (void *) A(iov_base32), + A(iov_base32), kiov->iov_len)) return -EFAULT; @@ -1539,7 +1533,7 @@ static int copy_back_sg_iovec(sg_io_hdr_t *sgp, u32 uptr32) { - sg_iovec32_t *uiov = (sg_iovec32_t *) A(uptr32); + sg_iovec32_t __user *uiov = A(uptr32); sg_iovec_t *kiov = (sg_iovec_t *) sgp->dxferp; int i; @@ -1549,7 +1543,7 @@ if (__get_user(iov_base32, &uiov->iov_base)) return -EFAULT; - if (copy_to_user((void *) A(iov_base32), + if (copy_to_user(A(iov_base32), kiov->iov_base, kiov->iov_len)) return -EFAULT; @@ -1607,7 +1601,7 @@ goto out; } if (copy_from_user(sg_io64.cmdp, - (void *) A(cmdp32), + A(cmdp32), sg_io64.cmd_len)) { err = -EFAULT; goto out; @@ -1620,7 +1614,7 @@ goto out; } if (copy_from_user(sg_io64.sbp, - (void *) A(sbp32), + A(sbp32), sg_io64.mx_sb_len)) { err = -EFAULT; goto out; @@ -1641,7 +1635,7 @@ goto out; } if (copy_from_user(sg_io64.dxferp, - (void *) A(dxferp32), + A(dxferp32), sg_io64.dxfer_len)) { err = -EFAULT; goto out; @@ -1672,12 +1666,12 @@ err |= __put_user(sg_io64.resid, &sg_io32->resid); err |= __put_user(sg_io64.duration, &sg_io32->duration); err |= __put_user(sg_io64.info, &sg_io32->info); - err |= copy_to_user((void *)A(sbp32), sg_io64.sbp, sg_io64.mx_sb_len); + err |= copy_to_user(A(sbp32), sg_io64.sbp, sg_io64.mx_sb_len); if (sg_io64.dxferp) { if (sg_io64.iovec_count) err |= copy_back_sg_iovec(&sg_io64, dxferp32); else - err |= copy_to_user((void *)A(dxferp32), + err |= copy_to_user(A(dxferp32), sg_io64.dxferp, sg_io64.dxfer_len); } @@ -1711,7 +1705,7 @@ { struct sock_fprog32 *u_fprog32 = (struct sock_fprog32 *) arg; struct sock_fprog *u_fprog64 = alloc_user_space(sizeof(struct sock_fprog)); - void *fptr64; + void __user *fptr64; u32 fptr32; u16 flen; @@ -1719,7 +1713,7 @@ get_user(fptr32, &u_fprog32->filter)) return -EFAULT; - fptr64 = (void *) A(fptr32); + fptr64 = A(fptr32); if (put_user(flen, &u_fprog64->len) || put_user(fptr64, &u_fprog64->filter)) @@ -1768,7 +1762,7 @@ data.ptr = kmalloc (data32.length, GFP_KERNEL); if (!data.ptr) return -ENOMEM; - if (copy_from_user(data.ptr, (__u8 *)A(data32.ptr), data32.length)) { + if (copy_from_user(data.ptr, A(data32.ptr), data32.length)) { kfree(data.ptr); return -EFAULT; } @@ -2025,13 +2019,13 @@ case CDROMREADMODE1: case CDROMREADRAW: case CDROMREADCOOKED: - err = copy_to_user((char *)A(addr), data, cdread.cdread_buflen); + err = copy_to_user(A(addr), data, cdread.cdread_buflen); break; case CDROMREADAUDIO: - err = copy_to_user((char *)A(addr), data, cdreadaudio.nframes * 2352); + err = copy_to_user(A(addr), data, cdreadaudio.nframes * 2352); break; case CDROM_SEND_PACKET: - err = copy_to_user((char *)A(addr), data, cgc.buflen); + err = copy_to_user(A(addr), data, cgc.buflen); break; default: break; @@ -2148,7 +2142,7 @@ if (copy_from_user(&cfdarg, user_cfd, sizeof(struct consolefontdesc32))) return -EFAULT; - cfdarg.chardata = (unsigned char *)A(((struct consolefontdesc32 *)&cfdarg)->chardata); + cfdarg.chardata = A(((struct consolefontdesc32 *)&cfdarg)->chardata); switch (cmd) { case PIO_FONTX: @@ -2203,7 +2197,7 @@ return -EFAULT; if (!perm && op.op != KD_FONT_OP_GET) return -EPERM; - op.data = (unsigned char *)A(((struct console_font_op32 *)&op)->data); + op.data = A(((struct console_font_op32 *)&op)->data); op.flags |= KD_FONT_FLAG_OLD; vt = (struct vt_struct *)((struct tty_struct *)file->private_data)->driver_data; i = con_font_op(vt->vc_num, &op); @@ -2230,9 +2224,9 @@ switch (cmd) { case PIO_UNIMAP: if (!perm) return -EPERM; - return con_set_unimap(fg_console, tmp.entry_ct, (struct unipair *)A(tmp.entries)); + return con_set_unimap(fg_console, tmp.entry_ct, A(tmp.entries)); case GIO_UNIMAP: - return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries)); + return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), A(tmp.entries)); } return 0; } @@ -2907,9 +2901,9 @@ int err, i; u32 ptr1, ptr2; size_t size; - lv_block_exception32_t *lbe32; + lv_block_exception32_t __user *lbe32; lv_block_exception_t *lbe; - lv32_t *ul = (lv32_t *)A(p); + lv32_t __user *ul = A(p); lv_t *l = (lv_t *) kmalloc(sizeof(lv_t), GFP_KERNEL); if (!l) { @@ -2933,13 +2927,13 @@ size = l->lv_allocated_le * sizeof(pe_t); l->lv_current_pe = vmalloc(size); if (l->lv_current_pe) - err = copy_from_user(l->lv_current_pe, (void *)A(ptr1), size); + err = copy_from_user(l->lv_current_pe, A(ptr1), size); } if (!err && ptr2) { size = l->lv_remap_end * sizeof(lv_block_exception_t); l->lv_block_exception = lbe = vmalloc(size); if (l->lv_block_exception) { - lbe32 = (lv_block_exception32_t *)A(ptr2); + lbe32 = A(ptr2); memset(lbe, 0, size); for (i = 0; i < l->lv_remap_end; i++, lbe++, lbe32++) { err |= get_user(lbe->rsector_org, &lbe32->rsector_org); @@ -2963,7 +2957,7 @@ static int copy_lv_t(u32 ptr, lv_t *l) { int err; - lv32_t *ul = (lv32_t *)A(ptr); + lv32_t __user *ul = A(ptr); u32 ptr1; size_t size; @@ -2977,7 +2971,7 @@ ((long)&ul->dummy[0]) - ((long)&ul->lv_remap_ptr)); size = l->lv_allocated_le * sizeof(pe_t); if (ptr1) - err |= __copy_to_user((void *)A(ptr1), l->lv_current_pe, size); + err |= __copy_to_user(A(ptr1), l->lv_current_pe, size); return err ? -EFAULT : 0; } @@ -3036,14 +3030,14 @@ err = -ENOMEM; break; } - err = copy_from_user(v->pv[i], (void *)A(ptr), + err = copy_from_user(v->pv[i], A(ptr), sizeof(pv32_t) - 8 - UUID_LEN+1); if (err) { err = -EFAULT; break; } - err = copy_from_user(v->pv[i]->pv_uuid, - ((pv32_t *)A(ptr))->pv_uuid, + err = copy_from_user(&v->pv[i]->pv_uuid[0], + &((pv32_t __user *)A(ptr))->pv_uuid[0], UUID_LEN+1); if (err) { err = -EFAULT; @@ -3125,7 +3119,7 @@ return err; u.pv_status.pv = &p; if (cmd == PV_CHANGE) { - err = copy_from_user(&p, (void *)A(ptr), + err = copy_from_user(&p, A(ptr), sizeof(pv32_t) - 8 - UUID_LEN+1); if (err) return -EFAULT; @@ -3195,10 +3189,10 @@ case PV_STATUS: if (!err) { - err = copy_to_user((void *)A(ptr), &p, sizeof(pv32_t) - 8 - UUID_LEN+1); + err = copy_to_user(A(ptr), &p, sizeof(pv32_t) - 8 - UUID_LEN+1); if (err) return -EFAULT; - err = copy_to_user(((pv_t *)A(ptr))->pv_uuid, p.pv_uuid, UUID_LEN + 1); + err = copy_to_user(&((pv_t __user *)A(ptr))->pv_uuid[0], &p.pv_uuid[0], UUID_LEN + 1); if (err) return -EFAULT; } @@ -3229,7 +3223,7 @@ static int drm32_version(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_version_t *uversion = (drm32_version_t *)arg; - char *name_ptr, *date_ptr, *desc_ptr; + char __user *name_ptr, *date_ptr, *desc_ptr; u32 tmp1, tmp2, tmp3; drm_version_t kversion; mm_segment_t old_fs; @@ -3244,9 +3238,9 @@ get_user(tmp3, &uversion->desc)) return -EFAULT; - name_ptr = (char *) A(tmp1); - date_ptr = (char *) A(tmp2); - desc_ptr = (char *) A(tmp3); + name_ptr = A(tmp1); + date_ptr = A(tmp2); + desc_ptr = A(tmp3); ret = -ENOMEM; if (kversion.name_len && name_ptr) { @@ -3309,7 +3303,7 @@ drm32_unique_t *uarg = (drm32_unique_t *)arg; drm_unique_t karg; mm_segment_t old_fs; - char *uptr; + char __user *uptr; u32 tmp; int ret; @@ -3320,7 +3314,7 @@ if (get_user(tmp, &uarg->unique)) return -EFAULT; - uptr = (char *) A(tmp); + uptr = A(tmp); if (uptr) { karg.unique = kmalloc(karg.unique_len, GFP_KERNEL); @@ -3385,7 +3379,7 @@ if (ret) return -EFAULT; - karg.handle = (void *) A(tmp); + karg.handle = A(tmp); old_fs = get_fs(); set_fs(KERNEL_DS); @@ -3416,7 +3410,7 @@ static int drm32_info_bufs(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_buf_info_t *uarg = (drm32_buf_info_t *)arg; - drm_buf_desc_t *ulist; + drm_buf_desc_t __user *ulist; drm_buf_info_t karg; mm_segment_t old_fs; int orig_count, ret; @@ -3426,7 +3420,7 @@ get_user(tmp, &uarg->list)) return -EFAULT; - ulist = (drm_buf_desc_t *) A(tmp); + ulist = A(tmp); orig_count = karg.count; @@ -3464,7 +3458,7 @@ drm32_buf_free_t *uarg = (drm32_buf_free_t *)arg; drm_buf_free_t karg; mm_segment_t old_fs; - int *ulist; + int __user *ulist; int ret; u32 tmp; @@ -3472,7 +3466,7 @@ get_user(tmp, &uarg->list)) return -EFAULT; - ulist = (int *) A(tmp); + ulist = A(tmp); karg.list = kmalloc(karg.count * sizeof(int), GFP_KERNEL); if (!karg.list) @@ -3510,7 +3504,7 @@ static int drm32_map_bufs(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_buf_map_t *uarg = (drm32_buf_map_t *)arg; - drm32_buf_pub_t *ulist; + drm32_buf_pub_t __user *ulist; drm_buf_map_t karg; mm_segment_t old_fs; int orig_count, ret, i; @@ -3521,8 +3515,8 @@ get_user(tmp2, &uarg->list)) return -EFAULT; - karg.virtual = (void *) A(tmp1); - ulist = (drm32_buf_pub_t *) A(tmp2); + karg.virtual = A(tmp1); + ulist = A(tmp2); orig_count = karg.count; @@ -3538,7 +3532,7 @@ get_user(tmp1, &ulist[i].address)) goto out; - karg.list[i].address = (void *) A(tmp1); + karg.list[i].address = A(tmp1); } old_fs = get_fs(); @@ -3589,7 +3583,7 @@ static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_dma_t *uarg = (drm32_dma_t *) arg; - int *u_si, *u_ss, *u_ri, *u_rs; + int __user *u_si, *u_ss, *u_ri, *u_rs; drm_dma_t karg; mm_segment_t old_fs; int ret; @@ -3610,10 +3604,10 @@ get_user(karg.granted_count, &uarg->granted_count)) return -EFAULT; - u_si = (int *) A(tmp1); - u_ss = (int *) A(tmp2); - u_ri = (int *) A(tmp3); - u_rs = (int *) A(tmp4); + u_si = A(tmp1); + u_ss = A(tmp2); + u_ri = A(tmp3); + u_rs = A(tmp4); if (karg.send_count) { karg.send_indices = kmalloc(karg.send_count * sizeof(int), GFP_KERNEL); @@ -3699,7 +3693,7 @@ static int drm32_res_ctx(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_ctx_res_t *uarg = (drm32_ctx_res_t *) arg; - drm_ctx_t *ulist; + drm_ctx_t __user *ulist; drm_ctx_res_t karg; mm_segment_t old_fs; int orig_count, ret; @@ -3710,7 +3704,7 @@ get_user(tmp, &uarg->contexts)) return -EFAULT; - ulist = (drm_ctx_t *) A(tmp); + ulist = A(tmp); orig_count = karg.count; if (karg.count && ulist) { @@ -3817,7 +3811,8 @@ struct usbdevfs_ctrltransfer32 *uctrl; mm_segment_t old_fs; __u32 udata; - void *uptr, *kptr; + void __user *uptr; + void *kptr; int err; uctrl = (struct usbdevfs_ctrltransfer32 *) arg; @@ -3829,7 +3824,7 @@ if (get_user(udata, &uctrl->data)) return -EFAULT; - uptr = (void *) A(udata); + uptr = A(udata); /* In usbdevice_fs, it limits the control buffer to a page, * for simplicity so do we. @@ -3878,7 +3873,8 @@ struct usbdevfs_bulktransfer32 *ubulk; mm_segment_t old_fs; __u32 udata; - void *uptr, *kptr; + void __user *uptr; + void *kptr; int err; ubulk = (struct usbdevfs_bulktransfer32 *) arg; @@ -3889,7 +3885,7 @@ get_user(udata, &ubulk->data)) return -EFAULT; - uptr = (void *) A(udata); + uptr = A(udata); /* In usbdevice_fs, it limits the control buffer to a page, * for simplicity so do we. @@ -4072,7 +4068,8 @@ struct usbdevfs_urb32 *uurb; mm_segment_t old_fs; __u32 udata; - void *uptr, *kptr; + void __user *uptr; + void *kptr; unsigned int buflen; int err; @@ -4096,7 +4093,7 @@ err = -EFAULT; if (__get_user(udata, &uurb->buffer)) goto out; - uptr = (void *) A(udata); + uptr = A(udata); err = -ENOMEM; buflen = kurb->buffer_length; @@ -4153,7 +4150,7 @@ set_fs(old_fs); if (err >= 0 && - put_user(((u32)(long)kptr), (u32 *) A(arg))) + put_user(((u32)(long)kptr), (u32 __user *) A(arg))) err = -EFAULT; return err; @@ -4205,7 +4202,7 @@ struct mtd_oob_buf32 *uarg = (struct mtd_oob_buf32 *)arg; struct mtd_oob_buf karg; u32 tmp; - char *ptr; + char __user *ptr; int ret; if (get_user(karg.start, &uarg->start) || @@ -4213,7 +4210,7 @@ get_user(tmp, &uarg->ptr)) return -EFAULT; - ptr = (char *)A(tmp); + ptr = A(tmp); if (0 >= karg.length) return -EINVAL; diff -Nru a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c --- a/arch/sparc64/kernel/process.c Sat Apr 12 14:44:07 2003 +++ b/arch/sparc64/kernel/process.c Sat Apr 12 14:44:07 2003 @@ -473,7 +473,7 @@ distance = fp - psp; rval = (csp - distance); - if (copy_in_user(rval, psp, distance)) + if (copy_in_user((void __user *) rval, (void __user *) psp, distance)) rval = 0; else if (test_thread_flag(TIF_32BIT)) { if (put_user(((u32)csp), &(((struct reg_window32 *)rval)->ins[6]))) diff -Nru a/arch/sparc64/kernel/signal.c b/arch/sparc64/kernel/signal.c --- a/arch/sparc64/kernel/signal.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc64/kernel/signal.c Sat Apr 12 14:44:08 2003 @@ -42,8 +42,8 @@ /* {set, get}context() needed for 64-bit SparcLinux userland. */ asmlinkage void sparc64_set_context(struct pt_regs *regs) { - struct ucontext *ucp = (struct ucontext *) regs->u_regs[UREG_I0]; - mc_gregset_t *grp; + struct ucontext *ucp = (struct ucontext __user *) regs->u_regs[UREG_I0]; + mc_gregset_t __user *grp; unsigned long pc, npc, tstate; unsigned long fp, i7; unsigned char fenab; @@ -104,9 +104,9 @@ err |= __get_user(fp, &(ucp->uc_mcontext.mc_fp)); err |= __get_user(i7, &(ucp->uc_mcontext.mc_i7)); err |= __put_user(fp, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); err |= __put_user(i7, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); err |= __get_user(fenab, &(ucp->uc_mcontext.mc_fpregs.mcfpu_enab)); if (fenab) { @@ -121,7 +121,7 @@ (sizeof(unsigned int) * 32)); if (fprs & FPRS_DU) err |= copy_from_user(fpregs+16, - ((unsigned long *)&(ucp->uc_mcontext.mc_fpregs.mcfpu_fregs))+16, + ((unsigned long __user *)&(ucp->uc_mcontext.mc_fpregs.mcfpu_fregs))+16, (sizeof(unsigned int) * 32)); err |= __get_user(current_thread_info()->xfsr[0], &(ucp->uc_mcontext.mc_fpregs.mcfpu_fsr)); @@ -139,9 +139,9 @@ asmlinkage void sparc64_get_context(struct pt_regs *regs) { - struct ucontext *ucp = (struct ucontext *) regs->u_regs[UREG_I0]; - mc_gregset_t *grp; - mcontext_t *mcp; + struct ucontext *ucp = (struct ucontext __user *) regs->u_regs[UREG_I0]; + mc_gregset_t __user *grp; + mcontext_t __user *mcp; unsigned long fp, i7; unsigned char fenab; int err; @@ -170,7 +170,7 @@ err = 0; if (_NSIG_WORDS == 1) err |= __put_user(current->blocked.sig[0], - (unsigned long *)&ucp->uc_sigmask); + (unsigned long __user *)&ucp->uc_sigmask); else err |= __copy_to_user(&ucp->uc_sigmask, ¤t->blocked, sizeof(sigset_t)); @@ -196,9 +196,9 @@ err |= __put_user(regs->u_regs[UREG_I7], &((*grp)[MC_O7])); err |= __get_user(fp, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); err |= __get_user(i7, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); err |= __put_user(fp, &(mcp->mc_fp)); err |= __put_user(i7, &(mcp->mc_i7)); @@ -213,7 +213,7 @@ (sizeof(unsigned int) * 32)); if (fprs & FPRS_DU) err |= copy_to_user( - ((unsigned long *)&(mcp->mc_fpregs.mcfpu_fregs))+16, fpregs+16, + ((unsigned long __user *)&(mcp->mc_fpregs.mcfpu_fregs))+16, fpregs+16, (sizeof(unsigned int) * 32)); err |= __put_user(current_thread_info()->xfsr[0], &(mcp->mc_fpregs.mcfpu_fsr)); err |= __put_user(current_thread_info()->gsr[0], &(mcp->mc_fpregs.mcfpu_gsr)); @@ -231,7 +231,7 @@ struct sparc_stackf ss; siginfo_t info; struct pt_regs regs; - __siginfo_fpu_t * fpu_save; + __siginfo_fpu_t __user *fpu_save; stack_t stack; sigset_t mask; __siginfo_fpu_t fpu_state; @@ -300,7 +300,7 @@ _sigpause_common(regs->u_regs[UREG_I0], regs); } -asmlinkage void do_rt_sigsuspend(sigset_t *uset, size_t sigsetsize, struct pt_regs *regs) +asmlinkage void do_rt_sigsuspend(sigset_t __user *uset, size_t sigsetsize, struct pt_regs *regs) { sigset_t oldset, set; @@ -351,7 +351,7 @@ } static inline int -restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = current_thread_info()->fpregs; unsigned long fprs; @@ -374,16 +374,16 @@ void do_rt_sigreturn(struct pt_regs *regs) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; unsigned long tpc, tnpc, tstate; - __siginfo_fpu_t *fpu_save; + __siginfo_fpu_t __user *fpu_save; mm_segment_t old_fs; sigset_t set; stack_t st; int err; synchronize_user_stack (); - sf = (struct rt_signal_frame *) + sf = (struct rt_signal_frame __user *) (regs->u_regs [UREG_FP] + STACK_BIAS); /* 1. Make sure we are not getting garbage from the user */ @@ -438,7 +438,7 @@ } /* Checks if the fp is valid */ -static int invalid_frame_pointer(void *fp, int fplen) +static int invalid_frame_pointer(void __user *fp, int fplen) { if (((unsigned long) fp) & 7) return 1; @@ -446,7 +446,7 @@ } static inline int -save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = (unsigned long *)(regs+1); unsigned long fprs; @@ -466,7 +466,7 @@ return err; } -static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, unsigned long framesize) +static inline void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, unsigned long framesize) { unsigned long sp; @@ -478,14 +478,14 @@ !((current->sas_ss_sp + current->sas_ss_size) & 7)) sp = current->sas_ss_sp + current->sas_ss_size; } - return (void *)(sp - framesize); + return (void __user *)(sp - framesize); } static inline void setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset, siginfo_t *info) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; int sigframe_size, err; /* 1. Make sure everything is clean */ @@ -496,7 +496,8 @@ if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct rt_signal_frame *)get_sigframe(ka, regs, sigframe_size); + sf = (struct rt_signal_frame __user *) + get_sigframe(ka, regs, sigframe_size); if (invalid_frame_pointer (sf, sigframe_size)) goto sigill; @@ -521,8 +522,8 @@ err |= copy_to_user(&sf->mask, oldset, sizeof(sigset_t)); - err |= copy_in_user((u64 *)sf, - (u64 *)(regs->u_regs[UREG_FP]+STACK_BIAS), + err |= copy_in_user((u64 __user *)sf, + (u64 __user *)(regs->u_regs[UREG_FP]+STACK_BIAS), sizeof(struct reg_window)); if (info) @@ -560,7 +561,8 @@ siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) { - setup_rt_frame(ka, regs, signr, oldset, (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL); + setup_rt_frame(ka, regs, signr, oldset, + (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL); if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; if (!(ka->sa.sa_flags & SA_NOMASK)) { diff -Nru a/arch/sparc64/kernel/signal32.c b/arch/sparc64/kernel/signal32.c --- a/arch/sparc64/kernel/signal32.c Sat Apr 12 14:44:05 2003 +++ b/arch/sparc64/kernel/signal32.c Sat Apr 12 14:44:05 2003 @@ -56,7 +56,7 @@ /* struct sigcontext32 * */ u32 sig_scptr; int sig_address; struct sigcontext32 sig_context; - unsigned extramask[_COMPAT_NSIG_WORDS - 1]; + unsigned int extramask[_COMPAT_NSIG_WORDS - 1]; }; /* @@ -68,9 +68,9 @@ struct sparc_stackf32 ss; __siginfo32_t info; /* __siginfo_fpu32_t * */ u32 fpu_save; - unsigned int insns [2]; - unsigned extramask[_COMPAT_NSIG_WORDS - 1]; - unsigned extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ + unsigned int insns[2]; + unsigned int extramask[_COMPAT_NSIG_WORDS - 1]; + unsigned int extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ /* Only valid if (info.si_regs.psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS */ siginfo_extra_v8plus_t v8plus; __siginfo_fpu_t fpu_state; @@ -82,9 +82,9 @@ struct pt_regs32 regs; compat_sigset_t mask; /* __siginfo_fpu32_t * */ u32 fpu_save; - unsigned int insns [2]; + unsigned int insns[2]; stack_t32 stack; - unsigned extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ + unsigned int extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ /* Only valid if (regs.psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS */ siginfo_extra_v8plus_t v8plus; __siginfo_fpu_t fpu_state; @@ -95,11 +95,11 @@ #define NF_ALIGNEDSZ (((sizeof(struct new_signal_frame32) + 7) & (~7))) #define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 7) & (~7))) -int copy_siginfo_to_user32(siginfo_t32 *to, siginfo_t *from) +int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from) { int err; - if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t32))) + if (!access_ok(VERIFY_WRITE, to, sizeof(siginfo_t32))) return -EFAULT; /* If you change siginfo_t structure, please be sure @@ -187,7 +187,7 @@ regs->u_regs[UREG_I0] = EINVAL; return; } - if (copy_from_user(&set32, (void *)(long)uset, sizeof(set32))) { + if (copy_from_user(&set32, (void __user *)(long)uset, sizeof(set32))) { regs->tstate |= TSTATE_ICARRY; regs->u_regs[UREG_I0] = EFAULT; return; @@ -231,7 +231,7 @@ } } -static int restore_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t *fpu) +static int restore_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = current_thread_info()->fpregs; unsigned long fprs; @@ -252,7 +252,7 @@ void do_new_sigreturn32(struct pt_regs *regs) { - struct new_signal_frame32 *sf; + struct new_signal_frame32 __user *sf; unsigned int psr; unsigned pc, npc, fpu_save; sigset_t set; @@ -260,10 +260,10 @@ int err, i; regs->u_regs[UREG_FP] &= 0x00000000ffffffffUL; - sf = (struct new_signal_frame32 *) regs->u_regs [UREG_FP]; + sf = (struct new_signal_frame32 __user *) regs->u_regs[UREG_FP]; /* 1. Make sure we are not getting garbage from the user */ - if (verify_area (VERIFY_READ, sf, sizeof (*sf)) || + if (verify_area(VERIFY_READ, sf, sizeof(*sf)) || (((unsigned long) sf) & 3)) goto segv; @@ -302,7 +302,8 @@ if (fpu_save) err |= restore_fpu_state32(regs, &sf->fpu_state); err |= __get_user(seta[0], &sf->info.si_mask); - err |= copy_from_user(seta+1, &sf->extramask, (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + err |= copy_from_user(seta+1, &sf->extramask, + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); if (err) goto segv; switch (_NSIG_WORDS) { @@ -324,17 +325,17 @@ asmlinkage void do_sigreturn32(struct pt_regs *regs) { - struct sigcontext32 *scptr; - unsigned pc, npc, psr; + struct sigcontext32 __user *scptr; + unsigned int pc, npc, psr; sigset_t set; - unsigned seta[_COMPAT_NSIG_WORDS]; + unsigned int seta[_COMPAT_NSIG_WORDS]; int err; synchronize_user_stack(); if (test_thread_flag(TIF_NEWSIGNALS)) return do_new_sigreturn32(regs); - scptr = (struct sigcontext32 *) + scptr = (struct sigcontext32 __user *) (regs->u_regs[UREG_I0] & 0x00000000ffffffffUL); /* Check sanity of the user arg. */ if (verify_area(VERIFY_READ, scptr, sizeof(struct sigcontext32)) || @@ -349,7 +350,8 @@ err |= __get_user(seta[0], &scptr->sigc_mask); /* Note that scptr + 1 points to extramask */ - err |= copy_from_user(seta+1, scptr + 1, (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + err |= copy_from_user(seta+1, scptr + 1, + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); if (err) goto segv; switch (_NSIG_WORDS) { @@ -388,9 +390,8 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) { - struct rt_signal_frame32 *sf; - unsigned int psr; - unsigned pc, npc, fpu_save; + struct rt_signal_frame32 __user *sf; + unsigned int psr, pc, npc, fpu_save; mm_segment_t old_fs; sigset_t set; compat_sigset_t seta; @@ -399,10 +400,10 @@ synchronize_user_stack(); regs->u_regs[UREG_FP] &= 0x00000000ffffffffUL; - sf = (struct rt_signal_frame32 *) regs->u_regs [UREG_FP]; + sf = (struct rt_signal_frame32 __user *) regs->u_regs[UREG_FP]; /* 1. Make sure we are not getting garbage from the user */ - if (verify_area (VERIFY_READ, sf, sizeof (*sf)) || + if (verify_area(VERIFY_READ, sf, sizeof(*sf)) || (((unsigned long) sf) & 3)) goto segv; @@ -471,14 +472,14 @@ } /* Checks if the fp is valid */ -static int invalid_frame_pointer(void *fp, int fplen) +static int invalid_frame_pointer(void __user *fp, int fplen) { if ((((unsigned long) fp) & 7) || ((unsigned long)fp) > 0x100000000ULL - fplen) return 1; return 0; } -static void *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) +static void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) { unsigned long sp; @@ -490,25 +491,21 @@ if (!on_sig_stack(sp) && !((current->sas_ss_sp + current->sas_ss_size) & 7)) sp = current->sas_ss_sp + current->sas_ss_size; } - return (void *)(sp - framesize); + return (void __user *)(sp - framesize); } static void setup_frame32(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *oldset, siginfo_t *info) { - struct signal_sframe32 *sframep; - struct sigcontext32 *sc; - unsigned seta[_COMPAT_NSIG_WORDS]; + struct signal_sframe32 __user *sframep; + struct sigcontext32 __user *sc; + unsigned int seta[_COMPAT_NSIG_WORDS]; int err = 0; void *sig_address; int sig_code; unsigned long pc = regs->tpc; unsigned long npc = regs->tnpc; - -#if 0 - int window = 0; -#endif - unsigned psr; + unsigned int psr; if (test_thread_flag(TIF_32BIT)) { pc &= 0xffffffff; @@ -518,8 +515,9 @@ synchronize_user_stack(); save_and_clear_fpu(); - sframep = (struct signal_sframe32 *)get_sigframe(sa, regs, SF_ALIGNEDSZ); - if (invalid_frame_pointer (sframep, sizeof(*sframep))){ + sframep = (struct signal_sframe32 __user *) + get_sigframe(sa, regs, SF_ALIGNEDSZ); + if (invalid_frame_pointer(sframep, sizeof(*sframep))){ /* Don't change signal code and address, so that * post mortem debuggers can have a look. */ @@ -544,32 +542,21 @@ } err |= __put_user(seta[0], &sc->sigc_mask); err |= __copy_to_user(sframep->extramask, seta + 1, - (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); err |= __put_user(regs->u_regs[UREG_FP], &sc->sigc_sp); err |= __put_user(pc, &sc->sigc_pc); err |= __put_user(npc, &sc->sigc_npc); - psr = tstate_to_psr (regs->tstate); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; err |= __put_user(psr, &sc->sigc_psr); err |= __put_user(regs->u_regs[UREG_G1], &sc->sigc_g1); err |= __put_user(regs->u_regs[UREG_I0], &sc->sigc_o0); err |= __put_user(get_thread_wsaved(), &sc->sigc_oswins); -#if 0 -/* w_saved is not currently used... */ - if (get_thread_wsaved()) - for (window = 0; window < get_thread_wsaved(); window++) { - sc->sigc_spbuf[window] = - (char *) current_thread_info()->rwbuf_stkptrs[window]; - err |= copy_to_user(&sc->sigc_wbuf[window], - ¤t_thread_info()->reg_window[window], - sizeof(struct reg_window)); - } - else -#endif - err |= copy_in_user((u32 *)sframep, - (u32 *)(regs->u_regs[UREG_FP]), - sizeof(struct reg_window32)); + + err |= copy_in_user((u32 __user *)sframep, + (u32 __user *)(regs->u_regs[UREG_FP]), + sizeof(struct reg_window32)); set_thread_wsaved(0); /* So process is allowed to execute. */ err |= __put_user(signr, &sframep->sig_num); @@ -588,7 +575,7 @@ switch (info->si_code) { case ILL_ILLOPC: sig_code = SUBSIG_ILLINST; break; case ILL_PRVOPC: sig_code = SUBSIG_PRIVINST; break; - case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP (info->si_trapno); break; + case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP(info->si_trapno); break; default: sig_code = SUBSIG_STACK; break; } break; @@ -646,7 +633,7 @@ } -static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t *fpu) +static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = current_thread_info()->fpregs; unsigned long fprs; @@ -669,11 +656,11 @@ static void new_setup_frame32(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset) { - struct new_signal_frame32 *sf; + struct new_signal_frame32 __user *sf; int sigframe_size; u32 psr; int i, err; - unsigned seta[_COMPAT_NSIG_WORDS]; + unsigned int seta[_COMPAT_NSIG_WORDS]; /* 1. Make sure everything is clean */ synchronize_user_stack(); @@ -683,9 +670,10 @@ if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct new_signal_frame32 *)get_sigframe(&ka->sa, regs, sigframe_size); + sf = (struct new_signal_frame32 __user *) + get_sigframe(&ka->sa, regs, sigframe_size); - if (invalid_frame_pointer (sf, sigframe_size)) + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill; if (get_thread_wsaved() != 0) @@ -699,7 +687,7 @@ err = put_user(regs->tpc, &sf->info.si_regs.pc); err |= __put_user(regs->tnpc, &sf->info.si_regs.npc); err |= __put_user(regs->y, &sf->info.si_regs.y); - psr = tstate_to_psr (regs->tstate); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; err |= __put_user(psr, &sf->info.si_regs.psr); @@ -729,10 +717,10 @@ } err |= __put_user(seta[0], &sf->info.si_mask); err |= __copy_to_user(sf->extramask, seta + 1, - (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); - err |= copy_in_user((u32 *)sf, - (u32 *)(regs->u_regs[UREG_FP]), + err |= copy_in_user((u32 __user *)sf, + (u32 __user *)(regs->u_regs[UREG_FP]), sizeof(struct reg_window32)); if (err) @@ -771,7 +759,8 @@ preempt_disable(); ptep = pte_offset_map(pmdp, address); if (pte_present(*ptep)) { - unsigned long page = (unsigned long) page_address(pte_page(*ptep)); + unsigned long page = (unsigned long) + page_address(pte_page(*ptep)); __asm__ __volatile__( " membar #StoreStore\n" @@ -795,30 +784,29 @@ setup_svr4_frame32(struct sigaction *sa, unsigned long pc, unsigned long npc, struct pt_regs *regs, int signr, sigset_t *oldset) { - svr4_signal_frame_t *sfp; - svr4_gregset_t *gr; - svr4_siginfo_t *si; - svr4_mcontext_t *mc; - svr4_gwindows_t *gw; - svr4_ucontext_t *uc; + svr4_signal_frame_t __user *sfp; + svr4_gregset_t __user *gr; + svr4_siginfo_t __user *si; + svr4_mcontext_t __user *mc; + svr4_gwindows_t __user *gw; + svr4_ucontext_t __user *uc; svr4_sigset_t setv; -#if 0 - int window = 0; -#endif - unsigned psr; + unsigned int psr; int i, err; synchronize_user_stack(); save_and_clear_fpu(); regs->u_regs[UREG_FP] &= 0x00000000ffffffffUL; - sfp = (svr4_signal_frame_t *) get_sigframe(sa, regs, sizeof(struct reg_window32) + SVR4_SF_ALIGNED); + sfp = (svr4_signal_frame_t __user *) + get_sigframe(sa, regs, + sizeof(struct reg_window32) + SVR4_SF_ALIGNED); - if (invalid_frame_pointer (sfp, sizeof (*sfp))) + if (invalid_frame_pointer(sfp, sizeof(*sfp))) do_exit(SIGILL); /* Start with a clean frame pointer and fill it */ - err = clear_user(sfp, sizeof (*sfp)); + err = clear_user(sfp, sizeof(*sfp)); /* Setup convenience variables */ si = &sfp->si; @@ -838,22 +826,23 @@ setv.sigbits[3] = (oldset->sig[1] >> 32); err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t)); } else - err |= __copy_to_user(&uc->sigmask, &setv, 2 * sizeof(unsigned)); + err |= __copy_to_user(&uc->sigmask, &setv, + 2 * sizeof(unsigned int)); /* Store registers */ if (test_thread_flag(TIF_32BIT)) { regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - err |= __put_user(regs->tpc, &((*gr) [SVR4_PC])); - err |= __put_user(regs->tnpc, &((*gr) [SVR4_NPC])); - psr = tstate_to_psr (regs->tstate); + err |= __put_user(regs->tpc, &((*gr)[SVR4_PC])); + err |= __put_user(regs->tnpc, &((*gr)[SVR4_NPC])); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; - err |= __put_user(psr, &((*gr) [SVR4_PSR])); - err |= __put_user(regs->y, &((*gr) [SVR4_Y])); + err |= __put_user(psr, &((*gr)[SVR4_PSR])); + err |= __put_user(regs->y, &((*gr)[SVR4_Y])); - /* Copy g [1..7] and o [0..7] registers */ + /* Copy g[1..7] and o[0..7] registers */ for (i = 0; i < 7; i++) err |= __put_user(regs->u_regs[UREG_G1+i], (&(*gr)[SVR4_G1])+i); for (i = 0; i < 8; i++) @@ -872,29 +861,7 @@ /* 2. Number of windows to restore at setcontext (): */ err |= __put_user(get_thread_wsaved(), &gw->count); - /* 3. Save each valid window - * Currently, it makes a copy of the windows from the kernel copy. - * David's code for SunOS, makes the copy but keeps the pointer to - * the kernel. My version makes the pointer point to a userland - * copy of those. Mhm, I wonder if I shouldn't just ignore those - * on setcontext and use those that are on the kernel, the signal - * handler should not be modyfing those, mhm. - * - * These windows are just used in case synchronize_user_stack failed - * to flush the user windows. - */ -#if 0 - for (window = 0; window < get_thread_wsaved(); window++) { - err |= __put_user((int *) &(gw->win[window]), - (int **) gw->winptr + window); - err |= copy_to_user(&gw->win[window], - ¤t_thread_info()->reg_window[window], - sizeof (svr4_rwindow_t)); - err |= __put_user(0, (int *) gw->winptr + window); - } -#endif - - /* 4. We just pay attention to the gw->count field on setcontext */ + /* 3. We just pay attention to the gw->count field on setcontext */ set_thread_wsaved(0); /* So process is allowed to execute. */ /* Setup the signal information. Solaris expects a bunch of @@ -915,14 +882,14 @@ } /* Arguments passed to signal handler */ - if (regs->u_regs [14]){ - struct reg_window32 *rw = (struct reg_window32 *) - (regs->u_regs [14] & 0x00000000ffffffffUL); - - err |= __put_user(signr, &rw->ins [0]); - err |= __put_user((u64)si, &rw->ins [1]); - err |= __put_user((u64)uc, &rw->ins [2]); - err |= __put_user((u64)sfp, &rw->ins [6]); /* frame pointer */ + if (regs->u_regs[14]){ + struct reg_window32 __user *rw = (struct reg_window32 __user *) + (regs->u_regs[14] & 0x00000000ffffffffUL); + + err |= __put_user(signr, &rw->ins[0]); + err |= __put_user((u64)si, &rw->ins[1]); + err |= __put_user((u64)uc, &rw->ins[2]); + err |= __put_user((u64)sfp, &rw->ins[6]); /* frame pointer */ if (err) goto sigsegv; @@ -937,20 +904,21 @@ } asmlinkage int -svr4_getcontext(svr4_ucontext_t *uc, struct pt_regs *regs) +svr4_getcontext(svr4_ucontext_t __user *uc, struct pt_regs *regs) { - svr4_gregset_t *gr; - svr4_mcontext_t *mc; + svr4_gregset_t __user *gr; + svr4_mcontext_t __user *mc; svr4_sigset_t setv; int i, err; + u32 psr; synchronize_user_stack(); save_and_clear_fpu(); if (get_thread_wsaved()) - do_exit (SIGSEGV); + do_exit(SIGSEGV); - err = clear_user(uc, sizeof (*uc)); + err = clear_user(uc, sizeof(*uc)); /* Setup convenience variables */ mc = &uc->mcontext; @@ -970,19 +938,17 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - err |= __put_user(regs->tpc, &uc->mcontext.greg [SVR4_PC]); - err |= __put_user(regs->tnpc, &uc->mcontext.greg [SVR4_NPC]); -#if 1 - err |= __put_user(0, &uc->mcontext.greg [SVR4_PSR]); -#else - i = tstate_to_psr(regs->tstate) & ~PSR_EF; + err |= __put_user(regs->tpc, &uc->mcontext.greg[SVR4_PC]); + err |= __put_user(regs->tnpc, &uc->mcontext.greg[SVR4_NPC]); + + psr = tstate_to_psr(regs->tstate) & ~PSR_EF; if (current_thread_info()->fpsaved[0] & FPRS_FEF) - i |= PSR_EF; - err |= __put_user(i, &uc->mcontext.greg [SVR4_PSR]); -#endif - err |= __put_user(regs->y, &uc->mcontext.greg [SVR4_Y]); + psr |= PSR_EF; + err |= __put_user(psr, &uc->mcontext.greg[SVR4_PSR]); + + err |= __put_user(regs->y, &uc->mcontext.greg[SVR4_Y]); - /* Copy g [1..7] and o [0..7] registers */ + /* Copy g[1..7] and o[0..7] registers */ for (i = 0; i < 7; i++) err |= __put_user(regs->u_regs[UREG_G1+i], (&(*gr)[SVR4_G1])+i); for (i = 0; i < 8; i++) @@ -1001,9 +967,9 @@ /* Set the context for a svr4 application, this is Solaris way to sigreturn */ -asmlinkage int svr4_setcontext(svr4_ucontext_t *c, struct pt_regs *regs) +asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs) { - svr4_gregset_t *gr; + svr4_gregset_t __user *gr; mm_segment_t old_fs; u32 pc, npc, psr; sigset_t set; @@ -1020,7 +986,7 @@ goto sigsegv; if (((unsigned long) c) & 3){ - printk ("Unaligned structure passed\n"); + printk("Unaligned structure passed\n"); goto sigsegv; } @@ -1040,7 +1006,7 @@ /* note that nPC is ored a 1, this is used to inform entry.S */ /* that we don't want it to mess with our PC and nPC */ - err |= copy_from_user (&setv, &c->sigmask, sizeof(svr4_sigset_t)); + err |= copy_from_user(&setv, &c->sigmask, sizeof(svr4_sigset_t)); set.sig[0] = setv.sigbits[0] | (((long)setv.sigbits[1]) << 32); if (_NSIG_WORDS >= 2) set.sig[1] = setv.sigbits[2] | (((long)setv.sigbits[3]) << 32); @@ -1069,14 +1035,11 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - err |= __get_user(regs->y, &((*gr) [SVR4_Y])); - err |= __get_user(psr, &((*gr) [SVR4_PSR])); + err |= __get_user(regs->y, &((*gr)[SVR4_Y])); + err |= __get_user(psr, &((*gr)[SVR4_PSR])); regs->tstate &= ~(TSTATE_ICC|TSTATE_XCC); regs->tstate |= psr_to_tstate_icc(psr); -#if 0 - if (psr & PSR_EF) - regs->tstate |= TSTATE_PEF; -#endif + /* Restore g[1..7] and o[0..7] registers */ for (i = 0; i < 7; i++) err |= __get_user(regs->u_regs[UREG_G1+i], (&(*gr)[SVR4_G1])+i); @@ -1094,7 +1057,7 @@ unsigned long signr, sigset_t *oldset, siginfo_t *info) { - struct rt_signal_frame32 *sf; + struct rt_signal_frame32 __user *sf; int sigframe_size; u32 psr; int i, err; @@ -1108,9 +1071,10 @@ if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct rt_signal_frame32 *)get_sigframe(&ka->sa, regs, sigframe_size); + sf = (struct rt_signal_frame32 __user *) + get_sigframe(&ka->sa, regs, sigframe_size); - if (invalid_frame_pointer (sf, sigframe_size)) + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill; if (get_thread_wsaved() != 0) @@ -1124,7 +1088,7 @@ err = put_user(regs->tpc, &sf->regs.pc); err |= __put_user(regs->tnpc, &sf->regs.npc); err |= __put_user(regs->y, &sf->regs.y); - psr = tstate_to_psr (regs->tstate); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; err |= __put_user(psr, &sf->regs.psr); @@ -1133,7 +1097,8 @@ err |= __put_user(sizeof(siginfo_extra_v8plus_t), &sf->extra_size); err |= __put_user(SIGINFO_EXTRA_V8PLUS_MAGIC, &sf->v8plus.g_upper[0]); for (i = 1; i < 16; i++) - err |= __put_user(((u32 *)regs->u_regs)[2*i], &sf->v8plus.g_upper[i]); + err |= __put_user(((u32 *)regs->u_regs)[2*i], + &sf->v8plus.g_upper[i]); if (psr & PSR_EF) { err |= save_fpu_state32(regs, &sf->fpu_state); @@ -1162,8 +1127,8 @@ } err |= __copy_to_user(&sf->mask, &seta, sizeof(compat_sigset_t)); - err |= copy_in_user((u32 *)sf, - (u32 *)(regs->u_regs[UREG_FP]), + err |= copy_in_user((u32 __user *)sf, + (u32 __user *)(regs->u_regs[UREG_FP]), sizeof(struct reg_window32)); if (err) goto sigsegv; @@ -1204,7 +1169,8 @@ preempt_disable(); ptep = pte_offset_map(pmdp, address); if (pte_present(*ptep)) { - unsigned long page = (unsigned long) page_address(pte_page(*ptep)); + unsigned long page = (unsigned long) + page_address(pte_page(*ptep)); __asm__ __volatile__( " membar #StoreStore\n" @@ -1229,7 +1195,8 @@ int svr4_signal) { if (svr4_signal) - setup_svr4_frame32(&ka->sa, regs->tpc, regs->tnpc, regs, signr, oldset); + setup_svr4_frame32(&ka->sa, regs->tpc, regs->tnpc, + regs, signr, oldset); else { if (ka->sa.sa_flags & SA_SIGINFO) setup_rt_frame32(ka, regs, signr, oldset, info); @@ -1322,13 +1289,16 @@ asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp) { - struct sigstack32 *ssptr = (struct sigstack32 *)((unsigned long)(u_ssptr)); - struct sigstack32 *ossptr = (struct sigstack32 *)((unsigned long)(u_ossptr)); + struct sigstack32 __user *ssptr = + (struct sigstack32 __user *)((unsigned long)(u_ssptr)); + struct sigstack32 __user *ossptr = + (struct sigstack32 __user *)((unsigned long)(u_ossptr)); int ret = -EFAULT; /* First see if old state is wanted. */ if (ossptr) { - if (put_user(current->sas_ss_sp + current->sas_ss_size, &ossptr->the_stack) || + if (put_user(current->sas_ss_sp + current->sas_ss_size, + &ossptr->the_stack) || __put_user(on_sig_stack(sp), &ossptr->cur_status)) goto out; } @@ -1339,15 +1309,18 @@ if (get_user((long)ss_sp, &ssptr->the_stack)) goto out; + /* If the current stack was set with sigaltstack, don't - swap stacks while we are on it. */ + * swap stacks while we are on it. + */ ret = -EPERM; if (current->sas_ss_sp && on_sig_stack(sp)) goto out; /* Since we don't know the extent of the stack, and we don't - track onstack-ness, but rather calculate it, we must - presume a size. Ho hum this interface is lossy. */ + * track onstack-ness, but rather calculate it, we must + * presume a size. Ho hum this interface is lossy. + */ current->sas_ss_sp = (unsigned long)ss_sp - SIGSTKSZ; current->sas_ss_size = SIGSTKSZ; } @@ -1363,17 +1336,17 @@ int ret; mm_segment_t old_fs; - if (ussa && (get_user((long)uss.ss_sp, &((stack_t32 *)(long)ussa)->ss_sp) || - __get_user(uss.ss_flags, &((stack_t32 *)(long)ussa)->ss_flags) || - __get_user(uss.ss_size, &((stack_t32 *)(long)ussa)->ss_size))) + if (ussa && (get_user((long)uss.ss_sp, &((stack_t32 __user *)(long)ussa)->ss_sp) || + __get_user(uss.ss_flags, &((stack_t32 __user *)(long)ussa)->ss_flags) || + __get_user(uss.ss_size, &((stack_t32 __user *)(long)ussa)->ss_size))) return -EFAULT; old_fs = get_fs(); set_fs(KERNEL_DS); ret = do_sigaltstack(ussa ? &uss : NULL, uossa ? &uoss : NULL, sp); set_fs(old_fs); - if (!ret && uossa && (put_user((long)uoss.ss_sp, &((stack_t32 *)(long)uossa)->ss_sp) || - __put_user(uoss.ss_flags, &((stack_t32 *)(long)uossa)->ss_flags) || - __put_user(uoss.ss_size, &((stack_t32 *)(long)uossa)->ss_size))) + if (!ret && uossa && (put_user((long)uoss.ss_sp, &((stack_t32 __user *)(long)uossa)->ss_sp) || + __put_user(uoss.ss_flags, &((stack_t32 __user *)(long)uossa)->ss_flags) || + __put_user(uoss.ss_size, &((stack_t32 __user *)(long)uossa)->ss_size))) return -EFAULT; return ret; } diff -Nru a/arch/sparc64/kernel/sys_sparc.c b/arch/sparc64/kernel/sys_sparc.c --- a/arch/sparc64/kernel/sys_sparc.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc64/kernel/sys_sparc.c Sat Apr 12 14:44:08 2003 @@ -199,7 +199,7 @@ goto out; } default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= MSGCTL) @@ -218,7 +218,7 @@ err = sys_msgctl (first, second | IPC_64, (struct msqid_ds *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= SHMCTL) @@ -236,18 +236,18 @@ err = sys_shmctl (first, second | IPC_64, (struct shmid_ds *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } else - err = -EINVAL; + err = -ENOSYS; out: return err; } -extern asmlinkage int sys_newuname(struct new_utsname * name); +extern asmlinkage int sys_newuname(struct new_utsname __user *name); -asmlinkage int sparc64_newuname(struct new_utsname * name) +asmlinkage int sparc64_newuname(struct new_utsname __user *name) { int ret = sys_newuname(name); @@ -421,7 +421,7 @@ extern void check_pending(int signum); -asmlinkage int sys_getdomainname(char *name, int len) +asmlinkage int sys_getdomainname(char __user *name, int len) { int nlen; int err = -EFAULT; @@ -432,9 +432,9 @@ if (nlen < len) len = nlen; - if(len > __NEW_UTS_LEN) + if (len > __NEW_UTS_LEN) goto done; - if(copy_to_user(name, system_utsname.domainname, len)) + if (copy_to_user(name, system_utsname.domainname, len)) goto done; err = 0; done: @@ -458,7 +458,7 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - if(++count <= 5) { + if (++count <= 5) { printk ("For Solaris binary emulation you need solaris module loaded\n"); show_regs (regs); } @@ -478,7 +478,7 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - if(++count <= 20) + if (++count <= 20) printk ("SunOS binary emulation not compiled in\n"); force_sig(SIGSEGV, current); @@ -486,9 +486,11 @@ } #endif -asmlinkage int sys_utrap_install(utrap_entry_t type, utrap_handler_t new_p, +asmlinkage int sys_utrap_install(utrap_entry_t type, + utrap_handler_t new_p, utrap_handler_t new_d, - utrap_handler_t *old_p, utrap_handler_t *old_d) + utrap_handler_t __user *old_p, + utrap_handler_t __user *old_d) { if (type < UT_INSTRUCTION_EXCEPTION || type > UT_TRAP_INSTRUCTION_31) return -EINVAL; @@ -511,9 +513,11 @@ if (!current_thread_info()->utraps) { current_thread_info()->utraps = kmalloc((UT_TRAP_INSTRUCTION_31+1)*sizeof(long), GFP_KERNEL); - if (!current_thread_info()->utraps) return -ENOMEM; + if (!current_thread_info()->utraps) + return -ENOMEM; current_thread_info()->utraps[0] = 1; - memset(current_thread_info()->utraps+1, 0, UT_TRAP_INSTRUCTION_31*sizeof(long)); + memset(current_thread_info()->utraps+1, 0, + UT_TRAP_INSTRUCTION_31*sizeof(long)); } else { if ((utrap_handler_t)current_thread_info()->utraps[type] != new_p && current_thread_info()->utraps[0] > 1) { diff -Nru a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c --- a/arch/sparc64/kernel/sys_sparc32.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc64/kernel/sys_sparc32.c Sat Apr 12 14:44:08 2003 @@ -756,7 +756,7 @@ err = do_sys32_semctl (first, second, third, (void *)AA(ptr)); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; }; if (call <= MSGCTL) @@ -775,7 +775,7 @@ err = do_sys32_msgctl (first, second, (void *)AA(ptr)); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= SHMCTL) @@ -794,11 +794,11 @@ err = do_sys32_shmctl (first, second, (void *)AA(ptr)); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } - err = -EINVAL; + err = -ENOSYS; out: return err; @@ -2831,10 +2831,10 @@ return error; } -extern asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2855,10 +2855,10 @@ return ret; } -extern asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2881,9 +2881,9 @@ return ret; } -extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); +extern long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); -int sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) +long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) { return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low, buf, len); diff -Nru a/arch/v850/Kconfig b/arch/v850/Kconfig --- a/arch/v850/Kconfig Sat Apr 12 14:44:07 2003 +++ b/arch/v850/Kconfig Sat Apr 12 14:44:07 2003 @@ -124,9 +124,11 @@ depends RTE_CB_MA1 || RTE_CB_NB85E default y - # Currently, we only support RTE-CB boards using the Multi debugger config RTE_CB_MULTI bool + # RTE_CB_NB85E can either have multi ROM support or not, but + # other platforms (currently only RTE_CB_MA1) require it. + prompt "Multi monitor ROM support" if RTE_CB_NB85E depends RTE_CB default y diff -Nru a/arch/v850/kernel/Makefile b/arch/v850/kernel/Makefile --- a/arch/v850/kernel/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/v850/kernel/Makefile Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ # # arch/v850/kernel/Makefile # -# Copyright (C) 2001,02 NEC Corporation -# Copyright (C) 2001,02 Miles Bader +# Copyright (C) 2001,02,03 NEC Electronics Corporation +# Copyright (C) 2001,02,03 Miles Bader # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -15,10 +15,14 @@ signal.o irq.o mach.o ptrace.o bug.o obj-$(CONFIG_MODULES) += module.o v850_ksyms.o # chip-specific code -obj-$(CONFIG_V850E_MA1) += ma.o nb85e_utils.o nb85e_timer_d.o obj-$(CONFIG_V850E_NB85E) += nb85e_intc.o -obj-$(CONFIG_V850E2_ANNA) += anna.o nb85e_intc.o nb85e_utils.o nb85e_timer_d.o -obj-$(CONFIG_V850E_AS85EP1) += as85ep1.o nb85e_intc.o nb85e_utils.o nb85e_timer_d.o +obj-$(CONFIG_V850E_MA1) += ma.o nb85e_utils.o nb85e_timer_d.o +obj-$(CONFIG_V850E_TEG) += teg.o nb85e_utils.o nb85e_cache.o \ + nb85e_timer_d.o +obj-$(CONFIG_V850E2_ANNA) += anna.o nb85e_intc.o nb85e_utils.o \ + nb85e_timer_d.o +obj-$(CONFIG_V850E_AS85EP1) += as85ep1.o nb85e_intc.o nb85e_utils.o \ + nb85e_timer_d.o # platform-specific code obj-$(CONFIG_V850E_SIM) += sim.o simcons.o obj-$(CONFIG_V850E2_SIM85E2C) += sim85e2c.o nb85e_intc.o memcons.o diff -Nru a/arch/v850/kernel/entry.S b/arch/v850/kernel/entry.S --- a/arch/v850/kernel/entry.S Sat Apr 12 14:44:09 2003 +++ b/arch/v850/kernel/entry.S Sat Apr 12 14:44:10 2003 @@ -231,7 +231,7 @@ st.b r19, KM; \ GET_CURRENT_TASK(CURRENT_TASK); /* Fetch the current task pointer. */ \ /* Save away the syscall number. */ \ - sst.w syscall_num, PTO+PT_SYSCALL[ep] + sst.w syscall_num, PTO+PT_CUR_SYSCALL[ep] /* Save register state not normally saved by PUSH_STATE for TYPE. */ @@ -438,11 +438,11 @@ LP register should point to the location where the called function should return. [note that MAKE_SYS_CALL uses label 1] */ #define MAKE_SYS_CALL \ - /* See if the system call number is valid. */ \ - addi -NR_syscalls, r12, r0; \ - bnh 1f; \ /* Figure out which function to use for this system call. */ \ shl 2, r12; \ + /* See if the system call number is valid. */ \ + addi lo(CSYM(sys_call_table) - sys_call_table_end), r12, r0; \ + bnh 1f; \ mov hilo(CSYM(sys_call_table)), r19; \ add r19, r12; \ ld.w 0[r12], r12; \ @@ -511,10 +511,8 @@ (copy_thread makes ret_from_fork the return address in each new thread's saved context). */ C_ENTRY(ret_from_fork): -#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) mov r10, r6 // switch_thread returns the prev task. jarl CSYM(schedule_tail), lp // ...which is schedule_tail's arg -#endif mov r0, r10 // Child's fork call should return 0. br ret_from_trap // Do normal trap return. C_END(ret_from_fork) @@ -982,8 +980,5 @@ .long CSYM(sys_pivot_root) // 200 .long CSYM(sys_gettid) .long CSYM(sys_tkill) - .long CSYM(sys_ni_syscall) // sys_mincore - .long CSYM(sys_ni_syscall) // sys_madvise - - .space (NR_syscalls-205)*4 +sys_call_table_end: C_END(sys_call_table) diff -Nru a/arch/v850/kernel/gbus_int.c b/arch/v850/kernel/gbus_int.c --- a/arch/v850/kernel/gbus_int.c Sat Apr 12 14:44:10 2003 +++ b/arch/v850/kernel/gbus_int.c Sat Apr 12 14:44:10 2003 @@ -26,7 +26,9 @@ /* For each GINT interrupt, how many GBUS interrupts are using it. */ static unsigned gint_num_active_irqs[NUM_GINTS] = { 0 }; -/* A table of GINTn interrupts we actually use. */ +/* A table of GINTn interrupts we actually use. + Note that we don't use GINT0 because all the boards we support treat it + specially. */ struct used_gint { unsigned gint; unsigned priority; diff -Nru a/arch/v850/kernel/nb85e_cache.c b/arch/v850/kernel/nb85e_cache.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/kernel/nb85e_cache.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,178 @@ +/* + * arch/v850/kernel/nb85e_cache.c -- Cache control for NB85E_CACHE212 and + * NB85E_CACHE213 cache memories + * + * Copyright (C) 2003 NEC Electronics Corporation + * Copyright (C) 2003 Miles Bader + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file COPYING in the main directory of this + * archive for more details. + * + * Written by Miles Bader + */ + +#include +#include + +#define WAIT_UNTIL_CLEAR(value) while (value) {} + +/* Set caching params via the BHC and DCC registers. */ +void nb85e_cache_enable (u16 bhc, u16 dcc) +{ + unsigned long *r0_ram = (unsigned long *)R0_RAM_ADDR; + register u16 bhc_val asm ("r6") = bhc; + + /* Configure data-cache. */ + NB85E_CACHE_DCC = dcc; + + /* Configure caching for various memory regions by writing the BHC + register. The documentation says that an instruction _cannot_ + enable/disable caching for the memory region in which the + instruction itself exists; to work around this, we store + appropriate instructions into the on-chip RAM area (which is never + cached), and briefly jump there to do the work. */ + r0_ram[0] = 0xf0720760; /* st.h r0, 0xfffff072[r0] */ + r0_ram[1] = 0xf06a3760; /* st.h r6, 0xfffff06a[r0] */ + r0_ram[2] = 0x5640006b; /* jmp [r11] */ + asm ("mov hilo(1f), r11; jmp [%1]; 1:;" + :: "r" (bhc_val), "r" (R0_RAM_ADDR) : "r11"); +} + +static void clear_icache (void) +{ + /* 1. Read the instruction cache control register (ICC) and confirm + that bits 0 and 1 (TCLR0, TCLR1) are all cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3); + + /* 2. Read the ICC register and confirm that bit 12 (LOCK0) is + cleared. Bit 13 of the ICC register is always cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x1000); + + /* 3. Set the TCLR0 and TCLR1 bits of the ICC register as follows, + when clearing way 0 and way 1 at the same time: + (a) Set the TCLR0 and TCLR1 bits. + (b) Read the TCLR0 and TCLR1 bits to confirm that these bits + are cleared. + (c) Perform (a) and (b) above again. */ + NB85E_CACHE_ICC |= 0x3; + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3); + /* Do it again. */ + NB85E_CACHE_ICC |= 0x3; + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3); +} + +/* Flush or clear (or both) the data cache, depending on the value of FLAGS; + the procedure is the same for both, just the control bits used differ (and + both may be performed simultaneously). */ +static void dcache_op (unsigned short flags) +{ + /* 1. Read the data cache control register (DCC) and confirm that bits + 0, 1, 4, and 5 (DC00, DC01, DC04, DC05) are all cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & 0x33); + + /* 2. Clear DCC register bit 12 (DC12), bit 13 (DC13), or both + depending on the way for which tags are to be cleared. */ + NB85E_CACHE_DCC &= ~0xC000; + + /* 3. Set DCC register bit 0 (DC00), bit 1 (DC01) or both depending on + the way for which tags are to be cleared. + ... + Set DCC register bit 4 (DC04), bit 5 (DC05), or both depending + on the way to be data flushed. */ + NB85E_CACHE_DCC |= flags; + + /* 4. Read DCC register bit DC00, DC01 [DC04, DC05], or both depending + on the way for which tags were cleared [flushed] and confirm + that that bit is cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & flags); +} + +/* Flushes the contents of the dcache to memory. */ +static inline void flush_dcache (void) +{ + /* We only need to do something if in write-back mode. */ + if (NB85E_CACHE_DCC & 0x0400) + dcache_op (0x30); +} + +/* Flushes the contents of the dcache to memory, and then clears it. */ +static inline void clear_dcache (void) +{ + /* We only need to do something if the dcache is enabled. */ + if (NB85E_CACHE_DCC & 0x0C00) + dcache_op (0x33); +} + +/* Clears the dcache without flushing to memory first. */ +static inline void clear_dcache_no_flush (void) +{ + /* We only need to do something if the dcache is enabled. */ + if (NB85E_CACHE_DCC & 0x0C00) + dcache_op (0x3); +} + +static inline void cache_exec_after_store (void) +{ + flush_dcache (); + clear_icache (); +} + + +/* Exported functions. */ + +void inline nb85e_cache_flush_all (void) +{ + clear_icache (); + clear_dcache (); +} + +void nb85e_cache_flush_mm (struct mm_struct *mm) +{ + /* nothing */ +} + +void nb85e_cache_flush_range (struct mm_struct *mm, + unsigned long start, unsigned long end) +{ + /* nothing */ +} + +void nb85e_cache_flush_page (struct vm_area_struct *vma, + unsigned long page_addr) +{ + /* nothing */ +} + +void nb85e_cache_flush_dcache_page (struct page *page) +{ + /* nothing */ +} + +void nb85e_cache_flush_icache (void) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_icache_range (unsigned long start, unsigned long end) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_icache_page (struct vm_area_struct *vma, + struct page *page) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma, + struct page *page, + unsigned long adr, int len) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_sigtramp (unsigned long addr) +{ + cache_exec_after_store (); +} diff -Nru a/arch/v850/kernel/nb85e_intc.c b/arch/v850/kernel/nb85e_intc.c --- a/arch/v850/kernel/nb85e_intc.c Sat Apr 12 14:44:07 2003 +++ b/arch/v850/kernel/nb85e_intc.c Sat Apr 12 14:44:07 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/nb85e_intc.c -- NB85E cpu core interrupt controller (INTC) * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -26,6 +26,42 @@ return 0; } +static void nb85e_intc_end_irq (unsigned irq) +{ + unsigned long psw, temp; + + /* Clear the highest-level bit in the In-service priority register + (ISPR), to allow this interrupt (or another of the same or + lesser priority) to happen again. + + The `reti' instruction normally does this automatically when the + PSW bits EP and NP are zero, but we can't always rely on reti + being used consistently to return after an interrupt (another + process can be scheduled, for instance, which can delay the + associated reti for a long time, or this process may be being + single-stepped, which uses the `dbret' instruction to return + from the kernel). + + We also set the PSW EP bit, which prevents reti from also + trying to modify the ISPR itself. */ + + /* Get PSW and disable interrupts. */ + asm volatile ("stsr psw, %0; di" : "=r" (psw)); + /* We don't want to do anything for NMIs (they don't use the ISPR). */ + if (! (psw & 0xC0)) { + /* Transition to `trap' state, so that an eventual real + reti instruction won't modify the ISPR. */ + psw |= 0x40; + /* Fake an interrupt return, which automatically clears the + appropriate bit in the ISPR. */ + asm volatile ("mov hilo(1f), %0;" + "ldsr %0, eipc; ldsr %1, eipsw;" + "reti;" + "1:" + : "=&r" (temp) : "r" (psw)); + } +} + /* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array INITS (which is terminated by an entry with the name field == 0). */ void __init nb85e_intc_init_irq_types (struct nb85e_intc_irq_init *inits, @@ -43,7 +79,7 @@ hwit->enable = nb85e_intc_enable_irq; hwit->disable = nb85e_intc_disable_irq; hwit->ack = irq_nop; - hwit->end = irq_nop; + hwit->end = nb85e_intc_end_irq; /* Initialize kernel IRQ infrastructure for this interrupt. */ init_irq_handlers(init->base, init->num, init->interval, hwit); diff -Nru a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c --- a/arch/v850/kernel/process.c Sat Apr 12 14:44:06 2003 +++ b/arch/v850/kernel/process.c Sat Apr 12 14:44:06 2003 @@ -226,7 +226,7 @@ if (!p || p == current || p->state == TASK_RUNNING) return 0; - pc = thread_saved_pc (&p->thread); + pc = thread_saved_pc (p); /* This quite disgusting function walks up the stack, following saved return address, until it something that's out of bounds diff -Nru a/arch/v850/kernel/rte_cb.c b/arch/v850/kernel/rte_cb.c --- a/arch/v850/kernel/rte_cb.c Sat Apr 12 14:44:06 2003 +++ b/arch/v850/kernel/rte_cb.c Sat Apr 12 14:44:06 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/rte_cb.c -- Midas lab RTE-CB series of evaluation boards * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -32,28 +32,11 @@ #endif -#ifdef CONFIG_ROM_KERNEL -/* Initialization for kernel in ROM. */ -static inline rom_kernel_init (void) -{ - /* If the kernel is in ROM, we have to copy any initialized data - from ROM into RAM. */ - extern unsigned long _data_load_start, _sdata, _edata; - register unsigned long *src = &_data_load_start; - register unsigned long *dst = &_sdata, *end = &_edata; - - while (dst != end) - *dst++ = *src++; -} -#endif /* CONFIG_ROM_KERNEL */ - -void __init mach_early_init (void) +void __init rte_cb_early_init (void) { nb85e_intc_disable_irqs (); -#if defined (CONFIG_ROM_KERNEL) - rom_kernel_init (); -#elif defined (CONFIG_RTE_CB_MULTI) +#ifdef CONFIG_RTE_CB_MULTI multi_init (); #endif } diff -Nru a/arch/v850/kernel/rte_cb_multi.c b/arch/v850/kernel/rte_cb_multi.c --- a/arch/v850/kernel/rte_cb_multi.c Sat Apr 12 14:44:07 2003 +++ b/arch/v850/kernel/rte_cb_multi.c Sat Apr 12 14:44:07 2003 @@ -16,22 +16,55 @@ #include +#define IRQ_ADDR(irq) (0x80 + (irq) * 0x10) + /* A table of which interrupt vectors to install, since blindly installing all of them makes the debugger stop working. This is a list of offsets in the interrupt vector area; each entry means to copy that particular 16-byte vector. An entry less than zero ends the table. */ static long multi_intv_install_table[] = { - 0x40, 0x50, /* trap vectors */ + /* Trap vectors */ + 0x40, 0x50, + #ifdef CONFIG_RTE_CB_MULTI_DBTRAP - 0x60, /* illegal insn / dbtrap */ + /* Illegal insn / dbtrap. These are used by multi, so only handle + them if configured to do so. */ + 0x60, #endif - /* Note -- illegal insn trap is used by the debugger. */ - 0xD0, 0xE0, 0xF0, /* GINT1 - GINT3 */ - 0x240, 0x250, 0x260, 0x270, /* timer D interrupts */ - 0x2D0, 0x2E0, 0x2F0, /* UART channel 0 */ - 0x310, 0x320, 0x330, /* UART channel 1 */ - 0x350, 0x360, 0x370, /* UART channel 2 */ + + /* GINT1 - GINT3 (note, not GINT0!) */ + IRQ_ADDR (IRQ_GINT(1)), + IRQ_ADDR (IRQ_GINT(2)), + IRQ_ADDR (IRQ_GINT(3)), + + /* Timer D interrupts (up to 4 timers) */ + IRQ_ADDR (IRQ_INTCMD(0)), +#if IRQ_INTCMD_NUM > 1 + IRQ_ADDR (IRQ_INTCMD(1)), +#if IRQ_INTCMD_NUM > 2 + IRQ_ADDR (IRQ_INTCMD(2)), +#if IRQ_INTCMD_NUM > 3 + IRQ_ADDR (IRQ_INTCMD(3)), +#endif +#endif +#endif + + /* UART interrupts (up to 3 channels) */ + IRQ_ADDR (IRQ_INTSER (0)), /* err */ + IRQ_ADDR (IRQ_INTSR (0)), /* rx */ + IRQ_ADDR (IRQ_INTST (0)), /* tx */ +#if IRQ_INTSR_NUM > 1 + IRQ_ADDR (IRQ_INTSER (1)), /* err */ + IRQ_ADDR (IRQ_INTSR (1)), /* rx */ + IRQ_ADDR (IRQ_INTST (1)), /* tx */ +#if IRQ_INTSR_NUM > 2 + IRQ_ADDR (IRQ_INTSER (2)), /* err */ + IRQ_ADDR (IRQ_INTSR (2)), /* rx */ + IRQ_ADDR (IRQ_INTST (2)), /* tx */ +#endif +#endif + -1 }; diff -Nru a/arch/v850/kernel/rte_ma1_cb.c b/arch/v850/kernel/rte_ma1_cb.c --- a/arch/v850/kernel/rte_ma1_cb.c Sat Apr 12 14:44:09 2003 +++ b/arch/v850/kernel/rte_ma1_cb.c Sat Apr 12 14:44:09 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/rte_ma1_cb.c -- Midas labs RTE-V850E/MA1-CB board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -31,6 +31,11 @@ #define RAM_END (SDRAM_ADDR + SDRAM_SIZE) +void __init mach_early_init (void) +{ + rte_cb_early_init (); +} + void __init mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len) { @@ -67,7 +72,7 @@ if (chan == 0) { /* Put P42 & P43 in I/O port mode. */ MA_PORT4_PMC &= ~0xC; - /* Make P42 and output, and P43 an input. */ + /* Make P42 an output, and P43 an input. */ MA_PORT4_PM = (MA_PORT4_PM & ~0xC) | 0x8; } diff -Nru a/arch/v850/kernel/rte_mb_a_pci.c b/arch/v850/kernel/rte_mb_a_pci.c --- a/arch/v850/kernel/rte_mb_a_pci.c Sat Apr 12 14:44:06 2003 +++ b/arch/v850/kernel/rte_mb_a_pci.c Sat Apr 12 14:44:06 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/mb_a_pci.c -- PCI support for Midas lab RTE-MOTHER-A board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -165,7 +165,6 @@ "PCI: PLX Technology PCI9080 HOST/PCI bridge\n"); MB_A_PCI_PCICR = 0x147; - MB_A_PCI_DMLBAM = 0x0; MB_A_PCI_PCIBAR0 = 0x007FFF00; MB_A_PCI_PCIBAR1 = 0x0000FF00; @@ -179,11 +178,28 @@ /* Reprogram the motherboard's IO/config address space, as we don't support the GCS7 address space that the - default uses. Note that we have to give the address - from the motherboard's point of view, which is - different than the CPU's. */ - MB_A_PCI_DMLBAI = MB_A_PCI_IO_ADDR - GCS5_ADDR; + default uses. */ + + /* Significant address bits used for decoding PCI GCS5 space + accessess. */ MB_A_PCI_DMRR = ~(MB_A_PCI_MEM_SIZE - 1); + + /* I don't understand this, but the SolutionGear example code + uses such an offset, and it doesn't work without it. XXX */ +#if GCS5_SIZE == 0x00800000 +#define GCS5_CFG_OFFS 0x00800000 +#else +#define GCS5_CFG_OFFS 0 +#endif + + /* Address bit values for matching. Note that we have to give + the address from the motherboard's point of view, which is + different than the CPU's. */ + /* PCI memory space. */ + MB_A_PCI_DMLBAM = GCS5_CFG_OFFS + 0x0; + /* PCI I/O space. */ + MB_A_PCI_DMLBAI = + GCS5_CFG_OFFS + (MB_A_PCI_IO_ADDR - GCS5_ADDR); mb_pci_bus = pci_scan_bus (0, &mb_pci_config_ops, 0); diff -Nru a/arch/v850/kernel/rte_nb85e_cb.c b/arch/v850/kernel/rte_nb85e_cb.c --- a/arch/v850/kernel/rte_nb85e_cb.c Sat Apr 12 14:44:10 2003 +++ b/arch/v850/kernel/rte_nb85e_cb.c Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/rte_nb85e_cb.c -- Midas labs RTE-V850E/NB85E-CB board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -26,10 +26,30 @@ #include "mach.h" +void __init mach_early_init (void) +{ + /* Configure caching; some possible settings: + + BHC = 0x0000, DCC = 0x0000 -- all caching disabled + BHC = 0x0040, DCC = 0x0000 -- SDRAM: icache only + BHC = 0x0080, DCC = 0x0C00 -- SDRAM: write-back dcache only + BHC = 0x00C0, DCC = 0x0C00 -- SDRAM: icache + write-back dcache + BHC = 0x00C0, DCC = 0x0800 -- SDRAM: icache + write-thru dcache + + We can only cache SDRAM (we can't use cache SRAM because it's in + the same memory region as the on-chip RAM and I/O space). + + Unfortunately, the dcache seems to be buggy, so we only use the + icache for now. */ + nb85e_cache_enable (0x0040 /* BHC */, 0x0000 /* DCC */); + + rte_cb_early_init (); +} + void __init mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len) { - /* We just use SDRAM here; the kernel itself is in SRAM. */ + /* We just use SDRAM here. */ *ram_start = SDRAM_ADDR; *ram_len = SDRAM_SIZE; } @@ -41,8 +61,10 @@ u32 root_fs_image_end = (u32)&_root_fs_image_end; /* Reserve the memory used by the root filesystem image if it's - in RAM. */ - if (root_fs_image_start >= RAM_START && root_fs_image_start < RAM_END) + in SDRAM. */ + if (root_fs_image_end > root_fs_image_start + && root_fs_image_start >= SDRAM_ADDR + && root_fs_image_start < (SDRAM_ADDR + SDRAM_SIZE)) reserve_bootmem (root_fs_image_start, root_fs_image_end - root_fs_image_start); } @@ -51,4 +73,25 @@ { tv->tv_sec = 0; tv->tv_nsec = 0; +} + +/* Called before configuring an on-chip UART. */ +void rte_nb85e_cb_uart_pre_configure (unsigned chan, + unsigned cflags, unsigned baud) +{ + /* The RTE-NB85E-CB connects some general-purpose I/O pins on the + CPU to the RTS/CTS lines the UART's serial connection, as follows: + P00 = CTS (in), P01 = DSR (in), P02 = RTS (out), P03 = DTR (out). */ + + TEG_PORT0_PM = 0x03; /* P00 and P01 inputs, P02 and P03 outputs */ + TEG_PORT0_IO = 0x03; /* Accept input */ + + /* Do pre-configuration for the actual UART. */ + teg_uart_pre_configure (chan, cflags, baud); +} + +void __init mach_init_irqs (void) +{ + teg_init_irqs (); + rte_cb_init_irqs (); } diff -Nru a/arch/v850/kernel/simcons.c b/arch/v850/kernel/simcons.c --- a/arch/v850/kernel/simcons.c Sat Apr 12 14:44:09 2003 +++ b/arch/v850/kernel/simcons.c Sat Apr 12 14:44:09 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/simcons.c -- Console I/O for GDB v850e simulator * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -19,6 +19,7 @@ #include #include +#include #include diff -Nru a/arch/v850/kernel/teg.c b/arch/v850/kernel/teg.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/kernel/teg.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,63 @@ +/* + * arch/v850/kernel/teg.c -- NB85E-TEG cpu chip + * + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file COPYING in the main directory of this + * archive for more details. + * + * Written by Miles Bader + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "mach.h" + +void __init mach_sched_init (struct irqaction *timer_action) +{ + /* Select timer interrupt instead of external pin. */ + TEG_ISS |= 0x1; + /* Start hardware timer. */ + nb85e_timer_d_configure (0, HZ); + /* Install timer interrupt handler. */ + setup_irq (IRQ_INTCMD(0), timer_action); +} + +static struct nb85e_intc_irq_init irq_inits[] = { + { "IRQ", 0, NUM_CPU_IRQS, 1, 7 }, + { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 }, + { "SER", IRQ_INTSER(0), IRQ_INTSER_NUM, 1, 3 }, + { "SR", IRQ_INTSR(0), IRQ_INTSR_NUM, 1, 4 }, + { "ST", IRQ_INTST(0), IRQ_INTST_NUM, 1, 5 }, + { 0 } +}; +#define NUM_IRQ_INITS ((sizeof irq_inits / sizeof irq_inits[0]) - 1) + +static struct hw_interrupt_type hw_itypes[NUM_IRQ_INITS]; + +/* Initialize MA chip interrupts. */ +void __init teg_init_irqs (void) +{ + nb85e_intc_init_irq_types (irq_inits, hw_itypes); +} + +/* Called before configuring an on-chip UART. */ +void teg_uart_pre_configure (unsigned chan, unsigned cflags, unsigned baud) +{ + /* Enable UART I/O pins instead of external interrupt pins, and + UART interrupts instead of external pin interrupts. */ + TEG_ISS |= 0x4E; +} diff -Nru a/arch/v850/rte_nb85e_cb-multi.ld b/arch/v850/rte_nb85e_cb-multi.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/rte_nb85e_cb-multi.ld Sat Apr 12 14:44:10 2003 @@ -0,0 +1,57 @@ +/* Linker script for the Midas labs RTE-NB85E-CB evaluation board + (CONFIG_RTE_CB_NB85E), with the Multi debugger ROM monitor . */ + +MEMORY { + /* 1MB of SRAM; we can't use the last 96KB, because it's used by + the monitor scratch-RAM. This memory is mirrored 4 times. */ + SRAM : ORIGIN = 0x03C00000, LENGTH = 0x000E8000 + /* Monitor scratch RAM; only the interrupt vectors should go here. */ + MRAM : ORIGIN = 0x03CE8000, LENGTH = 0x00018000 + /* 16MB of SDRAM. */ + SDRAM : ORIGIN = 0x01000000, LENGTH = 0x01000000 +} + +#ifdef CONFIG_RTE_CB_NB85E_KSRAM +# define KRAM SRAM +#else +# define KRAM SDRAM +#endif + +SECTIONS { + /* We can't use RAMK_KRAM_CONTENTS because that puts the whole + kernel in a single ELF segment, and the Multi debugger (which + we use to load the kernel) appears to have bizarre problems + dealing with it. */ + + .text : { + __kram_start = . ; + TEXT_CONTENTS + } > KRAM + + .data : { + DATA_CONTENTS + BSS_CONTENTS + RAMK_INIT_CONTENTS + __kram_end = . ; + BOOTMAP_CONTENTS + + /* The address at which the interrupt vectors are initially + loaded by the loader. We can't load the interrupt vectors + directly into their target location, because the monitor + ROM for the GHS Multi debugger barfs if we try. + Unfortunately, Multi also doesn't deal correctly with ELF + sections where the LMA and VMA differ (it just ignores the + LMA), so we can't use that feature to work around the + problem! What we do instead is just put the interrupt + vectors into a normal section, and have the + `mach_early_init' function for Midas boards do the + necessary copying and relocation at runtime (this section + basically only contains `jr' instructions, so it's not + that hard). */ + . = ALIGN (0x10) ; + __intv_load_start = . ; + INTV_CONTENTS + } > KRAM + + .root ALIGN (4096) : { ROOT_FS_CONTENTS } > SDRAM +} diff -Nru a/arch/v850/rte_nb85e_cb.ld b/arch/v850/rte_nb85e_cb.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/rte_nb85e_cb.ld Sat Apr 12 14:44:10 2003 @@ -0,0 +1,25 @@ +/* Linker script for the Midas labs RTE-NB85E-CB evaluation board + (CONFIG_RTE_CB_NB85E). */ + +MEMORY { + LOW : ORIGIN = 0x0, LENGTH = 0x00100000 + /* 1MB of SRAM; we can't use the last 96KB, because it's used by + the monitor scratch-RAM. This memory is mirrored 4 times. */ + SRAM : ORIGIN = 0x03C00000, LENGTH = 0x000E8000 + /* Monitor scratch RAM; only the interrupt vectors should go here. */ + MRAM : ORIGIN = 0x03CE8000, LENGTH = 0x00018000 + /* 16MB of SDRAM. */ + SDRAM : ORIGIN = 0x01000000, LENGTH = 0x01000000 +} + +#ifdef CONFIG_RTE_CB_NB85E_KSRAM +# define KRAM SRAM +#else +# define KRAM SDRAM +#endif + +SECTIONS { + .intv : { INTV_CONTENTS } > LOW + .sram : { RAMK_KRAM_CONTENTS } > KRAM + .root : { ROOT_FS_CONTENTS } > SDRAM +} diff -Nru a/arch/x86_64/kernel/suspend.c b/arch/x86_64/kernel/suspend.c --- a/arch/x86_64/kernel/suspend.c Sat Apr 12 14:44:08 2003 +++ b/arch/x86_64/kernel/suspend.c Sat Apr 12 14:44:08 2003 @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff -Nru a/drivers/acpi/bus.c b/drivers/acpi/bus.c --- a/drivers/acpi/bus.c Sat Apr 12 14:44:08 2003 +++ b/drivers/acpi/bus.c Sat Apr 12 14:44:08 2003 @@ -676,7 +676,7 @@ return_VALUE(-ENODEV); } -decl_subsys(acpi,NULL); +decl_subsys(acpi,NULL,NULL); static int __init acpi_init (void) { diff -Nru a/drivers/acpi/processor.c b/drivers/acpi/processor.c --- a/drivers/acpi/processor.c Sat Apr 12 14:44:09 2003 +++ b/drivers/acpi/processor.c Sat Apr 12 14:44:09 2003 @@ -36,13 +36,13 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include diff -Nru a/drivers/base/base.h b/drivers/base/base.h --- a/drivers/base/base.h Sat Apr 12 14:44:07 2003 +++ b/drivers/base/base.h Sat Apr 12 14:44:07 2003 @@ -18,13 +18,8 @@ #ifdef CONFIG_HOTPLUG -extern int dev_hotplug(struct device *dev, const char *action); extern int class_hotplug(struct device *dev, const char *action); #else -static inline int dev_hotplug(struct device *dev, const char *action) -{ - return 0; -} static inline int class_hotplug(struct device *dev, const char *action) { return 0; diff -Nru a/drivers/base/bus.c b/drivers/base/bus.c --- a/drivers/base/bus.c Sat Apr 12 14:44:06 2003 +++ b/drivers/base/bus.c Sat Apr 12 14:44:06 2003 @@ -132,7 +132,7 @@ }; -decl_subsys(bus,&ktype_bus); +decl_subsys(bus,&ktype_bus,NULL); /** * bus_for_each_dev - device iterator. diff -Nru a/drivers/base/class.c b/drivers/base/class.c --- a/drivers/base/class.c Sat Apr 12 14:44:10 2003 +++ b/drivers/base/class.c Sat Apr 12 14:44:10 2003 @@ -49,7 +49,9 @@ .sysfs_ops = &class_sysfs_ops, }; -static decl_subsys(class,&ktype_devclass); +/* Classes can't use the kobject hotplug logic, as + * they do not add new kobjects to the system */ +static decl_subsys(class,&ktype_devclass,NULL); static int devclass_dev_link(struct device_class * cls, struct device * dev) diff -Nru a/drivers/base/core.c b/drivers/base/core.c --- a/drivers/base/core.c Sat Apr 12 14:44:06 2003 +++ b/drivers/base/core.c Sat Apr 12 14:44:06 2003 @@ -23,13 +23,12 @@ DECLARE_MUTEX(device_sem); -#define to_dev(obj) container_of(obj,struct device,kobj) - /* * sysfs bindings for devices. */ +#define to_dev(obj) container_of(obj,struct device,kobj) #define to_dev_attr(_attr) container_of(_attr,struct device_attribute,attr) extern struct attribute * dev_default_attrs[]; @@ -86,11 +85,55 @@ .default_attrs = dev_default_attrs, }; + +static int dev_hotplug_filter(struct kset *kset, struct kobject *kobj) +{ + struct kobj_type *ktype = get_ktype(kobj); + + if (ktype == &ktype_device) { + struct device *dev = to_dev(kobj); + if (dev->bus) + return 1; + } + return 0; +} + +static char *dev_hotplug_name(struct kset *kset, struct kobject *kobj) +{ + struct device *dev = to_dev(kobj); + + return dev->bus->name; +} + +static int dev_hotplug(struct kset *kset, struct kobject *kobj, char **envp, + int num_envp, char *buffer, int buffer_size) +{ + struct device *dev = to_dev(kobj); + int retval = 0; + + if (dev->bus->hotplug) { + /* have the bus specific function add its stuff */ + retval = dev->bus->hotplug (dev, envp, num_envp, buffer, buffer_size); + if (retval) { + pr_debug ("%s - hotplug() returned %d\n", + __FUNCTION__, retval); + } + } + + return retval; +} + +static struct kset_hotplug_ops device_hotplug_ops = { + .filter = dev_hotplug_filter, + .name = dev_hotplug_name, + .hotplug = dev_hotplug, +}; + /** * device_subsys - structure to be registered with kobject core. */ -decl_subsys(devices,&ktype_device); +decl_subsys(devices, &ktype_device, &device_hotplug_ops); /** @@ -192,9 +235,6 @@ if (platform_notify) platform_notify(dev); - /* notify userspace of device entry */ - dev_hotplug(dev, "add"); - devclass_add_device(dev); register_done: if (error && parent) @@ -277,9 +317,6 @@ */ if (platform_notify_remove) platform_notify_remove(dev); - - /* notify userspace that this device is about to disappear */ - dev_hotplug (dev, "remove"); bus_remove_device(dev); diff -Nru a/drivers/base/firmware.c b/drivers/base/firmware.c --- a/drivers/base/firmware.c Sat Apr 12 14:44:08 2003 +++ b/drivers/base/firmware.c Sat Apr 12 14:44:08 2003 @@ -6,7 +6,7 @@ #include #include -static decl_subsys(firmware,NULL); +static decl_subsys(firmware,NULL,NULL); int firmware_register(struct subsystem * s) { diff -Nru a/drivers/base/hotplug.c b/drivers/base/hotplug.c --- a/drivers/base/hotplug.c Sat Apr 12 14:44:06 2003 +++ b/drivers/base/hotplug.c Sat Apr 12 14:44:06 2003 @@ -2,8 +2,8 @@ * drivers/base/hotplug.c - hotplug call code * * Copyright (c) 2000-2001 David Brownell - * Copyright (c) 2002 Greg Kroah-Hartman - * Copyright (c) 2002 IBM Corp. + * Copyright (c) 2002-2003 Greg Kroah-Hartman + * Copyright (c) 2002-2003 IBM Corp. * * Based off of drivers/usb/core/usb.c:call_agent(), which was * written by David Brownell. @@ -53,17 +53,6 @@ if (!hotplug_path [0]) return -ENODEV; - if (in_interrupt ()) { - pr_debug ("%s - in_interrupt, not allowed!", __FUNCTION__); - return -EIO; - } - - if (!current->fs->root) { - /* don't try to do anything unless we have a root partition */ - pr_debug ("%s - %s -- no FS yet\n", __FUNCTION__, action); - return -EIO; - } - envp = (char **) kmalloc (NUM_ENVP * sizeof (char *), GFP_KERNEL); if (!envp) return -ENOMEM; @@ -127,23 +116,6 @@ kfree (envp); return retval; } - - -/* - * dev_hotplug - called when any device is added or removed from a bus - */ -int dev_hotplug (struct device *dev, const char *action) -{ - pr_debug ("%s\n", __FUNCTION__); - if (!dev) - return -ENODEV; - - if (!dev->bus) - return -ENODEV; - - return do_hotplug (dev, dev->bus->name, action, dev->bus->hotplug); -} - /* * class_hotplug - called when a class is added or removed from a device diff -Nru a/drivers/block/Kconfig b/drivers/block/Kconfig --- a/drivers/block/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/block/Kconfig Sat Apr 12 14:44:06 2003 @@ -28,6 +28,13 @@ tristate "Atari floppy support" depends on ATARI +config BLK_DEV_FD98 + tristate "NEC PC-9800 floppy disk support" + depends on X86_PC9800 + ---help--- + If you want to use the floppy disk drive(s) of NEC PC-9801/PC-9821, + say Y. + config BLK_DEV_SWIM_IOP bool "Macintosh IIfx/Quadra 900/Quadra 950 floppy support (EXPERIMENTAL)" depends on MAC && EXPERIMENTAL diff -Nru a/drivers/block/Makefile b/drivers/block/Makefile --- a/drivers/block/Makefile Sat Apr 12 14:44:09 2003 +++ b/drivers/block/Makefile Sat Apr 12 14:44:09 2003 @@ -12,6 +12,7 @@ obj-$(CONFIG_MAC_FLOPPY) += swim3.o obj-$(CONFIG_BLK_DEV_FD) += floppy.o +obj-$(CONFIG_BLK_DEV_FD98) += floppy98.o obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o obj-$(CONFIG_BLK_DEV_SWIM_IOP) += swim_iop.o diff -Nru a/drivers/block/floppy.c b/drivers/block/floppy.c --- a/drivers/block/floppy.c Sat Apr 12 14:44:06 2003 +++ b/drivers/block/floppy.c Sat Apr 12 14:44:06 2003 @@ -4396,11 +4396,9 @@ return 0; } spin_unlock_irqrestore(&floppy_usage_lock, flags); - MOD_INC_USE_COUNT; if (fd_request_irq()) { DPRINT("Unable to grab IRQ%d for the floppy driver\n", FLOPPY_IRQ); - MOD_DEC_USE_COUNT; spin_lock_irqsave(&floppy_usage_lock, flags); usage_count--; spin_unlock_irqrestore(&floppy_usage_lock, flags); @@ -4410,7 +4408,6 @@ DPRINT("Unable to grab DMA%d for the floppy driver\n", FLOPPY_DMA); fd_free_irq(); - MOD_DEC_USE_COUNT; spin_lock_irqsave(&floppy_usage_lock, flags); usage_count--; spin_unlock_irqrestore(&floppy_usage_lock, flags); @@ -4459,7 +4456,6 @@ release_region(FDCS->address + 2, 4); release_region(FDCS->address + 7, 1); } - MOD_DEC_USE_COUNT; spin_lock_irqsave(&floppy_usage_lock, flags); usage_count--; spin_unlock_irqrestore(&floppy_usage_lock, flags); @@ -4527,7 +4523,6 @@ release_region(FDCS->address+7, 1); } fdc = old_fdc; - MOD_DEC_USE_COUNT; } diff -Nru a/drivers/block/floppy98.c b/drivers/block/floppy98.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/block/floppy98.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,4669 @@ +/* + * linux/drivers/block/floppy.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + * Copyright (C) 1993, 1994 Alain Knaff + * Copyright (C) 1998 Alan Cox + */ +/* + * 02.12.91 - Changed to static variables to indicate need for reset + * and recalibrate. This makes some things easier (output_byte reset + * checking etc), and means less interrupt jumping in case of errors, + * so the code is hopefully easier to understand. + */ + +/* + * This file is certainly a mess. I've tried my best to get it working, + * but I don't like programming floppies, and I have only one anyway. + * Urgel. I should check for more errors, and do more graceful error + * recovery. Seems there are problems with several drives. I've tried to + * correct them. No promises. + */ + +/* + * As with hd.c, all routines within this file can (and will) be called + * by interrupts, so extreme caution is needed. A hardware interrupt + * handler may not sleep, or a kernel panic will happen. Thus I cannot + * call "floppy-on" directly, but have to set a special timer interrupt + * etc. + */ + +/* + * 28.02.92 - made track-buffering routines, based on the routines written + * by entropy@wintermute.wpi.edu (Lawrence Foard). Linus. + */ + +/* + * Automatic floppy-detection and formatting written by Werner Almesberger + * (almesber@nessie.cs.id.ethz.ch), who also corrected some problems with + * the floppy-change signal detection. + */ + +/* + * 1992/7/22 -- Hennus Bergman: Added better error reporting, fixed + * FDC data overrun bug, added some preliminary stuff for vertical + * recording support. + * + * 1992/9/17: Added DMA allocation & DMA functions. -- hhb. + * + * TODO: Errors are still not counted properly. + */ + +/* 1992/9/20 + * Modifications for ``Sector Shifting'' by Rob Hooft (hooft@chem.ruu.nl) + * modeled after the freeware MS-DOS program fdformat/88 V1.8 by + * Christoph H. Hochst\"atter. + * I have fixed the shift values to the ones I always use. Maybe a new + * ioctl() should be created to be able to modify them. + * There is a bug in the driver that makes it impossible to format a + * floppy as the first thing after bootup. + */ + +/* + * 1993/4/29 -- Linus -- cleaned up the timer handling in the kernel, and + * this helped the floppy driver as well. Much cleaner, and still seems to + * work. + */ + +/* 1994/6/24 --bbroad-- added the floppy table entries and made + * minor modifications to allow 2.88 floppies to be run. + */ + +/* 1994/7/13 -- Paul Vojta -- modified the probing code to allow three or more + * disk types. + */ + +/* + * 1994/8/8 -- Alain Knaff -- Switched to fdpatch driver: Support for bigger + * format bug fixes, but unfortunately some new bugs too... + */ + +/* 1994/9/17 -- Koen Holtman -- added logging of physical floppy write + * errors to allow safe writing by specialized programs. + */ + +/* 1995/4/24 -- Dan Fandrich -- added support for Commodore 1581 3.5" disks + * by defining bit 1 of the "stretch" parameter to mean put sectors on the + * opposite side of the disk, leaving the sector IDs alone (i.e. Commodore's + * drives are "upside-down"). + */ + +/* + * 1995/8/26 -- Andreas Busse -- added Mips support. + */ + +/* + * 1995/10/18 -- Ralf Baechle -- Portability cleanup; move machine dependent + * features to asm/floppy.h. + */ + +/* + * 1998/05/07 -- Russell King -- More portability cleanups; moved definition of + * interrupt and dma channel to asm/floppy.h. Cleaned up some formatting & + * use of '0' for NULL. + */ + +/* + * 1998/06/07 -- Alan Cox -- Merged the 2.0.34 fixes for resource allocation + * failures. + */ + +/* + * 1998/09/20 -- David Weinehall -- Added slow-down code for buggy PS/2-drives. + */ + +/* + * 1999/01/19 -- N.Fujita & Linux/98 Project -- Added code for NEC PC-9800 + * series. + */ + +/* + * 1999/08/13 -- Paul Slootman -- floppy stopped working on Alpha after 24 + * days, 6 hours, 32 minutes and 32 seconds (i.e. MAXINT jiffies; ints were + * being used to store jiffies, which are unsigned longs). + */ + +/* + * 2000/08/28 -- Arnaldo Carvalho de Melo + * - get rid of check_region + * - s/suser/capable/ + */ + +/* + * 2001/08/26 -- Paul Gortmaker - fix insmod oops on machines with no + * floppy controller (lingering task on list after module is gone... boom.) + */ + +/* + * 2002/02/07 -- Anton Altaparmakov - Fix io ports reservation to correct range + * (0x3f2-0x3f5, 0x3f7). This fix is a bit of a hack but the proper fix + * requires many non-obvious changes in arch dependent code. + */ + +/* + * 2002/10/12 -- Osamu Tomita + * split code from floppy.c + * support NEC PC-9800 only + */ + +#define FLOPPY_SANITY_CHECK +#undef FLOPPY_SILENT_DCL_CLEAR + +/* +#define PC9800_DEBUG_FLOPPY +#define PC9800_DEBUG_FLOPPY2 +*/ + +#define REALLY_SLOW_IO + +#define DEBUGT 2 +#define DCL_DEBUG /* debug disk change line */ + +/* do print messages for unexpected interrupts */ +static int print_unex=1; +#include +#include +#include +#include +#include +#include +#include +#define FDPATCHES +#include + +/* + * 1998/1/21 -- Richard Gooch -- devfs support + */ + + +#include +#define FLOPPY98_MOTOR_MASK 0x08 + +#define FDPATCHES +#include +#define FD98_STATUS (0 + FD_IOPORT ) +#define FD98_DATA (2 + FD_IOPORT ) +#define FD_MODE (4 + FD_IOPORT ) +#define FD_MODE_CHANGE 0xbe +#define FD_EMODE_CHANGE 0x4be + +#include +#include +#include +#include +#include +#include +#include +#include /* CMOS defines */ +#include +#include +#include +#include +#include +#include /* for invalidate_buffers() */ + +/* + * PS/2 floppies have much slower step rates than regular floppies. + * It's been recommended that take about 1/4 of the default speed + * in some more extreme cases. + */ +static int slow_floppy; + +#include +#include +#include +#include +#include + +#ifndef DEFAULT_FLOPPY_IRQ +# define DEFAULT_FLOPPY_IRQ 11 +#endif +#ifndef DEFAULT_FLOPPY_DMA +# define DEFAULT_FLOPPY_DMA 2 +#endif + +static int FLOPPY_IRQ=DEFAULT_FLOPPY_IRQ; +static int FLOPPY_DMA=DEFAULT_FLOPPY_DMA; +static int can_use_virtual_dma=2; +static int auto_detect_mode = 0; +static int retry_auto_detect = 0; +#define FD_AFTER_RESET_DELAY 1000 + +/* ======= + * can use virtual DMA: + * 0 = use of virtual DMA disallowed by config + * 1 = use of virtual DMA prescribed by config + * 2 = no virtual DMA preference configured. By default try hard DMA, + * but fall back on virtual DMA when not enough memory available + */ + +static int use_virtual_dma; +/* ======= + * use virtual DMA + * 0 using hard DMA + * 1 using virtual DMA + * This variable is set to virtual when a DMA mem problem arises, and + * reset back in floppy_grab_irq_and_dma. + * It is not safe to reset it in other circumstances, because the floppy + * driver may have several buffers in use at once, and we do currently not + * record each buffers capabilities + */ + +static spinlock_t floppy_lock = SPIN_LOCK_UNLOCKED; + +static unsigned short virtual_dma_port=0x3f0; +void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs); +static int set_mode(char mask, char data); +static void register_devfs_entries (int drive) __init; + +#define K_64 0x10000 /* 64KB */ + +/* the following is the mask of allowed drives. By default units 2 and + * 3 of both floppy controllers are disabled, because switching on the + * motor of these drives causes system hangs on some PCI computers. drive + * 0 is the low bit (0x1), and drive 7 is the high bit (0x80). Bits are on if + * a drive is allowed. + * + * NOTE: This must come before we include the arch floppy header because + * some ports reference this variable from there. -DaveM + */ + +static int allowed_drive_mask = 0x0f; + +#include + +static int irqdma_allocated; + +#define LOCAL_END_REQUEST +#define DEVICE_NAME "floppy" + +#include +#include +#include /* for the compatibility eject ioctl */ +#include + +static struct request *current_req; +static struct request_queue floppy_queue; + +#ifndef fd_get_dma_residue +#define fd_get_dma_residue() get_dma_residue(FLOPPY_DMA) +#endif + +/* Dma Memory related stuff */ + +#ifndef fd_dma_mem_free +#define fd_dma_mem_free(addr, size) free_pages(addr, get_order(size)) +#endif + +#ifndef fd_dma_mem_alloc +#define fd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL,get_order(size)) +#endif + +static inline void fallback_on_nodma_alloc(char **addr, size_t l) +{ +#ifdef FLOPPY_CAN_FALLBACK_ON_NODMA + if (*addr) + return; /* we have the memory */ + if (can_use_virtual_dma != 2) + return; /* no fallback allowed */ + printk("DMA memory shortage. Temporarily falling back on virtual DMA\n"); + *addr = (char *) nodma_mem_alloc(l); +#else + return; +#endif +} + +/* End dma memory related stuff */ + +static unsigned long fake_change; +static int initialising=1; + +static inline int TYPE(kdev_t x) { + return (minor(x)>>2) & 0x1f; +} +static inline int DRIVE(kdev_t x) { + return (minor(x)&0x03) | ((minor(x)&0x80) >> 5); +} +#define ITYPE(x) (((x)>>2) & 0x1f) +#define TOMINOR(x) ((x & 3) | ((x & 4) << 5)) +#define UNIT(x) ((x) & 0x03) /* drive on fdc */ +#define FDC(x) (((x) & 0x04) >> 2) /* fdc of drive */ +#define REVDRIVE(fdc, unit) ((unit) + ((fdc) << 2)) + /* reverse mapping from unit and fdc to drive */ +#define DP (&drive_params[current_drive]) +#define DRS (&drive_state[current_drive]) +#define DRWE (&write_errors[current_drive]) +#define FDCS (&fdc_state[fdc]) +#define CLEARF(x) (clear_bit(x##_BIT, &DRS->flags)) +#define SETF(x) (set_bit(x##_BIT, &DRS->flags)) +#define TESTF(x) (test_bit(x##_BIT, &DRS->flags)) + +#define UDP (&drive_params[drive]) +#define UDRS (&drive_state[drive]) +#define UDRWE (&write_errors[drive]) +#define UFDCS (&fdc_state[FDC(drive)]) +#define UCLEARF(x) (clear_bit(x##_BIT, &UDRS->flags)) +#define USETF(x) (set_bit(x##_BIT, &UDRS->flags)) +#define UTESTF(x) (test_bit(x##_BIT, &UDRS->flags)) + +#define DPRINT(format, args...) printk(DEVICE_NAME "%d: " format, current_drive , ## args) + +#define PH_HEAD(floppy,head) (((((floppy)->stretch & 2) >>1) ^ head) << 2) +#define STRETCH(floppy) ((floppy)->stretch & FD_STRETCH) + +#define CLEARSTRUCT(x) memset((x), 0, sizeof(*(x))) + +/* read/write */ +#define COMMAND raw_cmd->cmd[0] +#define DR_SELECT raw_cmd->cmd[1] +#define TRACK raw_cmd->cmd[2] +#define HEAD raw_cmd->cmd[3] +#define SECTOR raw_cmd->cmd[4] +#define SIZECODE raw_cmd->cmd[5] +#define SECT_PER_TRACK raw_cmd->cmd[6] +#define GAP raw_cmd->cmd[7] +#define SIZECODE2 raw_cmd->cmd[8] +#define NR_RW 9 + +/* format */ +#define F_SIZECODE raw_cmd->cmd[2] +#define F_SECT_PER_TRACK raw_cmd->cmd[3] +#define F_GAP raw_cmd->cmd[4] +#define F_FILL raw_cmd->cmd[5] +#define NR_F 6 + +/* + * Maximum disk size (in kilobytes). This default is used whenever the + * current disk size is unknown. + * [Now it is rather a minimum] + */ +#define MAX_DISK_SIZE 4 /* 3984*/ + + +/* + * globals used by 'result()' + */ +#define MAX_REPLIES 16 +static unsigned char reply_buffer[MAX_REPLIES]; +static int inr; /* size of reply buffer, when called from interrupt */ +#define ST0 (reply_buffer[0]) +#define ST1 (reply_buffer[1]) +#define ST2 (reply_buffer[2]) +#define ST3 (reply_buffer[0]) /* result of GETSTATUS */ +#define R_TRACK (reply_buffer[3]) +#define R_HEAD (reply_buffer[4]) +#define R_SECTOR (reply_buffer[5]) +#define R_SIZECODE (reply_buffer[6]) + +#define SEL_DLY (2*HZ/100) + +/* + * this struct defines the different floppy drive types. + */ +static struct { + struct floppy_drive_params params; + const char *name; /* name printed while booting */ +} default_drive_params[]= { +/* NOTE: the time values in jiffies should be in msec! + CMOS drive type + | Maximum data rate supported by drive type + | | Head load time, msec + | | | Head unload time, msec (not used) + | | | | Step rate interval, usec + | | | | | Time needed for spinup time (jiffies) + | | | | | | Timeout for spinning down (jiffies) + | | | | | | | Spindown offset (where disk stops) + | | | | | | | | Select delay + | | | | | | | | | RPS + | | | | | | | | | | Max number of tracks + | | | | | | | | | | | Interrupt timeout + | | | | | | | | | | | | Max nonintlv. sectors + | | | | | | | | | | | | | -Max Errors- flags */ +{{0, 500, 16, 16, 8000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 80, 3*HZ, 20, {3,1,2,0,2}, 0, + 0, { 7, 4, 8, 2, 1, 5, 3,10}, 3*HZ/2, 0 }, "unknown" }, + +{{1, 300, 16, 16, 8000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 40, 3*HZ, 17, {3,1,2,0,2}, 0, + 0, { 1, 0, 0, 0, 0, 0, 0, 0}, 3*HZ/2, 1 }, "360K PC" }, /*5 1/4 360 KB PC*/ + +{{2, 500, 16, 16, 6000, 4*HZ/10, 3*HZ, 14, SEL_DLY, 6, 83, 3*HZ, 17, {3,1,2,0,2}, 0, + 0, { 2, 6, 4, 0, 0, 0, 0, 0}, 3*HZ/2, 2 }, "1.2M" }, /*5 1/4 HD AT*/ + +{{3, 250, 16, 16, 3000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 83, 3*HZ, 20, {3,1,2,0,2}, 0, + 0, { 4, 6, 0, 0, 0, 0, 0, 0}, 3*HZ/2, 4 }, "720k" }, /*3 1/2 DD*/ + +{{4, 500, 16, 16, 4000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 20, {3,1,2,0,2}, 0, + 0, { 7,10, 2, 4, 6, 0, 0, 0}, 3*HZ/2, 7 }, "1.44M" }, /*3 1/2 HD*/ + +{{5, 1000, 15, 8, 3000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 40, {3,1,2,0,2}, 0, + 0, { 7, 8, 4,25,28,22,31,21}, 3*HZ/2, 8 }, "2.88M AMI BIOS" }, /*3 1/2 ED*/ + +{{6, 1000, 15, 8, 3000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 40, {3,1,2,0,2}, 0, + 0, { 7, 8, 4,25,28,22,31,21}, 3*HZ/2, 8 }, "2.88M" } /*3 1/2 ED*/ +/* | --autodetected formats--- | | | + * read_track | | Name printed when booting + * | Native format + * Frequency of disk change checks */ +}; + +static struct floppy_drive_params drive_params[N_DRIVE]; +static struct floppy_drive_struct drive_state[N_DRIVE]; +static struct floppy_write_errors write_errors[N_DRIVE]; +static struct timer_list motor_off_timer[N_DRIVE]; +static struct gendisk *disks[N_DRIVE]; +static struct floppy_raw_cmd *raw_cmd, default_raw_cmd; + +/* + * This struct defines the different floppy types. + * + * Bit 0 of 'stretch' tells if the tracks need to be doubled for some + * types (e.g. 360kB diskette in 1.2MB drive, etc.). Bit 1 of 'stretch' + * tells if the disk is in Commodore 1581 format, which means side 0 sectors + * are located on side 1 of the disk but with a side 0 ID, and vice-versa. + * This is the same as the Sharp MZ-80 5.25" CP/M disk format, except that the + * 1581's logical side 0 is on physical side 1, whereas the Sharp's logical + * side 0 is on physical side 0 (but with the misnamed sector IDs). + * 'stretch' should probably be renamed to something more general, like + * 'options'. Other parameters should be self-explanatory (see also + * setfdprm(8)). + */ +/* + Size + | Sectors per track + | | Head + | | | Tracks + | | | | Stretch + | | | | | Gap 1 size + | | | | | | Data rate, | 0x40 for perp + | | | | | | | Spec1 (stepping rate, head unload + | | | | | | | | /fmt gap (gap2) */ +static struct floppy_struct floppy_type[32] = { + { 0, 0,0, 0,0,0x00,0x00,0x00,0x00,NULL }, /* 0 no testing */ +#if 0 + { 720, 9,2,40,0,0x2A,0x02,0xDF,0x50,"d360" }, /* 1 360KB PC */ +#else + { 2464,16,2,77,0,0x35,0x48,0xDF,0x74,"d360" }, /* 1 1.25MB 98 */ +#endif + { 2400,15,2,80,0,0x1B,0x00,0xDF,0x54,"h1200" }, /* 2 1.2MB AT */ + { 720, 9,1,80,0,0x2A,0x02,0xDF,0x50,"D360" }, /* 3 360KB SS 3.5" */ + { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"D720" }, /* 4 720KB 3.5" */ + { 720, 9,2,40,1,0x23,0x01,0xDF,0x50,"h360" }, /* 5 360KB AT */ + { 1440, 9,2,80,0,0x23,0x01,0xDF,0x50,"h720" }, /* 6 720KB AT */ + { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"H1440" }, /* 7 1.44MB 3.5" */ + { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,"E2880" }, /* 8 2.88MB 3.5" */ + { 6240,39,2,80,0,0x1B,0x43,0xAF,0x28,"E3120" }, /* 9 3.12MB 3.5" */ + + { 2880,18,2,80,0,0x25,0x00,0xDF,0x02,"h1440" }, /* 10 1.44MB 5.25" */ + { 3360,21,2,80,0,0x1C,0x00,0xCF,0x0C,"H1680" }, /* 11 1.68MB 3.5" */ + { 820,10,2,41,1,0x25,0x01,0xDF,0x2E,"h410" }, /* 12 410KB 5.25" */ + { 1640,10,2,82,0,0x25,0x02,0xDF,0x2E,"H820" }, /* 13 820KB 3.5" */ + { 2952,18,2,82,0,0x25,0x00,0xDF,0x02,"h1476" }, /* 14 1.48MB 5.25" */ + { 3444,21,2,82,0,0x25,0x00,0xDF,0x0C,"H1722" }, /* 15 1.72MB 3.5" */ + { 840,10,2,42,1,0x25,0x01,0xDF,0x2E,"h420" }, /* 16 420KB 5.25" */ + { 1660,10,2,83,0,0x25,0x02,0xDF,0x2E,"H830" }, /* 17 830KB 3.5" */ + { 2988,18,2,83,0,0x25,0x00,0xDF,0x02,"h1494" }, /* 18 1.49MB 5.25" */ + { 3486,21,2,83,0,0x25,0x00,0xDF,0x0C,"H1743" }, /* 19 1.74 MB 3.5" */ + + { 1760,11,2,80,0,0x1C,0x09,0xCF,0x00,"h880" }, /* 20 880KB 5.25" */ + { 2080,13,2,80,0,0x1C,0x01,0xCF,0x00,"D1040" }, /* 21 1.04MB 3.5" */ + { 2240,14,2,80,0,0x1C,0x19,0xCF,0x00,"D1120" }, /* 22 1.12MB 3.5" */ + { 3200,20,2,80,0,0x1C,0x20,0xCF,0x2C,"h1600" }, /* 23 1.6MB 5.25" */ + { 3520,22,2,80,0,0x1C,0x08,0xCF,0x2e,"H1760" }, /* 24 1.76MB 3.5" */ + { 3840,24,2,80,0,0x1C,0x20,0xCF,0x00,"H1920" }, /* 25 1.92MB 3.5" */ + { 6400,40,2,80,0,0x25,0x5B,0xCF,0x00,"E3200" }, /* 26 3.20MB 3.5" */ + { 7040,44,2,80,0,0x25,0x5B,0xCF,0x00,"E3520" }, /* 27 3.52MB 3.5" */ + { 7680,48,2,80,0,0x25,0x63,0xCF,0x00,"E3840" }, /* 28 3.84MB 3.5" */ + + { 3680,23,2,80,0,0x1C,0x10,0xCF,0x00,"H1840" }, /* 29 1.84MB 3.5" */ + { 1600,10,2,80,0,0x25,0x02,0xDF,0x2E,"D800" }, /* 30 800KB 3.5" */ + { 3200,20,2,80,0,0x1C,0x00,0xCF,0x2C,"H1600" }, /* 31 1.6MB 3.5" */ +}; + +#define NUMBER(x) (sizeof(x) / sizeof(*(x))) +#define SECTSIZE (_FD_SECTSIZE(*floppy)) + +/* Auto-detection: Disk type used until the next media change occurs. */ +static struct floppy_struct *current_type[N_DRIVE]; + +/* + * User-provided type information. current_type points to + * the respective entry of this array. + */ +static struct floppy_struct user_params[N_DRIVE]; + +static sector_t floppy_sizes[256]; + +/* + * The driver is trying to determine the correct media format + * while probing is set. rw_interrupt() clears it after a + * successful access. + */ +static int probing; + +/* Synchronization of FDC access. */ +#define FD_COMMAND_NONE -1 +#define FD_COMMAND_ERROR 2 +#define FD_COMMAND_OKAY 3 + +static volatile int command_status = FD_COMMAND_NONE; +static unsigned long fdc_busy; +static DECLARE_WAIT_QUEUE_HEAD(fdc_wait); +static DECLARE_WAIT_QUEUE_HEAD(command_done); + +#define NO_SIGNAL (!interruptible || !signal_pending(current)) +#define CALL(x) if ((x) == -EINTR) return -EINTR +#define ECALL(x) if ((ret = (x))) return ret; +#define _WAIT(x,i) CALL(ret=wait_til_done((x),i)) +#define WAIT(x) _WAIT((x),interruptible) +#define IWAIT(x) _WAIT((x),1) + +/* Errors during formatting are counted here. */ +static int format_errors; + +/* Format request descriptor. */ +static struct format_descr format_req; + +/* + * Rate is 0 for 500kb/s, 1 for 300kbps, 2 for 250kbps + * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc), + * H is head unload time (1=16ms, 2=32ms, etc) + */ + +/* + * Track buffer + * Because these are written to by the DMA controller, they must + * not contain a 64k byte boundary crossing, or data will be + * corrupted/lost. + */ +static char *floppy_track_buffer; +static int max_buffer_sectors; + +static int *errors; +typedef void (*done_f)(int); +static struct cont_t { + void (*interrupt)(void); /* this is called after the interrupt of the + * main command */ + void (*redo)(void); /* this is called to retry the operation */ + void (*error)(void); /* this is called to tally an error */ + done_f done; /* this is called to say if the operation has + * succeeded/failed */ +} *cont; + +static void floppy_ready(void); +static void floppy_start(void); +static void process_fd_request(void); +static void recalibrate_floppy(void); +static void floppy_shutdown(unsigned long); + +static int floppy_grab_irq_and_dma(void); +static void floppy_release_irq_and_dma(void); + +/* + * The "reset" variable should be tested whenever an interrupt is scheduled, + * after the commands have been sent. This is to ensure that the driver doesn't + * get wedged when the interrupt doesn't come because of a failed command. + * reset doesn't need to be tested before sending commands, because + * output_byte is automatically disabled when reset is set. + */ +#define CHECK_RESET { if (FDCS->reset){ reset_fdc(); return; } } +static void reset_fdc(void); + +/* + * These are global variables, as that's the easiest way to give + * information to interrupts. They are the data used for the current + * request. + */ +#define NO_TRACK -1 +#define NEED_1_RECAL -2 +#define NEED_2_RECAL -3 + +static int usage_count; + +/* buffer related variables */ +static int buffer_track = -1; +static int buffer_drive = -1; +static int buffer_min = -1; +static int buffer_max = -1; + +/* fdc related variables, should end up in a struct */ +static struct floppy_fdc_state fdc_state[N_FDC]; +static int fdc; /* current fdc */ + +static struct floppy_struct *_floppy = floppy_type; +static unsigned char current_drive; +static long current_count_sectors; +static unsigned char fsector_t; /* sector in track */ +static unsigned char in_sector_offset; /* offset within physical sector, + * expressed in units of 512 bytes */ + +#ifndef fd_eject +static inline int fd_eject(int drive) +{ + return -EINVAL; +} +#endif + +#ifdef DEBUGT +static long unsigned debugtimer; +#endif + +/* + * Debugging + * ========= + */ +static inline void set_debugt(void) +{ +#ifdef DEBUGT + debugtimer = jiffies; +#endif +} + +static inline void debugt(const char *message) +{ +#ifdef DEBUGT + if (DP->flags & DEBUGT) + printk("%s dtime=%lu\n", message, jiffies-debugtimer); +#endif +} + +typedef void (*timeout_fn)(unsigned long); +static struct timer_list fd_timeout = TIMER_INITIALIZER(floppy_shutdown, 0, 0); + +static const char *timeout_message; + +#ifdef FLOPPY_SANITY_CHECK +static void is_alive(const char *message) +{ + /* this routine checks whether the floppy driver is "alive" */ + if (fdc_busy && command_status < 2 && !timer_pending(&fd_timeout)){ + DPRINT("timeout handler died: %s\n",message); + } +} +#endif + +static void (*do_floppy)(void) = NULL; + +#ifdef FLOPPY_SANITY_CHECK + +#define OLOGSIZE 20 + +static void (*lasthandler)(void); +static unsigned long interruptjiffies; +static unsigned long resultjiffies; +static int resultsize; +static unsigned long lastredo; + +static struct output_log { + unsigned char data; + unsigned char status; + unsigned long jiffies; +} output_log[OLOGSIZE]; + +static int output_log_pos; +#endif + +#define current_reqD -1 +#define MAXTIMEOUT -2 + +static void reschedule_timeout(int drive, const char *message, int marg) +{ + if (drive == current_reqD) + drive = current_drive; + del_timer(&fd_timeout); + if (drive < 0 || drive > N_DRIVE) { + fd_timeout.expires = jiffies + 20UL*HZ; + drive=0; + } else + fd_timeout.expires = jiffies + UDP->timeout; + add_timer(&fd_timeout); + if (UDP->flags & FD_DEBUG){ + DPRINT("reschedule timeout "); + printk(message, marg); + printk("\n"); + } + timeout_message = message; +} + +static int maximum(int a, int b) +{ + if (a > b) + return a; + else + return b; +} +#define INFBOUND(a,b) (a)=maximum((a),(b)); + +static int minimum(int a, int b) +{ + if (a < b) + return a; + else + return b; +} +#define SUPBOUND(a,b) (a)=minimum((a),(b)); + + +/* + * Bottom half floppy driver. + * ========================== + * + * This part of the file contains the code talking directly to the hardware, + * and also the main service loop (seek-configure-spinup-command) + */ + +/* + * disk change. + * This routine is responsible for maintaining the FD_DISK_CHANGE flag, + * and the last_checked date. + * + * last_checked is the date of the last check which showed 'no disk change' + * FD_DISK_CHANGE is set under two conditions: + * 1. The floppy has been changed after some i/o to that floppy already + * took place. + * 2. No floppy disk is in the drive. This is done in order to ensure that + * requests are quickly flushed in case there is no disk in the drive. It + * follows that FD_DISK_CHANGE can only be cleared if there is a disk in + * the drive. + * + * For 1., maxblock is observed. Maxblock is 0 if no i/o has taken place yet. + * For 2., FD_DISK_NEWCHANGE is watched. FD_DISK_NEWCHANGE is cleared on + * each seek. If a disk is present, the disk change line should also be + * cleared on each seek. Thus, if FD_DISK_NEWCHANGE is clear, but the disk + * change line is set, this means either that no disk is in the drive, or + * that it has been removed since the last seek. + * + * This means that we really have a third possibility too: + * The floppy has been changed after the last seek. + */ + +static int disk_change(int drive) +{ + return UTESTF(FD_DISK_CHANGED); +} + +static int set_mode(char mask, char data) +{ + register unsigned char newdor, olddor; + + olddor = FDCS->dor; + newdor = (olddor & mask) | data; + if (newdor != olddor) { + FDCS->dor = newdor; + fd_outb(newdor, FD_MODE); + } + + if (newdor & FLOPPY98_MOTOR_MASK) + floppy_grab_irq_and_dma(); + + if (olddor & FLOPPY98_MOTOR_MASK) + floppy_release_irq_and_dma(); + + return olddor; +} + +static void twaddle(void) +{ + if (DP->select_delay) + return; + + fd_outb(FDCS->dor & 0xf7, FD_MODE); + fd_outb(FDCS->dor, FD_MODE); + DRS->select_date = jiffies; +} + +/* reset all driver information about the current fdc. This is needed after + * a reset, and after a raw command. */ +static void reset_fdc_info(int mode) +{ + int drive; + + FDCS->spec1 = FDCS->spec2 = -1; + FDCS->need_configure = 1; + FDCS->perp_mode = 1; + FDCS->rawcmd = 0; + for (drive = 0; drive < N_DRIVE; drive++) + if (FDC(drive) == fdc && + (mode || UDRS->track != NEED_1_RECAL)) + UDRS->track = NEED_2_RECAL; +} + +/* selects the fdc and drive, and enables the fdc's input/dma. */ +static void set_fdc(int drive) +{ + fdc = 0; + current_drive = drive; + set_mode(~0, 0x10); + if (FDCS->rawcmd == 2) + reset_fdc_info(1); + + if (fd_inb(FD98_STATUS) != STATUS_READY) + FDCS->reset = 1; +} + +/* locks the driver */ +static int _lock_fdc(int drive, int interruptible, int line) +{ + if (!usage_count){ + printk(KERN_ERR "Trying to lock fdc while usage count=0 at line %d\n", line); + return -1; + } + if(floppy_grab_irq_and_dma()==-1) + return -EBUSY; + + if (test_and_set_bit(0, &fdc_busy)) { + DECLARE_WAITQUEUE(wait, current); + add_wait_queue(&fdc_wait, &wait); + + for (;;) { + set_current_state(TASK_INTERRUPTIBLE); + + if (!test_and_set_bit(0, &fdc_busy)) + break; + + schedule(); + + if (!NO_SIGNAL) { + remove_wait_queue(&fdc_wait, &wait); + return -EINTR; + } + } + + set_current_state(TASK_RUNNING); + remove_wait_queue(&fdc_wait, &wait); + } + command_status = FD_COMMAND_NONE; + + reschedule_timeout(drive, "lock fdc", 0); + set_fdc(drive); + return 0; +} + +#define lock_fdc(drive,interruptible) _lock_fdc(drive,interruptible, __LINE__) + +#define LOCK_FDC(drive,interruptible) \ +if (lock_fdc(drive,interruptible)) return -EINTR; + + +/* unlocks the driver */ +static inline void unlock_fdc(void) +{ + raw_cmd = 0; + if (!fdc_busy) + DPRINT("FDC access conflict!\n"); + + if (do_floppy) + DPRINT("device interrupt still active at FDC release: %p!\n", + do_floppy); + command_status = FD_COMMAND_NONE; + del_timer(&fd_timeout); + cont = NULL; + clear_bit(0, &fdc_busy); + floppy_release_irq_and_dma(); + wake_up(&fdc_wait); +} + +#ifndef CONFIG_PC9800_MOTOR_OFF /* tomita */ + +/* switches the motor off after a given timeout */ +static void motor_off_callback(unsigned long nr) +{ + printk(KERN_DEBUG "fdc%lu: turn off motor\n", nr); +} + +/* schedules motor off */ +static void floppy_off(unsigned int drive) +{ +} + +#else /* CONFIG_PC9800_MOTOR_OFF */ + +/* switches the motor off after a given timeout */ +static void motor_off_callback(unsigned long fdc) +{ + printk(KERN_DEBUG "fdc%u: turn off motor\n", (unsigned int) fdc); + + fd_outb(0, FD_MODE); /* MTON = 0 */ +} + +static struct timer_list motor_off_timer[N_FDC] = { + { data: 0, function: motor_off_callback }, +#if N_FDC > 1 + { data: 1, function: motor_off_callback }, +#endif +#if N_FDC > 2 +# error "N_FDC > 2; please fix initializer for motor_off_timer[]" +#endif +}; + +/* schedules motor off */ +static void floppy_off(unsigned int drive) +{ + unsigned long volatile delta; + register int fdc = FDC(drive); + + if (!(FDCS->dor & (0x10 << UNIT(drive)))) + return; + + del_timer(motor_off_timer + fdc); + +#if 0 + /* make spindle stop in a position which minimizes spinup time + * next time */ + if (UDP->rps){ + delta = jiffies - UDRS->first_read_date + HZ - + UDP->spindown_offset; + delta = ((delta * UDP->rps) % HZ) / UDP->rps; + motor_off_timer[drive].expires = jiffies + UDP->spindown - delta; + } +#else + if (UDP->rps) + motor_off_timer[drive].expires = jiffies + UDP->spindown; +#endif + + add_timer(motor_off_timer + fdc); +} + +#endif /* CONFIG_PC9800_MOTOR_OFF */ + +/* + * cycle through all N_DRIVE floppy drives, for disk change testing. + * stopping at current drive. This is done before any long operation, to + * be sure to have up to date disk change information. + */ +static void scandrives(void) +{ + int i, drive, saved_drive; + + if (DP->select_delay) + return; + + saved_drive = current_drive; + for (i=0; i < N_DRIVE; i++){ + drive = (saved_drive + i + 1) % N_DRIVE; + if (UDRS->fd_ref == 0 || UDP->select_delay != 0) + continue; /* skip closed drives */ + set_fdc(drive); + } + set_fdc(saved_drive); +} + +static void empty(void) +{ +} + +static DECLARE_WORK(floppy_work, NULL, NULL); + +static void schedule_bh( void (*handler)(void*) ) +{ + PREPARE_WORK(&floppy_work, handler, NULL); + schedule_work(&floppy_work); +} + +static struct timer_list fd_timer = TIMER_INITIALIZER(NULL, 0, 0); + +static void cancel_activity(void) +{ + do_floppy = NULL; + PREPARE_WORK(&floppy_work, (void*)(void*)empty, NULL); + del_timer(&fd_timer); +} + +/* this function makes sure that the disk stays in the drive during the + * transfer */ +static void fd_watchdog(void) +{ +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from watchdog\n"); + } +#endif + + if (disk_change(current_drive)){ + DPRINT("disk removed during i/o\n"); + cancel_activity(); + cont->done(0); + reset_fdc(); + } else { + del_timer(&fd_timer); + fd_timer.function = (timeout_fn) fd_watchdog; + fd_timer.expires = jiffies + HZ / 10; + add_timer(&fd_timer); + } +} + +static void main_command_interrupt(void) +{ + del_timer(&fd_timer); + cont->interrupt(); +} + +/* waits for a delay (spinup or select) to pass */ +static int fd_wait_for_completion(unsigned long delay, timeout_fn function) +{ + if (FDCS->reset){ + reset_fdc(); /* do the reset during sleep to win time + * if we don't need to sleep, it's a good + * occasion anyways */ + return 1; + } + + if ((signed) (jiffies - delay) < 0){ + del_timer(&fd_timer); + fd_timer.function = function; + fd_timer.expires = delay; + add_timer(&fd_timer); + return 1; + } + return 0; +} + +static spinlock_t floppy_hlt_lock = SPIN_LOCK_UNLOCKED; +static int hlt_disabled; +static void floppy_disable_hlt(void) +{ + unsigned long flags; + + spin_lock_irqsave(&floppy_hlt_lock, flags); + if (!hlt_disabled) { + hlt_disabled=1; +#ifdef HAVE_DISABLE_HLT + disable_hlt(); +#endif + } + spin_unlock_irqrestore(&floppy_hlt_lock, flags); +} + +static void floppy_enable_hlt(void) +{ + unsigned long flags; + + spin_lock_irqsave(&floppy_hlt_lock, flags); + if (hlt_disabled){ + hlt_disabled=0; +#ifdef HAVE_DISABLE_HLT + enable_hlt(); +#endif + } + spin_unlock_irqrestore(&floppy_hlt_lock, flags); +} + + +static void setup_DMA(void) +{ + unsigned long f; + +#ifdef FLOPPY_SANITY_CHECK + if (raw_cmd->length == 0){ + int i; + + printk("zero dma transfer size:"); + for (i=0; i < raw_cmd->cmd_count; i++) + printk("%x,", raw_cmd->cmd[i]); + printk("\n"); + cont->done(0); + FDCS->reset = 1; + return; + } + if (((unsigned long) raw_cmd->kernel_data) % 512){ + printk("non aligned address: %p\n", raw_cmd->kernel_data); + cont->done(0); + FDCS->reset=1; + return; + } +#endif + f=claim_dma_lock(); + fd_disable_dma(); +#ifdef fd_dma_setup + if (fd_dma_setup(raw_cmd->kernel_data, raw_cmd->length, + (raw_cmd->flags & FD_RAW_READ)? + DMA_MODE_READ : DMA_MODE_WRITE, + FDCS->address) < 0) { + release_dma_lock(f); + cont->done(0); + FDCS->reset=1; + return; + } + release_dma_lock(f); +#else + fd_clear_dma_ff(); + fd_cacheflush(raw_cmd->kernel_data, raw_cmd->length); + fd_set_dma_mode((raw_cmd->flags & FD_RAW_READ)? + DMA_MODE_READ : DMA_MODE_WRITE); + fd_set_dma_addr(raw_cmd->kernel_data); + fd_set_dma_count(raw_cmd->length); + virtual_dma_port = FDCS->address; + fd_enable_dma(); + release_dma_lock(f); +#endif + floppy_disable_hlt(); +} + +static void show_floppy(void); + +/* waits until the fdc becomes ready */ + +#ifdef PC9800_DEBUG_FLOPPY +#define READY_DELAY 10000000 +#else +#define READY_DELAY 100000 +#endif + +static int wait_til_ready(void) +{ + int counter, status; + if (FDCS->reset) + return -1; + for (counter = 0; counter < READY_DELAY; counter++) { + status = fd_inb(FD98_STATUS); + if (status & STATUS_READY) + return status; + } + if (!initialising) { + DPRINT("Getstatus times out (%x) on fdc %d\n", + status, fdc); + show_floppy(); + } + FDCS->reset = 1; + return -1; +} + +/* sends a command byte to the fdc */ +static int output_byte(char byte) +{ + int status; + + if ((status = wait_til_ready()) < 0) + return -1; + if ((status & (STATUS_READY|STATUS_DIR|STATUS_DMA)) == STATUS_READY){ + fd_outb(byte,FD98_DATA); +#ifdef FLOPPY_SANITY_CHECK + output_log[output_log_pos].data = byte; + output_log[output_log_pos].status = status; + output_log[output_log_pos].jiffies = jiffies; + output_log_pos = (output_log_pos + 1) % OLOGSIZE; +#endif + return 0; + } + FDCS->reset = 1; + if (!initialising) { + DPRINT("Unable to send byte %x to FDC. Fdc=%x Status=%x\n", + byte, fdc, status); + show_floppy(); + } + return -1; +} +#define LAST_OUT(x) if (output_byte(x)<0){ reset_fdc();return;} + +/* gets the response from the fdc */ +static int result(void) +{ + int i, status=0; + + for(i=0; i < MAX_REPLIES; i++) { + if ((status = wait_til_ready()) < 0) + break; + status &= STATUS_DIR|STATUS_READY|STATUS_BUSY|STATUS_DMA; + if ((status & ~STATUS_BUSY) == STATUS_READY){ +#ifdef FLOPPY_SANITY_CHECK + resultjiffies = jiffies; + resultsize = i; +#endif + return i; + } + if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY)) + reply_buffer[i] = fd_inb(FD98_DATA); + else + break; + } + if (!initialising) { + DPRINT("get result error. Fdc=%d Last status=%x Read bytes=%d\n", + fdc, status, i); + show_floppy(); + } + FDCS->reset = 1; + return -1; +} + +static int fifo_depth = 0xa; +static int no_fifo; + +#define NOMINAL_DTR 500 + +/* Issue a "SPECIFY" command to set the step rate time, head unload time, + * head load time, and DMA disable flag to values needed by floppy. + * + * The value "dtr" is the data transfer rate in Kbps. It is needed + * to account for the data rate-based scaling done by the 82072 and 82077 + * FDC types. This parameter is ignored for other types of FDCs (i.e. + * 8272a). + * + * Note that changing the data transfer rate has a (probably deleterious) + * effect on the parameters subject to scaling for 82072/82077 FDCs, so + * fdc_specify is called again after each data transfer rate + * change. + * + * srt: 1000 to 16000 in microseconds + * hut: 16 to 240 milliseconds + * hlt: 2 to 254 milliseconds + * + * These values are rounded up to the next highest available delay time. + */ +static void fdc_specify(void) +{ + output_byte(FD_SPECIFY); + output_byte(FDCS->spec1 = 0xdf); + output_byte(FDCS->spec2 = 0x24); +} + +static void tell_sector(void) +{ + printk(": track %d, head %d, sector %d, size %d", + R_TRACK, R_HEAD, R_SECTOR, R_SIZECODE); +} /* tell_sector */ + +static int auto_detect_mode_pc9800(void) +{ +#ifdef PC9800_DEBUG_FLOPPY + printk("auto_detect_mode_pc9800: retry_auto_detect=%d\n", + retry_auto_detect); +#endif + if (retry_auto_detect > 4) { + retry_auto_detect = 0; + return 1; + } + + switch ((int)(_floppy - floppy_type)) { + case 2: + _floppy = floppy_type + 4; + break; + + case 4: + case 6: + _floppy = floppy_type + 7; + break; + + case 7: + case 10: + _floppy = floppy_type + 2; + break; + + default: + _floppy = floppy_type + 7; + } + + retry_auto_detect++; + return 0; +} + +static void access_mode_change_pc9800(void); + +/* + * OK, this error interpreting routine is called after a + * DMA read/write has succeeded + * or failed, so we check the results, and copy any buffers. + * hhb: Added better error reporting. + * ak: Made this into a separate routine. + */ +static int interpret_errors(void) +{ + char bad; + + if (inr!=7) { + DPRINT("-- FDC reply error"); + FDCS->reset = 1; + return 1; + } + + /* check IC to find cause of interrupt */ + switch (ST0 & ST0_INTR) { + case 0x40: /* error occurred during command execution */ + if (ST1 & ST1_EOC) + return 0; /* occurs with pseudo-DMA */ + bad = 1; + if (ST1 & ST1_WP) { + DPRINT("Drive is write protected\n"); + CLEARF(FD_DISK_WRITABLE); + cont->done(0); + bad = 2; + } else if (ST1 & ST1_ND) { + SETF(FD_NEED_TWADDLE); + } else if (ST1 & ST1_OR) { + if (DP->flags & FTD_MSG) + DPRINT("Over/Underrun - retrying\n"); + bad = 0; + }else if (*errors >= DP->max_errors.reporting){ + if (ST0 & ST0_ECE) { + printk("Recalibrate failed!"); + } else if (ST2 & ST2_CRC) { + printk("data CRC error"); + tell_sector(); + } else if (ST1 & ST1_CRC) { + printk("CRC error"); + tell_sector(); + } else if ((ST1 & (ST1_MAM|ST1_ND)) || (ST2 & ST2_MAM)) { + if (auto_detect_mode) { + bad = (char)auto_detect_mode_pc9800(); + access_mode_change_pc9800(); + } + + if (bad) { + printk("floppy error: MA: _floppy - floppy_type=%d\n", (int)(_floppy - floppy_type)); + printk("bad=%d\n", (int)bad); + if (!probing) { + printk("sector not found"); + tell_sector(); + } else + printk("probe failed..."); + } + } else if (ST2 & ST2_WC) { /* seek error */ + printk("wrong cylinder"); + } else if (ST2 & ST2_BC) { /* cylinder marked as bad */ + printk("bad cylinder"); + } else { + printk("unknown error. ST[0..2] are: 0x%x 0x%x 0x%x", ST0, ST1, ST2); + tell_sector(); + } + printk("\n"); + + } + if (ST2 & ST2_WC || ST2 & ST2_BC) + /* wrong cylinder => recal */ + DRS->track = NEED_2_RECAL; + return bad; + case 0x80: /* invalid command given */ + DPRINT("Invalid FDC command given!\n"); + cont->done(0); + return 2; + case 0xc0: + SETF(FD_DISK_CHANGED); + SETF(FD_DISK_WRITABLE); + DPRINT("Abnormal termination caused by polling\n"); + cont->error(); + return 2; + default: /* (0) Normal command termination */ + auto_detect_mode = 0; + return 0; + } +} + +/* + * This routine is called when everything should be correctly set up + * for the transfer (i.e. floppy motor is on, the correct floppy is + * selected, and the head is sitting on the right track). + */ +static void setup_rw_floppy(void) +{ + int i,r, flags,dflags; + unsigned long ready_date; + timeout_fn function; + + access_mode_change_pc9800(); + flags = raw_cmd->flags; + if (flags & (FD_RAW_READ | FD_RAW_WRITE)) + flags |= FD_RAW_INTR; + + if ((flags & FD_RAW_SPIN) && !(flags & FD_RAW_NO_MOTOR)){ + ready_date = DRS->spinup_date + DP->spinup; + /* If spinup will take a long time, rerun scandrives + * again just before spinup completion. Beware that + * after scandrives, we must again wait for selection. + */ + if ((signed) (ready_date - jiffies) > DP->select_delay){ + ready_date -= DP->select_delay; + function = (timeout_fn) floppy_start; + } else + function = (timeout_fn) setup_rw_floppy; + + /* wait until the floppy is spinning fast enough */ + if (fd_wait_for_completion(ready_date,function)) + return; + } + dflags = DRS->flags; + + if ((flags & FD_RAW_READ) || (flags & FD_RAW_WRITE)) + setup_DMA(); + + if (flags & FD_RAW_INTR) + do_floppy = main_command_interrupt; + + r=0; + for (i=0; i< raw_cmd->cmd_count; i++) + r|=output_byte(raw_cmd->cmd[i]); + +#ifdef DEBUGT + debugt("rw_command: "); +#endif + if (r){ + cont->error(); + reset_fdc(); + return; + } + + if (!(flags & FD_RAW_INTR)){ + inr = result(); + cont->interrupt(); + } else if (flags & FD_RAW_NEED_DISK) + fd_watchdog(); +} + +static int blind_seek; + +/* + * This is the routine called after every seek (or recalibrate) interrupt + * from the floppy controller. + */ +static void seek_interrupt(void) +{ +#ifdef DEBUGT + debugt("seek interrupt:"); +#endif + if (inr != 2 || (ST0 & 0xF8) != 0x20) { + DRS->track = NEED_2_RECAL; + cont->error(); + cont->redo(); + return; + } + if (DRS->track >= 0 && DRS->track != ST1 && !blind_seek){ +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("clearing NEWCHANGE flag because of effective seek\n"); + DPRINT("jiffies=%lu\n", jiffies); + } +#endif + CLEARF(FD_DISK_NEWCHANGE); /* effective seek */ + CLEARF(FD_DISK_CHANGED); /* effective seek */ + DRS->select_date = jiffies; + } + DRS->track = ST1; + floppy_ready(); +} + +static void check_wp(void) +{ + if (TESTF(FD_VERIFY)) { + /* check write protection */ + output_byte(FD_GETSTATUS); + output_byte(UNIT(current_drive)); + if (result() != 1){ + FDCS->reset = 1; + return; + } + CLEARF(FD_VERIFY); + CLEARF(FD_NEED_TWADDLE); +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("checking whether disk is write protected\n"); + DPRINT("wp=%x\n",ST3 & 0x40); + } +#endif + if (!(ST3 & 0x40)) + SETF(FD_DISK_WRITABLE); + else + CLEARF(FD_DISK_WRITABLE); + } +} + +static void seek_floppy(void) +{ + int track; + + blind_seek=0; + +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from seek\n"); + } +#endif + + if (!TESTF(FD_DISK_NEWCHANGE) && + disk_change(current_drive) && + (raw_cmd->flags & FD_RAW_NEED_DISK)){ + /* the media changed flag should be cleared after the seek. + * If it isn't, this means that there is really no disk in + * the drive. + */ + SETF(FD_DISK_CHANGED); + cont->done(0); + cont->redo(); + return; + } + if (DRS->track <= NEED_1_RECAL){ + recalibrate_floppy(); + return; + } else if (TESTF(FD_DISK_NEWCHANGE) && + (raw_cmd->flags & FD_RAW_NEED_DISK) && + (DRS->track <= NO_TRACK || DRS->track == raw_cmd->track)) { + /* we seek to clear the media-changed condition. Does anybody + * know a more elegant way, which works on all drives? */ + if (raw_cmd->track) + track = raw_cmd->track - 1; + else { + if (DP->flags & FD_SILENT_DCL_CLEAR){ + blind_seek = 1; + raw_cmd->flags |= FD_RAW_NEED_SEEK; + } + track = 1; + } + } else { + check_wp(); + if (raw_cmd->track != DRS->track && + (raw_cmd->flags & FD_RAW_NEED_SEEK)) + track = raw_cmd->track; + else { + setup_rw_floppy(); + return; + } + } + + do_floppy = seek_interrupt; + output_byte(FD_SEEK); + output_byte(UNIT(current_drive)); + LAST_OUT(track); +#ifdef DEBUGT + debugt("seek command:"); +#endif +} + +static void recal_interrupt(void) +{ +#ifdef DEBUGT + debugt("recal interrupt:"); +#endif + if (inr !=2) + FDCS->reset = 1; + else if (ST0 & ST0_ECE) { + switch(DRS->track){ + case NEED_1_RECAL: +#ifdef DEBUGT + debugt("recal interrupt need 1 recal:"); +#endif + /* after a second recalibrate, we still haven't + * reached track 0. Probably no drive. Raise an + * error, as failing immediately might upset + * computers possessed by the Devil :-) */ + cont->error(); + cont->redo(); + return; + case NEED_2_RECAL: +#ifdef DEBUGT + debugt("recal interrupt need 2 recal:"); +#endif + /* If we already did a recalibrate, + * and we are not at track 0, this + * means we have moved. (The only way + * not to move at recalibration is to + * be already at track 0.) Clear the + * new change flag */ +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("clearing NEWCHANGE flag because of second recalibrate\n"); + } +#endif + + CLEARF(FD_DISK_NEWCHANGE); + DRS->select_date = jiffies; + /* fall through */ + default: +#ifdef DEBUGT + debugt("recal interrupt default:"); +#endif + /* Recalibrate moves the head by at + * most 80 steps. If after one + * recalibrate we don't have reached + * track 0, this might mean that we + * started beyond track 80. Try + * again. */ + DRS->track = NEED_1_RECAL; + break; + } + } else + DRS->track = ST1; + floppy_ready(); +} + +static void print_result(char *message, int inr) +{ + int i; + + DPRINT("%s ", message); + if (inr >= 0) + for (i=0; i= N_FDC || FDCS->address == -1){ + /* we don't even know which FDC is the culprit */ + printk("DOR0=%x\n", fdc_state[0].dor); + printk("floppy interrupt on bizarre fdc %d\n",fdc); + printk("handler=%p\n", handler); + is_alive("bizarre fdc"); + return; + } + + FDCS->reset = 0; + /* We have to clear the reset flag here, because apparently on boxes + * with level triggered interrupts (PS/2, Sparc, ...), it is needed to + * emit SENSEI's to clear the interrupt line. And FDCS->reset blocks the + * emission of the SENSEI's. + * It is OK to emit floppy commands because we are in an interrupt + * handler here, and thus we have to fear no interference of other + * activity. + */ + + do_print = !handler && !initialising; + + inr = result(); + if (inr && do_print) + print_result("unexpected interrupt", inr); + if (inr == 0){ + do { + output_byte(FD_SENSEI); + inr = result(); + if ((ST0 & ST0_INTR) == 0xC0) { + int drive = ST0 & ST0_DS; + + /* Attention Interrupt. */ + if (ST0 & ST0_NR) { +#ifdef PC9800_DEBUG_FLOPPY + if (do_print) + printk(KERN_DEBUG + "floppy debug: floppy ejected (drive %d)\n", + drive); +#endif + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + } else { +#ifdef PC9800_DEBUG_FLOPPY + if (do_print) + printk(KERN_DEBUG + "floppy debug: floppy inserted (drive %d)\n", + drive); +#endif + } + } /* Attention Interrupt */ +#ifdef PC9800_DEBUG_FLOPPY + else { + printk(KERN_DEBUG + "floppy debug : unknown interrupt\n"); + } +#endif + } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2); + } + if (handler) { + schedule_bh( (void *)(void *) handler); + } else { +#if 0 + FDCS->reset = 1; +#endif + } + is_alive("normal interrupt end"); +} + +static void recalibrate_floppy(void) +{ +#ifdef DEBUGT + debugt("recalibrate floppy:"); +#endif + do_floppy = recal_interrupt; + output_byte(FD_RECALIBRATE); + LAST_OUT(UNIT(current_drive)); +} + +/* + * Must do 4 FD_SENSEIs after reset because of ``drive polling''. + */ +static void reset_interrupt(void) +{ +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy debug: reset interrupt\n"); +#endif +#ifdef DEBUGT + debugt("reset interrupt:"); +#endif + result(); /* get the status ready for set_fdc */ + if (FDCS->reset) { + printk("reset set in interrupt, calling %p\n", cont->error); + cont->error(); /* a reset just after a reset. BAD! */ + } + cont->redo(); +} + +/* + * reset is done by pulling bit 2 of DOR low for a while (old FDCs), + * or by setting the self clearing bit 7 of STATUS (newer FDCs) + */ +static void reset_fdc(void) +{ + unsigned long flags; + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy debug: reset_fdc\n"); +#endif + + do_floppy = reset_interrupt; + FDCS->reset = 0; + reset_fdc_info(0); + + /* Pseudo-DMA may intercept 'reset finished' interrupt. */ + /* Irrelevant for systems with true DMA (i386). */ + + flags=claim_dma_lock(); + fd_disable_dma(); + release_dma_lock(flags); + + fd_outb(FDCS->dor | 0x80, FD_MODE); + udelay(FD_RESET_DELAY); + fd_outb(FDCS->dor, FD_MODE); + udelay(FD_AFTER_RESET_DELAY); +} + +static void show_floppy(void) +{ + int i; + + printk("\n"); + printk("floppy driver state\n"); + printk("-------------------\n"); + printk("now=%lu last interrupt=%lu diff=%lu last called handler=%p\n", + jiffies, interruptjiffies, jiffies-interruptjiffies, lasthandler); + + +#ifdef FLOPPY_SANITY_CHECK + printk("timeout_message=%s\n", timeout_message); + printk("last output bytes:\n"); + for (i=0; i < OLOGSIZE; i++) + printk("%2x %2x %lu\n", + output_log[(i+output_log_pos) % OLOGSIZE].data, + output_log[(i+output_log_pos) % OLOGSIZE].status, + output_log[(i+output_log_pos) % OLOGSIZE].jiffies); + printk("last result at %lu\n", resultjiffies); + printk("last redo_fd_request at %lu\n", lastredo); + for (i=0; ireset = 1; + if (cont){ + cont->done(0); + cont->redo(); /* this will recall reset when needed */ + } else { + printk("no cont in shutdown!\n"); + process_fd_request(); + } + is_alive("floppy shutdown"); +} +/*typedef void (*timeout_fn)(unsigned long);*/ + +static void access_mode_change_pc9800(void) +{ + static int access_mode, mode_change_now, old_mode, new_set = 1; +#ifdef PC9800_DEBUG_FLOPPY2 + printk("enter access_mode_change\n"); +#endif + access_mode = mode_change_now = 0; + if (DP->cmos==4) { + switch ((int)(_floppy - &floppy_type[0])) { + case 1: + case 2: + new_set = 1; + access_mode = 2; + break; + + case 4: + case 6: + new_set = 1; + access_mode = 3; + break; + + case 7: + case 10: + new_set = 1; + access_mode = 1; + break; + + default: + access_mode = 1; + break; + } + + old_mode = fd_inb(FD_MODE_CHANGE) & 3; + + switch (access_mode) { + case 1: + if ((old_mode & 2) == 0) { + fd_outb(old_mode | 2, FD_MODE_CHANGE); + mode_change_now = 1; + } else { + fd_outb(current_drive << 5, FD_EMODE_CHANGE); + if (fd_inb(FD_EMODE_CHANGE) == 0xff) + return; + } + + fd_outb((current_drive << 5) | 0x11, FD_EMODE_CHANGE); + mode_change_now = 1; + break; + + case 2: + if ((old_mode & 2) == 0) { + fd_outb(old_mode | 2, FD_MODE_CHANGE); + mode_change_now = 1; + } else { + fd_outb(current_drive << 5, FD_EMODE_CHANGE); + if ((fd_inb(FD_EMODE_CHANGE) & 1) == 0) + return; + fd_outb((current_drive << 5) | 0x10, FD_EMODE_CHANGE); + mode_change_now = 1; + } + + break; + + case 3: + if ((old_mode & 2) == 0) + return; + fd_outb(current_drive << 5, FD_EMODE_CHANGE); + if (fd_inb(FD_EMODE_CHANGE) & 1) + fd_outb((current_drive << 5) | 0x10, FD_EMODE_CHANGE); + fd_outb(old_mode & 0xfd, FD_MODE_CHANGE); + mode_change_now = 1; + break; + + default: + break; + } + } else { + switch ((int)(_floppy - &floppy_type[0])) { + case 1: + case 2: + new_set = 1; + access_mode = 2; + break; + + case 4: + case 6: + new_set = 1; + access_mode = 3; + break; + + default: + switch (DP->cmos) { + case 2: + access_mode = 2; + break; + + case 3: + access_mode = 3; + break; + + default: + break; + } + + break; + } + + old_mode = fd_inb(FD_MODE_CHANGE) & 3; + + switch (access_mode) { + case 2: + if ((old_mode & 2) == 0) { + fd_outb(old_mode | 2, FD_MODE_CHANGE); + mode_change_now = 1; + } + + break; + + case 3: + if (old_mode & 2) { + fd_outb(old_mode & 0xfd, FD_MODE_CHANGE); + mode_change_now = 1; + } + + break; + + default: + break; + } + } +#ifdef PC9800_DEBUG_FLOPPY2 + printk("floppy debug: DP->cmos=%d\n", DP->cmos); + printk("floppy debug: mode_change_now=%d\n", mode_change_now); + printk("floppy debug: access_mode=%d\n", access_mode); + printk("floppy debug: old_mode=%d\n", old_mode); + printk("floppy debug: _floppy - &floppy_type[0]=%d\n", (int)(_floppy - &floppy_type[0])); +#endif /* PC9800_DEBUG_FLOPPY2 */ + if(mode_change_now) + reset_fdc(); +} + +/* start motor, check media-changed condition and write protection */ +static int start_motor(void (*function)(void) ) +{ + access_mode_change_pc9800(); + set_mode(~0, 0x8); + + /* wait_for_completion also schedules reset if needed. */ + return(fd_wait_for_completion(DRS->select_date+DP->select_delay, + (timeout_fn) function)); +} + +static void floppy_ready(void) +{ + CHECK_RESET; + if (start_motor(floppy_ready)) return; + +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from floppy_ready\n"); + } +#endif + if (!(raw_cmd->flags & FD_RAW_NO_MOTOR) && + disk_change(current_drive) && + !DP->select_delay) + twaddle(); /* this clears the dcl on certain drive/controller + * combinations */ + +#ifdef fd_chose_dma_mode + if ((raw_cmd->flags & FD_RAW_READ) || + (raw_cmd->flags & FD_RAW_WRITE)) + { + unsigned long flags = claim_dma_lock(); + fd_chose_dma_mode(raw_cmd->kernel_data, + raw_cmd->length); + release_dma_lock(flags); + } +#endif + +#if 0 + access_mode_change_pc9800(); +#endif + if (raw_cmd->flags & (FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK)){ + fdc_specify(); /* must be done here because of hut, hlt ... */ + seek_floppy(); + } else { + if ((raw_cmd->flags & FD_RAW_READ) || + (raw_cmd->flags & FD_RAW_WRITE)) + fdc_specify(); + setup_rw_floppy(); + } +} + +static void floppy_start(void) +{ + reschedule_timeout(current_reqD, "floppy start", 0); + + scandrives(); +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("setting NEWCHANGE in floppy_start\n"); + } +#endif + SETF(FD_DISK_NEWCHANGE); + floppy_ready(); +} + +/* + * ======================================================================== + * here ends the bottom half. Exported routines are: + * floppy_start, floppy_off, floppy_ready, lock_fdc, unlock_fdc, set_fdc, + * start_motor, reset_fdc, reset_fdc_info, interpret_errors. + * Initialization also uses output_byte, result, set_dor, floppy_interrupt + * and set_dor. + * ======================================================================== + */ +/* + * General purpose continuations. + * ============================== + */ + +static void do_wakeup(void) +{ + reschedule_timeout(MAXTIMEOUT, "do wakeup", 0); + cont = 0; + command_status += 2; + wake_up(&command_done); +} + +static struct cont_t wakeup_cont={ + empty, + do_wakeup, + empty, + (done_f)empty +}; + + +static struct cont_t intr_cont={ + empty, + process_fd_request, + empty, + (done_f) empty +}; + +static int wait_til_done(void (*handler)(void), int interruptible) +{ + int ret; + + schedule_bh((void *)(void *)handler); + + if (command_status < 2 && NO_SIGNAL) { + DECLARE_WAITQUEUE(wait, current); + + add_wait_queue(&command_done, &wait); + for (;;) { + set_current_state(interruptible? + TASK_INTERRUPTIBLE: + TASK_UNINTERRUPTIBLE); + + if (command_status >= 2 || !NO_SIGNAL) + break; + + is_alive("wait_til_done"); + + schedule(); + } + + set_current_state(TASK_RUNNING); + remove_wait_queue(&command_done, &wait); + } + + if (command_status < 2){ + cancel_activity(); + cont = &intr_cont; + reset_fdc(); + return -EINTR; + } + +#ifdef PC9800_DEBUG_FLOPPY + if (command_status != FD_COMMAND_OKAY) + printk("floppy check: wait_til_done out:%d\n", command_status); +#endif + if (FDCS->reset) + command_status = FD_COMMAND_ERROR; + if (command_status == FD_COMMAND_OKAY) + ret=0; + else + ret=-EIO; + command_status = FD_COMMAND_NONE; + return ret; +} + +static void generic_done(int result) +{ + command_status = result; + cont = &wakeup_cont; +} + +static void generic_success(void) +{ + cont->done(1); +} + +static void generic_failure(void) +{ + cont->done(0); +} + +static void success_and_wakeup(void) +{ + generic_success(); + cont->redo(); +} + + +/* + * formatting and rw support. + * ========================== + */ + +static int next_valid_format(void) +{ + int probed_format; + + probed_format = DRS->probed_format; + while(1){ + if (probed_format >= 8 || + !DP->autodetect[probed_format]){ + DRS->probed_format = 0; + return 1; + } + if (floppy_type[DP->autodetect[probed_format]].sect){ + DRS->probed_format = probed_format; + return 0; + } + probed_format++; + } +} + +static void bad_flp_intr(void) +{ + if (probing){ + DRS->probed_format++; + if (!next_valid_format()) + return; + } + (*errors)++; + INFBOUND(DRWE->badness, *errors); + if (*errors > DP->max_errors.abort) + cont->done(0); + if (*errors > DP->max_errors.reset) + FDCS->reset = 1; + else if (*errors > DP->max_errors.recal) + DRS->track = NEED_2_RECAL; +} + +static void set_floppy(int drive) +{ + int type = ITYPE(UDRS->fd_device); + if (type) { + auto_detect_mode = 0; + _floppy = floppy_type + type; + } else if (auto_detect_mode == 0) { + auto_detect_mode = 1; + retry_auto_detect = 0; + _floppy = current_type[drive]; + } +#ifdef PC9800_DEBUG_FLOPPY2 + printk("set_floppy: set floppy type=%d\n", (int)(_floppy - floppy_type)); +#endif +} + +/* + * formatting support. + * =================== + */ +static void format_interrupt(void) +{ + switch (interpret_errors()){ + case 1: + cont->error(); + case 2: + break; + case 0: + cont->done(1); + } + cont->redo(); +} + +#define CODE2SIZE (ssize = ((1 << SIZECODE) + 3) >> 2) +#define FM_MODE(x,y) ((y) & ~(((x)->rate & 0x80) >>1)) +#define CT(x) ((x) | 0xc0) +static void setup_format_params(int track) +{ + struct fparm { + unsigned char track,head,sect,size; + } *here = (struct fparm *)floppy_track_buffer; + int il,n; + int count,head_shift,track_shift; + + raw_cmd = &default_raw_cmd; + raw_cmd->track = track; + + raw_cmd->flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN | + FD_RAW_NEED_DISK | FD_RAW_NEED_SEEK; + raw_cmd->rate = _floppy->rate & 0x43; + raw_cmd->cmd_count = NR_F; + COMMAND = FM_MODE(_floppy,FD_FORMAT); + DR_SELECT = UNIT(current_drive) + PH_HEAD(_floppy,format_req.head); + F_SIZECODE = FD_SIZECODE(_floppy); + F_SECT_PER_TRACK = _floppy->sect << 2 >> F_SIZECODE; + F_GAP = _floppy->fmt_gap; + F_FILL = FD_FILL_BYTE; + + raw_cmd->kernel_data = floppy_track_buffer; + raw_cmd->length = 4 * F_SECT_PER_TRACK; + + /* allow for about 30ms for data transport per track */ + head_shift = (F_SECT_PER_TRACK + 5) / 6; + + /* a ``cylinder'' is two tracks plus a little stepping time */ + track_shift = 2 * head_shift + 3; + + /* position of logical sector 1 on this track */ + n = (track_shift * format_req.track + head_shift * format_req.head) + % F_SECT_PER_TRACK; + + /* determine interleave */ + il = 1; + if (_floppy->fmt_gap < 0x22) + il++; + + /* initialize field */ + for (count = 0; count < F_SECT_PER_TRACK; ++count) { + here[count].track = format_req.track; + here[count].head = format_req.head; + here[count].sect = 0; + here[count].size = F_SIZECODE; + } + /* place logical sectors */ + for (count = 1; count <= F_SECT_PER_TRACK; ++count) { + here[n].sect = count; + n = (n+il) % F_SECT_PER_TRACK; + if (here[n].sect) { /* sector busy, find next free sector */ + ++n; + if (n>= F_SECT_PER_TRACK) { + n-=F_SECT_PER_TRACK; + while (here[n].sect) ++n; + } + } + } +} + +static void redo_format(void) +{ + buffer_track = -1; + setup_format_params(format_req.track << STRETCH(_floppy)); + floppy_start(); +#ifdef DEBUGT + debugt("queue format request"); +#endif +} + +static struct cont_t format_cont={ + format_interrupt, + redo_format, + bad_flp_intr, + generic_done }; + +static int do_format(kdev_t device, struct format_descr *tmp_format_req) +{ + int ret; + int drive=DRIVE(device); + + LOCK_FDC(drive,1); + set_floppy(drive); + if (!_floppy || + _floppy->track > DP->tracks || + tmp_format_req->track >= _floppy->track || + tmp_format_req->head >= _floppy->head || + (_floppy->sect << 2) % (1 << FD_SIZECODE(_floppy)) || + !_floppy->fmt_gap) { + process_fd_request(); + return -EINVAL; + } + format_req = *tmp_format_req; + format_errors = 0; + cont = &format_cont; + errors = &format_errors; + IWAIT(redo_format); + process_fd_request(); + return ret; +} + +/* + * Buffer read/write and support + * ============================= + */ + +static inline void end_request(struct request *req, int uptodate) +{ + if (end_that_request_first(req, uptodate, current_count_sectors)) + return; + add_disk_randomness(req->rq_disk); + floppy_off((long)req->rq_disk->private_data); + blkdev_dequeue_request(req); + end_that_request_last(req); + + /* We're done with the request */ + current_req = NULL; +} + + +/* new request_done. Can handle physical sectors which are smaller than a + * logical buffer */ +static void request_done(int uptodate) +{ + struct request_queue *q = &floppy_queue; + struct request *req = current_req; + unsigned long flags; + int block; + + probing = 0; + reschedule_timeout(MAXTIMEOUT, "request done %d", uptodate); + + if (!req) { + printk("floppy.c: no request in request_done\n"); + return; + } + + if (uptodate){ + /* maintain values for invalidation on geometry + * change */ + block = current_count_sectors + req->sector; + INFBOUND(DRS->maxblock, block); + if (block > _floppy->sect) + DRS->maxtrack = 1; + + /* unlock chained buffers */ + spin_lock_irqsave(q->queue_lock, flags); + end_request(req, 1); + spin_unlock_irqrestore(q->queue_lock, flags); + } else { + if (rq_data_dir(req) == WRITE) { + /* record write error information */ + DRWE->write_errors++; + if (DRWE->write_errors == 1) { + DRWE->first_error_sector = req->sector; + DRWE->first_error_generation = DRS->generation; + } + DRWE->last_error_sector = req->sector; + DRWE->last_error_generation = DRS->generation; + } + spin_lock_irqsave(q->queue_lock, flags); + end_request(req, 0); + spin_unlock_irqrestore(q->queue_lock, flags); + } +} + +/* Interrupt handler evaluating the result of the r/w operation */ +static void rw_interrupt(void) +{ + int nr_sectors, ssize, eoc, heads; + + if (R_HEAD >= 2) { + /* some Toshiba floppy controllers occasionnally seem to + * return bogus interrupts after read/write operations, which + * can be recognized by a bad head number (>= 2) */ + return; + } + + if (!DRS->first_read_date) + DRS->first_read_date = jiffies; + + nr_sectors = 0; + CODE2SIZE; + + if (ST1 & ST1_EOC) + eoc = 1; + else + eoc = 0; + + if (COMMAND & 0x80) + heads = 2; + else + heads = 1; + + nr_sectors = (((R_TRACK-TRACK) * heads + + R_HEAD-HEAD) * SECT_PER_TRACK + + R_SECTOR-SECTOR + eoc) << SIZECODE >> 2; + +#ifdef FLOPPY_SANITY_CHECK + if (nr_sectors / ssize > + (in_sector_offset + current_count_sectors + ssize - 1) / ssize) { + DPRINT("long rw: %x instead of %lx\n", + nr_sectors, current_count_sectors); + printk("rs=%d s=%d\n", R_SECTOR, SECTOR); + printk("rh=%d h=%d\n", R_HEAD, HEAD); + printk("rt=%d t=%d\n", R_TRACK, TRACK); + printk("heads=%d eoc=%d\n", heads, eoc); + printk("spt=%d st=%d ss=%d\n", SECT_PER_TRACK, + fsector_t, ssize); + printk("in_sector_offset=%d\n", in_sector_offset); + } +#endif + + nr_sectors -= in_sector_offset; + INFBOUND(nr_sectors,0); + SUPBOUND(current_count_sectors, nr_sectors); + + switch (interpret_errors()){ + case 2: + cont->redo(); + return; + case 1: + if (!current_count_sectors){ + cont->error(); + cont->redo(); + return; + } + break; + case 0: + if (!current_count_sectors){ + cont->redo(); + return; + } + current_type[current_drive] = _floppy; + floppy_sizes[TOMINOR(current_drive) ]= _floppy->size; + break; + } + + if (probing) { + if (DP->flags & FTD_MSG) + DPRINT("Auto-detected floppy type %s in fd%d\n", + _floppy->name,current_drive); + current_type[current_drive] = _floppy; + floppy_sizes[TOMINOR(current_drive)] = _floppy->size; + probing = 0; + } + + if (CT(COMMAND) != FD_READ || + raw_cmd->kernel_data == current_req->buffer){ + /* transfer directly from buffer */ + cont->done(1); + } else if (CT(COMMAND) == FD_READ){ + buffer_track = raw_cmd->track; + buffer_drive = current_drive; + INFBOUND(buffer_max, nr_sectors + fsector_t); + } + cont->redo(); +} + +/* Compute maximal contiguous buffer size. */ +static int buffer_chain_size(void) +{ + struct bio *bio; + struct bio_vec *bv; + int size, i; + char *base; + + base = bio_data(current_req->bio); + size = 0; + + rq_for_each_bio(bio, current_req) { + bio_for_each_segment(bv, bio, i) { + if (page_address(bv->bv_page) + bv->bv_offset != base + size) + break; + + size += bv->bv_len; + } + } + + return size >> 9; +} + +/* Compute the maximal transfer size */ +static int transfer_size(int ssize, int max_sector, int max_size) +{ + SUPBOUND(max_sector, fsector_t + max_size); + + /* alignment */ + max_sector -= (max_sector % _floppy->sect) % ssize; + + /* transfer size, beginning not aligned */ + current_count_sectors = max_sector - fsector_t ; + + return max_sector; +} + +/* + * Move data from/to the track buffer to/from the buffer cache. + */ +static void copy_buffer(int ssize, int max_sector, int max_sector_2) +{ + int remaining; /* number of transferred 512-byte sectors */ + struct bio_vec *bv; + struct bio *bio; + char *buffer, *dma_buffer; + int size, i; + + max_sector = transfer_size(ssize, + minimum(max_sector, max_sector_2), + current_req->nr_sectors); + + if (current_count_sectors <= 0 && CT(COMMAND) == FD_WRITE && + buffer_max > fsector_t + current_req->nr_sectors) + current_count_sectors = minimum(buffer_max - fsector_t, + current_req->nr_sectors); + + remaining = current_count_sectors << 9; +#ifdef FLOPPY_SANITY_CHECK + if ((remaining >> 9) > current_req->nr_sectors && + CT(COMMAND) == FD_WRITE){ + DPRINT("in copy buffer\n"); + printk("current_count_sectors=%ld\n", current_count_sectors); + printk("remaining=%d\n", remaining >> 9); + printk("current_req->nr_sectors=%ld\n",current_req->nr_sectors); + printk("current_req->current_nr_sectors=%u\n", + current_req->current_nr_sectors); + printk("max_sector=%d\n", max_sector); + printk("ssize=%d\n", ssize); + } +#endif + + buffer_max = maximum(max_sector, buffer_max); + + dma_buffer = floppy_track_buffer + ((fsector_t - buffer_min) << 9); + + size = current_req->current_nr_sectors << 9; + + rq_for_each_bio(bio, current_req) { + bio_for_each_segment(bv, bio, i) { + if (!remaining) + break; + + size = bv->bv_len; + SUPBOUND(size, remaining); + + buffer = page_address(bv->bv_page) + bv->bv_offset; +#ifdef FLOPPY_SANITY_CHECK + if (dma_buffer + size > + floppy_track_buffer + (max_buffer_sectors << 10) || + dma_buffer < floppy_track_buffer){ + DPRINT("buffer overrun in copy buffer %d\n", + (int) ((floppy_track_buffer - dma_buffer) >>9)); + printk("fsector_t=%d buffer_min=%d\n", + fsector_t, buffer_min); + printk("current_count_sectors=%ld\n", + current_count_sectors); + if (CT(COMMAND) == FD_READ) + printk("read\n"); + if (CT(COMMAND) == FD_READ) + printk("write\n"); + break; + } + if (((unsigned long)buffer) % 512) + DPRINT("%p buffer not aligned\n", buffer); +#endif + if (CT(COMMAND) == FD_READ) + memcpy(buffer, dma_buffer, size); + else + memcpy(dma_buffer, buffer, size); + + remaining -= size; + dma_buffer += size; + } + } +#ifdef FLOPPY_SANITY_CHECK + if (remaining){ + if (remaining > 0) + max_sector -= remaining >> 9; + DPRINT("weirdness: remaining %d\n", remaining>>9); + } +#endif +} + +#if 0 +static inline int check_dma_crossing(char *start, + unsigned long length, char *message) +{ + if (CROSS_64KB(start, length)) { + printk("DMA xfer crosses 64KB boundary in %s %p-%p\n", + message, start, start+length); + return 1; + } else + return 0; +} +#endif + +/* work around a bug in pseudo DMA + * (on some FDCs) pseudo DMA does not stop when the CPU stops + * sending data. Hence we need a different way to signal the + * transfer length: We use SECT_PER_TRACK. Unfortunately, this + * does not work with MT, hence we can only transfer one head at + * a time + */ +static void virtualdmabug_workaround(void) +{ + int hard_sectors, end_sector; + + if(CT(COMMAND) == FD_WRITE) { + COMMAND &= ~0x80; /* switch off multiple track mode */ + + hard_sectors = raw_cmd->length >> (7 + SIZECODE); + end_sector = SECTOR + hard_sectors - 1; +#ifdef FLOPPY_SANITY_CHECK + if(end_sector > SECT_PER_TRACK) { + printk("too many sectors %d > %d\n", + end_sector, SECT_PER_TRACK); + return; + } +#endif + SECT_PER_TRACK = end_sector; /* make sure SECT_PER_TRACK points + * to end of transfer */ + } +} + +/* + * Formulate a read/write request. + * this routine decides where to load the data (directly to buffer, or to + * tmp floppy area), how much data to load (the size of the buffer, the whole + * track, or a single sector) + * All floppy_track_buffer handling goes in here. If we ever add track buffer + * allocation on the fly, it should be done here. No other part should need + * modification. + */ + +static int make_raw_rw_request(void) +{ + int aligned_sector_t; + int max_sector, max_size, tracksize, ssize; + + if(max_buffer_sectors == 0) { + printk("VFS: Block I/O scheduled on unopened device\n"); + return 0; + } + + set_fdc((long)current_req->rq_disk->private_data); + + raw_cmd = &default_raw_cmd; + raw_cmd->flags = FD_RAW_SPIN | FD_RAW_NEED_DISK | FD_RAW_NEED_DISK | + FD_RAW_NEED_SEEK; + raw_cmd->cmd_count = NR_RW; + if (rq_data_dir(current_req) == READ) { + raw_cmd->flags |= FD_RAW_READ; + COMMAND = FM_MODE(_floppy,FD_READ); + } else if (rq_data_dir(current_req) == WRITE){ + raw_cmd->flags |= FD_RAW_WRITE; + COMMAND = FM_MODE(_floppy,FD_WRITE); + } else { + DPRINT("make_raw_rw_request: unknown command\n"); + return 0; + } + + max_sector = _floppy->sect * _floppy->head; + + TRACK = (int)current_req->sector / max_sector; + fsector_t = (int)current_req->sector % max_sector; + if (_floppy->track && TRACK >= _floppy->track) { + if (current_req->current_nr_sectors & 1) { + current_count_sectors = 1; + return 1; + } else + return 0; + } + HEAD = fsector_t / _floppy->sect; + + if (((_floppy->stretch & FD_SWAPSIDES) || TESTF(FD_NEED_TWADDLE)) && + fsector_t < _floppy->sect) + max_sector = _floppy->sect; + + /* 2M disks have phantom sectors on the first track */ + if ((_floppy->rate & FD_2M) && (!TRACK) && (!HEAD)){ + max_sector = 2 * _floppy->sect / 3; + if (fsector_t >= max_sector){ + current_count_sectors = minimum(_floppy->sect - fsector_t, + current_req->nr_sectors); + return 1; + } + SIZECODE = 2; + } else + SIZECODE = FD_SIZECODE(_floppy); + raw_cmd->rate = _floppy->rate & 0x43; + if ((_floppy->rate & FD_2M) && + (TRACK || HEAD) && + raw_cmd->rate == 2) + raw_cmd->rate = 1; + + if (SIZECODE) + SIZECODE2 = 0xff; + else + SIZECODE2 = 0x80; + raw_cmd->track = TRACK << STRETCH(_floppy); + DR_SELECT = UNIT(current_drive) + PH_HEAD(_floppy,HEAD); + GAP = _floppy->gap; + CODE2SIZE; + SECT_PER_TRACK = _floppy->sect << 2 >> SIZECODE; + SECTOR = ((fsector_t % _floppy->sect) << 2 >> SIZECODE) + 1; + + /* tracksize describes the size which can be filled up with sectors + * of size ssize. + */ + tracksize = _floppy->sect - _floppy->sect % ssize; + if (tracksize < _floppy->sect){ + SECT_PER_TRACK ++; + if (tracksize <= fsector_t % _floppy->sect) + SECTOR--; + + /* if we are beyond tracksize, fill up using smaller sectors */ + while (tracksize <= fsector_t % _floppy->sect){ + while(tracksize + ssize > _floppy->sect){ + SIZECODE--; + ssize >>= 1; + } + SECTOR++; SECT_PER_TRACK ++; + tracksize += ssize; + } + max_sector = HEAD * _floppy->sect + tracksize; + } else if (!TRACK && !HEAD && !(_floppy->rate & FD_2M) && probing) { + max_sector = _floppy->sect; + } else if (!HEAD && CT(COMMAND) == FD_WRITE) { + /* for virtual DMA bug workaround */ + max_sector = _floppy->sect; + } + + in_sector_offset = (fsector_t % _floppy->sect) % ssize; + aligned_sector_t = fsector_t - in_sector_offset; + max_size = current_req->nr_sectors; + if ((raw_cmd->track == buffer_track) && + (current_drive == buffer_drive) && + (fsector_t >= buffer_min) && (fsector_t < buffer_max)) { + /* data already in track buffer */ + if (CT(COMMAND) == FD_READ) { + copy_buffer(1, max_sector, buffer_max); + return 1; + } + } else if (in_sector_offset || current_req->nr_sectors < ssize){ + if (CT(COMMAND) == FD_WRITE){ + if (fsector_t + current_req->nr_sectors > ssize && + fsector_t + current_req->nr_sectors < ssize + ssize) + max_size = ssize + ssize; + else + max_size = ssize; + } + raw_cmd->flags &= ~FD_RAW_WRITE; + raw_cmd->flags |= FD_RAW_READ; + COMMAND = FM_MODE(_floppy,FD_READ); + } else if ((unsigned long)current_req->buffer < MAX_DMA_ADDRESS) { + unsigned long dma_limit; + int direct, indirect; + + indirect= transfer_size(ssize,max_sector,max_buffer_sectors*2) - + fsector_t; + + /* + * Do NOT use minimum() here---MAX_DMA_ADDRESS is 64 bits wide + * on a 64 bit machine! + */ + max_size = buffer_chain_size(); + dma_limit = (MAX_DMA_ADDRESS - ((unsigned long) current_req->buffer)) >> 9; + if ((unsigned long) max_size > dma_limit) { + max_size = dma_limit; + } + /* 64 kb boundaries */ + if (CROSS_64KB(current_req->buffer, max_size << 9)) + max_size = (K_64 - + ((unsigned long)current_req->buffer) % K_64)>>9; + direct = transfer_size(ssize,max_sector,max_size) - fsector_t; + /* + * We try to read tracks, but if we get too many errors, we + * go back to reading just one sector at a time. + * + * This means we should be able to read a sector even if there + * are other bad sectors on this track. + */ + if (!direct || + (indirect * 2 > direct * 3 && + *errors < DP->max_errors.read_track && + /*!TESTF(FD_NEED_TWADDLE) &&*/ + ((!probing || (DP->read_track&(1<probed_format)))))){ + max_size = current_req->nr_sectors; + } else { + raw_cmd->kernel_data = current_req->buffer; + raw_cmd->length = current_count_sectors << 9; + if (raw_cmd->length == 0){ + DPRINT("zero dma transfer attempted from make_raw_request\n"); + DPRINT("indirect=%d direct=%d fsector_t=%d", + indirect, direct, fsector_t); + return 0; + } +/* check_dma_crossing(raw_cmd->kernel_data, + raw_cmd->length, + "end of make_raw_request [1]");*/ + + virtualdmabug_workaround(); + return 2; + } + } + + if (CT(COMMAND) == FD_READ) + max_size = max_sector; /* unbounded */ + + /* claim buffer track if needed */ + if (buffer_track != raw_cmd->track || /* bad track */ + buffer_drive !=current_drive || /* bad drive */ + fsector_t > buffer_max || + fsector_t < buffer_min || + ((CT(COMMAND) == FD_READ || + (!in_sector_offset && current_req->nr_sectors >= ssize))&& + max_sector > 2 * max_buffer_sectors + buffer_min && + max_size + fsector_t > 2 * max_buffer_sectors + buffer_min) + /* not enough space */){ + buffer_track = -1; + buffer_drive = current_drive; + buffer_max = buffer_min = aligned_sector_t; + } + raw_cmd->kernel_data = floppy_track_buffer + + ((aligned_sector_t-buffer_min)<<9); + + if (CT(COMMAND) == FD_WRITE){ + /* copy write buffer to track buffer. + * if we get here, we know that the write + * is either aligned or the data already in the buffer + * (buffer will be overwritten) */ +#ifdef FLOPPY_SANITY_CHECK + if (in_sector_offset && buffer_track == -1) + DPRINT("internal error offset !=0 on write\n"); +#endif + buffer_track = raw_cmd->track; + buffer_drive = current_drive; + copy_buffer(ssize, max_sector, 2*max_buffer_sectors+buffer_min); + } else + transfer_size(ssize, max_sector, + 2*max_buffer_sectors+buffer_min-aligned_sector_t); + + /* round up current_count_sectors to get dma xfer size */ + raw_cmd->length = in_sector_offset+current_count_sectors; + raw_cmd->length = ((raw_cmd->length -1)|(ssize-1))+1; + raw_cmd->length <<= 9; +#ifdef FLOPPY_SANITY_CHECK + /*check_dma_crossing(raw_cmd->kernel_data, raw_cmd->length, + "end of make_raw_request");*/ + if ((raw_cmd->length < current_count_sectors << 9) || + (raw_cmd->kernel_data != current_req->buffer && + CT(COMMAND) == FD_WRITE && + (aligned_sector_t + (raw_cmd->length >> 9) > buffer_max || + aligned_sector_t < buffer_min)) || + raw_cmd->length % (128 << SIZECODE) || + raw_cmd->length <= 0 || current_count_sectors <= 0){ + DPRINT("fractionary current count b=%lx s=%lx\n", + raw_cmd->length, current_count_sectors); + if (raw_cmd->kernel_data != current_req->buffer) + printk("addr=%d, length=%ld\n", + (int) ((raw_cmd->kernel_data - + floppy_track_buffer) >> 9), + current_count_sectors); + printk("st=%d ast=%d mse=%d msi=%d\n", + fsector_t, aligned_sector_t, max_sector, max_size); + printk("ssize=%x SIZECODE=%d\n", ssize, SIZECODE); + printk("command=%x SECTOR=%d HEAD=%d, TRACK=%d\n", + COMMAND, SECTOR, HEAD, TRACK); + printk("buffer drive=%d\n", buffer_drive); + printk("buffer track=%d\n", buffer_track); + printk("buffer_min=%d\n", buffer_min); + printk("buffer_max=%d\n", buffer_max); + return 0; + } + + if (raw_cmd->kernel_data != current_req->buffer){ + if (raw_cmd->kernel_data < floppy_track_buffer || + current_count_sectors < 0 || + raw_cmd->length < 0 || + raw_cmd->kernel_data + raw_cmd->length > + floppy_track_buffer + (max_buffer_sectors << 10)){ + DPRINT("buffer overrun in schedule dma\n"); + printk("fsector_t=%d buffer_min=%d current_count=%ld\n", + fsector_t, buffer_min, + raw_cmd->length >> 9); + printk("current_count_sectors=%ld\n", + current_count_sectors); + if (CT(COMMAND) == FD_READ) + printk("read\n"); + if (CT(COMMAND) == FD_READ) + printk("write\n"); + return 0; + } + } else if (raw_cmd->length > current_req->nr_sectors << 9 || + current_count_sectors > current_req->nr_sectors){ + DPRINT("buffer overrun in direct transfer\n"); + return 0; + } else if (raw_cmd->length < current_count_sectors << 9){ + DPRINT("more sectors than bytes\n"); + printk("bytes=%ld\n", raw_cmd->length >> 9); + printk("sectors=%ld\n", current_count_sectors); + } + if (raw_cmd->length == 0){ + DPRINT("zero dma transfer attempted from make_raw_request\n"); + return 0; + } +#endif + + virtualdmabug_workaround(); + return 2; +} + +static void redo_fd_request(void) +{ +#define REPEAT {request_done(0); continue; } + int drive; + int tmp; + + lastredo = jiffies; + if (current_drive < N_DRIVE) + floppy_off(current_drive); + + for (;;) { + if (!current_req) { + struct request *req; + + spin_lock_irq(floppy_queue.queue_lock); + req = elv_next_request(&floppy_queue); + spin_unlock_irq(floppy_queue.queue_lock); + if (!req) { + do_floppy = NULL; + unlock_fdc(); + return; + } + current_req = req; + } + drive = (long)current_req->rq_disk->private_data; + set_fdc(drive); + reschedule_timeout(current_reqD, "redo fd request", 0); + + set_floppy(drive); + raw_cmd = & default_raw_cmd; + raw_cmd->flags = 0; + if (start_motor(redo_fd_request)) return; + disk_change(current_drive); + if (test_bit(current_drive, &fake_change) || + TESTF(FD_DISK_CHANGED)){ + DPRINT("disk absent or changed during operation\n"); + REPEAT; + } + if (!_floppy) { /* Autodetection */ + if (!probing){ + DRS->probed_format = 0; + if (next_valid_format()){ + DPRINT("no autodetectable formats\n"); + _floppy = NULL; + REPEAT; + } + } + probing = 1; + _floppy = floppy_type+DP->autodetect[DRS->probed_format]; + } else + probing = 0; + errors = & (current_req->errors); + tmp = make_raw_rw_request(); + if (tmp < 2){ + request_done(tmp); + continue; + } + + if (TESTF(FD_NEED_TWADDLE)) + twaddle(); + schedule_bh( (void *)(void *) floppy_start); +#ifdef DEBUGT + debugt("queue fd request"); +#endif + return; + } +#undef REPEAT +} + +static struct cont_t rw_cont={ + rw_interrupt, + redo_fd_request, + bad_flp_intr, + request_done }; + +static void process_fd_request(void) +{ + cont = &rw_cont; + schedule_bh( (void *)(void *) redo_fd_request); +} + +static void do_fd_request(request_queue_t * q) +{ + if(max_buffer_sectors == 0) { + printk("VFS: do_fd_request called on non-open device\n"); + return; + } + + if (usage_count == 0) { + printk("warning: usage count=0, current_req=%p exiting\n", current_req); + printk("sect=%ld flags=%lx\n", (long)current_req->sector, current_req->flags); + return; + } + if (fdc_busy){ + /* fdc busy, this new request will be treated when the + current one is done */ + is_alive("do fd request, old request running"); + return; + } + lock_fdc(MAXTIMEOUT,0); + process_fd_request(); + is_alive("do fd request"); +} + +static struct cont_t poll_cont={ + success_and_wakeup, + floppy_ready, + generic_failure, + generic_done }; + +static int poll_drive(int interruptible, int flag) +{ + int ret; + /* no auto-sense, just clear dcl */ + raw_cmd = &default_raw_cmd; + raw_cmd->flags= flag; + raw_cmd->track=0; + raw_cmd->cmd_count=0; + cont = &poll_cont; +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("setting NEWCHANGE in poll_drive\n"); + } +#endif + SETF(FD_DISK_NEWCHANGE); + WAIT(floppy_ready); + return ret; +} + +/* + * User triggered reset + * ==================== + */ + +static void reset_intr(void) +{ + printk("weird, reset interrupt called\n"); +} + +static struct cont_t reset_cont={ + reset_intr, + success_and_wakeup, + generic_failure, + generic_done }; + +static int user_reset_fdc(int drive, int arg, int interruptible) +{ + int ret; + + ret=0; + LOCK_FDC(drive,interruptible); + if (arg == FD_RESET_ALWAYS) + FDCS->reset=1; + if (FDCS->reset){ + cont = &reset_cont; + WAIT(reset_fdc); + } + process_fd_request(); + return ret; +} + +/* + * Misc Ioctl's and support + * ======================== + */ +static inline int fd_copyout(void *param, const void *address, unsigned long size) +{ + return copy_to_user(param,address, size) ? -EFAULT : 0; +} + +static inline int fd_copyin(void *param, void *address, unsigned long size) +{ + return copy_from_user(address, param, size) ? -EFAULT : 0; +} + +#define _COPYOUT(x) (copy_to_user((void *)param, &(x), sizeof(x)) ? -EFAULT : 0) +#define _COPYIN(x) (copy_from_user(&(x), (void *)param, sizeof(x)) ? -EFAULT : 0) + +#define COPYOUT(x) ECALL(_COPYOUT(x)) +#define COPYIN(x) ECALL(_COPYIN(x)) + +static inline const char *drive_name(int type, int drive) +{ + struct floppy_struct *floppy; + + if (type) + floppy = floppy_type + type; + else { + if (UDP->native_format) + floppy = floppy_type + UDP->native_format; + else + return "(null)"; + } + if (floppy->name) + return floppy->name; + else + return "(null)"; +} + + +/* raw commands */ +static void raw_cmd_done(int flag) +{ + int i; + + if (!flag) { + raw_cmd->flags |= FD_RAW_FAILURE; + raw_cmd->flags |= FD_RAW_HARDFAILURE; + } else { + raw_cmd->reply_count = inr; + if (raw_cmd->reply_count > MAX_REPLIES) + raw_cmd->reply_count=0; + for (i=0; i< raw_cmd->reply_count; i++) + raw_cmd->reply[i] = reply_buffer[i]; + + if (raw_cmd->flags & (FD_RAW_READ | FD_RAW_WRITE)) + { + unsigned long flags; + flags=claim_dma_lock(); + raw_cmd->length = fd_get_dma_residue(); + release_dma_lock(flags); + } + + if ((raw_cmd->flags & FD_RAW_SOFTFAILURE) && + (!raw_cmd->reply_count || (raw_cmd->reply[0] & 0xc0))) + raw_cmd->flags |= FD_RAW_FAILURE; + + if (disk_change(current_drive)) + raw_cmd->flags |= FD_RAW_DISK_CHANGE; + else + raw_cmd->flags &= ~FD_RAW_DISK_CHANGE; + if (raw_cmd->flags & FD_RAW_NO_MOTOR_AFTER) + motor_off_callback(current_drive); + + if (raw_cmd->next && + (!(raw_cmd->flags & FD_RAW_FAILURE) || + !(raw_cmd->flags & FD_RAW_STOP_IF_FAILURE)) && + ((raw_cmd->flags & FD_RAW_FAILURE) || + !(raw_cmd->flags &FD_RAW_STOP_IF_SUCCESS))) { + raw_cmd = raw_cmd->next; + return; + } + } + generic_done(flag); +} + + +static struct cont_t raw_cmd_cont={ + success_and_wakeup, + floppy_start, + generic_failure, + raw_cmd_done +}; + +static inline int raw_cmd_copyout(int cmd, char *param, + struct floppy_raw_cmd *ptr) +{ + int ret; + + while(ptr) { + COPYOUT(*ptr); + param += sizeof(struct floppy_raw_cmd); + if ((ptr->flags & FD_RAW_READ) && ptr->buffer_length){ + if (ptr->length>=0 && ptr->length<=ptr->buffer_length) + ECALL(fd_copyout(ptr->data, + ptr->kernel_data, + ptr->buffer_length - + ptr->length)); + } + ptr = ptr->next; + } + return 0; +} + + +static void raw_cmd_free(struct floppy_raw_cmd **ptr) +{ + struct floppy_raw_cmd *next,*this; + + this = *ptr; + *ptr = 0; + while(this) { + if (this->buffer_length) { + fd_dma_mem_free((unsigned long)this->kernel_data, + this->buffer_length); + this->buffer_length = 0; + } + next = this->next; + kfree(this); + this = next; + } +} + + +static inline int raw_cmd_copyin(int cmd, char *param, + struct floppy_raw_cmd **rcmd) +{ + struct floppy_raw_cmd *ptr; + int ret; + int i; + + *rcmd = 0; + while(1) { + ptr = (struct floppy_raw_cmd *) + kmalloc(sizeof(struct floppy_raw_cmd), GFP_USER); + if (!ptr) + return -ENOMEM; + *rcmd = ptr; + COPYIN(*ptr); + ptr->next = 0; + ptr->buffer_length = 0; + param += sizeof(struct floppy_raw_cmd); + if (ptr->cmd_count > 33) + /* the command may now also take up the space + * initially intended for the reply & the + * reply count. Needed for long 82078 commands + * such as RESTORE, which takes ... 17 command + * bytes. Murphy's law #137: When you reserve + * 16 bytes for a structure, you'll one day + * discover that you really need 17... + */ + return -EINVAL; + + for (i=0; i< 16; i++) + ptr->reply[i] = 0; + ptr->resultcode = 0; + ptr->kernel_data = 0; + + if (ptr->flags & (FD_RAW_READ | FD_RAW_WRITE)) { + if (ptr->length <= 0) + return -EINVAL; + ptr->kernel_data =(char*)fd_dma_mem_alloc(ptr->length); + fallback_on_nodma_alloc(&ptr->kernel_data, + ptr->length); + if (!ptr->kernel_data) + return -ENOMEM; + ptr->buffer_length = ptr->length; + } + if (ptr->flags & FD_RAW_WRITE) + ECALL(fd_copyin(ptr->data, ptr->kernel_data, + ptr->length)); + rcmd = & (ptr->next); + if (!(ptr->flags & FD_RAW_MORE)) + return 0; + ptr->rate &= 0x43; + } +} + + +static int raw_cmd_ioctl(int cmd, void *param) +{ + int drive, ret, ret2; + struct floppy_raw_cmd *my_raw_cmd; + + if (FDCS->rawcmd <= 1) + FDCS->rawcmd = 1; + for (drive= 0; drive < N_DRIVE; drive++){ + if (FDC(drive) != fdc) + continue; + if (drive == current_drive){ + if (UDRS->fd_ref > 1){ + FDCS->rawcmd = 2; + break; + } + } else if (UDRS->fd_ref){ + FDCS->rawcmd = 2; + break; + } + } + + if (FDCS->reset) + return -EIO; + + ret = raw_cmd_copyin(cmd, param, &my_raw_cmd); + if (ret) { + raw_cmd_free(&my_raw_cmd); + return ret; + } + + raw_cmd = my_raw_cmd; + cont = &raw_cmd_cont; + ret=wait_til_done(floppy_start,1); +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from raw_cmd ioctl\n"); + } +#endif + + if (ret != -EINTR && FDCS->reset) + ret = -EIO; + + DRS->track = NO_TRACK; + + ret2 = raw_cmd_copyout(cmd, param, my_raw_cmd); + if (!ret) + ret = ret2; + raw_cmd_free(&my_raw_cmd); + return ret; +} + +static int invalidate_drive(struct block_device *bdev) +{ + /* invalidate the buffer track to force a reread */ + set_bit((long)bdev->bd_disk->private_data, &fake_change); + process_fd_request(); + check_disk_change(bdev); + return 0; +} + + +static inline void clear_write_error(int drive) +{ + CLEARSTRUCT(UDRWE); +} + +static inline int set_geometry(unsigned int cmd, struct floppy_struct *g, + int drive, int type, struct block_device *bdev) +{ + int cnt; + + /* sanity checking for parameters.*/ + if (g->sect <= 0 || + g->head <= 0 || + g->track <= 0 || + g->track > UDP->tracks>>STRETCH(g) || + /* check if reserved bits are set */ + (g->stretch&~(FD_STRETCH|FD_SWAPSIDES)) != 0) + return -EINVAL; + if (type){ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + LOCK_FDC(drive,1); + for (cnt = 0; cnt < N_DRIVE; cnt++){ + if (ITYPE(drive_state[cnt].fd_device) == type && + drive_state[cnt].fd_ref) + set_bit(drive, &fake_change); + } + floppy_type[type] = *g; + floppy_type[type].name="user format"; + for (cnt = type << 2; cnt < (type << 2) + 4; cnt++) + floppy_sizes[cnt]= floppy_sizes[cnt+0x80]= + floppy_type[type].size+1; + process_fd_request(); + for (cnt = 0; cnt < N_DRIVE; cnt++){ + if (ITYPE(drive_state[cnt].fd_device) == type && + drive_state[cnt].fd_ref) + __check_disk_change( + MKDEV(FLOPPY_MAJOR, + drive_state[cnt].fd_device)); + } + } else { + LOCK_FDC(drive,1); + if (cmd != FDDEFPRM) + /* notice a disk change immediately, else + * we lose our settings immediately*/ + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + user_params[drive] = *g; + if (buffer_drive == drive) + SUPBOUND(buffer_max, user_params[drive].sect); + current_type[drive] = &user_params[drive]; + floppy_sizes[drive] = user_params[drive].size; + if (cmd == FDDEFPRM) + DRS->keep_data = -1; + else + DRS->keep_data = 1; + /* invalidation. Invalidate only when needed, i.e. + * when there are already sectors in the buffer cache + * whose number will change. This is useful, because + * mtools often changes the geometry of the disk after + * looking at the boot block */ + if (DRS->maxblock > user_params[drive].sect || DRS->maxtrack) + invalidate_drive(bdev); + else + process_fd_request(); + } + return 0; +} + +/* handle obsolete ioctl's */ +static int ioctl_table[]= { + FDCLRPRM, + FDSETPRM, + FDDEFPRM, + FDGETPRM, + FDMSGON, + FDMSGOFF, + FDFMTBEG, + FDFMTTRK, + FDFMTEND, + FDSETEMSGTRESH, + FDFLUSH, + FDSETMAXERRS, + FDGETMAXERRS, + FDGETDRVTYP, + FDSETDRVPRM, + FDGETDRVPRM, + FDGETDRVSTAT, + FDPOLLDRVSTAT, + FDRESET, + FDGETFDCSTAT, + FDWERRORCLR, + FDWERRORGET, + FDRAWCMD, + FDEJECT, + FDTWADDLE +}; + +static inline int normalize_ioctl(int *cmd, int *size) +{ + int i; + + for (i=0; i < ARRAY_SIZE(ioctl_table); i++) { + if ((*cmd & 0xffff) == (ioctl_table[i] & 0xffff)){ + *size = _IOC_SIZE(*cmd); + *cmd = ioctl_table[i]; + if (*size > _IOC_SIZE(*cmd)) { + printk("ioctl not yet supported\n"); + return -EFAULT; + } + return 0; + } + } + return -EINVAL; +} + +static int get_floppy_geometry(int drive, int type, struct floppy_struct **g) +{ + if (type) + *g = &floppy_type[type]; + else { + LOCK_FDC(drive,0); + CALL(poll_drive(0,0)); + process_fd_request(); + *g = current_type[drive]; + } + if (!*g) + return -ENODEV; + return 0; +} + +static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, + unsigned long param) +{ +#define FD_IOCTL_ALLOWED ((filp) && (filp)->private_data) +#define OUT(c,x) case c: outparam = (const char *) (x); break +#define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0 + + int i,drive,type; + kdev_t device; + int ret; + int size; + union inparam { + struct floppy_struct g; /* geometry */ + struct format_descr f; + struct floppy_max_errors max_errors; + struct floppy_drive_params dp; + } inparam; /* parameters coming from user space */ + const char *outparam; /* parameters passed back to user space */ + + device = inode->i_rdev; + type = TYPE(device); + drive = DRIVE(device); + + /* convert compatibility eject ioctls into floppy eject ioctl. + * We do this in order to provide a means to eject floppy disks before + * installing the new fdutils package */ + if (cmd == CDROMEJECT || /* CD-ROM eject */ + cmd == 0x6470 /* SunOS floppy eject */) { + DPRINT("obsolete eject ioctl\n"); + DPRINT("please use floppycontrol --eject\n"); + cmd = FDEJECT; + } + + /* generic block device ioctls */ + switch(cmd) { + /* the following have been inspired by the corresponding + * code for other block devices. */ + struct floppy_struct *g; + case HDIO_GETGEO: + { + struct hd_geometry loc; + ECALL(get_floppy_geometry(drive, type, &g)); + loc.heads = g->head; + loc.sectors = g->sect; + loc.cylinders = g->track; + loc.start = 0; + return _COPYOUT(loc); + } + } + + /* convert the old style command into a new style command */ + if ((cmd & 0xff00) == 0x0200) { + ECALL(normalize_ioctl(&cmd, &size)); + } else + return -EINVAL; + + /* permission checks */ + if (((cmd & 0x40) && !FD_IOCTL_ALLOWED) || + ((cmd & 0x80) && !capable(CAP_SYS_ADMIN))) + return -EPERM; + + /* copyin */ + CLEARSTRUCT(&inparam); + if (_IOC_DIR(cmd) & _IOC_WRITE) + ECALL(fd_copyin((void *)param, &inparam, size)) + + switch (cmd) { + case FDEJECT: + if (UDRS->fd_ref != 1) + /* somebody else has this drive open */ + return -EBUSY; + LOCK_FDC(drive,1); + + /* do the actual eject. Fails on + * non-Sparc architectures */ + ret=fd_eject(UNIT(drive)); + + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + process_fd_request(); + return ret; + case FDCLRPRM: + LOCK_FDC(drive,1); + current_type[drive] = NULL; + floppy_sizes[drive] = MAX_DISK_SIZE << 1; + UDRS->keep_data = 0; + return invalidate_drive(inode->i_bdev); + case FDSETPRM: + case FDDEFPRM: + return set_geometry(cmd, & inparam.g, + drive, type, inode->i_bdev); + case FDGETPRM: + ECALL(get_floppy_geometry(drive, type, + (struct floppy_struct**) + &outparam)); + break; + + case FDMSGON: + UDP->flags |= FTD_MSG; + return 0; + case FDMSGOFF: + UDP->flags &= ~FTD_MSG; + return 0; + + case FDFMTBEG: + LOCK_FDC(drive,1); + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if(ret & FD_VERIFY){ + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + process_fd_request(); + if (ret & FD_VERIFY) + return -ENODEV; + if (!(ret & FD_DISK_WRITABLE)) + return -EROFS; + return 0; + case FDFMTTRK: + if (UDRS->fd_ref != 1) + return -EBUSY; + return do_format(device, &inparam.f); + case FDFMTEND: + case FDFLUSH: + LOCK_FDC(drive,1); + return invalidate_drive(inode->i_bdev); + + case FDSETEMSGTRESH: + UDP->max_errors.reporting = + (unsigned short) (param & 0x0f); + return 0; + OUT(FDGETMAXERRS, &UDP->max_errors); + IN(FDSETMAXERRS, &UDP->max_errors, max_errors); + + case FDGETDRVTYP: + outparam = drive_name(type,drive); + SUPBOUND(size,strlen(outparam)+1); + break; + + IN(FDSETDRVPRM, UDP, dp); + OUT(FDGETDRVPRM, UDP); + + case FDPOLLDRVSTAT: + LOCK_FDC(drive,1); + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + process_fd_request(); + /* fall through */ + OUT(FDGETDRVSTAT, UDRS); + + case FDRESET: + return user_reset_fdc(drive, (int)param, 1); + + OUT(FDGETFDCSTAT,UFDCS); + + case FDWERRORCLR: + CLEARSTRUCT(UDRWE); + return 0; + OUT(FDWERRORGET,UDRWE); + + case FDRAWCMD: + if (type) + return -EINVAL; + LOCK_FDC(drive,1); + set_floppy(drive); + CALL(i = raw_cmd_ioctl(cmd,(void *) param)); + process_fd_request(); + return i; + + case FDTWADDLE: + LOCK_FDC(drive,1); + twaddle(); + process_fd_request(); + return 0; + + default: + return -EINVAL; + } + + if (_IOC_DIR(cmd) & _IOC_READ) + return fd_copyout((void *)param, outparam, size); + else + return 0; +#undef OUT +#undef IN +} + +static void __init config_types(void) +{ + int first=1; + int drive; + extern struct fd_info { + unsigned char dummy[4 * 6]; + unsigned char fd_types[8]; + } drive_info; + + for (drive = 0; drive < 4; drive++) + UDP->cmos = drive_info.fd_types[drive]; + + /* XXX */ + /* additional physical CMOS drive detection should go here */ + + for (drive=0; drive < N_DRIVE; drive++){ + unsigned int type = UDP->cmos; + struct floppy_drive_params *params; + const char *name = NULL; + static char temparea[32]; + + if (type < NUMBER(default_drive_params)) { + params = &default_drive_params[type].params; + if (type) { + name = default_drive_params[type].name; + allowed_drive_mask |= 1 << drive; + } + else + allowed_drive_mask &= ~(1 << drive); + } else { + params = &default_drive_params[0].params; + sprintf(temparea, "unknown type %d (usb?)", type); + name = temparea; + } + if (name) { + const char * prepend = ","; + if (first) { + prepend = KERN_INFO "Floppy drive(s):"; + first = 0; + } + printk("%s fd%d is %s", prepend, drive, name); + register_devfs_entries (drive); + } + *UDP = *params; + } + if (!first) + printk("\n"); +} + +static int floppy_release(struct inode * inode, struct file * filp) +{ + int drive = DRIVE(inode->i_rdev); + + if (UDRS->fd_ref < 0) + UDRS->fd_ref=0; + else if (!UDRS->fd_ref--) { + DPRINT("floppy_release with fd_ref == 0"); + UDRS->fd_ref = 0; + } + floppy_release_irq_and_dma(); + return 0; +} + +/* + * floppy_open check for aliasing (/dev/fd0 can be the same as + * /dev/PS0 etc), and disallows simultaneous access to the same + * drive with different device numbers. + */ +#define RETERR(x) do{floppy_release(inode,filp); return -(x);}while(0) + +static int floppy_open(struct inode * inode, struct file * filp) +{ + int drive; + int old_dev; + int try; + char *tmp; + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: start\n"); +#endif + filp->private_data = (void*) 0; + + drive = DRIVE(inode->i_rdev); +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: drive=%d, current_drive=%d, UDP->cmos=%d\n" + "floppy open: FDCS={spec1=%d, spec2=%d, dtr=%d, version=%d, dor=%d, address=%lu}\n", + drive, current_drive, UDP->cmos, FDCS->spec1, FDCS->spec2, + FDCS->dtr, FDCS->version, FDCS->dor, FDCS->address); + if (_floppy) { + printk("floppy open: _floppy={size=%d, sect=%d, head=%d, track=%d, spec1=%d}\n", + _floppy->size, _floppy->sect, _floppy->head, + _floppy->track, _floppy->spec1); + } else { + printk("floppy open: _floppy=NULL\n"); + } +#endif /* PC9800_DEBUG_FLOPPY */ + + if (drive >= N_DRIVE || + !(allowed_drive_mask & (1 << drive)) || + fdc_state[FDC(drive)].version == FDC_NONE) + return -ENXIO; + + if (TYPE(inode->i_rdev) >= NUMBER(floppy_type)) + return -ENXIO; + old_dev = UDRS->fd_device; + if (UDRS->fd_ref && old_dev != minor(inode->i_rdev)) + return -EBUSY; + + if (!UDRS->fd_ref && (UDP->flags & FD_BROKEN_DCL)){ + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + } + + if (UDRS->fd_ref == -1 || + (UDRS->fd_ref && (filp->f_flags & O_EXCL))) + return -EBUSY; + + if (floppy_grab_irq_and_dma()) + return -EBUSY; + + if (filp->f_flags & O_EXCL) + UDRS->fd_ref = -1; + else + UDRS->fd_ref++; + + if (!floppy_track_buffer){ + /* if opening an ED drive, reserve a big buffer, + * else reserve a small one */ + if ((UDP->cmos == 6) || (UDP->cmos == 5)) + try = 64; /* Only 48 actually useful */ + else + try = 32; /* Only 24 actually useful */ + + tmp=(char *)fd_dma_mem_alloc(1024 * try); + if (!tmp && !floppy_track_buffer) { + try >>= 1; /* buffer only one side */ + INFBOUND(try, 16); + tmp= (char *)fd_dma_mem_alloc(1024*try); + } + if (!tmp && !floppy_track_buffer) { + fallback_on_nodma_alloc(&tmp, 2048 * try); + } + if (!tmp && !floppy_track_buffer) { + DPRINT("Unable to allocate DMA memory\n"); + RETERR(ENXIO); + } + if (floppy_track_buffer) { + if (tmp) + fd_dma_mem_free((unsigned long)tmp,try*1024); + } else { + buffer_min = buffer_max = -1; + floppy_track_buffer = tmp; + max_buffer_sectors = try; + } + } + + UDRS->fd_device = minor(inode->i_rdev); + set_capacity(disks[drive], floppy_sizes[minor(inode->i_rdev)]); + if (old_dev != -1 && old_dev != minor(inode->i_rdev)) { + if (buffer_drive == drive) + buffer_track = -1; + /* umm, invalidate_buffers() in ->open?? --hch */ + invalidate_buffers(mk_kdev(FLOPPY_MAJOR,old_dev)); + } + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: floppy.c:%d passed\n", __LINE__); +#endif + + + /* Allow ioctls if we have write-permissions even if read-only open. + * Needed so that programs such as fdrawcmd still can work on write + * protected disks */ + if ((filp->f_mode & 2) || + (inode->i_sb && (permission(inode,2) == 0))) + filp->private_data = (void*) 8; + + if (UFDCS->rawcmd == 1) + UFDCS->rawcmd = 2; + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: floppy.c:%d passed\n", __LINE__); +#endif + + if (filp->f_flags & O_NDELAY) + return 0; + if (filp->f_mode & 3) { + UDRS->last_checked = 0; + check_disk_change(inode->i_bdev); + if (UTESTF(FD_DISK_CHANGED)) + RETERR(ENXIO); + } + if ((filp->f_mode & 2) && !(UTESTF(FD_DISK_WRITABLE))) + RETERR(EROFS); +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: end normally\n"); +#endif + + return 0; +#undef RETERR +} + +/* + * Check if the disk has been changed or if a change has been faked. + */ +static int check_floppy_change(struct gendisk *disk) +{ + int drive = (long)disk->private_data; + +#ifdef PC9800_DEBUG_FLOPPY + printk("check_floppy_change: MINOR=%d\n", minor(dev)); +#endif + + if (UTESTF(FD_DISK_CHANGED) || UTESTF(FD_VERIFY)) + return 1; + + if (UDP->checkfreq < (int)(jiffies - UDRS->last_checked)) { + if(floppy_grab_irq_and_dma()) { + return 1; + } + + lock_fdc(drive,0); + poll_drive(0,0); + process_fd_request(); + floppy_release_irq_and_dma(); + } + + if (UTESTF(FD_DISK_CHANGED) || + UTESTF(FD_VERIFY) || + test_bit(drive, &fake_change) || + (!ITYPE(UDRS->fd_device) && !current_type[drive])) + return 1; + return 0; +} + +/* + * This implements "read block 0" for floppy_revalidate(). + * Needed for format autodetection, checking whether there is + * a disk in the drive, and whether that disk is writable. + */ + +static int floppy_rb0_complete(struct bio *bio, unsigned int bytes_done, int err) +{ + if (bio->bi_size) + return 1; + + complete((struct completion*)bio->bi_private); + return 0; +} + +static int __floppy_read_block_0(struct block_device *bdev) +{ + struct bio bio; + struct bio_vec bio_vec; + struct completion complete; + struct page *page; + size_t size; + + page = alloc_page(GFP_NOIO); + if (!page) { + process_fd_request(); + return -ENOMEM; + } + + size = bdev->bd_block_size; + if (!size) + size = 1024; + + bio_init(&bio); + bio.bi_io_vec = &bio_vec; + bio_vec.bv_page = page; + bio_vec.bv_len = size; + bio_vec.bv_offset = 0; + bio.bi_vcnt = 1; + bio.bi_idx = 0; + bio.bi_size = size; + bio.bi_bdev = bdev; + bio.bi_sector = 0; + init_completion(&complete); + bio.bi_private = &complete; + bio.bi_end_io = floppy_rb0_complete; + + submit_bio(READ, &bio); + generic_unplug_device(bdev_get_queue(bdev)); + process_fd_request(); + wait_for_completion(&complete); + + __free_page(page); + + return 0; +} + +static int floppy_read_block_0(struct gendisk *disk) +{ + struct block_device *bdev; + int ret; + + bdev = bdget(MKDEV(disk->major, disk->first_minor)); + if (!bdev) { + printk("No block device for %s\n", disk->disk_name); + BUG(); + } + bdev->bd_disk = disk; /* ewww */ + ret = __floppy_read_block_0(bdev); + atomic_dec(&bdev->bd_count); + return ret; +} + +/* revalidate the floppy disk, i.e. trigger format autodetection by reading + * the bootblock (block 0). "Autodetection" is also needed to check whether + * there is a disk in the drive at all... Thus we also do it for fixed + * geometry formats */ +static int floppy_revalidate(struct gendisk *disk) +{ + int drive=(long)disk->private_data; +#define NO_GEOM (!current_type[drive] && !ITYPE(UDRS->fd_device)) + int cf; + int res = 0; + + if (UTESTF(FD_DISK_CHANGED) || + UTESTF(FD_VERIFY) || + test_bit(drive, &fake_change) || + NO_GEOM){ + if(usage_count == 0) { + printk("VFS: revalidate called on non-open device.\n"); + return -EFAULT; + } + lock_fdc(drive,0); + cf = UTESTF(FD_DISK_CHANGED) || UTESTF(FD_VERIFY); + if (!(cf || test_bit(drive, &fake_change) || NO_GEOM)){ + process_fd_request(); /*already done by another thread*/ + return 0; + } + UDRS->maxblock = 0; + UDRS->maxtrack = 0; + if (buffer_drive == drive) + buffer_track = -1; + clear_bit(drive, &fake_change); + UCLEARF(FD_DISK_CHANGED); + if (cf) + UDRS->generation++; + if (NO_GEOM){ + /* auto-sensing */ + res = floppy_read_block_0(disk); + } else { + if (cf) + poll_drive(0, FD_RAW_NEED_DISK); + process_fd_request(); + } + } + set_capacity(disk, floppy_sizes[UDRS->fd_device]); + return res; +} + +static struct block_device_operations floppy_fops = { + .owner = THIS_MODULE, + .open = floppy_open, + .release = floppy_release, + .ioctl = fd_ioctl, + .media_changed = check_floppy_change, + .revalidate_disk= floppy_revalidate, +}; + +static char *table[] = +{"", +#if 0 +"d360", +#else +"h1232", +#endif +"h1200", "u360", "u720", "h360", "h720", +"u1440", "u2880", "CompaQ", "h1440", "u1680", "h410", +"u820", "h1476", "u1722", "h420", "u830", "h1494", "u1743", +"h880", "u1040", "u1120", "h1600", "u1760", "u1920", +"u3200", "u3520", "u3840", "u1840", "u800", "u1600", +NULL +}; +static int t360[] = {1,0}, t1200[] = {2,5,6,10,12,14,16,18,20,23,0}, +t3in[] = {8,9,26,27,28, 7,11,15,19,24,25,29,31, 3,4,13,17,21,22,30,0}; +static int *table_sup[] = +{NULL, t360, t1200, t3in+5+8, t3in+5, t3in, t3in}; + +static void __init register_devfs_entries (int drive) +{ + int base_minor, i; + + base_minor = (drive < 4) ? drive : (124 + drive); + if (UDP->cmos < NUMBER(default_drive_params)) { + i = 0; + do { + char name[16]; + + sprintf(name, "floppy/%d%s", drive, table[table_sup[UDP->cmos][i]]); + devfs_register(NULL, name, DEVFS_FL_DEFAULT, FLOPPY_MAJOR, + base_minor + (table_sup[UDP->cmos][i] << 2), + S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP |S_IWGRP, + &floppy_fops, NULL); + } while (table_sup[UDP->cmos][i++]); + } +} + +/* + * Floppy Driver initialization + * ============================= + */ + +static inline char __init get_fdc_version(void) +{ + return FDC_8272A; +} + +/* lilo configuration */ + +static void __init floppy_set_flags(int *ints,int param, int param2) +{ + int i; + + for (i=0; i < ARRAY_SIZE(default_drive_params); i++){ + if (param) + default_drive_params[i].params.flags |= param2; + else + default_drive_params[i].params.flags &= ~param2; + } + DPRINT("%s flag 0x%x\n", param2 ? "Setting" : "Clearing", param); +} + +static void __init daring(int *ints,int param, int param2) +{ + int i; + + for (i=0; i < ARRAY_SIZE(default_drive_params); i++){ + if (param){ + default_drive_params[i].params.select_delay = 0; + default_drive_params[i].params.flags |= FD_SILENT_DCL_CLEAR; + } else { + default_drive_params[i].params.select_delay = 2*HZ/100; + default_drive_params[i].params.flags &= ~FD_SILENT_DCL_CLEAR; + } + } + DPRINT("Assuming %s floppy hardware\n", param ? "standard" : "broken"); +} + +static void __init set_cmos(int *ints, int dummy, int dummy2) +{ + int current_drive=0; + + if (ints[0] != 2){ + DPRINT("wrong number of parameters for CMOS\n"); + return; + } + current_drive = ints[1]; + if (current_drive < 0 || current_drive >= 8){ + DPRINT("bad drive for set_cmos\n"); + return; + } +#if N_FDC > 1 + if (current_drive >= 4 && !FDC2) + FDC2 = 0x370; +#endif + DP->cmos = ints[2]; + DPRINT("setting CMOS code to %d\n", ints[2]); +} + +static struct param_table { + const char *name; + void (*fn)(int *ints, int param, int param2); + int *var; + int def_param; + int param2; +} config_params[]={ + { "allowed_drive_mask", 0, &allowed_drive_mask, 0xff, 0}, /* obsolete */ + { "all_drives", 0, &allowed_drive_mask, 0xff, 0 }, /* obsolete */ + { "irq", 0, &FLOPPY_IRQ, DEFAULT_FLOPPY_IRQ, 0 }, + { "dma", 0, &FLOPPY_DMA, DEFAULT_FLOPPY_DMA, 0 }, + + { "daring", daring, 0, 1, 0}, +#if N_FDC > 1 + { "two_fdc", 0, &FDC2, 0x370, 0 }, + { "one_fdc", 0, &FDC2, 0, 0 }, +#endif + { "broken_dcl", floppy_set_flags, 0, 1, FD_BROKEN_DCL }, + { "messages", floppy_set_flags, 0, 1, FTD_MSG }, + { "silent_dcl_clear", floppy_set_flags, 0, 1, FD_SILENT_DCL_CLEAR }, + { "debug", floppy_set_flags, 0, 1, FD_DEBUG }, + + { "nodma", 0, &can_use_virtual_dma, 1, 0 }, + { "yesdma", 0, &can_use_virtual_dma, 0, 0 }, + + { "fifo_depth", 0, &fifo_depth, 0xa, 0 }, + { "nofifo", 0, &no_fifo, 0x20, 0 }, + { "usefifo", 0, &no_fifo, 0, 0 }, + + { "cmos", set_cmos, 0, 0, 0 }, + { "slow", 0, &slow_floppy, 1, 0 }, + + { "unexpected_interrupts", 0, &print_unex, 1, 0 }, + { "no_unexpected_interrupts", 0, &print_unex, 0, 0 }, + + EXTRA_FLOPPY_PARAMS +}; + +static int __init floppy_setup(char *str) +{ + int i; + int param; + int ints[11]; + + str = get_options(str,ARRAY_SIZE(ints),ints); + if (str) { + for (i=0; i< ARRAY_SIZE(config_params); i++){ + if (strcmp(str,config_params[i].name) == 0){ + if (ints[0]) + param = ints[1]; + else + param = config_params[i].def_param; + if (config_params[i].fn) + config_params[i]. + fn(ints,param, + config_params[i].param2); + if (config_params[i].var) { + DPRINT("%s=%d\n", str, param); + *config_params[i].var = param; + } + return 1; + } + } + } + if (str) { + DPRINT("unknown floppy option [%s]\n", str); + + DPRINT("allowed options are:"); + for (i=0; i< ARRAY_SIZE(config_params); i++) + printk(" %s",config_params[i].name); + printk("\n"); + } else + DPRINT("botched floppy option\n"); + DPRINT("Read linux/Documentation/floppy.txt\n"); + return 0; +} + +static int have_no_fdc= -ENODEV; + +static struct platform_device floppy_device = { + .name = "floppy", + .id = 0, + .dev = { + .name = "Floppy Drive", + }, +}; + +static struct gendisk *floppy_find(dev_t dev, int *part, void *data) +{ + int drive = (*part&3) | ((*part&0x80) >> 5); + if (drive >= N_DRIVE || + !(allowed_drive_mask & (1 << drive)) || + fdc_state[FDC(drive)].version == FDC_NONE) + return NULL; + return get_disk(disks[drive]); +} + +int __init floppy_init(void) +{ + int i,unit,drive; + int err; + + raw_cmd = NULL; + FDC1 = 0x90; + + for (i=0; imajor = FLOPPY_MAJOR; + disks[i]->first_minor = TOMINOR(i); + disks[i]->fops = &floppy_fops; + sprintf(disks[i]->disk_name, "fd%d", i); + } + + blk_register_region(MKDEV(FLOPPY_MAJOR, 0), 256, THIS_MODULE, + floppy_find, NULL, NULL); + + for (i=0; i<256; i++) + if (ITYPE(i)) + floppy_sizes[i] = floppy_type[ITYPE(i)].size; + else + floppy_sizes[i] = MAX_DISK_SIZE << 1; + + blk_init_queue(&floppy_queue, do_fd_request, &floppy_lock); + reschedule_timeout(MAXTIMEOUT, "floppy init", MAXTIMEOUT); + config_types(); + + for (i = 0; i < N_FDC; i++) { + fdc = i; + CLEARSTRUCT(FDCS); + FDCS->dtr = -1; + FDCS->dor = 0; + } + + if ((fd_inb(FD_MODE_CHANGE) & 1) == 0) + FDC1 = 0xc8; + + use_virtual_dma = can_use_virtual_dma & 1; + fdc_state[0].address = FDC1; + if (fdc_state[0].address == -1) { + err = -ENODEV; + goto out1; + } +#if N_FDC > 1 + fdc_state[1].address = FDC2; +#endif + + fdc = 0; /* reset fdc in case of unexpected interrupt */ + if (floppy_grab_irq_and_dma()){ + err = -EBUSY; + goto out1; + } + + /* initialise drive state */ + for (drive = 0; drive < N_DRIVE; drive++) { + CLEARSTRUCT(UDRS); + CLEARSTRUCT(UDRWE); + USETF(FD_DISK_NEWCHANGE); + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + UDRS->fd_device = -1; + floppy_track_buffer = NULL; + max_buffer_sectors = 0; + } + + for (i = 0; i < N_FDC; i++) { + fdc = i; + FDCS->driver_version = FD_DRIVER_VERSION; + for (unit=0; unit<4; unit++) + FDCS->track[unit] = 0; + if (FDCS->address == -1) + continue; + FDCS->rawcmd = 2; + user_reset_fdc(-1, FD_RESET_ALWAYS, 0); + + /* Try to determine the floppy controller type */ + FDCS->version = get_fdc_version(); + if (FDCS->version == FDC_NONE){ + /* free ioports reserved by floppy_grab_irq_and_dma() */ + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + release_region(0xbe, 1); + release_region(0x4be, 1); + FDCS->address = -1; + continue; + } + if (can_use_virtual_dma == 2 && FDCS->version < FDC_82072A) + can_use_virtual_dma = 0; + + have_no_fdc = 0; + /* Not all FDCs seem to be able to handle the version command + * properly, so force a reset for the standard FDC clones, + * to avoid interrupt garbage. + */ + user_reset_fdc(-1,FD_RESET_ALWAYS,0); + } + fdc=0; + del_timer(&fd_timeout); + current_drive = 0; + floppy_release_irq_and_dma(); +#if 0 /* no message */ + initialising=0; +#endif + if (have_no_fdc) { + DPRINT("no floppy controllers found\n"); + flush_scheduled_work(); + if (usage_count) + floppy_release_irq_and_dma(); + err = have_no_fdc; + goto out2; + } + + for (drive = 0; drive < N_DRIVE; drive++) { + init_timer(&motor_off_timer[drive]); + motor_off_timer[drive].data = drive; + motor_off_timer[drive].function = motor_off_callback; + if (!(allowed_drive_mask & (1 << drive))) + continue; + if (fdc_state[FDC(drive)].version == FDC_NONE) + continue; + /* to be cleaned up... */ + disks[drive]->private_data = (void*)(long)drive; + disks[drive]->queue = &floppy_queue; + add_disk(disks[drive]); + } + + platform_device_register(&floppy_device); + return 0; + +out1: + del_timer(&fd_timeout); +out2: + blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); + unregister_blkdev(FLOPPY_MAJOR,"fd"); + blk_cleanup_queue(&floppy_queue); +out: + for (i=0; iaddress != -1){ + static char floppy[] = "floppy"; + if (!request_region(FDCS->address, 1, floppy)) + goto cleanup0; + + if (!request_region(FDCS->address + 2, 1, floppy)) { + release_region(FDCS->address, 1); + goto cleanup0; + } + + if (!request_region(FDCS->address + 4, 1, floppy)) { + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + goto cleanup0; + } + + if (fdc == 0) { /* internal FDC */ + if (request_region(0xbe, 1, "floppy mode change")) { + if (request_region(0x4be, 1, "floppy ex. mode change")) + continue; + else + DPRINT("Floppy io-port 0x4be in use\n"); + + release_region(0xbe, 1); + } else + DPRINT("Floppy io-port 0xbe in use\n"); + + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + } + + goto cleanup1; + } + } + for (fdc=0; fdc< N_FDC; fdc++){ + if (FDCS->address != -1){ + reset_fdc_info(1); + fd_outb(FDCS->dor, FD_MODE); + } + } + fdc = 0; + fd_outb((FDCS->dor & 8), FD_MODE); + + for (fdc = 0; fdc < N_FDC; fdc++) + if (FDCS->address != -1) + fd_outb(FDCS->dor, FD_MODE); + /* + * The driver will try and free resources and relies on us + * to know if they were allocated or not. + */ + fdc = 0; + irqdma_allocated = 1; + return 0; + +cleanup0: + DPRINT("Floppy io-port 0x%04lx in use\n", FDCS->address); +cleanup1: + fd_free_irq(); + fd_free_dma(); + while(--fdc >= 0) { + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + if (fdc == 0) { + release_region(0x00be, 1); + release_region(0x04be, 1); + } + } + MOD_DEC_USE_COUNT; + spin_lock_irqsave(&floppy_usage_lock, flags); + usage_count--; + spin_unlock_irqrestore(&floppy_usage_lock, flags); + return -1; +} + +static void floppy_release_irq_and_dma(void) +{ + int old_fdc; +#ifdef FLOPPY_SANITY_CHECK + int drive; +#endif + long tmpsize; + unsigned long tmpaddr; + unsigned long flags; + + spin_lock_irqsave(&floppy_usage_lock, flags); + if (--usage_count){ + spin_unlock_irqrestore(&floppy_usage_lock, flags); + return; + } + spin_unlock_irqrestore(&floppy_usage_lock, flags); + if(irqdma_allocated) + { + fd_disable_dma(); + fd_free_dma(); + fd_free_irq(); + irqdma_allocated=0; + } + fd_outb(0, FD_MODE); + floppy_enable_hlt(); + + if (floppy_track_buffer && max_buffer_sectors) { + tmpsize = max_buffer_sectors*1024; + tmpaddr = (unsigned long)floppy_track_buffer; + floppy_track_buffer = NULL; + max_buffer_sectors = 0; + buffer_min = buffer_max = -1; + fd_dma_mem_free(tmpaddr, tmpsize); + } + +#ifdef FLOPPY_SANITY_CHECK + for (drive=0; drive < N_FDC * 4; drive++) + if (timer_pending(motor_off_timer + drive)) + printk("motor off timer %d still active\n", drive); + + if (timer_pending(&fd_timeout)) + printk("floppy timer still active:%s\n", timeout_message); + if (timer_pending(&fd_timer)) + printk("auxiliary floppy timer still active\n"); + if (floppy_work.pending) + printk("work still pending\n"); +#endif + old_fdc = fdc; + for (fdc = 0; fdc < N_FDC; fdc++) + if (FDCS->address != -1) { + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + if (fdc == 0) { + release_region(0xbe, 1); + release_region(0x4be, 1); + } + } + fdc = old_fdc; + MOD_DEC_USE_COUNT; +} + + +#ifdef MODULE + +char *floppy; + +static void unregister_devfs_entries (int drive) +{ + int i; + + if (UDP->cmos < NUMBER(default_drive_params)) { + i = 0; + do { + devfs_remove("floppy/%d%s", drive, table[table_sup[UDP->cmos][i]]); + } while (table_sup[UDP->cmos][i++]); + } +} + +static void __init parse_floppy_cfg_string(char *cfg) +{ + char *ptr; + + while(*cfg) { + for(ptr = cfg;*cfg && *cfg != ' ' && *cfg != '\t'; cfg++); + if (*cfg) { + *cfg = '\0'; + cfg++; + } + if (*ptr) + floppy_setup(ptr); + } +} + +int init_module(void) +{ + printk(KERN_INFO "inserting floppy driver for " UTS_RELEASE "\n"); + + if (floppy) + parse_floppy_cfg_string(floppy); + return floppy_init(); +} + +void cleanup_module(void) +{ + int drive; + + platform_device_unregister(&floppy_device); + blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); + unregister_blkdev(FLOPPY_MAJOR, "fd"); + for (drive = 0; drive < N_DRIVE; drive++) { + if ((allowed_drive_mask & (1 << drive)) && + fdc_state[FDC(drive)].version != FDC_NONE) { + del_gendisk(disks[drive]); + unregister_devfs_entries(drive); + } + put_disk(disks[drive]); + } + devfs_remove("floppy"); + + blk_cleanup_queue(&floppy_queue); + /* eject disk, if any */ + fd_eject(0); +} + +MODULE_PARM(floppy,"s"); +MODULE_PARM(FLOPPY_IRQ,"i"); +MODULE_PARM(FLOPPY_DMA,"i"); +MODULE_AUTHOR("Osamu Tomita"); +MODULE_SUPPORTED_DEVICE("fd"); +MODULE_LICENSE("GPL"); + +#else + +__setup ("floppy=", floppy_setup); +module_init(floppy_init) +#endif diff -Nru a/drivers/block/genhd.c b/drivers/block/genhd.c --- a/drivers/block/genhd.c Sat Apr 12 14:44:08 2003 +++ b/drivers/block/genhd.c Sat Apr 12 14:44:08 2003 @@ -525,9 +525,21 @@ .default_attrs = default_attrs, }; +extern struct kobj_type ktype_part; + +static int block_hotplug_filter(struct kset *kset, struct kobject *kobj) +{ + struct kobj_type *ktype = get_ktype(kobj); + + return ((ktype == &ktype_block) || (ktype == &ktype_part)); +} + +static struct kset_hotplug_ops block_hotplug_ops = { + .filter = block_hotplug_filter, +}; /* declare block_subsys. */ -static decl_subsys(block,&ktype_block); +static decl_subsys(block, &ktype_block, &block_hotplug_ops); struct gendisk *alloc_disk(int minors) diff -Nru a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c --- a/drivers/block/paride/pf.c Sat Apr 12 14:44:09 2003 +++ b/drivers/block/paride/pf.c Sat Apr 12 14:44:09 2003 @@ -780,10 +780,10 @@ if (pf_busy) return; repeat: - if (elv_queue_empty(q)) + pf_req = elv_next_request(q); + if (!pf_req) return; - pf_req = elv_next_request(q); pf_current = pf_req->rq_disk->private_data; pf_block = pf_req->sector; pf_run = pf_req->nr_sectors; diff -Nru a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c --- a/drivers/block/paride/pg.c Sat Apr 12 14:44:09 2003 +++ b/drivers/block/paride/pg.c Sat Apr 12 14:44:09 2003 @@ -233,14 +233,14 @@ int busy; /* write done, read expected */ int start; /* jiffies at command start */ int dlen; /* transfer size requested */ - int timeout; /* timeout requested */ + unsigned long timeout; /* timeout requested */ int status; /* last sense key */ int drive; /* drive */ unsigned long access; /* count of active opens ... */ int present; /* device present ? */ char *bufptr; char name[PG_NAMELEN]; /* pg0, pg1, ... */ - }; +}; struct pg_unit pg[PG_UNITS]; @@ -292,43 +292,47 @@ schedule_timeout(cs); } -static int pg_wait( int unit, int go, int stop, int tmo, char * msg ) - -{ int j, r, e, s, p; +static int pg_wait(int unit, int go, int stop, unsigned long tmo, char *msg) +{ + int j, r, e, s, p, to; PG.status = 0; j = 0; - while ((((r=RR(1,6))&go)||(stop&&(!(r&stop))))&&(time_before(jiffies,tmo))) { - if (j++ < PG_SPIN) udelay(PG_SPIN_DEL); - else pg_sleep(1); - } - - if ((r&(STAT_ERR&stop))||time_after_eq(jiffies, tmo)) { - s = RR(0,7); - e = RR(0,1); - p = RR(0,2); - if (verbose > 1) - printk("%s: %s: stat=0x%x err=0x%x phase=%d%s\n", - PG.name,msg,s,e,p,time_after_eq(jiffies, tmo)?" timeout":""); - - - if (time_after_eq(jiffies, tmo)) e |= 0x100; - PG.status = (e >> 4) & 0xff; - return -1; + while ((((r=RR(1,6))&go) || (stop&&(!(r&stop)))) + && time_before(jiffies,tmo)) { + if (j++ < PG_SPIN) + udelay(PG_SPIN_DEL); + else + pg_sleep(1); + } + + to = time_after_eq(jiffies, tmo); + + if ((r&(STAT_ERR&stop)) || to) { + s = RR(0,7); + e = RR(0,1); + p = RR(0,2); + if (verbose > 1) + printk("%s: %s: stat=0x%x err=0x%x phase=%d%s\n", + PG.name, msg, s, e, p, to ? " timeout" : ""); + if (to) + e |= 0x100; + PG.status = (e >> 4) & 0xff; + return -1; } return 0; } -static int pg_command( int unit, char * cmd, int dlen, int tmo ) - -{ int k; +static int pg_command(int unit, char *cmd, int dlen, unsigned long tmo) +{ + int k; pi_connect(PI); WR(0,6,DRIVE); - if (pg_wait(unit,STAT_BUSY|STAT_DRQ,0,tmo,"before command")) { + if (pg_wait(unit, STAT_BUSY|STAT_DRQ, 0, tmo, "before command")) { pi_disconnect(PI); return -1; } @@ -337,15 +341,15 @@ WR(0,5,dlen / 256); WR(0,7,0xa0); /* ATAPI packet command */ - if (pg_wait(unit,STAT_BUSY,STAT_DRQ,tmo,"command DRQ")) { + if (pg_wait(unit, STAT_BUSY, STAT_DRQ, tmo, "command DRQ")) { pi_disconnect(PI); return -1; } if (RR(0,2) != 1) { - printk("%s: command phase error\n",PG.name); - pi_disconnect(PI); - return -1; + printk("%s: command phase error\n",PG.name); + pi_disconnect(PI); + return -1; } pi_write_block(PI,cmd,12); @@ -358,27 +362,30 @@ return 0; } -static int pg_completion( int unit, char * buf, int tmo) - -{ int r, d, n, p; +static int pg_completion(int unit, char *buf, unsigned long tmo) +{ + int r, d, n, p; - r = pg_wait(unit,STAT_BUSY,STAT_DRQ|STAT_READY|STAT_ERR, - tmo,"completion"); + r = pg_wait(unit, STAT_BUSY, STAT_DRQ|STAT_READY|STAT_ERR, + tmo, "completion"); PG.dlen = 0; while (RR(0,7)&STAT_DRQ) { - d = (RR(0,4)+256*RR(0,5)); - n = ((d+3)&0xfffc); - p = RR(0,2)&3; - if (p == 0) pi_write_block(PI,buf,n); - if (p == 2) pi_read_block(PI,buf,n); - if (verbose > 1) printk("%s: %s %d bytes\n",PG.name, - p?"Read":"Write",n); - PG.dlen += (1-p)*d; - buf += d; - r = pg_wait(unit,STAT_BUSY,STAT_DRQ|STAT_READY|STAT_ERR, - tmo,"completion"); + d = (RR(0,4)+256*RR(0,5)); + n = ((d+3)&0xfffc); + p = RR(0,2)&3; + if (p == 0) + pi_write_block(PI,buf,n); + if (p == 2) + pi_read_block(PI,buf,n); + if (verbose > 1) + printk("%s: %s %d bytes\n", PG.name, + p?"Read":"Write", n); + PG.dlen += (1-p)*d; + buf += d; + r = pg_wait(unit, STAT_BUSY, STAT_DRQ|STAT_READY|STAT_ERR, + tmo, "completion"); } pi_disconnect(PI); diff -Nru a/drivers/block/paride/pseudo.h b/drivers/block/paride/pseudo.h --- a/drivers/block/paride/pseudo.h Sat Apr 12 14:44:07 2003 +++ b/drivers/block/paride/pseudo.h Sat Apr 12 14:44:07 2003 @@ -39,7 +39,7 @@ static void (* ps_continuation)(void); static int (* ps_ready)(void); -static int ps_timeout; +static unsigned long ps_timeout; static int ps_tq_active = 0; static int ps_nice = 0; @@ -70,7 +70,7 @@ spin_unlock_irqrestore(&ps_spinlock,flags); } -static void ps_tq_int( void *data ) +static void ps_tq_int(void *data) { void (*con)(void); unsigned long flags; diff -Nru a/drivers/char/Kconfig b/drivers/char/Kconfig --- a/drivers/char/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/char/Kconfig Sat Apr 12 14:44:06 2003 @@ -575,6 +575,17 @@ console. This driver allows each pSeries partition to have a console which is accessed via the HMC. +config PC9800_OLDLP + tristate "NEC PC-9800 old-style printer port support" + depends on X86_PC9800 && !PARPORT + ---help--- + If you intend to attach a printer to the parallel port of NEC PC-9801 + /PC-9821 with OLD compatibility mode, Say Y. + +config PC9800_OLDLP_CONSOLE + bool "Support for console on line printer" + depends on PC9800_OLDLP + source "drivers/i2c/Kconfig" @@ -755,7 +766,7 @@ config RTC tristate "Enhanced Real Time Clock Support" - depends on !PPC32 && !PARISC && !IA64 + depends on !PPC32 && !PARISC && !IA64 && !X86_PC9800 ---help--- If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you @@ -813,6 +824,15 @@ config EFI_RTC bool "EFI Real Time Clock Services" depends on IA64 + +config RTC98 + tristate "NEC PC-9800 Real Time Clock Support" + depends on X86_PC9800 + default y + ---help--- + If you say Y here and create a character special file /dev/rtc with + major number 10 and minor number 135 using mknod ("man mknod"), you + will get access to the real time clock (or hardware clock) built config H8 bool "Tadpole ANA H8 Support (OBSOLETE)" diff -Nru a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig --- a/drivers/char/agp/Kconfig Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/Kconfig Sat Apr 12 14:44:08 2003 @@ -29,17 +29,13 @@ bool "/dev/agpgart (AGP Support)" depends on GART_IOMMU -config AGP3 - bool "AGP 3.0 compliance (EXPERIMENTAL)" - depends on AGP - config AGP_INTEL - tristate "Intel 440LX/BX/GX and I815/I820/830M/I830MP/I840/I845/845G/I850/852GM/855GM/I860/865G support" - depends on AGP + tristate "Intel 440LX/BX/GX, I8xx and E7x05 support" + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the - XFree86 4.x on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850 - and 860 chipsets and full support for the 810, 815, 830M, 845G, + XFree86 4.x on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850, 860 + E7205 and E7505 chipsets and full support for the 810, 815, 830M, 845G, 852GM, 855GM and 865G integrated graphics chipsets. You should say Y here if you use XFree86 3.3.6 or 4.x and want to @@ -48,7 +44,7 @@ #config AGP_I810 # tristate "Intel I810/I815/I830M (on-board) support" -# depends on AGP +# depends on AGP && !X86_64 # help # This option gives you AGP support for the Xserver on the Intel 810 # 815 and 830m chipset boards for their on-board integrated graphics. This @@ -56,7 +52,7 @@ config AGP_VIA tristate "VIA chipset support" - depends on AGP + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the XFree86 4.x on VIA MPV3/Apollo Pro chipsets. @@ -66,7 +62,7 @@ config AGP_AMD tristate "AMD Irongate, 761, and 762 support" - depends on AGP + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the XFree86 4.x on AMD Irongate, 761, and 762 chipsets. @@ -76,7 +72,7 @@ config AGP_SIS tristate "Generic SiS support" - depends on AGP + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the "soon to be released" XFree86 4.x on Silicon Integrated Systems [SiS] @@ -89,7 +85,7 @@ config AGP_ALI tristate "ALI chipset support" - depends on AGP + depends on AGP && !X86_64 ---help--- This option gives you AGP support for the GLX component of the XFree86 4.x on the following ALi chipsets. The supported chipsets @@ -107,7 +103,7 @@ config AGP_SWORKS tristate "Serverworks LE/HE support" - depends on AGP + depends on AGP && !X86_64 help Say Y here to support the Serverworks AGP card. See for product descriptions and images. @@ -138,16 +134,4 @@ tristate depends on AGP && (ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL) default AGP - -# Put AGP 3.0 entries below here. - -config AGP_I7505 - tristate "Intel 7205/7505 support (AGP 3.0)" - depends on AGP3 - help - This option gives you AGP support for the GLX component of the - XFree86 4.x on Intel I7505 chipsets. - - You should say Y here if you use XFree86 3.3.6 or 4.x and want to - use GLX or DRI. If unsure, say N diff -Nru a/drivers/char/agp/Makefile b/drivers/char/agp/Makefile --- a/drivers/char/agp/Makefile Sat Apr 12 14:44:07 2003 +++ b/drivers/char/agp/Makefile Sat Apr 12 14:44:07 2003 @@ -3,8 +3,7 @@ # space ioctl interface to use agp memory. It also adds a kernel interface # that other drivers could use to manipulate agp memory. -agpgart-y := backend.o frontend.o generic.o -agpgart-$(CONFIG_AGP3) += generic-3.0.o +agpgart-y := backend.o frontend.o generic.o generic-3.0.o agpgart-objs := $(agpgart-y) obj-$(CONFIG_AGP) += agpgart.o @@ -19,5 +18,4 @@ obj-$(CONFIG_AGP_AMD_8151) += amd-k8-agp.o obj-$(CONFIG_AGP_ALPHA_CORE) += alpha-agp.o -obj-$(CONFIG_AGP_I7x05) += i7x05-agp.o diff -Nru a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h --- a/drivers/char/agp/agp.h Sat Apr 12 14:44:07 2003 +++ b/drivers/char/agp/agp.h Sat Apr 12 14:44:07 2003 @@ -1,6 +1,6 @@ /* * AGPGART - * Copyright (C) 2002 Dave Jones + * Copyright (C) 2002-2003 Dave Jones * Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. @@ -46,7 +46,7 @@ panic(PFX "timed out waiting for the other CPUs!\n"); } #else -static inline void global_cache_flush(void) +static void global_cache_flush(void) { flush_agp_cache(); } @@ -281,6 +281,7 @@ #define INTEL_I7505_ATTBASE 0x78 #define INTEL_I7505_ERRSTS 0x42 #define INTEL_I7505_AGPCTRL 0x70 +#define INTEL_I7505_MCHCFG 0x50 /* VIA register */ #define VIA_APBASE 0x10 @@ -380,8 +381,7 @@ /* Generic routines. */ -void agp_generic_agp_enable(u32 mode); -void agp_generic_agp_3_0_enable(u32 mode); +void agp_generic_enable(u32 mode); int agp_generic_create_gatt_table(void); int agp_generic_free_gatt_table(void); agp_memory *agp_create_memory(int scratch_pages); @@ -399,5 +399,6 @@ int agp_unregister_driver(struct agp_driver *drv); u32 agp_collect_device_status(u32 mode, u32 command); void agp_device_command(u32 command, int agp_v3); +int agp_3_0_node_enable(u32 mode, u32 minor); #endif /* _AGP_BACKEND_PRIV_H */ diff -Nru a/drivers/char/agp/ali-agp.c b/drivers/char/agp/ali-agp.c --- a/drivers/char/agp/ali-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/ali-agp.c Sat Apr 12 14:44:08 2003 @@ -208,7 +208,7 @@ agp_bridge->cleanup = ali_cleanup; agp_bridge->tlb_flush = ali_tlbflush; agp_bridge->mask_memory = ali_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = ali_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; diff -Nru a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c --- a/drivers/char/agp/amd-k7-agp.c Sat Apr 12 14:44:10 2003 +++ b/drivers/char/agp/amd-k7-agp.c Sat Apr 12 14:44:10 2003 @@ -368,7 +368,7 @@ agp_bridge->cleanup = amd_irongate_cleanup; agp_bridge->tlb_flush = amd_irongate_tlbflush; agp_bridge->mask_memory = amd_irongate_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = amd_create_gatt_table; agp_bridge->free_gatt_table = amd_free_gatt_table; diff -Nru a/drivers/char/agp/amd-k8-agp.c b/drivers/char/agp/amd-k8-agp.c --- a/drivers/char/agp/amd-k8-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/amd-k8-agp.c Sat Apr 12 14:44:08 2003 @@ -1,12 +1,12 @@ /* - * Copyright 2001,2002 SuSE Labs + * Copyright 2001-2003 SuSE Labs. * Distributed under the GNU public license, v2. * - * This is a GART driver for the AMD K8 northbridge and the AMD 8151 - * AGP bridge. The main work is done in the northbridge. The configuration - * is only mirrored in the 8151 for compatibility (could be likely - * removed now). - */ + * This is a GART driver for the AMD Opteron/Athlon64 on-CPU northbridge. + * It also includes support for the AMD 8151 AGP bridge, + * although it doesn't actually do much, as all the real + * work is done in the northbridge(s). + */ /* * On x86-64 the AGP driver needs to be initialized early by the IOMMU @@ -224,7 +224,7 @@ static struct gatt_mask amd_8151_masks[] = { - {0x00000001, 0} + {.mask = 0x00000001, .type = 0} }; @@ -265,7 +265,7 @@ /* If not enough, go to AGP v2 setup */ if (v3_devs<2) { printk (KERN_INFO "AGP: Only %d devices found, not enough, trying AGPv2\n", v3_devs); - return agp_generic_agp_enable(mode); + return agp_generic_enable(mode); } else { printk (KERN_INFO "AGP: Enough AGPv3 devices found, setting up...\n"); } @@ -339,6 +339,8 @@ cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP); if (cap_ptr == 0) return -ENODEV; + + printk (KERN_INFO PFX "Detected Opteron/Athlon64 on-CPU GART\n"); agp_bridge->dev = dev; agp_bridge->capndx = cap_ptr; diff -Nru a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c --- a/drivers/char/agp/backend.c Sat Apr 12 14:44:09 2003 +++ b/drivers/char/agp/backend.c Sat Apr 12 14:44:09 2003 @@ -1,6 +1,6 @@ /* * AGPGART driver backend routines. - * Copyright (C) 2002 Dave Jones. + * Copyright (C) 2002-2003 Dave Jones. * Copyright (C) 1999 Jeff Hartmann. * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. diff -Nru a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c --- a/drivers/char/agp/frontend.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/agp/frontend.c Sat Apr 12 14:44:06 2003 @@ -1,6 +1,6 @@ /* * AGPGART driver frontend - * Copyright (C) 2002 Dave Jones + * Copyright (C) 2002-2003 Dave Jones * Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. diff -Nru a/drivers/char/agp/generic-3.0.c b/drivers/char/agp/generic-3.0.c --- a/drivers/char/agp/generic-3.0.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/agp/generic-3.0.c Sat Apr 12 14:44:06 2003 @@ -319,10 +319,10 @@ * Fully configure and enable an AGP 3.0 host bridge and all the devices * lying behind it. */ -static int agp_3_0_node_enable(u32 mode, u32 minor) +int agp_3_0_node_enable(u32 mode, u32 minor) { struct pci_dev *td = agp_bridge->dev, *dev; - u8 bus_num, mcapndx; + u8 mcapndx; u32 isoch, arqsz, cal_cycle, tmp, rate; u32 tstatus, tcmd, mcmd, mstatus, ncapid; u32 mmajor, mminor; @@ -343,23 +343,30 @@ head = &dev_list->list; INIT_LIST_HEAD(head); - /* - * Find all the devices on this bridge's secondary bus and add them - * to dev_list. - */ - pci_read_config_byte(td, PCI_SECONDARY_BUS, &bus_num); - pci_for_each_dev(dev) { - if(dev->bus->number == bus_num) { - if((cur = kmalloc(sizeof(*cur), GFP_KERNEL)) == NULL) { - ret = -ENOMEM; - goto free_and_exit; - } - - cur->dev = dev; + /* Find all AGP devices, and add them to dev_list. */ + pci_for_each_dev(dev) { + switch ((dev->class >>8) & 0xff00) { + case 0x0001: /* Unclassified device */ + case 0x0300: /* Display controller */ + case 0x0400: /* Multimedia controller */ + case 0x0600: /* Bridge */ + mcapndx = pci_find_capability(dev, PCI_CAP_ID_AGP); + if (mcapndx == 0) + continue; + + if((cur = kmalloc(sizeof(*cur), GFP_KERNEL)) == NULL) { + ret = -ENOMEM; + goto free_and_exit; + } + cur->dev = dev; + + pos = &cur->list; + list_add(pos, head); + ndevs++; + continue; - pos = &cur->list; - list_add(pos, head); - ndevs++; + default: + continue; } } @@ -518,33 +525,5 @@ return ret; } -/* - * Entry point to AGP 3.0 host bridge init. Check to see if we - * have an AGP 3.0 device operating in 3.0 mode. Call - * agp_3_0_node_enable or agp_generic_agp_enable if we don't - * (AGP 3.0 devices are required to operate as AGP 2.0 devices - * when not using 3.0 electricals. - */ -void agp_generic_agp_3_0_enable(u32 mode) -{ - u32 ncapid, major, minor, agp_3_0; - - pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx, &ncapid); - - major = (ncapid >> 20) & 0xf; - minor = (ncapid >> 16) & 0xf; - - printk(KERN_INFO PFX "Found an AGP %d.%d compliant device.\n",major, minor); - - if(major >= 3) { - pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + 0x4, &agp_3_0); - /* - * Check to see if we are operating in 3.0 mode - */ - if((agp_3_0 >> 3) & 0x1) - agp_3_0_node_enable(mode, minor); - } -} - -EXPORT_SYMBOL(agp_generic_agp_3_0_enable); +EXPORT_SYMBOL_GPL(agp_3_0_node_enable); diff -Nru a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c --- a/drivers/char/agp/generic.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/agp/generic.c Sat Apr 12 14:44:07 2003 @@ -34,6 +34,7 @@ #include #include #include +#include #include "agp.h" __u32 *agp_gatt_table; @@ -392,21 +393,37 @@ } } -void agp_generic_agp_enable(u32 mode) +void agp_generic_enable(u32 mode) { - u32 command; + u32 command, ncapid, major, minor; + pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx, &ncapid); + major = (ncapid >> 20) & 0xf; + minor = (ncapid >> 16) & 0xf; + printk(KERN_INFO PFX "Found an AGP %d.%d compliant device.\n",major, minor); + + if(major >= 3) { + u32 agp_3_0; + + pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + 0x4, &agp_3_0); + /* Check to see if we are operating in 3.0 mode */ + if((agp_3_0 >> 3) & 0x1) { + agp_3_0_node_enable(mode, minor); + return; + } else { + printk (KERN_INFO PFX "not in AGP 3.0 mode, falling back to 2.x\n"); + } + } + + /* AGP v<3 */ pci_read_config_dword(agp_bridge->dev, - agp_bridge->capndx + PCI_AGP_STATUS, - &command); + agp_bridge->capndx + PCI_AGP_STATUS, &command); command = agp_collect_device_status(mode, command); command |= 0x100; pci_write_config_dword(agp_bridge->dev, - agp_bridge->capndx + PCI_AGP_COMMAND, - command); - + agp_bridge->capndx + PCI_AGP_COMMAND, command); agp_device_command(command, 0); } @@ -745,7 +762,7 @@ EXPORT_SYMBOL(agp_generic_destroy_page); EXPORT_SYMBOL(agp_generic_suspend); EXPORT_SYMBOL(agp_generic_resume); -EXPORT_SYMBOL(agp_generic_agp_enable); +EXPORT_SYMBOL(agp_generic_enable); EXPORT_SYMBOL(agp_generic_create_gatt_table); EXPORT_SYMBOL(agp_generic_free_gatt_table); EXPORT_SYMBOL(agp_generic_insert_memory); diff -Nru a/drivers/char/agp/hp-agp.c b/drivers/char/agp/hp-agp.c --- a/drivers/char/agp/hp-agp.c Sat Apr 12 14:44:09 2003 +++ b/drivers/char/agp/hp-agp.c Sat Apr 12 14:44:09 2003 @@ -339,7 +339,7 @@ agp_bridge->cleanup = hp_zx1_cleanup; agp_bridge->tlb_flush = hp_zx1_tlbflush; agp_bridge->mask_memory = hp_zx1_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = hp_zx1_create_gatt_table; agp_bridge->free_gatt_table = hp_zx1_free_gatt_table; @@ -369,7 +369,7 @@ } static struct agp_driver hp_agp_driver = { - .owner = THIS_MODULE; + .owner = THIS_MODULE, }; static int __init agp_hp_probe (struct pci_dev *dev, const struct pci_device_id *ent) @@ -394,7 +394,7 @@ { } }; -MODULE_DEVICE_TABLE(pci, agp_pci_table); +MODULE_DEVICE_TABLE(pci, agp_hp_pci_table); static struct __initdata pci_driver agp_hp_pci_driver = { .name = "agpgart-hp", diff -Nru a/drivers/char/agp/i460-agp.c b/drivers/char/agp/i460-agp.c --- a/drivers/char/agp/i460-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/i460-agp.c Sat Apr 12 14:44:08 2003 @@ -536,7 +536,7 @@ agp_bridge->cleanup = i460_cleanup; agp_bridge->tlb_flush = i460_tlb_flush; agp_bridge->mask_memory = i460_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = i460_create_gatt_table; agp_bridge->free_gatt_table = i460_free_gatt_table; @@ -560,7 +560,7 @@ } static struct agp_driver i460_agp_driver = { - .owner = THIS_MODULE; + .owner = THIS_MODULE, }; static int __init agp_intel_i460_probe (struct pci_dev *dev, const struct pci_device_id *ent) diff -Nru a/drivers/char/agp/i7x05-agp.c b/drivers/char/agp/i7x05-agp.c --- a/drivers/char/agp/i7x05-agp.c Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,234 +0,0 @@ -#include -#include -#include -#include -#include "agp.h" - -static int intel_7505_fetch_size(void) -{ - int i; - u16 tmp; - aper_size_info_16 *values; - - /* - * For AGP 3.0 APSIZE is now 16 bits - */ - pci_read_config_word (agp_bridge->dev, INTEL_I7505_APSIZE, &tmp); - tmp = (tmp & 0xfff); - - values = A_SIZE_16(agp_bridge->aperture_sizes); - - for (i=0; i < agp_bridge->num_aperture_sizes; i++) { - if (tmp == values[i].size_value) { - agp_bridge->previous_size = agp_bridge->current_size = - (void *)(values + i); - agp_bridge->aperture_size_idx = i; - return values[i].size; - } - } - return 0; -} - - -static void intel_7505_tlbflush(agp_memory *mem) -{ - u32 temp; - pci_read_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, &temp); - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, temp & ~(1 << 7)); - pci_read_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, &temp); - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, temp | (1 << 7)); -} - -static void intel_7505_cleanup(void) -{ - aper_size_info_16 *previous_size; - - previous_size = A_SIZE_16(agp_bridge->previous_size); - pci_write_config_byte(agp_bridge->dev, INTEL_I7505_APSIZE, - previous_size->size_value); -} - - -static int intel_7505_configure(void) -{ - u32 temp; - aper_size_info_16 *current_size; - - current_size = A_SIZE_16(agp_bridge->current_size); - - /* aperture size */ - pci_write_config_word(agp_bridge->dev, INTEL_I7505_APSIZE, - current_size->size_value); - - /* address to map to */ - pci_read_config_dword(agp_bridge->dev, INTEL_I7505_NAPBASELO, &temp); - agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); - - /* attbase */ - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_ATTBASE, - agp_bridge->gatt_bus_addr); - - /* agpctrl */ - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, 0x0000); - - /* clear error registers */ - pci_write_config_byte(agp_bridge->dev, INTEL_I7505_ERRSTS, 0xff); - return 0; -} - -static aper_size_info_16 intel_7505_sizes[7] = -{ - {256, 65536, 6, 0xf00}, - {128, 32768, 5, 0xf20}, - {64, 16384, 4, 0xf30}, - {32, 8192, 3, 0xf38}, - {16, 4096, 2, 0xf3c}, - {8, 2048, 1, 0xf3e}, - {4, 1024, 0, 0xf3f} -}; - -static void i7505_setup (u32 mode) -{ - if ((agp_generic_agp_3_0_enable)==FALSE) - agp_generic_agp_enable(mode); -} - -static int __init intel_7505_setup (struct pci_dev *pdev) -{ - agp_bridge->masks = intel_generic_masks; - agp_bridge->aperture_sizes = (void *) intel_7505_sizes; - agp_bridge->size_type = U16_APER_SIZE; - agp_bridge->num_aperture_sizes = 7; - agp_bridge->dev_private_data = NULL; - agp_bridge->needs_scratch_page = FALSE; - agp_bridge->configure = intel_7505_configure; - agp_bridge->fetch_size = intel_7505_fetch_size; - agp_bridge->cleanup = intel_7505_cleanup; - agp_bridge->tlb_flush = intel_7505_tlbflush; - agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = i7505_enable; - agp_bridge->cache_flush = global_cache_flush; - agp_bridge->create_gatt_table = agp_generic_create_gatt_table; - agp_bridge->free_gatt_table = agp_generic_free_gatt_table; - agp_bridge->insert_memory = agp_generic_insert_memory; - agp_bridge->remove_memory = agp_generic_remove_memory; - agp_bridge->alloc_by_type = agp_generic_alloc_by_type; - agp_bridge->free_by_type = agp_generic_free_by_type; - agp_bridge->agp_alloc_page = agp_generic_alloc_page; - agp_bridge->agp_destroy_page = agp_generic_destroy_page; - agp_bridge->suspend = agp_generic_suspend; - agp_bridge->resume = agp_generic_resume; - agp_bridge->cant_use_aperture = 0; - return 0; -} - -struct agp_device_ids i7x05_agp_device_ids[] __initdata = -{ - { - .device_id = PCI_DEVICE_ID_INTEL_7505_0, - .chipset = INTEL_I7505, - .chipset_name = "i7505", - }, - { - .device_id = PCI_DEVICE_ID_INTEL_7205_0, - .chipset = INTEL_I7505, - .chipset_name = "i7205", - }, - { }, /* dummy final entry, always present */ -}; - -/* scan table above for supported devices */ -static int __init agp_lookup_host_bridge (struct pci_dev *pdev) -{ - int j=0; - struct agp_device_ids *devs; - - devs = i7x05_agp_device_ids; - - while (devs[j].chipset_name != NULL) { - if (pdev->device == devs[j].device_id) { - printk (KERN_INFO PFX "Detected Intel %s chipset\n", - devs[j].chipset_name); - agp_bridge->type = devs[j].chipset; - - if (devs[j].chipset_setup != NULL) - return devs[j].chipset_setup(pdev); - else - return intel_7505_setup(pdev); - } - j++; - } - - printk(KERN_ERR PFX "Unsupported Intel chipset (device id: %04x),", - pdev->device); - return -ENODEV; -} - -static struct agp_driver i7x05_agp_driver = { - .owner = THIS_MODULE; -}; - -static int __init agp_i7x05_probe (struct pci_dev *dev, const struct pci_device_id *ent) -{ - u8 cap_ptr = 0; - - cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP); - if (cap_ptr == 0) - return -ENODEV; - - if (agp_lookup_host_bridge(dev) != -ENODEV) { - agp_bridge->dev = dev; - agp_bridge->capndx = cap_ptr; - /* Fill in the mode register */ - pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+PCI_AGP_STATUS, &agp_bridge->mode) - i7x05_agp_driver.dev = dev; - agp_register_driver(&i7x05_agp_driver); - return 0; - } - return -ENODEV; -} - - -static struct pci_device_id agp_i7x05_pci_table[] __initdata = { - { - .class = (PCI_CLASS_BRIDGE_HOST << 8), - .class_mask = ~0, - .vendor = PCI_VENDOR_ID_INTEL, - .device = PCI_ANY_ID, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - }, - { } -}; - -MODULE_DEVICE_TABLE(pci, agp_i7x05_pci_table); - -static struct __initdata pci_driver agp_i7x05_pci_driver = { - .name = "agpgart-i7x05", - .id_table = agp_i7x05_pci_table, - .probe = agp_i7x05_probe, -}; - -int __init agp_i7x05_init(void) -{ - int ret_val; - - ret_val = pci_module_init(&agp_i7x05_pci_driver); - if (ret_val) - agp_bridge->type = NOT_SUPPORTED; - - return ret_val; -} - -static void __exit agp_i7x05_cleanup(void) -{ - agp_unregister_driver(&i7x05_agp_driver); - pci_unregister_driver(&agp_i7x05_pci_driver); -} - -module_init(agp_i7x05_init); -module_exit(agp_i7x05_cleanup); - -MODULE_AUTHOR("Matthew E Tolentino "); -MODULE_LICENSE("GPL and additional rights"); - diff -Nru a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c --- a/drivers/char/agp/intel-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/intel-agp.c Sat Apr 12 14:44:08 2003 @@ -960,6 +960,34 @@ return 0; } +static int intel_7505_configure(void) +{ + u32 temp; + u16 temp2; + struct aper_size_info_8 *current_size; + + current_size = A_SIZE_8(agp_bridge->current_size); + + /* aperture size */ + pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value); + + /* address to map to */ + pci_read_config_dword(agp_bridge->dev, INTEL_APBASE, &temp); + agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); + + /* attbase - aperture base */ + pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr); + + /* agpctrl */ + pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000); + + /* mchcfg */ + pci_read_config_word(agp_bridge->dev, INTEL_I7505_MCHCFG, &temp2); + pci_write_config_word(agp_bridge->dev, INTEL_I7505_MCHCFG, temp2 | (1 << 9)); + + return 0; +} + static unsigned long intel_mask_memory(unsigned long addr, int type) { /* Memory type is ignored */ @@ -1026,7 +1054,7 @@ agp_bridge->cleanup = intel_cleanup; agp_bridge->tlb_flush = intel_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1055,7 +1083,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1085,7 +1113,7 @@ agp_bridge->cleanup = intel_820_cleanup; agp_bridge->tlb_flush = intel_820_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1114,7 +1142,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1143,7 +1171,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1172,7 +1200,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1201,7 +1229,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1230,7 +1258,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1246,6 +1274,34 @@ return 0; } +static int __init intel_7505_setup (struct pci_dev *pdev) +{ + agp_bridge->masks = intel_generic_masks; + agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; + agp_bridge->size_type = U8_APER_SIZE; + agp_bridge->num_aperture_sizes = 7; + agp_bridge->dev_private_data = NULL; + agp_bridge->needs_scratch_page = FALSE; + agp_bridge->configure = intel_7505_configure; + agp_bridge->fetch_size = intel_8xx_fetch_size; + agp_bridge->cleanup = intel_8xx_cleanup; + agp_bridge->tlb_flush = intel_8xx_tlbflush; + agp_bridge->mask_memory = intel_mask_memory; + agp_bridge->agp_enable = agp_generic_enable; + agp_bridge->cache_flush = global_cache_flush; + agp_bridge->create_gatt_table = agp_generic_create_gatt_table; + agp_bridge->free_gatt_table = agp_generic_free_gatt_table; + agp_bridge->insert_memory = agp_generic_insert_memory; + agp_bridge->remove_memory = agp_generic_remove_memory; + agp_bridge->alloc_by_type = agp_generic_alloc_by_type; + agp_bridge->free_by_type = agp_generic_free_by_type; + agp_bridge->agp_alloc_page = agp_generic_alloc_page; + agp_bridge->agp_destroy_page = agp_generic_destroy_page; + agp_bridge->suspend = agp_generic_suspend; + agp_bridge->resume = agp_generic_resume; + agp_bridge->cant_use_aperture = 0; + return 0; +} struct agp_device_ids intel_agp_device_ids[] __initdata = { { @@ -1328,6 +1384,18 @@ .chipset = INTEL_I865_G, .chipset_name = "865G", .chipset_setup = intel_845_setup + }, + { + .device_id = PCI_DEVICE_ID_INTEL_7505_0, + .chipset = INTEL_E7505, + .chipset_name = "E7505", + .chipset_setup = intel_7505_setup + }, + { + .device_id = PCI_DEVICE_ID_INTEL_7205_0, + .chipset = INTEL_E7505, + .chipset_name = "E7205", + .chipset_setup = intel_7505_setup }, { }, /* dummy final entry, always present */ }; diff -Nru a/drivers/char/agp/sis-agp.c b/drivers/char/agp/sis-agp.c --- a/drivers/char/agp/sis-agp.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/agp/sis-agp.c Sat Apr 12 14:44:06 2003 @@ -99,7 +99,7 @@ agp_bridge->cleanup = sis_cleanup; agp_bridge->tlb_flush = sis_tlbflush; agp_bridge->mask_memory = sis_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; diff -Nru a/drivers/char/agp/via-agp.c b/drivers/char/agp/via-agp.c --- a/drivers/char/agp/via-agp.c Sat Apr 12 14:44:09 2003 +++ b/drivers/char/agp/via-agp.c Sat Apr 12 14:44:09 2003 @@ -101,7 +101,6 @@ }; -#ifdef CONFIG_AGP3 static int via_fetch_size_agp3(void) { int i; @@ -186,7 +185,7 @@ agp_bridge->num_aperture_sizes = 10; agp_bridge->dev_private_data = NULL; agp_bridge->needs_scratch_page = FALSE; - agp_bridge->agp_enable = agp_generic_agp_3_0_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->configure = via_configure_agp3; agp_bridge->fetch_size = via_fetch_size_agp3; agp_bridge->cleanup = via_cleanup_agp3; @@ -206,18 +205,10 @@ agp_bridge->cant_use_aperture = 0; return 0; } -#else -static int __init via_generic_agp3_setup (struct pci_dev *pdev) -{ - printk (KERN_INFO PFX "Bridge in AGP3 mode, but CONFIG_AGP3=n\n"); - return -ENODEV; -} -#endif /* CONFIG_AGP3 */ static int __init via_generic_setup (struct pci_dev *pdev) { -#ifdef CONFIG_AGP3 /* Garg, there are KT400s with KT266 IDs. */ if (pdev->device == PCI_DEVICE_ID_VIA_8367_0) { @@ -235,7 +226,6 @@ /* Its in 2.0 mode, drop through. */ } } -#endif agp_bridge->masks = via_generic_masks; agp_bridge->aperture_sizes = (void *) via_generic_sizes; @@ -248,7 +238,7 @@ agp_bridge->cleanup = via_cleanup; agp_bridge->tlb_flush = via_tlbflush; agp_bridge->mask_memory = via_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -319,10 +309,10 @@ }, /* VT8361 */ -/* { + { .device_id = PCI_DEVICE_ID_VIA_8361, // 0x3112 .chipset_name = "Apollo KLE133", - }, */ + }, /* VT8365 / VT8362 */ { @@ -331,10 +321,10 @@ }, /* VT8753A */ -/* { - .device_id = PCI_DEVICE_ID_VIA_8753_0, // 0x3128 + { + .device_id = PCI_DEVICE_ID_VIA_8753_0, .chipset_name = "P4X266", - }, */ + }, /* VT8366 */ { @@ -349,16 +339,16 @@ }, /* KM266 / PM266 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_KM266, // 0x3116 + { + .device_id = PCI_DEVICE_ID_VIA_KM266, .chipset_name = "KM266/PM266", - }, */ + }, /* CLE266 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_CLE266, // 0x3123 + { + .device_id = PCI_DEVICE_ID_VIA_CLE266, .chipset_name = "CLE266", - }, */ + }, { .device_id = PCI_DEVICE_ID_VIA_8377_0, @@ -374,16 +364,16 @@ }, /* VT8752*/ -/* { - .device_id = PCI_DEVICE_ID_VIA_8752, // 0x3148 + { + .device_id = PCI_DEVICE_ID_VIA_8752, .chipset_name = "ProSavage DDR P4M266", - }, */ + }, /* KN266/PN266 */ -/* { - .device_id = PCI_DEVICE_ID_KN266, // 0x3156 + { + .device_id = PCI_DEVICE_ID_VIA_KN266, .chipset_name = "KN266/PN266", - }, */ + }, /* VT8754 */ { @@ -392,28 +382,28 @@ }, /* P4N333 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_P4N333, // 0x3178 + { + .device_id = PCI_DEVICE_ID_VIA_P4N333, .chipset_name = "P4N333", - }, */ + }, /* P4X600 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_P4X600, // 0x0198 + { + .device_id = PCI_DEVICE_ID_VIA_P4X600, .chipset_name = "P4X600", - }, */ + }, /* KM400 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_KM400, // 0x3205 + { + .device_id = PCI_DEVICE_ID_VIA_KM400, .chipset_name = "KM400", - }, */ + }, /* P4M400 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_P4M400, // 0x3209 + { + .device_id = PCI_DEVICE_ID_VIA_P4M400, .chipset_name = "PM400", - }, */ + }, { }, /* dummy final entry, always present */ }; diff -Nru a/drivers/char/applicom.c b/drivers/char/applicom.c --- a/drivers/char/applicom.c Sat Apr 12 14:44:10 2003 +++ b/drivers/char/applicom.c Sat Apr 12 14:44:10 2003 @@ -29,22 +29,12 @@ #include #include #include -#include #include #include #include "applicom.h" -#if LINUX_VERSION_CODE < 0x20300 -/* These probably want adding to */ -#define init_waitqueue_head(x) do { *(x) = NULL; } while (0) -#define PCI_BASE_ADDRESS(dev) (dev->base_address[0]) -#define DECLARE_WAIT_QUEUE_HEAD(x) struct wait_queue *x -#define __setup(x,y) /* */ -#else -#define PCI_BASE_ADDRESS(dev) (dev->resource[0].start) -#endif /* NOTE: We use for loops with {write,read}b() instead of memcpy_{from,to}io throughout this driver. This is because @@ -220,18 +210,18 @@ if (pci_enable_device(dev)) return -EIO; - RamIO = ioremap(PCI_BASE_ADDRESS(dev), LEN_RAM_IO); + RamIO = ioremap(dev->resource[0].start, LEN_RAM_IO); if (!RamIO) { - printk(KERN_INFO "ac.o: Failed to ioremap PCI memory space at 0x%lx\n", PCI_BASE_ADDRESS(dev)); + printk(KERN_INFO "ac.o: Failed to ioremap PCI memory space at 0x%lx\n", dev->resource[0].start); return -EIO; } printk(KERN_INFO "Applicom %s found at mem 0x%lx, irq %d\n", - applicom_pci_devnames[dev->device-1], PCI_BASE_ADDRESS(dev), + applicom_pci_devnames[dev->device-1], dev->resource[0].start, dev->irq); - if (!(boardno = ac_register_board(PCI_BASE_ADDRESS(dev), + if (!(boardno = ac_register_board(dev->resource[0].start, (unsigned long)RamIO,0))) { printk(KERN_INFO "ac.o: PCI Applicom device doesn't have correct signature.\n"); iounmap(RamIO); diff -Nru a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h --- a/drivers/char/drm/drmP.h Sat Apr 12 14:44:09 2003 +++ b/drivers/char/drm/drmP.h Sat Apr 12 14:44:09 2003 @@ -242,17 +242,17 @@ DRM(ioremapfree)( (map)->handle, (map)->size ); \ } while (0) -#define DRM_FIND_MAP(_map, _o) \ -do { \ - struct list_head *_list; \ - list_for_each( _list, &dev->maplist->head ) { \ - drm_map_list_t *_entry = (drm_map_list_t *)_list; \ - if ( _entry->map && \ - _entry->map->offset == (_o) ) { \ - (_map) = _entry->map; \ - break; \ - } \ - } \ +#define DRM_FIND_MAP(_map, _o) \ +do { \ + struct list_head *_list; \ + list_for_each( _list, &dev->maplist->head ) { \ + drm_map_list_t *_entry = list_entry( _list, drm_map_list_t, head ); \ + if ( _entry->map && \ + _entry->map->offset == (_o) ) { \ + (_map) = _entry->map; \ + break; \ + } \ + } \ } while(0) #define DRM_DROP_MAP(_map) diff -Nru a/drivers/char/drm/drm_agpsupport.h b/drivers/char/drm/drm_agpsupport.h --- a/drivers/char/drm/drm_agpsupport.h Sat Apr 12 14:44:05 2003 +++ b/drivers/char/drm/drm_agpsupport.h Sat Apr 12 14:44:05 2003 @@ -266,12 +266,6 @@ head->cant_use_aperture = head->agp_info.cant_use_aperture; head->page_mask = head->agp_info.page_mask; #endif - - DRM_INFO("AGP %d.%d aperture @ 0x%08lx %ZuMB\n", - head->agp_info.version.major, - head->agp_info.version.minor, - head->agp_info.aper_base, - head->agp_info.aper_size); } return head; } diff -Nru a/drivers/char/drm/drm_bufs.h b/drivers/char/drm/drm_bufs.h --- a/drivers/char/drm/drm_bufs.h Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/drm_bufs.h Sat Apr 12 14:44:06 2003 @@ -106,7 +106,7 @@ switch ( map->type ) { case _DRM_REGISTERS: case _DRM_FRAME_BUFFER: -#if !defined(__sparc__) && !defined(__alpha__) +#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) if ( map->offset + map->size < map->offset || map->offset < virt_to_phys(high_memory) ) { DRM(free)( map, sizeof(*map), DRM_MEM_MAPS ); @@ -210,7 +210,7 @@ down(&dev->struct_sem); list = &dev->maplist->head; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *) list; + r_list = list_entry(list, drm_map_list_t, head); if(r_list->map && r_list->map->handle == request.handle && diff -Nru a/drivers/char/drm/drm_context.h b/drivers/char/drm/drm_context.h --- a/drivers/char/drm/drm_context.h Sat Apr 12 14:44:05 2003 +++ b/drivers/char/drm/drm_context.h Sat Apr 12 14:44:05 2003 @@ -194,7 +194,7 @@ down(&dev->struct_sem); list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); if(r_list->map && r_list->map->handle == request.handle) goto found; diff -Nru a/drivers/char/drm/drm_dma.h b/drivers/char/drm/drm_dma.h --- a/drivers/char/drm/drm_dma.h Sat Apr 12 14:44:08 2003 +++ b/drivers/char/drm/drm_dma.h Sat Apr 12 14:44:08 2003 @@ -444,7 +444,7 @@ d->flags & _DRM_DMA_WAIT); if (!buf) break; if (buf->pending || buf->waiting) { - DRM_ERROR("Free buffer %d in use by %x (w%d, p%d)\n", + DRM_ERROR("Free buffer %d in use: filp %p (w%d, p%d)\n", buf->idx, buf->filp, buf->waiting, @@ -651,7 +651,7 @@ * for the same vblank sequence number; nothing to be done in * that case */ - list_for_each( ( (struct list_head *) vbl_sig ), &dev->vbl_sigs.head ) { + list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) { if (vbl_sig->sequence == vblwait.request.sequence && vbl_sig->info.si_signo == vblwait.request.signal && vbl_sig->task == current) @@ -702,19 +702,20 @@ void DRM(vbl_send_signals)( drm_device_t *dev ) { - struct list_head *tmp; + struct list_head *list, *tmp; drm_vbl_sig_t *vbl_sig; unsigned int vbl_seq = atomic_read( &dev->vbl_received ); unsigned long flags; spin_lock_irqsave( &dev->vbl_lock, flags ); - list_for_each_safe( ( (struct list_head *) vbl_sig ), tmp, &dev->vbl_sigs.head ) { + list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) { + vbl_sig = list_entry( list, drm_vbl_sig_t, head ); if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) { vbl_sig->info.si_code = vbl_seq; send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task ); - list_del( (struct list_head *) vbl_sig ); + list_del( list ); DRM_FREE( vbl_sig, sizeof(*vbl_sig) ); diff -Nru a/drivers/char/drm/drm_ioctl.h b/drivers/char/drm/drm_ioctl.h --- a/drivers/char/drm/drm_ioctl.h Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/drm_ioctl.h Sat Apr 12 14:44:06 2003 @@ -204,7 +204,7 @@ i = 0; list_for_each(list, &dev->maplist->head) { if(i == idx) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); break; } i++; diff -Nru a/drivers/char/drm/drm_os_linux.h b/drivers/char/drm/drm_os_linux.h --- a/drivers/char/drm/drm_os_linux.h Sat Apr 12 14:44:09 2003 +++ b/drivers/char/drm/drm_os_linux.h Sat Apr 12 14:44:09 2003 @@ -46,9 +46,8 @@ #define DRM_GETSAREA() \ do { \ - struct list_head *list; \ - list_for_each( list, &dev->maplist->head ) { \ - drm_map_list_t *entry = (drm_map_list_t *)list; \ + drm_map_list_t *entry; \ + list_for_each_entry( entry, &dev->maplist->head, head ) { \ if ( entry->map && \ entry->map->type == _DRM_SHM && \ (entry->map->flags & _DRM_CONTAINS_LOCK) ) { \ @@ -60,28 +59,28 @@ #define DRM_HZ HZ -#define DRM_WAIT_ON( ret, queue, timeout, condition ) \ -do { \ - DECLARE_WAITQUEUE(entry, current); \ - unsigned long end = jiffies + (timeout); \ - add_wait_queue(&(queue), &entry); \ - \ - for (;;) { \ - current->state = TASK_INTERRUPTIBLE; \ - if (condition) \ - break; \ - if((signed)(end - jiffies) <= 0) { \ - ret = -EBUSY; \ - break; \ - } \ +#define DRM_WAIT_ON( ret, queue, timeout, condition ) \ +do { \ + DECLARE_WAITQUEUE(entry, current); \ + unsigned long end = jiffies + (timeout); \ + add_wait_queue(&(queue), &entry); \ + \ + for (;;) { \ + current->state = TASK_INTERRUPTIBLE; \ + if (condition) \ + break; \ + if (time_after_eq(jiffies, end)) { \ + ret = -EBUSY; \ + break; \ + } \ schedule_timeout((HZ/100 > 1) ? HZ/100 : 1); \ - if (signal_pending(current)) { \ - ret = -EINTR; \ - break; \ - } \ - } \ - current->state = TASK_RUNNING; \ - remove_wait_queue(&(queue), &entry); \ + if (signal_pending(current)) { \ + ret = -EINTR; \ + break; \ + } \ + } \ + current->state = TASK_RUNNING; \ + remove_wait_queue(&(queue), &entry); \ } while (0) diff -Nru a/drivers/char/drm/drm_proc.h b/drivers/char/drm/drm_proc.h --- a/drivers/char/drm/drm_proc.h Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/drm_proc.h Sat Apr 12 14:44:06 2003 @@ -168,9 +168,9 @@ struct list_head *list; /* Hardcoded from _DRM_FRAME_BUFFER, - _DRM_REGISTERS, _DRM_SHM, and - _DRM_AGP. */ - const char *types[] = { "FB", "REG", "SHM", "AGP" }; + _DRM_REGISTERS, _DRM_SHM, _DRM_AGP, and + _DRM_SCATTER_GATHER. */ + const char *types[] = { "FB", "REG", "SHM", "AGP", "SG" }; const char *type; int i; @@ -186,10 +186,10 @@ "address mtrr\n\n"); i = 0; if (dev->maplist != NULL) list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if(!map) continue; - if (map->type < 0 || map->type > 3) type = "??"; + if (map->type < 0 || map->type > 4) type = "??"; else type = types[map->type]; DRM_PROC_PRINT("%4d 0x%08lx 0x%08lx %4.4s 0x%02x 0x%08lx ", i, diff -Nru a/drivers/char/drm/drm_vm.h b/drivers/char/drm/drm_vm.h --- a/drivers/char/drm/drm_vm.h Sat Apr 12 14:44:10 2003 +++ b/drivers/char/drm/drm_vm.h Sat Apr 12 14:44:10 2003 @@ -73,7 +73,7 @@ if(!dev->agp || !dev->agp->cant_use_aperture) goto vm_nopage_error; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if (!map) continue; if (map->offset == VM_OFFSET(vma)) break; @@ -189,7 +189,7 @@ found_maps = 0; list = &dev->maplist->head; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *) list; + r_list = list_entry(list, drm_map_list_t, head); if (r_list->map == map) found_maps++; } @@ -392,7 +392,7 @@ list_for_each(list, &dev->maplist->head) { unsigned long off; - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if (!map) continue; off = DRIVER_GET_MAP_OFS(); diff -Nru a/drivers/char/drm/gamma_dma.c b/drivers/char/drm/gamma_dma.c --- a/drivers/char/drm/gamma_dma.c Sat Apr 12 14:44:10 2003 +++ b/drivers/char/drm/gamma_dma.c Sat Apr 12 14:44:10 2003 @@ -605,7 +605,7 @@ memset( dev_priv, 0, sizeof(drm_gamma_private_t) ); list_for_each(list, &dev->maplist->head) { - drm_map_list_t *r_list = (drm_map_list_t *)list; + drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); if( r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { @@ -809,7 +809,7 @@ down(&dev->struct_sem); r_list = NULL; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); if(r_list->map && r_list->map->handle == request.handle) break; } diff -Nru a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c --- a/drivers/char/drm/i810_dma.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/drm/i810_dma.c Sat Apr 12 14:44:07 2003 @@ -340,7 +340,7 @@ memset(dev_priv, 0, sizeof(drm_i810_private_t)); list_for_each(list, &dev->maplist->head) { - drm_map_list_t *r_list = (drm_map_list_t *)list; + drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); if( r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { diff -Nru a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c --- a/drivers/char/drm/i830_dma.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/i830_dma.c Sat Apr 12 14:44:06 2003 @@ -363,7 +363,7 @@ memset(dev_priv, 0, sizeof(drm_i830_private_t)); list_for_each(list, &dev->maplist->head) { - drm_map_list_t *r_list = (drm_map_list_t *)list; + drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); if( r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { diff -Nru a/drivers/char/sx.c b/drivers/char/sx.c --- a/drivers/char/sx.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/sx.c Sat Apr 12 14:44:07 2003 @@ -238,7 +238,6 @@ #include "sxboards.h" #include "sxwindow.h" -#include #include #include "sx.h" @@ -1726,9 +1725,9 @@ tmp = kmalloc (SX_CHUNK_SIZE, GFP_USER); if (!tmp) return -ENOMEM; - Get_user (nbytes, descr++); - Get_user (offset, descr++); - Get_user (data, descr++); + get_user (nbytes, descr++); + get_user (offset, descr++); + get_user (data, descr++); while (nbytes && data) { for (i=0;inbytes)?nbytes-i:SX_CHUNK_SIZE); } - Get_user (nbytes, descr++); - Get_user (offset, descr++); - Get_user (data, descr++); + get_user (nbytes, descr++); + get_user (offset, descr++); + get_user (data, descr++); } kfree (tmp); sx_nports += sx_init_board (board); @@ -1816,13 +1815,13 @@ rc = 0; switch (cmd) { case TIOCGSOFTCAR: - rc = Put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), + rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), (unsigned int *) arg); break; case TIOCSSOFTCAR: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) | (ival ? CLOCAL : 0); @@ -1848,7 +1847,7 @@ case TIOCMBIS: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(unsigned int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); sx_setsignals(port, ((ival & TIOCM_DTR) ? 1 : -1), ((ival & TIOCM_RTS) ? 1 : -1)); sx_reconfigure_port(port); @@ -1857,7 +1856,7 @@ case TIOCMBIC: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(unsigned int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); sx_setsignals(port, ((ival & TIOCM_DTR) ? 0 : -1), ((ival & TIOCM_RTS) ? 0 : -1)); sx_reconfigure_port(port); @@ -1866,7 +1865,7 @@ case TIOCMSET: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(unsigned int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); sx_setsignals(port, ((ival & TIOCM_DTR) ? 1 : 0), ((ival & TIOCM_RTS) ? 1 : 0)); sx_reconfigure_port(port); @@ -2484,7 +2483,7 @@ printk (KERN_DEBUG "sx: performing cntrl reg fix: %08x -> %08x\n", t, CNTRL_REG_GOODVALUE); writel (CNTRL_REG_GOODVALUE, rebase + CNTRL_REG_OFFSET); } - my_iounmap (hwbase, rebase); + iounmap ((char *) rebase); } #endif @@ -2574,7 +2573,7 @@ 0x18000 .... */ if (IS_CF_BOARD (board)) board->base += 0x18000; - board->irq = get_irq (pdev); + board->irq = pdev->irq; sx_dprintk (SX_DEBUG_PROBE, "Got a specialix card: %x/%lx(%d) %x.\n", tint, boards[found].base, board->irq, board->flags); @@ -2583,7 +2582,7 @@ found++; fix_sx_pci (pdev, board); } else - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } #endif @@ -2600,7 +2599,7 @@ if (probe_sx (board)) { found++; } else { - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } @@ -2616,7 +2615,7 @@ if (probe_si (board)) { found++; } else { - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } for (i=0;ihw_base, board->base); + iounmap ((char *) (board->base)); } } @@ -2692,7 +2691,7 @@ /* It is safe/allowed to del_timer a non-active timer */ del_timer (& board->timer); - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } if (misc_deregister(&sx_fw_device) < 0) { diff -Nru a/drivers/char/tty_io.c b/drivers/char/tty_io.c --- a/drivers/char/tty_io.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/tty_io.c Sat Apr 12 14:44:08 2003 @@ -136,7 +136,7 @@ * redirect is the pseudo-tty that console output * is redirected to if asked by TIOCCONS. */ -struct tty_struct * redirect; +static struct tty_struct *redirect; static void initialize_tty_struct(struct tty_struct *tty); diff -Nru a/drivers/char/upd4990a.c b/drivers/char/upd4990a.c --- a/drivers/char/upd4990a.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/upd4990a.c Sat Apr 12 14:44:07 2003 @@ -343,19 +343,28 @@ static int __init rtc_init(void) { + int err = 0; + if (!request_region(UPD4990A_IO, 1, "rtc")) { printk(KERN_ERR "upd4990a: could not acquire I/O port %#x\n", UPD4990A_IO); return -EBUSY; } + err = misc_register(&rtc_dev); + if (err) { + printk(KERN_ERR "upd4990a: can't misc_register() on minor=%d\n", + RTC_MINOR); + release_region(UPD4990A_IO, 1); + return err; + } + #if 0 printk(KERN_INFO "\xB6\xDA\xDD\xC0\xDE \xC4\xDE\xB9\xB2 Driver\n"); /* Calender Clock Driver */ #else printk(KERN_INFO "Real Time Clock driver for NEC PC-9800 v" RTC98_VERSION "\n"); #endif - misc_register(&rtc_dev); create_proc_read_entry("driver/rtc", 0, NULL, rtc_read_proc, NULL); init_timer(&rtc_uie_timer); diff -Nru a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c --- a/drivers/hotplug/pci_hotplug_core.c Sat Apr 12 14:44:09 2003 +++ b/drivers/hotplug/pci_hotplug_core.c Sat Apr 12 14:44:09 2003 @@ -100,7 +100,7 @@ .sysfs_ops = &hotplug_slot_sysfs_ops }; -static decl_subsys(hotplug_slots, &hotplug_slot_ktype); +static decl_subsys(hotplug_slots, &hotplug_slot_ktype, NULL); /* these strings match up with the values in pci_bus_speed */ diff -Nru a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig --- a/drivers/i2c/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/Kconfig Sat Apr 12 14:44:06 2003 @@ -142,6 +142,17 @@ . The module will be called i2c-elektor. +config I2C_KEYWEST + tristate "Powermac Keywest I2C interface" + depends on I2C && ALL_PPC + help + This supports the use of the I2C interface in the combo-I/O + chip on recent Apple machines. Say Y if you have such a machine. + + This driver is also available as a module. If you want to compile + it as a module, say M here and read Documentation/modules.txt. + The module will be called i2c-keywest. + config ITE_I2C_ALGO tristate "ITE I2C Algorithm" depends on MIPS_ITE8172 && I2C diff -Nru a/drivers/i2c/Makefile b/drivers/i2c/Makefile --- a/drivers/i2c/Makefile Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/Makefile Sat Apr 12 14:44:06 2003 @@ -10,6 +10,7 @@ obj-$(CONFIG_I2C_VELLEMAN) += i2c-velleman.o obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o +obj-$(CONFIG_I2C_KEYWEST) += i2c-keywest.o obj-$(CONFIG_ITE_I2C_ALGO) += i2c-algo-ite.o obj-$(CONFIG_ITE_I2C_ADAP) += i2c-adap-ite.o obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o diff -Nru a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig --- a/drivers/i2c/busses/Kconfig Sat Apr 12 14:44:09 2003 +++ b/drivers/i2c/busses/Kconfig Sat Apr 12 14:44:09 2003 @@ -116,5 +116,31 @@ in the lm_sensors package, which you can download at http://www.lm-sensors.nu + +config I2C_VIAPRO + tristate " VIA 82C596/82C686/823x" + depends on I2C && PCI && EXPERIMENTAL + help + + If you say yes to this option, support will be included for the VIA + 82C596/82C686/823x I2C interfaces. Specifically, the following + chipsets are supported: + 82C596A/B + 82C686A/B + 8231 + 8233 + 8233A + 8235 + + This can also be built as a module which can be inserted and removed + while the kernel is running. If you want to compile it as a module, + say M here and read . + + The module will be called i2c-viapro. + + You will also need the latest user-space utilties: you can find them + in the lm_sensors package, which you can download at + http://www.lm-sensors.nu + endmenu diff -Nru a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile --- a/drivers/i2c/busses/Makefile Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/busses/Makefile Sat Apr 12 14:44:06 2003 @@ -8,3 +8,4 @@ obj-$(CONFIG_I2C_I801) += i2c-i801.o obj-$(CONFIG_I2C_ISA) += i2c-isa.o obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o +obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o diff -Nru a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/busses/i2c-viapro.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,504 @@ +/* + i2c-viapro.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + Copyright (c) 1998 - 2002 Frodo Looijaard , + Philip Edelbrock , Kyösti Mälkki , + Mark D. Studebaker + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + Supports Via devices: + 82C596A/B (0x3050) + 82C596B (0x3051) + 82C686A/B + 8231 + 8233 + 8233A (0x3147 and 0x3177) + 8235 + Note: we assume there can only be one device, with one SMBus interface. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SMBBA1 0x90 +#define SMBBA2 0x80 +#define SMBBA3 0xD0 + +/* SMBus address offsets */ +#define SMBHSTSTS (0 + vt596_smba) +#define SMBHSLVSTS (1 + vt596_smba) +#define SMBHSTCNT (2 + vt596_smba) +#define SMBHSTCMD (3 + vt596_smba) +#define SMBHSTADD (4 + vt596_smba) +#define SMBHSTDAT0 (5 + vt596_smba) +#define SMBHSTDAT1 (6 + vt596_smba) +#define SMBBLKDAT (7 + vt596_smba) +#define SMBSLVCNT (8 + vt596_smba) +#define SMBSHDWCMD (9 + vt596_smba) +#define SMBSLVEVT (0xA + vt596_smba) +#define SMBSLVDAT (0xC + vt596_smba) + +/* PCI Address Constants */ + +/* SMBus data in configuration space can be found in two places, + We try to select the better one*/ + +static unsigned short smb_cf_hstcfg = 0xD2; + +#define SMBHSTCFG (smb_cf_hstcfg) +#define SMBSLVC (SMBHSTCFG+1) +#define SMBSHDW1 (SMBHSTCFG+2) +#define SMBSHDW2 (SMBHSTCFG+3) +#define SMBREV (SMBHSTCFG+4) + +/* Other settings */ +#define MAX_TIMEOUT 500 +#define ENABLE_INT9 0 + +/* VT82C596 constants */ +#define VT596_QUICK 0x00 +#define VT596_BYTE 0x04 +#define VT596_BYTE_DATA 0x08 +#define VT596_WORD_DATA 0x0C +#define VT596_BLOCK_DATA 0x14 + +/* insmod parameters */ + +/* If force is set to anything different from 0, we forcibly enable the + VT596. DANGEROUS! */ +static int force = 0; +MODULE_PARM(force, "i"); +MODULE_PARM_DESC(force, "Forcibly enable the SMBus. DANGEROUS!"); + +/* If force_addr is set to anything different from 0, we forcibly enable + the VT596 at the given address. VERY DANGEROUS! */ +static int force_addr = 0; +MODULE_PARM(force_addr, "i"); +MODULE_PARM_DESC(force_addr, + "Forcibly enable the SMBus at the given address. " + "EXTREMELY DANGEROUS!"); + +static void vt596_do_pause(unsigned int amount); +static int vt596_transaction(void); +s32 vt596_access(struct i2c_adapter * adap, u16 addr, unsigned short flags, + char read_write, u8 command, int size, union i2c_smbus_data * data); +u32 vt596_func(struct i2c_adapter *adapter); + +static struct i2c_algorithm smbus_algorithm = { + .name = "Non-I2C SMBus adapter", + .id = I2C_ALGO_SMBUS, + .smbus_xfer = vt596_access, + .functionality = vt596_func, +}; + +static struct i2c_adapter vt596_adapter = { + .owner = THIS_MODULE, + .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_VIA2, + .algo = &smbus_algorithm, + .dev = { + .name = "unset", + }, +}; + + + + +static unsigned short vt596_smba = 0; + + +/* Detect whether a compatible device can be found, and initialize it. */ +int vt596_setup(struct pci_dev *VT596_dev, struct pci_device_id const *id) +{ + unsigned char temp; + + dev_info(&VT596_dev->dev, "Found Via %s device\n", VT596_dev->dev.name); + + /* Determine the address of the SMBus areas */ + if (force_addr) { + vt596_smba = force_addr & 0xfff0; + force = 0; + } else { + if ((pci_read_config_word(VT596_dev, id->driver_data, &vt596_smba)) + || !(vt596_smba & 0x1)) { + /* try 2nd address and config reg. for 596 */ + if((id->device == PCI_DEVICE_ID_VIA_82C596_3) && + (!pci_read_config_word(VT596_dev, SMBBA2, &vt596_smba)) && + (vt596_smba & 0x1)) { + smb_cf_hstcfg = 0x84; + } else { + /* no matches at all */ + dev_err(&VT596_dev->dev, "Cannot configure " + "SMBus I/O Base address\n"); + return(-ENODEV); + } + } + vt596_smba &= 0xfff0; + if(vt596_smba == 0) { + dev_err(&VT596_dev->dev, "SMBus base address " + "uninitialized - upgrade BIOS or use " + "force_addr=0xaddr\n"); + return -ENODEV; + } + } + + if (!request_region(vt596_smba, 8, "viapro-smbus")) { + dev_err(&VT596_dev->dev, "SMBus region 0x%x already in use!\n", + vt596_smba); + return(-ENODEV); + } + + pci_read_config_byte(VT596_dev, SMBHSTCFG, &temp); + /* If force_addr is set, we program the new address here. Just to make + sure, we disable the VT596 first. */ + if (force_addr) { + pci_write_config_byte(VT596_dev, SMBHSTCFG, temp & 0xfe); + pci_write_config_word(VT596_dev, id->driver_data, vt596_smba); + pci_write_config_byte(VT596_dev, SMBHSTCFG, temp | 0x01); + dev_warn(&VT596_dev->dev, "WARNING: SMBus interface set to new " + "address 0x%04x!\n", vt596_smba); + } else if ((temp & 1) == 0) { + if (force) { + /* NOTE: This assumes I/O space and other allocations + * WERE done by the Bios! Don't complain if your + * hardware does weird things after enabling this. + * :') Check for Bios updates before resorting to + * this. + */ + pci_write_config_byte(VT596_dev, SMBHSTCFG, + temp | 1); + dev_info(&VT596_dev->dev, "Enabling SMBus device\n"); + } else { + dev_err(&VT596_dev->dev, "SMBUS: Error: Host SMBus " + "controller not enabled! - upgrade BIOS or " + "use force=1\n"); + return(-ENODEV); + } + } + + if ((temp & 0x0E) == 8) + dev_dbg(&VT596_dev->dev, "using Interrupt 9 for SMBus.\n"); + else if ((temp & 0x0E) == 0) + dev_dbg(&VT596_dev->dev, "using Interrupt SMI# for SMBus.\n"); + else + dev_dbg(&VT596_dev->dev, "Illegal Interrupt configuration " + "(or code out of date)!\n"); + + pci_read_config_byte(VT596_dev, SMBREV, &temp); + dev_dbg(&VT596_dev->dev, "SMBREV = 0x%X\n", temp); + dev_dbg(&VT596_dev->dev, "VT596_smba = 0x%X\n", vt596_smba); + + return(0); +} + + +/* Internally used pause function */ +void vt596_do_pause(unsigned int amount) +{ + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(amount); +} + +/* Another internally used function */ +int vt596_transaction(void) +{ + int temp; + int result = 0; + int timeout = 0; + + dev_dbg(&vt596_adapter.dev, "Transaction (pre): CNT=%02x, CMD=%02x, " + "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT), + inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0), + inb_p(SMBHSTDAT1)); + + /* Make sure the SMBus host is ready to start transmitting */ + if ((temp = inb_p(SMBHSTSTS)) != 0x00) { + dev_dbg(&vt596_adapter.dev, "SMBus busy (0x%02x). " + "Resetting...\n", temp); + + outb_p(temp, SMBHSTSTS); + if ((temp = inb_p(SMBHSTSTS)) != 0x00) { + dev_dbg(&vt596_adapter.dev, "Failed! (0x%02x)\n", temp); + + return -1; + } else { + dev_dbg(&vt596_adapter.dev, "Successfull!\n"); + } + } + + /* start the transaction by setting bit 6 */ + outb_p(inb(SMBHSTCNT) | 0x040, SMBHSTCNT); + + /* We will always wait for a fraction of a second! + I don't know if VIA needs this, Intel did */ + do { + vt596_do_pause(1); + temp = inb_p(SMBHSTSTS); + } while ((temp & 0x01) && (timeout++ < MAX_TIMEOUT)); + + /* If the SMBus is still busy, we give up */ + if (timeout >= MAX_TIMEOUT) { + result = -1; + dev_dbg(&vt596_adapter.dev, "SMBus Timeout!\n"); + } + + if (temp & 0x10) { + result = -1; + dev_dbg(&vt596_adapter.dev, "Error: Failed bus transaction\n"); + } + + if (temp & 0x08) { + result = -1; + dev_info(&vt596_adapter.dev, "Bus collision! SMBus may be " + "locked until next hard\nreset. (sorry!)\n"); + /* Clock stops and slave is stuck in mid-transmission */ + } + + if (temp & 0x04) { + result = -1; + dev_dbg(&vt596_adapter.dev, "Error: no response!\n"); + } + + if (inb_p(SMBHSTSTS) != 0x00) + outb_p(inb(SMBHSTSTS), SMBHSTSTS); + + if ((temp = inb_p(SMBHSTSTS)) != 0x00) { + dev_dbg(&vt596_adapter.dev, "Failed reset at end of " + "transaction (%02x)\n", temp); + } + dev_dbg(&vt596_adapter.dev, "Transaction (post): CNT=%02x, CMD=%02x, " + "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT), + inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0), + inb_p(SMBHSTDAT1)); + + return result; +} + +/* Return -1 on error. */ +s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags, + char read_write, u8 command, int size, + union i2c_smbus_data * data) +{ + int i, len; + + switch (size) { + case I2C_SMBUS_PROC_CALL: + dev_info(&vt596_adapter.dev, "I2C_SMBUS_PROC_CALL not supported!\n"); + return -1; + case I2C_SMBUS_QUICK: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + size = VT596_QUICK; + break; + case I2C_SMBUS_BYTE: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + if (read_write == I2C_SMBUS_WRITE) + outb_p(command, SMBHSTCMD); + size = VT596_BYTE; + break; + case I2C_SMBUS_BYTE_DATA: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + outb_p(command, SMBHSTCMD); + if (read_write == I2C_SMBUS_WRITE) + outb_p(data->byte, SMBHSTDAT0); + size = VT596_BYTE_DATA; + break; + case I2C_SMBUS_WORD_DATA: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + outb_p(command, SMBHSTCMD); + if (read_write == I2C_SMBUS_WRITE) { + outb_p(data->word & 0xff, SMBHSTDAT0); + outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1); + } + size = VT596_WORD_DATA; + break; + case I2C_SMBUS_BLOCK_DATA: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + outb_p(command, SMBHSTCMD); + if (read_write == I2C_SMBUS_WRITE) { + len = data->block[0]; + if (len < 0) + len = 0; + if (len > 32) + len = 32; + outb_p(len, SMBHSTDAT0); + i = inb_p(SMBHSTCNT); /* Reset SMBBLKDAT */ + for (i = 1; i <= len; i++) + outb_p(data->block[i], SMBBLKDAT); + } + size = VT596_BLOCK_DATA; + break; + } + + outb_p((size & 0x1C) + (ENABLE_INT9 & 1), SMBHSTCNT); + + if (vt596_transaction()) /* Error in transaction */ + return -1; + + if ((read_write == I2C_SMBUS_WRITE) || (size == VT596_QUICK)) + return 0; + + + switch (size) { + case VT596_BYTE: + /* Where is the result put? I assume here it is in + * SMBHSTDAT0 but it might just as well be in the + * SMBHSTCMD. No clue in the docs + */ + data->byte = inb_p(SMBHSTDAT0); + break; + case VT596_BYTE_DATA: + data->byte = inb_p(SMBHSTDAT0); + break; + case VT596_WORD_DATA: + data->word = inb_p(SMBHSTDAT0) + (inb_p(SMBHSTDAT1) << 8); + break; + case VT596_BLOCK_DATA: + data->block[0] = inb_p(SMBHSTDAT0); + i = inb_p(SMBHSTCNT); /* Reset SMBBLKDAT */ + for (i = 1; i <= data->block[0]; i++) + data->block[i] = inb_p(SMBBLKDAT); + break; + } + return 0; +} + + +u32 vt596_func(struct i2c_adapter *adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + + + +static struct pci_device_id vt596_ids[] __devinitdata = { + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_82C596_3, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_82C596B_3, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_82C686_4, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8233_0, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA3 + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8233A, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA3, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8235, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA3 + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8231_4, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { 0, } +}; + +static int __devinit vt596_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int retval; + + retval = vt596_setup(dev, id); + if (retval) + return retval; + + vt596_adapter.dev.parent = &dev->dev; + + snprintf(vt596_adapter.dev.name, DEVICE_NAME_SIZE, + "SMBus Via Pro adapter at %04x", vt596_smba); + + retval = i2c_add_adapter(&vt596_adapter); + + return retval; +} + +static void __devexit vt596_remove(struct pci_dev *dev) +{ + i2c_del_adapter(&vt596_adapter); +} + +static struct pci_driver vt596_driver = { + .name = "vt596 smbus", + .id_table = vt596_ids, + .probe = vt596_probe, + .remove = __devexit_p(vt596_remove), +}; + +static int __init i2c_vt596_init(void) +{ + return pci_module_init(&vt596_driver); +} + + +static void __exit i2c_vt596_exit(void) +{ + pci_unregister_driver(&vt596_driver); + release_region(vt596_smba, 8); +} + + + +MODULE_AUTHOR("Frodo Looijaard and Philip Edelbrock "); +MODULE_DESCRIPTION("vt82c596 SMBus driver"); + +MODULE_LICENSE("GPL"); + +module_init(i2c_vt596_init); +module_exit(i2c_vt596_exit); diff -Nru a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig --- a/drivers/i2c/chips/Kconfig Sat Apr 12 14:44:08 2003 +++ b/drivers/i2c/chips/Kconfig Sat Apr 12 14:44:08 2003 @@ -66,7 +66,8 @@ config I2C_SENSOR tristate - depends on SENSORS_ADM1021 || SENSORS_LM75 || SENSORS_VIA686A || SENSORS_W83781D - default m + default y if SENSORS_ADM1021=y || SENSORS_LM75=y || SENSORS_VIA686A=y || SENSORS_W83781D=y + default m if SENSORS_ADM1021=m || SENSORS_LM75=m || SENSORS_VIA686A=m || SENSORS_W83781D=m + default n endmenu diff -Nru a/drivers/i2c/chips/via686a.c b/drivers/i2c/chips/via686a.c --- a/drivers/i2c/chips/via686a.c Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/chips/via686a.c Sat Apr 12 14:44:06 2003 @@ -87,9 +87,9 @@ static const u8 reghyst[] = { 0x3a, 0x3e, 0x1e }; /* temps numbered 1-3 */ -#define VIA686A_REG_TEMP(nr) (regtemp[(nr) - 1]) -#define VIA686A_REG_TEMP_OVER(nr) (regover[(nr) - 1]) -#define VIA686A_REG_TEMP_HYST(nr) (reghyst[(nr) - 1]) +#define VIA686A_REG_TEMP(nr) (regtemp[nr]) +#define VIA686A_REG_TEMP_OVER(nr) (regover[nr]) +#define VIA686A_REG_TEMP_HYST(nr) (reghyst[nr]) #define VIA686A_REG_TEMP_LOW1 0x4b // bits 7-6 #define VIA686A_REG_TEMP_LOW23 0x49 // 2 = bits 5-4, 3 = bits 7-6 @@ -369,6 +369,8 @@ dynamically allocated, at the same time when a new via686a client is allocated. */ struct via686a_data { + int sysctl_id; + struct semaphore update_lock; char valid; /* !=0 if following fields are valid */ unsigned long last_updated; /* In jiffies */ @@ -391,13 +393,258 @@ static int via686a_detect(struct i2c_adapter *adapter, int address, int kind); static int via686a_detach_client(struct i2c_client *client); -static int via686a_read_value(struct i2c_client *client, u8 register); -static void via686a_write_value(struct i2c_client *client, u8 register, - u8 value); +static inline int via686a_read_value(struct i2c_client *client, u8 reg) +{ + return (inb_p(client->addr + reg)); +} + +static inline void via686a_write_value(struct i2c_client *client, u8 reg, + u8 value) +{ + outb_p(value, client->addr + reg); +} + static void via686a_update_client(struct i2c_client *client); static void via686a_init_client(struct i2c_client *client); -static int via686a_id = 0; +/* following are the sysfs callback functions */ + +/* 7 voltage sensors */ +static ssize_t show_in(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in[nr], nr)*10 ); +} + +static ssize_t show_in_min(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_min[nr], nr)*10 ); +} + +static ssize_t show_in_max(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_max[nr], nr)*10 ); +} + +static ssize_t set_in_min(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + unsigned long val = simple_strtoul(buf, NULL, 10)/10; + data->in_min[nr] = IN_TO_REG(val,nr); + via686a_write_value(client, VIA686A_REG_IN_MIN(nr), + data->in_min[nr]); + return count; +} +static ssize_t set_in_max(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + unsigned long val = simple_strtoul(buf, NULL, 10)/10; + data->in_max[nr] = IN_TO_REG(val,nr); + via686a_write_value(client, VIA686A_REG_IN_MAX(nr), + data->in_max[nr]); + return count; +} +#define show_in_offset(offset) \ +static ssize_t \ + show_in##offset (struct device *dev, char *buf) \ +{ \ + return show_in(dev, buf, 0x##offset); \ +} \ +static ssize_t \ + show_in##offset##_min (struct device *dev, char *buf) \ +{ \ + return show_in_min(dev, buf, 0x##offset); \ +} \ +static ssize_t \ + show_in##offset##_max (struct device *dev, char *buf) \ +{ \ + return show_in_max(dev, buf, 0x##offset); \ +} \ +static ssize_t set_in##offset##_min (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_in_min(dev, buf, count, 0x##offset); \ +} \ +static ssize_t set_in##offset##_max (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_in_max(dev, buf, count, 0x##offset); \ +} \ +static DEVICE_ATTR(in_input##offset, S_IRUGO, show_in##offset, NULL) \ +static DEVICE_ATTR(in_min##offset, S_IRUGO | S_IWUSR, \ + show_in##offset##_min, set_in##offset##_min) \ +static DEVICE_ATTR(in_max##offset, S_IRUGO | S_IWUSR, \ + show_in##offset##_max, set_in##offset##_max) + +show_in_offset(0); +show_in_offset(1); +show_in_offset(2); +show_in_offset(3); +show_in_offset(4); + +/* 3 temperatures */ +static ssize_t show_temp(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", TEMP_FROM_REG10(data->temp[nr])*10 ); +} +/* more like overshoot temperature */ +static ssize_t show_temp_max(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_over[nr])*10); +} +/* more like hysteresis temperature */ +static ssize_t show_temp_min(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_hyst[nr])*10); +} +static ssize_t set_temp_max(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10)/10; + data->temp_over[nr] = TEMP_TO_REG(val); + via686a_write_value(client, VIA686A_REG_TEMP_OVER(nr), data->temp_over[nr]); + return count; +} +static ssize_t set_temp_min(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10)/10; + data->temp_hyst[nr] = TEMP_TO_REG(val); + via686a_write_value(client, VIA686A_REG_TEMP_HYST(nr), data->temp_hyst[nr]); + return count; +} +#define show_temp_offset(offset) \ +static ssize_t show_temp_##offset (struct device *dev, char *buf) \ +{ \ + return show_temp(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t \ +show_temp_##offset##_max (struct device *dev, char *buf) \ +{ \ + return show_temp_max(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t \ +show_temp_##offset##_min (struct device *dev, char *buf) \ +{ \ + return show_temp_min(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t set_temp_##offset##_max (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_temp_max(dev, buf, count, 0x##offset - 1); \ +} \ +static ssize_t set_temp_##offset##_min (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_temp_min(dev, buf, count, 0x##offset - 1); \ +} \ +static DEVICE_ATTR(temp_input##offset, S_IRUGO, show_temp_##offset, NULL) \ +static DEVICE_ATTR(temp_max##offset, S_IRUGO | S_IWUSR, \ + show_temp_##offset##_max, set_temp_##offset##_max) \ +static DEVICE_ATTR(temp_min##offset, S_IRUGO | S_IWUSR, \ + show_temp_##offset##_min, set_temp_##offset##_min) + +show_temp_offset(1); +show_temp_offset(2); +show_temp_offset(3); + +/* 2 Fans */ +static ssize_t show_fan(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr], + DIV_FROM_REG(data->fan_div[nr])) ); +} +static ssize_t show_fan_min(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", + FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])) ); +} +static ssize_t show_fan_div(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", DIV_FROM_REG(data->fan_div[nr]) ); +} +static ssize_t set_fan_min(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10); + data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); + via686a_write_value(client, VIA686A_REG_FAN_MIN(nr+1), data->fan_min[nr]); + return count; +} +static ssize_t set_fan_div(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10); + int old = via686a_read_value(client, VIA686A_REG_FANDIV); + data->fan_div[nr] = DIV_TO_REG(val); + old = (old & 0x0f) | (data->fan_div[1] << 6) | (data->fan_div[0] << 4); + via686a_write_value(client, VIA686A_REG_FANDIV, old); + return count; +} + +#define show_fan_offset(offset) \ +static ssize_t show_fan_##offset (struct device *dev, char *buf) \ +{ \ + return show_fan(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \ +{ \ + return show_fan_min(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \ +{ \ + return show_fan_div(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t set_fan_##offset##_min (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_fan_min(dev, buf, count, 0x##offset - 1); \ +} \ +static ssize_t set_fan_##offset##_div (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_fan_div(dev, buf, count, 0x##offset - 1); \ +} \ +static DEVICE_ATTR(fan_input##offset, S_IRUGO, show_fan_##offset, NULL) \ +static DEVICE_ATTR(fan_min##offset, S_IRUGO | S_IWUSR, \ + show_fan_##offset##_min, set_fan_##offset##_min) \ +static DEVICE_ATTR(fan_div##offset, S_IRUGO | S_IWUSR, \ + show_fan_##offset##_div, set_fan_##offset##_div) + +show_fan_offset(1); +show_fan_offset(2); + +/* Alarm */ +static ssize_t show_alarm(struct device *dev, char *buf) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", ALARMS_FROM_REG(data->alarms)); +} +static DEVICE_ATTR(alarm, S_IRUGO | S_IWUSR, show_alarm, NULL); /* The driver. I choose to use type i2c_driver, as at is identical to both smbus_driver and isa_driver, and clients could be of either kind */ @@ -411,83 +658,6 @@ }; - -/* The /proc/sys entries */ - -/* -- SENSORS SYSCTL START -- */ -#define VIA686A_SYSCTL_IN0 1000 -#define VIA686A_SYSCTL_IN1 1001 -#define VIA686A_SYSCTL_IN2 1002 -#define VIA686A_SYSCTL_IN3 1003 -#define VIA686A_SYSCTL_IN4 1004 -#define VIA686A_SYSCTL_FAN1 1101 -#define VIA686A_SYSCTL_FAN2 1102 -#define VIA686A_SYSCTL_TEMP 1200 -#define VIA686A_SYSCTL_TEMP2 1201 -#define VIA686A_SYSCTL_TEMP3 1202 -#define VIA686A_SYSCTL_FAN_DIV 2000 -#define VIA686A_SYSCTL_ALARMS 2001 - -#define VIA686A_ALARM_IN0 0x01 -#define VIA686A_ALARM_IN1 0x02 -#define VIA686A_ALARM_IN2 0x04 -#define VIA686A_ALARM_IN3 0x08 -#define VIA686A_ALARM_TEMP 0x10 -#define VIA686A_ALARM_FAN1 0x40 -#define VIA686A_ALARM_FAN2 0x80 -#define VIA686A_ALARM_IN4 0x100 -#define VIA686A_ALARM_TEMP2 0x800 -#define VIA686A_ALARM_CHAS 0x1000 -#define VIA686A_ALARM_TEMP3 0x8000 - -/* -- SENSORS SYSCTL END -- */ - -#if 0 -/* These files are created for each detected VIA686A. This is just a template; - though at first sight, you might think we could use a statically - allocated list, we need some way to get back to the parent - which - is done through one of the 'extra' fields which are initialized - when a new copy is allocated. */ -static ctl_table via686a_dir_table_template[] = { - {VIA686A_SYSCTL_IN0, "in0", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN1, "in1", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN2, "in2", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN3, "in3", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN4, "in4", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_FAN1, "fan1", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_fan}, - {VIA686A_SYSCTL_FAN2, "fan2", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_fan}, - {VIA686A_SYSCTL_TEMP, "temp1", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_temp}, - {VIA686A_SYSCTL_TEMP2, "temp2", NULL, 0, 0644, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_temp}, - {VIA686A_SYSCTL_TEMP3, "temp3", NULL, 0, 0644, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_temp}, - {VIA686A_SYSCTL_FAN_DIV, "fan_div", NULL, 0, 0644, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_fan_div}, - {VIA686A_SYSCTL_ALARMS, "alarms", NULL, 0, 0444, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_alarms}, - {0} -}; -#endif - -static inline int via686a_read_value(struct i2c_client *client, u8 reg) -{ - return (inb_p(client->addr + reg)); -} - -static inline void via686a_write_value(struct i2c_client *client, u8 reg, - u8 value) -{ - outb_p(value, client->addr + reg); -} - /* This is called when the module is loaded */ static int via686a_attach_adapter(struct i2c_adapter *adapter) { @@ -499,7 +669,7 @@ struct i2c_client *new_client; struct via686a_data *data; int err = 0; - const char *name = "via686a"; + const char client_name[] = "via686a chip"; u16 val; /* Make sure we are probing the ISA bus!! */ @@ -552,16 +722,49 @@ new_client->adapter = adapter; new_client->driver = &via686a_driver; new_client->flags = 0; + new_client->dev.parent = &adapter->dev; /* Fill in the remaining client fields and put into the global list */ - snprintf(new_client->dev.name, DEVICE_NAME_SIZE, name); + snprintf(new_client->dev.name, DEVICE_NAME_SIZE, client_name); - new_client->id = via686a_id++; data->valid = 0; init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) goto ERROR3; + + /* register sysfs hooks */ + device_create_file(&new_client->dev, &dev_attr_in_input0); + device_create_file(&new_client->dev, &dev_attr_in_input1); + device_create_file(&new_client->dev, &dev_attr_in_input2); + device_create_file(&new_client->dev, &dev_attr_in_input3); + device_create_file(&new_client->dev, &dev_attr_in_input4); + device_create_file(&new_client->dev, &dev_attr_in_min0); + device_create_file(&new_client->dev, &dev_attr_in_min1); + device_create_file(&new_client->dev, &dev_attr_in_min2); + device_create_file(&new_client->dev, &dev_attr_in_min3); + device_create_file(&new_client->dev, &dev_attr_in_min4); + device_create_file(&new_client->dev, &dev_attr_in_max0); + device_create_file(&new_client->dev, &dev_attr_in_max1); + device_create_file(&new_client->dev, &dev_attr_in_max2); + device_create_file(&new_client->dev, &dev_attr_in_max3); + device_create_file(&new_client->dev, &dev_attr_in_max4); + device_create_file(&new_client->dev, &dev_attr_temp_input1); + device_create_file(&new_client->dev, &dev_attr_temp_input2); + device_create_file(&new_client->dev, &dev_attr_temp_input3); + device_create_file(&new_client->dev, &dev_attr_temp_max1); + device_create_file(&new_client->dev, &dev_attr_temp_max2); + device_create_file(&new_client->dev, &dev_attr_temp_max3); + device_create_file(&new_client->dev, &dev_attr_temp_min1); + device_create_file(&new_client->dev, &dev_attr_temp_min2); + device_create_file(&new_client->dev, &dev_attr_temp_min3); + device_create_file(&new_client->dev, &dev_attr_fan_input1); + device_create_file(&new_client->dev, &dev_attr_fan_input2); + device_create_file(&new_client->dev, &dev_attr_fan_min1); + device_create_file(&new_client->dev, &dev_attr_fan_min2); + device_create_file(&new_client->dev, &dev_attr_fan_div1); + device_create_file(&new_client->dev, &dev_attr_fan_div2); + device_create_file(&new_client->dev, &dev_attr_alarm); /* Initialize the VIA686A chip */ via686a_init_client(new_client); @@ -629,7 +832,7 @@ FAN_TO_REG(VIA686A_INIT_FAN_MIN, 2)); via686a_write_value(client, VIA686A_REG_FAN_MIN(2), FAN_TO_REG(VIA686A_INIT_FAN_MIN, 2)); - for (i = 1; i <= 3; i++) { + for (i = 0; i <= 2; i++) { via686a_write_value(client, VIA686A_REG_TEMP_OVER(i), TEMP_TO_REG(VIA686A_INIT_TEMP_OVER)); via686a_write_value(client, VIA686A_REG_TEMP_HYST(i), @@ -670,13 +873,13 @@ data->fan_min[i - 1] = via686a_read_value(client, VIA686A_REG_FAN_MIN(i)); } - for (i = 1; i <= 3; i++) { - data->temp[i - 1] = via686a_read_value(client, + for (i = 0; i <= 2; i++) { + data->temp[i] = via686a_read_value(client, VIA686A_REG_TEMP(i)) << 2; - data->temp_over[i - 1] = + data->temp_over[i] = via686a_read_value(client, VIA686A_REG_TEMP_OVER(i)); - data->temp_hyst[i - 1] = + data->temp_hyst[i] = via686a_read_value(client, VIA686A_REG_TEMP_HYST(i)); } @@ -709,164 +912,12 @@ up(&data->update_lock); } - -/* The next few functions are the call-back functions of the /proc/sys and - sysctl files. Which function is used is defined in the ctl_table in - the extra1 field. - Each function must return the magnitude (power of 10 to divide the date - with) if it is called with operation==SENSORS_PROC_REAL_INFO. It must - put a maximum of *nrels elements in results reflecting the data of this - file, and set *nrels to the number it actually put in it, if operation== - SENSORS_PROC_REAL_READ. Finally, it must get upto *nrels elements from - results and write them to the chip, if operations==SENSORS_PROC_REAL_WRITE. - Note that on SENSORS_PROC_REAL_READ, I do not check whether results is - large enough (by checking the incoming value of *nrels). This is not very - good practice, but as long as you put less than about 5 values in results, - you can assume it is large enough. */ -/* FIXME, remove these functions, they are here to verify the sysfs conversion - * is correct, or not */ -__attribute__((unused)) -static void via686a_in(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int nr = ctl_name - VIA686A_SYSCTL_IN0; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 2; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = IN_FROM_REG(data->in_min[nr], nr); - results[1] = IN_FROM_REG(data->in_max[nr], nr); - results[2] = IN_FROM_REG(data->in[nr], nr); - *nrels_mag = 3; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - if (*nrels_mag >= 1) { - data->in_min[nr] = IN_TO_REG(results[0], nr); - via686a_write_value(client, VIA686A_REG_IN_MIN(nr), - data->in_min[nr]); - } - if (*nrels_mag >= 2) { - data->in_max[nr] = IN_TO_REG(results[1], nr); - via686a_write_value(client, VIA686A_REG_IN_MAX(nr), - data->in_max[nr]); - } - } -} - -__attribute__((unused)) -static void via686a_fan(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int nr = ctl_name - VIA686A_SYSCTL_FAN1 + 1; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 0; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = FAN_FROM_REG(data->fan_min[nr - 1], - DIV_FROM_REG(data->fan_div - [nr - 1])); - results[1] = FAN_FROM_REG(data->fan[nr - 1], - DIV_FROM_REG(data->fan_div[nr - 1])); - *nrels_mag = 2; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - if (*nrels_mag >= 1) { - data->fan_min[nr - 1] = FAN_TO_REG(results[0], - DIV_FROM_REG(data-> - fan_div[nr -1])); - via686a_write_value(client, - VIA686A_REG_FAN_MIN(nr), - data->fan_min[nr - 1]); - } - } -} - -__attribute__((unused)) -static void via686a_temp(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int nr = ctl_name - VIA686A_SYSCTL_TEMP; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 1; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = TEMP_FROM_REG(data->temp_over[nr]); - results[1] = TEMP_FROM_REG(data->temp_hyst[nr]); - results[2] = TEMP_FROM_REG10(data->temp[nr]); - *nrels_mag = 3; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - if (*nrels_mag >= 1) { - data->temp_over[nr] = TEMP_TO_REG(results[0]); - via686a_write_value(client, - VIA686A_REG_TEMP_OVER(nr + 1), - data->temp_over[nr]); - } - if (*nrels_mag >= 2) { - data->temp_hyst[nr] = TEMP_TO_REG(results[1]); - via686a_write_value(client, - VIA686A_REG_TEMP_HYST(nr + 1), - data->temp_hyst[nr]); - } - } -} - -__attribute__((unused)) -static void via686a_alarms(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 0; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = ALARMS_FROM_REG(data->alarms); - *nrels_mag = 1; - } -} - -__attribute__((unused)) -static void via686a_fan_div(struct i2c_client *client, int operation, - int ctl_name, int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int old; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 0; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = DIV_FROM_REG(data->fan_div[0]); - results[1] = DIV_FROM_REG(data->fan_div[1]); - *nrels_mag = 2; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - old = via686a_read_value(client, VIA686A_REG_FANDIV); - if (*nrels_mag >= 2) { - data->fan_div[1] = DIV_TO_REG(results[1]); - old = (old & 0x3f) | (data->fan_div[1] << 6); - } - if (*nrels_mag >= 1) { - data->fan_div[0] = DIV_TO_REG(results[0]); - old = (old & 0xcf) | (data->fan_div[0] << 4); - via686a_write_value(client, VIA686A_REG_FANDIV, - old); - } - } -} - - static struct pci_device_id via686a_pci_ids[] __devinitdata = { { .vendor = PCI_VENDOR_ID_VIA, .device = PCI_DEVICE_ID_VIA_82C686_4, .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, - .class = 0, - .class_mask = 0, - .driver_data = 0, }, { 0, } }; diff -Nru a/drivers/i2c/chips/w83781d.c b/drivers/i2c/chips/w83781d.c --- a/drivers/i2c/chips/w83781d.c Sat Apr 12 14:44:05 2003 +++ b/drivers/i2c/chips/w83781d.c Sat Apr 12 14:44:05 2003 @@ -364,7 +364,7 @@ \ w83781d_update_client(client); \ \ - return sprintf(buf,"%ld\n", (long)IN_FROM_REG(data->reg[nr])); \ + return sprintf(buf,"%ld\n", (long)IN_FROM_REG(data->reg[nr] * 10)); \ } show_in_reg(in); show_in_reg(in_min); @@ -378,7 +378,7 @@ u32 val; \ \ val = simple_strtoul(buf, NULL, 10); \ - data->in_##reg[nr] = IN_TO_REG(val); \ + data->in_##reg[nr] = (IN_TO_REG(val) / 10); \ w83781d_write_value(client, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \ \ return count; \ @@ -712,7 +712,7 @@ { struct i2c_client *client = to_i2c_client(dev); struct w83781d_data *data = i2c_get_clientdata(client); - u32 val, old, old2, old3; + u32 val, old, old2, old3 = 0; val = simple_strtoul(buf, NULL, 10); old = w83781d_read_value(client, W83781D_REG_VID_FANDIV); diff -Nru a/drivers/i2c/i2c-adap-ite.c b/drivers/i2c/i2c-adap-ite.c --- a/drivers/i2c/i2c-adap-ite.c Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/i2c-adap-ite.c Sat Apr 12 14:44:06 2003 @@ -196,9 +196,11 @@ static struct i2c_adapter iic_ite_ops = { .owner = THIS_MODULE, - .name = "ITE IIC adapter", .id = I2C_HW_I_IIC, .algo_data = &iic_ite_data, + .dev = { + .name = "ITE IIC adapter", + }, }; /* Called when the module is loaded. This function starts the diff -Nru a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c --- a/drivers/i2c/i2c-dev.c Sat Apr 12 14:44:09 2003 +++ b/drivers/i2c/i2c-dev.c Sat Apr 12 14:44:09 2003 @@ -77,7 +77,7 @@ static struct i2c_driver i2cdev_driver = { .owner = THIS_MODULE, - .name = "i2c-dev dummy driver", + .name = "dev driver", .id = I2C_DRIVERID_I2CDEV, .flags = I2C_DF_DUMMY, .attach_adapter = i2cdev_attach_adapter, @@ -100,10 +100,6 @@ char *tmp; int ret; -#ifdef DEBUG - struct inode *inode = file->f_dentry->d_inode; -#endif /* DEBUG */ - struct i2c_client *client = (struct i2c_client *)file->private_data; if (count > 8192) @@ -114,10 +110,8 @@ if (tmp==NULL) return -ENOMEM; -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: i2c-%d reading %d bytes.\n",minor(inode->i_rdev), - count); -#endif + pr_debug("i2c-dev.o: i2c-%d reading %d bytes.\n", + minor(file->f_dentry->d_inode->i_rdev), count); ret = i2c_master_recv(client,tmp,count); if (ret >= 0) @@ -133,10 +127,6 @@ char *tmp; struct i2c_client *client = (struct i2c_client *)file->private_data; -#ifdef DEBUG - struct inode *inode = file->f_dentry->d_inode; -#endif /* DEBUG */ - if (count > 8192) count = 8192; @@ -149,10 +139,9 @@ return -EFAULT; } -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: i2c-%d writing %d bytes.\n",minor(inode->i_rdev), - count); -#endif + pr_debug("i2c-dev.o: i2c-%d writing %d bytes.\n", + minor(file->f_dentry->d_inode->i_rdev), count); + ret = i2c_master_send(client,tmp,count); kfree(tmp); return ret; @@ -169,10 +158,8 @@ int i,datasize,res; unsigned long funcs; -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: i2c-%d ioctl, cmd: 0x%x, arg: %lx.\n", - minor(inode->i_rdev),cmd, arg); -#endif /* DEBUG */ + pr_debug("i2c-dev.o: i2c-%d ioctl, cmd: 0x%x, arg: %lx.\n", + minor(inode->i_rdev),cmd, arg); switch ( cmd ) { case I2C_SLAVE: @@ -207,6 +194,11 @@ sizeof(rdwr_arg))) return -EFAULT; + /* Put an arbritrary limit on the number of messages that can + * be sent at once */ + if (rdwr_arg.nmsgs > 42) + return -EINVAL; + rdwr_pa = (struct i2c_msg *) kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg), GFP_KERNEL); @@ -214,38 +206,43 @@ if (rdwr_pa == NULL) return -ENOMEM; res = 0; - for( i=0; i 8192) { + res = -EINVAL; + break; + } rdwr_pa[i].buf = kmalloc(rdwr_pa[i].len, GFP_KERNEL); - if(rdwr_pa[i].buf == NULL) - { + if(rdwr_pa[i].buf == NULL) { res = -ENOMEM; break; } if(copy_from_user(rdwr_pa[i].buf, rdwr_arg.msgs[i].buf, - rdwr_pa[i].len)) - { - kfree(rdwr_pa[i].buf); + rdwr_pa[i].len)) { res = -EFAULT; break; } } - if (!res) - { + if (res < 0) { + int j; + for (j = 0; j < i; ++j) + kfree(rdwr_pa[j].buf); + kfree(rdwr_pa); + return res; + } + if (!res) { res = i2c_transfer(client->adapter, rdwr_pa, rdwr_arg.nmsgs); } - while(i-- > 0) - { + while(i-- > 0) { if( res>=0 && (rdwr_pa[i].flags & I2C_M_RD)) { if(copy_to_user( @@ -274,20 +271,18 @@ (data_arg.size != I2C_SMBUS_BLOCK_DATA) && (data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA) && (data_arg.size != I2C_SMBUS_BLOCK_PROC_CALL)) { -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: size out of range (%x) in ioctl I2C_SMBUS.\n", - data_arg.size); -#endif + dev_dbg(&client->dev, + "size out of range (%x) in ioctl I2C_SMBUS.\n", + data_arg.size); return -EINVAL; } /* Note that I2C_SMBUS_READ and I2C_SMBUS_WRITE are 0 and 1, so the check is valid if size==I2C_SMBUS_QUICK too. */ if ((data_arg.read_write != I2C_SMBUS_READ) && (data_arg.read_write != I2C_SMBUS_WRITE)) { -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: read_write out of range (%x) in ioctl I2C_SMBUS.\n", - data_arg.read_write); -#endif + dev_dbg(&client->dev, + "read_write out of range (%x) in ioctl I2C_SMBUS.\n", + data_arg.read_write); return -EINVAL; } @@ -298,15 +293,14 @@ (data_arg.read_write == I2C_SMBUS_WRITE))) /* These are special: we do not use data */ return i2c_smbus_xfer(client->adapter, client->addr, - client->flags, - data_arg.read_write, - data_arg.command, - data_arg.size, NULL); + client->flags, + data_arg.read_write, + data_arg.command, + data_arg.size, NULL); if (data_arg.data == NULL) { -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: data is NULL pointer in ioctl I2C_SMBUS.\n"); -#endif + dev_dbg(&client->dev, + "data is NULL pointer in ioctl I2C_SMBUS.\n"); return -EINVAL; } @@ -365,7 +359,7 @@ return 0; - out_kfree: +out_kfree: kfree(client); return -ENODEV; } @@ -428,7 +422,8 @@ { int res; - printk(KERN_INFO "i2c-dev.o: i2c /dev entries driver module version %s (%s)\n", I2C_VERSION, I2C_DATE); + printk(KERN_INFO "i2c /dev entries driver module version %s (%s)\n", + I2C_VERSION, I2C_DATE); if (register_chrdev(I2C_MAJOR,"i2c",&i2cdev_fops)) { printk(KERN_ERR "i2c-dev.o: unable to get major %d for i2c bus\n", diff -Nru a/drivers/i2c/i2c-frodo.c b/drivers/i2c/i2c-frodo.c --- a/drivers/i2c/i2c-frodo.c Sat Apr 12 14:44:05 2003 +++ b/drivers/i2c/i2c-frodo.c Sat Apr 12 14:44:05 2003 @@ -59,9 +59,11 @@ static struct i2c_adapter frodo_ops = { .owner = THIS_MODULE, - .name = "Frodo adapter driver", .id = I2C_HW_B_FRODO, .algo_data = &bit_frodo_data, + .dev = { + .name = "Frodo adapter driver", + }, }; static int __init i2c_frodo_init (void) diff -Nru a/drivers/i2c/i2c-keywest.c b/drivers/i2c/i2c-keywest.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/i2c-keywest.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,666 @@ +/* + i2c Support for Apple Keywest I2C Bus Controller + + Copyright (c) 2001 Benjamin Herrenschmidt + + Original work by + + Copyright (c) 2000 Philip Edelbrock + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + Changes: + + 2001/12/13 BenH New implementation + 2001/12/15 BenH Add support for "byte" and "quick" + transfers. Add i2c_xfer routine. + + My understanding of the various modes supported by keywest are: + + - Dumb mode : not implemented, probably direct tweaking of lines + - Standard mode : simple i2c transaction of type + S Addr R/W A Data A Data ... T + - Standard sub mode : combined 8 bit subaddr write with data read + S Addr R/W A SubAddr A Data A Data ... T + - Combined mode : Subaddress and Data sequences appended with no stop + S Addr R/W A SubAddr S Addr R/W A Data A Data ... T + + Currently, this driver uses only Standard mode for i2c xfer, and + smbus byte & quick transfers ; and uses StandardSub mode for + other smbus transfers instead of combined as we need that for the + sound driver to be happy +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "i2c-keywest.h" + +#undef POLLED_MODE + +#define DBG(x...) do {\ + if (debug > 0) \ + printk(KERN_DEBUG "KW:" x); \ + } while(0) + + +MODULE_AUTHOR("Benjamin Herrenschmidt "); +MODULE_DESCRIPTION("I2C driver for Apple's Keywest"); +MODULE_LICENSE("GPL"); +MODULE_PARM(probe, "i"); +MODULE_PARM(debug, "i"); + +int probe = 0; +int debug = 0; + +static struct keywest_iface *ifaces = NULL; + +#ifdef POLLED_MODE +/* This isn't fast, but will go once I implement interrupt with + * proper timeout + */ +static u8 +wait_interrupt(struct keywest_iface* iface) +{ + int i; + u8 isr; + + for (i = 0; i < POLL_TIMEOUT; i++) { + isr = read_reg(reg_isr) & KW_I2C_IRQ_MASK; + if (isr != 0) + return isr; + current->state = TASK_UNINTERRUPTIBLE; + schedule_timeout(1); + } + return isr; +} +#endif /* POLLED_MODE */ + + +static void +do_stop(struct keywest_iface* iface, int result) +{ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_STOP); + iface->state = state_stop; + iface->result = result; +} + +/* Main state machine for standard & standard sub mode */ +static void +handle_interrupt(struct keywest_iface *iface, u8 isr) +{ + int ack; + + DBG("handle_interrupt(), got: %x, status: %x, state: %d\n", + isr, read_reg(reg_status), iface->state); + if (isr == 0 && iface->state != state_stop) { + do_stop(iface, -1); + return; + } + if (isr & KW_I2C_IRQ_STOP && iface->state != state_stop) { + iface->result = -1; + iface->state = state_stop; + } + switch(iface->state) { + case state_addr: + if (!(isr & KW_I2C_IRQ_ADDR)) { + do_stop(iface, -1); + break; + } + ack = read_reg(reg_status); + DBG("ack on set address: %x\n", ack); + if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { + do_stop(iface, -1); + break; + } + /* Handle rw "quick" mode */ + if (iface->datalen == 0) + do_stop(iface, 0); + else if (iface->read_write == I2C_SMBUS_READ) { + iface->state = state_read; + if (iface->datalen > 1) + write_reg(reg_control, read_reg(reg_control) + | KW_I2C_CTL_AAK); + } else { + iface->state = state_write; + DBG("write byte: %x\n", *(iface->data)); + write_reg(reg_data, *(iface->data++)); + iface->datalen--; + } + + break; + case state_read: + if (!(isr & KW_I2C_IRQ_DATA)) { + do_stop(iface, -1); + break; + } + *(iface->data++) = read_reg(reg_data); + DBG("read byte: %x\n", *(iface->data-1)); + iface->datalen--; + if (iface->datalen == 0) + iface->state = state_stop; + else + write_reg(reg_control, 0); + break; + case state_write: + if (!(isr & KW_I2C_IRQ_DATA)) { + do_stop(iface, -1); + break; + } + /* Check ack status */ + ack = read_reg(reg_status); + DBG("ack on data write: %x\n", ack); + if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { + do_stop(iface, -1); + break; + } + if (iface->datalen) { + DBG("write byte: %x\n", *(iface->data)); + write_reg(reg_data, *(iface->data++)); + iface->datalen--; + } else + do_stop(iface, 0); + break; + + case state_stop: + if (!(isr & KW_I2C_IRQ_STOP) && (++iface->stopretry) < 10) + do_stop(iface, -1); + else { + iface->state = state_idle; + write_reg(reg_control, 0x00); + write_reg(reg_ier, 0x00); +#ifndef POLLED_MODE + complete(&iface->complete); +#endif /* POLLED_MODE */ + } + break; + } + + write_reg(reg_isr, isr); +} + +#ifndef POLLED_MODE + +/* Interrupt handler */ +static void +keywest_irq(int irq, void *dev_id, struct pt_regs *regs) +{ + struct keywest_iface *iface = (struct keywest_iface *)dev_id; + + spin_lock(&iface->lock); + del_timer(&iface->timeout_timer); + handle_interrupt(iface, read_reg(reg_isr)); + if (iface->state != state_idle) { + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + } + spin_unlock(&iface->lock); +} + +static void +keywest_timeout(unsigned long data) +{ + struct keywest_iface *iface = (struct keywest_iface *)data; + + DBG("timeout !\n"); + spin_lock_irq(&iface->lock); + handle_interrupt(iface, read_reg(reg_isr)); + if (iface->state != state_idle) { + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + } + spin_unlock(&iface->lock); +} + +#endif /* POLLED_MODE */ + +/* + * SMBUS-type transfer entrypoint + */ +static s32 +keywest_smbus_xfer( struct i2c_adapter* adap, + u16 addr, + unsigned short flags, + char read_write, + u8 command, + int size, + union i2c_smbus_data* data) +{ + struct keywest_chan* chan = i2c_get_adapdata(adap); + struct keywest_iface* iface = chan->iface; + int len; + u8* buffer; + u16 cur_word; + int rc = 0; + + if (iface->state == state_dead) + return -1; + + /* Prepare datas & select mode */ + iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; + switch (size) { + case I2C_SMBUS_QUICK: + len = 0; + buffer = NULL; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + break; + case I2C_SMBUS_BYTE: + len = 1; + buffer = &data->byte; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + break; + case I2C_SMBUS_BYTE_DATA: + len = 1; + buffer = &data->byte; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + case I2C_SMBUS_WORD_DATA: + len = 2; + cur_word = cpu_to_le16(data->word); + buffer = (u8 *)&cur_word; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + case I2C_SMBUS_BLOCK_DATA: + len = data->block[0]; + buffer = &data->block[1]; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + default: + return -1; + } + + /* Original driver had this limitation */ + if (len > 32) + len = 32; + + down(&iface->sem); + + DBG("chan: %d, addr: 0x%x, transfer len: %d, read: %d\n", + chan->chan_no, addr, len, read_write == I2C_SMBUS_READ); + + iface->data = buffer; + iface->datalen = len; + iface->state = state_addr; + iface->result = 0; + iface->stopretry = 0; + iface->read_write = read_write; + + /* Setup channel & clear pending irqs */ + write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); + write_reg(reg_isr, read_reg(reg_isr)); + write_reg(reg_status, 0); + + /* Set up address and r/w bit */ + write_reg(reg_addr, + (addr << 1) | ((read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); + + /* Set up the sub address */ + if ((iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_STANDARDSUB + || (iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_COMBINED) + write_reg(reg_subaddr, command); + + /* Arm timeout */ + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + + /* Start sending address & enable interrupt*/ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); + write_reg(reg_ier, KW_I2C_IRQ_MASK); + +#ifdef POLLED_MODE + DBG("using polled mode...\n"); + /* State machine, to turn into an interrupt handler */ + while(iface->state != state_idle) { + u8 isr = wait_interrupt(iface); + handle_interrupt(iface, isr); + } +#else /* POLLED_MODE */ + DBG("using interrupt mode...\n"); + wait_for_completion(&iface->complete); +#endif /* POLLED_MODE */ + + rc = iface->result; + DBG("transfer done, result: %d\n", rc); + + if (rc == 0 && size == I2C_SMBUS_WORD_DATA && read_write == I2C_SMBUS_READ) + data->word = le16_to_cpu(cur_word); + + /* Release sem */ + up(&iface->sem); + + return rc; +} + +/* + * Generic i2c master transfer entrypoint + */ +static int +keywest_xfer( struct i2c_adapter *adap, + struct i2c_msg msgs[], + int num) +{ + struct keywest_chan* chan = i2c_get_adapdata(adap); + struct keywest_iface* iface = chan->iface; + struct i2c_msg *pmsg; + int i, completed; + int rc = 0; + + down(&iface->sem); + + /* Set adapter to standard mode */ + iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + + completed = 0; + for (i = 0; rc >= 0 && i < num;) { + u8 addr; + + pmsg = &msgs[i++]; + addr = pmsg->addr; + if (pmsg->flags & I2C_M_TEN) { + printk(KERN_ERR "i2c-keywest: 10 bits addr not supported !\n"); + rc = -EINVAL; + break; + } + DBG("xfer: chan: %d, doing %s %d bytes to 0x%02x - %d of %d messages\n", + chan->chan_no, + pmsg->flags & I2C_M_RD ? "read" : "write", + pmsg->len, addr, i, num); + + /* Setup channel & clear pending irqs */ + write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); + write_reg(reg_isr, read_reg(reg_isr)); + write_reg(reg_status, 0); + + iface->data = pmsg->buf; + iface->datalen = pmsg->len; + iface->state = state_addr; + iface->result = 0; + iface->stopretry = 0; + if (pmsg->flags & I2C_M_RD) + iface->read_write = I2C_SMBUS_READ; + else + iface->read_write = I2C_SMBUS_WRITE; + + /* Set up address and r/w bit */ + if (pmsg->flags & I2C_M_REV_DIR_ADDR) + addr ^= 1; + write_reg(reg_addr, + (addr << 1) | + ((iface->read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); + + /* Arm timeout */ + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + + /* Start sending address & enable interrupt*/ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); + write_reg(reg_ier, KW_I2C_IRQ_MASK); + +#ifdef POLLED_MODE + DBG("using polled mode...\n"); + /* State machine, to turn into an interrupt handler */ + while(iface->state != state_idle) { + u8 isr = wait_interrupt(iface); + handle_interrupt(iface, isr); + } +#else /* POLLED_MODE */ + DBG("using interrupt mode...\n"); + wait_for_completion(&iface->complete); +#endif /* POLLED_MODE */ + + rc = iface->result; + if (rc == 0) + completed++; + DBG("transfer done, result: %d\n", rc); + } + + /* Release sem */ + up(&iface->sem); + + return completed; +} + +static u32 +keywest_func(struct i2c_adapter * adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + +/* For now, we only handle combined mode (smbus) */ +static struct i2c_algorithm keywest_algorithm = { + name: "Keywest i2c", + id: I2C_ALGO_SMBUS, + smbus_xfer: keywest_smbus_xfer, + master_xfer: keywest_xfer, + functionality: keywest_func, +}; + + +static int +create_iface(struct device_node* np) +{ + unsigned long steps, *psteps, *prate; + unsigned bsteps, tsize, i, nchan, addroffset; + struct keywest_iface* iface; + int rc; + + psteps = (unsigned long *)get_property(np, "AAPL,address-step", NULL); + steps = psteps ? (*psteps) : 0x10; + + /* Hrm... maybe we can be smarter here */ + for (bsteps = 0; (steps & 0x01) == 0; bsteps++) + steps >>= 1; + + if (!strcmp(np->parent->name, "uni-n")) { + nchan = 2; + addroffset = 3; + } else { + addroffset = 0; + nchan = 1; + } + + tsize = sizeof(struct keywest_iface) + + (sizeof(struct keywest_chan) + 4) * nchan; + iface = (struct keywest_iface *) kmalloc(tsize, GFP_KERNEL); + if (iface == NULL) { + printk(KERN_ERR "i2c-keywest: can't allocate inteface !\n"); + return -ENOMEM; + } + memset(iface, 0, tsize); + init_MUTEX(&iface->sem); + spin_lock_init(&iface->lock); + init_completion(&iface->complete); + iface->bsteps = bsteps; + iface->chan_count = nchan; + iface->state = state_idle; + iface->irq = np->intrs[0].line; + iface->channels = (struct keywest_chan *) + (((unsigned long)(iface + 1) + 3UL) & ~3UL); + iface->base = (unsigned long)ioremap(np->addrs[0].address + addroffset, + np->addrs[0].size); + if (iface->base == 0) { + printk(KERN_ERR "i2c-keywest: can't map inteface !\n"); + kfree(iface); + return -ENOMEM; + } + + init_timer(&iface->timeout_timer); + iface->timeout_timer.function = keywest_timeout; + iface->timeout_timer.data = (unsigned long)iface; + + /* Select interface rate */ + iface->cur_mode = KW_I2C_MODE_100KHZ; + prate = (unsigned long *)get_property(np, "AAPL,i2c-rate", NULL); + if (prate) switch(*prate) { + case 100: + iface->cur_mode = KW_I2C_MODE_100KHZ; + break; + case 50: + iface->cur_mode = KW_I2C_MODE_50KHZ; + break; + case 25: + iface->cur_mode = KW_I2C_MODE_25KHZ; + break; + default: + printk(KERN_WARNING "i2c-keywest: unknown rate %ldKhz, using 100KHz\n", + *prate); + } + + /* Select standard sub mode */ + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + + /* Write mode */ + write_reg(reg_mode, iface->cur_mode); + + /* Switch interrupts off & clear them*/ + write_reg(reg_ier, 0x00); + write_reg(reg_isr, KW_I2C_IRQ_MASK); + +#ifndef POLLED_MODE + /* Request chip interrupt */ + rc = request_irq(iface->irq, keywest_irq, 0, "keywest i2c", iface); + if (rc) { + printk(KERN_ERR "i2c-keywest: can't get IRQ %d !\n", iface->irq); + iounmap((void *)iface->base); + kfree(iface); + return -ENODEV; + } +#endif /* POLLED_MODE */ + + for (i=0; ichannels[i]; + u8 addr; + + sprintf(chan->adapter.dev.name, "%s %d", np->parent->name, i); + chan->iface = iface; + chan->chan_no = i; + chan->adapter.id = I2C_ALGO_SMBUS; + chan->adapter.algo = &keywest_algorithm; + chan->adapter.algo_data = NULL; + chan->adapter.client_register = NULL; + chan->adapter.client_unregister = NULL; + i2c_set_adapdata(&chan->adapter, chan); + + rc = i2c_add_adapter(&chan->adapter); + if (rc) { + printk("i2c-keywest.c: Adapter %s registration failed\n", + chan->adapter.dev.name); + i2c_set_adapdata(&chan->adapter, NULL); + } + if (probe) { + printk("Probe: "); + for (addr = 0x00; addr <= 0x7f; addr++) { + if (i2c_smbus_xfer(&chan->adapter,addr, + 0,0,0,I2C_SMBUS_QUICK,NULL) >= 0) + printk("%02x ", addr); + } + printk("\n"); + } + } + + printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n", + np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps); + + iface->next = ifaces; + ifaces = iface; + return 0; +} + +static void +dispose_iface(struct keywest_iface *iface) +{ + int i, rc; + + ifaces = iface->next; + + /* Make sure we stop all activity */ + down(&iface->sem); +#ifndef POLLED_MODE + spin_lock_irq(&iface->lock); + while (iface->state != state_idle) { + spin_unlock_irq(&iface->lock); + schedule(); + spin_lock_irq(&iface->lock); + } +#endif /* POLLED_MODE */ + iface->state = state_dead; +#ifndef POLLED_MODE + spin_unlock_irq(&iface->lock); + free_irq(iface->irq, iface); +#endif /* POLLED_MODE */ + up(&iface->sem); + + /* Release all channels */ + for (i=0; ichan_count; i++) { + struct keywest_chan* chan = &iface->channels[i]; + if (i2c_get_adapdata(&chan->adapter) == NULL) + continue; + rc = i2c_del_adapter(&chan->adapter); + i2c_set_adapdata(&chan->adapter, NULL); + /* We aren't that prepared to deal with this... */ + if (rc) + printk("i2c-keywest.c: i2c_del_adapter failed, that's bad !\n"); + } + iounmap((void *)iface->base); + kfree(iface); +} + +static int __init +i2c_keywest_init(void) +{ + struct device_node *np; + int rc = -ENODEV; + + np = find_compatible_devices("i2c", "keywest"); + while (np != 0) { + if (np->n_addrs >= 1 && np->n_intrs >= 1) + rc = create_iface(np); + np = np->next; + } + if (ifaces) + rc = 0; + return rc; +} + +static void __exit +i2c_keywest_cleanup(void) +{ + while(ifaces) + dispose_iface(ifaces); +} + +module_init(i2c_keywest_init); +module_exit(i2c_keywest_cleanup); diff -Nru a/drivers/i2c/i2c-keywest.h b/drivers/i2c/i2c-keywest.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/i2c-keywest.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,111 @@ +#ifndef __I2C_KEYWEST_H__ +#define __I2C_KEYWEST_H__ + +/* The Tumbler audio equalizer can be really slow sometimes */ +#define POLL_TIMEOUT (2*HZ) + +/* Register indices */ +typedef enum { + reg_mode = 0, + reg_control, + reg_status, + reg_isr, + reg_ier, + reg_addr, + reg_subaddr, + reg_data +} reg_t; + + +/* Mode register */ +#define KW_I2C_MODE_100KHZ 0x00 +#define KW_I2C_MODE_50KHZ 0x01 +#define KW_I2C_MODE_25KHZ 0x02 +#define KW_I2C_MODE_DUMB 0x00 +#define KW_I2C_MODE_STANDARD 0x04 +#define KW_I2C_MODE_STANDARDSUB 0x08 +#define KW_I2C_MODE_COMBINED 0x0C +#define KW_I2C_MODE_MODE_MASK 0x0C +#define KW_I2C_MODE_CHAN_MASK 0xF0 + +/* Control register */ +#define KW_I2C_CTL_AAK 0x01 +#define KW_I2C_CTL_XADDR 0x02 +#define KW_I2C_CTL_STOP 0x04 +#define KW_I2C_CTL_START 0x08 + +/* Status register */ +#define KW_I2C_STAT_BUSY 0x01 +#define KW_I2C_STAT_LAST_AAK 0x02 +#define KW_I2C_STAT_LAST_RW 0x04 +#define KW_I2C_STAT_SDA 0x08 +#define KW_I2C_STAT_SCL 0x10 + +/* IER & ISR registers */ +#define KW_I2C_IRQ_DATA 0x01 +#define KW_I2C_IRQ_ADDR 0x02 +#define KW_I2C_IRQ_STOP 0x04 +#define KW_I2C_IRQ_START 0x08 +#define KW_I2C_IRQ_MASK 0x0F + +/* Physical interface */ +struct keywest_iface +{ + unsigned long base; + unsigned bsteps; + int irq; + struct semaphore sem; + spinlock_t lock; + struct keywest_chan* channels; + unsigned chan_count; + u8 cur_mode; + char read_write; + u8* data; + unsigned datalen; + int state; + int result; + int stopretry; + struct timer_list timeout_timer; + struct completion complete; + struct keywest_iface* next; +}; + +enum { + state_idle, + state_addr, + state_read, + state_write, + state_stop, + state_dead +}; + +/* Channel on an interface */ +struct keywest_chan +{ + struct i2c_adapter adapter; + struct keywest_iface* iface; + unsigned chan_no; +}; + +/* Register access */ + +static inline u8 __read_reg(struct keywest_iface *iface, reg_t reg) +{ + return in_8(((volatile u8 *)iface->base) + + (((unsigned)reg) << iface->bsteps)); +} + +static inline void __write_reg(struct keywest_iface *iface, reg_t reg, u8 val) +{ + out_8(((volatile u8 *)iface->base) + + (((unsigned)reg) << iface->bsteps), val); + (void)__read_reg(iface, reg); + udelay(10); +} + +#define write_reg(reg, val) __write_reg(iface, reg, val) +#define read_reg(reg) __read_reg(iface, reg) + + + +#endif /* __I2C_KEYWEST_H__ */ diff -Nru a/drivers/i2c/scx200_i2c.c b/drivers/i2c/scx200_i2c.c --- a/drivers/i2c/scx200_i2c.c Sat Apr 12 14:44:08 2003 +++ b/drivers/i2c/scx200_i2c.c Sat Apr 12 14:44:08 2003 @@ -82,9 +82,11 @@ static struct i2c_adapter scx200_i2c_ops = { .owner = THIS_MODULE, - .name = "NatSemi SCx200 I2C", .id = I2C_HW_B_VELLE, .algo_data = &scx200_i2c_data, + .dev = { + .name = "NatSemi SCx200 I2C", + }, }; int scx200_i2c_init(void) @@ -110,7 +112,7 @@ if (i2c_bit_add_bus(&scx200_i2c_ops) < 0) { printk(KERN_ERR NAME ": adapter %s registration failed\n", - scx200_i2c_ops.name); + scx200_i2c_ops.dev.name); return -ENODEV; } diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c --- a/drivers/ide/ide-probe.c Sat Apr 12 14:44:08 2003 +++ b/drivers/ide/ide-probe.c Sat Apr 12 14:44:08 2003 @@ -1008,8 +1008,8 @@ * do not. */ - q->queuedata = HWGROUP(drive); blk_init_queue(q, do_ide_request, &ide_lock); + q->queuedata = HWGROUP(drive); drive->queue_setup = 1; blk_queue_segment_boundary(q, 0xffff); diff -Nru a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c --- a/drivers/ide/pci/hpt366.c Sat Apr 12 14:44:08 2003 +++ b/drivers/ide/pci/hpt366.c Sat Apr 12 14:44:08 2003 @@ -1106,13 +1106,10 @@ ((findev->devfn - dev->devfn) == 1) && (PCI_FUNC(findev->devfn) & 1)) { u8 irq = 0, irq2 = 0; - pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); - pci_read_config_byte(findev, PCI_INTERRUPT_LINE, &irq2); - if (irq != irq2) { - pci_write_config_byte(findev, - PCI_INTERRUPT_LINE, irq); + if (findev->irq != dev->irq) { + /* FIXME: we need a core pci_set_interrupt() */ findev->irq = dev->irq; - printk("%s: pci-config space interrupt " + printk(KERN_WARNING "%s: pci-config space interrupt " "fixed.\n", d->name); } ide_setup_pci_devices(dev, findev, d); diff -Nru a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c --- a/drivers/ide/pci/pdc202xx_new.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ide/pci/pdc202xx_new.c Sat Apr 12 14:44:09 2003 @@ -592,15 +592,8 @@ if ((findev->vendor == dev->vendor) && (findev->device == dev->device) && (PCI_SLOT(findev->devfn) & 2)) { - u8 irq = 0, irq2 = 0; - pci_read_config_byte(dev, - PCI_INTERRUPT_LINE, &irq); - pci_read_config_byte(findev, - PCI_INTERRUPT_LINE, &irq2); - if (irq != irq2) { + if (findev->irq != dev->irq) { findev->irq = dev->irq; - pci_write_config_byte(findev, - PCI_INTERRUPT_LINE, irq); } ide_setup_pci_devices(dev, findev, d); return; diff -Nru a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c --- a/drivers/ide/pci/serverworks.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ide/pci/serverworks.c Sat Apr 12 14:44:06 2003 @@ -419,7 +419,13 @@ static void svwks_tune_drive (ide_drive_t *drive, u8 pio) { - (void) svwks_tune_chipset(drive, (XFER_PIO_0 + pio)); + /* Tune to desired value or to "best". We must not adjust + "best" when we adjust from pio numbers to rate values! */ + + if(pio != 255) + (void) svwks_tune_chipset(drive, (XFER_PIO_0 + pio)); + else + (void) svwks_tune_chipset(drive, 255); } static int config_chipset_for_dma (ide_drive_t *drive) diff -Nru a/drivers/ieee1394/csr.c b/drivers/ieee1394/csr.c --- a/drivers/ieee1394/csr.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/csr.c Sat Apr 12 14:44:06 2003 @@ -18,7 +18,8 @@ */ #include -#include /* needed for MODULE_PARM */ +#include +#include #include "ieee1394_types.h" #include "hosts.h" @@ -27,9 +28,10 @@ /* Module Parameters */ /* this module parameter can be used to disable mapping of the FCP registers */ -MODULE_PARM(fcp,"i"); -MODULE_PARM_DESC(fcp, "Map FCP registers (default = 1, disable = 0)."); + static int fcp = 1; +module_param(fcp, int, 0444); +MODULE_PARM_DESC(fcp, "Map FCP registers (default = 1, disable = 0)."); static u16 csr_crc16(unsigned *data, int length) { diff -Nru a/drivers/ieee1394/dv1394.c b/drivers/ieee1394/dv1394.c --- a/drivers/ieee1394/dv1394.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/dv1394.c Sat Apr 12 14:44:09 2003 @@ -2919,11 +2919,7 @@ } #ifdef CONFIG_DEVFS_FS - if (!devfs_mk_dir("ieee1394/dv")) { - printk(KERN_ERR "dv1394: unable to create /dev/ieee1394/dv\n"); - ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_DV1394); - return -ENOMEM; - } + devfs_mk_dir("ieee1394/dv"); #endif #ifdef CONFIG_PROC_FS diff -Nru a/drivers/ieee1394/highlevel.c b/drivers/ieee1394/highlevel.c --- a/drivers/ieee1394/highlevel.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/highlevel.c Sat Apr 12 14:44:09 2003 @@ -57,7 +57,8 @@ list_add_tail(&hl->hl_list, &hl_drivers); up(&hl_drivers_lock); - hl_all_hosts(hl->op->add_host); + if (hl->op->add_host) + hl_all_hosts(hl->op->add_host); return hl; } @@ -98,6 +99,7 @@ struct hpsb_address_serve *as; struct list_head *entry; int retval = 0; + unsigned long flags; if (((start|end) & 3) || (start >= end) || (end > 0x1000000000000ULL)) { HPSB_ERR("%s called with invalid addresses", __FUNCTION__); @@ -116,7 +118,7 @@ as->start = start; as->end = end; - write_lock_irq(&addr_space_lock); + write_lock_irqsave(&addr_space_lock, flags); entry = addr_space.next; while (list_entry(entry, struct hpsb_address_serve, as_list)->end <= start) { @@ -128,7 +130,7 @@ } entry = entry->next; } - write_unlock_irq(&addr_space_lock); + write_unlock_irqrestore(&addr_space_lock, flags); if (retval == 0) { kfree(as); @@ -142,8 +144,9 @@ int retval = 0; struct hpsb_address_serve *as; struct list_head *entry; + unsigned long flags; - write_lock_irq(&addr_space_lock); + write_lock_irqsave(&addr_space_lock, flags); entry = hl->addr_list.next; @@ -159,7 +162,7 @@ } } - write_unlock_irq(&addr_space_lock); + write_unlock_irqrestore(&addr_space_lock, flags); return retval; } @@ -202,7 +205,8 @@ list_for_each(entry, &hl_drivers) { hl = list_entry(entry, struct hpsb_highlevel, hl_list); - hl->op->add_host(host); + if (hl->op->add_host) + hl->op->add_host(host); } up(&hl_drivers_lock); } @@ -237,48 +241,40 @@ up(&hl_drivers_lock); } -void highlevel_iso_receive(struct hpsb_host *host, quadlet_t *data, +void highlevel_iso_receive(struct hpsb_host *host, void *data, unsigned int length) { struct list_head *entry; struct hpsb_highlevel *hl; - int channel = (data[0] >> 8) & 0x3f; + int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f; down(&hl_drivers_lock); - entry = hl_drivers.next; - - while (entry != &hl_drivers) { + list_for_each(entry, &hl_drivers) { hl = list_entry(entry, struct hpsb_highlevel, hl_list); - if (hl->op->iso_receive) { + + if (hl->op->iso_receive) hl->op->iso_receive(host, channel, data, length); - } - entry = entry->next; } up(&hl_drivers_lock); } void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction, - u8 *data, unsigned int length) + void *data, unsigned int length) { struct list_head *entry; struct hpsb_highlevel *hl; - int cts = data[0] >> 4; + int cts = ((quadlet_t *)data)[0] >> 4; down(&hl_drivers_lock); - entry = hl_drivers.next; - - while (entry != &hl_drivers) { + list_for_each(entry, &hl_drivers) { hl = list_entry(entry, struct hpsb_highlevel, hl_list); - if (hl->op->fcp_request) { - hl->op->fcp_request(host, nodeid, direction, cts, data, - length); - } - entry = entry->next; + if (hl->op->fcp_request) + hl->op->fcp_request(host, nodeid, direction, cts, data, length); } up(&hl_drivers_lock); } -int highlevel_read(struct hpsb_host *host, int nodeid, quadlet_t *buffer, +int highlevel_read(struct hpsb_host *host, int nodeid, void *data, u64 addr, unsigned int length, u16 flags) { struct hpsb_address_serve *as; @@ -295,13 +291,14 @@ if (as->end > addr) { partlength = min(as->end - addr, (u64) length); - if (as->op->read != NULL) { - rcode = as->op->read(host, nodeid, buffer, + if (as->op->read) { + rcode = as->op->read(host, nodeid, data, addr, partlength, flags); } else { rcode = RCODE_TYPE_ERROR; } + (u8 *)data += partlength; length -= partlength; addr += partlength; @@ -324,7 +321,7 @@ } int highlevel_write(struct hpsb_host *host, int nodeid, int destid, - quadlet_t *data, u64 addr, unsigned int length, u16 flags) + void *data, u64 addr, unsigned int length, u16 flags) { struct hpsb_address_serve *as; struct list_head *entry; @@ -340,13 +337,14 @@ if (as->end > addr) { partlength = min(as->end - addr, (u64) length); - if (as->op->write != NULL) { + if (as->op->write) { rcode = as->op->write(host, nodeid, destid, data, addr, partlength, flags); } else { rcode = RCODE_TYPE_ERROR; } + (u8 *)data += partlength; length -= partlength; addr += partlength; @@ -383,7 +381,7 @@ while (as->start <= addr) { if (as->end > addr) { - if (as->op->lock != NULL) { + if (as->op->lock) { rcode = as->op->lock(host, nodeid, store, addr, data, arg, ext_tcode, flags); } else { @@ -416,7 +414,7 @@ while (as->start <= addr) { if (as->end > addr) { - if (as->op->lock64 != NULL) { + if (as->op->lock64) { rcode = as->op->lock64(host, nodeid, store, addr, data, arg, ext_tcode, flags); diff -Nru a/drivers/ieee1394/highlevel.h b/drivers/ieee1394/highlevel.h --- a/drivers/ieee1394/highlevel.h Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/highlevel.h Sat Apr 12 14:44:07 2003 @@ -108,19 +108,19 @@ later case, no response will be sent and the driver, that handled the request will send the response itself. */ -int highlevel_read(struct hpsb_host *host, int nodeid, quadlet_t *buffer, +int highlevel_read(struct hpsb_host *host, int nodeid, void *data, u64 addr, unsigned int length, u16 flags); int highlevel_write(struct hpsb_host *host, int nodeid, int destid, - quadlet_t *data, u64 addr, unsigned int length, u16 flags); + void *data, u64 addr, unsigned int length, u16 flags); int highlevel_lock(struct hpsb_host *host, int nodeid, quadlet_t *store, u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode, u16 flags); int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store, u64 addr, octlet_t data, octlet_t arg, int ext_tcode, u16 flags); -void highlevel_iso_receive(struct hpsb_host *host, quadlet_t *data, +void highlevel_iso_receive(struct hpsb_host *host, void *data, unsigned int length); void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction, - u8 *data, unsigned int length); + void *data, unsigned int length); /* diff -Nru a/drivers/ieee1394/hosts.h b/drivers/ieee1394/hosts.h --- a/drivers/ieee1394/hosts.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/hosts.h Sat Apr 12 14:44:06 2003 @@ -1,6 +1,7 @@ #ifndef _IEEE1394_HOSTS_H #define _IEEE1394_HOSTS_H +#include #include #include #include @@ -64,6 +65,8 @@ struct hpsb_host_driver *driver; struct pci_dev *pdev; + + struct device device; }; diff -Nru a/drivers/ieee1394/ieee1394.h b/drivers/ieee1394/ieee1394.h --- a/drivers/ieee1394/ieee1394.h Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/ieee1394.h Sat Apr 12 14:44:07 2003 @@ -46,9 +46,13 @@ #define ACKX_TIMEOUT (-4) -#define SPEED_100 0x0 -#define SPEED_200 0x1 -#define SPEED_400 0x2 +#define SPEED_100 0x00 +#define SPEED_200 0x01 +#define SPEED_400 0x02 +#define SPEED_800 0x03 +#define SPEED_1600 0x04 +#define SPEED_3200 0x05 + /* Maps speed values above to a string representation */ extern const char *hpsb_speedto_str[]; diff -Nru a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c --- a/drivers/ieee1394/ieee1394_core.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/ieee1394_core.c Sat Apr 12 14:44:06 2003 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -48,13 +49,9 @@ /* * Disable the nodemgr detection and config rom reading functionality. */ -MODULE_PARM(disable_nodemgr, "i"); -MODULE_PARM_DESC(disable_nodemgr, "Disable nodemgr functionality."); static int disable_nodemgr = 0; - -MODULE_PARM(disable_hotplug, "i"); -MODULE_PARM_DESC(disable_hotplug, "Disable hotplug for detected nodes."); -static int disable_hotplug = 0; +module_param(disable_nodemgr, int, 0444); +MODULE_PARM_DESC(disable_nodemgr, "Disable nodemgr functionality."); /* We are GPL, so treat us special */ MODULE_LICENSE("GPL"); @@ -62,7 +59,7 @@ static kmem_cache_t *hpsb_packet_cache; /* Some globals used */ -const char *hpsb_speedto_str[] = { "S100", "S200", "S400" }; +const char *hpsb_speedto_str[] = { "S100", "S200", "S400", "S800", "S1600", "S3200" }; static void dump_packet(const char *text, quadlet_t *data, int size) { @@ -130,9 +127,8 @@ { struct hpsb_packet *packet = NULL; void *data = NULL; - int kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; - packet = kmem_cache_alloc(hpsb_packet_cache, kmflags); + packet = kmem_cache_alloc(hpsb_packet_cache, GFP_ATOMIC); if (packet == NULL) return NULL; @@ -140,7 +136,7 @@ packet->header = packet->embedded_header; if (data_size) { - data = kmalloc(data_size + 8, kmflags); + data = kmalloc(data_size + 8, GFP_ATOMIC); if (data == NULL) { kmem_cache_free(hpsb_packet_cache, packet); return NULL; @@ -496,8 +492,7 @@ quadlet_t *data; size_t size=packet->data_size+packet->header_size; - int kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; - data = kmalloc(packet->header_size + packet->data_size, kmflags); + data = kmalloc(packet->header_size + packet->data_size, GFP_ATOMIC); if (!data) { HPSB_ERR("unable to allocate memory for concatenating header and data"); return 0; @@ -1120,7 +1115,7 @@ /* follow through with the open() */ retval = file_ops->open(inode, file); - if(retval == 0) { + if (retval == 0) { /* If the open() succeeded, then ieee1394 will be left * with an extra module reference, so we discard it here. @@ -1166,7 +1161,7 @@ #ifdef CONFIG_PROC_FS /* Must be done before we start everything else, since the drivers * may use it. */ - ieee1394_procfs_entry = proc_mkdir( "ieee1394", proc_bus); + ieee1394_procfs_entry = proc_mkdir("ieee1394", proc_bus); if (ieee1394_procfs_entry == NULL) { HPSB_ERR("unable to create /proc/bus/ieee1394\n"); unregister_chrdev(IEEE1394_MAJOR, "ieee1394"); @@ -1179,7 +1174,7 @@ init_hpsb_highlevel(); init_csr(); if (!disable_nodemgr) - init_ieee1394_nodemgr(disable_hotplug); + init_ieee1394_nodemgr(); else HPSB_INFO("nodemgr functionality disabled"); @@ -1273,7 +1268,7 @@ EXPORT_SYMBOL(hpsb_node_lock); EXPORT_SYMBOL(hpsb_register_protocol); EXPORT_SYMBOL(hpsb_unregister_protocol); -EXPORT_SYMBOL(hpsb_release_unit_directory); +EXPORT_SYMBOL(ieee1394_bus_type); /** csr.c **/ EXPORT_SYMBOL(hpsb_update_config_rom); diff -Nru a/drivers/ieee1394/ieee1394_core.h b/drivers/ieee1394/ieee1394_core.h --- a/drivers/ieee1394/ieee1394_core.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/ieee1394_core.h Sat Apr 12 14:44:06 2003 @@ -231,4 +231,7 @@ /* the proc_fs entry for /proc/ieee1394 */ extern struct proc_dir_entry *ieee1394_procfs_entry; +/* Our sysfs bus entry */ +extern struct bus_type ieee1394_bus_type; + #endif /* _IEEE1394_CORE_H */ diff -Nru a/drivers/ieee1394/ieee1394_hotplug.h b/drivers/ieee1394/ieee1394_hotplug.h --- a/drivers/ieee1394/ieee1394_hotplug.h Sat Apr 12 14:44:10 2003 +++ b/drivers/ieee1394/ieee1394_hotplug.h Sat Apr 12 14:44:10 2003 @@ -1,6 +1,8 @@ #ifndef _IEEE1394_HOTPLUG_H #define _IEEE1394_HOTPLUG_H +#include + #include "ieee1394_core.h" #include "nodemgr.h" @@ -32,26 +34,6 @@ struct ieee1394_device_id *id_table; /* - * The probe function is called when a device is added to the - * bus and the nodemgr finds a matching entry in the drivers - * device id table or when registering this driver and a - * previously unhandled device can be handled. The driver may - * decline to handle the device based on further investigation - * of the device (or whatever reason) in which case a negative - * error code should be returned, otherwise 0 should be - * returned. The driver may use the driver_data field in the - * unit directory to store per device driver specific data. - */ - int (*probe)(struct unit_directory *ud); - - /* - * The disconnect function is called when a device is removed - * from the bus or if it wasn't possible to read the guid - * after the last bus reset. - */ - void (*disconnect)(struct unit_directory *ud); - - /* * The update function is called when the node has just * survived a bus reset, i.e. it is still present on the bus. * However, it may be necessary to reestablish the connection @@ -59,18 +41,12 @@ */ void (*update)(struct unit_directory *ud); - /* Driver in list of all registered drivers */ - struct list_head list; - /* The list of unit directories managed by this driver */ - struct list_head unit_directories; + /* Our LDM structure */ + struct device_driver driver; }; int hpsb_register_protocol(struct hpsb_protocol_driver *driver); void hpsb_unregister_protocol(struct hpsb_protocol_driver *driver); - -int hpsb_claim_unit_directory(struct unit_directory *ud, - struct hpsb_protocol_driver *driver); -void hpsb_release_unit_directory(struct unit_directory *ud); #endif /* _IEEE1394_HOTPLUG_H */ diff -Nru a/drivers/ieee1394/ieee1394_transactions.c b/drivers/ieee1394/ieee1394_transactions.c --- a/drivers/ieee1394/ieee1394_transactions.c Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/ieee1394_transactions.c Sat Apr 12 14:44:07 2003 @@ -146,10 +146,10 @@ spin_lock_irqsave(&tp->lock, flags); - packet->tlabel = find_next_zero_bit(&tp->pool, 64, tp->next); + packet->tlabel = find_next_zero_bit(tp->pool, 64, tp->next); tp->next = (packet->tlabel + 1) % 64; /* Should _never_ happen */ - BUG_ON(test_and_set_bit(packet->tlabel, &tp->pool)); + BUG_ON(test_and_set_bit(packet->tlabel, tp->pool)); tp->allocations++; spin_unlock_irqrestore(&tp->lock, flags); @@ -177,7 +177,7 @@ BUG_ON(packet->tlabel > 63 || packet->tlabel < 0); spin_lock_irqsave(&tp->lock, flags); - BUG_ON(!test_and_clear_bit(packet->tlabel, &tp->pool)); + BUG_ON(!test_and_clear_bit(packet->tlabel, tp->pool)); spin_unlock_irqrestore(&tp->lock, flags); up(&tp->count); diff -Nru a/drivers/ieee1394/ieee1394_types.h b/drivers/ieee1394/ieee1394_types.h --- a/drivers/ieee1394/ieee1394_types.h Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/ieee1394_types.h Sat Apr 12 14:44:09 2003 @@ -72,19 +72,20 @@ /* Transaction Label handling */ struct hpsb_tlabel_pool { - u64 pool; + DECLARE_BITMAP(pool, 64); spinlock_t lock; u8 next; u32 allocations; struct semaphore count; }; -#define HPSB_TPOOL_INIT(_tp) \ -do { \ - sema_init(&(_tp)->count, 63); \ - spin_lock_init(&(_tp)->lock); \ - (_tp)->next = 0; \ - (_tp)->pool = 0; \ +#define HPSB_TPOOL_INIT(_tp) \ +do { \ + CLEAR_BITMAP((_tp)->pool, 64); \ + spin_lock_init(&(_tp)->lock); \ + (_tp)->next = 0; \ + (_tp)->allocations = 0; \ + sema_init(&(_tp)->count, 63); \ } while(0) diff -Nru a/drivers/ieee1394/iso.c b/drivers/ieee1394/iso.c --- a/drivers/ieee1394/iso.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/iso.c Sat Apr 12 14:44:09 2003 @@ -14,7 +14,7 @@ void hpsb_iso_stop(struct hpsb_iso *iso) { - if(!iso->flags & HPSB_ISO_DRIVER_STARTED) + if (!(iso->flags & HPSB_ISO_DRIVER_STARTED)) return; iso->host->driver->isoctl(iso, iso->type == HPSB_ISO_XMIT ? diff -Nru a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c --- a/drivers/ieee1394/nodemgr.c Sat Apr 12 14:44:08 2003 +++ b/drivers/ieee1394/nodemgr.c Sat Apr 12 14:44:08 2003 @@ -1,8 +1,8 @@ /* * Node information (ConfigROM) collection and management. * - * Copyright (C) 2000 Andreas E. Bombe - * 2001 Ben Collins + * Copyright (C) 2000 Andreas E. Bombe + * 2001-2003 Ben Collins * * This code is licensed under the GPL. See the file COPYING in the root * directory of the kernel sources for details. @@ -17,9 +17,7 @@ #include #include #include -#ifdef CONFIG_PROC_FS -#include -#endif +#include #include #include @@ -32,24 +30,23 @@ #include "csr.h" #include "nodemgr.h" -#ifdef CONFIG_IEEE1394_OUI_DB -struct oui_list_struct { - int oui; - char *name; -}; -extern struct oui_list_struct oui_list[]; -static char *nodemgr_find_oui_name(int oui) { +static char *nodemgr_find_oui_name(int oui) +{ +#ifdef CONFIG_IEEE1394_OUI_DB + extern struct oui_list_struct { + int oui; + char *name; + } oui_list[]; int i; for (i = 0; oui_list[i].name; i++) if (oui_list[i].oui == oui) return oui_list[i].name; - +#endif return NULL; } -#endif /* * Basically what we do here is start off retrieving the bus_info block. @@ -60,163 +57,469 @@ * complete directory entry (be it a leaf or a directory). We then process * it and add the info to our structure for that particular node. * - * We verify CRC's along the way for each directory/block/leaf. The - * entire node structure is generic, and simply stores the information in - * a way that's easy to parse by the protocol interface. + * We verify CRC's along the way for each directory/block/leaf. The entire + * node structure is generic, and simply stores the information in a way + * that's easy to parse by the protocol interface. */ -/* The nodemgr maintains a number of data structures: the node list, - * the driver list, unit directory list and the host info list. The - * first three lists are accessed from process context only: /proc - * readers, insmod and rmmod, and the nodemgr thread. Access to these - * lists are serialized by means of the nodemgr_serialize mutex, which - * must be taken before accessing the structures and released - * afterwards. The host info list is only accessed during insmod, - * rmmod and from interrupt and allways only for a short period of - * time, so a spinlock is used to protect this list. +/* + * The nodemgr relies heavily on the Drive Model for device callbacks and + * driver/device mappings. The old nodemgr used to handle all this itself, + * but now we are much simpler because of the LDM. */ static DECLARE_MUTEX(nodemgr_serialize); -static LIST_HEAD(node_list); -static LIST_HEAD(driver_list); -static LIST_HEAD(unit_directory_list); static LIST_HEAD(host_info_list); static spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED; -/* Disables use of the hotplug calls. */ -static int nodemgr_disable_hotplug = 0; - struct host_info { struct hpsb_host *host; struct list_head list; struct completion exited; struct semaphore reset_sem; int pid; + int id; + char daemon_name[15]; +}; + + +#define fw_attr(class, class_type, field, type, format_string) \ +static ssize_t fw_show_##class##_##field (struct device *dev, char *buf)\ +{ \ + class_type *class; \ + class = container_of(dev, class_type, device); \ + return sprintf(buf, format_string, (type)class->field); \ +} \ +static struct device_attribute dev_attr_##class##_##field = { \ + .attr = {.name = __stringify(field), .mode = S_IRUGO }, \ + .show = fw_show_##class##_##field, \ }; -#ifdef CONFIG_PROC_FS -#define PUTF(fmt, args...) out += sprintf(out, fmt, ## args) +#define fw_drv_attr(field, type, format_string) \ +static ssize_t fw_drv_show_##field (struct device_driver *drv, char *buf) \ +{ \ + struct hpsb_protocol_driver *driver; \ + driver = container_of(drv, struct hpsb_protocol_driver, driver); \ + return sprintf(buf, format_string, (type)driver->field);\ +} \ +static struct driver_attribute driver_attr_drv_##field = { \ + .attr = {.name = __stringify(field), .mode = S_IRUGO }, \ + .show = fw_drv_show_##field, \ +}; + -static int raw1394_read_proc(char *page, char **start, off_t off, - int count, int *eof, void *data) +static ssize_t fw_show_ne_bus_options(struct device *dev, char *buf) { - struct list_head *lh; - struct node_entry *ne; - int len; - char *out = page; - unsigned long flags; + struct node_entry *ne = container_of(dev, struct node_entry, device); - if (down_interruptible(&nodemgr_serialize)) - return -EINTR; + return sprintf(buf, "IRMC(%d) CMC(%d) ISC(%d) BMC(%d) PMC(%d) GEN(%d) " + "LSPD(%d) MAX_REC(%d) CYC_CLK_ACC(%d)\n", ne->busopt.irmc, + ne->busopt.cmc, ne->busopt.isc, ne->busopt.bmc, + ne->busopt.pmc, ne->busopt.generation, ne->busopt.lnkspd, + ne->busopt.max_rec, ne->busopt.cyc_clk_acc); +} +static DEVICE_ATTR(bus_options,S_IRUGO,fw_show_ne_bus_options,NULL); - list_for_each(lh, &node_list) { - struct list_head *l; - int ud_count = 0; - ne = list_entry(lh, struct node_entry, list); - if (!ne) - continue; +static ssize_t fw_show_ne_tlabels_free(struct device *dev, char *buf) +{ + struct node_entry *ne = container_of(dev, struct node_entry, device); + return sprintf(buf, "%d\n", atomic_read(&ne->tpool->count.count) + 1); +} +static DEVICE_ATTR(tlabels_free,S_IRUGO,fw_show_ne_tlabels_free,NULL); - PUTF("Node[" NODE_BUS_FMT "] GUID[%016Lx]:\n", - NODE_BUS_ARGS(ne->nodeid), (unsigned long long)ne->guid); - /* Generic Node information */ - PUTF(" Vendor ID : `%s' [0x%06x]\n", ne->oui_name, ne->vendor_id); - if (ne->vendor_name) - PUTF(" Vendor text : `%s'\n", ne->vendor_name); - PUTF(" Capabilities: 0x%06x\n", ne->capabilities); - PUTF(" Tlabel stats:\n"); - spin_lock_irqsave(&ne->tpool->lock, flags); - PUTF(" Free : %d\n", atomic_read(&ne->tpool->count.count) + 1); - PUTF(" Total : %u\n", ne->tpool->allocations); - PUTF(" Mask : %016Lx\n", (unsigned long long)ne->tpool->pool); - spin_unlock_irqrestore(&ne->tpool->lock, flags); - PUTF(" Bus Options :\n"); - PUTF(" IRMC(%d) CMC(%d) ISC(%d) BMC(%d) PMC(%d) GEN(%d)\n" - " LSPD(%d) MAX_REC(%d) CYC_CLK_ACC(%d)\n", - ne->busopt.irmc, ne->busopt.cmc, ne->busopt.isc, ne->busopt.bmc, - ne->busopt.pmc, ne->busopt.generation, ne->busopt.lnkspd, - ne->busopt.max_rec, ne->busopt.cyc_clk_acc); - - /* If this is the host entry, output some info about it aswell */ - if (ne->host != NULL && ne->host->node_id == ne->nodeid) { - PUTF(" Host Node Status:\n"); - PUTF(" Host Driver : %s\n", ne->host->driver->name); - PUTF(" Nodes connected : %d\n", ne->host->node_count); - PUTF(" Nodes active : %d\n", ne->host->nodes_active); - PUTF(" SelfIDs received: %d\n", ne->host->selfid_count); - PUTF(" Irm ID : [" NODE_BUS_FMT "]\n", - NODE_BUS_ARGS(ne->host->irm_id)); - PUTF(" BusMgr ID : [" NODE_BUS_FMT "]\n", - NODE_BUS_ARGS(ne->host->busmgr_id)); - PUTF(" In Bus Reset : %s\n", ne->host->in_bus_reset ? "yes" : "no"); - PUTF(" Root : %s\n", ne->host->is_root ? "yes" : "no"); - PUTF(" Cycle Master : %s\n", ne->host->is_cycmst ? "yes" : "no"); - PUTF(" IRM : %s\n", ne->host->is_irm ? "yes" : "no"); - PUTF(" Bus Manager : %s\n", ne->host->is_busmgr ? "yes" : "no"); - } - - /* Now the unit directories */ - list_for_each (l, &ne->unit_directories) { - struct unit_directory *ud = list_entry (l, struct unit_directory, node_list); - int printed = 0; // small hack - - PUTF(" Unit Directory %d:\n", ud_count++); - - if (ud->flags & UNIT_DIRECTORY_VENDOR_ID || - ud->flags & UNIT_DIRECTORY_MODEL_ID) { - PUTF(" Vendor/Model ID : "); - } - if (ud->flags & UNIT_DIRECTORY_VENDOR_ID) { - PUTF("%s [%06x]", ud->vendor_name ?: "Unknown", - ud->vendor_id); - printed = 1; - } - if (ud->flags & UNIT_DIRECTORY_MODEL_ID) { - if (!printed) { - PUTF("%s [%06x]", ne->vendor_name ?: "Unknown", - ne->vendor_id); - } - PUTF(" / %s [%06x]", ud->model_name ?: "Unknown", ud->model_id); - printed = 1; - } - if (printed) - PUTF("\n"); +static ssize_t fw_show_ne_tlabels_allocations(struct device *dev, char *buf) +{ + struct node_entry *ne = container_of(dev, struct node_entry, device); + return sprintf(buf, "%u\n", ne->tpool->allocations); +} +static DEVICE_ATTR(tlabels_allocations,S_IRUGO,fw_show_ne_tlabels_allocations,NULL); + + +static ssize_t fw_show_ne_tlabels_mask(struct device *dev, char *buf) +{ + struct node_entry *ne = container_of(dev, struct node_entry, device); +#if (BITS_PER_LONG <= 32) + return sprintf(buf, "0x%08lx%08lx\n", ne->tpool->pool[0], ne->tpool->pool[1]); +#else + return sprintf(buf, "0x%016lx\n", ne->tpool->pool[0]); +#endif +} +static DEVICE_ATTR(tlabels_mask,S_IRUGO,fw_show_ne_tlabels_mask,NULL); + + +fw_attr(ne, struct node_entry, capabilities, unsigned int, "0x%06x\n") +fw_attr(ne, struct node_entry, nodeid, unsigned int, "0x%04x\n") + +fw_attr(ne, struct node_entry, vendor_id, unsigned int, "0x%06x\n") +fw_attr(ne, struct node_entry, vendor_name, const char *, "%s\n") +fw_attr(ne, struct node_entry, vendor_oui, const char *, "%s\n") + +fw_attr(ne, struct node_entry, guid, unsigned long long, "0x%016Lx\n") +fw_attr(ne, struct node_entry, guid_vendor_id, unsigned int, "0x%06x\n") +fw_attr(ne, struct node_entry, guid_vendor_oui, const char *, "%s\n") + +static struct device_attribute *const fw_ne_attrs[] = { + &dev_attr_ne_guid, + &dev_attr_ne_guid_vendor_id, + &dev_attr_ne_capabilities, + &dev_attr_ne_vendor_id, + &dev_attr_ne_nodeid, + &dev_attr_bus_options, + &dev_attr_tlabels_free, + &dev_attr_tlabels_allocations, + &dev_attr_tlabels_mask, +}; + + + +fw_attr(ud, struct unit_directory, address, unsigned long long, "0x%016Lx\n") +fw_attr(ud, struct unit_directory, length, int, "%d\n") +/* These are all dependent on the value being provided */ +fw_attr(ud, struct unit_directory, vendor_id, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, model_id, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, specifier_id, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, version, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, vendor_name, const char *, "%s\n") +fw_attr(ud, struct unit_directory, vendor_oui, const char *, "%s\n") +fw_attr(ud, struct unit_directory, model_name, const char *, "%s\n") + +static struct device_attribute *const fw_ud_attrs[] = { + &dev_attr_ud_address, + &dev_attr_ud_length, +}; + + +fw_attr(host, struct hpsb_host, node_count, int, "%d\n") +fw_attr(host, struct hpsb_host, selfid_count, int, "%d\n") +fw_attr(host, struct hpsb_host, nodes_active, int, "%d\n") +fw_attr(host, struct hpsb_host, in_bus_reset, int, "%d\n") +fw_attr(host, struct hpsb_host, is_root, int, "%d\n") +fw_attr(host, struct hpsb_host, is_cycmst, int, "%d\n") +fw_attr(host, struct hpsb_host, is_irm, int, "%d\n") +fw_attr(host, struct hpsb_host, is_busmgr, int, "%d\n") + +static struct device_attribute *const fw_host_attrs[] = { + &dev_attr_host_node_count, + &dev_attr_host_selfid_count, + &dev_attr_host_nodes_active, + &dev_attr_host_in_bus_reset, + &dev_attr_host_is_root, + &dev_attr_host_is_cycmst, + &dev_attr_host_is_irm, + &dev_attr_host_is_busmgr, +}; + + +static ssize_t fw_show_drv_device_ids(struct device_driver *drv, char *buf) +{ + struct hpsb_protocol_driver *driver; + struct ieee1394_device_id *id; + int length = 0; + char *scratch = buf; + + driver = container_of(drv, struct hpsb_protocol_driver, driver); + + for (id = driver->id_table; id->match_flags != 0; id++) { + int need_coma = 0; + + if (id->match_flags & IEEE1394_MATCH_VENDOR_ID) { + length += sprintf(scratch, "vendor_id=0x%06x", id->vendor_id); + scratch = buf + length; + need_coma++; + } + + if (id->match_flags & IEEE1394_MATCH_MODEL_ID) { + length += sprintf(scratch, "%smodel_id=0x%06x", + need_coma++ ? "," : "", + id->model_id); + scratch = buf + length; + } + + if (id->match_flags & IEEE1394_MATCH_SPECIFIER_ID) { + length += sprintf(scratch, "%sspecifier_id=0x%06x", + need_coma++ ? "," : "", + id->specifier_id); + scratch = buf + length; + } - if (ud->flags & UNIT_DIRECTORY_SPECIFIER_ID) - PUTF(" Software Spec ID : %06x\n", ud->specifier_id); - if (ud->flags & UNIT_DIRECTORY_VERSION) - PUTF(" Software Version : %06x\n", ud->version); - if (ud->driver) - PUTF(" Driver : %s\n", ud->driver->name); - PUTF(" Length (in quads): %d\n", ud->count); + if (id->match_flags & IEEE1394_MATCH_VERSION) { + length += sprintf(scratch, "%sversion=0x%06x", + need_coma++ ? "," : "", + id->version); + scratch = buf + length; } + if (need_coma) { + *scratch++ = '\n'; + length++; + } } - up(&nodemgr_serialize); + return length; +} +static DRIVER_ATTR(device_ids,S_IRUGO,fw_show_drv_device_ids,NULL); - len = out - page; - len -= off; - if (len < count) { - *eof = 1; - if (len <= 0) - return 0; - } else - len = count; - *start = page + off; +fw_drv_attr(name, const char *, "%s\n") + +static struct driver_attribute *const fw_drv_attrs[] = { + &driver_attr_drv_name, + &driver_attr_device_ids, +}; + + +static void nodemgr_create_drv_files(struct hpsb_protocol_driver *driver) +{ + struct device_driver *drv = &driver->driver; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_drv_attrs); i++) + driver_create_file(drv, fw_drv_attrs[i]); +} + + +static void nodemgr_remove_drv_files(struct hpsb_protocol_driver *driver) +{ + struct device_driver *drv = &driver->driver; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_drv_attrs); i++) + driver_remove_file(drv, fw_drv_attrs[i]); +} + - return len; +static void nodemgr_create_ne_dev_files(struct node_entry *ne) +{ + struct device *dev = &ne->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_ne_attrs); i++) + device_create_file(dev, fw_ne_attrs[i]); +} + + +static void nodemgr_create_host_dev_files(struct hpsb_host *host) +{ + struct device *dev = &host->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_host_attrs); i++) + device_create_file(dev, fw_host_attrs[i]); +} + + +static struct node_entry *find_entry_by_nodeid(struct hpsb_host *host, nodeid_t nodeid); + +static void nodemgr_update_host_dev_links(struct hpsb_host *host) +{ + struct device *dev = &host->device; + struct node_entry *ne; + + sysfs_remove_link(&dev->kobj, "irm_id"); + sysfs_remove_link(&dev->kobj, "busmgr_id"); + sysfs_remove_link(&dev->kobj, "host_id"); + + if ((ne = find_entry_by_nodeid(host, host->irm_id))) + sysfs_create_link(&dev->kobj, &ne->device.kobj, "irm_id"); + if ((ne = find_entry_by_nodeid(host, host->busmgr_id))) + sysfs_create_link(&dev->kobj, &ne->device.kobj, "busmgr_id"); + if ((ne = find_entry_by_nodeid(host, host->node_id))) + sysfs_create_link(&dev->kobj, &ne->device.kobj, "host_id"); } -#undef PUTF -#endif /* CONFIG_PROC_FS */ +static void nodemgr_create_ud_dev_files(struct unit_directory *ud) +{ + struct device *dev = &ud->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_ud_attrs); i++) + device_create_file(dev, fw_ud_attrs[i]); + + if (ud->flags & UNIT_DIRECTORY_SPECIFIER_ID) + device_create_file(dev, &dev_attr_ud_specifier_id); + + if (ud->flags & UNIT_DIRECTORY_VERSION) + device_create_file(dev, &dev_attr_ud_version); + + if (ud->flags & UNIT_DIRECTORY_VENDOR_ID) { + device_create_file(dev, &dev_attr_ud_vendor_id); + if (ud->flags & UNIT_DIRECTORY_VENDOR_TEXT) + device_create_file(dev, &dev_attr_ud_vendor_name); + } + + if (ud->flags & UNIT_DIRECTORY_MODEL_ID) { + device_create_file(dev, &dev_attr_ud_model_id); + if (ud->flags & UNIT_DIRECTORY_MODEL_TEXT) + device_create_file(dev, &dev_attr_ud_model_name); + } +} + + +static int nodemgr_bus_match(struct device * dev, struct device_driver * drv) +{ + struct hpsb_protocol_driver *driver; + struct unit_directory *ud; + struct ieee1394_device_id *id; + + if (dev->class_num != DEV_CLASS_UNIT_DIRECTORY) + return 0; + + ud = container_of(dev, struct unit_directory, device); + driver = container_of(drv, struct hpsb_protocol_driver, driver); + + for (id = driver->id_table; id->match_flags != 0; id++) { + if ((id->match_flags & IEEE1394_MATCH_VENDOR_ID) && + id->vendor_id != ud->vendor_id) + continue; + + if ((id->match_flags & IEEE1394_MATCH_MODEL_ID) && + id->model_id != ud->model_id) + continue; + + if ((id->match_flags & IEEE1394_MATCH_SPECIFIER_ID) && + id->specifier_id != ud->specifier_id) + continue; + + if ((id->match_flags & IEEE1394_MATCH_VERSION) && + id->version != ud->version) + continue; + + return 1; + } + + return 0; +} + + +static void nodemgr_release_ud(struct device *dev) +{ + kfree(container_of(dev, struct unit_directory, device)); +} + + +static void nodemgr_release_ne(struct device *dev) +{ + kfree(container_of(dev, struct node_entry, device)); +} + + +static void nodemgr_remove_ud(struct unit_directory *ud) +{ + struct device *dev = &ud->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_ud_attrs); i++) + device_remove_file(dev, fw_ud_attrs[i]); + + device_remove_file(dev, &dev_attr_ud_specifier_id); + device_remove_file(dev, &dev_attr_ud_version); + device_remove_file(dev, &dev_attr_ud_vendor_id); + device_remove_file(dev, &dev_attr_ud_vendor_name); + device_remove_file(dev, &dev_attr_ud_vendor_oui); + device_remove_file(dev, &dev_attr_ud_model_id); + device_remove_file(dev, &dev_attr_ud_model_name); + + device_unregister(dev); +} + + +static void nodemgr_remove_node_uds(struct node_entry *ne) +{ + struct list_head *lh, *next; + + list_for_each_safe(lh, next, &ne->device.children) { + struct unit_directory *ud; + ud = container_of(list_to_dev(lh), struct unit_directory, device); + nodemgr_remove_ud(ud); + } +} + + +static void nodemgr_update_ud_names(struct host_info *hi, struct node_entry *ne) +{ + struct list_head *lh; + + list_for_each(lh, &ne->device.children) { + struct unit_directory *ud; + ud = container_of(list_to_dev(lh), struct unit_directory, device); + + snprintf(ud->device.name, DEVICE_NAME_SIZE, + "IEEE-1394 unit directory %d-" NODE_BUS_FMT "-%u", + hi->id, NODE_BUS_ARGS(ne->nodeid), ud->id); + } +} + + +static void nodemgr_remove_ne(struct node_entry *ne) +{ + struct device *dev = &ne->device; + int i; + + nodemgr_remove_node_uds(ne); + + for (i = 0; i < ARRAY_SIZE(fw_ne_attrs); i++) + device_remove_file(dev, fw_ne_attrs[i]); + + device_remove_file(dev, &dev_attr_ne_guid_vendor_oui); + device_remove_file(dev, &dev_attr_ne_vendor_name); + device_remove_file(dev, &dev_attr_ne_vendor_oui); + + device_unregister(dev); +} + + +static void nodemgr_remove_host_dev(struct device *dev) +{ + int i; + struct list_head *lh, *next; + + list_for_each_safe(lh, next, &dev->children) { + struct node_entry *ne; + ne = container_of(list_to_dev(lh), struct node_entry, device); + nodemgr_remove_ne(ne); + } + + for (i = 0; i < ARRAY_SIZE(fw_host_attrs); i++) + device_remove_file(dev, fw_host_attrs[i]); + + sysfs_remove_link(&dev->kobj, "irm_id"); + sysfs_remove_link(&dev->kobj, "busmgr_id"); + sysfs_remove_link(&dev->kobj, "host_id"); +} + + +static struct device nodemgr_dev_template_ud = { + .bus = &ieee1394_bus_type, + .release = nodemgr_release_ud, + .class_num = DEV_CLASS_UNIT_DIRECTORY, +}; + +static struct device nodemgr_dev_template_ne = { + .bus = &ieee1394_bus_type, + .release = nodemgr_release_ne, + .class_num = DEV_CLASS_NODE, +}; + +static struct device nodemgr_dev_template_host = { + .bus = &ieee1394_bus_type, + .class_num = DEV_CLASS_HOST, +}; + + +static int nodemgr_hotplug(struct device *dev, char **envp, int num_envp, + char *buffer, int buffer_size); + + +struct bus_type ieee1394_bus_type = { + .name = "ieee1394", + .match = nodemgr_bus_match, + .hotplug = nodemgr_hotplug, +}; -static void nodemgr_process_config_rom(struct node_entry *ne, - quadlet_t busoptions); static int nodemgr_read_quadlet(struct hpsb_host *host, nodeid_t nodeid, unsigned int generation, @@ -292,7 +595,8 @@ ret = -ENXIO; for (; size > 0; size--, address += 4, quadp++) { for (i = 0; i < 3; i++) { - ret = hpsb_read(ne->host, ne->nodeid, ne->generation, address, quadp, 4); + + ret = hpsb_node_read(ne, address, quadp, 4); if (ret != -EAGAIN) break; } @@ -349,9 +653,10 @@ if (!ne) return NULL; + memset(ne, 0, total_size); + if (size != 0) { - ne->vendor_name - = (const char *) &(ne->quadlets[2]); + ne->vendor_name = (const char *) &(ne->quadlets[2]); ne->quadlets[size] = 0; } else { ne->vendor_name = NULL; @@ -360,62 +665,129 @@ return ne; } + +static void nodemgr_process_config_rom(struct host_info *hi, + struct node_entry *ne, quadlet_t busoptions); + static struct node_entry *nodemgr_create_node(octlet_t guid, quadlet_t busoptions, - struct hpsb_host *host, - nodeid_t nodeid, unsigned int generation) + struct host_info *hi, nodeid_t nodeid, + unsigned int generation) { + struct hpsb_host *host = hi->host; struct node_entry *ne; ne = nodemgr_scan_root_directory (host, nodeid, generation); if (!ne) return NULL; - INIT_LIST_HEAD(&ne->list); - INIT_LIST_HEAD(&ne->unit_directories); - ne->tpool = &host->tpool[nodeid & NODE_MASK]; ne->host = host; ne->nodeid = nodeid; - ne->guid = guid; ne->generation = generation; - list_add_tail(&ne->list, &node_list); + ne->guid = guid; + ne->guid_vendor_id = (guid >> 40) & 0xffffff; + ne->guid_vendor_oui = nodemgr_find_oui_name(ne->guid_vendor_id); + + memcpy(&ne->device, &nodemgr_dev_template_ne, + sizeof(ne->device)); + ne->device.parent = &host->device; + snprintf(ne->device.bus_id, BUS_ID_SIZE, "%016Lx", + (unsigned long long)(ne->guid)); + snprintf(ne->device.name, DEVICE_NAME_SIZE, + "IEEE-1394 device %d-" NODE_BUS_FMT, hi->id, + NODE_BUS_ARGS(ne->nodeid)); + + device_register(&ne->device); - nodemgr_process_config_rom (ne, busoptions); + if (ne->guid_vendor_oui) + device_create_file(&ne->device, &dev_attr_ne_guid_vendor_oui); + nodemgr_create_ne_dev_files(ne); - HPSB_DEBUG("%s added: ID:BUS[" NODE_BUS_FMT "] GUID[%016Lx] [%s] (%s)", + nodemgr_process_config_rom (hi, ne, busoptions); + + nodemgr_update_ud_names(hi, ne); + + HPSB_DEBUG("%s added: ID:BUS[%d-" NODE_BUS_FMT "] GUID[%016Lx]", (host->node_id == nodeid) ? "Host" : "Node", - NODE_BUS_ARGS(nodeid), (unsigned long long)guid, - ne->oui_name, - ne->vendor_name ?: "Unknown"); + hi->id, NODE_BUS_ARGS(nodeid), (unsigned long long)guid); return ne; } -static struct node_entry *find_entry_by_guid(u64 guid) + +struct guid_search_baton { + u64 guid; + struct node_entry *ne; +}; + +static int nodemgr_guid_search_cb(struct device *dev, void *__data) { - struct list_head *lh; + struct guid_search_baton *search = __data; struct node_entry *ne; - - list_for_each(lh, &node_list) { - ne = list_entry(lh, struct node_entry, list); - if (ne->guid == guid) return ne; - } - return NULL; + if (dev->class_num != DEV_CLASS_NODE) + return 0; + + ne = container_of(dev, struct node_entry, device); + + if (ne->guid == search->guid) { + search->ne = ne; + return 1; + } + + return 0; } -static struct node_entry *find_entry_by_nodeid(nodeid_t nodeid) +static struct node_entry *find_entry_by_guid(u64 guid) { - struct list_head *lh; + struct guid_search_baton search; + + search.guid = guid; + search.ne = NULL; + + bus_for_each_dev(&ieee1394_bus_type, NULL, &search, nodemgr_guid_search_cb); + + return search.ne; +} + + +struct nodeid_search_baton { + nodeid_t nodeid; struct node_entry *ne; + struct hpsb_host *host; +}; + +static int nodemgr_nodeid_search_cb(struct device *dev, void *__data) +{ + struct nodeid_search_baton *search = __data; + struct node_entry *ne; + + if (dev->class_num != DEV_CLASS_NODE) + return 0; + + ne = container_of(dev, struct node_entry, device); - list_for_each(lh, &node_list) { - ne = list_entry(lh, struct node_entry, list); - if (ne->nodeid == nodeid) return ne; + if (ne->host == search->host && ne->nodeid == search->nodeid) { + search->ne = ne; + /* Returning 1 stops the iteration */ + return 1; } - return NULL; + return 0; +} + +static struct node_entry *find_entry_by_nodeid(struct hpsb_host *host, nodeid_t nodeid) +{ + struct nodeid_search_baton search; + + search.nodeid = nodeid; + search.ne = NULL; + search.host = host; + + bus_for_each_dev(&ieee1394_bus_type, NULL, &search, nodemgr_nodeid_search_cb); + + return search.ne; } static struct unit_directory *nodemgr_scan_unit_directory @@ -500,28 +872,27 @@ return NULL; } } + total_size += count * sizeof (quadlet_t); ud = kmalloc (total_size, GFP_KERNEL); + if (ud != NULL) { - memset (ud, 0, sizeof *ud); + memset (ud, 0, total_size); ud->flags = flags; - ud->count = count; + ud->length = count; ud->vendor_name_size = vendor_name_size; ud->model_name_size = model_name_size; - /* If there is no vendor name in the unit directory, - use the one in the root directory. */ - ud->vendor_name = ne->vendor_name; } + return ud; } + /* This implementation currently only scans the config rom and its * immediate unit directories looking for software_id and - * software_version entries, in order to get driver autoloading working. - */ - -static void nodemgr_process_unit_directory(struct node_entry *ne, - octlet_t address) + * software_version entries, in order to get driver autoloading working. */ +static void nodemgr_process_unit_directory(struct host_info *hi, struct node_entry *ne, + octlet_t address, unsigned int id) { struct unit_directory *ud; quadlet_t quad; @@ -533,6 +904,7 @@ ud->ne = ne; ud->address = address; + ud->id = id; if (nodemgr_read_quadlet(ne->host, ne->nodeid, ne->generation, address, &quad)) @@ -556,14 +928,16 @@ case CONFIG_ROM_VENDOR_ID: ud->vendor_id = value; ud->flags |= UNIT_DIRECTORY_VENDOR_ID; + + if (ud->vendor_id) + ud->vendor_oui = nodemgr_find_oui_name(ud->vendor_id); + if ((ud->flags & UNIT_DIRECTORY_VENDOR_TEXT) != 0) { length--; address += 4; - quadp = &(ud->quadlets[ud->count]); - if (nodemgr_read_text_leaf(ne, address, - quadp) == 0 - && quadp[0] == 0 - && quadp[1] == 0) { + quadp = &(ud->quadlets[ud->length]); + if (nodemgr_read_text_leaf(ne, address, quadp) == 0 + && quadp[0] == 0 && quadp[1] == 0) { /* We only support minimal ASCII and English. */ quadp[ud->vendor_name_size] = 0; @@ -579,11 +953,9 @@ if ((ud->flags & UNIT_DIRECTORY_MODEL_TEXT) != 0) { length--; address += 4; - quadp = &(ud->quadlets[ud->count + ud->vendor_name_size + 1]); - if (nodemgr_read_text_leaf(ne, address, - quadp) == 0 - && quadp[0] == 0 - && quadp[1] == 0) { + quadp = &(ud->quadlets[ud->length + ud->vendor_name_size + 1]); + if (nodemgr_read_text_leaf(ne, address, quadp) == 0 + && quadp[0] == 0 && quadp[1] == 0) { /* We only support minimal ASCII and English. */ quadp[ud->model_name_size] = 0; @@ -619,8 +991,17 @@ } } - list_add_tail(&ud->node_list, &ne->unit_directories); - list_add_tail(&ud->driver_list, &unit_directory_list); + memcpy(&ud->device, &nodemgr_dev_template_ud, + sizeof(ud->device)); + ud->device.parent = &ne->device; + snprintf(ud->device.bus_id, BUS_ID_SIZE, "%s-%u", + ne->device.bus_id, ud->id); + + device_register(&ud->device); + + if (ud->vendor_oui) + device_create_file(&ud->device, &dev_attr_ud_vendor_oui); + nodemgr_create_ud_dev_files(ud); return; @@ -657,11 +1038,12 @@ return; } -static void nodemgr_process_root_directory(struct node_entry *ne) +static void nodemgr_process_root_directory(struct host_info *hi, struct node_entry *ne) { octlet_t address; quadlet_t quad; int length; + unsigned int ud_id = 0; address = CSR_REGISTER_BASE + CSR_CONFIG_ROM; @@ -688,24 +1070,23 @@ switch (code) { case CONFIG_ROM_VENDOR_ID: ne->vendor_id = value; -#ifdef CONFIG_IEEE1394_OUI_DB - ne->oui_name = nodemgr_find_oui_name(value); -#else - ne->oui_name = "Unknown"; -#endif + + if (ne->vendor_id) + ne->vendor_oui = nodemgr_find_oui_name(ne->vendor_id); + /* Now check if there is a vendor name text string. */ if (ne->vendor_name != NULL) { length--; address += 4; - if (nodemgr_read_text_leaf(ne, address, - ne->quadlets) - != 0 - || ne->quadlets [0] != 0 - || ne->quadlets [1] != 0) + if (nodemgr_read_text_leaf(ne, address, ne->quadlets) != 0 + || ne->quadlets[0] != 0 || ne->quadlets[1] != 0) /* We only support minimal ASCII and English. */ ne->vendor_name = NULL; + else + device_create_file(&ne->device, + &dev_attr_ne_vendor_name); } break; @@ -714,7 +1095,7 @@ break; case CONFIG_ROM_UNIT_DIRECTORY: - nodemgr_process_unit_directory(ne, address + value * 4); + nodemgr_process_unit_directory(hi, ne, address + value * 4, ud_id++); break; case CONFIG_ROM_DESCRIPTOR_LEAF: @@ -729,208 +1110,94 @@ #ifdef CONFIG_HOTPLUG -static void nodemgr_call_policy(char *verb, struct unit_directory *ud) +static int nodemgr_hotplug(struct device *dev, char **envp, int num_envp, + char *buffer, int buffer_size) { - char *argv [3], **envp, *buf, *scratch; - int i = 0, value; - - /* User requested to disable hotplug when module was loaded. */ - if (nodemgr_disable_hotplug) - return; - - if (!hotplug_path [0]) - return; - if (!current->fs->root) - return; - if (!(envp = (char **) kmalloc(20 * sizeof (char *), GFP_KERNEL))) { - HPSB_DEBUG ("ENOMEM"); - return; - } - if (!(buf = kmalloc(256, GFP_KERNEL))) { - kfree(envp); - HPSB_DEBUG("ENOMEM2"); - return; - } + struct unit_directory *ud; + char *scratch; + int i = 0; + int length = 0; + + if (!dev) + return -ENODEV; + + if (dev->class_num != DEV_CLASS_UNIT_DIRECTORY) + return -ENODEV; + + ud = container_of(dev, struct unit_directory, device); + + scratch = buffer; + +#define PUT_ENVP(fmt,val) \ +do { \ + envp[i++] = scratch; \ + length += snprintf(scratch, buffer_size - length, \ + fmt, val); \ + if ((buffer_size - length <= 0) || (i >= num_envp)) \ + return -ENOMEM; \ + ++length; \ + scratch = buffer + length; \ +} while(0) + + PUT_ENVP("VENDOR_ID=%06x", ud->vendor_id); + PUT_ENVP("MODEL_ID=%06x", ud->model_id); + PUT_ENVP("GUID=%016Lx", (unsigned long long)ud->ne->guid); + PUT_ENVP("SPECIFIER_ID=%06x", ud->specifier_id); + PUT_ENVP("VERSION=%06x", ud->version); - /* only one standardized param to hotplug command: type */ - argv[0] = hotplug_path; - argv[1] = "ieee1394"; - argv[2] = 0; - - /* minimal command environment */ - envp[i++] = "HOME=/"; - envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; +#undef PUT_ENVP -#ifdef CONFIG_IEEE1394_VERBOSEDEBUG - /* hint that policy agent should enter no-stdout debug mode */ - envp[i++] = "DEBUG=kernel"; -#endif - /* extensible set of named bus-specific parameters, - * supporting multiple driver selection algorithms. - */ - scratch = buf; - - envp[i++] = scratch; - scratch += sprintf(scratch, "ACTION=%s", verb) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "VENDOR_ID=%06x", ud->ne->vendor_id) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "GUID=%016Lx", (long long unsigned)ud->ne->guid) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "SPECIFIER_ID=%06x", ud->specifier_id) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "VERSION=%06x", ud->version) + 1; - envp[i++] = 0; + envp[i] = 0; - /* NOTE: user mode daemons can call the agents too */ -#ifdef CONFIG_IEEE1394_VERBOSEDEBUG - HPSB_DEBUG("NodeMgr: %s %s %016Lx", argv[0], verb, (long long unsigned)ud->ne->guid); -#endif - value = call_usermodehelper(argv[0], argv, envp, 0); - kfree(buf); - kfree(envp); - if (value != 0) - HPSB_DEBUG("NodeMgr: hotplug policy returned %d", value); + return 0; } #else -static inline void -nodemgr_call_policy(char *verb, struct unit_directory *ud) +static int nodemgr_hotplug(struct device *dev, char **envp, int num_envp, + char *buffer, int buffer_size) { -#ifdef CONFIG_IEEE1394_VERBOSEDEBUG - HPSB_DEBUG("NodeMgr: nodemgr_call_policy(): hotplug not enabled"); -#endif - return; + return -ENODEV; } #endif /* CONFIG_HOTPLUG */ -static void nodemgr_claim_unit_directory(struct unit_directory *ud, - struct hpsb_protocol_driver *driver) -{ - ud->driver = driver; - list_del(&ud->driver_list); - list_add_tail(&ud->driver_list, &driver->unit_directories); -} - -static void nodemgr_release_unit_directory(struct unit_directory *ud) -{ - ud->driver = NULL; - list_del(&ud->driver_list); - list_add_tail(&ud->driver_list, &unit_directory_list); -} - -void hpsb_release_unit_directory(struct unit_directory *ud) -{ - down(&nodemgr_serialize); - nodemgr_release_unit_directory(ud); - up(&nodemgr_serialize); -} -static void nodemgr_free_unit_directories(struct node_entry *ne) +static int nodemgr_alloc_host_num(void) { + int hostnum = 0; + unsigned long flags; struct list_head *lh; - struct unit_directory *ud; - lh = ne->unit_directories.next; - while (lh != &ne->unit_directories) { - ud = list_entry(lh, struct unit_directory, node_list); - lh = lh->next; - if (ud->driver && ud->driver->disconnect) - ud->driver->disconnect(ud); - nodemgr_release_unit_directory(ud); - nodemgr_call_policy("remove", ud); - list_del(&ud->driver_list); - kfree(ud); - } -} - -static struct ieee1394_device_id * -nodemgr_match_driver(struct hpsb_protocol_driver *driver, - struct unit_directory *ud) -{ - struct ieee1394_device_id *id; - - for (id = driver->id_table; id->match_flags != 0; id++) { - if ((id->match_flags & IEEE1394_MATCH_VENDOR_ID) && - id->vendor_id != ud->vendor_id) - continue; + spin_lock_irqsave (&host_info_lock, flags); - if ((id->match_flags & IEEE1394_MATCH_MODEL_ID) && - id->model_id != ud->model_id) - continue; + while (1) { + int found = 0; - if ((id->match_flags & IEEE1394_MATCH_SPECIFIER_ID) && - id->specifier_id != ud->specifier_id) - continue; + list_for_each(lh, &host_info_list) { + struct host_info *hi = list_entry(lh, struct host_info, list); + if (hi->id == hostnum) { + found = 1; + break; + } + } - if ((id->match_flags & IEEE1394_MATCH_VERSION) && - id->version != ud->version) - continue; + if (!found) + break; - return id; + hostnum++; } - return NULL; -} - -static struct hpsb_protocol_driver * -nodemgr_find_driver(struct unit_directory *ud) -{ - struct list_head *l; - struct hpsb_protocol_driver *match, *driver; - struct ieee1394_device_id *device_id; - - match = NULL; - list_for_each(l, &driver_list) { - driver = list_entry(l, struct hpsb_protocol_driver, list); - device_id = nodemgr_match_driver(driver, ud); - - if (device_id != NULL) { - match = driver; - break; - } - } + spin_unlock_irqrestore (&host_info_lock, flags); - return match; + return hostnum; } -static void nodemgr_bind_drivers (struct node_entry *ne) -{ - struct list_head *lh; - struct hpsb_protocol_driver *driver; - struct unit_directory *ud; - - list_for_each(lh, &ne->unit_directories) { - ud = list_entry(lh, struct unit_directory, node_list); - driver = nodemgr_find_driver(ud); - if (driver != NULL && driver->probe(ud) == 0) - nodemgr_claim_unit_directory(ud, driver); - nodemgr_call_policy("add", ud); - } -} int hpsb_register_protocol(struct hpsb_protocol_driver *driver) { - struct unit_directory *ud; - struct list_head *lh; - - if (down_interruptible(&nodemgr_serialize)) - return -EINTR; - - list_add_tail(&driver->list, &driver_list); - - INIT_LIST_HEAD(&driver->unit_directories); - lh = unit_directory_list.next; - while (lh != &unit_directory_list) { - ud = list_entry(lh, struct unit_directory, driver_list); - lh = lh->next; - if (nodemgr_match_driver(driver, ud) && driver->probe(ud) == 0) - nodemgr_claim_unit_directory(ud, driver); - } - - up(&nodemgr_serialize); + driver_register(&driver->driver); + nodemgr_create_drv_files(driver); /* * Right now registration always succeeds, but maybe we should @@ -942,26 +1209,14 @@ void hpsb_unregister_protocol(struct hpsb_protocol_driver *driver) { - struct list_head *lh; - struct unit_directory *ud; - - down(&nodemgr_serialize); - - list_del(&driver->list); - lh = driver->unit_directories.next; - while (lh != &driver->unit_directories) { - ud = list_entry(lh, struct unit_directory, driver_list); - lh = lh->next; - if (ud->driver && ud->driver->disconnect) - ud->driver->disconnect(ud); - nodemgr_release_unit_directory(ud); - } - - up(&nodemgr_serialize); + nodemgr_remove_drv_files(driver); + /* This will subsequently disconnect all devices that our driver + * is attached to. */ + driver_unregister(&driver->driver); } -static void nodemgr_process_config_rom(struct node_entry *ne, - quadlet_t busoptions) +static void nodemgr_process_config_rom(struct host_info *hi, + struct node_entry *ne, quadlet_t busoptions) { ne->busopt.irmc = (busoptions >> 31) & 1; ne->busopt.cmc = (busoptions >> 30) & 1; @@ -981,16 +1236,42 @@ ne->busopt.cyc_clk_acc, ne->busopt.max_rec, ne->busopt.generation, ne->busopt.lnkspd); #endif + device_remove_file(&ne->device, &dev_attr_ne_vendor_oui); - /* - * When the config rom changes we disconnect all drivers and - * free the cached unit directories and reread the whole - * thing. If this was a new device, the call to - * nodemgr_disconnect_drivers is a no-op and all is well. - */ - nodemgr_free_unit_directories(ne); - nodemgr_process_root_directory(ne); - nodemgr_bind_drivers(ne); + nodemgr_process_root_directory(hi, ne); + + if (ne->vendor_oui) + device_create_file(&ne->device, &dev_attr_ne_vendor_oui); +} + + +/* Searches the list of ud's that match a ne as the parent. If the ud has + * a driver associated with it, we call that driver's update function + * with the ud as the argument. */ +static int nodemgr_driver_search_cb(struct device *dev, void *__data) +{ + struct node_entry *ne = __data; + struct unit_directory *ud; + + if (dev->class_num != DEV_CLASS_UNIT_DIRECTORY) + return 0; + + ud = container_of(dev, struct unit_directory, device); + + if (&ne->device != ud->device.parent) + return 0; + + if (ud->device.driver) { + struct hpsb_protocol_driver *pdrv; + + pdrv = container_of(ud->device.driver, + struct hpsb_protocol_driver, driver); + + if (pdrv->update) + pdrv->update(ud); + } + + return 0; } /* @@ -1001,29 +1282,42 @@ * the to take whatever actions required. */ static void nodemgr_update_node(struct node_entry *ne, quadlet_t busoptions, - struct hpsb_host *host, - nodeid_t nodeid, unsigned int generation) + struct host_info *hi, nodeid_t nodeid, + unsigned int generation) { - struct list_head *lh; - struct unit_directory *ud; + int update_ud_names = 0; if (ne->nodeid != nodeid) { + snprintf(ne->device.name, DEVICE_NAME_SIZE, + "IEEE-1394 device %d-" NODE_BUS_FMT, + hi->id, NODE_BUS_ARGS(ne->nodeid)); HPSB_DEBUG("Node " NODE_BUS_FMT " changed to " NODE_BUS_FMT, NODE_BUS_ARGS(ne->nodeid), NODE_BUS_ARGS(nodeid)); ne->nodeid = nodeid; + + update_ud_names++; + } + + if (ne->busopt.generation != ((busoptions >> 4) & 0xf)) { + /* If the node's configrom generation has changed, we + * unregister all the unit directories. */ + nodemgr_remove_node_uds(ne); + + /* This will re-register our unitdir's */ + nodemgr_process_config_rom (hi, ne, busoptions); + + update_ud_names++; } - if (ne->busopt.generation != ((busoptions >> 4) & 0xf)) - nodemgr_process_config_rom (ne, busoptions); + if (update_ud_names) + nodemgr_update_ud_names(hi, ne); /* Since that's done, we can declare this record current */ ne->generation = generation; - list_for_each (lh, &ne->unit_directories) { - ud = list_entry (lh, struct unit_directory, node_list); - if (ud->driver != NULL && ud->driver->update != NULL) - ud->driver->update(ud); - } + /* Update unit_dirs with attached drivers */ + bus_for_each_dev(&ieee1394_bus_type, NULL, ne, + nodemgr_driver_search_cb); } static int read_businfo_block(struct hpsb_host *host, nodeid_t nodeid, unsigned int generation, @@ -1087,24 +1381,13 @@ return 0; } -static void nodemgr_remove_node(struct node_entry *ne) -{ - HPSB_DEBUG("Device removed: Node[" NODE_BUS_FMT "] GUID[%016Lx] [%s]", - NODE_BUS_ARGS(ne->nodeid), (unsigned long long)ne->guid, - ne->vendor_name ?: "Unknown"); - - nodemgr_free_unit_directories(ne); - list_del(&ne->list); - kfree(ne); - - return; -} /* This is where we probe the nodes for their information and provided * features. */ -static void nodemgr_node_probe_one(struct hpsb_host *host, +static void nodemgr_node_probe_one(struct host_info *hi, nodeid_t nodeid, int generation) { + struct hpsb_host *host = hi->host; struct node_entry *ne; quadlet_t buffer[5]; octlet_t guid; @@ -1132,58 +1415,48 @@ ne = find_entry_by_guid(guid); if (!ne) - nodemgr_create_node(guid, buffer[2], host, nodeid, generation); + nodemgr_create_node(guid, buffer[2], hi, nodeid, generation); else - nodemgr_update_node(ne, buffer[2], host, nodeid, generation); + nodemgr_update_node(ne, buffer[2], hi, nodeid, generation); return; } -static void nodemgr_node_probe_cleanup(struct hpsb_host *host, unsigned int generation) + +struct cleanup_baton { + unsigned int generation; + struct hpsb_host *host; + struct node_entry *ne; +}; + +static int nodemgr_remove_node(struct device *dev, void *__data) { - struct list_head *lh, *next; + struct cleanup_baton *cleanup = __data; struct node_entry *ne; - /* Now check to see if we have any nodes that aren't referenced - * any longer. */ - list_for_each_safe(lh, next, &node_list) { - ne = list_entry(lh, struct node_entry, list); + if (dev->class_num != DEV_CLASS_NODE) + return 0; - /* Only checking this host */ - if (ne->host != host) - continue; + ne = container_of(dev, struct node_entry, device); + + if (ne->host != cleanup->host) + return 0; - /* If the generation didn't get updated, then either the - * node was removed, or it failed the above probe. Either - * way, we remove references to it, since they are - * invalid. */ - if (ne->generation != generation) - nodemgr_remove_node(ne); + if (ne->generation != cleanup->generation) { + cleanup->ne = ne; + return 1; } - return; + return 0; } -static void nodemgr_node_probe(struct hpsb_host *host) + +static void nodemgr_node_probe(struct host_info *hi, int generation) { int count; + struct hpsb_host *host = hi->host; struct selfid *sid = (struct selfid *)host->topology_map; nodeid_t nodeid = LOCAL_BUS; - unsigned int generation; - - /* Pause for 1/4 second, to make sure things settle down. If - * schedule_timeout returns non-zero, it means we caught a signal - * and need to return. */ - set_current_state(TASK_INTERRUPTIBLE); - if (schedule_timeout (HZ/4)) - return; - - /* Now get the generation in which the node ID's we collect - * are valid. During the bus scan we will use this generation - * for the read transactions, so that if another reset occurs - * during the scan the transactions will fail instead of - * returning bogus data. */ - generation = get_hpsb_generation(host); /* Scan each node on the bus */ for (count = host->selfid_count; count; count--, sid++) { @@ -1194,8 +1467,7 @@ nodeid++; continue; } - - nodemgr_node_probe_one(host, nodeid++, generation); + nodemgr_node_probe_one(hi, nodeid++, generation); } /* If we had a bus reset while we were scanning the bus, it is @@ -1204,8 +1476,33 @@ * were still on the bus. The bus reset increased * hi->reset_sem, so there's a bus scan pending which will do * the clean up eventually. */ - if (generation == get_hpsb_generation(host)) - nodemgr_node_probe_cleanup(host, generation); + if (generation == get_hpsb_generation(host)) { + struct cleanup_baton cleanup; + + cleanup.generation = generation; + cleanup.host = host; + + /* This will iterate until all devices that do not match + * the generation are removed. */ + while (bus_for_each_dev(&ieee1394_bus_type, NULL, &cleanup, + nodemgr_remove_node)) { + struct node_entry *ne = cleanup.ne; + + HPSB_DEBUG("Device removed: ID:BUS[" NODE_BUS_FMT "] GUID[%016Lx]", + NODE_BUS_ARGS(ne->nodeid), (unsigned long long)ne->guid); + + nodemgr_remove_ne(ne); + } + + /* Now let's tell the bus to rescan our devices. This may + * seem like overhead, but the driver-model core will only + * scan a device for a driver when either the device is + * added, or when a new driver is added. A bus reset is a + * good reason to rescan devices that were there before. + * For example, an sbp2 device may become available for + * login, if the host that held it was just removed. */ + bus_rescan_devices(&ieee1394_bus_type); + } return; } @@ -1226,8 +1523,7 @@ hpsb_write(host, LOCAL_BUS | ALL_NODES, get_hpsb_generation(host), (CSR_REGISTER_BASE | CSR_BROADCAST_CHANNEL), - &bc, - sizeof(quadlet_t)); + &bc, sizeof(quadlet_t)); } /* We need to ensure that if we are not the IRM, that the IRM node is capable of @@ -1249,7 +1545,7 @@ if (status < 0 || !(be32_to_cpu(bc) & 0x80000000)) { /* The root node does not have a valid BROADCAST_CHANNEL * register and we do, so reset the bus with force_root set */ - HPSB_INFO("Remote root is not IRM capable, resetting..."); + HPSB_DEBUG("Remote root is not IRM capable, resetting..."); hpsb_reset_bus(host, LONG_RESET_FORCE_ROOT); return 0; } @@ -1259,27 +1555,58 @@ static int nodemgr_host_thread(void *__hi) { struct host_info *hi = (struct host_info *)__hi; + struct hpsb_host *host = hi->host; /* No userlevel access needed */ - daemonize("knodemgrd"); + daemonize(hi->daemon_name); allow_signal(SIGTERM); - + + /* Setup our device-model entries */ + device_register(&host->device); + nodemgr_create_host_dev_files(host); + /* Sit and wait for a signal to probe the nodes on the bus. This * happens when we get a bus reset. */ while (!down_interruptible(&hi->reset_sem) && !down_interruptible(&nodemgr_serialize)) { + unsigned int generation; + int i; - if (!nodemgr_check_root_capability(hi->host)) { + /* Pause for 1/4 second, to make sure things settle down. */ + for (i = HZ/4; i > 0; i-= HZ/16) { + set_current_state(TASK_INTERRUPTIBLE); + if (schedule_timeout(HZ/16)) + goto caught_signal; + + /* Now get the generation in which the node ID's we collect + * are valid. During the bus scan we will use this generation + * for the read transactions, so that if another reset occurs + * during the scan the transactions will fail instead of + * returning bogus data. */ + generation = get_hpsb_generation(hi->host); + + /* If we get a reset before we are done waiting, then + * start the the waiting over again */ + while (!down_trylock(&hi->reset_sem)) + i = HZ/4; + } + + if (!nodemgr_check_root_capability(host)) { /* Do nothing, we are resetting */ up(&nodemgr_serialize); continue; } - nodemgr_node_probe(hi->host); - nodemgr_do_irm_duties(hi->host); + nodemgr_node_probe(hi, generation); + nodemgr_do_irm_duties(host); + + /* Update some of our sysfs symlinks */ + nodemgr_update_host_dev_links(host); up(&nodemgr_serialize); } + +caught_signal: #ifdef CONFIG_IEEE1394_VERBOSEDEBUG HPSB_DEBUG ("NodeMgr: Exiting thread for %s", hi->host->driver->name); #endif @@ -1298,24 +1625,24 @@ return ne; } -struct node_entry *hpsb_nodeid_get_entry(nodeid_t nodeid) +struct node_entry *hpsb_nodeid_get_entry(struct hpsb_host *host, nodeid_t nodeid) { struct node_entry *ne; down(&nodemgr_serialize); - ne = find_entry_by_nodeid(nodeid); + ne = find_entry_by_nodeid(host, nodeid); up(&nodemgr_serialize); return ne; } -struct node_entry *hpsb_check_nodeid(nodeid_t nodeid) +struct node_entry *hpsb_check_nodeid(struct hpsb_host *host, nodeid_t nodeid) { struct node_entry *ne; if (down_trylock(&nodemgr_serialize)) return NULL; - ne = find_entry_by_nodeid(nodeid); + ne = find_entry_by_nodeid(host, nodeid); up(&nodemgr_serialize); return ne; @@ -1389,23 +1716,38 @@ /* Initialize the hostinfo here and start the thread. The * thread blocks on the reset semaphore until a bus reset * happens. */ + memset(hi, 0, sizeof(*hi)); hi->host = host; INIT_LIST_HEAD(&hi->list); init_completion(&hi->exited); sema_init(&hi->reset_sem, 0); + hi->id = nodemgr_alloc_host_num(); + + memcpy(&host->device, &nodemgr_dev_template_host, + sizeof(host->device)); + host->device.parent = &host->pdev->dev; + snprintf(host->device.bus_id, BUS_ID_SIZE, "fw-host%d", hi->id); + snprintf(host->device.name, DEVICE_NAME_SIZE, "IEEE-1394 Host %s-%d", + host->driver->name, hi->id); + + sprintf(hi->daemon_name, "knodemgrd_%d", hi->id); + + spin_lock_irqsave (&host_info_lock, flags); + hi->pid = kernel_thread(nodemgr_host_thread, hi, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); if (hi->pid < 0) { - HPSB_ERR ("NodeMgr: failed to start NodeMgr thread for %s", - host->driver->name); + HPSB_ERR ("NodeMgr: failed to start %s thread for %s", + hi->daemon_name, host->driver->name); kfree(hi); + spin_unlock_irqrestore (&host_info_lock, flags); return; } - spin_lock_irqsave (&host_info_lock, flags); list_add_tail (&hi->list, &host_info_list); + spin_unlock_irqrestore (&host_info_lock, flags); return; @@ -1442,7 +1784,6 @@ static void nodemgr_remove_host(struct hpsb_host *host) { struct list_head *lh, *next; - struct node_entry *ne; unsigned long flags; struct host_info *hi = NULL; @@ -1455,31 +1796,20 @@ break; } } - spin_unlock_irqrestore (&host_info_lock, flags); if (hi) { if (hi->pid >= 0) { kill_proc(hi->pid, SIGTERM, 1); wait_for_completion(&hi->exited); + nodemgr_remove_host_dev(&host->device); + device_unregister(&host->device); } kfree(hi); - } - else + } else HPSB_ERR("NodeMgr: host %s does not exist, cannot remove", host->driver->name); - down(&nodemgr_serialize); - - /* Even if we fail the host_info part, remove all the node - * entries. */ - list_for_each_safe(lh, next, &node_list) { - ne = list_entry(lh, struct node_entry, list); - - if (ne->host == host) - nodemgr_remove_node(ne); - } - - up(&nodemgr_serialize); + spin_unlock_irqrestore (&host_info_lock, flags); return; } @@ -1492,15 +1822,10 @@ static struct hpsb_highlevel *hl; -#define PROC_ENTRY "devices" - -void init_ieee1394_nodemgr(int disable_hotplug) +void init_ieee1394_nodemgr(void) { - nodemgr_disable_hotplug = disable_hotplug; -#ifdef CONFIG_PROC_FS - if (!create_proc_read_entry(PROC_ENTRY, 0444, ieee1394_procfs_entry, raw1394_read_proc, NULL)) - HPSB_ERR("Can't create devices procfs entry"); -#endif + bus_register(&ieee1394_bus_type); + hl = hpsb_register_highlevel("Node manager", &nodemgr_ops); if (!hl) { HPSB_ERR("NodeMgr: out of memory during ieee1394 initialization"); @@ -1510,7 +1835,6 @@ void cleanup_ieee1394_nodemgr(void) { hpsb_unregister_highlevel(hl); -#ifdef CONFIG_PROC_FS - remove_proc_entry(PROC_ENTRY, ieee1394_procfs_entry); -#endif + + bus_unregister(&ieee1394_bus_type); } diff -Nru a/drivers/ieee1394/nodemgr.h b/drivers/ieee1394/nodemgr.h --- a/drivers/ieee1394/nodemgr.h Sat Apr 12 14:44:08 2003 +++ b/drivers/ieee1394/nodemgr.h Sat Apr 12 14:44:08 2003 @@ -20,6 +20,8 @@ #ifndef _IEEE1394_NODEMGR_H #define _IEEE1394_NODEMGR_H +#include + #define CONFIG_ROM_BUS_INFO_LENGTH(q) ((q) >> 24) #define CONFIG_ROM_BUS_CRC_LENGTH(q) (((q) >> 16) & 0xff) #define CONFIG_ROM_BUS_CRC(q) ((q) & 0xffff) @@ -76,6 +78,12 @@ u16 max_rec; /* Maximum packet size node can receive */ }; +enum { + DEV_CLASS_NODE, + DEV_CLASS_UNIT_DIRECTORY, + DEV_CLASS_HOST, +}; + #define UNIT_DIRECTORY_VENDOR_ID 0x01 #define UNIT_DIRECTORY_MODEL_ID 0x02 #define UNIT_DIRECTORY_SPECIFIER_ID 0x04 @@ -87,18 +95,16 @@ * A unit directory corresponds to a protocol supported by the * node. If a node supports eg. IP/1394 and AV/C, its config rom has a * unit directory for each of these protocols. - * - * Unit directories appear on two types of lists: for each node we - * maintain a list of the unit directories found in its config rom and - * for each driver we maintain a list of the unit directories - * (ie. devices) the driver manages. */ struct unit_directory { struct node_entry *ne; /* The node which this directory belongs to */ octlet_t address; /* Address of the unit directory on the node */ u8 flags; /* Indicates which entries were read */ + quadlet_t vendor_id; const char *vendor_name; + const char *vendor_oui; + int vendor_name_size; quadlet_t model_id; const char *model_name; @@ -106,22 +112,21 @@ quadlet_t specifier_id; quadlet_t version; - struct hpsb_protocol_driver *driver; - void *driver_data; + unsigned int id; - /* For linking the nodes managed by the driver, or unmanaged nodes */ - struct list_head driver_list; + int length; /* Number of quadlets */ - /* For linking directories belonging to a node */ - struct list_head node_list; + struct device device; - int count; /* Number of quadlets */ + /* XXX Must be last in the struct! */ quadlet_t quadlets[0]; }; struct node_entry { - struct list_head list; u64 guid; /* GUID of this node */ + u32 guid_vendor_id; /* Top 24bits of guid */ + const char *guid_vendor_oui; /* OUI name of guid vendor id */ + struct hpsb_host *host; /* Host this node is attached to */ nodeid_t nodeid; /* NodeID */ struct bus_options busopt; /* Bus Options */ @@ -129,14 +134,16 @@ /* The following is read from the config rom */ u32 vendor_id; + const char *vendor_name; + const char *vendor_oui; + u32 capabilities; - struct list_head unit_directories; struct hpsb_tlabel_pool *tpool; - const char *vendor_name; - char *oui_name; + struct device device; + /* XXX Must be last in the struct! */ quadlet_t quadlets[0]; }; @@ -154,11 +161,11 @@ /* Same as above, but use the nodeid to get an node entry. This is not * fool-proof by itself, since the nodeid can change. */ -struct node_entry *hpsb_nodeid_get_entry(nodeid_t nodeid); +struct node_entry *hpsb_nodeid_get_entry(struct hpsb_host *host, nodeid_t nodeid); /* Same as above except that it will not block waiting for the nodemgr * serialize semaphore. */ -struct node_entry *hpsb_check_nodeid(nodeid_t nodeid); +struct node_entry *hpsb_check_nodeid(struct hpsb_host *host, nodeid_t nodeid); /* * If the entry refers to a local host, this function will return the pointer @@ -188,7 +195,7 @@ int extcode, quadlet_t *data, quadlet_t arg); -void init_ieee1394_nodemgr(int disable_hotplug); +void init_ieee1394_nodemgr(void); void cleanup_ieee1394_nodemgr(void); #endif /* _IEEE1394_NODEMGR_H */ diff -Nru a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c --- a/drivers/ieee1394/ohci1394.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/ohci1394.c Sat Apr 12 14:44:09 2003 @@ -80,6 +80,10 @@ * Manfred Weihs * . Reworked code for initiating bus resets * (long, short, with or without hold-off) + * + * Nandu Santhi + * . Added support for nVidia nForce2 onboard Firewire chipset + * */ #include @@ -90,6 +94,7 @@ #include #include #include +#include #include #include #include @@ -145,7 +150,7 @@ #define OHCI_DMA_FREE(fmt, args...) \ HPSB_ERR("%s(%s)free(%d): "fmt, OHCI1394_DRIVER_NAME, __FUNCTION__, \ --global_outstanding_dmas, ## args) -u32 global_outstanding_dmas = 0; +static int global_outstanding_dmas = 0; #else #define OHCI_DMA_ALLOC(fmt, args...) #define OHCI_DMA_FREE(fmt, args...) @@ -160,12 +165,12 @@ printk(level "%s_%d: " fmt "\n" , OHCI1394_DRIVER_NAME, card , ## args) static char version[] __devinitdata = - "$Rev: 801 $ Ben Collins "; + "$Rev: 858 $ Ben Collins "; /* Module Parameters */ -MODULE_PARM(phys_dma,"i"); -MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1)."); static int phys_dma = 1; +module_param(phys_dma, int, 0644); +MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1)."); static void dma_trm_tasklet(unsigned long data); static void dma_trm_reset(struct dma_trm_ctx *d); @@ -354,10 +359,10 @@ static void ohci_soft_reset(struct ti_ohci *ohci) { int i; - reg_write(ohci, OHCI1394_HCControlSet, 0x00010000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_softReset); for (i = 0; i < OHCI_LOOP_COUNT; i++) { - if (reg_read(ohci, OHCI1394_HCControlSet) & 0x00010000) + if (!reg_read(ohci, OHCI1394_HCControlSet) & OHCI1394_HCControl_softReset) break; mdelay(1); } @@ -514,7 +519,7 @@ reg_write(ohci, OHCI1394_NodeID, 0x0000ffc0); /* Enable posted writes */ - reg_write(ohci, OHCI1394_HCControlSet, 0x00040000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_postedWriteEnable); /* Clear link control register */ reg_write(ohci, OHCI1394_LinkControlClear, 0xffffffff); @@ -577,7 +582,7 @@ (OHCI1394_MAX_PHYS_RESP_RETRIES<<8)); /* We don't want hardware swapping */ - reg_write(ohci, OHCI1394_HCControlClear, 0x40000000); + reg_write(ohci, OHCI1394_HCControlClear, OHCI1394_HCControl_noByteSwap); /* Enable interrupts */ reg_write(ohci, OHCI1394_IntMaskSet, @@ -594,7 +599,7 @@ OHCI1394_cycleInconsistent); /* Enable link */ - reg_write(ohci, OHCI1394_HCControlSet, 0x00020000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_linkEnable); buf = reg_read(ohci, OHCI1394_Version); PRINT(KERN_INFO, ohci->id, "OHCI-1394 %d.%d (PCI): IRQ=[%d] " @@ -1190,10 +1195,11 @@ /* iso->irq_interval is in packets - translate that to blocks */ /* (err, sort of... 1 is always the safest value) */ recv->block_irq_interval = iso->irq_interval / recv->nblocks; + if(recv->block_irq_interval*4 > recv->nblocks) + recv->block_irq_interval = recv->nblocks/4; if(recv->block_irq_interval < 1) recv->block_irq_interval = 1; - else if(recv->block_irq_interval*4 > recv->nblocks) - recv->block_irq_interval = recv->nblocks/4; + } else { int max_packet_size; @@ -2291,17 +2297,35 @@ * selfID phase, so we disable busReset interrupts, to * avoid burying the cpu in interrupt requests. */ spin_lock_irqsave(&ohci->event_lock, flags); - reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset); - if (ohci->dev->vendor == PCI_VENDOR_ID_APPLE && - ohci->dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) { - udelay(10); - while(reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) { - reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset); + reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset); + + if (ohci->check_busreset) { + int loop_count = 0; + + udelay(10); + + while (reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) { + reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset); + spin_unlock_irqrestore(&ohci->event_lock, flags); - udelay(10); + udelay(10); spin_lock_irqsave(&ohci->event_lock, flags); - } - } + + /* The loop counter check is to prevent the driver + * from remaining in this state forever. For the + * initial bus reset, the loop continues for ever + * and the system hangs, until some device is plugged-in + * or out manually into a port! The forced reset seems + * to solve this problem. This mainly effects nForce2. */ + if (loop_count > 10000) { + hpsb_reset_bus(host, 1); + DBGMSG(ohci->id, "Detected bus-reset loop. Forced a bus reset!"); + loop_count = 0; + } + + loop_count++; + } + } spin_unlock_irqrestore(&ohci->event_lock, flags); if (!host->in_bus_reset) { DBGMSG(ohci->id, "irq_handler: Bus reset requested"); @@ -2438,6 +2462,8 @@ if (event) PRINT(KERN_ERR, ohci->id, "Unhandled interrupt(s) 0x%08x", event); + + return; } /* Put the buffer back into the dma context */ @@ -3277,6 +3303,18 @@ ohci->selfid_swap = 1; #endif +#ifndef PCI_DEVICE_ID_NVIDIA_NFORCE2_FW +#define PCI_DEVICE_ID_NVIDIA_NFORCE2_FW 0x006e +#endif + + /* These chipsets require a bit of extra care when checking after + * a busreset. */ + if ((dev->vendor == PCI_VENDOR_ID_APPLE && + dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) || + (dev->vendor == PCI_VENDOR_ID_NVIDIA && + dev->device == PCI_DEVICE_ID_NVIDIA_NFORCE2_FW)) + ohci->check_busreset = 1; + /* We hardwire the MMIO length, since some CardBus adaptors * fail to report the right length. Anyway, the ohci spec * clearly says it's 2kb, so this shouldn't be a problem. */ @@ -3363,7 +3401,7 @@ * accessing registers in the SClk domain without LPS enabled * will lock up the machine. Wait 50msec to make sure we have * full link enabled. */ - reg_write(ohci, OHCI1394_HCControlSet, 0x00080000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_LPS); mdelay(50); /* Determine the number of available IR and IT contexts. */ @@ -3489,7 +3527,7 @@ static struct pci_device_id ohci1394_pci_tbl[] __devinitdata = { { .class = PCI_CLASS_FIREWIRE_OHCI, - .class_mask = ~0, + .class_mask = PCI_ANY_ID, .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, .subvendor = PCI_ANY_ID, diff -Nru a/drivers/ieee1394/ohci1394.h b/drivers/ieee1394/ohci1394.h --- a/drivers/ieee1394/ohci1394.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/ohci1394.h Sat Apr 12 14:44:06 2003 @@ -233,6 +233,9 @@ unsigned int selfid_swap:1; /* Some Apple chipset seem to swap incoming headers for us */ unsigned int no_swap_incoming:1; + + /* Force extra paranoia checking on bus-reset handling */ + unsigned int check_busreset:1; }; static inline int cross_bound(unsigned long addr, unsigned int size) @@ -288,6 +291,13 @@ #define OHCI1394_VendorID 0x040 #define OHCI1394_HCControlSet 0x050 #define OHCI1394_HCControlClear 0x054 +#define OHCI1394_HCControl_noByteSwap 0x40000000 +#define OHCI1394_HCControl_programPhyEnable 0x00800000 +#define OHCI1394_HCControl_aPhyEnhanceEnable 0x00400000 +#define OHCI1394_HCControl_LPS 0x00080000 +#define OHCI1394_HCControl_postedWriteEnable 0x00040000 +#define OHCI1394_HCControl_linkEnable 0x00020000 +#define OHCI1394_HCControl_softReset 0x00010000 #define OHCI1394_SelfIDBuffer 0x064 #define OHCI1394_SelfIDCount 0x068 #define OHCI1394_IRMultiChanMaskHiSet 0x070 diff -Nru a/drivers/ieee1394/pcilynx.c b/drivers/ieee1394/pcilynx.c --- a/drivers/ieee1394/pcilynx.c Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/pcilynx.c Sat Apr 12 14:44:07 2003 @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -71,9 +72,9 @@ /* Module Parameters */ -MODULE_PARM(skip_eeprom,"i"); -MODULE_PARM_DESC(skip_eeprom, "Do not try to read bus info block from serial eeprom, but user generic one (default = 0)."); static int skip_eeprom = 0; +module_param(skip_eeprom, int, 0444); +MODULE_PARM_DESC(skip_eeprom, "Use generic bus info block instead of serial eeprom (default = 0)."); static struct hpsb_host_driver lynx_driver; @@ -983,8 +984,9 @@ * on performance - the value 2400 was found by experiment and may not work * everywhere as good as here - use mem_mindma option for modules to change */ -short mem_mindma = 2400; -MODULE_PARM(mem_mindma, "h"); +static short mem_mindma = 2400; +module_param(mem_mindma, short, 0444); +MODULE_PARM_DESC(mem_mindma, "Minimum amount of data required to use DMA"); static ssize_t mem_dmaread(struct memdata *md, u32 physbuf, ssize_t count, int offset) diff -Nru a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c --- a/drivers/ieee1394/sbp2.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/sbp2.c Sat Apr 12 14:44:06 2003 @@ -27,44 +27,22 @@ * driver. It also registers as a SCSI lower-level driver in order to accept * SCSI commands for transport using SBP-2. * - * The easiest way to add/detect new SBP-2 devices is to run the shell script - * rescan-scsi-bus.sh (or re-load the SBP-2 driver). This script may be - * found at: - * http://www.garloff.de/kurt/linux/rescan-scsi-bus.sh - * - * As an alternative, you may manually add/remove SBP-2 devices via the procfs with - * add-single-device or remove-single-device , where: - * = host (starting at zero for first SCSI adapter) - * = bus (normally zero) - * = target (starting at zero for first SBP-2 device) - * = lun (normally zero) - * - * e.g. To manually add/detect a new SBP-2 device - * echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi - * - * e.g. To manually remove a SBP-2 device after it's been unplugged - * echo "scsi remove-single-device 0 0 0 0" > /proc/scsi/scsi - * - * e.g. To check to see which SBP-2/SCSI devices are currently registered - * cat /proc/scsi/scsi - * - * After scanning for new SCSI devices (above), you may access any attached - * SBP-2 storage devices as if they were SCSI devices (e.g. mount /dev/sda1, - * fdisk, mkfs, etc.). + * You may access any attached SBP-2 storage devices as if they were SCSI + * devices (e.g. mount /dev/sda1, fdisk, mkfs, etc.). * * * Module Load Options: * - * sbp2_max_speed - Force max speed allowed - * (2 = 400mb, 1 = 200mb, 0 = 100mb. default = 2) - * sbp2_serialize_io - Serialize all I/O coming down from the scsi drivers - * (0 = deserialized, 1 = serialized, default = 0) - * sbp2_max_sectors, - Change max sectors per I/O supported (default = 255) - * sbp2_exclusive_login - Set to zero if you'd like to allow multiple hosts the ability - * to log in at the same time. Sbp2 device must support this, - * and you must know what you're doing (default = 1) + * max_speed - Force max speed allowed + * (2 = 400mb, 1 = 200mb, 0 = 100mb. default = 2) + * serialize_io - Serialize all I/O coming down from the scsi drivers + * (0 = deserialized, 1 = serialized, default = 0) + * max_sectors, - Change max sectors per I/O supported (default = 255) + * exclusive_login - Set to zero if you'd like to allow multiple hosts the ability + * to log in at the same time. Sbp2 device must support this, + * and you must know what you're doing (default = 1) * - * (e.g. insmod sbp2 sbp2_serialize_io = 1) + * (e.g. insmod sbp2 sbp2.serialize_io = 1) * * * Current Support: @@ -258,7 +236,7 @@ * * New packet dump debug define (CONFIG_IEEE1394_SBP2_PACKET_DUMP) which allows * dumping of all sbp2 related packets sent and received. Especially effective * when phys dma is disabled on ohci controller (e.g. insmod ohci1394 phys_dma=0). - * * Added new sbp2 module load option (sbp2_exclusive_login) for allowing + * * Added new sbp2 module load option (exclusive_login) for allowing * non-exclusive login to sbp2 device, for special multi-host applications. * 04/23/02 - Fix for Sony CD-ROM drives. Only send fetch agent reset to sbp2 device if it * returns the dead bit in status. Thanks to Chandan (chandan@toad.net) for this one. @@ -285,6 +263,7 @@ #include #include #include +#include #include #include #include @@ -319,14 +298,14 @@ #include "sbp2.h" static char version[] __devinitdata = - "$Rev: 797 $ James Goodwin "; + "$Rev: 846 $ James Goodwin "; /* * Module load parameter definitions */ /* - * Change sbp2_max_speed on module load if you have a bad IEEE-1394 + * Change max_speed on module load if you have a bad IEEE-1394 * controller that has trouble running 2KB packets at 400mb. * * NOTE: On certain OHCI parts I have seen short packets on async transmit @@ -334,34 +313,34 @@ * bump down the speed if you are running into problems. * * Valid values: - * sbp2_max_speed = 2 (default: max speed 400mb) - * sbp2_max_speed = 1 (max speed 200mb) - * sbp2_max_speed = 0 (max speed 100mb) + * max_speed = 2 (default: max speed 400mb) + * max_speed = 1 (max speed 200mb) + * max_speed = 0 (max speed 100mb) */ -MODULE_PARM(sbp2_max_speed,"i"); -MODULE_PARM_DESC(sbp2_max_speed, "Force max speed (2 = 400mb default, 1 = 200mb, 0 = 100mb)"); -static int sbp2_max_speed = SPEED_400; +static int max_speed = SPEED_400; +module_param(max_speed, int, 0644); +MODULE_PARM_DESC(max_speed, "Force max speed (2 = 400mb default, 1 = 200mb, 0 = 100mb)"); /* - * Set sbp2_serialize_io to 1 if you'd like only one scsi command sent + * Set serialize_io to 1 if you'd like only one scsi command sent * down to us at a time (debugging). This might be necessary for very * badly behaved sbp2 devices. */ -MODULE_PARM(sbp2_serialize_io,"i"); -MODULE_PARM_DESC(sbp2_serialize_io, "Serialize all I/O coming down from the scsi drivers (default = 0)"); -static int sbp2_serialize_io = 0; /* serialize I/O - available for debugging purposes */ +static int serialize_io = 0; +module_param(serialize_io, int, 0444); +MODULE_PARM_DESC(serialize_io, "Serialize all I/O coming down from the scsi drivers (default = 0)"); /* - * Bump up sbp2_max_sectors if you'd like to support very large sized + * Bump up max_sectors if you'd like to support very large sized * transfers. Please note that some older sbp2 bridge chips are broken for * transfers greater or equal to 128KB. Default is a value of 255 * sectors, or just under 128KB (at 512 byte sector size). I can note that * the Oxsemi sbp2 chipsets have no problems supporting very large * transfer sizes. */ -MODULE_PARM(sbp2_max_sectors,"i"); -MODULE_PARM_DESC(sbp2_max_sectors, "Change max sectors per I/O supported (default = 255)"); -static int sbp2_max_sectors = SBP2_MAX_SECTORS; +static int max_sectors = SBP2_MAX_SECTORS; +module_param(max_sectors, int, 0444); +MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported (default = 255)"); /* * Exclusive login to sbp2 device? In most cases, the sbp2 driver should @@ -370,13 +349,13 @@ * etc.). If you're running an sbp2 device that supports multiple logins, * and you're either running read-only filesystems or some sort of special * filesystem supporting multiple hosts (one such filesystem is OpenGFS, - * see opengfs.sourceforge.net for more info), then set sbp2_exclusive_login + * see opengfs.sourceforge.net for more info), then set exclusive_login * to zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four * concurrent logins. */ -MODULE_PARM(sbp2_exclusive_login,"i"); -MODULE_PARM_DESC(sbp2_exclusive_login, "Exclusive login to sbp2 device (default = 1)"); -static int sbp2_exclusive_login = 1; +static int exclusive_login = 1; +module_param(exclusive_login, int, 0644); +MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device (default = 1)"); /* * SCSI inquiry hack for really badly behaved sbp2 devices. Turn this on @@ -384,13 +363,13 @@ * This hack makes the inquiry look more like a typical MS Windows * inquiry. * - * If sbp2_force_inquiry_hack=1 is required for your device to work, + * If force_inquiry_hack=1 is required for your device to work, * please submit the logged sbp2_firmware_revision value of this device to * the linux1394-devel mailing list. */ -MODULE_PARM(sbp2_force_inquiry_hack,"i"); -MODULE_PARM_DESC(sbp2_force_inquiry_hack, "Force SCSI inquiry hack (default = 0)"); -static int sbp2_force_inquiry_hack = 0; +static int force_inquiry_hack = 0; +module_param(force_inquiry_hack, int, 0444); +MODULE_PARM_DESC(force_inquiry_hack, "Force SCSI inquiry hack (default = 0)"); /* @@ -466,12 +445,10 @@ * Globals */ -static void sbp2scsi_complete_all_commands(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id, u32 status); -static void sbp2scsi_complete_command(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id, u32 scsi_status, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)); @@ -486,7 +463,6 @@ static struct hpsb_highlevel *sbp2_hl_handle = NULL; static struct hpsb_highlevel_ops sbp2_hl_ops = { - .add_host = sbp2_add_host, .remove_host = sbp2_remove_host, }; @@ -502,13 +478,18 @@ #endif static struct hpsb_protocol_driver sbp2_driver = { - .name = "SBP2 Driver", - .id_table = sbp2_id_table, - .probe = sbp2_probe, - .disconnect = sbp2_disconnect, - .update = sbp2_update + .name = "SBP2 Driver", + .id_table = sbp2_id_table, + .update = sbp2_update, + .driver = { + .name = SBP2_DEVICE_NAME, + .bus = &ieee1394_bus_type, + .probe = sbp2_probe, + .remove = sbp2_remove, + }, }; + /* List of device firmware's that require a forced 36 byte inquiry. */ static u32 sbp2_broken_inquiry_list[] = { 0x00002800, /* Stefan Richter */ @@ -648,14 +629,14 @@ * This function is called to create a pool of command orbs used for * command processing. It is called when a new sbp2 device is detected. */ -static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id, - struct sbp2scsi_host_info *hi) +static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; int i; unsigned long flags, orbs; struct sbp2_command_info *command; - orbs = sbp2_serialize_io ? 2 : SBP2_MAX_COMMAND_ORBS; + orbs = serialize_io ? 2 : SBP2_MAX_COMMAND_ORBS; spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags); for (i = 0; i < orbs; i++) { @@ -686,9 +667,9 @@ /* * This function is called to delete a pool of command orbs. */ -static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id, - struct sbp2scsi_host_info *hi) +static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id) { + struct hpsb_host *host = scsi_id->hi->host; struct list_head *lh, *next; struct sbp2_command_info *command; unsigned long flags; @@ -699,11 +680,11 @@ command = list_entry(lh, struct sbp2_command_info, list); /* Release our generic DMA's */ - pci_unmap_single(hi->host->pdev, command->command_orb_dma, + pci_unmap_single(host->pdev, command->command_orb_dma, sizeof(struct sbp2_command_orb), PCI_DMA_BIDIRECTIONAL); SBP2_DMA_FREE("single command orb DMA"); - pci_unmap_single(hi->host->pdev, command->sge_dma, + pci_unmap_single(host->pdev, command->sge_dma, sizeof(command->scatter_gather_element), PCI_DMA_BIDIRECTIONAL); SBP2_DMA_FREE("scatter_gather_element"); @@ -773,8 +754,7 @@ static struct sbp2_command_info *sbp2util_allocate_command_orb( struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *Current_SCpnt, - void (*Current_done)(Scsi_Cmnd *), - struct sbp2scsi_host_info *hi) + void (*Current_done)(Scsi_Cmnd *)) { struct list_head *lh; struct sbp2_command_info *command = NULL; @@ -849,78 +829,86 @@ * IEEE-1394 core driver stack related section *********************************************/ -static int sbp2_probe(struct unit_directory *ud) +static int sbp2_probe(struct device *dev) { + struct unit_directory *ud; struct sbp2scsi_host_info *hi; - SBP2_DEBUG("sbp2_probe"); - hi = sbp2_find_host_info(ud->ne->host); + SBP2_DEBUG(__FUNCTION__); + + ud = container_of(dev, struct unit_directory, device); + + /* This will only add it if it doesn't exist */ + hi = sbp2_add_host(ud->ne->host); + + if (!hi) + return -ENODEV; return sbp2_start_device(hi, ud); } -static void sbp2_disconnect(struct unit_directory *ud) +static int sbp2_remove(struct device *dev) { - struct sbp2scsi_host_info *hi; - struct scsi_id_instance_data *scsi_id = ud->driver_data; + struct unit_directory *ud; + struct scsi_id_instance_data *scsi_id; - SBP2_DEBUG("sbp2_disconnect"); - hi = sbp2_find_host_info(ud->ne->host); + SBP2_DEBUG(__FUNCTION__); - if (hi != NULL) { - sbp2_logout_device(hi, scsi_id); - sbp2_remove_device(hi, scsi_id); + ud = container_of(dev, struct unit_directory, device); + scsi_id = ud->device.driver_data; + ud->device.driver_data = NULL; + + if (scsi_id != NULL) { + sbp2_logout_device(scsi_id); + sbp2_remove_device(scsi_id); } + + return 0; } static void sbp2_update(struct unit_directory *ud) { - struct sbp2scsi_host_info *hi; - struct scsi_id_instance_data *scsi_id = ud->driver_data; + struct scsi_id_instance_data *scsi_id = ud->device.driver_data; + struct sbp2scsi_host_info *hi = scsi_id->hi; unsigned long flags; SBP2_DEBUG("sbp2_update"); - hi = sbp2_find_host_info(ud->ne->host); - if (sbp2_reconnect_device(hi, scsi_id)) { + if (sbp2_reconnect_device(scsi_id)) { /* * Ok, reconnect has failed. Perhaps we didn't * reconnect fast enough. Try doing a regular login. */ - if (sbp2_login_device(hi, scsi_id)) { - + if (sbp2_login_device(scsi_id)) { /* Login failed too, just remove the device. */ SBP2_ERR("sbp2_reconnect_device failed!"); - sbp2_remove_device(hi, scsi_id); - hpsb_release_unit_directory(ud); + sbp2_remove_device(scsi_id); return; } } /* Set max retries to something large on the device. */ - sbp2_set_busy_timeout(hi, scsi_id); + sbp2_set_busy_timeout(scsi_id); /* Do a SBP-2 fetch agent reset. */ - sbp2_agent_reset(hi, scsi_id, 1); + sbp2_agent_reset(scsi_id, 1); /* Get the max speed and packet size that we can use. */ - sbp2_max_speed_and_size(hi, scsi_id); + sbp2_max_speed_and_size(scsi_id); /* Complete any pending commands with busy (so they get * retried) and remove them from our queue */ spin_lock_irqsave(&hi->sbp2_command_lock, flags); - sbp2scsi_complete_all_commands(hi, scsi_id, DID_BUS_BUSY); + sbp2scsi_complete_all_commands(scsi_id, DID_BUS_BUSY); spin_unlock_irqrestore(&hi->sbp2_command_lock, flags); } -/* - * This function is called after registering our operations in sbp2_init. - * We go ahead and allocate some memory for our host info structure, and - * init some structures. - */ -static void sbp2_add_host(struct hpsb_host *host) +/* This functions is called by the sbp2_probe, for each new device. If the + * host_info already exists, it will return it. If not, it allocated a new + * host_info entry and a corresponding scsi_host. */ +static struct sbp2scsi_host_info *sbp2_add_host(struct hpsb_host *host) { struct sbp2scsi_host_info *hi; unsigned long flags; @@ -928,11 +916,15 @@ SBP2_DEBUG("sbp2_add_host"); + hi = sbp2_find_host_info(host); + if (hi) + return hi; + /* Register our host with the SCSI stack. */ scsi_host = scsi_register (&scsi_driver_template, sizeof(struct sbp2scsi_host_info)); if (!scsi_host) { SBP2_ERR("failed to register scsi host"); - return; + return NULL; } hi = (struct sbp2scsi_host_info *)&scsi_host->hostdata; @@ -948,11 +940,10 @@ list_add_tail(&hi->list, &sbp2_host_info_list); spin_unlock_irqrestore(&sbp2_host_info_lock, flags); - /* - * XXX(hch): Hopefully the ieee1394 code will be converted - * to the driver model at some point. Until that happens - * we'll have to pass in NULL here. - */ + /* XXX We need a device to pass here as the scsi-host class. Can't + * use the PCI device, since it is already bound to the ieee1394 + * host. Can't use the fw-host device since it is multi-class + * enabled (scsi-host uses classdata member of the device). */ if (scsi_add_host(hi->scsi_host, NULL)) { SBP2_ERR("failed to add scsi host"); @@ -963,7 +954,7 @@ scsi_unregister(hi->scsi_host); } - return; + return hi; } /* @@ -1048,6 +1039,8 @@ goto alloc_fail_first; memset(scsi_id, 0, sizeof(struct scsi_id_instance_data)); + scsi_id->hi = hi; + /* Login FIFO DMA */ scsi_id->login_response = pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_login_response), @@ -1076,7 +1069,7 @@ scsi_id->login_orb = pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_login_orb), &scsi_id->login_orb_dma); - if (scsi_id->login_orb == NULL) { + if (!scsi_id->login_orb) { alloc_fail: if (scsi_id->logout_orb) { pci_free_consistent(hi->host->pdev, @@ -1105,7 +1098,8 @@ kfree(scsi_id); alloc_fail_first: SBP2_ERR ("Could not allocate memory for scsi_id"); - return(-ENOMEM); + + return -ENOMEM; } SBP2_DMA_ALLOC("consistent DMA region for login ORB"); @@ -1116,7 +1110,7 @@ scsi_id->ud = ud; scsi_id->speed_code = SPEED_100; scsi_id->max_payload_size = sbp2_speedto_maxrec[SPEED_100]; - ud->driver_data = scsi_id; + ud->device.driver_data = scsi_id; atomic_set(&scsi_id->sbp2_login_complete, 0); @@ -1149,9 +1143,9 @@ /* * Create our command orb pool */ - if (sbp2util_create_command_orb_pool(scsi_id, hi)) { + if (sbp2util_create_command_orb_pool(scsi_id)) { SBP2_ERR("sbp2util_create_command_orb_pool failed!"); - sbp2_remove_device(hi, scsi_id); + sbp2_remove_device(scsi_id); return -ENOMEM; } @@ -1160,35 +1154,33 @@ */ if (i == hi->scsi_host->max_id) { SBP2_ERR("No slots left for SBP-2 device"); - sbp2_remove_device(hi, scsi_id); + sbp2_remove_device(scsi_id); return -EBUSY; } /* * Login to the sbp-2 device */ - if (sbp2_login_device(hi, scsi_id)) { - + if (sbp2_login_device(scsi_id)) { /* Login failed, just remove the device. */ - SBP2_ERR("sbp2_login_device failed"); - sbp2_remove_device(hi, scsi_id); + sbp2_remove_device(scsi_id); return -EBUSY; } /* * Set max retries to something large on the device */ - sbp2_set_busy_timeout(hi, scsi_id); + sbp2_set_busy_timeout(scsi_id); /* * Do a SBP-2 fetch agent reset */ - sbp2_agent_reset(hi, scsi_id, 1); + sbp2_agent_reset(scsi_id, 1); /* * Get the max speed and packet size that we can use */ - sbp2_max_speed_and_size(hi, scsi_id); + sbp2_max_speed_and_size(scsi_id); /* Add this device to the scsi layer now */ sdev = scsi_add_device(hi->scsi_host, 0, scsi_id->id, 0); @@ -1203,21 +1195,21 @@ /* * This function removes an sbp2 device from the sbp2scsi_host_info struct. */ -static void sbp2_remove_device(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id) +static void sbp2_remove_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct scsi_device *sdev = scsi_find_device(hi->scsi_host, 0, scsi_id->id, 0); SBP2_DEBUG("sbp2_remove_device"); /* Complete any pending commands with selection timeout */ - sbp2scsi_complete_all_commands(hi, scsi_id, DID_NO_CONNECT); + sbp2scsi_complete_all_commands(scsi_id, DID_NO_CONNECT); /* Remove it from the scsi layer now */ - if (scsi_remove_device(sdev)) + if (sdev && scsi_remove_device(sdev)) SBP2_ERR("scsi_remove_device failed"); - sbp2util_remove_command_orb_pool(scsi_id, hi); + sbp2util_remove_command_orb_pool(scsi_id); hi->scsi_id[scsi_id->id] = NULL; @@ -1311,8 +1303,9 @@ * This function is called in order to login to a particular SBP-2 device, * after a bus reset. */ -static int sbp2_login_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_login_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; quadlet_t data[2]; SBP2_DEBUG("sbp2_login_device"); @@ -1333,7 +1326,7 @@ scsi_id->login_orb->lun_misc = ORB_SET_FUNCTION(LOGIN_REQUEST); scsi_id->login_orb->lun_misc |= ORB_SET_RECONNECT(0); /* One second reconnect time */ - scsi_id->login_orb->lun_misc |= ORB_SET_EXCLUSIVE(sbp2_exclusive_login); /* Exclusive access to device */ + scsi_id->login_orb->lun_misc |= ORB_SET_EXCLUSIVE(exclusive_login); /* Exclusive access to device */ scsi_id->login_orb->lun_misc |= ORB_SET_NOTIFY(1); /* Notify us of login complete */ /* Set the lun if we were able to pull it from the device's unit directory */ if (scsi_id->sbp2_device_type_and_lun != SBP2_DEVICE_TYPE_LUN_UNINITIALIZED) { @@ -1438,8 +1431,9 @@ * This function is called in order to logout from a particular SBP-2 * device, usually called during driver unload. */ -static int sbp2_logout_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_logout_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; quadlet_t data[2]; SBP2_DEBUG("sbp2_logout_device"); @@ -1496,8 +1490,9 @@ * This function is called in order to reconnect to a particular SBP-2 * device, after a bus reset. */ -static int sbp2_reconnect_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_reconnect_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; quadlet_t data[2]; SBP2_DEBUG("sbp2_reconnect_device"); @@ -1584,8 +1579,8 @@ * This function is called in order to set the busy timeout (number of * retries to attempt) on the sbp2 device. */ -static int sbp2_set_busy_timeout(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) -{ +static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id) +{ quadlet_t data; SBP2_DEBUG("sbp2_set_busy_timeout"); @@ -1625,7 +1620,7 @@ ud = scsi_id->ud; /* Handle different fields in the unit directory, based on keys */ - for (i = 0; i < ud->count; i++) { + for (i = 0; i < ud->length; i++) { switch (CONFIG_ROM_KEY(ud->quadlets[i])) { case SBP2_CSR_OFFSET_KEY: /* Save off the management agent address */ @@ -1679,7 +1674,7 @@ /* Firmware revision */ scsi_id->sbp2_firmware_revision = CONFIG_ROM_VALUE(ud->quadlets[i]); - if (sbp2_force_inquiry_hack) + if (force_inquiry_hack) SBP2_INFO("sbp2_firmware_revision = %x", (unsigned int) scsi_id->sbp2_firmware_revision); else SBP2_DEBUG("sbp2_firmware_revision = %x", @@ -1697,20 +1692,20 @@ /* If the vendor id is 0xa0b8 (Symbios vendor id), then we have a * bridge with 128KB max transfer size limitation. For sanity, we - * only voice this when the current sbp2_max_sectors setting + * only voice this when the current max_sectors setting * exceeds the 128k limit. By default, that is not the case. * * It would be really nice if we could detect this before the scsi * host gets initialized. That way we can down-force the - * sbp2_max_sectors to account for it. That is not currently + * max_sectors to account for it. That is not currently * possible. */ if ((scsi_id->sbp2_firmware_revision & 0xffff00) == SBP2_128KB_BROKEN_FIRMWARE && - (sbp2_max_sectors * 512) > (128*1024)) { + (max_sectors * 512) > (128*1024)) { SBP2_WARN("Node " NODE_BUS_FMT ": Bridge only supports 128KB max transfer size.", NODE_BUS_ARGS(scsi_id->ne->nodeid)); - SBP2_WARN("WARNING: Current sbp2_max_sectors setting is larger than 128KB (%d sectors)!", - sbp2_max_sectors); + SBP2_WARN("WARNING: Current max_sectors setting is larger than 128KB (%d sectors)!", + max_sectors); scsi_id->workarounds |= SBP2_BREAKAGE_128K_MAX_TRANSFER; } @@ -1737,8 +1732,10 @@ * the speed that it needs to use, and the max_rec the host supports, and * it takes care of the rest. */ -static int sbp2_max_speed_and_size(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; + SBP2_DEBUG("sbp2_max_speed_and_size"); /* Initial setting comes from the hosts speed map */ @@ -1746,8 +1743,8 @@ + NODEID_TO_NODE(scsi_id->ne->nodeid)]; /* Bump down our speed if the user requested it */ - if (scsi_id->speed_code > sbp2_max_speed) { - scsi_id->speed_code = sbp2_max_speed; + if (scsi_id->speed_code > max_speed) { + scsi_id->speed_code = max_speed; SBP2_ERR("Forcing SBP-2 max speed down to %s", hpsb_speedto_str[scsi_id->speed_code]); } @@ -1767,8 +1764,9 @@ /* * This function is called in order to perform a SBP-2 agent reset. */ -static int sbp2_agent_reset(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, int wait) +static int sbp2_agent_reset(struct scsi_id_instance_data *scsi_id, int wait) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct hpsb_packet *packet; quadlet_t data; @@ -1811,8 +1809,7 @@ * This function is called to create the actual command orb and s/g list * out of the scsi command itself. */ -static int sbp2_create_command_orb(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static int sbp2_create_command_orb(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command, unchar *scsi_cmd, unsigned int scsi_use_sg, @@ -1820,6 +1817,7 @@ void *scsi_request_buffer, unsigned char scsi_dir) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct scatterlist *sgpnt = (struct scatterlist *) scsi_request_buffer; struct sbp2_command_orb *command_orb = &command->command_orb; struct sbp2_unrestricted_page_table *scatter_gather_element = @@ -2062,9 +2060,10 @@ /* * This function is called in order to begin a regular SBP-2 command. */ -static int sbp2_link_orb_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_link_orb_command(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct hpsb_packet *packet; struct sbp2_command_orb *command_orb = &command->command_orb; @@ -2166,7 +2165,7 @@ /* * This function is called in order to begin a regular SBP-2 command. */ -static int sbp2_send_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_send_command(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) { unchar *cmd = (unchar *) SCpnt->cmnd; @@ -2184,7 +2183,7 @@ /* * Allocate a command orb and s/g structure */ - command = sbp2util_allocate_command_orb(scsi_id, SCpnt, done, hi); + command = sbp2util_allocate_command_orb(scsi_id, SCpnt, done); if (!command) { return(-EIO); } @@ -2195,7 +2194,7 @@ * reject this inquiry command. Fix the request_bufflen. */ if (*cmd == INQUIRY) { - if (sbp2_force_inquiry_hack || scsi_id->workarounds & SBP2_BREAKAGE_INQUIRY_HACK) + if (force_inquiry_hack || scsi_id->workarounds & SBP2_BREAKAGE_INQUIRY_HACK) request_bufflen = cmd[4] = 0x24; else request_bufflen = cmd[4]; @@ -2204,7 +2203,7 @@ /* * Now actually fill in the comamnd orb and sbp2 s/g list */ - sbp2_create_command_orb(hi, scsi_id, command, cmd, SCpnt->use_sg, + sbp2_create_command_orb(scsi_id, command, cmd, SCpnt->use_sg, request_bufflen, SCpnt->request_buffer, SCpnt->sc_data_direction); /* @@ -2224,7 +2223,7 @@ /* * Link up the orb, and ring the doorbell if needed */ - sbp2_link_orb_command(hi, scsi_id, command); + sbp2_link_orb_command(scsi_id, command); return(0); } @@ -2543,7 +2542,7 @@ * Initiate a fetch agent reset. */ SBP2_DEBUG("Dead bit set - initiating fetch agent reset"); - sbp2_agent_reset(hi, scsi_id, 0); + sbp2_agent_reset(scsi_id, 0); } SBP2_ORB_DEBUG("completing command orb %p", &command->command_orb); @@ -2583,7 +2582,8 @@ * io_request_lock (in sbp2scsi_queuecommand). */ SBP2_DEBUG("Completing SCSI command"); - sbp2scsi_complete_command(hi, scsi_id, scsi_status, SCpnt, command->Current_done); + sbp2scsi_complete_command(scsi_id, scsi_status, SCpnt, + command->Current_done); SBP2_ORB_DEBUG("command orb completed"); } @@ -2649,7 +2649,7 @@ SBP2_DEBUG("REQUEST_SENSE"); memcpy(SCpnt->request_buffer, SCpnt->sense_buffer, SCpnt->request_bufflen); memset(SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer)); - sbp2scsi_complete_command(hi, scsi_id, SBP2_SCSI_STATUS_GOOD, SCpnt, done); + sbp2scsi_complete_command(scsi_id, SBP2_SCSI_STATUS_GOOD, SCpnt, done); return(0); } @@ -2667,9 +2667,10 @@ * Try and send our SCSI command */ spin_lock_irqsave(&hi->sbp2_command_lock, flags); - if (sbp2_send_command(hi, scsi_id, SCpnt, done)) { + if (sbp2_send_command(scsi_id, SCpnt, done)) { SBP2_ERR("Error sending SCSI command"); - sbp2scsi_complete_command(hi, scsi_id, SBP2_SCSI_STATUS_SELECTION_TIMEOUT, SCpnt, done); + sbp2scsi_complete_command(scsi_id, SBP2_SCSI_STATUS_SELECTION_TIMEOUT, + SCpnt, done); } spin_unlock_irqrestore(&hi->sbp2_command_lock, flags); @@ -2680,10 +2681,10 @@ * This function is called in order to complete all outstanding SBP-2 * commands (in case of resets, etc.). */ -static void sbp2scsi_complete_all_commands(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id, u32 status) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct list_head *lh; struct sbp2_command_info *command; @@ -2715,8 +2716,7 @@ * * This can be called in interrupt context. */ -static void sbp2scsi_complete_command(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id, u32 scsi_status, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) { @@ -2825,9 +2825,9 @@ done (SCpnt); spin_unlock_irqrestore(&io_request_lock,flags); #else - spin_lock_irqsave(hi->scsi_host->host_lock,flags); + spin_lock_irqsave(scsi_id->hi->scsi_host->host_lock,flags); done (SCpnt); - spin_unlock_irqrestore(hi->scsi_host->host_lock,flags); + spin_unlock_irqrestore(scsi_id->hi->scsi_host->host_lock,flags); #endif return; @@ -2876,8 +2876,8 @@ /* * Initiate a fetch agent reset. */ - sbp2_agent_reset(hi, scsi_id, 0); - sbp2scsi_complete_all_commands(hi, scsi_id, DID_BUS_BUSY); + sbp2_agent_reset(scsi_id, 0); + sbp2scsi_complete_all_commands(scsi_id, DID_BUS_BUSY); spin_unlock_irqrestore(&hi->sbp2_command_lock, flags); } @@ -2896,7 +2896,7 @@ if (scsi_id) { SBP2_ERR("Generating sbp2 fetch agent reset"); - sbp2_agent_reset(hi, scsi_id, 0); + sbp2_agent_reset(scsi_id, 0); } return(SUCCESS); @@ -2904,7 +2904,7 @@ static const char *sbp2scsi_info (struct Scsi_Host *host) { - return "SCSI emulation for for IEEE-1394 Storage Devices"; + return "SCSI emulation for IEEE-1394 SBP-2 Devices"; } /* Called for contents of procfs */ @@ -2936,10 +2936,10 @@ SPRINTF("Driver version : %s\n", version); SPRINTF("\nModule options :\n"); - SPRINTF(" sbp2_max_speed : %s\n", hpsb_speedto_str[sbp2_max_speed]); - SPRINTF(" sbp2_max_sectors : %d\n", sbp2_max_sectors); - SPRINTF(" sbp2_serialize_io : %s\n", sbp2_serialize_io ? "yes" : "no"); - SPRINTF(" sbp2_exclusive_login : %s\n", sbp2_exclusive_login ? "yes" : "no"); + SPRINTF(" max_speed : %s\n", hpsb_speedto_str[max_speed]); + SPRINTF(" max_sectors : %d\n", max_sectors); + SPRINTF(" serialize_io : %s\n", serialize_io ? "yes" : "no"); + SPRINTF(" exclusive_login : %s\n", exclusive_login ? "yes" : "no"); SPRINTF("\nAttached devices : %s\n", !list_empty(&host->my_devices) ? "" : "none"); @@ -3010,7 +3010,7 @@ /* Module load debug option to force one command at a time * (serializing I/O) */ - if (sbp2_serialize_io) { + if (serialize_io) { SBP2_ERR("Driver forced to serialize I/O (serialize_io = 1)"); scsi_driver_template.can_queue = 1; scsi_driver_template.cmd_per_lun = 1; @@ -3019,7 +3019,7 @@ /* * Set max sectors (module load option). Default is 255 sectors. */ - scsi_driver_template.max_sectors = sbp2_max_sectors; + scsi_driver_template.max_sectors = max_sectors; /* diff -Nru a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h --- a/drivers/ieee1394/sbp2.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/sbp2.h Sat Apr 12 14:44:06 2003 @@ -238,7 +238,7 @@ */ #define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000 -#define SBP2SCSI_MAX_SCSI_IDS 16 /* Max sbp2 device instances supported */ +#define SBP2SCSI_MAX_SCSI_IDS 32 /* Max sbp2 device instances supported */ #define SBP2_MAX_SECTORS 255 /* Max sectors supported */ #ifndef TYPE_SDAD @@ -320,6 +320,10 @@ #define SBP2_BREAKAGE_128K_MAX_TRANSFER 0x1 #define SBP2_BREAKAGE_INQUIRY_HACK 0x2 + +struct sbp2scsi_host_info; + + /* * Information needed on a per scsi id basis (one for each sbp2 device) */ @@ -375,6 +379,9 @@ /* Node entry, as retrieved from NodeMgr entries */ struct node_entry *ne; + /* A backlink to our host_info */ + struct sbp2scsi_host_info *hi; + /* Device specific workarounds/brokeness */ u32 workarounds; }; @@ -406,7 +413,6 @@ * SCSI ID instance data (one for each sbp2 device instance possible) */ struct scsi_id_instance_data *scsi_id[SBP2SCSI_MAX_SCSI_IDS]; - }; /* @@ -416,30 +422,30 @@ /* * Various utility prototypes */ -static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id, struct sbp2scsi_host_info *hi); -static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id, struct sbp2scsi_host_info *hi); +static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id); +static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id); static struct sbp2_command_info *sbp2util_find_command_for_orb(struct scsi_id_instance_data *scsi_id, dma_addr_t orb); static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt); static struct sbp2_command_info *sbp2util_allocate_command_orb(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *Current_SCpnt, - void (*Current_done)(Scsi_Cmnd *), - struct sbp2scsi_host_info *hi); + void (*Current_done)(Scsi_Cmnd *)); static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command); /* * IEEE-1394 core driver related prototypes */ -static void sbp2_add_host(struct hpsb_host *host); +static struct sbp2scsi_host_info *sbp2_add_host(struct hpsb_host *host); static struct sbp2scsi_host_info *sbp2_find_host_info(struct hpsb_host *host); static void sbp2_remove_host(struct hpsb_host *host); -static int sbp2_probe(struct unit_directory *ud); -static void sbp2_disconnect(struct unit_directory *ud); + +static int sbp2_probe(struct device *dev); +static int sbp2_remove(struct device *dev); static void sbp2_update(struct unit_directory *ud); + static int sbp2_start_device(struct sbp2scsi_host_info *hi, struct unit_directory *ud); -static void sbp2_remove_device(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id); +static void sbp2_remove_device(struct scsi_id_instance_data *scsi_id); #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA static int sbp2_handle_physdma_write(struct hpsb_host *host, int nodeid, int destid, quadlet_t *data, @@ -451,29 +457,28 @@ /* * SBP-2 protocol related prototypes */ -static int sbp2_login_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); -static int sbp2_reconnect_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); -static int sbp2_logout_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); +static int sbp2_login_device(struct scsi_id_instance_data *scsi_id); +static int sbp2_reconnect_device(struct scsi_id_instance_data *scsi_id); +static int sbp2_logout_device(struct scsi_id_instance_data *scsi_id); static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int destid, quadlet_t *data, u64 addr, unsigned int length, u16 flags); -static int sbp2_agent_reset(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, int wait); -static int sbp2_create_command_orb(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static int sbp2_agent_reset(struct scsi_id_instance_data *scsi_id, int wait); +static int sbp2_create_command_orb(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command, unchar *scsi_cmd, unsigned int scsi_use_sg, unsigned int scsi_request_bufflen, void *scsi_request_buffer, unsigned char scsi_dir); -static int sbp2_link_orb_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_link_orb_command(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command); -static int sbp2_send_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_send_command(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)); static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status, unchar *sense_data); static void sbp2_check_sbp2_command(struct scsi_id_instance_data *scsi_id, unchar *cmd); static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *SCpnt); static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id); -static int sbp2_set_busy_timeout(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); -static int sbp2_max_speed_and_size(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); +static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id); +static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id); #endif /* SBP2_H */ diff -Nru a/drivers/input/keyboard/98kbd.c b/drivers/input/keyboard/98kbd.c --- a/drivers/input/keyboard/98kbd.c Sat Apr 12 14:44:07 2003 +++ b/drivers/input/keyboard/98kbd.c Sat Apr 12 14:44:07 2003 @@ -189,6 +189,13 @@ input_sync(&kbd98->dev); return; + case KEY_CAPSLOCK: + input_report_key(&kbd98->dev, keycode, 1); + input_sync(&kbd98->dev); + input_report_key(&kbd98->dev, keycode, 0); + input_sync(&kbd98->dev); + return; + case KBD98_KEY_NULL: return; diff -Nru a/drivers/media/Kconfig b/drivers/media/Kconfig --- a/drivers/media/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/media/Kconfig Sat Apr 12 14:44:06 2003 @@ -32,5 +32,24 @@ source "drivers/media/dvb/Kconfig" +source "drivers/media/common/Kconfig" + +config VIDEO_TUNER + tristate + default y if VIDEO_BT848=y || VIDEO_SAA7134=y || VIDEO_MXB=y + default m if VIDEO_BT848=m || VIDEO_SAA7134=m || VIDEO_MXB=m + depends on VIDEO_DEV + +config VIDEO_BUF + tristate + default y if VIDEO_BT848=y || VIDEO_SAA7134=y || VIDEO_SAA7146=y + default m if VIDEO_BT848=m || VIDEO_SAA7134=m || VIDEO_SAA7146=m + depends on VIDEO_DEV + +config VIDEO_BTCX + tristate + default VIDEO_BT848 + depends on VIDEO_DEV + endmenu diff -Nru a/drivers/media/Makefile b/drivers/media/Makefile --- a/drivers/media/Makefile Sat Apr 12 14:44:09 2003 +++ b/drivers/media/Makefile Sat Apr 12 14:44:09 2003 @@ -2,4 +2,4 @@ # Makefile for the kernel multimedia device drivers. # -obj-y := video/ radio/ dvb/ +obj-y := video/ radio/ dvb/ common/ diff -Nru a/drivers/media/common/Kconfig b/drivers/media/common/Kconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/Kconfig Sat Apr 12 14:44:10 2003 @@ -0,0 +1,11 @@ +config VIDEO_SAA7146 + tristate + default y if DVB_AV7110=y || DVB_BUDGET=y || DVB_BUDGET_AV=y || VIDEO_MXB=y || VIDEO_DPC=y + default m if DVB_AV7110=m || DVB_BUDGET=m || DVB_BUDGET_AV=m || VIDEO_MXB=m || VIDEO_DPC=m + depends on VIDEO_DEV && PCI + +config VIDEO_VIDEOBUF + tristate + default y if VIDEO_SAA7134=y || VIDEO_BT848=y || VIDEO_SAA7146=y + default m if VIDEO_SAA7134=m || VIDEO_BT848=m || VIDEO_SAA7146=m + depends on VIDEO_DEV diff -Nru a/drivers/media/common/Makefile b/drivers/media/common/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/Makefile Sat Apr 12 14:44:10 2003 @@ -0,0 +1,5 @@ +saa7146-objs := saa7146_i2c.o saa7146_core.o +saa7146_vv-objs := saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o + +obj-$(CONFIG_VIDEO_SAA7146) += saa7146.o saa7146_vv.o + diff -Nru a/drivers/media/common/saa7146_core.c b/drivers/media/common/saa7146_core.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_core.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,524 @@ +/* + saa7146.o - driver for generic saa7146-based hardware + + Copyright (C) 1998-2003 Michael Hunold + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +/* global variables */ +struct list_head saa7146_devices; +struct semaphore saa7146_devices_lock; + +static int initialized = 0; +int saa7146_num = 0; + +unsigned int saa7146_debug = 0; + +MODULE_PARM(saa7146_debug,"i"); +MODULE_PARM_DESC(saa7146_debug, "debug level (default: 0)"); + +#if 0 +static void dump_registers(struct saa7146_dev* dev) +{ + int i = 0; + + INFO((" @ %li jiffies:\n",jiffies)); + for(i = 0; i <= 0x148; i+=4) { + printk("0x%03x: 0x%08x\n",i,saa7146_read(dev,i)); + } +} +#endif + +/**************************************************************************** + * general helper functions + ****************************************************************************/ + +/* this is videobuf_vmalloc_to_sg() from video-buf.c */ +static +struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages) +{ + struct scatterlist *sglist; + struct page *pg; + int i; + + sglist = kmalloc(sizeof(struct scatterlist)*nr_pages, GFP_KERNEL); + if (NULL == sglist) + return NULL; + memset(sglist,0,sizeof(struct scatterlist)*nr_pages); + for (i = 0; i < nr_pages; i++, virt += PAGE_SIZE) { + pg = vmalloc_to_page(virt); + if (NULL == pg) + goto err; + if (PageHighMem(pg)) + BUG(); + sglist[i].page = pg; + sglist[i].length = PAGE_SIZE; + } + return sglist; + + err: + kfree(sglist); + return NULL; +} + +/********************************************************************************/ +/* common page table functions */ + +#define SAA7146_PGTABLE_SIZE 4096 + +char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa7146_pgtable *pt) +{ + struct scatterlist *slist = NULL; + int pages = (length+PAGE_SIZE-1)/PAGE_SIZE; + char *mem = vmalloc(length); + int slen = 0; + + if (NULL == mem) { + return NULL; + } + + if (!(slist = vmalloc_to_sg(mem, pages))) { + vfree(mem); + return NULL; + } + + if (saa7146_pgtable_alloc(pci, pt)) { + kfree(slist); + vfree(mem); + return NULL; + } + + slen = pci_map_sg(pci,slist,pages,PCI_DMA_FROMDEVICE); + saa7146_pgtable_build_single(pci, pt, slist, slen); + + /* fixme: here's a memory leak: slist never gets freed by any other + function ...*/ + return mem; +} + +void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt) +{ +//fm DEB_EE(("pci:%p, pt:%p\n",pci,pt)); + + if (NULL == pt->cpu) + return; + pci_free_consistent(pci, pt->size, pt->cpu, pt->dma); + pt->cpu = NULL; +} + +int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt) +{ + u32 *cpu; + dma_addr_t dma_addr; + +//fm DEB_EE(("pci:%p, pt:%p\n",pci,pt)); + + cpu = pci_alloc_consistent(pci, SAA7146_PGTABLE_SIZE, &dma_addr); + if (NULL == cpu) { +//fm ERR(("pci_alloc_consistent() failed.")); + return -ENOMEM; + } + pt->size = SAA7146_PGTABLE_SIZE; + pt->cpu = cpu; + pt->dma = dma_addr; + + return 0; +} + +void saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int length ) +{ + u32 *ptr, fill; + int i,p; + +//fm DEB_EE(("pci:%p, pt:%p, sl:%p, len:%d\n",pci,pt,list,length)); + + /* if we have a user buffer, the first page may not be + aligned to a page boundary. */ + pt->offset = list->offset; + + ptr = pt->cpu; + for (i = 0; i < length; i++, list++) { + for (p = 0; p * 4096 < list->length; p++, ptr++) { + *ptr = sg_dma_address(list) - list->offset; + } + } + + + /* safety; fill the page table up with the last valid page */ + fill = *(ptr-1); + for(;i<1024;i++) { + *ptr++ = fill; + } +/* + ptr = pt->cpu; + for(j=0;j<60;j++) { + printk("ptr1 %d: 0x%08x\n",j,ptr[j]); + } +*/ +} + +/********************************************************************************/ +/* gpio functions */ + +void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data) +{ + u32 val = 0; + + val=saa7146_read(dev,GPIO_CTRL); + val&=~(0xff << (8*(port))); + val|=(data)<<(8*(port)); + saa7146_write(dev, GPIO_CTRL, val); +} + +/********************************************************************************/ +/* interrupt handler */ + +static void interrupt_hw(int irq, void *dev_id, struct pt_regs *regs) +{ + struct saa7146_dev *dev = (struct saa7146_dev*)dev_id; + u32 isr = 0; + + /* read out the interrupt status register */ + isr = saa7146_read(dev, ISR); + + /* is this our interrupt? */ + if ( 0 == isr ) { + /* nope, some other device */ + return; + } + + saa7146_write(dev, ISR, isr); +// DEB_INT(("0x%08x\n",isr)); + + if( 0 != (dev->ext)) { + if( 0 != (dev->ext->irq_mask & isr )) { + if( 0 != dev->ext->irq_func ) { + dev->ext->irq_func(dev, &isr); + } + isr &= ~dev->ext->irq_mask; + } + } + if (0 != (isr & (MASK_27))) { + DEB_INT(("irq: RPS0 (0x%08x).\n",isr)); + if( 0 != dev->vv_data && 0 != dev->vv_callback) { + dev->vv_callback(dev,isr); + } + isr &= ~MASK_27; + } + if (0 != (isr & (MASK_28))) { + if( 0 != dev->vv_data && 0 != dev->vv_callback) { + dev->vv_callback(dev,isr); + } + isr &= ~MASK_28; + } + if (0 != (isr & (MASK_16|MASK_17))) { + u32 status = saa7146_read(dev, I2C_STATUS); + if( (0x3 == (status & 0x3)) || (0 == (status & 0x1)) ) { + IER_DISABLE(dev, MASK_16|MASK_17); + /* only wake up if we expect something */ + if( 0 != dev->i2c_op ) { + u32 psr = (saa7146_read(dev, PSR) >> 16) & 0x2; + u32 ssr = (saa7146_read(dev, SSR) >> 17) & 0x1f; + DEB_I2C(("irq: i2c, status: 0x%08x, psr:0x%02x, ssr:0x%02x).\n",status,psr,ssr)); + dev->i2c_op = 0; + wake_up(&dev->i2c_wq); + } else { + DEB_I2C(("unexpected irq: i2c, status: 0x%08x, isr %#x\n",status, isr)); + } + } else { + DEB_I2C(("unhandled irq: i2c, status: 0x%08x, isr %#x\n",status, isr)); + } + isr &= ~(MASK_16|MASK_17); + } + if( 0 != isr ) { + ERR(("warning: interrupt enabled, but not handled properly.(0x%08x)\n",isr)); + ERR(("disabling interrupt source(s)!\n")); + IER_DISABLE(dev,isr); + } +} + +/*********************************************************************************/ +/* configuration-functions */ + +static +int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent) +{ + unsigned long adr = 0, len = 0; + struct saa7146_dev* dev = kmalloc (sizeof(struct saa7146_dev),GFP_KERNEL); + + struct saa7146_pci_extension_data *pci_ext = (struct saa7146_pci_extension_data *)ent->driver_data; + struct saa7146_extension* ext = pci_ext->ext; + int err = 0; + + if (!(dev = kmalloc (sizeof(struct saa7146_dev),GFP_KERNEL))) { + ERR(("out of memory.\n")); + return -ENOMEM; + } + + /* clear out mem for sure */ + memset(dev, 0x0, sizeof(struct saa7146_dev)); + + DEB_EE(("pci:%p\n",pci)); + + if (pci_enable_device(pci)) { + ERR(("pci_enable_device() failed.\n")); + err = -EIO; + goto pci_error; + } + + /* enable bus-mastering */ + pci_set_master(pci); + + dev->pci = pci; + /* get chip-revision; this is needed to enable bug-fixes */ + if( 0 > pci_read_config_dword(dev->pci, PCI_CLASS_REVISION, &dev->revision)) { + ERR(("pci_read_config_dword() failed.\n")); + err = -ENODEV; + goto pci_error; + } + dev->revision &= 0xf; + + /* remap the memory from virtual to physical adress */ + adr = pci_resource_start(pci,0); + len = pci_resource_len(pci,0); + + if (!request_mem_region(pci_resource_start(pci,0), pci_resource_len(pci,0), "saa7146")) { + ERR(("request_mem_region() failed.\n")); + err = -ENODEV; + goto pci_error; + } + + if (!(dev->mem = ioremap(adr,len))) { + ERR(("ioremap() failed.\n")); + err = -ENODEV; + goto ioremap_error; + } + + /* we don't do a master reset here anymore, it screws up + some boards that don't have an i2c-eeprom for configuration + values */ +/* + saa7146_write(dev, MC1, MASK_31); +*/ + + /* disable alle irqs */ + saa7146_write(dev, IER, 0); + + /* shut down all dma transfers */ + saa7146_write(dev, MC1, 0x00ff0000); + + /* clear out any rps-signals pending */ + saa7146_write(dev, MC2, 0xf8000000); + + /* request an interrupt for the saa7146 */ + if (request_irq(dev->pci->irq, interrupt_hw, SA_SHIRQ | SA_INTERRUPT, + dev->name, dev)) + { + ERR(("request_irq() failed.\n")); + err = -ENODEV; + goto irq_error; + } + + /* get memory for various stuff */ + dev->rps0 = (u32*)kmalloc(SAA7146_RPS_MEM, GFP_KERNEL); + if( NULL == dev->rps0 ) { + err = -ENOMEM; + goto kmalloc_error_1; + } + memset(dev->rps0, 0x0, SAA7146_RPS_MEM); + + dev->rps1 = (u32*)kmalloc(SAA7146_RPS_MEM, GFP_KERNEL); + if( NULL == dev->rps1 ) { + err = -ENOMEM; + goto kmalloc_error_2; + } + memset(dev->rps1, 0x0, SAA7146_RPS_MEM); + + dev->i2c_mem = (u32*)kmalloc(SAA7146_I2C_MEM, GFP_KERNEL); + if( NULL == dev->i2c_mem ) { + err = -ENOMEM; + goto kmalloc_error_3; + } + memset(dev->i2c_mem, 0x00, SAA7146_I2C_MEM); + + /* the rest + print status message */ + + /* create a nice device name */ + sprintf(&dev->name[0], "saa7146 (%d)",saa7146_num); + + INFO(("found saa7146 @ mem 0x%08x (revision %d, irq %d) (0x%04x,0x%04x).\n", (unsigned int)dev->mem, dev->revision,dev->pci->irq,dev->pci->subsystem_vendor,dev->pci->subsystem_device)); + dev->ext = ext; + + pci_set_drvdata(pci,dev); + + init_MUTEX(&dev->lock); + dev->int_slock = SPIN_LOCK_UNLOCKED; + dev->slock = SPIN_LOCK_UNLOCKED; + + init_MUTEX(&dev->i2c_lock); + + dev->module = THIS_MODULE; + init_waitqueue_head(&dev->i2c_wq); + + if( 0 != ext->probe) { + if( 0 != ext->probe(dev) ) { + DEB_D(("ext->probe() failed for %p. skipping device.\n",dev)); + err = -ENODEV; + goto probe_error; + } + } + + if( 0 != ext->attach(dev,pci_ext) ) { + DEB_D(("ext->attach() failed for %p. skipping device.\n",dev)); + err = -ENODEV; + goto attach_error; + } + + INIT_LIST_HEAD(&dev->item); + list_add_tail(&dev->item,&saa7146_devices); + saa7146_num++; + + /* set some default values */ + saa7146_write(dev, BCS_CTRL, 0x80400040); + + err = 0; + goto out; +attach_error: +probe_error: + pci_set_drvdata(pci,NULL); + kfree( dev->i2c_mem ); +kmalloc_error_3: + kfree( dev->rps1 ); +kmalloc_error_2: + kfree( dev->rps0 ); +kmalloc_error_1: + free_irq(dev->pci->irq, (void *)dev); +irq_error: + iounmap(dev->mem); +ioremap_error: + release_mem_region(adr,len); +pci_error: + kfree(dev); +out: + return err; +} + +static +void saa7146_remove_one(struct pci_dev *pdev) +{ + struct saa7146_dev* dev = (struct saa7146_dev*) pci_get_drvdata(pdev); + DEB_EE(("dev:%p\n",dev)); + + dev->ext->detach(dev); + + /* shut down all video dma transfers */ + saa7146_write(dev, MC1, 0x00ff0000); + + /* disable all irqs, release irq-routine */ + saa7146_write(dev, IER, 0); + + free_irq(dev->pci->irq, (void *)dev); + + /* free kernel memory */ + kfree(dev->rps0 ); + kfree(dev->rps1 ); + kfree(dev->i2c_mem); + + iounmap(dev->mem); + release_mem_region(pci_resource_start(dev->pci,0), pci_resource_len(dev->pci,0)); + + list_del(&dev->item); + kfree(dev); + + saa7146_num--; +} + +/*********************************************************************************/ +/* extension handling functions */ + +int saa7146_register_extension(struct saa7146_extension* ext) +{ + DEB_EE(("ext:%p\n",ext)); + + if( 0 == initialized ) { + INIT_LIST_HEAD(&saa7146_devices); + init_MUTEX(&saa7146_devices_lock); + initialized = 1; + } + + ext->driver.name = ext->name; + ext->driver.id_table = ext->pci_tbl; + ext->driver.probe = saa7146_init_one; + ext->driver.remove = saa7146_remove_one; + + printk("saa7146: register extension '%s'.\n",ext->name); + return pci_module_init(&ext->driver); +} + +int saa7146_unregister_extension(struct saa7146_extension* ext) +{ + DEB_EE(("ext:%p\n",ext)); + printk("saa7146: unregister extension '%s'.\n",ext->name); + pci_unregister_driver(&ext->driver); + return 0; +} + +static +int __init saa7146_init_module(void) +{ + if( 0 == initialized ) { + INIT_LIST_HEAD(&saa7146_devices); + init_MUTEX(&saa7146_devices_lock); + initialized = 1; + } + return 0; +} + +static +void __exit saa7146_cleanup_module(void) +{ +} + +module_init(saa7146_init_module); +module_exit(saa7146_cleanup_module); + +EXPORT_SYMBOL_GPL(saa7146_register_extension); +EXPORT_SYMBOL_GPL(saa7146_unregister_extension); + +/* misc functions used by extension modules */ +EXPORT_SYMBOL_GPL(saa7146_pgtable_alloc); +EXPORT_SYMBOL_GPL(saa7146_pgtable_free); +EXPORT_SYMBOL_GPL(saa7146_pgtable_build_single); +EXPORT_SYMBOL_GPL(saa7146_vmalloc_build_pgtable); + +EXPORT_SYMBOL_GPL(saa7146_setgpio); + +EXPORT_SYMBOL_GPL(saa7146_i2c_transfer); +EXPORT_SYMBOL_GPL(saa7146_i2c_adapter_prepare); + +EXPORT_SYMBOL_GPL(saa7146_debug); +EXPORT_SYMBOL_GPL(saa7146_devices); +EXPORT_SYMBOL_GPL(saa7146_devices_lock); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("driver for generic saa7146-based hardware"); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_fops.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,493 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +#define BOARD_CAN_DO_VBI(dev) (dev->revision != 0 && dev->vv_data->vbi_minor != -1) + +/********************************************************************************/ +/* common dma functions */ + +void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf) +{ + DEB_EE(("dev:%p, buf:%p\n",dev,buf)); + + if (in_interrupt()) + BUG(); + + videobuf_waiton(&buf->vb,0,0); + videobuf_dma_pci_unmap(dev->pci, &buf->vb.dma); + videobuf_dma_free(&buf->vb.dma); + buf->vb.state = STATE_NEEDS_INIT; +} + + +/********************************************************************************/ +/* common buffer functions */ + +int saa7146_buffer_queue(struct saa7146_dev *dev, + struct saa7146_dmaqueue *q, + struct saa7146_buf *buf) +{ +#if DEBUG_SPINLOCKS + BUG_ON(!spin_is_locked(&dev->slock)); +#endif + DEB_EE(("dev:%p, dmaq:%p, buf:%p\n", dev, q, buf)); + + if( NULL == q ) { + ERR(("internal error: fatal NULL pointer for q.\n")); + return 0; + } + + if (NULL == q->curr) { + q->curr = buf; + DEB_D(("immediately activating buffer %p\n", buf)); + buf->activate(dev,buf,NULL); + } else { + list_add_tail(&buf->vb.queue,&q->queue); + buf->vb.state = STATE_QUEUED; + DEB_D(("adding buffer %p to queue. (active buffer present)\n", buf)); + } + return 0; +} + +void saa7146_buffer_finish(struct saa7146_dev *dev, + struct saa7146_dmaqueue *q, + int state) +{ +#if DEBUG_SPINLOCKS + BUG_ON(!spin_is_locked(&dev->slock)); +#endif + if( NULL == q->curr ) { + ERR(("internal error: fatal NULL pointer for q->curr.\n")); + return; + } + + DEB_EE(("dev:%p, dmaq:%p, state:%d\n", dev, q, state)); + + /* finish current buffer */ + q->curr->vb.state = state; + do_gettimeofday(&q->curr->vb.ts); + wake_up(&q->curr->vb.done); + + q->curr = NULL; +} + +void saa7146_buffer_next(struct saa7146_dev *dev, + struct saa7146_dmaqueue *q, int vbi) +{ + struct saa7146_buf *buf,*next = NULL; + + if( NULL == q ) { + ERR(("internal error: fatal NULL pointer for q.\n")); + return; + } + + DEB_EE(("dev:%p, dmaq:%p, vbi:%d\n", dev, q, vbi)); + +#if DEBUG_SPINLOCKS + BUG_ON(!spin_is_locked(&dev->slock)); +#endif + if (!list_empty(&q->queue)) { + /* activate next one from queue */ + buf = list_entry(q->queue.next,struct saa7146_buf,vb.queue); + list_del(&buf->vb.queue); + if (!list_empty(&q->queue)) + next = list_entry(q->queue.next,struct saa7146_buf, vb.queue); + q->curr = buf; + DEB_D(("next buffer: buf:%p, prev:%p, next:%p\n", buf, q->queue.prev,q->queue.next)); + buf->activate(dev,buf,next); + } else { + DEB_D(("no next buffer. stopping.\n")); + if( 0 != vbi ) { + /* turn off video-dma3 */ + saa7146_write(dev,MC1, MASK_20); + } else { + /* nothing to do -- just prevent next video-dma1 transfer + by lowering the protection address */ + + // fixme: fix this for vflip != 0 + + saa7146_write(dev, PROT_ADDR1, 0); + /* write the address of the rps-program */ + saa7146_write(dev, RPS_ADDR0, virt_to_bus(&dev->rps0[ 0])); + /* turn on rps */ + saa7146_write(dev, MC1, (MASK_12 | MASK_28)); + } + del_timer(&q->timeout); + } +} + +void saa7146_buffer_timeout(unsigned long data) +{ + struct saa7146_dmaqueue *q = (struct saa7146_dmaqueue*)data; + struct saa7146_dev *dev = q->dev; + unsigned long flags; + + DEB_EE(("dev:%p, dmaq:%p\n", dev, q)); + + spin_lock_irqsave(&dev->slock,flags); + if (q->curr) { + DEB_D(("timeout on %p\n", q->curr)); + saa7146_buffer_finish(dev,q,STATE_ERROR); + } + + /* we don't restart the transfer here like other drivers do. when + a streaming capture is disabled, the timeout function will be + called for the current buffer. if we activate the next buffer now, + we mess up our capture logic. if a timeout occurs on another buffer, + then something is seriously broken before, so no need to buffer the + next capture IMHO... */ +/* + saa7146_buffer_next(dev,q); +*/ + spin_unlock_irqrestore(&dev->slock,flags); +} + +/********************************************************************************/ +/* file operations */ + +static +int fops_open(struct inode *inode, struct file *file) +{ + unsigned int minor = minor(inode->i_rdev); + struct saa7146_dev *h = NULL, *dev = NULL; + struct list_head *list; + struct saa7146_fh *fh = NULL; + int result = 0; + + enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + + DEB_EE(("inode:%p, file:%p, minor:%d\n",inode,file,minor)); + + if (down_interruptible(&saa7146_devices_lock)) + return -ERESTARTSYS; + + list_for_each(list,&saa7146_devices) { + h = list_entry(list, struct saa7146_dev, item); + if( NULL == h->vv_data ) { + DEB_D(("device %p has not registered video devices.\n",h)); + continue; + } + DEB_D(("trying: %p @ major %d,%d\n",h,h->vv_data->video_minor,h->vv_data->vbi_minor)); + + if (h->vv_data->video_minor == minor) { + dev = h; + } + if (h->vv_data->vbi_minor == minor) { + type = V4L2_BUF_TYPE_VBI_CAPTURE; + dev = h; + } + } + if (NULL == dev) { + DEB_S(("no such video device.\n")); + result = -ENODEV; + goto out; + } + + DEB_D(("using: %p\n",dev)); + + /* check if an extension is registered */ + if( NULL == dev->ext ) { + DEB_S(("no extension registered for this device.\n")); + result = -ENODEV; + goto out; + } + + /* allocate per open data */ + fh = kmalloc(sizeof(*fh),GFP_KERNEL); + if (NULL == fh) { + DEB_S(("cannot allocate memory for per open data.\n")); + result = -ENOMEM; + goto out; + } + memset(fh,0,sizeof(*fh)); + + // FIXME: do we need to increase *our* usage count? + + if( 0 == try_module_get(dev->ext->module)) { + result = -EINVAL; + goto out; + } + + file->private_data = fh; + fh->dev = dev; + fh->type = type; + + saa7146_video_uops.open(dev,fh); + if( 0 != BOARD_CAN_DO_VBI(dev) ) { + saa7146_vbi_uops.open(dev,fh); + } + + result = 0; +out: + if( fh != 0 && result != 0 ) { + kfree(fh); + } + up(&saa7146_devices_lock); + return result; +} + +static int fops_release(struct inode *inode, struct file *file) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + + DEB_EE(("inode:%p, file:%p\n",inode,file)); + + if (down_interruptible(&saa7146_devices_lock)) + return -ERESTARTSYS; + + saa7146_video_uops.release(dev,fh,file); + if( 0 != BOARD_CAN_DO_VBI(dev) ) { + saa7146_vbi_uops.release(dev,fh,file); + } + + module_put(dev->ext->module); + file->private_data = NULL; + kfree(fh); + + up(&saa7146_devices_lock); + + return 0; +} + +int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *arg); +static int fops_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ +/* + DEB_EE(("inode:%p, file:%p, cmd:%d, arg:%li\n",inode, file, cmd, arg)); +*/ + return video_usercopy(inode, file, cmd, arg, saa7146_video_do_ioctl); +} + +static int fops_mmap(struct file *file, struct vm_area_struct * vma) +{ + struct saa7146_fh *fh = file->private_data; + struct videobuf_queue *q; + + switch (fh->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, vma:%p\n",file, vma)); + q = &fh->video_q; + break; + } + case V4L2_BUF_TYPE_VBI_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VBI_CAPTURE: file:%p, vma:%p\n",file, vma)); + q = &fh->vbi_q; + break; + } + default: + BUG(); + return 0; + } + return videobuf_mmap_mapper(vma,q); +} + +static unsigned int fops_poll(struct file *file, struct poll_table_struct *wait) +{ + struct saa7146_fh *fh = file->private_data; + struct videobuf_buffer *buf = NULL; + struct videobuf_queue *q; + + DEB_EE(("file:%p, poll:%p\n",file, wait)); + + if (V4L2_BUF_TYPE_VBI_CAPTURE == fh->type) { + if( 0 == fh->vbi_q.streaming ) + return videobuf_poll_stream(file, &fh->vbi_q, wait); + q = &fh->vbi_q; + } else { + q = &fh->video_q; + } + + if (!list_empty(&q->stream)) + buf = list_entry(q->stream.next, struct videobuf_buffer, stream); + + if (!buf) { + return POLLERR; + } + + poll_wait(file, &buf->done, wait); + if (buf->state == STATE_DONE || buf->state == STATE_ERROR) { + return POLLIN|POLLRDNORM; + } + + return 0; +} + +static ssize_t fops_read(struct file *file, char *data, size_t count, loff_t *ppos) +{ + struct saa7146_fh *fh = file->private_data; + + switch (fh->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, data:%p, count:%d\n",file, data, count)); + return saa7146_video_uops.read(file,data,count,ppos); + } + case V4L2_BUF_TYPE_VBI_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VBI_CAPTURE: file:%p, data:%p, count:%d\n",file, data, count)); + return saa7146_vbi_uops.read(file,data,count,ppos); + } + break; + default: + BUG(); + return 0; + } +} + +static struct file_operations video_fops = +{ + .owner = THIS_MODULE, + .open = fops_open, + .release = fops_release, + .read = fops_read, + .poll = fops_poll, + .mmap = fops_mmap, + .ioctl = fops_ioctl, + .llseek = no_llseek, +}; + +void vv_callback(struct saa7146_dev *dev, unsigned long status) +{ + u32 isr = status; + + DEB_EE(("dev:%p, isr:0x%08x\n",dev,(u32)status)); + + if (0 != (isr & (MASK_27))) { + DEB_INT(("irq: RPS0 (0x%08x).\n",isr)); + saa7146_video_uops.irq_done(dev,isr); + } + + if (0 != (isr & (MASK_28))) { + u32 mc2 = saa7146_read(dev, MC2); + if( 0 != (mc2 & MASK_15)) { + DEB_INT(("irq: RPS1 vbi workaround (0x%08x).\n",isr)); + wake_up(&dev->vv_data->vbi_wq); + saa7146_write(dev,MC2, MASK_31); + return; + } + DEB_INT(("irq: RPS1 (0x%08x).\n",isr)); + saa7146_vbi_uops.irq_done(dev,isr); + } +} + +static struct video_device device_template = +{ + .hardware = VID_HARDWARE_SAA7146, + .fops = &video_fops, + .minor = -1, +}; + +int saa7146_vv_init(struct saa7146_dev* dev) +{ + struct saa7146_vv *vv = kmalloc (sizeof(struct saa7146_vv),GFP_KERNEL); + if( NULL == vv ) { + ERR(("out of memory. aborting.\n")); + return -1; + } + memset(vv, 0x0, sizeof(*vv)); + + DEB_EE(("dev:%p\n",dev)); + + vv->video_minor = -1; + vv->vbi_minor = -1; + + vv->clipping = (u32*)kmalloc(SAA7146_CLIPPING_MEM, GFP_KERNEL); + if( NULL == vv->clipping ) { + ERR(("out of memory. aborting.\n")); + kfree(vv); + return -1; + } + memset(vv->clipping, 0x0, SAA7146_CLIPPING_MEM); + + saa7146_video_uops.init(dev,vv); + saa7146_vbi_uops.init(dev,vv); + + dev->vv_data = vv; + dev->vv_callback = &vv_callback; + + return 0; +} + +int saa7146_vv_release(struct saa7146_dev* dev) +{ + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("dev:%p\n",dev)); + + kfree(vv); + dev->vv_data = NULL; + dev->vv_callback = NULL; + + return 0; +} + +int saa7146_register_device(struct video_device *vid, struct saa7146_dev* dev, char *name, int type) +{ + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("dev:%p, name:'%s'\n",dev,name)); + + *vid = device_template; + strncpy(vid->name, name, 32); + vid->priv = dev; + + // fixme: -1 should be an insmod parameter *for the extension* (like "video_nr"); + if (video_register_device(vid,type,-1) < 0) { + ERR(("cannot register vbi v4l2 device. skipping.\n")); + return -1; + } + + if( VFL_TYPE_GRABBER == type ) { + vv->video_minor = vid->minor; + INFO(("%s: registered device video%d [v4l2]\n", dev->name,vid->minor & 0x1f)); + } else { + vv->vbi_minor = vid->minor; + INFO(("%s: registered device vbi%d [v4l2]\n", dev->name,vid->minor & 0x1f)); + } + + return 0; +} + +int saa7146_unregister_device(struct video_device *vid, struct saa7146_dev* dev) +{ + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("dev:%p\n",dev)); + + if( VFL_TYPE_GRABBER == vid->type ) { + vv->video_minor = -1; + } else { + vv->vbi_minor = -1; + } + video_unregister_device(vid); + + return 0; +} + +static +int __init saa7146_vv_init_module(void) +{ + return 0; +} + + +static +void __exit saa7146_vv_cleanup_module(void) +{ +} + +module_init(saa7146_vv_init_module); +module_exit(saa7146_vv_cleanup_module); + +EXPORT_SYMBOL_GPL(saa7146_set_hps_source_and_sync); +EXPORT_SYMBOL_GPL(saa7146_register_device); +EXPORT_SYMBOL_GPL(saa7146_unregister_device); + +EXPORT_SYMBOL_GPL(saa7146_vv_init); +EXPORT_SYMBOL_GPL(saa7146_vv_release); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("video4linux driver for saa7146-based hardware"); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/common/saa7146_hlp.c b/drivers/media/common/saa7146_hlp.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_hlp.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,1043 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +#define my_min(type,x,y) \ + ({ type __x = (x), __y = (y); __x < __y ? __x: __y; }) +#define my_max(type,x,y) \ + ({ type __x = (x), __y = (y); __x > __y ? __x: __y; }) + +static +void calculate_output_format_register(struct saa7146_dev* saa, u32 palette, u32* clip_format) +{ + /* clear out the necessary bits */ + *clip_format &= 0x0000ffff; + /* set these bits new */ + *clip_format |= (( ((palette&0xf00)>>8) << 30) | ((palette&0x00f) << 24) | (((palette&0x0f0)>>4) << 16)); +} + +static +void calculate_bcs_ctrl_register(struct saa7146_dev *dev, int brightness, int contrast, int colour, u32 *bcs_ctrl) +{ + *bcs_ctrl = ((brightness << 24) | (contrast << 16) | (colour << 0)); +} + +static +void calculate_hps_source_and_sync(struct saa7146_dev *dev, int source, int sync, u32* hps_ctrl) +{ + *hps_ctrl &= ~(MASK_30 | MASK_31 | MASK_28); + *hps_ctrl |= (source << 30) | (sync << 28); +} + +static +void calculate_hxo_and_hyo(struct saa7146_vv *vv, u32* hps_h_scale, u32* hps_ctrl) +{ + int hyo = 0, hxo = 0; + + hyo = vv->standard->v_offset; + hxo = vv->standard->h_offset; + + *hps_h_scale &= ~(MASK_B0 | 0xf00); + *hps_h_scale |= (hxo << 0); + + *hps_ctrl &= ~(MASK_W0 | MASK_B2); + *hps_ctrl |= (hyo << 12); +} + +/* helper functions for the calculation of the horizontal- and vertical + scaling registers, clip-format-register etc ... + these functions take pointers to the (most-likely read-out + original-values) and manipulate them according to the requested + changes. +*/ + +/* hps_coeff used for CXY and CXUV; scale 1/1 -> scale 1/64 */ +static struct { + u16 hps_coeff; + u16 weight_sum; +} hps_h_coeff_tab [] = { + {0x00, 2}, {0x02, 4}, {0x00, 4}, {0x06, 8}, {0x02, 8}, + {0x08, 8}, {0x00, 8}, {0x1E, 16}, {0x0E, 8}, {0x26, 8}, + {0x06, 8}, {0x42, 8}, {0x02, 8}, {0x80, 8}, {0x00, 8}, + {0xFE, 16}, {0xFE, 8}, {0x7E, 8}, {0x7E, 8}, {0x3E, 8}, + {0x3E, 8}, {0x1E, 8}, {0x1E, 8}, {0x0E, 8}, {0x0E, 8}, + {0x06, 8}, {0x06, 8}, {0x02, 8}, {0x02, 8}, {0x00, 8}, + {0x00, 8}, {0xFE, 16}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, + {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, + {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, + {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0x7E, 8}, + {0x7E, 8}, {0x3E, 8}, {0x3E, 8}, {0x1E, 8}, {0x1E, 8}, + {0x0E, 8}, {0x0E, 8}, {0x06, 8}, {0x06, 8}, {0x02, 8}, + {0x02, 8}, {0x00, 8}, {0x00, 8}, {0xFE, 16} +}; + +/* table of attenuation values for horizontal scaling */ +u8 h_attenuation[] = { 1, 2, 4, 8, 2, 4, 8, 16, 0}; + +/* calculate horizontal scale registers */ +static +int calculate_h_scale_registers(struct saa7146_dev *dev, + int in_x, int out_x, int flip_lr, + u32* hps_ctrl, u32* hps_v_gain, u32* hps_h_prescale, u32* hps_h_scale) +{ + /* horizontal prescaler */ + u32 dcgx = 0, xpsc = 0, xacm = 0, cxy = 0, cxuv = 0; + /* horizontal scaler */ + u32 xim = 0, xp = 0, xsci =0; + /* vertical scale & gain */ + u32 pfuv = 0; + + /* helper variables */ + u32 h_atten = 0, i = 0; + + if ( 0 == out_x ) { + return -EINVAL; + } + + /* mask out vanity-bit */ + *hps_ctrl &= ~MASK_29; + + /* calculate prescale-(xspc)-value: [n .. 1/2) : 1 + [1/2 .. 1/3) : 2 + [1/3 .. 1/4) : 3 + ... */ + if (in_x > out_x) { + xpsc = in_x / out_x; + } + else { + /* zooming */ + xpsc = 1; + } + + /* if flip_lr-bit is set, number of pixels after + horizontal prescaling must be < 384 */ + if ( 0 != flip_lr ) { + + /* set vanity bit */ + *hps_ctrl |= MASK_29; + + while (in_x / xpsc >= 384 ) + xpsc++; + } + /* if zooming is wanted, number of pixels after + horizontal prescaling must be < 768 */ + else { + while ( in_x / xpsc >= 768 ) + xpsc++; + } + + /* maximum prescale is 64 (p.69) */ + if ( xpsc > 64 ) + xpsc = 64; + + /* keep xacm clear*/ + xacm = 0; + + /* set horizontal filter parameters (CXY = CXUV) */ + cxy = hps_h_coeff_tab[( (xpsc - 1) < 63 ? (xpsc - 1) : 63 )].hps_coeff; + cxuv = cxy; + + /* calculate and set horizontal fine scale (xsci) */ + + /* bypass the horizontal scaler ? */ + if ( (in_x == out_x) && ( 1 == xpsc ) ) + xsci = 0x400; + else + xsci = ( (1024 * in_x) / (out_x * xpsc) ) + xpsc; + + /* set start phase for horizontal fine scale (xp) to 0 */ + xp = 0; + + /* set xim, if we bypass the horizontal scaler */ + if ( 0x400 == xsci ) + xim = 1; + else + xim = 0; + + /* if the prescaler is bypassed, enable horizontal + accumulation mode (xacm) and clear dcgx */ + if( 1 == xpsc ) { + xacm = 1; + dcgx = 0; + } + else { + xacm = 0; + /* get best match in the table of attenuations + for horizontal scaling */ + h_atten = hps_h_coeff_tab[( (xpsc - 1) < 63 ? (xpsc - 1) : 63 )].weight_sum; + + for (i = 0; h_attenuation[i] != 0; i++) { + if (h_attenuation[i] >= h_atten) + break; + } + + dcgx = i; + } + + /* the horizontal scaling increment controls the UV filter + to reduce the bandwith to improve the display quality, + so set it ... */ + if ( xsci == 0x400) + pfuv = 0x00; + else if ( xsci < 0x600) + pfuv = 0x01; + else if ( xsci < 0x680) + pfuv = 0x11; + else if ( xsci < 0x700) + pfuv = 0x22; + else + pfuv = 0x33; + + + *hps_v_gain &= MASK_W0|MASK_B2; + *hps_v_gain |= (pfuv << 24); + + *hps_h_scale &= ~(MASK_W1 | 0xf000); + *hps_h_scale |= (xim << 31) | (xp << 24) | (xsci << 12); + + *hps_h_prescale |= (dcgx << 27) | ((xpsc-1) << 18) | (xacm << 17) | (cxy << 8) | (cxuv << 0); + + return 0; +} + +static struct { + u16 hps_coeff; + u16 weight_sum; +} hps_v_coeff_tab [] = { + {0x0100, 2}, {0x0102, 4}, {0x0300, 4}, {0x0106, 8}, {0x0502, 8}, + {0x0708, 8}, {0x0F00, 8}, {0x011E, 16}, {0x110E, 16}, {0x1926, 16}, + {0x3906, 16}, {0x3D42, 16}, {0x7D02, 16}, {0x7F80, 16}, {0xFF00, 16}, + {0x01FE, 32}, {0x01FE, 32}, {0x817E, 32}, {0x817E, 32}, {0xC13E, 32}, + {0xC13E, 32}, {0xE11E, 32}, {0xE11E, 32}, {0xF10E, 32}, {0xF10E, 32}, + {0xF906, 32}, {0xF906, 32}, {0xFD02, 32}, {0xFD02, 32}, {0xFF00, 32}, + {0xFF00, 32}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, + {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, + {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, + {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x817E, 64}, + {0x817E, 64}, {0xC13E, 64}, {0xC13E, 64}, {0xE11E, 64}, {0xE11E, 64}, + {0xF10E, 64}, {0xF10E, 64}, {0xF906, 64}, {0xF906, 64}, {0xFD02, 64}, + {0xFD02, 64}, {0xFF00, 64}, {0xFF00, 64}, {0x01FE, 128} +}; + +/* table of attenuation values for vertical scaling */ +u16 v_attenuation[] = { 2, 4, 8, 16, 32, 64, 128, 256, 0}; + +/* calculate vertical scale registers */ +static +int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field field, + int in_y, int out_y, u32* hps_v_scale, u32* hps_v_gain) +{ + int lpi = 0; + + /* vertical scaling */ + u32 yacm = 0, ysci = 0, yacl = 0, ypo = 0, ype = 0; + /* vertical scale & gain */ + u32 dcgy = 0, cya_cyb = 0; + + /* helper variables */ + u32 v_atten = 0, i = 0; + + /* error, if vertical zooming */ + if ( in_y < out_y ) { + return -EINVAL; + } + + /* linear phase interpolation may be used + if scaling is between 1 and 1/2 (both fields used) + or scaling is between 1/2 and 1/4 (if only one field is used) */ + + if (V4L2_FIELD_HAS_BOTH(field)) { + if( 2*out_y >= in_y) { + lpi = 1; + } + } else if (field == V4L2_FIELD_TOP || field == V4L2_FIELD_BOTTOM) { + if( 4*out_y >= in_y ) { + lpi = 1; + } + out_y *= 2; + } + if( 0 != lpi ) { + + yacm = 0; + yacl = 0; + cya_cyb = 0x00ff; + + /* calculate scaling increment */ + if ( in_y > out_y ) + ysci = ((1024 * in_y) / (out_y + 1)) - 1024; + else + ysci = 0; + + dcgy = 0; + + /* calculate ype and ypo */ + ype = ysci / 16; + ypo = ype + (ysci / 64); + + } + else { + yacm = 1; + + /* calculate scaling increment */ + ysci = (((10 * 1024 * (in_y - out_y - 1)) / in_y) + 9) / 10; + + /* calculate ype and ypo */ + ypo = ype = ((ysci + 15) / 16); + + /* the sequence length interval (yacl) has to be set according + to the prescale value, e.g. [n .. 1/2) : 0 + [1/2 .. 1/3) : 1 + [1/3 .. 1/4) : 2 + ... */ + if ( ysci < 512) { + yacl = 0; + } + else { + yacl = ( ysci / (1024 - ysci) ); + } + + /* get filter coefficients for cya, cyb from table hps_v_coeff_tab */ + cya_cyb = hps_v_coeff_tab[ (yacl < 63 ? yacl : 63 ) ].hps_coeff; + + /* get best match in the table of attenuations for vertical scaling */ + v_atten = hps_v_coeff_tab[ (yacl < 63 ? yacl : 63 ) ].weight_sum; + + for (i = 0; v_attenuation[i] != 0; i++) { + if (v_attenuation[i] >= v_atten) + break; + } + + dcgy = i; + } + + /* ypo and ype swapped in spec ? */ + *hps_v_scale |= (yacm << 31) | (ysci << 21) | (yacl << 15) | (ypo << 8 ) | (ype << 1); + + *hps_v_gain &= ~(MASK_W0|MASK_B2); + *hps_v_gain |= (dcgy << 16) | (cya_cyb << 0); + + return 0; +} + +/* simple bubble-sort algorithm with duplicate elimination */ +static +int sort_and_eliminate(u32* values, int* count) +{ + int low = 0, high = 0, top = 0, temp = 0; + int cur = 0, next = 0; + + /* sanity checks */ + if( (0 > *count) || (NULL == values) ) { + return -EINVAL; + } + + /* bubble sort the first ´count´ items of the array ´values´ */ + for( top = *count; top > 0; top--) { + for( low = 0, high = 1; high < top; low++, high++) { + if( values[low] > values[high] ) { + temp = values[low]; + values[low] = values[high]; + values[high] = temp; + } + } + } + + /* remove duplicate items */ + for( cur = 0, next = 1; next < *count; next++) { + if( values[cur] != values[next]) + values[++cur] = values[next]; + } + + *count = cur + 1; + + return 0; +} + +static +void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct saa7146_fh *fh, + struct saa7146_video_dma *vdma2, u32* clip_format, u32* arbtr_ctrl, enum v4l2_field field) +{ + struct saa7146_vv *vv = dev->vv_data; + u32 *clipping = vv->clipping; + + int width = fh->ov.win.w.width; + int height = fh->ov.win.w.height; + int clipcount = fh->ov.nclips; + + u32 line_list[32]; + u32 pixel_list[32]; + int numdwords = 0; + + int i = 0, j = 0; + int cnt_line = 0, cnt_pixel = 0; + + int x[32], y[32], w[32], h[32]; + + /* clear out memory */ + memset(&line_list[0], 0x00, sizeof(u32)*32); + memset(&pixel_list[0], 0x00, sizeof(u32)*32); + memset(clipping, 0x00, SAA7146_CLIPPING_MEM); + + /* fill the line and pixel-lists */ + for(i = 0; i < clipcount; i++) { + int l = 0, r = 0, t = 0, b = 0; + + x[i] = fh->ov.clips[i].c.left; + y[i] = fh->ov.clips[i].c.top; + w[i] = fh->ov.clips[i].c.width; + h[i] = fh->ov.clips[i].c.height; + + if( w[i] < 0) { + x[i] += w[i]; w[i] = -w[i]; + } + if( h[i] < 0) { + y[i] += h[i]; h[i] = -h[i]; + } + if( x[i] < 0) { + w[i] += x[i]; x[i] = 0; + } + if( y[i] < 0) { + h[i] += y[i]; y[i] = 0; + } + if( 0 != vv->vflip ) { + y[i] = height - y[i] - h[i]; + } + + l = x[i]; + r = x[i]+w[i]; + t = y[i]; + b = y[i]+h[i]; + + /* insert left/right coordinates */ + pixel_list[ 2*i ] = my_min(int, l, width); + pixel_list[(2*i)+1] = my_min(int, r, width); + /* insert top/bottom coordinates */ + line_list[ 2*i ] = my_min(int, t, height); + line_list[(2*i)+1] = my_min(int, b, height); + } + + /* sort and eliminate lists */ + cnt_line = cnt_pixel = 2*clipcount; + sort_and_eliminate( &pixel_list[0], &cnt_pixel ); + sort_and_eliminate( &line_list[0], &cnt_line ); + + /* calculate the number of used u32s */ + numdwords = my_max(int, (cnt_line+1), (cnt_pixel+1))*2; + numdwords = my_max(int, 4, numdwords); + numdwords = my_min(int, 64, numdwords); + + /* fill up cliptable */ + for(i = 0; i < cnt_pixel; i++) { + clipping[2*i] |= (pixel_list[i] << 16); + } + for(i = 0; i < cnt_line; i++) { + clipping[(2*i)+1] |= (line_list[i] << 16); + } + + /* fill up cliptable with the display infos */ + for(j = 0; j < clipcount; j++) { + + for(i = 0; i < cnt_pixel; i++) { + + if( x[j] < 0) + x[j] = 0; + + if( pixel_list[i] < (x[j] + w[j])) { + + if ( pixel_list[i] >= x[j] ) { + clipping[2*i] |= (1 << j); + } + } + } + for(i = 0; i < cnt_line; i++) { + + if( y[j] < 0) + y[j] = 0; + + if( line_list[i] < (y[j] + h[j]) ) { + + if( line_list[i] >= y[j] ) { + clipping[(2*i)+1] |= (1 << j); + } + } + } + } + + /* adjust arbitration control register */ + *arbtr_ctrl &= 0xffff00ff; + *arbtr_ctrl |= 0x00001c00; + + vdma2->base_even = virt_to_bus(clipping); + vdma2->base_odd = virt_to_bus(clipping); + vdma2->prot_addr = virt_to_bus(clipping)+((sizeof(u32))*(numdwords)); + vdma2->base_page = 0x04; + vdma2->pitch = 0x00; + vdma2->num_line_byte = (0 << 16 | (sizeof(u32))*(numdwords-1) ); + + /* set clipping-mode. this depends on the field(s) used */ + *clip_format &= 0xfffffff7; + if (V4L2_FIELD_HAS_BOTH(field)) { + *clip_format |= 0x00000008; + } else if (field == V4L2_FIELD_TOP) { + *clip_format |= 0x00000000; + } else if (field == V4L2_FIELD_BOTTOM) { + *clip_format |= 0x00000000; + } +} + +/* disable clipping */ +static +void saa7146_disable_clipping(struct saa7146_dev *dev) +{ + u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); + + /* mask out relevant bits (=lower word)*/ + clip_format &= MASK_W1; + + /* upload clipping-registers*/ + saa7146_write(dev, CLIP_FORMAT_CTRL,clip_format); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); + + /* disable video dma2 */ + saa7146_write(dev, MC1, (MASK_21)); +} + +static +void saa7146_set_clipping_rect(struct saa7146_dev *dev, struct saa7146_fh *fh) +{ + enum v4l2_field field = fh->ov.win.field; + int clipcount = fh->ov.nclips; + + struct saa7146_video_dma vdma2; + + u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); + u32 arbtr_ctrl = saa7146_read(dev, PCI_BT_V1); + + // fixme: is this used at all? SAA7146_CLIPPING_RECT_INVERTED; + u32 type = SAA7146_CLIPPING_RECT; + + /* check clipcount, disable clipping if clipcount == 0*/ + if( clipcount == 0 ) { + saa7146_disable_clipping(dev); + return; + } + + calculate_clipping_registers_rect(dev, fh, &vdma2, &clip_format, &arbtr_ctrl, field); + + /* set clipping format */ + clip_format &= 0xffff0008; + clip_format |= (type << 4); + + /* prepare video dma2 */ + saa7146_write(dev, BASE_EVEN2, vdma2.base_even); + saa7146_write(dev, BASE_ODD2, vdma2.base_odd); + saa7146_write(dev, PROT_ADDR2, vdma2.prot_addr); + saa7146_write(dev, BASE_PAGE2, vdma2.base_page); + saa7146_write(dev, PITCH2, vdma2.pitch); + saa7146_write(dev, NUM_LINE_BYTE2, vdma2.num_line_byte); + + /* prepare the rest */ + saa7146_write(dev, CLIP_FORMAT_CTRL,clip_format); + saa7146_write(dev, PCI_BT_V1, arbtr_ctrl); + + /* upload clip_control-register, clipping-registers, enable video dma2 */ + saa7146_write(dev, MC2, (MASK_05 | MASK_21 | MASK_03 | MASK_19)); + saa7146_write(dev, MC1, (MASK_05 | MASK_21)); +} + +static +void saa7146_set_window(struct saa7146_dev *dev, int width, int height, enum v4l2_field field) +{ + struct saa7146_vv *vv = dev->vv_data; + + int source = vv->current_hps_source; + int sync = vv->current_hps_sync; + + u32 hps_v_scale = 0, hps_v_gain = 0, hps_ctrl = 0, hps_h_prescale = 0, hps_h_scale = 0; + + /* set vertical scale */ + hps_v_scale = 0; /* all bits get set by the function-call */ + hps_v_gain = 0; /* fixme: saa7146_read(dev, HPS_V_GAIN);*/ + calculate_v_scale_registers(dev, field, vv->standard->v_calc, height, &hps_v_scale, &hps_v_gain); + + /* set horizontal scale */ + hps_ctrl = 0; + hps_h_prescale = 0; /* all bits get set in the function */ + hps_h_scale = 0; + calculate_h_scale_registers(dev, vv->standard->h_calc, width, vv->hflip, &hps_ctrl, &hps_v_gain, &hps_h_prescale, &hps_h_scale); + + /* set hyo and hxo */ + calculate_hxo_and_hyo(vv, &hps_h_scale, &hps_ctrl); + calculate_hps_source_and_sync(dev, source, sync, &hps_ctrl); + + /* write out new register contents */ + saa7146_write(dev, HPS_V_SCALE, hps_v_scale); + saa7146_write(dev, HPS_V_GAIN, hps_v_gain); + saa7146_write(dev, HPS_CTRL, hps_ctrl); + saa7146_write(dev, HPS_H_PRESCALE,hps_h_prescale); + saa7146_write(dev, HPS_H_SCALE, hps_h_scale); + + /* upload shadow-ram registers */ + saa7146_write(dev, MC2, (MASK_05 | MASK_06 | MASK_21 | MASK_22) ); +} + +/* calculate the new memory offsets for a desired position */ +static +void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int w_height, enum v4l2_field field) +{ + struct saa7146_vv *vv = dev->vv_data; + + int b_depth = vv->ov_fmt->depth; + int b_bpl = vv->ov_fb.fmt.bytesperline; + u32 base = (u32)vv->ov_fb.base; + + struct saa7146_video_dma vdma1; + + /* calculate memory offsets for picture, look if we shall top-down-flip */ + vdma1.pitch = 2*b_bpl; + if ( 0 == vv->vflip ) { + vdma1.base_even = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); + vdma1.base_odd = vdma1.base_even + (vdma1.pitch / 2); + vdma1.prot_addr = vdma1.base_even + (w_height * (vdma1.pitch / 2)); + } + else { + vdma1.base_even = (u32)base + ((w_y+w_height) * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); + vdma1.base_odd = vdma1.base_even - (vdma1.pitch / 2); + vdma1.prot_addr = vdma1.base_odd - (w_height * (vdma1.pitch / 2)); + } + + if (V4L2_FIELD_HAS_BOTH(field)) { + } else if (field == V4L2_FIELD_TOP) { + vdma1.base_odd = vdma1.prot_addr; + vdma1.pitch /= 2; + } else if (field == V4L2_FIELD_BOTTOM) { + vdma1.base_odd = vdma1.base_even; + vdma1.base_even = vdma1.prot_addr; + vdma1.pitch /= 2; + } + + if ( 0 != vv->vflip ) { + vdma1.pitch *= -1; + } + + vdma1.base_page = 0; + vdma1.num_line_byte = (vv->standard->v_field<<16)+vv->standard->h_pixels; + + saa7146_write_out_dma(dev, 1, &vdma1); +} + +static +void saa7146_set_output_format(struct saa7146_dev *dev, unsigned long palette) +{ + u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); + + /* call helper function */ + calculate_output_format_register(dev,palette,&clip_format); + + /* update the hps registers */ + saa7146_write(dev, CLIP_FORMAT_CTRL, clip_format); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); +} + +void saa7146_set_picture_prop(struct saa7146_dev *dev, int brightness, int contrast, int colour) +{ + u32 bcs_ctrl = 0; + + calculate_bcs_ctrl_register(dev, brightness, contrast, colour, &bcs_ctrl); + saa7146_write(dev, BCS_CTRL, bcs_ctrl); + + /* update the bcs register */ + saa7146_write(dev, MC2, (MASK_06 | MASK_22)); +} + + +/* select input-source */ +void saa7146_set_hps_source_and_sync(struct saa7146_dev *dev, int source, int sync) +{ + struct saa7146_vv *vv = dev->vv_data; + u32 hps_ctrl = 0; + + /* read old state */ + hps_ctrl = saa7146_read(dev, HPS_CTRL); + + hps_ctrl &= ~( MASK_31 | MASK_30 | MASK_28 ); + hps_ctrl |= (source << 30) | (sync << 28); + + /* write back & upload register */ + saa7146_write(dev, HPS_CTRL, hps_ctrl); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); + + vv->current_hps_source = source; + vv->current_hps_sync = sync; +} + +/* write "data" to the gpio-pin "pin" */ +void saa7146_set_gpio(struct saa7146_dev *dev, u8 pin, u8 data) +{ + u32 value = 0; + + /* sanity check */ + if(pin > 3) + return; + + /* read old register contents */ + value = saa7146_read(dev, GPIO_CTRL ); + + value &= ~(0xff << (8*pin)); + value |= (data << (8*pin)); + + saa7146_write(dev, GPIO_CTRL, value); +} + +/* reprogram hps, enable(1) / disable(0) video */ +void saa7146_set_overlay(struct saa7146_dev *dev, struct saa7146_fh *fh, int v) +{ + struct saa7146_vv *vv = dev->vv_data; + + /* enable ? */ + if( 0 == v) { + /* disable video dma1 */ + saa7146_write(dev, MC1, MASK_22); + return; + } + + saa7146_set_window(dev, fh->ov.win.w.width, fh->ov.win.w.height, fh->ov.win.field); + saa7146_set_position(dev, fh->ov.win.w.left, fh->ov.win.w.top, fh->ov.win.w.height, fh->ov.win.field); + saa7146_set_output_format(dev, vv->ov_fmt->trans); + saa7146_set_clipping_rect(dev, fh); + + /* enable video dma1 */ + saa7146_write(dev, MC1, (MASK_06 | MASK_22)); +} + +void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) +{ + int where = 0; + + if( which < 1 || which > 3) { + return; + } + + /* calculate starting address */ + where = (which-1)*0x18; + + if( 0 != (dev->ext->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) { + saa7146_write(dev, where, vdma->base_even); + saa7146_write(dev, where+0x04, vdma->base_odd); + } else { + saa7146_write(dev, where, vdma->base_odd); + saa7146_write(dev, where+0x04, vdma->base_even); + } + saa7146_write(dev, where+0x08, vdma->prot_addr); + saa7146_write(dev, where+0x0c, vdma->pitch); + saa7146_write(dev, where+0x10, vdma->base_page); + saa7146_write(dev, where+0x14, vdma->num_line_byte); + + /* upload */ + saa7146_write(dev, MC2, (MASK_02<<(which-1))|(MASK_18<<(which-1))); +/* + printk("vdma%d.base_even: 0x%08x\n", which,vdma->base_even); + printk("vdma%d.base_odd: 0x%08x\n", which,vdma->base_odd); + printk("vdma%d.prot_addr: 0x%08x\n", which,vdma->prot_addr); + printk("vdma%d.base_page: 0x%08x\n", which,vdma->base_page); + printk("vdma%d.pitch: 0x%08x\n", which,vdma->pitch); + printk("vdma%d.num_line_byte: 0x%08x\n", which,vdma->num_line_byte); +*/ +} +static +int calculate_video_dma_grab_packed(struct saa7146_dev* dev, struct saa7146_buf *buf) +{ + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_video_dma vdma1; + + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + int width = buf->fmt->width; + int height = buf->fmt->height; + enum v4l2_field field = buf->fmt->field; + + int depth = sfmt->depth; + + DEB_CAP(("[size=%dx%d,fields=%s]\n", + width,height,v4l2_field_names[field])); + + vdma1.pitch = (width*depth*2)/8; + vdma1.num_line_byte = ((vv->standard->v_field<<16) + vv->standard->h_pixels); + vdma1.base_page = buf->pt[0].dma | ME1; + + if( 0 != vv->vflip ) { + vdma1.prot_addr = buf->pt[0].offset; + vdma1.base_even = buf->pt[0].offset+(vdma1.pitch/2)*height; + vdma1.base_odd = vdma1.base_even - (vdma1.pitch/2); + } else { + vdma1.base_even = buf->pt[0].offset; + vdma1.base_odd = vdma1.base_even + (vdma1.pitch/2); + vdma1.prot_addr = buf->pt[0].offset+(vdma1.pitch/2)*height; + } + + if (V4L2_FIELD_HAS_BOTH(field)) { + } else if (field == V4L2_FIELD_TOP) { + vdma1.base_odd = vdma1.prot_addr; + vdma1.pitch /= 2; + } else if (field == V4L2_FIELD_BOTTOM) { + vdma1.base_odd = vdma1.base_even; + vdma1.base_even = vdma1.prot_addr; + vdma1.pitch /= 2; + } + + if( 0 != vv->vflip ) { + vdma1.pitch *= -1; + } + + saa7146_write_out_dma(dev, 1, &vdma1); + return 0; +} + +static +int calc_planar_422(struct saa7146_vv *vv, struct saa7146_buf *buf, struct saa7146_video_dma *vdma2, struct saa7146_video_dma *vdma3) +{ + int height = buf->fmt->height; + int width = buf->fmt->width; + + vdma2->pitch = width; + vdma3->pitch = width; + + if( 0 != vv->vflip ) { + vdma2->prot_addr = buf->pt[1].offset; + vdma2->base_even = ((vdma2->pitch/2)*height)+buf->pt[1].offset; + vdma2->base_odd = vdma2->base_even - (vdma2->pitch/2); + + vdma3->prot_addr = buf->pt[2].offset; + vdma3->base_even = ((vdma3->pitch/2)*height)+buf->pt[2].offset; + vdma3->base_odd = vdma3->base_even - (vdma3->pitch/2); + + } else { + vdma3->base_even = buf->pt[2].offset; + vdma3->base_odd = vdma3->base_even + (vdma3->pitch/2); + vdma3->prot_addr = (vdma3->pitch/2)*height+buf->pt[2].offset; + + vdma2->base_even = buf->pt[1].offset; + vdma2->base_odd = vdma2->base_even + (vdma2->pitch/2); + vdma2->prot_addr = (vdma2->pitch/2)*height+buf->pt[1].offset; + } + + return 0; +} + +static +int calc_planar_420(struct saa7146_vv *vv, struct saa7146_buf *buf, struct saa7146_video_dma *vdma2, struct saa7146_video_dma *vdma3) +{ + int height = buf->fmt->height; + int width = buf->fmt->width; + + vdma2->pitch = width/2; + vdma3->pitch = width/2; + + if( 0 != vv->vflip ) { + vdma2->prot_addr = buf->pt[2].offset; + vdma2->base_even = ((vdma2->pitch/2)*height)+buf->pt[2].offset; + vdma2->base_odd = vdma2->base_even - (vdma2->pitch/2); + + vdma3->prot_addr = buf->pt[1].offset; + vdma3->base_even = ((vdma3->pitch/2)*height)+buf->pt[1].offset; + vdma3->base_odd = vdma3->base_even - (vdma3->pitch/2); + + } else { + vdma3->base_even = buf->pt[2].offset; + vdma3->base_odd = vdma3->base_even + (vdma3->pitch); + vdma3->prot_addr = (vdma3->pitch/2)*height+buf->pt[2].offset; + + vdma2->base_even = buf->pt[1].offset; + vdma2->base_odd = vdma2->base_even + (vdma2->pitch); + vdma2->prot_addr = (vdma2->pitch/2)*height+buf->pt[1].offset; + } + return 0; +} + + +static +int calculate_video_dma_grab_planar(struct saa7146_dev* dev, struct saa7146_buf *buf) +{ + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_video_dma vdma1; + struct saa7146_video_dma vdma2; + struct saa7146_video_dma vdma3; + + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + int width = buf->fmt->width; + int height = buf->fmt->height; + enum v4l2_field field = buf->fmt->field; + + BUG_ON(0 == buf->pt[0].dma); + BUG_ON(0 == buf->pt[1].dma); + BUG_ON(0 == buf->pt[2].dma); + + DEB_CAP(("[size=%dx%d,fields=%s]\n", + width,height,v4l2_field_names[field])); + + /* fixme: what happens for user space buffers here?. The offsets are + most likely wrong, this version here only works for page-aligned + buffers, modifications to the pagetable-functions are necessary...*/ + + vdma1.pitch = width*2; + vdma1.num_line_byte = ((vv->standard->v_field<<16) + vv->standard->h_pixels); + vdma1.base_page = buf->pt[0].dma | ME1; + + if( 0 != vv->vflip ) { + vdma1.prot_addr = buf->pt[0].offset; + vdma1.base_even = ((vdma1.pitch/2)*height)+buf->pt[0].offset; + vdma1.base_odd = vdma1.base_even - (vdma1.pitch/2); + } else { + vdma1.base_even = buf->pt[0].offset; + vdma1.base_odd = vdma1.base_even + (vdma1.pitch/2); + vdma1.prot_addr = (vdma1.pitch/2)*height+buf->pt[0].offset; + } + + vdma2.num_line_byte = 0; /* unused */ + vdma2.base_page = buf->pt[1].dma | ME1; + + vdma3.num_line_byte = 0; /* unused */ + vdma3.base_page = buf->pt[2].dma | ME1; + + switch( sfmt->depth ) { + case 12: { + calc_planar_420(vv,buf,&vdma2,&vdma3); + break; + } + case 16: { + calc_planar_422(vv,buf,&vdma2,&vdma3); + break; + } + default: { + return -1; + } + } + + if (V4L2_FIELD_HAS_BOTH(field)) { + } else if (field == V4L2_FIELD_TOP) { + vdma1.base_odd = vdma1.prot_addr; + vdma1.pitch /= 2; + vdma2.base_odd = vdma2.prot_addr; + vdma2.pitch /= 2; + vdma3.base_odd = vdma3.prot_addr; + vdma3.pitch /= 2; + } else if (field == V4L2_FIELD_BOTTOM) { + vdma1.base_odd = vdma1.base_even; + vdma1.base_even = vdma1.prot_addr; + vdma1.pitch /= 2; + vdma2.base_odd = vdma2.base_even; + vdma2.base_even = vdma2.prot_addr; + vdma2.pitch /= 2; + vdma3.base_odd = vdma3.base_even; + vdma3.base_even = vdma3.prot_addr; + vdma3.pitch /= 2; + } + + if( 0 != vv->vflip ) { + vdma1.pitch *= -1; + vdma2.pitch *= -1; + vdma3.pitch *= -1; + } + + saa7146_write_out_dma(dev, 1, &vdma1); + if( sfmt->swap != 0 ) { + saa7146_write_out_dma(dev, 3, &vdma2); + saa7146_write_out_dma(dev, 2, &vdma3); + } else { + saa7146_write_out_dma(dev, 2, &vdma2); + saa7146_write_out_dma(dev, 3, &vdma3); + } + return 0; +} + +static +void program_capture_engine(struct saa7146_dev *dev, int planar) +{ + struct saa7146_vv *vv = dev->vv_data; + int count = 0; + + unsigned long e_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_E_FID_A : CMD_E_FID_B; + unsigned long o_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_O_FID_A : CMD_O_FID_B; + + /* write beginning of rps-program */ + count = 0; + + /* wait for o_fid_a/b / e_fid_a/b toggle only if bit 0 is not set*/ + dev->rps0[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait; + dev->rps0[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG0 | o_wait; + + /* set bit 0 */ + dev->rps0[ count++ ] = CMD_WR_REG | (1 << 8) | (MC2/4); + dev->rps0[ count++ ] = MASK_27 | MASK_11; + + /* turn on video-dma1 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_06 | MASK_22; /* => mask */ + dev->rps0[ count++ ] = MASK_06 | MASK_22; /* => values */ + if( 0 != planar ) { + /* turn on video-dma2 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_05 | MASK_21; /* => mask */ + dev->rps0[ count++ ] = MASK_05 | MASK_21; /* => values */ + + /* turn on video-dma3 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_04 | MASK_20; /* => mask */ + dev->rps0[ count++ ] = MASK_04 | MASK_20; /* => values */ + } + + /* wait for o_fid_a/b / e_fid_a/b toggle */ + dev->rps0[ count++ ] = CMD_PAUSE | e_wait; + dev->rps0[ count++ ] = CMD_PAUSE | o_wait; + + /* turn off video-dma1 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_22 | MASK_06; /* => mask */ + dev->rps0[ count++ ] = MASK_22; /* => values */ + if( 0 != planar ) { + /* turn off video-dma2 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_05 | MASK_21; /* => mask */ + dev->rps0[ count++ ] = MASK_21; /* => values */ + + /* turn off video-dma3 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_04 | MASK_20; /* => mask */ + dev->rps0[ count++ ] = MASK_20; /* => values */ + } + + /* generate interrupt */ + dev->rps0[ count++ ] = CMD_INTERRUPT; + + /* stop */ + dev->rps0[ count++ ] = CMD_STOP; +} + +void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next) +{ + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + DEB_CAP(("buf:%p, next:%p\n",buf,next)); + + saa7146_set_window(dev, buf->fmt->width, buf->fmt->height, buf->fmt->field); + saa7146_set_output_format(dev, sfmt->trans); + saa7146_disable_clipping(dev); + + if( 0 != IS_PLANAR(sfmt->trans)) { + calculate_video_dma_grab_planar(dev, buf); + program_capture_engine(dev,1); + } else { + calculate_video_dma_grab_packed(dev, buf); + program_capture_engine(dev,0); + } + + /* write the address of the rps-program */ + saa7146_write(dev, RPS_ADDR0, virt_to_bus(&dev->rps0[ 0])); + + /* turn on rps */ + saa7146_write(dev, MC1, (MASK_12 | MASK_28)); +} + diff -Nru a/drivers/media/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_i2c.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,424 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +/* helper function */ +static +void my_wait(struct saa7146_dev *dev, long ms) +{ + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout((((ms+10)/10)*HZ)/1000); +} + +u32 saa7146_i2c_func(struct i2c_adapter *adapter) +{ +//fm DEB_I2C(("'%s'.\n", adapter->name)); + + return I2C_FUNC_I2C + | I2C_FUNC_SMBUS_QUICK + | I2C_FUNC_SMBUS_READ_BYTE | I2C_FUNC_SMBUS_WRITE_BYTE + | I2C_FUNC_SMBUS_READ_BYTE_DATA | I2C_FUNC_SMBUS_WRITE_BYTE_DATA; +} + +/* this function returns the status-register of our i2c-device */ +static inline +u32 saa7146_i2c_status(struct saa7146_dev *dev) +{ + u32 iicsta = saa7146_read(dev, I2C_STATUS); +/* + DEB_I2C(("status: 0x%08x\n",iicsta)); +*/ + return iicsta; +} + +/* this function runs through the i2c-messages and prepares the data to be + sent through the saa7146. have a look at the specifications p. 122 ff + to understand this. it returns the number of u32s to send, or -1 + in case of an error. */ +static +int saa7146_i2c_msg_prepare(const struct i2c_msg m[], int num, u32 *op) +{ + int h1, h2; + int i, j, addr; + int mem = 0, op_count = 0; + + /* first determine size of needed memory */ + for(i = 0; i < num; i++) { + mem += m[i].len + 1; + } + + /* worst case: we need one u32 for three bytes to be send + plus one extra byte to address the device */ + mem = 1 + ((mem-1) / 3); + + /* we assume that op points to a memory of at least SAA7146_I2C_MEM bytes + size. if we exceed this limit... */ + if ( (4*mem) > SAA7146_I2C_MEM ) { +//fm DEB_I2C(("cannot prepare i2c-message.\n")); + return -ENOMEM; + } + + /* be careful: clear out the i2c-mem first */ + memset(op,0,sizeof(u32)*mem); + + /* loop through all messages */ + for(i = 0; i < num; i++) { + + /* insert the address of the i2c-slave. + note: we get 7 bit i2c-addresses, + so we have to perform a translation */ + addr = (m[i].addr*2) + ( (0 != (m[i].flags & I2C_M_RD)) ? 1 : 0); + h1 = op_count/3; h2 = op_count%3; + op[h1] |= ( (u8)addr << ((3-h2)*8)); + op[h1] |= (SAA7146_I2C_START << ((3-h2)*2)); + op_count++; + + /* loop through all bytes of message i */ + for(j = 0; j < m[i].len; j++) { + /* insert the data bytes */ + h1 = op_count/3; h2 = op_count%3; + op[h1] |= ( (u32)((u8)m[i].buf[j]) << ((3-h2)*8)); + op[h1] |= ( SAA7146_I2C_CONT << ((3-h2)*2)); + op_count++; + } + + } + + /* have a look at the last byte inserted: + if it was: ...CONT change it to ...STOP */ + h1 = (op_count-1)/3; h2 = (op_count-1)%3; + if ( SAA7146_I2C_CONT == (0x3 & (op[h1] >> ((3-h2)*2))) ) { + op[h1] &= ~(0x2 << ((3-h2)*2)); + op[h1] |= (SAA7146_I2C_STOP << ((3-h2)*2)); + } + + /* return the number of u32s to send */ + return mem; +} + +/* this functions loops through all i2c-messages. normally, it should determine + which bytes were read through the adapter and write them back to the corresponding + i2c-message. but instead, we simply write back all bytes. + fixme: this could be improved. */ +static +int saa7146_i2c_msg_cleanup(const struct i2c_msg m[], int num, u32 *op) +{ + int i, j; + int op_count = 0; + + /* loop through all messages */ + for(i = 0; i < num; i++) { + + op_count++; + + /* loop throgh all bytes of message i */ + for(j = 0; j < m[i].len; j++) { + /* write back all bytes that could have been read */ + m[i].buf[j] = (op[op_count/3] >> ((3-(op_count%3))*8)); + op_count++; + } + } + + return 0; +} + +/* this functions resets the i2c-device and returns 0 if everything was fine, otherwise -1 */ +static +int saa7146_i2c_reset(struct saa7146_dev *dev) +{ + /* get current status */ + u32 status = saa7146_i2c_status(dev); + + /* clear registers for sure */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, I2C_TRANSFER, 0); + + /* check if any operation is still in progress */ + if ( 0 != ( status & SAA7146_I2C_BUSY) ) { + + /* yes, kill ongoing operation */ + DEB_I2C(("busy_state detected.\n")); + + /* set "ABORT-OPERATION"-bit (bit 7)*/ + saa7146_write(dev, I2C_STATUS, (dev->i2c_bitrate | MASK_07)); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + + /* clear all error-bits pending; this is needed because p.123, note 1 */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + } + + /* check if any error is (still) present. (this can be necessary because p.123, note 1) */ + status = saa7146_i2c_status(dev); + + if ( dev->i2c_bitrate != status ) { + + DEB_I2C(("error_state detected. status:0x%08x\n",status)); + + /* Repeat the abort operation. This seems to be necessary + after serious protocol errors caused by e.g. the SAA7740 */ + saa7146_write(dev, I2C_STATUS, (dev->i2c_bitrate | MASK_07)); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + + /* clear all error-bits pending */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + + /* the data sheet says it might be necessary to clear the status + twice after an abort */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + } + + /* if any error is still present, a fatal error has occured ... */ + status = saa7146_i2c_status(dev); + if ( dev->i2c_bitrate != status ) { + DEB_I2C(("fatal error. status:0x%08x\n",status)); + return -1; + } + + return 0; +} + +/* this functions writes out the data-byte 'dword' to the i2c-device. + it returns 0 if ok, -1 if the transfer failed, -2 if the transfer + failed badly (e.g. address error) */ +static +int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword) +{ + u32 status = 0, mc2 = 0; + int timeout; + + /* write out i2c-command */ + DEB_I2C(("before: 0x%08x (status: 0x%08x), %d\n",*dword,saa7146_read(dev, I2C_STATUS), dev->i2c_op)); + + if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) { + + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, I2C_TRANSFER, *dword); + + dev->i2c_op = 1; + IER_ENABLE(dev, MASK_16|MASK_17); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + + wait_event_interruptible(dev->i2c_wq, dev->i2c_op == 0); + if (signal_pending (current)) { + /* a signal arrived */ + return -ERESTARTSYS; + } + status = saa7146_read(dev, I2C_STATUS); + } else { + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, I2C_TRANSFER, *dword); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + + /* do not poll for i2c-status before upload is complete */ + timeout = jiffies + HZ/100 + 1; /* 10ms */ + while(1) { + mc2 = (saa7146_read(dev, MC2) & 0x1); + if( 0 != mc2 ) { + break; + } + if (jiffies > timeout) { + printk(KERN_WARNING "saa7146_i2c_writeout: timed out waiting for MC2\n"); + return -EIO; + } + } + /* wait until we get a transfer done or error */ + timeout = jiffies + HZ/100 + 1; /* 10ms */ + while(1) { + status = saa7146_i2c_status(dev); + if( (0x3 == (status & 0x3)) || (0 == (status & 0x1)) ) { + break; + } + if (jiffies > timeout) { + /* this is normal when probing the bus + * (no answer from nonexisistant device...) + */ + DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n")); + return -EIO; + } + my_wait(dev,1); + } + } + + /* give a detailed status report */ + if ( 0 != (status & SAA7146_I2C_ERR)) { + + if( 0 != (status & SAA7146_I2C_SPERR) ) { + DEB_I2C(("error due to invalid start/stop condition.\n")); + } + if( 0 != (status & SAA7146_I2C_DTERR) ) { + DEB_I2C(("error in data transmission.\n")); + } + if( 0 != (status & SAA7146_I2C_DRERR) ) { + DEB_I2C(("error when receiving data.\n")); + } + if( 0 != (status & SAA7146_I2C_AL) ) { + DEB_I2C(("error because arbitration lost.\n")); + } + + /* we handle address-errors here */ + if( 0 != (status & SAA7146_I2C_APERR) ) { + DEB_I2C(("error in address phase.\n")); + return -EREMOTEIO; + } + + return -EIO; + } + + /* read back data, just in case we were reading ... */ + *dword = saa7146_read(dev, I2C_TRANSFER); + + DEB_I2C(("after: 0x%08x\n",*dword)); + return 0; +} + +int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg msgs[], int num, int retries) +{ + int i = 0, count = 0; + u32* buffer = dev->i2c_mem; + int err = 0; + int address_err = 0; + + if (down_interruptible (&dev->i2c_lock)) + return -ERESTARTSYS; + + for(i=0;i count ) { + err = -1; + goto out; + } + + do { + /* reset the i2c-device if necessary */ + err = saa7146_i2c_reset(dev); + if ( 0 > err ) { + DEB_I2C(("could not reset i2c-device.\n")); + goto out; + } + + /* write out the u32s one after another */ + for(i = 0; i < count; i++) { + err = saa7146_i2c_writeout(dev, &buffer[i] ); + if ( 0 != err) { + /* this one is unsatisfying: some i2c slaves on some + dvb cards don't acknowledge correctly, so the saa7146 + thinks that an address error occured. in that case, the + transaction should be retrying, even if an address error + occured. analog saa7146 based cards extensively rely on + i2c address probing, however, and address errors indicate that a + device is really *not* there. retrying in that case + increases the time the device needs to probe greatly, so + it should be avoided. because of the fact, that only + analog based cards use irq based i2c transactions (for dvb + cards, this screwes up other interrupt sources), we bail out + completely for analog cards after an address error and trust + the saa7146 address error detection. */ + if ( -EREMOTEIO == err ) { + if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) { + goto out; + } + address_err++; + } + DEB_I2C(("error while sending message(s). starting again.\n")); + break; + } + } + if( 0 == err ) { + err = num; + break; + } + + /* delay a bit before retrying */ + my_wait(dev, 10); + + } while (err != num && retries--); + + /* if every retry had an address error, exit right away */ + if (address_err == retries) { + goto out; + } + + /* if any things had to be read, get the results */ + if ( 0 != saa7146_i2c_msg_cleanup(msgs, num, buffer)) { + DEB_I2C(("could not cleanup i2c-message.\n")); + err = -1; + goto out; + } + + /* return the number of delivered messages */ + DEB_I2C(("transmission successful. (msg:%d).\n",err)); +out: + /* another bug in revision 0: the i2c-registers get uploaded randomly by other + uploads, so we better clear them out before continueing */ + if( 0 == dev->revision ) { + u32 zero = 0; + saa7146_i2c_reset(dev); + if( 0 != saa7146_i2c_writeout(dev, &zero)) { + INFO(("revision 0 error. this should never happen.\n")); + } + } + + up(&dev->i2c_lock); + return err; +} + +/* utility functions */ +static +int saa7146_i2c_xfer(struct i2c_adapter* adapter, struct i2c_msg msg[], int num) +{ + struct saa7146_dev* dev = i2c_get_adapdata(adapter); + + DEB_I2C(("adapter: '%s'.\n", adapter->dev.name)); + + /* use helper function to transfer data */ + return saa7146_i2c_transfer(dev, msg, num, adapter->retries); +} + + +/*****************************************************************************/ +/* i2c-adapter helper functions */ +#include + +/* exported algorithm data */ +static +struct i2c_algorithm saa7146_algo = { + .name = "saa7146 i2c algorithm", + .id = I2C_ALGO_SAA7146, + .master_xfer = saa7146_i2c_xfer, + .functionality = saa7146_i2c_func, +}; + +int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate) +{ + DEB_EE(("bitrate: 0x%08x\n",bitrate)); + + dev->i2c_bitrate = bitrate; + saa7146_i2c_reset(dev); + + if( NULL != i2c_adapter ) { + memset(i2c_adapter,0,sizeof(struct i2c_adapter)); + strcpy(i2c_adapter->dev.name, dev->name); + i2c_set_adapdata(i2c_adapter,dev); + i2c_adapter->algo = &saa7146_algo; + i2c_adapter->algo_data = NULL; + i2c_adapter->id = I2C_ALGO_SAA7146; + i2c_adapter->timeout = SAA7146_I2C_TIMEOUT; + i2c_adapter->retries = SAA7146_I2C_RETRIES; + } + + return 0; +} diff -Nru a/drivers/media/common/saa7146_vbi.c b/drivers/media/common/saa7146_vbi.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_vbi.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,468 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +static int vbi_pixel_to_capture = 720 * 2; + +static +int vbi_workaround(struct saa7146_dev *dev) +{ + struct saa7146_vv *vv = dev->vv_data; + + u32 *cpu; + dma_addr_t dma_addr; + + int i, index; + + DECLARE_WAITQUEUE(wait, current); + + DEB_VBI(("dev:%p\n",dev)); + + /* once again, a bug in the saa7146: the brs acquisition + is buggy and especially the BXO-counter does not work + as specified. there is this workaround, but please + don't let me explain it. ;-) */ + + cpu = pci_alloc_consistent(dev->pci, 4096, &dma_addr); + if (NULL == cpu) + return -ENOMEM; + + /* setup some basic programming, just for the workaround */ + saa7146_write(dev, BASE_EVEN3, dma_addr); + saa7146_write(dev, BASE_ODD3, dma_addr+vbi_pixel_to_capture); + saa7146_write(dev, PROT_ADDR3, dma_addr+4096); + saa7146_write(dev, PITCH3, vbi_pixel_to_capture); + saa7146_write(dev, BASE_PAGE3, 0x0); + saa7146_write(dev, NUM_LINE_BYTE3, (2<<16)|((vbi_pixel_to_capture)<<0)); + saa7146_write(dev, MC2, MASK_04|MASK_20); + + + /* we have to do the workaround two times to be sure that + everything is ok */ + for(i = 0; i < 2; i++) { + + /* indicate to the irq handler that we do the workaround */ + saa7146_write(dev, MC2, MASK_31|MASK_15); + + saa7146_write(dev, NUM_LINE_BYTE3, (1<<16)|(2<<0)); + saa7146_write(dev, MC2, MASK_04|MASK_20); + + index = 0; + + /* load brs-control register */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (BRS_CTRL/4); + /* BXO = 1h, BRS to outbound */ + dev->rps1[index++]=0xc000008c; + /* wait for vbi_a */ + dev->rps1[index++] = CMD_PAUSE | MASK_10; + /* upload brs */ + dev->rps1[index++] = CMD_UPLOAD | MASK_08; + /* load brs-control register */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (BRS_CTRL/4); + /* BYO = 1, BXO = NQBIL (=1728 for PAL, for NTSC this is 858*2) - NumByte3 (=1440) = 288 */ + dev->rps1[index++] = ((1728-(vbi_pixel_to_capture)) << 7) | MASK_19; + /* wait for brs_done */ + dev->rps1[index++] = CMD_PAUSE | MASK_08; + /* upload brs */ + dev->rps1[index++] = CMD_UPLOAD | MASK_08; + /* load video-dma3 NumLines3 and NumBytes3 */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (NUM_LINE_BYTE3/4); + /* dev->vbi_count*2 lines, 720 pixel (= 1440 Bytes) */ + dev->rps1[index++]= (2 << 16) | (vbi_pixel_to_capture); + /* load brs-control register */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (BRS_CTRL/4); + /* Set BRS right: note: this is an experimental value for BXO (=> PAL!) */ + dev->rps1[index++] = (540 << 7) | (5 << 19); // 5 == vbi_start + /* wait for brs_done */ + dev->rps1[index++] = CMD_PAUSE | MASK_08; + /* upload brs and video-dma3*/ + dev->rps1[index++] = CMD_UPLOAD | MASK_08 | MASK_04; + /* load mc2 register: enable dma3 */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (MC1/4); + dev->rps1[index++] = MASK_20 | MASK_04; + /* generate interrupt */ + dev->rps1[index++] = CMD_INTERRUPT; + /* stop rps1 */ + dev->rps1[index++] = CMD_STOP; + + /* enable rps1 irqs */ + IER_ENABLE(dev,MASK_28); + + /* prepare to wait to be woken up by the irq-handler */ + add_wait_queue(&vv->vbi_wq, &wait); + current->state = TASK_INTERRUPTIBLE; + + /* start rps1 to enable workaround */ + saa7146_write(dev, RPS_ADDR1, virt_to_bus(&dev->rps1[ 0])); + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); + + schedule(); + + DEB_VBI(("brs bug workaround %d/1.\n",i)); + + remove_wait_queue(&vv->vbi_wq, &wait); + current->state = TASK_RUNNING; + + /* disable rps1 irqs */ + IER_DISABLE(dev,MASK_28); + + /* stop video-dma3 */ + saa7146_write(dev, MC1, MASK_20); + + if(signal_pending(current)) { + + DEB_VBI(("aborted.\n")); + + /* stop rps1 for sure */ + saa7146_write(dev, MC1, MASK_29); + + pci_free_consistent(dev->pci, 4096, cpu, dma_addr); + return -EINTR; + } + } + + pci_free_consistent(dev->pci, 4096, cpu, dma_addr); + return 0; +} + +void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next) +{ + struct saa7146_vv *vv = dev->vv_data; + + struct saa7146_video_dma vdma3; + + int count = 0; + unsigned long e_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_E_FID_A : CMD_E_FID_B; + unsigned long o_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_O_FID_A : CMD_O_FID_B; + +/* + vdma3.base_even = (u32)dev->ov_fb.base+2048*70; + vdma3.base_odd = (u32)dev->ov_fb.base; + vdma3.prot_addr = (u32)dev->ov_fb.base+2048*164; + vdma3.pitch = 2048; + vdma3.base_page = 0; + vdma3.num_line_byte = (64<<16)|((vbi_pixel_to_capture)<<0); // set above! +*/ + vdma3.base_even = buf->pt[2].offset; + vdma3.base_odd = buf->pt[2].offset + 16 * vbi_pixel_to_capture; + vdma3.prot_addr = buf->pt[2].offset + 16 * 2 * vbi_pixel_to_capture; + vdma3.pitch = vbi_pixel_to_capture; + vdma3.base_page = buf->pt[2].dma | ME1; + vdma3.num_line_byte = (16 << 16) | vbi_pixel_to_capture; + saa7146_write_out_dma(dev, 3, &vdma3); + + /* write beginning of rps-program */ + count = 0; + + /* wait for o_fid_a/b / e_fid_a/b toggle only if bit 1 is not set */ + + /* we don't wait here for the first field anymore. this is different from the video + capture and might cause that the first buffer is only half filled (with only + one field). but since this is some sort of streaming data, this is not that negative. + but by doing this, we can use the whole engine from video-buf.c... */ + +/* + dev->rps1[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG1 | e_wait; + dev->rps1[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG1 | o_wait; +*/ + /* set bit 1 */ + dev->rps1[ count++ ] = CMD_WR_REG | (1 << 8) | (MC2/4); + dev->rps1[ count++ ] = MASK_28 | MASK_12; + + /* turn on video-dma3 */ + dev->rps1[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps1[ count++ ] = MASK_04 | MASK_20; /* => mask */ + dev->rps1[ count++ ] = MASK_04 | MASK_20; /* => values */ + + /* wait for o_fid_a/b / e_fid_a/b toggle */ + dev->rps1[ count++ ] = CMD_PAUSE | o_wait; + dev->rps1[ count++ ] = CMD_PAUSE | e_wait; + + /* generate interrupt */ + dev->rps1[ count++ ] = CMD_INTERRUPT; + + /* stop */ + dev->rps1[ count++ ] = CMD_STOP; + + /* enable rps1 irqs */ + IER_ENABLE(dev, MASK_28); + + /* write the address of the rps-program */ + saa7146_write(dev, RPS_ADDR1, virt_to_bus(&dev->rps1[ 0])); + + /* turn on rps */ + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); +} + +static +int buffer_activate(struct saa7146_dev *dev, + struct saa7146_buf *buf, + struct saa7146_buf *next) +{ + struct saa7146_vv *vv = dev->vv_data; + buf->vb.state = STATE_ACTIVE; + + DEB_VBI(("dev:%p, buf:%p, next:%p\n",dev,buf,next)); + saa7146_set_vbi_capture(dev,buf,next); + + mod_timer(&vv->vbi_q.timeout, jiffies+BUFFER_TIMEOUT); + return 0; +} + +static +int buffer_prepare(struct file *file, struct videobuf_buffer *vb,enum v4l2_field field) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + int err = 0; + int lines, llength, size; + + lines = 16 * 2 ; /* 2 fields */ + llength = vbi_pixel_to_capture; + size = lines * llength; + + DEB_VBI(("vb:%p\n",vb)); + + if (0 != buf->vb.baddr && buf->vb.bsize < size) { + DEB_VBI(("size mismatch.\n")); + return -EINVAL; + } + + if (buf->vb.size != size) + saa7146_dma_free(dev,buf); + + if (STATE_NEEDS_INIT == buf->vb.state) { + buf->vb.width = llength; + buf->vb.height = lines; + buf->vb.size = size; + buf->vb.field = field; // FIXME: check this + + saa7146_pgtable_free(dev->pci, &buf->pt[2]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[2]); + + err = videobuf_iolock(dev->pci,&buf->vb); + if (err) + goto oops; + saa7146_pgtable_build_single(dev->pci, &buf->pt[2], buf->vb.dma.sglist, buf->vb.dma.sglen); + } + buf->vb.state = STATE_PREPARED; + buf->activate = buffer_activate; + + return 0; + + oops: + DEB_VBI(("error out.\n")); + saa7146_dma_free(dev,buf); + + return err; +} + +static int +buffer_setup(struct file *file, unsigned int *count, unsigned int *size) +{ + int llength,lines; + + lines = 16 * 2 ; /* 2 fields */ + llength = vbi_pixel_to_capture; + + *size = lines * llength; + *count = 2; + + DEB_VBI(("count:%d, size:%d\n",*count,*size)); + + return 0; +} + +static +void buffer_queue(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_VBI(("vb:%p\n",vb)); + saa7146_buffer_queue(dev,&vv->vbi_q,buf); +} + +static +void buffer_release(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_VBI(("vb:%p\n",vb)); + saa7146_dma_free(dev,buf); +} + +static +struct videobuf_queue_ops vbi_qops = { + .buf_setup = buffer_setup, + .buf_prepare = buffer_prepare, + .buf_queue = buffer_queue, + .buf_release = buffer_release, +}; + +/* ------------------------------------------------------------------ */ + +static +void vbi_stop(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + DEB_VBI(("dev:%p, fh:%p\n",dev, fh)); + + spin_lock_irqsave(&dev->slock,flags); + + /* disable rps1 */ + saa7146_write(dev, MC1, MASK_29); + + /* disable rps1 irqs */ + IER_DISABLE(dev, MASK_28); + + /* shut down dma 3 transfers */ + saa7146_write(dev, MC1, MASK_20); + + vv->vbi_streaming = NULL; + spin_unlock_irqrestore(&dev->slock, flags); +} + +static +void vbi_read_timeout(unsigned long data) +{ + struct saa7146_fh *fh = (struct saa7146_fh *)data; + struct saa7146_dev *dev = fh->dev; + + DEB_VBI(("dev:%p, fh:%p\n",dev, fh)); + + vbi_stop(fh); +} + +static +void vbi_init(struct saa7146_dev *dev, struct saa7146_vv *vv) +{ + DEB_VBI(("dev:%p\n",dev)); + + INIT_LIST_HEAD(&vv->vbi_q.queue); + + init_timer(&vv->vbi_q.timeout); + vv->vbi_q.timeout.function = saa7146_buffer_timeout; + vv->vbi_q.timeout.data = (unsigned long)(&vv->vbi_q); + vv->vbi_q.dev = dev; + + init_waitqueue_head(&vv->vbi_wq); +} + +static +void vbi_open(struct saa7146_dev *dev, struct saa7146_fh *fh) +{ + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); + + memset(&fh->vbi_fmt,0,sizeof(fh->vbi_fmt)); + + fh->vbi_fmt.sampling_rate = 27000000; + fh->vbi_fmt.offset = 248; /* todo */ + fh->vbi_fmt.samples_per_line = vbi_pixel_to_capture; + fh->vbi_fmt.sample_format = V4L2_PIX_FMT_GREY; + + /* fixme: this only works for PAL */ + fh->vbi_fmt.start[0] = 5; + fh->vbi_fmt.count[0] = 16; + fh->vbi_fmt.start[1] = 312; + fh->vbi_fmt.count[1] = 16; + + videobuf_queue_init(&fh->vbi_q, &vbi_qops, + dev->pci, &dev->slock, + V4L2_BUF_TYPE_VBI_CAPTURE, + V4L2_FIELD_SEQ_TB, // FIXME: does this really work? + sizeof(struct saa7146_buf)); + init_MUTEX(&fh->vbi_q.lock); + + init_timer(&fh->vbi_read_timeout); + fh->vbi_read_timeout.function = vbi_read_timeout; + fh->vbi_read_timeout.data = (unsigned long)fh; + + vbi_workaround(dev); +} + +static +void vbi_close(struct saa7146_dev *dev, struct saa7146_fh *fh, struct file *file) +{ + struct saa7146_vv *vv = dev->vv_data; + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); + + if( fh == vv->vbi_streaming ) { + vbi_stop(fh); + } +} + +static +void vbi_irq_done(struct saa7146_dev *dev, unsigned long status) +{ + struct saa7146_vv *vv = dev->vv_data; + spin_lock(&dev->slock); + + if (vv->vbi_q.curr) { + DEB_VBI(("dev:%p, curr:%p\n",dev,vv->vbi_q.curr)); + /* this must be += 2, one count for each field */ + vv->vbi_fieldcount+=2; + vv->vbi_q.curr->vb.field_count = vv->vbi_fieldcount; + saa7146_buffer_finish(dev,&vv->vbi_q,STATE_DONE); + } else { + DEB_VBI(("dev:%p\n",dev)); + } + saa7146_buffer_next(dev,&vv->vbi_q,1); + + spin_unlock(&dev->slock); +} + +static +ssize_t vbi_read(struct file *file, char *data, size_t count, loff_t *ppos) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + ssize_t ret = 0; + + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); + + if( NULL == vv->vbi_streaming ) { + // fixme: check if dma3 is available + // fixme: activate vbi engine here if necessary. (really?) + vv->vbi_streaming = fh; + } + + if( fh != vv->vbi_streaming ) { + DEB_VBI(("open %p is already using vbi capture.",vv->vbi_streaming)); + return -EBUSY; + } + + mod_timer(&fh->vbi_read_timeout, jiffies+BUFFER_TIMEOUT); + ret = videobuf_read_stream(file, &fh->vbi_q, data, count, ppos, 1); +/* + printk("BASE_ODD3: 0x%08x\n", saa7146_read(dev, BASE_ODD3)); + printk("BASE_EVEN3: 0x%08x\n", saa7146_read(dev, BASE_EVEN3)); + printk("PROT_ADDR3: 0x%08x\n", saa7146_read(dev, PROT_ADDR3)); + printk("PITCH3: 0x%08x\n", saa7146_read(dev, PITCH3)); + printk("BASE_PAGE3: 0x%08x\n", saa7146_read(dev, BASE_PAGE3)); + printk("NUM_LINE_BYTE3: 0x%08x\n", saa7146_read(dev, NUM_LINE_BYTE3)); + printk("BRS_CTRL: 0x%08x\n", saa7146_read(dev, BRS_CTRL)); +*/ + return ret; +} + +struct saa7146_use_ops saa7146_vbi_uops = { + .init = vbi_init, + .open = vbi_open, + .release = vbi_close, + .irq_done = vbi_irq_done, + .read = vbi_read, +}; + +EXPORT_SYMBOL_GPL(saa7146_vbi_uops); diff -Nru a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_video.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,1387 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +static +int memory = 32; + +MODULE_PARM(memory,"i"); +MODULE_PARM_DESC(memory, "maximum memory usage for capture buffers (default: 32Mb)"); + +/* format descriptions for capture and preview */ +static +struct saa7146_format formats[] = { + { + .name = "RGB-8 (3-3-2)", + .pixelformat = V4L2_PIX_FMT_RGB332, + .trans = RGB08_COMPOSED, + .depth = 8, + }, { + .name = "RGB-16 (5/B-6/G-5/R)", /* really? */ + .pixelformat = V4L2_PIX_FMT_RGB565, + .trans = RGB16_COMPOSED, + .depth = 16, + }, { + .name = "RGB-24 (B-G-R)", + .pixelformat = V4L2_PIX_FMT_BGR24, + .trans = RGB24_COMPOSED, + .depth = 24, + }, { + .name = "RGB-32 (B-G-R)", + .pixelformat = V4L2_PIX_FMT_BGR32, + .trans = RGB32_COMPOSED, + .depth = 32, + }, { + .name = "Greyscale-8", + .pixelformat = V4L2_PIX_FMT_GREY, + .trans = Y8, + .depth = 8, + }, { + .name = "YUV 4:2:2 planar (Y-Cb-Cr)", + .pixelformat = V4L2_PIX_FMT_YUV422P, + .trans = YUV422_DECOMPOSED, + .depth = 16, + .swap = 1, + }, { + .name = "YVU 4:2:0 planar (Y-Cb-Cr)", + .pixelformat = V4L2_PIX_FMT_YVU420, + .trans = YUV420_DECOMPOSED, + .depth = 12, + .swap = 1, + }, { + .name = "YUV 4:2:0 planar (Y-Cb-Cr)", + .pixelformat = V4L2_PIX_FMT_YUV420, + .trans = YUV420_DECOMPOSED, + .depth = 12, + }, { + .name = "YUV 4:2:2 (U-Y-V-Y)", + .pixelformat = V4L2_PIX_FMT_UYVY, + .trans = YUV422_COMPOSED, + .depth = 16, + } +}; + +/* unfortunately, the saa7146 contains a bug which prevents it from doing on-the-fly byte swaps. + due to this, it's impossible to provide additional *packed* formats, which are simply byte swapped + (like V4L2_PIX_FMT_YUYV) ... 8-( */ + +static +int NUM_FORMATS = sizeof(formats)/sizeof(struct saa7146_format); + +struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc) +{ + int i, j = NUM_FORMATS; + + for (i = 0; i < j; i++) { + if (formats[i].pixelformat == fourcc) { + return formats+i; + } + } + + DEB_D(("unknown pixelformat:'%4.4s'\n",(char *)&fourcc)); + return NULL; +} + +static +int g_fmt(struct saa7146_fh *fh, struct v4l2_format *f) +{ + struct saa7146_dev *dev = fh->dev; + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + f->fmt.pix = fh->video_fmt; + return 0; + case V4L2_BUF_TYPE_VIDEO_OVERLAY: + f->fmt.win = fh->ov.win; + return 0; + case V4L2_BUF_TYPE_VBI_CAPTURE: + { + f->fmt.vbi = fh->vbi_fmt; + return 0; + } + default: + DEB_D(("invalid format type '%d'.\n",f->type)); + return -EINVAL; + } +} + +static +int try_win(struct saa7146_dev *dev, struct v4l2_window *win) +{ + struct saa7146_vv *vv = dev->vv_data; + enum v4l2_field field; + int maxw, maxh; + + DEB_EE(("dev:%p\n",dev)); + + if (NULL == vv->ov_fb.base) { + DEB_D(("no fb base set.\n")); + return -EINVAL; + } + if (NULL == vv->ov_fmt) { + DEB_D(("no fb fmt set.\n")); + return -EINVAL; + } + if (win->w.width < 64 || win->w.height < 64) { + DEB_D(("min width/height. (%d,%d)\n",win->w.width,win->w.height)); + return -EINVAL; + } + if (win->clipcount > 16) { + DEB_D(("clipcount too big.\n")); + return -EINVAL; + } + + field = win->field; + maxw = vv->standard->h_max_out; + maxh = vv->standard->v_max_out; + + if (V4L2_FIELD_ANY == field) { + field = (win->w.height > maxh/2) + ? V4L2_FIELD_INTERLACED + : V4L2_FIELD_TOP; + } + switch (field) { + case V4L2_FIELD_TOP: + case V4L2_FIELD_BOTTOM: + maxh = maxh / 2; + break; + case V4L2_FIELD_INTERLACED: + break; + default: { + DEB_D(("no known field mode '%d'.\n",field)); + return -EINVAL; + } + } + + win->field = field; + if (win->w.width > maxw) + win->w.width = maxw; + if (win->w.height > maxh) + win->w.height = maxh; + + return 0; +} + +static +int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + int err; + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + { + struct saa7146_format *fmt; + enum v4l2_field field; + int maxw, maxh; + + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh)); + + fmt = format_by_fourcc(dev,f->fmt.pix.pixelformat); + if (NULL == fmt) { + return -EINVAL; + } + + field = f->fmt.pix.field; + maxw = vv->standard->h_max_out; + maxh = vv->standard->v_max_out; + + if (V4L2_FIELD_ANY == field) { + field = (f->fmt.pix.height > maxh/2) + ? V4L2_FIELD_INTERLACED + : V4L2_FIELD_BOTTOM; + } + switch (field) { + case V4L2_FIELD_TOP: + case V4L2_FIELD_BOTTOM: + maxh = maxh / 2; + break; + case V4L2_FIELD_INTERLACED: + break; + default: { + DEB_D(("no known field mode '%d'.\n",field)); + return -EINVAL; + } + } + + f->fmt.pix.field = field; + if (f->fmt.pix.width > maxw) + f->fmt.pix.width = maxw; + if (f->fmt.pix.height > maxh) + f->fmt.pix.height = maxh; + f->fmt.pix.sizeimage = + (f->fmt.pix.width * f->fmt.pix.height * fmt->depth)/8; + return 0; + } + case V4L2_BUF_TYPE_VIDEO_OVERLAY: + DEB_EE(("V4L2_BUF_TYPE_VIDEO_OVERLAY: dev:%p, fh:%p\n",dev,fh)); + err = try_win(dev,&f->fmt.win); + if (0 != err) { + return err; + } + return 0; + default: + DEB_EE(("unknown format type '%d'\n",f->type)); + return -EINVAL; + } +} + +static +int start_preview(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + int err = 0; + + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + /* check if we have overlay informations */ + if( NULL == fh->ov.fh ) { + DEB_D(("not overlay data available. try S_FMT first.\n")); + return -EAGAIN; + } + + /* check if overlay is running */ + if( 0 != vv->ov_data ) { + if( fh != vv->ov_data->fh ) { + DEB_D(("overlay is running in another open.\n")); + return -EAGAIN; + } + DEB_D(("overlay is already active.\n")); + return 0; + } + + if( 0 != vv->streaming ) { + DEB_D(("streaming capture is active.\n")); + return -EBUSY; + } + + err = try_win(dev,&fh->ov.win); + if (0 != err) { + return err; + } + + vv->ov_data = &fh->ov; + + DEB_D(("%dx%d+%d+%d %s field=%s\n", + fh->ov.win.w.width,fh->ov.win.w.height, + fh->ov.win.w.left,fh->ov.win.w.top, + vv->ov_fmt->name,v4l2_field_names[fh->ov.win.field])); + + saa7146_set_overlay(dev, fh, 1); + + return 0; +} + +static +int stop_preview(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("saa7146.o: stop_preview()\n")); + + /* check if overlay is running */ + if( 0 == vv->ov_data ) { + DEB_D(("overlay is not active.\n")); + return 0; + } + + if( fh != vv->ov_data->fh ) { + DEB_D(("overlay is active, but for another open.\n")); + return -EBUSY; + } + + saa7146_set_overlay(dev, fh, 0); + vv->ov_data = NULL; + + return 0; +} + +static +int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + unsigned long flags; + int err; + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh)); + if( fh == vv->streaming ) { + DEB_EE(("streaming capture is active")); + return -EAGAIN; + } + err = try_fmt(fh,f); + if (0 != err) + return err; + fh->video_fmt = f->fmt.pix; + DEB_EE(("set to pixelformat '%4.4s'\n",(char *)&fh->video_fmt.pixelformat)); + return 0; + case V4L2_BUF_TYPE_VIDEO_OVERLAY: + DEB_EE(("V4L2_BUF_TYPE_VIDEO_OVERLAY: dev:%p, fh:%p\n",dev,fh)); + err = try_win(dev,&f->fmt.win); + if (0 != err) + return err; + down(&dev->lock); + fh->ov.win = f->fmt.win; + fh->ov.nclips = f->fmt.win.clipcount; + if (fh->ov.nclips > 16) + fh->ov.nclips = 16; + if (copy_from_user(fh->ov.clips,f->fmt.win.clips,sizeof(struct v4l2_clip)*fh->ov.nclips)) { + up(&dev->lock); + return -EFAULT; + } + + /* fh->ov.fh is used to indicate that we have valid overlay informations, too */ + fh->ov.fh = fh; + + /* check if we have an active overlay */ + if( vv->ov_data != NULL ) { + if( fh == vv->ov_data->fh) { + spin_lock_irqsave(&dev->slock,flags); + stop_preview(fh); + start_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + } + up(&dev->lock); + return 0; + default: + DEB_D(("unknown format type '%d'\n",f->type)); + return -EINVAL; + } +} + +/********************************************************************************/ +/* device controls */ + +static +struct v4l2_queryctrl controls[] = { + { + id: V4L2_CID_BRIGHTNESS, + name: "Brightness", + minimum: 0, + maximum: 255, + step: 1, + default_value: 128, + type: V4L2_CTRL_TYPE_INTEGER, + },{ + id: V4L2_CID_CONTRAST, + name: "Contrast", + minimum: 0, + maximum: 127, + step: 1, + default_value: 64, + type: V4L2_CTRL_TYPE_INTEGER, + },{ + id: V4L2_CID_SATURATION, + name: "Saturation", + minimum: 0, + maximum: 127, + step: 1, + default_value: 64, + type: V4L2_CTRL_TYPE_INTEGER, + },{ + id: V4L2_CID_VFLIP, + name: "Vertical flip", + minimum: 0, + maximum: 1, + type: V4L2_CTRL_TYPE_BOOLEAN, + },{ + id: V4L2_CID_HFLIP, + name: "Horizontal flip", + minimum: 0, + maximum: 1, + type: V4L2_CTRL_TYPE_BOOLEAN, + }, +}; +static +int NUM_CONTROLS = sizeof(controls)/sizeof(struct v4l2_queryctrl); + +#define V4L2_CID_PRIVATE_LASTP1 (V4L2_CID_PRIVATE_BASE + 0) + +static +struct v4l2_queryctrl* ctrl_by_id(int id) +{ + int i; + + for (i = 0; i < NUM_CONTROLS; i++) + if (controls[i].id == id) + return controls+i; + return NULL; +} + +static +int get_control(struct saa7146_fh *fh, struct v4l2_control *c) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + const struct v4l2_queryctrl* ctrl; + u32 value = 0; + + ctrl = ctrl_by_id(c->id); + if (NULL == ctrl) + return -EINVAL; + switch (c->id) { + case V4L2_CID_BRIGHTNESS: + value = saa7146_read(dev, BCS_CTRL); + c->value = 0xff & (value >> 24); + break; + case V4L2_CID_CONTRAST: + value = saa7146_read(dev, BCS_CTRL); + c->value = 0x7f & (value >> 16); + break; + case V4L2_CID_SATURATION: + value = saa7146_read(dev, BCS_CTRL); + c->value = 0x7f & (value >> 0); + break; + case V4L2_CID_VFLIP: + c->value = vv->vflip; + break; + case V4L2_CID_HFLIP: + c->value = vv->hflip; + break; + default: + return -EINVAL; + } + + return 0; +} + +static +int set_control(struct saa7146_fh *fh, struct v4l2_control *c) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + const struct v4l2_queryctrl* ctrl; + unsigned long flags; + int restart_overlay = 0; + + ctrl = ctrl_by_id(c->id); + if (NULL == ctrl) { + DEB_D(("unknown control %d\n",c->id)); + return -EINVAL; + } + + switch (ctrl->type) { + case V4L2_CTRL_TYPE_BOOLEAN: + case V4L2_CTRL_TYPE_MENU: + case V4L2_CTRL_TYPE_INTEGER: + if (c->value < ctrl->minimum) + c->value = ctrl->minimum; + if (c->value > ctrl->maximum) + c->value = ctrl->maximum; + break; + default: + /* nothing */; + }; + + switch (c->id) { + case V4L2_CID_BRIGHTNESS: { + u32 value = saa7146_read(dev, BCS_CTRL); + value &= 0x00ffffff; + value |= (c->value << 24); + saa7146_write(dev, BCS_CTRL, value); + saa7146_write(dev, MC2, MASK_22 | MASK_06 ); + break; + } + case V4L2_CID_CONTRAST: { + u32 value = saa7146_read(dev, BCS_CTRL); + value &= 0xff00ffff; + value |= (c->value << 16); + saa7146_write(dev, BCS_CTRL, value); + saa7146_write(dev, MC2, MASK_22 | MASK_06 ); + break; + } + case V4L2_CID_SATURATION: { + u32 value = saa7146_read(dev, BCS_CTRL); + value &= 0xffffff00; + value |= (c->value << 0); + saa7146_write(dev, BCS_CTRL, value); + saa7146_write(dev, MC2, MASK_22 | MASK_06 ); + break; + } + case V4L2_CID_HFLIP: + /* fixme: we can supfhrt changing VFLIP and HFLIP here... */ + if( 0 != vv->streaming ) { + DEB_D(("V4L2_CID_HFLIP while active capture.\n")); + return -EINVAL; + } + vv->hflip = c->value; + restart_overlay = 1; + break; + case V4L2_CID_VFLIP: + if( 0 != vv->streaming ) { + DEB_D(("V4L2_CID_VFLIP while active capture.\n")); + return -EINVAL; + } + vv->vflip = c->value; + restart_overlay = 1; + break; + default: { + return -EINVAL; + } + } + if( 0 != restart_overlay ) { + if( 0 != vv->ov_data ) { + if( fh == vv->ov_data->fh ) { + spin_lock_irqsave(&dev->slock,flags); + stop_preview(fh); + start_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + } + } + return 0; +} + +/********************************************************************************/ +/* common pagetable functions */ + +static +int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *buf) +{ + struct pci_dev *pci = dev->pci; + struct scatterlist *list = buf->vb.dma.sglist; + int length = buf->vb.dma.sglen; + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + DEB_EE(("dev:%p, buf:%p\n",dev,buf)); + + if( 0 != IS_PLANAR(sfmt->trans)) { + struct saa7146_pgtable *pt1 = &buf->pt[0]; + struct saa7146_pgtable *pt2 = &buf->pt[1]; + struct saa7146_pgtable *pt3 = &buf->pt[2]; + u32 *ptr1, *ptr2, *ptr3; + u32 fill; + + int size = buf->fmt->width*buf->fmt->height; + int i,p,m1,m2,m3,o1,o2; + + switch( sfmt->depth ) { + case 12: { + /* create some offsets inside the page table */ + m1 = ((size+PAGE_SIZE)/PAGE_SIZE)-1; + m2 = ((size+(size/4)+PAGE_SIZE)/PAGE_SIZE)-1; + m3 = ((size+(size/2)+PAGE_SIZE)/PAGE_SIZE)-1; + o1 = size%PAGE_SIZE; + o2 = (size+(size/4))%PAGE_SIZE; + printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2); + break; + } + case 16: { + /* create some offsets inside the page table */ + m1 = ((size+PAGE_SIZE)/PAGE_SIZE)-1; + m2 = ((size+(size/2)+PAGE_SIZE)/PAGE_SIZE)-1; + m3 = ((2*size+PAGE_SIZE)/PAGE_SIZE)-1; + o1 = size%PAGE_SIZE; + o2 = (size+(size/2))%PAGE_SIZE; + printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2); + break; + } + default: { + return -1; + } + } + + ptr1 = pt1->cpu; + ptr2 = pt2->cpu; + ptr3 = pt3->cpu; + + /* walk all pages, copy all page addresses to ptr1 */ + for (i = 0; i < length; i++, list++) { + for (p = 0; p * 4096 < list->length; p++, ptr1++) { + *ptr1 = sg_dma_address(list) - list->offset; + } + } +/* + ptr1 = pt1->cpu; + for(j=0;j<40;j++) { + printk("ptr1 %d: 0x%08x\n",j,ptr1[j]); + } +*/ + + /* if we have a user buffer, the first page may not be + aligned to a page boundary. */ + pt1->offset = buf->vb.dma.sglist->offset; + pt2->offset = pt1->offset+o1; + pt3->offset = pt1->offset+o2; + + /* create video-dma2 page table */ + ptr1 = pt1->cpu; + for(i = m1; i <= m2 ; i++, ptr2++) { + *ptr2 = ptr1[i]; + } + fill = *(ptr2-1); + for(;i<1024;i++,ptr2++) { + *ptr2 = fill; + } + /* create video-dma3 page table */ + ptr1 = pt1->cpu; + for(i = m2; i <= m3; i++,ptr3++) { + *ptr3 = ptr1[i]; + } + fill = *(ptr3-1); + for(;i<1024;i++,ptr3++) { + *ptr3 = fill; + } + /* finally: finish up video-dma1 page table */ + ptr1 = pt1->cpu+m1; + fill = pt1->cpu[m1]; + for(i=m1;i<1024;i++,ptr1++) { + *ptr1 = fill; + } +/* + ptr1 = pt1->cpu; + ptr2 = pt2->cpu; + ptr3 = pt3->cpu; + for(j=0;j<40;j++) { + printk("ptr1 %d: 0x%08x\n",j,ptr1[j]); + } + for(j=0;j<40;j++) { + printk("ptr2 %d: 0x%08x\n",j,ptr2[j]); + } + for(j=0;j<40;j++) { + printk("ptr3 %d: 0x%08x\n",j,ptr3[j]); + } +*/ + } else { + struct saa7146_pgtable *pt = &buf->pt[0]; + saa7146_pgtable_build_single(pci, pt, list, length); + } + + return 0; +} + + +/********************************************************************************/ +/* file operations */ + +static +int video_begin(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + if( fh == vv->streaming ) { + DEB_S(("already capturing.\n")); + return 0; + } + if( vv->streaming != 0 ) { + DEB_S(("already capturing, but in another open.\n")); + return -EBUSY; + } + + /* fixme: check for planar formats here, if we will interfere with + vbi capture for example */ + + spin_lock_irqsave(&dev->slock,flags); + + /* clear out beginning of streaming bit */ + saa7146_write(dev, MC2, MASK_27 ); + + /* enable rps0 irqs */ + IER_ENABLE(dev, MASK_27); + + vv->streaming = fh; + spin_unlock_irqrestore(&dev->slock,flags); + return 0; +} + +static +int video_end(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + if( vv->streaming != fh ) { + DEB_S(("not capturing.\n")); + return -EINVAL; + } + + spin_lock_irqsave(&dev->slock,flags); + + /* disable rps0 */ + saa7146_write(dev, MC1, MASK_28); + + /* disable rps0 irqs */ + IER_DISABLE(dev, MASK_27); + + // fixme: only used formats here! + /* fixme: look at planar formats here, especially at the + shutdown of planar formats! */ + + /* shut down all used video dma transfers */ + /* fixme: what about the budget-dvb cards? they use + video-dma3, but video_end should not get called anyway ...*/ + saa7146_write(dev, MC1, 0x00700000); + + vv->streaming = NULL; + spin_unlock_irqrestore(&dev->slock, flags); + + return 0; +} + +/* + * This function is _not_ called directly, but from + * video_generic_ioctl (and maybe others). userspace + * copying is done already, arg is a kernel fhinter. + */ + +int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *arg) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + unsigned long flags; + int err = 0, result = 0, ee = 0; + + struct saa7146_use_ops *ops; + struct videobuf_queue *q; + + /* check if extension handles the command */ + for(ee = 0; dev->ext->ext_vv_data->ioctls[ee].flags != 0; ee++) { + if( cmd == dev->ext->ext_vv_data->ioctls[ee].cmd ) + break; + } + + if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) { + DEB_D(("extension handles ioctl exclusive.\n")); + result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg); + return result; + } + if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_BEFORE) ) { + DEB_D(("extension handles ioctl before.\n")); + result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg); + if( -EAGAIN != result ) { + return result; + } + } + + /* fixme: add handle "after" case (is it still needed?) */ + + switch (fh->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: { + ops = &saa7146_video_uops; + q = &fh->video_q; + break; + } + case V4L2_BUF_TYPE_VBI_CAPTURE: { + ops = &saa7146_vbi_uops; + q = &fh->vbi_q; + break; + } + default: + BUG(); + return 0; + } + + switch (cmd) { + case VIDIOC_QUERYCAP: + { + struct v4l2_capability *cap = arg; + memset(cap,0,sizeof(*cap)); + + DEB_EE(("VIDIOC_QUERYCAP\n")); + + strcpy(cap->driver, "saa7146 v4l2"); + strncpy(cap->card, dev->ext->name, sizeof(cap->card)); + sprintf(cap->bus_info,"PCI:%s",dev->pci->slot_name); + cap->version = SAA7146_VERSION_CODE; + cap->capabilities = + V4L2_CAP_VIDEO_CAPTURE | + V4L2_CAP_VIDEO_OVERLAY | + V4L2_CAP_READWRITE | + V4L2_CAP_STREAMING; + cap->capabilities |= dev->ext->ext_vv_data->capabilities; + return 0; + } + case VIDIOC_G_FBUF: + { + struct v4l2_framebuffer *fb = arg; + + DEB_EE(("VIDIOC_G_FBUF\n")); + + *fb = vv->ov_fb; + fb->capability = V4L2_FBUF_CAP_LIST_CLIPPING; + return 0; + } + case VIDIOC_S_FBUF: + { + struct v4l2_framebuffer *fb = arg; + struct saa7146_format *fmt; + + DEB_EE(("VIDIOC_S_FBUF\n")); + +/* + if(!capable(CAP_SYS_ADMIN)) { // && !capable(CAP_SYS_RAWIO)) { + DEB_D(("VIDIOC_S_FBUF: not CAP_SYS_ADMIN or CAP_SYS_RAWIO.\n")); + return -EPERM; + } +*/ + if( 0 != vv->ov_data ) { + DEB_D(("VIDIOC_S_FBUF: overlay is active.\n")); + return -EPERM; + } + + /* check args */ + fmt = format_by_fourcc(dev,fb->fmt.pixelformat); + if (NULL == fmt) { + return -EINVAL; + } + + /* ok, accept it */ + vv->ov_fb = *fb; + vv->ov_fmt = fmt; + if (0 == vv->ov_fb.fmt.bytesperline) + vv->ov_fb.fmt.bytesperline = + vv->ov_fb.fmt.width*fmt->depth/8; + return 0; + } + case VIDIOC_ENUM_FMT: + { + struct v4l2_fmtdesc *f = arg; + int index; + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + case V4L2_BUF_TYPE_VIDEO_OVERLAY: { + index = f->index; + if (index < 0 || index >= NUM_FORMATS) { + return -EINVAL; + } + memset(f,0,sizeof(*f)); + f->index = index; + strncpy(f->description,formats[index].name,31); + f->pixelformat = formats[index].pixelformat; + break; + } + default: + return -EINVAL; + } + + DEB_EE(("VIDIOC_ENUMSTD: type:%d, index:%d\n",f->type,f->index)); + return 0; + } + case VIDIOC_QUERYCTRL: + { + const struct v4l2_queryctrl *ctrl; + struct v4l2_queryctrl *c = arg; + + if ((c->id < V4L2_CID_BASE || + c->id >= V4L2_CID_LASTP1) && + (c->id < V4L2_CID_PRIVATE_BASE || + c->id >= V4L2_CID_PRIVATE_LASTP1)) + return -EINVAL; + + ctrl = ctrl_by_id(c->id); + if( NULL == ctrl ) { + c->flags = V4L2_CTRL_FLAG_DISABLED; + return 0; + } + + DEB_EE(("VIDIOC_QUERYCTRL: id:%d\n",c->id)); + *c = *ctrl; + return 0; + } + case VIDIOC_G_CTRL: { + DEB_EE(("VIDIOC_G_CTRL\n")); + return get_control(fh,arg); + } + case VIDIOC_S_CTRL: + { + DEB_EE(("VIDIOC_S_CTRL\n")); + down(&dev->lock); + err = set_control(fh,arg); + up(&dev->lock); + return err; + } + case VIDIOC_G_PARM: + { + struct v4l2_streamparm *parm = arg; + if( parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ) { + return -EINVAL; + } + memset(&parm->parm.capture,0,sizeof(struct v4l2_captureparm)); + parm->parm.capture.readbuffers = 1; + // fixme: only for PAL! + parm->parm.capture.timeperframe.numerator = 1; + parm->parm.capture.timeperframe.denominator = 25; + return 0; + } + case VIDIOC_G_FMT: + { + struct v4l2_format *f = arg; + DEB_EE(("VIDIOC_G_FMT\n")); + return g_fmt(fh,f); + } + case VIDIOC_S_FMT: + { + struct v4l2_format *f = arg; + DEB_EE(("VIDIOC_S_FMT\n")); + return s_fmt(fh,f); + } + case VIDIOC_TRY_FMT: + { + struct v4l2_format *f = arg; + DEB_EE(("VIDIOC_TRY_FMT\n")); + return try_fmt(fh,f); + } + case VIDIOC_G_STD: + { + v4l2_std_id *id = arg; + DEB_EE(("VIDIOC_G_STD\n")); + *id = vv->standard->id; + return 0; + } + /* the saa7146 supfhrts (used in conjunction with the saa7111a for example) + PAL / NTSC / SECAM. if your hardware does not (or does more) + -- override this function in your extension */ + case VIDIOC_ENUMSTD: + { + struct v4l2_standard *e = arg; + if (e->index < 0 ) + return -EINVAL; + if( e->index < dev->ext->ext_vv_data->num_stds ) { + DEB_EE(("VIDIOC_ENUMSTD: index:%d\n",e->index)); + return v4l2_video_std_construct(e, dev->ext->ext_vv_data->stds[e->index].id, dev->ext->ext_vv_data->stds[e->index].name); + } + return -EINVAL; + } + case VIDIOC_S_STD: + { + v4l2_std_id *id = arg; + int i; + + int restart_overlay = 0; + int found = 0; + + struct saa7146_fh *ov_fh = NULL; + + if( 0 != vv->streaming ) { + return -EBUSY; + } + + down(&dev->lock); + + if( vv->ov_data != NULL ) { + ov_fh = vv->ov_data->fh; + stop_preview(ov_fh); + restart_overlay = 1; + } + + for(i = 0; i < dev->ext->ext_vv_data->num_stds; i++) + if (*id & dev->ext->ext_vv_data->stds[i].id) + break; + if (i != dev->ext->ext_vv_data->num_stds) { + vv->standard = &dev->ext->ext_vv_data->stds[i]; + if( NULL != dev->ext->ext_vv_data->std_callback ) + dev->ext->ext_vv_data->std_callback(dev, vv->standard); + found = 1; + } + + if( 0 != restart_overlay ) { + start_preview(ov_fh); + } + up(&dev->lock); + + if( 0 == found ) { + DEB_EE(("VIDIOC_S_STD: standard not found.\n")); + return -EINVAL; + } + + DEB_EE(("VIDIOC_S_STD: set to standard to '%s'\n",vv->standard->name)); + return 0; + } + case VIDIOC_OVERLAY: + { + int on = *(int *)arg; + int err = 0; + + if( NULL == vv->ov_fmt ) { + DEB_D(("VIDIOC_OVERLAY: no framebuffer informations. call S_FBUF first!\n")); + return -EAGAIN; + } + + DEB_D(("VIDIOC_OVERLAY on:%d\n",on)); + if( 0 != on ) { + if( vv->ov_data != NULL ) { + if( fh != vv->ov_data->fh) { + return -EAGAIN; + } + } + spin_lock_irqsave(&dev->slock,flags); + err = start_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } else { + if( vv->ov_data != NULL ) { + if( fh != vv->ov_data->fh) { + return -EAGAIN; + } + } + spin_lock_irqsave(&dev->slock,flags); + err = stop_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + return err; + } + case VIDIOC_REQBUFS: { + DEB_D(("VIDIOC_REQBUFS \n")); + return videobuf_reqbufs(file,q,arg); + } + case VIDIOC_QUERYBUF: { + DEB_D(("VIDIOC_QUERYBUF \n")); + return videobuf_querybuf(q,arg); + } + case VIDIOC_QBUF: { + DEB_D(("VIDIOC_QBUF \n")); + return videobuf_qbuf(file,q,arg); + } + case VIDIOC_DQBUF: { + DEB_D(("VIDIOC_DQBUF \n")); + return videobuf_dqbuf(file,q,arg); + } + case VIDIOC_STREAMON: { + DEB_D(("VIDIOC_STREAMON \n")); + if( 0 != ops->capture_begin ) { + if( 0 != (err = ops->capture_begin(fh))) { + return err; + } + } + err = videobuf_streamon(file,q); + return err; + } + case VIDIOC_STREAMOFF: { + DEB_D(("VIDIOC_STREAMOFF \n")); + if( 0 != ops->capture_end ) { + ops->capture_end(fh); + } + err = videobuf_streamoff(file,q); + return 0; + } + case VIDIOCGMBUF: + { + struct video_mbuf *mbuf = arg; + struct videobuf_queue *q; + int i; + + /* fixme: number of capture buffers and sizes for v4l apps */ + int gbuffers = 2; + int gbufsize = 768*576*4; + + DEB_D(("VIDIOCGMBUF \n")); + + q = &fh->video_q; + down(&q->lock); + err = videobuf_mmap_setup(file,q,gbuffers,gbufsize); + if (err < 0) { + up(&q->lock); + return err; + } + memset(mbuf,0,sizeof(*mbuf)); + mbuf->frames = gbuffers; + mbuf->size = gbuffers * gbufsize; + for (i = 0; i < gbuffers; i++) + mbuf->offsets[i] = i * gbufsize; + up(&q->lock); + return 0; + } + default: + return v4l_compat_translate_ioctl(inode,file,cmd,arg, + saa7146_video_do_ioctl); + } + return 0; +} + +/*********************************************************************************/ +/* buffer handling functions */ + +static +int buffer_activate (struct saa7146_dev *dev, + struct saa7146_buf *buf, + struct saa7146_buf *next) +{ + struct saa7146_vv *vv = dev->vv_data; + + buf->vb.state = STATE_ACTIVE; + saa7146_set_capture(dev,buf,next); + + mod_timer(&vv->video_q.timeout, jiffies+BUFFER_TIMEOUT); + return 0; +} + +static +int buffer_prepare(struct file *file, struct videobuf_buffer *vb, enum v4l2_field field) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + int size,err = 0; + + /* sanity checks */ + if (fh->video_fmt.width < 64 || + fh->video_fmt.height < 64 || + fh->video_fmt.width > vv->standard->h_max_out || + fh->video_fmt.height > vv->standard->v_max_out) { + DEB_D(("w (%d) / h (%d) out of bounds.\n",fh->video_fmt.width,fh->video_fmt.height)); + return -EINVAL; + } + + size = fh->video_fmt.sizeimage; + if (0 != buf->vb.baddr && buf->vb.bsize < size) { + DEB_D(("size mismatch.\n")); + return -EINVAL; + } + + DEB_CAP(("buffer_prepare [size=%dx%d,bytes=%d,fields=%s]\n", + fh->video_fmt.width,fh->video_fmt.height,size,v4l2_field_names[fh->video_fmt.field])); + if (buf->vb.width != fh->video_fmt.width || + buf->vb.height != fh->video_fmt.height || + buf->vb.size != size || + buf->vb.field != field || + buf->vb.field != fh->video_fmt.field || + buf->fmt != &fh->video_fmt) { + saa7146_dma_free(dev,buf); + } + + if (STATE_NEEDS_INIT == buf->vb.state) { + struct saa7146_format *sfmt; + + buf->vb.width = fh->video_fmt.width; + buf->vb.height = fh->video_fmt.height; + buf->vb.size = size; + buf->vb.field = field; + buf->fmt = &fh->video_fmt; + buf->vb.field = fh->video_fmt.field; + + sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + if( 0 != IS_PLANAR(sfmt->trans)) { + saa7146_pgtable_free(dev->pci, &buf->pt[0]); + saa7146_pgtable_free(dev->pci, &buf->pt[1]); + saa7146_pgtable_free(dev->pci, &buf->pt[2]); + + saa7146_pgtable_alloc(dev->pci, &buf->pt[0]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[1]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[2]); + } else { + saa7146_pgtable_free(dev->pci, &buf->pt[0]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[0]); + } + + err = videobuf_iolock(dev->pci,&buf->vb); + if (err) + goto oops; + err = saa7146_pgtable_build(dev,buf); + if (err) + goto oops; + } + buf->vb.state = STATE_PREPARED; + buf->activate = buffer_activate; + + return 0; + + oops: + DEB_D(("error out.\n")); + saa7146_dma_free(dev,buf); + + return err; +} + +static +int buffer_setup(struct file *file, unsigned int *count, unsigned int *size) +{ + struct saa7146_fh *fh = file->private_data; + + if (0 == *count || *count > MAX_SAA7146_CAPTURE_BUFFERS) + *count = MAX_SAA7146_CAPTURE_BUFFERS; + + *size = fh->video_fmt.sizeimage; + + /* check if we exceed the "memory" parameter */ + if( (*count * *size) > (memory*1048576) ) { + *count = (memory*1048576) / *size; + } + + DEB_CAP(("%d buffers, %d bytes each.\n",*count,*size)); + + return 0; +} + +static +void buffer_queue(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_CAP(("vbuf:%p\n",vb)); + saa7146_buffer_queue(fh->dev,&vv->video_q,buf); +} + + +static +void buffer_release(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_CAP(("vbuf:%p\n",vb)); + saa7146_dma_free(dev,buf); +} + +static +struct videobuf_queue_ops video_qops = { + .buf_setup = buffer_setup, + .buf_prepare = buffer_prepare, + .buf_queue = buffer_queue, + .buf_release = buffer_release, +}; + +/********************************************************************************/ +/* file operations */ + +static +void video_init(struct saa7146_dev *dev, struct saa7146_vv *vv) +{ + INIT_LIST_HEAD(&vv->video_q.queue); + + init_timer(&vv->video_q.timeout); + vv->video_q.timeout.function = saa7146_buffer_timeout; + vv->video_q.timeout.data = (unsigned long)(&vv->video_q); + vv->video_q.dev = dev; + + /* set some default values */ + vv->standard = &dev->ext->ext_vv_data->stds[0]; + + /* FIXME: what's this? */ + vv->current_hps_source = SAA7146_HPS_SOURCE_PORT_A; + vv->current_hps_sync = SAA7146_HPS_SYNC_PORT_A; +} + + +static +void video_open(struct saa7146_dev *dev, struct saa7146_fh *fh) +{ + struct saa7146_format *sfmt; + + fh->video_fmt.width = 384; + fh->video_fmt.height = 288; + fh->video_fmt.pixelformat = V4L2_PIX_FMT_BGR24; + fh->video_fmt.field = V4L2_FIELD_ANY; + sfmt = format_by_fourcc(dev,fh->video_fmt.pixelformat); + fh->video_fmt.sizeimage = (fh->video_fmt.width * fh->video_fmt.height * sfmt->depth)/8; + + videobuf_queue_init(&fh->video_q, &video_qops, + dev->pci, &dev->slock, + V4L2_BUF_TYPE_VIDEO_CAPTURE, + V4L2_FIELD_INTERLACED, + sizeof(struct saa7146_buf)); + + init_MUTEX(&fh->video_q.lock); +} + + +static +void video_close(struct saa7146_dev *dev, struct saa7146_fh *fh, struct file *file) +{ + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + + if( 0 != vv->ov_data ) { + if( fh == vv->ov_data->fh ) { + spin_lock_irqsave(&dev->slock,flags); + stop_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + } + + if( fh == vv->streaming ) { + video_end(fh); + } + + videobuf_queue_cancel(file,&fh->video_q); +} + + +static +void video_irq_done(struct saa7146_dev *dev, unsigned long st) +{ + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_dmaqueue *q = &vv->video_q; + + spin_lock(&dev->slock); + DEB_CAP(("called.\n")); + + /* only finish the buffer if we have one... */ + if( NULL != q->curr ) { + saa7146_buffer_finish(dev,q,STATE_DONE); + } + saa7146_buffer_next(dev,q,0); + + spin_unlock(&dev->slock); +} + +static +ssize_t video_read(struct file *file, char *data, size_t count, loff_t *ppos) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + ssize_t ret = 0; + + int restart_overlay = 0; + struct saa7146_fh *ov_fh = NULL; + + DEB_EE(("called.\n")); + + if( vv->ov_data != NULL ) { + ov_fh = vv->ov_data->fh; + stop_preview(ov_fh); + restart_overlay = 1; + } + + if( 0 != video_begin(fh)) { + return -EAGAIN; + } + ret = videobuf_read_one(file,&fh->video_q , data, count, ppos); + video_end(fh); + + /* restart overlay if it was active before */ + if( 0 != restart_overlay ) { + start_preview(ov_fh); + } + + return ret; +} + +struct saa7146_use_ops saa7146_video_uops = { + .init = video_init, + .open = video_open, + .release = video_close, + .irq_done = video_irq_done, + .read = video_read, + .capture_begin = video_begin, + .capture_end = video_end, +}; + +EXPORT_SYMBOL_GPL(saa7146_video_uops); diff -Nru a/drivers/media/dvb/Kconfig b/drivers/media/dvb/Kconfig --- a/drivers/media/dvb/Kconfig Sat Apr 12 14:44:07 2003 +++ b/drivers/media/dvb/Kconfig Sat Apr 12 14:44:07 2003 @@ -3,7 +3,7 @@ # menu "Digital Video Broadcasting Devices" - depends on VIDEO_DEV!=n + depends on NET && INET config DVB bool "DVB For Linux" @@ -32,10 +32,10 @@ source "drivers/media/dvb/frontends/Kconfig" -comment "Supported DVB Adapters" +comment "Supported SAA7146 based PCI Adapters" depends on DVB -source "drivers/media/dvb/av7110/Kconfig" +source "drivers/media/dvb/ttpci/Kconfig" endmenu diff -Nru a/drivers/media/dvb/Makefile b/drivers/media/dvb/Makefile --- a/drivers/media/dvb/Makefile Sat Apr 12 14:44:08 2003 +++ b/drivers/media/dvb/Makefile Sat Apr 12 14:44:08 2003 @@ -2,4 +2,4 @@ # Makefile for the kernel multimedia device drivers. # -obj-y := dvb-core/ frontends/ av7110/ +obj-y := dvb-core/ frontends/ ttpci/ # ttusb-budget/ diff -Nru a/drivers/media/dvb/av7110/Kconfig b/drivers/media/dvb/av7110/Kconfig --- a/drivers/media/dvb/av7110/Kconfig Sat Apr 12 14:44:10 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,26 +0,0 @@ -config DVB_AV7110 - tristate "SAA7146 based AV7110 and Nova/budget cards" - depends on VIDEO_DEV && DVB_CORE - help - Support for SAA7146 and AV7110 based DVB cards as produced - by Fujitsu-Siemens, Technotrend, Hauppauge and others. - - Simple cards like so called Budget- or Nova-PCI cards are - supported as well as fullfeatured cards with onboard MPEG2 - decoder. - - Say Y if you own such a card and want to use it. - -config DVB_AV7110_OSD - bool "AV7110 OSD support" - depends on DVB_AV7110 - help - The AV7110 firmware provides some code to generate an OnScreenDisplay - on the video output. This is kind of nonstandard and not guaranteed to - be maintained. - - Anyway, some popular DVB software like VDR uses this OSD to render - its menus, so say Y if you want to use this software. - - All other people say N. - diff -Nru a/drivers/media/dvb/av7110/Makefile b/drivers/media/dvb/av7110/Makefile --- a/drivers/media/dvb/av7110/Makefile Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,9 +0,0 @@ -# -# Makefile for the kernel AV7110 DVB device driver -# - -dvb-ttpci-objs := saa7146_core.o saa7146_v4l.o av7110.o av7110_ir.o - -obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o - -EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ diff -Nru a/drivers/media/dvb/av7110/av7110.c b/drivers/media/dvb/av7110/av7110.c --- a/drivers/media/dvb/av7110/av7110.c Sat Apr 12 14:44:05 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,4840 +0,0 @@ -/* - * av7110.c: driver for the SAA7146 based AV110 cards (like the Fujitsu-Siemens DVB) - * and Nova/Budget DVB cards - * - * Copyright (C) 1999-2002 Ralph Metzler - * & Marcus Metzler for convergence integrated media GmbH - * - * originally based on code by: - * Copyright (C) 1998,1999 Christian Theiss - * - * 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. - * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * - * - * the project's page is at http://www.linuxtv.org/dvb/ - */ - -#define NEW_CI 1 - -#define __KERNEL_SYSCALLS__ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "../dvb-core/dvb_i2c.h" -#include "../dvb-core/dvb_frontend.h" -#include "av7110.h" - -#include "saa7146_core.h" -#include "saa7146_v4l.h" -#include "saa7146_defs.h" - - -static int AV_StartPlay(av7110_t *av7110, int av); -static void restart_feeds(av7110_t *av7110); -static int bootarm(av7110_t *av7110); -static inline int i2c_writereg(av7110_t *av7110, u8 id, u8 reg, u8 val); -static inline u8 i2c_readreg(av7110_t *av7110, u8 id, u8 reg); -static int outcom(av7110_t *av7110, int type, int com, int num, ...); -static void SetMode(av7110_t *av7110, int mode); - -void pes_to_ts(u8 const *buf, long int length, u16 pid, p2t_t *p); -void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter, struct dvb_demux_feed *feed); - -static u32 vidmem = 0; -static u32 vidlow = 0; - -static int av7110_debug = 0; -#define dprintk if (av7110_debug) printk - -static int vidmode=CVBS_RGB_OUT; -static int init_vpid; -static int init_apid; -static int pids_off; -static int adac=DVB_ADAC_TI; - -#define saacomm(x,y) av7110->saa->command(av7110->saa->i2c_bus, (x), (y)) - - -/**************************************************************************** - * General helper functions - ****************************************************************************/ - -static inline void ddelay(int i) -{ - current->state=TASK_INTERRUPTIBLE; - schedule_timeout((HZ*i)/100); -} - - -/**************************************************************************** - * GPIO and DEBI functions - ****************************************************************************/ - -#define saaread(adr) saa7146_read(saamem,(adr)) -#define saawrite(dat,adr) saa7146_write(saamem,(adr),(dat)) - -inline static void -setgpio(av7110_t *av7110, int port, u32 data) -{ - void *saamem=av7110->saa_mem; - u32 val; - - val=saaread(GPIO_CTRL); - val&=~(0xff << (8*(port))); - val|=(data)<<(8*(port)); - saawrite(val, GPIO_CTRL); -} - -/* This DEBI code is based on the Stradis driver - by Nathan Laredo */ - -static -int wait_for_debi_done(av7110_t *av7110) -{ - void *saamem=av7110->saa_mem; - int start; - - /* wait for registers to be programmed */ - start = jiffies; - while (1) { - if (saaread(MC2) & 2) - break; - if (jiffies-start > HZ/20) { - printk ("%s: timed out while waiting for registers " - "getting programmed\n", __FUNCTION__); - return -ETIMEDOUT; - } - } - - /* wait for transfer to complete */ - start = jiffies; - while (1) { - if (!(saaread(PSR) & SPCI_DEBI_S)) - break; - saaread(MC2); - if (jiffies-start > HZ/4) { - printk ("%s: timed out while waiting for transfer " - "completion\n", __FUNCTION__); - return -ETIMEDOUT; - } - } - - return 0; -} - -static int debiwrite(av7110_t *av7110, u32 config, - int addr, u32 val, int count) -{ - void *saamem=av7110->saa_mem; - u32 cmd; - - if (count <= 0 || count > 32764) - return -1; - if (wait_for_debi_done(av7110) < 0) - return -1; - saawrite(config, DEBI_CONFIG); - if (count <= 4) /* immediate transfer */ - saawrite(val, DEBI_AD); - else /* block transfer */ - saawrite(av7110->debi_bus, DEBI_AD); - saawrite((cmd = (count << 17) | (addr & 0xffff)), DEBI_COMMAND); - saawrite((2 << 16) | 2, MC2); - return 0; -} - -static u32 debiread(av7110_t *av7110, u32 config, int addr, int count) -{ - void *saamem=av7110->saa_mem; - u32 result = 0; - - if (count > 32764 || count <= 0) - return 0; - if (wait_for_debi_done(av7110) < 0) - return 0; - saawrite(av7110->debi_bus, DEBI_AD); - saawrite((count << 17) | 0x10000 | (addr & 0xffff), - DEBI_COMMAND); - - saawrite(config, DEBI_CONFIG); - saawrite((2 << 16) | 2, MC2); - if (count > 4) - return count; - wait_for_debi_done(av7110); - result = saaread(DEBI_AD); - result &= (0xffffffffUL >> ((4-count)*8)); - return result; -} - -/* DEBI during interrupt */ - -static inline void -iwdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - if (count>4 && val) - memcpy(av7110->debi_virt, (char *) val, count); - debiwrite(av7110, config, addr, val, count); -} - -static inline u32 -irdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - u32 res; - - res=debiread(av7110, config, addr, count); - if (count<=4) - memcpy(av7110->debi_virt, (char *) &res, count); - return res; -} - -/* DEBI outside interrupts, only for count<=4! */ - -static inline void -wdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - unsigned long flags; - - spin_lock_irqsave(&av7110->debilock, flags); - debiwrite(av7110, config, addr, val, count); - spin_unlock_irqrestore(&av7110->debilock, flags); -} - -static inline u32 -rdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - unsigned long flags; - u32 res; - - spin_lock_irqsave(&av7110->debilock, flags); - res=debiread(av7110, config, addr, count); - spin_unlock_irqrestore(&av7110->debilock, flags); - return res; -} - - -static inline char -chtrans(char c) -{ - if (c<32 || c>126) - c=0x20; - return c; -} - - -/* handle mailbox registers of the dual ported RAM */ - -static inline void -ARM_ResetMailBox(av7110_t *av7110) -{ - unsigned long flags; - - spin_lock_irqsave(&av7110->debilock, flags); - debiread(av7110, DEBINOSWAP, IRQ_RX, 2); - //printk("dvb: IRQ_RX=%d\n", debiread(av7110, DEBINOSWAP, IRQ_RX, 2)); - debiwrite(av7110, DEBINOSWAP, IRQ_RX, 0, 2); - spin_unlock_irqrestore(&av7110->debilock, flags); -} - -static inline void -ARM_ClearMailBox(av7110_t *av7110) -{ - iwdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); -} - -static inline void -ARM_ClearIrq(av7110_t *av7110) -{ - irdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); -} - -static void -reset_arm(av7110_t *av7110) -{ - setgpio(av7110, RESET_LINE, GPIO_OUTLO); - - /* Disable DEBI and GPIO irq */ - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~(MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - - mdelay(800); - setgpio(av7110, RESET_LINE, GPIO_OUTHI); - mdelay(800); - - ARM_ResetMailBox(av7110); - - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_03 ); - - av7110->arm_ready=1; - printk("av7110: ARM RESET\n"); -} - -static void -recover_arm(av7110_t *av7110) -{ - if (current->files) - bootarm(av7110); - else { - printk("OOPS, no current->files\n"); - reset_arm(av7110); - } - ddelay(10); - restart_feeds(av7110); -} - -static void -arm_error(av7110_t *av7110) -{ - av7110->arm_errors++; - av7110->arm_ready=0; - recover_arm(av7110); -} - -static int arm_thread(void *data) -{ - av7110_t *av7110 = data; - u16 newloops; - - lock_kernel(); -#if 0 - daemonize("arm_mon"); -#else - exit_mm(current); - current->session=current->pgrp=1; - sigfillset(¤t->blocked); - strcpy(current->comm, "arm_mon"); -#endif - av7110->arm_thread = current; - unlock_kernel(); - - while (!av7110->arm_rmmod && !signal_pending(current)) { - interruptible_sleep_on_timeout(&av7110->arm_wait, 5*HZ); - - if (!av7110->arm_ready) - continue; - - if (down_interruptible(&av7110->dcomlock)) - break; - - newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2); - up(&av7110->dcomlock); - - if (newloops==av7110->arm_loops) { - printk("av7110%d: ARM crashed!\n", - av7110->saa->dvb_adapter->num); - - arm_error(av7110); - - if (down_interruptible(&av7110->dcomlock)) - break; - - newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2)-1; - up(&av7110->dcomlock); - } - av7110->arm_loops=newloops; - } - - av7110->arm_thread = NULL; - return 0; -} - - -static int -record_cb(dvb_filter_pes2ts_t *p2t, u8 *buf, size_t len) -{ - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) p2t->priv; - - if (!(dvbdmxfeed->ts_type & TS_PACKET)) - return 0; - if (buf[3]==0xe0) // video PES do not have a length in TS - buf[4]=buf[5]=0; - if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY) - return dvbdmxfeed->cb.ts(buf, len, 0, 0, - &dvbdmxfeed->feed.ts, DMX_OK); - else - return dvb_filter_pes2ts(p2t, buf, len); -} - -static int -dvb_filter_pes2ts_cb(void *priv, unsigned char *data) -{ - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) priv; - - dvbdmxfeed->cb.ts(data, 188, 0, 0, - &dvbdmxfeed->feed.ts, - DMX_OK); - return 0; -} - -static int -AV_StartRecord(av7110_t *av7110, int av, - struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - - if (av7110->playing||(av7110->rec_mode&av)) - return -EBUSY; - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - dvbdmx->recording=1; - av7110->rec_mode|=av; - - switch (av7110->rec_mode) { - case RP_AUDIO: - dvb_filter_pes2ts_init (&av7110->p2t[0], - dvbdmx->pesfilter[0]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[0]); - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0); - break; - - case RP_VIDEO: - dvb_filter_pes2ts_init (&av7110->p2t[1], - dvbdmx->pesfilter[1]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[1]); - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0); - break; - - case RP_AV: - dvb_filter_pes2ts_init (&av7110->p2t[0], - dvbdmx->pesfilter[0]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[0]); - dvb_filter_pes2ts_init (&av7110->p2t[1], - dvbdmx->pesfilter[1]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[1]); - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AV_PES, 0); - break; - } - return 0; -} - -static int -AV_StartPlay(av7110_t *av7110, int av) -{ - if (av7110->rec_mode) - return -EBUSY; - if (av7110->playing&av) - return -EBUSY; - - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - - if (av7110->playing == RP_NONE) { - dvb_filter_ipack_reset(&av7110->ipack[0]); - dvb_filter_ipack_reset(&av7110->ipack[1]); - } - - av7110->playing|=av; - switch (av7110->playing) { - case RP_AUDIO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0); - break; - case RP_VIDEO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0); - av7110->sinfo=0; - break; - case RP_AV: - av7110->sinfo=0; - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AV_PES, 0); - break; - } - return av7110->playing; -} - -static void -AV_Stop(av7110_t *av7110, int av) -{ - if (!(av7110->playing&av) && !(av7110->rec_mode&av)) - return; - - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - if (av7110->playing) { - av7110->playing&=~av; - switch (av7110->playing) { - case RP_AUDIO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0); - break; - case RP_VIDEO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0); - break; - case RP_NONE: - SetMode(av7110, av7110->vidmode); - break; - } - } else { - av7110->rec_mode&=~av; - switch (av7110->rec_mode) { - case RP_AUDIO: - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0); - break; - case RP_VIDEO: - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0); - break; - case RP_NONE: - break; - } - } -} - -/**************************************************************************** - * Buffer handling - ****************************************************************************/ - -static inline void -ring_buffer_flush(ring_buffer_t *rbuf) -{ - spin_lock_irq(&rbuf->lock); - rbuf->pwrite=rbuf->pread; - spin_unlock_irq(&rbuf->lock); - wake_up(&rbuf->queue); -} - -static inline void -ring_buffer_init(ring_buffer_t *rbuf, u8 *data, int len) -{ - rbuf->pread=rbuf->pwrite=0; - rbuf->data=data; - rbuf->size=len; - init_waitqueue_head(&rbuf->queue); - spin_lock_init(&(rbuf->lock)); - rbuf->lock=SPIN_LOCK_UNLOCKED; - sema_init(&(rbuf->sema), 1); -} - -static inline -int ring_buffer_empty(ring_buffer_t *rbuf) -{ - return (rbuf->pread==rbuf->pwrite); -} - -static inline -int ring_buffer_free(ring_buffer_t *rbuf) -{ - int free; - - free=rbuf->pread - rbuf->pwrite; - if (free<=0) - free+=rbuf->size; - return free; -} - -static inline -int ring_buffer_avail(ring_buffer_t *rbuf) -{ - int avail; - - avail=rbuf->pwrite - rbuf->pread; - if (avail<0) - avail+=rbuf->size; - return avail; -} - -#if 0 -static void -ring_buffer_block(ring_buffer_t *rbuf, unsigned long count) -{ - if (ring_buffer_free(rbuf)>=count) - return; - while (!wait_event_interruptible(rbuf->queue, - (ring_buffer_free(rbuf)>=count))); -} -#endif - -static long -ring_buffer_write(ring_buffer_t *rbuf, - const char *buf, unsigned long count, - int nonblock, int usermem) -{ - unsigned long todo = count; - int free, split; - - while (todo > 0) { - if (ring_buffer_free(rbuf)<=2048) { - if (nonblock) - return count-todo; - if (wait_event_interruptible(rbuf->queue, - (ring_buffer_free(rbuf)>2048))) - return count-todo; - } - dprintk ("function: %s pread=%08x pwrite=%08x\n", __FUNCTION__, - rbuf->pread, rbuf->pwrite); - //mdelay(2); - free = rbuf->pread - rbuf->pwrite; - split=rbuf->size; - if (free<=0) { - free+=rbuf->size; - split-=rbuf->pwrite; - } - if (free > todo) - free = todo; - - if (split < free) { - if (!usermem) - memcpy(rbuf->data+rbuf->pwrite, buf, split); - else - if (copy_from_user(rbuf->data+rbuf->pwrite, - buf, split)) - return -EFAULT; - buf += split; - todo -= split; - free -= split; - rbuf->pwrite = 0; - } - if (!usermem) - memcpy(rbuf->data+rbuf->pwrite, buf, free); - else - if (copy_from_user(rbuf->data+rbuf->pwrite, buf, free)) - return -EFAULT; - rbuf->pwrite = (rbuf->pwrite + free)%rbuf->size; - todo -= free; - buf += free; - } - - return count-todo; -} - -#if 0 -static void -ring_buffer_put(ring_buffer_t *db, u8 *buf, int len) -{ - int split, fsize; - - fsize=db->pread - db->pwrite; - if (fsize <= 0) { - fsize+=db->size; - split=db->size-db->pwrite; - } else - split=0; - if (len>=fsize) { - dprintk("buffer overflow\n"); - return; - } - if (split>=len) - split=0; - if (split) { - memcpy(db->data + db->pwrite, buf, split); - len-=split; - db->pwrite=0; - } - memcpy(db->data + db->pwrite, split + buf, len); - db->pwrite=(db->pwrite+len)%db->size; -} -#endif - - -/**************************************************************************** - * TT budget / WinTV Nova - ****************************************************************************/ - -static int -TTBStop(av7110_t *av7110) -{ - if (--av7110->feeding) - return av7110->feeding; - saa7146_write(av7110->saa_mem, MC1, MASK_20); // DMA3 off - saa7146_write(av7110->saa_mem, MC1, MASK_28); // RPS0 off - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~MASK_10 ); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER)& ~MASK_07); - return 0; -} - -#define TS_WIDTH (4*188) -#define TS_HEIGHT (1024/4) -static int -TTBStart(av7110_t *av7110) -{ - struct saa7146 *saa=av7110->saa; - - //printk ("function : %s\n", __FUNCTION__); - if (av7110->feeding) - return ++av7110->feeding; - - saa7146_write(saa->mem, MC1, MASK_20); // DMA3 off - - memset(saa->grabbing, 0x00, TS_HEIGHT*TS_WIDTH); - - saa7146_write(saa->mem, PCI_BT_V1, 0x001c0000); - - av7110->tsf=0; - av7110->ttbp=0; - saa7146_write(saa->mem, DD1_INIT, 0x02000680); - saa7146_write(saa->mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - saa7146_write(saa->mem, BRS_CTRL, 0x60000000); - saa7146_write(saa->mem, MC2, (MASK_08 | MASK_24)); - mdelay(10); - - saa7146_write(saa->mem, BASE_ODD3, 0); - saa7146_write(saa->mem, BASE_EVEN3, TS_WIDTH*TS_HEIGHT/2); - saa7146_write(saa->mem, PROT_ADDR3, TS_WIDTH*TS_HEIGHT); - saa7146_write(saa->mem, BASE_PAGE3, virt_to_bus(saa->page_table[0])|ME1|0xb0); - saa7146_write(saa->mem, PITCH3, TS_WIDTH); - - saa7146_write(saa->mem, NUM_LINE_BYTE3, ((TS_HEIGHT/2)<<16)|TS_WIDTH); - saa7146_write(saa->mem, MC2, (MASK_04 | MASK_20)); - - // VPE - saa7146_write(saa->mem, IER, saa7146_read(saa->mem, IER)|MASK_10); - - saa7146_write(saa->mem, MC1, (MASK_04 | MASK_20)); // DMA3 on - - // FIDB - saa7146_write(saa->mem, IER, saa7146_read(saa->mem, IER)|MASK_07); - - return ++av7110->feeding; -} - -/** - * Hack! we save the last av7110 ptr. This should be ok, since - * you rarely will use more then one IR control. - * - * If we want to support multiple controls we would have to do much more... - */ -void av7110_setup_irc_config (av7110_t *av7110, u32 ir_config) -{ - static av7110_t *last; - - if (!av7110) - av7110 = last; - else - last = av7110; - - outcom(av7110, COMTYPE_PIDFILTER, SetIR, 1, ir_config); -} - -static void (*irc_handler)(u32); - -void av7110_register_irc_handler(void (*func)(u32)) -{ - //dprintk("registering %08x\n",func); - irc_handler = func; -} - -void av7110_unregister_irc_handler(void (*func)(u32)) -{ - //dprintk("unregistering %08x\n",func); - irc_handler = NULL; -} - -void run_handlers(unsigned long ircom) -{ - if (irc_handler != NULL) - (*irc_handler)((u32) ircom); -} - -DECLARE_TASKLET(irtask,run_handlers,0); - -void IR_handle(av7110_t *av7110, u32 ircom) -{ - dprintk("av7110: ircommand = %08x\n", ircom); - irtask.data = (unsigned long) ircom; - tasklet_schedule(&irtask); -} - -/**************************************************************************** - * IRQ handling - ****************************************************************************/ - -void CI_handle(av7110_t *av7110, u8 *data, u16 len) -{ - //CI_out(av7110, data, len); - - if (len<3) - return; - switch (data[0]) { - case CI_MSG_CI_INFO: - if (data[2]!=1 && data[2]!=2) - break; - switch (data[1]) { - case 0: - av7110->ci_slot[data[2]-1].flags=0; - break; - case 1: - av7110->ci_slot[data[2]-1].flags|=CA_CI_MODULE_PRESENT; - break; - case 2: - av7110->ci_slot[data[2]-1].flags|=CA_CI_MODULE_READY; - break; - } - break; - case CI_SWITCH_PRG_REPLY: - //av7110->ci_stat=data[1]; - break; - default: - break; - } - -} - -static inline int -DvbDmxFilterCallback(u8 * buffer1, size_t buffer1_len, - u8 * buffer2, size_t buffer2_len, - struct dvb_demux_filter *dvbdmxfilter, - dmx_success_t success, - av7110_t *av7110) -{ - if (!dvbdmxfilter->feed->demux->dmx.frontend) - return 0; - if (dvbdmxfilter->feed->demux->dmx.frontend->source==DMX_MEMORY_FE) - return 0; - - switch(dvbdmxfilter->type) { - case DMX_TYPE_SEC: - if ((((buffer1[1]<<8)|buffer1[2])&0xfff)+3!=buffer1_len) - return 0; - if (dvbdmxfilter->doneq) { - dmx_section_filter_t *filter=&dvbdmxfilter->filter; - int i; - u8 xor, neq=0; - - for (i=0; ifilter_value[i]^buffer1[i]; - neq|=dvbdmxfilter->maskandnotmode[i]&xor; - } - if (!neq) - return 0; - } - return dvbdmxfilter->feed->cb.sec(buffer1, buffer1_len, - buffer2, buffer2_len, - &dvbdmxfilter->filter, - DMX_OK); - case DMX_TYPE_TS: - if (!(dvbdmxfilter->feed->ts_type & TS_PACKET)) - return 0; - if (dvbdmxfilter->feed->ts_type & TS_PAYLOAD_ONLY) - return dvbdmxfilter->feed->cb.ts(buffer1, buffer1_len, - buffer2, buffer2_len, - &dvbdmxfilter->feed->feed.ts, - DMX_OK); - else - pes_to_ts(buffer1, buffer1_len, - dvbdmxfilter->feed->pid, - &av7110->p2t_filter[dvbdmxfilter->index]); - default: - return 0; - } -} - - -u8 pshead[0x26] = { - 0x00, 0x00, 0x01, 0xba, 0x5f, 0xff, 0xfe, 0xe6, - 0xc4, 0x01, 0x01, 0x89, 0xc3, 0xf8, 0x00, 0x00, - 0x01, 0xbb, 0x00, 0x12, 0x80, 0xc4, 0xe1, 0x00, - 0xe1, 0xff, 0xb9, 0xe0, 0xe8, 0xb8, 0xc0, 0x20, - 0xbd, 0xe0, 0x44, 0xbf, 0xe0, 0x02, -}; - - -static void vpeirq (unsigned long data) -{ - //printk("vpeirq %08x\n", saa7146_read(av7110->saa_mem, PCI_VDP3)); -} - -#if 0 -static void fidbirq(struct saa7146* saa, void *data) -{ - av7110_t *av7110=(av7110_t *) data; - u8 *mem; - - mem=(av7110->tsf ? TS_HEIGHT*TS_WIDTH/2 :0)+(u8 *)av7110->saa->grabbing; - - // FIXME: think of something better without busy waiting - if (av7110->tsf) - while (saa7146_read(av7110->saa_mem, PCI_VDP3)>0x20000); - else - while (saa7146_read(av7110->saa_mem, PCI_VDP3)<0x17800); - - av7110->tsf^=1; - saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600|(av7110->tsf ? 0x40:0x80)); - saa7146_write(av7110->saa_mem, MC2, - (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - // FIXME: use bottom half or tasklet - if (av7110->feeding && mem[0]==0x47) - dvb_dmx_swfilter_packets(&av7110->demux, mem, 512); -} -#else -static -void fidbirq (unsigned long data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - u8 *mem=(u8 *)(av7110->saa->grabbing); - int num; - u32 dmapos; - - dmapos=saa7146_read(av7110->saa_mem, PCI_VDP3); - dmapos-=(dmapos%188); - - if (av7110->tsf) { - mem+=av7110->ttbp; - if (dmapos<0x20000) { - num=1024-av7110->ttbp/188; - av7110->ttbp=0; - } else { - num=(dmapos - av7110->ttbp)/188; - av7110->ttbp=dmapos; - } - } else { - if (av7110->ttbp>1000*188 && av7110->ttbp<1024*188) { - if (av7110->feeding) - dvb_dmx_swfilter_packets(&av7110->demux, - mem+av7110->ttbp, - 1024- av7110->ttbp / 188); - } - num=dmapos/188; - av7110->ttbp=dmapos; - } - - av7110->tsf^=1; - saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600|(av7110->tsf ? 0x40:0x80)); - saa7146_write(av7110->saa_mem, MC2, - (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - // FIXME: use bottom half or tasklet - if (av7110->feeding && mem[0]==0x47) - dvb_dmx_swfilter_packets(&av7110->demux, mem, num); -} -#endif - -//#define DEBUG_TIMING -inline static void -print_time(char *s) -{ -#ifdef DEBUG_TIMING - struct timeval tv; - do_gettimeofday(&tv); - printk("%s: %d.%d\n", s, (int)tv.tv_sec, (int)tv.tv_usec); -#endif -} - -static void -ci_get_data(ring_buffer_t *cibuf, u8 *data, int len) -{ - int free, split=0, pread=cibuf->pread; - - free=pread-cibuf->pwrite; - if (free<=0) - free+=cibuf->size; - if (free<=len+2) - return; - cibuf->data[cibuf->pwrite]=(len>>8); - cibuf->data[(cibuf->pwrite+1)%cibuf->size]=(len&0xff); - cibuf->pwrite=(cibuf->pwrite+2)%cibuf->size; - - if (pread<=cibuf->pwrite) - split=cibuf->size-cibuf->pwrite; - if (split && splitdata + cibuf->pwrite, data, split); - memcpy(cibuf->data, data+split, len-split); - } else - memcpy(cibuf->data + cibuf->pwrite, data, len); - cibuf->pwrite=(cibuf->pwrite+len)%cibuf->size; - - wake_up_interruptible(&cibuf->queue); -} - -static -void debiirq (unsigned long data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - int type=av7110->debitype; - int handle=(type>>8)&0x1f; - - print_time("debi"); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~MASK_19 ); - saa7146_write(av7110->saa_mem, ISR, MASK_19 ); - - if (type==-1) { - printk("DEBI irq oops\n"); - ARM_ClearMailBox(av7110); - ARM_ClearIrq(av7110); - return; - } - av7110->debitype=-1; - - switch (type&0xff) { - - case DATA_TS_RECORD: - dvb_dmx_swfilter_packets(&av7110->demux, - (const u8 *)av7110->debi_virt, - av7110->debilen/188); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - break; - - case DATA_PES_RECORD: - if (av7110->demux.recording) - record_cb(&av7110->p2t[handle], - (u8 *)av7110->debi_virt, - av7110->debilen); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_IPMPE: - case DATA_FSECTION: - case DATA_PIPING: - if (av7110->handle2filter[handle]) - DvbDmxFilterCallback((u8 *)av7110->debi_virt, - av7110->debilen, 0, 0, - av7110->handle2filter[handle], - DMX_OK, av7110); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_GET: - { - u8 *data=av7110->debi_virt; - - if ((data[0]<2) && data[2]==0xff) { - int flags=0; - if (data[5]>0) - flags|=CA_CI_MODULE_PRESENT; - if (data[5]>5) - flags|=CA_CI_MODULE_READY; - av7110->ci_slot[data[0]].flags=flags; - } else - ci_get_data(&av7110->ci_rbuffer, - av7110->debi_virt, - av7110->debilen); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - } - - case DATA_COMMON_INTERFACE: - CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen); -#if 0 - { - int i; - - printk("av7110%d: ", av7110->num); - printk("%02x ", *(u8 *)av7110->debi_virt); - printk("%02x ", *(1+(u8 *)av7110->debi_virt)); - for (i=2; idebilen; i++) - printk("%02x ", (*(i+(unsigned char *)av7110->debi_virt))); - for (i=2; idebilen; i++) - printk("%c", chtrans(*(i+(unsigned char *)av7110->debi_virt))); - - printk("\n"); - } -#endif - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_DEBUG_MESSAGE: - ((s8*)av7110->debi_virt)[Reserved_SIZE-1]=0; - printk("%s\n", (s8 *)av7110->debi_virt); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_PUT: - case DATA_MPEG_PLAY: - case DATA_BMP_LOAD: - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - default: - break; - } - spin_lock(&av7110->debilock); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); -} - -static int -pes_play(void *dest, ring_buffer_t *buf, int dlen) -{ - int len, split=0; - u32 sync; - u16 blen; - - dprintk ("function : %s\n", __FUNCTION__); - if (!dlen) { - wake_up(&buf->queue); - return -1; - } - while (1) { - if ((len=ring_buffer_avail(buf)) < 6) - return -1; - sync=(buf->data[buf->pread])<<24; - sync|=(buf->data[(buf->pread+1)%buf->size]<<16); - sync|=(buf->data[(buf->pread+2)%buf->size]<<8); - sync|=buf->data[(buf->pread+3)%buf->size]; - - if (((sync&~0x1f)==0x000001e0) || - ((sync&~0x1f)==0x000001c0) || - (sync==0x000001bd)) - break; - printk("resync\n"); - buf->pread=(buf->pread+1)%buf->size; - } - blen=(buf->data[(buf->pread+4)%buf->size]<<8); - blen|=buf->data[(buf->pread+5)%buf->size]; - blen+=6; - if (len dlen) { - printk("buffer empty\n"); - wake_up(&buf->queue); - return -1; - } -/* if (blen>2048) { - buf->pread=(buf->pread+blen)%buf->size; - printk("packet too large\n"); - return -1; - } -*/ - len=blen; - if (buf->pread + len > buf->size) - split=buf->size-buf->pread; - if (split>0) { - memcpy(dest, buf->data+buf->pread, split); - buf->pread=0; - len-=split; - } - memcpy(split + dest, - buf->data + buf->pread, len); - buf->pread = (buf->pread +len)%buf->size; - - dprintk ("function: %s pread=%08x pwrite=%08x\n", __FUNCTION__, - buf->pread, buf->pwrite); - wake_up(&buf->queue); - return blen; -} - -static -void gpioirq (unsigned long data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - u32 rxbuf, txbuf; - int len; - - //printk("GPIO0 irq\n"); - - if (av7110->debitype !=-1) - printk("GPIO0 irq oops\n"); - - spin_lock(&av7110->debilock); - - ARM_ClearIrq(av7110); - - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~MASK_19 ); - saa7146_write(av7110->saa_mem, ISR, MASK_19 ); - - av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2); - av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - av7110->debibuf = 0; - rxbuf=irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - txbuf=irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - len=(av7110->debilen+3)&(~3); - - dprintk("GPIO0 irq %d %d\n", av7110->debitype, av7110->debilen); - print_time("gpio"); - - dprintk("GPIO0 irq %02x\n", av7110->debitype&0xff); - switch (av7110->debitype&0xff) { - - case DATA_TS_PLAY: - case DATA_PES_PLAY: - break; - - case DATA_CI_PUT: - { - int avail, split=0, pwrite; - ring_buffer_t *cibuf=&av7110->ci_wbuffer; - - pwrite=cibuf->pwrite; - avail=pwrite-cibuf->pread; - if (avail<0) - avail+=cibuf->size; - if (avail<=2) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - len=(cibuf->data[cibuf->pread]<<8); - len|=cibuf->data[(cibuf->pread+1)%cibuf->size]; - if (availpread=(cibuf->pread+2)%cibuf->size; - - if (pwritepread) - split=cibuf->size-cibuf->pread; - if (split && splitdebi_virt, cibuf->data+cibuf->pread, split); - memcpy(av7110->debi_virt+split, cibuf->data, todo); - } else - memcpy(av7110->debi_virt, cibuf->data+cibuf->pread, len); - cibuf->pread=(cibuf->pread+len)%cibuf->size; - wake_up(&cibuf->queue); - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - wait_for_debi_done(av7110); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19 ); - if (len<5) len=5; /* we want a real DEBI DMA */ - iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); - spin_unlock(&av7110->debilock); - return; - } - - case DATA_MPEG_PLAY: - if (!av7110->playing) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - len=0; - if (av7110->debitype&0x100) { - spin_lock(&av7110->aout.lock); - len=pes_play(av7110->debi_virt, &av7110->aout, 2048); - spin_unlock(&av7110->aout.lock); - } - if (len<=0 && (av7110->debitype&0x200) - &&av7110->videostate.play_state!=VIDEO_FREEZED) { - spin_lock(&av7110->avout.lock); - len=pes_play(av7110->debi_virt, &av7110->avout, 2048); - spin_unlock(&av7110->avout.lock); - } - if (len<=0) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - dprintk("GPIO0 PES_PLAY len=%04x\n", len); - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - wait_for_debi_done(av7110); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19 ); - - iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); - spin_unlock(&av7110->debilock); - return; - - case DATA_BMP_LOAD: - len=av7110->debilen; - if (!len) { - av7110->bmp_state=BMP_LOADED; - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - wake_up(&av7110->bmpq); - break; - } - if (len>av7110->bmplen) - len=av7110->bmplen; - if (len>2*1024) - len=2*1024; - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len); - av7110->bmpp+=len; - av7110->bmplen-=len; - wait_for_debi_done(av7110); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19 ); - if (len<5) len=5; /* we want a real DEBI DMA */ - iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_GET: - case DATA_COMMON_INTERFACE: - case DATA_FSECTION: - case DATA_IPMPE: - case DATA_PIPING: - if (!len || len>4*1024) { - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - } /* yes, fall through */ - case DATA_TS_RECORD: - case DATA_PES_RECORD: - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19); - irdebi(av7110, DEBISWAB, DPRAM_BASE+rxbuf, 0, len); - spin_unlock(&av7110->debilock); - return; - - case DATA_DEBUG_MESSAGE: - if (!len || len>0xff) { - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - } - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19); - irdebi(av7110, DEBISWAB, Reserved, 0, len); - spin_unlock(&av7110->debilock); - return; - - case DATA_IRCOMMAND: - IR_handle(av7110, - swahw32(irdebi(av7110, DEBINOSWAP, Reserved, 0, 4))); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - - default: - printk("gpioirq unknown type=%d len=%d\n", - av7110->debitype, av7110->debilen); - break; - } - ARM_ClearMailBox(av7110); - av7110->debitype=-1; - spin_unlock(&av7110->debilock); - dprintk("GPIO0 irq exit 0\n"); -} - - -/**************************************************************************** - * DEBI command polling - ****************************************************************************/ - - -static int OutCommand(av7110_t *av7110, u16* buf, int length) -{ - int i; - u32 start; - - if (!av7110->arm_ready) - return -1; - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2 ) ) - { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_FREE) { - printk("outcommand error 1\n"); - //arm_error(av7110); - return -1; - } - } - -#ifndef _NOHANDSHAKE - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) - { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_SHAKE) { - printk("outcommand error 2\n"); - //arm_error(av7110); - return -1; - } - } -#endif - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2) & OSDQFull ) - { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_OSD) - { - printk("outcommand error 3\n"); - //arm_error(av7110); - return -1; - } - } - for (i=2; iarm_ready) - return -1; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - - ret=OutCommand(av7110, buf, length); - up(&av7110->dcomlock); - return ret; -} - - -static int outcom(av7110_t *av7110, int type, int com, int num, ...) -{ - va_list args; - u16 buf[num+2]; - int i; - - buf[0]=(( type << 8 ) | com); - buf[1]=num; - - if (num) { - va_start(args, num); - for (i=0; iarm_ready) - return -1; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - - if ((err = OutCommand(av7110, Buff, length)) < 0) { - up(&av7110->dcomlock); - return err; - } - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2) ) - { -#ifdef _NOHANDSHAKE - ddelay(1); -#endif - if ((jiffies - start) > ARM_WAIT_FREE) { - printk("commandrequest error 1\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } - -#ifndef _NOHANDSHAKE - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_SHAKE) { - printk("commandrequest error 2\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } -#endif - - for (i=0; idcomlock); - return 0; -} - - -static inline int -RequestParameter(av7110_t *av7110, u16 tag, u16* Buff, s16 length) -{ - return CommandRequest(av7110, &tag, 0, Buff, length); -} - - -/**************************************************************************** - * Firmware commands - ****************************************************************************/ - - -inline static int -SendDAC(av7110_t *av7110, u8 addr, u8 data) -{ - return outcom(av7110, COMTYPE_AUDIODAC, AudioDAC, 2, addr, data); -} - -static int -SetVolume(av7110_t *av7110, int volleft, int volright) -{ - int err; - - switch (av7110->adac_type) { - case DVB_ADAC_TI: - volleft=(volleft*256)/946; - volright=(volright*256)/946; - if (volleft > 0x45) - volleft=0x45; - if (volright > 0x45) - volright=0x45; - err=SendDAC(av7110, 3, 0x80 + volleft); - if (err) - return err; - return SendDAC(av7110, 4, volright); - - case DVB_ADAC_CRYSTAL: - volleft=127-volleft/2; - volright=127-volright/2; - i2c_writereg(av7110, 0x20, 0x03, volleft); - i2c_writereg(av7110, 0x20, 0x04, volright); - return 0; - } - return 0; -} - -#ifdef CONFIG_DVB_AV7110_OSD - -inline static int ResetBlend(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, SetNonBlend, 1, windownr); -} - -inline static int SetColorBlend(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, SetCBlend, 1, windownr); -} - -inline static int SetWindowBlend(av7110_t *av7110, u8 windownr, u8 blending) -{ - return outcom(av7110, COMTYPE_OSD, SetWBlend, 2, windownr, blending); -} - -inline static int SetBlend_(av7110_t *av7110, u8 windownr, - OSDPALTYPE colordepth, u16 index, u8 blending) -{ - return outcom(av7110, COMTYPE_OSD, SetBlend, 4, - windownr, colordepth, index, blending); -} - -inline static int SetColor_(av7110_t *av7110, u8 windownr, - OSDPALTYPE colordepth, u16 index, u16 colorhi, u16 colorlo) -{ - return outcom(av7110, COMTYPE_OSD, SetColor, 5, - windownr, colordepth, index, colorhi, colorlo); -} - -inline static int BringToTop(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, WTop, 1, windownr); -} - -inline static int SetFont(av7110_t *av7110, u8 windownr, u8 fontsize, - u16 colorfg, u16 colorbg) -{ - return outcom(av7110, COMTYPE_OSD, Set_Font, 4, - windownr, fontsize, colorfg, colorbg); -} - -static int FlushText(av7110_t *av7110) -{ - u32 start; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_OSD) { - printk("outtext error\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } - up(&av7110->dcomlock); - return 0; -} - -static int WriteText(av7110_t *av7110, u8 win, u16 x, u16 y, u8* buf) -{ - int i, ret; - u32 start; - int length=strlen(buf)+1; - u16 cbuf[5] = { (COMTYPE_OSD<<8) + DText, 3, win, x, y }; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_OSD) { - printk("outtext error\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } -#ifndef _NOHANDSHAKE - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_SHAKE) { - printk("outtext error\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } -#endif - for (i=0; idcomlock); - return ret; -} - -inline static int DrawLine(av7110_t *av7110, u8 windownr, - u16 x, u16 y, u16 dx, u16 dy, u16 color) -{ - return outcom(av7110, COMTYPE_OSD, DLine, 6, - windownr, x, y, dx, dy, color); -} - -inline static int DrawBlock(av7110_t *av7110, u8 windownr, - u16 x, u16 y, u16 dx, u16 dy, u16 color) -{ - return outcom(av7110, COMTYPE_OSD, DBox, 6, - windownr, x, y, dx, dy, color); -} - -inline static int HideWindow(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, WHide, 1, windownr); -} - -inline static int MoveWindowRel(av7110_t *av7110, u8 windownr, u16 x, u16 y) -{ - return outcom(av7110, COMTYPE_OSD, WMoveD, 3, windownr, x, y); -} - -inline static int MoveWindowAbs(av7110_t *av7110, u8 windownr, u16 x, u16 y) -{ - return outcom(av7110, COMTYPE_OSD, WMoveA, 3, windownr, x, y); -} - -inline static int DestroyOSDWindow(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, WDestroy, 1, windownr); -} - -#if 0 -static void DestroyOSDWindows(av7110_t *av7110) -{ - int i; - - for (i=1; i<7; i++) - outcom(av7110, COMTYPE_OSD, WDestroy, 1, i); -} -#endif - -static inline int -CreateOSDWindow(av7110_t *av7110, u8 windownr, - DISPTYPE disptype, u16 width, u16 height) -{ - return outcom(av7110, COMTYPE_OSD, WCreate, 4, - windownr, disptype, width, height); -} - - -static OSDPALTYPE bpp2pal[8]={Pal1Bit, Pal2Bit, 0, Pal4Bit, 0, 0, 0, Pal8Bit}; -static DISPTYPE bpp2bit[8]={BITMAP1, BITMAP2, 0, BITMAP4, 0, 0, 0, BITMAP8}; - -static inline int -LoadBitmap(av7110_t *av7110, u16 format, u16 dx, u16 dy, int inc, u8* data) -{ - int bpp; - int i; - int d, delta; - u8 c; - DECLARE_WAITQUEUE(wait, current); - - if (av7110->bmp_state==BMP_LOADING) { - add_wait_queue(&av7110->bmpq, &wait); - while (1) { - set_current_state(TASK_INTERRUPTIBLE); - if (av7110->bmp_state!=BMP_LOADING - || signal_pending(current)) - break; - schedule(); - } - current->state=TASK_RUNNING; - remove_wait_queue(&av7110->bmpq, &wait); - } - if (av7110->bmp_state==BMP_LOADING) - return -1; - av7110->bmp_state=BMP_LOADING; - if (format==BITMAP8) { bpp=8; delta = 1; } - else if (format==BITMAP4) { bpp=4; delta = 2; } - else if (format==BITMAP2) { bpp=2; delta = 4; } - else if (format==BITMAP1) { bpp=1; delta = 8; } - else { - av7110->bmp_state=BMP_NONE; - return -1; - } - av7110->bmplen= ((dx*dy*bpp+7)&~7)/8; - av7110->bmpp=0; - if (av7110->bmplen>32768) { - av7110->bmp_state=BMP_NONE; - return -1; - } - for (i=0; ibmpbuf+1024+i*dx, data+i*inc, dx)) { - av7110->bmp_state=BMP_NONE; - return -1; - } - } - if (format != BITMAP8) { - for (i=0; ibmpbuf)[1024+i*delta+delta-1]; - for (d=delta-2; d>=0; d--) { - c |= (((u8 *)av7110->bmpbuf)[1024+i*delta+d] - << ((delta-d-1)*bpp)); - ((u8 *)av7110->bmpbuf)[1024+i] = c; - } - } - } - av7110->bmplen+=1024; - return outcom(av7110, COMTYPE_OSD, LoadBmp, 3, format, dx, dy); -} - -static int -BlitBitmap(av7110_t *av7110, u16 win, u16 x, u16 y, u16 trans) -{ - DECLARE_WAITQUEUE(wait, current); - - if (av7110->bmp_state==BMP_NONE) - return -1; - if (av7110->bmp_state==BMP_LOADING) { - add_wait_queue(&av7110->bmpq, &wait); - while (1) { - set_current_state(TASK_INTERRUPTIBLE); - if (av7110->bmp_state!=BMP_LOADING - || signal_pending(current)) - break; - schedule(); - } - current->state=TASK_RUNNING; - remove_wait_queue(&av7110->bmpq, &wait); - } - if (av7110->bmp_state==BMP_LOADED) - return outcom(av7110, COMTYPE_OSD, BlitBmp, 4, win, x, y, trans); - return -1; -} - -static inline int -ReleaseBitmap(av7110_t *av7110) -{ - if (av7110->bmp_state!=BMP_LOADED) - return -1; - av7110->bmp_state=BMP_NONE; - return outcom(av7110, COMTYPE_OSD, ReleaseBmp, 0); -} - -static u32 RGB2YUV(u16 R, u16 G, u16 B) -{ - u16 y, u, v; - u16 Y, Cr, Cb; - - y = R * 77 + G * 150 + B * 29; // Luma=0.299R+0.587G+0.114B 0..65535 - u = 2048+B * 8 -(y>>5); // Cr 0..4095 - v = 2048+R * 8 -(y>>5); // Cb 0..4095 - - Y=y/256; - Cb=u/16; - Cr=v/16; - - return Cr|(Cb<<16)|(Y<<8); -} - -static void -OSDSetColor(av7110_t *av7110, u8 color, u8 r, u8 g, u8 b, u8 blend) -{ - u16 ch, cl; - u32 yuv; - - yuv=blend ? RGB2YUV(r,g,b) : 0; - cl=(yuv&0xffff); - ch=((yuv>>16)&0xffff); - SetColor_(av7110, av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], - color, ch, cl); - SetBlend_(av7110, av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], - color, ((blend>>4)&0x0f)); -} - -static int -OSDSetBlock(av7110_t *av7110, int x0, int y0, int x1, int y1, int inc, u8 *data) -{ - uint w, h, bpp, bpl, size, lpb, bnum, brest; - int i; - - w=x1-x0+1; h=y1-y0+1; - if (inc<=0) - inc=w; - if (w<=0 || w>720 || h<=0 || h>576) - return -1; - bpp=av7110->osdbpp[av7110->osdwin]+1; - bpl=((w*bpp+7)&~7)/8; - size=h*bpl; - lpb=(32*1024)/bpl; - bnum=size/(lpb*bpl); - brest=size-bnum*lpb*bpl; - - for (i=0; iosdbpp[av7110->osdwin]], w, lpb, inc, data); - BlitBitmap(av7110, av7110->osdwin, x0, y0+i*lpb, 0); - data+=lpb*inc; - } - if (brest) { - LoadBitmap(av7110, bpp2bit[av7110->osdbpp[av7110->osdwin]], w, brest/bpl, inc, data); - BlitBitmap(av7110, av7110->osdwin, x0, y0+bnum*lpb, 0); - } - ReleaseBitmap(av7110); - return 0; -} - -static int -OSD_DrawCommand(av7110_t *av7110, osd_cmd_t *dc) -{ - switch (dc->cmd) { - case OSD_Close: - DestroyOSDWindow(av7110, av7110->osdwin); - return 0; - case OSD_Open: - av7110->osdbpp[av7110->osdwin]=(dc->color-1)&7; - CreateOSDWindow(av7110, av7110->osdwin, bpp2bit[av7110->osdbpp[av7110->osdwin]], - dc->x1-dc->x0+1, dc->y1-dc->y0+1); - if (!dc->data) { - MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0); - SetColorBlend(av7110, av7110->osdwin); - } - return 0; - case OSD_Show: - MoveWindowRel(av7110, av7110->osdwin, 0, 0); - return 0; - case OSD_Hide: - HideWindow(av7110, av7110->osdwin); - return 0; - case OSD_Clear: - DrawBlock(av7110, av7110->osdwin, 0, 0, 720, 576, 0); - return 0; - case OSD_Fill: - DrawBlock(av7110, av7110->osdwin, 0, 0, 720, 576, dc->color); - return 0; - case OSD_SetColor: - OSDSetColor(av7110, dc->color, dc->x0, dc->y0, dc->x1, dc->y1); - return 0; - case OSD_SetPalette: - { - int i, len=dc->x0-dc->color+1; - u8 *colors=(u8 *)dc->data; - - for (i=0; icolor+i, - colors[i*4] , colors[i*4+1], - colors[i*4+2], colors[i*4+3]); - return 0; - } - case OSD_SetTrans: - return 0; - case OSD_SetPixel: - DrawLine(av7110, av7110->osdwin, - dc->x0, dc->y0, 0, 0, - dc->color); - return 0; - case OSD_GetPixel: - return 0; - - case OSD_SetRow: - dc->y1=dc->y0; - case OSD_SetBlock: - OSDSetBlock(av7110, dc->x0, dc->y0, dc->x1, dc->y1, dc->color, dc->data); - return 0; - - case OSD_FillRow: - DrawBlock(av7110, av7110->osdwin, dc->x0, dc->y0, - dc->x1-dc->x0+1, dc->y1, - dc->color); - return 0; - case OSD_FillBlock: - DrawBlock(av7110, av7110->osdwin, dc->x0, dc->y0, - dc->x1-dc->x0+1, dc->y1-dc->y0+1, - dc->color); - return 0; - case OSD_Line: - DrawLine(av7110, av7110->osdwin, - dc->x0, dc->y0, dc->x1-dc->x0, dc->y1-dc->y0, - dc->color); - return 0; - case OSD_Query: - return 0; - case OSD_Test: - return 0; - case OSD_Text: - { - char textbuf[240]; - - if (strncpy_from_user(textbuf, dc->data, 240)<0) - return -EFAULT; - textbuf[239]=0; - if (dc->x1>3) - dc->x1=3; - SetFont(av7110, av7110->osdwin, dc->x1, - (u16) (dc->color&0xffff), (u16) (dc->color>>16)); - FlushText(av7110); - WriteText(av7110, av7110->osdwin, dc->x0, dc->y0, textbuf); - return 0; - } - case OSD_SetWindow: - if (dc->x0<1 || dc->x0>7) - return -EINVAL; - av7110->osdwin=dc->x0; - return 0; - case OSD_MoveWindow: - MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0); - SetColorBlend(av7110, av7110->osdwin); - return 0; - default: - return -EINVAL; - } -} -#endif /* CONFIG_DVB_AV7110_OSD */ - - -/* get version of the firmware ROM, RTSL, video ucode and ARM application */ - -static void -firmversion(av7110_t *av7110) -{ - u16 buf[20]; - - u16 tag = ((COMTYPE_REQUEST << 8) + ReqVersion); - - RequestParameter(av7110, tag, buf, 16); - - av7110->arm_fw=(buf[0] << 16) + buf[1]; - av7110->arm_rtsl=(buf[2] << 16) + buf[3]; - av7110->arm_vid=(buf[4] << 16) + buf[5]; - av7110->arm_app=(buf[6] << 16) + buf[7]; - av7110->avtype=(buf[8] << 16) + buf[9]; - - printk ("DVB: AV711%d(%d) - firm %08x, rtsl %08x, vid %08x, app %08x\n", - av7110->avtype, av7110->saa->dvb_adapter->num, av7110->arm_fw, - av7110->arm_rtsl, av7110->arm_vid, av7110->arm_app); - - return; -} - -static int -waitdebi(av7110_t *av7110, int adr, int state) -{ - int k; - - for (k=0; k<100; k++, udelay(500)) { - if (irdebi(av7110, DEBINOSWAP, adr, 0, 2) == state) - return 0; - } - return -1; -} - - -static int -load_dram(av7110_t *av7110, u32 *data, int len) -{ - int i; - int blocks, rest; - u32 base, bootblock=BOOT_BLOCK; - - blocks=len/BOOT_MAX_SIZE; - rest=len % BOOT_MAX_SIZE; - base=DRAM_START_CODE; - - for (i=0; i 0) { - if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BUFFER_EMPTY) < 0) - return -1; - if (rest>4) - iwdebi(av7110, DEBISWAB, bootblock, i*(BOOT_MAX_SIZE)+(u32)data, rest); - else - iwdebi(av7110, DEBISWAB, bootblock, i*(BOOT_MAX_SIZE)-4+(u32)data, rest+4); - - iwdebi(av7110, DEBISWAB, BOOT_BASE, swab32(base), 4); - iwdebi(av7110, DEBINOSWAP, BOOT_SIZE, rest, 2); - iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); - } - if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BUFFER_EMPTY) < 0) - return -1; - iwdebi(av7110, DEBINOSWAP, BOOT_SIZE, 0, 2); - iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); - if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BOOT_COMPLETE) < 0) - return -1; - return 0; -} - - -static u8 -bootcode[] = { - 0xea, 0x00, 0x00, 0x0e, 0xe1, 0xb0, 0xf0, 0x0e, /* 0x0000 */ - 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x08, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, - 0x2c, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0x5a, 0x5a, - 0x00, 0x1f, 0x15, 0x55, 0x00, 0x00, 0x00, 0x09, - 0xe5, 0x9f, 0xd0, 0x5c, 0xe5, 0x9f, 0x40, 0x54, /* 0x0040 */ - 0xe3, 0xa0, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x00, - 0xe5, 0x84, 0x00, 0x04, 0xe1, 0xd4, 0x10, 0xb0, - 0xe3, 0x51, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xfc, - 0xe1, 0xa0, 0x10, 0x0d, 0xe5, 0x94, 0x30, 0x04, - 0xe1, 0xd4, 0x20, 0xb2, 0xe2, 0x82, 0x20, 0x3f, - 0xe1, 0xb0, 0x23, 0x22, 0x03, 0xa0, 0x00, 0x02, - 0xe1, 0xc4, 0x00, 0xb0, 0x0a, 0xff, 0xff, 0xf4, - 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, /* 0x0080 */ - 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, - 0xe2, 0x52, 0x20, 0x01, 0x1a, 0xff, 0xff, 0xf9, - 0xe2, 0x2d, 0xdb, 0x05, 0xea, 0xff, 0xff, 0xec, - 0x2c, 0x00, 0x03, 0xf8, 0x2c, 0x00, 0x04, 0x00, -}; - -#include "av7110_firm.h" - -static int -bootarm(av7110_t *av7110) -{ - u32 ret; - int i; - - setgpio(av7110, RESET_LINE, GPIO_OUTLO); - - /* Disable DEBI and GPIO irq */ - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & - ~(MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - - /* enable DEBI */ - saa7146_write(av7110->saa_mem, MC1, 0x08800880); - saa7146_write(av7110->saa_mem, DD1_STREAM_B, 0x00000000); - saa7146_write(av7110->saa_mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - /* test DEBI */ - iwdebi(av7110, DEBISWAP, DPRAM_BASE, 0x76543210, 4); - if ((ret=irdebi(av7110, DEBINOSWAP, DPRAM_BASE, 0, 4))!=0x10325476) { - printk("dvb: debi test in bootarm() failed: " - "%08x != %08x\n", ret, 0x10325476);; - return -1; - } - for (i=0; i<8192; i+=4) - iwdebi(av7110, DEBISWAP, DPRAM_BASE+i, 0x00, 4); - dprintk("bootarm: debi test OK\n");; - - /* boot */ - dprintk("bootarm: load boot code\n"); - - setgpio(av7110, ARM_IRQ_LINE, GPIO_IRQLO); - //setgpio(av7110, DEBI_DONE_LINE, GPIO_INPUT); - //setgpio(av7110, 3, GPIO_INPUT); - - iwdebi(av7110, DEBISWAB, DPRAM_BASE, (u32) bootcode, sizeof(bootcode)); - iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); - - wait_for_debi_done(av7110); - setgpio(av7110, RESET_LINE, GPIO_OUTHI); - current->state=TASK_INTERRUPTIBLE; - schedule_timeout(HZ); - - dprintk("bootarm: load dram code\n"); - - if (load_dram(av7110, (u32 *)Root, sizeof(Root))<0) - return -1; - - setgpio(av7110, RESET_LINE, GPIO_OUTLO); - mdelay(1); - - dprintk("bootarm: load dpram code\n"); - - iwdebi(av7110, DEBISWAB, DPRAM_BASE, (u32) Dpram, sizeof(Dpram)); - - wait_for_debi_done(av7110); - - setgpio(av7110, RESET_LINE, GPIO_OUTHI); - mdelay(800); - - //ARM_ClearIrq(av7110); - ARM_ResetMailBox(av7110); - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_03 ); - - av7110->arm_errors=0; - av7110->arm_ready=1; - return 0; -} - -static inline int -SetPIDs(av7110_t *av7110, u16 vpid, u16 apid, u16 ttpid, - u16 subpid, u16 pcrpid) -{ - if (vpid == 0x1fff || apid == 0x1fff || - ttpid == 0x1fff || subpid == 0x1fff || pcrpid == 0x1fff) - vpid = apid = ttpid = subpid = pcrpid = 0; - - return outcom(av7110, COMTYPE_PIDFILTER, MultiPID, 5, - pcrpid, vpid, apid, ttpid, subpid); -} - -static void -ChangePIDs(av7110_t *av7110, u16 vpid, u16 apid, u16 ttpid, - u16 subpid, u16 pcrpid) -{ - if (down_interruptible(&av7110->pid_mutex)) - return; - - if (!(vpid&0x8000)) av7110->pids[DMX_PES_VIDEO]=vpid; - if (!(apid&0x8000)) av7110->pids[DMX_PES_AUDIO]=apid; - if (!(ttpid&0x8000)) av7110->pids[DMX_PES_TELETEXT]=ttpid; - if (!(pcrpid&0x8000)) av7110->pids[DMX_PES_PCR]=pcrpid; - - av7110->pids[DMX_PES_SUBTITLE]=0; - - if (av7110->fe_synced) - SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid); - - up(&av7110->pid_mutex); -} - - -static void -SetMode(av7110_t *av7110, int mode) -{ - outcom(av7110, COMTYPE_ENCODER, LoadVidCode, 1, mode); - - if (!av7110->playing) { - ChangePIDs(av7110, av7110->pids[DMX_PES_VIDEO], - av7110->pids[DMX_PES_AUDIO], - av7110->pids[DMX_PES_TELETEXT], - 0, av7110->pids[DMX_PES_PCR]); - outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); - } -} - -inline static void -TestMode(av7110_t *av7110, int mode) -{ - outcom(av7110, COMTYPE_ENCODER, SetTestMode, 1, mode); -} - -inline static void -VidMode(av7110_t *av7110, int mode) -{ - outcom(av7110, COMTYPE_ENCODER, SetVidMode, 1, mode); -} - - -static inline int -vidcom(av7110_t *av7110, u32 com, u32 arg) -{ - return outcom(av7110, 0x80, 0x02, 4, - (com>>16), (com&0xffff), - (arg>>16), (arg&0xffff)); -} - -static inline int -audcom(av7110_t *av7110, u32 com) -{ - return outcom(av7110, 0x80, 0x03, 4, - (com>>16), (com&0xffff)); -} - -inline static void -Set22K(av7110_t *av7110, int state) -{ - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - outcom(av7110, COMTYPE_AUDIODAC, (state ? ON22K : OFF22K), 0); - if (av7110->saa->card_type==DVB_CARD_TT_BUDGET) - setgpio(av7110, 3, (state ? GPIO_OUTHI : GPIO_OUTLO)); -} - - -/* Diseqc functions only for TT Budget card */ -/* taken from the Skyvision DVB driver by - Ralph Metzler */ - - -inline static void -DiseqcSendBit(av7110_t *av7110, int data) -{ - setgpio(av7110, 3, GPIO_OUTHI); - udelay(data ? 500 : 1000); - setgpio(av7110, 3, GPIO_OUTLO); - udelay(data ? 1000 : 500); -} - -static void -DiseqcSendByte(av7110_t *av7110, int data) -{ - int i, par=1, d; - - for (i=7; i>=0; i--) - { - d=(data>>i)&1; - par^=d; - DiseqcSendBit(av7110, d); - } - DiseqcSendBit(av7110, par); -} - -inline static int -SendDiSEqCMsg(av7110_t *av7110, int len, u8 *msg, int burst) -{ - int i; - - switch (av7110->saa->card_type) { - case DVB_CARD_TT_SIEMENS: - { - u16 buf[18] = { ((COMTYPE_AUDIODAC << 8) + SendDiSEqC), - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - - if (len>10) - len=10; - buf[1] = len+2; - buf[2] = len; - - if (burst!=-1) - buf[3]=burst ? 0x01 : 0x00; - - else - buf[3]=0xffff; - - for (i=0; isaa->i2c_bus; - struct i2c_msg msgs; - - msgs.flags=0; - msgs.addr=id/2; - msgs.len=2; - msgs.buf=msg; - return i2c->xfer (i2c, &msgs, 1); -} - -static inline int -msp_writereg(av7110_t *av7110, u8 dev, u16 reg, u16 val) -{ - u8 msg[5]={ dev, reg>>8, reg&0xff, val>>8 , val&0xff }; - struct dvb_i2c_bus *i2c = av7110->saa->i2c_bus; - struct i2c_msg msgs; - - msgs.flags=0; - msgs.addr=0x40; - msgs.len=5; - msgs.buf=msg; - return i2c->xfer(i2c, &msgs, 1); -} - -static inline u8 -i2c_readreg(av7110_t *av7110, u8 id, u8 reg) -{ - struct dvb_i2c_bus *i2c = av7110->saa->i2c_bus; - u8 mm1[] = {0x00}; - u8 mm2[] = {0x00}; - struct i2c_msg msgs[2]; - - msgs[0].flags=0; - msgs[1].flags=I2C_M_RD; - msgs[0].addr=msgs[1].addr=id/2; - mm1[0]=reg; - msgs[0].len=1; msgs[1].len=1; - msgs[0].buf=mm1; msgs[1].buf=mm2; - i2c->xfer(i2c, msgs, 2); - - return mm2[0]; -} - - -/**************************************************************************** - * I/O buffer management and control - ****************************************************************************/ - -static int sw2mode[16] = { - VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, - VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, VIDEO_MODE_NTSC, - VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, - VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, -}; - -static void -get_video_format(av7110_t *av7110, u8 *buf, int count) -{ - int i; - int hsize,vsize; - int sw; - u8 *p; - - if (av7110->sinfo) - return; - for (i=7; i> 4) | (p[0] << 4); - vsize = ((p[1] &0x0F) << 8) | (p[2]); - sw = (p[3]&0x0F); - SetMode(av7110, sw2mode[sw]); - dprintk("dvb: playback %dx%d fr=%d\n", hsize, vsize, sw); - av7110->sinfo=1; - break; - } -} - -static void -play_video_cb(u8 *buf, int count, void *priv) -{ - av7110_t *av7110=(av7110_t *) priv; - - if ((buf[3]&0xe0)==0xe0) { - get_video_format(av7110, buf, count); - ring_buffer_write(&av7110->avout, buf, count, 0, 0); - } else - ring_buffer_write(&av7110->aout, buf, count, 0, 0); -} - -static void -play_audio_cb(u8 *buf, int count, void *priv) -{ - av7110_t *av7110=(av7110_t *) priv; - - ring_buffer_write(&av7110->aout, buf, count, 0, 0); -} - -#define FREE_COND (ring_buffer_free(&av7110->avout)>=20*1024 && ring_buffer_free(&av7110->aout)>=20*1024) - -static ssize_t -dvb_play(av7110_t *av7110, const u8 *buf, - unsigned long count, int nonblock, int type, int umem) -{ - unsigned long todo = count, n; - - if (!av7110->kbuf[type]) - return -ENOBUFS; - - if (nonblock && !FREE_COND) - return -EWOULDBLOCK; - - while (todo>0) { - if (!FREE_COND) { - if (nonblock) - return count-todo; - if (wait_event_interruptible(av7110->avout.queue, - FREE_COND)) - return count-todo; - } - n=todo; - if (n>IPACKS*2) - n=IPACKS*2; - if (umem) { - if (copy_from_user(av7110->kbuf[type], buf, n)) - return -EFAULT; - dvb_filter_instant_repack(av7110->kbuf[type], n, - &av7110->ipack[type]); - } else { - dvb_filter_instant_repack((u8 *)buf, n, - &av7110->ipack[type]); - } - todo -= n; - buf += n; - } - return count-todo; -} - -static ssize_t -dvb_aplay(av7110_t *av7110, const u8 *buf, - unsigned long count, int nonblock, int type) -{ - unsigned long todo = count, n; - - if (!av7110->kbuf[type]) - return -ENOBUFS; - if (nonblock && ring_buffer_free(&av7110->aout)<20*1024) - return -EWOULDBLOCK; - - while (todo>0) { - if (ring_buffer_free(&av7110->aout)<20*1024) { - if (nonblock) - return count-todo; - if (wait_event_interruptible(av7110->aout.queue, - (ring_buffer_free(&av7110->aout)>= - 20*1024))) - return count-todo; - } - n=todo; - if (n>IPACKS*2) - n=IPACKS*2; - if (copy_from_user(av7110->kbuf[type], buf, n)) - return -EFAULT; - dvb_filter_instant_repack(av7110->kbuf[type], n, - &av7110->ipack[type]); -// memcpy(dvb->kbuf[type], buf, n); - todo -= n; - buf += n; - } - return count-todo; -} - -void init_p2t(p2t_t *p, struct dvb_demux_feed *feed) -{ - memset(p->pes,0,TS_SIZE); - p->counter = 0; - p->pos = 0; - p->frags = 0; - if (feed) p->feed = feed; -} - -void clear_p2t(p2t_t *p) -{ - memset(p->pes,0,TS_SIZE); -// p->counter = 0; - p->pos = 0; - p->frags = 0; -} - - -long int find_pes_header(u8 const *buf, long int length, int *frags) -{ - int c = 0; - int found = 0; - - *frags = 0; - - while (c < length-3 && !found) { - if (buf[c] == 0x00 && buf[c+1] == 0x00 && - buf[c+2] == 0x01) { - switch ( buf[c+3] ) { - - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - case PRIVATE_STREAM1: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - found = 1; - break; - - default: - c++; - break; - } - } else c++; - } - if (c == length-3 && !found){ - if (buf[length-1] == 0x00) *frags = 1; - if (buf[length-2] == 0x00 && - buf[length-1] == 0x00) *frags = 2; - if (buf[length-3] == 0x00 && - buf[length-2] == 0x00 && - buf[length-1] == 0x01) *frags = 3; - return -1; - } - - return c; -} - -void pes_to_ts( u8 const *buf, long int length, u16 pid, p2t_t *p) -{ - int c,c2,l,add; - int check,rest; - - c = 0; - c2 = 0; - if (p->frags){ - check = 0; - switch(p->frags){ - case 1: - if ( buf[c] == 0x00 && buf[c+1] == 0x01 ){ - check = 1; - c += 2; - } - break; - case 2: - if ( buf[c] == 0x01 ){ - check = 1; - c++; - } - break; - case 3: - check = 1; - } - if(check){ - switch ( buf[c] ) { - - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - case PRIVATE_STREAM1: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - p->pes[0] = 0x00; - p->pes[1] = 0x00; - p->pes[2] = 0x01; - p->pes[3] = buf[c]; - p->pos=4; - memcpy(p->pes+p->pos,buf+c,(TS_SIZE-4)-p->pos); - c += (TS_SIZE-4)-p->pos; - p_to_t(p->pes,(TS_SIZE-4),pid,&p->counter, - p->feed); - clear_p2t(p); - break; - - default: - c=0; - break; - } - } - p->frags = 0; - } - - if (p->pos){ - c2 = find_pes_header(buf+c,length-c,&p->frags); - if (c2 >= 0 && c2 < (TS_SIZE-4)-p->pos){ - l = c2+c; - } else l = (TS_SIZE-4)-p->pos; - memcpy(p->pes+p->pos,buf,l); - c += l; - p->pos += l; - p_to_t(p->pes,p->pos,pid,&p->counter, p->feed); - clear_p2t(p); - } - - add = 0; - while (c < length){ - c2 = find_pes_header(buf+c+add,length-c-add,&p->frags); - if (c2 >= 0) { - c2 += c+add; - if (c2 > c){ - p_to_t(buf+c,c2-c,pid,&p->counter, - p->feed); - c = c2; - clear_p2t(p); - add = 0; - } else add = 1; - } else { - l = length-c; - rest = l % (TS_SIZE-4); - l -= rest; - p_to_t(buf+c,l,pid,&p->counter, - p->feed); - memcpy(p->pes,buf+c+l,rest); - p->pos = rest; - c = length; - } - } -} - - -int write_ts_header2(u16 pid, u8 *counter, int pes_start, u8 *buf, u8 length) -{ - int i; - int c = 0; - int fill; - u8 tshead[4] = { 0x47, 0x00, 0x00, 0x10}; - - - fill = (TS_SIZE-4)-length; - if (pes_start) tshead[1] = 0x40; - if (fill) tshead[3] = 0x30; - tshead[1] |= (u8)((pid & 0x1F00) >> 8); - tshead[2] |= (u8)(pid & 0x00FF); - tshead[3] |= ((*counter)++ & 0x0F) ; - memcpy(buf,tshead,4); - c+=4; - - - if (fill){ - buf[4] = fill-1; - c++; - if (fill >1){ - buf[5] = 0x00; - c++; - } - for ( i = 6; i < fill+4; i++){ - buf[i] = 0xFF; - c++; - } - } - - return c; -} - - -void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter, - struct dvb_demux_feed *feed) -{ - - int l, pes_start; - u8 obuf[TS_SIZE]; - long int c = 0; - - pes_start = 0; - if ( length > 3 && - buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0x01 ) - switch (buf[3]){ - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - case PRIVATE_STREAM1: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - pes_start = 1; - break; - - default: - break; - } - - while ( c < length ){ - memset(obuf,0,TS_SIZE); - if (length - c >= (TS_SIZE-4)){ - l = write_ts_header2(pid, counter, pes_start - , obuf, (TS_SIZE-4)); - memcpy(obuf+l, buf+c, TS_SIZE-l); - c += TS_SIZE-l; - } else { - l = write_ts_header2(pid, counter, pes_start - , obuf, length-c); - memcpy(obuf+l, buf+c, TS_SIZE-l); - c = length; - } - feed->cb.ts(obuf, 188, 0, 0, &feed->feed.ts, DMX_OK); - pes_start = 0; - } -} - - -/**************************************************************************** - * V4L SECTION - ****************************************************************************/ - -static int dvb_do_ioctl (struct inode *inode, struct file *file, - unsigned int cmd, void *arg) -{ - struct video_device *dev = video_devdata (file); - av7110_t *av7110 = dev->priv; - - switch (cmd) { - case VIDIOCGCAP: - { - struct video_capability *b = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGCAP called\n"); - - strcpy(b->name, &dev->name[0]); - - b->type = av7110->video.type; - - b->channels = 1; - b->audios = 2; - b->maxwidth = 768; - b->maxheight = 576; - b->minwidth = 32; - b->minheight = 32; - - return 0; - } - - case VIDIOCGCHAN: - { - static const - struct video_channel dvb_chan = { 0, "DVB", 1, 3, 1, 1 }; - struct video_channel *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGCHAN called\n"); - - memcpy(v, &dvb_chan, sizeof(struct video_channel)); - - return 0; - - } - - case VIDIOCSCHAN: - { - struct video_channel *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCSCHAN called\n"); - - if (v->channel>0) - return -EINVAL; - - if (v->norm > 1) - return -EOPNOTSUPP; - - av7110->vidmode = v->norm; - SetMode(av7110, v->norm); - av7110->saa->mode = v->norm; - return 0; - } - - case VIDIOCGTUNER: - { - struct video_tuner *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGTUNER called\n"); - - /* only channel 0 has a tuner */ - if(!v->tuner) - return -EINVAL; - - /* fill the structure */ - strcpy(v->name, "DVB"); - v->rangelow = 0x00000000; - v->rangehigh = 0xffffffff; - - v->flags= VIDEO_TUNER_PAL | VIDEO_TUNER_NTSC; - v->mode = av7110->vidmode; - - /* fixme: fill in signal strength here */ - v->signal = 0xffff; - - return 0; - } - - case VIDIOCSTUNER: - { - struct video_tuner *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCSTUNER called\n"); - - /* only channel 0 has a tuner */ - if (!v->tuner) - return -EINVAL; - - /* check if format is supported */ - if(v->mode != VIDEO_MODE_PAL && v->mode != VIDEO_MODE_NTSC - /* && v->mode != VIDEO_MODE_SECAM */ ) - return -EOPNOTSUPP; - - av7110->vidmode = v->mode; - SetMode(av7110, v->mode); - - return 0; - } - - case VIDIOCGPICT: - { - struct video_picture *p = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGPICT called\n"); - - saacomm(SAA7146_V4L_GPICT, p); - - dprintk("dvb: VIDIOCGPICT called: b:%d c:%d s:%d d:%d p:%d\n", - p->brightness, p->contrast, p->colour, - p->depth, p->palette); - - return 0; - } - - case VIDIOCSPICT: - { - struct video_picture *p = arg; - - dprintk("dvb: VIDIOCSPICT called: b:%d c:%d s:%d d:%d p:%d\n", - p->brightness, p->contrast, p->colour, - p->depth, p->palette); - - switch (p->palette) { - case VIDEO_PALETTE_RGB555: - case VIDEO_PALETTE_RGB565: - case VIDEO_PALETTE_RGB24: - case VIDEO_PALETTE_RGB32: - case VIDEO_PALETTE_UYVY: - case VIDEO_PALETTE_YUV422P: - case VIDEO_PALETTE_YUV420P: - case VIDEO_PALETTE_YUV411P: - break; - default: - return -EINVAL; - } - - saacomm(SAA7146_V4L_SPICT, p); - - return 0; - - } - - case VIDIOCSWIN: - { - struct video_window *w = arg; - - dprintk("dvb: VIDIOCSWIN called: " - "clips: %d, x:%d, y:%d, h:%d, w:%d\n", - w->clipcount, w->x, w->y, w->height, w->width); - - saacomm(SAA7146_V4L_SWIN, w); - - return 0; - } - - case VIDIOCGWIN: - { - dprintk(KERN_ERR "dvb: VIDIOCGWIN called\n"); - return 0; - } - - case VIDIOCCAPTURE: - { - int *v = arg; - - dprintk("dvb: VIDIOCCAPTURE called, mode:%d (0=disable)\n", *v); - - saacomm(SAA7146_V4L_CCAPTURE, v); - - return 0; - } - - case VIDIOCGFBUF: - { - struct video_buffer *b = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGFBUF called\n"); - - saacomm(SAA7146_V4L_GFBUF, b); - - return 0; - - } - - case VIDIOCSFBUF: - { - struct video_buffer *b = arg; - u32 vid = (vidmem << 16) | vidlow; - - /* see if vidmem-override is requested */ - if (vidmem) { - printk ("dvb: video-memory-override. (0x%08x)\n", vid); - b->base = (void*) vid; - } - - saacomm(SAA7146_V4L_SFBUF, b); - - dprintk(KERN_ERR "dvb: VIDIOCSFBUF called\n"); - - return 0; - } - - /* Video key event - to dev 255 is to all - - * cuts capture on all DMA windows with this key (0xFFFFFFFF == all) - */ - case VIDIOCKEY: - { - dprintk(KERN_ERR "dvb: VIDIOCKEY called\n"); - return 0; - } - - case VIDIOCGAUDIO: - { - struct video_audio *v = arg; - - v->flags = VIDEO_AUDIO_MUTABLE; - /* let's auto-detect */ - return 0; - } - - case VIDIOCSAUDIO: - { - //struct video_audio *v; - return 0; - } - - case VIDIOCSYNC: - { - int i = 0; - int *frame = (int*) arg; - - dprintk ("dvb: VIDIOCSYNC called - frame: %d\n", *frame); - - /* simply pass the requested frame-number to the corresponding - saa7146-function ... */ - i = saacomm(SAA7146_V4L_CSYNC, frame); - - dprintk ("dvb: VIDIOCSYNC done - frame: %d\n", *frame); - - return i; - } - - case VIDIOCMCAPTURE: - { - struct video_mmap *vm = arg; - int i = 0; - - dprintk(KERN_ERR "dvb: VIDIOCMCAPTURE called: fr:%d," - "fmt:%d, w:%d, h:%d\n", - vm->frame, vm->format, vm->width, vm->height); - - switch (vm->format) { - case VIDEO_PALETTE_YUV422P: - case VIDEO_PALETTE_YUV420P: - case VIDEO_PALETTE_YUV411P: - return -EINVAL; - } - - /* simply pass the structure for the requested frame-number - to the corresponding saa7146-function ... */ - i = saacomm(SAA7146_V4L_CMCAPTURE, vm); - - return i; - } - - case VIDIOCGMBUF: - { - struct video_mbuf *mbuf = arg; - dprintk(KERN_ERR "dvb: VIDIOCGMBUF called\n"); - saacomm(SAA7146_V4L_GMBUF, mbuf); - return 0; - - } - - case VIDIOCGUNIT: - { - /*struct video_unit vu;*/ - dprintk(KERN_ERR "dvb: VIDIOCGUNIT called\n"); - return 0; - } - - case VIDIOCGCAPTURE: - { - dprintk(KERN_ERR "dvb: VIDIOCGCAPTURE called\n"); - return 0; - } - case VIDIOCSCAPTURE: - { - dprintk(KERN_ERR "dvb: VIDIOCSCAPTURE called\n"); - return 0; - } - - default: - return -ENOIOCTLCMD; - } - - return 0; -} - - -static int dvb_ioctl (struct inode *inode, struct file *file, - unsigned int cmd, unsigned long arg) -{ - return video_usercopy(inode, file, cmd, arg, dvb_do_ioctl); -} - - -static int dvb_mmap(struct file* file, struct vm_area_struct *vma) -{ - struct video_device *dev = video_devdata (file); - av7110_t *av7110 = dev->priv; - - dprintk(KERN_ERR "av7110: dvb_mmap called, adr:%08lx, size:0x%08lx\n", - vma->vm_start, vma->vm_end - vma->vm_start); - - if (saacomm(SAA7146_DO_MMAP, vma)) { - printk(KERN_ERR "av7110: dvb_mmap failed!\n"); - return -1; - } - - return 0; -} - - -static unsigned int dvb_audio_poll(struct file *file, poll_table *wait) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned int mask=0; - - if (av7110->playing) { - if (ring_buffer_free(&av7110->aout)>20*1024) - return (POLLOUT | POLLWRNORM); - - poll_wait(file, &av7110->aout.queue, wait); - - if (ring_buffer_free(&av7110->aout)>20*1024) - mask |= (POLLOUT | POLLWRNORM); - } else /* if not playing: may play if asked for */ - mask = (POLLOUT | POLLWRNORM); - - return mask; -} - - -static struct file_operations dvb_fops = { - .ioctl = dvb_ioctl, - .mmap = dvb_mmap, - .llseek = no_llseek -}; - - -/* template for video_device-structure */ -static struct video_device dvb_template = { - .owner = THIS_MODULE, - .name = "DVB Board", - .type = VID_TYPE_TUNER | - VID_TYPE_CAPTURE | - VID_TYPE_OVERLAY | - VID_TYPE_CLIPPING | - VID_TYPE_FRAMERAM | - VID_TYPE_SCALES, - .hardware = VID_HARDWARE_SAA7146, - .fops = &dvb_fops -}; - - -static int vid_register(av7110_t *av7110) -{ - memcpy( &av7110->video, &dvb_template, sizeof(struct video_device)); - - av7110->video.priv = av7110; - - if (video_register_device(&av7110->video, VFL_TYPE_GRABBER, -1)) { - printk(KERN_ERR "dvb: can't register videodevice\n"); - return -1; - } - - return 0; -} - -static inline int vid_unregister(av7110_t *av7110) -{ - if (av7110->video.minor != -1) - video_unregister_device(&av7110->video); - - return 0; -} - -/**************************************************************************** - * END OF V4L SECTION - ****************************************************************************/ - - -/**************************************************************************** - * DVB API SECTION - ****************************************************************************/ - - -/****************************************************************************** - * hardware filter functions - ******************************************************************************/ - -static int -StartHWFilter(struct dvb_demux_filter *dvbdmxfilter) -{ - struct dvb_demux_feed *dvbdmxfeed=dvbdmxfilter->feed; - av7110_t *av7110=(av7110_t *) dvbdmxfeed->demux->priv; - u16 buf[20]; - int ret, i; - u16 handle; -// u16 mode=0x0320; - u16 mode=0xb96a; - - if (dvbdmxfilter->type==DMX_TYPE_SEC) { - buf[4]=(dvbdmxfilter->filter.filter_value[0]<<8)| - dvbdmxfilter->maskandmode[0]; - for (i=3; i<18; i++) - buf[i+4-2]=(dvbdmxfilter->filter.filter_value[i]<<8)| - dvbdmxfilter->maskandmode[i]; - mode=4; - } else - if ((dvbdmxfeed->ts_type & TS_PACKET) && - !(dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)) - init_p2t(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed); - - buf[0] = (COMTYPE_PID_FILTER << 8) + AddPIDFilter; - buf[1] = 16; - buf[2] = dvbdmxfeed->pid; - buf[3] = mode; - - ret=CommandRequest(av7110, buf, 20, &handle, 1); - if (ret<0) - return ret; - - av7110->handle2filter[handle]=dvbdmxfilter; - dvbdmxfilter->hw_handle=handle; - - return ret; -} - -static int -StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) -{ - av7110_t *av7110=(av7110_t *) dvbdmxfilter->feed->demux->priv; - u16 buf[3]; - u16 answ[2]; - int ret; - u16 handle; - - handle=dvbdmxfilter->hw_handle; - if (handle >= MAXFILT) { - dprintk("dvb: StopHWFilter tried to stop invalid filter %d.\n", - handle); - dprintk("dvb: filter type = %d\n", dvbdmxfilter->type); - return 0; - } - - av7110->handle2filter[handle]=NULL; - - buf[0] = (COMTYPE_PID_FILTER << 8) + DelPIDFilter; - buf[1] = 1; - buf[2] = handle; - ret=CommandRequest(av7110, buf, 3, answ, 2); - - if (answ[1] != handle) { - dprintk("dvb: filter %d shutdown error :%d\n", handle, answ[1]); - ret=-1; - } - return ret; -} - - -static int -dvb_write_to_decoder(struct dvb_demux_feed *dvbdmxfeed, u8 *buf, size_t count) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - ipack *ipack=&av7110->ipack[dvbdmxfeed->pes_type]; - - switch (dvbdmxfeed->pes_type) { - case 0: - if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) { - return -EINVAL; - } - break; - case 1: - if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) { - return -EINVAL; - } - break; - default: - return -1; - } - - if (!(buf[3]&0x10)) { // no payload? - return -1; - } - if (buf[1]&0x40) - dvb_filter_ipack_flush(ipack); - - if (buf[3]&0x20) { // adaptation field? - count-=buf[4]+1; - buf+=buf[4]+1; - if (!count) { - return 0; - } - } - - dvb_filter_instant_repack(buf+4, count-4, - &av7110->ipack[dvbdmxfeed->pes_type]); - return 0; -} - -static void -dvb_feed_start_pid(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - u16 *pid=dvbdmx->pids, npids[5]; - int i; - - npids[0]=npids[1]=npids[2]=npids[3]=0xffff; - npids[4]=0xffff; - i=dvbdmxfeed->pes_type; - npids[i]=(pid[i]&0x8000) ? 0 : pid[i]; - if ((i==2) && npids[i] && (dvbdmxfeed->ts_type & TS_PACKET)) { - npids[i]=0; - ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); - StartHWFilter(dvbdmxfeed->filter); - return; - } - if (dvbdmxfeed->pes_type<=2) - ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); - - if (dvbdmxfeed->pes_type<2 && npids[0]) - if (av7110->fe_synced) - outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); - - if ((dvbdmxfeed->ts_type & TS_PACKET)) { - if (dvbdmxfeed->pes_type == 0 && - !(dvbdmx->pids[0]&0x8000)) - AV_StartRecord(av7110, RP_AUDIO, - dvbdmxfeed); - if (dvbdmxfeed->pes_type == 1 && - !(dvbdmx->pids[1]&0x8000)) - AV_StartRecord(av7110, RP_VIDEO, - dvbdmxfeed); - } -} - -static void -dvb_feed_stop_pid(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - u16 *pid=dvbdmx->pids, npids[5]; - int i; - - if (dvbdmxfeed->pes_type<=1) { - AV_Stop(av7110, dvbdmxfeed->pes_type ? - RP_VIDEO : RP_AUDIO); - if (!av7110->rec_mode) - dvbdmx->recording=0; - if (!av7110->playing) - dvbdmx->playing=0; - } - npids[0]=npids[1]=npids[2]=npids[3]=0xffff; - npids[4]=0xffff; - i=dvbdmxfeed->pes_type; - switch (i) { - case 2: //teletext - if (dvbdmxfeed->ts_type & TS_PACKET) - StopHWFilter(dvbdmxfeed->filter); - npids[2]=0; - break; - case 0: - case 1: - case 4: - if (!pids_off) - return; - npids[i]=(pid[i]&0x8000) ? 0 : pid[i]; - break; - } - ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); -} - -static int -dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - - if (!dvbdmx->dmx.frontend) - return -EINVAL; - - if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) - return TTBStart(av7110); - - if (dvbdmxfeed->pid>0x1fff) - return -1; - - if (dvbdmxfeed->type == DMX_TYPE_TS) { - if ((dvbdmxfeed->ts_type & TS_DECODER) - && (dvbdmxfeed->pes_typedmx.frontend->source) { - case DMX_MEMORY_FE: - if (dvbdmxfeed->ts_type & TS_DECODER) - if (dvbdmxfeed->pes_type<2 && - !(dvbdmx->pids[0]&0x8000) && - !(dvbdmx->pids[1]&0x8000)) { - ring_buffer_flush(&av7110->avout); - ring_buffer_flush(&av7110->aout); - AV_StartPlay(av7110,RP_AV); - dvbdmx->playing=1; - } - break; - default: - dvb_feed_start_pid(dvbdmxfeed); - break; - } - } else - if ((dvbdmxfeed->ts_type & TS_PACKET) && - (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE)) - StartHWFilter(dvbdmxfeed->filter); - } - - if (dvbdmxfeed->type == DMX_TYPE_SEC) { - int i; - - for (i=0; ifilternum; i++) { - if (dvbdmx->filter[i].state!=DMX_STATE_READY) - continue; - if (dvbdmx->filter[i].type!=DMX_TYPE_SEC) - continue; - if (dvbdmx->filter[i].filter.parent!=&dvbdmxfeed->feed.sec) - continue; - dvbdmx->filter[i].state=DMX_STATE_GO; - if (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE) - StartHWFilter(&dvbdmx->filter[i]); - } - } - return 0; -} - - -static int -dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - - if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) - return TTBStop(av7110); - - if (dvbdmxfeed->type == DMX_TYPE_TS) { - if (dvbdmxfeed->ts_type & TS_DECODER) { - if (dvbdmxfeed->pes_type>=DMX_TS_PES_OTHER || - !dvbdmx->pesfilter[dvbdmxfeed->pes_type]) - return -EINVAL; - dvbdmx->pids[dvbdmxfeed->pes_type]|=0x8000; - dvbdmx->pesfilter[dvbdmxfeed->pes_type]=0; - } - if (dvbdmxfeed->ts_type & TS_DECODER && - (dvbdmxfeed->pes_typets_type & TS_PACKET) && - (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE)) - StopHWFilter(dvbdmxfeed->filter); - } - - if (dvbdmxfeed->type == DMX_TYPE_SEC) { - int i; - - for (i=0; ifilternum; i++) - if (dvbdmx->filter[i].state==DMX_STATE_GO && - dvbdmx->filter[i].filter.parent==&dvbdmxfeed->feed.sec) { - dvbdmx->filter[i].state=DMX_STATE_READY; - if (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE) - StopHWFilter(&dvbdmx->filter[i]); - } - } - return 0; -} - - -static void -restart_feeds(av7110_t *av7110) -{ - struct dvb_demux *dvbdmx=&av7110->demux; - struct dvb_demux_feed *feed; - int mode; - int i; - - mode=av7110->playing; - av7110->playing=0; - av7110->rec_mode=0; - - for (i=0; ifilternum; i++) { - feed=&dvbdmx->feed[i]; - if (feed->state==DMX_STATE_GO) - dvb_start_feed(feed); - } - - if (mode) - AV_StartPlay(av7110, mode); -} - -/****************************************************************************** - * SEC device file operations - ******************************************************************************/ - -static -int av7110_diseqc_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) -{ - av7110_t *av7110 = fe->before_after_data; - - switch (cmd) { - case FE_SET_TONE: - switch ((fe_sec_tone_mode_t) arg) { - case SEC_TONE_ON: - Set22K (av7110, 1); - break; - case SEC_TONE_OFF: - Set22K (av7110, 0); - break; - default: - return -EINVAL; - }; - break; - - case FE_DISEQC_SEND_MASTER_CMD: - { - struct dvb_diseqc_master_cmd *cmd = arg; - - SendDiSEqCMsg (av7110, cmd->msg_len, cmd->msg, 0); - break; - } - - case FE_DISEQC_SEND_BURST: - SendDiSEqCMsg (av7110, 0, NULL, (int) arg); - break; - - default: - return -EOPNOTSUPP; - }; - - return 0; -} - -/****************************************************************************** - * CI link layer file ops (FIXME: move this to separate module later) - ******************************************************************************/ - -int ci_ll_init(ring_buffer_t *cirbuf, ring_buffer_t *ciwbuf, int size) -{ - ring_buffer_init(cirbuf, vmalloc(size), size); - ring_buffer_init(ciwbuf, vmalloc(size), size); - return 0; -} - -void ci_ll_flush(ring_buffer_t *cirbuf, ring_buffer_t *ciwbuf) -{ - ring_buffer_flush(cirbuf); - ring_buffer_flush(ciwbuf); -} - -void ci_ll_release(ring_buffer_t *cirbuf, ring_buffer_t *ciwbuf) -{ - vfree(cirbuf->data); - cirbuf->data=0; - vfree(ciwbuf->data); - ciwbuf->data=0; -} - - -int ci_ll_reset(ring_buffer_t *cibuf, struct file *file, - int slots, ca_slot_info_t *slot) -{ - int i; - - if (ring_buffer_free(cibuf)<8) - return -EBUSY; - for (i=0; i<2; i++) - if (slots&(1<data[cibuf->pwrite]=0x00; - cibuf->data[(cibuf->pwrite+1)%cibuf->size]=0x06; - cibuf->data[(cibuf->pwrite+2)%cibuf->size]=i; - cibuf->data[(cibuf->pwrite+3)%cibuf->size]=0x00; - cibuf->data[(cibuf->pwrite+4)%cibuf->size]=0xff; - cibuf->data[(cibuf->pwrite+5)%cibuf->size]=0x02; - cibuf->data[(cibuf->pwrite+6)%cibuf->size]=0x00; - cibuf->data[(cibuf->pwrite+7)%cibuf->size]=0x00; - cibuf->pwrite=(cibuf->pwrite+8)%cibuf->size; - slot[i].flags=0; - } - return 0; -} - -static ssize_t -ci_ll_write(ring_buffer_t *cibuf, struct file *file, const char *buf, size_t count, loff_t *ppos) -{ - int free, split; - int32_t pread; - int non_blocking=file->f_flags&O_NONBLOCK; - - if (count>2048) - return -EINVAL; - pread=cibuf->pread; - free=pread-cibuf->pwrite; - if (free<=0) - free+=cibuf->size; - if (count+2>=free) { - if (non_blocking) - return -EWOULDBLOCK; - if (wait_event_interruptible(cibuf->queue, - (ring_buffer_free(cibuf)>count+2))) - return 0; - } - cibuf->data[cibuf->pwrite]=(count>>8); - cibuf->data[(cibuf->pwrite+1)%cibuf->size]=(count&0xff); - cibuf->pwrite=(cibuf->pwrite+2)%cibuf->size; - - if (pread>cibuf->pwrite) - split=0; - else - split=cibuf->size-cibuf->pwrite; - if (split && splitdata + cibuf->pwrite, buf, split)) - return -EFAULT; - if (copy_from_user(cibuf->data, buf+split, count-split)) - return -EFAULT; - } else - if (copy_from_user(cibuf->data + cibuf->pwrite, buf, count)) - return -EFAULT; - cibuf->pwrite=(cibuf->pwrite+count)%cibuf->size; - return count; -} - -static ssize_t -ci_ll_read(ring_buffer_t *cibuf, struct file *file, char *buf, size_t count, loff_t *ppos) -{ - int split=0, avail, pwrite; - int non_blocking=file->f_flags&O_NONBLOCK; - - if (!cibuf->data || !count) - return 0; - if (non_blocking && (ring_buffer_empty(cibuf))) - return -EWOULDBLOCK; - if (wait_event_interruptible(cibuf->queue, - !ring_buffer_empty(cibuf))) - return 0; - pwrite=cibuf->pwrite; - avail=pwrite - cibuf->pread; - if (avail<0) - avail+=cibuf->size; - if (avail<4) - return 0; - count=(cibuf->data[cibuf->pread]<<8); - count|=cibuf->data[(cibuf->pread+1)%cibuf->size]; - if (availpread=(cibuf->pread+2)%cibuf->size; - - if (pwritepread) - split=cibuf->size-cibuf->pread; - if (split && splitdata+cibuf->pread, split)) - return -EFAULT; - if (copy_to_user(buf+split, cibuf->data, count-split)) - return -EFAULT; - } else - if (copy_to_user(buf, cibuf->data+cibuf->pread, count)) - return -EFAULT; - cibuf->pread=(cibuf->pread + count)%cibuf->size; - return count; -} - -static int -dvb_ca_open(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - int err=dvb_generic_open(inode, file); - - if (err<0) - return err; - ci_ll_flush(&av7110->ci_rbuffer, &av7110->ci_wbuffer); - return 0; -} - -static unsigned -int dvb_ca_poll(struct file *file, poll_table *wait) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - unsigned int mask=0; - - ring_buffer_t *rbuf=&av7110->ci_rbuffer; - ring_buffer_t *wbuf=&av7110->ci_wbuffer; - - if (!ring_buffer_empty(rbuf)) - mask|=POLLIN; - if (ring_buffer_avail(wbuf)>1024) - mask|=POLLOUT; - if (mask) - return mask; - - poll_wait(file, &rbuf->queue, wait); - - if (!ring_buffer_empty(rbuf)) - mask|=POLLIN; - if (ring_buffer_avail(wbuf)>1024) - mask|=POLLOUT; - - return mask; -} - -static int -dvb_ca_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned long arg=(unsigned long) parg; - - switch (cmd) { - case CA_RESET: -#ifdef NEW_CI - - return ci_ll_reset(&av7110->ci_wbuffer, file, arg, &av7110->ci_slot[0]); -#endif - break; - - case CA_GET_CAP: - { - ca_caps_t cap; - - cap.slot_num=2; -#ifdef NEW_CI - cap.slot_type=CA_CI_LINK; -#else - cap.slot_type=CA_CI; -#endif - cap.descr_num=16; - cap.descr_type=CA_ECD; - memcpy(parg, &cap, sizeof(cap)); - } - break; - - case CA_GET_SLOT_INFO: - { - ca_slot_info_t *info=(ca_slot_info_t *)parg; - - if (info->num>1) - return -EINVAL; -#ifdef NEW_CI - av7110->ci_slot[info->num].type = CA_CI_LINK; -#else - av7110->ci_slot[info->num].type = CA_CI; -#endif - memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); - } - break; - - case CA_GET_MSG: - break; - - case CA_SEND_MSG: - break; - - case CA_GET_DESCR_INFO: - { - ca_descr_info_t info; - - info.num=16; - info.type=CA_ECD; - memcpy (parg, &info, sizeof (info)); - } - break; - - case CA_SET_DESCR: - { - ca_descr_t *descr=(ca_descr_t*) parg; - - if (descr->index>=16) - return -EINVAL; - if (descr->parity>1) - return -EINVAL; - outcom(av7110, COMTYPE_PIDFILTER, SetDescr, 5, - (descr->index<<8)|descr->parity, - (descr->cw[0]<<8)|descr->cw[1], - (descr->cw[2]<<8)|descr->cw[3], - (descr->cw[4]<<8)|descr->cw[5], - (descr->cw[6]<<8)|descr->cw[7]); - } - break; - - default: - return -EINVAL; - } - return 0; -} - -static ssize_t -dvb_ca_write(struct file *file, const char *buf, - size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - return ci_ll_write(&av7110->ci_wbuffer, file, buf, count, ppos); -} - -static ssize_t -dvb_ca_read(struct file *file, char *buf, size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - return ci_ll_read(&av7110->ci_rbuffer, file, buf, count, ppos); - -} - - - -/****************************************************************************** - * DVB device file operations - ******************************************************************************/ - -static unsigned int dvb_video_poll(struct file *file, poll_table *wait) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned int mask=0; - - if (av7110->playing) { - if (FREE_COND) - return (POLLOUT | POLLWRNORM); - - poll_wait(file, &av7110->avout.queue, wait); - - if (FREE_COND) - mask |= (POLLOUT | POLLWRNORM); - } else /* if not playing: may play if asked for */ - mask = (POLLOUT | POLLWRNORM); - - return mask; -} - -static ssize_t -dvb_video_write(struct file *file, const char *buf, - size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - if (av7110->videostate.stream_source!=VIDEO_SOURCE_MEMORY) - return -EPERM; - - return dvb_play(av7110, buf, count, file->f_flags&O_NONBLOCK, 1, 1); -} - -static ssize_t -dvb_audio_write(struct file *file, const char *buf, - size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - if (av7110->audiostate.stream_source!=AUDIO_SOURCE_MEMORY) { - printk(KERN_ERR "not audio source memory\n"); - return -EPERM; - } - return dvb_aplay(av7110, buf, count, file->f_flags&O_NONBLOCK, 0); -} - -u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00 }; - -#define MIN_IFRAME 400000 - -static void -play_iframe(av7110_t *av7110, u8 *buf, unsigned int len, int nonblock) -{ - int i, n=1; - - if (!(av7110->playing&RP_VIDEO)) { - AV_StartPlay(av7110, RP_VIDEO); - n=MIN_IFRAME/len+1; - } - - dvb_play(av7110, iframe_header, sizeof(iframe_header), 0, 1, 0); - - for (i=0; iipack[1]); -} - - -static int -dvb_video_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned long arg=(unsigned long) parg; - int ret=0; - - if (((file->f_flags&O_ACCMODE)==O_RDONLY) && - (cmd!=VIDEO_GET_STATUS)) - return -EPERM; - - switch (cmd) { - case VIDEO_STOP: - av7110->videostate.play_state=VIDEO_STOPPED; - if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) - AV_Stop(av7110, RP_VIDEO); - else - vidcom(av7110, 0x000e, - av7110->videostate.video_blank ? 0 : 1); - av7110->trickmode=TRICK_NONE; - break; - - case VIDEO_PLAY: - av7110->trickmode=TRICK_NONE; - if (av7110->videostate.play_state==VIDEO_FREEZED) { - av7110->videostate.play_state=VIDEO_PLAYING; - vidcom(av7110, 0x000d, 0); - } - - if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) { - if (av7110->playing==RP_AV) { - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - av7110->playing&=~RP_VIDEO; - } - AV_StartPlay(av7110,RP_VIDEO); - vidcom(av7110, 0x000d, 0); - } else { - //AV_Stop(av7110, RP_VIDEO); - vidcom(av7110, 0x000d, 0); - } - av7110->videostate.play_state=VIDEO_PLAYING; - break; - - case VIDEO_FREEZE: - av7110->videostate.play_state=VIDEO_FREEZED; - if (av7110->playing&RP_VIDEO) - outcom(av7110, COMTYPE_REC_PLAY, __Pause, 0); - else - vidcom(av7110, 0x0102, 1); - av7110->trickmode=TRICK_FREEZE; - break; - - case VIDEO_CONTINUE: - if (av7110->playing&RP_VIDEO) - outcom(av7110, COMTYPE_REC_PLAY, __Continue, 0); - vidcom(av7110, 0x000d, 0); - av7110->videostate.play_state=VIDEO_PLAYING; - av7110->trickmode=TRICK_NONE; - break; - - case VIDEO_SELECT_SOURCE: - av7110->videostate.stream_source=(video_stream_source_t) arg; - break; - - case VIDEO_SET_BLANK: - av7110->videostate.video_blank=(int) arg; - break; - - case VIDEO_GET_STATUS: - memcpy(parg, &av7110->videostate, sizeof(struct video_status)); - break; - - case VIDEO_GET_EVENT: - //FIXME: write firmware support for this - ret=-EOPNOTSUPP; - - case VIDEO_SET_DISPLAY_FORMAT: - { - video_displayformat_t format=(video_displayformat_t) arg; - u16 val=0; - - switch(format) { - case VIDEO_PAN_SCAN: - val=VID_PAN_SCAN_PREF; - break; - - case VIDEO_LETTER_BOX: - val=VID_VC_AND_PS_PREF; - break; - - case VIDEO_CENTER_CUT_OUT: - val=VID_CENTRE_CUT_PREF; - break; - - default: - ret=-EINVAL; - break; - } - if (ret<0) - break; - av7110->videostate.video_format=format; - ret=outcom(av7110, COMTYPE_ENCODER, SetPanScanType, - 1, (u16) val); - break; - } - - case VIDEO_SET_FORMAT: - if (arg>1) { - ret=-EINVAL; - break; - } - av7110->display_ar=arg; - ret=outcom(av7110, COMTYPE_ENCODER, SetMonitorType, - 1, (u16) arg); - break; - - case VIDEO_STILLPICTURE: - { - struct video_still_picture *pic= - (struct video_still_picture *) parg; - ring_buffer_flush(&av7110->avout); - play_iframe(av7110, pic->iFrame, pic->size, - file->f_flags&O_NONBLOCK); - break; - } - - case VIDEO_FAST_FORWARD: - //note: arg is ignored by firmware - if (av7110->playing&RP_VIDEO) - outcom(av7110, COMTYPE_REC_PLAY, - __Scan_I, 2, AV_PES, 0); - else - vidcom(av7110, 0x16, arg); - av7110->trickmode=TRICK_FAST; - av7110->videostate.play_state=VIDEO_PLAYING; - break; - - case VIDEO_SLOWMOTION: - if (av7110->playing&RP_VIDEO) { - outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0); - vidcom(av7110, 0x22, arg); - } else { - vidcom(av7110, 0x0d, 0); - vidcom(av7110, 0x0e, 0); - vidcom(av7110, 0x22, arg); - } - av7110->trickmode=TRICK_SLOW; - av7110->videostate.play_state=VIDEO_PLAYING; - break; - - case VIDEO_GET_CAPABILITIES: - *(int *)parg=VIDEO_CAP_MPEG1| - VIDEO_CAP_MPEG2| - VIDEO_CAP_SYS| - VIDEO_CAP_PROG; - break; - - case VIDEO_CLEAR_BUFFER: - ring_buffer_flush(&av7110->avout); - dvb_filter_ipack_reset(&av7110->ipack[1]); - - if (av7110->playing==RP_AV) { - outcom(av7110, COMTYPE_REC_PLAY, - __Play, 2, AV_PES, 0); - if (av7110->trickmode==TRICK_FAST) - outcom(av7110, COMTYPE_REC_PLAY, - __Scan_I, 2, AV_PES, 0); - if (av7110->trickmode==TRICK_SLOW) { - outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0); - vidcom(av7110, 0x22, arg); - } - if (av7110->trickmode==TRICK_FREEZE) - vidcom(av7110, 0x000e, 1); - } - break; - - case VIDEO_SET_STREAMTYPE: - - break; - - default: - ret=-ENOIOCTLCMD; - break; - } - return ret; -} - -static int -dvb_audio_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned long arg=(unsigned long) parg; - int ret=0; - - if (((file->f_flags&O_ACCMODE)==O_RDONLY) && - (cmd!=AUDIO_GET_STATUS)) - return -EPERM; - - switch (cmd) { - case AUDIO_STOP: - if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) - AV_Stop(av7110, RP_AUDIO); - else - audcom(av7110, 1); - av7110->audiostate.play_state=AUDIO_STOPPED; - break; - - case AUDIO_PLAY: - if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) - AV_StartPlay(av7110, RP_AUDIO); - audcom(av7110, 2); - av7110->audiostate.play_state=AUDIO_PLAYING; - break; - - case AUDIO_PAUSE: - audcom(av7110, 1); - av7110->audiostate.play_state=AUDIO_PAUSED; - break; - - case AUDIO_CONTINUE: - if (av7110->audiostate.play_state==AUDIO_PAUSED) { - av7110->audiostate.play_state=AUDIO_PLAYING; - audcom(av7110, 0x12); - } - break; - - case AUDIO_SELECT_SOURCE: - av7110->audiostate.stream_source=(audio_stream_source_t) arg; - break; - - case AUDIO_SET_MUTE: - { - audcom(av7110, arg ? 1 : 2); - av7110->audiostate.mute_state=(int) arg; - break; - } - - case AUDIO_SET_AV_SYNC: - av7110->audiostate.AV_sync_state=(int) arg; - audcom(av7110, arg ? 0x0f : 0x0e); - break; - - case AUDIO_SET_BYPASS_MODE: - ret=-EINVAL; - break; - - case AUDIO_CHANNEL_SELECT: - av7110->audiostate.channel_select=(audio_channel_select_t) arg; - - switch(av7110->audiostate.channel_select) { - case AUDIO_STEREO: - audcom(av7110, 0x80); - break; - - case AUDIO_MONO_LEFT: - audcom(av7110, 0x100); - break; - - case AUDIO_MONO_RIGHT: - audcom(av7110, 0x200); - break; - - default: - ret=-EINVAL; - break; - } - break; - - case AUDIO_GET_STATUS: - memcpy(parg, &av7110->audiostate, sizeof(struct audio_status)); - break; - - case AUDIO_GET_CAPABILITIES: - *(int *)parg=AUDIO_CAP_LPCM| - AUDIO_CAP_MP1| - AUDIO_CAP_MP2; - break; - - case AUDIO_CLEAR_BUFFER: - ring_buffer_flush(&av7110->aout); - dvb_filter_ipack_reset(&av7110->ipack[0]); - if (av7110->playing==RP_AV) - outcom(av7110, COMTYPE_REC_PLAY, - __Play, 2, AV_PES, 0); - break; - case AUDIO_SET_ID: - - break; - case AUDIO_SET_MIXER: - { - struct audio_mixer *amix=(struct audio_mixer *)parg; - - SetVolume(av7110, amix->volume_left, amix->volume_right); - break; - } - case AUDIO_SET_STREAMTYPE: - break; - default: - ret=-ENOIOCTLCMD; - break; - } - return ret; -} - -static int -dvb_osd_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - -#ifdef CONFIG_DVB_AV7110_OSD - if (cmd==OSD_SEND_CMD) - return OSD_DrawCommand(av7110, (osd_cmd_t *)parg); -#endif - return -EINVAL; -} - -static int dvb_video_open(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - int err; - - if ((err=dvb_generic_open(inode, file))<0) - return err; - ring_buffer_flush(&av7110->aout); - ring_buffer_flush(&av7110->avout); - av7110->video_blank=1; - av7110->audiostate.AV_sync_state=1; - av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX; - return 0; -} - -static int dvb_video_release(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - AV_Stop(av7110, RP_VIDEO); - return dvb_generic_release(inode, file); -} - -static int dvb_audio_open(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - int err=dvb_generic_open(inode, file); - - if (err<0) - return err; - ring_buffer_flush(&av7110->aout); - av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX; - return 0; -} - -static int dvb_audio_release(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - AV_Stop(av7110, RP_AUDIO); - return dvb_generic_release(inode, file); -} - - - -/****************************************************************************** - * driver registration - ******************************************************************************/ - -static struct file_operations dvb_video_fops = { - .owner = THIS_MODULE, - .write = dvb_video_write, - .ioctl = dvb_generic_ioctl, - .open = dvb_video_open, - .release = dvb_video_release, - .poll = dvb_video_poll, -}; - -static struct dvb_device dvbdev_video = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_video_fops, - .kernel_ioctl = dvb_video_ioctl, -}; - -static struct file_operations dvb_audio_fops = { - .owner = THIS_MODULE, - .write = dvb_audio_write, - .ioctl = dvb_generic_ioctl, - .open = dvb_audio_open, - .release = dvb_audio_release, - .poll = dvb_audio_poll, -}; - -static struct dvb_device dvbdev_audio = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_audio_fops, - .kernel_ioctl = dvb_audio_ioctl, -}; - -static struct file_operations dvb_ca_fops = { - .owner = THIS_MODULE, - .read = dvb_ca_read, - .write = dvb_ca_write, - .ioctl = dvb_generic_ioctl, - .open = dvb_ca_open, - .release = dvb_generic_release, - .poll = dvb_ca_poll, -}; - -static struct dvb_device dvbdev_ca = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_ca_fops, - .kernel_ioctl = dvb_ca_ioctl, -}; - -static struct file_operations dvb_osd_fops = { - .owner = THIS_MODULE, - .ioctl = dvb_generic_ioctl, - .open = dvb_generic_open, - .release = dvb_generic_release, -}; - -static struct dvb_device dvbdev_osd = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_osd_fops, - .kernel_ioctl = dvb_osd_ioctl, -}; - - -static -void av7110_before_after_tune (fe_status_t s, void *data) -{ - struct av7110_s *av7110 = data; - - av7110->fe_synced = (s & FE_HAS_LOCK) ? 1 : 0; - - if (av7110->playing) - return; - - if (down_interruptible(&av7110->pid_mutex)) - return; - - if (av7110->fe_synced) { - SetPIDs(av7110, av7110->pids[DMX_PES_VIDEO], - av7110->pids[DMX_PES_AUDIO], - av7110->pids[DMX_PES_TELETEXT], 0, - av7110->pids[DMX_PES_PCR]); - outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); - } else - SetPIDs(av7110, 0, 0, 0, 0, 0); - - up(&av7110->pid_mutex); -} - - -static int -dvb_register(av7110_t *av7110) -{ - int ret, i; - dmx_frontend_t *dvbfront=&av7110->hw_frontend; - struct dvb_demux *dvbdemux=&av7110->demux; - - if (av7110->registered) - return -1; - - av7110->registered=1; - - av7110->dvb_adapter = av7110->saa->dvb_adapter; - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - dvb_add_frontend_notifier (av7110->dvb_adapter, - av7110_before_after_tune, av7110); - /** - * init DiSEqC stuff - */ - if (av7110->saa->card_type==DVB_CARD_TT_BUDGET || - av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - dvb_add_frontend_ioctls (av7110->dvb_adapter, - av7110_diseqc_ioctl, NULL, av7110); - - av7110->audiostate.AV_sync_state=0; - av7110->audiostate.mute_state=0; - av7110->audiostate.play_state=AUDIO_STOPPED; - av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX; - av7110->audiostate.channel_select=AUDIO_STEREO; - av7110->audiostate.bypass_mode=0; - - av7110->videostate.video_blank=0; - av7110->videostate.play_state=VIDEO_STOPPED; - av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX; - av7110->videostate.video_format=VIDEO_FORMAT_4_3; - av7110->videostate.display_format=VIDEO_CENTER_CUT_OUT; - av7110->display_ar=VIDEO_FORMAT_4_3; - - memcpy(av7110->demux_id, "demux0_0", 9); - av7110->demux_id[7]=av7110->saa->dvb_adapter->num+0x30; - dvbdemux->priv=(void *) av7110; - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - for (i = 0; i < MAXFILT; i++) - av7110->handle2filter[i]=NULL; - - dvbdemux->filternum=32; - dvbdemux->feednum=32; - dvbdemux->start_feed=dvb_start_feed; - dvbdemux->stop_feed=dvb_stop_feed; - dvbdemux->write_to_decoder=dvb_write_to_decoder; - - dvbdemux->dmx.vendor="TI"; - dvbdemux->dmx.model="AV7110"; - dvbdemux->dmx.id=av7110->demux_id; - dvbdemux->dmx.capabilities=(DMX_TS_FILTERING| - DMX_SECTION_FILTERING| - DMX_MEMORY_BASED_FILTERING); - - dvb_dmx_init(&av7110->demux); - - - dvbfront->id="hw_frontend"; - dvbfront->vendor="VLSI"; - dvbfront->model="DVB Frontend"; - dvbfront->source=DMX_FRONTEND_0; - - av7110->dmxdev.filternum=32; - av7110->dmxdev.demux=&dvbdemux->dmx; - av7110->dmxdev.capabilities=0; - - dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); - } - - if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) { - dvbdemux->filternum=256; - dvbdemux->feednum=256; - dvbdemux->start_feed=dvb_start_feed; - dvbdemux->stop_feed=dvb_stop_feed; - dvbdemux->write_to_decoder=0; - - dvbdemux->dmx.vendor="CIM"; - dvbdemux->dmx.model="sw"; - dvbdemux->dmx.id=av7110->demux_id; - dvbdemux->dmx.capabilities=(DMX_TS_FILTERING| - DMX_SECTION_FILTERING| - DMX_MEMORY_BASED_FILTERING); - - dvb_dmx_init(&av7110->demux); - - dvbfront->id="hw_frontend"; - dvbfront->vendor="VLSI"; - dvbfront->model="DVB Frontend"; - dvbfront->source=DMX_FRONTEND_0; - - av7110->dmxdev.filternum=256; - av7110->dmxdev.demux=&dvbdemux->dmx; - av7110->dmxdev.capabilities=0; - - dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); - } - - ret=dvbdemux->dmx.add_frontend(&dvbdemux->dmx, - &av7110->hw_frontend); - if (ret<0) - return ret; - - av7110->mem_frontend.id="mem_frontend"; - av7110->mem_frontend.vendor="memory"; - av7110->mem_frontend.model="sw"; - av7110->mem_frontend.source=DMX_MEMORY_FE; - ret=dvbdemux->dmx.add_frontend(&dvbdemux->dmx, - &av7110->mem_frontend); - if (ret<0) - return ret; - - ret=dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, - &av7110->hw_frontend); - if (ret<0) - return ret; - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - dvb_register_device(av7110->dvb_adapter, &av7110->video_dev, - &dvbdev_video, av7110, DVB_DEVICE_VIDEO); - dvb_register_device(av7110->dvb_adapter, &av7110->audio_dev, - &dvbdev_audio, av7110, DVB_DEVICE_AUDIO); - dvb_register_device(av7110->dvb_adapter, &av7110->osd_dev, - &dvbdev_osd, av7110, DVB_DEVICE_OSD); - dvb_register_device(av7110->dvb_adapter, &av7110->ca_dev, - &dvbdev_ca, av7110, DVB_DEVICE_CA); - vid_register(av7110); -#ifdef USE_DVB_DSP - dvb->dsp_dev = dvb_register_dsp(dvb_audio_open, - dvb_audio_release, - dvb_audio_ioctl, - dvb_audio_write, - av7110->audio_dev); -#endif - } - - av7110->dvb_net.card_num=av7110->saa->dvb_adapter->num; - dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); - - return 0; -} - - -static void -dvb_unregister(av7110_t *av7110) -{ - struct dvb_demux *dvbdemux=&av7110->demux; - - if (!av7110->registered) - return; - - dvb_net_release(&av7110->dvb_net); - - dvbdemux->dmx.close(&dvbdemux->dmx); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend); - - dvb_dmxdev_release(&av7110->dmxdev); - dvb_dmx_release(&av7110->demux); - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - dvb_remove_frontend_notifier (av7110->dvb_adapter, - av7110_before_after_tune); - - dvb_remove_frontend_ioctls (av7110->dvb_adapter, - av7110_diseqc_ioctl, NULL); - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - vid_unregister(av7110); - dvb_unregister_device(av7110->audio_dev); - dvb_unregister_device(av7110->video_dev); - dvb_unregister_device(av7110->osd_dev); - dvb_unregister_device(av7110->ca_dev); -#ifdef USE_DVB_DSP - dvb_unregister_dsp(av7110->dsp_dev); -#endif - } -} - -/**************************************************************************** - * INITIALIZATION - ****************************************************************************/ - -static -int av7110_attach (struct saa7146 *saa, void **av7110_ptr) -{ - struct av7110_s *av7110; - - if (!(av7110 = kmalloc (sizeof (struct av7110_s), GFP_KERNEL))) { - printk ("%s: out of memory!\n", __FUNCTION__); - return -ENOMEM; - } - - *av7110_ptr = av7110; - - memset(av7110, 0, sizeof(av7110_t)); - - tasklet_init (&av7110->debi_tasklet, debiirq, (unsigned long) av7110); - tasklet_init (&av7110->gpio_tasklet, gpioirq, (unsigned long) av7110); - tasklet_init (&av7110->vpe_tasklet, vpeirq, (unsigned long) av7110); - tasklet_init (&av7110->fidb_tasklet, fidbirq, (unsigned long) av7110); - - sema_init(&av7110->pid_mutex, 1); - - /* locks for data transfers from/to AV7110 */ - spin_lock_init (&av7110->debilock); - sema_init(&av7110->dcomlock, 1); - av7110->debilock=SPIN_LOCK_UNLOCKED; - av7110->debitype=-1; - - av7110->saa=(struct saa7146 *) saa; - av7110->saa_mem=av7110->saa->mem; - - /* default ADAC type */ - av7110->adac_type = adac; - - /* default OSD window */ - av7110->osdwin=1; - - /* ARM "watchdog" */ - init_waitqueue_head(&av7110->arm_wait); - av7110->arm_thread=0; - - av7110->vidmode=VIDEO_MODE_PAL; - - dvb_filter_ipack_init(&av7110->ipack[0], IPACKS, play_audio_cb); - av7110->ipack[0].data=(void *) av7110; - dvb_filter_ipack_init(&av7110->ipack[1], IPACKS, play_video_cb); - av7110->ipack[1].data=(void *) av7110; - - - /* allocate and init buffers */ - - av7110->debi_virt=pci_alloc_consistent(av7110->saa->device, 8192, - &av7110->debi_bus); - if (!av7110->debi_virt) - return -1; - - av7110->iobuf=vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS); - if (!av7110->iobuf) - return -1; - - ring_buffer_init(&av7110->avout, av7110->iobuf, AVOUTLEN); - ring_buffer_init(&av7110->aout, av7110->iobuf+AVOUTLEN, AOUTLEN); - - /* init BMP buffer */ - av7110->bmpbuf=av7110->iobuf+AVOUTLEN+AOUTLEN; - init_waitqueue_head(&av7110->bmpq); - - av7110->kbuf[0]=(u8 *)(av7110->iobuf+AVOUTLEN+AOUTLEN+BMPLEN); - av7110->kbuf[1]=av7110->kbuf[0]+2*IPACKS; - - /* CI link layer buffers */ - ci_ll_init(&av7110->ci_rbuffer, &av7110->ci_wbuffer, 8192); - - /* handle different card types */ - - /* load firmware into AV7110 cards */ - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - bootarm(av7110); - firmversion(av7110); - if ((av7110->arm_app&0xffff)<0x2502) { - printk("av7110: Warning, firmware version is too old. System might be unstable!!!\n"); - } - kernel_thread(arm_thread, (void *) av7110, 0); - } else { - saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600); - saa7146_write(av7110->saa_mem, MC2, - (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - setgpio(av7110, 2, GPIO_OUTHI); /* frontend power on */ - } - - SetVolume(av7110, 0xff, 0xff); - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - VidMode(av7110, vidmode); - - /* remaining inits according to card and frontend type */ - - if (i2c_writereg(av7110, 0x20, 0x00, 0x00)==1) { - dprintk("av7110%d: Crystal audio DAC detected\n", - av7110->saa->dvb_adapter->num); - av7110->adac_type = DVB_ADAC_CRYSTAL; - i2c_writereg(av7110, 0x20, 0x01, 0xd2); - i2c_writereg(av7110, 0x20, 0x02, 0x49); - i2c_writereg(av7110, 0x20, 0x03, 0x00); - i2c_writereg(av7110, 0x20, 0x04, 0x00); - } - - /** - * some special handling for the Siemens DVB-C card... - */ - if (av7110->saa->device->subsystem_vendor == 0x110a) { - if (i2c_writereg(av7110, 0x80, 0x0, 0x80)==1) { - i2c_writereg(av7110, 0x80, 0x0, 0); - printk("av7110: DVB-C analog module detected, " - "initializing MSP3400\n"); - ddelay(10); - msp_writereg(av7110, 0x12, 0x0013, 0x0c00); - msp_writereg(av7110, 0x12, 0x0000, 0x7f00); // loudspeaker + headphone - msp_writereg(av7110, 0x12, 0x0008, 0x0220); // loudspeaker source - msp_writereg(av7110, 0x12, 0x0004, 0x7f00); // loudspeaker volume - msp_writereg(av7110, 0x12, 0x000a, 0x0220); // SCART 1 source - msp_writereg(av7110, 0x12, 0x0007, 0x7f00); // SCART 1 volume - msp_writereg(av7110, 0x12, 0x000d, 0x4800); // prescale SCART - } - - // switch DVB SCART on - outcom(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0); - outcom(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1); - - //setgpio(av7110, 1, GPIO_OUTHI); // RGB on, SCART pin 16 - //setgpio(av7110, 3, GPIO_OUTLO); // SCARTpin 8 - av7110->adac_type = DVB_ADAC_NONE; - } - } - - if (init_vpid != 0 || init_apid != 0) - ChangePIDs(av7110, init_vpid, init_apid, 0, 0, 0); - - av7110_setup_irc_config (av7110, 0); - dvb_register(av7110); - - return 0; -} - - -static -int av7110_detach (struct saa7146 *saa, void** av7110_ptr) -{ - struct av7110_s *av7110 = *av7110_ptr; - - av7110->arm_rmmod=1; - wake_up_interruptible(&av7110->arm_wait); - - while (av7110->arm_thread) - ddelay(1); - - dvb_unregister(av7110); - - saa7146_write (av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~(MASK_19 | MASK_03)); - - saa7146_write(av7110->saa_mem, ISR,(MASK_19 | MASK_03)); - - ci_ll_release(&av7110->ci_rbuffer, &av7110->ci_wbuffer); - dvb_filter_ipack_free(&av7110->ipack[0]); - dvb_filter_ipack_free(&av7110->ipack[1]); - vfree(av7110->iobuf); - pci_free_consistent(av7110->saa->device, 8192, av7110->debi_virt, - av7110->debi_bus); - - kfree (av7110); - *av7110_ptr = NULL; - - return 0; -} - - -static -void av7110_irq(struct saa7146 *saa, u32 isr, void *data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - - if (isr & MASK_19) - tasklet_schedule (&av7110->debi_tasklet); - - if (isr & MASK_03) - tasklet_schedule (&av7110->gpio_tasklet); - - if (isr & MASK_10) - tasklet_schedule (&av7110->vpe_tasklet); - - if (isr & MASK_07) - tasklet_schedule (&av7110->fidb_tasklet); -} - - -static -int av7110_command(struct saa7146 *saa, void *p, unsigned int cmd, void *arg) -{ - switch(cmd) { - case SAA7146_SUSPEND: - printk("dvb_suspend()\n"); - break; - case SAA7146_RESUME: - printk("dvb_resume()\n"); - break; - default: - return -ENOIOCTLCMD; - } - return 0; -} - - -static -void av7110_inc_use(struct saa7146* adap) -{ - MOD_INC_USE_COUNT; -} - - -static -void av7110_dec_use(struct saa7146* adap) -{ - MOD_DEC_USE_COUNT; -} - - -static struct saa7146_extension av7110_extension = { - "dvb extension\0", - MASK_07|MASK_10|MASK_19|MASK_03|MASK_27, - av7110_irq, - av7110_command, - av7110_attach, - av7110_detach, - av7110_inc_use, - av7110_dec_use -}; - - -int __init av7110_init(void) -{ - int result = 0; - - if ((result = saa7146_add_extension(&av7110_extension))) { - printk("%s: saa7146_add_extension() failed!\n", - __FUNCTION__); - return result; - } - - return result; -} - - -void __exit av7110_exit(void) -{ - if (saa7146_del_extension(&av7110_extension)) - printk(KERN_ERR "dvb: extension deregistration failed.\n"); -} - -//MODULE_DESCRIPTION("driver for the SAA7146 based AV110 PCI DVB cards by " -// "Siemens, Technotrend, Hauppauge"); -//MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others"); -//MODULE_LICENSE("GPL"); - -MODULE_PARM(av7110_debug,"i"); -MODULE_PARM(vidmem,"l"); -MODULE_PARM(vidlow,"l"); -MODULE_PARM(vidmode,"i"); -MODULE_PARM(init_vpid,"i"); -MODULE_PARM(init_apid,"i"); -MODULE_PARM(pids_off,"i"); -MODULE_PARM(adac,"i"); - -/* - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * indent-tabs-mode: nil - * tab-width: 8 - * End: - */ - diff -Nru a/drivers/media/dvb/av7110/av7110.h b/drivers/media/dvb/av7110/av7110.h --- a/drivers/media/dvb/av7110/av7110.h Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,743 +0,0 @@ -#ifndef _AV7110_H_ -#define _AV7110_H_ - -#define DVB_FIRM_PATH "/lib/DVB/" - -#include -#include -#include -#include - -#ifdef CONFIG_DEVFS_FS -#include -#endif - -/* DEBI transfer mode defs */ - -#define DEBINOSWAP 0x000e0000 -#define DEBISWAB 0x001e0000 -#define DEBISWAP 0x002e0000 - -#define ARM_WAIT_FREE (HZ) -#define ARM_WAIT_SHAKE (HZ/5) -#define ARM_WAIT_OSD (HZ) - -#if LINUX_VERSION_CODE < 0x020300 -#define net_device device -#define DECLARE_MUTEX(foo) struct semaphore foo = MUTEX -#define DECLARE_MUTEX_LOCKED(foo) struct semaphore foo = MUTEX_LOCKED -#define WAIT_QUEUE struct wait_queue* -#define init_waitqueue_head(wq) *(wq) = NULL; -#define DECLARE_WAITQUEUE(wait, current) struct wait_queue wait = { current, NULL } -#define set_current_state(state_value) \ - do { current->state = state_value; } while (0) -#define list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); pos = pos->next) - -#else - -#define WAIT_QUEUE wait_queue_head_t - -#endif - -#include -#include -#include -#include -#include -#include - -#include "../dvb-core/dvbdev.h" -#include "../dvb-core/demux.h" -#include "../dvb-core/dvb_demux.h" -#include "../dvb-core/dmxdev.h" -#include "../dvb-core/dvb_filter.h" -#include "../dvb-core/dvb_net.h" - - -typedef enum BOOTSTATES -{ - BOOTSTATE_BUFFER_EMPTY = 0, - BOOTSTATE_BUFFER_FULL = 1, - BOOTSTATE_BOOT_COMPLETE = 2 -} BOOTSTATES; - -typedef enum GPIO_MODE -{ - GPIO_INPUT = 0x00, - GPIO_IRQHI = 0x10, - GPIO_IRQLO = 0x20, - GPIO_IRQHL = 0x30, - GPIO_OUTLO = 0x40, - GPIO_OUTHI = 0x50 -} GPIO_MODE; - -typedef enum -{ RP_None, - AudioPES, - AudioMp2, - AudioPCM, - VideoPES, - AV_PES -} TYPE_REC_PLAY_FORMAT; - -typedef struct PARAMSTRUCT -{ - unsigned int wCommand; - int error; - unsigned long pdwData[100]; -} PARAMSTRUCT, *PPARAMSTRUCT; - -typedef enum OSDPALTYPE -{ - NoPalet = 0, /* No palette */ - Pal1Bit = 2, /* 2 colors for 1 Bit Palette */ - Pal2Bit = 4, /* 4 colors for 2 bit palette */ - Pal4Bit = 16, /* 16 colors for 4 bit palette */ - Pal8Bit = 256 /* 256 colors for 16 bit palette */ -} OSDPALTYPE, *POSDPALTYPE; - -typedef enum { - BITMAP1, /* 1 bit bitmap */ - BITMAP2, /* 2 bit bitmap */ - BITMAP4, /* 4 bit bitmap */ - BITMAP8, /* 8 bit bitmap */ - BITMAP1HR, /* 1 Bit bitmap half resolution */ - BITMAP2HR, /* 2 bit bitmap half resolution */ - BITMAP4HR, /* 4 bit bitmap half resolution */ - BITMAP8HR, /* 8 bit bitmap half resolution */ - YCRCB422, /* 4:2:2 YCRCB Graphic Display */ - YCRCB444, /* 4:4:4 YCRCB Graphic Display */ - YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */ - VIDEOTSIZE, /* True Size Normal MPEG Video Display */ - VIDEOHSIZE, /* MPEG Video Display Half Resolution */ - VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */ - VIDEODSIZE, /* MPEG Video Display Double Resolution */ - VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */ - VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/ - VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */ - VIDEONSIZE, /* Full Size MPEG Video Display */ - CURSOR /* Cursor */ -} DISPTYPE; /* Window display type */ - -// switch defines -#define SB_GPIO 3 -#define SB_OFF GPIO_OUTLO //SlowBlank aus (TV-Mode) -#define SB_ON GPIO_INPUT //SlowBlank an (AV-Mode) -#define SB_WIDE GPIO_OUTHI //SlowBlank 6V (16/9-Mode) nicht realisiert - -#define FB_GPIO 1 -#define FB_OFF GPIO_LO //FastBlank aus (CVBS-Mode) -#define FB_ON GPIO_OUTHI //FastBlank an (RGB-Mode) -#define FB_LOOP GPIO_INPUT //FastBlank der PC-Grafik durchschleifen - -typedef enum VIDEOOUTPUTMODE -{ - NO_OUT = 0, //disable analog Output - CVBS_RGB_OUT = 1, - CVBS_YC_OUT = 2, - YC_OUT = 3 -} VIDEOOUTPUTMODE, *PVIDEOOUTPUTMODE; - - -#define GPMQFull 0x0001 //Main Message Queue Full -#define GPMQOver 0x0002 //Main Message Queue Overflow -#define HPQFull 0x0004 //High Priority Msg Queue Full -#define HPQOver 0x0008 -#define OSDQFull 0x0010 //OSD Queue Full -#define OSDQOver 0x0020 - -#define SECTION_EIT 0x01 -#define SECTION_SINGLE 0x00 -#define SECTION_CYCLE 0x02 -#define SECTION_CONTINUOS 0x04 -#define SECTION_MODE 0x06 -#define SECTION_IPMPE 0x0C // bis zu 4k groß -#define SECTION_HIGH_SPEED 0x1C // vergrößerter Puffer für High Speed Filter -#define DATA_PIPING_FLAG 0x20 // für Data Piping Filter - -#define PBUFSIZE_NONE 0x0000 -#define PBUFSIZE_1P 0x0100 -#define PBUFSIZE_2P 0x0200 -#define PBUFSIZE_1K 0x0300 -#define PBUFSIZE_2K 0x0400 -#define PBUFSIZE_4K 0x0500 -#define PBUFSIZE_8K 0x0600 -#define PBUFSIZE_16K 0x0700 -#define PBUFSIZE_32K 0x0800 - -typedef enum { - WCreate, - WDestroy, - WMoveD, - WMoveA, - WHide, - WTop, - DBox, - DLine, - DText, - Set_Font, - SetColor, - SetBlend, - SetWBlend, - SetCBlend, - SetNonBlend, - LoadBmp, - BlitBmp, - ReleaseBmp, - SetWTrans, - SetWNoTrans -} OSDCOM; - -typedef enum { - MultiPID, - VideoPID, - AudioPID, - InitFilt, - FiltError, - NewVersion, - CacheError, - AddPIDFilter, - DelPIDFilter, - Scan, - SetDescr, - SetIR -} PIDCOM; - -typedef enum { - SelAudChannels -} MPEGCOM; - -typedef enum { - AudioDAC, - CabADAC, - ON22K, - OFF22K, - MainSwitch, - ADSwitch, - SendDiSEqC, - SetRegister -} AUDCOM; - -typedef enum { - AudioState, - AudioBuffState, - VideoState1, - VideoState2, - VideoState3, - CrashCounter, - ReqVersion, - ReqVCXO, - ReqRegister -} REQCOM; - -typedef enum { - SetVidMode, - SetTestMode, - LoadVidCode, - SetMonitorType, - SetPanScanType, - SetFreezeMode -} ENC; - -typedef enum { - __Record, - __Stop, - __Play, - __Pause, - __Slow, - __FF_IP, - __Scan_I, - __Continue -} REC_PLAY; - -typedef enum { - COMTYPE_NOCOM, - COMTYPE_PIDFILTER, - COMTYPE_MPEGDECODER, - COMTYPE_OSD, - COMTYPE_BMP, - COMTYPE_ENCODER, - COMTYPE_AUDIODAC, - COMTYPE_REQUEST, - COMTYPE_SYSTEM, - COMTYPE_REC_PLAY, - COMTYPE_COMMON_IF, - COMTYPE_PID_FILTER, - COMTYPE_PES, - COMTYPE_TS, - COMTYPE_VIDEO, - COMTYPE_AUDIO, - COMTYPE_CI_LL, -} COMTYPE; - -typedef enum { - AV7110_VIDEO_FREEZE, - AV7110_VIDEO_CONTINUE -} VIDEOCOM; - -typedef enum { - DVB_AUDIO_PAUSE, -} AUDIOCOM; - - -#define VID_NONE_PREF 0x00 /* No aspect ration processing preferred */ -#define VID_PAN_SCAN_PREF 0x01 /* Pan and Scan Display preferred */ -#define VID_VERT_COMP_PREF 0x02 /* Vertical compression display preferred */ -#define VID_VC_AND_PS_PREF 0x03 /* PanScan and vertical Compression if allowed */ -#define VID_CENTRE_CUT_PREF 0x05 /* PanScan with zero vector */ - -#define DATA_NONE 0x00 -#define DATA_FSECTION 0x01 -#define DATA_IPMPE 0x02 -#define DATA_MPEG_RECORD 0x03 -#define DATA_DEBUG_MESSAGE 0x04 -#define DATA_COMMON_INTERFACE 0x05 -#define DATA_MPEG_PLAY 0x06 -#define DATA_BMP_LOAD 0x07 -#define DATA_IRCOMMAND 0x08 -#define DATA_PIPING 0x09 -#define DATA_STREAMING 0x0a -#define DATA_CI_GET 0x0b -#define DATA_CI_PUT 0x0c - -#define DATA_PES_RECORD 0x10 -#define DATA_PES_PLAY 0x11 -#define DATA_TS_RECORD 0x12 -#define DATA_TS_PLAY 0x13 - -#define CI_CMD_ERROR 0x00 -#define CI_CMD_ACK 0x01 -#define CI_CMD_SYSTEM_READY 0x02 -#define CI_CMD_KEYPRESS 0x03 -#define CI_CMD_ON_TUNED 0x04 -#define CI_CMD_ON_SWITCH_PROGRAM 0x05 -#define CI_CMD_SECTION_ARRIVED 0x06 -#define CI_CMD_SECTION_TIMEOUT 0x07 -#define CI_CMD_TIME 0x08 -#define CI_CMD_ENTER_MENU 0x09 -#define CI_CMD_FAST_PSI 0x0a -#define CI_CMD_GET_SLOT_INFO 0x0b - -#define CI_MSG_NONE 0x00 -#define CI_MSG_CI_INFO 0x01 -#define CI_MSG_MENU 0x02 -#define CI_MSG_LIST 0x03 -#define CI_MSG_TEXT 0x04 -#define CI_MSG_REQUEST_INPUT 0x05 -#define CI_MSG_INPUT_COMPLETE 0x06 -#define CI_MSG_LIST_MORE 0x07 -#define CI_MSG_MENU_MORE 0x08 -#define CI_MSG_CLOSE_MMI_IMM 0x09 -#define CI_MSG_SECTION_REQUEST 0x0a -#define CI_MSG_CLOSE_FILTER 0x0b -#define CI_PSI_COMPLETE 0x0c -#define CI_MODULE_READY 0x0d -#define CI_SWITCH_PRG_REPLY 0x0e -#define CI_MSG_TEXT_MORE 0x0f - -#define CI_MSG_CA_PMT 0xe0 -#define CI_MSG_ERROR 0xf0 - -typedef struct ring_buffer_s { - u8 *data; - int size; - int pread; - int pwrite; - - WAIT_QUEUE queue; - spinlock_t lock; - struct semaphore sema; - - int error; -} ring_buffer_t; - - -#define PROG_STREAM_MAP 0xBC -#define PRIVATE_STREAM1 0xBD -#define PADDING_STREAM 0xBE -#define PRIVATE_STREAM2 0xBF -#define AUDIO_STREAM_S 0xC0 -#define AUDIO_STREAM_E 0xDF -#define VIDEO_STREAM_S 0xE0 -#define VIDEO_STREAM_E 0xEF -#define ECM_STREAM 0xF0 -#define EMM_STREAM 0xF1 -#define DSM_CC_STREAM 0xF2 -#define ISO13522_STREAM 0xF3 -#define PROG_STREAM_DIR 0xFF - -#define PTS_DTS_FLAGS 0xC0 - -//pts_dts flags -#define PTS_ONLY 0x80 -#define PTS_DTS 0xC0 -#define TS_SIZE 188 -#define TRANS_ERROR 0x80 -#define PAY_START 0x40 -#define TRANS_PRIO 0x20 -#define PID_MASK_HI 0x1F -//flags -#define TRANS_SCRMBL1 0x80 -#define TRANS_SCRMBL2 0x40 -#define ADAPT_FIELD 0x20 -#define PAYLOAD 0x10 -#define COUNT_MASK 0x0F - -// adaptation flags -#define DISCON_IND 0x80 -#define RAND_ACC_IND 0x40 -#define ES_PRI_IND 0x20 -#define PCR_FLAG 0x10 -#define OPCR_FLAG 0x08 -#define SPLICE_FLAG 0x04 -#define TRANS_PRIV 0x02 -#define ADAP_EXT_FLAG 0x01 - -// adaptation extension flags -#define LTW_FLAG 0x80 -#define PIECE_RATE 0x40 -#define SEAM_SPLICE 0x20 - -#define MAX_PLENGTH 0xFFFF -#define MAX_VID_PES 0x1FFF - -typedef struct section_s { - int id; - int length; - int found; - u8 payload[4096+3]; -} section_t; - - -#define MY_STATE_PES_START 1 -#define MY_STATE_PES_STARTED 2 -#define MY_STATE_FULL 4 - -#define MASKL DMX_MAX_FILTER_SIZE -#define MAXFILT 32 - -struct dvb_filter { - int state; - int flags; - int type; - u8 ts_state; - - u16 pid; - u8 value[MASKL]; - u8 mask[MASKL]; -}; - - -enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM}; - -typedef struct ps_packet_s{ - u8 scr[6]; - u8 mux_rate[3]; - u8 stuff_length; - u8 data[20]; - u8 sheader_llength[2]; - int sheader_length; - u8 rate_bound[3]; - u8 audio_bound; - u8 video_bound; - u8 reserved; - int npes; - int mpeg; -} ps_packet_t; - -typedef struct a2p_s{ - int type; - int found; - int length; - int headr; - u8 cid; - u8 flags; - u8 abuf[MAX_PLENGTH]; - int alength; - u8 vbuf[MAX_PLENGTH]; - int vlength; - int plength; - u8 last_av_pts[4]; - u8 av_pts[4]; - u8 scr[4]; - u16 count0; - u16 count1; - u16 pidv; - u16 pida; - u16 countv; - u16 counta; - void *dataA; - void *dataV; - void (*write_cb)(u8 const *buf, long int count, - void *data); -} a2p_t; - - -typedef struct p2t_s { - u8 pes[TS_SIZE]; - u8 counter; - long int pos; - int frags; - struct dvb_demux_feed *feed; -} p2t_t; - - -/* place to store all the necessary device information */ -typedef struct av7110_s { - - /* devices */ - - struct dvb_device dvb_dev; - dvb_net_t dvb_net; - struct video_device video; - - struct saa7146 *saa; - - struct tasklet_struct debi_tasklet; - struct tasklet_struct gpio_tasklet; - struct tasklet_struct vpe_tasklet; - struct tasklet_struct fidb_tasklet; - - int adac_type; /* audio DAC type */ -#define DVB_ADAC_TI 0 -#define DVB_ADAC_CRYSTAL 1 -#define DVB_ADAC_NONE -1 - - - /* buffers */ - - void *iobuf; /* memory for all buffers */ - ring_buffer_t avout; /* buffer for video or A/V mux */ -#define AVOUTLEN (128*1024) - ring_buffer_t aout; /* buffer for audio */ -#define AOUTLEN (64*1024) - void *bmpbuf; -#define BMPLEN (8*32768+1024) - - /* bitmap buffers and states */ - - int bmpp; - int bmplen; - int bmp_win; - u16 bmp_x, bmp_y; - int bmp_trans; - int bmp_state; -#define BMP_NONE 0 -#define BMP_LOADING 1 -#define BMP_LOADINGS 2 -#define BMP_LOADED 3 - WAIT_QUEUE bmpq; - - - /* DEBI and polled command interface */ - - spinlock_t debilock; - struct semaphore dcomlock; - int debitype; - int debilen; - int debibuf; - - - /* Recording and playback flags */ - - int rec_mode; - int playing; -#define RP_NONE 0 -#define RP_VIDEO 1 -#define RP_AUDIO 2 -#define RP_AV 3 - - - /* OSD */ - - int osdwin; /* currently active window */ - u16 osdbpp[8]; - - - /* CA */ - - ca_slot_info_t ci_slot[2]; - - int vidmode; - dmxdev_t dmxdev; - struct dvb_demux demux; - char demux_id[16]; - - dmx_frontend_t hw_frontend; - dmx_frontend_t mem_frontend; - - int fe_synced; - struct semaphore pid_mutex; - - int video_blank; - struct video_status videostate; - int display_ar; - int trickmode; -#define TRICK_NONE 0 -#define TRICK_FAST 1 -#define TRICK_SLOW 2 -#define TRICK_FREEZE 3 - struct audio_status audiostate; - - struct dvb_demux_filter *handle2filter[MAXFILT]; - p2t_t p2t_filter[MAXFILT]; - dvb_filter_pes2ts_t p2t[2]; - struct ipack_s ipack[2]; - u8 *kbuf[2]; - - int sinfo; - int shsize; - int swsize; - - int tsf; - u32 ttbp; - int feeding; - - int arm_errors; - int registered; - - - /* AV711X */ - - u32 arm_fw; - u32 arm_rtsl; - u32 arm_vid; - u32 arm_app; - u32 avtype; - int arm_ready; - struct task_struct *arm_thread; - WAIT_QUEUE arm_wait; - u16 arm_loops; - int arm_rmmod; - - void *saa_mem; - void *debi_virt; - dma_addr_t debi_bus; - - u16 pids[DMX_PES_OTHER]; - - ring_buffer_t ci_rbuffer; - ring_buffer_t ci_wbuffer; - - - struct dvb_adapter *dvb_adapter; - struct dvb_device *video_dev; - struct dvb_device *audio_dev; - struct dvb_device *ca_dev; - struct dvb_device *osd_dev; - - int dsp_dev; -} av7110_t; - - -#define DPRAM_BASE 0x4000 - -#define BOOT_STATE (DPRAM_BASE + 0x3F8) -#define BOOT_SIZE (DPRAM_BASE + 0x3FA) -#define BOOT_BASE (DPRAM_BASE + 0x3FC) -#define BOOT_BLOCK (DPRAM_BASE + 0x400) -#define BOOT_MAX_SIZE 0xc00 - -#define IRQ_STATE (DPRAM_BASE + 0x0F4) -#define IRQ_STATE_EXT (DPRAM_BASE + 0x0F6) -#define MSGSTATE (DPRAM_BASE + 0x0F8) -#define FILT_STATE (DPRAM_BASE + 0x0FA) -#define COMMAND (DPRAM_BASE + 0x0FC) -#define COM_BUFF (DPRAM_BASE + 0x100) -#define COM_BUFF_SIZE 0x20 - -#define BUFF1_BASE (DPRAM_BASE + 0x120) -#define BUFF1_SIZE 0xE0 - -#define DATA_BUFF_BASE (DPRAM_BASE + 0x200) -#define DATA_BUFF_SIZE 0x1C00 - -/* new buffers */ - -#define DATA_BUFF0_BASE (DPRAM_BASE + 0x200) -#define DATA_BUFF0_SIZE 0x0800 - -#define DATA_BUFF1_BASE (DATA_BUFF0_BASE+DATA_BUFF0_SIZE) -#define DATA_BUFF1_SIZE 0x0800 - -#define DATA_BUFF2_BASE (DATA_BUFF1_BASE+DATA_BUFF1_SIZE) -#define DATA_BUFF2_SIZE 0x0800 - -#define Reserved (DPRAM_BASE + 0x1E00) -#define Reserved_SIZE 0x1C0 - -#define DEBUG_WINDOW (DPRAM_BASE + 0x1FC0) -#define DBG_LOOP_CNT (DEBUG_WINDOW + 0x00) -#define DBG_SEC_CNT (DEBUG_WINDOW + 0x02) -#define DBG_AVRP_BUFF (DEBUG_WINDOW + 0x04) -#define DBG_AVRP_PEAK (DEBUG_WINDOW + 0x06) -#define DBG_MSG_CNT (DEBUG_WINDOW + 0x08) -#define DBG_CODE_REG (DEBUG_WINDOW + 0x0a) -#define DBG_TTX_Q (DEBUG_WINDOW + 0x0c) -#define DBG_AUD_EN (DEBUG_WINDOW + 0x0e) -#define DBG_WRONG_COM (DEBUG_WINDOW + 0x10) -#define DBG_ARR_OVFL (DEBUG_WINDOW + 0x12) -#define DBG_BUFF_OVFL (DEBUG_WINDOW + 0x14) -#define DBG_OVFL_CNT (DEBUG_WINDOW + 0x16) -#define DBG_SEC_OVFL (DEBUG_WINDOW + 0x18) - -#define STATUS_BASE (DPRAM_BASE + 0x1FC0) -#define STATUS_SCR (STATUS_BASE + 0x00) -#define STATUS_MODES (STATUS_BASE + 0x04) -#define STATUS_LOOPS (STATUS_BASE + 0x08) - -#define RX_TYPE (DPRAM_BASE + 0x1FE8) -#define RX_LEN (DPRAM_BASE + 0x1FEA) -#define TX_TYPE (DPRAM_BASE + 0x1FEC) -#define TX_LEN (DPRAM_BASE + 0x1FEE) - -#define RX_BUFF (DPRAM_BASE + 0x1FF4) -#define TX_BUFF (DPRAM_BASE + 0x1FF6) - -#define HANDSHAKE_REG (DPRAM_BASE + 0x1FF8) -#define COM_IF_LOCK (DPRAM_BASE + 0x1FFA) - -#define IRQ_RX (DPRAM_BASE + 0x1FFC) -#define IRQ_TX (DPRAM_BASE + 0x1FFE) - -#define DRAM_START_CODE 0x2e000404 -#define DRAM_MAX_CODE_SIZE 0x00100000 - -#define RESET_LINE 2 -#define DEBI_DONE_LINE 1 -#define ARM_IRQ_LINE 0 - -#define DAC_CS 0x8000 -#define DAC_CDS 0x0000 - - -extern unsigned char *av7110_dpram_addr, *av7110_root_addr; -extern int av7110_dpram_len, av7110_root_len; - -extern void av7110_register_irc_handler(void (*func)(u32)); -extern void av7110_unregister_irc_handler(void (*func)(u32)); -extern void av7110_setup_irc_config (av7110_t *av7110, u32 ir_config); - -extern int av7110_init (void); -extern int av7110_ir_init (void); - -extern void av7110_exit (void); -extern void av7110_ir_exit (void); - - -#endif /* _AV7110_H_ */ - -/* - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * indent-tabs-mode: nil - * tab-width: 8 - * End: - */ diff -Nru a/drivers/media/dvb/av7110/av7110_firm.h b/drivers/media/dvb/av7110/av7110_firm.h --- a/drivers/media/dvb/av7110/av7110_firm.h Sat Apr 12 14:44:07 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,31852 +0,0 @@ - -#include - -u8 Dpram [] __initdata = { - 0xe5, 0x9f, 0xf0, 0x1c, 0xe1, 0xb0, 0xf0, 0x0e, - 0xe5, 0x9f, 0xf0, 0x18, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x08, 0xe1, 0xa0, 0x00, 0x00, - 0xea, 0x00, 0x00, 0x06, 0xe2, 0x5e, 0xf0, 0x04, - 0x2c, 0x00, 0x00, 0xe8, 0x2e, 0x02, 0xcb, 0x40, - 0x2e, 0x02, 0x39, 0xb4, 0xa5, 0xa5, 0x5a, 0x5a, - 0x00, 0x1f, 0x15, 0x55, 0x00, 0x00, 0x00, 0x09, - 0xe9, 0x2d, 0x5f, 0xff, 0xe1, 0x4f, 0x00, 0x00, - 0xe9, 0x2d, 0x00, 0x01, 0xe2, 0x8f, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x10, 0x21, 0xff, 0x48, 0x25, - 0x68, 0x00, 0x40, 0x52, 0x42, 0x08, 0xd1, 0x0b, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x07, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x03, - 0x0a, 0x00, 0x42, 0x08, 0xd0, 0x29, 0x32, 0x20, - 0x21, 0x0f, 0x42, 0x08, 0xd1, 0x01, 0x32, 0x10, - 0x09, 0x00, 0x21, 0x01, 0x42, 0x08, 0xd1, 0x08, - 0x1d, 0x12, 0x21, 0x02, 0x42, 0x08, 0xd1, 0x04, - 0x1d, 0x12, 0x21, 0x04, 0x42, 0x08, 0xd1, 0x00, - 0x1d, 0x12, 0x48, 0x13, 0x68, 0x00, 0xb4, 0x01, - 0x08, 0x90, 0x21, 0x01, 0x40, 0x81, 0x48, 0x0f, - 0x60, 0x01, 0x48, 0x0d, 0x58, 0x82, 0x48, 0x01, - 0x46, 0x86, 0x47, 0x10, 0x2c, 0x00, 0x00, 0xb1, - 0xbc, 0x02, 0x48, 0x0b, 0x68, 0x02, 0x23, 0x20, - 0x05, 0x1b, 0x40, 0x1a, 0x43, 0x99, 0x43, 0x11, - 0x60, 0x01, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe8, 0xbd, 0x00, 0x01, 0xe1, 0x69, 0xf0, 0x00, - 0xe8, 0xbd, 0x5f, 0xff, 0xe2, 0x5e, 0xf0, 0x04, - 0x2e, 0x08, 0x3b, 0xa4, 0x66, 0x00, 0x00, 0x14, - 0x66, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x0c, 0x2e, 0x02, 0xcc, 0x48, - 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - - -u8 Root [] __initdata = { - 0xb4, 0x90, 0x49, 0x18, 0x1c, 0x0b, 0x4a, 0x18, - 0x1a, 0x50, 0x4f, 0x18, 0x1a, 0x79, 0x10, 0x8f, - 0x21, 0x00, 0x2f, 0x00, 0xdd, 0x04, 0xcb, 0x10, - 0xc2, 0x10, 0x31, 0x01, 0x42, 0xb9, 0xdb, 0xfa, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x08, 0x49, 0x13, 0x60, 0x08, - 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x02, 0x36, 0x7c, - 0x9e, 0x00, 0x0a, 0x00, 0x2e, 0x02, 0x37, 0x7c, - 0x2e, 0x02, 0x36, 0xcc, 0x2e, 0x02, 0x38, 0x9c, - 0x2e, 0x02, 0x37, 0x04, 0x2e, 0x02, 0x38, 0xa0, - 0x2e, 0x02, 0x37, 0x20, 0x2e, 0x02, 0x38, 0xa4, - 0x2e, 0x02, 0x36, 0xcc, 0x2e, 0x02, 0x38, 0xa8, - 0x2e, 0x02, 0x36, 0xe8, 0x2e, 0x02, 0x38, 0xac, - 0x2e, 0x02, 0x37, 0x20, 0x2e, 0x02, 0x38, 0xb0, - 0x2e, 0x02, 0x37, 0x04, 0x2e, 0x02, 0x38, 0xb4, - 0x2e, 0x02, 0x36, 0x7c, 0x2e, 0x02, 0x38, 0xb8, - 0xb5, 0xf0, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x07, - 0xb0, 0x82, 0x2a, 0x00, 0xd1, 0x03, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x0e, 0x38, - 0x06, 0x00, 0x21, 0x0b, 0x06, 0x89, 0x4b, 0x43, - 0x93, 0x01, 0x42, 0x88, 0xd1, 0x32, 0x08, 0x78, - 0xd3, 0x05, 0x1e, 0x78, 0x88, 0x00, 0x70, 0x20, - 0x34, 0x01, 0x3d, 0x01, 0x37, 0x01, 0x08, 0xb8, - 0xd3, 0x0f, 0x2d, 0x02, 0xdb, 0x0d, 0x08, 0x60, - 0xd3, 0x06, 0x88, 0x39, 0x0a, 0x09, 0x70, 0x21, - 0x88, 0x38, 0x70, 0x60, 0x34, 0x02, 0xe0, 0x02, - 0x88, 0x38, 0x80, 0x20, 0x34, 0x02, 0x3d, 0x02, - 0x37, 0x02, 0x07, 0xae, 0x0f, 0xb6, 0x1b, 0xad, - 0xd0, 0x08, 0x9b, 0x01, 0x68, 0x1b, 0x1c, 0x38, - 0x1c, 0x21, 0x1c, 0x2a, 0xf0, 0x1d, 0xfe, 0x6a, - 0x19, 0x7f, 0x19, 0x64, 0x2e, 0x00, 0xd0, 0x54, - 0x68, 0x38, 0x90, 0x00, 0x46, 0x6f, 0x78, 0x38, - 0x70, 0x20, 0x34, 0x01, 0x37, 0x01, 0x3e, 0x01, - 0xd1, 0xf9, 0xe0, 0x4a, 0x0e, 0x20, 0x06, 0x00, - 0x42, 0x88, 0xd1, 0x3f, 0xe0, 0x14, 0x08, 0x60, - 0xd3, 0x08, 0x1e, 0x60, 0x88, 0x01, 0x23, 0xff, - 0x02, 0x1b, 0x40, 0x19, 0x78, 0x3a, 0x43, 0x11, - 0x80, 0x01, 0xe0, 0x06, 0x88, 0x21, 0x06, 0x09, - 0x0e, 0x09, 0x78, 0x3a, 0x02, 0x12, 0x43, 0x11, - 0x80, 0x21, 0x34, 0x01, 0x3d, 0x01, 0x37, 0x01, - 0x07, 0xb8, 0xd0, 0x01, 0x2d, 0x00, 0xdc, 0xe6, - 0x07, 0xae, 0x0f, 0xb6, 0x1b, 0xad, 0xd0, 0x06, - 0x9b, 0x01, 0x68, 0x1b, 0x1c, 0x38, 0x1c, 0x21, - 0x1c, 0x2a, 0xf0, 0x1d, 0xfe, 0x33, 0x19, 0x7f, - 0x19, 0x64, 0x2e, 0x00, 0xd0, 0x1d, 0x08, 0x60, - 0xd3, 0x08, 0x1e, 0x60, 0x88, 0x01, 0x23, 0xff, - 0x02, 0x1b, 0x40, 0x19, 0x78, 0x3a, 0x43, 0x11, - 0x80, 0x01, 0xe0, 0x06, 0x88, 0x21, 0x06, 0x09, - 0x0e, 0x09, 0x78, 0x3a, 0x02, 0x12, 0x43, 0x11, - 0x80, 0x21, 0x34, 0x01, 0x37, 0x01, 0x3e, 0x01, - 0xd1, 0xe9, 0xe0, 0x06, 0x9b, 0x01, 0x68, 0x1b, - 0x1c, 0x38, 0x1c, 0x21, 0x1c, 0x2a, 0xf0, 0x1d, - 0xfe, 0x11, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x48, - 0xb5, 0x00, 0x20, 0x03, 0xf0, 0x03, 0xfb, 0x98, - 0x48, 0x03, 0x89, 0x02, 0x8a, 0x01, 0x89, 0x80, - 0xf0, 0x05, 0xff, 0xc2, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x00, 0x00, 0xb5, 0xf0, 0x4f, 0x10, - 0x89, 0x3c, 0x89, 0xbe, 0x8a, 0x3d, 0x23, 0x04, - 0x43, 0xdb, 0x68, 0x78, 0x40, 0x18, 0x0c, 0x1a, - 0x60, 0x78, 0xb4, 0x04, 0x1c, 0x13, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x14, - 0x20, 0x01, 0x60, 0x78, 0xb0, 0x01, 0x4a, 0x07, - 0xb4, 0x04, 0x1c, 0x20, 0x1c, 0x31, 0x1c, 0x2a, - 0x4b, 0x04, 0xf0, 0x00, 0xf8, 0x09, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0xf0, 0x9f, 0x05, 0x04, 0x04, 0x0c, 0x24, - 0x04, 0x0d, 0x0c, 0x2d, 0x04, 0x16, 0x0c, 0x36, - 0x04, 0x18, 0x0c, 0x00, 0xb0, 0x82, 0x90, 0x00, - 0x04, 0x38, 0x0c, 0x00, 0xb0, 0x81, 0x49, 0xa9, - 0x4f, 0xa9, 0x42, 0x8d, 0xd1, 0x00, 0x89, 0xbd, - 0x42, 0x8e, 0xd1, 0x00, 0x8a, 0x3e, 0x4a, 0xa7, - 0x42, 0x95, 0xd1, 0x02, 0x89, 0xbd, 0x08, 0xd3, - 0x81, 0xbb, 0x4b, 0xa4, 0x42, 0x9e, 0xd1, 0x02, - 0x8a, 0x3e, 0x08, 0xdb, 0x82, 0x3b, 0x9a, 0x01, - 0x42, 0x8a, 0xd1, 0x01, 0x8a, 0xba, 0x92, 0x01, - 0xa0, 0x9f, 0x22, 0x2d, 0x21, 0x00, 0xf0, 0x06, - 0xf8, 0x69, 0xa0, 0x9f, 0x22, 0x37, 0x21, 0x00, - 0xf0, 0x06, 0xf8, 0x64, 0x22, 0x3c, 0x21, 0x00, - 0x1c, 0x28, 0xf0, 0x06, 0xf8, 0x97, 0xa0, 0x9c, - 0x22, 0x41, 0x21, 0x00, 0xf0, 0x06, 0xf8, 0x5a, - 0x22, 0x46, 0x21, 0x00, 0x1c, 0x30, 0xf0, 0x06, - 0xf8, 0x8d, 0xa0, 0x99, 0x22, 0x37, 0x21, 0x01, - 0xf0, 0x06, 0xf8, 0x50, 0x22, 0x3e, 0x21, 0x01, - 0x1c, 0x20, 0xf0, 0x06, 0xf8, 0x83, 0xa0, 0x96, - 0x22, 0x37, 0x21, 0x02, 0xf0, 0x06, 0xf8, 0x46, - 0x22, 0x3e, 0x21, 0x02, 0x98, 0x01, 0xf0, 0x06, - 0xf8, 0x79, 0x8a, 0xbb, 0x99, 0x01, 0x42, 0x99, - 0xd0, 0x20, 0x68, 0x38, 0x90, 0x02, 0x28, 0x00, - 0xd0, 0x1a, 0x2b, 0x00, 0xd0, 0x0a, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x1c, 0xb4, 0x07, 0x1c, 0x19, - 0x23, 0x10, 0x22, 0x1d, 0x98, 0x05, 0xf0, 0x0f, - 0xfe, 0x75, 0xb0, 0x03, 0x98, 0x01, 0x28, 0x00, - 0xd0, 0x0a, 0x22, 0x01, 0x21, 0x00, 0x20, 0x1c, - 0xb4, 0x07, 0x99, 0x04, 0x23, 0x10, 0x22, 0x1d, - 0x68, 0x38, 0xf0, 0x0f, 0xfe, 0x67, 0xb0, 0x03, - 0x98, 0x01, 0x82, 0xb8, 0x4b, 0x80, 0x42, 0x9c, - 0xd0, 0x46, 0xdc, 0x37, 0x2c, 0x00, 0xd0, 0x3d, - 0x3b, 0x02, 0x42, 0x9c, 0xd0, 0x38, 0x4b, 0x7d, - 0x42, 0x9c, 0xd1, 0x00, 0x1c, 0x34, 0xa0, 0x7c, - 0x22, 0x42, 0x21, 0x01, 0xf0, 0x06, 0xf8, 0x0a, - 0x22, 0x43, 0x21, 0x01, 0x1c, 0x20, 0xf0, 0x06, - 0xf8, 0x3d, 0xa0, 0x78, 0x22, 0x47, 0x21, 0x01, - 0xf0, 0x06, 0xf8, 0x00, 0x22, 0x00, 0xb4, 0x04, - 0x23, 0x00, 0x49, 0x64, 0x20, 0x1c, 0xf0, 0x0f, - 0xff, 0xdf, 0x89, 0xb8, 0xb0, 0x01, 0x42, 0x85, - 0xd1, 0x02, 0x89, 0x38, 0x42, 0x84, 0xd0, 0x44, - 0x81, 0xbd, 0x20, 0x1f, 0xf0, 0x10, 0xfb, 0x18, - 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x02, 0x20, 0x1f, 0xf0, 0x10, 0xf9, 0x90, - 0x2d, 0x00, 0xd0, 0x33, 0x2d, 0x01, 0xd1, 0x11, - 0x25, 0x00, 0xe0, 0x32, 0x4b, 0x57, 0x42, 0x9c, - 0xd0, 0x04, 0x33, 0x01, 0x42, 0x9c, 0xd1, 0xca, - 0x89, 0x3c, 0xe7, 0xc8, 0x2d, 0x00, 0xd0, 0x01, - 0x1c, 0x2c, 0xe7, 0xc4, 0x1c, 0x34, 0xe7, 0xc2, - 0x1c, 0x2c, 0xe7, 0xc0, 0x42, 0xac, 0xd1, 0x01, - 0x20, 0x80, 0xe0, 0x00, 0x20, 0x00, 0x22, 0x00, - 0xb4, 0x04, 0x06, 0x00, 0x0e, 0x00, 0x22, 0x02, - 0x43, 0x02, 0x23, 0x01, 0x20, 0x1f, 0x1c, 0x29, - 0xf0, 0x0f, 0xff, 0xa6, 0x23, 0x01, 0x02, 0x9b, - 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1f, 0xb0, 0x01, - 0xf0, 0x10, 0xf9, 0x62, 0x21, 0x00, 0x20, 0x1f, - 0xf0, 0x10, 0xfe, 0x54, 0x20, 0x01, 0xf0, 0x13, - 0xfa, 0x43, 0xe0, 0x02, 0x20, 0x00, 0xf0, 0x13, - 0xfa, 0x3f, 0x8a, 0x38, 0x42, 0x86, 0xd1, 0x02, - 0x89, 0x39, 0x42, 0x8c, 0xd0, 0x52, 0x28, 0x00, - 0xd0, 0x0d, 0x20, 0x03, 0xf0, 0x13, 0xfb, 0x96, - 0x20, 0x1e, 0xf0, 0x10, 0xfb, 0x93, 0x23, 0x03, - 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x10, 0xf9, 0x41, 0x82, 0x3e, - 0x2e, 0x00, 0xd0, 0x3f, 0x42, 0xb4, 0xd1, 0x02, - 0x20, 0x80, 0x90, 0x00, 0xe0, 0x01, 0x20, 0x00, - 0x90, 0x00, 0xf0, 0x23, 0xf8, 0x8d, 0x23, 0x01, - 0x04, 0x1b, 0x43, 0x18, 0xf0, 0x23, 0xf8, 0x8c, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x14, 0xf8, 0x74, - 0x20, 0xff, 0x49, 0x37, 0x68, 0x09, 0x70, 0x08, - 0x49, 0x36, 0x48, 0x37, 0x23, 0x1e, 0x22, 0x10, - 0xf0, 0x14, 0xf9, 0xa8, 0x48, 0x35, 0x68, 0x00, - 0x78, 0x01, 0x23, 0x06, 0x43, 0x19, 0x70, 0x01, - 0xf0, 0x23, 0xf8, 0x72, 0x4b, 0x32, 0x40, 0x18, - 0xf0, 0x23, 0xf8, 0x72, 0x22, 0x00, 0xb4, 0x04, - 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x22, 0x02, - 0x43, 0x02, 0x23, 0x02, 0x20, 0x1e, 0x1c, 0x31, - 0xf0, 0x0f, 0xff, 0x46, 0x23, 0x01, 0x02, 0x9b, - 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1e, 0xb0, 0x01, - 0xf0, 0x10, 0xf9, 0x02, 0x21, 0x00, 0x20, 0x1e, - 0xf0, 0x10, 0xfd, 0xf4, 0x42, 0xac, 0xd0, 0x18, - 0x42, 0xb4, 0xd0, 0x16, 0x2c, 0x00, 0xd0, 0x14, - 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, - 0x20, 0x1c, 0xf0, 0x10, 0xf8, 0xf1, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x00, 0x22, 0x82, 0x20, 0x1c, - 0x1c, 0x21, 0xf0, 0x0f, 0xff, 0x25, 0xb0, 0x01, - 0xa0, 0x1a, 0x22, 0x47, 0x21, 0x01, 0xf0, 0x05, - 0xff, 0x39, 0x81, 0x3c, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, - 0x53, 0x49, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x50, 0x49, 0x44, 0x3a, 0x00, 0x00, 0x00, - 0x41, 0x50, 0x49, 0x44, 0x3a, 0x00, 0x00, 0x00, - 0x50, 0x43, 0x52, 0x50, 0x49, 0x44, 0x3a, 0x00, - 0x54, 0x58, 0x54, 0x50, 0x49, 0x44, 0x3a, 0x00, - 0x00, 0x00, 0xff, 0xfd, 0x00, 0x00, 0xff, 0xfc, - 0x2f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x98, 0x2e, 0x08, 0x48, 0x10, - 0x2e, 0x08, 0x05, 0xb4, 0x2e, 0x08, 0x9b, 0xc4, - 0xff, 0xfe, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, - 0xb5, 0x00, 0x22, 0x00, 0xb4, 0x04, 0x04, 0x01, - 0x0c, 0x09, 0x23, 0x00, 0x4a, 0x03, 0x1e, 0x50, - 0xf7, 0xff, 0xfe, 0x66, 0xb0, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x00, 0x22, 0x00, 0xb4, 0x04, 0x04, 0x02, - 0x0c, 0x12, 0x23, 0x00, 0x49, 0x03, 0x1e, 0x48, - 0xf7, 0xff, 0xfe, 0x56, 0xb0, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x08, - 0x28, 0x01, 0xd0, 0x0b, 0x28, 0x02, 0xd1, 0x02, - 0x02, 0x00, 0xf0, 0x13, 0xfa, 0xcf, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x80, 0xf0, 0x13, 0xfa, 0xca, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0xff, 0x30, 0x01, - 0xf0, 0x13, 0xfa, 0xc4, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xb0, 0x27, 0x00, 0x4c, 0x1b, 0x20, 0x01, - 0x04, 0x80, 0x21, 0x00, 0x22, 0x00, 0xc4, 0x86, - 0xc4, 0x84, 0x3c, 0x14, 0xf0, 0x05, 0xf8, 0x9c, - 0x61, 0x60, 0x28, 0x00, 0xd0, 0x06, 0x21, 0x01, - 0x04, 0x89, 0x61, 0xe1, 0x18, 0x41, 0x62, 0x20, - 0x61, 0xa1, 0xe0, 0x02, 0x61, 0xe7, 0x61, 0xa7, - 0x62, 0x27, 0x68, 0x21, 0x00, 0xc9, 0x4a, 0x10, - 0x18, 0x89, 0x60, 0x48, 0x20, 0x00, 0x49, 0x0f, - 0x4d, 0x0f, 0x00, 0x42, 0x52, 0x8d, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x1d, 0xdb, 0xf8, - 0x20, 0x00, 0x1c, 0x39, 0x4c, 0x0b, 0x4f, 0x0c, - 0x4b, 0x0c, 0x00, 0x42, 0x52, 0xa5, 0x00, 0x82, - 0x50, 0xb9, 0x50, 0x99, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf5, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x00, 0x1c, - 0x2e, 0x08, 0x3c, 0x20, 0x2e, 0x08, 0x49, 0xa8, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x4a, 0x98, 0x2e, 0x08, 0x4b, 0x18, - 0xb4, 0xf0, 0xb0, 0x81, 0x49, 0x25, 0xc9, 0x0c, - 0x39, 0x08, 0x1a, 0xd2, 0x60, 0x8a, 0xd5, 0x02, - 0x32, 0xff, 0x32, 0x01, 0x60, 0x8a, 0x6a, 0x0a, - 0x62, 0x8a, 0x68, 0x8f, 0x2f, 0xfe, 0xdb, 0x03, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0x47, 0x70, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x4c, 0x1b, - 0x69, 0xa6, 0x69, 0x64, 0x2f, 0x3e, 0xdb, 0x24, - 0x00, 0xdb, 0x4f, 0x19, 0x19, 0xdb, 0x68, 0x5b, - 0x62, 0x4b, 0x93, 0x00, 0x1a, 0x9f, 0x4b, 0x15, - 0x69, 0xdd, 0x2f, 0x00, 0xdc, 0x00, 0x19, 0x7f, - 0x23, 0x01, 0x03, 0x1b, 0x18, 0xc3, 0x42, 0xbb, - 0xdd, 0x0f, 0x18, 0x17, 0x42, 0xb7, 0xdb, 0x09, - 0x9a, 0x00, 0x1b, 0x12, 0x2a, 0x00, 0xdc, 0x00, - 0x19, 0x52, 0x42, 0x93, 0xdd, 0x11, 0x18, 0x20, - 0x62, 0x08, 0xe0, 0x0e, 0x62, 0x0f, 0x1c, 0x14, - 0xe0, 0x0b, 0x18, 0x10, 0x62, 0x08, 0x1c, 0x14, - 0xe0, 0x07, 0x18, 0x12, 0x42, 0xb2, 0xdb, 0x00, - 0x62, 0x0c, 0x6a, 0x0a, 0x18, 0x10, 0x62, 0x08, - 0x1c, 0x14, 0x1c, 0x20, 0xb0, 0x01, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x1c, - 0x2e, 0x08, 0x3c, 0x20, 0x48, 0x03, 0x6a, 0x81, - 0x62, 0x01, 0x69, 0x01, 0x31, 0x01, 0x61, 0x01, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x1c, - 0xb5, 0xf7, 0x04, 0x05, 0x0c, 0x2d, 0x04, 0x0e, - 0x0c, 0x36, 0xb0, 0x81, 0x23, 0x01, 0x03, 0x1b, - 0x98, 0x03, 0x42, 0x9e, 0xdd, 0x05, 0x20, 0xff, - 0xb0, 0x01, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x4f, 0x24, 0x68, 0xb9, 0x29, 0xff, - 0xdb, 0x02, 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xf4, - 0x00, 0x69, 0x19, 0x49, 0x00, 0x89, 0x4a, 0x20, - 0x18, 0x8c, 0x89, 0x21, 0x29, 0x01, 0xd0, 0x02, - 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xe9, 0x79, 0x81, - 0x91, 0x00, 0x88, 0xa0, 0x08, 0x40, 0x07, 0x80, - 0xd1, 0x02, 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0xf4, - 0x88, 0xa0, 0x23, 0x06, 0x40, 0x18, 0x28, 0x02, - 0xd1, 0x09, 0x88, 0xe0, 0x99, 0x00, 0x42, 0x88, - 0xd1, 0x05, 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0xe8, - 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xd1, 0x88, 0xe0, - 0x4b, 0x10, 0x42, 0x98, 0xd1, 0x01, 0x99, 0x00, - 0x80, 0xe1, 0x68, 0x39, 0x00, 0xc8, 0x4a, 0x0e, - 0x52, 0x15, 0x18, 0x80, 0x80, 0x46, 0x9a, 0x03, - 0x31, 0x01, 0x60, 0x42, 0x20, 0x00, 0x23, 0xff, - 0x60, 0x39, 0x33, 0x01, 0x42, 0x99, 0xd1, 0x00, - 0x60, 0x38, 0x68, 0xb9, 0x31, 0x01, 0x60, 0xb9, - 0x68, 0xfb, 0x42, 0x99, 0xdd, 0x00, 0x60, 0xf9, - 0xb0, 0x01, 0xe7, 0xb2, 0x2e, 0x08, 0x00, 0x1c, - 0x2e, 0x08, 0x48, 0x28, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x3c, 0x20, 0xb5, 0xf0, 0x26, 0xff, - 0xb0, 0x83, 0x49, 0x3b, 0x91, 0x01, 0x48, 0x3b, - 0x8e, 0x80, 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x4f, 0x38, - 0xcf, 0x05, 0x3f, 0x08, 0x1a, 0x80, 0x60, 0xb8, - 0x1c, 0x01, 0xd5, 0x02, 0x1d, 0xc8, 0x30, 0xf9, - 0x60, 0xb8, 0x68, 0xb8, 0x28, 0x00, 0xd1, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xd0, 0x49, 0x30, 0x5a, 0x0d, 0x18, 0x40, - 0x88, 0x44, 0x68, 0x40, 0x90, 0x00, 0x00, 0xa8, - 0x49, 0x2d, 0x58, 0x09, 0x91, 0x02, 0x29, 0x00, - 0xd0, 0x08, 0x49, 0x2c, 0x58, 0x0b, 0x99, 0x00, - 0x9e, 0x02, 0x1c, 0x28, 0x1c, 0x22, 0xf0, 0x1d, - 0xfa, 0xdb, 0x26, 0x00, 0x48, 0x28, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x09, 0x1c, 0x28, 0xf0, 0x0d, - 0xfa, 0xc3, 0x28, 0xff, 0xd1, 0x04, 0x98, 0x00, - 0x1c, 0x21, 0xf0, 0x0d, 0xfa, 0x3f, 0x26, 0x00, - 0x2e, 0x00, 0xd0, 0x29, 0x06, 0xed, 0x0e, 0xed, - 0x1c, 0xe0, 0x08, 0x82, 0x00, 0x92, 0x98, 0x00, - 0x99, 0x01, 0x6a, 0xfb, 0xf0, 0x1d, 0xfa, 0xba, - 0x00, 0x68, 0x19, 0x40, 0x00, 0x80, 0x49, 0x1b, - 0x18, 0x40, 0x88, 0x80, 0x21, 0x0c, 0x40, 0x01, - 0x29, 0x0c, 0xd1, 0x04, 0x02, 0x29, 0x31, 0x02, - 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x03, 0x02, 0x29, - 0x31, 0x01, 0x04, 0x09, 0x0c, 0x09, 0x08, 0x40, - 0xd3, 0x04, 0x04, 0x08, 0x0c, 0x00, 0x21, 0x01, - 0x03, 0xc9, 0x43, 0x01, 0x48, 0x09, 0x85, 0x01, - 0x85, 0x44, 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, - 0x68, 0x78, 0x28, 0xff, 0xd1, 0x02, 0x20, 0x00, - 0x60, 0x78, 0xe0, 0x01, 0x30, 0x01, 0x60, 0x78, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x02, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x08, 0x3c, 0x20, - 0x2e, 0x08, 0x4a, 0x98, 0x2e, 0x08, 0x4b, 0x18, - 0x2e, 0x08, 0x1a, 0x94, 0x2e, 0x08, 0x48, 0x28, - 0xb4, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x4f, 0x14, - 0x8e, 0xba, 0x2a, 0x00, 0xd0, 0x03, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0xf0, 0x47, 0x70, 0x1c, 0x05, - 0x4c, 0x10, 0x1d, 0x48, 0xd5, 0x00, 0x30, 0x01, - 0x10, 0x40, 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, - 0x29, 0x02, 0xdb, 0xf2, 0x29, 0xe0, 0xdc, 0xf0, - 0x22, 0x00, 0x29, 0x00, 0xdd, 0x07, 0x00, 0x53, - 0x5a, 0xee, 0x52, 0xe6, 0x32, 0x01, 0x04, 0x12, - 0x0c, 0x12, 0x42, 0x8a, 0xdb, 0xf7, 0x22, 0x04, - 0x85, 0x3a, 0x00, 0x49, 0x85, 0x79, 0x21, 0x0f, - 0x02, 0x49, 0x86, 0xb9, 0xbc, 0xf0, 0x47, 0x70, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x1e, 0x00, - 0xb5, 0xb0, 0x27, 0x00, 0x4d, 0x13, 0x8e, 0xa9, - 0x29, 0x00, 0xd0, 0x03, 0x43, 0xf8, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x79, 0x04, 0x09, - 0x0c, 0x09, 0x1c, 0x3a, 0x1c, 0x0f, 0x56, 0x81, - 0x29, 0x00, 0xd1, 0xf7, 0x24, 0x00, 0x2f, 0xfe, - 0xdd, 0x03, 0x27, 0xfe, 0x1d, 0xc1, 0x31, 0xd9, - 0x77, 0xcc, 0x1c, 0x7a, 0x49, 0x08, 0xf7, 0xff, - 0xfb, 0x8f, 0x20, 0x04, 0x85, 0x28, 0x1c, 0xf8, - 0x08, 0x80, 0x00, 0x80, 0x85, 0x68, 0x20, 0x0f, - 0x02, 0x40, 0x86, 0xa8, 0x1c, 0x20, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x1e, 0x00, 0xb5, 0x90, 0x06, 0x04, - 0x0e, 0x24, 0x06, 0x0f, 0x0e, 0x3f, 0xb0, 0x88, - 0xf0, 0x04, 0xfa, 0x1e, 0x28, 0x00, 0xd0, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x08, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xab, 0x00, 0x70, 0x1c, - 0x70, 0x5f, 0x46, 0x68, 0x21, 0x20, 0xf0, 0x0a, - 0xfa, 0x6f, 0xb0, 0x08, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0xb4, 0xf0, 0x04, 0x0a, 0x0c, 0x12, - 0x4b, 0x15, 0x8e, 0x9f, 0x2f, 0x00, 0xd0, 0x03, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, 0x47, 0x70, - 0x07, 0xd7, 0x0f, 0xff, 0x04, 0x09, 0x0c, 0x09, - 0x08, 0x49, 0x2f, 0x00, 0xd0, 0x03, 0x31, 0x03, - 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x02, 0x31, 0x02, - 0x04, 0x09, 0x0c, 0x09, 0x1c, 0x05, 0x4c, 0x0b, - 0x20, 0x00, 0x29, 0x00, 0xdd, 0x07, 0x00, 0x47, - 0x5b, 0xee, 0x53, 0xe6, 0x30, 0x01, 0x04, 0x00, - 0x0c, 0x00, 0x42, 0x88, 0xdb, 0xf7, 0x20, 0x05, - 0x85, 0x18, 0x85, 0x5a, 0x20, 0x01, 0x02, 0x40, - 0x86, 0x98, 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x02, 0x00, - 0x04, 0x01, 0x0c, 0x09, 0x48, 0x0b, 0x6f, 0xc2, - 0x20, 0x00, 0x43, 0xc0, 0x2a, 0x00, 0xd1, 0x0f, - 0x4a, 0x09, 0x8e, 0xd3, 0x2b, 0x00, 0xd1, 0x0b, - 0x48, 0x08, 0x86, 0xc1, 0x23, 0x07, 0x86, 0x83, - 0x85, 0x93, 0x85, 0xd1, 0x20, 0x09, 0x02, 0x40, - 0x86, 0xd0, 0x20, 0x01, 0x87, 0x90, 0x20, 0x00, - 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0x80, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x00, 0xc0, - 0xb5, 0x80, 0x1c, 0x01, 0x4a, 0x0d, 0x8e, 0xd3, - 0x20, 0x00, 0x43, 0xc0, 0x2b, 0x00, 0xd1, 0x12, - 0x8d, 0x93, 0x2b, 0x07, 0xd1, 0x0f, 0x8d, 0xd7, - 0x20, 0x00, 0x85, 0x90, 0x2f, 0x00, 0xd0, 0x0a, - 0x23, 0x01, 0x02, 0xdb, 0x42, 0x9f, 0xdc, 0x06, - 0x1c, 0x3a, 0x48, 0x05, 0x4b, 0x05, 0x6a, 0xdb, - 0xf0, 0x1d, 0xf9, 0x98, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x12, 0x00, 0x2e, 0x08, 0x00, 0x1c, - 0xb5, 0xf0, 0xb0, 0x83, 0x49, 0x62, 0x8e, 0x88, - 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x4e, 0x5f, 0x78, 0x30, - 0x49, 0x5f, 0x91, 0x02, 0x78, 0x09, 0x42, 0x88, - 0xd1, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0x4d, 0x5b, 0x4b, 0x5c, - 0x93, 0x01, 0x1d, 0xd9, 0x31, 0x19, 0x7d, 0x0a, - 0x00, 0x53, 0x18, 0x9b, 0x01, 0x1b, 0x19, 0x5b, - 0x78, 0xdc, 0x1c, 0x1f, 0x79, 0x1b, 0x42, 0x9c, - 0xd1, 0x04, 0x79, 0x7b, 0x07, 0xdb, 0x0f, 0xdb, - 0x2b, 0x01, 0xd1, 0x06, 0x7d, 0x0b, 0x93, 0x00, - 0x32, 0x01, 0x07, 0x52, 0x0f, 0x52, 0x75, 0x0a, - 0xe0, 0x08, 0x32, 0x01, 0x07, 0x52, 0x0f, 0x52, - 0x75, 0x0a, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x28, 0x08, 0xdb, 0xe0, 0x28, 0x08, 0xd1, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x00, 0x00, 0x43, 0x18, 0x18, 0x01, 0x00, - 0x19, 0x47, 0x78, 0xf8, 0x00, 0xc0, 0x19, 0xc0, - 0x89, 0x84, 0x23, 0x01, 0x03, 0x1b, 0x42, 0x9c, - 0xdd, 0x00, 0x1c, 0x1c, 0x68, 0x81, 0x89, 0xc0, - 0x18, 0x08, 0x1c, 0xe1, 0x08, 0x8a, 0x00, 0x92, - 0x49, 0x3e, 0x9b, 0x01, 0x6a, 0xdb, 0xf0, 0x1d, - 0xf9, 0x35, 0x88, 0x38, 0x02, 0x00, 0x30, 0x09, - 0x49, 0x35, 0x85, 0x08, 0x85, 0x4c, 0x20, 0x01, - 0x02, 0x40, 0x86, 0x88, 0x78, 0xf8, 0x00, 0xc0, - 0x19, 0xc0, 0x89, 0xc1, 0x19, 0x09, 0x81, 0xc1, - 0x78, 0xf8, 0x00, 0xc0, 0x19, 0xc0, 0x89, 0x81, - 0x1b, 0x09, 0x81, 0x81, 0x78, 0xf8, 0x00, 0xc0, - 0x19, 0xc0, 0x89, 0x81, 0x29, 0x00, 0xd1, 0x4f, - 0x24, 0x00, 0x81, 0xc4, 0x78, 0xf9, 0x6a, 0xb8, - 0x18, 0x40, 0x73, 0x04, 0x78, 0xf8, 0x30, 0x01, - 0x07, 0x80, 0x0f, 0x80, 0x70, 0xf8, 0x78, 0x30, - 0x30, 0x01, 0x70, 0x30, 0x78, 0xf8, 0x79, 0x39, - 0x42, 0x88, 0xd1, 0x3d, 0x79, 0x78, 0x21, 0x02, - 0x40, 0x01, 0x29, 0x02, 0xd1, 0x1e, 0x70, 0xfc, - 0x71, 0x3c, 0x71, 0x7c, 0x49, 0x22, 0x80, 0x39, - 0x6a, 0xb8, 0x68, 0x00, 0xf0, 0x04, 0xfd, 0xb6, - 0x6a, 0xb8, 0xf0, 0x04, 0xfd, 0xb3, 0x20, 0x00, - 0x49, 0x1d, 0x00, 0x42, 0x18, 0x12, 0x01, 0x12, - 0x5a, 0xaa, 0x42, 0x8a, 0xd1, 0x04, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf4, - 0x28, 0x08, 0xd1, 0x1d, 0x70, 0x34, 0x99, 0x02, - 0x70, 0x0c, 0xe0, 0x19, 0x07, 0xc0, 0x0f, 0xc0, - 0x28, 0x01, 0xd1, 0x15, 0x70, 0xfc, 0x71, 0x3c, - 0x21, 0x06, 0x1d, 0xf8, 0x30, 0x19, 0x73, 0x41, - 0x6a, 0xb9, 0x72, 0x0c, 0x79, 0x79, 0x08, 0x49, - 0x00, 0x49, 0x71, 0x79, 0x22, 0x04, 0x7b, 0x01, - 0xb4, 0x06, 0x78, 0xb9, 0x22, 0x0a, 0x20, 0x85, - 0x6a, 0xbb, 0xf0, 0x0f, 0xfd, 0xc3, 0xb0, 0x02, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x03, 0xc0, - 0x2e, 0x08, 0x03, 0xbc, 0x2e, 0x08, 0x45, 0x18, - 0x2e, 0x08, 0x00, 0x1c, 0x2c, 0x00, 0x02, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x4f, 0x0b, - 0x68, 0x38, 0x28, 0x00, 0xd1, 0x0f, 0x20, 0x2f, - 0x02, 0x80, 0xf0, 0x04, 0xfd, 0x91, 0x60, 0x38, - 0x20, 0x00, 0x49, 0x07, 0x60, 0x08, 0x49, 0x07, - 0x60, 0x08, 0x49, 0x07, 0x60, 0x08, 0x20, 0x2f, - 0x02, 0x80, 0x49, 0x06, 0x60, 0x08, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xcb, 0x04, - 0x2e, 0x02, 0xcb, 0x0c, 0x2e, 0x02, 0xcb, 0x08, - 0x2e, 0x02, 0xcb, 0x10, 0x2e, 0x02, 0xcb, 0x14, - 0xb5, 0x80, 0x4f, 0x04, 0x68, 0x38, 0xf0, 0x04, - 0xfd, 0x7d, 0x20, 0x00, 0x60, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xcb, 0x04, - 0xb5, 0xf0, 0xb0, 0x82, 0x4a, 0x33, 0x8e, 0x90, - 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x48, 0x30, 0x68, 0x01, - 0x4e, 0x30, 0x68, 0x30, 0x1a, 0x09, 0xd1, 0x03, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x29, 0x00, 0xda, 0x02, 0x23, 0x2f, 0x02, 0x9b, - 0x18, 0xc9, 0x23, 0x2f, 0x01, 0x1b, 0x42, 0x99, - 0xda, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x4a, 0x24, 0x8e, 0xd2, 0x2a, 0x00, - 0xd0, 0x06, 0x4b, 0x25, 0x42, 0x99, 0xda, 0x03, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1f, 0xcf, 0x3f, 0xff, 0x3f, 0x72, 0x4b, 0x21, - 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, 0x21, 0x2f, - 0x02, 0x89, 0x1a, 0x0c, 0x4d, 0x1e, 0x49, 0x1f, - 0x91, 0x01, 0x42, 0xa7, 0xdd, 0x14, 0x1b, 0x3a, - 0x92, 0x00, 0x99, 0x01, 0x68, 0x09, 0x18, 0x08, - 0x1c, 0x22, 0x49, 0x1b, 0x6b, 0x2b, 0xf0, 0x1d, - 0xf8, 0x45, 0x4b, 0x19, 0x18, 0xe1, 0x98, 0x01, - 0x9a, 0x00, 0x68, 0x00, 0x6b, 0x2b, 0xf0, 0x1d, - 0xf8, 0x3d, 0x9a, 0x00, 0x60, 0x32, 0xe0, 0x0e, - 0x99, 0x01, 0x68, 0x09, 0x18, 0x08, 0x1c, 0x3a, - 0x49, 0x11, 0x6b, 0x2b, 0xf0, 0x1d, 0xf8, 0x32, - 0x68, 0x30, 0x19, 0xc1, 0x20, 0x2f, 0x02, 0x80, - 0xf0, 0x1d, 0xf8, 0x36, 0x60, 0x31, 0x20, 0x12, - 0x4a, 0x04, 0x85, 0x10, 0x85, 0x57, 0x20, 0x01, - 0x02, 0x40, 0x86, 0x90, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x02, 0xcb, 0x0c, 0x2e, 0x02, 0xcb, 0x08, - 0x00, 0x00, 0x0a, 0x48, 0x00, 0x00, 0x0f, 0x6c, - 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x02, 0xcb, 0x04, - 0x2c, 0x00, 0x02, 0x00, 0x2a, 0x00, 0xd0, 0x05, - 0x78, 0x03, 0x70, 0x0b, 0x30, 0x01, 0x31, 0x01, - 0x3a, 0x01, 0xd1, 0xf9, 0x47, 0x70, 0xb5, 0xf3, - 0xb0, 0x83, 0x98, 0x03, 0x78, 0x40, 0x00, 0x80, - 0x1c, 0x0f, 0x49, 0x3d, 0x58, 0x08, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0xb0, 0xb0, 0x03, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x03, - 0x88, 0x45, 0x30, 0x04, 0xc8, 0x41, 0x1d, 0xf2, - 0x32, 0xb9, 0x1a, 0x14, 0x23, 0x01, 0x03, 0x1b, - 0x42, 0x9d, 0xdd, 0x03, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0xec, 0x19, 0x79, 0x91, 0x00, - 0x4b, 0x30, 0x93, 0x02, 0x2c, 0xbc, 0xdc, 0x01, - 0x2c, 0x00, 0xda, 0x07, 0x9b, 0x02, 0x68, 0x18, - 0x30, 0x01, 0x60, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0xdc, 0x42, 0xac, 0xdb, 0x06, - 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x2a, - 0xf0, 0x1c, 0xff, 0xd0, 0xe0, 0x44, 0x2d, 0x00, - 0xdd, 0x42, 0x4b, 0x25, 0x93, 0x01, 0x99, 0x00, - 0x42, 0x8f, 0xd9, 0x07, 0x9b, 0x02, 0x68, 0x18, - 0x30, 0x01, 0x60, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0xc4, 0x42, 0xa5, 0xdd, 0x07, - 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x22, - 0xf0, 0x1c, 0xff, 0xb8, 0x68, 0x36, 0xe0, 0x05, - 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x2a, - 0xf0, 0x1c, 0xff, 0xb0, 0x19, 0x3f, 0x1b, 0x2d, - 0x79, 0xb0, 0x19, 0x80, 0x9a, 0x03, 0x78, 0x52, - 0x00, 0xd3, 0x1a, 0x9a, 0x00, 0x92, 0x9b, 0x01, - 0x68, 0x1b, 0x18, 0xd2, 0x78, 0x92, 0x06, 0xd2, - 0x0e, 0xd2, 0x1d, 0x31, 0x2a, 0x12, 0xd1, 0x06, - 0x78, 0xca, 0x0a, 0x12, 0xd2, 0x03, 0x78, 0x89, - 0x29, 0x09, 0xd1, 0x00, 0x38, 0x01, 0x1d, 0xf1, - 0x31, 0xb9, 0x1a, 0x0c, 0x2c, 0xbc, 0xdc, 0x01, - 0x2c, 0x00, 0xda, 0x03, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0x90, 0x2d, 0x00, 0xdc, 0xbe, - 0x20, 0x00, 0xb0, 0x03, 0xe7, 0x8b, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x00, 0x58, - 0x2e, 0x08, 0x9b, 0x30, 0xb4, 0xf0, 0x68, 0x42, - 0x68, 0x84, 0x1d, 0xe1, 0x31, 0xb7, 0x1c, 0x16, - 0xb0, 0x81, 0x42, 0x91, 0xd9, 0x09, 0x78, 0x51, - 0x07, 0x09, 0x0f, 0x09, 0x02, 0x09, 0x78, 0x92, - 0x43, 0x11, 0x31, 0x03, 0x04, 0x09, 0x0c, 0x09, - 0xe0, 0x5b, 0x68, 0x21, 0x79, 0x8b, 0x93, 0x00, - 0x1d, 0x0f, 0x18, 0x59, 0x78, 0x45, 0x00, 0xeb, - 0x1b, 0x5b, 0x00, 0x9b, 0x4d, 0x2b, 0x68, 0x2d, - 0x19, 0x5b, 0x78, 0x9b, 0x06, 0xdb, 0x0e, 0xdb, - 0x2b, 0x12, 0xd1, 0x31, 0x1d, 0xe3, 0x33, 0xb9, - 0x1b, 0x9b, 0x06, 0x1d, 0x0e, 0x2d, 0x78, 0xfe, - 0x0a, 0x33, 0xd2, 0x29, 0x2d, 0x0e, 0xda, 0x27, - 0x9b, 0x00, 0x2b, 0x09, 0xdd, 0x06, 0x79, 0x3b, - 0x18, 0xfb, 0x33, 0x05, 0x42, 0x8b, 0xd0, 0x1f, - 0x39, 0x01, 0xe0, 0x1d, 0x9b, 0x00, 0x2b, 0x09, - 0xd1, 0x1a, 0x79, 0x3b, 0x2b, 0x00, 0xd0, 0x01, - 0x39, 0x01, 0xe0, 0x15, 0x39, 0x01, 0x1d, 0xe3, - 0x33, 0xb8, 0x42, 0x93, 0xd9, 0x09, 0x78, 0x53, - 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, 0x04, 0x1b, - 0x0c, 0x1b, 0x33, 0x03, 0x04, 0x1b, 0x0c, 0x1b, - 0xe0, 0x03, 0x78, 0x4b, 0x33, 0x03, 0x04, 0x1b, - 0x0c, 0x1b, 0x42, 0x9d, 0xda, 0x00, 0x31, 0x01, - 0x1d, 0xe3, 0x33, 0xb8, 0x42, 0x93, 0xd9, 0x0b, - 0x78, 0x52, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, - 0x04, 0x12, 0x0c, 0x12, 0x78, 0x09, 0x18, 0x51, - 0x31, 0x03, 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x08, - 0x78, 0x0a, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, - 0x78, 0x49, 0x43, 0x11, 0x31, 0x03, 0x04, 0x09, - 0x0c, 0x09, 0x80, 0x41, 0xb0, 0x01, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x30, - 0x4a, 0x02, 0xc2, 0x03, 0x3a, 0x08, 0x20, 0x00, - 0x60, 0x90, 0x47, 0x70, 0x2e, 0x08, 0x44, 0x20, - 0x48, 0x01, 0x68, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x44, 0x20, 0x48, 0x01, 0x68, 0x80, - 0x08, 0xc0, 0x47, 0x70, 0x2e, 0x08, 0x44, 0x20, - 0x48, 0x02, 0x68, 0x81, 0x08, 0xc9, 0x68, 0x00, - 0x18, 0x08, 0x47, 0x70, 0x2e, 0x08, 0x44, 0x20, - 0xb4, 0xf0, 0x1c, 0x03, 0x20, 0x00, 0xb0, 0x82, - 0x49, 0x53, 0x91, 0x01, 0x68, 0x89, 0x18, 0xcf, - 0x97, 0x00, 0x08, 0xca, 0x07, 0x4c, 0x0f, 0x64, - 0x49, 0x4f, 0x68, 0x09, 0xd1, 0x32, 0x1c, 0x1f, - 0xd5, 0x04, 0x42, 0x7f, 0x07, 0x7f, 0x0f, 0x7f, - 0x42, 0x7f, 0xe0, 0x01, 0x07, 0x7f, 0x0f, 0x7f, - 0x2f, 0x00, 0xd1, 0x27, 0x2b, 0x10, 0xd0, 0x16, - 0xdc, 0x05, 0x2b, 0x00, 0xd0, 0x5a, 0x2b, 0x08, - 0xd1, 0x59, 0x5c, 0x88, 0xe0, 0x81, 0x2b, 0x18, - 0xd0, 0x13, 0x2b, 0x20, 0xd1, 0x53, 0x5c, 0x88, - 0x06, 0x00, 0x18, 0x89, 0x78, 0x4a, 0x04, 0x12, - 0x18, 0x80, 0x78, 0x8a, 0x02, 0x12, 0x18, 0x80, - 0x78, 0xc9, 0x18, 0x40, 0xe0, 0x71, 0x5c, 0x88, - 0x02, 0x00, 0x18, 0x89, 0x78, 0x49, 0x18, 0x40, - 0xe0, 0x6b, 0x5c, 0x88, 0x04, 0x00, 0x18, 0x89, - 0x78, 0x4a, 0x02, 0x12, 0x18, 0x80, 0x78, 0x89, - 0x18, 0x40, 0xe0, 0x62, 0x2b, 0x00, 0xd1, 0x03, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x9f, 0x00, 0x08, 0xfd, 0x07, 0x7f, 0x0f, 0x7f, - 0x2b, 0x20, 0xdc, 0x56, 0x1a, 0xae, 0x4d, 0x2f, - 0x2e, 0x05, 0xd2, 0x52, 0xa3, 0x01, 0x5d, 0x9b, - 0x00, 0x5b, 0x44, 0x9f, 0x02, 0x09, 0x14, 0x25, - 0x38, 0x00, 0x5c, 0x88, 0x5d, 0x29, 0x40, 0x08, - 0x21, 0x08, 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x44, - 0x1c, 0x50, 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, - 0x02, 0x12, 0x5c, 0x08, 0x18, 0x80, 0x21, 0x08, - 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x39, 0x1c, 0x50, - 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, 0x02, 0x12, - 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, 0x02, 0x00, - 0x5c, 0xc9, 0x18, 0x08, 0x21, 0x08, 0x1b, 0xc9, - 0x40, 0xc8, 0xe0, 0x2a, 0xe0, 0x29, 0xe0, 0x28, - 0x1c, 0x50, 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, - 0x02, 0x12, 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, - 0x02, 0x00, 0x1c, 0x5a, 0x5c, 0xcb, 0x18, 0x18, - 0x02, 0x00, 0x5c, 0x89, 0x18, 0x08, 0x21, 0x08, - 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x15, 0x1c, 0x50, - 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, 0x02, 0x12, - 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, 0x02, 0x00, - 0x1c, 0x5a, 0x5c, 0xcb, 0x18, 0x18, 0x02, 0x03, - 0x1c, 0x50, 0x5c, 0x8a, 0x18, 0xd2, 0x40, 0xba, - 0x5c, 0x08, 0x21, 0x08, 0x1b, 0xc9, 0x40, 0xc8, - 0x18, 0x80, 0x99, 0x01, 0x9f, 0x00, 0x60, 0x8f, - 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x44, 0x20, 0x2e, 0x08, 0x00, 0x60, - 0xb5, 0xb0, 0x1c, 0x07, 0x20, 0x00, 0x24, 0x00, - 0x2f, 0x00, 0xdd, 0x09, 0x00, 0x85, 0x18, 0x2d, - 0x00, 0x6d, 0x20, 0x04, 0xf7, 0xff, 0xff, 0x44, - 0x19, 0x40, 0x34, 0x01, 0x42, 0xbc, 0xdb, 0xf5, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x47, 0x70, 0xb5, 0xb0, 0x1c, 0x0c, 0x1c, 0x05, - 0x1c, 0x17, 0xb0, 0x90, 0xf0, 0x22, 0xfa, 0x20, - 0x49, 0x25, 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0xe8, - 0xf0, 0x22, 0xf9, 0xde, 0x4b, 0x23, 0x40, 0x18, - 0xf0, 0x22, 0xf9, 0xde, 0xf0, 0x22, 0xfa, 0x4a, - 0x20, 0x10, 0x90, 0x0a, 0x20, 0xff, 0x90, 0x0b, - 0xa8, 0x0f, 0x90, 0x0c, 0x20, 0x0c, 0x90, 0x0d, - 0x48, 0x1d, 0x90, 0x0e, 0xa8, 0x0a, 0xf0, 0x14, - 0xfb, 0xa5, 0xab, 0x07, 0x70, 0x1d, 0x94, 0x08, - 0x72, 0x1f, 0x24, 0x00, 0xab, 0x09, 0x70, 0x5c, - 0x27, 0x00, 0x4d, 0x18, 0xf0, 0x14, 0xfc, 0x06, - 0x28, 0x00, 0xd0, 0x02, 0x37, 0x01, 0x42, 0xaf, - 0xdb, 0xf8, 0x20, 0x01, 0xa9, 0x07, 0xf0, 0x14, - 0xfc, 0x07, 0xf0, 0x14, 0xfb, 0xfb, 0x28, 0x00, - 0xd1, 0xfb, 0x94, 0x0b, 0xa8, 0x0a, 0xf0, 0x14, - 0xfb, 0x89, 0xf0, 0x22, 0xf9, 0xe9, 0x21, 0x00, - 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0xb1, 0xf0, 0x22, - 0xf9, 0xa7, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, - 0xf0, 0x22, 0xf9, 0xa6, 0xf0, 0x22, 0xfa, 0x12, - 0x46, 0x68, 0xf0, 0x14, 0xfb, 0xc3, 0x98, 0x04, - 0xb0, 0x10, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x00, 0x15, 0xa5, 0xff, 0xff, 0xf7, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x9e, 0x09, 0x1c, 0x04, 0x1c, 0x0d, - 0x1c, 0x17, 0xb0, 0x93, 0xf0, 0x22, 0xf9, 0xc4, - 0x49, 0x31, 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0x8c, - 0xf0, 0x22, 0xf9, 0x82, 0x4b, 0x2f, 0x40, 0x18, - 0xf0, 0x22, 0xf9, 0x82, 0xf0, 0x22, 0xf9, 0xee, - 0x20, 0x10, 0x90, 0x0d, 0x20, 0xff, 0x90, 0x0e, - 0xa8, 0x12, 0x90, 0x0f, 0x20, 0x0c, 0x90, 0x10, - 0x48, 0x29, 0x90, 0x11, 0xa8, 0x0d, 0xf0, 0x14, - 0xfb, 0x49, 0xab, 0x07, 0x70, 0x1c, 0x95, 0x08, - 0x72, 0x1f, 0x20, 0xff, 0xab, 0x09, 0x70, 0x58, - 0x1c, 0x60, 0x71, 0x18, 0x9b, 0x16, 0x93, 0x0b, - 0xab, 0x0c, 0x70, 0x1e, 0x20, 0xff, 0x70, 0x58, - 0x24, 0x00, 0x4d, 0x20, 0xf0, 0x14, 0xfb, 0xa2, - 0x28, 0x00, 0xd0, 0x02, 0x34, 0x01, 0x42, 0xac, - 0xdb, 0xf8, 0x2f, 0x00, 0xd1, 0x04, 0x20, 0x01, - 0xa9, 0x0a, 0xf0, 0x14, 0xfb, 0xa1, 0xe0, 0x03, - 0x20, 0x02, 0xa9, 0x07, 0xf0, 0x14, 0xfb, 0x9c, - 0xf0, 0x14, 0xfb, 0x90, 0x28, 0x00, 0xd1, 0xfb, - 0x27, 0x00, 0x97, 0x0e, 0xa8, 0x0d, 0xf0, 0x14, - 0xfb, 0x1d, 0xf0, 0x22, 0xf9, 0x7d, 0x21, 0x00, - 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0x45, 0xf0, 0x22, - 0xf9, 0x3b, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, - 0xf0, 0x22, 0xf9, 0x3a, 0xf0, 0x22, 0xf9, 0xa6, - 0x46, 0x68, 0xf0, 0x14, 0xfb, 0x57, 0x98, 0x01, - 0x0a, 0x80, 0xd2, 0x05, 0x20, 0x01, 0xb0, 0x13, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xb0, 0x13, 0xe7, 0xf8, 0x00, 0x00, - 0x2e, 0x00, 0x15, 0xa5, 0xff, 0xff, 0xf7, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x27, 0x10, - 0x1c, 0x01, 0x48, 0x04, 0x61, 0xc1, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x01, 0x48, 0x02, 0x60, 0x01, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x68, - 0x6e, 0x00, 0x17, 0x00, 0xb5, 0xb0, 0x4f, 0x41, - 0x69, 0x38, 0x4c, 0x41, 0x28, 0x00, 0xd0, 0x07, - 0x20, 0x03, 0x60, 0x20, 0x69, 0x38, 0x38, 0x01, - 0x61, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x02, 0x69, 0x78, 0x28, 0x00, 0xd0, 0x04, - 0x60, 0x21, 0x69, 0x78, 0x38, 0x01, 0x61, 0x78, - 0xd1, 0xf3, 0x68, 0xf8, 0x28, 0x00, 0xd0, 0x20, - 0x38, 0x01, 0x60, 0xf8, 0x4a, 0x35, 0xd0, 0x08, - 0x68, 0xbb, 0x18, 0xd2, 0x3a, 0x20, 0x7f, 0xd2, - 0x1e, 0x45, 0x40, 0xea, 0x07, 0xd2, 0x0f, 0xd2, - 0xe0, 0x09, 0x68, 0xbb, 0x18, 0xd2, 0x3a, 0x20, - 0x7f, 0xd2, 0x4b, 0x2f, 0x5c, 0x9a, 0x23, 0x01, - 0x40, 0x5a, 0x06, 0x12, 0x0e, 0x12, 0x23, 0x01, - 0x2a, 0x00, 0xd0, 0x02, 0x61, 0x79, 0x61, 0x3b, - 0xe0, 0x01, 0x61, 0x39, 0x61, 0x7b, 0x28, 0x00, - 0xd1, 0xcf, 0x68, 0xb8, 0x30, 0x01, 0x60, 0xb8, - 0x23, 0x09, 0x68, 0x7a, 0x1c, 0x01, 0x42, 0x90, - 0xdc, 0x03, 0x60, 0xfb, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x20, 0x1c, 0x55, 0x42, 0x8d, - 0xd1, 0x03, 0x61, 0x78, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x95, 0x42, 0x8d, 0xd1, 0x0d, - 0x7e, 0x3d, 0x2d, 0xff, 0xd0, 0x0a, 0x2d, 0x00, - 0xd0, 0x03, 0x60, 0xfb, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x19, 0x61, 0x38, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x32, 0x03, 0x42, 0x8a, - 0xd1, 0x04, 0x20, 0x22, 0x61, 0x78, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x69, 0xf9, 0x60, 0x21, - 0x68, 0x79, 0x68, 0xba, 0x31, 0x04, 0x42, 0x91, - 0xd1, 0x0a, 0x69, 0xf9, 0x29, 0x00, 0xd0, 0x03, - 0x61, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x61, 0x78, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xf0, 0x03, 0xff, 0xca, 0x20, 0x00, 0x60, 0x38, - 0x69, 0xf8, 0x60, 0x20, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x68, - 0x6e, 0x00, 0x17, 0x00, 0x2e, 0x08, 0x44, 0x2c, - 0x2e, 0x08, 0x00, 0x68, 0xb5, 0xb0, 0x04, 0x0b, - 0x0c, 0x1b, 0x04, 0x14, 0x0c, 0x24, 0x49, 0x14, - 0x68, 0x0a, 0x2a, 0x00, 0xd0, 0x02, 0x68, 0x0a, - 0x2a, 0x00, 0xd1, 0xfc, 0x22, 0x01, 0x60, 0x0a, - 0x2b, 0x0a, 0xdd, 0x00, 0x23, 0x0a, 0x22, 0x00, - 0x4f, 0x0e, 0x2b, 0x00, 0xdd, 0x05, 0x00, 0x55, - 0x5b, 0x45, 0x54, 0xbd, 0x32, 0x01, 0x42, 0x9a, - 0xdb, 0xf9, 0x76, 0x0c, 0x20, 0xff, 0x18, 0xfa, - 0x70, 0x50, 0x20, 0x00, 0x60, 0x4b, 0x22, 0x20, - 0x61, 0x08, 0x61, 0x4a, 0x60, 0x88, 0x60, 0xc8, - 0x49, 0x05, 0x20, 0x32, 0xf0, 0x03, 0xff, 0x66, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x68, 0x2e, 0x08, 0x44, 0x2c, - 0x2e, 0x00, 0x17, 0x61, 0xb5, 0x80, 0x04, 0x01, - 0x0c, 0x09, 0x20, 0x00, 0x22, 0x00, 0xb0, 0x88, - 0x00, 0x47, 0x46, 0x6b, 0x53, 0xda, 0x30, 0x01, - 0x04, 0x00, 0x14, 0x00, 0x28, 0x10, 0xdb, 0xf7, - 0x22, 0x80, 0x00, 0x43, 0x46, 0x68, 0x52, 0xc2, - 0x46, 0x6a, 0x1c, 0x08, 0x21, 0x05, 0xf0, 0x04, - 0xfa, 0x33, 0x49, 0x06, 0x80, 0x88, 0x00, 0x42, - 0x18, 0x12, 0x00, 0x92, 0x4b, 0x04, 0x5a, 0x9a, - 0x81, 0x0a, 0xb0, 0x08, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x88, - 0x2e, 0x08, 0x48, 0x28, 0xb5, 0x80, 0xb0, 0xb2, - 0x46, 0x68, 0xf0, 0x15, 0xf8, 0x99, 0xaf, 0x16, - 0xcf, 0x83, 0x9a, 0x19, 0xf0, 0x00, 0xf9, 0xd2, - 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0xed, 0xb0, 0x32, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0x06, 0x00, 0x0e, 0x00, 0x06, 0x09, 0x0e, 0x09, - 0xf0, 0x0f, 0xfd, 0x7a, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x09, - 0x0e, 0x09, 0x4b, 0x05, 0x68, 0x1b, 0x06, 0x1b, - 0x0e, 0x1b, 0x2b, 0x30, 0xd3, 0x01, 0xf0, 0x0f, - 0xfd, 0x6b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xbc, 0xb5, 0xf0, 0x25, 0x00, - 0x4e, 0x1a, 0x4c, 0x1b, 0x4f, 0x1b, 0x68, 0x30, - 0x68, 0x00, 0x00, 0x40, 0x0a, 0x40, 0x02, 0x40, - 0x21, 0x19, 0x06, 0x89, 0x6a, 0x89, 0x4b, 0x18, - 0x40, 0x19, 0x0a, 0x49, 0x43, 0x08, 0x49, 0x17, - 0x64, 0x08, 0xf0, 0x01, 0xfc, 0x63, 0xf0, 0x02, - 0xf9, 0x3b, 0x68, 0x38, 0x30, 0x01, 0x60, 0x38, - 0x48, 0x13, 0x88, 0x01, 0x31, 0x01, 0x80, 0x01, - 0x20, 0x0c, 0x68, 0x21, 0xf0, 0x1c, 0xfc, 0x42, - 0x29, 0x00, 0xd1, 0x01, 0xf7, 0xff, 0xff, 0xae, - 0x20, 0x32, 0x68, 0x21, 0xf0, 0x1c, 0xfc, 0x3a, - 0x4b, 0x0c, 0x42, 0x98, 0xd9, 0x01, 0x49, 0x0c, - 0x60, 0xf9, 0x42, 0x85, 0xd0, 0xd3, 0x1c, 0x05, - 0xf0, 0x00, 0xfe, 0x40, 0x20, 0x00, 0x60, 0x38, - 0xe7, 0xcd, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xa4, - 0x2e, 0x08, 0x05, 0xbc, 0x2e, 0x08, 0x01, 0x88, - 0x00, 0x03, 0xfe, 0x00, 0x2c, 0x00, 0x1f, 0x80, - 0x2c, 0x00, 0x1f, 0xc8, 0x00, 0x00, 0x05, 0x46, - 0x2e, 0x00, 0x19, 0x65, 0xb5, 0xf0, 0x27, 0x00, - 0xb0, 0x94, 0x46, 0x68, 0x4c, 0x2f, 0xcc, 0x6e, - 0xc0, 0x6e, 0xcc, 0x6e, 0xc0, 0x6e, 0x23, 0x28, - 0x22, 0x41, 0x00, 0xd2, 0x21, 0x00, 0x20, 0x01, - 0xf0, 0x0d, 0xfd, 0xda, 0x22, 0xff, 0x21, 0x64, - 0x20, 0x01, 0x32, 0xf5, 0xf0, 0x0d, 0xfe, 0x9c, - 0x20, 0x00, 0x46, 0x69, 0x5c, 0x09, 0x40, 0x41, - 0x23, 0x35, 0x40, 0x59, 0xaa, 0x0a, 0x54, 0x11, - 0x30, 0x01, 0x28, 0x25, 0xdb, 0xf5, 0x24, 0x00, - 0xa9, 0x0a, 0x54, 0x0c, 0x22, 0x00, 0x20, 0x01, - 0x1c, 0x23, 0xf0, 0x0e, 0xf8, 0xfa, 0x4e, 0x1e, - 0x4d, 0x1e, 0x4c, 0x1f, 0xf0, 0x03, 0xff, 0x6e, - 0xf0, 0x03, 0xff, 0x6c, 0x28, 0x28, 0xd9, 0x10, - 0x42, 0xb0, 0xd3, 0x0e, 0x69, 0xe9, 0x08, 0xc9, - 0xd3, 0x0b, 0x4b, 0x1a, 0x18, 0xc1, 0x20, 0x1e, - 0xf0, 0x1c, 0xfb, 0xe0, 0x21, 0x64, 0x1d, 0xc2, - 0x32, 0xff, 0x32, 0xee, 0x20, 0x01, 0xf0, 0x0d, - 0xfe, 0x6f, 0xf0, 0x01, 0xfb, 0xeb, 0xf0, 0x02, - 0xf8, 0xc3, 0xf0, 0x03, 0xff, 0x53, 0x1c, 0x01, - 0x20, 0x7d, 0x00, 0xc0, 0xf0, 0x1c, 0xfb, 0xce, - 0x1c, 0x01, 0x48, 0x0f, 0x88, 0x02, 0x32, 0x01, - 0x80, 0x02, 0x42, 0xb9, 0xd0, 0xd6, 0x2f, 0x04, - 0xd3, 0x06, 0x20, 0x01, 0xf0, 0x0d, 0xfd, 0x78, - 0xb0, 0x14, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x0f, 0xf0, 0x00, 0xfd, 0xcb, 0x20, 0x00, - 0x60, 0x20, 0xe7, 0xc7, 0x2e, 0x02, 0xcc, 0x74, - 0x00, 0x00, 0x0b, 0xb8, 0x72, 0x00, 0x01, 0x00, - 0x2e, 0x08, 0x01, 0x88, 0xff, 0xff, 0xf4, 0x48, - 0x2c, 0x00, 0x1f, 0xc8, 0xb5, 0x80, 0x27, 0x00, - 0x48, 0x08, 0x81, 0x07, 0x48, 0x08, 0x49, 0x09, - 0x60, 0xc8, 0xf0, 0x03, 0xfd, 0x43, 0xf7, 0xff, - 0xff, 0x85, 0xf0, 0x00, 0xf8, 0xd3, 0xf7, 0xff, - 0xff, 0x39, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x00, 0x19, 0x53, 0x2e, 0x08, 0x01, 0x88, - 0x47, 0x70, 0xb5, 0xf0, 0x4d, 0x29, 0x68, 0x01, - 0x31, 0x03, 0x10, 0x89, 0x1e, 0xcb, 0x68, 0x41, - 0x10, 0x89, 0x68, 0x82, 0x10, 0x92, 0x00, 0x89, - 0x30, 0x0c, 0x18, 0x0c, 0x21, 0x03, 0x05, 0x89, - 0x27, 0x35, 0x06, 0x7f, 0x60, 0x39, 0x49, 0x22, - 0x68, 0x0e, 0x08, 0xb6, 0x00, 0xb6, 0x60, 0x0e, - 0x21, 0x00, 0x2b, 0x00, 0xd9, 0x04, 0xc8, 0x40, - 0xc5, 0x40, 0x31, 0x01, 0x42, 0x99, 0xd3, 0xfa, - 0x23, 0x00, 0x49, 0x1c, 0x65, 0x8b, 0x20, 0x00, - 0x2a, 0x00, 0xd9, 0x04, 0xcc, 0x20, 0x64, 0x8d, - 0x30, 0x01, 0x42, 0x90, 0xd3, 0xfa, 0x48, 0x18, - 0x60, 0x03, 0x60, 0x3b, 0x66, 0x8b, 0x60, 0x3b, - 0x22, 0x01, 0x64, 0xca, 0x21, 0x00, 0x4a, 0x15, - 0x68, 0x03, 0x2b, 0x00, 0xd1, 0x05, 0x33, 0x01, - 0x2b, 0x64, 0xdb, 0xfc, 0x31, 0x01, 0x42, 0x91, - 0xdb, 0xf6, 0x48, 0x11, 0x68, 0x01, 0x23, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x49, 0x0f, 0x20, 0x33, - 0x06, 0x40, 0x65, 0x41, 0x49, 0x0e, 0x65, 0x81, - 0x49, 0x0e, 0x66, 0x81, 0x39, 0x04, 0x66, 0x41, - 0x21, 0x03, 0x67, 0x01, 0x21, 0x00, 0x20, 0x0d, - 0xf0, 0x14, 0xfd, 0x62, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x70, 0x6a, 0x00, 0x00, 0x80, - 0xcc, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x27, 0x10, - 0x6a, 0x00, 0x00, 0x10, 0xcc, 0x00, 0x0f, 0x84, - 0xcc, 0x00, 0x0f, 0x88, 0x98, 0x00, 0x0f, 0x88, - 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x08, - 0xf0, 0x15, 0xf9, 0x9c, 0x48, 0x08, 0x21, 0x40, - 0xf0, 0x14, 0xfe, 0x6c, 0x20, 0x01, 0x21, 0x35, - 0x06, 0x49, 0x61, 0x08, 0x20, 0x02, 0x43, 0xc0, - 0x49, 0x04, 0x63, 0x08, 0x20, 0x00, 0x21, 0x39, - 0x06, 0x49, 0x62, 0xc8, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x02, 0x3b, 0x04, 0x72, 0x00, 0x01, 0x00, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x0f, 0xd0, 0x10, - 0x29, 0x01, 0xd0, 0x12, 0x29, 0x02, 0xd0, 0x14, - 0x29, 0x03, 0xd1, 0x01, 0x49, 0x0c, 0x60, 0x01, - 0x68, 0x01, 0x68, 0x40, 0x43, 0x08, 0x22, 0x00, - 0x21, 0x1e, 0xf0, 0x15, 0xf9, 0xdb, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x01, 0x04, 0x49, 0x60, 0x01, - 0xe7, 0xf2, 0x21, 0x21, 0x03, 0x09, 0x60, 0x01, - 0xe7, 0xee, 0x21, 0x41, 0x03, 0x09, 0x60, 0x01, - 0xe7, 0xea, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x98, - 0x00, 0x08, 0x10, 0x08, 0xb5, 0x00, 0x1c, 0x01, - 0x48, 0x0b, 0xd0, 0x0e, 0x29, 0x01, 0xd0, 0x0f, - 0x29, 0x02, 0xd1, 0x01, 0x21, 0x04, 0x60, 0x41, - 0x68, 0x01, 0x68, 0x40, 0x43, 0x08, 0x22, 0x00, - 0x21, 0x1e, 0xf0, 0x15, 0xf9, 0xb7, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x01, 0x60, 0x41, 0xe7, 0xf3, - 0x21, 0x02, 0x60, 0x41, 0xe7, 0xf0, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x98, 0xb5, 0x80, 0x4b, 0x09, - 0x22, 0x0a, 0x21, 0x0a, 0x20, 0x0b, 0xf0, 0x15, - 0xfb, 0xeb, 0x20, 0x0b, 0xf0, 0x15, 0xfd, 0x0d, - 0x4f, 0x05, 0x60, 0x38, 0x00, 0x80, 0xf0, 0x03, - 0xff, 0x2b, 0x60, 0x78, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xc4, - 0x2e, 0x08, 0x01, 0xd4, 0xb5, 0xb0, 0x25, 0x00, - 0x1c, 0x0c, 0x1c, 0x07, 0x2a, 0x08, 0xd2, 0x30, - 0xa3, 0x01, 0x5c, 0x9b, 0x00, 0x5b, 0x44, 0x9f, - 0x2c, 0x29, 0x29, 0x03, 0x29, 0x29, 0x03, 0x29, - 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x4d, 0x23, 0x2d, - 0x01, 0x1b, 0x42, 0x9f, 0xd0, 0x13, 0x23, 0x0b, - 0x01, 0x9b, 0x42, 0x9f, 0xd0, 0x0f, 0x23, 0xff, - 0x33, 0xe1, 0x42, 0x9f, 0xd0, 0x0b, 0x23, 0xff, - 0x33, 0x61, 0x42, 0x9f, 0xd0, 0x07, 0x23, 0x21, - 0x01, 0x1b, 0x42, 0x9f, 0xd0, 0x03, 0x23, 0x11, - 0x01, 0x5b, 0x42, 0x9f, 0xd1, 0x08, 0x23, 0x09, - 0x01, 0x9b, 0x42, 0x9c, 0xd0, 0x09, 0x08, 0x5b, - 0x42, 0x9c, 0xd0, 0x06, 0x2c, 0xf0, 0xd0, 0x04, - 0x25, 0x01, 0xe0, 0x02, 0x20, 0x01, 0xf0, 0x00, - 0xf8, 0x27, 0x4f, 0x12, 0x6c, 0x78, 0x42, 0x85, - 0xd0, 0x1c, 0x1d, 0xfb, 0x33, 0x35, 0x2d, 0x00, - 0xd0, 0x12, 0x1f, 0xda, 0x3a, 0x0d, 0x21, 0x03, - 0x1d, 0x10, 0xb4, 0x07, 0x22, 0x0b, 0xb4, 0x04, - 0x1c, 0x19, 0x23, 0x00, 0x22, 0x00, 0x20, 0x00, - 0xf0, 0x0f, 0xff, 0xe4, 0x6a, 0xb8, 0x1c, 0x29, - 0xb0, 0x04, 0xf0, 0x11, 0xf9, 0x33, 0xe0, 0x04, - 0x21, 0x00, 0x6a, 0xb8, 0x1c, 0x1a, 0xf0, 0x10, - 0xfa, 0xe9, 0x64, 0x7d, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x98, - 0xb5, 0xf0, 0x1c, 0x07, 0xb0, 0x81, 0x4d, 0x56, - 0x1d, 0xee, 0x36, 0x19, 0x79, 0x30, 0x42, 0x87, - 0xd1, 0x03, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x24, 0x00, 0x6c, 0x68, 0x28, 0x00, - 0xd0, 0x05, 0x64, 0x6c, 0x4a, 0x4f, 0x21, 0x00, - 0x6a, 0xa8, 0xf0, 0x10, 0xfa, 0xcb, 0x71, 0x37, - 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x14, 0xfc, 0x5c, - 0x20, 0x00, 0xf0, 0x11, 0xff, 0x5d, 0x20, 0x1f, - 0xf0, 0x0e, 0xff, 0xf2, 0x26, 0x03, 0x02, 0x76, - 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, 0x20, 0x1f, - 0x1c, 0x33, 0xf0, 0x0e, 0xfe, 0x69, 0x20, 0x1e, - 0xf0, 0x0f, 0xf8, 0xb0, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x02, 0x20, 0x1e, 0x1c, 0x33, 0xf0, 0x0e, - 0xfe, 0x5f, 0x26, 0x1c, 0x1c, 0x39, 0x48, 0x3e, - 0x27, 0x0c, 0x29, 0x06, 0xd2, 0x07, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x12, 0x03, 0x21, 0x12, 0x30, 0x48, 0x39, - 0x21, 0x40, 0xf0, 0x14, 0xfd, 0x5b, 0xab, 0x00, - 0x70, 0x1c, 0x20, 0x08, 0x70, 0x58, 0x70, 0x9e, - 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, 0xf0, 0x15, - 0xf8, 0x7d, 0xe0, 0x2b, 0x21, 0x1f, 0x43, 0xc9, - 0xf0, 0x14, 0xfd, 0x4c, 0xab, 0x00, 0x70, 0x1c, - 0x70, 0x5c, 0x70, 0x9f, 0x70, 0xdc, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x15, 0xf8, 0x6e, - 0xe0, 0x1c, 0x21, 0x40, 0xf0, 0x14, 0xfd, 0x3e, - 0xab, 0x00, 0x70, 0x1c, 0x20, 0x10, 0x70, 0x58, - 0x70, 0x9e, 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, - 0x20, 0x08, 0xf0, 0x15, 0xf8, 0x5f, 0xe0, 0x0d, - 0x21, 0x1f, 0x43, 0xc9, 0xf0, 0x14, 0xfd, 0x2e, - 0xab, 0x00, 0x70, 0x1c, 0x70, 0x5c, 0x70, 0x9f, - 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, 0x20, 0x08, - 0xf0, 0x15, 0xf8, 0x50, 0x20, 0x01, 0x21, 0x35, - 0x06, 0x49, 0x61, 0x08, 0x20, 0x02, 0x43, 0xc0, - 0x49, 0x19, 0x63, 0x08, 0x20, 0x39, 0x06, 0x40, - 0x62, 0xc4, 0xcd, 0x03, 0x43, 0x08, 0x22, 0x00, - 0x21, 0x1e, 0xf0, 0x15, 0xf8, 0xa7, 0x48, 0x15, - 0xf0, 0x11, 0xfe, 0x68, 0x20, 0x00, 0xf0, 0x11, - 0xfe, 0xd9, 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x68, - 0x20, 0x00, 0xf0, 0x03, 0xfb, 0x15, 0x20, 0x01, - 0xf0, 0x11, 0xfe, 0xde, 0x4a, 0x0e, 0xb4, 0x04, - 0x1c, 0x13, 0x3a, 0x01, 0x49, 0x0d, 0x1e, 0xc8, - 0xf7, 0xfe, 0xfb, 0xae, 0x21, 0x00, 0x20, 0x0d, - 0xb0, 0x01, 0xf0, 0x14, 0xfb, 0xcd, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xd4, - 0x2e, 0x02, 0x81, 0x70, 0x2e, 0x02, 0x3b, 0x04, - 0x72, 0x00, 0x01, 0x00, 0x00, 0x80, 0x10, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, - 0xb5, 0xb0, 0x1c, 0x07, 0x4c, 0x10, 0x6a, 0x20, - 0x42, 0x87, 0xd0, 0x19, 0x20, 0x00, 0x2f, 0x03, - 0xd1, 0x02, 0x21, 0x01, 0x61, 0x61, 0xe0, 0x00, - 0x61, 0x60, 0x21, 0x02, 0x4d, 0x0b, 0x60, 0x29, - 0x71, 0x28, 0x71, 0x68, 0x22, 0x01, 0xb4, 0x04, - 0x7a, 0x23, 0x7c, 0x22, 0x7b, 0x21, 0x20, 0x00, - 0xf0, 0x14, 0xfe, 0x9a, 0x69, 0x61, 0x1c, 0x28, - 0xb0, 0x01, 0xf0, 0x15, 0xff, 0x41, 0x62, 0x27, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xb0, - 0xb5, 0x00, 0x22, 0x02, 0x49, 0x09, 0x60, 0x0a, - 0x22, 0x00, 0x71, 0x0a, 0x71, 0x4a, 0x39, 0x48, - 0x28, 0x00, 0xd0, 0x08, 0x28, 0x01, 0xd1, 0x00, - 0x72, 0x08, 0x6a, 0x08, 0x62, 0x0a, 0xf7, 0xff, - 0xff, 0xc7, 0xbc, 0x08, 0x47, 0x18, 0x72, 0x0a, - 0xe7, 0xf7, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xe0, - 0xb5, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x4f, 0x0b, - 0xd0, 0x02, 0x20, 0x00, 0x73, 0x38, 0xe0, 0x01, - 0x20, 0x01, 0x73, 0x38, 0x22, 0x01, 0xb4, 0x04, - 0x7a, 0x3b, 0x7c, 0x3a, 0x7b, 0x39, 0x20, 0x00, - 0xf0, 0x14, 0xfe, 0x62, 0x69, 0x79, 0xb0, 0x01, - 0x48, 0x03, 0xf0, 0x15, 0xff, 0x09, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x01, 0x98, - 0x2e, 0x08, 0x01, 0xb0, 0xb5, 0x80, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x01, 0x4f, 0x08, 0x74, 0x39, - 0x22, 0x01, 0xb4, 0x04, 0x7a, 0x3b, 0x7b, 0x39, - 0x1c, 0x02, 0x20, 0x00, 0xf0, 0x14, 0xfe, 0x48, - 0x69, 0x79, 0xb0, 0x01, 0x48, 0x03, 0xf0, 0x15, - 0xfe, 0xef, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xb0, - 0xb4, 0xb0, 0x21, 0x00, 0x48, 0x08, 0x60, 0x01, - 0x20, 0x00, 0x4c, 0x08, 0x4f, 0x08, 0x4b, 0x09, - 0x4a, 0x09, 0x00, 0x85, 0x51, 0x61, 0x54, 0x39, - 0x54, 0x19, 0x54, 0x11, 0x30, 0x01, 0x28, 0x20, - 0xdb, 0xf7, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0xe8, 0x2e, 0x08, 0x44, 0x38, - 0x2e, 0x08, 0x44, 0xb8, 0x2e, 0x08, 0x44, 0xf8, - 0x2e, 0x08, 0x44, 0xd8, 0x06, 0x00, 0x0e, 0x00, - 0x21, 0x01, 0x40, 0x81, 0x43, 0xca, 0x49, 0x05, - 0x68, 0x0b, 0x40, 0x1a, 0x60, 0x0a, 0x21, 0x00, - 0x00, 0x82, 0x4b, 0x03, 0x50, 0x99, 0x4a, 0x03, - 0x54, 0x11, 0x47, 0x70, 0x2e, 0x08, 0x01, 0xe8, - 0x2e, 0x08, 0x44, 0x38, 0x2e, 0x08, 0x44, 0xb8, - 0xb5, 0xf0, 0xb0, 0x84, 0x4f, 0x36, 0x68, 0x38, - 0x1d, 0xc1, 0x31, 0x0d, 0x20, 0x00, 0xf0, 0x2a, - 0xfb, 0x93, 0x1c, 0x04, 0x68, 0x38, 0x1d, 0xc1, - 0x31, 0x05, 0x20, 0x00, 0xf0, 0x2a, 0xfb, 0x8c, - 0x1c, 0x05, 0x68, 0x38, 0x1d, 0xc1, 0x31, 0x09, - 0x20, 0x00, 0xf0, 0x2a, 0xfb, 0x85, 0x43, 0x2c, - 0x1c, 0x20, 0x4c, 0x2c, 0x68, 0x21, 0x43, 0x08, - 0x27, 0x00, 0x60, 0x20, 0x1c, 0x05, 0xd0, 0x4a, - 0x48, 0x29, 0x90, 0x03, 0x48, 0x29, 0x90, 0x02, - 0x4a, 0x29, 0x92, 0x01, 0x4e, 0x29, 0x08, 0x68, - 0xd3, 0x3c, 0x98, 0x03, 0x5d, 0xc0, 0x28, 0x00, - 0xd0, 0x32, 0x98, 0x02, 0x5d, 0xc0, 0x28, 0x00, - 0xd0, 0x2a, 0x46, 0x68, 0x1c, 0x39, 0xf0, 0x16, - 0xfb, 0x01, 0xa8, 0x00, 0x78, 0x00, 0x28, 0x01, - 0xd1, 0x1b, 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, - 0x5d, 0xf0, 0x28, 0x00, 0xd1, 0x06, 0x20, 0xff, - 0x55, 0xf0, 0x21, 0x00, 0x00, 0xb8, 0x9a, 0x01, - 0x50, 0x11, 0xe0, 0x1f, 0x20, 0x02, 0x1c, 0x39, - 0xf0, 0x00, 0xf8, 0x8e, 0x28, 0x00, 0xd1, 0x19, - 0x21, 0x00, 0x55, 0xf1, 0x20, 0x01, 0x40, 0xb8, - 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, - 0xe0, 0x10, 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, - 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, 0xe0, 0x09, - 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, 0xe0, 0x05, - 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, 0x68, 0x21, - 0x40, 0x08, 0x60, 0x20, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0x08, 0x6d, 0xd1, 0xbb, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x78, 0x2e, 0x08, 0x01, 0xe8, - 0x2e, 0x08, 0x44, 0xd8, 0x2e, 0x08, 0x44, 0xf8, - 0x2e, 0x08, 0x44, 0x38, 0x2e, 0x08, 0x44, 0xb8, - 0xb5, 0xf0, 0x27, 0x00, 0xb0, 0x85, 0x4c, 0x26, - 0x68, 0x25, 0x2d, 0x00, 0xd0, 0x44, 0x4e, 0x25, - 0x48, 0x25, 0x90, 0x04, 0x49, 0x25, 0x91, 0x03, - 0x4a, 0x25, 0x92, 0x02, 0x48, 0x25, 0x90, 0x01, - 0x08, 0x68, 0xd3, 0x34, 0x5d, 0xf0, 0x28, 0x00, - 0xd0, 0x2b, 0x98, 0x04, 0x5d, 0xc0, 0x28, 0x00, - 0xd0, 0x2d, 0x46, 0x68, 0x1c, 0x39, 0xf0, 0x16, - 0xfa, 0x9d, 0xa8, 0x00, 0x78, 0x00, 0x28, 0x01, - 0xd1, 0x18, 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, - 0x00, 0xb8, 0x99, 0x03, 0x58, 0x09, 0x69, 0x09, - 0x9a, 0x02, 0x50, 0x11, 0x20, 0x02, 0x1c, 0x39, - 0xf0, 0x00, 0xf8, 0x2e, 0x28, 0x00, 0xd1, 0x16, - 0x21, 0x00, 0x98, 0x01, 0x55, 0xc1, 0x20, 0x01, - 0x40, 0xb8, 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, - 0x60, 0x20, 0xe0, 0x0c, 0x20, 0x01, 0x40, 0xb8, - 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, - 0xe0, 0x05, 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, - 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x08, 0x6d, 0xd1, 0xc3, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xe8, 0x2e, 0x08, 0x44, 0xd8, - 0x2e, 0x08, 0x44, 0xf8, 0x2e, 0x08, 0x9b, 0xc8, - 0x2e, 0x08, 0x44, 0x38, 0x2e, 0x08, 0x44, 0xb8, - 0xb4, 0xf0, 0x06, 0x02, 0x0e, 0x12, 0xb0, 0x82, - 0x92, 0x00, 0x06, 0x0c, 0x0e, 0x24, 0x00, 0xa0, - 0xb0, 0x81, 0x49, 0x31, 0x58, 0x09, 0x91, 0x00, - 0x29, 0x00, 0xd1, 0x03, 0x20, 0xb0, 0xb0, 0x03, - 0xbc, 0xf0, 0x47, 0x70, 0x49, 0x2d, 0x68, 0x09, - 0x18, 0x47, 0x00, 0xe1, 0x1b, 0x09, 0x00, 0x89, - 0x4a, 0x2b, 0x68, 0x12, 0x18, 0x89, 0x9a, 0x01, - 0x4d, 0x2a, 0x4b, 0x2b, 0x93, 0x02, 0x2a, 0x01, - 0xd0, 0x28, 0x2a, 0x02, 0xd1, 0x44, 0x4b, 0x29, - 0x58, 0x1a, 0x2a, 0x00, 0xd1, 0x03, 0x20, 0xff, - 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, 0x60, 0x4a, - 0x22, 0x00, 0x50, 0x1a, 0x5c, 0xa8, 0x42, 0xa0, - 0xd1, 0x06, 0x00, 0x90, 0x9b, 0x02, 0x58, 0x18, - 0x78, 0x46, 0x23, 0x80, 0x43, 0x9e, 0x70, 0x46, - 0x1c, 0x50, 0x06, 0x02, 0x0e, 0x12, 0x2a, 0x20, - 0xdb, 0xf0, 0x88, 0x08, 0x4b, 0x1c, 0x40, 0x18, - 0x80, 0x08, 0x98, 0x00, 0x9a, 0x01, 0x70, 0xc2, - 0x68, 0x38, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x38, 0xe0, 0x19, 0x68, 0x38, 0x4b, 0x17, - 0x40, 0x18, 0x60, 0x38, 0x98, 0x00, 0x9a, 0x01, - 0x70, 0xc2, 0x20, 0x00, 0x60, 0x88, 0x70, 0xc8, - 0x60, 0xc8, 0x5c, 0x29, 0x42, 0xa1, 0xd1, 0x06, - 0x00, 0x81, 0x9b, 0x02, 0x58, 0x59, 0x78, 0x4a, - 0x23, 0x80, 0x43, 0x1a, 0x70, 0x4a, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf0, - 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, - 0x20, 0xbc, 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x44, 0x38, - 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, - 0xb4, 0xf0, 0x78, 0x43, 0x00, 0x9e, 0x49, 0x32, - 0x59, 0x8c, 0x88, 0x42, 0x68, 0x87, 0x68, 0x40, - 0x1d, 0xf9, 0x31, 0xb9, 0x1a, 0x09, 0x42, 0x91, - 0xda, 0x3d, 0x25, 0x00, 0x1c, 0x18, 0x00, 0xdb, - 0x1a, 0x18, 0x00, 0x80, 0x4b, 0x2b, 0x68, 0x1b, - 0x18, 0xc0, 0x78, 0x80, 0x06, 0xc0, 0x0e, 0xc0, - 0x28, 0x12, 0xd1, 0x02, 0x29, 0x0e, 0xda, 0x00, - 0x25, 0x01, 0x2a, 0x00, 0xdd, 0x2b, 0x42, 0x8a, - 0xdd, 0x05, 0x68, 0x3f, 0x2f, 0x00, 0xd1, 0x02, - 0x20, 0xba, 0xbc, 0xf0, 0x47, 0x70, 0x1a, 0x52, - 0x79, 0xb9, 0x23, 0xc0, 0x1a, 0x59, 0x79, 0xfb, - 0x1d, 0x38, 0x08, 0x5b, 0xd3, 0x01, 0x22, 0x00, - 0xe0, 0x16, 0x2d, 0x00, 0xd0, 0x14, 0x42, 0x91, - 0xdb, 0x01, 0x31, 0x01, 0xe0, 0x10, 0x1c, 0x4b, - 0x42, 0x93, 0xd1, 0x0d, 0x78, 0x85, 0x2d, 0x09, - 0xdd, 0x06, 0x79, 0x05, 0x78, 0x80, 0x35, 0x09, - 0x42, 0x85, 0xd0, 0x05, 0x1c, 0x19, 0xe0, 0x03, - 0x78, 0x80, 0x28, 0x09, 0xd1, 0x00, 0x1c, 0x19, - 0x25, 0x00, 0x2a, 0x00, 0xdc, 0xd3, 0x69, 0x21, - 0x20, 0x00, 0x1c, 0x0a, 0x42, 0xb9, 0xd0, 0xd4, - 0x68, 0x0b, 0x42, 0xbb, 0xd0, 0x08, 0x68, 0x09, - 0x29, 0x00, 0xd1, 0x02, 0x20, 0xba, 0xbc, 0xf0, - 0x47, 0x70, 0x68, 0x0b, 0x42, 0xbb, 0xd1, 0xf6, - 0x4b, 0x07, 0x51, 0x9a, 0x60, 0x08, 0x69, 0xa2, - 0x69, 0x23, 0x60, 0x13, 0x61, 0xa1, 0x61, 0x27, - 0x61, 0x67, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x44, 0x38, 0xb5, 0xf0, 0x06, 0x07, - 0x0e, 0x3f, 0x04, 0x0c, 0x0c, 0x24, 0x06, 0x15, - 0x0e, 0x2d, 0x00, 0xf8, 0x49, 0x2c, 0x68, 0x09, - 0x18, 0x40, 0x00, 0xb9, 0x4a, 0x2b, 0x68, 0x12, - 0x18, 0x8a, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, - 0x4b, 0x29, 0x68, 0x1b, 0x18, 0xc9, 0x68, 0x16, - 0x23, 0x01, 0x03, 0x5b, 0x43, 0x9e, 0x60, 0x16, - 0x68, 0x06, 0x23, 0x03, 0x03, 0x9b, 0x43, 0x9e, - 0x60, 0x06, 0x4b, 0x24, 0x42, 0x9c, 0xd0, 0x36, - 0x68, 0x06, 0x23, 0x21, 0x43, 0x9e, 0x60, 0x06, - 0x68, 0x16, 0x23, 0x07, 0x03, 0x5b, 0x40, 0x33, - 0x60, 0x13, 0x23, 0x07, 0x03, 0x5b, 0x43, 0x9c, - 0x1c, 0x23, 0x68, 0x14, 0x43, 0x23, 0x60, 0x13, - 0x22, 0x00, 0x75, 0x0a, 0x88, 0x0c, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x9c, 0x80, 0x0c, 0x07, 0xab, - 0x0f, 0x9b, 0x2b, 0x01, 0xd1, 0x04, 0x88, 0x0c, - 0x23, 0x10, 0x43, 0x23, 0x80, 0x0b, 0xe0, 0x03, - 0x88, 0x0c, 0x23, 0x10, 0x43, 0x9c, 0x80, 0x0c, - 0x68, 0x01, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x19, - 0x60, 0x01, 0x00, 0xf9, 0x4b, 0x0e, 0x68, 0x1b, - 0x18, 0xc9, 0x60, 0x4a, 0x68, 0x01, 0x4b, 0x0d, - 0x43, 0x19, 0x60, 0x01, 0x68, 0x01, 0x60, 0x01, - 0x21, 0x0f, 0x60, 0x41, 0xe0, 0x04, 0x1c, 0x38, - 0xf0, 0x13, 0xfa, 0xb6, 0x28, 0x00, 0xd1, 0x00, - 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0x3c, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0x40, 0x00, 0x00, 0x20, 0xa0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x07, - 0xb0, 0x8a, 0x48, 0x58, 0x29, 0x00, 0xd1, 0x0a, - 0x4d, 0x57, 0x69, 0x01, 0x91, 0x04, 0x49, 0x57, - 0x91, 0x03, 0x69, 0x41, 0x91, 0x02, 0x6a, 0x00, - 0x1e, 0x43, 0x93, 0x01, 0xe0, 0x0b, 0x29, 0x20, - 0xd1, 0x15, 0x4d, 0x53, 0x69, 0x81, 0x91, 0x04, - 0x49, 0x52, 0x91, 0x03, 0x69, 0xc1, 0x91, 0x02, - 0x6a, 0x40, 0x1e, 0x43, 0x93, 0x01, 0x24, 0x00, - 0x4b, 0x4f, 0x93, 0x09, 0x4a, 0x4f, 0x92, 0x08, - 0x4b, 0x4f, 0x93, 0x07, 0x4e, 0x4f, 0x96, 0x06, - 0x4a, 0x4f, 0x92, 0x05, 0xe0, 0x7a, 0x20, 0xb3, - 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x04, 0x00, 0x80, 0x19, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xc0, 0x68, 0x01, 0x98, 0x04, - 0x00, 0x80, 0x58, 0x28, 0x9a, 0x04, 0x18, 0xaa, - 0x00, 0x5b, 0x18, 0xd2, 0x78, 0x12, 0x92, 0x00, - 0x22, 0x00, 0x9b, 0x04, 0x18, 0xee, 0x23, 0x01, - 0x02, 0xdb, 0x18, 0xf3, 0x70, 0x1a, 0x9a, 0x04, - 0x32, 0x01, 0x92, 0x04, 0x9b, 0x01, 0x40, 0x1a, - 0x92, 0x04, 0x29, 0x00, 0xd0, 0x56, 0xb0, 0x82, - 0x91, 0x01, 0x21, 0x01, 0x9a, 0x02, 0x2a, 0x80, - 0xd1, 0x19, 0x22, 0x00, 0x9b, 0x01, 0x40, 0x0b, - 0xd0, 0x10, 0x9b, 0x0b, 0x5c, 0x9b, 0x2b, 0xff, - 0xd0, 0x0c, 0x9b, 0x0b, 0x5c, 0x9b, 0x93, 0x00, - 0x00, 0x91, 0x9a, 0x0a, 0x58, 0x52, 0x00, 0xa1, - 0x19, 0xc9, 0x61, 0x0a, 0x1c, 0x61, 0x06, 0x0c, - 0x0e, 0x24, 0xe0, 0x1c, 0x00, 0x49, 0x32, 0x01, - 0x2a, 0x10, 0xd3, 0xe7, 0xe0, 0x17, 0x22, 0x00, - 0x9b, 0x01, 0x40, 0x0b, 0xd0, 0x0f, 0x9b, 0x09, - 0x5c, 0x9b, 0x2b, 0xff, 0xd0, 0x0b, 0x93, 0x00, - 0x00, 0x93, 0x9e, 0x08, 0x58, 0xf6, 0x00, 0xa3, - 0x19, 0xdb, 0x61, 0x1e, 0x28, 0x00, 0xd0, 0x02, - 0x1c, 0x63, 0x06, 0x1c, 0x0e, 0x24, 0x00, 0x49, - 0x32, 0x01, 0x2a, 0x20, 0xd3, 0xe8, 0x2c, 0x00, - 0xd0, 0x1b, 0x9b, 0x00, 0x70, 0x7b, 0x60, 0x78, - 0x9b, 0x00, 0x00, 0x99, 0x9a, 0x07, 0x58, 0x52, - 0x69, 0x51, 0xe0, 0x07, 0x68, 0x09, 0x29, 0x00, - 0xd1, 0x04, 0x20, 0xba, 0xb0, 0x0c, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x42, 0x88, 0xd3, 0xf5, - 0x1d, 0xcb, 0x33, 0xb9, 0x42, 0x83, 0xd3, 0xf1, - 0x60, 0xb9, 0x61, 0x51, 0x1c, 0x38, 0xf0, 0x13, - 0xfa, 0xc0, 0xb0, 0x02, 0x98, 0x04, 0x99, 0x02, - 0x42, 0x88, 0xd0, 0x01, 0x2c, 0x00, 0xd0, 0x83, - 0x70, 0x3c, 0x98, 0x04, 0x99, 0x03, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x9e, 0x00, 0x04, 0x80, - 0x2e, 0x08, 0x9d, 0xfc, 0x9e, 0x00, 0x04, 0x90, - 0x2e, 0x08, 0xa6, 0xfc, 0x9e, 0x00, 0x04, 0x98, - 0x2e, 0x08, 0x9d, 0x30, 0x2e, 0x08, 0x9c, 0xd0, - 0x2e, 0x08, 0x9d, 0x10, 0x2e, 0x08, 0x9c, 0x50, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0x00, 0x20, 0xff, - 0x49, 0x03, 0x60, 0x08, 0x20, 0x01, 0x05, 0x00, - 0xf0, 0x21, 0xf9, 0x74, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xe8, 0xb5, 0xf0, 0x06, 0x07, - 0x0e, 0x3f, 0x06, 0x0c, 0x0e, 0x24, 0x20, 0x10, - 0x2f, 0x1f, 0xdc, 0x2c, 0x2c, 0x1f, 0xdc, 0x2a, - 0x1c, 0x39, 0x43, 0x21, 0x08, 0x49, 0xd2, 0x26, - 0x49, 0x14, 0x1c, 0x38, 0xf0, 0x21, 0xf9, 0x70, - 0x26, 0x01, 0x1c, 0x35, 0x40, 0xbd, 0x1c, 0x30, - 0x40, 0xa0, 0x1c, 0x04, 0x43, 0x28, 0xf0, 0x21, - 0xf9, 0x5a, 0xf0, 0x21, 0xf9, 0x5d, 0x43, 0xa8, - 0xf0, 0x21, 0xf9, 0x5e, 0xf0, 0x21, 0xf9, 0x58, - 0x43, 0xa0, 0xf0, 0x21, 0xf9, 0x59, 0x1c, 0x38, - 0xf0, 0x15, 0xfc, 0x02, 0x1c, 0x04, 0xd1, 0x07, - 0x21, 0x03, 0x05, 0x09, 0x20, 0x00, 0x1c, 0x3a, - 0x1c, 0x33, 0xf0, 0x16, 0xfa, 0xb3, 0x1c, 0x04, - 0xf7, 0xff, 0xfc, 0x92, 0x1c, 0x20, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x00, 0x2c, 0x0b, - 0xb5, 0xf0, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x05, - 0x06, 0x38, 0x0e, 0x00, 0x22, 0x00, 0x21, 0x00, - 0xb4, 0x07, 0x21, 0x10, 0x1c, 0x1a, 0xb4, 0x06, - 0x23, 0x10, 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x32, - 0xf0, 0x00, 0xf8, 0x54, 0xb0, 0x05, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x04, - 0x0e, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x06, 0x16, - 0x0e, 0x36, 0x9f, 0x05, 0x06, 0x38, 0x0e, 0x00, - 0x22, 0x00, 0x21, 0x00, 0xb4, 0x07, 0x21, 0x18, - 0x1c, 0x1a, 0xb4, 0x06, 0x23, 0x11, 0x1c, 0x20, - 0x1c, 0x29, 0x1c, 0x32, 0xf0, 0x00, 0xf8, 0x3a, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x05, - 0x06, 0x38, 0x0e, 0x00, 0x22, 0x00, 0x21, 0x00, - 0xb4, 0x07, 0x21, 0x20, 0x1c, 0x1a, 0xb4, 0x06, - 0x23, 0x51, 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x32, - 0xf0, 0x00, 0xf8, 0x20, 0xb0, 0x05, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x06, 0x03, - 0x0e, 0x1b, 0x04, 0x0d, 0x0c, 0x2d, 0x06, 0x16, - 0x0e, 0x36, 0x9c, 0x09, 0x9f, 0x0a, 0x06, 0x20, - 0x0e, 0x00, 0x22, 0x00, 0x1c, 0x39, 0xb4, 0x07, - 0x21, 0x10, 0x9a, 0x06, 0xb4, 0x06, 0x1c, 0x18, - 0x23, 0x62, 0x1c, 0x29, 0x1c, 0x32, 0xf0, 0x00, - 0xf8, 0x05, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x9e, 0x09, - 0x9f, 0x0b, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x88, 0x91, 0x00, 0x06, 0x15, - 0x0e, 0x2d, 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, - 0x06, 0x32, 0x0e, 0x12, 0x92, 0x02, 0x06, 0x38, - 0x0e, 0x00, 0x90, 0x03, 0xb0, 0x82, 0xf0, 0x21, - 0xf8, 0xbf, 0x0d, 0x40, 0xd2, 0x09, 0x20, 0xff, - 0x90, 0x00, 0xf0, 0x21, 0xf8, 0xb9, 0x23, 0x01, - 0x05, 0x1b, 0x43, 0x18, 0xf0, 0x21, 0xf8, 0xb8, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x03, - 0x08, 0x40, 0xd3, 0x02, 0x22, 0x12, 0x92, 0x01, - 0xe0, 0x01, 0x22, 0x11, 0x92, 0x01, 0x22, 0x01, - 0x1c, 0x11, 0x40, 0xa9, 0x4b, 0x5f, 0x1c, 0x0f, - 0x68, 0x18, 0x40, 0x07, 0xd0, 0x01, 0x27, 0x11, - 0xe0, 0xa2, 0x27, 0x00, 0x43, 0x08, 0x60, 0x18, - 0x23, 0x1c, 0x98, 0x05, 0x40, 0x18, 0x28, 0x1c, - 0xd1, 0x06, 0x21, 0x01, 0x20, 0x7d, 0x01, 0x00, - 0xf0, 0x15, 0xff, 0x60, 0x1c, 0x06, 0xe0, 0x0d, - 0x98, 0x05, 0x08, 0x40, 0xd3, 0x05, 0x21, 0x01, - 0x20, 0xc8, 0xf0, 0x15, 0xff, 0x57, 0x1c, 0x06, - 0xe0, 0x04, 0x21, 0x01, 0x20, 0x3c, 0xf0, 0x15, - 0xff, 0x51, 0x1c, 0x06, 0x20, 0x34, 0xf0, 0x03, - 0xf9, 0x57, 0x00, 0xaa, 0x92, 0x09, 0x49, 0x4c, - 0x91, 0x08, 0x50, 0x88, 0x00, 0xa1, 0x91, 0x07, - 0x48, 0x4a, 0x90, 0x06, 0x58, 0x40, 0x28, 0x00, - 0xd1, 0x05, 0x00, 0xb0, 0xf0, 0x03, 0xf9, 0x48, - 0x99, 0x07, 0x9a, 0x06, 0x50, 0x50, 0x98, 0x09, - 0x99, 0x08, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x04, - 0x98, 0x06, 0x99, 0x07, 0x58, 0x40, 0x28, 0x00, - 0xd1, 0x01, 0x27, 0x13, 0xe0, 0x64, 0x99, 0x07, - 0x4a, 0x3f, 0x58, 0x51, 0x29, 0x00, 0xd1, 0x3a, - 0x9a, 0x01, 0xb4, 0x04, 0x23, 0x40, 0x1c, 0x31, - 0x1c, 0x22, 0xf0, 0x15, 0xff, 0xaf, 0xb0, 0x01, - 0x1c, 0x07, 0xd1, 0x17, 0x23, 0x03, 0x02, 0x5b, - 0x22, 0x01, 0x02, 0xd2, 0x21, 0x01, 0x1c, 0x20, - 0xf0, 0x0e, 0xf8, 0xf2, 0x22, 0x00, 0xb4, 0x04, - 0x22, 0x02, 0x99, 0x03, 0x9b, 0x02, 0x1c, 0x20, - 0xf0, 0x0d, 0xff, 0x26, 0xb0, 0x01, 0x1c, 0x07, - 0xd1, 0x04, 0x22, 0x01, 0x48, 0x2f, 0x55, 0x02, - 0x48, 0x2f, 0x55, 0x02, 0x2f, 0x00, 0xd1, 0x16, - 0x98, 0x16, 0x28, 0x00, 0xd0, 0x13, 0x21, 0x02, - 0x98, 0x16, 0xf0, 0x15, 0xfe, 0xff, 0x1c, 0x07, - 0x00, 0x80, 0xf0, 0x03, 0xf9, 0x05, 0x99, 0x07, - 0x4a, 0x28, 0x50, 0x50, 0x28, 0x00, 0xd0, 0x05, - 0x1c, 0x39, 0x1c, 0x22, 0xf0, 0x15, 0xff, 0x13, - 0x1c, 0x07, 0xe0, 0x00, 0x27, 0x13, 0x2f, 0x00, - 0xd1, 0x22, 0x98, 0x03, 0x09, 0x80, 0xd3, 0x06, - 0x20, 0x5c, 0xf0, 0x03, 0xf8, 0xf1, 0x28, 0x00, - 0xd1, 0x02, 0x27, 0x13, 0xe0, 0x00, 0x20, 0x00, - 0x1c, 0x02, 0x98, 0x05, 0x99, 0x17, 0xb4, 0x07, - 0x1c, 0x2a, 0xb4, 0x04, 0x98, 0x0d, 0x99, 0x0c, - 0x58, 0x08, 0x99, 0x18, 0x9a, 0x08, 0x9b, 0x07, - 0xf0, 0x00, 0xf9, 0x1c, 0xb0, 0x04, 0x2f, 0x00, - 0xd1, 0x06, 0x98, 0x09, 0x99, 0x08, 0x58, 0x08, - 0x1c, 0x21, 0xf0, 0x12, 0xf9, 0x93, 0x1c, 0x07, - 0x2f, 0x00, 0xd0, 0x03, 0x1c, 0x20, 0x1c, 0x29, - 0xf0, 0x00, 0xf8, 0x20, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0xf0, 0x20, 0xff, 0xf1, 0x4b, 0x0c, - 0x40, 0x18, 0xf0, 0x20, 0xff, 0xf1, 0x1c, 0x38, - 0xb0, 0x0a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xf0, - 0x2e, 0x08, 0x01, 0xf4, 0x2e, 0x08, 0x02, 0x74, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x44, 0xf8, - 0x2e, 0x08, 0x44, 0xd8, 0x2e, 0x08, 0x02, 0xf4, - 0xff, 0xef, 0xff, 0xff, 0xb5, 0xf0, 0x06, 0x07, - 0x0e, 0x3f, 0x06, 0x0d, 0x0e, 0x2d, 0xb0, 0x83, - 0xf0, 0x20, 0xff, 0xce, 0x0d, 0x40, 0xd2, 0x09, - 0x20, 0xff, 0x90, 0x00, 0xf0, 0x20, 0xff, 0xc8, - 0x23, 0x01, 0x05, 0x1b, 0x43, 0x18, 0xf0, 0x20, - 0xff, 0xc7, 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, - 0x24, 0x00, 0x20, 0x01, 0x40, 0xa8, 0x1c, 0x02, - 0x49, 0x3f, 0x1c, 0x13, 0x68, 0x08, 0x40, 0x03, - 0xd0, 0x69, 0x43, 0xd2, 0x40, 0x10, 0x00, 0xae, - 0x60, 0x08, 0x4d, 0x3c, 0x59, 0xa8, 0x28, 0x00, - 0xd0, 0x62, 0x78, 0x81, 0x91, 0x02, 0x08, 0x49, - 0xd3, 0x02, 0x23, 0x12, 0x93, 0x01, 0xe0, 0x01, - 0x23, 0x11, 0x93, 0x01, 0x1c, 0x39, 0xf0, 0x12, - 0xf9, 0xad, 0x1c, 0x04, 0x59, 0xa8, 0x6b, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x03, 0xf8, 0x96, - 0x59, 0xa8, 0x6a, 0xc0, 0x28, 0x00, 0xd0, 0x01, - 0xf0, 0x03, 0xf8, 0x90, 0x59, 0xa8, 0xf0, 0x03, - 0xf8, 0x8d, 0x20, 0x00, 0x51, 0xa8, 0x00, 0xbd, - 0x48, 0x2b, 0x59, 0x40, 0x78, 0x80, 0x28, 0x00, - 0xd1, 0x40, 0x1c, 0x39, 0xf0, 0x15, 0xfc, 0xd2, - 0x2c, 0x00, 0xd1, 0x2a, 0x98, 0x02, 0x09, 0x80, - 0xd3, 0x0a, 0x21, 0x00, 0x1c, 0x3a, 0x48, 0x25, - 0xf0, 0x15, 0xfe, 0x6d, 0x28, 0x00, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x22, 0x00, 0xb4, 0x04, 0x22, 0x02, 0x9b, 0x02, - 0x1c, 0x38, 0x49, 0x1e, 0xf0, 0x0d, 0xfe, 0x54, - 0xb0, 0x01, 0x1c, 0x04, 0xd1, 0x11, 0x9a, 0x01, - 0xb4, 0x04, 0x26, 0x00, 0x21, 0x00, 0x1c, 0x3a, - 0x1c, 0x33, 0x48, 0x18, 0xf0, 0x15, 0xfe, 0xbe, - 0x1c, 0x04, 0xb0, 0x01, 0x48, 0x16, 0x55, 0xc6, - 0x48, 0x16, 0x55, 0xc6, 0x1c, 0x38, 0xf7, 0xff, - 0xfa, 0xc5, 0x4f, 0x15, 0x59, 0x78, 0xf0, 0x03, - 0xf8, 0x51, 0x26, 0x00, 0x51, 0x7e, 0x37, 0x80, - 0x59, 0x78, 0x28, 0x00, 0xd0, 0x04, 0xf0, 0x03, - 0xf8, 0x49, 0x51, 0x7e, 0xe0, 0x02, 0xe0, 0x00, - 0xe0, 0x00, 0x24, 0x12, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0xf0, 0x20, 0xff, 0x45, 0x4b, 0x0b, - 0x40, 0x18, 0xf0, 0x20, 0xff, 0x45, 0x1c, 0x20, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xf0, 0x2e, 0x08, 0x01, 0xf4, - 0x2e, 0x08, 0x9b, 0xc8, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x44, 0xf8, 0x2e, 0x08, 0x44, 0xd8, - 0x2e, 0x08, 0x02, 0x74, 0xff, 0xef, 0xff, 0xff, - 0xb5, 0xb0, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x80, - 0x1c, 0x0c, 0x1c, 0x17, 0xb0, 0xad, 0x49, 0x1c, - 0x58, 0x08, 0x90, 0x04, 0x78, 0x81, 0x23, 0x04, - 0x40, 0x19, 0x25, 0x00, 0x29, 0x00, 0xd0, 0x0b, - 0xa9, 0x25, 0xf0, 0x12, 0xfd, 0x6f, 0xab, 0x00, - 0x80, 0x5d, 0xa8, 0x25, 0x90, 0x24, 0x46, 0x68, - 0x21, 0x00, 0xf0, 0x12, 0xfd, 0x8e, 0xe0, 0x0c, - 0x78, 0x00, 0x0a, 0x00, 0xd3, 0x04, 0x20, 0x01, - 0x03, 0x00, 0xab, 0x00, 0x80, 0x58, 0xe0, 0x03, - 0x20, 0x01, 0x02, 0x80, 0xab, 0x00, 0x80, 0x58, - 0x20, 0x00, 0x28, 0x00, 0xd1, 0x0e, 0xa8, 0x00, - 0x88, 0x40, 0x60, 0x38, 0xf0, 0x02, 0xff, 0xd4, - 0x60, 0x20, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x13, - 0xe0, 0x06, 0x1c, 0x01, 0x46, 0x68, 0xf0, 0x12, - 0xfd, 0x70, 0xe0, 0x01, 0x60, 0x25, 0x60, 0x3d, - 0xb0, 0x2d, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xf4, 0xb4, 0xf0, 0x06, 0x12, - 0x0e, 0x12, 0x06, 0x1b, 0x0e, 0x1b, 0x9c, 0x06, - 0x9f, 0x07, 0x9d, 0x05, 0x9e, 0x04, 0x06, 0x36, - 0x0e, 0x36, 0x06, 0x2d, 0xd0, 0x02, 0x25, 0x80, - 0x70, 0x05, 0xe0, 0x01, 0x25, 0x00, 0x70, 0x05, - 0x25, 0x00, 0x70, 0x45, 0x80, 0x85, 0x72, 0x05, - 0x70, 0xc6, 0x70, 0x83, 0x62, 0xc4, 0x63, 0x07, - 0x27, 0x00, 0x23, 0x00, 0x2a, 0x00, 0xdd, 0x10, - 0x5c, 0xcc, 0x19, 0xc5, 0x73, 0x2c, 0x18, 0xcc, - 0x78, 0x66, 0x1c, 0x7c, 0x06, 0x25, 0x0e, 0x2d, - 0x1c, 0x3c, 0x18, 0x24, 0x77, 0x26, 0x33, 0x02, - 0x06, 0x1b, 0x0e, 0x1b, 0x1c, 0x2f, 0x42, 0x93, - 0xdb, 0xee, 0xbc, 0xf0, 0x47, 0x70, 0xb5, 0xf0, - 0xb0, 0xac, 0x21, 0x00, 0xa8, 0x07, 0xf0, 0x12, - 0xfb, 0xf5, 0xa8, 0x07, 0x78, 0x00, 0x90, 0x06, - 0x28, 0x00, 0xd0, 0x4b, 0x24, 0x00, 0x98, 0x06, - 0x28, 0x00, 0xdd, 0x43, 0xa8, 0x07, 0xf0, 0x12, - 0xff, 0xbc, 0x00, 0xa1, 0xa8, 0x07, 0x18, 0x08, - 0x69, 0x07, 0x78, 0xfe, 0xad, 0x07, 0x88, 0x6d, - 0x78, 0xb8, 0x09, 0xc0, 0xd3, 0x12, 0xa8, 0x07, - 0xa9, 0x01, 0xf0, 0x16, 0xfa, 0x0b, 0x78, 0xb8, - 0x08, 0x40, 0xd3, 0x05, 0x46, 0x6a, 0x1c, 0x38, - 0xa9, 0x01, 0xf0, 0x16, 0xfa, 0x38, 0xe0, 0x08, - 0x46, 0x6a, 0x1c, 0x38, 0xa9, 0x01, 0xf0, 0x16, - 0xfa, 0x75, 0xe0, 0x02, 0x20, 0x40, 0xab, 0x00, - 0x70, 0x18, 0xa8, 0x00, 0x78, 0x00, 0x09, 0xc0, - 0xd3, 0x16, 0x1c, 0x28, 0xf7, 0xfd, 0xfe, 0xf8, - 0x1c, 0x07, 0xd0, 0x11, 0xa8, 0x07, 0x1c, 0x39, - 0xf0, 0x12, 0xfe, 0x2e, 0x28, 0x00, 0xd1, 0x09, - 0x1c, 0x30, 0x1c, 0x29, 0x1c, 0x3a, 0xf7, 0xfd, - 0xff, 0x47, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfd, - 0xff, 0x39, 0xe0, 0x01, 0xf7, 0xfd, 0xff, 0x36, - 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, 0x98, 0x06, - 0x42, 0x84, 0xdb, 0xbb, 0xa8, 0x07, 0xf0, 0x12, - 0xfc, 0x97, 0xe7, 0xaa, 0xf7, 0xff, 0xfa, 0x5c, - 0xb0, 0x2c, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0xb0, 0xad, 0x21, 0x00, 0xa8, 0x08, - 0xf0, 0x12, 0xfb, 0x98, 0x22, 0x05, 0x21, 0x16, - 0x1c, 0x04, 0xf0, 0x03, 0xfd, 0x6a, 0x2c, 0xb2, - 0xd1, 0x03, 0x21, 0x00, 0xa8, 0x08, 0xf0, 0x12, - 0xfb, 0x47, 0xa8, 0x08, 0x78, 0x00, 0x90, 0x06, - 0x28, 0x00, 0xd0, 0x73, 0x25, 0x00, 0x98, 0x06, - 0x28, 0x00, 0xdd, 0x57, 0xa8, 0x08, 0xf0, 0x12, - 0xff, 0x54, 0x00, 0xa9, 0xa8, 0x08, 0x18, 0x08, - 0x69, 0x07, 0x78, 0xf8, 0x90, 0x07, 0xae, 0x08, - 0x88, 0x76, 0x78, 0xb8, 0x09, 0xc0, 0xd3, 0x12, - 0xa8, 0x08, 0xa9, 0x01, 0xf0, 0x16, 0xf9, 0xa2, - 0x78, 0xb8, 0x08, 0x40, 0xd3, 0x05, 0x46, 0x6a, - 0x1c, 0x38, 0xa9, 0x01, 0xf0, 0x16, 0xf9, 0xcf, - 0xe0, 0x08, 0x46, 0x6a, 0x1c, 0x38, 0xa9, 0x01, - 0xf0, 0x16, 0xfa, 0x0c, 0xe0, 0x02, 0x20, 0x40, - 0xab, 0x00, 0x70, 0x18, 0xa8, 0x00, 0x78, 0x00, - 0x09, 0xc0, 0xd3, 0x29, 0x78, 0xb8, 0x09, 0x80, - 0xd3, 0x0f, 0xa8, 0x08, 0xa9, 0x01, 0xf0, 0x16, - 0xfb, 0x69, 0x1c, 0x04, 0xa8, 0x00, 0x78, 0x00, - 0x08, 0x80, 0xd2, 0x02, 0x78, 0xb8, 0x08, 0x80, - 0xd3, 0x1a, 0x1c, 0x38, 0xf0, 0x16, 0xfc, 0x70, - 0xe0, 0x16, 0x1c, 0x30, 0xf7, 0xfd, 0xfe, 0x7c, - 0x1c, 0x07, 0xd0, 0x11, 0xa8, 0x08, 0x1c, 0x39, - 0xf0, 0x12, 0xfd, 0xb2, 0x28, 0x00, 0xd1, 0x09, - 0x98, 0x07, 0x1c, 0x31, 0x1c, 0x3a, 0xf7, 0xfd, - 0xfe, 0xcb, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfd, - 0xfe, 0xbd, 0xe0, 0x01, 0xf7, 0xfd, 0xfe, 0xba, - 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x06, - 0x42, 0x85, 0xdb, 0xa7, 0x98, 0x06, 0x28, 0x00, - 0xd0, 0x08, 0xa8, 0x08, 0xf0, 0x12, 0xfc, 0x18, - 0x2c, 0xb2, 0xd1, 0x03, 0x21, 0x00, 0xa8, 0x08, - 0xf0, 0x12, 0xfa, 0xda, 0xf7, 0xff, 0xf9, 0x5c, - 0x21, 0x00, 0xa8, 0x08, 0xf7, 0xff, 0xfb, 0x88, - 0x1c, 0x04, 0xa8, 0x08, 0x78, 0x00, 0x90, 0x06, - 0x28, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xd1, 0x89, - 0xf7, 0xff, 0xf9, 0xca, 0xb0, 0x2d, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x26, 0x00, - 0x48, 0x28, 0x71, 0x06, 0x70, 0x06, 0x20, 0x00, - 0x4f, 0x27, 0x4a, 0x28, 0x49, 0x28, 0x00, 0x43, - 0x52, 0xd6, 0x52, 0xfe, 0x00, 0x83, 0x50, 0xce, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x1d, - 0xdb, 0xf5, 0x28, 0x20, 0xda, 0x08, 0x00, 0x43, - 0x52, 0xd6, 0x00, 0x83, 0x50, 0xce, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf6, - 0x20, 0x01, 0x02, 0x80, 0xf0, 0x20, 0xfd, 0xa3, - 0xf0, 0x20, 0xfd, 0xa6, 0x4b, 0x1b, 0x40, 0x18, - 0xf0, 0x20, 0xfd, 0xa6, 0x49, 0x1a, 0x20, 0x0a, - 0xf0, 0x20, 0xfd, 0xa6, 0x21, 0x00, 0x4f, 0x19, - 0x20, 0xff, 0x4a, 0x19, 0x00, 0x4b, 0x18, 0x5b, - 0x01, 0x1b, 0x52, 0xd7, 0x18, 0x9b, 0x70, 0x98, - 0x70, 0xde, 0x71, 0x1e, 0x1d, 0xdc, 0x34, 0x19, - 0x73, 0x26, 0x71, 0x5e, 0x1c, 0x1d, 0x23, 0x06, - 0x73, 0x63, 0x23, 0x00, 0x00, 0xdc, 0x19, 0x2c, - 0x81, 0xa6, 0x81, 0xe6, 0x33, 0x01, 0x06, 0x1b, - 0x0e, 0x1b, 0x60, 0xa6, 0x2b, 0x04, 0xdb, 0xf5, - 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x08, - 0xdb, 0xe0, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xbc, - 0x2e, 0x08, 0x4a, 0x60, 0x2e, 0x08, 0x4a, 0x20, - 0x2e, 0x08, 0x46, 0x98, 0xff, 0xff, 0xfb, 0xff, - 0x2e, 0x00, 0x30, 0x45, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x45, 0x18, 0xb5, 0xf0, 0x06, 0x00, - 0x0e, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x04, 0x09, - 0x0c, 0x09, 0x91, 0x01, 0x06, 0x10, 0x0e, 0x00, - 0x04, 0x1c, 0x0c, 0x24, 0x27, 0x00, 0x49, 0x5a, - 0x00, 0x7b, 0x19, 0xdb, 0x01, 0x1b, 0x5a, 0xcd, - 0x4b, 0x58, 0x42, 0x9d, 0xd1, 0x01, 0x1c, 0x3a, - 0xe0, 0x04, 0x1c, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, - 0x2f, 0x08, 0xdb, 0xf1, 0x2f, 0x08, 0xd1, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x46, 0x4f, 0x50, - 0x97, 0x02, 0x5b, 0xbb, 0x2b, 0x00, 0xd0, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x23, 0x01, 0x9f, 0x02, - 0x53, 0xbb, 0x00, 0x53, 0x18, 0x9a, 0x01, 0x12, - 0x18, 0x57, 0x80, 0x38, 0x20, 0x14, 0xf0, 0x02, - 0xfe, 0x03, 0x1c, 0x01, 0x62, 0xb8, 0x20, 0x00, - 0x29, 0x00, 0xd1, 0x08, 0x49, 0x41, 0x80, 0x39, - 0x9f, 0x02, 0x53, 0xb8, 0x43, 0xc0, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x0d, - 0x21, 0xff, 0x02, 0x09, 0x40, 0x21, 0x12, 0x08, - 0x28, 0x09, 0xd2, 0x1f, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x1b, 0x04, 0x06, 0x09, - 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x00, 0x24, 0xb8, - 0xe0, 0x16, 0x24, 0xff, 0x34, 0x71, 0xe0, 0x13, - 0x24, 0x01, 0x02, 0xa4, 0xe0, 0x10, 0x24, 0x01, - 0x02, 0xe4, 0xe0, 0x0d, 0x24, 0x01, 0x03, 0x24, - 0xe0, 0x0a, 0x24, 0x01, 0x03, 0x64, 0xe0, 0x07, - 0x24, 0x01, 0x03, 0xa4, 0xe0, 0x04, 0x24, 0x01, - 0x03, 0xe4, 0xe0, 0x01, 0x24, 0x01, 0x02, 0xa4, - 0x80, 0xac, 0x88, 0xa8, 0x00, 0x80, 0xf0, 0x02, - 0xfd, 0xc7, 0x60, 0x28, 0x28, 0x00, 0xd1, 0x0d, - 0x48, 0x24, 0x80, 0x38, 0x20, 0x00, 0x9f, 0x02, - 0x53, 0xb8, 0x1c, 0x28, 0xf0, 0x02, 0xfd, 0xde, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x00, 0x70, 0xb8, - 0x26, 0x00, 0x88, 0x38, 0x00, 0x80, 0x49, 0x1d, - 0x50, 0x0e, 0x20, 0x00, 0x1c, 0x01, 0x43, 0x61, - 0x68, 0x2a, 0x18, 0x8a, 0x00, 0xc1, 0x19, 0xc9, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x60, 0x8a, - 0x28, 0x04, 0xdb, 0xf3, 0x20, 0xb8, 0x1c, 0x21, - 0xf0, 0x1b, 0xf9, 0x30, 0x1d, 0xfc, 0x34, 0x19, - 0x73, 0x20, 0x72, 0x2e, 0x78, 0xb8, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0xf0, 0x0d, - 0xfd, 0x63, 0x22, 0x00, 0xb4, 0x04, 0x78, 0xb8, - 0x23, 0x05, 0x22, 0x02, 0x99, 0x02, 0xf0, 0x0d, - 0xfb, 0x97, 0x22, 0x04, 0x7b, 0x21, 0xb0, 0x01, - 0xb4, 0x06, 0x78, 0xb9, 0x22, 0x0a, 0x20, 0x85, - 0x6a, 0xbb, 0xf0, 0x0d, 0xfd, 0xdf, 0x1c, 0x30, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x45, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x46, 0x98, - 0xb5, 0xf0, 0xb0, 0x82, 0x46, 0x68, 0xf0, 0x0e, - 0xfb, 0x73, 0x21, 0x00, 0x4f, 0x24, 0x4b, 0x25, - 0x93, 0x01, 0x4a, 0x25, 0x00, 0x48, 0x18, 0x40, - 0x01, 0x00, 0x19, 0xc0, 0x78, 0x84, 0x9d, 0x00, - 0x40, 0xe5, 0x07, 0xeb, 0x0f, 0xdb, 0x2b, 0x01, - 0xd1, 0x31, 0x6a, 0x83, 0x7a, 0x1c, 0x2c, 0xa4, - 0xd0, 0x01, 0x2c, 0xa5, 0xd1, 0x2b, 0x1d, 0xc4, - 0x34, 0x19, 0xe0, 0x0e, 0x79, 0x05, 0x73, 0x65, - 0x88, 0xde, 0x79, 0x05, 0x00, 0xed, 0x18, 0x2d, - 0x81, 0xae, 0x79, 0x05, 0x35, 0x01, 0x07, 0xad, - 0x0f, 0xad, 0x71, 0x05, 0x78, 0x15, 0x35, 0x01, - 0x70, 0x15, 0x7a, 0x9d, 0x7b, 0x66, 0x42, 0xb5, - 0xd0, 0x02, 0x79, 0x45, 0x2d, 0x00, 0xd0, 0xe9, - 0x7a, 0x1b, 0x2b, 0xa5, 0xd1, 0x0f, 0x79, 0x43, - 0x07, 0xdc, 0x0f, 0xe4, 0x2c, 0x01, 0xd0, 0x0a, - 0x1c, 0x1c, 0x23, 0x01, 0x43, 0x23, 0x71, 0x43, - 0x88, 0x00, 0x00, 0x80, 0x9b, 0x01, 0x18, 0xc0, - 0x68, 0x03, 0x33, 0x01, 0x60, 0x03, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0x29, 0x08, 0xdb, 0xbd, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x45, 0x18, 0x2e, 0x08, 0x46, 0x98, - 0x2e, 0x08, 0x03, 0xbc, 0xb5, 0xf0, 0x04, 0x05, - 0x0c, 0x2d, 0x20, 0x00, 0x4c, 0x31, 0x00, 0x42, - 0x18, 0x12, 0x01, 0x12, 0x5a, 0xa2, 0x42, 0xaa, - 0xd1, 0x01, 0x1c, 0x01, 0xe0, 0x04, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf2, - 0x28, 0x08, 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x48, - 0x18, 0x40, 0x01, 0x00, 0x19, 0x07, 0x78, 0xb8, - 0x49, 0x25, 0xf0, 0x0d, 0xfd, 0xab, 0x79, 0x78, - 0x23, 0x02, 0x43, 0x18, 0x71, 0x78, 0x78, 0xbe, - 0x20, 0xff, 0x70, 0xb8, 0x21, 0x00, 0x1d, 0xf8, - 0x30, 0x19, 0x73, 0x01, 0x21, 0x06, 0x73, 0x41, - 0x78, 0xf8, 0x79, 0x39, 0x42, 0x88, 0xd1, 0x11, - 0x79, 0x78, 0x07, 0xc0, 0x0f, 0xc0, 0x28, 0x01, - 0xd0, 0x0c, 0x20, 0x00, 0x70, 0xf8, 0x71, 0x38, - 0x71, 0x78, 0x48, 0x17, 0x80, 0x38, 0x6a, 0xb8, - 0x68, 0x00, 0xf0, 0x02, 0xfc, 0xff, 0x6a, 0xb8, - 0xf0, 0x02, 0xfc, 0xfc, 0x4f, 0x12, 0x00, 0x68, - 0x49, 0x12, 0x52, 0x0f, 0x00, 0x71, 0x4a, 0x12, - 0x52, 0x57, 0x21, 0x00, 0x4a, 0x11, 0x52, 0x11, - 0x1c, 0x30, 0x1c, 0x29, 0xf0, 0x02, 0xff, 0xfa, - 0x20, 0x00, 0x00, 0x41, 0x18, 0x09, 0x01, 0x09, - 0x5a, 0x61, 0x42, 0xb9, 0xd1, 0x04, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf4, - 0x28, 0x08, 0xd1, 0x03, 0x21, 0x00, 0x48, 0x08, - 0x71, 0x01, 0x70, 0x01, 0x20, 0x00, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x45, 0x18, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x49, 0xa8, 0x2e, 0x08, 0x4a, 0x20, - 0x2e, 0x08, 0x03, 0xbc, 0xb5, 0x80, 0x1c, 0x07, - 0x30, 0x28, 0xf0, 0x02, 0xfc, 0xa5, 0x49, 0x07, - 0x64, 0x88, 0x65, 0x08, 0x65, 0x48, 0x19, 0xc0, - 0x64, 0xc8, 0x20, 0x00, 0x64, 0x08, 0x64, 0x4f, - 0x49, 0x03, 0x84, 0x08, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x01, 0x00, 0xb5, 0x80, 0x1c, 0x07, - 0x30, 0x28, 0xf0, 0x02, 0xfc, 0x8d, 0x49, 0x06, - 0x66, 0x08, 0x66, 0x88, 0x66, 0xc8, 0x19, 0xc0, - 0x66, 0x48, 0x20, 0x00, 0x65, 0x88, 0x65, 0xcf, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x03, 0xc4, 0xb4, 0x80, 0x04, 0x09, - 0x0c, 0x09, 0x88, 0x02, 0x42, 0x8a, 0xd0, 0x18, - 0x4a, 0x0d, 0x8f, 0x13, 0x2b, 0x01, 0xd0, 0x04, - 0x23, 0x01, 0x87, 0x13, 0x8f, 0x17, 0x2f, 0x01, - 0xd1, 0xfb, 0x88, 0x03, 0x42, 0x8b, 0xd0, 0x03, - 0x80, 0x01, 0x88, 0x03, 0x42, 0x8b, 0xd1, 0xfb, - 0x8f, 0x11, 0x1c, 0x10, 0x29, 0x00, 0xd0, 0x04, - 0x21, 0x00, 0x87, 0x01, 0x8f, 0x02, 0x2a, 0x00, - 0xd1, 0xfb, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2c, 0x00, 0x1f, 0xc0, 0xb5, 0x80, 0x48, 0x27, - 0x8f, 0x40, 0x28, 0x00, 0xd1, 0x47, 0x4f, 0x26, - 0x88, 0x38, 0x12, 0x00, 0x4a, 0x25, 0x28, 0x06, - 0xd0, 0x21, 0xdc, 0x08, 0x28, 0x06, 0xd2, 0x36, - 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x3a, 0x09, 0x09, 0x15, 0x32, 0x09, 0x28, 0x0a, - 0xd0, 0x1b, 0xdc, 0x08, 0x28, 0x07, 0xd0, 0x15, - 0x28, 0x09, 0xd1, 0x28, 0x88, 0x79, 0x88, 0x38, - 0xf0, 0x00, 0xf8, 0xd4, 0xe0, 0x27, 0x28, 0x0b, - 0xd0, 0x1c, 0x28, 0x80, 0xd1, 0x1f, 0xf0, 0x00, - 0xf9, 0x25, 0xe0, 0x20, 0x88, 0x79, 0x88, 0x38, - 0xf0, 0x00, 0xf8, 0x2c, 0xe0, 0x1b, 0xf0, 0x00, - 0xf9, 0x75, 0xe0, 0x18, 0xf0, 0x00, 0xf9, 0xe0, - 0xe0, 0x15, 0x88, 0x38, 0xb0, 0x84, 0xab, 0x00, - 0x80, 0x18, 0x88, 0x78, 0x70, 0x98, 0x92, 0x01, - 0x46, 0x69, 0x20, 0x75, 0xf0, 0x08, 0xf8, 0x04, - 0xb0, 0x04, 0xe0, 0x08, 0x88, 0x79, 0x88, 0x38, - 0xf0, 0x00, 0xfc, 0x50, 0xe0, 0x03, 0x48, 0x08, - 0x8e, 0x81, 0x31, 0x01, 0x86, 0x81, 0x21, 0x00, - 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x8f, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x01, 0x00, - 0x2e, 0x08, 0x04, 0x04, 0xb5, 0xf0, 0x04, 0x04, - 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x17, - 0xf0, 0x20, 0xfb, 0x5e, 0x2d, 0x10, 0xdd, 0x03, - 0x20, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x68, 0x10, 0x40, 0x00, 0x40, 0x04, 0x01, - 0x0c, 0x09, 0x1c, 0x88, 0x00, 0x40, 0x1d, 0x02, - 0x48, 0x1b, 0x6c, 0x03, 0x18, 0x9d, 0x6c, 0x46, - 0x4b, 0x1a, 0x42, 0xb5, 0xdd, 0x08, 0x88, 0x19, - 0x1c, 0x18, 0x23, 0x20, 0x43, 0x19, 0x80, 0x01, - 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x64, 0x05, 0x35, 0x28, 0x42, 0xb5, 0xdd, 0x04, - 0x88, 0x1e, 0x1c, 0x1d, 0x23, 0x10, 0x43, 0x33, - 0x80, 0x2b, 0x6d, 0x03, 0x80, 0x9c, 0x6d, 0x04, - 0x80, 0xe2, 0x23, 0x00, 0x29, 0x00, 0xdd, 0x08, - 0x88, 0x3d, 0x00, 0x5c, 0x6d, 0x06, 0x19, 0xa4, - 0x81, 0x25, 0x33, 0x01, 0x37, 0x02, 0x42, 0x8b, - 0xdb, 0xf6, 0x6d, 0x01, 0x18, 0x8a, 0x6c, 0xc3, - 0x42, 0x9a, 0xd9, 0x00, 0x6c, 0x82, 0x60, 0x0a, - 0x65, 0x02, 0xf0, 0x20, 0xfb, 0x53, 0x20, 0x00, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x03, 0xc4, 0x2c, 0x00, 0x00, 0xf8, - 0xb4, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x08, - 0x0c, 0x00, 0x28, 0x10, 0xdd, 0x02, 0x20, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x30, 0x01, 0x4f, 0x1c, - 0x40, 0x07, 0x1c, 0xb8, 0x00, 0x40, 0x1d, 0x01, - 0x48, 0x1a, 0x6d, 0x83, 0x18, 0x5d, 0x6d, 0xc6, - 0x4b, 0x19, 0x42, 0xb5, 0xdd, 0x07, 0x88, 0x19, - 0x1c, 0x18, 0x23, 0x02, 0x43, 0x19, 0x80, 0x01, - 0x20, 0x01, 0xbc, 0xf0, 0x47, 0x70, 0x65, 0x85, - 0x35, 0x28, 0x42, 0xb5, 0xdd, 0x04, 0x88, 0x1e, - 0x1c, 0x1d, 0x23, 0x01, 0x43, 0x33, 0x80, 0x2b, - 0x6e, 0x83, 0x80, 0x9c, 0x6e, 0x84, 0x80, 0xe1, - 0x23, 0x00, 0x2f, 0x00, 0xdd, 0x08, 0x88, 0x15, - 0x00, 0x5c, 0x6e, 0x86, 0x19, 0xa4, 0x81, 0x25, - 0x32, 0x02, 0x33, 0x01, 0x42, 0xbb, 0xdb, 0xf6, - 0x6e, 0x82, 0x18, 0x51, 0x6e, 0x43, 0x42, 0x99, - 0xd3, 0x00, 0x6e, 0x01, 0x60, 0x11, 0x66, 0x81, - 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xfe, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0xb0, 0x04, 0x04, - 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x17, - 0xf0, 0x20, 0xfa, 0xc2, 0x1c, 0x20, 0x1c, 0x29, - 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0xa9, 0x1c, 0x07, - 0xf0, 0x20, 0xfa, 0xf0, 0x1c, 0x38, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0xb4, 0xf0, 0x04, 0x04, - 0x0c, 0x24, 0x04, 0x09, 0x0c, 0x09, 0x29, 0x08, - 0xdd, 0x02, 0x20, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x00, 0x88, 0x1d, 0xc7, 0x37, 0x01, 0x48, 0x19, - 0x6d, 0x83, 0x19, 0xdd, 0x6d, 0xc6, 0x4b, 0x18, - 0x42, 0xb5, 0xdd, 0x07, 0x88, 0x19, 0x1c, 0x18, - 0x23, 0x02, 0x43, 0x19, 0x80, 0x01, 0x20, 0x01, - 0xbc, 0xf0, 0x47, 0x70, 0x65, 0x85, 0x35, 0x28, - 0x42, 0xb5, 0xdd, 0x04, 0x88, 0x1e, 0x1c, 0x1d, - 0x23, 0x01, 0x43, 0x33, 0x80, 0x2b, 0x6e, 0x83, - 0x80, 0x9c, 0x6e, 0x84, 0x80, 0xe7, 0x23, 0x00, - 0x6e, 0x84, 0x29, 0x00, 0xdd, 0x06, 0xca, 0x40, - 0x00, 0x9d, 0x19, 0x2d, 0x60, 0xae, 0x33, 0x01, - 0x42, 0x8b, 0xdb, 0xf8, 0x6e, 0x81, 0x19, 0xca, - 0x6e, 0x43, 0x42, 0x9a, 0xd3, 0x00, 0x6e, 0x02, - 0x60, 0x0a, 0x66, 0x82, 0x20, 0x00, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x48, 0x28, - 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x4f, 0x27, - 0x28, 0x01, 0xd0, 0x13, 0x28, 0x02, 0xd0, 0x1a, - 0x28, 0x03, 0xd1, 0x0c, 0x68, 0x38, 0x88, 0x41, - 0x29, 0x0e, 0xdb, 0x02, 0x88, 0x41, 0x29, 0x0f, - 0xdd, 0x2f, 0x88, 0x01, 0x04, 0x09, 0x88, 0x40, - 0x43, 0x08, 0xf0, 0x10, 0xfd, 0x0f, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x68, 0x38, 0x88, 0x82, - 0x88, 0x41, 0x88, 0x00, 0xf0, 0x13, 0xfb, 0xee, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x68, 0x38, - 0x88, 0x81, 0x04, 0x09, 0x88, 0xc2, 0x43, 0x11, - 0x88, 0x02, 0x04, 0x12, 0x88, 0x40, 0x43, 0x10, - 0xf0, 0x13, 0xf8, 0x92, 0x68, 0x38, 0x88, 0x41, - 0x29, 0x0e, 0xd1, 0x08, 0x88, 0x81, 0x04, 0x09, - 0x88, 0xc0, 0x43, 0x08, 0xf0, 0x10, 0xfb, 0x8c, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, - 0xf0, 0x10, 0xfb, 0x86, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x88, 0x41, 0x48, 0x08, 0x29, 0x0e, - 0xd1, 0x02, 0x21, 0x00, 0x60, 0x01, 0xe0, 0x01, - 0x21, 0x01, 0x60, 0x01, 0x68, 0x00, 0xf0, 0x00, - 0xfb, 0xb7, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x00, 0xfc, 0x2e, 0x08, 0x03, 0xc4, - 0x2e, 0x08, 0x04, 0xf8, 0xb5, 0x90, 0x48, 0x31, - 0x88, 0x00, 0x06, 0x04, 0x0e, 0x24, 0x48, 0x30, - 0x22, 0x03, 0x21, 0x02, 0x4f, 0x2f, 0x2c, 0x08, - 0xd2, 0x4f, 0xa3, 0x02, 0x5d, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x4b, 0x10, 0x16, - 0x1c, 0x28, 0x34, 0x3f, 0x68, 0x39, 0x88, 0x49, - 0x06, 0x09, 0x0e, 0x09, 0x88, 0x00, 0x06, 0x00, - 0x0e, 0x00, 0xf0, 0x03, 0xfa, 0x8d, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x03, 0xf7, 0xfe, - 0xf8, 0x9f, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x02, 0xf7, 0xfe, 0xf8, 0x99, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x88, 0x00, 0x4b, 0x1e, - 0x28, 0x00, 0xd0, 0x03, 0x60, 0x1a, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x60, 0x19, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x88, 0x00, 0x4b, 0x19, - 0x28, 0x00, 0xd0, 0x03, 0x60, 0x1a, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x60, 0x19, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x02, 0xfe, 0x4c, - 0x68, 0x39, 0x88, 0x4a, 0x1d, 0x08, 0x88, 0x09, - 0xf7, 0xfe, 0xf9, 0x10, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x38, 0x88, 0x81, 0x04, 0x09, - 0x88, 0xc2, 0x18, 0x8a, 0x88, 0x01, 0x04, 0x09, - 0x88, 0x40, 0x50, 0x0a, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1d, 0xf8, 0x30, 0x39, 0x8e, 0x81, - 0x31, 0x01, 0x86, 0x81, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x00, 0xfc, - 0x2c, 0x00, 0x01, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0x6e, 0x00, 0x13, 0x00, 0x6e, 0x00, 0x12, 0x00, - 0xb5, 0x90, 0xb0, 0x84, 0x48, 0x73, 0x88, 0x00, - 0x06, 0x00, 0x0e, 0x00, 0x4c, 0x72, 0x4f, 0x73, - 0x28, 0x0a, 0xd2, 0x60, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x04, 0x0e, 0x16, 0x39, - 0x5d, 0x85, 0x8f, 0xb6, 0xbe, 0xcc, 0xf0, 0x10, - 0xfe, 0xc7, 0x90, 0x03, 0x14, 0x00, 0x68, 0x39, - 0x80, 0x08, 0x98, 0x03, 0x68, 0x39, 0x80, 0x48, - 0xe0, 0xc7, 0x20, 0x1e, 0xa9, 0x03, 0xf0, 0x10, - 0xfd, 0xc9, 0x98, 0x03, 0x68, 0x39, 0x80, 0x08, - 0xe0, 0xbf, 0x1c, 0x20, 0xf0, 0x13, 0xf9, 0xc0, - 0x20, 0x00, 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, - 0x68, 0x3b, 0x52, 0x99, 0x30, 0x01, 0x28, 0x04, - 0xdd, 0xf7, 0x20, 0x07, 0x00, 0x81, 0x58, 0x61, - 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, - 0x87, 0x91, 0x30, 0x01, 0x28, 0x0b, 0xdd, 0xf5, - 0x20, 0x0d, 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x87, 0x51, - 0x30, 0x01, 0x28, 0x12, 0xdd, 0xf5, 0xe0, 0x9c, - 0x20, 0x13, 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x83, 0x51, - 0x30, 0x01, 0x28, 0x15, 0xdd, 0xf5, 0x20, 0x00, - 0x00, 0x81, 0x19, 0x09, 0x6d, 0x89, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x80, 0xd1, 0x30, 0x01, - 0x28, 0x0a, 0xdd, 0xf5, 0x20, 0x00, 0x00, 0x81, - 0x19, 0x09, 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x83, 0x91, 0x30, 0x01, - 0x28, 0x01, 0xdd, 0xf4, 0xe0, 0x79, 0xe0, 0x73, - 0x20, 0x02, 0x00, 0x81, 0x19, 0x09, 0x31, 0x80, - 0x68, 0x49, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, - 0x3a, 0x40, 0x87, 0x91, 0x30, 0x01, 0x28, 0x05, - 0xdd, 0xf3, 0x20, 0x09, 0x00, 0x81, 0x19, 0x09, - 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, 0x68, 0x3b, - 0x18, 0xd2, 0x3a, 0x40, 0x86, 0xd1, 0x30, 0x01, - 0x28, 0x0f, 0xdd, 0xf3, 0x20, 0x11, 0x00, 0x81, - 0x19, 0x09, 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x86, 0x91, - 0x30, 0x01, 0x28, 0x13, 0xdd, 0xf3, 0xe0, 0x50, - 0x22, 0x00, 0x21, 0x00, 0x20, 0x01, 0x02, 0xc0, - 0xf7, 0xff, 0xfe, 0x48, 0x6f, 0xb8, 0x49, 0x2a, - 0x80, 0x08, 0xe0, 0x46, 0x46, 0x68, 0xf0, 0x15, - 0xff, 0xa7, 0x98, 0x00, 0x0c, 0x00, 0x68, 0x39, - 0x80, 0x08, 0x98, 0x00, 0x68, 0x39, 0x80, 0x48, - 0x98, 0x01, 0x0c, 0x00, 0x68, 0x39, 0x80, 0x88, - 0x98, 0x01, 0x68, 0x39, 0x80, 0xc8, 0x98, 0x02, - 0x0c, 0x00, 0x68, 0x39, 0x81, 0x08, 0x98, 0x02, - 0x68, 0x39, 0x81, 0x48, 0x20, 0x01, 0x68, 0x39, - 0x81, 0x88, 0x48, 0x1c, 0x68, 0x39, 0x81, 0xc8, - 0x48, 0x1b, 0x68, 0x01, 0x14, 0x09, 0x68, 0x3a, - 0x82, 0x11, 0x68, 0x00, 0x68, 0x39, 0x82, 0x48, - 0xe0, 0x1f, 0x20, 0x19, 0x06, 0x80, 0x6b, 0x80, - 0x06, 0x00, 0x0e, 0x00, 0x68, 0x39, 0x80, 0x08, - 0xe0, 0x17, 0x68, 0x38, 0x88, 0x01, 0x04, 0x09, - 0x88, 0x40, 0x18, 0x08, 0x68, 0x00, 0x90, 0x03, - 0x14, 0x00, 0x68, 0x39, 0x80, 0x08, 0x98, 0x03, - 0x68, 0x39, 0x80, 0x48, 0xe0, 0x09, 0x48, 0x0d, - 0x68, 0x00, 0x68, 0x39, 0x80, 0x08, 0xe0, 0x04, - 0x1d, 0xf8, 0x30, 0x39, 0x8e, 0x81, 0x31, 0x01, - 0x86, 0x81, 0xb0, 0x04, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x00, 0xfc, - 0x2e, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x02, - 0x2e, 0x08, 0x05, 0x74, 0x2e, 0x08, 0x00, 0x58, - 0xb5, 0x80, 0x4f, 0x53, 0x6d, 0x78, 0x6d, 0x39, - 0x42, 0x81, 0xd0, 0x59, 0x88, 0x81, 0x06, 0x09, - 0x0e, 0x09, 0x29, 0x12, 0xd2, 0x55, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x09, 0x10, 0x1a, 0x14, 0x20, 0x52, 0x24, 0x2f, - 0x3a, 0x45, 0x56, 0x60, 0x67, 0x6c, 0x70, 0x74, - 0x7a, 0x81, 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0b, 0xfe, 0x91, 0xe0, 0x72, - 0x89, 0x00, 0xf0, 0x0b, 0xfe, 0x75, 0xe0, 0x6e, - 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0b, - 0xff, 0x4f, 0xe0, 0x68, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0b, 0xfe, 0xf7, 0xe0, 0x62, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0x8d, 0xe0, 0x5e, - 0x8a, 0x42, 0x8a, 0x01, 0xb4, 0x06, 0x89, 0xc3, - 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, - 0xf8, 0x11, 0xb0, 0x02, 0xe0, 0x53, 0x8a, 0x42, - 0x8a, 0x01, 0xb4, 0x06, 0x89, 0xc3, 0x89, 0x82, - 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, 0xf8, 0x58, - 0xb0, 0x02, 0xe0, 0x48, 0x89, 0x83, 0x89, 0x42, - 0x89, 0x00, 0x49, 0x2e, 0xf0, 0x0c, 0xf9, 0x99, - 0x21, 0x00, 0x48, 0x2c, 0xf7, 0xff, 0xfc, 0x7e, - 0xe0, 0x3d, 0x89, 0xc1, 0x04, 0x0b, 0x14, 0x1b, - 0x89, 0x81, 0x04, 0x0a, 0x14, 0x12, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0c, 0xf9, 0xb9, 0xe0, 0x32, - 0xe0, 0x43, 0xe0, 0x30, 0x89, 0x00, 0xf0, 0x0b, - 0xff, 0x6b, 0xe0, 0x2c, 0x89, 0xc1, 0x04, 0x09, - 0x8a, 0x02, 0x18, 0x8b, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0c, 0xf9, 0xf1, 0xe0, 0x22, - 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, - 0xf0, 0x0c, 0xfa, 0x1c, 0xe0, 0x1b, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0x8d, 0xe0, 0x16, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0xa7, 0xe0, 0x12, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0xb7, 0xe0, 0x0e, - 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, - 0xfa, 0x9b, 0xe0, 0x08, 0x89, 0xc3, 0x89, 0x82, - 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, 0xfb, 0x34, - 0xe0, 0x01, 0xf0, 0x0c, 0xfb, 0xcb, 0x6d, 0x78, - 0x88, 0xc0, 0x6c, 0x39, 0x1a, 0x08, 0x64, 0x38, - 0x6c, 0x79, 0x1a, 0x08, 0x28, 0x28, 0xdb, 0x05, - 0x48, 0x07, 0x88, 0x01, 0x23, 0x10, 0x43, 0xdb, - 0x40, 0x19, 0x80, 0x01, 0x6d, 0x78, 0x68, 0x00, - 0x65, 0x78, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x03, 0xc4, 0x2c, 0x00, 0x01, 0x20, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x06, 0x00, - 0x0e, 0x00, 0x06, 0x09, 0x0e, 0x09, 0x89, 0xd7, - 0x23, 0xc7, 0x40, 0x7b, 0x81, 0xd3, 0x4b, 0x06, - 0x6f, 0xdf, 0x37, 0x01, 0x67, 0xdf, 0x2f, 0x28, - 0xda, 0x03, 0x4b, 0x04, 0x68, 0x1b, 0xf0, 0x1a, - 0xfb, 0xf5, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x03, 0xc4, 0x2e, 0x08, 0x01, 0x94, - 0xb5, 0x90, 0x4f, 0x5d, 0x6e, 0xf8, 0x6e, 0xb9, - 0x42, 0x81, 0xd0, 0x5c, 0x88, 0x81, 0x0a, 0x0a, - 0x2a, 0x0a, 0xd2, 0x59, 0xa3, 0x01, 0x5c, 0x9b, - 0x00, 0x5b, 0x44, 0x9f, 0x99, 0x04, 0x3e, 0x99, - 0x99, 0x44, 0x99, 0x99, 0x6c, 0x72, 0x06, 0x09, - 0x0e, 0x09, 0x24, 0x00, 0x29, 0x0c, 0xd2, 0x4b, - 0xa3, 0x01, 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, - 0x1e, 0x0a, 0x14, 0x2b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x28, 0x8b, 0x05, 0x68, 0x38, 0x88, 0x00, - 0xf0, 0x03, 0xf8, 0xde, 0xe0, 0x80, 0x22, 0x00, - 0xb4, 0x04, 0x89, 0x01, 0x1c, 0x23, 0x4a, 0x49, - 0x1e, 0x50, 0xf7, 0xfc, 0xfd, 0xe9, 0xb0, 0x01, - 0xe0, 0x76, 0x22, 0x00, 0xb4, 0x04, 0x89, 0x02, - 0x1c, 0x23, 0x49, 0x44, 0x1e, 0x48, 0xf7, 0xfc, - 0xfd, 0xdf, 0xb0, 0x01, 0xe0, 0x6c, 0x8a, 0x02, - 0xb4, 0x04, 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf7, 0xfc, 0xfd, 0xd5, 0xb0, 0x01, - 0xe0, 0x62, 0xf7, 0xfc, 0xfd, 0x9d, 0xe0, 0x5f, - 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfe, 0xfd, 0xea, - 0xe0, 0x5a, 0x06, 0x09, 0xd1, 0x58, 0x89, 0x00, - 0xf7, 0xfc, 0xff, 0x76, 0xe0, 0x54, 0x06, 0x09, - 0x0e, 0x09, 0x29, 0x06, 0xd2, 0x0c, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x09, 0x0d, 0x11, 0x15, 0x19, 0x89, 0x00, - 0xf7, 0xfe, 0xf8, 0xaa, 0xe0, 0x44, 0xe0, 0x54, - 0xe0, 0x42, 0x89, 0x00, 0xf7, 0xfe, 0xf8, 0xca, - 0xe0, 0x3e, 0x89, 0x00, 0xf7, 0xfe, 0xf9, 0x58, - 0xe0, 0x3a, 0x89, 0x00, 0xf7, 0xfe, 0xfa, 0x3c, - 0xe0, 0x36, 0x89, 0x00, 0xf7, 0xfe, 0xfa, 0x6e, - 0xe0, 0x32, 0x89, 0x00, 0x06, 0x00, 0x0e, 0x00, - 0xf7, 0xfe, 0xfa, 0x4a, 0xe0, 0x2c, 0x06, 0x08, - 0xd1, 0x2a, 0x6f, 0xb8, 0x30, 0x01, 0x67, 0xb8, - 0xe0, 0x26, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x08, - 0xd2, 0x22, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x0c, 0x08, 0x0f, - 0x12, 0x16, 0x19, 0x1c, 0x89, 0x00, 0xf0, 0x01, - 0xf9, 0x93, 0xe0, 0x15, 0x89, 0x00, 0xf0, 0x01, - 0xf9, 0xbb, 0xe0, 0x11, 0xf0, 0x01, 0xfa, 0x06, - 0xe0, 0x0e, 0xf0, 0x01, 0xfa, 0x5d, 0xe0, 0x0b, - 0x89, 0x00, 0xf0, 0x01, 0xfa, 0xe1, 0xe0, 0x07, - 0xf0, 0x01, 0xfb, 0x1a, 0xe0, 0x04, 0xf0, 0x01, - 0xfb, 0x33, 0xe0, 0x01, 0xf0, 0x01, 0xfa, 0x90, - 0x6e, 0xf8, 0x88, 0xc0, 0x6d, 0xb9, 0x1a, 0x08, - 0x65, 0xb8, 0x6d, 0xf9, 0x1a, 0x08, 0x28, 0x28, - 0xdb, 0x04, 0x48, 0x07, 0x88, 0x01, 0x08, 0x49, - 0x00, 0x49, 0x80, 0x01, 0x6e, 0xf8, 0x68, 0x00, - 0x66, 0xf8, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x03, 0xc4, 0x00, 0x00, 0xff, 0xff, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x17, 0x28, 0x03, 0xd0, 0x0b, - 0x28, 0x07, 0xd0, 0x0e, 0x28, 0x08, 0xd1, 0x03, - 0x88, 0x38, 0xf0, 0x02, 0xfa, 0x5d, 0x80, 0x78, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfe, 0xfd, 0x5e, - 0xe7, 0xf6, 0x88, 0x79, 0x88, 0x38, 0x1d, 0x3a, - 0xf0, 0x02, 0xf8, 0xce, 0x49, 0x01, 0x68, 0x09, - 0x80, 0x08, 0xe7, 0xed, 0x2e, 0x08, 0x03, 0xc4, - 0x48, 0x0d, 0x6f, 0xc0, 0x28, 0x00, 0xd1, 0x0c, - 0x49, 0x0c, 0x60, 0x08, 0x48, 0x0c, 0x8e, 0x83, - 0x49, 0x0c, 0x22, 0x01, 0x2b, 0x00, 0xd0, 0x05, - 0x8d, 0x03, 0x86, 0x8b, 0x8d, 0x43, 0x86, 0xcb, - 0x87, 0x82, 0x47, 0x70, 0x8e, 0xc3, 0x2b, 0x00, - 0xd0, 0xfb, 0x8d, 0x83, 0x86, 0x8b, 0x8d, 0xc3, - 0x86, 0xcb, 0x87, 0x82, 0x47, 0x70, 0x00, 0x00, - 0x2c, 0x00, 0x1f, 0x80, 0x2e, 0x08, 0x04, 0x44, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x00, 0xc0, - 0xb5, 0x00, 0xf0, 0x00, 0xfa, 0x91, 0xf7, 0xfd, - 0xf9, 0x53, 0xf7, 0xfc, 0xff, 0xd7, 0xf7, 0xfd, - 0xfa, 0x53, 0xf0, 0x03, 0xf8, 0xb1, 0xf7, 0xff, - 0xff, 0xcf, 0x48, 0x16, 0x8e, 0x80, 0x28, 0x00, - 0xd1, 0x21, 0x48, 0x15, 0x6f, 0xc0, 0x28, 0x00, - 0xd1, 0x13, 0x48, 0x14, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x0f, 0xb0, 0x82, 0x46, 0x69, 0xa8, 0x01, - 0xf0, 0x01, 0xfa, 0xd8, 0xa8, 0x01, 0x78, 0x00, - 0x28, 0x32, 0xda, 0x05, 0xa8, 0x00, 0x78, 0x00, - 0x28, 0x32, 0xda, 0x01, 0xf0, 0x07, 0xf9, 0xb0, - 0xb0, 0x02, 0x48, 0x0b, 0x69, 0xc0, 0x08, 0xc0, - 0xd3, 0x07, 0x48, 0x0a, 0x6c, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0xf7, 0xff, 0xfd, 0xfd, 0xbc, 0x08, - 0x47, 0x18, 0xf7, 0xff, 0xfe, 0xc1, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x1f, 0x80, 0x2e, 0x08, 0x1a, 0x94, - 0x72, 0x00, 0x01, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0xb4, 0x80, 0x02, 0x4f, 0x4b, 0x07, 0x40, 0x3b, - 0x43, 0x1a, 0x23, 0x19, 0x06, 0x9b, 0x62, 0x9a, - 0x0a, 0x49, 0x02, 0x49, 0x08, 0x49, 0x07, 0xc0, - 0x43, 0x08, 0x49, 0x03, 0x68, 0x09, 0x60, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0x00, 0x03, 0xfe, 0x00, - 0x2e, 0x08, 0x9b, 0xa4, 0xb4, 0x90, 0x4b, 0x0c, - 0x68, 0x1f, 0x68, 0x3f, 0x0f, 0xff, 0x60, 0x07, - 0x68, 0x18, 0x68, 0x00, 0x00, 0x40, 0x0a, 0x47, - 0x02, 0x7f, 0x20, 0x19, 0x06, 0x80, 0x6a, 0x84, - 0x4b, 0x06, 0x40, 0x23, 0x0a, 0x5b, 0x43, 0x3b, - 0x60, 0x0b, 0x6a, 0x80, 0x05, 0xc0, 0x0d, 0xc0, - 0x60, 0x10, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xa4, 0x00, 0x03, 0xfe, 0x00, - 0xb5, 0x00, 0x49, 0x1d, 0x62, 0xc8, 0x28, 0x00, - 0xd0, 0x11, 0x28, 0x01, 0xd0, 0x1b, 0x28, 0x02, - 0xd0, 0x25, 0x28, 0x03, 0xd1, 0x09, 0x48, 0x19, - 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, - 0x22, 0x01, 0x21, 0x01, 0x20, 0x00, 0xf0, 0x10, - 0xfd, 0x47, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x13, - 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, - 0x48, 0x11, 0x68, 0x01, 0x04, 0x03, 0x43, 0x19, - 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x0d, - 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x0b, 0x68, 0x01, 0x4b, 0x0b, 0x40, 0x19, - 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x07, - 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, - 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0xf0, 0x10, - 0xfd, 0x23, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x6a, 0x00, 0x00, 0x18, - 0x6c, 0x00, 0x00, 0x20, 0xff, 0xdf, 0xff, 0xff, - 0xb5, 0x90, 0x48, 0x11, 0x6c, 0xc1, 0x6c, 0x80, - 0x1a, 0x0f, 0x48, 0x10, 0xd5, 0x01, 0x69, 0x01, - 0x18, 0x7f, 0x69, 0x00, 0x10, 0x80, 0x4c, 0x0e, - 0x42, 0xb8, 0xda, 0x0b, 0x68, 0xe0, 0x28, 0x00, - 0xd1, 0x08, 0x48, 0x0c, 0x68, 0x01, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, 0x20, 0x02, - 0xf0, 0x10, 0xf8, 0xc4, 0x2f, 0x00, 0xd1, 0x04, - 0x20, 0x01, 0x61, 0xe0, 0x6b, 0xa0, 0x30, 0x01, - 0x63, 0xa0, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x04, 0x48, - 0x2e, 0x08, 0x04, 0xc8, 0x6c, 0x00, 0x00, 0x20, - 0xb5, 0x00, 0x20, 0x03, 0xf0, 0x10, 0xf8, 0xae, - 0x20, 0x1e, 0xf0, 0x0d, 0xf8, 0xab, 0x23, 0x03, - 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x0c, 0xfe, 0x59, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x02, 0x22, 0x02, 0x49, 0x07, - 0x20, 0x1e, 0xf0, 0x0c, 0xfc, 0x8d, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1e, - 0xb0, 0x01, 0xf0, 0x0c, 0xfe, 0x49, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0xb5, 0x00, 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x12, - 0xfc, 0x23, 0x20, 0x1f, 0xf0, 0x0c, 0xff, 0xbc, - 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x02, 0x20, 0x1f, 0xf0, 0x0c, 0xfe, 0x34, - 0x20, 0x00, 0xf0, 0x0f, 0xff, 0x19, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x01, 0x22, 0x02, 0x49, 0x07, - 0x20, 0x1f, 0xf0, 0x0c, 0xfc, 0x65, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1f, - 0xb0, 0x01, 0xf0, 0x0c, 0xfe, 0x21, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, - 0xb5, 0x80, 0x20, 0x0f, 0x02, 0x40, 0x4f, 0x0a, - 0x61, 0x38, 0x49, 0x0a, 0x6c, 0x89, 0x61, 0x79, - 0xf0, 0x01, 0xfe, 0x42, 0x1d, 0xf9, 0x31, 0x79, - 0x61, 0x08, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, - 0x61, 0xf8, 0x62, 0x38, 0x64, 0xf8, 0x20, 0xff, - 0x72, 0x08, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x66, 0x00, 0x00, 0x80, - 0xb5, 0x80, 0x4f, 0x05, 0x69, 0x38, 0x28, 0x00, - 0xd0, 0x03, 0xf0, 0x01, 0xfe, 0x4b, 0x20, 0x00, - 0x61, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0x00, 0x4a, 0x0d, - 0xb4, 0x04, 0x1f, 0x10, 0x1e, 0x51, 0x1c, 0x13, - 0xf7, 0xfc, 0xfb, 0xaa, 0x21, 0x33, 0x06, 0x49, - 0x6d, 0x88, 0x6d, 0x4a, 0x1a, 0x82, 0xb0, 0x01, - 0x48, 0x07, 0x62, 0x42, 0x6d, 0x49, 0x62, 0xc1, - 0x21, 0x00, 0x65, 0x81, 0x21, 0x01, 0x02, 0xc9, - 0x64, 0x41, 0x21, 0x01, 0x30, 0x60, 0x76, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x04, 0x48, 0xb5, 0x00, 0x4a, 0x10, - 0xb4, 0x04, 0x1c, 0x13, 0x3a, 0x01, 0x49, 0x0f, - 0x1e, 0xc8, 0xf7, 0xfc, 0xfb, 0x89, 0x21, 0x33, - 0x06, 0x49, 0x6d, 0x88, 0x6d, 0x4a, 0x1a, 0x82, - 0xb0, 0x01, 0x48, 0x0b, 0x62, 0x42, 0x6d, 0x49, - 0x62, 0xc1, 0x21, 0x00, 0x65, 0x81, 0x21, 0x01, - 0x02, 0xc9, 0x64, 0x41, 0x21, 0x01, 0x30, 0x60, - 0x76, 0x01, 0x48, 0x06, 0x23, 0x02, 0x68, 0x01, - 0x43, 0x19, 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x00, 0x04, - 0x48, 0x03, 0x23, 0x02, 0x43, 0xdb, 0x68, 0x01, - 0x40, 0x19, 0x60, 0x01, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x00, 0x04, 0xb5, 0xf0, 0x20, 0x0f, - 0x02, 0x40, 0x4c, 0x11, 0x61, 0x20, 0x20, 0x00, - 0xf7, 0xfc, 0xfc, 0xf6, 0x48, 0x0f, 0xf7, 0xfc, - 0xfc, 0xf3, 0x26, 0x00, 0x1d, 0xe0, 0x30, 0x59, - 0x77, 0x06, 0x25, 0xff, 0x1d, 0xe7, 0x37, 0x79, - 0x70, 0x3d, 0x20, 0x01, 0x63, 0x78, 0x60, 0xe6, - 0x69, 0x78, 0x28, 0x00, 0xd1, 0x04, 0x20, 0x41, - 0x01, 0x40, 0xf0, 0x01, 0xfd, 0xb1, 0x61, 0x78, - 0x69, 0x78, 0x28, 0x00, 0xd0, 0x01, 0x76, 0x3e, - 0x70, 0x3d, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x1f, 0xff, - 0xb5, 0x00, 0x20, 0x00, 0xf7, 0xfd, 0xff, 0xdc, - 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, 0x4a, 0x06, - 0x21, 0x00, 0x20, 0x00, 0xf7, 0xfc, 0xfb, 0x28, - 0x21, 0x00, 0x20, 0x0d, 0xb0, 0x01, 0xf0, 0x12, - 0xfb, 0x47, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x22, 0x00, - 0xb4, 0x04, 0x27, 0x00, 0x1c, 0x3b, 0x4a, 0x17, - 0x21, 0x00, 0x20, 0x00, 0xf7, 0xfc, 0xfb, 0x14, - 0x22, 0x00, 0xb0, 0x01, 0xb4, 0x04, 0x1c, 0x3b, - 0x4a, 0x12, 0x49, 0x13, 0x20, 0x00, 0xf7, 0xfc, - 0xfb, 0x0b, 0x21, 0x33, 0x06, 0x49, 0x6d, 0x88, - 0x6d, 0x4a, 0x1a, 0x82, 0xb0, 0x01, 0x48, 0x0f, - 0x62, 0x42, 0x6d, 0x49, 0x63, 0x01, 0x21, 0x01, - 0x02, 0xc9, 0x64, 0x81, 0x21, 0x01, 0x65, 0x87, - 0x30, 0x60, 0x76, 0x01, 0x77, 0x07, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf7, 0xff, 0xfe, 0x28, - 0x20, 0x00, 0xf7, 0xff, 0xfe, 0x59, 0x21, 0x00, - 0x20, 0x0d, 0xf0, 0x12, 0xfb, 0x11, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0x1f, 0xfe, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0xf0, 0x06, 0x05, 0x0e, 0x2d, 0x20, 0x0f, - 0x02, 0x40, 0x4f, 0x2f, 0x26, 0x33, 0x06, 0x76, - 0x61, 0x38, 0x6d, 0xb0, 0x6d, 0x71, 0x1a, 0x40, - 0x62, 0x78, 0x62, 0xb8, 0x20, 0x00, 0x1d, 0xfc, - 0x34, 0x79, 0x60, 0xe0, 0x2d, 0x00, 0xd0, 0x02, - 0x20, 0xff, 0xf7, 0xfd, 0xff, 0x79, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x00, 0x21, 0x00, 0x20, 0x00, - 0xf7, 0xfc, 0xfa, 0xc6, 0x22, 0x01, 0x21, 0x01, - 0x20, 0x00, 0xb0, 0x01, 0xf0, 0x10, 0xfb, 0x84, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x10, 0xfc, 0x44, - 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, 0x4a, 0x1d, - 0x20, 0x00, 0x1e, 0x51, 0xf7, 0xfc, 0xfa, 0xb4, - 0x20, 0x01, 0x63, 0x60, 0x69, 0x60, 0xb0, 0x01, - 0x28, 0x00, 0xd1, 0x04, 0x20, 0x41, 0x01, 0x40, - 0xf0, 0x01, 0xfd, 0x1a, 0x61, 0x60, 0x69, 0x60, - 0x28, 0x00, 0xd0, 0x03, 0x20, 0x00, 0x76, 0x20, - 0x20, 0xff, 0x70, 0x20, 0x6d, 0x70, 0x63, 0x38, - 0x20, 0x01, 0x02, 0xc0, 0x64, 0xb8, 0x20, 0x00, - 0x26, 0x01, 0x65, 0xb8, 0x1d, 0xf9, 0x31, 0x59, - 0x76, 0x0e, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, - 0xf7, 0xff, 0xfd, 0xc6, 0x21, 0x00, 0x20, 0x0d, - 0xf0, 0x12, 0xfa, 0xb2, 0x20, 0x00, 0x60, 0xf8, - 0x2d, 0x00, 0xd1, 0x02, 0xf7, 0xff, 0xfd, 0xf0, - 0x61, 0xe6, 0x20, 0x00, 0x60, 0xb8, 0x66, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x1f, 0xff, - 0xb5, 0xb0, 0x4f, 0x44, 0x25, 0x00, 0x6d, 0x38, - 0x4c, 0x43, 0x28, 0x05, 0xd2, 0x14, 0xa3, 0x02, - 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x10, 0x03, 0x2e, 0x62, 0x70, 0x00, 0x4d, 0x3f, - 0x68, 0x28, 0x08, 0x41, 0xd2, 0x08, 0x08, 0xc0, - 0xd3, 0x09, 0xf7, 0xff, 0xfe, 0xb3, 0x23, 0x04, - 0x43, 0xdb, 0x68, 0x28, 0x40, 0x18, 0x60, 0x28, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x6d, 0x78, - 0x28, 0x00, 0xd0, 0xf9, 0x28, 0x01, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x06, 0xf0, 0x00, 0xf8, 0x6a, - 0x8e, 0xa0, 0x28, 0x00, 0xd1, 0xf0, 0xf0, 0x00, - 0xf9, 0x27, 0x6d, 0x78, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0xe9, 0x8e, 0xa0, 0x28, 0x00, - 0xd1, 0xe6, 0xf0, 0x00, 0xfa, 0x49, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x8e, 0xe0, 0x28, 0x00, - 0xd1, 0xde, 0x8d, 0xa0, 0x06, 0x00, 0x0e, 0x00, - 0x28, 0x06, 0xd1, 0x12, 0x48, 0x26, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x06, 0x6d, 0x78, 0x28, 0x01, - 0xd0, 0x01, 0x28, 0x05, 0xd1, 0x01, 0xf0, 0x00, - 0xfc, 0xc3, 0x6d, 0x78, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0x2c, - 0x85, 0xa5, 0x8d, 0xa0, 0x28, 0x00, 0xd1, 0xc3, - 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x08, 0x28, 0x04, - 0xd0, 0x0b, 0x28, 0x05, 0xd1, 0xbc, 0xf0, 0x00, - 0xfd, 0xdd, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xf0, 0x00, 0xfd, 0xb2, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0xf0, 0x00, 0xfd, 0x81, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x8e, 0xe0, 0x28, 0x00, - 0xd1, 0xaa, 0x20, 0x06, 0x85, 0xa0, 0x85, 0xe5, - 0x20, 0x09, 0x02, 0x40, 0x86, 0xe0, 0x20, 0x04, - 0x65, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x8e, 0xe0, 0x28, 0x00, 0xd1, 0x9c, 0x8d, 0xa0, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x06, 0xd1, 0x97, - 0x85, 0xa5, 0x65, 0x3d, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x00, 0x04, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0xb0, 0x48, 0x46, - 0x6c, 0xc1, 0x4c, 0x46, 0x64, 0x21, 0x69, 0x60, - 0x1a, 0x09, 0x1d, 0xe7, 0x37, 0x79, 0x63, 0xf9, - 0x29, 0x00, 0xda, 0x02, 0x69, 0x22, 0x18, 0x89, - 0x63, 0xf9, 0x23, 0xff, 0x6b, 0xf9, 0x33, 0x01, - 0x42, 0x99, 0xdb, 0x73, 0x22, 0x01, 0x03, 0x12, - 0x42, 0x91, 0xdd, 0x00, 0x63, 0xfa, 0x6b, 0xf9, - 0x08, 0x89, 0x00, 0x89, 0x63, 0xf9, 0x7a, 0x3a, - 0x2a, 0x00, 0xd0, 0x05, 0x23, 0xff, 0x03, 0x5b, - 0x1a, 0xc2, 0x61, 0xe2, 0x22, 0x00, 0x72, 0x3a, - 0x18, 0x42, 0x49, 0x35, 0x25, 0x12, 0x42, 0x8a, - 0xdd, 0x2c, 0x1a, 0x08, 0x64, 0x38, 0xf0, 0x1f, - 0xfb, 0x53, 0x4b, 0x32, 0x40, 0x18, 0xf0, 0x1f, - 0xfb, 0x53, 0x22, 0x00, 0x49, 0x30, 0xb4, 0x06, - 0x69, 0x60, 0x69, 0x39, 0x18, 0x41, 0x23, 0xff, - 0x03, 0x5b, 0x1a, 0xc9, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc0, 0x6c, 0x3a, 0x1c, 0x2b, 0xf0, 0x14, - 0xfc, 0x21, 0x22, 0x00, 0xb0, 0x02, 0x49, 0x28, - 0xb4, 0x06, 0x6b, 0xf8, 0x6c, 0x39, 0x1a, 0x42, - 0x69, 0x39, 0x1c, 0x2b, 0x48, 0x25, 0xf0, 0x14, - 0xfc, 0x15, 0xb0, 0x02, 0xf0, 0x1f, 0xfb, 0x30, - 0x23, 0x01, 0x04, 0x9b, 0x43, 0x18, 0xf0, 0x1f, - 0xfb, 0x2f, 0xe0, 0x1d, 0xf0, 0x1f, 0xfb, 0x28, - 0x4b, 0x1c, 0x40, 0x18, 0xf0, 0x1f, 0xfb, 0x28, - 0x22, 0x00, 0x49, 0x1b, 0xb4, 0x06, 0x69, 0x60, - 0x69, 0x39, 0x18, 0x41, 0x23, 0xff, 0x03, 0x5b, - 0x1a, 0xc9, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, - 0x6b, 0xfa, 0x1c, 0x2b, 0xf0, 0x14, 0xfb, 0xf6, - 0xb0, 0x02, 0xf0, 0x1f, 0xfb, 0x11, 0x23, 0x01, - 0x04, 0x9b, 0x43, 0x18, 0xf0, 0x1f, 0xfb, 0x10, - 0x69, 0x60, 0x6b, 0xf9, 0x18, 0x40, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc1, 0x61, 0x60, 0x4b, 0x0e, - 0x42, 0x99, 0xd3, 0x02, 0x69, 0x21, 0x1a, 0x40, - 0x61, 0x60, 0x23, 0xff, 0x03, 0x5b, 0x69, 0x60, - 0x1a, 0xc0, 0xe0, 0x00, 0xe0, 0x00, 0x62, 0x20, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x04, 0x48, - 0x00, 0x1f, 0xfe, 0x00, 0xff, 0xfb, 0xff, 0xff, - 0x9e, 0x00, 0x08, 0x00, 0xcc, 0x1f, 0xe0, 0x00, - 0xcc, 0x1f, 0xfe, 0x00, 0x21, 0x00, 0x23, 0xff, - 0x68, 0x02, 0x33, 0xc1, 0x42, 0x9a, 0xd0, 0x01, - 0x1c, 0x08, 0x47, 0x70, 0x79, 0xc2, 0x0a, 0x12, - 0xd2, 0x01, 0x1c, 0x08, 0x47, 0x70, 0x7a, 0x41, - 0x23, 0x0e, 0x40, 0x19, 0x07, 0x49, 0x7a, 0x82, - 0x05, 0x92, 0x43, 0x11, 0x7a, 0xc2, 0x23, 0xfe, - 0x40, 0x1a, 0x03, 0x92, 0x43, 0x11, 0x7b, 0x02, - 0x01, 0xd2, 0x43, 0x11, 0x7b, 0x40, 0x40, 0x18, - 0x08, 0x40, 0x43, 0x08, 0x49, 0x01, 0x67, 0x08, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0xf0, 0xb0, 0x86, 0x4c, 0x8c, 0x6c, 0xe0, - 0x1d, 0xe7, 0x37, 0x79, 0x1d, 0xfd, 0x35, 0x39, - 0x28, 0x00, 0xd0, 0x04, 0x28, 0x01, 0xd0, 0x3a, - 0x28, 0x02, 0xd1, 0x73, 0xe0, 0x74, 0x69, 0xe0, - 0x6a, 0x21, 0x1a, 0x09, 0x63, 0xf9, 0x1c, 0x0a, - 0xd5, 0x02, 0x69, 0x21, 0x18, 0x51, 0x63, 0xf9, - 0x6b, 0xf9, 0x29, 0x04, 0xdb, 0x67, 0x69, 0x3e, - 0x5c, 0x31, 0x06, 0x0a, 0x65, 0x7a, 0x92, 0x05, - 0x1c, 0x41, 0x69, 0x20, 0x90, 0x04, 0xf0, 0x19, - 0xfe, 0xe3, 0x61, 0xe1, 0x5c, 0x70, 0x04, 0x00, - 0x9a, 0x05, 0x18, 0x82, 0x65, 0x7a, 0x92, 0x03, - 0x98, 0x04, 0x31, 0x01, 0xf0, 0x19, 0xfe, 0xd8, - 0x61, 0xe1, 0x5c, 0x70, 0x02, 0x00, 0x9a, 0x03, - 0x18, 0x80, 0x65, 0x78, 0x90, 0x02, 0x98, 0x04, - 0x31, 0x01, 0xf0, 0x19, 0xfe, 0xcd, 0x61, 0xe1, - 0x5c, 0x70, 0x9a, 0x02, 0x18, 0x80, 0x65, 0x78, - 0x98, 0x04, 0x31, 0x01, 0xf0, 0x19, 0xfe, 0xc4, - 0x20, 0x01, 0x64, 0xe0, 0x61, 0xe1, 0x6a, 0x20, - 0x69, 0xe1, 0x1a, 0x40, 0x63, 0xf8, 0x1c, 0x01, - 0xd4, 0x05, 0x48, 0x67, 0x69, 0x06, 0x30, 0x80, - 0x69, 0x02, 0x92, 0x01, 0xe0, 0x03, 0x69, 0x20, - 0x18, 0x08, 0x63, 0xf8, 0xe7, 0xf5, 0x6b, 0xf8, - 0x90, 0x00, 0x28, 0x02, 0xdb, 0x22, 0x6d, 0x78, - 0x09, 0x01, 0x01, 0x09, 0x23, 0xff, 0x33, 0xc1, - 0x42, 0x99, 0xd1, 0x31, 0x9a, 0x01, 0x69, 0xe0, - 0x5c, 0x11, 0x02, 0x09, 0x83, 0x29, 0x1c, 0x41, - 0x1c, 0x30, 0xf0, 0x19, 0xfe, 0x9d, 0x61, 0xe1, - 0x69, 0x38, 0x5c, 0x40, 0x8b, 0x2a, 0x18, 0x80, - 0x83, 0x28, 0x8b, 0x28, 0x30, 0x06, 0x83, 0x28, - 0x19, 0x88, 0x1f, 0x41, 0x1c, 0x30, 0xf0, 0x19, - 0xfe, 0x8f, 0x61, 0xe1, 0x21, 0xff, 0x71, 0x39, - 0x20, 0x02, 0x64, 0xe0, 0x6c, 0xe0, 0x28, 0x02, - 0xd1, 0x00, 0xe0, 0x01, 0xe0, 0x94, 0xe0, 0x93, - 0x6a, 0x20, 0x69, 0xe1, 0x1a, 0x40, 0x63, 0xf8, - 0x1c, 0x01, 0xd5, 0x02, 0x69, 0x20, 0x18, 0x08, - 0x63, 0xf8, 0x79, 0x38, 0x28, 0x00, 0xd0, 0x13, - 0x20, 0x01, 0x02, 0xc0, 0x83, 0xa8, 0xe0, 0x11, - 0x02, 0x01, 0x65, 0x79, 0x9a, 0x01, 0x69, 0xe0, - 0x5c, 0x12, 0x18, 0x51, 0x65, 0x79, 0x1c, 0x41, - 0x1c, 0x30, 0xf0, 0x19, 0xfe, 0x69, 0x61, 0xe1, - 0x98, 0x00, 0x38, 0x01, 0x63, 0xf8, 0xe7, 0xb2, - 0x48, 0x3c, 0x83, 0xa8, 0x8b, 0x28, 0x6b, 0xf9, - 0x42, 0x88, 0xda, 0x01, 0x63, 0xf8, 0xe0, 0x02, - 0x8b, 0xa8, 0x42, 0x81, 0xdb, 0x68, 0x8b, 0xa8, - 0x6b, 0xf9, 0x42, 0x81, 0xdd, 0x00, 0x63, 0xf8, - 0x48, 0x35, 0x21, 0x00, 0x66, 0x78, 0x80, 0x01, - 0x30, 0x02, 0x21, 0xff, 0x31, 0xc1, 0x66, 0x78, - 0x80, 0x01, 0x48, 0x32, 0x66, 0x78, 0x79, 0x39, - 0x29, 0x00, 0xd0, 0x21, 0x21, 0x00, 0x71, 0x39, - 0x69, 0x3b, 0x69, 0x20, 0x18, 0x1a, 0xb4, 0x04, - 0x69, 0xe0, 0x18, 0x18, 0x6b, 0xfa, 0x49, 0x2a, - 0xf0, 0x00, 0xfe, 0xec, 0x6b, 0xf8, 0x38, 0x06, - 0x6e, 0x79, 0x80, 0x08, 0x31, 0x02, 0x66, 0x79, - 0xb0, 0x01, 0x48, 0x25, 0xf7, 0xff, 0xff, 0x02, - 0x8b, 0x28, 0x6b, 0xf9, 0x1a, 0x40, 0x83, 0x28, - 0x69, 0xe0, 0x6b, 0xf9, 0x18, 0x41, 0x69, 0x20, - 0xf0, 0x19, 0xfe, 0x26, 0x61, 0xe1, 0xe0, 0x26, - 0x6b, 0xf9, 0x31, 0x03, 0x80, 0x01, 0x48, 0x1e, - 0x21, 0x01, 0x03, 0xc9, 0x66, 0x78, 0x80, 0x01, - 0x30, 0x02, 0x21, 0xff, 0x66, 0x78, 0x80, 0x01, - 0x48, 0x1a, 0x66, 0x78, 0x69, 0x3b, 0x69, 0x20, - 0x18, 0x1a, 0xb4, 0x04, 0x69, 0xe0, 0x18, 0x18, - 0x6b, 0xfa, 0x49, 0x17, 0xf0, 0x00, 0xfe, 0xbe, - 0x8b, 0x28, 0x6b, 0xf9, 0x1a, 0x40, 0x83, 0x28, - 0x69, 0xe0, 0x6b, 0xfe, 0x19, 0x81, 0x69, 0x20, - 0xb0, 0x01, 0xf0, 0x19, 0xfe, 0x01, 0x1d, 0xf0, - 0x30, 0x02, 0x61, 0xe1, 0x63, 0xf8, 0x8b, 0x28, - 0x28, 0x00, 0xd1, 0x01, 0x21, 0x00, 0x64, 0xe0, - 0x21, 0x10, 0x48, 0x0c, 0x85, 0x01, 0x6b, 0xf9, - 0x85, 0x41, 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, - 0xb0, 0x06, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x07, 0xf7, - 0x2c, 0x00, 0x02, 0x00, 0x2c, 0x00, 0x02, 0x04, - 0x2c, 0x00, 0x02, 0x06, 0x2c, 0x00, 0x02, 0x0a, - 0x2c, 0x00, 0x02, 0x09, 0x2c, 0x00, 0x1f, 0xc0, - 0xb5, 0xf0, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x40, - 0xb0, 0x81, 0x4f, 0x77, 0x63, 0xb8, 0x6a, 0xf9, - 0x1a, 0x40, 0x1d, 0xfc, 0x34, 0x79, 0x63, 0xe0, - 0x28, 0x00, 0xda, 0x02, 0x6a, 0x79, 0x18, 0x40, - 0x63, 0xe0, 0x6b, 0xe0, 0x4b, 0x71, 0x42, 0x98, - 0xdc, 0x03, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x6d, 0xb9, 0x48, 0x6e, 0x1d, 0xc5, - 0x35, 0x59, 0x29, 0x00, 0xd1, 0x16, 0x7e, 0x01, - 0x29, 0x00, 0xd1, 0x13, 0x21, 0x01, 0x75, 0x01, - 0x21, 0x05, 0x84, 0x29, 0x23, 0x0d, 0x06, 0x9b, - 0x6c, 0x79, 0x1a, 0xca, 0x68, 0x52, 0x31, 0x08, - 0x23, 0x05, 0x02, 0x5b, 0x64, 0x79, 0x66, 0xba, - 0x42, 0x99, 0xdb, 0x06, 0x21, 0x01, 0x02, 0xc9, - 0x64, 0x79, 0xe0, 0x02, 0x21, 0x00, 0x75, 0x01, - 0x84, 0x29, 0x8c, 0x29, 0x1c, 0x4a, 0x6a, 0xfb, - 0x1a, 0x9a, 0x07, 0x92, 0x0f, 0x92, 0x18, 0x51, - 0x84, 0x29, 0x7e, 0x01, 0x29, 0x00, 0xd0, 0x03, - 0x21, 0x00, 0x66, 0x39, 0x66, 0x79, 0x76, 0x01, - 0x6c, 0x79, 0x4a, 0x58, 0x69, 0x52, 0x42, 0x91, - 0xd0, 0x26, 0x6e, 0x7a, 0x2a, 0x00, 0xd1, 0x10, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc9, 0x68, 0x09, - 0x66, 0x79, 0x1c, 0x0a, 0x6e, 0x3b, 0x18, 0x59, - 0x66, 0x39, 0x4b, 0x51, 0x42, 0x99, 0xdb, 0x04, - 0x32, 0x01, 0x31, 0x01, 0x40, 0x19, 0x66, 0x39, - 0x66, 0x7a, 0x6e, 0x79, 0x6d, 0xba, 0x1a, 0x89, - 0x65, 0x21, 0x91, 0x00, 0x8c, 0x2b, 0x4e, 0x4b, - 0x1a, 0xf3, 0x42, 0x8b, 0xd3, 0x04, 0x63, 0xe1, - 0x21, 0x00, 0x65, 0xb9, 0x66, 0x79, 0xe0, 0x0a, - 0x18, 0xd1, 0x63, 0xe3, 0x65, 0xb9, 0xe0, 0x06, - 0x8c, 0x29, 0x4a, 0x44, 0x1a, 0x51, 0x63, 0xe1, - 0x6d, 0xba, 0x18, 0x51, 0x65, 0xb9, 0x49, 0x42, - 0x66, 0x61, 0x8c, 0x2a, 0x6b, 0xe1, 0x18, 0x89, - 0x31, 0x03, 0x83, 0xa9, 0x22, 0x00, 0x6e, 0x61, - 0x80, 0x0a, 0x31, 0x02, 0x22, 0xff, 0x32, 0xe1, - 0x66, 0x61, 0x80, 0x0a, 0x31, 0x02, 0x66, 0x61, - 0x8b, 0xaa, 0x80, 0x0a, 0x31, 0x02, 0x66, 0x61, - 0x7d, 0x00, 0x28, 0x00, 0xd0, 0x1d, 0x4a, 0x37, - 0x80, 0x0a, 0x1c, 0x88, 0x66, 0x60, 0x8c, 0x29, - 0x02, 0x09, 0x6e, 0xba, 0x0f, 0x52, 0x23, 0x06, - 0x40, 0x1a, 0x43, 0x11, 0x23, 0x21, 0x43, 0x19, - 0x80, 0x01, 0x30, 0x02, 0x66, 0x60, 0x6e, 0xb9, - 0x0b, 0x89, 0x23, 0x01, 0x43, 0x19, 0x80, 0x01, - 0x30, 0x02, 0x66, 0x60, 0x6e, 0xb9, 0x00, 0x49, - 0x43, 0x19, 0x80, 0x01, 0x30, 0x02, 0x66, 0x60, - 0xe0, 0x0b, 0x20, 0x01, 0x03, 0xc0, 0x80, 0x08, - 0x31, 0x02, 0x66, 0x61, 0x8c, 0x28, 0x02, 0x00, - 0x23, 0xff, 0x43, 0x18, 0x80, 0x08, 0x31, 0x02, - 0x66, 0x61, 0x48, 0x23, 0x6e, 0x61, 0x80, 0x08, - 0x31, 0x02, 0x66, 0x61, 0x80, 0x08, 0x31, 0x02, - 0x22, 0x33, 0x06, 0x52, 0x66, 0x61, 0x00, 0x53, - 0x6d, 0x90, 0x18, 0xc2, 0xb4, 0x04, 0x08, 0x5a, - 0x6d, 0x50, 0x18, 0xc6, 0x8c, 0x28, 0x4b, 0x1b, - 0x18, 0xc1, 0x00, 0x53, 0x6a, 0xf8, 0x18, 0xc0, - 0x6b, 0xe2, 0x1c, 0x33, 0xf0, 0x00, 0xfd, 0xb6, - 0x6a, 0xf8, 0x6b, 0xe1, 0x18, 0x40, 0x22, 0x33, - 0x06, 0x52, 0x62, 0xf8, 0x6d, 0x92, 0xb0, 0x01, - 0x42, 0x90, 0xdb, 0x02, 0x6a, 0x79, 0x1a, 0x40, - 0x62, 0xf8, 0x21, 0xff, 0x31, 0x11, 0x48, 0x10, - 0x85, 0x01, 0x8b, 0xa9, 0x31, 0x06, 0x85, 0x41, - 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x0f, 0xee, - 0x2e, 0x08, 0x04, 0xa8, 0xcc, 0x00, 0x0f, 0x00, - 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xf7, - 0x2c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x2c, 0x00, 0x02, 0x09, - 0x2c, 0x00, 0x1f, 0xc0, 0xb5, 0xb0, 0x1c, 0x07, - 0xb0, 0x83, 0x4d, 0x20, 0x6b, 0x28, 0xf7, 0xff, - 0xfa, 0x53, 0x48, 0x1f, 0x6c, 0xc1, 0x6c, 0x80, - 0x1a, 0x08, 0xd5, 0x03, 0x1f, 0xe9, 0x39, 0x79, - 0x69, 0x09, 0x18, 0x40, 0x6e, 0xa9, 0x29, 0x00, - 0xd0, 0x22, 0x29, 0x10, 0xd0, 0x20, 0x29, 0x20, - 0xd0, 0x24, 0x29, 0x30, 0xd1, 0x04, 0x24, 0x2d, - 0x43, 0x44, 0xd5, 0x00, 0x34, 0x3f, 0x11, 0xa4, - 0x46, 0x6a, 0xa8, 0x01, 0xa9, 0x02, 0xf7, 0xff, - 0xfa, 0x19, 0x1b, 0x38, 0x99, 0x02, 0x1a, 0x08, - 0x22, 0x7d, 0x01, 0x52, 0x42, 0x90, 0xdc, 0x01, - 0x42, 0x90, 0xda, 0x05, 0x1a, 0x09, 0x91, 0x02, - 0x22, 0x00, 0x20, 0x00, 0xf7, 0xff, 0xf9, 0xf4, - 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x01, 0x04, 0x1a, 0x24, 0xd5, 0x00, 0x34, 0x1f, - 0x11, 0x64, 0xe7, 0xe1, 0x21, 0x4b, 0x43, 0x41, - 0x20, 0x93, 0xf0, 0x19, 0xfc, 0x91, 0x1c, 0x04, - 0xe7, 0xda, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xc8, - 0x66, 0x00, 0x00, 0x80, 0xb5, 0x90, 0x1c, 0x07, - 0xb0, 0x83, 0x4c, 0x18, 0x6f, 0x60, 0x30, 0x01, - 0x46, 0x6a, 0x67, 0x60, 0xa8, 0x01, 0xa9, 0x02, - 0xf7, 0xff, 0xf9, 0xe8, 0x4b, 0x14, 0x18, 0xf9, - 0x98, 0x02, 0x1a, 0x40, 0x4b, 0x13, 0x42, 0x98, - 0xdc, 0x04, 0x42, 0xd8, 0xdb, 0x02, 0x69, 0xe0, - 0x28, 0x01, 0xd1, 0x07, 0x91, 0x02, 0x20, 0x00, - 0x90, 0x01, 0x22, 0x00, 0xf7, 0xff, 0xf9, 0xc0, - 0x20, 0x01, 0x61, 0xe0, 0x69, 0xe0, 0x28, 0x00, - 0xd0, 0x0b, 0x6b, 0x20, 0xf7, 0xff, 0xf9, 0xec, - 0x6f, 0x60, 0x67, 0xa0, 0x48, 0x08, 0x60, 0x07, - 0x6f, 0xe0, 0x30, 0x01, 0x67, 0xe0, 0x20, 0x00, - 0x61, 0xe0, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xc8, - 0xff, 0xff, 0xec, 0x78, 0x00, 0x02, 0xbf, 0x20, - 0x2e, 0x08, 0x05, 0x48, 0xb4, 0xf0, 0x1c, 0x1c, - 0x23, 0x00, 0x9f, 0x04, 0x60, 0x3b, 0x79, 0x85, - 0x23, 0xc0, 0x40, 0x1d, 0x4b, 0x33, 0x2d, 0x80, - 0xd1, 0x16, 0x25, 0x02, 0x60, 0x9d, 0x79, 0xc5, - 0x0a, 0x2b, 0xd3, 0x06, 0x7a, 0x45, 0x23, 0xe0, - 0x40, 0x2b, 0x2b, 0x20, 0xd1, 0x01, 0x23, 0x09, - 0x60, 0x3b, 0x7a, 0x03, 0x33, 0x09, 0x60, 0x13, - 0x79, 0x02, 0x02, 0x12, 0x79, 0x45, 0x43, 0x2a, - 0x32, 0x06, 0x1a, 0xd2, 0x60, 0x22, 0xe0, 0x25, - 0x25, 0x06, 0x26, 0x01, 0x60, 0x9e, 0x79, 0x83, - 0x2b, 0xff, 0xd1, 0x03, 0x35, 0x01, 0x5d, 0x43, - 0x2b, 0xff, 0xd0, 0xfb, 0x5d, 0x46, 0x23, 0xc0, - 0x40, 0x33, 0x2b, 0x40, 0xd1, 0x00, 0x35, 0x02, - 0x5d, 0x46, 0x09, 0x33, 0x07, 0x9b, 0xd0, 0x08, - 0x60, 0x3d, 0x5d, 0x46, 0x09, 0x73, 0xd3, 0x02, - 0x1d, 0xeb, 0x33, 0x03, 0xe0, 0x02, 0x1d, 0x6b, - 0xe0, 0x00, 0x1c, 0x6b, 0x60, 0x13, 0x79, 0x02, - 0x02, 0x12, 0x79, 0x45, 0x43, 0x2a, 0x32, 0x06, - 0x1a, 0xd2, 0x60, 0x22, 0x68, 0x3a, 0x2a, 0x00, - 0xd0, 0x20, 0x5c, 0x82, 0x23, 0x0e, 0x40, 0x1a, - 0x07, 0x52, 0x60, 0x0a, 0x68, 0x3b, 0x18, 0xc3, - 0x78, 0x5b, 0x05, 0x9b, 0x43, 0x1a, 0x60, 0x0a, - 0x68, 0x3b, 0x18, 0xc3, 0x78, 0x9c, 0x23, 0xfe, - 0x40, 0x23, 0x03, 0x9b, 0x43, 0x1a, 0x60, 0x0a, - 0x68, 0x3b, 0x18, 0xc3, 0x78, 0xdb, 0x01, 0xdb, - 0x43, 0x1a, 0x60, 0x0a, 0x68, 0x3b, 0x18, 0xc0, - 0x79, 0x00, 0x23, 0xfe, 0x40, 0x18, 0x08, 0x40, - 0x43, 0x10, 0x60, 0x08, 0x20, 0x00, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0xb0, 0xb0, 0x83, 0x48, 0x3f, 0x49, 0x40, - 0x8d, 0xc9, 0x4c, 0x40, 0x63, 0xe1, 0x29, 0x06, - 0xda, 0x03, 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x01, 0x09, 0x49, 0x01, 0x49, - 0x23, 0xff, 0x33, 0xe1, 0x42, 0x99, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x46, 0x6a, 0xb4, 0x04, 0xaa, 0x03, 0xab, 0x02, - 0x49, 0x35, 0xf7, 0xff, 0xff, 0x6f, 0xb0, 0x01, - 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, 0x99, 0x01, - 0x18, 0x40, 0x6b, 0xe1, 0x42, 0x88, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x00, 0x4f, 0x2c, 0x28, 0x00, 0xd0, 0x25, - 0x6e, 0x38, 0x6d, 0xb9, 0x18, 0x40, 0x23, 0x01, - 0x06, 0x1b, 0x66, 0x38, 0x42, 0x98, 0xdb, 0x04, - 0x43, 0xdb, 0x18, 0xc0, 0x66, 0x38, 0x1e, 0x48, - 0x65, 0xb8, 0x23, 0x0d, 0x06, 0x9b, 0x6d, 0xb8, - 0x6c, 0xb9, 0x1a, 0xc9, 0x60, 0x08, 0x6e, 0xe0, - 0x6c, 0xb9, 0x1a, 0xc9, 0x60, 0x48, 0x20, 0x00, - 0x65, 0xb8, 0x6c, 0xb8, 0x30, 0x08, 0x23, 0x05, - 0x02, 0x5b, 0x64, 0xb8, 0x42, 0x98, 0xd1, 0x02, - 0x20, 0x01, 0x02, 0xc0, 0x64, 0xb8, 0x6c, 0xb8, - 0x49, 0x19, 0x61, 0x48, 0x24, 0x33, 0x06, 0x64, - 0x00, 0x63, 0x6d, 0xa0, 0x18, 0xc2, 0xb4, 0x04, - 0x6d, 0x60, 0x18, 0xc5, 0x6e, 0x60, 0x18, 0xc1, - 0x98, 0x03, 0x4b, 0x0e, 0x18, 0xc0, 0x9a, 0x02, - 0x1c, 0x2b, 0xf0, 0x00, 0xfc, 0x53, 0xb0, 0x01, - 0x6d, 0xb8, 0x99, 0x01, 0x18, 0x40, 0x65, 0xb8, - 0x48, 0x0e, 0x68, 0x02, 0x18, 0x51, 0x60, 0x01, - 0x6e, 0x60, 0x6d, 0xa1, 0x42, 0x88, 0xdb, 0x04, - 0x48, 0x0a, 0x68, 0x01, 0x6a, 0x7a, 0x1a, 0x89, - 0x60, 0x01, 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, - 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x04, 0xc8, - 0x2e, 0x08, 0x05, 0x34, 0x2e, 0x08, 0x04, 0x48, - 0xcc, 0x00, 0x0f, 0x00, 0x66, 0x00, 0x00, 0x64, - 0xb5, 0xf0, 0xb0, 0x83, 0x4e, 0x65, 0x25, 0x00, - 0x4f, 0x65, 0x6a, 0xf8, 0xf7, 0xff, 0xf8, 0xcc, - 0x48, 0x64, 0x8d, 0xc0, 0x63, 0xf8, 0x28, 0x0a, - 0xda, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x34, 0x09, 0x60, 0x01, 0x40, - 0x23, 0xff, 0x33, 0xc1, 0x42, 0x98, 0xd0, 0x07, - 0x23, 0xff, 0x33, 0xbe, 0x42, 0x9c, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x46, 0x6a, 0xb4, 0x04, 0xaa, 0x03, 0xab, 0x02, - 0x49, 0x57, 0x1c, 0x30, 0xf7, 0xff, 0xfe, 0xd6, - 0xb0, 0x01, 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, - 0x99, 0x01, 0x18, 0x41, 0x6b, 0xfa, 0x42, 0x91, - 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x01, 0x1c, 0x22, 0x4c, 0x4d, - 0x23, 0xff, 0x33, 0xbe, 0x42, 0x9a, 0xd1, 0x3c, - 0x5c, 0x30, 0x28, 0xa0, 0xd0, 0x03, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xe0, - 0x28, 0x00, 0xd1, 0x1b, 0x20, 0x02, 0x63, 0x78, - 0x60, 0xe1, 0x21, 0x00, 0x20, 0x00, 0xf0, 0x0f, - 0xf9, 0x4f, 0x20, 0x00, 0xf7, 0xfb, 0xfe, 0xb8, - 0x98, 0x02, 0x4b, 0x3c, 0x18, 0xc0, 0x79, 0x40, - 0x23, 0x30, 0x40, 0x18, 0x66, 0xb8, 0xd0, 0x16, - 0x28, 0x10, 0xd0, 0x14, 0x28, 0x20, 0xd0, 0x17, - 0x28, 0x30, 0xd1, 0x03, 0x21, 0x20, 0x20, 0x1e, - 0xf0, 0x0f, 0xfc, 0x69, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x2b, 0x6d, 0x60, 0x28, 0x05, 0xd1, 0x28, - 0x68, 0xf8, 0x28, 0x00, 0xd1, 0x25, 0x6f, 0x38, - 0xf7, 0xff, 0xfe, 0x08, 0xe0, 0x21, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x0f, 0xfc, 0x58, 0xe7, 0xed, - 0x21, 0x08, 0x20, 0x1e, 0xf0, 0x0f, 0xfc, 0x53, - 0xe7, 0xe8, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x08, - 0x20, 0x00, 0x63, 0x79, 0x21, 0x00, 0x60, 0xe0, - 0xf0, 0x0f, 0xf9, 0x1a, 0x20, 0x02, 0xf0, 0x0f, - 0xf9, 0x6d, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x08, - 0x6d, 0x60, 0x28, 0x05, 0xd1, 0x05, 0x68, 0xf8, - 0x28, 0x00, 0xd1, 0x02, 0x6f, 0x38, 0xf7, 0xff, - 0xfe, 0x2d, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x01, - 0x98, 0x02, 0x1d, 0xc5, 0x6b, 0xf8, 0x1b, 0x42, - 0x63, 0xfa, 0x7e, 0x39, 0x69, 0x78, 0x18, 0x41, - 0x4b, 0x16, 0x18, 0xe8, 0xf7, 0xfb, 0xfb, 0xfc, - 0x7e, 0x38, 0x6b, 0xf9, 0x18, 0x40, 0x07, 0x81, - 0x0f, 0x89, 0x76, 0x39, 0x1a, 0x44, 0x20, 0x01, - 0x06, 0x00, 0x49, 0x15, 0x60, 0x08, 0xf0, 0x1e, - 0xfe, 0x53, 0x4b, 0x14, 0x40, 0x18, 0xf0, 0x1e, - 0xfe, 0x53, 0x22, 0x04, 0x49, 0x10, 0xb4, 0x06, - 0x23, 0x12, 0x21, 0x1e, 0x69, 0x78, 0x1c, 0x22, - 0xf0, 0x13, 0xff, 0x28, 0xb0, 0x02, 0xf0, 0x1e, - 0xfe, 0x43, 0x23, 0x01, 0x04, 0x9b, 0x43, 0x18, - 0xf0, 0x1e, 0xfe, 0x42, 0x69, 0x78, 0x59, 0x01, - 0x60, 0x01, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x05, 0x38, 0x2e, 0x08, 0x04, 0x48, - 0x9e, 0x00, 0x08, 0x00, 0xff, 0xfb, 0xff, 0xff, - 0x20, 0x33, 0x06, 0x40, 0x6e, 0x81, 0x6e, 0x40, - 0x1a, 0x09, 0x48, 0x0f, 0x63, 0xc1, 0x29, 0x00, - 0xdc, 0x04, 0x1f, 0xc2, 0x3a, 0x79, 0x6a, 0x52, - 0x18, 0x89, 0x63, 0xc1, 0x6b, 0xc1, 0x08, 0x89, - 0x00, 0x89, 0x23, 0x01, 0x02, 0xdb, 0x63, 0xc1, - 0x42, 0x99, 0xdd, 0x0b, 0x4a, 0x07, 0x42, 0x91, - 0xdd, 0x00, 0x63, 0xc2, 0x4a, 0x06, 0x49, 0x07, - 0x85, 0x8a, 0x6b, 0xc0, 0x85, 0xc8, 0x20, 0x09, - 0x02, 0x40, 0x86, 0xc8, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0x02, 0x06, 0x2c, 0x00, 0x1f, 0xc0, - 0x48, 0x0f, 0x78, 0x01, 0x29, 0x00, 0xd0, 0x1a, - 0x49, 0x0e, 0x6c, 0x8a, 0x6c, 0xc9, 0x1a, 0x51, - 0x63, 0xc1, 0x1c, 0x0a, 0x29, 0x00, 0xdc, 0x04, - 0x1f, 0xc1, 0x39, 0x79, 0x69, 0x09, 0x18, 0x51, - 0x63, 0xc1, 0x23, 0x01, 0x03, 0x1b, 0x6b, 0xc1, - 0x42, 0x99, 0xdb, 0x08, 0x22, 0xff, 0x32, 0x07, - 0x49, 0x05, 0x85, 0x8a, 0x6b, 0xc0, 0x85, 0xc8, - 0x20, 0x09, 0x02, 0x40, 0x86, 0xc8, 0x47, 0x70, - 0x2e, 0x08, 0x04, 0xc8, 0x66, 0x00, 0x00, 0x80, - 0x2c, 0x00, 0x1f, 0xc0, 0xb4, 0x80, 0x20, 0x00, - 0x49, 0x1e, 0x6c, 0x8a, 0x6c, 0xc9, 0x1a, 0x52, - 0x49, 0x1d, 0x2a, 0x00, 0xdc, 0x01, 0x69, 0x0b, - 0x18, 0xd2, 0x23, 0x01, 0x02, 0xdb, 0x42, 0x9a, - 0xdd, 0x00, 0x08, 0xd8, 0x22, 0x33, 0x06, 0x52, - 0x6e, 0x93, 0x6e, 0x52, 0x1a, 0x9a, 0x2a, 0x00, - 0xdc, 0x01, 0x6a, 0x4b, 0x18, 0xd2, 0x08, 0x92, - 0x00, 0x92, 0x4b, 0x14, 0x68, 0xdb, 0x2b, 0x00, - 0xd0, 0x06, 0x23, 0x01, 0x03, 0x1b, 0x6a, 0x4f, - 0x18, 0xfb, 0x6a, 0x89, 0x1a, 0x59, 0xe0, 0x01, - 0x21, 0x01, 0x03, 0x09, 0x42, 0x8a, 0xdd, 0x04, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x01, 0x02, 0x5b, - 0x43, 0x18, 0x28, 0x00, 0xd0, 0x0b, 0x4b, 0x0a, - 0x42, 0x9a, 0xdd, 0x00, 0x1c, 0x1a, 0x21, 0x06, - 0x43, 0x01, 0x48, 0x08, 0x85, 0x81, 0x85, 0xc2, - 0x21, 0x09, 0x02, 0x49, 0x86, 0xc1, 0xbc, 0x80, - 0x47, 0x70, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0x00, 0x00, 0xff, 0xff, 0x2c, 0x00, 0x1f, 0xc0, - 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x4f, 0x13, - 0x6d, 0x39, 0x29, 0x00, 0xd1, 0x10, 0x24, 0x01, - 0x28, 0x01, 0xd0, 0x10, 0x28, 0x04, 0xd0, 0x15, - 0x28, 0x05, 0xd1, 0x09, 0xf7, 0xff, 0xf8, 0x52, - 0xf7, 0xff, 0xf8, 0x06, 0x20, 0x00, 0x66, 0xf8, - 0x67, 0x38, 0x20, 0x05, 0x65, 0x78, 0x65, 0x3c, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, - 0xff, 0xfb, 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x3e, - 0x20, 0x04, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x4f, 0x23, - 0x6d, 0x39, 0x29, 0x00, 0xd0, 0x0e, 0x29, 0x02, - 0xd1, 0x09, 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x34, - 0x28, 0x04, 0xd0, 0x27, 0x28, 0x05, 0xd1, 0x02, - 0x20, 0xff, 0xf7, 0xff, 0xf8, 0xd1, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x24, 0x02, 0x28, 0x01, - 0xd0, 0x0c, 0x28, 0x04, 0xd0, 0x12, 0x28, 0x05, - 0xd1, 0xf5, 0x20, 0x00, 0xf7, 0xff, 0xf8, 0xc4, - 0x20, 0x05, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x42, - 0x20, 0x01, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x7a, - 0x20, 0x04, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x21, 0x00, 0x20, 0x0e, - 0xf0, 0x11, 0xfb, 0xb2, 0x21, 0x00, 0x20, 0x0d, - 0xf0, 0x11, 0xfb, 0xae, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x02, 0xf0, 0x0f, 0xf8, 0x0e, - 0x20, 0xff, 0x49, 0x03, 0x70, 0x08, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x48, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0xf0, 0x4f, 0x2b, - 0x24, 0x00, 0x6d, 0x38, 0x28, 0x01, 0xd0, 0x1e, - 0x28, 0x02, 0xd1, 0x19, 0x26, 0x03, 0x6d, 0x78, - 0x1d, 0xfd, 0x35, 0x79, 0x28, 0x01, 0xd0, 0x34, - 0x28, 0x04, 0xd0, 0x3f, 0x28, 0x05, 0xd1, 0x0f, - 0x20, 0x02, 0x63, 0x6c, 0xf0, 0x0e, 0xff, 0xee, - 0x20, 0x00, 0xf7, 0xfb, 0xfd, 0x01, 0xf7, 0xff, - 0xf8, 0x2b, 0x65, 0x3e, 0x20, 0x00, 0x65, 0x78, - 0xf7, 0xfe, 0xfe, 0xc2, 0x20, 0x01, 0x61, 0xe8, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x6d, 0x78, - 0x28, 0x01, 0xd0, 0x0c, 0x28, 0x04, 0xd0, 0x11, - 0x28, 0x05, 0xd1, 0xf5, 0xf7, 0xfe, 0xff, 0x8c, - 0xf7, 0xfe, 0xff, 0xe2, 0x65, 0x3c, 0x65, 0x7c, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, - 0xff, 0x83, 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, 0xff, 0xd4, - 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x63, 0x6c, 0x20, 0x02, 0x60, 0xfc, - 0xf0, 0x0e, 0xff, 0xbc, 0x20, 0x00, 0xf7, 0xfb, - 0xfc, 0xcf, 0x65, 0x7c, 0x65, 0x3e, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, 0xff, 0xf4, - 0x65, 0x7c, 0x65, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0x90, 0x4c, 0x1b, 0x68, 0xe0, 0x28, 0x03, - 0xd0, 0x1f, 0x1f, 0xe7, 0x3f, 0x79, 0x6d, 0x38, - 0x28, 0x02, 0xd1, 0x1a, 0x6d, 0x78, 0x28, 0x01, - 0xd0, 0x1a, 0x28, 0x04, 0xd0, 0x20, 0x28, 0x05, - 0xd1, 0x13, 0x4a, 0x14, 0x49, 0x14, 0x48, 0x15, - 0xf7, 0xfe, 0xfe, 0x54, 0x21, 0x00, 0x20, 0x0e, - 0xf0, 0x11, 0xfb, 0x2a, 0x20, 0x01, 0xf0, 0x0e, - 0xff, 0x8d, 0x20, 0x03, 0x60, 0xe0, 0x68, 0xf8, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x01, 0xf0, 0x0e, - 0xff, 0x85, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0xf0, 0x0e, 0xff, 0x7f, 0x20, 0x00, - 0x70, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x20, 0x0b, 0xf0, 0x11, 0xfb, 0x10, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x2e, 0x08, 0x05, 0x54, - 0x2e, 0x08, 0x05, 0x4c, 0x2e, 0x08, 0x05, 0x50, - 0xb5, 0xf0, 0x4c, 0x21, 0x6d, 0x20, 0x28, 0x02, - 0xd1, 0x24, 0x26, 0xff, 0x6d, 0x60, 0x1d, 0xe7, - 0x37, 0x79, 0x28, 0x01, 0xd0, 0x1d, 0x28, 0x04, - 0xd0, 0x1f, 0x28, 0x05, 0xd1, 0x1a, 0x20, 0x01, - 0xf0, 0x0e, 0xff, 0x58, 0x25, 0x00, 0x68, 0xe0, - 0x28, 0x00, 0xd0, 0x04, 0x21, 0x00, 0x20, 0x00, - 0xf0, 0x0e, 0xfe, 0xfa, 0x60, 0xe5, 0x70, 0x3e, - 0x68, 0xf8, 0x28, 0x03, 0xd1, 0x14, 0x48, 0x13, - 0x22, 0x00, 0x68, 0x41, 0x20, 0x00, 0xf7, 0xfe, - 0xfd, 0xef, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0x20, - 0xe0, 0x0f, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, - 0xfa, 0xd3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0x61, 0xf8, 0x6b, 0x38, 0xf7, 0xfe, - 0xfe, 0x0f, 0x20, 0x02, 0x60, 0xfd, 0xf0, 0x0e, - 0xff, 0x2d, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, - 0xfa, 0xc3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x05, 0x48, - 0xb5, 0xb0, 0x04, 0x07, 0x0c, 0x3f, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x2f, 0x3f, 0xdd, 0x00, - 0x27, 0x3f, 0x48, 0x17, 0x6d, 0x01, 0x29, 0x02, - 0xd1, 0x13, 0x6d, 0x40, 0x25, 0x02, 0x4c, 0x15, - 0x28, 0x04, 0xd0, 0x11, 0x28, 0x05, 0xd1, 0x0c, - 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x11, 0xfa, 0xa4, - 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, 0xfa, 0xa0, - 0x20, 0x22, 0x1c, 0x39, 0xf0, 0x11, 0xfa, 0x9c, - 0x60, 0xe5, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x11, 0xfa, 0x94, - 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, 0xfa, 0x90, - 0x20, 0x22, 0x1c, 0x39, 0xf0, 0x11, 0xfa, 0x8c, - 0x20, 0x00, 0xf7, 0xfe, 0xfd, 0xcd, 0x60, 0xe5, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0xb5, 0x00, 0x48, 0x0b, 0x6d, 0x01, 0x29, 0x02, - 0xd1, 0x10, 0x6d, 0x40, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x0b, 0x21, 0x00, 0x20, 0x16, - 0xf0, 0x11, 0xfa, 0x72, 0x20, 0x00, 0xf7, 0xfe, - 0xfd, 0xb3, 0x21, 0x00, 0x48, 0x03, 0x70, 0x01, - 0x21, 0x01, 0x60, 0xc1, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0xb5, 0x00, 0x48, 0x0b, 0x6d, 0x01, 0x29, 0x02, - 0xd1, 0x10, 0x6d, 0x40, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x0b, 0x21, 0x00, 0x20, 0x1a, - 0xf0, 0x11, 0xfa, 0x56, 0x20, 0x00, 0xf7, 0xfe, - 0xfd, 0x97, 0x21, 0x00, 0x48, 0x03, 0x70, 0x01, - 0x21, 0x01, 0x60, 0xc1, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0x48, 0x03, 0x6d, 0x00, 0x28, 0x00, 0xd1, 0x00, - 0x47, 0x70, 0x20, 0xff, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0x4d, 0x52, 0x6d, 0x29, 0x48, 0x52, - 0x26, 0x00, 0x29, 0x01, 0xd0, 0x4c, 0x29, 0x02, - 0xd1, 0x6e, 0x6d, 0x69, 0x29, 0x01, 0xd0, 0x20, - 0x29, 0x04, 0xd0, 0x2e, 0x29, 0x05, 0xd1, 0x3e, - 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x08, 0xd5, 0x01, - 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, - 0x69, 0x28, 0xf0, 0x18, 0xff, 0xdd, 0x70, 0x20, - 0x20, 0x33, 0x06, 0x40, 0x6e, 0x41, 0x6e, 0x80, - 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, 0x18, 0x40, - 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, 0xf0, 0x18, - 0xff, 0xcf, 0x70, 0x38, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x08, - 0xd5, 0x01, 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, - 0x43, 0x41, 0x69, 0x28, 0xf0, 0x18, 0xff, 0xc0, - 0x70, 0x20, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x41, - 0x6e, 0x80, 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, - 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, - 0xf0, 0x18, 0xff, 0xae, 0x70, 0x38, 0x70, 0x26, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x70, 0x26, - 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x6d, 0x69, 0x29, 0x01, 0xd0, 0x21, 0x29, 0x04, - 0xd0, 0x2f, 0x29, 0x05, 0xd1, 0x3f, 0x69, 0x69, - 0x6c, 0xc0, 0x1a, 0x40, 0xd5, 0x01, 0x69, 0x29, - 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x69, 0x28, - 0xf0, 0x18, 0xff, 0x92, 0x70, 0x20, 0x21, 0x33, - 0x06, 0x49, 0x6a, 0xe8, 0x6e, 0x49, 0x1a, 0x08, - 0xd5, 0x01, 0x6a, 0x69, 0x18, 0x40, 0x21, 0x64, - 0x43, 0x41, 0x6a, 0x68, 0xf0, 0x18, 0xff, 0x84, - 0x70, 0x38, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xe0, 0x26, 0x69, 0x69, 0x6c, 0xc0, 0x1a, 0x40, - 0xd5, 0x01, 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, - 0x43, 0x41, 0x69, 0x28, 0xf0, 0x18, 0xff, 0x74, - 0x70, 0x20, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x33, 0x06, 0x49, 0x6a, 0xe8, - 0x6e, 0x49, 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, - 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, - 0xf0, 0x18, 0xff, 0x62, 0x70, 0x38, 0x70, 0x26, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x70, 0x26, - 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x70, 0x26, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0x66, 0x00, 0x00, 0x80, 0xb5, 0xf0, 0x1c, 0x17, - 0x9e, 0x05, 0x1a, 0xf2, 0x1c, 0x0d, 0x21, 0x00, - 0x1c, 0x1c, 0x42, 0xba, 0xda, 0x03, 0x1c, 0x08, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x42, 0xa0, - 0xd3, 0x01, 0x42, 0xb0, 0xd9, 0x03, 0x1c, 0x08, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x19, 0xc1, - 0x42, 0xb1, 0xd9, 0x0c, 0x1a, 0x32, 0x4e, 0x0a, - 0x64, 0x32, 0x1c, 0x29, 0xf7, 0xfb, 0xf8, 0x84, - 0x6c, 0x30, 0x1a, 0x3a, 0x18, 0x29, 0x1c, 0x20, - 0xf7, 0xfb, 0xf8, 0x7e, 0xe0, 0x03, 0x1c, 0x29, - 0x1c, 0x3a, 0xf7, 0xfb, 0xf8, 0x79, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0xf0, 0x1c, 0x17, - 0x9e, 0x05, 0x1a, 0xf2, 0x1c, 0x05, 0x20, 0x00, - 0x1c, 0x1c, 0x42, 0xba, 0xdb, 0x18, 0x42, 0xa1, - 0xd3, 0x16, 0x42, 0xb1, 0xd2, 0x14, 0x19, 0xc8, - 0x42, 0xb0, 0xd9, 0x0c, 0x1a, 0x72, 0x4e, 0x0a, - 0x64, 0x32, 0x1c, 0x28, 0xf7, 0xfb, 0xf8, 0x5c, - 0x6c, 0x30, 0x1a, 0x3a, 0x18, 0x28, 0x1c, 0x21, - 0xf7, 0xfb, 0xf8, 0x56, 0xe0, 0x03, 0x1c, 0x28, - 0x1c, 0x3a, 0xf7, 0xfb, 0xf8, 0x51, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x47, 0x70, 0xb5, 0x00, - 0xb0, 0x82, 0x46, 0x6a, 0x49, 0x06, 0xa8, 0x01, - 0xf7, 0xfe, 0xfc, 0x58, 0x21, 0x00, 0x20, 0x0b, - 0xf0, 0x11, 0xf9, 0x2e, 0x20, 0x03, 0x49, 0x03, - 0x61, 0x88, 0xb0, 0x02, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0x64, 0x2e, 0x08, 0x05, 0x48, - 0xb5, 0x80, 0x4f, 0x0b, 0x22, 0x00, 0x20, 0x00, - 0x69, 0xf9, 0xf7, 0xfe, 0xfc, 0x2d, 0x21, 0x00, - 0x20, 0x0d, 0xf0, 0x11, 0xf9, 0x19, 0x21, 0x01, - 0x1f, 0xf8, 0x38, 0x79, 0x61, 0xc1, 0x6b, 0x00, - 0xf7, 0xfe, 0xfc, 0x56, 0x20, 0x00, 0x61, 0xb8, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0x48, 0xb5, 0x80, 0x4f, 0x06, - 0x68, 0x38, 0x1d, 0xc1, 0x31, 0xb5, 0x20, 0x2f, - 0x02, 0x80, 0xf0, 0x18, 0xfe, 0xbd, 0x60, 0x39, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x02, 0xcb, 0x10, 0x48, 0x05, 0x8f, 0xc1, - 0x29, 0x00, 0xd0, 0x05, 0x21, 0x00, 0x87, 0xc1, - 0x48, 0x03, 0x69, 0x01, 0x31, 0x01, 0x61, 0x01, - 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x05, 0x68, 0x48, 0x03, 0x21, 0x00, - 0x60, 0x01, 0x48, 0x03, 0x69, 0x41, 0x31, 0x01, - 0x61, 0x41, 0x47, 0x70, 0x2e, 0x08, 0x48, 0x00, - 0x2e, 0x08, 0x05, 0x68, 0xb5, 0x00, 0xb0, 0x88, - 0x46, 0x68, 0xf0, 0x13, 0xfc, 0xbf, 0x48, 0x07, - 0x69, 0x81, 0x31, 0x01, 0x23, 0x01, 0x22, 0x06, - 0x61, 0x81, 0x21, 0x47, 0x02, 0x49, 0x05, 0x48, - 0xf0, 0x13, 0xfb, 0xac, 0xb0, 0x08, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0x68, - 0xb5, 0x90, 0x1c, 0x07, 0x20, 0xff, 0x30, 0xa5, - 0xb0, 0x85, 0x90, 0x00, 0x20, 0x01, 0x02, 0x40, - 0x90, 0x02, 0x48, 0x12, 0x90, 0x04, 0x20, 0x0e, - 0xab, 0x03, 0x80, 0x18, 0x46, 0x68, 0xf0, 0x13, - 0xfc, 0xd1, 0x2f, 0x00, 0xd0, 0x16, 0x20, 0x33, - 0x06, 0x40, 0x6d, 0x40, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc7, 0x98, 0x02, 0x1e, 0x79, 0xf0, 0x00, - 0xfb, 0x31, 0x4c, 0x09, 0x68, 0x20, 0x28, 0x00, - 0xd1, 0x04, 0x20, 0xa5, 0x01, 0xc0, 0xf0, 0x00, - 0xfb, 0x37, 0x60, 0x20, 0x98, 0x02, 0x1a, 0x38, - 0x49, 0x04, 0x60, 0x88, 0xb0, 0x05, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x1c, 0x00, 0x00, - 0x2e, 0x08, 0x00, 0x00, 0x2e, 0x08, 0x05, 0x68, - 0xb5, 0x00, 0x22, 0x01, 0x21, 0x01, 0x20, 0x00, - 0xf0, 0x0f, 0xf9, 0x2e, 0x48, 0x04, 0x68, 0x00, - 0x78, 0x01, 0x23, 0x06, 0x43, 0x19, 0x70, 0x01, - 0xf0, 0x00, 0xf9, 0xea, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0xc4, 0xb5, 0xf0, 0x48, 0x55, - 0x4e, 0x55, 0x80, 0x30, 0x27, 0x00, 0x4c, 0x55, - 0x86, 0xe7, 0x86, 0xa7, 0x48, 0x54, 0x60, 0x07, - 0xf0, 0x0b, 0xf8, 0x2e, 0x48, 0x53, 0xf0, 0x14, - 0xf8, 0xdb, 0xf7, 0xfa, 0xff, 0x29, 0x21, 0xff, - 0x48, 0x51, 0x60, 0x01, 0x68, 0x01, 0x29, 0x00, - 0xd0, 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x01, - 0x4a, 0x4e, 0x60, 0xd1, 0x60, 0x07, 0xf7, 0xfc, - 0xfb, 0x17, 0x20, 0x01, 0xf7, 0xff, 0xff, 0x98, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x0e, 0xfc, 0x6c, - 0xf0, 0x01, 0xfa, 0xbc, 0x48, 0x48, 0x60, 0x07, - 0x25, 0x02, 0x48, 0x48, 0x60, 0x05, 0x20, 0x03, - 0x49, 0x47, 0x60, 0x08, 0x49, 0x47, 0x60, 0x08, - 0x49, 0x47, 0x60, 0x0d, 0x49, 0x47, 0x60, 0x08, - 0x48, 0x47, 0x60, 0x07, 0x48, 0x47, 0x65, 0x87, - 0xf0, 0x00, 0xf9, 0x8a, 0xf0, 0x14, 0xf9, 0x48, - 0x20, 0x00, 0xf0, 0x11, 0xfe, 0x85, 0x28, 0x00, - 0xd1, 0x64, 0x48, 0x43, 0xf0, 0x0e, 0xfa, 0xbe, - 0x20, 0x00, 0xf0, 0x0e, 0xfb, 0x2f, 0x87, 0xe7, - 0x87, 0xa7, 0x22, 0x01, 0xb4, 0x04, 0x22, 0x03, - 0x21, 0x01, 0x20, 0x00, 0x1c, 0x2b, 0xf0, 0x11, - 0xfb, 0x2b, 0x20, 0x02, 0xb0, 0x01, 0xf7, 0xfc, - 0xfc, 0x73, 0xf7, 0xff, 0xff, 0x95, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xfd, 0xfd, 0xc7, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xfd, 0xfd, 0xdb, 0xf0, 0x09, - 0xff, 0x4f, 0xf0, 0x09, 0xff, 0x8d, 0xf7, 0xfb, - 0xf9, 0xbf, 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfd, - 0xf8, 0x11, 0xf7, 0xfd, 0xfb, 0xbf, 0xf7, 0xfb, - 0xfd, 0x0d, 0x03, 0xe8, 0xf0, 0x00, 0xfa, 0x5c, - 0xf0, 0x05, 0xfc, 0x30, 0x49, 0x2b, 0x70, 0x08, - 0x05, 0xa8, 0xf0, 0x1e, 0xf9, 0x78, 0x49, 0x2a, - 0x20, 0x17, 0xf0, 0x1e, 0xf9, 0x81, 0x49, 0x29, - 0x20, 0x08, 0xf0, 0x1e, 0xf9, 0x7d, 0xf0, 0x1e, - 0xf9, 0x73, 0x4b, 0x27, 0x40, 0x18, 0xf0, 0x1e, - 0xf9, 0x73, 0x01, 0xe8, 0xf0, 0x1e, 0xf9, 0x67, - 0x48, 0x24, 0x23, 0x01, 0x22, 0x08, 0x21, 0x81, - 0x01, 0x09, 0x60, 0x07, 0xf0, 0x11, 0xfa, 0x38, - 0xf0, 0x01, 0xfa, 0xd6, 0x49, 0x20, 0x20, 0x04, - 0xf0, 0x1e, 0xf9, 0x66, 0xf0, 0x1e, 0xf9, 0x5c, - 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x1e, - 0xf9, 0x5b, 0x20, 0x10, 0xf0, 0x1e, 0xf9, 0x4f, - 0x87, 0x67, 0x21, 0x00, 0x1c, 0x30, 0xf7, 0xfd, - 0xfd, 0xa9, 0x1c, 0x38, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x04, 0x98, 0x07, 0x77, 0x77, 0x20, - 0x72, 0x00, 0x02, 0x00, 0x2e, 0x08, 0x05, 0x68, - 0x6e, 0x00, 0x10, 0x00, 0x6e, 0x00, 0x11, 0x00, - 0x6e, 0x00, 0x14, 0x00, 0x6e, 0x00, 0x15, 0x00, - 0x6e, 0x00, 0x16, 0x00, 0x6e, 0x00, 0x17, 0x00, - 0x6e, 0x00, 0x18, 0x00, 0xcc, 0x00, 0x0f, 0x80, - 0x00, 0x80, 0x10, 0x80, 0x2e, 0x08, 0x1a, 0x94, - 0x2e, 0x00, 0x54, 0xa1, 0x2e, 0x00, 0x54, 0xc1, - 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x08, 0x48, 0x00, - 0x2e, 0x00, 0x54, 0x81, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf9, 0x55, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x4b, 0x0c, 0x18, 0xff, 0x21, 0x03, 0x48, 0x0c, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x01, 0x1c, 0x21, 0xf0, 0x1e, 0xf9, 0x0c, - 0xf0, 0x1e, 0xf9, 0x02, 0x23, 0x02, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf9, 0x01, 0xf0, 0x1e, - 0xf9, 0x6d, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x00, 0x00, 0x9e, 0x34, - 0x6e, 0x00, 0x03, 0x00, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf9, 0x29, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x21, 0x03, 0x37, 0xff, 0x37, 0x96, 0x48, 0x0b, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x01, 0x1c, 0x21, 0xf0, 0x1e, 0xf8, 0xe0, - 0xf0, 0x1e, 0xf8, 0xd6, 0x23, 0x02, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf8, 0xd5, 0xf0, 0x1e, - 0xf9, 0x41, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x6e, 0x00, 0x03, 0x00, - 0xb5, 0x00, 0xf0, 0x1e, 0xf9, 0x01, 0x20, 0x03, - 0x49, 0x05, 0x60, 0x08, 0xf0, 0x1e, 0xf8, 0xc0, - 0x23, 0x02, 0x43, 0x18, 0xf0, 0x1e, 0xf8, 0xc0, - 0xf0, 0x1e, 0xf9, 0x2c, 0xbc, 0x08, 0x47, 0x18, - 0x6e, 0x00, 0x03, 0x00, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf8, 0xed, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x4b, 0x0c, 0x18, 0xff, 0x21, 0x03, 0x48, 0x0c, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x05, 0x1c, 0x21, 0xf0, 0x1e, 0xf8, 0xa4, - 0xf0, 0x1e, 0xf8, 0x9a, 0x23, 0x20, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf8, 0x99, 0xf0, 0x1e, - 0xf9, 0x05, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x00, 0x00, 0x9e, 0x34, - 0x6e, 0x00, 0x04, 0x00, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf8, 0xc1, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x21, 0x03, 0x37, 0xff, 0x37, 0x96, 0x48, 0x0b, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x05, 0x1c, 0x21, 0xf0, 0x1e, 0xf8, 0x78, - 0xf0, 0x1e, 0xf8, 0x6e, 0x23, 0x20, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf8, 0x6d, 0xf0, 0x1e, - 0xf8, 0xd9, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x6e, 0x00, 0x04, 0x00, - 0xb5, 0x00, 0xf0, 0x1e, 0xf8, 0x99, 0x20, 0x03, - 0x49, 0x05, 0x60, 0x08, 0xf0, 0x1e, 0xf8, 0x58, - 0x23, 0x20, 0x43, 0x18, 0xf0, 0x1e, 0xf8, 0x58, - 0xf0, 0x1e, 0xf8, 0xc4, 0xbc, 0x08, 0x47, 0x18, - 0x6e, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x48, 0x0b, - 0x68, 0x41, 0x31, 0x14, 0x60, 0x41, 0x68, 0x81, - 0x31, 0x01, 0x60, 0x81, 0x48, 0x08, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x28, 0x01, 0xd1, 0x01, - 0xf7, 0xfe, 0xfa, 0x52, 0xbc, 0x08, 0x47, 0x18, - 0x48, 0x04, 0x21, 0x10, 0xf0, 0x0f, 0xf8, 0x34, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x08, 0x04, 0xfc, 0x2e, 0x08, 0x05, 0xb4, - 0xb5, 0x00, 0xf0, 0x1e, 0xf8, 0x69, 0x21, 0x00, - 0x48, 0x08, 0x60, 0x41, 0x60, 0x81, 0x49, 0x08, - 0x20, 0x07, 0xf0, 0x1e, 0xf8, 0x2d, 0xf0, 0x1e, - 0xf8, 0x23, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x18, - 0xf0, 0x1e, 0xf8, 0x22, 0xf0, 0x1e, 0xf8, 0x8e, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x00, 0x58, 0xe1, 0x48, 0x01, 0x68, 0x40, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xb4, - 0xb5, 0x90, 0x49, 0x0d, 0x1c, 0x0f, 0x48, 0x0d, - 0x24, 0x1e, 0x22, 0x10, 0x1c, 0x23, 0xf0, 0x0f, - 0xf9, 0x35, 0x22, 0x02, 0x21, 0x10, 0x1c, 0x38, - 0x1c, 0x23, 0xf0, 0x0b, 0xfb, 0x9d, 0x49, 0x08, - 0x20, 0x10, 0xf0, 0x1e, 0xf8, 0x05, 0xf0, 0x1d, - 0xff, 0xfb, 0x4b, 0x06, 0x40, 0x18, 0xf0, 0x1d, - 0xff, 0xfb, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x48, 0x10, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x00, 0x59, 0xa5, 0xff, 0xfe, 0xff, 0xff, - 0xb5, 0x00, 0xb0, 0x86, 0x46, 0x68, 0x49, 0x0c, - 0xc9, 0x0c, 0xc0, 0x0c, 0xc9, 0x0c, 0xc0, 0x0c, - 0xc9, 0x0c, 0xc0, 0x0c, 0x48, 0x09, 0xab, 0x00, - 0xcb, 0x0e, 0xb0, 0x03, 0xf0, 0x0f, 0xf9, 0x3a, - 0xb0, 0x03, 0x48, 0x07, 0x68, 0x01, 0x08, 0x4a, - 0xd3, 0x04, 0x08, 0x49, 0x00, 0x49, 0x23, 0x04, - 0x43, 0x19, 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x48, 0x10, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x08, 0x00, 0x04, 0xb5, 0x80, 0x29, 0x0c, - 0xd2, 0x00, 0x21, 0x0c, 0x31, 0x07, 0x08, 0xc9, - 0x00, 0xc9, 0x27, 0x00, 0x68, 0x02, 0x42, 0x82, - 0xd0, 0x03, 0x68, 0x93, 0x42, 0x8b, 0xd3, 0x0d, - 0x1c, 0x17, 0x2f, 0x00, 0xd0, 0x1e, 0x68, 0xb8, - 0x1a, 0x42, 0x2a, 0x0c, 0xd2, 0x00, 0x1c, 0x01, - 0x1a, 0x42, 0xd1, 0x05, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x76, 0xe0, 0x0c, 0x68, 0x12, 0xe7, 0xea, - 0x1d, 0xca, 0x32, 0x01, 0x1a, 0x80, 0x60, 0xb8, - 0x19, 0xc0, 0x1d, 0xc7, 0x37, 0x01, 0x20, 0x00, - 0x60, 0x38, 0x60, 0x78, 0x60, 0xb9, 0x68, 0xb8, - 0x60, 0x38, 0x1d, 0xf8, 0x30, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xb0, 0x1f, 0xcc, - 0x3c, 0x01, 0x68, 0x21, 0x19, 0x0a, 0x60, 0xa1, - 0x68, 0x07, 0x32, 0x08, 0x42, 0x87, 0xd1, 0x06, - 0x68, 0x41, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x48, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x42, 0x97, - 0xd1, 0x0f, 0x68, 0x7d, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x46, 0x68, 0xa0, 0x68, 0xb9, 0x18, 0x40, - 0x30, 0x08, 0x60, 0xa0, 0x1c, 0x20, 0x1c, 0x29, - 0xf0, 0x00, 0xf8, 0x36, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xbb, 0x19, 0xdb, 0x33, 0x08, - 0x42, 0xa3, 0xd1, 0x13, 0x68, 0xb8, 0x18, 0x40, - 0x30, 0x08, 0x60, 0xb8, 0x19, 0xc0, 0x68, 0x3c, - 0x30, 0x08, 0x42, 0xa0, 0xd1, 0xdc, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x29, 0x68, 0xb8, 0x68, 0xa1, - 0x18, 0x40, 0x30, 0x08, 0x60, 0xb8, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x42, 0xbc, 0xd2, 0x06, - 0x68, 0x79, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x14, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0x3f, - 0xe7, 0xc0, 0xb5, 0x00, 0x31, 0x10, 0x32, 0x01, - 0x1c, 0x0b, 0x1a, 0x51, 0x39, 0x08, 0x60, 0x99, - 0x60, 0x00, 0x1c, 0x01, 0x60, 0x40, 0x1c, 0x18, - 0xf0, 0x00, 0xf8, 0x02, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x0a, 0x60, 0x02, 0x60, 0x08, 0x68, 0x02, - 0x60, 0x50, 0x60, 0x41, 0x47, 0x70, 0xc8, 0x06, - 0x38, 0x08, 0x60, 0x11, 0xc8, 0x03, 0x60, 0x41, - 0x47, 0x70, 0xb5, 0x00, 0x1c, 0x0a, 0x1c, 0x01, - 0x48, 0x02, 0xf7, 0xff, 0xff, 0xde, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xd8, - 0xb5, 0x90, 0x1c, 0x07, 0xf0, 0x1d, 0xff, 0x24, - 0x23, 0x11, 0x05, 0x1b, 0x1c, 0x04, 0x43, 0x18, - 0xf0, 0x1d, 0xff, 0x22, 0x1c, 0x39, 0x48, 0x05, - 0xf7, 0xff, 0xff, 0x50, 0x1c, 0x07, 0x1c, 0x20, - 0xf0, 0x1d, 0xff, 0x1a, 0x1c, 0x38, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xd8, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, - 0xff, 0x41, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xd8, 0xb5, 0x90, 0x1c, 0x07, - 0xd0, 0x0e, 0xf0, 0x1d, 0xff, 0x01, 0x23, 0x11, - 0x05, 0x1b, 0x1c, 0x04, 0x43, 0x18, 0xf0, 0x1d, - 0xfe, 0xff, 0x1c, 0x39, 0x48, 0x04, 0xf7, 0xff, - 0xff, 0x61, 0x1c, 0x20, 0xf0, 0x1d, 0xfe, 0xf8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xd8, 0xb5, 0x00, 0x4a, 0x04, - 0xc2, 0x03, 0x1c, 0x0a, 0x1c, 0x01, 0x48, 0x03, - 0xf7, 0xff, 0xff, 0x97, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xd0, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, - 0xff, 0x11, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xd0, 0xb5, 0x00, 0x49, 0x08, - 0x68, 0x0a, 0x42, 0x90, 0xd3, 0x02, 0x68, 0x49, - 0x42, 0x88, 0xd9, 0x03, 0xf7, 0xff, 0xff, 0xc6, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x01, 0x48, 0x03, - 0xf7, 0xff, 0xff, 0x30, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xd0, - 0xb5, 0x00, 0x4a, 0x05, 0x60, 0x90, 0x60, 0xd1, - 0x1c, 0x0a, 0x1c, 0x01, 0x48, 0x03, 0xf7, 0xff, - 0xff, 0x68, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xe0, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, - 0xfe, 0xe1, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xe0, 0xb5, 0x00, 0x49, 0x08, - 0x68, 0x8a, 0x42, 0x90, 0xd3, 0x02, 0x68, 0xc9, - 0x42, 0x88, 0xd9, 0x03, 0xf7, 0xff, 0xff, 0x96, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x01, 0x48, 0x03, - 0xf7, 0xff, 0xff, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xe0, - 0xb5, 0xf0, 0x06, 0x07, 0x0e, 0x3f, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x81, 0x91, 0x00, 0x06, 0x16, - 0x0e, 0x36, 0x00, 0xbd, 0x4c, 0x15, 0x59, 0x60, - 0x28, 0x00, 0xd1, 0x15, 0xf7, 0xfb, 0xfa, 0x06, - 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, 0x22, 0x02, - 0x99, 0x01, 0x1c, 0x38, 0xf0, 0x0a, 0xfd, 0x5c, - 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, - 0x1c, 0x38, 0xb0, 0x01, 0xf0, 0x0a, 0xff, 0x18, - 0x20, 0x03, 0x00, 0x71, 0x4a, 0x0a, 0x52, 0x50, - 0x59, 0x60, 0x30, 0x01, 0x51, 0x60, 0x48, 0x09, - 0x23, 0x14, 0x5e, 0xc1, 0x29, 0x00, 0xd1, 0x02, - 0x49, 0x07, 0x4a, 0x08, 0x65, 0xd1, 0x8a, 0x81, - 0x31, 0x01, 0x82, 0x81, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xca, 0x84, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x07, 0x68, - 0x2e, 0x02, 0xc8, 0x94, 0xa0, 0x00, 0x0d, 0x00, - 0xb5, 0xb0, 0x06, 0x07, 0x0e, 0x3f, 0x06, 0x0c, - 0x0e, 0x24, 0x00, 0xb9, 0x48, 0x1a, 0x58, 0x42, - 0x3a, 0x01, 0x50, 0x42, 0xd1, 0x20, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x02, 0x1c, 0x38, - 0xf0, 0x0a, 0xfe, 0xe6, 0x22, 0x00, 0xb4, 0x04, - 0x25, 0x00, 0x1c, 0x38, 0x1c, 0x2b, 0x49, 0x13, - 0xf0, 0x0a, 0xfd, 0x1a, 0x00, 0x61, 0xb0, 0x01, - 0x48, 0x11, 0x52, 0x45, 0x48, 0x0f, 0x4a, 0x11, - 0x52, 0x50, 0x00, 0x79, 0x4a, 0x10, 0x52, 0x50, - 0x00, 0x62, 0x19, 0x12, 0x00, 0x92, 0x49, 0x0f, - 0x18, 0x53, 0x81, 0x1d, 0x52, 0x88, 0x80, 0x58, - 0x48, 0x0d, 0x8a, 0x81, 0x39, 0x01, 0x82, 0x81, - 0x23, 0x14, 0x5e, 0xc0, 0x28, 0x00, 0xd1, 0x03, - 0x20, 0xd7, 0x00, 0xc0, 0x49, 0x09, 0x65, 0xc8, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x02, 0xca, 0x84, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x49, 0xa8, 0x2e, 0x08, 0x48, 0x28, - 0x2e, 0x08, 0x07, 0x68, 0xa0, 0x00, 0x0d, 0x00, - 0xb5, 0xf0, 0x04, 0x06, 0x0c, 0x36, 0x04, 0x0c, - 0x0c, 0x24, 0x1c, 0x17, 0xb0, 0x8a, 0x46, 0x69, - 0x1c, 0x30, 0x1c, 0x22, 0xf0, 0x00, 0xf8, 0xb0, - 0x23, 0x01, 0x1c, 0x05, 0x42, 0xd8, 0xd1, 0x03, - 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x4b, 0x4e, 0x42, 0x9c, 0xd1, 0x06, 0xa8, 0x00, - 0x88, 0x00, 0x1c, 0x31, 0x1c, 0x2a, 0xf7, 0xff, - 0xff, 0x57, 0xe0, 0x7f, 0x20, 0x20, 0x40, 0x20, - 0x28, 0x20, 0xd1, 0x1f, 0x06, 0x2a, 0x0e, 0x12, - 0xa8, 0x00, 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, - 0x1c, 0x31, 0x1c, 0x23, 0xf7, 0xfd, 0xf8, 0x72, - 0x28, 0x00, 0xd0, 0x6f, 0x48, 0x42, 0x00, 0x69, - 0x4a, 0x42, 0x52, 0x50, 0xa9, 0x00, 0x88, 0x09, - 0x00, 0x49, 0x4a, 0x41, 0x52, 0x50, 0xa8, 0x00, - 0x88, 0x00, 0x1c, 0x29, 0xf0, 0x00, 0xf9, 0xce, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x0a, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x21, 0x00, - 0xaa, 0x01, 0x88, 0x3b, 0x0a, 0x1b, 0x70, 0x13, - 0x88, 0x3b, 0x93, 0x09, 0x32, 0x01, 0x06, 0x1b, - 0xd0, 0x02, 0x1c, 0x48, 0x06, 0x00, 0x0e, 0x00, - 0x9b, 0x09, 0x70, 0x13, 0x31, 0x01, 0x32, 0x01, - 0x37, 0x02, 0x29, 0x0e, 0xdb, 0xed, 0x21, 0x00, - 0x23, 0x00, 0x70, 0x13, 0x31, 0x01, 0x32, 0x01, - 0x29, 0x04, 0xdb, 0xfa, 0x21, 0x0c, 0x40, 0x21, - 0x29, 0x0c, 0xd1, 0x03, 0x04, 0x21, 0x0c, 0x09, - 0x24, 0x01, 0x43, 0x0c, 0x28, 0x06, 0xdc, 0x0e, - 0x06, 0x22, 0x0e, 0x12, 0xb4, 0x04, 0x06, 0x2a, - 0x0e, 0x12, 0xa8, 0x01, 0x88, 0x00, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x31, 0xab, 0x02, 0xf7, 0xfc, - 0xfc, 0x4f, 0xb0, 0x01, 0xe0, 0x1e, 0x28, 0x0a, - 0xdc, 0x0e, 0x06, 0x22, 0x0e, 0x12, 0xb4, 0x04, - 0x06, 0x2a, 0x0e, 0x12, 0xa8, 0x01, 0x88, 0x00, - 0x06, 0x00, 0x0e, 0x00, 0x1c, 0x31, 0xab, 0x02, - 0xf7, 0xfc, 0xfc, 0x58, 0xb0, 0x01, 0xe0, 0x0d, - 0x06, 0x22, 0x0e, 0x12, 0xb4, 0x04, 0x06, 0x2a, - 0x0e, 0x12, 0xa8, 0x01, 0x88, 0x00, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x31, 0xab, 0x02, 0xf7, 0xfc, - 0xfc, 0x63, 0xb0, 0x01, 0x28, 0x00, 0xd0, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x0a, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, 0xa8, 0x00, - 0x88, 0x00, 0x00, 0x6a, 0x19, 0x52, 0x00, 0x92, - 0x49, 0x0a, 0x52, 0x88, 0x18, 0x50, 0x80, 0x46, - 0x80, 0x84, 0x49, 0x05, 0x80, 0xc1, 0x21, 0x01, - 0x81, 0x01, 0x1c, 0x28, 0xb0, 0x0a, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xb9, 0x6a, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x49, 0xa8, 0x2e, 0x08, 0x48, 0x28, - 0xb4, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x17, - 0x0c, 0x3f, 0xb0, 0x82, 0x48, 0x58, 0x22, 0x00, - 0x4d, 0x58, 0x95, 0x01, 0x1c, 0x06, 0x00, 0x53, - 0x9d, 0x01, 0x5a, 0xed, 0x42, 0xb5, 0xd1, 0x02, - 0x04, 0x10, 0x0c, 0x00, 0xe0, 0x02, 0x32, 0x01, - 0x2a, 0x20, 0xdb, 0xf4, 0x42, 0xb0, 0xd1, 0x04, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, - 0x47, 0x70, 0x80, 0x0e, 0x4a, 0x4e, 0x92, 0x00, - 0x4d, 0x4e, 0x4a, 0x4f, 0x4b, 0x4f, 0x42, 0x9f, - 0xd1, 0x32, 0x23, 0x00, 0x00, 0x5f, 0x5b, 0xd7, - 0x42, 0xa7, 0xd1, 0x0a, 0x00, 0x5f, 0x5b, 0xef, - 0x2f, 0x03, 0xd1, 0x01, 0x80, 0x0b, 0xe0, 0x07, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, - 0x47, 0x70, 0x33, 0x01, 0x2b, 0x1c, 0xdb, 0xed, - 0x88, 0x0f, 0x4b, 0x3f, 0x42, 0x9f, 0xd1, 0x0a, - 0x27, 0x00, 0x00, 0x7b, 0x5a, 0xd6, 0x4b, 0x3c, - 0x42, 0x9e, 0xd1, 0x01, 0x80, 0x0f, 0xe0, 0x02, - 0x37, 0x01, 0x2f, 0x1c, 0xdb, 0xf5, 0x88, 0x0f, - 0x4b, 0x37, 0x42, 0x9f, 0xd1, 0x04, 0x20, 0x00, - 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x23, 0x03, 0x00, 0x47, 0x9e, 0x00, 0x53, 0xf3, - 0x88, 0x0f, 0x00, 0x7f, 0x53, 0xeb, 0xe0, 0x54, - 0x23, 0x20, 0x40, 0x3b, 0x2b, 0x20, 0xd1, 0x1e, - 0x23, 0x00, 0x00, 0x5f, 0x5b, 0xd7, 0x42, 0xa7, - 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x33, 0x01, 0x2b, 0x1c, - 0xdb, 0xf3, 0x27, 0x00, 0x00, 0x7b, 0x5a, 0xd5, - 0x42, 0xb5, 0xd1, 0x01, 0x80, 0x0f, 0xe0, 0x02, - 0x37, 0x01, 0x2f, 0x1c, 0xdb, 0xf6, 0x88, 0x0f, - 0x42, 0xb7, 0xd1, 0x36, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x23, 0x00, - 0x00, 0x5f, 0x5b, 0xd7, 0x42, 0xa7, 0xd1, 0x0a, - 0x00, 0x5f, 0x5b, 0xef, 0x2f, 0x02, 0xd1, 0x01, - 0x80, 0x0b, 0xe0, 0x07, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x33, 0x01, - 0x2b, 0x1c, 0xdb, 0xed, 0x88, 0x0f, 0x4b, 0x14, - 0x42, 0x9f, 0xd1, 0x0a, 0x27, 0x00, 0x00, 0x7b, - 0x5a, 0xd6, 0x4b, 0x11, 0x42, 0x9e, 0xd1, 0x01, - 0x80, 0x0f, 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x1c, - 0xdb, 0xf5, 0x88, 0x0f, 0x4b, 0x0c, 0x42, 0x9f, - 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x23, 0x02, 0x00, 0x47, - 0x9e, 0x00, 0x53, 0xf3, 0x88, 0x0f, 0x00, 0x7f, - 0x53, 0xeb, 0x00, 0x43, 0x9d, 0x01, 0x52, 0xec, - 0x88, 0x09, 0x00, 0x49, 0x52, 0x54, 0x04, 0x00, - 0x14, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x4a, 0x60, - 0x2e, 0x08, 0x49, 0xa8, 0x00, 0x00, 0xb9, 0x6a, - 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0xb0, 0x81, - 0x4a, 0x34, 0x92, 0x00, 0x1c, 0x11, 0x42, 0x97, - 0xd0, 0x01, 0x2f, 0x20, 0xdb, 0x05, 0x20, 0x00, - 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x7c, 0x4a, 0x2e, 0x5b, 0x10, - 0x42, 0x88, 0xd1, 0x05, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x49, 0x28, 0x53, 0x11, 0x23, 0x00, 0x49, 0x29, - 0x00, 0x5e, 0x5b, 0x8e, 0x42, 0x86, 0xd1, 0x02, - 0x04, 0x1d, 0x0c, 0x2d, 0xe0, 0x02, 0x33, 0x01, - 0x2b, 0x1c, 0xdb, 0xf5, 0x23, 0x00, 0x00, 0x5e, - 0x5b, 0x96, 0x42, 0x86, 0xd1, 0x03, 0x04, 0x1a, - 0x0c, 0x12, 0x92, 0x00, 0xe0, 0x02, 0x33, 0x01, - 0x2b, 0x20, 0xdb, 0xf4, 0x9a, 0x00, 0x4e, 0x1b, - 0x42, 0xb2, 0xd1, 0x0d, 0x22, 0x00, 0x00, 0x53, - 0x5a, 0xcb, 0x42, 0x83, 0xd1, 0x05, 0x23, 0x00, - 0x00, 0x50, 0x4a, 0x19, 0x52, 0x13, 0x52, 0x0e, - 0xe0, 0x02, 0x32, 0x01, 0x2a, 0x1c, 0xdb, 0xf2, - 0x4e, 0x16, 0x5b, 0x30, 0x28, 0x02, 0xd1, 0x05, - 0x23, 0x00, 0x53, 0x33, 0x1c, 0x28, 0x1c, 0x39, - 0xf0, 0x00, 0xf8, 0x38, 0x5b, 0x30, 0x28, 0x01, - 0xd1, 0x0a, 0x1c, 0x38, 0xf7, 0xfc, 0xff, 0xe6, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x5b, 0x30, 0x28, 0x03, 0xd1, 0x03, 0x1c, 0x28, - 0x1c, 0x39, 0xf7, 0xff, 0xfd, 0xcd, 0x04, 0x38, - 0x14, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x49, 0xe0, 0x2e, 0x08, 0x49, 0xa8, - 0x2e, 0x08, 0x4a, 0x60, 0x2e, 0x08, 0x4a, 0x20, - 0x04, 0x01, 0x0c, 0x09, 0x20, 0x02, 0x00, 0x4b, - 0x18, 0x5b, 0x00, 0x9b, 0x4a, 0x03, 0x18, 0x99, - 0x81, 0x08, 0x48, 0x03, 0x52, 0xd0, 0x80, 0x48, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x48, 0x28, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x04, 0x0f, - 0x0c, 0x3f, 0x06, 0x39, 0x0e, 0x09, 0x06, 0x00, - 0x0e, 0x00, 0xf7, 0xfc, 0xfc, 0x1b, 0x20, 0x00, - 0x00, 0x7b, 0x19, 0xdb, 0x00, 0x9b, 0x4a, 0x04, - 0x18, 0x99, 0x81, 0x08, 0x48, 0x03, 0x52, 0xd0, - 0x80, 0x48, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x48, 0x28, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x80, 0x04, 0x09, 0x0c, 0x09, 0x78, 0x42, - 0x02, 0x12, 0x78, 0x83, 0x43, 0x1a, 0x05, 0x12, - 0x0d, 0x12, 0x27, 0x00, 0x43, 0xff, 0x32, 0x03, - 0x42, 0x8a, 0xd0, 0x03, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x0b, 0xf9, 0xa0, - 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x9c, 0x09, - 0x04, 0x00, 0x0c, 0x00, 0xb0, 0x81, 0x90, 0x00, - 0x06, 0x09, 0x0e, 0x09, 0x06, 0x12, 0x0e, 0x12, - 0xb0, 0x88, 0x4f, 0x16, 0x68, 0xb8, 0x28, 0x0c, - 0xdb, 0x06, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x09, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x23, 0x00, 0x00, 0x45, 0x46, 0x6e, - 0x53, 0x73, 0x30, 0x01, 0x04, 0x00, 0x14, 0x00, - 0x28, 0x10, 0xdb, 0xf7, 0x02, 0x08, 0x43, 0x10, - 0xab, 0x00, 0x80, 0x18, 0x46, 0x6a, 0x21, 0x04, - 0x98, 0x08, 0xf7, 0xff, 0xfd, 0x95, 0x28, 0x00, - 0xda, 0x01, 0xb0, 0x09, 0xe7, 0xe4, 0x00, 0x81, - 0x4a, 0x05, 0x50, 0x54, 0x9b, 0x0c, 0x4a, 0x05, - 0x50, 0x53, 0x68, 0xb9, 0x31, 0x01, 0x60, 0xb9, - 0xb0, 0x09, 0xe7, 0xd9, 0x2e, 0x08, 0x07, 0x80, - 0x2e, 0x08, 0x4b, 0x18, 0x2e, 0x08, 0x4a, 0x98, - 0xb5, 0x80, 0x04, 0x07, 0x14, 0x3f, 0xd5, 0x04, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0xf4, - 0x20, 0x00, 0x00, 0xb9, 0x4a, 0x05, 0x50, 0x50, - 0x4a, 0x05, 0x50, 0x50, 0x49, 0x05, 0x68, 0x8a, - 0x3a, 0x01, 0x60, 0x8a, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x4a, 0x98, - 0x2e, 0x08, 0x4b, 0x18, 0x2e, 0x08, 0x07, 0x80, - 0xb5, 0x90, 0x27, 0x00, 0x4c, 0x08, 0x00, 0xb8, - 0x58, 0x20, 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, - 0xf7, 0xff, 0xff, 0xd6, 0x37, 0x01, 0x2f, 0x20, - 0xdb, 0xf5, 0x20, 0x00, 0x49, 0x03, 0x60, 0xc8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4a, 0x98, 0x2e, 0x08, 0x07, 0x80, - 0xb5, 0x00, 0xf7, 0xff, 0xff, 0xe5, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xff, 0x04, 0x00, 0x14, 0x00, - 0xb0, 0x83, 0x90, 0x00, 0x1c, 0x0f, 0x04, 0x11, - 0x0c, 0x09, 0x24, 0x00, 0x1c, 0x38, 0x1c, 0x0d, - 0xb0, 0x81, 0xf7, 0xff, 0xff, 0x59, 0x1c, 0x01, - 0x20, 0x00, 0x29, 0x00, 0xd0, 0x04, 0xb0, 0x04, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x78, 0xf9, 0x02, 0x09, 0x79, 0x3a, 0x43, 0x11, - 0x04, 0x09, 0x0c, 0x09, 0x9b, 0x07, 0x88, 0x1a, - 0x42, 0x91, 0xd0, 0x01, 0xb0, 0x04, 0xe7, 0xef, - 0x7a, 0x39, 0x02, 0x09, 0x7a, 0x7a, 0x43, 0x11, - 0x04, 0xc9, 0x0c, 0xc9, 0x91, 0x00, 0x7a, 0xb9, - 0x02, 0x09, 0x7a, 0xfa, 0x43, 0x11, 0x05, 0x0b, - 0x0d, 0x1b, 0x1d, 0xf9, 0x31, 0x05, 0x27, 0x00, - 0x1d, 0xd8, 0x30, 0x09, 0x1a, 0x2a, 0x2b, 0x00, - 0xdd, 0x0a, 0x78, 0x08, 0x28, 0x09, 0xd1, 0x00, - 0x37, 0x01, 0x78, 0x48, 0x1c, 0x85, 0x1b, 0x5b, - 0x18, 0x40, 0x1c, 0x81, 0x2b, 0x00, 0xdc, 0xf4, - 0x2a, 0x00, 0xdd, 0x36, 0x48, 0x2c, 0x88, 0x06, - 0x96, 0x03, 0x88, 0x85, 0x95, 0x02, 0x78, 0xc8, - 0x02, 0x00, 0x79, 0x0b, 0x43, 0x18, 0x05, 0x00, - 0x0d, 0x00, 0x78, 0x0b, 0x2b, 0x01, 0xd0, 0x01, - 0x2b, 0x02, 0xd1, 0x06, 0x78, 0x4d, 0x02, 0x2d, - 0x78, 0x8e, 0x43, 0x35, 0x04, 0xed, 0x0c, 0xed, - 0x9e, 0x03, 0x2b, 0x04, 0xd0, 0x01, 0x2b, 0x03, - 0xd1, 0x09, 0x78, 0x4b, 0x02, 0x1b, 0x78, 0x8d, - 0x43, 0x2b, 0x04, 0xdb, 0x0c, 0xdb, 0x9d, 0x02, - 0x42, 0xab, 0xd1, 0x00, 0x24, 0x01, 0x1d, 0x43, - 0x1a, 0xd2, 0x31, 0x05, 0x28, 0x00, 0xdd, 0x0a, - 0x78, 0x0b, 0x2b, 0x09, 0xd1, 0x00, 0x37, 0x01, - 0x78, 0x4b, 0x1c, 0x9d, 0x1b, 0x40, 0x18, 0x59, - 0x31, 0x02, 0x28, 0x00, 0xdc, 0xf4, 0x2a, 0x00, - 0xdc, 0xcd, 0x2c, 0x00, 0xd0, 0x17, 0xf7, 0xff, - 0xff, 0x63, 0x99, 0x00, 0x48, 0x0f, 0x80, 0x01, - 0x2f, 0x00, 0xd0, 0x0d, 0x20, 0x0a, 0xb0, 0x84, - 0xab, 0x00, 0x80, 0x18, 0x20, 0x02, 0x70, 0x98, - 0x9b, 0x0b, 0x93, 0x01, 0x46, 0x69, 0x20, 0x75, - 0xf0, 0x04, 0xff, 0x76, 0xb0, 0x04, 0xe0, 0x07, - 0xf7, 0xfa, 0xf8, 0xf4, 0xe0, 0x04, 0x98, 0x01, - 0xf7, 0xff, 0xff, 0x2a, 0xf0, 0x00, 0xf8, 0x22, - 0x20, 0x00, 0xb0, 0x04, 0xe7, 0x74, 0x00, 0x00, - 0x2e, 0x08, 0x07, 0x80, 0x2e, 0x08, 0x00, 0x08, - 0xb4, 0x90, 0x04, 0x02, 0x0c, 0x12, 0x04, 0x0f, - 0x0c, 0x3f, 0x4b, 0x07, 0x68, 0xd8, 0x28, 0x80, - 0xda, 0x08, 0x2a, 0x00, 0xd0, 0x06, 0x00, 0x41, - 0x4c, 0x04, 0x52, 0x67, 0x4f, 0x04, 0x52, 0x7a, - 0x30, 0x01, 0x60, 0xd8, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x07, 0x80, 0x2e, 0x08, 0x4b, 0x98, - 0x2e, 0x08, 0x4c, 0x98, 0xb5, 0x90, 0x4f, 0x13, - 0x24, 0x00, 0x43, 0xe4, 0x68, 0xf8, 0x28, 0x00, - 0xd1, 0x03, 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x40, 0x49, 0x0e, 0x18, 0x41, - 0x1e, 0x8a, 0xb4, 0x04, 0x49, 0x0d, 0x18, 0x40, - 0x38, 0x40, 0x8f, 0xc0, 0x4b, 0x0c, 0x22, 0xff, - 0x21, 0x02, 0xf7, 0xff, 0xfe, 0xaf, 0xb0, 0x01, - 0x28, 0x00, 0xda, 0x03, 0x1c, 0x20, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x68, 0xf8, 0x38, 0x01, - 0x60, 0xf8, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x07, 0x80, - 0x2e, 0x08, 0x4c, 0x98, 0x2e, 0x08, 0x4b, 0x98, - 0x2e, 0x00, 0x62, 0xef, 0xb5, 0xf0, 0x04, 0x05, - 0x14, 0x2d, 0x1c, 0x0f, 0x04, 0x11, 0x0c, 0x09, - 0x1c, 0x0e, 0x4c, 0x28, 0x23, 0x02, 0x69, 0x20, - 0x42, 0xd8, 0xd0, 0x04, 0x1c, 0x38, 0xf7, 0xff, - 0xfe, 0x6b, 0x28, 0x00, 0xd0, 0x06, 0x1c, 0x28, - 0xf7, 0xff, 0xfe, 0xc2, 0x20, 0x00, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x79, 0xb8, 0x69, 0x21, - 0x42, 0x88, 0xd1, 0x09, 0x20, 0x01, 0x43, 0xc0, - 0x61, 0x20, 0x1c, 0x28, 0xf7, 0xff, 0xfe, 0xb4, - 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x23, 0x01, 0x42, 0xd9, 0xd1, 0x02, 0x61, 0x20, - 0x20, 0x00, 0x60, 0xe0, 0x37, 0x08, 0x1f, 0xf4, - 0x3c, 0x05, 0x2c, 0x00, 0xdd, 0x11, 0x78, 0x38, - 0x02, 0x00, 0x78, 0x79, 0x43, 0x08, 0x04, 0x00, - 0x0c, 0x00, 0x78, 0xb9, 0x02, 0x09, 0x78, 0xfa, - 0x43, 0x11, 0x04, 0xc9, 0x0c, 0xc9, 0xf7, 0xff, - 0xff, 0x77, 0x37, 0x04, 0x3c, 0x04, 0x2c, 0x00, - 0xdc, 0xed, 0xf7, 0xff, 0xff, 0x8b, 0xf7, 0xff, - 0xff, 0x89, 0xf7, 0xff, 0xff, 0x87, 0xf7, 0xff, - 0xff, 0x85, 0xf7, 0xff, 0xff, 0x83, 0xf7, 0xff, - 0xff, 0x81, 0xf7, 0xff, 0xff, 0x7f, 0xf7, 0xff, - 0xff, 0x7d, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x07, 0x80, - 0xb5, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x26, 0x00, 0x43, 0xf6, 0x4f, 0x0f, - 0x62, 0x3e, 0x61, 0xfe, 0x61, 0xbe, 0xf7, 0xff, - 0xfe, 0x8f, 0x2d, 0x00, 0xd0, 0x13, 0x2c, 0x00, - 0xd0, 0x11, 0x0c, 0xf0, 0x42, 0x85, 0xd0, 0x0e, - 0x42, 0x84, 0xd0, 0x0c, 0x80, 0x3c, 0x80, 0xbd, - 0x20, 0x00, 0x61, 0x3e, 0x22, 0x00, 0x61, 0x78, - 0xb4, 0x04, 0x4b, 0x05, 0x22, 0xff, 0x21, 0x00, - 0xf7, 0xff, 0xfe, 0x1c, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x07, 0x80, - 0x2e, 0x00, 0x64, 0xc9, 0x56, 0x47, 0x41, 0x38, - 0x78, 0x31, 0x36, 0x00, 0xb5, 0x00, 0xb0, 0x81, - 0x48, 0x05, 0x69, 0xc0, 0x68, 0x80, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x00, 0xf0, 0x13, 0xfa, 0x22, - 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0xf0, 0x27, 0x00, - 0xb0, 0x85, 0x97, 0x00, 0x26, 0x10, 0x96, 0x01, - 0x25, 0x05, 0x01, 0xed, 0x95, 0x02, 0x20, 0xff, - 0x30, 0xd1, 0x90, 0x03, 0x97, 0x04, 0x22, 0x00, - 0x21, 0x00, 0xb4, 0x06, 0x4c, 0x0d, 0x69, 0xe0, - 0x68, 0x81, 0x1c, 0x08, 0xaa, 0x02, 0x1c, 0x3b, - 0xf0, 0x13, 0xfc, 0x8a, 0xb0, 0x02, 0x97, 0x00, - 0x20, 0xff, 0x30, 0xd1, 0x90, 0x01, 0x95, 0x02, - 0x96, 0x03, 0x97, 0x04, 0x69, 0xe0, 0x68, 0x80, - 0x46, 0x69, 0xf0, 0x13, 0xfb, 0xbb, 0xf7, 0xff, - 0xff, 0xc9, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x90, 0x20, 0x07, 0xb0, 0x85, 0xf0, 0x08, - 0xff, 0xaf, 0x24, 0xff, 0x34, 0xe1, 0x22, 0x05, - 0x01, 0xd2, 0x21, 0x00, 0x20, 0x07, 0x1c, 0x23, - 0xf0, 0x08, 0xff, 0xbe, 0x27, 0x00, 0x22, 0x00, - 0x21, 0x02, 0x20, 0x07, 0x1c, 0x3b, 0xf0, 0x09, - 0xfb, 0x67, 0x22, 0x01, 0x21, 0x01, 0x20, 0x07, - 0x1c, 0x3b, 0xf0, 0x09, 0xfb, 0x19, 0x22, 0x32, - 0x21, 0x32, 0x20, 0x07, 0xf0, 0x09, 0xf8, 0x74, - 0x97, 0x00, 0x97, 0x01, 0x20, 0x05, 0x01, 0xc0, - 0x90, 0x02, 0x94, 0x03, 0x97, 0x04, 0x48, 0x06, - 0x69, 0xc0, 0x68, 0x80, 0x46, 0x69, 0xf0, 0x13, - 0xfb, 0x85, 0xf7, 0xff, 0xff, 0x93, 0xb0, 0x05, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0xb4, 0x80, 0x01, 0x00, - 0x4b, 0x2a, 0x18, 0xc0, 0x4b, 0x2a, 0x69, 0xdb, - 0x69, 0x9f, 0x00, 0x8b, 0x18, 0x59, 0x02, 0x09, - 0x18, 0x89, 0x18, 0x79, 0x78, 0x02, 0x70, 0x0a, - 0x78, 0x42, 0x1d, 0xcb, 0x33, 0x39, 0x74, 0x1a, - 0x78, 0x82, 0x1d, 0xcb, 0x33, 0x99, 0x70, 0x1a, - 0x78, 0xc2, 0x1d, 0xcb, 0x33, 0xd9, 0x74, 0x1a, - 0x79, 0x02, 0x1d, 0xcb, 0x33, 0xff, 0x33, 0x3a, - 0x70, 0x1a, 0x79, 0x42, 0x1d, 0xcb, 0x33, 0xff, - 0x33, 0x7a, 0x74, 0x1a, 0x79, 0x82, 0x1d, 0xcb, - 0x33, 0xff, 0x33, 0xda, 0x70, 0x1a, 0x79, 0xc2, - 0x23, 0x11, 0x01, 0x5b, 0x18, 0xcb, 0x74, 0x1a, - 0x7a, 0x02, 0x23, 0x05, 0x01, 0xdb, 0x18, 0xcb, - 0x70, 0x1a, 0x7a, 0x42, 0x23, 0x0b, 0x01, 0x9b, - 0x18, 0xcb, 0x74, 0x1a, 0x7a, 0x82, 0x23, 0x19, - 0x01, 0x5b, 0x18, 0xcb, 0x70, 0x1a, 0x7a, 0xc2, - 0x23, 0x1b, 0x01, 0x5b, 0x18, 0xcb, 0x74, 0x1a, - 0x7b, 0x02, 0x23, 0x0f, 0x01, 0x9b, 0x18, 0xcb, - 0x70, 0x1a, 0x7b, 0x42, 0x23, 0x01, 0x02, 0x9b, - 0x18, 0xcb, 0x74, 0x1a, 0x7b, 0x82, 0x23, 0x23, - 0x01, 0x5b, 0x18, 0xcb, 0x70, 0x1a, 0x7b, 0xc0, - 0x23, 0x25, 0x01, 0x5b, 0x18, 0xc9, 0x74, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x07, 0xa4, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0xb0, 0x23, 0x00, - 0x1c, 0x07, 0x56, 0xc0, 0x1c, 0x14, 0x1c, 0x0d, - 0x28, 0x00, 0xd0, 0x0f, 0x20, 0x50, 0x1c, 0x21, - 0xf0, 0x17, 0xfd, 0x3e, 0x19, 0x41, 0x23, 0x00, - 0x56, 0xf8, 0x1c, 0x22, 0xf7, 0xff, 0xff, 0x92, - 0x23, 0x00, 0x37, 0x01, 0x56, 0xf8, 0x34, 0x01, - 0x28, 0x00, 0xd1, 0xef, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x90, 0x06, 0x00, 0x0e, 0x00, - 0x04, 0x09, 0x14, 0x09, 0x04, 0x17, 0x14, 0x3f, - 0x09, 0x03, 0xb0, 0x81, 0x4a, 0x08, 0x5c, 0xd4, - 0xab, 0x00, 0x70, 0x1c, 0x07, 0x00, 0x0f, 0x00, - 0x5c, 0x10, 0x70, 0x58, 0x20, 0x00, 0x70, 0x98, - 0x46, 0x68, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0xce, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x17, 0xbc, 0xb5, 0x90, 0x04, 0x00, - 0x0c, 0x00, 0x04, 0x09, 0x14, 0x09, 0x04, 0x17, - 0x14, 0x3f, 0x0b, 0x03, 0xb0, 0x82, 0x4a, 0x0f, - 0x5c, 0xd4, 0xab, 0x00, 0x70, 0x1c, 0x0a, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xd4, 0xab, 0x00, - 0x70, 0x5c, 0x09, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xd4, 0xab, 0x00, 0x70, 0x9c, 0x07, 0x00, - 0x0f, 0x00, 0x5c, 0x10, 0x70, 0xd8, 0x20, 0x00, - 0x71, 0x18, 0x46, 0x68, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0xa5, 0xb0, 0x02, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x17, 0xbc, - 0xb5, 0x90, 0x04, 0x0f, 0x14, 0x3f, 0x04, 0x12, - 0x14, 0x12, 0x0f, 0x03, 0xb0, 0x83, 0x49, 0x1b, - 0x5c, 0xcc, 0xab, 0x00, 0x70, 0x1c, 0x0e, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x00, - 0x70, 0x5c, 0x0d, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xcc, 0xab, 0x00, 0x70, 0x9c, 0x0c, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x00, - 0x70, 0xdc, 0x0b, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xcc, 0xab, 0x01, 0x70, 0x1c, 0x0a, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x01, - 0x70, 0x5c, 0x09, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xcc, 0xab, 0x01, 0x70, 0x9c, 0x07, 0x00, - 0x0f, 0x00, 0x5c, 0x08, 0x70, 0xd8, 0x20, 0x00, - 0x71, 0x18, 0x46, 0x68, 0x1c, 0x39, 0xf7, 0xff, - 0xff, 0x65, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x17, 0xbc, - 0xb5, 0xf0, 0x1c, 0x04, 0x04, 0x10, 0x14, 0x00, - 0xb0, 0x81, 0x90, 0x00, 0x04, 0x1e, 0x14, 0x36, - 0x22, 0x3c, 0x1c, 0x20, 0x1c, 0x0f, 0xb0, 0x85, - 0xf0, 0x17, 0xfc, 0xd2, 0xa3, 0x72, 0xcb, 0x0c, - 0xf0, 0x17, 0xfc, 0xde, 0xf0, 0x17, 0xfc, 0xe0, - 0x4d, 0x71, 0x5c, 0x28, 0xab, 0x02, 0x70, 0x18, - 0x22, 0x38, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0xc3, 0xa3, 0x6b, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0xcf, 0xf0, 0x17, 0xfc, 0xd1, 0x5c, 0x28, - 0xab, 0x02, 0x70, 0x58, 0x22, 0x34, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0xb5, 0xa3, 0x64, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0xc1, 0xf0, 0x17, - 0xfc, 0xc3, 0x5c, 0x28, 0xab, 0x02, 0x70, 0x98, - 0x22, 0x30, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0xa7, 0xa3, 0x5d, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0xb3, 0xf0, 0x17, 0xfc, 0xb5, 0x5c, 0x28, - 0xab, 0x02, 0x70, 0xd8, 0x22, 0x2c, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x99, 0xa3, 0x56, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0xa5, 0xf0, 0x17, - 0xfc, 0xa7, 0x5c, 0x28, 0xab, 0x03, 0x70, 0x18, - 0x22, 0x28, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x8b, 0xa3, 0x4f, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x97, 0xf0, 0x17, 0xfc, 0x99, 0x5c, 0x28, - 0xab, 0x03, 0x70, 0x58, 0x22, 0x24, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x7d, 0xa3, 0x48, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x89, 0xf0, 0x17, - 0xfc, 0x8b, 0x5c, 0x28, 0xab, 0x03, 0x70, 0x98, - 0x22, 0x20, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x6f, 0xa3, 0x41, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x7b, 0xf0, 0x17, 0xfc, 0x7d, 0x5c, 0x28, - 0xab, 0x03, 0x70, 0xd8, 0x22, 0x1c, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x61, 0xa3, 0x3a, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x6d, 0xf0, 0x17, - 0xfc, 0x6f, 0x5c, 0x28, 0xab, 0x00, 0x70, 0x18, - 0x22, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x53, 0xa3, 0x33, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x5f, 0xf0, 0x17, 0xfc, 0x61, 0x5c, 0x28, - 0xab, 0x00, 0x70, 0x58, 0x22, 0x14, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x45, 0xa3, 0x2c, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x51, 0xf0, 0x17, - 0xfc, 0x53, 0x5c, 0x28, 0xab, 0x00, 0x70, 0x98, - 0x22, 0x10, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x37, 0xa3, 0x25, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x43, 0xf0, 0x17, 0xfc, 0x45, 0x5c, 0x28, - 0xab, 0x00, 0x70, 0xd8, 0x22, 0x0c, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x29, 0xa3, 0x1e, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x35, 0xf0, 0x17, - 0xfc, 0x37, 0x5c, 0x28, 0xab, 0x01, 0x70, 0x18, - 0x22, 0x08, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x1b, 0xa3, 0x17, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x27, 0xf0, 0x17, 0xfc, 0x29, 0x5c, 0x28, - 0xab, 0x01, 0x70, 0x58, 0x22, 0x04, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x0d, 0xa3, 0x10, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x19, 0xf0, 0x17, - 0xfc, 0x1b, 0x5c, 0x28, 0xab, 0x01, 0x70, 0x98, - 0xa3, 0x0b, 0xcb, 0x0c, 0x1c, 0x20, 0x1c, 0x39, - 0xf0, 0x17, 0xfc, 0x0e, 0xf0, 0x17, 0xfc, 0x10, - 0x5c, 0x28, 0xab, 0x01, 0x70, 0xd8, 0x20, 0x00, - 0x73, 0x18, 0x46, 0x68, 0x99, 0x05, 0x1c, 0x32, - 0x33, 0x0c, 0xf7, 0xff, 0xfe, 0x6f, 0xb0, 0x06, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x17, 0xbc, 0x21, 0x00, 0xb0, 0x81, - 0x91, 0x00, 0xe0, 0x02, 0x99, 0x00, 0x31, 0x01, - 0x91, 0x00, 0x99, 0x00, 0x42, 0x81, 0xdb, 0xf9, - 0xb0, 0x01, 0x47, 0x70, 0xb5, 0xf0, 0x06, 0x06, - 0x0e, 0x36, 0x25, 0x02, 0x48, 0x0d, 0x60, 0x05, - 0x27, 0x07, 0x4c, 0x0d, 0x60, 0x25, 0x20, 0x01, - 0x40, 0xb8, 0x40, 0x30, 0xd0, 0x01, 0x20, 0x03, - 0xe0, 0x00, 0x20, 0x02, 0x49, 0x09, 0x60, 0x08, - 0x20, 0x0a, 0xf7, 0xff, 0xff, 0xdf, 0x20, 0x03, - 0x60, 0x20, 0x20, 0x0c, 0xf7, 0xff, 0xff, 0xda, - 0x3f, 0x01, 0xd5, 0xeb, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x6e, 0x00, 0x14, 0x00, - 0x6e, 0x00, 0x13, 0x00, 0x6e, 0x00, 0x12, 0x00, - 0xb5, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x0f, - 0x0e, 0x3f, 0x06, 0x00, 0x0e, 0x00, 0x23, 0x80, - 0x43, 0x18, 0xf7, 0xff, 0xff, 0xcf, 0x20, 0x14, - 0xf7, 0xff, 0xff, 0xc0, 0x1c, 0x38, 0xf7, 0xff, - 0xff, 0xc9, 0x20, 0x03, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x04, 0x60, 0x08, 0x49, 0x04, - 0x60, 0x08, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x6e, 0x00, 0x14, 0x00, 0x6e, 0x00, 0x12, 0x00, - 0x6e, 0x00, 0x13, 0x00, 0xb5, 0x00, 0x21, 0x01, - 0x20, 0x02, 0xf7, 0xff, 0xff, 0xd9, 0x48, 0x10, - 0xf7, 0xff, 0xff, 0xa4, 0x21, 0x00, 0x20, 0x02, - 0xf7, 0xff, 0xff, 0xd2, 0x48, 0x0d, 0xf7, 0xff, - 0xff, 0x9d, 0x21, 0x44, 0x20, 0x00, 0xf7, 0xff, - 0xff, 0xcb, 0x21, 0x81, 0x20, 0x01, 0xf7, 0xff, - 0xff, 0xc7, 0x21, 0xf0, 0x20, 0x02, 0xf7, 0xff, - 0xff, 0xc3, 0x21, 0x45, 0x20, 0x03, 0xf7, 0xff, - 0xff, 0xbf, 0x21, 0x45, 0x20, 0x04, 0xf7, 0xff, - 0xff, 0xbb, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0xc3, 0x50, - 0xb5, 0x80, 0x06, 0x07, 0x0e, 0x3f, 0x06, 0x08, - 0x0e, 0x00, 0x28, 0x45, 0xdd, 0x00, 0x20, 0x45, - 0x1d, 0xc1, 0x31, 0x79, 0x20, 0x03, 0xf7, 0xff, - 0xff, 0xa7, 0x2f, 0x45, 0xdd, 0x00, 0x27, 0x45, - 0x20, 0x04, 0x1d, 0xf9, 0x31, 0x79, 0xf7, 0xff, - 0xff, 0x9f, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x00, 0xf0, 0x1c, 0xfe, 0xcd, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x18, 0xf0, 0x1c, 0xfe, 0xcc, - 0xf0, 0x1c, 0xfe, 0xc6, 0x23, 0x01, 0x03, 0x9b, - 0x43, 0x18, 0xf0, 0x1c, 0xfe, 0xc5, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x00, 0xf0, 0x1c, 0xfe, 0xbc, - 0x4b, 0x05, 0x40, 0x18, 0xf0, 0x1c, 0xfe, 0xbc, - 0xf0, 0x1c, 0xfe, 0xb6, 0x4b, 0x03, 0x40, 0x18, - 0xf0, 0x1c, 0xfe, 0xb6, 0xbc, 0x08, 0x47, 0x18, - 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, - 0xb5, 0x80, 0x1c, 0x07, 0xf7, 0xff, 0xff, 0xd8, - 0x07, 0xf8, 0x0f, 0x40, 0x49, 0x0a, 0x58, 0x08, - 0x0c, 0x39, 0xd3, 0x05, 0x23, 0x01, 0x02, 0x5b, - 0x68, 0x01, 0x43, 0x19, 0x60, 0x01, 0xe0, 0x03, - 0x68, 0x01, 0x4b, 0x06, 0x40, 0x19, 0x60, 0x01, - 0xf0, 0x13, 0xff, 0x5e, 0xf7, 0xff, 0xff, 0xd5, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x44, 0xff, 0xff, 0xfd, 0xff, - 0xb5, 0x00, 0x4a, 0x09, 0x1f, 0x11, 0x20, 0x0e, - 0xf0, 0x13, 0xff, 0x08, 0x28, 0x00, 0xd1, 0x09, - 0x48, 0x06, 0xf0, 0x13, 0xff, 0x49, 0x49, 0x06, - 0x20, 0x0e, 0xf0, 0x1c, 0xfe, 0x85, 0xf7, 0xff, - 0xff, 0xbc, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x17, 0xe0, 0x2e, 0x08, 0x1a, 0x38, - 0x2e, 0x00, 0x6c, 0xab, 0xb5, 0x00, 0xf7, 0xff, - 0xff, 0x9f, 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x1c, - 0xfe, 0x73, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, - 0xa0, 0x0d, 0x22, 0x00, 0x21, 0x0b, 0xf7, 0xff, - 0xfd, 0x61, 0x4f, 0x0d, 0x22, 0x0a, 0x21, 0x0b, - 0x68, 0x38, 0xf7, 0xff, 0xfd, 0xbd, 0x68, 0x38, - 0x30, 0x01, 0x60, 0x38, 0x48, 0x09, 0x7c, 0x01, - 0x29, 0x01, 0xd1, 0x05, 0x69, 0x41, 0x29, 0xff, - 0xd0, 0x02, 0x20, 0x01, 0xf0, 0x00, 0xf8, 0x0c, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x49, 0x52, 0x20, 0x49, 0x52, 0x51, 0x3a, 0x00, - 0x2e, 0x08, 0x1a, 0x4c, 0x2e, 0x08, 0x17, 0xcc, - 0xb5, 0x90, 0x06, 0x0c, 0x0e, 0x24, 0x1c, 0x07, - 0xf7, 0xff, 0xff, 0x6e, 0x48, 0x11, 0x68, 0x01, - 0x00, 0x49, 0x08, 0x49, 0x07, 0xfa, 0x43, 0x11, - 0x0a, 0x09, 0x02, 0x09, 0x43, 0x21, 0x60, 0x01, - 0x68, 0xc2, 0x2a, 0x00, 0xd1, 0x11, 0x68, 0x82, - 0x1c, 0x53, 0x68, 0x82, 0x60, 0x83, 0x00, 0x92, - 0x4b, 0x09, 0x50, 0x99, 0x68, 0x81, 0x29, 0x64, - 0xd1, 0x01, 0x21, 0x00, 0x60, 0x81, 0x68, 0x81, - 0x68, 0x42, 0x42, 0x91, 0xd1, 0x01, 0x21, 0x01, - 0x60, 0xc1, 0xf7, 0xff, 0xff, 0x5e, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x17, 0xcc, - 0x2e, 0x08, 0x4d, 0x98, 0xb5, 0x90, 0x1c, 0x07, - 0xf7, 0xff, 0xff, 0x42, 0x48, 0x10, 0x68, 0xc1, - 0x24, 0x00, 0x29, 0x00, 0xd1, 0x03, 0x68, 0x41, - 0x68, 0x82, 0x42, 0x91, 0xd0, 0x12, 0x68, 0x41, - 0x1c, 0x4a, 0x68, 0x41, 0x60, 0x42, 0x00, 0x89, - 0x4a, 0x0a, 0x58, 0x51, 0x60, 0x39, 0x68, 0x41, - 0x29, 0x64, 0xd1, 0x00, 0x60, 0x44, 0x60, 0xc4, - 0xf7, 0xff, 0xff, 0x3b, 0x20, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xff, 0x35, - 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x17, 0xcc, 0x2e, 0x08, 0x4d, 0x98, - 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x0e, 0x8e, 0xb8, - 0x28, 0x00, 0xd1, 0x04, 0x46, 0x68, 0xf7, 0xff, - 0xff, 0xcd, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x00, - 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x98, 0x00, 0x49, 0x07, 0x60, 0x08, - 0x20, 0x08, 0x85, 0x38, 0x20, 0x04, 0x85, 0x78, - 0x20, 0x0f, 0x02, 0x40, 0x86, 0xb8, 0x20, 0x01, - 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x1e, 0x00, - 0xb5, 0x00, 0x49, 0x0b, 0xca, 0x08, 0xc1, 0x08, - 0xca, 0x08, 0xc1, 0x08, 0xca, 0x0c, 0xc1, 0x0c, - 0x78, 0x01, 0x48, 0x08, 0x70, 0x01, 0x78, 0x00, - 0x28, 0x01, 0xd1, 0x04, 0xf0, 0x00, 0xf8, 0x41, - 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x28, 0x2e, 0x08, 0x1a, 0x50, - 0xb5, 0x90, 0x27, 0x00, 0x48, 0x13, 0x70, 0x07, - 0x20, 0x02, 0xf0, 0x04, 0xfb, 0x57, 0x28, 0x00, - 0xd1, 0x03, 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0x21, 0x01, 0x4a, 0x0e, - 0x00, 0x43, 0x18, 0x1b, 0x00, 0x9b, 0x18, 0x9c, - 0x70, 0xa1, 0x52, 0xd7, 0x30, 0x01, 0x28, 0x02, - 0xdb, 0xf6, 0x22, 0x00, 0x1c, 0x08, 0x4c, 0x09, - 0x00, 0x53, 0x18, 0x9b, 0x00, 0xdb, 0x19, 0x19, - 0x70, 0x88, 0x52, 0xe7, 0x70, 0xcf, 0x32, 0x01, - 0x2a, 0x08, 0xdb, 0xf5, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x50, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x60, - 0xb5, 0x00, 0xf0, 0x04, 0xf9, 0xe7, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x80, 0x20, 0x00, 0x49, 0x17, - 0x78, 0x09, 0x29, 0x01, 0xd1, 0x26, 0x49, 0x16, - 0x78, 0x4a, 0x2a, 0x14, 0xd0, 0x18, 0xdc, 0x09, - 0x2a, 0x11, 0xd0, 0x12, 0x2a, 0x12, 0xd0, 0x16, - 0x2a, 0x13, 0xd1, 0x16, 0x68, 0x8f, 0xf0, 0x00, - 0xf8, 0x77, 0xe0, 0x12, 0x2a, 0x15, 0xd0, 0x05, - 0x2a, 0x23, 0xd1, 0x0e, 0x68, 0x8f, 0xf0, 0x00, - 0xf8, 0xaf, 0xe0, 0x0a, 0xf0, 0x00, 0xf8, 0x8a, - 0xe0, 0x07, 0xf0, 0x00, 0xf8, 0x13, 0xe0, 0x04, - 0xf0, 0x00, 0xf8, 0x4a, 0xe0, 0x01, 0xf0, 0x00, - 0xf8, 0x2d, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x04, 0xfa, 0xe6, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x50, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0d, 0x79, 0xa0, 0x28, 0x01, 0xd1, 0x12, - 0xf0, 0x00, 0xf9, 0x1c, 0x1c, 0x07, 0xd5, 0x01, - 0x20, 0x00, 0xe0, 0x0d, 0x88, 0xa4, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x11, 0x1c, 0x38, 0xf0, 0x00, - 0xfa, 0x0d, 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf9, 0x47, 0x20, 0x01, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0a, 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x96, - 0x1c, 0x07, 0xd4, 0x0a, 0x88, 0xa4, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x12, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0xf1, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf9, 0x2d, 0x20, 0x01, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x28, - 0xb5, 0xb0, 0xb0, 0x81, 0x4c, 0x0b, 0x88, 0xa0, - 0xf0, 0x00, 0xf8, 0x7c, 0x1c, 0x07, 0xd4, 0x0c, - 0x88, 0xa5, 0x79, 0xa2, 0x46, 0x6b, 0x21, 0x14, - 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xd7, 0x28, 0x00, - 0xd0, 0x03, 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, - 0xf9, 0x11, 0x20, 0x01, 0xb0, 0x01, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x28, - 0xb5, 0x90, 0xb0, 0x81, 0x4c, 0x0c, 0x88, 0xa0, - 0xf0, 0x00, 0xf8, 0x60, 0x1c, 0x07, 0xd4, 0x0c, - 0x68, 0xa0, 0x78, 0x01, 0x88, 0xa0, 0xf0, 0x00, - 0xf8, 0x71, 0x1c, 0x02, 0xd4, 0x07, 0x46, 0x6b, - 0x21, 0x13, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xb6, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0d, 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x42, - 0x1c, 0x07, 0xd4, 0x0f, 0x00, 0x78, 0x19, 0xc0, - 0x00, 0x80, 0x49, 0x0a, 0x18, 0x40, 0x7a, 0x01, - 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x4f, 0x1c, 0x02, - 0xd4, 0x04, 0x46, 0x6b, 0x21, 0x15, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x94, 0x20, 0x01, 0xb0, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x28, 0x2e, 0x08, 0x4f, 0x48, - 0xb5, 0x90, 0xb0, 0x81, 0x4f, 0x10, 0x88, 0xb8, - 0xf0, 0x00, 0xf8, 0x20, 0x1c, 0x04, 0xd4, 0x14, - 0x79, 0xb9, 0x88, 0xb8, 0xf0, 0x00, 0xf8, 0x32, - 0x1c, 0x02, 0xd5, 0x08, 0x79, 0xba, 0x88, 0xb9, - 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x49, 0x1c, 0x02, - 0xd5, 0x01, 0x20, 0x00, 0xe0, 0x08, 0x46, 0x6b, - 0x21, 0x23, 0x1c, 0x20, 0xf0, 0x00, 0xf9, 0x6e, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x28, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x08, 0x00, 0x43, - 0x18, 0x1b, 0x00, 0x9b, 0x18, 0x5f, 0x78, 0xbf, - 0x2f, 0x01, 0xd0, 0x02, 0x5a, 0xcb, 0x42, 0x93, - 0xd0, 0x04, 0x30, 0x01, 0x28, 0x02, 0xdb, 0xf2, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x4f, 0x48, 0xb4, 0xb0, 0x04, 0x02, - 0x0c, 0x12, 0x06, 0x0f, 0x0e, 0x3f, 0x20, 0x00, - 0x49, 0x0a, 0x00, 0x44, 0x18, 0x24, 0x00, 0xe4, - 0x18, 0x63, 0x78, 0x9d, 0x2d, 0x01, 0xd0, 0x05, - 0x5b, 0x0c, 0x42, 0x94, 0xd1, 0x02, 0x78, 0xdb, - 0x42, 0xbb, 0xd0, 0x04, 0x30, 0x01, 0x28, 0x08, - 0xdb, 0xef, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x4f, 0x60, - 0xb5, 0xb0, 0x04, 0x09, 0x0c, 0x09, 0x06, 0x12, - 0x0e, 0x12, 0x24, 0x00, 0x1c, 0x07, 0x48, 0x13, - 0x00, 0x63, 0x19, 0x1b, 0x00, 0xdb, 0x18, 0x1b, - 0x78, 0x9b, 0x2b, 0x01, 0xd1, 0x16, 0x00, 0x63, - 0x19, 0x1b, 0x00, 0xdb, 0x18, 0x1d, 0x70, 0xea, - 0x52, 0xc1, 0x20, 0x03, 0x70, 0xa8, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x9a, 0x00, 0x78, 0x19, 0xc0, - 0x00, 0x80, 0x49, 0x09, 0x18, 0x40, 0x88, 0xc1, - 0x31, 0x01, 0x80, 0xc1, 0x1c, 0x20, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x34, 0x01, 0x2c, 0x08, - 0xdb, 0xde, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x60, - 0x2e, 0x08, 0x4f, 0x48, 0xb4, 0x90, 0x20, 0x00, - 0x4c, 0x19, 0x4f, 0x1a, 0x88, 0xba, 0x49, 0x1a, - 0x00, 0x43, 0x18, 0x1b, 0x00, 0x9b, 0x18, 0x5b, - 0x78, 0x9b, 0x2b, 0x01, 0xd1, 0x17, 0x00, 0x43, - 0x18, 0x1b, 0x00, 0x9b, 0x52, 0xca, 0x22, 0x02, - 0x18, 0x59, 0x70, 0x8a, 0x22, 0x00, 0x80, 0xca, - 0x72, 0x4a, 0x89, 0x3a, 0x2a, 0x10, 0xdb, 0x03, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x9a, 0xdd, 0x03, - 0x20, 0x02, 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, - 0x80, 0x8a, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x43, - 0x18, 0x1b, 0x00, 0xdb, 0x5a, 0xe3, 0x42, 0x93, - 0xd1, 0x03, 0x20, 0x01, 0x43, 0xc0, 0xbc, 0x90, - 0x47, 0x70, 0x30, 0x01, 0x28, 0x02, 0xdb, 0xd3, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x4f, 0x60, 0x2e, 0x08, 0x4f, 0x28, - 0x2e, 0x08, 0x4f, 0x48, 0xb5, 0xf0, 0x04, 0x0e, - 0x0c, 0x36, 0x1c, 0x07, 0xd5, 0x06, 0x2f, 0x02, - 0xdb, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, 0x00, 0x7b, - 0x19, 0xdb, 0x00, 0x9b, 0x49, 0x0e, 0x18, 0x5a, - 0x70, 0x90, 0x22, 0x00, 0x52, 0xca, 0x24, 0x00, - 0x4d, 0x0c, 0x00, 0x60, 0x19, 0x00, 0x00, 0xc0, - 0x5a, 0x29, 0x42, 0xb1, 0xd1, 0x08, 0x22, 0x00, - 0x19, 0x41, 0x70, 0xca, 0x52, 0x2a, 0x20, 0x01, - 0x70, 0x88, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x20, - 0x34, 0x01, 0x2c, 0x08, 0xdb, 0xed, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x60, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x04, - 0xf8, 0x6b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x00, 0x49, 0x03, - 0x78, 0x08, 0xf0, 0x04, 0xf8, 0x61, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x4f, 0x38, - 0xb5, 0xf0, 0x01, 0x46, 0x18, 0x36, 0x00, 0xb6, - 0x1c, 0x07, 0xb0, 0x84, 0x48, 0x0c, 0x90, 0x03, - 0x18, 0x34, 0x68, 0xa0, 0x28, 0x00, 0xd0, 0x0a, - 0x46, 0x69, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x3e, - 0x1c, 0x05, 0xd0, 0x02, 0x98, 0x01, 0xf0, 0x04, - 0xf9, 0x23, 0x2d, 0x00, 0xd1, 0xf4, 0x20, 0x00, - 0x99, 0x03, 0x51, 0x88, 0x60, 0x60, 0x60, 0xa0, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x50, 0x20, 0xb4, 0xb0, 0x01, 0x43, - 0x18, 0x18, 0x00, 0x80, 0x4a, 0x12, 0x18, 0x82, - 0x20, 0x00, 0x68, 0x93, 0x2b, 0x0a, 0xda, 0x1d, - 0x33, 0x01, 0x60, 0x93, 0x78, 0x8c, 0x68, 0x55, - 0x00, 0x6b, 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xd3, - 0x73, 0x9c, 0x68, 0x4c, 0x68, 0x55, 0x00, 0x6b, - 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xd3, 0x61, 0x1c, - 0x89, 0x0f, 0x68, 0x54, 0x00, 0x63, 0x19, 0x1b, - 0x00, 0x9b, 0x18, 0xd1, 0x82, 0x8f, 0x68, 0x51, - 0x31, 0x01, 0x60, 0x51, 0x29, 0x0a, 0xdb, 0x00, - 0x60, 0x50, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x50, 0x20, 0xb4, 0xb0, 0x01, 0x47, - 0x18, 0x3f, 0x00, 0xbf, 0x4a, 0x12, 0x18, 0xbc, - 0x20, 0x00, 0x68, 0xa3, 0x2b, 0x00, 0xdd, 0x1d, - 0x3b, 0x01, 0x60, 0xa3, 0x59, 0xd5, 0x00, 0x6b, - 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xe3, 0x7b, 0x9b, - 0x70, 0x8b, 0x59, 0xd5, 0x00, 0x6b, 0x19, 0x5b, - 0x00, 0x9b, 0x18, 0xe3, 0x69, 0x1b, 0x60, 0x4b, - 0x59, 0xd5, 0x00, 0x6b, 0x19, 0x5b, 0x00, 0x9b, - 0x18, 0xe3, 0x8a, 0x9b, 0x81, 0x0b, 0x59, 0xd1, - 0x31, 0x01, 0x51, 0xd1, 0x29, 0x0a, 0xdb, 0x00, - 0x51, 0xd0, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x50, 0x20, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x1c, 0x1f, 0x00, 0x43, 0x18, 0x1b, - 0x00, 0x9b, 0x4c, 0x0f, 0x19, 0x1b, 0x78, 0x9b, - 0x2b, 0x02, 0xd0, 0x0f, 0x2b, 0x03, 0xd0, 0x07, - 0x2b, 0x04, 0xd1, 0x11, 0x1c, 0x3b, 0xf0, 0x00, - 0xf9, 0x27, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xf8, 0x37, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3a, 0xf0, 0x00, - 0xf8, 0x09, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x48, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x23, 0x01, 0x60, 0x13, 0x29, 0x11, - 0xd1, 0x17, 0x22, 0x23, 0x49, 0x0d, 0x70, 0x0a, - 0x22, 0x21, 0x70, 0x4a, 0x22, 0x04, 0x80, 0x4a, - 0x00, 0x44, 0x18, 0x24, 0x00, 0xa4, 0x4f, 0x0a, - 0x5b, 0x38, 0x80, 0x88, 0xf7, 0xff, 0xff, 0x34, - 0x28, 0x00, 0xd0, 0x06, 0x20, 0x03, 0x19, 0xe1, - 0x70, 0x88, 0x20, 0x01, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x4f, 0x28, - 0x2e, 0x08, 0x4f, 0x48, 0xb5, 0xff, 0x06, 0x09, - 0x0e, 0x09, 0x27, 0x00, 0x20, 0x00, 0xb0, 0x84, - 0x60, 0x18, 0x1c, 0x1e, 0x98, 0x04, 0x00, 0x43, - 0x18, 0x18, 0x00, 0x80, 0x90, 0x03, 0x4a, 0x6a, - 0x92, 0x02, 0x18, 0x84, 0x25, 0x02, 0x48, 0x69, - 0x29, 0x12, 0xd0, 0x71, 0x9a, 0x06, 0x00, 0x53, - 0x18, 0x9a, 0x00, 0xd2, 0x4b, 0x66, 0x18, 0xd2, - 0x92, 0x01, 0x29, 0x13, 0xd0, 0x17, 0x29, 0x14, - 0xd0, 0x67, 0x29, 0x23, 0xd1, 0x66, 0x89, 0x82, - 0x99, 0x06, 0xb4, 0x04, 0x68, 0x83, 0x9d, 0x02, - 0x78, 0xea, 0x98, 0x05, 0xf0, 0x00, 0xf9, 0x52, - 0xb0, 0x01, 0x1c, 0x07, 0xd0, 0x5b, 0x89, 0xa8, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x01, 0x60, 0x30, - 0x21, 0x04, 0x70, 0xa1, 0xe0, 0x97, 0x68, 0x81, - 0x78, 0x4a, 0x23, 0x80, 0x40, 0x1a, 0x88, 0xc0, - 0x1e, 0x83, 0x04, 0x1d, 0x0c, 0x2d, 0x31, 0x02, - 0x91, 0x00, 0x2a, 0x80, 0xd1, 0x28, 0x88, 0xa1, - 0x42, 0x81, 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x87, - 0x9c, 0x01, 0x8a, 0xa1, 0x29, 0x00, 0xd1, 0x0c, - 0x1c, 0x28, 0xf0, 0x03, 0xff, 0xfb, 0x61, 0x20, - 0x28, 0x00, 0xd0, 0xf3, 0x82, 0xa5, 0x69, 0x20, - 0x99, 0x00, 0x1c, 0x2a, 0xf0, 0x16, 0xff, 0x12, - 0xe0, 0x75, 0x19, 0x48, 0x04, 0x02, 0x0c, 0x12, - 0x69, 0x20, 0xf0, 0x03, 0xff, 0xf0, 0x28, 0x00, - 0xd0, 0xe4, 0x61, 0x20, 0x8a, 0xa1, 0x18, 0x40, - 0x99, 0x00, 0x1c, 0x2a, 0xf0, 0x16, 0xff, 0x02, - 0x8a, 0xa0, 0x19, 0x40, 0x82, 0xa0, 0xe0, 0x62, - 0x9e, 0x01, 0x8a, 0xb1, 0x4c, 0x3d, 0x29, 0x00, - 0xd1, 0x1a, 0x1c, 0x28, 0xf0, 0x03, 0xff, 0xd6, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xce, 0x21, 0x23, - 0x70, 0x21, 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, - 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, 0x80, 0xa1, - 0x78, 0xf1, 0x71, 0xa1, 0x81, 0xa5, 0x99, 0x00, - 0x1c, 0x2a, 0xf0, 0x16, 0xfe, 0xe3, 0xe0, 0x24, - 0xe0, 0x4b, 0xe0, 0x2e, 0xe0, 0x43, 0xe0, 0x42, - 0x19, 0x48, 0x04, 0x02, 0x0c, 0x12, 0x69, 0x30, - 0xf0, 0x03, 0xff, 0xbd, 0x28, 0x00, 0xd0, 0xb1, - 0x61, 0x30, 0x8a, 0xb1, 0x18, 0x40, 0x99, 0x00, - 0x1c, 0x2a, 0xf0, 0x16, 0xfe, 0xcf, 0x8a, 0xb0, - 0x19, 0x40, 0x82, 0xb0, 0x21, 0x23, 0x70, 0x21, - 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, 0x98, 0x03, - 0x9a, 0x02, 0x5a, 0x10, 0x80, 0xa0, 0x78, 0xf0, - 0x71, 0xa0, 0x8a, 0xb0, 0x81, 0xa0, 0x69, 0x30, - 0x60, 0xa0, 0xf7, 0xff, 0xfe, 0x7f, 0x28, 0x00, - 0xd1, 0x03, 0x68, 0xa0, 0xf0, 0x03, 0xff, 0xbc, - 0xe0, 0x19, 0x20, 0x00, 0x82, 0xb0, 0x61, 0x30, - 0xe0, 0x14, 0x9a, 0x06, 0x06, 0x11, 0x0e, 0x09, - 0x29, 0x02, 0xd1, 0x10, 0x21, 0x23, 0x70, 0x01, - 0x21, 0x22, 0x70, 0x41, 0x21, 0x04, 0x80, 0x41, - 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, 0x80, 0x81, - 0xf7, 0xff, 0xfe, 0x5a, 0x28, 0x00, 0xd1, 0x00, - 0xe7, 0x78, 0x70, 0xa5, 0x27, 0x01, 0x1c, 0x38, - 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x23, 0x70, 0x01, 0x21, 0x22, - 0x70, 0x41, 0x21, 0x04, 0x80, 0x41, 0x99, 0x03, - 0x9a, 0x02, 0x5a, 0x51, 0x80, 0x81, 0xf7, 0xff, - 0xfe, 0x43, 0x28, 0x00, 0xd1, 0xe9, 0xe7, 0x61, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x28, - 0x2e, 0x08, 0x4f, 0x60, 0x2e, 0x08, 0x4f, 0x38, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x24, 0x00, - 0x20, 0x00, 0x60, 0x18, 0x1c, 0x1f, 0xb0, 0x84, - 0x29, 0x14, 0xd0, 0x04, 0xdc, 0x09, 0x29, 0x12, - 0xd0, 0x01, 0x29, 0x13, 0xd1, 0x65, 0x98, 0x04, - 0x1c, 0x3b, 0xf7, 0xff, 0xff, 0x03, 0x1c, 0x04, - 0xe0, 0x6e, 0x29, 0x15, 0xd0, 0x0a, 0x29, 0x23, - 0xd1, 0x5b, 0x49, 0x38, 0x1c, 0x10, 0xf7, 0xff, - 0xfe, 0x51, 0x1c, 0x04, 0xd0, 0x64, 0x20, 0x01, - 0x60, 0x38, 0xe0, 0x61, 0x1c, 0x17, 0x22, 0x00, - 0x98, 0x04, 0x00, 0x43, 0x18, 0x18, 0x00, 0x80, - 0x49, 0x31, 0x18, 0x43, 0x93, 0x03, 0x72, 0x5a, - 0x5a, 0x0a, 0x92, 0x00, 0x9b, 0x03, 0x88, 0xd8, - 0x28, 0x01, 0xd0, 0x03, 0x37, 0x01, 0x2f, 0x08, - 0xd1, 0x00, 0x27, 0x00, 0x26, 0x00, 0x48, 0x2b, - 0x90, 0x01, 0x1d, 0x01, 0x91, 0x02, 0x4d, 0x2a, - 0x00, 0x78, 0x19, 0xc0, 0x00, 0xc0, 0x5a, 0x29, - 0x9a, 0x00, 0x42, 0x91, 0xd1, 0x32, 0x19, 0x40, - 0x89, 0x80, 0x28, 0x00, 0xdd, 0x0e, 0x22, 0x00, - 0xb4, 0x04, 0x00, 0x78, 0x19, 0xc0, 0x00, 0xc0, - 0x19, 0x40, 0x78, 0xc2, 0x23, 0x00, 0x98, 0x05, - 0x1c, 0x39, 0xf0, 0x00, 0xf8, 0x3f, 0x1c, 0x04, - 0xb0, 0x01, 0xe0, 0x26, 0x99, 0x02, 0x1c, 0x38, - 0xf7, 0xff, 0xfe, 0x40, 0x1c, 0x04, 0xd0, 0x19, - 0x98, 0x01, 0x89, 0x82, 0xb4, 0x04, 0x98, 0x02, - 0x68, 0x84, 0x00, 0x78, 0x19, 0xc0, 0x00, 0xc0, - 0x19, 0x45, 0x78, 0xea, 0x98, 0x05, 0x1c, 0x39, - 0x1c, 0x23, 0x1c, 0x2e, 0xf0, 0x00, 0xf8, 0x26, - 0x1c, 0x04, 0x89, 0xa8, 0xb0, 0x01, 0x28, 0x00, - 0xd1, 0x0b, 0x68, 0x70, 0xf0, 0x03, 0xff, 0x10, - 0xe0, 0x07, 0xe0, 0x0d, 0x36, 0x01, 0x37, 0x01, - 0x2f, 0x08, 0xd1, 0x00, 0x27, 0x00, 0x2e, 0x08, - 0xdb, 0xbe, 0x9b, 0x03, 0x7a, 0x58, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0x03, 0x9b, 0x03, 0x70, 0x98, - 0x1c, 0x20, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x2c, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x38, - 0x2e, 0x08, 0x4f, 0x60, 0xb5, 0xff, 0x06, 0x16, - 0x0e, 0x36, 0x9f, 0x09, 0x04, 0x3c, 0x0c, 0x24, - 0x1c, 0x18, 0x00, 0x4b, 0x18, 0x59, 0x00, 0xc9, - 0xb0, 0x85, 0x4a, 0x30, 0x18, 0x8f, 0x28, 0x00, - 0xd1, 0x02, 0x89, 0xbc, 0x68, 0xbd, 0xe0, 0x03, - 0x60, 0x78, 0x60, 0xb8, 0x81, 0xbc, 0x1c, 0x05, - 0x99, 0x05, 0x00, 0x4b, 0x18, 0x5b, 0x00, 0x9b, - 0x93, 0x04, 0x1c, 0xa2, 0x49, 0x28, 0x91, 0x03, - 0x18, 0x59, 0x91, 0x02, 0x88, 0x89, 0x42, 0x8a, - 0xdd, 0x0a, 0x20, 0x80, 0x90, 0x00, 0x1e, 0x88, - 0x04, 0x04, 0x0c, 0x24, 0x19, 0x28, 0x60, 0xb8, - 0x89, 0xb8, 0x1b, 0x00, 0x81, 0xb8, 0xe0, 0x09, - 0x21, 0x00, 0x91, 0x00, 0x81, 0xb9, 0x28, 0x00, - 0xd1, 0x04, 0x68, 0x78, 0xf0, 0x03, 0xfe, 0xbc, - 0x21, 0x00, 0x60, 0x79, 0x1c, 0xa0, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x01, 0xf0, 0x03, 0xfe, 0x8e, - 0x4f, 0x18, 0x60, 0xb8, 0x1c, 0x01, 0xd1, 0x01, - 0x20, 0x00, 0xe0, 0x22, 0x20, 0x21, 0x70, 0x38, - 0x20, 0x13, 0x70, 0x78, 0x20, 0x08, 0x80, 0x78, - 0x98, 0x04, 0x9a, 0x03, 0x5a, 0x10, 0x80, 0xb8, - 0x98, 0x01, 0x80, 0xf8, 0x70, 0x0e, 0x98, 0x00, - 0x68, 0xb9, 0x70, 0x48, 0x68, 0xb8, 0x30, 0x02, - 0x1c, 0x29, 0x1c, 0x22, 0xf0, 0x16, 0xfd, 0x92, - 0xf7, 0xff, 0xfd, 0x54, 0x28, 0x00, 0xd1, 0x03, - 0x68, 0xb8, 0xf0, 0x03, 0xfe, 0x91, 0xe7, 0xdf, - 0x99, 0x02, 0x72, 0x0e, 0x20, 0x01, 0x99, 0x02, - 0x72, 0x48, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x60, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x38, - 0xb5, 0xf0, 0x4d, 0x15, 0x69, 0x68, 0x28, 0x00, - 0xd1, 0x06, 0x20, 0xff, 0x30, 0x01, 0xf0, 0x03, - 0xfe, 0x51, 0x61, 0x68, 0x28, 0x00, 0xd0, 0x11, - 0x27, 0x00, 0x4c, 0x10, 0x21, 0x01, 0x01, 0x3e, - 0x19, 0x30, 0x81, 0x01, 0x21, 0x00, 0x60, 0xc1, - 0x20, 0x00, 0x1c, 0x39, 0xf0, 0x05, 0xf9, 0x90, - 0x04, 0x00, 0x0c, 0x00, 0x53, 0xa0, 0x04, 0x00, - 0x14, 0x00, 0xd5, 0x04, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x37, 0x01, - 0x2f, 0x02, 0xdb, 0xe7, 0x21, 0x00, 0x82, 0x29, - 0x20, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x54, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf7, 0x04, 0x01, 0x0c, 0x09, 0x04, 0x16, - 0x0c, 0x36, 0x27, 0x00, 0x48, 0x12, 0x01, 0x3a, - 0x5a, 0x82, 0x42, 0x8a, 0xd0, 0x02, 0x37, 0x01, - 0x2f, 0x02, 0xdb, 0xf8, 0x2f, 0x02, 0xda, 0x17, - 0x24, 0x00, 0x99, 0x01, 0x1c, 0x38, 0x1c, 0x32, - 0xf0, 0x00, 0xf9, 0xd6, 0x1c, 0x05, 0x28, 0x02, - 0xd1, 0x05, 0x20, 0x14, 0xf0, 0x03, 0xfe, 0x3e, - 0x34, 0x01, 0x2c, 0x0a, 0xd0, 0x08, 0x2d, 0x02, - 0xd0, 0xef, 0x2d, 0x00, 0xd1, 0x04, 0x20, 0x00, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x43, 0xc0, 0xe7, 0xf8, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x4f, 0x14, - 0x26, 0x00, 0x69, 0x78, 0x28, 0x00, 0xd0, 0x02, - 0xf0, 0x03, 0xfe, 0x1a, 0x61, 0x7e, 0x24, 0x00, - 0x4d, 0x10, 0x01, 0x27, 0x5b, 0xe8, 0x28, 0x00, - 0xdd, 0x02, 0xf0, 0x05, 0xf9, 0xe7, 0x53, 0xee, - 0x19, 0x78, 0x68, 0xc7, 0x2f, 0x00, 0xd0, 0x0c, - 0x68, 0x38, 0x28, 0x00, 0xd0, 0x06, 0x1c, 0x38, - 0x68, 0x3f, 0xf0, 0x03, 0xfe, 0x05, 0x68, 0x38, - 0x28, 0x00, 0xd1, 0xf8, 0x1c, 0x38, 0xf0, 0x03, - 0xfd, 0xff, 0x34, 0x01, 0x2c, 0x02, 0xdb, 0xe4, - 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x54, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf0, 0x1c, 0x07, 0x20, 0x03, 0x1c, 0x0d, - 0x01, 0x39, 0x1c, 0x14, 0x4a, 0x12, 0x18, 0x8e, - 0x81, 0x30, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x22, - 0x28, 0x00, 0xd1, 0x10, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x6d, 0x28, 0x00, 0xd0, 0x04, 0x28, 0x07, - 0xd1, 0x12, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x22, 0xf0, 0x00, - 0xf8, 0xb3, 0x28, 0x00, 0xd0, 0x04, 0x20, 0x01, - 0x81, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x27, 0x01, - 0xb0, 0x81, 0xab, 0x00, 0x70, 0x1f, 0x01, 0x05, - 0x4c, 0x15, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x06, - 0xf0, 0x05, 0xf9, 0x56, 0x28, 0x00, 0xdd, 0x1d, - 0xa8, 0x00, 0x78, 0x40, 0x28, 0x00, 0xd0, 0x19, - 0x27, 0x00, 0x20, 0x02, 0xab, 0x00, 0x70, 0x18, - 0x26, 0x06, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x06, - 0xf0, 0x05, 0xf9, 0x46, 0x28, 0x00, 0xdb, 0x05, - 0x20, 0x14, 0xf0, 0x03, 0xfd, 0xaf, 0x37, 0x01, - 0x2f, 0x0a, 0xd1, 0x01, 0x1c, 0x30, 0xe0, 0x06, - 0xa8, 0x00, 0x78, 0x40, 0x28, 0x00, 0xd0, 0xec, - 0x20, 0x00, 0xe0, 0x00, 0x1c, 0x38, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0x80, 0x27, 0x01, - 0xb0, 0x81, 0xab, 0x00, 0x70, 0x1f, 0x01, 0x00, - 0x49, 0x09, 0x5a, 0x08, 0x46, 0x6a, 0x21, 0x06, - 0xf0, 0x05, 0xf9, 0x22, 0x28, 0x00, 0xdd, 0x05, - 0xa8, 0x00, 0x78, 0x40, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x00, 0xe0, 0x00, 0x1c, 0x38, 0xb0, 0x01, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x27, 0x00, - 0x26, 0x06, 0x01, 0x05, 0xb0, 0xff, 0xb0, 0x87, - 0x4c, 0x24, 0x20, 0x00, 0xab, 0x00, 0x80, 0x18, - 0x20, 0x01, 0x02, 0x40, 0x80, 0x58, 0xa8, 0x05, - 0x90, 0x01, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x02, - 0xf0, 0x05, 0xf8, 0xfe, 0x28, 0x00, 0xda, 0x01, - 0x1c, 0x30, 0xe0, 0x2f, 0xa9, 0x02, 0x88, 0x09, - 0xa8, 0x05, 0xaa, 0x03, 0xab, 0x04, 0xf0, 0x00, - 0xfa, 0x73, 0x28, 0x00, 0xda, 0x2b, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x20, 0xc8, 0xf0, 0x03, - 0xfd, 0x59, 0x2f, 0x0a, 0xdb, 0xdd, 0x2f, 0x0a, - 0xd0, 0xea, 0xa8, 0x03, 0x88, 0x00, 0xab, 0x00, - 0x80, 0x18, 0x27, 0x01, 0x80, 0x5f, 0xa8, 0x04, - 0x90, 0x01, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x03, - 0xf0, 0x05, 0xf8, 0xda, 0x28, 0x00, 0xdb, 0xdb, - 0xa8, 0x02, 0x88, 0x00, 0x28, 0x01, 0xd1, 0xd7, - 0xab, 0x85, 0x70, 0x5f, 0x27, 0x00, 0x70, 0x1f, - 0x5b, 0x60, 0x21, 0x07, 0xaa, 0x85, 0xf0, 0x05, - 0xf8, 0xcb, 0x1c, 0x38, 0xb0, 0x7f, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x27, 0x00, - 0xe7, 0xd9, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf7, 0x1c, 0x07, 0x20, 0x00, 0xb0, 0x84, - 0x4c, 0x5b, 0x70, 0x20, 0xab, 0x00, 0x70, 0x58, - 0x70, 0x18, 0x01, 0x38, 0x49, 0x59, 0x5a, 0x08, - 0x46, 0x6a, 0x21, 0x07, 0xf0, 0x05, 0xf8, 0xb0, - 0x28, 0x00, 0xdb, 0x2f, 0x1d, 0x22, 0x92, 0x03, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x04, - 0x28, 0x01, 0xd0, 0x27, 0x78, 0x20, 0x23, 0x08, - 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, - 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xd3, 0x28, 0x01, - 0xd0, 0x1c, 0x78, 0x20, 0x23, 0xf7, 0x40, 0x18, - 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0xc8, 0x28, 0x01, 0xd0, 0x11, - 0x21, 0x01, 0x9a, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0xe7, 0x28, 0x01, 0xd0, 0x0a, 0x78, 0x20, - 0x23, 0x04, 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xb6, - 0x28, 0x01, 0xd1, 0x01, 0x20, 0x05, 0xe0, 0x71, - 0x25, 0x00, 0x23, 0x01, 0x1c, 0x38, 0xa9, 0x02, - 0xaa, 0x01, 0xf0, 0x00, 0xf9, 0x33, 0x1c, 0x06, - 0x28, 0x01, 0xd0, 0xf3, 0x20, 0x14, 0xf0, 0x03, - 0xfc, 0xdd, 0x35, 0x01, 0x2d, 0x0a, 0xd0, 0xed, - 0x2e, 0x03, 0xd0, 0xee, 0x2e, 0x02, 0xd0, 0xec, - 0xa8, 0x02, 0x78, 0x00, 0x02, 0x00, 0xa9, 0x02, - 0x78, 0x49, 0x18, 0x40, 0x9a, 0x06, 0x60, 0x10, - 0x99, 0x05, 0x42, 0x88, 0xd9, 0x08, 0x99, 0x05, - 0x0a, 0x08, 0xab, 0x02, 0x70, 0x18, 0x99, 0x05, - 0x70, 0x59, 0x99, 0x05, 0x9a, 0x06, 0x60, 0x11, - 0x78, 0x20, 0x23, 0xfb, 0x40, 0x18, 0x70, 0x20, - 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0x81, 0x28, 0x01, 0xd0, 0x0a, 0x78, 0x20, - 0x23, 0x02, 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x76, - 0x28, 0x01, 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x31, - 0x25, 0x00, 0x22, 0x02, 0x1c, 0x38, 0xa9, 0x02, - 0xf0, 0x00, 0xf8, 0x36, 0x1c, 0x06, 0x28, 0x01, - 0xd0, 0xb4, 0x20, 0x14, 0xf0, 0x03, 0xfc, 0x9e, - 0x35, 0x01, 0x2d, 0x0a, 0xd0, 0xae, 0x2e, 0x02, - 0xd0, 0xef, 0x78, 0x20, 0x23, 0xfd, 0x40, 0x18, - 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x58, 0x28, 0x01, 0xd0, 0xe1, - 0x25, 0x00, 0x21, 0x01, 0x9a, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x76, 0x28, 0x01, 0xd0, 0x99, - 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, 0x71, 0x20, - 0x20, 0x14, 0xf0, 0x03, 0xfc, 0x7f, 0x35, 0x01, - 0x2d, 0x0a, 0xd0, 0x8f, 0x79, 0x20, 0x09, 0xc0, - 0xd3, 0xeb, 0x20, 0x00, 0xb0, 0x04, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x54, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf7, 0x04, 0x15, 0x0c, 0x2d, 0x1c, 0x07, - 0x01, 0x00, 0xb0, 0x82, 0x90, 0x01, 0x49, 0x3d, - 0x91, 0x00, 0x18, 0x40, 0x89, 0x00, 0x28, 0x01, - 0xd0, 0x07, 0x4a, 0x3b, 0x21, 0x01, 0x1c, 0x38, - 0x1c, 0x16, 0xf0, 0x00, 0xf9, 0x49, 0x28, 0x01, - 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x64, 0x4c, 0x37, - 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, 0x71, 0x20, - 0x79, 0x20, 0x0a, 0x00, 0xd3, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x66, 0x21, 0x01, 0x1c, 0x38, - 0x1c, 0x32, 0xf0, 0x00, 0xf9, 0x35, 0x28, 0x01, - 0xd0, 0xeb, 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, - 0x71, 0x20, 0x79, 0x20, 0x09, 0xc0, 0xd2, 0x01, - 0x20, 0x02, 0xe0, 0x49, 0x78, 0x20, 0x23, 0x01, - 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xfb, 0x28, 0x01, - 0xd0, 0xd7, 0x06, 0x2a, 0x0e, 0x12, 0x21, 0x02, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xf3, 0x28, 0x01, - 0xd0, 0xcf, 0x0a, 0x2a, 0x21, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xec, 0x28, 0x01, 0xd0, 0xc8, - 0x98, 0x01, 0x99, 0x00, 0x5a, 0x08, 0x9a, 0x03, - 0x1c, 0x29, 0xf0, 0x04, 0xff, 0x55, 0x42, 0xa8, - 0xd1, 0xbf, 0x21, 0x01, 0x1c, 0x38, 0x1c, 0x32, - 0xf0, 0x00, 0xf9, 0x02, 0x28, 0x01, 0xd0, 0xb8, - 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, 0x71, 0x20, - 0x79, 0x20, 0x08, 0x80, 0xd3, 0x0c, 0x78, 0x20, - 0x23, 0xfe, 0x40, 0x18, 0x70, 0x20, 0x78, 0x22, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xca, - 0x28, 0x01, 0xd0, 0xa6, 0x20, 0x04, 0xe0, 0x0b, - 0x78, 0x20, 0x23, 0xfe, 0x40, 0x18, 0x70, 0x20, - 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0xbd, 0x28, 0x01, 0xd0, 0x99, 0x20, 0x00, - 0xb0, 0x02, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x50, - 0x2e, 0x08, 0x1a, 0x58, 0x2e, 0x08, 0x1a, 0x54, - 0xb5, 0xf0, 0xb0, 0x81, 0x46, 0x6a, 0x1c, 0x07, - 0x4e, 0x16, 0x25, 0x00, 0x69, 0x71, 0x1c, 0x2b, - 0xf0, 0x00, 0xf8, 0x2c, 0x28, 0x00, 0xd1, 0x21, - 0xa8, 0x00, 0x88, 0x00, 0x30, 0x07, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x03, 0xfb, 0xa3, 0x1c, 0x04, - 0xd0, 0x18, 0xa8, 0x00, 0x60, 0x25, 0x88, 0x00, - 0x80, 0xa0, 0xaa, 0x00, 0x88, 0x12, 0x69, 0x71, - 0x1d, 0xa0, 0xf0, 0x16, 0xfa, 0xb7, 0x01, 0x38, - 0x49, 0x09, 0x18, 0x40, 0x68, 0xc1, 0x29, 0x00, - 0xd1, 0x01, 0x60, 0xc4, 0xe0, 0x06, 0x68, 0x08, - 0x28, 0x00, 0xd0, 0x03, 0x68, 0x09, 0x68, 0x08, - 0x28, 0x00, 0xd1, 0xfb, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x54, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x1c, 0x07, - 0x01, 0x00, 0xb0, 0x83, 0x90, 0x02, 0x1c, 0x14, - 0x1c, 0x0d, 0x49, 0x32, 0x91, 0x01, 0x18, 0x46, - 0x89, 0x30, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x58, 0x2b, 0x00, 0xd0, 0x12, 0x68, 0xf0, - 0x28, 0x00, 0xd0, 0x0f, 0x88, 0x82, 0x1d, 0x81, - 0x1c, 0x28, 0xf0, 0x16, 0xfa, 0x87, 0x68, 0xf0, - 0x88, 0x80, 0x80, 0x20, 0x68, 0xf0, 0x1c, 0x01, - 0x68, 0x00, 0x60, 0xf0, 0x1c, 0x08, 0xf0, 0x03, - 0xfb, 0x83, 0xe0, 0x42, 0x4a, 0x24, 0x92, 0x00, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x74, - 0x28, 0x01, 0xd0, 0xe0, 0x4e, 0x21, 0x79, 0x30, - 0x23, 0xc3, 0x40, 0x18, 0x71, 0x30, 0x79, 0x30, - 0x0a, 0x00, 0xd2, 0x01, 0x20, 0x03, 0xe0, 0x31, - 0x4a, 0x1d, 0x21, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x63, 0x28, 0x01, 0xd0, 0xcf, 0x4a, 0x1b, - 0x21, 0x03, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x5c, - 0x28, 0x01, 0xd0, 0xc8, 0x7b, 0x30, 0x02, 0x00, - 0x7a, 0x31, 0x18, 0x40, 0x80, 0x20, 0x88, 0x20, - 0x4b, 0x15, 0x42, 0x98, 0xd0, 0xbf, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x98, 0xdc, 0xbb, 0x1c, 0x38, - 0xf7, 0xff, 0xfd, 0xc0, 0x28, 0x01, 0xd0, 0xb6, - 0x98, 0x02, 0x99, 0x01, 0x5a, 0x08, 0x88, 0x21, - 0x1c, 0x2a, 0xf0, 0x04, 0xfe, 0xb3, 0x88, 0x21, - 0x42, 0x88, 0xd1, 0xac, 0x21, 0x01, 0x9a, 0x00, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x39, 0x28, 0x01, - 0xd0, 0xa5, 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x50, - 0x2e, 0x08, 0x1a, 0x58, 0x2e, 0x08, 0x1a, 0x54, - 0x2e, 0x08, 0x1a, 0x5c, 0x2e, 0x08, 0x1a, 0x60, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0xb0, 0xb0, 0x81, - 0xab, 0x00, 0x70, 0x1a, 0x1c, 0x0c, 0x1c, 0x07, - 0xb0, 0x82, 0xf7, 0xff, 0xfd, 0x93, 0x25, 0x01, - 0x28, 0x01, 0xd1, 0x01, 0x1c, 0x28, 0xe0, 0x11, - 0xab, 0x00, 0x80, 0x1c, 0xa8, 0x02, 0x90, 0x01, - 0x01, 0x3c, 0x4f, 0x08, 0x5b, 0x38, 0x46, 0x6a, - 0x21, 0x05, 0xf0, 0x04, 0xfe, 0xb1, 0x28, 0x00, - 0xda, 0x03, 0x19, 0xe1, 0x81, 0x0d, 0x1c, 0x28, - 0xe0, 0x00, 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf0, 0x1c, 0x14, 0x1c, 0x0d, 0x1c, 0x07, - 0xb0, 0x82, 0xf7, 0xff, 0xfd, 0x6f, 0x26, 0x01, - 0x28, 0x01, 0xd1, 0x01, 0x1c, 0x30, 0xe0, 0x10, - 0xab, 0x00, 0x80, 0x1d, 0x94, 0x01, 0x01, 0x3c, - 0x4f, 0x08, 0x5b, 0x38, 0x46, 0x6a, 0x21, 0x04, - 0xf0, 0x04, 0xfe, 0x8e, 0x28, 0x00, 0xda, 0x03, - 0x19, 0xe1, 0x81, 0x0e, 0x1c, 0x30, 0xe0, 0x00, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xb0, 0xb0, 0x86, 0x90, 0x05, 0x91, 0x04, - 0x20, 0x00, 0x90, 0x01, 0x1c, 0x14, 0x46, 0x6a, - 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, - 0xb4, 0x04, 0x1c, 0x1f, 0x21, 0x1d, 0x20, 0x00, - 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x82, - 0x25, 0x00, 0x43, 0xed, 0xb0, 0x04, 0x28, 0x00, - 0xdb, 0x3b, 0x46, 0x6a, 0xa8, 0x02, 0xa9, 0x01, - 0xb4, 0x07, 0xaa, 0x06, 0xb4, 0x04, 0x21, 0x1c, - 0x20, 0x00, 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, - 0xf8, 0x71, 0xb0, 0x04, 0x28, 0x00, 0xdb, 0x2c, - 0x46, 0x6a, 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, - 0xaa, 0x06, 0xb4, 0x04, 0x21, 0x15, 0x20, 0x00, - 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x62, - 0xb0, 0x04, 0x28, 0x00, 0xdb, 0x1d, 0x46, 0x6a, - 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, - 0xb4, 0x04, 0x21, 0x20, 0x20, 0x00, 0xaa, 0x09, - 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x53, 0xb0, 0x04, - 0x28, 0x00, 0xdb, 0x0e, 0x46, 0x6a, 0xa8, 0x02, - 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, 0xb4, 0x04, - 0x21, 0x1a, 0x20, 0x00, 0xaa, 0x09, 0xab, 0x08, - 0xf0, 0x00, 0xf8, 0x44, 0xb0, 0x04, 0x28, 0x00, - 0xda, 0x01, 0x1c, 0x28, 0xe0, 0x3a, 0x98, 0x02, - 0x80, 0x20, 0x20, 0x01, 0x90, 0x03, 0x43, 0xc4, - 0x46, 0x6a, 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, - 0xaa, 0x06, 0xb4, 0x04, 0x21, 0x1b, 0x20, 0x00, - 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x2e, - 0xb0, 0x04, 0x28, 0x00, 0xd0, 0xf0, 0x42, 0xa0, - 0xd0, 0xee, 0x28, 0x00, 0xdb, 0xe5, 0x46, 0x6a, - 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, - 0xb4, 0x04, 0x21, 0x14, 0x20, 0x00, 0xaa, 0x09, - 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x1b, 0xb0, 0x04, - 0x28, 0x00, 0xdb, 0xd6, 0x46, 0x6a, 0xa8, 0x02, - 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, 0xb4, 0x04, - 0x21, 0xff, 0x20, 0x00, 0xaa, 0x09, 0xab, 0x08, - 0xf0, 0x00, 0xf8, 0x0c, 0xb0, 0x04, 0x28, 0x00, - 0xdb, 0xc7, 0x98, 0x01, 0x28, 0x0f, 0xd1, 0xc4, - 0x70, 0x38, 0x20, 0x01, 0xb0, 0x06, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x06, 0x08, - 0x0e, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x25, 0x00, - 0x24, 0x00, 0x26, 0x00, 0x1c, 0x17, 0x22, 0x00, - 0x21, 0x00, 0xb0, 0x87, 0x91, 0x04, 0x98, 0x07, - 0x28, 0xff, 0xd1, 0x0b, 0x68, 0x38, 0x78, 0x00, - 0x28, 0xff, 0xd1, 0x07, 0x9b, 0x0d, 0x68, 0x18, - 0x28, 0x01, 0xd1, 0x03, 0x20, 0x00, 0x9b, 0x0d, - 0x60, 0x18, 0xe1, 0x87, 0x68, 0x38, 0x78, 0x01, - 0x78, 0x43, 0x93, 0x05, 0x30, 0x02, 0x32, 0x02, - 0x60, 0x38, 0x92, 0x06, 0x9a, 0x07, 0x42, 0x8a, - 0xd1, 0x5b, 0x21, 0x01, 0x91, 0x04, 0x9a, 0x07, - 0x2a, 0x1b, 0xd0, 0x57, 0xdc, 0x0b, 0x2a, 0x14, - 0xd0, 0x5a, 0x2a, 0x15, 0xd0, 0x11, 0x2a, 0x1a, - 0xd1, 0x4f, 0x78, 0x02, 0x07, 0x91, 0x0f, 0x89, - 0x29, 0x01, 0xdd, 0x14, 0xe0, 0x10, 0x2a, 0xc0, - 0xd0, 0x73, 0x2a, 0xc1, 0xd1, 0x45, 0xa1, 0xb6, - 0xf0, 0x16, 0xf9, 0x4c, 0x28, 0x00, 0xd1, 0x07, - 0xe1, 0x47, 0x78, 0x01, 0x29, 0x05, 0xd1, 0x03, - 0x78, 0x40, 0x28, 0x00, 0xd1, 0x00, 0xe1, 0x40, - 0x20, 0x00, 0x43, 0xc0, 0xe1, 0x56, 0x23, 0x3c, - 0x40, 0x1a, 0x78, 0x40, 0x9b, 0x16, 0x60, 0x18, - 0x29, 0x00, 0xd1, 0x02, 0x68, 0x38, 0x78, 0x80, - 0xe0, 0x04, 0x68, 0x38, 0x78, 0x83, 0x78, 0xc0, - 0x02, 0x00, 0x18, 0x18, 0x9b, 0x14, 0x60, 0x18, - 0x98, 0x14, 0x68, 0x00, 0x4b, 0xa8, 0x42, 0x98, - 0xdc, 0xe6, 0x68, 0x38, 0x18, 0x43, 0x78, 0xdb, - 0x08, 0x5b, 0xd3, 0xe1, 0x18, 0x89, 0x31, 0x04, - 0x18, 0x40, 0x90, 0x02, 0x9b, 0x0d, 0x68, 0x18, - 0x9a, 0x06, 0x1a, 0x80, 0x9a, 0x05, 0x1a, 0x51, - 0x1a, 0x40, 0x90, 0x03, 0xaa, 0x14, 0xca, 0x07, - 0xb4, 0x07, 0x9a, 0x16, 0xb4, 0x04, 0x21, 0xc0, - 0x98, 0x0b, 0xaa, 0x06, 0xab, 0x07, 0xf7, 0xff, - 0xff, 0x81, 0xb0, 0x04, 0x28, 0x00, 0xdb, 0xc7, - 0xe1, 0x07, 0xe1, 0x06, 0x78, 0x00, 0x09, 0x81, - 0x07, 0x89, 0xd1, 0x02, 0x21, 0x01, 0xe0, 0x01, - 0xe0, 0xc1, 0x21, 0x00, 0x9a, 0x13, 0x68, 0x12, - 0x40, 0x11, 0xd1, 0xb9, 0x23, 0xc0, 0x43, 0xdb, - 0x40, 0x18, 0x90, 0x00, 0x28, 0x0f, 0xd1, 0x01, - 0x99, 0x15, 0x60, 0x08, 0x20, 0x00, 0x99, 0x13, - 0x60, 0x08, 0x68, 0x39, 0x78, 0x08, 0x0a, 0x00, - 0xd3, 0x73, 0x78, 0x48, 0x28, 0x04, 0xd1, 0x71, - 0x78, 0x8a, 0x92, 0x09, 0x20, 0x0b, 0x40, 0x10, - 0xd0, 0x6d, 0x78, 0xcb, 0x20, 0x00, 0x22, 0x00, - 0x08, 0x5e, 0xd3, 0x00, 0x30, 0x01, 0x10, 0x5b, - 0xe0, 0x00, 0xe0, 0xa1, 0x06, 0x1b, 0x0e, 0x1b, - 0x32, 0x01, 0x2a, 0x08, 0xdb, 0xf4, 0x22, 0x04, - 0x1c, 0xc3, 0x2b, 0x04, 0xdb, 0x07, 0x5c, 0x8e, - 0x0a, 0x33, 0xd3, 0x00, 0x30, 0x01, 0x32, 0x01, - 0x1c, 0xc3, 0x42, 0x93, 0xda, 0xf7, 0x9a, 0x09, - 0x30, 0x01, 0x08, 0xd2, 0xd3, 0x25, 0x18, 0x0b, - 0x78, 0xda, 0x92, 0x08, 0x07, 0x92, 0x0f, 0x92, - 0x1c, 0x1e, 0x2a, 0x03, 0xd0, 0x09, 0x22, 0x00, - 0x79, 0x35, 0x0a, 0x2b, 0xd3, 0x04, 0x32, 0x01, - 0x18, 0xb3, 0x79, 0x1d, 0x0a, 0x2b, 0xd2, 0xfa, - 0x1c, 0x55, 0x23, 0x1c, 0x9a, 0x08, 0x40, 0x1a, - 0x2a, 0x1c, 0xd0, 0x0b, 0x22, 0x00, 0x19, 0x73, - 0x79, 0x1c, 0x1c, 0x1e, 0x0a, 0x23, 0xd3, 0x04, - 0x32, 0x01, 0x18, 0xb3, 0x79, 0x1c, 0x0a, 0x23, - 0xd2, 0xfa, 0x1c, 0x54, 0x19, 0x40, 0x19, 0x00, - 0x30, 0x01, 0x9a, 0x09, 0x09, 0x12, 0xd3, 0x0e, - 0x18, 0x0a, 0x78, 0xd6, 0x0a, 0x33, 0xd3, 0x09, - 0x79, 0x12, 0x23, 0xc0, 0x40, 0x13, 0x09, 0x9d, - 0x23, 0x30, 0x40, 0x1a, 0x09, 0x14, 0x19, 0x40, - 0x19, 0x00, 0x30, 0x01, 0x30, 0x01, 0x9a, 0x09, - 0x09, 0x52, 0xd3, 0x05, 0x18, 0x0a, 0x78, 0xd2, - 0x09, 0x52, 0xd3, 0x00, 0x30, 0x02, 0x30, 0x01, - 0x9a, 0x09, 0x09, 0x52, 0x07, 0x92, 0xd0, 0x11, - 0x18, 0x0a, 0x78, 0xd2, 0x23, 0x18, 0x40, 0x13, - 0x08, 0xdd, 0x23, 0x60, 0x40, 0x13, 0x09, 0x5c, - 0xe0, 0x02, 0xe0, 0x2c, 0xe0, 0x2b, 0xe0, 0x2a, - 0x0a, 0x12, 0xd3, 0x00, 0x00, 0x64, 0x19, 0x40, - 0x19, 0x00, 0x30, 0x01, 0x30, 0x03, 0x18, 0x09, - 0x91, 0x02, 0x9b, 0x0d, 0x68, 0x19, 0x9a, 0x06, - 0x1a, 0x89, 0x1a, 0x08, 0x90, 0x03, 0xaa, 0x14, - 0xca, 0x07, 0xb4, 0x07, 0x9a, 0x16, 0xb4, 0x04, - 0x21, 0xc0, 0x98, 0x0b, 0xaa, 0x06, 0xab, 0x07, - 0xf7, 0xff, 0xfe, 0xd0, 0xb0, 0x04, 0x28, 0x00, - 0xdb, 0x0d, 0xaa, 0x14, 0xca, 0x07, 0xb4, 0x07, - 0x9a, 0x16, 0xb4, 0x04, 0x21, 0xc1, 0x98, 0x0b, - 0xaa, 0x06, 0xab, 0x07, 0xf7, 0xff, 0xfe, 0xc2, - 0xb0, 0x04, 0x28, 0x00, 0xda, 0x02, 0x26, 0x01, - 0x43, 0xf6, 0xe0, 0x46, 0x98, 0x00, 0x9a, 0x16, - 0x68, 0x11, 0x42, 0x88, 0xd1, 0x01, 0x26, 0x01, - 0xe0, 0x3f, 0x26, 0x00, 0xe0, 0x3d, 0x9a, 0x05, - 0x2a, 0x00, 0xd0, 0x00, 0xe6, 0xf8, 0xe0, 0x38, - 0x99, 0x0a, 0x29, 0x1b, 0xd1, 0x05, 0xa1, 0x2f, - 0xf0, 0x16, 0xf8, 0x34, 0x28, 0x00, 0xd1, 0xf5, - 0xe0, 0x2f, 0x9a, 0x05, 0x2a, 0x0e, 0xd1, 0xf1, - 0x78, 0x01, 0x29, 0x41, 0xd1, 0xee, 0x78, 0x40, - 0x28, 0x02, 0xd1, 0xeb, 0xa0, 0x2a, 0xf0, 0x16, - 0xf8, 0x51, 0x90, 0x01, 0x68, 0x38, 0x9a, 0x01, - 0x30, 0x02, 0xa1, 0x27, 0xf0, 0x16, 0xf8, 0x6c, - 0x28, 0x00, 0xd1, 0xdf, 0x68, 0x38, 0x9a, 0x01, - 0x18, 0x80, 0x78, 0x80, 0xf0, 0x00, 0xf8, 0x4a, - 0x28, 0x00, 0xd0, 0xd7, 0x68, 0x38, 0x9a, 0x01, - 0x18, 0x80, 0x78, 0xc1, 0x29, 0x2e, 0xd1, 0xd1, - 0x79, 0x00, 0xf0, 0x00, 0xf8, 0x3f, 0x28, 0x00, - 0xd0, 0xcc, 0x68, 0x38, 0x9a, 0x01, 0x18, 0x80, - 0x79, 0x40, 0xf0, 0x00, 0xf8, 0x37, 0x28, 0x00, - 0xd0, 0xc4, 0x9a, 0x06, 0x9b, 0x05, 0x18, 0xd2, - 0x9b, 0x0d, 0x68, 0x18, 0x42, 0x82, 0xda, 0xbd, - 0x68, 0x38, 0x9b, 0x05, 0x18, 0xc0, 0x60, 0x38, - 0x9b, 0x0d, 0x68, 0x18, 0x1a, 0x80, 0x60, 0x18, - 0x99, 0x04, 0x29, 0x00, 0xd1, 0x00, 0xe6, 0x6e, - 0x98, 0x07, 0x28, 0x1b, 0xd1, 0x01, 0x1c, 0x30, - 0xe0, 0x00, 0x20, 0x01, 0xb0, 0x0a, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x44, 0x56, 0x42, 0x5f, 0x43, 0x49, 0x5f, 0x4d, - 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0xfe, 0x44, 0x56, 0x42, 0x5f, - 0x48, 0x4f, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x56, 0x42, 0x5f, 0x43, 0x49, 0x5f, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x0e, 0x09, - 0x22, 0xf0, 0x40, 0x0a, 0x20, 0x00, 0x2a, 0x30, - 0xd1, 0x04, 0x07, 0x09, 0x0f, 0x09, 0x29, 0x09, - 0xdc, 0x00, 0x20, 0x01, 0x47, 0x70, 0xb5, 0xf3, - 0x26, 0x00, 0x1c, 0x07, 0xb0, 0x85, 0x48, 0x4f, - 0x90, 0x04, 0x23, 0x10, 0x5e, 0xc0, 0x22, 0x08, - 0x92, 0x01, 0x01, 0x01, 0x91, 0x03, 0x4a, 0x4c, - 0x92, 0x02, 0x18, 0x8d, 0x89, 0x29, 0x4c, 0x4b, - 0x29, 0x02, 0xd1, 0x47, 0x46, 0x6a, 0x23, 0x01, - 0x1d, 0xf9, 0x31, 0x01, 0xf7, 0xff, 0xfc, 0xc2, - 0x1c, 0x01, 0xd0, 0x16, 0x20, 0x04, 0x22, 0x03, - 0x29, 0x01, 0xd0, 0x2b, 0x29, 0x04, 0xd1, 0x6e, - 0x70, 0x22, 0x80, 0x60, 0x99, 0x03, 0x9a, 0x02, - 0x5a, 0x50, 0x80, 0xa0, 0x21, 0x02, 0x71, 0xa1, - 0x22, 0x08, 0x99, 0x06, 0x80, 0x0a, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x4b, 0x26, 0x03, - 0xe0, 0x5d, 0x21, 0x02, 0x70, 0x21, 0xa8, 0x00, - 0x88, 0x00, 0x30, 0x07, 0x04, 0x00, 0x0c, 0x00, - 0x80, 0x60, 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, - 0x80, 0xa1, 0xa9, 0x00, 0x88, 0x09, 0x80, 0xe1, - 0x30, 0x04, 0x99, 0x06, 0x80, 0x08, 0x9a, 0x01, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x32, - 0x26, 0x02, 0xe0, 0x44, 0x81, 0x2a, 0x70, 0x20, - 0x80, 0x60, 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x50, - 0x80, 0xa0, 0x22, 0x08, 0x99, 0x06, 0x80, 0x0a, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x22, - 0x26, 0x04, 0xe0, 0x34, 0x21, 0xff, 0x31, 0x01, - 0x1d, 0x2a, 0xf7, 0xff, 0xfa, 0x2d, 0x1c, 0x01, - 0x20, 0x0c, 0x29, 0x00, 0xd0, 0x16, 0x29, 0x07, - 0xd1, 0x29, 0x26, 0x01, 0x70, 0x26, 0x21, 0x08, - 0x80, 0x61, 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, - 0x80, 0xa1, 0x21, 0x02, 0x71, 0xa1, 0x68, 0x69, - 0x81, 0x21, 0x99, 0x06, 0x80, 0x08, 0x1c, 0x02, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x02, - 0x81, 0x2e, 0xe0, 0x13, 0x23, 0x01, 0x70, 0x23, - 0x21, 0x08, 0x80, 0x61, 0x99, 0x03, 0x9a, 0x02, - 0x5a, 0x51, 0x80, 0xa1, 0x71, 0xa3, 0x68, 0x69, - 0x81, 0x21, 0x99, 0x06, 0x80, 0x08, 0x1c, 0x02, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xfe, 0xee, - 0x21, 0x02, 0x81, 0x29, 0x26, 0x01, 0x98, 0x04, - 0x8a, 0x00, 0x30, 0x01, 0x99, 0x04, 0x82, 0x08, - 0x23, 0x10, 0x98, 0x04, 0x5e, 0xc0, 0x28, 0x02, - 0xd1, 0x02, 0x20, 0x00, 0x99, 0x04, 0x82, 0x08, - 0x1c, 0x30, 0xb0, 0x05, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x54, - 0x2e, 0x08, 0x54, 0x50, 0x2e, 0x08, 0x54, 0x40, - 0xb5, 0x80, 0x27, 0x00, 0x78, 0x00, 0x49, 0x0d, - 0x72, 0x08, 0x7a, 0x0b, 0x48, 0x0c, 0x2b, 0x01, - 0xd1, 0x06, 0xca, 0x08, 0xc0, 0x08, 0xca, 0x08, - 0xc0, 0x08, 0xca, 0x0c, 0xc0, 0x0c, 0xe0, 0x07, - 0x68, 0xc9, 0x60, 0x01, 0x1c, 0x08, 0x49, 0x07, - 0xf7, 0xff, 0xff, 0x41, 0x1c, 0x07, 0xd0, 0x01, - 0xf0, 0x00, 0xf8, 0x50, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x6c, - 0x2e, 0x08, 0x54, 0x70, 0x2e, 0x08, 0x1a, 0x7c, - 0xb5, 0xb0, 0x24, 0x00, 0x4f, 0x17, 0x72, 0x3c, - 0x20, 0x01, 0xf0, 0x02, 0xff, 0xc3, 0x28, 0x00, - 0xd1, 0x03, 0x43, 0xc0, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0xf7, 0xff, 0xf9, 0x25, 0x28, 0x00, - 0xdc, 0x04, 0x20, 0x01, 0x43, 0xc0, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x25, 0x01, - 0x49, 0x0d, 0x00, 0x82, 0x18, 0x53, 0x70, 0x9d, - 0x52, 0x8c, 0x30, 0x01, 0x28, 0x02, 0xdb, 0xf8, - 0x68, 0xf8, 0x28, 0x00, 0xd1, 0x0a, 0x20, 0xff, - 0x30, 0x0d, 0xf0, 0x02, 0xff, 0x67, 0x60, 0xf8, - 0x28, 0x00, 0xd1, 0x03, 0x38, 0x03, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x28, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x6c, - 0x2e, 0x08, 0x1a, 0x6c, 0xb5, 0x80, 0x4f, 0x06, - 0x68, 0xf8, 0xf0, 0x02, 0xff, 0x79, 0x20, 0x00, - 0x60, 0xf8, 0xf7, 0xff, 0xf9, 0x53, 0xf0, 0x02, - 0xfe, 0x45, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x6c, 0xb5, 0x80, 0x21, 0x00, - 0x48, 0x18, 0x7a, 0x02, 0x48, 0x18, 0x2a, 0x01, - 0xd1, 0x0e, 0x78, 0x42, 0x2a, 0x13, 0xd1, 0x03, - 0x68, 0x87, 0xf0, 0x00, 0xf8, 0x2b, 0x1c, 0x01, - 0x29, 0x00, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x02, - 0xff, 0x5b, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x00, 0x78, 0x00, 0x28, 0x01, 0xd0, 0x14, - 0x28, 0x02, 0xd0, 0x08, 0x28, 0x03, 0xd0, 0x0b, - 0x28, 0x04, 0xd1, 0xf2, 0xf0, 0x00, 0xf8, 0x8c, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x00, - 0xf8, 0x6b, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0xf0, 0x00, 0xf8, 0x4c, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0xf0, 0x00, 0xf8, 0x23, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x6c, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0x80, 0xb0, 0x83, - 0x4f, 0x0b, 0x88, 0xb8, 0xf0, 0x00, 0xf8, 0xae, - 0x28, 0x00, 0xdb, 0x0a, 0x88, 0xf9, 0xab, 0x02, - 0x80, 0x19, 0x68, 0xb9, 0x91, 0x01, 0x46, 0x6b, - 0x21, 0x13, 0xaa, 0x01, 0xf0, 0x00, 0xf8, 0xd6, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, - 0xb0, 0x03, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0xf0, 0xb0, 0x83, - 0x4e, 0x0f, 0x68, 0x30, 0x88, 0x84, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x6e, 0x25, 0x01, 0x1c, 0x07, - 0xd4, 0x11, 0x68, 0x30, 0x79, 0x81, 0xab, 0x01, - 0x70, 0x19, 0x89, 0x00, 0x80, 0x58, 0x46, 0x6b, - 0x21, 0x01, 0x1c, 0x38, 0xaa, 0x01, 0xf0, 0x00, - 0xf8, 0xb5, 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x91, 0x1c, 0x28, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0x90, 0xb0, 0x83, - 0x4c, 0x0a, 0x68, 0x20, 0x88, 0x80, 0xf0, 0x00, - 0xf8, 0x4b, 0x27, 0x01, 0x28, 0x00, 0xdb, 0x08, - 0x68, 0x21, 0x79, 0x89, 0xab, 0x01, 0x70, 0x19, - 0x46, 0x6b, 0x21, 0x03, 0xaa, 0x01, 0xf0, 0x00, - 0xf8, 0x95, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x70, - 0xb5, 0x90, 0xb0, 0x83, 0x4c, 0x0b, 0x68, 0x20, - 0x88, 0x80, 0xf0, 0x00, 0xf8, 0x53, 0x27, 0x01, - 0x28, 0x00, 0xdb, 0x0a, 0x68, 0x21, 0x88, 0xca, - 0xab, 0x02, 0x80, 0x1a, 0x31, 0x08, 0x91, 0x01, - 0x46, 0x6b, 0x21, 0x02, 0xaa, 0x01, 0xf0, 0x00, - 0xf8, 0x79, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x70, - 0xb5, 0xb0, 0xb0, 0x81, 0x48, 0x0b, 0x68, 0x00, - 0x88, 0x84, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x36, - 0x25, 0x01, 0x1c, 0x07, 0xd4, 0x09, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x04, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x61, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf8, 0x3f, 0x1c, 0x28, 0xb0, 0x01, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x70, - 0xb4, 0x80, 0x04, 0x03, 0x0c, 0x1b, 0x20, 0x00, - 0x49, 0x0d, 0x00, 0x82, 0x18, 0x57, 0x78, 0xbf, - 0x2f, 0x01, 0xd1, 0x06, 0x00, 0x87, 0x53, 0xcb, - 0x23, 0x02, 0x18, 0x51, 0x70, 0x8b, 0xbc, 0x80, - 0x47, 0x70, 0x5a, 0x8a, 0x42, 0x9a, 0xd1, 0x03, - 0x20, 0x01, 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, - 0x30, 0x01, 0x28, 0x02, 0xdb, 0xe9, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x6c, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x07, 0x00, 0x83, - 0x18, 0x5f, 0x78, 0xbf, 0x2f, 0x01, 0xd0, 0x02, - 0x5a, 0xcb, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x02, 0xdb, 0xf4, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x6c, - 0xb4, 0x80, 0x28, 0x00, 0xda, 0x05, 0x28, 0x02, - 0xdb, 0x03, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, - 0x47, 0x70, 0x23, 0x01, 0x00, 0x82, 0x49, 0x03, - 0x18, 0x57, 0x70, 0xbb, 0x23, 0x00, 0x52, 0x8b, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x6c, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x02, - 0xfd, 0x77, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x00, 0x87, 0x4c, 0x0a, 0x19, 0x3f, - 0x78, 0xbf, 0x2f, 0x02, 0xd0, 0x06, 0x2f, 0x03, - 0xd1, 0x09, 0xf0, 0x00, 0xf8, 0x39, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x00, 0xf8, 0x0a, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x6c, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x27, 0x01, 0x60, 0x1f, 0x29, 0x01, - 0xd1, 0x19, 0x23, 0x12, 0x49, 0x0e, 0x70, 0x0b, - 0x23, 0x11, 0x70, 0x4b, 0x23, 0x08, 0x80, 0x4b, - 0x00, 0x84, 0x4f, 0x0c, 0x5b, 0x38, 0x80, 0x88, - 0x78, 0x10, 0x71, 0x88, 0x88, 0x50, 0x81, 0x08, - 0xf7, 0xff, 0xff, 0xc2, 0x28, 0x00, 0xd0, 0x06, - 0x20, 0x03, 0x19, 0xe1, 0x70, 0x88, 0x20, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x70, 0x2e, 0x08, 0x1a, 0x6c, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x17, - 0x22, 0x01, 0xb0, 0x81, 0x9b, 0x04, 0x25, 0x01, - 0x00, 0x86, 0x60, 0x1a, 0x48, 0x38, 0x90, 0x00, - 0x4c, 0x38, 0x29, 0x02, 0xd0, 0x23, 0x29, 0x03, - 0xd0, 0x41, 0x29, 0x04, 0xd0, 0x4f, 0x29, 0x13, - 0xd1, 0x5e, 0x88, 0xba, 0x98, 0x00, 0x5b, 0x80, - 0x68, 0x39, 0xf7, 0xfe, 0xff, 0x9d, 0x1c, 0x05, - 0xd1, 0x11, 0x20, 0x12, 0x70, 0x20, 0x20, 0x15, - 0x70, 0x60, 0x20, 0x04, 0x80, 0x60, 0x98, 0x00, - 0x5b, 0x80, 0x80, 0xa0, 0xf7, 0xff, 0xff, 0x88, - 0x28, 0x00, 0xd0, 0x4b, 0x20, 0x00, 0x9b, 0x04, - 0x25, 0x01, 0x60, 0x18, 0xe0, 0x46, 0x20, 0x00, - 0x9b, 0x04, 0x60, 0x18, 0xe0, 0x41, 0x88, 0xb8, - 0xf0, 0x02, 0xfd, 0xac, 0x60, 0xa0, 0x1c, 0x01, - 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x3b, 0x20, 0x12, - 0x70, 0x20, 0x20, 0x13, 0x70, 0x60, 0x20, 0x08, - 0x80, 0x60, 0x98, 0x00, 0x5b, 0x80, 0x80, 0xa0, - 0x88, 0xb8, 0x80, 0xe0, 0x88, 0xba, 0x1c, 0x08, - 0x68, 0x39, 0xf0, 0x15, 0xfc, 0xb7, 0xf7, 0xff, - 0xff, 0x63, 0x28, 0x00, 0xd1, 0x26, 0x68, 0xa0, - 0xf0, 0x02, 0xfd, 0xb6, 0xe0, 0x21, 0x20, 0x12, - 0x70, 0x20, 0x20, 0x14, 0x70, 0x60, 0x20, 0x04, - 0x80, 0x60, 0x98, 0x00, 0x5b, 0x80, 0x80, 0xa0, - 0x78, 0x38, 0x80, 0xa0, 0xf7, 0xff, 0xff, 0x50, - 0x28, 0x00, 0xd1, 0x13, 0xe0, 0x11, 0x20, 0x12, - 0x70, 0x20, 0x70, 0x60, 0x20, 0x04, 0x80, 0x60, - 0x98, 0x00, 0x5b, 0x80, 0x80, 0xa0, 0xf7, 0xff, - 0xff, 0x43, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x02, - 0x99, 0x00, 0x18, 0x71, 0x70, 0x88, 0xe0, 0x01, - 0xe7, 0xff, 0x25, 0x00, 0x1c, 0x28, 0xb0, 0x01, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x6c, 0x2e, 0x08, 0x54, 0x70, - 0xb5, 0xf0, 0x1c, 0x17, 0x06, 0x02, 0x0e, 0x12, - 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x59, 0x1c, 0x48, - 0x1c, 0x1d, 0x1c, 0x43, 0xb0, 0x81, 0x93, 0x00, - 0x1f, 0xd6, 0x3e, 0x89, 0x2e, 0x07, 0xd2, 0x51, - 0xa3, 0x01, 0x5d, 0x9b, 0x00, 0x5b, 0x44, 0x9f, - 0x03, 0x4d, 0x14, 0x3e, 0x4d, 0x27, 0x31, 0x00, - 0x70, 0x2a, 0x1c, 0x0d, 0x21, 0x02, 0x70, 0x29, - 0x1c, 0x01, 0x1c, 0x05, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0xab, 0x88, 0xba, 0x68, 0x39, 0x1c, 0xa8, - 0xf0, 0x15, 0xfc, 0x5c, 0x88, 0xb8, 0x30, 0x04, - 0xe0, 0x3a, 0x70, 0x2a, 0x1c, 0x0d, 0x21, 0x07, - 0x70, 0x29, 0x1c, 0x05, 0x79, 0x38, 0x70, 0x28, - 0x9d, 0x00, 0x22, 0x04, 0x1c, 0x28, 0x1c, 0x39, - 0xf0, 0x15, 0xfc, 0x4c, 0x1c, 0x20, 0x1d, 0x29, - 0xf0, 0x00, 0xf8, 0x92, 0x20, 0x09, 0xe0, 0x27, - 0x70, 0x2a, 0x1c, 0x0d, 0x21, 0x02, 0x70, 0x29, - 0x1c, 0x01, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x88, - 0x20, 0x04, 0xe0, 0x1d, 0x70, 0x2a, 0x1c, 0x0d, - 0x21, 0x03, 0x70, 0x29, 0x1c, 0x05, 0x78, 0xb8, - 0x70, 0x28, 0x99, 0x00, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x7b, 0x20, 0x05, 0xe0, 0x10, 0x70, 0x2a, - 0x1c, 0x0d, 0x21, 0x06, 0x70, 0x29, 0x22, 0x04, - 0x1c, 0x39, 0x1c, 0x05, 0xf0, 0x15, 0xfc, 0x26, - 0x1c, 0x20, 0x1d, 0x29, 0xf0, 0x00, 0xf8, 0x6c, - 0x20, 0x08, 0xe0, 0x01, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x1c, 0x0f, 0x78, 0x01, 0x9d, 0x05, - 0x70, 0x11, 0x78, 0x41, 0x78, 0x12, 0x1c, 0x86, - 0x30, 0x03, 0x3a, 0x90, 0x1c, 0x1c, 0x2a, 0x07, - 0xd2, 0x51, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x11, 0x4d, 0x4d, - 0x1b, 0x2e, 0x39, 0x00, 0x29, 0x02, 0xd1, 0x3d, - 0x1c, 0x30, 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x4e, - 0x1c, 0xb0, 0x60, 0x28, 0x1f, 0x38, 0x80, 0xa8, - 0x88, 0x20, 0x80, 0xe8, 0xe0, 0x37, 0x29, 0x04, - 0xd1, 0x30, 0x22, 0x04, 0x1c, 0x68, 0x1c, 0x31, - 0xf0, 0x15, 0xfb, 0xf0, 0x2f, 0x06, 0xd0, 0x2e, - 0xe0, 0x28, 0x29, 0x07, 0xd1, 0x26, 0x78, 0x31, - 0x71, 0x29, 0x1c, 0x01, 0x1c, 0x06, 0x22, 0x04, - 0x1c, 0x28, 0xf0, 0x15, 0xfb, 0xe3, 0x1d, 0x30, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x2f, 0x88, 0x20, - 0x80, 0xe8, 0x2f, 0x09, 0xd0, 0x1b, 0xe0, 0x15, - 0x29, 0x02, 0xd1, 0x13, 0x1c, 0x30, 0x1c, 0x21, - 0xf0, 0x00, 0xf8, 0x24, 0x88, 0x20, 0x80, 0x28, - 0x2f, 0x04, 0xd0, 0x10, 0xe0, 0x0a, 0x29, 0x03, - 0xd1, 0x08, 0x78, 0x31, 0x70, 0xa9, 0x1c, 0x21, - 0xf0, 0x00, 0xf8, 0x18, 0x88, 0x20, 0x80, 0x28, - 0x2f, 0x05, 0xd0, 0x04, 0x20, 0x01, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x06, 0x00, 0x0e, 0x00, 0x0a, 0x02, 0x70, 0x0a, - 0x70, 0x48, 0x47, 0x70, 0x78, 0x02, 0x02, 0x12, - 0x78, 0x40, 0x18, 0x10, 0x80, 0x08, 0x47, 0x70, - 0xb5, 0x00, 0x78, 0x01, 0x48, 0x0b, 0x71, 0x01, - 0x79, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x02, - 0xd1, 0x0b, 0x48, 0x09, 0xca, 0x08, 0xc0, 0x08, - 0xca, 0x08, 0xc0, 0x08, 0xca, 0x0c, 0xc0, 0x0c, - 0xf0, 0x00, 0xf8, 0x37, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x80, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0x80, 0x20, 0x04, - 0xf0, 0x02, 0xfc, 0xa4, 0x22, 0x00, 0x28, 0x00, - 0xda, 0x03, 0x1c, 0x10, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x0a, 0x71, 0x02, 0x21, 0x00, - 0x20, 0x01, 0x4b, 0x09, 0x01, 0x0f, 0x55, 0xd8, - 0x31, 0x01, 0x29, 0x20, 0xdb, 0xfa, 0x21, 0x00, - 0x4b, 0x06, 0x00, 0x4f, 0x53, 0xda, 0x31, 0x01, - 0x29, 0x10, 0xdb, 0xfa, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x56, 0xa0, - 0xb5, 0x00, 0xf0, 0x02, 0xfb, 0x3b, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x80, 0x20, 0x00, 0x49, 0x1e, - 0x79, 0x0a, 0x49, 0x1e, 0x2a, 0x01, 0xd1, 0x26, - 0x78, 0x4a, 0x2a, 0x43, 0xd0, 0x1d, 0xdc, 0x09, - 0x2a, 0x31, 0xd0, 0x14, 0x2a, 0x33, 0xd0, 0x15, - 0x2a, 0x34, 0xd1, 0x25, 0x68, 0x8f, 0xf0, 0x00, - 0xf8, 0x2f, 0xe0, 0x21, 0x2a, 0x45, 0xd0, 0x06, - 0x2a, 0x46, 0xd0, 0x11, 0x2a, 0x48, 0xd1, 0x1b, - 0xf0, 0x00, 0xf8, 0xcc, 0xe0, 0x18, 0x68, 0x8f, - 0xf0, 0x00, 0xf8, 0x6a, 0xe0, 0x14, 0xf0, 0x00, - 0xf8, 0x8b, 0xe0, 0x11, 0xf0, 0x00, 0xf8, 0x92, - 0xe0, 0x0e, 0xf0, 0x00, 0xf8, 0xc9, 0xe0, 0x0b, - 0xf0, 0x00, 0xf8, 0xf0, 0xe0, 0x08, 0x88, 0x08, - 0x28, 0x70, 0xdb, 0x04, 0x28, 0x80, 0xda, 0x02, - 0xf0, 0x00, 0xf9, 0x0c, 0xe0, 0x00, 0x20, 0x01, - 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x02, - 0xfc, 0x2b, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x80, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x90, 0xb0, 0x85, 0xaa, 0x01, 0xb4, 0x04, - 0x4f, 0x1f, 0x89, 0xb9, 0x68, 0xb8, 0xaa, 0x05, - 0xab, 0x04, 0xf7, 0xff, 0xfe, 0xf9, 0x24, 0x00, - 0xb0, 0x01, 0x28, 0x00, 0xda, 0x01, 0x1c, 0x20, - 0xe0, 0x2d, 0xa8, 0x04, 0x78, 0x00, 0x28, 0x91, - 0xd0, 0x06, 0xa8, 0x03, 0x88, 0x00, 0xf0, 0x00, - 0xf9, 0x4f, 0x1c, 0x07, 0xd4, 0xf3, 0xe0, 0x10, - 0x79, 0x38, 0xab, 0x01, 0x70, 0x18, 0xa8, 0x01, - 0x78, 0x00, 0xf0, 0x00, 0xf8, 0xff, 0x28, 0x00, - 0xda, 0x06, 0x20, 0xf1, 0xab, 0x02, 0x70, 0x58, - 0xa8, 0x01, 0xf0, 0x00, 0xfe, 0x77, 0xe0, 0x12, - 0x1c, 0x07, 0x46, 0x6b, 0xa9, 0x04, 0x78, 0x09, - 0x1c, 0x38, 0xaa, 0x01, 0xf0, 0x00, 0xf9, 0xe2, - 0x28, 0x00, 0xd0, 0xd8, 0x01, 0x38, 0x49, 0x07, - 0x5c, 0x08, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x0c, 0x98, 0x00, 0xb0, 0x05, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0x90, 0xb0, 0x81, 0x4c, 0x0e, 0x88, 0xa0, - 0xf0, 0x00, 0xf9, 0x1a, 0x1c, 0x07, 0xd4, 0x07, - 0x78, 0x61, 0x46, 0x6b, 0x22, 0x00, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0xc0, 0x28, 0x00, 0xd1, 0x01, - 0x20, 0x00, 0x90, 0x00, 0x01, 0x38, 0x49, 0x07, - 0x5c, 0x08, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xe8, 0x98, 0x00, 0xb0, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0x00, 0x48, 0x03, 0x79, 0x00, 0xf0, 0x00, - 0xfd, 0xef, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0xf0, 0xb0, 0x83, - 0x4e, 0x14, 0x79, 0x30, 0xab, 0x00, 0x70, 0x18, - 0x27, 0x00, 0x4c, 0x13, 0x01, 0x3d, 0x5d, 0x60, - 0x28, 0x01, 0xd0, 0x13, 0x19, 0x29, 0x78, 0x4a, - 0x79, 0x30, 0x42, 0x82, 0xd0, 0x02, 0x79, 0x09, - 0x42, 0x81, 0xd1, 0x0b, 0x78, 0x71, 0x46, 0x6a, - 0x1c, 0x38, 0xab, 0x02, 0xf0, 0x00, 0xf9, 0x86, - 0x5d, 0x60, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xb4, 0x37, 0x01, 0x2f, 0x20, - 0xdb, 0xe4, 0xa8, 0x00, 0x78, 0x00, 0xf0, 0x00, - 0xfd, 0xd9, 0x98, 0x02, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x00, 0x48, 0x03, - 0x79, 0x00, 0xf0, 0x00, 0xfd, 0xe1, 0x20, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x90, 0xb0, 0x83, 0x4c, 0x11, 0x88, 0xa0, - 0xf0, 0x00, 0xf8, 0xb2, 0x1c, 0x07, 0xd5, 0x01, - 0x20, 0x01, 0xe0, 0x0c, 0x79, 0xa0, 0xab, 0x01, - 0x70, 0x18, 0x79, 0xe0, 0x70, 0x58, 0x78, 0x61, - 0x46, 0x6a, 0x1c, 0x38, 0x33, 0x04, 0xf0, 0x00, - 0xf9, 0x51, 0x28, 0x00, 0xd1, 0x00, 0x90, 0x02, - 0x01, 0x38, 0x49, 0x07, 0x5c, 0x08, 0x28, 0x02, - 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x7a, - 0x98, 0x02, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0e, 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x88, - 0x1c, 0x07, 0xd5, 0x01, 0x20, 0x01, 0xe0, 0x07, - 0x78, 0x61, 0x46, 0x6b, 0x22, 0x00, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x2c, 0x28, 0x00, 0xd1, 0x00, - 0x90, 0x00, 0x01, 0x38, 0x49, 0x06, 0x5c, 0x08, - 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x55, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x80, 0xb0, 0x81, - 0x48, 0x0e, 0x88, 0x00, 0xf0, 0x00, 0xf8, 0x9e, - 0x1c, 0x07, 0xd5, 0x01, 0x20, 0x01, 0xe0, 0x11, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xd3, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x70, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0x05, 0x01, 0x38, 0x49, 0x06, 0x5c, 0x08, - 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x31, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb4, 0xb0, 0x06, 0x02, - 0x0e, 0x12, 0x49, 0x10, 0x23, 0x00, 0x5e, 0xcc, - 0x43, 0xdf, 0x2c, 0x20, 0xda, 0x17, 0x20, 0x00, - 0x4b, 0x0d, 0x01, 0x05, 0x5d, 0x5d, 0x2d, 0x01, - 0xd1, 0x0e, 0x25, 0x02, 0x01, 0x07, 0x55, 0xdd, - 0x18, 0xfb, 0x70, 0x5a, 0x1c, 0x42, 0x80, 0x5a, - 0x22, 0x00, 0x71, 0x1a, 0x80, 0xda, 0x81, 0x1a, - 0x1c, 0x62, 0x80, 0x0a, 0xbc, 0xb0, 0x47, 0x70, - 0x30, 0x01, 0x28, 0x20, 0xdb, 0xe9, 0x1c, 0x38, - 0xbc, 0xb0, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x80, 0x1c, 0x07, - 0xd5, 0x06, 0x2f, 0x20, 0xdb, 0x04, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x87, 0x21, 0x01, - 0x01, 0x38, 0x4a, 0x05, 0x54, 0x11, 0x48, 0x05, - 0x88, 0x01, 0x39, 0x01, 0x80, 0x01, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x1a, 0x80, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x09, 0x01, 0x03, 0x5c, 0xcf, 0x2f, 0x01, - 0xd0, 0x06, 0x18, 0x5b, 0x88, 0x5f, 0x42, 0x97, - 0xd0, 0x07, 0x88, 0xdb, 0x42, 0x93, 0xd0, 0x04, - 0x30, 0x01, 0x28, 0x20, 0xdb, 0xf1, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0xb4, 0x90, 0x04, 0x02, - 0x0c, 0x12, 0x06, 0x0b, 0x0e, 0x1b, 0x20, 0x00, - 0x49, 0x0b, 0x01, 0x07, 0x5d, 0xcc, 0x2c, 0x01, - 0xd0, 0x0b, 0x18, 0x7f, 0x88, 0x7f, 0x42, 0x97, - 0xd1, 0x07, 0x01, 0x02, 0x18, 0x51, 0x71, 0x0b, - 0x1d, 0xc2, 0x32, 0x1a, 0x80, 0xca, 0xbc, 0x90, - 0x47, 0x70, 0x30, 0x01, 0x28, 0x20, 0xdb, 0xec, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x54, 0xa0, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x07, 0x01, 0x03, - 0x5c, 0xcf, 0x2f, 0x01, 0xd0, 0x03, 0x18, 0x5b, - 0x89, 0x1b, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x20, 0xdb, 0xf4, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0x80, 0x04, 0x01, 0x0c, 0x09, 0x22, 0x00, - 0x20, 0x00, 0x4b, 0x0f, 0x00, 0x47, 0x5b, 0xdf, - 0x2f, 0x00, 0xd1, 0x06, 0x1d, 0xc2, 0x32, 0x69, - 0x04, 0x12, 0x0c, 0x12, 0x00, 0x40, 0x52, 0x1a, - 0xe0, 0x02, 0x30, 0x01, 0x28, 0x10, 0xdd, 0xf1, - 0x2a, 0x00, 0xd0, 0x09, 0x20, 0x01, 0x04, 0x80, - 0x43, 0x10, 0xf0, 0x02, 0xf9, 0xdf, 0x04, 0x00, - 0x0c, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xa0, 0xb5, 0x90, 0x1c, 0x07, - 0x01, 0x00, 0x49, 0x0e, 0x18, 0x44, 0x89, 0x20, - 0x28, 0x00, 0xd0, 0x13, 0xf0, 0x02, 0xfa, 0x02, - 0x20, 0x00, 0x49, 0x0b, 0x01, 0x3a, 0x4b, 0x09, - 0x18, 0xd2, 0x89, 0x13, 0x22, 0x00, 0x00, 0x47, - 0x5b, 0xcf, 0x42, 0x9f, 0xd1, 0x02, 0x00, 0x40, - 0x52, 0x0a, 0xe0, 0x02, 0x30, 0x01, 0x28, 0x10, - 0xdd, 0xf5, 0x81, 0x22, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0xa0, - 0x2e, 0x08, 0x56, 0xa0, 0xb5, 0x00, 0x49, 0x03, - 0x78, 0x08, 0xf0, 0x02, 0xf9, 0x41, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x02, - 0xf9, 0x37, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x90, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x1c, 0x1f, 0x01, 0x03, 0x4c, 0x1d, - 0x5c, 0xe3, 0x1e, 0x9c, 0x2c, 0x07, 0xd2, 0x31, - 0xa3, 0x01, 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x09, 0x15, 0x03, 0x0f, 0x1b, 0x21, 0x27, 0x00, - 0x1c, 0x3b, 0xf0, 0x00, 0xf9, 0x23, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3b, 0xf0, 0x00, - 0xf8, 0x27, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xf8, 0x5d, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3b, 0xf0, 0x00, - 0xfa, 0x51, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xfb, 0x65, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3b, 0xf0, 0x00, - 0xfa, 0xf1, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xfb, 0x35, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x1f, - 0x23, 0x01, 0x60, 0x3b, 0xb0, 0x81, 0x29, 0x91, - 0xd1, 0x23, 0x21, 0x45, 0x4b, 0x16, 0x70, 0x19, - 0x21, 0x42, 0x70, 0x59, 0x21, 0x08, 0x80, 0x59, - 0x01, 0x06, 0x4d, 0x14, 0x19, 0x74, 0x78, 0x60, - 0x71, 0x18, 0x88, 0x60, 0x80, 0xd8, 0x1c, 0x51, - 0x91, 0x00, 0x22, 0x04, 0x1d, 0xd8, 0x30, 0x01, - 0xf0, 0x15, 0xf8, 0xa8, 0xf7, 0xff, 0xff, 0x8a, - 0x28, 0x00, 0xd1, 0x01, 0x60, 0x38, 0xe0, 0x0f, - 0x22, 0x04, 0x99, 0x00, 0x1d, 0xe0, 0x30, 0x03, - 0xf0, 0x15, 0xf8, 0x9c, 0x20, 0x05, 0x55, 0xa8, - 0xe0, 0x03, 0x29, 0x7f, 0xdc, 0x01, 0x29, 0x45, - 0xd1, 0x01, 0x20, 0x00, 0x60, 0x38, 0x20, 0x01, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xff, 0x1c, 0x04, 0x06, 0x08, 0x0e, 0x00, - 0x21, 0x01, 0xb0, 0x84, 0x9b, 0x07, 0x25, 0x01, - 0x60, 0x19, 0x4e, 0x55, 0x01, 0x21, 0x91, 0x03, - 0x28, 0x33, 0xd0, 0x5d, 0x28, 0x43, 0xd1, 0x5c, - 0x20, 0x09, 0xf0, 0x02, 0xf9, 0x57, 0x4f, 0x51, - 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x94, 0x9a, 0x06, 0x79, 0x51, 0x01, 0x20, - 0x4a, 0x4b, 0x18, 0x84, 0x1d, 0xe0, 0x30, 0x03, - 0x90, 0x02, 0x29, 0x00, 0xd0, 0x4a, 0x88, 0x60, - 0xf7, 0xff, 0xfe, 0xc8, 0x28, 0x00, 0xda, 0x20, - 0x20, 0xf1, 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, - 0x22, 0x04, 0x99, 0x02, 0xf0, 0x15, 0xf8, 0x5a, - 0x20, 0x43, 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, - 0x20, 0x0c, 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, - 0x88, 0x61, 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, - 0xf7, 0xff, 0xfb, 0xca, 0x81, 0xb8, 0xf7, 0xff, - 0xff, 0x2d, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x00, - 0x9b, 0x07, 0x60, 0x18, 0xe0, 0x55, 0x20, 0x02, - 0xe0, 0x1e, 0x46, 0x68, 0x22, 0x04, 0x99, 0x02, - 0xf0, 0x15, 0xf8, 0x3c, 0x20, 0x43, 0x70, 0x38, - 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, 0x80, 0x78, - 0x9a, 0x06, 0x79, 0x50, 0x71, 0x38, 0x88, 0xe1, - 0x46, 0x6a, 0x20, 0x93, 0x68, 0xbb, 0xf7, 0xff, - 0xfb, 0xab, 0x81, 0xb8, 0xf7, 0xff, 0xff, 0x0e, - 0x28, 0x00, 0xd0, 0xe0, 0x20, 0x7d, 0x00, 0xc0, - 0xf7, 0xff, 0xfe, 0xbe, 0x81, 0x20, 0x20, 0x03, - 0x99, 0x03, 0x54, 0x70, 0x25, 0x01, 0xe0, 0x40, - 0xe0, 0x34, 0xe0, 0x37, 0x9a, 0x06, 0x79, 0x10, - 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, 0x22, 0x04, - 0x99, 0x02, 0xf0, 0x15, 0xf8, 0x13, 0x20, 0x43, - 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, - 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, 0x88, 0x61, - 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xff, - 0xfb, 0x83, 0x81, 0xb8, 0xf7, 0xff, 0xfe, 0xe6, - 0x28, 0x00, 0xd0, 0xb8, 0x9a, 0x06, 0x79, 0x10, - 0x28, 0x00, 0xd1, 0x13, 0x21, 0x45, 0x48, 0x14, - 0x70, 0x01, 0x21, 0x44, 0x70, 0x41, 0x27, 0x04, - 0x80, 0x47, 0x78, 0x61, 0x71, 0x81, 0x88, 0x61, - 0x80, 0x81, 0xf7, 0xff, 0xfe, 0xdd, 0x28, 0x00, - 0xd1, 0x01, 0x25, 0x00, 0xe0, 0x0d, 0x99, 0x03, - 0x54, 0x77, 0xe0, 0x0a, 0x20, 0x02, 0x99, 0x03, - 0x54, 0x70, 0xe0, 0x06, 0x28, 0x7f, 0xdc, 0x01, - 0x28, 0x45, 0xd1, 0x02, 0x20, 0x00, 0x9b, 0x07, - 0x60, 0x18, 0x1c, 0x28, 0xb0, 0x04, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0x90, 0xb5, 0xff, 0x06, 0x09, - 0x0e, 0x09, 0x22, 0x01, 0xb0, 0x83, 0x9b, 0x06, - 0x01, 0x00, 0x60, 0x1a, 0x90, 0x02, 0x4e, 0x98, - 0x19, 0x84, 0x4f, 0x98, 0x4d, 0x98, 0x29, 0x46, - 0xd0, 0x5d, 0xdc, 0x0e, 0x29, 0x33, 0xd0, 0x5b, - 0x29, 0x45, 0xd1, 0x5a, 0x89, 0xb8, 0x30, 0x04, - 0x04, 0x00, 0x0c, 0x00, 0xf0, 0x02, 0xf8, 0x96, - 0x60, 0xa8, 0x28, 0x00, 0xd1, 0x33, 0x20, 0x00, - 0xe0, 0xcf, 0x29, 0x90, 0xd0, 0x52, 0x29, 0x95, - 0xd1, 0x4b, 0x88, 0xe0, 0x28, 0x00, 0xd1, 0x6c, - 0x22, 0x05, 0x21, 0x04, 0x68, 0xb8, 0xf0, 0x02, - 0xf8, 0x8a, 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xee, - 0x21, 0x00, 0xab, 0x00, 0x70, 0x99, 0x22, 0x43, - 0x70, 0x3a, 0x22, 0x34, 0x70, 0x7a, 0x21, 0x0c, - 0x80, 0x79, 0x78, 0x61, 0x71, 0x39, 0x88, 0x61, - 0x46, 0x6a, 0x1c, 0x03, 0x20, 0x96, 0xf7, 0xff, - 0xfb, 0x0f, 0x81, 0xb8, 0xf7, 0xff, 0xfe, 0x72, - 0x28, 0x00, 0xd0, 0xd8, 0x20, 0x45, 0x70, 0x28, - 0x20, 0x47, 0x70, 0x68, 0x20, 0x04, 0x80, 0x68, - 0x88, 0x60, 0x80, 0xa8, 0x21, 0x00, 0x71, 0xa9, - 0xf7, 0xff, 0xfe, 0x6e, 0xe0, 0xb0, 0x68, 0xb9, - 0x91, 0x00, 0x89, 0xb9, 0xab, 0x01, 0x80, 0x19, - 0x22, 0x43, 0x70, 0x2a, 0x22, 0x34, 0x70, 0x6a, - 0x21, 0x0c, 0x80, 0x69, 0x78, 0x61, 0x71, 0x29, - 0x88, 0x61, 0x46, 0x6a, 0x1c, 0x03, 0x20, 0x90, - 0xf7, 0xff, 0xfa, 0xea, 0x81, 0xa8, 0xf7, 0xff, - 0xfe, 0x57, 0x28, 0x00, 0xd1, 0x06, 0x68, 0xa8, - 0xf0, 0x02, 0xf8, 0x6a, 0xe7, 0xaf, 0xe0, 0x61, - 0xe0, 0x8b, 0xe0, 0xc5, 0x20, 0x00, 0x9b, 0x06, - 0x60, 0x18, 0xe0, 0x61, 0x88, 0xe0, 0x28, 0x00, - 0xd1, 0x1c, 0x9a, 0x05, 0x88, 0x90, 0xf0, 0x02, - 0xf8, 0x35, 0x60, 0xa8, 0x1c, 0x01, 0xd0, 0x9e, - 0x20, 0x45, 0x70, 0x28, 0x70, 0x68, 0x22, 0x0c, - 0x80, 0x6a, 0x88, 0x60, 0x80, 0xa8, 0x9a, 0x05, - 0x88, 0x90, 0x81, 0xa8, 0x89, 0xaa, 0x1c, 0x08, - 0x99, 0x05, 0x68, 0x09, 0xf0, 0x14, 0xff, 0x42, - 0xf7, 0xff, 0xfe, 0x2e, 0x28, 0x00, 0xd1, 0xdd, - 0xe7, 0xd5, 0xe0, 0x16, 0x99, 0x05, 0x88, 0xc9, - 0x42, 0x81, 0xd1, 0x05, 0x78, 0x60, 0x71, 0x38, - 0x68, 0xb8, 0x1c, 0x81, 0x88, 0x60, 0xe0, 0x03, - 0x79, 0x21, 0x71, 0x39, 0x68, 0xb9, 0x31, 0x02, - 0xf7, 0xff, 0xfb, 0x76, 0x22, 0x43, 0x70, 0x3a, - 0xf7, 0xff, 0xfe, 0x0c, 0x28, 0x00, 0xd0, 0xc1, - 0xe0, 0x2a, 0x22, 0x43, 0x70, 0x3a, 0x22, 0x34, - 0x70, 0x7a, 0x21, 0x0c, 0x80, 0x79, 0x9a, 0x05, - 0x88, 0x11, 0x42, 0x88, 0xd1, 0x0f, 0x78, 0x60, - 0x71, 0x38, 0x68, 0xb8, 0x1c, 0x81, 0x88, 0x60, - 0xf7, 0xff, 0xfb, 0x5e, 0x88, 0xe1, 0x79, 0x20, - 0x88, 0x62, 0x80, 0xe2, 0x78, 0x62, 0x71, 0x22, - 0x80, 0x61, 0x70, 0x60, 0xe0, 0x05, 0x79, 0x21, - 0x71, 0x39, 0x68, 0xb9, 0x31, 0x02, 0xf7, 0xff, - 0xfb, 0x4f, 0xf7, 0xff, 0xfd, 0xe7, 0x28, 0x00, - 0xd0, 0x9c, 0xe0, 0x23, 0x20, 0x04, 0xf0, 0x01, - 0xff, 0xdd, 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, - 0x20, 0x01, 0xe0, 0x16, 0x25, 0x00, 0xab, 0x00, - 0x70, 0x9d, 0x22, 0x43, 0x70, 0x3a, 0x22, 0x34, - 0x70, 0x7a, 0x21, 0x0c, 0x80, 0x79, 0x78, 0x61, - 0x71, 0x39, 0x88, 0x61, 0x46, 0x6a, 0x1c, 0x03, - 0x20, 0x95, 0xf7, 0xff, 0xfa, 0x65, 0x81, 0xb8, - 0xf7, 0xff, 0xfd, 0xc8, 0x28, 0x00, 0xd1, 0x05, - 0x1c, 0x28, 0xb0, 0x03, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x7d, 0x00, 0xc0, - 0xf7, 0xff, 0xfd, 0x72, 0x81, 0x20, 0x20, 0x06, - 0xe0, 0x37, 0x88, 0xe0, 0x28, 0x00, 0xd0, 0x03, - 0x79, 0x20, 0x78, 0x61, 0x42, 0x88, 0xd1, 0x01, - 0x20, 0x02, 0xe0, 0x2e, 0x20, 0x04, 0xf0, 0x01, - 0xff, 0xa9, 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xcb, - 0x21, 0x00, 0xab, 0x00, 0x70, 0x99, 0x79, 0x21, - 0x9a, 0x05, 0x78, 0x12, 0x42, 0x91, 0xd1, 0x02, - 0x78, 0x61, 0x88, 0x63, 0xe0, 0x00, 0x88, 0xe3, - 0x22, 0x43, 0x70, 0x3a, 0x22, 0x34, 0x70, 0x7a, - 0x22, 0x0c, 0x80, 0x7a, 0x71, 0x39, 0x46, 0x6a, - 0x1c, 0x05, 0x20, 0x95, 0x1c, 0x19, 0x1c, 0x2b, - 0xf7, 0xff, 0xfa, 0x2a, 0x81, 0xb8, 0xf7, 0xff, - 0xfd, 0x8d, 0x28, 0x00, 0xd1, 0x03, 0x21, 0x00, - 0x9b, 0x06, 0x60, 0x18, 0xe6, 0xef, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xff, 0xfd, 0x39, 0x81, 0x20, - 0x20, 0x08, 0x99, 0x02, 0x54, 0x70, 0xe7, 0x9f, - 0x29, 0x7f, 0xdd, 0x9d, 0xe7, 0x36, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0x90, 0xb5, 0xff, 0x06, 0x09, - 0x0e, 0x09, 0x22, 0x01, 0xb0, 0x83, 0x9b, 0x06, - 0x01, 0x05, 0x60, 0x1a, 0x4e, 0x4f, 0x19, 0xac, - 0x1d, 0xe2, 0x32, 0x03, 0x92, 0x02, 0x4f, 0x4e, - 0x29, 0x33, 0xd0, 0x61, 0x29, 0x70, 0xd0, 0x37, - 0x29, 0x94, 0xd1, 0x5e, 0xf7, 0xff, 0xfd, 0x3a, - 0x88, 0xe0, 0x99, 0x05, 0x88, 0xc9, 0x42, 0x88, - 0xd1, 0x06, 0x22, 0x04, 0x98, 0x02, 0x99, 0x05, - 0xf0, 0x14, 0xff, 0x2c, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x00, 0xe0, 0x2c, 0x99, 0x05, 0x79, 0x08, - 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, 0x22, 0x04, - 0x99, 0x02, 0xf0, 0x14, 0xfe, 0x63, 0x20, 0x43, - 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, - 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, 0x88, 0x61, - 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xff, - 0xf9, 0xd3, 0x81, 0xb8, 0xf7, 0xff, 0xfd, 0x36, - 0x28, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x9b, 0x06, - 0x60, 0x18, 0xe7, 0xdd, 0x99, 0x05, 0x79, 0x08, - 0x28, 0x00, 0xd1, 0x53, 0x20, 0x04, 0xe0, 0x52, - 0x20, 0x09, 0xf0, 0x01, 0xff, 0x23, 0x60, 0xb8, - 0x28, 0x00, 0xd1, 0x05, 0x20, 0x01, 0xb0, 0x03, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0xf1, 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, - 0x22, 0x04, 0x99, 0x02, 0xf0, 0x14, 0xfe, 0x32, - 0x20, 0x43, 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, - 0x20, 0x0c, 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, - 0x88, 0x61, 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, - 0xf7, 0xff, 0xf9, 0xa2, 0x81, 0xb8, 0xf7, 0xff, - 0xfd, 0x05, 0x28, 0x00, 0xd0, 0xb0, 0xe0, 0x29, - 0xe0, 0x00, 0xe0, 0x2a, 0x78, 0x60, 0x99, 0x05, - 0x78, 0x09, 0x42, 0x88, 0xd1, 0x01, 0x20, 0x07, - 0xe0, 0x21, 0x20, 0x09, 0xf0, 0x01, 0xfe, 0xf2, - 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xa0, 0x20, 0xf1, - 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, 0x22, 0x04, - 0x99, 0x02, 0xf0, 0x14, 0xfe, 0x07, 0x20, 0x43, - 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, - 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, 0x88, 0x61, - 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xff, - 0xf9, 0x77, 0x81, 0xb8, 0xf7, 0xff, 0xfc, 0xda, - 0x28, 0x00, 0xd0, 0xa3, 0x20, 0x02, 0x55, 0x70, - 0xe7, 0xb0, 0x29, 0x7f, 0xdc, 0x01, 0x29, 0x45, - 0xd1, 0xac, 0x20, 0x00, 0x9b, 0x06, 0x60, 0x18, - 0xe7, 0xa8, 0x00, 0x00, 0x2e, 0x08, 0x54, 0xa0, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0xf0, 0x06, 0x09, - 0x0e, 0x09, 0x1c, 0x04, 0x20, 0x01, 0x60, 0x18, - 0x1c, 0x17, 0xb0, 0x82, 0x29, 0x70, 0xd0, 0x28, - 0x29, 0x94, 0xd1, 0x2c, 0x1c, 0x20, 0xf7, 0xff, - 0xfc, 0x95, 0x79, 0x38, 0x28, 0x00, 0xd1, 0x2d, - 0x20, 0x43, 0x4f, 0x19, 0x70, 0x38, 0x20, 0x34, - 0x70, 0x78, 0x20, 0x0c, 0x80, 0x78, 0x01, 0x25, - 0x4e, 0x16, 0x19, 0xac, 0x79, 0x20, 0x71, 0x38, - 0x88, 0xe1, 0x46, 0x6a, 0x20, 0x95, 0x68, 0xbb, - 0xf7, 0xff, 0xf9, 0x3e, 0x81, 0xb8, 0xf7, 0xff, - 0xfc, 0xa1, 0x28, 0x00, 0xd1, 0x01, 0x25, 0x00, - 0xe0, 0x14, 0x20, 0x7d, 0x00, 0xc0, 0xf7, 0xff, - 0xfc, 0x4f, 0x81, 0x20, 0x20, 0x08, 0x55, 0x70, - 0xe0, 0x0b, 0x1c, 0x20, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0x1d, 0x1c, 0x05, 0xe0, 0x06, 0x29, 0x7f, - 0xdc, 0x01, 0x29, 0x45, 0xd1, 0x01, 0x20, 0x00, - 0x60, 0x18, 0x25, 0x01, 0x1c, 0x28, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x22, 0x01, - 0x26, 0x02, 0x01, 0x05, 0x60, 0x1a, 0x1c, 0x1f, - 0x4c, 0x0c, 0x29, 0x33, 0xd0, 0x08, 0x29, 0x70, - 0xd0, 0x08, 0x29, 0x96, 0xd1, 0x08, 0xf7, 0xff, - 0xfc, 0x49, 0x20, 0x00, 0x60, 0x38, 0xe0, 0x01, - 0xf7, 0xff, 0xfc, 0x44, 0x55, 0x66, 0xe0, 0x05, - 0x29, 0x7f, 0xdc, 0x01, 0x29, 0x45, 0xd1, 0x01, - 0x20, 0x00, 0x60, 0x38, 0x20, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0xb0, 0x81, - 0x91, 0x00, 0x21, 0x01, 0xb0, 0x83, 0x9b, 0x07, - 0x60, 0x19, 0x91, 0x02, 0x01, 0x05, 0x99, 0x03, - 0x4e, 0x52, 0x19, 0xac, 0x4f, 0x52, 0x29, 0x33, - 0xd0, 0x4f, 0x29, 0x70, 0xd0, 0x06, 0x29, 0x96, - 0xd1, 0x5d, 0xf7, 0xff, 0xfc, 0x1f, 0x20, 0x00, - 0x9b, 0x07, 0x60, 0x18, 0x88, 0xe0, 0x28, 0x00, - 0xd1, 0x0f, 0x20, 0x45, 0x70, 0x38, 0x20, 0x47, - 0x70, 0x78, 0x20, 0x04, 0x80, 0x78, 0x88, 0x60, - 0x80, 0xb8, 0x20, 0x00, 0x71, 0xb8, 0xf7, 0xff, - 0xfc, 0x31, 0x28, 0x00, 0xd0, 0x75, 0x20, 0x02, - 0xe0, 0x51, 0x20, 0x05, 0xf0, 0x01, 0xfe, 0x26, - 0x4f, 0x42, 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, - 0x20, 0x01, 0xe0, 0x76, 0x21, 0x43, 0x70, 0x39, - 0x21, 0x34, 0x70, 0x79, 0x21, 0x0c, 0x80, 0x79, - 0x99, 0x03, 0x29, 0x70, 0xd1, 0x03, 0x21, 0x00, - 0xab, 0x00, 0x70, 0x99, 0xe0, 0x08, 0x9a, 0x06, - 0x78, 0x91, 0xab, 0x00, 0x70, 0x99, 0x88, 0xe1, - 0x9a, 0x06, 0x88, 0x12, 0x42, 0x91, 0xd1, 0x04, - 0x78, 0x61, 0x71, 0x39, 0x88, 0x61, 0x1c, 0x03, - 0xe0, 0x02, 0x79, 0x22, 0x71, 0x3a, 0x1c, 0x03, - 0x46, 0x6a, 0x20, 0x96, 0xf7, 0xff, 0xf8, 0x9c, - 0x81, 0xb8, 0xf7, 0xff, 0xfc, 0x09, 0x28, 0x00, - 0xd1, 0xcd, 0x68, 0xb8, 0xf0, 0x01, 0xfe, 0x1c, - 0xe7, 0xd2, 0x88, 0xe0, 0x28, 0x00, 0xd1, 0x0f, - 0x20, 0x45, 0x70, 0x38, 0x20, 0x47, 0x70, 0x78, - 0x20, 0x04, 0x80, 0x78, 0x88, 0x60, 0x80, 0xb8, - 0x20, 0x00, 0x71, 0xb8, 0xf7, 0xff, 0xfb, 0xea, - 0x28, 0x00, 0xd1, 0xb8, 0xe0, 0x38, 0xe0, 0x2e, - 0x78, 0x60, 0x79, 0x21, 0x42, 0x88, 0xd1, 0x02, - 0x20, 0x02, 0x55, 0x70, 0xe7, 0xb8, 0x79, 0x39, - 0x42, 0x81, 0xd1, 0x02, 0x20, 0x08, 0x55, 0x70, - 0xe0, 0x2a, 0x20, 0x05, 0xf0, 0x01, 0xfd, 0xd2, - 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xac, 0x21, 0x00, - 0xab, 0x00, 0x70, 0x99, 0x21, 0x43, 0x70, 0x39, - 0x21, 0x34, 0x70, 0x79, 0x21, 0x0c, 0x80, 0x79, - 0x78, 0x61, 0x71, 0x39, 0x88, 0x61, 0x46, 0x6a, - 0x1c, 0x03, 0x20, 0x96, 0xf7, 0xff, 0xf8, 0x5c, - 0x81, 0xb8, 0xf7, 0xff, 0xfb, 0xbf, 0x28, 0x00, - 0xd1, 0x8d, 0x68, 0xb8, 0xf0, 0x01, 0xfd, 0xdc, - 0xe0, 0x00, 0xe0, 0x09, 0xe7, 0x87, 0x99, 0x03, - 0x29, 0x7f, 0xdc, 0x02, 0x99, 0x03, 0x29, 0x45, - 0xd1, 0x02, 0x20, 0x00, 0x9b, 0x07, 0x60, 0x18, - 0x98, 0x02, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0xa0, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0x90, - 0xb5, 0x00, 0x06, 0x01, 0x0e, 0x09, 0x22, 0x45, - 0x48, 0x07, 0x70, 0x02, 0x22, 0x41, 0x70, 0x42, - 0x22, 0x04, 0x80, 0x42, 0x71, 0x01, 0xf7, 0xff, - 0xfb, 0x95, 0x28, 0x00, 0xd1, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0x00, 0x06, 0x01, - 0x0e, 0x09, 0x22, 0x45, 0x48, 0x07, 0x70, 0x02, - 0x22, 0x49, 0x70, 0x42, 0x22, 0x04, 0x80, 0x42, - 0x71, 0x01, 0xf7, 0xff, 0xfb, 0x7f, 0x28, 0x00, - 0xd1, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x00, 0x06, 0x01, 0x0e, 0x09, 0x22, 0x43, - 0x48, 0x07, 0x70, 0x02, 0x22, 0x32, 0x70, 0x42, - 0x22, 0x04, 0x80, 0x42, 0x71, 0x01, 0xf7, 0xff, - 0xfb, 0x69, 0x28, 0x00, 0xd1, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0x80, 0x79, 0x41, - 0xb0, 0x82, 0xab, 0x01, 0x70, 0x19, 0x1c, 0x41, - 0x46, 0x68, 0x22, 0x04, 0xf0, 0x14, 0xfc, 0x72, - 0x20, 0x43, 0x4f, 0x0b, 0x70, 0x38, 0x20, 0x34, - 0x70, 0x78, 0x20, 0x0c, 0x80, 0x78, 0x46, 0x6a, - 0x21, 0x00, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xfe, - 0xff, 0xe3, 0x81, 0xb8, 0xf7, 0xff, 0xfb, 0x46, - 0x28, 0x00, 0xd1, 0x00, 0xe0, 0x00, 0x20, 0x01, - 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0xf0, 0x00, 0xc6, - 0x18, 0x36, 0x01, 0x36, 0x1c, 0x07, 0xb0, 0x84, - 0x48, 0x0d, 0x90, 0x03, 0x18, 0x34, 0x68, 0xa0, - 0x28, 0x00, 0xd0, 0x0b, 0x46, 0x69, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x48, 0x1c, 0x05, 0x28, 0x34, - 0xd1, 0x02, 0x98, 0x01, 0xf0, 0x01, 0xfd, 0x48, - 0x2d, 0x00, 0xd1, 0xf3, 0x20, 0x00, 0x99, 0x03, - 0x51, 0x88, 0x60, 0x60, 0x60, 0xa0, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x57, 0xc0, 0xb4, 0xb0, 0x06, 0x0f, - 0x0e, 0x3f, 0x00, 0xc3, 0x18, 0x18, 0x01, 0x00, - 0x49, 0x15, 0x18, 0x41, 0x20, 0x00, 0x68, 0x8b, - 0x2b, 0x0a, 0xda, 0x23, 0x33, 0x01, 0x60, 0x8b, - 0x68, 0x4d, 0x19, 0x4c, 0x34, 0x80, 0x71, 0x27, - 0x2f, 0x34, 0xd1, 0x14, 0x78, 0x14, 0x68, 0x4d, - 0x00, 0x6b, 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xcb, - 0x73, 0x1c, 0x68, 0x54, 0x68, 0x4d, 0x00, 0x6b, - 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xcb, 0x61, 0x1c, - 0x89, 0x17, 0x68, 0x4c, 0x00, 0x63, 0x19, 0x1b, - 0x00, 0x9b, 0x18, 0xca, 0x82, 0x97, 0x68, 0x4a, - 0x32, 0x01, 0x60, 0x4a, 0x2a, 0x0a, 0xdb, 0x00, - 0x60, 0x48, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x57, 0xc0, 0xb4, 0xf0, 0x00, 0xc7, - 0x18, 0x3f, 0x01, 0x3f, 0x4a, 0x16, 0x18, 0xbc, - 0x25, 0x00, 0x68, 0xa0, 0x28, 0x00, 0xdc, 0x02, - 0x1c, 0x28, 0xbc, 0xf0, 0x47, 0x70, 0x38, 0x01, - 0x60, 0xa0, 0x59, 0xd3, 0x18, 0xe0, 0x30, 0x80, - 0x79, 0x00, 0x28, 0x34, 0xd1, 0x14, 0x1c, 0x1e, - 0x00, 0x5b, 0x19, 0x9b, 0x00, 0x9b, 0x18, 0xe3, - 0x7b, 0x1b, 0x70, 0x0b, 0x59, 0xd6, 0x00, 0x73, - 0x19, 0x9b, 0x00, 0x9b, 0x18, 0xe3, 0x69, 0x1b, - 0x60, 0x4b, 0x59, 0xd6, 0x00, 0x73, 0x19, 0x9b, - 0x00, 0x9b, 0x18, 0xe3, 0x8a, 0x9b, 0x81, 0x0b, - 0x59, 0xd1, 0x31, 0x01, 0x51, 0xd1, 0x29, 0x0a, - 0xdb, 0xdb, 0x51, 0xd5, 0xbc, 0xf0, 0x47, 0x70, - 0x2e, 0x08, 0x57, 0xc0, 0xb5, 0x00, 0x78, 0x01, - 0x48, 0x0c, 0x70, 0x01, 0x78, 0x01, 0x29, 0x01, - 0xd0, 0x01, 0x29, 0x02, 0xd1, 0x0e, 0x48, 0x0a, - 0x29, 0x01, 0xd1, 0x04, 0xca, 0x0a, 0xc0, 0x0a, - 0xca, 0x0a, 0xc0, 0x0a, 0xe0, 0x01, 0x88, 0x11, - 0x80, 0x01, 0xf0, 0x00, 0xf8, 0x32, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x88, - 0x2e, 0x08, 0x56, 0xc0, 0xb5, 0x90, 0x27, 0x00, - 0x48, 0x0d, 0x70, 0x07, 0x80, 0x87, 0x20, 0x03, - 0xf0, 0x01, 0xfc, 0xc0, 0x28, 0x00, 0xda, 0x03, - 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x20, 0x01, 0x27, 0xff, 0x4a, 0x07, - 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x18, 0x9c, - 0x70, 0xa0, 0x52, 0xd7, 0x31, 0x01, 0x29, 0x08, - 0xdb, 0xf6, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x88, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x00, 0xf0, 0x01, 0xfb, 0x5f, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xb0, 0x27, 0x00, 0x48, 0x1f, - 0x78, 0x00, 0x4c, 0x1f, 0x28, 0x01, 0xd1, 0x1c, - 0x78, 0x60, 0x28, 0x23, 0xd0, 0x0f, 0xdc, 0x06, - 0x28, 0x21, 0xd0, 0x10, 0x28, 0x22, 0xd1, 0x28, - 0xf0, 0x00, 0xf8, 0x62, 0xe0, 0x24, 0x28, 0x32, - 0xd0, 0x0c, 0x28, 0x34, 0xd1, 0x21, 0x68, 0xa5, - 0xf0, 0x00, 0xf8, 0xea, 0xe0, 0x1c, 0x68, 0xa5, - 0xf0, 0x00, 0xf8, 0x88, 0xe0, 0x18, 0xf0, 0x00, - 0xf8, 0x25, 0xe0, 0x15, 0xf0, 0x00, 0xf8, 0xf8, - 0xe0, 0x12, 0x28, 0x02, 0xd1, 0x11, 0x88, 0x20, - 0xf0, 0x01, 0xfc, 0x28, 0x88, 0x20, 0x28, 0x50, - 0xdd, 0x04, 0x28, 0x58, 0xdc, 0x02, 0xf0, 0x00, - 0xf9, 0x03, 0xe0, 0x05, 0x28, 0x60, 0xdd, 0x04, - 0x28, 0x68, 0xdc, 0x02, 0xf0, 0x00, 0xf9, 0x22, - 0x1c, 0x07, 0x2f, 0x00, 0xd1, 0x02, 0x1c, 0x28, - 0xf0, 0x01, 0xfc, 0x4e, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x88, - 0x2e, 0x08, 0x56, 0xc0, 0xb5, 0x90, 0x20, 0x01, - 0xb0, 0x81, 0x90, 0x00, 0xf0, 0x00, 0xf9, 0x2c, - 0x1c, 0x04, 0xd5, 0x01, 0x20, 0x01, 0xe0, 0x1a, - 0x4f, 0x0f, 0x88, 0xb8, 0x00, 0xe1, 0x1b, 0x09, - 0x00, 0x89, 0x4a, 0x0e, 0x52, 0x50, 0x78, 0x79, - 0x46, 0x6b, 0x22, 0x00, 0x1c, 0x20, 0xf0, 0x00, - 0xfb, 0x05, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x20, - 0xf0, 0x00, 0xf9, 0x60, 0x20, 0x35, 0x70, 0x38, - 0x20, 0x4a, 0x70, 0x78, 0x20, 0x04, 0x80, 0x78, - 0xf0, 0x00, 0xf9, 0xee, 0x98, 0x00, 0xb0, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xf0, 0x20, 0x01, 0xb0, 0x81, 0x90, 0x00, - 0x4c, 0x14, 0x88, 0xa6, 0x27, 0x00, 0x4d, 0x14, - 0x00, 0xf8, 0x1b, 0xc0, 0x00, 0x80, 0x19, 0x41, - 0x78, 0x89, 0x29, 0x01, 0xd0, 0x0d, 0x5a, 0x28, - 0x42, 0xb0, 0xd1, 0x0a, 0x78, 0x61, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0xd6, - 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0x31, 0x37, 0x01, 0x2f, 0x08, 0xdb, 0xe7, - 0x20, 0x35, 0x70, 0x20, 0x20, 0x4b, 0x70, 0x60, - 0x20, 0x04, 0x80, 0x60, 0xf0, 0x00, 0xf9, 0xbc, - 0x98, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0xf0, 0x20, 0x00, - 0xb0, 0x87, 0x90, 0x00, 0x48, 0x2a, 0x89, 0x87, - 0x68, 0x85, 0x79, 0x80, 0x90, 0x05, 0x24, 0x00, - 0xaa, 0x03, 0xb4, 0x04, 0x04, 0x39, 0x0c, 0x09, - 0x9a, 0x06, 0x1c, 0x28, 0xab, 0x07, 0xf0, 0x00, - 0xfa, 0x21, 0xb0, 0x01, 0x90, 0x01, 0x28, 0x00, - 0xdb, 0x04, 0x98, 0x05, 0xf0, 0x00, 0xf9, 0x2c, - 0x1c, 0x06, 0xd5, 0x01, 0x20, 0x00, 0xe0, 0x36, - 0x98, 0x00, 0x30, 0x01, 0x90, 0x00, 0x98, 0x01, - 0x18, 0x2d, 0x1a, 0x3f, 0x2f, 0x00, 0xdd, 0x0b, - 0x04, 0x38, 0x0c, 0x00, 0xf0, 0x01, 0xfb, 0x96, - 0x1c, 0x04, 0xd0, 0xef, 0x1c, 0x20, 0x1c, 0x29, - 0x1c, 0x3a, 0xf0, 0x14, 0xfa, 0xaf, 0x1c, 0x25, - 0xa9, 0x06, 0x78, 0x09, 0x1c, 0x30, 0xaa, 0x03, - 0xab, 0x02, 0xf0, 0x00, 0xfa, 0x83, 0x28, 0x00, - 0xd0, 0xe0, 0x98, 0x00, 0x28, 0x02, 0xda, 0x01, - 0x2f, 0x00, 0xdc, 0xc9, 0x2c, 0x00, 0xd0, 0x02, - 0x1c, 0x20, 0xf0, 0x01, 0xfb, 0xa1, 0x2f, 0x00, - 0xd0, 0x01, 0x20, 0x00, 0x90, 0x02, 0x00, 0xf0, - 0x1b, 0x80, 0x00, 0x80, 0x49, 0x07, 0x18, 0x40, - 0x78, 0x80, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x30, - 0xf0, 0x00, 0xf8, 0xc8, 0x98, 0x02, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x09, 0x79, 0x38, - 0xf0, 0x00, 0xf8, 0xe2, 0x28, 0x00, 0xdb, 0x06, - 0x78, 0x79, 0x46, 0x6b, 0x22, 0x00, 0xf0, 0x00, - 0xfa, 0x51, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x00, - 0x90, 0x00, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x09, 0x79, 0x38, - 0xf0, 0x00, 0xf8, 0xca, 0x28, 0x00, 0xdb, 0x06, - 0x78, 0x79, 0x46, 0x6b, 0x22, 0x00, 0xf0, 0x00, - 0xfa, 0x39, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x00, - 0x90, 0x00, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0x90, 0xb0, 0x81, 0x48, 0x0f, 0x88, 0x00, - 0xf0, 0x00, 0xf8, 0xca, 0x1c, 0x07, 0xd5, 0x01, - 0x20, 0x01, 0xe0, 0x13, 0x20, 0x00, 0x00, 0xf9, - 0x1b, 0xc9, 0x00, 0x89, 0x4a, 0x0a, 0x18, 0x8c, - 0x80, 0xa0, 0x21, 0x50, 0x46, 0x6b, 0x22, 0x00, - 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x17, 0x78, 0xa0, - 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x71, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0x00, 0xb0, 0x81, - 0x48, 0x0b, 0x88, 0x00, 0xf0, 0x00, 0xf8, 0xbc, - 0x28, 0x00, 0xda, 0x01, 0x20, 0x01, 0xe0, 0x0c, - 0x21, 0x00, 0x00, 0xc2, 0x1a, 0x12, 0x00, 0x92, - 0x4b, 0x06, 0x18, 0xd2, 0x80, 0xd1, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x60, 0xf0, 0x00, 0xf9, 0xf2, - 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xf0, 0x4c, 0x22, 0x23, 0x04, 0x5e, 0xe1, - 0x1f, 0x58, 0x29, 0x08, 0xda, 0x35, 0x27, 0x00, - 0x4d, 0x1f, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, - 0x19, 0x49, 0x78, 0x89, 0x29, 0x01, 0xd1, 0x2f, - 0x22, 0x00, 0x00, 0xd3, 0x1a, 0x9b, 0x00, 0x9b, - 0x19, 0x5b, 0x78, 0x9e, 0x2e, 0x01, 0xd0, 0x02, - 0x78, 0xdb, 0x42, 0x8b, 0xd0, 0x02, 0x32, 0x01, - 0x2a, 0x08, 0xdb, 0xf2, 0x2a, 0x08, 0xda, 0x04, - 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x09, - 0xdb, 0xea, 0x29, 0x09, 0xd0, 0x15, 0x00, 0xf8, - 0x1b, 0xc0, 0x00, 0x80, 0x19, 0x40, 0x70, 0xc1, - 0x21, 0x02, 0x70, 0x81, 0x21, 0x00, 0x80, 0x81, - 0x80, 0xc1, 0x82, 0x01, 0x60, 0xc1, 0x83, 0x01, - 0x61, 0x41, 0x76, 0x81, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0x7d, 0x88, 0xa0, 0x30, 0x01, 0x80, 0xa0, - 0x1c, 0x38, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x37, 0x01, 0x2f, 0x08, 0xdb, 0xc5, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x88, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0x90, 0x1c, 0x07, - 0xd5, 0x06, 0x2f, 0x08, 0xdb, 0x04, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x65, 0x00, 0xf8, - 0x1b, 0xc0, 0x00, 0x80, 0x49, 0x0a, 0x18, 0x44, - 0x88, 0xe0, 0x28, 0x00, 0xd0, 0x03, 0xf0, 0x01, - 0xfa, 0x79, 0x20, 0x00, 0x80, 0xe0, 0x1c, 0x38, - 0xf7, 0xff, 0xfd, 0x50, 0x20, 0x01, 0x70, 0xa0, - 0x48, 0x04, 0x88, 0x81, 0x39, 0x01, 0x80, 0x81, - 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x1a, 0x88, - 0xb4, 0x80, 0x06, 0x02, 0x0e, 0x12, 0x20, 0x00, - 0x49, 0x08, 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, - 0x18, 0x5b, 0x78, 0x9f, 0x2f, 0x01, 0xd0, 0x02, - 0x78, 0xdb, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf2, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x56, 0xe0, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x08, 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, - 0x18, 0x5b, 0x78, 0x9f, 0x2f, 0x01, 0xd0, 0x02, - 0x88, 0x9b, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf2, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x56, 0xe0, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x08, 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, - 0x18, 0x5b, 0x78, 0x9f, 0x2f, 0x01, 0xd0, 0x02, - 0x88, 0xdb, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf2, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x80, 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, - 0x49, 0x05, 0x18, 0x47, 0x88, 0xb8, 0x28, 0x00, - 0xd0, 0x03, 0xf0, 0x01, 0xfa, 0x13, 0x20, 0x00, - 0x80, 0xb8, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0x80, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x49, 0x05, 0x18, 0x47, - 0x88, 0xf8, 0x28, 0x00, 0xd0, 0x03, 0xf0, 0x01, - 0xfa, 0x01, 0x20, 0x00, 0x80, 0xf8, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x01, - 0xf9, 0x53, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xc0, 0xb5, 0x00, 0x49, 0x03, - 0x78, 0x08, 0xf0, 0x01, 0xf9, 0x49, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xd0, - 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, 0x49, 0x0a, - 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, 0x18, 0x5b, - 0x78, 0xdb, 0x42, 0x93, 0xd1, 0x06, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x5a, 0x08, 0x06, 0x00, - 0x0e, 0x00, 0x47, 0x70, 0x30, 0x01, 0x28, 0x08, - 0xdb, 0xee, 0x20, 0xff, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0xf0, 0x06, 0x05, - 0x0e, 0x2d, 0x06, 0x0c, 0x0e, 0x24, 0x1c, 0x17, - 0x1c, 0x59, 0x1c, 0x1a, 0x1c, 0x4e, 0xb0, 0x81, - 0x2d, 0x86, 0xd0, 0x3b, 0xdc, 0x0b, 0x1f, 0xef, - 0x3f, 0x79, 0x2f, 0x06, 0xd2, 0x3c, 0xa3, 0x02, - 0x5d, 0xdb, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x3a, 0x32, 0x32, 0x32, 0x32, 0x32, 0x2d, 0xa0, - 0xd0, 0x15, 0xdc, 0x0d, 0x20, 0x02, 0x18, 0x1b, - 0x33, 0x01, 0x2d, 0x87, 0xd0, 0x01, 0x2d, 0x88, - 0xd1, 0x2a, 0x70, 0x15, 0x70, 0x08, 0x70, 0x34, - 0x78, 0x38, 0x70, 0x18, 0x20, 0x04, 0xe0, 0x25, - 0x2d, 0xa1, 0xd0, 0x04, 0x2d, 0xa2, 0xd1, 0x1f, - 0x20, 0xa0, 0x70, 0x10, 0xe0, 0x17, 0x70, 0x15, - 0x1c, 0x0d, 0x88, 0xb9, 0x46, 0x6a, 0x1c, 0x28, - 0xf0, 0x00, 0xf8, 0x5d, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x28, 0x70, 0x04, 0x88, 0xb9, 0x1e, 0x4a, - 0x68, 0x39, 0x30, 0x01, 0xf0, 0x14, 0xf8, 0xbe, - 0x88, 0xb8, 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, - 0x30, 0x01, 0xe0, 0x07, 0x70, 0x15, 0x20, 0x01, - 0x70, 0x08, 0x70, 0x34, 0x20, 0x03, 0xe0, 0x01, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x16, - 0x0e, 0x36, 0x9d, 0x05, 0x1c, 0x04, 0x78, 0x00, - 0x70, 0x18, 0xb0, 0x82, 0x46, 0x6a, 0x34, 0x01, - 0x1c, 0x20, 0xa9, 0x01, 0x1c, 0x1f, 0xf0, 0x00, - 0xf8, 0x57, 0x21, 0x00, 0x43, 0xc9, 0x28, 0x00, - 0xdb, 0x06, 0xa8, 0x00, 0x88, 0x00, 0x18, 0x20, - 0x78, 0x02, 0x30, 0x01, 0x42, 0xb2, 0xd0, 0x01, - 0x1c, 0x08, 0xe0, 0x20, 0x78, 0x3a, 0x2a, 0x85, - 0xd0, 0x17, 0xdc, 0x06, 0x2a, 0x80, 0xd0, 0x10, - 0x2a, 0x83, 0xd0, 0x12, 0x2a, 0x84, 0xd1, 0xf3, - 0xe0, 0x0f, 0x2a, 0x86, 0xd0, 0x0d, 0x2a, 0xa0, - 0xd0, 0x01, 0x2a, 0xa1, 0xd1, 0xec, 0x60, 0x28, - 0xa8, 0x01, 0x88, 0x00, 0x38, 0x01, 0x80, 0xa8, - 0xe0, 0x03, 0x78, 0x00, 0x23, 0x80, 0x40, 0x18, - 0x70, 0x28, 0xa8, 0x01, 0x88, 0x00, 0xa9, 0x00, - 0x88, 0x09, 0x18, 0x40, 0x30, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x81, 0xab, 0x00, 0x80, 0x19, - 0x29, 0x7f, 0xdc, 0x05, 0xa9, 0x00, 0x88, 0x09, - 0x70, 0x01, 0x20, 0x01, 0x80, 0x10, 0xe0, 0x15, - 0xa9, 0x00, 0x88, 0x09, 0x29, 0xff, 0xdc, 0x07, - 0x21, 0x81, 0x70, 0x01, 0x21, 0x02, 0x80, 0x11, - 0xa9, 0x00, 0x88, 0x09, 0x70, 0x41, 0xe0, 0x09, - 0x21, 0x82, 0x70, 0x01, 0x21, 0x03, 0x80, 0x11, - 0xa9, 0x00, 0x78, 0x49, 0x70, 0x41, 0xa9, 0x00, - 0x78, 0x09, 0x70, 0x81, 0xb0, 0x01, 0x47, 0x70, - 0xb4, 0x90, 0x27, 0x01, 0x78, 0x04, 0x23, 0x80, - 0x40, 0x23, 0x2b, 0x80, 0xd1, 0x14, 0x06, 0x63, - 0x0e, 0x5b, 0x80, 0x13, 0x88, 0x13, 0x2b, 0x01, - 0xd1, 0x01, 0x78, 0x40, 0xe0, 0x05, 0x2b, 0x02, - 0xd1, 0x07, 0x78, 0x43, 0x02, 0x1b, 0x78, 0x80, - 0x18, 0x18, 0x80, 0x08, 0x88, 0x10, 0x30, 0x01, - 0xe0, 0x04, 0x27, 0x00, 0x43, 0xff, 0xe0, 0x02, - 0x80, 0x0c, 0x20, 0x01, 0x80, 0x10, 0x1c, 0x38, - 0xbc, 0x90, 0x47, 0x70, 0xb5, 0xf0, 0x1c, 0x07, - 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x18, 0x00, 0xfb, - 0x1b, 0xdb, 0x00, 0x9b, 0xb0, 0x82, 0x4c, 0x42, - 0x19, 0x1e, 0x78, 0xb3, 0x1e, 0x9c, 0x4b, 0x41, - 0x93, 0x01, 0x1d, 0x1d, 0x2c, 0x07, 0xd2, 0x63, - 0xa3, 0x01, 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x60, 0x65, 0x03, 0x08, 0x40, 0x24, 0x6b, 0x00, - 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x80, - 0xe0, 0x66, 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xfa, 0x83, 0x1c, 0x04, 0x28, 0x01, 0xd1, 0x5a, - 0x78, 0xb0, 0x28, 0x04, 0xd1, 0x57, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfb, 0xf7, 0x1c, 0x01, - 0xd0, 0x59, 0x9b, 0x01, 0x68, 0x9d, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x68, - 0x1c, 0x04, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x46, - 0xe0, 0x36, 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xfc, 0x53, 0x1c, 0x04, 0x28, 0x01, 0xd1, 0x3e, - 0x78, 0xb0, 0x28, 0x04, 0xd1, 0x3b, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfb, 0xdb, 0x1c, 0x01, - 0xd0, 0x3d, 0x9b, 0x01, 0x68, 0x9d, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x4c, - 0x1c, 0x04, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x2a, - 0xe0, 0x1a, 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xfc, 0x03, 0x1c, 0x04, 0x28, 0x01, 0xd1, 0x22, - 0x78, 0xb0, 0x28, 0x04, 0xd1, 0x1f, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfb, 0xbf, 0x1c, 0x01, - 0xd0, 0x21, 0x9b, 0x01, 0x68, 0x9d, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x30, - 0x1c, 0x04, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x0e, - 0x1c, 0x28, 0xf0, 0x01, 0xf8, 0xb5, 0xe0, 0x12, - 0xe0, 0x10, 0x1c, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x17, 0xe0, 0x09, 0x1c, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x62, 0xe0, 0x04, 0xe0, 0x06, - 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, 0xfd, 0x14, - 0x1c, 0x04, 0xe0, 0x00, 0x24, 0x00, 0x1c, 0x20, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x17, - 0x22, 0x01, 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, - 0xb0, 0x81, 0x60, 0x3a, 0x90, 0x00, 0x4e, 0x1f, - 0x19, 0x85, 0x29, 0x21, 0xd0, 0x02, 0x29, 0x80, - 0xd0, 0x2f, 0xe0, 0x06, 0x20, 0x03, 0xf0, 0x01, - 0xf8, 0x5d, 0x4c, 0x1b, 0x60, 0xa0, 0x1c, 0x01, - 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x2a, 0x20, 0x32, - 0x70, 0x20, 0x20, 0x23, 0x70, 0x60, 0x20, 0x0c, - 0x80, 0x60, 0x98, 0x00, 0x5a, 0x30, 0x80, 0xa0, - 0x78, 0xe8, 0x71, 0xa0, 0x1c, 0x0b, 0x79, 0xa1, - 0x22, 0x00, 0x20, 0x82, 0xf7, 0xff, 0xfe, 0x66, - 0x81, 0xa0, 0xf7, 0xff, 0xfe, 0x35, 0x28, 0x00, - 0xd1, 0x01, 0x60, 0x38, 0xe7, 0xe5, 0x78, 0xe8, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x09, 0xf0, 0x00, - 0xff, 0xe9, 0x80, 0xa8, 0x20, 0x03, 0x70, 0xa8, - 0xe0, 0x03, 0x7e, 0xa8, 0x28, 0x00, 0xd1, 0x00, - 0x60, 0x38, 0x20, 0x01, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0x2e, 0x08, 0x56, 0xc0, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x22, 0x01, - 0x60, 0x1a, 0x00, 0xc2, 0x1a, 0x12, 0x00, 0x92, - 0xb0, 0x81, 0x92, 0x00, 0x1c, 0x1f, 0x4e, 0x54, - 0x19, 0x95, 0x4c, 0x54, 0x29, 0x80, 0xd0, 0x35, - 0xdc, 0x04, 0x29, 0x22, 0xd0, 0x13, 0x29, 0x50, - 0xd1, 0x0d, 0xe0, 0x0e, 0x29, 0x83, 0xd0, 0x11, - 0x29, 0x84, 0xd1, 0x08, 0xf7, 0xff, 0xfd, 0xd4, - 0x20, 0x03, 0xf0, 0x01, 0xf8, 0x03, 0x4c, 0x4c, - 0x60, 0xa0, 0x1c, 0x01, 0xd1, 0x6d, 0x20, 0x00, - 0xe0, 0x89, 0x20, 0x02, 0xe0, 0x67, 0xf7, 0xff, - 0xfd, 0xc7, 0xe7, 0xfa, 0xf7, 0xff, 0xfd, 0xc4, - 0x20, 0x34, 0x70, 0x20, 0x20, 0x31, 0x70, 0x60, - 0x20, 0x04, 0x80, 0x60, 0x78, 0xe8, 0x71, 0x20, - 0xf7, 0xff, 0xfd, 0xde, 0x28, 0x00, 0xd1, 0x01, - 0x60, 0x38, 0xe0, 0x74, 0x78, 0xe8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x3c, 0xf0, 0x00, 0xff, 0x92, - 0x80, 0xa8, 0xe0, 0x65, 0xf7, 0xff, 0xfd, 0xa8, - 0x9a, 0x03, 0x78, 0x10, 0x28, 0x80, 0xd1, 0x21, - 0x20, 0x32, 0x70, 0x20, 0x20, 0x23, 0x70, 0x60, - 0x20, 0x0c, 0x80, 0x60, 0x9a, 0x00, 0x5a, 0xb0, - 0x80, 0xa0, 0x78, 0xe9, 0x71, 0xa1, 0x22, 0x00, - 0x20, 0x81, 0x68, 0xa3, 0xf7, 0xff, 0xfd, 0xe6, - 0x81, 0xa0, 0xf7, 0xff, 0xfd, 0xb5, 0x28, 0x00, - 0xd0, 0xc1, 0x78, 0xe8, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x28, 0xf0, 0x00, 0xff, 0x6b, 0x80, 0xa8, - 0x20, 0x07, 0xe0, 0x20, 0x20, 0x32, 0x70, 0x20, - 0x20, 0x23, 0x70, 0x60, 0x20, 0x0c, 0x80, 0x60, - 0x9a, 0x00, 0x5a, 0xb0, 0x80, 0xa0, 0x78, 0xe9, - 0x71, 0xa1, 0x22, 0x00, 0x20, 0xa2, 0x68, 0xa3, - 0xf7, 0xff, 0xfd, 0xc4, 0x81, 0xa0, 0xf7, 0xff, - 0xfd, 0x93, 0x28, 0x00, 0xd0, 0x0a, 0x78, 0xe8, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x17, 0xf0, 0x00, - 0xff, 0x49, 0x80, 0xa8, 0x20, 0x05, 0x70, 0xa8, - 0xe0, 0x1c, 0xe7, 0xff, 0x20, 0x32, 0x70, 0x20, - 0x20, 0x23, 0x70, 0x60, 0x20, 0x0c, 0x80, 0x60, - 0x9a, 0x00, 0x5a, 0xb0, 0x80, 0xa0, 0x78, 0xe8, - 0x71, 0xa0, 0x1c, 0x0b, 0x22, 0x00, 0x1c, 0x01, - 0x20, 0x85, 0xf7, 0xff, 0xfd, 0x9f, 0x81, 0xa0, - 0xf7, 0xff, 0xfd, 0x78, 0x28, 0x00, 0xd1, 0x01, - 0x60, 0x38, 0xe7, 0x78, 0x20, 0x02, 0x70, 0xa8, - 0x20, 0x00, 0x60, 0x38, 0x20, 0x01, 0xb0, 0x01, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xd0, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x1c, 0x07, 0x06, 0x08, 0x0e, 0x00, - 0x21, 0x01, 0xb0, 0x84, 0x9a, 0x07, 0x26, 0x01, - 0x60, 0x11, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, - 0x91, 0x02, 0x4a, 0x78, 0x92, 0x03, 0x18, 0x8c, - 0x28, 0x22, 0xd0, 0x0d, 0x4d, 0x76, 0x28, 0x32, - 0xd0, 0x6f, 0x28, 0x34, 0xd0, 0x12, 0x28, 0x60, - 0xd1, 0x6c, 0x20, 0x03, 0xf0, 0x00, 0xff, 0x4a, - 0x60, 0xa8, 0x1c, 0x01, 0xd1, 0x67, 0xe0, 0x16, - 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0x23, 0x1c, 0x38, - 0xf0, 0x00, 0xfc, 0x16, 0x1c, 0x06, 0xd0, 0x5f, - 0x20, 0x02, 0xe0, 0xcc, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0x19, 0x89, 0xa8, 0x30, 0x0a, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x00, 0xff, 0x33, 0x4f, 0x67, - 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x00, - 0xe0, 0xbf, 0x89, 0xa9, 0x22, 0x01, 0x02, 0x92, - 0x42, 0x91, 0xdc, 0x1e, 0x31, 0x01, 0xab, 0x01, - 0x80, 0x19, 0x68, 0xa9, 0x91, 0x00, 0x21, 0x32, - 0x70, 0x39, 0x21, 0x23, 0x70, 0x79, 0x21, 0x0c, - 0x80, 0x79, 0x99, 0x02, 0x9a, 0x03, 0x5a, 0x51, - 0x80, 0xb9, 0x78, 0xe1, 0x71, 0xb9, 0x46, 0x6a, - 0x1c, 0x03, 0x20, 0xa0, 0xf7, 0xff, 0xfd, 0x32, - 0x81, 0xb8, 0x20, 0x00, 0x82, 0x20, 0x21, 0x05, - 0x60, 0xe0, 0x70, 0xa1, 0x9a, 0x07, 0x60, 0x10, - 0xe0, 0x1f, 0xab, 0x01, 0x80, 0x1a, 0x68, 0xa9, - 0x91, 0x00, 0x21, 0x32, 0x70, 0x39, 0x21, 0x23, - 0x70, 0x79, 0x21, 0x0c, 0x80, 0x79, 0x99, 0x02, - 0x9a, 0x03, 0x5a, 0x51, 0x80, 0xb9, 0x78, 0xe1, - 0x71, 0xb9, 0x46, 0x6a, 0x1c, 0x03, 0x20, 0xa1, - 0xf7, 0xff, 0xfd, 0x14, 0x81, 0xb8, 0x68, 0xa8, - 0x60, 0xa0, 0x4b, 0x47, 0x18, 0xc0, 0x60, 0xe0, - 0x89, 0xa8, 0x1a, 0xc0, 0x82, 0x20, 0x20, 0x06, - 0x70, 0xa0, 0xf7, 0xff, 0xfc, 0xe3, 0x28, 0x00, - 0xd1, 0x07, 0x68, 0xb8, 0xf0, 0x00, 0xff, 0x08, - 0xe0, 0x2f, 0xe0, 0x0e, 0xe0, 0x63, 0xe0, 0x3a, - 0xe0, 0x6e, 0x78, 0xe0, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x3a, 0xf0, 0x00, 0xfe, 0x87, 0x80, 0xa0, - 0xe0, 0x62, 0x1c, 0x38, 0xf7, 0xff, 0xfc, 0xae, - 0x20, 0x03, 0xf0, 0x00, 0xfe, 0xcb, 0x60, 0xa8, - 0x1c, 0x01, 0xd0, 0x98, 0x20, 0x32, 0x70, 0x28, - 0x20, 0x23, 0x70, 0x68, 0x20, 0x0c, 0x80, 0x68, - 0x98, 0x02, 0x9a, 0x03, 0x5a, 0x10, 0x80, 0xa8, - 0x78, 0xe0, 0x71, 0xa8, 0x1c, 0x0b, 0x22, 0x00, - 0x1c, 0x01, 0x20, 0x84, 0xf7, 0xff, 0xfc, 0xd6, - 0x81, 0xa8, 0xf7, 0xff, 0xfc, 0xa5, 0x28, 0x00, - 0xd1, 0x01, 0x26, 0x00, 0xe0, 0x40, 0x78, 0xe0, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x23, 0xf0, 0x00, - 0xfe, 0x59, 0x80, 0xa0, 0xe0, 0x32, 0x20, 0x32, - 0x70, 0x28, 0x20, 0x23, 0x70, 0x68, 0x20, 0x0c, - 0x80, 0x68, 0x98, 0x02, 0x9a, 0x03, 0x5a, 0x10, - 0x80, 0xa8, 0x78, 0xe0, 0x71, 0xa8, 0x1c, 0x0b, - 0x22, 0x00, 0x1c, 0x01, 0x20, 0xa2, 0xf7, 0xff, - 0xfc, 0xb1, 0x81, 0xa8, 0xf7, 0xff, 0xfc, 0x80, - 0x28, 0x00, 0xd1, 0x02, 0x9a, 0x07, 0x60, 0x10, - 0xe7, 0xd7, 0x78, 0xe0, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x10, 0xf0, 0x00, 0xfe, 0x33, 0x80, 0xa0, - 0x21, 0x05, 0x70, 0xa1, 0xe0, 0x0c, 0x28, 0x7f, - 0xda, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, - 0x9a, 0x07, 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0x64, - 0x1c, 0x06, 0xd0, 0x01, 0x20, 0x08, 0x70, 0xa0, - 0x1c, 0x30, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xd0, - 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x20, 0x01, - 0xb0, 0x84, 0x9a, 0x07, 0x25, 0x01, 0x60, 0x10, - 0x98, 0x04, 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, - 0x90, 0x03, 0x4e, 0xcf, 0x19, 0x87, 0x4c, 0xcf, - 0x29, 0x60, 0xd0, 0x6d, 0xdc, 0x0e, 0x29, 0x22, - 0xd0, 0x37, 0x29, 0x32, 0xd0, 0x69, 0x29, 0x34, - 0xd0, 0x68, 0x29, 0x50, 0xd1, 0x67, 0x20, 0x03, - 0xf0, 0x00, 0xfe, 0x40, 0x60, 0xa0, 0x28, 0x00, - 0xd1, 0x62, 0xe0, 0x80, 0x29, 0x80, 0xd0, 0x32, - 0x29, 0x84, 0xd0, 0x5e, 0x29, 0x86, 0xd1, 0x5a, - 0x98, 0x04, 0xf7, 0xff, 0xfc, 0x01, 0x20, 0x86, - 0x76, 0xb8, 0xf7, 0xff, 0xfb, 0x41, 0x1c, 0x05, - 0xd5, 0x73, 0x20, 0x01, 0xab, 0x01, 0x70, 0x18, - 0x21, 0x32, 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, - 0x21, 0x0c, 0x80, 0x61, 0x98, 0x03, 0x5a, 0x30, - 0x80, 0xa0, 0x78, 0xf9, 0x71, 0xa1, 0x20, 0x88, - 0x68, 0xa3, 0xaa, 0x01, 0xf7, 0xff, 0xfc, 0x3a, - 0x81, 0xa0, 0xf7, 0xff, 0xfc, 0x09, 0x28, 0x00, - 0xd1, 0x5c, 0x1c, 0x28, 0xf7, 0xff, 0xfb, 0x6e, - 0xe0, 0xdd, 0x98, 0x04, 0xf7, 0xff, 0xfb, 0xdc, - 0x98, 0x04, 0xf0, 0x00, 0xfa, 0xe1, 0x1c, 0x05, - 0xd0, 0x2a, 0x20, 0x02, 0xe1, 0x4c, 0x98, 0x04, - 0xf7, 0xff, 0xfb, 0xd2, 0x9a, 0x06, 0x78, 0x10, - 0x28, 0x80, 0xd1, 0x27, 0x21, 0x32, 0x70, 0x21, - 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, - 0x98, 0x03, 0x5a, 0x30, 0x80, 0xa0, 0x78, 0xf9, - 0x71, 0xa1, 0x22, 0x00, 0x20, 0x81, 0x68, 0xa3, - 0xf7, 0xff, 0xfc, 0x10, 0x81, 0xa0, 0xf7, 0xff, - 0xfb, 0xdf, 0x28, 0x00, 0xd0, 0x73, 0x78, 0xf8, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x9a, 0xf0, 0x00, - 0xfd, 0x95, 0x80, 0xb8, 0x20, 0x07, 0xe1, 0x23, - 0xe1, 0x23, 0xe0, 0xea, 0xe0, 0xe6, 0xe1, 0x13, - 0xe0, 0xed, 0xe0, 0x7e, 0x8a, 0x38, 0x28, 0x00, - 0xdd, 0x5e, 0x68, 0xf9, 0x29, 0x00, 0xd0, 0x5c, - 0x91, 0x01, 0x21, 0x32, 0x4c, 0x91, 0x70, 0x21, - 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, - 0x99, 0x03, 0x5a, 0x71, 0x80, 0xa1, 0x78, 0xf9, - 0x71, 0xa1, 0x26, 0x01, 0x02, 0xb6, 0x42, 0xb0, - 0xdd, 0x1c, 0x48, 0x8b, 0xf0, 0x00, 0xfd, 0xbe, - 0x60, 0xa0, 0x28, 0x00, 0xd1, 0x04, 0x20, 0x00, - 0xe0, 0x01, 0xe0, 0x8e, 0xe0, 0x7e, 0xe0, 0xfd, - 0xab, 0x02, 0x80, 0x1e, 0x78, 0xf9, 0x1c, 0x03, - 0x20, 0xa1, 0xaa, 0x01, 0xf7, 0xff, 0xfb, 0xce, - 0x81, 0xa0, 0x68, 0xf8, 0x4b, 0x81, 0x18, 0xc0, - 0x60, 0xf8, 0x8a, 0x38, 0x1a, 0xc0, 0x82, 0x38, - 0x20, 0x06, 0xe0, 0x1a, 0x30, 0x0a, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x00, 0xfd, 0x9f, 0x60, 0xa0, - 0x28, 0x00, 0xd0, 0xe0, 0x8a, 0x39, 0x31, 0x01, - 0xab, 0x02, 0x80, 0x19, 0x78, 0xf9, 0x1c, 0x03, - 0x20, 0xa0, 0xaa, 0x01, 0xf7, 0xff, 0xfb, 0xb2, - 0x81, 0xa0, 0x24, 0x00, 0x82, 0x3c, 0x60, 0xfc, - 0x68, 0xb8, 0xf0, 0x00, 0xfd, 0xb1, 0x20, 0x05, - 0x60, 0xbc, 0x70, 0xb8, 0xf7, 0xff, 0xfb, 0x82, - 0x28, 0x00, 0xd0, 0x0c, 0x78, 0xf8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x67, 0xf0, 0x00, 0xfd, 0x2e, - 0x80, 0xb8, 0x20, 0x00, 0xe0, 0x02, 0xe0, 0xa1, - 0xe0, 0x03, 0xe0, 0x02, 0x9a, 0x07, 0x60, 0x10, - 0xe0, 0xb7, 0x7e, 0xb8, 0x28, 0x00, 0xd1, 0x11, - 0x78, 0xf8, 0x30, 0x60, 0x04, 0x00, 0x0c, 0x00, - 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, 0x21, 0x7d, - 0x00, 0xc9, 0xf0, 0x00, 0xfd, 0x17, 0x80, 0xf8, - 0x20, 0x04, 0x70, 0xb8, 0x68, 0xa0, 0xf0, 0x00, - 0xfd, 0x83, 0xe0, 0xa2, 0x20, 0x00, 0x76, 0xb8, - 0xe0, 0x9f, 0x20, 0x84, 0x76, 0xb8, 0x21, 0x32, - 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, - 0x80, 0x61, 0x98, 0x03, 0x5a, 0x30, 0x80, 0xa0, - 0x78, 0xf9, 0x71, 0xa1, 0x22, 0x00, 0x20, 0x85, - 0x68, 0xa3, 0xf7, 0xff, 0xfb, 0x67, 0x81, 0xa0, - 0xf7, 0xff, 0xfb, 0x36, 0x28, 0x00, 0xd1, 0x01, - 0x25, 0x00, 0xe0, 0x03, 0x98, 0x04, 0xf0, 0x00, - 0xfa, 0x13, 0x1c, 0x05, 0x2d, 0x00, 0xd0, 0x00, - 0xe7, 0x2f, 0xe0, 0x7e, 0x78, 0xf8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x98, 0x00, 0x43, 0x18, 0x49, 0x40, - 0xf0, 0x00, 0xfc, 0xe0, 0x80, 0xb8, 0x20, 0x01, - 0xe0, 0x70, 0x00, 0xe8, 0x1b, 0x40, 0x00, 0x80, - 0x19, 0x81, 0x78, 0xc9, 0xab, 0x01, 0x70, 0x19, - 0x99, 0x03, 0x5a, 0x71, 0x52, 0x31, 0x21, 0x32, - 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, - 0x80, 0x61, 0x98, 0x03, 0x5a, 0x30, 0x80, 0xa0, - 0x78, 0xf9, 0x71, 0xa1, 0x20, 0x87, 0x68, 0xa3, - 0xaa, 0x01, 0xf7, 0xff, 0xfb, 0x2f, 0x81, 0xa0, - 0xf7, 0xff, 0xfa, 0xfe, 0x28, 0x00, 0xd1, 0x03, - 0x1c, 0x28, 0xf7, 0xff, 0xfa, 0x63, 0xe0, 0x31, - 0x21, 0x21, 0x9a, 0x07, 0x1c, 0x28, 0xf7, 0xff, - 0xfc, 0x8f, 0x1c, 0x05, 0x78, 0xf8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x25, 0xf0, 0x00, 0xfc, 0xaa, - 0x80, 0xb8, 0xe0, 0x3a, 0x98, 0x04, 0x1d, 0x22, - 0xe0, 0x01, 0x22, 0x00, 0x98, 0x04, 0xf7, 0xfe, - 0xff, 0xd9, 0x1c, 0x05, 0xe0, 0x31, 0x21, 0x32, - 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, - 0x80, 0x61, 0x99, 0x03, 0x5a, 0x71, 0x80, 0xa1, - 0x78, 0xf9, 0x71, 0xa1, 0x22, 0x00, 0x1c, 0x03, - 0x20, 0x84, 0xf7, 0xff, 0xfa, 0xfb, 0x81, 0xa0, - 0xf7, 0xff, 0xfa, 0xca, 0x28, 0x00, 0xd1, 0x03, - 0x9a, 0x07, 0x60, 0x10, 0x25, 0x00, 0xe0, 0x18, - 0x78, 0xf8, 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, - 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, 0x49, 0x0e, - 0xf0, 0x00, 0xfc, 0x7c, 0x80, 0xb8, 0xe0, 0x0a, - 0x29, 0x7f, 0xda, 0x01, 0x21, 0x01, 0xe0, 0x00, - 0x21, 0x00, 0x98, 0x04, 0x9a, 0x07, 0xf0, 0x00, - 0xf9, 0xaf, 0x1c, 0x05, 0xd0, 0x01, 0x20, 0x08, - 0x70, 0xb8, 0x1c, 0x28, 0xb0, 0x04, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xc0, - 0x00, 0x00, 0x27, 0x10, 0x2e, 0x08, 0x56, 0xd0, - 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x03, 0xff, - 0xb5, 0x80, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x07, - 0x20, 0x01, 0x60, 0x18, 0x29, 0x50, 0xd0, 0x0e, - 0xdc, 0x06, 0x29, 0x22, 0xd0, 0x0b, 0x29, 0x32, - 0xd0, 0x09, 0x29, 0x34, 0xd1, 0x0d, 0xe0, 0x06, - 0x29, 0x80, 0xd0, 0x02, 0x29, 0x84, 0xd1, 0x08, - 0xe0, 0x01, 0x20, 0x00, 0x70, 0x10, 0x1c, 0x38, - 0xf7, 0xff, 0xfe, 0x2e, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x29, 0x7f, 0xda, 0x01, 0x21, 0x01, - 0xe0, 0x00, 0x21, 0x00, 0x1c, 0x38, 0x1c, 0x1a, - 0xf0, 0x00, 0xf9, 0x72, 0x28, 0x00, 0xd0, 0xf1, - 0x21, 0x08, 0x00, 0xfa, 0x1b, 0xd2, 0x00, 0x92, - 0x4b, 0x02, 0x18, 0xd2, 0x70, 0x91, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x20, 0x01, - 0xb0, 0x81, 0x1c, 0x17, 0x9a, 0x04, 0x25, 0x01, - 0x60, 0x10, 0x98, 0x01, 0x00, 0xc2, 0x1a, 0x12, - 0x00, 0x92, 0x1c, 0x16, 0x48, 0x78, 0x90, 0x00, - 0x18, 0x14, 0x29, 0x80, 0xd0, 0x59, 0xdc, 0x08, - 0x29, 0x22, 0xd0, 0x1a, 0x29, 0x32, 0xd0, 0x55, - 0x29, 0x34, 0xd0, 0x53, 0x29, 0x50, 0xd1, 0x61, - 0xe0, 0xc8, 0x29, 0x84, 0xd0, 0x4e, 0x4e, 0x71, - 0x29, 0xa0, 0xd0, 0x18, 0x29, 0xa1, 0xd1, 0x59, - 0x98, 0x01, 0xf7, 0xff, 0xfa, 0x19, 0x8b, 0x21, - 0x29, 0x00, 0xd1, 0x54, 0x88, 0xb8, 0xf0, 0x00, - 0xfc, 0x45, 0x60, 0xb0, 0x28, 0x00, 0xd1, 0x58, - 0xe0, 0x15, 0x98, 0x01, 0xf7, 0xff, 0xfa, 0x0c, - 0x98, 0x01, 0xf0, 0x00, 0xf9, 0x11, 0x1c, 0x05, - 0xd0, 0x6a, 0x20, 0x02, 0xe0, 0xbd, 0x98, 0x01, - 0xf7, 0xff, 0xfa, 0x02, 0x8b, 0x21, 0x29, 0x00, - 0xd1, 0x07, 0x88, 0xb8, 0xf0, 0x00, 0xfc, 0x2e, - 0x60, 0xb0, 0x28, 0x00, 0xd1, 0x0c, 0x20, 0x00, - 0xe0, 0xb1, 0x88, 0xb8, 0x18, 0x08, 0x04, 0x02, - 0x0c, 0x12, 0x69, 0x60, 0xf0, 0x00, 0xfc, 0x27, - 0x60, 0xb0, 0x28, 0x00, 0xd0, 0xf3, 0x61, 0x60, - 0x20, 0x34, 0x70, 0x30, 0x70, 0x70, 0x20, 0x0c, - 0x80, 0x70, 0x78, 0xe0, 0x71, 0x30, 0x88, 0xb9, - 0x8b, 0x20, 0x18, 0x09, 0x81, 0xb1, 0x68, 0xb1, - 0x18, 0x08, 0x88, 0xba, 0x68, 0x39, 0xf0, 0x13, - 0xfb, 0x2d, 0xf7, 0xff, 0xfa, 0x07, 0x28, 0x00, - 0xd1, 0x05, 0x68, 0xb0, 0xf0, 0x00, 0xfc, 0x2c, - 0xe0, 0x53, 0xe0, 0x36, 0xe0, 0x76, 0x78, 0xe0, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x46, 0xf0, 0x00, - 0xfb, 0xad, 0x80, 0xa0, 0x20, 0x00, 0x83, 0x20, - 0x61, 0x60, 0xe0, 0x22, 0xe0, 0x6d, 0x88, 0xb8, - 0x18, 0x08, 0x04, 0x02, 0x0c, 0x12, 0x69, 0x60, - 0xf0, 0x00, 0xfb, 0xf1, 0x60, 0xb0, 0x28, 0x00, - 0xd0, 0xbd, 0x61, 0x60, 0x8b, 0x21, 0x69, 0x60, - 0x18, 0x40, 0x88, 0xba, 0x68, 0x39, 0xf0, 0x13, - 0xfb, 0x01, 0x8b, 0x20, 0x88, 0xb9, 0x18, 0x40, - 0x83, 0x20, 0x78, 0xe0, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x33, 0xf0, 0x00, 0xfb, 0x87, 0x80, 0xa0, - 0x20, 0x00, 0x9a, 0x04, 0x60, 0x10, 0xe0, 0x55, - 0xe0, 0x54, 0x98, 0x01, 0xf7, 0xff, 0xf9, 0x98, - 0x78, 0x38, 0x28, 0x80, 0xd1, 0x23, 0x20, 0x32, - 0x4f, 0x2c, 0x70, 0x38, 0x20, 0x23, 0x70, 0x78, - 0x20, 0x0c, 0x80, 0x78, 0x98, 0x00, 0x5b, 0x80, - 0x80, 0xb8, 0x78, 0xe1, 0x71, 0xb9, 0x22, 0x00, - 0x20, 0x81, 0x68, 0xbb, 0xf7, 0xff, 0xf9, 0xd6, - 0x81, 0xb8, 0xf7, 0xff, 0xf9, 0xa5, 0x28, 0x00, - 0xd1, 0x01, 0x25, 0x00, 0xe0, 0x36, 0x78, 0xe0, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x1c, 0xf0, 0x00, - 0xfb, 0x59, 0x80, 0xa0, 0xe0, 0x2a, 0x7e, 0xa0, - 0x28, 0x00, 0xd1, 0x10, 0x78, 0xe0, 0x30, 0x60, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x21, 0x7d, 0x00, 0xc9, 0xf0, 0x00, - 0xfb, 0x49, 0x80, 0xe0, 0x20, 0x00, 0x9a, 0x04, - 0x60, 0x10, 0x20, 0x04, 0xe0, 0x15, 0x20, 0x00, - 0x76, 0xa0, 0xe0, 0x13, 0x98, 0x01, 0x9b, 0x04, - 0x1c, 0x3a, 0xf7, 0xff, 0xfd, 0x29, 0x1c, 0x05, - 0xe0, 0x0c, 0x29, 0x7f, 0xda, 0x01, 0x21, 0x01, - 0xe0, 0x00, 0x21, 0x00, 0x98, 0x01, 0x9a, 0x04, - 0xf0, 0x00, 0xf8, 0x6e, 0x1c, 0x05, 0xd0, 0x01, - 0x20, 0x08, 0x70, 0xa0, 0x1c, 0x28, 0xb0, 0x01, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xd0, - 0x00, 0x00, 0x27, 0x10, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0xf0, 0x1c, 0x07, 0x06, 0x08, 0x0e, 0x00, - 0x21, 0x01, 0x26, 0x02, 0x00, 0xfa, 0x1b, 0xd2, - 0x00, 0x92, 0x60, 0x19, 0x1c, 0x1c, 0x49, 0x19, - 0x18, 0x55, 0x28, 0x22, 0xd0, 0x19, 0x28, 0x50, - 0xd0, 0x11, 0x28, 0x80, 0xd0, 0x21, 0x28, 0x85, - 0xd1, 0x23, 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0x20, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x25, 0x28, 0x00, - 0xd0, 0x00, 0x70, 0xae, 0x21, 0x00, 0x60, 0x21, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x1a, 0x28, 0x00, 0xd0, 0xf7, - 0xe0, 0x07, 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0x0c, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x11, 0x28, 0x00, - 0xd0, 0xee, 0x70, 0xae, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x00, 0x22, 0x34, 0x49, 0x0a, 0x70, 0x0a, - 0x22, 0x33, 0x70, 0x4a, 0x22, 0x04, 0x80, 0x4a, - 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, 0x4a, 0x07, - 0x18, 0x80, 0x78, 0xc0, 0x71, 0x08, 0xf7, 0xff, - 0xf9, 0x0b, 0x28, 0x00, 0xd1, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xf0, 0x1c, 0x04, 0x20, 0x01, 0x26, 0x01, - 0x60, 0x10, 0x1c, 0x17, 0x4d, 0x1b, 0x29, 0x00, - 0xd0, 0x08, 0x20, 0x03, 0xf0, 0x00, 0xfb, 0x02, - 0x60, 0xa8, 0x28, 0x00, 0xd1, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x32, 0x70, 0x28, - 0x20, 0x23, 0x70, 0x68, 0x20, 0x0c, 0x80, 0x68, - 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, 0x49, 0x12, - 0x5a, 0x0a, 0x80, 0xaa, 0x18, 0x44, 0x78, 0xe1, - 0x71, 0xa9, 0x22, 0x00, 0x20, 0x84, 0x68, 0xab, - 0xf7, 0xff, 0xf9, 0x08, 0x81, 0xa8, 0xf7, 0xff, - 0xf8, 0xd7, 0x28, 0x00, 0xd1, 0x02, 0x26, 0x00, - 0x60, 0x38, 0xe0, 0x0a, 0x78, 0xe0, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x06, 0xf0, 0x00, 0xfa, 0x8a, - 0x80, 0xa0, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xe0, 0x00, 0x00, 0x27, 0x10, - 0x20, 0x00, 0x47, 0x70, 0xb5, 0x90, 0x28, 0x00, - 0xd0, 0x06, 0x21, 0xff, 0x4a, 0x24, 0x73, 0x11, - 0x4b, 0x24, 0x18, 0xc1, 0xf7, 0xfa, 0xfe, 0x88, - 0x20, 0x00, 0x21, 0x00, 0x4a, 0x22, 0x01, 0x83, - 0x18, 0x1b, 0x00, 0xdb, 0x18, 0x9b, 0x33, 0xff, - 0x33, 0xff, 0x33, 0x02, 0x60, 0x19, 0x60, 0x59, - 0x30, 0x01, 0x28, 0x06, 0xdb, 0xf3, 0x20, 0x00, - 0x43, 0xc4, 0x4a, 0x1c, 0x01, 0x03, 0x50, 0xd1, - 0x18, 0x9b, 0x60, 0xdc, 0x30, 0x01, 0x28, 0x1e, - 0xdb, 0xf8, 0x27, 0x01, 0x20, 0x02, 0x49, 0x18, - 0x60, 0x08, 0xf7, 0xfd, 0xfb, 0x11, 0x28, 0x01, - 0xd0, 0x00, 0x27, 0x00, 0xf7, 0xfb, 0xff, 0x78, - 0x28, 0x00, 0xd1, 0x00, 0x27, 0x00, 0xf7, 0xfe, - 0xfe, 0x09, 0x28, 0x00, 0xd1, 0x00, 0x27, 0x00, - 0xf7, 0xfd, 0xfe, 0x24, 0x28, 0x00, 0xd1, 0x00, - 0x27, 0x00, 0xf0, 0x01, 0xf9, 0x05, 0x28, 0x00, - 0xd1, 0x00, 0x27, 0x00, 0xf0, 0x02, 0xf8, 0xb6, - 0x42, 0xa0, 0xd1, 0x00, 0x27, 0x00, 0x2f, 0x01, - 0xd1, 0x01, 0xf0, 0x00, 0xf8, 0x0f, 0x1c, 0x38, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x90, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x5e, 0x30, 0x2e, 0x08, 0x5c, 0x50, - 0x6e, 0x00, 0x11, 0x00, 0xb5, 0x00, 0xf0, 0x18, - 0xfd, 0x33, 0x49, 0x07, 0x20, 0x19, 0xf0, 0x18, - 0xfc, 0xfb, 0xf0, 0x18, 0xfc, 0xf1, 0x4b, 0x05, - 0x40, 0x18, 0xf0, 0x18, 0xfc, 0xf1, 0xf0, 0x18, - 0xfd, 0x5d, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x00, 0xaf, 0xb5, 0xfd, 0xff, 0xff, 0xff, - 0xb5, 0x00, 0xf0, 0x18, 0xfc, 0xe1, 0x23, 0x01, - 0x06, 0x5b, 0x43, 0x18, 0xf0, 0x18, 0xfc, 0xe0, - 0x20, 0x01, 0x06, 0x40, 0xf0, 0x18, 0xfc, 0xd3, - 0x48, 0x02, 0x68, 0x81, 0x31, 0x01, 0x60, 0x81, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x90, - 0xb5, 0xf0, 0xb0, 0x84, 0xf0, 0x00, 0xfa, 0x80, - 0x4f, 0x99, 0x88, 0x39, 0x48, 0x99, 0x29, 0x06, - 0xd2, 0x64, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x03, 0x36, 0x61, 0x8e, - 0xb9, 0xe8, 0x1d, 0xc5, 0x35, 0xff, 0x35, 0xfa, - 0x68, 0x6c, 0x68, 0x2e, 0x2e, 0x00, 0xd1, 0x13, - 0xf7, 0xfa, 0xfc, 0xa0, 0x69, 0x39, 0x42, 0x88, - 0xd9, 0x24, 0xf7, 0xfa, 0xfc, 0x9b, 0x30, 0x64, - 0x61, 0x38, 0x20, 0x00, 0xab, 0x01, 0x70, 0x18, - 0x3b, 0x04, 0x70, 0x18, 0x46, 0x69, 0x22, 0x00, - 0xa8, 0x01, 0xf7, 0xfd, 0xfa, 0x69, 0xe0, 0x15, - 0x21, 0x01, 0xab, 0x01, 0x70, 0x19, 0x19, 0x01, - 0x31, 0xff, 0x31, 0xe1, 0x78, 0x09, 0x3b, 0x04, - 0x70, 0x19, 0x01, 0x21, 0x18, 0x0a, 0x46, 0x69, - 0xa8, 0x01, 0xf7, 0xfd, 0xfa, 0x59, 0x20, 0x1e, - 0x1c, 0x61, 0x3e, 0x01, 0xf0, 0x13, 0xf8, 0xd8, - 0x60, 0x69, 0x60, 0x2e, 0x21, 0x01, 0xe0, 0x54, - 0x23, 0x01, 0x02, 0x9b, 0x18, 0xc5, 0x68, 0xec, - 0x68, 0xae, 0x2e, 0x00, 0xd0, 0x20, 0x19, 0x01, - 0x23, 0x1f, 0x01, 0x5b, 0x18, 0xc9, 0x7a, 0x09, - 0xab, 0x00, 0x70, 0x19, 0xa9, 0x00, 0x78, 0x09, - 0x09, 0x09, 0x29, 0x06, 0xd0, 0x01, 0x21, 0x01, - 0xe0, 0x00, 0x21, 0x02, 0xab, 0x01, 0x70, 0x19, - 0x01, 0x21, 0x18, 0x08, 0x23, 0x41, 0x00, 0xdb, - 0x18, 0xc2, 0x46, 0x69, 0xa8, 0x01, 0xf7, 0xfb, - 0xfe, 0xa3, 0x20, 0x1e, 0x1c, 0x61, 0x3e, 0x01, - 0xf0, 0x13, 0xf8, 0xae, 0x60, 0xe9, 0x60, 0xae, - 0x21, 0x02, 0xe0, 0x2a, 0xe0, 0xc2, 0x23, 0x03, - 0x02, 0x5b, 0x18, 0xc5, 0x69, 0x6c, 0x69, 0x2e, - 0x2e, 0x00, 0xd0, 0x21, 0x21, 0x01, 0xab, 0x01, - 0x70, 0x19, 0x19, 0x01, 0x23, 0x2f, 0x01, 0x5b, - 0x18, 0xc9, 0x7c, 0x09, 0xab, 0x00, 0x70, 0x19, - 0xa9, 0x00, 0x78, 0x09, 0x09, 0x09, 0x29, 0x06, - 0xd1, 0x02, 0x21, 0x02, 0x71, 0x19, 0x33, 0x04, - 0x01, 0x21, 0x18, 0x08, 0x23, 0x41, 0x01, 0x1b, - 0x18, 0xc2, 0x46, 0x69, 0xa8, 0x01, 0xf7, 0xfe, - 0xfd, 0x09, 0x20, 0x1e, 0x1c, 0x61, 0x3e, 0x01, - 0xf0, 0x13, 0xf8, 0x82, 0x61, 0x69, 0x61, 0x2e, - 0x21, 0x03, 0x80, 0x39, 0x20, 0x00, 0xe0, 0x97, - 0x23, 0x01, 0x02, 0xdb, 0x18, 0xc5, 0x69, 0xec, - 0x69, 0xae, 0x2e, 0x00, 0xd0, 0x21, 0x21, 0x01, - 0xab, 0x01, 0x70, 0x19, 0x19, 0x01, 0x23, 0x3f, - 0x01, 0x5b, 0x18, 0xc9, 0x7e, 0x09, 0xab, 0x00, - 0x70, 0x19, 0xa9, 0x00, 0x78, 0x09, 0x09, 0x09, - 0x29, 0x06, 0xd1, 0x02, 0x21, 0x02, 0x71, 0x19, - 0x33, 0x04, 0x01, 0x21, 0x18, 0x08, 0x23, 0xc3, - 0x00, 0xdb, 0x18, 0xc2, 0x46, 0x69, 0xa8, 0x01, - 0xf7, 0xfd, 0xfc, 0xfe, 0x20, 0x1e, 0x1c, 0x61, - 0x3e, 0x01, 0xf0, 0x13, 0xf8, 0x55, 0x61, 0xe9, - 0x61, 0xae, 0x20, 0x04, 0xe0, 0x2c, 0x23, 0x05, - 0x02, 0x5b, 0x18, 0xc5, 0x6a, 0x6c, 0x6a, 0x2e, - 0x2e, 0x00, 0xd0, 0x24, 0x19, 0x01, 0x18, 0xc9, - 0x78, 0x09, 0xab, 0x00, 0x70, 0x19, 0xa9, 0x00, - 0x78, 0x09, 0x09, 0x09, 0x29, 0x06, 0xd0, 0x05, - 0x29, 0x07, 0xd0, 0x01, 0x29, 0x08, 0xd1, 0x03, - 0x21, 0x03, 0xe0, 0x02, 0x21, 0x02, 0xe0, 0x00, - 0x21, 0x01, 0xab, 0x01, 0x70, 0x19, 0x01, 0x21, - 0x18, 0x08, 0x23, 0x41, 0x01, 0x5b, 0x18, 0xc2, - 0x46, 0x69, 0xa8, 0x01, 0xf0, 0x00, 0xff, 0xb4, - 0x20, 0x1e, 0x1c, 0x61, 0x3e, 0x01, 0xf0, 0x13, - 0xf8, 0x27, 0x62, 0x69, 0x62, 0x2e, 0x20, 0x05, - 0x80, 0x38, 0xe7, 0xa3, 0xe7, 0xff, 0x23, 0x03, - 0x02, 0x9b, 0x18, 0xc6, 0x6a, 0xf4, 0x6a, 0xb5, - 0x2d, 0x00, 0xd0, 0x33, 0x19, 0x01, 0x18, 0xc9, - 0x7a, 0x09, 0xab, 0x00, 0x70, 0x19, 0xa9, 0x00, - 0x78, 0x09, 0x09, 0x09, 0x29, 0x09, 0xd0, 0x10, - 0x29, 0x0a, 0xd1, 0x1f, 0x01, 0x21, 0x18, 0x08, - 0x23, 0x05, 0x02, 0x5b, 0x18, 0xc0, 0x90, 0x02, - 0x8d, 0x01, 0x6a, 0xc0, 0xf7, 0xf5, 0xfd, 0x7c, - 0x23, 0x01, 0x42, 0xd8, 0xd0, 0x14, 0x98, 0x02, - 0xe0, 0x0d, 0x01, 0x21, 0x18, 0x08, 0x23, 0x05, - 0x02, 0x5b, 0x18, 0xc0, 0x90, 0x03, 0x8d, 0x01, - 0x6a, 0xc0, 0xf7, 0xf5, 0xfd, 0xe6, 0x23, 0x01, - 0x42, 0xd8, 0xd0, 0x05, 0x98, 0x03, 0x6a, 0xc0, - 0xf0, 0x00, 0xf9, 0x42, 0x34, 0x01, 0x3d, 0x01, - 0x20, 0x1e, 0x1c, 0x21, 0xf0, 0x12, 0xff, 0xe8, - 0x62, 0xf1, 0x62, 0xb5, 0x20, 0x00, 0x80, 0x38, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x90, 0x2e, 0x08, 0x5e, 0x30, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0xb4, 0x0f, 0xb5, 0x80, - 0xb0, 0x84, 0x99, 0x06, 0xaa, 0x07, 0x4f, 0x15, - 0x68, 0x38, 0xf0, 0x13, 0xf8, 0xf5, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0xab, 0x00, 0x80, 0x18, - 0x28, 0x80, 0xdc, 0x19, 0xa8, 0x00, 0x88, 0x00, - 0x28, 0x04, 0xdb, 0x15, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x02, 0xf0, 0x00, 0xf8, 0xeb, 0x28, 0x00, - 0xd0, 0x0e, 0x90, 0x01, 0xaa, 0x00, 0x88, 0x12, - 0x68, 0x39, 0xf0, 0x13, 0xf8, 0x03, 0x21, 0x00, - 0xaa, 0x00, 0x88, 0x12, 0x98, 0x01, 0x54, 0x81, - 0x46, 0x69, 0x20, 0xa6, 0xf0, 0x00, 0xf8, 0x24, - 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0xb0, 0x04, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xcc, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x07, - 0x1c, 0x20, 0xb0, 0x84, 0xf0, 0x00, 0xf8, 0xca, - 0x28, 0x00, 0xd1, 0x01, 0x43, 0xc0, 0xe0, 0x0b, - 0xab, 0x00, 0x80, 0x1c, 0x90, 0x01, 0x1c, 0x39, - 0x1c, 0x22, 0xf0, 0x12, 0xff, 0xdf, 0x46, 0x69, - 0x20, 0x96, 0xf0, 0x00, 0xf8, 0x05, 0x20, 0x00, - 0xb0, 0x04, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x06, 0x06, 0x0e, 0x36, 0x07, 0x30, - 0x0f, 0x00, 0x01, 0x83, 0x18, 0x18, 0x00, 0xc0, - 0x1c, 0x0f, 0xb0, 0x83, 0x49, 0x2e, 0x18, 0x45, - 0x1f, 0xe8, 0x38, 0x79, 0x90, 0x02, 0x6f, 0x84, - 0x6f, 0xc0, 0x2c, 0x1e, 0xda, 0x4e, 0x09, 0x31, - 0x29, 0x06, 0xd1, 0x11, 0x88, 0x3a, 0xb0, 0x81, - 0x92, 0x00, 0x19, 0x01, 0x20, 0x1e, 0x1c, 0x2f, - 0xf0, 0x12, 0xff, 0x6a, 0x9a, 0x00, 0x01, 0x08, - 0x18, 0x38, 0x38, 0xff, 0x38, 0xff, 0x38, 0x42, - 0x87, 0x02, 0x18, 0x68, 0xb0, 0x01, 0xe0, 0x34, - 0x29, 0x07, 0xd1, 0x22, 0x19, 0x01, 0x20, 0x1e, - 0xf0, 0x12, 0xff, 0x5a, 0x91, 0x00, 0x01, 0x08, - 0x18, 0x28, 0x90, 0x01, 0x22, 0x10, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x0a, 0x1c, 0x39, 0xf0, 0x12, - 0xff, 0x9d, 0x98, 0x00, 0x18, 0x28, 0x38, 0x40, - 0x76, 0x06, 0x78, 0xb8, 0xf0, 0x00, 0xf8, 0x76, - 0x99, 0x01, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, - 0x67, 0xc8, 0x28, 0x00, 0xd1, 0x00, 0xe0, 0x1a, - 0x78, 0xba, 0x68, 0x79, 0xf0, 0x12, 0xff, 0x8a, - 0xe0, 0x11, 0x19, 0x01, 0x20, 0x1e, 0xf0, 0x12, - 0xff, 0x37, 0x91, 0x00, 0x01, 0x08, 0x18, 0x28, - 0x22, 0x10, 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, - 0x1c, 0x39, 0xf0, 0x12, 0xff, 0x7b, 0x98, 0x00, - 0x18, 0x28, 0x38, 0x40, 0x76, 0x06, 0x1c, 0x60, - 0x99, 0x02, 0x67, 0x88, 0x20, 0xff, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x5e, 0x30, 0xb5, 0xf3, 0x04, 0x0d, - 0x0c, 0x2d, 0x98, 0x00, 0x04, 0x06, 0x0c, 0x36, - 0x27, 0x00, 0x4c, 0x17, 0x01, 0x38, 0x58, 0x20, - 0x42, 0xb0, 0xd1, 0x07, 0xf7, 0xfa, 0xfa, 0xb2, - 0x19, 0x41, 0x01, 0x38, 0x19, 0x00, 0x60, 0xc1, - 0x60, 0x85, 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x1e, - 0xdb, 0xf0, 0x2f, 0x1e, 0xdb, 0x1a, 0x27, 0x00, - 0x01, 0x38, 0x58, 0x20, 0x28, 0x00, 0xd1, 0x0b, - 0x01, 0x38, 0x50, 0x26, 0x99, 0x00, 0x0c, 0x09, - 0x19, 0x04, 0x60, 0x61, 0xf7, 0xfa, 0xfa, 0x9a, - 0x19, 0x40, 0x60, 0xe0, 0x60, 0xa5, 0xe0, 0x02, - 0x37, 0x01, 0x2f, 0x1e, 0xdb, 0xec, 0x2f, 0x1e, - 0xdb, 0x04, 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x30, 0xe7, 0xf9, - 0x2e, 0x08, 0x5c, 0x50, 0xb4, 0x80, 0x21, 0x00, - 0x4a, 0x07, 0x23, 0x00, 0x01, 0x0f, 0x59, 0xd7, - 0x42, 0x87, 0xd1, 0x02, 0x01, 0x08, 0x50, 0x13, - 0xe0, 0x02, 0x31, 0x01, 0x29, 0x1e, 0xdb, 0xf5, - 0x1c, 0x18, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x5c, 0x50, 0xb5, 0x00, 0xf7, 0xfa, - 0xfb, 0xd7, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0x1c, 0x04, 0x1c, 0x10, 0x1c, 0x15, 0x1c, 0x0f, - 0xf7, 0xff, 0xff, 0xf4, 0x1c, 0x06, 0xd1, 0x06, - 0x1c, 0x20, 0xf7, 0xfa, 0xfb, 0xd3, 0x20, 0x00, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1b, 0xea, - 0x19, 0xf0, 0x21, 0x00, 0xf0, 0x12, 0xff, 0xfe, - 0x1c, 0x30, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x12, - 0xff, 0x01, 0x1c, 0x20, 0xf7, 0xfa, 0xfb, 0xc2, - 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x80, 0x27, 0x01, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xfa, 0xfb, 0xb8, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0x1c, 0x07, - 0xf7, 0xfa, 0xfa, 0x40, 0x19, 0xc7, 0xf7, 0xfa, - 0xfa, 0x3d, 0x42, 0xb8, 0xd3, 0xfb, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, 0x47, 0x70, - 0xb5, 0xf0, 0xf7, 0xfa, 0xfa, 0x33, 0x4e, 0x13, - 0x69, 0x71, 0x42, 0x88, 0xd0, 0x1d, 0xf7, 0xfa, - 0xfa, 0x2d, 0x27, 0x00, 0x61, 0x70, 0x4d, 0x10, - 0x4c, 0x10, 0x01, 0x38, 0x58, 0x22, 0x2a, 0x00, - 0xd0, 0x10, 0x19, 0x00, 0x68, 0xc3, 0x69, 0x71, - 0x42, 0x8b, 0xd2, 0x0b, 0x80, 0x2a, 0x68, 0x82, - 0x18, 0x51, 0x60, 0xc1, 0x68, 0x40, 0x07, 0x00, - 0x0f, 0x00, 0x23, 0x60, 0x43, 0x18, 0x1c, 0x29, - 0xf7, 0xff, 0xfe, 0xea, 0x37, 0x01, 0x2f, 0x1e, - 0xdb, 0xe7, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x90, - 0x2e, 0x08, 0x5c, 0x40, 0x2e, 0x08, 0x5c, 0x50, - 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x21, 0x9f, - 0x4a, 0x07, 0x70, 0x11, 0x21, 0x80, 0x70, 0x51, - 0x21, 0x10, 0x70, 0x91, 0x27, 0x00, 0x70, 0xd7, - 0x21, 0x04, 0xf0, 0x01, 0xf8, 0xdd, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x00, 0xf8, 0x03, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x12, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x01, - 0xf8, 0xbf, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x21, 0x00, - 0x20, 0x9f, 0x4a, 0x14, 0x70, 0x10, 0x20, 0x80, - 0x70, 0x50, 0x20, 0x11, 0x70, 0x90, 0x27, 0x00, - 0x48, 0x11, 0x01, 0x3d, 0x19, 0xed, 0x00, 0xed, - 0x59, 0x46, 0x2e, 0x00, 0xd0, 0x0c, 0x00, 0x8b, - 0x18, 0x9b, 0x0e, 0x36, 0x71, 0x1e, 0x59, 0x46, - 0x0c, 0x36, 0x71, 0x5e, 0x59, 0x46, 0x0a, 0x36, - 0x71, 0x9e, 0x59, 0x45, 0x71, 0xdd, 0x31, 0x01, - 0x37, 0x01, 0x2f, 0x07, 0xdb, 0xe9, 0x00, 0x88, - 0x70, 0xd0, 0x1d, 0x01, 0x1c, 0x20, 0xf0, 0x01, - 0xf8, 0x8f, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0xa8, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x20, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x01, - 0xf8, 0x77, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0xb0, 0x82, - 0x1c, 0xc8, 0x1c, 0x0c, 0x46, 0x69, 0xf0, 0x00, - 0xfc, 0x8b, 0x1c, 0x01, 0x00, 0xf8, 0x4a, 0x25, - 0x18, 0x80, 0x88, 0xc2, 0x20, 0x00, 0x4f, 0x24, - 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, 0x19, 0xdb, - 0x78, 0xdb, 0x42, 0x93, 0xd1, 0x07, 0x00, 0xc2, - 0x1a, 0x12, 0x00, 0x92, 0x5a, 0xba, 0x32, 0x01, - 0x4b, 0x1e, 0x70, 0x9a, 0xe0, 0x04, 0x30, 0x01, - 0x04, 0x00, 0x14, 0x00, 0x28, 0x08, 0xdb, 0xeb, - 0x18, 0x61, 0x91, 0x01, 0x7a, 0x09, 0x04, 0x0d, - 0x14, 0x2d, 0x00, 0xc6, 0x1a, 0x36, 0x00, 0xb6, - 0x5b, 0xb8, 0x01, 0x00, 0x4c, 0x16, 0x19, 0x00, - 0x68, 0x40, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, - 0xff, 0x07, 0x1c, 0x68, 0xf7, 0xff, 0xfe, 0xde, - 0x5b, 0xb9, 0x01, 0x09, 0x19, 0x09, 0x60, 0x48, - 0x28, 0x00, 0xd0, 0x0a, 0x99, 0x01, 0x31, 0x09, - 0x1c, 0x2a, 0xf0, 0x12, 0xfd, 0xf3, 0x21, 0x00, - 0x5b, 0xb8, 0x01, 0x00, 0x19, 0x00, 0x68, 0x40, - 0x55, 0x41, 0x20, 0x02, 0x5b, 0xb9, 0x01, 0x0a, - 0x54, 0xa0, 0x1c, 0x08, 0xf0, 0x01, 0xf9, 0xae, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7a, 0x60, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0x88, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x22, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x01, - 0xf8, 0x03, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0x90, 0x04, 0x04, 0x0c, 0x24, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xfc, 0x17, 0x18, 0x38, 0x78, 0xc0, 0x28, 0x00, - 0xd0, 0x0f, 0x23, 0x7d, 0x00, 0xdb, 0x43, 0x58, - 0x22, 0x03, 0x1c, 0x21, 0xf0, 0x01, 0xf8, 0x77, - 0x28, 0x00, 0xdd, 0x06, 0x00, 0x61, 0x4a, 0x07, - 0x18, 0x89, 0x31, 0xff, 0x31, 0xff, 0x31, 0x02, - 0x84, 0xc8, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x08, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7e, 0xa8, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x21, 0x9f, - 0x4a, 0x0b, 0x70, 0x11, 0x21, 0x84, 0x70, 0x51, - 0x21, 0x41, 0x70, 0x91, 0x49, 0x09, 0x68, 0x09, - 0x0a, 0x0b, 0x70, 0xd3, 0x71, 0x11, 0x49, 0x08, - 0x68, 0x09, 0x0c, 0x0b, 0x71, 0x53, 0x0a, 0x0b, - 0x71, 0x93, 0x71, 0xd1, 0x21, 0x08, 0xf0, 0x00, - 0xff, 0xbb, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x1a, 0xd8, - 0x2e, 0x08, 0x1a, 0xd4, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x30, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x00, - 0xff, 0xa3, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0x90, 0x04, 0x07, 0x0c, 0x3f, 0xb0, 0x81, - 0x1c, 0xc8, 0x46, 0x69, 0xf0, 0x00, 0xfb, 0xb8, - 0x00, 0xf8, 0x49, 0x19, 0x18, 0x40, 0x88, 0xc2, - 0x20, 0x00, 0x49, 0x18, 0x00, 0xc3, 0x1a, 0x1b, - 0x00, 0x9b, 0x18, 0x5b, 0x78, 0xdb, 0x42, 0x93, - 0xd1, 0x07, 0x00, 0xc2, 0x1a, 0x12, 0x00, 0x92, - 0x5a, 0x89, 0x31, 0x01, 0x4a, 0x12, 0x70, 0x91, - 0xe0, 0x04, 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, - 0x28, 0x08, 0xdb, 0xeb, 0x01, 0x00, 0x49, 0x0f, - 0x18, 0x47, 0x68, 0xb8, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xfe, 0x3e, 0x24, 0x00, 0x81, 0xbc, - 0xa8, 0x00, 0x88, 0x00, 0xf7, 0xff, 0xfe, 0x12, - 0x60, 0xb8, 0x28, 0x00, 0xd0, 0x03, 0xa8, 0x00, - 0x88, 0x00, 0x08, 0x40, 0x81, 0xb8, 0x1c, 0x20, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x7a, 0x60, 0x2e, 0x08, 0x56, 0xe0, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7e, 0x88, - 0xb5, 0x80, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x08, - 0x0c, 0x00, 0xf0, 0x02, 0xfc, 0xe9, 0x28, 0x00, - 0xd0, 0x0c, 0x68, 0x82, 0x2a, 0x00, 0xd0, 0x09, - 0x89, 0x81, 0x29, 0x00, 0xd0, 0x06, 0x1c, 0x38, - 0xf0, 0x00, 0xff, 0x46, 0x20, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0x90, 0x04, 0x04, 0x0c, 0x24, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xfb, 0x57, 0x18, 0x3f, 0x78, 0xf8, 0x28, 0x00, - 0xd0, 0x0d, 0x28, 0x01, 0xd1, 0x16, 0x1c, 0x20, - 0xf0, 0x00, 0xfc, 0x16, 0x79, 0x38, 0x23, 0x7d, - 0x00, 0xdb, 0x43, 0x58, 0x22, 0x01, 0x1c, 0x21, - 0xf0, 0x00, 0xff, 0xb1, 0xe0, 0x08, 0x1c, 0x20, - 0xf0, 0x00, 0xfc, 0x0a, 0x21, 0x09, 0x48, 0x06, - 0x70, 0x01, 0x21, 0x20, 0xf7, 0xff, 0xfc, 0xec, - 0x20, 0x00, 0xe0, 0x01, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0x90, 0x04, 0x04, - 0x0c, 0x24, 0xb0, 0x81, 0x1c, 0xc8, 0x1c, 0x0f, - 0x46, 0x69, 0xf0, 0x00, 0xfb, 0x29, 0x1c, 0x02, - 0x18, 0x38, 0x78, 0xc0, 0x28, 0x01, 0xd1, 0x04, - 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x00, 0xf8, 0x0a, - 0xe0, 0x03, 0x21, 0xf0, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x31, 0x20, 0x00, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x04, 0x12, 0x14, 0x12, 0x18, 0x89, - 0x79, 0x0a, 0x2a, 0x00, 0xdd, 0x13, 0x2a, 0x03, - 0xdc, 0x11, 0x49, 0x0c, 0x70, 0x0a, 0x23, 0x9f, - 0x4a, 0x0b, 0x70, 0x13, 0x23, 0x88, 0x70, 0x53, - 0x23, 0x02, 0x70, 0x93, 0x70, 0xd3, 0x23, 0x01, - 0x71, 0x13, 0x78, 0x09, 0x71, 0x51, 0x21, 0x06, - 0xf0, 0x00, 0xfe, 0xd6, 0xe0, 0x02, 0x21, 0xf1, - 0xf0, 0x00, 0xf8, 0x0c, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x70, - 0x2e, 0x08, 0x72, 0x60, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0xb5, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x9f, 0x4a, 0x07, 0x70, 0x13, - 0x23, 0x88, 0x70, 0x53, 0x23, 0x02, 0x70, 0x93, - 0x23, 0x01, 0x70, 0xd3, 0x71, 0x11, 0x21, 0x05, - 0xf0, 0x00, 0xfe, 0xb6, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0xf3, 0xb0, 0x82, 0x4d, 0x1f, 0x78, 0x28, - 0x28, 0x0f, 0xd1, 0x2a, 0x99, 0x03, 0x1c, 0xc8, - 0xa9, 0x01, 0xf0, 0x00, 0xfa, 0xc9, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x00, 0x1d, 0xec, 0x34, 0xf9, - 0x88, 0xe1, 0xa8, 0x01, 0x88, 0x00, 0x18, 0x08, - 0x04, 0x06, 0x0c, 0x36, 0x68, 0xa0, 0x1c, 0x32, - 0xf7, 0xff, 0xfd, 0x41, 0x1c, 0x07, 0xd1, 0x01, - 0x43, 0xf8, 0xe0, 0x1d, 0x98, 0x00, 0x99, 0x03, - 0x18, 0x08, 0x1c, 0xc1, 0x88, 0xe0, 0x19, 0xc0, - 0xaa, 0x01, 0x88, 0x12, 0xf0, 0x12, 0xfc, 0x4e, - 0x1f, 0xb0, 0x04, 0x00, 0x0c, 0x00, 0x12, 0x01, - 0x71, 0x39, 0x71, 0x78, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0x4b, 0x21, 0x04, 0x48, 0x08, 0x70, 0x01, - 0x27, 0x00, 0x70, 0x47, 0x70, 0x87, 0x21, 0x03, - 0xf7, 0xff, 0xfc, 0x4a, 0x70, 0x2f, 0x1c, 0x38, - 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0xf0, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xfa, 0x87, 0x04, 0x05, 0x0c, 0x2d, 0x4e, 0x23, - 0x78, 0x30, 0x1d, 0xf4, 0x34, 0xf9, 0x28, 0x0f, - 0xd0, 0x23, 0xa8, 0x00, 0x88, 0x00, 0x30, 0x06, - 0xf7, 0xff, 0xfc, 0xfc, 0x60, 0xa0, 0x1c, 0x02, - 0xd0, 0x18, 0x19, 0x78, 0x1c, 0xc1, 0x1d, 0x90, - 0xaa, 0x00, 0x88, 0x12, 0xf0, 0x12, 0xfc, 0x12, - 0x20, 0x9f, 0x68, 0xa1, 0x70, 0x08, 0x20, 0x88, - 0x68, 0xa1, 0x70, 0x48, 0x20, 0x03, 0x68, 0xa1, - 0x70, 0x88, 0x20, 0x82, 0x68, 0xa1, 0x70, 0xc8, - 0x20, 0x0f, 0x70, 0x30, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x06, 0xe0, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x17, 0x88, 0xe1, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x0a, 0x68, 0xa0, 0xf7, 0xff, 0xfc, 0xdb, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xf2, 0x88, 0xe1, - 0x18, 0x40, 0x19, 0x79, 0xaa, 0x00, 0x88, 0x12, - 0x31, 0x03, 0xf0, 0x12, 0xfb, 0xeb, 0x88, 0xe0, - 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, 0x80, 0xe0, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0xf0, 0x1c, 0x0f, 0x04, 0x01, 0x0c, 0x09, - 0xb0, 0x81, 0x91, 0x00, 0xb0, 0x81, 0x46, 0x69, - 0x1c, 0xf8, 0xf0, 0x00, 0xfa, 0x2d, 0x1c, 0x02, - 0x18, 0x38, 0x78, 0xc1, 0x07, 0xc9, 0x0f, 0xc9, - 0x79, 0x04, 0x23, 0x05, 0x48, 0x16, 0x70, 0x03, - 0x70, 0x41, 0x70, 0x84, 0x21, 0x00, 0xab, 0x00, - 0x88, 0x1b, 0x3b, 0x02, 0x2b, 0x00, 0xdd, 0x09, - 0x18, 0x55, 0x19, 0xed, 0x79, 0x6d, 0x18, 0x46, - 0x70, 0xf5, 0x31, 0x01, 0x04, 0x09, 0x14, 0x09, - 0x42, 0x8b, 0xdc, 0xf5, 0x27, 0x00, 0xa9, 0x00, - 0x88, 0x09, 0x18, 0x41, 0x70, 0x4f, 0xa9, 0x00, - 0x88, 0x09, 0x31, 0x02, 0xf7, 0xff, 0xfb, 0xb8, - 0x23, 0x05, 0x48, 0x08, 0x70, 0x03, 0x21, 0x01, - 0x70, 0x41, 0x30, 0xff, 0x30, 0x01, 0x99, 0x01, - 0x80, 0x41, 0x80, 0x84, 0x80, 0xc7, 0x1c, 0x38, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7d, 0x7c, - 0xb5, 0xb0, 0x21, 0x9f, 0x4f, 0x1e, 0x70, 0x39, - 0x21, 0x88, 0x70, 0x79, 0x21, 0x08, 0x70, 0xb9, - 0x1d, 0xc2, 0x32, 0xf9, 0x88, 0xd1, 0x18, 0x09, - 0x78, 0x4b, 0x21, 0x01, 0x24, 0x00, 0x2b, 0x0b, - 0xd1, 0x05, 0x70, 0xf9, 0x71, 0x3c, 0x88, 0x50, - 0x21, 0x05, 0x1c, 0x3a, 0xe0, 0x17, 0x23, 0x81, - 0x70, 0xfb, 0x88, 0xd3, 0x33, 0x01, 0x71, 0x3b, - 0x71, 0x79, 0x21, 0x00, 0x88, 0xd3, 0x2b, 0x00, - 0xdd, 0x09, 0x18, 0x43, 0x78, 0x9b, 0x18, 0x7d, - 0x71, 0xab, 0x31, 0x01, 0x04, 0x09, 0x14, 0x09, - 0x88, 0xd3, 0x42, 0x8b, 0xdc, 0xf5, 0x88, 0xd0, - 0x1d, 0x81, 0x88, 0x50, 0x1c, 0x3a, 0xf0, 0x00, - 0xfd, 0x9f, 0x22, 0x20, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x12, 0xfc, 0x58, 0x20, 0x06, 0x70, 0x38, - 0x21, 0x20, 0x1c, 0x38, 0xf7, 0xff, 0xfb, 0x68, - 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0xf0, 0x1c, 0x0f, - 0x04, 0x01, 0x0c, 0x09, 0xb0, 0x83, 0x91, 0x00, - 0xb0, 0x84, 0x49, 0x2f, 0x91, 0x06, 0x78, 0x08, - 0x4e, 0x2e, 0x1c, 0xf1, 0x91, 0x05, 0x4d, 0x2e, - 0x28, 0x08, 0xd1, 0x34, 0x1c, 0xf8, 0xa9, 0x02, - 0xf0, 0x00, 0xf9, 0x9e, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x01, 0x88, 0xe9, 0xa8, 0x02, 0x88, 0x00, - 0x18, 0x08, 0x04, 0x02, 0x0c, 0x12, 0x92, 0x00, - 0x68, 0xa8, 0xf7, 0xff, 0xfc, 0x18, 0x1c, 0x04, - 0xd1, 0x02, 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x3a, - 0x98, 0x01, 0x18, 0x38, 0x1c, 0xc1, 0x88, 0xe8, - 0x19, 0x00, 0xaa, 0x02, 0x88, 0x12, 0xf0, 0x12, - 0xfb, 0x25, 0x9a, 0x00, 0x1f, 0x90, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x21, 0x71, 0x60, - 0x98, 0x05, 0x1c, 0x21, 0xaa, 0x03, 0xf0, 0x00, - 0xf9, 0xcd, 0x1c, 0x07, 0xd5, 0x03, 0x1c, 0x20, - 0xf7, 0xff, 0xfc, 0x1a, 0xe7, 0xe1, 0x1c, 0x20, - 0xf7, 0xff, 0xfc, 0x16, 0xe0, 0x06, 0x98, 0x05, - 0x1c, 0x39, 0xaa, 0x03, 0xf0, 0x00, 0xf9, 0xbe, - 0x1c, 0x07, 0xd4, 0xd6, 0x24, 0x02, 0x70, 0x34, - 0x12, 0x38, 0x70, 0x70, 0x70, 0xb7, 0xa8, 0x03, - 0x88, 0x00, 0x1c, 0xc1, 0x1c, 0x30, 0xf7, 0xff, - 0xfb, 0x0b, 0x99, 0x06, 0x70, 0x0c, 0x20, 0x01, - 0x99, 0x06, 0x70, 0x48, 0x99, 0x04, 0x80, 0x69, - 0x80, 0xa8, 0x21, 0x00, 0x80, 0xe9, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7d, 0x7c, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0x7c, 0xb5, 0xf0, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xf9, 0x3f, 0x04, 0x05, 0x0c, 0x2d, 0x4e, 0x23, - 0x78, 0x30, 0x1d, 0xf4, 0x34, 0xf9, 0x28, 0x08, - 0xd0, 0x23, 0xa8, 0x00, 0x88, 0x00, 0x30, 0x06, - 0xf7, 0xff, 0xfb, 0xb4, 0x60, 0xa0, 0x1c, 0x02, - 0xd0, 0x18, 0x19, 0x78, 0x1c, 0xc1, 0x1d, 0x90, - 0xaa, 0x00, 0x88, 0x12, 0xf0, 0x12, 0xfa, 0xca, - 0x20, 0x9f, 0x68, 0xa1, 0x70, 0x08, 0x20, 0x88, - 0x68, 0xa1, 0x70, 0x48, 0x20, 0x09, 0x68, 0xa1, - 0x70, 0x88, 0x20, 0x82, 0x68, 0xa1, 0x70, 0xc8, - 0x20, 0x08, 0x70, 0x30, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x06, 0xe0, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x17, 0x88, 0xe1, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x0a, 0x68, 0xa0, 0xf7, 0xff, 0xfb, 0x93, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xf2, 0x88, 0xe1, - 0x18, 0x40, 0x19, 0x79, 0xaa, 0x00, 0x88, 0x12, - 0x31, 0x03, 0xf0, 0x12, 0xfa, 0xa3, 0x88, 0xe0, - 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, 0x80, 0xe0, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x22, 0x9f, - 0x4f, 0x0d, 0x70, 0x3a, 0x22, 0x88, 0x70, 0x7a, - 0x22, 0x0b, 0x70, 0xba, 0x22, 0x01, 0x70, 0xfa, - 0x71, 0x39, 0x21, 0x05, 0x1c, 0x3a, 0xf0, 0x00, - 0xfc, 0xbf, 0x22, 0x20, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x12, 0xfb, 0x78, 0x20, 0x06, 0x70, 0x38, - 0x21, 0x20, 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x88, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0xf0, 0x1c, 0x0f, - 0x04, 0x01, 0x0c, 0x09, 0xb0, 0x83, 0x91, 0x00, - 0xb0, 0x84, 0x49, 0x2f, 0x91, 0x06, 0x78, 0x08, - 0x4e, 0x2e, 0x1c, 0xf1, 0x91, 0x05, 0x4d, 0x2e, - 0x28, 0x07, 0xd1, 0x34, 0x1c, 0xf8, 0xa9, 0x02, - 0xf0, 0x00, 0xf8, 0xbe, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x01, 0x88, 0xe9, 0xa8, 0x02, 0x88, 0x00, - 0x18, 0x08, 0x04, 0x02, 0x0c, 0x12, 0x92, 0x00, - 0x68, 0xa8, 0xf7, 0xff, 0xfb, 0x38, 0x1c, 0x04, - 0xd1, 0x02, 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x3a, - 0x98, 0x01, 0x18, 0x38, 0x1c, 0xc1, 0x88, 0xe8, - 0x19, 0x00, 0xaa, 0x02, 0x88, 0x12, 0xf0, 0x12, - 0xfa, 0x45, 0x9a, 0x00, 0x1f, 0x90, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x21, 0x71, 0x60, - 0x98, 0x05, 0x1c, 0x21, 0xaa, 0x03, 0xf0, 0x00, - 0xf8, 0xed, 0x1c, 0x07, 0xd5, 0x03, 0x1c, 0x20, - 0xf7, 0xff, 0xfb, 0x3a, 0xe7, 0xe1, 0x1c, 0x20, - 0xf7, 0xff, 0xfb, 0x36, 0xe0, 0x06, 0x98, 0x05, - 0x1c, 0x39, 0xaa, 0x03, 0xf0, 0x00, 0xf8, 0xde, - 0x1c, 0x07, 0xd4, 0xd6, 0x24, 0x03, 0x70, 0x34, - 0x12, 0x38, 0x70, 0x70, 0x70, 0xb7, 0xa8, 0x03, - 0x88, 0x00, 0x19, 0x01, 0x1c, 0x30, 0xf7, 0xff, - 0xfa, 0x2b, 0x99, 0x06, 0x70, 0x0c, 0x20, 0x01, - 0x99, 0x06, 0x70, 0x48, 0x99, 0x04, 0x80, 0x69, - 0x80, 0xa8, 0x21, 0x00, 0x80, 0xe9, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7d, 0x7c, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0x7c, 0xb5, 0xf0, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xf8, 0x5f, 0x04, 0x05, 0x0c, 0x2d, 0x4e, 0x23, - 0x78, 0x30, 0x1d, 0xf4, 0x34, 0xf9, 0x28, 0x07, - 0xd0, 0x23, 0xa8, 0x00, 0x88, 0x00, 0x30, 0x06, - 0xf7, 0xff, 0xfa, 0xd4, 0x60, 0xa0, 0x1c, 0x02, - 0xd0, 0x18, 0x19, 0x78, 0x1c, 0xc1, 0x1d, 0x90, - 0xaa, 0x00, 0x88, 0x12, 0xf0, 0x12, 0xf9, 0xea, - 0x20, 0x9f, 0x68, 0xa1, 0x70, 0x08, 0x20, 0x88, - 0x68, 0xa1, 0x70, 0x48, 0x20, 0x0c, 0x68, 0xa1, - 0x70, 0x88, 0x20, 0x82, 0x68, 0xa1, 0x70, 0xc8, - 0x20, 0x07, 0x70, 0x30, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x06, 0xe0, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x17, 0x88, 0xe1, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x0a, 0x68, 0xa0, 0xf7, 0xff, 0xfa, 0xb3, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xf2, 0x88, 0xe1, - 0x18, 0x40, 0x19, 0x79, 0xaa, 0x00, 0x88, 0x12, - 0x31, 0x03, 0xf0, 0x12, 0xf9, 0xc3, 0x88, 0xe0, - 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, 0x80, 0xe0, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0xb4, 0xb0, 0x24, 0x01, 0x22, 0x00, 0x78, 0x07, - 0x0a, 0x3b, 0xd3, 0x15, 0x23, 0x00, 0x06, 0x7c, - 0x0e, 0x64, 0x2c, 0x00, 0xdd, 0x0a, 0x02, 0x12, - 0x04, 0x12, 0x0c, 0x12, 0x18, 0xc5, 0x78, 0x6d, - 0x43, 0x2a, 0x04, 0x12, 0x0c, 0x12, 0x33, 0x01, - 0x42, 0x9c, 0xdc, 0xf4, 0x1c, 0x78, 0x06, 0x40, - 0x0e, 0x40, 0x04, 0x04, 0x14, 0x24, 0xe0, 0x01, - 0x06, 0x7a, 0x0e, 0x52, 0x80, 0x0a, 0x1c, 0x20, - 0xbc, 0xb0, 0x47, 0x70, 0xb5, 0xf0, 0x04, 0x16, - 0x0c, 0x36, 0x1c, 0x07, 0x78, 0x00, 0x04, 0x00, - 0x1c, 0x0c, 0x78, 0x79, 0x02, 0x09, 0x43, 0x08, - 0x78, 0xb9, 0x43, 0x08, 0xb0, 0x81, 0x4b, 0x12, - 0x42, 0x98, 0xd1, 0x09, 0x46, 0x69, 0x1c, 0xf8, - 0xf7, 0xff, 0xff, 0xca, 0x1c, 0x05, 0xa8, 0x00, - 0x88, 0x00, 0x30, 0x02, 0x42, 0xb0, 0xdd, 0x02, - 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x10, 0x19, 0x78, - 0xaa, 0x00, 0x88, 0x12, 0x1c, 0xc1, 0x1c, 0x20, - 0xf0, 0x12, 0xf9, 0x5c, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x28, 0x30, 0x03, 0x04, 0x00, 0x14, 0x00, - 0x21, 0x00, 0xaa, 0x00, 0x88, 0x12, 0x54, 0xa1, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x9f, 0x88, 0x03, 0xb5, 0xf7, 0x1c, 0x07, - 0x20, 0x00, 0xb0, 0x85, 0x90, 0x02, 0x26, 0x00, - 0x99, 0x06, 0x1c, 0xc8, 0xa9, 0x04, 0xf7, 0xff, - 0xff, 0x9f, 0xa9, 0x04, 0x88, 0x09, 0x1c, 0x04, - 0x43, 0xf0, 0x02, 0xc3, 0x42, 0xd9, 0xd2, 0x58, - 0x21, 0x00, 0x91, 0x03, 0x4d, 0x2d, 0x99, 0x06, - 0x19, 0x08, 0x22, 0x01, 0x02, 0xd2, 0x30, 0x04, - 0x1c, 0x29, 0xf7, 0xff, 0xff, 0xaf, 0x90, 0x01, - 0x23, 0x01, 0x42, 0xd8, 0xd0, 0x1c, 0x1c, 0x28, - 0xf0, 0x12, 0xf9, 0x98, 0x90, 0x00, 0x1c, 0x42, - 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x12, 0xf9, 0x22, - 0x98, 0x00, 0x18, 0x38, 0x1c, 0x47, 0x98, 0x00, - 0x18, 0x30, 0x1c, 0x46, 0x98, 0x01, 0x18, 0x24, - 0x98, 0x03, 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x03, 0x28, 0x03, 0xdb, 0xdb, 0xa8, 0x04, - 0x88, 0x00, 0x42, 0x84, 0xda, 0x27, 0xe0, 0x02, - 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x29, 0x99, 0x06, - 0x19, 0x08, 0x22, 0x01, 0x02, 0xd2, 0x30, 0x04, - 0x1c, 0x29, 0xf7, 0xff, 0xff, 0x83, 0x90, 0x01, - 0x23, 0x01, 0x42, 0xd8, 0xd0, 0xf0, 0x1c, 0x28, - 0xf0, 0x12, 0xf9, 0x6c, 0x90, 0x00, 0x1c, 0x42, - 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x12, 0xf8, 0xf6, - 0x98, 0x00, 0x18, 0x38, 0x1c, 0x47, 0x98, 0x00, - 0x18, 0x30, 0x1c, 0x46, 0x98, 0x01, 0x18, 0x24, - 0x98, 0x02, 0x30, 0x01, 0x90, 0x02, 0xa8, 0x04, - 0x88, 0x00, 0x42, 0x84, 0xdb, 0xdb, 0x9a, 0x07, - 0x80, 0x16, 0x98, 0x02, 0x30, 0x03, 0x04, 0x00, - 0x14, 0x00, 0xb0, 0x05, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x6a, 0x60, - 0xb5, 0x00, 0x04, 0x01, 0x0c, 0x09, 0x20, 0x54, - 0xb0, 0x84, 0xab, 0x00, 0x70, 0x18, 0x22, 0x46, - 0x70, 0x5a, 0x22, 0x04, 0x80, 0x5a, 0x80, 0x99, - 0x46, 0x69, 0xf7, 0xff, 0xf8, 0xf5, 0xb0, 0x04, - 0xbc, 0x08, 0x47, 0x18, 0x47, 0x70, 0x00, 0x00, - 0xb5, 0x00, 0x78, 0x01, 0x48, 0x0c, 0x70, 0x01, - 0x78, 0x00, 0x28, 0x01, 0xd0, 0x03, 0x28, 0x02, - 0xd0, 0x01, 0x28, 0x03, 0xd1, 0x0b, 0x48, 0x09, - 0xca, 0x08, 0xc0, 0x08, 0xca, 0x08, 0xc0, 0x08, - 0xca, 0x0c, 0xc0, 0x0c, 0xf0, 0x00, 0xf8, 0x67, - 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0xa8, 0x2e, 0x08, 0x7b, 0x60, - 0xb5, 0x80, 0x20, 0x00, 0x27, 0x00, 0x4a, 0x1f, - 0x01, 0x03, 0x54, 0xd7, 0x18, 0x9b, 0x60, 0x5f, - 0x60, 0x9f, 0x81, 0x9f, 0x30, 0x01, 0x28, 0x02, - 0xdb, 0xf6, 0x48, 0x1b, 0x70, 0x07, 0x49, 0x1b, - 0x48, 0x1b, 0x60, 0x01, 0x49, 0x1b, 0x1d, 0xc2, - 0x32, 0x79, 0x60, 0x91, 0x49, 0x1a, 0x1d, 0xc2, - 0x32, 0xf9, 0x61, 0x11, 0x49, 0x19, 0x23, 0x05, - 0x01, 0xdb, 0x18, 0xc2, 0x23, 0x03, 0x02, 0x1b, - 0x62, 0x91, 0x18, 0xc1, 0x63, 0x0f, 0x49, 0x16, - 0x1d, 0xc2, 0x32, 0xff, 0x32, 0xfa, 0x30, 0xff, - 0x30, 0x81, 0x62, 0x11, 0x61, 0x87, 0x20, 0x05, - 0xf7, 0xff, 0xf9, 0x94, 0x28, 0x00, 0xda, 0x03, - 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x49, 0x0e, 0x00, 0xc2, 0x52, 0x8f, - 0x30, 0x01, 0x28, 0x40, 0xdb, 0xfa, 0x48, 0x0c, - 0x70, 0x47, 0x20, 0x01, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7e, 0x88, - 0x2e, 0x08, 0x1a, 0xa8, 0x00, 0x01, 0x00, 0x41, - 0x2e, 0x08, 0x7e, 0xa8, 0x00, 0x02, 0x00, 0x41, - 0x00, 0x03, 0x00, 0x41, 0x00, 0x40, 0x00, 0x41, - 0x00, 0x24, 0x00, 0x41, 0x2e, 0x08, 0x7b, 0x70, - 0x2e, 0x08, 0x7d, 0x7c, 0xb5, 0x00, 0xf7, 0xff, - 0xf8, 0x25, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0xb0, 0x83, 0x48, 0xda, 0x90, 0x02, 0x78, 0x00, - 0x21, 0x00, 0x4a, 0xd9, 0x4c, 0xd9, 0x4f, 0xda, - 0x28, 0x01, 0xd1, 0x71, 0x78, 0x78, 0x38, 0x41, - 0x4d, 0xd8, 0x4e, 0xd9, 0x4b, 0xd9, 0x93, 0x01, - 0x28, 0x0b, 0xd2, 0x6a, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0xc9, 0x8e, 0xc9, 0xde, - 0xdd, 0xc9, 0x67, 0xc9, 0x3b, 0x2b, 0x05, 0x00, - 0x88, 0xb8, 0x06, 0x00, 0x0e, 0x00, 0x01, 0x00, - 0x9b, 0x01, 0x54, 0x19, 0x9b, 0x01, 0x18, 0xc0, - 0x68, 0x40, 0x1c, 0x0c, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xf9, 0x26, 0x88, 0xb8, 0x06, 0x00, - 0x0e, 0x00, 0x01, 0x00, 0x9b, 0x01, 0x18, 0xc0, - 0x60, 0x44, 0x68, 0x80, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xf9, 0x1a, 0x88, 0xb8, 0x06, 0x00, - 0x0e, 0x00, 0x01, 0x01, 0x9b, 0x01, 0x18, 0xc9, - 0x22, 0x01, 0x60, 0x8c, 0x70, 0x32, 0x70, 0x74, - 0x18, 0x80, 0xe0, 0x09, 0x20, 0x01, 0x88, 0xb9, - 0x06, 0x09, 0x0e, 0x09, 0x01, 0x0a, 0x9b, 0x01, - 0x54, 0x98, 0x70, 0x30, 0x70, 0x70, 0x18, 0x08, - 0x70, 0xb0, 0x21, 0x20, 0x1c, 0x30, 0xf7, 0xff, - 0xf8, 0x07, 0xe0, 0x8d, 0x26, 0x00, 0x00, 0xf1, - 0x19, 0x08, 0x88, 0xc2, 0x79, 0x3b, 0x42, 0x9a, - 0xd1, 0x1e, 0x22, 0x00, 0x80, 0xc2, 0x58, 0x60, - 0xf0, 0x00, 0xfa, 0x86, 0x23, 0x01, 0x42, 0xd8, - 0xd0, 0x16, 0x01, 0x01, 0x18, 0x09, 0x00, 0xc9, - 0x19, 0x49, 0x88, 0x8a, 0x2a, 0x00, 0xd0, 0x01, - 0x3a, 0x01, 0x80, 0x8a, 0x28, 0x04, 0xd1, 0x0b, - 0x00, 0x70, 0x19, 0x40, 0x30, 0xff, 0x30, 0xff, - 0x30, 0x02, 0x90, 0x00, 0x8c, 0xc0, 0xf0, 0x00, - 0xfa, 0xcb, 0x22, 0x00, 0x98, 0x00, 0x84, 0xc2, - 0x36, 0x01, 0x2e, 0x20, 0xdb, 0xd7, 0xe0, 0x63, - 0xe0, 0x9c, 0xe0, 0x74, 0x88, 0xb8, 0x00, 0xc0, - 0x1c, 0x0e, 0x19, 0x01, 0x80, 0xce, 0x58, 0x20, - 0xf0, 0x00, 0xfa, 0x5e, 0x23, 0x01, 0x42, 0xd8, - 0xd0, 0x56, 0x01, 0x01, 0x18, 0x09, 0x00, 0xc9, - 0x19, 0x49, 0x88, 0x8a, 0x2a, 0x00, 0xd0, 0x01, - 0x3a, 0x01, 0x80, 0x8a, 0x28, 0x04, 0xd1, 0x5e, - 0x88, 0xb8, 0x00, 0x40, 0x19, 0x40, 0x30, 0xff, - 0x30, 0xff, 0x30, 0x02, 0x8c, 0xc0, 0xf0, 0x00, - 0xfa, 0xa3, 0x88, 0xb8, 0x00, 0x40, 0x19, 0x40, - 0x30, 0xff, 0x30, 0xff, 0x30, 0x02, 0x84, 0xc6, - 0xe0, 0xb6, 0x7a, 0x38, 0x06, 0x00, 0x7a, 0x79, - 0x04, 0x09, 0x43, 0x08, 0x7a, 0xb9, 0x02, 0x09, - 0x43, 0x08, 0x7a, 0xf9, 0x43, 0x08, 0x4b, 0x8a, - 0x42, 0x98, 0xd0, 0x43, 0xdc, 0x0d, 0x49, 0x89, - 0x42, 0x88, 0xd0, 0x19, 0x42, 0x90, 0xd0, 0x1b, - 0x49, 0x87, 0x42, 0x88, 0xd1, 0x3a, 0x1d, 0xe8, - 0x30, 0xf9, 0x8a, 0x82, 0x32, 0x01, 0x82, 0x82, - 0xe0, 0x28, 0x49, 0x84, 0x42, 0x88, 0xd0, 0x1f, - 0x49, 0x83, 0x42, 0x88, 0xd1, 0x2e, 0x23, 0x05, - 0x01, 0xdb, 0x18, 0xe8, 0x8d, 0x82, 0x2a, 0x00, - 0xd1, 0x13, 0x22, 0x01, 0x85, 0x82, 0xe0, 0x19, - 0x88, 0xa8, 0x30, 0x01, 0x80, 0xa8, 0xe0, 0x15, - 0x1d, 0xe8, 0x30, 0x79, 0x89, 0x81, 0x31, 0x01, - 0x81, 0x81, 0x88, 0xf9, 0x00, 0xc8, 0x50, 0x22, - 0x79, 0x3a, 0x19, 0x00, 0x80, 0xc2, 0xe0, 0x10, - 0xe0, 0x7b, 0x88, 0xf9, 0x22, 0xf3, 0xe0, 0x13, - 0x1d, 0xe8, 0x30, 0xff, 0x30, 0xfa, 0x8c, 0x82, - 0x32, 0x01, 0x84, 0x82, 0x88, 0xfa, 0x00, 0xd0, - 0x50, 0x21, 0x79, 0x39, 0x19, 0x00, 0x80, 0xc1, - 0x1c, 0x11, 0x22, 0x00, 0xe0, 0x04, 0xe0, 0xbd, - 0xe0, 0x1b, 0xe0, 0x05, 0x88, 0xf9, 0x22, 0xf0, - 0x20, 0x00, 0xf0, 0x00, 0xf9, 0xc1, 0xe0, 0x5f, - 0x88, 0xb8, 0x00, 0xc1, 0x58, 0x61, 0x4b, 0x64, - 0x42, 0x99, 0xd0, 0x0b, 0xdc, 0x58, 0x4b, 0x61, - 0x42, 0x99, 0xd0, 0x04, 0x42, 0x91, 0xd1, 0x54, - 0xf7, 0xff, 0xf8, 0xf4, 0xe0, 0xa6, 0xf7, 0xff, - 0xf8, 0x8b, 0xe0, 0xa3, 0xf7, 0xff, 0xf9, 0xc2, - 0xe0, 0xa0, 0x68, 0xb9, 0x98, 0x02, 0x60, 0x41, - 0x88, 0xb8, 0xf0, 0x00, 0xf8, 0xbd, 0x98, 0x02, - 0x68, 0x40, 0xe0, 0x8f, 0x28, 0x03, 0xd1, 0x50, - 0x68, 0x78, 0x88, 0x3b, 0x06, 0x1e, 0x0e, 0x36, - 0x1c, 0x05, 0x2e, 0x06, 0xd0, 0x3f, 0xdc, 0x08, - 0x2e, 0x06, 0xd2, 0x58, 0xa3, 0x01, 0x5d, 0x9b, - 0x00, 0x5b, 0x44, 0x9f, 0x5b, 0x55, 0x3c, 0x12, - 0x61, 0x4d, 0x2e, 0x0a, 0xd0, 0x3e, 0xdc, 0x05, - 0x2e, 0x08, 0xd0, 0x36, 0x2e, 0x09, 0xd1, 0x57, - 0x26, 0x00, 0xe0, 0x56, 0x2e, 0x0b, 0xd0, 0x66, - 0x2e, 0xe0, 0xd1, 0x51, 0x48, 0x49, 0x70, 0x01, - 0xe0, 0x69, 0x49, 0x49, 0x78, 0x4a, 0x2a, 0x01, - 0xd1, 0x4a, 0x78, 0x03, 0x1d, 0xca, 0x32, 0xf9, - 0x88, 0xd7, 0x18, 0x7f, 0x70, 0xbb, 0x88, 0xd3, - 0x33, 0x01, 0x80, 0xd3, 0x88, 0xd3, 0x88, 0x97, - 0x42, 0xbb, 0xd0, 0x02, 0x78, 0x00, 0x28, 0x0b, - 0xd1, 0x3a, 0x78, 0x08, 0x28, 0x02, 0xd0, 0x09, - 0x28, 0x03, 0xd0, 0x07, 0x28, 0x05, 0xd1, 0x33, - 0x1c, 0x08, 0xf7, 0xff, 0xfb, 0x59, 0xe0, 0x4a, - 0xe0, 0x54, 0xe0, 0x53, 0x78, 0x89, 0x88, 0x50, - 0xf7, 0xff, 0xfc, 0x52, 0xe0, 0x43, 0x78, 0xb9, - 0xf0, 0x00, 0xff, 0x52, 0xe0, 0x3f, 0x20, 0x00, - 0xe0, 0x0b, 0x78, 0xb9, 0xf0, 0x00, 0xfa, 0x2a, - 0xe0, 0x39, 0xe0, 0x3e, 0x78, 0x01, 0x02, 0x09, - 0x78, 0x40, 0x43, 0x08, 0x49, 0x2f, 0x81, 0x48, - 0x20, 0x08, 0xf0, 0x00, 0xfe, 0xeb, 0xe0, 0x2e, - 0x78, 0x01, 0x02, 0x09, 0x78, 0x40, 0x43, 0x08, - 0xf0, 0x00, 0xfa, 0x45, 0xe0, 0x27, 0xe0, 0x26, - 0x78, 0xba, 0x1c, 0x01, 0x78, 0x00, 0xf0, 0x00, - 0xfa, 0x13, 0xe0, 0x20, 0x78, 0xba, 0x1c, 0x01, - 0x78, 0x00, 0xf0, 0x00, 0xfa, 0x22, 0xe0, 0x1a, - 0xe0, 0x19, 0x00, 0xf0, 0x58, 0x21, 0x4b, 0x14, - 0x42, 0x99, 0xd1, 0x0d, 0x19, 0x00, 0x88, 0xc0, - 0xf7, 0xfd, 0xfd, 0x9a, 0x68, 0x79, 0x78, 0x09, - 0x30, 0x01, 0x42, 0x88, 0xd1, 0x04, 0x1c, 0x30, - 0xf7, 0xff, 0xf8, 0xd4, 0xe0, 0x07, 0xe0, 0x03, - 0x36, 0x01, 0x2e, 0x20, 0xdb, 0xe9, 0xe0, 0x02, - 0x20, 0xff, 0xf0, 0x00, 0xfa, 0x6b, 0x2d, 0x00, - 0xd0, 0x08, 0x1c, 0x28, 0xf7, 0xfe, 0xff, 0xa4, - 0xe0, 0x04, 0x28, 0x02, 0xd1, 0x02, 0x88, 0x38, - 0xf0, 0x00, 0xf9, 0xac, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0xa8, - 0x00, 0x02, 0x00, 0x41, 0x2e, 0x08, 0x7a, 0x60, - 0x2e, 0x08, 0x7b, 0x60, 0x2e, 0x08, 0x7e, 0xa8, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7e, 0x88, - 0x00, 0x20, 0x00, 0x41, 0x00, 0x01, 0x00, 0x41, - 0x00, 0x03, 0x00, 0x41, 0x00, 0x24, 0x00, 0x41, - 0x00, 0x40, 0x00, 0x41, 0x2e, 0x08, 0x1a, 0x94, - 0x2e, 0x08, 0x7d, 0x7c, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0x90, 0x04, 0x04, 0x0c, 0x24, 0x78, 0x08, - 0x04, 0x00, 0x1c, 0x0f, 0x78, 0x49, 0x02, 0x09, - 0x43, 0x08, 0x78, 0xb9, 0x43, 0x08, 0x4b, 0x47, - 0x42, 0x98, 0xd0, 0x5d, 0xdc, 0x20, 0x4b, 0x46, - 0x42, 0x98, 0xd0, 0x5a, 0xdc, 0x0f, 0x4b, 0x45, - 0x42, 0x98, 0xd0, 0x41, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x37, 0x4b, 0x43, 0x42, 0x98, 0xd1, 0x5f, - 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, 0xf8, 0x20, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x4b, 0x3f, - 0x42, 0x98, 0xd0, 0x3e, 0x4b, 0x3e, 0x42, 0x98, - 0xd1, 0x52, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xf8, 0x87, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x4b, 0x3a, 0x42, 0x98, 0xd0, 0x50, 0xdc, 0x0f, - 0x4b, 0x39, 0x42, 0x98, 0xd0, 0x3d, 0x33, 0x06, - 0x42, 0x98, 0xd0, 0x42, 0x4b, 0x37, 0x42, 0x98, - 0xd1, 0x3e, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xfa, 0xe1, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x4b, 0x33, 0x42, 0x98, 0xd0, 0x16, 0x33, 0x01, - 0x42, 0x98, 0xd1, 0x31, 0x1c, 0x20, 0x1c, 0x39, - 0xf7, 0xff, 0xfc, 0x20, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xfe, - 0xff, 0x85, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x20, 0xf7, 0xfe, 0xff, 0x9d, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, - 0xf7, 0xff, 0xfb, 0xa0, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xf9, 0x09, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xe0, 0x00, 0xe0, 0x1c, 0x1c, 0x20, 0x1c, 0x39, - 0xf7, 0xff, 0xf9, 0x02, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xf9, 0x29, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xe0, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xfa, 0x1b, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, 0xfb, 0x06, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x11, - 0x89, 0x40, 0xf0, 0x00, 0xf9, 0x60, 0x1c, 0x20, - 0x1c, 0x39, 0xf7, 0xff, 0xf8, 0x81, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x9f, 0x88, 0x00, - 0x00, 0x9f, 0x80, 0x31, 0x00, 0x9f, 0x80, 0x10, - 0x00, 0x9f, 0x80, 0x21, 0x00, 0x9f, 0x80, 0x33, - 0x00, 0x9f, 0x84, 0x40, 0x00, 0x9f, 0x88, 0x0a, - 0x00, 0x9f, 0x88, 0x01, 0x00, 0x9f, 0x88, 0x09, - 0x00, 0x9f, 0x88, 0x0c, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xf0, 0x04, 0x06, 0x0c, 0x36, 0x04, 0x0d, - 0x0c, 0x2d, 0x1c, 0x28, 0x1c, 0x17, 0xf7, 0xfe, - 0xfe, 0x9d, 0x4c, 0x0d, 0x60, 0xa0, 0x28, 0x00, - 0xd1, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x54, 0x70, 0x21, 0x21, 0x45, 0x70, 0x61, - 0x21, 0x0c, 0x80, 0x61, 0x80, 0xa6, 0x81, 0xa5, - 0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x11, 0xfd, 0xaa, - 0x78, 0x20, 0x1c, 0x21, 0xf7, 0xfe, 0xfd, 0xd0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7b, 0x60, 0xb5, 0x00, 0x06, 0x02, - 0x0e, 0x12, 0x20, 0x54, 0x49, 0x05, 0x70, 0x08, - 0x23, 0x48, 0x70, 0x4b, 0x23, 0x04, 0x80, 0x4b, - 0x71, 0x0a, 0xf7, 0xfe, 0xfd, 0xbd, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7b, 0x60, - 0xb5, 0x90, 0x04, 0x0b, 0x0c, 0x1b, 0x27, 0x54, - 0x49, 0x07, 0x70, 0x0f, 0x24, 0x43, 0x70, 0x4c, - 0x24, 0x04, 0x80, 0x4c, 0x71, 0xc8, 0x80, 0x8b, - 0x71, 0x8a, 0x1c, 0x38, 0xf7, 0xfe, 0xfd, 0xa8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7b, 0x60, 0xb5, 0x00, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x54, 0x49, 0x05, 0x70, 0x08, - 0x23, 0x46, 0x70, 0x4b, 0x23, 0x04, 0x80, 0x4b, - 0x80, 0x8a, 0xf7, 0xfe, 0xfd, 0x95, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7b, 0x60, - 0x23, 0xff, 0x04, 0x1b, 0x40, 0x18, 0x23, 0x01, - 0x05, 0x5b, 0x42, 0x98, 0xd0, 0x1e, 0xdc, 0x0b, - 0x09, 0x5b, 0x42, 0x98, 0xd0, 0x16, 0x00, 0x5b, - 0x42, 0x98, 0xd0, 0x15, 0x23, 0x03, 0x04, 0x1b, - 0x42, 0x98, 0xd1, 0x19, 0x20, 0x02, 0x47, 0x70, - 0x23, 0x09, 0x04, 0x9b, 0x42, 0x98, 0xd0, 0x0f, - 0x23, 0x01, 0x05, 0x9b, 0x42, 0x98, 0xd0, 0x0d, - 0x23, 0x03, 0x05, 0x5b, 0x42, 0x98, 0xd1, 0x0b, - 0x20, 0x06, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x01, 0x47, 0x70, 0x20, 0x03, 0x47, 0x70, - 0x20, 0x04, 0x47, 0x70, 0x20, 0x05, 0x47, 0x70, - 0x20, 0x00, 0x43, 0xc0, 0x47, 0x70, 0xb5, 0xb0, - 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x0b, 0x0c, 0x1b, - 0x04, 0x14, 0x0c, 0x24, 0x22, 0x00, 0x20, 0x00, - 0x49, 0x10, 0x00, 0xc5, 0x5b, 0x4d, 0x2d, 0x00, - 0xd1, 0x08, 0x1c, 0x42, 0x04, 0x12, 0x0c, 0x12, - 0x00, 0xc0, 0x52, 0x0a, 0x18, 0x40, 0x80, 0x84, - 0x80, 0x43, 0xe0, 0x02, 0x30, 0x01, 0x28, 0x40, - 0xdd, 0xef, 0x2a, 0x00, 0xd0, 0x0a, 0x20, 0x05, - 0x04, 0x00, 0x43, 0x10, 0x1c, 0x39, 0xf7, 0xfe, - 0xfd, 0xa9, 0x04, 0x00, 0x0c, 0x00, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x7b, 0x70, - 0xb5, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x0b, 0x00, 0xc3, 0x5a, 0xcb, 0x42, 0x93, - 0xd1, 0x09, 0x27, 0x00, 0x00, 0xc0, 0x52, 0x0f, - 0x1c, 0x10, 0xf7, 0xfe, 0xfd, 0xc7, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x30, 0x01, - 0x28, 0x40, 0xdb, 0xee, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7b, 0x70, 0xb5, 0xf0, 0x04, 0x06, - 0x0c, 0x36, 0x27, 0x00, 0x4c, 0x17, 0x00, 0xf8, - 0x5a, 0x20, 0x42, 0xb0, 0xd1, 0x1d, 0x00, 0xfd, - 0x19, 0x28, 0x88, 0x81, 0x29, 0x05, 0xd2, 0x10, - 0xa3, 0x01, 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, - 0x17, 0x02, 0x09, 0x10, 0x17, 0x00, 0x21, 0x09, - 0x48, 0x0f, 0x70, 0x01, 0x21, 0x20, 0xf7, 0xfe, - 0xfc, 0xdf, 0xe0, 0x02, 0x88, 0x40, 0xf0, 0x01, - 0xfc, 0xf9, 0x5b, 0x60, 0xf7, 0xff, 0xff, 0xc0, - 0xe0, 0x06, 0x88, 0x40, 0xf7, 0xfe, 0xff, 0x2c, - 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x40, 0xdb, 0xda, - 0x2f, 0x40, 0xd1, 0x02, 0x1c, 0x30, 0xf7, 0xfe, - 0xfd, 0x89, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7b, 0x70, - 0x2e, 0x08, 0x72, 0x60, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x05, - 0xd0, 0x0c, 0x28, 0x0a, 0xd0, 0x05, 0x28, 0x0b, - 0xd1, 0x08, 0x78, 0x48, 0x22, 0x10, 0x21, 0x0b, - 0xe0, 0x02, 0x78, 0x48, 0x22, 0x10, 0x21, 0x0a, - 0xf0, 0x01, 0xfc, 0x90, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x00, 0x06, 0x00, 0x0e, 0x00, - 0x28, 0x05, 0xd0, 0x06, 0x28, 0x0a, 0xd0, 0x07, - 0x28, 0x0b, 0xd1, 0x02, 0x78, 0x88, 0xf0, 0x01, - 0xfb, 0xaf, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x78, 0x48, 0x28, 0x01, 0xd0, 0xf9, 0x78, 0x88, - 0xf0, 0x01, 0xfb, 0xa4, 0xe7, 0xf5, 0xb5, 0xf0, - 0x4d, 0x22, 0x81, 0x68, 0x27, 0x00, 0x06, 0x38, - 0x0e, 0x00, 0xf0, 0x01, 0xfb, 0xc5, 0x28, 0x4e, - 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x01, 0xfb, 0x6c, - 0x1c, 0x78, 0x04, 0x07, 0x14, 0x3f, 0x2f, 0x14, - 0xdb, 0xf1, 0x89, 0x68, 0xf0, 0x01, 0xfc, 0xda, - 0x89, 0x68, 0xf0, 0x01, 0xfc, 0x41, 0x21, 0x0e, - 0x4f, 0x17, 0x28, 0x00, 0xd1, 0x02, 0x70, 0x39, - 0x20, 0x04, 0xe0, 0x1e, 0x20, 0x00, 0x24, 0x00, - 0x4e, 0x14, 0x00, 0xe1, 0x58, 0x71, 0x4b, 0x14, - 0x42, 0x99, 0xd1, 0x0e, 0x89, 0x69, 0x1c, 0x20, - 0xf7, 0xfe, 0xff, 0x3e, 0x28, 0x00, 0xd0, 0x07, - 0x21, 0x0e, 0x70, 0x39, 0x20, 0x00, 0x70, 0x78, - 0x21, 0x06, 0x1c, 0x38, 0xf7, 0xfe, 0xfc, 0x60, - 0x20, 0x01, 0x34, 0x01, 0x2c, 0x20, 0xdb, 0xe8, - 0x28, 0x00, 0xd1, 0x07, 0x21, 0x0e, 0x70, 0x39, - 0x20, 0x05, 0x70, 0x78, 0x21, 0x06, 0x1c, 0x38, - 0xf7, 0xfe, 0xfc, 0x52, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7a, 0x60, - 0x00, 0x03, 0x00, 0x41, 0xb5, 0xf0, 0x06, 0x00, - 0x0e, 0x00, 0x21, 0x00, 0xb0, 0x85, 0x91, 0x02, - 0x22, 0x02, 0x92, 0x01, 0x28, 0xff, 0xd0, 0x02, - 0x22, 0x01, 0x92, 0x01, 0x1c, 0x01, 0x9a, 0x01, - 0x2a, 0x00, 0xdd, 0x4d, 0x4a, 0x28, 0x92, 0x04, - 0x4f, 0x28, 0x20, 0x01, 0x70, 0x38, 0x01, 0x08, - 0x9a, 0x04, 0x5c, 0x12, 0x70, 0x7a, 0x31, 0x01, - 0x91, 0x03, 0x70, 0xb9, 0x21, 0x00, 0x91, 0x00, - 0x9a, 0x04, 0x18, 0x84, 0x89, 0xa0, 0x28, 0x00, - 0xd0, 0x16, 0x68, 0xa3, 0x2b, 0x00, 0xd0, 0x13, - 0x70, 0xf8, 0x28, 0x00, 0xdd, 0x0b, 0x00, 0x4a, - 0x5a, 0x9d, 0x0a, 0x2e, 0x19, 0xd5, 0x71, 0x2e, - 0x5a, 0x9a, 0x71, 0x6a, 0x31, 0x01, 0x06, 0x09, - 0x0e, 0x09, 0x42, 0x88, 0xdc, 0xf3, 0x00, 0x40, - 0x99, 0x00, 0x18, 0x40, 0x1c, 0x45, 0xe0, 0x02, - 0x20, 0x00, 0x70, 0xf8, 0x25, 0x01, 0x68, 0x60, - 0x28, 0x00, 0xd0, 0x0e, 0xf0, 0x11, 0xfc, 0x66, - 0x1c, 0x02, 0x19, 0x78, 0x68, 0x61, 0x30, 0x03, - 0xf0, 0x11, 0xfb, 0xf0, 0x68, 0x60, 0xf0, 0x11, - 0xfc, 0x5d, 0x19, 0x45, 0x20, 0x00, 0x19, 0x79, - 0x70, 0xc8, 0x1c, 0x38, 0x1d, 0x69, 0xf7, 0xfe, - 0xfb, 0xf3, 0x99, 0x03, 0x06, 0x09, 0x0e, 0x09, - 0x98, 0x02, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x02, 0x9a, 0x01, 0x42, 0x90, 0xdb, 0xb4, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x7e, 0x88, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0x80, 0x20, 0x00, 0x22, 0x00, 0x1c, 0x0f, - 0x49, 0x0a, 0x54, 0x0a, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x28, 0x02, 0xdb, 0xf9, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0xc6, 0x28, 0x01, 0xd1, 0x03, - 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb8, - 0xb5, 0xf0, 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x17, - 0xf0, 0x00, 0xf8, 0x8e, 0x4d, 0x0d, 0x69, 0x28, - 0x4b, 0x0d, 0x18, 0xc6, 0x20, 0x04, 0xf0, 0x00, - 0xf9, 0x65, 0x20, 0x00, 0x2c, 0x00, 0xdd, 0x0c, - 0x5c, 0x39, 0x80, 0x31, 0x23, 0x03, 0x07, 0x1b, - 0x69, 0x29, 0x18, 0xc9, 0x88, 0x09, 0x54, 0x39, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x42, 0xa0, - 0xdb, 0xf2, 0x1c, 0x20, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb0, - 0x30, 0x00, 0x40, 0x00, 0xb5, 0xf0, 0x1c, 0x0c, - 0x1c, 0x17, 0xb0, 0x83, 0xf0, 0x00, 0xf8, 0x68, - 0x4e, 0x13, 0x69, 0x30, 0x4b, 0x13, 0x18, 0xc5, - 0x20, 0x04, 0xf0, 0x00, 0xf9, 0x3f, 0x23, 0x03, - 0x07, 0x1b, 0x69, 0x30, 0x18, 0xc1, 0x20, 0x00, - 0x2c, 0x00, 0xdd, 0x0a, 0x88, 0x2a, 0x54, 0x3a, - 0x88, 0x0a, 0x54, 0x3a, 0x88, 0x0a, 0x54, 0x3a, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x42, 0xa0, - 0xdb, 0xf4, 0x46, 0x68, 0x90, 0x02, 0x20, 0x01, - 0xab, 0x01, 0x80, 0x18, 0x21, 0x04, 0xa8, 0x01, - 0xf0, 0x00, 0xf8, 0x9e, 0x1c, 0x20, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0xb0, 0x30, 0x00, 0x40, 0x00, - 0xb5, 0xb0, 0x25, 0x01, 0x1c, 0x0c, 0x1c, 0x17, - 0xf0, 0x00, 0xf8, 0x36, 0x48, 0x18, 0x2c, 0x08, - 0xd2, 0x2a, 0xa3, 0x02, 0x5d, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x26, 0x04, 0x06, 0x0c, - 0x12, 0x18, 0x1e, 0x23, 0x25, 0x00, 0xe0, 0x1f, - 0x61, 0x47, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf8, 0x31, 0xe0, 0x14, 0x61, 0x47, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x53, 0xe0, 0x0e, - 0x61, 0x87, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf8, 0x6f, 0xe0, 0x08, 0x61, 0x87, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x93, 0xe0, 0x02, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xb1, 0x1c, 0x05, - 0xe0, 0x02, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x14, - 0x1c, 0x28, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xb0, 0x20, 0x00, 0x47, 0x70, - 0x49, 0x05, 0x68, 0xca, 0x42, 0x90, 0xd0, 0x06, - 0x60, 0xc8, 0x28, 0x00, 0xd1, 0x00, 0xe0, 0x01, - 0x20, 0x01, 0x03, 0x40, 0x61, 0x08, 0x47, 0x70, - 0x2e, 0x08, 0x1a, 0xb0, 0xb5, 0xb0, 0x1c, 0x07, - 0x88, 0x00, 0x4a, 0x10, 0x43, 0x02, 0x48, 0x10, - 0x69, 0x00, 0x43, 0x02, 0x25, 0x03, 0x07, 0x2d, - 0x43, 0x05, 0x1c, 0x08, 0x1c, 0x14, 0xf0, 0x00, - 0xf8, 0xc1, 0x20, 0x00, 0x88, 0x79, 0x29, 0x00, - 0xdd, 0x0a, 0x88, 0x21, 0x68, 0x7a, 0x54, 0x11, - 0x88, 0x29, 0x68, 0x7a, 0x54, 0x11, 0x88, 0x79, - 0x30, 0x01, 0x34, 0x02, 0x42, 0x81, 0xdc, 0xf4, - 0x30, 0x01, 0x81, 0x38, 0x20, 0x00, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x30, 0x00, 0x40, 0x00, - 0x2e, 0x08, 0x1a, 0xb0, 0xb5, 0x90, 0x1c, 0x07, - 0x88, 0x00, 0x4b, 0x0d, 0x18, 0xc0, 0x4a, 0x0d, - 0x69, 0x12, 0x18, 0x84, 0x1c, 0x08, 0xf0, 0x00, - 0xf8, 0x9d, 0x20, 0x00, 0x88, 0x79, 0x29, 0x00, - 0xdd, 0x07, 0x68, 0x79, 0x5c, 0x09, 0x80, 0x21, - 0x88, 0x79, 0x30, 0x01, 0x34, 0x02, 0x42, 0x81, - 0xdc, 0xf7, 0x20, 0x01, 0x81, 0x38, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x30, 0x00, 0x40, 0x00, 0x2e, 0x08, 0x1a, 0xb0, - 0xb5, 0xb0, 0x1c, 0x07, 0x88, 0x00, 0x07, 0xc2, - 0x0f, 0xd2, 0x4c, 0x0f, 0xd0, 0x04, 0x23, 0xfe, - 0x40, 0x18, 0x4b, 0x0e, 0x18, 0xc0, 0xe0, 0x01, - 0x4b, 0x0d, 0x18, 0xc0, 0x69, 0x22, 0x18, 0x85, - 0x1c, 0x08, 0xf0, 0x00, 0xf8, 0x73, 0x23, 0x03, - 0x07, 0x1b, 0x69, 0x20, 0x18, 0xc0, 0x88, 0x29, - 0x68, 0x7a, 0x70, 0x11, 0x88, 0x01, 0x68, 0x7a, - 0x70, 0x11, 0x88, 0x00, 0x68, 0x79, 0x70, 0x08, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xb0, 0x30, 0x00, 0x50, 0x00, - 0x30, 0x00, 0x40, 0x00, 0xb5, 0x90, 0x88, 0x02, - 0x07, 0xd3, 0x0f, 0xdb, 0x1c, 0x07, 0x48, 0x0b, - 0x2b, 0x00, 0xd0, 0x02, 0x4b, 0x0a, 0x18, 0xd2, - 0xe0, 0x01, 0x4b, 0x0a, 0x18, 0xd2, 0x69, 0x00, - 0x18, 0x14, 0x1c, 0x08, 0xf0, 0x00, 0xf8, 0x4a, - 0x68, 0x78, 0x78, 0x00, 0x80, 0x20, 0x88, 0x38, - 0x07, 0xc0, 0x0f, 0xc0, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0xb0, - 0x30, 0x00, 0x50, 0x00, 0x30, 0x00, 0x40, 0x00, - 0xb5, 0x90, 0x1c, 0x07, 0x20, 0x00, 0x78, 0x39, - 0x29, 0x01, 0xd0, 0x02, 0x29, 0x02, 0xd1, 0x28, - 0xe0, 0x26, 0x48, 0x15, 0x24, 0x00, 0x68, 0x01, - 0x29, 0x00, 0xd0, 0x16, 0x60, 0x04, 0x20, 0x1a, - 0xf0, 0x00, 0xf9, 0x10, 0x20, 0xc8, 0xf7, 0xfe, - 0xfb, 0x79, 0x20, 0x01, 0x06, 0x40, 0xf0, 0x16, - 0xfd, 0xca, 0xf0, 0x16, 0xfd, 0xcd, 0x4b, 0x0d, - 0x40, 0x18, 0xf0, 0x16, 0xfd, 0xcd, 0x20, 0x00, - 0xf0, 0x00, 0xf8, 0xb8, 0x20, 0x01, 0xf0, 0x00, - 0xf8, 0xb5, 0x48, 0x09, 0x1f, 0xc1, 0x39, 0x01, - 0x68, 0xc9, 0x5c, 0x40, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0x01, 0x70, 0x78, 0xe0, 0x00, 0x70, 0x7c, - 0x20, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x98, 0xfd, 0xff, 0xff, 0xff, - 0x2e, 0x08, 0x1a, 0xb8, 0xb5, 0xb0, 0x1c, 0x07, - 0x4c, 0x1e, 0x68, 0xe0, 0x00, 0x80, 0x4d, 0x1e, - 0x58, 0x28, 0x42, 0xb8, 0xd0, 0x32, 0x2f, 0x08, - 0xd2, 0x2d, 0xa3, 0x02, 0x5d, 0xdb, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x29, 0x29, 0x04, 0x04, - 0x13, 0x13, 0x29, 0x29, 0x28, 0x03, 0xd0, 0x22, - 0x28, 0x02, 0xd0, 0x20, 0x20, 0x03, 0x49, 0x15, - 0x60, 0x08, 0x68, 0xe0, 0x00, 0xc3, 0x18, 0x18, - 0xf0, 0x00, 0xf8, 0xc8, 0x21, 0xf3, 0x40, 0x01, - 0xe0, 0x10, 0x28, 0x04, 0xd0, 0x13, 0x28, 0x05, - 0xd0, 0x11, 0x20, 0x00, 0x21, 0x03, 0x07, 0x09, - 0x80, 0x08, 0x68, 0xe0, 0x00, 0xc3, 0x18, 0x18, - 0xf0, 0x00, 0xf8, 0xb8, 0x23, 0xf3, 0x40, 0x18, - 0x21, 0x04, 0x43, 0x01, 0x68, 0xe0, 0x00, 0xc3, - 0x18, 0x18, 0xf0, 0x00, 0xf8, 0x95, 0x68, 0xe0, - 0x00, 0x80, 0x50, 0x2f, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb0, - 0x2e, 0x08, 0x1a, 0xb0, 0x6e, 0x00, 0x11, 0x00, - 0xb5, 0x80, 0x21, 0x80, 0x1c, 0x07, 0x20, 0x1f, - 0xf0, 0x00, 0xf8, 0x82, 0x21, 0x55, 0x20, 0x02, - 0xf0, 0x00, 0xf8, 0x7e, 0x20, 0x02, 0xf0, 0x00, - 0xf8, 0x95, 0x28, 0x55, 0xd0, 0x03, 0x20, 0x00, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x21, 0x33, - 0x20, 0x05, 0xf0, 0x00, 0xf8, 0x71, 0x21, 0x33, - 0x20, 0x0e, 0xf0, 0x00, 0xf8, 0x6d, 0x21, 0x21, - 0x20, 0x17, 0xf0, 0x00, 0xf8, 0x69, 0x21, 0x00, - 0x20, 0x01, 0xf0, 0x00, 0xf8, 0x65, 0x21, 0x00, - 0x20, 0x0a, 0xf0, 0x00, 0xf8, 0x61, 0x21, 0x01, - 0x20, 0x02, 0xf0, 0x00, 0xf8, 0x5d, 0x21, 0x01, - 0x20, 0x0b, 0xf0, 0x00, 0xf8, 0x59, 0x21, 0x00, - 0x20, 0x03, 0xf0, 0x00, 0xf8, 0x55, 0x21, 0x00, - 0x20, 0x0c, 0xf0, 0x00, 0xf8, 0x51, 0x21, 0x00, - 0x20, 0x04, 0xf0, 0x00, 0xf8, 0x4d, 0x21, 0x01, - 0x20, 0x0d, 0xf0, 0x00, 0xf8, 0x49, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x00, 0xf8, 0x45, 0x21, 0x04, - 0x20, 0x1c, 0xf0, 0x00, 0xf8, 0x41, 0x21, 0x03, - 0x20, 0x1b, 0xf0, 0x00, 0xf8, 0x3d, 0x21, 0x01, - 0x20, 0x1f, 0xf0, 0x00, 0xf8, 0x39, 0x21, 0x01, - 0x20, 0x18, 0xf0, 0x00, 0xf8, 0x35, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x04, 0x20, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x00, 0xc3, - 0x1c, 0x07, 0x18, 0x18, 0x1c, 0x06, 0xf0, 0x00, - 0xf8, 0x41, 0x07, 0xc0, 0x0f, 0xc0, 0x25, 0x01, - 0x4c, 0x10, 0x28, 0x00, 0xd0, 0x06, 0x5d, 0xe1, - 0x29, 0x00, 0xd0, 0x03, 0x1c, 0x28, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x28, 0x00, 0xd1, 0x01, - 0x55, 0xe0, 0xe7, 0xf7, 0x21, 0x80, 0x1c, 0x30, - 0xf0, 0x00, 0xf8, 0x12, 0x20, 0x32, 0xf7, 0xfe, - 0xfa, 0x95, 0x21, 0x00, 0x1c, 0x30, 0xf0, 0x00, - 0xf8, 0x0b, 0x20, 0x32, 0xf7, 0xfe, 0xfa, 0x8e, - 0x55, 0xe5, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb8, - 0xb5, 0xb0, 0x06, 0x07, 0x0e, 0x3f, 0x06, 0x0d, - 0x0e, 0x2d, 0x24, 0x09, 0xb0, 0x81, 0xab, 0x00, - 0x70, 0x1f, 0x70, 0x5d, 0x46, 0x69, 0x22, 0x02, - 0x20, 0x80, 0xf7, 0xf4, 0xfa, 0xe6, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x08, 0x1e, 0x60, 0x06, 0x04, - 0x0e, 0x24, 0xd1, 0xf0, 0xb0, 0x01, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x04, - 0x0e, 0x24, 0xb0, 0x82, 0x48, 0x1f, 0x68, 0x00, - 0x90, 0x00, 0x25, 0x09, 0xab, 0x01, 0x70, 0x1c, - 0x20, 0xff, 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, - 0xb4, 0x04, 0x20, 0x80, 0xa9, 0x02, 0xab, 0x01, - 0xf7, 0xf4, 0xfb, 0x22, 0xb0, 0x01, 0xaf, 0x00, - 0x78, 0x3f, 0xab, 0x01, 0x70, 0x1c, 0x20, 0xff, - 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, 0xb4, 0x04, - 0x20, 0x80, 0xa9, 0x02, 0xab, 0x01, 0xf7, 0xf4, - 0xfb, 0x13, 0xb0, 0x01, 0xae, 0x00, 0x78, 0x36, - 0xab, 0x01, 0x70, 0x1c, 0x20, 0xff, 0x3b, 0x04, - 0x70, 0x18, 0x22, 0x01, 0xb4, 0x04, 0x20, 0x80, - 0xa9, 0x02, 0xab, 0x01, 0xf7, 0xf4, 0xfb, 0x04, - 0xb0, 0x01, 0xa8, 0x00, 0x78, 0x00, 0x42, 0xb7, - 0xd1, 0x03, 0x42, 0x87, 0xd1, 0x01, 0x1c, 0x38, - 0xe0, 0x04, 0x1e, 0x68, 0x06, 0x05, 0x0e, 0x2d, - 0xd1, 0xc8, 0x20, 0xff, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xcc, 0x9c, - 0xb5, 0x80, 0x78, 0x01, 0x29, 0x00, 0xd1, 0x1b, - 0x78, 0x40, 0x28, 0x00, 0xd0, 0x18, 0x4f, 0x0e, - 0x68, 0xf8, 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, - 0xff, 0xad, 0x21, 0x20, 0x43, 0x01, 0x68, 0xf8, - 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, 0xff, 0x8c, - 0x68, 0xf8, 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, - 0xff, 0xa1, 0x21, 0x40, 0x43, 0x01, 0x68, 0xf8, - 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, 0xff, 0x80, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xb0, 0xb5, 0x80, 0x20, 0xe1, - 0x01, 0x00, 0xf7, 0xfe, 0xf9, 0xcb, 0x49, 0x1f, - 0x60, 0xc8, 0x28, 0x00, 0xd0, 0x0d, 0x27, 0x00, - 0x80, 0x4f, 0x70, 0x0f, 0x20, 0x64, 0x80, 0x88, - 0x80, 0xcf, 0x21, 0x64, 0x20, 0x00, 0xf0, 0x00, - 0xfe, 0x34, 0x20, 0x00, 0x22, 0xff, 0x49, 0x18, - 0xe0, 0x08, 0x78, 0x08, 0x23, 0x80, 0x43, 0x18, - 0x70, 0x08, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x01, 0x03, 0x18, 0x5b, - 0x70, 0x5a, 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, - 0x28, 0x0a, 0xdb, 0xf7, 0x20, 0x00, 0x49, 0x0f, - 0x22, 0xff, 0x32, 0x01, 0x54, 0x0f, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0x42, 0x90, 0xdb, 0xf9, - 0x20, 0x00, 0x49, 0x0b, 0x54, 0x0f, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0x42, 0x90, 0xdb, 0xf9, - 0x1c, 0x38, 0x49, 0x08, 0x63, 0x8f, 0x60, 0x4f, - 0x60, 0x0f, 0x62, 0x0f, 0x61, 0xcf, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x8f, 0x90, 0x2e, 0x08, 0x90, 0x7c, - 0x2e, 0x08, 0x91, 0x7c, 0x2e, 0x08, 0x90, 0x30, - 0xb5, 0x90, 0x27, 0x00, 0x4c, 0x0b, 0x01, 0x38, - 0x5c, 0x21, 0x29, 0x00, 0xd0, 0x09, 0x19, 0x00, - 0x68, 0x81, 0x29, 0x00, 0xd0, 0x02, 0x88, 0x80, - 0xf7, 0xff, 0xfb, 0x8a, 0x1c, 0x38, 0xf0, 0x00, - 0xff, 0x83, 0x37, 0x01, 0x2f, 0x0a, 0xdb, 0xee, - 0xf0, 0x00, 0xf8, 0x06, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x90, - 0xb5, 0xf0, 0x25, 0x00, 0x4f, 0x1e, 0x88, 0x78, - 0x26, 0x00, 0x28, 0x00, 0xdd, 0x2c, 0x00, 0xec, - 0x19, 0x64, 0x00, 0xa4, 0x68, 0xf8, 0x19, 0x00, - 0x68, 0x80, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfe, - 0xf9, 0x7b, 0x68, 0xf8, 0x19, 0x00, 0x60, 0x86, - 0x68, 0xf8, 0x19, 0x00, 0x68, 0x40, 0x28, 0x00, - 0xd0, 0x04, 0xf7, 0xfe, 0xf9, 0x71, 0x68, 0xf8, - 0x19, 0x00, 0x60, 0x46, 0x68, 0xf8, 0x59, 0x00, - 0x28, 0x00, 0xd0, 0x03, 0xf7, 0xfe, 0xf9, 0x68, - 0x68, 0xf8, 0x51, 0x06, 0x68, 0xf8, 0x19, 0x00, - 0x69, 0x40, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfe, - 0xf9, 0x5f, 0x68, 0xf8, 0x19, 0x00, 0x61, 0x46, - 0x88, 0x78, 0x35, 0x01, 0x42, 0xa8, 0xdc, 0xd2, - 0x68, 0xf8, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xfe, - 0xf9, 0x53, 0x60, 0xfe, 0x80, 0x7e, 0x80, 0xbe, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0xf0, 0x06, 0x0d, - 0x0e, 0x2d, 0x1c, 0x07, 0x20, 0x02, 0x40, 0x28, - 0x26, 0x00, 0x43, 0xf6, 0x24, 0x00, 0x28, 0x00, - 0xd0, 0x0d, 0x68, 0x38, 0x28, 0x00, 0xd0, 0x02, - 0xf7, 0xfe, 0xf9, 0x3a, 0x60, 0x3c, 0x68, 0x78, - 0x28, 0x00, 0xd0, 0x02, 0xf7, 0xfe, 0xf9, 0x34, - 0x60, 0x7c, 0x61, 0x7e, 0x61, 0xbe, 0x08, 0x68, - 0xd3, 0x0d, 0x69, 0xf8, 0x28, 0x00, 0xd0, 0x02, - 0xf7, 0xfe, 0xf9, 0x2a, 0x61, 0xfc, 0x6a, 0x38, - 0x28, 0x00, 0xd0, 0x02, 0xf7, 0xfe, 0xf9, 0x24, - 0x62, 0x3c, 0x63, 0x3e, 0x63, 0x7e, 0x08, 0xe8, - 0xd3, 0x05, 0x6b, 0xb8, 0x28, 0x00, 0xd0, 0x02, - 0xf7, 0xfe, 0xf9, 0x1a, 0x63, 0xbc, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0x4f, 0x12, - 0x88, 0xb8, 0x1d, 0xc1, 0x31, 0x0d, 0x00, 0xca, - 0x18, 0x52, 0x00, 0x92, 0x00, 0xc1, 0x18, 0x09, - 0x00, 0x89, 0x68, 0xf8, 0xf7, 0xfe, 0xf8, 0xe7, - 0x60, 0xf8, 0x28, 0x00, 0xd0, 0x0b, 0x88, 0xb8, - 0x1d, 0xc1, 0x31, 0x0d, 0xf0, 0x00, 0xfd, 0x51, - 0x88, 0xb8, 0x30, 0x14, 0x80, 0xb8, 0x20, 0x00, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x78, 0x38, - 0x23, 0x80, 0x43, 0x18, 0x70, 0x38, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0x90, 0x06, 0x07, - 0x0e, 0x3f, 0x4c, 0x10, 0x2f, 0x11, 0xd1, 0x02, - 0x78, 0x20, 0x27, 0x08, 0x40, 0x07, 0xf7, 0xff, - 0xff, 0x3b, 0xf7, 0xff, 0xfe, 0xeb, 0x09, 0x38, - 0xd3, 0x03, 0x78, 0x20, 0x23, 0x08, 0x43, 0x18, - 0x70, 0x20, 0x4b, 0x09, 0x22, 0x00, 0x21, 0x00, - 0x20, 0x00, 0xf0, 0x00, 0xfe, 0x4f, 0x4b, 0x07, - 0x22, 0x11, 0x21, 0x00, 0x20, 0x42, 0xf0, 0x00, - 0xfe, 0x49, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x00, 0x00, 0x13, 0x88, 0x00, 0x00, 0x27, 0x10, - 0x49, 0x0e, 0x78, 0x0a, 0x08, 0x52, 0xd3, 0x01, - 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, 0x70, 0x02, - 0x78, 0x0a, 0x08, 0x92, 0xd3, 0x01, 0x22, 0xff, - 0xe0, 0x00, 0x22, 0x00, 0x70, 0x42, 0x78, 0x0a, - 0x09, 0x52, 0xd3, 0x01, 0x22, 0xff, 0xe0, 0x00, - 0x22, 0x00, 0x70, 0x82, 0x78, 0x09, 0x09, 0x89, - 0xd3, 0x01, 0x21, 0xff, 0xe0, 0x00, 0x21, 0x00, - 0x70, 0xc1, 0x47, 0x70, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0x00, 0xf7, 0xff, 0xfe, 0xf9, 0x48, 0x03, - 0x78, 0x01, 0x23, 0x80, 0x43, 0x19, 0x70, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xf0, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x07, - 0xb0, 0x81, 0x48, 0x3b, 0x90, 0x00, 0x78, 0x00, - 0x23, 0x80, 0x40, 0x18, 0x26, 0x00, 0x43, 0xf6, - 0x28, 0x00, 0xd1, 0x04, 0x1c, 0x38, 0xf0, 0x00, - 0xfe, 0xd5, 0x1c, 0x04, 0xd5, 0x01, 0x1c, 0x30, - 0xe0, 0x61, 0x78, 0x38, 0x4e, 0x33, 0x28, 0x42, - 0xd0, 0x45, 0xdc, 0x1c, 0x28, 0x00, 0xd0, 0x25, - 0x28, 0x01, 0xd0, 0x57, 0x28, 0x02, 0xd1, 0x55, - 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, 0xf9, 0xe8, - 0x28, 0x00, 0xd0, 0x04, 0x01, 0x20, 0x19, 0x80, - 0x88, 0x80, 0xf7, 0xff, 0xfa, 0x5d, 0x1c, 0x20, - 0xf0, 0x00, 0xfe, 0x56, 0xf0, 0x00, 0xfd, 0x6f, - 0x28, 0x00, 0xd1, 0x43, 0xf0, 0x00, 0xfd, 0x6b, - 0x28, 0x00, 0xd0, 0xfb, 0xe0, 0x3e, 0x28, 0x4e, - 0xd0, 0x38, 0x28, 0x70, 0xd0, 0x1e, 0x28, 0x73, - 0xd1, 0x38, 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, - 0xfc, 0x37, 0xe0, 0x33, 0x98, 0x00, 0x78, 0x00, - 0x08, 0x40, 0xd2, 0x2f, 0x1c, 0x38, 0x1c, 0x29, - 0xf0, 0x00, 0xf8, 0x36, 0x28, 0x01, 0xd1, 0x29, - 0x01, 0x20, 0x19, 0x80, 0x88, 0x80, 0xf7, 0xff, - 0xfa, 0x37, 0xf0, 0x00, 0xfd, 0x4c, 0x28, 0x00, - 0xd1, 0x20, 0xf0, 0x00, 0xfd, 0x48, 0x28, 0x00, - 0xd0, 0xfb, 0xe0, 0x1b, 0x1c, 0x38, 0x1c, 0x29, - 0xf0, 0x00, 0xfb, 0xf6, 0xe0, 0x16, 0x98, 0x00, - 0x78, 0x00, 0x09, 0x40, 0xd2, 0x12, 0x1c, 0x38, - 0x1c, 0x29, 0xf0, 0x00, 0xf8, 0xd1, 0x28, 0x10, - 0xd1, 0x0c, 0x01, 0x20, 0x19, 0x80, 0x88, 0x80, - 0xf7, 0xff, 0xfa, 0x1a, 0x1c, 0x20, 0xf0, 0x00, - 0xfe, 0x13, 0xe0, 0x03, 0x1c, 0x38, 0x1c, 0x29, - 0xf0, 0x00, 0xfb, 0x10, 0x20, 0x00, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x80, 0x2e, 0x08, 0x8f, 0x90, - 0xb5, 0xf0, 0x04, 0x09, 0x0c, 0x09, 0x25, 0x00, - 0xb0, 0x85, 0xf7, 0xf3, 0xff, 0xa9, 0x20, 0x08, - 0xf7, 0xf3, 0xff, 0xc2, 0x20, 0x04, 0xf7, 0xf3, - 0xff, 0xbf, 0x20, 0x0c, 0xf7, 0xf3, 0xff, 0xbc, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x03, 0x20, 0x10, - 0xf7, 0xf3, 0xff, 0xb6, 0x4f, 0x4d, 0x81, 0x38, - 0x20, 0x02, 0xf7, 0xf3, 0xff, 0xb1, 0x20, 0x05, - 0xf7, 0xf3, 0xff, 0xae, 0x06, 0x04, 0x0e, 0x24, - 0x20, 0x01, 0xf7, 0xf3, 0xff, 0xa9, 0x20, 0x08, - 0xf7, 0xf3, 0xff, 0xa6, 0x06, 0x06, 0x0e, 0x36, - 0x20, 0x08, 0xf7, 0xf3, 0xff, 0xa1, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x02, 0x48, 0x42, 0x90, 0x04, - 0x5d, 0x80, 0x0a, 0x01, 0xd3, 0x03, 0x06, 0xc0, - 0x0e, 0xc0, 0x42, 0xa0, 0xd0, 0x45, 0x20, 0x80, - 0x43, 0x20, 0x99, 0x04, 0x55, 0x88, 0x98, 0x03, - 0x38, 0x09, 0xd5, 0x00, 0x30, 0x03, 0x10, 0x80, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x01, 0x88, 0x7c, - 0x28, 0x00, 0xdd, 0x36, 0x20, 0x10, 0xf7, 0xf3, - 0xff, 0x83, 0x04, 0x06, 0x0c, 0x36, 0x20, 0x10, - 0xf7, 0xf3, 0xff, 0x7e, 0x04, 0xc1, 0x0c, 0xc9, - 0x91, 0x00, 0x2e, 0x00, 0xd0, 0x21, 0x1c, 0x30, - 0xf0, 0x00, 0xfb, 0xe0, 0x4b, 0x2f, 0x42, 0x98, - 0xd1, 0x10, 0x88, 0xb8, 0x88, 0x79, 0x42, 0x88, - 0xd1, 0x05, 0xf7, 0xff, 0xfe, 0xa3, 0x23, 0x01, - 0x42, 0xd8, 0xd1, 0x00, 0xe0, 0x49, 0x88, 0x79, - 0x31, 0x01, 0x80, 0x79, 0x1c, 0x61, 0x1c, 0x20, - 0x04, 0x0c, 0x0c, 0x24, 0x00, 0xc3, 0x18, 0x18, - 0x00, 0x80, 0x68, 0xf9, 0x18, 0x09, 0x81, 0xce, - 0x99, 0x00, 0x68, 0xfa, 0x18, 0x10, 0x82, 0x01, - 0xe0, 0x01, 0x99, 0x00, 0x80, 0xf9, 0x1c, 0x68, - 0x04, 0x05, 0x0c, 0x2d, 0x98, 0x01, 0x42, 0x85, - 0xdb, 0xc8, 0x98, 0x04, 0x99, 0x02, 0xf0, 0x00, - 0xfb, 0xd3, 0x28, 0xff, 0xd1, 0x28, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x00, 0xfe, 0x0a, - 0x04, 0x00, 0x0c, 0x00, 0xf0, 0x00, 0xfd, 0x78, - 0x78, 0x38, 0x09, 0x00, 0xd3, 0x16, 0x20, 0x00, - 0x88, 0x79, 0x29, 0x00, 0xdd, 0x12, 0x00, 0xc2, - 0x18, 0x12, 0x00, 0x92, 0x68, 0xf9, 0x18, 0x89, - 0x89, 0xca, 0x89, 0x7b, 0x42, 0x9a, 0xd0, 0x03, - 0x7f, 0x0a, 0x23, 0x80, 0x43, 0x1a, 0x77, 0x0a, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x88, 0x79, - 0x42, 0x81, 0xdc, 0xec, 0x78, 0x38, 0x23, 0x01, - 0x43, 0x18, 0x70, 0x38, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x90, 0x7c, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0xf0, 0x04, 0x09, 0x0c, 0x09, 0x25, 0x00, - 0xb0, 0x88, 0xf7, 0xf3, 0xfe, 0xf1, 0x20, 0x08, - 0xf7, 0xf3, 0xff, 0x0a, 0x20, 0x04, 0xf7, 0xf3, - 0xff, 0x07, 0x20, 0x0c, 0xf7, 0xf3, 0xff, 0x04, - 0x04, 0x04, 0x0c, 0x24, 0x20, 0x10, 0xf7, 0xf3, - 0xfe, 0xff, 0x20, 0x02, 0xf7, 0xf3, 0xfe, 0xfc, - 0x20, 0x05, 0xf7, 0xf3, 0xfe, 0xf9, 0x06, 0x06, - 0x0e, 0x36, 0x20, 0x01, 0xf7, 0xf3, 0xfe, 0xf4, - 0x20, 0x08, 0xf7, 0xf3, 0xfe, 0xf1, 0x06, 0x07, - 0x0e, 0x3f, 0x20, 0x08, 0xf7, 0xf3, 0xfe, 0xec, - 0x06, 0x01, 0x0e, 0x09, 0x91, 0x04, 0x20, 0x10, - 0xf7, 0xf3, 0xfe, 0xe6, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0xe3, 0x49, 0x4c, 0x91, 0x07, 0x5d, 0xc8, - 0x0a, 0x01, 0xd3, 0x05, 0x06, 0xc0, 0x0e, 0xc0, - 0x42, 0xb0, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x88, - 0x20, 0x80, 0x43, 0x30, 0x99, 0x07, 0x55, 0xc8, - 0x4f, 0x45, 0x88, 0x78, 0x90, 0x00, 0x1f, 0xe0, - 0x38, 0x05, 0x90, 0x06, 0x28, 0x00, 0xdd, 0x68, - 0x48, 0x42, 0x90, 0x05, 0x20, 0x10, 0xf7, 0xf3, - 0xfe, 0xc7, 0x04, 0x06, 0x0c, 0x36, 0x20, 0x06, - 0xf7, 0xf3, 0xfe, 0xc2, 0x20, 0x06, 0xf7, 0xf3, - 0xfe, 0xbf, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x03, - 0x2e, 0x00, 0xd1, 0x11, 0x20, 0x0c, 0xf7, 0xf3, - 0xfe, 0xb7, 0x04, 0x06, 0x0c, 0x36, 0x24, 0x00, - 0x2e, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0xaf, 0x1c, 0x60, 0x04, 0x04, 0x0c, 0x24, - 0x42, 0xb4, 0xdb, 0xf7, 0x19, 0xa8, 0xe0, 0x3e, - 0x1c, 0x30, 0xf0, 0x00, 0xfb, 0x0f, 0x1c, 0x04, - 0x4b, 0x2f, 0x42, 0x98, 0xd1, 0x18, 0x88, 0xb8, - 0x88, 0x79, 0x42, 0x88, 0xd1, 0x05, 0xf7, 0xff, - 0xfd, 0xd1, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x00, - 0xe0, 0x47, 0x9c, 0x00, 0x00, 0xe1, 0x19, 0x09, - 0x00, 0x89, 0x68, 0xf8, 0x18, 0x40, 0x81, 0xc6, - 0x88, 0x78, 0x30, 0x01, 0x80, 0x78, 0x98, 0x00, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, - 0x98, 0x03, 0x00, 0xe2, 0x19, 0x12, 0x00, 0x92, - 0x68, 0xf9, 0x18, 0x89, 0x77, 0xc8, 0x20, 0x0c, - 0xf7, 0xf3, 0xfe, 0x7e, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x02, 0x26, 0x00, 0x28, 0x00, 0xdd, 0x0c, - 0x98, 0x05, 0xa9, 0x01, 0x1c, 0x22, 0xf0, 0x00, - 0xfb, 0x45, 0xa8, 0x01, 0x88, 0x00, 0x18, 0x30, - 0x04, 0x06, 0x0c, 0x36, 0x98, 0x02, 0x42, 0x86, - 0xdb, 0xf2, 0x98, 0x02, 0x18, 0x28, 0x30, 0x05, - 0x04, 0x05, 0x0c, 0x2d, 0x98, 0x06, 0x42, 0xa8, - 0xdc, 0x98, 0x98, 0x07, 0x99, 0x04, 0xf0, 0x00, - 0xfa, 0xe7, 0x28, 0xff, 0xd1, 0x82, 0x78, 0x38, - 0x23, 0x10, 0x43, 0x18, 0x70, 0x38, 0x78, 0x38, - 0x08, 0x81, 0xd3, 0x05, 0x09, 0x41, 0xd3, 0x03, - 0x09, 0x00, 0xd2, 0x01, 0xf0, 0x00, 0xfe, 0xd3, - 0x20, 0x10, 0xb0, 0x08, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x91, 0x7c, - 0x2e, 0x08, 0x8f, 0x80, 0x2e, 0x08, 0x82, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0xf0, 0x04, 0x09, 0x0c, 0x09, 0x22, 0x00, - 0xb0, 0x90, 0x92, 0x0c, 0x92, 0x02, 0x92, 0x01, - 0xf7, 0xf3, 0xfe, 0x1a, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0x33, 0x20, 0x04, 0xf7, 0xf3, 0xfe, 0x30, - 0x20, 0x0c, 0xf7, 0xf3, 0xfe, 0x2d, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x0d, 0x20, 0x10, 0xf7, 0xf3, - 0xfe, 0x27, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0a, - 0x20, 0x02, 0xf7, 0xf3, 0xfe, 0x21, 0x20, 0x05, - 0xf7, 0xf3, 0xfe, 0x1e, 0x06, 0x03, 0x0e, 0x1b, - 0x93, 0x05, 0x20, 0x01, 0xf7, 0xf3, 0xfe, 0x18, - 0x06, 0x02, 0x0e, 0x12, 0x92, 0x04, 0x20, 0x08, - 0xf7, 0xf3, 0xfe, 0x12, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0x0f, 0x20, 0x03, 0xf7, 0xf3, 0xfe, 0x0c, - 0x20, 0x0d, 0xf7, 0xf3, 0xfe, 0x09, 0x04, 0x07, - 0x0c, 0x3f, 0x20, 0x04, 0xf7, 0xf3, 0xfe, 0x04, - 0x20, 0x0c, 0xf7, 0xf3, 0xfe, 0x01, 0x04, 0x01, - 0x0c, 0x09, 0x91, 0x09, 0x98, 0x0a, 0xf0, 0x00, - 0xfd, 0x13, 0x1c, 0x04, 0xd1, 0x01, 0x43, 0xe0, - 0xe1, 0x27, 0x7f, 0x20, 0x0a, 0x00, 0xd3, 0x01, - 0x20, 0x00, 0xe1, 0x22, 0x84, 0x27, 0x25, 0x00, - 0x99, 0x09, 0x4e, 0x92, 0x1d, 0xf7, 0x37, 0xf9, - 0x29, 0x00, 0xdd, 0x2a, 0x98, 0x0a, 0xf0, 0x00, - 0xfa, 0x51, 0x1c, 0x02, 0x1c, 0x30, 0xa9, 0x06, - 0xf0, 0x00, 0xfa, 0xb4, 0x28, 0x09, 0xd1, 0x16, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x06, 0x20, 0xff, - 0x90, 0x01, 0x20, 0x01, 0x70, 0x38, 0x18, 0x28, - 0x04, 0x05, 0x0c, 0x2d, 0x20, 0xff, 0x90, 0x02, - 0x19, 0x78, 0xaa, 0x06, 0x88, 0x12, 0x1c, 0x31, - 0xf0, 0x10, 0xfd, 0x14, 0xa8, 0x06, 0x88, 0x00, - 0x18, 0x28, 0x04, 0x05, 0x0c, 0x2d, 0xa9, 0x06, - 0x88, 0x09, 0x98, 0x0c, 0x18, 0x40, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x0c, 0x99, 0x09, 0x42, 0x88, - 0xdb, 0xd4, 0x48, 0x7b, 0x90, 0x0f, 0x2d, 0x00, - 0xd0, 0x0d, 0x9a, 0x04, 0xb4, 0x04, 0x21, 0x03, - 0x98, 0x10, 0x9a, 0x0b, 0x9b, 0x06, 0xf0, 0x00, - 0xfd, 0xac, 0xb0, 0x01, 0x98, 0x0f, 0x1c, 0x39, - 0x1c, 0x2a, 0xf0, 0x00, 0xfd, 0xc8, 0x20, 0x00, - 0x90, 0x0b, 0x98, 0x0d, 0x99, 0x09, 0x1a, 0x40, - 0x38, 0x0d, 0x90, 0x0e, 0x28, 0x00, 0xdd, 0x75, - 0x20, 0x00, 0x90, 0x00, 0x25, 0x00, 0x20, 0x08, - 0xf7, 0xf3, 0xfd, 0x9e, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x03, 0x20, 0x03, 0xf7, 0xf3, 0xfd, 0x98, - 0x20, 0x0d, 0xf7, 0xf3, 0xfd, 0x95, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x07, 0x98, 0x03, 0x28, 0x07, - 0xd2, 0x12, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x0e, 0x04, 0x04, 0x07, - 0x07, 0x0e, 0x0c, 0x00, 0x98, 0x07, 0x82, 0x60, - 0xe0, 0x06, 0x99, 0x07, 0x1c, 0x20, 0xf0, 0x00, - 0xfd, 0x51, 0xe0, 0x01, 0x20, 0xff, 0x90, 0x00, - 0x20, 0x04, 0xf7, 0xf3, 0xfd, 0x79, 0x20, 0x0c, - 0xf7, 0xf3, 0xfd, 0x76, 0x04, 0x01, 0x0c, 0x09, - 0x91, 0x08, 0x20, 0x00, 0x90, 0x0c, 0x29, 0x00, - 0xdd, 0x1c, 0x98, 0x0a, 0xf0, 0x00, 0xf9, 0xd6, - 0x1c, 0x02, 0x1c, 0x30, 0xa9, 0x06, 0xf0, 0x00, - 0xfa, 0x39, 0x28, 0x09, 0xd0, 0x37, 0x28, 0x0a, - 0xd0, 0x44, 0x28, 0x56, 0xd1, 0x04, 0x98, 0x00, - 0x28, 0xff, 0xd1, 0x01, 0x98, 0x07, 0x83, 0x60, - 0xa9, 0x06, 0x88, 0x09, 0x98, 0x0c, 0x18, 0x40, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0c, 0x99, 0x08, - 0x42, 0x88, 0xdb, 0xe2, 0x98, 0x03, 0x70, 0x38, - 0x98, 0x07, 0x12, 0x00, 0x70, 0x78, 0x98, 0x07, - 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, 0x71, 0x38, - 0x20, 0x01, 0x71, 0x78, 0x2d, 0x00, 0xd0, 0x40, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x0a, 0x20, 0xff, - 0x90, 0x02, 0x9a, 0x04, 0xb4, 0x04, 0x21, 0x03, - 0x98, 0x10, 0x9a, 0x0b, 0x9b, 0x06, 0xf0, 0x00, - 0xfd, 0x30, 0xb0, 0x01, 0x1f, 0x68, 0x12, 0x01, - 0x70, 0xf9, 0x71, 0x38, 0x98, 0x0f, 0x1c, 0x39, - 0x1c, 0x2a, 0xe0, 0x3e, 0xe0, 0x4b, 0x2d, 0x00, - 0xd1, 0x00, 0x25, 0x06, 0x19, 0x78, 0xaa, 0x06, - 0x88, 0x12, 0x1c, 0x31, 0xf0, 0x10, 0xfc, 0x6a, - 0xa8, 0x06, 0x88, 0x00, 0x18, 0x28, 0x04, 0x05, - 0x0c, 0x2d, 0xe7, 0xc1, 0x98, 0x03, 0x28, 0x04, - 0xd0, 0x02, 0x98, 0x03, 0x28, 0x03, 0xd1, 0xbb, - 0x69, 0x60, 0x28, 0x00, 0xd0, 0x09, 0x8b, 0x21, - 0x00, 0xc9, 0x18, 0x40, 0x78, 0xb1, 0x38, 0x06, - 0x70, 0x81, 0x78, 0x71, 0x70, 0x41, 0x78, 0x31, - 0x70, 0x01, 0x22, 0x00, 0x8b, 0x21, 0x00, 0xc9, - 0x69, 0x60, 0x18, 0x40, 0x38, 0x20, 0x77, 0x42, - 0xe7, 0xa6, 0x98, 0x01, 0x28, 0xff, 0xd1, 0x12, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x0a, 0x20, 0xff, - 0x90, 0x02, 0x9a, 0x04, 0xb4, 0x04, 0x21, 0x03, - 0x98, 0x10, 0x9a, 0x0b, 0x9b, 0x06, 0xf0, 0x00, - 0xfc, 0xec, 0xb0, 0x01, 0x22, 0x05, 0x98, 0x0f, - 0x1c, 0x39, 0xf0, 0x00, 0xfd, 0x24, 0x98, 0x0b, - 0x99, 0x08, 0x18, 0x40, 0x30, 0x06, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x0b, 0x98, 0x0e, 0x99, 0x0b, - 0x42, 0x88, 0xdd, 0x00, 0xe7, 0x3c, 0x7f, 0x20, - 0x23, 0x80, 0x43, 0x18, 0x77, 0x20, 0x9a, 0x04, - 0x07, 0xd0, 0x0e, 0x80, 0x9b, 0x05, 0x18, 0xc0, - 0x77, 0x60, 0x98, 0x02, 0x28, 0xff, 0xd1, 0x03, - 0x99, 0x0f, 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0x20, - 0x20, 0x01, 0xb0, 0x10, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x83, 0x80, - 0x2e, 0x08, 0x85, 0x80, 0xb5, 0xf0, 0x04, 0x09, - 0x0c, 0x09, 0x22, 0x00, 0xb0, 0x88, 0x92, 0x05, - 0xf7, 0xf3, 0xfc, 0xa2, 0x20, 0x08, 0xf7, 0xf3, - 0xfc, 0xbb, 0x20, 0x04, 0xf7, 0xf3, 0xfc, 0xb8, - 0x20, 0x0c, 0xf7, 0xf3, 0xfc, 0xb5, 0x04, 0x05, - 0x0c, 0x2d, 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0xb0, - 0x04, 0x07, 0x0c, 0x3f, 0x20, 0x02, 0xf7, 0xf3, - 0xfc, 0xab, 0x20, 0x05, 0xf7, 0xf3, 0xfc, 0xa8, - 0x20, 0x01, 0xf7, 0xf3, 0xfc, 0xa5, 0x06, 0x04, - 0x0e, 0x24, 0x20, 0x08, 0xf7, 0xf3, 0xfc, 0xa0, - 0x06, 0x06, 0x0e, 0x36, 0x20, 0x08, 0xf7, 0xf3, - 0xfc, 0x9b, 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0x98, - 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0x95, 0x20, 0x08, - 0xf7, 0xf3, 0xfc, 0x92, 0x20, 0x08, 0xf7, 0xf3, - 0xfc, 0x8f, 0x2c, 0x00, 0xd0, 0x65, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xf4, 0x90, 0x03, 0x4b, 0x44, - 0x42, 0x98, 0xd0, 0x5e, 0x48, 0x43, 0x89, 0x41, - 0x42, 0xb9, 0xd1, 0x5b, 0x68, 0xc0, 0x9a, 0x03, - 0x00, 0xd1, 0x18, 0x89, 0x00, 0x89, 0x18, 0x40, - 0x7f, 0x80, 0x4c, 0x3f, 0x1d, 0xe7, 0x37, 0x39, - 0x28, 0x04, 0xd0, 0x0b, 0x28, 0x05, 0xd0, 0x09, - 0x2e, 0x00, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x04, - 0x2e, 0x01, 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x02, 0x72, 0xb8, 0x2d, 0x0f, 0xdd, 0x61, - 0x1f, 0xe8, 0x38, 0x08, 0x90, 0x07, 0x28, 0x00, - 0xdd, 0x5c, 0x48, 0x34, 0x90, 0x06, 0x20, 0x10, - 0xf7, 0xf3, 0xfc, 0x5e, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x04, 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0x58, - 0x20, 0x18, 0xf7, 0xf3, 0xfc, 0x55, 0x90, 0x01, - 0x20, 0x18, 0xf7, 0xf3, 0xfc, 0x51, 0x90, 0x00, - 0x20, 0x03, 0xf7, 0xf3, 0xfc, 0x4d, 0x20, 0x01, - 0xf7, 0xf3, 0xfc, 0x4a, 0x20, 0x0c, 0xf7, 0xf3, - 0xfc, 0x47, 0x04, 0x05, 0x0c, 0x2d, 0x98, 0x05, - 0x19, 0x40, 0x30, 0x0c, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x05, 0x7a, 0xb8, 0x00, 0xc1, 0x1a, 0x09, - 0x00, 0x89, 0x19, 0x09, 0x69, 0x8a, 0x9b, 0x04, - 0x42, 0x9a, 0xd0, 0x2b, 0x26, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x28, 0x01, 0xd1, 0x0b, 0x98, 0x01, - 0x60, 0xc8, 0x7a, 0xb9, 0x00, 0xcb, 0x1a, 0x59, - 0x00, 0x89, 0x19, 0x09, 0x98, 0x00, 0x61, 0x08, - 0xe0, 0x05, 0xe0, 0x1f, 0xe0, 0x1e, 0x98, 0x01, - 0x63, 0xe0, 0x98, 0x00, 0x64, 0x20, 0x2d, 0x00, - 0xdd, 0x14, 0x98, 0x06, 0x9a, 0x03, 0xa9, 0x02, - 0xf0, 0x00, 0xf8, 0xec, 0x28, 0x4d, 0xd1, 0x06, - 0x7a, 0xb9, 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, - 0x19, 0x09, 0x98, 0x04, 0x61, 0x48, 0xa8, 0x02, - 0x88, 0x00, 0x18, 0x30, 0x04, 0x06, 0x0c, 0x36, - 0x42, 0xae, 0xdb, 0xea, 0x98, 0x07, 0x99, 0x05, - 0x42, 0x88, 0xdc, 0xa4, 0x20, 0x00, 0xb0, 0x08, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x90, 0x30, 0x2e, 0x08, 0x89, 0x98, - 0xb5, 0x80, 0x04, 0x09, 0x0c, 0x09, 0xf7, 0xf3, - 0xfb, 0xd7, 0x20, 0x08, 0xf7, 0xf3, 0xfb, 0xf0, - 0x20, 0x04, 0xf7, 0xf3, 0xfb, 0xed, 0x20, 0x0c, - 0xf7, 0xf3, 0xfb, 0xea, 0x20, 0x10, 0xf7, 0xf3, - 0xfb, 0xe7, 0x4f, 0x07, 0x60, 0xf8, 0x20, 0x18, - 0xf7, 0xf3, 0xfb, 0xe2, 0x60, 0xb8, 0x48, 0x05, - 0x78, 0x01, 0x23, 0x20, 0x43, 0x19, 0x70, 0x01, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xcc, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xb0, 0x04, 0x09, 0x0c, 0x09, 0xb0, 0x81, - 0xf7, 0xf3, 0xfb, 0xb2, 0x20, 0x08, 0xf7, 0xf3, - 0xfb, 0xcb, 0x20, 0x04, 0xf7, 0xf3, 0xfb, 0xc8, - 0x20, 0x0c, 0xf7, 0xf3, 0xfb, 0xc5, 0x20, 0x10, - 0xf7, 0xf3, 0xfb, 0xc2, 0x04, 0x00, 0x0c, 0x00, - 0x4f, 0x11, 0x60, 0xf8, 0x20, 0x18, 0xf7, 0xf3, - 0xfb, 0xbb, 0x60, 0xb8, 0x20, 0x04, 0xf7, 0xf3, - 0xfb, 0xb7, 0x20, 0x0c, 0xf7, 0xf3, 0xfb, 0xb4, - 0x04, 0x04, 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, - 0xdd, 0x0c, 0x4d, 0x0a, 0x46, 0x69, 0x1c, 0x28, - 0x4a, 0x09, 0xf0, 0x00, 0xf8, 0x7b, 0xa8, 0x00, - 0x88, 0x00, 0x18, 0x38, 0x04, 0x07, 0x0c, 0x3f, - 0x42, 0xa7, 0xdb, 0xf3, 0x20, 0x00, 0xb0, 0x01, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0xcc, 0x2e, 0x08, 0x8a, 0x98, - 0x00, 0x00, 0xff, 0xff, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x0a, 0x88, 0x49, - 0x29, 0x00, 0xdd, 0x0d, 0x4b, 0x08, 0x68, 0xdf, - 0x00, 0xc3, 0x18, 0x1b, 0x00, 0x9b, 0x18, 0xfb, - 0x89, 0xdb, 0x42, 0x93, 0xd0, 0x05, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0x42, 0x81, 0xdc, 0xf3, - 0x48, 0x02, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x80, 0x00, 0x00, 0xff, 0xff, - 0xb4, 0x80, 0x06, 0x0a, 0x0e, 0x12, 0x21, 0x00, - 0x32, 0x01, 0x2a, 0x00, 0xdd, 0x0a, 0x5c, 0x47, - 0x0a, 0x3b, 0xd2, 0x02, 0x20, 0x00, 0xbc, 0x80, - 0x47, 0x70, 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, - 0x42, 0x8a, 0xdc, 0xf4, 0x20, 0xff, 0xbc, 0x80, - 0x47, 0x70, 0xb4, 0x90, 0x04, 0x02, 0x0c, 0x12, - 0x04, 0x0f, 0x0c, 0x3f, 0x42, 0xba, 0xda, 0x29, - 0x20, 0x00, 0x49, 0x15, 0x00, 0xd3, 0x18, 0x9b, - 0x00, 0x9b, 0x68, 0xcc, 0x18, 0xe4, 0x81, 0xe0, - 0x68, 0xcc, 0x18, 0xe4, 0x77, 0x20, 0x68, 0xcc, - 0x18, 0xe4, 0x60, 0x60, 0x68, 0xcc, 0x50, 0xe0, - 0x68, 0xcc, 0x18, 0xe4, 0x82, 0x20, 0x68, 0xcc, - 0x18, 0xe4, 0x60, 0xa0, 0x68, 0xcc, 0x18, 0xe4, - 0x81, 0xa0, 0x68, 0xcc, 0x18, 0xe4, 0x61, 0x60, - 0x68, 0xcc, 0x18, 0xe4, 0x83, 0x20, 0x68, 0xcc, - 0x18, 0xe4, 0x83, 0x60, 0x68, 0xcc, 0x18, 0xe3, - 0x82, 0x58, 0x32, 0x01, 0x04, 0x12, 0x0c, 0x12, - 0x42, 0xba, 0xdb, 0xd7, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0xf0, 0x04, 0x15, - 0x0c, 0x2d, 0x1c, 0x07, 0x20, 0x08, 0x1c, 0x0c, - 0xf7, 0xf3, 0xfb, 0x26, 0x06, 0x06, 0x0e, 0x36, - 0x20, 0x08, 0xf7, 0xf3, 0xfb, 0x21, 0x06, 0x01, - 0x0e, 0x09, 0x1c, 0x88, 0x80, 0x20, 0x2e, 0x48, - 0xd0, 0x42, 0xdc, 0x0c, 0x1e, 0xb0, 0x28, 0x09, - 0xd2, 0x61, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x25, 0x2c, 0x5e, 0x5e, - 0x5e, 0x5e, 0x33, 0x1e, 0x4f, 0x00, 0x2e, 0x56, - 0xd0, 0x4e, 0xdc, 0x0a, 0x2e, 0x4d, 0xd0, 0x36, - 0x2e, 0x4e, 0xd1, 0x51, 0x1c, 0x38, 0x1c, 0x2a, - 0xf0, 0x00, 0xfd, 0x4c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2e, 0x58, 0xd0, 0x32, 0x2e, 0x5d, - 0xd1, 0x46, 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, - 0xfc, 0x11, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfb, 0xbc, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0x1c, 0x2a, 0xf0, 0x00, 0xfb, 0xcd, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, - 0xf0, 0x00, 0xfb, 0xd8, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, - 0xfb, 0xe3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfc, 0x00, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0x1c, 0x2a, 0xf0, 0x00, 0xfc, 0x71, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, - 0xf0, 0x00, 0xfd, 0x6c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, - 0xfd, 0x97, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfd, 0xb4, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfd, 0xbe, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0x22, 0x01, 0x20, 0x00, 0xb0, 0x88, 0x4f, 0x35, - 0x88, 0x79, 0x25, 0x00, 0x29, 0x00, 0xdd, 0x35, - 0x00, 0xc4, 0x18, 0x24, 0x00, 0xa4, 0x68, 0xf9, - 0x19, 0x09, 0x7f, 0x0e, 0x0a, 0x33, 0xd2, 0x1d, - 0x09, 0xf3, 0xd2, 0x1b, 0x8a, 0x0b, 0x2b, 0x00, - 0xd0, 0x18, 0x00, 0xc3, 0x18, 0x18, 0x00, 0x80, - 0x68, 0xfa, 0x18, 0x10, 0x8a, 0x02, 0x89, 0xc9, - 0x4b, 0x29, 0x20, 0x02, 0xf0, 0x00, 0xf8, 0x52, - 0x21, 0x00, 0x43, 0xc9, 0x42, 0x88, 0xd1, 0x01, - 0x1c, 0x08, 0xe0, 0x42, 0x68, 0xf8, 0x19, 0x00, - 0x7f, 0x01, 0x23, 0x40, 0x43, 0x19, 0x77, 0x01, - 0x1c, 0x28, 0xe0, 0x3a, 0x8a, 0x0b, 0x2b, 0x00, - 0xd1, 0x02, 0x23, 0xa0, 0x43, 0x33, 0x77, 0x0b, - 0x68, 0xf9, 0x19, 0x09, 0x7f, 0x09, 0x0a, 0x09, - 0xd2, 0x00, 0x22, 0x00, 0x88, 0x79, 0x30, 0x01, - 0x42, 0x81, 0xdc, 0xc9, 0x2a, 0x00, 0xd1, 0x01, - 0x20, 0x02, 0xe0, 0x26, 0x78, 0x38, 0x08, 0x81, - 0xd2, 0x22, 0x23, 0x02, 0x43, 0x18, 0x70, 0x38, - 0x78, 0x38, 0x09, 0x00, 0xd3, 0x02, 0x89, 0x78, - 0xf7, 0xfe, 0xfd, 0x1d, 0x20, 0x0c, 0xab, 0x00, - 0x70, 0x18, 0x88, 0x78, 0x0a, 0x01, 0x70, 0x59, - 0x70, 0x98, 0x46, 0x68, 0x21, 0x20, 0xf7, 0xfd, - 0xf9, 0xa7, 0x78, 0x38, 0x08, 0x81, 0xd3, 0x05, - 0x09, 0x41, 0xd3, 0x03, 0x09, 0x00, 0xd2, 0x01, - 0xf0, 0x00, 0xfa, 0xcd, 0x22, 0x14, 0x21, 0x00, - 0x20, 0x70, 0x1c, 0x2b, 0xf0, 0x00, 0xf8, 0x0a, - 0x20, 0x01, 0xb0, 0x08, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x00, 0x00, 0x13, 0x88, 0xb5, 0xf0, 0x06, 0x04, - 0x0e, 0x24, 0x04, 0x08, 0x0c, 0x00, 0xb0, 0x83, - 0x90, 0x00, 0x04, 0x10, 0x0c, 0x00, 0x90, 0x01, - 0x04, 0x1e, 0x0c, 0x36, 0xb0, 0x89, 0x98, 0x0a, - 0xf0, 0x00, 0xf9, 0x28, 0x90, 0x00, 0x23, 0x01, - 0x42, 0xd8, 0xd1, 0x00, 0xe0, 0x55, 0x98, 0x00, - 0x01, 0x01, 0x91, 0x0b, 0x4f, 0x2b, 0x19, 0xc8, - 0x70, 0x44, 0x9a, 0x09, 0x80, 0x42, 0x5c, 0x7a, - 0x23, 0x01, 0x43, 0x1a, 0x54, 0x7a, 0x99, 0x0a, - 0x80, 0xc1, 0x1c, 0x05, 0x60, 0x86, 0x20, 0x00, - 0x21, 0x00, 0x00, 0x42, 0xab, 0x01, 0x52, 0x99, - 0x30, 0x01, 0x04, 0x00, 0x14, 0x00, 0x28, 0x10, - 0xdb, 0xf6, 0x02, 0x20, 0x23, 0xff, 0x43, 0x18, - 0xab, 0x01, 0x80, 0x18, 0x2c, 0x02, 0xd0, 0x01, - 0x2c, 0x4e, 0xd1, 0x10, 0x20, 0xff, 0x02, 0x00, - 0x9a, 0x09, 0x40, 0x10, 0x23, 0xff, 0x43, 0x18, - 0xab, 0x01, 0x80, 0x58, 0x9a, 0x09, 0x02, 0x10, - 0x23, 0xff, 0x02, 0x1b, 0x40, 0x18, 0x23, 0xff, - 0x43, 0x18, 0xab, 0x02, 0x80, 0x18, 0x21, 0x04, - 0x98, 0x0a, 0xaa, 0x01, 0xf7, 0xf7, 0xfe, 0x98, - 0x04, 0x01, 0x0c, 0x09, 0x81, 0xa9, 0x20, 0x00, - 0x43, 0xc0, 0x42, 0x81, 0xd1, 0x07, 0x21, 0x00, - 0x9a, 0x0b, 0x54, 0xb9, 0x21, 0xff, 0x70, 0x69, - 0x0c, 0x01, 0x81, 0xa9, 0xe0, 0x0d, 0x99, 0x0b, - 0x5c, 0x78, 0x23, 0x02, 0x43, 0x18, 0x54, 0x78, - 0x2e, 0x00, 0xd0, 0x05, 0x22, 0x02, 0x99, 0x00, - 0x1c, 0x30, 0xf7, 0xfe, 0xfb, 0xe0, 0x80, 0xa8, - 0x20, 0x00, 0xb0, 0x0c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x90, - 0xb5, 0xf0, 0x04, 0x00, 0x14, 0x00, 0x01, 0x05, - 0x4c, 0x10, 0x5d, 0x60, 0x26, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x19, 0x2f, 0x89, 0xb8, 0xf7, 0xf7, - 0xff, 0xe3, 0x22, 0x00, 0x43, 0xd2, 0x21, 0xff, - 0x42, 0x90, 0xd1, 0x07, 0x55, 0x66, 0x70, 0x79, - 0x0c, 0x00, 0x81, 0xb8, 0x1c, 0x10, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x55, 0x66, 0x70, 0x79, - 0x1c, 0x30, 0x49, 0x03, 0x81, 0xb9, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x90, - 0x00, 0x00, 0xff, 0xff, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0xb5, 0xb0, 0x04, 0x0d, - 0x0c, 0x2d, 0x1c, 0x07, 0xb0, 0x84, 0xf0, 0x00, - 0xf8, 0x2d, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x01, - 0x20, 0x01, 0xe0, 0x15, 0x1c, 0x28, 0xf7, 0xfd, - 0xf9, 0xb1, 0x1c, 0x04, 0xd0, 0x0f, 0x1c, 0x20, - 0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x10, 0xf8, 0xca, - 0x20, 0x06, 0xab, 0x00, 0x80, 0x18, 0x70, 0x9d, - 0x94, 0x01, 0x46, 0x69, 0x20, 0x85, 0xf7, 0xfd, - 0xf8, 0xeb, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x02, - 0xb0, 0x04, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x0a, 0xdd, 0x01, - 0x20, 0xff, 0x47, 0x70, 0x01, 0x00, 0x49, 0x02, - 0x18, 0x40, 0x78, 0x40, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x90, 0xb4, 0x90, 0x21, 0x00, - 0x4b, 0x13, 0x01, 0x0a, 0x5c, 0x9f, 0x2f, 0x00, - 0xd0, 0x18, 0x18, 0xd7, 0x78, 0x7c, 0x78, 0x02, - 0x42, 0x94, 0xd1, 0x13, 0x2a, 0x00, 0xd0, 0x0e, - 0x2a, 0x42, 0xd0, 0x0c, 0x2a, 0x70, 0xd0, 0x0a, - 0x2a, 0x73, 0xd0, 0x08, 0x79, 0x02, 0x78, 0xc4, - 0x02, 0x24, 0x19, 0x12, 0x04, 0x12, 0x0c, 0x12, - 0x88, 0x7f, 0x42, 0x97, 0xd1, 0x02, 0x1c, 0x08, - 0xbc, 0x90, 0x47, 0x70, 0x31, 0x01, 0x04, 0x09, - 0x14, 0x09, 0x29, 0x0a, 0xd1, 0xdd, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x90, 0xb4, 0xb0, 0x06, 0x03, - 0x0e, 0x1b, 0x04, 0x0f, 0x0c, 0x3f, 0x06, 0x14, - 0x0e, 0x24, 0x20, 0x00, 0x4a, 0x09, 0x01, 0x01, - 0x18, 0x89, 0x78, 0x4d, 0x42, 0x9d, 0xd1, 0x04, - 0x2c, 0x00, 0xd0, 0x09, 0x88, 0x49, 0x42, 0xb9, - 0xd0, 0x06, 0x30, 0x01, 0x04, 0x00, 0x14, 0x00, - 0x28, 0x0a, 0xd1, 0xf0, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xb0, 0x47, 0x70, 0x2e, 0x08, 0x8f, 0x90, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x09, 0x01, 0x03, 0x5c, 0xcf, 0x2f, 0x00, - 0xd0, 0x06, 0x18, 0x5b, 0x89, 0x9b, 0x42, 0x93, - 0xd1, 0x02, 0x20, 0xff, 0xbc, 0x80, 0x47, 0x70, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x28, 0x0a, - 0xdb, 0xef, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x8f, 0x90, 0x48, 0x0a, 0x21, 0x00, - 0x4a, 0x0a, 0x01, 0x0b, 0x5c, 0xd3, 0x2b, 0x00, - 0xd1, 0x00, 0x1c, 0x08, 0x31, 0x01, 0x04, 0x09, - 0x0c, 0x09, 0x29, 0x0a, 0xdb, 0xf5, 0x4b, 0x04, - 0x42, 0x98, 0xd0, 0x02, 0x04, 0x00, 0x14, 0x00, - 0x47, 0x70, 0x20, 0x00, 0x43, 0xc0, 0x47, 0x70, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x8f, 0x90, - 0xb4, 0x80, 0x04, 0x07, 0x0c, 0x3f, 0x20, 0x00, - 0x49, 0x0b, 0x88, 0x4a, 0x2a, 0x00, 0xdd, 0x10, - 0x68, 0xc9, 0x00, 0xc3, 0x18, 0x1b, 0x00, 0x9b, - 0x18, 0xcb, 0x89, 0xdb, 0x42, 0xbb, 0xd1, 0x05, - 0x00, 0xc3, 0x18, 0x18, 0x00, 0x80, 0x18, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0x30, 0x01, 0x42, 0x82, - 0xdc, 0xef, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0x90, 0x06, 0x03, - 0x0e, 0x1b, 0x06, 0x0c, 0x0e, 0x24, 0x06, 0x00, - 0x0e, 0x00, 0x01, 0x02, 0x48, 0x16, 0x18, 0x11, - 0x27, 0x00, 0x2c, 0x0a, 0xd0, 0x0c, 0x2c, 0x0b, - 0xd1, 0x06, 0x2b, 0x0a, 0xda, 0x04, 0x54, 0x87, - 0x20, 0xff, 0x70, 0x48, 0x48, 0x11, 0x81, 0x88, - 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2b, 0x0a, 0xda, 0xf9, 0x5c, 0x84, 0x23, 0x02, - 0x43, 0x23, 0x54, 0x83, 0x78, 0x48, 0x28, 0x00, - 0xd0, 0x0b, 0x28, 0x02, 0xd1, 0xf0, 0x88, 0x48, - 0xf7, 0xff, 0xff, 0xba, 0x28, 0x00, 0xd0, 0xeb, - 0x7f, 0x01, 0x23, 0x10, 0x43, 0x19, 0x77, 0x01, - 0xe7, 0xe6, 0x48, 0x05, 0x78, 0x01, 0x23, 0x40, - 0x43, 0x19, 0x70, 0x01, 0xe7, 0xe0, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x90, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0x90, 0x04, 0x07, - 0x14, 0x3f, 0x2f, 0x0a, 0xda, 0x25, 0x2f, 0x00, - 0xdb, 0x23, 0x01, 0x38, 0x49, 0x17, 0x18, 0x44, - 0x78, 0x60, 0x28, 0x02, 0xd1, 0x0d, 0x88, 0x60, - 0xf7, 0xff, 0xff, 0x96, 0x28, 0x00, 0xd0, 0x08, - 0x7f, 0x01, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x19, - 0x77, 0x01, 0x7f, 0x01, 0x23, 0xa0, 0x43, 0x19, - 0x77, 0x01, 0x78, 0x60, 0x28, 0x42, 0xd1, 0x09, - 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0xa5, 0x4b, 0x0c, - 0x22, 0x11, 0x21, 0x00, 0x20, 0x42, 0xf7, 0xff, - 0xfe, 0x2d, 0xe0, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xfe, 0x9b, 0xf7, 0xff, 0xfd, 0xb4, 0x28, 0x00, - 0xd1, 0x03, 0xf7, 0xff, 0xfd, 0xb0, 0x28, 0x00, - 0xd0, 0xfb, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x90, - 0x00, 0x00, 0x27, 0x10, 0xb5, 0xb0, 0x04, 0x05, - 0x0c, 0x2d, 0x24, 0x00, 0x27, 0x00, 0x48, 0x0e, - 0x21, 0x07, 0xf7, 0xfe, 0xff, 0x4b, 0x1c, 0x28, - 0xf7, 0xff, 0xff, 0x5e, 0x28, 0x00, 0xd0, 0x0e, - 0x8a, 0x41, 0x29, 0x00, 0xd0, 0x00, 0x1c, 0x0f, - 0x69, 0x40, 0x28, 0x00, 0xd0, 0x03, 0x88, 0x00, - 0x42, 0x88, 0xd0, 0x00, 0x1c, 0x04, 0x42, 0xbc, - 0xd0, 0x01, 0xf7, 0xf2, 0xf9, 0x27, 0x20, 0x00, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x90, 0x30, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x1c, 0x07, 0x69, 0x40, 0x28, 0x00, - 0xd0, 0x06, 0x8b, 0x39, 0x1c, 0x4a, 0x00, 0xd2, - 0x00, 0xc9, 0xf7, 0xfd, 0xf8, 0x4c, 0xe0, 0x02, - 0x20, 0x08, 0xf7, 0xfd, 0xf8, 0x43, 0x61, 0x78, - 0x69, 0x78, 0x28, 0x00, 0xd0, 0x0e, 0x8b, 0x39, - 0x31, 0x01, 0x83, 0x39, 0x8b, 0x39, 0x00, 0xc9, - 0x18, 0x40, 0x38, 0x40, 0x87, 0x04, 0x21, 0x00, - 0x8b, 0x3a, 0x00, 0xd2, 0x69, 0x78, 0x18, 0x80, - 0x38, 0x20, 0x76, 0x81, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0xb4, 0xb0, 0x06, 0x09, 0x0e, 0x09, - 0x04, 0x12, 0x0c, 0x12, 0x06, 0x1b, 0x0e, 0x1b, - 0x9f, 0x03, 0x06, 0x3c, 0x0e, 0x24, 0x27, 0x9f, - 0x70, 0x07, 0x27, 0x80, 0x70, 0x47, 0x27, 0x32, - 0x70, 0x87, 0x27, 0x82, 0x70, 0xc7, 0x27, 0x00, - 0x71, 0x07, 0x25, 0x06, 0x71, 0x45, 0x71, 0x81, - 0x0a, 0x11, 0x71, 0xc1, 0x72, 0x02, 0x08, 0x59, - 0x43, 0x21, 0x72, 0x41, 0x72, 0x87, 0x72, 0xc7, - 0x1c, 0x38, 0xbc, 0xb0, 0x47, 0x70, 0xb5, 0xb0, - 0x04, 0x14, 0x0c, 0x24, 0x1c, 0x07, 0x79, 0x00, - 0x02, 0x00, 0x79, 0x7a, 0x43, 0x10, 0x04, 0x05, - 0x0c, 0x2d, 0x1d, 0xf8, 0x30, 0x05, 0x1c, 0x22, - 0xf0, 0x0f, 0xff, 0x1c, 0x19, 0x28, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x39, 0x71, 0x78, - 0x0a, 0x20, 0x72, 0xb8, 0x72, 0xfc, 0x20, 0x00, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xb0, - 0x04, 0x15, 0x0c, 0x2d, 0x1c, 0x07, 0x79, 0x00, - 0x02, 0x00, 0x79, 0x7a, 0x43, 0x10, 0x04, 0x04, - 0x0c, 0x24, 0x19, 0x38, 0x30, 0x06, 0x1c, 0x2a, - 0xf0, 0x0f, 0xff, 0x00, 0x19, 0x60, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x39, 0x71, 0x78, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf3, 0x79, 0x08, 0x02, 0x00, 0x1c, 0x0f, - 0x79, 0x49, 0x43, 0x08, 0x04, 0x00, 0x0c, 0x00, - 0x25, 0x9f, 0x23, 0x80, 0x22, 0x32, 0x28, 0x80, - 0xda, 0x04, 0x24, 0x04, 0x70, 0xbd, 0x70, 0xfb, - 0x71, 0x3a, 0xe0, 0x07, 0x28, 0xff, 0xda, 0x07, - 0x24, 0x05, 0x70, 0x7d, 0x70, 0xbb, 0x70, 0xfa, - 0x21, 0x81, 0x71, 0x39, 0x71, 0x78, 0xe0, 0x00, - 0x24, 0x06, 0x19, 0x00, 0x1c, 0x06, 0xf7, 0xfc, - 0xff, 0xb5, 0x1c, 0x05, 0xd0, 0x0a, 0x20, 0x06, - 0x1b, 0x00, 0x19, 0xc1, 0x1c, 0x28, 0x1c, 0x32, - 0xf0, 0x0f, 0xfe, 0xcc, 0x98, 0x00, 0x60, 0x85, - 0x98, 0x00, 0x81, 0x86, 0x20, 0x00, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x47, 0x70, - 0xb5, 0xf0, 0x06, 0x12, 0x0e, 0x12, 0xb0, 0x81, - 0x92, 0x00, 0x25, 0x00, 0x1c, 0x04, 0x1c, 0x0f, - 0x28, 0x00, 0xd0, 0x01, 0x2f, 0x00, 0xd1, 0x01, - 0x20, 0x00, 0xe0, 0x34, 0x26, 0x00, 0x1c, 0x20, - 0xf0, 0x0f, 0xff, 0x20, 0x28, 0x00, 0xd9, 0x2a, - 0x5d, 0xa0, 0x28, 0x80, 0xdb, 0x03, 0x28, 0x9f, - 0xdc, 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0xff, - 0x9a, 0x00, 0x2a, 0x00, 0xd0, 0x0f, 0x28, 0x87, - 0xd1, 0x01, 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, - 0x2a, 0x00, 0xd0, 0x10, 0x29, 0x00, 0xd0, 0x0e, - 0x1c, 0x69, 0x04, 0x0a, 0x0c, 0x12, 0x1c, 0x29, - 0x54, 0x78, 0x1c, 0x15, 0xe0, 0x07, 0x29, 0x00, - 0xd0, 0x05, 0x1c, 0x69, 0x04, 0x09, 0x0c, 0x09, - 0x1c, 0x2a, 0x54, 0xb8, 0x1c, 0x0d, 0x1c, 0x70, - 0x04, 0x06, 0x0c, 0x36, 0x1c, 0x20, 0xf0, 0x0f, - 0xfe, 0xf5, 0x42, 0xb0, 0xd8, 0xd4, 0x20, 0x00, - 0x55, 0x78, 0x04, 0x28, 0x14, 0x00, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0xb5, 0xf0, 0x04, 0x0d, 0x0c, 0x2d, 0x26, 0x09, - 0x70, 0x06, 0x1c, 0x07, 0x70, 0x7d, 0x24, 0x00, - 0x2d, 0x00, 0xdd, 0x09, 0x20, 0x08, 0xf7, 0xf2, - 0xff, 0x27, 0x19, 0x39, 0x70, 0x88, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0x42, 0xac, 0xdb, 0xf5, - 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x27, 0x00, - 0x2c, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf2, - 0xff, 0x13, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xa7, 0xdb, 0xf7, 0x20, 0x02, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, 0xdd, 0x07, - 0x20, 0x08, 0xf7, 0xf2, 0xff, 0x01, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x42, 0xa7, 0xdb, 0xf7, - 0x20, 0x03, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x27, 0x00, - 0x2c, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf2, - 0xfe, 0xef, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xa7, 0xdb, 0xf7, 0x20, 0x08, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, 0xdd, 0x07, - 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0xdd, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x42, 0xa7, 0xdb, 0xf7, - 0x20, 0x5d, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x04, 0x14, 0x0c, 0x24, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0xce, 0x4f, 0x37, 0x00, 0xe3, - 0x19, 0x1c, 0x00, 0xa4, 0x68, 0xf9, 0x19, 0x09, - 0x77, 0x88, 0x20, 0x08, 0x1c, 0x26, 0xf7, 0xf2, - 0xfe, 0xc3, 0x06, 0x05, 0x0e, 0x2d, 0x68, 0xf8, - 0x19, 0x80, 0x68, 0x40, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xfc, 0xff, 0x06, 0x1c, 0x68, 0xf7, 0xfc, - 0xfe, 0xdd, 0x68, 0xf9, 0x19, 0x09, 0x60, 0x48, - 0x28, 0x00, 0xd1, 0x0b, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x1c, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0xac, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0x42, 0xae, - 0xdb, 0xf7, 0xe0, 0x13, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x0b, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0xa0, - 0x68, 0xf9, 0x19, 0x09, 0x68, 0x49, 0x55, 0x88, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0x42, 0xae, - 0xdb, 0xf3, 0x21, 0x00, 0x68, 0xf8, 0x19, 0x00, - 0x68, 0x40, 0x55, 0x81, 0x20, 0x08, 0xf7, 0xf2, - 0xfe, 0x8f, 0x06, 0x05, 0x0e, 0x2d, 0x68, 0xf8, - 0x59, 0x00, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xfc, - 0xfe, 0xd3, 0x1c, 0x68, 0xf7, 0xfc, 0xfe, 0xaa, - 0x68, 0xf9, 0x51, 0x08, 0x28, 0x00, 0xd1, 0x0b, - 0x27, 0x00, 0x2d, 0x00, 0xdd, 0x1a, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0x7a, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0x42, 0xaf, 0xdb, 0xf7, 0xe0, 0x11, - 0x26, 0x00, 0x2d, 0x00, 0xdd, 0x0a, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0x6e, 0x68, 0xf9, 0x59, 0x09, - 0x55, 0x88, 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, - 0x42, 0xae, 0xdb, 0xf4, 0x21, 0x00, 0x68, 0xf8, - 0x59, 0x00, 0x55, 0x81, 0x20, 0x48, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xf0, 0x04, 0x0d, 0x0c, 0x2d, 0x20, 0x18, - 0xf7, 0xf2, 0xfe, 0x56, 0x4f, 0x4e, 0x1d, 0xfc, - 0x34, 0x39, 0x7a, 0xa0, 0x28, 0x00, 0xd0, 0x0e, - 0x28, 0x01, 0xd0, 0x0c, 0x27, 0x00, 0x1e, 0xec, - 0x2c, 0x00, 0xdd, 0x68, 0x20, 0x08, 0xf7, 0xf2, - 0xfe, 0x47, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xbc, 0xdc, 0xf7, 0xe0, 0x84, 0x28, 0x00, - 0xd1, 0x01, 0x21, 0x02, 0xe0, 0x00, 0x21, 0x01, - 0x1c, 0x38, 0xf7, 0xfe, 0xfd, 0x3b, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0x36, 0x06, 0x05, 0x0e, 0x2d, - 0x1c, 0x68, 0xf7, 0xfc, 0xfe, 0x57, 0x7a, 0xa1, - 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, 0x50, 0x78, - 0x28, 0x00, 0xd1, 0x0b, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x29, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0x24, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0x42, 0xae, - 0xdb, 0xf7, 0xe0, 0x20, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x0d, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0x18, - 0x7a, 0xa1, 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, - 0x58, 0x79, 0x55, 0x88, 0x1c, 0x70, 0x06, 0x06, - 0x0e, 0x36, 0x42, 0xae, 0xdb, 0xf1, 0x20, 0x00, - 0x7a, 0xa1, 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, - 0x58, 0x79, 0x55, 0x88, 0x7a, 0xa0, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x58, 0x39, 0x22, 0x00, - 0x1c, 0x08, 0xf7, 0xff, 0xfe, 0x81, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0xfa, 0x06, 0x06, 0x0e, 0x36, - 0x1c, 0x70, 0xf7, 0xfc, 0xfe, 0x1b, 0x7a, 0xa1, - 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, 0x19, 0xc9, - 0x60, 0x48, 0x28, 0x00, 0xd1, 0x0c, 0x27, 0x00, - 0x2e, 0x00, 0xdd, 0x08, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0xe7, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xb7, 0xdb, 0xf7, 0xe0, 0x24, 0xe0, 0x23, - 0x25, 0x00, 0x2e, 0x00, 0xdd, 0x0e, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0xda, 0x7a, 0xa1, 0x00, 0xcb, - 0x1a, 0x59, 0x00, 0x89, 0x19, 0xc9, 0x68, 0x49, - 0x55, 0x48, 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, - 0x42, 0xb5, 0xdb, 0xf0, 0x20, 0x00, 0x7a, 0xa1, - 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, 0x19, 0xc9, - 0x68, 0x49, 0x55, 0x48, 0x7a, 0xa0, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x19, 0xc0, 0x68, 0x41, - 0x22, 0x00, 0x1c, 0x08, 0xf7, 0xff, 0xfe, 0x40, - 0x20, 0x4d, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x90, 0x30, 0xb5, 0xf0, 0x1c, 0x07, - 0x20, 0x04, 0xb0, 0x81, 0xf7, 0xf2, 0xfd, 0xb0, - 0x20, 0x04, 0xf7, 0xf2, 0xfd, 0xad, 0x20, 0x18, - 0xf7, 0xf2, 0xfd, 0xaa, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0xa7, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, - 0x26, 0x00, 0x28, 0x00, 0xdd, 0x2e, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0x9e, 0x04, 0x05, 0x0c, 0x2d, - 0x24, 0x00, 0x2d, 0x00, 0xdd, 0x08, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0x96, 0x55, 0x38, 0x1c, 0x60, - 0x04, 0x04, 0x0c, 0x24, 0x42, 0xac, 0xdb, 0xf6, - 0x20, 0x20, 0x55, 0x78, 0x19, 0x70, 0x06, 0x06, - 0x0e, 0x36, 0x20, 0x08, 0xf7, 0xf2, 0xfd, 0x88, - 0x04, 0x04, 0x0c, 0x24, 0x25, 0x00, 0x2c, 0x00, - 0xdd, 0x08, 0x20, 0x08, 0xf7, 0xf2, 0xfd, 0x80, - 0x55, 0x78, 0x1c, 0x68, 0x04, 0x05, 0x0c, 0x2d, - 0x42, 0xa5, 0xdb, 0xf6, 0x20, 0x00, 0x55, 0x38, - 0x19, 0x30, 0x06, 0x06, 0x0e, 0x36, 0x98, 0x00, - 0x42, 0x86, 0xdb, 0xd0, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x6f, 0x04, 0x05, 0x0c, 0x2d, 0x24, 0x00, - 0x2d, 0x00, 0xdd, 0x08, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x67, 0x55, 0x38, 0x1c, 0x60, 0x06, 0x04, - 0x0e, 0x24, 0x42, 0xac, 0xdb, 0xf6, 0x20, 0x00, - 0x55, 0x78, 0x20, 0x4e, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x04, 0x0c, - 0x0c, 0x24, 0x26, 0x00, 0x2c, 0x00, 0xdd, 0x24, - 0x4d, 0x14, 0x20, 0x18, 0xf7, 0xf2, 0xfd, 0x50, - 0x68, 0x29, 0x42, 0x88, 0xd1, 0x12, 0x20, 0x06, - 0xf7, 0xf2, 0xfd, 0x4a, 0x20, 0x01, 0xf7, 0xf2, - 0xfd, 0x47, 0x20, 0x01, 0xf7, 0xf2, 0xfd, 0x44, - 0x20, 0x10, 0xf7, 0xf2, 0xfd, 0x41, 0x20, 0x28, - 0xf7, 0xf2, 0xfd, 0x3e, 0x20, 0x10, 0xf7, 0xf2, - 0xfd, 0x3b, 0xe0, 0x08, 0x27, 0x00, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0x36, 0x1c, 0x78, 0x04, 0x07, - 0x0c, 0x3f, 0x2f, 0x0a, 0xdb, 0xf7, 0x42, 0xa6, - 0xdb, 0xdb, 0x20, 0x58, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xd0, - 0xb5, 0xb0, 0x1c, 0x07, 0x04, 0x08, 0x0c, 0x00, - 0x24, 0x00, 0x08, 0x85, 0x2d, 0x00, 0xdd, 0x17, - 0x2c, 0x00, 0xd1, 0x0d, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x1b, 0x70, 0x38, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x17, 0x70, 0x78, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x13, 0x70, 0xb8, 0x20, 0x08, 0xe0, 0x00, - 0x20, 0x20, 0xf7, 0xf2, 0xfd, 0x0d, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0x42, 0xa5, 0xdc, 0xe7, - 0x20, 0x0a, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x27, 0x00, - 0x2c, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf2, - 0xfc, 0xfb, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xa7, 0xdb, 0xf7, 0x20, 0x56, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, 0xdd, 0x07, - 0x20, 0x08, 0xf7, 0xf2, 0xfc, 0xe9, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x42, 0xa7, 0xdb, 0xf7, - 0x20, 0xff, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf7, 0x06, 0x0e, 0x0e, 0x36, 0xb0, 0x83, - 0xf0, 0x0c, 0xfc, 0x22, 0x1c, 0x05, 0xd0, 0x05, - 0x00, 0xa8, 0x30, 0x0c, 0xf7, 0xf7, 0xf8, 0x5c, - 0x1c, 0x04, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x22, - 0x95, 0x01, 0x1d, 0xe0, 0x30, 0x05, 0x90, 0x02, - 0x46, 0x6a, 0xb4, 0x04, 0x25, 0x00, 0x98, 0x04, - 0x1c, 0x31, 0xaa, 0x02, 0x1c, 0x2b, 0x1c, 0x27, - 0xf0, 0x0c, 0xf9, 0xc8, 0xb0, 0x01, 0x98, 0x00, - 0x60, 0x38, 0x28, 0x00, 0xd0, 0x0b, 0x99, 0x05, - 0xf0, 0x0c, 0xfb, 0x9e, 0x28, 0x00, 0xd1, 0x02, - 0x60, 0x7d, 0x1c, 0x38, 0xe0, 0x07, 0x68, 0x38, - 0xa9, 0x01, 0xf0, 0x0c, 0xf9, 0xe7, 0x1c, 0x20, - 0xf7, 0xf7, 0xf8, 0x58, 0x1c, 0x28, 0xb0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xff, 0x9c, 0x0b, 0x9d, 0x09, 0x9e, 0x0a, - 0xb0, 0x8c, 0x4a, 0x78, 0x92, 0x0b, 0x49, 0x78, - 0x91, 0x0a, 0x2c, 0x00, 0xd1, 0x0b, 0x20, 0x00, - 0x00, 0x81, 0x9a, 0x0b, 0x58, 0x51, 0x29, 0x00, - 0xd1, 0x01, 0x1c, 0x04, 0xe0, 0x19, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf5, 0xe0, 0x15, 0x2c, 0x08, - 0xd8, 0x07, 0x3c, 0x01, 0x00, 0xa0, 0x9a, 0x0b, - 0x58, 0x10, 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x00, - 0xe0, 0xcf, 0x23, 0x20, 0x99, 0x0a, 0x5e, 0xcc, - 0x1c, 0x60, 0x84, 0x08, 0x99, 0x0a, 0x5e, 0xc8, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0x64, 0x99, 0x0a, - 0x84, 0x08, 0x2e, 0x00, 0xd0, 0x03, 0x2e, 0x01, - 0xd1, 0x03, 0x22, 0x01, 0xe0, 0x02, 0x22, 0x00, - 0xe0, 0x00, 0x22, 0x03, 0x92, 0x01, 0x1c, 0x28, - 0xf0, 0x08, 0xfd, 0xd3, 0x90, 0x00, 0x00, 0x80, - 0x30, 0x80, 0xf7, 0xf6, 0xff, 0xf1, 0x1c, 0x07, - 0xd0, 0xdd, 0x98, 0x00, 0x1d, 0xc2, 0x32, 0x79, - 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, 0xfc, 0x9e, - 0x98, 0x00, 0x60, 0xf8, 0x1d, 0xf8, 0x30, 0x79, - 0x61, 0x38, 0x98, 0x0e, 0x86, 0x78, 0x98, 0x0f, - 0x86, 0xb8, 0x98, 0x0c, 0x90, 0x02, 0x99, 0x0d, - 0x91, 0x03, 0x9a, 0x0e, 0x18, 0x80, 0x38, 0x01, - 0x90, 0x04, 0x98, 0x0f, 0x18, 0x08, 0x38, 0x01, - 0x90, 0x05, 0xa8, 0x02, 0x1c, 0x29, 0xf0, 0x08, - 0xfd, 0xb3, 0x61, 0x78, 0x9a, 0x01, 0x2a, 0x00, - 0xd0, 0x0e, 0x2a, 0x01, 0xd1, 0x1e, 0x00, 0x80, - 0xf7, 0xf6, 0xff, 0xc6, 0x61, 0xb8, 0x28, 0x00, - 0xd0, 0x04, 0x69, 0x79, 0x00, 0x8a, 0x21, 0x00, - 0xf0, 0x0f, 0xfc, 0x74, 0x20, 0x01, 0xe0, 0x0b, - 0x00, 0x80, 0xf7, 0xf7, 0xf8, 0x01, 0x61, 0xb8, - 0x28, 0x00, 0xd0, 0x04, 0x69, 0x79, 0x00, 0x8a, - 0x21, 0x00, 0xf0, 0x0f, 0xfc, 0x67, 0x20, 0x00, - 0x86, 0x38, 0x23, 0x01, 0x03, 0xdb, 0x69, 0xf8, - 0x43, 0x18, 0xe0, 0x0d, 0x61, 0xbe, 0x0e, 0x36, - 0x06, 0x36, 0x23, 0x0d, 0x06, 0x9b, 0x42, 0xde, - 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x01, - 0x86, 0x38, 0x69, 0xf8, 0x4b, 0x33, 0x40, 0x18, - 0x61, 0xf8, 0x69, 0xb8, 0x28, 0x00, 0xd1, 0x06, - 0x69, 0x78, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, - 0xf7, 0xf6, 0xff, 0xb4, 0xe7, 0x7f, 0x68, 0xf8, - 0x90, 0x06, 0x69, 0x38, 0x90, 0x07, 0x69, 0x78, - 0x90, 0x08, 0x69, 0xb8, 0x90, 0x09, 0xa8, 0x02, - 0x1c, 0x21, 0x1d, 0xfa, 0x32, 0x01, 0xb4, 0x07, - 0x1c, 0x2a, 0xb4, 0x04, 0x20, 0x00, 0x9a, 0x05, - 0xa9, 0x0a, 0xab, 0x0c, 0xf0, 0x03, 0xf8, 0x8a, - 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x5f, 0xe7, 0x63, 0x2d, 0x00, - 0xd0, 0x09, 0x2d, 0x01, 0xd0, 0x07, 0x2d, 0x02, - 0xd0, 0x05, 0x2d, 0x03, 0xd0, 0x03, 0x23, 0x02, - 0x69, 0xf8, 0x43, 0x18, 0x61, 0xf8, 0x85, 0xfc, - 0x2c, 0x08, 0xd2, 0x02, 0x00, 0xa0, 0x9a, 0x0b, - 0x50, 0x17, 0x20, 0x01, 0x24, 0x00, 0x63, 0xf8, - 0x63, 0xbc, 0x85, 0xbd, 0x21, 0x01, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x0c, 0x99, 0x0a, 0x8c, 0x88, - 0x06, 0x01, 0x0e, 0x09, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0xbe, 0x22, 0x00, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x93, 0x98, 0x18, 0x60, 0x38, - 0x98, 0x18, 0x28, 0x00, 0xd0, 0x06, 0x22, 0x00, - 0x21, 0x03, 0x1c, 0x23, 0x9c, 0x18, 0x1c, 0x38, - 0xf0, 0x0f, 0xfa, 0xaa, 0x68, 0xb8, 0x60, 0x78, - 0x1c, 0x38, 0xb0, 0x0c, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0xdc, - 0x2e, 0x08, 0x1a, 0xdc, 0xff, 0xff, 0x7f, 0xff, - 0xb5, 0x80, 0x1c, 0x07, 0xb0, 0x82, 0x28, 0x00, - 0xd0, 0x13, 0x68, 0x78, 0x28, 0x00, 0xd1, 0x10, - 0x68, 0xb8, 0x90, 0x00, 0x1d, 0xf8, 0x30, 0x05, - 0x90, 0x01, 0x46, 0x69, 0x68, 0x38, 0xf0, 0x0c, - 0xf8, 0xd1, 0x22, 0x0c, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x0f, 0xfb, 0xd4, 0x1c, 0x38, 0xf7, 0xf6, - 0xff, 0x3d, 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0xb0, 0x84, - 0x28, 0x00, 0xd1, 0x03, 0xb0, 0x04, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x23, 0x00, - 0x49, 0x1d, 0x00, 0x82, 0x58, 0x8c, 0x42, 0xbc, - 0xd1, 0x00, 0x50, 0x8b, 0x30, 0x01, 0x28, 0x08, - 0xdb, 0xf7, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0xbc, 0x68, 0xf8, 0x90, 0x00, 0x69, 0x38, - 0x90, 0x01, 0x69, 0x78, 0x90, 0x02, 0x69, 0xb8, - 0x90, 0x03, 0x46, 0x68, 0x1d, 0xc2, 0x32, 0x01, - 0x46, 0x69, 0x68, 0xb8, 0xf0, 0x03, 0xfb, 0x0e, - 0x6a, 0x38, 0x28, 0x00, 0xd0, 0x03, 0x68, 0x41, - 0x39, 0x01, 0x60, 0x41, 0x30, 0x04, 0x69, 0xf8, - 0x0c, 0x00, 0xd3, 0x0c, 0x23, 0x30, 0x5e, 0xf8, - 0x28, 0x00, 0xd1, 0x03, 0x69, 0xb8, 0xf7, 0xf6, - 0xff, 0x31, 0xe0, 0x04, 0x28, 0x01, 0xd1, 0x02, - 0x69, 0xb8, 0xf7, 0xf6, 0xfe, 0xfb, 0x22, 0x80, - 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, 0xfb, 0x8a, - 0x1c, 0x38, 0xf7, 0xf6, 0xfe, 0xf3, 0xe7, 0xbd, - 0x2e, 0x08, 0x1a, 0xdc, 0x28, 0x00, 0xd0, 0x08, - 0x28, 0x01, 0xd0, 0x08, 0x28, 0x02, 0xd0, 0x08, - 0x28, 0x03, 0xd1, 0x08, 0x20, 0xff, 0x30, 0x01, - 0x47, 0x70, 0x20, 0x02, 0x47, 0x70, 0x20, 0x04, - 0x47, 0x70, 0x20, 0x10, 0x47, 0x70, 0x20, 0x00, - 0x47, 0x70, 0xb5, 0x90, 0x1c, 0x07, 0x06, 0x08, - 0x0e, 0x00, 0x06, 0x14, 0x0e, 0x24, 0x28, 0x00, - 0xd0, 0x0a, 0x21, 0x03, 0x68, 0xb8, 0xf0, 0x04, - 0xfc, 0x15, 0x68, 0xb8, 0x1c, 0x21, 0xf0, 0x04, - 0xfc, 0xbd, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x68, 0xb8, 0xf0, 0x04, 0xfc, 0x0a, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0x06, 0x09, 0xd0, 0x02, 0x68, 0x80, 0x21, 0x02, - 0xe0, 0x01, 0x68, 0x80, 0x21, 0x00, 0xf0, 0x04, - 0xfb, 0xfd, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0x06, 0x09, 0x0e, 0x09, 0x28, 0x00, 0xd0, 0x02, - 0x68, 0x80, 0xf0, 0x04, 0xfe, 0x03, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xb0, 0x23, 0x05, 0x43, 0x18, - 0x4d, 0x08, 0x84, 0xa8, 0x27, 0x00, 0x4c, 0x08, - 0x00, 0xb8, 0x58, 0x20, 0x8c, 0xa9, 0x06, 0x09, - 0x0e, 0x09, 0xf7, 0xff, 0xff, 0xe8, 0x37, 0x01, - 0x2f, 0x08, 0xdb, 0xf5, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xdc, - 0x2e, 0x08, 0x1a, 0xdc, 0x48, 0x01, 0x23, 0x24, - 0x5e, 0xc0, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0xdc, - 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x28, 0x00, - 0xd0, 0x15, 0x6a, 0x20, 0x28, 0x00, 0xd0, 0x06, - 0x42, 0xb8, 0xd0, 0x10, 0x68, 0x41, 0x39, 0x01, - 0x60, 0x41, 0x20, 0x00, 0x62, 0x20, 0x2f, 0x00, - 0xd0, 0x09, 0x68, 0xa0, 0x68, 0x39, 0xf0, 0x0c, - 0xf8, 0x0f, 0x28, 0x00, 0xd1, 0x03, 0x62, 0x27, - 0x68, 0x78, 0x30, 0x01, 0x60, 0x78, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x06, 0x09, - 0xd0, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, - 0x68, 0x80, 0xf0, 0x04, 0xfd, 0x03, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0x1c, 0x0c, - 0xd0, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, - 0x68, 0xb8, 0xf0, 0x04, 0xf8, 0x9b, 0x2c, 0x00, - 0xd0, 0x03, 0x23, 0x01, 0x69, 0xf8, 0x43, 0x18, - 0xe0, 0x02, 0x69, 0xf8, 0x08, 0x40, 0x00, 0x40, - 0x61, 0xf8, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0x21, 0x07, 0x07, 0x09, 0x63, 0x88, - 0x47, 0x70, 0x00, 0x00, 0xb5, 0x90, 0x9c, 0x03, - 0x9f, 0x04, 0xb0, 0x85, 0x91, 0x00, 0x92, 0x01, - 0x93, 0x02, 0x94, 0x03, 0x97, 0x04, 0x68, 0x80, - 0x46, 0x69, 0xf0, 0x0a, 0xff, 0x5f, 0xb0, 0x05, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, - 0xb0, 0x86, 0x98, 0x06, 0x6a, 0x40, 0x68, 0xc3, - 0x93, 0x05, 0x98, 0x06, 0x6b, 0xc0, 0x01, 0x80, - 0x06, 0x05, 0x0e, 0x2d, 0x95, 0x00, 0x68, 0x18, - 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, 0x01, 0x40, - 0x08, 0xc0, 0x90, 0x04, 0x99, 0x07, 0x68, 0x48, - 0x99, 0x04, 0x43, 0x48, 0x99, 0x07, 0x68, 0x09, - 0x08, 0xc9, 0x18, 0x0f, 0x97, 0x03, 0x21, 0x00, - 0x91, 0x02, 0x9b, 0x05, 0x68, 0x58, 0x28, 0x00, - 0xdd, 0x5e, 0x23, 0x32, 0x98, 0x06, 0x5e, 0xc0, - 0x9b, 0x09, 0x43, 0x58, 0x9a, 0x08, 0x18, 0x81, - 0x1c, 0x08, 0xd5, 0x00, 0x30, 0x03, 0x10, 0x80, - 0x29, 0x00, 0xda, 0x04, 0x42, 0x49, 0x07, 0x89, - 0x0f, 0x89, 0x42, 0x49, 0xe0, 0x01, 0x07, 0x89, - 0x0f, 0x89, 0x00, 0x4a, 0x9d, 0x00, 0x41, 0x15, - 0x1c, 0x2b, 0x06, 0x2d, 0x0e, 0x2d, 0x27, 0xc0, - 0x40, 0xd7, 0x06, 0x3a, 0x0e, 0x12, 0x9b, 0x06, - 0x69, 0x9b, 0x18, 0x18, 0x9b, 0x05, 0x9f, 0x03, - 0x19, 0xdb, 0x33, 0x88, 0x78, 0x1f, 0x33, 0x01, - 0x93, 0x01, 0x24, 0x00, 0x9b, 0x07, 0x68, 0x9b, - 0x2b, 0x00, 0xd9, 0x23, 0x0a, 0x3b, 0xd3, 0x05, - 0x78, 0x03, 0x43, 0x93, 0x70, 0x03, 0x78, 0x03, - 0x43, 0x2b, 0x70, 0x03, 0x31, 0x01, 0x29, 0x03, - 0xdd, 0x04, 0x22, 0xc0, 0x21, 0x00, 0x9d, 0x00, - 0x30, 0x01, 0xe0, 0x05, 0x10, 0x92, 0x06, 0x12, - 0x0e, 0x12, 0x10, 0xab, 0x06, 0x1d, 0x0e, 0x2d, - 0x00, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, 0x34, 0x01, - 0x07, 0x63, 0xd1, 0x03, 0x9b, 0x01, 0x78, 0x1f, - 0x33, 0x01, 0x93, 0x01, 0x9b, 0x07, 0x68, 0x9b, - 0x42, 0xa3, 0xd8, 0xdb, 0x98, 0x04, 0x9f, 0x03, - 0x18, 0x3f, 0x97, 0x03, 0x9b, 0x09, 0x33, 0x01, - 0x93, 0x09, 0x99, 0x02, 0x31, 0x01, 0x91, 0x02, - 0x9b, 0x05, 0x68, 0x58, 0x42, 0x88, 0xdc, 0xa0, - 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xff, 0xb0, 0x86, 0x98, 0x06, - 0x6a, 0x40, 0x68, 0xc3, 0x93, 0x05, 0x98, 0x06, - 0x6b, 0xc0, 0x07, 0x06, 0x0f, 0x36, 0x96, 0x00, - 0x01, 0x30, 0x06, 0x06, 0x0e, 0x36, 0x96, 0x01, - 0x68, 0x18, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, - 0x01, 0x40, 0x08, 0xc0, 0x90, 0x04, 0x68, 0x48, - 0x9a, 0x04, 0x43, 0x50, 0x68, 0x0a, 0x08, 0xd2, - 0x18, 0x17, 0x97, 0x03, 0x22, 0x00, 0x92, 0x02, - 0x9b, 0x05, 0x68, 0x58, 0x28, 0x00, 0xdd, 0x48, - 0x23, 0x32, 0x98, 0x06, 0x5e, 0xc0, 0x9b, 0x09, - 0x43, 0x58, 0x9a, 0x08, 0x18, 0x82, 0x1c, 0x10, - 0xd5, 0x00, 0x30, 0x01, 0x10, 0x40, 0x9b, 0x06, - 0x69, 0x9b, 0x18, 0x18, 0x9b, 0x05, 0x9f, 0x03, - 0x19, 0xdb, 0x1d, 0xdd, 0x35, 0x81, 0x78, 0x2f, - 0x24, 0x00, 0x68, 0x8b, 0x35, 0x01, 0x2b, 0x00, - 0xd9, 0x21, 0x0a, 0x3b, 0xd3, 0x10, 0x08, 0x53, - 0xd3, 0x06, 0x78, 0x06, 0x23, 0xf0, 0x40, 0x33, - 0x70, 0x03, 0x78, 0x03, 0x9e, 0x00, 0xe0, 0x05, - 0x78, 0x03, 0x07, 0x1b, 0x0f, 0x1b, 0x70, 0x03, - 0x78, 0x03, 0x9e, 0x01, 0x43, 0x33, 0x70, 0x03, - 0x32, 0x01, 0x08, 0x53, 0xd2, 0x00, 0x30, 0x01, - 0x00, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, 0x34, 0x01, - 0x07, 0x63, 0xd1, 0x01, 0x78, 0x2f, 0x35, 0x01, - 0x68, 0x8b, 0x42, 0xa3, 0xd8, 0xdd, 0x98, 0x04, - 0x9f, 0x03, 0x18, 0x3f, 0x97, 0x03, 0x9b, 0x09, - 0x33, 0x01, 0x93, 0x09, 0x9a, 0x02, 0x32, 0x01, - 0x92, 0x02, 0x9b, 0x05, 0x68, 0x58, 0x42, 0x90, - 0xdc, 0xb6, 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0xb0, 0x83, - 0x98, 0x03, 0x6a, 0x40, 0x68, 0xc4, 0x98, 0x03, - 0x6b, 0xc0, 0x06, 0x03, 0x0e, 0x1b, 0x93, 0x00, - 0x68, 0x20, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, - 0x01, 0x40, 0x08, 0xc2, 0x92, 0x02, 0x68, 0x48, - 0x43, 0x50, 0x68, 0x0a, 0x08, 0xd2, 0x18, 0x10, - 0x90, 0x01, 0x25, 0x00, 0x68, 0x60, 0x28, 0x00, - 0xdd, 0x35, 0x23, 0x32, 0x98, 0x03, 0x5e, 0xc0, - 0x9b, 0x06, 0x43, 0x58, 0x9a, 0x05, 0x18, 0x80, - 0x9a, 0x03, 0x69, 0x92, 0x18, 0x17, 0x98, 0x01, - 0x18, 0x20, 0x1d, 0xc6, 0x36, 0x81, 0x78, 0x32, - 0x20, 0x00, 0x68, 0x8b, 0x36, 0x01, 0x2b, 0x00, - 0xd9, 0x16, 0x0a, 0x13, 0xd3, 0x01, 0x9b, 0x00, - 0x70, 0x3b, 0x00, 0x52, 0x06, 0x12, 0x0e, 0x12, - 0xd1, 0x09, 0x1d, 0xc2, 0x32, 0x01, 0x08, 0xd2, - 0x00, 0xd2, 0x1a, 0x10, 0x19, 0xc7, 0x1c, 0x10, - 0x78, 0x32, 0x36, 0x01, 0xe0, 0x01, 0x30, 0x01, - 0x37, 0x01, 0x68, 0x8b, 0x42, 0x83, 0xd8, 0xe8, - 0x98, 0x01, 0x9a, 0x02, 0x18, 0x80, 0x90, 0x01, - 0x9b, 0x06, 0x33, 0x01, 0x93, 0x06, 0x68, 0x60, - 0x35, 0x01, 0x42, 0xa8, 0xdc, 0xc9, 0xb0, 0x03, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xff, 0x23, 0x2c, 0x1c, 0x07, 0x5e, 0xc0, - 0xb0, 0x85, 0x28, 0x01, 0xd0, 0x0f, 0x28, 0x02, - 0xd0, 0x07, 0x28, 0x03, 0xd1, 0x11, 0xab, 0x06, - 0xcb, 0x0e, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x9a, - 0xe0, 0x5d, 0xab, 0x06, 0xcb, 0x0e, 0x1c, 0x38, - 0xf7, 0xff, 0xff, 0x23, 0xe0, 0x57, 0xab, 0x06, - 0xcb, 0x0e, 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0x97, - 0xe0, 0x51, 0x6a, 0x78, 0x68, 0xc0, 0x90, 0x04, - 0x68, 0x00, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, - 0x01, 0x40, 0x08, 0xc0, 0x90, 0x03, 0x99, 0x06, - 0x68, 0x48, 0x99, 0x03, 0x43, 0x48, 0x99, 0x06, - 0x68, 0x09, 0x08, 0xc9, 0x18, 0x09, 0x91, 0x02, - 0x21, 0x00, 0x91, 0x01, 0x98, 0x04, 0x68, 0x40, - 0x28, 0x00, 0xdd, 0x38, 0x98, 0x04, 0x99, 0x02, - 0x9e, 0x07, 0x18, 0x40, 0x30, 0x88, 0x78, 0x05, - 0x30, 0x01, 0x90, 0x00, 0x24, 0x00, 0x99, 0x06, - 0x68, 0x88, 0x28, 0x00, 0xd9, 0x1d, 0x0a, 0x28, - 0xd3, 0x05, 0x68, 0xb8, 0x6b, 0xfb, 0x9a, 0x08, - 0x1c, 0x31, 0xf0, 0x0a, 0xfb, 0x7d, 0x00, 0x68, - 0x06, 0x05, 0x0e, 0x2d, 0xd1, 0x0b, 0x1d, 0xe0, - 0x30, 0x01, 0x08, 0xc0, 0x00, 0xc0, 0x1b, 0x01, - 0x19, 0x8e, 0x1c, 0x04, 0x98, 0x00, 0x78, 0x05, - 0x30, 0x01, 0x90, 0x00, 0xe0, 0x01, 0x34, 0x01, - 0x36, 0x01, 0x99, 0x06, 0x68, 0x88, 0x42, 0xa0, - 0xd8, 0xe1, 0x98, 0x03, 0x99, 0x02, 0x18, 0x09, - 0x91, 0x02, 0x9a, 0x08, 0x32, 0x01, 0x92, 0x08, - 0x99, 0x01, 0x31, 0x01, 0x91, 0x01, 0x98, 0x04, - 0x68, 0x40, 0x42, 0x88, 0xdc, 0xc6, 0xb0, 0x05, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x1c, 0x07, 0x20, 0x00, 0xb0, 0x88, - 0xf0, 0x08, 0xfa, 0x2b, 0x90, 0x06, 0x00, 0x80, - 0x30, 0x10, 0x00, 0x80, 0xf7, 0xf6, 0xfc, 0x48, - 0x1c, 0x04, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x03, - 0xb0, 0x08, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1d, 0xe1, 0x31, 0x09, 0x91, 0x07, 0x49, 0x19, - 0x68, 0x4b, 0x1c, 0x5a, 0x60, 0x4a, 0x60, 0x63, - 0x60, 0xe7, 0x68, 0x39, 0x01, 0x09, 0x31, 0x1f, - 0x09, 0x49, 0x01, 0x49, 0x90, 0x00, 0x90, 0x01, - 0x1e, 0x48, 0x90, 0x02, 0x68, 0xe0, 0x68, 0x40, - 0x00, 0xc0, 0x38, 0x01, 0x90, 0x03, 0x46, 0x68, - 0x21, 0x00, 0xf0, 0x08, 0xfa, 0x09, 0x60, 0xa0, - 0x68, 0xe0, 0x30, 0x88, 0x90, 0x05, 0x68, 0xa0, - 0x90, 0x04, 0x46, 0x68, 0x1c, 0x22, 0x68, 0x61, - 0xb4, 0x07, 0x22, 0x00, 0xb4, 0x04, 0x22, 0x01, - 0x20, 0x00, 0xa9, 0x0a, 0xab, 0x08, 0xf0, 0x02, - 0xfd, 0x21, 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x03, - 0x1c, 0x20, 0xf7, 0xf6, 0xfc, 0x2f, 0x24, 0x00, - 0x1c, 0x20, 0xe7, 0xc5, 0x2e, 0x08, 0x1b, 0x04, - 0xb5, 0x80, 0x1c, 0x07, 0xb0, 0x84, 0x28, 0x00, - 0xd0, 0x1a, 0x20, 0x00, 0xf0, 0x08, 0xf9, 0xdd, - 0x90, 0x00, 0x1d, 0xf8, 0x30, 0x09, 0x90, 0x01, - 0x68, 0xb8, 0x90, 0x02, 0x68, 0xf8, 0x30, 0x88, - 0x90, 0x03, 0x46, 0x68, 0x46, 0x69, 0x1d, 0xc2, - 0x32, 0x01, 0x68, 0x38, 0xf0, 0x03, 0xf8, 0x0e, - 0x22, 0x10, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, - 0xf8, 0xa1, 0x1c, 0x38, 0xf7, 0xf6, 0xfc, 0x0a, - 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xff, 0x23, 0x32, 0x1c, 0x07, 0x5e, 0xc0, - 0x1c, 0x0c, 0x1c, 0x15, 0xb0, 0x8a, 0x42, 0x90, - 0xdd, 0x63, 0x6a, 0x78, 0x28, 0x00, 0xd1, 0x0b, - 0x4e, 0x38, 0x68, 0x30, 0x28, 0x00, 0xd1, 0x05, - 0x48, 0x37, 0xf7, 0xff, 0xff, 0x7d, 0x60, 0x30, - 0x28, 0x00, 0xd0, 0x61, 0x68, 0x30, 0x62, 0x78, - 0x23, 0x01, 0x6b, 0xb8, 0x6a, 0x79, 0x42, 0xd8, - 0xd1, 0x01, 0x22, 0x01, 0xe0, 0x00, 0x22, 0x00, - 0x92, 0x01, 0x68, 0xc8, 0x90, 0x00, 0x68, 0x00, - 0x90, 0x04, 0x98, 0x00, 0x68, 0x40, 0x90, 0x03, - 0x6b, 0xf8, 0x28, 0x01, 0xd1, 0x01, 0x90, 0x02, - 0xe0, 0x11, 0x20, 0x00, 0x90, 0x02, 0x9a, 0x01, - 0x2a, 0x00, 0xd1, 0x0c, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x57, 0x6b, 0xba, 0x99, 0x03, 0xb4, 0x06, - 0x1c, 0x03, 0x9a, 0x0f, 0x1c, 0x38, 0x1c, 0x29, - 0xf7, 0xff, 0xfd, 0x80, 0xb0, 0x02, 0x99, 0x03, - 0x91, 0x08, 0x20, 0x01, 0x90, 0x09, 0x78, 0x20, - 0x28, 0x00, 0xd0, 0x31, 0x23, 0x32, 0x5e, 0xf8, - 0x42, 0xa8, 0xdd, 0x22, 0x78, 0x20, 0x99, 0x00, - 0xf0, 0x00, 0xf8, 0x34, 0x90, 0x07, 0x1c, 0x06, - 0x78, 0x20, 0x07, 0x00, 0x0f, 0x00, 0x99, 0x04, - 0x43, 0x48, 0x90, 0x05, 0x78, 0x20, 0x09, 0x00, - 0x07, 0x40, 0x0f, 0x40, 0x99, 0x03, 0x43, 0x48, - 0x90, 0x06, 0x98, 0x02, 0x34, 0x01, 0x28, 0x00, - 0xd0, 0x0c, 0x99, 0x0d, 0x9a, 0x01, 0xb4, 0x06, - 0x6a, 0x78, 0x68, 0xb9, 0x68, 0x00, 0xaa, 0x07, - 0x1c, 0x2b, 0xf0, 0x0a, 0xfd, 0x81, 0xb0, 0x02, - 0xe0, 0x06, 0xe0, 0x09, 0x9b, 0x0d, 0x1c, 0x38, - 0xa9, 0x05, 0x1c, 0x2a, 0xf7, 0xff, 0xfe, 0xa8, - 0x19, 0xad, 0x78, 0x20, 0x28, 0x00, 0xd1, 0xcd, - 0xb0, 0x0a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1b, 0x04, - 0x2e, 0x03, 0x45, 0xb8, 0x29, 0x00, 0xd1, 0x00, - 0x49, 0x02, 0x06, 0x40, 0x0e, 0x40, 0x18, 0x40, - 0x7a, 0x00, 0x47, 0x70, 0x2e, 0x03, 0x45, 0xb8, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0xd1, 0x08, - 0x4f, 0x0c, 0x68, 0x38, 0x28, 0x00, 0xd1, 0x03, - 0x48, 0x0b, 0xf7, 0xff, 0xfe, 0xf9, 0x60, 0x38, - 0x68, 0x3f, 0x25, 0x00, 0x78, 0x20, 0x28, 0x00, - 0xd0, 0x08, 0x78, 0x20, 0x68, 0xf9, 0x34, 0x01, - 0xf7, 0xff, 0xff, 0xe0, 0x19, 0x45, 0x78, 0x20, - 0x28, 0x00, 0xd1, 0xf6, 0x1c, 0x28, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1b, 0x04, - 0x2e, 0x03, 0x45, 0xb8, 0xb5, 0x80, 0x28, 0x00, - 0xd1, 0x08, 0x4f, 0x09, 0x68, 0x38, 0x28, 0x00, - 0xd1, 0x03, 0x48, 0x08, 0xf7, 0xff, 0xfe, 0xd8, - 0x60, 0x38, 0x68, 0x38, 0x28, 0x00, 0xd1, 0x02, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xc0, - 0x68, 0x40, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1b, 0x04, 0x2e, 0x03, 0x45, 0xb8, - 0xb5, 0xf0, 0xb0, 0x83, 0x4a, 0x18, 0x21, 0x00, - 0x20, 0xff, 0x30, 0x01, 0xf7, 0xff, 0xfa, 0xac, - 0x49, 0x16, 0x27, 0x00, 0x64, 0x08, 0x49, 0x16, - 0x91, 0x02, 0x49, 0x16, 0x91, 0x01, 0x49, 0x16, - 0x91, 0x00, 0x4c, 0x16, 0x01, 0x38, 0x06, 0x01, - 0x0e, 0x09, 0x20, 0x10, 0x1c, 0x22, 0x1c, 0x0d, - 0xf7, 0xff, 0xfa, 0x9a, 0x00, 0xbe, 0x99, 0x02, - 0x51, 0x88, 0x20, 0x04, 0x1c, 0x29, 0x1c, 0x22, - 0xf7, 0xff, 0xfa, 0x92, 0x99, 0x01, 0x51, 0x88, - 0x20, 0x02, 0x1c, 0x29, 0x1c, 0x22, 0xf7, 0xff, - 0xfa, 0x8b, 0x99, 0x00, 0x51, 0x88, 0x37, 0x01, - 0x2f, 0x08, 0xdb, 0xe3, 0x20, 0x00, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1b, 0x4c, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xbc, 0x2e, 0x08, 0x92, 0xdc, - 0x2e, 0x08, 0x92, 0xfc, 0x2e, 0x08, 0x1b, 0x0c, - 0xb5, 0x80, 0x48, 0x0c, 0xf7, 0xff, 0xfe, 0x84, - 0x4f, 0x0b, 0x64, 0x78, 0x48, 0x0b, 0xf7, 0xff, - 0xfe, 0x7f, 0x64, 0xb8, 0x48, 0x0a, 0xf7, 0xff, - 0xfe, 0x7b, 0x64, 0xf8, 0x20, 0x00, 0x22, 0x00, - 0x49, 0x08, 0x00, 0x83, 0x50, 0xca, 0x30, 0x01, - 0x28, 0x10, 0xdb, 0xfa, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x02, 0xcc, 0xa0, - 0x2e, 0x08, 0x1d, 0x0c, 0x2e, 0x03, 0x03, 0x2c, - 0x2e, 0x03, 0x45, 0xb8, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x90, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x00, 0xd0, 0x0b, 0x29, 0x0f, 0xdc, 0x09, - 0x00, 0x8c, 0x4f, 0x06, 0x59, 0x39, 0x29, 0x00, - 0xd0, 0x04, 0x1c, 0x08, 0xf7, 0xff, 0xfb, 0x91, - 0x20, 0x00, 0x51, 0x38, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xff, 0x04, 0x05, 0x0c, 0x2d, 0x04, 0x10, - 0x0c, 0x00, 0xb0, 0x82, 0x90, 0x00, 0x04, 0x18, - 0x0c, 0x00, 0x90, 0x01, 0x2d, 0x00, 0xd0, 0x01, - 0x2d, 0x0f, 0xdd, 0x01, 0x20, 0xff, 0xe0, 0x53, - 0x00, 0xaf, 0x4c, 0x2c, 0x59, 0xe0, 0x28, 0x00, - 0xd0, 0x02, 0x1c, 0x28, 0xf7, 0xff, 0xff, 0xd0, - 0x98, 0x00, 0x4a, 0x29, 0x40, 0x02, 0x92, 0x00, - 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9a, 0xdd, 0x01, - 0x1c, 0x1a, 0x93, 0x00, 0x23, 0x09, 0x01, 0x9b, - 0x98, 0x01, 0x42, 0x98, 0xdd, 0x01, 0x1c, 0x1a, - 0x93, 0x00, 0x2d, 0x08, 0xda, 0x01, 0x20, 0x00, - 0xe0, 0x00, 0x20, 0x01, 0x22, 0x00, 0x21, 0x00, - 0xb4, 0x07, 0x9a, 0x06, 0xb4, 0x04, 0x20, 0x00, - 0x9a, 0x04, 0x9b, 0x05, 0xf7, 0xff, 0xfa, 0x38, - 0x51, 0xe0, 0xb0, 0x04, 0x1c, 0x01, 0xd0, 0xd1, - 0x48, 0x18, 0x6c, 0x82, 0x62, 0x4a, 0x21, 0x01, - 0x59, 0xe2, 0x63, 0xd1, 0x21, 0x00, 0x43, 0xc9, - 0x59, 0xe2, 0x63, 0x91, 0x99, 0x03, 0x29, 0x08, - 0xd2, 0x10, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x06, 0x08, 0x0b, - 0x04, 0x06, 0x08, 0x0b, 0x48, 0x0e, 0xe0, 0x02, - 0x48, 0x0e, 0xe0, 0x00, 0x48, 0x0e, 0x59, 0xc6, - 0xe0, 0x00, 0x6c, 0x06, 0x59, 0xe0, 0x1c, 0x31, - 0xf7, 0xff, 0xfb, 0xd6, 0x59, 0xe0, 0x68, 0x80, - 0x21, 0x07, 0xf0, 0x04, 0xf9, 0xb3, 0x20, 0x00, - 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0x00, 0x00, 0xff, 0xfe, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xfc, 0x2e, 0x08, 0x92, 0xdc, - 0x2e, 0x08, 0x92, 0xbc, 0xb5, 0xf0, 0x04, 0x00, - 0x0c, 0x00, 0x04, 0x09, 0x14, 0x09, 0x04, 0x16, - 0x14, 0x36, 0xb0, 0x85, 0x28, 0x07, 0xdc, 0x29, - 0x00, 0x84, 0x4f, 0x21, 0x59, 0x38, 0x28, 0x00, - 0xd0, 0x24, 0x08, 0x49, 0x00, 0x49, 0x04, 0x0d, - 0x14, 0x2d, 0x68, 0x80, 0xa9, 0x01, 0xf0, 0x04, - 0xfa, 0x61, 0x98, 0x01, 0x19, 0x40, 0x90, 0x01, - 0x98, 0x03, 0x19, 0x40, 0x90, 0x03, 0x98, 0x02, - 0x19, 0x80, 0x90, 0x02, 0x98, 0x04, 0x19, 0x80, - 0x90, 0x04, 0x98, 0x01, 0x49, 0x15, 0x42, 0x88, - 0xd8, 0x0c, 0x98, 0x02, 0x42, 0x88, 0xd8, 0x09, - 0x23, 0x2d, 0x01, 0x1b, 0x98, 0x01, 0x42, 0x98, - 0xda, 0x04, 0x23, 0x09, 0x01, 0x9b, 0x98, 0x02, - 0x42, 0x98, 0xdb, 0x01, 0x20, 0xff, 0xe0, 0x12, - 0x59, 0x38, 0x68, 0x80, 0xa9, 0x01, 0xf0, 0x02, - 0xf8, 0x31, 0x59, 0x38, 0x68, 0x80, 0x46, 0x69, - 0xf0, 0x03, 0xff, 0x00, 0x98, 0x00, 0x28, 0x00, - 0xd1, 0x04, 0x59, 0x38, 0x68, 0x80, 0x21, 0x01, - 0xf0, 0x03, 0xfc, 0x44, 0x20, 0x00, 0xb0, 0x05, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0x80, 0x00, 0x00, 0x00, - 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x0b, - 0x0c, 0x1b, 0x04, 0x16, 0x0c, 0x36, 0x20, 0xff, - 0xb0, 0x85, 0x2f, 0x07, 0xdc, 0x10, 0x00, 0xbc, - 0x4f, 0x1c, 0x59, 0x39, 0x29, 0x00, 0xd0, 0x0b, - 0x08, 0x5a, 0x00, 0x52, 0x04, 0x15, 0x0c, 0x2d, - 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9d, 0xda, 0x03, - 0x23, 0x09, 0x01, 0x9b, 0x42, 0x9e, 0xdb, 0x03, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x88, 0xa9, 0x01, 0xf0, 0x04, 0xfa, 0x02, - 0x98, 0x03, 0x99, 0x01, 0x1a, 0x40, 0x90, 0x03, - 0x19, 0x40, 0x90, 0x03, 0x98, 0x04, 0x99, 0x02, - 0x1a, 0x40, 0x90, 0x04, 0x19, 0x80, 0x90, 0x04, - 0x95, 0x01, 0x96, 0x02, 0x59, 0x38, 0x68, 0x80, - 0xa9, 0x01, 0xf0, 0x01, 0xff, 0xe3, 0x59, 0x38, - 0x68, 0x80, 0x46, 0x69, 0xf0, 0x03, 0xfe, 0xb2, - 0x98, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x59, 0x38, - 0x68, 0x80, 0x21, 0x01, 0xf0, 0x03, 0xfb, 0xf6, - 0x20, 0x00, 0xe7, 0xd5, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x80, - 0x49, 0x04, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x03, - 0x68, 0x80, 0x21, 0x00, 0xf0, 0x03, 0xfb, 0xe6, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x80, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x07, 0xdc, 0x0c, 0x29, 0x01, 0xdb, 0x0a, - 0x00, 0x88, 0x49, 0x06, 0x58, 0x08, 0x27, 0x00, - 0x28, 0x00, 0xd0, 0x03, 0x68, 0x80, 0x21, 0x01, - 0xf0, 0x03, 0xfa, 0x2c, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, 0x29, 0x0f, - 0xdc, 0x06, 0x00, 0x89, 0x4a, 0x03, 0x58, 0x51, - 0x29, 0x00, 0xd0, 0x01, 0x23, 0x32, 0x5e, 0xc8, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, 0x29, 0x0f, - 0xdc, 0x06, 0x00, 0x89, 0x4a, 0x03, 0x58, 0x51, - 0x29, 0x00, 0xd0, 0x01, 0x23, 0x34, 0x5e, 0xc8, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xb0, 0x04, 0x03, 0x0c, 0x1b, 0x04, 0x0a, - 0x0c, 0x12, 0x20, 0xff, 0x2b, 0x07, 0xdc, 0x10, - 0x00, 0x9d, 0x4f, 0x09, 0x59, 0x79, 0x29, 0x00, - 0xd0, 0x0b, 0x07, 0x14, 0x0f, 0x24, 0x68, 0x88, - 0x21, 0x03, 0xf0, 0x03, 0xfe, 0x9b, 0x59, 0x78, - 0x68, 0x80, 0x1c, 0x21, 0xf0, 0x03, 0xff, 0x42, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0x00, 0x04, 0x01, - 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, - 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, - 0xd0, 0x04, 0x68, 0x88, 0x21, 0x02, 0xf0, 0x03, - 0xfe, 0x81, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0x00, 0x04, 0x01, - 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, - 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, - 0xd0, 0x04, 0x68, 0x88, 0x21, 0x00, 0xf0, 0x03, - 0xfe, 0x6d, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0xf0, 0x04, 0x05, - 0x0c, 0x2d, 0x04, 0x09, 0x0c, 0x09, 0x04, 0x12, - 0x0c, 0x12, 0x04, 0x1e, 0x0c, 0x36, 0x9c, 0x05, - 0x9f, 0x06, 0x04, 0x24, 0x0c, 0x24, 0x04, 0x3f, - 0x0c, 0x3f, 0x20, 0xff, 0xb0, 0x85, 0x2d, 0x0f, - 0xdc, 0x04, 0x00, 0xab, 0x4d, 0x10, 0x58, 0xed, - 0x2d, 0x00, 0xd1, 0x03, 0xb0, 0x05, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x19, 0x88, 0x23, 0x32, - 0x5e, 0xeb, 0x42, 0x98, 0xdd, 0x02, 0x1a, 0x58, - 0x04, 0x06, 0x0c, 0x36, 0x19, 0x10, 0x23, 0x34, - 0x5e, 0xeb, 0x42, 0x98, 0xdd, 0x02, 0x1a, 0x98, - 0x04, 0x04, 0x0c, 0x24, 0x91, 0x00, 0x92, 0x01, - 0x96, 0x02, 0x94, 0x03, 0x97, 0x04, 0x46, 0x69, - 0x68, 0xa8, 0xf0, 0x0a, 0xfa, 0x13, 0xe7, 0xe1, - 0x2e, 0x08, 0x92, 0x7c, 0xb4, 0x80, 0x04, 0x03, - 0x0c, 0x1b, 0x20, 0x00, 0x29, 0x00, 0xdb, 0x0f, - 0x2a, 0x00, 0xdb, 0x0d, 0x00, 0x9b, 0x4f, 0x07, - 0x58, 0xff, 0x2f, 0x00, 0xd0, 0x08, 0x23, 0x32, - 0x5e, 0xfb, 0x42, 0x8b, 0xdd, 0x04, 0x23, 0x34, - 0x5e, 0xf9, 0x42, 0x91, 0xdd, 0x00, 0x20, 0x01, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xf0, 0x9c, 0x06, 0x9e, 0x05, 0x04, 0x00, - 0x0c, 0x00, 0xb0, 0x85, 0x90, 0x00, 0x04, 0x08, - 0x14, 0x00, 0x04, 0x17, 0x14, 0x3f, 0x04, 0x1d, - 0x14, 0x2d, 0x04, 0x31, 0x14, 0x09, 0x91, 0x01, - 0x04, 0x23, 0x0c, 0x1b, 0x93, 0x02, 0xb0, 0x82, - 0x99, 0x02, 0x00, 0x89, 0x91, 0x06, 0x4a, 0x71, - 0x92, 0x05, 0x58, 0x51, 0x29, 0x00, 0xd1, 0x01, - 0x20, 0xff, 0xe0, 0xd6, 0x2d, 0x00, 0xda, 0x0e, - 0x19, 0x40, 0x04, 0x00, 0x14, 0x00, 0x42, 0x69, - 0x04, 0x0d, 0x14, 0x2d, 0x99, 0x03, 0x18, 0x79, - 0x04, 0x0f, 0x14, 0x3f, 0x99, 0x03, 0x42, 0x49, - 0x04, 0x09, 0x14, 0x09, 0x91, 0x03, 0x1c, 0x01, - 0x1c, 0x04, 0x98, 0x02, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0xb1, 0x28, 0x00, 0xd0, 0x08, 0x98, 0x06, - 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, 0x9b, 0x04, - 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, 0xff, 0x70, - 0x98, 0x03, 0x10, 0x40, 0x90, 0x00, 0x10, 0x6e, - 0x1c, 0x28, 0xb0, 0x82, 0xf0, 0x0e, 0xfd, 0x38, - 0xf0, 0x0e, 0xfd, 0x74, 0x90, 0x00, 0x91, 0x01, - 0x98, 0x05, 0xf0, 0x0e, 0xfd, 0x31, 0xf0, 0x0e, - 0xfd, 0x6d, 0x9a, 0x00, 0x9b, 0x01, 0xb0, 0x02, - 0xf0, 0x0e, 0xfd, 0x6c, 0x28, 0x00, 0xd0, 0x4c, - 0x98, 0x03, 0x28, 0x00, 0xdd, 0x21, 0x26, 0x00, - 0x2d, 0x00, 0xdd, 0x6d, 0x98, 0x00, 0x99, 0x03, - 0x18, 0x40, 0x90, 0x00, 0x34, 0x01, 0x42, 0xa8, - 0xdb, 0x03, 0x98, 0x00, 0x1b, 0x40, 0x90, 0x00, - 0x37, 0x01, 0x98, 0x02, 0x1c, 0x21, 0x1c, 0x3a, - 0xf7, 0xff, 0xff, 0x78, 0x28, 0x00, 0xd0, 0x08, - 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, - 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, - 0xff, 0x37, 0x36, 0x01, 0x42, 0xae, 0xdb, 0xe1, - 0xe0, 0x76, 0x98, 0x03, 0x42, 0x40, 0x04, 0x00, - 0x14, 0x00, 0x90, 0x03, 0x98, 0x00, 0x42, 0x46, - 0x20, 0x00, 0x90, 0x01, 0x2d, 0x00, 0xdd, 0x43, - 0x98, 0x03, 0x18, 0x36, 0x34, 0x01, 0x42, 0xae, - 0xdb, 0x01, 0x1b, 0x76, 0x3f, 0x01, 0x98, 0x02, - 0x1c, 0x21, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x52, - 0x28, 0x00, 0xd0, 0x08, 0x98, 0x06, 0x99, 0x05, - 0x58, 0x08, 0x68, 0x80, 0x9b, 0x04, 0x1c, 0x21, - 0x1c, 0x3a, 0xf0, 0x09, 0xff, 0x11, 0x98, 0x01, - 0x30, 0x01, 0x90, 0x01, 0x42, 0xa8, 0xdb, 0xe3, - 0xe0, 0x4e, 0x98, 0x03, 0x28, 0x00, 0xdd, 0x24, - 0x20, 0x00, 0x90, 0x01, 0x98, 0x03, 0x28, 0x00, - 0xdd, 0x1e, 0x19, 0x76, 0x99, 0x03, 0x37, 0x01, - 0x42, 0x8e, 0xdb, 0x02, 0x98, 0x03, 0x1a, 0x36, - 0x34, 0x01, 0x98, 0x02, 0x1c, 0x21, 0x1c, 0x3a, - 0xf7, 0xff, 0xff, 0x2c, 0x28, 0x00, 0xd0, 0x08, - 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, - 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, - 0xfe, 0xeb, 0x98, 0x01, 0x30, 0x01, 0x90, 0x01, - 0x99, 0x03, 0x42, 0x88, 0xdb, 0xe1, 0xe0, 0x27, - 0xe0, 0x26, 0x98, 0x03, 0x42, 0x40, 0x04, 0x01, - 0x14, 0x09, 0x91, 0x03, 0x20, 0x00, 0x90, 0x01, - 0x29, 0x00, 0xdd, 0x1d, 0x19, 0x76, 0x99, 0x03, - 0x3f, 0x01, 0x42, 0x8e, 0xdb, 0x02, 0x99, 0x03, - 0x1a, 0x76, 0x34, 0x01, 0x98, 0x02, 0x1c, 0x21, - 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x03, 0x28, 0x00, - 0xd0, 0x08, 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, - 0x68, 0x80, 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, - 0xf0, 0x09, 0xfe, 0xc2, 0x98, 0x01, 0x30, 0x01, - 0x90, 0x01, 0x99, 0x03, 0x42, 0x88, 0xdb, 0xe1, - 0x20, 0x00, 0xb0, 0x07, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb4, 0x80, 0x23, 0x00, 0x88, 0x01, 0x0a, 0x0a, - 0x06, 0x12, 0x0e, 0x12, 0x06, 0x09, 0x0e, 0x09, - 0x2a, 0xdf, 0xd0, 0x1a, 0xdc, 0x07, 0x2a, 0xc4, - 0xd0, 0x19, 0x2a, 0xd6, 0xd0, 0x1b, 0x2a, 0xdc, - 0xd1, 0x08, 0x22, 0x1e, 0xe0, 0x06, 0x2a, 0xe4, - 0xd0, 0x13, 0x2a, 0xf6, 0xd0, 0x15, 0x2a, 0xfc, - 0xd1, 0x00, 0x22, 0x1f, 0x29, 0xdf, 0xd0, 0x26, - 0xdc, 0x11, 0x29, 0xc4, 0xd0, 0x25, 0x29, 0xd6, - 0xd0, 0x27, 0x29, 0xdc, 0xd1, 0x12, 0x21, 0x1e, - 0xe0, 0x10, 0x22, 0x19, 0xe7, 0xf2, 0x22, 0x1a, - 0xe7, 0xf0, 0x22, 0x1b, 0xe7, 0xee, 0x22, 0x1c, - 0xe7, 0xec, 0x22, 0x1d, 0xe7, 0xea, 0x29, 0xe4, - 0xd0, 0x15, 0x29, 0xf6, 0xd0, 0x17, 0x29, 0xfc, - 0xd1, 0x00, 0x21, 0x1f, 0x02, 0x17, 0x18, 0x7f, - 0x80, 0x07, 0x30, 0x02, 0x2a, 0x00, 0xd0, 0x04, - 0x29, 0x00, 0xd0, 0x02, 0x33, 0x01, 0x2b, 0x70, - 0xdb, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x21, 0x19, - 0xe7, 0xf0, 0x21, 0x1a, 0xe7, 0xee, 0x21, 0x1b, - 0xe7, 0xec, 0x21, 0x1c, 0xe7, 0xea, 0x21, 0x1d, - 0xe7, 0xe8, 0xb5, 0xf0, 0x1c, 0x0f, 0x1c, 0x11, - 0x04, 0x02, 0x0c, 0x12, 0x04, 0x0c, 0x0c, 0x24, - 0x04, 0x1d, 0x0c, 0x2d, 0x00, 0x96, 0xb0, 0x81, - 0x48, 0x10, 0x90, 0x00, 0x59, 0x81, 0x20, 0xff, - 0x29, 0x00, 0xd0, 0x16, 0x2a, 0x00, 0xd0, 0x14, - 0x2a, 0x0f, 0xdc, 0x12, 0x23, 0x32, 0x5e, 0xca, - 0x42, 0xa2, 0xdb, 0x0e, 0x23, 0x34, 0x5e, 0xc9, - 0x42, 0xa9, 0xdb, 0x0a, 0x1c, 0x38, 0xf7, 0xff, - 0xff, 0x93, 0x98, 0x00, 0x59, 0x80, 0x1c, 0x39, - 0x1c, 0x22, 0x1c, 0x2b, 0xf7, 0xff, 0xfb, 0x5c, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb4, 0xb0, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x09, - 0x0c, 0x09, 0x04, 0x14, 0x14, 0x24, 0x04, 0x1a, - 0x14, 0x12, 0x20, 0xff, 0x2f, 0x0f, 0xdc, 0x1d, - 0x00, 0xbd, 0x4f, 0x0f, 0x59, 0x7b, 0x2b, 0x00, - 0xd0, 0x18, 0x48, 0x0e, 0x29, 0x01, 0xd0, 0x05, - 0x29, 0x02, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0x03, - 0x6c, 0x80, 0xe0, 0x02, 0x6c, 0x40, 0xe0, 0x00, - 0x6c, 0xc0, 0x62, 0x58, 0x59, 0x78, 0x63, 0xc4, - 0x20, 0x00, 0x43, 0xc0, 0x42, 0x82, 0xd1, 0x02, - 0x59, 0x79, 0x63, 0x88, 0xe0, 0x01, 0x59, 0x78, - 0x63, 0x82, 0x20, 0x00, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x0c, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, - 0x0c, 0x09, 0x00, 0x80, 0x4a, 0x07, 0x58, 0x10, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0xff, 0xbc, 0x08, - 0x47, 0x18, 0x07, 0x89, 0x0f, 0x89, 0x68, 0x80, - 0xf0, 0x03, 0xfe, 0x6c, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x12, - 0x0c, 0x12, 0x1c, 0x1f, 0x28, 0x07, 0xdc, 0x1f, - 0x28, 0x01, 0xdb, 0x1d, 0x00, 0x80, 0x4b, 0x10, - 0x58, 0x1b, 0x2b, 0x00, 0xd0, 0x18, 0x29, 0x02, - 0xd0, 0x0e, 0x29, 0x04, 0xd0, 0x0c, 0x29, 0x10, - 0xd0, 0x0a, 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, - 0xd1, 0x0e, 0x06, 0x12, 0x0e, 0x12, 0x1c, 0x39, - 0x48, 0x08, 0x6c, 0x00, 0x68, 0x00, 0xe0, 0x05, - 0x07, 0x12, 0x0f, 0x12, 0x49, 0x06, 0x58, 0x08, - 0x68, 0x00, 0x1c, 0x39, 0xf0, 0x0b, 0xfa, 0xf2, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xbc, 0xb5, 0xf0, 0x04, 0x07, - 0x0c, 0x3f, 0x04, 0x10, 0x0c, 0x00, 0x22, 0x00, - 0xb0, 0x85, 0x92, 0x00, 0x2f, 0x07, 0xdc, 0x74, - 0x2f, 0x01, 0xdb, 0x73, 0x00, 0xbe, 0x4a, 0x3e, - 0x59, 0x92, 0x2a, 0x00, 0xd0, 0x6f, 0x04, 0x1a, - 0x0c, 0x12, 0x07, 0xd5, 0x0f, 0xed, 0x24, 0x02, - 0x40, 0x14, 0x27, 0x04, 0x40, 0x17, 0x23, 0x08, - 0x40, 0x1a, 0x92, 0x04, 0x29, 0x02, 0xd0, 0x34, - 0x29, 0x04, 0xd0, 0x32, 0x29, 0x10, 0xd0, 0x30, - 0x01, 0x5b, 0x42, 0x99, 0xd1, 0x60, 0x06, 0x02, - 0x0e, 0x12, 0x46, 0x69, 0x1c, 0x16, 0x48, 0x31, - 0x90, 0x01, 0x6c, 0x00, 0x68, 0x00, 0xf0, 0x0b, - 0xfa, 0xe9, 0x98, 0x00, 0x4b, 0x2e, 0x40, 0x18, - 0x90, 0x00, 0x2d, 0x00, 0xd0, 0x02, 0x23, 0x02, - 0x43, 0x18, 0x90, 0x00, 0x2c, 0x00, 0xd0, 0x04, - 0x23, 0x01, 0x04, 0x5b, 0x98, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x2f, 0x00, 0xd0, 0x03, 0x23, 0x01, - 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x9a, 0x04, - 0x2a, 0x00, 0xd0, 0x04, 0x23, 0x01, 0x04, 0x1b, - 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x98, 0x01, - 0x99, 0x00, 0x6c, 0x00, 0x68, 0x00, 0x1c, 0x32, - 0xe0, 0x30, 0x07, 0x02, 0x0f, 0x12, 0x92, 0x03, - 0x48, 0x1c, 0x90, 0x02, 0x59, 0x80, 0x68, 0x00, - 0x46, 0x69, 0xf0, 0x0b, 0xfa, 0xbb, 0x98, 0x00, - 0x4b, 0x17, 0x40, 0x18, 0x90, 0x00, 0x2d, 0x00, - 0xd0, 0x02, 0x23, 0x02, 0x43, 0x18, 0x90, 0x00, - 0x2c, 0x00, 0xd0, 0x04, 0x23, 0x01, 0x04, 0x5b, - 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x2f, 0x00, - 0xd0, 0x03, 0x23, 0x01, 0x98, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x9a, 0x04, 0x2a, 0x00, 0xd0, 0x04, - 0x23, 0x01, 0x04, 0x1b, 0x98, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x98, 0x02, 0x9a, 0x03, 0x59, 0x80, - 0xe0, 0x02, 0xe0, 0x05, 0xe0, 0x04, 0xe0, 0x03, - 0x68, 0x00, 0x99, 0x00, 0xf0, 0x0b, 0xfa, 0x62, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x0c, - 0xff, 0xfc, 0xff, 0xfc, 0x2e, 0x08, 0x92, 0xbc, - 0xb5, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x04, 0x16, 0x0c, 0x36, 0xb0, 0x85, - 0xa8, 0x01, 0x49, 0x48, 0xc9, 0x8e, 0xc0, 0x8e, - 0x2c, 0x00, 0xd0, 0x07, 0x2c, 0x01, 0xd0, 0x07, - 0x2c, 0x02, 0xd0, 0x07, 0x2c, 0x03, 0xd1, 0x74, - 0x20, 0x08, 0xe0, 0x04, 0x20, 0x01, 0xe0, 0x02, - 0x20, 0x02, 0xe0, 0x00, 0x20, 0x04, 0x90, 0x00, - 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9d, 0xdc, 0x69, - 0x23, 0x09, 0x01, 0x9b, 0x42, 0x9e, 0xdc, 0x65, - 0x1e, 0x68, 0x90, 0x03, 0x1e, 0x70, 0x90, 0x04, - 0xa8, 0x01, 0x1c, 0x21, 0xf0, 0x07, 0xfb, 0xe4, - 0x4f, 0x37, 0x60, 0x78, 0x00, 0x80, 0x23, 0x01, - 0x04, 0x1b, 0x42, 0x98, 0xdc, 0x56, 0x1f, 0xf8, - 0x38, 0x79, 0x67, 0xc4, 0x68, 0x38, 0x28, 0x00, - 0xd0, 0x0a, 0x68, 0x80, 0xb0, 0x81, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x00, 0xf0, 0x09, 0xfd, 0x6e, - 0x68, 0x38, 0xf7, 0xfe, 0xfe, 0xd2, 0xb0, 0x01, - 0x22, 0x00, 0x21, 0x0a, 0x20, 0x01, 0xb4, 0x07, - 0x1c, 0x22, 0xb4, 0x04, 0x21, 0x00, 0x20, 0x00, - 0x1c, 0x2a, 0x1c, 0x33, 0xf7, 0xfe, 0xfd, 0xac, - 0x60, 0x38, 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x40, - 0x69, 0x84, 0x98, 0x00, 0x43, 0x45, 0x1d, 0xe8, - 0xd5, 0x00, 0x30, 0x07, 0x10, 0xc0, 0x43, 0x70, - 0x1c, 0x01, 0x60, 0x78, 0x20, 0x00, 0x29, 0x00, - 0xdd, 0x05, 0x21, 0x00, 0x54, 0x21, 0x68, 0x7a, - 0x30, 0x01, 0x42, 0x90, 0xdb, 0xfa, 0x20, 0x01, - 0x02, 0x80, 0xf7, 0xf0, 0xff, 0x55, 0x28, 0x00, - 0xdb, 0xf9, 0x4d, 0x18, 0x1c, 0x28, 0xf7, 0xf0, - 0xff, 0x6f, 0x28, 0x00, 0xdb, 0xfa, 0x68, 0x78, - 0x28, 0x00, 0xdd, 0x14, 0x68, 0x78, 0x04, 0x00, - 0x0c, 0x00, 0xf7, 0xf0, 0xff, 0x45, 0x28, 0x00, - 0xdb, 0xf8, 0x1c, 0x20, 0xf7, 0xf0, 0xff, 0x60, - 0x28, 0x00, 0xdb, 0xfa, 0x18, 0x24, 0x68, 0x79, - 0x1a, 0x08, 0x60, 0x78, 0x28, 0x00, 0xdc, 0xed, - 0xe0, 0x01, 0xe0, 0x0a, 0xe0, 0x09, 0x20, 0x00, - 0xf7, 0xf0, 0xff, 0x32, 0x28, 0x00, 0xd1, 0xfa, - 0x1c, 0x20, 0xf7, 0xf0, 0xff, 0x4d, 0x28, 0x00, - 0xdb, 0xfa, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x03, 0xa7, 0xc4, - 0x2e, 0x08, 0x1d, 0x8c, 0x2e, 0x08, 0x93, 0x1c, - 0xb5, 0xf0, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x87, 0x91, 0x00, 0x04, 0x11, - 0x0c, 0x09, 0x91, 0x01, 0x04, 0x19, 0x0c, 0x09, - 0x91, 0x02, 0xb0, 0x85, 0x28, 0x07, 0xdc, 0x43, - 0x28, 0x01, 0xdb, 0x41, 0x00, 0x85, 0x48, 0x3e, - 0x90, 0x0b, 0x59, 0x41, 0x29, 0x00, 0xd0, 0x3b, - 0x48, 0x3c, 0x90, 0x0a, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x36, 0x23, 0x2c, 0x5e, 0xca, 0x2a, 0x0b, - 0xd2, 0x32, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, - 0x22, 0x00, 0x92, 0x00, 0x92, 0x01, 0x23, 0x32, - 0x5e, 0xc3, 0x93, 0x02, 0x23, 0x34, 0x5e, 0xc0, - 0x90, 0x03, 0x92, 0x04, 0x98, 0x07, 0x08, 0x80, - 0xd3, 0x40, 0x23, 0x2c, 0x5e, 0xc8, 0x28, 0x00, - 0xd0, 0x08, 0x28, 0x01, 0xd0, 0x08, 0x28, 0x02, - 0xd0, 0x08, 0x28, 0x03, 0xd1, 0x10, 0x27, 0xff, - 0x37, 0x01, 0xe0, 0x04, 0x27, 0x02, 0xe0, 0x02, - 0x27, 0x04, 0xe0, 0x00, 0x27, 0x10, 0x4e, 0x24, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x9f, 0xd1, 0x16, - 0x24, 0x00, 0x48, 0x22, 0x90, 0x09, 0xe0, 0x03, - 0xb0, 0x0c, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xa0, 0x58, 0x31, 0x29, 0x00, 0xd0, 0x06, - 0x06, 0x22, 0x0e, 0x12, 0x98, 0x09, 0x6c, 0x00, - 0x68, 0x00, 0xf0, 0x0b, 0xf9, 0x53, 0x34, 0x01, - 0x42, 0xbc, 0xdb, 0xf1, 0xe0, 0x12, 0x24, 0x00, - 0x2f, 0x00, 0xdd, 0x0f, 0x48, 0x16, 0x90, 0x08, - 0x00, 0xa0, 0x58, 0x31, 0x29, 0x00, 0xd0, 0x06, - 0x07, 0x22, 0x0f, 0x12, 0x98, 0x08, 0x59, 0x40, - 0x68, 0x00, 0xf0, 0x0b, 0xf9, 0x3f, 0x34, 0x01, - 0x42, 0xbc, 0xdb, 0xf1, 0x98, 0x07, 0x08, 0x40, - 0xd3, 0x01, 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, - 0x99, 0x06, 0xb4, 0x06, 0x98, 0x0d, 0x59, 0x40, - 0x68, 0x81, 0x98, 0x0c, 0x68, 0x00, 0x68, 0x80, - 0x9b, 0x07, 0xaa, 0x02, 0xf0, 0x09, 0xff, 0x08, - 0xb0, 0x0e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x8c, - 0x2e, 0x08, 0x93, 0x1c, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xbc, 0xb5, 0x80, 0x4f, 0x05, - 0x68, 0x38, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xfe, - 0xfd, 0xd4, 0x20, 0x00, 0x60, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1d, 0x8c, - 0xb5, 0x00, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x07, 0xdc, 0x09, 0x00, 0x89, 0x4a, 0x05, - 0x58, 0x51, 0x29, 0x00, 0xd0, 0x04, 0x68, 0x88, - 0x21, 0x01, 0xf0, 0x03, 0xfb, 0x93, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x00, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x07, 0xdc, 0x09, 0x00, 0x89, 0x4a, 0x05, - 0x58, 0x51, 0x29, 0x00, 0xd0, 0x04, 0x68, 0x88, - 0x21, 0x00, 0xf0, 0x03, 0xfb, 0x7f, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xf7, 0xb0, 0x86, 0x9c, 0x07, 0x20, 0x00, - 0x6e, 0x40, 0x90, 0x05, 0x98, 0x05, 0x30, 0x0c, - 0x90, 0x05, 0x48, 0x7f, 0x90, 0x04, 0x98, 0x04, - 0x30, 0x0c, 0x90, 0x04, 0xf0, 0x13, 0xfc, 0x2a, - 0x90, 0x01, 0xf0, 0x13, 0xfc, 0x0d, 0x90, 0x00, - 0x20, 0x00, 0x43, 0xc0, 0x49, 0x79, 0x60, 0x08, - 0x20, 0x00, 0x43, 0xc0, 0x49, 0x77, 0x60, 0x88, - 0x20, 0x00, 0x43, 0xc0, 0x49, 0x75, 0x61, 0x08, - 0x98, 0x06, 0x28, 0x00, 0xd0, 0x73, 0x20, 0x00, - 0x6a, 0x40, 0x90, 0x03, 0x68, 0x20, 0x30, 0x05, - 0x99, 0x06, 0x1a, 0x08, 0x90, 0x06, 0x68, 0xe0, - 0x28, 0x00, 0xd0, 0x08, 0x68, 0x60, 0x99, 0x03, - 0x68, 0x09, 0x42, 0x88, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x06, 0x68, 0x60, - 0x9a, 0x08, 0x42, 0x90, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x73, - 0x68, 0x27, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x01, - 0x98, 0x05, 0xe0, 0x00, 0x98, 0x04, 0x1c, 0x06, - 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, - 0x6e, 0x40, 0xe0, 0x00, 0x48, 0x5c, 0x90, 0x02, - 0x1d, 0xe5, 0x35, 0x0d, 0x68, 0xa0, 0x28, 0x08, - 0xd2, 0x5f, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x16, 0x28, 0x3a, - 0x49, 0x55, 0x65, 0x71, 0x69, 0x20, 0x49, 0x55, - 0x60, 0x08, 0xcd, 0x02, 0x48, 0x53, 0x60, 0x41, - 0xcd, 0x02, 0x98, 0x02, 0x60, 0x01, 0x3f, 0x01, - 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, - 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x67, - 0x69, 0x20, 0x49, 0x4c, 0x60, 0x88, 0xcd, 0x02, - 0x48, 0x4a, 0x60, 0xc1, 0xcd, 0x02, 0x98, 0x02, - 0x60, 0x41, 0x3f, 0x01, 0x1c, 0x38, 0x3f, 0x01, - 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, - 0xe7, 0xf8, 0xe0, 0x55, 0x69, 0x20, 0x49, 0x43, - 0x61, 0x08, 0xcd, 0x02, 0x48, 0x41, 0x61, 0x41, - 0xcd, 0x02, 0x98, 0x02, 0x60, 0x81, 0x3f, 0x01, - 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, - 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x43, - 0x69, 0x20, 0x00, 0x80, 0xe0, 0x00, 0xe0, 0x4b, - 0x21, 0x00, 0x6a, 0x89, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x34, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x33, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x28, 0x69, 0x20, - 0x00, 0x80, 0x21, 0x00, 0x6e, 0x09, 0xe0, 0x01, - 0xe0, 0x28, 0xe0, 0x20, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x18, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x26, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x0c, 0x69, 0x20, - 0x90, 0x03, 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, - 0xd0, 0x04, 0xcd, 0x02, 0x98, 0x03, 0xc0, 0x02, - 0x90, 0x03, 0xe7, 0xf6, 0xe0, 0x00, 0xe7, 0xff, - 0x68, 0xe0, 0x28, 0xff, 0xd1, 0x01, 0x96, 0x05, - 0xe0, 0x00, 0x96, 0x04, 0x68, 0x20, 0x00, 0x80, - 0x19, 0x00, 0x1d, 0xc4, 0x34, 0x0d, 0xe7, 0x3b, - 0x98, 0x01, 0x28, 0x00, 0xd1, 0x01, 0xf0, 0x13, - 0xfb, 0x89, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x01, - 0xf0, 0x13, 0xfb, 0x68, 0x20, 0x00, 0x6e, 0x80, - 0x68, 0x00, 0x4b, 0x0f, 0x42, 0x98, 0xd0, 0x06, - 0x48, 0x0d, 0x21, 0x00, 0x6e, 0x89, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x08, 0x62, 0x08, 0x20, 0x00, - 0x21, 0x00, 0x6e, 0x89, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x06, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb0, 0x06, 0xe7, 0xf9, 0x00, 0x00, - 0x2e, 0x08, 0x97, 0x1c, 0x66, 0x00, 0x00, 0x80, - 0x2e, 0x08, 0x3b, 0xa4, 0x2e, 0x08, 0x1d, 0x94, - 0xda, 0xa5, 0xaa, 0x57, 0xb5, 0x80, 0xb0, 0xa7, - 0x46, 0x68, 0x4f, 0x08, 0x23, 0x13, 0xcf, 0x06, - 0xc0, 0x06, 0x3b, 0x01, 0xd1, 0xfb, 0xcf, 0x04, - 0xc0, 0x04, 0x46, 0x69, 0x4a, 0x04, 0x20, 0x27, - 0xf7, 0xff, 0xfe, 0xde, 0xb0, 0x27, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x03, 0xa7, 0xd4, - 0xf0, 0x24, 0x00, 0x09, 0xb5, 0xff, 0xb0, 0x83, - 0x99, 0x04, 0x04, 0x09, 0x0c, 0x09, 0x91, 0x00, - 0x9a, 0x05, 0x06, 0x16, 0x0e, 0x36, 0x9b, 0x06, - 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, 0x98, 0x0c, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x02, 0xb0, 0x84, - 0x25, 0x00, 0x98, 0x07, 0x1d, 0xc2, 0x32, 0x21, - 0x92, 0x00, 0x20, 0xff, 0x30, 0x01, 0x68, 0x00, - 0x49, 0x6b, 0x60, 0x08, 0x98, 0x12, 0x28, 0x01, - 0xd1, 0x73, 0x98, 0x07, 0x28, 0x00, 0xd1, 0x05, - 0x20, 0x63, 0xb0, 0x07, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x21, 0x00, 0x91, 0x01, - 0x99, 0x01, 0x23, 0xff, 0x33, 0xe1, 0x42, 0x99, - 0xd3, 0x04, 0xe0, 0x0a, 0x99, 0x01, 0x31, 0x01, - 0x91, 0x01, 0xe7, 0xf5, 0x20, 0x00, 0x99, 0x01, - 0x23, 0x2c, 0x43, 0x59, 0x9a, 0x00, 0x50, 0x50, - 0xe7, 0xf4, 0x98, 0x07, 0x49, 0x5b, 0x68, 0x09, - 0x60, 0x08, 0x98, 0x05, 0x28, 0x10, 0xdb, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x99, 0x05, - 0x29, 0x1f, 0xdc, 0x01, 0x21, 0x01, 0xe0, 0x00, - 0x21, 0x00, 0x40, 0x08, 0xd0, 0x04, 0x98, 0x05, - 0x49, 0x53, 0x68, 0x09, 0x60, 0x08, 0xe0, 0x02, - 0x20, 0x62, 0xb0, 0x07, 0xe7, 0xce, 0x20, 0x00, - 0x49, 0x4d, 0x68, 0x09, 0x70, 0x08, 0x1c, 0x30, - 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x01, 0xf0, 0x00, 0xfb, 0x01, 0x1c, 0x07, - 0x2f, 0x00, 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, - 0xe7, 0xbc, 0x22, 0x00, 0xb4, 0x04, 0x99, 0x05, - 0x1c, 0x30, 0x23, 0x04, 0x22, 0x00, 0xf0, 0x00, - 0xf9, 0x2f, 0xb0, 0x01, 0x1c, 0x07, 0x2f, 0x00, - 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, 0xe7, 0xad, - 0x98, 0x06, 0x28, 0x00, 0xdb, 0x04, 0x98, 0x06, - 0x28, 0x3f, 0xdc, 0x01, 0x9d, 0x06, 0xe0, 0x00, - 0x25, 0x1b, 0x98, 0x11, 0x01, 0x80, 0x43, 0x05, - 0x23, 0x80, 0x43, 0x1d, 0x48, 0x39, 0x68, 0x01, - 0x0a, 0x09, 0x02, 0x09, 0x60, 0x01, 0x48, 0x37, - 0x68, 0x01, 0x43, 0x29, 0x60, 0x01, 0xf0, 0x13, - 0xfa, 0x67, 0x90, 0x03, 0xf0, 0x13, 0xfa, 0x7e, - 0xe0, 0x00, 0xe0, 0x13, 0x90, 0x02, 0xf0, 0x13, - 0xfa, 0xdd, 0x1c, 0x04, 0x4b, 0x30, 0x40, 0x1c, - 0x1c, 0x20, 0xf0, 0x13, 0xfa, 0xdb, 0x98, 0x02, - 0x28, 0x40, 0xd0, 0x01, 0xf0, 0x13, 0xfa, 0xa6, - 0x98, 0x03, 0x28, 0x80, 0xd0, 0x01, 0xf0, 0x13, - 0xfa, 0x85, 0xe0, 0x43, 0x22, 0x00, 0xb4, 0x04, - 0x1c, 0x30, 0x23, 0x04, 0x22, 0x00, 0x49, 0x27, - 0xf0, 0x00, 0xf8, 0xee, 0xb0, 0x01, 0x1c, 0x07, - 0x2f, 0x00, 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, - 0xe7, 0x6c, 0x1c, 0x30, 0x23, 0x03, 0x02, 0x5b, - 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, 0xf0, 0x00, - 0xfa, 0xa3, 0x1c, 0x07, 0x2f, 0x00, 0xd0, 0x02, - 0x20, 0xa2, 0xb0, 0x07, 0xe7, 0x5e, 0x48, 0x19, - 0x68, 0x01, 0x0a, 0x09, 0x02, 0x09, 0x60, 0x01, - 0x48, 0x16, 0x68, 0x01, 0x23, 0x1b, 0x43, 0x19, - 0x60, 0x01, 0x48, 0x12, 0x68, 0x00, 0x68, 0x00, - 0x90, 0x07, 0xf0, 0x13, 0xfa, 0x21, 0x90, 0x03, - 0xf0, 0x13, 0xfa, 0x38, 0x90, 0x02, 0xf0, 0x13, - 0xfa, 0x99, 0x1c, 0x04, 0x23, 0x01, 0x04, 0x5b, - 0x43, 0x1c, 0x1c, 0x20, 0xf0, 0x13, 0xfa, 0x96, - 0x98, 0x02, 0x28, 0x40, 0xd0, 0x01, 0xf0, 0x13, - 0xfa, 0x61, 0x98, 0x03, 0x28, 0x80, 0xd0, 0x01, - 0xf0, 0x13, 0xfa, 0x40, 0x1c, 0x38, 0xb0, 0x07, - 0xe7, 0x34, 0xb0, 0x04, 0xb0, 0x03, 0xe7, 0x31, - 0x2e, 0x08, 0x9b, 0x24, 0x2e, 0x08, 0x9b, 0x1c, - 0x2e, 0x08, 0x9b, 0x20, 0x68, 0x00, 0x00, 0x38, - 0xff, 0xfd, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x00, 0xf7, 0xff, 0xfe, 0xe7, 0xf0, 0x00, - 0xf8, 0x02, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0xf0, 0x0b, 0xf9, 0x48, 0x26, 0x00, 0x2e, 0x04, - 0xd3, 0x02, 0xe0, 0x12, 0x36, 0x01, 0xe7, 0xfa, - 0x01, 0x30, 0x4b, 0x3c, 0x18, 0xc7, 0x25, 0x00, - 0x2d, 0x04, 0xd3, 0x02, 0xe0, 0x08, 0x35, 0x01, - 0xe7, 0xfa, 0x20, 0x00, 0x60, 0xb8, 0x20, 0x00, - 0x60, 0xf8, 0x37, 0xff, 0x37, 0x01, 0xe7, 0xf6, - 0xe7, 0xec, 0x4f, 0x35, 0x25, 0x00, 0x2d, 0x04, - 0xd3, 0x02, 0xe0, 0x07, 0x35, 0x01, 0xe7, 0xfa, - 0x20, 0x00, 0x60, 0xb8, 0x20, 0x00, 0x60, 0xf8, - 0x37, 0x10, 0xe7, 0xf7, 0x20, 0x00, 0x49, 0x2f, - 0x68, 0x09, 0x70, 0x08, 0x24, 0x00, 0x2c, 0x20, - 0xd3, 0x02, 0xe0, 0x1f, 0x34, 0x01, 0xe7, 0xfa, - 0x21, 0x00, 0x00, 0xe0, 0x4a, 0x2a, 0x68, 0x12, - 0x50, 0x11, 0x20, 0x00, 0x00, 0xe1, 0x4a, 0x28, - 0x68, 0x12, 0x18, 0x89, 0x60, 0x48, 0x21, 0x00, - 0x00, 0xe0, 0x4a, 0x26, 0x68, 0x12, 0x18, 0x80, - 0x60, 0x41, 0x20, 0x00, 0x00, 0xa1, 0x4a, 0x24, - 0x68, 0x12, 0x50, 0x50, 0x20, 0x00, 0x00, 0xe1, - 0x1b, 0x09, 0x00, 0x89, 0x4a, 0x21, 0x68, 0x12, - 0x52, 0x50, 0xe7, 0xdf, 0x20, 0x00, 0x21, 0x19, - 0x06, 0x89, 0x62, 0x48, 0x48, 0x1e, 0x21, 0x19, - 0x06, 0x89, 0x62, 0x48, 0x20, 0x00, 0x49, 0x1d, - 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0x1b, - 0x68, 0x09, 0x60, 0x48, 0x20, 0x00, 0x49, 0x19, - 0x68, 0x09, 0x60, 0xc8, 0x20, 0x00, 0x49, 0x17, - 0x68, 0x09, 0x61, 0x08, 0x20, 0x00, 0x49, 0x15, - 0x68, 0x09, 0x61, 0x48, 0x20, 0x00, 0x49, 0x13, - 0x68, 0x09, 0x61, 0x88, 0x20, 0x00, 0x49, 0x12, - 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0x10, - 0x68, 0x09, 0x60, 0x48, 0x20, 0x00, 0x49, 0x0e, - 0x68, 0x09, 0x60, 0x88, 0x48, 0x0d, 0x68, 0x01, - 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x9e, 0x00, 0x00, 0xc0, - 0x9e, 0x00, 0x09, 0x80, 0x2e, 0x08, 0x9b, 0x28, - 0x2e, 0x08, 0x9b, 0x3c, 0x2e, 0x08, 0x9b, 0x40, - 0x2e, 0x08, 0x9b, 0x38, 0x2e, 0x08, 0x9b, 0x30, - 0x00, 0x40, 0x00, 0x03, 0x2e, 0x08, 0x9b, 0x78, - 0x2e, 0x08, 0x9b, 0x7c, 0x6a, 0x00, 0x00, 0x10, - 0xb5, 0xff, 0xb0, 0x83, 0x98, 0x03, 0x06, 0x04, - 0x0e, 0x24, 0x99, 0x04, 0x04, 0x08, 0x0c, 0x00, - 0x90, 0x00, 0x9a, 0x05, 0x06, 0x10, 0x0e, 0x00, - 0x90, 0x01, 0x9b, 0x06, 0x06, 0x18, 0x0e, 0x00, - 0x90, 0x02, 0xb0, 0x81, 0x00, 0xe0, 0x49, 0xc1, - 0x68, 0x09, 0x18, 0x47, 0x00, 0xa0, 0x49, 0xc0, - 0x68, 0x09, 0x18, 0x45, 0x00, 0xe0, 0x1b, 0x00, - 0x00, 0x80, 0x49, 0xbe, 0x68, 0x09, 0x18, 0x46, - 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x04, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x28, 0x4b, 0xb9, 0x40, 0x18, 0x60, 0x28, - 0x68, 0x38, 0x4b, 0xb8, 0x40, 0x18, 0x60, 0x38, - 0x68, 0x38, 0x23, 0x40, 0x40, 0x18, 0xd0, 0x17, - 0x68, 0x38, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0x38, 0x48, 0xb3, 0x68, 0x01, 0x08, 0x49, - 0x00, 0x49, 0x60, 0x01, 0x48, 0xb1, 0x68, 0x01, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x19, 0x60, 0x01, - 0x98, 0x01, 0x4b, 0xaf, 0x42, 0x98, 0xd1, 0x03, - 0x20, 0x00, 0x49, 0xae, 0x68, 0x09, 0x60, 0x08, - 0x98, 0x01, 0x4b, 0xab, 0x42, 0x98, 0xd0, 0x73, - 0x68, 0x38, 0x23, 0x21, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0x38, 0x68, 0x28, 0x23, 0x07, 0x03, 0x5b, - 0x40, 0x18, 0x60, 0x28, 0x98, 0x01, 0x4b, 0xa6, - 0x40, 0x18, 0x68, 0x29, 0x43, 0x08, 0x60, 0x28, - 0x20, 0x00, 0x75, 0x30, 0x98, 0x02, 0x07, 0x80, - 0x0f, 0x80, 0x28, 0x01, 0xd1, 0x04, 0x88, 0x30, - 0x23, 0x10, 0x43, 0x18, 0x80, 0x30, 0xe0, 0x04, - 0x88, 0x30, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, - 0x80, 0x30, 0x98, 0x02, 0x23, 0x80, 0x40, 0x18, - 0x28, 0x80, 0xd1, 0x08, 0x68, 0x38, 0x23, 0x40, - 0x43, 0x18, 0x60, 0x38, 0x20, 0xff, 0x49, 0x97, - 0x68, 0x09, 0x70, 0x08, 0xe0, 0x04, 0x68, 0x38, - 0x23, 0x40, 0x43, 0xdb, 0x40, 0x18, 0x60, 0x38, - 0x98, 0x03, 0x28, 0x01, 0xd1, 0x36, 0x88, 0x30, - 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, 0x80, 0x30, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0x40, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc1, 0x00, 0xe0, 0x4a, 0x8c, - 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, 0x20, 0x01, - 0x70, 0xb0, 0x68, 0x38, 0x23, 0x01, 0x03, 0x9b, - 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, 0x4b, 0x87, - 0x43, 0x18, 0x60, 0x38, 0x48, 0x86, 0x70, 0x44, - 0x20, 0x00, 0x49, 0x86, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x01, 0x02, 0xc0, 0x49, 0x84, 0x61, 0x48, - 0x49, 0x83, 0x61, 0x08, 0x20, 0x01, 0x49, 0x83, - 0x64, 0x48, 0x20, 0x00, 0x49, 0x81, 0x64, 0x48, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0x20, 0x00, 0x49, 0x7e, 0x68, 0x09, - 0x60, 0x08, 0xe0, 0x9a, 0x98, 0x03, 0x28, 0x02, - 0xd1, 0x30, 0x20, 0x33, 0x06, 0x40, 0xe0, 0x00, - 0xe0, 0x94, 0x6d, 0xc0, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc0, 0x00, 0xe1, 0x4a, 0x70, 0x68, 0x12, - 0x18, 0x89, 0x60, 0x48, 0x20, 0x02, 0x70, 0xb0, - 0x68, 0x38, 0x23, 0x01, 0x03, 0xdb, 0x43, 0x18, - 0x60, 0x38, 0x68, 0x38, 0x4b, 0x6b, 0x43, 0x18, - 0x60, 0x38, 0x48, 0x6b, 0x70, 0x84, 0x20, 0x00, - 0x49, 0x6e, 0x60, 0x08, 0x00, 0xe0, 0x49, 0x5b, - 0x68, 0x09, 0x58, 0x08, 0x23, 0xff, 0x33, 0x01, - 0x43, 0x18, 0x00, 0xe1, 0x4a, 0x57, 0x68, 0x12, - 0x50, 0x50, 0x20, 0x4b, 0x49, 0x67, 0x60, 0x08, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0xe0, 0x66, 0x98, 0x03, 0x28, 0x04, - 0xd1, 0x15, 0x20, 0x00, 0x00, 0xe1, 0x4a, 0x5a, - 0x68, 0x12, 0x18, 0x89, 0x60, 0x48, 0x98, 0x03, - 0x70, 0xb0, 0x68, 0x38, 0x23, 0x20, 0x43, 0x18, - 0x60, 0x38, 0x68, 0x38, 0x60, 0x38, 0x48, 0x56, - 0x70, 0x04, 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, - 0x43, 0x18, 0x60, 0x28, 0xe0, 0x4d, 0x98, 0x03, - 0x23, 0x10, 0x40, 0x18, 0xd0, 0x0f, 0x21, 0x00, - 0x00, 0xe0, 0x4a, 0x4d, 0x68, 0x12, 0x18, 0x80, - 0x60, 0x41, 0x68, 0x38, 0x4b, 0x52, 0x43, 0x18, - 0x60, 0x38, 0x68, 0x38, 0x60, 0x38, 0x37, 0x04, - 0x20, 0x0e, 0x60, 0x38, 0xe0, 0x39, 0x98, 0x03, - 0x28, 0x08, 0xd1, 0x23, 0x48, 0x4d, 0x68, 0x00, - 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x03, - 0x20, 0x4f, 0xb0, 0x04, 0xe6, 0xf8, 0xe0, 0x67, - 0x20, 0x01, 0x49, 0x48, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x88, 0x48, 0x46, 0x68, 0x00, 0x30, 0x60, - 0x76, 0x04, 0x20, 0x01, 0x49, 0x43, 0x68, 0x09, - 0x31, 0x80, 0x70, 0xc8, 0x49, 0x42, 0x00, 0xe0, - 0x4a, 0x37, 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0xe0, 0x12, 0x21, 0x00, 0x00, 0xe0, - 0x4a, 0x31, 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, - 0x98, 0x03, 0x70, 0xb0, 0x68, 0x38, 0x23, 0x20, - 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, 0x60, 0x38, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0xe0, 0x33, 0x98, 0x03, 0x23, 0x10, - 0x40, 0x18, 0xd0, 0x09, 0x1c, 0x20, 0xf0, 0x05, - 0xf8, 0x0f, 0x90, 0x00, 0x28, 0x00, 0xd0, 0x02, - 0x98, 0x00, 0xb0, 0x04, 0xe6, 0xbc, 0xe0, 0x1a, - 0x98, 0x03, 0x28, 0x01, 0xd1, 0x03, 0x20, 0xff, - 0x49, 0x21, 0x70, 0x48, 0xe0, 0x13, 0x98, 0x03, - 0x28, 0x02, 0xd1, 0x03, 0x20, 0xff, 0x49, 0x1e, - 0x70, 0x88, 0xe0, 0x0c, 0x98, 0x03, 0x28, 0x08, - 0xd1, 0x09, 0x20, 0x00, 0x49, 0x21, 0x68, 0x09, - 0x31, 0x80, 0x70, 0xc8, 0x20, 0x00, 0x49, 0x1f, - 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x7d, 0x30, - 0x07, 0xc0, 0x0f, 0xc0, 0x28, 0x01, 0xd1, 0x03, - 0x1c, 0x20, 0x49, 0x1c, 0xf0, 0x00, 0xf9, 0x16, - 0x20, 0x00, 0x70, 0xb0, 0x20, 0x00, 0xb0, 0x04, - 0xe6, 0x92, 0xb0, 0x01, 0xb0, 0x03, 0xe6, 0x8f, - 0xe6, 0x8e, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x3c, - 0x2e, 0x08, 0x9b, 0x38, 0x2e, 0x08, 0x9b, 0x30, - 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x3f, 0xff, - 0x6a, 0x00, 0x00, 0x18, 0x6c, 0x00, 0x00, 0x20, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x9b, 0x44, - 0xff, 0xff, 0x1f, 0xff, 0x2e, 0x08, 0x9b, 0x98, - 0x2e, 0x08, 0x9b, 0x40, 0x00, 0x00, 0x20, 0x01, - 0x2e, 0x08, 0x9b, 0x9c, 0x2e, 0x08, 0x9b, 0x68, - 0xcc, 0x00, 0x0f, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x2e, 0x08, 0x9b, 0xac, 0x2e, 0x08, 0x9b, 0xb0, - 0x00, 0x00, 0x20, 0xa0, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0xf0, 0xff, 0xff, 0x00, 0x00, - 0xb5, 0xff, 0x98, 0x00, 0x06, 0x01, 0x0e, 0x09, - 0x98, 0x01, 0x06, 0x02, 0x0e, 0x12, 0x98, 0x02, - 0x04, 0x07, 0x0c, 0x3f, 0x9b, 0x03, 0x04, 0x1c, - 0x0c, 0x24, 0x29, 0x20, 0xdb, 0x04, 0x20, 0xa2, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2a, 0x02, 0xd1, 0x0a, 0x00, 0xc8, 0x4b, 0x1f, - 0x68, 0x1b, 0x58, 0x18, 0x4b, 0x1e, 0x40, 0x18, - 0x00, 0xcb, 0x4d, 0x1c, 0x68, 0x2d, 0x50, 0xe8, - 0xe0, 0x30, 0x2a, 0x01, 0xd1, 0x0b, 0x00, 0xc8, - 0x4b, 0x18, 0x68, 0x1b, 0x58, 0x18, 0x43, 0x27, - 0x1c, 0x3b, 0x43, 0x18, 0x00, 0xcb, 0x4d, 0x15, - 0x68, 0x2d, 0x50, 0xe8, 0xe0, 0x22, 0x20, 0x00, - 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x1e, 0x1c, 0x43, - 0x06, 0x1b, 0x16, 0x18, 0xe7, 0xf8, 0x2a, 0x03, - 0xd1, 0x0b, 0x00, 0xc3, 0x4d, 0x0d, 0x68, 0x2d, - 0x58, 0xeb, 0x1c, 0x3d, 0x43, 0x25, 0x43, 0x1d, - 0x00, 0xc3, 0x4e, 0x0a, 0x68, 0x36, 0x50, 0xf5, - 0xe0, 0x0b, 0x2a, 0x04, 0xd1, 0x09, 0x00, 0xc3, - 0x4d, 0x06, 0x68, 0x2d, 0x58, 0xed, 0x4b, 0x06, - 0x40, 0x2b, 0x00, 0xc5, 0x4e, 0x03, 0x68, 0x36, - 0x51, 0x73, 0xe7, 0xe0, 0x20, 0x00, 0xe7, 0xbb, - 0xe7, 0xba, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x3c, - 0xff, 0xff, 0xe1, 0xff, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x38, 0x0e, 0x00, 0x06, 0x11, - 0x0e, 0x09, 0x4c, 0x14, 0x68, 0x25, 0x4b, 0x14, - 0x40, 0x2b, 0x60, 0x23, 0x28, 0x01, 0xd1, 0x06, - 0x4c, 0x10, 0x68, 0x25, 0x23, 0x01, 0x04, 0x1b, - 0x43, 0x2b, 0x60, 0x23, 0xe0, 0x07, 0x28, 0x00, - 0xd1, 0x05, 0x4c, 0x0c, 0x68, 0x25, 0x23, 0x01, - 0x05, 0x9b, 0x43, 0x2b, 0x60, 0x23, 0x29, 0x01, - 0xd1, 0x06, 0x4c, 0x08, 0x68, 0x25, 0x23, 0x01, - 0x03, 0x9b, 0x43, 0x2b, 0x60, 0x23, 0xe0, 0x07, - 0x29, 0x02, 0xd1, 0x05, 0x4c, 0x03, 0x68, 0x25, - 0x23, 0x01, 0x03, 0xdb, 0x43, 0x2b, 0x60, 0x23, - 0xbc, 0xb0, 0x47, 0x70, 0x64, 0x00, 0x00, 0x24, - 0xff, 0xbe, 0x3f, 0xff, 0xb5, 0xff, 0x1c, 0x1f, - 0x9c, 0x09, 0xb0, 0x82, 0x98, 0x02, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x00, 0x99, 0x03, 0x06, 0x0a, - 0x0e, 0x12, 0x98, 0x04, 0x06, 0x05, 0x0e, 0x2d, - 0x98, 0x0c, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x01, - 0x00, 0xd0, 0x1a, 0x80, 0x00, 0x80, 0x4b, 0x1b, - 0x68, 0x1b, 0x18, 0xc1, 0x2a, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x1f, 0xdb, 0x02, - 0x20, 0xaf, 0xb0, 0x02, 0xe7, 0xf6, 0x71, 0x8d, - 0x68, 0x3b, 0x00, 0xd0, 0x4e, 0x12, 0x68, 0x36, - 0x19, 0x80, 0x60, 0x43, 0x1c, 0x20, 0x71, 0xc8, - 0x20, 0x00, 0x80, 0x88, 0x20, 0x00, 0x60, 0xc8, - 0x98, 0x00, 0x23, 0x01, 0x43, 0x18, 0x75, 0x08, - 0x98, 0x01, 0x74, 0x88, 0x60, 0x8f, 0x88, 0xb8, - 0x82, 0x08, 0x20, 0x00, 0x74, 0xc8, 0x88, 0xb8, - 0x61, 0x38, 0x20, 0x00, 0x73, 0x38, 0x20, 0x00, - 0x73, 0x78, 0x20, 0x00, 0x73, 0xb8, 0x20, 0x00, - 0x73, 0xf8, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xd1, - 0xb0, 0x02, 0xe7, 0xcf, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x9b, 0x40, 0xb5, 0xf3, 0x98, 0x00, - 0x06, 0x04, 0x0e, 0x24, 0x99, 0x01, 0x04, 0x0d, - 0x0c, 0x2d, 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, - 0x49, 0x25, 0x68, 0x09, 0x18, 0x47, 0x2c, 0x20, - 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x4b, 0x21, 0x42, 0x9d, - 0xd1, 0x27, 0x00, 0xe1, 0x4b, 0x20, 0x68, 0x1b, - 0x18, 0xc8, 0x00, 0xa1, 0x4b, 0x1f, 0x68, 0x1b, - 0x18, 0xca, 0x68, 0x11, 0x4b, 0x1e, 0x40, 0x19, - 0x60, 0x11, 0x68, 0x01, 0x23, 0x40, 0x40, 0x19, - 0xd0, 0x13, 0x68, 0x01, 0x23, 0x40, 0x43, 0xdb, - 0x40, 0x19, 0x60, 0x01, 0x21, 0x00, 0x4b, 0x19, - 0x68, 0x1b, 0x70, 0x19, 0x49, 0x18, 0x68, 0x0b, - 0x08, 0x5b, 0x00, 0x5b, 0x60, 0x0b, 0x49, 0x17, - 0x68, 0x0e, 0x23, 0x01, 0x05, 0x5b, 0x43, 0x33, - 0x60, 0x0b, 0x68, 0x01, 0x4b, 0x14, 0x40, 0x19, - 0x60, 0x01, 0x20, 0x00, 0x75, 0x38, 0x20, 0x00, - 0x80, 0x38, 0x20, 0x00, 0x80, 0xb8, 0x68, 0xb8, - 0x72, 0x44, 0x20, 0xa0, 0x68, 0xb9, 0x72, 0x08, - 0x20, 0x00, 0x60, 0xb8, 0x79, 0xb9, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x12, 0xfe, 0x1f, 0x20, 0x00, - 0x71, 0xb8, 0x20, 0x00, 0xe7, 0xba, 0xe7, 0xb9, - 0x2e, 0x08, 0x9b, 0x30, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0x3c, 0x2e, 0x08, 0x9b, 0x38, - 0xff, 0xff, 0xdf, 0xff, 0x2e, 0x08, 0x9b, 0x2c, - 0x6a, 0x00, 0x00, 0x18, 0x6c, 0x00, 0x00, 0x20, - 0xff, 0xff, 0x3f, 0xde, 0xb5, 0xff, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x28, 0x0e, 0x00, - 0x06, 0x23, 0x0e, 0x1b, 0x06, 0x39, 0x0e, 0x09, - 0x9e, 0x03, 0x06, 0x36, 0x16, 0x32, 0x28, 0x20, - 0xda, 0x02, 0x4e, 0x08, 0x68, 0x36, 0x60, 0x30, - 0x4e, 0x07, 0x68, 0x36, 0x60, 0x33, 0x4e, 0x07, - 0x68, 0x36, 0x60, 0x31, 0x4e, 0x06, 0x68, 0x36, - 0x60, 0x32, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x58, - 0x2e, 0x08, 0x9b, 0x5c, 0x2e, 0x08, 0x9b, 0x60, - 0x2e, 0x08, 0x9b, 0x64, 0x1c, 0x01, 0x06, 0x08, - 0x0e, 0x00, 0x28, 0x01, 0xd1, 0x04, 0x22, 0x01, - 0x4b, 0x04, 0x68, 0x1b, 0x60, 0x1a, 0xe0, 0x03, - 0x22, 0x02, 0x4b, 0x02, 0x68, 0x1b, 0x60, 0x1a, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xa0, - 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x04, 0x0e, 0x24, - 0xb0, 0x81, 0x27, 0x00, 0x26, 0x00, 0x4a, 0x55, - 0x92, 0x00, 0x00, 0xe0, 0x49, 0x54, 0x68, 0x09, - 0x58, 0x08, 0x23, 0x03, 0x03, 0x9b, 0x40, 0x18, - 0x23, 0x01, 0x03, 0x9b, 0x42, 0x98, 0xd0, 0x05, - 0x20, 0xa0, 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0xe0, 0x49, 0x4c, - 0x68, 0x09, 0x58, 0x08, 0x21, 0x20, 0x43, 0x01, - 0x00, 0xe0, 0x4a, 0x49, 0x68, 0x12, 0x50, 0x11, - 0x21, 0x00, 0x48, 0x48, 0xf0, 0x05, 0xfc, 0x3c, - 0x48, 0x47, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x01, - 0xe0, 0x08, 0xe0, 0x82, 0x20, 0x02, 0xf0, 0x0c, - 0xf8, 0x75, 0x1c, 0x38, 0x37, 0x01, 0x4b, 0x43, - 0x42, 0x98, 0xd3, 0xf1, 0x4b, 0x41, 0x42, 0x9f, - 0xd3, 0x00, 0x26, 0xa1, 0x48, 0x40, 0x68, 0x01, - 0x4b, 0x40, 0x40, 0x19, 0x60, 0x01, 0x20, 0x00, - 0x00, 0xe1, 0x1b, 0x09, 0x00, 0x89, 0x4a, 0x3e, - 0x68, 0x12, 0x18, 0x89, 0x70, 0x88, 0x20, 0x00, - 0x43, 0xc0, 0x49, 0x3c, 0x67, 0x48, 0x22, 0x00, - 0xb4, 0x04, 0x1c, 0x20, 0x23, 0x00, 0x22, 0x00, - 0x49, 0x39, 0xf7, 0xff, 0xfc, 0x69, 0xb0, 0x01, - 0x27, 0x00, 0x25, 0x00, 0x2d, 0x04, 0xdb, 0x02, - 0xe0, 0x1e, 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa9, - 0x22, 0x0f, 0x1c, 0x10, 0x40, 0x88, 0x01, 0x29, - 0x9a, 0x00, 0x18, 0x89, 0x68, 0x49, 0x42, 0xa1, - 0xd1, 0x11, 0x21, 0x33, 0x06, 0x49, 0x6b, 0xc9, - 0x40, 0x01, 0xd0, 0x01, 0x37, 0x01, 0xe0, 0x00, - 0xe0, 0x02, 0x4b, 0x26, 0x42, 0x9f, 0xd3, 0xf4, - 0x4b, 0x24, 0x42, 0x9f, 0xd3, 0x02, 0x26, 0xa1, - 0xe0, 0x02, 0xe0, 0x3a, 0x27, 0x00, 0xe7, 0xe0, - 0x48, 0x26, 0x68, 0x01, 0x23, 0xff, 0x33, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x48, 0x21, 0x6d, 0x80, - 0x49, 0x20, 0x65, 0x88, 0x48, 0x1f, 0x6b, 0xc0, - 0x23, 0x01, 0x07, 0x9b, 0x40, 0x18, 0xd0, 0x00, - 0xe7, 0xf8, 0x20, 0x33, 0x06, 0x40, 0x6d, 0x40, - 0x21, 0x33, 0x06, 0x49, 0x66, 0x48, 0x20, 0x33, - 0x06, 0x40, 0x6d, 0x80, 0x21, 0x33, 0x06, 0x49, - 0x66, 0x88, 0x20, 0x03, 0x02, 0x00, 0x49, 0x15, - 0x67, 0x48, 0x48, 0x11, 0x68, 0x01, 0x23, 0x01, - 0x02, 0x5b, 0x43, 0x19, 0x60, 0x01, 0x20, 0x00, - 0x49, 0x13, 0x65, 0x88, 0x20, 0x00, 0x49, 0x12, - 0x65, 0xc8, 0x20, 0x00, 0x49, 0x10, 0x66, 0x08, - 0x21, 0x00, 0x20, 0xff, 0xf0, 0x05, 0xfb, 0xb8, - 0x1c, 0x30, 0xb0, 0x01, 0xe7, 0x66, 0xb0, 0x01, - 0xe7, 0x64, 0xe7, 0x63, 0x9e, 0x00, 0x00, 0xc0, - 0x2e, 0x08, 0x9b, 0x3c, 0x00, 0x00, 0x80, 0x0f, - 0xcc, 0x00, 0x05, 0x00, 0x00, 0x1e, 0x84, 0x80, - 0x66, 0x00, 0x00, 0x4c, 0xff, 0xff, 0xfd, 0xff, - 0x2e, 0x08, 0x9b, 0x30, 0x66, 0x00, 0x00, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x66, 0x00, 0x00, 0xe0, - 0xcc, 0x00, 0x00, 0x00, 0xb5, 0xf1, 0x98, 0x00, - 0x06, 0x07, 0x0e, 0x3f, 0xb0, 0x81, 0x25, 0x00, - 0x26, 0x00, 0x4a, 0x2e, 0x92, 0x00, 0x00, 0xf8, - 0x49, 0x2d, 0x68, 0x09, 0x58, 0x08, 0x23, 0x03, - 0x03, 0x9b, 0x40, 0x18, 0x23, 0x01, 0x03, 0xdb, - 0x42, 0x98, 0xd0, 0x05, 0x20, 0xa0, 0xb0, 0x01, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x38, 0x23, 0x00, - 0x22, 0x00, 0x49, 0x24, 0xf7, 0xff, 0xfb, 0xd0, - 0xb0, 0x01, 0x24, 0x00, 0x2c, 0x04, 0xdb, 0x02, - 0xe0, 0x1e, 0x34, 0x01, 0xe7, 0xfa, 0x00, 0xa1, - 0x22, 0x0f, 0x1c, 0x10, 0x40, 0x88, 0x01, 0x21, - 0x9a, 0x00, 0x18, 0x89, 0x68, 0x49, 0x42, 0xb9, - 0xd1, 0x11, 0x21, 0x33, 0x06, 0x49, 0x6b, 0xc9, - 0x40, 0x01, 0xd0, 0x01, 0x35, 0x01, 0xe0, 0x00, - 0xe0, 0x02, 0x4b, 0x17, 0x42, 0x9d, 0xd3, 0xf4, - 0x4b, 0x15, 0x42, 0x9d, 0xd9, 0x02, 0x26, 0xa1, - 0xe0, 0x02, 0xe0, 0x1d, 0x25, 0x00, 0xe7, 0xe0, - 0x20, 0x04, 0xf0, 0x02, 0xff, 0xb7, 0x20, 0x01, - 0x21, 0x33, 0x06, 0x49, 0x66, 0xc8, 0x21, 0x00, - 0x00, 0xf8, 0x4a, 0x0b, 0x68, 0x12, 0x50, 0x11, - 0x21, 0x00, 0x00, 0xf8, 0x4a, 0x08, 0x68, 0x12, - 0x18, 0x80, 0x60, 0x41, 0x21, 0x00, 0x00, 0xb8, - 0x4a, 0x08, 0x68, 0x12, 0x50, 0x11, 0x1c, 0x30, - 0xb0, 0x01, 0xe7, 0xb5, 0xb0, 0x01, 0xe7, 0xb3, - 0xe7, 0xb2, 0x00, 0x00, 0x9e, 0x00, 0x00, 0xc0, - 0x2e, 0x08, 0x9b, 0x3c, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x01, 0xd4, 0xc0, 0x2e, 0x08, 0x9b, 0x38, - 0xb5, 0xff, 0x99, 0x01, 0x06, 0x0f, 0x0e, 0x3f, - 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, 0x9b, 0x03, - 0x06, 0x1e, 0x0e, 0x36, 0x2d, 0x1f, 0xdb, 0x04, - 0x20, 0xaf, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2f, 0x20, 0xdb, 0x01, 0x20, 0xa2, - 0xe7, 0xf7, 0x2e, 0x80, 0xd0, 0x13, 0xf0, 0x12, - 0xfc, 0xc3, 0x1c, 0x04, 0x1c, 0x39, 0x22, 0x80, - 0x20, 0x01, 0xf0, 0x00, 0xfb, 0x6d, 0x2c, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0xef, 0x98, 0x00, - 0x21, 0x80, 0x68, 0x49, 0x60, 0x08, 0x48, 0x09, - 0x68, 0x00, 0x70, 0x05, 0xe0, 0x0b, 0xf0, 0x12, - 0xfc, 0xaf, 0x1c, 0x04, 0x1c, 0x39, 0x22, 0x80, - 0x20, 0x02, 0xf0, 0x00, 0xfb, 0x59, 0x2c, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0xdb, 0x20, 0x00, - 0xe7, 0xd3, 0xe7, 0xd2, 0x2e, 0x08, 0x9b, 0x88, - 0xb5, 0xff, 0x99, 0x01, 0x06, 0x0e, 0x0e, 0x36, - 0x9a, 0x02, 0x06, 0x17, 0x0e, 0x3f, 0x9b, 0x03, - 0x06, 0x1c, 0x0e, 0x24, 0xb0, 0x82, 0x20, 0x80, - 0x40, 0x38, 0x90, 0x00, 0x06, 0x7f, 0x0e, 0x7f, - 0x2e, 0x1f, 0xdb, 0x05, 0x20, 0xaf, 0xb0, 0x02, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x20, 0xdb, 0x02, 0x20, 0xa2, 0xb0, 0x02, - 0xe7, 0xf6, 0x2f, 0x04, 0xd1, 0x00, 0x27, 0x00, - 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, 0x49, 0x17, - 0x68, 0x09, 0x18, 0x40, 0x90, 0x01, 0x98, 0x00, - 0x28, 0x00, 0xd0, 0x0d, 0xf0, 0x12, 0xfc, 0x74, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0x92, - 0x20, 0x02, 0xf0, 0x00, 0xfb, 0x1d, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0x9f, 0xe0, 0x13, - 0xf0, 0x12, 0xfc, 0x66, 0x1c, 0x05, 0x1c, 0x21, - 0x22, 0x01, 0x02, 0x92, 0x20, 0x01, 0xf0, 0x00, - 0xfb, 0x0f, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x12, - 0xfc, 0x91, 0x98, 0x02, 0x21, 0x80, 0x68, 0x89, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x00, 0x55, 0xc6, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xc4, 0xb0, 0x02, - 0xe7, 0xc2, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x30, - 0xb5, 0xff, 0xb0, 0x82, 0x99, 0x03, 0x04, 0x0d, - 0x0c, 0x2d, 0x9a, 0x04, 0x06, 0x10, 0x0e, 0x00, - 0x90, 0x00, 0x9b, 0x05, 0x06, 0x18, 0x0e, 0x00, - 0x90, 0x01, 0x98, 0x00, 0x28, 0x1f, 0xdb, 0x05, - 0x20, 0xaf, 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x01, 0x23, 0x80, - 0x40, 0x18, 0xd1, 0x2f, 0x98, 0x00, 0x49, 0x2c, - 0x68, 0x09, 0x73, 0x08, 0x27, 0x00, 0x2f, 0x20, - 0xdb, 0x04, 0xe0, 0x26, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x20, 0x01, 0x40, 0xb8, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x1c, 0x24, 0x00, - 0x20, 0x40, 0x40, 0x28, 0xd0, 0x04, 0x04, 0x20, - 0x0c, 0x00, 0x24, 0x01, 0x03, 0xa4, 0x43, 0x04, - 0x20, 0x80, 0x40, 0x28, 0xd0, 0x04, 0x04, 0x20, - 0x0c, 0x00, 0x24, 0x01, 0x03, 0xe4, 0x43, 0x04, - 0xf0, 0x12, 0xfc, 0x0e, 0x1c, 0x06, 0x1c, 0x22, - 0x1c, 0x39, 0x20, 0x01, 0xf0, 0x00, 0xfa, 0xb8, - 0x2e, 0x80, 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0x3a, - 0xe7, 0xd8, 0xe0, 0x24, 0x27, 0x00, 0x2f, 0x20, - 0xdb, 0x04, 0xe0, 0x20, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x20, 0x01, 0x40, 0xb8, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x16, 0x24, 0x00, - 0x20, 0x40, 0x40, 0x28, 0xd0, 0x01, 0x4b, 0x0d, - 0x40, 0x1c, 0x20, 0x80, 0x40, 0x28, 0xd0, 0x01, - 0x04, 0x64, 0x0c, 0x64, 0xf0, 0x12, 0xfb, 0xe8, - 0x1c, 0x06, 0x1c, 0x22, 0x1c, 0x39, 0x20, 0x02, - 0xf0, 0x00, 0xfa, 0x92, 0x2e, 0x80, 0xd0, 0x01, - 0xf0, 0x12, 0xfc, 0x14, 0xe7, 0xde, 0x20, 0x00, - 0xb0, 0x02, 0xe7, 0x9f, 0xb0, 0x02, 0xe7, 0x9d, - 0x2e, 0x08, 0x9b, 0x7c, 0x00, 0x00, 0xbf, 0xff, - 0xb5, 0x80, 0x1c, 0x07, 0x48, 0x07, 0x68, 0x01, - 0x20, 0x00, 0xf0, 0x1b, 0xfa, 0xad, 0x60, 0x38, - 0x48, 0x04, 0x68, 0x00, 0x1d, 0x01, 0x20, 0x00, - 0xf0, 0x1b, 0xfa, 0xa6, 0x60, 0x78, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x9b, 0x7c, - 0xb5, 0xf7, 0x1c, 0x07, 0x99, 0x01, 0x06, 0x0e, - 0x0e, 0x36, 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, - 0x2e, 0x1f, 0xdb, 0x04, 0x20, 0xaf, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x20, - 0xdb, 0x01, 0x20, 0xa2, 0xe7, 0xf7, 0x20, 0x80, - 0x40, 0x20, 0xd0, 0x0d, 0xf0, 0x12, 0xfb, 0xa8, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0xd2, - 0x20, 0x02, 0xf0, 0x00, 0xfa, 0x51, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0xd3, 0xe0, 0x16, - 0x48, 0x0c, 0x68, 0x00, 0x60, 0x07, 0x48, 0x0b, - 0x68, 0x00, 0x71, 0x46, 0x20, 0xff, 0x49, 0x09, - 0x68, 0x09, 0x71, 0x08, 0xf0, 0x12, 0xfb, 0x90, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0xd2, - 0x20, 0x01, 0xf0, 0x00, 0xfa, 0x39, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0xbb, 0x20, 0x00, - 0xe7, 0xcd, 0xe7, 0xcc, 0x2e, 0x08, 0x9b, 0x80, - 0xb5, 0xf7, 0x1c, 0x07, 0x99, 0x01, 0x06, 0x0e, - 0x0e, 0x36, 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, - 0x2e, 0x1f, 0xdb, 0x04, 0x20, 0xaf, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x20, - 0xdb, 0x01, 0x20, 0xa2, 0xe7, 0xf7, 0x20, 0x80, - 0x40, 0x20, 0xd0, 0x0d, 0xf0, 0x12, 0xfb, 0x68, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x03, 0x12, - 0x20, 0x02, 0xf0, 0x00, 0xfa, 0x11, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0x93, 0xe0, 0x16, - 0x48, 0x0c, 0x68, 0x00, 0x60, 0x07, 0x48, 0x0b, - 0x68, 0x00, 0x71, 0x46, 0x20, 0xff, 0x49, 0x09, - 0x68, 0x09, 0x71, 0x08, 0xf0, 0x12, 0xfb, 0x50, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x03, 0x12, - 0x20, 0x01, 0xf0, 0x00, 0xf9, 0xf9, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0x7b, 0x20, 0x00, - 0xe7, 0xcd, 0xe7, 0xcc, 0x2e, 0x08, 0x9b, 0x84, - 0xb5, 0xff, 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x99, 0x02, 0x06, 0x0d, - 0x0e, 0x2d, 0x9a, 0x03, 0x06, 0x16, 0x0e, 0x36, - 0x9f, 0x04, 0x1c, 0x29, 0x98, 0x00, 0xf0, 0x00, - 0xf8, 0x91, 0x28, 0x00, 0xd0, 0x05, 0x20, 0xa2, - 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x79, 0x38, 0x79, 0x79, 0x18, 0x40, - 0x79, 0xb9, 0x18, 0x40, 0x06, 0x04, 0x0e, 0x24, - 0x79, 0xb8, 0x02, 0x00, 0x43, 0x04, 0x00, 0x68, - 0x19, 0x80, 0x01, 0x00, 0x49, 0x15, 0x68, 0x09, - 0x50, 0x0c, 0x9b, 0x04, 0x88, 0x99, 0x00, 0x68, - 0x19, 0x80, 0x01, 0x00, 0x4a, 0x11, 0x68, 0x12, - 0x18, 0x80, 0x60, 0x41, 0x78, 0x78, 0x78, 0x39, - 0x18, 0x40, 0x78, 0xb9, 0x18, 0x40, 0x06, 0x04, - 0x0e, 0x24, 0x78, 0xb8, 0x02, 0x00, 0x43, 0x04, - 0x00, 0x68, 0x19, 0x80, 0x01, 0x00, 0x49, 0x09, - 0x68, 0x09, 0x18, 0x40, 0x60, 0x84, 0x9b, 0x04, - 0x88, 0x19, 0x00, 0x68, 0x19, 0x80, 0x01, 0x00, - 0x4a, 0x04, 0x68, 0x12, 0x18, 0x80, 0x60, 0xc1, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xc5, 0xb0, 0x01, - 0xe7, 0xc3, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x34, - 0xb5, 0xff, 0x1c, 0x07, 0x06, 0x3d, 0x0e, 0x2d, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0x9a, 0x02, - 0x06, 0x16, 0x0e, 0x36, 0x1c, 0x21, 0x1c, 0x28, - 0xf0, 0x00, 0xf8, 0x40, 0x28, 0x00, 0xd0, 0x04, - 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x9a, 0x03, 0x1c, 0x31, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x02, 0xe7, 0xf5, 0xe7, 0xf4, - 0xb4, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, - 0x06, 0x21, 0x0e, 0x09, 0x06, 0x3a, 0x0e, 0x12, - 0x29, 0x10, 0xdb, 0x02, 0x20, 0xa2, 0xbc, 0xf0, - 0x47, 0x70, 0x88, 0xdd, 0x00, 0x48, 0x18, 0x80, - 0x01, 0x00, 0x4e, 0x0f, 0x68, 0x36, 0x50, 0x35, - 0x88, 0x98, 0x00, 0x4d, 0x18, 0xad, 0x01, 0x2d, - 0x4e, 0x0b, 0x68, 0x36, 0x19, 0xad, 0x60, 0x68, - 0x88, 0x58, 0x00, 0x4d, 0x18, 0xad, 0x01, 0x2d, - 0x4e, 0x07, 0x68, 0x36, 0x19, 0xad, 0x60, 0xa8, - 0x88, 0x18, 0x00, 0x4d, 0x18, 0xad, 0x01, 0x2d, - 0x4e, 0x03, 0x68, 0x36, 0x19, 0xad, 0x60, 0xe8, - 0x20, 0x00, 0xe7, 0xdc, 0xe7, 0xdb, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x34, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x39, 0x0e, 0x09, 0x06, 0x15, - 0x0e, 0x2d, 0xb0, 0x81, 0x29, 0x20, 0xdb, 0x03, - 0x20, 0xa2, 0xb0, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2d, 0x10, 0xdb, 0x02, 0x20, 0xa2, 0xb0, 0x01, - 0xe7, 0xf8, 0x00, 0xc8, 0x4b, 0x0a, 0x68, 0x1b, - 0x18, 0xc4, 0x68, 0x20, 0x90, 0x00, 0x98, 0x00, - 0x4b, 0x08, 0x40, 0x18, 0x90, 0x00, 0x00, 0x68, - 0x23, 0x1e, 0x40, 0x18, 0x9b, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x98, 0x00, 0x60, 0x20, 0x20, 0x00, - 0xb0, 0x01, 0xe7, 0xe3, 0xb0, 0x01, 0xe7, 0xe1, - 0x2e, 0x08, 0x9b, 0x3c, 0xff, 0xff, 0xdf, 0xe1, - 0x20, 0xff, 0x49, 0x02, 0x68, 0x09, 0x70, 0x08, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x98, - 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0xb0, 0x83, - 0x20, 0x00, 0x43, 0xc0, 0x23, 0x19, 0x06, 0x9b, - 0x67, 0x58, 0x08, 0xb9, 0x00, 0x89, 0x1a, 0x78, - 0x90, 0x02, 0x98, 0x02, 0x18, 0x10, 0x07, 0x80, - 0x0f, 0x80, 0x90, 0x01, 0x98, 0x02, 0x18, 0x10, - 0x08, 0x80, 0x90, 0x00, 0x9b, 0x02, 0x20, 0x03, - 0x1a, 0xc0, 0x23, 0x19, 0x06, 0x9b, 0x67, 0xd8, - 0x24, 0x00, 0x98, 0x00, 0x42, 0x84, 0xd3, 0x02, - 0xe0, 0x06, 0x34, 0x01, 0xe7, 0xf9, 0xc9, 0x08, - 0x20, 0x19, 0x06, 0x80, 0x67, 0x03, 0xe7, 0xf8, - 0x98, 0x01, 0x28, 0x00, 0xd0, 0x0b, 0x9b, 0x01, - 0x00, 0xd8, 0x25, 0x00, 0x43, 0xed, 0x40, 0xc5, - 0x1c, 0x2b, 0x43, 0xdb, 0x68, 0x0d, 0x40, 0x2b, - 0x25, 0x19, 0x06, 0xad, 0x67, 0x2b, 0x20, 0x19, - 0x06, 0x80, 0x6f, 0x40, 0xb0, 0x03, 0xbc, 0xb0, - 0x47, 0x70, 0xb0, 0x03, 0xe7, 0xfb, 0x1c, 0x01, - 0x06, 0x08, 0x0e, 0x00, 0x22, 0x19, 0x06, 0x92, - 0x63, 0x90, 0x47, 0x70, 0xb4, 0xf0, 0x48, 0x4d, - 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x74, - 0x22, 0x00, 0x27, 0x00, 0x49, 0x4a, 0x20, 0x00, - 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x16, 0x1c, 0x43, - 0x06, 0x18, 0x0e, 0x00, 0xe7, 0xf8, 0x00, 0x83, - 0x58, 0xcc, 0x23, 0x01, 0x03, 0x5b, 0x40, 0x23, - 0xd0, 0x0b, 0x24, 0x01, 0x40, 0x84, 0x1c, 0x23, - 0x43, 0x1f, 0x00, 0x83, 0x58, 0xcc, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x9c, 0x1c, 0x23, 0x00, 0x84, - 0x51, 0x0b, 0xe7, 0xe8, 0x20, 0x00, 0x28, 0x04, - 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x43, 0x06, 0x18, - 0x0e, 0x00, 0xe7, 0xf8, 0x01, 0x05, 0x4b, 0x39, - 0x18, 0xec, 0x22, 0x00, 0x2a, 0x04, 0xdb, 0x04, - 0xe0, 0x0e, 0x1c, 0x53, 0x06, 0x1a, 0x0e, 0x12, - 0xe7, 0xf8, 0x4b, 0x35, 0x60, 0x23, 0x4b, 0x35, - 0x60, 0x63, 0x23, 0x00, 0x60, 0xa3, 0x23, 0x00, - 0x60, 0xe3, 0x34, 0xff, 0x34, 0x01, 0xe7, 0xf0, - 0xe7, 0xe4, 0xb0, 0x82, 0x4b, 0x2b, 0x69, 0xdc, - 0x23, 0x0c, 0x40, 0x23, 0x08, 0x9c, 0xab, 0x01, - 0x70, 0x1c, 0x4b, 0x28, 0x69, 0xdc, 0x23, 0x30, - 0x40, 0x23, 0x09, 0x1c, 0xab, 0x00, 0x70, 0x1c, - 0xab, 0x01, 0x78, 0x1b, 0xac, 0x00, 0x78, 0x24, - 0x42, 0xa3, 0xd1, 0x09, 0x23, 0x33, 0x06, 0x5b, - 0x6b, 0xdb, 0x2b, 0x00, 0xd1, 0x04, 0x4b, 0x1f, - 0x6a, 0x9b, 0x07, 0xdb, 0x0f, 0xdb, 0xd0, 0x21, - 0x4b, 0x1c, 0x69, 0xdd, 0x23, 0x0c, 0x40, 0x2b, - 0x08, 0x9c, 0x00, 0xa5, 0x26, 0x01, 0x40, 0xae, - 0x1c, 0x33, 0x25, 0x33, 0x06, 0x6d, 0x64, 0x2b, - 0x25, 0x01, 0x40, 0xa5, 0x1c, 0x2b, 0x4d, 0x1a, - 0x63, 0xab, 0x4b, 0x14, 0x69, 0xdd, 0x23, 0x0c, - 0x40, 0x2b, 0x08, 0x9d, 0xab, 0x01, 0x70, 0x1d, - 0xe0, 0x00, 0xe0, 0x1d, 0x4b, 0x0f, 0x69, 0xdd, - 0x23, 0x30, 0x40, 0x2b, 0x09, 0x1d, 0xab, 0x00, - 0x70, 0x1d, 0xe7, 0xcd, 0xb0, 0x02, 0x20, 0x00, - 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x10, 0x1c, 0x43, - 0x06, 0x18, 0x0e, 0x00, 0xe7, 0xf8, 0x24, 0x01, - 0x40, 0x84, 0x1c, 0x23, 0x40, 0x3b, 0xd0, 0x06, - 0x00, 0x83, 0x58, 0xcc, 0x23, 0x01, 0x03, 0x5b, - 0x43, 0x23, 0x00, 0x84, 0x51, 0x0b, 0xe7, 0xee, - 0xbc, 0xf0, 0x47, 0x70, 0x66, 0x00, 0x01, 0x00, - 0x64, 0x00, 0x00, 0x80, 0x9e, 0x00, 0x00, 0xc0, - 0x9e, 0x00, 0x00, 0x00, 0x2e, 0x0f, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x80, 0xb4, 0x80, 0x1c, 0x03, - 0x1c, 0x0a, 0x48, 0x0a, 0x68, 0x00, 0x68, 0x01, - 0x20, 0x19, 0x06, 0x80, 0x6a, 0x80, 0x0a, 0x40, - 0x00, 0x4f, 0x43, 0x38, 0x60, 0x18, 0x0f, 0xc8, - 0x07, 0xc0, 0x60, 0x10, 0x68, 0x10, 0x0f, 0xc0, - 0x60, 0x10, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, - 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xa4, - 0xb5, 0x80, 0x1c, 0x07, 0x48, 0x05, 0x68, 0x00, - 0x1d, 0xc1, 0x31, 0x01, 0x20, 0x00, 0xf0, 0x1b, - 0xf8, 0x37, 0x60, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x7c, - 0xb4, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, - 0x06, 0x20, 0x0e, 0x00, 0x06, 0x39, 0x0e, 0x09, - 0x04, 0x1a, 0x0c, 0x12, 0x4d, 0x07, 0x68, 0x2d, - 0x70, 0xe8, 0x4d, 0x06, 0x68, 0x2d, 0x70, 0xa9, - 0x4d, 0x04, 0x68, 0x2d, 0x80, 0x2a, 0x25, 0x01, - 0x04, 0x2d, 0x26, 0x33, 0x06, 0x76, 0x60, 0x35, - 0xbc, 0xf0, 0x47, 0x70, 0x2e, 0x08, 0x9b, 0xa8, - 0x20, 0x0d, 0x06, 0xc0, 0x69, 0xc0, 0x47, 0x70, - 0xe7, 0xfd, 0x1c, 0x01, 0x31, 0x01, 0x23, 0x2d, - 0x01, 0x1b, 0x42, 0x99, 0xd9, 0x03, 0x20, 0x2d, - 0x01, 0x00, 0x47, 0x70, 0xe0, 0x01, 0x1c, 0x08, - 0xe7, 0xfb, 0xe7, 0xfa, 0xb5, 0xf3, 0xb0, 0x85, - 0x20, 0x00, 0x90, 0x03, 0x20, 0x00, 0x90, 0x02, - 0x9f, 0x05, 0x69, 0x3d, 0x69, 0x38, 0x28, 0x13, - 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x05, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x99, 0x06, - 0x68, 0x88, 0x68, 0x09, 0x1a, 0x40, 0x1c, 0x41, - 0x91, 0x04, 0x69, 0x78, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, - 0x00, 0xa8, 0x49, 0xf8, 0x58, 0x08, 0x99, 0x04, - 0x43, 0x48, 0x61, 0xf8, 0x99, 0x06, 0x68, 0x88, - 0x68, 0x09, 0x1a, 0x40, 0x30, 0x01, 0x63, 0xb8, - 0x68, 0xf8, 0x90, 0x01, 0x48, 0xf2, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x06, 0x98, 0x01, 0x28, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x05, 0x98, 0x01, 0x28, 0x08, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, - 0xd0, 0x07, 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x06, - 0xf0, 0x02, 0xf9, 0xea, 0x20, 0x00, 0xb0, 0x05, - 0xe7, 0xc5, 0x49, 0xe6, 0x20, 0x91, 0xf0, 0x1a, - 0xff, 0xb7, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x0b, 0xfb, 0x64, 0xe7, 0xf5, 0x98, 0x01, - 0x00, 0x80, 0x49, 0xe1, 0x58, 0x08, 0x99, 0x05, - 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, 0x49, 0xdd, - 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, 0xe7, 0xae, - 0x48, 0xd9, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, - 0x2d, 0x0b, 0xdb, 0x26, 0x2d, 0x12, 0xdc, 0x24, - 0x2d, 0x0b, 0xdb, 0x0b, 0x2d, 0x12, 0xdc, 0x09, - 0x48, 0xd6, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, - 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x06, 0xf0, 0x02, - 0xf9, 0xbb, 0xe0, 0x16, 0x6b, 0x38, 0xf7, 0xff, - 0xff, 0x7c, 0x90, 0x00, 0x6a, 0xb9, 0x9a, 0x00, - 0x48, 0xcf, 0xf0, 0x0c, 0xfb, 0x4b, 0x1d, 0xf8, - 0x30, 0x21, 0x99, 0x06, 0xf0, 0x02, 0xf9, 0xac, - 0x6b, 0x38, 0xf7, 0xff, 0xff, 0x6e, 0x90, 0x00, - 0x6a, 0xb9, 0x9a, 0x00, 0x48, 0xc8, 0xf0, 0x0c, - 0xfb, 0x6b, 0x48, 0xc8, 0x68, 0x00, 0x99, 0x05, - 0x42, 0x88, 0xd1, 0x30, 0x48, 0xc0, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x2c, 0x48, 0xc1, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x0a, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x28, 0x01, - 0xd1, 0x03, 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0xc8, 0x48, 0xba, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x0d, 0x6a, 0xb8, 0x30, 0x01, 0x05, 0x00, - 0x6a, 0xf9, 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, - 0x6b, 0x79, 0x31, 0x02, 0x43, 0x08, 0x21, 0x0d, - 0x06, 0xc9, 0x61, 0x88, 0xe0, 0x0b, 0x6a, 0xb8, - 0x30, 0x01, 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, - 0x02, 0x89, 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, - 0x43, 0x08, 0x49, 0xaf, 0x60, 0x08, 0x2d, 0x0b, - 0xdb, 0x15, 0x2d, 0x12, 0xdc, 0x13, 0x48, 0xa9, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0f, 0x48, 0xa4, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x0b, 0x20, 0x00, - 0x62, 0xb8, 0x20, 0x00, 0x62, 0xf8, 0x48, 0xa7, - 0x63, 0x38, 0x48, 0xa7, 0x63, 0x78, 0x6b, 0x38, - 0xf7, 0xff, 0xff, 0x1b, 0x90, 0x00, 0x48, 0x9c, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x16, 0x20, 0x0d, - 0x06, 0xc0, 0x68, 0x80, 0x90, 0x03, 0x20, 0x00, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x01, - 0xfb, 0x07, 0x6b, 0x38, 0xf7, 0xff, 0xff, 0x09, - 0x90, 0x00, 0x9a, 0x00, 0x99, 0x01, 0x1c, 0x38, - 0xf0, 0x01, 0xfa, 0x8c, 0x98, 0x03, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0x48, 0x93, 0x68, 0x00, - 0x99, 0x05, 0x42, 0x88, 0xd1, 0x0b, 0x48, 0x8c, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x07, 0x48, 0x8d, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x98, 0x02, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x48, 0x86, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, 0x48, 0x87, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, 0xb0, 0x84, - 0x98, 0x05, 0xf0, 0x0c, 0xf9, 0xe1, 0x28, 0x00, - 0xd1, 0x0e, 0x2d, 0x0b, 0xdb, 0x01, 0x2d, 0x12, - 0xdd, 0x0a, 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x0a, - 0xf0, 0x02, 0xf9, 0x12, 0x20, 0x92, 0x49, 0x7b, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x09, 0xe6, 0xea, - 0x49, 0x80, 0x20, 0x91, 0xf0, 0x1a, 0xfe, 0xdc, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0c, - 0xfa, 0x22, 0x20, 0x92, 0x49, 0x7b, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x7b, 0x68, 0x09, 0x60, 0x08, - 0x2d, 0x0b, 0xdb, 0x39, 0x2d, 0x12, 0xdc, 0x37, - 0xb0, 0x81, 0x24, 0x00, 0x20, 0x00, 0x90, 0x03, - 0x20, 0x01, 0x49, 0x75, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x6a, 0xb8, - 0x30, 0x01, 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, - 0x02, 0x89, 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, - 0x43, 0x08, 0x90, 0x00, 0x20, 0x00, 0x62, 0xb8, - 0x20, 0x00, 0x62, 0xf8, 0x48, 0x67, 0x63, 0x38, - 0x48, 0x67, 0x63, 0x78, 0x6b, 0x38, 0xf7, 0xff, - 0xfe, 0x9c, 0x90, 0x02, 0x48, 0x66, 0x68, 0x00, - 0x23, 0x77, 0x01, 0x1b, 0x18, 0xc0, 0x9a, 0x02, - 0x1c, 0x39, 0xf0, 0x0b, 0xfe, 0x05, 0x98, 0x00, - 0x49, 0x61, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0xc8, 0x48, 0x5e, 0x68, 0x00, - 0xf0, 0x0c, 0xf9, 0xf8, 0xb0, 0x01, 0xe1, 0x2b, - 0x24, 0x00, 0x26, 0x00, 0x2e, 0x00, 0xd1, 0x16, - 0x2c, 0x07, 0xd2, 0x14, 0x6a, 0xf8, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, 0x00, 0x83, - 0x18, 0x18, 0x00, 0xc0, 0xe0, 0x00, 0xe1, 0x3c, - 0x4a, 0x53, 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, - 0xd1, 0x00, 0x26, 0x01, 0xe7, 0xe6, 0x2e, 0x00, - 0xd1, 0x13, 0x2c, 0x18, 0xd2, 0x11, 0x6a, 0xf8, - 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, - 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x48, 0x68, 0x12, - 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x40, 0x42, 0x81, 0xd1, 0x00, 0x26, 0x01, - 0xe7, 0xe9, 0x3c, 0x01, 0x6b, 0x38, 0xf7, 0xff, - 0xfe, 0x50, 0x90, 0x01, 0x2c, 0x07, 0xd2, 0x05, - 0x48, 0x3f, 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0b, - 0xfc, 0xcb, 0xe0, 0x06, 0x2c, 0x18, 0xd2, 0x04, - 0x1f, 0xe0, 0x49, 0x3b, 0x68, 0x09, 0xf0, 0x0b, - 0xfd, 0x01, 0x48, 0x3a, 0x49, 0x38, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x66, 0xc8, - 0x48, 0x36, 0x49, 0x35, 0x68, 0x09, 0x23, 0x09, - 0x01, 0xdb, 0x18, 0xc9, 0x67, 0x08, 0x48, 0x33, - 0x49, 0x31, 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, - 0x18, 0xc9, 0x66, 0x88, 0x48, 0x2f, 0x49, 0x2e, - 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, - 0x66, 0x48, 0x20, 0x00, 0x49, 0x2a, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x64, 0x88, - 0x6b, 0x79, 0x48, 0x27, 0x68, 0x00, 0xf0, 0x0b, - 0xfd, 0x4b, 0x94, 0x02, 0x1d, 0xf8, 0x30, 0x21, - 0x99, 0x0a, 0xf0, 0x02, 0xf8, 0x4d, 0x24, 0x00, - 0x26, 0x00, 0x2e, 0x00, 0xd1, 0x14, 0x2c, 0x07, - 0xd2, 0x12, 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x20, 0x34, 0x01, 0x00, 0x83, 0x18, 0x18, - 0x00, 0xc0, 0x4a, 0x1b, 0x68, 0x12, 0x18, 0x80, - 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, - 0x42, 0x81, 0xda, 0x00, 0x26, 0x01, 0xe7, 0xe8, - 0x2e, 0x00, 0xd1, 0x2f, 0x2c, 0x18, 0xd2, 0x2d, - 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, - 0x34, 0x01, 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x10, - 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, 0xda, 0x1c, - 0xe0, 0x1a, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xbb, 0x00, 0x2e, 0x08, 0xba, 0x28, - 0x2e, 0x08, 0x9b, 0xb8, 0x00, 0x00, 0x02, 0xcf, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x20, 0x00, 0x00, 0xff, 0xff, - 0x26, 0x01, 0xe7, 0xcd, 0x3c, 0x01, 0x6b, 0x38, - 0xf7, 0xff, 0xfd, 0xc3, 0x90, 0x01, 0x2c, 0x07, - 0xd2, 0x12, 0x48, 0x48, 0x68, 0x01, 0x1c, 0x20, - 0xf0, 0x0b, 0xfb, 0xcc, 0x00, 0xa0, 0x19, 0x00, - 0x00, 0xc0, 0x49, 0x44, 0x68, 0x09, 0x18, 0x40, - 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc0, 0x9a, 0x01, - 0x1c, 0x39, 0xf0, 0x0b, 0xfd, 0x21, 0xe0, 0x4a, - 0x2c, 0x18, 0xd2, 0x48, 0x1f, 0xe0, 0x49, 0x3d, - 0x68, 0x09, 0xf0, 0x0b, 0xfc, 0x0b, 0x20, 0x4c, - 0x43, 0x60, 0x49, 0x3a, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, 0x9a, 0x01, - 0x1c, 0x39, 0xf0, 0x0b, 0xfd, 0x0d, 0x20, 0x4c, - 0x43, 0x60, 0x49, 0x34, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x82, 0x6f, 0xc0, - 0x28, 0x00, 0xd0, 0x17, 0x20, 0x4c, 0x43, 0x60, - 0x49, 0x2e, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0xd0, 0x0b, 0x20, 0x4c, 0x43, 0x60, - 0x49, 0x28, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x0c, 0x00, - 0x04, 0x00, 0xd1, 0x0a, 0x20, 0x02, 0x21, 0x4c, - 0x43, 0x61, 0x4a, 0x22, 0x68, 0x12, 0x18, 0x89, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, - 0xe0, 0x09, 0x20, 0x03, 0x21, 0x4c, 0x43, 0x61, - 0x4a, 0x1c, 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, - 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, 0x48, 0x19, - 0x68, 0x00, 0xf0, 0x0c, 0xf8, 0xcf, 0x6b, 0x79, - 0x48, 0x16, 0x68, 0x00, 0xf0, 0x0b, 0xfc, 0x36, - 0x98, 0x02, 0x42, 0x84, 0xda, 0x01, 0x1c, 0x21, - 0xe0, 0x00, 0x99, 0x02, 0x91, 0x00, 0x99, 0x00, - 0x48, 0x10, 0x68, 0x00, 0xf0, 0x0b, 0xfd, 0x46, - 0x49, 0x0f, 0x20, 0x91, 0xf0, 0x1a, 0xfd, 0x58, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x0b, - 0x68, 0x00, 0x90, 0x03, 0x48, 0x0b, 0x68, 0x00, - 0x49, 0x08, 0x60, 0x08, 0x98, 0x03, 0x49, 0x09, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, - 0xb0, 0x04, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x05, 0xe5, 0x4b, 0xb0, 0x05, - 0xe5, 0x49, 0x00, 0x00, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xba, 0x2c, 0xb5, 0xff, 0x1c, 0x07, - 0x9d, 0x09, 0xb0, 0x89, 0x26, 0x00, 0x20, 0x00, - 0x90, 0x03, 0x99, 0x0a, 0x68, 0x4c, 0x2d, 0x13, - 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x09, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x15, - 0x60, 0x04, 0x20, 0x00, 0x60, 0xe0, 0x20, 0x00, - 0x61, 0x20, 0x69, 0x60, 0x4b, 0xf9, 0x40, 0x18, - 0x61, 0x60, 0x02, 0x00, 0x69, 0x60, 0x4b, 0xf8, - 0x40, 0x18, 0x61, 0x60, 0x04, 0x80, 0x69, 0x60, - 0x4b, 0xf6, 0x40, 0x18, 0x61, 0x60, 0x05, 0x80, - 0x69, 0x60, 0x23, 0xc0, 0x43, 0xdb, 0x40, 0x18, - 0x61, 0x60, 0x06, 0x00, 0x69, 0x60, 0x4b, 0xf2, - 0x40, 0x18, 0x61, 0x60, 0x04, 0x40, 0x69, 0x60, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0x61, 0x60, - 0x06, 0x80, 0x69, 0x60, 0x09, 0x40, 0x01, 0x40, - 0x61, 0x60, 0x06, 0xc0, 0x20, 0x00, 0x61, 0xa0, - 0x20, 0x00, 0x61, 0xe0, 0x20, 0x00, 0x62, 0x20, - 0x20, 0x00, 0x62, 0x60, 0x20, 0x00, 0x63, 0xa0, - 0x20, 0x00, 0x63, 0xe0, 0x20, 0x00, 0x64, 0x60, - 0x20, 0x00, 0x64, 0x20, 0x20, 0x00, 0x60, 0x20, - 0x20, 0x00, 0x71, 0x20, 0x99, 0x0a, 0x68, 0x48, - 0x64, 0xe0, 0x99, 0x0a, 0x68, 0x08, 0x64, 0xa0, - 0x1d, 0xe0, 0x30, 0x21, 0x99, 0x13, 0xf0, 0x01, - 0xff, 0x07, 0x2d, 0x0b, 0xdb, 0x06, 0x2d, 0x12, - 0xdc, 0x04, 0x1d, 0xe0, 0x30, 0x49, 0x99, 0x13, - 0xf0, 0x01, 0xfe, 0xfe, 0x6b, 0x20, 0x6a, 0xa1, - 0x1a, 0x40, 0x30, 0x01, 0x63, 0xa0, 0x00, 0xa8, - 0x49, 0xd4, 0x58, 0x08, 0x69, 0x61, 0x09, 0x49, - 0x01, 0x49, 0x06, 0xc0, 0x0e, 0xc0, 0x43, 0x08, - 0x61, 0x60, 0x06, 0xc0, 0x0e, 0xc0, 0x6b, 0x20, - 0x6a, 0xa1, 0x1a, 0x40, 0x1c, 0x41, 0x91, 0x04, - 0x69, 0x60, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, - 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, 0x00, 0xa8, - 0x49, 0xc9, 0x58, 0x08, 0x99, 0x04, 0x43, 0x48, - 0x61, 0xe0, 0x2d, 0x13, 0xd1, 0x04, 0x20, 0x00, - 0x90, 0x14, 0x20, 0x00, 0x61, 0xa0, 0xe0, 0x13, - 0x9b, 0x0c, 0x68, 0x58, 0x90, 0x01, 0x98, 0x01, - 0x08, 0x80, 0x61, 0xa0, 0x98, 0x01, 0x64, 0x60, - 0x9b, 0x0c, 0x68, 0x18, 0x64, 0x20, 0x20, 0x00, - 0x62, 0x60, 0x9a, 0x0b, 0x63, 0xe2, 0x69, 0x60, - 0x4b, 0xb6, 0x40, 0x18, 0x61, 0x60, 0x02, 0x00, - 0x69, 0x60, 0x4b, 0xb6, 0x40, 0x18, 0x61, 0x60, - 0x05, 0x80, 0x69, 0x60, 0x23, 0x0f, 0x02, 0x9b, - 0x43, 0x18, 0x61, 0x60, 0x04, 0x80, 0x69, 0x60, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0x61, 0x60, - 0x06, 0x80, 0x69, 0x60, 0x23, 0xc0, 0x43, 0x18, - 0x61, 0x60, 0x06, 0x00, 0x69, 0x60, 0x23, 0x01, - 0x03, 0x9b, 0x43, 0x18, 0x61, 0x60, 0x04, 0x40, - 0x98, 0x14, 0x60, 0xe0, 0x61, 0x25, 0x48, 0xab, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x98, 0x14, - 0x28, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xe0, 0x05, 0x98, 0x14, 0x28, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x09, - 0xe7, 0x35, 0x49, 0xa1, 0x20, 0x91, 0xf0, 0x1a, - 0xfc, 0x5b, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x0b, 0xf8, 0x08, 0xe7, 0xf5, 0x48, 0x9d, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x53, 0x68, 0x38, - 0x01, 0x80, 0x0f, 0xc0, 0x68, 0xa1, 0x4b, 0x9a, - 0x40, 0x19, 0x07, 0xc0, 0x09, 0x80, 0x43, 0x08, - 0x60, 0xa0, 0x01, 0x80, 0x0f, 0xc0, 0x68, 0x38, - 0x01, 0xc0, 0x0f, 0xc0, 0x68, 0xa1, 0x4b, 0x95, - 0x40, 0x19, 0x07, 0xc0, 0x09, 0xc0, 0x43, 0x08, - 0x60, 0xa0, 0x01, 0xc0, 0x0f, 0xc0, 0x68, 0x38, - 0x02, 0x00, 0x0e, 0x00, 0x68, 0xa1, 0x4b, 0x85, - 0x40, 0x19, 0x06, 0x00, 0x0e, 0x00, 0x04, 0x00, - 0x43, 0x08, 0x60, 0xa0, 0x02, 0x00, 0x0e, 0x00, - 0x48, 0x86, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x2a, - 0x2f, 0x00, 0xd0, 0x28, 0x20, 0x0d, 0x06, 0xc0, - 0x6a, 0x00, 0x1c, 0x06, 0x68, 0x38, 0x4b, 0x85, - 0x43, 0x98, 0xd0, 0x06, 0x68, 0x38, 0x02, 0x00, - 0x0e, 0x01, 0x20, 0x01, 0x40, 0x88, 0x43, 0x06, - 0xe0, 0x05, 0x68, 0x38, 0x02, 0x00, 0x0e, 0x00, - 0x21, 0x01, 0x40, 0x81, 0x43, 0x8e, 0x68, 0x38, - 0x4b, 0x7b, 0x43, 0x98, 0xd0, 0x08, 0x68, 0x38, - 0x02, 0x00, 0x0e, 0x00, 0x1d, 0xc1, 0x31, 0x01, - 0x20, 0x01, 0x40, 0x88, 0x43, 0x06, 0xe0, 0x06, - 0x68, 0x38, 0x02, 0x00, 0x0e, 0x00, 0x30, 0x08, - 0x21, 0x01, 0x40, 0x81, 0x43, 0x8e, 0x2d, 0x0b, - 0xdb, 0x0a, 0x2d, 0x12, 0xdc, 0x08, 0x48, 0x6f, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x04, 0x20, 0x51, - 0x01, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x08, - 0x98, 0x14, 0x00, 0x80, 0x49, 0x6c, 0x58, 0x08, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x83, 0x90, 0x03, - 0x2d, 0x0b, 0xdb, 0x08, 0x2d, 0x12, 0xdc, 0x06, - 0x48, 0x68, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x84, 0x90, 0x03, 0xe0, 0x06, 0x9a, 0x0b, - 0x2a, 0x01, 0xd1, 0x03, 0x2d, 0x13, 0xd0, 0x01, - 0x20, 0x82, 0x90, 0x03, 0x98, 0x03, 0x28, 0x00, - 0xd0, 0x07, 0x20, 0x92, 0x49, 0x5a, 0x60, 0x08, - 0x20, 0x08, 0x60, 0xe0, 0x98, 0x03, 0xb0, 0x09, - 0xe6, 0xa1, 0x98, 0x15, 0x68, 0x01, 0x98, 0x14, - 0x00, 0x80, 0x4a, 0x59, 0x50, 0x11, 0x6a, 0xa0, - 0x28, 0x00, 0xda, 0x01, 0x20, 0x00, 0x62, 0xa0, - 0x6b, 0x20, 0x28, 0x00, 0xdc, 0x01, 0x20, 0x01, - 0x63, 0x20, 0x6a, 0xe0, 0x28, 0x00, 0xda, 0x01, - 0x20, 0x00, 0x62, 0xe0, 0x6b, 0x60, 0x4b, 0x52, - 0x42, 0x98, 0xdd, 0x01, 0x48, 0x50, 0x63, 0x60, - 0x6b, 0x20, 0xf7, 0xff, 0xfb, 0x9e, 0x90, 0x00, - 0x2d, 0x13, 0xd1, 0x05, 0x6a, 0xa1, 0x9a, 0x00, - 0x48, 0x4c, 0xf0, 0x0b, 0xff, 0x99, 0xe0, 0x15, - 0x2d, 0x0b, 0xdb, 0x01, 0x2d, 0x12, 0xdd, 0x03, - 0x48, 0x40, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x0d, - 0x2d, 0x0b, 0xdb, 0x06, 0x2d, 0x12, 0xdc, 0x04, - 0x48, 0x3e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x00, - 0xe0, 0x04, 0x6a, 0xa1, 0x9a, 0x00, 0x48, 0x41, - 0xf0, 0x0b, 0xff, 0x82, 0x2d, 0x0b, 0xdb, 0x5f, - 0x2d, 0x12, 0xdc, 0x5e, 0x98, 0x15, 0x68, 0x00, - 0x49, 0x3a, 0x60, 0x08, 0x99, 0x13, 0xa8, 0x05, - 0xf0, 0x01, 0xfd, 0xae, 0xa9, 0x05, 0x98, 0x15, - 0x68, 0x00, 0xf0, 0x05, 0xfc, 0x5f, 0x1d, 0xe0, - 0x30, 0x21, 0xa9, 0x05, 0xf0, 0x01, 0xfd, 0xa4, - 0x20, 0x01, 0x49, 0x35, 0x65, 0x08, 0x20, 0x02, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x21, 0x00, - 0x20, 0x02, 0xf0, 0x04, 0xfa, 0xdd, 0x2d, 0x0b, - 0xd0, 0x05, 0x2d, 0x0f, 0xd0, 0x03, 0x2d, 0x10, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x12, 0xf0, 0x04, 0xfa, 0xd1, 0x2d, 0x0c, - 0xd0, 0x01, 0x2d, 0x0f, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x04, 0xf0, 0x04, 0xfa, 0xc9, 0x2d, 0x0d, - 0xd0, 0x01, 0x2d, 0x10, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x08, 0xf0, 0x04, 0xfa, 0xc1, 0x2d, 0x0e, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x01, 0xf0, 0x04, 0xfa, 0xb9, 0x48, 0x15, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, 0xb0, 0x82, - 0x49, 0x1c, 0x20, 0x91, 0xf0, 0x1a, 0xfb, 0x40, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0b, - 0xfe, 0x86, 0x20, 0x92, 0x49, 0x17, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x17, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x15, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0xe0, 0x25, - 0xe0, 0xae, 0xe0, 0xad, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xfc, 0xff, - 0xff, 0xff, 0xbf, 0xff, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x03, 0xa8, 0xc8, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0x9d, 0xf0, - 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0xba, 0x28, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0xbb, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x20, 0x6a, 0xa0, 0x30, 0x01, - 0x05, 0x00, 0x6a, 0xe1, 0x31, 0x01, 0x02, 0x89, - 0x43, 0x08, 0x6b, 0x61, 0x31, 0x02, 0x43, 0x08, - 0x90, 0x00, 0x20, 0x00, 0x62, 0xa0, 0x20, 0x00, - 0x62, 0xe0, 0x48, 0x5f, 0x63, 0x20, 0x48, 0x5f, - 0x63, 0x60, 0x6b, 0x20, 0xf7, 0xff, 0xfa, 0xe1, - 0x90, 0x02, 0x48, 0x5d, 0x68, 0x00, 0x23, 0x77, - 0x01, 0x1b, 0x18, 0xc0, 0x9a, 0x02, 0x1c, 0x21, - 0xf0, 0x0b, 0xfa, 0x4a, 0x98, 0x00, 0x49, 0x58, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0xc8, 0x48, 0x55, 0x68, 0x00, 0x21, 0x00, - 0xf0, 0x0b, 0xfa, 0xc4, 0x48, 0x52, 0x68, 0x00, - 0xf0, 0x0b, 0xfe, 0x38, 0x49, 0x51, 0x20, 0x91, - 0xf0, 0x1a, 0xfa, 0xd2, 0xe0, 0x00, 0xe0, 0x11, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf6, 0x48, 0x4c, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x4c, 0x68, 0x00, - 0x49, 0x49, 0x60, 0x08, 0x98, 0x01, 0x49, 0x4a, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x47, 0x60, 0x08, - 0xb0, 0x02, 0xe0, 0x40, 0x48, 0x47, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x0c, 0x6a, 0xa0, 0x30, 0x01, - 0x05, 0x00, 0x6a, 0xe1, 0x31, 0x01, 0x02, 0x89, - 0x43, 0x08, 0x6b, 0x61, 0x31, 0x02, 0x43, 0x08, - 0x49, 0x41, 0x60, 0x08, 0xe0, 0x0c, 0x6a, 0xa0, - 0x30, 0x01, 0x05, 0x00, 0x6a, 0xe1, 0x31, 0x01, - 0x02, 0x89, 0x43, 0x08, 0x6b, 0x61, 0x31, 0x02, - 0x43, 0x08, 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, - 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, - 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, - 0xf0, 0x00, 0xfe, 0x82, 0x48, 0x33, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x07, 0x20, 0x00, 0x62, 0xa0, - 0x20, 0x00, 0x62, 0xe0, 0x48, 0x2a, 0x63, 0x20, - 0x48, 0x2a, 0x63, 0x60, 0x6b, 0x20, 0xf7, 0xff, - 0xfa, 0x78, 0x90, 0x00, 0x9a, 0x00, 0x99, 0x14, - 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0xfb, 0x98, 0x02, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0xe0, 0x05, - 0x2d, 0x13, 0xd1, 0x03, 0x20, 0x1f, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x08, 0x2d, 0x0b, 0xdb, 0x01, - 0x2d, 0x12, 0xdd, 0x1a, 0x48, 0x23, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x16, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x00, 0xfe, 0x50, - 0x6b, 0x20, 0xf7, 0xff, 0xfa, 0x52, 0x90, 0x00, - 0x9a, 0x00, 0x99, 0x14, 0x1c, 0x20, 0xf0, 0x00, - 0xfd, 0xd5, 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0x88, 0x48, 0x14, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x06, 0x48, 0x14, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0x0d, 0x06, 0xc0, 0x62, 0x06, - 0x48, 0x0e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x07, - 0x48, 0x0e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x03, - 0x98, 0x14, 0x21, 0x00, 0xf0, 0x0b, 0xfd, 0x0a, - 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x09, 0xe5, 0x10, 0xb0, 0x09, 0xe5, 0x0e, - 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0x3f, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x24, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0x9b, 0xb8, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0xb5, 0xf7, 0xb0, 0x83, - 0x9f, 0x03, 0x69, 0x38, 0x90, 0x00, 0x98, 0x00, - 0x28, 0x13, 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x6c, 0x78, 0x99, 0x04, 0x60, 0x48, 0x6c, 0x38, - 0x99, 0x04, 0x60, 0x08, 0x6c, 0xf8, 0x9a, 0x05, - 0x60, 0x50, 0x6c, 0xb8, 0x9a, 0x05, 0x60, 0x10, - 0x68, 0xfd, 0x48, 0xf9, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x03, - 0xe7, 0xda, 0x49, 0xf0, 0x20, 0x91, 0xf0, 0x1a, - 0xf9, 0xf3, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x0a, 0xfd, 0xa0, 0xe7, 0xf5, 0x00, 0xa8, - 0x49, 0xeb, 0x58, 0x08, 0x99, 0x03, 0x42, 0x88, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0xe7, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x03, 0xe7, 0xc4, 0x21, 0x00, - 0x00, 0xa8, 0x4a, 0xe5, 0x50, 0x11, 0x48, 0xe2, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x69, 0x38, - 0x28, 0x0b, 0xdb, 0x16, 0x69, 0x38, 0x28, 0x12, - 0xdc, 0x13, 0x48, 0xe0, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x06, 0x69, 0x38, 0x28, 0x0b, 0xdb, 0x03, - 0x69, 0x38, 0x28, 0x12, 0xdc, 0x00, 0xe0, 0x08, - 0x6b, 0x38, 0xf7, 0xff, 0xf9, 0xb6, 0x90, 0x01, - 0x6a, 0xb9, 0x9a, 0x01, 0x48, 0xd8, 0xf0, 0x0b, - 0xfd, 0x85, 0x69, 0x38, 0x28, 0x0b, 0xdb, 0x2e, - 0x69, 0x38, 0x28, 0x12, 0xdc, 0x2b, 0x48, 0xd0, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x27, 0x20, 0x00, - 0x49, 0xd2, 0x65, 0x08, 0x20, 0x01, 0x03, 0x00, - 0x49, 0xd0, 0x65, 0x48, 0x20, 0x00, 0x49, 0xcf, - 0x65, 0x88, 0x20, 0x00, 0x49, 0xcd, 0x65, 0xc8, - 0x20, 0x00, 0x49, 0xcc, 0x66, 0x08, 0x20, 0x00, - 0x49, 0xcb, 0x60, 0x08, 0x20, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x21, 0x00, 0x20, 0x02, - 0xf0, 0x04, 0xf9, 0x0a, 0x48, 0xc3, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x04, 0x48, 0xc5, 0x21, 0x0d, - 0x06, 0xc9, 0x61, 0x88, 0xe0, 0x02, 0x48, 0xc3, - 0x49, 0xc3, 0x60, 0x08, 0xe0, 0x06, 0x69, 0x38, - 0x28, 0x13, 0xd1, 0x03, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x08, 0x48, 0xb6, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x2c, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x00, 0xfd, 0x64, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0xb7, - 0x18, 0xc9, 0x60, 0x08, 0x20, 0x00, 0x43, 0xc0, - 0x00, 0xe9, 0x4b, 0xb4, 0x18, 0xc9, 0x60, 0x48, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0xb1, - 0x18, 0xc9, 0x64, 0x08, 0x20, 0x00, 0x43, 0xc0, - 0x00, 0xe9, 0x4b, 0xae, 0x18, 0xc9, 0x64, 0x48, - 0x20, 0x01, 0x40, 0xa8, 0x43, 0xc0, 0x99, 0x02, - 0x40, 0x08, 0x90, 0x02, 0x98, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0xe0, 0x9c, 0x69, 0x38, - 0x28, 0x0b, 0xdb, 0x74, 0x69, 0x38, 0x28, 0x12, - 0xdc, 0x72, 0x48, 0x9b, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x6f, 0x20, 0x00, 0x49, 0x9d, 0x65, 0x08, - 0x20, 0x01, 0x03, 0x00, 0x49, 0x9b, 0x65, 0x48, - 0x20, 0x00, 0x49, 0x9a, 0x65, 0x88, 0x20, 0x00, - 0x49, 0x98, 0x65, 0xc8, 0x20, 0x00, 0x49, 0x97, - 0x66, 0x08, 0x20, 0x00, 0x49, 0x96, 0x60, 0x08, - 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, - 0x21, 0x00, 0x20, 0x02, 0xf0, 0x04, 0xf8, 0xa0, - 0x49, 0x95, 0x20, 0x91, 0xf0, 0x1a, 0xf9, 0x2c, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0b, - 0xfc, 0x72, 0x20, 0x92, 0x49, 0x90, 0x60, 0x08, - 0x48, 0x90, 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc0, 0x69, 0x80, 0x08, 0x40, 0x00, 0x40, - 0x49, 0x8c, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc9, 0x61, 0x88, 0x20, 0x01, 0x49, 0x89, - 0x68, 0x09, 0x60, 0x08, 0x20, 0x01, 0x49, 0x87, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0x88, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x83, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x61, 0x08, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x7f, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x61, 0x48, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x7b, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x60, 0xc8, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x77, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x60, 0x88, 0x6b, 0x38, 0xf7, 0xff, 0xf8, 0xd9, - 0x90, 0x01, 0x48, 0x72, 0x68, 0x00, 0x23, 0x77, - 0x01, 0x1b, 0x18, 0xc0, 0x9a, 0x01, 0x1c, 0x39, - 0xf0, 0x0b, 0xf8, 0x42, 0xe0, 0x02, 0xe0, 0x23, - 0xe0, 0x22, 0xe0, 0x21, 0x48, 0x67, 0x49, 0x6b, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0xc8, 0x48, 0x68, 0x68, 0x00, 0x21, 0x00, - 0xf0, 0x0b, 0xf8, 0xb8, 0x48, 0x65, 0x68, 0x00, - 0xf0, 0x0b, 0xfc, 0x2c, 0x49, 0x62, 0x20, 0x91, - 0xf0, 0x1a, 0xf8, 0xc6, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x60, 0x68, 0x04, 0x48, 0x60, - 0x68, 0x00, 0x49, 0x5e, 0x60, 0x08, 0x48, 0x5e, - 0x60, 0x04, 0x20, 0x92, 0x49, 0x5a, 0x60, 0x08, - 0x48, 0x52, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, - 0x48, 0x4d, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, - 0x1c, 0x28, 0xf0, 0x0b, 0xfb, 0x9d, 0x28, 0x01, - 0xd1, 0x6a, 0x98, 0x00, 0x28, 0x0b, 0xdb, 0x02, - 0x98, 0x00, 0x28, 0x12, 0xdd, 0x65, 0xb0, 0x84, - 0x49, 0x4f, 0x20, 0x91, 0xf0, 0x1a, 0xf8, 0xa0, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0b, - 0xfb, 0xe6, 0x48, 0x4c, 0x68, 0x00, 0x68, 0x40, - 0x28, 0x00, 0xd0, 0x06, 0x48, 0x49, 0x68, 0x00, - 0x68, 0x40, 0x38, 0x01, 0x49, 0x47, 0x68, 0x09, - 0x60, 0x48, 0x20, 0x92, 0x49, 0x44, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x44, 0x68, 0x09, 0x60, 0x08, - 0x24, 0x00, 0x20, 0x00, 0x90, 0x02, 0x98, 0x02, - 0x28, 0x00, 0xd1, 0x15, 0x2c, 0x07, 0xd2, 0x13, - 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, - 0x34, 0x01, 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, - 0x4a, 0x3a, 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, - 0xd1, 0x01, 0x20, 0x01, 0x90, 0x02, 0xe7, 0xe6, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x14, 0x2c, 0x18, - 0xd2, 0x12, 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x20, 0x34, 0x01, 0x23, 0x4c, 0x43, 0x58, - 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, - 0xd1, 0x01, 0x20, 0x01, 0x90, 0x02, 0xe7, 0xe7, - 0x3c, 0x01, 0x6b, 0x38, 0xf7, 0xff, 0xf8, 0x41, - 0x90, 0x01, 0x2c, 0x07, 0xd2, 0x09, 0x48, 0x25, - 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0a, 0xfe, 0xbc, - 0x48, 0x22, 0x68, 0x00, 0xf0, 0x0b, 0xfb, 0xa6, - 0xe0, 0x09, 0x2c, 0x18, 0xd2, 0x07, 0xe0, 0x01, - 0xe0, 0x95, 0xe0, 0x94, 0x1f, 0xe0, 0x49, 0x1d, - 0x68, 0x09, 0xf0, 0x0a, 0xfe, 0xeb, 0x48, 0x1b, - 0x68, 0x00, 0x4b, 0x1c, 0x18, 0xc0, 0xf0, 0x0b, - 0xf8, 0x0b, 0x20, 0x00, 0x49, 0x17, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x64, 0x88, - 0x48, 0x14, 0x68, 0x00, 0x68, 0x40, 0x28, 0x07, - 0xd3, 0x2c, 0x48, 0x12, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x23, 0xfe, - 0x43, 0x18, 0x49, 0x0e, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0xe0, 0x1c, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xbb, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xba, 0x28, 0x3f, 0xff, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0xb8, 0x68, 0x00, 0x04, 0x00, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0x00, 0x00, 0x04, 0xcc, - 0x61, 0x88, 0xe0, 0x2d, 0x26, 0x01, 0x21, 0x00, - 0x91, 0x00, 0x48, 0x2b, 0x68, 0x00, 0x68, 0x40, - 0x99, 0x00, 0x42, 0x88, 0xd8, 0x04, 0xe0, 0x06, - 0x99, 0x00, 0x31, 0x01, 0x91, 0x00, 0xe7, 0xf4, - 0x00, 0x70, 0x1c, 0x46, 0xe7, 0xf8, 0x08, 0x76, - 0x00, 0x76, 0x48, 0x23, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0x49, 0x1f, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x48, 0x1c, - 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, - 0x69, 0x80, 0x43, 0x30, 0x49, 0x18, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, - 0x1c, 0x21, 0x48, 0x15, 0x68, 0x00, 0xf0, 0x0a, - 0xff, 0xb1, 0x6b, 0x79, 0x48, 0x12, 0x68, 0x00, - 0xf0, 0x0a, 0xfe, 0xe6, 0x1c, 0x28, 0x21, 0x00, - 0xf0, 0x0b, 0xfa, 0x88, 0x49, 0x0f, 0x20, 0x91, - 0xf0, 0x19, 0xff, 0xba, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x0b, 0x68, 0x00, 0x90, 0x03, - 0x48, 0x0b, 0x68, 0x00, 0x49, 0x08, 0x60, 0x08, - 0x98, 0x03, 0x49, 0x09, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x06, 0x60, 0x08, 0xb0, 0x04, 0x20, 0x92, - 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, - 0xe5, 0x86, 0xb0, 0x03, 0xe5, 0x84, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x24, 0x2e, 0x08, 0xba, 0x2c, - 0xb5, 0xf3, 0xb0, 0x85, 0x20, 0x00, 0x90, 0x01, - 0x9d, 0x05, 0x9f, 0x06, 0x69, 0x28, 0x90, 0x04, - 0x69, 0x3c, 0x98, 0x04, 0x28, 0x13, 0xd0, 0x01, - 0x2c, 0x13, 0xd1, 0x05, 0x20, 0xff, 0xb0, 0x05, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0xee, 0x68, 0xf9, 0x91, 0x03, 0x48, 0xdf, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2e, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x04, 0x2e, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x20, - 0x48, 0xd6, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, - 0x99, 0x03, 0x29, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, 0x99, 0x03, - 0x29, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x99, 0x03, - 0x60, 0xe9, 0x60, 0xfe, 0x20, 0x00, 0xb0, 0x05, - 0xe7, 0xce, 0xe1, 0x92, 0x1c, 0x3d, 0x9f, 0x05, - 0x9e, 0x03, 0x68, 0xf9, 0x91, 0x03, 0x9c, 0x04, - 0xe0, 0xaa, 0x48, 0xc6, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x06, 0x99, 0x03, 0x29, 0x19, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, - 0x99, 0x03, 0x29, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd1, 0x73, - 0x49, 0xbd, 0x20, 0x91, 0xf0, 0x19, 0xff, 0x38, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, - 0xfa, 0xe5, 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0xb9, - 0x58, 0x08, 0x42, 0xa8, 0xd1, 0x05, 0x99, 0x03, - 0x00, 0x88, 0x49, 0xb6, 0x58, 0x08, 0x42, 0xb8, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0xb2, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x05, 0xe7, 0x98, 0x48, 0xb2, - 0x68, 0x00, 0x42, 0xa8, 0xd0, 0x03, 0x48, 0xb0, - 0x68, 0x00, 0x42, 0xb8, 0xd1, 0x0a, 0x20, 0x0d, - 0x06, 0xc0, 0x68, 0xc0, 0x90, 0x01, 0x98, 0x01, - 0x28, 0x01, 0xd1, 0x03, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x99, 0x03, 0x60, 0xe9, - 0x60, 0xfe, 0x00, 0xb0, 0x49, 0xa5, 0x50, 0x0f, - 0x99, 0x03, 0x00, 0x88, 0x49, 0xa3, 0x50, 0x0d, - 0x48, 0xa0, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x55, - 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, - 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, - 0x20, 0x01, 0x40, 0xb0, 0x99, 0x02, 0x40, 0x08, - 0xd1, 0x12, 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x0b, 0x99, 0x03, - 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, 0x99, 0x02, - 0x40, 0x08, 0x90, 0x02, 0x20, 0x01, 0x40, 0xb0, - 0x99, 0x02, 0x43, 0x08, 0x90, 0x02, 0xe0, 0x11, - 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, 0x99, 0x02, - 0x40, 0x08, 0xd1, 0x0b, 0x20, 0x01, 0x40, 0xb0, - 0x43, 0xc0, 0x99, 0x02, 0x40, 0x08, 0x90, 0x02, - 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, 0x99, 0x02, - 0x43, 0x08, 0x90, 0x02, 0x6b, 0x28, 0xf7, 0xfe, - 0xfe, 0xbc, 0x90, 0x00, 0x9a, 0x00, 0xe0, 0x00, - 0xe0, 0x22, 0x99, 0x03, 0x1c, 0x28, 0xf0, 0x00, - 0xfa, 0x3d, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0xb1, - 0x90, 0x00, 0x9a, 0x00, 0x1c, 0x31, 0x1c, 0x38, - 0xf0, 0x00, 0xfa, 0x34, 0x98, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0x48, 0x7c, 0x68, 0x00, - 0x42, 0xa8, 0xd0, 0x03, 0x48, 0x7a, 0x68, 0x00, - 0x42, 0xb8, 0xd1, 0x03, 0x98, 0x01, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x20, 0x92, 0x49, 0x74, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x1b, - 0x49, 0x71, 0x20, 0x91, 0xf0, 0x19, 0xfe, 0xa0, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, - 0xfa, 0x4d, 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0x6d, - 0x58, 0x08, 0x42, 0xa8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x69, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, - 0xe7, 0x06, 0x2c, 0x0b, 0xdb, 0x12, 0x2c, 0x12, - 0xdc, 0x10, 0x48, 0x67, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x09, 0x48, 0x65, 0x68, 0x00, 0x42, 0xa8, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0x60, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x05, 0xe6, 0xf4, 0x48, 0x60, - 0x60, 0x07, 0xe0, 0x08, 0x6b, 0xf8, 0x28, 0x01, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0x5a, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x05, 0xe6, 0xe8, 0x48, 0x5a, - 0x68, 0x00, 0x42, 0xa8, 0xd1, 0x02, 0x20, 0x00, - 0x49, 0x57, 0x60, 0x08, 0x00, 0xb0, 0x49, 0x55, - 0x50, 0x0f, 0x99, 0x03, 0x60, 0xe9, 0x60, 0xfe, - 0x48, 0x50, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x73, - 0x6b, 0x28, 0xf7, 0xfe, 0xfe, 0x4e, 0x90, 0x00, - 0x6a, 0xa9, 0x9a, 0x00, 0x48, 0x4f, 0xf0, 0x0b, - 0xfa, 0x1d, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0x45, - 0x90, 0x00, 0x6a, 0xb9, 0x9a, 0x00, 0x48, 0x4b, - 0xf0, 0x0b, 0xfa, 0x42, 0x48, 0x48, 0x68, 0x00, - 0x42, 0xa8, 0xd1, 0x0f, 0x20, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x2c, 0x0b, 0xdb, 0x01, - 0x2c, 0x12, 0xdd, 0x07, 0x21, 0x00, 0x20, 0x02, - 0xf0, 0x03, 0xfd, 0xae, 0x48, 0x42, 0x21, 0x0d, - 0x06, 0xc9, 0x61, 0x88, 0x2c, 0x0b, 0xdb, 0x42, - 0x2c, 0x12, 0xdc, 0x40, 0x98, 0x04, 0x42, 0xa0, - 0xd0, 0x2c, 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0xc8, 0x21, 0x00, 0x20, 0x02, 0xf0, 0x03, - 0xfd, 0x9b, 0x2c, 0x0f, 0xd0, 0x05, 0x2c, 0x10, - 0xd0, 0x03, 0x2c, 0x11, 0xd0, 0x01, 0x2c, 0x0b, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x12, 0xf0, 0x03, - 0xfd, 0x8f, 0x2c, 0x0c, 0xd0, 0x01, 0x2c, 0x0f, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x04, 0xf0, 0x03, - 0xfd, 0x87, 0x2c, 0x0d, 0xd0, 0x01, 0x2c, 0x10, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x08, 0xf0, 0x03, - 0xfd, 0x7f, 0x2c, 0x0e, 0xd0, 0x01, 0x2c, 0x11, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x03, - 0xfd, 0x77, 0xe0, 0x03, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x6a, 0xb8, 0x30, 0x01, - 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, 0x02, 0x89, - 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, 0x43, 0x08, - 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, 0x20, 0x0d, - 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0xe0, 0x00, - 0xe0, 0x1f, 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, - 0x99, 0x02, 0x40, 0x08, 0x90, 0x02, 0xf0, 0x00, - 0xf9, 0xcf, 0x6b, 0x38, 0xf7, 0xfe, 0xfd, 0xd1, - 0x90, 0x00, 0x9a, 0x00, 0x1c, 0x31, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x54, 0x98, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0x2c, 0x0b, 0xdb, 0x08, - 0x2c, 0x12, 0xdc, 0x06, 0x98, 0x04, 0x42, 0xa0, - 0xd1, 0x03, 0x20, 0x01, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0xc8, 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x05, 0xe6, 0x3c, 0xb0, 0x05, - 0xe6, 0x3a, 0xe6, 0x39, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x2e, 0x08, 0xba, 0x28, 0x2e, 0x08, 0xbb, 0x00, - 0x3f, 0xff, 0xff, 0xff, 0xb5, 0xf0, 0x1c, 0x07, - 0x00, 0xb8, 0x49, 0x09, 0x58, 0x0c, 0x1c, 0x7d, - 0x60, 0xe5, 0x00, 0xa8, 0x49, 0x06, 0x50, 0x0c, - 0x6b, 0x20, 0xf7, 0xfe, 0xfd, 0x9a, 0x1c, 0x06, - 0x1c, 0x32, 0x1c, 0x29, 0x1c, 0x20, 0xf0, 0x00, - 0xf9, 0x1d, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xb9, 0xc4, 0xb5, 0xf0, 0x1c, 0x07, - 0x00, 0xb8, 0x49, 0x09, 0x58, 0x0c, 0x1e, 0x7d, - 0x60, 0xe5, 0x00, 0xa8, 0x49, 0x06, 0x50, 0x0c, - 0x6b, 0x20, 0xf7, 0xfe, 0xfd, 0x82, 0x1c, 0x06, - 0x1c, 0x32, 0x1c, 0x29, 0x1c, 0x20, 0xf0, 0x00, - 0xf9, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xb9, 0xc4, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x86, 0x98, 0x06, 0x90, 0x05, 0x98, 0x05, - 0x68, 0xc5, 0x48, 0x77, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0xff, 0xb0, 0x06, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x05, 0x69, 0x00, 0x28, 0x13, 0xd1, 0x02, - 0x20, 0xff, 0xb0, 0x06, 0xe7, 0xf4, 0x49, 0x69, - 0x20, 0x91, 0xf0, 0x19, 0xfd, 0x5d, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, 0xf9, 0x0a, - 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x64, 0x58, 0x08, - 0x99, 0x05, 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x60, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x06, - 0xe7, 0xde, 0x42, 0xbd, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x5c, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x06, - 0xe7, 0xd6, 0x20, 0x00, 0x00, 0xa9, 0x4a, 0x5a, - 0x50, 0x50, 0x98, 0x05, 0x60, 0xc7, 0x48, 0x59, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x0d, 0x48, 0x54, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x09, 0x99, 0x05, - 0x00, 0xb8, 0x4a, 0x53, 0x50, 0x11, 0x20, 0x92, - 0x49, 0x50, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x06, - 0xe7, 0xbe, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, - 0x1c, 0x04, 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0x88, 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, - 0x4b, 0x4b, 0x18, 0xc9, 0x60, 0x08, 0x20, 0x00, - 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0x48, 0x18, 0xc9, - 0x60, 0x48, 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, - 0x4b, 0x45, 0x18, 0xc9, 0x64, 0x08, 0x20, 0x00, - 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0x42, 0x18, 0xc9, - 0x64, 0x48, 0x20, 0x01, 0x90, 0x01, 0x20, 0x01, - 0x40, 0xa8, 0x40, 0x20, 0xd1, 0x01, 0x20, 0x00, - 0x90, 0x01, 0x20, 0x01, 0x40, 0xa8, 0x43, 0xc0, - 0x40, 0x04, 0x1c, 0x3e, 0x42, 0xbd, 0xd9, 0x23, - 0x00, 0xb0, 0x49, 0x37, 0x58, 0x08, 0x28, 0x00, - 0xd0, 0x01, 0x36, 0x01, 0xe7, 0xf8, 0x1e, 0x70, - 0x90, 0x04, 0x98, 0x04, 0x42, 0xb8, 0xda, 0x04, - 0xe0, 0x07, 0x98, 0x04, 0x38, 0x01, 0x90, 0x04, - 0xe7, 0xf7, 0x98, 0x04, 0xf7, 0xff, 0xff, 0x32, - 0xe7, 0xf7, 0x20, 0xff, 0x40, 0xb8, 0x90, 0x03, - 0x20, 0xff, 0x40, 0xb0, 0x43, 0xc0, 0x99, 0x03, - 0x40, 0x08, 0x90, 0x03, 0x98, 0x03, 0x00, 0x40, - 0x90, 0x03, 0x00, 0x60, 0x90, 0x00, 0xe0, 0x1f, - 0x00, 0xb0, 0x49, 0x25, 0x58, 0x08, 0x28, 0x00, - 0xd0, 0x01, 0x3e, 0x01, 0xe7, 0xf8, 0x1c, 0x70, - 0x90, 0x04, 0x98, 0x04, 0x42, 0xb8, 0xd9, 0x04, - 0xe0, 0x07, 0x98, 0x04, 0x30, 0x01, 0x90, 0x04, - 0xe7, 0xf7, 0x98, 0x04, 0xf7, 0xff, 0xff, 0x26, - 0xe7, 0xf7, 0x20, 0xff, 0x40, 0xb0, 0x90, 0x03, - 0x20, 0xff, 0x40, 0xb8, 0x43, 0xc0, 0x99, 0x03, - 0x40, 0x08, 0x90, 0x03, 0x08, 0x60, 0x90, 0x00, - 0x98, 0x00, 0x99, 0x03, 0x40, 0x08, 0x90, 0x00, - 0x98, 0x03, 0x43, 0x84, 0x98, 0x00, 0x43, 0x04, - 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, 0x40, 0x04, - 0x98, 0x01, 0x40, 0xb8, 0x43, 0x04, 0x99, 0x05, - 0x00, 0xb8, 0x4a, 0x0d, 0x50, 0x11, 0x98, 0x05, - 0x6b, 0x00, 0xf7, 0xfe, 0xfc, 0x92, 0x90, 0x02, - 0x9a, 0x02, 0x1c, 0x39, 0x98, 0x05, 0xf0, 0x00, - 0xf8, 0x15, 0x20, 0x0d, 0x06, 0xc0, 0x60, 0x84, - 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x06, 0xe7, 0x25, 0xb0, 0x06, 0xe7, 0x23, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x68, 0x00, 0x04, 0x00, 0xb5, 0xf7, 0x1c, 0x04, - 0x1c, 0x0f, 0x01, 0x3d, 0x4b, 0x2f, 0x18, 0xe9, - 0x1d, 0xe2, 0x32, 0x0d, 0x20, 0x00, 0x28, 0x03, - 0xd3, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xca, 0x20, 0xc1, 0x20, 0xe7, 0xfa, 0x6a, 0xe3, - 0x05, 0x9d, 0x0d, 0xad, 0x00, 0xfe, 0x4b, 0x28, - 0x18, 0xf3, 0x60, 0x1d, 0x6b, 0x63, 0x33, 0x01, - 0x05, 0x9d, 0x0d, 0xad, 0x00, 0xfe, 0x4b, 0x24, - 0x18, 0xf3, 0x60, 0x5d, 0x6a, 0xa5, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x1d, 0x00, 0xfe, 0x4b, 0x20, - 0x18, 0xf3, 0x64, 0x1d, 0x9d, 0x02, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x1d, 0x00, 0xfe, 0x4b, 0x1c, - 0x18, 0xf3, 0x64, 0x5d, 0x4b, 0x1b, 0x68, 0x1b, - 0x2b, 0x01, 0xd1, 0x2a, 0x2f, 0x00, 0xd1, 0x28, - 0x4b, 0x17, 0x68, 0x5d, 0x23, 0x8f, 0x00, 0x9b, - 0x42, 0x9d, 0xd3, 0x03, 0x23, 0x8f, 0x00, 0x9b, - 0x4d, 0x13, 0x60, 0x6b, 0x4b, 0x12, 0x68, 0x1d, - 0x4b, 0x13, 0x42, 0x9d, 0xd3, 0x02, 0x4b, 0x12, - 0x4d, 0x0f, 0x60, 0x2b, 0x4b, 0x0e, 0x6c, 0x5d, - 0x23, 0x01, 0x02, 0x9b, 0x1a, 0xed, 0x23, 0xb3, - 0x00, 0x9b, 0x42, 0x9d, 0xd3, 0x02, 0x4b, 0x0d, - 0x4d, 0x09, 0x64, 0x6b, 0x4b, 0x08, 0x6c, 0x1d, - 0x23, 0x01, 0x02, 0x9b, 0x1a, 0xed, 0x4b, 0x0a, - 0x42, 0x9d, 0xd3, 0x02, 0x4b, 0x09, 0x4d, 0x04, - 0x64, 0x2b, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x68, 0x00, 0x0c, 0x00, - 0x68, 0x00, 0x04, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x06, 0xcc, - 0x00, 0x00, 0x02, 0xca, 0x00, 0x00, 0x06, 0xca, - 0xb4, 0xf0, 0x4f, 0x15, 0x4c, 0x15, 0x20, 0x00, - 0x21, 0x00, 0x22, 0x00, 0x43, 0xd2, 0x4d, 0x14, - 0x68, 0x6d, 0x42, 0x85, 0xdd, 0x1b, 0x1c, 0x05, - 0x30, 0x01, 0x00, 0xad, 0x59, 0x7b, 0x42, 0x93, - 0xd0, 0xf9, 0x4d, 0x0f, 0x68, 0x6d, 0x42, 0x85, - 0xda, 0x00, 0xe0, 0x10, 0x31, 0x01, 0x1c, 0x05, - 0x30, 0x01, 0x00, 0xad, 0x59, 0x7a, 0x42, 0x93, - 0xd0, 0xf9, 0x02, 0x95, 0x43, 0x1d, 0x1c, 0x2e, - 0xc4, 0x40, 0x4d, 0x07, 0x68, 0x6d, 0x42, 0x85, - 0xdb, 0x00, 0x31, 0x01, 0xe7, 0xdf, 0x25, 0x0d, - 0x06, 0xed, 0x61, 0x29, 0xbc, 0xf0, 0x47, 0x70, - 0x2e, 0x08, 0xba, 0x38, 0x68, 0x00, 0x0d, 0x40, - 0x2e, 0x08, 0xbb, 0x00, 0xb5, 0xf3, 0xb0, 0x82, - 0x9d, 0x02, 0x69, 0x2c, 0x2c, 0x13, 0xd1, 0x05, - 0x20, 0x75, 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x68, 0xee, 0x48, 0xf8, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2e, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x04, 0x2e, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xe6, 0x49, 0xef, - 0x20, 0x91, 0xf0, 0x19, 0xfb, 0xbd, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, 0xff, 0x6a, - 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0xea, 0x58, 0x08, - 0x99, 0x02, 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0xe6, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x02, - 0xe7, 0xd0, 0x48, 0xe3, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x16, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, - 0x90, 0x01, 0x99, 0x03, 0x29, 0x01, 0xd1, 0x05, - 0x20, 0x01, 0x40, 0xb0, 0x99, 0x01, 0x43, 0x08, - 0x90, 0x01, 0xe0, 0x05, 0x20, 0x01, 0x40, 0xb0, - 0x43, 0xc0, 0x99, 0x01, 0x40, 0x08, 0x90, 0x01, - 0x98, 0x01, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, - 0x48, 0xd8, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, - 0x48, 0xd3, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, - 0x99, 0x03, 0x29, 0x01, 0xd1, 0x6c, 0xb0, 0x83, - 0x1c, 0x30, 0xf0, 0x0a, 0xfe, 0x71, 0x28, 0x01, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0xcd, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x9e, 0x49, 0xce, - 0x20, 0x91, 0xf0, 0x19, 0xfb, 0x75, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfe, 0xbb, - 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x06, - 0x48, 0xc8, 0x68, 0x00, 0x68, 0x40, 0x30, 0x01, - 0x49, 0xc6, 0x68, 0x09, 0x60, 0x48, 0x20, 0x92, - 0x49, 0xc3, 0x60, 0x08, 0x20, 0x01, 0x49, 0xc3, - 0x68, 0x09, 0x60, 0x08, 0x2c, 0x0b, 0xdb, 0x11, - 0x2c, 0x12, 0xdc, 0x0f, 0x48, 0xbf, 0x68, 0x00, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, - 0x23, 0x01, 0x43, 0x18, 0x49, 0xbb, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, - 0x27, 0x00, 0xe0, 0xbc, 0x27, 0x00, 0x20, 0x00, - 0x90, 0x01, 0x98, 0x01, 0x28, 0x00, 0xd1, 0x15, - 0x2f, 0x07, 0xd2, 0x13, 0x6a, 0xe8, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, - 0x18, 0x18, 0x00, 0xc0, 0x4a, 0xaf, 0x68, 0x12, - 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, - 0x6f, 0xc0, 0x42, 0x81, 0xda, 0x01, 0x20, 0x01, - 0x90, 0x01, 0xe7, 0xe6, 0x98, 0x01, 0x28, 0x00, - 0xd1, 0x16, 0x2f, 0x18, 0xd2, 0x14, 0x6a, 0xe8, - 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, - 0x23, 0x4c, 0x43, 0x58, 0x4a, 0xa3, 0x68, 0x12, - 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x40, 0x42, 0x81, 0xda, 0x03, 0xe0, 0x00, - 0xe0, 0xb0, 0x20, 0x01, 0x90, 0x01, 0xe7, 0xe5, - 0x3f, 0x01, 0x6b, 0x28, 0xf7, 0xfe, 0xfb, 0x01, - 0x90, 0x00, 0x2f, 0x07, 0xd2, 0x16, 0x48, 0x99, - 0x68, 0x01, 0x1c, 0x38, 0xf0, 0x0a, 0xf9, 0x0a, - 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x95, - 0x68, 0x09, 0x18, 0x40, 0x23, 0x2b, 0x01, 0x5b, - 0x18, 0xc0, 0x9a, 0x00, 0x1c, 0x29, 0xf0, 0x0a, - 0xfa, 0x5f, 0x48, 0x90, 0x68, 0x00, 0xf0, 0x0a, - 0xfe, 0x59, 0xe0, 0x4a, 0x2f, 0x18, 0xd2, 0x48, - 0x1f, 0xf8, 0x49, 0x8c, 0x68, 0x09, 0xf0, 0x0a, - 0xf9, 0x45, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x89, - 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x0a, 0x9a, 0x00, 0x1c, 0x29, 0xf0, 0x0a, - 0xfa, 0x47, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x83, - 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x82, 0x6f, 0xc0, 0x28, 0x00, 0xd0, 0x17, - 0x20, 0x4c, 0x43, 0x78, 0x49, 0x7d, 0x68, 0x09, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x68, 0x00, 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x0b, - 0x20, 0x4c, 0x43, 0x78, 0x49, 0x77, 0x68, 0x09, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x68, 0x00, 0x0c, 0x00, 0x04, 0x00, 0xd1, 0x0a, - 0x20, 0x02, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x71, - 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, - 0x39, 0x82, 0x67, 0x48, 0xe0, 0x09, 0x20, 0x03, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x6b, 0x68, 0x12, - 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, - 0x67, 0x48, 0x48, 0x68, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x00, 0x40, - 0x90, 0x03, 0x98, 0x03, 0x23, 0x02, 0x43, 0x18, - 0x90, 0x03, 0x48, 0x62, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0x99, 0x03, 0x18, 0x40, 0x90, 0x03, - 0x98, 0x03, 0x49, 0x5c, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x1c, 0x39, - 0x48, 0x58, 0x68, 0x00, 0xf0, 0x0a, 0xfa, 0x72, - 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x04, - 0x6b, 0x69, 0x48, 0x54, 0x68, 0x00, 0xf0, 0x0a, - 0xf9, 0x4d, 0x1c, 0x30, 0x21, 0x01, 0xf0, 0x0a, - 0xfd, 0x45, 0x49, 0x4f, 0x20, 0x91, 0xf0, 0x19, - 0xfa, 0x77, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0x48, 0x4c, 0x68, 0x00, 0x90, 0x02, 0x48, 0x4c, - 0x68, 0x00, 0x49, 0x4a, 0x60, 0x08, 0x98, 0x02, - 0x49, 0x49, 0x60, 0x08, 0x20, 0x92, 0x49, 0x46, - 0x60, 0x08, 0xb0, 0x03, 0x48, 0x43, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x75, 0x48, 0x3e, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x71, 0x99, 0x03, 0x29, 0x00, - 0xd1, 0x6e, 0xb0, 0x85, 0x1c, 0x30, 0xf0, 0x0a, - 0xfd, 0x47, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x38, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x07, - 0xe6, 0x74, 0x49, 0x39, 0x20, 0x91, 0xf0, 0x19, - 0xfa, 0x4b, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x0a, 0xfd, 0x91, 0x2c, 0x0b, 0xdb, 0x01, - 0x2c, 0x12, 0xdd, 0x0b, 0x48, 0x33, 0x68, 0x00, - 0x68, 0x40, 0x28, 0x00, 0xd0, 0x06, 0x48, 0x31, - 0x68, 0x00, 0x68, 0x40, 0x38, 0x01, 0x49, 0x2f, - 0x68, 0x09, 0x60, 0x48, 0x20, 0x92, 0x49, 0x2c, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x2b, 0x68, 0x09, - 0x60, 0x08, 0x2c, 0x0b, 0xdb, 0x11, 0x2c, 0x12, - 0xdc, 0x0f, 0x48, 0x28, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x08, 0x40, - 0x00, 0x40, 0x49, 0x24, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x27, 0x00, - 0xe0, 0xb2, 0x27, 0x00, 0x20, 0x00, 0x90, 0x03, - 0x98, 0x03, 0x28, 0x00, 0xd1, 0x15, 0x2f, 0x07, - 0xd2, 0x13, 0x6a, 0xe8, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, 0x18, 0x18, - 0x00, 0xc0, 0x4a, 0x18, 0x68, 0x12, 0x18, 0x80, - 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, - 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, 0x90, 0x03, - 0xe7, 0xe6, 0x98, 0x03, 0x28, 0x00, 0xd1, 0x26, - 0x2f, 0x18, 0xd2, 0x24, 0x6a, 0xe8, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, - 0x43, 0x58, 0x4a, 0x0c, 0x68, 0x12, 0x18, 0x80, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0xe0, 0x00, - 0xe0, 0xa9, 0x69, 0x40, 0x42, 0x81, 0xd1, 0x11, - 0x20, 0x01, 0x90, 0x03, 0xe0, 0x0e, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xe7, 0xd5, 0x3f, 0x01, - 0x6b, 0x28, 0xf7, 0xfe, 0xf9, 0xc2, 0x90, 0x01, - 0x2f, 0x07, 0xd2, 0x09, 0x48, 0x4a, 0x68, 0x01, - 0x1c, 0x38, 0xf0, 0x0a, 0xf8, 0x3d, 0x48, 0x48, - 0x68, 0x00, 0xf0, 0x0a, 0xfd, 0x27, 0xe0, 0x06, - 0x2f, 0x18, 0xd2, 0x04, 0x1f, 0xf8, 0x49, 0x44, - 0x68, 0x09, 0xf0, 0x0a, 0xf8, 0x6f, 0x48, 0x42, - 0x68, 0x00, 0x4b, 0x42, 0x18, 0xc0, 0xf0, 0x0a, - 0xf9, 0x8f, 0x20, 0x00, 0x49, 0x3e, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x64, 0x88, - 0x48, 0x3b, 0x68, 0x00, 0x68, 0x40, 0x28, 0x07, - 0xd3, 0x0e, 0x48, 0x39, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x23, 0xfe, - 0x43, 0x18, 0x49, 0x35, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0xe0, 0x33, - 0x20, 0x01, 0x90, 0x00, 0x21, 0x00, 0x91, 0x02, - 0x48, 0x2f, 0x68, 0x00, 0x68, 0x40, 0x99, 0x02, - 0x42, 0x88, 0xd8, 0x04, 0xe0, 0x08, 0x99, 0x02, - 0x31, 0x01, 0x91, 0x02, 0xe7, 0xf4, 0x98, 0x00, - 0x00, 0x40, 0x30, 0x01, 0x90, 0x00, 0xe7, 0xf6, - 0x98, 0x00, 0x08, 0x40, 0x00, 0x40, 0x90, 0x00, - 0x48, 0x25, 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc0, 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, - 0x49, 0x21, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc9, 0x61, 0x88, 0x48, 0x1e, 0x68, 0x00, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, - 0x99, 0x00, 0x43, 0x08, 0x49, 0x1a, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, - 0x1c, 0x39, 0x48, 0x17, 0x68, 0x00, 0xf0, 0x0a, - 0xf9, 0x4d, 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, - 0xdd, 0x04, 0x6b, 0x69, 0x48, 0x12, 0x68, 0x00, - 0xf0, 0x0a, 0xf8, 0x7e, 0x1c, 0x30, 0x21, 0x00, - 0xf0, 0x0a, 0xfc, 0x20, 0x49, 0x10, 0x20, 0x91, - 0xf0, 0x19, 0xf9, 0x52, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x0b, 0x68, 0x00, 0x90, 0x04, - 0x48, 0x0c, 0x68, 0x00, 0x49, 0x08, 0x60, 0x08, - 0x98, 0x04, 0x49, 0x0a, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x07, 0x60, 0x08, 0xb0, 0x05, 0x20, 0x92, - 0x49, 0x07, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, - 0xe5, 0x60, 0xb0, 0x02, 0xe5, 0x5e, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x20, 0x00, 0x00, 0x04, 0xcc, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xba, 0x2c, 0xb5, 0xf3, 0x1c, 0x07, - 0x1c, 0x3e, 0x69, 0x30, 0x28, 0x13, 0xd1, 0x04, - 0x20, 0x75, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xf4, 0x48, 0x1e, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x2c, 0x19, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, - 0x2c, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, - 0xe7, 0xe7, 0x49, 0x16, 0x20, 0x91, 0xf0, 0x19, - 0xf9, 0x0b, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x09, 0xfc, 0xb8, 0xe7, 0xf5, 0x00, 0xa0, - 0x49, 0x11, 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x04, - 0x20, 0x92, 0x49, 0x0e, 0x60, 0x08, 0x20, 0xff, - 0xe7, 0xd3, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, - 0x1c, 0x05, 0x20, 0x01, 0x40, 0xa0, 0x40, 0x05, - 0x2d, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x99, 0x01, - 0x60, 0x08, 0xe0, 0x02, 0x20, 0x01, 0x99, 0x01, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x03, 0x60, 0x08, - 0x20, 0x00, 0xe7, 0xbe, 0xe7, 0xbd, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x1c, 0x3c, 0x68, 0xe5, 0x69, 0x60, - 0x4b, 0x49, 0x40, 0x18, 0x99, 0x02, 0x07, 0x89, - 0x0f, 0x89, 0x02, 0x09, 0x43, 0x08, 0x61, 0x60, - 0x05, 0x80, 0x48, 0x46, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0xb0, 0x01, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x49, 0x3b, 0x20, 0x91, 0xf0, 0x19, 0xf8, 0xb4, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, - 0xfc, 0x61, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x37, - 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x33, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x01, - 0xe7, 0xe6, 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x0c, - 0x69, 0x20, 0x28, 0x12, 0xdc, 0x09, 0x01, 0x28, - 0x4b, 0x2d, 0x18, 0xc1, 0x91, 0x00, 0x1d, 0xe6, - 0x36, 0x0d, 0x68, 0x30, 0x99, 0x00, 0x60, 0x08, - 0xe0, 0x41, 0x48, 0x26, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x3d, 0x48, 0x28, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x28, 0xf0, 0x0a, - 0xfb, 0x73, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x1f, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, - 0xe7, 0xbe, 0x49, 0x21, 0x20, 0x91, 0xf0, 0x19, - 0xf8, 0x77, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x0a, 0xfb, 0xbd, 0x20, 0x92, 0x49, 0x1c, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x1b, 0x68, 0x09, - 0x60, 0x08, 0x48, 0x1a, 0x68, 0x01, 0x1c, 0x20, - 0xf0, 0x0a, 0xfb, 0x6e, 0x90, 0x00, 0x69, 0x60, - 0x99, 0x00, 0x60, 0xc8, 0x49, 0x14, 0x20, 0x91, - 0xf0, 0x19, 0xf8, 0x5e, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x12, 0x68, 0x00, 0x90, 0x01, - 0x48, 0x11, 0x68, 0x00, 0x49, 0x0f, 0x60, 0x08, - 0x98, 0x01, 0x49, 0x0f, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x0b, 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, - 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, - 0xe7, 0x8a, 0xb0, 0x01, 0xe7, 0x88, 0x00, 0x00, - 0xff, 0xff, 0xfc, 0xff, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x1c, 0x3c, 0x68, 0xe5, 0x69, 0x60, - 0x4b, 0x49, 0x40, 0x18, 0x99, 0x02, 0x07, 0x09, - 0x0f, 0x09, 0x02, 0x89, 0x43, 0x08, 0x61, 0x60, - 0x04, 0x80, 0x48, 0x46, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0xb0, 0x01, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x49, 0x3b, 0x20, 0x91, 0xf0, 0x19, 0xf8, 0x08, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, - 0xfb, 0xb5, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x37, - 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x33, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x01, - 0xe7, 0xe6, 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x0c, - 0x69, 0x20, 0x28, 0x12, 0xdc, 0x09, 0x01, 0x28, - 0x4b, 0x2d, 0x18, 0xc6, 0x1d, 0xe0, 0x30, 0x0d, - 0x90, 0x00, 0x98, 0x00, 0x68, 0x00, 0x60, 0x30, - 0xe0, 0x41, 0x48, 0x26, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x3d, 0x48, 0x28, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x28, 0xf0, 0x0a, - 0xfa, 0xc7, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x1f, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, - 0xe7, 0xbe, 0x49, 0x21, 0x20, 0x91, 0xf0, 0x18, - 0xff, 0xcb, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x0a, 0xfb, 0x11, 0x20, 0x92, 0x49, 0x1c, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x1b, 0x68, 0x09, - 0x60, 0x08, 0x48, 0x1a, 0x68, 0x01, 0x1c, 0x20, - 0xf0, 0x0a, 0xfa, 0xc2, 0x90, 0x00, 0x69, 0x60, - 0x99, 0x00, 0x60, 0xc8, 0x49, 0x14, 0x20, 0x91, - 0xf0, 0x18, 0xff, 0xb2, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x12, 0x68, 0x00, 0x90, 0x01, - 0x48, 0x11, 0x68, 0x00, 0x49, 0x0f, 0x60, 0x08, - 0x98, 0x01, 0x49, 0x0f, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x0b, 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, - 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, - 0xe7, 0x8a, 0xb0, 0x01, 0xe7, 0x88, 0x00, 0x00, - 0xff, 0xff, 0xc3, 0xff, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x82, 0x1c, 0x3c, 0x68, 0xe5, 0x26, 0x00, - 0x99, 0x03, 0x29, 0x01, 0xd1, 0x00, 0x26, 0x01, - 0x69, 0x60, 0x06, 0x80, 0x0f, 0xc0, 0x42, 0xb0, - 0xd1, 0x05, 0x20, 0x00, 0xb0, 0x02, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x69, 0x60, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0x07, 0xf1, - 0x0e, 0x89, 0x43, 0x08, 0x61, 0x60, 0x06, 0x80, - 0x48, 0x44, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, - 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xde, - 0x49, 0x3b, 0x20, 0x91, 0xf0, 0x18, 0xff, 0x50, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, - 0xfa, 0xfd, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x37, - 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x33, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x02, - 0xe7, 0xc9, 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x0e, - 0x69, 0x20, 0x28, 0x12, 0xdc, 0x0b, 0x01, 0x28, - 0x4b, 0x2d, 0x18, 0xc1, 0x91, 0x01, 0x1d, 0xe0, - 0x30, 0x0d, 0x90, 0x00, 0x98, 0x00, 0x68, 0x00, - 0x99, 0x01, 0x60, 0x08, 0xe0, 0x41, 0x48, 0x25, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x27, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, - 0x1c, 0x28, 0xf0, 0x0a, 0xfa, 0x0d, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1e, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x04, 0xe7, 0x9f, 0x49, 0x20, - 0x20, 0x91, 0xf0, 0x18, 0xff, 0x11, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfa, 0x57, - 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, 0x20, 0x01, - 0x49, 0x1a, 0x68, 0x09, 0x60, 0x08, 0x48, 0x19, - 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0a, 0xfa, 0x08, - 0x90, 0x00, 0x69, 0x60, 0x99, 0x00, 0x60, 0xc8, - 0x49, 0x13, 0x20, 0x91, 0xf0, 0x18, 0xfe, 0xf8, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x11, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x10, 0x68, 0x00, - 0x49, 0x0e, 0x60, 0x08, 0x98, 0x01, 0x49, 0x0e, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x0a, 0x60, 0x08, - 0xb0, 0x02, 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x6b, 0xb0, 0x02, - 0xe7, 0x69, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0xb0, 0x83, 0x1c, 0x25, 0x69, 0x28, - 0x28, 0x13, 0xd1, 0x04, 0x20, 0x75, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xee, - 0x20, 0x04, 0x40, 0x38, 0x08, 0x81, 0x91, 0x02, - 0x69, 0x68, 0x23, 0xc0, 0x43, 0xdb, 0x40, 0x18, - 0x07, 0xb9, 0x0f, 0x89, 0x01, 0x89, 0x43, 0x08, - 0x61, 0x68, 0x06, 0x00, 0x69, 0x68, 0x4b, 0x48, - 0x40, 0x18, 0x99, 0x02, 0x07, 0xc9, 0x0c, 0x49, - 0x43, 0x08, 0x61, 0x68, 0x04, 0x40, 0x48, 0x45, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2e, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x04, 0x2e, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xd0, 0x49, 0x3c, - 0x20, 0x91, 0xf0, 0x18, 0xfe, 0x91, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, 0xfa, 0x3e, - 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0x37, 0x58, 0x08, - 0x42, 0xa0, 0xd0, 0x05, 0x20, 0x92, 0x49, 0x34, - 0x60, 0x08, 0x20, 0xff, 0xb0, 0x03, 0xe7, 0xbb, - 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, - 0x69, 0x28, 0x28, 0x0b, 0xdb, 0x0e, 0x69, 0x28, - 0x28, 0x12, 0xdc, 0x0b, 0x01, 0x30, 0x4b, 0x2e, - 0x18, 0xc0, 0x90, 0x01, 0x1d, 0xe8, 0x30, 0x0d, - 0x90, 0x00, 0x98, 0x00, 0x68, 0x00, 0x99, 0x01, - 0x60, 0x08, 0xe0, 0x41, 0x48, 0x25, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x27, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x30, - 0xf0, 0x0a, 0xf9, 0x4e, 0x28, 0x00, 0xd1, 0x05, - 0x20, 0x92, 0x49, 0x1f, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x05, 0xe7, 0x91, 0x49, 0x20, 0x20, 0x91, - 0xf0, 0x18, 0xfe, 0x52, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0xf0, 0x0a, 0xf9, 0x98, 0x20, 0x92, - 0x49, 0x1b, 0x60, 0x08, 0x20, 0x01, 0x49, 0x1b, - 0x68, 0x09, 0x60, 0x08, 0x48, 0x19, 0x68, 0x01, - 0x1c, 0x28, 0xf0, 0x0a, 0xf9, 0x49, 0x90, 0x00, - 0x69, 0x68, 0x99, 0x00, 0x60, 0xc8, 0x49, 0x14, - 0x20, 0x91, 0xf0, 0x18, 0xfe, 0x39, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x11, 0x68, 0x00, - 0x90, 0x01, 0x48, 0x11, 0x68, 0x00, 0x49, 0x0f, - 0x60, 0x08, 0x98, 0x01, 0x49, 0x0e, 0x60, 0x08, - 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, 0xb0, 0x02, - 0x20, 0x92, 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x03, 0xe7, 0x5d, 0xb0, 0x03, 0xe7, 0x5b, - 0xff, 0xff, 0xbf, 0xff, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0x1c, 0x01, 0x20, 0x0d, - 0x06, 0xc0, 0x60, 0x41, 0x48, 0x02, 0x63, 0x81, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, - 0x68, 0x00, 0x0d, 0x00, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0x40, 0x02, 0x00, 0x0a, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0x1c, 0x01, 0x1c, 0x0a, 0x68, 0xd0, - 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x03, 0x1c, 0x0a, - 0x1c, 0x19, 0x69, 0x08, 0x28, 0x13, 0xd1, 0x01, - 0x20, 0x75, 0x47, 0x70, 0x69, 0x08, 0x28, 0x0b, - 0xdb, 0x0b, 0x69, 0x08, 0x28, 0x12, 0xdc, 0x08, - 0x6d, 0x08, 0x60, 0x10, 0x6d, 0x88, 0x60, 0x90, - 0x6d, 0x48, 0x60, 0x50, 0x6d, 0xc8, 0x60, 0xd0, - 0xe0, 0x07, 0x6a, 0x88, 0x60, 0x10, 0x6b, 0x08, - 0x60, 0x90, 0x6a, 0xc8, 0x60, 0x50, 0x6b, 0x48, - 0x60, 0xd0, 0x20, 0x00, 0xe7, 0xe5, 0xe7, 0xe4, - 0x1c, 0x03, 0x1c, 0x0a, 0x68, 0x10, 0x60, 0x18, - 0x68, 0x90, 0x60, 0x98, 0x68, 0x50, 0x60, 0x58, - 0x68, 0xd0, 0x60, 0xd8, 0x47, 0x70, 0xe7, 0xfd, - 0x1c, 0x01, 0x1c, 0x0a, 0x69, 0x50, 0x05, 0x80, - 0x0f, 0x80, 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, - 0x1c, 0x0a, 0x69, 0x50, 0x12, 0x80, 0x07, 0x00, - 0x0f, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0x80, - 0x1c, 0x01, 0x1c, 0x0f, 0x22, 0x01, 0x69, 0x78, - 0x23, 0x20, 0x40, 0x18, 0xd1, 0x00, 0x22, 0x00, - 0x1c, 0x10, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, - 0x1c, 0x01, 0x1c, 0x0b, 0x69, 0x18, 0x28, 0x13, - 0xd1, 0x01, 0x20, 0x75, 0x47, 0x70, 0x69, 0x58, - 0x06, 0x00, 0x0f, 0x82, 0x69, 0x58, 0x04, 0x40, - 0x0f, 0xc0, 0x00, 0x80, 0x43, 0x02, 0x1c, 0x10, - 0xe7, 0xf4, 0xe7, 0xf3, 0x1c, 0x01, 0x20, 0x0d, - 0x06, 0xc0, 0x61, 0x41, 0x20, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0x20, 0x0d, 0x06, 0xc0, 0x69, 0x40, - 0x1c, 0x01, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, - 0x1c, 0x01, 0x22, 0x00, 0x29, 0x01, 0xd1, 0x00, - 0x22, 0x01, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0xc0, - 0x1c, 0x03, 0x2b, 0x02, 0xd1, 0x01, 0x29, 0x00, - 0xd1, 0x02, 0x20, 0x0d, 0x06, 0xc0, 0x60, 0xc2, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x21, 0x01, - 0x20, 0x0d, 0x06, 0xc0, 0x68, 0xc0, 0x1c, 0x02, - 0x2a, 0x00, 0xd1, 0x00, 0x21, 0x00, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x1c, 0x0a, - 0x69, 0x10, 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0x90, - 0x1c, 0x07, 0x1c, 0x0a, 0x1c, 0x39, 0x69, 0x08, - 0x28, 0x13, 0xd0, 0x05, 0x69, 0x08, 0x28, 0x0b, - 0xdb, 0x05, 0x69, 0x08, 0x28, 0x12, 0xdc, 0x02, - 0x20, 0x86, 0xbc, 0x90, 0x47, 0x70, 0x6b, 0x8c, - 0x69, 0x48, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, - 0x08, 0x64, 0x69, 0x08, 0x00, 0x80, 0x4b, 0x03, - 0x58, 0x18, 0x43, 0x60, 0x60, 0x10, 0x20, 0x00, - 0xe7, 0xef, 0xe7, 0xee, 0x2e, 0x03, 0xa8, 0xc8, - 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x81, 0x9c, 0x02, - 0x69, 0x20, 0x28, 0x13, 0xd0, 0x05, 0x69, 0x20, - 0x28, 0x0b, 0xdb, 0x08, 0x69, 0x20, 0x28, 0x12, - 0xdc, 0x05, 0x20, 0x86, 0xb0, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xe5, - 0x68, 0x38, 0x64, 0x20, 0x68, 0x7e, 0x64, 0x66, - 0x08, 0xb6, 0x61, 0xa6, 0x48, 0x3f, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, - 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, - 0xb0, 0x01, 0xe7, 0xe0, 0x49, 0x36, 0x20, 0x91, - 0xf0, 0x18, 0xfd, 0x16, 0x28, 0x92, 0xd0, 0x03, - 0x20, 0x01, 0xf0, 0x09, 0xf8, 0xc3, 0xe7, 0xf5, - 0x00, 0xa8, 0x49, 0x32, 0x58, 0x08, 0x99, 0x02, - 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, 0x49, 0x2e, - 0x60, 0x08, 0x20, 0x86, 0xb0, 0x01, 0xe7, 0xca, - 0x48, 0x2a, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x06, - 0x01, 0x28, 0x4b, 0x2b, 0x18, 0xc0, 0x90, 0x00, - 0x98, 0x00, 0x60, 0x06, 0xe0, 0x41, 0x48, 0x25, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x27, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, - 0x1c, 0x28, 0xf0, 0x09, 0xff, 0xdd, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1e, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xab, 0x49, 0x20, - 0x20, 0x91, 0xf0, 0x18, 0xfc, 0xe1, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xf8, 0x27, - 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, 0x20, 0x01, - 0x49, 0x1a, 0x68, 0x09, 0x60, 0x08, 0x48, 0x19, - 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x09, 0xff, 0xd8, - 0x90, 0x00, 0x69, 0xa0, 0x99, 0x00, 0x61, 0x08, - 0x49, 0x13, 0x20, 0x91, 0xf0, 0x18, 0xfc, 0xc8, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x11, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x10, 0x68, 0x00, - 0x49, 0x0e, 0x60, 0x08, 0x98, 0x01, 0x49, 0x0e, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x0a, 0x60, 0x08, - 0xb0, 0x02, 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0x77, 0xb0, 0x01, - 0xe7, 0x75, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x04, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb4, 0x80, 0x1c, 0x01, - 0x06, 0x0b, 0x0e, 0x1b, 0x22, 0x01, 0x2a, 0x19, - 0xd3, 0x02, 0xe0, 0x0f, 0x32, 0x01, 0xe7, 0xfa, - 0x00, 0x90, 0x4f, 0x08, 0x58, 0x38, 0x68, 0x80, - 0x02, 0x00, 0x0e, 0x00, 0x42, 0x98, 0xd1, 0x04, - 0x00, 0x90, 0x4f, 0x04, 0x58, 0x38, 0xbc, 0x80, - 0x47, 0x70, 0xe7, 0xef, 0x20, 0x00, 0xe7, 0xfa, - 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xc4, - 0xb4, 0x90, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x38, - 0x16, 0x01, 0x48, 0x20, 0x60, 0x02, 0x48, 0x20, - 0x68, 0x80, 0x23, 0x33, 0x06, 0x5b, 0x65, 0xd8, - 0x48, 0x1d, 0x68, 0xc0, 0x23, 0x33, 0x06, 0x5b, - 0x66, 0x18, 0x48, 0x1c, 0x4b, 0x1a, 0x60, 0x98, - 0x48, 0x1b, 0x4b, 0x19, 0x60, 0xd8, 0x20, 0x01, - 0x23, 0x33, 0x06, 0x5b, 0x66, 0xd8, 0x48, 0x19, - 0x68, 0x04, 0x23, 0x01, 0x04, 0xdb, 0x43, 0x23, - 0x60, 0x03, 0x48, 0x16, 0x68, 0x04, 0x23, 0x01, - 0x04, 0xdb, 0x43, 0x9c, 0x1c, 0x23, 0x60, 0x03, - 0x29, 0x00, 0xd1, 0x10, 0x20, 0xff, 0x30, 0x14, - 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, 0x48, 0x10, - 0x68, 0x04, 0x23, 0xff, 0x33, 0x01, 0x43, 0x9c, - 0x1c, 0x23, 0x60, 0x03, 0x48, 0x0d, 0x23, 0x1b, - 0x06, 0x9b, 0x64, 0x18, 0xe0, 0x08, 0x20, 0xff, - 0x30, 0x14, 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, - 0x48, 0x02, 0x68, 0x00, 0x4b, 0x08, 0x60, 0x18, - 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x08, 0x9b, 0xbc, - 0x2e, 0x08, 0xb9, 0x88, 0xcc, 0x1f, 0xe0, 0x00, - 0xcc, 0x1f, 0xfe, 0x00, 0x6c, 0x00, 0x00, 0x40, - 0x6c, 0x00, 0x00, 0x20, 0x00, 0x00, 0x82, 0x18, - 0x6c, 0x00, 0x00, 0x80, 0xb4, 0xf0, 0x1c, 0x01, - 0xb0, 0x82, 0x23, 0x1b, 0x06, 0x9b, 0x6a, 0x1b, - 0x1c, 0x18, 0x27, 0x00, 0x22, 0x00, 0x08, 0x40, - 0x00, 0x40, 0x4b, 0xaf, 0x68, 0x1c, 0x08, 0x64, - 0x00, 0x64, 0x60, 0x1c, 0x4b, 0xad, 0x68, 0x1b, - 0x1c, 0x1d, 0x23, 0x1b, 0x06, 0x9b, 0x6c, 0x1b, - 0x93, 0x01, 0x23, 0xff, 0x33, 0x01, 0x40, 0x03, - 0xd0, 0x00, 0x22, 0xff, 0x23, 0x01, 0x04, 0x9b, - 0x40, 0x03, 0xd0, 0x1b, 0x4c, 0xa4, 0x68, 0x26, - 0x23, 0x01, 0x04, 0x9b, 0x43, 0x9e, 0x1c, 0x33, - 0x60, 0x23, 0x4c, 0xa1, 0x68, 0x26, 0x23, 0x01, - 0x43, 0x33, 0x60, 0x23, 0x23, 0x00, 0x93, 0x00, - 0x9b, 0x00, 0x2b, 0x0a, 0xdb, 0x04, 0xe0, 0x04, - 0x9b, 0x00, 0x33, 0x01, 0x93, 0x00, 0xe7, 0xf7, - 0xe7, 0xfa, 0x4b, 0x99, 0x68, 0x1c, 0x08, 0x64, - 0x00, 0x64, 0x60, 0x1c, 0x23, 0x01, 0x02, 0x9b, - 0x40, 0x0b, 0xd0, 0x29, 0x23, 0x01, 0x02, 0xdb, - 0x40, 0x0b, 0xd0, 0x01, 0x4b, 0x94, 0x40, 0x18, - 0x23, 0x01, 0x03, 0x1b, 0x40, 0x0b, 0xd0, 0x02, - 0x23, 0x01, 0x05, 0x9b, 0x43, 0x18, 0x4b, 0x91, - 0x40, 0x18, 0x02, 0x4c, 0x23, 0x7f, 0x02, 0x5b, - 0x40, 0x23, 0x43, 0x18, 0x23, 0x40, 0x40, 0x0b, - 0xd0, 0x03, 0x23, 0x01, 0x04, 0x5b, 0x43, 0x18, - 0xe0, 0x0a, 0x4b, 0x8b, 0x40, 0x18, 0x23, 0x20, - 0x40, 0x0b, 0xd0, 0x03, 0x23, 0x01, 0x04, 0x1b, - 0x43, 0x18, 0xe0, 0x01, 0x4b, 0x87, 0x40, 0x18, - 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, 0xe0, 0xfc, - 0x23, 0x04, 0x40, 0x0b, 0xd0, 0x0f, 0x4c, 0x7e, - 0x68, 0x26, 0x23, 0x01, 0x43, 0x33, 0x60, 0x23, - 0x4b, 0x81, 0x68, 0x9b, 0x24, 0x33, 0x06, 0x64, - 0x65, 0xe3, 0x4b, 0x7f, 0x68, 0xdb, 0x24, 0x33, - 0x06, 0x64, 0x66, 0x23, 0xe0, 0xe9, 0x23, 0x01, - 0x03, 0x5b, 0x40, 0x0b, 0xd0, 0x13, 0x4b, 0x7a, - 0x68, 0x9b, 0x24, 0x33, 0x06, 0x64, 0x65, 0xe3, - 0x4b, 0x77, 0x68, 0xdb, 0x24, 0x33, 0x06, 0x64, - 0x66, 0x23, 0x23, 0x01, 0x24, 0x33, 0x06, 0x64, - 0x66, 0xe3, 0x4c, 0x6d, 0x68, 0x26, 0x23, 0x01, - 0x43, 0x33, 0x60, 0x23, 0xe0, 0xd1, 0x07, 0xcb, - 0x0f, 0xdb, 0xd0, 0x02, 0x23, 0x02, 0x43, 0x18, - 0xe0, 0x05, 0x23, 0x02, 0x40, 0x0b, 0xd0, 0x02, - 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, 0x23, 0x07, - 0x01, 0xdb, 0x40, 0x0b, 0xd0, 0x0f, 0x23, 0x0c, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0xff, 0x33, 0x01, - 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x04, 0x43, 0x18, - 0xe0, 0x05, 0x23, 0x01, 0x02, 0x5b, 0x40, 0x0b, - 0xd0, 0x01, 0x23, 0x08, 0x43, 0x18, 0x23, 0x01, - 0x04, 0x1b, 0x40, 0x0b, 0xd0, 0x08, 0x23, 0x01, - 0x04, 0x9b, 0x43, 0x98, 0x1c, 0x04, 0x20, 0x01, - 0x04, 0xc0, 0x43, 0x20, 0x23, 0x01, 0x43, 0x18, - 0x23, 0x78, 0x40, 0x0b, 0xd0, 0x73, 0x23, 0x30, - 0x40, 0x03, 0xd0, 0x06, 0x2b, 0x10, 0xd0, 0x04, - 0x2b, 0x20, 0xd0, 0x42, 0x2b, 0x30, 0xd0, 0x40, - 0xe0, 0x81, 0x23, 0x10, 0x40, 0x0b, 0xd1, 0x02, - 0x23, 0x08, 0x40, 0x0b, 0xd0, 0x08, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0x10, 0x40, 0x0b, - 0xd0, 0x01, 0x23, 0x10, 0x43, 0x18, 0xe0, 0x2f, - 0x23, 0x30, 0x43, 0xdb, 0x40, 0x18, 0x23, 0x20, - 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x20, 0x43, 0x18, - 0xe0, 0x01, 0x23, 0x30, 0x43, 0x18, 0x23, 0x01, - 0x43, 0x18, 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, - 0x27, 0xff, 0x2a, 0x00, 0xd0, 0x04, 0x4b, 0x43, - 0x68, 0x1b, 0x4c, 0x43, 0x60, 0x23, 0xe0, 0x17, - 0x07, 0xab, 0x0f, 0x9b, 0xd0, 0x09, 0x2b, 0x01, - 0xd0, 0x02, 0x2b, 0x02, 0xd0, 0x0a, 0xe0, 0x0e, - 0x4b, 0x3e, 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, - 0xe0, 0x0a, 0x4b, 0x3d, 0x24, 0x1b, 0x06, 0xa4, - 0x64, 0x23, 0xe0, 0x05, 0x4b, 0x3b, 0x24, 0x1b, - 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x00, 0xe7, 0xff, - 0xe0, 0x42, 0x23, 0x40, 0x40, 0x0b, 0xd1, 0x02, - 0x23, 0x20, 0x40, 0x0b, 0xd0, 0x0b, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0x20, 0x40, 0x0b, - 0xd0, 0x02, 0x23, 0x20, 0x43, 0x18, 0xe0, 0x01, - 0x23, 0x30, 0x43, 0x18, 0xe0, 0x2e, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0x10, 0x40, 0x0b, - 0xd0, 0x01, 0x23, 0x10, 0x43, 0x18, 0x23, 0x01, - 0x43, 0x18, 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, - 0x27, 0xff, 0x2a, 0x00, 0xd0, 0x04, 0x4b, 0x23, - 0x68, 0x1b, 0x4c, 0x23, 0x60, 0x23, 0xe0, 0x19, - 0x07, 0xab, 0x0f, 0x9b, 0xe0, 0x00, 0xe0, 0x17, - 0xd0, 0x09, 0x2b, 0x01, 0xd0, 0x02, 0x2b, 0x02, - 0xd0, 0x0a, 0xe0, 0x0e, 0x4b, 0x20, 0x24, 0x1b, - 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x0a, 0x4b, 0x1f, - 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x05, - 0x4b, 0x1d, 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, - 0xe0, 0x00, 0xe7, 0xff, 0xe0, 0x00, 0xe7, 0xff, - 0x2f, 0x00, 0xd1, 0x12, 0x23, 0x1b, 0x06, 0x9b, - 0x62, 0x18, 0x23, 0x00, 0x93, 0x00, 0x9b, 0x00, - 0x2b, 0x0a, 0xdb, 0x04, 0xe0, 0x04, 0x9b, 0x00, - 0x33, 0x01, 0x93, 0x00, 0xe7, 0xf7, 0xe7, 0xfa, - 0x4b, 0x03, 0x68, 0x1c, 0x08, 0x64, 0x00, 0x64, - 0x60, 0x1c, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x6c, 0x00, 0x00, 0x20, 0x6c, 0x00, 0x68, 0x00, - 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, - 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, - 0x2e, 0x08, 0xb9, 0x88, 0x2e, 0x08, 0x9b, 0xbc, - 0x6c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x98, 0x60, - 0x00, 0x01, 0x58, 0x60, 0x00, 0x02, 0x54, 0x28, - 0x00, 0x00, 0x82, 0x18, 0x00, 0x01, 0x42, 0x18, - 0x00, 0x02, 0x42, 0x18, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x00, 0x98, 0x00, 0x28, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x33, 0x06, 0x40, - 0x6e, 0x00, 0x21, 0x33, 0x06, 0x49, 0x6d, 0xc9, - 0x1a, 0x46, 0x48, 0x12, 0x6c, 0x80, 0x1c, 0x04, - 0x48, 0x10, 0x6c, 0xc0, 0x1c, 0x05, 0x42, 0xac, - 0xd9, 0x09, 0x1b, 0x60, 0x21, 0x64, 0x43, 0x41, - 0x1c, 0x30, 0xf0, 0x09, 0xff, 0xcb, 0x21, 0x64, - 0x1a, 0x08, 0x60, 0x38, 0xe0, 0x06, 0x1b, 0x28, - 0x21, 0x64, 0x43, 0x41, 0x1c, 0x30, 0xf0, 0x09, - 0xff, 0xc1, 0x60, 0x38, 0x42, 0xac, 0xd1, 0x03, - 0x20, 0x31, 0xb0, 0x01, 0xe7, 0xd6, 0xe0, 0x02, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xd2, 0xb0, 0x01, - 0xe7, 0xd0, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, - 0xb5, 0xff, 0x1c, 0x14, 0x1c, 0x1f, 0xb0, 0x82, - 0x98, 0x02, 0x06, 0x01, 0x0e, 0x09, 0x91, 0x00, - 0x98, 0x0b, 0x06, 0x03, 0x16, 0x1b, 0x93, 0x01, - 0xb0, 0x84, 0x99, 0x04, 0x29, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x9b, 0x05, 0x2b, 0x1f, - 0xdd, 0x02, 0x20, 0xaf, 0xb0, 0x06, 0xe7, 0xf5, - 0x98, 0x07, 0x90, 0x01, 0x2f, 0x00, 0xd0, 0x47, - 0xb0, 0x81, 0x98, 0x08, 0x22, 0x00, 0x92, 0x00, - 0x22, 0x1b, 0x06, 0x92, 0x6a, 0x12, 0x23, 0x01, - 0x05, 0x1b, 0x40, 0x1a, 0xd0, 0x01, 0x22, 0xff, - 0x92, 0x00, 0x25, 0x00, 0x08, 0x62, 0x42, 0xaa, - 0xd8, 0x02, 0xe0, 0x34, 0x35, 0x01, 0xe7, 0xf9, - 0x9a, 0x00, 0x2a, 0x00, 0xd0, 0x1e, 0x88, 0x02, - 0x23, 0xff, 0x02, 0x1b, 0x40, 0x1a, 0x12, 0x12, - 0x88, 0x03, 0x02, 0x1b, 0x43, 0x1a, 0x04, 0x11, - 0x0c, 0x09, 0x2f, 0x00, 0xda, 0x05, 0x42, 0x7a, - 0x41, 0x11, 0x1c, 0x0b, 0x04, 0x19, 0x0c, 0x09, - 0xe0, 0x03, 0x40, 0xb9, 0x1c, 0x0a, 0x04, 0x11, - 0x0c, 0x09, 0x22, 0xff, 0x02, 0x12, 0x40, 0x0a, - 0x12, 0x12, 0x02, 0x0b, 0x43, 0x13, 0x80, 0x03, - 0x30, 0x02, 0xe0, 0x0f, 0x2f, 0x00, 0xda, 0x07, - 0x88, 0x02, 0x42, 0x7e, 0x41, 0x32, 0x04, 0x12, - 0x0c, 0x12, 0x80, 0x02, 0x30, 0x02, 0xe0, 0x05, - 0x88, 0x02, 0x40, 0xba, 0x04, 0x12, 0x0c, 0x12, - 0x80, 0x02, 0x30, 0x02, 0xe7, 0xca, 0xb0, 0x01, - 0x49, 0x23, 0x91, 0x03, 0x20, 0x01, 0x06, 0x00, - 0x99, 0x03, 0x60, 0x08, 0x48, 0x21, 0x6c, 0x80, - 0x49, 0x20, 0x6c, 0xc9, 0x1a, 0x40, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x00, 0xdc, 0x09, 0x20, 0x33, - 0x06, 0x40, 0x6e, 0x00, 0x21, 0x33, 0x06, 0x49, - 0x6d, 0xc9, 0x1a, 0x40, 0x99, 0x00, 0x18, 0x40, - 0x90, 0x00, 0x98, 0x00, 0x23, 0x3b, 0x01, 0xdb, - 0x42, 0x98, 0xda, 0x02, 0x20, 0x06, 0xf0, 0x08, - 0xfd, 0x8d, 0x98, 0x00, 0x23, 0x3b, 0x01, 0xdb, - 0x42, 0x98, 0xdb, 0xdf, 0x98, 0x00, 0x42, 0x84, - 0xd9, 0x02, 0x98, 0x00, 0x90, 0x02, 0xe0, 0x00, - 0x94, 0x02, 0x22, 0x04, 0x99, 0x03, 0xb4, 0x06, - 0x9b, 0x07, 0x9a, 0x04, 0x99, 0x06, 0x98, 0x03, - 0xf0, 0x04, 0xfb, 0x8c, 0xb0, 0x02, 0x98, 0x02, - 0x1a, 0x24, 0x98, 0x01, 0x99, 0x02, 0x18, 0x40, - 0x90, 0x01, 0x20, 0x00, 0x90, 0x00, 0x2c, 0x00, - 0xd1, 0xc4, 0x20, 0x00, 0xb0, 0x06, 0xe7, 0x65, - 0xb0, 0x04, 0xb0, 0x02, 0xe7, 0x62, 0x00, 0x00, - 0x9e, 0x00, 0x08, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x20, 0x1b, 0x06, 0x80, 0x6a, 0x00, 0x07, 0xc0, - 0x0f, 0xc0, 0x4a, 0x03, 0x68, 0x12, 0x1c, 0x01, - 0x43, 0x11, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, - 0x6c, 0x00, 0x08, 0x00, 0xb4, 0x90, 0x1c, 0x01, - 0x20, 0x1b, 0x06, 0x80, 0x6a, 0x00, 0x1c, 0x04, - 0x48, 0x1b, 0x68, 0x00, 0x1c, 0x07, 0x20, 0x30, - 0x40, 0x20, 0xd0, 0x06, 0x28, 0x10, 0xd0, 0x06, - 0x28, 0x20, 0xd0, 0x06, 0x28, 0x30, 0xd0, 0x06, - 0xe0, 0x07, 0x22, 0x01, 0xe0, 0x08, 0x22, 0x02, - 0xe0, 0x06, 0x22, 0x04, 0xe0, 0x04, 0x22, 0x08, - 0xe0, 0x02, 0x20, 0x30, 0xbc, 0x90, 0x47, 0x70, - 0x20, 0x03, 0x07, 0x40, 0x40, 0x38, 0x0f, 0x40, - 0xd0, 0x04, 0x28, 0x01, 0xd0, 0x05, 0x28, 0x02, - 0xd0, 0x06, 0xe0, 0x08, 0x23, 0x10, 0x43, 0x1a, - 0xe0, 0x07, 0x23, 0x20, 0x43, 0x1a, 0xe0, 0x04, - 0x23, 0x40, 0x43, 0x1a, 0xe0, 0x01, 0x20, 0x30, - 0xe7, 0xe8, 0x20, 0x01, 0x05, 0xc0, 0x40, 0x38, - 0xd1, 0x01, 0x23, 0x80, 0x43, 0x1a, 0x60, 0x0a, - 0x20, 0x00, 0xe7, 0xdf, 0xe7, 0xde, 0x00, 0x00, - 0x6c, 0x00, 0x08, 0x00, 0x1c, 0x01, 0x48, 0x01, - 0x60, 0x01, 0x47, 0x70, 0x6c, 0x00, 0x00, 0x80, - 0x1c, 0x01, 0x29, 0x1f, 0xdd, 0x01, 0x20, 0xaf, - 0x47, 0x70, 0x20, 0x80, 0x6c, 0x00, 0x60, 0x01, - 0x20, 0x00, 0xe7, 0xf9, 0xe7, 0xf8, 0xb5, 0xf3, - 0x1c, 0x0a, 0xb0, 0x81, 0x98, 0x01, 0x06, 0x03, - 0x0e, 0x1b, 0x93, 0x00, 0xb0, 0x81, 0x20, 0x1b, - 0x06, 0x80, 0x6a, 0x00, 0x1c, 0x01, 0x25, 0x00, - 0x20, 0x00, 0x90, 0x00, 0x20, 0x1b, 0x06, 0x80, - 0x6c, 0x00, 0x1c, 0x04, 0x27, 0x00, 0x9b, 0x01, - 0x2b, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x02, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc0, 0x9b, 0x01, 0x00, 0xdb, - 0x4e, 0x5f, 0x68, 0x36, 0x19, 0x9b, 0x60, 0x58, - 0x20, 0xff, 0x30, 0x01, 0x40, 0x08, 0xd0, 0x01, - 0x20, 0xff, 0x90, 0x00, 0x23, 0x01, 0x04, 0xdb, - 0x43, 0x99, 0x1c, 0x08, 0x21, 0x01, 0x04, 0x89, - 0x43, 0x01, 0x20, 0x01, 0x03, 0x00, 0x40, 0x10, - 0xd0, 0x05, 0x06, 0x90, 0x0e, 0x80, 0xd0, 0x02, - 0x23, 0x01, 0x05, 0x1b, 0x43, 0x19, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x19, 0x05, 0x10, 0x0d, 0x00, - 0x28, 0x40, 0xd0, 0x48, 0xdc, 0x0e, 0x28, 0x08, - 0xd0, 0x32, 0xdc, 0x06, 0x28, 0x01, 0xd0, 0x1e, - 0x28, 0x02, 0xd0, 0x21, 0x28, 0x04, 0xd0, 0x26, - 0xe0, 0x67, 0x28, 0x10, 0xd0, 0x2f, 0x28, 0x20, - 0xd0, 0x32, 0xe0, 0x62, 0x23, 0x01, 0x02, 0x5b, - 0x42, 0x98, 0xd0, 0x49, 0xdc, 0x06, 0x28, 0x80, - 0xd0, 0x38, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x3b, 0xe0, 0x56, 0x23, 0x01, 0x02, 0x9b, - 0x42, 0x98, 0xd0, 0x44, 0x23, 0x01, 0x02, 0xdb, - 0x42, 0x98, 0xd0, 0x47, 0xe0, 0x4d, 0x4b, 0x3d, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x3b, 0xe0, 0x49, - 0x23, 0x10, 0x43, 0x19, 0x4b, 0x39, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x38, 0xe0, 0x42, 0x4b, 0x38, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x36, 0xe0, 0x3d, - 0x23, 0x10, 0x43, 0x19, 0x4b, 0x34, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x33, 0xe0, 0x36, 0x4b, 0x33, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x31, 0xe0, 0x31, - 0x23, 0x10, 0x43, 0x19, 0x4b, 0x2f, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x2e, 0xe0, 0x2a, 0x23, 0x20, - 0x43, 0x19, 0x4b, 0x2d, 0x42, 0x9c, 0xd0, 0x00, - 0x4f, 0x2b, 0xe0, 0x23, 0x23, 0x30, 0x43, 0x19, - 0x4b, 0x29, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x28, - 0xe0, 0x1c, 0x23, 0x20, 0x43, 0x19, 0x4b, 0x27, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x25, 0xe0, 0x15, - 0x23, 0x30, 0x43, 0x19, 0x4b, 0x23, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x22, 0xe0, 0x0e, 0x23, 0x20, - 0x43, 0x19, 0x4b, 0x21, 0x42, 0x9c, 0xd0, 0x00, - 0x4f, 0x1f, 0xe0, 0x07, 0x23, 0x30, 0x43, 0x19, - 0x4b, 0x1d, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x1c, - 0xe0, 0x00, 0xe7, 0xff, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x0a, 0x23, 0x01, 0x43, 0x19, 0x20, 0x1b, - 0x06, 0x80, 0x62, 0x01, 0x48, 0x17, 0x68, 0x00, - 0x4b, 0x17, 0x60, 0x18, 0x25, 0xff, 0xe0, 0x0e, - 0x23, 0x01, 0x43, 0x19, 0x2f, 0x00, 0xd0, 0x07, - 0x20, 0x1b, 0x06, 0x80, 0x62, 0x01, 0x20, 0x1b, - 0x06, 0x80, 0x64, 0x07, 0x25, 0xff, 0xe0, 0x02, - 0x20, 0x1b, 0x06, 0x80, 0x62, 0x01, 0x2d, 0x00, - 0xd1, 0x04, 0x48, 0x0e, 0x68, 0x03, 0x08, 0x5b, - 0x00, 0x5b, 0x60, 0x03, 0x20, 0x00, 0xb0, 0x02, - 0xe7, 0x36, 0xb0, 0x01, 0xb0, 0x01, 0xe7, 0x33, - 0x2e, 0x08, 0x9b, 0x40, 0x00, 0x00, 0x82, 0x18, - 0x00, 0x01, 0x42, 0x18, 0x00, 0x02, 0x42, 0x18, - 0x00, 0x00, 0x98, 0x60, 0x00, 0x01, 0x58, 0x60, - 0x00, 0x02, 0x54, 0x28, 0x2e, 0x08, 0x9b, 0xbc, - 0x6c, 0x00, 0x00, 0x80, 0x6c, 0x00, 0x00, 0x20, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x82, 0x49, 0x2c, - 0x46, 0x68, 0x22, 0x08, 0xf0, 0x09, 0xfd, 0xca, - 0x20, 0x04, 0xf7, 0xff, 0xfc, 0x23, 0x48, 0x29, - 0x68, 0x80, 0x21, 0x33, 0x06, 0x49, 0x65, 0xc8, - 0x48, 0x26, 0x68, 0xc0, 0x21, 0x33, 0x06, 0x49, - 0x66, 0x08, 0x48, 0x25, 0x68, 0x01, 0x23, 0x02, - 0x43, 0x19, 0x60, 0x01, 0x20, 0x01, 0x21, 0x33, - 0x06, 0x49, 0x67, 0xc8, 0x48, 0x21, 0x68, 0x01, - 0x31, 0xff, 0x31, 0xff, 0x31, 0x02, 0x60, 0x01, - 0x1c, 0x78, 0x12, 0x00, 0xab, 0x01, 0x70, 0x18, - 0x1c, 0x78, 0xab, 0x01, 0x70, 0x58, 0x20, 0x33, - 0x06, 0x40, 0x6d, 0xc5, 0x4b, 0x1a, 0x43, 0x1d, - 0x26, 0x00, 0x2e, 0x10, 0xdb, 0x02, 0xe0, 0x18, - 0x36, 0x01, 0xe7, 0xfa, 0x24, 0x00, 0x2c, 0x07, - 0xd3, 0x02, 0xe0, 0x06, 0x34, 0x01, 0xe7, 0xfa, - 0x46, 0x68, 0x5d, 0x01, 0x70, 0x29, 0x35, 0x01, - 0xe7, 0xf8, 0x24, 0x00, 0x42, 0xbc, 0xdb, 0x02, - 0xe0, 0x06, 0x34, 0x01, 0xe7, 0xfa, 0x98, 0x02, - 0x5d, 0x01, 0x70, 0x29, 0x35, 0x01, 0xe7, 0xf8, - 0xe7, 0xe6, 0x20, 0x33, 0x06, 0x40, 0x66, 0x05, - 0x48, 0x0a, 0x68, 0x01, 0x23, 0x01, 0x05, 0x5b, - 0x43, 0x19, 0x60, 0x01, 0xb0, 0x02, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x03, 0xa8, 0x70, 0x2e, 0x08, 0xb9, 0x88, - 0x66, 0x00, 0x00, 0x70, 0x66, 0x00, 0x00, 0x5c, - 0xcc, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x20, - 0xb5, 0xf7, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x20, - 0x0e, 0x00, 0x06, 0x3d, 0x0e, 0x2d, 0x99, 0x02, - 0x06, 0x0a, 0x0e, 0x12, 0x21, 0x02, 0x40, 0x01, - 0xd0, 0x04, 0x21, 0xff, 0x4b, 0x2f, 0x68, 0x1b, - 0x72, 0x19, 0xe0, 0x0c, 0x49, 0x2d, 0x68, 0x09, - 0x7a, 0x09, 0x29, 0xff, 0xd1, 0x03, 0x21, 0x00, - 0x4b, 0x2a, 0x68, 0x1b, 0x60, 0x19, 0x21, 0x00, - 0x4b, 0x28, 0x68, 0x1b, 0x72, 0x19, 0x07, 0xc1, - 0x0f, 0xc9, 0xd0, 0x04, 0x21, 0xff, 0x4b, 0x25, - 0x68, 0x1b, 0x72, 0x59, 0xe0, 0x0c, 0x49, 0x23, - 0x68, 0x09, 0x7a, 0x49, 0x29, 0xff, 0xd1, 0x03, - 0x21, 0x00, 0x4b, 0x20, 0x68, 0x1b, 0x60, 0x59, - 0x21, 0x00, 0x4b, 0x1e, 0x68, 0x1b, 0x72, 0x59, - 0x2d, 0x01, 0xd1, 0x0f, 0x49, 0x1c, 0x68, 0x0e, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x9e, 0x1c, 0x33, - 0x60, 0x0b, 0x49, 0x1a, 0x68, 0x09, 0x78, 0x09, - 0x23, 0x02, 0x43, 0x19, 0x4b, 0x17, 0x68, 0x1b, - 0x70, 0x19, 0xe0, 0x0e, 0x49, 0x14, 0x68, 0x0e, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x33, 0x60, 0x0b, - 0x49, 0x12, 0x68, 0x09, 0x78, 0x09, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x19, 0x4b, 0x0f, 0x68, 0x1b, - 0x70, 0x19, 0x49, 0x0f, 0x62, 0x4a, 0x2a, 0x01, - 0xd1, 0x08, 0x49, 0x0c, 0x68, 0x09, 0x78, 0x09, - 0x23, 0x01, 0x43, 0x19, 0x4b, 0x09, 0x68, 0x1b, - 0x70, 0x19, 0xe0, 0x07, 0x49, 0x07, 0x68, 0x09, - 0x78, 0x09, 0x08, 0x49, 0x00, 0x49, 0x4b, 0x05, - 0x68, 0x1b, 0x70, 0x19, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x9b, 0xc0, - 0x6c, 0x00, 0x00, 0x20, 0x2e, 0x08, 0x9b, 0xc4, - 0xcc, 0x00, 0x0f, 0x80, 0xb4, 0x80, 0x1c, 0x07, - 0x1c, 0x0a, 0x68, 0x38, 0x49, 0x23, 0x68, 0x09, - 0x60, 0xc8, 0x68, 0x78, 0x49, 0x21, 0x68, 0x09, - 0x61, 0x08, 0x68, 0xb8, 0x49, 0x1f, 0x68, 0x09, - 0x61, 0x48, 0x68, 0xf8, 0x49, 0x1d, 0x68, 0x09, - 0x61, 0x88, 0x7d, 0x38, 0x49, 0x1b, 0x68, 0x09, - 0x31, 0x20, 0x70, 0x08, 0x7d, 0x78, 0x49, 0x19, - 0x68, 0x09, 0x31, 0x20, 0x70, 0x48, 0x69, 0x38, - 0x49, 0x16, 0x68, 0x09, 0x61, 0xc8, 0x7d, 0xb8, - 0x49, 0x14, 0x68, 0x09, 0x31, 0x20, 0x70, 0x88, - 0x68, 0x10, 0x49, 0x12, 0x68, 0x09, 0x62, 0x48, - 0x68, 0x50, 0x49, 0x10, 0x68, 0x09, 0x62, 0x88, - 0x68, 0x90, 0x49, 0x0e, 0x68, 0x09, 0x62, 0xc8, - 0x68, 0xd0, 0x49, 0x0c, 0x68, 0x09, 0x63, 0x08, - 0x7d, 0x10, 0x49, 0x0a, 0x68, 0x09, 0x31, 0x20, - 0x76, 0x08, 0x7d, 0x50, 0x49, 0x07, 0x68, 0x09, - 0x31, 0x20, 0x76, 0x48, 0x69, 0x10, 0x49, 0x05, - 0x68, 0x09, 0x63, 0x48, 0x7d, 0x90, 0x49, 0x03, - 0x68, 0x09, 0x31, 0x20, 0x76, 0x88, 0xbc, 0x80, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc0, - 0x1c, 0x02, 0x1c, 0x0b, 0x48, 0x03, 0x68, 0x00, - 0x60, 0x02, 0x48, 0x02, 0x68, 0x00, 0x60, 0x43, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc0, - 0xb5, 0xf3, 0xb0, 0x88, 0x98, 0x08, 0x68, 0x04, - 0x20, 0x01, 0x90, 0x06, 0x20, 0x01, 0x90, 0x05, - 0x48, 0x8c, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x19, - 0x48, 0x8a, 0x68, 0x00, 0x38, 0x01, 0x49, 0x89, - 0x60, 0x08, 0x48, 0x88, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x10, 0x48, 0x87, 0x78, 0x80, 0x90, 0x00, - 0x98, 0x00, 0x00, 0xc0, 0x49, 0x85, 0x68, 0x09, - 0x58, 0x08, 0x23, 0xff, 0x33, 0x01, 0x43, 0x98, - 0x1c, 0x01, 0x98, 0x00, 0x00, 0xc0, 0x4a, 0x81, - 0x68, 0x12, 0x50, 0x11, 0x20, 0x33, 0x06, 0x40, - 0x6e, 0x00, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc1, - 0x91, 0x02, 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x90, 0x01, - 0x48, 0x79, 0x68, 0x00, 0x42, 0x84, 0xd1, 0x73, - 0x98, 0x01, 0x1d, 0xc7, 0x37, 0x01, 0x78, 0x38, - 0x18, 0x38, 0x1c, 0x47, 0x48, 0x75, 0x6c, 0xc0, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x42, 0xb8, - 0xd9, 0x19, 0x78, 0x38, 0x28, 0xff, 0xd1, 0x12, - 0x78, 0x78, 0x23, 0xf0, 0x40, 0x18, 0x28, 0xf0, - 0xd1, 0x0d, 0x78, 0xb8, 0x10, 0x80, 0x07, 0x80, - 0x0f, 0x80, 0x06, 0x00, 0x16, 0x00, 0x90, 0x06, - 0x78, 0x78, 0x10, 0xc0, 0x07, 0xc0, 0x09, 0xc0, - 0x16, 0x00, 0x90, 0x05, 0xe0, 0x03, 0x21, 0x01, - 0x70, 0x39, 0x18, 0x7f, 0xe7, 0xde, 0x21, 0x40, - 0x91, 0x03, 0x25, 0x20, 0x21, 0x14, 0x91, 0x07, - 0x98, 0x06, 0x28, 0x00, 0xd1, 0x02, 0x25, 0x23, - 0x21, 0x12, 0x91, 0x07, 0x98, 0x06, 0x28, 0x02, - 0xd1, 0x02, 0x25, 0x30, 0x21, 0x18, 0x91, 0x07, - 0x98, 0x05, 0x28, 0x00, 0xd1, 0x02, 0x00, 0x6d, - 0x21, 0x70, 0x91, 0x03, 0x99, 0x03, 0x00, 0x48, - 0x99, 0x02, 0x1a, 0x08, 0x90, 0x04, 0x98, 0x04, - 0x99, 0x02, 0x42, 0x88, 0xd3, 0x05, 0xe0, 0x4e, - 0x98, 0x04, 0x99, 0x03, 0x18, 0x40, 0x90, 0x04, - 0xe7, 0xf5, 0x9f, 0x04, 0x21, 0x00, 0x70, 0x39, - 0x37, 0x01, 0x21, 0x00, 0x70, 0x39, 0x37, 0x01, - 0x21, 0x01, 0x70, 0x39, 0x18, 0x7f, 0x21, 0xc0, - 0x70, 0x39, 0x37, 0x01, 0x21, 0x00, 0x70, 0x39, - 0x37, 0x01, 0x21, 0x3a, 0x70, 0x39, 0x37, 0x01, - 0x21, 0x80, 0x70, 0x39, 0x37, 0x01, 0x21, 0x00, - 0x70, 0x39, 0x37, 0x01, 0x99, 0x03, 0x1f, 0xc8, - 0x38, 0x02, 0x1b, 0x41, 0x70, 0x39, 0x37, 0x01, - 0x26, 0x00, 0x99, 0x03, 0x1f, 0xc8, 0x38, 0x02, - 0x1b, 0x40, 0x42, 0xb0, 0xdc, 0x04, 0xe0, 0x00, - 0xe0, 0x34, 0xe0, 0x05, 0x36, 0x01, 0xe7, 0xf4, - 0x21, 0xff, 0x70, 0x39, 0x37, 0x01, 0xe7, 0xf9, - 0x21, 0xff, 0x70, 0x39, 0x37, 0x01, 0x98, 0x05, - 0x00, 0xc0, 0x21, 0xf7, 0x43, 0x01, 0x70, 0x39, - 0x37, 0x01, 0x99, 0x07, 0x70, 0x39, 0x37, 0x01, - 0x21, 0xc0, 0x70, 0x39, 0x37, 0x01, 0x26, 0x00, - 0x1f, 0x28, 0x42, 0xb0, 0xdc, 0x02, 0xe0, 0x05, - 0x36, 0x01, 0xe7, 0xf9, 0x21, 0x00, 0x70, 0x39, - 0x37, 0x01, 0xe7, 0xf9, 0xe7, 0xb0, 0x99, 0x03, - 0x00, 0x48, 0x99, 0x02, 0x1a, 0x08, 0x23, 0x0d, - 0x06, 0x9b, 0x18, 0xc0, 0x49, 0x29, 0x64, 0x88, - 0x99, 0x09, 0x20, 0x78, 0x40, 0x08, 0x23, 0x02, - 0x43, 0x18, 0xf7, 0xff, 0xfa, 0x17, 0x20, 0x01, - 0xf7, 0xff, 0xfa, 0x14, 0x48, 0x22, 0x68, 0x00, - 0x38, 0x02, 0x42, 0xa0, 0xd1, 0x09, 0x48, 0x22, - 0x68, 0x01, 0x23, 0x01, 0x05, 0x5b, 0x43, 0x19, - 0x60, 0x01, 0x20, 0xff, 0x49, 0x1f, 0x68, 0x09, - 0x70, 0x08, 0x48, 0x1b, 0x68, 0x00, 0x38, 0x02, - 0x42, 0xa0, 0xd3, 0x0f, 0x48, 0x1c, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x48, 0x1a, 0x68, 0x00, - 0x23, 0x01, 0x06, 0x9b, 0x40, 0x18, 0xd0, 0x05, - 0x20, 0x32, 0x49, 0x13, 0x60, 0x08, 0x48, 0x12, - 0x68, 0x00, 0x1e, 0x84, 0x2c, 0x01, 0xd1, 0x02, - 0x20, 0x02, 0xf7, 0xff, 0xf9, 0xeb, 0x2c, 0xff, - 0xd1, 0x08, 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, - 0x30, 0xbc, 0x49, 0x0c, 0x6c, 0xc9, 0x42, 0x88, - 0xd2, 0x00, 0x24, 0x18, 0x2c, 0x00, 0xd0, 0x02, - 0x2c, 0xff, 0xd0, 0x00, 0x3c, 0x01, 0x98, 0x08, - 0x60, 0x04, 0xb0, 0x08, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x9b, 0xb0, - 0x2e, 0x08, 0x9b, 0x9c, 0x2e, 0x08, 0x9b, 0x3c, - 0x2e, 0x08, 0x1f, 0x98, 0x66, 0x00, 0x00, 0x80, - 0x6c, 0x00, 0x00, 0x20, 0x2e, 0x08, 0x9b, 0x98, - 0x6c, 0x00, 0x08, 0x00, 0xb5, 0xff, 0x1c, 0x04, - 0x1c, 0x0f, 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, - 0x9b, 0x03, 0x06, 0x1e, 0x0e, 0x36, 0x2e, 0x20, - 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x1f, 0xdb, 0x01, - 0x20, 0xaf, 0xe7, 0xf7, 0x20, 0x01, 0x03, 0x40, - 0xf7, 0xff, 0xf9, 0xac, 0x20, 0x14, 0x49, 0x09, - 0x60, 0x08, 0x20, 0xff, 0x60, 0x20, 0x1c, 0x33, - 0x1c, 0x29, 0x1c, 0x38, 0x22, 0x02, 0xf7, 0xfc, - 0xfa, 0x4b, 0x48, 0x05, 0x68, 0x01, 0x23, 0x01, - 0x05, 0x5b, 0x43, 0x19, 0x60, 0x01, 0x20, 0x00, - 0xe7, 0xe0, 0xe7, 0xdf, 0x2e, 0x08, 0x1f, 0x98, - 0x6c, 0x00, 0x00, 0x20, 0xb4, 0x0f, 0xb5, 0xf0, - 0x1c, 0x07, 0xb0, 0x82, 0x20, 0x00, 0x49, 0x16, - 0x60, 0x08, 0x48, 0x16, 0x6f, 0x80, 0x23, 0x09, - 0x01, 0x9b, 0x42, 0x98, 0xd1, 0x02, 0x20, 0xe1, - 0x00, 0xc0, 0xe0, 0x00, 0x48, 0x12, 0x1c, 0x05, - 0x68, 0x38, 0x28, 0xff, 0xd1, 0x17, 0x98, 0x0d, - 0x90, 0x00, 0x98, 0x0c, 0x90, 0x01, 0x98, 0x01, - 0x99, 0x00, 0x1a, 0x46, 0x08, 0x68, 0x19, 0x81, - 0x1c, 0x28, 0xf0, 0x09, 0xfa, 0xeb, 0x1c, 0x04, - 0x34, 0x01, 0x0f, 0xf0, 0x07, 0xc0, 0xd0, 0x00, - 0x24, 0x04, 0x2c, 0x32, 0xd9, 0x00, 0x24, 0x04, - 0x1d, 0xe0, 0x30, 0x0d, 0x60, 0x38, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0xb0, 0x04, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0xb0, 0xcc, 0x00, 0x0f, 0x80, - 0x00, 0x00, 0x05, 0xdd, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x99, 0x02, 0x06, 0x09, 0x0e, 0x09, - 0x91, 0x00, 0xb0, 0x82, 0x99, 0x02, 0x29, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x03, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x99, 0x02, - 0x00, 0x88, 0x49, 0x2f, 0x58, 0x08, 0x90, 0x01, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x03, - 0xe7, 0xf1, 0x20, 0x00, 0x70, 0x78, 0x78, 0xb8, - 0x07, 0x00, 0x0f, 0x00, 0x90, 0x00, 0x98, 0x00, - 0x28, 0x04, 0xd1, 0x1f, 0x6a, 0xfe, 0x24, 0x00, - 0x2c, 0x08, 0xdb, 0x04, 0xe0, 0x18, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, 0x00, 0xa0, - 0x19, 0x80, 0x68, 0x40, 0x00, 0xa1, 0x19, 0x89, - 0x64, 0x48, 0x21, 0x00, 0x00, 0xa0, 0x19, 0x80, - 0x62, 0x41, 0x00, 0xa0, 0x19, 0x80, 0x6c, 0x40, - 0x28, 0x00, 0xd0, 0x04, 0x20, 0x80, 0x41, 0x20, - 0x88, 0x31, 0x43, 0x08, 0x80, 0x30, 0xe7, 0xe6, - 0x88, 0x30, 0x80, 0x70, 0x78, 0xb8, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x1f, 0x6b, 0x3d, 0x20, 0x00, - 0x60, 0x28, 0x20, 0x00, 0x60, 0x68, 0x20, 0x00, - 0x60, 0xa8, 0x24, 0x00, 0x2c, 0x08, 0xdb, 0x04, - 0xe0, 0x0c, 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, - 0xe7, 0xf8, 0x20, 0x00, 0x00, 0xa1, 0x19, 0x49, - 0x60, 0xc8, 0x20, 0x00, 0x00, 0xa1, 0x19, 0x49, - 0x63, 0x88, 0xe7, 0xf2, 0x20, 0x00, 0x62, 0xe8, - 0x20, 0x00, 0x63, 0x28, 0x20, 0x00, 0x63, 0x68, - 0x20, 0x00, 0x65, 0xa8, 0x99, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x3e, 0xb0, 0x03, 0xe7, 0x9e, - 0xb0, 0x02, 0xb0, 0x01, 0xe7, 0x9b, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0xf3, 0x1c, 0x07, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0xb0, 0x82, - 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x02, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xa0, 0x49, 0x12, 0x58, 0x08, 0x1c, 0x05, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x02, 0xe7, 0xf3, - 0x1c, 0x21, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x84, - 0x1c, 0x06, 0xd0, 0x02, 0x1c, 0x30, 0xb0, 0x02, - 0xe7, 0xea, 0x78, 0x68, 0x21, 0x20, 0x40, 0x01, - 0x91, 0x00, 0x99, 0x00, 0x1c, 0x38, 0xf0, 0x00, - 0xff, 0x3f, 0x68, 0xe9, 0x91, 0x01, 0x29, 0x00, - 0xd0, 0x03, 0x99, 0x01, 0x1c, 0x38, 0xf0, 0x03, - 0xfe, 0x7a, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xd7, - 0xb0, 0x02, 0xe7, 0xd5, 0x2e, 0x08, 0x9b, 0xc8, - 0xb5, 0xf3, 0x1c, 0x02, 0x99, 0x01, 0x06, 0x0f, - 0x0e, 0x3f, 0xb0, 0x86, 0x00, 0xb8, 0x4b, 0xa1, - 0x68, 0x1b, 0x18, 0xc0, 0x90, 0x00, 0x2f, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb8, - 0x4b, 0x9b, 0x58, 0x18, 0x90, 0x05, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x06, 0xe7, 0xf2, - 0x78, 0x90, 0x90, 0x01, 0x71, 0xd7, 0x78, 0xd1, - 0x98, 0x01, 0x23, 0x80, 0x40, 0x18, 0xd1, 0x73, - 0x29, 0x20, 0xdd, 0x02, 0x20, 0xb1, 0xb0, 0x06, - 0xe7, 0xe5, 0x48, 0x92, 0x68, 0x00, 0x23, 0x01, - 0x42, 0xd8, 0xd1, 0x02, 0x20, 0xb2, 0xb0, 0x06, - 0xe7, 0xdd, 0x20, 0x01, 0x40, 0x88, 0x4b, 0x8d, - 0x68, 0x1b, 0x40, 0x18, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0xd4, 0x00, 0x88, 0x4b, 0x8a, - 0x50, 0x1a, 0x48, 0x8a, 0x54, 0x47, 0x01, 0x08, - 0x4b, 0x89, 0x18, 0xc5, 0x7f, 0x10, 0x06, 0x00, - 0x7f, 0x53, 0x04, 0x1b, 0x43, 0x18, 0x7f, 0x93, - 0x02, 0x1b, 0x43, 0x18, 0x7f, 0xd3, 0x43, 0x03, - 0xc5, 0x08, 0x1d, 0xd0, 0x30, 0x19, 0x78, 0x00, - 0x06, 0x00, 0x1d, 0xd3, 0x33, 0x19, 0x78, 0x5b, - 0x04, 0x1b, 0x43, 0x18, 0x1d, 0xd3, 0x33, 0x19, - 0x78, 0x9b, 0x02, 0x1b, 0x43, 0x18, 0x1d, 0xd3, - 0x33, 0x19, 0x78, 0xdb, 0x43, 0x03, 0xc5, 0x08, - 0x01, 0x08, 0x4b, 0x7a, 0x18, 0xc4, 0x7b, 0x10, - 0x06, 0x00, 0x7b, 0x53, 0x04, 0x1b, 0x43, 0x18, - 0x7b, 0x93, 0x02, 0x1b, 0x43, 0x18, 0x7b, 0xd3, - 0x43, 0x03, 0xc4, 0x08, 0x7c, 0x10, 0x06, 0x00, - 0x7c, 0x53, 0x04, 0x1b, 0x43, 0x18, 0x7c, 0x93, - 0x02, 0x1b, 0x43, 0x18, 0x7c, 0xd3, 0x43, 0x03, - 0xc4, 0x08, 0x98, 0x01, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x20, 0x1d, 0xd0, 0x30, 0x19, 0x79, 0x00, - 0x06, 0x00, 0x1d, 0xd3, 0x33, 0x19, 0x79, 0x5b, - 0x04, 0x1b, 0x43, 0x18, 0x1d, 0xd3, 0x33, 0x19, - 0x79, 0x9b, 0x02, 0x1b, 0x43, 0x18, 0x1d, 0xd3, - 0x33, 0x19, 0x79, 0xdb, 0x43, 0x03, 0xc5, 0x08, - 0x7d, 0x10, 0x06, 0x00, 0x7d, 0x53, 0x04, 0x1b, - 0x43, 0x18, 0x7d, 0x93, 0x02, 0x1b, 0xe0, 0x00, - 0xe0, 0x42, 0x43, 0x18, 0x7d, 0xd3, 0x43, 0x03, - 0xc4, 0x08, 0xe0, 0x03, 0x23, 0x00, 0xc5, 0x08, - 0x23, 0x00, 0xc4, 0x08, 0x23, 0xff, 0xc5, 0x08, - 0x20, 0x19, 0x06, 0x80, 0x6b, 0x00, 0x23, 0x08, - 0x40, 0x18, 0xd0, 0x06, 0x88, 0x90, 0x04, 0x00, - 0x19, 0xc3, 0x93, 0x02, 0x9b, 0x02, 0xc4, 0x08, - 0xe0, 0x00, 0xc4, 0x80, 0x98, 0x01, 0x23, 0x08, - 0x40, 0x18, 0xd0, 0x17, 0x48, 0x50, 0x5d, 0xc0, - 0x30, 0x01, 0x4b, 0x4f, 0x55, 0xd8, 0x7a, 0x10, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x04, 0x20, 0x01, - 0x40, 0x88, 0x23, 0x19, 0x06, 0x9b, 0x61, 0x18, - 0x7a, 0x10, 0x23, 0x02, 0x40, 0x18, 0xd0, 0x04, - 0x20, 0x01, 0x40, 0x88, 0x23, 0x19, 0x06, 0x9b, - 0x61, 0x58, 0xe0, 0x05, 0x4e, 0x45, 0x20, 0x01, - 0x40, 0x88, 0x68, 0x33, 0x43, 0x18, 0x60, 0x30, - 0x20, 0x01, 0x40, 0x88, 0x4b, 0x3b, 0x68, 0x1b, - 0x43, 0x18, 0x4b, 0x3a, 0x60, 0x18, 0xe0, 0x4f, - 0x98, 0x01, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x48, - 0x48, 0x3d, 0x88, 0x00, 0x4b, 0x3d, 0x42, 0x98, - 0xd1, 0x02, 0x20, 0xb2, 0xb0, 0x06, 0xe7, 0x26, - 0x00, 0x88, 0x4b, 0x3b, 0x58, 0x18, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x1e, - 0x29, 0x10, 0xdb, 0x02, 0x20, 0xb1, 0xb0, 0x06, - 0xe7, 0x19, 0x20, 0x01, 0x40, 0x88, 0x4b, 0x32, - 0x88, 0x1b, 0x40, 0x18, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0x10, 0x98, 0x05, 0x78, 0x80, - 0x28, 0x02, 0xdb, 0x02, 0x20, 0xb1, 0xb0, 0x06, - 0xe7, 0x09, 0x00, 0x88, 0x4b, 0x2c, 0x50, 0x1a, - 0x48, 0x2c, 0x54, 0x47, 0x00, 0xf8, 0x1b, 0xc0, - 0x00, 0x80, 0x4b, 0x2b, 0x68, 0x1b, 0x18, 0xc0, - 0x90, 0x04, 0x98, 0x04, 0x7e, 0x00, 0x28, 0xff, - 0xd1, 0x02, 0x98, 0x04, 0x76, 0x01, 0xe0, 0x01, - 0x98, 0x04, 0x76, 0x41, 0x4e, 0x25, 0x96, 0x03, - 0x1d, 0xd3, 0x33, 0x05, 0x00, 0x88, 0x9e, 0x03, - 0x50, 0x33, 0x20, 0x01, 0x40, 0x88, 0x4b, 0x1c, - 0x88, 0x1b, 0x43, 0x18, 0x4b, 0x1a, 0x80, 0x18, - 0xe0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe6, 0xe2, - 0x78, 0x50, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x18, - 0x70, 0x50, 0x98, 0x05, 0x78, 0x80, 0x28, 0x00, - 0xd1, 0x09, 0x98, 0x00, 0x68, 0x00, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x18, 0x9b, 0x00, 0x60, 0x18, - 0x20, 0x02, 0x9b, 0x05, 0x70, 0xd8, 0x98, 0x05, - 0x78, 0x80, 0x30, 0x01, 0x9b, 0x05, 0x70, 0x98, - 0x20, 0x00, 0xb0, 0x06, 0xe6, 0xc7, 0xb0, 0x06, - 0xe6, 0xc5, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9c, 0x48, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9d, 0x10, - 0x64, 0x00, 0x10, 0x00, 0x64, 0x00, 0x08, 0x00, - 0x2e, 0x08, 0xb9, 0x60, 0x64, 0x00, 0x00, 0x18, - 0x2e, 0x08, 0x9c, 0x4c, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9b, 0x30, 0x9e, 0x00, 0x04, 0xb8, - 0xb5, 0xf3, 0x1c, 0x02, 0x99, 0x01, 0x06, 0x0f, - 0x0e, 0x3f, 0xb0, 0x86, 0x00, 0xb8, 0x4b, 0x65, - 0x68, 0x1b, 0x18, 0xc0, 0x90, 0x01, 0x2f, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb8, - 0x4b, 0x5f, 0x58, 0x18, 0x1c, 0x05, 0xd1, 0x02, - 0x20, 0xb0, 0xb0, 0x06, 0xe7, 0xf3, 0x78, 0x90, - 0x90, 0x03, 0x78, 0xd1, 0x00, 0x88, 0x4b, 0x5b, - 0x58, 0x18, 0x42, 0x90, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0xe8, 0x98, 0x03, 0x23, 0x80, - 0x40, 0x18, 0xd1, 0x49, 0x01, 0x08, 0x4b, 0x56, - 0x18, 0xc3, 0x93, 0x00, 0x20, 0x00, 0x9b, 0x00, - 0x60, 0x18, 0x23, 0x00, 0x00, 0x88, 0x4e, 0x51, - 0x50, 0x33, 0x23, 0xff, 0x48, 0x51, 0x54, 0x43, - 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, 0x4b, 0x50, - 0x68, 0x1b, 0x40, 0x18, 0x4b, 0x4e, 0x60, 0x18, - 0x98, 0x03, 0x23, 0x08, 0x40, 0x18, 0xd0, 0x27, - 0x20, 0x01, 0x40, 0x88, 0x90, 0x04, 0x7a, 0x10, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x0b, 0x98, 0x04, - 0x23, 0x19, 0x06, 0x9b, 0x69, 0x1b, 0x40, 0x18, - 0xd0, 0x04, 0x98, 0x04, 0x23, 0x19, 0x06, 0x9b, - 0x61, 0x18, 0xe7, 0xf4, 0xe0, 0x0e, 0x7a, 0x10, - 0x23, 0x02, 0x40, 0x18, 0xd0, 0x0a, 0x98, 0x04, - 0x23, 0x19, 0x06, 0x9b, 0x69, 0x5b, 0x40, 0x18, - 0xd0, 0x04, 0x98, 0x04, 0x23, 0x19, 0x06, 0x9b, - 0x61, 0x58, 0xe7, 0xf4, 0x48, 0x3b, 0x5d, 0xc0, - 0x38, 0x01, 0x4b, 0x3a, 0x55, 0xd8, 0xe0, 0x06, - 0x4e, 0x39, 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, - 0x68, 0x33, 0x40, 0x18, 0x60, 0x30, 0xe0, 0x36, - 0x98, 0x03, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x2f, - 0x00, 0xf8, 0x1b, 0xc0, 0x00, 0x80, 0x4b, 0x33, - 0x68, 0x1b, 0x18, 0xc3, 0x93, 0x02, 0x9b, 0x02, - 0x7e, 0x18, 0x42, 0x88, 0xd1, 0x03, 0x20, 0xff, - 0x9b, 0x02, 0x76, 0x18, 0xe0, 0x0a, 0x9b, 0x02, - 0x7e, 0x58, 0x42, 0x88, 0xd1, 0x03, 0x20, 0xff, - 0x9b, 0x02, 0x76, 0x58, 0xe0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0x7c, 0x23, 0x00, 0x00, 0x88, - 0x4e, 0x27, 0x50, 0x33, 0x20, 0xff, 0x4b, 0x27, - 0x54, 0x58, 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, - 0x4b, 0x25, 0x88, 0x1b, 0x40, 0x18, 0x4b, 0x24, - 0x80, 0x18, 0x4e, 0x24, 0x96, 0x05, 0x23, 0x00, - 0x00, 0x88, 0x9e, 0x05, 0x50, 0x33, 0xe0, 0x02, - 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x63, 0x78, 0xa8, - 0x38, 0x01, 0x70, 0xa8, 0x78, 0x50, 0x23, 0x80, - 0x43, 0x18, 0x70, 0x50, 0x78, 0xa8, 0x28, 0x00, - 0xd1, 0x07, 0x98, 0x01, 0x68, 0x00, 0x4b, 0x1a, - 0x40, 0x18, 0x9b, 0x01, 0x60, 0x18, 0x20, 0x01, - 0x70, 0xe8, 0x24, 0x1f, 0x2c, 0x00, 0xd1, 0x02, - 0xe0, 0x0a, 0x3c, 0x01, 0xe7, 0xfa, 0x48, 0x0d, - 0x5d, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x19, - 0x06, 0x80, 0x64, 0xc4, 0xe0, 0x00, 0xe7, 0xf4, - 0x20, 0x00, 0xb0, 0x06, 0xe7, 0x3f, 0xb0, 0x06, - 0xe7, 0x3d, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9c, 0x50, - 0x64, 0x00, 0x08, 0x08, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x48, 0x2e, 0x08, 0xb9, 0x60, - 0x64, 0x00, 0x00, 0x18, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0x4c, 0x9e, 0x00, 0x04, 0xb8, - 0xff, 0xff, 0xdf, 0xff, 0x1c, 0x03, 0x1c, 0x0a, - 0x78, 0x58, 0x70, 0x10, 0x20, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0xb5, 0xf7, 0x1c, 0x07, 0xb0, 0x81, - 0x9a, 0x03, 0x06, 0x10, 0x0e, 0x00, 0x90, 0x00, - 0xb0, 0x87, 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, - 0xd0, 0x4c, 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, - 0xd0, 0x48, 0x78, 0xb8, 0x90, 0x06, 0x99, 0x09, - 0x78, 0x88, 0x90, 0x05, 0x98, 0x06, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x3f, 0x98, 0x05, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x3b, 0x6b, 0x38, 0x90, 0x01, - 0x99, 0x09, 0x6b, 0x08, 0x90, 0x00, 0x98, 0x01, - 0x28, 0x00, 0xd1, 0x02, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd1, 0x05, 0x20, 0xb6, 0xb0, 0x08, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x01, 0x68, 0x05, 0x98, 0x00, 0x68, 0x04, - 0x7a, 0x2e, 0x7a, 0x21, 0x91, 0x04, 0x7d, 0x6a, - 0x92, 0x03, 0x7d, 0x62, 0x92, 0x02, 0x98, 0x07, - 0x28, 0x00, 0xd0, 0x0a, 0x9a, 0x02, 0x99, 0x04, - 0x1c, 0x28, 0xf0, 0x00, 0xfc, 0xe5, 0x9a, 0x03, - 0x1c, 0x31, 0x1c, 0x20, 0xf0, 0x00, 0xfc, 0xe0, - 0xe0, 0x09, 0x99, 0x04, 0x1c, 0x28, 0x22, 0x00, - 0xf0, 0x00, 0xfc, 0xda, 0x1c, 0x31, 0x1c, 0x20, - 0x22, 0x00, 0xf0, 0x00, 0xfc, 0xd5, 0x20, 0x00, - 0xb0, 0x08, 0xe7, 0xd5, 0x20, 0xb1, 0xb0, 0x08, - 0xe7, 0xd2, 0xb0, 0x07, 0xb0, 0x01, 0xe7, 0xcf, - 0xb4, 0xf0, 0x1c, 0x02, 0x1c, 0x0b, 0x06, 0x1d, - 0x0e, 0x2d, 0xb0, 0x82, 0x2d, 0x00, 0xd1, 0x0a, - 0x48, 0x1a, 0x69, 0x00, 0x90, 0x01, 0x49, 0x1a, - 0x48, 0x18, 0x69, 0x40, 0x90, 0x00, 0x48, 0x17, - 0x6a, 0x00, 0x1e, 0x44, 0xe0, 0x10, 0x2d, 0x20, - 0xd1, 0x0a, 0x48, 0x14, 0x69, 0x80, 0x90, 0x01, - 0x49, 0x14, 0x48, 0x12, 0x69, 0xc0, 0x90, 0x00, - 0x48, 0x10, 0x6a, 0x40, 0x1e, 0x44, 0xe0, 0x03, - 0x20, 0xb3, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x20, 0x00, 0x70, 0x10, 0x78, 0x50, 0x00, 0x80, - 0x4e, 0x0d, 0x58, 0x37, 0x69, 0x38, 0x61, 0x78, - 0x98, 0x01, 0x9e, 0x00, 0x42, 0xb0, 0xd0, 0x07, - 0x98, 0x01, 0x30, 0x01, 0x90, 0x01, 0x98, 0x01, - 0x40, 0x20, 0x90, 0x01, 0x98, 0x01, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xe6, 0xb0, 0x02, - 0xe7, 0xe4, 0x00, 0x00, 0x9e, 0x00, 0x04, 0x80, - 0x9e, 0x00, 0x04, 0x90, 0x9e, 0x00, 0x04, 0x98, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x99, 0x02, 0x06, 0x08, 0x0e, 0x00, - 0x90, 0x00, 0xb0, 0x88, 0x98, 0x08, 0x28, 0x00, - 0xd1, 0x0e, 0x49, 0x69, 0x91, 0x02, 0x48, 0x69, - 0x69, 0x00, 0x90, 0x07, 0x48, 0x68, 0x90, 0x06, - 0x48, 0x66, 0x69, 0x40, 0x90, 0x05, 0x48, 0x65, - 0x6a, 0x00, 0x1e, 0x41, 0x91, 0x04, 0xe0, 0x17, - 0x98, 0x08, 0x28, 0x20, 0xd1, 0x0e, 0x49, 0x63, - 0x91, 0x02, 0x48, 0x60, 0x69, 0x80, 0x90, 0x07, - 0x48, 0x61, 0x90, 0x06, 0x48, 0x5d, 0x69, 0xc0, - 0x90, 0x05, 0x48, 0x5c, 0x6a, 0x40, 0x1e, 0x41, - 0x91, 0x04, 0xe0, 0x05, 0x20, 0xb3, 0xb0, 0x09, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x25, 0x00, 0x98, 0x07, 0x99, 0x05, 0x42, 0x88, - 0xd0, 0x73, 0x2d, 0x00, 0xd1, 0x72, 0x98, 0x07, - 0x00, 0x80, 0x99, 0x02, 0x18, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xc0, 0x68, 0x01, 0x91, 0x03, - 0x98, 0x07, 0x00, 0x80, 0x99, 0x02, 0x58, 0x08, - 0x90, 0x01, 0x99, 0x02, 0x98, 0x07, 0x18, 0x08, - 0x23, 0x01, 0x02, 0xdb, 0x18, 0xc0, 0x78, 0x00, - 0x90, 0x00, 0x20, 0x00, 0x99, 0x02, 0x9a, 0x07, - 0x18, 0x89, 0x23, 0x01, 0x02, 0xdb, 0x18, 0xc9, - 0x70, 0x08, 0x98, 0x07, 0x30, 0x01, 0x90, 0x07, - 0x98, 0x07, 0x99, 0x04, 0x40, 0x08, 0x90, 0x07, - 0x99, 0x03, 0x29, 0x00, 0xd0, 0x71, 0xb0, 0x83, - 0x20, 0x00, 0x90, 0x00, 0x99, 0x06, 0x91, 0x02, - 0x20, 0x01, 0x90, 0x01, 0x98, 0x03, 0x28, 0x80, - 0xd1, 0x1f, 0x24, 0x00, 0x2c, 0x10, 0xd3, 0x02, - 0xe0, 0x1a, 0x34, 0x01, 0xe7, 0xfa, 0x98, 0x01, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x10, 0x48, 0x39, - 0x5d, 0x00, 0x28, 0xff, 0xd0, 0x0c, 0x48, 0x37, - 0x5d, 0x00, 0x90, 0x00, 0x00, 0xa0, 0x49, 0x36, - 0x58, 0x09, 0x00, 0xa8, 0x19, 0xc0, 0x61, 0x01, - 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0xe0, 0x03, - 0x98, 0x01, 0x00, 0x40, 0x90, 0x01, 0xe7, 0xe4, - 0xe0, 0x1d, 0x24, 0x00, 0x2c, 0x20, 0xd3, 0x02, - 0xe0, 0x19, 0x34, 0x01, 0xe7, 0xfa, 0x98, 0x01, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x0f, 0x48, 0x2b, - 0x5d, 0x00, 0x28, 0xff, 0xd0, 0x0b, 0x48, 0x29, - 0x5d, 0x00, 0x90, 0x00, 0x00, 0xa0, 0x49, 0x28, - 0x58, 0x09, 0x00, 0xa8, 0x19, 0xc0, 0x61, 0x01, - 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x01, - 0x00, 0x40, 0x90, 0x01, 0xe7, 0xe5, 0x2d, 0x00, - 0xe0, 0x01, 0xe0, 0x27, 0xe0, 0x26, 0xd0, 0x23, - 0xb0, 0x81, 0x98, 0x01, 0x70, 0x78, 0x98, 0x05, - 0x60, 0x78, 0x98, 0x01, 0x00, 0x80, 0x49, 0x1d, - 0x58, 0x08, 0x90, 0x00, 0x98, 0x00, 0x69, 0x46, - 0x98, 0x05, 0x42, 0xb0, 0xd3, 0x04, 0x1d, 0xf0, - 0x30, 0xb9, 0x99, 0x05, 0x42, 0x88, 0xd2, 0x08, - 0x68, 0x30, 0x28, 0x00, 0xd0, 0x01, 0x68, 0x36, - 0xe0, 0x02, 0x20, 0xba, 0xb0, 0x0d, 0xe7, 0x63, - 0xe7, 0xee, 0x60, 0xbe, 0x98, 0x00, 0x61, 0x46, - 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0x02, 0xb0, 0x01, - 0xb0, 0x03, 0xe7, 0x5e, 0x70, 0x3d, 0x98, 0x07, - 0x99, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x09, - 0xe7, 0x52, 0xb0, 0x08, 0xb0, 0x01, 0xe7, 0x4f, - 0x2e, 0x08, 0x9d, 0xfc, 0x9e, 0x00, 0x04, 0x80, - 0x9e, 0x00, 0x04, 0x90, 0x2e, 0x08, 0xa6, 0xfc, - 0x9e, 0x00, 0x04, 0x98, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9b, 0xc8, - 0xb4, 0x90, 0x1c, 0x01, 0x78, 0x48, 0x00, 0x80, - 0x4c, 0x0d, 0x58, 0x23, 0x69, 0x1a, 0x68, 0x8f, - 0x42, 0xba, 0xd0, 0x12, 0x68, 0x10, 0x42, 0xb8, - 0xd0, 0x08, 0x68, 0x10, 0x28, 0x00, 0xd0, 0x01, - 0x68, 0x12, 0xe0, 0x02, 0x20, 0xba, 0xbc, 0x90, - 0x47, 0x70, 0xe7, 0xf3, 0x20, 0x00, 0x60, 0x10, - 0x69, 0x9c, 0x69, 0x18, 0x60, 0x20, 0x61, 0x1f, - 0x61, 0x9a, 0x20, 0x00, 0xe7, 0xf3, 0xe7, 0xf2, - 0x2e, 0x08, 0x9b, 0xc8, 0xb4, 0xb0, 0x1c, 0x02, - 0x1c, 0x0f, 0x78, 0x90, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x1c, 0x78, 0x90, 0x23, 0x20, 0x40, 0x18, - 0xd0, 0x18, 0x6b, 0x14, 0x68, 0x20, 0x28, 0x00, - 0xd0, 0x02, 0x1d, 0xe5, 0x35, 0x05, 0xe0, 0x01, - 0x1d, 0xe5, 0x35, 0x31, 0x21, 0x00, 0x29, 0x08, - 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, - 0x0e, 0x09, 0xe7, 0xf8, 0x00, 0x88, 0x58, 0x2b, - 0x00, 0x88, 0x50, 0x3b, 0xe7, 0xf6, 0x20, 0x00, - 0xbc, 0xb0, 0x47, 0x70, 0x20, 0xb1, 0xe7, 0xfb, - 0xe7, 0xfa, 0xb5, 0xf3, 0x1c, 0x0a, 0xb0, 0x93, - 0x20, 0x00, 0x90, 0x06, 0x98, 0x13, 0x69, 0x00, - 0x90, 0x00, 0x98, 0x00, 0x6b, 0x00, 0x90, 0x12, - 0x98, 0x00, 0x78, 0x80, 0x90, 0x05, 0x98, 0x12, - 0x68, 0x00, 0x90, 0x01, 0x28, 0x00, 0xd0, 0x03, - 0x98, 0x12, 0x30, 0x0c, 0x90, 0x09, 0xe0, 0x0e, - 0x98, 0x12, 0x6a, 0xc0, 0x90, 0x01, 0x28, 0x00, - 0xd0, 0x03, 0x98, 0x12, 0x30, 0x38, 0x90, 0x09, - 0xe0, 0x05, 0x20, 0xb1, 0xb0, 0x13, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x90, 0x06, 0x98, 0x05, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x73, 0x21, 0x00, 0x29, 0x08, 0xdb, 0x04, - 0xe0, 0x0c, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x98, 0x13, 0x30, 0x80, 0x69, 0x00, - 0x00, 0x8b, 0x58, 0xc0, 0x00, 0x8e, 0xab, 0x0a, - 0x51, 0x98, 0xe7, 0xf2, 0x9d, 0x01, 0x21, 0x00, - 0x29, 0x08, 0xdb, 0x04, 0xe0, 0xa7, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x00, 0x88, - 0xab, 0x0a, 0x58, 0x18, 0x28, 0x00, 0xd0, 0x55, - 0x20, 0x00, 0x90, 0x08, 0x48, 0x73, 0x90, 0x07, - 0x20, 0x00, 0x90, 0x02, 0x98, 0x02, 0x28, 0x20, - 0xdb, 0x06, 0xe0, 0x8d, 0x98, 0x02, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x02, 0xe7, 0xf5, - 0x00, 0x8b, 0xa8, 0x0a, 0x58, 0xc0, 0x9b, 0x07, - 0x40, 0x18, 0x90, 0x08, 0x28, 0x00, 0xd0, 0x73, - 0x00, 0x88, 0x9b, 0x09, 0x58, 0x18, 0x9b, 0x08, - 0x40, 0x18, 0xd0, 0x6e, 0x1d, 0xec, 0x34, 0x01, - 0x27, 0x00, 0x79, 0xa0, 0x9b, 0x06, 0x42, 0x98, - 0xd0, 0x08, 0x68, 0x68, 0x1c, 0x05, 0xd1, 0x02, - 0x20, 0xba, 0xb0, 0x13, 0xe7, 0xab, 0x1d, 0xec, - 0x34, 0x01, 0xe7, 0xf2, 0x78, 0x60, 0x07, 0x00, - 0x0f, 0x00, 0x02, 0x00, 0x04, 0x07, 0x0c, 0x3f, - 0x78, 0xa0, 0x19, 0xc0, 0x30, 0x03, 0x04, 0x07, - 0x0c, 0x3f, 0x2a, 0x00, 0xd0, 0x42, 0x98, 0x13, - 0x88, 0x40, 0x42, 0xb8, 0xdb, 0x3a, 0x98, 0x13, - 0x88, 0x40, 0x1b, 0xc0, 0x9b, 0x13, 0x80, 0x58, - 0x20, 0xbc, 0x90, 0x04, 0x2f, 0x00, 0xdd, 0x30, - 0x2f, 0xbc, 0xdd, 0x1b, 0x20, 0x00, 0x90, 0x03, - 0x98, 0x03, 0x28, 0xbc, 0xdb, 0x09, 0xe0, 0x0d, - 0x98, 0x03, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0xe0, 0x01, 0xe0, 0x4c, 0xe0, 0x41, 0x90, 0x03, - 0xe7, 0xf2, 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, - 0x32, 0x01, 0xe7, 0xf1, 0x1f, 0xf8, 0x38, 0xb5, - 0x04, 0x07, 0x0c, 0x3f, 0x68, 0x2d, 0x1d, 0xec, - 0x34, 0x01, 0xe0, 0x11, 0x20, 0x00, 0x90, 0x03, - 0x98, 0x03, 0x42, 0xb8, 0xdb, 0x06, 0xe0, 0x0a, - 0x98, 0x03, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x03, 0xe7, 0xf5, 0x78, 0x23, 0x34, 0x01, - 0x70, 0x13, 0x32, 0x01, 0xe7, 0xf4, 0x27, 0x00, - 0xe7, 0xcc, 0xe0, 0x02, 0x20, 0xb7, 0xb0, 0x13, - 0xe7, 0x59, 0xe0, 0x04, 0x98, 0x13, 0x88, 0x40, - 0x19, 0xc0, 0x9b, 0x13, 0x80, 0x58, 0x00, 0x88, - 0xab, 0x0a, 0x58, 0x18, 0x9b, 0x07, 0x43, 0x98, - 0x00, 0x8e, 0xab, 0x0a, 0x51, 0x98, 0xe0, 0x01, - 0xe0, 0x01, 0xe0, 0x00, 0x9d, 0x01, 0x98, 0x06, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x06, - 0x98, 0x07, 0x08, 0x40, 0x90, 0x07, 0xe7, 0x71, - 0xe0, 0x04, 0x98, 0x06, 0x30, 0x20, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x06, 0xe7, 0x57, 0x20, 0x00, - 0xb0, 0x13, 0xe7, 0x34, 0xe0, 0x44, 0x98, 0x05, - 0x23, 0x02, 0x40, 0x18, 0xd0, 0x3b, 0x98, 0x01, - 0x1d, 0xc4, 0x34, 0x01, 0x78, 0x60, 0x07, 0x00, - 0x0f, 0x00, 0x02, 0x00, 0x04, 0x07, 0x0c, 0x3f, - 0x78, 0xa0, 0x19, 0xc0, 0x30, 0x03, 0x04, 0x07, - 0x0c, 0x3f, 0x2f, 0x00, 0xdd, 0x28, 0x2f, 0xbc, - 0xdd, 0x17, 0x21, 0x00, 0x29, 0xbc, 0xdb, 0x04, - 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, - 0x32, 0x01, 0xe7, 0xf6, 0x1f, 0xf8, 0x38, 0xb5, - 0x04, 0x07, 0x0c, 0x3f, 0x98, 0x01, 0x68, 0x00, - 0x90, 0x01, 0x98, 0x01, 0x1d, 0xc4, 0x34, 0x01, - 0xe0, 0x0d, 0x21, 0x00, 0x42, 0xb9, 0xdb, 0x04, - 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, - 0x32, 0x01, 0xe7, 0xf6, 0x27, 0x00, 0xe7, 0xd4, - 0x20, 0x00, 0xb0, 0x13, 0xe6, 0xf3, 0x20, 0xb1, - 0xb0, 0x13, 0xe6, 0xf0, 0xb0, 0x13, 0xe6, 0xee, - 0xe6, 0xed, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0xb5, 0xf3, 0xb0, 0x84, 0x98, 0x04, 0x78, 0x40, - 0x00, 0x80, 0x49, 0x4b, 0x58, 0x08, 0x90, 0x03, - 0x28, 0x00, 0xd1, 0x05, 0x20, 0xb0, 0xb0, 0x04, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x04, 0x68, 0x86, 0x98, 0x04, 0x88, 0x47, - 0x98, 0x04, 0x68, 0x44, 0x1d, 0xf0, 0x30, 0xb9, - 0x99, 0x04, 0x68, 0x49, 0x1a, 0x45, 0x42, 0xbd, - 0xdb, 0x0c, 0x2f, 0x00, 0xdb, 0x01, 0x2f, 0xbc, - 0xdd, 0x02, 0x20, 0xba, 0xb0, 0x04, 0xe7, 0xe7, - 0x1c, 0x3a, 0x99, 0x05, 0x1c, 0x20, 0xf0, 0x00, - 0xf9, 0x29, 0xe0, 0x6b, 0x20, 0x00, 0x90, 0x00, - 0x98, 0x04, 0x78, 0x40, 0x00, 0xc3, 0x1a, 0x18, - 0x00, 0x80, 0x49, 0x36, 0x68, 0x09, 0x18, 0x40, - 0x90, 0x01, 0x98, 0x01, 0x78, 0x80, 0x90, 0x02, - 0x98, 0x02, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x28, 0x12, 0xd1, 0x03, 0x2d, 0x0e, - 0xda, 0x01, 0x20, 0x01, 0x90, 0x00, 0x2f, 0x00, - 0xdd, 0x50, 0xb0, 0x81, 0x42, 0xaf, 0xdd, 0x0d, - 0x2d, 0x00, 0xdb, 0x01, 0x2d, 0xbc, 0xdd, 0x02, - 0x20, 0xba, 0xb0, 0x05, 0xe7, 0xbc, 0x1c, 0x2a, - 0x99, 0x06, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0xfe, - 0x68, 0x36, 0xe0, 0x0b, 0x2f, 0x00, 0xdb, 0x01, - 0x2f, 0xbc, 0xdd, 0x02, 0x20, 0xba, 0xb0, 0x05, - 0xe7, 0xae, 0x1c, 0x3a, 0x99, 0x06, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0xf0, 0x99, 0x06, 0x19, 0x49, - 0x91, 0x06, 0x1b, 0x7f, 0x1d, 0x31, 0x91, 0x00, - 0x99, 0x00, 0x78, 0x88, 0x19, 0x84, 0x98, 0x01, - 0x28, 0x00, 0xd0, 0x20, 0x99, 0x00, 0x78, 0xc8, - 0x23, 0x80, 0x40, 0x18, 0xd1, 0x1b, 0x1d, 0xf0, - 0x30, 0xb9, 0x1b, 0x05, 0x42, 0xbd, 0xdb, 0x01, - 0x3c, 0x01, 0xe0, 0x14, 0x1c, 0x68, 0x42, 0xb8, - 0xd1, 0x11, 0x99, 0x00, 0x78, 0x88, 0x28, 0x09, - 0xdd, 0x08, 0x99, 0x00, 0x79, 0x08, 0x30, 0x09, - 0x99, 0x00, 0x78, 0x89, 0x42, 0x88, 0xd0, 0x00, - 0x3c, 0x01, 0xe0, 0x04, 0x99, 0x00, 0x78, 0x88, - 0x28, 0x09, 0xd1, 0x00, 0x3c, 0x01, 0x20, 0x00, - 0x90, 0x01, 0x1d, 0xf0, 0x30, 0xb9, 0x1b, 0x05, - 0xb0, 0x01, 0xe7, 0xac, 0x20, 0x00, 0xb0, 0x04, - 0xe7, 0x72, 0xb0, 0x04, 0xe7, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x30, - 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x04, 0x0e, 0x24, - 0xb0, 0x83, 0x00, 0xa0, 0x4b, 0x4c, 0x58, 0x1d, - 0x78, 0x28, 0x90, 0x02, 0x2c, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x03, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0xa0, 0x4b, 0x46, - 0x58, 0x18, 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xb0, - 0xb0, 0x03, 0xe7, 0xf3, 0x00, 0xe0, 0x1b, 0x00, - 0x00, 0x80, 0x4b, 0x42, 0x68, 0x1b, 0x18, 0xc7, - 0x78, 0xa8, 0x28, 0x00, 0xd0, 0x63, 0x20, 0x00, - 0x42, 0x80, 0xd0, 0x20, 0x21, 0x00, 0x29, 0x20, - 0xdb, 0x04, 0xe0, 0x1b, 0x1c, 0x48, 0x06, 0x01, - 0x0e, 0x09, 0xe7, 0xf8, 0x00, 0x88, 0x4b, 0x3a, - 0x58, 0x18, 0x90, 0x01, 0x98, 0x01, 0x79, 0xc0, - 0x42, 0xa0, 0xd1, 0x0e, 0x20, 0x01, 0x40, 0x88, - 0x43, 0xc0, 0x4b, 0x36, 0x68, 0x1b, 0x40, 0x18, - 0x4b, 0x34, 0x60, 0x18, 0x23, 0x00, 0x00, 0x88, - 0x4e, 0x31, 0x50, 0x33, 0x23, 0xff, 0x48, 0x32, - 0x54, 0x43, 0xe7, 0xe3, 0xe0, 0x3f, 0x7e, 0x38, - 0x1c, 0x02, 0x28, 0xff, 0xd0, 0x10, 0x20, 0xff, - 0x4b, 0x2e, 0x54, 0x98, 0x23, 0x00, 0x00, 0x90, - 0x4e, 0x2d, 0x50, 0x33, 0x20, 0x01, 0x40, 0x90, - 0x43, 0xc0, 0x4b, 0x2c, 0x88, 0x1b, 0x40, 0x18, - 0x4b, 0x2a, 0x80, 0x18, 0x20, 0xff, 0x76, 0x38, - 0x7e, 0x78, 0x1c, 0x02, 0x28, 0xff, 0xd0, 0x11, - 0x20, 0xff, 0x4b, 0x24, 0x54, 0x98, 0x23, 0x00, - 0x00, 0x90, 0x4e, 0x23, 0x50, 0x33, 0x20, 0x01, - 0x40, 0x90, 0x43, 0xc0, 0x4b, 0x21, 0x88, 0x1b, - 0x40, 0x18, 0x4b, 0x20, 0x80, 0x18, 0x20, 0xff, - 0x76, 0x78, 0xe0, 0x02, 0x20, 0xb1, 0xb0, 0x03, - 0xe7, 0x98, 0x23, 0x00, 0x00, 0x90, 0x4e, 0x1a, - 0x50, 0x33, 0x20, 0x01, 0x40, 0x90, 0x43, 0xc0, - 0x4b, 0x18, 0x88, 0x1b, 0x40, 0x18, 0x4b, 0x17, - 0x80, 0x18, 0x4e, 0x17, 0x96, 0x00, 0x20, 0x00, - 0x00, 0x93, 0x9e, 0x00, 0x50, 0xf0, 0x98, 0x02, - 0x23, 0x20, 0x40, 0x18, 0xd0, 0xff, 0x21, 0x00, - 0x29, 0x0c, 0xdb, 0x04, 0xe0, 0x07, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x20, 0x00, - 0x18, 0x7b, 0x73, 0x18, 0xe7, 0xf7, 0x20, 0x00, - 0x83, 0x38, 0x20, 0x00, 0x70, 0xf8, 0x20, 0x00, - 0xb0, 0x03, 0xe7, 0x6f, 0xb0, 0x03, 0xe7, 0x6d, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9c, 0x48, - 0x2e, 0x08, 0x9d, 0x10, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9c, 0x4c, - 0x9e, 0x00, 0x04, 0xb8, 0xb5, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x20, 0x1d, 0x02, 0x80, - 0x69, 0x86, 0x1c, 0x3a, 0x1c, 0x29, 0x1c, 0x20, - 0xf0, 0x08, 0xfb, 0x32, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb4, 0xf0, 0x1c, 0x01, 0xb0, 0x82, - 0x68, 0x48, 0x68, 0x8c, 0x1d, 0xe2, 0x32, 0xb7, - 0x42, 0x82, 0xd9, 0x09, 0x78, 0x42, 0x07, 0x12, - 0x0f, 0x12, 0x02, 0x12, 0x78, 0x83, 0x43, 0x1a, - 0x32, 0x03, 0x04, 0x17, 0x0c, 0x3f, 0xe0, 0x41, - 0xb0, 0x82, 0x68, 0x23, 0x93, 0x01, 0x9b, 0x01, - 0x33, 0x04, 0x93, 0x00, 0x9b, 0x00, 0x78, 0x9b, - 0x9e, 0x01, 0x19, 0x9a, 0x78, 0x4e, 0x00, 0xf3, - 0x1b, 0x9b, 0x00, 0x9b, 0x4e, 0x1b, 0x68, 0x36, - 0x19, 0x9b, 0x93, 0x02, 0x9b, 0x02, 0x78, 0x9d, - 0x06, 0xed, 0x0e, 0xed, 0x2d, 0x12, 0xd1, 0x0f, - 0x1d, 0xe3, 0x33, 0xb9, 0x68, 0x4e, 0x1b, 0x9b, - 0x06, 0x1b, 0x0e, 0x1b, 0x93, 0x03, 0x9b, 0x00, - 0x78, 0xde, 0x23, 0x80, 0x40, 0x33, 0xd1, 0x03, - 0x9b, 0x03, 0x2b, 0x0e, 0xda, 0x00, 0x3a, 0x01, - 0x1d, 0xe3, 0x33, 0xb8, 0x42, 0x83, 0xd9, 0x0b, - 0x78, 0x43, 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, - 0x04, 0x1f, 0x0c, 0x3f, 0x78, 0x13, 0x18, 0xfb, - 0x33, 0x03, 0x04, 0x1f, 0x0c, 0x3f, 0xe0, 0x08, - 0x78, 0x13, 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, - 0x78, 0x56, 0x43, 0x33, 0x33, 0x03, 0x04, 0x1f, - 0x0c, 0x3f, 0xb0, 0x02, 0x80, 0x4f, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x2e, 0x08, 0x9b, 0x30, - 0xb5, 0xf3, 0xb0, 0x81, 0x99, 0x02, 0x06, 0x0b, - 0x0e, 0x1b, 0x93, 0x00, 0x9b, 0x00, 0x2b, 0x00, - 0xd1, 0x0a, 0x49, 0x24, 0x4b, 0x24, 0x69, 0x1b, - 0x1c, 0x18, 0x4b, 0x23, 0x69, 0x5b, 0x1c, 0x1c, - 0x4b, 0x21, 0x6a, 0x1b, 0x1e, 0x5a, 0xe0, 0x09, - 0x49, 0x20, 0x4b, 0x1f, 0x69, 0x9b, 0x1c, 0x18, - 0x4b, 0x1d, 0x69, 0xdb, 0x1c, 0x1c, 0x4b, 0x1c, - 0x6a, 0x5b, 0x1e, 0x5a, 0x9b, 0x01, 0x78, 0xdd, - 0x26, 0x01, 0x40, 0xae, 0x1c, 0x37, 0x42, 0xa0, - 0xd0, 0x26, 0x00, 0x83, 0x18, 0x5d, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xeb, 0x68, 0x1b, 0x40, 0x3b, - 0xd0, 0x1b, 0x00, 0x83, 0x18, 0x5d, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xeb, 0x68, 0x1b, 0x43, 0xbb, - 0x1c, 0x1d, 0x00, 0x83, 0x18, 0x5e, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xf3, 0x60, 0x1d, 0x00, 0x83, - 0x18, 0x5d, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xeb, - 0x68, 0x1b, 0x2b, 0x00, 0xd1, 0x05, 0x25, 0x00, - 0x18, 0x0e, 0x23, 0x01, 0x02, 0xdb, 0x18, 0xf3, - 0x70, 0x1d, 0x30, 0x01, 0x40, 0x10, 0xe7, 0xd6, - 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x9d, 0xfc, - 0x9e, 0x00, 0x04, 0x80, 0x2e, 0x08, 0xa6, 0xfc, - 0xb4, 0x90, 0x1c, 0x03, 0x1c, 0x0c, 0x1c, 0x17, - 0x06, 0x21, 0x0e, 0x09, 0x06, 0x38, 0x0e, 0x00, - 0x72, 0x19, 0x28, 0x00, 0xd0, 0x00, 0x75, 0x58, - 0x68, 0x5b, 0x2b, 0x00, 0xd1, 0xf8, 0xbc, 0x90, - 0x47, 0x70, 0x00, 0x00, 0xb5, 0x80, 0x1c, 0x07, - 0x68, 0xf8, 0x28, 0x1f, 0xd9, 0x03, 0x20, 0xe1, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x1e, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x1d, 0x40, 0x18, - 0x49, 0x1b, 0x6d, 0x09, 0x60, 0x08, 0x05, 0x80, - 0x48, 0x19, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x18, - 0x6e, 0xc9, 0x60, 0x08, 0x48, 0x16, 0x6d, 0x00, - 0x68, 0x00, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x18, - 0x49, 0x13, 0x6d, 0x09, 0x60, 0x08, 0x05, 0x80, - 0x48, 0x11, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x10, - 0x6e, 0xc9, 0x60, 0x08, 0x48, 0x0e, 0x6f, 0xc1, - 0xcf, 0x09, 0xc1, 0x09, 0xcf, 0x09, 0xc1, 0x09, - 0xcf, 0x08, 0xc1, 0x08, 0xf0, 0x00, 0xfc, 0x1e, - 0x20, 0x00, 0x49, 0x09, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x07, 0x60, 0x48, 0x20, 0x00, 0x49, 0x06, - 0x60, 0x88, 0x49, 0x07, 0x20, 0x0b, 0xf0, 0x0d, - 0xfd, 0xef, 0x20, 0xff, 0x30, 0x01, 0x49, 0x02, - 0x61, 0xc8, 0x20, 0x00, 0xe7, 0xc0, 0xe7, 0xbf, - 0x2e, 0x08, 0x1f, 0x9c, 0xff, 0xff, 0xfd, 0xff, - 0x2e, 0x01, 0x5f, 0x15, 0x1c, 0x01, 0x48, 0x0e, - 0x6f, 0x00, 0x68, 0x00, 0x60, 0x08, 0x48, 0x0c, - 0x6e, 0x80, 0x68, 0x00, 0x60, 0x48, 0x48, 0x0a, - 0x6e, 0xc0, 0x68, 0x00, 0x60, 0x88, 0x48, 0x08, - 0x6f, 0x40, 0x68, 0x00, 0x60, 0xc8, 0x48, 0x06, - 0x68, 0x00, 0x61, 0x08, 0x48, 0x04, 0x68, 0x40, - 0x61, 0x48, 0x48, 0x03, 0x68, 0x80, 0x61, 0x88, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, - 0x2e, 0x08, 0x1f, 0x9c, 0x48, 0x03, 0x6e, 0x80, - 0x68, 0x00, 0x07, 0x40, 0x0f, 0xc0, 0x47, 0x70, - 0xe7, 0xfd, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x9c, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x48, 0x37, - 0x69, 0xc0, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x02, 0x20, 0xe0, 0xbc, 0x80, 0x47, 0x70, - 0x48, 0x32, 0x62, 0x07, 0x20, 0x00, 0x49, 0x31, - 0x62, 0x48, 0x48, 0x31, 0x60, 0x02, 0x48, 0x30, - 0x68, 0x00, 0x78, 0x00, 0x49, 0x2d, 0x61, 0x88, - 0x48, 0x2d, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x2b, - 0x61, 0x08, 0x48, 0x2b, 0x68, 0x00, 0x68, 0x40, - 0x49, 0x28, 0x60, 0xc8, 0x48, 0x27, 0x69, 0x80, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x48, 0x27, - 0xe0, 0x01, 0x20, 0x01, 0x02, 0x40, 0x49, 0x23, - 0x61, 0xc8, 0x48, 0x22, 0x68, 0x40, 0x30, 0x01, - 0x49, 0x20, 0x60, 0x48, 0x48, 0x1f, 0x6d, 0x40, - 0x68, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x49, 0x1d, - 0x69, 0x89, 0x08, 0x49, 0x06, 0x09, 0x0e, 0x09, - 0x43, 0x08, 0x49, 0x1a, 0x6d, 0x49, 0x60, 0x08, - 0x06, 0x00, 0x48, 0x18, 0x6d, 0x00, 0x68, 0x00, - 0x4b, 0x19, 0x40, 0x18, 0x49, 0x15, 0x69, 0x89, - 0x07, 0xc9, 0x0c, 0x49, 0x43, 0x08, 0x49, 0x13, - 0x6d, 0x09, 0x60, 0x08, 0x04, 0x40, 0x48, 0x11, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x13, 0x40, 0x18, - 0x49, 0x0e, 0x6d, 0x09, 0x60, 0x08, 0x05, 0x40, - 0x48, 0x0c, 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, - 0x03, 0x1b, 0x43, 0x18, 0x49, 0x09, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0xc0, 0x48, 0x07, 0x6d, 0x40, - 0x68, 0x00, 0x49, 0x06, 0x6f, 0x09, 0x60, 0x08, - 0x48, 0x04, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x03, - 0x6e, 0xc9, 0x60, 0x08, 0x20, 0x00, 0xe7, 0x99, - 0xe7, 0x98, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x9c, - 0x2e, 0x08, 0x9d, 0xc0, 0x00, 0x00, 0x02, 0x01, - 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xff, - 0xb5, 0x00, 0x48, 0xf6, 0x6e, 0x80, 0x68, 0x00, - 0x23, 0x08, 0x40, 0x18, 0xd0, 0x74, 0x48, 0xf3, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0xf2, 0x40, 0x18, - 0x49, 0xf0, 0x6d, 0x09, 0x60, 0x08, 0x04, 0x80, - 0x48, 0xee, 0x6e, 0x40, 0x68, 0x00, 0x0a, 0x00, - 0x02, 0x00, 0x49, 0xec, 0x6e, 0x49, 0x60, 0x08, - 0x06, 0x00, 0x48, 0xea, 0x6e, 0xc0, 0x68, 0x00, - 0x23, 0x01, 0x02, 0xdb, 0x40, 0x18, 0xd0, 0x3e, - 0x20, 0xff, 0x30, 0x01, 0x49, 0xe5, 0x61, 0xc8, - 0x48, 0xe4, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0xe5, - 0x40, 0x18, 0x49, 0xe2, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0xc0, 0x48, 0xe0, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0xdd, - 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, - 0x48, 0xdd, 0x68, 0x00, 0x7a, 0x00, 0x49, 0xd9, - 0x69, 0x09, 0x1a, 0x41, 0x48, 0xd7, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x02, 0x4b, 0xd9, 0x40, 0x1a, - 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, - 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, 0x48, 0xd1, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x23, 0x04, - 0x43, 0x19, 0x60, 0x01, 0x07, 0x48, 0x48, 0xcd, - 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, - 0xf0, 0x0d, 0xfc, 0xd0, 0x48, 0xc9, 0x68, 0x00, - 0x30, 0x01, 0x49, 0xc8, 0x60, 0x08, 0x48, 0xc7, - 0x69, 0xc0, 0x4b, 0xcb, 0x42, 0x98, 0xd0, 0x73, - 0xdc, 0x08, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x6f, 0x23, 0x01, 0x02, 0x5b, 0x42, 0x98, - 0xd0, 0x07, 0xe2, 0xba, 0x4b, 0xc5, 0x42, 0x98, - 0xd0, 0x68, 0x4b, 0xc5, 0x42, 0x98, 0xd0, 0x66, - 0xe2, 0xb3, 0x48, 0xbc, 0x6e, 0x80, 0x68, 0x00, - 0x23, 0x01, 0x02, 0x5b, 0x40, 0x18, 0xe0, 0x00, - 0xe2, 0xcd, 0xd0, 0x3f, 0x48, 0xb7, 0x68, 0x00, - 0x30, 0x01, 0x49, 0xb6, 0x60, 0x08, 0x48, 0xb5, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0xb5, 0x40, 0x18, - 0x49, 0xb2, 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, - 0x20, 0xff, 0x30, 0x01, 0x49, 0xaf, 0x61, 0xc8, - 0x48, 0xae, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, - 0x02, 0x09, 0x0a, 0x09, 0x4a, 0xab, 0x6a, 0x52, - 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, 0x48, 0xac, - 0x68, 0x00, 0x7a, 0x00, 0x49, 0xa7, 0x69, 0x09, - 0x1a, 0x41, 0x48, 0xa6, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x02, 0x4b, 0xa8, 0x40, 0x1a, 0x04, 0x09, - 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, - 0x02, 0x08, 0x0c, 0x00, 0x48, 0x9f, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, - 0x60, 0x01, 0x07, 0x88, 0x48, 0x9b, 0x6f, 0xc0, - 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0d, - 0xfc, 0x6d, 0xe0, 0x5e, 0x48, 0x97, 0x69, 0x00, - 0x28, 0x00, 0xd0, 0x20, 0x48, 0x95, 0x69, 0x00, - 0x38, 0x01, 0x49, 0x94, 0x61, 0x08, 0x48, 0x93, - 0x68, 0xc0, 0x78, 0x00, 0x49, 0x91, 0x6c, 0x89, - 0x68, 0x09, 0x0a, 0x09, 0x02, 0x09, 0x43, 0x08, - 0x49, 0x8e, 0x6c, 0x89, 0x60, 0x08, 0x06, 0x00, - 0x0e, 0x00, 0x48, 0x8c, 0x68, 0xc0, 0xe0, 0x03, - 0xe1, 0x4b, 0xe2, 0x4d, 0xe0, 0x42, 0xe1, 0x93, - 0x30, 0x01, 0x49, 0x88, 0x60, 0xc8, 0x48, 0x8d, - 0x49, 0x86, 0x61, 0xc8, 0xe0, 0x39, 0x20, 0xff, - 0x30, 0x01, 0x49, 0x84, 0x61, 0xc8, 0x48, 0x83, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, - 0x0a, 0x09, 0x4a, 0x80, 0x6a, 0x52, 0x06, 0x12, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x80, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x7c, 0x69, 0x09, 0x1a, 0x41, - 0x48, 0x7a, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, - 0x4b, 0x7c, 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, - 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, - 0x0c, 0x00, 0x48, 0x74, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, - 0x07, 0xc8, 0x48, 0x70, 0x6f, 0xc0, 0x68, 0xc1, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0d, 0xfc, 0x16, - 0x48, 0x6c, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x6d, - 0x40, 0x18, 0x49, 0x6a, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0xc0, 0xe2, 0x08, 0x48, 0x67, 0x69, 0x00, - 0x28, 0x00, 0xd0, 0x5f, 0x48, 0x65, 0x6e, 0x80, - 0x68, 0x00, 0x23, 0xff, 0x33, 0x01, 0x40, 0x18, - 0xd0, 0x3f, 0x48, 0x62, 0x68, 0x00, 0x30, 0x01, - 0x49, 0x60, 0x60, 0x08, 0x48, 0x5f, 0x6d, 0x00, - 0x68, 0x00, 0x4b, 0x60, 0x40, 0x18, 0x49, 0x5d, - 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, 0x20, 0xff, - 0x30, 0x01, 0x49, 0x5a, 0x61, 0xc8, 0x48, 0x59, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, - 0x0a, 0x09, 0x4a, 0x56, 0x6a, 0x52, 0x06, 0x12, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x56, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x52, 0x69, 0x09, 0x1a, 0x41, - 0x48, 0x50, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, - 0x4b, 0x52, 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, - 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, - 0x0c, 0x00, 0x48, 0x4a, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, - 0x07, 0x88, 0x48, 0x46, 0x6f, 0xc0, 0x68, 0xc1, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0d, 0xfb, 0xc2, - 0xe0, 0x17, 0x48, 0x42, 0x68, 0xc0, 0x78, 0x00, - 0x49, 0x40, 0x6c, 0x89, 0x68, 0x09, 0x0a, 0x09, - 0x02, 0x09, 0x43, 0x08, 0x49, 0x3d, 0x6c, 0x89, - 0x60, 0x08, 0x06, 0x00, 0x0e, 0x00, 0x48, 0x3b, - 0x68, 0xc0, 0x30, 0x01, 0x49, 0x39, 0x60, 0xc8, - 0x48, 0x38, 0x69, 0x00, 0x38, 0x01, 0x49, 0x37, - 0x61, 0x08, 0xe0, 0xa1, 0x48, 0x35, 0x6a, 0x00, - 0x38, 0x01, 0x49, 0x34, 0x62, 0x08, 0x48, 0x33, - 0x6a, 0x00, 0x28, 0x00, 0xd0, 0x4b, 0x48, 0x31, - 0x6a, 0x40, 0x30, 0x01, 0x49, 0x2f, 0x62, 0x48, - 0x48, 0x31, 0x68, 0x00, 0x30, 0x0c, 0x49, 0x30, - 0x60, 0x08, 0x48, 0x2f, 0x68, 0x00, 0x78, 0x00, - 0x49, 0x2a, 0x61, 0x88, 0x48, 0x2c, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x28, 0x61, 0x08, 0x48, 0x2a, - 0x68, 0x00, 0x68, 0x40, 0x49, 0x25, 0x60, 0xc8, - 0x48, 0x24, 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x01, 0x48, 0x27, 0xe0, 0x01, 0x20, 0x01, - 0x02, 0x40, 0x49, 0x20, 0x61, 0xc8, 0x48, 0x1f, - 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, 0x03, 0x5b, - 0x43, 0x18, 0x49, 0x1c, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0x80, 0x48, 0x1a, 0x6d, 0x40, 0x68, 0x00, - 0x0a, 0x00, 0x02, 0x00, 0x49, 0x17, 0x69, 0x89, - 0x08, 0x49, 0x06, 0x09, 0x0e, 0x09, 0x43, 0x08, - 0x49, 0x14, 0x6d, 0x49, 0x60, 0x08, 0x06, 0x00, - 0x48, 0x12, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x19, - 0x40, 0x18, 0x49, 0x10, 0x69, 0x89, 0x07, 0xc9, - 0x0c, 0x49, 0x43, 0x08, 0x49, 0x0d, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0x40, 0xe0, 0x4c, 0x20, 0xff, - 0x30, 0x01, 0x49, 0x0a, 0x61, 0xc8, 0x48, 0x09, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, - 0x0a, 0x09, 0x4a, 0x06, 0x6a, 0x52, 0x06, 0x12, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x06, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x02, 0x69, 0x09, 0x1a, 0x41, - 0x48, 0x00, 0xe0, 0x11, 0x2e, 0x08, 0x1f, 0x9c, - 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xef, 0xff, - 0x2e, 0x08, 0x9d, 0xc0, 0xff, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02, - 0x00, 0x00, 0x02, 0x03, 0xff, 0xff, 0xbf, 0xff, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, 0x4b, 0xa5, - 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, - 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, - 0x48, 0xa1, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, - 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0x07, 0xc8, - 0x48, 0x9d, 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x0d, 0xfb, 0x0f, 0x48, 0x9a, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x99, 0x40, 0x18, - 0x49, 0x97, 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, - 0xe1, 0x01, 0x48, 0x95, 0x6e, 0x80, 0x68, 0x00, - 0x23, 0x01, 0x02, 0x5b, 0x40, 0x18, 0xd0, 0x3f, - 0x48, 0x91, 0x68, 0x00, 0x30, 0x01, 0x49, 0x90, - 0x60, 0x08, 0x48, 0x8f, 0x6d, 0x00, 0x68, 0x00, - 0x4b, 0x8e, 0x40, 0x18, 0x49, 0x8c, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0xc0, 0x20, 0xff, 0x30, 0x01, - 0x49, 0x89, 0x61, 0xc8, 0x48, 0x88, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, - 0x4a, 0x85, 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, - 0x60, 0x01, 0x48, 0x85, 0x68, 0x00, 0x7a, 0x00, - 0x49, 0x81, 0x69, 0x09, 0x1a, 0x41, 0x48, 0x80, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, 0x4b, 0x7d, - 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, - 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, - 0x48, 0x79, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, - 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, 0x07, 0x88, - 0x48, 0x75, 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x0d, 0xfa, 0xbf, 0xe0, 0x02, - 0x48, 0x74, 0x49, 0x71, 0x61, 0xc8, 0xe0, 0xb6, - 0x48, 0x6f, 0x69, 0x00, 0x28, 0x00, 0xd0, 0x62, - 0x48, 0x6d, 0x6e, 0x00, 0x68, 0x00, 0x49, 0x6c, - 0x68, 0xc9, 0x70, 0x08, 0x48, 0x6a, 0x68, 0xc0, - 0x30, 0x01, 0x49, 0x69, 0x60, 0xc8, 0x48, 0x68, - 0x69, 0x00, 0x38, 0x01, 0x49, 0x66, 0x61, 0x08, - 0x48, 0x65, 0x69, 0x00, 0x28, 0x00, 0xd1, 0x4d, - 0x48, 0x63, 0x6a, 0x00, 0x28, 0x01, 0xd1, 0x49, - 0x48, 0x63, 0x68, 0x00, 0x7a, 0x40, 0x49, 0x60, - 0x6d, 0x09, 0x68, 0x09, 0x4b, 0x62, 0x40, 0x19, - 0x07, 0xc0, 0x0d, 0x40, 0x43, 0x08, 0x49, 0x5c, - 0x6d, 0x09, 0x60, 0x08, 0x05, 0x40, 0x0f, 0xc0, - 0x20, 0xff, 0x30, 0x01, 0x49, 0x58, 0x61, 0xc8, - 0x48, 0x57, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x57, - 0x40, 0x18, 0x49, 0x55, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0xc0, 0x48, 0x53, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0x50, - 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, - 0x48, 0x4f, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x4c, - 0x69, 0x09, 0x1a, 0x41, 0x48, 0x4a, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x02, 0x4b, 0x47, 0x40, 0x1a, - 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, - 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, 0x48, 0x44, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x23, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x07, 0xc8, 0x48, 0x40, - 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, - 0xf0, 0x0d, 0xfa, 0x54, 0xe0, 0x4f, 0x48, 0x3c, - 0x6a, 0x00, 0x38, 0x01, 0x49, 0x3a, 0x62, 0x08, - 0x48, 0x39, 0x6a, 0x40, 0x30, 0x01, 0x49, 0x38, - 0x62, 0x48, 0x48, 0x39, 0x68, 0x00, 0x30, 0x0c, - 0x49, 0x37, 0x60, 0x08, 0x48, 0x36, 0x68, 0x00, - 0x78, 0x00, 0x49, 0x33, 0x61, 0x88, 0x48, 0x34, - 0x68, 0x00, 0x7a, 0x00, 0x49, 0x30, 0x61, 0x08, - 0x48, 0x31, 0x68, 0x00, 0x68, 0x40, 0x49, 0x2e, - 0x60, 0xc8, 0x48, 0x2d, 0x69, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0xd0, 0x01, 0x48, 0x2f, 0xe0, 0x01, - 0x20, 0x01, 0x02, 0x40, 0x49, 0x28, 0x61, 0xc8, - 0x48, 0x27, 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x18, 0x49, 0x24, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0x80, 0x48, 0x22, 0x6d, 0x40, - 0x68, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x49, 0x20, - 0x69, 0x89, 0x08, 0x49, 0x06, 0x09, 0x0e, 0x09, - 0x43, 0x08, 0x49, 0x1d, 0x6d, 0x49, 0x60, 0x08, - 0x06, 0x00, 0x48, 0x1b, 0x6d, 0x00, 0x68, 0x00, - 0x4b, 0x1f, 0x40, 0x18, 0x49, 0x18, 0x69, 0x89, - 0x07, 0xc9, 0x0c, 0x49, 0x43, 0x08, 0x49, 0x16, - 0x6d, 0x09, 0x60, 0x08, 0x04, 0x40, 0xe0, 0x01, - 0xe0, 0x00, 0xe7, 0xff, 0x48, 0x12, 0x6c, 0x80, - 0x68, 0x00, 0x49, 0x11, 0x6e, 0x49, 0x60, 0x08, - 0x48, 0x0f, 0x6d, 0x40, 0x68, 0x00, 0x49, 0x0e, - 0x6f, 0x09, 0x60, 0x08, 0x48, 0x0c, 0x6d, 0x00, - 0x68, 0x00, 0x49, 0x0b, 0x6e, 0xc9, 0x60, 0x08, - 0x48, 0x09, 0x6c, 0xc0, 0x68, 0x00, 0x23, 0x08, - 0x43, 0x18, 0x49, 0x07, 0x6c, 0xc9, 0x60, 0x08, - 0x07, 0x00, 0x48, 0x05, 0x6c, 0xc0, 0x68, 0x00, - 0x49, 0x03, 0x6e, 0x89, 0x60, 0x08, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, - 0x2e, 0x08, 0x1f, 0x9c, 0xff, 0xff, 0xef, 0xff, - 0x2e, 0x08, 0x9d, 0xc0, 0x00, 0x00, 0x02, 0x03, - 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x02, 0x01, - 0xff, 0xff, 0xbf, 0xff, 0xb4, 0x80, 0x49, 0x2e, - 0x20, 0x00, 0x28, 0x08, 0xd3, 0x04, 0xe0, 0x06, - 0x1c, 0x42, 0x06, 0x10, 0x0e, 0x00, 0xe7, 0xf8, - 0x23, 0x00, 0xc1, 0x08, 0xe7, 0xf8, 0x4a, 0x29, - 0x6f, 0xd2, 0x68, 0x12, 0x4b, 0x27, 0x6d, 0x9b, - 0x68, 0x1b, 0x0a, 0x1b, 0x02, 0x1b, 0x06, 0x12, - 0x0e, 0x12, 0x43, 0x1a, 0x4b, 0x23, 0x6d, 0x9b, - 0x60, 0x1a, 0x06, 0x12, 0x0e, 0x12, 0x4a, 0x21, - 0x6f, 0xd2, 0x68, 0x52, 0x4b, 0x1f, 0x6d, 0x1b, - 0x68, 0x1f, 0x23, 0x01, 0x03, 0xdb, 0x43, 0x9f, - 0x1c, 0x3b, 0x07, 0xd2, 0x0c, 0x12, 0x43, 0x1a, - 0x4b, 0x1a, 0x6d, 0x1b, 0x60, 0x1a, 0x04, 0x12, - 0x0f, 0xd2, 0x4a, 0x18, 0x6f, 0xd2, 0x69, 0x12, - 0x4b, 0x16, 0x6d, 0xdb, 0x68, 0x1b, 0x0c, 0x1b, - 0x04, 0x1b, 0x04, 0x12, 0x0c, 0x12, 0x43, 0x1a, - 0x4b, 0x12, 0x6d, 0xdb, 0x60, 0x1a, 0x04, 0x12, - 0x0c, 0x12, 0x4a, 0x10, 0x6d, 0x12, 0x68, 0x12, - 0x23, 0x01, 0x02, 0x5b, 0x43, 0x1a, 0x4b, 0x0d, - 0x6d, 0x1b, 0x60, 0x1a, 0x05, 0x92, 0x4a, 0x0b, - 0x6d, 0x12, 0x68, 0x12, 0x4b, 0x09, 0x6e, 0xdb, - 0x60, 0x1a, 0x4a, 0x08, 0x6d, 0x92, 0x68, 0x12, - 0x4b, 0x06, 0x6f, 0x5b, 0x60, 0x1a, 0x4a, 0x05, - 0x6d, 0xd2, 0x68, 0x12, 0x4b, 0x03, 0x6f, 0x9b, - 0x60, 0x1a, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x1f, 0xc4, 0x2e, 0x08, 0x1f, 0x9c, - 0xb5, 0x90, 0x1c, 0x07, 0x1c, 0x0c, 0x2f, 0x22, - 0xd1, 0x07, 0x2c, 0x3f, 0xd8, 0x01, 0x2c, 0x01, - 0xd2, 0x03, 0x20, 0x38, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0x49, 0x13, 0x70, 0x08, - 0x23, 0x01, 0x03, 0xdb, 0x42, 0x9f, 0xd0, 0x02, - 0x4b, 0x11, 0x42, 0x9f, 0xd1, 0x04, 0x48, 0x11, - 0x60, 0x07, 0x20, 0x00, 0xe7, 0xee, 0xe0, 0x18, - 0x2f, 0xff, 0xd1, 0x0b, 0x21, 0x00, 0x43, 0xc9, - 0x20, 0x0d, 0xf0, 0x00, 0xf8, 0x1d, 0x48, 0x0c, - 0x68, 0x01, 0x48, 0x0c, 0x68, 0x00, 0xf0, 0x00, - 0xf8, 0x43, 0xe0, 0x07, 0x1c, 0x21, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x3e, 0x48, 0x07, 0x60, 0x07, - 0x48, 0x05, 0x60, 0x04, 0x20, 0x00, 0xe7, 0xd5, - 0xe7, 0xd4, 0xe7, 0xd3, 0x2e, 0x08, 0x9d, 0xe8, - 0x00, 0x00, 0x80, 0x0f, 0xcc, 0x00, 0x05, 0x00, - 0x2e, 0x08, 0x9d, 0xe4, 0x2e, 0x08, 0x20, 0x1c, - 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0x4b, 0x13, - 0x68, 0x5b, 0x1c, 0x18, 0x21, 0x00, 0x29, 0x02, - 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x4b, 0x06, 0x19, - 0x0e, 0x09, 0xe7, 0xf8, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc4, 0x29, 0x00, 0xd1, 0x01, 0x60, 0x27, - 0xe0, 0x05, 0x23, 0x01, 0x42, 0xda, 0xd0, 0x01, - 0x60, 0x22, 0xe0, 0x00, 0xe0, 0x09, 0x1d, 0x05, - 0x23, 0x05, 0x02, 0x1b, 0x42, 0x9d, 0xdb, 0x02, - 0x20, 0x01, 0x02, 0x80, 0xe0, 0x00, 0x30, 0x04, - 0xe7, 0xe4, 0x4b, 0x02, 0x60, 0x58, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x00, - 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x05, 0x20, - 0x0d, 0x00, 0x23, 0xff, 0x33, 0x04, 0x42, 0x98, - 0xd0, 0x50, 0xdc, 0x18, 0x28, 0x10, 0xd0, 0x2d, - 0xdc, 0x08, 0x28, 0x01, 0xd0, 0x23, 0x28, 0x02, - 0xd0, 0x1e, 0x28, 0x04, 0xd0, 0x1f, 0x28, 0x08, - 0xd0, 0x1d, 0xe0, 0x76, 0x28, 0x12, 0xd0, 0x1d, - 0x28, 0x22, 0xd0, 0x3a, 0x23, 0xff, 0x33, 0x02, - 0x42, 0x98, 0xd0, 0x24, 0x23, 0xff, 0x33, 0x03, - 0x42, 0x98, 0xd0, 0x29, 0xe0, 0x69, 0x38, 0xff, - 0x38, 0x05, 0x28, 0x08, 0xd2, 0x65, 0xa3, 0x02, - 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x35, 0x3c, 0x41, 0x4f, 0x56, 0x4b, 0x5d, 0x46, - 0x20, 0x00, 0x49, 0x32, 0x63, 0x48, 0x48, 0x31, - 0x62, 0x04, 0xe0, 0x5c, 0x20, 0x01, 0x49, 0x2f, - 0x63, 0x48, 0xe0, 0x58, 0x20, 0x00, 0x49, 0x2e, - 0x67, 0x08, 0x21, 0x00, 0x43, 0xc9, 0x20, 0x10, - 0xf7, 0xff, 0xff, 0x92, 0xe0, 0x4f, 0x20, 0x01, - 0x49, 0x29, 0x67, 0x08, 0x21, 0x00, 0x43, 0xc9, - 0x20, 0x10, 0xf7, 0xff, 0xff, 0x89, 0xe0, 0x46, - 0x20, 0x02, 0x49, 0x25, 0x67, 0x08, 0x21, 0x00, - 0x43, 0xc9, 0x20, 0x10, 0xf7, 0xff, 0xff, 0x80, - 0xe0, 0x3d, 0x1c, 0x39, 0x20, 0x22, 0xf7, 0xff, - 0xff, 0x7b, 0xe0, 0x38, 0x48, 0x1e, 0x65, 0xc7, - 0x21, 0x01, 0x20, 0x35, 0xf7, 0xff, 0xff, 0x74, - 0xe0, 0x31, 0x48, 0x1b, 0x65, 0xc7, 0x21, 0x02, - 0x20, 0x35, 0xf7, 0xff, 0xff, 0x6d, 0xe0, 0x2a, - 0x21, 0x00, 0x20, 0x35, 0xf7, 0xff, 0xff, 0x68, - 0xe0, 0x25, 0x21, 0x03, 0x20, 0x35, 0xf7, 0xff, - 0xff, 0x63, 0xe0, 0x20, 0x21, 0x04, 0x20, 0x35, - 0xf7, 0xff, 0xff, 0x5e, 0xe0, 0x1b, 0x20, 0x00, - 0x49, 0x0f, 0x65, 0xc8, 0xe0, 0x17, 0x48, 0x0e, - 0x66, 0x07, 0x21, 0x01, 0x20, 0x36, 0xf7, 0xff, - 0xff, 0x53, 0xe0, 0x10, 0x48, 0x0a, 0x66, 0x07, - 0x21, 0x02, 0x20, 0x36, 0xf7, 0xff, 0xff, 0x4c, - 0xe0, 0x09, 0x20, 0x00, 0x49, 0x06, 0x66, 0x08, - 0xe0, 0x05, 0x1c, 0x20, 0x21, 0x00, 0x43, 0xc9, - 0xf7, 0xff, 0xff, 0x42, 0xe7, 0xff, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xcc, 0x00, 0x0f, 0x80, - 0xcc, 0x00, 0x05, 0x00, 0xb4, 0xb0, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x13, 0x06, 0x38, 0x0e, 0x00, - 0x06, 0x19, 0x0e, 0x09, 0x29, 0x01, 0xd0, 0x08, - 0x22, 0x00, 0x4d, 0x09, 0x60, 0x2a, 0x22, 0x00, - 0x43, 0xd2, 0x4d, 0x08, 0x68, 0x2d, 0x60, 0x2a, - 0xe0, 0x08, 0x4a, 0x07, 0x68, 0x12, 0x60, 0x14, - 0x4a, 0x04, 0x68, 0x12, 0x60, 0x10, 0x22, 0x01, - 0x4d, 0x01, 0x60, 0x2a, 0xbc, 0xb0, 0x47, 0x70, - 0xcc, 0x00, 0x0d, 0x00, 0x2e, 0x08, 0x9d, 0xdc, - 0x2e, 0x08, 0x9d, 0xd8, 0xb5, 0xf3, 0xb0, 0x81, - 0x99, 0x02, 0x06, 0x08, 0x16, 0x00, 0x90, 0x00, - 0xb0, 0x85, 0x20, 0x00, 0x90, 0x01, 0x9c, 0x06, - 0x1d, 0xe6, 0x36, 0x05, 0xcc, 0x20, 0x07, 0xa8, - 0x0f, 0x80, 0x06, 0x00, 0x16, 0x00, 0x90, 0x00, - 0x08, 0xad, 0x3d, 0x03, 0xcc, 0x80, 0x08, 0xb8, - 0x00, 0x80, 0x19, 0x86, 0xcc, 0x02, 0x91, 0x04, - 0x99, 0x04, 0x08, 0x89, 0x91, 0x04, 0x20, 0x03, - 0x05, 0x80, 0x21, 0x35, 0x06, 0x49, 0x60, 0x08, - 0x48, 0x46, 0x68, 0x01, 0x08, 0x89, 0x00, 0x89, - 0x60, 0x01, 0x48, 0x45, 0x90, 0x03, 0x20, 0x00, - 0x90, 0x02, 0x98, 0x02, 0x42, 0xa8, 0xd3, 0x04, - 0xe0, 0x08, 0x98, 0x02, 0x30, 0x01, 0x90, 0x02, - 0xe7, 0xf7, 0xcc, 0x02, 0x98, 0x03, 0xc0, 0x02, - 0x90, 0x03, 0xe7, 0xf6, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0xcc, 0x02, 0x98, 0x03, 0xc0, 0x02, - 0x90, 0x03, 0x20, 0x00, 0x49, 0x39, 0x65, 0x88, - 0x9f, 0x04, 0x2f, 0x00, 0xd8, 0x02, 0xe0, 0x05, - 0x3f, 0x01, 0xe7, 0xfa, 0xce, 0x02, 0x48, 0x35, - 0x64, 0x81, 0xe7, 0xf9, 0x20, 0x00, 0x49, 0x34, - 0x60, 0x48, 0x20, 0x00, 0x21, 0x35, 0x06, 0x49, - 0x60, 0x08, 0x20, 0x00, 0x49, 0x2f, 0x66, 0x88, - 0x20, 0x00, 0x21, 0x35, 0x06, 0x49, 0x61, 0x88, - 0x20, 0x01, 0x49, 0x2c, 0x64, 0xc8, 0x48, 0x2c, - 0x68, 0x40, 0x28, 0x00, 0xd1, 0x0e, 0x27, 0x00, - 0x2f, 0x64, 0xd3, 0x02, 0xe0, 0x02, 0x37, 0x01, - 0xe7, 0xfa, 0xe7, 0xfc, 0x98, 0x01, 0x1c, 0x41, - 0x91, 0x01, 0x4b, 0x26, 0x42, 0x98, 0xdb, 0x00, - 0xe0, 0x00, 0xe7, 0xec, 0x48, 0x24, 0x68, 0x01, - 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0x48, 0x23, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x48, 0x21, - 0x68, 0x40, 0x28, 0x00, 0xd1, 0x0b, 0x48, 0x20, - 0x68, 0x40, 0x4b, 0x19, 0x18, 0xc0, 0x49, 0x1d, - 0x60, 0x08, 0x48, 0x1d, 0x68, 0x80, 0x4b, 0x16, - 0x18, 0xc0, 0x49, 0x1a, 0x60, 0x48, 0x48, 0x19, - 0x68, 0x00, 0x21, 0x33, 0x06, 0x49, 0x65, 0x48, - 0x48, 0x16, 0x68, 0x40, 0x21, 0x33, 0x06, 0x49, - 0x65, 0x88, 0x48, 0x14, 0x68, 0x40, 0x21, 0x33, - 0x06, 0x49, 0x66, 0x88, 0x48, 0x11, 0x68, 0x00, - 0x21, 0x33, 0x06, 0x49, 0x66, 0x48, 0x20, 0x03, - 0x21, 0x33, 0x06, 0x49, 0x67, 0x08, 0x20, 0x00, - 0x49, 0x0e, 0x68, 0x09, 0x70, 0x08, 0x21, 0x00, - 0x20, 0x0d, 0xf7, 0xff, 0xfe, 0x2d, 0xb0, 0x05, - 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x66, 0x00, 0x00, 0x70, - 0xcc, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x80, - 0xcc, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x27, 0x10, - 0x6a, 0x00, 0x00, 0x10, 0x2e, 0x08, 0xb9, 0x88, - 0xcc, 0x00, 0x0f, 0x80, 0x2e, 0x08, 0xd2, 0x10, - 0x1c, 0x01, 0xb0, 0x81, 0x48, 0x27, 0x22, 0x00, - 0x92, 0x00, 0x9a, 0x00, 0x2a, 0x16, 0xdb, 0x04, - 0xe0, 0x09, 0x9a, 0x00, 0x32, 0x01, 0x92, 0x00, - 0xe7, 0xf7, 0x68, 0x02, 0x9b, 0x00, 0x00, 0x9b, - 0x50, 0xca, 0x30, 0x04, 0xe7, 0xf5, 0x48, 0x20, - 0x22, 0x00, 0x92, 0x00, 0x9a, 0x00, 0x2a, 0x0b, - 0xdb, 0x04, 0xe0, 0x0a, 0x9a, 0x00, 0x32, 0x01, - 0x92, 0x00, 0xe7, 0xf7, 0x68, 0x03, 0x9a, 0x00, - 0x00, 0x92, 0x18, 0x52, 0x65, 0x93, 0x30, 0x04, - 0xe7, 0xf4, 0x48, 0x18, 0x22, 0x00, 0x92, 0x00, - 0x9a, 0x00, 0x2a, 0x11, 0xdb, 0x04, 0xe0, 0x0b, - 0x9a, 0x00, 0x32, 0x01, 0x92, 0x00, 0xe7, 0xf7, - 0x68, 0x03, 0x9a, 0x00, 0x00, 0x92, 0x18, 0x52, - 0x32, 0x80, 0x60, 0x53, 0x30, 0x04, 0xe7, 0xf3, - 0x48, 0x0f, 0x22, 0x02, 0x92, 0x00, 0x9a, 0x00, - 0x2a, 0x05, 0xdb, 0x04, 0xe0, 0x0b, 0x9a, 0x00, - 0x32, 0x01, 0x92, 0x00, 0xe7, 0xf7, 0x68, 0x02, - 0x9b, 0x00, 0x00, 0x9b, 0x18, 0x5b, 0x33, 0x80, - 0x60, 0x5a, 0x30, 0x04, 0xe7, 0xf3, 0x4a, 0x07, - 0x6c, 0x12, 0x1d, 0xcb, 0x33, 0x79, 0x61, 0xda, - 0xb0, 0x01, 0x47, 0x70, 0xcc, 0x00, 0x05, 0x20, - 0xcc, 0x00, 0x0c, 0x00, 0xcc, 0x00, 0x0c, 0x5c, - 0xcc, 0x00, 0x0c, 0xa0, 0xcc, 0x00, 0x0c, 0x80, - 0xb4, 0xf0, 0x1c, 0x06, 0x1c, 0x0f, 0x1c, 0x14, - 0x1c, 0x1d, 0x06, 0x29, 0x0e, 0x09, 0x2c, 0x1f, - 0xdb, 0x02, 0x20, 0xaf, 0xbc, 0xf0, 0x47, 0x70, - 0x4b, 0x0b, 0x40, 0x1f, 0x48, 0x0b, 0x68, 0x00, - 0x60, 0x06, 0x29, 0x01, 0xd1, 0x07, 0x48, 0x0a, - 0x68, 0x02, 0x43, 0x3a, 0x60, 0x02, 0x20, 0x80, - 0x6e, 0x00, 0x60, 0x04, 0xe0, 0x05, 0x29, 0x02, - 0xd1, 0x03, 0x48, 0x05, 0x68, 0x02, 0x43, 0xba, - 0x60, 0x02, 0x20, 0x00, 0xe7, 0xe6, 0xe7, 0xe5, - 0xff, 0xff, 0xf8, 0xff, 0x2e, 0x08, 0x9d, 0xe0, - 0xcc, 0x00, 0x02, 0x20, 0xb5, 0xf3, 0xb0, 0x81, - 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, - 0x99, 0x02, 0x06, 0x0e, 0x0e, 0x36, 0x48, 0x1a, - 0x6f, 0x00, 0x23, 0x02, 0x40, 0x18, 0xd0, 0x0d, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0x80, 0x21, 0x33, - 0x06, 0x49, 0x6d, 0x49, 0x1a, 0x41, 0x48, 0x14, - 0x6d, 0xc0, 0x4a, 0x13, 0x6d, 0x92, 0x1a, 0x80, - 0x18, 0x0d, 0xe0, 0x06, 0x20, 0x33, 0x06, 0x40, - 0x6d, 0x80, 0x21, 0x33, 0x06, 0x49, 0x6d, 0x49, - 0x1a, 0x45, 0x98, 0x00, 0x43, 0x68, 0x1c, 0x01, - 0x20, 0x64, 0xf0, 0x07, 0xfb, 0x43, 0x1c, 0x04, - 0x43, 0x6e, 0x1c, 0x31, 0x20, 0x64, 0xf0, 0x07, - 0xfb, 0x3d, 0x1c, 0x07, 0x08, 0xa4, 0x00, 0xa4, - 0x08, 0xbf, 0x00, 0xbf, 0x48, 0x05, 0x64, 0x84, - 0x48, 0x04, 0x64, 0xc7, 0xb0, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x0c, 0x80, - 0xb5, 0xf7, 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, - 0xb0, 0x82, 0x27, 0x00, 0x2d, 0x1f, 0xdb, 0x05, - 0x20, 0xaf, 0xb0, 0x02, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2f, 0x00, 0xd1, 0x0d, - 0x48, 0x19, 0x69, 0x80, 0x28, 0x00, 0xd0, 0x00, - 0xe7, 0xfa, 0x20, 0x02, 0x49, 0x16, 0x61, 0x88, - 0x48, 0x15, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x00, - 0x27, 0xff, 0xe7, 0xef, 0x4c, 0x13, 0x94, 0x00, - 0x20, 0x01, 0x02, 0x40, 0x90, 0x01, 0x22, 0x00, - 0x99, 0x03, 0xb4, 0x06, 0x06, 0x2b, 0x16, 0x1b, - 0x9a, 0x03, 0x99, 0x04, 0x1c, 0x20, 0xf0, 0x01, - 0xff, 0x75, 0xb0, 0x02, 0x1c, 0x06, 0x2e, 0xd2, - 0xd1, 0x06, 0x20, 0x00, 0x49, 0x08, 0x61, 0x88, - 0x20, 0xd2, 0xb0, 0x02, 0xe7, 0xd2, 0xe0, 0x08, - 0x20, 0x00, 0x99, 0x00, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x03, 0x61, 0x88, 0x20, 0x00, 0xb0, 0x02, - 0xe7, 0xc8, 0xb0, 0x02, 0xe7, 0xc6, 0x00, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0xcc, 0x00, 0x06, 0x00, - 0xb5, 0xff, 0x9f, 0x09, 0xb0, 0x81, 0x9b, 0x01, - 0x06, 0x18, 0x0e, 0x00, 0x9b, 0x02, 0x06, 0x19, - 0x0e, 0x09, 0x9b, 0x03, 0x06, 0x1b, 0x0e, 0x1b, - 0x93, 0x00, 0x9b, 0x04, 0x06, 0x1a, 0x0e, 0x12, - 0x06, 0x3d, 0x0e, 0x2d, 0x2d, 0x01, 0xd1, 0x07, - 0x4c, 0x1c, 0x68, 0x26, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x23, 0xe0, 0x07, - 0x2d, 0x02, 0xd1, 0x05, 0x4c, 0x17, 0x68, 0x26, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x33, 0x60, 0x23, - 0x28, 0x00, 0xd1, 0x03, 0x23, 0x00, 0x4c, 0x14, - 0x61, 0xe3, 0xe0, 0x04, 0x28, 0x01, 0xd1, 0x02, - 0x23, 0x01, 0x4c, 0x11, 0x61, 0xe3, 0x29, 0x00, - 0xd1, 0x03, 0x23, 0x00, 0x4c, 0x0e, 0x65, 0xa3, - 0xe0, 0x04, 0x29, 0x01, 0xd1, 0x02, 0x23, 0x01, - 0x4c, 0x0b, 0x65, 0xa3, 0x2a, 0x00, 0xd1, 0x03, - 0x23, 0x02, 0x4c, 0x09, 0x66, 0xe3, 0xe0, 0x04, - 0x2a, 0x01, 0xd1, 0x02, 0x23, 0x03, 0x4c, 0x06, - 0x66, 0xe3, 0x9b, 0x00, 0x4c, 0x04, 0x67, 0x23, - 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x02, 0x20, - 0xcc, 0x00, 0x0f, 0x80, 0xb5, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x2e, 0x0e, 0x36, - 0xb0, 0x84, 0x48, 0x15, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x04, 0x20, 0x39, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x01, 0xd1, 0x0a, - 0x94, 0x00, 0x97, 0x01, 0x48, 0x0f, 0x90, 0x02, - 0x48, 0x0f, 0x90, 0x03, 0x46, 0x68, 0x21, 0x01, - 0xf0, 0x00, 0xfd, 0x1a, 0xe0, 0x0f, 0x20, 0x00, - 0x90, 0x00, 0x20, 0x00, 0x90, 0x01, 0x48, 0x09, - 0x90, 0x02, 0x48, 0x09, 0x90, 0x03, 0x46, 0x68, - 0x21, 0x01, 0xf0, 0x00, 0xfd, 0x0d, 0x21, 0x00, - 0x20, 0x02, 0xf7, 0xff, 0xfc, 0x85, 0x20, 0x00, - 0xb0, 0x04, 0xe7, 0xdc, 0xb0, 0x04, 0xe7, 0xda, - 0x2e, 0x08, 0xba, 0x28, 0x00, 0x00, 0x02, 0xcf, - 0x00, 0x00, 0x02, 0x3f, 0xb4, 0xb0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x48, 0x14, 0x6c, 0x00, - 0x1c, 0x01, 0x48, 0x13, 0x6f, 0x80, 0x23, 0x09, - 0x01, 0x9b, 0x42, 0x98, 0xd1, 0x12, 0x20, 0x02, - 0x40, 0x20, 0xd0, 0x0c, 0x2d, 0x02, 0xd1, 0x0a, - 0x2f, 0x03, 0xd1, 0x00, 0x31, 0x04, 0x2f, 0x03, - 0xd2, 0x05, 0x07, 0xe0, 0x0f, 0xc0, 0xd0, 0x01, - 0x31, 0x05, 0xe0, 0x00, 0x31, 0x08, 0x2d, 0x02, - 0xd9, 0x00, 0x21, 0x12, 0x00, 0x48, 0x18, 0x40, - 0x30, 0x01, 0x10, 0x40, 0x21, 0x2d, 0x02, 0x09, - 0x43, 0x41, 0x48, 0x03, 0x69, 0x40, 0x18, 0x09, - 0x1c, 0x08, 0xbc, 0xb0, 0x47, 0x70, 0xe7, 0xfc, - 0xcc, 0x00, 0x0f, 0x80, 0x48, 0x07, 0x6a, 0xc0, - 0x1c, 0x01, 0x00, 0x48, 0x18, 0x40, 0x30, 0x01, - 0x10, 0x40, 0x21, 0x2d, 0x02, 0x09, 0x43, 0x41, - 0x48, 0x03, 0x69, 0x40, 0x18, 0x09, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0xcc, 0x00, 0x00, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0x48, 0x07, 0x68, 0x80, - 0x28, 0x00, 0xd1, 0x03, 0x48, 0x06, 0x69, 0x00, - 0x1c, 0x01, 0xe0, 0x02, 0x48, 0x04, 0x68, 0xc0, - 0x1c, 0x01, 0x4b, 0x02, 0x18, 0xc9, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0xcc, 0x00, 0x00, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0xb5, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x48, 0x06, 0x6c, 0x40, 0x60, 0x20, - 0x48, 0x04, 0x6c, 0x80, 0x60, 0x38, 0xf7, 0xff, - 0xff, 0xe1, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xe7, 0xfb, 0x00, 0x00, 0xcc, 0x00, 0x02, 0x00, - 0xb5, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, - 0xf7, 0xff, 0xff, 0xd4, 0x1c, 0x06, 0x2d, 0x00, - 0xd0, 0x01, 0x2c, 0x00, 0xd1, 0x03, 0x20, 0x3a, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x08, 0x78, - 0x00, 0x40, 0xd0, 0x01, 0x20, 0x3a, 0xe7, 0xf7, - 0x20, 0x00, 0x49, 0x0d, 0x66, 0x88, 0x48, 0x0d, - 0x68, 0x01, 0x23, 0x12, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x0b, 0x63, 0x45, 0x48, 0x0a, 0x63, 0x84, - 0x20, 0x01, 0x49, 0x09, 0x62, 0x48, 0x48, 0x09, - 0x68, 0x01, 0x23, 0x01, 0x40, 0x59, 0x60, 0x01, - 0x48, 0x05, 0x63, 0xc7, 0x48, 0x02, 0x60, 0x46, - 0x20, 0x00, 0xe7, 0xdd, 0xe7, 0xdc, 0x00, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x48, - 0xcc, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x00, 0x08, - 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0x1c, 0x16, - 0x1c, 0x1d, 0x48, 0x10, 0x6a, 0x00, 0x28, 0x10, - 0xd0, 0x02, 0x20, 0x3b, 0xbc, 0xf0, 0x47, 0x70, - 0x48, 0x0d, 0x68, 0x00, 0x60, 0x38, 0x68, 0x38, - 0x4b, 0x0b, 0x18, 0xc0, 0x60, 0x38, 0x48, 0x0b, - 0x6b, 0x40, 0x60, 0x30, 0x48, 0x09, 0x6b, 0x80, - 0x60, 0x28, 0x48, 0x09, 0x6c, 0x80, 0x23, 0x10, - 0x40, 0x18, 0xd0, 0x02, 0x20, 0x02, 0x60, 0x20, - 0xe0, 0x01, 0x20, 0x01, 0x60, 0x20, 0x20, 0x00, - 0xe7, 0xe4, 0xe7, 0xe3, 0xcc, 0x00, 0x05, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x80, - 0xcc, 0x00, 0x0f, 0x00, 0xb4, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x2a, 0x0e, 0x12, - 0x06, 0x21, 0x0e, 0x09, 0x2f, 0x00, 0xd1, 0x30, - 0xb0, 0x81, 0x46, 0x6f, 0x2a, 0x00, 0xd0, 0x06, - 0x2a, 0x08, 0xd0, 0x0d, 0x2a, 0x10, 0xd0, 0x14, - 0x2a, 0x18, 0xd0, 0x1b, 0xe0, 0x23, 0x20, 0x00, - 0x70, 0x38, 0x20, 0x00, 0x70, 0x78, 0x20, 0x0c, - 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, 0xe0, 0x1b, - 0x20, 0x00, 0x70, 0x38, 0x20, 0x08, 0x70, 0x78, - 0x20, 0x1c, 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, - 0xe0, 0x12, 0x20, 0x00, 0x70, 0x38, 0x20, 0x10, - 0x70, 0x78, 0x20, 0x0c, 0x70, 0xb8, 0x20, 0x00, - 0x70, 0xf8, 0xe0, 0x09, 0x20, 0x00, 0x70, 0x38, - 0x20, 0x18, 0x70, 0x78, 0x20, 0x1c, 0x70, 0xb8, - 0x20, 0x00, 0x70, 0xf8, 0xe0, 0x00, 0xe7, 0xff, - 0xb0, 0x01, 0x23, 0x00, 0x56, 0xf8, 0x23, 0x39, - 0x06, 0x5b, 0x60, 0x18, 0x23, 0x01, 0x56, 0xf8, - 0x23, 0x39, 0x06, 0x5b, 0x61, 0xd8, 0x29, 0x00, - 0xd1, 0x06, 0x48, 0x0e, 0x68, 0x06, 0x23, 0x20, - 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x03, 0xe0, 0x06, - 0x29, 0x20, 0xd1, 0x04, 0x48, 0x09, 0x68, 0x06, - 0x23, 0x20, 0x43, 0x33, 0x60, 0x03, 0x23, 0x02, - 0x56, 0xf8, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x58, - 0x23, 0x03, 0x56, 0xf8, 0x4b, 0x04, 0x63, 0x18, - 0x20, 0x00, 0x23, 0x39, 0x06, 0x5b, 0x64, 0x98, - 0xbc, 0xf0, 0x47, 0x70, 0x72, 0x00, 0x00, 0x1c, - 0x72, 0x00, 0x01, 0x00, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0d, 0x1c, 0x14, 0x06, 0x29, 0x0e, 0x09, - 0x06, 0x22, 0x0e, 0x12, 0xb0, 0x84, 0x29, 0x33, - 0xdc, 0x01, 0x2a, 0x0f, 0xdd, 0x03, 0x20, 0xff, - 0xb0, 0x04, 0xbc, 0xb0, 0x47, 0x70, 0x20, 0x39, - 0x06, 0x40, 0x63, 0x41, 0x20, 0x10, 0x43, 0x10, - 0x23, 0x39, 0x06, 0x5b, 0x63, 0x98, 0x20, 0x39, - 0x06, 0x40, 0x68, 0x00, 0x90, 0x03, 0x98, 0x03, - 0x23, 0x9c, 0x43, 0xdb, 0x40, 0x18, 0x90, 0x03, - 0x20, 0x39, 0x06, 0x40, 0x68, 0x40, 0x90, 0x01, - 0x98, 0x01, 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, - 0x90, 0x01, 0x06, 0x38, 0x0e, 0x00, 0xd0, 0x29, - 0x20, 0x10, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x03, - 0x23, 0x80, 0x43, 0x18, 0x90, 0x03, 0x20, 0x08, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x03, 0x23, 0x10, - 0x43, 0x18, 0x90, 0x03, 0x20, 0x04, 0x40, 0x38, - 0xd0, 0x04, 0x98, 0x03, 0x23, 0x08, 0x43, 0x18, - 0x90, 0x03, 0xe0, 0x0c, 0x20, 0x02, 0x40, 0x38, - 0xd0, 0x04, 0x98, 0x03, 0x23, 0x0c, 0x43, 0x18, - 0x90, 0x03, 0xe0, 0x04, 0x98, 0x03, 0x23, 0x0c, - 0x43, 0xdb, 0x40, 0x18, 0x90, 0x03, 0x20, 0x20, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x01, 0x23, 0x20, - 0x43, 0x18, 0x90, 0x01, 0x98, 0x03, 0x23, 0x39, - 0x06, 0x5b, 0x60, 0x18, 0x98, 0x01, 0x23, 0x39, - 0x06, 0x5b, 0x60, 0x58, 0x20, 0x39, 0x06, 0x40, - 0x6a, 0x00, 0x90, 0x00, 0x98, 0x00, 0x23, 0xf0, - 0x43, 0xdb, 0x43, 0x18, 0x90, 0x00, 0x20, 0xff, - 0x02, 0x00, 0x40, 0x38, 0xd0, 0x27, 0x20, 0xff, - 0x30, 0x01, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xfe, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x02, 0x40, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xfd, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x02, 0x80, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xfb, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x02, 0xc0, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xf7, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x03, 0x00, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xf0, 0x40, 0x18, 0x90, 0x00, 0x98, 0x00, - 0x23, 0x39, 0x06, 0x5b, 0x62, 0x18, 0x20, 0x39, - 0x06, 0x40, 0x69, 0xc0, 0x90, 0x02, 0x98, 0x02, - 0x08, 0x40, 0x00, 0x40, 0x90, 0x02, 0x20, 0x39, - 0x06, 0x40, 0x6a, 0xc0, 0x90, 0x00, 0x98, 0x00, - 0x23, 0x1c, 0x43, 0xdb, 0x40, 0x18, 0x90, 0x00, - 0x20, 0x39, 0x06, 0x40, 0x6b, 0x80, 0x90, 0x03, - 0x98, 0x03, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, - 0x90, 0x03, 0x20, 0x39, 0x06, 0x40, 0x6b, 0xc0, - 0x90, 0x01, 0x98, 0x01, 0x09, 0x00, 0x01, 0x00, - 0x90, 0x01, 0x48, 0x4a, 0x40, 0x38, 0xd0, 0x45, - 0x20, 0x01, 0x04, 0x00, 0x40, 0x38, 0xd0, 0x03, - 0x98, 0x02, 0x23, 0x01, 0x43, 0x18, 0x90, 0x02, - 0x20, 0x01, 0x05, 0xc0, 0x40, 0x38, 0xd0, 0x03, - 0x98, 0x00, 0x23, 0x10, 0x43, 0x18, 0x90, 0x00, - 0x20, 0x07, 0x04, 0x40, 0x40, 0x38, 0x23, 0x01, - 0x04, 0x5b, 0x42, 0x98, 0xd0, 0x08, 0x23, 0x01, - 0x04, 0x9b, 0x42, 0x98, 0xd0, 0x07, 0x23, 0x01, - 0x04, 0xdb, 0x42, 0x98, 0xd0, 0x08, 0xe0, 0x0c, - 0x98, 0x00, 0x90, 0x00, 0xe0, 0x0a, 0x98, 0x00, - 0x23, 0x04, 0x43, 0x18, 0x90, 0x00, 0xe0, 0x05, - 0x98, 0x00, 0x23, 0x0c, 0x43, 0x18, 0x90, 0x00, - 0xe0, 0x00, 0xe7, 0xff, 0x20, 0x01, 0x05, 0x80, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x03, 0x23, 0x10, - 0x43, 0x18, 0x90, 0x03, 0x20, 0x01, 0x05, 0x00, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x01, 0x23, 0x08, - 0x43, 0x18, 0x90, 0x01, 0x20, 0x01, 0x05, 0x40, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x01, 0x23, 0x07, - 0x43, 0x18, 0x90, 0x01, 0x98, 0x03, 0x23, 0x39, - 0x06, 0x5b, 0x63, 0x98, 0x98, 0x02, 0x23, 0x39, - 0x06, 0x5b, 0x61, 0xd8, 0x98, 0x01, 0x23, 0x39, - 0x06, 0x5b, 0x63, 0xd8, 0x98, 0x00, 0x23, 0x39, - 0x06, 0x5b, 0x62, 0xd8, 0x20, 0x39, 0x06, 0x40, - 0x68, 0x80, 0x90, 0x03, 0x98, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x90, 0x03, 0x0f, 0x38, 0x07, 0x00, - 0xd0, 0x26, 0x20, 0x01, 0x07, 0x00, 0x40, 0x38, - 0x23, 0x01, 0x07, 0x1b, 0x42, 0x98, 0xd1, 0x04, - 0x98, 0x03, 0x23, 0x02, 0x43, 0x18, 0x90, 0x03, - 0xe0, 0x07, 0x20, 0x00, 0x42, 0x80, 0xd1, 0x04, - 0x98, 0x03, 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, - 0x90, 0x03, 0x20, 0x01, 0x07, 0x40, 0x40, 0x38, - 0x23, 0x01, 0x07, 0x5b, 0x42, 0x98, 0xd1, 0x04, - 0x98, 0x03, 0x23, 0x01, 0x43, 0x18, 0x90, 0x03, - 0xe0, 0x06, 0x20, 0x00, 0x42, 0x80, 0xd1, 0x03, - 0x98, 0x03, 0x08, 0x40, 0x00, 0x40, 0x90, 0x03, - 0x98, 0x03, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x98, - 0x20, 0x00, 0xb0, 0x04, 0xe6, 0xc1, 0xb0, 0x04, - 0xe6, 0xbf, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, - 0x48, 0x02, 0x69, 0xc0, 0x06, 0x00, 0x16, 0x00, - 0x47, 0x70, 0xe7, 0xfd, 0x72, 0x00, 0x01, 0x00, - 0xb5, 0xf7, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x23, - 0x16, 0x18, 0x06, 0x3b, 0x16, 0x19, 0x9b, 0x02, - 0x06, 0x1a, 0x0e, 0x12, 0x2a, 0x00, 0xd1, 0x0b, - 0x23, 0x39, 0x06, 0x5b, 0x60, 0xd8, 0x23, 0x39, - 0x06, 0x5b, 0x61, 0x19, 0x4d, 0x0b, 0x68, 0x2e, - 0x23, 0x01, 0x43, 0x33, 0x60, 0x2b, 0xe0, 0x0c, - 0x2a, 0x01, 0xd1, 0x0a, 0x23, 0x39, 0x06, 0x5b, - 0x61, 0x58, 0x23, 0x39, 0x06, 0x5b, 0x61, 0x99, - 0x4d, 0x04, 0x68, 0x2e, 0x23, 0x02, 0x43, 0x33, - 0x60, 0x2b, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x72, 0x00, 0x00, 0x08, - 0xb4, 0x90, 0x1c, 0x01, 0x20, 0x92, 0x4b, 0x4b, - 0x60, 0x18, 0x20, 0x92, 0x4b, 0x4a, 0x60, 0x18, - 0x20, 0x10, 0x4b, 0x4a, 0x60, 0x18, 0x20, 0x00, - 0x4b, 0x48, 0x60, 0x58, 0x48, 0x48, 0x4b, 0x47, - 0x60, 0x98, 0x22, 0x00, 0x2a, 0x10, 0xdb, 0x02, - 0xe0, 0x07, 0x32, 0x01, 0xe7, 0xfa, 0x20, 0x00, - 0x43, 0xc0, 0x00, 0x93, 0x4c, 0x42, 0x50, 0xe0, - 0xe7, 0xf7, 0x20, 0x00, 0x43, 0xc0, 0x00, 0x93, - 0x4c, 0x3f, 0x50, 0xe0, 0x22, 0x00, 0x2a, 0x08, - 0xdb, 0x02, 0xe0, 0x08, 0x32, 0x01, 0xe7, 0xfa, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0x94, 0x4b, 0x3b, - 0x18, 0xe3, 0x64, 0x18, 0xe7, 0xf6, 0x22, 0x00, - 0x2a, 0x20, 0xdb, 0x02, 0xe0, 0x08, 0x32, 0x01, - 0xe7, 0xfa, 0x20, 0x00, 0x43, 0xc0, 0x00, 0x94, - 0x4b, 0x35, 0x18, 0xe3, 0x60, 0x18, 0xe7, 0xf6, - 0x22, 0x00, 0x2a, 0x19, 0xdb, 0x02, 0xe0, 0x06, - 0x32, 0x01, 0xe7, 0xfa, 0x20, 0x00, 0x00, 0x93, - 0x4c, 0x30, 0x50, 0xe0, 0xe7, 0xf8, 0x20, 0x00, - 0x4b, 0x2f, 0x60, 0x18, 0x20, 0x39, 0x06, 0x40, - 0x69, 0xc0, 0x27, 0x18, 0x40, 0x07, 0x2f, 0x00, - 0xd0, 0x03, 0x48, 0x2c, 0x4b, 0x2c, 0x60, 0x18, - 0xe0, 0x03, 0x20, 0xff, 0x30, 0xe0, 0x4b, 0x2a, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x29, 0x60, 0x18, - 0x20, 0x00, 0x4b, 0x28, 0x60, 0x58, 0x48, 0x28, - 0x4b, 0x26, 0x60, 0x98, 0x48, 0x24, 0x68, 0x00, - 0x4b, 0x24, 0x60, 0xd8, 0x48, 0x25, 0x60, 0x01, - 0x20, 0x0d, 0x06, 0xc0, 0x61, 0xc1, 0x20, 0x05, - 0x02, 0x00, 0x23, 0x0d, 0x06, 0xdb, 0x60, 0x18, - 0x48, 0x21, 0x23, 0x0d, 0x06, 0xdb, 0x60, 0x58, - 0x48, 0x1f, 0x4b, 0x16, 0x63, 0x98, 0x20, 0x00, - 0x23, 0x0d, 0x06, 0xdb, 0x60, 0x98, 0x20, 0x00, - 0x23, 0x0d, 0x06, 0xdb, 0x61, 0x18, 0x48, 0x1b, - 0x23, 0x0d, 0x06, 0xdb, 0x61, 0x98, 0x20, 0x01, - 0x23, 0x0d, 0x06, 0xdb, 0x60, 0xd8, 0x48, 0x18, - 0x23, 0x0d, 0x06, 0xdb, 0x63, 0x18, 0x48, 0x17, - 0x23, 0x0d, 0x06, 0xdb, 0x63, 0x58, 0x20, 0x00, - 0x4b, 0x15, 0x60, 0x18, 0x48, 0x11, 0x4b, 0x15, - 0x60, 0x18, 0x20, 0x00, 0xbc, 0x90, 0x47, 0x70, - 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0xba, 0x30, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xbb, 0x00, - 0x2e, 0x08, 0xba, 0x38, 0x68, 0x00, 0x0d, 0x00, - 0x68, 0x00, 0x04, 0x00, 0x2e, 0x08, 0xb9, 0xc4, - 0x2e, 0x08, 0xba, 0x28, 0x00, 0x00, 0x02, 0x3f, - 0x2e, 0x08, 0x9d, 0xec, 0x2e, 0x08, 0xbb, 0x0c, - 0x00, 0x00, 0x02, 0xcf, 0x2e, 0x08, 0x9d, 0xf0, - 0x00, 0xf0, 0x29, 0x6d, 0x3f, 0xff, 0xff, 0xff, - 0x00, 0x80, 0x10, 0x80, 0x00, 0x80, 0xeb, 0x80, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0x9b, 0xb8, - 0xb5, 0xff, 0xb0, 0x85, 0x20, 0x39, 0x06, 0x40, - 0x69, 0xc0, 0x23, 0x18, 0x40, 0x18, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x48, 0x5a, - 0x4b, 0x5a, 0x60, 0x18, 0xe0, 0x03, 0x20, 0xff, - 0x30, 0xe0, 0x4b, 0x58, 0x60, 0x18, 0x9c, 0x06, - 0x9f, 0x07, 0x22, 0x00, 0x21, 0x00, 0x98, 0x05, - 0x38, 0x0c, 0x28, 0x06, 0xd2, 0x0c, 0xa3, 0x02, - 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x04, 0x03, 0x06, 0x04, 0x03, 0x06, 0x32, 0x01, - 0x32, 0x01, 0xe0, 0x02, 0x3a, 0x01, 0xe0, 0x00, - 0xe7, 0xff, 0x98, 0x05, 0x38, 0x0b, 0x28, 0x08, - 0xd2, 0x15, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x0a, 0x04, 0x04, 0x04, - 0x0a, 0x0a, 0x0a, 0x04, 0x25, 0x2d, 0x01, 0x2d, - 0x48, 0x44, 0x68, 0x00, 0x1c, 0x46, 0xe0, 0x0e, - 0x48, 0x43, 0x6c, 0x40, 0x1c, 0x05, 0x48, 0x43, - 0x68, 0x40, 0x1c, 0x06, 0xe0, 0x07, 0x21, 0xff, - 0x1c, 0x08, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, 0x2d, 0x00, - 0xd0, 0x01, 0x2e, 0x00, 0xd1, 0x04, 0x25, 0x2d, - 0x01, 0x2d, 0x48, 0x38, 0x68, 0x00, 0x1c, 0x46, - 0x29, 0xff, 0xd1, 0x02, 0x1c, 0x08, 0xb0, 0x05, - 0xe7, 0xec, 0x1e, 0x68, 0x90, 0x02, 0x1e, 0x70, - 0x90, 0x01, 0x23, 0x01, 0x42, 0xda, 0xd1, 0x08, - 0x42, 0x50, 0x40, 0x85, 0x1c, 0x2b, 0x1e, 0x5d, - 0x42, 0x50, 0x40, 0x86, 0x1c, 0x33, 0x1e, 0x5e, - 0xe0, 0x05, 0x41, 0x15, 0x1c, 0x28, 0x1e, 0x45, - 0x41, 0x16, 0x1c, 0x30, 0x1e, 0x46, 0x07, 0xe0, - 0x0f, 0xc0, 0xd0, 0x02, 0x21, 0x80, 0x08, 0x64, - 0x00, 0x64, 0x07, 0xf8, 0x0f, 0xc0, 0xd0, 0x02, - 0x21, 0x80, 0x08, 0x7f, 0x00, 0x7f, 0x19, 0x60, - 0x90, 0x04, 0x19, 0xb8, 0x90, 0x03, 0x2c, 0x00, - 0xda, 0x01, 0x21, 0x80, 0x24, 0x00, 0x98, 0x04, - 0x28, 0x01, 0xda, 0x02, 0x21, 0x80, 0x20, 0x01, - 0x90, 0x04, 0x4b, 0x1f, 0x42, 0x9c, 0xdb, 0x01, - 0x21, 0x80, 0x4c, 0x1e, 0x98, 0x04, 0x4b, 0x1c, - 0x42, 0x98, 0xdd, 0x02, 0x21, 0x80, 0x48, 0x1a, - 0x90, 0x04, 0x2f, 0x00, 0xda, 0x01, 0x21, 0x80, - 0x27, 0x00, 0x98, 0x03, 0x28, 0x01, 0xda, 0x02, - 0x21, 0x80, 0x20, 0x01, 0x90, 0x03, 0x48, 0x11, - 0x68, 0x00, 0x42, 0x87, 0xd3, 0x03, 0x21, 0x80, - 0x48, 0x0e, 0x68, 0x00, 0x1e, 0x47, 0x98, 0x03, - 0x4b, 0x0c, 0x68, 0x1b, 0x42, 0x98, 0xd9, 0x03, - 0x21, 0x80, 0x48, 0x0a, 0x68, 0x00, 0x90, 0x03, - 0x9b, 0x08, 0x60, 0x1c, 0x9b, 0x08, 0x60, 0x5f, - 0x98, 0x04, 0x9b, 0x08, 0x60, 0x98, 0x98, 0x03, - 0x9b, 0x08, 0x60, 0xd8, 0x1c, 0x08, 0xb0, 0x05, - 0xe7, 0x88, 0xb0, 0x05, 0xe7, 0x86, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x9d, 0xec, - 0xcc, 0x00, 0x02, 0x00, 0xcc, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0xce, - 0xb5, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0xb0, 0x81, - 0x2c, 0x0b, 0xdb, 0x19, 0x2c, 0x12, 0xdc, 0x17, - 0x68, 0xbe, 0x68, 0xf9, 0x91, 0x00, 0x68, 0x7a, - 0x1c, 0x3b, 0x68, 0x39, 0x1c, 0x20, 0xf7, 0xff, - 0xff, 0x23, 0x1c, 0x05, 0x68, 0xb8, 0x42, 0xb0, - 0xd0, 0x00, 0x25, 0x80, 0x68, 0xf8, 0x99, 0x00, - 0x42, 0x88, 0xd0, 0x00, 0x25, 0x80, 0x1c, 0x28, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x25, 0x00, 0x68, 0x38, 0x28, 0x00, 0xda, 0x02, - 0x25, 0x80, 0x20, 0x00, 0x60, 0x38, 0x68, 0x78, - 0x28, 0x00, 0xda, 0x02, 0x25, 0x80, 0x20, 0x00, - 0x60, 0x78, 0x68, 0x38, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x04, 0x25, 0x80, 0x68, 0x38, 0x08, 0x40, - 0x00, 0x40, 0x60, 0x38, 0x68, 0xb8, 0x07, 0xc0, - 0x0f, 0xc0, 0xd1, 0x09, 0x25, 0x80, 0x68, 0xb8, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x68, 0xb8, - 0xe0, 0x01, 0x68, 0xb8, 0x38, 0x01, 0x60, 0xb8, - 0x68, 0xb8, 0x68, 0x39, 0x42, 0x88, 0xdc, 0x03, - 0x25, 0x80, 0x68, 0x38, 0x30, 0x01, 0x60, 0xb8, - 0x68, 0x78, 0x68, 0xf9, 0x42, 0x88, 0xdb, 0x03, - 0x25, 0x80, 0x68, 0x78, 0x30, 0x01, 0x60, 0xf8, - 0x1c, 0x28, 0xb0, 0x01, 0xe7, 0xc5, 0xb0, 0x01, - 0xe7, 0xc3, 0x1c, 0x02, 0x21, 0x18, 0xe0, 0x00, - 0x31, 0x01, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, - 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0a, 0xb0, 0x81, - 0x68, 0xb8, 0x68, 0x3b, 0x1a, 0xc0, 0x1c, 0x46, - 0x68, 0xf8, 0x68, 0x7b, 0x1a, 0xc0, 0x30, 0x01, - 0x90, 0x00, 0x00, 0x90, 0x4b, 0x15, 0x58, 0x1c, - 0x98, 0x00, 0x43, 0x46, 0x1c, 0x35, 0x07, 0xa0, - 0x0f, 0x80, 0x1c, 0x29, 0x40, 0x81, 0x2a, 0x0b, - 0xdb, 0x01, 0x2a, 0x12, 0xdd, 0x01, 0x2a, 0x13, - 0xd1, 0x01, 0x21, 0x00, 0xe0, 0x0a, 0x2a, 0x09, - 0xd0, 0x01, 0x2a, 0x0a, 0xd1, 0x03, 0x00, 0x69, - 0x19, 0x49, 0x00, 0xc9, 0xe0, 0x02, 0x2a, 0x08, - 0xd1, 0x00, 0x01, 0x29, 0x20, 0x04, 0x40, 0x20, - 0xd0, 0x00, 0x08, 0x49, 0x09, 0x4c, 0x06, 0xc8, - 0x0e, 0xc0, 0xd0, 0x00, 0x34, 0x01, 0x1c, 0x20, - 0xb0, 0x01, 0xbc, 0xf0, 0x47, 0x70, 0xb0, 0x01, - 0xe7, 0xfb, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0x78, - 0xb4, 0x80, 0x23, 0x00, 0x22, 0x01, 0x21, 0x00, - 0x29, 0x08, 0xdb, 0x02, 0xe0, 0x09, 0x31, 0x01, - 0xe7, 0xfa, 0x00, 0x88, 0x4f, 0x05, 0x58, 0x38, - 0x28, 0x00, 0xd0, 0x00, 0x43, 0x13, 0x00, 0x52, - 0xe7, 0xf5, 0x1c, 0x18, 0xbc, 0x80, 0x47, 0x70, - 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xc4, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x81, 0x20, 0x39, - 0x06, 0x40, 0x69, 0xc0, 0x23, 0x18, 0x40, 0x18, - 0x90, 0x00, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x03, - 0x48, 0x32, 0x49, 0x33, 0x60, 0x08, 0xe0, 0x03, - 0x20, 0xff, 0x30, 0xe0, 0x49, 0x30, 0x60, 0x08, - 0x24, 0x00, 0x99, 0x01, 0x48, 0x2f, 0xf7, 0xfc, - 0xfa, 0x1f, 0x48, 0x2e, 0x68, 0x00, 0x28, 0x00, - 0xda, 0x03, 0x20, 0x00, 0x49, 0x2b, 0x60, 0x08, - 0x24, 0x80, 0x48, 0x2a, 0x68, 0x40, 0x28, 0x00, - 0xda, 0x03, 0x20, 0x00, 0x49, 0x27, 0x60, 0x48, - 0x24, 0x80, 0x48, 0x26, 0x68, 0x80, 0x4b, 0x26, - 0x42, 0x98, 0xdd, 0x03, 0x48, 0x24, 0x49, 0x23, - 0x60, 0x88, 0x24, 0x80, 0x48, 0x21, 0x68, 0xc0, - 0x49, 0x1f, 0x68, 0x09, 0x42, 0x88, 0xd9, 0x04, - 0x48, 0x1d, 0x68, 0x00, 0x49, 0x1d, 0x60, 0xc8, - 0x24, 0x80, 0x48, 0x1e, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x27, 0x2f, 0x01, 0xd1, 0x25, 0x48, 0x19, - 0x68, 0x06, 0x48, 0x18, 0x68, 0x45, 0x23, 0xff, - 0x33, 0x68, 0x42, 0x9e, 0xdd, 0x01, 0x26, 0xff, - 0x36, 0x68, 0x48, 0x13, 0x68, 0x00, 0x08, 0x40, - 0x42, 0xa8, 0xd2, 0x02, 0x48, 0x10, 0x68, 0x00, - 0x08, 0x45, 0x48, 0x13, 0x49, 0x13, 0x65, 0x48, - 0x48, 0x13, 0x43, 0x70, 0x23, 0x01, 0x04, 0x1b, - 0x18, 0xc0, 0x14, 0x40, 0x49, 0x0f, 0x65, 0x88, - 0x20, 0x00, 0x49, 0x0e, 0x65, 0xc8, 0x48, 0x0d, - 0x66, 0x05, 0x1c, 0x38, 0x21, 0x00, 0xf7, 0xfe, - 0xff, 0x13, 0x1c, 0x20, 0xb0, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, - 0xe7, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3f, - 0x2e, 0x08, 0x9d, 0xec, 0x2e, 0x08, 0xbb, 0x0c, - 0x00, 0x00, 0x02, 0xcf, 0x2e, 0x08, 0xba, 0x28, - 0x00, 0x00, 0x07, 0xfa, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x0b, 0x60, 0xb6, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0xb0, 0x81, 0x1c, 0x26, 0x69, 0x30, - 0x90, 0x00, 0x98, 0x00, 0x28, 0x13, 0xd1, 0x04, - 0x20, 0x75, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xf5, 0x68, 0x38, 0x08, 0x40, - 0x00, 0x40, 0x60, 0x38, 0x68, 0x78, 0x08, 0x40, - 0x00, 0x40, 0x60, 0x78, 0x68, 0xb8, 0x07, 0xc0, - 0x0f, 0xc0, 0xd1, 0x02, 0x68, 0xb8, 0x38, 0x01, - 0x60, 0xb8, 0x68, 0xf8, 0x07, 0xc0, 0x0f, 0xc0, - 0xd1, 0x02, 0x68, 0xf8, 0x38, 0x01, 0x60, 0xf8, - 0x1d, 0xf0, 0x30, 0x49, 0x1c, 0x39, 0xf7, 0xfc, - 0xf9, 0x8b, 0x48, 0x1c, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x01, - 0xe7, 0xcc, 0x49, 0x13, 0x20, 0x91, 0xf0, 0x14, - 0xff, 0x47, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x05, 0xfa, 0xf4, 0xe7, 0xf5, 0x00, 0xa8, - 0x49, 0x0e, 0x58, 0x08, 0x42, 0xa0, 0xd0, 0x05, - 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, 0x20, 0xff, - 0xb0, 0x01, 0xe7, 0xb7, 0x48, 0x0a, 0x68, 0x00, - 0x42, 0xa0, 0xd1, 0x03, 0x1c, 0x39, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x10, 0x20, 0x92, 0x49, 0x04, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xa9, - 0xb0, 0x01, 0xe7, 0xa7, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x2e, 0x08, 0xba, 0x28, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x9b, 0x20, 0x39, 0x06, 0x40, 0x69, 0xc0, - 0x23, 0x18, 0x40, 0x18, 0x90, 0x01, 0x98, 0x01, - 0x28, 0x00, 0xd0, 0x03, 0x48, 0xf8, 0x49, 0xf9, - 0x60, 0x08, 0xe0, 0x03, 0x20, 0xff, 0x30, 0xe0, - 0x49, 0xf6, 0x60, 0x08, 0x20, 0xff, 0x30, 0x01, - 0x90, 0x06, 0x98, 0x1b, 0x90, 0x1a, 0x98, 0x1a, - 0x69, 0x05, 0x98, 0x1a, 0x68, 0xc0, 0x90, 0x19, - 0x48, 0xf1, 0x68, 0x00, 0x99, 0x1b, 0x42, 0x88, - 0xd1, 0x73, 0x20, 0x02, 0x90, 0x08, 0x2d, 0x0c, - 0xd0, 0x01, 0x2d, 0x0f, 0xd1, 0x02, 0x20, 0x04, - 0x90, 0x08, 0xe0, 0x0c, 0x2d, 0x0d, 0xd0, 0x01, - 0x2d, 0x10, 0xd1, 0x02, 0x20, 0x08, 0x90, 0x08, - 0xe0, 0x05, 0x2d, 0x0e, 0xd0, 0x01, 0x2d, 0x11, - 0xd1, 0x01, 0x20, 0x01, 0x90, 0x08, 0x68, 0xf8, - 0x68, 0x79, 0x1a, 0x40, 0x1c, 0x44, 0x2d, 0x0b, - 0xd0, 0x05, 0x2d, 0x0f, 0xd0, 0x03, 0x2d, 0x10, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x11, 0x48, 0xdf, - 0x6c, 0x40, 0x1c, 0x06, 0x48, 0xdd, 0x6c, 0x81, - 0x91, 0x07, 0x2e, 0x00, 0xd0, 0x02, 0x99, 0x07, - 0x29, 0x00, 0xd1, 0x05, 0x26, 0x2d, 0x01, 0x36, - 0x48, 0xd6, 0x68, 0x00, 0x1c, 0x41, 0x91, 0x07, - 0xe0, 0x05, 0x26, 0x2d, 0x01, 0x36, 0x48, 0xd3, - 0x68, 0x00, 0x1c, 0x41, 0x91, 0x07, 0x49, 0xd4, - 0xa8, 0x15, 0xf7, 0xfc, 0xf8, 0xe9, 0x98, 0x17, - 0x1e, 0x71, 0x42, 0x88, 0xdd, 0x01, 0x1e, 0x70, - 0x90, 0x17, 0x98, 0x18, 0x99, 0x07, 0x39, 0x01, - 0x42, 0x88, 0xdd, 0x02, 0x99, 0x07, 0x1e, 0x48, - 0x90, 0x18, 0x98, 0x18, 0x99, 0x16, 0x1a, 0x40, - 0x00, 0x40, 0x1c, 0x81, 0x98, 0x08, 0xf0, 0x06, - 0xfb, 0xd3, 0x90, 0x0a, 0x98, 0x0a, 0x42, 0x84, - 0xdd, 0x00, 0x9c, 0x0a, 0x48, 0xc5, 0x6f, 0x00, - 0x90, 0x02, 0x20, 0x00, 0x90, 0x05, 0x98, 0x02, - 0x28, 0x02, 0xd0, 0x02, 0x98, 0x02, 0x28, 0x03, - 0xd1, 0x3a, 0x48, 0xc1, 0x6b, 0x00, 0x90, 0x04, - 0x48, 0xbe, 0x6e, 0xc1, 0x91, 0x03, 0x98, 0x04, - 0x99, 0x03, 0x42, 0x88, 0xdd, 0x21, 0x20, 0xc0, - 0x90, 0x06, 0x1d, 0x20, 0x28, 0x00, 0xda, 0x02, - 0xe0, 0x00, 0xe1, 0x8e, 0x30, 0x07, 0x10, 0xc0, - 0x90, 0x05, 0x98, 0x04, 0x28, 0x03, 0xd0, 0x14, - 0x99, 0x03, 0x29, 0x03, 0xd1, 0x07, 0x20, 0xcd, - 0x90, 0x06, 0x1d, 0x61, 0x20, 0x0a, 0xf0, 0x06, - 0xfb, 0xa3, 0x90, 0x05, 0xe0, 0x09, 0x98, 0x02, - 0x28, 0x02, 0xd1, 0x06, 0x20, 0x9a, 0x90, 0x06, - 0x1c, 0xa1, 0x20, 0x05, 0xf0, 0x06, 0xfb, 0x98, - 0x90, 0x05, 0x98, 0x06, 0x28, 0x9a, 0xd0, 0x02, - 0x98, 0x06, 0x28, 0xcd, 0xd1, 0x08, 0x2d, 0x0e, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x04, 0x20, 0x00, - 0x90, 0x05, 0x20, 0xff, 0x30, 0x01, 0x90, 0x06, - 0x2d, 0x12, 0xd1, 0x0b, 0x48, 0x9d, 0x68, 0x00, - 0x30, 0x01, 0x42, 0xa0, 0xd1, 0x06, 0x68, 0x78, - 0x28, 0x00, 0xd1, 0x03, 0x20, 0x01, 0x49, 0x9f, - 0x63, 0x48, 0xe0, 0x02, 0x20, 0x00, 0x49, 0x9d, - 0x63, 0x48, 0x98, 0x0a, 0x99, 0x06, 0x43, 0x48, - 0x28, 0x00, 0xda, 0x00, 0x30, 0xff, 0x12, 0x00, - 0x42, 0xa0, 0xdd, 0x04, 0x20, 0x00, 0x90, 0x05, - 0x20, 0xff, 0x30, 0x01, 0x90, 0x06, 0x68, 0x78, - 0x99, 0x05, 0x18, 0x40, 0x60, 0x78, 0x1c, 0x39, - 0xa8, 0x11, 0xf7, 0xfc, 0xf8, 0x61, 0x1c, 0x29, - 0xa8, 0x11, 0xf7, 0xff, 0xfd, 0x71, 0x98, 0x12, - 0x49, 0x88, 0x68, 0x09, 0x39, 0x01, 0x42, 0x88, - 0xd1, 0x00, 0x24, 0x00, 0x99, 0x15, 0x91, 0x0d, - 0x98, 0x16, 0x90, 0x0f, 0x21, 0x00, 0x91, 0x10, - 0x68, 0x38, 0x28, 0x00, 0xda, 0x08, 0x68, 0x38, - 0x99, 0x08, 0x43, 0x48, 0x42, 0x41, 0x29, 0x00, - 0xda, 0x00, 0x31, 0x01, 0x10, 0x49, 0x91, 0x10, - 0x68, 0x78, 0x28, 0x00, 0xda, 0x0d, 0x68, 0x78, - 0x99, 0x08, 0x43, 0x48, 0x28, 0x00, 0xda, 0x00, - 0x30, 0x01, 0x10, 0x40, 0x02, 0x01, 0x98, 0x06, - 0xf0, 0x06, 0xfb, 0x36, 0x99, 0x0f, 0x1a, 0x08, - 0x90, 0x0f, 0x98, 0x18, 0x99, 0x0f, 0x42, 0x88, - 0xdc, 0x02, 0x98, 0x18, 0x30, 0x01, 0x90, 0x0f, - 0x98, 0x17, 0x99, 0x0d, 0x1a, 0x40, 0x30, 0x01, - 0x90, 0x0e, 0x98, 0x18, 0x99, 0x0f, 0x1a, 0x40, - 0x30, 0x01, 0x90, 0x09, 0x98, 0x09, 0x00, 0x41, - 0x98, 0x08, 0xf0, 0x06, 0xfb, 0x1d, 0x99, 0x06, - 0x43, 0x48, 0x28, 0x00, 0xda, 0x00, 0x30, 0xff, - 0x12, 0x00, 0x90, 0x09, 0x68, 0xb8, 0x68, 0x39, - 0x1a, 0x40, 0x1c, 0x41, 0x91, 0x0c, 0x98, 0x17, - 0x99, 0x15, 0x1a, 0x40, 0x00, 0x40, 0x1c, 0x81, - 0x98, 0x08, 0xf0, 0x06, 0xfb, 0x09, 0x90, 0x0b, - 0x98, 0x0b, 0x4b, 0x65, 0x40, 0x18, 0x90, 0x0b, - 0x98, 0x0b, 0x99, 0x08, 0x43, 0x48, 0x28, 0x00, - 0xda, 0x00, 0x30, 0x01, 0x10, 0x40, 0x90, 0x0e, - 0x99, 0x0c, 0x98, 0x0b, 0x42, 0x81, 0xdd, 0x01, - 0x98, 0x0b, 0x90, 0x0c, 0x99, 0x0c, 0x4b, 0x5c, - 0x40, 0x19, 0x91, 0x0c, 0x98, 0x0c, 0x28, 0x00, - 0xdd, 0x05, 0x68, 0x38, 0x99, 0x0c, 0x18, 0x40, - 0x38, 0x01, 0x90, 0x13, 0xe0, 0x02, 0x68, 0x38, - 0x30, 0x01, 0x90, 0x13, 0x98, 0x13, 0x28, 0x01, - 0xda, 0x01, 0x20, 0x01, 0x90, 0x13, 0x98, 0x13, - 0x4b, 0x52, 0x42, 0x98, 0xdd, 0x01, 0x48, 0x51, - 0x90, 0x13, 0x99, 0x06, 0x43, 0x4c, 0x1c, 0x20, - 0x28, 0x00, 0xda, 0x00, 0x30, 0xff, 0x12, 0x04, - 0x98, 0x0a, 0x42, 0x84, 0xdd, 0x00, 0x9c, 0x0a, - 0x2c, 0x02, 0xda, 0x00, 0x24, 0x02, 0x68, 0x78, - 0x19, 0x00, 0x38, 0x01, 0x90, 0x14, 0x98, 0x14, - 0x28, 0x01, 0xda, 0x01, 0x20, 0x01, 0x90, 0x14, - 0x98, 0x14, 0x49, 0x3c, 0x68, 0x09, 0x42, 0x88, - 0xd9, 0x02, 0x48, 0x3a, 0x68, 0x00, 0x90, 0x14, - 0x98, 0x12, 0x49, 0x38, 0x68, 0x09, 0x39, 0x01, - 0x42, 0x88, 0xd9, 0x03, 0x48, 0x35, 0x68, 0x00, - 0x38, 0x01, 0x90, 0x12, 0x98, 0x09, 0x28, 0x04, - 0xdb, 0x01, 0x2c, 0x04, 0xda, 0x01, 0x20, 0x00, - 0x90, 0x0e, 0x98, 0x0e, 0x28, 0x03, 0xdb, 0x02, - 0x98, 0x0c, 0x28, 0x04, 0xda, 0x09, 0x20, 0x00, - 0x90, 0x0e, 0x48, 0x35, 0x90, 0x11, 0x48, 0x33, - 0x90, 0x13, 0x20, 0x00, 0x90, 0x12, 0x20, 0x01, - 0x90, 0x14, 0x21, 0x00, 0x91, 0x00, 0x98, 0x08, - 0x28, 0x01, 0xd1, 0x16, 0x98, 0x0e, 0x99, 0x10, - 0x1a, 0x40, 0x00, 0x40, 0x4b, 0x2b, 0x42, 0x98, - 0xdd, 0x0b, 0x98, 0x0e, 0x99, 0x10, 0x1a, 0x40, - 0x00, 0x40, 0x23, 0x2d, 0x01, 0x1b, 0x1a, 0xc1, - 0x29, 0x00, 0xda, 0x00, 0x31, 0x01, 0x10, 0x49, - 0x91, 0x00, 0x98, 0x0e, 0x42, 0xb0, 0xdd, 0x00, - 0x96, 0x0e, 0x99, 0x10, 0x42, 0xb1, 0xdd, 0x00, - 0x96, 0x10, 0x1c, 0x30, 0x21, 0x01, 0x07, 0x49, - 0xf0, 0x06, 0xfa, 0x76, 0x99, 0x0d, 0x43, 0x48, - 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, - 0x49, 0x1c, 0x65, 0x88, 0x1c, 0x30, 0x21, 0x01, - 0x07, 0x49, 0xf0, 0x06, 0xfa, 0x69, 0x99, 0x10, - 0x43, 0x48, 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, - 0x14, 0x40, 0x49, 0x16, 0x65, 0xc8, 0x1c, 0x30, - 0x21, 0x01, 0x07, 0x49, 0xf0, 0x06, 0xfa, 0x5c, - 0x99, 0x0e, 0x43, 0x48, 0x23, 0x01, 0x04, 0x1b, - 0x18, 0xc0, 0x14, 0x40, 0x49, 0x0f, 0x65, 0x48, - 0x99, 0x07, 0x1f, 0x08, 0x99, 0x0f, 0x42, 0x88, - 0xdc, 0x1b, 0x99, 0x07, 0x1f, 0x08, 0xe0, 0x17, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x9d, 0xec, - 0x2e, 0x08, 0xba, 0x28, 0xcc, 0x00, 0x02, 0x00, - 0x2e, 0x08, 0xbb, 0x0c, 0xcc, 0x00, 0x0f, 0x80, - 0xcc, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x01, 0x00, - 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x02, 0xcf, - 0x00, 0x00, 0x02, 0xce, 0xcc, 0x00, 0x00, 0x00, - 0x90, 0x0f, 0x98, 0x0f, 0x49, 0x0d, 0x66, 0x08, - 0x1c, 0x30, 0x21, 0x01, 0x07, 0x49, 0xf0, 0x06, - 0xfa, 0x2b, 0x99, 0x00, 0x43, 0x48, 0x23, 0x01, - 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, 0x49, 0x07, - 0x66, 0x48, 0xa9, 0x11, 0x1c, 0x38, 0xf7, 0xfb, - 0xff, 0x1f, 0x20, 0x00, 0xb0, 0x1b, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x1b, - 0xe7, 0xf9, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0xb4, 0xb0, 0x1c, 0x02, 0x1c, 0x0f, 0x2a, 0x00, - 0xd1, 0x02, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2f, 0x01, 0xd1, 0x20, 0x20, 0x00, 0x23, 0x00, - 0x4d, 0x13, 0x62, 0x2b, 0x23, 0x00, 0x4d, 0x12, - 0x62, 0xab, 0x4b, 0x12, 0x68, 0x9b, 0x1c, 0x1c, - 0x4b, 0x11, 0x6e, 0xdb, 0x1c, 0x19, 0x2c, 0x02, - 0xd0, 0x01, 0x29, 0x02, 0xd1, 0x01, 0x20, 0x08, - 0xe0, 0x00, 0x20, 0x07, 0x79, 0x13, 0x2b, 0x00, - 0xd0, 0x01, 0x23, 0x10, 0x43, 0x18, 0x4b, 0x08, - 0x62, 0x58, 0x79, 0x55, 0x23, 0x80, 0x43, 0x2b, - 0x4d, 0x05, 0x62, 0xab, 0xe0, 0x05, 0x48, 0x07, - 0x68, 0x05, 0x23, 0x80, 0x43, 0x9d, 0x1c, 0x2b, - 0x60, 0x03, 0x20, 0x00, 0xe7, 0xd2, 0xe7, 0xd1, - 0x72, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x0c, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0x72, 0x00, 0x01, 0x28, - 0xb5, 0xff, 0x9f, 0x09, 0xb0, 0x81, 0x98, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, 0x99, 0x02, - 0x06, 0x0c, 0x0e, 0x24, 0x98, 0x03, 0x06, 0x02, - 0x0e, 0x12, 0x9b, 0x04, 0x06, 0x1d, 0x0e, 0x2d, - 0x2f, 0x01, 0xd1, 0x1b, 0x20, 0x00, 0x4b, 0x14, - 0x62, 0x18, 0x20, 0x00, 0x4b, 0x12, 0x62, 0x98, - 0x98, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x01, 0x23, - 0x43, 0x18, 0x06, 0x01, 0x0e, 0x09, 0x48, 0x0e, - 0x62, 0x41, 0x07, 0x50, 0x0f, 0x40, 0x07, 0x6b, - 0x0f, 0x5b, 0x00, 0xdb, 0x43, 0x18, 0x06, 0x01, - 0x0e, 0x09, 0x20, 0x80, 0x43, 0x08, 0x4b, 0x08, - 0x62, 0x98, 0xe0, 0x05, 0x48, 0x07, 0x68, 0x06, - 0x23, 0x80, 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x03, - 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, - 0x72, 0x00, 0x01, 0x00, 0x72, 0x00, 0x01, 0x28, - 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x07, 0x0e, 0x3f, - 0xb0, 0x81, 0x2f, 0x1f, 0xdb, 0x05, 0x20, 0xb3, - 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x62, 0x23, 0x80, 0x68, 0x1b, - 0x60, 0x18, 0x48, 0x61, 0x23, 0x80, 0x6b, 0x1b, - 0x60, 0x18, 0x48, 0x60, 0x23, 0x80, 0x6b, 0x5b, - 0x60, 0x18, 0x48, 0x5f, 0x23, 0x80, 0x6b, 0x9b, - 0x60, 0x18, 0x20, 0x01, 0x40, 0xb8, 0x4b, 0x59, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x57, 0x71, 0x18, - 0x20, 0x00, 0x4b, 0x56, 0x71, 0x58, 0x48, 0x55, - 0x68, 0x00, 0x4b, 0x58, 0x60, 0x58, 0x48, 0x58, - 0x4b, 0x56, 0x60, 0x98, 0x48, 0x57, 0x4b, 0x55, - 0x60, 0xd8, 0x20, 0xff, 0x30, 0x01, 0x4b, 0x53, - 0x62, 0x18, 0x20, 0xff, 0x30, 0x01, 0x4b, 0x51, - 0x62, 0x58, 0x20, 0x03, 0x4b, 0x52, 0x75, 0x18, - 0x20, 0x0e, 0x4b, 0x51, 0x75, 0x58, 0x20, 0x04, - 0x4b, 0x4f, 0x75, 0x98, 0x20, 0x03, 0x4b, 0x4e, - 0x75, 0xd8, 0x20, 0x00, 0x4b, 0x4d, 0x60, 0x18, - 0x20, 0x00, 0x4b, 0x4d, 0x60, 0x18, 0x20, 0x0d, - 0x23, 0x19, 0x06, 0x9b, 0x63, 0x18, 0x22, 0x00, - 0x2a, 0x20, 0xdb, 0x04, 0xe0, 0x21, 0x1c, 0x50, - 0x06, 0x02, 0x0e, 0x12, 0xe7, 0xf8, 0x25, 0x00, - 0x00, 0x93, 0x4e, 0x46, 0x50, 0xf5, 0x25, 0xff, - 0x4b, 0x45, 0x54, 0x9d, 0x01, 0x15, 0x4b, 0x45, - 0x18, 0xec, 0x01, 0x15, 0x4b, 0x44, 0x18, 0xe8, - 0x25, 0x00, 0xc4, 0x20, 0x25, 0x00, 0xc4, 0x20, - 0x25, 0x00, 0xc4, 0x20, 0x25, 0x00, 0xc4, 0x20, - 0x25, 0x00, 0xc0, 0x20, 0x25, 0x00, 0xc0, 0x20, - 0x25, 0x00, 0xc0, 0x20, 0x25, 0x00, 0xc0, 0x20, - 0xe7, 0xdd, 0x21, 0x00, 0x29, 0x20, 0xdb, 0x04, - 0xe0, 0x0b, 0x1c, 0x48, 0x04, 0x01, 0x0c, 0x09, - 0xe7, 0xf8, 0x23, 0x00, 0x00, 0x88, 0x4c, 0x2a, - 0x50, 0x23, 0x23, 0x00, 0x48, 0x35, 0x54, 0x43, - 0xe7, 0xf3, 0x4c, 0x35, 0x94, 0x00, 0x22, 0x00, - 0x2a, 0x10, 0xdb, 0x04, 0xe0, 0x0f, 0x1c, 0x50, - 0x06, 0x02, 0x0e, 0x12, 0xe7, 0xf8, 0x20, 0x00, - 0x00, 0x93, 0x4c, 0x30, 0x50, 0xe0, 0x23, 0xff, - 0x48, 0x2f, 0x54, 0x83, 0x20, 0x00, 0x00, 0x93, - 0x9c, 0x00, 0x50, 0xe0, 0xe7, 0xef, 0x21, 0x00, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, 0xdb, 0x04, - 0xe0, 0x2a, 0x1c, 0x48, 0x04, 0x01, 0x0c, 0x09, - 0xe7, 0xf6, 0x23, 0x00, 0x00, 0x88, 0x4c, 0x1a, - 0x50, 0x23, 0x20, 0x00, 0x00, 0x8b, 0x4c, 0x18, - 0x19, 0x1c, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xe3, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x14, 0x18, 0x5c, - 0x23, 0x01, 0x02, 0xdb, 0x18, 0xe3, 0x70, 0x18, - 0x20, 0x00, 0x00, 0x8b, 0x4c, 0x11, 0x50, 0xe0, - 0x20, 0x00, 0x00, 0x8b, 0x4c, 0x0f, 0x19, 0x1c, - 0x23, 0x01, 0x02, 0x9b, 0x18, 0xe3, 0x60, 0x18, - 0x20, 0x00, 0x4b, 0x0c, 0x18, 0x5c, 0x23, 0x01, - 0x02, 0xdb, 0x18, 0xe3, 0x70, 0x18, 0xe7, 0xd4, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0x39, 0xb0, 0x01, - 0xe7, 0x37, 0x00, 0x00, 0x2e, 0x08, 0xb0, 0x58, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0xaf, 0xfc, - 0x2e, 0x08, 0xb0, 0x08, 0x9e, 0x00, 0x04, 0x80, - 0x2e, 0x08, 0x9d, 0xfc, 0x2e, 0x08, 0xa6, 0xfc, - 0x9e, 0x00, 0x04, 0xa0, 0x2e, 0x08, 0x9c, 0x48, - 0x2e, 0x08, 0x9c, 0x4c, 0x2e, 0x08, 0x9c, 0x50, - 0x2e, 0x08, 0x9d, 0x10, 0x64, 0x00, 0x08, 0x00, - 0x64, 0x00, 0x10, 0x00, 0x2e, 0x08, 0xb9, 0x60, - 0x9e, 0x00, 0x04, 0xb8, 0x2e, 0x08, 0x9c, 0xd0, - 0x2e, 0x08, 0x9d, 0x30, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x11, 0x0e, 0x09, 0x29, 0x20, - 0xdb, 0x02, 0x20, 0xa2, 0xbc, 0xb0, 0x47, 0x70, - 0x00, 0x88, 0x4b, 0x0a, 0x58, 0x18, 0x1c, 0x05, - 0xd1, 0x01, 0x20, 0xb0, 0xe7, 0xf6, 0x68, 0xe8, - 0x1c, 0x04, 0xd1, 0x01, 0x20, 0xb6, 0xe7, 0xf1, - 0x68, 0x60, 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, - 0x08, 0x80, 0x60, 0x38, 0x20, 0x00, 0xe7, 0xe9, - 0xe7, 0xe8, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc8, - 0xb5, 0xff, 0xb0, 0x82, 0x9a, 0x04, 0x06, 0x11, - 0x0e, 0x09, 0x91, 0x00, 0x9b, 0x05, 0x06, 0x18, - 0x0e, 0x00, 0x90, 0x01, 0xb0, 0x83, 0x99, 0x03, - 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x05, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x05, 0x28, 0x00, 0xd0, 0x64, 0x98, 0x05, - 0x23, 0x0d, 0x06, 0x9b, 0x42, 0xd8, 0xd3, 0x02, - 0x20, 0xb4, 0xb0, 0x05, 0xe7, 0xf0, 0x99, 0x06, - 0x23, 0xff, 0x33, 0x81, 0x42, 0x99, 0xd2, 0x02, - 0x20, 0xb5, 0xb0, 0x05, 0xe7, 0xe8, 0x99, 0x03, - 0x00, 0x88, 0x49, 0x2c, 0x58, 0x08, 0x90, 0x02, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x05, - 0xe7, 0xde, 0x99, 0x06, 0x00, 0x88, 0x1f, 0xc1, - 0x39, 0x05, 0x91, 0x00, 0x9e, 0x05, 0x98, 0x05, - 0x1d, 0xc5, 0x35, 0x05, 0x60, 0x35, 0x99, 0x06, - 0x60, 0x71, 0x20, 0x00, 0x60, 0xb0, 0x98, 0x04, - 0x28, 0x10, 0xd1, 0x0a, 0x98, 0x02, 0x68, 0x84, - 0x98, 0x02, 0x30, 0x18, 0x90, 0x01, 0x1c, 0x2a, - 0x99, 0x00, 0x98, 0x01, 0xf0, 0x00, 0xfc, 0x86, - 0xe0, 0x25, 0x98, 0x04, 0x28, 0x20, 0xd1, 0x1f, - 0x98, 0x02, 0x68, 0xc0, 0x1c, 0x07, 0xd1, 0x02, - 0x20, 0xb6, 0xb0, 0x05, 0xe7, 0xb8, 0x78, 0xb8, - 0x08, 0x40, 0x00, 0x40, 0x70, 0xb8, 0x69, 0x3c, - 0x1d, 0xf8, 0x30, 0x05, 0x90, 0x01, 0x68, 0xb8, - 0x28, 0x00, 0xd1, 0x00, 0x60, 0xbd, 0x1c, 0x2a, - 0x99, 0x00, 0x98, 0x01, 0xf0, 0x00, 0xfc, 0x6a, - 0x68, 0x79, 0x18, 0x40, 0x60, 0x78, 0x78, 0x78, - 0x99, 0x03, 0xf0, 0x00, 0xf8, 0xb9, 0xe0, 0x02, - 0x20, 0xbc, 0xb0, 0x05, 0xe7, 0x9c, 0x68, 0xa0, - 0x28, 0x00, 0xd0, 0x01, 0x68, 0xa4, 0xe7, 0xfa, - 0x60, 0xa6, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x93, - 0x20, 0xb4, 0xb0, 0x05, 0xe7, 0x90, 0xb0, 0x03, - 0xb0, 0x02, 0xe7, 0x8d, 0x2e, 0x08, 0x9b, 0xc8, - 0xb5, 0xff, 0xb0, 0x81, 0x9a, 0x03, 0x06, 0x16, - 0x0e, 0x36, 0x9b, 0x04, 0x06, 0x18, 0x0e, 0x00, - 0x90, 0x00, 0xb0, 0x83, 0x27, 0x00, 0x2e, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x04, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb0, - 0x49, 0x45, 0x58, 0x08, 0x1c, 0x04, 0xd1, 0x02, - 0x20, 0xb0, 0xb0, 0x04, 0xe7, 0xf3, 0x78, 0xe0, - 0x28, 0x00, 0xd1, 0x73, 0x98, 0x03, 0x28, 0x20, - 0xd1, 0x19, 0x68, 0xe0, 0x1c, 0x07, 0xd1, 0x02, - 0x20, 0xb6, 0xb0, 0x04, 0xe7, 0xe7, 0x69, 0x38, - 0x49, 0x3c, 0x60, 0x48, 0x48, 0x3b, 0x68, 0x40, - 0x68, 0x00, 0x60, 0xb8, 0x1d, 0xf8, 0x30, 0x05, - 0x90, 0x02, 0x20, 0x01, 0x90, 0x00, 0x48, 0x37, - 0x68, 0x40, 0x68, 0x40, 0x00, 0x80, 0x1f, 0xc1, - 0x39, 0x19, 0x91, 0x01, 0xe0, 0x1d, 0x98, 0x03, - 0x28, 0x10, 0xd1, 0x17, 0x68, 0xa0, 0x49, 0x31, - 0x60, 0x48, 0x48, 0x30, 0x68, 0x40, 0x68, 0x00, - 0x61, 0x20, 0x48, 0x2e, 0x68, 0x40, 0x68, 0x00, - 0x61, 0x60, 0x1d, 0xe0, 0x30, 0x11, 0x90, 0x02, - 0x48, 0x2a, 0x68, 0x40, 0x68, 0x40, 0x00, 0x80, - 0x1f, 0xc1, 0x39, 0x21, 0x91, 0x01, 0x20, 0x00, - 0x90, 0x00, 0xe0, 0x02, 0x20, 0xbc, 0xb0, 0x04, - 0xe7, 0xb5, 0x48, 0x24, 0x68, 0x40, 0x68, 0x80, - 0x28, 0x00, 0xd0, 0x37, 0x25, 0x00, 0x48, 0x21, - 0x68, 0x40, 0x68, 0x02, 0x99, 0x01, 0x98, 0x02, - 0xf0, 0x00, 0xfb, 0xe8, 0x19, 0x45, 0x48, 0x1d, - 0x68, 0x40, 0x49, 0x1c, 0x60, 0x08, 0x48, 0x1b, - 0x68, 0x00, 0x68, 0x80, 0x49, 0x19, 0x60, 0x48, - 0x48, 0x18, 0x68, 0x40, 0x68, 0x40, 0x00, 0x80, - 0x1f, 0xc1, 0x39, 0x05, 0x91, 0x01, 0x48, 0x15, - 0x68, 0x40, 0x68, 0x80, 0x28, 0x00, 0xd1, 0xe2, - 0x20, 0x00, 0x49, 0x12, 0x68, 0x09, 0x60, 0x88, - 0x48, 0x10, 0x68, 0x40, 0x99, 0x04, 0x60, 0x08, - 0x48, 0x0e, 0x68, 0x40, 0x68, 0x40, 0x99, 0x05, - 0x60, 0x08, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x06, - 0x60, 0x7d, 0x78, 0x78, 0x1c, 0x31, 0xf0, 0x00, - 0xf8, 0x13, 0xe0, 0x00, 0xe0, 0x05, 0x20, 0x00, - 0xb0, 0x04, 0xe7, 0x78, 0x20, 0xb4, 0xb0, 0x04, - 0xe7, 0x75, 0x20, 0xbc, 0xb0, 0x04, 0xe7, 0x72, - 0xb0, 0x03, 0xb0, 0x01, 0xe7, 0x6f, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9d, 0xf4, - 0xb5, 0xf3, 0x98, 0x00, 0x06, 0x02, 0x0e, 0x12, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0xb0, 0x81, - 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x01, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xa0, 0x4b, 0x14, 0x58, 0x18, 0x1c, 0x05, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x01, 0xe7, 0xf3, - 0x68, 0xe8, 0x1c, 0x01, 0xd1, 0x02, 0x20, 0xb6, - 0xb0, 0x01, 0xe7, 0xed, 0x11, 0x10, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x28, 0x00, 0xd1, 0x04, - 0x68, 0x48, 0x40, 0xd0, 0x06, 0x07, 0x0e, 0x3f, - 0xe0, 0x09, 0x68, 0x48, 0x07, 0x16, 0x0f, 0x36, - 0x40, 0xf0, 0x68, 0x4e, 0x40, 0xd6, 0x1c, 0x33, - 0x18, 0xc0, 0x06, 0x07, 0x0e, 0x3f, 0x70, 0x0f, - 0x70, 0x4a, 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xd3, - 0xb0, 0x01, 0xe7, 0xd1, 0x2e, 0x08, 0x9b, 0xc8, - 0xb4, 0xb0, 0x1c, 0x03, 0x1c, 0x0a, 0x06, 0x11, - 0x0e, 0x09, 0x29, 0x20, 0xdb, 0x02, 0x20, 0xa2, - 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x88, 0x4d, 0x08, - 0x58, 0x28, 0x1c, 0x04, 0xd1, 0x01, 0x20, 0xb0, - 0xe7, 0xf6, 0x68, 0xe0, 0x1c, 0x07, 0xd1, 0x01, - 0x20, 0xb6, 0xe7, 0xf1, 0x78, 0x78, 0x70, 0x18, - 0x20, 0x00, 0xe7, 0xed, 0xe7, 0xec, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0xf3, 0xb0, 0x81, - 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, - 0x99, 0x02, 0x06, 0x0d, 0x0e, 0x2d, 0xb0, 0x86, - 0x20, 0x00, 0x90, 0x00, 0x2d, 0x20, 0xdd, 0x05, - 0x20, 0xa2, 0xb0, 0x07, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0xa8, 0x49, 0xa2, - 0x58, 0x08, 0x90, 0x04, 0x28, 0x00, 0xd1, 0x02, - 0x20, 0xb0, 0xb0, 0x07, 0xe7, 0xf2, 0x00, 0xa8, - 0x49, 0x9e, 0x68, 0x09, 0x18, 0x40, 0x90, 0x05, - 0x00, 0xe8, 0x1b, 0x40, 0x00, 0x80, 0x49, 0x9c, - 0x68, 0x09, 0x18, 0x46, 0x98, 0x06, 0x28, 0x00, - 0xd0, 0x73, 0x28, 0x01, 0xd0, 0x4f, 0x28, 0x02, - 0xd0, 0x00, 0xe1, 0x1d, 0x98, 0x04, 0x69, 0x00, - 0x60, 0x70, 0x98, 0x04, 0x78, 0x40, 0x06, 0xc0, - 0x0e, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x28, 0x13, - 0xd0, 0x16, 0x27, 0x00, 0x2f, 0x20, 0xdb, 0x04, - 0xe0, 0x11, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0xe7, 0xf8, 0x48, 0x8e, 0x5d, 0xc0, 0x42, 0xa8, - 0xd1, 0x08, 0x00, 0xb8, 0x49, 0x8c, 0x58, 0x08, - 0x30, 0x01, 0x78, 0x01, 0x23, 0x80, 0x43, 0xdb, - 0x40, 0x19, 0x70, 0x01, 0xe7, 0xed, 0xe0, 0x1e, - 0x27, 0x00, 0x2f, 0x10, 0xdb, 0x04, 0xe0, 0x1a, - 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, - 0x48, 0x84, 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x11, - 0x00, 0xb8, 0x49, 0x83, 0x58, 0x08, 0x30, 0x01, - 0x78, 0x01, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x19, - 0x70, 0x01, 0x98, 0x00, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x98, 0x00, 0x28, 0x02, - 0xd1, 0x00, 0xe0, 0x00, 0xe7, 0xe4, 0x88, 0x30, - 0x4b, 0x7a, 0x40, 0x18, 0x80, 0x30, 0x98, 0x05, - 0x68, 0x00, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x99, 0x05, 0x60, 0x08, 0xe0, 0xd3, 0x98, 0x05, - 0x68, 0x00, 0x4b, 0x75, 0x40, 0x18, 0x99, 0x05, - 0x60, 0x08, 0x20, 0x00, 0x60, 0xb0, 0x20, 0x00, - 0x70, 0xf0, 0x20, 0x00, 0x60, 0xf0, 0x98, 0x04, - 0x78, 0x40, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x28, 0x13, 0xd0, 0x16, 0x27, 0x00, - 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x11, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x63, - 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x08, 0x00, 0xb8, - 0xe0, 0x00, 0xe0, 0x27, 0x49, 0x60, 0x58, 0x0c, - 0x78, 0x60, 0x23, 0x80, 0x43, 0x18, 0x70, 0x60, - 0xe7, 0xed, 0xe0, 0x1e, 0x27, 0x00, 0x2f, 0x10, - 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x59, 0x5d, 0xc0, - 0x42, 0xa8, 0xd1, 0x11, 0x00, 0xb8, 0x49, 0x58, - 0x58, 0x08, 0x30, 0x01, 0x78, 0x01, 0x23, 0x80, - 0x43, 0xdb, 0x40, 0x19, 0x70, 0x01, 0x98, 0x00, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x02, 0xd1, 0x00, 0xe0, 0x00, - 0xe7, 0xe4, 0xe0, 0x88, 0x98, 0x05, 0x68, 0x00, - 0x4b, 0x4f, 0x40, 0x18, 0x99, 0x05, 0x60, 0x08, - 0x20, 0x00, 0x60, 0xb0, 0x20, 0x00, 0x70, 0xf0, - 0x20, 0x00, 0x60, 0xf0, 0x98, 0x04, 0x78, 0x40, - 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, 0x98, 0x04, - 0x78, 0x40, 0x21, 0x20, 0x40, 0x01, 0x91, 0x03, - 0x98, 0x02, 0x28, 0x13, 0xd0, 0x4c, 0x27, 0x00, - 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x47, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x3b, - 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x3e, 0x00, 0xb8, - 0x49, 0x39, 0x58, 0x0c, 0x20, 0x80, 0x70, 0x60, - 0x99, 0x03, 0x1c, 0x20, 0xf7, 0xfd, 0xfb, 0x30, - 0x78, 0xa0, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x28, - 0x6a, 0xe0, 0x22, 0x00, 0x92, 0x01, 0x99, 0x01, - 0x29, 0x08, 0xdb, 0x06, 0xe0, 0x1f, 0x99, 0x01, - 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x91, 0x01, - 0xe7, 0xf5, 0x99, 0x01, 0x00, 0x89, 0x18, 0x09, - 0x68, 0x49, 0x9a, 0x01, 0x00, 0x92, 0x18, 0x12, - 0x64, 0x51, 0x22, 0x00, 0x99, 0x01, 0x00, 0x89, - 0x18, 0x09, 0x62, 0x4a, 0x99, 0x01, 0x00, 0x89, - 0x18, 0x09, 0x6c, 0x49, 0x29, 0x00, 0xd0, 0x05, - 0x9a, 0x01, 0x21, 0x80, 0x41, 0x11, 0x88, 0x02, - 0x43, 0x11, 0x80, 0x01, 0xe7, 0xdf, 0x88, 0x01, - 0x80, 0x41, 0x78, 0xa0, 0x23, 0x20, 0x40, 0x18, - 0xd0, 0x04, 0x98, 0x04, 0x68, 0xc1, 0x1c, 0x20, - 0xf0, 0x00, 0xfa, 0x3d, 0xe7, 0xb7, 0xe0, 0x1e, - 0x27, 0x00, 0x2f, 0x10, 0xdb, 0x04, 0xe0, 0x1a, - 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, - 0x48, 0x16, 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x11, - 0x00, 0xb8, 0x49, 0x15, 0x58, 0x0c, 0x20, 0x80, - 0x70, 0x60, 0x99, 0x03, 0x1c, 0x20, 0xf7, 0xfd, - 0xfa, 0xe3, 0x98, 0x00, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x98, 0x00, 0x28, 0x02, - 0xd1, 0x00, 0xe0, 0x00, 0xe7, 0xe4, 0xe0, 0x02, - 0x20, 0xbc, 0xb0, 0x07, 0xe6, 0xbe, 0x98, 0x06, - 0x99, 0x04, 0x70, 0xc8, 0x20, 0x00, 0xb0, 0x07, - 0xe6, 0xb8, 0xb0, 0x06, 0xb0, 0x01, 0xe6, 0xb5, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0xff, 0xff, 0xfb, 0xff, - 0xff, 0xff, 0xdf, 0xff, 0xb4, 0x90, 0x1c, 0x03, - 0x1c, 0x0a, 0x06, 0x11, 0x0e, 0x09, 0x29, 0x20, - 0xdd, 0x02, 0x20, 0xa2, 0xbc, 0x90, 0x47, 0x70, - 0x00, 0x88, 0x4c, 0x05, 0x58, 0x20, 0x1c, 0x07, - 0xd1, 0x01, 0x20, 0xb0, 0xe7, 0xf6, 0x78, 0xf8, - 0x70, 0x18, 0x20, 0x00, 0xe7, 0xf2, 0xe7, 0xf1, - 0x2e, 0x08, 0x9b, 0xc8, 0xb4, 0x90, 0x1c, 0x02, - 0x1c, 0x0f, 0x06, 0x38, 0x16, 0x04, 0x2a, 0x02, - 0xda, 0x02, 0x20, 0x00, 0xbc, 0x90, 0x47, 0x70, - 0x2c, 0x01, 0xd1, 0x01, 0x21, 0x28, 0xe0, 0x09, - 0x2c, 0x02, 0xd1, 0x01, 0x21, 0x20, 0xe0, 0x05, - 0x2c, 0x00, 0xd1, 0x01, 0x21, 0x0c, 0xe0, 0x01, - 0x20, 0x00, 0xe7, 0xef, 0x00, 0x50, 0x18, 0x80, - 0x01, 0x80, 0x18, 0x41, 0x1c, 0xc8, 0x08, 0x81, - 0x1c, 0x08, 0xe7, 0xe7, 0xe7, 0xe6, 0xb5, 0xf7, - 0x1c, 0x07, 0xb0, 0x81, 0x9a, 0x03, 0x06, 0x11, - 0x0e, 0x09, 0x91, 0x00, 0xb0, 0x84, 0x99, 0x04, - 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x05, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x99, 0x04, 0x00, 0x88, 0x49, 0x29, 0x58, 0x08, - 0x1c, 0x06, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x05, - 0xe7, 0xf2, 0x2f, 0x00, 0xd1, 0x02, 0x20, 0xb4, - 0xb0, 0x05, 0xe7, 0xed, 0x4b, 0x24, 0x42, 0x9f, - 0xd1, 0x0a, 0x78, 0xf0, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0xbc, 0xb0, 0x05, 0xe7, 0xe4, 0x20, 0x00, - 0x60, 0xf0, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0xdf, - 0x68, 0xf0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0xb4, - 0xb0, 0x05, 0xe7, 0xd9, 0x99, 0x06, 0x00, 0x88, - 0x1f, 0xc1, 0x39, 0x19, 0x91, 0x02, 0x20, 0xff, - 0x30, 0x81, 0x90, 0x01, 0x99, 0x02, 0x98, 0x01, - 0x42, 0x81, 0xda, 0x02, 0x20, 0xb5, 0xb0, 0x05, - 0xe7, 0xca, 0x1c, 0x3c, 0x60, 0xf4, 0x37, 0x14, - 0x1c, 0x3d, 0x37, 0x0c, 0x60, 0x2f, 0x99, 0x06, - 0x60, 0x69, 0x20, 0x00, 0x60, 0xa8, 0x97, 0x03, - 0x20, 0x00, 0x60, 0xe0, 0x1d, 0xe0, 0x30, 0x05, - 0x9a, 0x03, 0x99, 0x02, 0xf0, 0x00, 0xf9, 0x56, - 0x90, 0x00, 0x20, 0x00, 0x70, 0xa0, 0x98, 0x00, - 0x60, 0x60, 0x9a, 0x03, 0x60, 0xa2, 0x61, 0x25, - 0x99, 0x04, 0x20, 0x54, 0xf7, 0xff, 0xfd, 0xa0, - 0xb0, 0x05, 0xe7, 0xa9, 0xb0, 0x04, 0xb0, 0x01, - 0xe7, 0xa6, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc8, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0xff, 0xb0, 0x83, - 0x9a, 0x05, 0x06, 0x11, 0x0e, 0x09, 0x91, 0x00, - 0x9b, 0x06, 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, - 0x98, 0x0c, 0x06, 0x01, 0x0e, 0x09, 0x91, 0x02, - 0xb0, 0x85, 0x99, 0x05, 0x29, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x08, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x08, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0xb4, 0xb0, 0x08, 0xe7, 0xf5, - 0x99, 0x05, 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, - 0x49, 0x83, 0x68, 0x09, 0x18, 0x47, 0x98, 0x08, - 0x4b, 0x82, 0x42, 0x98, 0xd1, 0x73, 0x99, 0x05, - 0x00, 0x88, 0x49, 0x81, 0x58, 0x08, 0x1c, 0x05, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x08, 0xe7, 0xe1, - 0x68, 0xe8, 0x28, 0x00, 0xd1, 0x02, 0x78, 0xe8, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0xbc, 0xb0, 0x08, - 0xe7, 0xd8, 0x78, 0xa8, 0x28, 0x00, 0xd0, 0x54, - 0x20, 0x00, 0x42, 0x80, 0xd0, 0x1d, 0x24, 0x00, - 0x2c, 0x20, 0xdb, 0x04, 0xe0, 0x18, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, 0x48, 0x73, - 0x5d, 0x00, 0x99, 0x05, 0x42, 0x88, 0xd1, 0x0e, - 0x20, 0x01, 0x40, 0xa0, 0x43, 0xc0, 0x49, 0x70, - 0x68, 0x09, 0x40, 0x08, 0x49, 0x6e, 0x60, 0x08, - 0x20, 0x00, 0x00, 0xa1, 0x4a, 0x6d, 0x50, 0x50, - 0x20, 0xff, 0x49, 0x6a, 0x55, 0x08, 0xe7, 0xe6, - 0xe0, 0x33, 0x4a, 0x6b, 0x92, 0x03, 0x7e, 0x38, - 0x1c, 0x06, 0x28, 0xff, 0xd0, 0x14, 0x20, 0x00, - 0x00, 0xb1, 0x4a, 0x68, 0x50, 0x50, 0x20, 0x01, - 0x40, 0xb0, 0x43, 0xc0, 0x49, 0x66, 0x68, 0x09, - 0x40, 0x08, 0x49, 0x65, 0x60, 0x08, 0x20, 0xff, - 0x76, 0x38, 0x21, 0xff, 0x48, 0x63, 0x55, 0x81, - 0x21, 0x00, 0x00, 0xb0, 0x9a, 0x03, 0x50, 0x11, - 0x7e, 0x78, 0x1c, 0x06, 0x28, 0xff, 0xd0, 0x14, - 0x21, 0x00, 0x00, 0xb0, 0x4a, 0x5b, 0x50, 0x11, - 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, 0x49, 0x5a, - 0x68, 0x09, 0x40, 0x08, 0x49, 0x58, 0x60, 0x08, - 0x20, 0xff, 0x76, 0x78, 0x20, 0xff, 0x49, 0x51, - 0x55, 0x88, 0x21, 0x00, 0x00, 0xb0, 0x9a, 0x03, - 0x50, 0x11, 0x20, 0x00, 0x99, 0x05, 0x00, 0x89, - 0x4a, 0x4b, 0x50, 0x50, 0x24, 0x00, 0x2c, 0x0c, - 0xdb, 0x06, 0xe0, 0x09, 0xe0, 0x00, 0xe0, 0x0e, - 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf6, - 0x20, 0x00, 0x19, 0x39, 0x73, 0x08, 0xe7, 0xf7, - 0x20, 0x00, 0x83, 0x38, 0x20, 0x00, 0x70, 0xf8, - 0x20, 0x00, 0xb0, 0x08, 0xe7, 0x66, 0x99, 0x05, - 0x00, 0x88, 0x49, 0x3f, 0x58, 0x08, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0xb0, 0xb0, 0x08, 0xe7, 0x5d, - 0x99, 0x07, 0x29, 0x11, 0xdb, 0x02, 0x99, 0x07, - 0x29, 0x13, 0xdd, 0x02, 0x20, 0xb1, 0xb0, 0x08, - 0xe7, 0x54, 0x99, 0x09, 0x00, 0x88, 0x1f, 0xc1, - 0x39, 0x21, 0x91, 0x01, 0x20, 0xff, 0x30, 0x81, - 0x90, 0x00, 0x99, 0x01, 0x98, 0x00, 0x42, 0x81, - 0xda, 0x02, 0x20, 0xb5, 0xb0, 0x08, 0xe7, 0x45, - 0x9d, 0x08, 0x98, 0x08, 0x30, 0x1c, 0x90, 0x08, - 0x98, 0x08, 0x90, 0x04, 0x98, 0x08, 0x30, 0x0c, - 0x90, 0x08, 0x98, 0x08, 0x90, 0x02, 0x9a, 0x02, - 0x98, 0x04, 0x60, 0x02, 0x99, 0x09, 0x98, 0x04, - 0x60, 0x41, 0x20, 0x00, 0x99, 0x04, 0x60, 0x88, - 0x20, 0x00, 0x61, 0xa8, 0x1d, 0xe8, 0x30, 0x11, - 0x9a, 0x02, 0x99, 0x01, 0xf0, 0x00, 0xf8, 0x56, - 0x20, 0x00, 0x70, 0x28, 0x98, 0x06, 0x99, 0x07, - 0x43, 0x08, 0x70, 0x68, 0x20, 0x00, 0x70, 0xa8, - 0x20, 0x02, 0x70, 0xe8, 0x20, 0x00, 0x71, 0x28, - 0x98, 0x04, 0x60, 0xa8, 0x20, 0x00, 0x60, 0xe8, - 0x9a, 0x02, 0x61, 0x2a, 0x9a, 0x02, 0x61, 0x6a, - 0x99, 0x05, 0x00, 0x88, 0x49, 0x16, 0x50, 0x0d, - 0x20, 0x00, 0x60, 0xf8, 0x88, 0x38, 0x4b, 0x1c, - 0x40, 0x18, 0x80, 0x38, 0x20, 0x00, 0x60, 0xb8, - 0x9a, 0x02, 0x60, 0x7a, 0x98, 0x06, 0x99, 0x07, - 0x43, 0x08, 0x70, 0xb8, 0x24, 0x00, 0x2c, 0x0c, - 0xdb, 0x04, 0xe0, 0x07, 0x1c, 0x60, 0x06, 0x04, - 0x0e, 0x24, 0xe7, 0xf8, 0x20, 0x00, 0x19, 0x39, - 0x74, 0x08, 0xe7, 0xf7, 0x20, 0x00, 0x83, 0x38, - 0x20, 0x00, 0x70, 0xf8, 0x20, 0xff, 0x76, 0x38, - 0x20, 0xff, 0x76, 0x78, 0x20, 0x00, 0xb0, 0x08, - 0xe6, 0xec, 0xb0, 0x05, 0xb0, 0x03, 0xe6, 0xe9, - 0x2e, 0x08, 0x9b, 0x30, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x48, 0x2e, 0x08, 0x9c, 0x50, - 0x9e, 0x00, 0x04, 0xb8, 0x2e, 0x08, 0x9c, 0xd0, - 0x2e, 0x08, 0x9c, 0x4c, 0x2e, 0x08, 0x9d, 0x30, - 0xff, 0xff, 0xfb, 0xff, 0xb4, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x13, 0x21, 0x00, 0x68, 0x22, - 0x2a, 0x00, 0xd0, 0x00, 0x60, 0x13, 0x1d, 0xd8, - 0x30, 0xb9, 0x60, 0x18, 0x33, 0xc0, 0x31, 0x01, - 0x3f, 0xc0, 0x2f, 0xc0, 0xd8, 0xf7, 0x20, 0x00, - 0x60, 0x18, 0x60, 0x23, 0x31, 0x01, 0x1c, 0x08, - 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, 0xb4, 0x90, - 0x1c, 0x03, 0x1c, 0x0a, 0x6b, 0x18, 0x68, 0xd1, - 0x68, 0x07, 0x2f, 0x00, 0xd0, 0x0c, 0x68, 0x07, - 0x60, 0x0f, 0x68, 0x41, 0x68, 0x57, 0x68, 0x84, - 0x19, 0x3f, 0x60, 0x57, 0x27, 0x00, 0x60, 0x07, - 0x27, 0x00, 0x60, 0x47, 0x27, 0x00, 0x60, 0x87, - 0x6a, 0xc7, 0x2f, 0x00, 0xd0, 0x0c, 0x6a, 0xc7, - 0x60, 0x0f, 0x6b, 0x01, 0x68, 0x57, 0x6b, 0x44, - 0x19, 0x3f, 0x60, 0x57, 0x27, 0x00, 0x62, 0xc7, - 0x27, 0x00, 0x63, 0x07, 0x27, 0x00, 0x63, 0x47, - 0x60, 0xd1, 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, - 0x20, 0x00, 0x49, 0x01, 0x70, 0x08, 0x47, 0x70, - 0x2e, 0x08, 0xb9, 0x80, 0xb5, 0xff, 0xb0, 0x82, - 0x9b, 0x05, 0x06, 0x18, 0x16, 0x00, 0x90, 0x00, - 0x98, 0x0c, 0x06, 0x01, 0x16, 0x09, 0x91, 0x01, - 0x98, 0x00, 0x28, 0x1f, 0xdd, 0x05, 0x20, 0xaf, - 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x37, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0x20, 0xd2, 0xb0, 0x02, 0xe7, 0xf4, - 0xe0, 0x64, 0x20, 0xff, 0x49, 0x32, 0x70, 0x08, - 0x49, 0x32, 0x98, 0x00, 0xf0, 0x0a, 0xff, 0x04, - 0x9a, 0x04, 0x2a, 0x00, 0xd9, 0x52, 0x20, 0xff, - 0x49, 0x2f, 0x70, 0x08, 0x9d, 0x02, 0x98, 0x0b, - 0x99, 0x01, 0x18, 0x44, 0x99, 0x01, 0x20, 0xc0, - 0x1a, 0x40, 0x9a, 0x04, 0x42, 0x90, 0xd9, 0x01, - 0x9f, 0x04, 0xe0, 0x02, 0x99, 0x01, 0x20, 0xc0, - 0x1a, 0x47, 0x1c, 0x3a, 0x1c, 0x21, 0x1c, 0x28, - 0x23, 0xfe, 0xf0, 0x05, 0xfa, 0xa5, 0x1c, 0x06, - 0x2e, 0xd0, 0xd1, 0x0a, 0x20, 0x03, 0xf0, 0x04, - 0xf9, 0xa9, 0x1c, 0x3a, 0x1c, 0x21, 0x1c, 0x28, - 0x23, 0xfe, 0xf0, 0x05, 0xfa, 0x99, 0x1c, 0x06, - 0xe7, 0xf2, 0x98, 0x02, 0x19, 0xc0, 0x90, 0x02, - 0x9a, 0x04, 0x1b, 0xd2, 0x92, 0x04, 0x9d, 0x0b, - 0x9c, 0x03, 0x9b, 0x00, 0x1c, 0x3a, 0x1c, 0x21, - 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0x89, 0x1c, 0x06, - 0x2e, 0xd0, 0xd1, 0x0a, 0x20, 0x03, 0xf0, 0x04, - 0xf9, 0x8d, 0x9b, 0x00, 0x1c, 0x3a, 0x1c, 0x21, - 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0x7d, 0x1c, 0x06, - 0xe7, 0xf2, 0x99, 0x03, 0x29, 0x20, 0xd3, 0x04, - 0x99, 0x01, 0x18, 0x78, 0x99, 0x03, 0x18, 0x41, - 0x91, 0x03, 0x48, 0x0b, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0x20, 0x03, 0xf0, 0x04, 0xf9, 0x76, - 0xe7, 0xf7, 0xe7, 0xa9, 0x20, 0x00, 0x49, 0x04, - 0x70, 0x08, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x90, - 0xb0, 0x02, 0xe7, 0x8e, 0xe7, 0x8d, 0x00, 0x00, - 0x2e, 0x08, 0x20, 0x20, 0x2e, 0x01, 0x8b, 0x35, - 0x2e, 0x08, 0xb9, 0x80, 0xb5, 0xff, 0x1c, 0x0f, - 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, 0x9b, 0x03, - 0x06, 0x1d, 0x0e, 0x2d, 0x2c, 0x1f, 0xdb, 0x04, - 0x20, 0xb3, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x04, 0x3a, 0x0c, 0x12, 0x2d, 0x01, - 0xd1, 0x73, 0x20, 0x01, 0x03, 0x40, 0x40, 0x10, - 0xd0, 0x0a, 0x4b, 0x6f, 0x40, 0x1a, 0x48, 0x6f, - 0x68, 0x00, 0x68, 0x00, 0x23, 0x02, 0x43, 0xdb, - 0x40, 0x18, 0x4b, 0x6c, 0x68, 0x1b, 0x60, 0x18, - 0x20, 0x01, 0x02, 0x40, 0x40, 0x10, 0xd0, 0x0a, - 0x4b, 0x69, 0x40, 0x1a, 0x48, 0x67, 0x68, 0x00, - 0x68, 0x00, 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, - 0x4b, 0x64, 0x68, 0x1b, 0x60, 0x18, 0x20, 0x01, - 0x05, 0x00, 0x40, 0x38, 0xd0, 0x08, 0x48, 0x63, - 0x68, 0x00, 0x69, 0x80, 0x23, 0x01, 0x05, 0x1b, - 0x43, 0x18, 0x4b, 0x60, 0x68, 0x1b, 0x61, 0x98, - 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, 0xd0, 0x08, - 0x48, 0x5c, 0x68, 0x00, 0x69, 0x80, 0x23, 0x01, - 0x05, 0x5b, 0x43, 0x18, 0x4b, 0x59, 0x68, 0x1b, - 0x61, 0x98, 0x0a, 0x12, 0x48, 0x55, 0x68, 0x00, - 0x68, 0x00, 0x43, 0x90, 0x4b, 0x53, 0x68, 0x1b, - 0x60, 0x18, 0x48, 0x52, 0x68, 0x00, 0x68, 0x00, - 0x4b, 0x53, 0x65, 0x18, 0x48, 0x51, 0x68, 0x00, - 0x77, 0x04, 0x20, 0x09, 0x04, 0x80, 0x40, 0x38, - 0xd0, 0x35, 0x21, 0x00, 0x29, 0x20, 0xdb, 0x04, - 0xe0, 0x31, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x20, 0x01, 0x40, 0x88, 0x9b, 0x00, - 0x40, 0x18, 0xd0, 0x27, 0x20, 0x01, 0x05, 0x40, - 0x40, 0x38, 0xd0, 0x0e, 0x00, 0xc8, 0x1a, 0x40, - 0x00, 0x80, 0x4b, 0x46, 0x68, 0x1b, 0x5a, 0x18, - 0x23, 0xff, 0x33, 0x01, 0x43, 0x18, 0x00, 0xcb, - 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x41, 0x68, 0x36, - 0x52, 0xf0, 0x20, 0x01, 0x04, 0x80, 0x40, 0x38, - 0xd0, 0x10, 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, - 0xe0, 0x00, 0xe0, 0x0d, 0x4b, 0x3b, 0x68, 0x1b, - 0x5a, 0x18, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x18, - 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x37, - 0x68, 0x36, 0x52, 0xf0, 0xe7, 0xcd, 0xe0, 0x5c, - 0x2d, 0x02, 0xd1, 0x5a, 0x0a, 0x12, 0x48, 0x2f, - 0x68, 0x00, 0x68, 0x00, 0x43, 0x10, 0x4b, 0x2d, - 0x68, 0x1b, 0x60, 0x18, 0x48, 0x2b, 0x68, 0x00, - 0x68, 0x00, 0x4b, 0x2d, 0x65, 0x18, 0x20, 0x01, - 0x05, 0x00, 0x40, 0x38, 0xd0, 0x07, 0x48, 0x29, - 0x68, 0x00, 0x69, 0x80, 0x4b, 0x2a, 0x40, 0x18, - 0x4b, 0x26, 0x68, 0x1b, 0x61, 0x98, 0x20, 0x01, - 0x05, 0x40, 0x40, 0x38, 0xd0, 0x07, 0x48, 0x23, - 0x68, 0x00, 0x69, 0x80, 0x4b, 0x25, 0x40, 0x18, - 0x4b, 0x20, 0x68, 0x1b, 0x61, 0x98, 0x21, 0x00, - 0x29, 0x20, 0xdb, 0x04, 0xe0, 0x31, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x20, 0x09, - 0x04, 0x80, 0x40, 0x38, 0xd0, 0x28, 0x20, 0x01, - 0x40, 0x88, 0x9b, 0x00, 0x40, 0x18, 0xd0, 0x23, - 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, 0xd0, 0x0d, - 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, 0x4b, 0x15, - 0x68, 0x1b, 0x5a, 0x18, 0x4b, 0x16, 0x40, 0x18, - 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x11, - 0x68, 0x36, 0x52, 0xf0, 0x20, 0x01, 0x04, 0x80, - 0x40, 0x38, 0xd0, 0x0d, 0x00, 0xc8, 0x1a, 0x40, - 0x00, 0x80, 0x4b, 0x0c, 0x68, 0x1b, 0x5a, 0x18, - 0x4b, 0x05, 0x40, 0x18, 0x00, 0xcb, 0x1a, 0x5b, - 0x00, 0x9b, 0x4e, 0x08, 0x68, 0x36, 0x52, 0xf0, - 0xe7, 0xcd, 0x20, 0x00, 0xe7, 0x15, 0xe7, 0x14, - 0xff, 0xff, 0xfd, 0xff, 0x2e, 0x08, 0xb9, 0x84, - 0xff, 0xff, 0xdf, 0xff, 0x2e, 0x08, 0x9b, 0x78, - 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x9b, 0x30, - 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0xb5, 0x80, 0x1c, 0x07, - 0x48, 0x17, 0x68, 0x01, 0x20, 0x00, 0xf0, 0x13, - 0xfc, 0xa3, 0x60, 0x38, 0x48, 0x14, 0x68, 0x00, - 0x1d, 0x01, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x9c, - 0x60, 0x78, 0x48, 0x11, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x05, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x94, - 0x60, 0xf8, 0x48, 0x0d, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x09, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x8c, - 0x61, 0x38, 0x48, 0x09, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x0d, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x84, - 0x61, 0x78, 0x48, 0x05, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x01, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x7c, - 0x60, 0xb8, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0x78, 0xb5, 0xf0, 0x1c, 0x07, - 0xb0, 0x82, 0x26, 0x00, 0x89, 0xb8, 0x23, 0x08, - 0x40, 0x18, 0xd0, 0x08, 0x48, 0x59, 0x6e, 0xc2, - 0x48, 0x58, 0x6f, 0x01, 0x48, 0x57, 0x6a, 0x00, - 0xf7, 0xfd, 0xff, 0x5c, 0x1c, 0x06, 0x89, 0xb8, - 0x23, 0x10, 0x40, 0x18, 0xd0, 0x02, 0x48, 0x53, - 0x69, 0x40, 0x1c, 0x06, 0x89, 0xb8, 0x07, 0xc0, - 0x0f, 0xc0, 0xd0, 0x21, 0x48, 0x50, 0x68, 0xc0, - 0x90, 0x00, 0x68, 0x78, 0x02, 0x40, 0x99, 0x00, - 0x1a, 0x08, 0x90, 0x01, 0x98, 0x01, 0x21, 0x33, - 0x06, 0x49, 0x65, 0xc8, 0x98, 0x00, 0x21, 0x33, - 0x06, 0x49, 0x66, 0x08, 0x98, 0x01, 0x49, 0x48, - 0x60, 0x88, 0x98, 0x00, 0x49, 0x46, 0x60, 0xc8, - 0x20, 0x01, 0x21, 0x33, 0x06, 0x49, 0x66, 0xc8, - 0x20, 0x00, 0x21, 0x33, 0x06, 0x49, 0x66, 0xc8, - 0x89, 0xb8, 0x23, 0x02, 0x43, 0x18, 0x81, 0xb8, - 0x89, 0xb8, 0x23, 0x02, 0x40, 0x18, 0xd0, 0x3e, - 0x48, 0x3d, 0x68, 0x80, 0x1f, 0xc4, 0x3c, 0xff, - 0x3c, 0xfa, 0x68, 0x38, 0x02, 0x40, 0x1a, 0x25, - 0x48, 0x38, 0x60, 0x45, 0x48, 0x37, 0x60, 0x84, - 0x20, 0x33, 0x06, 0x40, 0x65, 0x45, 0x20, 0x33, - 0x06, 0x40, 0x65, 0x84, 0x1b, 0x60, 0x38, 0xc0, - 0x21, 0x33, 0x06, 0x49, 0x66, 0x88, 0x21, 0x00, - 0x48, 0x32, 0xf7, 0xfd, 0xfb, 0x89, 0x48, 0x32, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x00, 0xe7, 0xfa, - 0x48, 0x30, 0x68, 0x01, 0x23, 0xff, 0x33, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x48, 0x2e, 0x6d, 0x80, - 0x49, 0x2d, 0x65, 0x88, 0x48, 0x2c, 0x6b, 0xc0, - 0x23, 0x01, 0x07, 0x9b, 0x40, 0x18, 0xd0, 0x00, - 0xe7, 0xf8, 0x20, 0x33, 0x06, 0x40, 0x66, 0x45, - 0x20, 0x33, 0x06, 0x40, 0x66, 0x84, 0x21, 0x00, - 0x20, 0xff, 0xf7, 0xfd, 0xfb, 0x69, 0x48, 0x20, - 0x60, 0x05, 0x48, 0x1f, 0x60, 0x44, 0x89, 0xb8, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x21, 0x68, 0xb8, - 0x28, 0x00, 0xd1, 0x06, 0x48, 0x1f, 0x68, 0x01, - 0x23, 0x02, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, - 0xe0, 0x17, 0x69, 0x38, 0x49, 0x1a, 0x65, 0x88, - 0x69, 0x38, 0x68, 0xb9, 0x02, 0x49, 0x18, 0x40, - 0x49, 0x17, 0x65, 0xc8, 0x20, 0x03, 0x02, 0x00, - 0x49, 0x15, 0x67, 0x48, 0x20, 0x02, 0x49, 0x14, - 0x67, 0x88, 0x20, 0x40, 0x49, 0x12, 0x66, 0x08, - 0x48, 0x12, 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, - 0x60, 0x01, 0x20, 0x33, 0x06, 0x40, 0x6d, 0x40, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x60, 0x38, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc0, 0x60, 0x78, 0x48, 0x0a, - 0x43, 0x30, 0x60, 0xb8, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xcc, 0x00, 0x0f, 0x80, - 0x2e, 0x08, 0xb9, 0x88, 0x00, 0x00, 0x80, 0x0f, - 0xcc, 0x00, 0x05, 0x00, 0x66, 0x00, 0x00, 0xe0, - 0x66, 0x00, 0x00, 0x80, 0x66, 0x00, 0x00, 0xf0, - 0xcc, 0x00, 0x00, 0x00, 0xb5, 0xf3, 0x1c, 0x02, - 0xb0, 0x81, 0x68, 0x93, 0x68, 0x54, 0x21, 0x00, - 0x1d, 0xd8, 0x30, 0xb9, 0x1b, 0x00, 0x06, 0x05, - 0x0e, 0x2d, 0x2d, 0x12, 0xda, 0x12, 0x21, 0x00, - 0x42, 0xa9, 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x78, 0x26, - 0x34, 0x01, 0x98, 0x02, 0x54, 0x46, 0xe7, 0xf6, - 0x68, 0x1b, 0x1d, 0x18, 0x90, 0x00, 0x98, 0x00, - 0x78, 0x80, 0x18, 0xc4, 0x1c, 0x0f, 0x2f, 0x12, - 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x78, 0x26, 0x34, 0x01, - 0x98, 0x02, 0x55, 0xc6, 0xe7, 0xf6, 0x20, 0x00, - 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, 0xb4, 0xf0, - 0x1c, 0x07, 0x1c, 0x0d, 0x1c, 0x14, 0xb0, 0x82, - 0x20, 0x00, 0x70, 0x20, 0x78, 0x78, 0x23, 0x80, - 0x40, 0x18, 0xd0, 0x03, 0x20, 0xb1, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x78, 0xba, 0x20, 0x40, - 0x40, 0x10, 0xd0, 0x2a, 0x07, 0x12, 0x0f, 0x12, - 0x07, 0xd0, 0x0f, 0xc0, 0xd0, 0x25, 0x20, 0x40, - 0x70, 0x20, 0x35, 0x0a, 0x21, 0x00, 0x1d, 0xf8, - 0x30, 0x0d, 0x90, 0x01, 0x1d, 0xf8, 0x30, 0x1d, - 0x90, 0x00, 0x21, 0x00, 0x29, 0x08, 0xdb, 0x04, - 0xe0, 0x14, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x78, 0x2e, 0x35, 0x01, 0x98, 0x00, - 0x78, 0x03, 0x30, 0x01, 0x90, 0x00, 0x40, 0x33, - 0x98, 0x01, 0x78, 0x06, 0x30, 0x01, 0x90, 0x01, - 0x42, 0xb3, 0xd0, 0x02, 0x20, 0x00, 0x70, 0x20, - 0xe0, 0x00, 0xe7, 0xea, 0x20, 0x00, 0xb0, 0x02, - 0xe7, 0xce, 0x20, 0xb1, 0xb0, 0x02, 0xe7, 0xcb, - 0xb0, 0x02, 0xe7, 0xc9, 0xb5, 0xf7, 0x1c, 0x07, - 0xb0, 0x8d, 0x20, 0x00, 0x9a, 0x0f, 0x70, 0x10, - 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x05, - 0x20, 0xb1, 0xb0, 0x0d, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x78, 0xb8, 0x90, 0x05, - 0x98, 0x05, 0x23, 0x40, 0x40, 0x18, 0xd0, 0x73, - 0x98, 0x05, 0x07, 0x00, 0x0f, 0x00, 0x90, 0x05, - 0x98, 0x05, 0x23, 0x02, 0x40, 0x18, 0xd1, 0x03, - 0x98, 0x05, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x68, - 0x99, 0x0e, 0x79, 0x48, 0x23, 0x3e, 0x40, 0x18, - 0x90, 0x0c, 0x78, 0xf8, 0x90, 0x04, 0x98, 0x04, - 0x01, 0x00, 0x4b, 0x81, 0x18, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x68, 0x00, 0x90, 0x01, 0x78, 0x7c, - 0x23, 0xbf, 0x40, 0x1c, 0x23, 0xfe, 0x40, 0x1c, - 0x20, 0x00, 0x90, 0x03, 0x98, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x99, 0x0c, 0x42, 0x88, 0xd0, 0x08, - 0x06, 0x20, 0x0e, 0x00, 0x24, 0x01, 0x43, 0x04, - 0x20, 0x01, 0x90, 0x03, 0x23, 0xdf, 0x40, 0x1c, - 0xe0, 0x06, 0x20, 0x02, 0x40, 0x20, 0xd0, 0x03, - 0x70, 0x7c, 0x20, 0x00, 0xb0, 0x0d, 0xe7, 0xbd, - 0x23, 0xfd, 0x40, 0x1c, 0x98, 0x05, 0x23, 0x04, - 0x40, 0x18, 0xd0, 0x73, 0x6a, 0xfd, 0x98, 0x03, - 0x28, 0x00, 0xd0, 0x14, 0x26, 0x00, 0x2e, 0x08, - 0xdb, 0x04, 0xe0, 0x0e, 0x1c, 0x70, 0x06, 0x06, - 0x0e, 0x36, 0xe7, 0xf8, 0x00, 0xb0, 0x19, 0x40, - 0x68, 0x40, 0x00, 0xb1, 0x19, 0x49, 0x64, 0x48, - 0x20, 0x00, 0x00, 0xb1, 0x19, 0x49, 0x62, 0x48, - 0xe7, 0xf0, 0x88, 0x28, 0x80, 0x68, 0x20, 0x20, - 0x40, 0x20, 0xd1, 0x3e, 0x99, 0x0e, 0x79, 0xc8, - 0x09, 0x40, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x0a, - 0x99, 0x0e, 0x79, 0xc8, 0x06, 0xc0, 0x0e, 0xc0, - 0x90, 0x09, 0x98, 0x0a, 0x30, 0x01, 0x06, 0x06, - 0x0e, 0x36, 0x2e, 0x08, 0xdb, 0x04, 0xe0, 0x10, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0xe7, 0xf8, - 0x20, 0x00, 0x00, 0xb1, 0x19, 0x49, 0xe0, 0x01, - 0xe0, 0x9d, 0xe0, 0x9c, 0x64, 0x48, 0x88, 0x68, - 0x21, 0x80, 0x41, 0x31, 0x43, 0x88, 0x80, 0x68, - 0xe7, 0xee, 0x98, 0x0a, 0x00, 0x80, 0x19, 0x40, - 0x6c, 0x41, 0x98, 0x09, 0x00, 0x80, 0x4a, 0x4b, - 0x58, 0x10, 0x40, 0x08, 0x99, 0x0a, 0x00, 0x89, - 0x19, 0x49, 0x64, 0x48, 0x06, 0x20, 0x0e, 0x00, - 0x24, 0x20, 0x43, 0x04, 0x98, 0x01, 0x0a, 0x00, - 0x02, 0x00, 0x90, 0x01, 0x98, 0x01, 0x99, 0x0c, - 0x43, 0x08, 0x90, 0x01, 0x98, 0x01, 0x99, 0x02, - 0x60, 0x08, 0x78, 0x38, 0x23, 0x80, 0x40, 0x18, - 0xd0, 0x19, 0x99, 0x0e, 0x7b, 0x08, 0x07, 0x42, - 0x0f, 0x52, 0x92, 0x07, 0x99, 0x0e, 0x7b, 0x08, - 0x08, 0xc0, 0x06, 0x02, 0x0e, 0x12, 0x92, 0x08, - 0x1d, 0xe9, 0x31, 0x3d, 0x91, 0x06, 0x99, 0x06, - 0x9a, 0x08, 0x5c, 0x88, 0x49, 0x36, 0x9a, 0x07, - 0x5c, 0x89, 0xe0, 0x00, 0xe0, 0x4e, 0x40, 0x08, - 0x99, 0x06, 0x9a, 0x08, 0x54, 0x88, 0x99, 0x0e, - 0x79, 0x88, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x00, - 0x98, 0x00, 0x49, 0x30, 0x40, 0xc1, 0x91, 0x00, - 0x99, 0x0e, 0x79, 0x88, 0x09, 0x40, 0x06, 0x02, - 0x0e, 0x12, 0x92, 0x0b, 0x9a, 0x0b, 0x00, 0x90, - 0x19, 0x40, 0x6c, 0x40, 0x99, 0x00, 0x40, 0x08, - 0xd0, 0x33, 0x06, 0x20, 0x0e, 0x00, 0x24, 0x40, - 0x43, 0x04, 0x9a, 0x0b, 0x00, 0x90, 0x19, 0x40, - 0x6c, 0x40, 0x99, 0x00, 0x40, 0x41, 0x00, 0x90, - 0x19, 0x40, 0x64, 0x41, 0x9a, 0x0b, 0x00, 0x90, - 0x19, 0x40, 0x6a, 0x40, 0x99, 0x00, 0x43, 0x01, - 0x00, 0x90, 0x19, 0x40, 0x62, 0x41, 0x9a, 0x0b, - 0x00, 0x90, 0x19, 0x40, 0x6c, 0x40, 0x28, 0x00, - 0xd1, 0x17, 0x88, 0x68, 0x9a, 0x0b, 0x21, 0x80, - 0x41, 0x11, 0x43, 0x88, 0x80, 0x68, 0x88, 0x68, - 0x28, 0x00, 0xd1, 0x0e, 0x06, 0x20, 0x0e, 0x00, - 0x24, 0x02, 0x43, 0x04, 0x23, 0xfe, 0x40, 0x1c, - 0x98, 0x0c, 0x30, 0x02, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x0c, 0x98, 0x0c, 0x23, 0x3e, 0x40, 0x18, - 0x90, 0x0c, 0xe0, 0x0a, 0x06, 0x20, 0x0e, 0x00, - 0x24, 0x40, 0x43, 0x04, 0x23, 0xfe, 0x40, 0x1c, - 0x98, 0x0c, 0x1c, 0x41, 0x98, 0x04, 0xf0, 0x00, - 0xf8, 0x13, 0x9a, 0x0f, 0x70, 0x14, 0x70, 0x7c, - 0x20, 0x00, 0xb0, 0x0d, 0xe6, 0xe2, 0x20, 0xb1, - 0xb0, 0x0d, 0xe6, 0xdf, 0xb0, 0x0d, 0xe6, 0xdd, - 0x64, 0x00, 0x08, 0x00, 0x2e, 0x08, 0x20, 0x90, - 0x2e, 0x08, 0x21, 0x10, 0x80, 0x00, 0x00, 0x00, - 0xb5, 0xf3, 0x98, 0x00, 0x06, 0x07, 0x0e, 0x3f, - 0x99, 0x01, 0x06, 0x0e, 0x0e, 0x36, 0x00, 0xf8, - 0x4b, 0x13, 0x18, 0xc5, 0x01, 0x38, 0x4b, 0x13, - 0x18, 0xc4, 0x01, 0x38, 0x4b, 0x12, 0x18, 0xc2, - 0x68, 0x10, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0x10, 0x2e, 0x3e, 0xdc, 0x15, 0x68, 0x20, - 0x1c, 0x01, 0x0a, 0x09, 0x02, 0x09, 0x43, 0x31, - 0x60, 0x21, 0x68, 0x28, 0x1c, 0x01, 0x0a, 0x09, - 0x02, 0x09, 0x23, 0x3e, 0x43, 0x19, 0x60, 0x29, - 0x68, 0x10, 0x23, 0x40, 0x43, 0x18, 0x60, 0x10, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0xbd, 0xe7, 0xf9, 0xe7, 0xf8, - 0x64, 0x00, 0x10, 0x00, 0x64, 0x00, 0x08, 0x00, - 0x64, 0x00, 0x08, 0x08, 0xb5, 0xf3, 0xb0, 0x93, - 0x98, 0x13, 0x69, 0x00, 0x90, 0x01, 0x98, 0x01, - 0x78, 0x40, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x05, - 0x20, 0xbe, 0xb0, 0x13, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x01, 0x78, 0x80, - 0x90, 0x08, 0x98, 0x08, 0x23, 0x40, 0x40, 0x18, - 0xd0, 0x73, 0x98, 0x08, 0x23, 0x20, 0x40, 0x18, - 0xd0, 0x6f, 0x98, 0x01, 0x6b, 0x07, 0x98, 0x01, - 0x79, 0xc0, 0x00, 0x80, 0x49, 0x76, 0x58, 0x08, - 0x90, 0x00, 0x98, 0x00, 0x68, 0xc0, 0x1c, 0x06, - 0xd1, 0x02, 0x20, 0xb6, 0xb0, 0x13, 0xe7, 0xe1, - 0x78, 0xb0, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x02, - 0x20, 0xb6, 0xb0, 0x13, 0xe7, 0xda, 0xa9, 0x11, - 0x1c, 0x30, 0xf0, 0x00, 0xf9, 0x2b, 0x90, 0x02, - 0x98, 0x11, 0x28, 0x00, 0xd1, 0x02, 0x98, 0x02, - 0xb0, 0x13, 0xe7, 0xcf, 0x98, 0x11, 0x90, 0x0e, - 0x20, 0x01, 0x90, 0x0b, 0x98, 0x13, 0x88, 0x40, - 0x90, 0x0d, 0x98, 0x13, 0x68, 0x40, 0x90, 0x06, - 0x98, 0x13, 0x68, 0x81, 0x91, 0x10, 0x99, 0x10, - 0x1d, 0xc8, 0x30, 0xb9, 0x90, 0x05, 0x98, 0x05, - 0x99, 0x06, 0x1a, 0x40, 0x04, 0x04, 0x0c, 0x24, - 0x99, 0x14, 0x79, 0x88, 0x90, 0x03, 0x98, 0x03, - 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x0a, 0x98, 0x0a, - 0x49, 0x5a, 0x40, 0xc1, 0x91, 0x0a, 0x98, 0x03, - 0x09, 0x40, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x09, - 0x98, 0x09, 0x00, 0x80, 0x19, 0xc0, 0x6b, 0x80, - 0x99, 0x0a, 0x40, 0x08, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x13, 0xe7, 0x9f, 0x20, 0xb8, 0x90, 0x0c, - 0x98, 0x11, 0x30, 0x08, 0x90, 0x04, 0x20, 0x00, - 0x90, 0x07, 0x98, 0x07, 0x28, 0x00, 0xd0, 0x10, - 0x99, 0x10, 0x68, 0x09, 0x91, 0x10, 0x99, 0x10, - 0x1d, 0x08, 0x90, 0x12, 0x98, 0x12, 0x78, 0x80, - 0x99, 0x10, 0x18, 0x40, 0x90, 0x06, 0x98, 0x12, - 0x78, 0x81, 0x20, 0xc0, 0x1a, 0x40, 0x04, 0x04, - 0x0c, 0x24, 0x98, 0x0d, 0x42, 0x84, 0xdb, 0x05, - 0xe0, 0x00, 0xe0, 0x7c, 0x9c, 0x0d, 0x20, 0x00, - 0x90, 0x0d, 0xe0, 0x06, 0x98, 0x0d, 0x1b, 0x00, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0d, 0x20, 0x01, - 0x90, 0x07, 0x98, 0x0c, 0x42, 0xa0, 0xda, 0x2e, - 0x25, 0x00, 0x98, 0x0c, 0x42, 0x85, 0xdb, 0x04, - 0xe0, 0x0c, 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, - 0xe7, 0xf7, 0x98, 0x06, 0x78, 0x01, 0x30, 0x01, - 0x90, 0x06, 0x98, 0x04, 0x70, 0x01, 0x30, 0x01, - 0x90, 0x04, 0xe7, 0xf2, 0x98, 0x0c, 0x1a, 0x20, - 0x04, 0x04, 0x0c, 0x24, 0xa9, 0x11, 0x1c, 0x30, - 0xf0, 0x00, 0xf8, 0xac, 0x90, 0x02, 0x98, 0x11, - 0x28, 0x00, 0xd1, 0x08, 0x98, 0x0e, 0x60, 0xb0, - 0x68, 0x70, 0x99, 0x0b, 0x18, 0x40, 0x60, 0x70, - 0x98, 0x02, 0xb0, 0x13, 0xe7, 0x4a, 0x98, 0x0b, - 0x30, 0x01, 0x90, 0x0b, 0x20, 0xb8, 0x90, 0x0c, - 0x98, 0x11, 0x30, 0x08, 0x90, 0x04, 0x25, 0x00, - 0x42, 0xa5, 0xdb, 0x04, 0xe0, 0x0c, 0x1c, 0x68, - 0x06, 0x05, 0x0e, 0x2d, 0xe7, 0xf8, 0x98, 0x06, - 0x78, 0x01, 0x30, 0x01, 0x90, 0x06, 0x98, 0x04, - 0x70, 0x01, 0x30, 0x01, 0x90, 0x04, 0xe7, 0xf2, - 0x98, 0x0c, 0x1b, 0x00, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x0c, 0x98, 0x0d, 0x28, 0x00, 0xd1, 0x90, - 0x6b, 0x39, 0x91, 0x0f, 0x6a, 0xf8, 0x28, 0x00, - 0xd1, 0x02, 0x98, 0x0e, 0x62, 0xf8, 0xe0, 0x05, - 0x98, 0x0e, 0x99, 0x0f, 0x60, 0x08, 0x98, 0x0e, - 0x6d, 0xb9, 0x60, 0x08, 0x98, 0x09, 0x00, 0x80, - 0x19, 0xc0, 0x6b, 0x80, 0x99, 0x0a, 0x43, 0x01, - 0x98, 0x09, 0x00, 0x80, 0x19, 0xc0, 0x63, 0x81, - 0x6b, 0x78, 0x99, 0x0b, 0x18, 0x40, 0x63, 0x78, - 0x20, 0x00, 0x99, 0x11, 0x60, 0x08, 0x98, 0x11, - 0x63, 0x38, 0x98, 0x0e, 0x30, 0x04, 0x65, 0xb8, - 0x98, 0x02, 0xb0, 0x13, 0xe7, 0x02, 0x20, 0xb1, - 0xb0, 0x13, 0xe6, 0xff, 0xb0, 0x13, 0xe6, 0xfd, - 0x2e, 0x08, 0x9b, 0xc8, 0x80, 0x00, 0x00, 0x00, - 0xb4, 0xf0, 0x1c, 0x01, 0x78, 0x88, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x42, 0x79, 0xc8, 0x00, 0x80, - 0x4b, 0x21, 0x58, 0x1d, 0x6b, 0x0a, 0x68, 0xef, - 0x68, 0x10, 0x28, 0x00, 0xd0, 0x17, 0x68, 0xfe, - 0x68, 0x10, 0x60, 0x30, 0x68, 0x50, 0x60, 0xf8, - 0x68, 0x78, 0x68, 0x93, 0x18, 0xc0, 0x60, 0x78, - 0x20, 0x00, 0x60, 0x10, 0x20, 0x00, 0x60, 0x50, - 0x20, 0x00, 0x60, 0x90, 0x68, 0x78, 0x78, 0x3b, - 0x42, 0x98, 0xd9, 0x04, 0x78, 0xb8, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x18, 0x70, 0xb8, 0x6a, 0xd0, - 0x60, 0x10, 0x6b, 0x10, 0x60, 0x50, 0x6b, 0x50, - 0x60, 0x90, 0x24, 0x00, 0x2c, 0x08, 0xdb, 0x04, - 0xe0, 0x0e, 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, - 0xe7, 0xf8, 0x00, 0xa0, 0x18, 0x80, 0x6b, 0x80, - 0x00, 0xa3, 0x18, 0x9b, 0x60, 0xd8, 0x23, 0x00, - 0x00, 0xa0, 0x18, 0x80, 0x63, 0x83, 0xe7, 0xf0, - 0x20, 0x00, 0x62, 0xd0, 0x20, 0x00, 0x63, 0x10, - 0x20, 0x00, 0x63, 0x50, 0x20, 0x00, 0xbc, 0xf0, - 0x47, 0x70, 0x20, 0xb1, 0xe7, 0xfb, 0xe7, 0xfa, - 0x2e, 0x08, 0x9b, 0xc8, 0xb4, 0x90, 0x1c, 0x02, - 0x1c, 0x0f, 0x78, 0x14, 0x68, 0x90, 0x1c, 0x01, - 0xd1, 0x08, 0x20, 0x00, 0x60, 0x38, 0x78, 0x90, - 0x23, 0x01, 0x43, 0x18, 0x70, 0x90, 0x20, 0xb7, - 0xbc, 0x90, 0x47, 0x70, 0x68, 0x08, 0x60, 0x90, - 0x20, 0x00, 0x60, 0x48, 0x60, 0x39, 0x68, 0x50, - 0x38, 0x01, 0x60, 0x50, 0x68, 0x50, 0x42, 0xa0, - 0xd1, 0x02, 0x20, 0xbf, 0xe7, 0xf0, 0xe0, 0x01, - 0x20, 0x00, 0xe7, 0xed, 0xe7, 0xec, 0x00, 0x00, - 0x1c, 0x01, 0x22, 0x00, 0x6a, 0x50, 0x68, 0x02, - 0x60, 0x0a, 0x4a, 0x05, 0x6f, 0xd2, 0x60, 0x8a, - 0x4a, 0x04, 0x68, 0x12, 0x60, 0x4a, 0x22, 0x1d, - 0x02, 0x92, 0x68, 0x12, 0x60, 0xca, 0x47, 0x70, - 0xcc, 0x00, 0x0f, 0x80, 0x2e, 0x08, 0x20, 0x24, - 0x1c, 0x01, 0x48, 0x02, 0x60, 0x01, 0x20, 0x00, - 0x47, 0x70, 0xe7, 0xfd, 0x66, 0x00, 0x01, 0x00, - 0x1c, 0x01, 0x20, 0x33, 0x06, 0x40, 0x62, 0x01, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, - 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, 0x23, 0x7f, - 0x03, 0x9b, 0x40, 0x18, 0x03, 0x8a, 0x43, 0x10, - 0x22, 0x33, 0x06, 0x52, 0x62, 0xd0, 0x20, 0x00, - 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x20, 0x33, - 0x06, 0x40, 0x6a, 0xc0, 0x23, 0x03, 0x03, 0x1b, - 0x40, 0x18, 0x43, 0x08, 0x22, 0x33, 0x06, 0x52, - 0x62, 0xd0, 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, - 0x1c, 0x01, 0x06, 0x0a, 0x0e, 0x12, 0x2a, 0x00, - 0xd0, 0x06, 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x18, 0xe0, 0x04, - 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, 0x4b, 0x04, - 0x40, 0x18, 0x23, 0x33, 0x06, 0x5b, 0x62, 0xd8, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, - 0xff, 0xdf, 0xff, 0xff, 0x48, 0x04, 0x69, 0x80, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x20, 0xff, - 0x47, 0x70, 0x20, 0x00, 0xe7, 0xfc, 0xe7, 0xfb, - 0x66, 0x00, 0x00, 0x80, 0xb4, 0x80, 0x1c, 0x01, - 0x06, 0x0f, 0x0e, 0x3f, 0x4a, 0x08, 0x2f, 0x00, - 0xd0, 0x03, 0x68, 0x10, 0x23, 0x01, 0x43, 0x18, - 0xe0, 0x02, 0x68, 0x10, 0x08, 0x40, 0x00, 0x40, - 0x68, 0x13, 0x43, 0x18, 0x60, 0x10, 0x20, 0x00, - 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x98, 0xb4, 0x80, 0x1c, 0x07, - 0x1c, 0x0a, 0x4b, 0x06, 0x40, 0x1a, 0x4b, 0x06, - 0x40, 0x1f, 0x0b, 0x10, 0x02, 0x39, 0x43, 0x08, - 0x49, 0x04, 0x61, 0xc8, 0x20, 0x00, 0xbc, 0x80, - 0x47, 0x70, 0xe7, 0xfc, 0x01, 0xff, 0xf0, 0x00, - 0x00, 0xff, 0xf0, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x48, 0x01, 0x69, 0xc0, 0x47, 0x70, 0xe7, 0xfd, - 0x66, 0x00, 0x00, 0x80, 0x1c, 0x01, 0x48, 0x07, - 0x68, 0x02, 0x4b, 0x07, 0x40, 0x1a, 0x60, 0x02, - 0x23, 0x01, 0x05, 0x9b, 0x42, 0x99, 0xd1, 0x03, - 0x48, 0x02, 0x68, 0x02, 0x43, 0x0a, 0x60, 0x02, - 0x47, 0x70, 0x00, 0x00, 0x66, 0x00, 0x00, 0x2c, - 0xff, 0xbf, 0xff, 0xff, 0x1c, 0x01, 0x20, 0x33, - 0x06, 0x40, 0x67, 0x41, 0x47, 0x70, 0x1c, 0x01, - 0x20, 0x33, 0x06, 0x40, 0x67, 0x81, 0x47, 0x70, - 0xb5, 0x90, 0x4c, 0x21, 0x20, 0x01, 0x60, 0x20, - 0xf0, 0x12, 0xff, 0xa4, 0x48, 0x1f, 0x69, 0x84, - 0x27, 0x00, 0x2f, 0x04, 0xd3, 0x04, 0xe0, 0x06, - 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, - 0x21, 0x00, 0xc4, 0x02, 0xe7, 0xf8, 0x20, 0x00, - 0x49, 0x18, 0x69, 0x49, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x16, 0x69, 0x49, 0x60, 0x48, 0x20, 0x00, - 0x49, 0x14, 0x69, 0x49, 0x60, 0x88, 0x20, 0x00, - 0x49, 0x12, 0x69, 0x49, 0x60, 0xc8, 0x20, 0x00, - 0x49, 0x10, 0x69, 0x49, 0x61, 0x08, 0x20, 0x00, - 0x49, 0x0e, 0x69, 0x49, 0x61, 0x48, 0x20, 0x00, - 0x49, 0x0c, 0x69, 0x49, 0x61, 0x88, 0x20, 0x00, - 0x49, 0x0a, 0x69, 0x49, 0x61, 0xc8, 0x20, 0x00, - 0x49, 0x08, 0x69, 0x49, 0x62, 0x08, 0x20, 0x00, - 0x49, 0x06, 0x69, 0x49, 0x62, 0x48, 0x20, 0x18, - 0x49, 0x04, 0x69, 0x49, 0x62, 0x88, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xfb, - 0x70, 0x00, 0x00, 0x38, 0x2e, 0x08, 0x20, 0x28, - 0xb5, 0xff, 0x1c, 0x0f, 0xb0, 0x81, 0x9c, 0x01, - 0x69, 0x20, 0x28, 0x08, 0xd1, 0x01, 0x08, 0x7f, - 0x00, 0x7f, 0x6b, 0xa0, 0x9a, 0x03, 0x43, 0x50, - 0x19, 0xc6, 0x69, 0x20, 0x00, 0x80, 0x49, 0x34, - 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, - 0x08, 0x76, 0x69, 0x20, 0x00, 0x80, 0x49, 0x31, - 0x58, 0x08, 0x43, 0x70, 0x90, 0x00, 0x69, 0xa0, - 0x99, 0x00, 0x09, 0x49, 0x18, 0x45, 0x6b, 0xe0, - 0x28, 0x00, 0xd1, 0x02, 0x03, 0x28, 0x0b, 0x00, - 0xe0, 0x01, 0x02, 0x28, 0x0a, 0x00, 0x1c, 0x05, - 0xf0, 0x12, 0xff, 0x42, 0xf0, 0x12, 0xff, 0x1e, - 0x48, 0x27, 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, - 0x00, 0xc0, 0x49, 0x25, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x48, 0x23, 0x69, 0x80, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x49, 0x20, 0x69, 0x89, - 0x60, 0x08, 0x6b, 0xe0, 0x49, 0x1e, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x1e, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x1a, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x1c, 0x21, - 0x1c, 0x20, 0xf0, 0x00, 0xfe, 0x51, 0x48, 0x16, - 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x16, 0x40, 0x18, - 0x02, 0x29, 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x11, 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, - 0x48, 0x0f, 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, - 0x09, 0x40, 0x99, 0x00, 0x06, 0xc9, 0x43, 0x08, - 0x49, 0x0b, 0x69, 0xc9, 0x60, 0x08, 0x99, 0x04, - 0x1c, 0x20, 0x22, 0x00, 0xf0, 0x00, 0xfe, 0xbc, - 0xf0, 0x00, 0xff, 0x9d, 0xf0, 0x12, 0xff, 0x14, - 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xff, 0x1c, 0x0f, - 0xb0, 0x81, 0x9c, 0x01, 0x69, 0x20, 0x28, 0x08, - 0xd1, 0x01, 0x08, 0x7f, 0x00, 0x7f, 0x6b, 0xa0, - 0x9a, 0x03, 0x43, 0x50, 0x19, 0xc6, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x37, 0x58, 0x08, 0x23, 0x04, - 0x40, 0x18, 0xd0, 0x00, 0x08, 0x76, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x34, 0x58, 0x08, 0x43, 0x70, - 0x90, 0x00, 0x69, 0xa0, 0x99, 0x00, 0x09, 0x49, - 0x18, 0x45, 0x6b, 0xe0, 0x28, 0x00, 0xd1, 0x02, - 0x03, 0x28, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x28, - 0x0a, 0x00, 0x1c, 0x05, 0xf0, 0x12, 0xfe, 0xc0, - 0xf0, 0x12, 0xfe, 0x9c, 0x48, 0x2a, 0x69, 0x80, - 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x01, - 0x43, 0x18, 0x49, 0x27, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x6b, 0xe0, 0x49, 0x24, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x24, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x20, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x48, 0x1e, - 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, - 0x99, 0x00, 0x06, 0xc9, 0x43, 0x01, 0x48, 0x1a, - 0x69, 0x80, 0x60, 0x01, 0x1c, 0x21, 0x1c, 0x20, - 0xf0, 0x00, 0xfd, 0xca, 0x48, 0x16, 0x69, 0xc0, - 0x68, 0x00, 0x4b, 0x17, 0x40, 0x18, 0x02, 0x29, - 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, 0x49, 0x12, - 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, 0x48, 0x10, - 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, - 0x49, 0x0d, 0x69, 0xc9, 0x60, 0x08, 0xf0, 0x00, - 0xff, 0x1e, 0xf0, 0x12, 0xfe, 0x73, 0x48, 0x0a, - 0x6b, 0x81, 0x1c, 0x20, 0xf0, 0x00, 0xfe, 0xf0, - 0x9b, 0x04, 0x60, 0x18, 0xf0, 0x12, 0xfe, 0x8c, - 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xff, 0x1c, 0x0c, - 0x1c, 0x1f, 0xb0, 0x83, 0x9d, 0x03, 0x6b, 0x28, - 0x6a, 0xa9, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, - 0x19, 0xe0, 0x99, 0x00, 0x42, 0x88, 0xd9, 0x01, - 0x98, 0x00, 0x1b, 0x07, 0x69, 0x28, 0x28, 0x08, - 0xd1, 0x02, 0x08, 0x7f, 0x08, 0x64, 0x00, 0x64, - 0x6b, 0xa8, 0x9a, 0x05, 0x43, 0x50, 0x19, 0x01, - 0x91, 0x01, 0x69, 0x28, 0x00, 0x80, 0x49, 0x38, - 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, - 0x99, 0x01, 0x08, 0x49, 0x91, 0x01, 0x69, 0x28, - 0x00, 0x80, 0x49, 0x34, 0x58, 0x08, 0x99, 0x01, - 0x43, 0x48, 0x90, 0x02, 0x69, 0xa8, 0x99, 0x02, - 0x09, 0x49, 0x18, 0x46, 0x6b, 0xe8, 0x28, 0x00, - 0xd1, 0x02, 0x03, 0x30, 0x0b, 0x00, 0xe0, 0x01, - 0x02, 0x30, 0x0a, 0x00, 0x1c, 0x06, 0xf0, 0x12, - 0xfe, 0x27, 0xf0, 0x12, 0xfe, 0x03, 0x48, 0x2a, - 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, - 0x49, 0x27, 0x69, 0x89, 0x60, 0x08, 0x48, 0x26, - 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, - 0x23, 0x02, 0x43, 0x18, 0x49, 0x22, 0x69, 0x89, - 0x60, 0x08, 0x07, 0x40, 0x6b, 0xe8, 0x49, 0x20, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x1f, 0x40, 0x19, - 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, 0x49, 0x1c, - 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, - 0x1c, 0x29, 0x1c, 0x28, 0xf0, 0x00, 0xfd, 0x34, - 0x48, 0x17, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x18, - 0x40, 0x18, 0x02, 0x31, 0x0a, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x13, 0x69, 0xc9, 0x60, 0x08, - 0x01, 0x80, 0x48, 0x11, 0x69, 0xc0, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x99, 0x02, 0x06, 0xc9, - 0x43, 0x08, 0x49, 0x0d, 0x69, 0xc9, 0x60, 0x08, - 0x99, 0x0c, 0x1c, 0x28, 0x22, 0x02, 0xf0, 0x00, - 0xfd, 0x9f, 0x48, 0x09, 0x69, 0x40, 0x62, 0x07, - 0xf0, 0x00, 0xfe, 0x7d, 0xf0, 0x12, 0xfd, 0xf4, - 0x20, 0x00, 0xb0, 0x03, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x03, 0xe7, 0xf9, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xff, 0xb0, 0x81, - 0x9f, 0x01, 0x6b, 0x78, 0x6a, 0xf9, 0x1a, 0x40, - 0x30, 0x01, 0x90, 0x00, 0x9a, 0x03, 0x9b, 0x04, - 0x18, 0xd0, 0x99, 0x00, 0x42, 0x88, 0xd9, 0x03, - 0x98, 0x00, 0x9a, 0x03, 0x1a, 0x83, 0x93, 0x04, - 0x69, 0x38, 0x28, 0x08, 0xd1, 0x03, 0x99, 0x02, - 0x08, 0x49, 0x00, 0x49, 0x91, 0x02, 0x6b, 0xb8, - 0x9a, 0x03, 0x43, 0x50, 0x99, 0x02, 0x18, 0x45, - 0x69, 0x38, 0x00, 0x80, 0x49, 0x3c, 0x58, 0x08, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, 0x08, 0x6d, - 0x69, 0x38, 0x00, 0x80, 0x49, 0x39, 0x58, 0x08, - 0x1c, 0x06, 0x43, 0x6e, 0x69, 0xb8, 0x09, 0x71, - 0x18, 0x44, 0x6b, 0xf8, 0x28, 0x00, 0xd1, 0x02, - 0x03, 0x20, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x20, - 0x0a, 0x00, 0x1c, 0x04, 0xf0, 0x12, 0xfd, 0x90, - 0xf0, 0x12, 0xfd, 0x6c, 0x48, 0x30, 0x69, 0x80, - 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, 0x49, 0x2e, - 0x69, 0x89, 0x60, 0x08, 0x48, 0x2c, 0x69, 0x80, - 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x03, - 0x43, 0x18, 0x49, 0x29, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x6b, 0xf8, 0x49, 0x26, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x26, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x22, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x1c, 0x39, - 0x1c, 0x38, 0xf0, 0x00, 0xfc, 0x9d, 0x99, 0x0a, - 0x1c, 0x38, 0x22, 0x03, 0xf0, 0x00, 0xfd, 0x20, - 0x69, 0xf8, 0x49, 0x1b, 0x69, 0x49, 0x61, 0x08, - 0x48, 0x19, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x1a, - 0x40, 0x18, 0x02, 0x21, 0x0a, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x15, 0x69, 0xc9, 0x60, 0x08, - 0x01, 0x80, 0x48, 0x13, 0x69, 0xc0, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x06, 0xf1, 0x43, 0x08, - 0x49, 0x0f, 0x69, 0xc9, 0x60, 0x08, 0x48, 0x0e, - 0x69, 0x40, 0x61, 0x84, 0x06, 0xf0, 0x0e, 0xc0, - 0x49, 0x0b, 0x69, 0x49, 0x61, 0x48, 0x9b, 0x04, - 0x48, 0x09, 0x69, 0x40, 0x62, 0x43, 0xf0, 0x00, - 0xfd, 0xda, 0xf0, 0x12, 0xfd, 0x51, 0x20, 0x00, - 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, 0x00, 0x00, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xf3, 0xb0, 0x86, - 0x9f, 0x06, 0x99, 0x07, 0x68, 0x8c, 0x99, 0x07, - 0x68, 0xc8, 0x90, 0x03, 0x99, 0x07, 0x68, 0x0d, - 0x99, 0x07, 0x68, 0x49, 0x91, 0x02, 0x6b, 0x78, - 0x6a, 0xf9, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x01, - 0x6b, 0x38, 0x6a, 0xb9, 0x1a, 0x40, 0x30, 0x01, - 0x90, 0x00, 0x99, 0x02, 0x98, 0x03, 0x18, 0x08, - 0x99, 0x01, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x01, - 0x99, 0x02, 0x1a, 0x40, 0x90, 0x03, 0x19, 0x28, - 0x99, 0x00, 0x42, 0x88, 0xd9, 0x01, 0x98, 0x00, - 0x1b, 0x44, 0x69, 0x38, 0x28, 0x08, 0xd1, 0x02, - 0x08, 0x64, 0x08, 0x6d, 0x00, 0x6d, 0x6b, 0xb8, - 0x99, 0x02, 0x43, 0x48, 0x19, 0x41, 0x91, 0x04, - 0x69, 0x38, 0x00, 0x80, 0x49, 0x41, 0x58, 0x08, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, 0x99, 0x04, - 0x08, 0x49, 0x91, 0x04, 0x69, 0x38, 0x00, 0x80, - 0x49, 0x3d, 0x58, 0x08, 0x99, 0x04, 0x43, 0x48, - 0x90, 0x05, 0x69, 0xb8, 0x99, 0x05, 0x09, 0x49, - 0x18, 0x46, 0x6b, 0xf8, 0x28, 0x00, 0xd1, 0x02, - 0x03, 0x30, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x30, - 0x0a, 0x00, 0x1c, 0x06, 0xf0, 0x12, 0xfc, 0xd4, - 0xf0, 0x12, 0xfc, 0xb0, 0x48, 0x33, 0x69, 0x80, - 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, 0x49, 0x31, - 0x69, 0x89, 0x60, 0x08, 0x48, 0x2f, 0x69, 0x80, - 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x04, - 0x43, 0x18, 0x49, 0x2c, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x48, 0x2a, 0x69, 0xc0, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x99, 0x05, 0x06, 0xc9, - 0x43, 0x08, 0x49, 0x26, 0x69, 0xc9, 0x60, 0x08, - 0x48, 0x24, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x24, - 0x40, 0x18, 0x02, 0x31, 0x0a, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x20, 0x69, 0xc9, 0x60, 0x08, - 0x01, 0x80, 0x1c, 0x39, 0x1c, 0x38, 0xf0, 0x00, - 0xfb, 0xd7, 0x6b, 0xf8, 0x49, 0x1b, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x1c, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x17, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x99, 0x07, - 0x69, 0x09, 0x1c, 0x38, 0x22, 0x04, 0xf0, 0x00, - 0xfc, 0x4b, 0x69, 0xf8, 0x49, 0x11, 0x69, 0x49, - 0x61, 0x08, 0x98, 0x05, 0x06, 0xc0, 0x0e, 0xc0, - 0x49, 0x0e, 0x69, 0x49, 0x61, 0x48, 0x48, 0x0d, - 0x69, 0x40, 0x61, 0x86, 0x48, 0x0b, 0x69, 0x40, - 0x62, 0x04, 0x98, 0x03, 0x49, 0x09, 0x69, 0x49, - 0x62, 0x48, 0xf0, 0x00, 0xfd, 0x18, 0xf0, 0x12, - 0xfc, 0x8f, 0x20, 0x00, 0xb0, 0x06, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x06, - 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x03, 0xa8, 0xc8, 0x2e, 0x08, 0x20, 0x28, - 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xdf, 0xff, - 0xb5, 0xff, 0x9d, 0x09, 0xb0, 0x81, 0x98, 0x0b, - 0x06, 0x02, 0x0e, 0x12, 0x92, 0x00, 0xb0, 0x93, - 0x98, 0x14, 0x90, 0x12, 0x99, 0x15, 0x91, 0x11, - 0xaf, 0x0c, 0x1c, 0x38, 0x9a, 0x16, 0xca, 0x5e, - 0xc0, 0x5e, 0x68, 0x39, 0x91, 0x04, 0x68, 0x79, - 0x91, 0x03, 0x98, 0x12, 0x99, 0x11, 0x42, 0x88, - 0xd1, 0x73, 0x99, 0x03, 0x42, 0x8d, 0xd9, 0x71, - 0x68, 0xb8, 0x90, 0x01, 0x68, 0xf8, 0x90, 0x02, - 0x99, 0x11, 0x6b, 0x48, 0x6a, 0xc9, 0x1a, 0x40, - 0x1c, 0x44, 0x99, 0x11, 0x6b, 0x08, 0x6a, 0x89, - 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, 0x98, 0x02, - 0x18, 0x28, 0x42, 0xa0, 0xd9, 0x01, 0x1b, 0x61, - 0x91, 0x02, 0x9b, 0x17, 0x98, 0x01, 0x18, 0x18, - 0x99, 0x00, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x00, - 0x9b, 0x17, 0x1a, 0xc0, 0x90, 0x01, 0x98, 0x01, - 0x60, 0xb8, 0x98, 0x02, 0x60, 0xf8, 0x98, 0x12, - 0x69, 0xc0, 0x90, 0x0a, 0x98, 0x12, 0x6b, 0x80, - 0x99, 0x03, 0x43, 0x48, 0x99, 0x04, 0x18, 0x41, - 0x91, 0x05, 0x98, 0x12, 0x69, 0x00, 0x00, 0x80, - 0x49, 0x48, 0x58, 0x08, 0x99, 0x05, 0x43, 0x48, - 0x90, 0x0b, 0x98, 0x12, 0x69, 0x80, 0x99, 0x0b, - 0x09, 0x49, 0x18, 0x41, 0x91, 0x07, 0x98, 0x0a, - 0x99, 0x02, 0x43, 0x48, 0x90, 0x0b, 0x98, 0x0b, - 0x09, 0x40, 0x99, 0x07, 0x18, 0x40, 0x90, 0x06, - 0x98, 0x06, 0x0b, 0xc0, 0x99, 0x07, 0x0b, 0xc9, - 0x1a, 0x40, 0x90, 0x09, 0x98, 0x09, 0x28, 0x00, - 0xd0, 0x56, 0x9e, 0x02, 0x98, 0x06, 0x04, 0x40, - 0x0c, 0x40, 0x01, 0x41, 0x91, 0x08, 0x99, 0x08, - 0x98, 0x0a, 0xf0, 0x04, 0xf9, 0x17, 0x1c, 0x04, - 0x2c, 0x00, 0xd1, 0x00, 0x34, 0x01, 0x99, 0x03, - 0x98, 0x02, 0x18, 0x08, 0x1b, 0x00, 0x60, 0x78, - 0x60, 0xfc, 0x98, 0x02, 0x18, 0x28, 0x1b, 0x05, - 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, - 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, - 0xf8, 0x57, 0xb0, 0x02, 0x1b, 0x36, 0x98, 0x09, - 0xe0, 0x01, 0xe0, 0x3c, 0xe0, 0x3b, 0x38, 0x01, - 0x90, 0x09, 0x98, 0x09, 0x28, 0x00, 0xd0, 0x1a, - 0x98, 0x0a, 0x21, 0x01, 0x03, 0x09, 0xf0, 0x04, - 0xf8, 0xf1, 0x1c, 0x04, 0x68, 0x78, 0x1b, 0x80, - 0x60, 0x78, 0x60, 0xfc, 0x68, 0xf8, 0x1a, 0x2d, - 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, - 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, - 0xf8, 0x37, 0xb0, 0x02, 0x1b, 0x36, 0x98, 0x09, - 0x38, 0x01, 0x90, 0x09, 0xe7, 0xe1, 0x68, 0x78, - 0x1b, 0x80, 0x60, 0x78, 0x60, 0xfe, 0x68, 0xf8, - 0x1a, 0x2d, 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, - 0x9b, 0x19, 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, - 0xf0, 0x00, 0xf8, 0x22, 0xb0, 0x02, 0xe0, 0x09, - 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, - 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, - 0xf8, 0x17, 0xb0, 0x02, 0xe0, 0x09, 0x9a, 0x13, - 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, 0x1c, 0x3a, - 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, 0xf8, 0xb8, - 0xb0, 0x02, 0x20, 0x00, 0xb0, 0x14, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x13, - 0xb0, 0x01, 0xe7, 0xf8, 0x2e, 0x03, 0xa8, 0xc8, - 0xb5, 0xff, 0x9d, 0x09, 0xb0, 0x81, 0x98, 0x0b, - 0x06, 0x02, 0x0e, 0x12, 0x92, 0x00, 0xb0, 0x92, - 0x98, 0x13, 0x90, 0x11, 0x99, 0x14, 0x91, 0x10, - 0xaf, 0x0b, 0x1c, 0x38, 0x9a, 0x15, 0xca, 0x5e, - 0xc0, 0x5e, 0x68, 0x38, 0x90, 0x03, 0x68, 0x78, - 0x90, 0x02, 0x68, 0xb8, 0x90, 0x00, 0x68, 0xf9, - 0x91, 0x01, 0x98, 0x11, 0x69, 0xc0, 0x90, 0x09, - 0x99, 0x10, 0x6b, 0x88, 0x43, 0x68, 0x9b, 0x16, - 0x18, 0xc1, 0x91, 0x04, 0x99, 0x10, 0x69, 0x08, - 0x00, 0x80, 0x49, 0x42, 0x58, 0x08, 0x99, 0x04, - 0x43, 0x48, 0x90, 0x0a, 0x99, 0x10, 0x69, 0x88, - 0x99, 0x0a, 0x09, 0x49, 0x18, 0x40, 0x90, 0x06, - 0x98, 0x09, 0x99, 0x01, 0x43, 0x48, 0x90, 0x0a, - 0x98, 0x0a, 0x09, 0x40, 0x99, 0x06, 0x18, 0x40, - 0x90, 0x05, 0x98, 0x05, 0x0b, 0xc0, 0x99, 0x06, - 0x0b, 0xc9, 0x1a, 0x40, 0x90, 0x08, 0x98, 0x08, - 0x28, 0x00, 0xd0, 0x53, 0x9e, 0x01, 0x98, 0x05, - 0x04, 0x40, 0x0c, 0x40, 0x01, 0x41, 0x91, 0x07, - 0x99, 0x07, 0x98, 0x09, 0xf0, 0x04, 0xf8, 0x5e, - 0x1c, 0x04, 0x2c, 0x00, 0xd1, 0x00, 0x34, 0x01, - 0x98, 0x02, 0x99, 0x01, 0x18, 0x40, 0x1b, 0x00, - 0x60, 0x78, 0x60, 0xfc, 0x99, 0x01, 0x18, 0x68, - 0x1b, 0x05, 0x9a, 0x12, 0x1c, 0x29, 0xb4, 0x06, - 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, 0x98, 0x15, - 0xf0, 0x00, 0xf8, 0x4a, 0xb0, 0x02, 0x1b, 0x36, - 0x98, 0x08, 0x38, 0x01, 0x90, 0x08, 0x98, 0x08, - 0x28, 0x00, 0xd0, 0x1a, 0x98, 0x09, 0x21, 0x01, - 0x03, 0x09, 0xf0, 0x04, 0xf8, 0x3b, 0x1c, 0x04, - 0x68, 0x78, 0x1b, 0x80, 0x60, 0x78, 0x60, 0xfc, - 0x68, 0xf8, 0x1a, 0x2d, 0x9a, 0x12, 0x1c, 0x29, - 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, - 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x2d, 0xb0, 0x02, - 0x1b, 0x36, 0x98, 0x08, 0x38, 0x01, 0x90, 0x08, - 0xe7, 0xe1, 0x68, 0x78, 0x1b, 0x80, 0x60, 0x78, - 0x60, 0xfe, 0x68, 0xf8, 0x1a, 0x2d, 0x9a, 0x12, - 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, - 0x99, 0x16, 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x18, - 0xb0, 0x02, 0xe0, 0x09, 0x9a, 0x12, 0x1c, 0x29, - 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, - 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x0d, 0xb0, 0x02, - 0x20, 0x00, 0xb0, 0x13, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x12, 0xb0, 0x01, - 0xe7, 0xf8, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0xc8, - 0xb5, 0xff, 0xb0, 0x81, 0x98, 0x0b, 0x06, 0x02, - 0x0e, 0x12, 0x92, 0x00, 0xb0, 0x8e, 0x9f, 0x0f, - 0x9c, 0x10, 0x9a, 0x11, 0x68, 0x10, 0x90, 0x07, - 0x9a, 0x11, 0x68, 0x50, 0x90, 0x06, 0x9a, 0x11, - 0x68, 0x91, 0x91, 0x08, 0x9a, 0x11, 0x68, 0xd0, - 0x90, 0x09, 0x6b, 0x60, 0x6a, 0xe1, 0x1a, 0x40, - 0x30, 0x01, 0x90, 0x01, 0x6b, 0x20, 0x6a, 0xa1, - 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, 0x99, 0x18, - 0x98, 0x09, 0x18, 0x08, 0x99, 0x01, 0x42, 0x88, - 0xd9, 0x03, 0x98, 0x01, 0x99, 0x18, 0x1a, 0x41, - 0x91, 0x09, 0x9b, 0x12, 0x99, 0x08, 0x18, 0x58, - 0x99, 0x00, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x00, - 0x9b, 0x12, 0x1a, 0xc1, 0x91, 0x08, 0x22, 0x00, - 0x92, 0x05, 0x42, 0xa7, 0xd1, 0x20, 0x99, 0x18, - 0x98, 0x06, 0x42, 0x81, 0xd9, 0x0c, 0x22, 0x02, - 0x92, 0x05, 0x99, 0x06, 0x98, 0x09, 0x18, 0x08, - 0x1e, 0x41, 0x91, 0x06, 0x99, 0x18, 0x98, 0x09, - 0x18, 0x08, 0x1e, 0x41, 0x91, 0x18, 0xe0, 0x0f, - 0x9b, 0x12, 0x98, 0x07, 0x42, 0x83, 0xd9, 0x0b, - 0x22, 0x01, 0x92, 0x05, 0x98, 0x07, 0x99, 0x08, - 0x18, 0x40, 0x38, 0x01, 0x90, 0x07, 0x9b, 0x12, - 0x99, 0x08, 0x18, 0x58, 0x1e, 0x43, 0x93, 0x12, - 0x69, 0x38, 0x28, 0x08, 0xd1, 0x0a, 0x99, 0x08, - 0x08, 0x49, 0x91, 0x08, 0x98, 0x07, 0x08, 0x40, - 0x00, 0x40, 0x90, 0x07, 0x9b, 0x12, 0x08, 0x5b, - 0x00, 0x5b, 0x93, 0x12, 0x69, 0x38, 0x00, 0x80, - 0x49, 0xc6, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, - 0x08, 0x80, 0x90, 0x03, 0x69, 0x20, 0x00, 0x80, - 0x49, 0xc2, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, - 0x08, 0x80, 0x90, 0x02, 0x6b, 0xb8, 0x99, 0x06, - 0x43, 0x48, 0x99, 0x07, 0x18, 0x41, 0x91, 0x04, - 0x98, 0x03, 0x28, 0x00, 0xd0, 0x02, 0x99, 0x04, - 0x08, 0x49, 0x91, 0x04, 0x69, 0x38, 0x00, 0x80, - 0x49, 0xb9, 0x58, 0x08, 0x99, 0x04, 0x1c, 0x06, - 0x43, 0x4e, 0x6b, 0xa0, 0x99, 0x18, 0x43, 0x48, - 0x9b, 0x12, 0x18, 0xc1, 0x91, 0x04, 0x98, 0x02, - 0x28, 0x00, 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, - 0x91, 0x04, 0x69, 0x20, 0x00, 0x80, 0x49, 0xb0, - 0x58, 0x08, 0x99, 0x04, 0x1c, 0x05, 0x43, 0x4d, - 0x9a, 0x05, 0x2a, 0x01, 0xd1, 0x3d, 0x69, 0x38, - 0x28, 0x08, 0xd0, 0x3a, 0x69, 0x38, 0x28, 0x09, - 0xd0, 0x02, 0x69, 0x38, 0x28, 0x0a, 0xd1, 0x0a, - 0x36, 0x10, 0x69, 0xb8, 0x09, 0x71, 0x18, 0x41, - 0x91, 0x0b, 0x06, 0xf0, 0x0e, 0xc0, 0x1d, 0xc1, - 0x31, 0x01, 0x91, 0x0a, 0xe0, 0x0b, 0x69, 0xb8, - 0x09, 0x71, 0x18, 0x41, 0x91, 0x0b, 0x69, 0x38, - 0x00, 0x80, 0x49, 0x9f, 0x58, 0x08, 0x19, 0x86, - 0x06, 0xf1, 0x0e, 0xc9, 0x91, 0x0a, 0x69, 0x20, - 0x28, 0x09, 0xd0, 0x02, 0x69, 0x20, 0x28, 0x0a, - 0xd1, 0x0a, 0x35, 0x10, 0x69, 0xa0, 0x09, 0x69, - 0x18, 0x41, 0x91, 0x0d, 0x06, 0xe8, 0x0e, 0xc0, - 0x1d, 0xc1, 0x31, 0x01, 0x91, 0x0c, 0xe0, 0x0b, - 0x69, 0xa0, 0x09, 0x69, 0x18, 0x41, 0x91, 0x0d, - 0x69, 0x20, 0x00, 0x80, 0x49, 0x90, 0x58, 0x08, - 0x19, 0x45, 0x06, 0xe9, 0x0e, 0xc9, 0x91, 0x0c, - 0xe0, 0x0d, 0x69, 0xb8, 0x09, 0x71, 0x18, 0x41, - 0x91, 0x0b, 0x69, 0xa0, 0x09, 0x69, 0x18, 0x41, - 0x91, 0x0d, 0x06, 0xf1, 0x0e, 0xc9, 0x91, 0x0a, - 0x06, 0xe9, 0x0e, 0xc9, 0x91, 0x0c, 0x6b, 0xf8, - 0x28, 0x00, 0xd1, 0x03, 0x99, 0x0b, 0x03, 0x09, - 0x0b, 0x09, 0xe0, 0x02, 0x99, 0x0b, 0x02, 0x09, - 0x0a, 0x09, 0x91, 0x0b, 0x6b, 0xe0, 0x28, 0x00, - 0xd1, 0x03, 0x99, 0x0d, 0x03, 0x09, 0x0b, 0x09, - 0xe0, 0x02, 0x99, 0x0d, 0x02, 0x09, 0x0a, 0x09, - 0x91, 0x0d, 0xf0, 0x12, 0xf9, 0xd5, 0xf0, 0x12, - 0xf9, 0xb1, 0x48, 0x7a, 0x69, 0x80, 0x68, 0x00, - 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x05, 0x43, 0x18, - 0x49, 0x76, 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, - 0x1c, 0x21, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xf8, - 0x98, 0x03, 0x28, 0x00, 0xd0, 0x18, 0x98, 0x02, - 0x28, 0x00, 0xd0, 0x15, 0x48, 0x6f, 0x69, 0x80, - 0x68, 0x00, 0x23, 0x08, 0x43, 0xdb, 0x40, 0x18, - 0x49, 0x6c, 0x69, 0x89, 0x60, 0x08, 0x07, 0x00, - 0x48, 0x6a, 0x69, 0x80, 0x68, 0x00, 0x4b, 0x6a, - 0x40, 0x18, 0x49, 0x68, 0x69, 0x89, 0x60, 0x08, - 0x05, 0xc0, 0x99, 0x08, 0x08, 0x49, 0x91, 0x08, - 0x6b, 0xf8, 0x49, 0x64, 0x69, 0x89, 0x68, 0x09, - 0x4b, 0x64, 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x40, - 0x43, 0x08, 0x49, 0x60, 0x69, 0x89, 0x60, 0x08, - 0x04, 0x40, 0x0f, 0xc0, 0x6b, 0xe0, 0x49, 0x5d, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x5e, 0x40, 0x19, - 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, 0x49, 0x59, - 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, - 0x68, 0x38, 0x28, 0x00, 0xd0, 0x0d, 0x79, 0x38, - 0x49, 0x54, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x57, - 0x40, 0x19, 0x03, 0xc0, 0x43, 0x08, 0x49, 0x51, - 0x69, 0x89, 0x60, 0x08, 0x02, 0x40, 0x0e, 0x00, - 0xe0, 0x0d, 0x6a, 0x78, 0x78, 0x00, 0x49, 0x4d, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x4f, 0x40, 0x19, - 0x03, 0xc0, 0x43, 0x08, 0x49, 0x49, 0x69, 0x89, - 0x60, 0x08, 0x02, 0x40, 0x0e, 0x00, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x45, 0x58, 0x08, 0x99, 0x08, - 0x43, 0x48, 0x28, 0x40, 0xd9, 0x01, 0x21, 0x00, - 0xe0, 0x00, 0x21, 0x01, 0x1c, 0x08, 0x49, 0x41, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x44, 0x40, 0x19, - 0x07, 0xc2, 0x09, 0x52, 0x43, 0x11, 0x4a, 0x3d, - 0x69, 0x92, 0x60, 0x11, 0x01, 0x49, 0x0f, 0xc9, - 0x49, 0x3a, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x3f, - 0x40, 0x19, 0x9a, 0x05, 0x07, 0x92, 0x0f, 0x92, - 0x05, 0xd2, 0x43, 0x11, 0x4a, 0x35, 0x69, 0x92, - 0x60, 0x11, 0x01, 0xc9, 0x49, 0x33, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x39, 0x40, 0x19, 0x9a, 0x0e, - 0x07, 0xd2, 0x09, 0x92, 0x43, 0x11, 0x4a, 0x2f, - 0x69, 0x92, 0x60, 0x11, 0x01, 0x89, 0x69, 0xf9, - 0x4a, 0x2c, 0x69, 0x52, 0x60, 0x11, 0x49, 0x2b, - 0x69, 0x89, 0x68, 0x09, 0x01, 0x49, 0x09, 0x49, - 0x9a, 0x0a, 0x06, 0xd2, 0x43, 0x11, 0x4a, 0x27, - 0x69, 0x92, 0x60, 0x11, 0x99, 0x0a, 0x4a, 0x25, - 0x69, 0x52, 0x60, 0x51, 0x99, 0x0b, 0x4a, 0x23, - 0x69, 0x52, 0x60, 0x91, 0x99, 0x0b, 0x4a, 0x21, - 0x69, 0x52, 0x60, 0xd1, 0x69, 0xe1, 0x4a, 0x1f, - 0x69, 0x52, 0x61, 0x11, 0x49, 0x1d, 0x69, 0xc9, - 0x68, 0x09, 0x01, 0x49, 0x09, 0x49, 0x9a, 0x0c, - 0x06, 0xd2, 0x43, 0x11, 0x4a, 0x19, 0x69, 0xd2, - 0x60, 0x11, 0x99, 0x0c, 0x4a, 0x17, 0x69, 0x52, - 0x61, 0x51, 0x99, 0x0d, 0x4a, 0x15, 0x69, 0x52, - 0x61, 0x91, 0x99, 0x0d, 0x4a, 0x13, 0x69, 0x52, - 0x61, 0xd1, 0x99, 0x09, 0x4a, 0x11, 0x69, 0x52, - 0x62, 0x51, 0x99, 0x08, 0x4a, 0x0f, 0x69, 0x52, - 0x62, 0x11, 0x68, 0x38, 0x28, 0x00, 0xd0, 0x05, - 0x48, 0x14, 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, - 0x60, 0x01, 0xe0, 0x02, 0x48, 0x11, 0x21, 0x00, - 0x60, 0x01, 0xf0, 0x00, 0xf9, 0x8c, 0xf0, 0x12, - 0xf9, 0x03, 0x20, 0x00, 0xb0, 0x0f, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x0e, - 0xb0, 0x01, 0xe7, 0xf8, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x03, 0xa8, 0xc8, 0x2e, 0x08, 0x20, 0x28, - 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff, - 0xff, 0xff, 0xdf, 0xff, 0xff, 0x80, 0x7f, 0xff, - 0xfb, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, - 0xfd, 0xff, 0xff, 0xff, 0x68, 0x00, 0x00, 0x40, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x69, 0x38, - 0x00, 0x80, 0x49, 0x3c, 0x58, 0x08, 0x23, 0x18, - 0x40, 0x18, 0x08, 0xc0, 0x49, 0x3a, 0x69, 0x89, - 0x68, 0x09, 0x23, 0xc0, 0x43, 0xdb, 0x40, 0x19, - 0x07, 0x80, 0x0f, 0x80, 0x01, 0x80, 0x43, 0x08, - 0x49, 0x35, 0x69, 0x89, 0x60, 0x08, 0x06, 0x00, - 0x0f, 0x80, 0x69, 0x38, 0x00, 0x80, 0x49, 0x31, - 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0x08, 0x80, - 0x49, 0x2f, 0x69, 0x89, 0x68, 0x09, 0x23, 0x08, - 0x43, 0xdb, 0x40, 0x19, 0x07, 0xc0, 0x0f, 0x00, - 0x43, 0x08, 0x49, 0x2b, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x00, 0x0f, 0xc0, 0x69, 0x38, 0x00, 0x80, - 0x49, 0x26, 0x58, 0x08, 0x49, 0x26, 0x69, 0x89, - 0x68, 0x09, 0x23, 0x30, 0x43, 0xdb, 0x40, 0x19, - 0x07, 0x80, 0x0f, 0x80, 0x01, 0x00, 0x43, 0x08, - 0x49, 0x21, 0x69, 0x89, 0x60, 0x08, 0x06, 0x80, - 0x0f, 0x80, 0x69, 0x10, 0x00, 0x80, 0x49, 0x1d, - 0x58, 0x08, 0x23, 0x18, 0x40, 0x18, 0x08, 0xc0, - 0x49, 0x1b, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x1b, - 0x40, 0x19, 0x07, 0x80, 0x0f, 0x80, 0x02, 0xc0, - 0x43, 0x08, 0x49, 0x17, 0x69, 0x89, 0x60, 0x08, - 0x04, 0xc0, 0x0f, 0x80, 0x69, 0x10, 0x00, 0x80, - 0x49, 0x12, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, - 0x08, 0x80, 0x49, 0x11, 0x69, 0x89, 0x68, 0x09, - 0x4b, 0x11, 0x40, 0x19, 0x07, 0xc0, 0x0d, 0xc0, - 0x43, 0x08, 0x49, 0x0d, 0x69, 0x89, 0x60, 0x08, - 0x05, 0xc0, 0x0f, 0xc0, 0x69, 0x10, 0x00, 0x80, - 0x49, 0x08, 0x58, 0x08, 0x49, 0x08, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x0a, 0x40, 0x19, 0x07, 0x80, - 0x0f, 0x80, 0x02, 0x40, 0x43, 0x08, 0x49, 0x04, - 0x69, 0x89, 0x60, 0x08, 0x05, 0x40, 0x0f, 0x80, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xe7, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xff, - 0xb4, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x15, - 0x2d, 0x00, 0xd0, 0x06, 0x2d, 0x02, 0xd0, 0x21, - 0x2d, 0x03, 0xd0, 0x02, 0x2d, 0x04, 0xd0, 0x1d, - 0xe0, 0xa3, 0x69, 0x20, 0x28, 0x0b, 0xd2, 0x14, - 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x05, 0x07, 0x09, 0x0b, 0x05, 0x07, 0x09, 0x0b, - 0x0d, 0x0e, 0x0e, 0x00, 0x07, 0xff, 0xe0, 0x09, - 0x07, 0xbf, 0xe0, 0x07, 0x07, 0x3f, 0xe0, 0x05, - 0x06, 0x3f, 0xe0, 0x03, 0xe0, 0x02, 0x02, 0x3f, - 0xe0, 0x00, 0xe7, 0xff, 0x48, 0x46, 0x6a, 0x00, - 0x60, 0x07, 0xe0, 0x86, 0x69, 0x20, 0x28, 0x0b, - 0xd2, 0x73, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x06, 0x15, 0x24, 0x33, - 0x06, 0x15, 0x24, 0x33, 0x41, 0x45, 0x45, 0x00, - 0x01, 0xff, 0x48, 0x3d, 0x6a, 0x40, 0x68, 0x00, - 0x4b, 0x3c, 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, - 0x00, 0x89, 0x43, 0x08, 0x49, 0x38, 0x6a, 0x49, - 0x60, 0x08, 0x05, 0x80, 0xe0, 0x69, 0x01, 0xbf, - 0x48, 0x35, 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x35, - 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x31, 0x6a, 0x49, 0x60, 0x08, - 0x05, 0x80, 0xe0, 0x5a, 0x01, 0x3f, 0x48, 0x2e, - 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x2d, 0x40, 0x18, - 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x29, 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, - 0xe0, 0x4b, 0x48, 0x27, 0x6a, 0x40, 0x68, 0x00, - 0x4b, 0x26, 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, - 0x00, 0x89, 0x43, 0x08, 0x49, 0x22, 0x6a, 0x49, - 0x60, 0x08, 0x05, 0x80, 0xe0, 0x3d, 0x48, 0x20, - 0x6a, 0x00, 0x60, 0x07, 0xe0, 0x39, 0x48, 0x1e, - 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x1d, 0x40, 0x18, - 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x19, 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, - 0x48, 0x17, 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x18, - 0x40, 0x18, 0x21, 0xff, 0x02, 0x09, 0x40, 0x39, - 0x00, 0x89, 0x43, 0x08, 0x49, 0x12, 0x6a, 0x49, - 0x60, 0x08, 0x03, 0x80, 0x48, 0x10, 0x6a, 0x40, - 0x68, 0x00, 0x4b, 0x12, 0x40, 0x18, 0x21, 0xff, - 0x04, 0x09, 0x40, 0x39, 0x00, 0x89, 0x43, 0x01, - 0x48, 0x0b, 0x6a, 0x40, 0x60, 0x01, 0x01, 0x88, - 0xe0, 0x00, 0xe0, 0x0d, 0x48, 0x08, 0x6a, 0x40, - 0x68, 0x00, 0x01, 0x80, 0x09, 0x80, 0x21, 0x3f, - 0x06, 0x09, 0x40, 0x39, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x03, 0x6a, 0x49, 0x60, 0x08, 0xe0, 0x00, - 0xe7, 0xff, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xfc, 0x03, - 0xff, 0xfc, 0x03, 0xff, 0xfc, 0x03, 0xff, 0xff, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x69, 0x38, - 0x28, 0x0b, 0xd2, 0x1a, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x05, 0x08, 0x0b, 0x0e, - 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x13, 0x13, 0x00, - 0x68, 0x10, 0x0f, 0xc1, 0xe0, 0x0f, 0x68, 0x10, - 0x0f, 0x81, 0xe0, 0x0c, 0x68, 0x10, 0x0f, 0x01, - 0xe0, 0x09, 0x68, 0x10, 0x0e, 0x01, 0xe0, 0x06, - 0x68, 0x11, 0xe0, 0x04, 0x68, 0x10, 0x0a, 0x01, - 0xe0, 0x01, 0x68, 0x11, 0xe7, 0xff, 0x1c, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, 0x48, 0x14, - 0x69, 0x80, 0x68, 0x00, 0x49, 0x12, 0x6a, 0x89, - 0x60, 0x08, 0x48, 0x11, 0x69, 0xc0, 0x68, 0x00, - 0x49, 0x0f, 0x6a, 0xc9, 0x60, 0x08, 0x48, 0x0e, - 0x6a, 0x00, 0x68, 0x00, 0x49, 0x0c, 0x6b, 0x09, - 0x60, 0x08, 0x48, 0x0b, 0x6a, 0x40, 0x68, 0x00, - 0x49, 0x09, 0x6b, 0x49, 0x60, 0x08, 0x20, 0x01, - 0x49, 0x07, 0x6b, 0xc9, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0x49, 0x05, - 0x60, 0x48, 0x20, 0x00, 0x49, 0x03, 0x60, 0x88, - 0x20, 0x00, 0x49, 0x02, 0x60, 0xc8, 0x47, 0x70, - 0x2e, 0x08, 0x20, 0x28, 0x2e, 0x08, 0x20, 0x2c, - 0xb4, 0x90, 0x1c, 0x01, 0x29, 0x00, 0xd1, 0x02, - 0x20, 0x8d, 0xbc, 0x90, 0x47, 0x70, 0x4c, 0x08, - 0x1c, 0x0f, 0x22, 0x00, 0x23, 0xff, 0x33, 0x01, - 0x42, 0x9a, 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, - 0xe7, 0xf8, 0xcf, 0x08, 0xc4, 0x08, 0xe7, 0xfa, - 0x20, 0x00, 0xe7, 0xee, 0xe7, 0xed, 0x00, 0x00, - 0x68, 0x00, 0x18, 0x00, 0xb4, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x13, 0x06, 0x1a, 0x0e, 0x12, - 0x1c, 0x21, 0x60, 0x0f, 0x71, 0x0a, 0x20, 0x00, - 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, - 0xb5, 0x00, 0x48, 0x1d, 0x69, 0x00, 0x23, 0x04, - 0x40, 0x18, 0xd0, 0x19, 0x48, 0x1a, 0x69, 0x00, - 0x23, 0x02, 0x40, 0x18, 0xd0, 0x09, 0x48, 0x18, - 0x69, 0x40, 0x49, 0x18, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x17, 0x68, 0x09, 0x70, 0x08, - 0xe0, 0x03, 0x20, 0x00, 0x49, 0x14, 0x68, 0x09, - 0x70, 0x08, 0x48, 0x14, 0x78, 0x01, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x08, 0xff, 0x9f, 0xe0, 0x18, - 0x48, 0x11, 0x6a, 0x80, 0x23, 0x02, 0x40, 0x18, - 0xd0, 0x13, 0x48, 0x0f, 0x6a, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0xd0, 0x04, 0x20, 0xfe, 0x49, 0x0d, - 0x68, 0x09, 0x70, 0x08, 0xe0, 0x03, 0x20, 0x0e, - 0x49, 0x0a, 0x68, 0x09, 0x70, 0x08, 0x48, 0x0a, - 0x78, 0x01, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x08, - 0xff, 0x85, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x6e, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0xb9, 0x98, - 0x2e, 0x08, 0xb9, 0x9c, 0x2e, 0x08, 0xb9, 0xa0, - 0x6e, 0x00, 0x0e, 0x00, 0x2e, 0x08, 0xb9, 0xa4, - 0x2e, 0x08, 0xb9, 0xa8, 0xb5, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x2e, 0x0e, 0x36, - 0x2e, 0x1f, 0xdd, 0x03, 0x20, 0xaf, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x49, 0x08, 0x20, 0x0d, - 0xf0, 0x08, 0xff, 0x76, 0x48, 0x07, 0x60, 0x04, - 0x20, 0x00, 0x49, 0x06, 0x68, 0x09, 0x70, 0x08, - 0x48, 0x05, 0x60, 0x07, 0x48, 0x05, 0x70, 0x06, - 0x20, 0x00, 0xe7, 0xec, 0xe7, 0xeb, 0x00, 0x00, - 0x2e, 0x01, 0xa9, 0xed, 0x2e, 0x08, 0xb9, 0x9c, - 0x2e, 0x08, 0xb9, 0x98, 0x2e, 0x08, 0xb9, 0xa0, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x25, - 0x0e, 0x2d, 0x2d, 0x1f, 0xdd, 0x03, 0x20, 0xaf, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x49, 0x07, - 0x20, 0x0d, 0xf0, 0x08, 0xff, 0x51, 0x48, 0x06, - 0x60, 0x07, 0x20, 0x00, 0x49, 0x04, 0x68, 0x09, - 0x70, 0x08, 0x48, 0x04, 0x70, 0x05, 0x20, 0x00, - 0xe7, 0xee, 0xe7, 0xed, 0x2e, 0x01, 0xa9, 0xed, - 0x2e, 0x08, 0xb9, 0xa4, 0x2e, 0x08, 0xb9, 0xa8, - 0xb4, 0xb0, 0x1c, 0x01, 0x4a, 0x35, 0x23, 0x01, - 0x60, 0x13, 0x4a, 0x35, 0x1c, 0x0f, 0x68, 0x3d, - 0xc2, 0x20, 0x88, 0x8d, 0xc2, 0x20, 0x88, 0xcb, - 0x60, 0x13, 0x68, 0x8c, 0x2c, 0x00, 0xd0, 0x57, - 0x4a, 0x30, 0x1c, 0x27, 0x20, 0x00, 0x28, 0x13, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x2c, - 0x1d, 0xe7, 0x37, 0x45, 0x20, 0x00, 0x28, 0x0b, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x27, - 0x1d, 0xe7, 0x37, 0x71, 0x20, 0x00, 0x28, 0x07, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x22, - 0x1d, 0xe7, 0x37, 0x8d, 0x20, 0x00, 0x28, 0x09, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x1d, - 0x1d, 0xe7, 0x37, 0xb1, 0x20, 0x00, 0x28, 0x09, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x68, 0x0d, - 0x23, 0x01, 0x02, 0x9b, 0x40, 0x2b, 0xd0, 0x17, - 0x4a, 0x15, 0x1d, 0xe7, 0x37, 0xd5, 0x20, 0x00, - 0x28, 0x09, 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, - 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, - 0x4a, 0x10, 0x1d, 0xe7, 0x37, 0xf9, 0x20, 0x00, - 0x28, 0x09, 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, - 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, - 0x4a, 0x02, 0x23, 0x00, 0x60, 0x13, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0x6e, 0x00, 0x0c, 0x0c, - 0x6e, 0x00, 0x0c, 0x00, 0x6e, 0x00, 0x08, 0x00, - 0x6e, 0x00, 0x08, 0x50, 0x6e, 0x00, 0x08, 0x80, - 0x6e, 0x00, 0x08, 0xa0, 0x6e, 0x00, 0x08, 0xd0, - 0x6e, 0x00, 0x09, 0x00, 0x6e, 0x00, 0x09, 0x30, - 0xb4, 0xf0, 0x1c, 0x01, 0x69, 0x08, 0x06, 0xc0, - 0x0e, 0xc0, 0x28, 0x01, 0xdb, 0x04, 0x69, 0x08, - 0x06, 0xc0, 0x0e, 0xc0, 0x28, 0x0a, 0xdd, 0x02, - 0x20, 0xc3, 0xbc, 0xf0, 0x47, 0x70, 0x69, 0x08, - 0x05, 0x80, 0x0e, 0xc0, 0x28, 0x01, 0xdb, 0x04, - 0x69, 0x08, 0x05, 0x80, 0x0e, 0xc0, 0x28, 0x0a, - 0xdd, 0x01, 0x20, 0xc4, 0xe7, 0xf1, 0x48, 0x4f, - 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x01, - 0x20, 0xc0, 0xe7, 0xea, 0x68, 0x08, 0x07, 0x00, - 0x0f, 0xc0, 0x4b, 0x4b, 0x70, 0x18, 0x4f, 0x49, - 0x1c, 0x0c, 0x22, 0x00, 0x2a, 0x04, 0xd3, 0x02, - 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, - 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x45, 0x69, 0x08, - 0x06, 0xc0, 0x0e, 0xc0, 0x00, 0x43, 0x18, 0x18, - 0x38, 0x03, 0x69, 0x0b, 0x05, 0x9b, 0x0e, 0xde, - 0x00, 0x73, 0x19, 0x9b, 0x3b, 0x03, 0x01, 0x5b, - 0x43, 0x18, 0x60, 0x38, 0x4f, 0x3e, 0x69, 0x48, - 0x60, 0x38, 0x4f, 0x3e, 0x69, 0x88, 0x05, 0x40, - 0x0d, 0x40, 0x69, 0x8b, 0x02, 0x9b, 0x0d, 0x5b, - 0x02, 0xdb, 0x43, 0x18, 0x60, 0x38, 0x69, 0xcd, - 0x2d, 0x00, 0xd0, 0x63, 0x4f, 0x38, 0x1c, 0x2c, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x34, 0x1d, 0xec, 0x34, 0x1d, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x2f, 0x1d, 0xec, 0x34, 0x41, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x2a, 0x1d, 0xec, 0x34, 0x65, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x25, 0x1d, 0xec, 0x34, 0x89, - 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x20, 0x1d, 0xec, 0x34, 0x9d, - 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x68, 0x08, 0x23, 0x01, 0x02, 0x9b, - 0x40, 0x18, 0xd0, 0x17, 0x4f, 0x18, 0x1d, 0xec, - 0x34, 0xb1, 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, - 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, - 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x13, 0x1d, 0xec, - 0x34, 0xc5, 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, - 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, - 0xc7, 0x08, 0xe7, 0xfa, 0x20, 0x00, 0xe7, 0x54, - 0xe7, 0x53, 0x00, 0x00, 0x6e, 0x00, 0x0e, 0x00, - 0x2e, 0x08, 0xb9, 0xa9, 0x6e, 0x00, 0x0e, 0x10, - 0x6e, 0x00, 0x0e, 0x14, 0x6e, 0x00, 0x0e, 0x18, - 0x6e, 0x00, 0x0a, 0x00, 0x6e, 0x00, 0x0a, 0x24, - 0x6e, 0x00, 0x0a, 0x48, 0x6e, 0x00, 0x0a, 0x90, - 0x6e, 0x00, 0x0a, 0xc0, 0x6e, 0x00, 0x0a, 0xe4, - 0x6e, 0x00, 0x09, 0xc0, 0x6e, 0x00, 0x09, 0xe4, - 0x1c, 0x01, 0x48, 0x0c, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0xc1, 0x47, 0x70, 0x48, 0x0a, - 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x01, - 0x20, 0xc0, 0xe7, 0xf7, 0x20, 0x00, 0x4b, 0x06, - 0x61, 0x58, 0x4a, 0x06, 0x68, 0x08, 0x60, 0x10, - 0x4a, 0x05, 0x68, 0x48, 0x60, 0x10, 0x20, 0x00, - 0xe7, 0xec, 0xe7, 0xeb, 0x2e, 0x08, 0xb9, 0xa9, - 0x6e, 0x00, 0x0e, 0x00, 0x6e, 0x00, 0x0e, 0x20, - 0x6e, 0x00, 0x0e, 0x24, 0x48, 0x09, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0xc1, 0x47, 0x70, - 0x48, 0x07, 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x01, 0x20, 0xc2, 0xe7, 0xf7, 0x20, 0x01, - 0x49, 0x03, 0x61, 0x48, 0x20, 0x00, 0xe7, 0xf2, - 0xe7, 0xf1, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xa9, - 0x6e, 0x00, 0x0e, 0x00, 0xb5, 0xff, 0x1c, 0x04, - 0x1c, 0x0d, 0x1c, 0x17, 0x9e, 0x09, 0x20, 0x00, - 0x60, 0x30, 0x48, 0x13, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x07, 0x9b, 0x03, 0x2b, 0x00, 0xd1, 0x04, - 0x20, 0x8a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x23, 0xff, 0x33, 0x01, 0x42, 0x9c, - 0xdd, 0x01, 0x20, 0x87, 0xe7, 0xf5, 0x19, 0x28, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, 0xd9, 0x01, - 0x20, 0x88, 0xe7, 0xee, 0x68, 0x79, 0x1c, 0x20, - 0x80, 0x48, 0x70, 0x0d, 0x9b, 0x03, 0x60, 0x4b, - 0x68, 0x78, 0x60, 0xc8, 0x68, 0x38, 0x60, 0x88, - 0x60, 0x31, 0x20, 0x00, 0xe7, 0xe1, 0xe7, 0xe0, - 0x2e, 0x08, 0x9d, 0xf0, 0x1c, 0x03, 0x1c, 0x0a, - 0x1c, 0x19, 0x68, 0xc8, 0x60, 0x50, 0x68, 0x88, - 0x60, 0x10, 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, - 0xb5, 0xf3, 0xb0, 0x87, 0x21, 0x00, 0x91, 0x06, - 0x26, 0x00, 0x98, 0x07, 0xf0, 0x00, 0xfa, 0xcb, - 0x90, 0x03, 0x9c, 0x07, 0x9d, 0x08, 0x88, 0x69, - 0x91, 0x04, 0x98, 0x03, 0x99, 0x04, 0x42, 0x88, - 0xd0, 0x09, 0x48, 0xbb, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0xff, 0xb0, 0x07, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x78, 0x28, - 0x90, 0x05, 0x99, 0x04, 0x23, 0xff, 0x33, 0x01, - 0x42, 0x99, 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x07, - 0xe7, 0xf1, 0x98, 0x05, 0x99, 0x04, 0x18, 0x40, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, 0xdd, 0x02, - 0x20, 0xff, 0xb0, 0x07, 0xe7, 0xe7, 0x48, 0xad, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0a, 0x68, 0xa0, - 0x23, 0x01, 0x06, 0x1b, 0x40, 0x18, 0xd0, 0x05, - 0x68, 0x68, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x8a, - 0xb0, 0x07, 0xe7, 0xd8, 0x62, 0x65, 0x69, 0x60, - 0x4b, 0xa5, 0x40, 0x18, 0x99, 0x05, 0x06, 0x09, - 0x0e, 0x09, 0x04, 0x09, 0x43, 0x08, 0x61, 0x60, - 0x02, 0x00, 0x68, 0xe0, 0x90, 0x00, 0x48, 0x9e, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x98, 0x00, - 0x28, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xe0, 0x05, 0x98, 0x00, 0x28, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x07, - 0xe7, 0xb5, 0x48, 0x94, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x1e, 0x48, 0x91, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x1a, 0x68, 0xa0, 0x02, 0x00, 0x0e, 0x00, - 0x06, 0x01, 0x0e, 0x09, 0x91, 0x06, 0x99, 0x04, - 0x29, 0x04, 0xd0, 0x06, 0x29, 0x10, 0xd0, 0x07, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, 0xd0, 0x06, - 0xe0, 0x08, 0x26, 0xff, 0x36, 0x01, 0xe0, 0x07, - 0x26, 0x01, 0x02, 0x76, 0xe0, 0x04, 0x26, 0x03, - 0x02, 0x36, 0xe0, 0x01, 0x26, 0x00, 0xe7, 0xff, - 0x49, 0x84, 0x20, 0x91, 0xf0, 0x11, 0xfc, 0x04, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, - 0xff, 0xb1, 0xe7, 0xf5, 0x98, 0x00, 0x00, 0x80, - 0x49, 0x7f, 0x58, 0x08, 0x99, 0x07, 0x42, 0x88, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0x7b, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x07, 0xe7, 0x7b, 0x48, 0x77, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x73, 0x48, 0x74, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x6f, 0x98, 0x00, - 0xf0, 0x02, 0xfe, 0xd6, 0x28, 0x00, 0xd0, 0x6a, - 0xb0, 0x82, 0x49, 0x74, 0x20, 0x91, 0xf0, 0x11, - 0xfb, 0xdf, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x02, 0xff, 0x25, 0x20, 0x92, 0x49, 0x6f, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x6e, 0x68, 0x09, - 0x60, 0x08, 0x27, 0x00, 0x20, 0x00, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x00, 0xd1, 0x15, 0x2f, 0x07, - 0xd2, 0x13, 0x6a, 0xe0, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, 0x18, 0x18, - 0x00, 0xc0, 0x4a, 0x65, 0x68, 0x12, 0x18, 0x80, - 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, - 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, 0x90, 0x00, - 0xe7, 0xe6, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x14, - 0x2f, 0x18, 0xd2, 0x12, 0x6a, 0xe0, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, - 0x43, 0x58, 0x4a, 0x59, 0x68, 0x12, 0x18, 0x80, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, - 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, 0x90, 0x00, - 0xe7, 0xe7, 0x3f, 0x01, 0x2f, 0x07, 0xd2, 0x10, - 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x50, - 0x68, 0x09, 0x18, 0x40, 0x23, 0x2b, 0x01, 0x5b, - 0x18, 0xc0, 0x1c, 0x21, 0xf0, 0x02, 0xfb, 0x38, - 0x48, 0x4b, 0x68, 0x00, 0xf0, 0x02, 0xfe, 0xee, - 0xe0, 0x46, 0x2f, 0x18, 0xd2, 0x44, 0x20, 0x4c, - 0x43, 0x78, 0x49, 0x47, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, 0x1c, 0x21, - 0xf0, 0x02, 0xfb, 0x26, 0x20, 0x4c, 0x43, 0x78, - 0x49, 0x41, 0x68, 0x09, 0xe0, 0x00, 0xe0, 0x48, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x82, - 0x6f, 0xc0, 0x28, 0x00, 0xd0, 0x17, 0x20, 0x4c, - 0x43, 0x78, 0x49, 0x3b, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, - 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x0b, 0x20, 0x4c, - 0x43, 0x78, 0x49, 0x35, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, - 0x0c, 0x00, 0x04, 0x00, 0xd1, 0x0a, 0x20, 0x02, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x2e, 0x68, 0x12, - 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, - 0x67, 0x48, 0xe0, 0x09, 0x20, 0x03, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x29, 0x68, 0x12, 0x18, 0x89, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, - 0x49, 0x24, 0x20, 0x91, 0xf0, 0x11, 0xfb, 0x40, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x22, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x21, 0x68, 0x00, - 0x49, 0x1f, 0x60, 0x08, 0x98, 0x01, 0x49, 0x1f, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, - 0xb0, 0x02, 0x48, 0x15, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x1d, 0x98, 0x00, 0x01, 0x00, 0x4b, 0x1a, - 0x18, 0xc1, 0x91, 0x01, 0x1d, 0xe0, 0x30, 0x0d, - 0x90, 0x02, 0x98, 0x02, 0x68, 0x00, 0x99, 0x01, - 0x60, 0x08, 0x48, 0x0e, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x0d, 0x68, 0x68, 0x08, 0x80, 0x99, 0x06, - 0x00, 0x89, 0x4b, 0x12, 0x18, 0xc9, 0x67, 0x08, - 0x98, 0x05, 0x43, 0x30, 0x99, 0x06, 0x00, 0x89, - 0x4b, 0x0f, 0x18, 0xc9, 0x61, 0x08, 0x20, 0x92, - 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x07, - 0xe6, 0x91, 0xb0, 0x07, 0xe6, 0x8f, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0x9d, 0xf0, - 0xff, 0x00, 0xff, 0xff, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xbb, 0x24, - 0x68, 0x00, 0x0c, 0x00, 0x68, 0x00, 0x0e, 0x00, - 0x68, 0x00, 0x0e, 0x80, 0x1c, 0x01, 0x1c, 0x0a, - 0x6a, 0x53, 0x1c, 0x18, 0x47, 0x70, 0xe7, 0xfd, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x82, 0x48, 0x2b, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x8a, - 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x98, 0x02, 0x90, 0x01, 0x98, 0x01, - 0x88, 0x44, 0x98, 0x01, 0x78, 0x06, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x9c, 0xdd, 0x02, 0x20, 0xff, - 0xb0, 0x02, 0xe7, 0xee, 0x19, 0x30, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x98, 0xdd, 0x02, 0x20, 0xff, - 0xb0, 0x02, 0xe7, 0xe6, 0x49, 0x1c, 0x20, 0x91, - 0xf0, 0x11, 0xfa, 0xc2, 0x28, 0x92, 0xd0, 0x03, - 0x20, 0x01, 0xf0, 0x01, 0xfe, 0x6f, 0xe7, 0xf5, - 0x2c, 0x10, 0xda, 0x0d, 0x25, 0x00, 0x42, 0xa5, - 0xdb, 0x02, 0xe0, 0x08, 0x35, 0x01, 0xe7, 0xfa, - 0xcf, 0x01, 0x19, 0x71, 0x00, 0x89, 0x4b, 0x13, - 0x18, 0xc9, 0x60, 0x08, 0xe7, 0xf6, 0xe0, 0x15, - 0x4a, 0x11, 0x43, 0x22, 0x92, 0x00, 0x20, 0x91, - 0x49, 0x10, 0x60, 0x08, 0x00, 0xb0, 0x4b, 0x0d, - 0x18, 0xc1, 0x9a, 0x00, 0x1c, 0x38, 0x23, 0x02, - 0xf0, 0x00, 0xfa, 0xfe, 0x28, 0x00, 0xd0, 0x00, - 0xe7, 0xf4, 0x48, 0x0a, 0x68, 0x00, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xfa, 0x20, 0x92, 0x49, 0x04, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xb0, - 0xb0, 0x02, 0xe7, 0xae, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xba, 0x30, 0x68, 0x00, 0x08, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x2e, 0x08, 0xba, 0x34, - 0x21, 0x04, 0xe0, 0x00, 0x31, 0x01, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x82, 0x48, 0x2b, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x20, 0x8a, 0xb0, 0x02, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, - 0x90, 0x01, 0x98, 0x01, 0x88, 0x44, 0x98, 0x01, - 0x78, 0x06, 0x23, 0xff, 0x33, 0x01, 0x42, 0x9c, - 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xee, - 0x19, 0x30, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xe6, - 0x49, 0x1c, 0x20, 0x91, 0xf0, 0x11, 0xfa, 0x58, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, - 0xfe, 0x05, 0xe7, 0xf5, 0x2c, 0x10, 0xda, 0x0d, - 0x25, 0x00, 0x42, 0xa5, 0xdb, 0x02, 0xe0, 0x08, - 0x35, 0x01, 0xe7, 0xfa, 0x19, 0x70, 0x00, 0x80, - 0x4b, 0x13, 0x18, 0xc0, 0x68, 0x01, 0xc7, 0x02, - 0xe7, 0xf6, 0xe0, 0x15, 0x4a, 0x11, 0x43, 0x22, - 0x92, 0x00, 0x20, 0x91, 0x49, 0x10, 0x60, 0x08, - 0x00, 0xb0, 0x4b, 0x0d, 0x18, 0xc0, 0x9a, 0x00, - 0x1c, 0x39, 0x23, 0x02, 0xf0, 0x00, 0xfa, 0x94, - 0x28, 0x00, 0xd0, 0x00, 0xe7, 0xf4, 0x48, 0x0a, - 0x68, 0x00, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xfa, - 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x02, 0xe7, 0xb0, 0xb0, 0x02, 0xe7, 0xae, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xba, 0x34, 0xb5, 0xf7, 0x9a, 0x02, - 0x06, 0x15, 0x0e, 0x2d, 0x9c, 0x00, 0x88, 0x66, - 0x42, 0xb5, 0xdd, 0x04, 0x20, 0xff, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x78, 0x20, - 0x19, 0x40, 0x06, 0x07, 0x0e, 0x3f, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x9f, 0xdd, 0x01, 0x20, 0xff, - 0xe7, 0xf1, 0x49, 0x0a, 0x20, 0x91, 0xf0, 0x11, - 0xf9, 0xff, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x01, 0xfd, 0xac, 0xe7, 0xf5, 0x99, 0x01, - 0x00, 0xb8, 0x4b, 0x05, 0x18, 0xc0, 0x60, 0x01, - 0x20, 0x92, 0x49, 0x02, 0x60, 0x08, 0x20, 0x00, - 0xe7, 0xdd, 0xe7, 0xdc, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x08, 0x00, 0xb5, 0xf7, 0x9a, 0x02, - 0x06, 0x14, 0x0e, 0x24, 0x9f, 0x00, 0x88, 0x7d, - 0x78, 0x38, 0x19, 0x00, 0x06, 0x06, 0x0e, 0x36, - 0x42, 0xac, 0xdd, 0x04, 0x20, 0xff, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x49, 0x0b, - 0x20, 0x91, 0xf0, 0x11, 0xf9, 0xd5, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, 0xfd, 0x82, - 0xe7, 0xf5, 0x00, 0xb0, 0x4b, 0x06, 0x18, 0xc0, - 0x68, 0x00, 0x99, 0x01, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x02, 0x60, 0x08, 0x20, 0x00, 0xe7, 0xe6, - 0xe7, 0xe5, 0x00, 0x00, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x08, 0x00, 0x1c, 0x01, 0x1c, 0x0a, - 0x88, 0x50, 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0x80, - 0x1c, 0x01, 0x1c, 0x0f, 0x69, 0x3a, 0x2a, 0x08, - 0xd2, 0x12, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x07, 0x09, 0x0b, - 0x04, 0x07, 0x09, 0x0b, 0x20, 0x02, 0xbc, 0x80, - 0x47, 0x70, 0x20, 0x04, 0xe7, 0xfb, 0x20, 0x10, - 0xe7, 0xf9, 0x20, 0xff, 0x30, 0x01, 0xe7, 0xf6, - 0x20, 0x00, 0xe7, 0xf4, 0xe7, 0xf3, 0xb5, 0xf3, - 0x98, 0x00, 0x06, 0x05, 0x0e, 0x2d, 0x48, 0x89, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x20, 0x8b, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x48, 0x85, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x04, - 0x2d, 0x17, 0xdd, 0x02, 0x20, 0x8c, 0xe7, 0xf3, - 0xe0, 0xfe, 0x2d, 0x07, 0xdd, 0x01, 0x20, 0x8c, - 0xe7, 0xee, 0x49, 0x80, 0x20, 0x91, 0xf0, 0x11, - 0xf9, 0x7f, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x01, 0xfd, 0x2c, 0xe7, 0xf5, 0x1c, 0x28, - 0xf7, 0xf8, 0xfc, 0xd8, 0x1c, 0x04, 0x2c, 0x00, - 0xd0, 0x09, 0x68, 0xa0, 0x4b, 0x78, 0x40, 0x18, - 0x99, 0x01, 0x07, 0xc9, 0x09, 0xc9, 0x43, 0x08, - 0x60, 0xa0, 0x01, 0xc0, 0xe0, 0x04, 0x20, 0x92, - 0x49, 0x72, 0x60, 0x08, 0x20, 0xff, 0xe7, 0xcf, - 0x48, 0x6f, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x11, - 0x99, 0x01, 0x29, 0x00, 0xd0, 0x06, 0x48, 0x6f, - 0x21, 0x01, 0x40, 0xa9, 0x68, 0x02, 0x43, 0x11, - 0x60, 0x01, 0xe0, 0x06, 0x48, 0x6b, 0x21, 0x01, - 0x40, 0xa9, 0x43, 0xc9, 0x68, 0x02, 0x40, 0x11, - 0x60, 0x01, 0xe0, 0xbf, 0x68, 0xe0, 0xf0, 0x02, - 0xfc, 0x3b, 0x28, 0x00, 0xd0, 0x73, 0xb0, 0x81, - 0x49, 0x65, 0x20, 0x91, 0xf0, 0x11, 0xf9, 0x44, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x02, - 0xfc, 0x8a, 0x20, 0x92, 0x49, 0x60, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x60, 0x68, 0x09, 0x60, 0x08, - 0x27, 0x00, 0x26, 0x00, 0x2e, 0x00, 0xd1, 0x14, - 0x2f, 0x07, 0xd2, 0x12, 0x6a, 0xe0, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, - 0x18, 0x18, 0x00, 0xc0, 0x4a, 0x57, 0x68, 0x12, - 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, - 0x6f, 0xc0, 0x42, 0x81, 0xd1, 0x00, 0x26, 0x01, - 0xe7, 0xe8, 0x2e, 0x00, 0xd1, 0x13, 0x2f, 0x18, - 0xd2, 0x11, 0x6a, 0xe0, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, 0x43, 0x58, - 0x4a, 0x4c, 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, - 0xd1, 0x00, 0x26, 0x01, 0xe7, 0xe9, 0x3f, 0x01, - 0x2f, 0x07, 0xd2, 0x32, 0x99, 0x02, 0x29, 0x00, - 0xd0, 0x16, 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, - 0x49, 0x42, 0x68, 0x09, 0x18, 0x40, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6e, 0x80, 0x4b, 0x40, - 0x43, 0x18, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x3c, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0xe0, 0x17, - 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x37, - 0x68, 0x09, 0x18, 0x40, 0x23, 0x05, 0x02, 0x1b, - 0x18, 0xc0, 0x6e, 0x80, 0x04, 0x00, 0x0c, 0x00, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x31, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0x88, 0xe0, 0x00, 0xe0, 0x45, - 0xe0, 0x2b, 0x99, 0x02, 0x29, 0x00, 0xd0, 0x14, - 0x20, 0x4c, 0x43, 0x78, 0x49, 0x29, 0x68, 0x09, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x68, 0x00, 0x4b, 0x27, 0x43, 0x18, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x24, 0x68, 0x12, 0x18, 0x89, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, 0x60, 0x08, - 0xe0, 0x13, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x1f, - 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x68, 0x00, 0x04, 0x00, 0x0c, 0x00, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x19, 0x68, 0x12, - 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, - 0x60, 0x08, 0x48, 0x16, 0x68, 0x00, 0xf0, 0x02, - 0xfc, 0x05, 0x49, 0x13, 0x20, 0x91, 0xf0, 0x11, - 0xf8, 0x9f, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0x48, 0x10, 0x68, 0x00, 0x90, 0x00, 0x48, 0x11, - 0x68, 0x00, 0x49, 0x0e, 0x60, 0x08, 0x98, 0x00, - 0x49, 0x0e, 0x60, 0x08, 0x20, 0x92, 0x49, 0x0a, - 0x60, 0x08, 0xb0, 0x01, 0x20, 0x92, 0x49, 0x05, - 0x60, 0x08, 0x20, 0x00, 0xe6, 0xf4, 0xe6, 0xf3, - 0xe6, 0xf2, 0x00, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0xfe, 0xff, 0xff, 0xff, 0x68, 0x00, 0x00, 0x20, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0xff, 0xff, 0x00, 0x00, 0x2e, 0x08, 0xbb, 0x24, - 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x26, - 0x0e, 0x36, 0x48, 0x0f, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x20, 0x8b, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2e, 0x07, 0xdd, 0x01, 0x20, 0x8c, - 0xe7, 0xf8, 0x1c, 0x30, 0xf7, 0xf8, 0xfb, 0xc2, - 0x1c, 0x05, 0x2d, 0x00, 0xd0, 0x04, 0x68, 0xa8, - 0x01, 0xc0, 0x0f, 0xc0, 0x60, 0x38, 0xe0, 0x04, - 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0xff, - 0xe7, 0xe8, 0x20, 0x00, 0xe7, 0xe6, 0xe7, 0xe5, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x25, - 0x0e, 0x2d, 0x48, 0x20, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x20, 0x8b, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x1d, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x04, 0x2d, 0x17, 0xdd, 0x02, 0x20, 0x8c, - 0xe7, 0xf4, 0xe0, 0x2d, 0x2d, 0x07, 0xdd, 0x01, - 0x20, 0x8c, 0xe7, 0xef, 0x48, 0x16, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xe9, - 0x49, 0x14, 0x20, 0x91, 0xf0, 0x11, 0xf8, 0x28, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, - 0xfb, 0xd5, 0xe7, 0xf5, 0x2f, 0x00, 0xd0, 0x08, - 0x48, 0x0f, 0x1d, 0xe9, 0x31, 0x01, 0x22, 0x01, - 0x40, 0x8a, 0x68, 0x01, 0x43, 0x11, 0x60, 0x01, - 0xe0, 0x08, 0x48, 0x0b, 0x1d, 0xea, 0x32, 0x01, - 0x21, 0x01, 0x40, 0x91, 0x43, 0xc9, 0x68, 0x02, - 0x40, 0x11, 0x60, 0x01, 0x20, 0x92, 0x49, 0x05, - 0x60, 0x08, 0x20, 0x00, 0xe7, 0xc6, 0xe7, 0xc5, - 0xe7, 0xc4, 0x00, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x00, 0x20, 0xb4, 0x90, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x39, 0x0e, 0x09, 0x48, 0x10, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x8b, - 0xbc, 0x90, 0x47, 0x70, 0x29, 0x07, 0xdd, 0x01, - 0x20, 0x8c, 0xe7, 0xf9, 0x48, 0x0b, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xf3, - 0x1d, 0xc8, 0x30, 0x01, 0x24, 0x01, 0x40, 0x84, - 0x1c, 0x23, 0x20, 0x0d, 0x06, 0xc0, 0x6a, 0x00, - 0x40, 0x18, 0x1d, 0xcc, 0x34, 0x01, 0x40, 0xe0, - 0x60, 0x10, 0x20, 0x00, 0xe7, 0xe4, 0xe7, 0xe3, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xd1, 0xf0, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x25, - 0x0e, 0x2d, 0x48, 0x13, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x20, 0x8b, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x2d, 0x07, 0xdd, 0x01, 0x20, 0x8c, - 0xe7, 0xf8, 0x48, 0x0e, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xf2, 0x49, 0x0c, - 0x20, 0x91, 0xf0, 0x10, 0xff, 0xb9, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, 0xfb, 0x66, - 0xe7, 0xf5, 0x08, 0xb8, 0x00, 0xa9, 0x4b, 0x07, - 0x18, 0xc9, 0x67, 0x08, 0x20, 0x92, 0x49, 0x04, - 0x60, 0x08, 0x20, 0x00, 0xe7, 0xde, 0xe7, 0xdd, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x30, 0x68, 0x00, 0x0e, 0x00, - 0xb4, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, - 0x1c, 0x1e, 0x04, 0x3f, 0x0c, 0x3f, 0x1c, 0x39, - 0x29, 0x00, 0xd8, 0x02, 0xe0, 0x04, 0x39, 0x01, - 0xe7, 0xfa, 0xcd, 0x04, 0xc4, 0x04, 0xe7, 0xfa, - 0x20, 0x92, 0x4a, 0x03, 0x60, 0x10, 0x20, 0x00, - 0xbc, 0xf0, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, - 0x2e, 0x08, 0xba, 0x34, 0x20, 0x00, 0x6b, 0x00, - 0x49, 0x63, 0x60, 0x08, 0x20, 0x00, 0x6b, 0x40, - 0x49, 0x62, 0x60, 0x08, 0x48, 0x62, 0x49, 0x63, - 0x60, 0x08, 0x48, 0x63, 0x49, 0x63, 0x60, 0x08, - 0x20, 0x00, 0x6a, 0xc0, 0x49, 0x62, 0x60, 0x08, - 0x48, 0x62, 0x49, 0x63, 0x60, 0x08, 0x48, 0x63, - 0x49, 0x63, 0x60, 0x08, 0x48, 0x63, 0x49, 0x64, - 0x60, 0x08, 0x20, 0x00, 0x6b, 0x80, 0x49, 0x63, - 0x60, 0x08, 0x20, 0x00, 0x6b, 0xc0, 0x49, 0x62, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0x00, 0x49, 0x61, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0x40, 0x49, 0x60, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0x80, 0x49, 0x5f, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0xc0, 0x49, 0x5e, - 0x60, 0x08, 0x20, 0x00, 0x6e, 0xc0, 0x49, 0x5d, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0x00, 0x49, 0x5c, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0x40, 0x49, 0x5b, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0x80, 0x49, 0x5a, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0x00, 0x49, 0x59, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0x40, 0x49, 0x58, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0x80, 0x49, 0x57, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0xc0, 0x49, 0x56, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0xc0, 0x49, 0x55, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0xc0, 0x49, 0x54, - 0x60, 0x08, 0x20, 0x80, 0x6c, 0xc0, 0x49, 0x53, - 0x60, 0x08, 0x20, 0x80, 0x68, 0x40, 0x49, 0x52, - 0x60, 0x08, 0x20, 0x80, 0x68, 0x80, 0x49, 0x51, - 0x60, 0x08, 0x20, 0x80, 0x68, 0xc0, 0x49, 0x50, - 0x60, 0x08, 0x20, 0x80, 0x69, 0x00, 0x49, 0x4f, - 0x60, 0x08, 0x20, 0x80, 0x69, 0x40, 0x49, 0x4e, - 0x60, 0x08, 0x20, 0x80, 0x69, 0x80, 0x49, 0x4d, - 0x60, 0x08, 0x20, 0x80, 0x69, 0xc0, 0x49, 0x4c, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x00, 0x49, 0x4b, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x40, 0x49, 0x4a, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x80, 0x49, 0x49, - 0x60, 0x08, 0x20, 0x00, 0x6f, 0x00, 0x49, 0x48, - 0x60, 0x08, 0x20, 0x00, 0x6f, 0x40, 0x49, 0x47, - 0x60, 0x08, 0x20, 0x80, 0x6c, 0x40, 0x49, 0x46, - 0x60, 0x08, 0x20, 0x80, 0x6c, 0x80, 0x49, 0x45, - 0x60, 0x08, 0x20, 0x80, 0x6e, 0x40, 0x49, 0x44, - 0x60, 0x08, 0x20, 0x80, 0x6e, 0x80, 0x49, 0x43, - 0x60, 0x08, 0x20, 0x00, 0x49, 0x42, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x41, 0x60, 0x48, 0x48, 0x41, - 0x49, 0x3f, 0x60, 0x88, 0x48, 0x40, 0x49, 0x3e, - 0x60, 0xc8, 0x20, 0xff, 0x30, 0x01, 0x68, 0x40, - 0x49, 0x3e, 0x60, 0x08, 0x20, 0x80, 0x6e, 0xc0, - 0x49, 0x3d, 0x60, 0x08, 0x20, 0x80, 0x6f, 0x00, - 0x49, 0x3c, 0x60, 0x08, 0x20, 0x80, 0x6f, 0x40, - 0x49, 0x3b, 0x60, 0x08, 0x20, 0x80, 0x6f, 0x80, - 0x49, 0x3a, 0x60, 0x08, 0x20, 0x80, 0x6f, 0xc0, - 0x49, 0x39, 0x60, 0x08, 0x20, 0xff, 0x30, 0x01, - 0x68, 0x80, 0x49, 0x38, 0x60, 0x08, 0x47, 0x70, - 0x2e, 0x08, 0x9b, 0x28, 0x2e, 0x08, 0x9b, 0x2c, - 0x64, 0x00, 0x05, 0x00, 0x2e, 0x08, 0x9b, 0x34, - 0x64, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x64, 0x00, 0x04, 0x00, - 0x2e, 0x08, 0x9b, 0x3c, 0x9e, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x54, 0x9e, 0x00, 0x05, 0x00, - 0x2e, 0x08, 0x9b, 0x40, 0x2e, 0x08, 0xd2, 0x08, - 0x2e, 0x08, 0xd2, 0x0c, 0x2e, 0x08, 0xd2, 0x10, - 0x2e, 0x08, 0xd2, 0x14, 0x2e, 0x08, 0x9b, 0x44, - 0x2e, 0x08, 0x9b, 0x48, 0x2e, 0x08, 0x9b, 0x58, - 0x2e, 0x08, 0x9b, 0x5c, 0x2e, 0x08, 0x9b, 0x60, - 0x2e, 0x08, 0x9b, 0x64, 0x2e, 0x08, 0x9b, 0x4c, - 0x2e, 0x08, 0x9b, 0x50, 0x2e, 0x08, 0x9d, 0xd8, - 0x2e, 0x08, 0x9d, 0xdc, 0x2e, 0x08, 0x9b, 0x68, - 0x2e, 0x08, 0x9b, 0x6c, 0x2e, 0x08, 0x9b, 0x98, - 0x2e, 0x08, 0x9b, 0x70, 0x2e, 0x08, 0x9b, 0x74, - 0x2e, 0x08, 0x9b, 0x78, 0x2e, 0x08, 0x9b, 0x7c, - 0x2e, 0x08, 0x9b, 0x80, 0x2e, 0x08, 0x9b, 0x84, - 0x2e, 0x08, 0x9b, 0x88, 0x2e, 0x08, 0x9b, 0x8c, - 0x2e, 0x08, 0x9b, 0x90, 0x2e, 0x08, 0x9b, 0x94, - 0x2e, 0x08, 0x9b, 0x1c, 0x2e, 0x08, 0x9b, 0x20, - 0x2e, 0x08, 0xb9, 0xb0, 0x2e, 0x08, 0x9b, 0xc0, - 0x2e, 0x08, 0x9b, 0xa0, 0x2e, 0x08, 0x9d, 0xe0, - 0x2e, 0x08, 0xb9, 0x88, 0xcc, 0x1f, 0xe0, 0x00, - 0xcc, 0x1f, 0xfe, 0x00, 0x2e, 0x08, 0x9b, 0xac, - 0x2e, 0x08, 0x9b, 0xc4, 0x2e, 0x08, 0x9b, 0xa4, - 0x2e, 0x08, 0x9b, 0xa8, 0x2e, 0x08, 0xb9, 0xac, - 0x2e, 0x08, 0xb9, 0x84, 0x2e, 0x08, 0x9b, 0xb4, - 0x49, 0x4f, 0x68, 0x0a, 0x23, 0x04, 0x43, 0x1a, - 0x60, 0x0a, 0x21, 0xff, 0x4a, 0x4d, 0x68, 0x12, - 0x32, 0x40, 0x72, 0x11, 0x21, 0xff, 0x4a, 0x4b, - 0x68, 0x12, 0x32, 0x40, 0x76, 0x11, 0x21, 0xff, - 0x4a, 0x48, 0x68, 0x12, 0x32, 0x60, 0x72, 0x11, - 0x21, 0xff, 0x4a, 0x46, 0x68, 0x12, 0x32, 0x20, - 0x72, 0x11, 0x21, 0xff, 0x4a, 0x43, 0x68, 0x12, - 0x32, 0x20, 0x76, 0x11, 0x21, 0xff, 0x4a, 0x41, - 0x68, 0x12, 0x32, 0x60, 0x76, 0x11, 0x21, 0x00, - 0x4a, 0x3e, 0x68, 0x12, 0x32, 0x40, 0x72, 0x91, - 0x21, 0x00, 0x4a, 0x3c, 0x68, 0x12, 0x32, 0x40, - 0x76, 0x91, 0x21, 0x00, 0x4a, 0x39, 0x68, 0x12, - 0x32, 0x60, 0x72, 0x91, 0x21, 0x00, 0x4a, 0x37, - 0x68, 0x12, 0x32, 0x20, 0x72, 0x91, 0x21, 0x00, - 0x4a, 0x34, 0x68, 0x12, 0x32, 0x20, 0x76, 0x91, - 0x21, 0x00, 0x4a, 0x32, 0x68, 0x12, 0x32, 0x60, - 0x76, 0x91, 0x21, 0x00, 0x4a, 0x2f, 0x68, 0x12, - 0x32, 0x80, 0x70, 0xd1, 0x21, 0x00, 0x4a, 0x2d, - 0x68, 0x12, 0x32, 0x80, 0x70, 0x51, 0x21, 0x00, - 0x4a, 0x2a, 0x68, 0x12, 0x32, 0x80, 0x70, 0x91, - 0x21, 0x00, 0x4a, 0x29, 0x60, 0x11, 0x21, 0x00, - 0x4a, 0x28, 0x64, 0x11, 0x21, 0x03, 0x4a, 0x28, - 0x61, 0x11, 0x49, 0x28, 0x68, 0x0a, 0x4b, 0x28, - 0x43, 0x1a, 0x60, 0x0a, 0x49, 0x26, 0x22, 0x33, - 0x06, 0x52, 0x60, 0x51, 0x21, 0x00, 0x4a, 0x25, - 0x70, 0x11, 0x21, 0x00, 0x4a, 0x23, 0x70, 0x51, - 0x21, 0x00, 0x4a, 0x22, 0x70, 0x91, 0x21, 0x00, - 0x4a, 0x20, 0x70, 0xd1, 0x21, 0x00, 0x4a, 0x1f, - 0x71, 0x11, 0x21, 0x00, 0x4a, 0x1d, 0x71, 0x51, - 0x21, 0x00, 0x4a, 0x1c, 0x71, 0x91, 0x21, 0x00, - 0x4a, 0x1a, 0x71, 0xd1, 0x21, 0x00, 0x4a, 0x19, - 0x72, 0x11, 0x21, 0x00, 0x4a, 0x17, 0x72, 0x51, - 0x21, 0x00, 0x4a, 0x16, 0x72, 0x91, 0x21, 0x00, - 0x4a, 0x14, 0x72, 0xd1, 0x21, 0x00, 0x4a, 0x13, - 0x73, 0x11, 0x21, 0xff, 0x4a, 0x11, 0x70, 0x11, - 0x21, 0x00, 0x4a, 0x10, 0x70, 0x11, 0x21, 0x00, - 0x4a, 0x0e, 0x70, 0x51, 0x20, 0x00, 0x28, 0x20, - 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x41, 0x06, 0x08, - 0x0e, 0x00, 0xe7, 0xf8, 0x21, 0xff, 0x4a, 0x03, - 0x68, 0x12, 0x54, 0x11, 0xe7, 0xf6, 0x47, 0x70, - 0x66, 0x00, 0x01, 0x18, 0x2e, 0x08, 0xb9, 0xb0, - 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, - 0x66, 0x00, 0x01, 0x00, 0x66, 0x00, 0x00, 0x08, - 0x23, 0x48, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb4, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x39, - 0x0e, 0x09, 0x29, 0x05, 0xd2, 0x40, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x14, 0x07, 0x0d, 0x13, 0x00, 0x78, 0x10, - 0x4b, 0x1f, 0x70, 0x18, 0xe0, 0x38, 0x78, 0x50, - 0x4b, 0x1e, 0x68, 0x1b, 0x33, 0x80, 0x71, 0x58, - 0xe0, 0x32, 0x78, 0x10, 0x4b, 0x1b, 0x68, 0x1b, - 0x33, 0x80, 0x71, 0x18, 0xe0, 0x2c, 0xe0, 0x2b, - 0x78, 0x10, 0x4b, 0x17, 0x70, 0x18, 0x78, 0x50, - 0x4b, 0x15, 0x70, 0x58, 0x78, 0x90, 0x4b, 0x14, - 0x70, 0x98, 0x78, 0xd0, 0x4b, 0x12, 0x70, 0xd8, - 0x79, 0x10, 0x4b, 0x11, 0x71, 0x18, 0x79, 0x50, - 0x4b, 0x0f, 0x71, 0x58, 0x79, 0x90, 0x4b, 0x0e, - 0x71, 0x98, 0x79, 0xd0, 0x4b, 0x0c, 0x71, 0xd8, - 0x7a, 0x10, 0x4b, 0x0b, 0x72, 0x18, 0x7a, 0x50, - 0x4b, 0x09, 0x72, 0x58, 0x7a, 0x90, 0x4b, 0x08, - 0x72, 0x98, 0x7a, 0xd0, 0x4b, 0x06, 0x72, 0xd8, - 0x7b, 0x10, 0x4b, 0x05, 0x73, 0x18, 0xe0, 0x03, - 0x20, 0x4a, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xff, - 0x20, 0x00, 0xe7, 0xfa, 0xe7, 0xf9, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb4, 0x2e, 0x08, 0xb9, 0xb0, - 0xb5, 0xf3, 0x1c, 0x07, 0x06, 0x3e, 0x0e, 0x36, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0x2e, 0x20, - 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x02, 0xd0, 0x03, - 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, - 0x48, 0xb8, 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x39, 0x48, 0xb5, 0x68, 0x00, - 0x30, 0x20, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x33, - 0x2c, 0x00, 0xd1, 0x17, 0x48, 0xb1, 0x68, 0x00, - 0x30, 0x40, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x2b, - 0x48, 0xae, 0x68, 0x00, 0x30, 0x40, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x25, 0x48, 0xab, 0x68, 0x00, - 0x30, 0x60, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x1f, - 0x48, 0xa8, 0x68, 0x00, 0x30, 0x20, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x19, 0x2c, 0x01, 0xd1, 0x19, - 0x48, 0xa4, 0x68, 0x00, 0x30, 0x40, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x11, 0x48, 0xa1, 0x68, 0x00, - 0x30, 0x40, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x0b, - 0x48, 0x9e, 0x68, 0x00, 0x30, 0x60, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x05, 0x48, 0x9b, 0x68, 0x00, - 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x49, 0xe7, 0xb3, 0x48, 0x97, 0x68, 0x00, - 0x55, 0x84, 0x2c, 0xff, 0xd0, 0x73, 0x20, 0x01, - 0x49, 0x95, 0x60, 0x48, 0x2c, 0x05, 0xd2, 0x6f, - 0xa3, 0x01, 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x02, 0x34, 0x30, 0x30, 0x30, 0x00, 0x20, 0x02, - 0x49, 0x90, 0x61, 0x88, 0x48, 0x90, 0x6a, 0xc0, - 0x49, 0x90, 0x60, 0x08, 0x48, 0x90, 0x68, 0x01, - 0x23, 0x01, 0x07, 0x5b, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x8e, 0x49, 0x8b, 0x62, 0xc8, 0x48, 0x8c, - 0x68, 0x01, 0x4b, 0x8d, 0x40, 0x19, 0x60, 0x01, - 0x20, 0x01, 0x21, 0x31, 0x06, 0x49, 0x61, 0x88, - 0x20, 0x15, 0x21, 0x31, 0x06, 0x49, 0x61, 0x08, - 0x20, 0x0f, 0x21, 0x31, 0x06, 0x49, 0x61, 0xc8, - 0x20, 0x0c, 0x21, 0x31, 0x06, 0x49, 0x61, 0xc8, - 0x20, 0x54, 0x21, 0x31, 0x06, 0x49, 0x62, 0xc8, - 0x20, 0x37, 0x21, 0x31, 0x06, 0x49, 0x60, 0x88, - 0xe0, 0x56, 0x20, 0x00, 0x49, 0x79, 0x61, 0x88, - 0xe0, 0x52, 0x20, 0x01, 0x49, 0x77, 0x61, 0x88, - 0x20, 0x01, 0x49, 0x7c, 0x62, 0x88, 0x48, 0x7c, - 0x78, 0x00, 0x06, 0x80, 0x0e, 0x80, 0x02, 0x80, - 0x49, 0x79, 0x78, 0x49, 0x07, 0xc9, 0x0d, 0x89, - 0x43, 0x08, 0x49, 0x77, 0x78, 0x89, 0x07, 0xc9, - 0x0d, 0xc9, 0x43, 0x08, 0x49, 0x74, 0x78, 0xc9, - 0x07, 0x89, 0x0f, 0x89, 0x01, 0x89, 0x43, 0x08, - 0x49, 0x71, 0x79, 0x09, 0x07, 0x89, 0x0f, 0x89, - 0x01, 0x09, 0x43, 0x08, 0x49, 0x6e, 0x79, 0x49, - 0x07, 0x89, 0x0f, 0x89, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x6b, 0x79, 0x89, 0x07, 0x89, 0x0f, 0x89, - 0x43, 0x08, 0x49, 0x68, 0x62, 0x08, 0x48, 0x68, - 0x79, 0xc0, 0x07, 0xc0, 0x0e, 0x40, 0x49, 0x66, - 0x7a, 0x09, 0x07, 0xc9, 0xe0, 0x01, 0xe0, 0x21, - 0xe0, 0x18, 0x0e, 0xc9, 0x43, 0x08, 0x49, 0x62, - 0x7a, 0x49, 0x07, 0xc9, 0x0f, 0x09, 0x43, 0x08, - 0x49, 0x5f, 0x7a, 0x89, 0x07, 0xc9, 0x0f, 0x49, - 0x43, 0x08, 0x49, 0x5d, 0x7a, 0xc9, 0x07, 0xc9, - 0x0f, 0x89, 0x43, 0x08, 0x49, 0x5a, 0x7b, 0x09, - 0x07, 0xc9, 0x0f, 0xc9, 0x43, 0x08, 0x49, 0x57, - 0x62, 0x48, 0xe0, 0x01, 0x20, 0x4a, 0xe7, 0x1d, - 0x48, 0x51, 0x68, 0x01, 0x4b, 0x55, 0x40, 0x19, - 0x60, 0x01, 0xe0, 0x8f, 0x48, 0x49, 0x68, 0x00, - 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x08, - 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x30, 0x23, 0x00, - 0x22, 0x00, 0x49, 0x4f, 0xf7, 0xf4, 0xfc, 0x10, - 0xb0, 0x01, 0x20, 0x00, 0x49, 0x42, 0x60, 0x48, - 0x48, 0x45, 0x68, 0x01, 0x4b, 0x4b, 0x43, 0x19, - 0x60, 0x01, 0x48, 0x4a, 0x21, 0x33, 0x06, 0x49, - 0x60, 0x48, 0x48, 0x49, 0x68, 0x01, 0x23, 0x04, - 0x43, 0x19, 0x60, 0x01, 0x2c, 0x00, 0xd1, 0x0e, - 0x48, 0x3c, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0a, - 0x48, 0x3a, 0x68, 0x00, 0x49, 0x38, 0x62, 0xc8, - 0x20, 0x00, 0x49, 0x38, 0x60, 0x08, 0x20, 0x00, - 0x21, 0x31, 0x06, 0x49, 0x61, 0x88, 0x20, 0x00, - 0x49, 0x30, 0x68, 0x09, 0x31, 0x80, 0x70, 0x48, - 0x20, 0x00, 0x49, 0x2e, 0x68, 0x09, 0x31, 0x80, - 0x70, 0x88, 0x20, 0x00, 0x49, 0x39, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x39, 0x64, 0x08, 0x20, 0x03, - 0x49, 0x2a, 0x61, 0x08, 0x25, 0x00, 0x2d, 0x20, - 0xd3, 0x02, 0xe0, 0x06, 0x35, 0x01, 0xe7, 0xfa, - 0x20, 0xff, 0x49, 0x24, 0x68, 0x09, 0x55, 0x48, - 0xe7, 0xf8, 0x20, 0xff, 0x49, 0x21, 0x68, 0x09, - 0x31, 0x40, 0x72, 0x08, 0x20, 0xff, 0x49, 0x1f, - 0x68, 0x09, 0x31, 0x40, 0x76, 0x08, 0x20, 0xff, - 0x49, 0x1c, 0x68, 0x09, 0x31, 0x60, 0x72, 0x08, - 0x20, 0xff, 0x49, 0x1a, 0x68, 0x09, 0x31, 0x20, - 0x72, 0x08, 0x20, 0xff, 0x49, 0x17, 0x68, 0x09, - 0x31, 0x20, 0x76, 0x08, 0x20, 0xff, 0x49, 0x15, - 0x68, 0x09, 0x31, 0x60, 0x76, 0x08, 0x20, 0x00, - 0x49, 0x12, 0x68, 0x09, 0x31, 0x40, 0x72, 0x88, - 0x20, 0x00, 0x49, 0x10, 0x68, 0x09, 0x31, 0x40, - 0x76, 0x88, 0x20, 0x00, 0x49, 0x0d, 0x68, 0x09, - 0x31, 0x60, 0x72, 0x88, 0x20, 0x00, 0x49, 0x0b, - 0x68, 0x09, 0x31, 0x20, 0x72, 0x88, 0x20, 0x00, - 0x49, 0x08, 0x68, 0x09, 0x31, 0x20, 0x76, 0x88, - 0x20, 0x00, 0x49, 0x06, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x88, 0x20, 0x00, 0x49, 0x03, 0x68, 0x09, - 0x31, 0x80, 0x70, 0xc8, 0x20, 0x00, 0xe6, 0x85, - 0xe6, 0x84, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb0, - 0x62, 0x00, 0x03, 0x00, 0x66, 0x00, 0x01, 0x00, - 0xa0, 0x00, 0x0d, 0x80, 0x2e, 0x08, 0x20, 0x88, - 0x66, 0x00, 0x00, 0x08, 0x2e, 0x01, 0xe1, 0xa8, - 0xdf, 0xff, 0xff, 0xff, 0x62, 0x01, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb4, 0xfc, 0xb7, 0xff, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x23, 0x48, 0x00, 0x00, - 0x66, 0x00, 0x01, 0x18, 0x9e, 0x00, 0x0a, 0x00, - 0x9e, 0x00, 0x0a, 0x80, 0xb5, 0xf7, 0x1c, 0x17, - 0x98, 0x00, 0x06, 0x02, 0x0e, 0x12, 0x99, 0x01, - 0x06, 0x0d, 0x0e, 0x2d, 0x48, 0x6a, 0x68, 0x00, - 0x5c, 0x81, 0x2a, 0x20, 0xdb, 0x04, 0x20, 0xa2, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x29, 0xff, 0xd1, 0x01, 0x20, 0x4b, 0xe7, 0xf7, - 0x48, 0x64, 0x69, 0x80, 0x28, 0x00, 0xd1, 0x03, - 0x29, 0x04, 0xd1, 0x01, 0x20, 0x58, 0xe7, 0xef, - 0x48, 0x60, 0x69, 0x80, 0x28, 0x00, 0xd1, 0x03, - 0x29, 0x02, 0xd0, 0x01, 0x29, 0x03, 0xd1, 0x0b, - 0x48, 0x5c, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, - 0x29, 0x00, 0xd1, 0x05, 0x48, 0x59, 0x69, 0x80, - 0x28, 0x01, 0xd1, 0x03, 0x29, 0x01, 0xd0, 0x01, - 0x20, 0x4d, 0xe7, 0xd9, 0x29, 0x02, 0xd1, 0x05, - 0x48, 0x53, 0x68, 0x00, 0x30, 0x40, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x17, 0x29, 0x03, 0xd1, 0x05, - 0x48, 0x4f, 0x68, 0x00, 0x30, 0x40, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x0f, 0x29, 0x00, 0xd1, 0x05, - 0x48, 0x4b, 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x07, 0x29, 0x01, 0xd1, 0x07, - 0x48, 0x47, 0x68, 0x00, 0x30, 0x20, 0x7e, 0x80, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x4e, 0xe7, 0xb7, - 0x68, 0x78, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x4c, - 0xe7, 0xb2, 0x23, 0x01, 0x01, 0x08, 0x4e, 0x40, - 0x68, 0x36, 0x19, 0x80, 0x30, 0x20, 0x72, 0x83, - 0x2d, 0x01, 0xd1, 0x0b, 0x20, 0x33, 0x06, 0x40, - 0x6e, 0x40, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, - 0x00, 0xd3, 0x4e, 0x3b, 0x68, 0x36, 0x19, 0x9b, - 0x60, 0x58, 0xe0, 0x12, 0x2d, 0x02, 0xd1, 0x0a, - 0x48, 0x38, 0x6c, 0xc0, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc3, 0x00, 0xd0, 0x4e, 0x34, 0x68, 0x36, - 0x19, 0x80, 0x60, 0x43, 0xe0, 0x05, 0x68, 0x3b, - 0x00, 0xd0, 0x4e, 0x31, 0x68, 0x36, 0x19, 0x80, - 0x60, 0x43, 0x68, 0x3b, 0x01, 0x08, 0x4e, 0x2c, - 0x68, 0x36, 0x19, 0x80, 0x62, 0x03, 0x68, 0x7b, - 0x01, 0x08, 0x4e, 0x29, 0x68, 0x36, 0x19, 0x80, - 0x62, 0x43, 0x01, 0x08, 0x4b, 0x26, 0x68, 0x1b, - 0x18, 0xc0, 0x62, 0xc7, 0x01, 0x08, 0x4b, 0x24, - 0x68, 0x1b, 0x18, 0xc0, 0x30, 0x20, 0x72, 0x45, - 0x01, 0x08, 0x4b, 0x21, 0x68, 0x1b, 0x18, 0xc0, - 0x30, 0x20, 0x72, 0x02, 0x20, 0x00, 0x60, 0x78, - 0x20, 0x00, 0x72, 0x78, 0x20, 0x00, 0x4b, 0x20, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x1f, 0x64, 0x18, - 0x01, 0x08, 0x4b, 0x19, 0x68, 0x1b, 0x18, 0xc0, - 0x6a, 0x40, 0x28, 0xbc, 0xdd, 0x01, 0x24, 0xbc, - 0xe0, 0x04, 0x01, 0x08, 0x4b, 0x14, 0x68, 0x1b, - 0x18, 0xc0, 0x6a, 0x44, 0x48, 0x18, 0x60, 0x04, - 0x29, 0x01, 0xd1, 0x14, 0x20, 0x01, 0x4b, 0x17, - 0x62, 0x98, 0x48, 0x17, 0x68, 0x03, 0x04, 0x1b, - 0x0c, 0x1b, 0x60, 0x03, 0x48, 0x14, 0x04, 0x23, - 0x68, 0x06, 0x43, 0x33, 0x60, 0x03, 0x48, 0x13, - 0x68, 0x06, 0x23, 0x20, 0x43, 0x33, 0x60, 0x03, - 0x20, 0x01, 0x4b, 0x0e, 0x63, 0x18, 0x48, 0x07, - 0x69, 0x80, 0x28, 0x00, 0xd1, 0x04, 0x48, 0x0e, - 0x68, 0x06, 0x23, 0x28, 0x43, 0x33, 0x60, 0x03, - 0x20, 0x00, 0xe7, 0x31, 0xe7, 0x30, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb0, 0x66, 0x00, 0x01, 0x00, - 0x2e, 0x08, 0x9b, 0x40, 0x66, 0x00, 0x00, 0x80, - 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, - 0x62, 0x00, 0x03, 0x00, 0x62, 0x01, 0x00, 0x00, - 0x62, 0x01, 0x00, 0x20, 0x62, 0x01, 0x00, 0x24, - 0x64, 0x00, 0x00, 0x60, 0xb5, 0xf3, 0x1c, 0x0f, - 0x98, 0x00, 0x06, 0x06, 0x0e, 0x36, 0xb0, 0x82, - 0x4d, 0x68, 0x49, 0x69, 0x91, 0x01, 0x48, 0x69, - 0x68, 0x00, 0x5d, 0x84, 0x2e, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0xff, 0xd1, 0x02, - 0x20, 0x4b, 0xb0, 0x02, 0xe7, 0xf6, 0x48, 0x62, - 0x69, 0x80, 0x28, 0x00, 0xd1, 0x05, 0x2c, 0x02, - 0xd0, 0x03, 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, - 0xd1, 0x0b, 0x48, 0x5d, 0x69, 0x80, 0x28, 0x02, - 0xd1, 0x01, 0x2c, 0x00, 0xd1, 0x05, 0x48, 0x5a, - 0x69, 0x80, 0x28, 0x01, 0xd1, 0x04, 0x2c, 0x01, - 0xd0, 0x02, 0x20, 0x4d, 0xb0, 0x02, 0xe7, 0xdd, - 0x48, 0x54, 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x4f, 0xb0, 0x02, - 0xe7, 0xd4, 0x48, 0x50, 0x68, 0x00, 0x30, 0x80, - 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x50, - 0xb0, 0x02, 0xe7, 0xcb, 0x68, 0x78, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0x4c, 0xb0, 0x02, 0xe7, 0xc5, - 0x2c, 0x04, 0xd1, 0x08, 0x68, 0x79, 0x20, 0xbc, - 0xf0, 0x01, 0xff, 0xac, 0x29, 0x00, 0xd0, 0x02, - 0x20, 0x59, 0xb0, 0x02, 0xe7, 0xba, 0x48, 0x43, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x21, 0x01, - 0x40, 0x81, 0x48, 0x41, 0x68, 0x40, 0x40, 0x08, - 0x07, 0x80, 0x0f, 0x80, 0xd0, 0x02, 0x20, 0x51, - 0xb0, 0x02, 0xe7, 0xab, 0x20, 0x33, 0x06, 0x40, - 0x6b, 0x80, 0x90, 0x00, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x02, 0x20, 0x52, 0xb0, 0x02, 0xe7, 0xa1, - 0x2c, 0x00, 0xd1, 0x04, 0x48, 0x37, 0x68, 0x01, - 0x23, 0xfd, 0x40, 0x19, 0x60, 0x01, 0x20, 0x01, - 0x49, 0x32, 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, - 0x68, 0x38, 0x49, 0x30, 0x68, 0x09, 0x67, 0x08, - 0x68, 0x78, 0x49, 0x2e, 0x68, 0x09, 0x67, 0x48, - 0x48, 0x2c, 0x68, 0x00, 0x67, 0xc7, 0x20, 0x00, - 0x49, 0x2a, 0x68, 0x09, 0x31, 0x60, 0x76, 0x48, - 0x48, 0x28, 0x68, 0x00, 0x30, 0x60, 0x76, 0x06, - 0x20, 0x00, 0x60, 0x78, 0x20, 0x00, 0x72, 0x78, - 0x48, 0x24, 0x68, 0x00, 0x5d, 0x80, 0x28, 0x01, - 0xd1, 0x02, 0x20, 0x01, 0x49, 0x24, 0x62, 0x88, - 0x98, 0x00, 0x01, 0x00, 0x19, 0x45, 0x48, 0x1f, - 0x68, 0x00, 0x6f, 0x40, 0x28, 0xbc, 0xdd, 0x07, - 0x48, 0x20, 0x60, 0xa8, 0x20, 0xbc, 0x49, 0x1b, - 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, 0xe0, 0x0d, - 0x48, 0x18, 0x68, 0x00, 0x6f, 0x40, 0x23, 0x01, - 0x07, 0x9b, 0x43, 0x18, 0x60, 0xa8, 0x48, 0x15, - 0x68, 0x00, 0x6f, 0x40, 0x49, 0x13, 0x68, 0x09, - 0x31, 0x80, 0x70, 0x08, 0x48, 0x11, 0x68, 0x00, - 0x30, 0x80, 0x78, 0x80, 0x00, 0x43, 0x18, 0x18, - 0x01, 0x80, 0x99, 0x01, 0x18, 0x41, 0x91, 0x01, - 0x48, 0x0c, 0x68, 0x00, 0x6f, 0x00, 0x60, 0x28, - 0x99, 0x01, 0x1d, 0x08, 0x60, 0x68, 0x20, 0x01, - 0x06, 0x00, 0x60, 0xe8, 0x99, 0x00, 0x20, 0x01, - 0x40, 0x88, 0x21, 0x33, 0x06, 0x49, 0x63, 0x48, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x3a, 0xb0, 0x02, - 0xe7, 0x38, 0x00, 0x00, 0x9e, 0x00, 0x09, 0x80, - 0x9e, 0x00, 0x0b, 0x80, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0x00, 0x62, 0x00, 0x00, 0x1c, - 0x62, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0xbc, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x81, 0x98, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, 0xb0, 0x82, - 0x48, 0xf9, 0x68, 0x00, 0x99, 0x02, 0x5c, 0x44, - 0x98, 0x02, 0x28, 0x20, 0xdb, 0x05, 0x20, 0xa2, - 0xb0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2c, 0xff, 0xd1, 0x02, 0x20, 0x4b, - 0xb0, 0x03, 0xe7, 0xf6, 0x48, 0xf1, 0x69, 0x80, - 0x28, 0x00, 0xd1, 0x05, 0x2c, 0x02, 0xd0, 0x03, - 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, - 0x48, 0xec, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, - 0x2c, 0x00, 0xd1, 0x05, 0x48, 0xe9, 0x69, 0x80, - 0x28, 0x01, 0xd1, 0x04, 0x2c, 0x01, 0xd0, 0x02, - 0x20, 0x4d, 0xb0, 0x03, 0xe7, 0xdd, 0x48, 0xe4, - 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x4f, 0xb0, 0x03, 0xe7, 0xd4, - 0x68, 0x78, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x4c, - 0xb0, 0x03, 0xe7, 0xce, 0x2c, 0x04, 0xd1, 0x08, - 0x68, 0x79, 0x20, 0xbc, 0xf0, 0x01, 0xfe, 0xce, - 0x29, 0x00, 0xd0, 0x02, 0x20, 0x59, 0xb0, 0x03, - 0xe7, 0xc3, 0x48, 0xd7, 0x68, 0x00, 0x30, 0x80, - 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x50, - 0xb0, 0x03, 0xe7, 0xba, 0x2c, 0x00, 0xd1, 0x04, - 0x48, 0xd3, 0x68, 0x01, 0x23, 0xfd, 0x40, 0x19, - 0x60, 0x01, 0x48, 0xd2, 0x68, 0x01, 0x23, 0x8d, - 0x05, 0x9b, 0x43, 0x19, 0x60, 0x01, 0x48, 0xd0, - 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, 0x20, 0x01, - 0x49, 0xc9, 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, - 0x68, 0x38, 0x49, 0xc7, 0x68, 0x09, 0x67, 0x08, - 0x68, 0x78, 0x49, 0xc5, 0x68, 0x09, 0x67, 0x48, - 0x48, 0xc3, 0x68, 0x00, 0x67, 0xc7, 0x20, 0x00, - 0x49, 0xc1, 0x68, 0x09, 0x31, 0x60, 0x76, 0x48, - 0x98, 0x02, 0x49, 0xbf, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x08, 0x20, 0x00, 0x49, 0xbc, 0x68, 0x09, - 0x6f, 0xc9, 0x60, 0x48, 0x20, 0x00, 0x49, 0xba, - 0x68, 0x09, 0x6f, 0xc9, 0x72, 0x48, 0x48, 0xb8, - 0x68, 0x00, 0x99, 0x02, 0x5c, 0x40, 0x28, 0x01, - 0xd1, 0x02, 0x20, 0x01, 0x49, 0xb9, 0x62, 0x88, - 0x48, 0xb3, 0x68, 0x00, 0x30, 0x80, 0x78, 0x81, - 0x20, 0x01, 0x40, 0x88, 0x49, 0xb1, 0x68, 0x49, - 0x40, 0x08, 0x07, 0x80, 0x0f, 0x80, 0xd0, 0x1b, - 0x20, 0x00, 0x49, 0xad, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x88, 0x20, 0x51, 0x49, 0xaa, 0x68, 0x09, - 0x6f, 0xc9, 0x72, 0x48, 0x48, 0xa8, 0x68, 0x00, - 0x6f, 0xc0, 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x07, - 0x48, 0xa5, 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x01, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x07, 0xf9, 0xea, - 0x20, 0x51, 0xb0, 0x03, 0xe7, 0x55, 0xe1, 0x6c, - 0x20, 0x33, 0x06, 0x40, 0x6b, 0x81, 0x91, 0x00, - 0x99, 0x00, 0x20, 0x04, 0x40, 0x08, 0xd0, 0x07, - 0x20, 0x04, 0xf0, 0x00, 0xfc, 0xb3, 0x20, 0x33, - 0x06, 0x40, 0x6b, 0x81, 0x91, 0x00, 0xe7, 0xf3, - 0x4d, 0x9d, 0x99, 0x00, 0x01, 0x08, 0x19, 0x45, - 0x48, 0x95, 0x68, 0x00, 0x6f, 0x40, 0x28, 0xbc, - 0xdd, 0x07, 0x48, 0x9a, 0x60, 0xa8, 0x20, 0xbc, - 0x49, 0x91, 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, - 0xe0, 0x0d, 0x48, 0x8f, 0x68, 0x00, 0x6f, 0x40, - 0x23, 0x01, 0x07, 0x9b, 0x43, 0x18, 0x60, 0xa8, - 0x48, 0x8b, 0x68, 0x00, 0x6f, 0x40, 0x49, 0x8a, - 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, 0x48, 0x90, - 0x90, 0x01, 0x48, 0x87, 0x68, 0x00, 0x30, 0x80, - 0x78, 0x80, 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, - 0x99, 0x01, 0x18, 0x40, 0x90, 0x01, 0x48, 0x82, - 0x68, 0x00, 0x6f, 0x00, 0x60, 0x28, 0x98, 0x01, - 0x30, 0x04, 0x60, 0x68, 0x20, 0x01, 0x06, 0x00, - 0x60, 0xe8, 0x99, 0x00, 0x20, 0x01, 0x40, 0x88, - 0x21, 0x33, 0x06, 0x49, 0x63, 0x48, 0x48, 0x83, - 0x6b, 0x00, 0x23, 0x01, 0x06, 0x1b, 0x40, 0x18, - 0xd1, 0x03, 0x20, 0x04, 0xf0, 0x00, 0xfc, 0x6a, - 0xe7, 0xf5, 0x20, 0x01, 0x06, 0x00, 0x21, 0x33, - 0x06, 0x49, 0x60, 0x48, 0x4e, 0x7c, 0x48, 0x72, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x01, 0x00, - 0x19, 0x86, 0x98, 0x01, 0x30, 0x04, 0x60, 0x30, - 0x48, 0x78, 0x60, 0x70, 0x48, 0x6c, 0x68, 0x00, - 0x30, 0x80, 0x78, 0x00, 0x23, 0x01, 0x07, 0x9b, - 0x43, 0x18, 0x60, 0xb0, 0x20, 0x01, 0x05, 0x80, - 0x60, 0xf0, 0x48, 0x67, 0x68, 0x00, 0x30, 0x80, - 0x78, 0x81, 0x20, 0x01, 0x40, 0x88, 0x49, 0x65, - 0x60, 0xc8, 0x48, 0x63, 0x68, 0x00, 0x30, 0x60, - 0x7e, 0x00, 0x49, 0x61, 0x68, 0x09, 0x5c, 0x08, - 0x28, 0x00, 0xd0, 0x48, 0x28, 0x01, 0xd0, 0x47, - 0x28, 0x02, 0xd0, 0x02, 0x28, 0x03, 0xd0, 0x21, - 0xe0, 0x5a, 0x48, 0x67, 0x68, 0x01, 0x23, 0x02, - 0x43, 0x19, 0x60, 0x01, 0x48, 0x58, 0x68, 0x00, - 0x6f, 0x40, 0x49, 0x57, 0x68, 0x09, 0x31, 0x80, - 0x78, 0x09, 0x1a, 0x40, 0x28, 0xbc, 0xd8, 0x05, - 0x48, 0x5f, 0x68, 0x01, 0x23, 0x10, 0x43, 0x19, - 0x60, 0x01, 0xe0, 0x05, 0x48, 0x5c, 0x68, 0x01, - 0x23, 0x10, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, - 0x48, 0x59, 0x68, 0x01, 0x23, 0x08, 0x43, 0x19, - 0x60, 0x01, 0xe0, 0x39, 0x48, 0x56, 0x68, 0x01, - 0x23, 0x04, 0x43, 0x19, 0x60, 0x01, 0x48, 0x48, - 0x68, 0x00, 0x6f, 0x40, 0x49, 0x46, 0x68, 0x09, - 0x31, 0x80, 0x78, 0x09, 0x1a, 0x40, 0x28, 0xbc, - 0xd8, 0x05, 0x48, 0x4f, 0x68, 0x01, 0x23, 0x10, - 0x43, 0x19, 0x60, 0x01, 0xe0, 0x05, 0x48, 0x4c, - 0x68, 0x01, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x19, - 0x60, 0x01, 0x48, 0x49, 0x68, 0x01, 0x23, 0x08, - 0x43, 0x19, 0x60, 0x01, 0xe0, 0x18, 0xe0, 0x17, - 0x48, 0x46, 0x68, 0x01, 0x04, 0x09, 0x0c, 0x09, - 0x60, 0x01, 0x48, 0x44, 0x49, 0x36, 0x68, 0x09, - 0x31, 0x80, 0x78, 0x09, 0x04, 0x09, 0x68, 0x02, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x40, 0x68, 0x01, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, - 0x20, 0x01, 0x49, 0x34, 0x63, 0x08, 0xe7, 0xff, - 0x48, 0x36, 0x6b, 0x00, 0x23, 0x01, 0x05, 0x9b, - 0x40, 0x18, 0xd1, 0x03, 0x20, 0x04, 0xf0, 0x00, - 0xfb, 0xd1, 0xe7, 0xf5, 0x20, 0x01, 0x05, 0x80, - 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, 0x48, 0x26, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x23, 0x01, - 0x40, 0x58, 0x49, 0x23, 0x68, 0x09, 0x31, 0x80, - 0x70, 0x88, 0x48, 0x21, 0x68, 0x00, 0x6f, 0x40, - 0x49, 0x1f, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, - 0x1a, 0x40, 0x49, 0x1d, 0x68, 0x09, 0x67, 0x48, - 0x48, 0x1b, 0x68, 0x00, 0x6f, 0xc0, 0x30, 0x04, - 0x49, 0x19, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, - 0x68, 0x02, 0x18, 0x89, 0x60, 0x01, 0x48, 0x16, - 0x68, 0x00, 0x6f, 0x00, 0x49, 0x14, 0x68, 0x09, - 0x31, 0x80, 0x78, 0x09, 0x18, 0x40, 0x49, 0x12, - 0x68, 0x09, 0x67, 0x08, 0x48, 0x10, 0x68, 0x00, - 0x6f, 0x40, 0x28, 0x00, 0xd0, 0x00, 0xe6, 0xb3, - 0x48, 0x11, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, - 0x48, 0x0e, 0x68, 0x01, 0x4b, 0x19, 0x40, 0x19, - 0x60, 0x01, 0x20, 0x48, 0x49, 0x08, 0x68, 0x09, - 0x6f, 0xc9, 0x72, 0x48, 0x20, 0x00, 0x49, 0x06, - 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x48, 0x04, - 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x00, 0x28, 0xff, - 0xd0, 0x29, 0x48, 0x01, 0xe0, 0x20, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb0, 0x66, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x00, 0x1c, 0x66, 0x00, 0x00, 0x08, - 0x23, 0x48, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, - 0x9e, 0x00, 0x09, 0x80, 0x40, 0x00, 0x00, 0xbc, - 0x9e, 0x00, 0x0b, 0x80, 0x66, 0x00, 0x00, 0x80, - 0x9e, 0x00, 0x09, 0xc0, 0x66, 0x00, 0x01, 0xf0, - 0x64, 0x00, 0x00, 0x60, 0x62, 0x01, 0x00, 0x20, - 0x62, 0x01, 0x00, 0x24, 0xfc, 0xb7, 0xff, 0xff, - 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x01, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x07, 0xf8, 0x7f, 0x20, 0x00, - 0xb0, 0x03, 0xe5, 0xea, 0xb0, 0x02, 0xb0, 0x01, - 0xe5, 0xe7, 0xe5, 0xe6, 0xb5, 0xb0, 0x1c, 0x07, - 0x06, 0x3d, 0x0e, 0x2d, 0x48, 0x5d, 0x68, 0x00, - 0x5d, 0x44, 0x2d, 0x20, 0xdb, 0x03, 0x20, 0xa2, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x59, - 0x68, 0x00, 0x5d, 0x40, 0x28, 0xff, 0xd1, 0x01, - 0x20, 0x4b, 0xe7, 0xf5, 0x48, 0x56, 0x69, 0x80, - 0x28, 0x00, 0xd1, 0x05, 0x2c, 0x02, 0xd0, 0x03, - 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, - 0x48, 0x51, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, - 0x2c, 0x00, 0xd1, 0x05, 0x48, 0x4e, 0x69, 0x80, - 0x28, 0x01, 0xd1, 0x04, 0x2c, 0x01, 0xd0, 0x02, - 0x20, 0x4d, 0xe7, 0xdd, 0xe0, 0x90, 0x48, 0x4b, - 0x68, 0x01, 0x4b, 0x4b, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x49, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, - 0x48, 0x48, 0x68, 0x01, 0x23, 0x04, 0x43, 0x19, - 0x60, 0x01, 0x20, 0x00, 0x49, 0x41, 0x68, 0x09, - 0x31, 0x80, 0x70, 0x88, 0x20, 0x00, 0x49, 0x3f, - 0x68, 0x09, 0x31, 0x80, 0x70, 0x48, 0x20, 0xff, - 0x49, 0x3c, 0x68, 0x09, 0x55, 0x48, 0x2c, 0x00, - 0xd1, 0x03, 0x20, 0x18, 0x21, 0x31, 0x06, 0x49, - 0x62, 0x48, 0x01, 0x20, 0x49, 0x37, 0x68, 0x09, - 0x18, 0x40, 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, - 0xd0, 0x28, 0x20, 0x00, 0x49, 0x38, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x38, 0x64, 0x08, 0x20, 0x03, - 0x49, 0x31, 0x61, 0x08, 0x21, 0x55, 0x01, 0x20, - 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x80, 0x6a, 0xc0, - 0x72, 0x41, 0x21, 0x00, 0x01, 0x20, 0x4a, 0x2b, - 0x68, 0x12, 0x18, 0x80, 0x30, 0x20, 0x72, 0x81, - 0x01, 0x20, 0x49, 0x28, 0x68, 0x09, 0x18, 0x40, - 0x6a, 0xc0, 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x09, - 0x01, 0x20, 0x49, 0x24, 0x68, 0x09, 0x18, 0x40, - 0x6a, 0xc0, 0x7a, 0x01, 0x20, 0x01, 0x40, 0x88, - 0xf0, 0x06, 0xff, 0xf8, 0x48, 0x1f, 0x68, 0x00, - 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x2b, - 0x48, 0x1c, 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, - 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x00, 0x49, 0x19, - 0x68, 0x09, 0x31, 0x80, 0x70, 0xc8, 0x22, 0x00, - 0xb4, 0x04, 0x1c, 0x28, 0x23, 0x00, 0x22, 0x00, - 0x49, 0x1b, 0xf7, 0xf3, 0xfe, 0xcd, 0xb0, 0x01, - 0x20, 0x55, 0x49, 0x12, 0x68, 0x09, 0x6f, 0xc9, - 0x72, 0x48, 0x20, 0x00, 0x49, 0x0f, 0x68, 0x09, - 0x31, 0x60, 0x76, 0x88, 0x48, 0x0d, 0x68, 0x00, - 0x6f, 0xc0, 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x07, - 0x48, 0x0a, 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x01, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x06, 0xff, 0xc6, - 0x48, 0x09, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, - 0x48, 0x06, 0x68, 0x01, 0x4b, 0x0b, 0x40, 0x19, - 0x60, 0x01, 0x20, 0x00, 0xe7, 0x4c, 0xe7, 0x4b, - 0xe7, 0x4a, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0x00, 0x66, 0x00, 0x00, 0x08, - 0x23, 0x48, 0x00, 0x00, 0x66, 0x00, 0x01, 0x18, - 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, - 0x00, 0x00, 0xff, 0xff, 0xfc, 0xb7, 0xff, 0xff, - 0xb5, 0xff, 0x1c, 0x1f, 0x98, 0x00, 0x06, 0x02, - 0x0e, 0x12, 0x99, 0x01, 0x06, 0x0d, 0x0e, 0x2d, - 0x98, 0x02, 0x06, 0x04, 0x0e, 0x24, 0x48, 0x2d, - 0x68, 0x00, 0x5c, 0x81, 0x2a, 0x20, 0xdb, 0x04, - 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x29, 0xff, 0xd1, 0x01, 0x20, 0x4b, - 0xe7, 0xf7, 0x48, 0x27, 0x69, 0x80, 0x28, 0x00, - 0xd1, 0x05, 0x29, 0x02, 0xd0, 0x03, 0x29, 0x03, - 0xd0, 0x01, 0x29, 0x04, 0xd1, 0x0b, 0x48, 0x22, - 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, 0x29, 0x00, - 0xd1, 0x05, 0x48, 0x1f, 0x69, 0x80, 0x28, 0x01, - 0xd1, 0x03, 0x29, 0x01, 0xd0, 0x01, 0x20, 0x4d, - 0xe7, 0xdf, 0x29, 0x05, 0xd2, 0x2a, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x07, 0x04, 0x05, 0x06, 0x00, 0xe0, 0x24, - 0xe0, 0x23, 0xe0, 0x22, 0xe0, 0x21, 0x01, 0x08, - 0x4b, 0x12, 0x68, 0x1b, 0x18, 0xc0, 0x30, 0x20, - 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x05, 0x48, 0x0f, - 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x49, 0xe7, 0xc1, 0xe0, 0x13, - 0x2d, 0x00, 0xd1, 0x05, 0x00, 0xa0, 0x4b, 0x0b, - 0x18, 0xc0, 0x68, 0x00, 0x60, 0x38, 0xe0, 0x04, - 0x68, 0x38, 0x00, 0xa6, 0x4b, 0x07, 0x18, 0xf3, - 0x60, 0x18, 0xe0, 0x02, 0x20, 0x4a, 0xe7, 0xb0, - 0xe7, 0xff, 0x20, 0x00, 0xe7, 0xad, 0xe7, 0xac, - 0xe7, 0xab, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0x00, 0x62, 0x01, 0x00, 0x80, - 0xb5, 0xf7, 0xb0, 0x82, 0x98, 0x02, 0x06, 0x03, - 0x0e, 0x1b, 0x93, 0x00, 0x99, 0x03, 0x06, 0x08, - 0x0e, 0x00, 0x90, 0x01, 0x9a, 0x04, 0x06, 0x15, - 0x0e, 0x2d, 0xb0, 0x84, 0x4a, 0xca, 0x4f, 0xcb, - 0x48, 0xcb, 0x68, 0x00, 0x9b, 0x04, 0x5c, 0xc4, - 0x48, 0xca, 0x90, 0x02, 0x21, 0x00, 0x23, 0x00, - 0x93, 0x01, 0x9b, 0x04, 0x2b, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0xff, 0xd1, 0x02, - 0x20, 0x4b, 0xb0, 0x06, 0xe7, 0xf6, 0x48, 0xc2, - 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, 0x2c, 0x00, - 0xd1, 0x03, 0x48, 0xbf, 0x69, 0x80, 0x28, 0x02, - 0xd0, 0x02, 0x20, 0x4d, 0xb0, 0x06, 0xe7, 0xe9, - 0x98, 0x05, 0x28, 0x01, 0xd1, 0x08, 0x48, 0xb8, - 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x50, 0xb0, 0x06, 0xe7, 0xdd, - 0x98, 0x05, 0x28, 0x00, 0xd1, 0x05, 0x48, 0xb2, - 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, - 0xd0, 0x08, 0x98, 0x05, 0x28, 0x01, 0xd1, 0x08, - 0x48, 0xad, 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0x5a, 0xb0, 0x06, - 0xe7, 0xc8, 0x20, 0x00, 0x4b, 0xa8, 0x68, 0x1b, - 0x6f, 0xdb, 0x72, 0x58, 0x98, 0x05, 0x28, 0x00, - 0xd1, 0x50, 0x2d, 0x01, 0xd0, 0x01, 0x2d, 0x02, - 0xd1, 0x32, 0x4e, 0xa6, 0x68, 0x30, 0x23, 0x01, - 0x04, 0xdb, 0x43, 0x18, 0x60, 0x30, 0x20, 0x00, - 0x4b, 0xa3, 0x60, 0x18, 0x48, 0x9e, 0x68, 0x00, - 0x30, 0x80, 0x78, 0x40, 0x00, 0x43, 0x18, 0x18, - 0x01, 0x80, 0x9b, 0x02, 0x18, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x68, 0x01, 0x48, 0x9a, 0x69, 0x80, - 0x07, 0x80, 0x0f, 0x80, 0x01, 0x80, 0x43, 0x01, - 0x23, 0x20, 0x43, 0x19, 0x4b, 0x99, 0x43, 0x19, - 0x98, 0x02, 0x60, 0x01, 0x4e, 0x98, 0x68, 0x30, - 0x23, 0x01, 0x04, 0xdb, 0x43, 0x18, 0x60, 0x30, - 0x4e, 0x92, 0x68, 0x30, 0x4b, 0x95, 0x40, 0x18, - 0x60, 0x30, 0x2c, 0x00, 0xd1, 0x04, 0x20, 0x00, - 0x4b, 0x8b, 0x68, 0x1b, 0x33, 0x20, 0x72, 0x98, - 0x2d, 0x02, 0xd0, 0x04, 0x20, 0x01, 0x04, 0xc0, - 0x23, 0x33, 0x06, 0x5b, 0x60, 0x18, 0x2c, 0x00, - 0xd1, 0x0f, 0x20, 0xff, 0x02, 0x00, 0x40, 0x08, - 0xd1, 0x0b, 0x2d, 0x02, 0xd0, 0x09, 0x48, 0x82, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x40, 0x23, 0x01, - 0x40, 0x58, 0x4b, 0x7f, 0x68, 0x1b, 0x33, 0x80, - 0x70, 0x58, 0xe0, 0xed, 0x2d, 0x01, 0xd1, 0x73, - 0x2c, 0x00, 0xd1, 0x72, 0x20, 0x31, 0x06, 0x40, - 0x68, 0x80, 0x23, 0x08, 0x40, 0x18, 0xd1, 0x3a, - 0x48, 0x7a, 0x68, 0x06, 0x23, 0x05, 0x05, 0x9b, - 0x43, 0x33, 0x60, 0x03, 0x68, 0x10, 0x4b, 0x7c, - 0x40, 0x18, 0x60, 0x10, 0x32, 0xc0, 0x68, 0x10, - 0x4b, 0x79, 0x40, 0x18, 0x60, 0x10, 0x20, 0x00, - 0x4b, 0x6f, 0x68, 0x1b, 0x67, 0x58, 0x20, 0x00, - 0x4b, 0x6d, 0x68, 0x1b, 0x33, 0x80, 0x70, 0x18, - 0x48, 0x6d, 0x68, 0x80, 0x23, 0x02, 0x40, 0x18, - 0xd1, 0x04, 0x20, 0x00, 0x4b, 0x68, 0x68, 0x1b, - 0x33, 0x60, 0x76, 0x98, 0x20, 0x5b, 0x4b, 0x66, - 0x68, 0x1b, 0x6f, 0xdb, 0x72, 0x58, 0x4e, 0x6d, - 0x68, 0x30, 0x23, 0x02, 0x43, 0x18, 0x60, 0x30, - 0x4e, 0x67, 0x68, 0x30, 0x23, 0x05, 0x05, 0x9b, - 0x43, 0x18, 0x60, 0x30, 0x4e, 0x61, 0x68, 0x30, - 0x4b, 0x67, 0x40, 0x18, 0x60, 0x30, 0x20, 0x5b, - 0xb0, 0x06, 0xe7, 0x2b, 0xe0, 0xae, 0x48, 0x5d, - 0x68, 0x06, 0x23, 0x01, 0x05, 0x9b, 0x43, 0x33, - 0x60, 0x03, 0x20, 0x31, 0x06, 0x40, 0x6a, 0x00, - 0x23, 0x04, 0x40, 0x18, 0xd1, 0x27, 0x9b, 0x01, - 0x20, 0x31, 0x06, 0x40, 0x6b, 0x00, 0x18, 0x1b, - 0x93, 0x01, 0x4e, 0x5c, 0x68, 0x30, 0x23, 0x3b, - 0x40, 0x18, 0x60, 0x30, 0x4e, 0x57, 0x68, 0x30, - 0x23, 0x0e, 0x43, 0x18, 0x60, 0x30, 0x4e, 0x55, - 0x68, 0x30, 0x23, 0x0c, 0x40, 0x18, 0x60, 0x30, - 0x20, 0x37, 0x23, 0x31, 0x06, 0x5b, 0x60, 0x98, - 0x20, 0x01, 0x90, 0x00, 0x98, 0x00, 0x28, 0x64, - 0xd3, 0x04, 0xe0, 0x07, 0x98, 0x00, 0x30, 0x01, - 0x90, 0x00, 0xe7, 0xf7, 0xe7, 0xfa, 0xe0, 0x01, - 0xe0, 0x36, 0xe0, 0x34, 0xe7, 0xd1, 0x4e, 0x46, - 0x68, 0x30, 0x23, 0x01, 0x05, 0x9b, 0x43, 0x18, - 0x60, 0x30, 0x4e, 0x40, 0x68, 0x30, 0x4b, 0x48, - 0x40, 0x18, 0x60, 0x30, 0x48, 0x3c, 0x68, 0x40, - 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x5b, 0x4b, 0x38, - 0x68, 0x1b, 0x6f, 0xdb, 0x72, 0x58, 0x20, 0x00, - 0x4b, 0x35, 0x68, 0x1b, 0x33, 0x60, 0x76, 0x98, - 0x20, 0x5b, 0xb0, 0x06, 0xe6, 0xda, 0xe0, 0x5d, - 0x48, 0x31, 0x68, 0x00, 0x6f, 0xc0, 0x1d, 0x06, - 0x48, 0x2f, 0x68, 0x00, 0x30, 0x80, 0x78, 0x00, - 0x9b, 0x01, 0x1a, 0xc0, 0x68, 0x33, 0x18, 0xc0, - 0x60, 0x30, 0x20, 0x5c, 0x4b, 0x2a, 0x68, 0x1b, - 0x6f, 0xdb, 0x72, 0x58, 0x20, 0x00, 0x4b, 0x28, - 0x68, 0x1b, 0x33, 0x60, 0x76, 0x98, 0xe0, 0x3f, - 0x20, 0x33, 0x06, 0x40, 0x6b, 0x80, 0x90, 0x03, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x03, 0x20, 0x52, - 0xb0, 0x06, 0xe6, 0xb7, 0xe0, 0x3a, 0x98, 0x03, - 0x01, 0x00, 0x19, 0xc7, 0x48, 0x1e, 0x68, 0x00, - 0x6f, 0x40, 0x28, 0xbc, 0xdd, 0x07, 0x48, 0x29, - 0x60, 0xb8, 0x20, 0xbc, 0x4b, 0x1a, 0x68, 0x1b, - 0x33, 0x80, 0x70, 0x18, 0xe0, 0x0d, 0x48, 0x18, - 0x68, 0x00, 0x6f, 0x40, 0x23, 0x01, 0x07, 0x9b, - 0x43, 0x18, 0x60, 0xb8, 0x48, 0x14, 0x68, 0x00, - 0x6f, 0x40, 0x4b, 0x13, 0x68, 0x1b, 0x33, 0x80, - 0x70, 0x18, 0x48, 0x11, 0x68, 0x00, 0x30, 0x80, - 0x78, 0x80, 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, - 0x18, 0x82, 0x48, 0x0d, 0x68, 0x00, 0x6f, 0x00, - 0x60, 0x38, 0x1d, 0x10, 0x60, 0x78, 0x20, 0x01, - 0x06, 0x00, 0x60, 0xf8, 0x9e, 0x03, 0x20, 0x01, - 0x40, 0xb0, 0x23, 0x33, 0x06, 0x5b, 0x63, 0x58, - 0x20, 0x00, 0xb0, 0x06, 0xe6, 0x7e, 0xb0, 0x04, - 0xb0, 0x02, 0xe6, 0x7b, 0xe6, 0x7a, 0x00, 0x00, - 0x9e, 0x00, 0x0b, 0x80, 0x9e, 0x00, 0x09, 0x80, - 0x2e, 0x08, 0xb9, 0xb0, 0x9e, 0x00, 0x0a, 0x00, - 0x66, 0x00, 0x01, 0x00, 0x66, 0x00, 0x00, 0x08, - 0x62, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x04, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x62, 0x00, 0x00, 0x1c, - 0xfe, 0xbf, 0xff, 0xff, 0x62, 0x00, 0x00, 0x08, - 0xff, 0xbf, 0xff, 0xff, 0x40, 0x00, 0x00, 0xbc, - 0x48, 0x07, 0x69, 0x80, 0x28, 0x02, 0xd0, 0x03, - 0x48, 0x05, 0x69, 0x80, 0x28, 0x03, 0xd1, 0x04, - 0x20, 0x31, 0x06, 0x40, 0x6a, 0x80, 0x47, 0x70, - 0xe0, 0x01, 0x20, 0x00, 0xe7, 0xfb, 0xe7, 0xfa, - 0x66, 0x00, 0x01, 0x00, 0xb5, 0xb0, 0x27, 0x0f, - 0x20, 0x31, 0x06, 0x40, 0x68, 0xc0, 0x09, 0x05, - 0xf7, 0xff, 0xff, 0xe6, 0x43, 0xc4, 0x48, 0x18, - 0x69, 0x80, 0x28, 0x00, 0xd0, 0x03, 0x48, 0x16, - 0x69, 0x80, 0x28, 0x01, 0xd1, 0x03, 0x1c, 0x38, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x09, - 0xd2, 0x1e, 0xa3, 0x02, 0x5d, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x07, 0x07, 0x07, 0x0e, 0x00, 0x1c, 0x2f, - 0xe0, 0x13, 0x20, 0x08, 0x40, 0x20, 0xd0, 0x01, - 0x1c, 0x2f, 0xe0, 0x00, 0x27, 0x02, 0xe0, 0x0c, - 0x20, 0x08, 0x40, 0x20, 0xd0, 0x06, 0x20, 0x02, - 0x40, 0x20, 0xd0, 0x01, 0x27, 0x07, 0xe0, 0x00, - 0x27, 0x08, 0xe0, 0x00, 0x27, 0x02, 0xe0, 0x00, - 0xe7, 0xff, 0x1c, 0x38, 0xe7, 0xd8, 0xe7, 0xd7, - 0x66, 0x00, 0x01, 0x00, 0x1c, 0x01, 0x29, 0x07, - 0xd2, 0x0f, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x05, 0x06, 0x09, - 0x08, 0x07, 0x0a, 0x00, 0xe0, 0x06, 0xe0, 0x05, - 0xe0, 0x04, 0xe0, 0x03, 0xe0, 0x02, 0xe0, 0x01, - 0xe0, 0x00, 0xe7, 0xff, 0x20, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0x00, 0x00, 0x20, 0x1d, 0x02, 0x80, - 0x69, 0x80, 0x49, 0x06, 0x60, 0x08, 0x20, 0x1d, - 0x02, 0x80, 0x69, 0x40, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x1d, 0x02, 0x80, 0x69, 0xc0, 0x49, 0x03, - 0x60, 0x08, 0x47, 0x70, 0x2e, 0x08, 0xd1, 0xfc, - 0x2e, 0x08, 0xd2, 0x00, 0x2e, 0x08, 0xd2, 0x04, - 0xb5, 0xf1, 0xb0, 0x81, 0x20, 0x00, 0x4d, 0x21, - 0x95, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, - 0x43, 0xdb, 0x4c, 0x1f, 0x68, 0x64, 0x42, 0x8c, - 0xdd, 0x21, 0x1c, 0x0c, 0x31, 0x01, 0x00, 0xa4, - 0x9d, 0x00, 0x59, 0x2f, 0x42, 0x9f, 0xd0, 0xf8, - 0x4c, 0x19, 0x68, 0x64, 0x42, 0x8c, 0xda, 0x00, - 0xe0, 0x15, 0x32, 0x01, 0x1c, 0x0c, 0x31, 0x01, - 0x00, 0xa4, 0x9d, 0x00, 0x59, 0x2b, 0x42, 0x9f, - 0xd0, 0xf8, 0x02, 0x9c, 0x43, 0x3c, 0x1c, 0x25, - 0x1c, 0x04, 0x30, 0x01, 0x00, 0xa4, 0x9e, 0x01, - 0x51, 0x35, 0x4c, 0x0f, 0x68, 0x64, 0x42, 0x8c, - 0xdb, 0x00, 0x32, 0x01, 0xe7, 0xd9, 0x28, 0x08, - 0xd3, 0x02, 0xe0, 0x07, 0x30, 0x01, 0xe7, 0xfa, - 0x25, 0x00, 0x43, 0xed, 0x00, 0x84, 0x9e, 0x01, - 0x51, 0x35, 0xe7, 0xf7, 0x4c, 0x07, 0x68, 0x24, - 0x2c, 0x00, 0xd1, 0x02, 0x24, 0x0d, 0x06, 0xe4, - 0x61, 0x22, 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xba, 0x38, - 0x2e, 0x08, 0xbb, 0x00, 0x2e, 0x08, 0xd1, 0xf0, - 0xb5, 0x80, 0x48, 0xdc, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x04, 0x48, 0xda, 0x68, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xff, 0x92, - 0x48, 0xd7, 0x49, 0xd8, 0x60, 0x08, 0x48, 0xd8, - 0x49, 0xd8, 0x60, 0x08, 0x48, 0xd8, 0x49, 0xd9, - 0x60, 0x08, 0x48, 0xd3, 0x49, 0xd8, 0x68, 0x0b, - 0x4a, 0xd8, 0x21, 0x00, 0xf0, 0x01, 0xf8, 0xda, - 0x20, 0x00, 0x49, 0xd0, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x00, 0x49, 0xd0, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x00, 0x49, 0xd0, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x00, 0x49, 0xca, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x48, 0xce, - 0x49, 0xc6, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0xc8, 0x20, 0x00, 0x49, 0xc5, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0x88, 0x48, 0xc7, 0x49, 0xc1, 0x68, 0x09, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, - 0x20, 0x00, 0x49, 0xc0, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x48, 0xc0, - 0x49, 0xbc, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0xc8, 0x27, 0x00, 0x2f, 0x19, - 0xd3, 0x02, 0xe0, 0x38, 0x37, 0x01, 0xe7, 0xfa, - 0x48, 0xba, 0x00, 0xb9, 0x4a, 0xb1, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, - 0x62, 0x08, 0x48, 0xb6, 0x00, 0xb9, 0x4a, 0xad, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0xb1, 0x00, 0xb9, - 0x4a, 0xaa, 0x68, 0x12, 0x18, 0x89, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x62, 0x08, 0x48, 0xad, - 0x00, 0xb9, 0x4a, 0xa6, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x60, 0x48, - 0x48, 0xa8, 0x00, 0xb9, 0x4a, 0xa3, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, - 0x62, 0x08, 0x48, 0xa4, 0x00, 0xb9, 0x4a, 0x9f, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x60, 0x48, 0xe7, 0xc6, 0x27, 0x00, - 0x2f, 0x07, 0xd3, 0x02, 0xe0, 0x86, 0x37, 0x01, - 0xe7, 0xfa, 0x48, 0x9c, 0x00, 0xb9, 0x19, 0xc9, - 0x00, 0xc9, 0x4a, 0x92, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x08, - 0x48, 0x96, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x8c, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x67, 0xc8, 0x48, 0x91, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x87, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0x8b, 0x00, 0xb9, - 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x81, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, - 0x67, 0x88, 0x48, 0x86, 0x00, 0xb9, 0x19, 0xc9, - 0x00, 0xc9, 0x4a, 0x7e, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x08, - 0x48, 0x80, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x78, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x67, 0xc8, 0x48, 0x7b, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x73, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0x75, 0x00, 0xb9, - 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x6d, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, - 0x67, 0x88, 0x48, 0x70, 0x00, 0xb9, 0x19, 0xc9, - 0x00, 0xc9, 0x4a, 0x6a, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x08, - 0x48, 0x6a, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x64, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x67, 0xc8, 0x48, 0x65, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x5f, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0x5f, 0x00, 0xb9, - 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x59, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, - 0x67, 0x88, 0xe7, 0x78, 0x27, 0x00, 0x2f, 0x12, - 0xd3, 0x02, 0xe0, 0x56, 0x37, 0x01, 0xe7, 0xfa, - 0x48, 0x56, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x4d, - 0x68, 0x12, 0x18, 0x89, 0x62, 0xc8, 0x48, 0x53, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x49, 0x68, 0x12, - 0x18, 0x89, 0x62, 0x88, 0x48, 0x4f, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x46, 0x68, 0x12, 0x18, 0x89, - 0x63, 0x08, 0x48, 0x4c, 0x21, 0x4c, 0x43, 0x79, - 0x4a, 0x42, 0x68, 0x12, 0x18, 0x89, 0x62, 0x48, - 0x48, 0x48, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x41, - 0x68, 0x12, 0x18, 0x89, 0x62, 0xc8, 0x48, 0x45, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x3d, 0x68, 0x12, - 0x18, 0x89, 0x62, 0x88, 0x48, 0x41, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x3a, 0x68, 0x12, 0x18, 0x89, - 0x63, 0x08, 0x48, 0x3e, 0x21, 0x4c, 0x43, 0x79, - 0x4a, 0x36, 0x68, 0x12, 0x18, 0x89, 0x62, 0x48, - 0x48, 0x3a, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x35, - 0x68, 0x12, 0x18, 0x89, 0x62, 0xc8, 0x48, 0x37, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x31, 0x68, 0x12, - 0x18, 0x89, 0x62, 0x88, 0x48, 0x33, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x89, - 0x63, 0x08, 0x48, 0x30, 0x21, 0x4c, 0x43, 0x79, - 0x4a, 0x2a, 0x68, 0x12, 0x18, 0x89, 0x62, 0x48, - 0xe7, 0xa8, 0x20, 0x00, 0x49, 0x25, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0xc8, - 0x20, 0x00, 0x49, 0x22, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x20, 0x00, - 0x49, 0x1c, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc9, 0x61, 0xc8, 0x20, 0x00, 0x49, 0x19, - 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, - 0x61, 0x88, 0x20, 0x00, 0x49, 0x19, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0xc8, - 0x20, 0x00, 0x49, 0x16, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x20, 0x92, - 0x49, 0x17, 0x60, 0x08, 0x27, 0x00, 0x2f, 0x08, - 0xd3, 0x02, 0xe0, 0x08, 0x37, 0x01, 0xe7, 0xfa, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0xb9, 0x4b, 0x13, - 0x18, 0xc9, 0x64, 0x08, 0xe7, 0xf6, 0x20, 0x10, - 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x08, 0x20, 0x01, - 0x49, 0x0f, 0x60, 0x08, 0x48, 0x0e, 0x68, 0x00, - 0xe6, 0x4d, 0xe6, 0x4c, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xbb, 0x28, 0x2e, 0x08, 0xbb, 0x1c, - 0x2e, 0x08, 0xc2, 0xc0, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xca, 0x58, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xd2, 0x00, 0x00, 0x00, 0x16, 0xc8, - 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0xd1, 0xf4, 0x68, 0x00, 0x0d, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0xb5, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x39, 0x20, 0x00, 0xf0, 0x00, - 0xf8, 0x4d, 0x1c, 0x39, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x03, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x68, 0x78, - 0x28, 0x07, 0xd9, 0x1d, 0x23, 0x03, 0x02, 0x5b, - 0x18, 0xf8, 0x6d, 0x40, 0x28, 0x00, 0xd0, 0x06, - 0x23, 0x03, 0x02, 0x5b, 0x18, 0xf8, 0x6d, 0x80, - 0x04, 0x00, 0x0c, 0x00, 0xd1, 0x02, 0x20, 0x02, - 0x60, 0xb8, 0xe0, 0x01, 0x20, 0x03, 0x60, 0xb8, - 0x1d, 0xfd, 0x35, 0x05, 0x23, 0x65, 0x01, 0x1b, - 0x18, 0xfe, 0x1c, 0x31, 0x1c, 0x28, 0x4a, 0x11, - 0x68, 0x13, 0x22, 0x28, 0xf0, 0x00, 0xfe, 0xee, - 0x2c, 0x06, 0xd0, 0x18, 0x00, 0xa0, 0x19, 0x00, - 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x2b, 0x01, 0x5b, - 0x18, 0xc6, 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0xb1, 0x00, 0xdb, 0x18, 0xc5, - 0x20, 0x06, 0x1b, 0x00, 0x00, 0x82, 0x18, 0x12, - 0x00, 0xd2, 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x04, - 0x68, 0x1b, 0xf0, 0x00, 0xfe, 0xd3, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd1, 0xfc, - 0x2e, 0x08, 0xd2, 0x04, 0xb5, 0xf0, 0x1c, 0x07, - 0x1c, 0x0c, 0x2f, 0x10, 0xd0, 0x13, 0x20, 0x4c, - 0x43, 0x78, 0x19, 0x00, 0x1d, 0xc6, 0x36, 0x01, - 0x20, 0x4c, 0x43, 0x78, 0x19, 0x00, 0x1d, 0xc5, - 0x35, 0x4d, 0x20, 0x10, 0x1b, 0xc0, 0x22, 0x4c, - 0x43, 0x42, 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x03, - 0x68, 0x1b, 0xf0, 0x00, 0xfe, 0xb3, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd2, 0x04, - 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x39, - 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x07, 0x1c, 0x39, - 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x33, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0xb1, 0x00, 0xdb, 0x18, 0xc6, - 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, 0x19, 0xc0, - 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc5, 0x20, 0x06, - 0x1b, 0x00, 0x00, 0x82, 0x18, 0x12, 0x00, 0xd2, - 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x09, 0x68, 0x1b, - 0xf0, 0x00, 0xfe, 0x84, 0x1d, 0xfe, 0x36, 0x05, - 0x23, 0x65, 0x01, 0x1b, 0x18, 0xfd, 0x1c, 0x31, - 0x1c, 0x28, 0x4a, 0x05, 0x68, 0x13, 0x22, 0x28, - 0xf0, 0x00, 0xfe, 0x78, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0xd2, 0x04, - 0x2e, 0x08, 0xd1, 0xfc, 0xb5, 0xf0, 0x1c, 0x07, - 0x1c, 0x0c, 0x20, 0x4c, 0x43, 0x78, 0x19, 0x00, - 0x1d, 0xc6, 0x36, 0x4d, 0x20, 0x4c, 0x43, 0x78, - 0x19, 0x00, 0x1d, 0xc5, 0x35, 0x01, 0x20, 0x10, - 0x1b, 0xc0, 0x22, 0x4c, 0x43, 0x42, 0x1c, 0x31, - 0x1c, 0x28, 0x4b, 0x03, 0x68, 0x1b, 0xf0, 0x00, - 0xfe, 0x59, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd2, 0x04, 0xb4, 0xb0, 0x1c, 0x02, - 0x1c, 0x0f, 0x20, 0x00, 0x1c, 0x03, 0x30, 0x01, - 0x00, 0x9b, 0x18, 0x9c, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xe3, 0x68, 0x5b, 0x10, 0x7c, 0x34, 0x01, - 0x42, 0xa3, 0xd2, 0x00, 0xe7, 0xf2, 0x38, 0x01, - 0x21, 0x18, 0x42, 0x81, 0xd8, 0x02, 0xe0, 0x1a, - 0x39, 0x01, 0xe7, 0xfa, 0x00, 0x8b, 0x18, 0x9c, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xe3, 0x69, 0xdc, - 0x00, 0x8b, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xeb, 0x62, 0x1c, 0x00, 0x8b, 0x18, 0x9c, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xe3, 0x68, 0x1c, - 0x00, 0x8b, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xeb, 0x60, 0x5c, 0xe7, 0xe4, 0x23, 0x00, - 0x2b, 0x00, 0xd0, 0x10, 0x10, 0x7b, 0x1c, 0x5c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xeb, 0x62, 0x1c, 0x10, 0x7b, 0x1c, 0x5c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xeb, 0x60, 0x5c, 0xe0, 0x0e, 0x10, 0x7c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xeb, 0x62, 0x1c, 0x10, 0x7b, 0x1c, 0x5c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xeb, 0x60, 0x5c, 0xbc, 0xb0, 0x47, 0x70, - 0xb4, 0xb0, 0x1c, 0x02, 0x1c, 0x0f, 0x21, 0x00, - 0x1c, 0x0b, 0x31, 0x01, 0x00, 0x9b, 0x18, 0x9c, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xe3, 0x68, 0x5b, - 0x10, 0x7c, 0x34, 0x01, 0x42, 0xa3, 0xd0, 0x00, - 0xe7, 0xf2, 0x39, 0x01, 0x1c, 0x08, 0x28, 0x18, - 0xd3, 0x02, 0xe0, 0x1a, 0x30, 0x01, 0xe7, 0xfa, - 0x00, 0x83, 0x18, 0x9c, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xe3, 0x6a, 0x5c, 0x00, 0x83, 0x18, 0x9d, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xeb, 0x62, 0x1c, - 0x00, 0x83, 0x18, 0x9c, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xe3, 0x68, 0x9c, 0x00, 0x83, 0x18, 0x9d, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xeb, 0x60, 0x5c, - 0xe7, 0xe4, 0x4c, 0x06, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xd3, 0x60, 0x1c, 0x4c, 0x03, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xd3, 0x66, 0x5c, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0c, 0x1c, 0x15, - 0x6a, 0xa1, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x19, - 0x62, 0x39, 0x21, 0x01, 0x02, 0x89, 0x43, 0x29, - 0x62, 0x79, 0x6a, 0xe1, 0x05, 0x89, 0x0d, 0x89, - 0x61, 0xf9, 0x6b, 0x61, 0x31, 0x01, 0x05, 0x89, - 0x0d, 0x89, 0x61, 0xb9, 0x69, 0x61, 0x60, 0xf9, - 0x69, 0xa1, 0x61, 0x39, 0x69, 0xe1, 0x61, 0x79, - 0x68, 0xa1, 0x23, 0x01, 0x06, 0x1b, 0x40, 0x19, - 0xd0, 0x02, 0x49, 0x0f, 0x60, 0xb9, 0xe0, 0x01, - 0x21, 0x00, 0x60, 0xb9, 0x6a, 0x60, 0x28, 0x00, - 0xd0, 0x0b, 0x68, 0x41, 0x60, 0x39, 0x78, 0x01, - 0x00, 0x89, 0x4b, 0x0a, 0x18, 0xc9, 0x60, 0x79, - 0x68, 0xb9, 0x88, 0x42, 0x43, 0x11, 0x60, 0xb9, - 0xe0, 0x07, 0x21, 0x00, 0x60, 0x39, 0x21, 0x00, - 0x60, 0x79, 0x68, 0xb9, 0x0c, 0x09, 0x04, 0x09, - 0x60, 0xb9, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x68, 0x00, 0x08, 0x00, - 0xb4, 0x80, 0x1c, 0x02, 0x1c, 0x0f, 0x69, 0x79, - 0x60, 0xd1, 0x69, 0xb9, 0x61, 0x11, 0x69, 0xf9, - 0x61, 0x51, 0x68, 0xb9, 0x23, 0x01, 0x06, 0x1b, - 0x40, 0x19, 0xd0, 0x02, 0x49, 0x0e, 0x60, 0x91, - 0xe0, 0x01, 0x21, 0x00, 0x60, 0x91, 0x6a, 0x78, - 0x28, 0x00, 0xd0, 0x0b, 0x68, 0x41, 0x60, 0x11, - 0x78, 0x01, 0x00, 0x89, 0x4b, 0x09, 0x18, 0xc9, - 0x60, 0x51, 0x68, 0x91, 0x88, 0x43, 0x43, 0x19, - 0x60, 0x91, 0xe0, 0x07, 0x21, 0x00, 0x60, 0x11, - 0x21, 0x00, 0x60, 0x51, 0x68, 0x91, 0x0c, 0x09, - 0x04, 0x09, 0x60, 0x91, 0xbc, 0x80, 0x47, 0x70, - 0xff, 0xff, 0x00, 0x00, 0x68, 0x00, 0x08, 0x00, - 0x1c, 0x01, 0x48, 0x07, 0x62, 0x08, 0x48, 0x06, - 0x62, 0x48, 0x48, 0x05, 0x61, 0xc8, 0x48, 0x04, - 0x61, 0x88, 0x20, 0x00, 0x60, 0x08, 0x20, 0x00, - 0x60, 0x48, 0x20, 0x00, 0x60, 0x88, 0x47, 0x70, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0xb0, 0x1c, 0x07, - 0x1c, 0x0c, 0x2c, 0x07, 0xd2, 0x73, 0x25, 0x00, - 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x2f, 0x35, 0x01, - 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, - 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, - 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, - 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1a, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0xf8, - 0xf0, 0x00, 0xfb, 0xd2, 0xe7, 0xcf, 0x23, 0xcf, - 0x00, 0xdb, 0x18, 0xf8, 0xf7, 0xff, 0xfb, 0xb8, - 0x25, 0x00, 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x54, - 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, - 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc0, 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, - 0x00, 0xc9, 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1a, - 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0xdb, 0xf0, 0x00, 0xfb, 0x6b, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, - 0x43, 0x69, 0x19, 0xc9, 0xe0, 0x00, 0xe0, 0x94, - 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0xcc, - 0xf0, 0x00, 0xfb, 0x7a, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, 0xfb, 0x60, - 0xe7, 0xaa, 0x25, 0x07, 0x2d, 0x11, 0xdb, 0x02, - 0xe0, 0x4e, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0x80, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, - 0x69, 0xc9, 0x42, 0x88, 0xd0, 0x18, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x80, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0xb1, 0xf0, 0x00, 0xfb, 0x16, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, - 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x01, 0x48, 0xa2, 0xf0, 0x00, - 0xfb, 0x27, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x30, 0x34, 0xf7, 0xff, 0xfb, 0x0d, 0xe7, 0xb0, - 0x25, 0x0a, 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x1f, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x8d, 0xf0, 0x00, 0xfa, 0xcf, 0xe7, 0xdf, - 0xe1, 0xca, 0x2c, 0x0e, 0xd3, 0x73, 0x3c, 0x07, - 0x1f, 0xe5, 0x42, 0xa5, 0xd3, 0x02, 0xe0, 0x1f, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x79, 0xf0, 0x00, 0xfa, 0xd5, 0xe7, 0xdf, - 0x1c, 0x25, 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x50, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x80, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, 0x69, 0xc9, - 0x42, 0x88, 0xd0, 0x18, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x61, 0xf0, 0x00, 0xfa, 0x77, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, - 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, - 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0x53, 0xf0, 0x00, 0xfa, 0x88, - 0x20, 0x4c, 0x43, 0x68, 0xe0, 0x00, 0xe0, 0x29, - 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, 0xfa, 0x6c, - 0xe7, 0xae, 0x25, 0x0a, 0x2d, 0x11, 0xdb, 0x02, - 0xe0, 0x1f, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, - 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, - 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0x3d, 0xf0, 0x00, 0xfa, 0x2e, - 0xe7, 0xdf, 0xe1, 0x29, 0x3c, 0x07, 0x1c, 0x25, - 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x2f, 0x35, 0x01, - 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, - 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, - 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, - 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1a, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x22, - 0xf0, 0x00, 0xfa, 0x26, 0xe7, 0xcf, 0x25, 0x00, - 0x42, 0xa5, 0xd3, 0x02, 0xe0, 0x1f, 0x35, 0x01, - 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, - 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x10, - 0xf0, 0x00, 0xfa, 0x02, 0xe7, 0xdf, 0x1c, 0x25, - 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x55, 0x35, 0x01, - 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, - 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, - 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, - 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1d, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0xe0, 0x01, - 0x2e, 0x08, 0xbb, 0x00, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, 0x19, 0x40, - 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x01, 0x48, 0x50, 0xf0, 0x00, - 0xf9, 0x9d, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, - 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x42, - 0xf0, 0x00, 0xf9, 0xae, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, 0xf9, 0x94, - 0xe7, 0xa9, 0x25, 0x07, 0x2d, 0x11, 0xdb, 0x02, - 0xe0, 0x4e, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0x80, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, - 0x69, 0xc9, 0x42, 0x88, 0xd0, 0x18, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x80, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0x27, 0xf0, 0x00, 0xf9, 0x4a, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, - 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x01, 0x48, 0x18, 0xf0, 0x00, - 0xf9, 0x5b, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x30, 0x34, 0xf7, 0xff, 0xf9, 0x41, 0xe7, 0xb0, - 0x25, 0x0a, 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x1f, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x03, 0xf0, 0x00, 0xf9, 0x03, 0xe7, 0xdf, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x00, 0xb4, 0x90, 0x1c, 0x02, - 0x1c, 0x0f, 0x3a, 0x01, 0x2f, 0x01, 0xd1, 0x0d, - 0x09, 0x50, 0x00, 0x80, 0x49, 0x0d, 0x58, 0x08, - 0x06, 0xd4, 0x0e, 0xe4, 0x21, 0x01, 0x40, 0xa1, - 0x43, 0x08, 0x09, 0x51, 0x00, 0x89, 0x4b, 0x09, - 0x50, 0x58, 0xe0, 0x0d, 0x09, 0x50, 0x00, 0x80, - 0x49, 0x06, 0x58, 0x08, 0x06, 0xd4, 0x0e, 0xe4, - 0x21, 0x01, 0x40, 0xa1, 0x43, 0xc9, 0x40, 0x01, - 0x09, 0x50, 0x00, 0x80, 0x4b, 0x01, 0x50, 0x19, - 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x08, 0xd1, 0xf8, - 0xb4, 0x80, 0x1c, 0x01, 0x39, 0x01, 0x09, 0x48, - 0x00, 0x80, 0x4a, 0x08, 0x58, 0x10, 0x06, 0xca, - 0x0e, 0xd2, 0x27, 0x01, 0x40, 0x97, 0x1c, 0x3b, - 0x40, 0x18, 0xd0, 0x03, 0x20, 0x01, 0xbc, 0x80, - 0x47, 0x70, 0xe0, 0x01, 0x20, 0x00, 0xe7, 0xfa, - 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf8, - 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0a, 0x68, 0x54, - 0x6a, 0xf8, 0x05, 0x86, 0x0d, 0xb6, 0x2c, 0x07, - 0xda, 0x01, 0x1c, 0x20, 0xe0, 0x00, 0x20, 0x07, - 0x1c, 0x05, 0x21, 0x00, 0x42, 0xa9, 0xd3, 0x02, - 0xe0, 0x15, 0x31, 0x01, 0xe7, 0xfa, 0x00, 0x88, - 0x18, 0x40, 0x00, 0xc0, 0x18, 0x80, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0xb0, - 0xd1, 0x08, 0x00, 0x88, 0x18, 0x40, 0x00, 0xc0, - 0x18, 0x80, 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc0, - 0xbc, 0xf0, 0x47, 0x70, 0xe7, 0xe9, 0x1f, 0xe0, - 0x28, 0x11, 0xda, 0x01, 0x1f, 0xe0, 0xe0, 0x00, - 0x20, 0x11, 0x1c, 0x05, 0x21, 0x00, 0x42, 0xa9, - 0xd3, 0x02, 0xe0, 0x0d, 0x31, 0x01, 0xe7, 0xfa, - 0x20, 0x4c, 0x43, 0x48, 0x18, 0x80, 0x6a, 0x80, - 0x42, 0xb0, 0xd1, 0x04, 0x20, 0x4c, 0x43, 0x48, - 0x18, 0x80, 0x30, 0x0c, 0xe7, 0xe4, 0xe7, 0xf1, - 0x20, 0x00, 0xe7, 0xe1, 0xe7, 0xe0, 0xb5, 0x90, - 0x48, 0x07, 0x68, 0x04, 0x48, 0x07, 0x68, 0x07, - 0x1c, 0x39, 0x1c, 0x20, 0x4a, 0x06, 0x68, 0x13, - 0x22, 0xf3, 0x00, 0xd2, 0xf0, 0x00, 0xf9, 0xca, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xd1, 0xfc, 0xb4, 0xf0, 0x1c, 0x01, - 0xb0, 0x83, 0x22, 0x00, 0x68, 0x4b, 0x2b, 0x07, - 0xdd, 0x01, 0x23, 0x07, 0xe0, 0x00, 0x68, 0x4b, - 0x1c, 0x1c, 0x23, 0x00, 0x43, 0xdb, 0x93, 0x02, - 0x23, 0x00, 0x43, 0xdb, 0x93, 0x01, 0x23, 0x00, - 0x93, 0x00, 0x4b, 0x17, 0x68, 0x1b, 0x2b, 0x00, - 0xd0, 0x07, 0x4b, 0x15, 0x68, 0x1b, 0x6a, 0xdb, - 0x93, 0x02, 0x4b, 0x13, 0x68, 0x1b, 0x6b, 0x5b, - 0x93, 0x01, 0x20, 0x00, 0x42, 0xa0, 0xd3, 0x02, - 0xe0, 0x16, 0x30, 0x01, 0xe7, 0xfa, 0x00, 0x83, - 0x18, 0x1b, 0x00, 0xdb, 0x18, 0x5d, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xeb, 0x6e, 0x9f, 0x04, 0x3b, - 0x0c, 0x1b, 0xd0, 0x08, 0x0c, 0x3b, 0x04, 0x1b, - 0xd0, 0x05, 0x9b, 0x00, 0x18, 0xc5, 0x26, 0x01, - 0x40, 0xae, 0x1c, 0x33, 0x43, 0x1a, 0xe7, 0xe8, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xcb, 0x61, 0xda, - 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xc4, 0xb4, 0x80, 0x1c, 0x01, - 0x20, 0x00, 0x68, 0x0a, 0x42, 0x90, 0xdb, 0x02, - 0xe0, 0x07, 0x30, 0x01, 0xe7, 0xf9, 0x23, 0x00, - 0x43, 0xdb, 0x68, 0x8a, 0x00, 0x87, 0x51, 0xd3, - 0xe7, 0xf7, 0x22, 0x00, 0x43, 0xd2, 0x68, 0x8b, - 0x68, 0x0f, 0x00, 0xbf, 0x51, 0xda, 0x23, 0x00, - 0x43, 0xdb, 0x68, 0x8a, 0x68, 0x0f, 0x00, 0xbf, - 0x19, 0xd2, 0x60, 0x53, 0x22, 0x00, 0x60, 0x4a, - 0xbc, 0x80, 0x47, 0x70, 0xb4, 0xf0, 0x1c, 0x03, - 0x1c, 0x0c, 0x1c, 0x17, 0x68, 0x9a, 0xca, 0x40, - 0x42, 0xa6, 0xd2, 0x00, 0xe7, 0xfb, 0x3a, 0x04, - 0x1c, 0x11, 0xc9, 0x40, 0x42, 0xbe, 0xd2, 0x00, - 0xe7, 0xfb, 0x39, 0x04, 0x68, 0x10, 0x42, 0xa0, - 0xd1, 0x02, 0x68, 0x08, 0x42, 0xb8, 0xd0, 0x02, - 0x20, 0xff, 0xbc, 0xf0, 0x47, 0x70, 0x39, 0x04, - 0x68, 0x98, 0x68, 0x5e, 0x00, 0xb6, 0x19, 0x85, - 0x68, 0x58, 0x38, 0x02, 0x60, 0x58, 0x68, 0x50, - 0x60, 0x10, 0x32, 0x04, 0x42, 0x8a, 0xd3, 0xfa, - 0x68, 0x88, 0x60, 0x08, 0x31, 0x04, 0x42, 0xa9, - 0xd3, 0xfa, 0x20, 0x00, 0xe7, 0xe9, 0xe7, 0xe8, - 0xb4, 0xf0, 0x1c, 0x03, 0x1c, 0x0c, 0x1c, 0x17, - 0x68, 0x58, 0x68, 0x1e, 0x3e, 0x01, 0x42, 0xb0, - 0xdb, 0x02, 0x20, 0xff, 0xbc, 0xf0, 0x47, 0x70, - 0x68, 0x9a, 0xca, 0x40, 0x42, 0xa6, 0xd2, 0x00, - 0xe7, 0xfb, 0x3a, 0x04, 0x1c, 0x15, 0xcd, 0x40, - 0x42, 0xbe, 0xd2, 0x00, 0xe7, 0xfb, 0x68, 0x58, - 0x30, 0x02, 0x60, 0x58, 0x68, 0x98, 0x68, 0x5e, - 0x00, 0xb6, 0x19, 0x80, 0x1f, 0xc1, 0x39, 0x01, - 0x68, 0x08, 0x60, 0x88, 0x39, 0x04, 0x1d, 0xc8, - 0x30, 0x01, 0x42, 0xa8, 0xd8, 0xf8, 0x60, 0x8f, - 0x68, 0x08, 0x60, 0x48, 0x39, 0x04, 0x1d, 0x08, - 0x42, 0x90, 0xd8, 0xf9, 0x60, 0x14, 0x20, 0x00, - 0xe7, 0xd8, 0xe7, 0xd7, 0xb5, 0xf0, 0x1c, 0x07, - 0x1c, 0x0c, 0xb0, 0x81, 0x1c, 0x38, 0x21, 0x00, - 0xf0, 0x0e, 0xfc, 0x1a, 0x1c, 0x06, 0x1c, 0x38, - 0x21, 0x01, 0xf0, 0x0e, 0xfc, 0x15, 0x90, 0x00, - 0x1c, 0x31, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x50, - 0x49, 0x20, 0x68, 0x09, 0x60, 0x08, 0x99, 0x00, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x49, 0x49, 0x1e, - 0x68, 0x09, 0x60, 0x08, 0x48, 0x1b, 0x68, 0x00, - 0x68, 0x05, 0x48, 0x1c, 0x68, 0x01, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, 0x2c, 0x00, - 0xd0, 0x0c, 0x48, 0x19, 0x68, 0x00, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x07, 0x48, 0x14, 0x68, 0x00, - 0x68, 0x05, 0x48, 0x14, 0x68, 0x01, 0x23, 0x02, - 0x43, 0x19, 0x60, 0x01, 0x1c, 0x20, 0x49, 0x13, - 0x68, 0x09, 0x70, 0x08, 0x48, 0x12, 0x63, 0xc5, - 0x20, 0x3f, 0x04, 0x00, 0x40, 0x28, 0x0c, 0x00, - 0x49, 0x10, 0x62, 0x08, 0x20, 0xff, 0x02, 0x00, - 0x40, 0x28, 0x0a, 0x00, 0x49, 0x0d, 0x62, 0x48, - 0x06, 0xa8, 0x0e, 0x80, 0x23, 0x80, 0x43, 0x18, - 0x49, 0x0a, 0x62, 0x88, 0x1c, 0x28, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, - 0xe7, 0xfa, 0x00, 0x00, 0x2e, 0x08, 0xd2, 0x08, - 0x2e, 0x08, 0xd2, 0x0c, 0x6a, 0x00, 0x00, 0x18, - 0x2e, 0x08, 0xd2, 0x10, 0x2e, 0x08, 0xd2, 0x14, - 0x68, 0x00, 0x0d, 0x00, 0x72, 0x00, 0x01, 0x00, - 0xb4, 0x80, 0x1c, 0x02, 0x1c, 0x0f, 0x06, 0xb9, - 0x0e, 0x89, 0x20, 0x01, 0x03, 0x80, 0x40, 0x10, - 0x09, 0xc0, 0x43, 0x01, 0x20, 0xf0, 0x40, 0x10, - 0x01, 0x40, 0x43, 0x01, 0x07, 0x10, 0x0f, 0x00, - 0x03, 0x00, 0x43, 0x01, 0x20, 0x07, 0x02, 0xc0, - 0x40, 0x10, 0x01, 0x40, 0x43, 0x01, 0x20, 0x07, - 0x02, 0x00, 0x40, 0x10, 0x02, 0xc0, 0x43, 0x01, - 0x1c, 0x08, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, - 0xb5, 0xff, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, - 0x9b, 0x03, 0x06, 0x18, 0x16, 0x06, 0x20, 0x33, - 0x06, 0x40, 0x6b, 0x80, 0x1c, 0x01, 0x20, 0x04, - 0x40, 0x08, 0xd0, 0x05, 0x20, 0xd0, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xe0, 0x17, - 0x23, 0x04, 0x43, 0xdb, 0x40, 0x19, 0x01, 0x08, - 0x4b, 0x0a, 0x68, 0x1b, 0x18, 0xc2, 0x60, 0x15, - 0x60, 0x54, 0x2e, 0xfe, 0xd0, 0x04, 0x20, 0x01, - 0x40, 0xb0, 0x60, 0xd0, 0x4b, 0x06, 0x43, 0x1f, - 0x60, 0x97, 0x20, 0x01, 0x40, 0x88, 0x23, 0x33, - 0x06, 0x5b, 0x63, 0x58, 0x20, 0x00, 0xe7, 0xe2, - 0xe7, 0xe1, 0x00, 0x00, 0x2e, 0x08, 0x20, 0x8c, - 0x80, 0x00, 0x00, 0x00, 0xb4, 0xb0, 0x1c, 0x01, - 0x06, 0x08, 0x16, 0x04, 0x4f, 0x0c, 0x22, 0x00, - 0x20, 0x00, 0x28, 0x04, 0xd3, 0x02, 0xe0, 0x0b, - 0x30, 0x01, 0xe7, 0xfa, 0x01, 0x03, 0x19, 0xdb, - 0x68, 0x5b, 0x42, 0xa3, 0xd1, 0x03, 0x25, 0x01, - 0x40, 0x85, 0x1c, 0x2b, 0x43, 0x1a, 0xe7, 0xf3, - 0x23, 0x33, 0x06, 0x5b, 0x6c, 0x1b, 0x40, 0x13, - 0xd0, 0x00, 0xe7, 0xf9, 0xbc, 0xb0, 0x47, 0x70, - 0x9e, 0x00, 0x00, 0xc0, 0xe3, 0xa0, 0x14, 0x62, - 0xe5, 0x91, 0x10, 0x14, 0xe2, 0x01, 0x00, 0xff, - 0xe5, 0x9f, 0x10, 0x2c, 0xe5, 0xd1, 0x10, 0x00, - 0xe3, 0x51, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x05, - 0xe5, 0x9f, 0x10, 0x1c, 0xe5, 0xd1, 0x10, 0x00, - 0xe3, 0xa0, 0x20, 0x01, 0xe1, 0xa0, 0x11, 0x12, - 0xe3, 0xa0, 0x24, 0x66, 0xe5, 0x82, 0x10, 0x10, - 0xe3, 0xa0, 0x14, 0x62, 0xe5, 0x81, 0x00, 0x14, - 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x08, 0xb9, 0xb4, - 0x47, 0x00, 0x00, 0x00, 0x47, 0x08, 0x00, 0x00, - 0x47, 0x10, 0x00, 0x00, 0x47, 0x18, 0x00, 0x00, - 0x47, 0x20, 0x00, 0x00, 0x47, 0x28, 0x00, 0x00, - 0x47, 0x30, 0x00, 0x00, 0x47, 0x38, 0x00, 0x00, - 0x17, 0xcb, 0x40, 0x59, 0x1a, 0xc9, 0x17, 0xc2, - 0x40, 0x50, 0x1a, 0x80, 0xd1, 0x01, 0xf0, 0x00, - 0xf9, 0xf1, 0xb4, 0x0c, 0x08, 0x4b, 0x1c, 0x02, - 0x42, 0x9a, 0xd8, 0x00, 0x00, 0x52, 0xd3, 0xfb, - 0x23, 0x00, 0xe0, 0x00, 0x08, 0x52, 0x42, 0x91, - 0x41, 0x5b, 0x42, 0x91, 0xd3, 0x00, 0x1a, 0x89, - 0x42, 0x82, 0xd1, 0xf7, 0x1c, 0x18, 0xbc, 0x0c, - 0x40, 0x5a, 0x40, 0x50, 0x1a, 0x80, 0x40, 0x59, - 0x1a, 0xc9, 0x47, 0x70, 0x08, 0x4b, 0x1c, 0x02, - 0xd1, 0x01, 0xf0, 0x00, 0xf9, 0xd3, 0x42, 0x9a, - 0xd8, 0x00, 0x00, 0x52, 0xd3, 0xfb, 0x23, 0x00, - 0xe0, 0x00, 0x08, 0x52, 0x42, 0x91, 0x41, 0x5b, - 0x42, 0x91, 0xd3, 0x00, 0x1a, 0x89, 0x42, 0x82, - 0xd1, 0xf7, 0x1c, 0x18, 0x47, 0x70, 0x00, 0x00, - 0x3a, 0x20, 0xd5, 0x09, 0x42, 0x53, 0x32, 0x20, - 0x40, 0xd0, 0x46, 0x94, 0x1c, 0x0a, 0x40, 0x9a, - 0x43, 0x10, 0x46, 0x62, 0x40, 0xd1, 0x47, 0x70, - 0x1c, 0x08, 0x40, 0xd0, 0x21, 0x00, 0x47, 0x70, - 0x40, 0x10, 0x40, 0x19, 0x47, 0x70, 0x00, 0x00, - 0x47, 0x70, 0x00, 0x00, 0x1a, 0x43, 0x42, 0x93, - 0xd3, 0x30, 0x46, 0x84, 0x07, 0x8b, 0xd0, 0x07, - 0x1e, 0x52, 0xd3, 0x29, 0x78, 0x0b, 0x70, 0x03, - 0x1c, 0x40, 0x1c, 0x49, 0x07, 0x8b, 0xd1, 0xf7, - 0x07, 0x83, 0xd1, 0x17, 0x3a, 0x10, 0xd3, 0x05, - 0xb4, 0xb0, 0xc9, 0xb8, 0xc0, 0xb8, 0x3a, 0x10, - 0xd2, 0xfb, 0xbc, 0xb0, 0x32, 0x0c, 0xd3, 0x0f, - 0xc9, 0x08, 0xc0, 0x08, 0x1f, 0x12, 0xd2, 0xfb, - 0xe0, 0x0a, 0xc9, 0x08, 0x70, 0xc3, 0x0a, 0x1b, - 0x70, 0x83, 0x0a, 0x1b, 0x70, 0x43, 0x0a, 0x1b, - 0x70, 0x03, 0x1d, 0x00, 0x1f, 0x12, 0xd2, 0xf4, - 0x1c, 0xd2, 0xd3, 0x05, 0x78, 0x0b, 0x70, 0x03, - 0x1c, 0x49, 0x1c, 0x40, 0x1e, 0x52, 0xd2, 0xf9, - 0x46, 0x60, 0x47, 0x70, 0x1c, 0x03, 0x43, 0x0b, - 0x43, 0x13, 0x07, 0x9b, 0xd1, 0x04, 0x1f, 0x12, - 0x58, 0x8b, 0x50, 0x83, 0xd1, 0xfb, 0x47, 0x70, - 0x1e, 0x52, 0x5c, 0x8b, 0x54, 0x83, 0xd1, 0xfb, - 0x47, 0x70, 0x00, 0x00, 0x1c, 0x02, 0x43, 0x0a, - 0x07, 0x92, 0xd1, 0x1a, 0x46, 0xbc, 0xb4, 0x30, - 0x4c, 0x11, 0x01, 0xe5, 0xc8, 0x04, 0xc9, 0x08, - 0x1a, 0xd7, 0xd1, 0x09, 0x1b, 0x17, 0x43, 0x97, - 0x40, 0x2f, 0xd0, 0xf7, 0x20, 0x00, 0xbc, 0x30, - 0x46, 0x67, 0x47, 0x70, 0x02, 0x12, 0x02, 0x1b, - 0x0e, 0x11, 0x0e, 0x18, 0x1a, 0x08, 0xd1, 0x01, - 0x29, 0x00, 0xd1, 0xf7, 0xbc, 0x30, 0x46, 0x67, - 0x47, 0x70, 0x78, 0x02, 0x78, 0x0b, 0x1a, 0xd2, - 0xd1, 0x03, 0x1c, 0x40, 0x1c, 0x49, 0x2b, 0x00, - 0xd1, 0xf7, 0x1c, 0x10, 0x47, 0x70, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x42, 0x41, 0x46, 0x8c, - 0x07, 0x83, 0xd0, 0x05, 0x78, 0x03, 0x2b, 0x00, - 0xd0, 0x16, 0x1c, 0x40, 0x07, 0x83, 0xd1, 0xf9, - 0x49, 0x0a, 0xc8, 0x04, 0x09, 0xc9, 0x1a, 0x53, - 0x43, 0x93, 0x01, 0xc9, 0x40, 0x0b, 0xd0, 0xf8, - 0x1f, 0x00, 0x0e, 0x13, 0xd0, 0x08, 0x1c, 0x40, - 0x02, 0x13, 0x0e, 0x1b, 0xd0, 0x04, 0x1c, 0x40, - 0x04, 0x13, 0x0e, 0x1b, 0xd0, 0x00, 0x1c, 0x40, - 0x44, 0x60, 0x47, 0x70, 0x80, 0x80, 0x80, 0x80, - 0x46, 0xbc, 0xb4, 0x60, 0x1c, 0x03, 0x43, 0x08, - 0x07, 0x80, 0xd1, 0x1b, 0x1f, 0x12, 0xd3, 0x0b, - 0x4e, 0x0f, 0xcb, 0x01, 0xc9, 0x80, 0x1b, 0xc0, - 0xd1, 0x09, 0x1b, 0xbd, 0x43, 0xbd, 0x01, 0xf7, - 0x40, 0x3d, 0xd1, 0x04, 0x1f, 0x12, 0xd2, 0xf4, - 0x1c, 0xd2, 0xd3, 0x0e, 0xe0, 0x02, 0x1f, 0x1b, - 0x1f, 0x09, 0x1c, 0xd2, 0x78, 0x18, 0x78, 0x0f, - 0x1b, 0xc0, 0xd1, 0x06, 0x2f, 0x00, 0xd0, 0x04, - 0x1c, 0x5b, 0x1c, 0x49, 0x1e, 0x52, 0xd2, 0xf5, - 0x20, 0x00, 0xbc, 0x60, 0x46, 0x67, 0x47, 0x70, - 0x01, 0x01, 0x01, 0x01, 0x46, 0xbc, 0x1c, 0x03, - 0x43, 0x08, 0x07, 0x80, 0xd1, 0x13, 0x1f, 0x12, - 0xd3, 0x05, 0xcb, 0x01, 0xc9, 0x80, 0x1b, 0xc0, - 0xd1, 0x04, 0x1f, 0x12, 0xd2, 0xf9, 0x1c, 0xd2, - 0xd3, 0x0c, 0xe0, 0x02, 0x1f, 0x1b, 0x1f, 0x09, - 0x1c, 0xd2, 0x78, 0x18, 0x78, 0x0f, 0x1b, 0xc0, - 0xd1, 0x04, 0x1c, 0x5b, 0x1c, 0x49, 0x1e, 0x52, - 0xd2, 0xf7, 0x20, 0x00, 0x46, 0x67, 0x47, 0x70, - 0xb5, 0x80, 0xb0, 0x8f, 0x4b, 0x0a, 0x93, 0x08, - 0x4b, 0x0a, 0x93, 0x09, 0x4b, 0x0a, 0x93, 0x07, - 0x90, 0x0e, 0x46, 0x6b, 0xa8, 0x0e, 0xf0, 0x00, - 0xff, 0x4d, 0x1c, 0x07, 0x20, 0x00, 0xa9, 0x0e, - 0xf0, 0x00, 0xf8, 0xdc, 0x1c, 0x38, 0xb0, 0x0f, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x01, 0xe6, 0x39, 0x2e, 0x01, 0xe6, 0x47, - 0x2e, 0x01, 0xeb, 0xe3, 0x46, 0x84, 0x07, 0x83, - 0xd0, 0x05, 0x1e, 0x52, 0xd3, 0x12, 0x70, 0x01, - 0x1c, 0x40, 0x07, 0x83, 0xd1, 0xf9, 0x3a, 0x08, - 0xd3, 0x07, 0x02, 0x0b, 0x43, 0x19, 0x04, 0x0b, - 0x43, 0x19, 0x1c, 0x0b, 0xc0, 0x0a, 0x3a, 0x08, - 0xd2, 0xfc, 0x1d, 0xd2, 0xd3, 0x02, 0x54, 0x81, - 0x1e, 0x52, 0xd2, 0xfc, 0x46, 0x60, 0x47, 0x70, - 0x47, 0x78, 0x00, 0x00, 0xe2, 0x10, 0xc1, 0x02, - 0x12, 0x60, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, - 0x03, 0xa0, 0x10, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0x8c, 0xc1, 0x01, 0xe3, 0x8c, 0xc6, 0x1e, - 0xe1, 0xb0, 0x28, 0x20, 0x01, 0xa0, 0x08, 0x00, - 0x02, 0x4c, 0xc4, 0x01, 0xe1, 0xb0, 0x2c, 0x20, - 0x01, 0xa0, 0x04, 0x00, 0x02, 0x4c, 0xc5, 0x02, - 0xe1, 0xb0, 0x2e, 0x20, 0x01, 0xa0, 0x02, 0x00, - 0x02, 0x4c, 0xc5, 0x01, 0xe1, 0xb0, 0x2f, 0x20, - 0x01, 0xa0, 0x01, 0x00, 0x02, 0x4c, 0xc6, 0x02, - 0xe1, 0xb0, 0x2f, 0xa0, 0x01, 0xa0, 0x00, 0x80, - 0x02, 0x4c, 0xc6, 0x01, 0xe1, 0xa0, 0x00, 0x80, - 0xe1, 0xa0, 0x1a, 0x00, 0xe1, 0x8c, 0x06, 0x20, - 0xe1, 0x2f, 0xff, 0x1e, 0x22, 0x01, 0x07, 0xd2, - 0x40, 0x50, 0x47, 0x70, 0xe2, 0x20, 0x01, 0x02, - 0xe1, 0x2f, 0xff, 0x1e, 0x00, 0x40, 0x08, 0x40, - 0x47, 0x70, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0xc4, 0xff, 0xe3, 0x8c, 0xc6, 0x0e, - 0xe1, 0x5c, 0x00, 0x82, 0x9a, 0x00, 0x00, 0x0a, - 0xe1, 0xb0, 0x00, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x3a, 0x00, 0x00, 0x12, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0x00, 0x04, 0xec, 0xe1, 0xb0, 0x20, 0x82, - 0x8a, 0x00, 0x00, 0x18, 0xe3, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x53, 0x00, 0x00, - 0x0a, 0xff, 0xff, 0xf2, 0xea, 0x00, 0x04, 0xe9, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0x00, 0x04, 0xe2, 0xe1, 0xb0, 0x20, 0x82, - 0x33, 0xa0, 0x00, 0x01, 0x23, 0xa0, 0x00, 0x00, - 0x03, 0x33, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0x00, 0x04, 0xd9, - 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x00, - 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, - 0x01, 0x51, 0x00, 0x03, 0x33, 0xa0, 0x00, 0x01, - 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, - 0x83, 0xa0, 0x00, 0x01, 0x93, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0xc0, 0x28, 0xe8, 0xac, 0x7f, 0xff, - 0xe2, 0x8f, 0x00, 0x0c, 0xe2, 0x4c, 0x10, 0x3c, - 0xe2, 0x4e, 0xe0, 0x04, 0xe5, 0x8c, 0xe0, 0x00, - 0xea, 0x00, 0x05, 0x71, 0x80, 0x00, 0x00, 0x20, - 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x20, 0x62, - 0x79, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0xd0, 0x06, 0x00, 0x0e, 0x00, - 0x68, 0x0a, 0x70, 0x10, 0x32, 0x01, 0x60, 0x0a, - 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, 0x00, 0x00, - 0xb4, 0x90, 0x18, 0x42, 0x78, 0x17, 0x23, 0x00, - 0x2f, 0x00, 0xd0, 0x22, 0x2f, 0x35, 0xdb, 0x20, - 0x2f, 0x35, 0xd0, 0x01, 0x24, 0x30, 0xe0, 0x07, - 0x1c, 0x17, 0x78, 0x7c, 0x37, 0x01, 0x2c, 0x30, - 0xd0, 0xfb, 0x2c, 0x00, 0xd1, 0xf6, 0xe0, 0x14, - 0x3a, 0x01, 0x78, 0x17, 0x2f, 0x39, 0xd1, 0x01, - 0x70, 0x14, 0xe7, 0xf9, 0x37, 0x01, 0x70, 0x17, - 0x78, 0x02, 0x2a, 0x30, 0xd0, 0x09, 0x29, 0x00, - 0xdb, 0x04, 0x5c, 0x42, 0x18, 0x43, 0x70, 0x5a, - 0x39, 0x01, 0xd5, 0xfa, 0x20, 0x01, 0xbc, 0x90, - 0x47, 0x70, 0x1c, 0x18, 0xbc, 0x90, 0x47, 0x70, - 0xb5, 0x90, 0x1c, 0x0c, 0x1e, 0x57, 0x2a, 0x00, - 0xdd, 0x08, 0xf0, 0x01, 0xfc, 0x81, 0x31, 0x30, - 0x70, 0x21, 0x1c, 0x39, 0x3c, 0x01, 0x3f, 0x01, - 0x29, 0x00, 0xdc, 0xf6, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xf7, 0x1c, 0x14, 0x1c, 0x0f, - 0xb0, 0x85, 0xa3, 0xfb, 0x1c, 0x08, 0x1c, 0x11, - 0xcb, 0x0c, 0xf7, 0xff, 0xff, 0x3b, 0x28, 0x00, - 0xd0, 0x05, 0x1c, 0x38, 0x1c, 0x21, 0xf7, 0xff, - 0xff, 0x29, 0x1c, 0x0c, 0x1c, 0x07, 0xa3, 0xf4, - 0xcb, 0x0c, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x01, - 0xfc, 0x7b, 0x28, 0x00, 0xd0, 0x05, 0x27, 0x00, - 0x97, 0x01, 0x1f, 0x78, 0x90, 0x00, 0x1c, 0x3e, - 0xe1, 0xc8, 0xb0, 0x8a, 0x46, 0x6a, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x01, 0xfc, 0x93, 0x90, 0x08, - 0x91, 0x09, 0x20, 0xff, 0x30, 0x2e, 0x9f, 0x00, - 0x43, 0x78, 0x4b, 0xe9, 0x18, 0xc1, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xff, 0xfd, 0x71, 0x90, 0x0a, - 0x1b, 0xc2, 0xa1, 0xe6, 0xc9, 0x03, 0xf0, 0x01, - 0xfc, 0xc7, 0x9e, 0x0a, 0xb0, 0x83, 0xf0, 0x01, - 0xfd, 0x55, 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, - 0x2e, 0x00, 0xda, 0x04, 0x42, 0x76, 0x4d, 0xe1, - 0x4c, 0xe1, 0x1c, 0x67, 0xe0, 0x02, 0x4d, 0xe1, - 0x4c, 0xe1, 0x27, 0x00, 0x2e, 0x00, 0xd0, 0x16, - 0x08, 0x70, 0xd3, 0x0a, 0x46, 0x6b, 0x1c, 0x28, - 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x01, 0xfd, 0xba, - 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x2e, 0x01, - 0xd0, 0x09, 0x1c, 0x28, 0x1c, 0x21, 0x1c, 0x3a, - 0xf0, 0x01, 0xfd, 0xca, 0x10, 0x76, 0x1c, 0x0c, - 0x1c, 0x05, 0x1c, 0x17, 0xe7, 0xe8, 0xaa, 0x00, - 0xca, 0x07, 0xf0, 0x01, 0xfd, 0xdd, 0x90, 0x04, - 0x91, 0x05, 0xb0, 0x03, 0x98, 0x08, 0x99, 0x09, - 0x9a, 0x01, 0x9b, 0x02, 0xf0, 0x01, 0xfe, 0xd6, - 0x1c, 0x04, 0x1c, 0x0f, 0xa3, 0xcd, 0xcb, 0x0c, - 0xf7, 0xff, 0xfe, 0xd0, 0x28, 0x00, 0xd0, 0x1d, - 0xa3, 0xcc, 0x68, 0x1a, 0x68, 0x5b, 0x1c, 0x20, - 0x1c, 0x39, 0x1c, 0x15, 0x1c, 0x1e, 0xf0, 0x01, - 0xff, 0x6f, 0x1c, 0x04, 0x98, 0x0a, 0x38, 0x01, - 0x90, 0x0a, 0x1c, 0x0f, 0x98, 0x01, 0x99, 0x02, - 0x1c, 0x2a, 0x1c, 0x33, 0xf0, 0x01, 0xfe, 0xba, - 0x90, 0x01, 0x91, 0x02, 0xa3, 0xbf, 0xcb, 0x0c, - 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, 0xfe, 0xb2, - 0x28, 0x00, 0xd1, 0xe1, 0xa3, 0xbf, 0xcb, 0x0c, - 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x01, 0xff, 0xc2, - 0x28, 0x00, 0xd0, 0x1d, 0xa3, 0xb9, 0x68, 0x1a, - 0x68, 0x5b, 0x1c, 0x20, 0x1c, 0x39, 0x1c, 0x15, - 0x1c, 0x1e, 0xf0, 0x01, 0xfe, 0x9f, 0x1c, 0x04, - 0x98, 0x0a, 0x30, 0x01, 0x90, 0x0a, 0x1c, 0x0f, - 0x98, 0x01, 0x99, 0x02, 0x1c, 0x2a, 0x1c, 0x33, - 0xf0, 0x01, 0xff, 0x3e, 0x90, 0x01, 0x91, 0x02, - 0xa3, 0xb0, 0xcb, 0x0c, 0x1c, 0x20, 0x1c, 0x39, - 0xf0, 0x01, 0xff, 0xa4, 0x28, 0x00, 0xd1, 0xe1, - 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x01, 0xff, 0xf6, - 0x90, 0x0b, 0x98, 0x0a, 0x42, 0x46, 0x96, 0x0e, - 0x98, 0x0b, 0xf7, 0xff, 0xfe, 0x3d, 0x9a, 0x00, - 0x9e, 0x0a, 0x1a, 0xb2, 0xf0, 0x01, 0xfc, 0x34, - 0x90, 0x06, 0x91, 0x07, 0xa0, 0x96, 0x68, 0x02, - 0x92, 0x04, 0x68, 0x41, 0x91, 0x05, 0x9e, 0x0a, - 0x2e, 0x00, 0xda, 0x25, 0x9e, 0x0e, 0xa1, 0xa1, - 0xc9, 0x03, 0xa2, 0x91, 0x68, 0x14, 0x68, 0x52, - 0x92, 0x03, 0x25, 0x00, 0x1c, 0x02, 0x1c, 0x2b, - 0x1c, 0x07, 0xf0, 0x02, 0xf8, 0x13, 0x1c, 0x02, - 0x1c, 0x0b, 0x99, 0x03, 0x1c, 0x20, 0xf0, 0x02, - 0xf8, 0x15, 0xa1, 0x9a, 0x68, 0x08, 0x68, 0x49, - 0x91, 0x0d, 0x1c, 0x3a, 0x1c, 0x2b, 0x1c, 0x04, - 0xf0, 0x01, 0xfe, 0xfe, 0xa3, 0x87, 0xcb, 0x0c, - 0xf0, 0x02, 0xf8, 0x76, 0x9b, 0x0d, 0x1c, 0x22, - 0xf0, 0x01, 0xfe, 0x4c, 0x1c, 0x04, 0xe0, 0x05, - 0xa0, 0x90, 0x68, 0x45, 0x68, 0x07, 0xa0, 0x7e, - 0x68, 0x41, 0x68, 0x04, 0x91, 0x03, 0x2e, 0x00, - 0xd0, 0x5d, 0x08, 0x70, 0xd3, 0x35, 0xb0, 0x82, - 0x98, 0x08, 0x99, 0x09, 0x9b, 0x05, 0x1c, 0x22, - 0xf0, 0x01, 0xfe, 0xe2, 0x90, 0x00, 0x91, 0x01, - 0x9b, 0x05, 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x22, - 0xf0, 0x01, 0xff, 0xe8, 0x9a, 0x06, 0x9b, 0x07, - 0xf0, 0x01, 0xfe, 0xd6, 0x9a, 0x00, 0x9b, 0x01, - 0xb0, 0x02, 0xf0, 0x01, 0xff, 0xdf, 0x90, 0x04, - 0x91, 0x05, 0x98, 0x06, 0x99, 0x07, 0x1c, 0x3a, - 0x1c, 0x2b, 0xf0, 0x01, 0xfe, 0xc9, 0xb0, 0x82, - 0x90, 0x00, 0x23, 0x00, 0x93, 0x01, 0x1c, 0x02, - 0xf0, 0x01, 0xff, 0xc8, 0x1c, 0x02, 0x1c, 0x0b, - 0x98, 0x06, 0x99, 0x07, 0xf0, 0x01, 0xff, 0xca, - 0x90, 0x06, 0x91, 0x07, 0x98, 0x00, 0x90, 0x08, - 0x99, 0x01, 0x91, 0x09, 0xb0, 0x02, 0x2e, 0x01, - 0xd0, 0x25, 0xa1, 0x72, 0xc9, 0x03, 0x1c, 0x3a, - 0x1c, 0x2b, 0xf0, 0x01, 0xfe, 0xad, 0x9b, 0x03, - 0x1c, 0x22, 0xf0, 0x01, 0xff, 0xb7, 0x9b, 0x03, - 0x1c, 0x22, 0xf0, 0x01, 0xfe, 0xa5, 0x91, 0x03, - 0x1c, 0x04, 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x3a, - 0x1c, 0x2b, 0xf0, 0x01, 0xfe, 0x9d, 0x25, 0x00, - 0x1c, 0x02, 0x1c, 0x2b, 0x1c, 0x07, 0xf0, 0x01, - 0xff, 0x9d, 0x1c, 0x02, 0x1c, 0x0b, 0x99, 0x03, - 0x1c, 0x20, 0xf0, 0x01, 0xff, 0x9f, 0x91, 0x03, - 0x10, 0x76, 0x1c, 0x04, 0xe7, 0xa1, 0xe7, 0xff, - 0xab, 0x06, 0xcb, 0x0f, 0xf0, 0x02, 0xf8, 0x0c, - 0x28, 0x00, 0xd1, 0x03, 0x98, 0x0b, 0x38, 0x01, - 0x90, 0x0b, 0xe7, 0x55, 0x98, 0x08, 0x99, 0x09, - 0x9a, 0x06, 0x9b, 0x07, 0xf0, 0x01, 0xff, 0x82, - 0x9a, 0x04, 0x9b, 0x05, 0xf0, 0x01, 0xff, 0x7e, - 0x9a, 0x01, 0x9b, 0x02, 0xf0, 0x01, 0xfd, 0xca, - 0xa3, 0x4c, 0x68, 0x1a, 0x68, 0x5b, 0x93, 0x0c, - 0x1c, 0x15, 0xf0, 0x01, 0xfe, 0x6d, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x01, 0xff, 0x2f, 0x1c, 0x06, - 0xf7, 0xff, 0xfd, 0x7a, 0x1c, 0x3a, 0x1c, 0x23, - 0xf0, 0x01, 0xff, 0xde, 0x9b, 0x0c, 0x1c, 0x2a, - 0xf0, 0x01, 0xfe, 0x5e, 0xf0, 0x01, 0xff, 0x22, - 0x1c, 0x07, 0xd5, 0x04, 0x4b, 0x47, 0x18, 0xff, - 0x3e, 0x01, 0x2f, 0x00, 0xdb, 0xfa, 0x48, 0x45, - 0x42, 0x87, 0xdb, 0x04, 0x4b, 0x43, 0x1a, 0xff, - 0x36, 0x01, 0x42, 0x87, 0xda, 0xfa, 0x2e, 0x00, - 0xda, 0x06, 0x4b, 0x40, 0x18, 0xf6, 0x99, 0x0b, - 0x39, 0x01, 0x91, 0x0b, 0x2e, 0x00, 0xdb, 0xf8, - 0x42, 0x86, 0xdb, 0x06, 0x4b, 0x3b, 0x1a, 0xf6, - 0x99, 0x0b, 0x31, 0x01, 0x91, 0x0b, 0x42, 0x86, - 0xda, 0xf8, 0x99, 0x0b, 0x4b, 0x38, 0x42, 0x99, - 0xda, 0x17, 0x98, 0x0b, 0x00, 0x84, 0x18, 0x24, - 0x00, 0x64, 0x1c, 0x18, 0x1c, 0x31, 0xf7, 0xff, - 0xfb, 0xe3, 0x18, 0x20, 0x90, 0x0b, 0x00, 0x8c, - 0x18, 0x64, 0x00, 0x64, 0x1c, 0x39, 0x48, 0x30, - 0xf7, 0xff, 0xfb, 0xda, 0x18, 0x26, 0x00, 0x8f, - 0x18, 0x7f, 0x00, 0x7f, 0x98, 0x0a, 0x38, 0x01, - 0xe0, 0x16, 0x99, 0x0b, 0x42, 0x81, 0xdb, 0x14, - 0x98, 0x0b, 0xf0, 0x01, 0xfa, 0xa1, 0x4b, 0x27, - 0x43, 0x59, 0x19, 0x89, 0x90, 0x0b, 0x1c, 0x08, - 0xf0, 0x01, 0xfa, 0x9a, 0x4b, 0x23, 0x43, 0x59, - 0x19, 0xc9, 0x1c, 0x06, 0x1d, 0x48, 0xf0, 0x01, - 0xfa, 0x93, 0x1c, 0x07, 0x98, 0x0a, 0x30, 0x01, - 0x90, 0x0a, 0xb0, 0x0a, 0x24, 0x30, 0x98, 0x05, - 0x70, 0x04, 0x98, 0x05, 0x1d, 0x81, 0x22, 0x06, - 0x98, 0x01, 0xf7, 0xff, 0xfd, 0xfd, 0x98, 0x05, - 0x1d, 0xc1, 0x31, 0x05, 0x22, 0x06, 0x1c, 0x30, - 0xf7, 0xff, 0xfd, 0xf6, 0xe0, 0x2e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xea, 0x84, 0x3f, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, - 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x40, 0x01, - 0xa0, 0x00, 0x00, 0x00, 0x40, 0xf8, 0x6a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x2e, 0x84, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc9, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x9a, 0x40, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, - 0x00, 0x01, 0x86, 0xa0, 0x98, 0x05, 0x1d, 0xc1, - 0x31, 0x0b, 0x22, 0x06, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0xbf, 0x98, 0x05, 0x74, 0xc4, 0x27, 0x00, - 0x98, 0x05, 0x75, 0x07, 0x98, 0x00, 0x30, 0x05, - 0xb0, 0x05, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x02, 0x08, 0x12, 0xd3, 0x01, - 0x22, 0x01, 0xe0, 0x00, 0x22, 0x00, 0x60, 0x0a, - 0x68, 0x01, 0x4a, 0x08, 0x40, 0x0a, 0x4b, 0x07, - 0x42, 0x9a, 0xd0, 0x01, 0x20, 0x00, 0x47, 0x70, - 0x03, 0x09, 0xd1, 0x02, 0x68, 0x40, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0x01, 0x47, 0x70, 0x20, 0x02, - 0x47, 0x70, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, - 0xb5, 0x90, 0x1c, 0x04, 0x54, 0x63, 0x1c, 0x4f, - 0x2a, 0x00, 0xda, 0x02, 0x42, 0x52, 0x21, 0x2d, - 0xe0, 0x00, 0x21, 0x2b, 0x1c, 0x38, 0x54, 0x21, - 0x23, 0x7d, 0x00, 0xdb, 0x37, 0x01, 0x42, 0x9a, - 0xdb, 0x09, 0x1c, 0x18, 0x1c, 0x11, 0xf7, 0xff, - 0xfb, 0x37, 0x1d, 0xc2, 0x32, 0x29, 0x1c, 0x38, - 0x54, 0x22, 0x1c, 0x0a, 0x37, 0x01, 0x2a, 0x64, - 0xdb, 0x09, 0x20, 0x64, 0x1c, 0x11, 0xf7, 0xff, - 0xfb, 0x2b, 0x1d, 0xc2, 0x32, 0x29, 0x1c, 0x38, - 0x54, 0x22, 0x1c, 0x0a, 0x37, 0x01, 0x1c, 0x10, - 0xf0, 0x01, 0xf9, 0xf6, 0x1d, 0xc2, 0x32, 0x29, - 0x1c, 0x38, 0x54, 0x22, 0x37, 0x01, 0x1c, 0x38, - 0x31, 0x30, 0x54, 0x21, 0x37, 0x01, 0x1c, 0x38, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0x1c, 0x06, 0xb0, 0x82, 0x68, 0x10, 0x90, 0x00, - 0x1d, 0xd0, 0x30, 0x0d, 0xb0, 0x81, 0x1c, 0x0f, - 0x46, 0x69, 0x1c, 0x14, 0x1c, 0x05, 0xf7, 0xff, - 0xff, 0xa0, 0x99, 0x00, 0x29, 0x00, 0xd0, 0x01, - 0xa1, 0xc9, 0xe0, 0x0a, 0x99, 0x01, 0x08, 0x89, - 0xd3, 0x01, 0xa1, 0xc8, 0xe0, 0x05, 0x99, 0x01, - 0x08, 0xc9, 0xd3, 0x01, 0xa1, 0xc6, 0xe0, 0x00, - 0xa1, 0xc6, 0x60, 0x61, 0x28, 0x00, 0xd0, 0x15, - 0x28, 0x01, 0xd1, 0x01, 0xa0, 0xc4, 0xe0, 0x00, - 0xa0, 0xc4, 0x78, 0x01, 0x70, 0x39, 0x78, 0x41, - 0x70, 0x79, 0x78, 0x80, 0x70, 0xb8, 0x20, 0x00, - 0x70, 0xf8, 0x98, 0x01, 0x4b, 0xc0, 0x40, 0x18, - 0x60, 0x20, 0x20, 0x03, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xcd, 0x06, 0xb0, 0x01, - 0x48, 0xbc, 0x90, 0x01, 0x2e, 0x45, 0xd0, 0x74, - 0x2e, 0x65, 0xd0, 0x72, 0x2e, 0x66, 0xd1, 0x71, - 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0x2e, 0x1c, 0x06, - 0xd5, 0x4e, 0x42, 0x76, 0x68, 0xa0, 0x1c, 0x41, - 0x42, 0xb1, 0xda, 0x09, 0x21, 0x30, 0x70, 0x39, - 0x98, 0x01, 0x68, 0x00, 0x78, 0x00, 0x25, 0x02, - 0x70, 0x78, 0x68, 0xa0, 0x61, 0x20, 0xe0, 0x3b, - 0x1b, 0x80, 0x1c, 0x85, 0x2d, 0x12, 0xdd, 0x03, - 0x1f, 0xe8, 0x38, 0x0c, 0x25, 0x13, 0x61, 0x20, - 0x1c, 0x38, 0x1c, 0x29, 0xf7, 0xff, 0xfc, 0xd4, - 0x28, 0x00, 0xd0, 0x01, 0x35, 0x01, 0x3e, 0x01, - 0x2e, 0x00, 0xd1, 0x02, 0x78, 0x78, 0x70, 0x38, - 0xe0, 0x0d, 0x2e, 0x01, 0xd1, 0x10, 0x1c, 0x28, - 0x2d, 0x00, 0xdd, 0x05, 0x5c, 0x39, 0x18, 0x3a, - 0x70, 0x51, 0x38, 0x01, 0x28, 0x00, 0xdc, 0xf9, - 0x21, 0x30, 0x70, 0x39, 0x35, 0x01, 0x98, 0x01, - 0x68, 0x00, 0x78, 0x00, 0x70, 0x78, 0xe0, 0x13, - 0x1c, 0x28, 0x2d, 0x00, 0xdd, 0x05, 0x5c, 0x39, - 0x18, 0x3a, 0x70, 0x91, 0x38, 0x01, 0x28, 0x00, - 0xdc, 0xf9, 0x21, 0x30, 0x70, 0x39, 0x98, 0x01, - 0x68, 0x00, 0x78, 0x00, 0x70, 0x78, 0x20, 0x3c, - 0x70, 0xb8, 0x1e, 0x70, 0x60, 0xe0, 0x35, 0x02, - 0x69, 0x20, 0x28, 0x00, 0xdd, 0x5d, 0xe0, 0x26, - 0x68, 0xa0, 0x19, 0x80, 0x1c, 0x85, 0x2d, 0x12, - 0xdd, 0x41, 0x25, 0x13, 0x1c, 0x38, 0x1c, 0x29, - 0xf7, 0xff, 0xfc, 0x96, 0x28, 0x00, 0xd0, 0x01, - 0x25, 0x14, 0x36, 0x01, 0x1e, 0x69, 0x42, 0xb1, - 0xdd, 0x1a, 0x20, 0x00, 0x2e, 0x00, 0xdb, 0x05, - 0x18, 0x39, 0x78, 0x49, 0x54, 0x39, 0x30, 0x01, - 0x42, 0xb0, 0xdd, 0xf9, 0x98, 0x01, 0x68, 0x00, - 0xe0, 0x01, 0xe0, 0xc1, 0xe0, 0x45, 0x78, 0x00, - 0x19, 0xb9, 0x70, 0x48, 0x68, 0xa0, 0x19, 0x80, - 0x38, 0x11, 0x61, 0x20, 0xd0, 0x35, 0x21, 0x3e, - 0x1c, 0x28, 0x54, 0x39, 0x35, 0x01, 0xe0, 0x30, - 0x20, 0x00, 0x29, 0x00, 0xdd, 0x05, 0x18, 0x3a, - 0x78, 0x52, 0x54, 0x3a, 0x30, 0x01, 0x42, 0x81, - 0xdc, 0xf9, 0x20, 0x3c, 0x19, 0x79, 0x39, 0x20, - 0x77, 0xc8, 0x1b, 0x70, 0x30, 0x02, 0x60, 0xe0, - 0x98, 0x01, 0x68, 0x00, 0x78, 0x01, 0x1c, 0x28, - 0x54, 0x39, 0x68, 0xa0, 0x35, 0x01, 0x28, 0x00, - 0xd0, 0x17, 0x61, 0x20, 0xe7, 0xdf, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfc, 0x55, 0x28, 0x00, - 0xd0, 0x01, 0x35, 0x01, 0x36, 0x01, 0x20, 0x00, - 0x2e, 0x00, 0xdb, 0x05, 0x18, 0x39, 0x78, 0x49, - 0x54, 0x39, 0x30, 0x01, 0x42, 0xb0, 0xdd, 0xf9, - 0x98, 0x01, 0x68, 0x00, 0x78, 0x00, 0x19, 0xb9, - 0x70, 0x48, 0x68, 0xa0, 0x28, 0x00, 0xd1, 0x68, - 0x98, 0x00, 0x09, 0x00, 0xd2, 0x66, 0x3d, 0x01, - 0xe0, 0x75, 0x1c, 0x38, 0xb0, 0x81, 0xf7, 0xff, - 0xfc, 0x74, 0x90, 0x00, 0x68, 0xa0, 0x28, 0x01, - 0xda, 0x01, 0x20, 0x01, 0x60, 0xa0, 0x68, 0xa0, - 0x28, 0x11, 0xdd, 0x01, 0x25, 0x12, 0xe0, 0x00, - 0x1c, 0x45, 0x1c, 0x38, 0x1c, 0x29, 0xf7, 0xff, - 0xfc, 0x27, 0x99, 0x00, 0x18, 0x42, 0x68, 0xa0, - 0x42, 0x90, 0xdd, 0x02, 0x23, 0x04, 0x42, 0xda, - 0xda, 0x02, 0x78, 0x78, 0x70, 0x38, 0xe0, 0x22, - 0x26, 0x66, 0x2a, 0x00, 0xdb, 0x0e, 0x20, 0x00, - 0x2a, 0x00, 0xdb, 0x05, 0x18, 0x39, 0x78, 0x49, - 0x54, 0x39, 0x30, 0x01, 0x42, 0x90, 0xdd, 0xf9, - 0x98, 0x02, 0x68, 0x00, 0x78, 0x00, 0x18, 0xb9, - 0x70, 0x48, 0xe0, 0x14, 0x42, 0x52, 0x1c, 0x28, - 0xd4, 0x04, 0x5c, 0x3b, 0x18, 0x81, 0x54, 0x7b, - 0x38, 0x01, 0xd5, 0xfa, 0x18, 0xad, 0x20, 0x00, - 0x2a, 0x00, 0xdb, 0x04, 0x21, 0x30, 0x54, 0x39, - 0x30, 0x01, 0x42, 0x90, 0xdd, 0xfb, 0x98, 0x02, - 0x68, 0x00, 0x78, 0x00, 0x70, 0x78, 0x98, 0x01, - 0x09, 0x00, 0xd2, 0x1c, 0x20, 0x00, 0x43, 0xc0, - 0x61, 0x20, 0x5d, 0x78, 0x99, 0x02, 0x68, 0x09, - 0x78, 0x09, 0x42, 0x88, 0xd0, 0x0a, 0x19, 0x78, - 0x38, 0x20, 0x7f, 0xc0, 0x28, 0x30, 0xd1, 0x05, - 0x3d, 0x01, 0x19, 0x78, 0x38, 0x20, 0x7f, 0xc0, - 0x28, 0x30, 0xd0, 0xf9, 0x19, 0x78, 0x38, 0x20, - 0x7f, 0xc0, 0x42, 0x88, 0xd1, 0x0c, 0x3d, 0x01, - 0xe0, 0x0a, 0xe0, 0x10, 0xe0, 0x0f, 0x68, 0xa0, - 0x28, 0x11, 0xdd, 0x05, 0x38, 0x11, 0x21, 0x3e, - 0x61, 0x20, 0x1c, 0x28, 0x54, 0x39, 0x35, 0x01, - 0x2e, 0x66, 0xd0, 0x03, 0x1c, 0x38, 0x1c, 0x29, - 0x1e, 0xb3, 0xe0, 0x31, 0xb0, 0x01, 0x1c, 0x28, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xb0, 0x81, 0xf7, 0xff, 0xfb, 0xf9, - 0x90, 0x00, 0x68, 0xa0, 0x28, 0x11, 0xdd, 0x03, - 0x38, 0x11, 0x61, 0x20, 0x20, 0x11, 0x60, 0xa0, - 0x68, 0xa0, 0x1c, 0x85, 0x1c, 0x38, 0x1c, 0x29, - 0xf7, 0xff, 0xfb, 0xae, 0x99, 0x00, 0x18, 0x42, - 0x78, 0x78, 0x70, 0x38, 0x68, 0xa0, 0x28, 0x00, - 0xd1, 0x04, 0x98, 0x01, 0x09, 0x00, 0xd2, 0x01, - 0x25, 0x01, 0xe0, 0x03, 0x98, 0x02, 0x68, 0x00, - 0x78, 0x00, 0x70, 0x78, 0x69, 0x20, 0x28, 0x00, - 0xdd, 0x03, 0x21, 0x3e, 0x1c, 0x28, 0x54, 0x39, - 0x35, 0x01, 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x33, - 0xf7, 0xff, 0xfe, 0x26, 0x1c, 0x05, 0xe7, 0xc9, - 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4e, 0x61, 0x4e, 0x00, 0x49, 0x6e, 0x66, 0x00, - 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x08, 0x22, 0x10, - 0xb5, 0xf0, 0x1c, 0x04, 0x25, 0x00, 0x26, 0x00, - 0x1c, 0x18, 0xb0, 0x92, 0x68, 0x13, 0x93, 0x00, - 0x1c, 0x17, 0x43, 0xea, 0x60, 0xfa, 0x61, 0x3a, - 0x1c, 0x1a, 0x23, 0x21, 0x01, 0x1b, 0x40, 0x1a, - 0xd1, 0x01, 0x22, 0x01, 0x60, 0xba, 0x1d, 0xfa, - 0x32, 0x29, 0x29, 0x67, 0xd0, 0x0e, 0xdc, 0x2c, - 0x29, 0x64, 0xd0, 0x5b, 0xdc, 0x06, 0x29, 0x45, - 0xd0, 0x08, 0x29, 0x47, 0xd0, 0x06, 0x29, 0x58, - 0xd1, 0x0c, 0xe0, 0x58, 0x29, 0x65, 0xd0, 0x01, - 0x29, 0x66, 0xd1, 0x07, 0xab, 0x01, 0x1c, 0x08, - 0x1c, 0x19, 0x69, 0xfb, 0x1c, 0x3a, 0xf7, 0xff, - 0xf9, 0x29, 0x1c, 0x05, 0xb0, 0x82, 0x6a, 0xf9, - 0x91, 0x00, 0x23, 0x01, 0x02, 0x5b, 0x98, 0x02, - 0x40, 0x18, 0x90, 0x0d, 0xd0, 0x6c, 0x21, 0x00, - 0x91, 0x01, 0x68, 0xf8, 0x28, 0x00, 0xdd, 0x01, - 0x1e, 0x41, 0x91, 0x01, 0x69, 0x38, 0x28, 0x00, - 0xdd, 0x63, 0x99, 0x01, 0x18, 0x40, 0x1e, 0x41, - 0xe0, 0xca, 0x29, 0x70, 0xd0, 0x33, 0xdc, 0x2e, - 0x29, 0x69, 0xd0, 0x2b, 0x29, 0x6f, 0xd1, 0xe1, - 0x99, 0x00, 0x09, 0xc9, 0xd3, 0x63, 0xb0, 0x82, - 0x68, 0x10, 0x90, 0x00, 0x68, 0x51, 0x91, 0x01, - 0xa3, 0xc0, 0x93, 0x12, 0xcb, 0x0c, 0xf0, 0x01, - 0xfd, 0x2d, 0x28, 0x00, 0xd0, 0x18, 0x98, 0x00, - 0x99, 0x01, 0xf7, 0xff, 0xf9, 0x4d, 0x07, 0x40, - 0x0f, 0x40, 0x6a, 0xb9, 0x5c, 0x09, 0x1c, 0x28, - 0xaa, 0x03, 0x54, 0x11, 0x22, 0x03, 0x98, 0x00, - 0x99, 0x01, 0x35, 0x01, 0xf7, 0xff, 0xf9, 0x2c, - 0x90, 0x00, 0x91, 0x01, 0x9b, 0x12, 0xcb, 0x0c, - 0xf0, 0x01, 0xfd, 0x14, 0x28, 0x00, 0xd1, 0xe6, - 0xb0, 0x02, 0xe0, 0x49, 0xe0, 0x4f, 0x29, 0x75, - 0xd0, 0x4d, 0x29, 0x78, 0xd1, 0xb2, 0x99, 0x00, - 0x09, 0xc9, 0xd3, 0x27, 0xb0, 0x82, 0x68, 0x10, - 0x90, 0x00, 0x68, 0x51, 0x91, 0x01, 0xa3, 0xa9, - 0x93, 0x13, 0xcb, 0x0c, 0xf0, 0x01, 0xfc, 0xfe, - 0x28, 0x00, 0xd0, 0x71, 0x98, 0x00, 0x99, 0x01, - 0xf7, 0xff, 0xf9, 0x1e, 0x07, 0x00, 0x0f, 0x00, - 0x6a, 0xb9, 0x5c, 0x09, 0x1c, 0x28, 0xaa, 0x03, - 0x54, 0x11, 0x22, 0x04, 0x98, 0x00, 0x99, 0x01, - 0x35, 0x01, 0xf7, 0xff, 0xf8, 0xfd, 0x90, 0x00, - 0x91, 0x01, 0x9b, 0x13, 0xcb, 0x0c, 0xf0, 0x01, - 0xfc, 0xe5, 0x28, 0x00, 0xd1, 0xe6, 0xe0, 0x57, - 0xe0, 0x65, 0xe0, 0x6a, 0x28, 0x00, 0xd0, 0x85, - 0x07, 0x02, 0x0f, 0x12, 0x6a, 0xb9, 0x5c, 0x8a, - 0x1c, 0x29, 0xab, 0x01, 0x54, 0x5a, 0x35, 0x01, - 0x09, 0x00, 0xd1, 0xf5, 0xe7, 0x7a, 0xe7, 0xff, - 0x28, 0x00, 0xd0, 0x09, 0x07, 0x41, 0x0f, 0x49, - 0x1d, 0xca, 0x32, 0x29, 0x1c, 0x29, 0xab, 0x01, - 0x54, 0x5a, 0x35, 0x01, 0x08, 0xc0, 0xd1, 0xf5, - 0x98, 0x00, 0x09, 0x00, 0xd3, 0xee, 0x68, 0xb8, - 0x38, 0x01, 0x60, 0xb8, 0xe7, 0x66, 0x99, 0x00, - 0x09, 0xc9, 0xd3, 0x33, 0xb0, 0x82, 0x68, 0x10, - 0x90, 0x00, 0x68, 0x51, 0x91, 0x01, 0xa3, 0x83, - 0x93, 0x11, 0xcb, 0x0c, 0xf0, 0x01, 0xfc, 0xb2, - 0x28, 0x00, 0xd0, 0x25, 0xa3, 0x81, 0x93, 0x10, - 0xa3, 0x82, 0x93, 0x0f, 0xa3, 0x7f, 0x93, 0x0e, - 0x98, 0x00, 0x99, 0x01, 0x9b, 0x10, 0xcb, 0x0c, - 0xf0, 0x01, 0xfc, 0xac, 0x1c, 0x19, 0x1c, 0x10, - 0x9b, 0x0f, 0xcb, 0x0c, 0xf0, 0x01, 0xfc, 0xe8, - 0xf7, 0xff, 0xf8, 0xc2, 0x1c, 0x29, 0xaa, 0x03, - 0x54, 0x50, 0x98, 0x00, 0x99, 0x01, 0x9b, 0x0e, - 0xcb, 0x0c, 0x35, 0x01, 0xf0, 0x01, 0xfc, 0x9a, - 0x90, 0x00, 0x91, 0x01, 0x9b, 0x11, 0xcb, 0x0c, - 0xf0, 0x01, 0xfc, 0x8c, 0x28, 0x00, 0xd1, 0xdf, - 0xb0, 0x02, 0xe7, 0x2f, 0x28, 0x00, 0xd0, 0xb1, - 0xf0, 0x01, 0xfc, 0xd2, 0x1d, 0xca, 0x32, 0x29, - 0x1c, 0x29, 0xab, 0x01, 0x54, 0x5a, 0x35, 0x01, - 0x28, 0x00, 0xd1, 0xf5, 0xe7, 0x22, 0x68, 0xb8, - 0x1b, 0x41, 0x91, 0x01, 0xd5, 0x01, 0x21, 0x00, - 0x91, 0x01, 0x68, 0x78, 0xf7, 0xff, 0xf9, 0x0a, - 0x99, 0x01, 0x19, 0x49, 0x18, 0x40, 0x99, 0x00, - 0x1a, 0x08, 0x90, 0x00, 0x23, 0xff, 0x33, 0x01, - 0x98, 0x02, 0x40, 0x18, 0x90, 0x0c, 0xd1, 0x1b, - 0x98, 0x02, 0x08, 0x40, 0xd2, 0x18, 0xb0, 0x81, - 0x98, 0x0d, 0x28, 0x00, 0xd0, 0x01, 0x20, 0x30, - 0xe0, 0x00, 0x20, 0x20, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x00, 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, - 0xd4, 0x09, 0x98, 0x00, 0x6a, 0x3a, 0x1c, 0x21, - 0x36, 0x01, 0xf7, 0xff, 0xf8, 0x1d, 0x98, 0x01, - 0x38, 0x01, 0x90, 0x01, 0xd5, 0xf5, 0xb0, 0x01, - 0x68, 0x79, 0x78, 0x08, 0x31, 0x01, 0xb0, 0x81, - 0x91, 0x00, 0x28, 0x00, 0xd0, 0x0a, 0x6a, 0x3a, - 0x1c, 0x21, 0xf7, 0xff, 0xf8, 0x0d, 0x99, 0x00, - 0x78, 0x08, 0x31, 0x01, 0x91, 0x00, 0x36, 0x01, - 0x28, 0x00, 0xd1, 0xf4, 0xb0, 0x01, 0x98, 0x02, - 0x07, 0xc0, 0x0f, 0xc0, 0x90, 0x0b, 0xd1, 0x18, - 0xb0, 0x81, 0x98, 0x0d, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x30, 0xe0, 0x00, 0x20, 0x20, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x98, 0x01, 0x38, 0x01, - 0x90, 0x01, 0xd4, 0x09, 0x98, 0x00, 0x6a, 0x3a, - 0x1c, 0x21, 0x36, 0x01, 0xf7, 0xfe, 0xff, 0xec, - 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, 0xd5, 0xf5, - 0xb0, 0x01, 0x98, 0x0d, 0x28, 0x00, 0xd0, 0x35, - 0x21, 0x00, 0xb0, 0x81, 0x91, 0x00, 0x2d, 0x00, - 0xdd, 0x2e, 0xa8, 0x04, 0x99, 0x00, 0x5c, 0x40, - 0x28, 0x3c, 0xd0, 0x10, 0x28, 0x3e, 0xd1, 0x1d, - 0x69, 0x38, 0x38, 0x01, 0x61, 0x38, 0xd4, 0x1e, - 0x20, 0x30, 0x6a, 0x3a, 0x1c, 0x21, 0x36, 0x01, - 0xf7, 0xfe, 0xff, 0xce, 0x69, 0x38, 0x38, 0x01, - 0x61, 0x38, 0xd5, 0xf5, 0xe0, 0x13, 0x68, 0xf8, - 0x38, 0x01, 0x60, 0xf8, 0xd4, 0x0f, 0x20, 0x30, - 0x6a, 0x3a, 0x1c, 0x21, 0x36, 0x01, 0xf7, 0xfe, - 0xff, 0xbf, 0x68, 0xf8, 0x38, 0x01, 0x60, 0xf8, - 0xd5, 0xf5, 0xe0, 0x04, 0x6a, 0x3a, 0x1c, 0x21, - 0xf7, 0xfe, 0xff, 0xb6, 0x36, 0x01, 0x99, 0x00, - 0x31, 0x01, 0x91, 0x00, 0x42, 0xa9, 0xdb, 0xd0, - 0xb0, 0x01, 0xe0, 0x1c, 0x99, 0x01, 0x1e, 0x48, - 0x90, 0x01, 0xd4, 0x09, 0x20, 0x30, 0x6a, 0x3a, - 0x1c, 0x21, 0x36, 0x01, 0xf7, 0xfe, 0xff, 0xa4, - 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, 0xd5, 0xf5, - 0x19, 0x76, 0x1c, 0x28, 0x3d, 0x01, 0x28, 0x00, - 0xdd, 0x09, 0xa8, 0x03, 0x5d, 0x40, 0x6a, 0x3a, - 0x1c, 0x21, 0xf7, 0xfe, 0xff, 0x95, 0x1c, 0x28, - 0x3d, 0x01, 0x28, 0x00, 0xdc, 0xf5, 0x98, 0x0b, - 0x28, 0x00, 0xd0, 0x0a, 0x98, 0x00, 0x1e, 0x45, - 0xd4, 0x07, 0x20, 0x20, 0x6a, 0x3a, 0x1c, 0x21, - 0x36, 0x01, 0xf7, 0xfe, 0xff, 0x85, 0x3d, 0x01, - 0xd5, 0xf7, 0x1c, 0x30, 0xb0, 0x14, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, - 0x00, 0x00, 0x00, 0x00, 0xb5, 0xff, 0x20, 0x00, - 0xb0, 0x88, 0x90, 0x00, 0x99, 0x09, 0x78, 0x08, - 0x31, 0x01, 0x91, 0x09, 0x1c, 0x1c, 0x1c, 0x17, - 0x28, 0x00, 0xd0, 0x74, 0xa3, 0xf4, 0x93, 0x07, - 0x1d, 0xe2, 0x32, 0x0d, 0x92, 0x06, 0x1d, 0xe1, - 0x31, 0x29, 0x91, 0x05, 0x28, 0x25, 0xd0, 0x07, - 0x99, 0x08, 0x6a, 0x22, 0xf7, 0xfe, 0xff, 0x58, - 0x98, 0x00, 0x30, 0x01, 0x90, 0x00, 0xe2, 0xc4, - 0x25, 0x00, 0x23, 0x00, 0xb0, 0x82, 0x93, 0x00, - 0x20, 0x00, 0x60, 0xa0, 0x99, 0x0b, 0x78, 0x0e, - 0x31, 0x01, 0x91, 0x0b, 0x2e, 0x2b, 0xd0, 0x16, - 0xdc, 0x06, 0x2e, 0x20, 0xd0, 0x16, 0x2e, 0x23, - 0xd1, 0x17, 0x23, 0x08, 0x43, 0x1d, 0xe7, 0xf1, - 0x2e, 0x2d, 0xd0, 0x05, 0x2e, 0x30, 0xd1, 0x10, - 0x23, 0xff, 0x33, 0x01, 0x43, 0x1d, 0xe7, 0xe9, - 0x23, 0xff, 0x33, 0x01, 0x43, 0x9d, 0x1c, 0x28, - 0x25, 0x01, 0x43, 0x05, 0xe7, 0xe2, 0x23, 0x02, - 0x43, 0x1d, 0xe7, 0xdf, 0x23, 0x04, 0x43, 0x1d, - 0xe7, 0xdc, 0x20, 0x00, 0x2e, 0x2a, 0xd1, 0x11, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc0, - 0x28, 0x00, 0xda, 0x02, 0x42, 0x40, 0x23, 0x01, - 0x40, 0x5d, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0xe0, 0x0f, 0x49, 0xce, 0x5d, 0x8a, - 0x09, 0x92, 0xd3, 0x0b, 0x00, 0x83, 0x18, 0x18, - 0x00, 0x40, 0x19, 0x80, 0x9a, 0x0b, 0x78, 0x16, - 0x32, 0x01, 0x92, 0x0b, 0x5d, 0x8a, 0x38, 0x30, - 0x09, 0x92, 0xd2, 0xf3, 0x28, 0x00, 0xda, 0x00, - 0x20, 0x00, 0x90, 0x01, 0x2e, 0x2e, 0xd1, 0x2a, - 0x20, 0x00, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0x2e, 0x2a, 0xd1, 0x0e, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0xe0, 0x00, 0xe2, 0x67, - 0x6f, 0xc0, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0xe0, 0x0f, 0x49, 0xb8, 0x5d, 0x8a, - 0x09, 0x92, 0xd3, 0x0b, 0x00, 0x83, 0x18, 0x18, - 0x00, 0x40, 0x19, 0x80, 0x9a, 0x0b, 0x78, 0x16, - 0x32, 0x01, 0x92, 0x0b, 0x5d, 0x8a, 0x38, 0x30, - 0x09, 0x92, 0xd2, 0xf3, 0x28, 0x00, 0xdb, 0x02, - 0x23, 0x10, 0x43, 0x1d, 0x60, 0xa0, 0x2e, 0x6c, - 0xd0, 0x01, 0x2e, 0x4c, 0xd1, 0x0d, 0x99, 0x0b, - 0x78, 0x0e, 0x31, 0x01, 0x91, 0x0b, 0x2e, 0x6c, - 0xd0, 0x01, 0x2e, 0x4c, 0xd1, 0x02, 0x23, 0x40, - 0x43, 0x1d, 0xe0, 0x06, 0x23, 0x20, 0x43, 0x1d, - 0xe0, 0x07, 0x2e, 0x68, 0xd1, 0x05, 0x23, 0x80, - 0x43, 0x1d, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0x2e, 0x67, 0xd0, 0x63, 0xdc, 0x12, - 0x2e, 0x63, 0xd0, 0x21, 0xdc, 0x08, 0x2e, 0x00, - 0xd0, 0x5e, 0x2e, 0x45, 0xd0, 0x5b, 0x2e, 0x47, - 0xd0, 0x59, 0x2e, 0x58, 0xd0, 0x59, 0xe0, 0x1f, - 0x2e, 0x64, 0xd0, 0x57, 0x2e, 0x65, 0xd0, 0x52, - 0x2e, 0x66, 0xd0, 0x50, 0xe0, 0x18, 0x2e, 0x70, - 0xd0, 0x55, 0xdc, 0x06, 0x2e, 0x69, 0xd0, 0x4d, - 0x2e, 0x6e, 0xd0, 0x51, 0x2e, 0x6f, 0xd0, 0x5c, - 0xe0, 0x0e, 0x2e, 0x73, 0xd0, 0x5a, 0x2e, 0x75, - 0xd0, 0x59, 0x2e, 0x78, 0xd0, 0x58, 0xe0, 0x07, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc6, - 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, 0x07, 0xe8, - 0x0f, 0xc0, 0x90, 0x06, 0xd1, 0x16, 0x0a, 0x68, - 0xd3, 0x01, 0x20, 0x30, 0xe0, 0x00, 0x20, 0x20, - 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x01, 0x38, 0x01, - 0x90, 0x01, 0xd4, 0x0b, 0x98, 0x02, 0x30, 0x01, - 0x90, 0x02, 0x99, 0x0a, 0x6a, 0x22, 0x1c, 0x28, - 0xf7, 0xfe, 0xfe, 0x72, 0x98, 0x01, 0x38, 0x01, - 0x90, 0x01, 0xd5, 0xf3, 0x99, 0x0a, 0x6a, 0x22, - 0x1c, 0x30, 0xf7, 0xfe, 0xfe, 0x69, 0x98, 0x02, - 0x30, 0x01, 0x90, 0x02, 0x98, 0x06, 0x28, 0x00, - 0xd0, 0x52, 0x98, 0x01, 0x1e, 0x45, 0xd4, 0x58, - 0x98, 0x02, 0x30, 0x01, 0x90, 0x02, 0x20, 0x20, - 0x99, 0x0a, 0x6a, 0x22, 0xf7, 0xfe, 0xfe, 0x58, - 0x3d, 0x01, 0xd5, 0xf5, 0xe1, 0xc4, 0xe1, 0xa0, - 0xe0, 0x01, 0xe0, 0x8e, 0xe1, 0x53, 0x99, 0x0b, - 0x39, 0x01, 0x91, 0x0b, 0xe1, 0xbc, 0xe0, 0xed, - 0x0a, 0x28, 0xd3, 0x0e, 0x98, 0x02, 0x68, 0x39, - 0x31, 0x03, 0x08, 0x89, 0x00, 0x89, 0x31, 0x04, - 0x60, 0x39, 0x39, 0x80, 0x6f, 0xc9, 0x80, 0x08, - 0xe1, 0xae, 0xe0, 0xf5, 0xe0, 0x1d, 0xe1, 0x1b, - 0xe0, 0xa0, 0x09, 0xe8, 0xd3, 0x0c, 0x98, 0x02, - 0x68, 0x39, 0x31, 0x03, 0x08, 0x89, 0x00, 0x89, - 0x31, 0x04, 0x60, 0x39, 0x39, 0x80, 0x6f, 0xcd, - 0xf0, 0x01, 0xfa, 0xda, 0xc5, 0x03, 0xe1, 0x9b, - 0x20, 0x20, 0x40, 0x28, 0x99, 0x02, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc0, 0x60, 0x01, - 0xe1, 0x8e, 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, - 0x6f, 0xc0, 0xb0, 0x81, 0x90, 0x00, 0x09, 0x68, - 0xd3, 0x0c, 0x26, 0x00, 0x68, 0xa0, 0xe0, 0x01, - 0xe1, 0x7e, 0x36, 0x01, 0x42, 0x86, 0xda, 0x09, - 0x99, 0x00, 0x5d, 0x89, 0x29, 0x00, 0xd1, 0xf8, - 0xe0, 0x04, 0xe1, 0x75, 0x98, 0x00, 0xf7, 0xfe, - 0xfe, 0xcd, 0x1c, 0x06, 0x98, 0x02, 0x1b, 0x80, - 0x90, 0x02, 0x07, 0xe8, 0x0f, 0xc0, 0x90, 0x06, - 0xd1, 0x16, 0x0a, 0x68, 0xd3, 0x01, 0x20, 0x30, - 0xe0, 0x00, 0x20, 0x20, 0x06, 0x05, 0x0e, 0x2d, - 0x98, 0x02, 0x38, 0x01, 0x90, 0x02, 0xd4, 0x0b, - 0x98, 0x03, 0x30, 0x01, 0x90, 0x03, 0x99, 0x0b, - 0x6a, 0x22, 0x1c, 0x28, 0xf7, 0xfe, 0xfd, 0xe8, - 0x98, 0x02, 0x38, 0x01, 0x90, 0x02, 0xd5, 0xf3, - 0x25, 0x00, 0x2e, 0x00, 0xdd, 0x08, 0x99, 0x00, - 0x5d, 0x48, 0x99, 0x0b, 0x6a, 0x22, 0xf7, 0xfe, - 0xfd, 0xdb, 0x35, 0x01, 0x42, 0xb5, 0xdb, 0xf6, - 0x98, 0x03, 0x19, 0x80, 0x90, 0x03, 0x98, 0x06, - 0x28, 0x00, 0xd0, 0x0c, 0x98, 0x02, 0x1e, 0x45, - 0xd4, 0x09, 0x98, 0x03, 0x30, 0x01, 0x90, 0x03, - 0x20, 0x20, 0x99, 0x0b, 0x6a, 0x22, 0xf7, 0xfe, - 0xfd, 0xc7, 0x3d, 0x01, 0xd5, 0xf5, 0xb0, 0x01, - 0xe1, 0x32, 0x09, 0xe8, 0xd3, 0x0c, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x08, - 0x1f, 0xc1, 0x39, 0x01, 0x60, 0x38, 0x22, 0x08, - 0x98, 0x07, 0xf7, 0xfe, 0xfe, 0x0f, 0xe0, 0x08, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc3, - 0x93, 0x00, 0x0a, 0x28, 0xd3, 0x03, 0x9b, 0x00, - 0x04, 0x1b, 0x0c, 0x1b, 0x93, 0x00, 0xa0, 0x17, - 0x62, 0xa0, 0x09, 0x28, 0xd3, 0x01, 0xa0, 0x1a, - 0xe0, 0x00, 0xa0, 0x18, 0x60, 0x60, 0x09, 0x68, - 0xd3, 0x61, 0xe0, 0xe3, 0x09, 0xe8, 0xd3, 0x0c, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x08, 0x1f, 0xc1, 0x39, 0x01, 0x60, 0x38, - 0x22, 0x08, 0x98, 0x07, 0xf7, 0xfe, 0xfd, 0xe6, - 0xe0, 0x08, 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, - 0x6f, 0xc3, 0x93, 0x00, 0x0a, 0x28, 0xd3, 0x16, - 0x9b, 0x00, 0x04, 0x1b, 0x0c, 0x1b, 0xe0, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x22, 0x44, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, - 0x43, 0x44, 0x45, 0x46, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x58, 0x00, 0x00, 0x93, 0x00, 0xa0, 0x78, - 0x62, 0xa0, 0x09, 0x28, 0xd3, 0x01, 0xa0, 0x7b, - 0xe0, 0x00, 0xa0, 0x79, 0x60, 0x60, 0x09, 0x68, - 0xd3, 0x25, 0xe0, 0xa7, 0x68, 0x38, 0x30, 0x03, - 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, 0x60, 0x38, - 0x38, 0x80, 0x6f, 0xc3, 0x93, 0x00, 0xa0, 0x6e, - 0x62, 0xa0, 0x09, 0x28, 0xd3, 0x01, 0xa0, 0x72, - 0xe0, 0x00, 0xa0, 0x6f, 0x60, 0x60, 0x20, 0x08, - 0x23, 0x10, 0x43, 0x1d, 0x60, 0xa0, 0xe0, 0x7e, - 0x09, 0xe8, 0xd3, 0x0d, 0x68, 0x38, 0x30, 0x03, - 0x08, 0x80, 0x00, 0x80, 0x30, 0x08, 0x1f, 0xc1, - 0x39, 0x01, 0x60, 0x38, 0x22, 0x08, 0x98, 0x07, - 0xf7, 0xfe, 0xfd, 0x94, 0xe0, 0x09, 0xe0, 0x9b, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc3, - 0x93, 0x00, 0x0a, 0x28, 0xd3, 0x03, 0x9b, 0x00, - 0x04, 0x1b, 0x0c, 0x1b, 0x93, 0x00, 0x09, 0x28, - 0xd3, 0x01, 0xa0, 0x5e, 0xe0, 0x00, 0xa0, 0x5a, - 0x60, 0x60, 0x09, 0x68, 0xd3, 0x57, 0xe0, 0x69, - 0x09, 0xe8, 0xd3, 0x0c, 0x68, 0x38, 0x30, 0x03, - 0x08, 0x80, 0x00, 0x80, 0x30, 0x08, 0x1f, 0xc1, - 0x39, 0x01, 0x60, 0x38, 0x22, 0x08, 0x98, 0x07, - 0xf7, 0xfe, 0xfd, 0x6c, 0xe0, 0x08, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc3, 0x93, 0x00, - 0x0a, 0x28, 0xd3, 0x03, 0x9b, 0x00, 0x04, 0x1b, - 0x0c, 0x1b, 0x93, 0x00, 0xa0, 0x48, 0x60, 0x60, - 0x09, 0x68, 0xd3, 0x34, 0xe0, 0x46, 0x09, 0xe8, - 0xd3, 0x21, 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x30, 0x08, 0x1f, 0xc1, 0x39, 0x01, - 0x60, 0x38, 0x22, 0x08, 0x98, 0x07, 0xf7, 0xfe, - 0xfd, 0x49, 0x99, 0x07, 0x9b, 0x09, 0x68, 0x08, - 0x90, 0x04, 0x68, 0x49, 0x91, 0x03, 0xcb, 0x0c, - 0xf0, 0x01, 0xf9, 0x94, 0x28, 0x00, 0xd0, 0x08, - 0x98, 0x04, 0x99, 0x03, 0xf0, 0x01, 0xf9, 0x98, - 0x9a, 0x07, 0xc2, 0x03, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x14, 0x20, 0x00, 0xe0, 0x12, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc0, 0x0a, 0x29, - 0xd3, 0x01, 0x04, 0x00, 0x14, 0x00, 0x28, 0x00, - 0xda, 0x02, 0x42, 0x43, 0xe0, 0x01, 0xe0, 0x2b, - 0x1c, 0x03, 0x93, 0x00, 0x28, 0x00, 0xda, 0x01, - 0xa0, 0x2d, 0xe0, 0x08, 0x08, 0xa8, 0xd3, 0x01, - 0xa0, 0x2c, 0xe0, 0x04, 0x08, 0xe8, 0xd3, 0x01, - 0xa0, 0x2b, 0xe0, 0x00, 0xa0, 0x24, 0x60, 0x60, - 0x09, 0x68, 0xd3, 0x19, 0x4b, 0x29, 0x40, 0x1d, - 0xe0, 0x16, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x1d, - 0x09, 0x68, 0xd2, 0x01, 0x20, 0x06, 0x60, 0xa0, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x08, 0x1f, 0xc1, 0x39, 0x01, 0x60, 0x38, - 0x22, 0x08, 0x98, 0x08, 0xf7, 0xfe, 0xfc, 0xfa, - 0x20, 0x00, 0x23, 0x00, 0x60, 0x60, 0x93, 0x00, - 0x98, 0x01, 0x62, 0xe0, 0x60, 0x25, 0x98, 0x0a, - 0x9b, 0x00, 0x1c, 0x31, 0x1c, 0x22, 0xf7, 0xff, - 0xfb, 0x3f, 0x99, 0x02, 0x18, 0x40, 0x90, 0x02, - 0xb0, 0x02, 0x99, 0x09, 0x78, 0x08, 0x31, 0x01, - 0x91, 0x09, 0x28, 0x00, 0xd0, 0x00, 0xe5, 0x29, - 0x98, 0x08, 0x6a, 0x61, 0xf7, 0xfe, 0xfc, 0x82, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x00, 0x98, 0x00, 0xb0, 0x08, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x78, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, - 0xe3, 0x10, 0x06, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0x11, 0x2f, 0xff, 0x1e, 0xea, 0x00, 0x00, 0x0a, - 0xe3, 0x12, 0x07, 0x02, 0x0a, 0x00, 0x00, 0x08, - 0xe1, 0x5c, 0x00, 0x80, 0x83, 0xa0, 0x00, 0x00, - 0x81, 0x2f, 0xff, 0x1e, 0x03, 0x51, 0x00, 0x00, - 0x03, 0xa0, 0x00, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0x10, 0x07, 0x02, 0x13, 0xa0, 0x00, 0x00, - 0x11, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x35, 0x06, - 0xea, 0x00, 0x07, 0x2e, 0xe1, 0x2f, 0xff, 0x1f, - 0xea, 0x00, 0x00, 0x3e, 0xe5, 0x9f, 0x04, 0x5c, - 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, - 0xe3, 0xa0, 0x00, 0x20, 0xe3, 0xa0, 0x10, 0x01, - 0xef, 0x12, 0x34, 0x56, 0xe5, 0x9f, 0x04, 0x48, - 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x05, - 0xe5, 0x90, 0x10, 0x00, 0xe5, 0x9f, 0x04, 0x3c, - 0xe5, 0x90, 0x30, 0x00, 0xe5, 0x9f, 0x04, 0x38, - 0xe5, 0x90, 0xd0, 0x00, 0xea, 0x00, 0x00, 0x0b, - 0xe3, 0xa0, 0x00, 0x16, 0xe5, 0x9f, 0x44, 0x18, - 0xe2, 0x84, 0x20, 0xa8, 0xe2, 0x84, 0x10, 0xa4, - 0xe5, 0x81, 0x20, 0x00, 0xef, 0x12, 0x34, 0x56, - 0xe2, 0x84, 0x00, 0xa8, 0xe5, 0x90, 0xd0, 0x08, - 0xe5, 0x90, 0x30, 0x04, 0xe5, 0x90, 0x10, 0x00, - 0xe3, 0x51, 0x00, 0x00, 0x05, 0x9f, 0x14, 0x04, - 0xe2, 0x8f, 0x00, 0x10, 0xeb, 0x00, 0x00, 0x36, - 0xe5, 0x9f, 0x03, 0xfc, 0xe5, 0x9f, 0x33, 0xfc, - 0xeb, 0x00, 0x00, 0x12, 0xea, 0x00, 0x00, 0x4e, - 0x2e, 0x00, 0x04, 0x04, 0x2e, 0x03, 0xa9, 0xd0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe3, 0x1c, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xe1, 0xa0, 0xe0, 0x0f, - 0xe1, 0x2f, 0xff, 0x1c, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x8f, 0xe0, 0x01, - 0xe1, 0x2f, 0xff, 0x1c, 0x47, 0x78, 0x00, 0x00, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x1c, 0x02, 0x1c, 0x13, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe3, 0x13, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xe1, 0xa0, 0xe0, 0x0f, - 0xe1, 0x2f, 0xff, 0x13, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x8f, 0xe0, 0x01, - 0xe1, 0x2f, 0xff, 0x13, 0x47, 0x78, 0x00, 0x00, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe5, 0x9f, 0xc0, 0x44, 0xe8, 0x8c, 0xff, 0xff, - 0xe2, 0x8f, 0x00, 0x00, 0xea, 0x00, 0x0e, 0xf4, - 0x00, 0x80, 0x0e, 0x09, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, - 0x75, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, - 0x54, 0x68, 0x75, 0x6d, 0x62, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x00, 0x00, 0x2e, 0x08, 0x21, 0xd0, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x73, 0x08, - 0xe5, 0x87, 0x00, 0x00, 0xe2, 0x8f, 0x50, 0xc9, - 0xe2, 0x85, 0x5c, 0x02, 0xe5, 0x87, 0x50, 0x10, - 0xe2, 0x8f, 0x50, 0xe9, 0xe2, 0x85, 0x5c, 0x02, - 0xe5, 0x87, 0x50, 0x14, 0xe1, 0xa0, 0x80, 0x0e, - 0xe2, 0x87, 0x00, 0x04, 0xeb, 0x00, 0x04, 0x1d, - 0xe9, 0x2d, 0x01, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe5, 0xc7, 0x00, 0x2c, 0xe2, 0x87, 0x00, 0x04, - 0xeb, 0x00, 0x00, 0xce, 0xe3, 0xa0, 0x40, 0x00, - 0xe2, 0x8d, 0x00, 0x04, 0xe5, 0x97, 0x10, 0x00, - 0xe3, 0xa0, 0x30, 0x00, 0xe5, 0xc7, 0x30, 0x2e, - 0xe2, 0x81, 0x30, 0x08, 0xe8, 0x91, 0x00, 0x06, - 0xe5, 0x9f, 0xc2, 0xcc, 0xeb, 0xff, 0xff, 0xb7, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x80, 0x01, - 0xea, 0x00, 0x00, 0x01, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xa0, 0x70, 0x00, - 0xeb, 0x00, 0x04, 0x15, 0xe1, 0xa0, 0x00, 0x08, - 0xeb, 0x00, 0x00, 0x0d, 0xe1, 0xa0, 0x20, 0x07, - 0xe3, 0x52, 0x00, 0x00, 0x12, 0x8f, 0x00, 0x08, - 0x15, 0x9f, 0x10, 0x00, 0xeb, 0x00, 0x0e, 0xb5, - 0x41, 0x42, 0x45, 0x58, 0x00, 0x80, 0x0e, 0x06, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, - 0x6f, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x6f, 0x20, - 0x6c, 0x61, 0x72, 0x67, 0x65, 0x00, 0x00, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe5, 0x9f, 0x32, 0x60, 0xeb, 0xff, 0xff, 0xa9, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc2, 0x28, - 0xe5, 0xdc, 0x00, 0x2c, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x30, 0x00, 0xe5, 0x9f, 0x12, 0x14, - 0xe4, 0x81, 0xf0, 0x04, 0xe8, 0xb3, 0x00, 0x04, - 0xe8, 0xa1, 0x00, 0x04, 0xe4, 0xd3, 0x20, 0x01, - 0xe4, 0xc1, 0x20, 0x01, 0xe3, 0x52, 0x00, 0x00, - 0x1a, 0xff, 0xff, 0xfb, 0xe1, 0xa0, 0xf0, 0x0e, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0xa0, 0x80, 0x01, - 0xeb, 0xff, 0xff, 0xf2, 0xe5, 0x9f, 0x71, 0xe8, - 0xe5, 0xd7, 0x20, 0x2f, 0xe3, 0x52, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x2c, 0xe3, 0xa0, 0x20, 0x01, - 0xe5, 0xc7, 0x20, 0x2f, 0xeb, 0x00, 0x00, 0x3b, - 0xe1, 0xa0, 0x10, 0x08, 0xeb, 0x00, 0x03, 0xde, - 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x1b, - 0xe2, 0x88, 0xb0, 0x40, 0xe9, 0x3b, 0x01, 0xef, - 0xe9, 0x2c, 0x01, 0xef, 0xe9, 0x3b, 0x01, 0xef, - 0xe9, 0x2c, 0x01, 0xef, 0xe5, 0x9f, 0x71, 0xa8, - 0xe5, 0x97, 0x40, 0xa0, 0xe3, 0x84, 0x40, 0x80, - 0xe1, 0x21, 0xf0, 0x04, 0xe1, 0xa0, 0xd0, 0x0c, - 0xe1, 0xa0, 0xb0, 0x04, 0xe5, 0x9f, 0x01, 0x8c, - 0xe5, 0x90, 0x00, 0x04, 0xe1, 0xa0, 0x10, 0x0d, - 0xeb, 0x00, 0x03, 0xfe, 0xe3, 0xa0, 0x10, 0x00, - 0xe5, 0xc7, 0x10, 0x2f, 0xe1, 0xa0, 0x10, 0x0d, - 0xe3, 0x54, 0x00, 0x10, 0x1a, 0x00, 0x00, 0x02, - 0xe3, 0xa0, 0x00, 0x17, 0xef, 0x12, 0x34, 0x56, - 0xe3, 0x21, 0xf0, 0x93, 0xe1, 0xa0, 0x00, 0x00, - 0xe2, 0x81, 0xe0, 0x3c, 0xe9, 0x5e, 0x7f, 0xff, - 0xe1, 0xa0, 0x00, 0x00, 0xe8, 0xde, 0x80, 0x00, - 0xe2, 0x8f, 0x00, 0x00, 0xea, 0x00, 0x0e, 0x72, - 0x00, 0x80, 0x0e, 0x07, 0x4e, 0x6f, 0x20, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x54, 0x72, 0x61, 0x70, 0x20, 0x48, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, - 0xe2, 0x8f, 0x00, 0x00, 0xea, 0x00, 0x0e, 0x68, - 0x00, 0x80, 0x0e, 0x00, 0x52, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x20, 0x54, 0x72, - 0x61, 0x70, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0xc1, 0x04, 0xe3, 0xa0, 0x00, 0x00, - 0xe5, 0xcc, 0x00, 0x2f, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x00, 0xf0, - 0xe5, 0x90, 0x00, 0x00, 0xe5, 0x90, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0x00, 0xdc, 0xe2, 0x80, 0x00, 0x04, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0xc0, 0xcc, 0xe3, 0x50, 0x0b, 0x02, - 0x33, 0xa0, 0x0b, 0x02, 0xe2, 0x8c, 0xc0, 0x04, - 0xe9, 0x9c, 0x00, 0x0c, 0xe0, 0x53, 0x31, 0x00, - 0x21, 0x53, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, - 0xe5, 0x81, 0x20, 0x00, 0xe0, 0x82, 0x21, 0x00, - 0xe5, 0x8c, 0x20, 0x04, 0xe1, 0x2f, 0xff, 0x1e, - 0xe9, 0x2d, 0x50, 0x03, 0xe1, 0xa0, 0x10, 0x0c, - 0xeb, 0x00, 0x00, 0x44, 0xe3, 0x50, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0d, 0xe5, 0x9d, 0xc0, 0x08, - 0xe9, 0x9c, 0x40, 0x04, 0xe1, 0x5e, 0x00, 0x01, - 0x10, 0x4e, 0x30, 0x02, 0xe0, 0x81, 0xe0, 0x00, - 0x11, 0xa0, 0x00, 0x02, 0x11, 0xa0, 0x20, 0x01, - 0xe9, 0x8c, 0x40, 0x04, 0x13, 0x53, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x03, 0xe8, 0xbd, 0x50, 0x03, - 0xe5, 0x81, 0x00, 0x00, 0xe1, 0xa0, 0x01, 0x43, - 0xe1, 0x2f, 0xff, 0x1e, 0xe8, 0xbd, 0x50, 0x03, - 0xe9, 0x9c, 0x00, 0x0c, 0xe0, 0x43, 0x00, 0x02, - 0xe1, 0xb0, 0x01, 0x40, 0x03, 0xa0, 0x20, 0x00, - 0x15, 0x8c, 0x30, 0x04, 0xe5, 0x81, 0x20, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe2, 0x80, 0x20, 0x03, 0xe3, 0xc2, 0x20, 0x03, - 0xe5, 0x9f, 0xc0, 0x24, 0xe2, 0x8c, 0xc0, 0x08, - 0xe8, 0x9c, 0x00, 0x03, 0xe0, 0x90, 0x20, 0x02, - 0x31, 0x52, 0x00, 0x01, 0x35, 0x8c, 0x20, 0x00, - 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x08, 0x21, 0x4c, 0x2e, 0x08, 0x21, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0xcc, 0x18, - 0x2e, 0x02, 0xcc, 0x14, 0x2e, 0x02, 0xcc, 0x10, - 0x2e, 0x08, 0xd7, 0x68, 0x2e, 0x00, 0x1a, 0xf9, - 0x2e, 0x02, 0x0e, 0x19, 0x2e, 0x02, 0x0c, 0xcd, - 0x2e, 0x02, 0x0d, 0x8d, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x00, 0x04, 0xe5, 0x90, 0x00, 0x00, - 0xe2, 0x00, 0x04, 0xff, 0xe3, 0x50, 0x04, 0xea, - 0x03, 0xa0, 0x00, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe2, 0x40, 0x0b, 0x05, 0xe3, 0x50, 0x0b, 0x1b, - 0x33, 0xa0, 0x00, 0x01, 0x23, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe2, 0x8f, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x55, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x20, 0x54, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x5a, - 0x65, 0x72, 0x6f, 0x00, 0x00, 0x02, 0x00, 0x01, - 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x02, 0x55, 0x6e, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x53, 0x57, - 0x49, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x03, 0x50, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x20, 0x41, 0x62, 0x6f, - 0x72, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, - 0x44, 0x61, 0x74, 0x61, 0x20, 0x41, 0x62, 0x6f, - 0x72, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x05, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, - 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, - 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x64, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, - 0x75, 0x70, 0x74, 0x00, 0x00, 0x02, 0x00, 0x07, - 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x64, 0x20, 0x46, 0x61, 0x73, 0x74, 0x20, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xfe, 0x80, - 0x2e, 0x01, 0xfe, 0x98, 0x2e, 0x01, 0xfe, 0xb4, - 0x2e, 0x01, 0xfe, 0xd4, 0x2e, 0x01, 0xfe, 0xe8, - 0x2e, 0x01, 0xfe, 0xf8, 0x2e, 0x01, 0xff, 0x10, - 0x2e, 0x01, 0xff, 0x28, 0xe2, 0x4f, 0x20, 0x28, - 0xe7, 0x92, 0x01, 0x00, 0xea, 0xff, 0xff, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0xc3, 0x40, 0x58, 0x1a, 0xc0, 0x1c, 0x01, - 0x08, 0x40, 0x08, 0x42, 0x18, 0x80, 0x09, 0x02, - 0x18, 0x80, 0x0a, 0x02, 0x18, 0x80, 0x0c, 0x02, - 0x18, 0x80, 0x08, 0xc0, 0x00, 0x82, 0x18, 0x12, - 0x00, 0x52, 0x1a, 0x89, 0x29, 0x0a, 0xdb, 0x01, - 0x1c, 0x40, 0x39, 0x0a, 0x40, 0x58, 0x1a, 0xc0, - 0x40, 0x59, 0x1a, 0xc9, 0x47, 0x70, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x30, 0x00, 0x02, - 0x01, 0x31, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x05, - 0xe1, 0x80, 0xc0, 0x02, 0xe3, 0x3c, 0x01, 0x02, - 0x01, 0x91, 0xc0, 0x03, 0x03, 0xa0, 0x00, 0x01, - 0x13, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0xc4, 0xff, 0xe3, 0x8c, 0xc6, 0x0e, - 0xe1, 0x5c, 0x00, 0x80, 0x83, 0xa0, 0x00, 0x01, - 0x81, 0x2f, 0xff, 0x1e, 0x03, 0x51, 0x00, 0x00, - 0x03, 0xa0, 0x00, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xb5, 0x04, 0xf0, 0x00, - 0xf8, 0x04, 0xbc, 0x08, 0x60, 0x1a, 0xbc, 0x08, - 0x47, 0x18, 0x47, 0x78, 0xe1, 0xb0, 0x00, 0x80, - 0x03, 0x31, 0x00, 0x00, 0x01, 0xa0, 0x00, 0x60, - 0x03, 0xa0, 0x20, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x2a, 0xa0, 0xe1, 0xc0, 0x0a, 0x82, - 0xe1, 0xa0, 0x00, 0x60, 0xe3, 0x32, 0x00, 0x00, - 0xe2, 0x42, 0x2c, 0x03, 0xe2, 0x42, 0x20, 0xfe, - 0x0a, 0x00, 0x00, 0x06, 0xe3, 0x80, 0x04, 0x3f, - 0xe3, 0x80, 0x06, 0x0e, 0xe2, 0x22, 0x3b, 0x01, - 0xe3, 0x33, 0x00, 0x01, 0x11, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x10, 0x01, 0xea, 0x00, 0x04, 0x70, - 0xe2, 0x00, 0xc1, 0x02, 0xe1, 0xa0, 0x06, 0x00, - 0xe2, 0x42, 0x20, 0x01, 0xe1, 0xb0, 0x00, 0x80, - 0x4a, 0x00, 0x00, 0x02, 0xe1, 0xb0, 0x10, 0x81, - 0x23, 0x80, 0x0a, 0x01, 0xea, 0xff, 0xff, 0xf9, - 0xe1, 0xa0, 0x04, 0xc0, 0xe3, 0xc0, 0x05, 0x01, - 0xe1, 0x8c, 0x01, 0x20, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe2, 0x00, 0xc1, 0x02, 0xe1, 0xb0, 0x30, 0x80, - 0xe1, 0xb0, 0x3a, 0xa3, 0x0a, 0x00, 0x00, 0x0b, - 0xe2, 0x83, 0xe0, 0x01, 0xe3, 0x5e, 0x0b, 0x02, - 0xaa, 0x00, 0x00, 0x39, 0xe0, 0x93, 0x30, 0x02, - 0xda, 0x00, 0x00, 0x11, 0xe2, 0x83, 0xe0, 0x01, - 0xe3, 0x5e, 0x0b, 0x02, 0xaa, 0x00, 0x00, 0x37, - 0xe1, 0x83, 0x06, 0x00, 0xe1, 0x8c, 0x06, 0x60, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x91, 0x30, 0x80, 0x01, 0xa0, 0x00, 0x0c, - 0x08, 0xbd, 0x40, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe1, 0xb0, 0x10, 0x81, 0xe0, 0xa0, 0x00, 0x00, - 0xe2, 0x42, 0x20, 0x01, 0xe3, 0x10, 0x06, 0x01, - 0x0a, 0xff, 0xff, 0xfa, 0xe3, 0xa0, 0x30, 0x01, - 0xea, 0xff, 0xff, 0xeb, 0xe1, 0xa0, 0x05, 0x80, - 0xe3, 0x80, 0x01, 0x02, 0xe3, 0x73, 0x00, 0x14, - 0xca, 0x00, 0x00, 0x05, 0xe3, 0x73, 0x00, 0x34, - 0xaa, 0x00, 0x00, 0x0d, 0xe1, 0xa0, 0x00, 0x0c, - 0xe3, 0xa0, 0x10, 0x00, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xa0, 0x05, 0xa0, - 0xe2, 0x63, 0x30, 0x01, 0xe2, 0x63, 0x20, 0x20, - 0xe1, 0xa0, 0xe2, 0x11, 0xe1, 0xb0, 0xe0, 0x8e, - 0xe1, 0xa0, 0xe2, 0x10, 0xe1, 0x8e, 0x13, 0x31, - 0xe1, 0xa0, 0x03, 0x30, 0xe1, 0x80, 0x00, 0x0c, - 0xea, 0x00, 0x00, 0x0a, 0xe2, 0x93, 0x30, 0x20, - 0xda, 0x00, 0x00, 0x03, 0xe1, 0x80, 0x0a, 0xa1, - 0xe1, 0xb0, 0xe3, 0x11, 0xe2, 0x63, 0x30, 0x0c, - 0xea, 0x00, 0x00, 0x02, 0xe2, 0x83, 0x30, 0x15, - 0xe1, 0x91, 0xe3, 0x10, 0xe2, 0x63, 0x30, 0x21, - 0xe1, 0xa0, 0x13, 0x30, 0xe1, 0xa0, 0x00, 0x0c, - 0x03, 0x11, 0x00, 0x01, 0x98, 0xbd, 0x40, 0x00, - 0x91, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, - 0x22, 0x80, 0x00, 0x01, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe8, 0xbd, 0x40, 0x00, - 0xe3, 0xa0, 0x10, 0x01, 0xea, 0x00, 0x04, 0x1e, - 0xe8, 0xbd, 0x40, 0x00, 0xe3, 0xa0, 0x10, 0x01, - 0xea, 0x00, 0x04, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0xe1, 0xa0, 0x35, 0x0c, 0xe1, 0xa0, 0x0a, 0x2c, - 0xe1, 0xa0, 0x25, 0x81, 0xe1, 0x83, 0x1a, 0xa1, - 0x12, 0x80, 0x0b, 0x1e, 0xe1, 0xa0, 0x00, 0x60, - 0x13, 0x81, 0x11, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x0a, 0x00, 0x00, 0x02, 0xe3, 0x7c, 0x00, 0x01, - 0x03, 0x80, 0x01, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x11, 0x01, 0x02, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0xd1, 0x11, 0x02, 0x0a, 0x00, 0x00, 0x15, - 0xe1, 0xb0, 0x38, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x21, 0x01, 0xa0, 0x14, 0x01, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x21, - 0x01, 0xa0, 0x12, 0x01, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x21, 0x01, 0xa0, 0x11, 0x01, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa1, - 0x01, 0xa0, 0x10, 0x81, 0x02, 0x8c, 0xc0, 0x01, - 0xe2, 0x6c, 0x30, 0x20, 0xe1, 0x81, 0x13, 0x32, - 0xe1, 0xa0, 0x2c, 0x12, 0xe0, 0x40, 0x00, 0x0c, - 0xe2, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xb0, 0x38, 0x22, 0x01, 0xa0, 0x28, 0x02, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x22, 0x01, 0xa0, 0x24, 0x02, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x22, - 0x01, 0xa0, 0x22, 0x02, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x22, 0x01, 0xa0, 0x21, 0x02, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa2, - 0x01, 0xa0, 0x20, 0x82, 0x02, 0x8c, 0xc0, 0x01, - 0xe1, 0xa0, 0x10, 0x02, 0xe3, 0xa0, 0x20, 0x00, - 0xe2, 0x40, 0x00, 0x1f, 0xe0, 0x40, 0x00, 0x0c, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe8, 0x93, 0x00, 0x38, - 0xe3, 0x10, 0x01, 0x01, 0x03, 0x13, 0x01, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x03, 0xe5, - 0xeb, 0x00, 0x05, 0x39, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, - 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x04, 0x7f, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, - 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0xa0, 0x40, 0x01, - 0xe1, 0xa0, 0x50, 0x02, 0xe3, 0x10, 0x01, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x03, 0xd7, - 0xeb, 0x00, 0x05, 0x2b, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, - 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x04, 0x71, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0xa0, 0x38, 0x80, - 0xe1, 0xa0, 0x38, 0xa3, 0xe1, 0xc0, 0x00, 0x03, - 0xe1, 0xd1, 0xc0, 0x80, 0x5a, 0x00, 0x00, 0x0c, - 0xe2, 0x53, 0x3b, 0x0f, 0x4a, 0x00, 0x00, 0x13, - 0x12, 0x83, 0xc0, 0x01, 0x13, 0x5c, 0x0b, 0x02, - 0xaa, 0x00, 0x00, 0x0d, 0xe1, 0xb0, 0xc5, 0xa2, - 0x2a, 0x00, 0x00, 0x58, 0xe1, 0x80, 0x0a, 0x03, - 0xe3, 0xc1, 0x11, 0x02, 0xe1, 0x80, 0x05, 0xa1, - 0xe1, 0x8c, 0x1a, 0x81, 0xe3, 0xa0, 0x30, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x10, 0x01, 0x01, - 0x1a, 0x00, 0x00, 0x40, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x30, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x33, 0x00, 0x00, - 0x13, 0xa0, 0x33, 0x19, 0x11, 0x2f, 0xff, 0x1e, - 0xe2, 0x93, 0x30, 0x34, 0x0a, 0x00, 0x00, 0x31, - 0x42, 0x00, 0x01, 0x02, 0x43, 0xa0, 0x10, 0x00, - 0x43, 0xa0, 0x30, 0x00, 0x41, 0x2f, 0xff, 0x1e, - 0xe2, 0x53, 0x30, 0x20, 0x0a, 0x00, 0x00, 0x13, - 0xba, 0x00, 0x00, 0x1a, 0xe1, 0xb0, 0xc3, 0x12, - 0x4a, 0x00, 0x00, 0x05, 0xe2, 0x63, 0xc0, 0x20, - 0xe1, 0x80, 0x0c, 0x31, 0xe1, 0xa0, 0x2c, 0x32, - 0xe1, 0x82, 0x13, 0x11, 0xe3, 0xa0, 0x30, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x96, 0xc0, 0x8c, - 0xe2, 0x63, 0xc0, 0x20, 0xe1, 0x80, 0x0c, 0x31, - 0xe1, 0xa0, 0x2c, 0x32, 0xe1, 0x82, 0x13, 0x11, - 0xe3, 0xa0, 0x30, 0x00, 0x03, 0x11, 0x00, 0x01, - 0x01, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, - 0x22, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0x32, 0x01, 0x02, - 0x41, 0x2f, 0xff, 0x1e, 0x03, 0x11, 0x00, 0x01, - 0x01, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, - 0x22, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe2, 0x83, 0x30, 0x20, 0xe1, 0xb0, 0xc3, 0x11, - 0x4a, 0x00, 0x00, 0x04, 0xe2, 0x63, 0xc0, 0x20, - 0xe1, 0xa0, 0x1c, 0x31, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x3c, 0x01, 0x02, 0x01, 0x92, 0xc0, 0x06, - 0xe2, 0x63, 0xc0, 0x20, 0xe1, 0xa0, 0x1c, 0x31, - 0x03, 0x11, 0x00, 0x01, 0x12, 0x81, 0x10, 0x01, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x31, 0x01, 0x02, 0x03, 0x32, 0x00, 0x00, - 0x03, 0xa0, 0x10, 0x00, 0x13, 0xa0, 0x10, 0x01, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x10, 0x02, 0x02, 0x1a, 0x00, 0x00, 0x0b, - 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0x31, 0x00, 0x00, - 0x11, 0xb0, 0x10, 0x81, 0x43, 0xe0, 0x00, 0x00, - 0x41, 0x2f, 0xff, 0x1e, 0x03, 0x32, 0x00, 0x00, - 0x13, 0xa0, 0x34, 0x61, 0x11, 0x2f, 0xff, 0x1e, - 0xe2, 0x00, 0x01, 0x02, 0xe3, 0x80, 0x02, 0x07, - 0xe3, 0x80, 0x06, 0xff, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0xc1, 0x11, 0x02, 0xe1, 0xa0, 0xcb, 0x02, - 0xe1, 0x9c, 0xc0, 0x06, 0xe2, 0x00, 0xc1, 0x02, - 0xe1, 0xa0, 0x0a, 0x03, 0xe1, 0x80, 0x05, 0xa1, - 0xe1, 0xa0, 0x1a, 0x81, 0xe1, 0x81, 0x15, 0xa2, - 0xe3, 0xa0, 0x30, 0x00, 0x0a, 0x00, 0x00, 0x06, - 0xe2, 0x91, 0x10, 0x01, 0x22, 0x80, 0x00, 0x01, - 0xe2, 0x90, 0x26, 0x01, 0xe1, 0x80, 0x00, 0x0c, - 0x51, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x33, 0x19, - 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x11, 0x00, 0x01, - 0x01, 0x80, 0x00, 0x0c, 0x01, 0x2f, 0xff, 0x1e, - 0xe2, 0x91, 0x10, 0x01, 0x22, 0x80, 0x00, 0x01, - 0xe2, 0x90, 0x26, 0x01, 0xe1, 0x80, 0x00, 0x0c, - 0x51, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x33, 0x19, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe1, 0xb0, 0xc0, 0x82, - 0x03, 0x33, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x3c, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x2a, 0x2c, - 0xe1, 0xa0, 0x55, 0x83, 0xe1, 0x88, 0x4a, 0xa3, - 0x12, 0x82, 0x2b, 0x1e, 0xe1, 0xa0, 0x30, 0x62, - 0x13, 0x84, 0x41, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0xf8, - 0xe3, 0x7c, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x16, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x3c, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x04, 0xb9, 0xe3, 0x7c, 0x00, 0x01, - 0x0a, 0x00, 0x00, 0x16, 0xe3, 0xa0, 0xb0, 0x02, - 0xeb, 0x00, 0x05, 0x15, 0xeb, 0xff, 0xff, 0x5f, - 0xe3, 0x13, 0x02, 0x02, 0x08, 0xbd, 0x4b, 0xf0, - 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x83, 0x35, 0x02, - 0xea, 0x00, 0x04, 0x0f, 0xe3, 0x83, 0x31, 0x01, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0e, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x04, 0xa1, 0xe3, 0x7c, 0x00, 0x01, - 0x03, 0x80, 0x01, 0x01, 0xe2, 0x4f, 0xe0, 0x60, - 0xe3, 0xa0, 0xb0, 0x02, 0xea, 0x00, 0x06, 0x2b, - 0xe1, 0x95, 0xc0, 0x84, 0x0a, 0x00, 0x00, 0x13, - 0xe1, 0xb0, 0x40, 0x84, 0x5a, 0x00, 0x00, 0x0d, - 0xe3, 0xe0, 0x00, 0x00, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xb0, 0xc0, 0x80, - 0x03, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, - 0xe1, 0xf0, 0xca, 0x4c, 0x08, 0xbd, 0x4b, 0xf0, - 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x3c, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x04, 0xe1, 0x91, 0xc6, 0x00, - 0x08, 0xbd, 0x4b, 0xf0, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x35, 0x06, 0xea, 0x00, 0x03, 0xe8, - 0xe3, 0xa0, 0x35, 0x0a, 0xea, 0x00, 0x03, 0xe6, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe8, 0xbd, 0x4b, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, - 0xe1, 0xb0, 0xc0, 0x82, 0x03, 0x33, 0x00, 0x00, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x2a, 0x2c, - 0xe1, 0xa0, 0x55, 0x83, 0xe1, 0x88, 0x4a, 0xa3, - 0x12, 0x82, 0x2b, 0x1e, 0xe1, 0xa0, 0x30, 0x62, - 0x13, 0x84, 0x41, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0xa4, - 0xe3, 0x7c, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x14, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x0a, 0x2c, - 0xe1, 0xa0, 0x25, 0x81, 0xe1, 0x88, 0x1a, 0xa1, - 0x12, 0x80, 0x0b, 0x1e, 0xe1, 0xa0, 0x00, 0x60, - 0x13, 0x81, 0x11, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0x66, - 0xe3, 0x7c, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x14, - 0xeb, 0x00, 0x02, 0xdc, 0xeb, 0xff, 0xff, 0x0d, - 0xe3, 0x13, 0x02, 0x02, 0x08, 0xbd, 0x4b, 0xf0, - 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x83, 0x35, 0x02, - 0xea, 0x00, 0x03, 0xbd, 0xe3, 0x83, 0x31, 0x01, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x0a, 0x2c, - 0xe1, 0xa0, 0x25, 0x81, 0xe1, 0x88, 0x1a, 0xa1, - 0x12, 0x80, 0x0b, 0x1e, 0xe1, 0xa0, 0x00, 0x60, - 0x13, 0x81, 0x11, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0x50, - 0xe3, 0x7c, 0x00, 0x01, 0x03, 0x80, 0x01, 0x01, - 0xe2, 0x4f, 0xe0, 0x5c, 0xe3, 0xa0, 0xb0, 0x02, - 0xea, 0x00, 0x03, 0x64, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0xc4, 0xff, 0xe3, 0x8c, 0xc6, 0x0e, - 0xe1, 0x5c, 0x00, 0x82, 0x9a, 0x00, 0x00, 0x0a, - 0xe1, 0xb0, 0x00, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x3a, 0x00, 0x00, 0x12, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0xff, 0xfc, 0x60, 0xe1, 0xb0, 0x20, 0x82, - 0x8a, 0x00, 0x00, 0x18, 0xe3, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x53, 0x00, 0x00, - 0x0a, 0xff, 0xff, 0xf2, 0xea, 0xff, 0xfc, 0x5d, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0xff, 0xfc, 0x56, 0xe1, 0xb0, 0x20, 0x82, - 0x33, 0xa0, 0x00, 0x00, 0x23, 0xa0, 0x00, 0x01, - 0x03, 0x33, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfc, 0x4d, - 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x01, - 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, - 0x01, 0x51, 0x00, 0x03, 0x33, 0xa0, 0x00, 0x00, - 0x23, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, - 0x83, 0xa0, 0x00, 0x00, 0x93, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0xb0, 0x20, 0x80, 0xe1, 0xa0, 0x2a, 0xa2, - 0xe1, 0xa0, 0x05, 0x80, 0xe1, 0x80, 0x0a, 0xa1, - 0xe3, 0x80, 0x01, 0x02, 0xe2, 0x42, 0x2c, 0x03, - 0x2a, 0x00, 0x00, 0x08, 0xe2, 0x52, 0x20, 0xff, - 0x4a, 0x00, 0x00, 0x04, 0xe2, 0x72, 0x20, 0x1f, - 0xc1, 0xa0, 0x02, 0x30, 0xc1, 0x2f, 0xff, 0x1e, - 0xe3, 0xc0, 0x01, 0x02, 0xea, 0x00, 0x00, 0x09, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe2, 0x52, 0x20, 0xff, 0x4a, 0xff, 0xff, 0xfb, - 0xe2, 0x72, 0x20, 0x1f, 0xc1, 0xa0, 0x02, 0x30, - 0xc2, 0x60, 0x00, 0x00, 0xc1, 0x2f, 0xff, 0x1e, - 0x01, 0x91, 0xc0, 0x80, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x36, 0x12, 0xe2, 0x82, 0x2e, 0x3e, - 0xe3, 0x72, 0x00, 0x01, 0x1a, 0x00, 0x03, 0x63, - 0xe1, 0x91, 0xc0, 0x80, 0x13, 0xa0, 0x37, 0x42, - 0xea, 0x00, 0x03, 0x60, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe2, 0x22, 0x21, 0x02, - 0xea, 0x00, 0x00, 0x01, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe1, 0xb0, 0xc0, 0x82, - 0x03, 0x33, 0x00, 0x00, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x2a, 0x2c, 0xe1, 0xa0, 0x55, 0x83, - 0xe1, 0x88, 0x4a, 0xa3, 0x12, 0x82, 0x2b, 0x1e, - 0xe1, 0xa0, 0x30, 0x62, 0x13, 0x84, 0x41, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x04, 0x1d, 0xe3, 0x7c, 0x00, 0x01, - 0x0a, 0x00, 0x00, 0x14, 0xe1, 0xb0, 0xc0, 0x80, - 0x03, 0x31, 0x00, 0x00, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x03, 0xdf, 0xe3, 0x7c, 0x00, 0x01, - 0x0a, 0x00, 0x00, 0x14, 0xeb, 0x00, 0x05, 0xbb, - 0xeb, 0xff, 0xfe, 0x86, 0xe3, 0x13, 0x02, 0x02, - 0x08, 0xbd, 0x4b, 0xf0, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0x83, 0x35, 0x02, 0xea, 0x00, 0x03, 0x36, - 0xe3, 0x83, 0x31, 0x01, 0xe1, 0xb0, 0xc0, 0x80, - 0x03, 0x31, 0x00, 0x00, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x03, 0xc9, 0xe3, 0x7c, 0x00, 0x01, - 0x03, 0x80, 0x01, 0x01, 0xe2, 0x4f, 0xe0, 0x5c, - 0xe3, 0xa0, 0xb0, 0x02, 0xea, 0x00, 0x05, 0xff, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, - 0xe2, 0x20, 0x01, 0x02, 0xea, 0xff, 0xff, 0xc6, - 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0xc4, 0xff, - 0xe3, 0x8c, 0xc6, 0x0e, 0xe1, 0x5c, 0x00, 0x82, - 0x9a, 0x00, 0x00, 0x0a, 0xe1, 0xb0, 0x00, 0x80, - 0x03, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, - 0x3a, 0x00, 0x00, 0x11, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfb, 0xd5, - 0xe1, 0xb0, 0x20, 0x82, 0x8a, 0x00, 0x00, 0x17, - 0xe3, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0x03, 0x53, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xf2, - 0xea, 0xff, 0xfb, 0xd2, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfb, 0xcb, - 0xe1, 0xb0, 0x20, 0x82, 0x03, 0x33, 0x00, 0x00, - 0x83, 0xa0, 0x00, 0x00, 0x93, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfb, 0xc3, - 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x00, - 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, - 0x01, 0x51, 0x00, 0x03, 0x93, 0xa0, 0x00, 0x01, - 0x83, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, - 0x33, 0xa0, 0x00, 0x00, 0x23, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x42, 0x99, 0xd1, 0x03, - 0x42, 0x90, 0xd1, 0x01, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x01, 0x47, 0x70, 0xb5, 0x70, 0x1c, 0x04, - 0x1c, 0x0d, 0x1c, 0x16, 0x46, 0x9e, 0x47, 0x78, - 0xe3, 0xa0, 0x00, 0x00, 0xe3, 0xa0, 0x10, 0x00, - 0xe1, 0xa0, 0x30, 0x05, 0xe1, 0xa0, 0x20, 0x04, - 0xe3, 0x3e, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x14, 0xe3, 0xb0, 0xc0, 0x00, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xbe, 0xe0, 0x0e, - 0x2a, 0x00, 0x00, 0x04, 0xe1, 0x5e, 0x00, 0x03, - 0x01, 0x56, 0x00, 0x02, 0x92, 0x8c, 0xc0, 0x01, - 0x9a, 0xff, 0xff, 0xf8, 0xe2, 0x9c, 0xc0, 0x00, - 0xe1, 0xb0, 0xe0, 0x6e, 0xe1, 0xa0, 0x60, 0x66, - 0xe0, 0x52, 0x40, 0x06, 0xe0, 0xd3, 0x50, 0x0e, - 0x21, 0xa0, 0x30, 0x05, 0x21, 0xa0, 0x20, 0x04, - 0xe0, 0xb0, 0x00, 0x00, 0xe0, 0xa1, 0x10, 0x01, - 0xe1, 0xb0, 0xe0, 0xae, 0xe1, 0xa0, 0x60, 0x66, - 0xe2, 0x5c, 0xc0, 0x01, 0xaa, 0xff, 0xff, 0xf5, - 0xe8, 0xbd, 0x40, 0x70, 0xe1, 0x2f, 0xff, 0x1e, - 0x18, 0x80, 0x41, 0x59, 0x47, 0x70, 0x00, 0x00, - 0x1c, 0x01, 0x08, 0x40, 0x08, 0x42, 0x18, 0x80, - 0x09, 0x02, 0x18, 0x80, 0x0a, 0x02, 0x18, 0x80, - 0x0c, 0x02, 0x18, 0x80, 0x08, 0xc0, 0x00, 0x82, - 0x18, 0x12, 0x00, 0x52, 0x1a, 0x89, 0x29, 0x0a, - 0xdb, 0x01, 0x1c, 0x40, 0x39, 0x0a, 0x47, 0x70, - 0xb4, 0x80, 0x20, 0x03, 0x43, 0xc0, 0x23, 0x00, - 0x49, 0x07, 0x54, 0x0b, 0x30, 0x01, 0xd4, 0xfc, - 0x20, 0x00, 0x4a, 0x06, 0x5c, 0x17, 0x54, 0x0f, - 0x18, 0x0f, 0x37, 0x80, 0x70, 0x3b, 0x30, 0x01, - 0x28, 0x80, 0xd3, 0xf7, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x22, 0x44, 0x2e, 0x03, 0xa9, 0x2c, - 0x17, 0xc1, 0x47, 0x70, 0x42, 0x99, 0xdb, 0x04, - 0xdc, 0x01, 0x42, 0x90, 0xd3, 0x01, 0x20, 0x00, - 0x47, 0x70, 0x20, 0x01, 0x47, 0x70, 0x00, 0x00, - 0x1c, 0x0b, 0x21, 0x00, 0x42, 0x40, 0x41, 0x99, - 0x47, 0x70, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0xb0, 0x00, 0xe1, 0xa0, 0x20, 0x01, - 0xe8, 0x80, 0x00, 0x0e, 0xe5, 0x9f, 0xc0, 0x38, - 0xe5, 0x8c, 0xd0, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x20, 0x28, - 0xe5, 0x92, 0x20, 0x00, 0xe5, 0x91, 0x40, 0x2c, - 0xe5, 0x91, 0xc0, 0x34, 0xe1, 0x5c, 0x00, 0x02, - 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc0, 0x08, - 0xe5, 0x9c, 0xd0, 0x00, 0xe3, 0xa0, 0xb0, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x08, 0x23, 0x44, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe5, 0x9f, 0xc0, 0xe4, 0xe5, 0x9c, 0x00, 0x00, - 0xe3, 0x50, 0x00, 0x00, 0xe3, 0xa0, 0x00, 0x04, - 0x15, 0x8c, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x01, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe5, 0x9f, 0xc0, 0xcc, 0xea, 0xff, 0xfb, 0x87, - 0xe3, 0xa0, 0x10, 0x0a, 0xe3, 0x50, 0x01, 0x02, - 0x13, 0x50, 0x01, 0x06, 0x13, 0x50, 0x01, 0x16, - 0x03, 0xa0, 0x10, 0x03, 0xe3, 0x50, 0x01, 0x0a, - 0x13, 0x50, 0x01, 0x0e, 0x03, 0xa0, 0x10, 0x05, - 0xe5, 0x9f, 0x20, 0xa8, 0xe1, 0x50, 0x00, 0x02, - 0xe2, 0x82, 0x20, 0xff, 0x21, 0x52, 0x00, 0x00, - 0x23, 0xa0, 0x10, 0x02, 0xe3, 0x50, 0x01, 0x82, - 0x03, 0xa0, 0x10, 0x02, 0xe3, 0x50, 0x01, 0x86, - 0x03, 0xa0, 0x10, 0x07, 0xe5, 0x9f, 0x20, 0x88, - 0xe0, 0x50, 0x20, 0x02, 0x13, 0x52, 0x00, 0x01, - 0x03, 0xa0, 0x10, 0x05, 0xe1, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x02, 0xe1, 0xa0, 0x30, 0x00, - 0xeb, 0xff, 0xff, 0xe4, 0xe8, 0xbd, 0x40, 0x02, - 0xe5, 0x9f, 0xc0, 0x50, 0xe3, 0xa0, 0x20, 0x01, - 0xe5, 0xcc, 0x20, 0x00, 0xe9, 0x2d, 0x00, 0x0a, - 0xeb, 0xff, 0xff, 0xdc, 0xea, 0x00, 0x00, 0x09, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc0, 0x30, - 0xe3, 0xa0, 0x10, 0x00, 0xe5, 0x8c, 0x10, 0x00, - 0xe5, 0x9c, 0x00, 0x04, 0xe3, 0x50, 0x00, 0x00, - 0x01, 0x2f, 0xff, 0x1e, 0xe5, 0x8c, 0x10, 0x04, - 0xea, 0xff, 0xff, 0xd2, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0xa0, 0xc0, 0x0d, 0xe9, 0x2d, 0xd9, 0xf0, - 0xe2, 0x4c, 0xb0, 0x04, 0xe3, 0xa0, 0x10, 0x01, - 0xea, 0xff, 0xfb, 0xa4, 0x2e, 0x08, 0x21, 0x34, - 0x2e, 0x08, 0x21, 0x46, 0x2e, 0x02, 0x24, 0x85, - 0x80, 0x00, 0x02, 0x00, 0x80, 0x80, 0x0e, 0xa0, - 0xb5, 0xff, 0xa6, 0x23, 0xa5, 0x22, 0xa4, 0x22, - 0x68, 0x5a, 0x68, 0x1f, 0x4b, 0x21, 0x60, 0x5a, - 0x23, 0x00, 0x4a, 0x21, 0x70, 0x13, 0x70, 0x53, - 0x70, 0x93, 0x4a, 0x20, 0x2a, 0x00, 0xd0, 0x02, - 0x9a, 0x02, 0xf7, 0xff, 0xff, 0xfe, 0x48, 0x1e, - 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, - 0x48, 0x1c, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, - 0xff, 0xfe, 0x48, 0x1b, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xff, 0x06, 0x48, 0x19, 0x28, 0x00, - 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x48, 0x18, - 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, 0xfb, 0xf8, - 0x48, 0x16, 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, - 0xfd, 0x69, 0x48, 0x15, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xa0, - 0x48, 0x12, 0x28, 0x00, 0xd0, 0x04, 0x1c, 0x30, - 0x1c, 0x29, 0x1c, 0x22, 0xf0, 0x01, 0xff, 0x6e, - 0x2f, 0x00, 0xd0, 0x01, 0xf7, 0xfd, 0xfa, 0x5a, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x3a, 0x74, 0x74, 0x00, 0x2e, 0x08, 0x23, 0x48, - 0x2e, 0x08, 0x23, 0x48, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x0b, 0x1d, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x25, 0x15, 0x2e, 0x02, 0x28, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0x2c, 0x29, - 0xb5, 0x90, 0x28, 0x00, 0xd0, 0x04, 0x48, 0x12, - 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, - 0x4f, 0x10, 0x68, 0x78, 0x28, 0x00, 0xd0, 0x03, - 0xf7, 0xfd, 0xfa, 0x22, 0x20, 0x00, 0x60, 0x78, - 0x4f, 0x0d, 0x78, 0x78, 0x24, 0x01, 0x28, 0x00, - 0xd1, 0x05, 0x70, 0x7c, 0x48, 0x0b, 0x28, 0x00, - 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x78, 0xb8, - 0x28, 0x00, 0xd1, 0x05, 0x70, 0xbc, 0x48, 0x08, - 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, 0xff, 0x7a, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x23, 0x48, - 0x2e, 0x08, 0x23, 0x48, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x2c, 0xc9, 0xb5, 0x90, 0x1c, 0x0c, - 0x21, 0x01, 0x1c, 0x17, 0xf0, 0x01, 0xfb, 0x9c, - 0x21, 0x00, 0x1c, 0x20, 0xf0, 0x01, 0xfb, 0x98, - 0x21, 0x02, 0x1c, 0x38, 0xf0, 0x01, 0xfb, 0x94, - 0x20, 0x01, 0xf7, 0xfe, 0xfe, 0x95, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf1, 0x20, 0x00, - 0xb0, 0x89, 0x90, 0x06, 0x26, 0x00, 0x90, 0x05, - 0x20, 0x01, 0x90, 0x04, 0x27, 0x00, 0x20, 0x00, - 0x90, 0x03, 0x90, 0x02, 0x25, 0x00, 0x90, 0x01, - 0xf0, 0x01, 0xfc, 0xc2, 0x1c, 0x04, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x17, 0x49, 0xe3, 0x5d, 0xe0, - 0x5c, 0x08, 0x08, 0x40, 0xd3, 0x06, 0x37, 0x01, - 0x5d, 0xe0, 0x5c, 0x08, 0x08, 0x40, 0xd2, 0xfa, - 0xe0, 0x00, 0x37, 0x01, 0x5d, 0xe0, 0x5c, 0x0a, - 0x08, 0x52, 0xd2, 0x01, 0x28, 0x00, 0xd1, 0xf8, - 0x98, 0x04, 0x30, 0x01, 0x90, 0x04, 0x5d, 0xe0, - 0x28, 0x00, 0xd1, 0xe8, 0x98, 0x04, 0x00, 0x80, - 0xf0, 0x01, 0xfc, 0xde, 0x4b, 0xd6, 0x93, 0x08, - 0x60, 0x18, 0x1c, 0x78, 0xf0, 0x01, 0xfc, 0xd8, - 0x9b, 0x08, 0x60, 0x58, 0x48, 0xd3, 0x28, 0x00, - 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x21, 0x00, - 0x20, 0x00, 0x90, 0x04, 0x48, 0xd0, 0x90, 0x07, - 0x78, 0x27, 0x34, 0x01, 0x2e, 0x00, 0xd1, 0x58, - 0x2f, 0x22, 0xd0, 0x01, 0x2f, 0x27, 0xd1, 0x02, - 0x97, 0x05, 0x1c, 0x3e, 0xe0, 0x93, 0x98, 0x06, - 0x42, 0x81, 0xd1, 0x4e, 0x98, 0x03, 0x28, 0x00, - 0xd1, 0x4b, 0x25, 0x00, 0x43, 0xed, 0x1c, 0x2a, - 0x95, 0x01, 0x22, 0x00, 0xab, 0x00, 0x70, 0x1a, - 0x70, 0x5a, 0x1e, 0x60, 0x78, 0x02, 0x2a, 0x30, - 0xdb, 0x04, 0x2a, 0x39, 0xdc, 0x02, 0x30, 0x01, - 0x1f, 0xd5, 0x3d, 0x29, 0x78, 0x02, 0x2a, 0x3e, - 0xd0, 0x01, 0x2a, 0x3c, 0xd1, 0x35, 0x2a, 0x3e, - 0xd1, 0x0e, 0x22, 0x77, 0xab, 0x00, 0x70, 0x1a, - 0x2d, 0x00, 0xd0, 0x63, 0x2d, 0x02, 0xdc, 0x62, - 0x78, 0x42, 0x30, 0x01, 0x2a, 0x3e, 0xd1, 0x13, - 0x22, 0x61, 0x70, 0x1a, 0x30, 0x01, 0xe0, 0x0f, - 0x30, 0x01, 0x1c, 0x02, 0xe0, 0x02, 0x2b, 0x3e, - 0xd0, 0x56, 0x32, 0x01, 0x78, 0x13, 0x2b, 0x00, - 0xd0, 0x01, 0x2b, 0x20, 0xd1, 0xf7, 0x2d, 0x00, - 0xdc, 0x4d, 0x22, 0x72, 0xab, 0x00, 0x70, 0x1a, - 0x78, 0x02, 0x2a, 0x26, 0xd1, 0x24, 0x23, 0x01, - 0x42, 0xdd, 0xd0, 0x19, 0x2d, 0x00, 0xdd, 0x5e, - 0x78, 0x42, 0x30, 0x01, 0x2a, 0x30, 0xdb, 0x5b, - 0x2a, 0x32, 0xdc, 0x3c, 0x30, 0x01, 0x1c, 0x2b, - 0xd5, 0x04, 0x07, 0xdb, 0x0f, 0xdb, 0x42, 0x5b, - 0xe0, 0x02, 0xe0, 0x42, 0x07, 0xdb, 0x0f, 0xdb, - 0x33, 0x31, 0x42, 0x9a, 0xd1, 0x63, 0x22, 0x00, - 0xab, 0x00, 0x70, 0x1a, 0x95, 0x01, 0xe0, 0x11, - 0x22, 0x02, 0x92, 0x01, 0xaa, 0x00, 0x78, 0x12, - 0x30, 0x01, 0x2a, 0x72, 0xd0, 0x09, 0xe0, 0x06, - 0x23, 0x01, 0x42, 0xdd, 0xd1, 0x06, 0xaa, 0x00, - 0x78, 0x12, 0x2a, 0x72, 0xd0, 0x01, 0x25, 0x01, - 0xe0, 0x00, 0x25, 0x00, 0xaa, 0x00, 0x78, 0x12, - 0x2a, 0x00, 0xd0, 0x16, 0x22, 0x01, 0x92, 0x03, - 0x4a, 0x8c, 0x78, 0x03, 0x5c, 0xd3, 0x08, 0x5b, - 0xd3, 0x04, 0x78, 0x43, 0x5c, 0xd3, 0x30, 0x01, - 0x08, 0x5b, 0xd2, 0xfa, 0x78, 0x02, 0x2a, 0x22, - 0xd0, 0x01, 0x2a, 0x27, 0xd1, 0x0c, 0x30, 0x01, - 0x1c, 0x16, 0xe0, 0x09, 0xe0, 0x6a, 0xe0, 0xfb, - 0xe0, 0x23, 0x78, 0x02, 0x2a, 0x00, 0xd0, 0x03, - 0x4b, 0x80, 0x5c, 0x9a, 0x08, 0x52, 0xd3, 0x61, - 0x22, 0x01, 0x92, 0x02, 0x1c, 0x04, 0x78, 0x27, - 0x34, 0x01, 0x2e, 0x00, 0xd0, 0x15, 0x2f, 0x5c, - 0xd1, 0x0b, 0x78, 0x20, 0x28, 0x22, 0xd0, 0x03, - 0x28, 0x5c, 0xd0, 0x01, 0x28, 0x27, 0xd1, 0x04, - 0x34, 0x01, 0x1c, 0x07, 0xe0, 0x09, 0xe0, 0xdf, - 0xe0, 0xde, 0x1c, 0x30, 0x42, 0xb7, 0xd1, 0x04, - 0x40, 0x7e, 0x78, 0x27, 0x34, 0x01, 0x42, 0x87, - 0xd0, 0xfa, 0x2f, 0x00, 0xd0, 0x0c, 0x2e, 0x00, - 0xd1, 0x03, 0x48, 0x6e, 0x5d, 0xc0, 0x08, 0x40, - 0xd2, 0x06, 0x1c, 0x08, 0x9b, 0x08, 0x68, 0x5a, - 0x54, 0x17, 0x31, 0x01, 0xe0, 0x97, 0xe0, 0xc7, - 0x98, 0x06, 0x42, 0x81, 0xd1, 0x08, 0x98, 0x05, - 0x28, 0x00, 0xd1, 0x05, 0x98, 0x02, 0x28, 0x00, - 0xd0, 0x74, 0x98, 0x03, 0x28, 0x00, 0xd1, 0x72, - 0x22, 0x00, 0x1c, 0x08, 0x9b, 0x08, 0x68, 0x5b, - 0x54, 0x1a, 0x98, 0x02, 0x31, 0x01, 0x28, 0x00, - 0xd0, 0x6a, 0x98, 0x03, 0x28, 0x00, 0xd0, 0x13, - 0x01, 0xa8, 0x99, 0x07, 0x18, 0x42, 0x9b, 0x08, - 0x68, 0x58, 0x99, 0x06, 0x18, 0x40, 0x46, 0x69, - 0xf0, 0x01, 0xfd, 0x3a, 0x28, 0x00, 0xd1, 0x07, - 0x9b, 0x08, 0x68, 0x58, 0x99, 0x06, 0x18, 0x41, - 0xa2, 0x58, 0xa0, 0x5e, 0xf7, 0xff, 0xfe, 0xb6, - 0x23, 0x01, 0x98, 0x01, 0x42, 0xd8, 0xdd, 0x51, - 0x98, 0x01, 0x28, 0x00, 0xda, 0x03, 0x40, 0x18, - 0x42, 0x40, 0xe0, 0x02, 0xe0, 0x90, 0x07, 0xc0, - 0x0f, 0xc0, 0x1c, 0x41, 0x98, 0x01, 0xf0, 0x01, - 0xfe, 0x29, 0x01, 0x80, 0x99, 0x07, 0x18, 0x40, - 0xf0, 0x01, 0xfa, 0xdc, 0x28, 0x00, 0xd1, 0x3d, - 0xb0, 0x82, 0x98, 0x03, 0x01, 0x80, 0x99, 0x09, - 0x18, 0x40, 0x90, 0x01, 0x9a, 0x03, 0x2a, 0x00, - 0xda, 0x03, 0x07, 0xd2, 0x0f, 0xd2, 0x42, 0x52, - 0xe0, 0x01, 0x07, 0xd2, 0x0f, 0xd2, 0x01, 0x90, - 0x99, 0x09, 0x18, 0x40, 0x30, 0x40, 0x90, 0x00, - 0x20, 0xff, 0x30, 0x01, 0xf0, 0x01, 0xfb, 0xa8, - 0x1c, 0x01, 0x23, 0xff, 0x22, 0x01, 0x02, 0x52, - 0x98, 0x01, 0x33, 0x01, 0xf0, 0x01, 0xfe, 0x1e, - 0x98, 0x01, 0x68, 0xc0, 0x23, 0x01, 0x02, 0xdb, - 0x43, 0x18, 0x99, 0x01, 0x60, 0xc8, 0x08, 0xd8, - 0xf0, 0x01, 0xfb, 0x96, 0x1c, 0x01, 0x23, 0xff, - 0x22, 0x01, 0x02, 0x52, 0x98, 0x00, 0x33, 0x01, - 0xf0, 0x01, 0xfe, 0x0c, 0x98, 0x00, 0x68, 0xc0, - 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, 0x99, 0x00, - 0x60, 0xc8, 0xe0, 0x02, 0xe0, 0x13, 0xe0, 0x12, - 0xe0, 0x05, 0xb0, 0x02, 0x20, 0x00, 0x90, 0x02, - 0x90, 0x03, 0x99, 0x06, 0xe0, 0x0b, 0x9b, 0x08, - 0x68, 0x58, 0x9a, 0x06, 0x18, 0x82, 0x98, 0x04, - 0x1c, 0x43, 0x93, 0x04, 0x00, 0x80, 0x9b, 0x08, - 0x68, 0x1b, 0x50, 0x1a, 0x91, 0x06, 0x2f, 0x00, - 0xd0, 0x01, 0x26, 0x00, 0x96, 0x05, 0x2f, 0x00, - 0xd0, 0x00, 0xe6, 0x9d, 0x2e, 0x00, 0xd0, 0x0a, - 0xb0, 0x81, 0xab, 0x00, 0x70, 0x1e, 0x22, 0x00, - 0x70, 0x5a, 0x46, 0x69, 0xa2, 0x24, 0xa0, 0x25, - 0xf7, 0xff, 0xfe, 0x3c, 0xb0, 0x01, 0x22, 0x00, - 0x98, 0x04, 0x00, 0x80, 0x9b, 0x08, 0x68, 0x19, - 0x50, 0x0a, 0x98, 0x04, 0x28, 0x00, 0xdd, 0x0f, - 0x9b, 0x08, 0x68, 0x18, 0x68, 0x01, 0x68, 0x09, - 0x4b, 0x21, 0x40, 0x19, 0xa2, 0x21, 0x68, 0x12, - 0x42, 0x91, 0xd1, 0x05, 0x9b, 0x04, 0x3b, 0x01, - 0x93, 0x04, 0x30, 0x04, 0x9b, 0x08, 0x60, 0x18, - 0x9a, 0x09, 0x9b, 0x08, 0x68, 0x19, 0x98, 0x04, - 0xf7, 0xfe, 0xfc, 0x47, 0xf7, 0xfe, 0xfc, 0xc0, - 0x1e, 0x61, 0xa2, 0x19, 0xa0, 0x19, 0xf7, 0xff, - 0xfe, 0x15, 0xb0, 0x09, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x22, 0x44, - 0x2e, 0x08, 0x23, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x48, 0x27, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x72, 0x65, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x0a, 0x00, 0x00, 0x63, 0x61, 0x6e, 0x27, - 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6c, 0x6f, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xdf, 0xdf, 0xdf, 0xdf, 0x52, 0x55, 0x4e, 0x00, - 0x27, 0x0a, 0x00, 0x00, 0x75, 0x6e, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, - 0x6f, 0x72, 0x20, 0x69, 0x6c, 0x6c, 0x65, 0x67, - 0x61, 0x6c, 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x72, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x20, 0x01, - 0xea, 0x00, 0x00, 0x01, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x20, 0x02, 0xe2, 0x00, 0x31, 0x02, - 0xe5, 0x9f, 0x00, 0x18, 0xe5, 0x80, 0x20, 0x00, - 0xe3, 0x31, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x00, - 0x15, 0x9f, 0x00, 0x0c, 0x18, 0x90, 0x00, 0x03, - 0xe1, 0x80, 0x00, 0x03, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x08, 0x21, 0x30, 0x2e, 0x08, 0x21, 0x3c, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x88, 0x30, 0x09, 0xe2, 0x43, 0x3c, 0x3f, - 0xe2, 0x43, 0x30, 0xfe, 0xe3, 0x32, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x5d, 0xe3, 0x35, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x3d, 0xe9, 0x2d, 0x48, 0x81, - 0xe1, 0xa0, 0x08, 0x21, 0xe1, 0xc1, 0x78, 0x00, - 0xe1, 0xa0, 0x68, 0x24, 0xe1, 0xc4, 0x88, 0x06, - 0xe0, 0x09, 0x06, 0x90, 0xe0, 0x06, 0x06, 0x97, - 0xe0, 0x07, 0x07, 0x98, 0xe0, 0x97, 0x78, 0x06, - 0xe0, 0xa9, 0x98, 0x26, 0xe0, 0x08, 0x08, 0x90, - 0xe0, 0x97, 0x78, 0x08, 0xe0, 0xa9, 0x08, 0x28, - 0xe1, 0xa0, 0xb8, 0x22, 0xe1, 0xc2, 0xe8, 0x0b, - 0xe1, 0xa0, 0x68, 0x25, 0xe1, 0xc5, 0x88, 0x06, - 0xe0, 0x09, 0x06, 0x9b, 0xe0, 0x06, 0x06, 0x9e, - 0xe0, 0x0e, 0x0e, 0x98, 0xe0, 0x9e, 0xe8, 0x06, - 0xe0, 0xa9, 0x98, 0x26, 0xe0, 0x08, 0x08, 0x9b, - 0xe0, 0x9e, 0xe8, 0x08, 0xe0, 0xa9, 0xb8, 0x28, - 0xe0, 0x97, 0x70, 0x0b, 0xe2, 0xa0, 0x00, 0x00, - 0xe0, 0x97, 0xb0, 0x0e, 0xe0, 0xb7, 0x70, 0x00, - 0xe2, 0xa0, 0x00, 0x00, 0xe0, 0x51, 0x80, 0x02, - 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x60, 0x00, - 0x31, 0xe0, 0x10, 0x01, 0x30, 0x44, 0x60, 0x05, - 0x10, 0x55, 0x90, 0x04, 0x03, 0xa0, 0x10, 0x00, - 0x31, 0xe0, 0x10, 0x01, 0x30, 0x46, 0x60, 0x08, - 0xe1, 0xa0, 0x48, 0x28, 0xe1, 0xc8, 0x58, 0x04, - 0xe1, 0xa0, 0x88, 0x29, 0xe1, 0xc9, 0x98, 0x08, - 0xe0, 0x22, 0x68, 0x94, 0xe0, 0x08, 0x08, 0x95, - 0xe0, 0x06, 0x05, 0x99, 0xe0, 0x96, 0x68, 0x08, - 0xe0, 0xa2, 0x28, 0x28, 0xe0, 0x09, 0x09, 0x94, - 0xe0, 0x96, 0x68, 0x09, 0xe0, 0xa2, 0x28, 0x29, - 0xe0, 0x9b, 0x60, 0x06, 0xe0, 0xb7, 0x20, 0x02, - 0xe0, 0xb0, 0x10, 0x01, 0xe1, 0x8e, 0xe1, 0x0e, - 0xe1, 0x86, 0x61, 0x2e, 0x48, 0xbd, 0x88, 0x81, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe8, 0xbd, 0x88, 0x81, 0xe1, 0xa0, 0x58, 0x24, - 0xe1, 0xc4, 0x68, 0x05, 0xe1, 0xa0, 0x88, 0x21, - 0xe1, 0xc1, 0x98, 0x08, 0xe0, 0x04, 0x08, 0x95, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x01, 0x06, 0x99, - 0xe0, 0x91, 0x18, 0x08, 0xe0, 0xa4, 0x48, 0x28, - 0xe0, 0x09, 0x09, 0x95, 0xe0, 0x91, 0x18, 0x09, - 0xe0, 0xa4, 0x48, 0x29, 0xe1, 0xa0, 0x88, 0x22, - 0xe1, 0xc2, 0x98, 0x08, 0xe0, 0x02, 0x08, 0x95, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x06, 0x06, 0x99, - 0xe0, 0x96, 0x68, 0x08, 0xe0, 0xa2, 0x28, 0x28, - 0xe0, 0x09, 0x09, 0x95, 0xe0, 0x96, 0x68, 0x09, - 0xe0, 0xa2, 0x58, 0x29, 0xe0, 0x95, 0x20, 0x01, - 0xe2, 0xb4, 0x10, 0x00, 0x41, 0xa0, 0xf0, 0x0e, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x35, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x24, 0xe1, 0xa0, 0x28, 0x21, - 0xe1, 0xc1, 0x68, 0x02, 0xe1, 0xa0, 0x88, 0x24, - 0xe1, 0xc4, 0x98, 0x08, 0xe0, 0x01, 0x08, 0x92, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x04, 0x06, 0x99, - 0xe0, 0x94, 0x48, 0x08, 0xe0, 0xa1, 0x18, 0x28, - 0xe0, 0x09, 0x09, 0x92, 0xe0, 0x94, 0x48, 0x09, - 0xe0, 0xa1, 0x18, 0x29, 0xe1, 0xa0, 0x88, 0x25, - 0xe1, 0xc5, 0x98, 0x08, 0xe0, 0x05, 0x08, 0x92, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x06, 0x06, 0x99, - 0xe0, 0x96, 0x68, 0x08, 0xe0, 0xa5, 0x58, 0x28, - 0xe0, 0x09, 0x09, 0x92, 0xe0, 0x96, 0x68, 0x09, - 0xe0, 0xa5, 0x28, 0x29, 0xe0, 0x92, 0x20, 0x04, - 0xe2, 0xb1, 0x10, 0x00, 0x41, 0xa0, 0xf0, 0x0e, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0xc0, 0x81, 0x03, - 0xe3, 0xc3, 0x91, 0x03, 0xe0, 0x20, 0x00, 0x03, - 0xe2, 0x00, 0x01, 0x02, 0xe0, 0x88, 0x30, 0x09, - 0xe2, 0x43, 0x3c, 0x3f, 0xe2, 0x43, 0x30, 0xfe, - 0xe1, 0xa0, 0x58, 0x24, 0xe1, 0xc4, 0x68, 0x05, - 0xe1, 0xa0, 0x88, 0x21, 0xe1, 0xc1, 0x98, 0x08, - 0xe0, 0x01, 0x08, 0x95, 0xe0, 0x08, 0x08, 0x96, - 0xe0, 0x02, 0x06, 0x99, 0xe0, 0x92, 0x28, 0x08, - 0xe0, 0xa1, 0x18, 0x28, 0xe0, 0x09, 0x09, 0x95, - 0xe0, 0x92, 0x28, 0x09, 0xe0, 0xb1, 0x18, 0x29, - 0xe3, 0xa0, 0x60, 0x00, 0x41, 0xa0, 0xf0, 0x0e, - 0xe0, 0x92, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, - 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, - 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, - 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, - 0x4a, 0x00, 0x00, 0x1f, 0xe3, 0x19, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x2f, 0xe1, 0x91, 0x80, 0x02, - 0x11, 0x94, 0x80, 0x05, 0x0a, 0x00, 0x00, 0x13, - 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, - 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, - 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x88, 0x30, 0x09, 0xe2, 0x43, 0x3c, 0x3f, - 0xe2, 0x43, 0x30, 0xfe, 0xe9, 0x2d, 0x40, 0x00, - 0xe3, 0x11, 0x01, 0x02, 0x0b, 0x00, 0x06, 0x7c, - 0xe3, 0x14, 0x01, 0x02, 0x0b, 0x00, 0x06, 0x93, - 0xe8, 0xbd, 0x40, 0x00, 0xea, 0xff, 0xff, 0x44, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0xa0, 0x60, 0x00, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x19, 0x01, 0x02, - 0x0a, 0x00, 0x00, 0x09, 0xe1, 0x82, 0x80, 0x81, - 0xe1, 0x88, 0x80, 0x05, 0xe1, 0x98, 0x80, 0x84, - 0x1a, 0x00, 0x06, 0xbc, 0xe0, 0x20, 0x80, 0x03, - 0xe2, 0x08, 0x81, 0x02, 0xe2, 0x8f, 0x00, 0x44, - 0xe8, 0x90, 0x00, 0x07, 0xe1, 0x80, 0x00, 0x08, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x92, 0x80, 0x81, - 0x1a, 0x00, 0x06, 0xc5, 0xe1, 0x94, 0x80, 0x05, - 0x1a, 0xff, 0xff, 0xf5, 0xe3, 0x80, 0x04, 0x61, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x95, 0x80, 0x84, - 0x1a, 0x00, 0x06, 0xb6, 0xe1, 0x91, 0x80, 0x02, - 0x1a, 0xff, 0xff, 0xef, 0xe3, 0x80, 0x04, 0x61, - 0xe1, 0xa0, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe5, 0x9f, 0x20, 0x6c, 0xe5, 0x92, 0x10, 0x00, - 0xe1, 0xa0, 0xc1, 0x83, 0xe1, 0xa0, 0xcd, 0xac, - 0xe1, 0x81, 0x10, 0x0c, 0xe5, 0x82, 0x10, 0x00, - 0xe3, 0x13, 0x03, 0x01, 0x1a, 0x00, 0x00, 0x05, - 0xe3, 0x13, 0x04, 0x02, 0x1a, 0x00, 0x00, 0x07, - 0xe3, 0x11, 0x08, 0x01, 0x0a, 0x00, 0x00, 0x44, - 0xe2, 0x8f, 0x00, 0x54, 0xea, 0x00, 0x00, 0x06, - 0xe3, 0x11, 0x07, 0x01, 0x0a, 0x00, 0x00, 0x34, - 0xe2, 0x8f, 0x00, 0x74, 0xea, 0x00, 0x00, 0x02, - 0xe3, 0x11, 0x08, 0x02, 0x0a, 0x00, 0x00, 0x30, - 0xe2, 0x8f, 0x00, 0x8c, 0xe5, 0x9f, 0x10, 0x1c, - 0xe2, 0x4e, 0xe0, 0x04, 0xe5, 0x81, 0xe0, 0x3c, - 0xe3, 0xa0, 0xec, 0xde, 0xe3, 0x8e, 0xe0, 0xad, - 0xe1, 0x8e, 0xe8, 0x0e, 0xe8, 0x81, 0x7f, 0xff, - 0xea, 0x00, 0x00, 0x01, 0x2e, 0x08, 0x23, 0x5c, - 0x2e, 0x08, 0x23, 0x60, 0xe5, 0x9f, 0xc1, 0x2c, - 0xe3, 0x5c, 0x00, 0x00, 0x11, 0x2f, 0xff, 0x1c, - 0xe6, 0x00, 0x00, 0x10, 0x80, 0x00, 0x02, 0x00, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x00, 0x80, 0x00, 0x02, 0x01, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, - 0x6f, 0x77, 0x00, 0x00, 0x80, 0x00, 0x02, 0x02, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x42, 0x79, 0x20, 0x5a, 0x65, 0x72, 0x6f, - 0x00, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x21, 0x02, - 0xe3, 0x13, 0x07, 0x0f, 0x1a, 0x00, 0x00, 0x13, - 0xe3, 0x13, 0x05, 0x02, 0x12, 0x8f, 0x00, 0x0c, - 0x18, 0x90, 0x00, 0x03, 0x05, 0x9f, 0x00, 0x0c, - 0xe1, 0x80, 0x00, 0x02, 0xe1, 0x2f, 0xff, 0x1e, - 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0xe3, 0x13, 0x07, 0x0f, - 0x12, 0x00, 0x21, 0x02, 0x1a, 0x00, 0x00, 0x07, - 0xe3, 0x13, 0x05, 0x02, 0x12, 0x8f, 0x00, 0x08, - 0x18, 0x90, 0x00, 0x03, 0x05, 0x9f, 0x00, 0x08, - 0xe1, 0x2f, 0xff, 0x1e, 0x7f, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, - 0xe3, 0x13, 0x07, 0x02, 0x13, 0xa0, 0x00, 0x00, - 0x13, 0xa0, 0x10, 0x00, 0x11, 0x2f, 0xff, 0x1e, - 0xe3, 0x13, 0x07, 0x01, 0x13, 0xe0, 0x00, 0x00, - 0x13, 0xe0, 0x10, 0x00, 0x11, 0x2f, 0xff, 0x1e, - 0xe3, 0x13, 0x06, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0x13, 0xa0, 0x11, 0x02, 0x03, 0xa0, 0x01, 0x02, - 0xe3, 0x32, 0x01, 0x02, 0x11, 0xe0, 0x00, 0x00, - 0x11, 0xe0, 0x10, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x01, 0xfb, 0xe5, 0xe3, 0x10, 0x02, 0x06, - 0x1a, 0x00, 0x00, 0x0d, 0xe1, 0xb0, 0x80, 0x86, - 0x0a, 0x00, 0x00, 0x0d, 0x22, 0x92, 0x20, 0x01, - 0x22, 0x91, 0x10, 0x01, 0x23, 0xa0, 0x11, 0x02, - 0xe2, 0xb3, 0x30, 0x00, 0x4a, 0x00, 0x00, 0x0a, - 0xe2, 0x83, 0xc0, 0x01, 0xe3, 0xcc, 0xc1, 0x01, - 0xe3, 0x5c, 0x09, 0x02, 0xc3, 0xa0, 0x33, 0x19, - 0xe2, 0x00, 0x01, 0x02, 0xe1, 0x83, 0x00, 0x00, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0xa0, 0x30, 0x00, - 0xe1, 0xa0, 0xf0, 0x0e, 0x21, 0xb0, 0x80, 0xa2, - 0xea, 0xff, 0xff, 0xef, 0xe3, 0x11, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x04, 0xe3, 0xa0, 0x10, 0x00, - 0xe3, 0xa0, 0x20, 0x00, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xb0, 0xc8, 0x21, 0x01, 0xa0, 0xc8, 0x22, - 0x01, 0x8c, 0x18, 0x01, 0x02, 0x83, 0x30, 0x10, - 0xe1, 0xb0, 0xcc, 0x21, 0x01, 0xa0, 0xcc, 0x22, - 0x01, 0x8c, 0x14, 0x01, 0x02, 0x83, 0x30, 0x08, - 0xe1, 0xb0, 0xce, 0x21, 0x01, 0xa0, 0xce, 0x22, - 0x01, 0x8c, 0x12, 0x01, 0x02, 0x83, 0x30, 0x04, - 0xe1, 0xb0, 0xcf, 0x21, 0x01, 0xa0, 0xcf, 0x22, - 0x01, 0x8c, 0x11, 0x01, 0x02, 0x83, 0x30, 0x02, - 0xe1, 0xb0, 0xcf, 0xa1, 0x01, 0xa0, 0xcf, 0xa2, - 0x01, 0x8c, 0x10, 0x81, 0x02, 0x83, 0x30, 0x01, - 0xe1, 0xb0, 0x30, 0x03, 0x4a, 0xff, 0xff, 0xe4, - 0x5a, 0xff, 0xff, 0xda, 0xe3, 0x11, 0x01, 0x02, - 0x01, 0xa0, 0xf0, 0x0e, 0xe9, 0x2d, 0x40, 0x08, - 0xe3, 0xd1, 0x11, 0x02, 0x0a, 0x00, 0x00, 0x15, - 0xe1, 0xb0, 0x38, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x21, 0x01, 0xa0, 0x14, 0x01, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x21, - 0x01, 0xa0, 0x12, 0x01, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x21, 0x01, 0xa0, 0x11, 0x01, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa1, - 0x01, 0xa0, 0x10, 0x81, 0x02, 0x8c, 0xc0, 0x01, - 0xe2, 0x6c, 0x30, 0x20, 0xe1, 0x81, 0x13, 0x32, - 0xe1, 0xa0, 0x2c, 0x12, 0xe0, 0x40, 0x00, 0x0c, - 0xe2, 0x80, 0x00, 0x01, 0xe8, 0xbd, 0x80, 0x08, - 0xe1, 0xb0, 0x38, 0x22, 0x01, 0xa0, 0x28, 0x02, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x22, 0x01, 0xa0, 0x24, 0x02, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x22, - 0x01, 0xa0, 0x22, 0x02, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x22, 0x01, 0xa0, 0x21, 0x02, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa2, - 0x01, 0xa0, 0x20, 0x82, 0x02, 0x8c, 0xc0, 0x01, - 0xe1, 0xa0, 0x10, 0x02, 0xe3, 0xa0, 0x20, 0x00, - 0xe2, 0x40, 0x00, 0x1f, 0xe0, 0x40, 0x00, 0x0c, - 0xe8, 0xbd, 0x80, 0x08, 0xe3, 0x14, 0x01, 0x02, - 0x01, 0xa0, 0xf0, 0x0e, 0xe9, 0x2d, 0x40, 0x01, - 0xe3, 0xd4, 0x41, 0x02, 0x0a, 0x00, 0x00, 0x15, - 0xe1, 0xb0, 0x08, 0x24, 0x01, 0xa0, 0x48, 0x04, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x0c, 0x24, 0x01, 0xa0, 0x44, 0x04, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x0e, 0x24, - 0x01, 0xa0, 0x42, 0x04, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x0f, 0x24, 0x01, 0xa0, 0x41, 0x04, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x0f, 0xa4, - 0x01, 0xa0, 0x40, 0x84, 0x02, 0x8c, 0xc0, 0x01, - 0xe2, 0x6c, 0x00, 0x20, 0xe1, 0x84, 0x40, 0x35, - 0xe1, 0xa0, 0x5c, 0x15, 0xe0, 0x43, 0x30, 0x0c, - 0xe2, 0x83, 0x30, 0x01, 0xe8, 0xbd, 0x80, 0x01, - 0xe1, 0xb0, 0x08, 0x25, 0x01, 0xa0, 0x58, 0x05, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x0c, 0x25, 0x01, 0xa0, 0x54, 0x05, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x0e, 0x25, - 0x01, 0xa0, 0x52, 0x05, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x0f, 0x25, 0x01, 0xa0, 0x51, 0x05, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x0f, 0xa5, - 0x01, 0xa0, 0x50, 0x85, 0x02, 0x8c, 0xc0, 0x01, - 0xe1, 0xa0, 0x40, 0x05, 0xe3, 0xa0, 0x50, 0x00, - 0xe2, 0x43, 0x30, 0x1f, 0xe0, 0x43, 0x30, 0x0c, - 0xe8, 0xbd, 0x80, 0x01, 0xe1, 0xa0, 0x80, 0x00, - 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x30, 0x08, - 0xe1, 0xa0, 0x80, 0x01, 0xe1, 0xa0, 0x10, 0x04, - 0xe1, 0xa0, 0x40, 0x08, 0xe1, 0xa0, 0x80, 0x02, - 0xe1, 0xa0, 0x20, 0x05, 0xe1, 0xa0, 0x50, 0x08, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x49, 0x30, 0x08, 0xe2, 0x83, 0x3c, 0x3f, - 0xe2, 0x83, 0x30, 0xff, 0xe9, 0x2d, 0x48, 0x89, - 0xe1, 0xa0, 0x08, 0x21, 0xe1, 0xc1, 0x78, 0x00, - 0xe1, 0xa0, 0xb8, 0x22, 0xe1, 0xc2, 0xe8, 0x0b, - 0xe2, 0x8f, 0x6e, 0x36, 0xe7, 0xd6, 0x64, 0x20, - 0xe0, 0x28, 0x66, 0x90, 0xe2, 0x68, 0x85, 0x02, - 0xe0, 0x06, 0x06, 0x98, 0xe1, 0xa0, 0x69, 0xa6, - 0xe2, 0x86, 0x60, 0x02, 0xe1, 0xa0, 0x86, 0xa1, - 0xe0, 0x29, 0x66, 0x98, 0xe2, 0x69, 0x92, 0x02, - 0xe1, 0xa0, 0x88, 0x29, 0xe1, 0xc9, 0x98, 0x08, - 0xe0, 0x02, 0x06, 0x99, 0xe0, 0x01, 0x06, 0x98, - 0xe0, 0x81, 0x68, 0x22, 0xe1, 0xa0, 0x63, 0x26, - 0xe1, 0xb0, 0x40, 0xa4, 0xe1, 0xb0, 0x50, 0x65, - 0x33, 0xa0, 0x30, 0x00, 0x23, 0xa0, 0x31, 0x02, - 0xe1, 0xa0, 0x87, 0xa4, 0xe0, 0x09, 0x08, 0x96, - 0xe1, 0xa0, 0x98, 0x29, 0xe0, 0x08, 0x0b, 0x99, - 0xe0, 0x55, 0x50, 0x08, 0xe0, 0x08, 0x09, 0x90, - 0xe0, 0xc4, 0x40, 0x08, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x38, 0x08, 0xe0, 0xd5, 0x58, 0x28, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x58, 0x08, - 0x20, 0x55, 0x58, 0x08, 0xe0, 0xc4, 0x48, 0x28, - 0xe1, 0xa0, 0x18, 0x09, 0xe1, 0xa0, 0x81, 0x24, - 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, - 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x53, 0x39, 0x88, - 0xe0, 0xd5, 0x56, 0xa8, 0xe0, 0x08, 0x09, 0x90, - 0x30, 0x45, 0x59, 0x88, 0x20, 0x55, 0x59, 0x88, - 0xe0, 0xc4, 0x46, 0xa8, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x31, 0x88, 0xe0, 0xd5, 0x5e, 0xa8, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x51, 0x88, - 0x20, 0x55, 0x51, 0x88, 0xe0, 0xc4, 0x4e, 0xa8, - 0xe1, 0xa0, 0x4d, 0x04, 0xe1, 0x84, 0x43, 0x25, - 0xe1, 0xa0, 0x5d, 0x05, 0xe1, 0x85, 0x53, 0x23, - 0xe1, 0xa0, 0x3d, 0x03, 0xe0, 0x81, 0x11, 0x89, - 0xe5, 0x9d, 0x80, 0x0c, 0xe3, 0x18, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x94, 0xe1, 0xa0, 0x87, 0xa4, - 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, - 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x55, 0x50, 0x08, - 0xe0, 0x08, 0x09, 0x90, 0xe0, 0xc4, 0x40, 0x08, - 0xe0, 0x08, 0x0e, 0x99, 0xe0, 0x53, 0x38, 0x08, - 0xe0, 0xd5, 0x58, 0x28, 0xe0, 0x08, 0x07, 0x99, - 0x30, 0x45, 0x58, 0x08, 0x20, 0x55, 0x58, 0x08, - 0xe0, 0xc4, 0x48, 0x28, 0xe1, 0xa0, 0x2b, 0x09, - 0xe0, 0x81, 0x15, 0x29, 0xe1, 0xa0, 0x81, 0x24, - 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, - 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x53, 0x39, 0x88, - 0xe0, 0xd5, 0x56, 0xa8, 0xe0, 0x08, 0x09, 0x90, - 0x30, 0x45, 0x59, 0x88, 0x20, 0x55, 0x59, 0x88, - 0xe0, 0xc4, 0x46, 0xa8, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x31, 0x88, 0xe0, 0xd5, 0x5e, 0xa8, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x51, 0x88, - 0x20, 0x55, 0x51, 0x88, 0xe0, 0xc4, 0x4e, 0xa8, - 0xe1, 0xa0, 0x4d, 0x04, 0xe1, 0x84, 0x43, 0x25, - 0xe1, 0xa0, 0x5d, 0x05, 0xe1, 0x85, 0x53, 0x23, - 0xe1, 0xa0, 0x3d, 0x03, 0xe0, 0x92, 0x24, 0x89, - 0xe2, 0xa1, 0x10, 0x00, 0xe5, 0x9d, 0x80, 0x0c, - 0xe3, 0x18, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x3f, - 0xe1, 0xa0, 0x87, 0xa4, 0xe0, 0x09, 0x08, 0x96, - 0xe1, 0xa0, 0x98, 0x29, 0xe0, 0x08, 0x0b, 0x99, - 0xe0, 0x55, 0x50, 0x08, 0xe0, 0x08, 0x09, 0x90, - 0xe0, 0xc4, 0x40, 0x08, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x38, 0x08, 0xe0, 0xd5, 0x58, 0x28, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x58, 0x08, - 0x20, 0x55, 0x58, 0x08, 0xe0, 0xc4, 0x48, 0x28, - 0xe1, 0xa0, 0x47, 0x04, 0xe1, 0x84, 0x49, 0x25, - 0xe1, 0xa0, 0x57, 0x05, 0xe1, 0x85, 0x59, 0x23, - 0xe1, 0xa0, 0x37, 0x03, 0xe1, 0xa0, 0x6e, 0x09, - 0xe0, 0x92, 0x22, 0x29, 0xe2, 0xa1, 0x10, 0x00, - 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, - 0xe3, 0xa0, 0xe0, 0x00, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, - 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, - 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0xe0, 0xae, 0xe0, 0x0e, 0xe3, 0xa0, 0xb0, 0x00, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, - 0xe1, 0x94, 0x80, 0x05, 0x13, 0x86, 0x60, 0x01, - 0xe0, 0x96, 0x6e, 0x0e, 0xe2, 0xb2, 0x20, 0x00, - 0xe2, 0xb1, 0x10, 0x00, 0x48, 0xbd, 0x88, 0x89, - 0xe8, 0xbd, 0x48, 0x89, 0xe0, 0x96, 0x60, 0x06, - 0xe0, 0xb2, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, - 0xe3, 0xa0, 0xe0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xa4, 0x40, 0x04, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0xe0, 0xae, 0xe0, 0x0e, 0xe3, 0xa0, 0xb0, 0x00, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, - 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, - 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0xe0, 0xae, 0xe0, 0x0e, 0xe1, 0x84, 0x60, 0x05, - 0xe0, 0x92, 0x24, 0x8e, 0xe2, 0xb1, 0x10, 0x00, - 0x48, 0xbd, 0x88, 0x89, 0xe8, 0xbd, 0x48, 0x89, - 0xe0, 0x92, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xa4, 0x40, 0x04, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0x22, 0x81, 0x10, 0x20, - 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, - 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0x22, 0x81, 0x10, 0x10, 0xe3, 0xa0, 0xb0, 0x00, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0x22, 0x81, 0x10, 0x08, - 0xe1, 0x84, 0x60, 0x05, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0x31, 0x00, 0x00, 0x48, 0xbd, 0x88, 0x89, - 0xe8, 0xbd, 0x48, 0x89, 0xe1, 0xa0, 0x10, 0x81, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, - 0x79, 0x78, 0x77, 0x76, 0x76, 0x75, 0x74, 0x73, - 0x72, 0x71, 0x71, 0x70, 0x6f, 0x6e, 0x6e, 0x6d, - 0x6c, 0x6c, 0x6b, 0x6a, 0x6a, 0x69, 0x68, 0x68, - 0x67, 0x66, 0x66, 0x65, 0x64, 0x64, 0x63, 0x63, - 0x62, 0x61, 0x61, 0x60, 0x60, 0x5f, 0x5f, 0x5e, - 0x5e, 0x5d, 0x5d, 0x5c, 0x5c, 0x5b, 0x5b, 0x5a, - 0x5a, 0x59, 0x59, 0x58, 0x58, 0x57, 0x57, 0x56, - 0x56, 0x55, 0x55, 0x55, 0x54, 0x54, 0x53, 0x53, - 0x52, 0x52, 0x52, 0x51, 0x51, 0x50, 0x50, 0x50, - 0x4f, 0x4f, 0x4f, 0x4e, 0x4e, 0x4d, 0x4d, 0x4d, - 0x4c, 0x4c, 0x4c, 0x4b, 0x4b, 0x4b, 0x4a, 0x4a, - 0x4a, 0x49, 0x49, 0x49, 0x48, 0x48, 0x48, 0x47, - 0x47, 0x47, 0x47, 0x46, 0x46, 0x46, 0x45, 0x45, - 0x45, 0x44, 0x44, 0x44, 0x44, 0x43, 0x43, 0x43, - 0x43, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, - 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, - 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, - 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, - 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, - 0x4a, 0x00, 0x00, 0x20, 0xe3, 0x19, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x32, 0xe3, 0x1b, 0x00, 0x04, - 0x1a, 0x00, 0x00, 0x08, 0xe1, 0xa0, 0x80, 0x00, - 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x30, 0x08, - 0xe1, 0xa0, 0x80, 0x01, 0xe1, 0xa0, 0x10, 0x04, - 0xe1, 0xa0, 0x40, 0x08, 0xe1, 0xa0, 0x80, 0x02, - 0xe1, 0xa0, 0x20, 0x05, 0xe1, 0xa0, 0x50, 0x08, - 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, - 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, - 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x49, 0x30, 0x08, 0xe2, 0x83, 0x3c, 0x3f, - 0xe2, 0x83, 0x30, 0xff, 0xe9, 0x2d, 0x40, 0x00, - 0xe3, 0x11, 0x01, 0x02, 0x0b, 0x00, 0x04, 0x30, - 0xe3, 0x14, 0x01, 0x02, 0x0b, 0x00, 0x04, 0x15, - 0xe8, 0xbd, 0x40, 0x00, 0xea, 0xff, 0xfe, 0xb6, - 0xe3, 0x19, 0x01, 0x02, 0x0a, 0x00, 0x00, 0x05, - 0xe1, 0x82, 0x80, 0x81, 0xe1, 0x88, 0x80, 0x05, - 0xe1, 0x98, 0x80, 0x84, 0x1a, 0x00, 0x04, 0x45, - 0xe3, 0x80, 0x04, 0x61, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x92, 0x80, 0x81, 0x1a, 0x00, 0x04, 0x52, - 0xe0, 0x20, 0x80, 0x03, 0xe2, 0x08, 0x81, 0x02, - 0xe3, 0x1b, 0x00, 0x04, 0x02, 0x8f, 0x00, 0x50, - 0x12, 0x8f, 0x00, 0x40, 0xe8, 0x90, 0x00, 0x07, - 0xe1, 0x80, 0x00, 0x08, 0xe3, 0xa0, 0x30, 0x00, - 0xe3, 0xa0, 0x60, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x95, 0x80, 0x84, 0x1a, 0x00, 0x04, 0x3d, - 0xe0, 0x20, 0x80, 0x03, 0xe2, 0x08, 0x81, 0x02, - 0xe3, 0x1b, 0x00, 0x04, 0x12, 0x8f, 0x00, 0x20, - 0x02, 0x8f, 0x00, 0x10, 0xe8, 0x90, 0x00, 0x07, - 0xe1, 0x80, 0x00, 0x08, 0xe3, 0xa0, 0x30, 0x00, - 0xe3, 0xa0, 0x60, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe1, 0xa0, 0x68, 0x80, - 0xe0, 0x56, 0x88, 0x83, 0xe0, 0x20, 0xe0, 0x03, - 0xe2, 0x00, 0x01, 0x02, 0xe1, 0xa0, 0x38, 0xa6, - 0x8a, 0x00, 0x00, 0x1a, 0x01, 0xa0, 0x90, 0x08, - 0x0a, 0x00, 0x00, 0x2e, 0xe2, 0x68, 0x60, 0x00, - 0xe1, 0xa0, 0x68, 0xa6, 0xe0, 0x83, 0x30, 0x06, - 0xe1, 0xa0, 0x92, 0xa6, 0xe1, 0xc6, 0x62, 0x89, - 0xe3, 0x59, 0x00, 0x02, 0x33, 0x39, 0x00, 0x00, - 0xe2, 0x66, 0x90, 0x20, 0xe1, 0xa0, 0x89, 0x12, - 0xe1, 0xa0, 0x26, 0x32, 0xe1, 0x82, 0x29, 0x11, - 0xe1, 0xa0, 0x16, 0x31, 0x0a, 0x00, 0x00, 0x03, - 0x11, 0x88, 0x81, 0x08, 0x11, 0x82, 0x81, 0x28, - 0x11, 0xa0, 0x20, 0x01, 0x13, 0xa0, 0x10, 0x00, - 0x3a, 0x00, 0x00, 0x04, 0x21, 0x88, 0x80, 0x02, - 0x21, 0x88, 0x81, 0x08, 0x21, 0x81, 0x81, 0x28, - 0x23, 0xa0, 0x20, 0x00, 0x23, 0xa0, 0x10, 0x00, - 0xe3, 0xa0, 0x90, 0x00, 0xea, 0x00, 0x00, 0x15, - 0xe1, 0xa0, 0x68, 0xa8, 0xe1, 0xa0, 0x82, 0xa6, - 0xe1, 0xc6, 0x62, 0x88, 0xe3, 0x58, 0x00, 0x02, - 0x33, 0x38, 0x00, 0x00, 0xe2, 0x66, 0x80, 0x20, - 0xe1, 0xa0, 0x98, 0x15, 0xe1, 0xa0, 0x56, 0x35, - 0xe1, 0x85, 0x58, 0x14, 0xe1, 0xa0, 0x46, 0x34, - 0x0a, 0x00, 0x00, 0x03, 0x11, 0x89, 0x91, 0x09, - 0x11, 0x85, 0x91, 0x29, 0x11, 0xa0, 0x50, 0x04, - 0x13, 0xa0, 0x40, 0x00, 0x3a, 0x00, 0x00, 0x04, - 0x21, 0x89, 0x90, 0x05, 0x21, 0x89, 0x91, 0x09, - 0x21, 0x84, 0x91, 0x29, 0x23, 0xa0, 0x50, 0x00, - 0x23, 0xa0, 0x40, 0x00, 0xe3, 0xa0, 0x80, 0x00, - 0xe3, 0x1e, 0x01, 0x02, 0x1a, 0x00, 0x00, 0x09, - 0xe0, 0x98, 0x60, 0x09, 0xe0, 0xb2, 0x20, 0x05, - 0xe0, 0xb1, 0x10, 0x04, 0x38, 0xbd, 0x80, 0x00, - 0xe2, 0x83, 0x30, 0x01, 0xe1, 0xb0, 0x10, 0x61, - 0xe1, 0xb0, 0x20, 0x62, 0xe1, 0x86, 0x60, 0x86, - 0xe1, 0xa0, 0x60, 0x66, 0xe8, 0xbd, 0x80, 0x00, - 0xe0, 0x58, 0x60, 0x09, 0xe0, 0xd2, 0x20, 0x05, - 0xe0, 0xd1, 0x10, 0x04, 0x2a, 0x00, 0x00, 0x03, - 0xe2, 0x20, 0x01, 0x02, 0xe2, 0x76, 0x60, 0x00, - 0xe2, 0xf2, 0x20, 0x00, 0xe2, 0xe1, 0x10, 0x00, - 0xe3, 0x11, 0x01, 0x02, 0x18, 0xbd, 0x80, 0x00, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe3, 0x11, 0x01, 0x02, 0x18, 0xbd, 0x80, 0x00, - 0xe1, 0x91, 0xe0, 0x02, 0x1b, 0x00, 0x03, 0x7e, - 0x18, 0xbd, 0x80, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe3, 0xa0, 0x10, 0x00, 0xe2, 0x8d, 0xd0, 0x04, - 0xe8, 0xbd, 0x4b, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, - 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, - 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, - 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, - 0x4a, 0x00, 0x00, 0x14, 0xe3, 0x19, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x22, 0xe9, 0x2d, 0x40, 0x00, - 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, - 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, - 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, - 0xe3, 0x10, 0x01, 0x01, 0x11, 0xb0, 0x68, 0x80, - 0x1b, 0x00, 0x02, 0xe6, 0xe3, 0x13, 0x01, 0x01, - 0x11, 0xb0, 0x68, 0x83, 0x1b, 0x00, 0x03, 0x1d, - 0xeb, 0xff, 0xff, 0x8a, 0xe3, 0x11, 0x01, 0x02, - 0x18, 0xbd, 0x80, 0x00, 0xe1, 0x91, 0xe0, 0x02, - 0x1b, 0x00, 0x03, 0x5b, 0xe8, 0xbd, 0x80, 0x00, - 0xe3, 0x19, 0x01, 0x02, 0x0a, 0x00, 0x00, 0x09, - 0xe1, 0x82, 0x80, 0x81, 0xe1, 0x88, 0x80, 0x05, - 0xe1, 0x98, 0x80, 0x84, 0x1a, 0x00, 0x03, 0xa5, - 0xe0, 0x23, 0x85, 0x0b, 0xe0, 0x38, 0x80, 0x00, - 0x52, 0x00, 0x81, 0x02, 0x5a, 0x00, 0x00, 0x0a, - 0xe3, 0x80, 0x04, 0x61, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x92, 0x80, 0x81, 0x1a, 0x00, 0x03, 0xae, - 0xe2, 0x00, 0x81, 0x02, 0xea, 0x00, 0x00, 0x04, - 0xe1, 0x95, 0x80, 0x84, 0x1a, 0x00, 0x03, 0xa1, - 0xe2, 0x03, 0x81, 0x02, 0xe3, 0x1b, 0x06, 0x02, - 0x12, 0x28, 0x81, 0x02, 0xe3, 0x1b, 0x06, 0x01, - 0x12, 0x28, 0x81, 0x02, 0xe2, 0x8f, 0x00, 0x14, - 0xe8, 0x90, 0x00, 0x07, 0xe1, 0x80, 0x00, 0x08, - 0xe1, 0xa0, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x49, 0x02, - 0xf0, 0x00, 0xf9, 0x2a, 0xbc, 0x08, 0x47, 0x18, - 0xff, 0xff, 0xff, 0xfd, 0xb5, 0x80, 0x1c, 0x07, - 0x28, 0x0a, 0xd2, 0x14, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x10, 0x04, 0x10, 0x06, - 0x08, 0x0a, 0x0c, 0x10, 0x0e, 0x0e, 0xa0, 0x0f, - 0xe0, 0x0c, 0xa0, 0x1a, 0xe0, 0x0a, 0xa0, 0x33, - 0xe0, 0x08, 0xa0, 0x3f, 0xe0, 0x06, 0xa0, 0x4b, - 0xe0, 0x04, 0xa0, 0x52, 0xe0, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xff, 0x71, 0x21, 0x03, 0xf0, 0x00, - 0xf9, 0x27, 0x2f, 0x04, 0xd1, 0x05, 0x20, 0x01, - 0xf7, 0xfd, 0xfc, 0x2c, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0xf7, 0xfe, 0xfc, 0xd3, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x41, 0x62, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x61, - 0x62, 0x6f, 0x72, 0x74, 0x28, 0x29, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x6c, 0x6c, 0x65, - 0x67, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, - 0x64, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x75, - 0x70, 0x74, 0x65, 0x64, 0x29, 0x0a, 0x5b, 0x69, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x3f, - 0x5d, 0x00, 0x00, 0x00, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x72, 0x75, 0x70, 0x74, 0x20, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x2d, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x00, 0x00, 0x00, - 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, - 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x77, 0x69, - 0x6c, 0x64, 0x6c, 0x79, 0x20, 0x6f, 0x75, 0x74, - 0x73, 0x69, 0x64, 0x65, 0x20, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x29, 0x00, 0x00, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, - 0x2d, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x00, - 0xb5, 0x00, 0x20, 0x01, 0x49, 0x05, 0x70, 0x08, - 0xa0, 0x05, 0x21, 0x03, 0xf0, 0x00, 0xf8, 0x78, - 0x20, 0x64, 0xf7, 0xfd, 0xfb, 0x7f, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x23, 0x48, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, - 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x0a, 0x00, - 0xb5, 0x00, 0x28, 0x07, 0xd1, 0x03, 0xf7, 0xff, - 0xff, 0xe3, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, - 0xff, 0x19, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0xf7, 0xff, 0xff, 0xf2, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x28, 0x00, 0xdd, 0x01, 0x28, 0x0b, - 0xdb, 0x05, 0x20, 0x03, 0x49, 0x0b, 0x60, 0x08, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x87, - 0x4b, 0x09, 0x59, 0xd9, 0x4a, 0x09, 0x42, 0x91, - 0xd1, 0x02, 0xf7, 0xff, 0xff, 0xdd, 0xe0, 0x05, - 0x4c, 0x07, 0x42, 0xa1, 0xd0, 0x02, 0x51, 0xda, - 0xf7, 0xfb, 0xfe, 0x9c, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0x30, - 0x2e, 0x08, 0xd2, 0x18, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0x28, 0x00, 0xdd, 0x09, - 0x28, 0x0b, 0xda, 0x07, 0x00, 0x80, 0x49, 0x04, - 0x58, 0x08, 0x49, 0x04, 0x42, 0x88, 0xd0, 0x01, - 0x20, 0x01, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x2e, 0x08, 0xd2, 0x18, 0xff, 0xff, 0xff, 0xff, - 0x28, 0x00, 0xdd, 0x01, 0x28, 0x0b, 0xdb, 0x01, - 0x48, 0x03, 0x47, 0x70, 0x00, 0x83, 0x4a, 0x03, - 0x58, 0xd0, 0x50, 0xd1, 0x47, 0x70, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xfe, 0x2e, 0x08, 0xd2, 0x18, - 0xb5, 0x90, 0x27, 0x01, 0x4c, 0x05, 0x1c, 0x38, - 0x1c, 0x21, 0xf7, 0xff, 0xff, 0xe9, 0x37, 0x01, - 0x2f, 0x0b, 0xdb, 0xf8, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xb5, 0x90, 0x1c, 0x0c, 0x1c, 0x07, 0x48, 0x12, - 0x28, 0x00, 0xd0, 0x09, 0x48, 0x11, 0x78, 0x00, - 0x28, 0x00, 0xd1, 0x05, 0x1c, 0x38, 0x1c, 0x21, - 0xf0, 0x00, 0xfb, 0x2c, 0x28, 0x00, 0xd1, 0x13, - 0x08, 0x60, 0xd3, 0x02, 0x20, 0x0a, 0xf0, 0x00, - 0xf8, 0xd3, 0x78, 0x38, 0x28, 0x00, 0xd0, 0x06, - 0x78, 0x38, 0x37, 0x01, 0xf0, 0x00, 0xf8, 0xcc, - 0x78, 0x38, 0x28, 0x00, 0xd1, 0xf8, 0x08, 0xa0, - 0xd3, 0x02, 0x20, 0x0a, 0xf0, 0x00, 0xf8, 0xc4, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x02, 0x2b, 0xa9, 0x2e, 0x08, 0x23, 0x48, - 0xb5, 0x80, 0xb0, 0x83, 0x90, 0x00, 0x91, 0x01, - 0xf7, 0xfb, 0xfe, 0xf8, 0x90, 0x02, 0x46, 0x69, - 0x20, 0x01, 0xf0, 0x01, 0xf8, 0x49, 0x23, 0x01, - 0x1c, 0x07, 0x42, 0xd8, 0xd1, 0x05, 0x21, 0x00, - 0x20, 0x13, 0xf0, 0x01, 0xf8, 0x41, 0x49, 0x03, - 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, - 0x20, 0x02, 0xf0, 0x01, 0xf8, 0x31, 0x1c, 0x07, - 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x01, - 0xf8, 0x2b, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, - 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x80, 0xb0, 0x84, - 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x46, 0x69, - 0x20, 0x05, 0xf0, 0x01, 0xf8, 0x19, 0x1c, 0x07, - 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x01, - 0xf8, 0x13, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, - 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x80, 0xb0, 0x84, - 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x93, 0x03, - 0x46, 0x69, 0x20, 0x06, 0xf0, 0x01, 0xf8, 0x00, - 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, - 0xf0, 0x00, 0xff, 0xfa, 0x49, 0x03, 0x60, 0x08, - 0x1c, 0x38, 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x00, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, - 0x20, 0x08, 0xf0, 0x00, 0xff, 0xe9, 0xb0, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x69, 0x40, - 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, 0x20, 0x09, - 0xf0, 0x00, 0xff, 0xde, 0xb0, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x80, 0xb0, 0x82, 0x90, 0x00, - 0x91, 0x01, 0x46, 0x69, 0x20, 0x0a, 0xf0, 0x00, - 0xff, 0xd3, 0x1c, 0x07, 0xd5, 0x05, 0x21, 0x00, - 0x20, 0x13, 0xf0, 0x00, 0xff, 0xcd, 0x49, 0x03, - 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x02, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, - 0x20, 0x0b, 0xf0, 0x00, 0xff, 0xbd, 0x1c, 0x07, - 0xd5, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, - 0xff, 0xb7, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, - 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x00, 0xb0, 0x81, - 0x90, 0x00, 0x46, 0x69, 0x20, 0x0c, 0xf0, 0x00, - 0xff, 0xa7, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x91, 0x01, - 0x92, 0x02, 0x46, 0x69, 0x20, 0x0d, 0xf0, 0x00, - 0xff, 0x9b, 0xb0, 0x03, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x01, 0x46, 0x69, 0x20, 0x03, 0xf0, 0x00, - 0xff, 0x93, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x80, 0xb0, 0x82, 0x90, 0x00, 0xf7, 0xfb, - 0xfe, 0x35, 0x90, 0x01, 0x46, 0x69, 0x20, 0x12, - 0xf0, 0x00, 0xff, 0x86, 0x1c, 0x07, 0xd0, 0x05, - 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, 0xff, 0x80, - 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x02, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x80, 0xb0, 0x82, - 0x90, 0x00, 0xf7, 0xfb, 0xfe, 0x1b, 0x90, 0x01, - 0x46, 0x69, 0x20, 0x0e, 0xf0, 0x00, 0xff, 0x6c, - 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, - 0xf0, 0x00, 0xff, 0x66, 0x49, 0x03, 0x60, 0x08, - 0x1c, 0x38, 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x84, 0x90, 0x00, 0x1c, 0x0f, - 0xf7, 0xfb, 0xfe, 0x00, 0x90, 0x01, 0x97, 0x02, - 0x1c, 0x38, 0xf7, 0xfb, 0xfd, 0xfb, 0x90, 0x03, - 0x46, 0x69, 0x20, 0x0f, 0xf0, 0x00, 0xff, 0x4c, - 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, - 0xf0, 0x00, 0xff, 0x46, 0x49, 0x03, 0x60, 0x08, - 0x1c, 0x38, 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x82, 0x4f, 0x08, 0x97, 0x00, - 0x20, 0xff, 0x30, 0x01, 0x90, 0x01, 0x46, 0x69, - 0x20, 0x15, 0xf0, 0x00, 0xff, 0x31, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x1c, 0x38, - 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd2, 0x48, 0xb5, 0x00, 0x21, 0x00, - 0x20, 0x10, 0xf0, 0x00, 0xff, 0x21, 0x49, 0x02, - 0x68, 0x09, 0x1a, 0x40, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x23, 0x58, 0xb5, 0x00, 0x21, 0x00, - 0x20, 0x10, 0xf0, 0x00, 0xff, 0x15, 0x49, 0x02, - 0x60, 0x08, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x23, 0x58, 0xb5, 0x80, 0x21, 0x00, - 0x1c, 0x07, 0x20, 0x11, 0xf0, 0x00, 0xff, 0x08, - 0x2f, 0x00, 0xd0, 0x00, 0x60, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0x80, 0x49, 0x07, 0x68, 0x09, 0xf7, 0xfb, - 0xfc, 0xd9, 0x1c, 0x07, 0xd1, 0x03, 0xa1, 0x05, - 0xa0, 0x05, 0xf0, 0x00, 0xfc, 0xe7, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0x28, 0x00, 0x00, 0x00, 0x00, - 0x4e, 0x6f, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, - 0x00, 0x00, 0x00, 0x00, 0x23, 0x80, 0x68, 0xc1, - 0x43, 0x19, 0x60, 0xc1, 0x21, 0x00, 0x60, 0x01, - 0x60, 0x81, 0x47, 0x70, 0xb5, 0xf7, 0x68, 0xd5, - 0x69, 0x56, 0x1c, 0x0c, 0x1c, 0x17, 0x0d, 0x68, - 0xd3, 0x05, 0x23, 0x10, 0x43, 0x1d, 0x1c, 0x30, - 0xf7, 0xff, 0xff, 0x14, 0x61, 0xb8, 0x48, 0x12, - 0x40, 0x28, 0xd0, 0x08, 0x69, 0xb9, 0x1c, 0x30, - 0xf7, 0xff, 0xfe, 0xdf, 0x28, 0x00, 0xdb, 0x10, - 0x4b, 0x0e, 0x40, 0x1d, 0x60, 0xfd, 0x99, 0x00, - 0x1c, 0x30, 0x1c, 0x22, 0x1c, 0x2b, 0xf7, 0xff, - 0xfe, 0x8d, 0x00, 0x41, 0x08, 0x49, 0x1a, 0x61, - 0x69, 0xba, 0x18, 0x51, 0x61, 0xb9, 0x28, 0x00, - 0xd0, 0x08, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xce, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xe7, 0xf9, - 0x00, 0x02, 0x00, 0x10, 0xff, 0xfd, 0xff, 0xef, - 0xb5, 0xb0, 0x48, 0x15, 0x68, 0xc1, 0x4b, 0x15, - 0x40, 0x19, 0x1c, 0x1d, 0x42, 0x99, 0xd1, 0x01, - 0xf0, 0x00, 0xfc, 0xd6, 0x48, 0x12, 0x68, 0xc1, - 0x4b, 0x10, 0x40, 0x19, 0x42, 0xa9, 0xd1, 0x01, - 0xf0, 0x00, 0xfc, 0xce, 0x48, 0x0f, 0x68, 0xc1, - 0x4b, 0x0c, 0x40, 0x19, 0x42, 0xa9, 0xd1, 0x01, - 0xf0, 0x00, 0xfc, 0xc6, 0x27, 0x00, 0x4c, 0x0c, - 0x01, 0xb8, 0x19, 0x00, 0x68, 0xc1, 0x4b, 0x07, - 0x40, 0x19, 0x42, 0xa9, 0xd1, 0x01, 0xf0, 0x00, - 0xfc, 0xbb, 0x37, 0x01, 0x2f, 0x0d, 0xdb, 0xf3, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x48, 0x00, 0x00, 0x02, 0x02, - 0x2e, 0x08, 0xd3, 0x88, 0x2e, 0x08, 0xd3, 0xc8, - 0x2e, 0x08, 0xd4, 0x08, 0xb5, 0xf0, 0x1c, 0x07, - 0x69, 0x04, 0x6a, 0xc0, 0x68, 0x79, 0x42, 0x88, - 0xd9, 0x00, 0x1c, 0x01, 0x68, 0xf8, 0x4b, 0x13, - 0x40, 0x18, 0x07, 0x82, 0x0f, 0x92, 0x25, 0x00, - 0x60, 0xf8, 0x2a, 0x01, 0xd0, 0x1a, 0x22, 0x82, - 0x40, 0x02, 0x15, 0x1e, 0x2a, 0x02, 0xd1, 0x0a, - 0x0c, 0x40, 0xd3, 0x13, 0x42, 0xa1, 0xd0, 0x0a, - 0x1b, 0x09, 0x1c, 0x20, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0x75, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x30, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x62, 0xfc, - 0x60, 0x7c, 0x60, 0xbd, 0x68, 0xf8, 0x4b, 0x04, - 0x40, 0x18, 0x60, 0xf8, 0x1c, 0x28, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xfe, 0xff, 0xff, 0xb5, 0x80, 0x1c, 0x07, - 0x68, 0xc0, 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0xf8, 0x69, 0xb8, 0x6a, 0xb9, 0x42, 0x88, - 0xd0, 0x0d, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xbe, - 0x68, 0xf8, 0x4b, 0x08, 0x40, 0x18, 0x23, 0x10, - 0x43, 0x18, 0x60, 0xf8, 0x6a, 0xb8, 0x61, 0xb8, - 0x69, 0x38, 0x62, 0xf8, 0x60, 0x78, 0x68, 0xf8, - 0x4b, 0x03, 0x40, 0x18, 0x60, 0xf8, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xff, 0xff, 0xcf, 0xff, - 0xff, 0xff, 0xbf, 0xbf, 0xb5, 0xf0, 0x1c, 0x07, - 0x69, 0x40, 0xb0, 0x83, 0x90, 0x01, 0x69, 0x38, - 0x90, 0x00, 0x25, 0x00, 0x68, 0xfe, 0x07, 0xb0, - 0xd1, 0x01, 0x43, 0xc0, 0xe0, 0x48, 0x09, 0x30, - 0xd2, 0x40, 0x24, 0x10, 0x1c, 0x38, 0xf0, 0x00, - 0xfc, 0x3f, 0x1c, 0x05, 0x0d, 0x70, 0xd3, 0x1b, - 0x24, 0x00, 0x49, 0x21, 0x91, 0x02, 0x01, 0xa0, - 0x99, 0x02, 0x18, 0x40, 0x42, 0xb8, 0xd0, 0x10, - 0x68, 0xc1, 0x07, 0x8a, 0xd0, 0x0d, 0x69, 0x42, - 0x9b, 0x01, 0x42, 0x9a, 0xd1, 0x09, 0x0d, 0x49, - 0xd3, 0x07, 0x68, 0xc1, 0x4b, 0x19, 0x40, 0x19, - 0x60, 0xc1, 0x68, 0xf8, 0x40, 0x18, 0x60, 0xf8, - 0xe0, 0x02, 0x34, 0x01, 0x2c, 0x10, 0xdb, 0xe6, - 0x2c, 0x10, 0xd1, 0x06, 0x98, 0x01, 0xf7, 0xff, - 0xfd, 0x9b, 0x28, 0x00, 0xda, 0x01, 0x25, 0x00, - 0x43, 0xed, 0x0b, 0x30, 0xd3, 0x04, 0x98, 0x00, - 0x49, 0x0f, 0x68, 0x09, 0xf7, 0xfb, 0xfb, 0xa6, - 0x0d, 0xf0, 0x05, 0xc0, 0x23, 0xa5, 0x05, 0xdb, - 0x42, 0xd8, 0xd1, 0x07, 0x48, 0x0b, 0x28, 0x00, - 0xd0, 0x04, 0x1c, 0x38, 0x1c, 0x29, 0xf7, 0xff, - 0xff, 0xfe, 0x1c, 0x05, 0x22, 0x40, 0x21, 0x00, - 0x1c, 0x38, 0xf7, 0xfb, 0xfc, 0xe7, 0x1c, 0x28, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd3, 0x48, 0xff, 0xef, 0xff, 0xff, - 0x2e, 0x08, 0x21, 0x2c, 0x00, 0x00, 0x00, 0x00, - 0xb5, 0xf7, 0x1c, 0x10, 0x1c, 0x0c, 0x1c, 0x17, - 0xf7, 0xff, 0xff, 0x98, 0x78, 0x20, 0x34, 0x01, - 0x28, 0x61, 0xd0, 0x09, 0x28, 0x72, 0xd0, 0x04, - 0x28, 0x77, 0xd1, 0x25, 0x26, 0x02, 0x25, 0x04, - 0xe0, 0x04, 0x26, 0x01, 0x25, 0x00, 0xe0, 0x01, - 0x4e, 0x1a, 0x25, 0x08, 0x78, 0x20, 0x34, 0x01, - 0x28, 0x2b, 0xd0, 0x06, 0x28, 0x62, 0xd1, 0x09, - 0x23, 0x04, 0x43, 0x1e, 0x23, 0x01, 0x43, 0x1d, - 0xe7, 0xf4, 0x23, 0x03, 0x43, 0x1e, 0x23, 0x02, - 0x43, 0x1d, 0xe7, 0xef, 0x1f, 0xe0, 0x38, 0x19, - 0x7f, 0xc0, 0x28, 0x74, 0xd1, 0x01, 0x23, 0x10, - 0x43, 0x1d, 0x98, 0x00, 0x1c, 0x29, 0xf7, 0xff, - 0xfd, 0x23, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x04, - 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x00, 0x60, 0x79, 0x61, 0x39, - 0x21, 0x01, 0x03, 0x09, 0x61, 0x78, 0x61, 0xf9, - 0x60, 0xfe, 0x09, 0x28, 0xd3, 0x04, 0x22, 0x02, - 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0xc4, - 0x1c, 0x38, 0xe7, 0xea, 0x00, 0x00, 0x80, 0x02, - 0xb5, 0x90, 0x23, 0x03, 0x4f, 0x08, 0x01, 0x9a, - 0x19, 0xd2, 0x68, 0xd4, 0x07, 0xa4, 0xd1, 0x04, - 0xf7, 0xff, 0xff, 0xaa, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x33, 0x01, 0x2b, 0x10, 0xdb, 0xf2, - 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd3, 0x48, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0x4d, 0x10, 0x68, 0xe8, 0x08, 0x80, - 0xd3, 0x18, 0x20, 0x01, 0x4e, 0x0e, 0x70, 0x30, - 0x40, 0x38, 0xd0, 0x03, 0x20, 0x0a, 0x1c, 0x29, - 0xf0, 0x00, 0xfc, 0x1e, 0x1c, 0x20, 0x1c, 0x29, - 0xf0, 0x00, 0xfc, 0x2c, 0x08, 0xb8, 0xd3, 0x03, - 0x20, 0x0a, 0x1c, 0x29, 0xf0, 0x00, 0xfc, 0x14, - 0x20, 0x00, 0x70, 0x30, 0x20, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd3, 0xc8, - 0x2e, 0x08, 0x23, 0x48, 0xb5, 0x80, 0x1c, 0x07, - 0xa0, 0x06, 0x21, 0x01, 0xf7, 0xff, 0xfc, 0x98, - 0x21, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xfc, 0x94, - 0x20, 0x01, 0xf7, 0xfc, 0xff, 0x95, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x43, 0x6f, 0x75, 0x6c, - 0x64, 0x6e, 0x27, 0x74, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x00, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x15, 0x1c, 0x0f, 0x48, 0x20, 0x22, 0x01, - 0x02, 0x92, 0x21, 0x00, 0x1c, 0x06, 0xf7, 0xfb, - 0xfc, 0x2d, 0x4a, 0x1e, 0x1c, 0x28, 0xa1, 0x1e, - 0xf7, 0xff, 0xff, 0x4e, 0x28, 0x00, 0xd1, 0x02, - 0x1c, 0x28, 0xf7, 0xff, 0xff, 0xd3, 0x1c, 0x20, - 0x1c, 0x32, 0xa1, 0x1a, 0xf7, 0xff, 0xff, 0x44, - 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x20, 0xf7, 0xff, - 0xff, 0xc9, 0x4a, 0x17, 0x1c, 0x38, 0x1c, 0x15, - 0xa1, 0x13, 0xf7, 0xff, 0xff, 0x39, 0x28, 0x00, - 0xd1, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xbe, - 0x1c, 0x30, 0x26, 0x01, 0x03, 0x36, 0x08, 0xf2, - 0x21, 0x00, 0x1c, 0x33, 0xf0, 0x00, 0xf8, 0x52, - 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x20, 0xf7, 0xff, - 0xff, 0xb1, 0x22, 0x01, 0x02, 0x52, 0x21, 0x00, - 0x1c, 0x28, 0x1c, 0x33, 0xf0, 0x00, 0xf8, 0x46, - 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xff, 0xa5, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd3, 0x48, 0x2e, 0x08, 0xd3, 0xc8, - 0x77, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x88, 0xb5, 0x90, 0x27, 0x03, - 0x4c, 0x09, 0x01, 0xb8, 0x19, 0x00, 0xf7, 0xff, - 0xfe, 0xa5, 0x37, 0x01, 0x2f, 0x10, 0xdb, 0xf8, - 0x27, 0x00, 0x01, 0xb8, 0x19, 0x00, 0xf7, 0xff, - 0xfe, 0x9d, 0x37, 0x01, 0x2f, 0x03, 0xdb, 0xf8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x48, 0xb5, 0xb0, 0x01, 0x80, - 0x1c, 0x0f, 0x4c, 0x0a, 0x19, 0x00, 0x1c, 0x05, - 0xf7, 0xff, 0xfe, 0x8c, 0x01, 0xb8, 0x19, 0x00, - 0x23, 0x01, 0x05, 0x1b, 0x68, 0xc1, 0x43, 0x19, - 0x60, 0xc1, 0x4b, 0x05, 0x40, 0x19, 0x60, 0xe9, - 0x69, 0x40, 0x61, 0x68, 0x1c, 0x38, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd3, 0x48, - 0x00, 0x10, 0x8f, 0x03, 0xb4, 0xf0, 0x1c, 0x1f, - 0x68, 0xc3, 0x07, 0x9e, 0x0f, 0xb6, 0x25, 0x01, - 0x1c, 0x1c, 0x2e, 0x00, 0xd0, 0x13, 0x1c, 0x1e, - 0x0d, 0xf3, 0xd2, 0x10, 0x02, 0x2b, 0x42, 0x9a, - 0xd0, 0x09, 0x00, 0x5b, 0x42, 0x9a, 0xd0, 0x06, - 0x00, 0x5b, 0x42, 0x9a, 0xd1, 0x07, 0x27, 0x01, - 0x1d, 0xc1, 0x31, 0x1d, 0xe0, 0x06, 0x1e, 0x7e, - 0x4b, 0x08, 0x42, 0x9e, 0xd3, 0x02, 0x1c, 0x28, - 0xbc, 0xf0, 0x47, 0x70, 0x61, 0x01, 0x23, 0x0f, - 0x02, 0x1b, 0x43, 0x9c, 0x60, 0x41, 0x61, 0xc7, - 0x1c, 0x21, 0x43, 0x11, 0x60, 0xc1, 0x20, 0x00, - 0xbc, 0xf0, 0x47, 0x70, 0x00, 0xff, 0xff, 0xff, - 0xe2, 0x00, 0x01, 0x02, 0xe3, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x17, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, - 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, - 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, - 0x02, 0x88, 0x80, 0x01, 0xe0, 0x58, 0x98, 0xa6, - 0x81, 0xa0, 0x19, 0x31, 0x81, 0xa0, 0x88, 0xa6, - 0xe2, 0x68, 0x60, 0x20, 0xe1, 0x81, 0x16, 0x32, - 0xe1, 0xa0, 0x28, 0x12, 0x30, 0x40, 0x00, 0x09, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x56, 0x05, 0x01, - 0x3a, 0x00, 0x00, 0x16, 0xe1, 0xb0, 0x10, 0x02, - 0x01, 0xa0, 0xf0, 0x0e, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0xa0, 0x80, 0x20, 0xe1, 0xb0, 0x98, 0x21, - 0x01, 0xa0, 0x18, 0x01, 0x02, 0x88, 0x80, 0x10, - 0xe1, 0xb0, 0x9c, 0x21, 0x01, 0xa0, 0x14, 0x01, - 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x21, - 0x01, 0xa0, 0x12, 0x01, 0x02, 0x88, 0x80, 0x04, - 0xe1, 0xb0, 0x9f, 0x21, 0x01, 0xa0, 0x11, 0x01, - 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa1, - 0x01, 0xa0, 0x10, 0x81, 0x02, 0x88, 0x80, 0x01, - 0xe0, 0x58, 0x98, 0xa6, 0x81, 0xa0, 0x19, 0x31, - 0x30, 0x40, 0x00, 0x09, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xa0, 0x88, 0xa6, 0xe2, 0x68, 0x90, 0x20, - 0xe1, 0xa0, 0x18, 0x11, 0xe1, 0x81, 0x19, 0x32, - 0xe1, 0xa0, 0x28, 0x12, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe2, 0x03, 0x31, 0x02, 0xe3, 0x34, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x17, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x24, 0x01, 0xa0, 0x48, 0x04, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x24, - 0x01, 0xa0, 0x44, 0x04, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x24, 0x01, 0xa0, 0x42, 0x04, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x24, - 0x01, 0xa0, 0x41, 0x04, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa4, 0x01, 0xa0, 0x40, 0x84, - 0x02, 0x88, 0x80, 0x01, 0xe0, 0x58, 0x98, 0xa6, - 0x81, 0xa0, 0x49, 0x34, 0x81, 0xa0, 0x88, 0xa6, - 0xe2, 0x68, 0x60, 0x20, 0xe1, 0x84, 0x46, 0x35, - 0xe1, 0xa0, 0x58, 0x15, 0x30, 0x43, 0x30, 0x09, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x56, 0x05, 0x01, - 0x3a, 0x00, 0x00, 0x16, 0xe1, 0xb0, 0x40, 0x05, - 0x01, 0xa0, 0xf0, 0x0e, 0xe3, 0xa0, 0x50, 0x00, - 0xe3, 0xa0, 0x80, 0x20, 0xe1, 0xb0, 0x98, 0x24, - 0x01, 0xa0, 0x48, 0x04, 0x02, 0x88, 0x80, 0x10, - 0xe1, 0xb0, 0x9c, 0x24, 0x01, 0xa0, 0x44, 0x04, - 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x24, - 0x01, 0xa0, 0x42, 0x04, 0x02, 0x88, 0x80, 0x04, - 0xe1, 0xb0, 0x9f, 0x24, 0x01, 0xa0, 0x41, 0x04, - 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa4, - 0x01, 0xa0, 0x40, 0x84, 0x02, 0x88, 0x80, 0x01, - 0xe0, 0x58, 0x98, 0xa6, 0x81, 0xa0, 0x49, 0x34, - 0x30, 0x43, 0x30, 0x09, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xa0, 0x88, 0xa6, 0xe2, 0x68, 0x90, 0x20, - 0xe1, 0xa0, 0x48, 0x14, 0xe1, 0x84, 0x49, 0x35, - 0xe1, 0xa0, 0x58, 0x15, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe3, 0xa0, 0x20, 0x00, 0xe2, 0x16, 0x01, 0x02, - 0x12, 0x66, 0x10, 0x00, 0x01, 0xb0, 0x10, 0x06, - 0x03, 0xa0, 0x30, 0x00, 0x01, 0xa0, 0xf0, 0x0e, - 0xe3, 0xa0, 0x39, 0x01, 0xe3, 0x83, 0x30, 0x1e, - 0xe3, 0xa0, 0x60, 0x00, 0xe3, 0x31, 0x00, 0x00, - 0x01, 0xa0, 0x10, 0x02, 0x03, 0xa0, 0x20, 0x00, - 0x02, 0x43, 0x30, 0x20, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, - 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, - 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, - 0x02, 0x88, 0x80, 0x01, 0xe2, 0x78, 0x90, 0x20, - 0xe1, 0x81, 0x19, 0x32, 0xe1, 0xa0, 0x28, 0x12, - 0xe0, 0x43, 0x30, 0x08, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe3, 0x34, 0x00, 0x00, 0x01, 0xa0, 0x40, 0x05, - 0x03, 0xa0, 0x50, 0x00, 0x02, 0x43, 0x30, 0x20, - 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xb0, 0x98, 0x24, - 0x01, 0xa0, 0x48, 0x04, 0x02, 0x88, 0x80, 0x10, - 0xe1, 0xb0, 0x9c, 0x24, 0x01, 0xa0, 0x44, 0x04, - 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x24, - 0x01, 0xa0, 0x42, 0x04, 0x02, 0x88, 0x80, 0x04, - 0xe1, 0xb0, 0x9f, 0x24, 0x01, 0xa0, 0x41, 0x04, - 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa4, - 0x01, 0xa0, 0x40, 0x84, 0x02, 0x88, 0x80, 0x01, - 0xe2, 0x78, 0x90, 0x20, 0xe1, 0x84, 0x49, 0x35, - 0xe1, 0xa0, 0x58, 0x15, 0xe0, 0x43, 0x30, 0x08, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x31, 0x00, 0x00, - 0x01, 0xa0, 0x10, 0x02, 0x03, 0xa0, 0x20, 0x00, - 0x02, 0x83, 0x30, 0x20, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, - 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, - 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, - 0x02, 0x88, 0x80, 0x01, 0xe2, 0x78, 0x90, 0x20, - 0xe1, 0x81, 0x19, 0x32, 0xe1, 0xa0, 0x28, 0x12, - 0xe0, 0x83, 0x30, 0x08, 0xe1, 0xa0, 0xf0, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe1, 0x92, 0x80, 0x81, 0x0a, 0x00, 0x00, 0x05, - 0xe3, 0x11, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x0c, - 0xe1, 0x95, 0x80, 0x84, 0x0a, 0x00, 0x00, 0x0a, - 0xe3, 0x14, 0x01, 0x01, 0x1a, 0x00, 0x00, 0x08, - 0xe3, 0x14, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x28, - 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x10, 0x04, - 0xe1, 0xa0, 0x20, 0x05, 0xea, 0x00, 0x00, 0x04, - 0xe3, 0x11, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x22, - 0xea, 0x00, 0x00, 0x01, 0xe3, 0x11, 0x01, 0x01, - 0x0a, 0x00, 0x00, 0x1f, 0xe3, 0x1b, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x16, 0xe3, 0x1b, 0x00, 0x02, - 0x1a, 0x00, 0x00, 0x0c, 0xe3, 0x1b, 0x0c, 0x02, - 0x1a, 0x00, 0x00, 0x05, 0xe3, 0xc0, 0x81, 0x03, - 0xe3, 0xa0, 0x90, 0xff, 0xe3, 0x89, 0x9c, 0x43, - 0xe1, 0x58, 0x00, 0x09, 0x33, 0xc2, 0x20, 0x01, - 0x03, 0x82, 0x20, 0x01, 0xe2, 0x00, 0x01, 0x03, - 0xe3, 0x80, 0x00, 0xff, 0xe3, 0x80, 0x0c, 0x7f, - 0xe1, 0x30, 0x00, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe2, 0x00, 0x01, 0x03, 0xe3, 0x80, 0x00, 0xff, - 0xe3, 0x80, 0x0c, 0x43, 0xe1, 0xa0, 0x25, 0xa2, - 0xe1, 0xa0, 0x25, 0x82, 0xe3, 0x81, 0x11, 0x02, - 0xe1, 0x30, 0x00, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe2, 0x00, 0x01, 0x03, 0xe3, 0x80, 0x00, 0x7f, - 0xe3, 0x80, 0x09, 0x01, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0xc1, 0x10, 0xff, 0xe3, 0x81, 0x11, 0x02, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x80, 0x04, 0x61, - 0xe1, 0xa0, 0xf0, 0x0e, 0xb5, 0x80, 0x1c, 0x0f, - 0x29, 0x0f, 0xdd, 0x04, 0x11, 0x39, 0xf7, 0xff, - 0xff, 0xf9, 0x07, 0x3f, 0x0f, 0x3f, 0x2f, 0x09, - 0xdd, 0x02, 0x1d, 0xf9, 0x31, 0x29, 0xe0, 0x01, - 0x1d, 0xf9, 0x31, 0x50, 0x70, 0x01, 0x30, 0x01, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, - 0x1c, 0x07, 0x48, 0x0d, 0x68, 0x01, 0x29, 0x00, - 0xd1, 0x12, 0x4c, 0x0c, 0x1c, 0x20, 0xa1, 0x0c, - 0x22, 0x14, 0xf7, 0xfb, 0xf8, 0x67, 0x1d, 0xe0, - 0x30, 0x0b, 0x1c, 0x39, 0xf7, 0xff, 0xff, 0xda, - 0x21, 0x29, 0x70, 0x01, 0x21, 0x00, 0x70, 0x41, - 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x30, 0x08, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x4c, 0x2e, 0x08, 0xd7, 0x48, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x28, - 0x30, 0x78, 0x00, 0x00, 0xb5, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0xa0, 0x09, 0x21, 0x01, 0xf7, 0xff, - 0xf9, 0x87, 0x21, 0x00, 0x1c, 0x20, 0xf7, 0xff, - 0xf9, 0x83, 0x21, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xf9, 0x7f, 0x20, 0x01, 0xf7, 0xfc, 0xfc, 0x80, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2a, 0x2a, 0x2a, 0x20, 0x66, 0x61, 0x74, 0x61, - 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, - 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, - 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x3a, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xb5, 0xb0, 0x1c, 0x07, 0x68, 0xc0, 0x07, 0x81, - 0xd0, 0x1f, 0x23, 0x20, 0x40, 0x18, 0xd0, 0x01, - 0x6a, 0xbd, 0xe0, 0x04, 0x68, 0x79, 0x69, 0xba, - 0x18, 0x89, 0x69, 0x3a, 0x1a, 0x8d, 0x28, 0x00, - 0xd0, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xfb, 0xa2, - 0x68, 0xf8, 0x4b, 0x0a, 0x40, 0x18, 0x60, 0xf8, - 0x1c, 0x38, 0xf7, 0xff, 0xfb, 0x67, 0x1c, 0x04, - 0x22, 0x00, 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, - 0xf8, 0x27, 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xff, - 0xb5, 0xb0, 0x24, 0x00, 0x28, 0x00, 0xd0, 0x03, - 0xf7, 0xff, 0xff, 0xce, 0x1c, 0x04, 0xe0, 0x0c, - 0x27, 0x00, 0x4d, 0x08, 0x01, 0xb8, 0x19, 0x40, - 0xf7, 0xff, 0xff, 0xc6, 0x28, 0x00, 0xd0, 0x01, - 0x24, 0x00, 0x43, 0xe4, 0x37, 0x01, 0x2f, 0x10, - 0xdb, 0xf4, 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0xd3, 0x48, - 0xb5, 0xf7, 0x68, 0xc5, 0x69, 0x46, 0x1c, 0x0c, - 0x1c, 0x07, 0xb0, 0x81, 0x48, 0x3c, 0x40, 0x28, - 0xd0, 0x04, 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0xaa, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x02, 0xe0, 0x6a, - 0x9a, 0x03, 0x2a, 0x00, 0xd0, 0x26, 0x2a, 0x01, - 0xd0, 0x0b, 0x2a, 0x02, 0xd1, 0x24, 0x1c, 0x30, - 0xf7, 0xff, 0xf9, 0xd4, 0x28, 0x00, 0xda, 0x09, - 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0xa7, 0x20, 0x01, - 0xe0, 0x59, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x8c, - 0x19, 0x04, 0xe0, 0x13, 0x68, 0x79, 0x6a, 0xfa, - 0x42, 0x8a, 0xd9, 0x00, 0x1c, 0x11, 0x69, 0xba, - 0x18, 0x89, 0x69, 0x3a, 0x1a, 0x89, 0x68, 0xfa, - 0x09, 0x92, 0xd3, 0x03, 0x6a, 0xba, 0x42, 0x8a, - 0xdd, 0x00, 0x1c, 0x11, 0x42, 0x81, 0xdd, 0x00, - 0x1c, 0x08, 0x18, 0x24, 0x2c, 0x00, 0xda, 0x03, - 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x87, 0xe7, 0xcd, - 0x0b, 0xa8, 0xd3, 0x04, 0x68, 0x78, 0x6a, 0xf9, - 0x42, 0x81, 0xd2, 0x00, 0x62, 0xf8, 0x69, 0xb8, - 0x42, 0xa0, 0xdc, 0x10, 0x68, 0x79, 0x6a, 0xfa, - 0x42, 0x8a, 0xd9, 0x01, 0x1c, 0x13, 0xe0, 0x00, - 0x1c, 0x0b, 0x18, 0x1b, 0x69, 0x3e, 0x1b, 0x9b, - 0x42, 0xa3, 0xdb, 0x04, 0x6b, 0x3b, 0x93, 0x00, - 0x18, 0xc3, 0x42, 0xa3, 0xdc, 0x06, 0x20, 0x20, - 0x43, 0x28, 0x21, 0x00, 0x60, 0x39, 0x60, 0xb9, - 0x62, 0xbc, 0xe0, 0x14, 0x1a, 0x24, 0x08, 0xa8, - 0xd3, 0x03, 0x9b, 0x00, 0x1b, 0x18, 0x42, 0x40, - 0x60, 0xb8, 0x08, 0x68, 0xd3, 0x06, 0x42, 0x8a, - 0xd9, 0x00, 0x1c, 0x11, 0x1b, 0x88, 0x1b, 0x00, - 0x42, 0x40, 0x60, 0x38, 0x19, 0x30, 0x23, 0x20, - 0x43, 0x9d, 0x60, 0x78, 0x1c, 0x28, 0x4b, 0x05, - 0x40, 0x18, 0x60, 0xf8, 0x20, 0x00, 0xb0, 0x01, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x10, 0x00, 0x03, 0xff, 0xf7, 0xcf, 0xbf, - 0xb5, 0x00, 0x68, 0x8a, 0x68, 0x4b, 0x3a, 0x01, - 0xd5, 0x03, 0xf0, 0x00, 0xf8, 0x3f, 0xbc, 0x08, - 0x47, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x70, 0x18, - 0x33, 0x01, 0x60, 0x8a, 0x60, 0x4b, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xb5, 0xb0, 0x1c, 0x07, - 0x78, 0x00, 0x1c, 0x0c, 0x37, 0x01, 0x28, 0x00, - 0xd0, 0x0e, 0x25, 0x00, 0x43, 0xed, 0x1c, 0x21, - 0xf0, 0x00, 0xf8, 0xe8, 0x42, 0xa8, 0xd1, 0x03, - 0x1c, 0x28, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x78, 0x38, 0x37, 0x01, 0x28, 0x00, 0xd1, 0xf2, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0xc1, 0x07, 0x8a, 0xd1, 0x04, 0x20, 0x01, - 0x49, 0x09, 0x60, 0x08, 0x42, 0x40, 0x47, 0x70, - 0x09, 0x8a, 0xd3, 0x01, 0x6a, 0x80, 0xe0, 0x04, - 0x68, 0x42, 0x69, 0x83, 0x18, 0xd2, 0x69, 0x00, - 0x1a, 0x10, 0x0d, 0x09, 0xd3, 0xf3, 0x28, 0x00, - 0xdd, 0xf1, 0x38, 0x01, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0xf0, 0x1c, 0x04, - 0x68, 0xc8, 0x1c, 0x0f, 0x4b, 0x5a, 0x40, 0x18, - 0x23, 0x01, 0x05, 0x9b, 0x43, 0x18, 0x60, 0xc8, - 0x09, 0x80, 0xd3, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xfa, 0x95, 0x06, 0x26, 0x0e, 0x36, 0x68, 0xb9, - 0x29, 0x00, 0xda, 0x12, 0x68, 0xf8, 0x0a, 0x82, - 0xd2, 0x0f, 0x22, 0x00, 0x43, 0xd2, 0x1a, 0x51, - 0x23, 0x09, 0x03, 0x5b, 0x43, 0x18, 0x60, 0xf8, - 0x60, 0xb9, 0x68, 0x79, 0x70, 0x0e, 0x31, 0x01, - 0x60, 0x79, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xf8, 0x49, 0x49, 0x40, 0x01, - 0x29, 0x02, 0xd0, 0x03, 0x1c, 0x38, 0xf7, 0xff, - 0xf9, 0xcd, 0xe0, 0x7f, 0x49, 0x46, 0x40, 0x01, - 0x23, 0x01, 0x03, 0xdb, 0x42, 0x99, 0xd1, 0x0b, - 0x22, 0x02, 0x21, 0x00, 0x1c, 0x38, 0xf7, 0xff, - 0xfe, 0xfb, 0x68, 0xf8, 0x09, 0x80, 0xd3, 0x02, - 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x63, 0x68, 0xf8, - 0x25, 0x09, 0x03, 0x6d, 0x43, 0x05, 0x60, 0xfd, - 0x69, 0x38, 0x28, 0x00, 0xd1, 0x2f, 0x1c, 0x38, - 0xf7, 0xff, 0xf8, 0xa0, 0x28, 0x00, 0xd0, 0x18, - 0x68, 0xf8, 0x0a, 0x00, 0x07, 0x80, 0xd0, 0x09, - 0x69, 0xf8, 0xf7, 0xff, 0xf9, 0x7d, 0x61, 0x38, - 0x60, 0x78, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x1d, - 0x68, 0xf8, 0xe0, 0x1a, 0x1d, 0xf8, 0x30, 0x1d, - 0x61, 0x38, 0x60, 0x78, 0x20, 0x01, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x1d, 0x61, 0xf8, 0x60, 0xfd, - 0xe0, 0x11, 0x69, 0xf8, 0xf7, 0xff, 0xf9, 0x68, - 0x61, 0x38, 0x60, 0x78, 0x23, 0x01, 0x02, 0xdb, - 0x43, 0x1d, 0x68, 0xf8, 0x43, 0x28, 0x60, 0xf8, - 0x0a, 0x29, 0x07, 0x89, 0xd1, 0x03, 0x08, 0xdb, - 0x43, 0x1d, 0x43, 0x28, 0x60, 0xf8, 0x0a, 0x68, - 0xd3, 0x19, 0x68, 0x78, 0x6a, 0xf9, 0x69, 0x3c, - 0x42, 0x81, 0xd9, 0x00, 0x1c, 0x08, 0x1b, 0x01, - 0xd0, 0x05, 0x1c, 0x20, 0x1c, 0x3a, 0xf7, 0xff, - 0xf9, 0x7d, 0x28, 0x00, 0xd1, 0x26, 0x1c, 0x60, - 0x62, 0xf8, 0x60, 0x78, 0x69, 0xf8, 0x1e, 0x41, - 0x63, 0x38, 0x60, 0xb9, 0x70, 0x26, 0x1c, 0x30, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x69, 0x38, - 0x68, 0x7a, 0x70, 0x14, 0x32, 0x01, 0x60, 0x7a, - 0x6a, 0xf9, 0x42, 0x91, 0xd8, 0x00, 0x1c, 0x11, - 0x1a, 0x09, 0x69, 0xfa, 0x63, 0x3a, 0x0a, 0xeb, - 0xd2, 0x03, 0x2e, 0x0a, 0xd0, 0x01, 0x42, 0x8a, - 0xdc, 0x0d, 0x62, 0xf8, 0x22, 0x00, 0x60, 0x78, - 0x60, 0xba, 0x1c, 0x3a, 0xf7, 0xff, 0xf9, 0x56, - 0x28, 0x00, 0xd0, 0x04, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x30, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0xff, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x10, 0x8a, - 0x00, 0x00, 0xa0, 0x10, 0xb5, 0x00, 0x68, 0x8a, - 0x68, 0x4b, 0x3a, 0x01, 0xd5, 0x03, 0xf7, 0xff, - 0xff, 0x39, 0xbc, 0x08, 0x47, 0x18, 0x06, 0x00, - 0x0e, 0x00, 0x70, 0x18, 0x33, 0x01, 0x60, 0x8a, - 0x60, 0x4b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x47, 0x78, 0x46, 0xc0, 0xe9, 0x2d, 0x40, 0x00, - 0xe2, 0x8f, 0xe0, 0x00, 0xef, 0x12, 0x34, 0x56, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x00, 0x18, - 0xe5, 0x9f, 0x10, 0x18, 0xef, 0x12, 0x34, 0x56, - 0xea, 0xff, 0xff, 0xfe, 0xe1, 0xa0, 0x10, 0x00, - 0xe3, 0xa0, 0x00, 0x18, 0xe5, 0x9f, 0x10, 0x08, - 0xef, 0x12, 0x34, 0x56, 0xea, 0xff, 0xff, 0xfe, - 0x00, 0x02, 0x00, 0x26, 0x00, 0x02, 0x00, 0x23, - 0xe8, 0xb0, 0x01, 0xf0, 0xe8, 0xa1, 0x01, 0xf0, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe2, 0x52, 0x20, 0xbc, 0x1a, 0xff, 0xff, 0xed, - 0xe8, 0xbd, 0x01, 0xf8, 0xe1, 0x2f, 0xff, 0x1e, - 0xe4, 0x90, 0x40, 0x04, 0xe1, 0x85, 0x54, 0x24, - 0xe4, 0x81, 0x50, 0x04, 0xe1, 0xa0, 0x5c, 0x04, - 0xe2, 0x53, 0x30, 0x04, 0x1a, 0xff, 0xff, 0xf9, - 0xe5, 0x9f, 0xf0, 0x88, 0xe4, 0x90, 0x40, 0x04, - 0xe1, 0x85, 0x5c, 0x24, 0xe4, 0x81, 0x50, 0x04, - 0xe1, 0xa0, 0x54, 0x04, 0xe2, 0x53, 0x30, 0x04, - 0x1a, 0xff, 0xff, 0xf9, 0xe5, 0x9f, 0xf0, 0x70, - 0xe4, 0x90, 0x40, 0x04, 0xe1, 0xa0, 0x58, 0x24, - 0xe0, 0xc1, 0x50, 0xb2, 0xe0, 0xc1, 0x40, 0xb2, - 0xe2, 0x53, 0x30, 0x04, 0x1a, 0xff, 0xff, 0xf9, - 0xe5, 0x9f, 0xf0, 0x4c, 0xe2, 0x03, 0x40, 0x0f, - 0xe0, 0x53, 0x40, 0x04, 0x0a, 0x00, 0x00, 0x0a, - 0xe9, 0x2d, 0x00, 0xc4, 0xe1, 0xa0, 0x20, 0x03, - 0xe1, 0xa0, 0x30, 0x04, 0xe8, 0xb0, 0x00, 0xf0, - 0xe8, 0xa1, 0x00, 0xf0, 0xe2, 0x53, 0x30, 0x10, - 0x1a, 0xff, 0xff, 0xfb, 0xe1, 0xa0, 0x30, 0x02, - 0xe8, 0xbd, 0x00, 0xc4, 0xe2, 0x13, 0x30, 0x0f, - 0x0a, 0x00, 0x00, 0x03, 0xe4, 0x90, 0x40, 0x04, - 0xe4, 0x81, 0x40, 0x04, 0xe2, 0x53, 0x30, 0x04, - 0x1a, 0xff, 0xff, 0xfb, 0xe5, 0x9f, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0x38, 0x58, - 0x2e, 0x02, 0x37, 0xfc, 0x2e, 0x02, 0x38, 0x2c, - 0xe9, 0x2d, 0x00, 0x38, 0xe3, 0x52, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x3f, 0xe3, 0xe0, 0x30, 0x03, - 0xe0, 0x12, 0x30, 0x03, 0x0a, 0x00, 0x00, 0x30, - 0xe2, 0x10, 0x30, 0x01, 0x0a, 0x00, 0x00, 0x03, - 0xe4, 0xd0, 0x30, 0x01, 0xe4, 0xc1, 0x30, 0x01, - 0xe2, 0x52, 0x20, 0x01, 0x0a, 0x00, 0x00, 0x36, - 0xe2, 0x10, 0x30, 0x02, 0x0a, 0x00, 0x00, 0x05, - 0xe0, 0xd0, 0x30, 0xb2, 0xe1, 0xa0, 0x44, 0x23, - 0xe4, 0xc1, 0x40, 0x01, 0xe4, 0xc1, 0x30, 0x01, - 0xe2, 0x52, 0x20, 0x02, 0x0a, 0x00, 0x00, 0x2e, - 0xe3, 0xe0, 0x30, 0x03, 0xe0, 0x12, 0x30, 0x03, - 0x0a, 0x00, 0x00, 0x1f, 0xe2, 0x11, 0x40, 0x01, - 0x0a, 0x00, 0x00, 0x19, 0xe2, 0x11, 0x40, 0x02, - 0x1a, 0x00, 0x00, 0x0b, 0xe2, 0x41, 0x10, 0x01, - 0xe5, 0x91, 0x50, 0x00, 0xe1, 0xa0, 0x5c, 0x25, - 0xe1, 0xa0, 0x5c, 0x05, 0xe5, 0x9f, 0xf0, 0xa8, - 0xe5, 0x91, 0x40, 0x00, 0xe1, 0xa0, 0x44, 0x04, - 0xe1, 0xa0, 0x44, 0x24, 0xe1, 0x85, 0x50, 0x04, - 0xe5, 0x81, 0x50, 0x00, 0xe2, 0x81, 0x10, 0x01, - 0xea, 0x00, 0x00, 0x0f, 0xe2, 0x41, 0x10, 0x03, - 0xe5, 0x91, 0x50, 0x00, 0xe1, 0xa0, 0x54, 0x25, - 0xe1, 0xa0, 0x54, 0x05, 0xe5, 0x9f, 0xf0, 0x7c, - 0xe5, 0x91, 0x40, 0x00, 0xe1, 0xa0, 0x4c, 0x04, - 0xe1, 0xa0, 0x4c, 0x24, 0xe1, 0x85, 0x50, 0x04, - 0xe5, 0x81, 0x50, 0x00, 0xe2, 0x81, 0x10, 0x03, - 0xea, 0x00, 0x00, 0x03, 0xe2, 0x11, 0x40, 0x02, - 0x0a, 0x00, 0x00, 0x00, 0xe5, 0x9f, 0xf0, 0x5c, - 0xe5, 0x9f, 0xf0, 0x48, 0xe2, 0x12, 0x20, 0x03, - 0x0a, 0x00, 0x00, 0x09, 0xe4, 0xd0, 0x40, 0x01, - 0xe4, 0xc1, 0x40, 0x01, 0xe2, 0x52, 0x20, 0x01, - 0x0a, 0x00, 0x00, 0x05, 0xe4, 0xd0, 0x40, 0x01, - 0xe4, 0xc1, 0x40, 0x01, 0xe2, 0x52, 0x20, 0x01, - 0x0a, 0x00, 0x00, 0x01, 0xe4, 0xd0, 0x40, 0x01, - 0xe4, 0xc1, 0x40, 0x01, 0xe8, 0xbd, 0x00, 0x38, - 0xe3, 0x8e, 0xe0, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe9, 0x2d, 0x01, 0xf8, 0xe5, 0x9f, 0xf0, 0x18, - 0x2e, 0x02, 0x36, 0xcc, 0x2e, 0x02, 0x37, 0x04, - 0x2e, 0x02, 0x37, 0x20, 0x2e, 0x02, 0x36, 0xcc, - 0x2e, 0x02, 0x36, 0xe8, 0x2e, 0x02, 0x37, 0x20, - 0x2e, 0x02, 0x37, 0x04, 0x2e, 0x02, 0x36, 0x7c, - 0xe9, 0x2d, 0x5f, 0xff, 0xe1, 0x4f, 0x00, 0x00, - 0xe9, 0x2d, 0x00, 0x01, 0xe2, 0x8f, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x10, 0x21, 0xff, 0x48, 0x37, - 0x68, 0x00, 0x40, 0x52, 0x42, 0x08, 0xd1, 0x0b, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x07, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x03, - 0x0a, 0x00, 0x42, 0x08, 0xd0, 0x23, 0x32, 0x20, - 0x21, 0x0f, 0x42, 0x08, 0xd1, 0x01, 0x32, 0x10, - 0x09, 0x00, 0x21, 0x01, 0x42, 0x08, 0xd1, 0x08, - 0x1d, 0x12, 0x21, 0x02, 0x42, 0x08, 0xd1, 0x04, - 0x1d, 0x12, 0x21, 0x04, 0x42, 0x08, 0xd1, 0x00, - 0x1d, 0x12, 0x48, 0x25, 0x68, 0x00, 0xb4, 0x01, - 0x08, 0x90, 0x21, 0x01, 0x40, 0x81, 0x48, 0x21, - 0x60, 0x01, 0x48, 0x1d, 0x58, 0x82, 0x48, 0x01, - 0x46, 0x86, 0x47, 0x10, 0x2e, 0x02, 0x39, 0x35, - 0xbc, 0x02, 0x48, 0x1d, 0x60, 0x01, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe8, 0xbd, 0x00, 0x01, - 0xe1, 0x69, 0xf0, 0x00, 0xe8, 0xbd, 0x5f, 0xff, - 0xe2, 0x5e, 0xf0, 0x04, 0x48, 0x12, 0x21, 0x20, - 0x4a, 0x12, 0x60, 0x02, 0x1d, 0x00, 0x1e, 0x49, - 0xd1, 0xfb, 0x20, 0x00, 0x47, 0x70, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x46, 0x73, 0x49, 0x0e, - 0x60, 0x08, 0x20, 0x00, 0x47, 0x18, 0x46, 0x73, - 0x49, 0x0c, 0x60, 0x08, 0x20, 0x00, 0x47, 0x18, - 0x46, 0x73, 0x48, 0x0b, 0x68, 0x00, 0x47, 0x18, - 0x46, 0x73, 0x49, 0x09, 0x60, 0x08, 0x47, 0x18, - 0x46, 0x73, 0x4a, 0x03, 0x00, 0x80, 0x18, 0x12, - 0x68, 0x10, 0x60, 0x11, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x3b, 0xa4, 0x2e, 0x02, 0x39, 0x64, - 0x66, 0x00, 0x00, 0x10, 0x66, 0x00, 0x00, 0x14, - 0x66, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x1c, - 0xe9, 0x2d, 0x5f, 0xf0, 0xe1, 0x4f, 0x40, 0x00, - 0xe3, 0x14, 0x00, 0x20, 0x11, 0x5e, 0x40, 0xb2, - 0x13, 0xc4, 0x4c, 0xff, 0x05, 0x1e, 0x40, 0x04, - 0x03, 0xc4, 0x44, 0xff, 0xe5, 0x9f, 0x50, 0x14, - 0xe7, 0x95, 0x51, 0x04, 0xe5, 0x9f, 0xe0, 0x00, - 0xe1, 0x2f, 0xff, 0x15, 0x2e, 0x02, 0x39, 0xe4, - 0xe8, 0xbd, 0x5f, 0xf0, 0xe1, 0xb0, 0xf0, 0x0e, - 0x2e, 0x08, 0x20, 0x68, 0x00, 0x00, 0x00, 0xc0, - 0x46, 0x73, 0x47, 0x78, 0xe1, 0x0f, 0x10, 0x00, - 0xe3, 0x81, 0x00, 0x80, 0xe1, 0x29, 0xf0, 0x00, - 0xe2, 0x01, 0x00, 0x80, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x10, 0x00, 0xe3, 0x81, 0x00, 0x80, - 0xe1, 0x69, 0xf0, 0x00, 0xe2, 0x01, 0x00, 0x80, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x0f, 0x10, 0x00, - 0xe3, 0x81, 0x00, 0x40, 0xe1, 0x29, 0xf0, 0x00, - 0xe2, 0x01, 0x00, 0x40, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x10, 0x00, 0xe3, 0x81, 0x00, 0x40, - 0xe1, 0x69, 0xf0, 0x00, 0xe2, 0x01, 0x00, 0x40, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x0f, 0x00, 0x00, - 0xe3, 0xc0, 0x00, 0x80, 0xe1, 0x29, 0xf0, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x80, - 0xe1, 0x69, 0xf0, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x0f, 0x00, 0x00, - 0xe3, 0xc0, 0x00, 0x40, 0xe1, 0x29, 0xf0, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x40, - 0xe1, 0x69, 0xf0, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x49, 0x02, - 0x60, 0x08, 0x20, 0x00, 0x46, 0x9f, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x46, 0x73, 0x49, 0x02, - 0x60, 0x08, 0x20, 0x00, 0x46, 0x9f, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x04, 0x46, 0x73, 0x48, 0x03, - 0x68, 0x00, 0x47, 0x18, 0x46, 0x73, 0x49, 0x01, - 0x60, 0x08, 0x47, 0x18, 0x66, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x46, 0x6c, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x50, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x02, 0xd0, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0xb1, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90, 0x85, - 0x00, 0x00, 0xa6, 0xee, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x02, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xa0, - 0x00, 0x08, 0x08, 0x28, 0x00, 0x08, 0x88, 0x68, - 0x00, 0x08, 0xa0, 0x98, 0x00, 0x08, 0x88, 0x68, - 0x00, 0x08, 0x28, 0x98, 0x00, 0x08, 0xac, 0xf4, - 0x00, 0x08, 0xb8, 0x7c, 0x00, 0x02, 0x02, 0x88, - 0x00, 0x02, 0x08, 0x22, 0x00, 0x02, 0x88, 0xaa, - 0x00, 0x02, 0x22, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x24, - 0x00, 0x04, 0x04, 0x24, 0x00, 0x04, 0x28, 0x6c, - 0x00, 0x04, 0x28, 0x6c, 0x00, 0x01, 0x10, 0x44, - 0x00, 0x01, 0x20, 0x44, 0x00, 0x01, 0x11, 0xaa, - 0x00, 0x01, 0x88, 0x55, 0x00, 0x01, 0x44, 0xaa, - 0x00, 0x01, 0x44, 0x55, 0x00, 0x20, 0x80, 0xa0, - 0x00, 0x20, 0x80, 0xc0, 0x00, 0x20, 0x20, 0xa0, - 0x00, 0x20, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, - 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x13, 0x16, - 0x1a, 0x1b, 0x1d, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x13, 0x16, - 0x1a, 0x1b, 0x1d, 0x22, 0x10, 0x10, 0x16, 0x18, - 0x1b, 0x1d, 0x22, 0x25, 0x13, 0x16, 0x1a, 0x1b, - 0x1d, 0x22, 0x22, 0x26, 0x16, 0x16, 0x1a, 0x1b, - 0x1d, 0x22, 0x25, 0x28, 0x16, 0x1a, 0x1b, 0x1d, - 0x20, 0x23, 0x28, 0x30, 0x1a, 0x1b, 0x1d, 0x20, - 0x23, 0x28, 0x30, 0x3a, 0x1a, 0x1b, 0x1d, 0x22, - 0x26, 0x2e, 0x38, 0x45, 0x1b, 0x1d, 0x23, 0x26, - 0x2e, 0x38, 0x45, 0x53, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, - 0x00, 0x1b, 0x08, 0x00, 0x00, 0x1f, 0xde, 0x00, - 0x00, 0x00, 0x50, 0x00, 0x00, 0x09, 0xce, 0x00, - 0x00, 0x13, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x05, 0x28, 0x20, 0x01, 0x00, 0x00, 0x02, 0x40, - 0x71, 0x01, 0x00, 0x68, 0xe0, 0x7f, 0xb0, 0x7f, - 0x60, 0x40, 0xe0, 0x1d, 0x90, 0x10, 0xb4, 0x81, - 0xe8, 0xc0, 0xe0, 0xc2, 0x90, 0x18, 0x00, 0x8a, - 0x70, 0xc0, 0x0f, 0x87, 0xe3, 0xe8, 0xc0, 0x00, - 0x70, 0x40, 0xe0, 0x01, 0xe0, 0x86, 0x00, 0x26, - 0xd0, 0x28, 0xe0, 0x0e, 0xd0, 0x0e, 0x0f, 0x0b, - 0x70, 0x1d, 0xe0, 0x67, 0x0f, 0x87, 0x0f, 0x87, - 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, 0x02, 0x20, - 0xd0, 0x01, 0xe0, 0x25, 0x0f, 0x45, 0x6f, 0x81, - 0xdf, 0xa6, 0xe0, 0x36, 0xe1, 0x30, 0xa0, 0x37, - 0xc0, 0x00, 0xe0, 0x26, 0x00, 0x33, 0xdf, 0x00, - 0xe0, 0x32, 0x0f, 0xc5, 0x0f, 0x87, 0x00, 0x27, - 0xd0, 0x4c, 0xe0, 0x21, 0x00, 0x33, 0xdf, 0x60, - 0x00, 0x27, 0xd0, 0x56, 0x60, 0x01, 0xe0, 0x2d, - 0x03, 0xa0, 0xd0, 0x41, 0xa0, 0x78, 0x00, 0x60, - 0xd0, 0x41, 0xa0, 0x77, 0x00, 0x22, 0xd0, 0x58, - 0xa0, 0x76, 0x00, 0x21, 0xd0, 0x7c, 0x00, 0x4a, - 0xd0, 0x72, 0x70, 0x40, 0x00, 0x06, 0x0f, 0x87, - 0x00, 0x22, 0xdc, 0xf8, 0xf0, 0x4a, 0xe1, 0x70, - 0x07, 0xef, 0xdd, 0xbf, 0x4f, 0x36, 0x1d, 0x99, - 0x4d, 0x80, 0x10, 0x18, 0xdd, 0x50, 0x60, 0x35, - 0xdd, 0x72, 0xdd, 0x10, 0x3d, 0xb4, 0xec, 0x57, - 0x2d, 0x36, 0x1d, 0x03, 0xbd, 0x04, 0xe4, 0x2b, - 0x01, 0x46, 0x00, 0x06, 0xac, 0xf6, 0x80, 0x3f, - 0x0d, 0x0a, 0x10, 0x02, 0x7d, 0x40, 0x10, 0x1e, - 0xb0, 0x20, 0xbc, 0xe0, 0x00, 0x06, 0x00, 0xc6, - 0xe0, 0x52, 0xb7, 0x60, 0xb7, 0x60, 0xc0, 0x5d, - 0x30, 0x5f, 0xe4, 0x72, 0xc7, 0x5e, 0x00, 0xed, - 0xd0, 0x28, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, - 0xc0, 0x1d, 0x30, 0x1c, 0xf8, 0x7e, 0x00, 0x21, - 0xd0, 0x01, 0x00, 0x26, 0xd0, 0x78, 0xa0, 0x38, - 0x80, 0x3f, 0x70, 0x01, 0xb0, 0x3f, 0x60, 0x01, - 0x0f, 0x87, 0x80, 0x34, 0x03, 0xef, 0xd8, 0x3f, - 0xa8, 0x38, 0x01, 0x35, 0xdc, 0x33, 0xe0, 0x46, - 0xc0, 0x1c, 0xe4, 0xa5, 0x97, 0x2e, 0x30, 0x1c, - 0xe8, 0x8e, 0x00, 0x21, 0xd0, 0x00, 0xa0, 0x38, - 0xc0, 0x5d, 0x00, 0x23, 0xd0, 0x00, 0x30, 0x40, - 0x30, 0x5e, 0xe4, 0x99, 0x20, 0x5e, 0xc0, 0x01, - 0x30, 0x1c, 0xec, 0xa4, 0xe0, 0x9d, 0x20, 0x5f, - 0xc0, 0x1c, 0x30, 0x01, 0xf4, 0xa5, 0xc0, 0x1c, - 0x30, 0x1d, 0xec, 0xa4, 0xe4, 0xa5, 0x90, 0x38, - 0x00, 0x1b, 0xe8, 0xa5, 0xa0, 0x66, 0xb1, 0x3f, - 0xe4, 0xb3, 0xe8, 0xb1, 0xc0, 0x4b, 0x30, 0x44, - 0xf8, 0xb3, 0x60, 0x45, 0xb1, 0x7c, 0x01, 0x20, - 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, 0x72, 0xc5, - 0x00, 0x06, 0x90, 0x55, 0xd0, 0x01, 0x00, 0x40, - 0xa0, 0x55, 0x0f, 0x87, 0x01, 0x46, 0x00, 0x06, - 0x03, 0xef, 0xd0, 0x3f, 0xa0, 0x38, 0xb0, 0x01, - 0xa0, 0x37, 0x80, 0x3f, 0x82, 0x34, 0x80, 0x3f, - 0xf2, 0x1a, 0x80, 0x34, 0x80, 0x3f, 0xf2, 0x1a, - 0xd8, 0x00, 0xd8, 0x40, 0xd8, 0x80, 0xd8, 0xc0, - 0xd9, 0x00, 0xd9, 0x40, 0xd9, 0x80, 0xd9, 0xc0, - 0xda, 0x00, 0xda, 0x40, 0xda, 0x80, 0xda, 0xc0, - 0xdb, 0x00, 0xdb, 0x40, 0xdb, 0x80, 0xdb, 0xc0, - 0xdc, 0x00, 0xdc, 0x40, 0xdc, 0x80, 0xdc, 0xc0, - 0xdd, 0x00, 0xdd, 0x40, 0xdd, 0x80, 0xdd, 0xc0, - 0xde, 0x00, 0xde, 0x40, 0xde, 0x80, 0xde, 0xc0, - 0xdf, 0x00, 0xdf, 0x40, 0xdf, 0x80, 0xdf, 0xc0, - 0xde, 0x80, 0xde, 0xc1, 0x00, 0x28, 0xd0, 0x60, - 0x6e, 0x81, 0x80, 0x00, 0x80, 0x05, 0x00, 0xe3, - 0xd1, 0x88, 0x00, 0x73, 0xd5, 0x80, 0x60, 0x06, - 0xb1, 0xbc, 0x00, 0xfa, 0xd0, 0x80, 0x60, 0x06, - 0x00, 0x26, 0xd0, 0x6c, 0x6e, 0x81, 0x04, 0xf4, - 0xdc, 0x00, 0x00, 0xee, 0xd1, 0x94, 0x60, 0x06, - 0x00, 0xed, 0xd0, 0x50, 0x6e, 0x81, 0x00, 0x22, - 0xd0, 0x70, 0x6e, 0x81, 0x00, 0xee, 0xd0, 0x74, - 0x6e, 0x81, 0xd0, 0x4c, 0x6e, 0x81, 0xd0, 0x02, - 0x00, 0xef, 0xd0, 0x6c, 0x60, 0x01, 0xd0, 0x03, - 0x00, 0xef, 0xd0, 0x70, 0x60, 0x01, 0x00, 0xe0, - 0xd0, 0x48, 0xd0, 0x02, 0x60, 0x01, 0x00, 0x32, - 0xdf, 0x20, 0xa0, 0x1c, 0x00, 0x21, 0xd0, 0x60, - 0xa0, 0x76, 0x00, 0x34, 0xd5, 0x70, 0x80, 0x3f, - 0x00, 0x23, 0xd0, 0x5c, 0x00, 0x4a, 0xd0, 0x72, - 0x70, 0x40, 0x00, 0x06, 0x00, 0x22, 0xd1, 0xa4, - 0x6e, 0xc6, 0xd0, 0x58, 0x6e, 0xc1, 0xd0, 0xc9, - 0x00, 0xed, 0xd0, 0x54, 0x60, 0xc1, 0x00, 0x22, - 0xd0, 0x40, 0x60, 0xc1, 0x00, 0x22, 0xd0, 0x60, - 0x60, 0xc1, 0x82, 0x34, 0x80, 0x3f, 0xd6, 0xd9, - 0x01, 0x2d, 0xd6, 0x0c, 0x16, 0x08, 0xd0, 0x55, - 0xd0, 0x2c, 0x60, 0x40, 0xd0, 0x70, 0x00, 0xfb, - 0xd1, 0x00, 0x60, 0x01, 0x00, 0x2b, 0xd4, 0x10, - 0x00, 0x29, 0xd4, 0x40, 0x00, 0x2b, 0xd0, 0x90, - 0xc0, 0xc2, 0xd1, 0x18, 0xd1, 0x44, 0xa1, 0x50, - 0x00, 0x21, 0xd0, 0xb6, 0xd0, 0xd7, 0x00, 0x29, - 0xd0, 0x04, 0x64, 0x00, 0xb0, 0x3c, 0x64, 0x40, - 0x80, 0x34, 0x80, 0x3f, 0xd0, 0x40, 0x00, 0x35, - 0xd0, 0x00, 0x60, 0x01, 0xd0, 0x48, 0x6e, 0x81, - 0xd0, 0x44, 0x6e, 0x81, 0x00, 0x64, 0xd1, 0x80, - 0x6e, 0x86, 0x01, 0x3c, 0xd2, 0x39, 0xe0, 0x46, - 0xd0, 0x00, 0xd0, 0x40, 0xd0, 0x80, 0xd0, 0xc0, - 0xd1, 0x00, 0xd1, 0x40, 0xd1, 0x80, 0xd1, 0xc0, - 0xd2, 0x00, 0xd2, 0x40, 0xd2, 0x80, 0xd2, 0xc0, - 0xd3, 0x00, 0xd3, 0x40, 0xd3, 0x80, 0xd3, 0xc0, - 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, - 0xd5, 0x00, 0xd5, 0x40, 0xd5, 0x80, 0xd5, 0xc0, - 0xd6, 0x00, 0xd6, 0x40, 0xd6, 0x80, 0xd6, 0xc0, - 0xd7, 0x00, 0xd7, 0x40, 0xd7, 0x80, 0xd7, 0xc0, - 0x0f, 0xc5, 0x50, 0x00, 0x01, 0x46, 0x00, 0x06, - 0xde, 0x80, 0xde, 0xc1, 0x03, 0x2f, 0xd0, 0x33, - 0xa0, 0x38, 0xb0, 0x01, 0xa0, 0x37, 0x80, 0x3f, - 0x08, 0x20, 0xdf, 0x00, 0x82, 0x34, 0x80, 0x3f, - 0x00, 0xee, 0xd0, 0x08, 0x77, 0xc0, 0xb0, 0x04, - 0x77, 0x80, 0xb0, 0x04, 0xc0, 0x5f, 0x30, 0x5e, - 0x60, 0x40, 0xd7, 0x00, 0xb7, 0x01, 0x80, 0x34, - 0x80, 0x3f, 0x00, 0x60, 0xd0, 0x80, 0x00, 0xec, - 0xd0, 0x40, 0x60, 0x81, 0xb0, 0x7c, 0x60, 0x81, - 0x00, 0xa0, 0xd0, 0x80, 0xb0, 0x74, 0x60, 0x81, - 0xb0, 0x7c, 0x60, 0x81, 0x00, 0x68, 0xd0, 0x80, - 0x6e, 0x82, 0x00, 0xef, 0xd0, 0x8c, 0x6e, 0x82, - 0x00, 0x06, 0xd0, 0x11, 0xa0, 0x38, 0x80, 0x3f, - 0x08, 0x20, 0xd0, 0x40, 0x10, 0x48, 0xa0, 0x4a, - 0xa0, 0x5b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, - 0xa0, 0x27, 0xa0, 0x0a, 0x90, 0x4d, 0x0f, 0xff, - 0xd8, 0x1f, 0x40, 0x40, 0xa0, 0x4d, 0x80, 0x0a, - 0x80, 0x07, 0x80, 0x1b, 0x80, 0x27, 0x00, 0x60, - 0xd0, 0x00, 0xa0, 0x09, 0x80, 0x28, 0x01, 0x20, - 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, - 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, - 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x29, - 0x80, 0x2b, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, - 0x80, 0x3f, 0x01, 0xb0, 0xd0, 0x10, 0xa0, 0x37, - 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, - 0x00, 0xea, 0xd0, 0x00, 0xd0, 0x4e, 0x0f, 0x0b, - 0x70, 0x40, 0x00, 0x06, 0x00, 0x21, 0xd0, 0x88, - 0x00, 0xe1, 0xd0, 0x60, 0x60, 0x81, 0x00, 0x2b, - 0xd0, 0x80, 0x00, 0xe0, 0xd0, 0x6c, 0x60, 0x81, - 0xb0, 0x7c, 0x00, 0x29, 0xd0, 0x80, 0x60, 0x81, - 0xb0, 0x7c, 0xd0, 0x82, 0x60, 0x81, 0xb0, 0x7c, - 0xd0, 0x85, 0x60, 0x81, 0xb0, 0x7c, 0x03, 0xaa, - 0xd0, 0x98, 0x60, 0x81, 0xb0, 0x7c, 0x6e, 0x81, - 0x00, 0x27, 0xd0, 0x40, 0x6e, 0x81, 0xb0, 0x7c, - 0x6e, 0x81, 0xb0, 0x7c, 0x6e, 0x81, 0x00, 0x27, - 0xd1, 0x90, 0x6e, 0x86, 0x00, 0x21, 0xd1, 0xb8, - 0x6e, 0x86, 0x00, 0x66, 0xd1, 0xa0, 0xd0, 0x00, - 0x01, 0x64, 0xd0, 0x58, 0x30, 0x01, 0x60, 0x06, - 0x00, 0xed, 0xd1, 0xbc, 0x6e, 0x86, 0x00, 0xec, - 0xd1, 0xb8, 0x6e, 0x86, 0xb1, 0x84, 0x6e, 0x86, - 0x00, 0xee, 0xd1, 0x84, 0x70, 0x46, 0x00, 0x65, - 0xd1, 0x94, 0x60, 0x46, 0x00, 0x64, 0xd1, 0xbc, - 0x6e, 0x86, 0x00, 0x65, 0xd1, 0x80, 0x6e, 0x86, - 0xb1, 0xbc, 0x6e, 0x86, 0xb1, 0xbc, 0x6e, 0x86, - 0x00, 0xed, 0xd1, 0xa8, 0x6e, 0x86, 0xd0, 0x0e, - 0xb1, 0xbc, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, - 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x06, 0x00, 0x28, - 0xd1, 0xa4, 0x6e, 0x86, 0x00, 0x27, 0xd1, 0x98, - 0x6e, 0x86, 0x00, 0x64, 0xd1, 0xa4, 0x6e, 0x86, - 0xd2, 0x01, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, - 0x00, 0x64, 0xd1, 0x80, 0x70, 0x46, 0x6e, 0x86, - 0x00, 0xef, 0xd1, 0x98, 0x70, 0x86, 0x08, 0x20, - 0xd0, 0xcf, 0x30, 0xc1, 0xea, 0x42, 0xd0, 0x81, - 0x00, 0x21, 0xd1, 0xa8, 0x60, 0x86, 0x00, 0xed, - 0xd1, 0xa0, 0x6e, 0xc6, 0x00, 0x65, 0xd1, 0x98, - 0x6e, 0xc6, 0x00, 0x22, 0xd0, 0x00, 0xa0, 0x05, - 0x80, 0x40, 0x00, 0xc6, 0x01, 0x73, 0xd4, 0x3d, - 0xe0, 0x46, 0x50, 0x00, 0x08, 0x20, 0xd0, 0x00, - 0x5f, 0x00, 0x00, 0x64, 0xd0, 0x60, 0x70, 0xc1, - 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0xb0, 0x7c, - 0x71, 0xc1, 0xc0, 0x87, 0x30, 0x86, 0xf9, 0x83, - 0x10, 0xee, 0xe9, 0x76, 0x10, 0xe1, 0xe9, 0x76, - 0xe2, 0x57, 0x00, 0x63, 0xd0, 0xbf, 0x72, 0x06, - 0xb1, 0xbc, 0x41, 0x82, 0x02, 0x1b, 0xe9, 0x8d, - 0x72, 0x86, 0xb1, 0xbc, 0x41, 0x82, 0xd0, 0x75, - 0x30, 0x48, 0xe9, 0xfe, 0xb0, 0x7f, 0xea, 0x00, - 0x02, 0x1c, 0xe9, 0x96, 0x15, 0xa3, 0xea, 0x57, - 0x10, 0xf0, 0xe9, 0x9a, 0x10, 0xfa, 0xf9, 0xa1, - 0x15, 0xa3, 0xea, 0x57, 0x00, 0x21, 0xd0, 0x4c, - 0x70, 0x41, 0x10, 0x61, 0xfa, 0x57, 0x00, 0xed, - 0xd0, 0x08, 0x70, 0x40, 0xd0, 0x85, 0x40, 0x42, - 0x60, 0x40, 0x00, 0x64, 0xd0, 0x64, 0x62, 0x01, - 0x12, 0x2b, 0xe9, 0xeb, 0x12, 0x3b, 0xe9, 0xd5, - 0x00, 0xec, 0xd0, 0x40, 0x61, 0x81, 0x12, 0x2d, - 0xe9, 0xbf, 0x12, 0x30, 0xe9, 0xd4, 0x12, 0x36, - 0xe9, 0xd4, 0x12, 0x3a, 0xe9, 0xd4, 0xd0, 0x62, - 0x30, 0x48, 0xe9, 0xf2, 0x12, 0x2e, 0xe9, 0xf9, - 0xe1, 0x76, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x40, - 0xd0, 0x85, 0x40, 0x42, 0x60, 0x40, 0xb0, 0x08, - 0x00, 0x21, 0xd0, 0x41, 0x60, 0x40, 0x00, 0x64, - 0xd0, 0x60, 0x62, 0x01, 0xf2, 0x5a, 0x00, 0xed, - 0xd0, 0x20, 0xd0, 0x41, 0x60, 0x40, 0x10, 0xe1, - 0xea, 0x3a, 0xe2, 0x57, 0xe2, 0x53, 0x10, 0xee, - 0xf9, 0xe9, 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, - 0x97, 0x2e, 0xc7, 0x5c, 0xa7, 0x66, 0x81, 0x34, - 0x80, 0x3f, 0x00, 0x21, 0xd0, 0x01, 0xa0, 0x38, - 0x00, 0xc6, 0x00, 0x21, 0xd0, 0x15, 0x0b, 0x09, - 0x00, 0x4d, 0xb0, 0x01, 0xed, 0xe5, 0xd2, 0x1a, - 0xe1, 0xec, 0xf1, 0x18, 0x00, 0xec, 0xd0, 0x40, - 0x71, 0x81, 0xd0, 0x4e, 0x60, 0x46, 0xe2, 0x54, - 0xc0, 0x0a, 0x10, 0x06, 0x52, 0x80, 0x00, 0xed, - 0xd0, 0x40, 0x62, 0x81, 0xe2, 0x53, 0x00, 0x64, - 0xd0, 0x60, 0x62, 0x01, 0xf2, 0x5a, 0xe1, 0x70, - 0x12, 0xa3, 0xf6, 0x57, 0x15, 0xa1, 0xfa, 0x57, - 0x12, 0xa0, 0xea, 0x23, 0x00, 0x65, 0xd1, 0x1c, - 0xd0, 0x75, 0x30, 0x48, 0xea, 0x0a, 0xb1, 0x3c, - 0x71, 0x04, 0x11, 0x20, 0xfa, 0x11, 0x00, 0xec, - 0xd0, 0x40, 0x61, 0x81, 0xe2, 0x57, 0x12, 0xa1, - 0xea, 0x33, 0x00, 0xe2, 0xd0, 0x60, 0x70, 0x01, - 0xb0, 0x7c, 0x70, 0x41, 0x10, 0x0c, 0x50, 0x40, - 0x0c, 0x30, 0xd0, 0x00, 0x31, 0x01, 0xee, 0x21, - 0x21, 0x00, 0xe6, 0x57, 0xe2, 0x23, 0x31, 0x00, - 0xfe, 0x57, 0xd0, 0x75, 0x30, 0x48, 0xea, 0x28, - 0xf2, 0x5a, 0xe2, 0x0d, 0x00, 0xec, 0xd0, 0x40, - 0x71, 0x81, 0x00, 0x63, 0xd1, 0x3f, 0xb1, 0xbc, - 0x41, 0x84, 0x61, 0x81, 0xd0, 0x50, 0x60, 0x46, - 0xe2, 0x57, 0x00, 0xed, 0xd0, 0x7c, 0x70, 0x41, - 0x08, 0x20, 0xd0, 0x00, 0x10, 0x08, 0xe2, 0x1c, - 0xd2, 0x84, 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x46, 0x82, 0x34, - 0x80, 0x3f, 0xc7, 0x5e, 0x97, 0x2e, 0x81, 0x34, - 0x80, 0x3f, 0x02, 0xe8, 0xd0, 0x30, 0xa0, 0x37, - 0xa0, 0x38, 0x08, 0x20, 0xdf, 0x00, 0x80, 0x73, - 0x80, 0x3f, 0x00, 0xc6, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0xf2, 0x5a, 0x00, 0x64, 0xd0, 0x60, - 0x62, 0x01, 0x02, 0x3c, 0xdc, 0x89, 0xe0, 0x46, - 0x00, 0x28, 0xd0, 0x64, 0x70, 0x81, 0x00, 0x22, - 0xd0, 0x00, 0x50, 0x80, 0x60, 0x81, 0x0f, 0xc5, - 0x50, 0x00, 0x50, 0x00, 0x00, 0xed, 0xd1, 0xa4, - 0x72, 0x86, 0x00, 0xef, 0xd1, 0x90, 0x70, 0x46, - 0x10, 0x5c, 0x10, 0x65, 0xed, 0x7d, 0xd0, 0x46, - 0xc0, 0x0a, 0x10, 0x40, 0x60, 0x46, 0x00, 0x22, - 0xd0, 0x73, 0x30, 0x54, 0xe9, 0x8e, 0x12, 0xa4, - 0xe9, 0xb5, 0x15, 0x20, 0xe9, 0xc0, 0xb0, 0x7b, - 0xe9, 0xc3, 0xb0, 0x41, 0xe9, 0xc9, 0xc0, 0x54, - 0x10, 0x5c, 0x10, 0x6e, 0xe9, 0xc6, 0xe1, 0xb5, - 0x00, 0x28, 0xd1, 0xb0, 0xd0, 0x00, 0x60, 0x06, - 0x12, 0xa4, 0xf9, 0xb2, 0x00, 0xed, 0xd1, 0x9c, - 0x62, 0x86, 0xd2, 0x80, 0x00, 0xed, 0xd1, 0xa4, - 0x62, 0x86, 0xd0, 0x02, 0x00, 0xec, 0xd1, 0xbc, - 0x60, 0x06, 0x00, 0x64, 0xd1, 0xa0, 0x72, 0x06, - 0x12, 0x21, 0xf9, 0xa6, 0xd2, 0x0d, 0x62, 0x06, - 0x00, 0xed, 0xd1, 0xa0, 0x61, 0x86, 0xd0, 0x0e, - 0x00, 0xed, 0xd1, 0xac, 0x60, 0x06, 0xb1, 0xbc, - 0x60, 0x06, 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x06, - 0x01, 0x7e, 0xd2, 0x32, 0xe1, 0xcb, 0x01, 0x46, - 0x90, 0x49, 0x00, 0x60, 0xd0, 0x00, 0x50, 0x40, - 0xa0, 0x49, 0x80, 0x3f, 0x00, 0xc6, 0x0c, 0x09, - 0x05, 0x0d, 0xe1, 0x70, 0x01, 0xbf, 0xd0, 0x41, - 0xe1, 0xcb, 0x01, 0xbb, 0xda, 0x10, 0xe1, 0xcb, - 0x01, 0xbd, 0xda, 0x0b, 0xe1, 0xcb, 0x03, 0xb9, - 0xd8, 0x10, 0x01, 0x46, 0x90, 0x49, 0x00, 0x60, - 0xd1, 0x00, 0x50, 0x44, 0x30, 0x44, 0xa0, 0x49, - 0x80, 0x3f, 0x00, 0xc6, 0xe0, 0x46, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x01, 0xfa, 0xd4, 0x3d, - 0x00, 0x25, 0xdc, 0xd8, 0xf0, 0x4a, 0x00, 0x26, - 0xd0, 0x18, 0xd0, 0x40, 0x60, 0x40, 0x00, 0x28, - 0xd0, 0x24, 0x70, 0x40, 0xd0, 0x82, 0x50, 0x42, - 0x60, 0x40, 0x00, 0xec, 0xd0, 0xa4, 0x70, 0xc2, - 0x10, 0xe0, 0xf9, 0x81, 0x00, 0xec, 0xd1, 0x98, - 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, - 0xe9, 0x8e, 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x81, - 0xd0, 0x40, 0x00, 0xe6, 0xd0, 0x10, 0x60, 0x40, - 0xb0, 0x3c, 0x60, 0x40, 0xb0, 0x3c, 0x60, 0x40, - 0xd0, 0xe0, 0x00, 0xea, 0xd0, 0x40, 0x00, 0xe8, - 0xd0, 0x82, 0x01, 0x46, 0x70, 0x01, 0xb0, 0x7c, - 0x60, 0x02, 0xb0, 0xbc, 0x00, 0x06, 0x00, 0xc6, - 0xb0, 0xc1, 0xed, 0x9b, 0x80, 0x49, 0xd6, 0x44, - 0xd5, 0x43, 0x00, 0xe0, 0xd1, 0x80, 0x00, 0x06, - 0x0b, 0x09, 0x01, 0x0d, 0x0b, 0x09, 0x61, 0x06, - 0xb1, 0xbc, 0x01, 0x4d, 0x09, 0x09, 0x61, 0x46, - 0xb1, 0xbc, 0x00, 0xcd, 0x09, 0x09, 0x10, 0xe4, - 0xed, 0xb8, 0x60, 0xc6, 0xb1, 0xbc, 0x00, 0xcd, - 0x60, 0xc6, 0x00, 0xed, 0xd0, 0x04, 0x70, 0x00, - 0x10, 0x20, 0xf9, 0xd8, 0xd0, 0x0a, 0x40, 0x03, - 0xe9, 0xc9, 0x10, 0xe2, 0xe9, 0xc9, 0x10, 0xe7, - 0xe9, 0xc9, 0x10, 0xe8, 0xf9, 0xd8, 0x01, 0x46, - 0x90, 0x10, 0x00, 0x20, 0xd0, 0x44, 0x50, 0x40, - 0x00, 0xc6, 0xa0, 0x50, 0x00, 0xa0, 0xd0, 0x00, - 0xa0, 0x05, 0x80, 0x40, 0x00, 0xed, 0xd1, 0xa4, - 0xd0, 0x04, 0x60, 0x06, 0x00, 0xee, 0xd1, 0xac, - 0x73, 0x86, 0x10, 0xe3, 0xe5, 0xe3, 0xe9, 0xe8, - 0x00, 0xe7, 0xd0, 0x40, 0x00, 0xae, 0xd0, 0xbb, - 0xe1, 0xec, 0x01, 0x24, 0xd0, 0x6b, 0x00, 0xea, - 0xd0, 0xa6, 0xe1, 0xec, 0x01, 0x21, 0xd0, 0x7b, - 0x00, 0xe8, 0xd0, 0x90, 0x13, 0xa0, 0xf9, 0xef, - 0xc0, 0x42, 0x00, 0xe0, 0xd1, 0xa8, 0x60, 0x46, - 0xb1, 0x98, 0x0b, 0xc9, 0x00, 0x4d, 0x09, 0x09, - 0x10, 0x44, 0x00, 0x8d, 0x20, 0x42, 0x10, 0x5f, - 0x60, 0x46, 0xb1, 0xb8, 0x00, 0x90, 0xea, 0x1c, - 0x0a, 0x89, 0x00, 0x8d, 0x60, 0x86, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, - 0xea, 0x10, 0x00, 0xe8, 0xd1, 0x80, 0xf2, 0xb0, - 0x10, 0x60, 0xfa, 0x1c, 0x08, 0x49, 0x00, 0xe0, - 0xd1, 0xa4, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, - 0xea, 0x20, 0x00, 0xe9, 0xd1, 0x80, 0xf2, 0xb0, - 0x10, 0x60, 0xea, 0x20, 0x00, 0xe0, 0xd1, 0x88, - 0xd0, 0x40, 0x60, 0x46, 0xd0, 0x00, 0x00, 0xe0, - 0xd1, 0xa8, 0x70, 0x46, 0x00, 0xef, 0xd1, 0x9c, - 0x70, 0x86, 0xb0, 0xb0, 0xee, 0x2a, 0xd0, 0x81, - 0x00, 0x90, 0xea, 0x2d, 0x20, 0x01, 0x10, 0x41, - 0x10, 0x9f, 0x10, 0xa0, 0xee, 0x2a, 0x10, 0x1c, - 0x00, 0x65, 0xd1, 0xa8, 0x60, 0x06, 0x01, 0xb4, - 0xd6, 0x3a, 0xe0, 0x46, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x0c, 0x09, - 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, - 0x30, 0x54, 0xe9, 0xea, 0xb0, 0x7d, 0xfa, 0x05, - 0x09, 0x09, 0x01, 0xcd, 0x11, 0xe1, 0xf9, 0xc7, - 0x80, 0x09, 0x80, 0x27, 0x0a, 0x09, 0xd6, 0x45, - 0x00, 0xe1, 0xd1, 0xa0, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, - 0x00, 0x50, 0xe9, 0x91, 0xd4, 0x01, 0xb1, 0xbc, - 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0x00, 0xe0, - 0xd1, 0x80, 0x08, 0x89, 0x00, 0x4d, 0x08, 0x89, - 0x10, 0x4c, 0x71, 0x06, 0x21, 0x01, 0x61, 0x06, - 0xb1, 0xbc, 0x00, 0x4d, 0x0b, 0x49, 0x10, 0x4c, - 0x71, 0x46, 0x21, 0x41, 0x61, 0x46, 0xb1, 0xb0, - 0x00, 0x4d, 0x10, 0x5f, 0x60, 0x46, 0xb1, 0xbc, - 0x0a, 0x09, 0x00, 0x4d, 0x10, 0x4a, 0x70, 0x86, - 0x20, 0x81, 0x60, 0x86, 0x00, 0xe1, 0xd1, 0xac, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x09, 0x49, 0x00, 0x8d, 0x60, 0x86, 0xc0, 0x02, - 0x00, 0xe0, 0xd1, 0xa8, 0x70, 0xc6, 0x10, 0xc0, - 0xd0, 0x20, 0x30, 0x01, 0x10, 0xc0, 0x60, 0xc6, - 0xe1, 0x75, 0x11, 0xe2, 0xf9, 0x75, 0x00, 0xe2, - 0xd1, 0x80, 0x08, 0xc9, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x10, 0x60, 0xf9, 0xd7, 0xb1, 0xb4, - 0xe1, 0xde, 0xd2, 0x03, 0x0a, 0x09, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0xb2, 0x01, 0xf9, 0xd8, - 0x0b, 0xc9, 0x00, 0x4d, 0x10, 0x49, 0x10, 0x56, - 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x89, 0x00, 0x4d, - 0x10, 0x4a, 0x10, 0x56, 0x60, 0x46, 0xe1, 0x75, - 0x0b, 0x2c, 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0x77, - 0x00, 0xe0, 0xd0, 0x6c, 0x00, 0xe0, 0xd1, 0x80, - 0xd0, 0x0a, 0xf1, 0xfe, 0x00, 0xe1, 0xd1, 0xb0, - 0xd0, 0x02, 0xf1, 0xfe, 0x00, 0xe0, 0xd1, 0x80, - 0x76, 0x86, 0xb1, 0xbc, 0x73, 0x46, 0xe2, 0x3c, - 0x70, 0x81, 0x60, 0x86, 0xb1, 0xbc, 0xb0, 0x7c, - 0xb0, 0x01, 0xed, 0xfe, 0x0f, 0xc5, 0x00, 0xe1, - 0xd1, 0xa0, 0x70, 0x46, 0xd0, 0x8f, 0x40, 0x42, - 0x00, 0x25, 0xd0, 0xe0, 0x00, 0x24, 0xd1, 0x20, - 0x10, 0x6a, 0xea, 0x1e, 0x00, 0x66, 0xd0, 0xe0, - 0x00, 0x62, 0xd1, 0x00, 0x10, 0x66, 0xea, 0x1e, - 0x00, 0x6e, 0xd0, 0xc0, 0x10, 0x64, 0xea, 0x1e, - 0x00, 0x2b, 0xd0, 0xd0, 0x00, 0x29, 0xd1, 0x00, - 0x00, 0xe0, 0xd1, 0x80, 0x76, 0x86, 0x16, 0xa0, - 0xe9, 0xee, 0x30, 0xda, 0xe5, 0xee, 0xb1, 0xbc, - 0x73, 0x46, 0x13, 0x60, 0xe9, 0xee, 0x31, 0x0d, - 0xe5, 0xee, 0xd0, 0x82, 0xb1, 0xbc, 0x70, 0x46, - 0x10, 0x60, 0xe9, 0xee, 0xb0, 0x81, 0xee, 0x2c, - 0x00, 0xe0, 0xd0, 0x40, 0x00, 0xe0, 0xd1, 0xac, - 0xd0, 0x0a, 0xf1, 0xfe, 0x00, 0xe1, 0xd0, 0x70, - 0xd0, 0x02, 0xf1, 0xfe, 0x00, 0xec, 0xd1, 0x98, - 0xd0, 0x40, 0x60, 0x46, 0x00, 0xe0, 0xd0, 0x8c, - 0x70, 0x82, 0x00, 0x21, 0xd0, 0x70, 0x60, 0x81, - 0xd0, 0x40, 0x00, 0x25, 0xd0, 0x20, 0x30, 0x1a, - 0xfa, 0x50, 0x00, 0x24, 0xd0, 0x20, 0x30, 0x0d, - 0xfa, 0x50, 0xd0, 0x41, 0x00, 0x21, 0xd1, 0x84, - 0x60, 0x46, 0xb6, 0xb1, 0x16, 0x9c, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x00, 0xec, - 0xd0, 0xa8, 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x77, - 0x00, 0xec, 0xd1, 0x9c, 0xd0, 0x41, 0x60, 0x46, - 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x84, 0xd0, 0x40, - 0x60, 0x46, 0xe1, 0x77, 0x0b, 0x49, 0x00, 0xe2, - 0xd1, 0xa0, 0x00, 0x4d, 0x10, 0x5f, 0x00, 0x6f, - 0xd0, 0xff, 0x40, 0x43, 0x60, 0x46, 0xb1, 0xbc, - 0x0b, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x61, - 0xf9, 0x9b, 0xd3, 0xc2, 0x00, 0xec, 0xd1, 0xbc, - 0x63, 0xc6, 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, - 0xe5, 0x9c, 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, - 0xd0, 0x72, 0x30, 0x54, 0xf9, 0xa9, 0x0b, 0xa0, - 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0xa0, 0x00, 0xec, - 0xd1, 0x9c, 0xd0, 0x40, 0x60, 0x46, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x0b, 0x09, 0x00, 0x4d, - 0x0b, 0x09, 0x00, 0x4d, 0x0a, 0x09, 0x01, 0x4d, - 0x0a, 0x09, 0x00, 0x4d, 0x01, 0x59, 0xe9, 0x96, - 0x09, 0x09, 0x00, 0x4d, 0x10, 0x5f, 0x10, 0x61, - 0xf9, 0x96, 0x09, 0x09, 0x01, 0x4d, 0x11, 0x5f, - 0x0b, 0xc9, 0x00, 0x4d, 0xc0, 0x01, 0x10, 0x5f, - 0x11, 0x4e, 0x51, 0x41, 0x08, 0x49, 0x00, 0x4d, - 0x0b, 0xc9, 0x10, 0x0f, 0x00, 0x4d, 0x50, 0x01, - 0x00, 0xed, 0xd1, 0xb6, 0x01, 0x46, 0x00, 0x06, - 0xa0, 0x3c, 0xa1, 0x7d, 0x60, 0x06, 0x00, 0xc6, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x50, 0x00, 0x00, 0xec, 0xd0, 0xac, - 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x70, 0x00, 0xec, - 0xd1, 0xa0, 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, - 0x10, 0xe0, 0xe9, 0x7f, 0xd0, 0x40, 0x60, 0x46, - 0xe1, 0x70, 0x0a, 0x89, 0x0b, 0xcd, 0x00, 0xe3, - 0xd1, 0x80, 0x6b, 0xc6, 0x08, 0xc9, 0x05, 0x8d, - 0x15, 0xa3, 0xee, 0x6e, 0x15, 0xa0, 0xea, 0x6e, - 0x90, 0x4d, 0xd0, 0x9f, 0xd0, 0xdf, 0x40, 0x81, - 0x10, 0x55, 0x40, 0xc1, 0x01, 0x46, 0x82, 0x34, - 0x80, 0x3f, 0xc8, 0x1d, 0x81, 0x34, 0x80, 0x3f, - 0x00, 0xc6, 0xd1, 0x23, 0x31, 0x03, 0x11, 0x02, - 0x38, 0x04, 0xb0, 0x8d, 0x10, 0x9d, 0x28, 0x02, - 0xc0, 0x60, 0x00, 0x65, 0xd1, 0x94, 0x71, 0x06, - 0x68, 0x06, 0x30, 0x44, 0x00, 0xed, 0xd1, 0xa8, - 0x70, 0x06, 0x10, 0x20, 0xe9, 0xb0, 0x00, 0xee, - 0xd0, 0xc0, 0x70, 0xc3, 0x20, 0x43, 0xb0, 0x01, - 0xf9, 0xac, 0x60, 0x06, 0x00, 0x64, 0xd1, 0xbc, - 0x71, 0x06, 0xc0, 0x04, 0x21, 0x01, 0x61, 0x06, - 0x10, 0x20, 0xf5, 0xbb, 0x11, 0x20, 0xe5, 0xbb, - 0xb0, 0x41, 0x00, 0x65, 0xd1, 0x80, 0x71, 0x06, - 0x21, 0x01, 0x61, 0x06, 0x00, 0xed, 0xd1, 0xac, - 0x71, 0x06, 0x15, 0xa1, 0xe9, 0xcb, 0xb1, 0x3f, - 0x61, 0x06, 0x15, 0xa3, 0xf9, 0xd6, 0xd0, 0xbf, - 0xe1, 0xd3, 0xd0, 0x40, 0x60, 0x46, 0xb1, 0xbc, - 0x70, 0x86, 0x61, 0x06, 0x31, 0x02, 0xe5, 0xd3, - 0x20, 0x84, 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x86, - 0xd9, 0x40, 0x00, 0xec, 0xd1, 0x94, 0x79, 0x06, - 0xb1, 0x84, 0x78, 0xc6, 0xc0, 0x63, 0x30, 0x64, - 0xe9, 0xf8, 0x00, 0xa7, 0xd0, 0xff, 0x7a, 0x63, - 0x00, 0x65, 0xd0, 0x00, 0x71, 0x00, 0x31, 0x29, - 0xe5, 0xf8, 0xc0, 0x63, 0xc8, 0xc1, 0xb0, 0x78, - 0x40, 0x43, 0xc0, 0xa4, 0x30, 0x81, 0xe9, 0xf2, - 0x7a, 0x41, 0x31, 0x29, 0xf5, 0xe8, 0x21, 0x29, - 0x61, 0x00, 0xb8, 0xfc, 0x79, 0x63, 0xb8, 0xfc, - 0x48, 0xc3, 0x68, 0xc6, 0x00, 0xed, 0xd1, 0xb8, - 0x69, 0x46, 0x80, 0x28, 0x0b, 0xc9, 0x00, 0x4d, - 0x08, 0x49, 0x10, 0x41, 0x00, 0xe3, 0xd1, 0x84, - 0x00, 0x8d, 0x20, 0x42, 0x60, 0x46, 0x00, 0xee, - 0xd1, 0xa4, 0x70, 0x86, 0x10, 0xa1, 0xee, 0x18, - 0xe6, 0x6b, 0x90, 0x86, 0x00, 0x90, 0xea, 0x18, - 0x00, 0xed, 0xd0, 0x1c, 0x70, 0x80, 0xb0, 0x81, - 0xe6, 0x6b, 0x60, 0x80, 0xb1, 0xa8, 0x70, 0x86, - 0x10, 0xa0, 0xfa, 0x6b, 0x00, 0x21, 0xd0, 0x38, - 0x70, 0x80, 0x10, 0xa0, 0xfa, 0x6b, 0x0f, 0xef, - 0xd0, 0xbf, 0x30, 0x81, 0xfa, 0x22, 0x60, 0x00, - 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, 0x15, 0xa3, - 0xea, 0x6b, 0x00, 0xee, 0xd1, 0x80, 0x79, 0x46, - 0x00, 0xf8, 0xd0, 0x00, 0xc4, 0x40, 0x00, 0xe3, - 0xd1, 0x84, 0x78, 0x46, 0x0f, 0xef, 0xd0, 0x3f, - 0x30, 0x21, 0xea, 0x48, 0x00, 0xe0, 0xd1, 0x90, - 0x78, 0x06, 0xc0, 0xa1, 0x18, 0x43, 0x28, 0x42, - 0x18, 0x43, 0x28, 0x42, 0x18, 0x1e, 0xd8, 0x80, - 0x08, 0x11, 0xea, 0x41, 0x28, 0xa1, 0x18, 0x01, - 0x18, 0x5f, 0x18, 0x60, 0xee, 0x3e, 0xc0, 0x51, - 0x30, 0x62, 0xee, 0x4e, 0xc8, 0x91, 0x18, 0x9f, - 0x00, 0x21, 0xd1, 0xb8, 0xd0, 0x01, 0x60, 0x06, - 0x00, 0xef, 0xd0, 0x10, 0xd0, 0x72, 0x60, 0x40, - 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc8, 0xdc, - 0xc9, 0x1d, 0x81, 0x34, 0x80, 0x3f, 0x00, 0xc6, - 0x38, 0xe4, 0xee, 0x5e, 0xea, 0x52, 0x28, 0xe5, - 0x01, 0x46, 0x90, 0x6d, 0x28, 0xc1, 0x00, 0xc6, - 0x38, 0xe2, 0xf6, 0x6b, 0xdb, 0x08, 0xf1, 0x16, - 0xf1, 0x18, 0x00, 0x21, 0xd1, 0xb4, 0x61, 0x86, - 0xe2, 0x52, 0x01, 0xf7, 0xd2, 0x19, 0xe0, 0x46, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x50, 0x00, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0xdb, 0x09, - 0x00, 0xe3, 0xd0, 0x1c, 0x6b, 0x00, 0xda, 0xc1, - 0x00, 0xe6, 0xd1, 0x98, 0x70, 0x06, 0xb1, 0x84, - 0x60, 0x06, 0xb1, 0x84, 0x60, 0x06, 0x05, 0x9f, - 0xe9, 0x9f, 0x08, 0x49, 0xd1, 0x17, 0x46, 0x44, - 0x00, 0x4d, 0x10, 0x43, 0x26, 0x41, 0x08, 0xc9, - 0x05, 0xcd, 0xb5, 0xc1, 0xe5, 0xcc, 0xc0, 0x57, - 0x15, 0xc6, 0x25, 0xc1, 0x15, 0xa3, 0xf9, 0x9f, - 0x08, 0x49, 0xd1, 0x0f, 0x46, 0x44, 0x00, 0x4d, - 0x10, 0x44, 0x26, 0x41, 0x08, 0xc9, 0x06, 0x0d, - 0xb6, 0x01, 0xe5, 0xcc, 0xc0, 0x58, 0x16, 0x06, - 0x26, 0x01, 0x08, 0x49, 0x00, 0x4d, 0x10, 0x60, - 0xe9, 0xa6, 0x0a, 0x09, 0x00, 0x4d, 0xe1, 0x9f, - 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, 0xe5, 0xa7, - 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, - 0x30, 0x54, 0xf9, 0xb3, 0xd4, 0x40, 0xf3, 0xb0, - 0xe1, 0xab, 0xb0, 0x7d, 0xf9, 0xb8, 0x02, 0x34, - 0xd4, 0x44, 0xe0, 0x46, 0x00, 0xec, 0xd1, 0xa0, - 0xd0, 0x40, 0x60, 0x46, 0x02, 0x3c, 0xdc, 0x89, - 0x00, 0xec, 0xd1, 0x80, 0x70, 0x46, 0xb1, 0xbc, - 0x70, 0x86, 0x30, 0x81, 0xe8, 0x46, 0x15, 0x63, - 0xe9, 0xc9, 0x05, 0x5e, 0xe8, 0x46, 0x01, 0x73, - 0xd4, 0x3d, 0xe0, 0x46, 0xd5, 0x00, 0xb5, 0x01, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0xcc, 0xc0, 0xcd, 0x01, - 0xcd, 0x42, 0xcd, 0x83, 0x00, 0xa0, 0xd0, 0x01, - 0xa0, 0x38, 0xc8, 0x7f, 0xc8, 0x06, 0xb1, 0xbe, - 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x58, 0x80, - 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, 0xc9, 0x40, - 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x22, 0xc0, 0x65, - 0xc0, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0x80, - 0xf3, 0x92, 0x59, 0x00, 0xf3, 0x96, 0xc9, 0x40, - 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x59, 0x40, - 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x92, 0x58, 0x80, - 0xc0, 0x23, 0xc0, 0x62, 0xd0, 0x88, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, - 0x58, 0xc0, 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, - 0x59, 0xc0, 0xc0, 0x24, 0xc0, 0x67, 0xd0, 0x90, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x59, 0x80, 0xf3, 0x96, 0xc9, 0xc0, - 0xf3, 0x96, 0xca, 0x00, 0xf3, 0x92, 0x59, 0xc0, - 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, 0x59, 0x00, - 0xc0, 0x25, 0xc0, 0x64, 0xd0, 0x98, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, - 0x58, 0x80, 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, - 0x59, 0x00, 0xc0, 0x23, 0xc0, 0x64, 0xd0, 0x84, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0xc0, - 0xf3, 0x92, 0x59, 0x40, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x5a, 0x40, 0xc0, 0x26, 0xc0, 0x69, - 0xd0, 0xa0, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, - 0xc9, 0x80, 0xf3, 0x92, 0x5a, 0x00, 0xf3, 0x96, - 0xca, 0x40, 0xf3, 0x92, 0x5a, 0x40, 0xf3, 0x96, - 0xca, 0x80, 0xf3, 0x92, 0x59, 0x80, 0xc0, 0x27, - 0xc0, 0x66, 0xd0, 0xa8, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x92, 0x59, 0x00, - 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x58, 0xc0, - 0xc0, 0x22, 0xc0, 0x63, 0xd0, 0x8c, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x92, 0x59, 0x80, 0xc0, 0x25, - 0xc0, 0x66, 0xd0, 0x94, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x59, 0xc0, - 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, 0x5a, 0x80, - 0xc0, 0x28, 0xc0, 0x6a, 0xd0, 0xb0, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, - 0x59, 0x40, 0xc0, 0x29, 0xc0, 0x65, 0xd0, 0xb8, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x80, - 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, 0xca, 0x00, - 0xf3, 0x92, 0x58, 0x80, 0xc0, 0x24, 0xc0, 0x62, - 0xd0, 0x9c, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, - 0x5a, 0x00, 0xc0, 0x27, 0xc0, 0x68, 0xd0, 0xa4, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xca, 0x80, - 0xf3, 0x92, 0x59, 0x80, 0xf3, 0x96, 0xca, 0x40, - 0xf3, 0x92, 0x5a, 0x40, 0xf3, 0x96, 0xc9, 0x40, - 0xf3, 0x92, 0x5a, 0x80, 0xc0, 0x23, 0xc0, 0x6a, - 0xd0, 0xac, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, - 0x59, 0x40, 0xc0, 0x26, 0xc0, 0x65, 0xd0, 0xb4, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x29, 0xc0, 0x64, - 0xd0, 0xbc, 0x20, 0x86, 0xf3, 0x9a, 0xc0, 0x33, - 0xc0, 0x74, 0xc0, 0xb5, 0xc0, 0xf6, 0xd0, 0x40, - 0x00, 0xa0, 0xd8, 0x00, 0xa8, 0x38, 0x08, 0x45, - 0x0a, 0x09, 0x00, 0x0d, 0x0f, 0xc5, 0x50, 0x00, - 0x0a, 0x09, 0x00, 0x0d, 0x10, 0x08, 0x0f, 0xc5, - 0x01, 0x46, 0x00, 0x06, 0xa0, 0x7c, 0xa0, 0x3d, - 0x60, 0x42, 0x00, 0xc6, 0x0f, 0xc5, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x14, 0x48, 0xd0, 0x81, - 0x00, 0xef, 0xd1, 0x8c, 0x71, 0x46, 0x11, 0x60, - 0xfb, 0xb1, 0x60, 0x86, 0x71, 0x46, 0x31, 0x42, - 0xfb, 0xb1, 0x00, 0xec, 0xd1, 0x0c, 0x74, 0x84, - 0x00, 0x68, 0xd0, 0x80, 0x70, 0x02, 0x10, 0x20, - 0xfb, 0xc4, 0xc4, 0x82, 0xc4, 0xd2, 0xb4, 0xfc, - 0xda, 0x00, 0xda, 0x4f, 0x0a, 0x09, 0x0f, 0xef, - 0xd0, 0x3f, 0xb4, 0x7f, 0xca, 0x29, 0x1a, 0x18, - 0x4a, 0x00, 0x1a, 0x48, 0x00, 0x8d, 0x2a, 0x42, - 0xd0, 0x03, 0x40, 0x11, 0xfb, 0xe3, 0xb4, 0x44, - 0x00, 0xa0, 0xd0, 0xc0, 0x30, 0xd3, 0xff, 0xe3, - 0xb4, 0xfe, 0x01, 0x46, 0x00, 0x06, 0xaa, 0x3d, - 0xaa, 0x7c, 0x6a, 0x53, 0x00, 0xc6, 0xb4, 0xfe, - 0xb4, 0x7c, 0x1a, 0x61, 0xfb, 0xc8, 0xb4, 0x43, - 0x00, 0xef, 0xd0, 0x3f, 0x40, 0x11, 0xeb, 0xf7, - 0xb0, 0xc4, 0xe7, 0xf7, 0xeb, 0xee, 0x61, 0x53, - 0x64, 0x52, 0x64, 0xc4, 0x00, 0x28, 0xd1, 0x24, - 0x70, 0x04, 0x00, 0x21, 0xd0, 0x80, 0x50, 0x02, - 0x60, 0x04, 0x61, 0x46, 0x0a, 0x09, 0x0f, 0xc5, - 0x50, 0x00, 0x50, 0x00, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x01, 0xfa, - 0xd4, 0x3d, 0x00, 0x25, 0xdc, 0xd8, 0xf0, 0x4a, - 0x09, 0x09, 0x01, 0xcd, 0x11, 0xe8, 0xf9, 0xe2, - 0x00, 0xe3, 0xd1, 0x9c, 0x09, 0x09, 0x05, 0xcd, - 0xb5, 0xc1, 0x09, 0x09, 0x00, 0x4d, 0xb0, 0x41, - 0x10, 0x46, 0x25, 0xc1, 0x09, 0x09, 0x06, 0x0d, - 0xb6, 0x01, 0x09, 0x09, 0x00, 0x4d, 0x08, 0x89, - 0xb0, 0x41, 0x10, 0x46, 0x26, 0x01, 0x00, 0x8d, - 0x08, 0x89, 0x10, 0x82, 0xd0, 0x04, 0xc0, 0x55, - 0x00, 0x40, 0x40, 0x40, 0x05, 0x4d, 0x08, 0x49, - 0x0b, 0x0d, 0xd1, 0x00, 0x15, 0x63, 0xe9, 0xa2, - 0xd1, 0x01, 0x55, 0x41, 0xdb, 0x01, 0x4b, 0x15, - 0xa1, 0x1b, 0x08, 0x89, 0x00, 0x4d, 0x08, 0x49, - 0x10, 0x41, 0xd1, 0x19, 0x46, 0x44, 0x26, 0x41, - 0x00, 0xcd, 0x08, 0x49, 0x10, 0xc4, 0x00, 0x4d, - 0x08, 0x49, 0x10, 0x41, 0x20, 0x81, 0xa0, 0x89, - 0x00, 0x4d, 0x10, 0x43, 0x20, 0xc1, 0xa0, 0xe8, - 0x08, 0x49, 0x00, 0x4d, 0x1b, 0x03, 0x5b, 0x01, - 0xbb, 0x3f, 0x6b, 0x06, 0x08, 0x49, 0xb1, 0xbc, - 0x00, 0x4d, 0x60, 0x46, 0x08, 0x49, 0xb1, 0xbc, - 0x0a, 0xcd, 0x1a, 0xc2, 0x4a, 0xd9, 0x1a, 0xde, - 0x6a, 0xc6, 0x08, 0x49, 0xb1, 0xbc, 0x00, 0x4d, - 0x60, 0x46, 0x10, 0x60, 0xea, 0x3e, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0xc9, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x09, 0xc9, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x0a, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xe2, 0x3e, - 0x11, 0xe3, 0xfa, 0x00, 0x00, 0xe7, 0xd0, 0xc0, - 0xd0, 0x84, 0xb0, 0x81, 0xe6, 0x3e, 0x08, 0x49, - 0x00, 0x4d, 0x60, 0x43, 0xb0, 0xfc, 0x10, 0x60, - 0xe9, 0xe7, 0x10, 0xa3, 0xf9, 0xf4, 0x00, 0xe8, - 0xd1, 0x80, 0xe1, 0xf8, 0x10, 0xa2, 0xf9, 0xfa, - 0x00, 0xe9, 0xd1, 0x80, 0xf2, 0xb0, 0xe1, 0xe7, - 0xd2, 0x3f, 0x0a, 0x09, 0x00, 0x4d, 0xb2, 0x01, - 0xf5, 0xfb, 0xe1, 0xe7, 0x11, 0xe7, 0xfa, 0x3e, - 0xd4, 0x01, 0x00, 0xe1, 0xd0, 0x24, 0x70, 0x00, - 0x10, 0x21, 0xea, 0x0d, 0x15, 0x63, 0xfa, 0x0d, - 0xd4, 0x03, 0x44, 0x2c, 0xb4, 0x3f, 0x00, 0xe6, - 0xd1, 0x90, 0x0b, 0x09, 0x00, 0x4d, 0x09, 0x49, - 0x10, 0x45, 0x00, 0x8d, 0x50, 0x81, 0xd0, 0x40, - 0x10, 0x87, 0x10, 0x98, 0x30, 0x42, 0xf2, 0x61, - 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x09, 0x00, 0x0d, - 0x09, 0x49, 0x00, 0x0d, 0xb4, 0x01, 0xfa, 0x0f, - 0x00, 0xe6, 0xd0, 0x18, 0x30, 0x06, 0xe6, 0x29, - 0x60, 0x46, 0xb1, 0xbc, 0xe2, 0x22, 0x00, 0xe0, - 0xd1, 0x88, 0x70, 0x46, 0x10, 0x63, 0xea, 0x39, - 0x10, 0x64, 0xea, 0x39, 0x00, 0xe6, 0xd1, 0x90, - 0xd0, 0x00, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, - 0xb1, 0xbc, 0x60, 0x06, 0xe2, 0x3e, 0x00, 0xef, - 0xd1, 0x84, 0x70, 0x46, 0x10, 0x60, 0xfa, 0x30, - 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, 0xe6, 0x3f, - 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, - 0x30, 0x54, 0xfa, 0x4b, 0xd4, 0x40, 0xf3, 0xb0, - 0xe2, 0x43, 0xb0, 0x7d, 0xe9, 0x7a, 0x00, 0xec, - 0xd1, 0xa0, 0xd0, 0x40, 0x60, 0x46, 0x02, 0x3c, - 0xdc, 0x89, 0x00, 0xec, 0xd1, 0x80, 0x70, 0x46, - 0xb1, 0xbc, 0x70, 0x86, 0x30, 0x81, 0xe8, 0x46, - 0x15, 0x63, 0xea, 0x5e, 0x05, 0x5e, 0xe8, 0x46, - 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, 0x00, 0xe0, - 0xd0, 0x00, 0x70, 0xc0, 0x10, 0xc1, 0x00, 0xe0, - 0xd0, 0x08, 0x70, 0x00, 0x10, 0x23, 0xea, 0x75, - 0xc0, 0x83, 0x10, 0x9d, 0x30, 0xc2, 0x10, 0x9f, - 0x30, 0xc2, 0x00, 0xef, 0xd0, 0xac, 0x70, 0x82, - 0x10, 0xa3, 0xea, 0x75, 0x10, 0xc1, 0xc0, 0x83, - 0x30, 0x81, 0xe6, 0x7e, 0xc0, 0x83, 0x20, 0x81, - 0xf6, 0x7f, 0xd0, 0x40, 0x30, 0x43, 0x0f, 0xc5, - 0xc0, 0x43, 0x0f, 0xc5, 0x00, 0xed, 0xd1, 0xa4, - 0x72, 0x86, 0x15, 0xa3, 0xee, 0x23, 0x15, 0xa1, - 0xe6, 0x23, 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, - 0xd8, 0xc4, 0x15, 0x63, 0xe9, 0x7e, 0x48, 0xd5, - 0x18, 0xde, 0x18, 0xe0, 0xe9, 0xc2, 0x00, 0xed, - 0xd1, 0xb4, 0x79, 0xc6, 0x19, 0xe0, 0xe9, 0x8c, - 0x00, 0xed, 0xd0, 0x3a, 0x79, 0xc6, 0x69, 0xc0, - 0xd9, 0xc0, 0x69, 0xc6, 0x00, 0xed, 0xd0, 0x38, - 0x79, 0x40, 0x19, 0x60, 0xe9, 0x98, 0x00, 0x28, - 0xd0, 0x24, 0x70, 0x40, 0x02, 0x20, 0xd0, 0x80, - 0x50, 0x42, 0x60, 0x40, 0x15, 0xa3, 0xe9, 0x9f, - 0x00, 0xec, 0xd1, 0xb8, 0x79, 0xc6, 0x69, 0x46, - 0xc9, 0x67, 0x00, 0xec, 0xd9, 0xb4, 0x70, 0x66, - 0x00, 0xec, 0xd1, 0xbc, 0x70, 0x06, 0x10, 0x20, - 0xed, 0xbe, 0x10, 0x60, 0xe9, 0xc1, 0x00, 0xe0, - 0xda, 0xa8, 0x7a, 0xaa, 0xc0, 0x2a, 0x10, 0x1f, - 0x00, 0x22, 0xd0, 0xa0, 0x70, 0x82, 0x20, 0x6a, - 0x00, 0x9f, 0xe9, 0xb5, 0x20, 0x40, 0x19, 0x60, - 0xf9, 0xb8, 0xc9, 0x41, 0xb0, 0x48, 0x30, 0x65, - 0xf5, 0xbd, 0xb0, 0x70, 0xed, 0xbe, 0xd9, 0x40, - 0x00, 0xed, 0xd1, 0xbc, 0x69, 0x46, 0x69, 0x66, - 0x12, 0xa4, 0xea, 0x21, 0x00, 0xec, 0xd1, 0xbc, - 0x73, 0xc6, 0x15, 0xa3, 0xe9, 0xdf, 0x33, 0xe3, - 0xe5, 0xd3, 0xed, 0xd2, 0x63, 0xc6, 0x00, 0x21, - 0xd1, 0xa8, 0x63, 0xc6, 0x00, 0xed, 0xd1, 0xa0, - 0x63, 0xc6, 0x15, 0xa1, 0xf9, 0xdc, 0x12, 0xa3, - 0xe5, 0xe3, 0xd3, 0xc2, 0x00, 0xec, 0xd1, 0xbc, - 0x63, 0xc6, 0xe1, 0xe3, 0x12, 0xa3, 0xea, 0x21, - 0xe1, 0xe3, 0x12, 0xa2, 0xf6, 0x21, 0x13, 0xe0, - 0xfa, 0x21, 0x00, 0xee, 0xd1, 0x8c, 0x78, 0x06, - 0xb1, 0xbc, 0x78, 0x46, 0xb1, 0xbc, 0x78, 0x86, - 0xd1, 0x88, 0x72, 0x46, 0xd1, 0x84, 0x73, 0x06, - 0x13, 0x20, 0xf9, 0xe3, 0x00, 0x64, 0xd1, 0xa0, - 0x70, 0x46, 0xd0, 0xa2, 0x30, 0x81, 0xe9, 0xff, - 0x10, 0x70, 0xea, 0x11, 0x10, 0x6d, 0xea, 0x14, - 0x10, 0x76, 0xea, 0x19, 0x10, 0x7a, 0xea, 0x28, - 0xe2, 0x3b, 0x18, 0xe0, 0xea, 0x3b, 0x00, 0xed, - 0xd1, 0x80, 0x70, 0x86, 0xb0, 0x81, 0xd0, 0x3f, - 0x40, 0x02, 0x10, 0x20, 0xea, 0x0c, 0x60, 0x86, - 0xf3, 0x8a, 0xe1, 0xe3, 0xc0, 0x02, 0x10, 0x1a, - 0x50, 0x80, 0x60, 0x86, 0xe2, 0x3b, 0x15, 0xa3, - 0xea, 0x21, 0xe2, 0xe9, 0xd2, 0x80, 0x00, 0xed, - 0xd1, 0xa4, 0x62, 0x86, 0xe3, 0x0c, 0x00, 0xed, - 0xd1, 0x88, 0xd0, 0x60, 0x70, 0x06, 0x50, 0x40, - 0x60, 0x46, 0x15, 0xa3, 0xfb, 0x0c, 0xd5, 0x84, - 0xe3, 0x0c, 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x00, 0xed, 0xd1, 0x88, - 0xd0, 0x60, 0x70, 0x06, 0x50, 0x40, 0x60, 0x46, - 0x15, 0xa2, 0xe7, 0x0c, 0xee, 0x21, 0x00, 0x21, - 0xd1, 0x8c, 0x18, 0xe0, 0xfa, 0x39, 0x70, 0x46, - 0x10, 0x61, 0xea, 0x70, 0xe2, 0x21, 0x65, 0x86, - 0xe2, 0x21, 0x18, 0xe0, 0xea, 0x70, 0xd1, 0x80, - 0x73, 0x06, 0x15, 0xa2, 0xee, 0x68, 0x00, 0x22, - 0xd1, 0x80, 0x70, 0x46, 0x6b, 0x06, 0xcb, 0x01, - 0xb1, 0xb4, 0x70, 0x46, 0x6a, 0xc6, 0xca, 0xc1, - 0x00, 0x65, 0xd1, 0x98, 0x70, 0x46, 0x10, 0x61, - 0xfa, 0x50, 0x02, 0x41, 0xc3, 0x21, 0xc7, 0xe0, - 0x02, 0x50, 0xea, 0x56, 0xc3, 0x20, 0xc7, 0xe1, - 0xd1, 0x88, 0xd0, 0x01, 0x02, 0x40, 0x62, 0x46, - 0x0f, 0xef, 0xd0, 0x7f, 0x30, 0x6f, 0xfa, 0x5f, - 0xc3, 0x20, 0xc7, 0x4c, 0xd0, 0x00, 0x00, 0x65, - 0xd1, 0x98, 0x70, 0x46, 0x60, 0x06, 0xb0, 0x41, - 0x43, 0x01, 0xe2, 0x70, 0xc3, 0x22, 0xc7, 0xcc, - 0xc7, 0x60, 0xc7, 0xa1, 0x02, 0x50, 0xea, 0x70, - 0xc7, 0x61, 0xc7, 0xa0, 0xdb, 0x80, 0xd1, 0x00, - 0x00, 0xef, 0xd1, 0xa8, 0x70, 0x46, 0x10, 0x60, - 0xfa, 0x7a, 0x00, 0xe0, 0xd1, 0x88, 0x70, 0x46, - 0x00, 0x22, 0xd1, 0xb0, 0x70, 0x86, 0x30, 0x81, - 0xea, 0x82, 0x60, 0x46, 0xd0, 0x20, 0xf3, 0x06, - 0x10, 0x63, 0xea, 0x87, 0x10, 0x64, 0xea, 0x87, - 0xe2, 0x95, 0x00, 0xef, 0xd1, 0x6c, 0x71, 0x45, - 0xc0, 0x05, 0x30, 0x01, 0xf6, 0x95, 0xdb, 0x82, - 0xd1, 0x01, 0x10, 0x63, 0xea, 0x95, 0xd1, 0x02, - 0x11, 0x62, 0xea, 0x95, 0xd1, 0x03, 0xd1, 0x8c, - 0x61, 0x06, 0xdb, 0x40, 0x00, 0xe0, 0xd0, 0x00, - 0x71, 0x00, 0xc0, 0x84, 0x10, 0x9c, 0xb0, 0x96, - 0xfa, 0xa0, 0xb1, 0x38, 0xb0, 0x96, 0xfa, 0xa3, - 0xb1, 0x30, 0x00, 0x29, 0xd1, 0x84, 0x00, 0x22, - 0xd0, 0x74, 0x70, 0x86, 0x70, 0xc1, 0x61, 0x06, - 0x30, 0xc2, 0xea, 0xae, 0x60, 0x81, 0xdb, 0x41, - 0xb0, 0x3c, 0xb1, 0xbc, 0xb0, 0x7c, 0x71, 0x00, - 0x70, 0x86, 0x70, 0xc1, 0x61, 0x06, 0x30, 0xc2, - 0xea, 0xb9, 0x60, 0x81, 0xdb, 0x41, 0x00, 0xee, - 0xd1, 0xb4, 0x70, 0x06, 0xb1, 0xbc, 0x70, 0x46, - 0x30, 0x40, 0xea, 0xc2, 0x60, 0x06, 0xdb, 0x41, - 0x00, 0x24, 0xd0, 0x60, 0x30, 0x81, 0xea, 0xc7, - 0x30, 0x81, 0x50, 0x02, 0xea, 0xca, 0xd0, 0x01, - 0x00, 0x22, 0xd1, 0xbc, 0x70, 0x86, 0x30, 0x80, - 0xea, 0xd2, 0x60, 0x06, 0xd0, 0x10, 0xf3, 0x06, - 0x00, 0x22, 0xd1, 0xa4, 0x71, 0x06, 0xd0, 0x01, - 0x41, 0x00, 0x5b, 0x44, 0x5b, 0x6e, 0x6b, 0x46, - 0x00, 0x28, 0xd0, 0x70, 0x70, 0x41, 0x10, 0x62, - 0xfa, 0xe6, 0xd1, 0x84, 0x70, 0x06, 0x10, 0x20, - 0xfa, 0xdf, 0x00, 0x22, 0xd0, 0x00, 0xf3, 0x06, - 0x02, 0x7d, 0xde, 0x68, 0xe0, 0x46, 0x00, 0xed, - 0xd1, 0x88, 0x71, 0x06, 0x01, 0x1f, 0xfa, 0xfd, - 0xd0, 0x41, 0x41, 0x01, 0xd0, 0x62, 0x00, 0x65, - 0xd0, 0x30, 0x70, 0x00, 0x10, 0x21, 0xea, 0xfa, - 0xee, 0xf9, 0x1a, 0xe1, 0xfa, 0xfa, 0xd0, 0x52, - 0x51, 0x01, 0x61, 0x06, 0xe3, 0x0c, 0x18, 0xe0, - 0xea, 0x70, 0xc7, 0x60, 0xc7, 0xe1, 0x02, 0x50, - 0xea, 0x70, 0xc7, 0x61, 0xc7, 0xe0, 0xe2, 0x70, - 0x00, 0x28, 0xdc, 0xa4, 0x7c, 0x72, 0x5c, 0x40, - 0x6c, 0x72, 0x0f, 0xc5, 0x18, 0xe0, 0xeb, 0x82, - 0xd9, 0x0d, 0x00, 0xee, 0xd1, 0xa4, 0x70, 0x06, - 0x10, 0x21, 0xfb, 0x7f, 0xd9, 0x0c, 0x90, 0x06, - 0x00, 0x10, 0xeb, 0x7f, 0x00, 0x21, 0xd1, 0x88, - 0x7a, 0x06, 0x1a, 0x20, 0xeb, 0x7f, 0xd9, 0x00, - 0x00, 0xed, 0xd1, 0xbc, 0x79, 0x46, 0x19, 0x60, - 0xeb, 0x7f, 0x39, 0x68, 0xc0, 0xe5, 0xc0, 0x25, - 0x10, 0x13, 0xb0, 0x0f, 0xef, 0x7f, 0xb0, 0x22, - 0xe7, 0x7f, 0x00, 0xe0, 0xd1, 0xa8, 0x71, 0x46, - 0x11, 0x5f, 0x29, 0x45, 0x00, 0x22, 0xd0, 0x18, - 0x00, 0x22, 0xd4, 0x54, 0x00, 0x22, 0xd0, 0x9c, - 0x70, 0x00, 0x74, 0x51, 0x70, 0x42, 0x34, 0x40, - 0xe7, 0x3c, 0xd0, 0x40, 0x00, 0x22, 0xd4, 0x50, - 0x74, 0x51, 0x34, 0x40, 0xef, 0x42, 0x20, 0x45, - 0x60, 0x42, 0x39, 0x41, 0x19, 0x60, 0xf7, 0x5e, - 0x00, 0x65, 0xd1, 0xa8, 0x7a, 0x86, 0x29, 0x6a, - 0x19, 0x59, 0xb9, 0x7e, 0xf7, 0x75, 0x15, 0xa3, - 0xf7, 0x57, 0x00, 0xed, 0xd1, 0xac, 0x70, 0x06, - 0x00, 0xed, 0xd1, 0xb0, 0x70, 0x46, 0x30, 0x01, - 0xfb, 0x7f, 0x00, 0x65, 0xd1, 0x84, 0x70, 0x46, - 0xb0, 0x7f, 0x60, 0x46, 0xd5, 0x84, 0xe3, 0x7f, - 0x11, 0x41, 0xd0, 0x4a, 0x00, 0xed, 0xd1, 0xa0, - 0x74, 0x46, 0xd0, 0x00, 0x60, 0x06, 0x30, 0xc5, - 0x39, 0x45, 0xe7, 0x6e, 0x14, 0x60, 0xeb, 0x6b, - 0xf3, 0x85, 0xb0, 0x41, 0xef, 0x65, 0xe3, 0x71, - 0x00, 0x66, 0xd1, 0xa0, 0x60, 0xc6, 0x15, 0xa3, - 0xeb, 0x7f, 0xf3, 0x85, 0xe3, 0x7f, 0xd9, 0x01, - 0x00, 0x66, 0xd1, 0xa0, 0x70, 0x06, 0x30, 0x03, - 0xe7, 0x7e, 0x10, 0x1d, 0x10, 0x3b, 0xe7, 0x7f, - 0x60, 0xc6, 0x00, 0x66, 0xd1, 0xa4, 0x69, 0x06, - 0x15, 0xa4, 0xea, 0x23, 0xe2, 0x3b, 0x00, 0x65, - 0xdd, 0x08, 0x7c, 0xf4, 0xbc, 0xff, 0x6c, 0xf4, - 0x00, 0xef, 0xdd, 0x10, 0x7c, 0xf4, 0xbc, 0xfe, - 0x6c, 0xf4, 0xc0, 0x3f, 0xf1, 0x18, 0xf1, 0x16, - 0xf1, 0x18, 0x00, 0x05, 0x08, 0x20, 0xd0, 0x40, - 0x5f, 0x01, 0x15, 0x63, 0xe9, 0x77, 0x05, 0x5e, - 0xeb, 0x08, 0x00, 0x22, 0xd1, 0xa0, 0x6b, 0x06, - 0x00, 0x22, 0xd1, 0xa8, 0x6b, 0xc6, 0x00, 0x22, - 0xd1, 0xac, 0x6a, 0xc6, 0x00, 0xee, 0xd0, 0x0c, - 0x00, 0xe6, 0xd1, 0x9c, 0x70, 0x40, 0x30, 0x5f, - 0xe9, 0x8d, 0xb0, 0x3c, 0xb1, 0xb4, 0x70, 0x40, - 0x30, 0x5f, 0xe9, 0x8d, 0xb1, 0xb4, 0x00, 0xe6, - 0xd0, 0x10, 0xd0, 0x83, 0x70, 0x40, 0x60, 0x46, - 0xb0, 0x3c, 0xb1, 0xbc, 0xb0, 0x81, 0xed, 0x90, - 0x00, 0xee, 0xd0, 0x0c, 0x00, 0xe6, 0xd1, 0x9c, - 0x70, 0x40, 0x30, 0x4c, 0xe9, 0xa3, 0xb0, 0x3c, - 0xb1, 0xb4, 0x70, 0x40, 0x30, 0x4c, 0xe9, 0xa3, - 0xb1, 0xb4, 0x00, 0xe6, 0xd0, 0x00, 0x61, 0x80, - 0x00, 0x21, 0xd1, 0xb4, 0x70, 0x06, 0x10, 0x20, - 0xe9, 0xae, 0xd0, 0x00, 0x60, 0x06, 0xf1, 0x18, - 0x00, 0x21, 0xd1, 0x8c, 0x70, 0x46, 0x65, 0x86, - 0xde, 0xc0, 0x00, 0xee, 0xd0, 0x20, 0x70, 0x00, - 0x10, 0x22, 0xfd, 0xb9, 0xde, 0xc2, 0x00, 0x21, - 0xd0, 0x04, 0x70, 0x00, 0x10, 0x21, 0xe9, 0xc0, - 0x15, 0xa3, 0xe9, 0xdc, 0xd0, 0x02, 0x4c, 0x00, - 0x10, 0x63, 0xe9, 0xc5, 0xcc, 0x3b, 0xd0, 0x04, - 0x63, 0x00, 0xd0, 0x00, 0x70, 0x00, 0x30, 0x1f, - 0xfb, 0x08, 0xd0, 0x18, 0x70, 0x00, 0x10, 0x20, - 0xed, 0xc7, 0xd0, 0x04, 0x70, 0x80, 0x10, 0xa0, - 0xeb, 0x08, 0xf1, 0x16, 0x00, 0x21, 0xd0, 0x9a, - 0xc0, 0x39, 0x30, 0x1f, 0x10, 0x18, 0x30, 0x02, - 0xfd, 0xcf, 0xe3, 0x08, 0x00, 0xe0, 0xd9, 0x04, - 0x79, 0x24, 0xb9, 0x38, 0x19, 0x1c, 0xdc, 0x88, - 0x4c, 0xac, 0xd0, 0x02, 0x40, 0x2c, 0x10, 0x02, - 0x0c, 0x80, 0x10, 0x63, 0xea, 0x70, 0x15, 0x63, - 0xf9, 0xec, 0xf1, 0x18, 0x00, 0xef, 0xdc, 0x00, - 0x7c, 0x30, 0x00, 0x24, 0xd0, 0x30, 0x70, 0x00, - 0x10, 0x21, 0xf9, 0xf6, 0xbc, 0x3b, 0xe1, 0xfd, - 0x10, 0x22, 0xf9, 0xfa, 0xbc, 0x38, 0xe1, 0xfd, - 0x10, 0x23, 0xf9, 0xfd, 0xbc, 0x3c, 0x1e, 0xe0, - 0xea, 0x03, 0x15, 0x63, 0xfa, 0x02, 0xbe, 0xfc, - 0xdc, 0x12, 0x0e, 0xde, 0xfa, 0x09, 0xc0, 0x24, - 0x30, 0x30, 0xf6, 0x09, 0x2c, 0x00, 0xd0, 0x2c, - 0x6c, 0x00, 0x1e, 0xe0, 0xea, 0x0f, 0xcc, 0x24, - 0x1c, 0x1f, 0xd9, 0x40, 0x06, 0x50, 0xea, 0x22, - 0xc0, 0x24, 0xb0, 0x12, 0xfe, 0x22, 0xd9, 0x74, - 0x79, 0x65, 0x19, 0x5f, 0x30, 0x25, 0xee, 0x1b, - 0x29, 0x40, 0x19, 0x5f, 0x19, 0x41, 0xc0, 0x25, - 0x20, 0x30, 0x30, 0x24, 0xe6, 0x22, 0x3c, 0x00, - 0xd0, 0x38, 0x69, 0x40, 0x1c, 0x05, 0xbc, 0x38, - 0x3c, 0x32, 0x5c, 0x3b, 0xbc, 0x3f, 0xd8, 0xec, - 0x78, 0xe3, 0xc0, 0xa3, 0x10, 0xb2, 0xf6, 0x2f, - 0xd0, 0x92, 0x02, 0xe4, 0xd8, 0x00, 0xd0, 0xc0, - 0x20, 0xe0, 0xb0, 0x81, 0xee, 0x32, 0xd0, 0x30, - 0x60, 0xc0, 0x00, 0xac, 0xd0, 0x20, 0xc0, 0xc0, - 0xd8, 0x40, 0xc1, 0x23, 0xd4, 0x64, 0x34, 0x63, - 0xdc, 0x40, 0x0c, 0x1f, 0xfa, 0x5b, 0xc0, 0x65, - 0xb0, 0x41, 0xe6, 0x47, 0x68, 0x40, 0xb0, 0x3c, - 0xe2, 0x42, 0xc0, 0xc0, 0x34, 0x65, 0xdc, 0x48, - 0x4c, 0x70, 0x1c, 0x5f, 0x20, 0xf1, 0x15, 0x63, - 0xfa, 0x5c, 0xf2, 0x54, 0xc1, 0x11, 0xc0, 0x83, - 0xf2, 0xa5, 0xe2, 0x6f, 0xb1, 0x01, 0xe6, 0x5a, - 0x68, 0x40, 0x28, 0x60, 0xb0, 0x3c, 0xe2, 0x54, - 0x0f, 0xc5, 0xd9, 0x40, 0xb1, 0x12, 0x11, 0x01, - 0x21, 0x25, 0xf2, 0x54, 0xc1, 0x11, 0xb1, 0x01, - 0xe6, 0x6f, 0x20, 0x31, 0x68, 0x40, 0x30, 0x31, - 0xb0, 0x3c, 0x28, 0x60, 0x70, 0x43, 0x30, 0x31, - 0x60, 0x40, 0x20, 0x31, 0xb0, 0x3c, 0xb0, 0xf8, - 0xe2, 0x61, 0xe2, 0xf7, 0xd8, 0xec, 0x78, 0xe3, - 0x00, 0xa8, 0xd0, 0x80, 0x00, 0xa8, 0xd1, 0x44, - 0x00, 0xac, 0xd0, 0x20, 0xc0, 0xc0, 0x0c, 0x1f, - 0xfa, 0xb3, 0xd9, 0x78, 0x79, 0x65, 0x39, 0x25, - 0x19, 0x5f, 0xc9, 0xa5, 0x19, 0x83, 0x20, 0x26, - 0x20, 0xe6, 0x20, 0xa6, 0x21, 0x66, 0xc1, 0x23, - 0xc0, 0x64, 0x10, 0x5f, 0x10, 0x9d, 0x20, 0x81, - 0x31, 0x01, 0x30, 0x44, 0xf6, 0x8e, 0x21, 0x01, - 0x30, 0x84, 0x10, 0x83, 0xc4, 0x64, 0x34, 0x63, - 0xdc, 0x48, 0x4c, 0x70, 0x1c, 0x5f, 0x15, 0x63, - 0xfa, 0xc3, 0x20, 0xb1, 0xf2, 0xa5, 0xc1, 0x24, - 0x11, 0x1f, 0xc0, 0x85, 0x30, 0xb1, 0xf2, 0xa5, - 0xc1, 0x11, 0xc0, 0x83, 0x0c, 0x9d, 0xfa, 0xa3, - 0xb0, 0xbc, 0xf2, 0xa5, 0xe2, 0xec, 0xb1, 0x01, - 0xe6, 0x5a, 0x70, 0x42, 0xb0, 0xb8, 0x60, 0x40, - 0xb0, 0x3c, 0xe2, 0xa5, 0xb1, 0x01, 0xe6, 0x5a, - 0x70, 0x42, 0xb0, 0xb8, 0x60, 0x40, 0xb0, 0x38, - 0xe2, 0xac, 0x00, 0xac, 0xd0, 0x24, 0xc1, 0x23, - 0xb1, 0x12, 0xf2, 0xac, 0xd1, 0x24, 0x31, 0x23, - 0x00, 0xa8, 0xd0, 0x84, 0xf2, 0xac, 0xd1, 0x12, - 0x00, 0xa8, 0xd0, 0x84, 0xc0, 0x03, 0xf2, 0xac, - 0xe2, 0xec, 0xd8, 0x82, 0x48, 0x95, 0x18, 0x81, - 0xb1, 0x01, 0xe6, 0xd9, 0x20, 0xb1, 0x70, 0x42, - 0x30, 0xb1, 0x20, 0x22, 0x60, 0x40, 0x30, 0x22, - 0xb0, 0xbc, 0xb0, 0x3c, 0x30, 0xb1, 0x70, 0x42, - 0x20, 0xb1, 0x30, 0x22, 0x60, 0x40, 0x20, 0x22, - 0xb0, 0xbc, 0xb0, 0x3c, 0xe2, 0xc6, 0xc1, 0x11, - 0xc0, 0x85, 0x30, 0xb1, 0x20, 0xe2, 0xb1, 0x01, - 0xe6, 0xec, 0x70, 0x42, 0xb0, 0xb8, 0x20, 0x22, - 0x60, 0x40, 0x30, 0x22, 0xb0, 0x3c, 0x70, 0x43, - 0xb0, 0xf8, 0x30, 0x22, 0x60, 0x40, 0x20, 0x22, - 0xb0, 0x3c, 0xe2, 0xdd, 0xd0, 0x08, 0x5c, 0x00, - 0x3c, 0x32, 0xd0, 0x04, 0x40, 0x30, 0x3c, 0x00, - 0x15, 0x63, 0xfa, 0xf7, 0x1e, 0xe0, 0xea, 0xf7, - 0xbc, 0x3c, 0x00, 0xac, 0xd0, 0xa0, 0x00, 0xa8, - 0xd0, 0x00, 0x00, 0x20, 0xd1, 0x24, 0x70, 0x42, - 0xb0, 0xbc, 0x60, 0x40, 0xb0, 0x3c, 0xb1, 0x01, - 0xee, 0xfd, 0xd0, 0x30, 0x30, 0x30, 0xef, 0x03, - 0xd0, 0x04, 0x63, 0x00, 0x08, 0x20, 0xd0, 0x40, - 0x3f, 0x01, 0x02, 0xba, 0xde, 0x3c, 0xe0, 0x46, - 0x50, 0x00, 0x50, 0x00, 0x01, 0x46, 0xd0, 0x08, - 0x94, 0x89, 0xd0, 0x8c, 0x44, 0x82, 0x14, 0x9e, - 0x30, 0x12, 0xd0, 0x88, 0x10, 0x80, 0x00, 0xe8, - 0xd1, 0x80, 0x70, 0xc6, 0x00, 0x06, 0xa0, 0xbd, - 0xa0, 0xfc, 0x80, 0x3f, 0xb1, 0xbe, 0x60, 0xc6, - 0x00, 0x06, 0x80, 0xa9, 0x80, 0x3f, 0x80, 0x2a, - 0x80, 0x3f, 0x00, 0x21, 0xd0, 0x3c, 0x00, 0x0a, - 0xb1, 0x82, 0xd0, 0x6b, 0x70, 0x46, 0x00, 0x06, - 0x80, 0x07, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, - 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, - 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, - 0xd0, 0x00, 0xa0, 0x29, 0x80, 0x2b, 0x0c, 0x20, - 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0x90, 0x09, - 0xd0, 0x41, 0x40, 0x01, 0xd0, 0x44, 0x40, 0x70, - 0x20, 0x01, 0xa0, 0x27, 0x80, 0x3f, 0x00, 0xc6, - 0x15, 0x63, 0xe9, 0xae, 0x05, 0x5e, 0xe9, 0xbe, - 0x00, 0xe0, 0xd0, 0x40, 0x70, 0x81, 0x10, 0x9c, - 0xb0, 0x96, 0xf9, 0xb7, 0x00, 0x21, 0xd0, 0x40, - 0xe1, 0xbb, 0xb0, 0x96, 0xf9, 0xbe, 0x00, 0x22, - 0xd0, 0x40, 0x27, 0xc1, 0x27, 0x41, 0x27, 0x81, - 0x90, 0x83, 0x00, 0x64, 0xd0, 0x10, 0x60, 0x80, - 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0x00, 0x64, - 0xd0, 0x14, 0x67, 0x40, 0x80, 0x34, 0x80, 0x3f, - 0x00, 0xc6, 0x90, 0xae, 0x00, 0x64, 0xd0, 0x18, - 0x60, 0x80, 0x90, 0xa6, 0x00, 0x64, 0xd0, 0x1c, - 0x60, 0x80, 0x15, 0x63, 0xe9, 0xe3, 0x0c, 0x1f, - 0xe9, 0xe3, 0x05, 0x50, 0xf9, 0xe3, 0x15, 0xa3, - 0xf9, 0xe3, 0x90, 0x4d, 0x10, 0x60, 0xe5, 0xdb, - 0x00, 0x06, 0x05, 0x0d, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x15, 0xa3, 0xf9, 0xfb, 0x00, 0x21, - 0xd0, 0x04, 0x70, 0x00, 0x10, 0x21, 0xe9, 0xfb, - 0xd0, 0x38, 0x70, 0x00, 0x15, 0x63, 0xe9, 0xef, - 0x10, 0x1f, 0x15, 0x21, 0xe5, 0xe0, 0xd0, 0x64, - 0x30, 0x54, 0xe5, 0xe0, 0xc0, 0x40, 0xb0, 0x7f, - 0x30, 0x54, 0xe9, 0xfb, 0x0c, 0x09, 0x05, 0x0d, - 0xe1, 0xef, 0xc0, 0x5f, 0x10, 0x58, 0x10, 0x48, - 0x00, 0xee, 0xd0, 0x8c, 0xd0, 0xc3, 0x70, 0x02, - 0x30, 0x01, 0xea, 0x10, 0xb0, 0xbc, 0xb0, 0xc1, - 0xee, 0x01, 0x00, 0x26, 0xd0, 0x20, 0x70, 0x40, - 0xb0, 0x7f, 0x60, 0x40, 0x15, 0xa3, 0xea, 0x0f, - 0xb0, 0x88, 0x77, 0xc2, 0x80, 0x07, 0x09, 0x49, - 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, - 0x00, 0x4d, 0xa0, 0x6c, 0xd3, 0x80, 0xd0, 0xa1, - 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, - 0xfa, 0x1a, 0x0c, 0x49, 0x00, 0x8d, 0xc0, 0x42, - 0x10, 0x60, 0xea, 0x2a, 0xb0, 0x5e, 0xb0, 0x43, - 0xfe, 0x34, 0xd0, 0x61, 0x23, 0x81, 0xe2, 0x1f, - 0x0c, 0x09, 0x05, 0x0d, 0x15, 0x20, 0xfe, 0x31, - 0xd0, 0x65, 0x30, 0x54, 0xee, 0x10, 0x03, 0xb4, - 0xd6, 0x29, 0xe0, 0x46, 0xc6, 0xd4, 0xb6, 0xc1, - 0xe6, 0x31, 0xd0, 0x64, 0x30, 0x5b, 0xfe, 0x31, - 0xd7, 0x00, 0xb7, 0x01, 0xd3, 0x81, 0x00, 0x27, - 0xd0, 0x10, 0xd0, 0x81, 0x60, 0x80, 0x15, 0x63, - 0xfa, 0x54, 0x00, 0x22, 0xdc, 0xd8, 0x03, 0xf8, - 0xd0, 0x10, 0xf0, 0x4a, 0x15, 0xa3, 0xfa, 0x51, - 0x02, 0xf7, 0xdc, 0x26, 0x0c, 0x10, 0xf8, 0x46, - 0x02, 0xfc, 0xd8, 0x22, 0xe0, 0x46, 0x02, 0xf2, - 0xd6, 0x2b, 0xe0, 0x46, 0x00, 0x22, 0xdc, 0xd8, - 0x03, 0xfa, 0xd0, 0x10, 0xf0, 0x4a, 0x03, 0x35, - 0xda, 0x20, 0x15, 0xa3, 0xe8, 0x46, 0x03, 0x30, - 0xdc, 0x27, 0xe0, 0x46, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xe0, - 0xe1, 0xec, 0xe2, 0x12, 0xe2, 0x14, 0xe1, 0xc7, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8d, 0x06, 0x50, - 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, - 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x64, - 0x30, 0x5b, 0xfc, 0x11, 0xc0, 0x39, 0x30, 0x31, - 0x10, 0x12, 0x10, 0x20, 0xe9, 0x88, 0x03, 0x10, - 0xe9, 0x93, 0x0f, 0x19, 0xf9, 0x8f, 0xd1, 0x44, - 0xe1, 0x79, 0x03, 0xde, 0xf9, 0xba, 0x03, 0xdf, - 0xe9, 0x99, 0xd3, 0x40, 0xca, 0x50, 0xd1, 0x42, - 0xe2, 0xea, 0xc0, 0x50, 0x10, 0x54, 0xc0, 0x90, - 0x10, 0x8c, 0x10, 0x92, 0x10, 0xe0, 0xe5, 0xa8, - 0xc0, 0x01, 0x10, 0x01, 0x20, 0x40, 0xc0, 0x02, - 0x10, 0x01, 0x20, 0x80, 0x10, 0x60, 0xfd, 0xab, - 0xb0, 0x7f, 0x10, 0xa0, 0xfd, 0xae, 0xb0, 0xbf, - 0x10, 0x5f, 0x10, 0x9f, 0x00, 0xef, 0xd0, 0x3e, - 0x20, 0x52, 0x20, 0x83, 0x20, 0x93, 0x10, 0x4c, - 0x10, 0x82, 0x40, 0x80, 0x50, 0x42, 0x0f, 0xc5, - 0xcb, 0xaa, 0xcb, 0xeb, 0xca, 0x50, 0xd0, 0xc0, - 0xb0, 0xc1, 0xf1, 0x9b, 0xcb, 0x01, 0xd0, 0xc1, - 0xf1, 0x9b, 0xcb, 0x41, 0xba, 0x7f, 0xbb, 0x3f, - 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, - 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x48, - 0xcc, 0xb1, 0x1c, 0x9f, 0x06, 0xd0, 0xe9, 0xd5, - 0x01, 0x69, 0xd0, 0x20, 0x3c, 0x80, 0xc0, 0x1c, - 0x10, 0x08, 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, - 0x01, 0xb5, 0xd4, 0x00, 0x2c, 0x80, 0xde, 0x84, - 0xde, 0xc4, 0xe3, 0x1e, 0xd3, 0xc2, 0xf2, 0xd3, - 0x13, 0xa0, 0xed, 0xe5, 0xf2, 0x32, 0xb3, 0x81, - 0xe9, 0xec, 0x80, 0x07, 0xd4, 0x00, 0xc4, 0x50, - 0xd3, 0x08, 0xe2, 0x95, 0xd0, 0x71, 0x20, 0x56, - 0x00, 0x48, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, - 0xe9, 0xfa, 0x06, 0x5e, 0xfa, 0x03, 0x08, 0x89, - 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xfa, 0xd3, 0xc4, - 0x06, 0x5e, 0xfa, 0x03, 0xd0, 0x43, 0x40, 0x4c, - 0xea, 0x03, 0x08, 0x49, 0x00, 0x8d, 0x10, 0x87, - 0x53, 0x02, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, - 0x03, 0x1c, 0xea, 0x0a, 0x09, 0x49, 0x00, 0x0d, - 0xd0, 0x9f, 0x40, 0x02, 0xb0, 0x20, 0x03, 0x19, - 0xea, 0x10, 0xb0, 0x20, 0xa0, 0x2c, 0xe2, 0x5b, - 0x06, 0x5f, 0xfa, 0x80, 0xd4, 0x00, 0xc4, 0x50, - 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xd3, - 0xe1, 0xdc, 0xe2, 0x00, 0xe2, 0x02, 0xe1, 0xac, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x91, 0x06, 0x50, - 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, - 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x64, - 0x30, 0x5b, 0xfc, 0x11, 0xbc, 0x10, 0xd0, 0x10, - 0x0c, 0x1e, 0xf9, 0x8e, 0xbc, 0x10, 0xd0, 0x30, - 0xc0, 0x40, 0x30, 0x70, 0xed, 0x8e, 0x03, 0x10, - 0xe9, 0x97, 0x0f, 0x19, 0xf9, 0x93, 0xd1, 0x44, - 0xe1, 0x79, 0x03, 0xdf, 0xe9, 0xa1, 0xd3, 0x40, - 0xca, 0x50, 0xcb, 0x52, 0x03, 0x1d, 0xf9, 0xa8, - 0xca, 0x12, 0xca, 0x52, 0xe1, 0xa5, 0x03, 0x1d, - 0xf9, 0xa8, 0xca, 0x12, 0xca, 0x53, 0xca, 0xae, - 0xca, 0xef, 0xb1, 0x7e, 0x03, 0x1e, 0xfa, 0xea, - 0xb1, 0x7e, 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, - 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xd2, - 0x00, 0xa8, 0xd0, 0x00, 0xcc, 0x5b, 0x1c, 0x5f, - 0x1c, 0x43, 0x20, 0x31, 0x7c, 0x40, 0xb0, 0x3c, - 0x7e, 0x80, 0xcc, 0xb1, 0xce, 0xfa, 0x1c, 0x9f, - 0x1e, 0xdf, 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, - 0xe9, 0xc4, 0x3c, 0x80, 0x0e, 0xd9, 0xe9, 0xc7, - 0x3e, 0xc0, 0x3e, 0xf2, 0x3e, 0xb1, 0xd0, 0x01, - 0x40, 0x1b, 0x10, 0x05, 0x20, 0x1f, 0x2c, 0x40, - 0x2c, 0x80, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, - 0xe3, 0x1e, 0xd3, 0xc2, 0xf2, 0xd3, 0x13, 0xa0, - 0xed, 0xd8, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xdc, - 0x80, 0x07, 0xe2, 0x95, 0x0d, 0x09, 0xd1, 0x8c, - 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xe8, 0x06, 0x5e, - 0xf9, 0xf1, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, - 0xf9, 0xe8, 0xd3, 0xc4, 0x06, 0x5e, 0xf9, 0xf1, - 0xd0, 0x43, 0x40, 0x4c, 0xe9, 0xf1, 0x08, 0x49, - 0x00, 0x8d, 0x10, 0x87, 0x53, 0x02, 0x01, 0x46, - 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xf8, - 0x09, 0x49, 0x00, 0x0d, 0xd0, 0x9f, 0x40, 0x02, - 0xb0, 0x20, 0x03, 0x19, 0xe9, 0xfe, 0xb0, 0x20, - 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x80, - 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, - 0xe2, 0x8d, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xc1, - 0xe1, 0xca, 0xe1, 0xee, 0xe1, 0xf0, 0xe1, 0xa8, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8d, 0x06, 0x50, - 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, - 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x64, - 0x30, 0x5b, 0xfc, 0x11, 0xc0, 0x39, 0x30, 0x31, - 0x10, 0x12, 0x10, 0x20, 0xe9, 0x88, 0x03, 0x10, - 0xe9, 0x93, 0x0f, 0x19, 0xf9, 0x8f, 0xd1, 0x44, - 0xe1, 0x79, 0x03, 0xdf, 0xe9, 0x9d, 0xd3, 0x40, - 0xca, 0x50, 0xcb, 0x52, 0x03, 0x1d, 0xf9, 0xa4, - 0xca, 0x12, 0xca, 0x52, 0xe1, 0xa1, 0x03, 0x1d, - 0xf9, 0xa4, 0xca, 0x12, 0xca, 0x53, 0xca, 0xae, - 0xca, 0xef, 0xb1, 0x7e, 0x03, 0x1e, 0xfa, 0xea, - 0xb1, 0x7e, 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, - 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, - 0x1c, 0x48, 0xcc, 0xb1, 0x1c, 0x9f, 0x06, 0xd0, - 0xe9, 0xb6, 0x01, 0x69, 0xd0, 0x20, 0x3c, 0x80, - 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, 0x2c, 0x40, - 0x2c, 0x80, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, - 0xde, 0x84, 0xde, 0xc4, 0xe3, 0x1e, 0xd3, 0xc2, - 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xc6, 0xf2, 0x32, - 0xb3, 0x81, 0xe9, 0xca, 0x80, 0x07, 0xe2, 0x95, - 0x0d, 0x09, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, - 0xe9, 0xd6, 0x06, 0x5e, 0xf9, 0xdf, 0x08, 0x89, - 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xd6, 0xd3, 0xc4, - 0x06, 0x5e, 0xf9, 0xdf, 0xd0, 0x43, 0x40, 0x4c, - 0xe9, 0xdf, 0x08, 0x49, 0x00, 0x8d, 0x10, 0x87, - 0x53, 0x02, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, - 0x03, 0x1c, 0xe9, 0xe6, 0x09, 0x49, 0x00, 0x0d, - 0xd0, 0x9f, 0x40, 0x02, 0xb0, 0x20, 0x03, 0x19, - 0xe9, 0xec, 0xb0, 0x20, 0xa0, 0x2c, 0xe2, 0x5b, - 0x06, 0x5f, 0xfa, 0x80, 0xd4, 0x00, 0xc4, 0x50, - 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xdb, - 0xe1, 0xe9, 0xe2, 0x00, 0xe2, 0x02, 0xe1, 0xc3, - 0xe1, 0x65, 0x30, 0x5a, 0xe5, 0x8d, 0x06, 0x50, - 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, - 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x52, - 0x30, 0x5b, 0xfc, 0x11, 0xc0, 0x39, 0x30, 0x31, - 0x10, 0x11, 0x10, 0x20, 0xe9, 0x88, 0x03, 0x10, - 0xe9, 0x93, 0x0f, 0x19, 0xf9, 0x8f, 0xd1, 0x44, - 0xe1, 0x79, 0x03, 0xd0, 0xf9, 0x98, 0xca, 0x50, - 0x03, 0xde, 0xf9, 0x9a, 0xd1, 0x42, 0xe2, 0xea, - 0xcb, 0xaa, 0xcb, 0xeb, 0xc0, 0x50, 0x10, 0x54, - 0xc0, 0x90, 0x10, 0x8c, 0x10, 0x92, 0xd0, 0xc1, - 0x05, 0x50, 0xe9, 0xa5, 0xb0, 0xc2, 0x10, 0x60, - 0xfd, 0xa8, 0xb0, 0x7f, 0x10, 0xa0, 0xfd, 0xab, - 0xb0, 0xbf, 0x10, 0x5f, 0x10, 0x9f, 0x00, 0xef, - 0xd0, 0x3e, 0x20, 0x52, 0x20, 0x83, 0x20, 0x93, - 0x10, 0x4c, 0x10, 0x82, 0x40, 0x80, 0x50, 0x42, - 0xd0, 0x81, 0x14, 0x1f, 0x14, 0x01, 0x05, 0x50, - 0xe9, 0xbd, 0x50, 0x42, 0xe1, 0xbe, 0x54, 0x02, - 0xca, 0x10, 0xca, 0x50, 0xcb, 0x01, 0xcb, 0x41, - 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, - 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x49, - 0xcc, 0xb1, 0x1c, 0x9f, 0xc0, 0x1c, 0x10, 0x08, - 0x20, 0x1f, 0x05, 0x50, 0xf9, 0xd2, 0xb0, 0x3c, - 0x2c, 0x40, 0x2c, 0x80, 0x01, 0xb5, 0xd4, 0x00, - 0x2c, 0x80, 0x02, 0xe4, 0xde, 0x80, 0xde, 0xc1, - 0xe3, 0x1e, 0xd3, 0xc0, 0xf2, 0xd3, 0x13, 0xa0, - 0xed, 0xe0, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xe9, - 0x80, 0x07, 0xd4, 0x02, 0x44, 0x15, 0x14, 0x1f, - 0xc4, 0x50, 0xd3, 0x08, 0xe2, 0x95, 0xd0, 0x71, - 0x20, 0x56, 0x00, 0x48, 0xd1, 0x8c, 0x03, 0x0d, - 0x41, 0x8c, 0xe9, 0xf7, 0x08, 0x89, 0x03, 0xcd, - 0x13, 0xe3, 0xf9, 0xf6, 0xd3, 0xc4, 0xe1, 0xf7, - 0xb3, 0xc1, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, - 0x03, 0x1c, 0xe9, 0xfe, 0x09, 0x49, 0x00, 0x0d, - 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x7f, - 0xd4, 0x02, 0x44, 0x15, 0x14, 0x1f, 0xc4, 0x50, - 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xc9, - 0xe1, 0xd2, 0xe1, 0xe7, 0xe1, 0xe9, 0xe1, 0xab, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x91, 0x06, 0x50, - 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, - 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x52, - 0x30, 0x5b, 0xfc, 0x11, 0xbc, 0x10, 0xd0, 0x10, - 0x0c, 0x1e, 0xf9, 0x8e, 0xbc, 0x10, 0xd0, 0x20, - 0xc0, 0x40, 0x30, 0x70, 0xed, 0x8e, 0x03, 0x10, - 0xe9, 0x97, 0x0f, 0x19, 0xf9, 0x93, 0xd1, 0x44, - 0xe1, 0x79, 0x03, 0xd0, 0xf9, 0xa0, 0xca, 0x50, - 0xcb, 0x52, 0x03, 0x1d, 0xf9, 0xa7, 0xca, 0x12, - 0xca, 0x52, 0xe1, 0xa4, 0x03, 0x1d, 0xf9, 0xa7, - 0xca, 0x12, 0xca, 0x53, 0xca, 0xae, 0xca, 0xef, - 0xb1, 0x7e, 0x03, 0x1e, 0xfa, 0xea, 0xb1, 0x7e, - 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, - 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xc8, 0x00, 0x2a, - 0xd0, 0x00, 0x20, 0x1b, 0x20, 0x1b, 0x05, 0x50, - 0xf9, 0xb8, 0xb0, 0x3f, 0x10, 0x02, 0x7c, 0x40, - 0xcc, 0xb1, 0x1c, 0x9f, 0x01, 0x69, 0xd0, 0x3c, - 0x0c, 0x99, 0xe9, 0xc1, 0x3c, 0x80, 0xde, 0xa0, - 0x2c, 0x5f, 0x2c, 0x9f, 0xd0, 0x30, 0x70, 0x00, - 0x2c, 0x80, 0xde, 0xc1, 0xe3, 0x1e, 0xd3, 0xc0, - 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xce, 0xf2, 0x32, - 0xb3, 0x81, 0xe9, 0xd2, 0x80, 0x07, 0xe2, 0x95, - 0x0d, 0x09, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, - 0xe9, 0xde, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, - 0xf9, 0xdd, 0xd3, 0xc4, 0xe1, 0xde, 0xb3, 0xc1, - 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, - 0xe9, 0xe5, 0x09, 0x49, 0x00, 0x0d, 0xa0, 0x2c, - 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x7f, 0xd4, 0x00, - 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, - 0x50, 0x00, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xa3, - 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8a, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x87, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x64, 0x30, 0x5b, 0xfd, 0xb4, - 0xc0, 0x39, 0x30, 0x31, 0x10, 0x12, 0x10, 0x20, - 0xe9, 0x82, 0xd1, 0x42, 0xd3, 0x40, 0xe2, 0xea, - 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, - 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x48, 0xcc, 0xb1, - 0x1c, 0x9f, 0x06, 0xd0, 0xe9, 0x98, 0x01, 0x69, - 0xd0, 0x20, 0x3c, 0x80, 0xc0, 0x1c, 0x10, 0x08, - 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0x01, 0xb5, - 0xd4, 0x00, 0x2c, 0x80, 0xde, 0x84, 0xde, 0xc4, - 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, - 0x30, 0x5a, 0xe5, 0xc8, 0x00, 0x26, 0xd0, 0x00, - 0x70, 0x00, 0x10, 0x20, 0xe9, 0xbf, 0x00, 0xe0, - 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5c, 0x30, 0x5b, - 0xb0, 0x41, 0xed, 0xc8, 0x0f, 0x17, 0xf9, 0xb4, - 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xb8, - 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb4, 0xd6, 0x29, - 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, - 0xe5, 0xc8, 0x0f, 0x17, 0xf9, 0xc3, 0x02, 0xf2, - 0xd6, 0x2b, 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, - 0xe2, 0x95, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xb5, - 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8e, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8b, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x64, 0x30, 0x5b, 0xfd, 0xc6, - 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x88, - 0xbc, 0x10, 0xd0, 0x30, 0xc0, 0x40, 0x30, 0x70, - 0xed, 0x88, 0xd1, 0x42, 0xd3, 0x40, 0xe2, 0xea, - 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, - 0x17, 0x20, 0xf9, 0xb4, 0x00, 0xa8, 0xd0, 0x00, - 0xcc, 0x5b, 0x1c, 0x5f, 0x1c, 0x43, 0x20, 0x31, - 0x7c, 0x40, 0xb0, 0x3c, 0x7e, 0x80, 0xcc, 0xb1, - 0xce, 0xfa, 0x1c, 0x9f, 0x1e, 0xdf, 0x01, 0x69, - 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xa6, 0x3c, 0x80, - 0x0e, 0xd9, 0xe9, 0xa9, 0x3e, 0xc0, 0x3e, 0xf2, - 0x3e, 0xb1, 0xd0, 0x01, 0x40, 0x1b, 0x10, 0x05, - 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0xd0, 0x30, - 0x70, 0x00, 0x2c, 0x80, 0xe3, 0x1e, 0xf2, 0xd3, - 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xda, - 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, - 0xe9, 0xd1, 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, - 0x10, 0x5c, 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xda, - 0x0f, 0x17, 0xf9, 0xc6, 0x0f, 0x49, 0xf2, 0xd3, - 0x0f, 0x19, 0xf9, 0xca, 0xdf, 0x00, 0x00, 0x06, - 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, 0xc0, 0x5b, - 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xda, 0x0f, 0x17, - 0xf9, 0xd5, 0x02, 0xf7, 0xdc, 0x26, 0xe0, 0x46, - 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xa2, - 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8a, - 0xe1, 0x65, 0x30, 0x5a, 0xe5, 0x87, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x52, 0x30, 0x5b, 0xfd, 0xb3, - 0xc0, 0x39, 0x30, 0x31, 0x10, 0x11, 0x10, 0x20, - 0xe9, 0x82, 0xd1, 0x42, 0xd3, 0x41, 0xe2, 0xea, - 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, - 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x49, 0xcc, 0xb1, - 0x1c, 0x9f, 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, - 0x05, 0x50, 0xf9, 0x99, 0xb0, 0x3c, 0x2c, 0x40, - 0x2c, 0x80, 0x01, 0xb5, 0xd4, 0x00, 0x2c, 0x80, - 0x02, 0xe4, 0xde, 0x80, 0xde, 0xc1, 0xe3, 0x1e, - 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, - 0xe5, 0xc7, 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, - 0x10, 0x20, 0xe9, 0xbe, 0x00, 0xe0, 0xd0, 0x44, - 0x70, 0x41, 0x10, 0x5b, 0x30, 0x5b, 0xb0, 0x41, - 0xed, 0xc7, 0x0f, 0x17, 0xf9, 0xb3, 0x0f, 0x49, - 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xb7, 0xdf, 0x00, - 0x00, 0x06, 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, - 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xc7, - 0x0f, 0x17, 0xf9, 0xc2, 0x03, 0x30, 0xdc, 0x27, - 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, - 0x50, 0x00, 0x50, 0x00, 0x03, 0x76, 0xd0, 0x73, - 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xac, - 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8e, - 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8b, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x52, 0x30, 0x5b, 0xfd, 0xbd, - 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x88, - 0xbc, 0x10, 0xd0, 0x20, 0xc0, 0x40, 0x30, 0x70, - 0xed, 0x88, 0xd1, 0x42, 0xd3, 0x41, 0xe2, 0xea, - 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, - 0x17, 0x20, 0xf9, 0xab, 0x00, 0x2a, 0xd0, 0x00, - 0x20, 0x1b, 0x20, 0x1b, 0x05, 0x50, 0xf9, 0x9b, - 0xb0, 0x3f, 0x10, 0x02, 0x7c, 0x40, 0xcc, 0xb1, - 0x1c, 0x9f, 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, - 0xe9, 0xa4, 0x3c, 0x80, 0xde, 0xa0, 0x2c, 0x5f, - 0x2c, 0x9f, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, - 0xde, 0xc1, 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, - 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xd1, 0x00, 0x26, - 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, 0xe9, 0xc8, - 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5b, - 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xd1, 0x0f, 0x17, - 0xf9, 0xbd, 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, - 0xf9, 0xc1, 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb4, - 0xd6, 0x29, 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, - 0xb0, 0x7e, 0xe5, 0xd1, 0x0f, 0x17, 0xf9, 0xcc, - 0x03, 0x35, 0xda, 0x20, 0xe0, 0x46, 0xd3, 0x08, - 0xd3, 0xc0, 0xe2, 0x95, 0xd0, 0x61, 0x23, 0x81, - 0x0c, 0x49, 0xd0, 0x61, 0x00, 0x8d, 0x10, 0xa0, - 0xea, 0x3b, 0x30, 0x42, 0xe6, 0x30, 0x23, 0x82, - 0x0f, 0xc5, 0x0c, 0x09, 0x05, 0x0d, 0x15, 0x20, - 0xfe, 0x45, 0xd0, 0x65, 0x15, 0x63, 0xea, 0x43, - 0xd0, 0x53, 0x30, 0x54, 0xee, 0x4a, 0x0f, 0x17, - 0xfa, 0x45, 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, - 0x80, 0x07, 0x09, 0x49, 0xd4, 0x00, 0xd4, 0x40, - 0xd4, 0x80, 0xd4, 0xc0, 0x00, 0x4d, 0xa0, 0x6c, - 0xd0, 0xa1, 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, - 0x00, 0x50, 0xfa, 0x53, 0xf2, 0x32, 0xd3, 0x80, - 0xe1, 0x76, 0xd1, 0xc2, 0x41, 0xcf, 0x11, 0xdf, - 0xd0, 0x41, 0x01, 0xc1, 0x00, 0xef, 0xd0, 0xbe, - 0x03, 0x10, 0xf9, 0x77, 0x80, 0x07, 0x21, 0x96, - 0x11, 0xa2, 0xe9, 0x78, 0x03, 0x1d, 0xea, 0x73, - 0xc0, 0xd7, 0xc2, 0x90, 0xf2, 0xa4, 0xc4, 0x0a, - 0x03, 0xd0, 0xea, 0x72, 0xc2, 0x91, 0xf2, 0xa4, - 0xc4, 0x4a, 0x03, 0x1e, 0xea, 0x8d, 0xc0, 0xd8, - 0xc2, 0x92, 0xf2, 0xa4, 0xc4, 0x8a, 0x03, 0xd0, - 0xea, 0x7d, 0xc2, 0x93, 0xf2, 0xa4, 0xc4, 0xca, - 0xe2, 0x8d, 0xd3, 0xc0, 0xc0, 0xd7, 0xc2, 0x90, - 0xf2, 0xa4, 0xc4, 0x0a, 0x03, 0xd0, 0xea, 0x88, - 0xc2, 0x91, 0xf2, 0xa4, 0xc4, 0x4a, 0x08, 0x49, - 0x00, 0x4d, 0x10, 0x61, 0xf8, 0x11, 0x03, 0x1f, - 0xea, 0x93, 0x0d, 0xc9, 0x00, 0x4d, 0xd0, 0x1a, - 0xe2, 0x98, 0x03, 0x10, 0xfa, 0x97, 0xd0, 0x1d, - 0xe2, 0x98, 0xd0, 0x18, 0x0f, 0x16, 0xfa, 0x98, - 0xd0, 0x4c, 0x40, 0x4c, 0x10, 0x6c, 0xea, 0xa2, - 0x03, 0xde, 0xfa, 0xa2, 0x0f, 0x12, 0xfa, 0xa0, - 0x00, 0x08, 0xe2, 0xd9, 0xd2, 0x00, 0x13, 0xe1, - 0xee, 0xa9, 0x08, 0x49, 0x02, 0x0d, 0x00, 0xc8, - 0xc2, 0xca, 0x12, 0x94, 0xd0, 0x1f, 0x30, 0x07, - 0x12, 0xc0, 0xc2, 0x43, 0x12, 0x5a, 0x00, 0x0d, - 0x03, 0xde, 0xea, 0xb6, 0x0e, 0xc9, 0x04, 0x8d, - 0x02, 0x48, 0x22, 0x80, 0x12, 0x88, 0xd0, 0x0b, - 0x30, 0x03, 0x12, 0x80, 0xd0, 0x19, 0x20, 0x03, - 0x12, 0x80, 0x00, 0x0d, 0x22, 0xc0, 0x12, 0xc8, - 0xd0, 0x0b, 0x30, 0x09, 0x12, 0xc0, 0x12, 0xd8, - 0xd0, 0x16, 0x20, 0x09, 0x20, 0x07, 0x12, 0xc0, - 0x42, 0xc2, 0x22, 0x8b, 0x22, 0x88, 0x03, 0xde, - 0xea, 0xd2, 0x0e, 0xc9, 0xc4, 0x4a, 0x04, 0xcd, - 0x0f, 0xc5, 0x01, 0x46, 0x90, 0x4d, 0x00, 0xc6, - 0x10, 0x60, 0xe6, 0xd3, 0x0f, 0xc5, 0x01, 0xb5, - 0xd4, 0x00, 0xca, 0x9d, 0xcb, 0x9e, 0xca, 0xea, - 0xcb, 0xee, 0x2a, 0xc0, 0x2b, 0xc0, 0xca, 0x10, - 0xca, 0x51, 0xcb, 0x12, 0xcb, 0x53, 0xd1, 0x40, - 0xd3, 0x41, 0xb7, 0x3f, 0xc0, 0x5c, 0xe1, 0x7b, - 0xd0, 0xc0, 0xc1, 0x28, 0xc2, 0x2a, 0xc2, 0xab, - 0xf1, 0x7a, 0x0f, 0x17, 0xfa, 0xef, 0xcc, 0xe8, - 0xcd, 0x29, 0xcd, 0x6c, 0xcd, 0xad, 0xc8, 0x08, - 0xc8, 0x49, 0xca, 0x0a, 0xca, 0x4b, 0xf3, 0x31, - 0xd0, 0xc1, 0xc1, 0x34, 0xc2, 0x2a, 0xc2, 0xab, - 0xf1, 0x7a, 0x00, 0x28, 0xd9, 0xc0, 0xc8, 0x88, - 0xc8, 0xc9, 0xa9, 0xf8, 0xca, 0x8a, 0xca, 0xcb, - 0x11, 0x62, 0xe9, 0x79, 0xd0, 0xc0, 0xc1, 0x35, - 0xc2, 0x2e, 0xc2, 0xaf, 0xf1, 0x7a, 0xc9, 0x08, - 0xc9, 0x49, 0xa9, 0xf8, 0xcb, 0x0a, 0xcb, 0x4b, - 0xd0, 0xc1, 0xc1, 0x36, 0xc2, 0x2e, 0xc2, 0xaf, - 0xf1, 0x7a, 0xc0, 0x27, 0xc9, 0x88, 0xc9, 0xc9, - 0xa0, 0x38, 0xcb, 0x8a, 0xcb, 0xcb, 0xe1, 0x79, - 0x5f, 0x0d, 0x07, 0x7d, 0xde, 0x07, 0x11, 0x5e, - 0x30, 0x05, 0xcd, 0xc0, 0x00, 0x28, 0xd0, 0x00, - 0xa0, 0x38, 0x11, 0x61, 0xf9, 0x75, 0x00, 0xe2, - 0xd0, 0x00, 0x0f, 0x1d, 0xeb, 0x29, 0x00, 0x2d, - 0xdf, 0x4b, 0xf3, 0x3f, 0xe1, 0x75, 0x04, 0xeb, - 0xd0, 0x00, 0x11, 0x62, 0xeb, 0x36, 0xb0, 0x20, - 0x0f, 0x19, 0xfb, 0x36, 0xac, 0xe0, 0x01, 0xa4, - 0xde, 0x00, 0x5e, 0x0d, 0x00, 0x2d, 0xdf, 0x7a, - 0xdd, 0xc0, 0xd8, 0x80, 0xd9, 0x00, 0xd9, 0x80, - 0x5f, 0x00, 0x01, 0x46, 0x00, 0x28, 0xd0, 0x01, - 0x00, 0x06, 0xa0, 0x37, 0x80, 0x3f, 0x00, 0xc6, - 0x0f, 0xc5, 0xad, 0xda, 0xc6, 0xb1, 0xd0, 0x01, - 0x01, 0xa3, 0xde, 0x1d, 0x40, 0x30, 0x3e, 0x00, - 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, 0xc8, 0x28, - 0xc8, 0x69, 0xc8, 0xaa, 0xc8, 0xeb, 0x0c, 0x1e, - 0xfb, 0x68, 0x26, 0xba, 0x07, 0x7d, 0xdc, 0x00, - 0x1d, 0xcf, 0x1d, 0xd1, 0x5d, 0xc0, 0x00, 0x2d, - 0xdf, 0x64, 0x0f, 0x87, 0xad, 0xda, 0x80, 0x3f, - 0x0e, 0x0a, 0x66, 0xda, 0xc9, 0x2c, 0xc9, 0x6d, - 0xc9, 0xae, 0xc9, 0xef, 0x0f, 0x2f, 0xd0, 0x37, - 0x4f, 0x00, 0x0f, 0x1a, 0xeb, 0xbe, 0x01, 0xa4, - 0xde, 0x20, 0xd0, 0x01, 0x40, 0x3c, 0x2e, 0x00, - 0x00, 0x2d, 0xdf, 0x7a, 0xac, 0xe0, 0x0f, 0x87, - 0x0e, 0x0a, 0x76, 0xe0, 0xbf, 0x79, 0xbe, 0x3c, - 0x0f, 0x1b, 0xeb, 0x9e, 0x0f, 0x87, 0x0e, 0x0a, - 0x76, 0xe1, 0xbf, 0x79, 0xbe, 0x34, 0x18, 0xa0, - 0xeb, 0xb9, 0x0f, 0x87, 0xad, 0x20, 0x80, 0x3f, - 0x0e, 0x0a, 0x76, 0xe2, 0xbf, 0x79, 0xbe, 0x3c, - 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe3, 0x0f, 0x1b, - 0xeb, 0xb3, 0xbf, 0x77, 0xbe, 0x0c, 0x19, 0x20, - 0xeb, 0xb9, 0x0f, 0x87, 0xad, 0x60, 0x80, 0x3f, - 0x0e, 0x0a, 0x76, 0xe4, 0xbe, 0x3c, 0xbf, 0x75, - 0x0f, 0x15, 0xf8, 0x1c, 0x1f, 0x0a, 0x1f, 0x16, - 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe5, 0xbf, 0x79, - 0xbe, 0x34, 0x19, 0xa0, 0xeb, 0xb9, 0x0f, 0x87, - 0xad, 0xa0, 0x80, 0x3f, 0x0e, 0x0a, 0x76, 0xe6, - 0xbe, 0x3c, 0xbf, 0x79, 0x0f, 0x87, 0x0e, 0x0a, - 0x76, 0xe7, 0x0f, 0x15, 0xeb, 0xbe, 0x00, 0x2f, - 0xdf, 0x72, 0x1d, 0xe0, 0xf8, 0x1c, 0x00, 0x28, - 0xd0, 0x01, 0xa0, 0x38, 0x80, 0x3f, 0x0f, 0x87, - 0xd0, 0x01, 0x4d, 0xc0, 0x1f, 0x0f, 0x1f, 0x11, - 0x00, 0x2f, 0xdf, 0x76, 0xc6, 0xb2, 0x03, 0x7d, - 0xde, 0x0e, 0x01, 0xa3, 0xde, 0x2d, 0x5d, 0xc0, - 0x0f, 0x87, 0x1e, 0xe1, 0xeb, 0xdb, 0xad, 0xda, - 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, 0x0c, 0x1e, - 0xfb, 0xe4, 0x26, 0xbb, 0x03, 0xff, 0xdd, 0xff, - 0x4d, 0xc0, 0x00, 0xa3, 0xde, 0x2d, 0xbf, 0x56, - 0x0f, 0x87, 0x07, 0x7d, 0xde, 0x0e, 0x5d, 0xc0, - 0x00, 0xa3, 0xde, 0x1d, 0xad, 0xda, 0x80, 0x3f, - 0x0e, 0x0a, 0x66, 0xda, 0xdf, 0x5c, 0xd0, 0x0e, - 0x4f, 0x00, 0x0f, 0x87, 0xd0, 0x06, 0x40, 0x3c, - 0xeb, 0xf0, 0xbf, 0x3e, 0xb0, 0x04, 0xe7, 0xf2, - 0xeb, 0xf6, 0xbf, 0x0c, 0xbf, 0x3a, 0x0f, 0x87, - 0x0f, 0x1d, 0xfb, 0x4b, 0xbf, 0x38, 0x0f, 0x87, - 0x0f, 0x1c, 0xfb, 0xcb, 0xbf, 0x30, 0x0f, 0x87, - 0x50, 0x00, 0x50, 0x00, 0x0f, 0x17, 0xf9, 0x70, - 0x90, 0x4d, 0x10, 0x60, 0xe5, 0x72, 0x0f, 0x49, - 0x90, 0x4d, 0x10, 0x60, 0xe5, 0x76, 0x0f, 0x19, - 0xf9, 0x79, 0x01, 0x46, 0xd0, 0x11, 0xa0, 0x38, - 0x80, 0x3f, 0x00, 0xc6, 0xdf, 0x00, 0x00, 0x06, - 0x08, 0x20, 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x0a, - 0xa0, 0x1b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, - 0xa0, 0x27, 0x90, 0x4d, 0x0f, 0xff, 0xd8, 0x1f, - 0x40, 0x40, 0xa0, 0x4d, 0x80, 0x0a, 0xd0, 0x00, - 0x06, 0x50, 0xf9, 0x95, 0xd0, 0x01, 0xa0, 0x09, - 0x80, 0x1b, 0xa0, 0x27, 0x01, 0x20, 0xd0, 0x67, - 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, - 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, - 0x01, 0x20, 0xd0, 0x40, 0xa0, 0x69, 0x80, 0x2b, - 0x80, 0x07, 0x08, 0x20, 0xdf, 0x00, 0x02, 0x30, - 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, 0x01, 0xb0, - 0xd0, 0x10, 0xa0, 0x37, 0x80, 0x3f, 0x02, 0x30, - 0xd0, 0x01, 0xa0, 0x38, 0xd0, 0x10, 0xa0, 0x38, - 0x15, 0x63, 0xe9, 0xba, 0x05, 0x5e, 0xf9, 0xfa, - 0xc0, 0xdf, 0x00, 0xe0, 0xd1, 0x80, 0x70, 0x06, - 0x10, 0x1c, 0xc1, 0x40, 0x11, 0x48, 0xd3, 0x10, - 0x00, 0x21, 0xd0, 0x80, 0xb0, 0x16, 0xe9, 0xca, - 0xd3, 0x20, 0x10, 0x81, 0xb0, 0x16, 0xf9, 0xfa, - 0x30, 0xc2, 0xd2, 0x64, 0xd0, 0x92, 0x00, 0xee, - 0xd0, 0x54, 0x70, 0x41, 0x30, 0x43, 0xed, 0xd7, - 0xd2, 0x6c, 0x72, 0x49, 0xc0, 0x89, 0xb0, 0xbf, - 0x10, 0x9f, 0x22, 0x42, 0x04, 0x31, 0xd0, 0x10, - 0xc0, 0x42, 0x30, 0x49, 0xe5, 0xde, 0x10, 0x03, - 0xc1, 0x0c, 0xc1, 0x83, 0xb1, 0xbe, 0x01, 0x46, - 0x00, 0x06, 0xa0, 0x3d, 0xa0, 0x3c, 0x60, 0x06, - 0x00, 0xc6, 0xb1, 0xbc, 0xb1, 0x01, 0xed, 0xe1, - 0xc1, 0x0c, 0x21, 0x85, 0x01, 0x46, 0x00, 0x06, - 0xa0, 0x3d, 0xa0, 0x3c, 0x60, 0x06, 0x00, 0xc6, - 0xb1, 0xbc, 0xb1, 0x01, 0xed, 0xec, 0x02, 0xe4, - 0xd0, 0x00, 0x20, 0xc0, 0xb2, 0x41, 0xed, 0xd8, - 0x15, 0xa3, 0xfa, 0x00, 0xbc, 0x10, 0x0c, 0x1e, - 0xfa, 0x00, 0xbc, 0x10, 0xd0, 0x04, 0x70, 0x00, - 0x10, 0x20, 0xfa, 0x00, 0x00, 0x27, 0xd0, 0x10, - 0xd0, 0x40, 0x60, 0x40, 0x00, 0x26, 0xd0, 0x14, - 0x60, 0x40, 0xb0, 0x28, 0x70, 0x40, 0xb0, 0x7f, - 0x60, 0x40, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, - 0x50, 0x00, 0x50, 0x00, 0x00, 0x28, 0xd1, 0xb0, - 0x70, 0x06, 0xd0, 0x81, 0x60, 0x86, 0x10, 0x20, - 0xe9, 0xab, 0xb0, 0x3f, 0x60, 0x06, 0x00, 0xec, - 0xd1, 0x84, 0x70, 0x46, 0xb1, 0x84, 0x70, 0x86, - 0x30, 0x42, 0xe9, 0xab, 0x70, 0x42, 0xd0, 0x35, - 0x30, 0x40, 0xf9, 0xab, 0x00, 0x63, 0xd0, 0x3f, - 0xb0, 0xbc, 0x40, 0x80, 0x70, 0xc2, 0x10, 0xe3, - 0xe5, 0xab, 0xb0, 0xbc, 0x40, 0x80, 0x60, 0x86, - 0x00, 0x28, 0xd0, 0x24, 0x70, 0x40, 0x00, 0x22, - 0xd0, 0x80, 0x50, 0x42, 0x60, 0x40, 0x00, 0x64, - 0xd0, 0x60, 0xd0, 0x90, 0x60, 0x81, 0x00, 0xed, - 0xd1, 0x88, 0x70, 0x46, 0x10, 0xe4, 0xe9, 0xa8, - 0x00, 0x21, 0xd0, 0xe8, 0xd0, 0x00, 0x60, 0x03, - 0xd0, 0x81, 0x40, 0x42, 0x60, 0x46, 0x02, 0x3c, - 0xdc, 0x89, 0xe0, 0x46, 0xd0, 0x82, 0x50, 0x42, - 0x60, 0x46, 0x00, 0x23, 0xd5, 0x3e, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x01, 0x46, 0xdf, 0x5c, - 0x08, 0x20, 0xd1, 0x00, 0xcf, 0x04, 0x11, 0x08, - 0xa1, 0x0a, 0xa1, 0x1b, 0x11, 0x1f, 0xa1, 0x27, - 0xd2, 0x80, 0xb2, 0x81, 0x90, 0x4d, 0xc0, 0x01, - 0x10, 0x14, 0x00, 0x16, 0xe9, 0x8d, 0x80, 0x33, - 0x80, 0x3f, 0x92, 0x8b, 0x00, 0x23, 0xd0, 0x3f, - 0x42, 0x80, 0xe9, 0x8d, 0x0f, 0xff, 0xdf, 0xff, - 0x40, 0x01, 0xa0, 0x0d, 0xe1, 0x94, 0xa1, 0x0a, - 0x00, 0xea, 0xd0, 0x00, 0xd0, 0x8e, 0x00, 0x06, - 0x0f, 0x0b, 0x70, 0x80, 0x80, 0x73, 0x80, 0x0a, - 0xd0, 0x00, 0x06, 0x50, 0xf9, 0x9a, 0xd0, 0x01, - 0xd0, 0x44, 0x40, 0x70, 0x20, 0x01, 0x15, 0x63, - 0xf9, 0xa1, 0x80, 0x1b, 0xe1, 0xa2, 0x80, 0x5b, - 0xa0, 0x27, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, - 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, - 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, - 0xd0, 0x40, 0xa0, 0x69, 0x80, 0x2b, 0x80, 0x07, - 0x08, 0x20, 0xd0, 0x00, 0xcf, 0x00, 0x02, 0x30, - 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, 0x01, 0xb2, - 0xd2, 0x10, 0xa0, 0x37, 0x80, 0x3f, 0x02, 0x30, - 0xd0, 0x01, 0xa0, 0x38, 0x00, 0x30, 0xd0, 0x10, - 0xa0, 0x38, 0x80, 0x3f, 0x00, 0xc6, 0x00, 0x28, - 0xd1, 0x24, 0x70, 0x04, 0xd0, 0x41, 0x50, 0x01, - 0x60, 0x04, 0x00, 0x27, 0xd0, 0x18, 0x70, 0x40, - 0xb0, 0x7f, 0x60, 0x40, 0x00, 0x26, 0xd0, 0x20, - 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x08, 0x20, - 0xdf, 0x00, 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, - 0xd4, 0xc0, 0xd3, 0x81, 0x12, 0xa0, 0xed, 0xe3, - 0xd0, 0x08, 0x0a, 0x09, 0x00, 0x4d, 0xb0, 0x01, - 0xed, 0xdf, 0x03, 0xbf, 0xd4, 0x27, 0xe0, 0x46, - 0x50, 0x00, 0x50, 0x00, 0x02, 0x24, 0xd0, 0x00, - 0xa0, 0x37, 0x00, 0x27, 0xd3, 0xd0, 0x00, 0x26, - 0xd0, 0x04, 0x73, 0xcf, 0x13, 0xe1, 0xe9, 0x7b, - 0xb0, 0x3c, 0xf2, 0x00, 0x00, 0x26, 0xd0, 0x40, - 0xd0, 0x00, 0x60, 0x01, 0x00, 0x26, 0xd0, 0x14, - 0xf2, 0x00, 0x00, 0x26, 0xd0, 0x18, 0xf2, 0x00, - 0x00, 0xee, 0xd0, 0x1c, 0x71, 0x40, 0xd1, 0x24, - 0x15, 0x63, 0xe9, 0x8d, 0x11, 0x1f, 0xc7, 0x1a, - 0xb7, 0x01, 0xd3, 0x81, 0xc4, 0xd4, 0xf2, 0x04, - 0x00, 0x26, 0xd0, 0x18, 0x70, 0x40, 0xb0, 0x54, - 0xfd, 0x9b, 0x00, 0xed, 0xd0, 0x24, 0xd0, 0x44, - 0x60, 0x40, 0x13, 0xe1, 0xf9, 0xbc, 0x15, 0xa3, - 0xf9, 0xa1, 0x0c, 0x10, 0xe9, 0xb9, 0x11, 0x61, - 0xe5, 0xb3, 0xed, 0xb9, 0x15, 0xa3, 0xf9, 0xab, - 0x00, 0x26, 0xd0, 0x14, 0x70, 0x40, 0x10, 0x62, - 0xf5, 0xb3, 0x15, 0x22, 0xe5, 0xb3, 0xc0, 0x44, - 0x30, 0x54, 0xe5, 0xb3, 0x34, 0xd4, 0xf5, 0xb3, - 0xe1, 0xbf, 0x03, 0xb4, 0xd6, 0x29, 0x00, 0x26, - 0xd0, 0x40, 0x60, 0x01, 0xe1, 0xdb, 0x03, 0xb4, - 0xd6, 0x29, 0xe0, 0x46, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x80, 0x07, 0x09, 0x49, 0xd4, 0x00, - 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, 0x00, 0x4d, - 0xa0, 0x6c, 0xd3, 0x80, 0xd0, 0xa1, 0x00, 0x88, - 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, 0xf9, 0xc9, - 0x0c, 0x49, 0xd0, 0x61, 0x00, 0x8d, 0x10, 0xa0, - 0xe9, 0x90, 0x30, 0x42, 0xf5, 0xd8, 0xd0, 0x61, - 0x23, 0x81, 0xe1, 0xce, 0x23, 0x82, 0x13, 0xa1, - 0xf9, 0x90, 0xd0, 0x42, 0x15, 0xa1, 0xf9, 0xdf, - 0xb0, 0x7f, 0x00, 0x26, 0xd0, 0x14, 0x70, 0x00, - 0x30, 0x01, 0xf5, 0xe8, 0x16, 0xe0, 0xe5, 0xe8, - 0xb6, 0xc1, 0xbc, 0x20, 0xc0, 0x44, 0x30, 0x5b, - 0xfd, 0xb9, 0xc0, 0x44, 0x30, 0x54, 0xe5, 0xb9, - 0x15, 0x63, 0xf9, 0xf8, 0x15, 0xa3, 0xf9, 0xf5, - 0x03, 0x3c, 0xd8, 0x1c, 0xe0, 0x46, 0x03, 0x39, - 0xda, 0x17, 0xe0, 0x46, 0x15, 0xa3, 0xf9, 0xfd, - 0x03, 0x72, 0xde, 0x19, 0xe0, 0x46, 0x03, 0x70, - 0xd0, 0x17, 0xe0, 0x46, 0x70, 0x40, 0xb0, 0x7f, - 0x60, 0x40, 0x0f, 0xc5, 0xdf, 0x00, 0x0c, 0x09, - 0x05, 0x0d, 0x08, 0x20, 0xdf, 0x00, 0x0f, 0xc5, - 0x50, 0x00, 0x50, 0x00, 0x00, 0xef, 0xd0, 0x14, - 0x70, 0x40, 0x10, 0x60, 0xe9, 0x45, 0xb0, 0x04, - 0x70, 0x40, 0xb0, 0x41, 0xed, 0x44, 0x00, 0xed, - 0xd0, 0x24, 0xd0, 0x44, 0x60, 0x40, 0x00, 0x64, - 0xd0, 0x20, 0x70, 0x00, 0x10, 0x30, 0xe9, 0x45, - 0x00, 0x21, 0xd0, 0x28, 0x60, 0x40, 0x00, 0x64, - 0xd2, 0xc0, 0x70, 0x0b, 0x00, 0x11, 0xe9, 0x6a, - 0x08, 0x20, 0xd0, 0x4f, 0x30, 0x40, 0xe9, 0x55, - 0xb0, 0x4f, 0xf9, 0x6a, 0x03, 0xef, 0xdf, 0xbf, - 0xaf, 0xb8, 0xdf, 0x80, 0x0f, 0x87, 0xd0, 0x18, - 0x70, 0x00, 0x10, 0x20, 0xed, 0x6c, 0xdf, 0x84, - 0xd0, 0x40, 0x60, 0x7e, 0x00, 0x27, 0xd0, 0x54, - 0x70, 0x41, 0x10, 0x60, 0x01, 0xa0, 0xd0, 0x40, - 0xa0, 0x78, 0x80, 0x34, 0x80, 0x3f, 0x01, 0x3c, - 0xd2, 0x39, 0x00, 0x21, 0xdf, 0x86, 0x0f, 0x87, - 0xd0, 0x40, 0x60, 0x4b, 0x03, 0xe6, 0xd0, 0x08, - 0xe0, 0x36, 0x50, 0x00, 0x00, 0x28, 0xd0, 0x24, - 0x72, 0xc0, 0xd0, 0x40, 0x60, 0x40, 0xd0, 0x0c, - 0x52, 0xc0, 0xc0, 0x1c, 0x30, 0x1d, 0xf5, 0x3c, - 0x20, 0x1f, 0x30, 0x1e, 0x90, 0x6d, 0x20, 0x01, - 0x00, 0x22, 0xd0, 0x58, 0x60, 0x01, 0x00, 0xe3, - 0xd0, 0x48, 0x70, 0x41, 0x30, 0x40, 0xf5, 0x47, - 0xb2, 0xc8, 0x00, 0xe3, 0xd0, 0x4c, 0x70, 0x41, - 0x30, 0x40, 0xfd, 0x4d, 0xb2, 0xc4, 0x00, 0x28, - 0xd0, 0x20, 0x70, 0x00, 0x42, 0xc0, 0xa2, 0xc5, - 0x12, 0xe0, 0xe9, 0x55, 0x80, 0x40, 0x80, 0x34, - 0x80, 0x3f, 0xcf, 0x95, 0x82, 0x34, 0x80, 0x3f, - 0x03, 0xe8, 0xd0, 0x00, 0x1f, 0xa3, 0xe9, 0x60, - 0x03, 0xea, 0xd0, 0x00, 0x00, 0x27, 0xd0, 0x4c, - 0x7f, 0x81, 0x00, 0x27, 0xd0, 0x54, 0x70, 0x41, - 0x10, 0x60, 0x03, 0xa0, 0xd0, 0x40, 0xa0, 0x78, - 0xe0, 0x3c, 0x50, 0x00, 0xc0, 0x84, 0x10, 0x8c, - 0x10, 0x92, 0xd0, 0x41, 0x30, 0x4d, 0x40, 0x43, - 0x10, 0x43, 0x20, 0x81, 0xd1, 0x8f, 0x41, 0x82, - 0x10, 0x9c, 0x20, 0x9b, 0xc1, 0xc2, 0x10, 0x82, - 0x20, 0x87, 0xc0, 0x42, 0x10, 0x43, 0x20, 0x81, - 0x10, 0x88, 0x22, 0x02, 0x10, 0x97, 0x01, 0xd0, - 0xe9, 0x48, 0xb0, 0x96, 0x10, 0x88, 0x22, 0x82, - 0xc0, 0x5c, 0x10, 0x48, 0xc0, 0x84, 0x10, 0x91, - 0x10, 0x86, 0x20, 0x42, 0x41, 0x0d, 0x11, 0x02, - 0x20, 0x44, 0x22, 0x01, 0x22, 0x81, 0x02, 0xe4, - 0xd2, 0x40, 0xc2, 0xca, 0xb2, 0xe0, 0x01, 0xd0, - 0xe9, 0x5e, 0xc2, 0xca, 0x22, 0xc9, 0xb2, 0xa0, - 0x22, 0x48, 0xd0, 0x78, 0x03, 0x50, 0xf9, 0x69, - 0xd0, 0x7c, 0x01, 0x9d, 0xf9, 0x69, 0xc2, 0x48, - 0xb2, 0x60, 0xc2, 0xca, 0xb2, 0xf0, 0x11, 0x82, - 0x41, 0x81, 0x22, 0x06, 0x11, 0x9f, 0x41, 0x81, - 0x22, 0x86, 0x0f, 0xc5, 0xc0, 0x84, 0x10, 0x8c, - 0x10, 0x92, 0xd1, 0x8f, 0x41, 0x82, 0x10, 0x9c, - 0xc1, 0xdb, 0x11, 0xc1, 0x21, 0xc3, 0x20, 0x87, - 0xc1, 0xc2, 0x10, 0x82, 0x20, 0x87, 0xc0, 0x42, - 0x10, 0x43, 0x20, 0x81, 0x10, 0x88, 0x22, 0x02, - 0x10, 0x97, 0x01, 0xd0, 0xe9, 0x46, 0xb0, 0x96, - 0x10, 0x88, 0x22, 0x82, 0xc0, 0x5c, 0x10, 0x48, - 0xc0, 0x84, 0x10, 0x91, 0x10, 0x86, 0x20, 0x42, - 0xd0, 0x81, 0x41, 0x02, 0x11, 0x02, 0x20, 0x44, - 0x22, 0x01, 0x22, 0x81, 0x02, 0xe4, 0xd2, 0x40, - 0xc2, 0xca, 0xb2, 0xe0, 0x01, 0xd0, 0xe9, 0x5d, - 0xc2, 0xca, 0x22, 0xc9, 0xb2, 0xa0, 0x22, 0x48, - 0x11, 0x9f, 0x11, 0x83, 0x22, 0x06, 0x11, 0x9c, - 0x11, 0x83, 0x22, 0x86, 0x0f, 0xc5, 0xd0, 0x41, - 0x40, 0x44, 0x20, 0x55, 0x10, 0x62, 0xf9, 0x6f, - 0x01, 0xb5, 0xd4, 0x00, 0xc2, 0x9f, 0xc2, 0x1f, - 0x22, 0x80, 0xe1, 0x30, 0x0f, 0x11, 0xf9, 0x51, - 0x90, 0x38, 0x80, 0x3f, 0x00, 0x1b, 0xf9, 0x51, - 0x00, 0x27, 0xd0, 0x04, 0x70, 0x40, 0x30, 0x71, - 0xf9, 0x51, 0xb0, 0x3c, 0x70, 0x40, 0x30, 0x5d, - 0xf9, 0x51, 0xb0, 0x08, 0x70, 0x40, 0xb0, 0x7f, - 0x60, 0x40, 0x10, 0x63, 0xe5, 0x5d, 0x02, 0x20, - 0xd0, 0x01, 0xa0, 0x37, 0x00, 0x26, 0xd0, 0x24, - 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0xb0, 0x08, - 0x70, 0x40, 0xb0, 0x41, 0x60, 0x40, 0x00, 0x26, - 0xd0, 0x30, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, - 0xb0, 0x30, 0xd0, 0x40, 0x60, 0x40, 0xb0, 0x3c, - 0x6c, 0x40, 0xb0, 0x3c, 0x67, 0x40, 0x00, 0x33, - 0xdf, 0xb0, 0xe0, 0x36, 0x00, 0x26, 0xd0, 0x1c, - 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0xb0, 0x3c, - 0x70, 0x40, 0xb0, 0x41, 0x60, 0x40, 0x08, 0x20, - 0xdf, 0x00, 0x80, 0x35, 0xc0, 0x3c, 0x10, 0x08, - 0xa0, 0x0a, 0xa0, 0x27, 0xa0, 0x1b, 0xdf, 0x5c, - 0x01, 0xa0, 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, - 0x80, 0x34, 0x80, 0x3f, 0x03, 0xbb, 0xd8, 0x1e, - 0xcf, 0x95, 0x82, 0x34, 0x80, 0x3f, 0x03, 0xe8, - 0xd0, 0x00, 0x1f, 0xa3, 0xe9, 0x55, 0x1f, 0xa0, - 0xe9, 0x55, 0x03, 0xea, 0xd0, 0x00, 0x00, 0x21, - 0xdf, 0x86, 0xe0, 0x3c, 0x89, 0x78, 0x89, 0x37, - 0x00, 0xee, 0xd0, 0x14, 0x76, 0x00, 0xd0, 0x30, - 0x76, 0x40, 0x26, 0x58, 0xd6, 0xd9, 0x00, 0xee, - 0xd0, 0x20, 0x75, 0x40, 0xd0, 0x1c, 0x71, 0x40, - 0xd0, 0x20, 0x71, 0x00, 0xd0, 0x24, 0x70, 0x80, - 0xc4, 0x02, 0xd0, 0x28, 0x70, 0xc0, 0x00, 0x21, - 0xd0, 0x10, 0x72, 0x00, 0x93, 0x90, 0xd4, 0x81, - 0x13, 0x96, 0x43, 0x92, 0x34, 0x8e, 0x00, 0x22, - 0xd1, 0xa4, 0x71, 0x86, 0xde, 0x40, 0x7e, 0x79, - 0xd0, 0x18, 0x70, 0x40, 0xb0, 0x41, 0xf5, 0x58, - 0xd3, 0x42, 0x50, 0x4d, 0x60, 0x40, 0x10, 0x60, - 0xe5, 0x62, 0xd0, 0x54, 0x70, 0x01, 0xb0, 0x3c, - 0x60, 0x01, 0x04, 0x2d, 0xd0, 0x30, 0xe0, 0x36, - 0x00, 0x22, 0xd0, 0x60, 0x71, 0xc1, 0xd0, 0x4f, - 0x41, 0xc1, 0x04, 0x20, 0xd0, 0x28, 0xe0, 0x36, - 0x50, 0x00, 0x50, 0x00, 0x04, 0x22, 0xd0, 0x18, - 0xd3, 0x44, 0x72, 0x8d, 0x12, 0xa0, 0xe8, 0x36, - 0xc0, 0x47, 0x10, 0x5d, 0x30, 0x4e, 0xf8, 0x36, - 0xb2, 0x3e, 0x60, 0x4d, 0x00, 0xed, 0xd0, 0x48, - 0x70, 0x01, 0xde, 0x45, 0x50, 0x39, 0x00, 0x1b, - 0xf9, 0x44, 0xb0, 0x01, 0x00, 0x1c, 0xf9, 0x47, - 0xb0, 0x04, 0x60, 0x01, 0xd0, 0x40, 0x62, 0x81, - 0xce, 0x4a, 0xd0, 0x43, 0x41, 0xc1, 0xd0, 0x58, - 0x61, 0xc1, 0x90, 0x43, 0x00, 0xe0, 0xd0, 0x28, - 0x70, 0x00, 0x10, 0x1f, 0x20, 0x40, 0xb1, 0xc1, - 0xf5, 0x54, 0x00, 0x21, 0xd0, 0x08, 0x60, 0x40, - 0x00, 0xe6, 0xd0, 0x40, 0x70, 0x41, 0xd2, 0x94, - 0x60, 0x4a, 0x04, 0x2c, 0xd0, 0x08, 0x01, 0x90, - 0xf8, 0x36, 0x04, 0x2d, 0xd0, 0x30, 0xe0, 0x36, - 0x50, 0x00, 0x50, 0x00, 0xc0, 0x47, 0x10, 0x5d, - 0x30, 0x4e, 0xf9, 0x41, 0x90, 0x43, 0x00, 0xe0, - 0xd0, 0x28, 0x70, 0x00, 0x20, 0x40, 0x00, 0x21, - 0xd0, 0x08, 0x60, 0x40, 0x00, 0x26, 0xd0, 0x74, - 0x70, 0x01, 0xb0, 0x3f, 0x60, 0x01, 0x00, 0xed, - 0xd0, 0x48, 0x70, 0x41, 0x00, 0x5e, 0xf9, 0x4b, - 0x00, 0x21, 0xd0, 0x00, 0x73, 0x80, 0xd4, 0x81, - 0x34, 0x8e, 0x00, 0x34, 0xd3, 0x70, 0xe0, 0x36, - 0x50, 0x00, 0x50, 0x00, 0xd1, 0x88, 0xd1, 0xc8, - 0x01, 0x1b, 0xe9, 0x39, 0x11, 0x9f, 0x11, 0xdf, - 0xd4, 0x80, 0xd3, 0x81, 0xe1, 0x43, 0x00, 0xed, - 0xd0, 0x08, 0x70, 0x00, 0x00, 0x10, 0xf9, 0x37, - 0x0c, 0x1f, 0xf9, 0x36, 0x13, 0xa1, 0xe9, 0x43, - 0xbe, 0x7c, 0x00, 0x69, 0xd2, 0x54, 0x12, 0x48, - 0xc0, 0x39, 0x30, 0x18, 0xe5, 0x4b, 0xd2, 0x70, - 0x72, 0x49, 0x22, 0x79, 0x00, 0x21, 0xd0, 0x00, - 0x63, 0x80, 0x04, 0x24, 0xd0, 0x38, 0x02, 0x10, - 0xe9, 0x56, 0xd0, 0x41, 0x51, 0x41, 0xe0, 0x36, - 0x15, 0x61, 0xe8, 0x36, 0xd5, 0x80, 0xd3, 0x00, - 0xd3, 0x40, 0x04, 0x28, 0xd0, 0x18, 0xe0, 0x36, - 0x50, 0x00, 0x50, 0x00, 0x00, 0x21, 0xd0, 0x18, - 0x73, 0x00, 0xb0, 0x04, 0x73, 0x80, 0xd2, 0x80, - 0xb0, 0x38, 0x72, 0xc0, 0x31, 0x0d, 0xc0, 0x0e, - 0x10, 0x0b, 0x10, 0x20, 0xe9, 0x42, 0xf5, 0x3f, - 0x22, 0x8d, 0x10, 0x01, 0x13, 0x5f, 0xe1, 0x3b, - 0x33, 0x8b, 0x15, 0x61, 0xf9, 0x49, 0x00, 0x21, - 0xd0, 0x64, 0x70, 0x41, 0x33, 0x81, 0x03, 0xd0, - 0xe9, 0x4c, 0x20, 0x0b, 0x13, 0xdf, 0x12, 0xc1, - 0x13, 0xe0, 0xf9, 0x49, 0x10, 0x03, 0xc0, 0x50, - 0x10, 0x4b, 0x13, 0x0b, 0x23, 0x00, 0x13, 0x20, - 0xe9, 0x5c, 0xf5, 0x59, 0x22, 0x81, 0x13, 0x01, - 0x10, 0x5f, 0xe1, 0x55, 0x12, 0x99, 0x12, 0x87, - 0x21, 0x0a, 0x00, 0xa0, 0xd2, 0x80, 0xc3, 0x0a, - 0x03, 0x90, 0xe9, 0x66, 0x22, 0x82, 0x23, 0x03, - 0x10, 0x81, 0x10, 0xc1, 0x13, 0x9f, 0x13, 0xa0, - 0xed, 0x62, 0xc0, 0x8a, 0xc0, 0xcc, 0x04, 0x26, - 0xd0, 0x38, 0xe0, 0x36, 0x15, 0x61, 0xf9, 0x3d, - 0x07, 0x32, 0xd0, 0x00, 0x30, 0x03, 0xed, 0x3d, - 0xc0, 0x03, 0x10, 0x1d, 0x30, 0xc0, 0xc0, 0x02, - 0x10, 0x1d, 0x30, 0x80, 0xe1, 0x32, 0x10, 0x94, - 0x10, 0xd4, 0x00, 0x21, 0xd0, 0x20, 0x73, 0x00, - 0xc5, 0x8c, 0xd3, 0x4e, 0x01, 0x1b, 0xe9, 0x48, - 0x13, 0x1f, 0xd3, 0x4f, 0x43, 0x4c, 0x13, 0x1c, - 0xc0, 0x0c, 0x10, 0x03, 0x20, 0x0c, 0xc0, 0x40, - 0x10, 0x42, 0x20, 0x40, 0x10, 0x46, 0x20, 0x4d, - 0x10, 0x42, 0x2e, 0x41, 0x10, 0x5c, 0x10, 0x43, - 0x00, 0x59, 0xe9, 0x5b, 0x01, 0x69, 0xd0, 0x20, - 0x30, 0x40, 0x22, 0x41, 0x04, 0x28, 0xd0, 0x18, - 0xe0, 0x36, 0x50, 0x00, 0x2c, 0x14, 0xd0, 0x34, - 0x63, 0x00, 0xd0, 0x38, 0x72, 0xc0, 0xc0, 0x51, - 0x10, 0x5c, 0x30, 0x4b, 0x10, 0x44, 0xd4, 0xc0, - 0xd5, 0x00, 0xc0, 0x18, 0x30, 0x39, 0xed, 0x5f, - 0xd4, 0xd0, 0xc5, 0x01, 0xd0, 0x18, 0x70, 0x00, - 0x0c, 0x1f, 0xe9, 0x48, 0x10, 0x20, 0xfd, 0x48, - 0xd4, 0xc0, 0xd5, 0x00, 0x10, 0x22, 0xe5, 0x4e, - 0xd4, 0xc0, 0xbc, 0x30, 0xd5, 0x00, 0xb5, 0x10, - 0xb0, 0x3f, 0xf9, 0x52, 0x3c, 0x01, 0x3c, 0x01, - 0x02, 0x1f, 0xe9, 0x5f, 0x00, 0xa8, 0xd3, 0xc0, - 0xd3, 0xa4, 0x00, 0xaa, 0xd0, 0x10, 0x70, 0x4f, - 0xb3, 0xfc, 0x60, 0x40, 0xb0, 0x3c, 0xb3, 0x81, - 0xed, 0x59, 0x00, 0x21, 0xd0, 0x28, 0x70, 0x00, - 0x10, 0x20, 0xf9, 0x69, 0x02, 0x1f, 0xf9, 0x6a, - 0x90, 0x10, 0x00, 0x1e, 0xe9, 0x6a, 0xb1, 0x7c, - 0x04, 0x2a, 0xd0, 0x18, 0xe0, 0x36, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x01, 0x5e, 0xf9, 0x35, - 0x01, 0x50, 0xe9, 0x35, 0xb1, 0x78, 0xd2, 0x00, - 0x01, 0x5c, 0xf9, 0x5f, 0xc0, 0x18, 0x30, 0x39, - 0xed, 0x5f, 0x11, 0x9f, 0xce, 0x58, 0xc2, 0x59, - 0x00, 0xaa, 0xd2, 0x10, 0x14, 0x82, 0x22, 0x12, - 0xc0, 0x0c, 0x10, 0x1f, 0x10, 0x03, 0x22, 0x00, - 0x70, 0x48, 0x03, 0x10, 0xe9, 0x4c, 0xb2, 0x38, - 0xbe, 0x60, 0xb2, 0x60, 0x2e, 0x41, 0x10, 0x5f, - 0x00, 0x59, 0xe9, 0x53, 0x01, 0x69, 0xd0, 0x3c, - 0x30, 0x40, 0x22, 0x41, 0x13, 0x41, 0x2e, 0x4d, - 0x13, 0x5d, 0x13, 0x43, 0x22, 0x4d, 0x14, 0xe0, - 0xe9, 0x5f, 0x33, 0x0b, 0x13, 0x04, 0x2c, 0x0c, - 0x35, 0x0c, 0xc3, 0x46, 0xc3, 0x87, 0x04, 0x62, - 0xd0, 0x10, 0x15, 0x62, 0xfc, 0x36, 0x04, 0x60, - 0xd0, 0x10, 0xe0, 0x36, 0x00, 0x22, 0xd0, 0x74, - 0x74, 0x01, 0xb0, 0x7c, 0x74, 0x41, 0xb0, 0x7c, - 0x71, 0x41, 0xd1, 0x18, 0xc0, 0x10, 0x10, 0x1c, - 0xb0, 0x16, 0xf9, 0x45, 0x00, 0x24, 0xd0, 0x20, - 0x30, 0x11, 0xf9, 0x45, 0xb1, 0x70, 0x01, 0x50, - 0xf9, 0x45, 0xb1, 0x20, 0x14, 0x41, 0xc0, 0x90, - 0x00, 0x2b, 0xd0, 0xd0, 0x01, 0x50, 0xe9, 0x4b, - 0xc0, 0xd0, 0x00, 0x35, 0xdc, 0x00, 0x20, 0x11, - 0x10, 0x1f, 0xa0, 0x1c, 0x00, 0x21, 0xd0, 0x2c, - 0x70, 0x00, 0x10, 0x05, 0x51, 0x40, 0xd0, 0x1c, - 0x61, 0x40, 0xd0, 0x20, 0x61, 0x00, 0xd0, 0x24, - 0x60, 0x80, 0xd0, 0x28, 0x60, 0xc0, 0x04, 0x2d, - 0xd0, 0x30, 0x00, 0x22, 0xd0, 0x64, 0xb1, 0x81, - 0x61, 0x81, 0xe0, 0x36, 0x90, 0x50, 0xd0, 0x3c, - 0x10, 0x41, 0x60, 0x40, 0x15, 0x62, 0xfd, 0x3d, - 0xc0, 0x10, 0x10, 0x1e, 0x10, 0x07, 0x21, 0x00, - 0x10, 0x16, 0x34, 0x00, 0xc0, 0x90, 0xd3, 0x40, - 0x00, 0x24, 0xd3, 0xc0, 0x04, 0x23, 0xd0, 0x18, - 0x01, 0x9f, 0xe8, 0x36, 0xd0, 0x54, 0x70, 0x41, - 0x73, 0x41, 0x04, 0x2e, 0xd0, 0x28, 0xe0, 0x36, - 0x50, 0x00, 0x50, 0x00, 0x00, 0xef, 0xd3, 0x30, - 0x73, 0x0c, 0xd0, 0x0c, 0x70, 0x00, 0xc0, 0x40, - 0x13, 0x24, 0xf5, 0x42, 0x13, 0x22, 0xe9, 0x41, - 0xe5, 0x43, 0xd3, 0x00, 0x10, 0x22, 0xf9, 0x41, - 0xd0, 0x01, 0xd0, 0x43, 0xd3, 0x01, 0x21, 0x00, - 0xd3, 0x40, 0x03, 0x10, 0xf9, 0x47, 0xd3, 0x40, - 0xe1, 0x61, 0x00, 0x23, 0xd0, 0x00, 0x10, 0x61, - 0xe9, 0x50, 0xb0, 0x33, 0x10, 0x63, 0xe9, 0x50, - 0x00, 0x22, 0xd0, 0x1a, 0xc3, 0xc0, 0xd2, 0xc0, - 0x00, 0x10, 0xe9, 0x55, 0x22, 0xd0, 0x10, 0x1f, - 0x14, 0x01, 0x10, 0x20, 0xed, 0x52, 0x14, 0x18, - 0x12, 0xd8, 0xc0, 0x8b, 0x32, 0xd0, 0x12, 0xc3, - 0x33, 0x4b, 0x13, 0x47, 0x21, 0x0d, 0x04, 0x23, - 0xd0, 0x18, 0xe0, 0x36, 0x00, 0x24, 0xd0, 0x30, - 0xd0, 0x40, 0x60, 0x40, 0xd3, 0xc7, 0x43, 0xc4, - 0x31, 0x0f, 0xd5, 0xd4, 0x25, 0xcf, 0x15, 0xc4, - 0x10, 0xdf, 0xc2, 0xc6, 0xc3, 0x07, 0x11, 0x81, - 0xb1, 0x3b, 0x15, 0x64, 0xe9, 0x47, 0x10, 0xdf, - 0x12, 0xc1, 0x11, 0x81, 0x11, 0xc1, 0xb1, 0x3f, - 0xb5, 0xf8, 0x90, 0x10, 0x00, 0x16, 0xf9, 0x5e, - 0xb5, 0xfc, 0xd0, 0x20, 0x40, 0x39, 0x2e, 0x4b, - 0x22, 0x4c, 0x12, 0x20, 0xe9, 0x59, 0x20, 0x39, - 0x00, 0x1b, 0xe9, 0x59, 0x2c, 0x13, 0x35, 0x13, - 0x0e, 0x5a, 0xf9, 0x59, 0xb2, 0x38, 0x02, 0xe3, - 0xd0, 0x00, 0x0e, 0x5a, 0xe9, 0x5e, 0x2e, 0x40, - 0x01, 0xee, 0xd2, 0x80, 0x42, 0x84, 0xc0, 0x03, - 0x30, 0x02, 0xf5, 0x6b, 0x31, 0x0a, 0x12, 0x98, - 0x20, 0x03, 0xf5, 0x69, 0x12, 0x9f, 0x12, 0x87, - 0x51, 0x0a, 0x00, 0x34, 0xd4, 0xf0, 0xe0, 0x36, - 0x50, 0x00, 0x50, 0x00, 0xd3, 0xc7, 0x43, 0xc4, - 0x15, 0x61, 0xf9, 0x48, 0x10, 0xc1, 0xd5, 0xe0, - 0xd1, 0x80, 0xd1, 0xc0, 0x31, 0x0f, 0x13, 0xe1, - 0xe9, 0x3c, 0xd3, 0xc0, 0x00, 0x24, 0xd0, 0x30, - 0x63, 0xc0, 0x25, 0xcf, 0x15, 0xc2, 0xd0, 0x03, - 0x40, 0x16, 0x25, 0xc0, 0x15, 0xc2, 0x15, 0x81, - 0x35, 0x91, 0xe1, 0x5c, 0x00, 0x24, 0xd0, 0x30, - 0x63, 0xc0, 0x01, 0x50, 0xe9, 0x54, 0x15, 0xa0, - 0xf9, 0x55, 0x00, 0x24, 0xd0, 0x34, 0x70, 0x00, - 0x10, 0x20, 0xe9, 0x55, 0xd3, 0xc0, 0x31, 0x0f, - 0xd5, 0xfc, 0x25, 0xcf, 0x15, 0xc3, 0x14, 0xa0, - 0xe9, 0x5c, 0xb5, 0xfc, 0x00, 0x34, 0xd4, 0xf0, - 0xe0, 0x36, 0x50, 0x00, 0xc4, 0x91, 0x34, 0x96, - 0xed, 0x34, 0xd4, 0x80, 0x14, 0x84, 0xb3, 0xc1, - 0xe5, 0x41, 0xc0, 0x52, 0x10, 0x5e, 0x34, 0x81, - 0xb3, 0xc1, 0xe5, 0x41, 0xc0, 0x52, 0x10, 0x5c, - 0x24, 0x81, 0xb3, 0xc1, 0xe5, 0x37, 0x02, 0xe8, - 0xd0, 0x00, 0xb4, 0xb0, 0x14, 0x9b, 0x00, 0x24, - 0xd0, 0x60, 0x30, 0x52, 0xed, 0x4a, 0x24, 0x81, - 0x20, 0x12, 0xa0, 0x1c, 0x10, 0x8a, 0x50, 0x83, - 0xa0, 0x96, 0xa1, 0x50, 0xa1, 0x11, 0xc0, 0x52, - 0xd4, 0x84, 0x10, 0x6c, 0xed, 0x56, 0xd4, 0x81, - 0xd1, 0x00, 0xb1, 0x17, 0x00, 0x23, 0xd1, 0x40, - 0xc2, 0xb9, 0x22, 0x86, 0x12, 0x20, 0xf9, 0x66, - 0x02, 0xe3, 0xd0, 0x40, 0x02, 0x9a, 0xe9, 0x63, - 0x22, 0x81, 0x02, 0x5a, 0xe9, 0x66, 0x22, 0x41, - 0x75, 0xd7, 0xc3, 0xd7, 0xd0, 0xd7, 0x00, 0x21, - 0xd0, 0xb6, 0x8b, 0x38, 0x00, 0x33, 0xdd, 0x08, - 0xe0, 0x36, 0x50, 0x00, 0xd0, 0x7c, 0x60, 0x01, - 0xae, 0x52, 0xd0, 0x60, 0x40, 0x79, 0x00, 0x13, - 0xe8, 0xc9, 0xa2, 0x94, 0x22, 0x86, 0x13, 0xe0, - 0xe4, 0xd0, 0x13, 0xc1, 0x15, 0x62, 0xfc, 0xd1, - 0x13, 0xc1, 0xe0, 0xd1, 0xc3, 0xd7, 0x03, 0xd9, - 0xe8, 0xd4, 0x22, 0x8d, 0x15, 0x62, 0xfc, 0xda, - 0x03, 0xda, 0xe8, 0xda, 0x22, 0x8d, 0x22, 0x8d, - 0xce, 0x4a, 0x22, 0x86, 0x00, 0x14, 0xe8, 0xe0, - 0xa2, 0x53, 0x22, 0x47, 0x03, 0xd1, 0xe8, 0xe8, - 0x22, 0x4e, 0x15, 0x62, 0xfc, 0xe8, 0x03, 0xd2, - 0xe8, 0xe8, 0x22, 0x4e, 0x12, 0x20, 0xe9, 0x09, - 0x20, 0x79, 0x00, 0x5b, 0xe8, 0xf4, 0x15, 0x20, - 0xfc, 0xf1, 0x2c, 0x13, 0x35, 0x13, 0x0e, 0x5b, - 0xe8, 0xf4, 0xb2, 0x38, 0x02, 0x9a, 0xe8, 0xfb, - 0x70, 0x08, 0xd0, 0x7c, 0x42, 0x81, 0x22, 0x98, - 0x22, 0x80, 0x02, 0x5a, 0xe9, 0x11, 0x70, 0x08, - 0xd0, 0x78, 0x42, 0x41, 0x22, 0x59, 0x10, 0x1f, - 0x22, 0x40, 0x00, 0x19, 0xe9, 0x11, 0x01, 0x69, - 0xd0, 0x7c, 0x32, 0x41, 0xe1, 0x11, 0x02, 0xe3, - 0xd0, 0x40, 0x02, 0x9a, 0xe9, 0x0e, 0x22, 0x81, - 0x02, 0x5a, 0xe9, 0x11, 0x22, 0x41, 0x0e, 0x5a, - 0xe9, 0x15, 0xce, 0x4a, 0x3e, 0x46, 0x0f, 0x87, - 0xdd, 0x48, 0xe1, 0x19, 0xdd, 0x40, 0xdc, 0xc8, - 0xdd, 0x3c, 0x7d, 0x34, 0x1d, 0x19, 0x3d, 0x35, - 0x4d, 0x33, 0x4c, 0xec, 0x3d, 0x33, 0xf9, 0x17, - 0x0f, 0xc5, 0x50, 0x00, 0xd0, 0x39, 0xd0, 0x35, - 0xd0, 0x1d, 0xd0, 0x2d, 0xd0, 0x3f, 0xd0, 0x2e, - 0xd0, 0x3c, 0xd0, 0x37, 0xd0, 0x33, 0xd0, 0x19, - 0xd0, 0x33, 0xd0, 0x2e, 0xd0, 0x3d, 0xd0, 0x3e, - 0xd0, 0x27, 0xd0, 0x3e, 0xd0, 0x3a, 0xd0, 0x2f, - 0xd0, 0x32, 0x00, 0x00, 0x00, 0x00, 0x46, 0x44, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x80, - 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0xd0, - 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x05, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x90, 0x85, 0x00, 0x00, 0xa6, 0xee, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xd0, - 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x08, 0x08, 0xa0, 0x00, 0x08, 0x08, 0x28, - 0x00, 0x08, 0x88, 0x68, 0x00, 0x08, 0xa0, 0x98, - 0x00, 0x08, 0x88, 0x68, 0x00, 0x08, 0x28, 0x98, - 0x00, 0x08, 0xac, 0xf4, 0x00, 0x08, 0xb8, 0x7c, - 0x00, 0x02, 0x02, 0x88, 0x00, 0x02, 0x08, 0x22, - 0x00, 0x02, 0x88, 0xaa, 0x00, 0x02, 0x22, 0xaa, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x04, 0x24, 0x00, 0x04, 0x04, 0x24, - 0x00, 0x04, 0x28, 0x6c, 0x00, 0x04, 0x28, 0x6c, - 0x00, 0x01, 0x10, 0x44, 0x00, 0x01, 0x20, 0x44, - 0x00, 0x01, 0x11, 0xaa, 0x00, 0x01, 0x88, 0x55, - 0x00, 0x01, 0x44, 0xaa, 0x00, 0x01, 0x44, 0x55, - 0x00, 0x20, 0x80, 0xa0, 0x00, 0x20, 0x80, 0xc0, - 0x00, 0x20, 0x20, 0xa0, 0x00, 0x20, 0x40, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x10, 0x13, 0x16, 0x1a, 0x1b, 0x1d, 0x22, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x10, 0x13, 0x16, 0x1a, 0x1b, 0x1d, 0x22, - 0x10, 0x10, 0x16, 0x18, 0x1b, 0x1d, 0x22, 0x25, - 0x13, 0x16, 0x1a, 0x1b, 0x1d, 0x22, 0x22, 0x26, - 0x16, 0x16, 0x1a, 0x1b, 0x1d, 0x22, 0x25, 0x28, - 0x16, 0x1a, 0x1b, 0x1d, 0x20, 0x23, 0x28, 0x30, - 0x1a, 0x1b, 0x1d, 0x20, 0x23, 0x28, 0x30, 0x3a, - 0x1a, 0x1b, 0x1d, 0x22, 0x26, 0x2e, 0x38, 0x45, - 0x1b, 0x1d, 0x23, 0x26, 0x2e, 0x38, 0x45, 0x53, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0xd6, 0x00, 0x00, 0x1b, 0x08, 0x00, - 0x00, 0x1f, 0xde, 0x00, 0x00, 0x00, 0x50, 0x00, - 0x00, 0x08, 0x39, 0x00, 0x00, 0x10, 0x22, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x05, 0x28, 0x20, 0x01, - 0x00, 0x00, 0x01, 0xe0, 0x71, 0x01, 0x00, 0x68, - 0xe0, 0x7f, 0xb0, 0x7f, 0x60, 0x40, 0xe0, 0x1d, - 0x90, 0x10, 0xb4, 0x81, 0xe8, 0xc0, 0xe0, 0xc2, - 0x90, 0x18, 0x00, 0x8a, 0x70, 0xc0, 0x0f, 0x87, - 0xe3, 0xe8, 0xc0, 0x00, 0x70, 0x40, 0xe0, 0x01, - 0xe0, 0x86, 0x00, 0x26, 0xd0, 0x28, 0xe0, 0x0e, - 0xd0, 0x0e, 0x0f, 0x0b, 0x70, 0x1d, 0xe0, 0x67, - 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, - 0x0f, 0x87, 0x02, 0x20, 0xd0, 0x01, 0xe0, 0x25, - 0x0f, 0x45, 0x6f, 0x81, 0xdf, 0xa6, 0xe0, 0x36, - 0xe1, 0x30, 0xa0, 0x37, 0xc0, 0x00, 0xe0, 0x26, - 0x00, 0x33, 0xde, 0xc8, 0xe0, 0x32, 0x0f, 0xc5, - 0x0f, 0x87, 0x00, 0x27, 0xd0, 0x4c, 0xe0, 0x21, - 0x00, 0x33, 0xdf, 0x28, 0x00, 0x27, 0xd0, 0x56, - 0x60, 0x01, 0xe0, 0x2d, 0x03, 0xa0, 0xd0, 0x41, - 0xa0, 0x78, 0x00, 0x60, 0xd0, 0x41, 0xa0, 0x77, - 0x00, 0x22, 0xd0, 0x58, 0xa0, 0x76, 0x00, 0x21, - 0xd0, 0x7c, 0x00, 0x4a, 0xd0, 0x72, 0x70, 0x40, - 0x00, 0x06, 0x0f, 0x87, 0x00, 0x22, 0xdc, 0xf8, - 0xf0, 0x4a, 0xe1, 0x70, 0x07, 0xef, 0xdd, 0xbf, - 0x4f, 0x36, 0x1d, 0x99, 0x4d, 0x80, 0x10, 0x18, - 0xdd, 0x50, 0x60, 0x35, 0xdd, 0x72, 0xdd, 0x10, - 0x3d, 0xb4, 0xec, 0x57, 0x2d, 0x36, 0x1d, 0x03, - 0xbd, 0x04, 0xe4, 0x2b, 0x01, 0x46, 0x00, 0x06, - 0xac, 0xf6, 0x80, 0x3f, 0x0d, 0x0a, 0x10, 0x02, - 0x7d, 0x40, 0x10, 0x1e, 0xb0, 0x20, 0xbc, 0xe0, - 0x00, 0x06, 0x00, 0xc6, 0xe0, 0x52, 0xb7, 0x60, - 0xb7, 0x60, 0xc0, 0x5d, 0x30, 0x5f, 0xe4, 0x72, - 0xc7, 0x5e, 0x00, 0xed, 0xd0, 0x28, 0x70, 0x40, - 0xb0, 0x7f, 0x60, 0x40, 0xc0, 0x1d, 0x30, 0x1c, - 0xf8, 0x7e, 0x00, 0x21, 0xd0, 0x01, 0x00, 0x26, - 0xd0, 0x78, 0xa0, 0x38, 0x80, 0x3f, 0x70, 0x01, - 0xb0, 0x3f, 0x60, 0x01, 0x0f, 0x87, 0x80, 0x34, - 0x03, 0xef, 0xd8, 0x3f, 0xa8, 0x38, 0x01, 0x35, - 0xdc, 0x33, 0xe0, 0x46, 0xc0, 0x1c, 0xe4, 0xa5, - 0x97, 0x2e, 0x30, 0x1c, 0xe8, 0x8e, 0x00, 0x21, - 0xd0, 0x00, 0xa0, 0x38, 0xc0, 0x5d, 0x00, 0x23, - 0xd0, 0x00, 0x30, 0x40, 0x30, 0x5e, 0xe4, 0x99, - 0x20, 0x5e, 0xc0, 0x01, 0x30, 0x1c, 0xec, 0xa4, - 0xe0, 0x9d, 0x20, 0x5f, 0xc0, 0x1c, 0x30, 0x01, - 0xf4, 0xa5, 0xc0, 0x1c, 0x30, 0x1d, 0xec, 0xa4, - 0xe4, 0xa5, 0x90, 0x38, 0x00, 0x1b, 0xe8, 0xa5, - 0xa0, 0x66, 0xb1, 0x3f, 0xe4, 0xb3, 0xe8, 0xb1, - 0xc0, 0x4b, 0x30, 0x44, 0xf8, 0xb3, 0x60, 0x45, - 0xb1, 0x7c, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x05, - 0x80, 0x40, 0x72, 0xc5, 0x00, 0x06, 0x90, 0x55, - 0xd0, 0x01, 0x00, 0x40, 0xa0, 0x55, 0x0f, 0x87, - 0x01, 0x46, 0x00, 0x06, 0x03, 0xef, 0xd0, 0x3f, - 0xa0, 0x38, 0xb0, 0x01, 0xa0, 0x37, 0x80, 0x3f, - 0x82, 0x34, 0x80, 0x3f, 0xf2, 0x1a, 0x80, 0x34, - 0x80, 0x3f, 0xf2, 0x1a, 0xd8, 0x00, 0xd8, 0x40, - 0xd8, 0x80, 0xd8, 0xc0, 0xd9, 0x00, 0xd9, 0x40, - 0xd9, 0x80, 0xd9, 0xc0, 0xda, 0x00, 0xda, 0x40, - 0xda, 0x80, 0xda, 0xc0, 0xdb, 0x00, 0xdb, 0x40, - 0xdb, 0x80, 0xdb, 0xc0, 0xdc, 0x00, 0xdc, 0x40, - 0xdc, 0x80, 0xdc, 0xc0, 0xdd, 0x00, 0xdd, 0x40, - 0xdd, 0x80, 0xdd, 0xc0, 0xde, 0x00, 0xde, 0x40, - 0xde, 0x80, 0xde, 0xc0, 0xdf, 0x00, 0xdf, 0x40, - 0xdf, 0x80, 0xdf, 0xc0, 0xde, 0x80, 0xde, 0xc1, - 0x00, 0x28, 0xd0, 0x60, 0x6e, 0x81, 0x80, 0x00, - 0x80, 0x05, 0x00, 0xe3, 0xd1, 0x88, 0x00, 0x73, - 0xd5, 0x80, 0x60, 0x06, 0xb1, 0xbc, 0x00, 0xfa, - 0xd0, 0x80, 0x60, 0x06, 0x00, 0x26, 0xd0, 0x6c, - 0x6e, 0x81, 0x04, 0x32, 0xd2, 0x00, 0x00, 0xee, - 0xd1, 0x94, 0x60, 0x06, 0x00, 0xed, 0xd0, 0x50, - 0x6e, 0x81, 0x00, 0x22, 0xd0, 0x70, 0x6e, 0x81, - 0x00, 0xee, 0xd0, 0x74, 0x6e, 0x81, 0xd0, 0x4c, - 0x6e, 0x81, 0xd0, 0x02, 0x00, 0xef, 0xd0, 0x6c, - 0x60, 0x01, 0xd0, 0x03, 0x00, 0xef, 0xd0, 0x70, - 0x60, 0x01, 0x00, 0xe0, 0xd0, 0x48, 0xd0, 0x02, - 0x60, 0x01, 0x00, 0x32, 0xd6, 0xf0, 0xa0, 0x1c, - 0x00, 0x21, 0xd0, 0x60, 0xa0, 0x76, 0x00, 0x34, - 0xd5, 0x48, 0x80, 0x3f, 0x00, 0x23, 0xd0, 0x5c, - 0x00, 0x4a, 0xd0, 0x72, 0x70, 0x40, 0x00, 0x06, - 0x00, 0x22, 0xd1, 0xa4, 0x6e, 0xc6, 0xd0, 0x58, - 0x6e, 0xc1, 0xd0, 0xc9, 0x00, 0xed, 0xd0, 0x54, - 0x60, 0xc1, 0x00, 0x22, 0xd0, 0x40, 0x60, 0xc1, - 0x00, 0x22, 0xd0, 0x60, 0x60, 0xc1, 0x82, 0x34, - 0x80, 0x3f, 0xd6, 0xd9, 0x01, 0x20, 0xd6, 0x22, - 0x16, 0x08, 0xd0, 0x5e, 0xd0, 0x2c, 0x60, 0x40, - 0xd0, 0x70, 0x01, 0x74, 0xd6, 0x00, 0x60, 0x01, - 0x00, 0x2b, 0xd4, 0x10, 0x00, 0x27, 0xd4, 0x60, - 0x00, 0x2b, 0xd0, 0x90, 0xc0, 0xc2, 0xd1, 0x08, - 0xd1, 0x44, 0xa1, 0x50, 0x00, 0x21, 0xd0, 0xb6, - 0xd0, 0xd7, 0x00, 0x29, 0xd0, 0x04, 0x64, 0x00, - 0xb0, 0x3c, 0x64, 0x40, 0x80, 0x34, 0x80, 0x3f, - 0xd0, 0x40, 0x00, 0x35, 0xd0, 0x00, 0x60, 0x01, - 0xd0, 0x48, 0x6e, 0x81, 0xd0, 0x44, 0x6e, 0x81, - 0x00, 0x64, 0xd1, 0x80, 0x6e, 0x86, 0x01, 0x3c, - 0xd2, 0x39, 0xe0, 0x46, 0xd0, 0x00, 0xd0, 0x40, - 0xd0, 0x80, 0xd0, 0xc0, 0xd1, 0x00, 0xd1, 0x40, - 0xd1, 0x80, 0xd1, 0xc0, 0xd2, 0x00, 0xd2, 0x40, - 0xd2, 0x80, 0xd2, 0xc0, 0xd3, 0x00, 0xd3, 0x40, - 0xd3, 0x80, 0xd3, 0xc0, 0xd4, 0x00, 0xd4, 0x40, - 0xd4, 0x80, 0xd4, 0xc0, 0xd5, 0x00, 0xd5, 0x40, - 0xd5, 0x80, 0xd5, 0xc0, 0xd6, 0x00, 0xd6, 0x40, - 0xd6, 0x80, 0xd6, 0xc0, 0xd7, 0x00, 0xd7, 0x40, - 0xd7, 0x80, 0xd7, 0xc0, 0x0f, 0xc5, 0x50, 0x00, - 0x01, 0x46, 0x00, 0x06, 0xde, 0x80, 0xde, 0xc1, - 0x03, 0x2f, 0xd0, 0x33, 0xa0, 0x38, 0xb0, 0x01, - 0xa0, 0x37, 0x80, 0x3f, 0x08, 0x20, 0xdf, 0x00, - 0x82, 0x34, 0x80, 0x3f, 0x00, 0xee, 0xd0, 0x08, - 0x77, 0xc0, 0xb0, 0x04, 0x77, 0x80, 0xb0, 0x04, - 0xc0, 0x5f, 0x30, 0x5e, 0x60, 0x40, 0xd7, 0x00, - 0xb7, 0x01, 0x80, 0x34, 0x80, 0x3f, 0x00, 0x60, - 0xd0, 0x80, 0x00, 0xec, 0xd0, 0x40, 0x60, 0x81, - 0xb0, 0x7c, 0x60, 0x81, 0x00, 0xa0, 0xd0, 0x80, - 0xb0, 0x74, 0x60, 0x81, 0xb0, 0x7c, 0x60, 0x81, - 0x00, 0x68, 0xd0, 0x80, 0x6e, 0x82, 0x00, 0xef, - 0xd0, 0x8c, 0x6e, 0x82, 0x00, 0x06, 0xd0, 0x11, - 0xa0, 0x38, 0x80, 0x3f, 0x08, 0x20, 0xd0, 0x40, - 0x10, 0x48, 0xa0, 0x4a, 0xa0, 0x5b, 0x0c, 0x20, - 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0xa0, 0x0a, - 0x90, 0x4d, 0x0f, 0xff, 0xd8, 0x1f, 0x40, 0x40, - 0xa0, 0x4d, 0x80, 0x0a, 0x80, 0x07, 0x80, 0x1b, - 0x80, 0x27, 0x00, 0x60, 0xd0, 0x00, 0xa0, 0x09, - 0x80, 0x28, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, - 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, - 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, - 0xd0, 0x00, 0xa0, 0x29, 0x80, 0x2b, 0x02, 0x30, - 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, 0x01, 0xb0, - 0xd0, 0x10, 0xa0, 0x37, 0x80, 0x3f, 0x02, 0x30, - 0xd0, 0x01, 0xa0, 0x38, 0x00, 0xea, 0xd0, 0x00, - 0xd0, 0x4e, 0x0f, 0x0b, 0x70, 0x40, 0x00, 0x06, - 0x00, 0x21, 0xd0, 0x88, 0x00, 0xe1, 0xd0, 0x60, - 0x60, 0x81, 0x00, 0x2b, 0xd0, 0x80, 0x00, 0xe0, - 0xd0, 0x6c, 0x60, 0x81, 0xb0, 0x7c, 0x00, 0x27, - 0xd0, 0xa0, 0x60, 0x81, 0xb0, 0x7c, 0xd0, 0x82, - 0x60, 0x81, 0xb0, 0x7c, 0xd0, 0x85, 0x60, 0x81, - 0xb0, 0x7c, 0x03, 0xaa, 0xd0, 0x98, 0x60, 0x81, - 0xb0, 0x7c, 0x6e, 0x81, 0x00, 0x27, 0xd0, 0x40, - 0x6e, 0x81, 0xb0, 0x7c, 0x6e, 0x81, 0xb0, 0x7c, - 0x6e, 0x81, 0x00, 0x27, 0xd1, 0x90, 0x6e, 0x86, - 0x00, 0x21, 0xd1, 0xb8, 0x6e, 0x86, 0x00, 0x66, - 0xd1, 0xa0, 0xd0, 0x00, 0x01, 0x26, 0xd0, 0x58, - 0x30, 0x01, 0x60, 0x06, 0x00, 0xed, 0xd1, 0xbc, - 0x6e, 0x86, 0x00, 0xec, 0xd1, 0xb8, 0x6e, 0x86, - 0xb1, 0x84, 0x6e, 0x86, 0x00, 0xee, 0xd1, 0x84, - 0x70, 0x46, 0x00, 0x65, 0xd1, 0x94, 0x60, 0x46, - 0x00, 0x64, 0xd1, 0xbc, 0x6e, 0x86, 0x00, 0x65, - 0xd1, 0x80, 0x6e, 0x86, 0xb1, 0xbc, 0x6e, 0x86, - 0xb1, 0xbc, 0x6e, 0x86, 0x00, 0xed, 0xd1, 0xa8, - 0x6e, 0x86, 0xd0, 0x0e, 0xb1, 0xbc, 0x60, 0x06, - 0xb1, 0xbc, 0x60, 0x06, 0x00, 0x65, 0xd1, 0xa4, - 0x60, 0x06, 0x00, 0x28, 0xd1, 0xa4, 0x6e, 0x86, - 0x00, 0x27, 0xd1, 0x98, 0x6e, 0x86, 0x00, 0x64, - 0xd1, 0xa4, 0x6e, 0x86, 0xd2, 0x01, 0x00, 0x64, - 0xd0, 0x60, 0x62, 0x01, 0x00, 0x64, 0xd1, 0x80, - 0x70, 0x46, 0x6e, 0x86, 0x00, 0xef, 0xd1, 0x98, - 0x70, 0x86, 0x08, 0x20, 0xd0, 0xcf, 0x30, 0xc1, - 0xea, 0x42, 0xd0, 0x81, 0x00, 0x21, 0xd1, 0xa8, - 0x60, 0x86, 0x00, 0xed, 0xd1, 0xa0, 0x6e, 0xc6, - 0x00, 0x65, 0xd1, 0x98, 0x6e, 0xc6, 0x00, 0x22, - 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, 0x00, 0xc6, - 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, 0x50, 0x00, - 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, 0x00, 0x64, - 0xd0, 0x60, 0x70, 0xc1, 0x00, 0xec, 0xd0, 0x40, - 0x71, 0x81, 0xb0, 0x7c, 0x71, 0xc1, 0xc0, 0x87, - 0x30, 0x86, 0xf9, 0x83, 0x10, 0xee, 0xe9, 0x76, - 0x10, 0xe1, 0xe9, 0x76, 0xe2, 0x57, 0x00, 0x63, - 0xd0, 0xbf, 0x72, 0x06, 0xb1, 0xbc, 0x41, 0x82, - 0x02, 0x1b, 0xe9, 0x8d, 0x72, 0x86, 0xb1, 0xbc, - 0x41, 0x82, 0xd0, 0x75, 0x30, 0x48, 0xe9, 0xfe, - 0xb0, 0x7f, 0xea, 0x00, 0x02, 0x1c, 0xe9, 0x96, - 0x15, 0xa3, 0xea, 0x57, 0x10, 0xf0, 0xe9, 0x9a, - 0x10, 0xfa, 0xf9, 0xa1, 0x15, 0xa3, 0xea, 0x57, - 0x00, 0x21, 0xd0, 0x4c, 0x70, 0x41, 0x10, 0x61, - 0xfa, 0x57, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x40, - 0xd0, 0x85, 0x40, 0x42, 0x60, 0x40, 0x00, 0x64, - 0xd0, 0x64, 0x62, 0x01, 0x12, 0x2b, 0xe9, 0xeb, - 0x12, 0x3b, 0xe9, 0xd5, 0x00, 0xec, 0xd0, 0x40, - 0x61, 0x81, 0x12, 0x2d, 0xe9, 0xbf, 0x12, 0x30, - 0xe9, 0xd4, 0x12, 0x36, 0xe9, 0xd4, 0x12, 0x3a, - 0xe9, 0xd4, 0xd0, 0x62, 0x30, 0x48, 0xe9, 0xf2, - 0x12, 0x2e, 0xe9, 0xf9, 0xe1, 0x76, 0x00, 0xed, - 0xd0, 0x08, 0x70, 0x40, 0xd0, 0x85, 0x40, 0x42, - 0x60, 0x40, 0xb0, 0x08, 0x00, 0x21, 0xd0, 0x41, - 0x60, 0x40, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, - 0xf2, 0x5a, 0x00, 0xed, 0xd0, 0x20, 0xd0, 0x41, - 0x60, 0x40, 0x10, 0xe1, 0xea, 0x3a, 0xe2, 0x57, - 0xe2, 0x53, 0x10, 0xee, 0xf9, 0xe9, 0x01, 0x46, - 0x82, 0x34, 0x80, 0x3f, 0x97, 0x2e, 0xc7, 0x5c, - 0xa7, 0x66, 0x81, 0x34, 0x80, 0x3f, 0x00, 0x21, - 0xd0, 0x01, 0xa0, 0x38, 0x00, 0xc6, 0x00, 0x21, - 0xd0, 0x15, 0x0b, 0x09, 0x00, 0x4d, 0xb0, 0x01, - 0xed, 0xe5, 0xd2, 0x1a, 0xe1, 0xec, 0xf1, 0x18, - 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0xd0, 0x4e, - 0x60, 0x46, 0xe2, 0x54, 0xc0, 0x0a, 0x10, 0x06, - 0x52, 0x80, 0x00, 0xed, 0xd0, 0x40, 0x62, 0x81, - 0xe2, 0x53, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, - 0xf2, 0x5a, 0xe1, 0x70, 0x12, 0xa3, 0xf6, 0x57, - 0x15, 0xa1, 0xfa, 0x57, 0x12, 0xa0, 0xea, 0x23, - 0x00, 0x65, 0xd1, 0x1c, 0xd0, 0x75, 0x30, 0x48, - 0xea, 0x0a, 0xb1, 0x3c, 0x71, 0x04, 0x11, 0x20, - 0xfa, 0x11, 0x00, 0xec, 0xd0, 0x40, 0x61, 0x81, - 0xe2, 0x57, 0x12, 0xa1, 0xea, 0x33, 0x00, 0xe2, - 0xd0, 0x60, 0x70, 0x01, 0xb0, 0x7c, 0x70, 0x41, - 0x10, 0x0c, 0x50, 0x40, 0x0c, 0x30, 0xd0, 0x00, - 0x31, 0x01, 0xee, 0x21, 0x21, 0x00, 0xe6, 0x57, - 0xe2, 0x23, 0x31, 0x00, 0xfe, 0x57, 0xd0, 0x75, - 0x30, 0x48, 0xea, 0x28, 0xf2, 0x5a, 0xe2, 0x0d, - 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0x00, 0x63, - 0xd1, 0x3f, 0xb1, 0xbc, 0x41, 0x84, 0x61, 0x81, - 0xd0, 0x50, 0x60, 0x46, 0xe2, 0x57, 0x00, 0xed, - 0xd0, 0x7c, 0x70, 0x41, 0x08, 0x20, 0xd0, 0x00, - 0x10, 0x08, 0xe2, 0x1c, 0xd2, 0x84, 0x00, 0xed, - 0xd1, 0xa4, 0x62, 0x86, 0xd5, 0x00, 0xb5, 0x01, - 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc7, 0x5e, - 0x97, 0x2e, 0x81, 0x34, 0x80, 0x3f, 0x02, 0xe8, - 0xd0, 0x30, 0xa0, 0x37, 0xa0, 0x38, 0x08, 0x20, - 0xdf, 0x00, 0x80, 0x73, 0x80, 0x3f, 0x00, 0xc6, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0xf2, 0x5a, - 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, 0x02, 0x3c, - 0xda, 0x89, 0xe0, 0x46, 0x00, 0x28, 0xd0, 0x64, - 0x70, 0x81, 0x00, 0x22, 0xd0, 0x00, 0x50, 0x80, - 0x60, 0x81, 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, - 0x00, 0xed, 0xd1, 0xa4, 0x72, 0x86, 0x00, 0xef, - 0xd1, 0x90, 0x70, 0x46, 0x10, 0x5c, 0x10, 0x65, - 0xed, 0x7d, 0xd0, 0x46, 0xc0, 0x0a, 0x10, 0x40, - 0x60, 0x46, 0x00, 0x22, 0xd0, 0x73, 0x30, 0x54, - 0xe9, 0x8e, 0x12, 0xa4, 0xe9, 0xb5, 0x15, 0x20, - 0xe9, 0xc0, 0xb0, 0x7b, 0xe9, 0xc3, 0xb0, 0x41, - 0xe9, 0xc9, 0xc0, 0x54, 0x10, 0x5c, 0x10, 0x6e, - 0xe9, 0xc6, 0xe1, 0xb5, 0x00, 0x28, 0xd1, 0xb0, - 0xd0, 0x00, 0x60, 0x06, 0x12, 0xa4, 0xf9, 0xb2, - 0x00, 0xed, 0xd1, 0x9c, 0x62, 0x86, 0xd2, 0x80, - 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, 0xd0, 0x02, - 0x00, 0xec, 0xd1, 0xbc, 0x60, 0x06, 0x00, 0x64, - 0xd1, 0xa0, 0x72, 0x06, 0x12, 0x21, 0xf9, 0xa6, - 0xd2, 0x0d, 0x62, 0x06, 0x00, 0xed, 0xd1, 0xa0, - 0x61, 0x86, 0xd0, 0x0e, 0x00, 0xed, 0xd1, 0xac, - 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, 0x00, 0x65, - 0xd1, 0xa4, 0x60, 0x06, 0x01, 0x7e, 0xd2, 0x31, - 0xe1, 0xcb, 0x01, 0x46, 0x90, 0x49, 0x00, 0x60, - 0xd0, 0x00, 0x50, 0x40, 0xa0, 0x49, 0x80, 0x3f, - 0x00, 0xc6, 0x0c, 0x09, 0x05, 0x0d, 0xe1, 0x70, - 0x01, 0xbe, 0xde, 0x41, 0xe1, 0xcb, 0x01, 0xbb, - 0xd8, 0x10, 0xe1, 0xcb, 0x01, 0xbd, 0xd8, 0x0b, - 0xe1, 0xcb, 0x03, 0xb8, 0xda, 0x10, 0x01, 0x46, - 0x90, 0x49, 0x00, 0x60, 0xd1, 0x00, 0x50, 0x44, - 0x30, 0x44, 0xa0, 0x49, 0x80, 0x3f, 0x00, 0xc6, - 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x01, 0xfa, 0xd2, 0x3d, 0x00, 0x25, 0xdc, 0xd8, - 0xf0, 0x4a, 0x00, 0x26, 0xd0, 0x18, 0xd0, 0x40, - 0x60, 0x40, 0x00, 0x28, 0xd0, 0x24, 0x70, 0x40, - 0xd0, 0x82, 0x50, 0x42, 0x60, 0x40, 0x00, 0xec, - 0xd0, 0xa4, 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x81, - 0x00, 0xec, 0xd1, 0x98, 0xd0, 0x41, 0x60, 0x46, - 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x8e, 0xd0, 0x40, - 0x60, 0x46, 0xe1, 0x81, 0xd0, 0x40, 0x00, 0xe6, - 0xd0, 0x10, 0x60, 0x40, 0xb0, 0x3c, 0x60, 0x40, - 0xb0, 0x3c, 0x60, 0x40, 0xd0, 0xe0, 0x00, 0xea, - 0xd0, 0x40, 0x00, 0xe8, 0xd0, 0x82, 0x01, 0x46, - 0x70, 0x01, 0xb0, 0x7c, 0x60, 0x02, 0xb0, 0xbc, - 0x00, 0x06, 0x00, 0xc6, 0xb0, 0xc1, 0xed, 0x9b, - 0x80, 0x49, 0xd6, 0x44, 0xd5, 0x43, 0x00, 0xe0, - 0xd1, 0x80, 0x00, 0x06, 0x0b, 0x09, 0x01, 0x0d, - 0x0b, 0x09, 0x61, 0x06, 0xb1, 0xbc, 0x01, 0x4d, - 0x09, 0x09, 0x61, 0x46, 0xb1, 0xbc, 0x00, 0xcd, - 0x09, 0x09, 0x10, 0xe4, 0xed, 0xb8, 0x60, 0xc6, - 0xb1, 0xbc, 0x00, 0xcd, 0x60, 0xc6, 0x00, 0xed, - 0xd0, 0x04, 0x70, 0x00, 0x10, 0x20, 0xf9, 0xd3, - 0x10, 0xe3, 0xe9, 0xc4, 0x10, 0xe6, 0xf9, 0xd3, - 0x01, 0x46, 0x90, 0x10, 0x00, 0x20, 0xd0, 0x44, - 0x50, 0x40, 0x00, 0xc6, 0xa0, 0x50, 0x00, 0xa0, - 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, 0x00, 0xed, - 0xd1, 0xa4, 0xd0, 0x04, 0x60, 0x06, 0x00, 0xee, - 0xd1, 0xac, 0x73, 0x86, 0x10, 0xe3, 0xe5, 0xde, - 0xe9, 0xe3, 0x00, 0xe7, 0xd0, 0x40, 0x00, 0xae, - 0xd0, 0xbb, 0xe1, 0xe7, 0x01, 0x24, 0xd0, 0x6b, - 0x00, 0xea, 0xd0, 0xa6, 0xe1, 0xe7, 0x01, 0x21, - 0xd0, 0x7b, 0x00, 0xe8, 0xd0, 0x90, 0x13, 0xa0, - 0xf9, 0xea, 0xc0, 0x42, 0x00, 0xe0, 0xd1, 0xa8, - 0x60, 0x46, 0xb1, 0x98, 0x0b, 0xc9, 0x00, 0x4d, - 0x09, 0x09, 0x10, 0x44, 0x00, 0x8d, 0x20, 0x42, - 0x10, 0x5f, 0x60, 0x46, 0xb1, 0xb8, 0x00, 0x90, - 0xea, 0x17, 0x0a, 0x89, 0x00, 0x8d, 0x60, 0x86, - 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, - 0x10, 0x60, 0xea, 0x0b, 0x00, 0xe8, 0xd1, 0x80, - 0xf2, 0xb0, 0x10, 0x60, 0xfa, 0x17, 0x08, 0x49, - 0x00, 0xe0, 0xd1, 0xa4, 0x00, 0x4d, 0x60, 0x46, - 0x10, 0x60, 0xea, 0x1b, 0x00, 0xe9, 0xd1, 0x80, - 0xf2, 0xb0, 0x10, 0x60, 0xea, 0x1b, 0x00, 0xe0, - 0xd1, 0x88, 0xd0, 0x40, 0x60, 0x46, 0xd0, 0x00, - 0x00, 0xe0, 0xd1, 0xa8, 0x70, 0x46, 0x00, 0xef, - 0xd1, 0x9c, 0x70, 0x86, 0xb0, 0xb0, 0xee, 0x25, - 0xd0, 0x81, 0x00, 0x90, 0xea, 0x28, 0x20, 0x01, - 0x10, 0x41, 0x10, 0x9f, 0x10, 0xa0, 0xee, 0x25, - 0x10, 0x1c, 0x00, 0x65, 0xd1, 0xa8, 0x60, 0x06, - 0x01, 0xb4, 0xd4, 0x3a, 0xe0, 0x46, 0x50, 0x00, - 0x02, 0x31, 0xdc, 0x13, 0x00, 0x27, 0xdc, 0xd8, - 0xf0, 0x4a, 0x0c, 0x09, 0x00, 0x06, 0x05, 0x0d, - 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, 0xe9, 0xea, - 0xb0, 0x7d, 0xfa, 0x05, 0x09, 0x09, 0x01, 0xcd, - 0x11, 0xe1, 0xf9, 0xc7, 0x80, 0x09, 0x80, 0x27, - 0x0a, 0x09, 0xd6, 0x45, 0x00, 0xe1, 0xd1, 0xa0, - 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, - 0x00, 0x4d, 0x60, 0x46, 0x00, 0x50, 0xe9, 0x91, - 0xd4, 0x01, 0xb1, 0xbc, 0x08, 0x89, 0x00, 0x4d, - 0x60, 0x46, 0x00, 0xe0, 0xd1, 0x80, 0x08, 0x89, - 0x00, 0x4d, 0x08, 0x89, 0x10, 0x4c, 0x71, 0x06, - 0x21, 0x01, 0x61, 0x06, 0xb1, 0xbc, 0x00, 0x4d, - 0x0b, 0x49, 0x10, 0x4c, 0x71, 0x46, 0x21, 0x41, - 0x61, 0x46, 0xb1, 0xb0, 0x00, 0x4d, 0x10, 0x5f, - 0x60, 0x46, 0xb1, 0xbc, 0x0a, 0x09, 0x00, 0x4d, - 0x10, 0x4a, 0x70, 0x86, 0x20, 0x81, 0x60, 0x86, - 0x00, 0xe1, 0xd1, 0xac, 0x08, 0x49, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x89, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x09, 0x49, 0x00, 0x8d, - 0x60, 0x86, 0xc0, 0x02, 0x00, 0xe0, 0xd1, 0xa8, - 0x70, 0xc6, 0x10, 0xc0, 0xd0, 0x20, 0x30, 0x01, - 0x10, 0xc0, 0x60, 0xc6, 0xe1, 0x75, 0x11, 0xe2, - 0xf9, 0x75, 0x00, 0xe2, 0xd1, 0x80, 0x08, 0xc9, - 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, - 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x10, 0x60, - 0xf9, 0xd7, 0xb1, 0xb4, 0xe1, 0xde, 0xd2, 0x03, - 0x0a, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0xb2, 0x01, 0xf9, 0xd8, 0x0b, 0xc9, 0x00, 0x4d, - 0x10, 0x49, 0x10, 0x56, 0x60, 0x46, 0xb1, 0xbc, - 0x0b, 0x89, 0x00, 0x4d, 0x10, 0x4a, 0x10, 0x56, - 0x60, 0x46, 0xe1, 0x75, 0x0b, 0x2c, 0xd4, 0x40, - 0xf3, 0xb0, 0xe1, 0x77, 0x00, 0xe0, 0xd0, 0x6c, - 0x00, 0xe0, 0xd1, 0x80, 0xd0, 0x0a, 0xf1, 0xfe, - 0x00, 0xe1, 0xd1, 0xb0, 0xd0, 0x02, 0xf1, 0xfe, - 0x00, 0xe0, 0xd1, 0x80, 0x76, 0x86, 0xb1, 0xbc, - 0x73, 0x46, 0xe2, 0x3c, 0x70, 0x81, 0x60, 0x86, - 0xb1, 0xbc, 0xb0, 0x7c, 0xb0, 0x01, 0xed, 0xfe, - 0x0f, 0xc5, 0x00, 0xe1, 0xd1, 0xa0, 0x70, 0x46, - 0xd0, 0x8f, 0x40, 0x42, 0x00, 0x25, 0xd0, 0xe0, - 0x00, 0x24, 0xd1, 0x20, 0x10, 0x6a, 0xea, 0x1e, - 0x00, 0x66, 0xd0, 0xe0, 0x00, 0x62, 0xd1, 0x00, - 0x10, 0x66, 0xea, 0x1e, 0x00, 0x6e, 0xd0, 0xc0, - 0x10, 0x64, 0xea, 0x1e, 0x00, 0x2b, 0xd0, 0xd0, - 0x00, 0x29, 0xd1, 0x00, 0x00, 0xe0, 0xd1, 0x80, - 0x76, 0x86, 0x16, 0xa0, 0xe9, 0xee, 0x30, 0xda, - 0xe5, 0xee, 0xb1, 0xbc, 0x73, 0x46, 0x13, 0x60, - 0xe9, 0xee, 0x31, 0x0d, 0xe5, 0xee, 0xd0, 0x82, - 0xb1, 0xbc, 0x70, 0x46, 0x10, 0x60, 0xe9, 0xee, - 0xb0, 0x81, 0xee, 0x2c, 0x00, 0xe0, 0xd0, 0x40, - 0x00, 0xe0, 0xd1, 0xac, 0xd0, 0x0a, 0xf1, 0xfe, - 0x00, 0xe1, 0xd0, 0x70, 0xd0, 0x02, 0xf1, 0xfe, - 0x00, 0xec, 0xd1, 0x98, 0xd0, 0x40, 0x60, 0x46, - 0x00, 0xe0, 0xd0, 0x8c, 0x70, 0x82, 0x00, 0x21, - 0xd0, 0x70, 0x60, 0x81, 0xd0, 0x40, 0x00, 0x25, - 0xd0, 0x20, 0x30, 0x1a, 0xfa, 0x50, 0x00, 0x23, - 0xd0, 0x30, 0x30, 0x0d, 0xfa, 0x50, 0xd0, 0x41, - 0x00, 0x21, 0xd1, 0x84, 0x60, 0x46, 0xb6, 0xb1, - 0x16, 0x9c, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, - 0x02, 0x31, 0xdc, 0x13, 0x00, 0x27, 0xdc, 0xd8, - 0xf0, 0x4a, 0x00, 0xec, 0xd0, 0xa8, 0x70, 0xc2, - 0x10, 0xe0, 0xf9, 0x77, 0x00, 0xec, 0xd1, 0x9c, - 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, - 0xe9, 0x84, 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x77, - 0x0b, 0x49, 0x00, 0xe2, 0xd1, 0xa0, 0x00, 0x4d, - 0x10, 0x5f, 0x00, 0x6f, 0xd0, 0xff, 0x40, 0x43, - 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x09, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x89, 0x00, 0x4d, - 0x60, 0x46, 0x10, 0x61, 0xf9, 0x9b, 0xd3, 0xc2, - 0x00, 0xec, 0xd1, 0xbc, 0x63, 0xc6, 0x0c, 0x09, - 0x90, 0x4d, 0x10, 0x60, 0xe5, 0x9c, 0x00, 0x06, - 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, - 0xf9, 0xa9, 0x0b, 0xa0, 0xd4, 0x40, 0xf3, 0xb0, - 0xe1, 0xa0, 0x00, 0xec, 0xd1, 0x9c, 0xd0, 0x40, - 0x60, 0x46, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, - 0x0b, 0x09, 0x00, 0x4d, 0x0b, 0x09, 0x00, 0x4d, - 0x0a, 0x09, 0x01, 0x4d, 0x0a, 0x09, 0x00, 0x4d, - 0x01, 0x59, 0xe9, 0x96, 0x09, 0x09, 0x00, 0x4d, - 0x10, 0x5f, 0x10, 0x61, 0xf9, 0x96, 0x09, 0x09, - 0x01, 0x4d, 0x11, 0x5f, 0x0b, 0xc9, 0x00, 0x4d, - 0xc0, 0x01, 0x10, 0x5f, 0x11, 0x4e, 0x51, 0x41, - 0x08, 0x49, 0x00, 0x4d, 0x0b, 0xc9, 0x10, 0x0f, - 0x00, 0x4d, 0x50, 0x01, 0x00, 0xed, 0xd1, 0xb6, - 0x01, 0x46, 0x00, 0x06, 0xa0, 0x3c, 0xa1, 0x7d, - 0x60, 0x06, 0x00, 0xc6, 0xd5, 0x00, 0xb5, 0x01, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, - 0x00, 0xec, 0xd0, 0xac, 0x70, 0xc2, 0x10, 0xe0, - 0xf9, 0x70, 0x00, 0xec, 0xd1, 0xa0, 0xd0, 0x41, - 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x7f, - 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x70, 0x0a, 0x89, - 0x0b, 0xcd, 0x00, 0xe3, 0xd1, 0x80, 0x6b, 0xc6, - 0x08, 0xc9, 0x05, 0x8d, 0x15, 0xa3, 0xee, 0x6e, - 0x15, 0xa0, 0xea, 0x6e, 0x90, 0x4d, 0xd0, 0x9f, - 0xd0, 0xdf, 0x40, 0x81, 0x10, 0x55, 0x40, 0xc1, - 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc8, 0x1d, - 0x81, 0x34, 0x80, 0x3f, 0x00, 0xc6, 0xd1, 0x23, - 0x31, 0x03, 0x11, 0x02, 0x38, 0x04, 0xb0, 0x8d, - 0x10, 0x9d, 0x28, 0x02, 0xc0, 0x60, 0x00, 0x65, - 0xd1, 0x94, 0x71, 0x06, 0x68, 0x06, 0x30, 0x44, - 0x00, 0xed, 0xd1, 0xa8, 0x70, 0x06, 0x10, 0x20, - 0xe9, 0xb0, 0x00, 0xee, 0xd0, 0xc0, 0x70, 0xc3, - 0x20, 0x43, 0xb0, 0x01, 0xf9, 0xac, 0x60, 0x06, - 0x00, 0x64, 0xd1, 0xbc, 0x71, 0x06, 0xc0, 0x04, - 0x21, 0x01, 0x61, 0x06, 0x10, 0x20, 0xf5, 0xbb, - 0x11, 0x20, 0xe5, 0xbb, 0xb0, 0x41, 0x00, 0x65, - 0xd1, 0x80, 0x71, 0x06, 0x21, 0x01, 0x61, 0x06, - 0x00, 0xed, 0xd1, 0xac, 0x71, 0x06, 0x15, 0xa1, - 0xe9, 0xcb, 0xb1, 0x3f, 0x61, 0x06, 0x15, 0xa3, - 0xf9, 0xd6, 0xd0, 0xbf, 0xe1, 0xd3, 0xd0, 0x40, - 0x60, 0x46, 0xb1, 0xbc, 0x70, 0x86, 0x61, 0x06, - 0x31, 0x02, 0xe5, 0xd3, 0x20, 0x84, 0x00, 0x65, - 0xd1, 0xa4, 0x60, 0x86, 0xd9, 0x40, 0x00, 0xec, - 0xd1, 0x94, 0x79, 0x06, 0xb1, 0x84, 0x78, 0xc6, - 0xc0, 0x63, 0x30, 0x64, 0xe9, 0xf8, 0x00, 0xa7, - 0xd0, 0xff, 0x7a, 0x63, 0x00, 0x65, 0xd0, 0x00, - 0x71, 0x00, 0x31, 0x29, 0xe5, 0xf8, 0xc0, 0x63, - 0xc8, 0xc1, 0xb0, 0x78, 0x40, 0x43, 0xc0, 0xa4, - 0x30, 0x81, 0xe9, 0xf2, 0x7a, 0x41, 0x31, 0x29, - 0xf5, 0xe8, 0x21, 0x29, 0x61, 0x00, 0xb8, 0xfc, - 0x79, 0x63, 0xb8, 0xfc, 0x48, 0xc3, 0x68, 0xc6, - 0x00, 0xed, 0xd1, 0xb8, 0x69, 0x46, 0x80, 0x28, - 0x0b, 0xc9, 0x00, 0x4d, 0x08, 0x49, 0x10, 0x41, - 0x00, 0xe3, 0xd1, 0x84, 0x00, 0x8d, 0x20, 0x42, - 0x60, 0x46, 0x00, 0xee, 0xd1, 0xa4, 0x70, 0x86, - 0x10, 0xa1, 0xee, 0x18, 0xe6, 0x6b, 0x90, 0x86, - 0x00, 0x90, 0xea, 0x18, 0x00, 0xed, 0xd0, 0x1c, - 0x70, 0x80, 0xb0, 0x81, 0xe6, 0x6b, 0x60, 0x80, - 0xb1, 0xa8, 0x70, 0x86, 0x10, 0xa0, 0xfa, 0x6b, - 0x00, 0x21, 0xd0, 0x38, 0x70, 0x80, 0x10, 0xa0, - 0xfa, 0x6b, 0x0f, 0xef, 0xd0, 0xbf, 0x30, 0x81, - 0xfa, 0x22, 0x60, 0x00, 0x08, 0x20, 0xd0, 0x00, - 0x5f, 0x00, 0x15, 0xa3, 0xea, 0x6b, 0x00, 0xee, - 0xd1, 0x80, 0x79, 0x46, 0x00, 0xf8, 0xd0, 0x00, - 0xc4, 0x40, 0x00, 0xe3, 0xd1, 0x84, 0x78, 0x46, - 0x0f, 0xef, 0xd0, 0x3f, 0x30, 0x21, 0xea, 0x48, - 0x00, 0xe0, 0xd1, 0x90, 0x78, 0x06, 0xc0, 0xa1, - 0x18, 0x43, 0x28, 0x42, 0x18, 0x43, 0x28, 0x42, - 0x18, 0x1e, 0xd8, 0x80, 0x08, 0x11, 0xea, 0x41, - 0x28, 0xa1, 0x18, 0x01, 0x18, 0x5f, 0x18, 0x60, - 0xee, 0x3e, 0xc0, 0x51, 0x30, 0x62, 0xee, 0x4e, - 0xc8, 0x91, 0x18, 0x9f, 0x00, 0x21, 0xd1, 0xb8, - 0xd0, 0x01, 0x60, 0x06, 0x00, 0xef, 0xd0, 0x10, - 0xd0, 0x72, 0x60, 0x40, 0x01, 0x46, 0x82, 0x34, - 0x80, 0x3f, 0xc8, 0xdc, 0xc9, 0x1d, 0x81, 0x34, - 0x80, 0x3f, 0x00, 0xc6, 0x38, 0xe4, 0xee, 0x5e, - 0xea, 0x52, 0x28, 0xe5, 0x01, 0x46, 0x90, 0x6d, - 0x28, 0xc1, 0x00, 0xc6, 0x38, 0xe2, 0xf6, 0x6b, - 0xdb, 0x08, 0xf1, 0x16, 0xf1, 0x18, 0x00, 0x21, - 0xd1, 0xb4, 0x61, 0x86, 0xe2, 0x52, 0x01, 0xf7, - 0xd0, 0x19, 0xe0, 0x46, 0xd5, 0x00, 0xb5, 0x01, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, - 0x02, 0x31, 0xdc, 0x13, 0x00, 0x27, 0xdc, 0xd8, - 0xf0, 0x4a, 0xdb, 0x09, 0x00, 0xe3, 0xd0, 0x1c, - 0x6b, 0x00, 0xda, 0xc1, 0x00, 0xe6, 0xd1, 0x98, - 0x70, 0x06, 0xb1, 0x84, 0x60, 0x06, 0xb1, 0x84, - 0x60, 0x06, 0x05, 0x9f, 0xe9, 0x9f, 0x08, 0x49, - 0xd1, 0x17, 0x46, 0x44, 0x00, 0x4d, 0x10, 0x43, - 0x26, 0x41, 0x08, 0xc9, 0x05, 0xcd, 0xb5, 0xc1, - 0xe5, 0xcc, 0xc0, 0x57, 0x15, 0xc6, 0x25, 0xc1, - 0x15, 0xa3, 0xf9, 0x9f, 0x08, 0x49, 0xd1, 0x0f, - 0x46, 0x44, 0x00, 0x4d, 0x10, 0x44, 0x26, 0x41, - 0x08, 0xc9, 0x06, 0x0d, 0xb6, 0x01, 0xe5, 0xcc, - 0xc0, 0x58, 0x16, 0x06, 0x26, 0x01, 0x08, 0x49, - 0x00, 0x4d, 0x10, 0x60, 0xe9, 0xa6, 0x0a, 0x09, - 0x00, 0x4d, 0xe1, 0x9f, 0x0c, 0x09, 0x90, 0x4d, - 0x10, 0x60, 0xe5, 0xa7, 0x00, 0x06, 0x05, 0x0d, - 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, 0xf9, 0xb3, - 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0xab, 0xb0, 0x7d, - 0xf9, 0xb8, 0x02, 0x34, 0xd2, 0x44, 0xe0, 0x46, - 0x00, 0xec, 0xd1, 0xa0, 0xd0, 0x40, 0x60, 0x46, - 0x02, 0x3c, 0xda, 0x89, 0x00, 0xec, 0xd1, 0x80, - 0x70, 0x46, 0xb1, 0xbc, 0x70, 0x86, 0x30, 0x81, - 0xe8, 0x46, 0x15, 0x63, 0xe9, 0xc9, 0x05, 0x5e, - 0xe8, 0x46, 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0xcc, 0xc0, 0xcd, 0x01, 0xcd, 0x42, 0xcd, 0x83, - 0x00, 0xa0, 0xd0, 0x01, 0xa0, 0x38, 0xc8, 0x7f, - 0xc8, 0x06, 0xb1, 0xbe, 0xf3, 0x96, 0xc8, 0x80, - 0xf3, 0x92, 0x58, 0x80, 0xf3, 0x96, 0xc8, 0xc0, - 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x58, 0xc0, - 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, 0x59, 0x40, - 0xc0, 0x22, 0xc0, 0x65, 0xc0, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x59, 0x00, - 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x96, 0xc9, 0x80, - 0xf3, 0x92, 0x59, 0x40, 0xf3, 0x96, 0xc9, 0xc0, - 0xf3, 0x92, 0x58, 0x80, 0xc0, 0x23, 0xc0, 0x62, - 0xd0, 0x88, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, - 0xc8, 0xc0, 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, - 0xc8, 0x80, 0xf3, 0x92, 0x59, 0xc0, 0xc0, 0x24, - 0xc0, 0x67, 0xd0, 0x90, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x59, 0x80, - 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x96, 0xca, 0x00, - 0xf3, 0x92, 0x59, 0xc0, 0xf3, 0x96, 0xca, 0x40, - 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x25, 0xc0, 0x64, - 0xd0, 0x98, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, - 0xc9, 0x40, 0xf3, 0x92, 0x58, 0x80, 0xf3, 0x96, - 0xc9, 0x00, 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x23, - 0xc0, 0x64, 0xd0, 0x84, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, 0x59, 0x40, - 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x5a, 0x40, - 0xc0, 0x26, 0xc0, 0x69, 0xd0, 0xa0, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, - 0x5a, 0x00, 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, - 0x5a, 0x40, 0xf3, 0x96, 0xca, 0x80, 0xf3, 0x92, - 0x59, 0x80, 0xc0, 0x27, 0xc0, 0x66, 0xd0, 0xa8, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0xc0, - 0xf3, 0x92, 0x59, 0x00, 0xf3, 0x96, 0xc9, 0x80, - 0xf3, 0x92, 0x58, 0xc0, 0xc0, 0x22, 0xc0, 0x63, - 0xd0, 0x8c, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, - 0x59, 0x80, 0xc0, 0x25, 0xc0, 0x66, 0xd0, 0x94, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0x80, - 0xf3, 0x92, 0x59, 0xc0, 0xf3, 0x96, 0xc8, 0xc0, - 0xf3, 0x92, 0x5a, 0x80, 0xc0, 0x28, 0xc0, 0x6a, - 0xd0, 0xb0, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, - 0xc9, 0x40, 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x29, - 0xc0, 0x65, 0xd0, 0xb8, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x58, 0xc0, - 0xf3, 0x96, 0xca, 0x00, 0xf3, 0x92, 0x58, 0x80, - 0xc0, 0x24, 0xc0, 0x62, 0xd0, 0x9c, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x92, 0x5a, 0x00, 0xc0, 0x27, - 0xc0, 0x68, 0xd0, 0xa4, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xca, 0x80, 0xf3, 0x92, 0x59, 0x80, - 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, 0x5a, 0x40, - 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, 0x5a, 0x80, - 0xc0, 0x23, 0xc0, 0x6a, 0xd0, 0xac, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x26, - 0xc0, 0x65, 0xd0, 0xb4, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x59, 0x00, - 0xc0, 0x29, 0xc0, 0x64, 0xd0, 0xbc, 0x20, 0x86, - 0xf3, 0x9a, 0xc0, 0x33, 0xc0, 0x74, 0xc0, 0xb5, - 0xc0, 0xf6, 0xd0, 0x40, 0x00, 0xa0, 0xd8, 0x00, - 0xa8, 0x38, 0x08, 0x45, 0x0a, 0x09, 0x00, 0x0d, - 0x0f, 0xc5, 0x50, 0x00, 0x0a, 0x09, 0x00, 0x0d, - 0x10, 0x08, 0x0f, 0xc5, 0x01, 0x46, 0x00, 0x06, - 0xa0, 0x7c, 0xa0, 0x3d, 0x60, 0x42, 0x00, 0xc6, - 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x14, 0x48, 0xd0, 0x81, 0x00, 0xef, 0xd1, 0x8c, - 0x71, 0x46, 0x11, 0x60, 0xfb, 0xb1, 0x60, 0x86, - 0x71, 0x46, 0x31, 0x42, 0xfb, 0xb1, 0x00, 0xec, - 0xd1, 0x0c, 0x74, 0x84, 0x00, 0x68, 0xd0, 0x80, - 0x70, 0x02, 0x10, 0x20, 0xfb, 0xc4, 0xc4, 0x82, - 0xc4, 0xd2, 0xb4, 0xfc, 0xda, 0x00, 0xda, 0x4f, - 0x0a, 0x09, 0x0f, 0xef, 0xd0, 0x3f, 0xb4, 0x7f, - 0xca, 0x29, 0x1a, 0x18, 0x4a, 0x00, 0x1a, 0x48, - 0x00, 0x8d, 0x2a, 0x42, 0xd0, 0x03, 0x40, 0x11, - 0xfb, 0xe3, 0xb4, 0x44, 0x00, 0xa0, 0xd0, 0xc0, - 0x30, 0xd3, 0xff, 0xe3, 0xb4, 0xfe, 0x01, 0x46, - 0x00, 0x06, 0xaa, 0x3d, 0xaa, 0x7c, 0x6a, 0x53, - 0x00, 0xc6, 0xb4, 0xfe, 0xb4, 0x7c, 0x1a, 0x61, - 0xfb, 0xc8, 0xb4, 0x43, 0x00, 0xef, 0xd0, 0x3f, - 0x40, 0x11, 0xeb, 0xf7, 0xb0, 0xc4, 0xe7, 0xf7, - 0xeb, 0xee, 0x61, 0x53, 0x64, 0x52, 0x64, 0xc4, - 0x00, 0x28, 0xd1, 0x24, 0x70, 0x04, 0x00, 0x21, - 0xd0, 0x80, 0x50, 0x02, 0x60, 0x04, 0x61, 0x46, - 0x0a, 0x09, 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, - 0x02, 0x31, 0xdc, 0x13, 0x00, 0x27, 0xdc, 0xd8, - 0xf0, 0x4a, 0x01, 0xfa, 0xd2, 0x3d, 0x00, 0x25, - 0xdc, 0xd8, 0xf0, 0x4a, 0x09, 0x09, 0x01, 0xcd, - 0x11, 0xe8, 0xf9, 0xe2, 0x00, 0xe3, 0xd1, 0x9c, - 0x09, 0x09, 0x05, 0xcd, 0xb5, 0xc1, 0x09, 0x09, - 0x00, 0x4d, 0xb0, 0x41, 0x10, 0x46, 0x25, 0xc1, - 0x09, 0x09, 0x06, 0x0d, 0xb6, 0x01, 0x09, 0x09, - 0x00, 0x4d, 0x08, 0x89, 0xb0, 0x41, 0x10, 0x46, - 0x26, 0x01, 0x00, 0x8d, 0x08, 0x89, 0x10, 0x82, - 0xd0, 0x04, 0xc0, 0x55, 0x00, 0x40, 0x40, 0x40, - 0x05, 0x4d, 0x08, 0x49, 0x0b, 0x0d, 0xd1, 0x00, - 0x15, 0x63, 0xe9, 0xa2, 0xd1, 0x01, 0x55, 0x41, - 0xdb, 0x01, 0x4b, 0x15, 0xa1, 0x1b, 0x08, 0x89, - 0x00, 0x4d, 0x08, 0x49, 0x10, 0x41, 0xd1, 0x19, - 0x46, 0x44, 0x26, 0x41, 0x00, 0xcd, 0x08, 0x49, - 0x10, 0xc4, 0x00, 0x4d, 0x08, 0x49, 0x10, 0x41, - 0x20, 0x81, 0xa0, 0x89, 0x00, 0x4d, 0x10, 0x43, - 0x20, 0xc1, 0xa0, 0xe8, 0x08, 0x49, 0x00, 0x4d, - 0x1b, 0x03, 0x5b, 0x01, 0xbb, 0x3f, 0x6b, 0x06, - 0x08, 0x49, 0xb1, 0xbc, 0x00, 0x4d, 0x60, 0x46, - 0x08, 0x49, 0xb1, 0xbc, 0x0a, 0xcd, 0x1a, 0xc2, - 0x4a, 0xd9, 0x1a, 0xde, 0x6a, 0xc6, 0x08, 0x49, - 0xb1, 0xbc, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, - 0xea, 0x3e, 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x08, 0xc9, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x09, 0xc9, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0x0a, 0x09, 0x00, 0x4d, - 0x60, 0x46, 0xe2, 0x3e, 0x11, 0xe3, 0xfa, 0x00, - 0x00, 0xe7, 0xd0, 0xc0, 0xd0, 0x84, 0xb0, 0x81, - 0xe6, 0x3e, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x43, - 0xb0, 0xfc, 0x10, 0x60, 0xe9, 0xe7, 0x10, 0xa3, - 0xf9, 0xf4, 0x00, 0xe8, 0xd1, 0x80, 0xe1, 0xf8, - 0x10, 0xa2, 0xf9, 0xfa, 0x00, 0xe9, 0xd1, 0x80, - 0xf2, 0xb0, 0xe1, 0xe7, 0xd2, 0x3f, 0x0a, 0x09, - 0x00, 0x4d, 0xb2, 0x01, 0xf5, 0xfb, 0xe1, 0xe7, - 0x11, 0xe7, 0xfa, 0x3e, 0xd4, 0x01, 0x00, 0xe1, - 0xd0, 0x24, 0x70, 0x00, 0x10, 0x21, 0xea, 0x0d, - 0x15, 0x63, 0xfa, 0x0d, 0xd4, 0x03, 0x44, 0x2c, - 0xb4, 0x3f, 0x00, 0xe6, 0xd1, 0x90, 0x0b, 0x09, - 0x00, 0x4d, 0x09, 0x49, 0x10, 0x45, 0x00, 0x8d, - 0x50, 0x81, 0xd0, 0x40, 0x10, 0x87, 0x10, 0x98, - 0x30, 0x42, 0xf2, 0x61, 0x60, 0x46, 0xb1, 0xbc, - 0x0b, 0x09, 0x00, 0x0d, 0x09, 0x49, 0x00, 0x0d, - 0xb4, 0x01, 0xfa, 0x0f, 0x00, 0xe6, 0xd0, 0x18, - 0x30, 0x06, 0xe6, 0x29, 0x60, 0x46, 0xb1, 0xbc, - 0xe2, 0x22, 0x00, 0xe0, 0xd1, 0x88, 0x70, 0x46, - 0x10, 0x63, 0xea, 0x39, 0x10, 0x64, 0xea, 0x39, - 0x00, 0xe6, 0xd1, 0x90, 0xd0, 0x00, 0x60, 0x06, - 0xb1, 0xbc, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, - 0xe2, 0x3e, 0x00, 0xef, 0xd1, 0x84, 0x70, 0x46, - 0x10, 0x60, 0xfa, 0x30, 0x0c, 0x09, 0x90, 0x4d, - 0x10, 0x60, 0xe6, 0x3f, 0x00, 0x06, 0x05, 0x0d, - 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, 0xfa, 0x4b, - 0xd4, 0x40, 0xf3, 0xb0, 0xe2, 0x43, 0xb0, 0x7d, - 0xe9, 0x7a, 0x00, 0xec, 0xd1, 0xa0, 0xd0, 0x40, - 0x60, 0x46, 0x02, 0x3c, 0xda, 0x89, 0x00, 0xec, - 0xd1, 0x80, 0x70, 0x46, 0xb1, 0xbc, 0x70, 0x86, - 0x30, 0x81, 0xe8, 0x46, 0x15, 0x63, 0xea, 0x5e, - 0x05, 0x5e, 0xe8, 0x46, 0x01, 0x73, 0xd4, 0x3d, - 0xe0, 0x46, 0x00, 0xe0, 0xd0, 0x00, 0x70, 0xc0, - 0x10, 0xc1, 0x00, 0xe0, 0xd0, 0x08, 0x70, 0x00, - 0x10, 0x23, 0xea, 0x75, 0xc0, 0x83, 0x10, 0x9d, - 0x30, 0xc2, 0x10, 0x9f, 0x30, 0xc2, 0x00, 0xef, - 0xd0, 0xac, 0x70, 0x82, 0x10, 0xa3, 0xea, 0x75, - 0x10, 0xc1, 0xc0, 0x83, 0x30, 0x81, 0xe6, 0x7e, - 0xc0, 0x83, 0x20, 0x81, 0xf6, 0x7f, 0xd0, 0x40, - 0x30, 0x43, 0x0f, 0xc5, 0xc0, 0x43, 0x0f, 0xc5, - 0x00, 0xed, 0xd1, 0xa4, 0x72, 0x86, 0x15, 0xa3, - 0xee, 0x23, 0x15, 0xa1, 0xe6, 0x23, 0x08, 0x20, - 0xd0, 0x00, 0x5f, 0x00, 0xd8, 0xc4, 0x15, 0x63, - 0xe9, 0x7e, 0x48, 0xd5, 0x18, 0xde, 0x18, 0xe0, - 0xe9, 0xc2, 0x00, 0xed, 0xd1, 0xb4, 0x79, 0xc6, - 0x19, 0xe0, 0xe9, 0x8c, 0x00, 0xed, 0xd0, 0x3a, - 0x79, 0xc6, 0x69, 0xc0, 0xd9, 0xc0, 0x69, 0xc6, - 0x00, 0xed, 0xd0, 0x38, 0x79, 0x40, 0x19, 0x60, - 0xe9, 0x98, 0x00, 0x28, 0xd0, 0x24, 0x70, 0x40, - 0x02, 0x20, 0xd0, 0x80, 0x50, 0x42, 0x60, 0x40, - 0x15, 0xa3, 0xe9, 0x9f, 0x00, 0xec, 0xd1, 0xb8, - 0x79, 0xc6, 0x69, 0x46, 0xc9, 0x67, 0x00, 0xec, - 0xd9, 0xb4, 0x70, 0x66, 0x00, 0xec, 0xd1, 0xbc, - 0x70, 0x06, 0x10, 0x20, 0xed, 0xbe, 0x10, 0x60, - 0xe9, 0xc1, 0x00, 0xe0, 0xda, 0xa8, 0x7a, 0xaa, - 0xc0, 0x2a, 0x10, 0x1f, 0x00, 0x22, 0xd0, 0xa0, - 0x70, 0x82, 0x20, 0x6a, 0x00, 0x9f, 0xe9, 0xb5, - 0x20, 0x40, 0x19, 0x60, 0xf9, 0xb8, 0xc9, 0x41, - 0xb0, 0x48, 0x30, 0x65, 0xf5, 0xbd, 0xb0, 0x70, - 0xed, 0xbe, 0xd9, 0x40, 0x00, 0xed, 0xd1, 0xbc, - 0x69, 0x46, 0x69, 0x66, 0x12, 0xa4, 0xea, 0x21, - 0x00, 0xec, 0xd1, 0xbc, 0x73, 0xc6, 0x15, 0xa3, - 0xe9, 0xdf, 0x33, 0xe3, 0xe5, 0xd3, 0xed, 0xd2, - 0x63, 0xc6, 0x00, 0x21, 0xd1, 0xa8, 0x63, 0xc6, - 0x00, 0xed, 0xd1, 0xa0, 0x63, 0xc6, 0x15, 0xa1, - 0xf9, 0xdc, 0x12, 0xa3, 0xe5, 0xe3, 0xd3, 0xc2, - 0x00, 0xec, 0xd1, 0xbc, 0x63, 0xc6, 0xe1, 0xe3, - 0x12, 0xa3, 0xea, 0x21, 0xe1, 0xe3, 0x12, 0xa2, - 0xf6, 0x21, 0x13, 0xe0, 0xfa, 0x21, 0x00, 0xee, - 0xd1, 0x8c, 0x78, 0x06, 0xb1, 0xbc, 0x78, 0x46, - 0xb1, 0xbc, 0x78, 0x86, 0xd1, 0x88, 0x72, 0x46, - 0xd1, 0x84, 0x73, 0x06, 0x13, 0x20, 0xf9, 0xe3, - 0x00, 0x64, 0xd1, 0xa0, 0x70, 0x46, 0xd0, 0xa2, - 0x30, 0x81, 0xe9, 0xff, 0x10, 0x70, 0xea, 0x11, - 0x10, 0x6d, 0xea, 0x14, 0x10, 0x76, 0xea, 0x19, - 0x10, 0x7a, 0xea, 0x28, 0xe2, 0x3b, 0x18, 0xe0, - 0xea, 0x3b, 0x00, 0xed, 0xd1, 0x80, 0x70, 0x86, - 0xb0, 0x81, 0xd0, 0x3f, 0x40, 0x02, 0x10, 0x20, - 0xea, 0x0c, 0x60, 0x86, 0xf3, 0x8a, 0xe1, 0xe3, - 0xc0, 0x02, 0x10, 0x1a, 0x50, 0x80, 0x60, 0x86, - 0xe2, 0x3b, 0x15, 0xa3, 0xea, 0x21, 0xe2, 0xe9, - 0xd2, 0x80, 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, - 0xe3, 0x0c, 0x00, 0xed, 0xd1, 0x88, 0xd0, 0x60, - 0x70, 0x06, 0x50, 0x40, 0x60, 0x46, 0x15, 0xa3, - 0xfb, 0x0c, 0xd5, 0x84, 0xe3, 0x0c, 0xd5, 0x00, - 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, - 0x00, 0xed, 0xd1, 0x88, 0xd0, 0x60, 0x70, 0x06, - 0x50, 0x40, 0x60, 0x46, 0x15, 0xa2, 0xe7, 0x0c, - 0xee, 0x21, 0x00, 0x21, 0xd1, 0x8c, 0x18, 0xe0, - 0xfa, 0x39, 0x70, 0x46, 0x10, 0x61, 0xea, 0x70, - 0xe2, 0x21, 0x65, 0x86, 0xe2, 0x21, 0x18, 0xe0, - 0xea, 0x70, 0xd1, 0x80, 0x73, 0x06, 0x15, 0xa2, - 0xee, 0x68, 0x00, 0x22, 0xd1, 0x80, 0x70, 0x46, - 0x6b, 0x06, 0xcb, 0x01, 0xb1, 0xb4, 0x70, 0x46, - 0x6a, 0xc6, 0xca, 0xc1, 0x00, 0x65, 0xd1, 0x98, - 0x70, 0x46, 0x10, 0x61, 0xfa, 0x50, 0x02, 0x41, - 0xc3, 0x21, 0xc7, 0xe0, 0x02, 0x50, 0xea, 0x56, - 0xc3, 0x20, 0xc7, 0xe1, 0xd1, 0x88, 0xd0, 0x01, - 0x02, 0x40, 0x62, 0x46, 0x0f, 0xef, 0xd0, 0x7f, - 0x30, 0x6f, 0xfa, 0x5f, 0xc3, 0x20, 0xc7, 0x4c, - 0xd0, 0x00, 0x00, 0x65, 0xd1, 0x98, 0x70, 0x46, - 0x60, 0x06, 0xb0, 0x41, 0x43, 0x01, 0xe2, 0x70, - 0xc3, 0x22, 0xc7, 0xcc, 0xc7, 0x60, 0xc7, 0xa1, - 0x02, 0x50, 0xea, 0x70, 0xc7, 0x61, 0xc7, 0xa0, - 0xdb, 0x80, 0xd1, 0x00, 0x00, 0xef, 0xd1, 0xa8, - 0x70, 0x46, 0x10, 0x60, 0xfa, 0x7a, 0x00, 0xe0, - 0xd1, 0x88, 0x70, 0x46, 0x00, 0x22, 0xd1, 0xb0, - 0x70, 0x86, 0x30, 0x81, 0xea, 0x82, 0x60, 0x46, - 0xd0, 0x20, 0xf3, 0x06, 0x10, 0x63, 0xea, 0x87, - 0x10, 0x64, 0xea, 0x87, 0xe2, 0x95, 0x00, 0xef, - 0xd1, 0x6c, 0x71, 0x45, 0xc0, 0x05, 0x30, 0x01, - 0xf6, 0x95, 0xdb, 0x82, 0xd1, 0x01, 0x10, 0x63, - 0xea, 0x95, 0xd1, 0x02, 0x11, 0x62, 0xea, 0x95, - 0xd1, 0x03, 0xd1, 0x8c, 0x61, 0x06, 0xdb, 0x40, - 0x00, 0xe0, 0xd0, 0x00, 0x71, 0x00, 0xc0, 0x84, - 0x10, 0x9c, 0xb0, 0x96, 0xfa, 0xa0, 0xb1, 0x38, - 0xb0, 0x96, 0xfa, 0xa3, 0xb1, 0x30, 0x00, 0x29, - 0xd1, 0x84, 0x00, 0x22, 0xd0, 0x74, 0x70, 0x86, - 0x70, 0xc1, 0x61, 0x06, 0x30, 0xc2, 0xea, 0xae, - 0x60, 0x81, 0xdb, 0x41, 0xb0, 0x3c, 0xb1, 0xbc, - 0xb0, 0x7c, 0x71, 0x00, 0x70, 0x86, 0x70, 0xc1, - 0x61, 0x06, 0x30, 0xc2, 0xea, 0xb9, 0x60, 0x81, - 0xdb, 0x41, 0x00, 0xee, 0xd1, 0xb4, 0x70, 0x06, - 0xb1, 0xbc, 0x70, 0x46, 0x30, 0x40, 0xea, 0xc2, - 0x60, 0x06, 0xdb, 0x41, 0x00, 0x23, 0xd0, 0x70, - 0x30, 0x81, 0xea, 0xc7, 0x30, 0x81, 0x50, 0x02, - 0xea, 0xca, 0xd0, 0x01, 0x00, 0x22, 0xd1, 0xbc, - 0x70, 0x86, 0x30, 0x80, 0xea, 0xd2, 0x60, 0x06, - 0xd0, 0x10, 0xf3, 0x06, 0x00, 0x22, 0xd1, 0xa4, - 0x71, 0x06, 0xd0, 0x01, 0x41, 0x00, 0x5b, 0x44, - 0x5b, 0x6e, 0x6b, 0x46, 0x00, 0x28, 0xd0, 0x70, - 0x70, 0x41, 0x10, 0x62, 0xfa, 0xe6, 0xd1, 0x84, - 0x70, 0x06, 0x10, 0x20, 0xfa, 0xdf, 0x00, 0x22, - 0xd0, 0x00, 0xf3, 0x06, 0x02, 0x7d, 0xdc, 0x62, - 0xe0, 0x46, 0x00, 0xed, 0xd1, 0x88, 0x71, 0x06, - 0x01, 0x1f, 0xfa, 0xfd, 0xd0, 0x41, 0x41, 0x01, - 0xd0, 0x62, 0x00, 0x65, 0xd0, 0x30, 0x70, 0x00, - 0x10, 0x21, 0xea, 0xfa, 0xee, 0xf9, 0x1a, 0xe1, - 0xfa, 0xfa, 0xd0, 0x52, 0x51, 0x01, 0x61, 0x06, - 0xe3, 0x0c, 0x18, 0xe0, 0xea, 0x70, 0xc7, 0x60, - 0xc7, 0xe1, 0x02, 0x50, 0xea, 0x70, 0xc7, 0x61, - 0xc7, 0xe0, 0xe2, 0x70, 0x00, 0x28, 0xdc, 0xa4, - 0x7c, 0x72, 0x5c, 0x40, 0x6c, 0x72, 0x0f, 0xc5, - 0x18, 0xe0, 0xeb, 0x82, 0xd9, 0x0d, 0x00, 0xee, - 0xd1, 0xa4, 0x70, 0x06, 0x10, 0x21, 0xfb, 0x7f, - 0xd9, 0x0c, 0x90, 0x06, 0x00, 0x10, 0xeb, 0x7f, - 0x00, 0x21, 0xd1, 0x88, 0x7a, 0x06, 0x1a, 0x20, - 0xeb, 0x7f, 0xd9, 0x00, 0x00, 0xed, 0xd1, 0xbc, - 0x79, 0x46, 0x19, 0x60, 0xeb, 0x7f, 0x39, 0x68, - 0xc0, 0xe5, 0xc0, 0x25, 0x10, 0x13, 0xb0, 0x0f, - 0xef, 0x7f, 0xb0, 0x22, 0xe7, 0x7f, 0x00, 0xe0, - 0xd1, 0xa8, 0x71, 0x46, 0x11, 0x5f, 0x29, 0x45, - 0x00, 0x22, 0xd0, 0x18, 0x00, 0x22, 0xd4, 0x54, - 0x00, 0x22, 0xd0, 0x9c, 0x70, 0x00, 0x74, 0x51, - 0x70, 0x42, 0x34, 0x40, 0xe7, 0x3c, 0xd0, 0x40, - 0x00, 0x22, 0xd4, 0x50, 0x74, 0x51, 0x34, 0x40, - 0xef, 0x42, 0x20, 0x45, 0x60, 0x42, 0x39, 0x41, - 0x19, 0x60, 0xf7, 0x5e, 0x00, 0x65, 0xd1, 0xa8, - 0x7a, 0x86, 0x29, 0x6a, 0x19, 0x59, 0xb9, 0x7e, - 0xf7, 0x75, 0x15, 0xa3, 0xf7, 0x57, 0x00, 0xed, - 0xd1, 0xac, 0x70, 0x06, 0x00, 0xed, 0xd1, 0xb0, - 0x70, 0x46, 0x30, 0x01, 0xfb, 0x7f, 0x00, 0x65, - 0xd1, 0x84, 0x70, 0x46, 0xb0, 0x7f, 0x60, 0x46, - 0xd5, 0x84, 0xe3, 0x7f, 0x11, 0x41, 0xd0, 0x4a, - 0x00, 0xed, 0xd1, 0xa0, 0x74, 0x46, 0xd0, 0x00, - 0x60, 0x06, 0x30, 0xc5, 0x39, 0x45, 0xe7, 0x6e, - 0x14, 0x60, 0xeb, 0x6b, 0xf3, 0x85, 0xb0, 0x41, - 0xef, 0x65, 0xe3, 0x71, 0x00, 0x66, 0xd1, 0xa0, - 0x60, 0xc6, 0x15, 0xa3, 0xeb, 0x7f, 0xf3, 0x85, - 0xe3, 0x7f, 0xd9, 0x01, 0x00, 0x66, 0xd1, 0xa0, - 0x70, 0x06, 0x30, 0x03, 0xe7, 0x7e, 0x10, 0x1d, - 0x10, 0x3b, 0xe7, 0x7f, 0x60, 0xc6, 0x00, 0x66, - 0xd1, 0xa4, 0x69, 0x06, 0x15, 0xa4, 0xea, 0x23, - 0xe2, 0x3b, 0x00, 0x65, 0xdd, 0x08, 0x7c, 0xf4, - 0xbc, 0xff, 0x6c, 0xf4, 0x00, 0xef, 0xdd, 0x10, - 0x7c, 0xf4, 0xbc, 0xfe, 0x6c, 0xf4, 0xc0, 0x3f, - 0xf1, 0x18, 0xf1, 0x16, 0xf1, 0x18, 0x00, 0x05, - 0x08, 0x20, 0xd0, 0x40, 0x5f, 0x01, 0x15, 0x63, - 0xe9, 0x77, 0x05, 0x5e, 0xea, 0xf2, 0x00, 0x22, - 0xd1, 0xa0, 0x6b, 0x06, 0x00, 0x22, 0xd1, 0xa8, - 0x6b, 0xc6, 0x00, 0x22, 0xd1, 0xac, 0x6a, 0xc6, - 0x00, 0xee, 0xd0, 0x0c, 0x00, 0xe6, 0xd1, 0x9c, - 0x70, 0x40, 0x30, 0x5f, 0xe9, 0x8d, 0xb0, 0x3c, - 0xb1, 0xb4, 0x70, 0x40, 0x30, 0x5f, 0xe9, 0x8d, - 0xb1, 0xb4, 0x00, 0xe6, 0xd0, 0x10, 0xd0, 0x83, - 0x70, 0x40, 0x60, 0x46, 0xb0, 0x3c, 0xb1, 0xbc, - 0xb0, 0x81, 0xed, 0x90, 0x00, 0xee, 0xd0, 0x0c, - 0x00, 0xe6, 0xd1, 0x9c, 0x70, 0x40, 0x30, 0x4c, - 0xe9, 0xa3, 0xb0, 0x3c, 0xb1, 0xb4, 0x70, 0x40, - 0x30, 0x4c, 0xe9, 0xa3, 0xb1, 0xb4, 0x00, 0xe6, - 0xd0, 0x00, 0x61, 0x80, 0x00, 0x21, 0xd1, 0xb4, - 0x70, 0x06, 0x10, 0x20, 0xe9, 0xae, 0xd0, 0x00, - 0x60, 0x06, 0xf1, 0x18, 0x00, 0x21, 0xd1, 0x8c, - 0x70, 0x46, 0x65, 0x86, 0xde, 0xc0, 0x00, 0xee, - 0xd0, 0x20, 0x70, 0x00, 0x10, 0x22, 0xfd, 0xb9, - 0xde, 0xc2, 0x00, 0x21, 0xd0, 0x04, 0x70, 0x00, - 0x10, 0x21, 0xe9, 0xc0, 0x15, 0xa3, 0xe9, 0xdc, - 0xd0, 0x02, 0x4c, 0x00, 0x10, 0x63, 0xe9, 0xc5, - 0xcc, 0x3b, 0xd0, 0x04, 0x63, 0x00, 0xd0, 0x00, - 0x70, 0x00, 0x30, 0x1f, 0xfa, 0xf2, 0xd0, 0x18, - 0x70, 0x00, 0x10, 0x20, 0xed, 0xc7, 0xd0, 0x04, - 0x70, 0x80, 0x10, 0xa0, 0xea, 0xf2, 0xf1, 0x16, - 0x00, 0x21, 0xd0, 0x9a, 0xc0, 0x39, 0x30, 0x1f, - 0x10, 0x18, 0x30, 0x02, 0xfd, 0xcf, 0xe2, 0xf2, - 0x00, 0xe0, 0xd9, 0x04, 0x79, 0x24, 0xb9, 0x38, - 0x19, 0x1c, 0xd0, 0x1e, 0x30, 0x24, 0xf5, 0xe5, - 0x29, 0x00, 0xdc, 0x88, 0x4c, 0xac, 0xd0, 0x02, - 0x40, 0x2c, 0x10, 0x02, 0x0c, 0x80, 0x10, 0x63, - 0xea, 0x5a, 0x15, 0x63, 0xf9, 0xf0, 0xf1, 0x18, - 0xdc, 0x1e, 0x1e, 0xe0, 0xe9, 0xf6, 0x15, 0x63, - 0xf9, 0xf6, 0xbe, 0xfc, 0xd0, 0x2c, 0x6c, 0x00, - 0xcc, 0x24, 0xd9, 0x40, 0x06, 0x50, 0xea, 0x0c, - 0xc0, 0x24, 0xb0, 0x0f, 0xfe, 0x0c, 0xd9, 0x74, - 0x79, 0x65, 0x19, 0x5f, 0x30, 0x25, 0xee, 0x05, - 0x29, 0x40, 0x19, 0x5f, 0x19, 0x41, 0xc0, 0x25, - 0x20, 0x30, 0x30, 0x24, 0xe6, 0x0c, 0x3c, 0x00, - 0xd0, 0x38, 0x69, 0x40, 0x1c, 0x05, 0xbc, 0x38, - 0x3c, 0x32, 0x5c, 0x3b, 0xbc, 0x3f, 0xd8, 0xec, - 0x78, 0xe3, 0xc0, 0xa3, 0x10, 0xaf, 0xf6, 0x19, - 0xd0, 0x8f, 0x02, 0xe4, 0xd8, 0x00, 0xd0, 0xc0, - 0x20, 0xe0, 0xb0, 0x81, 0xee, 0x1c, 0xd0, 0x30, - 0x60, 0xc0, 0x00, 0xab, 0xd0, 0x30, 0xc0, 0xc0, - 0xd8, 0x40, 0xc1, 0x23, 0xd4, 0x5e, 0x34, 0x63, - 0xdc, 0x40, 0x0c, 0x1f, 0xfa, 0x45, 0xc0, 0x65, - 0xb0, 0x41, 0xe6, 0x31, 0x68, 0x40, 0xb0, 0x3c, - 0xe2, 0x2c, 0xc0, 0xc0, 0x34, 0x65, 0xdc, 0x48, - 0x4c, 0x70, 0x1c, 0x5f, 0x20, 0xf1, 0x15, 0x63, - 0xfa, 0x46, 0xf2, 0x3e, 0xc1, 0x11, 0xc0, 0x83, - 0xf2, 0x8f, 0xe2, 0x59, 0xb1, 0x01, 0xe6, 0x44, - 0x68, 0x40, 0x28, 0x60, 0xb0, 0x3c, 0xe2, 0x3e, - 0x0f, 0xc5, 0xd9, 0x40, 0xb1, 0x0f, 0x11, 0x01, - 0x21, 0x25, 0xf2, 0x3e, 0xc1, 0x11, 0xb1, 0x01, - 0xe6, 0x59, 0x20, 0x31, 0x68, 0x40, 0x30, 0x31, - 0xb0, 0x3c, 0x28, 0x60, 0x70, 0x43, 0x30, 0x31, - 0x60, 0x40, 0x20, 0x31, 0xb0, 0x3c, 0xb0, 0xf8, - 0xe2, 0x4b, 0xe2, 0xe1, 0xd8, 0xec, 0x78, 0xe3, - 0x00, 0xa8, 0xd0, 0x80, 0x00, 0xa8, 0xd1, 0x44, - 0x00, 0xab, 0xd0, 0x30, 0xc0, 0xc0, 0x0c, 0x1f, - 0xfa, 0x9d, 0xd9, 0x78, 0x79, 0x65, 0x39, 0x25, - 0x19, 0x5f, 0xc9, 0xa5, 0x19, 0x83, 0x20, 0x26, - 0x20, 0xe6, 0x20, 0xa6, 0x21, 0x66, 0xc1, 0x23, - 0xc0, 0x64, 0x10, 0x5f, 0x10, 0x9d, 0x20, 0x81, - 0x31, 0x01, 0x30, 0x44, 0xf6, 0x78, 0x21, 0x01, - 0x30, 0x84, 0x10, 0x83, 0xc4, 0x64, 0x34, 0x63, - 0xdc, 0x48, 0x4c, 0x70, 0x1c, 0x5f, 0x15, 0x63, - 0xfa, 0xad, 0x20, 0xb1, 0xf2, 0x8f, 0xc1, 0x24, - 0x11, 0x1f, 0xc0, 0x85, 0x30, 0xb1, 0xf2, 0x8f, - 0xc1, 0x11, 0xc0, 0x83, 0x0c, 0x9d, 0xfa, 0x8d, - 0xb0, 0xbc, 0xf2, 0x8f, 0xe2, 0xd6, 0xb1, 0x01, - 0xe6, 0x44, 0x70, 0x42, 0xb0, 0xb8, 0x60, 0x40, - 0xb0, 0x3c, 0xe2, 0x8f, 0xb1, 0x01, 0xe6, 0x44, - 0x70, 0x42, 0xb0, 0xb8, 0x60, 0x40, 0xb0, 0x38, - 0xe2, 0x96, 0x00, 0xab, 0xd0, 0x34, 0xc1, 0x23, - 0xb1, 0x0f, 0xf2, 0x96, 0xd1, 0x1e, 0x31, 0x23, - 0x00, 0xa8, 0xd0, 0x84, 0xf2, 0x96, 0xd1, 0x0f, - 0x00, 0xa8, 0xd0, 0x84, 0xc0, 0x03, 0xf2, 0x96, - 0xe2, 0xd6, 0xd8, 0x82, 0x48, 0x95, 0x18, 0x81, - 0xb1, 0x01, 0xe6, 0xc3, 0x20, 0xb1, 0x70, 0x42, - 0x30, 0xb1, 0x20, 0x22, 0x60, 0x40, 0x30, 0x22, - 0xb0, 0xbc, 0xb0, 0x3c, 0x30, 0xb1, 0x70, 0x42, - 0x20, 0xb1, 0x30, 0x22, 0x60, 0x40, 0x20, 0x22, - 0xb0, 0xbc, 0xb0, 0x3c, 0xe2, 0xb0, 0xc1, 0x11, - 0xc0, 0x85, 0x30, 0xb1, 0x20, 0xe2, 0xb1, 0x01, - 0xe6, 0xd6, 0x70, 0x42, 0xb0, 0xb8, 0x20, 0x22, - 0x60, 0x40, 0x30, 0x22, 0xb0, 0x3c, 0x70, 0x43, - 0xb0, 0xf8, 0x30, 0x22, 0x60, 0x40, 0x20, 0x22, - 0xb0, 0x3c, 0xe2, 0xc7, 0xd0, 0x08, 0x5c, 0x00, - 0x3c, 0x32, 0xd0, 0x04, 0x40, 0x30, 0x3c, 0x00, - 0x15, 0x63, 0xfa, 0xe1, 0x1e, 0xe0, 0xea, 0xe1, - 0xbc, 0x3c, 0x00, 0xab, 0xd0, 0xb0, 0x00, 0xa8, - 0xd0, 0x00, 0x00, 0x20, 0xd1, 0x1e, 0x70, 0x42, - 0xb0, 0xbc, 0x60, 0x40, 0xb0, 0x3c, 0xb1, 0x01, - 0xee, 0xe7, 0xd0, 0x30, 0x30, 0x30, 0xee, 0xed, - 0xd0, 0x04, 0x63, 0x00, 0x08, 0x20, 0xd0, 0x40, - 0x3f, 0x01, 0x02, 0xba, 0xd0, 0x3c, 0xe0, 0x46, - 0x01, 0x46, 0xd0, 0x08, 0x94, 0x89, 0xd0, 0x8c, - 0x44, 0x82, 0x14, 0x9e, 0x30, 0x12, 0xd0, 0x88, - 0x10, 0x80, 0x00, 0xe8, 0xd1, 0x80, 0x70, 0xc6, - 0x00, 0x06, 0xa0, 0xbd, 0xa0, 0xfc, 0x80, 0x3f, - 0xb1, 0xbe, 0x60, 0xc6, 0x00, 0x06, 0x80, 0xa9, - 0x80, 0x3f, 0x80, 0x2a, 0x80, 0x3f, 0x00, 0x21, - 0xd0, 0x3c, 0x00, 0x0a, 0xb1, 0x82, 0xd0, 0x6b, - 0x70, 0x46, 0x00, 0x06, 0x80, 0x07, 0x01, 0x20, - 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, - 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, - 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x29, - 0x80, 0x2b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, - 0xa0, 0x27, 0x90, 0x09, 0xd0, 0x41, 0x40, 0x01, - 0xd0, 0x44, 0x40, 0x70, 0x20, 0x01, 0xa0, 0x27, - 0x80, 0x3f, 0x00, 0xc6, 0x15, 0x63, 0xe9, 0xae, - 0x05, 0x5e, 0xe9, 0xbe, 0x00, 0xe0, 0xd0, 0x40, - 0x70, 0x81, 0x10, 0x9c, 0xb0, 0x96, 0xf9, 0xb7, - 0x00, 0x21, 0xd0, 0x40, 0xe1, 0xbb, 0xb0, 0x96, - 0xf9, 0xbe, 0x00, 0x22, 0xd0, 0x40, 0x27, 0xc1, - 0x27, 0x41, 0x27, 0x81, 0x90, 0x83, 0x00, 0x64, - 0xd0, 0x10, 0x60, 0x80, 0x01, 0x46, 0x82, 0x34, - 0x80, 0x3f, 0x00, 0x64, 0xd0, 0x14, 0x67, 0x40, - 0x80, 0x34, 0x80, 0x3f, 0x00, 0xc6, 0x90, 0xae, - 0x00, 0x64, 0xd0, 0x18, 0x60, 0x80, 0x90, 0xa6, - 0x00, 0x64, 0xd0, 0x1c, 0x60, 0x80, 0x15, 0x63, - 0xe9, 0xe3, 0x0c, 0x1f, 0xe9, 0xe3, 0x05, 0x50, - 0xf9, 0xe3, 0x15, 0xa3, 0xf9, 0xe3, 0x90, 0x4d, - 0x10, 0x60, 0xe5, 0xdb, 0x00, 0x06, 0x05, 0x0d, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x15, 0xa3, - 0xf9, 0xfb, 0x00, 0x21, 0xd0, 0x04, 0x70, 0x00, - 0x10, 0x21, 0xe9, 0xfb, 0xd0, 0x38, 0x70, 0x00, - 0x15, 0x63, 0xe9, 0xef, 0x10, 0x1f, 0x15, 0x21, - 0xe5, 0xe0, 0xd0, 0x5e, 0x30, 0x54, 0xe5, 0xe0, - 0xc0, 0x40, 0xb0, 0x7f, 0x30, 0x54, 0xe9, 0xfb, - 0x0c, 0x09, 0x05, 0x0d, 0xe1, 0xef, 0xc0, 0x5f, - 0x10, 0x58, 0x10, 0x48, 0x00, 0xee, 0xd0, 0x8c, - 0xd0, 0xc3, 0x70, 0x02, 0x30, 0x01, 0xea, 0x10, - 0xb0, 0xbc, 0xb0, 0xc1, 0xee, 0x01, 0x00, 0x26, - 0xd0, 0x20, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, - 0x15, 0xa3, 0xea, 0x0f, 0xb0, 0x88, 0x77, 0xc2, - 0x80, 0x07, 0x09, 0x49, 0xd4, 0x00, 0xd4, 0x40, - 0xd4, 0x80, 0xd4, 0xc0, 0x00, 0x4d, 0xa0, 0x6c, - 0xd3, 0x80, 0xd0, 0xa1, 0x00, 0x88, 0xd0, 0xa9, - 0x00, 0x4d, 0x00, 0x50, 0xfa, 0x1a, 0x0c, 0x49, - 0x00, 0x8d, 0xc0, 0x42, 0x10, 0x60, 0xea, 0x2a, - 0xb0, 0x5e, 0xb0, 0x43, 0xfe, 0x34, 0xd0, 0x61, - 0x23, 0x81, 0xe2, 0x1f, 0x0c, 0x09, 0x05, 0x0d, - 0x15, 0x20, 0xfe, 0x31, 0xd0, 0x5f, 0x30, 0x54, - 0xee, 0x10, 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, - 0xc6, 0xd4, 0xb6, 0xc1, 0xe6, 0x31, 0xd0, 0x5e, - 0x30, 0x5b, 0xfe, 0x31, 0xd7, 0x00, 0xb7, 0x01, - 0xd3, 0x81, 0x00, 0x27, 0xd0, 0x10, 0xd0, 0x81, - 0x60, 0x80, 0x15, 0x63, 0xfa, 0x54, 0x00, 0x22, - 0xdc, 0xd8, 0x03, 0xf7, 0xd2, 0x10, 0xf0, 0x4a, - 0x15, 0xa3, 0xfa, 0x51, 0x02, 0xf6, 0xde, 0x26, - 0x0c, 0x10, 0xf8, 0x46, 0x02, 0xfb, 0xda, 0x22, - 0xe0, 0x46, 0x02, 0xf1, 0xd8, 0x2b, 0xe0, 0x46, - 0x00, 0x22, 0xdc, 0xd8, 0x03, 0xf9, 0xd2, 0x10, - 0xf0, 0x4a, 0x03, 0x34, 0xdc, 0x20, 0x15, 0xa3, - 0xe8, 0x46, 0x02, 0xff, 0xde, 0x27, 0xe0, 0x46, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xe0, 0xe1, 0xec, 0xe2, 0x12, - 0xe2, 0x14, 0xe1, 0xc7, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x8d, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, - 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x5e, 0x30, 0x5b, 0xfc, 0x11, - 0xc0, 0x39, 0x30, 0x31, 0x10, 0x12, 0x10, 0x20, - 0xe9, 0x88, 0x03, 0x10, 0xe9, 0x93, 0x0f, 0x19, - 0xf9, 0x8f, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xde, - 0xf9, 0xba, 0x03, 0xdf, 0xe9, 0x99, 0xd3, 0x40, - 0xca, 0x50, 0xd1, 0x42, 0xe2, 0xea, 0xc0, 0x50, - 0x10, 0x54, 0xc0, 0x90, 0x10, 0x8c, 0x10, 0x92, - 0x10, 0xe0, 0xe5, 0xa8, 0xc0, 0x01, 0x10, 0x01, - 0x20, 0x40, 0xc0, 0x02, 0x10, 0x01, 0x20, 0x80, - 0x10, 0x60, 0xfd, 0xab, 0xb0, 0x7f, 0x10, 0xa0, - 0xfd, 0xae, 0xb0, 0xbf, 0x10, 0x5f, 0x10, 0x9f, - 0x00, 0xef, 0xd0, 0x3e, 0x20, 0x52, 0x20, 0x83, - 0x20, 0x93, 0x10, 0x4c, 0x10, 0x82, 0x40, 0x80, - 0x50, 0x42, 0x0f, 0xc5, 0xcb, 0xaa, 0xcb, 0xeb, - 0xca, 0x50, 0xd0, 0xc0, 0xb0, 0xc1, 0xf1, 0x9b, - 0xcb, 0x01, 0xd0, 0xc1, 0xf1, 0x9b, 0xcb, 0x41, - 0xba, 0x7f, 0xbb, 0x3f, 0xe2, 0xea, 0xcc, 0x5b, - 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, - 0x2c, 0x40, 0x1c, 0x48, 0xcc, 0xb1, 0x1c, 0x9f, - 0x06, 0xd0, 0xe9, 0xd5, 0x01, 0x69, 0xd0, 0x20, - 0x3c, 0x80, 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, - 0x2c, 0x40, 0x2c, 0x80, 0x01, 0x74, 0xd6, 0x00, - 0x2c, 0x80, 0xde, 0x84, 0xde, 0xc4, 0xe3, 0x1e, - 0xd3, 0xc2, 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xe5, - 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xec, 0x80, 0x07, - 0xd4, 0x00, 0xc4, 0x50, 0xd3, 0x08, 0xe2, 0x95, - 0xd0, 0x71, 0x20, 0x56, 0x00, 0x48, 0xd1, 0x8c, - 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xfa, 0x06, 0x5e, - 0xfa, 0x03, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, - 0xf9, 0xfa, 0xd3, 0xc4, 0x06, 0x5e, 0xfa, 0x03, - 0xd0, 0x43, 0x40, 0x4c, 0xea, 0x03, 0x08, 0x49, - 0x00, 0x8d, 0x10, 0x87, 0x53, 0x02, 0x01, 0x46, - 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xea, 0x0a, - 0x09, 0x49, 0x00, 0x0d, 0xd0, 0x9f, 0x40, 0x02, - 0xb0, 0x20, 0x03, 0x19, 0xea, 0x10, 0xb0, 0x20, - 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x80, - 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, - 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xd3, 0xe1, 0xdc, 0xe2, 0x00, - 0xe2, 0x02, 0xe1, 0xac, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x91, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, - 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x5e, 0x30, 0x5b, 0xfc, 0x11, - 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x8e, - 0xbc, 0x10, 0xd0, 0x30, 0xc0, 0x40, 0x30, 0x70, - 0xed, 0x8e, 0x03, 0x10, 0xe9, 0x97, 0x0f, 0x19, - 0xf9, 0x93, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xdf, - 0xe9, 0xa1, 0xd3, 0x40, 0xca, 0x50, 0xcb, 0x52, - 0x03, 0x1d, 0xf9, 0xa8, 0xca, 0x12, 0xca, 0x52, - 0xe1, 0xa5, 0x03, 0x1d, 0xf9, 0xa8, 0xca, 0x12, - 0xca, 0x53, 0xca, 0xae, 0xca, 0xef, 0xb1, 0x7e, - 0x03, 0x1e, 0xfa, 0xea, 0xb1, 0x7e, 0xe2, 0xea, - 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, - 0x17, 0x20, 0xf9, 0xd2, 0x00, 0xa8, 0xd0, 0x00, - 0xcc, 0x5b, 0x1c, 0x5f, 0x1c, 0x43, 0x20, 0x31, - 0x7c, 0x40, 0xb0, 0x3c, 0x7e, 0x80, 0xcc, 0xb1, - 0xce, 0xfa, 0x1c, 0x9f, 0x1e, 0xdf, 0x01, 0x69, - 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xc4, 0x3c, 0x80, - 0x0e, 0xd9, 0xe9, 0xc7, 0x3e, 0xc0, 0x3e, 0xf2, - 0x3e, 0xb1, 0xd0, 0x01, 0x40, 0x1b, 0x10, 0x05, - 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0xd0, 0x30, - 0x70, 0x00, 0x2c, 0x80, 0xe3, 0x1e, 0xd3, 0xc2, - 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xd8, 0xf2, 0x32, - 0xb3, 0x81, 0xe9, 0xdc, 0x80, 0x07, 0xe2, 0x95, - 0x0d, 0x09, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, - 0xe9, 0xe8, 0x06, 0x5e, 0xf9, 0xf1, 0x08, 0x89, - 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xe8, 0xd3, 0xc4, - 0x06, 0x5e, 0xf9, 0xf1, 0xd0, 0x43, 0x40, 0x4c, - 0xe9, 0xf1, 0x08, 0x49, 0x00, 0x8d, 0x10, 0x87, - 0x53, 0x02, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, - 0x03, 0x1c, 0xe9, 0xf8, 0x09, 0x49, 0x00, 0x0d, - 0xd0, 0x9f, 0x40, 0x02, 0xb0, 0x20, 0x03, 0x19, - 0xe9, 0xfe, 0xb0, 0x20, 0xa0, 0x2c, 0xe2, 0x5b, - 0x06, 0x5f, 0xfa, 0x80, 0xd4, 0x00, 0xc4, 0x50, - 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xc1, 0xe1, 0xca, 0xe1, 0xee, - 0xe1, 0xf0, 0xe1, 0xa8, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x8d, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, - 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x5e, 0x30, 0x5b, 0xfc, 0x11, - 0xc0, 0x39, 0x30, 0x31, 0x10, 0x12, 0x10, 0x20, - 0xe9, 0x88, 0x03, 0x10, 0xe9, 0x93, 0x0f, 0x19, - 0xf9, 0x8f, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xdf, - 0xe9, 0x9d, 0xd3, 0x40, 0xca, 0x50, 0xcb, 0x52, - 0x03, 0x1d, 0xf9, 0xa4, 0xca, 0x12, 0xca, 0x52, - 0xe1, 0xa1, 0x03, 0x1d, 0xf9, 0xa4, 0xca, 0x12, - 0xca, 0x53, 0xca, 0xae, 0xca, 0xef, 0xb1, 0x7e, - 0x03, 0x1e, 0xfa, 0xea, 0xb1, 0x7e, 0xe2, 0xea, - 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, - 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x48, 0xcc, 0xb1, - 0x1c, 0x9f, 0x06, 0xd0, 0xe9, 0xb6, 0x01, 0x69, - 0xd0, 0x20, 0x3c, 0x80, 0xc0, 0x1c, 0x10, 0x08, - 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0xd0, 0x30, - 0x70, 0x00, 0x2c, 0x80, 0xde, 0x84, 0xde, 0xc4, - 0xe3, 0x1e, 0xd3, 0xc2, 0xf2, 0xd3, 0x13, 0xa0, - 0xed, 0xc6, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xca, - 0x80, 0x07, 0xe2, 0x95, 0x0d, 0x09, 0xd1, 0x8c, - 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xd6, 0x06, 0x5e, - 0xf9, 0xdf, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, - 0xf9, 0xd6, 0xd3, 0xc4, 0x06, 0x5e, 0xf9, 0xdf, - 0xd0, 0x43, 0x40, 0x4c, 0xe9, 0xdf, 0x08, 0x49, - 0x00, 0x8d, 0x10, 0x87, 0x53, 0x02, 0x01, 0x46, - 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xe6, - 0x09, 0x49, 0x00, 0x0d, 0xd0, 0x9f, 0x40, 0x02, - 0xb0, 0x20, 0x03, 0x19, 0xe9, 0xec, 0xb0, 0x20, - 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x80, - 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, - 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xdb, 0xe1, 0xe9, 0xe2, 0x00, - 0xe2, 0x02, 0xe1, 0xc3, 0xe1, 0x65, 0x30, 0x5a, - 0xe5, 0x8d, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, - 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x4f, 0x30, 0x5b, 0xfc, 0x11, - 0xc0, 0x39, 0x30, 0x31, 0x10, 0x11, 0x10, 0x20, - 0xe9, 0x88, 0x03, 0x10, 0xe9, 0x93, 0x0f, 0x19, - 0xf9, 0x8f, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xd0, - 0xf9, 0x98, 0xca, 0x50, 0x03, 0xde, 0xf9, 0x9a, - 0xd1, 0x42, 0xe2, 0xea, 0xcb, 0xaa, 0xcb, 0xeb, - 0xc0, 0x50, 0x10, 0x54, 0xc0, 0x90, 0x10, 0x8c, - 0x10, 0x92, 0xd0, 0xc1, 0x05, 0x50, 0xe9, 0xa5, - 0xb0, 0xc2, 0x10, 0x60, 0xfd, 0xa8, 0xb0, 0x7f, - 0x10, 0xa0, 0xfd, 0xab, 0xb0, 0xbf, 0x10, 0x5f, - 0x10, 0x9f, 0x00, 0xef, 0xd0, 0x3e, 0x20, 0x52, - 0x20, 0x83, 0x20, 0x93, 0x10, 0x4c, 0x10, 0x82, - 0x40, 0x80, 0x50, 0x42, 0xd0, 0x81, 0x14, 0x1f, - 0x14, 0x01, 0x05, 0x50, 0xe9, 0xbd, 0x50, 0x42, - 0xe1, 0xbe, 0x54, 0x02, 0xca, 0x10, 0xca, 0x50, - 0xcb, 0x01, 0xcb, 0x41, 0xe2, 0xea, 0xcc, 0x5b, - 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, - 0x2c, 0x40, 0x1c, 0x49, 0xcc, 0xb1, 0x1c, 0x9f, - 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, 0x05, 0x50, - 0xf9, 0xd2, 0xb0, 0x3c, 0x2c, 0x40, 0x2c, 0x80, - 0x01, 0x74, 0xd6, 0x00, 0x2c, 0x80, 0x02, 0xe4, - 0xde, 0x80, 0xde, 0xc1, 0xe3, 0x1e, 0xd3, 0xc0, - 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xe0, 0xf2, 0x32, - 0xb3, 0x81, 0xe9, 0xe9, 0x80, 0x07, 0xd4, 0x02, - 0x44, 0x15, 0x14, 0x1f, 0xc4, 0x50, 0xd3, 0x08, - 0xe2, 0x95, 0xd0, 0x71, 0x20, 0x56, 0x00, 0x48, - 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xf7, - 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xf6, - 0xd3, 0xc4, 0xe1, 0xf7, 0xb3, 0xc1, 0x01, 0x46, - 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xfe, - 0x09, 0x49, 0x00, 0x0d, 0xa0, 0x2c, 0xe2, 0x5b, - 0x06, 0x5f, 0xfa, 0x7f, 0xd4, 0x02, 0x44, 0x15, - 0x14, 0x1f, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, - 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xc9, 0xe1, 0xd2, 0xe1, 0xe7, - 0xe1, 0xe9, 0xe1, 0xab, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x91, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, - 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, - 0xb6, 0xff, 0xd0, 0x4f, 0x30, 0x5b, 0xfc, 0x11, - 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x8e, - 0xbc, 0x10, 0xd0, 0x20, 0xc0, 0x40, 0x30, 0x70, - 0xed, 0x8e, 0x03, 0x10, 0xe9, 0x97, 0x0f, 0x19, - 0xf9, 0x93, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xd0, - 0xf9, 0xa0, 0xca, 0x50, 0xcb, 0x52, 0x03, 0x1d, - 0xf9, 0xa7, 0xca, 0x12, 0xca, 0x52, 0xe1, 0xa4, - 0x03, 0x1d, 0xf9, 0xa7, 0xca, 0x12, 0xca, 0x53, - 0xca, 0xae, 0xca, 0xef, 0xb1, 0x7e, 0x03, 0x1e, - 0xfa, 0xea, 0xb1, 0x7e, 0xe2, 0xea, 0x00, 0x24, - 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, - 0xf9, 0xc8, 0x00, 0x2a, 0xd0, 0x00, 0x20, 0x1b, - 0x20, 0x1b, 0x05, 0x50, 0xf9, 0xb8, 0xb0, 0x3f, - 0x10, 0x02, 0x7c, 0x40, 0xcc, 0xb1, 0x1c, 0x9f, - 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xc1, - 0x3c, 0x80, 0xde, 0xa0, 0x2c, 0x5f, 0x2c, 0x9f, - 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, 0xde, 0xc1, - 0xe3, 0x1e, 0xd3, 0xc0, 0xf2, 0xd3, 0x13, 0xa0, - 0xed, 0xce, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xd2, - 0x80, 0x07, 0xe2, 0x95, 0x0d, 0x09, 0xd1, 0x8c, - 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xde, 0x08, 0x89, - 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xdd, 0xd3, 0xc4, - 0xe1, 0xde, 0xb3, 0xc1, 0x01, 0x46, 0x90, 0x2c, - 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xe5, 0x09, 0x49, - 0x00, 0x0d, 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, - 0xfa, 0x7f, 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, - 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xa3, 0xc0, 0x00, 0xc0, 0x00, - 0xc0, 0x00, 0xe1, 0x8a, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x87, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x5e, - 0x30, 0x5b, 0xfd, 0xb4, 0xc0, 0x39, 0x30, 0x31, - 0x10, 0x12, 0x10, 0x20, 0xe9, 0x82, 0xd1, 0x42, - 0xd3, 0x40, 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, - 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, - 0x1c, 0x48, 0xcc, 0xb1, 0x1c, 0x9f, 0x06, 0xd0, - 0xe9, 0x98, 0x01, 0x69, 0xd0, 0x20, 0x3c, 0x80, - 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, 0x2c, 0x40, - 0x2c, 0x80, 0x01, 0x74, 0xd6, 0x00, 0x2c, 0x80, - 0xde, 0x84, 0xde, 0xc4, 0xe3, 0x1e, 0xf2, 0xd3, - 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xc8, - 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, - 0xe9, 0xbf, 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, - 0x10, 0x5c, 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xc8, - 0x0f, 0x17, 0xf9, 0xb4, 0x0f, 0x49, 0xf2, 0xd3, - 0x0f, 0x19, 0xf9, 0xb8, 0xdf, 0x00, 0x00, 0x06, - 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, 0xc0, 0x5b, - 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xc8, 0x0f, 0x17, - 0xf9, 0xc3, 0x02, 0xf1, 0xd8, 0x2b, 0xe0, 0x46, - 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xb5, 0xc0, 0x00, 0xc0, 0x00, - 0xc0, 0x00, 0xe1, 0x8e, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x8b, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x5e, - 0x30, 0x5b, 0xfd, 0xc6, 0xbc, 0x10, 0xd0, 0x10, - 0x0c, 0x1e, 0xf9, 0x88, 0xbc, 0x10, 0xd0, 0x30, - 0xc0, 0x40, 0x30, 0x70, 0xed, 0x88, 0xd1, 0x42, - 0xd3, 0x40, 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, - 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xb4, - 0x00, 0xa8, 0xd0, 0x00, 0xcc, 0x5b, 0x1c, 0x5f, - 0x1c, 0x43, 0x20, 0x31, 0x7c, 0x40, 0xb0, 0x3c, - 0x7e, 0x80, 0xcc, 0xb1, 0xce, 0xfa, 0x1c, 0x9f, - 0x1e, 0xdf, 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, - 0xe9, 0xa6, 0x3c, 0x80, 0x0e, 0xd9, 0xe9, 0xa9, - 0x3e, 0xc0, 0x3e, 0xf2, 0x3e, 0xb1, 0xd0, 0x01, - 0x40, 0x1b, 0x10, 0x05, 0x20, 0x1f, 0x2c, 0x40, - 0x2c, 0x80, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, - 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, - 0x30, 0x5a, 0xe5, 0xda, 0x00, 0x26, 0xd0, 0x00, - 0x70, 0x00, 0x10, 0x20, 0xe9, 0xd1, 0x00, 0xe0, - 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5c, 0x30, 0x5b, - 0xb0, 0x41, 0xed, 0xda, 0x0f, 0x17, 0xf9, 0xc6, - 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xca, - 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb3, 0xd8, 0x29, - 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, - 0xe5, 0xda, 0x0f, 0x17, 0xf9, 0xd5, 0x02, 0xf6, - 0xde, 0x26, 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, - 0xe2, 0x95, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xa2, 0xc0, 0x00, 0xc0, 0x00, - 0xc0, 0x00, 0xe1, 0x8a, 0xe1, 0x65, 0x30, 0x5a, - 0xe5, 0x87, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x4f, - 0x30, 0x5b, 0xfd, 0xb3, 0xc0, 0x39, 0x30, 0x31, - 0x10, 0x11, 0x10, 0x20, 0xe9, 0x82, 0xd1, 0x42, - 0xd3, 0x41, 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, - 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, - 0x1c, 0x49, 0xcc, 0xb1, 0x1c, 0x9f, 0xc0, 0x1c, - 0x10, 0x08, 0x20, 0x1f, 0x05, 0x50, 0xf9, 0x99, - 0xb0, 0x3c, 0x2c, 0x40, 0x2c, 0x80, 0x01, 0x74, - 0xd6, 0x00, 0x2c, 0x80, 0x02, 0xe4, 0xde, 0x80, - 0xde, 0xc1, 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, - 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xc7, 0x00, 0x26, - 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, 0xe9, 0xbe, - 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5b, - 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xc7, 0x0f, 0x17, - 0xf9, 0xb3, 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, - 0xf9, 0xb7, 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb3, - 0xd8, 0x29, 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, - 0xb0, 0x7e, 0xe5, 0xc7, 0x0f, 0x17, 0xf9, 0xc2, - 0x02, 0xff, 0xde, 0x27, 0xe0, 0x46, 0xd3, 0x08, - 0xd3, 0xc0, 0xe2, 0x95, 0x50, 0x00, 0x50, 0x00, - 0x03, 0x75, 0xd2, 0x73, 0x00, 0x24, 0xdc, 0xd8, - 0xf0, 0x4a, 0xe1, 0xac, 0xc0, 0x00, 0xc0, 0x00, - 0xc0, 0x00, 0xe1, 0x8e, 0xe1, 0x30, 0x30, 0x5a, - 0xe5, 0x8b, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x4f, - 0x30, 0x5b, 0xfd, 0xbd, 0xbc, 0x10, 0xd0, 0x10, - 0x0c, 0x1e, 0xf9, 0x88, 0xbc, 0x10, 0xd0, 0x20, - 0xc0, 0x40, 0x30, 0x70, 0xed, 0x88, 0xd1, 0x42, - 0xd3, 0x41, 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, - 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xab, - 0x00, 0x2a, 0xd0, 0x00, 0x20, 0x1b, 0x20, 0x1b, - 0x05, 0x50, 0xf9, 0x9b, 0xb0, 0x3f, 0x10, 0x02, - 0x7c, 0x40, 0xcc, 0xb1, 0x1c, 0x9f, 0x01, 0x69, - 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xa4, 0x3c, 0x80, - 0xde, 0xa0, 0x2c, 0x5f, 0x2c, 0x9f, 0xd0, 0x30, - 0x70, 0x00, 0x2c, 0x80, 0xde, 0xc1, 0xe3, 0x1e, - 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, - 0xe5, 0xd1, 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, - 0x10, 0x20, 0xe9, 0xc8, 0x00, 0xe0, 0xd0, 0x44, - 0x70, 0x41, 0x10, 0x5b, 0x30, 0x5b, 0xb0, 0x41, - 0xed, 0xd1, 0x0f, 0x17, 0xf9, 0xbd, 0x0f, 0x49, - 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xc1, 0xdf, 0x00, - 0x00, 0x06, 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, - 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xd1, - 0x0f, 0x17, 0xf9, 0xcc, 0x03, 0x34, 0xdc, 0x20, - 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, - 0xd0, 0x61, 0x23, 0x81, 0x0c, 0x49, 0xd0, 0x61, - 0x00, 0x8d, 0x10, 0xa0, 0xea, 0x3b, 0x30, 0x42, - 0xe6, 0x30, 0x23, 0x82, 0x0f, 0xc5, 0x0c, 0x09, - 0x05, 0x0d, 0x15, 0x20, 0xfe, 0x45, 0xd0, 0x5f, - 0x15, 0x63, 0xea, 0x43, 0xd0, 0x50, 0x30, 0x54, - 0xee, 0x4a, 0x0f, 0x17, 0xfa, 0x45, 0x03, 0xb3, - 0xd8, 0x29, 0xe0, 0x46, 0x80, 0x07, 0x09, 0x49, - 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, - 0x00, 0x4d, 0xa0, 0x6c, 0xd0, 0xa1, 0x00, 0x88, - 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, 0xfa, 0x53, - 0xf2, 0x32, 0xd3, 0x80, 0xe1, 0x76, 0xd1, 0xc2, - 0x41, 0xcf, 0x11, 0xdf, 0xd0, 0x41, 0x01, 0xc1, - 0x00, 0xef, 0xd0, 0xbe, 0x03, 0x10, 0xf9, 0x77, - 0x80, 0x07, 0x21, 0x96, 0x11, 0xa2, 0xe9, 0x78, - 0x03, 0x1d, 0xea, 0x73, 0xc0, 0xd7, 0xc2, 0x90, - 0xf2, 0xa4, 0xc4, 0x0a, 0x03, 0xd0, 0xea, 0x72, - 0xc2, 0x91, 0xf2, 0xa4, 0xc4, 0x4a, 0x03, 0x1e, - 0xea, 0x8d, 0xc0, 0xd8, 0xc2, 0x92, 0xf2, 0xa4, - 0xc4, 0x8a, 0x03, 0xd0, 0xea, 0x7d, 0xc2, 0x93, - 0xf2, 0xa4, 0xc4, 0xca, 0xe2, 0x8d, 0xd3, 0xc0, - 0xc0, 0xd7, 0xc2, 0x90, 0xf2, 0xa4, 0xc4, 0x0a, - 0x03, 0xd0, 0xea, 0x88, 0xc2, 0x91, 0xf2, 0xa4, - 0xc4, 0x4a, 0x08, 0x49, 0x00, 0x4d, 0x10, 0x61, - 0xf8, 0x11, 0x03, 0x1f, 0xea, 0x93, 0x0d, 0xc9, - 0x00, 0x4d, 0xd0, 0x1a, 0xe2, 0x98, 0x03, 0x10, - 0xfa, 0x97, 0xd0, 0x1d, 0xe2, 0x98, 0xd0, 0x18, - 0x0f, 0x16, 0xfa, 0x98, 0xd0, 0x4c, 0x40, 0x4c, - 0x10, 0x6c, 0xea, 0xa2, 0x03, 0xde, 0xfa, 0xa2, - 0x0f, 0x12, 0xfa, 0xa0, 0x00, 0x08, 0xe2, 0xd9, - 0xd2, 0x00, 0x13, 0xe1, 0xee, 0xa9, 0x08, 0x49, - 0x02, 0x0d, 0x00, 0xc8, 0xc2, 0xca, 0x12, 0x94, - 0xd0, 0x1f, 0x30, 0x07, 0x12, 0xc0, 0xc2, 0x43, - 0x12, 0x5a, 0x00, 0x0d, 0x03, 0xde, 0xea, 0xb6, - 0x0e, 0xc9, 0x04, 0x8d, 0x02, 0x48, 0x22, 0x80, - 0x12, 0x88, 0xd0, 0x0b, 0x30, 0x03, 0x12, 0x80, - 0xd0, 0x19, 0x20, 0x03, 0x12, 0x80, 0x00, 0x0d, - 0x22, 0xc0, 0x12, 0xc8, 0xd0, 0x0b, 0x30, 0x09, - 0x12, 0xc0, 0x12, 0xd8, 0xd0, 0x16, 0x20, 0x09, - 0x20, 0x07, 0x12, 0xc0, 0x42, 0xc2, 0x22, 0x8b, - 0x22, 0x88, 0x03, 0xde, 0xea, 0xd2, 0x0e, 0xc9, - 0xc4, 0x4a, 0x04, 0xcd, 0x0f, 0xc5, 0x01, 0x46, - 0x90, 0x4d, 0x00, 0xc6, 0x10, 0x60, 0xe6, 0xd3, - 0x0f, 0xc5, 0x01, 0x74, 0xd6, 0x00, 0xca, 0x9d, - 0xcb, 0x9e, 0xca, 0xea, 0xcb, 0xee, 0x2a, 0xc0, - 0x2b, 0xc0, 0xca, 0x10, 0xca, 0x51, 0xcb, 0x12, - 0xcb, 0x53, 0xd1, 0x40, 0xd3, 0x41, 0xb7, 0x3f, - 0xc0, 0x5c, 0xe1, 0x7b, 0xd0, 0xc0, 0xc1, 0x28, - 0xc2, 0x2a, 0xc2, 0xab, 0xf1, 0x7a, 0x0f, 0x17, - 0xfa, 0xef, 0xcc, 0xe8, 0xcd, 0x29, 0xcd, 0x6c, - 0xcd, 0xad, 0xc8, 0x08, 0xc8, 0x49, 0xca, 0x0a, - 0xca, 0x4b, 0xf3, 0x31, 0xd0, 0xc1, 0xc1, 0x34, - 0xc2, 0x2a, 0xc2, 0xab, 0xf1, 0x7a, 0x00, 0x28, - 0xd9, 0xc0, 0xc8, 0x88, 0xc8, 0xc9, 0xa9, 0xf8, - 0xca, 0x8a, 0xca, 0xcb, 0x11, 0x62, 0xe9, 0x79, - 0xd0, 0xc0, 0xc1, 0x35, 0xc2, 0x2e, 0xc2, 0xaf, - 0xf1, 0x7a, 0xc9, 0x08, 0xc9, 0x49, 0xa9, 0xf8, - 0xcb, 0x0a, 0xcb, 0x4b, 0xd0, 0xc1, 0xc1, 0x36, - 0xc2, 0x2e, 0xc2, 0xaf, 0xf1, 0x7a, 0xc0, 0x27, - 0xc9, 0x88, 0xc9, 0xc9, 0xa0, 0x38, 0xcb, 0x8a, - 0xcb, 0xcb, 0xe1, 0x79, 0x5f, 0x0d, 0x07, 0x7d, - 0xde, 0x07, 0x11, 0x5e, 0x30, 0x05, 0xcd, 0xc0, - 0x00, 0x28, 0xd0, 0x00, 0xa0, 0x38, 0x11, 0x61, - 0xf9, 0x75, 0x00, 0xe2, 0xd0, 0x00, 0x0f, 0x1d, - 0xeb, 0x29, 0x00, 0x2d, 0xdf, 0x4b, 0xf3, 0x3f, - 0xe1, 0x75, 0x04, 0xeb, 0xd0, 0x00, 0x11, 0x62, - 0xeb, 0x36, 0xb0, 0x20, 0x0f, 0x19, 0xfb, 0x36, - 0xac, 0xe0, 0x01, 0xa4, 0xde, 0x00, 0x5e, 0x0d, - 0x00, 0x2d, 0xdf, 0x7a, 0xdd, 0xc0, 0xd8, 0x80, - 0xd9, 0x00, 0xd9, 0x80, 0x5f, 0x00, 0x01, 0x46, - 0x00, 0x28, 0xd0, 0x01, 0x00, 0x06, 0xa0, 0x37, - 0x80, 0x3f, 0x00, 0xc6, 0x0f, 0xc5, 0xad, 0xda, - 0xc6, 0xb1, 0xd0, 0x01, 0x01, 0xa3, 0xde, 0x1d, - 0x40, 0x30, 0x3e, 0x00, 0x80, 0x3f, 0x0e, 0x0a, - 0x66, 0xda, 0xc8, 0x28, 0xc8, 0x69, 0xc8, 0xaa, - 0xc8, 0xeb, 0x0c, 0x1e, 0xfb, 0x68, 0x26, 0xba, - 0x07, 0x7d, 0xdc, 0x00, 0x1d, 0xcf, 0x1d, 0xd1, - 0x5d, 0xc0, 0x00, 0x2d, 0xdf, 0x64, 0x0f, 0x87, - 0xad, 0xda, 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, - 0xc9, 0x2c, 0xc9, 0x6d, 0xc9, 0xae, 0xc9, 0xef, - 0x0f, 0x2f, 0xd0, 0x37, 0x4f, 0x00, 0x0f, 0x1a, - 0xeb, 0xbe, 0x01, 0xa4, 0xde, 0x20, 0xd0, 0x01, - 0x40, 0x3c, 0x2e, 0x00, 0x00, 0x2d, 0xdf, 0x7a, - 0xac, 0xe0, 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe0, - 0xbf, 0x79, 0xbe, 0x3c, 0x0f, 0x1b, 0xeb, 0x9e, - 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe1, 0xbf, 0x79, - 0xbe, 0x34, 0x18, 0xa0, 0xeb, 0xb9, 0x0f, 0x87, - 0xad, 0x20, 0x80, 0x3f, 0x0e, 0x0a, 0x76, 0xe2, - 0xbf, 0x79, 0xbe, 0x3c, 0x0f, 0x87, 0x0e, 0x0a, - 0x76, 0xe3, 0x0f, 0x1b, 0xeb, 0xb3, 0xbf, 0x77, - 0xbe, 0x0c, 0x19, 0x20, 0xeb, 0xb9, 0x0f, 0x87, - 0xad, 0x60, 0x80, 0x3f, 0x0e, 0x0a, 0x76, 0xe4, - 0xbe, 0x3c, 0xbf, 0x75, 0x0f, 0x15, 0xf8, 0x1c, - 0x1f, 0x0a, 0x1f, 0x16, 0x0f, 0x87, 0x0e, 0x0a, - 0x76, 0xe5, 0xbf, 0x79, 0xbe, 0x34, 0x19, 0xa0, - 0xeb, 0xb9, 0x0f, 0x87, 0xad, 0xa0, 0x80, 0x3f, - 0x0e, 0x0a, 0x76, 0xe6, 0xbe, 0x3c, 0xbf, 0x79, - 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe7, 0x0f, 0x15, - 0xeb, 0xbe, 0x00, 0x2f, 0xdf, 0x72, 0x1d, 0xe0, - 0xf8, 0x1c, 0x00, 0x28, 0xd0, 0x01, 0xa0, 0x38, - 0x80, 0x3f, 0x0f, 0x87, 0xd0, 0x01, 0x4d, 0xc0, - 0x1f, 0x0f, 0x1f, 0x11, 0x00, 0x2f, 0xdf, 0x76, - 0xc6, 0xb2, 0x03, 0x7d, 0xde, 0x0e, 0x01, 0xa3, - 0xde, 0x2d, 0x5d, 0xc0, 0x0f, 0x87, 0x1e, 0xe1, - 0xeb, 0xdb, 0xad, 0xda, 0x80, 0x3f, 0x0e, 0x0a, - 0x66, 0xda, 0x0c, 0x1e, 0xfb, 0xe4, 0x26, 0xbb, - 0x03, 0xff, 0xdd, 0xff, 0x4d, 0xc0, 0x00, 0xa3, - 0xde, 0x2d, 0xbf, 0x56, 0x0f, 0x87, 0x07, 0x7d, - 0xde, 0x0e, 0x5d, 0xc0, 0x00, 0xa3, 0xde, 0x1d, - 0xad, 0xda, 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, - 0xdf, 0x5c, 0xd0, 0x0e, 0x4f, 0x00, 0x0f, 0x87, - 0xd0, 0x06, 0x40, 0x3c, 0xeb, 0xf0, 0xbf, 0x3e, - 0xb0, 0x04, 0xe7, 0xf2, 0xeb, 0xf6, 0xbf, 0x0c, - 0xbf, 0x3a, 0x0f, 0x87, 0x0f, 0x1d, 0xfb, 0x4b, - 0xbf, 0x38, 0x0f, 0x87, 0x0f, 0x1c, 0xfb, 0xcb, - 0xbf, 0x30, 0x0f, 0x87, 0x50, 0x00, 0x50, 0x00, - 0x0f, 0x17, 0xf9, 0x70, 0x90, 0x4d, 0x10, 0x60, - 0xe5, 0x72, 0x0f, 0x49, 0x90, 0x4d, 0x10, 0x60, - 0xe5, 0x76, 0x0f, 0x19, 0xf9, 0x79, 0x01, 0x46, - 0xd0, 0x11, 0xa0, 0x38, 0x80, 0x3f, 0x00, 0xc6, - 0xdf, 0x00, 0x00, 0x06, 0x08, 0x20, 0xd0, 0x00, - 0x10, 0x08, 0xa0, 0x0a, 0xa0, 0x1b, 0x0c, 0x20, - 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0x90, 0x4d, - 0x0f, 0xff, 0xd8, 0x1f, 0x40, 0x40, 0xa0, 0x4d, - 0x80, 0x0a, 0xd0, 0x00, 0x06, 0x50, 0xf9, 0x95, - 0xd0, 0x01, 0xa0, 0x09, 0x80, 0x1b, 0xa0, 0x27, - 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, - 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, - 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x40, - 0xa0, 0x69, 0x80, 0x2b, 0x80, 0x07, 0x08, 0x20, - 0xdf, 0x00, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, - 0x80, 0x3f, 0x01, 0xb0, 0xd0, 0x10, 0xa0, 0x37, - 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, - 0xd0, 0x10, 0xa0, 0x38, 0x15, 0x63, 0xe9, 0xba, - 0x05, 0x5e, 0xf9, 0xfa, 0xc0, 0xdf, 0x00, 0xe0, - 0xd1, 0x80, 0x70, 0x06, 0x10, 0x1c, 0xc1, 0x40, - 0x11, 0x48, 0xd3, 0x10, 0x00, 0x21, 0xd0, 0x80, - 0xb0, 0x16, 0xe9, 0xca, 0xd3, 0x20, 0x10, 0x81, - 0xb0, 0x16, 0xf9, 0xfa, 0x30, 0xc2, 0xd2, 0x5e, - 0xd0, 0x8f, 0x00, 0xee, 0xd0, 0x54, 0x70, 0x41, - 0x30, 0x43, 0xed, 0xd7, 0xd2, 0x6c, 0x72, 0x49, - 0xc0, 0x89, 0xb0, 0xbf, 0x10, 0x9f, 0x22, 0x42, - 0x04, 0x31, 0xd0, 0x10, 0xc0, 0x42, 0x30, 0x49, - 0xe5, 0xde, 0x10, 0x03, 0xc1, 0x0c, 0xc1, 0x83, - 0xb1, 0xbe, 0x01, 0x46, 0x00, 0x06, 0xa0, 0x3d, - 0xa0, 0x3c, 0x60, 0x06, 0x00, 0xc6, 0xb1, 0xbc, - 0xb1, 0x01, 0xed, 0xe1, 0xc1, 0x0c, 0x21, 0x85, - 0x01, 0x46, 0x00, 0x06, 0xa0, 0x3d, 0xa0, 0x3c, - 0x60, 0x06, 0x00, 0xc6, 0xb1, 0xbc, 0xb1, 0x01, - 0xed, 0xec, 0x02, 0xe4, 0xd0, 0x00, 0x20, 0xc0, - 0xb2, 0x41, 0xed, 0xd8, 0x15, 0xa3, 0xfa, 0x00, - 0xbc, 0x10, 0x0c, 0x1e, 0xfa, 0x00, 0xbc, 0x10, - 0xd0, 0x04, 0x70, 0x00, 0x10, 0x20, 0xfa, 0x00, - 0x00, 0x27, 0xd0, 0x10, 0xd0, 0x40, 0x60, 0x40, - 0x00, 0x26, 0xd0, 0x14, 0x60, 0x40, 0xb0, 0x28, - 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, - 0x00, 0x28, 0xd1, 0xb0, 0x70, 0x06, 0xd0, 0x81, - 0x60, 0x86, 0x10, 0x20, 0xe9, 0xab, 0xb0, 0x3f, - 0x60, 0x06, 0x00, 0xec, 0xd1, 0x84, 0x70, 0x46, - 0xb1, 0x84, 0x70, 0x86, 0x30, 0x42, 0xe9, 0xab, - 0x70, 0x42, 0xd0, 0x35, 0x30, 0x40, 0xf9, 0xab, - 0x00, 0x63, 0xd0, 0x3f, 0xb0, 0xbc, 0x40, 0x80, - 0x70, 0xc2, 0x10, 0xe3, 0xe5, 0xab, 0xb0, 0xbc, - 0x40, 0x80, 0x60, 0x86, 0x00, 0x28, 0xd0, 0x24, - 0x70, 0x40, 0x00, 0x22, 0xd0, 0x80, 0x50, 0x42, - 0x60, 0x40, 0x00, 0x64, 0xd0, 0x60, 0xd0, 0x90, - 0x60, 0x81, 0x00, 0xed, 0xd1, 0x88, 0x70, 0x46, - 0x10, 0xe4, 0xe9, 0xa8, 0x00, 0x21, 0xd0, 0xe8, - 0xd0, 0x00, 0x60, 0x03, 0xd0, 0x81, 0x40, 0x42, - 0x60, 0x46, 0x02, 0x3c, 0xda, 0x89, 0xe0, 0x46, - 0xd0, 0x82, 0x50, 0x42, 0x60, 0x46, 0x00, 0x23, - 0xd5, 0x3e, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, - 0x01, 0x46, 0xdf, 0x5c, 0x08, 0x20, 0xd1, 0x00, - 0xcf, 0x04, 0x11, 0x08, 0xa1, 0x0a, 0xa1, 0x1b, - 0x11, 0x1f, 0xa1, 0x27, 0xd2, 0x80, 0xb2, 0x81, - 0x90, 0x4d, 0xc0, 0x01, 0x10, 0x14, 0x00, 0x16, - 0xe9, 0x8d, 0x80, 0x33, 0x80, 0x3f, 0x92, 0x8b, - 0x00, 0x23, 0xd0, 0x3f, 0x42, 0x80, 0xe9, 0x8d, - 0x0f, 0xff, 0xdf, 0xff, 0x40, 0x01, 0xa0, 0x0d, - 0xe1, 0x94, 0xa1, 0x0a, 0x00, 0xea, 0xd0, 0x00, - 0xd0, 0x8e, 0x00, 0x06, 0x0f, 0x0b, 0x70, 0x80, - 0x80, 0x73, 0x80, 0x0a, 0xd0, 0x00, 0x06, 0x50, - 0xf9, 0x9a, 0xd0, 0x01, 0xd0, 0x44, 0x40, 0x70, - 0x20, 0x01, 0x15, 0x63, 0xf9, 0xa1, 0x80, 0x1b, - 0xe1, 0xa2, 0x80, 0x5b, 0xa0, 0x27, 0x01, 0x20, - 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, - 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, - 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x40, 0xa0, 0x69, - 0x80, 0x2b, 0x80, 0x07, 0x08, 0x20, 0xd0, 0x00, - 0xcf, 0x00, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, - 0x80, 0x3f, 0x01, 0xb2, 0xd2, 0x10, 0xa0, 0x37, - 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, - 0x00, 0x30, 0xd0, 0x10, 0xa0, 0x38, 0x80, 0x3f, - 0x00, 0xc6, 0x00, 0x28, 0xd1, 0x24, 0x70, 0x04, - 0xd0, 0x41, 0x50, 0x01, 0x60, 0x04, 0x00, 0x27, - 0xd0, 0x18, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, - 0x00, 0x26, 0xd0, 0x20, 0x70, 0x40, 0xb0, 0x7f, - 0x60, 0x40, 0x08, 0x20, 0xdf, 0x00, 0xd4, 0x00, - 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, 0xd3, 0x81, - 0x12, 0xa0, 0xed, 0xe3, 0xd0, 0x08, 0x0a, 0x09, - 0x00, 0x4d, 0xb0, 0x01, 0xed, 0xdf, 0x03, 0xbe, - 0xd6, 0x27, 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, - 0x02, 0x24, 0xd0, 0x00, 0xa0, 0x37, 0x00, 0x27, - 0xd3, 0xd0, 0x00, 0x26, 0xd0, 0x04, 0x73, 0xcf, - 0x13, 0xe1, 0xe9, 0x7b, 0xb0, 0x3c, 0xf2, 0x00, - 0x00, 0x26, 0xd0, 0x40, 0xd0, 0x00, 0x60, 0x01, - 0x00, 0x26, 0xd0, 0x14, 0xf2, 0x00, 0x00, 0x26, - 0xd0, 0x18, 0xf2, 0x00, 0x00, 0xee, 0xd0, 0x1c, - 0x71, 0x40, 0xd1, 0x1e, 0x15, 0x63, 0xe9, 0x8d, - 0x11, 0x1f, 0xc7, 0x1a, 0xb7, 0x01, 0xd3, 0x81, - 0xc4, 0xd4, 0xf2, 0x04, 0x00, 0x26, 0xd0, 0x18, - 0x70, 0x40, 0xb0, 0x54, 0xfd, 0x9b, 0x00, 0xed, - 0xd0, 0x24, 0xd0, 0x44, 0x60, 0x40, 0x13, 0xe1, - 0xf9, 0xbc, 0x15, 0xa3, 0xf9, 0xa1, 0x0c, 0x10, - 0xe9, 0xb9, 0x11, 0x61, 0xe5, 0xb3, 0xed, 0xb9, - 0x15, 0xa3, 0xf9, 0xab, 0x00, 0x26, 0xd0, 0x14, - 0x70, 0x40, 0x10, 0x62, 0xf5, 0xb3, 0x15, 0x22, - 0xe5, 0xb3, 0xc0, 0x44, 0x30, 0x54, 0xe5, 0xb3, - 0x34, 0xd4, 0xf5, 0xb3, 0xe1, 0xbf, 0x03, 0xb3, - 0xd8, 0x29, 0x00, 0x26, 0xd0, 0x40, 0x60, 0x01, - 0xe1, 0xdb, 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x80, 0x07, - 0x09, 0x49, 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, - 0xd4, 0xc0, 0x00, 0x4d, 0xa0, 0x6c, 0xd3, 0x80, - 0xd0, 0xa1, 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, - 0x00, 0x50, 0xf9, 0xc9, 0x0c, 0x49, 0xd0, 0x61, - 0x00, 0x8d, 0x10, 0xa0, 0xe9, 0x90, 0x30, 0x42, - 0xf5, 0xd8, 0xd0, 0x61, 0x23, 0x81, 0xe1, 0xce, - 0x23, 0x82, 0x13, 0xa1, 0xf9, 0x90, 0xd0, 0x42, - 0x15, 0xa1, 0xf9, 0xdf, 0xb0, 0x7f, 0x00, 0x26, - 0xd0, 0x14, 0x70, 0x00, 0x30, 0x01, 0xf5, 0xe8, - 0x16, 0xe0, 0xe5, 0xe8, 0xb6, 0xc1, 0xbc, 0x20, - 0xc0, 0x44, 0x30, 0x5b, 0xfd, 0xb9, 0xc0, 0x44, - 0x30, 0x54, 0xe5, 0xb9, 0x15, 0x63, 0xf9, 0xf8, - 0x15, 0xa3, 0xf9, 0xf5, 0x03, 0x3b, 0xda, 0x1c, - 0xe0, 0x46, 0x03, 0x38, 0xdc, 0x17, 0xe0, 0x46, - 0x15, 0xa3, 0xf9, 0xfd, 0x03, 0x72, 0xd0, 0x19, - 0xe0, 0x46, 0x03, 0x3f, 0xd2, 0x17, 0xe0, 0x46, - 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x0f, 0xc5, - 0xdf, 0x00, 0x0c, 0x09, 0x05, 0x0d, 0x08, 0x20, - 0xdf, 0x00, 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, - 0x00, 0xef, 0xd0, 0x14, 0x70, 0x40, 0x10, 0x60, - 0xe9, 0x45, 0xb0, 0x04, 0x70, 0x40, 0xb0, 0x41, - 0xed, 0x44, 0x00, 0xed, 0xd0, 0x24, 0xd0, 0x44, - 0x60, 0x40, 0x00, 0x64, 0xd0, 0x20, 0x70, 0x00, - 0x10, 0x30, 0xe9, 0x45, 0x00, 0x21, 0xd0, 0x28, - 0x60, 0x40, 0x00, 0x64, 0xd2, 0xc0, 0x70, 0x0b, - 0x00, 0x11, 0xe9, 0x6a, 0x08, 0x20, 0xd0, 0x4f, - 0x30, 0x40, 0xe9, 0x55, 0xb0, 0x4f, 0xf9, 0x6a, - 0x03, 0xef, 0xdf, 0xbf, 0xaf, 0xb8, 0xdf, 0x80, - 0x0f, 0x87, 0xd0, 0x18, 0x70, 0x00, 0x10, 0x20, - 0xed, 0x6c, 0xdf, 0x84, 0xd0, 0x40, 0x60, 0x7e, - 0x00, 0x27, 0xd0, 0x54, 0x70, 0x41, 0x10, 0x60, - 0x01, 0xa0, 0xd0, 0x40, 0xa0, 0x78, 0x80, 0x34, - 0x80, 0x3f, 0x01, 0x3c, 0xd2, 0x39, 0x00, 0x21, - 0xdf, 0x86, 0x0f, 0x87, 0xd0, 0x40, 0x60, 0x4b, - 0x03, 0xe5, 0xd0, 0x10, 0xe0, 0x36, 0x50, 0x00, - 0x00, 0x28, 0xd0, 0x24, 0x72, 0xc0, 0xd0, 0x40, - 0x60, 0x40, 0xd0, 0x0c, 0x52, 0xc0, 0xc0, 0x1c, - 0x30, 0x1d, 0xf5, 0x3c, 0x20, 0x1f, 0x30, 0x1e, - 0x90, 0x6d, 0x20, 0x01, 0x00, 0x22, 0xd0, 0x58, - 0x60, 0x01, 0x00, 0xe3, 0xd0, 0x48, 0x70, 0x41, - 0x30, 0x40, 0xf5, 0x47, 0xb2, 0xc8, 0x00, 0xe3, - 0xd0, 0x4c, 0x70, 0x41, 0x30, 0x40, 0xfd, 0x4d, - 0xb2, 0xc4, 0x00, 0x28, 0xd0, 0x20, 0x70, 0x00, - 0x42, 0xc0, 0xa2, 0xc5, 0x12, 0xe0, 0xe9, 0x55, - 0x80, 0x40, 0x80, 0x34, 0x80, 0x3f, 0xcf, 0x95, - 0x82, 0x34, 0x80, 0x3f, 0x03, 0xe7, 0xd0, 0x08, - 0x1f, 0xa3, 0xe9, 0x60, 0x03, 0xe9, 0xd0, 0x08, - 0x00, 0x27, 0xd0, 0x4c, 0x7f, 0x81, 0x00, 0x27, - 0xd0, 0x54, 0x70, 0x41, 0x10, 0x60, 0x03, 0xa0, - 0xd0, 0x40, 0xa0, 0x78, 0xe0, 0x3c, 0x50, 0x00, - 0xc0, 0x84, 0x10, 0x8c, 0x10, 0x92, 0xd0, 0x41, - 0x30, 0x4d, 0x40, 0x43, 0x10, 0x43, 0x20, 0x81, - 0xd1, 0x8f, 0x41, 0x82, 0x10, 0x9c, 0x20, 0x9b, - 0xc1, 0xc2, 0x10, 0x82, 0x20, 0x87, 0xc0, 0x42, - 0x10, 0x43, 0x20, 0x81, 0x10, 0x88, 0x22, 0x02, - 0x10, 0x97, 0x01, 0xd0, 0xe9, 0x48, 0xb0, 0x96, - 0x10, 0x88, 0x22, 0x82, 0xc0, 0x5c, 0x10, 0x48, - 0xc0, 0x84, 0x10, 0x91, 0x10, 0x86, 0x20, 0x42, - 0x41, 0x0d, 0x11, 0x02, 0x20, 0x44, 0x22, 0x01, - 0x22, 0x81, 0x02, 0xe4, 0xd2, 0x40, 0xc2, 0xca, - 0xb2, 0xe0, 0x01, 0xd0, 0xe9, 0x5e, 0xc2, 0xca, - 0x22, 0xc9, 0xb2, 0xa0, 0x22, 0x48, 0xd0, 0x78, - 0x03, 0x50, 0xf9, 0x69, 0xd0, 0x7c, 0x01, 0x9d, - 0xf9, 0x69, 0xc2, 0x48, 0xb2, 0x60, 0xc2, 0xca, - 0xb2, 0xf0, 0x11, 0x82, 0x41, 0x81, 0x22, 0x06, - 0x11, 0x9f, 0x41, 0x81, 0x22, 0x86, 0x0f, 0xc5, - 0xc0, 0x84, 0x10, 0x8c, 0x10, 0x92, 0xd1, 0x8f, - 0x41, 0x82, 0x10, 0x9c, 0xc1, 0xdb, 0x11, 0xc1, - 0x21, 0xc3, 0x20, 0x87, 0xc1, 0xc2, 0x10, 0x82, - 0x20, 0x87, 0xc0, 0x42, 0x10, 0x43, 0x20, 0x81, - 0x10, 0x88, 0x22, 0x02, 0x10, 0x97, 0x01, 0xd0, - 0xe9, 0x46, 0xb0, 0x96, 0x10, 0x88, 0x22, 0x82, - 0xc0, 0x5c, 0x10, 0x48, 0xc0, 0x84, 0x10, 0x91, - 0x10, 0x86, 0x20, 0x42, 0xd0, 0x81, 0x41, 0x02, - 0x11, 0x02, 0x20, 0x44, 0x22, 0x01, 0x22, 0x81, - 0x02, 0xe4, 0xd2, 0x40, 0xc2, 0xca, 0xb2, 0xe0, - 0x01, 0xd0, 0xe9, 0x5d, 0xc2, 0xca, 0x22, 0xc9, - 0xb2, 0xa0, 0x22, 0x48, 0x11, 0x9f, 0x11, 0x83, - 0x22, 0x06, 0x11, 0x9c, 0x11, 0x83, 0x22, 0x86, - 0x0f, 0xc5, 0xd0, 0x41, 0x40, 0x44, 0x20, 0x55, - 0x10, 0x62, 0xf9, 0x6f, 0x01, 0x74, 0xd6, 0x00, - 0xc2, 0x9f, 0xc2, 0x1f, 0x22, 0x80, 0xe1, 0x30, - 0x0f, 0x11, 0xf9, 0x51, 0x90, 0x38, 0x80, 0x3f, - 0x00, 0x1b, 0xf9, 0x51, 0x00, 0x27, 0xd0, 0x04, - 0x70, 0x40, 0x30, 0x71, 0xf9, 0x51, 0xb0, 0x3c, - 0x70, 0x40, 0x30, 0x5d, 0xf9, 0x51, 0xb0, 0x08, - 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x10, 0x63, - 0xe5, 0x5d, 0x02, 0x20, 0xd0, 0x01, 0xa0, 0x37, - 0x00, 0x26, 0xd0, 0x24, 0x70, 0x40, 0xb0, 0x7f, - 0x60, 0x40, 0xb0, 0x08, 0x70, 0x40, 0xb0, 0x41, - 0x60, 0x40, 0x00, 0x26, 0xd0, 0x30, 0x70, 0x40, - 0xb0, 0x7f, 0x60, 0x40, 0xb0, 0x30, 0xd0, 0x40, - 0x60, 0x40, 0xb0, 0x3c, 0x6c, 0x40, 0xb0, 0x3c, - 0x67, 0x40, 0x00, 0x33, 0xdf, 0x78, 0xe0, 0x36, - 0x00, 0x26, 0xd0, 0x1c, 0x70, 0x40, 0xb0, 0x7f, - 0x60, 0x40, 0xb0, 0x3c, 0x70, 0x40, 0xb0, 0x41, - 0x60, 0x40, 0x08, 0x20, 0xdf, 0x00, 0x80, 0x35, - 0xc0, 0x3c, 0x10, 0x08, 0xa0, 0x0a, 0xa0, 0x27, - 0xa0, 0x1b, 0xdf, 0x5c, 0x01, 0xa0, 0xd0, 0x00, - 0xa0, 0x38, 0x80, 0x3f, 0x80, 0x34, 0x80, 0x3f, - 0x03, 0xba, 0xda, 0x1e, 0xcf, 0x95, 0x82, 0x34, - 0x80, 0x3f, 0x03, 0xe7, 0xd0, 0x08, 0x1f, 0xa3, - 0xe9, 0x55, 0x1f, 0xa0, 0xe9, 0x55, 0x03, 0xe9, - 0xd0, 0x08, 0x00, 0x21, 0xdf, 0x86, 0xe0, 0x3c, - 0x89, 0x78, 0x89, 0x37, 0x00, 0xee, 0xd0, 0x14, - 0x76, 0x00, 0xd0, 0x30, 0x76, 0x40, 0x26, 0x58, - 0xd6, 0xd9, 0x00, 0xee, 0xd0, 0x20, 0x75, 0x40, - 0xd0, 0x1c, 0x71, 0x40, 0xd0, 0x20, 0x71, 0x00, - 0xd0, 0x24, 0x70, 0x80, 0xc4, 0x02, 0xd0, 0x28, - 0x70, 0xc0, 0x00, 0x21, 0xd0, 0x10, 0x72, 0x00, - 0x93, 0x90, 0xd4, 0x81, 0x13, 0x96, 0x43, 0x92, - 0x34, 0x8e, 0x00, 0x22, 0xd1, 0xa4, 0x71, 0x86, - 0xde, 0x40, 0x7e, 0x79, 0xd0, 0x18, 0x70, 0x40, - 0xb0, 0x41, 0xf5, 0x58, 0xd3, 0x42, 0x50, 0x4d, - 0x60, 0x40, 0x10, 0x60, 0xe5, 0x62, 0xd0, 0x54, - 0x70, 0x01, 0xb0, 0x3c, 0x60, 0x01, 0x04, 0x2d, - 0xd0, 0x08, 0xe0, 0x36, 0x00, 0x22, 0xd0, 0x60, - 0x71, 0xc1, 0xd0, 0x4f, 0x41, 0xc1, 0x03, 0xef, - 0xd0, 0x30, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, - 0x04, 0x21, 0xd0, 0x20, 0xd3, 0x44, 0x72, 0x8d, - 0x12, 0xa0, 0xe8, 0x36, 0xc0, 0x47, 0x10, 0x5d, - 0x30, 0x4e, 0xf8, 0x36, 0xb2, 0x3e, 0x60, 0x4d, - 0x00, 0xed, 0xd0, 0x48, 0x70, 0x01, 0xde, 0x45, - 0x50, 0x39, 0x00, 0x1b, 0xf9, 0x44, 0xb0, 0x01, - 0x00, 0x1c, 0xf9, 0x47, 0xb0, 0x04, 0x60, 0x01, - 0xd0, 0x40, 0x62, 0x81, 0xce, 0x4a, 0xd0, 0x43, - 0x41, 0xc1, 0xd0, 0x58, 0x61, 0xc1, 0x90, 0x43, - 0x00, 0xe0, 0xd0, 0x28, 0x70, 0x00, 0x10, 0x1f, - 0x20, 0x40, 0xb1, 0xc1, 0xf5, 0x54, 0x00, 0x21, - 0xd0, 0x08, 0x60, 0x40, 0x00, 0xe6, 0xd0, 0x40, - 0x70, 0x41, 0xd2, 0x94, 0x60, 0x4a, 0x04, 0x2b, - 0xd0, 0x10, 0x01, 0x90, 0xf8, 0x36, 0x04, 0x2d, - 0xd0, 0x08, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, - 0xc0, 0x47, 0x10, 0x5d, 0x30, 0x4e, 0xf9, 0x41, - 0x90, 0x43, 0x00, 0xe0, 0xd0, 0x28, 0x70, 0x00, - 0x20, 0x40, 0x00, 0x21, 0xd0, 0x08, 0x60, 0x40, - 0x00, 0x26, 0xd0, 0x74, 0x70, 0x01, 0xb0, 0x3f, - 0x60, 0x01, 0x00, 0xed, 0xd0, 0x48, 0x70, 0x41, - 0x00, 0x5e, 0xf9, 0x4b, 0x00, 0x21, 0xd0, 0x00, - 0x73, 0x80, 0xd4, 0x81, 0x34, 0x8e, 0x00, 0x34, - 0xd3, 0x48, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, - 0xd1, 0x88, 0xd1, 0xc8, 0x01, 0x1b, 0xe9, 0x39, - 0x11, 0x9f, 0x11, 0xdf, 0xd4, 0x80, 0xd3, 0x81, - 0xe1, 0x43, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x00, - 0x00, 0x10, 0xf9, 0x37, 0x0c, 0x1f, 0xf9, 0x36, - 0x13, 0xa1, 0xe9, 0x43, 0xbe, 0x7c, 0x00, 0x65, - 0xd2, 0x46, 0x12, 0x48, 0xc0, 0x39, 0x30, 0x18, - 0xe5, 0x4b, 0xd2, 0x70, 0x72, 0x49, 0x22, 0x79, - 0x00, 0x21, 0xd0, 0x00, 0x63, 0x80, 0x04, 0x24, - 0xd0, 0x00, 0x02, 0x10, 0xe9, 0x56, 0xd0, 0x41, - 0x51, 0x41, 0xe0, 0x36, 0x15, 0x61, 0xe8, 0x36, - 0xd5, 0x80, 0xd3, 0x00, 0xd3, 0x40, 0x04, 0x27, - 0xd0, 0x20, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, - 0x00, 0x21, 0xd0, 0x18, 0x73, 0x00, 0xb0, 0x04, - 0x73, 0x80, 0xd2, 0x80, 0xb0, 0x38, 0x72, 0xc0, - 0x31, 0x0d, 0xc0, 0x0e, 0x10, 0x0b, 0x10, 0x20, - 0xe9, 0x42, 0xf5, 0x3f, 0x22, 0x8d, 0x10, 0x01, - 0x13, 0x5f, 0xe1, 0x3b, 0x33, 0x8b, 0x15, 0x61, - 0xf9, 0x49, 0x00, 0x21, 0xd0, 0x64, 0x70, 0x41, - 0x33, 0x81, 0x03, 0xd0, 0xe9, 0x4c, 0x20, 0x0b, - 0x13, 0xdf, 0x12, 0xc1, 0x13, 0xe0, 0xf9, 0x49, - 0x10, 0x03, 0xc0, 0x50, 0x10, 0x4b, 0x13, 0x0b, - 0x23, 0x00, 0x13, 0x20, 0xe9, 0x5c, 0xf5, 0x59, - 0x22, 0x81, 0x13, 0x01, 0x10, 0x5f, 0xe1, 0x55, - 0x12, 0x99, 0x12, 0x87, 0x21, 0x0a, 0x00, 0xa0, - 0xd2, 0x80, 0xc3, 0x0a, 0x03, 0x90, 0xe9, 0x66, - 0x22, 0x82, 0x23, 0x03, 0x10, 0x81, 0x10, 0xc1, - 0x13, 0x9f, 0x13, 0xa0, 0xed, 0x62, 0xc0, 0x8a, - 0xc0, 0xcc, 0x04, 0x26, 0xd0, 0x00, 0xe0, 0x36, - 0x15, 0x61, 0xf9, 0x3d, 0x07, 0x32, 0xd0, 0x00, - 0x30, 0x03, 0xed, 0x3d, 0xc0, 0x03, 0x10, 0x1d, - 0x30, 0xc0, 0xc0, 0x02, 0x10, 0x1d, 0x30, 0x80, - 0xe1, 0x32, 0x10, 0x94, 0x10, 0xd4, 0x00, 0x21, - 0xd0, 0x20, 0x73, 0x00, 0xc5, 0x8c, 0xd3, 0x4e, - 0x01, 0x1b, 0xe9, 0x48, 0x13, 0x1f, 0xd3, 0x4f, - 0x43, 0x4c, 0x13, 0x1c, 0xc0, 0x0c, 0x10, 0x03, - 0x20, 0x0c, 0xc0, 0x40, 0x10, 0x42, 0x20, 0x40, - 0x10, 0x46, 0x20, 0x4d, 0x10, 0x42, 0x2e, 0x41, - 0x10, 0x5c, 0x10, 0x43, 0x00, 0x59, 0xe9, 0x5b, - 0x01, 0x69, 0xd0, 0x20, 0x30, 0x40, 0x22, 0x41, - 0x04, 0x27, 0xd0, 0x20, 0xe0, 0x36, 0x50, 0x00, - 0x2c, 0x14, 0xd0, 0x34, 0x63, 0x00, 0xd0, 0x38, - 0x72, 0xc0, 0xc0, 0x51, 0x10, 0x5c, 0x30, 0x4b, - 0x10, 0x44, 0xd4, 0xc0, 0xd5, 0x00, 0xc0, 0x18, - 0x30, 0x39, 0xed, 0x5f, 0xd4, 0xd0, 0xc5, 0x01, - 0xd0, 0x18, 0x70, 0x00, 0x0c, 0x1f, 0xe9, 0x48, - 0x10, 0x20, 0xfd, 0x48, 0xd4, 0xc0, 0xd5, 0x00, - 0x10, 0x22, 0xe5, 0x4e, 0xd4, 0xc0, 0xbc, 0x30, - 0xd5, 0x00, 0xb5, 0x10, 0xb0, 0x3f, 0xf9, 0x52, - 0x3c, 0x01, 0x3c, 0x01, 0x02, 0x1f, 0xe9, 0x5f, - 0x00, 0xa8, 0xd3, 0xc0, 0xd3, 0x9e, 0x00, 0xa9, - 0xd0, 0x38, 0x70, 0x4f, 0xb3, 0xfc, 0x60, 0x40, - 0xb0, 0x3c, 0xb3, 0x81, 0xed, 0x59, 0x00, 0x21, - 0xd0, 0x28, 0x70, 0x00, 0x10, 0x20, 0xf9, 0x69, - 0x02, 0x1f, 0xf9, 0x6a, 0x90, 0x10, 0x00, 0x1e, - 0xe9, 0x6a, 0xb1, 0x7c, 0x04, 0x29, 0xd0, 0x20, - 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x01, 0x5e, 0xf9, 0x35, 0x01, 0x50, 0xe9, 0x35, - 0xb1, 0x78, 0xd2, 0x00, 0x01, 0x5c, 0xf9, 0x5f, - 0xc0, 0x18, 0x30, 0x39, 0xed, 0x5f, 0x11, 0x9f, - 0xce, 0x58, 0xc2, 0x59, 0x00, 0xa9, 0xd2, 0x38, - 0x14, 0x82, 0x22, 0x12, 0xc0, 0x0c, 0x10, 0x1f, - 0x10, 0x03, 0x22, 0x00, 0x70, 0x48, 0x03, 0x10, - 0xe9, 0x4c, 0xb2, 0x38, 0xbe, 0x60, 0xb2, 0x60, - 0x2e, 0x41, 0x10, 0x5f, 0x00, 0x59, 0xe9, 0x53, - 0x01, 0x69, 0xd0, 0x3c, 0x30, 0x40, 0x22, 0x41, - 0x13, 0x41, 0x2e, 0x4d, 0x13, 0x5d, 0x13, 0x43, - 0x22, 0x4d, 0x14, 0xe0, 0xe9, 0x5f, 0x33, 0x0b, - 0x13, 0x04, 0x2c, 0x0c, 0x35, 0x0c, 0xc3, 0x46, - 0xc3, 0x87, 0x04, 0x61, 0xd0, 0x28, 0x15, 0x62, - 0xfc, 0x36, 0x04, 0x2f, 0xd0, 0x28, 0xe0, 0x36, - 0x00, 0x22, 0xd0, 0x74, 0x74, 0x01, 0xb0, 0x7c, - 0x74, 0x41, 0xb0, 0x7c, 0x00, 0x27, 0xd0, 0x20, - 0x30, 0x11, 0xf5, 0x3b, 0x24, 0x40, 0x71, 0x41, - 0xd1, 0x08, 0xc0, 0x10, 0x10, 0x1c, 0xb0, 0x16, - 0xf9, 0x4a, 0x00, 0x23, 0xd0, 0x30, 0x30, 0x11, - 0xf9, 0x4a, 0xb1, 0x70, 0x01, 0x50, 0xf9, 0x4a, - 0xb1, 0x20, 0x14, 0x41, 0xc0, 0x90, 0x00, 0x2b, - 0xd0, 0xd0, 0x01, 0x50, 0xe9, 0x50, 0xc0, 0xd0, - 0x00, 0x34, 0xdc, 0x00, 0x20, 0x11, 0x10, 0x1f, - 0xa0, 0x1c, 0x00, 0x21, 0xd0, 0x2c, 0x70, 0x00, - 0x10, 0x05, 0x51, 0x40, 0xd0, 0x1c, 0x61, 0x40, - 0xd0, 0x20, 0x61, 0x00, 0xd0, 0x24, 0x60, 0x80, - 0xd0, 0x28, 0x60, 0xc0, 0x04, 0x2d, 0xd0, 0x08, - 0x00, 0x22, 0xd0, 0x64, 0xb1, 0x81, 0x61, 0x81, - 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, - 0x90, 0x50, 0xd0, 0x3c, 0x10, 0x41, 0x60, 0x40, - 0x15, 0x62, 0xfd, 0x3d, 0xc0, 0x10, 0x10, 0x1e, - 0x10, 0x07, 0x21, 0x00, 0x10, 0x16, 0x34, 0x00, - 0xc0, 0x90, 0xd3, 0x40, 0x00, 0x24, 0xd3, 0xc0, - 0x04, 0x22, 0xd0, 0x20, 0x01, 0x9f, 0xe8, 0x36, - 0xd0, 0x54, 0x70, 0x41, 0x73, 0x41, 0x04, 0x2e, - 0xd0, 0x00, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, - 0x00, 0xef, 0xd3, 0x30, 0x73, 0x0c, 0xd0, 0x0c, - 0x70, 0x00, 0xc0, 0x40, 0x13, 0x24, 0xf5, 0x42, - 0x13, 0x22, 0xe9, 0x41, 0xe5, 0x43, 0xd3, 0x00, - 0x10, 0x22, 0xf9, 0x41, 0xd0, 0x01, 0xd0, 0x43, - 0xd3, 0x01, 0x21, 0x00, 0xd3, 0x40, 0x03, 0x10, - 0xf9, 0x47, 0xd3, 0x40, 0xe1, 0x61, 0x00, 0x23, - 0xd0, 0x00, 0x10, 0x61, 0xe9, 0x50, 0xb0, 0x33, - 0x10, 0x63, 0xe9, 0x50, 0x00, 0x22, 0xd0, 0x1a, - 0xc3, 0xc0, 0xd2, 0xc0, 0x00, 0x10, 0xe9, 0x55, - 0x22, 0xd0, 0x10, 0x1f, 0x14, 0x01, 0x10, 0x20, - 0xed, 0x52, 0x14, 0x18, 0x12, 0xd8, 0xc0, 0x8b, - 0x32, 0xd0, 0x12, 0xc3, 0x33, 0x4b, 0x13, 0x47, - 0x21, 0x0d, 0x04, 0x22, 0xd0, 0x20, 0xe0, 0x36, - 0x00, 0x24, 0xd0, 0x30, 0xd0, 0x40, 0x60, 0x40, - 0xd3, 0xc7, 0x43, 0xc4, 0x31, 0x0f, 0xd5, 0xd4, - 0x25, 0xcf, 0x15, 0xc4, 0x10, 0xdf, 0xc2, 0xc6, - 0xc3, 0x07, 0x11, 0x81, 0xb1, 0x3b, 0x15, 0x64, - 0xe9, 0x47, 0x10, 0xdf, 0x12, 0xc1, 0x11, 0x81, - 0x11, 0xc1, 0xb1, 0x3f, 0xb5, 0xf8, 0x90, 0x10, - 0x00, 0x16, 0xf9, 0x5e, 0xb5, 0xfc, 0xd0, 0x20, - 0x40, 0x39, 0x2e, 0x4b, 0x22, 0x4c, 0x12, 0x20, - 0xe9, 0x59, 0x20, 0x39, 0x00, 0x1b, 0xe9, 0x59, - 0x2c, 0x13, 0x35, 0x13, 0x0e, 0x5a, 0xf9, 0x59, - 0xb2, 0x38, 0x02, 0xe3, 0xd0, 0x00, 0x0e, 0x5a, - 0xe9, 0x5e, 0x2e, 0x40, 0x01, 0xee, 0xd2, 0x80, - 0x42, 0x84, 0xc0, 0x03, 0x30, 0x02, 0xf5, 0x6b, - 0x31, 0x0a, 0x12, 0x98, 0x20, 0x03, 0xf5, 0x69, - 0x12, 0x9f, 0x12, 0x87, 0x51, 0x0a, 0x00, 0x34, - 0xd4, 0xc8, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, - 0xd3, 0xc7, 0x43, 0xc4, 0x15, 0x61, 0xf9, 0x48, - 0x10, 0xc1, 0xd5, 0xe0, 0xd1, 0x80, 0xd1, 0xc0, - 0x31, 0x0f, 0x13, 0xe1, 0xe9, 0x3c, 0xd3, 0xc0, - 0x00, 0x24, 0xd0, 0x30, 0x63, 0xc0, 0x25, 0xcf, - 0x15, 0xc2, 0xd0, 0x03, 0x40, 0x16, 0x25, 0xc0, - 0x15, 0xc2, 0x15, 0x81, 0x35, 0x91, 0xe1, 0x5c, - 0x00, 0x24, 0xd0, 0x30, 0x63, 0xc0, 0x01, 0x50, - 0xe9, 0x54, 0x15, 0xa0, 0xf9, 0x55, 0x00, 0x24, - 0xd0, 0x34, 0x70, 0x00, 0x10, 0x20, 0xe9, 0x55, - 0xd3, 0xc0, 0x31, 0x0f, 0xd5, 0xfc, 0x25, 0xcf, - 0x15, 0xc3, 0x14, 0xa0, 0xe9, 0x5c, 0xb5, 0xfc, - 0x00, 0x34, 0xd4, 0xc8, 0xe0, 0x36, 0x50, 0x00, - 0xc4, 0x91, 0x34, 0x96, 0xed, 0x34, 0xd4, 0x80, - 0x14, 0x84, 0xb3, 0xc1, 0xe5, 0x41, 0xc0, 0x52, - 0x10, 0x5e, 0x34, 0x81, 0xb3, 0xc1, 0xe5, 0x41, - 0xc0, 0x52, 0x10, 0x5c, 0x24, 0x81, 0xb3, 0xc1, - 0xe5, 0x37, 0x02, 0x68, 0xd0, 0x00, 0xb4, 0xb0, - 0x14, 0x9b, 0x00, 0x23, 0xd0, 0x70, 0x30, 0x52, - 0xed, 0x4a, 0x24, 0x81, 0x20, 0x12, 0xa0, 0x1c, - 0x10, 0x8a, 0x50, 0x83, 0xa0, 0x96, 0xa1, 0x50, - 0xa1, 0x11, 0xc0, 0x52, 0xd4, 0x84, 0x10, 0x6c, - 0xed, 0x56, 0xd4, 0x81, 0xd1, 0x00, 0xb1, 0x13, - 0x00, 0x23, 0xd1, 0x40, 0xc2, 0xb9, 0x22, 0x86, - 0x12, 0x20, 0xf9, 0x66, 0x02, 0xe3, 0xd0, 0x40, - 0x02, 0x9a, 0xe9, 0x63, 0x22, 0x81, 0x02, 0x5a, - 0xe9, 0x66, 0x22, 0x41, 0x75, 0xd7, 0xc3, 0xd7, - 0xd0, 0xd7, 0x00, 0x21, 0xd0, 0xb6, 0x8b, 0x38, - 0x00, 0x33, 0xdc, 0xd0, 0xe0, 0x36, 0x50, 0x00, - 0xd0, 0x7c, 0x60, 0x01, 0xae, 0x52, 0xd0, 0x60, - 0x40, 0x79, 0x00, 0x13, 0xe8, 0xc9, 0xa2, 0x94, - 0x22, 0x86, 0x13, 0xe0, 0xe4, 0xd0, 0x13, 0xc1, - 0x15, 0x62, 0xfc, 0xd1, 0x13, 0xc1, 0xe0, 0xd1, - 0xc3, 0xd7, 0x03, 0xd9, 0xe8, 0xd4, 0x22, 0x8d, - 0x15, 0x62, 0xfc, 0xda, 0x03, 0xda, 0xe8, 0xda, - 0x22, 0x8d, 0x22, 0x8d, 0xce, 0x4a, 0x22, 0x86, - 0x00, 0x14, 0xe8, 0xe0, 0xa2, 0x53, 0x22, 0x47, - 0x03, 0xd1, 0xe8, 0xe8, 0x22, 0x4e, 0x15, 0x62, - 0xfc, 0xe8, 0x03, 0xd2, 0xe8, 0xe8, 0x22, 0x4e, - 0x12, 0x20, 0xe9, 0x09, 0x20, 0x79, 0x00, 0x5b, - 0xe8, 0xf4, 0x15, 0x20, 0xfc, 0xf1, 0x2c, 0x13, - 0x35, 0x13, 0x0e, 0x5b, 0xe8, 0xf4, 0xb2, 0x38, - 0x02, 0x9a, 0xe8, 0xfb, 0x70, 0x08, 0xd0, 0x7c, - 0x42, 0x81, 0x22, 0x98, 0x22, 0x80, 0x02, 0x5a, - 0xe9, 0x11, 0x70, 0x08, 0xd0, 0x78, 0x42, 0x41, - 0x22, 0x59, 0x10, 0x1f, 0x22, 0x40, 0x00, 0x19, - 0xe9, 0x11, 0x01, 0x69, 0xd0, 0x7c, 0x32, 0x41, - 0xe1, 0x11, 0x02, 0xe3, 0xd0, 0x40, 0x02, 0x9a, - 0xe9, 0x0e, 0x22, 0x81, 0x02, 0x5a, 0xe9, 0x11, - 0x22, 0x41, 0x0e, 0x5a, 0xe9, 0x15, 0xce, 0x4a, - 0x3e, 0x46, 0x0f, 0x87, 0xdd, 0x48, 0xe1, 0x19, - 0xdd, 0x40, 0xdc, 0xc8, 0xdd, 0x3c, 0x7d, 0x34, - 0x1d, 0x19, 0x3d, 0x35, 0x4d, 0x33, 0x4c, 0xec, - 0x3d, 0x33, 0xf9, 0x17, 0x0f, 0xc5, 0x50, 0x00, - 0xd0, 0x39, 0xd0, 0x35, 0xd0, 0x1d, 0xd0, 0x2d, - 0xd0, 0x3f, 0xd0, 0x2e, 0xd0, 0x3c, 0xd0, 0x37, - 0xd0, 0x38, 0xd0, 0x19, 0xd0, 0x33, 0xd0, 0x2e, - 0xd0, 0x3d, 0xd0, 0x3e, 0xd0, 0x27, 0xd0, 0x3e, - 0xd0, 0x3a, 0xd0, 0x2f, 0xd0, 0x32, 0x00, 0x00, - 0x47, 0x78, 0x46, 0xc0, 0xe1, 0x01, 0x00, 0x90, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe5, 0x9f, 0x20, 0x6c, - 0xe0, 0x21, 0x10, 0x01, 0xe1, 0x02, 0x00, 0x91, - 0xe3, 0x50, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x02, - 0xe3, 0xa0, 0x00, 0x00, 0xeb, 0x00, 0x38, 0x71, - 0xea, 0xff, 0xff, 0xf7, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xb5, 0x00, 0x4a, 0x12, - 0x68, 0x10, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x00, - 0xf7, 0xf0, 0xfb, 0x8c, 0xe7, 0xf7, 0xbd, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe5, 0x9f, 0x20, 0x2c, 0xe3, 0xa0, 0x10, 0x01, - 0xe1, 0x02, 0x00, 0x91, 0xe3, 0x50, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x02, 0xe3, 0xa0, 0x00, 0x00, - 0xeb, 0x00, 0x38, 0x60, 0xea, 0xff, 0xff, 0xf7, - 0xe8, 0xbd, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x10, - 0x48, 0x02, 0x40, 0x49, 0x60, 0x01, 0x47, 0x70, - 0x70, 0x00, 0x00, 0x34, 0x2e, 0x08, 0x20, 0x28, - 0x47, 0x78, 0x46, 0xc0, 0xe1, 0xa0, 0x09, 0x00, - 0xe1, 0xb0, 0x10, 0x01, 0x03, 0xc0, 0x01, 0x02, - 0x13, 0x80, 0x01, 0x02, 0xe3, 0xa0, 0x13, 0x3f, - 0xe3, 0xa0, 0x30, 0x0e, 0xe1, 0xb0, 0x10, 0x81, - 0x3a, 0x00, 0x00, 0x04, 0xe1, 0xb0, 0x00, 0x80, - 0x32, 0x21, 0x13, 0x03, 0xe2, 0x53, 0x30, 0x01, - 0x1a, 0xff, 0xff, 0xf9, 0xea, 0x00, 0x00, 0x03, - 0xe1, 0xb0, 0x00, 0x80, 0x22, 0x21, 0x13, 0x03, - 0xe2, 0x53, 0x30, 0x01, 0x1a, 0xff, 0xff, 0xf4, - 0xe1, 0xa0, 0x0d, 0x21, 0xe1, 0x2f, 0xff, 0x1e, - 0xe9, 0x2d, 0x41, 0xf0, 0xe2, 0x4d, 0xd0, 0x14, - 0xe3, 0xa0, 0xc0, 0x44, 0xe2, 0x8c, 0xc4, 0x66, - 0xe5, 0x9c, 0xc0, 0x00, 0xe5, 0x9f, 0x01, 0x94, - 0xe5, 0x80, 0xc0, 0x00, 0xe1, 0xa0, 0xc1, 0x4c, - 0xe2, 0x0c, 0xc0, 0x03, 0xe5, 0x9f, 0x01, 0x88, - 0xe5, 0xc0, 0xc0, 0x00, 0xe5, 0x9f, 0x01, 0x84, - 0xe5, 0x90, 0x00, 0x00, 0xe0, 0x80, 0x64, 0x0c, - 0xe1, 0xa0, 0x70, 0x06, 0xe8, 0xb7, 0x00, 0x01, - 0xe2, 0x00, 0x40, 0x1f, 0xe2, 0x8f, 0x2f, 0x69, - 0xe7, 0x92, 0x21, 0x04, 0xe3, 0x52, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x51, 0xe5, 0x9f, 0x32, 0x1c, - 0xe2, 0x83, 0x50, 0xbc, 0xe5, 0x9f, 0x12, 0x1c, - 0xe1, 0x55, 0x00, 0x01, 0x03, 0xa0, 0x50, 0x00, - 0xe5, 0x9f, 0x12, 0x04, 0xe1, 0x51, 0x00, 0x05, - 0x0a, 0x00, 0x00, 0x45, 0xe5, 0x9f, 0x81, 0xf4, - 0xe0, 0x88, 0x80, 0x03, 0xe5, 0x9f, 0x11, 0x5c, - 0xe1, 0xa0, 0x36, 0x20, 0xe2, 0x03, 0x30, 0x0f, - 0xe1, 0x81, 0x10, 0x03, 0xe5, 0x9f, 0x21, 0x48, - 0xe7, 0x92, 0x31, 0x04, 0xe1, 0xa0, 0x39, 0x83, - 0xe1, 0xa0, 0x35, 0xa3, 0xe1, 0x81, 0x10, 0x03, - 0xe1, 0xa0, 0x33, 0xa0, 0xe2, 0x03, 0x30, 0x01, - 0xe1, 0xa0, 0x3b, 0x03, 0xe1, 0x81, 0x10, 0x03, - 0xe1, 0xa0, 0x35, 0x20, 0xe2, 0x03, 0x30, 0x03, - 0xe1, 0xa0, 0x32, 0x03, 0xe1, 0x81, 0x10, 0x03, - 0xe1, 0xa0, 0x3a, 0xa0, 0xe2, 0x03, 0x30, 0x01, - 0xe1, 0xa0, 0x3b, 0x83, 0xe1, 0x81, 0x10, 0x03, - 0xe1, 0xa0, 0x34, 0xa0, 0xe2, 0x03, 0x30, 0x01, - 0xe1, 0xa0, 0x3a, 0x83, 0xe1, 0x81, 0x10, 0x03, - 0xe2, 0x00, 0x30, 0x60, 0xe1, 0xa0, 0x31, 0x03, - 0xe1, 0x81, 0x10, 0x03, 0xe8, 0xa8, 0x00, 0x02, - 0xe5, 0x9f, 0x00, 0xf0, 0xe3, 0xa0, 0x10, 0x30, - 0xe5, 0x80, 0x10, 0x00, 0xe5, 0x9f, 0x00, 0x9c, - 0xe5, 0xd0, 0x40, 0x00, 0xe2, 0x84, 0x10, 0x01, - 0xe5, 0xc0, 0x10, 0x00, 0xe2, 0x04, 0x40, 0x00, - 0xe5, 0x9f, 0x00, 0x98, 0xe5, 0x90, 0x10, 0x00, - 0xe3, 0x11, 0x00, 0x10, 0x1a, 0x00, 0x00, 0x1a, - 0xe5, 0x80, 0x10, 0x00, 0xe5, 0x8f, 0x51, 0x4c, - 0xe1, 0xa0, 0x22, 0x04, 0xe1, 0x82, 0x10, 0x0c, - 0xe5, 0x9f, 0x00, 0xac, 0xe0, 0x80, 0x02, 0x01, - 0xe5, 0x80, 0x70, 0x00, 0xe5, 0x80, 0x80, 0x04, - 0xe5, 0x9f, 0x10, 0x5c, 0xe5, 0x80, 0x10, 0x08, - 0xe5, 0x9f, 0x10, 0x58, 0xe5, 0x80, 0x10, 0x0c, - 0xe5, 0x9f, 0x00, 0x58, 0xe5, 0x90, 0x10, 0x00, - 0xe0, 0x84, 0x00, 0x01, 0xe3, 0xa0, 0x20, 0x01, - 0xe1, 0xa0, 0x00, 0x12, 0xe3, 0xa0, 0x10, 0x40, - 0xe2, 0x81, 0x14, 0x66, 0xe5, 0x81, 0x00, 0x00, - 0xe3, 0xa0, 0x10, 0x01, 0xe1, 0xa0, 0x0c, 0x11, - 0xe3, 0xa0, 0x10, 0xb8, 0xe2, 0x81, 0x14, 0x66, - 0xe5, 0x81, 0x00, 0x00, 0xe2, 0x8d, 0xd0, 0x14, - 0xe8, 0xbd, 0x81, 0xf0, 0xe5, 0x9f, 0x10, 0xf0, - 0xe2, 0x81, 0x10, 0x01, 0xe5, 0x8f, 0x10, 0xe8, - 0xea, 0xff, 0xff, 0xf4, 0xe5, 0x9f, 0xf0, 0x08, - 0xa0, 0x00, 0x05, 0xc4, 0x80, 0x00, 0x00, 0xb8, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x06, 0xf4, - 0xa0, 0x00, 0x04, 0x28, 0xa0, 0x00, 0x00, 0x00, - 0xa0, 0x00, 0x05, 0x50, 0x2c, 0x00, 0x1f, 0xe8, - 0x2c, 0x00, 0x1f, 0xea, 0x2c, 0x00, 0x1f, 0xf4, - 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x12, 0x2c, 0x00, 0x02, 0x00, - 0x64, 0x00, 0x04, 0x00, 0x64, 0x00, 0x00, 0x80, - 0x47, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0xc0, - 0x66, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xea, 0x00, 0x00, 0x07, 0xe1, 0xb0, 0xf0, 0x0e, - 0xe5, 0x9f, 0xf1, 0x00, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x08, 0xea, 0x00, 0x00, 0x02, - 0xe5, 0x9f, 0xf0, 0xec, 0xe2, 0x5e, 0xf0, 0x04, - 0x2c, 0x00, 0x00, 0xe8, 0xe1, 0x0f, 0x00, 0x00, - 0xe3, 0xc0, 0x00, 0x1f, 0xe3, 0x80, 0x00, 0x1b, - 0xe1, 0x29, 0xf0, 0x00, 0xe5, 0x9f, 0xd0, 0xd8, - 0xe5, 0x9f, 0x00, 0xd8, 0xe0, 0x8d, 0xd0, 0x00, - 0xe1, 0x0f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x1f, - 0xe3, 0x80, 0x00, 0x13, 0xe1, 0x29, 0xf0, 0x00, - 0xe5, 0x9f, 0xd0, 0xc4, 0xe5, 0x9f, 0x00, 0xc4, - 0xe0, 0x8d, 0xd0, 0x00, 0xe1, 0x0f, 0x00, 0x00, - 0xe3, 0xc0, 0x00, 0x1f, 0xe3, 0x80, 0x00, 0x12, - 0xe1, 0x29, 0xf0, 0x00, 0xe5, 0x9f, 0xd0, 0xb0, - 0xe5, 0x9f, 0x00, 0xb0, 0xe0, 0x8d, 0xd0, 0x00, - 0xe1, 0x0f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x9f, - 0xe3, 0x80, 0x00, 0x10, 0xe1, 0x29, 0xf0, 0x00, - 0xe5, 0x9f, 0xd0, 0x60, 0xeb, 0x00, 0x00, 0x08, - 0xe5, 0x9f, 0x00, 0x64, 0xe5, 0x9f, 0x10, 0x5c, - 0xeb, 0x00, 0x37, 0x7f, 0xe5, 0x9f, 0x00, 0x60, - 0xe5, 0x9f, 0x10, 0x58, 0xeb, 0x00, 0x37, 0x7f, - 0xe5, 0x9f, 0xe0, 0x58, 0xe3, 0x8e, 0xe0, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0xe5, 0x9f, 0x00, 0x8c, - 0xe5, 0x9f, 0x10, 0x8c, 0xe5, 0x9f, 0x30, 0x8c, - 0xe1, 0x50, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x03, - 0xe1, 0x51, 0x00, 0x03, 0x34, 0x90, 0x20, 0x04, - 0x34, 0x81, 0x20, 0x04, 0x3a, 0xff, 0xff, 0xfb, - 0xe5, 0x9f, 0x10, 0x74, 0xe3, 0xa0, 0x20, 0x00, - 0xe1, 0x53, 0x00, 0x01, 0x34, 0x83, 0x20, 0x04, - 0x3a, 0xff, 0xff, 0xfc, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x1b, 0xff, 0xf0, 0x2e, 0x1b, 0x7f, 0xf0, - 0x2e, 0x1b, 0x7f, 0xef, 0x2e, 0x08, 0xd7, 0x6c, - 0xcc, 0x1f, 0xff, 0xef, 0xcc, 0x1f, 0x7f, 0xf0, - 0x2e, 0x00, 0x1a, 0xf9, 0x2e, 0x02, 0x38, 0xbc, - 0x2e, 0x02, 0x39, 0xb4, 0x2e, 0x08, 0x33, 0xa4, - 0x00, 0x00, 0x08, 0x00, 0x2e, 0x08, 0x23, 0xa4, - 0x00, 0x00, 0x08, 0x00, 0x2e, 0x08, 0x2b, 0xa4, - 0x00, 0x00, 0x08, 0x00, 0x2e, 0x08, 0x97, 0x1c, - 0xe5, 0x9f, 0xf0, 0x04, 0xe5, 0x9f, 0xf0, 0x04, - 0xe5, 0x9f, 0xf0, 0x04, 0x2e, 0x08, 0x97, 0x1c, - 0x2e, 0x08, 0x97, 0x1d, 0x2e, 0x08, 0x97, 0x1e, - 0x2e, 0x03, 0xa9, 0xd0, 0x2e, 0x08, 0x00, 0x00, - 0x2e, 0x08, 0x3c, 0x20, 0x2e, 0x08, 0xd7, 0x68, - 0x1d, 0x77, 0x1e, 0x16, 0x03, 0x00, 0x03, 0x03, - 0x1d, 0x7f, 0x50, 0x50, 0x4f, 0x5d, 0x49, 0x5d, - 0x40, 0x4a, 0x44, 0x43, 0x01, 0x49, 0x4d, 0x56, - 0x48, 0x4b, 0x5d, 0x4f, 0x5d, 0x4d, 0x4f, 0x0a, - 0x78, 0x71, 0x73, 0x7f, 0x70, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x1b, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x08, 0x0f, 0x0f, 0x0d, - 0x13, 0x0d, 0x11, 0x0e, 0x07, 0x08, 0x09, 0x0d, - 0x0d, 0x15, 0x10, 0x05, 0x08, 0x08, 0x09, 0x0e, - 0x07, 0x08, 0x07, 0x07, 0x0d, 0x0d, 0x0d, 0x0d, - 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x07, 0x07, - 0x0e, 0x0e, 0x0e, 0x0d, 0x18, 0x0f, 0x10, 0x11, - 0x11, 0x10, 0x0f, 0x13, 0x11, 0x06, 0x0c, 0x10, - 0x0d, 0x13, 0x11, 0x13, 0x10, 0x13, 0x11, 0x10, - 0x0e, 0x11, 0x0f, 0x17, 0x0f, 0x10, 0x0f, 0x07, - 0x07, 0x07, 0x0c, 0x0d, 0x08, 0x0d, 0x0e, 0x0c, - 0x0e, 0x0d, 0x07, 0x0e, 0x0e, 0x05, 0x06, 0x0c, - 0x06, 0x14, 0x0e, 0x0d, 0x0e, 0x0e, 0x08, 0x0c, - 0x07, 0x0e, 0x0b, 0x11, 0x0b, 0x0c, 0x0c, 0x08, - 0x06, 0x08, 0x0e, 0x12, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x98, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x98, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x19, 0x80, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x19, 0x80, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x60, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x60, 0x00, 0x00, 0x0e, 0xe0, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x60, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xc0, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xc0, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xc0, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0xf0, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x03, 0xe0, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x30, 0x78, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x30, 0x1c, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x3e, 0x60, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x0c, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x70, 0x60, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x0c, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, - 0x60, 0xe0, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, - 0x30, 0x70, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x37, 0x1c, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, - 0x71, 0xe0, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0xf8, 0x00, 0x00, 0xe0, 0x0e, 0x00, 0x00, - 0x7f, 0xe0, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x31, 0xf0, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, - 0x1e, 0x30, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x06, 0x30, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, - 0x1e, 0x03, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x0e, 0x70, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x33, 0x07, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x0e, 0x70, 0x00, 0x00, 0x7a, 0xf0, 0x00, 0x00, - 0x61, 0x86, 0x00, 0x00, 0x1c, 0xe0, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x0c, 0x60, 0x00, 0x00, 0x62, 0x30, 0x00, 0x00, - 0x61, 0x8e, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x0c, 0x60, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, - 0x61, 0x8c, 0x00, 0x00, 0x18, 0x60, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x61, 0x9c, 0x00, 0x00, 0x0c, 0xe0, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, - 0x61, 0xb8, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xc0, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, - 0x33, 0x30, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xc0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, - 0x1e, 0x73, 0xc0, 0x00, 0x1f, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xc0, 0x00, 0x00, 0x02, 0xe0, 0x00, 0x00, - 0x00, 0x66, 0x60, 0x00, 0x39, 0xcc, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x39, 0xc0, 0x00, 0x00, 0x02, 0x70, 0x00, 0x00, - 0x00, 0xec, 0x30, 0x00, 0x70, 0xdc, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, - 0x00, 0xcc, 0x30, 0x00, 0x60, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x62, 0x30, 0x00, 0x00, - 0x01, 0xcc, 0x30, 0x00, 0x60, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x31, 0x80, 0x00, 0x00, 0x72, 0x70, 0x00, 0x00, - 0x01, 0x8c, 0x30, 0x00, 0x70, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x3a, 0xf0, 0x00, 0x00, - 0x03, 0x8c, 0x30, 0x00, 0x38, 0xfc, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x03, 0x06, 0x60, 0x00, 0x3f, 0xee, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x07, 0x03, 0xc0, 0x00, 0x0f, 0xcc, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xc0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x70, 0x60, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x1d, 0x80, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0xc0, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x19, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x0e, 0xc0, 0x00, 0x00, - 0x3f, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x01, 0xc0, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x01, 0xc0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x7f, 0xe0, 0x00, 0x00, 0x67, 0x80, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x1c, 0xc0, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x38, 0xc0, 0x00, 0x00, - 0x60, 0x70, 0x00, 0x00, 0x78, 0xe0, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x30, 0xe0, 0x00, 0x00, - 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x70, 0xc0, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x38, 0x60, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x30, 0x0f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x38, 0x06, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xc0, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x0f, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x0f, 0xfe, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x30, 0x1e, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3c, 0x07, 0x80, 0x00, 0x38, 0x06, 0x00, 0x00, - 0x0f, 0xfe, 0x00, 0x00, 0x07, 0xc1, 0xe0, 0x00, - 0x07, 0xc0, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x1e, 0x1e, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x30, 0x3c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3c, 0x07, 0x80, 0x00, 0x3c, 0x06, 0x00, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x70, 0x00, - 0x06, 0xc0, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, - 0x38, 0x07, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x30, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3c, 0x07, 0x80, 0x00, 0x3e, 0x06, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x1c, 0x79, 0xb8, 0x00, - 0x0e, 0xe0, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, - 0x30, 0x07, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x03, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x30, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x36, 0x0d, 0x80, 0x00, 0x36, 0x06, 0x00, 0x00, - 0x30, 0x01, 0x80, 0x00, 0x39, 0xff, 0x9c, 0x00, - 0x0c, 0x60, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x31, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x36, 0x0d, 0x80, 0x00, 0x37, 0x06, 0x00, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x31, 0xcf, 0x9c, 0x00, - 0x0c, 0x60, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x37, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x36, 0x0d, 0x80, 0x00, 0x33, 0x06, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x33, 0x87, 0x0c, 0x00, - 0x1c, 0x70, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x3f, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x37, 0x1d, 0x80, 0x00, 0x31, 0x86, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x77, 0x03, 0x0c, 0x00, - 0x18, 0x30, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x60, 0x3f, 0x80, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x19, 0x80, 0x00, 0x31, 0xc6, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x67, 0x03, 0x0c, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x3f, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x3d, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x19, 0x80, 0x00, 0x30, 0xc6, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x66, 0x03, 0x0c, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x01, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x19, 0x80, 0x00, 0x30, 0x66, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x66, 0x07, 0x1c, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x70, 0x03, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x01, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, - 0x30, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x31, 0xb1, 0x80, 0x00, 0x30, 0x76, 0x00, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x66, 0x06, 0x18, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x07, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x01, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, - 0x30, 0x38, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x31, 0xb1, 0x80, 0x00, 0x30, 0x36, 0x00, 0x00, - 0x30, 0x01, 0x80, 0x00, 0x67, 0x0e, 0x38, 0x00, - 0x60, 0x0c, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x38, 0x06, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, - 0x30, 0x3c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x31, 0xf1, 0x80, 0x00, 0x30, 0x3e, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x77, 0x1e, 0x70, 0x00, - 0x60, 0x0c, 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, - 0x1e, 0x1e, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1e, 0x0f, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, - 0x30, 0x1c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x31, 0xf1, 0x80, 0x00, 0x30, 0x1e, 0x00, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x73, 0xff, 0xe0, 0x00, - 0xe0, 0x0e, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x0f, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0f, 0xff, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, - 0x30, 0x0e, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x30, 0xe1, 0x80, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x0f, 0xfe, 0x00, 0x00, 0x39, 0xe7, 0xc0, 0x00, - 0xc0, 0x06, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x07, 0xf0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x03, 0xfc, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x30, 0x07, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x30, 0xe1, 0x80, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x3c, 0x00, 0x0e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x07, 0xf0, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0xc0, 0x06, 0x00, 0x00, - 0xc0, 0x38, 0x06, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0xe0, 0x07, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x0f, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0xe0, 0x0e, 0x00, 0x00, - 0xe0, 0x7c, 0x0e, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00, - 0xe0, 0x7c, 0x0e, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x30, 0x1c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x0e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x60, 0x6c, 0x0c, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x01, 0x80, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x60, 0xec, 0x0c, 0x00, 0x0e, 0xe0, 0x00, 0x00, - 0x1c, 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x30, 0x06, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x70, 0xee, 0x1c, 0x00, 0x06, 0xc0, 0x00, 0x00, - 0x0e, 0x70, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x30, 0x1e, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x70, 0xc6, 0x1c, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x06, 0x60, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, - 0x30, 0xc6, 0x18, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x07, 0xf8, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, - 0x31, 0xc7, 0x18, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x30, 0xe0, 0x00, 0x00, - 0x00, 0x7c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x31, 0x83, 0x18, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x00, 0xc0, 0x00, 0x30, 0x70, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, - 0x39, 0x83, 0x38, 0x00, 0x0e, 0xe0, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x30, 0x38, 0x00, 0x00, - 0x60, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x0e, 0xe0, 0x00, 0x00, - 0x1b, 0x83, 0xb0, 0x00, 0x0e, 0xe0, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x31, 0x80, 0x00, 0x30, 0x38, 0x00, 0x00, - 0x70, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x30, 0x06, 0x00, 0x00, 0x0e, 0xe0, 0x00, 0x00, - 0x1b, 0x01, 0xb0, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0x3f, 0x80, 0x00, 0x30, 0x1c, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x1f, 0x01, 0xf0, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1e, 0x1f, 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x1f, 0x01, 0xf0, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0f, 0xff, 0x80, 0x00, 0x30, 0x0e, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x0f, 0xf8, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x1e, 0x00, 0xe0, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x03, 0xff, 0xc0, 0x00, 0x30, 0x07, 0x00, 0x00, - 0x07, 0xf0, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x07, 0xf0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x0e, 0x00, 0xe0, 0x00, 0xe0, 0x0e, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x33, 0xc0, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x0f, 0xb0, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x33, 0xc0, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x37, 0xcf, 0x80, 0x00, 0x33, 0xc0, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3f, 0xdf, 0x80, 0x00, 0x37, 0xe0, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x31, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3c, 0xf9, 0xc0, 0x00, 0x3c, 0x70, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x70, 0x60, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x38, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x70, 0xc0, 0x00, 0x38, 0x30, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xe0, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x7f, 0xf0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0x60, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x60, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x33, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0xe0, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x70, 0x60, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x70, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x31, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x71, 0xe0, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x30, 0x00, 0x00, 0x33, 0xc0, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x60, 0xc0, 0x00, 0x30, 0x30, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x60, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x37, 0xc0, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x00, - 0xc0, 0x81, 0x80, 0x00, 0xe0, 0x60, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x00, - 0xc1, 0xc1, 0x80, 0x00, 0x60, 0xc0, 0x00, 0x00, - 0x60, 0xe0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, - 0xe1, 0xc1, 0x80, 0x00, 0x31, 0xc0, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, - 0x63, 0xe3, 0x00, 0x00, 0x3b, 0x80, 0x00, 0x00, - 0x30, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x3e, 0x08, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, - 0x63, 0x63, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x31, 0xc0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x7f, 0x98, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x7f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, - 0x67, 0x63, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x39, 0xc0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x67, 0xf8, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1f, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, - 0x37, 0x76, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x19, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x41, 0xf0, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x3b, 0x80, 0x00, 0x00, - 0x36, 0x36, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x19, 0x80, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, - 0x60, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x30, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, - 0x3e, 0x3e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1d, 0x80, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x60, 0x60, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x30, 0x70, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x1e, 0x3c, 0x00, 0x00, 0x3b, 0x80, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0xf0, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x37, 0xe0, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x1c, 0x1c, 0x00, 0x00, 0x60, 0xc0, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x02, 0x00, 0x00, 0x33, 0xc0, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x0f, 0x30, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x0c, 0x18, 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, - 0x0a, 0x12, 0x13, 0x10, 0x17, 0x10, 0x15, 0x10, - 0x08, 0x09, 0x0a, 0x10, 0x10, 0x1a, 0x13, 0x06, - 0x0a, 0x0a, 0x0b, 0x11, 0x08, 0x0a, 0x08, 0x08, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x08, 0x08, 0x11, 0x11, 0x11, 0x10, - 0x1d, 0x13, 0x13, 0x15, 0x15, 0x13, 0x12, 0x17, - 0x15, 0x07, 0x0f, 0x13, 0x10, 0x17, 0x15, 0x17, - 0x13, 0x17, 0x15, 0x13, 0x13, 0x15, 0x13, 0x1e, - 0x13, 0x13, 0x12, 0x08, 0x08, 0x08, 0x0e, 0x10, - 0x0a, 0x10, 0x10, 0x0f, 0x10, 0x10, 0x08, 0x10, - 0x10, 0x07, 0x07, 0x0e, 0x07, 0x19, 0x10, 0x10, - 0x10, 0x10, 0x0a, 0x0f, 0x08, 0x10, 0x0d, 0x15, - 0x0d, 0x0d, 0x0e, 0x0a, 0x08, 0x0a, 0x11, 0x16, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, - 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x07, 0xff, 0x80, 0x00, 0x0e, 0x38, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1c, 0x00, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x0f, 0xff, 0xe0, 0x00, 0x0e, 0x38, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00, - 0x03, 0xb8, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x1f, 0x83, 0xf0, 0x00, 0x0e, 0x38, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x07, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, - 0x78, 0x00, 0x3c, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x0f, 0x1e, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x78, 0x00, 0x3c, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, - 0x0e, 0x0e, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x70, 0x00, 0x1c, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, - 0x0e, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x70, 0x00, 0x1c, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x70, 0x00, 0x1c, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, - 0x1c, 0x07, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x70, 0x00, 0x1c, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0x38, 0x3e, 0x00, 0x00, - 0x1f, 0xff, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, - 0x70, 0x00, 0x1c, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0x38, 0x1f, 0x00, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x78, 0x00, 0x3c, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x3f, 0x9c, 0x00, 0x00, - 0x78, 0x00, 0x3c, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x3c, 0x00, 0x78, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x3c, 0x01, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x78, 0x03, 0xc0, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x1e, 0x00, 0xf8, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x3c, 0x01, 0xe0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x39, 0xc3, 0x80, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x70, 0x3c, 0x00, 0x00, - 0x1f, 0x83, 0xf0, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x1f, 0x07, 0xc0, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x39, 0xe7, 0x00, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x78, 0x7c, 0x00, 0x00, - 0x0f, 0xff, 0xe0, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x0f, 0xff, 0x80, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0xff, 0x00, 0x00, - 0xe0, 0x01, 0xe0, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x03, 0xff, 0xc0, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x07, 0xff, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x00, 0x00, - 0xe0, 0x00, 0xe0, 0x00, 0x1f, 0x8e, 0x00, 0x00, - 0x00, 0xfe, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x03, 0xfe, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, - 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0x80, 0x60, 0x00, - 0x03, 0xe0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x01, 0xc0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xc0, 0xe0, 0x00, - 0x07, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, - 0x3d, 0xb8, 0x00, 0x00, 0x38, 0xe0, 0xc0, 0x00, - 0x0f, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x76, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, - 0x79, 0xbc, 0x00, 0x00, 0x30, 0x61, 0xc0, 0x00, - 0x0e, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, - 0x71, 0x9c, 0x00, 0x00, 0x30, 0x61, 0x80, 0x00, - 0x0e, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0x71, 0x80, 0x00, 0x00, 0x30, 0x63, 0x80, 0x00, - 0x0e, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x73, 0x80, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0x79, 0x80, 0x00, 0x00, 0x30, 0x63, 0x00, 0x00, - 0x0f, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0x7d, 0x80, 0x00, 0x00, 0x30, 0x67, 0x00, 0x00, - 0x07, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x39, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, - 0x3f, 0x80, 0x00, 0x00, 0x38, 0xe6, 0x00, 0x00, - 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x19, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x1f, 0xce, 0x00, 0x00, - 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x0f, 0xf8, 0x00, 0x00, 0x0f, 0x8c, 0x7c, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x70, 0x00, 0x00, - 0x01, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0xfe, 0x00, - 0x3e, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0xf0, 0x00, 0x00, - 0x01, 0xbe, 0x00, 0x00, 0x00, 0x19, 0xc7, 0x00, - 0x38, 0x73, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0x01, 0x9e, 0x00, 0x00, 0x00, 0x39, 0x83, 0x00, - 0x78, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0x01, 0x8e, 0x00, 0x00, 0x00, 0x31, 0x83, 0x00, - 0x70, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0x71, 0x8e, 0x00, 0x00, 0x00, 0x71, 0x83, 0x00, - 0x70, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x71, 0x8e, 0x00, 0x00, 0x00, 0x61, 0x83, 0x00, - 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x79, 0x9e, 0x00, 0x00, 0x00, 0xe1, 0x83, 0x00, - 0x78, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x79, 0xe0, 0x00, 0x00, - 0x3d, 0xbc, 0x00, 0x00, 0x00, 0xc1, 0xc7, 0x00, - 0x3c, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x01, 0xc0, 0xfe, 0x00, - 0x1f, 0xfb, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x00, 0x00, 0x01, 0x80, 0x7c, 0x00, - 0x0f, 0xe1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xc0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x0f, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x03, 0xf0, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x0f, 0xf8, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x3c, 0x3c, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, - 0x7c, 0x7c, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, - 0x00, 0xf8, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x3c, 0x3c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, - 0x78, 0x3c, 0x00, 0x00, 0x70, 0x3c, 0x00, 0x00, - 0x01, 0xf8, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, - 0x78, 0x1e, 0x00, 0x00, 0x1e, 0xe0, 0x00, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x01, 0xf8, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x1c, 0xe0, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x03, 0xb8, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x3f, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0x07, 0x38, 0x00, 0x00, 0x7b, 0xe0, 0x00, 0x00, - 0x73, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x1c, 0x38, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x07, 0xfc, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x0f, 0x38, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, - 0x77, 0xf8, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x03, 0xfc, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, - 0x0e, 0x38, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, - 0x7f, 0xfc, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x0f, 0xe0, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x1c, 0x38, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, - 0x7c, 0x3e, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x3c, 0x3e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0x38, 0x38, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x78, 0x1e, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x3c, 0x3c, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7e, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x01, 0xe0, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x78, 0x38, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x78, 0x1e, 0x00, 0x00, 0x1f, 0xee, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x03, 0xfc, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x0f, 0xce, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xfc, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x1f, 0xf0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x3f, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x78, 0x1e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x7f, 0xfe, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x78, 0x0e, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x70, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x38, 0x1e, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x78, 0x1e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x3c, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x3c, 0x3c, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x7c, 0x3e, 0x00, 0x00, 0x78, 0x7c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x7f, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x0f, 0xf8, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x7f, 0xfc, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x07, 0xe0, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xf0, 0x00, 0x01, 0xf0, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x00, 0xff, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x01, 0xe0, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0x00, - 0x3c, 0x00, 0xe0, 0x00, 0x01, 0xff, 0x00, 0x00, - 0x00, 0x7f, 0xfe, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x07, 0xff, 0xc0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x03, 0xc0, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0x00, - 0x3c, 0x00, 0xe0, 0x00, 0x07, 0xff, 0x80, 0x00, - 0x01, 0xff, 0xff, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x3f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0x80, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xe0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7e, 0x00, 0xfc, 0x00, - 0x3e, 0x00, 0xe0, 0x00, 0x0f, 0xff, 0xe0, 0x00, - 0x03, 0xf8, 0x3f, 0x80, 0x03, 0xb8, 0x00, 0x00, - 0x38, 0x0f, 0x80, 0x00, 0x1f, 0x83, 0xe0, 0x00, - 0x38, 0x07, 0xc0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1f, 0x83, 0xf0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7e, 0x00, 0xfc, 0x00, - 0x3f, 0x00, 0xe0, 0x00, 0x1f, 0x83, 0xf0, 0x00, - 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xbc, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x3e, 0x01, 0xe0, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7f, 0x01, 0xfc, 0x00, - 0x3f, 0x00, 0xe0, 0x00, 0x3e, 0x00, 0xf8, 0x00, - 0x07, 0x80, 0x03, 0xe0, 0x07, 0x1c, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x3c, 0x00, 0xf0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x77, 0x01, 0xdc, 0x00, - 0x3b, 0x80, 0xe0, 0x00, 0x3c, 0x00, 0x78, 0x00, - 0x0f, 0x0f, 0x1d, 0xe0, 0x07, 0x1c, 0x00, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x78, 0x00, 0x70, 0x00, - 0x38, 0x00, 0xf0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x30, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x77, 0x01, 0xdc, 0x00, - 0x3b, 0xc0, 0xe0, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x1e, 0x3f, 0xbc, 0xf0, 0x0f, 0x1e, 0x00, 0x00, - 0x38, 0x0f, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x77, 0x83, 0xdc, 0x00, - 0x39, 0xc0, 0xe0, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x1e, 0x7f, 0xfc, 0xf0, 0x0e, 0x0e, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x70, 0x00, 0x3f, 0xff, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x39, 0xe0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x73, 0x83, 0x9c, 0x00, - 0x38, 0xe0, 0xe0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x1c, 0xf9, 0xf8, 0x70, 0x0e, 0x0e, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x70, 0x00, 0x3f, 0xff, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3b, 0xe0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x73, 0x83, 0x9c, 0x00, - 0x38, 0xe0, 0xe0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x3c, 0xf0, 0xf8, 0x70, 0x1e, 0x0f, 0x00, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x70, 0x00, 0x3f, 0xff, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x0f, 0xf8, 0x00, - 0x3f, 0xff, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x73, 0xc7, 0x9c, 0x00, - 0x38, 0x70, 0xe0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x39, 0xe0, 0x78, 0x70, 0x1c, 0x07, 0x00, 0x00, - 0x38, 0x07, 0x80, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x0f, 0xf8, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x71, 0xc7, 0x1c, 0x00, - 0x38, 0x38, 0xe0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x39, 0xe0, 0x78, 0x70, 0x1f, 0xff, 0x00, 0x00, - 0x38, 0x03, 0xc0, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x0f, 0xf8, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3e, 0x78, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x71, 0xc7, 0x1c, 0x00, - 0x38, 0x38, 0xe0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x39, 0xc0, 0x70, 0x70, 0x3f, 0xff, 0x80, 0x00, - 0x38, 0x01, 0xc0, 0x00, 0x78, 0x00, 0x60, 0x00, - 0x38, 0x00, 0xf0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x71, 0xef, 0x1c, 0x00, - 0x38, 0x1c, 0xe0, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x39, 0xc0, 0xf0, 0xf0, 0x3f, 0xff, 0x80, 0x00, - 0x38, 0x01, 0xc0, 0x00, 0x78, 0x00, 0xf0, 0x00, - 0x38, 0x00, 0xf0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0x38, 0x00, 0x00, 0x38, 0x3e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0xee, 0x1c, 0x00, - 0x38, 0x1e, 0xe0, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x39, 0xc0, 0xf0, 0xe0, 0x38, 0x03, 0x80, 0x00, - 0x38, 0x01, 0xc0, 0x00, 0x3c, 0x00, 0xf0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0x38, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0xee, 0x1c, 0x00, - 0x38, 0x0e, 0xe0, 0x00, 0x3c, 0x00, 0x78, 0x00, - 0x39, 0xe1, 0xe1, 0xc0, 0x78, 0x03, 0xc0, 0x00, - 0x38, 0x03, 0xc0, 0x00, 0x3e, 0x01, 0xe0, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x78, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x78, 0x78, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0xfe, 0x1c, 0x00, - 0x38, 0x07, 0xe0, 0x00, 0x1e, 0x00, 0xf8, 0x00, - 0x3d, 0xe3, 0xe3, 0xc0, 0x70, 0x01, 0xc0, 0x00, - 0x38, 0x07, 0xc0, 0x00, 0x1f, 0x87, 0xe0, 0x00, - 0x38, 0x07, 0xc0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1f, 0x81, 0xf8, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x7c, 0xf8, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x7c, 0x1c, 0x00, - 0x38, 0x07, 0xe0, 0x00, 0x1f, 0x83, 0xf0, 0x00, - 0x3c, 0xff, 0xe7, 0x80, 0x70, 0x01, 0xc0, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x80, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x3f, 0xf0, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x7c, 0x1c, 0x00, - 0x38, 0x03, 0xe0, 0x00, 0x0f, 0xff, 0xe0, 0x00, - 0x1e, 0xfe, 0xff, 0x00, 0xe0, 0x01, 0xe0, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x03, 0xff, 0xe0, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x3f, 0xf0, 0x00, 0x00, 0x38, 0x03, 0xc0, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x7c, 0x1c, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x03, 0xff, 0xc0, 0x00, - 0x1e, 0x3c, 0x7c, 0x78, 0xe0, 0x00, 0xe0, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, - 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0f, 0xc0, 0x00, 0x00, 0x38, 0x01, 0xe0, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x38, 0x1c, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x00, 0xfe, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xc0, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xf8, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x7f, 0xff, 0xc0, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x0f, 0x80, 0x38, - 0x78, 0x03, 0xc0, 0x00, 0xf0, 0x01, 0xe0, 0x00, - 0x7f, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x7f, 0xff, 0xc0, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0xf0, 0x01, 0xe0, 0x00, 0xf0, 0x0f, 0x80, 0x78, - 0x3c, 0x07, 0x80, 0x00, 0x70, 0x03, 0xc0, 0x00, - 0x7f, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xe0, 0x00, - 0x3f, 0xff, 0xc0, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x7f, 0xff, 0xc0, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0xf0, 0x1f, 0xc0, 0x78, - 0x1c, 0x07, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x7f, 0xff, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x07, 0xc0, 0x00, 0x1f, 0x83, 0xf0, 0x00, - 0x38, 0x03, 0xe0, 0x00, 0x3e, 0x0f, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x70, 0x01, 0xc0, 0x00, 0x70, 0x1f, 0xc0, 0x70, - 0x1e, 0x0f, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x03, 0xc0, 0x00, 0x1e, 0x00, 0xf8, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x78, 0x03, 0xc0, 0x00, 0x70, 0x1d, 0xc0, 0x70, - 0x0f, 0x1e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x01, 0xc0, 0x00, 0x3c, 0x00, 0x78, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x78, 0x1d, 0xc0, 0xf0, - 0x07, 0xbc, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x01, 0xc0, 0x00, 0x38, 0x00, 0x3c, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x38, 0x07, 0x80, 0x00, 0x78, 0x3d, 0xe0, 0xf0, - 0x07, 0xbc, 0x00, 0x00, 0x0f, 0x1e, 0x00, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1c, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x01, 0xc0, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x3c, 0x07, 0x80, 0x00, 0x38, 0x38, 0xe0, 0xe0, - 0x03, 0xf8, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x03, 0xc0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x38, 0x03, 0xe0, 0x00, 0x1f, 0x80, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x1c, 0x07, 0x00, 0x00, 0x38, 0x38, 0xe0, 0xe0, - 0x01, 0xf0, 0x00, 0x00, 0x07, 0xbc, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x07, 0xc0, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x3f, 0xff, 0xc0, 0x00, 0x0f, 0xf8, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x3c, 0x38, 0xe1, 0xe0, - 0x00, 0xe0, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x01, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x3f, 0xff, 0x80, 0x00, 0x03, 0xfe, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x1e, 0x0f, 0x00, 0x00, 0x3c, 0x78, 0xf1, 0xe0, - 0x01, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x70, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x3f, 0xff, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x0e, 0x0e, 0x00, 0x00, 0x1c, 0x70, 0x71, 0xc0, - 0x01, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, - 0x38, 0x3c, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x0f, 0x1e, 0x00, 0x00, 0x1c, 0x70, 0x71, 0xc0, - 0x03, 0xb8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x38, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x1e, 0x70, 0x73, 0xc0, - 0x07, 0xbc, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x08, 0x38, 0x00, - 0x38, 0x0f, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, - 0x07, 0x1c, 0x00, 0x00, 0x1e, 0xf0, 0x7b, 0xc0, - 0x0f, 0x1e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x0e, 0x78, 0x00, - 0x38, 0x07, 0x80, 0x00, 0x78, 0x03, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x3c, 0x01, 0xe0, 0x00, - 0x07, 0xbc, 0x00, 0x00, 0x0e, 0xe0, 0x3b, 0x80, - 0x0f, 0x1e, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1e, 0x0f, 0xf0, 0x00, - 0x38, 0x03, 0x80, 0x00, 0x78, 0x07, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x3c, 0x01, 0xe0, 0x00, - 0x03, 0xb8, 0x00, 0x00, 0x0e, 0xe0, 0x3b, 0x80, - 0x1e, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1f, 0x83, 0xe0, 0x00, - 0x38, 0x03, 0xc0, 0x00, 0x3e, 0x0f, 0x80, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x1f, 0x07, 0xc0, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x0f, 0xe0, 0x3f, 0x80, - 0x3c, 0x07, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, - 0x38, 0x01, 0xe0, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, - 0x03, 0xf8, 0x00, 0x00, 0x0f, 0xe0, 0x3f, 0x80, - 0x38, 0x03, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0xff, 0xff, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, - 0x38, 0x00, 0xe0, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, - 0x01, 0xf0, 0x00, 0x00, 0x07, 0xc0, 0x1f, 0x00, - 0x78, 0x03, 0xc0, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0xff, 0xff, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x01, 0xff, 0x3c, 0x00, - 0x38, 0x00, 0xf0, 0x00, 0x07, 0xf8, 0x00, 0x00, - 0x00, 0xe0, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, - 0x01, 0xf0, 0x00, 0x00, 0x07, 0xc0, 0x1f, 0x00, - 0xf0, 0x01, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, - 0xff, 0xff, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, - 0x39, 0xf0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x0f, 0x9c, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, - 0x39, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x39, 0xf0, 0xf8, 0x00, - 0x39, 0xf0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3f, 0xfb, 0xfc, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x3e, 0x3c, 0x00, 0x00, 0x3c, 0x78, 0x00, 0x00, - 0x3c, 0x7c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x3e, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x1e, 0x00, - 0x3e, 0x3c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x38, 0x3c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x3c, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x39, 0xe0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x0e, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x1e, 0x00, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x78, 0x3c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3b, 0xc0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0x9c, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3b, 0xc0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x70, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x39, 0xe0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x3c, 0x1e, 0x00, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x78, 0x3c, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x3c, 0x00, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x38, 0x3c, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x00, 0x00, - 0x3e, 0x3c, 0x00, 0x00, 0x3c, 0x78, 0x00, 0x00, - 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x8e, 0x00, 0x00, - 0x39, 0xf0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x0f, 0x9c, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x0e, 0x00, - 0x38, 0x1c, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7c, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x39, 0xf0, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, - 0x3b, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0xe0, 0x38, 0x00, 0x01, 0xe0, 0x70, 0x3c, 0x00, - 0xe0, 0x38, 0x00, 0x00, 0xe0, 0x38, 0x00, 0x00, - 0x7f, 0xf8, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, - 0xfe, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0xf0, 0x78, 0x00, 0x00, 0xe0, 0x70, 0x38, 0x00, - 0x70, 0x70, 0x00, 0x00, 0xf0, 0x78, 0x00, 0x00, - 0x7f, 0xf8, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3e, 0x3c, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0xe0, 0xf8, 0x38, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x1f, 0x01, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0xe0, 0xf8, 0x38, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, - 0x00, 0xf0, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x7f, 0xe3, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x38, 0x1e, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x70, 0xd8, 0x70, 0x00, - 0x1d, 0xc0, 0x00, 0x00, 0x78, 0xf0, 0x00, 0x00, - 0x01, 0xe0, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x7f, 0xff, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x71, 0xdc, 0x70, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x61, 0xff, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x71, 0x8c, 0x70, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x40, 0x7c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x31, 0x8c, 0x60, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x39, 0xe0, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x1d, 0xc0, 0x00, 0x00, 0x33, 0x8e, 0xe0, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x1d, 0xc0, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x38, 0x0e, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x1d, 0xc0, 0x00, 0x00, 0x3b, 0x06, 0xe0, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x1d, 0xc0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3c, 0x1e, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x0d, 0x80, 0x00, 0x00, 0x1b, 0x06, 0xe0, 0x00, - 0x1d, 0xc0, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3c, 0x1c, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x78, 0x1c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x1f, 0x07, 0xc0, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3e, 0x3c, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, - 0x0f, 0x80, 0x00, 0x00, 0x1e, 0x07, 0xc0, 0x00, - 0x38, 0xe0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x1e, 0x03, 0xc0, 0x00, - 0x70, 0x70, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, - 0x39, 0xe0, 0x00, 0x00, 0x07, 0x9c, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0e, 0x03, 0x80, 0x00, - 0xe0, 0x38, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x00, 0x27, 0x1a, 0x1a, 0x1a, 0x1a, - 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, - 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, - 0x1a, 0x1a, 0x1a, 0x1a, 0x0b, 0x15, 0x17, 0x13, - 0x1a, 0x13, 0x19, 0x13, 0x09, 0x0b, 0x0c, 0x13, - 0x13, 0x1e, 0x17, 0x06, 0x0b, 0x0b, 0x0d, 0x14, - 0x09, 0x0b, 0x09, 0x09, 0x13, 0x13, 0x13, 0x13, - 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x09, 0x09, - 0x14, 0x14, 0x14, 0x13, 0x23, 0x17, 0x17, 0x19, - 0x19, 0x17, 0x15, 0x1a, 0x19, 0x09, 0x11, 0x17, - 0x13, 0x1d, 0x19, 0x1a, 0x17, 0x1a, 0x19, 0x17, - 0x15, 0x19, 0x17, 0x22, 0x17, 0x15, 0x15, 0x09, - 0x09, 0x09, 0x11, 0x13, 0x0b, 0x12, 0x12, 0x11, - 0x12, 0x12, 0x0a, 0x12, 0x13, 0x07, 0x07, 0x11, - 0x07, 0x1b, 0x13, 0x12, 0x12, 0x12, 0x0b, 0x11, - 0x09, 0x13, 0x11, 0x17, 0x10, 0x11, 0x10, 0x0b, - 0x09, 0x0b, 0x14, 0x1a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, - 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, - 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, - 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, - 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, - 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, - 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, - 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, - 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe3, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe3, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xe3, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, - 0x03, 0xff, 0xf0, 0x00, 0x00, 0x07, 0x1c, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x07, - 0x1c, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, - 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, - 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, - 0x07, 0xe1, 0xf8, 0x00, 0x00, 0x07, 0x1c, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x07, - 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x07, 0x00, 0x00, 0x00, 0x00, 0xee, - 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, - 0x0f, 0x80, 0x7c, 0x00, 0x00, 0x07, 0x1c, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x07, - 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x01, 0xef, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x01, 0xc7, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x03, 0xc7, - 0x80, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x03, 0xf0, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x03, 0xc7, - 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0xfc, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x83, - 0x80, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x1f, 0xfe, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x07, 0x83, - 0xc0, 0x00, 0x00, 0x78, 0x1f, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x3e, 0x1f, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x07, 0x01, - 0xc0, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x3c, 0x0f, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x0f, 0x01, - 0xe0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x78, 0x07, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0x01, - 0xe0, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x0f, 0x80, 0x00, 0x00, 0x0f, 0xff, - 0xe0, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, - 0x00, 0x1c, 0x07, 0xc0, 0x00, 0x00, 0x1f, 0xff, - 0xf0, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x07, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, - 0x00, 0x1c, 0x01, 0xe0, 0x00, 0x00, 0x1f, 0xff, - 0xf0, 0x00, 0x00, 0x3f, 0xf7, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x0f, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0xf0, 0x00, 0x00, 0x1c, 0x00, - 0x70, 0x00, 0x00, 0x7c, 0x07, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x3c, 0x00, - 0x78, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x20, 0x70, 0x00, 0x00, 0x38, 0x00, - 0x38, 0x00, 0x00, 0x70, 0x0f, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x78, 0x07, 0x80, - 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x38, - 0x07, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xf0, 0xf0, 0x00, 0x00, 0x78, 0x00, - 0x3c, 0x00, 0x00, 0x70, 0x1f, 0x00, 0x00, 0x00, - 0x0f, 0x80, 0x7c, 0x00, 0x00, 0x3c, 0x0f, 0x00, - 0x00, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x3c, - 0x07, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0xf9, 0xf0, 0x00, 0x00, 0x78, 0x00, - 0x3c, 0x00, 0x00, 0x7c, 0x3f, 0x00, 0x00, 0x00, - 0x07, 0xe1, 0xf8, 0x00, 0x00, 0x3e, 0x1f, 0x00, - 0x00, 0x00, 0x0f, 0xc1, 0xf8, 0x00, 0x00, 0x3e, - 0x1f, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x7f, 0xe0, 0x00, 0x00, 0x70, 0x00, - 0x1c, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, - 0x03, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xfe, 0x00, - 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x1f, - 0xff, 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x3f, 0xc0, 0x00, 0x00, 0xf0, 0x00, - 0x1e, 0x00, 0x00, 0x3f, 0xf7, 0x80, 0x00, 0x00, - 0x01, 0xff, 0xe0, 0x00, 0x00, 0x0f, 0xfc, 0x00, - 0x00, 0x00, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x1f, - 0xfb, 0x80, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, - 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, - 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, - 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, - 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x1f, 0x80, 0x00, 0x00, 0xe0, 0x00, - 0x0e, 0x00, 0x00, 0x0f, 0xe3, 0x80, 0x00, 0x00, - 0x00, 0x7f, 0x80, 0x00, 0x00, 0x03, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x07, - 0xe3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x01, 0xc3, 0x80, 0x00, 0x00, - 0x07, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x0e, - 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x01, 0xc7, 0x80, 0x00, 0x00, - 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x1e, - 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, - 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x70, 0x1c, - 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x03, 0xc7, 0x00, 0x00, 0x00, - 0x3e, 0xde, 0x00, 0x00, 0x00, 0x3c, 0x78, 0x3c, - 0x00, 0x00, 0x07, 0x8f, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x76, 0xe0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, - 0x3c, 0xcf, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, - 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x03, 0x87, 0x00, 0x00, 0x00, - 0x38, 0xc7, 0x00, 0x00, 0x00, 0x38, 0x38, 0x78, - 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x03, 0x8f, 0x00, 0x00, 0x00, - 0x38, 0xc0, 0x00, 0x00, 0x00, 0x38, 0x38, 0x70, - 0x00, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, - 0x38, 0xc0, 0x00, 0x00, 0x00, 0x38, 0x38, 0xf0, - 0x00, 0x00, 0x07, 0x8f, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, - 0x3c, 0xc0, 0x00, 0x00, 0x00, 0x38, 0x38, 0xe0, - 0x00, 0x00, 0x03, 0x9e, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x39, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, - 0x1e, 0xc0, 0x00, 0x00, 0x00, 0x3c, 0x79, 0xe0, - 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x0e, 0x00, 0x00, 0x00, - 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x71, 0xc0, - 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x1e, 0x00, 0x00, 0x00, - 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x1f, 0xe3, 0xc0, - 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x1e, 0x00, 0x00, 0x00, - 0x03, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xc3, 0x8f, - 0x80, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x07, 0xbf, - 0xc0, 0x00, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x07, 0x38, - 0xe0, 0x00, 0x1e, 0x3c, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x78, - 0xf0, 0x00, 0x3c, 0x1e, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0xc3, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x70, - 0x70, 0x00, 0x38, 0x1e, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0xc3, 0x80, 0x00, 0x00, 0x00, 0x1e, 0x70, - 0x70, 0x00, 0x38, 0x0f, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x00, - 0x70, 0xc3, 0x80, 0x00, 0x00, 0x00, 0x1c, 0x70, - 0x70, 0x00, 0x38, 0x07, 0xe0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, - 0x78, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x3c, 0x70, - 0x70, 0x00, 0x3c, 0x03, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x00, - 0x78, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x38, 0x70, - 0x70, 0x00, 0x3c, 0x07, 0xe0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x78, 0x00, 0x00, 0x00, - 0x3e, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x70, 0x78, - 0xf0, 0x00, 0x1f, 0x1f, 0xf0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3c, 0x78, 0x00, 0x00, 0x00, - 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x70, 0x38, - 0xe0, 0x00, 0x0f, 0xff, 0x7c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3c, 0x70, 0x00, 0x00, 0x00, - 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, - 0xc0, 0x00, 0x07, 0xfe, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, 0x00, - 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, - 0x80, 0x00, 0x03, 0xf8, 0x18, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xe0, - 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x03, 0xfc, - 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, - 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x7f, - 0xff, 0xc0, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0f, 0xfe, - 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, - 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x7f, - 0xff, 0xc0, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, - 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, 0x00, 0x7f, - 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xff, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, - 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0x0f, - 0x80, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, - 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0x0f, 0x80, 0x00, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, - 0x00, 0x3e, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x78, 0x03, - 0xc0, 0x00, 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x7e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x03, 0xc0, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x3c, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x07, 0x80, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x03, - 0xc0, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, - 0x00, 0x7e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x01, 0xc0, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x78, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x03, 0x80, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x1f, 0x70, 0x00, 0x00, 0x00, 0x70, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x00, 0xfe, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x03, 0x80, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x1e, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x01, 0xee, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x03, 0xce, 0x00, 0x00, 0x00, 0x3b, 0xf8, 0x00, - 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, - 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xc0, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, - 0x03, 0xce, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, - 0x00, 0x00, 0x71, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, - 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, - 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, - 0x07, 0x8e, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, - 0x00, 0x00, 0x77, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x00, 0x78, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, - 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x80, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, - 0x0f, 0x0e, 0x00, 0x00, 0x00, 0x7c, 0x0f, 0x80, - 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, - 0x00, 0x78, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 0x00, - 0x1e, 0x0e, 0x00, 0x00, 0x00, 0x78, 0x03, 0x80, - 0x00, 0x00, 0x7e, 0x0f, 0x80, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x00, 0x3e, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, - 0x7c, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x1e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, - 0x00, 0x00, 0x7c, 0x03, 0xc0, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x80, 0x00, - 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x3c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, - 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, 0x00, 0x01, - 0xe0, 0x00, 0x00, 0x00, 0x78, 0x03, 0x80, 0x00, - 0x00, 0x0f, 0xfd, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x78, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, - 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x07, 0xf1, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xf8, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, - 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x01, - 0xe0, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xc0, - 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xfe, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xc0, - 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0xe0, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, - 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xc0, - 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x03, - 0xc0, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0x80, 0x00, 0x00, 0x3f, 0xff, 0xc0, - 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, - 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x70, 0x01, 0xc0, - 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, - 0x00, 0x00, 0x38, 0x03, 0xc0, 0x00, 0x00, 0x03, - 0x80, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x70, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x78, 0x07, 0x80, - 0x00, 0x00, 0x3c, 0x03, 0x80, 0x00, 0x00, 0x07, - 0x80, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, - 0x00, 0x78, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x80, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x00, - 0x00, 0x00, 0x1e, 0x0f, 0x80, 0x00, 0x00, 0x07, - 0x80, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x80, 0x00, - 0x00, 0x3c, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7f, 0xff, - 0xc0, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, - 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, - 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7f, 0xff, - 0xc0, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, - 0x00, 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, - 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7f, 0xff, - 0xc0, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, - 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, - 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, - 0x1f, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xf0, - 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x7c, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x07, - 0xc0, 0x00, 0x1e, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, - 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0xc0, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, - 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xf0, - 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x01, - 0xff, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0xf8, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x0f, - 0xc0, 0x00, 0x1e, 0x00, 0x1c, 0x00, 0x00, 0x01, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xe0, - 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0xe0, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, - 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xf0, - 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x03, - 0xff, 0xf8, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x01, 0xf0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x0f, - 0xc0, 0x00, 0x1f, 0x00, 0x1c, 0x00, 0x00, 0x03, - 0xff, 0xf0, 0x00, 0x00, 0x00, 0xfe, 0x07, 0xf0, - 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x01, - 0xf0, 0x00, 0x00, 0x07, 0xc1, 0xf0, 0x00, 0x00, - 0x1c, 0x01, 0xf8, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xe0, 0xfc, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x03, 0xe0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x0f, - 0xc0, 0x00, 0x1f, 0x80, 0x1c, 0x00, 0x00, 0x07, - 0xe1, 0xf8, 0x00, 0x00, 0x01, 0xf0, 0x00, 0xf8, - 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0xf0, 0x00, 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, - 0x1c, 0x00, 0x78, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x80, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x07, 0xc0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x1f, - 0xc0, 0x00, 0x1f, 0x80, 0x1c, 0x00, 0x00, 0x0f, - 0x80, 0x7c, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x7c, - 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x70, 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, - 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x0f, 0x80, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xc0, 0x1d, - 0xc0, 0x00, 0x1f, 0xc0, 0x1c, 0x00, 0x00, 0x1e, - 0x00, 0x1e, 0x00, 0x00, 0x07, 0x80, 0x00, 0x3c, - 0x00, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x70, 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, - 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x1f, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xc0, 0x1d, - 0xc0, 0x00, 0x1d, 0xc0, 0x1c, 0x00, 0x00, 0x1e, - 0x00, 0x1e, 0x00, 0x00, 0x0f, 0x03, 0xe3, 0x9e, - 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, 0x1c, 0x00, - 0x70, 0x00, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x00, - 0x1c, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x06, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x3e, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe0, 0x1d, - 0xc0, 0x00, 0x1c, 0xe0, 0x1c, 0x00, 0x00, 0x1c, - 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x0f, 0xf7, 0x8e, - 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, 0x1c, 0x00, - 0xf0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x7c, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x39, - 0xc0, 0x00, 0x1c, 0xf0, 0x1c, 0x00, 0x00, 0x3c, - 0x00, 0x0f, 0x00, 0x00, 0x1e, 0x1f, 0xff, 0x8f, - 0x00, 0x03, 0x83, 0x80, 0x00, 0x00, 0x1c, 0x01, - 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0xf8, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x39, - 0xc0, 0x00, 0x1c, 0x70, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x3e, 0x3f, 0x0f, - 0x00, 0x07, 0x83, 0xc0, 0x00, 0x00, 0x1f, 0xff, - 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1d, 0xf0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xf0, 0x39, - 0xc0, 0x00, 0x1c, 0x78, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x3c, 0x1f, 0x07, - 0x00, 0x07, 0x01, 0xc0, 0x00, 0x00, 0x1f, 0xff, - 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, 0xe0, - 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xf0, 0x79, - 0xc0, 0x00, 0x1c, 0x3c, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x3c, 0x78, 0x0f, 0x07, - 0x00, 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x1f, 0xff, - 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, 0xe0, - 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x38, - 0x03, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x70, 0x71, - 0xc0, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x38, 0x70, 0x0f, 0x07, - 0x00, 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x1c, 0x01, - 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, 0xe0, - 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x38, - 0x03, 0xff, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1f, 0x9c, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x70, 0x71, - 0xc0, 0x00, 0x1c, 0x1e, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x38, 0xf0, 0x0f, 0x07, - 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x00, 0x1c, 0x00, - 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x03, 0xff, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1f, 0x1e, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x78, 0xf1, - 0xc0, 0x00, 0x1c, 0x0f, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x38, 0xe0, 0x0e, 0x07, - 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1c, 0x00, - 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0xe1, - 0xc0, 0x00, 0x1c, 0x07, 0x1c, 0x00, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0x38, 0xe0, 0x0e, 0x0f, - 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1c, 0x00, - 0x38, 0x00, 0x00, 0x3c, 0x00, 0x0c, 0x00, 0x00, - 0x1c, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x07, 0x80, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0xe1, - 0xc0, 0x00, 0x1c, 0x07, 0x9c, 0x00, 0x00, 0x3c, - 0x00, 0x0f, 0x00, 0x00, 0x38, 0xe0, 0x1e, 0x0e, - 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x1c, 0x00, - 0x38, 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x00, - 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x03, 0x80, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x3d, 0xe1, - 0xc0, 0x00, 0x1c, 0x03, 0x9c, 0x00, 0x00, 0x1c, - 0x00, 0x0e, 0x00, 0x00, 0x38, 0xe0, 0x1e, 0x1e, - 0x00, 0x3c, 0x00, 0x78, 0x00, 0x00, 0x1c, 0x00, - 0x38, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, - 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x03, 0xc0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1d, 0xc1, - 0xc0, 0x00, 0x1c, 0x01, 0xdc, 0x00, 0x00, 0x1e, - 0x00, 0x1e, 0x00, 0x00, 0x38, 0xe0, 0x3c, 0x1c, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, - 0x78, 0x00, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, - 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x07, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1c, - 0x00, 0x00, 0x00, 0x1c, 0x01, 0xe0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1d, 0xc1, - 0xc0, 0x00, 0x1c, 0x01, 0xfc, 0x00, 0x00, 0x1e, - 0x00, 0x1e, 0x00, 0x00, 0x3c, 0xf0, 0x7c, 0x3c, - 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, - 0x78, 0x00, 0x00, 0x0f, 0x00, 0x7c, 0x00, 0x00, - 0x1c, 0x00, 0x78, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x80, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3c, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0xf0, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1f, 0xc1, - 0xc0, 0x00, 0x1c, 0x00, 0xfc, 0x00, 0x00, 0x0f, - 0x80, 0x7c, 0x00, 0x00, 0x3c, 0x78, 0xfc, 0xf8, - 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x01, - 0xf0, 0x00, 0x00, 0x07, 0xe1, 0xf8, 0x00, 0x00, - 0x1c, 0x01, 0xf8, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xe0, 0x7f, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x78, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1f, 0x81, - 0xc0, 0x00, 0x1c, 0x00, 0xfc, 0x00, 0x00, 0x07, - 0xe1, 0xf8, 0x00, 0x00, 0x1c, 0x7f, 0xff, 0xf0, - 0x00, 0x70, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0xff, - 0xe0, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, - 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xf8, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xff, 0xfc, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, - 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x1c, 0x0f, 0x81, - 0xc0, 0x00, 0x1c, 0x00, 0x7c, 0x00, 0x00, 0x03, - 0xff, 0xf0, 0x00, 0x00, 0x1e, 0x3f, 0xdf, 0xe0, - 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0xff, - 0xc0, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, - 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xff, 0xf8, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xf8, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, - 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x1c, 0x0f, 0x81, - 0xc0, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x01, - 0xff, 0xe0, 0x00, 0x00, 0x0f, 0x1f, 0x0f, 0x87, - 0x80, 0xe0, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, - 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf8, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xc0, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, - 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x00, - 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x1c, 0x0f, 0x01, - 0xc0, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x7e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x01, 0xfc, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0xc0, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, - 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0x00, 0xe0, - 0x03, 0xe0, 0x03, 0x80, 0x3c, 0x00, 0x78, 0x00, - 0x00, 0xf0, 0x00, 0x78, 0x00, 0x00, 0x1f, 0xff, - 0xe0, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, - 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xff, - 0xf0, 0x00, 0x00, 0x03, 0xff, 0x80, 0x00, 0x00, - 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, - 0x03, 0xe0, 0x07, 0x80, 0x1e, 0x00, 0xf0, 0x00, - 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x1f, 0xff, - 0xe0, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, - 0x00, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, - 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, - 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0xf0, - 0x07, 0xe0, 0x07, 0x80, 0x0e, 0x00, 0xe0, 0x00, - 0x00, 0x78, 0x00, 0xf0, 0x00, 0x00, 0x1f, 0xff, - 0xe0, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xf0, 0x00, - 0x00, 0x07, 0xc1, 0xf0, 0x00, 0x00, 0x1c, 0x00, - 0xf8, 0x00, 0x00, 0x0f, 0x83, 0xe0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x70, - 0x07, 0xf0, 0x07, 0x00, 0x0f, 0x01, 0xe0, 0x00, - 0x00, 0x3c, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x01, - 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, - 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x1c, 0x00, - 0x3c, 0x00, 0x00, 0x1e, 0x00, 0xf0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x70, - 0x07, 0x70, 0x07, 0x00, 0x07, 0x83, 0xc0, 0x00, - 0x00, 0x1c, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, - 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, - 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0xf0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x78, - 0x07, 0x70, 0x0f, 0x00, 0x03, 0x83, 0x80, 0x00, - 0x00, 0x1e, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x07, - 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x38, 0x00, - 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x00, 0x78, - 0x0f, 0x78, 0x0f, 0x00, 0x03, 0xc7, 0x80, 0x00, - 0x00, 0x0f, 0x07, 0x80, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x38, 0x00, - 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, - 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x00, 0x38, - 0x0e, 0x38, 0x0e, 0x00, 0x01, 0xef, 0x00, 0x00, - 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x38, 0x00, - 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, - 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x38, - 0x0e, 0x38, 0x0e, 0x00, 0x00, 0xfe, 0x00, 0x00, - 0x00, 0x07, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x1e, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, - 0x3c, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x1e, 0x00, 0xf0, 0x00, 0x00, 0x3c, - 0x0e, 0x38, 0x1e, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x00, 0x03, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, - 0xf8, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x1e, 0x00, 0xf0, 0x00, 0x00, 0x3c, - 0x1e, 0x3c, 0x1e, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x00, 0x03, 0xde, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x01, 0xf0, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, - 0xf8, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x1c, - 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, - 0xf0, 0x00, 0x00, 0x01, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x1c, - 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0xff, - 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x07, 0x01, 0xc0, 0x00, 0x00, 0x1e, - 0x3c, 0x1c, 0x3c, 0x00, 0x00, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xe0, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x0f, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x07, 0x83, 0xc0, 0x00, 0x00, 0x1e, - 0x3c, 0x1e, 0x3c, 0x00, 0x01, 0xef, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0xc0, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x07, - 0x80, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x07, 0x83, 0xc0, 0x00, 0x00, 0x0e, - 0x38, 0x0e, 0x38, 0x00, 0x01, 0xc7, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0xc0, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x07, - 0xc0, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, 0x0e, - 0x38, 0x0e, 0x38, 0x00, 0x03, 0xc7, 0x80, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x03, - 0xe0, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, - 0x00, 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, 0x0f, - 0x78, 0x0f, 0x78, 0x00, 0x07, 0x83, 0xc0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x07, 0x3c, 0x00, 0x00, 0x1c, 0x01, - 0xf0, 0x00, 0x00, 0x3c, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x3c, - 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x0f, - 0x70, 0x07, 0x78, 0x00, 0x0f, 0x01, 0xe0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x1e, 0x07, 0xb8, 0x00, 0x00, 0x1c, 0x00, - 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x3c, - 0x00, 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x07, - 0x70, 0x07, 0x70, 0x00, 0x0e, 0x00, 0xe0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x07, 0xf8, 0x00, 0x00, 0x1c, 0x00, - 0x78, 0x00, 0x00, 0x1e, 0x00, 0xf8, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x78, - 0x00, 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x07, - 0xf0, 0x07, 0xf0, 0x00, 0x1e, 0x00, 0xf0, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xc1, 0xf0, 0x00, 0x00, 0x1c, 0x00, - 0x78, 0x00, 0x00, 0x0f, 0xc1, 0xf0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x0f, 0xc1, 0xf8, - 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x07, - 0xf0, 0x07, 0xf0, 0x00, 0x3c, 0x00, 0x78, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, 0x1c, 0x00, - 0x3c, 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf0, - 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x07, - 0xe0, 0x03, 0xf0, 0x00, 0x38, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7f, 0xff, - 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x1c, 0x00, - 0x3e, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0xff, 0xe0, - 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x03, - 0xe0, 0x03, 0xe0, 0x00, 0x78, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7f, 0xff, - 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xc0, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0x9f, 0x00, 0x00, 0x1c, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x03, - 0xe0, 0x03, 0xe0, 0x00, 0xf0, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7f, 0xff, - 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xc0, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x39, 0xf8, - 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, - 0x07, 0xe7, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, - 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, - 0xe7, 0x00, 0x00, 0x00, 0x38, 0xfc, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x0f, 0x80, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x39, 0xf0, 0x7e, - 0x00, 0x00, 0x39, 0xfc, 0x00, 0x00, 0x00, 0x03, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x3b, 0xfc, - 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, - 0x0f, 0xf7, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, - 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, - 0xf7, 0x00, 0x00, 0x00, 0x3b, 0xfe, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x1f, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xfc, 0xff, - 0x00, 0x00, 0x3b, 0xff, 0x00, 0x00, 0x00, 0x0f, - 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xfe, - 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, - 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, - 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x1f, - 0xff, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x3e, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfd, 0xff, - 0x80, 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x1f, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x78, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x1f, - 0x00, 0x00, 0x00, 0x3e, 0x1e, 0x00, 0x00, 0x00, - 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3e, - 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x0f, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x1f, 0x8f, - 0x80, 0x00, 0x3f, 0x0f, 0x80, 0x00, 0x00, 0x3e, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x07, - 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, - 0x38, 0x1f, 0x00, 0x00, 0x00, 0x38, 0x07, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1f, 0x07, - 0x80, 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, 0x3c, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x07, - 0x80, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x00, - 0x78, 0x0f, 0x00, 0x00, 0x00, 0x78, 0x07, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x39, 0xe0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x03, - 0x80, 0x00, 0x3c, 0x03, 0x80, 0x00, 0x00, 0x78, - 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x38, 0x03, - 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x00, 0x70, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3b, 0xc0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x38, 0x03, - 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x38, 0x03, - 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xf7, 0x00, 0x00, 0x00, 0x38, 0x03, - 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7c, 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, - 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3c, 0xf0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, - 0x80, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, - 0x70, 0x07, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x07, - 0x80, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, - 0x78, 0x0f, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x0f, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x78, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x78, - 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x0f, - 0x00, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, 0x00, - 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, - 0x0f, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x3c, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7c, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x1f, - 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, - 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3e, - 0x3f, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x3e, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xfe, - 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, - 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xff, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x1f, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xf7, 0x80, 0x00, 0x00, 0x3b, 0xfc, - 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, - 0x0f, 0xf7, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xff, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x0f, - 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0xe3, 0x80, 0x00, 0x00, 0x39, 0xf8, - 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, - 0x07, 0xe7, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xe7, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x03, - 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x03, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, - 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x39, 0xf8, 0x00, 0x00, - 0x00, 0x07, 0xe7, 0x00, 0x00, 0x00, 0x39, 0xe0, - 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0xf0, 0x07, 0x80, 0x00, 0x01, 0xe0, - 0x38, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x7f, 0xfe, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3b, 0xfc, 0x00, 0x00, - 0x00, 0x0f, 0xf7, 0x00, 0x00, 0x00, 0x3b, 0xe0, - 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0xf0, 0x07, 0x80, 0x00, 0x00, 0xe0, - 0x3c, 0x0e, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, - 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, 0x7f, 0xfe, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xe0, - 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0xf0, - 0x7c, 0x1e, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, - 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x7f, 0xfe, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3f, 0x1f, 0x00, 0x00, - 0x00, 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, - 0x00, 0x00, 0x00, 0x78, 0x3e, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, 0xf0, - 0x7c, 0x1e, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x1f, 0x00, 0x40, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3e, 0x0f, 0x00, 0x00, - 0x00, 0x38, 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x70, - 0x7c, 0x1c, 0x00, 0x00, 0x1e, 0x38, 0x00, 0x00, - 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0xc0, 0xc0, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x70, - 0xec, 0x1c, 0x00, 0x00, 0x0e, 0x78, 0x00, 0x00, - 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0xf1, 0xc0, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3c, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x00, 0x78, - 0xee, 0x3c, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, - 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x00, 0x01, 0xf0, - 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x00, 0x71, 0xff, 0xc0, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x38, - 0xee, 0x38, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x00, 0x1e, 0x1c, 0x00, 0x00, 0x00, 0x01, 0xe0, - 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, - 0x00, 0x00, 0x60, 0x7f, 0x80, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, 0x00, 0x38, - 0xe6, 0x38, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, - 0x00, 0x0e, 0x38, 0x00, 0x00, 0x00, 0x03, 0xc0, - 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, - 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, 0x00, 0x3d, - 0xc6, 0x78, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, - 0x00, 0x0f, 0x38, 0x00, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, 0x00, 0x1d, - 0xc7, 0x70, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, - 0x00, 0x0f, 0x38, 0x00, 0x00, 0x00, 0x0f, 0x00, - 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, - 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, - 0x00, 0x00, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x1d, - 0xc7, 0x70, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, - 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, - 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x07, 0x80, - 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, 0x00, 0x1d, - 0xc3, 0x70, 0x00, 0x00, 0x0f, 0x70, 0x00, 0x00, - 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, - 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x78, 0x07, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, - 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x0f, - 0x83, 0xe0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, - 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x7c, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3f, 0x1f, 0x00, 0x00, - 0x00, 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3c, 0x1f, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x1f, 0x80, - 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x0f, - 0x83, 0xe0, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, - 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, - 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x80, - 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x0f, - 0x83, 0xe0, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, - 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x3b, 0xfc, 0x00, 0x00, - 0x00, 0x0f, 0xf7, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfb, 0x80, - 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x0f, - 0x03, 0xc0, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, - 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x39, 0xf0, 0x00, 0x00, - 0x00, 0x03, 0xe7, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe3, 0x80, - 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x07, - 0x01, 0xc0, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, - 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xff, 0xfc, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, - 0x1c, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x08, 0xf0, 0x24, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x0c, 0x94, 0xea, 0xff, 0xfd, 0x70, - 0xea, 0x00, 0x00, 0x01, 0xe3, 0x5c, 0x00, 0xb7, - 0xa5, 0x9f, 0xf0, 0x04, 0xe0, 0x86, 0xc0, 0x0c, - 0xe5, 0x9f, 0xf0, 0x00, 0x00, 0x00, 0x0f, 0x74, - 0x00, 0x00, 0x0c, 0x98, 0x00, 0x00, 0x00, 0x0f, - 0xf0, 0x24, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x0e, 0x4c, - 0xea, 0xff, 0xfd, 0x03, 0xea, 0x00, 0x00, 0x07, - 0xe5, 0x9f, 0xc0, 0x1c, 0xe5, 0x9c, 0x30, 0x00, - 0xe3, 0x83, 0x33, 0x33, 0xe1, 0x52, 0x00, 0x03, - 0x05, 0x9f, 0xc0, 0x10, 0x05, 0x9c, 0xc0, 0x00, - 0x03, 0x8c, 0x23, 0x33, 0xe5, 0x9f, 0xc0, 0x08, - 0xe5, 0x9f, 0xf0, 0x08, 0x66, 0x00, 0x00, 0x60, - 0x66, 0x00, 0x00, 0x5c, 0x66, 0x00, 0x00, 0x58, - 0x00, 0x00, 0x0e, 0x50, 0x00, 0x00, 0x00, 0x01, - 0xf0, 0x24, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x02, 0x6c, - 0xa0, 0x00, 0x0b, 0x38, 0x00, 0x00, 0x01, 0xc0, - 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, - 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x02, 0x02, 0x02, 0x02, 0x40, - 0xe5, 0x9f, 0xc0, 0x00, 0xe1, 0x2f, 0xff, 0x1c, - 0x2e, 0x01, 0xcf, 0x19, 0xe5, 0x9f, 0xc0, 0x00, - 0xe1, 0x2f, 0xff, 0x1c, 0x2e, 0x00, 0x5b, 0x17, - 0xe5, 0x9f, 0xc0, 0x00, 0xe1, 0x2f, 0xff, 0x1c, - 0x2e, 0x00, 0x5b, 0xa1, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0x37, 0x7c, - 0x2e, 0x02, 0x38, 0x94, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x37, 0x7c, 0xff, 0x7f, 0x3f, 0x1f, - 0x0f, 0x07, 0x03, 0x01, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, - 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x00, 0x01, 0x00, 0x43, 0x6f, 0x70, 0x79, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x46, 0x75, - 0x6a, 0x69, 0x74, 0x73, 0x75, 0x20, 0x53, 0x69, - 0x65, 0x6d, 0x65, 0x6e, 0x73, 0x20, 0x26, 0x20, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x67, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x57, 0x5e, 0x61, 0xa3, - 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x0c, - 0x6c, 0x00, 0x00, 0x24, 0x64, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xd0, 0x00, 0x00, 0x07, 0xd0, - 0x00, 0x00, 0x13, 0x88, 0x02, 0x02, 0x01, 0x00, - 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xd0, 0x00, 0x00, 0x07, 0xd0, - 0x00, 0x00, 0x13, 0x88, 0x02, 0x02, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xd0, - 0x2e, 0x08, 0x05, 0xd0, 0x2e, 0x08, 0x05, 0xd8, - 0x2e, 0x08, 0x05, 0xd8, 0x2e, 0x08, 0x05, 0xe0, - 0x2e, 0x08, 0x05, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, - 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, - 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, - 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, - 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, - 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, - 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, - 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, - 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, - 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, - 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, - 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, - 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, - 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, - 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, - 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, - 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, - 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, - 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, - 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, - 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, - 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, - 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, - 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, - 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, - 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, - 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, - 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, - 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, - 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, - 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, - 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, - 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, - 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, - 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, - 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, - 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, - 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, - 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, - 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, - 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, - 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, - 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, - 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, - 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, - 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, - 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, - 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, - 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, - 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, - 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, - 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, - 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, - 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, - 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, - 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, - 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, - 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, - 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00, - 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, - 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, - 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, - 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, - 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, - 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, - 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, - 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, - 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, - 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, - 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, - 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, - 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, - 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, - 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, - 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, - 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, - 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, - 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, - 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, - 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, - 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, - 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, - 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, - 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, - 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, - 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00, - 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, - 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, - 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00, - 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, - 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, - 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, - 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, - 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, - 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, - 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, - 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, - 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00, - 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, - 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, - 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, - 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, - 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, - 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, - 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, - 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, - 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, - 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, - 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, - 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, - 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00, - 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, - 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, - 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, - 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, - 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, - 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, - 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, - 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, - 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, - 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, - 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, - 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, - 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, - 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, - 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, - 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, - 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, - 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, - 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, - 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, - 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, - 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, - 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, - 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, - 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, - 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, - 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, - 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, - 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, - 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x65, 0xd0, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, - 0x2e, 0x08, 0x07, 0xa4, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf7, - 0x11, 0x38, 0x06, 0x53, 0x2e, 0x08, 0x17, 0xe4, - 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x21, - 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x21, - 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xb9, - 0x0e, 0xa6, 0x06, 0x53, 0x2e, 0x08, 0x19, 0x14, - 0x2e, 0x08, 0x1a, 0x38, 0x2e, 0x08, 0x19, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf4, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x8b, 0x98, 0x00, 0x44, 0x45, 0x55, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x64, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x80, 0x10, 0x80, 0x00, 0x80, 0xda, 0x80, - 0x00, 0x5a, 0x51, 0xf0, 0x00, 0x36, 0x91, 0x22, - 0x00, 0xf0, 0x29, 0x6e, 0x00, 0x10, 0xd2, 0x92, - 0x00, 0xca, 0x6a, 0xde, 0x00, 0xa6, 0xaa, 0x10, - 0x00, 0x80, 0x3b, 0x80, 0x00, 0x80, 0xbc, 0x80, - 0x00, 0x80, 0x7e, 0x80, 0x00, 0xcf, 0x22, 0x73, - 0x00, 0x93, 0x48, 0x5d, 0x00, 0xa2, 0x73, 0x93, - 0x00, 0x25, 0xae, 0xad, 0x00, 0xa7, 0x9f, 0x60, - 0x00, 0x10, 0x10, 0x10, 0x00, 0x59, 0x10, 0x10, - 0x00, 0xa2, 0x10, 0x10, 0x00, 0xeb, 0x10, 0x10, - 0x00, 0x10, 0x10, 0x59, 0x00, 0x59, 0x10, 0x59, - 0x00, 0xa2, 0x10, 0x59, 0x00, 0xeb, 0x10, 0x59, - 0x00, 0x10, 0x10, 0xa2, 0x00, 0x59, 0x10, 0xa2, - 0x00, 0xa2, 0x10, 0xa2, 0x00, 0xeb, 0x10, 0xa2, - 0x00, 0x10, 0x10, 0xeb, 0x00, 0x59, 0x10, 0xeb, - 0x00, 0xa2, 0x10, 0xeb, 0x00, 0xeb, 0x10, 0xeb, - 0x00, 0x10, 0x2f, 0x10, 0x00, 0x59, 0x2f, 0x10, - 0x00, 0xa2, 0x2f, 0x10, 0x00, 0xeb, 0x2f, 0x10, - 0x00, 0x10, 0x2f, 0x59, 0x00, 0x59, 0x2f, 0x59, - 0x00, 0xa2, 0x2f, 0x59, 0x00, 0xeb, 0x2f, 0x59, - 0x00, 0x10, 0x2f, 0xa2, 0x00, 0x59, 0x2f, 0xa2, - 0x00, 0xa2, 0x2f, 0xa2, 0x00, 0xeb, 0x2f, 0xa2, - 0x00, 0x10, 0x2f, 0xeb, 0x00, 0x59, 0x2f, 0xeb, - 0x00, 0xa2, 0x2f, 0xeb, 0x00, 0xeb, 0x2f, 0xeb, - 0x00, 0x10, 0x4e, 0x10, 0x00, 0x59, 0x4e, 0x10, - 0x00, 0xa2, 0x4e, 0x10, 0x00, 0xeb, 0x4e, 0x10, - 0x00, 0x10, 0x4e, 0x59, 0x00, 0x59, 0x4e, 0x59, - 0x00, 0xa2, 0x4e, 0x59, 0x00, 0xeb, 0x4e, 0x59, - 0x00, 0x10, 0x4e, 0xa2, 0x00, 0x59, 0x4e, 0xa2, - 0x00, 0xa2, 0x4e, 0xa2, 0x00, 0xeb, 0x4e, 0xa2, - 0x00, 0x10, 0x4e, 0xeb, 0x00, 0x59, 0x4e, 0xeb, - 0x00, 0xa2, 0x4e, 0xeb, 0x00, 0xeb, 0x4e, 0xeb, - 0x00, 0x10, 0x6d, 0x10, 0x00, 0x59, 0x6d, 0x10, - 0x00, 0xa2, 0x6d, 0x10, 0x00, 0xeb, 0x6d, 0x10, - 0x00, 0x10, 0x6d, 0x59, 0x00, 0x59, 0x6d, 0x59, - 0x00, 0xa2, 0x6d, 0x59, 0x00, 0xeb, 0x6d, 0x59, - 0x00, 0x10, 0x6d, 0xa2, 0x00, 0x59, 0x6d, 0xa2, - 0x00, 0xa2, 0x6d, 0xa2, 0x00, 0xeb, 0x6d, 0xa2, - 0x00, 0x10, 0x6d, 0xeb, 0x00, 0x59, 0x6d, 0xeb, - 0x00, 0xa2, 0x6d, 0xeb, 0x00, 0xeb, 0x6d, 0xeb, - 0x00, 0x10, 0x8c, 0x10, 0x00, 0x59, 0x8c, 0x10, - 0x00, 0xa2, 0x8c, 0x10, 0x00, 0xeb, 0x8c, 0x10, - 0x00, 0x10, 0x8c, 0x59, 0x00, 0x59, 0x8c, 0x59, - 0x00, 0xa2, 0x8c, 0x59, 0x00, 0xeb, 0x8c, 0x59, - 0x00, 0x10, 0x8c, 0xa2, 0x00, 0x59, 0x8c, 0xa2, - 0x00, 0xa2, 0x8c, 0xa2, 0x00, 0xeb, 0x8c, 0xa2, - 0x00, 0x10, 0x8c, 0xeb, 0x00, 0x59, 0x8c, 0xeb, - 0x00, 0xa2, 0x8c, 0xeb, 0x00, 0xeb, 0x8c, 0xeb, - 0x00, 0x10, 0xab, 0x10, 0x00, 0x59, 0xab, 0x10, - 0x00, 0xa2, 0xab, 0x10, 0x00, 0xeb, 0xab, 0x10, - 0x00, 0x10, 0xab, 0x59, 0x00, 0x59, 0xab, 0x59, - 0x00, 0xa2, 0xab, 0x59, 0x00, 0xeb, 0xab, 0x59, - 0x00, 0x10, 0xab, 0xa2, 0x00, 0x59, 0xab, 0xa2, - 0x00, 0xa2, 0xab, 0xa2, 0x00, 0xeb, 0xab, 0xa2, - 0x00, 0x10, 0xab, 0xeb, 0x00, 0x59, 0xab, 0xeb, - 0x00, 0xa2, 0xab, 0xeb, 0x00, 0xeb, 0xab, 0xeb, - 0x00, 0x10, 0xca, 0x10, 0x00, 0x59, 0xca, 0x10, - 0x00, 0xa2, 0xca, 0x10, 0x00, 0xeb, 0xca, 0x10, - 0x00, 0x10, 0xca, 0x59, 0x00, 0x59, 0xca, 0x59, - 0x00, 0xa2, 0xca, 0x59, 0x00, 0xeb, 0xca, 0x59, - 0x00, 0x10, 0xca, 0xa2, 0x00, 0x59, 0xca, 0xa2, - 0x00, 0xa2, 0xca, 0xa2, 0x00, 0xeb, 0xca, 0xa2, - 0x00, 0x10, 0xca, 0xeb, 0x00, 0x59, 0xca, 0xeb, - 0x00, 0xa2, 0xca, 0xeb, 0x00, 0xeb, 0xca, 0xeb, - 0x00, 0x10, 0xe9, 0x10, 0x00, 0x59, 0xe9, 0x10, - 0x00, 0xa2, 0xe9, 0x10, 0x00, 0xeb, 0xe9, 0x10, - 0x00, 0x10, 0xe9, 0x59, 0x00, 0x59, 0xe9, 0x59, - 0x00, 0xa2, 0xe9, 0x59, 0x00, 0xeb, 0xe9, 0x59, - 0x00, 0x10, 0xe9, 0xa2, 0x00, 0x59, 0xe9, 0xa2, - 0x00, 0xa2, 0xe9, 0xa2, 0x00, 0xeb, 0xe9, 0xa2, - 0x00, 0x10, 0xe9, 0xeb, 0x00, 0x59, 0xe9, 0xeb, - 0x00, 0xa2, 0xe9, 0xeb, 0x00, 0xeb, 0xe9, 0xeb, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x24, 0xc0, - 0xc1, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0x6d, 0xbb, 0xeb, 0x8e, 0x01, 0xea, 0x25, - 0x04, 0xd0, 0x82, 0x49, 0xed, 0x4c, 0x8f, 0xc2, - 0x66, 0x0b, 0x65, 0xc5, 0x0c, 0xc2, 0x41, 0x19, - 0x07, 0xa8, 0x94, 0x13, 0x42, 0x09, 0x27, 0xb5, - 0x32, 0x3f, 0x09, 0x98, 0x2d, 0x97, 0x14, 0x33, - 0x09, 0x04, 0x64, 0x00, 0xff, 0xff, 0x24, 0xc0, - 0xe0, 0x11, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0x8e, 0xf7, 0xe7, 0x6e, 0x9c, 0x0c, 0xc3, - 0xd2, 0xb4, 0x05, 0x16, 0x3c, 0x8e, 0x82, 0xd4, - 0x16, 0x5e, 0x9c, 0x0c, 0xc3, 0xd2, 0xb4, 0x05, - 0x16, 0x3c, 0x8e, 0x82, 0xd4, 0x16, 0x5e, 0x9c, - 0x0c, 0xc3, 0xd2, 0xb4, 0x05, 0x16, 0x3c, 0x8e, - 0x82, 0xd4, 0x16, 0x50, 0xff, 0xff, 0x24, 0xc0, - 0xd4, 0x11, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0x4d, 0xf8, 0xd5, 0x9e, 0x7f, 0x02, 0x22, - 0x08, 0xa3, 0xbd, 0x94, 0x53, 0x16, 0x79, 0xfc, - 0x08, 0x88, 0x22, 0x8e, 0xf6, 0x51, 0x4c, 0x59, - 0xe7, 0xf0, 0x22, 0x20, 0x8a, 0x3b, 0xd9, 0x45, - 0x31, 0x67, 0x9f, 0xc0, 0x88, 0x82, 0x28, 0xef, - 0x65, 0x14, 0xc4, 0x00, 0xff, 0xff, 0x24, 0xc0, - 0xe8, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x6d, 0xfb, 0x1d, 0x77, 0xc1, 0x38, 0x81, - 0xfb, 0xb1, 0xd7, 0x7c, 0x13, 0x88, 0x1f, 0xbb, - 0x1d, 0x77, 0xc1, 0x38, 0x81, 0xfb, 0xb1, 0xd7, - 0x7c, 0x13, 0x88, 0x1f, 0xbb, 0x1d, 0x77, 0xc1, - 0x38, 0x81, 0xfb, 0xb1, 0xd7, 0x7c, 0x13, 0x88, - 0x1f, 0x80, 0x00, 0x00, 0xff, 0xff, 0x24, 0xc0, - 0x9b, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x50, 0x3d, 0x75, 0xf7, 0x14, 0x0a, 0xc3, 0x29, - 0x9f, 0x51, 0xbc, 0xfb, 0xdc, 0x7b, 0x8a, 0x05, - 0x61, 0x94, 0xcf, 0xa8, 0xde, 0x7d, 0xee, 0x3d, - 0xc5, 0x02, 0xb0, 0xca, 0x67, 0xd4, 0x6f, 0x3e, - 0xf7, 0x1e, 0xe2, 0x81, 0x58, 0x65, 0x33, 0xea, - 0x37, 0x9f, 0x7b, 0x80, 0xff, 0xff, 0x24, 0xc0, - 0x12, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xeb, 0x50, 0xfb, 0xe7, 0x78, 0x1f, 0xde, 0xa1, - 0x62, 0x99, 0x11, 0x36, 0x02, 0x00, 0x97, 0xd6, - 0x69, 0x98, 0x1f, 0xde, 0xa1, 0x62, 0x99, 0x11, - 0x36, 0x02, 0x00, 0x97, 0xd6, 0x69, 0x98, 0x1f, - 0xde, 0xa1, 0x62, 0x99, 0x11, 0x36, 0x02, 0x00, - 0x97, 0xd6, 0x69, 0x90, 0xff, 0xff, 0x24, 0xc0, - 0x11, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xdf, 0x95, 0x03, 0xa1, 0x49, 0xc5, 0x45, 0xe7, - 0x96, 0xe6, 0x1d, 0xdc, 0x0d, 0x50, 0xa4, 0xe2, - 0xa2, 0xf3, 0xcb, 0x73, 0x0e, 0xee, 0x06, 0xa8, - 0x52, 0x71, 0x51, 0x79, 0xe5, 0xb9, 0x87, 0x77, - 0x03, 0x54, 0x29, 0x38, 0xa8, 0xbc, 0xf2, 0xdc, - 0xc3, 0xbb, 0x81, 0xa0, 0xff, 0xff, 0x24, 0xc0, - 0x11, 0x21, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe7, 0xae, 0x35, 0x0d, 0x42, 0x14, 0xc2, 0xf9, - 0x4a, 0x13, 0x55, 0xa6, 0x6e, 0xf4, 0x88, 0x53, - 0x0b, 0xe5, 0x28, 0x4d, 0x56, 0x99, 0xbb, 0xd2, - 0x21, 0x4c, 0x2f, 0x94, 0xa1, 0x35, 0x5a, 0x66, - 0xef, 0x48, 0x85, 0x30, 0xbe, 0x52, 0x84, 0xd5, - 0x69, 0x9b, 0xbd, 0x20, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x1f, 0xc8, 0x2e, 0x08, 0x1f, 0xcc, - 0x2e, 0x08, 0x1f, 0xd0, 0x2e, 0x08, 0x1f, 0xd8, - 0x2e, 0x08, 0x1f, 0xdc, 0x2e, 0x08, 0x1f, 0xe0, - 0x6e, 0x00, 0x01, 0x00, 0x6e, 0x00, 0x01, 0x00, - 0x6e, 0x00, 0x01, 0x08, 0x6e, 0x00, 0x01, 0x0c, - 0x6e, 0x00, 0x01, 0x04, 0x6e, 0x00, 0x01, 0x10, - 0x6e, 0x00, 0x01, 0x14, 0x2e, 0x08, 0x9d, 0xc4, - 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, - 0xb0, 0x25, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x0d, 0x00, 0x2e, 0x08, 0x20, 0x2c, - 0x2e, 0x08, 0x20, 0x30, 0x2e, 0x08, 0x20, 0x34, - 0x2e, 0x08, 0x20, 0x38, 0x70, 0x00, 0x00, 0x00, - 0x70, 0x00, 0x00, 0x04, 0x70, 0x00, 0x00, 0x08, - 0x70, 0x00, 0x00, 0x0c, 0x70, 0x00, 0x00, 0x10, - 0x70, 0x00, 0x00, 0x30, 0x2e, 0x02, 0x3a, 0x7d, - 0x2e, 0x02, 0x3a, 0x0d, 0x2e, 0x02, 0x39, 0x85, - 0x2e, 0x02, 0x39, 0x7d, 0x2e, 0x02, 0x3a, 0xb5, - 0x2e, 0x02, 0x3a, 0x45, 0x2e, 0x02, 0x3a, 0xf9, - 0x2e, 0x02, 0x3a, 0xf1, 0x00, 0x00, 0x00, 0x00, - 0x9e, 0x00, 0x09, 0x80, 0x80, 0x00, 0x00, 0x00, - 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, - 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, - 0xff, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, - 0xff, 0xc0, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, - 0xff, 0xf0, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, - 0xff, 0xfc, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, - 0xff, 0xff, 0xc0, 0x00, 0xff, 0xff, 0xe0, 0x00, - 0xff, 0xff, 0xf0, 0x00, 0xff, 0xff, 0xf8, 0x00, - 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xfe, 0x00, - 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x80, - 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xe0, - 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xf8, - 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfe, - 0xff, 0xff, 0xff, 0xff, 0x80, 0xc0, 0xe0, 0xf0, - 0xf8, 0xfc, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x03, 0xa9, 0x18, - 0x2e, 0x03, 0xa9, 0x1a, 0x2e, 0x03, 0xa9, 0x1b, - 0x2e, 0x03, 0xa9, 0x1c, 0x2e, 0x03, 0xa9, 0x1d, - 0x2e, 0x03, 0xa9, 0x1e, 0x2e, 0x03, 0xa9, 0x1f, - 0x2e, 0x03, 0xa9, 0x20, 0x2e, 0x03, 0xa9, 0x21, - 0x2e, 0x03, 0xa9, 0x22, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, 0x2e, 0x02, 0x39, 0x64, - 0x2e, 0x02, 0x39, 0x64, -}; - diff -Nru a/drivers/media/dvb/av7110/av7110_ir.c b/drivers/media/dvb/av7110/av7110_ir.c --- a/drivers/media/dvb/av7110/av7110_ir.c Sat Apr 12 14:44:10 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,171 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "av7110.h" - - -#define UP_TIMEOUT (HZ/2) - -static int av7110_ir_debug = 0; - -#define dprintk(x...) do { if (av7110_ir_debug) printk (x); } while (0) - - -static struct input_dev input_dev; - - -static -u16 key_map [256] = { - KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, - KEY_8, KEY_9, KEY_LAST, 0, KEY_POWER, KEY_MUTE, 0, KEY_INFO, - KEY_VOLUMEUP, KEY_VOLUMEDOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - KEY_CHANNELUP, KEY_CHANNELDOWN, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, KEY_TEXT, 0, 0, KEY_TV, 0, 0, 0, 0, 0, KEY_SETUP, 0, 0, - 0, 0, 0, KEY_SUBTITLE, 0, 0, KEY_LANGUAGE, 0, - KEY_RADIO, 0, 0, 0, 0, KEY_EXIT, 0, 0, - KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_OK, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RED, KEY_GREEN, KEY_YELLOW, - KEY_BLUE, 0, 0, 0, 0, 0, 0, 0, KEY_MENU, KEY_LIST, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, KEY_UP, KEY_UP, KEY_DOWN, KEY_DOWN, - 0, 0, 0, 0, KEY_EPG, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_MHP -}; - - -static -void av7110_emit_keyup (unsigned long data) -{ - if (!data || !test_bit (data, input_dev.key)) - return; - - input_event (&input_dev, EV_KEY, data, !!0); -} - - -static -struct timer_list keyup_timer = { .function = av7110_emit_keyup }; - - -static -void av7110_emit_key (u32 ircom) -{ - int down = ircom & (0x80000000); - u16 keycode = key_map[ircom & 0xff]; - - dprintk ("#########%08x######### key %02x %s (keycode %i)\n", - ircom, ircom & 0xff, down ? "pressed" : "released", keycode); - - if (!keycode) { - printk ("%s: unknown key 0x%02x!!\n", - __FUNCTION__, ircom & 0xff); - return; - } - - if (timer_pending (&keyup_timer)) { - del_timer (&keyup_timer); - if (keyup_timer.data != keycode) - input_event (&input_dev, EV_KEY, keyup_timer.data, !!0); - } - - clear_bit (keycode, input_dev.key); - - input_event (&input_dev, EV_KEY, keycode, !0); - - keyup_timer.expires = jiffies + UP_TIMEOUT; - keyup_timer.data = keycode; - - add_timer (&keyup_timer); -} - -static -void input_register_keys (void) -{ - int i; - - memset (input_dev.keybit, 0, sizeof(input_dev.keybit)); - - for (i=0; i KEY_MAX) - key_map[i] = 0; - else if (key_map[i] > KEY_RESERVED) - set_bit (key_map[i], input_dev.keybit); - } -} - - -static -int av7110_ir_write_proc (struct file *file, const char *buffer, - unsigned long count, void *data) -{ - u32 ir_config; - - if (count < 4 + 256 * sizeof(u16)) - return -EINVAL; - - memcpy (&ir_config, buffer, 4); - memcpy (&key_map, buffer + 4, 256 * sizeof(u16)); - - av7110_setup_irc_config (NULL, ir_config); - - input_register_keys (); - - return count; -} - - -int __init av7110_ir_init (void) -{ - static struct proc_dir_entry *e; - - init_timer (&keyup_timer); - keyup_timer.data = 0; - - input_dev.name = "DVB on-card IR receiver"; - - /** - * enable keys - */ - set_bit (EV_KEY, input_dev.evbit); - - input_register_keys (); - - input_register_device(&input_dev); - - av7110_setup_irc_config (NULL, 0x0001); - av7110_register_irc_handler (av7110_emit_key); - - e = create_proc_entry ("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL); - - if (e) { - e->write_proc = av7110_ir_write_proc; - e->size = 4 + 256 * sizeof(u16); - } - - return 0; -} - - -void __exit av7110_ir_exit (void) -{ - remove_proc_entry ("av7110_ir", NULL); - av7110_unregister_irc_handler (av7110_emit_key); - input_unregister_device(&input_dev); -} - -//MODULE_AUTHOR("Holger Waechtler "); -//MODULE_LICENSE("GPL"); - -MODULE_PARM(av7110_ir_debug,"i"); -MODULE_PARM_DESC(av7110_ir_debug, "enable AV7110 IR receiver debug messages"); - diff -Nru a/drivers/media/dvb/av7110/saa7146.c b/drivers/media/dvb/av7110/saa7146.c --- a/drivers/media/dvb/av7110/saa7146.c Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,1662 +0,0 @@ -/* - the api- and os-independet parts of the saa7146 device driver - - Copyright (C) 1998,1999 Michael Hunold - - 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "saa7146_defs.h" - -#define TRUNC(val,max) ((val) < (max) ? (val) : (max)) - -#ifdef __COMPILE_SAA7146__ - -struct saa7146_modes_constants - modes_constants[] = { - { V_OFFSET_PAL, V_FIELD_PAL, V_ACTIVE_LINES_PAL, - H_OFFSET_PAL, H_PIXELS_PAL, H_PIXELS_PAL+1, - V_ACTIVE_LINES_PAL, 1024 }, /* PAL values */ - { V_OFFSET_NTSC, V_FIELD_NTSC, V_ACTIVE_LINES_NTSC, - H_OFFSET_NTSC, H_PIXELS_NTSC, H_PIXELS_NTSC+1, - V_ACTIVE_LINES_NTSC, 1024 }, /* NTSC values */ - { 0,0,0,0,0,0,0,0 }, /* secam values */ - { 0,288,576, - 0,188*4,188*4+1, - 288,188*4 } /* TS values */ -}; - -/* ----------------------------------------------------------------------------------------- - helper functions for the calculation of the horizontal- and vertical scaling registers, - clip-format-register etc ... - these functions take pointers to the (most-likely read-out original-values) and manipulate - them according to the requested new scaling parameters. - ----------------------------------------------------------------------------------------- */ - -/* hps_coeff used for CXY and CXUV; scale 1/1 -> scale 1/64 */ -struct { - u16 hps_coeff; - u16 weight_sum; -} hps_h_coeff_tab [] = { - {0x00, 2}, {0x02, 4}, {0x00, 4}, {0x06, 8}, {0x02, 8}, - {0x08, 8}, {0x00, 8}, {0x1E, 16}, {0x0E, 8}, {0x26, 8}, - {0x06, 8}, {0x42, 8}, {0x02, 8}, {0x80, 8}, {0x00, 8}, - {0xFE, 16}, {0xFE, 8}, {0x7E, 8}, {0x7E, 8}, {0x3E, 8}, - {0x3E, 8}, {0x1E, 8}, {0x1E, 8}, {0x0E, 8}, {0x0E, 8}, - {0x06, 8}, {0x06, 8}, {0x02, 8}, {0x02, 8}, {0x00, 8}, - {0x00, 8}, {0xFE, 16}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, - {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, - {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, - {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0x7E, 8}, - {0x7E, 8}, {0x3E, 8}, {0x3E, 8}, {0x1E, 8}, {0x1E, 8}, - {0x0E, 8}, {0x0E, 8}, {0x06, 8}, {0x06, 8}, {0x02, 8}, - {0x02, 8}, {0x00, 8}, {0x00, 8}, {0xFE, 16} -}; - -/* table of attenuation values for horizontal scaling */ -u8 h_attenuation[] = { 1, 2, 4, 8, 2, 4, 8, 16, 0}; - -int calculate_h_scale_registers(struct saa7146* saa, u32 in_x, u32 out_x, int flip_lr, u32* hps_ctrl, u32* hps_v_gain, u32* hps_h_prescale, u32* hps_h_scale) -{ - /* horizontal prescaler */ - u32 dcgx = 0, xpsc = 0, xacm = 0, cxy = 0, cxuv = 0; - /* horizontal scaler */ - u32 xim = 0, xp = 0, xsci =0; - /* vertical scale & gain */ - u32 pfuv = 0; - /* helper variables */ - u32 h_atten = 0, i = 0; - - if ( 0 == out_x ) { - printk("saa7146: ==> calculate_h_scale_registers: invalid value (=0).\n"); - return -EINVAL; - } - - /* mask out vanity-bit */ - *hps_ctrl &= ~MASK_29; - - /* calculate prescale-(xspc)-value: [n .. 1/2) : 1 - [1/2 .. 1/3) : 2 - [1/3 .. 1/4) : 3 - ... */ - if (in_x > out_x) { - xpsc = in_x / out_x; - } else { - /* zooming */ - xpsc = 1; - } - - /* if flip_lr-bit is set, number of pixels after horizontal prescaling must be < 384 */ - if ( 0 != flip_lr ) { - /* set vanity bit */ - *hps_ctrl |= MASK_29; - - while (in_x / xpsc >= 384 ) - xpsc++; - } - /* if zooming is wanted, number of pixels after horizontal prescaling must be < 768 */ - else { - while ( in_x / xpsc >= 768 ) - xpsc++; - } - - /* maximum prescale is 64 (p.69) */ - if ( xpsc > 64 ) - xpsc = 64; - - /* keep xacm clear*/ - xacm = 0; - - /* set horizontal filter parameters (CXY = CXUV) */ - cxy = hps_h_coeff_tab[TRUNC(xpsc - 1, 63)].hps_coeff; - cxuv = cxy; - - /* calculate and set horizontal fine scale (xsci) */ - - /* bypass the horizontal scaler ? */ - if ( (in_x == out_x) && ( 1 == xpsc ) ) - xsci = 0x400; - else - xsci = ( (1024 * in_x) / (out_x * xpsc) ) + xpsc; - - /* set start phase for horizontal fine scale (xp) to 0 */ - xp = 0; - - /* set xim, if we bypass the horizontal scaler */ - if ( 0x400 == xsci ) - xim = 1; - else - xim = 0; - - /* if the prescaler is bypassed, enable horizontal accumulation mode (xacm) - and clear dcgx */ - if( 1 == xpsc ) { - xacm = 1; - dcgx = 0; - } else { - xacm = 0; - /* get best match in the table of attenuations for horizontal scaling */ - h_atten = hps_h_coeff_tab[TRUNC(xpsc - 1, 63)].weight_sum; - - for (i = 0; h_attenuation[i] != 0; i++) { - if (h_attenuation[i] >= h_atten) - break; - } - - dcgx = i; - } - - /* the horizontal scaling increment controls the UV filter to reduce the bandwith to - improve the display quality, so set it ... */ - if ( xsci == 0x400) - pfuv = 0x00; - else if ( xsci < 0x600) - pfuv = 0x01; - else if ( xsci < 0x680) - pfuv = 0x11; - else if ( xsci < 0x700) - pfuv = 0x22; - else - pfuv = 0x33; - - - *hps_v_gain &= MASK_W0|MASK_B2; - *hps_v_gain |= (pfuv << 24); - - *hps_h_scale &= ~(MASK_W1 | 0xf000); - *hps_h_scale |= (xim << 31) | (xp << 24) | (xsci << 12); - - *hps_h_prescale |= (dcgx << 27) | ((xpsc-1) << 18) | (xacm << 17) | (cxy << 8) | (cxuv << 0); - - return 0; -} - -struct { - u16 hps_coeff; - u16 weight_sum; -} hps_v_coeff_tab [] = { - {0x0100, 2}, {0x0102, 4}, {0x0300, 4}, {0x0106, 8}, - {0x0502, 8}, {0x0708, 8}, {0x0F00, 8}, {0x011E, 16}, - {0x110E, 16}, {0x1926, 16}, {0x3906, 16}, {0x3D42, 16}, - {0x7D02, 16}, {0x7F80, 16}, {0xFF00, 16}, {0x01FE, 32}, - {0x01FE, 32}, {0x817E, 32}, {0x817E, 32}, {0xC13E, 32}, - {0xC13E, 32}, {0xE11E, 32}, {0xE11E, 32}, {0xF10E, 32}, - {0xF10E, 32}, {0xF906, 32}, {0xF906, 32}, {0xFD02, 32}, - {0xFD02, 32}, {0xFF00, 32}, {0xFF00, 32}, {0x01FE, 64}, - {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, - {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, - {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, - {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, - {0x01FE, 64}, {0x817E, 64}, {0x817E, 64}, {0xC13E, 64}, - {0xC13E, 64}, {0xE11E, 64}, {0xE11E, 64}, {0xF10E, 64}, - {0xF10E, 64}, {0xF906, 64}, {0xF906, 64}, {0xFD02, 64}, - {0xFD02, 64}, {0xFF00, 64}, {0xFF00, 64}, {0x01FE, 128} -}; - -/* table of attenuation values for vertical scaling */ -u16 v_attenuation[] = { 2, 4, 8, 16, 32, 64, 128, 256, 0}; - -int calculate_v_scale_registers(struct saa7146* saa, u32 in_y, u32 out_y, u32* hps_v_scale, u32* hps_v_gain) -{ - u32 yacm = 0, ysci = 0, yacl = 0, ypo = 0, ype = 0; /* vertical scaling */ - u32 dcgy = 0, cya_cyb = 0; /* vertical scale & gain */ - - u32 v_atten = 0, i = 0; /* helper variables */ - - /* error, if vertical zooming */ - if ( in_y < out_y ) { - printk("saa7146: ==> calculate_v_scale_registers: we cannot do vertical zooming.\n"); - return -EINVAL; - } - - /* linear phase interpolation may be used if scaling is between 1 and 1/2 - or scaling is between 1/2 and 1/4 (if interlace is set; see below) */ - if( ((2*out_y) >= in_y) || (((4*out_y) >= in_y) && saa->interlace != 0)) { - - /* convention: if scaling is between 1/2 and 1/4 we only use - the even lines, the odd lines get discarded (see function move_to) - if interlace is set */ - if( saa->interlace != 0 && (out_y*4) >= in_y && (out_y*2) <= in_y) - out_y *= 2; - - yacm = 0; - yacl = 0; - cya_cyb = 0x00ff; - - /* calculate scaling increment */ - if ( in_y > out_y ) - ysci = ((1024 * in_y) / (out_y + 1)) - 1024; - else - ysci = 0; - - dcgy = 0; - - /* calculate ype and ypo */ - if (saa->interlace !=0) { - - /* Special case for interlaced input */ - - /* See Philips SAA7146A Product Spec (page 75): */ - /* "For interlaced input, ype and ypo is defiend as */ - /* YPeven= 3/2 x YPodd (line 1 = odd)" */ - /* */ - /* It looks like the spec is wrong! */ - /* The ad hoc values below works fine for a target */ - /* window height of 480 (vertical scale = 1/1) NTSC. */ - /* PLI: December 27, 2000. */ - ypo=64; - ype=0; - } else { - ype = ysci / 16; - ypo = ype + (ysci / 64); - } - } - else { - yacm = 1; - - /* calculate scaling increment */ - ysci = (((10 * 1024 * (in_y - out_y - 1)) / in_y) + 9) / 10; - - /* calculate ype and ypo */ - ypo = ype = ((ysci + 15) / 16); - - /* the sequence length interval (yacl) has to be set according - to the prescale value, e.g. [n .. 1/2) : 0 - [1/2 .. 1/3) : 1 - [1/3 .. 1/4) : 2 - ... */ - if ( ysci < 512) { - yacl = 0; - } - else { - yacl = ( ysci / (1024 - ysci) ); - } - - /* get filter coefficients for cya, cyb from table hps_v_coeff_tab */ - cya_cyb = hps_v_coeff_tab[TRUNC(yacl, 63)].hps_coeff; - - /* get best match in the table of attenuations for vertical scaling */ - v_atten = hps_v_coeff_tab[TRUNC(yacl, 63)].weight_sum; - - for (i = 0; v_attenuation[i] != 0; i++) { - if (v_attenuation[i] >= v_atten) - break; - } - - dcgy = i; - } - - /* ypo and ype swapped in spec ? */ - *hps_v_scale |= (yacm << 31) | (ysci << 21) | (yacl << 15) | (ypo << 8 ) | (ype << 1); - - *hps_v_gain &= ~(MASK_W0|MASK_B2); - *hps_v_gain |= (dcgy << 16) | (cya_cyb << 0); - - return 0; -} - -void calculate_hxo_hyo_and_sources(struct saa7146* saa, int port_sel, int sync_sel, u32* hps_h_scale, u32* hps_ctrl) -{ - u32 hyo = 0, hxo = 0; - - hyo = modes_constants[saa->mode].v_offset; - hxo = modes_constants[saa->mode].h_offset; - - *hps_h_scale &= ~(MASK_B0 | 0xf00); - *hps_ctrl &= ~(MASK_W0 | MASK_B2 | MASK_30 | MASK_31 | MASK_28); - - *hps_h_scale |= (hxo << 0); - *hps_ctrl |= (hyo << 12); - - *hps_ctrl |= ( port_sel == 0 ? 0x0 : MASK_30); - *hps_ctrl |= ( sync_sel == 0 ? 0x0 : MASK_28); -} - -void calculate_output_format_register(struct saa7146* saa, u16 palette, u32* clip_format) -{ - /* clear out the necessary bits */ - *clip_format &= 0x0000ffff; - /* set these bits new */ - *clip_format |= (( ((palette&0xf00)>>8) << 30) | ((palette&0x00f) << 24) | (((palette&0x0f0)>>4) << 16)); -} - -void calculate_bcs_ctrl_register(struct saa7146 *saa, u32 brightness, u32 contrast, u32 colour, u32 *bcs_ctrl) -{ - *bcs_ctrl = ((brightness << 24) | (contrast << 16) | (colour << 0)); -} - - -int calculate_video_dma1_grab(struct saa7146* saa, int frame, struct saa7146_video_dma* vdma1) -{ - int depth = 0; - - switch(saa->grab_format[frame]) { - case YUV422_COMPOSED: - case RGB15_COMPOSED: - case RGB16_COMPOSED: - depth = 2; - break; - case RGB24_COMPOSED: - depth = 3; - break; - default: - depth = 4; - break; - } - - vdma1->pitch = saa->grab_width[frame]*depth*2; - vdma1->base_even = 0; - vdma1->base_odd = vdma1->base_even + (vdma1->pitch/2); - vdma1->prot_addr = (saa->grab_width[frame]*saa->grab_height[frame]*depth)-1; - vdma1->num_line_byte = ((modes_constants[saa->mode].v_field<<16) + modes_constants[saa->mode].h_pixels); - vdma1->base_page = virt_to_bus(saa->page_table[frame]) | ME1; - - /* convention: if scaling is between 1/2 and 1/4 we only use - the even lines, the odd lines get discarded (see vertical scaling) */ - if( saa->interlace != 0 && saa->grab_height[frame]*4 >= modes_constants[saa->mode].v_calc && saa->grab_height[frame]*2 <= modes_constants[saa->mode].v_calc) { - vdma1->base_odd = vdma1->prot_addr; - vdma1->pitch /= 2; - } - - return 0; -} - -/* ---------------------------------------------*/ -/* position of overlay-window */ -/* ---------------------------------------------*/ - -/* calculate the new memory offsets for a desired position */ -int move_to(struct saa7146* saa, int w_x, int w_y, int w_height, int b_width, int b_depth, int b_bpl, u32 base, int td_flip) -{ - struct saa7146_video_dma vdma1; - - if( w_y < 0 || w_height <= 0 || b_depth <= 0 || b_bpl <= 0 || base == 0 ) { - printk("saa7146: ==> calculate_video_dma1_overlay: illegal values: y: %d h: %d d: %d b: %d base: %d\n",w_y ,w_height,b_depth,b_bpl,base); - return -EINVAL; - } - - /* calculate memory offsets for picture, look if we shall top-down-flip */ - vdma1.pitch = 2*b_bpl; - if ( 0 == td_flip ) { - vdma1.prot_addr = (u32)base + ((w_height+w_y+1)*b_width*(b_depth/4)); - vdma1.base_even = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); - vdma1.base_odd = vdma1.base_even + (vdma1.pitch / 2); - } - else { - vdma1.prot_addr = (u32)base + (w_y * (vdma1.pitch/2)); - vdma1.base_even = (u32)base + ((w_y+w_height) * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); - vdma1.base_odd = vdma1.base_even + (vdma1.pitch / 2); - vdma1.pitch *= -1; - } - - /* convention: if scaling is between 1/2 and 1/4 we only use - the even lines, the odd lines get discarded (see vertical scaling) */ - if( saa->interlace != 0 && w_height*4 >= modes_constants[saa->mode].v_calc && w_height*2 <= modes_constants[saa->mode].v_calc) { - vdma1.base_odd = vdma1.prot_addr; - vdma1.pitch /= 2; - } - - vdma1.base_page = 0; - vdma1.num_line_byte = (modes_constants[saa->mode].v_field<<16)+modes_constants[saa->mode].h_pixels; - - saa7146_write(saa->mem, BASE_EVEN1, vdma1.base_even); - saa7146_write(saa->mem, BASE_ODD1, vdma1.base_odd); - saa7146_write(saa->mem, PROT_ADDR1, vdma1.prot_addr); - saa7146_write(saa->mem, BASE_PAGE1, vdma1.base_page); - saa7146_write(saa->mem, PITCH1, vdma1.pitch); - saa7146_write(saa->mem, NUM_LINE_BYTE1, vdma1.num_line_byte); - - /* update the video dma 1 registers */ - saa7146_write(saa->mem, MC2, (MASK_02 | MASK_18)); - - return 0; - -} - -/* ---------------------------------------------*/ -/* size of window (overlay) */ -/* ---------------------------------------------*/ - -int set_window(struct saa7146* saa, int width, int height, int flip_lr, int port_sel, int sync_sel) -{ - u32 hps_v_scale = 0, hps_v_gain = 0, hps_ctrl = 0, hps_h_prescale = 0, hps_h_scale = 0; - - /* set vertical scale according to selected mode: 0 = PAL, 1 = NTSC */ - hps_v_scale = 0; /* all bits get set by the function-call */ - hps_v_gain = 0; /* fixme: saa7146_read(saa->mem, HPS_V_GAIN);*/ - calculate_v_scale_registers(saa, modes_constants[saa->mode].v_calc, height, &hps_v_scale, &hps_v_gain); - - /* set horizontal scale according to selected mode: 0 = PAL, 1 = NTSC */ - hps_ctrl = 0; - hps_h_prescale = 0; /* all bits get set in the function */ - hps_h_scale = 0; - calculate_h_scale_registers(saa, modes_constants[saa->mode].h_calc, width, 0, &hps_ctrl, &hps_v_gain, &hps_h_prescale, &hps_h_scale); - - /* set hyo and hxo */ - calculate_hxo_hyo_and_sources(saa, port_sel, sync_sel, &hps_h_scale, &hps_ctrl); - - /* write out new register contents */ - saa7146_write(saa->mem, HPS_V_SCALE, hps_v_scale); - saa7146_write(saa->mem, HPS_V_GAIN, hps_v_gain); - saa7146_write(saa->mem, HPS_CTRL, hps_ctrl); - saa7146_write(saa->mem, HPS_H_PRESCALE,hps_h_prescale); - saa7146_write(saa->mem, HPS_H_SCALE, hps_h_scale); - - /* upload shadow-ram registers */ - saa7146_write( saa->mem, MC2, (MASK_05 | MASK_06 | MASK_21 | MASK_22) ); - -/* - printk("w:%d,h:%d\n",width,height); -*/ - return 0; - -} - -void set_output_format(struct saa7146* saa, u16 palette) -{ - u32 clip_format = saa7146_read(saa->mem, CLIP_FORMAT_CTRL); - - dprintk("saa7146: ==> set_output_format: pal:0x%03x\n",palette); - - /* call helper function */ - calculate_output_format_register(saa,palette,&clip_format); - dprintk("saa7146: ==> set_output_format: 0x%08x\n",clip_format); - - /* update the hps registers */ - saa7146_write(saa->mem, CLIP_FORMAT_CTRL, clip_format); - saa7146_write(saa->mem, MC2, (MASK_05 | MASK_21)); -} - -void set_picture_prop(struct saa7146 *saa, u32 brightness, u32 contrast, u32 colour) -{ - u32 bcs_ctrl = 0; - - calculate_bcs_ctrl_register(saa, brightness, contrast, colour, &bcs_ctrl); - saa7146_write(saa->mem, BCS_CTRL, bcs_ctrl); - - /* update the bcs register */ - saa7146_write(saa->mem, MC2, (MASK_06 | MASK_22)); -} - -/* ---------------------------------------------*/ -/* overlay enable/disable */ -/* ---------------------------------------------*/ - -/* enable(1) / disable(0) video */ -void video_setmode(struct saa7146* saa, int v) -{ - hprintk("saa7146: ==> video_setmode; m:%d\n",v); - - /* disable ? */ - if(v==0) { - /* disable video dma1 */ - saa7146_write(saa->mem, MC1, MASK_22); - } else {/* or enable ? */ - /* fixme: enable video */ - saa7146_write(saa->mem, MC1, (MASK_06 | MASK_22)); - } -} - -/* ----------------------------------------------------- - common grabbing-functions. if you have some simple - saa7146-based frame-grabber you can most likely call - these. they do all the revision-dependend stuff and - do rps/irq-based grabbing for you. - -----------------------------------------------------*/ - -/* this function initializes the rps for the next grab for any "old" - saa7146s (= revision 0). it assumes that the rps is *not* running - when it gets called. */ -int init_rps0_rev0(struct saa7146* saa, int frame, int irq_call) -{ - struct saa7146_video_dma vdma1; - u32 hps_v_scale = 0, hps_v_gain = 0, hps_ctrl = 0, hps_h_prescale = 0, hps_h_scale = 0; - u32 clip_format = 0; /* this can be 0, since we don't do clipping */ - u32 bcs_ctrl = 0; - - int count = 0; - -/* these static values are used to remember the last "programming" of the rps. - if the height, width and format of the grab has not changed (which is very likely - when some streaming capture is done) the reprogramming overhead can be minimized */ -static int last_height = 0; -static int last_width = 0; -static int last_format = 0; -static int last_port = 0; -static int last_frame = -1; - - /* write the address of the rps-program */ - saa7146_write(saa->mem, RPS_ADDR0, virt_to_bus(&saa->rps0[ 0])); - - /* let's check if we can re-use something of the last grabbing process */ - if ( saa->grab_height[frame] != last_height - || saa->grab_width[frame] != last_width - || saa->grab_port[frame] != last_port - || saa->grab_format[frame] != last_format ) { - - /* nope, we have to start from the beginning */ - calculate_video_dma1_grab(saa, frame, &vdma1); - calculate_v_scale_registers(saa, modes_constants[saa->mode].v_calc, saa->grab_height[frame], &hps_v_scale, &hps_v_gain); - calculate_h_scale_registers(saa, modes_constants[saa->mode].h_calc, saa->grab_width[frame], 0, &hps_ctrl, &hps_v_gain, &hps_h_prescale, &hps_h_scale); - calculate_hxo_hyo_and_sources(saa, saa->grab_port[frame], saa->grab_port[frame], &hps_h_scale, &hps_ctrl); - calculate_output_format_register(saa,saa->grab_format[frame],&clip_format); - calculate_bcs_ctrl_register(saa, 0x80, 0x40, 0x40, &bcs_ctrl); - - count = 0; - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG_MASK | (MC1/4)); /* turn off video-dma1 and dma2 (clipping)*/ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22 | MASK_05 | MASK_21); /* => mask */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_22 | MASK_21); /* => values */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | ( saa->grab_port[frame] == 0 ? MASK_12 : MASK_14)); /* wait for o_fid_a/b */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | ( saa->grab_port[frame] == 0 ? MASK_11 : MASK_13)); /* wait for e_fid_a/b */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (6 << 8) | HPS_CTRL/4); /* upload hps-registers for next grab */ - saa->rps0[ count++ ] = cpu_to_le32(hps_ctrl); - saa->rps0[ count++ ] = cpu_to_le32(hps_v_scale); - saa->rps0[ count++ ] = cpu_to_le32(hps_v_gain); - saa->rps0[ count++ ] = cpu_to_le32(hps_h_prescale); - saa->rps0[ count++ ] = cpu_to_le32(hps_h_scale); - saa->rps0[ count++ ] = cpu_to_le32(bcs_ctrl); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (1 << 8) | CLIP_FORMAT_CTRL/4);/* upload hps-registers for next grab */ - saa->rps0[ count++ ] = cpu_to_le32(clip_format); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_UPLOAD | MASK_05 | MASK_06); /* upload hps1/2 */ - - /* upload video-dma1 registers for next grab */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (6 << 8) | BASE_ODD1/4); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.base_odd); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.base_even); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.prot_addr); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.pitch); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.base_page); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.num_line_byte); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_UPLOAD | MASK_02); /* upload video-dma1 */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG_MASK | (MC1/4)); /* turn on video-dma1 */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22); /* => mask */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22); /* => values */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (1 << 8) | (MC2/4)); /* Write MC2 */ - saa->rps0[ count++ ] = cpu_to_le32((1 << (27+frame)) | (1 << (11+frame))); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | ( saa->grab_port[frame] == 0 ? MASK_12 : MASK_14)); /* wait for o_fid_a/b */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | ( saa->grab_port[frame] == 0 ? MASK_11 : MASK_13)); /* wait for e_fid_a/b */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG_MASK | (MC1/4)); /* turn off video-dma1 */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22); /* => mask */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_22); /* => values */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_INTERRUPT); /* generate interrupt */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_STOP); /* stop processing */ - } else { - - /* the height, width, ... have not changed. check if the user wants to grab to - another *buffer* */ - if( frame != last_frame ) { - - /* ok, we want to grab to another buffer, but with the same programming. - it is sufficient to adjust the video_dma1-registers and the rps-signal stuff. */ - saa->rps0[ 20 ] = cpu_to_le32(virt_to_bus(saa->page_table[frame]) | ME1); - saa->rps0[ 27 ] = cpu_to_le32((1 << (27+frame)) | (1 << (11+frame))); - - } - } - - /* if we are called from within the irq-handler, the hps is at the beginning of a - new frame. the rps does not need to wait the new frame, and so we tweak the - starting address a little bit and so we can directly start grabbing again. - note: for large video-sizes and slow computers this can cause jaggy pictures - because the whole process is not in sync. perhaps one should be able to - disable this. (please remember that this whole stuff only belongs to - "old" saa7146s (= revision 0), newer saa7146s don´t have any hardware-bugs - and capture works fine. (see below) */ - if( 1 == irq_call ) { - saa7146_write(saa->mem, RPS_ADDR0, virt_to_bus(&saa->rps0[15])); - } - - /* turn on rps */ - saa7146_write(saa->mem, MC1, (MASK_12 | MASK_28)); - - /* store the values for the last grab */ - last_height = saa->grab_height[frame]; - last_width = saa->grab_width[frame]; - last_format = saa->grab_format[frame]; - last_port = saa->grab_port[frame]; - last_frame = frame; - - return 0; -} - -int init_rps0_rev1(struct saa7146* saa, int frame) { - -static int old_width[SAA7146_MAX_BUF]; /* pixel width of grabs */ -static int old_height[SAA7146_MAX_BUF]; /* pixel height of grabs */ -static int old_format[SAA7146_MAX_BUF]; /* video format of grabs */ -static int old_port[SAA7146_MAX_BUF]; /* video port for grab */ - -static int buf_stat[SAA7146_MAX_BUF]; - - struct saa7146_video_dma vdma1; - u32 hps_v_scale = 0, hps_v_gain = 0, hps_ctrl = 0, hps_h_prescale = 0, hps_h_scale = 0; - u32 clip_format = 0; /* this can be 0, since we don't do clipping */ - u32 bcs_ctrl = 0; - - int i = 0, count = 0; - - /* check if something has changed since the last grab for this buffer */ - if ( saa->grab_height[frame] == old_height[frame] - && saa->grab_width[frame] == old_width[frame] - && saa->grab_port[frame] == old_port[frame] - && saa->grab_format[frame] == old_format[frame] ) { - - /* nope, nothing to be done here */ - return 0; - } - - /* re-program the rps0 completely */ - - /* indicate that the user has requested re-programming of the 'frame'-buffer */ - buf_stat[frame] = 1; - - /* turn off rps */ - saa7146_write(saa->mem, MC1, MASK_28); - - - /* write beginning of rps-program */ - count = 0; - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | MASK_12); /* wait for o_fid_a */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | MASK_11); /* wait for e_fid_a */ - for(i = 0; i < saa->buffers; i++) { - saa->rps0[ count++ ] = cpu_to_le32(CMD_JUMP | (1 << (21+i))); /* check signal x, jump if set */ - saa->rps0[ count++ ] = cpu_to_le32(virt_to_bus(&saa->rps0[40*(i+1)])); - } - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | MASK_12); /* wait for o_fid_a */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | MASK_11); /* wait for e_fid_a */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_JUMP); /* jump to the beginning */ - saa->rps0[ count++ ] = cpu_to_le32(virt_to_bus(&saa->rps0[2])); - - for(i = 0; i < saa->buffers; i++) { - - /* we only re-program the i-th buffer if the user had set some values for it earlier. - otherwise the calculation-functions may fail. */ - if( buf_stat[i] == 0) - continue; - - count = 40*(i+1); - - calculate_video_dma1_grab(saa, i, &vdma1); - calculate_v_scale_registers(saa, modes_constants[saa->mode].v_calc, saa->grab_height[i], &hps_v_scale, &hps_v_gain); - calculate_h_scale_registers(saa, modes_constants[saa->mode].h_calc, saa->grab_width[i], 0, &hps_ctrl, &hps_v_gain, &hps_h_prescale, &hps_h_scale); - calculate_hxo_hyo_and_sources(saa, saa->grab_port[i], saa->grab_port[i], &hps_h_scale, &hps_ctrl); - calculate_output_format_register(saa,saa->grab_format[i],&clip_format); - calculate_bcs_ctrl_register(saa, 0x80, 0x40, 0x40, &bcs_ctrl); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (6 << 8) | HPS_CTRL/4); /* upload hps-registers for next grab */ - saa->rps0[ count++ ] = cpu_to_le32(hps_ctrl); - saa->rps0[ count++ ] = cpu_to_le32(hps_v_scale); - saa->rps0[ count++ ] = cpu_to_le32(hps_v_gain); - saa->rps0[ count++ ] = cpu_to_le32(hps_h_prescale); - saa->rps0[ count++ ] = cpu_to_le32(hps_h_scale); - saa->rps0[ count++ ] = cpu_to_le32(bcs_ctrl); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (1 << 8) | CLIP_FORMAT_CTRL/4);/* upload hps-registers for next grab */ - saa->rps0[ count++ ] = cpu_to_le32(clip_format); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_UPLOAD | MASK_05 | MASK_06); /* upload hps1/2 */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (6 << 8) | BASE_ODD1/4); /* upload video-dma1 registers for next grab */ - saa->rps0[ count++ ] = cpu_to_le32(vdma1.base_odd); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.base_even); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.prot_addr); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.pitch); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.base_page); - saa->rps0[ count++ ] = cpu_to_le32(vdma1.num_line_byte); - - saa->rps0[ count++ ] = cpu_to_le32(CMD_UPLOAD | MASK_02); /* upload video-dma1 */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG_MASK | (MC1/4)); /* turn on video-dma1 */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22); /* => mask */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22); /* => values */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | ( saa->grab_port[i] == 0 ? MASK_12 : MASK_14)); /* wait for o_fid_a/b */ - saa->rps0[ count++ ] = cpu_to_le32(CMD_PAUSE | ( saa->grab_port[i] == 0 ? MASK_11 : MASK_13)); /* wait for e_fid_a/b */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG_MASK | (MC1/4)); /* turn off video-dma1 and dma2 (clipping)*/ - saa->rps0[ count++ ] = cpu_to_le32(MASK_06 | MASK_22 | MASK_05 | MASK_21); /* => mask */ - saa->rps0[ count++ ] = cpu_to_le32(MASK_22 | MASK_21); /* => values */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_WR_REG | (1 << 8) | (MC2/4)); /* Write MC2 */ - saa->rps0[ count++ ] = cpu_to_le32((1 << (27+i))); - saa->rps0[ count++ ] = cpu_to_le32(CMD_INTERRUPT); /* generate interrupt */ - - saa->rps0[ count++ ] = cpu_to_le32(CMD_JUMP); /* jump to the beginning */ - saa->rps0[ count++ ] = cpu_to_le32(virt_to_bus(&saa->rps0[2])); - - old_height[frame] = saa->grab_height[frame]; - old_width[frame] = saa->grab_width[frame]; - old_port[frame] = saa->grab_port[frame]; - old_format[frame] = saa->grab_format[frame]; - } - - /* write the address of the rps-program */ - saa7146_write(saa->mem, RPS_ADDR0, virt_to_bus(&saa->rps0[ 0])); - /* turn on rps again */ - saa7146_write(saa->mem, MC1, (MASK_12 | MASK_28)); - - return 0; -} - -/* this funtion is called whenever a new grab is requested. if possible (that - means: if the rps is not running) it re-programs the rps, otherwise it relys on - the irq-handler to do that */ -int set_up_grabbing(struct saa7146* saa, int frame) -{ - u32 mc1 = 0; - - if( 0 == saa->revision ) { - - /* check if the rps is currently in use */ - mc1 = saa7146_read(saa->mem, MC1); - - /* the rps is not running ... */ - if( 0 == ( mc1 & MASK_12) ) { - - /* we can completly re-program the rps now */ - dprintk("saa7146_v4l.o: ==> set_up_grabbing: start new rps.\n"); - init_rps0_rev0(saa,frame,0); - } else { - - /* the rps is running. in this case, the irq-handler is responsible for - re-programming the rps and nothing can be done right now */ - dprintk("saa7146_v4l.o: ==> set_up_grabbing: no new rps started.\n"); - } - } else { - /* check if something has changed, reprogram if necessary */ - init_rps0_rev1(saa,frame); - /* set rps-signal-bit to start grabbing */ - saa7146_write(saa->mem, MC2, (1 << (27+frame)) | (1 << (11+frame))); - } - - return 0; -} - - -void saa7146_std_grab_irq_callback_rps0(struct saa7146* saa, u32 isr, void* data) -{ - u32 mc2 = 0; - int i = 0; - - hprintk("saa7146_v4l.o: ==> saa7146_v4l_irq_callback_rps0\n"); - - /* check for revision: old revision */ - if( 0 == saa->revision ) { - - /* look what buffer has been grabbed, set the ´done´-flag and clear the signal */ - mc2 = saa7146_read(saa->mem, MC2); - for( i = 0; i < saa->buffers; i++ ) { - - if ((0 != (mc2 & (1 << (11+i)))) && (GBUFFER_GRABBING == saa->frame_stat[i])) { - saa->frame_stat[i] = GBUFFER_DONE; - saa7146_write(saa->mem, MC2, (1<<(27+i))); - } - } - - /* look if there is another buffer we can grab to */ - for( i = 0; i < saa->buffers; i++ ) { - if ( GBUFFER_GRABBING == saa->frame_stat[i] ) - break; - } - - /* yes, then set up the rps again */ - if( saa->buffers != i) { - init_rps0_rev0(saa,i,1); - } - } else { - /* new revisions */ - - /* look what buffer has been grabbed, set the ´done´-flag */ - mc2 = saa7146_read(saa->mem, MC2); - for( i = 0; i < saa->buffers; i++ ) { - - if ((0 == (mc2 & (1 << (11+i)))) && (GBUFFER_GRABBING == saa->frame_stat[i])) { - saa->frame_stat[i] = GBUFFER_DONE; - } - } - - } - /* notify any pending process */ - wake_up_interruptible(&saa->rps0_wq); - return; -} - -/* ---------------------------------------------*/ -/* mask-clipping */ -/* ---------------------------------------------*/ -int calculate_clipping_registers_mask(struct saa7146* saa, u32 width, u32 height, struct saa7146_video_dma* vdma2, u32* clip_format, u32* arbtr_ctrl) -{ - u32 clip_addr = 0, clip_pitch = 0; - - dprintk("saa7146: ==> calculate_clipping_registers_mask\n"); - - /* adjust arbitration control register */ - *arbtr_ctrl &= 0xffff00ff; - *arbtr_ctrl |= 0x00001000; - - clip_addr = virt_to_bus(saa->clipping); - clip_pitch = ((width+31)/32)*4; - - vdma2->base_even = clip_addr; - vdma2->base_page = 0x04; /* enable read - operation */ - vdma2->prot_addr = clip_addr + (clip_pitch*height); - - /* convention: if scaling is between 1/2 and 1/4 we only use - the even lines, the odd lines get discarded (see vertical scaling) */ - if( saa->interlace != 0 && height*4 >= modes_constants[saa->mode].v_calc && height*2 <= modes_constants[saa->mode].v_calc) { - vdma2->base_odd = vdma2->prot_addr; - vdma2->pitch = clip_pitch; - vdma2->num_line_byte = (((height)-1) << 16) | (clip_pitch-1); - } else { - vdma2->base_odd = clip_addr+clip_pitch; - vdma2->pitch = clip_pitch*2; - vdma2->num_line_byte = (((height/2)-1) << 16) | (clip_pitch-1); - } - - *clip_format &= 0xfffffff7; - - return 0; -} - -/* helper functions for emulate rect-clipping via mask-clipping. - note: these are extremely inefficient, but for clipping with less than 16 - windows rect-clipping should be done anyway... -*/ - -/* clear one pixel of the clipping memory at position (x,y) */ -void set_pixel(s32 x, s32 y, s32 window_width, u32* mem) { - - u32 mem_per_row = 0; - u32 adr = 0; - u32 shift = 0; - u32 bit = 0; - - mem_per_row = (window_width + 31 )/ 32 ; - adr = y * mem_per_row + (x / 32); - shift = 31 - (x % 32); - bit = (1 << shift); - - mem[adr] |= bit; -} - -/* clear a box out of the clipping memory, beginning at (x,y) with "width" and "height" */ -void set_box(s32 x, s32 y, s32 width, s32 height, s32 window_width, s32 window_height, u32* mem) -{ - s32 ty = 0; - s32 tx = 0; - - /* the video_clip-struct may contain negative values to indicate that a window - doesn't lay completly over the video window. Thus, we correct the values */ - - if( width < 0) { - x += width; width = -width; - } - if( height < 0) { - y += height; height = -height; - } - - if( x < 0) { - width += x; x = 0; - } - if( y < 0) { - height += y; y = 0; - } - - if( width <= 0 || height <= 0) { - printk("saa7146: ==> set_box: sanity error!\n"); - return; - } - - if(x + width > window_width) - width -= (x + width) - window_width; - if(y + height > window_height) - height -= (y + height) - window_height; - - /* Now, set a '1' in the memory, where no video picture should appear */ - for(ty = y; ty < y+height; ty++) { - for(tx = x; tx < x+width; tx++) { - set_pixel(tx, ty, window_width, mem); - } - } -} - -int emulate_rect_clipping(struct saa7146 *saa, u16 clipcount, int x[], int y[], int w[], int h[], u32 w_width, u32 w_height) -{ - int i = 0; - - /* clear out clipping mem */ - memset(saa->clipping, 0x0, CLIPPING_MEM_SIZE*sizeof(u32)); - - /* go through list of clipping-windows, clear out rectangular-regions in the clipping memory */ - for(i = 0; i < clipcount; i++) { - set_box(x[i], y[i], w[i], h[i], w_width, w_height, saa->clipping); - } - - return 0; -} - -/* ---------------------------------------------*/ -/* rectangle-clipping */ -/* ---------------------------------------------*/ - -#define MIN(x,y) ( ((x) < (y)) ? (x) : (y) ) -#define MAX(x,y) ( ((x) > (y)) ? (x) : (y) ) - -/* simple double-sort algorithm with duplicate elimination */ -int sort_and_eliminate(u32* values, int* count) -{ - int low = 0, high = 0, top = 0, temp = 0; - int cur = 0, next = 0; - - /* sanity checks */ - if( (0 > *count) || (NULL == values) ) { - printk("saa7146: ==> sort_and_eliminate: internal error #1\n"); - return -EINVAL; - } - - /* bubble sort the first ´count´ items of the array ´values´ */ - for( top = *count; top > 0; top--) { - for( low = 0, high = 1; high < top; low++, high++) { - if( values[low] > values[high] ) { - temp = values[low]; - values[low] = values[high]; - values[high] = temp; - } - } - } - - /* remove duplicate items */ - for( cur = 0, next = 1; next < *count; next++) { - if( values[cur] != values[next]) - values[++cur] = values[next]; - } - - *count = cur + 1; - - return 0; -} - -int calculate_clipping_registers_rect(struct saa7146 *saa, int clipcount, int x[], int y[], int w[], int h[], u32 width, u32 height, struct saa7146_video_dma* vdma2, u32* clip_format, u32* arbtr_ctrl) -{ - u32 line_list[32]; - u32 pixel_list[32]; - u32 numdwords = 0; - - int i = 0, j = 0; - int l = 0, r = 0, t = 0, b = 0; - int cnt_line = 0, cnt_pixel = 0; - - dprintk("saa7146: ==> calculate_clipping_registers_clip\n"); - - /* clear out memory */ - memset(&line_list[0], 0x00, sizeof(u32)*32); - memset(&pixel_list[0], 0x00, sizeof(u32)*32); - memset(saa->clipping, 0x00, sizeof(u32)*CLIPPING_MEM_SIZE); - - /* fill the line and pixel-lists */ - for(i = 0; i < clipcount; i++) { - - /* calculate values for l(eft), r(ight), t(op), b(ottom) */ - l = x[i]; - r = x[i]+w[i]; - t = y[i]; - b = y[i]+h[i]; - - /* insert left/right coordinates */ - pixel_list[ 2*i ] = MIN(l, width); - pixel_list[(2*i)+1] = MIN(r, width); - /* insert top/bottom coordinates */ - line_list[ 2*i ] = MIN(t, height); - line_list[(2*i)+1] = MIN(b, height); - } - - /* sort and eliminate lists */ - cnt_line = cnt_pixel = 2*clipcount; - sort_and_eliminate( &pixel_list[0], &cnt_pixel ); - sort_and_eliminate( &line_list[0], &cnt_line ); - - /* calculate the number of used u32s */ - numdwords = MAX( (cnt_line+1), (cnt_pixel+1))*2; - numdwords = MAX(4, numdwords); - numdwords = MIN(64, numdwords); - - /* fill up cliptable */ - for(i = 0; i < cnt_pixel; i++) { - saa->clipping[2*i] |= (pixel_list[i] << 16); - } - for(i = 0; i < cnt_line; i++) { - saa->clipping[(2*i)+1] |= (line_list[i] << 16); - } - - /* fill up cliptable with the display infos */ - for(j = 0; j < clipcount; j++) { - - for(i = 0; i < cnt_pixel; i++) { - - if( x[j] < 0) - x[j] = 0; - - if( pixel_list[i] < (x[j] + w[j])) { - - if ( pixel_list[i] >= x[j] ) { - saa->clipping[2*i] |= (1 << j); - } - } - } - for(i = 0; i < cnt_line; i++) { - - if( y[j] < 0) - y[j] = 0; - - if( line_list[i] < (y[j] + h[j]) ) { - - if( line_list[i] >= y[j] ) { - saa->clipping[(2*i)+1] |= (1 << j); - } - } - } - } - - /* adjust arbitration control register */ - *arbtr_ctrl &= 0xffff00ff; - *arbtr_ctrl |= 0x00001c00; - - vdma2->base_even = virt_to_bus(saa->clipping); - vdma2->base_odd = virt_to_bus(saa->clipping); - vdma2->prot_addr = virt_to_bus(saa->clipping)+((sizeof(u32))*(numdwords)); - vdma2->base_page = 0x04; - vdma2->pitch = 0x00; - vdma2->num_line_byte = (0 << 16 | (sizeof(u32))*(numdwords-1) ); - - /* set clipping-mode. please note again, that for sizes below 1/2, we only use the - even-field. because of this, we have to specify ´recinterl´ correctly (specs, p. 97)*/ - *clip_format &= 0xfffffff7; - - if( saa->interlace != 0 && height*4 >= modes_constants[saa->mode].v_calc && height*2 <= modes_constants[saa->mode].v_calc) { - *clip_format |= 0x00000000; - } else { - *clip_format |= 0x00000008; - } - return 0; -} - - -/* ---------------------------------------------*/ -/* main function for clipping */ -/* ---------------------------------------------*/ -/* arguments: - type = see ´saa7146.h´ - width = width of the video-window - height = height of the video-window - *mask = pointer to mask memory (only needed for mask-clipping) - *clips = pointer to clip-window-list (only needed for rect-clipping) - clipcount = # of clip-windows (only needed for rect-clipping) -*/ -int clip_windows(struct saa7146* saa, u32 type, u32 width, u32 height, u32* mask, u16 clipcount, int x[], int y[], int w[], int h[]) -{ - struct saa7146_video_dma vdma2; - - u32 clip_format = saa7146_read(saa->mem, CLIP_FORMAT_CTRL); - u32 arbtr_ctrl = saa7146_read(saa->mem, PCI_BT_V1); - - hprintk("saa7146: ==> clip_windows\n"); - - /* some sanity checks first */ - if ( width <= 0 || height <= 0 ) { - printk("saa7146: ==> clip_windows: sanity error #1!\n"); - return -EINVAL; - } - - /* check if anything to do here, disable clipping if == 0 */ - if( clipcount == 0 ) { - - /* mask out relevant bits (=lower word)*/ - clip_format &= MASK_W1; - - /* upload clipping-registers*/ - saa7146_write(saa->mem, CLIP_FORMAT_CTRL,clip_format); - saa7146_write(saa->mem, MC2, (MASK_05 | MASK_21)); - - /* disable video dma2 */ - saa7146_write(saa->mem, MC1, (MASK_21)); - - return 0; - } - - switch(type) { - - case SAA7146_CLIPPING_MASK_INVERTED: - case SAA7146_CLIPPING_MASK: - { - printk("mask\n"); - /* sanity check */ - if( NULL == mask ) { - printk("saa7146: ==> clip_windows: sanity error #1!\n"); - return -EINVAL; - } - - /* copy the clipping mask to structure */ - memmove(saa->clipping, mask, CLIPPING_MEM_SIZE*sizeof(u32)); - /* set clipping registers */ - calculate_clipping_registers_mask(saa,width,height,&vdma2,&clip_format,&arbtr_ctrl); - - break; - } - - case SAA7146_CLIPPING_RECT_INVERTED: - case SAA7146_CLIPPING_RECT: - { - /* see if we have anything to do */ - if ( 0 == clipcount ) { - return 0; - } - - /* sanity check */ - if( NULL == x || NULL == y || NULL == w || NULL == h ) { - printk("saa7146: ==> clip_windows: sanity error #2!\n"); - return -EINVAL; - } - - /* rectangle clipping can only handle 16 overlay windows; if we - have more, we have do emulate the whole thing with mask-clipping */ - if (1) { //clipcount > > 16 ) { - //printk("emulate\n"); - emulate_rect_clipping(saa, clipcount, x,y,w,h, width, height); - calculate_clipping_registers_mask(saa,width,height,&vdma2,&clip_format,&arbtr_ctrl); - if( SAA7146_CLIPPING_RECT == type ) - type = SAA7146_CLIPPING_MASK; - else - type = SAA7146_CLIPPING_MASK_INVERTED; - - } - else { - calculate_clipping_registers_rect(saa,clipcount,x,y,w,h,width,height,&vdma2,&clip_format,&arbtr_ctrl); - } - - break; - } - - default: - { - printk("saa7146: ==> clip_windows: internal error #1!\n"); - return -EINVAL; - } - - } - - /* set clipping format */ - clip_format &= 0xffff0008; - clip_format |= (type << 4); - - saa7146_write(saa->mem, BASE_EVEN2, vdma2.base_even); - saa7146_write(saa->mem, BASE_ODD2, vdma2.base_odd); - saa7146_write(saa->mem, PROT_ADDR2, vdma2.prot_addr); - saa7146_write(saa->mem, BASE_PAGE2, vdma2.base_page); - saa7146_write(saa->mem, PITCH2, vdma2.pitch); - saa7146_write(saa->mem, NUM_LINE_BYTE2, vdma2.num_line_byte); - - saa7146_write(saa->mem, CLIP_FORMAT_CTRL,clip_format); - saa7146_write(saa->mem, PCI_BT_V1, arbtr_ctrl); - - /* upload clip_control-register, clipping-registers, enable video dma2 */ - saa7146_write(saa->mem, MC2, (MASK_05 | MASK_21 | MASK_03 | MASK_19)); - saa7146_write(saa->mem, MC1, (MASK_05 | MASK_21)); -/* - printk("ARBTR_CTRL: 0x%08x\n",saa7146_read(saa->mem, PCI_BT_V1)); - printk("CLIP_FORMAT: 0x%08x\n",saa7146_read(saa->mem, CLIP_FORMAT_CTRL)); - printk("BASE_ODD1: 0x%08x\n",saa7146_read(saa->mem, BASE_ODD1)); - printk("BASE_EVEN1: 0x%08x\n",saa7146_read(saa->mem, BASE_EVEN1)); - printk("PROT_ADDR1: 0x%08x\n",saa7146_read(saa->mem, PROT_ADDR1)); - printk("PITCH1: 0x%08x\n",saa7146_read(saa->mem, PITCH1)); - printk("BASE_PAGE1: 0x%08x\n",saa7146_read(saa->mem, BASE_PAGE1)); - printk("NUM_LINE_BYTE1: 0x%08x\n",saa7146_read(saa->mem, NUM_LINE_BYTE1)); - printk("BASE_ODD2: 0x%08x\n",saa7146_read(saa->mem, BASE_ODD2)); - printk("BASE_EVEN2: 0x%08x\n",saa7146_read(saa->mem, BASE_EVEN2)); - printk("PROT_ADDR2: 0x%08x\n",saa7146_read(saa->mem, PROT_ADDR2)); - printk("PITCH2: 0x%08x\n",saa7146_read(saa->mem, PITCH2)); - printk("BASE_PAGE2: 0x%08x\n",saa7146_read(saa->mem, BASE_PAGE2)); - printk("NUM_LINE_BYTE2: 0x%08x\n",saa7146_read(saa->mem, NUM_LINE_BYTE2)); -*/ - return 0; - -} -#endif - -#ifdef __COMPILE_SAA7146_I2C__ - -/* ---------------------------------------------*/ -/* i2c-helper functions */ -/* ---------------------------------------------*/ - -/* this functions gets the status from the saa7146 at address 'addr' - and returns it */ -u32 i2c_status_check(struct saa7146* saa) -{ - u32 iicsta = 0; - - iicsta = saa7146_read(saa->mem, I2C_STATUS ); - hprintk("saa7146: ==> i2c_status_check:0x%08x\n",iicsta); - - return iicsta; -} - -/* this function should be called after an i2c-command has been written. - if we are debugging, it checks, if the busy flags rises and falls correctly - and reports a timeout (-1) or the error-bits set like in described in the specs, - p.123, table 110 */ -int i2c_busy_rise_and_fall(struct saa7146* saa, int timeout) -{ - int i = 0; - u32 status = 0; - - hprintk("saa7146: ==> i2c_busy_rise_and_fall\n"); - - /* wait until busy-flag rises */ - for (i = 5; i > 0; i--) { - - hprintk("saa7146: i2c_busy_rise_and_fall; rise wait %d\n",i); - - status = i2c_status_check(saa); - - /* check busy flag */ - if ( 0 != (status & SAA7146_I2C_BUSY)) - break; - - /* see if anything can be done while we're waiting */ - cond_resched (); - mdelay(1); - } - - /* we don't check the i-value, since it does not matter - if we missed the rise of the busy flag or the fall or - whatever. we just have to wait some undefined time - after an i2c-command has been written out */ - - /* wait until busy-flag is inactive or error is reported */ - for (i = timeout; i > 0; i--) { - - hprintk("saa7146: i2c_busy_rise_and_fall; fall wait %d\n",i); - - status = i2c_status_check(saa); - - /* check busy flag */ - if ( 0 == (status & SAA7146_I2C_BUSY)) - break; - - /* check error flag */ - if ( 0 != (status & SAA7146_I2C_ERR)) - break; - - /* see if anything can be done while we're waiting */ - cond_resched (); - - mdelay(1); - } - - /* did a timeout occur ? */ - if ( 0 == i ) { - hprintk("saa7146: i2c_busy_rise_and_fall: timeout #2\n"); - return -1; - } - - /* report every error pending */ - switch( status & 0xfc ) { - - case SAA7146_I2C_SPERR: - hprintk("saa7146: i2c_busy_rise_and_fall: error due to invalid start/stop condition\n"); - break; - - case SAA7146_I2C_APERR: - hprintk("saa7146: i2c_busy_rise_and_fall: error in address phase\n"); - break; - - case SAA7146_I2C_DTERR: - hprintk("saa7146: i2c_busy_rise_and_fall: error in data transmission\n"); - break; - - case SAA7146_I2C_DRERR: - hprintk("saa7146: i2c_busy_rise_and_fall: error when receiving data\n"); - break; - - case SAA7146_I2C_AL: - hprintk("saa7146: i2c_busy_rise_and_fall: error because arbitration lost\n"); - break; - } - - return status; - -} - -/* this functions resets the saa7146 at address 'addr' - and returns 0 if everything was fine, otherwise -1 */ -int i2c_reset(struct saa7146* saa) -{ - u32 status = 0; - - hprintk("saa7146: ==> i2c_reset\n"); - - status = i2c_status_check(saa); - - /* clear data-byte for sure */ - saa7146_write(saa->mem, I2C_TRANSFER, 0x00); - - /* check if any operation is still in progress */ - if ( 0 != ( status & SAA7146_I2C_BUSY) ) { - - /* Yes, kill ongoing operation */ - hprintk("saa7146: i2c_reset: busy_state detected\n"); - - /* set ABORT-OPERATION-bit */ - saa7146_write(saa->mem, I2C_STATUS, ( SAA7146_I2C_BBR | MASK_07)); - saa7146_write(saa->mem, MC2, (MASK_00 | MASK_16)); - mdelay( SAA7146_I2C_DELAY ); - - /* clear all error-bits pending; this is needed because p.123, note 1 */ - saa7146_write(saa->mem, I2C_STATUS, SAA7146_I2C_BBR ); - saa7146_write(saa->mem, MC2, (MASK_00 | MASK_16)); - mdelay( SAA7146_I2C_DELAY ); - } - - /* check if any other error is still present */ - if ( SAA7146_I2C_BBR != (status = i2c_status_check(saa)) ) { - - /* yes, try to kick it */ - hprintk("saa7146: i2c_reset: error_state detected, status:0x%08x\n",status); - - /* clear all error-bits pending */ - saa7146_write(saa->mem, I2C_STATUS, SAA7146_I2C_BBR ); - saa7146_write(saa->mem, MC2, (MASK_00 | MASK_16)); - mdelay( SAA7146_I2C_DELAY ); - /* the data sheet says it might be necessary to clear the status - twice after an abort */ - saa7146_write(saa->mem, I2C_STATUS, SAA7146_I2C_BBR ); - saa7146_write(saa->mem, MC2, (MASK_00 | MASK_16)); - } - - /* if any error is still present, a fatal error has occurred ... */ - if ( SAA7146_I2C_BBR != (status = i2c_status_check(saa)) ) { - hprintk("saa7146: i2c_reset: fatal error, status:0x%08x\n",status); - return -EIO; - } - - return 0; -} - -/* this functions writes out the data-bytes at 'data' to the saa7146 - at address 'addr' regarding the 'timeout' and 'retries' values; - it returns 0 if ok, -1 if the transfer failed, -2 if the transfer - failed badly (e.g. address error) */ -int i2c_write_out(struct saa7146* saa, u32* data, int timeout) -{ - int status = 0; - - hprintk("saa7146: ==> writeout: 0x%08x (before) (to:%d)\n",*data,timeout); - - /* write out i2c-command */ - saa7146_write(saa->mem, I2C_TRANSFER, *data); - saa7146_write(saa->mem, I2C_STATUS, SAA7146_I2C_BBR); - saa7146_write(saa->mem, MC2, (MASK_00 | MASK_16)); - - /* after writing out an i2c-command we have to wait for a while; - because we do not know, how long we have to wait, we simply look - what the busy-flag is doing, before doing something else */ - - /* reason: while fiddling around with the i2c-routines, I noticed - that after writing out an i2c-command, one may not read out the - status immediately after that. you *must* wait some time, before - even the busy-flag gets set */ - - status = i2c_busy_rise_and_fall(saa,timeout); - - if ( -1 == status ) { - hprintk("saa7146: i2c_write_out; timeout\n"); - return -ETIMEDOUT; - } - - /* we only handle address-errors here */ - if ( 0 != (status & SAA7146_I2C_APERR)) { - hprintk("saa7146: i2c_write_out; error in address phase\n"); - return -EREMOTEIO; - } - - /* check for some other mysterious error; we don't handle this here */ - if ( 0 != ( status & 0xff)) { - hprintk("saa7146: i2c_write_out: some error has occurred\n"); - return -EIO; - } - - /* read back data, just in case we were reading ... */ - *data = saa7146_read(saa->mem, I2C_TRANSFER); - - hprintk("saa7146: writeout: 0x%08x (after)\n",*data); - - return 0; -} - -int clean_up(struct i2c_msg m[], int num, u32 *op) -{ - u16 i, j; - u16 op_count = 0; - - /* loop through all messages */ - for(i = 0; i < num; i++) { - op_count++; - /* loop throgh all bytes of message i */ - for(j = 0; j < m[i].len; j++) { - /* write back all bytes that could have been read */ - m[i].buf[j] = (op[op_count/3] >> ((3-(op_count%3))*8)); - op_count++; - } - } - - return 0; -} - -int prepare(struct i2c_msg m[], int num, u32 *op) -{ - u16 h1, h2; - u16 i, j, addr; - u16 mem = 0, op_count = 0; - -//for (i=0; i I2C_MEM_SIZE ) { - hprintk("saa7146: prepare: i2c-message to big\n"); - return -1; - } - - /* be careful: clear out the i2c-mem first */ - memset(op,0,sizeof(u32)*mem); - - for(i = 0; i < num; i++) { - /* insert the address of the i2c-slave. - * note: we get 7-bit-i2c-addresses, - * so we have to perform a translation - */ - addr = (m[i].addr << 1) | ((m[i].flags & I2C_M_RD) ? 1 : 0); - h1 = op_count/3; h2 = op_count%3; - op[h1] |= ((u8)addr << ((3-h2)*8)); - op[h1] |= (SAA7146_I2C_START << ((3-h2)*2)); - op_count++; - /* loop through all bytes of message i */ - for(j = 0; j < m[i].len; j++) { - /* insert the data bytes */ - h1 = op_count/3; h2 = op_count%3; - op[h1] |= ((u8)m[i].buf[j] << ((3-h2)*8)); - op[h1] |= (SAA7146_I2C_CONT << ((3-h2)*2)); - op_count++; - } - } - - /* have a look at the last byte inserted: - * if it was: ...CONT change it to ...STOP - */ - h1 = (op_count-1)/3; h2 = (op_count-1)%3; - if ( SAA7146_I2C_CONT == (0x3 & ((op[h1]) >> ((3-h2)*2))) ) { - op[h1] &= ~(0x2 << ((3-h2)*2)); - op[h1] |= (SAA7146_I2C_STOP << ((3-h2)*2)); - } - - return mem; -} -#endif - - -#ifdef __COMPILE_SAA7146_DEBI__ - -/* functions for accessing the debi-port. note: we currently don't support - * page-table-transfers. - */ - -#define MY_DEBI_TIMEOUT_MS 5 - -int debi_transfer(struct saa7146* saa, struct saa7146_debi_transfer* dt) -{ - u32 debi_config = 0, debi_command = 0, debi_page = 0, debi_ad = 0; - u32 timeout = MY_DEBI_TIMEOUT_MS; - - /* sanity checks */ - if(dt->direction > 1 || dt->timeout > 15 || dt->swap > 3 || dt->slave16 > 2 || dt->intel > 1 || dt->increment > 1 || dt->tien > 1 ) - return -EINVAL; - - debi_page = 0; - /* keep bits 31,30,28 clear */ - debi_config = (dt->timeout << 22) | (dt->swap << 20) | (dt->slave16 << 19) | (dt->increment << 18) | (dt->intel << 17) | (dt->tien << 16); - debi_command = (dt->num_bytes << 17) | (dt->direction << 16) | (dt->address << 0); - debi_ad = dt->mem; - - saa7146_write(saa->mem, DEBI_PAGE, debi_page); - saa7146_write(saa->mem, DEBI_CONFIG, debi_config); - saa7146_write(saa->mem, DEBI_COMMAND, debi_command); - saa7146_write(saa->mem, DEBI_AD, debi_ad); - - /* upload debi-registers */ - saa7146_write(saa->mem, MC2, (MASK_01|MASK_17)); - - /* wait for DEBI upload to complete */ - while (! (saa7146_read(saa->mem, MC2) & 0x2)); - - while( --timeout ) { - /* check, if DEBI still active */ - u32 psr = saa7146_read(saa->mem, PSR); - if (0 != (psr & SPCI_DEBI_S)) { - /* check, if error occurred */ -/* if ( 0 != (saa7146_read(saa->mem, SSR) & (MASK_23|MASK_22))) { */ - if ( 0 != (saa7146_read(saa->mem, SSR) & (MASK_22))) { - /* clear error status and indicate error */ - saa7146_write(saa->mem, ISR, SPCI_DEBI_E); - return -1; - } - } - else { - /* Clear status bit */ - saa7146_write(saa->mem, ISR, SPCI_DEBI_S); - break; - } - /* I don´t know how we should actually wait for the debi to have finished. - we simply wait 1ms here and then check in a loop for max. MY_DEBI_TIMEOUT_MS */ - mdelay(1); - } - - /* check for timeout */ - if( 0 == timeout ) { - return -1; - } - - /* read back data if we did immediate read-transfer */ - if(dt->num_bytes <= 4 && dt->direction == 1) { - dt->mem = saa7146_read(saa->mem, DEBI_AD); - switch(dt->num_bytes) { - case 1: - dt->mem &= 0x000000ff; - break; - case 2: - dt->mem &= 0x0000ffff; - break; - case 3: - dt->mem &= 0x00ffffff; - break; - } - } - - return 0; -} -#endif - -#ifdef __COMPILE_SAA7146_STUFF__ -/* ---------------------------------------------*/ -/* helper-function: set gpio-pins */ -/* ---------------------------------------------*/ -void gpio_set(struct saa7146* saa, u8 pin, u8 data) -{ - u32 value = 0; - - /* sanity check */ - if(pin > 3) - return; - - /* read old register contents */ - value = saa7146_read(saa->mem, GPIO_CTRL ); - - value &= ~(0xff << (8*pin)); - value |= (data << (8*pin)); - - saa7146_write(saa->mem, GPIO_CTRL, value); -} - -void select_input(struct saa7146* saa, int p) -{ - u32 hps_ctrl = 0; - - /* sanity check */ - if( p < 0 || p > 1 ) - return; - - /* read old state */ - hps_ctrl = saa7146_read(saa->mem, HPS_CTRL); - - /* mask out relevant bits */ - hps_ctrl &= ~( MASK_31 | MASK_30 | MASK_28 ); - - /* set bits for input b */ - if( 1 == p ) { - hps_ctrl |= ( (1 << 30) | (1 << 28) ); - } - - /* write back & upload register */ - saa7146_write(saa->mem, HPS_CTRL, hps_ctrl); - saa7146_write(saa->mem, MC2, (MASK_05 | MASK_21)); -} - -#endif - diff -Nru a/drivers/media/dvb/av7110/saa7146_core.c b/drivers/media/dvb/av7110/saa7146_core.c --- a/drivers/media/dvb/av7110/saa7146_core.c Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,962 +0,0 @@ -/* - saa7146_core.c - core-functions + i2c driver for the saa7146 by - Philips Semiconductors. - - Copyright (C) 1998,1999 Michael Hunold - - 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -#include /* for module-version */ -#include /* for delay-stuff */ -#include /* for kmalloc/kfree */ -#include /* for pci-config-stuff, vendor ids etc. */ -#include /* for mem_map_reserve */ -#include -#include /* for accessing the pci-device */ -#include /* for module-version */ - -#include "saa7146_defs.h" -#include "saa7146_core.h" -#include "saa7146_v4l.h" -#include "av7110.h" -#include "compat.h" -#include "dvb_i2c.h" - -/* insmod parameter: here you can specify the number of video-buffers - to be allocated. for simple capturing 2 buffers (double-buffering) - should suffice. but if you plan to do 25fps grabbing, you should - set this to 4(=maximum), in order to be able to catch up from - temporarily delays */ -static int buffers = 2; - -/* insmod parameter: some programs (e.g. ´vic´) do not allow to - specify the used video-mode, so you have to tell this to the - modules by hand, 0 = PAL (default), 1 = NTSC */ -static int mode; - -/* debug levels: 0 -- no debugging outputs: default - 1 -- prints out entering (and exiting if useful) of functions - 2 -- prints out very, very detailed informations of what is going on - 3 -- both of the above */ -int saa7146_debug; /* insmod parameter */ - -#define dprintk if (saa7146_debug & 1) printk -#define hprintk if (saa7146_debug & 2) printk - -/* ---------------------------------------------*/ -/* memory functions - taken from bttv.c */ -/* ---------------------------------------------*/ - -static inline unsigned long kvirt_to_pa(unsigned long adr) -{ - unsigned long kva; - - kva = (unsigned long) page_address(vmalloc_to_page((void *)adr)); - kva |= adr & (PAGE_SIZE-1); /* restore the offset */ - - return __pa(kva); -} - - -static LIST_HEAD(saa7146_list); - -static int saa7146_extension_count = 0; -static struct saa7146_extension* saa7146_ext[SAA7146_MAX_EXTENSIONS]; - -#define SAA7146_I2C_TIMEOUT 100 /* in ms */ -#define SAA7146_I2C_RETRIES 6 - -static u32 SAA7146_I2C_BBR = SAA7146_I2C_BUS_BIT_RATE_3200; - -#define __COMPILE_SAA7146_I2C__ -#define __COMPILE_SAA7146_DEBI__ -#include "saa7146.c" -#undef __COMPILE_SAA7146_I2C__ - -/* ---------------------------------------------*/ -/* memory functions designed for saa7146 */ -/* ---------------------------------------------*/ - -/* rvmalloc allocates the memory and builds up - the page-tables for ´quant´-number of buffers */ -static void* rvmalloc(int quant, u32* pt[]) -{ - void* mem; - - unsigned long adr = 0; - unsigned long count = 0; - - u32* ptp = 0; - int i = 0, j = 0; - - dprintk(KERN_ERR "saa7146: rvmalloc called, quant:%d\n",quant); - - if(!quant) - return NULL; - - /* get grabbing memory */ - mem = vmalloc_32(quant*GRABBING_MEM_SIZE); - - if(!mem) - return NULL; - - dprintk(KERN_ERR "saa7146: alloc page tables\n"); - - /* alloc one page for a page-table for ´quant´ buffers */ - for(i = 0; i < quant; i++) { - pt[i] = (u32*)kmalloc(PAGE_SIZE,GFP_KERNEL); - - /* error: memory could not be allocated */ - if(!pt[i]) { - dprintk(KERN_ERR "saa7146: failed, free tables\n"); - for(j = (i-1); j >= 0; j--) - kfree(pt[j]); - dprintk(KERN_ERR "saa7146: free buffer memory\n"); - vfree(mem); - dprintk(KERN_ERR "saa7146: return 0 address for buffer\n"); - return NULL; - } - memset(pt[i], 0x00, PAGE_SIZE); - } - - dprintk(KERN_ERR "saa7146: clear RAM\n"); - - /* clear the ram out, no junk to the user - note: 0x7f gives a nice grey field - in RGB and YUV as well */ - memset(mem, 0x7f, quant*GRABBING_MEM_SIZE); - - dprintk(KERN_ERR "saa7146: build page tables\n"); - adr = (unsigned long)mem; - /* walk through the grabbing-memory and build up the page-tables */ - for(i = 0; i < quant; i++) { - - for (count=0; count 0) { - page = kvirt_to_pa(adr); - mem_map_unreserve(virt_to_page(__va(page))); - adr += PAGE_SIZE; - size -= PAGE_SIZE; - } - - /* release the grabbing memory */ - vfree(mem); - } - /* free the page tables */ - for(i = 0; i < quant; i++) { - kfree(pt[i]); - } -} - - -/* ---------------------------------------------*/ -/* i2c-functions */ -/* ---------------------------------------------*/ - -static -int do_master_xfer (struct dvb_i2c_bus *i2c, struct i2c_msg msgs[], int num) -{ - struct saa7146 *a = i2c->data; - int count; - int i = 0; - - dprintk(KERN_ERR "saa7146_core.o: master_xfer called, num:%d\n",num); - - /* prepare the message(s), get number of u32s to transfer */ - count = prepare(msgs, num, a->i2c); - - if (count < 0) { - hprintk(KERN_ERR "saa7146_core.o: could not prepare i2c-message\n"); - return -EIO; - } - - /* reset the i2c-device if necessary */ - if (i2c_reset(a) < 0) { - hprintk(KERN_ERR "saa7146_core.o: could not reset i2c-bus\n"); - return -EIO; - } - - for(i = 0; i < count; i++) { - /* see how many u32 have to be transferred; - * if there is only 1, - * we do not start the whole rps1-engine... - */ - - /* if address-error occurred, don't retry */ - if (i2c_write_out(a, &a->i2c[i], SAA7146_I2C_TIMEOUT) < 0) { - hprintk (KERN_ERR "saa7146_core.o: " - "i2c error in address phase\n"); - return -EREMOTEIO; - } - } - - /* if any things had to be read, get the results */ - if (clean_up(msgs, num, a->i2c) < 0) { - hprintk(KERN_ERR "saa7146_core.o: i2c cleanup failed!\n"); - return -EIO; - } - - /* return the number of delivered messages */ - return num; -} - - - -static -int master_xfer (struct dvb_i2c_bus *i2c, struct i2c_msg msgs[], int num) -{ - struct saa7146 *saa = i2c->data; - int retries = SAA7146_I2C_RETRIES; - int ret; - - if (down_interruptible (&saa->i2c_sem)) - return -ERESTARTSYS; - - do { - ret = do_master_xfer (i2c, msgs, num); - } while (ret != num && retries--); - - up (&saa->i2c_sem); - - return ret; -} - - -/* registering functions to load algorithms at runtime */ -int i2c_saa7146_add_bus (struct saa7146 *saa) -{ - init_MUTEX(&saa->i2c_sem); - - /* enable i2c-port pins */ - saa7146_write (saa->mem, MC1, (MASK_08 | MASK_24)); - - sprintf(saa->name, "saa7146(%d)", saa->dvb_adapter->num); - - saa->i2c_bus = dvb_register_i2c_bus (master_xfer, saa, - saa->dvb_adapter, 0); - if (!saa->i2c_bus) - return -ENOMEM; - - return 0; -} - - -void i2c_saa7146_del_bus (struct saa7146 *saa) -{ - dvb_unregister_i2c_bus (master_xfer, - saa->i2c_bus->adapter, saa->i2c_bus->id); - - dvb_unregister_adapter (saa->dvb_adapter); -} - -/* ---------------------------------------------*/ -/* debug-helper function: dump-registers */ -/* ---------------------------------------------*/ - -void dump_registers(unsigned char* mem) { - - u16 j = 0; - - for( j = 0x0; j < 0x1fe; j+=0x4 ) { - printk("0x%03x: 0x%08x\n",j,saa7146_read(mem,j)); - } - -} - -/* -----------------------------------------------------*/ -/* dispatcher-function for handling external commands */ -/* -----------------------------------------------------*/ - -static int saa7146_core_command (struct dvb_i2c_bus *i2c, unsigned int cmd, void *arg) -{ - int i = 0, result = -ENOIOCTLCMD; - struct saa7146* saa = i2c->data; - - dprintk("saa7146_core.o: ==> saa7146_core_command\n"); - - if( NULL == saa) - return -EINVAL; - - /* first let the extensions handle the command */ - for (i = 0; i < SAA7146_MAX_EXTENSIONS; i++) { - if (NULL != saa7146_ext[i]) { - if( -ENOIOCTLCMD != (result = saa7146_ext[i]->command(saa, saa->data[i], cmd, arg))) { - break; - } - } - } - - /* if command has not been handled by an extension, handle it now */ - if( result == -ENOIOCTLCMD ) { - - switch(cmd) { - case SAA7146_DUMP_REGISTERS: - { - dump_registers(saa->mem); - break; - } - case SAA7146_SET_DD1: - { - u32 *i = arg; - - dprintk(KERN_ERR "saa7146_core.o: SAA7146_SET_DD1 to 0x%08x\n",*i); - - /* set dd1 port register */ - saa7146_write(saa->mem, DD1_INIT, *i); - - /* write out init-values */ - saa7146_write(saa->mem,MC2, (MASK_09 | MASK_10 | MASK_26 | MASK_26)); - - break; - } - case SAA7146_DO_MMAP: - { - struct vm_area_struct *vma = arg; - unsigned long size = vma->vm_end - vma->vm_start; - unsigned long start = vma->vm_start; - unsigned long page,pos; - - dprintk(KERN_ERR "saa7146_core.o: SAA7146_DO_MMAP.\n"); - - if (size > saa->buffers * GRABBING_MEM_SIZE) - return -EINVAL; - - if ( NULL == saa->grabbing ) - return -EINVAL; - - pos=(unsigned long)saa->grabbing; - - while (size > 0) - { - page = kvirt_to_pa(pos); - if (remap_page_range(vma, start, page, - PAGE_SIZE, PAGE_SHARED)) - return -EAGAIN; - start += PAGE_SIZE; - pos += PAGE_SIZE; - size -= PAGE_SIZE; - } - - break; - } - case SAA7146_DEBI_TRANSFER: { - - struct saa7146_debi_transfer *dt = arg; - - dprintk("saa7146_core.o: SAA7146_DEBI_TRANSFER\n"); - dprintk("saa7146_core.o: timeout:%d, swap:%d, slave16:%d, increment:%d, intel:%d, tien:%d\n", dt->timeout, dt->swap, dt->slave16, dt->increment, dt->intel, dt->tien); - dprintk("saa7146_core.o: address:0x%04x, num_bytes:%d, direction:%d, mem:0x%08x\n",dt->address,dt->address,dt->direction,dt->mem); - - debi_transfer(saa, dt); - break; - } - - default: { - return -ENOIOCTLCMD; - } - } - } - - return 0; -} - -/* -----------------------------------------------------*/ -/* dispatcher-function for handling irq-events */ -/* -----------------------------------------------------*/ - -/* irq-handler function */ -static void saa7146_irq(int irq, void *dev_id, struct pt_regs * regs) -{ - struct saa7146 *saa = (struct saa7146 *)dev_id; - u32 isr = 0; - int i; - int count = 0; - - /* process all interrupts */ - while (1) { - - /* read out the primary status register */ - isr = saa7146_read(saa->mem, ISR); - /* clear all IRQs */ - saa7146_write(saa->mem, ISR, isr); - - /* is anything to do? */ - if ( 0 == isr ) - return; - - dprintk("%s: irq-call: isr:0x%08x\n",saa->name,isr); - - /* first let the extensions handle the interrupt */ - for (i = 0; i < SAA7146_MAX_EXTENSIONS; i++) - if (saa7146_ext[i] && - (isr&saa7146_ext[i]->handles_irqs)) { - saa7146_ext[i]->irq_handler(saa, isr, saa->data[i]); - //saa7146_write(saa->mem, ISR, saa7146_ext[i]->handles_irqs); - } - - //printk(KERN_ERR "%s: unhandled interrupt: 0x%08x\n", saa->name, isr); - - /* see if we are in a hard interrupt loop */ - ++count; - if (count > 10) - printk (KERN_WARNING "%s: irq loop %d\n", saa->name, count); - if (count > 20) { - saa7146_write(saa->mem, IER, 0x00000000); - printk(KERN_ERR "%s: IRQ lockup, cleared int mask\n", saa->name); - break; - } - } -} - -/* ----------------------------------------------------- - functions for finding any saa7146s in the system, - inserting/removing module for kernel, etc. - -----------------------------------------------------*/ - -int configure_saa7146 (struct saa7146 *saa) -{ - u32 rev = 0; - int result = 0; - - hprintk("saa7146_core.o: ==> configure_saa7146\n"); - - /* check module-parameters for sanity */ - - /* check if wanted number of video-buffers is valid, otherwise fix it */ - //if (buffers < 2) - // buffers = 2; - - if ( buffers > SAA7146_MAX_BUF ) - buffers = SAA7146_MAX_BUF; - - /* check if mode is supported */ - switch( mode ) { - /* 0 = pal, 1 = ntsc */ - case 0: - case 1: - { - break; - } - /* default to pal */ - default: - { - mode = 0; - break; - } - } - - /* get chip-revision; this is needed to enable bug-fixes */ - if( 0 > pci_read_config_dword(saa->device, 0x08, &rev)) { - printk (KERN_ERR - "saa7146_core.o: cannot read from pci-device!\n"); - return -1; - } - - saa->revision = (rev & 0xf); - - /* remap the memory from virtual to physical address */ - saa->mem = ioremap ((saa->device->resource[0].start) - &PCI_BASE_ADDRESS_MEM_MASK, 0x1000); - - if ( !saa->mem ) { - printk(KERN_ERR "saa7146_core.o: cannot map pci-address!\n"); - return -EFAULT; - } - - /* get clipping memory */ - saa->clipping = (u32*) kmalloc (CLIPPING_MEM_SIZE*sizeof(u32),GFP_KERNEL); - - if ( !saa->clipping ) { - printk(KERN_ERR "saa7146_core.o: not enough kernel-memory for clipping!\n"); - return -ENOMEM; - } - - memset(saa->clipping, 0x0, CLIPPING_MEM_SIZE*sizeof(u32)); - - /* get i2c memory */ - saa->i2c = (u32*) kmalloc (I2C_MEM_SIZE*sizeof(u32),GFP_KERNEL); /*64*/ - - if ( !saa->i2c ) { - printk(KERN_ERR "saa7146_core.o: not enough kernel-memory for i2c!\n"); - kfree(saa->clipping); - return -ENOMEM; - } - - memset(saa->i2c, 0x0, I2C_MEM_SIZE*sizeof(u32)); - - /* get grabbing memory */ - saa->grabbing = (u32*) rvmalloc (buffers, &saa->page_table[0]); - - if ( !saa->grabbing ) { - printk(KERN_ERR "saa7146_core.o: not enough kernel-memory for grabbing_mem!\n"); - kfree(saa->i2c); - kfree(saa->clipping); - return -ENOMEM; - } - - /* get rps0 memory */ - saa->rps0 = (u32*) kmalloc (RPS_MEM_SIZE*sizeof(u32),GFP_KERNEL); - - if ( !saa->rps0 ) { - printk(KERN_ERR "saa7146_core.o: not enough kernel-memory for rps0_mem!\n"); - kfree(saa->i2c); - kfree(saa->clipping); - rvfree(saa->grabbing, buffers, &saa->page_table[0]); - return -ENOMEM; - } - - memset(saa->rps0, 0x0, RPS_MEM_SIZE*sizeof(u32)); - - /* get rps1 memory */ - saa->rps1 = (u32*) kmalloc (RPS_MEM_SIZE*sizeof(u32),GFP_KERNEL); - if ( !saa->rps1 ) { - printk(KERN_ERR "saa7146_core.o: not enough kernel-memory for rps1_mem!\n"); - kfree(saa->rps0); - kfree(saa->i2c); - kfree(saa->clipping); - rvfree(saa->grabbing, buffers, &saa->page_table[0]); - return -1; - } - - memset(saa->rps1, 0x0, RPS_MEM_SIZE*sizeof(u32)); - - /* get debi memory (32kB) */ - saa->debi = (u32*) kmalloc (8192*sizeof(u32),GFP_KERNEL); - - if ( !saa->debi ) { - printk(KERN_ERR "saa7146_core.o: not enough kernel-memory for debi_mem!\n"); - kfree(saa->rps1); - kfree(saa->rps0); - kfree(saa->i2c); - kfree(saa->clipping); - rvfree(saa->grabbing, buffers, &saa->page_table[0]); - return -1; - } - - memset(saa->debi, 0x0, 8192*sizeof(u32)); - - - /* clear out memory for grabbing information */ - memset(&saa->grab_width[0], 0x0, sizeof(int)*SAA7146_MAX_BUF); - memset(&saa->grab_height[0], 0x0, sizeof(int)*SAA7146_MAX_BUF); - memset(&saa->grab_format[0], 0x0, sizeof(int)*SAA7146_MAX_BUF); - memset(&saa->grab_port[0], 0x0, sizeof(int)*SAA7146_MAX_BUF); - - /* init the frame-status array */ - memset(&saa->frame_stat[0], GBUFFER_UNUSED, sizeof(int)*SAA7146_MAX_BUF); - - /* clear out all wait queues */ - init_waitqueue_head(&saa->rps0_wq); - init_waitqueue_head(&saa->rps1_wq); - - - /* request an interrupt for the saa7146 */ - result = request_irq (saa->device->irq, saa7146_irq, - SA_SHIRQ | SA_INTERRUPT, saa->name, (void *) saa); - - switch(result) { - case -EINVAL: - { - printk(KERN_ERR "saa7146_core.o: Bad irq number or handler\n"); - return -EINVAL; - } - case -EBUSY: - { - printk(KERN_ERR "saa7146_core.o: IRQ %d busy, change your PnP config in BIOS\n", saa->device->irq); - return -EBUSY; - } - case 0: - { - break; - } - default: - { - return result; - } - } - - /* print status message */ - dprintk("saa7146_core.o: %s: bus:%d, rev:%d, mem:0x%08x.\n", saa->name, saa->device->bus->number, saa->revision, (unsigned int) saa->mem); - - /* enable bus-mastering */ - pci_set_master( saa->device ); - - /* disable everything on the saa7146, perform a software-reset */ - saa7146_write(saa->mem, MC1, 0xbfff0000); - mdelay(2); -#if 0 - { - int j; - - /* clear all registers */ - for( j = 0x0; j < 0xfc; j+=0x4 ) { - saa7146_write(saa->mem,j, 0x0000000); - } - for( j = 0x104; j < 0x1fc; j+=0x4 ) { - saa7146_write(saa->mem,j, 0x0000000); - } - } -#endif - /* clear out any rps-signals pending */ - saa7146_write(saa->mem, MC2, 0xf8000000); - - /* enable video-port-pins*/ - saa7146_write(saa->mem,MC1, (MASK_10 | MASK_26)); - - /* disable all interrupt-conditions, only enable RPS interrupts */ - saa7146_write(saa->mem, ISR, 0xffffffff); - saa7146_write(saa->mem, IER, (MASK_27 | MASK_28)); -/* - printk("main: 0x114: 0x%08x\n",saa7146_read(saa->mem, 0x114)); - printk("main: 0x0e4: 0x%08x\n",saa7146_read(saa->mem, 0x0e4)); - printk("PSR: 0x%08x\n",saa7146_read(saa->mem, PSR)); - printk("SSR: 0x%08x\n",saa7146_read(saa->mem, SSR)); - printk("IER: 0x%08x\n",saa7146_read(saa->mem, IER)); - printk("ISR: 0x%08x\n",saa7146_read(saa->mem, ISR)); -*/ - - saa7146_write(saa->mem,PCI_BT_V1, 0x1c00101f); - saa7146_write(saa->mem,BCS_CTRL, 0x80400040); - - /* set dd1 stream a & b */ - saa7146_write(saa->mem, DD1_STREAM_B, 0x00000000); - saa7146_write(saa->mem, DD1_INIT, 0x02000000); - saa7146_write(saa->mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - saa7146_write(saa->mem, MC2, 0x077c077c); - - /* the Siemens DVB needs this if you want to have the i2c chips - get recognized before the main driver is loaded - */ - saa7146_write(saa->mem, GPIO_CTRL, 0x500000); - - saa->command = &saa7146_core_command; - saa->buffers = buffers; - saa->mode = mode; - saa->interlace = 1; - - i2c_saa7146_add_bus (saa); - - saa7146_write(saa->mem, GPIO_CTRL, 0x000000); - return 0; -} - - -void saa7146_foreach (void (*callback) (struct saa7146* saa, void *data), - void *data) -{ - struct list_head *entry; - - list_for_each (entry, &saa7146_list) { - struct saa7146* saa; - - saa = list_entry (entry, struct saa7146, list_head); - callback (saa, data); - } -} - - -static -void saa7146_attach_extension (struct saa7146* saa, void *data) -{ - int ext_id = (int) data; - saa7146_ext[ext_id]->attach (saa, &saa->data[ext_id]); -} - - -static -void saa7146_detach_extension (struct saa7146* saa, void *data) -{ - int ext_id = (int) data; - saa7146_ext[ext_id]->detach (saa, &saa->data[ext_id]); -} - - -int saa7146_add_extension(struct saa7146_extension* ext) -{ - int ext_id = 0; - - for (ext_id = 0; ext_id < SAA7146_MAX_EXTENSIONS; ext_id++) { - if (NULL == saa7146_ext[ext_id]) - break; - if (SAA7146_MAX_EXTENSIONS == ext_id) { - printk(KERN_WARNING "saa7146.o: attach_extension(%s) - " - "enlarge SAA7146_MAX_EXTENSIONS.\n",ext->name); - return -ENOMEM; - } - } - - saa7146_ext[ext_id] = ext; - saa7146_extension_count++; - - if (ext->attach) - saa7146_foreach (saa7146_attach_extension, (void*) ext_id); - - return 0; -} - - -int saa7146_del_extension(struct saa7146_extension* ext) -{ - int ext_id = 0; - - for (ext_id = 0; ext_id < SAA7146_MAX_EXTENSIONS; ext_id++) - if (ext == saa7146_ext[ext_id]) - break; - - if (SAA7146_MAX_EXTENSIONS == ext_id) { - printk("%s: detach_extension extension [%s] not found.\n", - __FUNCTION__, ext->name); - return -ENODEV; - } - - if (ext->detach) - saa7146_foreach (saa7146_detach_extension, (void*) ext_id); - - saa7146_ext[ext_id] = NULL; - saa7146_extension_count--; - - return 0; -} - - -static -void remove_saa7146(struct saa7146 *saa) -{ - i2c_saa7146_del_bus (saa); - - /* shut down all dma transfers */ - saa7146_write(saa->mem, MC1, 0xbfff0000); - - dprintk("free irqs\n"); - /* disable alle irqs, release irq-routine */ - saa7146_write(saa->mem, IER, 0x00); - saa7146_write(saa->mem, ISR, 0xffffffff); - free_irq(saa->device->irq, (void *)saa); - dprintk("unmap memory\n"); - /* unmap the memory, if necessary */ - if (saa->mem) - iounmap((unsigned char *)((unsigned int)saa->mem)); - - dprintk("release grabbing memory\n"); - /* release grabbing memory */ - if(saa->grabbing) - rvfree(saa->grabbing, buffers, &saa->page_table[0]); - - dprintk("release other memory\n"); - /* release clipping, i2c, rps0 memory */ - kfree(saa->clipping); - kfree(saa->i2c); - kfree(saa->rps0); - kfree(saa->rps1); - kfree(saa->debi); -} - - -static int saa7146_suspend(struct pci_dev *pdev, u32 state) -{ - printk("saa7146_suspend()\n"); - saa7146_core_command(((struct saa7146 *)pci_get_drvdata(pdev))->i2c_bus, - SAA7146_SUSPEND, 0); - return 0; -} - -static int -saa7146_resume(struct pci_dev *pdev) -{ - printk("saa7146_resume()\n"); - saa7146_core_command(((struct saa7146 *)pci_get_drvdata(pdev))->i2c_bus, - SAA7146_RESUME, 0); - return 0; -} - - -struct card_info { - int type; - char *name; -}; - - -static -int __devinit saa7146_init_one (struct pci_dev *pdev, - const struct pci_device_id *ent) -{ - struct dvb_adapter *adap; - struct saa7146 *saa; - int card_type; - struct card_info *cinfo= (struct card_info *) ent->driver_data; - - dprintk("saa7146_init_one()\n"); - - card_type = cinfo->type; - dvb_register_adapter(&adap, cinfo->name); - - if (!(saa = kmalloc (sizeof (struct saa7146), GFP_KERNEL))) { - printk ("%s: out of memory!\n", __FUNCTION__); - return -ENOMEM; - } - - memset (saa, 0, sizeof (struct saa7146)); - - saa->device = pdev; - pci_set_drvdata(pdev, saa); - saa->card_type = card_type; - saa->dvb_adapter = adap; - - pci_enable_device (saa->device); - - configure_saa7146 (saa); - - list_add_tail (&saa->list_head, &saa7146_list); - - return 0; -} - -static -void __devexit saa7146_remove_one (struct pci_dev *pdev) -{ - struct saa7146 *saa = pci_get_drvdata(pdev); - - dprintk("saa7146_remove_one()\n"); - - list_del (&saa->list_head); - pci_disable_device(pdev); - remove_saa7146 (saa); -} - - -static struct card_info fs_1_5 = { DVB_CARD_TT_SIEMENS, "Siemens cable card PCI rev1.5" }; -static struct card_info fs_1_3 = { DVB_CARD_TT_SIEMENS, "Siemens/Technotrend/Hauppauge PCI rev1.3" }; -static struct card_info ttbs = { DVB_CARD_TT_BUDGET, "TT-Budget/WinTV-NOVA-S PCI" }; -static struct card_info ttbc = { DVB_CARD_TT_BUDGET, "TT-Budget/WinTV-NOVA-C PCI" }; -static struct card_info ttbt = { DVB_CARD_TT_BUDGET, "TT-Budget/WinTV-NOVA-T PCI" }; -static struct card_info ttbci = { DVB_CARD_TT_BUDGET_CI, "TT-Budget/WinTV-NOVA-CI PCI" }; -static struct card_info satel = { DVB_CARD_TT_BUDGET, "SATELCO Multimedia PCI"}; -static struct card_info unkwn = { DVB_CARD_TT_SIEMENS, "Technotrend/Hauppauge PCI rev?(unknown0)?"}; -static struct card_info tt_1_6 = { DVB_CARD_TT_SIEMENS, "Technotrend/Hauppauge PCI rev1.3 or 1.6" }; -static struct card_info tt_2_1 = { DVB_CARD_TT_SIEMENS, "Technotrend/Hauppauge PCI rev2.1" }; -static struct card_info tt_t = { DVB_CARD_TT_SIEMENS, "Technotrend/Hauppauge PCI DVB-T" }; -static struct card_info knc1 = { DVB_CARD_KNC1, "KNC1 DVB-S" }; - -#define PHILIPS_SAA7146 PCI_VENDOR_ID_PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA7146 -#define CARD_INFO driver_data: (unsigned long) & - -static struct pci_device_id saa7146_pci_tbl[] __devinitdata = { - { PHILIPS_SAA7146, 0x110a, 0xffff, CARD_INFO fs_1_5 }, - { PHILIPS_SAA7146, 0x110a, 0x0000, CARD_INFO fs_1_5 }, - { PHILIPS_SAA7146, 0x13c2, 0x1003, CARD_INFO ttbs }, - { PHILIPS_SAA7146, 0x13c2, 0x1004, CARD_INFO ttbc }, - { PHILIPS_SAA7146, 0x13c2, 0x1005, CARD_INFO ttbt }, - { PHILIPS_SAA7146, 0x13c2, 0x100c, CARD_INFO ttbci }, - { PHILIPS_SAA7146, 0x13c2, 0x1013, CARD_INFO satel }, - { PHILIPS_SAA7146, 0x13c2, 0x0000, CARD_INFO fs_1_3 }, - { PHILIPS_SAA7146, 0x13c2, 0x1002, CARD_INFO unkwn }, - { PHILIPS_SAA7146, 0x13c2, 0x0001, CARD_INFO tt_1_6 }, - { PHILIPS_SAA7146, 0x13c2, 0x0002, CARD_INFO tt_2_1 }, - { PHILIPS_SAA7146, 0x13c2, 0x0003, CARD_INFO tt_2_1 }, - { PHILIPS_SAA7146, 0x13c2, 0x0004, CARD_INFO tt_2_1 }, - { PHILIPS_SAA7146, 0x13c2, 0x0006, CARD_INFO tt_1_6 }, - { PHILIPS_SAA7146, 0x13c2, 0x0008, CARD_INFO tt_t }, - { PHILIPS_SAA7146, 0xffc2, 0x0000, CARD_INFO unkwn }, - { PHILIPS_SAA7146, 0x1131, 0x4f56, CARD_INFO knc1 }, - { 0,}, -}; - -MODULE_DEVICE_TABLE(pci, saa7146_pci_tbl); - -static struct pci_driver saa7146_driver = { - .name = "saa7146", - .id_table = saa7146_pci_tbl, - .probe = saa7146_init_one, - .remove = saa7146_remove_one, - .suspend = saa7146_suspend, - .resume = saa7146_resume, -}; - - -static -int __init saa7146_init_module(void) -{ - int err; - - dprintk("saa7146_init_module\n"); - - if ((err = pci_module_init(&saa7146_driver))) - return err; - - if ((err = saa7146_v4l_init ())) - return err; - - if ((err = av7110_init ())) - return err; - - if ((err = av7110_ir_init ())) - return err; - - return 0; -} - -static -void __exit saa7146_cleanup_module(void) -{ - av7110_ir_exit (); - av7110_exit (); - saa7146_v4l_exit (); - pci_unregister_driver(&saa7146_driver); -} - -module_init(saa7146_init_module); -module_exit(saa7146_cleanup_module); - -MODULE_AUTHOR("Michael Hunold , " - "Christian Theiss , " - "Ralph Metzler , " - "Marcus Metzler , " - "Holger Waechtler and others"); - -MODULE_DESCRIPTION("driver for saa7146/av7110 based DVB PCI cards"); -MODULE_LICENSE("GPL"); -MODULE_PARM(mode,"i"); -MODULE_PARM(saa7146_debug,"i"); -MODULE_PARM(buffers,"i"); - diff -Nru a/drivers/media/dvb/av7110/saa7146_core.h b/drivers/media/dvb/av7110/saa7146_core.h --- a/drivers/media/dvb/av7110/saa7146_core.h Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,111 +0,0 @@ -#ifndef __SAA7146_CORE__ -#define __SAA7146_CORE__ - -#include -#include - -#include "dvbdev.h" - - -/* maximum number of capture frames we support */ -#define SAA7146_MAX_BUF 5 -/* maximum number of extensions we support */ -#define SAA7146_MAX_EXTENSIONS 4 - -/* stuff for writing to saa7146 */ -#define saa7146_write(mem,adr,dat) writel((dat),(mem+(adr))) -#define saa7146_read(mem,adr) readl(mem+(adr)) - - -#define DVB_CARD_TT_SIEMENS 0 -#define DVB_CARD_TT_BUDGET 1 -#define DVB_CARD_TT_BUDGET_CI 2 -#define DVB_CARD_KNC1 3 - - -/* this struct contains some constants needed for horizontal and vertical scaling. - currently we only support PAL (mode=0)and NTSC (mode=1). */ - -struct saa7146 { - - char name[32]; /* give it a nice name */ - - struct list_head list_head; - struct pci_dev *device; - int card_type; - - struct dvb_adapter *dvb_adapter; - struct dvb_i2c_bus *i2c_bus; - struct semaphore i2c_sem; - - void* data[SAA7146_MAX_EXTENSIONS]; /* data hooks for extensions */ - - int (*command) (struct dvb_i2c_bus *i, unsigned int cmd, void *arg); - - unsigned char* mem; /* pointer to mapped IO memory */ - int revision; /* chip revision; needed for bug-workarounds*/ - - int interlace; - int mode; - - u32* i2c; /* i2c memory */ - u32* grabbing; /* grabbing memory */ - u32* clipping; /* clipping memory for mask or rectangle clipping*/ - u32* rps0; /* memory for rps0-program */ - u32* rps1; /* memory for rps1-program */ - u32* debi; /* memory for debi-transfers */ - - int buffers; /* number of grabbing-buffers */ - - u32* page_table[SAA7146_MAX_BUF]; /* page_tables for buffers*/ - int frame_stat[SAA7146_MAX_BUF]; /* status of grabbing buffers */ - - int grab_width[SAA7146_MAX_BUF]; /* pixel width of grabs */ - int grab_height[SAA7146_MAX_BUF]; /* pixel height of grabs */ - int grab_format[SAA7146_MAX_BUF]; /* video format of grabs */ - int grab_port[SAA7146_MAX_BUF]; /* video port for grab */ - - wait_queue_head_t rps0_wq; /* rps0 interrupt queue (=> capture) */ - wait_queue_head_t rps1_wq; /* rps1 interrupt queue (=> i2c, ...) */ -}; - -#define SAA7146_IRQ_RPS0 -#define SAA7146_IRQ_RPS1 - -struct saa7146_extension { - char name[32]; - u32 handles_irqs; - - void (*irq_handler)(struct saa7146*, u32, void*); - - int (*command)(struct saa7146*, void*, unsigned int cmd, void *arg); - - int (*attach)(struct saa7146*, void**); - int (*detach)(struct saa7146*, void**); - - void (*inc_use)(struct saa7146*); - void (*dec_use)(struct saa7146*); -}; - -extern int saa7146_add_extension(struct saa7146_extension* ext); -extern int saa7146_del_extension(struct saa7146_extension* ext); - - -/* external grabbing states */ -#define GBUFFER_UNUSED 0x000 -#define GBUFFER_GRABBING 0x001 -#define GBUFFER_DONE 0x002 - -#define SAA7146_CORE_BASE 200 - -#define SAA7146_DO_MMAP _IOW('d', (SAA7146_CORE_BASE+11), struct vm_area_struct *) -#define SAA7146_SET_DD1 _IOW('d', (SAA7146_CORE_BASE+12), u32) -#define SAA7146_DUMP_REGISTERS _IOW('d', (SAA7146_CORE_BASE+13), u32) -#define SAA7146_DEBI_TRANSFER _IOW('d', (SAA7146_CORE_BASE+14), struct saa7146_debi_transfer) - - -#define SAA7146_SUSPEND _IOW('d', (SAA7146_CORE_BASE+32), u32) -#define SAA7146_RESUME _IOW('d', (SAA7146_CORE_BASE+33), u32) - -#endif - diff -Nru a/drivers/media/dvb/av7110/saa7146_defs.h b/drivers/media/dvb/av7110/saa7146_defs.h --- a/drivers/media/dvb/av7110/saa7146_defs.h Sat Apr 12 14:44:08 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,382 +0,0 @@ -#ifndef __INCLUDED_SAA7146__ -#define __INCLUDED_SAA7146__ - -struct saa7146_video_dma { - u32 base_odd; - u32 base_even; - u32 prot_addr; - u32 pitch; - u32 base_page; - u32 num_line_byte; -}; - -struct saa7146_debi_transfer { - - u8 timeout; /* have a look at the specs for reasonable values, p.110 ff */ - u8 swap; - u8 slave16; - u8 increment; /* only for block transfers */ - u8 intel; - u8 tien; - - u16 address; - u16 num_bytes; - u8 direction; - u32 mem; /* either a "pointer" (actually the physical address) of the debi-memory (block-transfer, use virt_to_bus to supply it) or 4 bytes (as one u32-value) for immediate transfer */ -}; - -struct saa7146_modes_constants { - u8 v_offset; - u16 v_field; - u16 v_calc; - - u8 h_offset; - u16 h_pixels; - u16 h_calc; - - u16 v_max_out; - u16 h_max_out; -}; - -struct saa7146_mmap_struct -{ - const char *adr; - unsigned long size; -}; - -#define SAA7146_PAL 0 -#define SAA7146_NTSC 1 -#define SAA7146_SECAM 2 - -#define SAA7146_HPS_SOURCE_PORT_A 0x00 -#define SAA7146_HPS_SOURCE_PORT_B 0x01 -#define SAA7146_HPS_SOURCE_YPB_CPA 0x02 -#define SAA7146_HPS_SOURCE_YPA_CPB 0x03 - -#define SAA7146_HPS_SYNC_PORT_A 0x00 -#define SAA7146_HPS_SYNC_PORT_B 0x01 - - -/* Number of vertical active lines */ -#define V_ACTIVE_LINES_PAL 576 -#define V_ACTIVE_LINES_NTSC 480 -#define V_ACTIVE_LINES_SECAM 576 - -/* Number of lines in a field for HPS to process */ -#define V_FIELD_PAL 288 -#define V_FIELD_NTSC 240 -#define V_FIELD_SECAM 288 - -/* Number of lines of vertical offset before processing */ -#define V_OFFSET_NTSC 0x10 /* PLI */ -#define V_OFFSET_PAL 0x15 -#define V_OFFSET_SECAM 0x14 - -/* Number of horizontal pixels to process */ -#define H_PIXELS_NTSC 708 -#define H_PIXELS_PAL 720 -#define H_PIXELS_SECAM 720 - -/* Horizontal offset of processing window */ -#define H_OFFSET_NTSC 0x40 /* PLI Try 0x3f and find all red colors turning into blue !!?? */ -#define H_OFFSET_PAL 0x3a -#define H_OFFSET_SECAM 0x14 - -/* some memory-sizes */ -#define GRABBING_MEM_SIZE 0x240000 /* 1024 * 576 * 4*/ -#define CLIPPING_MEM_SIZE 20000 /* 1024 * 625 / 32 */ -#define I2C_MEM_SIZE 0x000800 /* 2048 */ -#define RPS_MEM_SIZE 0x000800 /* 2048 */ - -/************************************************************************/ -/* UNSORTED */ -/************************************************************************/ - -#define ME1 0x0000000800 -#define PV1 0x0000000008 - -/************************************************************************/ -/* CLIPPING */ -/************************************************************************/ - -/* some defines for the various clipping-modes */ -#define SAA7146_CLIPPING_RECT 0x4 -#define SAA7146_CLIPPING_RECT_INVERTED 0x5 -#define SAA7146_CLIPPING_MASK 0x6 -#define SAA7146_CLIPPING_MASK_INVERTED 0x7 - -/************************************************************************/ -/* RPS */ -/************************************************************************/ - -#define CMD_NOP 0x00000000 /* No operation */ -#define CMD_CLR_EVENT 0x00000000 /* Clear event */ -#define CMD_SET_EVENT 0x10000000 /* Set signal event */ -#define CMD_PAUSE 0x20000000 /* Pause */ -#define CMD_CHECK_LATE 0x30000000 /* Check late */ -#define CMD_UPLOAD 0x40000000 /* Upload */ -#define CMD_STOP 0x50000000 /* Stop */ -#define CMD_INTERRUPT 0x60000000 /* Interrupt */ -#define CMD_JUMP 0x80000000 /* Jump */ -#define CMD_WR_REG 0x90000000 /* Write (load) register */ -#define CMD_RD_REG 0xa0000000 /* Read (store) register */ -#define CMD_WR_REG_MASK 0xc0000000 /* Write register with mask */ - -/************************************************************************/ -/* OUTPUT FORMATS */ -/************************************************************************/ - -/* output formats; each entry holds three types of information */ -/* composed is used in the sense of "not-planar" */ - -#define RGB15_COMPOSED 0x213 -/* this means: yuv2rgb-conversation-mode=2, dither=yes(=1), format-mode = 3 */ -#define RGB16_COMPOSED 0x210 -#define RGB24_COMPOSED 0x201 -#define RGB32_COMPOSED 0x202 - -#define YUV411_COMPOSED 0x003 -/* this means: yuv2rgb-conversation-mode=0, dither=no(=0), format-mode = 3 */ -#define YUV422_COMPOSED 0x000 -#define YUV411_DECOMPOSED 0x00b -#define YUV422_DECOMPOSED 0x009 -#define YUV420_DECOMPOSED 0x00a - -/************************************************************************/ -/* MISC */ -/************************************************************************/ - -/* Bit mask constants */ -#define MASK_00 0x00000001 /* Mask value for bit 0 */ -#define MASK_01 0x00000002 /* Mask value for bit 1 */ -#define MASK_02 0x00000004 /* Mask value for bit 2 */ -#define MASK_03 0x00000008 /* Mask value for bit 3 */ -#define MASK_04 0x00000010 /* Mask value for bit 4 */ -#define MASK_05 0x00000020 /* Mask value for bit 5 */ -#define MASK_06 0x00000040 /* Mask value for bit 6 */ -#define MASK_07 0x00000080 /* Mask value for bit 7 */ -#define MASK_08 0x00000100 /* Mask value for bit 8 */ -#define MASK_09 0x00000200 /* Mask value for bit 9 */ -#define MASK_10 0x00000400 /* Mask value for bit 10 */ -#define MASK_11 0x00000800 /* Mask value for bit 11 */ -#define MASK_12 0x00001000 /* Mask value for bit 12 */ -#define MASK_13 0x00002000 /* Mask value for bit 13 */ -#define MASK_14 0x00004000 /* Mask value for bit 14 */ -#define MASK_15 0x00008000 /* Mask value for bit 15 */ -#define MASK_16 0x00010000 /* Mask value for bit 16 */ -#define MASK_17 0x00020000 /* Mask value for bit 17 */ -#define MASK_18 0x00040000 /* Mask value for bit 18 */ -#define MASK_19 0x00080000 /* Mask value for bit 19 */ -#define MASK_20 0x00100000 /* Mask value for bit 20 */ -#define MASK_21 0x00200000 /* Mask value for bit 21 */ -#define MASK_22 0x00400000 /* Mask value for bit 22 */ -#define MASK_23 0x00800000 /* Mask value for bit 23 */ -#define MASK_24 0x01000000 /* Mask value for bit 24 */ -#define MASK_25 0x02000000 /* Mask value for bit 25 */ -#define MASK_26 0x04000000 /* Mask value for bit 26 */ -#define MASK_27 0x08000000 /* Mask value for bit 27 */ -#define MASK_28 0x10000000 /* Mask value for bit 28 */ -#define MASK_29 0x20000000 /* Mask value for bit 29 */ -#define MASK_30 0x40000000 /* Mask value for bit 30 */ -#define MASK_31 0x80000000 /* Mask value for bit 31 */ - -#define MASK_B0 0x000000ff /* Mask value for byte 0 */ -#define MASK_B1 0x0000ff00 /* Mask value for byte 1 */ -#define MASK_B2 0x00ff0000 /* Mask value for byte 2 */ -#define MASK_B3 0xff000000 /* Mask value for byte 3 */ - -#define MASK_W0 0x0000ffff /* Mask value for word 0 */ -#define MASK_W1 0xffff0000 /* Mask value for word 1 */ - -#define MASK_PA 0xfffffffc /* Mask value for physical address */ -#define MASK_PR 0xfffffffe /* Mask value for protection register */ -#define MASK_ER 0xffffffff /* Mask value for the entire register */ - -#define MASK_NONE 0x00000000 /* No mask */ - -/************************************************************************/ -/* REGISTERS */ -/************************************************************************/ - -#define BASE_ODD1 0x00 /* Video DMA 1 registers */ -#define BASE_EVEN1 0x04 -#define PROT_ADDR1 0x08 -#define PITCH1 0x0C -#define BASE_PAGE1 0x10 /* Video DMA 1 base page */ -#define NUM_LINE_BYTE1 0x14 - -#define BASE_ODD2 0x18 /* Video DMA 2 registers */ -#define BASE_EVEN2 0x1C -#define PROT_ADDR2 0x20 -#define PITCH2 0x24 -#define BASE_PAGE2 0x28 /* Video DMA 2 base page */ -#define NUM_LINE_BYTE2 0x2C - -#define BASE_ODD3 0x30 /* Video DMA 3 registers */ -#define BASE_EVEN3 0x34 -#define PROT_ADDR3 0x38 -#define PITCH3 0x3C -#define BASE_PAGE3 0x40 /* Video DMA 3 base page */ -#define NUM_LINE_BYTE3 0x44 - -#define PCI_BT_V1 0x48 /* Video/FIFO 1 */ -#define PCI_BT_V2 0x49 /* Video/FIFO 2 */ -#define PCI_BT_V3 0x4A /* Video/FIFO 3 */ -#define PCI_BT_DEBI 0x4B /* DEBI */ -#define PCI_BT_A 0x4C /* Audio */ - -#define DD1_INIT 0x50 /* Init setting of DD1 interface */ - -#define DD1_STREAM_B 0x54 /* DD1 B video data stream handling */ -#define DD1_STREAM_A 0x56 /* DD1 A video data stream handling */ - -#define BRS_CTRL 0x58 /* BRS control register */ -#define HPS_CTRL 0x5C /* HPS control register */ -#define HPS_V_SCALE 0x60 /* HPS vertical scale */ -#define HPS_V_GAIN 0x64 /* HPS vertical ACL and gain */ -#define HPS_H_PRESCALE 0x68 /* HPS horizontal prescale */ -#define HPS_H_SCALE 0x6C /* HPS horizontal scale */ -#define BCS_CTRL 0x70 /* BCS control */ -#define CHROMA_KEY_RANGE 0x74 -#define CLIP_FORMAT_CTRL 0x78 /* HPS outputs formats & clipping */ - -#define DEBI_CONFIG 0x7C -#define DEBI_COMMAND 0x80 -#define DEBI_PAGE 0x84 -#define DEBI_AD 0x88 - -#define I2C_TRANSFER 0x8C -#define I2C_STATUS 0x90 - -#define BASE_A1_IN 0x94 /* Audio 1 input DMA */ -#define PROT_A1_IN 0x98 -#define PAGE_A1_IN 0x9C - -#define BASE_A1_OUT 0xA0 /* Audio 1 output DMA */ -#define PROT_A1_OUT 0xA4 -#define PAGE_A1_OUT 0xA8 - -#define BASE_A2_IN 0xAC /* Audio 2 input DMA */ -#define PROT_A2_IN 0xB0 -#define PAGE_A2_IN 0xB4 - -#define BASE_A2_OUT 0xB8 /* Audio 2 output DMA */ -#define PROT_A2_OUT 0xBC -#define PAGE_A2_OUT 0xC0 - -#define RPS_PAGE0 0xC4 /* RPS task 0 page register */ -#define RPS_PAGE1 0xC8 /* RPS task 1 page register */ - -#define RPS_THRESH0 0xCC /* HBI threshold for task 0 */ -#define RPS_THRESH1 0xD0 /* HBI threshold for task 1 */ - -#define RPS_TOV0 0xD4 /* RPS timeout for task 0 */ -#define RPS_TOV1 0xD8 /* RPS timeout for task 1 */ - -#define IER 0xDC /* Interrupt enable register */ - -#define GPIO_CTRL 0xE0 /* GPIO 0-3 register */ - -#define EC1SSR 0xE4 /* Event cnt set 1 source select */ -#define EC2SSR 0xE8 /* Event cnt set 2 source select */ -#define ECT1R 0xEC /* Event cnt set 1 thresholds */ -#define ECT2R 0xF0 /* Event cnt set 2 thresholds */ - -#define ACON1 0xF4 -#define ACON2 0xF8 - -#define MC1 0xFC /* Main control register 1 */ -#define MC2 0x100 /* Main control register 2 */ - -#define RPS_ADDR0 0x104 /* RPS task 0 address register */ -#define RPS_ADDR1 0x108 /* RPS task 1 address register */ - -#define ISR 0x10C /* Interrupt status register */ -#define PSR 0x110 /* Primary status register */ -#define SSR 0x114 /* Secondary status register */ - -#define EC1R 0x118 /* Event counter set 1 register */ -#define EC2R 0x11C /* Event counter set 2 register */ - -#define PCI_VDP1 0x120 /* Video DMA pointer of FIFO 1 */ -#define PCI_VDP2 0x124 /* Video DMA pointer of FIFO 2 */ -#define PCI_VDP3 0x128 /* Video DMA pointer of FIFO 3 */ -#define PCI_ADP1 0x12C /* Audio DMA pointer of audio out 1 */ -#define PCI_ADP2 0x130 /* Audio DMA pointer of audio in 1 */ -#define PCI_ADP3 0x134 /* Audio DMA pointer of audio out 2 */ -#define PCI_ADP4 0x138 /* Audio DMA pointer of audio in 2 */ -#define PCI_DMA_DDP 0x13C /* DEBI DMA pointer */ - -#define LEVEL_REP 0x140, -#define A_TIME_SLOT1 0x180, /* from 180 - 1BC */ -#define A_TIME_SLOT2 0x1C0, /* from 1C0 - 1FC */ - -/************************************************************************/ -/* ISR-MASKS */ -/************************************************************************/ - -#define SPCI_PPEF 0x80000000 /* PCI parity error */ -#define SPCI_PABO 0x40000000 /* PCI access error (target or master abort) */ -#define SPCI_PPED 0x20000000 /* PCI parity error on 'real time data' */ -#define SPCI_RPS_I1 0x10000000 /* Interrupt issued by RPS1 */ -#define SPCI_RPS_I0 0x08000000 /* Interrupt issued by RPS0 */ -#define SPCI_RPS_LATE1 0x04000000 /* RPS task 1 is late */ -#define SPCI_RPS_LATE0 0x02000000 /* RPS task 0 is late */ -#define SPCI_RPS_E1 0x01000000 /* RPS error from task 1 */ -#define SPCI_RPS_E0 0x00800000 /* RPS error from task 0 */ -#define SPCI_RPS_TO1 0x00400000 /* RPS timeout task 1 */ -#define SPCI_RPS_TO0 0x00200000 /* RPS timeout task 0 */ -#define SPCI_UPLD 0x00100000 /* RPS in upload */ -#define SPCI_DEBI_S 0x00080000 /* DEBI status */ -#define SPCI_DEBI_E 0x00040000 /* DEBI error */ -#define SPCI_IIC_S 0x00020000 /* I2C status */ -#define SPCI_IIC_E 0x00010000 /* I2C error */ -#define SPCI_A2_IN 0x00008000 /* Audio 2 input DMA protection / limit */ -#define SPCI_A2_OUT 0x00004000 /* Audio 2 output DMA protection / limit */ -#define SPCI_A1_IN 0x00002000 /* Audio 1 input DMA protection / limit */ -#define SPCI_A1_OUT 0x00001000 /* Audio 1 output DMA protection / limit */ -#define SPCI_AFOU 0x00000800 /* Audio FIFO over- / underflow */ -#define SPCI_V_PE 0x00000400 /* Video protection address */ -#define SPCI_VFOU 0x00000200 /* Video FIFO over- / underflow */ -#define SPCI_FIDA 0x00000100 /* Field ID video port A */ -#define SPCI_FIDB 0x00000080 /* Field ID video port B */ -#define SPCI_PIN3 0x00000040 /* GPIO pin 3 */ -#define SPCI_PIN2 0x00000020 /* GPIO pin 2 */ -#define SPCI_PIN1 0x00000010 /* GPIO pin 1 */ -#define SPCI_PIN0 0x00000008 /* GPIO pin 0 */ -#define SPCI_ECS 0x00000004 /* Event counter 1, 2, 4, 5 */ -#define SPCI_EC3S 0x00000002 /* Event counter 3 */ -#define SPCI_EC0S 0x00000001 /* Event counter 0 */ - -/************************************************************************/ -/* I2C */ -/************************************************************************/ - -/* time we wait after certain i2c-operations */ -#define SAA7146_I2C_DELAY 10 - -#define SAA7146_I2C_ABORT (1<<7) -#define SAA7146_I2C_SPERR (1<<6) -#define SAA7146_I2C_APERR (1<<5) -#define SAA7146_I2C_DTERR (1<<4) -#define SAA7146_I2C_DRERR (1<<3) -#define SAA7146_I2C_AL (1<<2) -#define SAA7146_I2C_ERR (1<<1) -#define SAA7146_I2C_BUSY (1<<0) - -#define SAA7146_I2C_START (0x3) -#define SAA7146_I2C_CONT (0x2) -#define SAA7146_I2C_STOP (0x1) -#define SAA7146_I2C_NOP (0x0) - -#define SAA7146_I2C_BUS_BIT_RATE_6400 (0x500) -#define SAA7146_I2C_BUS_BIT_RATE_3200 (0x100) -#define SAA7146_I2C_BUS_BIT_RATE_480 (0x400) -#define SAA7146_I2C_BUS_BIT_RATE_320 (0x600) -#define SAA7146_I2C_BUS_BIT_RATE_240 (0x700) -#define SAA7146_I2C_BUS_BIT_RATE_120 (0x000) -#define SAA7146_I2C_BUS_BIT_RATE_80 (0x200) -#define SAA7146_I2C_BUS_BIT_RATE_60 (0x300) - - -#endif diff -Nru a/drivers/media/dvb/av7110/saa7146_v4l.c b/drivers/media/dvb/av7110/saa7146_v4l.c --- a/drivers/media/dvb/av7110/saa7146_v4l.c Sat Apr 12 14:44:10 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,501 +0,0 @@ -/* - video4linux-parts of the saa7146 device driver - - Copyright (C) 1998,1999 Michael Hunold - - 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., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include /* for module-version */ -#include -#include /* for kmalloc/kfree */ -#include /* for delay-stuff */ -#include /* for copy_to/from_user */ -#include /* for mem_map_reserve */ -#include -#include - -#include "saa7146_defs.h" -#include "saa7146_core.h" -#include "saa7146_v4l.h" - - -static int saa7146_v4l_debug = 0; - -#define dprintk if (saa7146_v4l_debug) printk -#define hprintk if (saa7146_v4l_debug >= 2) printk -#define gprintk if (saa7146_v4l_debug >= 3) printk - -#define __COMPILE_SAA7146__ -#include "saa7146.c" - -/* transform video4linux-cliplist to plain arrays -- we assume that the arrays - are big enough -- if not: your fault! */ -int saa7146_v4lclip2plain(struct video_clip *clips, u16 clipcount, int x[], int y[], int width[], int height[]) -{ - int i = 0; - struct video_clip* vc = NULL; - - dprintk("saa7146_v4l.o: ==> saa7146_v4lclip2plain, cc:%d\n",clipcount); - - /* anything to do here? */ - if( 0 == clipcount ) - return 0; - - /* copy to kernel-space */ - vc = vmalloc(sizeof(struct video_clip)*(clipcount)); - if( NULL == vc ) { - printk("saa7146_v4l.o: ==> v4lclip2saa7146_v4l.o: no memory #2!\n"); - return -ENOMEM; - } - if(copy_from_user(vc,clips,sizeof(struct video_clip)*clipcount)) { - printk("saa7146_v4l.o: ==> v4lclip2saa7146_v4l.o: could not copy from user-space!\n"); - return -EFAULT; - } - - /* copy the clip-list to the arrays - note: the video_clip-struct may contain negative values to indicate that a window - doesn't lay completly over the video window. Thus, we correct the values right here */ - for(i = 0; i < clipcount; i++) { - - if( vc[i].width < 0) { - vc[i].x += vc[i].width; vc[i].width = -vc[i].width; - } - if( vc[i].height < 0) { - vc[i].y += vc[i].height; vc[i].height = -vc[i].height; - } - - if( vc[i].x < 0) { - vc[i].width += vc[i].x; vc[i].x = 0; - } - if( vc[i].y < 0) { - vc[i].height += vc[i].y; vc[i].y = 0; - } - - if(vc[i].width <= 0 || vc[i].height <= 0) { - vfree(vc); - return -EINVAL; - } - - x[i] = vc[i].x; - y[i] = vc[i].y; - width[i] = vc[i].width; - height[i] = vc[i].height; - } - - /* free memory used for temporary clips */ - vfree(vc); - - return 0; -} - -struct saa7146_v4l_struct { - struct video_buffer buffer; - struct video_mbuf mbuf; - struct video_window window; - struct video_picture picture; -}; - -static int saa7146_v4l_command(struct saa7146* saa, void *p, unsigned int cmd, void *arg) -{ - struct saa7146_v4l_struct* data = (struct saa7146_v4l_struct*)p; - - hprintk("saa7146_v4l.o: ==> saa7146_v4l_command\n"); - - if( NULL == saa) - return -EINVAL; - - switch(cmd) { - case SAA7146_V4L_GPICT: - { - struct video_picture *p = arg; - - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_GPICT\n"); - - memcpy(p, &data->picture, sizeof(struct video_picture)); - - } - break; - - case SAA7146_V4L_SPICT: - { - struct video_picture *p = arg; - - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_SPICT\n"); - - memcpy(&data->picture, p, sizeof(struct video_picture)); - set_picture_prop(saa, (u32)(data->picture.brightness>>8),(u32)(data->picture.contrast>>9),(u32)(data->picture.colour>>9)); - - } - break; - - case SAA7146_V4L_SWIN: - { - struct video_window *vw = arg; - int *x = NULL, *y = NULL, *w = NULL, *h = NULL; - - u32 palette = 0; - - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_SWIN\n"); - - video_setmode(saa, 0); - saa7146_write(saa->mem, MC1, (MASK_21)); - - set_window(saa, vw->width, vw->height,0,0,0); - //saa->port, saa->sync); - if (move_to(saa, vw->x, vw->y, vw->height, data->buffer.width, - data->buffer.depth, data->buffer.bytesperline, - (u32)data->buffer.base, 0)<0) - return -1; - - switch( data->picture.palette ) { - - case VIDEO_PALETTE_RGB555: - palette = RGB15_COMPOSED; - break; - - case VIDEO_PALETTE_RGB24: - palette = RGB24_COMPOSED; - break; - - case VIDEO_PALETTE_RGB32: - palette = RGB32_COMPOSED; - break; - - case VIDEO_PALETTE_UYVY: - palette = YUV422_COMPOSED; - break; - - case VIDEO_PALETTE_YUV422P: - palette = YUV422_DECOMPOSED; - break; - - case VIDEO_PALETTE_YUV420P: - palette = YUV420_DECOMPOSED; - break; - - case VIDEO_PALETTE_YUV411P: - palette = YUV411_DECOMPOSED; - break; - - default: - /*case VIDEO_PALETTE_RGB565:*/ - palette = RGB16_COMPOSED; - break; - } - - set_output_format(saa, palette); - - if (vw->flags==VIDEO_CLIP_BITMAP) { - clip_windows(saa, SAA7146_CLIPPING_MASK, vw->width, vw->height, - (u32 *) vw->clips, 1, 0, 0, 0, 0); - } else { - - - /* this is tricky, but helps us saving kmalloc/kfree-calls - and boring if/else-constructs ... */ - x = (int*)kmalloc(sizeof(int)*vw->clipcount*4,GFP_KERNEL); - if( NULL == x ) { - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_SWIN: out of kernel-memory.\n"); - return -ENOMEM; - } - y = x+(1*vw->clipcount); - w = x+(2*vw->clipcount); - h = x+(3*vw->clipcount); - - /* transform clipping-windows */ - if (0 != saa7146_v4lclip2plain(vw->clips, vw->clipcount,x,y,w,h)) - break; - clip_windows(saa, SAA7146_CLIPPING_RECT, vw->width, vw->height, - NULL, vw->clipcount, x, y, w, h); - kfree(x); - - memcpy(&data->window, arg, sizeof(struct video_window)); - } - video_setmode(saa, 1); - break; - } - - case SAA7146_V4L_CCAPTURE: - { - int* i = arg; - - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_CCAPTURE\n"); - - if ( 0 == *i ) { - video_setmode(saa, 0); - } - else { - video_setmode(saa, 1); - } - - break; - } - - case SAA7146_V4L_GFBUF: - { - struct video_buffer *b = arg; - - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_GFBUF\n"); - - memcpy(b, &data->buffer, sizeof(struct video_buffer)); - - break; - } - - case SAA7146_V4L_SFBUF: - { - struct video_buffer *b = arg; - - memcpy(&data->buffer, b, sizeof(struct video_buffer)); - hprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_SFBUF: b:0x%08x, h:%d, w:%d, d:%d\n", (u32)data->buffer.base, data->buffer.height, data->buffer.width, data->buffer.depth); - - break; - } - - - case SAA7146_V4L_CSYNC: - { - int i = *((int*)arg); - - int count = 0, k = 0; - unsigned char* grabbfr; - unsigned char y, uv; - - /* sanity checks */ - if ( i >= saa->buffers || i < 0) { - gprintk("saa7146_v4l.o: SAA7146_V4L_CSYNC, invalid buffer %d\n",i); - return -EINVAL; - } - - /* get the state */ - switch ( saa->frame_stat[i] ) { - case GBUFFER_UNUSED: - { - /* there was no grab to this buffer */ - gprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_CSYNC, invalid frame (fr:%d)\n",i); - return -EINVAL; - } - case GBUFFER_GRABBING: - { - /* wait to be woken up by the irq-handler */ - interruptible_sleep_on(&saa->rps0_wq); - break; - } - case GBUFFER_DONE: - { - gprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_CSYNC, frame done! (fr:%d)\n",i); - break; - } - } - - /* all saa7146´s below chip-revision 3 are not capable of - doing byte-swaps with video-dma1. for rgb-grabbing this - does not matter, but yuv422-grabbing has the wrong - byte-order, so we have to swap in software */ - if ( ( saa->revision<3) && - (saa->grab_format[i] == YUV422_COMPOSED)) { - /* swap UYVY to YUYV */ - count = saa->grab_height[i]*saa->grab_width[i]*2; - grabbfr = ((unsigned char*)(saa->grabbing))+i*GRABBING_MEM_SIZE; - for (k=0; kframe_stat[i] = GBUFFER_UNUSED; - - break; - } - case SAA7146_V4L_CMCAPTURE: - { - struct video_mmap *vm = arg; - - gprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_CMCAPTURE, trying buffer:%d\n", vm->frame); - - /* check status for wanted frame */ - if ( GBUFFER_GRABBING == saa->frame_stat[vm->frame] ) { - gprintk("saa7146_v4l.o: frame #%d still grabbing!\n",vm->frame); - return -EBUSY; - } - - /* do necessary transformations from the videodev-structure to our own format. */ - - /* sanity checks */ - if ( vm->width <= 0 || vm->height <= 0 ) { - gprintk("saa7146_v4l.o: set_up_grabbing, invalid dimension for wanted buffer %d\n",vm->frame); - return -EINVAL; - } - - /* set corresponding buffer to ´grabbing´ */ - saa->frame_stat[vm->frame] = GBUFFER_GRABBING; - - /* copy grabbing informtaion for the buffer */ - saa->grab_height[vm->frame] = vm->height; - saa->grab_width[vm->frame] = vm->width; - /* fixme: setting of grabbing port ?!*/ - saa->grab_port[vm->frame] = 0; - - switch( vm->format ) { - - case VIDEO_PALETTE_RGB555: - saa->grab_format[vm->frame] = RGB15_COMPOSED; - break; - - case VIDEO_PALETTE_RGB24: - saa->grab_format[vm->frame] = RGB24_COMPOSED; - break; - - case VIDEO_PALETTE_RGB32: - saa->grab_format[vm->frame] = RGB32_COMPOSED; - break; - - case VIDEO_PALETTE_YUV420P: - return -EINVAL; - - case VIDEO_PALETTE_YUV422: - saa->grab_format[vm->frame] = YUV422_COMPOSED; - break; - - case VIDEO_PALETTE_YUV422P: - saa->grab_format[vm->frame] = YUV422_DECOMPOSED; - break; - - case VIDEO_PALETTE_YUV411P: - saa->grab_format[vm->frame] = YUV411_DECOMPOSED; - break; - - default: - /*case VIDEO_PALETTE_RGB565:*/ - saa->grab_format[vm->frame] = RGB16_COMPOSED; - break; - } - - set_up_grabbing(saa,vm->frame); - break; - } - case SAA7146_V4L_GMBUF: - { - struct video_mbuf *m = arg; - int i = 0; - - m->size = saa->buffers * GRABBING_MEM_SIZE; - m->frames = saa->buffers; - - for(i = 0; i < saa->buffers; i++) - m->offsets[i]=(i*GRABBING_MEM_SIZE); - - gprintk(KERN_ERR "saa7146_v4l.o: SAA7146_V4L_GMBUF, providing %d buffers.\n", saa->buffers); - - break; - } - - default: - return -ENOIOCTLCMD; - } - - return 0; -} - -int saa7146_v4l_attach(struct saa7146* adap, void** p) -{ - struct saa7146_v4l_struct* data; - - hprintk("saa7146_v4l.o: ==> saa7146_v4l_inc_use_attach\n"); - - if (!(data = kmalloc(sizeof(struct saa7146_v4l_struct), GFP_KERNEL))) { - printk (KERN_ERR "%s: out of memory!\n", __FUNCTION__); - return -ENOMEM; - } - *(struct saa7146_v4l_struct**)p = data; - - memset(&data->buffer, 0x0, sizeof(struct video_buffer)); - memset(&data->mbuf, 0x0, sizeof(struct video_mbuf)); - memset(&data->window, 0x0, sizeof(struct video_window)); - memset(&data->picture,0x0, sizeof(struct video_picture)); - - data->picture.brightness = 32768; - data->picture.contrast = 32768; - data->picture.colour = 32768; /* saturation */ - data->picture.depth = 16; - data->picture.palette = VIDEO_PALETTE_RGB565; - - return 0; -} - - -void saa7146_v4l_inc_use(struct saa7146* adap) -{ - MOD_INC_USE_COUNT; -} - - -int saa7146_v4l_detach(struct saa7146* adap, void** p) -{ - struct saa7146_v4l_struct** data = (struct saa7146_v4l_struct**)p; - - kfree(*data); - *data = NULL; - - return 0; -} - - -void saa7146_v4l_dec_use(struct saa7146* adap) -{ - MOD_DEC_USE_COUNT; -} - - -static struct saa7146_extension saa7146_v4l_extension = { - "v4l extension\0", - MASK_27, /* handles rps0 irqs */ - saa7146_std_grab_irq_callback_rps0, - saa7146_v4l_command, - saa7146_v4l_attach, - saa7146_v4l_detach, - saa7146_v4l_inc_use, - saa7146_v4l_dec_use -}; - - -int saa7146_v4l_init (void) -{ - int res = 0; - - if((res = saa7146_add_extension(&saa7146_v4l_extension))) { - printk("saa7146_v4l.o: extension registration failed, module not inserted.\n"); - return res; - } - - return 0; -} - - -void saa7146_v4l_exit (void) -{ - int res = 0; - if ((res = saa7146_del_extension(&saa7146_v4l_extension))) { - printk("saa7146_v4l.o: extension deregistration failed, module not removed.\n"); - } -} - -MODULE_PARM(saa7146_v4l_debug, "i"); -MODULE_PARM_DESC(saa7146_v4l_debug, "set saa7146_v4l.c in debug mode"); - diff -Nru a/drivers/media/dvb/av7110/saa7146_v4l.h b/drivers/media/dvb/av7110/saa7146_v4l.h --- a/drivers/media/dvb/av7110/saa7146_v4l.h Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,32 +0,0 @@ -#ifndef __INCLUDED_SAA7146_V4L_V4L__ -#define __INCLUDED_SAA7146_V4L_V4L__ - -/************************************************************************/ -/* ADDRESSING */ -/************************************************************************/ - -#define SAA7146_V4L_BASE 100 - -#define SAA7146_V4L_GPICT _IOW('d', (SAA7146_V4L_BASE+ 1), struct video_picture) -#define SAA7146_V4L_SPICT _IOW('d', (SAA7146_V4L_BASE+ 2), struct video_picture) - -#define SAA7146_V4L_GFBUF _IOW('d', (SAA7146_V4L_BASE+ 3), struct video_buffer) -#define SAA7146_V4L_SFBUF _IOW('d', (SAA7146_V4L_BASE+ 4), struct video_buffer) - -#define SAA7146_V4L_GMBUF _IOW('d', (SAA7146_V4L_BASE+ 5), struct video_mbuf) - -#define SAA7146_V4L_SWIN _IOW('d', (SAA7146_V4L_BASE+ 6), struct video_window) - -#define SAA7146_V4L_CCAPTURE _IOW('d', (SAA7146_V4L_BASE+ 7), int) - -#define SAA7146_V4L_CMCAPTURE _IOW('d', (SAA7146_V4L_BASE+ 8), struct video_mmap) -#define SAA7146_V4L_CSYNC _IOW('d', (SAA7146_V4L_BASE+ 9), int) -#define SAA7146_V4L_CGSTATUS _IOW('d', (SAA7146_V4L_BASE+10), int) - -#define SAA7146_V4L_TSCAPTURE _IOW('d', (SAA7146_V4L_BASE+11), int) - -extern int saa7146_v4l_init (void); -extern void saa7146_v4l_exit (void); - -#endif - diff -Nru a/drivers/media/dvb/dvb-core/Makefile b/drivers/media/dvb/dvb-core/Makefile --- a/drivers/media/dvb/dvb-core/Makefile Sat Apr 12 14:44:10 2003 +++ b/drivers/media/dvb/dvb-core/Makefile Sat Apr 12 14:44:10 2003 @@ -3,6 +3,6 @@ # dvb-core-objs = dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \ - dvb_frontend.o dvb_i2c.o dvb_net.o dvb_ksyms.o + dvb_frontend.o dvb_i2c.o dvb_net.o dvb_ksyms.o dvb_ringbuffer.o obj-$(CONFIG_DVB_CORE) += dvb-core.o diff -Nru a/drivers/media/dvb/dvb-core/Makefile.lib b/drivers/media/dvb/dvb-core/Makefile.lib --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/dvb-core/Makefile.lib Sat Apr 12 14:44:10 2003 @@ -0,0 +1 @@ +obj-$(CONFIG_DVB_CORE) += crc32.o diff -Nru a/drivers/media/dvb/dvb-core/compat.h b/drivers/media/dvb/dvb-core/compat.h --- a/drivers/media/dvb/dvb-core/compat.h Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,24 +0,0 @@ -#ifndef __CRAP_H -#define __CRAP_H - -/** - * compatibility crap for old kernels. No guarantee for a working driver - * even when everything compiles. - */ - - -#include -#include - -#ifndef MODULE_LICENSE -#define MODULE_LICENSE(x) -#endif - -#ifndef list_for_each_safe -#define list_for_each_safe(pos, n, head) \ - for (pos = (head)->next, n = pos->next; pos != (head); \ - pos = n, n = pos->next) -#endif - -#endif - diff -Nru a/drivers/media/dvb/dvb-core/demux.h b/drivers/media/dvb/dvb-core/demux.h --- a/drivers/media/dvb/dvb-core/demux.h Sat Apr 12 14:44:07 2003 +++ b/drivers/media/dvb/dvb-core/demux.h Sat Apr 12 14:44:07 2003 @@ -144,6 +144,14 @@ int is_filtering; /* Set to non-zero when filtering in progress */ struct dmx_demux_s* parent; /* Back-pointer */ void* priv; /* Pointer to private data of the API client */ + + int check_crc; + u32 crc_val; + + u8 secbuf[4096]; + int secbufp; + int seclen; + int (*set) (struct dmx_section_feed_s* feed, __u16 pid, size_t circular_buffer_size, @@ -162,16 +170,16 @@ /* Callback functions */ /*--------------------------------------------------------------------------*/ -typedef int (*dmx_ts_cb) ( __u8 * buffer1, +typedef int (*dmx_ts_cb) ( const u8 * buffer1, size_t buffer1_length, - __u8 * buffer2, + const u8 * buffer2, size_t buffer2_length, dmx_ts_feed_t* source, dmx_success_t success); -typedef int (*dmx_section_cb) ( __u8 * buffer1, +typedef int (*dmx_section_cb) ( const u8 * buffer1, size_t buffer1_len, - __u8 * buffer2, + const u8 * buffer2, size_t buffer2_len, dmx_section_filter_t * source, dmx_success_t success); @@ -278,6 +286,9 @@ int (*disconnect_frontend) (struct dmx_demux_s* demux); int (*get_pes_pids) (struct dmx_demux_s* demux, __u16 *pids); + + int (*get_stc) (struct dmx_demux_s* demux, unsigned int num, + uint64_t *stc, unsigned int *base); }; typedef struct dmx_demux_s dmx_demux_t; diff -Nru a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c --- a/drivers/media/dvb/dvb-core/dmxdev.c Sat Apr 12 14:44:09 2003 +++ b/drivers/media/dvb/dvb-core/dmxdev.c Sat Apr 12 14:44:09 2003 @@ -2,8 +2,8 @@ * dmxdev.c - DVB demultiplexer device * * Copyright (C) 2000 Ralph Metzler - * & Marcus Metzler - for convergence integrated media GmbH + * & Marcus Metzler + for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -24,11 +24,13 @@ #include #include #include -#include #include #include "dmxdev.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #include "compat.h" +#endif //MODULE_DESCRIPTION(""); //MODULE_AUTHOR("Ralph Metzler, Marcus Metzler"); @@ -43,133 +45,133 @@ inline dmxdev_filter_t * dvb_dmxdev_file_to_filter(struct file *file) { - return (dmxdev_filter_t *) file->private_data; + return (dmxdev_filter_t *) file->private_data; } inline dmxdev_dvr_t * dvb_dmxdev_file_to_dvr(dmxdev_t *dmxdev, struct file *file) { - return (dmxdev_dvr_t *) file->private_data; + return (dmxdev_dvr_t *) file->private_data; } static inline void dvb_dmxdev_buffer_init(dmxdev_buffer_t *buffer) { - buffer->data=0; - buffer->size=8192; - buffer->pread=0; - buffer->pwrite=0; - buffer->error=0; - init_waitqueue_head(&buffer->queue); + buffer->data=0; + buffer->size=8192; + buffer->pread=0; + buffer->pwrite=0; + buffer->error=0; + init_waitqueue_head(&buffer->queue); } -static inline int -dvb_dmxdev_buffer_write(dmxdev_buffer_t *buf, uint8_t *src, int len) -{ - int split; - int free; - int todo; +static inline +int dvb_dmxdev_buffer_write(dmxdev_buffer_t *buf, const u8 *src, int len) +{ + int split; + int free; + int todo; if (!len) - return 0; + return 0; if (!buf->data) - return 0; + return 0; - free=buf->pread-buf->pwrite; - split=0; - if (free<=0) { - free+=buf->size; - split=buf->size-buf->pwrite; - } - if (len>=free) { + free=buf->pread-buf->pwrite; + split=0; + if (free<=0) { + free+=buf->size; + split=buf->size-buf->pwrite; + } + if (len>=free) { dprintk("dmxdev: buffer overflow\n"); - return -1; + return -1; } - if (split>=len) - split=0; - todo=len; - if (split) { - memcpy(buf->data + buf->pwrite, src, split); - todo-=split; - buf->pwrite=0; - } - memcpy(buf->data + buf->pwrite, src+split, todo); - buf->pwrite=(buf->pwrite+todo)%buf->size; - return len; + if (split>=len) + split=0; + todo=len; + if (split) { + memcpy(buf->data + buf->pwrite, src, split); + todo-=split; + buf->pwrite=0; + } + memcpy(buf->data + buf->pwrite, src+split, todo); + buf->pwrite=(buf->pwrite+todo)%buf->size; + return len; } static ssize_t dvb_dmxdev_buffer_read(dmxdev_buffer_t *src, int non_blocking, - char *buf, size_t count, loff_t *ppos) + char *buf, size_t count, loff_t *ppos) { - unsigned long todo=count; - int split, avail, error; + unsigned long todo=count; + int split, avail, error; if (!src->data) - return 0; + return 0; if ((error=src->error)) { src->pwrite=src->pread; - src->error=0; + src->error=0; return error; } if (non_blocking && (src->pwrite==src->pread)) - return -EWOULDBLOCK; + return -EWOULDBLOCK; - while (todo>0) { - if (non_blocking && (src->pwrite==src->pread)) - return (count-todo) ? (count-todo) : -EWOULDBLOCK; + while (todo>0) { + if (non_blocking && (src->pwrite==src->pread)) + return (count-todo) ? (count-todo) : -EWOULDBLOCK; - if (wait_event_interruptible(src->queue, + if (wait_event_interruptible(src->queue, (src->pread!=src->pwrite) || (src->error))<0) - return count-todo; + return count-todo; if ((error=src->error)) { src->pwrite=src->pread; - src->error=0; + src->error=0; return error; } - split=src->size; - avail=src->pwrite - src->pread; - if (avail<0) { - avail+=src->size; - split=src->size - src->pread; - } - if (avail>todo) - avail=todo; - if (splitdata+src->pread, split)) - return -EFAULT; - buf+=split; - src->pread=0; - todo-=split; - avail-=split; - } - if (avail) { - if (copy_to_user(buf, src->data+src->pread, avail)) - return -EFAULT; - src->pread = (src->pread + avail) % src->size; - todo-=avail; - buf+=avail; - } - } - return count; + split=src->size; + avail=src->pwrite - src->pread; + if (avail<0) { + avail+=src->size; + split=src->size - src->pread; + } + if (avail>todo) + avail=todo; + if (splitdata+src->pread, split)) + return -EFAULT; + buf+=split; + src->pread=0; + todo-=split; + avail-=split; + } + if (avail) { + if (copy_to_user(buf, src->data+src->pread, avail)) + return -EFAULT; + src->pread = (src->pread + avail) % src->size; + todo-=avail; + buf+=avail; + } + } + return count; } static dmx_frontend_t * get_fe(dmx_demux_t *demux, int type) { - struct list_head *head, *pos; + struct list_head *head, *pos; - head=demux->get_frontends(demux); + head=demux->get_frontends(demux); if (!head) - return 0; + return 0; list_for_each(pos, head) - if (DMX_FE_ENTRY(pos)->source==type) - return DMX_FE_ENTRY(pos); + if (DMX_FE_ENTRY(pos)->source==type) + return DMX_FE_ENTRY(pos); return 0; } @@ -177,8 +179,8 @@ static inline void dvb_dmxdev_dvr_state_set(dmxdev_dvr_t *dmxdevdvr, int state) { - spin_lock_irq(&dmxdevdvr->dev->lock); - dmxdevdvr->state=state; + spin_lock_irq(&dmxdevdvr->dev->lock); + dmxdevdvr->state=state; spin_unlock_irq(&dmxdevdvr->dev->lock); } @@ -186,17 +188,17 @@ { struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; dmxdev_t *dmxdev=(dmxdev_t *) dvbdev->priv; - dmx_frontend_t *front; + dmx_frontend_t *front; - dprintk ("function : %s\n", __FUNCTION__); + dprintk ("function : %s\n", __FUNCTION__); - if (down_interruptible (&dmxdev->mutex)) + if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; if ((file->f_flags&O_ACCMODE)==O_RDWR) { - if (!(dmxdev->capabilities&DMXDEV_CAP_DUPLEX)) { + if (!(dmxdev->capabilities&DMXDEV_CAP_DUPLEX)) { up(&dmxdev->mutex); - return -EOPNOTSUPP; + return -EOPNOTSUPP; } } @@ -206,12 +208,12 @@ dmxdev->dvr_buffer.data=vmalloc(DVR_BUFFER_SIZE); if (!dmxdev->dvr_buffer.data) { up(&dmxdev->mutex); - return -ENOMEM; + return -ENOMEM; } } if ((file->f_flags&O_ACCMODE)==O_WRONLY) { - dmxdev->dvr_orig_fe=dmxdev->demux->frontend; + dmxdev->dvr_orig_fe=dmxdev->demux->frontend; if (!dmxdev->demux->write) { up(&dmxdev->mutex); @@ -222,13 +224,13 @@ if (!front) { up(&dmxdev->mutex); - return -EINVAL; + return -EINVAL; } dmxdev->demux->disconnect_frontend(dmxdev->demux); dmxdev->demux->connect_frontend(dmxdev->demux, front); } - up(&dmxdev->mutex); - return 0; + up(&dmxdev->mutex); + return 0; } static int dvb_dvr_release(struct inode *inode, struct file *file) @@ -236,25 +238,25 @@ struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; dmxdev_t *dmxdev=(dmxdev_t *) dvbdev->priv; - if (down_interruptible (&dmxdev->mutex)) + if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; if ((file->f_flags&O_ACCMODE)==O_WRONLY) { - dmxdev->demux->disconnect_frontend(dmxdev->demux); + dmxdev->demux->disconnect_frontend(dmxdev->demux); dmxdev->demux->connect_frontend(dmxdev->demux, dmxdev->dvr_orig_fe); } if ((file->f_flags&O_ACCMODE)==O_RDONLY) { if (dmxdev->dvr_buffer.data) { - void *mem=dmxdev->dvr_buffer.data; + void *mem=dmxdev->dvr_buffer.data; mb(); spin_lock_irq(&dmxdev->lock); dmxdev->dvr_buffer.data=0; spin_unlock_irq(&dmxdev->lock); - vfree(mem); + vfree(mem); } } - up(&dmxdev->mutex); + up(&dmxdev->mutex); return 0; } @@ -265,14 +267,14 @@ dmxdev_t *dmxdev=(dmxdev_t *) dvbdev->priv; int ret; - if (!dmxdev->demux->write) - return -EOPNOTSUPP; + if (!dmxdev->demux->write) + return -EOPNOTSUPP; if ((file->f_flags&O_ACCMODE)!=O_WRONLY) - return -EINVAL; - if (down_interruptible (&dmxdev->mutex)) + return -EINVAL; + if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; - ret=dmxdev->demux->write(dmxdev->demux, buf, count); - up(&dmxdev->mutex); + ret=dmxdev->demux->write(dmxdev->demux, buf, count); + up(&dmxdev->mutex); return ret; } @@ -283,19 +285,19 @@ dmxdev_t *dmxdev=(dmxdev_t *) dvbdev->priv; int ret; - //down(&dmxdev->mutex); - ret= dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer, + //down(&dmxdev->mutex); + ret= dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer, file->f_flags&O_NONBLOCK, buf, count, ppos); - //up(&dmxdev->mutex); + //up(&dmxdev->mutex); return ret; } static inline void dvb_dmxdev_filter_state_set(dmxdev_filter_t *dmxdevfilter, int state) { - spin_lock_irq(&dmxdevfilter->dev->lock); - dmxdevfilter->state=state; + spin_lock_irq(&dmxdevfilter->dev->lock); + dmxdevfilter->state=state; spin_unlock_irq(&dmxdevfilter->dev->lock); } @@ -306,25 +308,25 @@ void *mem; if (buf->size==size) - return 0; - if (dmxdevfilter->state>=DMXDEV_STATE_GO) - return -EBUSY; + return 0; + if (dmxdevfilter->state>=DMXDEV_STATE_GO) + return -EBUSY; spin_lock_irq(&dmxdevfilter->dev->lock); mem=buf->data; buf->data=0; buf->size=size; buf->pwrite=buf->pread=0; spin_unlock_irq(&dmxdevfilter->dev->lock); - if (mem) + if (mem) vfree(mem); - if (buf->size) { - mem=vmalloc(dmxdevfilter->buffer.size); + if (buf->size) { + mem=vmalloc(dmxdevfilter->buffer.size); if (!mem) - return -ENOMEM; - spin_lock_irq(&dmxdevfilter->dev->lock); - buf->data=mem; - spin_unlock_irq(&dmxdevfilter->dev->lock); + return -ENOMEM; + spin_lock_irq(&dmxdevfilter->dev->lock); + buf->data=mem; + spin_unlock_irq(&dmxdevfilter->dev->lock); } return 0; } @@ -332,23 +334,23 @@ static void dvb_dmxdev_filter_timeout(unsigned long data) { - dmxdev_filter_t *dmxdevfilter=(dmxdev_filter_t *)data; + dmxdev_filter_t *dmxdevfilter=(dmxdev_filter_t *)data; dmxdevfilter->buffer.error=-ETIMEDOUT; - spin_lock_irq(&dmxdevfilter->dev->lock); + spin_lock_irq(&dmxdevfilter->dev->lock); dmxdevfilter->state=DMXDEV_STATE_TIMEDOUT; - spin_unlock_irq(&dmxdevfilter->dev->lock); + spin_unlock_irq(&dmxdevfilter->dev->lock); wake_up(&dmxdevfilter->buffer.queue); } static void dvb_dmxdev_filter_timer(dmxdev_filter_t *dmxdevfilter) { - struct dmx_sct_filter_params *para=&dmxdevfilter->params.sec; + struct dmx_sct_filter_params *para=&dmxdevfilter->params.sec; del_timer(&dmxdevfilter->timer); if (para->timeout) { - dmxdevfilter->timer.function=dvb_dmxdev_filter_timeout; + dmxdevfilter->timer.function=dvb_dmxdev_filter_timeout; dmxdevfilter->timer.data=(unsigned long) dmxdevfilter; dmxdevfilter->timer.expires=jiffies+1+(HZ/2+HZ*para->timeout)/1000; add_timer(&dmxdevfilter->timer); @@ -356,53 +358,51 @@ } static int -dvb_dmxdev_section_callback(u8 *buffer1, size_t buffer1_len, - u8 *buffer2, size_t buffer2_len, - dmx_section_filter_t *filter, - dmx_success_t success) -{ - dmxdev_filter_t *dmxdevfilter=(dmxdev_filter_t *) filter->priv; - int ret; - +dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, + const u8 *buffer2, size_t buffer2_len, + dmx_section_filter_t *filter, dmx_success_t success) +{ + dmxdev_filter_t *dmxdevfilter=(dmxdev_filter_t *) filter->priv; + int ret; + if (dmxdevfilter->buffer.error) { wake_up(&dmxdevfilter->buffer.queue); - return 0; + return 0; } spin_lock(&dmxdevfilter->dev->lock); if (dmxdevfilter->state!=DMXDEV_STATE_GO) { spin_unlock(&dmxdevfilter->dev->lock); - return 0; + return 0; } del_timer(&dmxdevfilter->timer); dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n", buffer1[0], buffer1[1], buffer1[2], buffer1[3], buffer1[4], buffer1[5]); - ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1, buffer1_len); - if (ret==buffer1_len) { - ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2, buffer2_len); - } - if (ret<0) { - dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread; - dmxdevfilter->buffer.error=-EOVERFLOW; + ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1, buffer1_len); + if (ret==buffer1_len) { + ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2, buffer2_len); + } + if (ret<0) { + dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread; + dmxdevfilter->buffer.error=-EOVERFLOW; } if (dmxdevfilter->params.sec.flags&DMX_ONESHOT) - dmxdevfilter->state=DMXDEV_STATE_DONE; + dmxdevfilter->state=DMXDEV_STATE_DONE; spin_unlock(&dmxdevfilter->dev->lock); wake_up(&dmxdevfilter->buffer.queue); return 0; } static int -dvb_dmxdev_ts_callback(u8 *buffer1, size_t buffer1_len, - u8 *buffer2, size_t buffer2_len, - dmx_ts_feed_t *feed, - dmx_success_t success) +dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, + const u8 *buffer2, size_t buffer2_len, + dmx_ts_feed_t *feed, dmx_success_t success) { - dmxdev_filter_t *dmxdevfilter=(dmxdev_filter_t *) feed->priv; + dmxdev_filter_t *dmxdevfilter=(dmxdev_filter_t *) feed->priv; dmxdev_buffer_t *buffer; - int ret; - + int ret; + spin_lock(&dmxdevfilter->dev->lock); if (dmxdevfilter->params.pes.output==DMX_OUT_DECODER) { spin_unlock(&dmxdevfilter->dev->lock); @@ -410,20 +410,20 @@ } if (dmxdevfilter->params.pes.output==DMX_OUT_TAP) - buffer=&dmxdevfilter->buffer; + buffer=&dmxdevfilter->buffer; else - buffer=&dmxdevfilter->dev->dvr_buffer; + buffer=&dmxdevfilter->dev->dvr_buffer; if (buffer->error) { spin_unlock(&dmxdevfilter->dev->lock); wake_up(&buffer->queue); - return 0; + return 0; } - ret=dvb_dmxdev_buffer_write(buffer, buffer1, buffer1_len); - if (ret==buffer1_len) - ret=dvb_dmxdev_buffer_write(buffer, buffer2, buffer2_len); - if (ret<0) { - buffer->pwrite=buffer->pread; - buffer->error=-EOVERFLOW; + ret=dvb_dmxdev_buffer_write(buffer, buffer1, buffer1_len); + if (ret==buffer1_len) + ret=dvb_dmxdev_buffer_write(buffer, buffer2, buffer2_len); + if (ret<0) { + buffer->pwrite=buffer->pread; + buffer->error=-EOVERFLOW; } spin_unlock(&dmxdevfilter->dev->lock); wake_up(&buffer->queue); @@ -440,49 +440,50 @@ switch (dmxdevfilter->type) { case DMXDEV_TYPE_SEC: - del_timer(&dmxdevfilter->timer); - dmxdevfilter->feed.sec->stop_filtering(dmxdevfilter->feed.sec); + del_timer(&dmxdevfilter->timer); + dmxdevfilter->feed.sec->stop_filtering(dmxdevfilter->feed.sec); break; case DMXDEV_TYPE_PES: - dmxdevfilter->feed.ts->stop_filtering(dmxdevfilter->feed.ts); + dmxdevfilter->feed.ts->stop_filtering(dmxdevfilter->feed.ts); break; default: - return -EINVAL; + return -EINVAL; } - return 0; + return 0; } /* start feed associated with the specified filter */ -static int -dvb_dmxdev_feed_start(dmxdev_filter_t *dmxdevfilter) +static +int dvb_dmxdev_feed_start(dmxdev_filter_t *filter) { - dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_GO); + dvb_dmxdev_filter_state_set (filter, DMXDEV_STATE_GO); - switch (dmxdevfilter->type) { + switch (filter->type) { case DMXDEV_TYPE_SEC: - dmxdevfilter->feed.sec->start_filtering(dmxdevfilter->feed.sec); + return filter->feed.sec->start_filtering(filter->feed.sec); break; case DMXDEV_TYPE_PES: - dmxdevfilter->feed.ts->start_filtering(dmxdevfilter->feed.ts); + return filter->feed.ts->start_filtering(filter->feed.ts); break; default: - return -EINVAL; + return -EINVAL; } - return 0; + + return 0; } /* restart section feed if it has filters left associated with it, otherwise release the feed */ -static int -dvb_dmxdev_feed_restart(dmxdev_filter_t *dmxdevfilter) +static +int dvb_dmxdev_feed_restart(dmxdev_filter_t *filter) { int i; - dmxdev_t *dmxdev=dmxdevfilter->dev; - uint16_t pid=dmxdevfilter->params.sec.pid; + dmxdev_t *dmxdev = filter->dev; + uint16_t pid = filter->params.sec.pid; for (i=0; ifilternum; i++) if (dmxdev->filter[i].state>=DMXDEV_STATE_GO && @@ -492,36 +493,34 @@ return 0; } - dmxdevfilter->dev->demux-> - release_section_feed(dmxdev->demux, - dmxdevfilter->feed.sec); + filter->dev->demux->release_section_feed(dmxdev->demux, filter->feed.sec); - return 0; + return 0; } static int dvb_dmxdev_filter_stop(dmxdev_filter_t *dmxdevfilter) { - if (dmxdevfilter->statestatetype) { case DMXDEV_TYPE_SEC: - if (!dmxdevfilter->feed.sec) - break; - dvb_dmxdev_feed_stop(dmxdevfilter); - if (dmxdevfilter->filter.sec) - dmxdevfilter->feed.sec-> + if (!dmxdevfilter->feed.sec) + break; + dvb_dmxdev_feed_stop(dmxdevfilter); + if (dmxdevfilter->filter.sec) + dmxdevfilter->feed.sec-> release_filter(dmxdevfilter->feed.sec, dmxdevfilter->filter.sec); - dvb_dmxdev_feed_restart(dmxdevfilter); + dvb_dmxdev_feed_restart(dmxdevfilter); dmxdevfilter->feed.sec=0; break; case DMXDEV_TYPE_PES: - if (!dmxdevfilter->feed.ts) - break; - dvb_dmxdev_feed_stop(dmxdevfilter); - dmxdevfilter->dev->demux-> + if (!dmxdevfilter->feed.ts) + break; + dvb_dmxdev_feed_stop(dmxdevfilter); + dmxdevfilter->dev->demux-> release_ts_feed(dmxdevfilter->dev->demux, dmxdevfilter->feed.ts); dmxdevfilter->feed.ts=0; @@ -529,10 +528,10 @@ default: if (dmxdevfilter->state==DMXDEV_STATE_ALLOCATED) return 0; - return -EINVAL; + return -EINVAL; } dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread=0; - return 0; + return 0; } static inline int @@ -544,58 +543,58 @@ dmxdevfilter->type=DMXDEV_TYPE_NONE; dmxdevfilter->pid=0xffff; dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED); - return 0; + return 0; } static int -dvb_dmxdev_filter_start(dmxdev_filter_t *dmxdevfilter) +dvb_dmxdev_filter_start(dmxdev_filter_t *filter) { - dmxdev_t *dmxdev=dmxdevfilter->dev; + dmxdev_t *dmxdev = filter->dev; void *mem; int ret, i; - if (dmxdevfilter->statestate>=DMXDEV_STATE_GO) - dvb_dmxdev_filter_stop(dmxdevfilter); - - mem=dmxdevfilter->buffer.data; - if (!mem) { - mem=vmalloc(dmxdevfilter->buffer.size); - spin_lock_irq(&dmxdevfilter->dev->lock); - dmxdevfilter->buffer.data=mem; - spin_unlock_irq(&dmxdevfilter->dev->lock); - if (!dmxdevfilter->buffer.data) - return -ENOMEM; + if (filter->state < DMXDEV_STATE_SET) + return -EINVAL; + + if (filter->state >= DMXDEV_STATE_GO) + dvb_dmxdev_filter_stop(filter); + + if (!(mem = filter->buffer.data)) { + mem = vmalloc(filter->buffer.size); + spin_lock_irq(&filter->dev->lock); + filter->buffer.data=mem; + spin_unlock_irq(&filter->dev->lock); + if (!filter->buffer.data) + return -ENOMEM; } - dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread=0; + filter->buffer.pwrite = filter->buffer.pread = 0; - switch (dmxdevfilter->type) { + switch (filter->type) { case DMXDEV_TYPE_SEC: { - struct dmx_sct_filter_params *para=&dmxdevfilter->params.sec; - dmx_section_filter_t **secfilter=&dmxdevfilter->filter.sec; - dmx_section_feed_t **secfeed=&dmxdevfilter->feed.sec; + struct dmx_sct_filter_params *para=&filter->params.sec; + dmx_section_filter_t **secfilter=&filter->filter.sec; + dmx_section_feed_t **secfeed=&filter->feed.sec; *secfilter=0; *secfeed=0; /* find active filter/feed with same PID */ - for (i=0; ifilternum; i++) - if (dmxdev->filter[i].state>=DMXDEV_STATE_GO && - dmxdev->filter[i].pid==para->pid) { - if (dmxdev->filter[i].type!=DMXDEV_TYPE_SEC) - return -EBUSY; - *secfeed=dmxdev->filter[i].feed.sec; + for (i=0; ifilternum; i++) { + if (dmxdev->filter[i].state >= DMXDEV_STATE_GO && + dmxdev->filter[i].pid == para->pid && + dmxdev->filter[i].type == DMXDEV_TYPE_SEC) { + *secfeed = dmxdev->filter[i].feed.sec; break; } + } /* if no feed found, try to allocate new one */ if (!*secfeed) { ret=dmxdev->demux->allocate_section_feed(dmxdev->demux, - secfeed, - dvb_dmxdev_section_callback); + secfeed, + dvb_dmxdev_section_callback); if (ret<0) { printk ("DVB (%s): could not alloc feed\n", __FUNCTION__); @@ -608,22 +607,23 @@ if (ret<0) { printk ("DVB (%s): could not set feed\n", __FUNCTION__); - dvb_dmxdev_feed_restart(dmxdevfilter); + dvb_dmxdev_feed_restart(filter); return ret; } + } else { + dvb_dmxdev_feed_stop(filter); } - else - dvb_dmxdev_feed_stop(dmxdevfilter); ret=(*secfeed)->allocate_filter(*secfeed, secfilter); - if (ret<0) { - dvb_dmxdev_feed_restart(dmxdevfilter); - dmxdevfilter->feed.sec->start_filtering(*secfeed); + + if (ret < 0) { + dvb_dmxdev_feed_restart(filter); + filter->feed.sec->start_filtering(*secfeed); dprintk ("could not get filter\n"); return ret; } - (*secfilter)->priv=(void *) dmxdevfilter; + (*secfilter)->priv = filter; memcpy(&((*secfilter)->filter_value[3]), &(para->filter.filter[1]), DMX_FILTER_SIZE-1); @@ -638,23 +638,28 @@ (*secfilter)->filter_mask[1]=0; (*secfilter)->filter_mask[2]=0; - dmxdevfilter->todo=0; - dmxdevfilter->feed.sec->start_filtering(dmxdevfilter->feed.sec); - dvb_dmxdev_filter_timer(dmxdevfilter); + filter->todo = 0; + + ret = filter->feed.sec->start_filtering (filter->feed.sec); + + if (ret < 0) + return ret; + + dvb_dmxdev_filter_timer(filter); break; } case DMXDEV_TYPE_PES: { struct timespec timeout = { 0 }; - struct dmx_pes_filter_params *para=&dmxdevfilter->params.pes; + struct dmx_pes_filter_params *para = &filter->params.pes; dmx_output_t otype; int ret; int ts_type; dmx_ts_pes_t ts_pes; - dmx_ts_feed_t **tsfeed=&dmxdevfilter->feed.ts; + dmx_ts_feed_t **tsfeed = &filter->feed.ts; - dmxdevfilter->feed.ts=0; + filter->feed.ts = 0; otype=para->output; ts_pes=(dmx_ts_pes_t) para->pes_type; @@ -664,11 +669,11 @@ else ts_type=0; - if (otype==DMX_OUT_TS_TAP) - ts_type|=TS_PACKET; + if (otype == DMX_OUT_TS_TAP) + ts_type |= TS_PACKET; - if (otype==DMX_OUT_TAP) - ts_type|=TS_PAYLOAD_ONLY|TS_PACKET; + if (otype == DMX_OUT_TAP) + ts_type |= TS_PAYLOAD_ONLY|TS_PACKET; ret=dmxdev->demux->allocate_ts_feed(dmxdev->demux, tsfeed, @@ -676,75 +681,97 @@ if (ret<0) return ret; - (*tsfeed)->priv=(void *) dmxdevfilter; - ret=(*tsfeed)->set(*tsfeed, para->pid, ts_type, ts_pes, 188, 32768, 0, timeout); - if (ret<0) { + (*tsfeed)->priv = (void *) filter; + + ret = (*tsfeed)->set(*tsfeed, para->pid, ts_type, ts_pes, + 188, 32768, 0, timeout); + + if (ret < 0) { dmxdev->demux->release_ts_feed(dmxdev->demux, *tsfeed); return ret; } - dmxdevfilter->feed.ts->start_filtering(dmxdevfilter->feed.ts); + + ret = filter->feed.ts->start_filtering(filter->feed.ts); + + if (ret < 0) + return ret; + break; } default: - return -EINVAL; + return -EINVAL; } - dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_GO); - return 0; + + dvb_dmxdev_filter_state_set(filter, DMXDEV_STATE_GO); + return 0; } static int dvb_demux_open(struct inode *inode, struct file *file) { struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; dmxdev_t *dmxdev=(dmxdev_t *) dvbdev->priv; - int i; - dmxdev_filter_t *dmxdevfilter; + int i; + dmxdev_filter_t *dmxdevfilter; if (!dmxdev->filter) - return -EINVAL; - if (down_interruptible(&dmxdev->mutex)) + return -EINVAL; + + if (down_interruptible(&dmxdev->mutex)) return -ERESTARTSYS; - for (i=0; ifilternum; i++) - if (dmxdev->filter[i].state==DMXDEV_STATE_FREE) - break; - if (i==dmxdev->filternum) { - up(&dmxdev->mutex); - return -EMFILE; + + for (i=0; ifilternum; i++) + if (dmxdev->filter[i].state==DMXDEV_STATE_FREE) + break; + + if (i==dmxdev->filternum) { + up(&dmxdev->mutex); + return -EMFILE; } - dmxdevfilter=&dmxdev->filter[i]; - dmxdevfilter->dvbdev=dmxdev->dvbdev; + + dmxdevfilter=&dmxdev->filter[i]; + sema_init(&dmxdevfilter->mutex, 1); + dmxdevfilter->dvbdev=dmxdev->dvbdev; file->private_data=dmxdevfilter; dvb_dmxdev_buffer_init(&dmxdevfilter->buffer); - dmxdevfilter->type=DMXDEV_TYPE_NONE; + dmxdevfilter->type=DMXDEV_TYPE_NONE; dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_ALLOCATED); dmxdevfilter->feed.ts=0; init_timer(&dmxdevfilter->timer); - up(&dmxdev->mutex); - return 0; + up(&dmxdev->mutex); + return 0; } -int -dvb_dmxdev_filter_free(dmxdev_t *dmxdev, dmxdev_filter_t *dmxdevfilter) + +static +int dvb_dmxdev_filter_free(dmxdev_t *dmxdev, dmxdev_filter_t *dmxdevfilter) { - if (down_interruptible(&dmxdev->mutex)) + if (down_interruptible(&dmxdev->mutex)) return -ERESTARTSYS; - dvb_dmxdev_filter_stop(dmxdevfilter); + if (down_interruptible(&dmxdevfilter->mutex)) { + up(&dmxdev->mutex); + return -ERESTARTSYS; + } + + dvb_dmxdev_filter_stop(dmxdevfilter); dvb_dmxdev_filter_reset(dmxdevfilter); - - if (dmxdevfilter->buffer.data) { - void *mem=dmxdevfilter->buffer.data; + + if (dmxdevfilter->buffer.data) { + void *mem=dmxdevfilter->buffer.data; - spin_lock_irq(&dmxdev->lock); + spin_lock_irq(&dmxdev->lock); dmxdevfilter->buffer.data=0; - spin_unlock_irq(&dmxdev->lock); + spin_unlock_irq(&dmxdev->lock); vfree(mem); } + dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_FREE); wake_up(&dmxdevfilter->buffer.queue); + up(&dmxdevfilter->mutex); up(&dmxdev->mutex); - return 0; + return 0; } static inline void @@ -759,83 +786,83 @@ static int dvb_dmxdev_filter_set(dmxdev_t *dmxdev, - dmxdev_filter_t *dmxdevfilter, + dmxdev_filter_t *dmxdevfilter, struct dmx_sct_filter_params *params) { - dprintk ("function : %s\n", __FUNCTION__); + dprintk ("function : %s\n", __FUNCTION__); dvb_dmxdev_filter_stop(dmxdevfilter); - - dmxdevfilter->type=DMXDEV_TYPE_SEC; - dmxdevfilter->pid=params->pid; + + dmxdevfilter->type=DMXDEV_TYPE_SEC; + dmxdevfilter->pid=params->pid; memcpy(&dmxdevfilter->params.sec, params, sizeof(struct dmx_sct_filter_params)); invert_mode(&dmxdevfilter->params.sec.filter); dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); - if (params->flags&DMX_IMMEDIATE_START) - return dvb_dmxdev_filter_start(dmxdevfilter); + if (params->flags&DMX_IMMEDIATE_START) + return dvb_dmxdev_filter_start(dmxdevfilter); - return 0; + return 0; } static int dvb_dmxdev_pes_filter_set(dmxdev_t *dmxdev, - dmxdev_filter_t *dmxdevfilter, - struct dmx_pes_filter_params *params) + dmxdev_filter_t *dmxdevfilter, + struct dmx_pes_filter_params *params) { dvb_dmxdev_filter_stop(dmxdevfilter); if (params->pes_type>DMX_PES_OTHER || params->pes_type<0) - return -EINVAL; + return -EINVAL; - dmxdevfilter->type=DMXDEV_TYPE_PES; - dmxdevfilter->pid=params->pid; + dmxdevfilter->type=DMXDEV_TYPE_PES; + dmxdevfilter->pid=params->pid; memcpy(&dmxdevfilter->params, params, sizeof(struct dmx_pes_filter_params)); dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); - if (params->flags&DMX_IMMEDIATE_START) - return dvb_dmxdev_filter_start(dmxdevfilter); + if (params->flags&DMX_IMMEDIATE_START) + return dvb_dmxdev_filter_start(dmxdevfilter); - return 0; + return 0; } static ssize_t dvb_dmxdev_read_sec(dmxdev_filter_t *dfil, struct file *file, char *buf, size_t count, loff_t *ppos) { - int result, hcount; + int result, hcount; int done=0; if (dfil->todo<=0) { - hcount=3+dfil->todo; - if (hcount>count) - hcount=count; + hcount=3+dfil->todo; + if (hcount>count) + hcount=count; result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, buf, hcount, ppos); if (result<0) { dfil->todo=0; - return result; + return result; } if (copy_from_user(dfil->secheader-dfil->todo, buf, result)) - return -EFAULT; + return -EFAULT; buf+=result; done=result; count-=result; dfil->todo-=result; if (dfil->todo>-3) - return done; + return done; dfil->todo=((dfil->secheader[1]<<8)|dfil->secheader[2])&0xfff; if (!count) - return done; + return done; } if (count>dfil->todo) - count=dfil->todo; - result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, + count=dfil->todo; + result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, buf, count, ppos); if (result<0) - return result; + return result; dfil->todo-=result; return (result+done); } @@ -844,19 +871,20 @@ ssize_t dvb_demux_read(struct file *file, char *buf, size_t count, loff_t *ppos) { - dmxdev_filter_t *dmxdevfilter=dvb_dmxdev_file_to_filter(file); - //dmxdev_t *dmxdev=dmxdevfilter->dev; + dmxdev_filter_t *dmxdevfilter=dvb_dmxdev_file_to_filter(file); int ret=0; - // semaphore should not be necessary (I hope ...) - //down(&dmxdev->mutex); + if (down_interruptible(&dmxdevfilter->mutex)) + return -ERESTARTSYS; + if (dmxdevfilter->type==DMXDEV_TYPE_SEC) - ret=dvb_dmxdev_read_sec(dmxdevfilter, file, buf, count, ppos); + ret=dvb_dmxdev_read_sec(dmxdevfilter, file, buf, count, ppos); else - ret=dvb_dmxdev_buffer_read(&dmxdevfilter->buffer, + ret=dvb_dmxdev_buffer_read(&dmxdevfilter->buffer, file->f_flags&O_NONBLOCK, buf, count, ppos); - //up(&dmxdev->mutex); + + up(&dmxdevfilter->mutex); return ret; } @@ -864,102 +892,131 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *parg) { - dmxdev_filter_t *dmxdevfilter=dvb_dmxdev_file_to_filter(file); + dmxdev_filter_t *dmxdevfilter=dvb_dmxdev_file_to_filter(file); dmxdev_t *dmxdev=dmxdevfilter->dev; - unsigned long arg=(unsigned long) parg; + unsigned long arg=(unsigned long) parg; int ret=0; - if (down_interruptible (&dmxdev->mutex)) + if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; switch (cmd) { - case DMX_START: - if (dmxdevfilter->statemutex)) { + up(&dmxdev->mutex); + return -ERESTARTSYS; + } + if (dmxdevfilter->statemutex); break; - case DMX_STOP: + case DMX_STOP: + if (down_interruptible(&dmxdevfilter->mutex)) { + up(&dmxdev->mutex); + return -ERESTARTSYS; + } ret=dvb_dmxdev_filter_stop(dmxdevfilter); + up(&dmxdevfilter->mutex); break; case DMX_SET_FILTER: - ret=dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, + if (down_interruptible(&dmxdevfilter->mutex)) { + up(&dmxdev->mutex); + return -ERESTARTSYS; + } + ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, (struct dmx_sct_filter_params *)parg); + up(&dmxdevfilter->mutex); break; case DMX_SET_PES_FILTER: + if (down_interruptible(&dmxdevfilter->mutex)) { + up(&dmxdev->mutex); + return -ERESTARTSYS; + } ret=dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, (struct dmx_pes_filter_params *)parg); + up(&dmxdevfilter->mutex); break; case DMX_SET_BUFFER_SIZE: - ret=dvb_dmxdev_set_buffer_size(dmxdevfilter, arg); + if (down_interruptible(&dmxdevfilter->mutex)) { + up(&dmxdev->mutex); + return -ERESTARTSYS; + } + ret=dvb_dmxdev_set_buffer_size(dmxdevfilter, arg); + up(&dmxdevfilter->mutex); + break; + + case DMX_GET_EVENT: break; - - case DMX_GET_EVENT: - break; - case DMX_GET_PES_PIDS: + case DMX_GET_PES_PIDS: if (!dmxdev->demux->get_pes_pids) { - ret=-EINVAL; + ret=-EINVAL; break; } dmxdev->demux->get_pes_pids(dmxdev->demux, (uint16_t *)parg); - break; + break; + + case DMX_GET_STC: + if (!dmxdev->demux->get_stc) { + ret=-EINVAL; + break; + } + ret = dmxdev->demux->get_stc(dmxdev->demux, + ((struct dmx_stc *)parg)->num, + &((struct dmx_stc *)parg)->stc, + &((struct dmx_stc *)parg)->base); + break; default: - ret=-EINVAL; + ret=-EINVAL; } - up(&dmxdev->mutex); + up(&dmxdev->mutex); return ret; } static int dvb_demux_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { - return video_usercopy(inode, file, cmd, arg, dvb_demux_do_ioctl); + return dvb_usercopy(inode, file, cmd, arg, dvb_demux_do_ioctl); } -static unsigned int dvb_demux_poll(struct file *file, poll_table *wait) +static +unsigned int dvb_demux_poll (struct file *file, poll_table *wait) { - dmxdev_filter_t *dmxdevfilter=dvb_dmxdev_file_to_filter(file); + dmxdev_filter_t *dmxdevfilter = dvb_dmxdev_file_to_filter(file); + unsigned int mask = 0; if (!dmxdevfilter) - return -EINVAL; - - if (dmxdevfilter->state==DMXDEV_STATE_FREE) - return 0; - - if (dmxdevfilter->buffer.error) - return (POLLIN | POLLRDNORM | POLLPRI | POLLERR); - - if (dmxdevfilter->buffer.pread!=dmxdevfilter->buffer.pwrite) - return (POLLIN | POLLRDNORM | POLLPRI); - - if (dmxdevfilter->state!=DMXDEV_STATE_GO) - return 0; + return -EINVAL; poll_wait(file, &dmxdevfilter->buffer.queue, wait); - - if (dmxdevfilter->state==DMXDEV_STATE_FREE) - return 0; + + if (dmxdevfilter->state != DMXDEV_STATE_GO && + dmxdevfilter->state != DMXDEV_STATE_DONE) + return 0; if (dmxdevfilter->buffer.error) - return (POLLIN | POLLRDNORM | POLLPRI | POLLERR); + mask |= (POLLIN | POLLRDNORM | POLLPRI | POLLERR); - if (dmxdevfilter->buffer.pread!=dmxdevfilter->buffer.pwrite) - return (POLLIN | POLLRDNORM | POLLPRI); + if (dmxdevfilter->buffer.pread != dmxdevfilter->buffer.pwrite) + mask |= (POLLIN | POLLRDNORM | POLLPRI); - return 0; + return mask; } -static int dvb_demux_release(struct inode *inode, struct file *file) + +static +int dvb_demux_release(struct inode *inode, struct file *file) { - dmxdev_filter_t *dmxdevfilter=dvb_dmxdev_file_to_filter(file); - dmxdev_t *dmxdev=dmxdevfilter->dev; + dmxdev_filter_t *dmxdevfilter = dvb_dmxdev_file_to_filter(file); + dmxdev_t *dmxdev = dmxdevfilter->dev; return dvb_dmxdev_filter_free(dmxdev, dmxdevfilter); } @@ -988,64 +1045,62 @@ int ret=0; - if (down_interruptible (&dmxdev->mutex)) + if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; switch (cmd) { case DMX_SET_BUFFER_SIZE: // FIXME: implement - ret=0; + ret=0; break; default: - ret=-EINVAL; + ret=-EINVAL; } - up(&dmxdev->mutex); + up(&dmxdev->mutex); return ret; } static int dvb_dvr_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { - return video_usercopy(inode, file, cmd, arg, dvb_dvr_do_ioctl); + return dvb_usercopy(inode, file, cmd, arg, dvb_dvr_do_ioctl); } -static unsigned int dvb_dvr_poll(struct file *file, poll_table *wait) +static +unsigned int dvb_dvr_poll (struct file *file, poll_table *wait) { - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - dmxdev_t *dmxdev=(dmxdev_t *) dvbdev->priv; + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + dmxdev_t *dmxdev = (dmxdev_t *) dvbdev->priv; + unsigned int mask = 0; - dprintk ("function : %s\n", __FUNCTION__); + dprintk ("function : %s\n", __FUNCTION__); - if ((file->f_flags&O_ACCMODE)==O_RDONLY) { - if (dmxdev->dvr_buffer.error) - return (POLLIN | POLLRDNORM | POLLPRI | POLLERR); + poll_wait(file, &dmxdev->dvr_buffer.queue, wait); - if (dmxdev->dvr_buffer.pread!=dmxdev->dvr_buffer.pwrite) - return (POLLIN | POLLRDNORM | POLLPRI); - - poll_wait(file, &dmxdev->dvr_buffer.queue, wait); - + if ((file->f_flags&O_ACCMODE) == O_RDONLY) { if (dmxdev->dvr_buffer.error) - return (POLLIN | POLLRDNORM | POLLPRI | POLLERR); + mask |= (POLLIN | POLLRDNORM | POLLPRI | POLLERR); if (dmxdev->dvr_buffer.pread!=dmxdev->dvr_buffer.pwrite) - return (POLLIN | POLLRDNORM | POLLPRI); - - return 0; + mask |= (POLLIN | POLLRDNORM | POLLPRI); } else - return (POLLOUT | POLLWRNORM | POLLPRI); + mask |= (POLLOUT | POLLWRNORM | POLLPRI); + + return mask; } -static struct file_operations dvb_dvr_fops = { + +static +struct file_operations dvb_dvr_fops = { .owner = THIS_MODULE, .read = dvb_dvr_read, .write = dvb_dvr_write, .ioctl = dvb_dvr_ioctl, .open = dvb_dvr_open, .release = dvb_dvr_release, - .poll =dvb_dvr_poll, + .poll = dvb_dvr_poll, }; static struct dvb_device dvbdev_dvr = { @@ -1058,37 +1113,38 @@ int dvb_dmxdev_init(dmxdev_t *dmxdev, struct dvb_adapter *dvb_adapter) { - int i; + int i; if (dmxdev->demux->open(dmxdev->demux)<0) return -EUSERS; dmxdev->filter=vmalloc(dmxdev->filternum*sizeof(dmxdev_filter_t)); if (!dmxdev->filter) - return -ENOMEM; + return -ENOMEM; dmxdev->dvr=vmalloc(dmxdev->filternum*sizeof(dmxdev_dvr_t)); if (!dmxdev->dvr) { vfree(dmxdev->filter); dmxdev->filter=0; - return -ENOMEM; + return -ENOMEM; } - sema_init(&dmxdev->mutex, 1); + sema_init(&dmxdev->mutex, 1); spin_lock_init(&dmxdev->lock); for (i=0; ifilternum; i++) { - dmxdev->filter[i].dev=dmxdev; - dmxdev->filter[i].buffer.data=0; - dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE); - dmxdev->dvr[i].dev=dmxdev; - dmxdev->dvr[i].buffer.data=0; - dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE); - dvb_dmxdev_dvr_state_set(&dmxdev->dvr[i], DMXDEV_STATE_FREE); + dmxdev->filter[i].dev=dmxdev; + dmxdev->filter[i].buffer.data=0; + dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE); + dmxdev->dvr[i].dev=dmxdev; + dmxdev->dvr[i].buffer.data=0; + dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE); + dvb_dmxdev_dvr_state_set(&dmxdev->dvr[i], DMXDEV_STATE_FREE); } dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev, DVB_DEVICE_DEMUX); dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr, dmxdev, DVB_DEVICE_DVR); dvb_dmxdev_buffer_init(&dmxdev->dvr_buffer); - MOD_INC_USE_COUNT; + /* fixme: is this correct? */ + try_module_get(THIS_MODULE); return 0; } @@ -1098,15 +1154,16 @@ dvb_unregister_device(dmxdev->dvbdev); dvb_unregister_device(dmxdev->dvr_dvbdev); if (dmxdev->filter) { - vfree(dmxdev->filter); + vfree(dmxdev->filter); dmxdev->filter=0; } if (dmxdev->dvr) { - vfree(dmxdev->dvr); + vfree(dmxdev->dvr); dmxdev->dvr=0; } - dmxdev->demux->close(dmxdev->demux); - MOD_DEC_USE_COUNT; + dmxdev->demux->close(dmxdev->demux); + /* fixme: is this correct? */ + module_put(THIS_MODULE); } diff -Nru a/drivers/media/dvb/dvb-core/dmxdev.h b/drivers/media/dvb/dvb-core/dmxdev.h --- a/drivers/media/dvb/dvb-core/dmxdev.h Sat Apr 12 14:44:10 2003 +++ b/drivers/media/dvb/dvb-core/dmxdev.h Sat Apr 12 14:44:10 2003 @@ -85,6 +85,8 @@ struct dmxdev_s *dev; dmxdev_buffer_t buffer; + struct semaphore mutex; + // only for sections struct timer_list timer; int todo; diff -Nru a/drivers/media/dvb/dvb-core/dvb_demux.c b/drivers/media/dvb/dvb-core/dvb_demux.c --- a/drivers/media/dvb/dvb-core/dvb_demux.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvb_demux.c Sat Apr 12 14:44:06 2003 @@ -2,8 +2,8 @@ * dvb_demux.c - DVB kernel demux API * * Copyright (C) 2000-2001 Ralph Metzler - * & Marcus Metzler - * for convergence integrated media GmbH + * & Marcus Metzler + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -27,27 +27,36 @@ #include #include -#include "compat.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #include "compat.h" +#else + #include +#endif + #include "dvb_demux.h" #define NOBUFS LIST_HEAD(dmx_muxs); + int dmx_register_demux(dmx_demux_t *demux) { - struct list_head *pos, *head=&dmx_muxs; + struct list_head *pos; if (!(demux->id && demux->vendor && demux->model)) - return -EINVAL; - list_for_each(pos, head) - { - if (!strcmp(DMX_DIR_ENTRY(pos)->id, demux->id)) - return -EEXIST; + return -EINVAL; + + list_for_each(pos, &dmx_muxs) { + if (!strcmp(DMX_DIR_ENTRY(pos)->id, demux->id)) + return -EEXIST; } - demux->users=0; - list_add(&(demux->reg_list), head); - MOD_INC_USE_COUNT; + + demux->users = 0; + list_add(&demux->reg_list, &dmx_muxs); + /* fixme: is this correct? */ + try_module_get(THIS_MODULE); + return 0; } @@ -55,25 +64,25 @@ { struct list_head *pos, *n, *head=&dmx_muxs; - list_for_each_safe (pos, n, head) - { - if (DMX_DIR_ENTRY(pos)==demux) - { - if (demux->users>0) - return -EINVAL; - list_del(pos); - MOD_DEC_USE_COUNT; + list_for_each_safe (pos, n, head) { + if (DMX_DIR_ENTRY(pos) == demux) { + if (demux->users>0) + return -EINVAL; + list_del(pos); + /* fixme: is this correct? */ + module_put(THIS_MODULE); return 0; } } + return -ENODEV; } struct list_head *dmx_get_demuxes(void) { - if (list_empty(&dmx_muxs)) - return NULL; + if (list_empty(&dmx_muxs)) + return NULL; return &dmx_muxs; } @@ -82,628 +91,661 @@ * static inlined helper functions ******************************************************************************/ -static inline u16 -section_length(const u8 *buf) + +static inline +u16 section_length(const u8 *buf) { - return 3+((buf[1]&0x0f)<<8)+buf[2]; + return 3+((buf[1]&0x0f)<<8)+buf[2]; } -static inline u16 -ts_pid(const u8 *buf) + +static inline +u16 ts_pid(const u8 *buf) { - return ((buf[1]&0x1f)<<8)+buf[2]; + return ((buf[1]&0x1f)<<8)+buf[2]; } -static inline int -payload(const u8 *tsp) + +static inline +int payload(const u8 *tsp) { - if (!(tsp[3]&0x10)) // no payload? - return 0; - if (tsp[3]&0x20) { // adaptation field? + if (!(tsp[3]&0x10)) // no payload? + return 0; + if (tsp[3]&0x20) { // adaptation field? if (tsp[4]>183) // corrupted data? return 0; else return 184-1-tsp[4]; } - return 184; + return 184; } -static u32 -dvb_crc_table[256] = { - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, - 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, - 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, - 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, - 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, - 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, - 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, - 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, - 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, - 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, - 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, - 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, - 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, - 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, - 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, - 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, - 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, - 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, - 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, - 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, - 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, - 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4}; - -u32 dvb_crc32(u8 *data, int len) +void dvb_set_crc32(u8 *data, int length) { - int i; - u32 crc = 0xffffffff; + u32 crc; + + crc = crc32_le(~0, data, length); - for (i=0; i> 24) ^ *data++) & 0xff]; - return crc; + data[length] = (crc >> 24) & 0xff; + data[length+1] = (crc >> 16) & 0xff; + data[length+2] = (crc >> 8) & 0xff; + data[length+3] = (crc) & 0xff; } -void dvb_set_crc32(u8 *data, int length) + +static +u32 dvb_dmx_crc32 (struct dvb_demux_feed *f, const u8 *src, size_t len) { - u32 crc; + return (f->feed.sec.crc_val = crc32_le (f->feed.sec.crc_val, src, len)); +} + - crc=dvb_crc32(data,length); - data[length] = (crc>>24)&0xff; - data[length+1] = (crc>>16)&0xff; - data[length+2] = (crc>>8)&0xff; - data[length+3] = (crc)&0xff; +static +void dvb_dmx_memcopy (struct dvb_demux_feed *f, u8 *d, const u8 *s, size_t len) +{ + memcpy (d, s, len); } - + /****************************************************************************** * Software filter functions ******************************************************************************/ -static inline int -dvb_dmx_swfilter_payload(struct dvb_demux_feed *dvbdmxfeed, const u8 *buf) +static inline +int dvb_dmx_swfilter_payload (struct dvb_demux_feed *feed, const u8 *buf) { - int p, count; + int count = payload(buf); + int p; //int ccok; //u8 cc; - if (!(count=payload(buf))) - return -1; - p=188-count; - /* + if (count == 0) + return -1; + + p = 188-count; + + /* cc=buf[3]&0x0f; - ccok=((dvbdmxfeed->cc+1)&0x0f)==cc ? 1 : 0; - dvbdmxfeed->cc=cc; - if (!ccok) - printk("missed packet!\n"); - */ - if (buf[1]&0x40) // PUSI ? - dvbdmxfeed->peslen=0xfffa; - dvbdmxfeed->peslen+=count; - - return dvbdmxfeed->cb.ts((u8 *)&buf[p], count, 0, 0, - &dvbdmxfeed->feed.ts, DMX_OK); + ccok=((dvbdmxfeed->cc+1)&0x0f)==cc ? 1 : 0; + dvbdmxfeed->cc=cc; + if (!ccok) + printk("missed packet!\n"); + */ + + if (buf[1] & 0x40) // PUSI ? + feed->peslen = 0xfffa; + + feed->peslen += count; + + return feed->cb.ts (&buf[p], count, 0, 0, &feed->feed.ts, DMX_OK); } -static int -dvb_dmx_swfilter_sectionfilter(struct dvb_demux_feed *dvbdmxfeed, - struct dvb_demux_filter *f) -{ - dmx_section_filter_t *filter=&f->filter; - int i; - u8 xor, neq=0; - - for (i=0; ifilter_value[i]^dvbdmxfeed->secbuf[i]; - if (f->maskandmode[i]&xor) +static +int dvb_dmx_swfilter_sectionfilter (struct dvb_demux_feed *feed, + struct dvb_demux_filter *f) +{ + u8 neq = 0; + int i; + + for (i=0; ifilter.filter_value[i] ^ feed->feed.sec.secbuf[i]; + + if (f->maskandmode[i] & xor) return 0; - neq|=f->maskandnotmode[i]&xor; + + neq |= f->maskandnotmode[i] & xor; } - if (f->doneq && !neq) + + if (f->doneq & !neq) return 0; - return dvbdmxfeed->cb.sec(dvbdmxfeed->secbuf, dvbdmxfeed->seclen, - 0, 0, filter, DMX_OK); + return feed->cb.sec (feed->feed.sec.secbuf, feed->feed.sec.seclen, + 0, 0, &f->filter, DMX_OK); } -static inline int -dvb_dmx_swfilter_section_feed(struct dvb_demux_feed *dvbdmxfeed) + +static inline +int dvb_dmx_swfilter_section_feed (struct dvb_demux_feed *feed) { - u8 *buf=dvbdmxfeed->secbuf; - struct dvb_demux_filter *f; + struct dvb_demux *demux = feed->demux; + struct dvb_demux_filter *f = feed->filter; + dmx_section_feed_t *sec = &feed->feed.sec; + u8 *buf = sec->secbuf; + + if (sec->secbufp != sec->seclen) + return -1; + + if (!sec->is_filtering) + return 0; + + if (!f) + return 0; + + if (sec->check_crc && demux->check_crc32(feed, sec->secbuf, sec->seclen)) + return -1; - if (dvbdmxfeed->secbufp!=dvbdmxfeed->seclen) - return -1; - if (!dvbdmxfeed->feed.sec.is_filtering) - return 0; - if (!(f=dvbdmxfeed->filter)) - return 0; - do - if (dvb_dmx_swfilter_sectionfilter(dvbdmxfeed, f)<0) - return -1; - while ((f=f->next) && dvbdmxfeed->feed.sec.is_filtering); + do { + if (dvb_dmx_swfilter_sectionfilter(feed, f) < 0) + return -1; + } while ((f = f->next) && sec->is_filtering); + + sec->secbufp = sec->seclen = 0; - dvbdmxfeed->secbufp=dvbdmxfeed->seclen=0; - memset(buf, 0, DVB_DEMUX_MASK_MAX); - return 0; + memset(buf, 0, DVB_DEMUX_MASK_MAX); + + return 0; } -static inline int -dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *dvbdmxfeed, const u8 *buf) + +static +int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed, const u8 *buf) { - int p, count; - int ccok, rest; + struct dvb_demux *demux = feed->demux; + dmx_section_feed_t *sec = &feed->feed.sec; + int p, count; + int ccok, rest; u8 cc; - if (!(count=payload(buf))) - return -1; - p=188-count; + if (!(count = payload(buf))) + return -1; - cc=buf[3]&0x0f; - ccok=((dvbdmxfeed->cc+1)&0x0f)==cc ? 1 : 0; - dvbdmxfeed->cc=cc; + p = 188-count; - if (buf[1]&0x40) { // PUSI set - // offset to start of first section is in buf[p] + cc = buf[3] & 0x0f; + ccok = ((feed->cc+1) & 0x0f) == cc ? 1 : 0; + feed->cc = cc; + + if (buf[1] & 0x40) { // PUSI set + // offset to start of first section is in buf[p] if (p+buf[p]>187) // trash if it points beyond packet return -1; - if (buf[p] && ccok) { // rest of previous section? - // did we have enough data in last packet to calc length? - int tmp=3-dvbdmxfeed->secbufp; - if (tmp>0 && tmp!=3) { - if (p+tmp>=187) + + if (buf[p] && ccok) { // rest of previous section? + // did we have enough data in last packet to calc length? + int tmp = 3 - sec->secbufp; + + if (tmp > 0 && tmp != 3) { + if (p + tmp >= 187) return -1; - memcpy(dvbdmxfeed->secbuf+dvbdmxfeed->secbufp, - buf+p+1, tmp); - dvbdmxfeed->seclen=section_length(dvbdmxfeed->secbuf); - if (dvbdmxfeed->seclen>4096) + + demux->memcopy (feed, sec->secbuf+sec->secbufp, + buf+p+1, tmp); + + sec->seclen = section_length(sec->secbuf); + + if (sec->seclen > 4096) return -1; - } - rest=dvbdmxfeed->seclen-dvbdmxfeed->secbufp; - if (rest==buf[p] && dvbdmxfeed->seclen) { - memcpy(dvbdmxfeed->secbuf+dvbdmxfeed->secbufp, - buf+p+1, buf[p]); - dvbdmxfeed->secbufp+=buf[p]; - dvb_dmx_swfilter_section_feed(dvbdmxfeed); - } - } - p+=buf[p]+1; // skip rest of last section - count=188-p; - while (count>0) { - if ((count>2) && // enough data to determine sec length? - ((dvbdmxfeed->seclen=section_length(buf+p))<=count)) { - if (dvbdmxfeed->seclen>4096) + } + + rest = sec->seclen - sec->secbufp; + + if (rest == buf[p] && sec->seclen) { + demux->memcopy (feed, sec->secbuf + sec->secbufp, + buf+p+1, buf[p]); + sec->secbufp += buf[p]; + dvb_dmx_swfilter_section_feed(feed); + } + } + + p += buf[p] + 1; // skip rest of last section + count = 188 - p; + + while (count) { + + sec->crc_val = ~0; + + if ((count>2) && // enough data to determine sec length? + ((sec->seclen = section_length(buf+p)) <= count)) { + if (sec->seclen>4096) return -1; - memcpy(dvbdmxfeed->secbuf, buf+p, - dvbdmxfeed->seclen); - dvbdmxfeed->secbufp=dvbdmxfeed->seclen; - p+=dvbdmxfeed->seclen; - count=188-p; - dvb_dmx_swfilter_section_feed(dvbdmxfeed); - - // filling bytes until packet end? - if (count && buf[p]==0xff) - count=0; - } else { // section continues to following TS packet - memcpy(dvbdmxfeed->secbuf, buf+p, count); - dvbdmxfeed->secbufp+=count; - count=0; - } - } + + demux->memcopy (feed, sec->secbuf, buf+p, + sec->seclen); + + sec->secbufp = sec->seclen; + p += sec->seclen; + count = 188 - p; + + dvb_dmx_swfilter_section_feed(feed); + + // filling bytes until packet end? + if (count && buf[p]==0xff) + count=0; + + } else { // section continues to following TS packet + demux->memcopy(feed, sec->secbuf, buf+p, count); + sec->secbufp+=count; + count=0; + } + } + return 0; } // section continued below if (!ccok) return -1; - if (!dvbdmxfeed->secbufp) // any data in last ts packet? + + if (!sec->secbufp) // any data in last ts packet? return -1; + // did we have enough data in last packet to calc section length? - if (dvbdmxfeed->secbufp<3) { - int tmp=3-dvbdmxfeed->secbufp; + if (sec->secbufp < 3) { + int tmp = 3 - sec->secbufp; if (tmp>count) return -1; - memcpy(dvbdmxfeed->secbuf+dvbdmxfeed->secbufp, buf+p, tmp); - dvbdmxfeed->seclen=section_length(dvbdmxfeed->secbuf); - if (dvbdmxfeed->seclen>4096) + + sec->crc_val = ~0; + + demux->memcopy (feed, sec->secbuf + sec->secbufp, buf+p, tmp); + + sec->seclen = section_length(sec->secbuf); + + if (sec->seclen > 4096) return -1; } - rest=dvbdmxfeed->seclen-dvbdmxfeed->secbufp; - if (rest<0) + + rest = sec->seclen - sec->secbufp; + + if (rest < 0) return -1; - if (rest<=count) { // section completed in this TS packet - memcpy(dvbdmxfeed->secbuf+dvbdmxfeed->secbufp, buf+p, rest); - dvbdmxfeed->secbufp+=rest; - dvb_dmx_swfilter_section_feed(dvbdmxfeed); + + if (rest <= count) { // section completed in this TS packet + demux->memcopy (feed, sec->secbuf + sec->secbufp, buf+p, rest); + sec->secbufp += rest; + dvb_dmx_swfilter_section_feed(feed); } else { // section continues in following ts packet - memcpy(dvbdmxfeed->secbuf+dvbdmxfeed->secbufp, buf+p, count); - dvbdmxfeed->secbufp+=count; + demux->memcopy (feed, sec->secbuf + sec->secbufp, buf+p, count); + sec->secbufp += count; } - return 0; + + return 0; } -static inline void -dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *dvbdmxfeed, const u8 *buf) + +static inline +void dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf) { - switch(dvbdmxfeed->type) { - case DMX_TYPE_TS: - if (!dvbdmxfeed->feed.ts.is_filtering) - break; - if (dvbdmxfeed->ts_type & TS_PACKET) { - if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY) - dvb_dmx_swfilter_payload(dvbdmxfeed, buf); - else - dvbdmxfeed->cb.ts((u8 *)buf, 188, 0, 0, - &dvbdmxfeed->feed.ts, DMX_OK); - } - if (dvbdmxfeed->ts_type & TS_DECODER) - if (dvbdmxfeed->demux->write_to_decoder) - dvbdmxfeed->demux-> - write_to_decoder(dvbdmxfeed, (u8 *)buf, 188); - break; - - case DMX_TYPE_SEC: - if (!dvbdmxfeed->feed.sec.is_filtering) - break; - if (dvb_dmx_swfilter_section_packet(dvbdmxfeed, buf)<0) - dvbdmxfeed->seclen=dvbdmxfeed->secbufp=0; - break; - - default: - break; - } -} - -void -dvb_dmx_swfilter_packet(struct dvb_demux *dvbdmx, const u8 *buf) -{ - struct dvb_demux_feed *dvbdmxfeed; - - if (!(dvbdmxfeed=dvbdmx->pid2feed[ts_pid(buf)])) - return; - dvb_dmx_swfilter_packet_type(dvbdmxfeed, buf); -} - -void -dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf, int count) -{ - struct dvb_demux_feed *dvbdmxfeed; - - spin_lock(&dvbdmx->lock); - if ((dvbdmxfeed=dvbdmx->pid2feed[0x2000])) - dvbdmxfeed->cb.ts((u8 *)buf, count*188, 0, 0, - &dvbdmxfeed->feed.ts, DMX_OK); - while (count) { - dvb_dmx_swfilter_packet(dvbdmx, buf); - count--; - buf+=188; - } - spin_unlock(&dvbdmx->lock); -} - -static inline void -dvb_dmx_swfilter(struct dvb_demux *dvbdmx, const u8 *buf, size_t count) -{ - int p=0,i, j; - - if ((i=dvbdmx->tsbufp)) { - if (count<(j=188-i)) { - memcpy(&dvbdmx->tsbuf[i], buf, count); - dvbdmx->tsbufp+=count; - return; - } - memcpy(&dvbdmx->tsbuf[i], buf, j); - dvb_dmx_swfilter_packet(dvbdmx, dvbdmx->tsbuf); - dvbdmx->tsbufp=0; - p+=j; - } - - while (p=188) { - dvb_dmx_swfilter_packet(dvbdmx, buf+p); - p+=188; - } else { - i=count-p; - memcpy(dvbdmx->tsbuf, buf+p, i); - dvbdmx->tsbufp=i; - return; - } - } else - p++; - } -} + switch(feed->type) { + case DMX_TYPE_TS: + if (!feed->feed.ts.is_filtering) + break; + if (feed->ts_type & TS_PACKET) { + if (feed->ts_type & TS_PAYLOAD_ONLY) + dvb_dmx_swfilter_payload(feed, buf); + else + feed->cb.ts(buf, 188, 0, 0, &feed->feed.ts, DMX_OK); + } + if (feed->ts_type & TS_DECODER) + if (feed->demux->write_to_decoder) + feed->demux->write_to_decoder(feed, buf, 188); + break; + case DMX_TYPE_SEC: + if (!feed->feed.sec.is_filtering) + break; + if (dvb_dmx_swfilter_section_packet(feed, buf) < 0) + feed->feed.sec.seclen = feed->feed.sec.secbufp=0; + break; + + default: + break; + } +} -/****************************************************************************** - ****************************************************************************** - * DVB DEMUX API LEVEL FUNCTIONS - ****************************************************************************** - ******************************************************************************/ -static struct dvb_demux_filter * -dvb_dmx_filter_alloc(struct dvb_demux *dvbdmx) +void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) { - int i; + struct dvb_demux_feed *feed; + struct list_head *pos, *head=&demux->feed_list; + u16 pid = ts_pid(buf); - for (i=0; ifilternum; i++) - if (dvbdmx->filter[i].state==DMX_STATE_FREE) - break; - if (i==dvbdmx->filternum) - return 0; - dvbdmx->filter[i].state=DMX_STATE_ALLOCATED; - return &dvbdmx->filter[i]; -} - -static struct dvb_demux_feed * -dvb_dmx_feed_alloc(struct dvb_demux *dvbdmx) -{ - int i; - - for (i=0; ifeednum; i++) - if (dvbdmx->feed[i].state==DMX_STATE_FREE) - break; - if (i==dvbdmx->feednum) - return 0; - dvbdmx->feed[i].state=DMX_STATE_ALLOCATED; - return &dvbdmx->feed[i]; + list_for_each(pos, head) { + feed = list_entry(pos, struct dvb_demux_feed, list_head); + if (feed->pid == pid) + dvb_dmx_swfilter_packet_type (feed, buf); + if (feed->pid == 0x2000) + feed->cb.ts(buf, 188, 0, 0, &feed->feed.ts, DMX_OK); + } } -/****************************************************************************** - * dmx_ts_feed API calls - ******************************************************************************/ +void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count) +{ + spin_lock(&demux->lock); -static int -dmx_pid_set(u16 pid, struct dvb_demux_feed *dvbdmxfeed) + while (count--) { + dvb_dmx_swfilter_packet(demux, buf); + buf += 188; + } + + spin_unlock(&demux->lock); +} + + +void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) { - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - struct dvb_demux_feed **pid2feed=dvbdmx->pid2feed; + int p = 0,i, j; + + if ((i = demux->tsbufp)) { + if (count < (j=188-i)) { + memcpy(&demux->tsbuf[i], buf, count); + demux->tsbufp += count; + return; + } + memcpy(&demux->tsbuf[i], buf, j); + dvb_dmx_swfilter_packet(demux, demux->tsbuf); + demux->tsbufp = 0; + p += j; + } - if (pid>DMX_MAX_PID) - return -EINVAL; - if (dvbdmxfeed->pid!=0xffff) { - if (dvbdmxfeed->pid<=DMX_MAX_PID) - pid2feed[dvbdmxfeed->pid]=0; - dvbdmxfeed->pid=0xffff; - } - if (pid2feed[pid]) { - return -EBUSY; + while (p < count) { + if (buf[p] == 0x47) { + if (count-p >= 188) { + dvb_dmx_swfilter_packet(demux, buf+p); + p += 188; + } else { + i = count-p; + memcpy(demux->tsbuf, buf+p, i); + demux->tsbufp=i; + return; + } + } else + p++; } - pid2feed[pid]=dvbdmxfeed; - dvbdmxfeed->pid=pid; +} + + +static +struct dvb_demux_filter* dvb_dmx_filter_alloc(struct dvb_demux *demux) +{ + int i; + + for (i=0; ifilternum; i++) + if (demux->filter[i].state == DMX_STATE_FREE) + break; + + if (i == demux->filternum) + return NULL; + + demux->filter[i].state = DMX_STATE_ALLOCATED; + + return &demux->filter[i]; +} + +static +struct dvb_demux_feed* dvb_dmx_feed_alloc(struct dvb_demux *demux) +{ + int i; + + for (i=0; ifeednum; i++) + if (demux->feed[i].state == DMX_STATE_FREE) + break; + + if (i == demux->feednum) + return NULL; + + demux->feed[i].state = DMX_STATE_ALLOCATED; + + return &demux->feed[i]; +} + + +static +int dmx_pid_set (u16 pid, struct dvb_demux_feed *feed) +{ + struct dvb_demux *demux = feed->demux; + struct list_head *pos, *n, *head=&demux->feed_list; + + if (pid > DMX_MAX_PID) + return -EINVAL; + + if (pid == feed->pid) + return 0; + + if (feed->pid <= DMX_MAX_PID) + list_for_each_safe(pos, n, head) + if (DMX_FEED_ENTRY(pos)->pid == feed->pid) { + list_del(pos); + break; + } + + list_add(&feed->list_head, head); + feed->pid = pid; + return 0; } -static int -dmx_ts_feed_set(struct dmx_ts_feed_s* feed, - u16 pid, - int ts_type, - dmx_ts_pes_t pes_type, - size_t callback_length, - size_t circular_buffer_size, - int descramble, - struct timespec timeout - ) +static +int dmx_ts_feed_set (struct dmx_ts_feed_s* ts_feed, u16 pid, int ts_type, + dmx_ts_pes_t pes_type, size_t callback_length, + size_t circular_buffer_size, int descramble, + struct timespec timeout) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *feed = (struct dvb_demux_feed *) ts_feed; + struct dvb_demux *demux = feed->demux; int ret; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; if (ts_type & TS_DECODER) { - if (pes_type >= DMX_TS_PES_OTHER) { - up(&dvbdmx->mutex); - return -EINVAL; + if (pes_type >= DMX_TS_PES_OTHER) { + up(&demux->mutex); + return -EINVAL; } - if (dvbdmx->pesfilter[pes_type] && - (dvbdmx->pesfilter[pes_type]!=dvbdmxfeed)) { - up(&dvbdmx->mutex); - return -EINVAL; + + if (demux->pesfilter[pes_type] && + demux->pesfilter[pes_type] != feed) { + up(&demux->mutex); + return -EINVAL; } + if ((pes_type != DMX_TS_PES_PCR0) && (pes_type != DMX_TS_PES_PCR1) && (pes_type != DMX_TS_PES_PCR2) && (pes_type != DMX_TS_PES_PCR3)) { - if ((ret=dmx_pid_set(pid, dvbdmxfeed))<0) { - up(&dvbdmx->mutex); + if ((ret = dmx_pid_set(pid, feed))<0) { + up(&demux->mutex); return ret; - } else - dvbdmxfeed->pid=pid; - } - dvbdmx->pesfilter[pes_type]=dvbdmxfeed; - dvbdmx->pids[pes_type]=dvbdmxfeed->pid; - } else - if ((ret=dmx_pid_set(pid, dvbdmxfeed))<0) { - up(&dvbdmx->mutex); + } + } else + feed->pid = pid; + + demux->pesfilter[pes_type] = feed; + demux->pids[pes_type] = feed->pid; + } else { + if ((ret = dmx_pid_set(pid, feed))<0) { + up(&demux->mutex); return ret; } + } - dvbdmxfeed->buffer_size=circular_buffer_size; - dvbdmxfeed->descramble=descramble; - dvbdmxfeed->timeout=timeout; - dvbdmxfeed->cb_length=callback_length; - dvbdmxfeed->ts_type=ts_type; - dvbdmxfeed->pes_type=pes_type; - - if (dvbdmxfeed->descramble) { - up(&dvbdmx->mutex); - return -ENOSYS; + feed->buffer_size = circular_buffer_size; + feed->descramble = descramble; + feed->timeout = timeout; + feed->cb_length = callback_length; + feed->ts_type = ts_type; + feed->pes_type = pes_type; + + if (feed->descramble) { + up(&demux->mutex); + return -ENOSYS; } - if (dvbdmxfeed->buffer_size) { + if (feed->buffer_size) { #ifdef NOBUFS - dvbdmxfeed->buffer=0; + feed->buffer=0; #else - dvbdmxfeed->buffer=vmalloc(dvbdmxfeed->buffer_size); - if (!dvbdmxfeed->buffer) { - up(&dvbdmx->mutex); + feed->buffer = vmalloc(feed->buffer_size); + if (!feed->buffer) { + up(&demux->mutex); return -ENOMEM; } #endif - } - dvbdmxfeed->state=DMX_STATE_READY; - up(&dvbdmx->mutex); - return 0; + } + + feed->state = DMX_STATE_READY; + up(&demux->mutex); + + return 0; } -static int -dmx_ts_feed_start_filtering(struct dmx_ts_feed_s* feed) + +static +int dmx_ts_feed_start_filtering(struct dmx_ts_feed_s* ts_feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *feed = (struct dvb_demux_feed *) ts_feed; + struct dvb_demux *demux = feed->demux; int ret; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; - if (dvbdmxfeed->state!=DMX_STATE_READY || - dvbdmxfeed->type!=DMX_TYPE_TS) { - up(&dvbdmx->mutex); - return -EINVAL; + if (feed->state != DMX_STATE_READY || feed->type != DMX_TYPE_TS) { + up(&demux->mutex); + return -EINVAL; } - if (!dvbdmx->start_feed) { - up(&dvbdmx->mutex); - return -1; + + if (!demux->start_feed) { + up(&demux->mutex); + return -ENODEV; } - ret=dvbdmx->start_feed(dvbdmxfeed); - if (ret<0) { - up(&dvbdmx->mutex); + + if ((ret = demux->start_feed(feed)) < 0) { + up(&demux->mutex); return ret; } - spin_lock_irq(&dvbdmx->lock); - feed->is_filtering=1; - dvbdmxfeed->state=DMX_STATE_GO; - spin_unlock_irq(&dvbdmx->lock); - up(&dvbdmx->mutex); + + spin_lock_irq(&demux->lock); + ts_feed->is_filtering = 1; + feed->state = DMX_STATE_GO; + spin_unlock_irq(&demux->lock); + up(&demux->mutex); + return 0; } -static int -dmx_ts_feed_stop_filtering(struct dmx_ts_feed_s* feed) +static +int dmx_ts_feed_stop_filtering(struct dmx_ts_feed_s* ts_feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *feed = (struct dvb_demux_feed *) ts_feed; + struct dvb_demux *demux = feed->demux; int ret; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; - if (dvbdmxfeed->statemutex); - return -EINVAL; + if (feed->statemutex); + return -EINVAL; } - if (!dvbdmx->stop_feed) { - up(&dvbdmx->mutex); - return -1; + + if (!demux->stop_feed) { + up(&demux->mutex); + return -ENODEV; } - ret=dvbdmx->stop_feed(dvbdmxfeed); - spin_lock_irq(&dvbdmx->lock); - feed->is_filtering=0; - dvbdmxfeed->state=DMX_STATE_ALLOCATED; - spin_unlock_irq(&dvbdmx->lock); - up(&dvbdmx->mutex); - return ret; + ret = demux->stop_feed(feed); + + spin_lock_irq(&demux->lock); + ts_feed->is_filtering = 0; + feed->state = DMX_STATE_ALLOCATED; + spin_unlock_irq(&demux->lock); + up(&demux->mutex); + + return ret; } -static int dvbdmx_allocate_ts_feed(dmx_demux_t *demux, - dmx_ts_feed_t **feed, - dmx_ts_cb callback) +static +int dvbdmx_allocate_ts_feed (dmx_demux_t *dmx, dmx_ts_feed_t **ts_feed, + dmx_ts_cb callback) { - struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; - struct dvb_demux_feed *dvbdmxfeed; + struct dvb_demux *demux = (struct dvb_demux *) dmx; + struct dvb_demux_feed *feed; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; - if (!(dvbdmxfeed=dvb_dmx_feed_alloc(dvbdmx))) { - up(&dvbdmx->mutex); - return -EBUSY; + if (!(feed = dvb_dmx_feed_alloc(demux))) { + up(&demux->mutex); + return -EBUSY; } - dvbdmxfeed->type=DMX_TYPE_TS; - dvbdmxfeed->cb.ts=callback; - dvbdmxfeed->demux=dvbdmx; - dvbdmxfeed->pid=0xffff; - dvbdmxfeed->peslen=0xfffa; - dvbdmxfeed->buffer=0; - - (*feed)=&dvbdmxfeed->feed.ts; - (*feed)->is_filtering=0; - (*feed)->parent=demux; - (*feed)->priv=0; - (*feed)->set=dmx_ts_feed_set; - (*feed)->start_filtering=dmx_ts_feed_start_filtering; - (*feed)->stop_filtering=dmx_ts_feed_stop_filtering; + feed->type = DMX_TYPE_TS; + feed->cb.ts = callback; + feed->demux = demux; + feed->pid = 0xffff; + feed->peslen = 0xfffa; + feed->buffer = 0; + + (*ts_feed) = &feed->feed.ts; + (*ts_feed)->is_filtering = 0; + (*ts_feed)->parent = dmx; + (*ts_feed)->priv = 0; + (*ts_feed)->set = dmx_ts_feed_set; + (*ts_feed)->start_filtering = dmx_ts_feed_start_filtering; + (*ts_feed)->stop_filtering = dmx_ts_feed_stop_filtering; + + + if (!(feed->filter = dvb_dmx_filter_alloc(demux))) { + feed->state = DMX_STATE_FREE; + up(&demux->mutex); + return -EBUSY; + } - if (!(dvbdmxfeed->filter=dvb_dmx_filter_alloc(dvbdmx))) { - dvbdmxfeed->state=DMX_STATE_FREE; - up(&dvbdmx->mutex); - return -EBUSY; - } + feed->filter->type = DMX_TYPE_TS; + feed->filter->feed = feed; + feed->filter->state = DMX_STATE_READY; + + up(&demux->mutex); - dvbdmxfeed->filter->type=DMX_TYPE_TS; - dvbdmxfeed->filter->feed=dvbdmxfeed; - dvbdmxfeed->filter->state=DMX_STATE_READY; - - up(&dvbdmx->mutex); - return 0; + return 0; } -static int dvbdmx_release_ts_feed(dmx_demux_t *demux, dmx_ts_feed_t *feed) +static +int dvbdmx_release_ts_feed(dmx_demux_t *dmx, dmx_ts_feed_t *ts_feed) { - struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *demux = (struct dvb_demux *) dmx; + struct dvb_demux_feed *feed = (struct dvb_demux_feed *) ts_feed; + struct list_head *pos, *n, *head=&demux->feed_list; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; - if (dvbdmxfeed->state==DMX_STATE_FREE) { - up(&dvbdmx->mutex); - return -EINVAL; + if (feed->state == DMX_STATE_FREE) { + up(&demux->mutex); + return -EINVAL; } + #ifndef NOBUFS - if (dvbdmxfeed->buffer) { - vfree(dvbdmxfeed->buffer); - dvbdmxfeed->buffer=0; - } + if (feed->buffer) { + vfree(feed->buffer); + feed->buffer=0; + } #endif - dvbdmxfeed->state=DMX_STATE_FREE; - dvbdmxfeed->filter->state=DMX_STATE_FREE; - if (dvbdmxfeed->pid<=DMX_MAX_PID) { - dvbdmxfeed->demux->pid2feed[dvbdmxfeed->pid]=0; - dvbdmxfeed->pid=0xffff; - } - up(&dvbdmx->mutex); - return 0; + feed->state = DMX_STATE_FREE; + feed->filter->state = DMX_STATE_FREE; + + if (feed->pid <= DMX_MAX_PID) { + list_for_each_safe(pos, n, head) + if (DMX_FEED_ENTRY(pos)->pid == feed->pid) { + list_del(pos); + break; + } + feed->pid = 0xffff; + } + + if (feed->ts_type & TS_DECODER) + demux->pesfilter[feed->pes_type] = NULL; + + up(&demux->mutex); + return 0; } @@ -713,92 +755,92 @@ static int dmx_section_feed_allocate_filter(struct dmx_section_feed_s* feed, - dmx_section_filter_t** filter) + dmx_section_filter_t** filter) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdemux=dvbdmxfeed->demux; - struct dvb_demux_filter *dvbdmxfilter; + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdemux=dvbdmxfeed->demux; + struct dvb_demux_filter *dvbdmxfilter; if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - dvbdmxfilter=dvb_dmx_filter_alloc(dvbdemux); - if (!dvbdmxfilter) { + dvbdmxfilter=dvb_dmx_filter_alloc(dvbdemux); + if (!dvbdmxfilter) { up(&dvbdemux->mutex); - return -ENOSPC; + return -ENOSPC; } spin_lock_irq(&dvbdemux->lock); - *filter=&dvbdmxfilter->filter; - (*filter)->parent=feed; - (*filter)->priv=0; - dvbdmxfilter->feed=dvbdmxfeed; - dvbdmxfilter->type=DMX_TYPE_SEC; - dvbdmxfilter->state=DMX_STATE_READY; + *filter=&dvbdmxfilter->filter; + (*filter)->parent=feed; + (*filter)->priv=0; + dvbdmxfilter->feed=dvbdmxfeed; + dvbdmxfilter->type=DMX_TYPE_SEC; + dvbdmxfilter->state=DMX_STATE_READY; - dvbdmxfilter->next=dvbdmxfeed->filter; - dvbdmxfeed->filter=dvbdmxfilter; + dvbdmxfilter->next=dvbdmxfeed->filter; + dvbdmxfeed->filter=dvbdmxfilter; spin_unlock_irq(&dvbdemux->lock); - up(&dvbdemux->mutex); - return 0; + up(&dvbdemux->mutex); + return 0; } static int dmx_section_feed_set(struct dmx_section_feed_s* feed, - u16 pid, size_t circular_buffer_size, - int descramble, int check_crc) + u16 pid, size_t circular_buffer_size, + int descramble, int check_crc) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct list_head *pos, *n, *head=&dvbdmx->feed_list; - if (pid>0x1fff) - return -EINVAL; + if (pid>0x1fff) + return -EINVAL; if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (dvbdmxfeed->pid!=0xffff) { - dvbdmx->pid2feed[dvbdmxfeed->pid]=0; - dvbdmxfeed->pid=0xffff; - } - if (dvbdmx->pid2feed[pid]) { - up(&dvbdmx->mutex); - return -EBUSY; - } - dvbdmx->pid2feed[pid]=dvbdmxfeed; - dvbdmxfeed->pid=pid; - - dvbdmxfeed->buffer_size=circular_buffer_size; - dvbdmxfeed->descramble=descramble; - if (dvbdmxfeed->descramble) { + if (dvbdmxfeed->pid <= DMX_MAX_PID) + list_for_each_safe(pos, n, head) + if (DMX_FEED_ENTRY(pos)->pid == dvbdmxfeed->pid) { + list_del(pos); + break; + } + + list_add(&dvbdmxfeed->list_head, head); + dvbdmxfeed->pid=pid; + + dvbdmxfeed->buffer_size=circular_buffer_size; + dvbdmxfeed->descramble=descramble; + if (dvbdmxfeed->descramble) { up(&dvbdmx->mutex); - return -ENOSYS; + return -ENOSYS; } - dvbdmxfeed->check_crc=check_crc; + dvbdmxfeed->feed.sec.check_crc=check_crc; #ifdef NOBUFS - dvbdmxfeed->buffer=0; + dvbdmxfeed->buffer=0; #else - dvbdmxfeed->buffer=vmalloc(dvbdmxfeed->buffer_size); - if (!dvbdmxfeed->buffer) { + dvbdmxfeed->buffer=vmalloc(dvbdmxfeed->buffer_size); + if (!dvbdmxfeed->buffer) { up(&dvbdmx->mutex); return -ENOMEM; } #endif - dvbdmxfeed->state=DMX_STATE_READY; - up(&dvbdmx->mutex); - return 0; + dvbdmxfeed->state=DMX_STATE_READY; + up(&dvbdmx->mutex); + return 0; } static void prepare_secfilters(struct dvb_demux_feed *dvbdmxfeed) { int i; - dmx_section_filter_t *sf; + dmx_section_filter_t *sf; struct dvb_demux_filter *f; u8 mask, mode, doneq; if (!(f=dvbdmxfeed->filter)) - return; - do { + return; + do { sf=&f->filter; doneq=0; for (i=0; idemux; + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; int ret; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (feed->is_filtering) { + if (feed->is_filtering) { up(&dvbdmx->mutex); return -EBUSY; } - if (!dvbdmxfeed->filter) { + if (!dvbdmxfeed->filter) { up(&dvbdmx->mutex); - return -EINVAL; + return -EINVAL; } - dvbdmxfeed->secbufp=0; - dvbdmxfeed->seclen=0; - - if (!dvbdmx->start_feed) { + dvbdmxfeed->feed.sec.secbufp=0; + dvbdmxfeed->feed.sec.seclen=0; + + if (!dvbdmx->start_feed) { up(&dvbdmx->mutex); - return -1; + return -ENODEV; } + prepare_secfilters(dvbdmxfeed); - ret=dvbdmx->start_feed(dvbdmxfeed); - if (ret<0) { + + if ((ret = dvbdmx->start_feed(dvbdmxfeed)) < 0) { up(&dvbdmx->mutex); return ret; } + spin_lock_irq(&dvbdmx->lock); - feed->is_filtering=1; - dvbdmxfeed->state=DMX_STATE_GO; + feed->is_filtering=1; + dvbdmxfeed->state=DMX_STATE_GO; spin_unlock_irq(&dvbdmx->lock); - up(&dvbdmx->mutex); + up(&dvbdmx->mutex); return 0; } static int dmx_section_feed_stop_filtering(struct dmx_section_feed_s* feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - int ret; + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + int ret; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (!dvbdmx->stop_feed) { + if (!dvbdmx->stop_feed) { up(&dvbdmx->mutex); - return -1; + return -ENODEV; } ret=dvbdmx->stop_feed(dvbdmxfeed); spin_lock_irq(&dvbdmx->lock); - dvbdmxfeed->state=DMX_STATE_READY; - feed->is_filtering=0; + dvbdmxfeed->state=DMX_STATE_READY; + feed->is_filtering=0; spin_unlock_irq(&dvbdmx->lock); - up(&dvbdmx->mutex); + up(&dvbdmx->mutex); return ret; } static int dmx_section_feed_release_filter(dmx_section_feed_t *feed, - dmx_section_filter_t* filter) + dmx_section_filter_t* filter) { - struct dvb_demux_filter *dvbdmxfilter=(struct dvb_demux_filter *) filter, *f; - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_filter *dvbdmxfilter=(struct dvb_demux_filter *) filter, *f; + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (dvbdmxfilter->feed!=dvbdmxfeed) { + if (dvbdmxfilter->feed!=dvbdmxfeed) { up(&dvbdmx->mutex); - return -EINVAL; + return -EINVAL; } - if (feed->is_filtering) - feed->stop_filtering(feed); + if (feed->is_filtering) + feed->stop_filtering(feed); spin_lock_irq(&dvbdmx->lock); - f=dvbdmxfeed->filter; - if (f==dvbdmxfilter) - dvbdmxfeed->filter=dvbdmxfilter->next; - else { - while(f->next!=dvbdmxfilter) - f=f->next; - f->next=f->next->next; - } - dvbdmxfilter->state=DMX_STATE_FREE; + f=dvbdmxfeed->filter; + if (f==dvbdmxfilter) + dvbdmxfeed->filter=dvbdmxfilter->next; + else { + while(f->next!=dvbdmxfilter) + f=f->next; + f->next=f->next->next; + } + dvbdmxfilter->state=DMX_STATE_FREE; spin_unlock_irq(&dvbdmx->lock); - up(&dvbdmx->mutex); - return 0; + up(&dvbdmx->mutex); + return 0; } static int dvbdmx_allocate_section_feed(dmx_demux_t *demux, - dmx_section_feed_t **feed, - dmx_section_cb callback) + dmx_section_feed_t **feed, + dmx_section_cb callback) { - struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; - struct dvb_demux_feed *dvbdmxfeed; + struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; + struct dvb_demux_feed *dvbdmxfeed; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (!(dvbdmxfeed=dvb_dmx_feed_alloc(dvbdmx))) { + if (!(dvbdmxfeed=dvb_dmx_feed_alloc(dvbdmx))) { up(&dvbdmx->mutex); - return -EBUSY; + return -EBUSY; } - dvbdmxfeed->type=DMX_TYPE_SEC; - dvbdmxfeed->cb.sec=callback; - dvbdmxfeed->demux=dvbdmx; - dvbdmxfeed->pid=0xffff; - dvbdmxfeed->secbufp=0; - dvbdmxfeed->filter=0; - dvbdmxfeed->buffer=0; - - (*feed)=&dvbdmxfeed->feed.sec; - (*feed)->is_filtering=0; - (*feed)->parent=demux; - (*feed)->priv=0; - (*feed)->set=dmx_section_feed_set; - (*feed)->allocate_filter=dmx_section_feed_allocate_filter; - (*feed)->release_filter=dmx_section_feed_release_filter; - (*feed)->start_filtering=dmx_section_feed_start_filtering; - (*feed)->stop_filtering=dmx_section_feed_stop_filtering; + dvbdmxfeed->type=DMX_TYPE_SEC; + dvbdmxfeed->cb.sec=callback; + dvbdmxfeed->demux=dvbdmx; + dvbdmxfeed->pid=0xffff; + dvbdmxfeed->feed.sec.secbufp=0; + dvbdmxfeed->filter=0; + dvbdmxfeed->buffer=0; + + (*feed)=&dvbdmxfeed->feed.sec; + (*feed)->is_filtering=0; + (*feed)->parent=demux; + (*feed)->priv=0; + (*feed)->set=dmx_section_feed_set; + (*feed)->allocate_filter=dmx_section_feed_allocate_filter; + (*feed)->release_filter=dmx_section_feed_release_filter; + (*feed)->start_filtering=dmx_section_feed_start_filtering; + (*feed)->stop_filtering=dmx_section_feed_stop_filtering; - up(&dvbdmx->mutex); - return 0; + up(&dvbdmx->mutex); + return 0; } static int dvbdmx_release_section_feed(dmx_demux_t *demux, - dmx_section_feed_t *feed) + dmx_section_feed_t *feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; + struct list_head *pos, *n, *head=&dvbdmx->feed_list; - if (down_interruptible (&dvbdmx->mutex)) + if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (dvbdmxfeed->state==DMX_STATE_FREE) { + if (dvbdmxfeed->state==DMX_STATE_FREE) { up(&dvbdmx->mutex); - return -EINVAL; + return -EINVAL; } #ifndef NOBUFS - if (dvbdmxfeed->buffer) { - vfree(dvbdmxfeed->buffer); - dvbdmxfeed->buffer=0; - } + if (dvbdmxfeed->buffer) { + vfree(dvbdmxfeed->buffer); + dvbdmxfeed->buffer=0; + } #endif - dvbdmxfeed->state=DMX_STATE_FREE; - dvbdmxfeed->demux->pid2feed[dvbdmxfeed->pid]=0; - if (dvbdmxfeed->pid!=0xffff) - dvbdmxfeed->demux->pid2feed[dvbdmxfeed->pid]=0; - up(&dvbdmx->mutex); - return 0; + dvbdmxfeed->state=DMX_STATE_FREE; + + if (dvbdmxfeed->pid <= DMX_MAX_PID) { + list_for_each_safe(pos, n, head) + if (DMX_FEED_ENTRY(pos)->pid == dvbdmxfeed->pid) { + list_del(pos); + break; + } + dvbdmxfeed->pid = 0xffff; + } + + up(&dvbdmx->mutex); + return 0; } @@ -977,72 +1029,72 @@ static int dvbdmx_open(dmx_demux_t *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - if (dvbdemux->users>=MAX_DVB_DEMUX_USERS) - return -EUSERS; - dvbdemux->users++; - return 0; + if (dvbdemux->users>=MAX_DVB_DEMUX_USERS) + return -EUSERS; + dvbdemux->users++; + return 0; } static int dvbdmx_close(struct dmx_demux_s *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - if (dvbdemux->users==0) - return -ENODEV; - dvbdemux->users--; - //FIXME: release any unneeded resources if users==0 - return 0; + if (dvbdemux->users==0) + return -ENODEV; + dvbdemux->users--; + //FIXME: release any unneeded resources if users==0 + return 0; } static int dvbdmx_write(dmx_demux_t *demux, const char *buf, size_t count) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - if ((!demux->frontend) || - (demux->frontend->source!=DMX_MEMORY_FE)) - return -EINVAL; + if ((!demux->frontend) || + (demux->frontend->source!=DMX_MEMORY_FE)) + return -EINVAL; - if (down_interruptible (&dvbdemux->mutex)) + if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - dvb_dmx_swfilter(dvbdemux, buf, count); - up(&dvbdemux->mutex); - return count; + dvb_dmx_swfilter(dvbdemux, buf, count); + up(&dvbdemux->mutex); + return count; } static int dvbdmx_add_frontend(dmx_demux_t *demux, - dmx_frontend_t *frontend) + dmx_frontend_t *frontend) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - struct list_head *pos, *head=&dvbdemux->frontend_list; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct list_head *pos, *head=&dvbdemux->frontend_list; if (!(frontend->id && frontend->vendor && frontend->model)) - return -EINVAL; + return -EINVAL; list_for_each(pos, head) { - if (!strcmp(DMX_FE_ENTRY(pos)->id, frontend->id)) - return -EEXIST; + if (!strcmp(DMX_FE_ENTRY(pos)->id, frontend->id)) + return -EEXIST; } list_add(&(frontend->connectivity_list), head); - return 0; + return 0; } static int dvbdmx_remove_frontend(dmx_demux_t *demux, - dmx_frontend_t *frontend) + dmx_frontend_t *frontend) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - struct list_head *pos, *n, *head=&dvbdemux->frontend_list; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct list_head *pos, *n, *head=&dvbdemux->frontend_list; list_for_each_safe (pos, n, head) { - if (DMX_FE_ENTRY(pos)==frontend) - { - list_del(pos); + if (DMX_FE_ENTRY(pos)==frontend) + { + list_del(pos); return 0; } } @@ -1052,123 +1104,129 @@ static struct list_head * dvbdmx_get_frontends(dmx_demux_t *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - if (list_empty(&dvbdemux->frontend_list)) - return NULL; - return &dvbdemux->frontend_list; + if (list_empty(&dvbdemux->frontend_list)) + return NULL; + return &dvbdemux->frontend_list; } static int dvbdmx_connect_frontend(dmx_demux_t *demux, - dmx_frontend_t *frontend) + dmx_frontend_t *frontend) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - if (demux->frontend) - return -EINVAL; - - if (down_interruptible (&dvbdemux->mutex)) + if (demux->frontend) + return -EINVAL; + + if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - demux->frontend=frontend; - up(&dvbdemux->mutex); - return 0; + demux->frontend=frontend; + up(&dvbdemux->mutex); + return 0; } static int dvbdmx_disconnect_frontend(dmx_demux_t *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - if (down_interruptible (&dvbdemux->mutex)) + if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - demux->frontend=NULL; - up(&dvbdemux->mutex); - return 0; + demux->frontend=NULL; + up(&dvbdemux->mutex); + return 0; } static int dvbdmx_get_pes_pids(dmx_demux_t *demux, u16 *pids) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - memcpy(pids, dvbdemux->pids, 5*sizeof(u16)); - return 0; + memcpy(pids, dvbdemux->pids, 5*sizeof(u16)); + return 0; } int dvb_dmx_init(struct dvb_demux *dvbdemux) { - int i; - dmx_demux_t *dmx=&dvbdemux->dmx; + int i; + dmx_demux_t *dmx=&dvbdemux->dmx; - dvbdemux->users=0; + dvbdemux->users=0; dvbdemux->filter=vmalloc(dvbdemux->filternum*sizeof(struct dvb_demux_filter)); if (!dvbdemux->filter) - return -ENOMEM; + return -ENOMEM; dvbdemux->feed=vmalloc(dvbdemux->feednum*sizeof(struct dvb_demux_feed)); if (!dvbdemux->feed) { - vfree(dvbdemux->filter); - return -ENOMEM; + vfree(dvbdemux->filter); + return -ENOMEM; } - for (i=0; ifilternum; i++) { - dvbdemux->filter[i].state=DMX_STATE_FREE; - dvbdemux->filter[i].index=i; - } - for (i=0; ifeednum; i++) - dvbdemux->feed[i].state=DMX_STATE_FREE; - dvbdemux->frontend_list.next= - dvbdemux->frontend_list.prev= - &dvbdemux->frontend_list; - for (i=0; ipesfilter[i]=NULL; - dvbdemux->pids[i]=0xffff; - } - dvbdemux->playing=dvbdemux->recording=0; - memset(dvbdemux->pid2feed, 0, (DMX_MAX_PID+1)*sizeof(struct dvb_demux_feed *)); - dvbdemux->tsbufp=0; - - dmx->frontend=0; - dmx->reg_list.next=dmx->reg_list.prev=&dmx->reg_list; - dmx->priv=(void *) dvbdemux; - //dmx->users=0; // reset in dmx_register_demux() - dmx->open=dvbdmx_open; - dmx->close=dvbdmx_close; - dmx->write=dvbdmx_write; - dmx->allocate_ts_feed=dvbdmx_allocate_ts_feed; - dmx->release_ts_feed=dvbdmx_release_ts_feed; - dmx->allocate_section_feed=dvbdmx_allocate_section_feed; - dmx->release_section_feed=dvbdmx_release_section_feed; - - dmx->descramble_mac_address=NULL; - dmx->descramble_section_payload=NULL; - - dmx->add_frontend=dvbdmx_add_frontend; - dmx->remove_frontend=dvbdmx_remove_frontend; - dmx->get_frontends=dvbdmx_get_frontends; - dmx->connect_frontend=dvbdmx_connect_frontend; - dmx->disconnect_frontend=dvbdmx_disconnect_frontend; - dmx->get_pes_pids=dvbdmx_get_pes_pids; - sema_init(&dvbdemux->mutex, 1); + for (i=0; ifilternum; i++) { + dvbdemux->filter[i].state=DMX_STATE_FREE; + dvbdemux->filter[i].index=i; + } + for (i=0; ifeednum; i++) + dvbdemux->feed[i].state=DMX_STATE_FREE; + dvbdemux->frontend_list.next= + dvbdemux->frontend_list.prev= + &dvbdemux->frontend_list; + for (i=0; ipesfilter[i]=NULL; + dvbdemux->pids[i]=0xffff; + } + dvbdemux->playing=dvbdemux->recording=0; + INIT_LIST_HEAD(&dvbdemux->feed_list); + dvbdemux->tsbufp=0; + + if (!dvbdemux->check_crc32) + dvbdemux->check_crc32 = dvb_dmx_crc32; + + if (!dvbdemux->memcopy) + dvbdemux->memcopy = dvb_dmx_memcopy; + + dmx->frontend=0; + dmx->reg_list.next=dmx->reg_list.prev=&dmx->reg_list; + dmx->priv=(void *) dvbdemux; + //dmx->users=0; // reset in dmx_register_demux() + dmx->open=dvbdmx_open; + dmx->close=dvbdmx_close; + dmx->write=dvbdmx_write; + dmx->allocate_ts_feed=dvbdmx_allocate_ts_feed; + dmx->release_ts_feed=dvbdmx_release_ts_feed; + dmx->allocate_section_feed=dvbdmx_allocate_section_feed; + dmx->release_section_feed=dvbdmx_release_section_feed; + + dmx->descramble_mac_address=NULL; + dmx->descramble_section_payload=NULL; + + dmx->add_frontend=dvbdmx_add_frontend; + dmx->remove_frontend=dvbdmx_remove_frontend; + dmx->get_frontends=dvbdmx_get_frontends; + dmx->connect_frontend=dvbdmx_connect_frontend; + dmx->disconnect_frontend=dvbdmx_disconnect_frontend; + dmx->get_pes_pids=dvbdmx_get_pes_pids; + sema_init(&dvbdemux->mutex, 1); spin_lock_init(&dvbdemux->lock); - if (dmx_register_demux(dmx)<0) - return -1; + if (dmx_register_demux(dmx)<0) + return -1; - return 0; + return 0; } int dvb_dmx_release(struct dvb_demux *dvbdemux) { - dmx_demux_t *dmx=&dvbdemux->dmx; + dmx_demux_t *dmx=&dvbdemux->dmx; - dmx_unregister_demux(dmx); + dmx_unregister_demux(dmx); if (dvbdemux->filter) - vfree(dvbdemux->filter); + vfree(dvbdemux->filter); if (dvbdemux->feed) - vfree(dvbdemux->feed); - return 0; + vfree(dvbdemux->feed); + return 0; } #if 0 diff -Nru a/drivers/media/dvb/dvb-core/dvb_demux.h b/drivers/media/dvb/dvb-core/dvb_demux.h --- a/drivers/media/dvb/dvb-core/dvb_demux.h Sat Apr 12 14:44:07 2003 +++ b/drivers/media/dvb/dvb-core/dvb_demux.h Sat Apr 12 14:44:07 2003 @@ -25,6 +25,9 @@ #ifndef _DVB_DEMUX_H_ #define _DVB_DEMUX_H_ +#include +#include + #include "demux.h" #define DMX_TYPE_TS 0 @@ -59,6 +62,8 @@ }; +#define DMX_FEED_ENTRY(pos) list_entry(pos, struct dvb_demux_feed, list_head) + struct dvb_demux_feed { union { dmx_ts_feed_t ts; @@ -71,13 +76,13 @@ } cb; struct dvb_demux *demux; + void *priv; int type; int state; u16 pid; u8 *buffer; int buffer_size; int descramble; - int check_crc; struct timespec timeout; struct dvb_demux_filter *filter; @@ -86,12 +91,11 @@ int ts_type; dmx_ts_pes_t pes_type; - u8 secbuf[4096]; - int secbufp; - int seclen; int cc; u16 peslen; + + struct list_head list_head; }; struct dvb_demux { @@ -99,10 +103,14 @@ void *priv; int filternum; int feednum; - int (*start_feed)(struct dvb_demux_feed *); - int (*stop_feed)(struct dvb_demux_feed *); - int (*write_to_decoder)(struct dvb_demux_feed *, u8 *, size_t); - + int (*start_feed) (struct dvb_demux_feed *feed); + int (*stop_feed) (struct dvb_demux_feed *feed); + int (*write_to_decoder) (struct dvb_demux_feed *feed, + const u8 *buf, size_t len); + u32 (*check_crc32) (struct dvb_demux_feed *feed, + const u8 *buf, size_t len); + void (*memcopy) (struct dvb_demux_feed *feed, u8 *dst, + const u8 *src, size_t len); int users; #define MAX_DVB_DEMUX_USERS 10 @@ -117,7 +125,7 @@ int recording; #define DMX_MAX_PID 0x2000 - struct dvb_demux_feed *pid2feed[DMX_MAX_PID+1]; + struct list_head feed_list; u8 tsbuf[188]; int tsbufp; @@ -129,6 +137,7 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux); int dvb_dmx_release(struct dvb_demux *dvbdemux); void dvb_dmx_swfilter_packet(struct dvb_demux *dvbdmx, const u8 *buf); -void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf, int count); +void dvb_dmx_swfilter_packets(struct dvb_demux *dvbdmx, const u8 *buf, size_t count); +void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count); #endif /* _DVB_DEMUX_H_ */ diff -Nru a/drivers/media/dvb/dvb-core/dvb_filter.c b/drivers/media/dvb/dvb-core/dvb_filter.c --- a/drivers/media/dvb/dvb-core/dvb_filter.c Sat Apr 12 14:44:10 2003 +++ b/drivers/media/dvb/dvb-core/dvb_filter.c Sat Apr 12 14:44:10 2003 @@ -1,5 +1,4 @@ #include -#include #include "dvb_filter.h" unsigned int bitrates[3][16] = @@ -52,10 +51,10 @@ if (buf[1]&PAY_START) { if (p->plength == MMAX_PLENGTH-6 && p->found>6){ p->plength = p->found-6; - p->found = 0; + p->found = 0; send_ipack(p); dvb_filter_ipack_reset(p); - } + } } if (buf[3] & ADAPT_FIELD) { // adaptation field? off = buf[4] + 1; @@ -71,12 +70,12 @@ int read_picture_header(uint8_t *headr, mpg_picture *pic, int field, int pr) { uint8_t pct; - + if (pr) printk( "Pic header: "); pic->temporal_reference[field] = (( headr[0] << 2 ) | (headr[1] & 0x03) )& 0x03ff; if (pr) printk( " temp ref: 0x%04x", pic->temporal_reference[field]); - + pct = ( headr[1] >> 2 ) & 0x07; pic->picture_coding_type[field] = pct; if (pr) { @@ -90,26 +89,26 @@ case P_FRAME: printk( " P-FRAME"); break; - } - } - + } + } + pic->vinfo.vbv_delay = (( headr[1] >> 5 ) | ( headr[2] << 3) | ( (headr[3] & 0x1F) << 11) ) & 0xffff; - + if (pr) printk( " vbv delay: 0x%04x", pic->vinfo.vbv_delay); - + pic->picture_header_parameter = ( headr[3] & 0xe0 ) | ((headr[4] & 0x80) >> 3); if ( pct == B_FRAME ){ pic->picture_header_parameter |= ( headr[4] >> 3 ) & 0x0f; - } + } if (pr) printk( " pic head param: 0x%x", pic->picture_header_parameter); return pct; -} +} #endif #if 0 @@ -130,14 +129,14 @@ pic->closed_gop = 1; } else { pic->closed_gop = 0; - } + } if (pr) printk("closed: %d", pic->closed_gop); if ( ( headr[3] & 0x20 ) != 0 ){ pic->broken_link = 1; - } else { + } else { pic->broken_link = 0; - } + } if (pr) printk(" broken: %d\n", pic->broken_link); return 0; @@ -160,37 +159,37 @@ sw = (int)((headr[3]&0xF0) >> 4) ; switch( sw ){ - case 1: + case 1: if (pr) printk("Videostream: ASPECT: 1:1"); vi->aspect_ratio = 100; - break; - case 2: + break; + case 2: if (pr) printk("Videostream: ASPECT: 4:3"); vi->aspect_ratio = 133; - break; - case 3: + break; + case 3: if (pr) printk("Videostream: ASPECT: 16:9"); vi->aspect_ratio = 177; - break; + break; case 4: if (pr) printk("Videostream: ASPECT: 2.21:1"); vi->aspect_ratio = 221; - break; + break; case 5 ... 15: if (pr) printk("Videostream: ASPECT: reserved"); vi->aspect_ratio = 0; - break; - + break; + default: vi->aspect_ratio = 0; return -1; - } + } if (pr) printk(" Size = %dx%d",vi->horizontal_size,vi->vertical_size); @@ -221,29 +220,29 @@ printk(" FRate: 29.97 fps"); vi->framerate = 29970; form = VIDEO_MODE_NTSC; - break; - case 5: + break; + case 5: if (pr) printk(" FRate: 30 fps"); vi->framerate = 30000; form = VIDEO_MODE_NTSC; - break; - case 6: + break; + case 6: if (pr) printk(" FRate: 50 fps"); vi->framerate = 50000; form = VIDEO_MODE_PAL; - break; - case 7: + break; + case 7: if (pr) printk(" FRate: 60 fps"); vi->framerate = 60000; form = VIDEO_MODE_NTSC; - break; - } - - vi->bit_rate = (headr[4] << 10) | (headr[5] << 2) | (headr[6] & 0x03); + break; + } + vi->bit_rate = (headr[4] << 10) | (headr[5] << 2) | (headr[6] & 0x03); + vi->vbv_buffer_size = (( headr[6] & 0xF8) >> 3 ) | (( headr[7] & 0x1F )<< 5); @@ -259,7 +258,7 @@ } #endif - + #if 0 static int get_vinfo(uint8_t *mbuf, int count, VideoInfo *vi, int pr) @@ -267,7 +266,7 @@ uint8_t *headr; int found = 0; int c = 0; - + while (found < 4 && c+4 < count){ uint8_t *b; @@ -277,7 +276,7 @@ else { c++; } - } + } if (! found) return -1; c += 4; @@ -288,7 +287,7 @@ return 0; } #endif - + #if 0 static @@ -306,9 +305,9 @@ if ( b[0] == 0xff && (b[1] & 0xf8) == 0xf8) found = 2; else { - c++; - } - } + c++; + } + } if (!found) return -1; @@ -330,7 +329,7 @@ printk(" BRate: reserved"); else printk(" BRate: %d kb/s", ai->bit_rate/1000); - } + } fr = (headr[2] & 0x0c ) >> 2; ai->frequency = freq[fr]*100; @@ -340,41 +339,41 @@ else printk(" Freq: %d kHz\n",ai->frequency); - } + } ai->off = c; return 0; } #endif - -static -int get_ac3info(uint8_t *mbuf, int count, AudioInfo *ai, int pr) + + +int dvb_filter_get_ac3info(uint8_t *mbuf, int count, AudioInfo *ai, int pr) { uint8_t *headr; int found = 0; int c = 0; uint8_t frame = 0; int fr = 0; - + while ( !found && c < count){ uint8_t *b = mbuf+c; - + if ( b[0] == 0x0b && b[1] == 0x77 ) found = 1; else { - c++; - } - } - + c++; + } + } + if (!found) return -1; if (pr) printk("Audiostream: AC3"); - + ai->off = c; if (c+5 >= count) return -1; - + ai->layer = 0; // 0 for AC3 headr = mbuf+c+2; - + frame = (headr[2]&0x3f); ai->bit_rate = ac3_bitrates[frame >> 1]*1000; @@ -420,8 +419,8 @@ } else { /* mpeg1 */ for (buf = inbuf + 6; *buf == 0xff; buf++) if (buf == inbuf + 6 + 16) { - break; - } + break; + } if ((*buf & 0xc0) == 0x40) buf += 2; skip = mpeg1_skip_table [*buf >> 4]; @@ -433,7 +432,7 @@ *bufp = buf; return pts; -} +} #endif #if 0 @@ -509,7 +508,7 @@ pic->progressive_frame = 1; pic->picture_coding_parameter = 0x000010; } - + /* Reset flag */ pic->picture_display_extension_flag[field_type] = 0; @@ -527,7 +526,7 @@ } else { pic->frame_centre_horizontal_offset[3] = last_h_offset; pic->frame_centre_vertical_offset[3] = last_v_offset; - } + } } #endif @@ -566,7 +565,7 @@ dvb_filter_pes2ts_cb_t *cb, void *priv) { unsigned char *buf=p2ts->buf; - + buf[0]=0x47; buf[1]=(pid>>8); buf[2]=pid&0xff; @@ -579,7 +578,7 @@ { unsigned char *buf=p2ts->buf; int ret=0, rest; - + //len=6+((pes[4]<<8)|pes[5]); buf[1]|=0x40; @@ -592,7 +591,7 @@ buf[1]&=~0x40; } if (!len) - return 0; + return 0; buf[3]=0x30|((p2ts->cc++)&0x0f); rest=183-len; if (rest) { @@ -603,399 +602,5 @@ buf[4]=rest; memcpy(buf+5+rest, pes, len); return p2ts->cb(p2ts->priv, buf); -} - -void dvb_filter_ipack_reset(ipack *p) -{ - p->found = 0; - p->cid = 0; - p->plength = 0; - p->flag1 = 0; - p->flag2 = 0; - p->hlength = 0; - p->mpeg = 0; - p->check = 0; - p->which = 0; - p->done = 0; - p->count = 0; -} - -void dvb_filter_ipack_init(ipack *p, int size, - void (*func)(u8 *buf, int size, void *priv)) -{ - if ( !(p->buf = vmalloc(size*sizeof(u8))) ){ - printk ("Couldn't allocate memory for ipack\n"); - } - p->size = size; - p->func = func; - p->repack_subids = 0; - dvb_filter_ipack_reset(p); -} - -void dvb_filter_ipack_free(ipack * p) -{ - if (p->buf) vfree(p->buf); -} - -static -void send_ipack(ipack *p) -{ - int off; - AudioInfo ai; - int ac3_off = 0; - int streamid=0; - int nframes= 0; - int f=0; - - switch ( p->mpeg ){ - case 2: - if (p->count < 10) return; - p->buf[3] = p->cid; - - p->buf[4] = (u8)(((p->count-6) & 0xFF00) >> 8); - p->buf[5] = (u8)((p->count-6) & 0x00FF); - if (p->repack_subids && p->cid == PRIVATE_STREAM1){ - - off = 9+p->buf[8]; - streamid = p->buf[off]; - if ((streamid & 0xF8) == 0x80){ - ai.off = 0; - ac3_off = ((p->buf[off+2] << 8)| - p->buf[off+3]); - if (ac3_off < p->count) - f=get_ac3info(p->buf+off+3+ac3_off, - p->count-ac3_off, &ai,0); - if ( !f ){ - nframes = (p->count-off-3-ac3_off)/ - ai.framesize + 1; - p->buf[off+2] = (ac3_off >> 8)& 0xFF; - p->buf[off+3] = (ac3_off)& 0xFF; - p->buf[off+1] = nframes; - - ac3_off += nframes * ai.framesize - - p->count; - } - } - } - p->func(p->buf, p->count, p->data); - - p->buf[6] = 0x80; - p->buf[7] = 0x00; - p->buf[8] = 0x00; - p->count = 9; - if (p->repack_subids && p->cid == PRIVATE_STREAM1 - && (streamid & 0xF8)==0x80 ){ - p->count += 4; - p->buf[9] = streamid; - p->buf[10] = (ac3_off >> 8)& 0xFF; - p->buf[11] = (ac3_off)& 0xFF; - p->buf[12] = 0; - } - - break; - case 1: - if (p->count < 8) return; - p->buf[3] = p->cid; - - p->buf[4] = (u8)(((p->count-6) & 0xFF00) >> 8); - p->buf[5] = (u8)((p->count-6) & 0x00FF); - p->func(p->buf, p->count, p->data); - - p->buf[6] = 0x0F; - p->count = 7; - break; - } -} - -void dvb_filter_ipack_flush(ipack *p) -{ - if (p->plength != MMAX_PLENGTH-6 || p->found<=6) - return; - p->plength = p->found-6; - p->found = 0; - send_ipack(p); - dvb_filter_ipack_reset(p); -} - -static -void write_ipack(ipack *p, u8 *data, int count) -{ - u8 headr[3] = { 0x00, 0x00, 0x01} ; - - if (p->count < 6){ - memcpy(p->buf, headr, 3); - p->count = 6; - } - - if (p->count + count < p->size){ - memcpy(p->buf+p->count, data, count); - p->count += count; - } else { - int rest = p->size - p->count; - memcpy(p->buf+p->count, data, rest); - p->count += rest; - send_ipack(p); - if (count - rest > 0) - write_ipack(p, data+rest, count-rest); - } -} - - -int dvb_filter_instant_repack(u8 *buf, int count, ipack *p) -{ - int l; - int c=0; - - while (c < count && (p->mpeg == 0 || - (p->mpeg == 1 && p->found < 7) || - (p->mpeg == 2 && p->found < 9)) - && (p->found < 5 || !p->done)){ - switch ( p->found ){ - case 0: - case 1: - if (buf[c] == 0x00) p->found++; - else p->found = 0; - c++; - break; - case 2: - if (buf[c] == 0x01) p->found++; - else if (buf[c] == 0) { - p->found = 2; - } else p->found = 0; - c++; - break; - case 3: - p->cid = 0; - switch (buf[c]){ - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - p->done = 1; - case PRIVATE_STREAM1: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - p->found++; - p->cid = buf[c]; - c++; - break; - default: - p->found = 0; - break; - } - break; - - case 4: - if (count-c > 1){ - p->plen[0] = buf[c]; - c++; - p->plen[1] = buf[c]; - c++; - p->found+=2; - p->plength=(p->plen[0]<<8)|p->plen[1]; - } else { - p->plen[0] = buf[c]; - p->found++; - return count; - } - break; - case 5: - p->plen[1] = buf[c]; - c++; - p->found++; - p->plength=(p->plen[0]<<8)|p->plen[1]; - break; - case 6: - if (!p->done){ - p->flag1 = buf[c]; - c++; - p->found++; - if ( (p->flag1 & 0xC0) == 0x80 ) p->mpeg = 2; - else { - p->hlength = 0; - p->which = 0; - p->mpeg = 1; - p->flag2 = 0; - } - } - break; - - case 7: - if ( !p->done && p->mpeg == 2) { - p->flag2 = buf[c]; - c++; - p->found++; - } - break; - - case 8: - if ( !p->done && p->mpeg == 2) { - p->hlength = buf[c]; - c++; - p->found++; - } - break; - - default: - - break; - } - } - - if (c == count) return count; - - if (!p->plength) p->plength = MMAX_PLENGTH-6; - - if ( p->done || ((p->mpeg == 2 && p->found >= 9) || - (p->mpeg == 1 && p->found >= 7)) ){ - switch (p->cid){ - - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - case PRIVATE_STREAM1: - - if (p->mpeg == 2 && p->found == 9) { - write_ipack(p, &p->flag1, 1); - write_ipack(p, &p->flag2, 1); - write_ipack(p, &p->hlength, 1); - } - - if (p->mpeg == 1 && p->found == 7) - write_ipack(p, &p->flag1, 1); - - if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) && - p->found < 14) { - while (c < count && p->found < 14) { - p->pts[p->found-9] = buf[c]; - write_ipack(p, buf+c, 1); - c++; - p->found++; - } - if (c == count) return count; - } - - if (p->mpeg == 1 && p->which < 2000) { - - if (p->found == 7) { - p->check = p->flag1; - p->hlength = 1; - } - - while (!p->which && c < count && - p->check == 0xFF){ - p->check = buf[c]; - write_ipack(p, buf+c, 1); - c++; - p->found++; - p->hlength++; - } - - if ( c == count) return count; - - if ( (p->check & 0xC0) == 0x40 && !p->which){ - p->check = buf[c]; - write_ipack(p, buf+c, 1); - c++; - p->found++; - p->hlength++; - - p->which = 1; - if ( c == count) return count; - p->check = buf[c]; - write_ipack(p, buf+c, 1); - c++; - p->found++; - p->hlength++; - p->which = 2; - if ( c == count) return count; - } - - if (p->which == 1){ - p->check = buf[c]; - write_ipack(p, buf+c, 1); - c++; - p->found++; - p->hlength++; - p->which = 2; - if ( c == count) return count; - } - - if ( (p->check & 0x30) && p->check != 0xFF){ - p->flag2 = (p->check & 0xF0) << 2; - p->pts[0] = p->check; - p->which = 3; - } - - if ( c == count) return count; - if (p->which > 2){ - if ((p->flag2 & PTS_DTS_FLAGS) - == PTS_ONLY){ - while (c < count && - p->which < 7){ - p->pts[p->which-2] = - buf[c]; - write_ipack(p,buf+c,1); - c++; - p->found++; - p->which++; - p->hlength++; - } - if ( c == count) return count; - } else if ((p->flag2 & PTS_DTS_FLAGS) - == PTS_DTS){ - while (c < count && - p->which< 12){ - if (p->which< 7) - p->pts[p->which - -2] = - buf[c]; - write_ipack(p,buf+c,1); - c++; - p->found++; - p->which++; - p->hlength++; - } - if ( c == count) return count; - } - p->which = 2000; - } - - } - - while (c < count && p->found < p->plength+6){ - l = count -c; - if (l+p->found > p->plength+6) - l = p->plength+6-p->found; - write_ipack(p, buf+c, l); - p->found += l; - c += l; - } - - break; - } - - - if ( p->done ){ - if( p->found + count - c < p->plength+6){ - p->found += count-c; - c = count; - } else { - c += p->plength+6 - p->found; - p->found = p->plength+6; - } - } - - if (p->plength && p->found == p->plength+6) { - send_ipack(p); - dvb_filter_ipack_reset(p); - if (c < count) - dvb_filter_instant_repack(buf+c, count-c, p); - } - } - return count; } diff -Nru a/drivers/media/dvb/dvb-core/dvb_filter.h b/drivers/media/dvb/dvb-core/dvb_filter.h --- a/drivers/media/dvb/dvb-core/dvb_filter.h Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvb_filter.h Sat Apr 12 14:44:06 2003 @@ -17,6 +17,7 @@ void dvb_filter_pes2ts_init(dvb_filter_pes2ts_t *p2ts, unsigned short pid, dvb_filter_pes2ts_cb_t *cb, void *priv); + int dvb_filter_pes2ts(dvb_filter_pes2ts_t *p2ts, unsigned char *pes, int len); @@ -223,12 +224,7 @@ uint32_t off; } AudioInfo; +int dvb_filter_get_ac3info(uint8_t *mbuf, int count, AudioInfo *ai, int pr); -void dvb_filter_ipack_reset(ipack *p); -int dvb_filter_instant_repack(u8 *buf, int count, ipack *p); -void dvb_filter_ipack_init(ipack *p, int size, - void (*func)(u8 *buf, int size, void *priv)); -void dvb_filter_ipack_free(ipack * p); -void dvb_filter_ipack_flush(ipack *p); #endif diff -Nru a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c --- a/drivers/media/dvb/dvb-core/dvb_frontend.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c Sat Apr 12 14:44:06 2003 @@ -27,16 +27,14 @@ #include #include #include -#include #include -#include "compat.h" #include "dvb_frontend.h" #include "dvbdev.h" static int dvb_frontend_debug = 0; -static int dvb_shutdown_timeout = 0; +static int dvb_shutdown_timeout = 5; #define dprintk if (dvb_frontend_debug) printk @@ -52,18 +50,10 @@ }; -struct dvb_fe_notifier_callbacks { - struct list_head list_head; - void (*callback) (fe_status_t s, void *data); - void *data; -}; - - struct dvb_frontend_data { struct dvb_frontend_info *info; struct dvb_frontend frontend; struct dvb_device *dvbdev; - struct list_head notifier_callbacks; struct dvb_frontend_parameters parameters; struct dvb_fe_events events; struct semaphore sem; @@ -92,8 +82,17 @@ }; +struct dvb_frontend_notifier_data { + struct list_head list_head; + struct dvb_adapter *adapter; + void (*callback) (fe_status_t s, void *data); + void *data; +}; + + static LIST_HEAD(frontend_list); static LIST_HEAD(frontend_ioctl_list); +static LIST_HEAD(frontend_notifier_list); static DECLARE_MUTEX(frontend_mutex); @@ -153,6 +152,7 @@ if (!recursive) { if (down_interruptible (&frontend_mutex)) return; + this_fe->bending = 0; } @@ -170,7 +170,7 @@ frequency += this_fe->lnb_drift; frequency += this_fe->bending; - if (this_fe != fe && + if (this_fe != fe && fe->lost_sync_count != -1 && frequency > f - stepsize && frequency < f + stepsize) { if (recursive % 2) @@ -192,9 +192,6 @@ void dvb_call_frontend_notifiers (struct dvb_frontend_data *fe, fe_status_t s) { - struct list_head *e; - struct dvb_fe_notifier_callbacks *c; - dprintk ("%s\n", __FUNCTION__); if ((fe->status & FE_HAS_LOCK) && !(s & FE_HAS_LOCK)) @@ -211,10 +208,8 @@ /** * now tell the Demux about the TS status changes... */ - list_for_each (e, &fe->notifier_callbacks) { - c = list_entry (e, struct dvb_fe_notifier_callbacks, list_head); - c->callback (fe->status, c->data); - } + if (fe->frontend.notifier_callback) + fe->frontend.notifier_callback(fe->status, fe->frontend.notifier_data); } @@ -297,38 +292,6 @@ static -struct dvb_frontend_parameters default_param [] = { - { /* NTV on Astra */ - frequency: 12669500-10600000, - inversion: INVERSION_OFF, - { qpsk: { symbol_rate: 22000000, fec_inner: FEC_AUTO } } - }, - { /* Cable */ - frequency: 394000000, - inversion: INVERSION_OFF, - { qam: { symbol_rate: 6900000, - fec_inner: FEC_AUTO, - modulation: QAM_64 - } - } - }, - { /* DVB-T */ - frequency: 730000000, - inversion: INVERSION_OFF, - { ofdm: { bandwidth: BANDWIDTH_8_MHZ, - code_rate_HP: FEC_2_3, - code_rate_LP: FEC_1_2, - constellation: QAM_16, - transmission_mode: TRANSMISSION_MODE_2K, - guard_interval: GUARD_INTERVAL_1_8, - hierarchy_information: HIERARCHY_NONE - } - } - } -}; - - -static int dvb_frontend_set_parameters (struct dvb_frontend_data *fe, struct dvb_frontend_parameters *param, int first_trial) @@ -336,8 +299,6 @@ struct dvb_frontend *frontend = &fe->frontend; int err; - dvb_bend_frequency (fe, 0); - if (first_trial) { fe->timeout_count = 0; fe->lost_sync_count = 0; @@ -349,6 +310,8 @@ sizeof (struct dvb_frontend_parameters)); } + dvb_bend_frequency (fe, 0); + dprintk ("%s: f == %i, drift == %i\n", __FUNCTION__, param->frequency, fe->lnb_drift); @@ -365,23 +328,12 @@ void dvb_frontend_init (struct dvb_frontend_data *fe) { struct dvb_frontend *frontend = &fe->frontend; - struct dvb_frontend_parameters *init_param; - printk ("DVB: initialising frontend %i:%i (%s)...\n", - frontend->i2c->adapter->num, frontend->i2c->id, fe->info->name); + dprintk ("DVB: initialising frontend %i:%i (%s)...\n", + frontend->i2c->adapter->num, frontend->i2c->id, + fe->info->name); dvb_frontend_internal_ioctl (frontend, FE_INIT, NULL); - - if (fe->info->type == FE_QPSK) { - dvb_frontend_internal_ioctl (frontend, FE_SET_VOLTAGE, - (void*) SEC_VOLTAGE_13); - dvb_frontend_internal_ioctl (frontend, FE_SET_TONE, - (void*) SEC_TONE_ON); - } - - init_param = &default_param[fe->info->type-FE_QPSK]; - - dvb_frontend_set_parameters (fe, init_param, 1); } @@ -464,7 +416,7 @@ if (fe->exit) return 1; - if (fe->dvbdev->users == 0 && dvb_shutdown_timeout) + if (fe->dvbdev->writers == 1) if (jiffies - fe->release_jiffies > dvb_shutdown_timeout * HZ) return 1; @@ -482,13 +434,27 @@ dprintk ("%s\n", __FUNCTION__); lock_kernel (); - daemonize("kdvb-fe"); +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,61)) + daemonize (); +#else + daemonize ("dvb fe"); +#endif +/* not needed anymore in 2.5.x, done in daemonize() */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) + reparent_to_init (); +#endif + + sigfillset (¤t->blocked); fe->thread = current; + snprintf (current->comm, sizeof (current->comm), "kdvb-fe-%i:%i", + fe->frontend.i2c->adapter->num, fe->frontend.i2c->id); unlock_kernel (); dvb_call_frontend_notifiers (fe, 0); dvb_frontend_init (fe); + fe->lost_sync_count = -1; + while (!dvb_frontend_is_exiting (fe)) { up (&fe->sem); /* is locked when we enter the thread... */ @@ -499,6 +465,9 @@ return -ERESTARTSYS; } + if (fe->lost_sync_count == -1) + continue; + if (dvb_frontend_is_exiting (fe)) break; @@ -513,10 +482,14 @@ fe->lost_sync_count = 0; } else { fe->lost_sync_count++; - if (fe->lost_sync_count < 10) /* XXX FIXME CHECKME! */ - continue; - dvb_frontend_recover (fe); - delay = HZ/5; + if (!(fe->info->caps & FE_CAN_RECOVER)) { + if (!(fe->info->caps & FE_CAN_CLEAN_SETUP)) { + if (fe->lost_sync_count < 10) + continue; + } + dvb_frontend_recover (fe); + delay = HZ/5; + } if (jiffies - fe->lost_sync_jiffies > TIMEOUT) { s |= FE_TIMEDOUT; if ((fe->status & FE_TIMEDOUT) == 0) @@ -528,7 +501,9 @@ dvb_frontend_add_event (fe, s); }; - dvb_frontend_internal_ioctl (&fe->frontend, FE_SLEEP, NULL); + if (dvb_shutdown_timeout) + dvb_frontend_internal_ioctl (&fe->frontend, FE_SLEEP, NULL); + up (&fe->sem); fe->thread = NULL; return 0; @@ -536,30 +511,36 @@ static -void dvb_frontend_start (struct dvb_frontend_data *fe) +void dvb_frontend_stop (struct dvb_frontend_data *fe) { dprintk ("%s\n", __FUNCTION__); - if (!fe->exit && !fe->thread) { - if (down_interruptible (&fe->sem)) - return; - kernel_thread (dvb_frontend_thread, fe, 0); - } + while (fe->thread) { + fe->exit = 1; + wake_up_interruptible (&fe->wait_queue); + current->state = TASK_INTERRUPTIBLE; + schedule_timeout (5); + if (signal_pending(current)) + break; + }; } static -void dvb_frontend_stop (struct dvb_frontend_data *fe) +void dvb_frontend_start (struct dvb_frontend_data *fe) { dprintk ("%s\n", __FUNCTION__); - fe->exit = 1; - wake_up_interruptible (&fe->wait_queue); + if (fe->thread) + dvb_frontend_stop (fe); - while (fe->thread) { - current->state = TASK_INTERRUPTIBLE; - schedule_timeout (5); - }; + if (down_interruptible (&fe->sem)) + return; + + fe->exit = 0; + fe->thread = (void*) ~0; + + kernel_thread (dvb_frontend_thread, fe, 0); } @@ -615,9 +596,6 @@ dprintk ("%s\n", __FUNCTION__); - if (fe->events.eventw != fe->events.eventr) - return (POLLIN | POLLRDNORM | POLLPRI); - poll_wait (file, &fe->events.wait_queue, wait); if (fe->events.eventw != fe->events.eventr) @@ -639,10 +617,12 @@ if ((ret = dvb_generic_open (inode, file)) < 0) return ret; - dvb_frontend_start (fe); + if ((file->f_flags & O_ACCMODE) != O_RDONLY) { + dvb_frontend_start (fe); - /* empty event queue */ - fe->events.eventr = fe->events.eventw; + /* empty event queue */ + fe->events.eventr = fe->events.eventw; + } return ret; } @@ -656,7 +636,8 @@ dprintk ("%s\n", __FUNCTION__); - fe->release_jiffies = jiffies; + if ((file->f_flags & O_ACCMODE) != O_RDONLY) + fe->release_jiffies = jiffies; return dvb_generic_release (inode, file); } @@ -673,7 +654,6 @@ { struct dvb_frontend_ioctl_data *ioctl; struct list_head *entry; - int frontend_count = 0; dprintk ("%s\n", __FUNCTION__); @@ -706,14 +686,12 @@ fe->frontend.before_ioctl = before_ioctl; fe->frontend.after_ioctl = after_ioctl; fe->frontend.before_after_data = before_after_data; - dvb_frontend_start (fe); - frontend_count++; } } up (&frontend_mutex); - return frontend_count; + return 0; } @@ -724,12 +702,11 @@ int (*after_ioctl) (struct dvb_frontend *frontend, unsigned int cmd, void *arg)) { - struct list_head *entry; + struct list_head *entry, *n; dprintk ("%s\n", __FUNCTION__); - if (down_interruptible (&frontend_mutex)) - return; + down (&frontend_mutex); list_for_each (entry, &frontend_list) { struct dvb_frontend_data *fe; @@ -746,6 +723,22 @@ } } + list_for_each_safe (entry, n, &frontend_ioctl_list) { + struct dvb_frontend_ioctl_data *ioctl; + + ioctl = list_entry (entry, struct dvb_frontend_ioctl_data, list_head); + + if (ioctl->adapter == adapter && + ioctl->before_ioctl == before_ioctl && + ioctl->after_ioctl == after_ioctl) + { + list_del (&ioctl->list_head); + kfree (ioctl); + + break; + } + } + up (&frontend_mutex); } @@ -755,41 +748,43 @@ void (*callback) (fe_status_t s, void *data), void *data) { - struct list_head *entry; + struct dvb_frontend_notifier_data *notifier; + struct list_head *entry; dprintk ("%s\n", __FUNCTION__); if (down_interruptible (&frontend_mutex)) return -ERESTARTSYS; - list_for_each (entry, &frontend_list) { - struct dvb_frontend_data *fe; + notifier = kmalloc (sizeof(struct dvb_frontend_notifier_data), GFP_KERNEL); - fe = list_entry (entry, struct dvb_frontend_data, list_head); + if (!notifier) { + up (&frontend_mutex); + return -ENOMEM; + } - if (fe->frontend.i2c->adapter == adapter) { - struct dvb_fe_notifier_callbacks *e; + notifier->adapter = adapter; + notifier->callback = callback; + notifier->data = data; - e = kmalloc (sizeof(struct dvb_fe_notifier_callbacks), - GFP_KERNEL); + list_add_tail (¬ifier->list_head, &frontend_notifier_list); - if (!e) { - up (&frontend_mutex); - return -ENOMEM; - } + list_for_each (entry, &frontend_list) { + struct dvb_frontend_data *fe; - e->callback = callback; - e->data = data; - list_add_tail (&e->list_head, &fe->notifier_callbacks); + fe = list_entry (entry, struct dvb_frontend_data, list_head); - up (&frontend_mutex); - return 0; + if (fe->frontend.i2c->adapter == adapter && + fe->frontend.notifier_callback == NULL) + { + fe->frontend.notifier_callback = callback; + fe->frontend.notifier_data = data; } } up (&frontend_mutex); - return -ENODEV; + return 0; } @@ -797,30 +792,37 @@ dvb_remove_frontend_notifier (struct dvb_adapter *adapter, void (*callback) (fe_status_t s, void *data)) { - struct list_head *entry; + struct list_head *entry, *n; dprintk ("%s\n", __FUNCTION__); - if (down_interruptible (&frontend_mutex)) - return; + down (&frontend_mutex); list_for_each (entry, &frontend_list) { struct dvb_frontend_data *fe; fe = list_entry (entry, struct dvb_frontend_data, list_head); - if (fe->frontend.i2c->adapter == adapter) { - struct list_head *e0, *n0; + if (fe->frontend.i2c->adapter == adapter && + fe->frontend.notifier_callback == callback) + { + fe->frontend.notifier_callback = NULL; - list_for_each_safe (e0, n0, &fe->notifier_callbacks) { - struct dvb_fe_notifier_callbacks *e; + } + } - e = list_entry (e0, - struct dvb_fe_notifier_callbacks, - list_head); - list_del (&e->list_head); - kfree (e); - } + list_for_each_safe (entry, n, &frontend_notifier_list) { + struct dvb_frontend_notifier_data *notifier; + + notifier = list_entry (entry, struct dvb_frontend_notifier_data, list_head); + + if (notifier->adapter == adapter && + notifier->callback == callback) + { + list_del (¬ifier->list_head); + kfree (notifier); + + break; } } @@ -849,7 +851,7 @@ struct list_head *entry; struct dvb_frontend_data *fe; static const struct dvb_device dvbdev_template = { - .users = 1, + .users = ~0, .writers = 1, .fops = &dvb_frontend_fops, .kernel_ioctl = dvb_frontend_ioctl @@ -873,7 +875,6 @@ init_MUTEX (&fe->events.sem); fe->events.eventw = fe->events.eventr = 0; fe->events.overflow = 0; - INIT_LIST_HEAD (&fe->notifier_callbacks); fe->frontend.ioctl = ioctl; fe->frontend.i2c = i2c; @@ -891,13 +892,30 @@ fe->frontend.before_ioctl = ioctl->before_ioctl; fe->frontend.after_ioctl = ioctl->after_ioctl; fe->frontend.before_after_data = ioctl->before_after_data; - dvb_frontend_start (fe); + break; + } + } + + list_for_each (entry, &frontend_notifier_list) { + struct dvb_frontend_notifier_data *notifier; + + notifier = list_entry (entry, + struct dvb_frontend_notifier_data, + list_head); + + if (notifier->adapter == i2c->adapter) { + fe->frontend.notifier_callback = notifier->callback; + fe->frontend.notifier_data = notifier->data; break; } } list_add_tail (&fe->list_head, &frontend_list); + printk ("DVB: registering frontend %i:%i (%s)...\n", + fe->frontend.i2c->adapter->num, fe->frontend.i2c->id, + fe->info->name); + dvb_register_device (i2c->adapter, &fe->dvbdev, &dvbdev_template, fe, DVB_DEVICE_FRONTEND); @@ -915,8 +933,7 @@ dprintk ("%s\n", __FUNCTION__); - if (down_interruptible (&frontend_mutex)) - return -ERESTARTSYS; + down (&frontend_mutex); list_for_each_safe (entry, n, &frontend_list) { struct dvb_frontend_data *fe; @@ -925,10 +942,8 @@ if (fe->frontend.ioctl == ioctl && fe->frontend.i2c == i2c) { dvb_unregister_device (fe->dvbdev); - list_del (entry); up (&frontend_mutex); - dvb_frontend_stop (fe); kfree (fe); return 0; diff -Nru a/drivers/media/dvb/dvb-core/dvb_frontend.h b/drivers/media/dvb/dvb-core/dvb_frontend.h --- a/drivers/media/dvb/dvb-core/dvb_frontend.h Sat Apr 12 14:44:10 2003 +++ b/drivers/media/dvb/dvb-core/dvb_frontend.h Sat Apr 12 14:44:10 2003 @@ -52,8 +52,10 @@ int (*before_ioctl) (struct dvb_frontend *frontend, unsigned int cmd, void *arg); int (*ioctl) (struct dvb_frontend *frontend, unsigned int cmd, void *arg); int (*after_ioctl) (struct dvb_frontend *frontend, unsigned int cmd, void *arg); + void (*notifier_callback) (fe_status_t s, void *data); struct dvb_i2c_bus *i2c; void *before_after_data; /* can be used by hardware module... */ + void *notifier_data; /* can be used by hardware module... */ void *data; /* can be used by hardware module... */ }; diff -Nru a/drivers/media/dvb/dvb-core/dvb_i2c.c b/drivers/media/dvb/dvb-core/dvb_i2c.c --- a/drivers/media/dvb/dvb-core/dvb_i2c.c Sat Apr 12 14:44:09 2003 +++ b/drivers/media/dvb/dvb-core/dvb_i2c.c Sat Apr 12 14:44:09 2003 @@ -22,10 +22,13 @@ #include #include #include +#include -#include "compat.h" -#include "dvb_i2c.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #include "compat.h" +#endif +#include "dvb_i2c.h" struct dvb_i2c_device { struct list_head list_head; @@ -34,13 +37,11 @@ void (*detach) (struct dvb_i2c_bus *i2c); }; - LIST_HEAD(dvb_i2c_buslist); LIST_HEAD(dvb_i2c_devicelist); DECLARE_MUTEX(dvb_i2c_mutex); - static int register_i2c_client (struct dvb_i2c_bus *i2c, struct dvb_i2c_device *dev) { @@ -63,11 +64,16 @@ static void try_attach_device (struct dvb_i2c_bus *i2c, struct dvb_i2c_device *dev) { - if (try_module_get(dev->owner)) { - if (dev->attach(i2c) == 0) - register_i2c_client(i2c, dev); - else - module_put(dev->owner); + if (dev->owner) { + if (!try_module_get(dev->owner)) + return; + } + + if (dev->attach (i2c) == 0) { + register_i2c_client (i2c, dev); + } else { + if (dev->owner) + module_put (dev->owner); } } @@ -75,8 +81,10 @@ static void detach_device (struct dvb_i2c_bus *i2c, struct dvb_i2c_device *dev) { - dev->detach(i2c); - module_put(dev->owner); + dev->detach (i2c); + + if (dev->owner) + module_put (dev->owner); } @@ -84,15 +92,17 @@ void unregister_i2c_client_from_bus (struct dvb_i2c_device *dev, struct dvb_i2c_bus *i2c) { - struct list_head *entry; + struct list_head *entry, *n; - list_for_each (entry, &i2c->client_list) { + list_for_each_safe (entry, n, &i2c->client_list) { struct dvb_i2c_device *client; client = list_entry (entry, struct dvb_i2c_device, list_head); - if (client->detach == dev->detach) + if (client->detach == dev->detach) { + list_del (entry); detach_device (i2c, dev); + } } } @@ -100,9 +110,9 @@ static void unregister_i2c_client_from_all_busses (struct dvb_i2c_device *dev) { - struct list_head *entry; + struct list_head *entry, *n; - list_for_each (entry, &dvb_i2c_buslist) { + list_for_each_safe (entry, n, &dvb_i2c_buslist) { struct dvb_i2c_bus *i2c; i2c = list_entry (entry, struct dvb_i2c_bus, list_head); @@ -118,18 +128,15 @@ struct list_head *entry, *n; list_for_each_safe (entry, n, &(i2c->client_list)) { - struct dvb_i2c_device *client; - - client = list_entry (entry, struct dvb_i2c_device, list_head); + struct dvb_i2c_device *dev; - detach_device (i2c, client); + dev = list_entry (entry, struct dvb_i2c_device, list_head); - list_del (entry); + unregister_i2c_client_from_bus (dev, i2c); } } - static void probe_device_on_all_busses (struct dvb_i2c_device *dev) { @@ -160,15 +167,38 @@ } +static +struct dvb_i2c_bus* dvb_find_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, + const struct i2c_msg msgs[], + int num), + struct dvb_adapter *adapter, + int id) +{ + struct list_head *entry; + + list_for_each (entry, &dvb_i2c_buslist) { + struct dvb_i2c_bus *i2c; + + i2c = list_entry (entry, struct dvb_i2c_bus, list_head); + + if (i2c->xfer == xfer && i2c->adapter == adapter && i2c->id == id) + return i2c; + } + + return NULL; +} + + struct dvb_i2c_bus* dvb_register_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, - struct i2c_msg msgs[], int num), - void *data, - struct dvb_adapter *adapter, - int id) + const struct i2c_msg *msgs, int num), + void *data, struct dvb_adapter *adapter, int id) { struct dvb_i2c_bus *i2c; + if (down_interruptible (&dvb_i2c_mutex)) + return NULL; + if (!(i2c = kmalloc (sizeof (struct dvb_i2c_bus), GFP_KERNEL))) return NULL; @@ -184,54 +214,27 @@ list_add_tail (&i2c->list_head, &dvb_i2c_buslist); - return i2c; -} - - -struct dvb_i2c_bus* -dvb_find_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, - struct i2c_msg msgs[], int num), - struct dvb_adapter *adapter, - int id) -{ - struct list_head *entry; - - if (down_interruptible (&dvb_i2c_mutex)) - return NULL; - - list_for_each (entry, &dvb_i2c_buslist) { - struct dvb_i2c_bus *i2c; - - i2c = list_entry (entry, struct dvb_i2c_bus, list_head); - - if (i2c->xfer == xfer && - i2c->adapter == adapter && - i2c->id == id) - { - up (&dvb_i2c_mutex); - return i2c; - } - } - up (&dvb_i2c_mutex); - return NULL; + return i2c; } - void dvb_unregister_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, - struct i2c_msg msgs[], int num), - struct dvb_adapter *adapter, - int id) + const struct i2c_msg msgs[], int num), + struct dvb_adapter *adapter, int id) { - struct dvb_i2c_bus *i2c = dvb_find_i2c_bus (xfer, adapter, id); + struct dvb_i2c_bus *i2c; + + down (&dvb_i2c_mutex); - if (i2c) { + if ((i2c = dvb_find_i2c_bus (xfer, adapter, id))) { unregister_all_clients_from_bus (i2c); list_del (&i2c->list_head); kfree (i2c); } + + up (&dvb_i2c_mutex); } @@ -267,8 +270,7 @@ { struct list_head *entry, *n; - if (down_interruptible (&dvb_i2c_mutex)) - return -ERESTARTSYS; + down (&dvb_i2c_mutex); list_for_each_safe (entry, n, &dvb_i2c_devicelist) { struct dvb_i2c_device *dev; diff -Nru a/drivers/media/dvb/dvb-core/dvb_i2c.h b/drivers/media/dvb/dvb-core/dvb_i2c.h --- a/drivers/media/dvb/dvb-core/dvb_i2c.h Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvb_i2c.h Sat Apr 12 14:44:06 2003 @@ -30,7 +30,9 @@ struct dvb_i2c_bus { struct list_head list_head; - int (*xfer) (struct dvb_i2c_bus *i2c, struct i2c_msg msgs[], int num); + int (*xfer) (struct dvb_i2c_bus *i2c, + const struct i2c_msg msgs[], + int num); void *data; struct dvb_adapter *adapter; int id; @@ -38,17 +40,16 @@ }; -extern -struct dvb_i2c_bus* dvb_register_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, - struct i2c_msg msgs[], - int num), - void *data, - struct dvb_adapter *adapter, - int id); +extern struct dvb_i2c_bus* +dvb_register_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, + const struct i2c_msg *msgs, int num), + void *data, + struct dvb_adapter *adapter, + int id); extern void dvb_unregister_i2c_bus (int (*xfer) (struct dvb_i2c_bus *i2c, - struct i2c_msg msgs[], int num), + const struct i2c_msg msgs[], int num), struct dvb_adapter *adapter, int id); diff -Nru a/drivers/media/dvb/dvb-core/dvb_ksyms.c b/drivers/media/dvb/dvb-core/dvb_ksyms.c --- a/drivers/media/dvb/dvb-core/dvb_ksyms.c Sat Apr 12 14:44:10 2003 +++ b/drivers/media/dvb/dvb-core/dvb_ksyms.c Sat Apr 12 14:44:10 2003 @@ -8,6 +8,69 @@ #include "dvb_demux.h" #include "dvb_net.h" +/* if the miracle happens and "generic_usercopy()" is included into + the kernel, then this can vanish. please don't make the mistake and + define this as video_usercopy(). this will introduce a dependecy + to the v4l "videodev.o" module, which is unnecessary for some + cards (ie. the budget dvb-cards don't need the v4l module...) */ +int dvb_usercopy(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg, + int (*func)(struct inode *inode, struct file *file, + unsigned int cmd, void *arg)) +{ + char sbuf[128]; + void *mbuf = NULL; + void *parg = NULL; + int err = -EINVAL; + + /* Copy arguments into temp kernel buffer */ + switch (_IOC_DIR(cmd)) { + case _IOC_NONE: + parg = (void *)arg; + break; + case _IOC_READ: /* some v4l ioctls are marked wrong ... */ + case _IOC_WRITE: + case (_IOC_WRITE | _IOC_READ): + if (_IOC_SIZE(cmd) <= sizeof(sbuf)) { + parg = sbuf; + } else { + /* too big to allocate from stack */ + mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL); + if (NULL == mbuf) + return -ENOMEM; + parg = mbuf; + } + + err = -EFAULT; + if (copy_from_user(parg, (void *)arg, _IOC_SIZE(cmd))) + goto out; + break; + } + + /* call driver */ + if ((err = func(inode, file, cmd, parg)) == -ENOIOCTLCMD) + err = -EINVAL; + + if (err < 0) + goto out; + + /* Copy results into user buffer */ + switch (_IOC_DIR(cmd)) + { + case _IOC_READ: + case (_IOC_WRITE | _IOC_READ): + if (copy_to_user((void *)arg, parg, _IOC_SIZE(cmd))) + err = -EFAULT; + break; + } + +out: + if (mbuf) + kfree(mbuf); + + return err; +} +EXPORT_SYMBOL(dvb_usercopy); EXPORT_SYMBOL(dvb_dmxdev_init); EXPORT_SYMBOL(dvb_dmxdev_release); @@ -15,6 +78,7 @@ EXPORT_SYMBOL(dvb_dmx_release); EXPORT_SYMBOL(dvb_dmx_swfilter_packet); EXPORT_SYMBOL(dvb_dmx_swfilter_packets); +EXPORT_SYMBOL(dvb_dmx_swfilter); EXPORT_SYMBOL(dvb_register_frontend); EXPORT_SYMBOL(dvb_unregister_frontend); @@ -39,11 +103,7 @@ EXPORT_SYMBOL(dvb_generic_open); EXPORT_SYMBOL(dvb_generic_release); -EXPORT_SYMBOL(dvb_filter_ipack_init); -EXPORT_SYMBOL(dvb_filter_ipack_reset); -EXPORT_SYMBOL(dvb_filter_ipack_free); -EXPORT_SYMBOL(dvb_filter_ipack_flush); -EXPORT_SYMBOL(dvb_filter_instant_repack); EXPORT_SYMBOL(dvb_filter_pes2ts_init); EXPORT_SYMBOL(dvb_filter_pes2ts); +EXPORT_SYMBOL(dvb_filter_get_ac3info); diff -Nru a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c --- a/drivers/media/dvb/dvb-core/dvb_net.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvb_net.c Sat Apr 12 14:44:06 2003 @@ -3,29 +3,52 @@ * * Copyright (C) 2001 Convergence integrated media GmbH * Ralph Metzler + * Copyright (C) 2002 Ralph Metzler * * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 + * 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 Lesser General Public License + * 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. - * + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * */ -#include - #include -#include "demux.h" + +#include +#include "dvb_demux.h" #include "dvb_net.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #include "compat.h" +#endif + +#define DVB_NET_MULTICAST_MAX 10 + +struct dvb_net_priv { + struct net_device_stats stats; + char name[6]; + u16 pid; + struct dmx_demux_s *demux; + dmx_section_feed_t *secfeed; + dmx_section_filter_t *secfilter; + int multi_num; + dmx_section_filter_t *multi_secfilter[DVB_NET_MULTICAST_MAX]; + unsigned char multi_macs[DVB_NET_MULTICAST_MAX][6]; + int mode; +}; + /* * Determine the packet's protocol ID. The rule here is that we * assume 802.3 if the type field is short enough to be a length. @@ -73,7 +96,7 @@ } static void -dvb_net_sec(struct net_device *dev, u8 *pkt, int pkt_len) +dvb_net_sec(struct net_device *dev, const u8 *pkt, int pkt_len) { u8 *eth; struct sk_buff *skb; @@ -86,7 +109,7 @@ if (skb == NULL) { printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name); - ((dvb_net_priv_t *)dev->priv)->stats.rx_dropped++; + ((struct dvb_net_priv *)dev->priv)->stats.rx_dropped++; return; } eth=(u8 *) skb_put(skb, pkt_len+2); @@ -104,15 +127,14 @@ skb->protocol=my_eth_type_trans(skb,dev); skb->dev=dev; - ((dvb_net_priv_t *)dev->priv)->stats.rx_packets++; - ((dvb_net_priv_t *)dev->priv)->stats.rx_bytes+=skb->len; - //sti(); + ((struct dvb_net_priv *)dev->priv)->stats.rx_packets++; + ((struct dvb_net_priv *)dev->priv)->stats.rx_bytes+=skb->len; netif_rx(skb); } static int -dvb_net_callback(u8 *buffer1, size_t buffer1_len, - u8 *buffer2, size_t buffer2_len, +dvb_net_callback(const u8 *buffer1, size_t buffer1_len, + const u8 *buffer2, size_t buffer2_len, dmx_section_filter_t *filter, dmx_success_t success) { @@ -130,18 +152,21 @@ return 0; } -#define MASK 0x00; +static u8 mask_normal[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +static u8 mask_allmulti[6]={0xff, 0xff, 0xff, 0x00, 0x00, 0x00}; +static u8 mac_allmulti[6]={0x01, 0x00, 0x5e, 0x00, 0x00, 0x00}; +static u8 mask_promisc[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; static int dvb_net_filter_set(struct net_device *dev, dmx_section_filter_t **secfilter, - unsigned char *mac) + u8 *mac, u8 *mac_mask) { - dvb_net_priv_t *priv=(dvb_net_priv_t *)dev->priv; + struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv; int ret; *secfilter=0; - ret=priv->secfeed->allocate_filter(priv->secfeed, secfilter); + ret = priv->secfeed->allocate_filter(priv->secfeed, secfilter); if (ret<0) { printk("%s: could not get filter\n", dev->name); return ret; @@ -149,25 +174,26 @@ (*secfilter)->priv=(void *) dev; - memset((*secfilter)->filter_value, 0, DMX_MAX_FILTER_SIZE); - memset((*secfilter)->filter_mask , 0, DMX_MAX_FILTER_SIZE); + memset((*secfilter)->filter_value, 0x00, DMX_MAX_FILTER_SIZE); + memset((*secfilter)->filter_mask, 0x00, DMX_MAX_FILTER_SIZE); + memset((*secfilter)->filter_mode, 0xff, DMX_MAX_FILTER_SIZE); (*secfilter)->filter_value[0]=0x3e; - (*secfilter)->filter_mask[0]=MASK; + (*secfilter)->filter_mask[0]=0xff; (*secfilter)->filter_value[3]=mac[5]; - (*secfilter)->filter_mask[3]=MASK; + (*secfilter)->filter_mask[3]=mac_mask[5]; (*secfilter)->filter_value[4]=mac[4]; - (*secfilter)->filter_mask[4]=MASK; + (*secfilter)->filter_mask[4]=mac_mask[4]; (*secfilter)->filter_value[8]=mac[3]; - (*secfilter)->filter_mask[8]=MASK; + (*secfilter)->filter_mask[8]=mac_mask[3]; (*secfilter)->filter_value[9]=mac[2]; - (*secfilter)->filter_mask[9]=MASK; + (*secfilter)->filter_mask[9]=mac_mask[2]; (*secfilter)->filter_value[10]=mac[1]; - (*secfilter)->filter_mask[10]=MASK; + (*secfilter)->filter_mask[10]=mac_mask[1]; (*secfilter)->filter_value[11]=mac[0]; - (*secfilter)->filter_mask[11]=MASK; + (*secfilter)->filter_mask[11]=mac_mask[0]; printk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n", dev->name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); @@ -178,9 +204,9 @@ dvb_net_feed_start(struct net_device *dev) { int ret, i; - dvb_net_priv_t *priv=(dvb_net_priv_t *)dev->priv; - dmx_demux_t *demux=priv->demux; - unsigned char *mac=(unsigned char *) dev->dev_addr; + struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv; + dmx_demux_t *demux = priv->demux; + unsigned char *mac = (unsigned char *) dev->dev_addr; priv->secfeed=0; priv->secfilter=0; @@ -200,28 +226,41 @@ priv->secfeed=0; return ret; } - MOD_INC_USE_COUNT; + /* fixme: is this correct? */ + try_module_get(THIS_MODULE); - dvb_net_filter_set(dev, &priv->secfilter, mac); - for (i=0; imulti_num; i++) - dvb_net_filter_set(dev, &priv->secfilter, - priv->multi_macs[i]); + if (priv->mode<3) + dvb_net_filter_set(dev, &priv->secfilter, mac, mask_normal); + switch (priv->mode) { + case 1: + for (i=0; imulti_num; i++) + dvb_net_filter_set(dev, &priv->multi_secfilter[i], + priv->multi_macs[i], mask_normal); + break; + case 2: + priv->multi_num=1; + dvb_net_filter_set(dev, &priv->multi_secfilter[0], mac_allmulti, mask_allmulti); + break; + case 3: + priv->multi_num=0; + dvb_net_filter_set(dev, &priv->secfilter, mac, mask_promisc); + break; + } + priv->secfeed->start_filtering(priv->secfeed); - printk("%s: feed_started\n", dev->name); return 0; } static void dvb_net_feed_stop(struct net_device *dev) { - dvb_net_priv_t *priv=(dvb_net_priv_t *)dev->priv; + struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv; int i; if (priv->secfeed) { if (priv->secfeed->is_filtering) priv->secfeed->stop_filtering(priv->secfeed); - printk("%s: feed_stopped\n", dev->name); if (priv->secfilter) priv->secfeed-> release_filter(priv->secfeed, @@ -238,62 +277,70 @@ priv->demux-> release_section_feed(priv->demux, priv->secfeed); priv->secfeed=0; - MOD_DEC_USE_COUNT; + /* fixme: is this correct? */ + module_put(THIS_MODULE); } else printk("%s: no feed to stop\n", dev->name); } static int -dvb_set_mc_filter(struct net_device *dev, struct dev_mc_list *mc) +dvb_add_mc_filter(struct net_device *dev, struct dev_mc_list *mc) { - dvb_net_priv_t *priv=(dvb_net_priv_t *)dev->priv; + struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv; + int ret; - if (priv->multi_num==DVB_NET_MULTICAST_MAX) + if (priv->multi_num >= DVB_NET_MULTICAST_MAX) return -ENOMEM; - printk("%s: set_mc_filter %d: %02x %02x %02x %02x %02x %02x\n", - dev->name, - priv->multi_num, - mc->dmi_addr[0], - mc->dmi_addr[1], - mc->dmi_addr[2], - mc->dmi_addr[3], - mc->dmi_addr[4], - mc->dmi_addr[5]); + ret = memcmp(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6); memcpy(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6); - + priv->multi_num++; - return 0; + + return ret; } static void dvb_net_set_multi(struct net_device *dev) { - dvb_net_priv_t *priv=(dvb_net_priv_t *)dev->priv; - - printk("%s: set_multi()\n", dev->name); - dvb_net_feed_stop(dev); + struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv; + struct dev_mc_list *mc; + int mci; + int update = 0; + + if(dev->flags & IFF_PROMISC) { +// printk("%s: promiscuous mode\n", dev->name); + if(priv->mode != 3) + update = 1; + priv->mode = 3; + } else if(dev->flags & IFF_ALLMULTI) { +// printk("%s: allmulti mode\n", dev->name); + if(priv->mode != 2) + update = 1; + priv->mode = 2; + } else if(dev->mc_count > 0) { +// printk("%s: set_mc_list, %d entries\n", +// dev->name, dev->mc_count); + if(priv->mode != 1) + update = 1; + priv->mode = 1; + priv->multi_num = 0; + for (mci = 0, mc=dev->mc_list; + mci < dev->mc_count; + mc=mc->next, mci++) + if(dvb_add_mc_filter(dev, mc) != 0) + update = 1; + } else { + if(priv->mode != 0) + update = 1; + priv->mode = 0; + } - if (dev->flags&IFF_PROMISC) { - /* Enable promiscuous mode */ - printk("%s: promiscuous mode\n", dev->name); - } else if((dev->flags&IFF_ALLMULTI)) { - /* Disable promiscuous mode, use normal mode. */ - printk("%s: normal mode\n", dev->name); - } else if(dev->mc_count) { - int mci; - struct dev_mc_list *mc; - - printk("%s: set_mc_list, %d entries\n", - dev->name, dev->mc_count); - priv->multi_num=0; - for (mci=0, mc=dev->mc_list; - mcimc_count; - mc=mc->next, mci++) { - dvb_set_mc_filter(dev, mc); - } + if(netif_running(dev) != 0 && update > 0) + { + dvb_net_feed_stop(dev); + dvb_net_feed_start(dev); } - dvb_net_feed_start(dev); } static int @@ -308,13 +355,15 @@ dvb_net_set_mac(struct net_device *dev, void *p) { struct sockaddr *addr=p; + int update; + update = memcmp(dev->dev_addr, addr->sa_data, dev->addr_len); memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); - if (netif_running(dev)) { - dvb_net_feed_stop(dev); + if (netif_running(dev) != 0 && update > 0) { + dvb_net_feed_stop(dev); dvb_net_feed_start(dev); } - return 0; + return 0; } @@ -335,15 +384,13 @@ static struct net_device_stats * dvb_net_get_stats(struct net_device *dev) { - return &((dvb_net_priv_t *)dev->priv)->stats; + return &((struct dvb_net_priv*) dev->priv)->stats; } static int dvb_net_init_dev(struct net_device *dev) { - printk("dvb_net: dvb_net_init_dev()\n"); - ether_setup(dev); dev->open = dvb_net_open; @@ -354,6 +401,7 @@ dev->set_config = dvb_net_set_config; dev->set_mac_address = dvb_net_set_mac; dev->mtu = 4096; + dev->mc_count = 0; dev->flags |= IFF_NOARP; dev->hard_header_cache = NULL; @@ -364,7 +412,7 @@ } static int -get_if(dvb_net_t *dvbnet) +get_if(struct dvb_net *dvbnet) { int i; @@ -379,10 +427,11 @@ int -dvb_net_add_if(dvb_net_t *dvbnet, u16 pid) +dvb_net_add_if(struct dvb_net *dvbnet, u16 pid) { struct net_device *net; dmx_demux_t *demux; + struct dvb_net_priv *priv; int result; int if_num; @@ -402,25 +451,29 @@ net->name[5]=if_num+0x30; net->next = NULL; net->init = dvb_net_init_dev; - net->priv = kmalloc(sizeof(dvb_net_priv_t), GFP_KERNEL); + net->priv = kmalloc(sizeof(struct dvb_net_priv), GFP_KERNEL); if (net->priv == NULL) return -ENOMEM; - memset(net->priv, 0, sizeof(dvb_net_priv_t)); - ((dvb_net_priv_t *)net->priv)->demux=demux; - ((dvb_net_priv_t *)net->priv)->pid=pid; + priv = net->priv; + memset(priv, 0, sizeof(struct dvb_net_priv)); + priv->demux = demux; + priv->pid = pid; + priv->mode = 0; - net->base_addr=pid; + net->base_addr = pid; if ((result = register_netdev(net)) < 0) { return result; } - MOD_INC_USE_COUNT; + /* fixme: is this correct? */ + try_module_get(THIS_MODULE); + return if_num; } int -dvb_net_remove_if(dvb_net_t *dvbnet, int num) +dvb_net_remove_if(struct dvb_net *dvbnet, int num) { if (!dvbnet->state[num]) return -EINVAL; @@ -428,15 +481,17 @@ kfree(dvbnet->device[num].priv); unregister_netdev(&dvbnet->device[num]); dvbnet->state[num]=0; - MOD_DEC_USE_COUNT; + /* fixme: is this correct? */ + module_put(THIS_MODULE); + return 0; } -int dvb_net_ioctl(struct inode *inode, struct file *file, +int dvb_net_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *parg) { - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - dvb_net_t *dvbnet=(dvb_net_t *) dvbdev->priv; + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_net *dvbnet = (struct dvb_net *) dvbdev->priv; if (((file->f_flags&O_ACCMODE)==O_RDONLY)) return -EPERM; @@ -453,6 +508,21 @@ dvbnetif->if_num=result; break; } + case NET_GET_IF: + { + struct net_device *netdev; + struct dvb_net_priv *priv_data; + struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg; + + if (dvbnetif->if_num >= dvbnet->dev_num || + !dvbnet->state[dvbnetif->if_num]) + return -EFAULT; + + netdev=(struct net_device*)&dvbnet->device[dvbnetif->if_num]; + priv_data=(struct dvb_net_priv*)netdev->priv; + dvbnetif->pid=priv_data->pid; + break; + } case NET_REMOVE_IF: return dvb_net_remove_if(dvbnet, (int) parg); default: @@ -461,23 +531,32 @@ return 0; } +static int +dvb_net_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg) +{ + return dvb_usercopy(inode, file, cmd, arg, dvb_net_do_ioctl); +} + static struct file_operations dvb_net_fops = { - .owner = THIS_MODULE, - .ioctl = dvb_generic_ioctl, - .open = dvb_generic_open, - .release = dvb_generic_release, + .owner = THIS_MODULE, + .read = 0, + .write = 0, + .ioctl = dvb_net_ioctl, + .open = dvb_generic_open, + .release = dvb_generic_release, + .poll = 0, }; static struct dvb_device dvbdev_net = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_net_fops, - .kernel_ioctl = dvb_net_ioctl, + .priv = 0, + .users = 1, + .writers = 1, + .fops = &dvb_net_fops, }; void -dvb_net_release(dvb_net_t *dvbnet) +dvb_net_release(struct dvb_net *dvbnet) { int i; @@ -490,15 +569,19 @@ } int -dvb_net_init(struct dvb_adapter *adap, dvb_net_t *dvbnet, dmx_demux_t *demux) +dvb_net_init(struct dvb_adapter *adap, struct dvb_net *dvbnet, dmx_demux_t *dmx) { int i; - dvbnet->demux=demux; - dvbnet->dev_num=DVB_NET_DEVICES_MAX; + dvbnet->demux = dmx; + dvbnet->dev_num = DVB_NET_DEVICES_MAX; + for (i=0; idev_num; i++) - dvbnet->state[i]=0; - dvb_register_device(adap, &dvbnet->dvbdev, &dvbdev_net, dvbnet, DVB_DEVICE_NET); + dvbnet->state[i] = 0; + + dvb_register_device (adap, &dvbnet->dvbdev, &dvbdev_net, + dvbnet, DVB_DEVICE_NET); + return 0; } diff -Nru a/drivers/media/dvb/dvb-core/dvb_net.h b/drivers/media/dvb/dvb-core/dvb_net.h --- a/drivers/media/dvb/dvb-core/dvb_net.h Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvb_net.h Sat Apr 12 14:44:06 2003 @@ -32,23 +32,9 @@ #include "dvbdev.h" #define DVB_NET_DEVICES_MAX 10 -#define DVB_NET_MULTICAST_MAX 10 -typedef struct dvb_net_priv_s { - struct net_device_stats stats; - char name[6]; - u16 pid; - dmx_demux_t *demux; - dmx_section_feed_t *secfeed; - dmx_section_filter_t *secfilter; - int multi_num; - dmx_section_filter_t *multi_secfilter[DVB_NET_MULTICAST_MAX]; - unsigned char multi_macs[DVB_NET_MULTICAST_MAX][6]; -} dvb_net_priv_t; - -typedef struct dvb_net_s { +typedef struct dvb_net { struct dvb_device *dvbdev; - int card_num; int dev_num; struct net_device device[DVB_NET_DEVICES_MAX]; @@ -57,7 +43,8 @@ } dvb_net_t; -void dvb_net_release(dvb_net_t *); -int dvb_net_init(struct dvb_adapter *, dvb_net_t *, dmx_demux_t *); +void dvb_net_release(struct dvb_net *); +int dvb_net_init(struct dvb_adapter *, struct dvb_net *, dmx_demux_t *); #endif + diff -Nru a/drivers/media/dvb/dvb-core/dvb_ringbuffer.c b/drivers/media/dvb/dvb-core/dvb_ringbuffer.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/dvb-core/dvb_ringbuffer.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,176 @@ +/* + * + * dvb_ringbuffer.c: ring buffer implementation for the dvb driver + * + * Copyright (C) 2003 Oliver Endriss + * + * based on code originally found in av7110.c: + * Copyright (C) 1999-2002 Ralph Metzler + * & Marcus Metzler for convergence integrated media GmbH + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + + + +#define __KERNEL_SYSCALLS__ +#include +#include +#include +#include + +#include "dvb_ringbuffer.h" + + + +void dvb_ringbuffer_init(dvb_ringbuffer_t *rbuf, void *data, size_t len) +{ + rbuf->pread=rbuf->pwrite=0; + rbuf->data=data; + rbuf->size=len; + + init_waitqueue_head(&rbuf->queue); + + spin_lock_init(&(rbuf->lock)); + rbuf->lock=SPIN_LOCK_UNLOCKED; +} + + + +int dvb_ringbuffer_empty(dvb_ringbuffer_t *rbuf) +{ + return (rbuf->pread==rbuf->pwrite); +} + + + +ssize_t dvb_ringbuffer_free(dvb_ringbuffer_t *rbuf) +{ + ssize_t free; + + free = rbuf->pread - rbuf->pwrite; + if (free <= 0) + free += rbuf->size; + return free-1; +} + + + +ssize_t dvb_ringbuffer_avail(dvb_ringbuffer_t *rbuf) +{ + ssize_t avail; + + avail = rbuf->pwrite - rbuf->pread; + if (avail < 0) + avail += rbuf->size; + return avail; +} + + + +void dvb_ringbuffer_flush(dvb_ringbuffer_t *rbuf) +{ + rbuf->pread = rbuf->pwrite; +} + + + +void dvb_ringbuffer_flush_spinlock_wakeup(dvb_ringbuffer_t *rbuf) +{ + unsigned long flags; + + spin_lock_irqsave(&rbuf->lock, flags); + dvb_ringbuffer_flush(rbuf); + spin_unlock_irqrestore(&rbuf->lock, flags); + + wake_up(&rbuf->queue); +} + + + +ssize_t dvb_ringbuffer_read(dvb_ringbuffer_t *rbuf, u8 *buf, size_t len, int usermem) +{ + size_t todo = len; + size_t split; + + split = (rbuf->pread + len > rbuf->size) ? rbuf->size - rbuf->pread : 0; + if (split > 0) { + if (!usermem) + memcpy(buf, rbuf->data+rbuf->pread, split); + else + if (copy_to_user(buf, rbuf->data+rbuf->pread, split)) + return -EFAULT; + buf += split; + todo -= split; + rbuf->pread = 0; + } + if (!usermem) + memcpy(buf, rbuf->data+rbuf->pread, todo); + else + if (copy_to_user(buf, rbuf->data+rbuf->pread, todo)) + return -EFAULT; + + rbuf->pread = (rbuf->pread + len) % rbuf->size; + + return len; +} + + + +ssize_t dvb_ringbuffer_write(dvb_ringbuffer_t *rbuf, const u8 *buf, + size_t len, int usermem) +{ + size_t todo = len; + size_t split; + + split = (rbuf->pwrite + len > rbuf->size) ? rbuf->size - rbuf->pwrite : 0; + + if (split > 0) { + if (!usermem) + memcpy(rbuf->data+rbuf->pwrite, buf, split); + else + if (copy_from_user(rbuf->data+rbuf->pwrite, + buf, split)) + return -EFAULT; + buf += split; + todo -= split; + rbuf->pwrite = 0; + } + if (!usermem) + memcpy(rbuf->data+rbuf->pwrite, buf, todo); + else + if (copy_from_user(rbuf->data+rbuf->pwrite, buf, todo)) + return -EFAULT; + + rbuf->pwrite = (rbuf->pwrite + len) % rbuf->size; + + return len; +} + + +EXPORT_SYMBOL_GPL(dvb_ringbuffer_init); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_empty); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_free); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_avail); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_flush); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_flush_spinlock_wakeup); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_read); +EXPORT_SYMBOL_GPL(dvb_ringbuffer_write); diff -Nru a/drivers/media/dvb/dvb-core/dvb_ringbuffer.h b/drivers/media/dvb/dvb-core/dvb_ringbuffer.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/dvb-core/dvb_ringbuffer.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,127 @@ +/* + * + * dvb_ringbuffer.h: ring buffer implementation for the dvb driver + * + * Copyright (C) 2003 Oliver Endriss + * + * based on code originally found in av7110.c: + * Copyright (C) 1999-2002 Ralph Metzler + * & Marcus Metzler for convergence integrated media GmbH + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + +#ifndef _DVB_RINGBUFFER_H_ +#define _DVB_RINGBUFFER_H_ + + +typedef struct dvb_ringbuffer { + u8 *data; + ssize_t size; + ssize_t pread; + ssize_t pwrite; + + wait_queue_head_t queue; + spinlock_t lock; +} dvb_ringbuffer_t; + + +/* +** Notes: +** ------ +** (1) For performance reasons read and write routines don't check buffer sizes +** and/or number of bytes free/available. This has to be done before these +** routines are called. For example: +** +** *** write bytes *** +** free = dvb_ringbuffer_free(rbuf); +** if (free >= buflen) +** count = dvb_ringbuffer_write(rbuf, buffer, buflen, 0); +** else +** ... +** +** *** read min. 1000, max. bytes *** +** avail = dvb_ringbuffer_avail(rbuf); +** if (avail >= 1000) +** count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize), 0); +** else +** ... +** +** (2) If there is exactly one reader and one writer, there is no need +** to lock read or write operations. +** Two or more readers must be locked against each other. +** Flushing the buffer counts as a read operation. +** Two or more writers must be locked against each other. +*/ + +/* initialize ring buffer, lock and queue */ +extern void dvb_ringbuffer_init(dvb_ringbuffer_t *rbuf, void *data, size_t len); + +/* test whether buffer is empty */ +extern int dvb_ringbuffer_empty(dvb_ringbuffer_t *rbuf); + +/* return the number of free bytes in the buffer */ +extern ssize_t dvb_ringbuffer_free(dvb_ringbuffer_t *rbuf); + +/* return the number of bytes waiting in the buffer */ +extern ssize_t dvb_ringbuffer_avail(dvb_ringbuffer_t *rbuf); + + +/* read routines & macros */ +/* ---------------------- */ +/* flush buffer */ +extern void dvb_ringbuffer_flush(dvb_ringbuffer_t *rbuf); + +/* flush buffer protected by spinlock and wake-up waiting task(s) */ +extern void dvb_ringbuffer_flush_spinlock_wakeup(dvb_ringbuffer_t *rbuf); + +/* peek at byte in the buffer */ +#define DVB_RINGBUFFER_PEEK(rbuf,offs) \ + (rbuf)->data[((rbuf)->pread+(offs))%(rbuf)->size] + +/* advance read ptr by bytes */ +#define DVB_RINGBUFFER_SKIP(rbuf,num) \ + (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size + +/* +** read bytes from ring buffer into +** specifies whether resides in user space +** returns number of bytes transferred or -EFAULT +*/ +extern ssize_t dvb_ringbuffer_read(dvb_ringbuffer_t *rbuf, u8 *buf, + size_t len, int usermem); + + +/* write routines & macros */ +/* ----------------------- */ +/* write single byte to ring buffer */ +#define DVB_RINGBUFFER_WRITE_BYTE(rbuf,byte) \ + { (rbuf)->data[(rbuf)->pwrite]=(byte); \ + (rbuf)->pwrite=((rbuf)->pwrite+1)%(rbuf)->size; } +/* +** write bytes to ring buffer +** specifies whether resides in user space +** returns number of bytes transferred or -EFAULT +*/ +extern ssize_t dvb_ringbuffer_write(dvb_ringbuffer_t *rbuf, const u8 *buf, + size_t len, int usermem); + +#endif /* _DVB_RINGBUFFER_H_ */ diff -Nru a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c --- a/drivers/media/dvb/dvb-core/dvbdev.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/dvb-core/dvbdev.c Sat Apr 12 14:44:06 2003 @@ -35,11 +35,13 @@ #include #include #include -#include -#include "compat.h" #include "dvbdev.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #include "compat.h" +#endif + static int dvbdev_debug = 0; #define dprintk if (dvbdev_debug) printk @@ -57,7 +59,6 @@ #define DVB_MAX_IDS 4 #define nums2minor(num,type,id) ((num << 6) | (id << 4) | type) - static struct dvb_device* dvbdev_find_device (int minor) { @@ -160,7 +161,7 @@ if (!dvbdev->kernel_ioctl) return -EINVAL; - return video_usercopy (inode, file, cmd, arg, dvbdev->kernel_ioctl); + return dvb_usercopy (inode, file, cmd, arg, dvbdev->kernel_ioctl); } @@ -267,7 +268,7 @@ } -int dvb_register_adapter(struct dvb_adapter **padap, char *name) +int dvb_register_adapter(struct dvb_adapter **padap, const char *name) { struct dvb_adapter *adap; int num; @@ -288,12 +289,14 @@ memset (adap, 0, sizeof(struct dvb_adapter)); INIT_LIST_HEAD (&adap->device_list); - MOD_INC_USE_COUNT; + /* fixme: is this correct? */ + try_module_get(THIS_MODULE); printk ("DVB: registering new adapter (%s).\n", name); adap->devfs_handle = devfs_mk_dir("dvb/adapter%d", num); adap->num = num; + adap->name = name; list_add_tail (&adap->list_head, &dvb_adapter_list); @@ -311,7 +314,8 @@ list_del (&adap->list_head); up (&dvbdev_register_lock); kfree (adap); - MOD_DEC_USE_COUNT; + /* fixme: is this correct? */ + module_put(THIS_MODULE); return 0; } diff -Nru a/drivers/media/dvb/dvb-core/dvbdev.h b/drivers/media/dvb/dvb-core/dvbdev.h --- a/drivers/media/dvb/dvb-core/dvbdev.h Sat Apr 12 14:44:07 2003 +++ b/drivers/media/dvb/dvb-core/dvbdev.h Sat Apr 12 14:44:07 2003 @@ -48,6 +48,7 @@ devfs_handle_t devfs_handle; struct list_head list_head; struct list_head device_list; + const char *name; }; @@ -63,14 +64,14 @@ int writers; /* don't really need those !? -- FIXME: use video_usercopy */ - int (*kernel_ioctl)(struct inode *inode, struct file *file, + int (*kernel_ioctl)(struct inode *inode, struct file *file, unsigned int cmd, void *arg); void *priv; }; -extern int dvb_register_adapter (struct dvb_adapter **padap, char *name); +extern int dvb_register_adapter (struct dvb_adapter **padap, const char *name); extern int dvb_unregister_adapter (struct dvb_adapter *adap); extern int dvb_register_device (struct dvb_adapter *adap, @@ -84,7 +85,10 @@ extern int dvb_generic_open (struct inode *inode, struct file *file); extern int dvb_generic_release (struct inode *inode, struct file *file); extern int dvb_generic_ioctl (struct inode *inode, struct file *file, - unsigned int cmd, unsigned long arg); - + unsigned int cmd, unsigned long arg); +int dvb_usercopy(struct inode *inode, struct file *file, + unsigned int cmd, unsigned long arg, + int (*func)(struct inode *inode, struct file *file, + unsigned int cmd, void *arg)); #endif /* #ifndef _DVBDEV_H_ */ diff -Nru a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig --- a/drivers/media/dvb/frontends/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/frontends/Kconfig Sat Apr 12 14:44:06 2003 @@ -1,13 +1,17 @@ comment "Supported Frontend Modules" depends on DVB -config DVB_ALPS_BSRU6 - tristate "Alps BSRU6 (QPSK)" +config DVB_STV0299 + tristate "STV0299 based DVB-S frontend (QPSK)" depends on DVB_CORE help A DVB-S tuner module. - Say Y when you want to support this frontend. + Say Y when you want to support frontend based on this + demodulator. + + Some examples are the Alps BSRU6, the Philips SU1278 and + the LG TDQB-S00x. If you don't know what tuner module is soldered on your DVB adapter simply enable all supported frontends, the @@ -29,22 +33,34 @@ help A DVB-T tuner module. Say Y when you want to support this frontend. - This tuner module needs some microcode located in a file called + This tuner module needs some microcode located in a file called "Sc_main.mc" in the windows driver. Please pass the module parameter - mcfile="/PATH/FILENAME" when loading alps_tdlb7. + mcfile="/PATH/FILENAME" when loading alps_tdlb7.o. - If you don't know what tuner module is soldered on your - DVB adapter simply enable all supported frontends, the + If you don't know what tuner module is soldered on your + DVB adapter simply enable all supported frontends, the right one will get autodetected. + config DVB_ALPS_TDMB7 - tristate "Alps BSRV2 (OFDM)" + tristate "Alps TDMB7 (OFDM)" depends on DVB_CORE help - A DVB-S tuner module. Say Y when you want to support this frontend. + A DVB-T tuner module. Say Y when you want to support this frontend. - If you don't know what tuner module is soldered on your - DVB adapter simply enable all supported frontends, the + If you don't know what tuner module is soldered on your + DVB adapter simply enable all supported frontends, the + right one will get autodetected. + +config DVB_ATMEL_AT76C651 + tristate "Atmel AT76C651 (QAM)" + depends on DVB_CORE + help + The AT76C651 Demodulator is used in some DVB-C SetTopBoxes. Say Y + when you see this demodulator chip near your tuner module. + + If you don't know what tuner module is soldered on your + DVB adapter simply enable all supported frontends, the right one will get autodetected. config DVB_GRUNDIG_29504_491 diff -Nru a/drivers/media/dvb/frontends/Makefile b/drivers/media/dvb/frontends/Makefile --- a/drivers/media/dvb/frontends/Makefile Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/frontends/Makefile Sat Apr 12 14:44:06 2003 @@ -4,10 +4,11 @@ EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ -obj-$(CONFIG_DVB_ALPS_BSRU6) += alps_bsru6.o +obj-$(CONFIG_DVB_STV0299) += stv0299.o obj-$(CONFIG_DVB_ALPS_BSRV2) += alps_bsrv2.o obj-$(CONFIG_DVB_ALPS_TDLB7) += alps_tdlb7.o obj-$(CONFIG_DVB_ALPS_TDMB7) += alps_tdmb7.o +obj-$(CONFIG_DVB_ATMEL_AT76C651) += at76c651.o obj-$(CONFIG_DVB_GRUNDIG_29504_491) += grundig_29504-491.o obj-$(CONFIG_DVB_GRUNDIG_29504_401) += grundig_29504-401.o obj-$(CONFIG_DVB_VES1820) += ves1820.o diff -Nru a/drivers/media/dvb/frontends/alps_bsru6.c b/drivers/media/dvb/frontends/alps_bsru6.c --- a/drivers/media/dvb/frontends/alps_bsru6.c Sat Apr 12 14:44:10 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,745 +0,0 @@ -/* - Alps BSRU6 and LG TDQB-S00x DVB QPSK frontend driver - - Copyright (C) 2001-2002 Convergence Integrated Media GmbH - , , - - - 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., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include -#include - -#include "compat.h" -#include "dvb_frontend.h" - - -static int debug = 0; -#define dprintk if (debug) printk - - -#define M_CLK (88000000UL) -/* M=21, K=0, P=0, f_VCO = 4MHz*4*(M+1)/(K+1) = 352 MHz */ - - -static -struct dvb_frontend_info bsru6_info = { -#ifdef CONFIG_ALPS_BSRU6_IS_LG_TDQBS00X - .name = "LG TDQB-S00x", -#else - .name = "Alps BSRU6", -#endif - .type = FE_QPSK, - .frequency_min = 950000, - .frequency_max = 2150000, - .frequency_stepsize = 125, /* kHz for QPSK frontends */ - .frequency_tolerance = M_CLK/2000, - .symbol_rate_min = 1000000, - .symbol_rate_max = 45000000, - .symbol_rate_tolerance = 500, /* ppm */ - .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | - FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | - FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | - FE_CAN_QPSK -}; - - -static -u8 init_tab [] = { - 0x01, 0x15, // M: 0x15 DIRCLK: 0 K:0 - 0x02, 0x30, // P: 0 SERCLK: 0 VCO:ON STDBY:0 - - 0x03, 0x00, - 0x04, 0x7d, // F22FR, F22=22kHz - 0x05, 0x35, // SDAT:0 SCLT:0 I2CT:1 - 0x06, 0x00, // DAC mode and MSB - 0x07, 0x00, // DAC LSB -// 0x08, 0x43, // DiSEqC - 0x08, 0x03, // DiSEqC - 0x09, 0x00, - 0x0a, 0x42, - 0x0c, 0x51, // QPSK reverse:1 Nyquist:0 OP0 val:1 OP0 con:1 OP1 val:1 OP1 con:1 - 0x0d, 0x82, - 0x0e, 0x23, - 0x0f, 0x52, - - 0x10, 0x3d, // AGC2 - 0x11, 0x84, - 0x12, 0xb5, // Lock detect: -64 Carrier freq detect:on - 0x13, 0xb6, // alpha_car b:4 a:0 noise est:256ks derot:on - 0x14, 0x93, // beat carc:0 d:0 e:0xf phase detect algo: 1 - 0x15, 0xc9, // lock detector threshold - - 0x16, 0x1d, - 0x17, 0x00, - 0x18, 0x14, - 0x19, 0xf2, - - 0x1a, 0x11, - - 0x1b, 0x9c, - 0x1c, 0x00, - 0x1d, 0x00, - 0x1e, 0x0b, - 0x1f, 0x50, - - 0x20, 0x00, - 0x21, 0x00, - 0x22, 0x00, - 0x23, 0x00, - 0x24, 0xff, - 0x25, 0xff, - 0x26, 0xff, - - 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0 - 0x29, 0x1e, // 1/2 threshold - 0x2a, 0x14, // 2/3 threshold - 0x2b, 0x0f, // 3/4 threshold - 0x2c, 0x09, // 5/6 threshold - 0x2d, 0x05, // 7/8 threshold - 0x2e, 0x01, - - 0x31, 0x1f, // test all FECs - - 0x32, 0x19, // viterbi and synchro search - 0x33, 0xfc, // rs control - 0x34, 0x93, // error control - - 0x0b, 0x00, - 0x27, 0x00, - 0x2f, 0x00, - 0x30, 0x00, - 0x35, 0x00, - 0x36, 0x00, - 0x37, 0x00, - 0x38, 0x00, - 0x39, 0x00, - 0x3a, 0x00, - 0x3b, 0x00, - 0x3c, 0x00, - 0x3d, 0x00, - 0x3e, 0x00, - 0x3f, 0x00, - 0x40, 0x00, - 0x41, 0x00, - 0x42, 0x00, - 0x43, 0x00, - 0x44, 0x00, - 0x45, 0x00, - 0x46, 0x00, - 0x47, 0x00, - 0x48, 0x00, - 0x49, 0x00, - 0x4a, 0x00, - 0x4b, 0x00, - 0x4c, 0x00, - 0x4d, 0x00, - 0x4e, 0x00, - 0x4f, 0x00 -}; - - -static -int stv0299_writereg (struct dvb_i2c_bus *i2c, u8 reg, u8 data) -{ - int ret; - u8 buf [] = { reg, data }; - struct i2c_msg msg = { .addr = 0x68, .flags = 0, .buf = buf, .len = 2 }; - - dprintk ("%s\n", __FUNCTION__); - - ret = i2c->xfer (i2c, &msg, 1); - - if (ret != 1) - dprintk("%s: writereg error (reg == 0x%02x, val == 0x%02x, ret == %i)\n", - __FUNCTION__, reg, data, ret); - - return (ret != 1) ? -1 : 0; -} - - -static -u8 stv0299_readreg (struct dvb_i2c_bus *i2c, u8 reg) -{ - int ret; - u8 b0 [] = { reg }; - u8 b1 [] = { 0 }; - struct i2c_msg msg [] = { { .addr = 0x68, .flags = 0, .buf = b0, .len = 1 }, - { .addr = 0x68, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; - - dprintk ("%s\n", __FUNCTION__); - - ret = i2c->xfer (i2c, msg, 2); - - if (ret != 2) - dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); - - return b1[0]; -} - - -static -int stv0299_readregs (struct dvb_i2c_bus *i2c, u8 reg1, u8 *b, u8 len) -{ - int ret; - struct i2c_msg msg [] = { { .addr = 0x68, .flags = 0, .buf = ®1, .len = 1 }, - { .addr = 0x68, .flags = I2C_M_RD, .buf = b, .len = len } }; - - dprintk ("%s\n", __FUNCTION__); - - ret = i2c->xfer (i2c, msg, 2); - - if (ret != 2) - dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); - - return ret == 2 ? 0 : -1; -} - - - -static -int tsa5059_write (struct dvb_i2c_bus *i2c, u8 data [4]) -{ - int ret; - u8 rpt1 [] = { 0x05, 0xb5 }; /* enable i2c repeater on stv0299 */ - struct i2c_msg msg [] = {{ .addr = 0x68, .flags = 0, .buf = rpt1, .len = 2 }, - { .addr = 0x61, .flags = 0, .buf = data, .len = 4 }}; - - dprintk ("%s\n", __FUNCTION__); - - ret = i2c->xfer (i2c, msg, 2); - - if (ret != 2) - dprintk("%s: i/o error (ret == %i)\n", __FUNCTION__, ret); - - return (ret != 2) ? -1 : 0; -} - - -/** - * set up the downconverter frequency divisor for a - * reference clock comparision frequency of 125 kHz. - */ -static -int tsa5059_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, u8 pwr) -{ - u32 div = freq / 125; - u8 buf [4] = { (div >> 8) & 0x7f, div & 0xff, 0x84, (pwr << 5) | 0x20 }; - - dprintk ("%s\n", __FUNCTION__); - - return tsa5059_write (i2c, buf); -} - - -static -int stv0299_init (struct dvb_i2c_bus *i2c) -{ - int i; - - dprintk("stv0299: init chip\n"); - - for (i=0; i 4) - return FEC_AUTO; - - return fec_tab [index]; -} - - -static -int stv0299_wait_diseqc_fifo (struct dvb_i2c_bus *i2c, int timeout) -{ - unsigned long start = jiffies; - - dprintk ("%s\n", __FUNCTION__); - - while (stv0299_readreg(i2c, 0x0a) & 1) { - if (jiffies - start > timeout) { - dprintk ("%s: timeout!!\n", __FUNCTION__); - return -ETIMEDOUT; - } - current->state = TASK_INTERRUPTIBLE; - schedule_timeout (1); - }; - - return 0; -} - - -static -int stv0299_wait_diseqc_idle (struct dvb_i2c_bus *i2c, int timeout) -{ - unsigned long start = jiffies; - - dprintk ("%s\n", __FUNCTION__); - - while ((stv0299_readreg(i2c, 0x0a) & 3) != 2 ) { - if (jiffies - start > timeout) { - dprintk ("%s: timeout!!\n", __FUNCTION__); - return -ETIMEDOUT; - } - current->state = TASK_INTERRUPTIBLE; - schedule_timeout (1); - }; - - return 0; -} - - -static -int stv0299_send_diseqc_msg (struct dvb_i2c_bus *i2c, - struct dvb_diseqc_master_cmd *m) -{ - u8 val; - int i; - - dprintk ("%s\n", __FUNCTION__); - - if (stv0299_wait_diseqc_idle (i2c, 100) < 0) - return -ETIMEDOUT; - - val = stv0299_readreg (i2c, 0x08); - - if (stv0299_writereg (i2c, 0x08, (val & ~0x7) | 0x6)) /* DiSEqC mode */ - return -EREMOTEIO; - - for (i=0; imsg_len; i++) { - if (stv0299_wait_diseqc_fifo (i2c, 100) < 0) - return -ETIMEDOUT; - - if (stv0299_writereg (i2c, 0x09, m->msg[i])) - return -EREMOTEIO; - } - - if (stv0299_wait_diseqc_idle (i2c, 100) < 0) - return -ETIMEDOUT; - - return 0; -} - - -static -int stv0299_send_diseqc_burst (struct dvb_i2c_bus *i2c, fe_sec_mini_cmd_t burst) -{ - u8 val; - - dprintk ("%s\n", __FUNCTION__); - - if (stv0299_wait_diseqc_idle (i2c, 100) < 0) - return -ETIMEDOUT; - - val = stv0299_readreg (i2c, 0x08); - - if (stv0299_writereg (i2c, 0x08, (val & ~0x7) | 0x2)) /* burst mode */ - return -EREMOTEIO; - - if (stv0299_writereg (i2c, 0x09, burst == SEC_MINI_A ? 0x00 : 0xff)) - return -EREMOTEIO; - - if (stv0299_wait_diseqc_idle (i2c, 100) < 0) - return -ETIMEDOUT; - - if (stv0299_writereg (i2c, 0x08, val)) - return -EREMOTEIO; - - return 0; -} - - -static -int stv0299_set_tone (struct dvb_i2c_bus *i2c, fe_sec_tone_mode_t tone) -{ - u8 val; - - dprintk ("%s\n", __FUNCTION__); - - if (stv0299_wait_diseqc_idle (i2c, 100) < 0) - return -ETIMEDOUT; - - val = stv0299_readreg (i2c, 0x08); - - switch (tone) { - case SEC_TONE_ON: - return stv0299_writereg (i2c, 0x08, val | 0x3); - case SEC_TONE_OFF: - return stv0299_writereg (i2c, 0x08, (val & ~0x3) | 0x02); - default: - return -EINVAL; - }; -} - - -static -int stv0299_set_voltage (struct dvb_i2c_bus *i2c, fe_sec_voltage_t voltage) -{ - u8 val; - - dprintk ("%s\n", __FUNCTION__); - - val = stv0299_readreg (i2c, 0x0c); - val &= 0x0f; - val |= 0x40; - - switch (voltage) { - case SEC_VOLTAGE_13: - return stv0299_writereg (i2c, 0x0c, val); - case SEC_VOLTAGE_18: - return stv0299_writereg (i2c, 0x0c, val | 0x10); - default: - return -EINVAL; - }; -} - - -static -int stv0299_set_symbolrate (struct dvb_i2c_bus *i2c, u32 srate) -{ - u32 ratio; - u32 tmp; - u8 aclk = 0xb4, bclk = 0x51; - - if (srate > M_CLK) - srate = M_CLK; - if (srate < 500000) - srate = 500000; - - if (srate < 30000000) { aclk = 0xb6; bclk = 0x53; } - if (srate < 14000000) { aclk = 0xb7; bclk = 0x53; } - if (srate < 7000000) { aclk = 0xb7; bclk = 0x4f; } - if (srate < 3000000) { aclk = 0xb7; bclk = 0x4b; } - if (srate < 1500000) { aclk = 0xb7; bclk = 0x47; } - -#define FIN (M_CLK >> 4) - - tmp = srate << 4; - ratio = tmp / FIN; - - tmp = (tmp % FIN) << 8; - ratio = (ratio << 8) + tmp / FIN; - - tmp = (tmp % FIN) << 8; - ratio = (ratio << 8) + tmp / FIN; - - stv0299_writereg (i2c, 0x13, aclk); - stv0299_writereg (i2c, 0x14, bclk); - stv0299_writereg (i2c, 0x1f, (ratio >> 16) & 0xff); - stv0299_writereg (i2c, 0x20, (ratio >> 8) & 0xff); - stv0299_writereg (i2c, 0x21, (ratio ) & 0xf0); - - return 0; -} - - -static -int stv0299_get_symbolrate (struct dvb_i2c_bus *i2c) -{ - u32 Mclk = M_CLK / 4096L; - u32 srate; - s32 offset; - u8 sfr[3]; - s8 rtf; - - dprintk ("%s\n", __FUNCTION__); - - stv0299_readregs (i2c, 0x1f, sfr, 3); - stv0299_readregs (i2c, 0x1a, &rtf, 1); - - srate = (sfr[0] << 8) | sfr[1]; - srate *= Mclk; - srate /= 16; - srate += (sfr[2] >> 4) * Mclk / 256; - - offset = (s32) rtf * (srate / 4096L); - offset /= 128; - - srate += offset; - - srate += 1000; - srate /= 2000; - srate *= 2000; - - return srate; -} - - -static -int bsru6_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) -{ - struct dvb_i2c_bus *i2c = fe->i2c; - - dprintk ("%s\n", __FUNCTION__); - - switch (cmd) { - case FE_GET_INFO: - memcpy (arg, &bsru6_info, sizeof(struct dvb_frontend_info)); - break; - - case FE_READ_STATUS: - { - fe_status_t *status = (fe_status_t *) arg; - u8 signal = 0xff - stv0299_readreg (i2c, 0x18); - u8 sync = stv0299_readreg (i2c, 0x1b); - - *status = 0; - - if (signal > 10) - *status |= FE_HAS_SIGNAL; - - if (sync & 0x80) - *status |= FE_HAS_CARRIER; - - if (sync & 0x10) - *status |= FE_HAS_VITERBI; - - if (sync & 0x08) - *status |= FE_HAS_SYNC; - - if ((sync & 0x98) == 0x98) - *status |= FE_HAS_LOCK; - - break; - } - - case FE_READ_BER: - *((u32*) arg) = (stv0299_readreg (i2c, 0x1d) << 8) - | stv0299_readreg (i2c, 0x1e); - break; - - case FE_READ_SIGNAL_STRENGTH: - { - s32 signal = 0xffff - ((stv0299_readreg (i2c, 0x18) << 8) - | stv0299_readreg (i2c, 0x19)); - signal = signal * 5 / 4; - *((u16*) arg) = (signal > 0xffff) ? 0xffff : - (signal < 0) ? 0 : signal; - break; - } - case FE_READ_SNR: - { - s32 snr = 0xffff - ((stv0299_readreg (i2c, 0x24) << 8) - | stv0299_readreg (i2c, 0x25)); - snr = 3 * (snr - 0xa100); - *((u16*) arg) = (snr > 0xffff) ? 0xffff : - (snr < 0) ? 0 : snr; - break; - } - case FE_READ_UNCORRECTED_BLOCKS: - *((u32*) arg) = 0; /* the stv0299 can't measure BER and */ - return -EOPNOTSUPP; /* errors at the same time.... */ - - case FE_SET_FRONTEND: - { - struct dvb_frontend_parameters *p = arg; - - tsa5059_set_tv_freq (i2c, p->frequency, 3); - stv0299_set_inversion (i2c, p->inversion); - stv0299_set_FEC (i2c, p->u.qpsk.fec_inner); - stv0299_set_symbolrate (i2c, p->u.qpsk.symbol_rate); - tsa5059_set_tv_freq (i2c, p->frequency, 0); - stv0299_writereg (i2c, 0x22, 0x00); - stv0299_writereg (i2c, 0x23, 0x00); - stv0299_readreg (i2c, 0x23); - stv0299_writereg (i2c, 0x12, 0xb9); - break; - } - - case FE_GET_FRONTEND: - { - struct dvb_frontend_parameters *p = arg; - s32 derot_freq; - - derot_freq = (s32)(s16) ((stv0299_readreg (i2c, 0x22) << 8) - | stv0299_readreg (i2c, 0x23)); - - derot_freq *= (M_CLK >> 16); - derot_freq += 500; - derot_freq /= 1000; - - p->frequency += derot_freq; - p->inversion = (stv0299_readreg (i2c, 0x0c) & 1) ? - INVERSION_OFF : INVERSION_ON; - p->u.qpsk.fec_inner = stv0299_get_fec (i2c); - p->u.qpsk.symbol_rate = stv0299_get_symbolrate (i2c); - break; - } - - case FE_SLEEP: - stv0299_writereg (i2c, 0x0c, 0x00); /* LNB power off! */ - stv0299_writereg (i2c, 0x02, 0x80); - break; - - case FE_INIT: - return stv0299_init (i2c); - - case FE_RESET: - stv0299_writereg (i2c, 0x22, 0x00); - stv0299_writereg (i2c, 0x23, 0x00); - stv0299_readreg (i2c, 0x23); - stv0299_writereg (i2c, 0x12, 0xb9); - break; - - case FE_DISEQC_SEND_MASTER_CMD: - return stv0299_send_diseqc_msg (i2c, arg); - - case FE_DISEQC_SEND_BURST: - return stv0299_send_diseqc_burst (i2c, (fe_sec_mini_cmd_t) arg); - - case FE_SET_TONE: - return stv0299_set_tone (i2c, (fe_sec_tone_mode_t) arg); - - case FE_SET_VOLTAGE: - return stv0299_set_voltage (i2c, (fe_sec_voltage_t) arg); - - default: - return -EOPNOTSUPP; - }; - - return 0; -} - - - -static -int bsru6_attach (struct dvb_i2c_bus *i2c) -{ - dprintk ("%s\n", __FUNCTION__); - - if ((stv0299_readreg (i2c, 0x00)) != 0xa1) - return -ENODEV; - - dvb_register_frontend (bsru6_ioctl, i2c, NULL, &bsru6_info); - - return 0; -} - - -static -void bsru6_detach (struct dvb_i2c_bus *i2c) -{ - dprintk ("%s\n", __FUNCTION__); - - dvb_unregister_frontend (bsru6_ioctl, i2c); -} - - -static -int __init init_bsru6 (void) -{ - dprintk ("%s\n", __FUNCTION__); - - return dvb_register_i2c_device (THIS_MODULE, bsru6_attach, bsru6_detach); -} - - -static -void __exit exit_bsru6 (void) -{ - dprintk ("%s\n", __FUNCTION__); - - dvb_unregister_i2c_device (bsru6_attach); -} - -module_init (init_bsru6); -module_exit (exit_bsru6); - -MODULE_PARM(debug,"i"); -MODULE_PARM_DESC(debug, "enable verbose debug messages"); -MODULE_DESCRIPTION("Alps BSRU6/LG TDQB-S00x DVB Frontend driver"); -MODULE_AUTHOR("Ralph Metzler, Holger Waechtler"); -MODULE_LICENSE("GPL"); - diff -Nru a/drivers/media/dvb/frontends/alps_bsrv2.c b/drivers/media/dvb/frontends/alps_bsrv2.c --- a/drivers/media/dvb/frontends/alps_bsrv2.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/frontends/alps_bsrv2.c Sat Apr 12 14:44:06 2003 @@ -23,7 +23,6 @@ #include #include -#include "compat.h" #include "dvb_frontend.h" static int debug = 0; @@ -32,20 +31,20 @@ static struct dvb_frontend_info bsrv2_info = { - .name = "Alps BSRV2", - .type = FE_QPSK, - .frequency_min = 950000, - .frequency_max = 2150000, - .frequency_stepsize = 250, /* kHz for QPSK frontends */ - .frequency_tolerance = 29500, - .symbol_rate_min = 1000000, - .symbol_rate_max = 45000000, - .notifier_delay = 50, /* 1/20 s */ - .caps = FE_CAN_INVERSION_AUTO | - FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | - FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | - FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | - FE_CAN_QPSK + name: "Alps BSRV2", + type: FE_QPSK, + frequency_min: 950000, + frequency_max: 2150000, + frequency_stepsize: 250, /* kHz for QPSK frontends */ + frequency_tolerance: 29500, + symbol_rate_min: 1000000, + symbol_rate_max: 45000000, +/* symbol_rate_tolerance: ???,*/ + notifier_delay: 50, /* 1/20 s */ + caps: FE_CAN_INVERSION_AUTO | + FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | + FE_CAN_QPSK }; @@ -73,10 +72,10 @@ static -int ves1893_writereg (struct dvb_i2c_bus *i2c, int reg, int data) +int ves1893_writereg (struct dvb_i2c_bus *i2c, u8 reg, u8 data) { u8 buf [] = { 0x00, reg, data }; - struct i2c_msg msg = { .addr = 0x08, .flags = 0, .buf = buf, .len = 3 }; + struct i2c_msg msg = { addr: 0x08, flags: 0, buf: buf, len: 3 }; int err; if ((err = i2c->xfer (i2c, &msg, 1)) != 1) { @@ -94,8 +93,8 @@ int ret; u8 b0 [] = { 0x00, reg }; u8 b1 [] = { 0 }; - struct i2c_msg msg [] = { { .addr = 0x08, .flags = 0, .buf = b0, .len = 2 }, - { .addr = 0x08, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; + struct i2c_msg msg [] = { { addr: 0x08, flags: 0, buf: b0, len: 2 }, + { addr: 0x08, flags: I2C_M_RD, buf: b1, len: 1 } }; ret = i2c->xfer (i2c, msg, 2); @@ -110,7 +109,7 @@ int sp5659_write (struct dvb_i2c_bus *i2c, u8 data [4]) { int ret; - struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = 4 }; + struct i2c_msg msg = { addr: 0x61, flags: 0, buf: data, len: 4 }; ret = i2c->xfer (i2c, &msg, 1); @@ -297,7 +296,7 @@ return ves1893_writereg (i2c, 0x1f, 0x30); default: return -EINVAL; - }; + } } @@ -314,7 +313,7 @@ case FE_READ_STATUS: { fe_status_t *status = arg; - int sync = ves1893_readreg (i2c, 0x0e); + u8 sync = ves1893_readreg (i2c, 0x0e); *status = 0; diff -Nru a/drivers/media/dvb/frontends/alps_tdlb7.c b/drivers/media/dvb/frontends/alps_tdlb7.c --- a/drivers/media/dvb/frontends/alps_tdlb7.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/frontends/alps_tdlb7.c Sat Apr 12 14:44:06 2003 @@ -51,7 +51,6 @@ #include #include -#include "compat.h" #include "dvb_frontend.h" static int debug = 0; @@ -63,7 +62,7 @@ #define dprintk if (debug) printk /* microcode size for sp8870 */ -#define SP8870_CODE_SIZE 16384 +#define SP8870_CODE_SIZE 16382 /* starting point for microcode in file 'Sc_main.mc' */ #define SP8870_CODE_OFFSET 0x0A @@ -73,15 +72,21 @@ static struct dvb_frontend_info tdlb7_info = { - .name = "Alps TDLB7", - .type = FE_OFDM, - .frequency_min = 470000000, - .frequency_max = 860000000, - .frequency_stepsize = 166666, - .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | - FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | - FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | - FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 + name: "Alps TDLB7", + type: FE_OFDM, + frequency_min: 470000000, + frequency_max: 860000000, + frequency_stepsize: 166666, +#if 0 + frequency_tolerance: ???, + symbol_rate_min: ???, + symbol_rate_max: ???, + symbol_rate_tolerance: ???, + notifier_delay: 0, +#endif + caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | + FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 }; @@ -89,7 +94,7 @@ int sp8870_writereg (struct dvb_i2c_bus *i2c, u16 reg, u16 data) { u8 buf [] = { reg >> 8, reg & 0xff, data >> 8, data & 0xff }; - struct i2c_msg msg = { .addr = 0x71, .flags = 0, .buf = buf, .len = 4 }; + struct i2c_msg msg = { addr: 0x71, flags: 0, buf: buf, len: 4 }; int err; if ((err = i2c->xfer (i2c, &msg, 1)) != 1) { @@ -107,8 +112,8 @@ int ret; u8 b0 [] = { reg >> 8 , reg & 0xff }; u8 b1 [] = { 0, 0 }; - struct i2c_msg msg [] = { { .addr = 0x71, .flags = 0, .buf = b0, .len = 2 }, - { .addr = 0x71, .flags = I2C_M_RD, .buf = b1, .len = 2 } }; + struct i2c_msg msg [] = { { addr: 0x71, flags: 0, buf: b0, len: 2 }, + { addr: 0x71, flags: I2C_M_RD, buf: b1, len: 2 } }; ret = i2c->xfer (i2c, msg, 2); @@ -123,7 +128,7 @@ int sp5659_write (struct dvb_i2c_bus *i2c, u8 data [4]) { int ret; - struct i2c_msg msg = { .addr = 0x60, .flags = 0, .buf = data, .len = 4 }; + struct i2c_msg msg = { addr: 0x60, flags: 0, buf: data, len: 4 }; ret = i2c->xfer (i2c, &msg, 1); @@ -135,10 +140,21 @@ static -int sp5659_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, u8 pwr) +int sp5659_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq) { u32 div = (freq + 36200000) / 166666; - u8 buf [4] = { (div >> 8) & 0x7f, div & 0xff, 0x85, (pwr << 5) | 0x30 }; + u8 buf [4]; + int pwr; + + if (freq <= 782000000) + pwr = 1; + else + pwr = 2; + + buf[0] = (div >> 8) & 0x7f; + buf[1] = div & 0xff; + buf[2] = 0x85; + buf[3] = pwr << 6; return sp5659_write (i2c, buf); } @@ -193,8 +209,14 @@ int c; mm_segment_t fs = get_fs(); - sp8870_writereg(i2c,0x8F08,0x1FFF); - sp8870_writereg(i2c,0x8F0A,0x0000); + // system controller stop + sp8870_writereg(i2c,0x0F00,0x0000); + + // instruction RAM register hiword + sp8870_writereg(i2c,0x8F08,((SP8870_CODE_SIZE/2) & 0xFFFF)); + + // instruction RAM MWR + sp8870_writereg(i2c,0x8F0A,((SP8870_CODE_SIZE/2) >> 16)); set_fs(get_ds()); if (sp8870_read_code(mcfile,(char**) &lcode)<0) return -1; @@ -210,7 +232,8 @@ msg.buf=buf; msg.len=c; if ((err = i2c->xfer (i2c, &msg, 1)) != 1) { - dprintk ("%s: i2c error (err == %i)\n", __FUNCTION__, err); + dprintk ("%s: i2c error (err == %i)\n", + __FUNCTION__, err); vfree(lcode); return -EREMOTEIO; } @@ -228,49 +251,40 @@ dprintk ("%s\n", __FUNCTION__); - sp8870_readreg(i2c,0x200); - sp8870_readreg(i2c,0x200); - sp8870_readreg(i2c,0x0F00); /* system controller stop */ - sp8870_readreg(i2c,0x0301); /* ???????? */ - sp8870_readreg(i2c,0x0309); /* integer carrier offset */ - sp8870_readreg(i2c,0x030A); /* fractional carrier offset */ - sp8870_readreg(i2c,0x0311); /* filter for 8 Mhz channel */ - sp8870_readreg(i2c,0x0319); /* sample rate correction bit [23..17] */ - sp8870_readreg(i2c,0x031A); /* sample rate correction bit [16..0] */ - sp8870_readreg(i2c,0x0338); /* ???????? */ - sp8870_readreg(i2c,0x0F00); - sp8870_readreg(i2c,0x0200); + // system controller stop + sp8870_writereg(i2c,0x0F00,0x0000); - if (loadcode) { - dprintk("%s: loading mcfile '%s' !\n", __FUNCTION__, mcfile); - if (sp8870_load_code(i2c)==0) - dprintk("%s: microcode loaded!\n", __FUNCTION__); - }else{ - dprintk("%s: without loading mcfile!\n", __FUNCTION__); - } + // ADC mode: 2 for MT8872, 3 for MT8870/8871 + sp8870_writereg(i2c,0x0301,0x0003); - return 0; -} + // Reed Solomon parity bytes passed to output + sp8870_writereg(i2c,0x0C13,0x0001); + // MPEG clock is suppressed if no valid data + sp8870_writereg(i2c,0x0C14,0x0001); -static -int sp8870_reset (struct dvb_i2c_bus *i2c) -{ - dprintk("%s\n", __FUNCTION__); - sp8870_writereg(i2c,0x0F00,0x0000); /* system controller stop */ - sp8870_writereg(i2c,0x0301,0x0003); /* ???????? */ - sp8870_writereg(i2c,0x0309,0x0400); /* integer carrier offset */ - sp8870_writereg(i2c,0x030A,0x0000); /* fractional carrier offset */ - sp8870_writereg(i2c,0x0311,0x0000); /* filter for 8 Mhz channel */ - sp8870_writereg(i2c,0x0319,0x000A); /* sample rate correction bit [23..17] */ - sp8870_writereg(i2c,0x031A,0x0AAB); /* sample rate correction bit [16..0] */ - sp8870_writereg(i2c,0x0338,0x0000); /* ???????? */ - sp8870_writereg(i2c,0x0201,0x0000); /* interrupts for change of lock or tuner adjustment disabled */ - sp8870_writereg(i2c,0x0F00,0x0001); /* system controller start */ + // sample rate correction bit [23..17] + sp8870_writereg(i2c,0x0319,0x000A); - return 0; + // sample rate correction bit [16..0] + sp8870_writereg(i2c,0x031A,0x0AAB); + + // integer carrier offset + sp8870_writereg(i2c,0x0309,0x0400); + + // fractional carrier offset + sp8870_writereg(i2c,0x030A,0x0000); + + // filter for 8 Mhz channel + sp8870_writereg(i2c,0x0311,0x0000); + + // scan order: 2k first = 0x0000, 8k first = 0x0001 + sp8870_writereg(i2c,0x0338,0x0000); + + return 0; } + static int tdlb7_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) { @@ -285,10 +299,10 @@ { fe_status_t *status = arg; int sync = sp8870_readreg (i2c, 0x0200); + int signal = 0xff-sp8870_readreg (i2c, 0x303); *status=0; - - if (sync&0x04) // FIXME: find criteria for having signal + if (signal>10) // FIXME: is 10 the right value ? *status |= FE_HAS_SIGNAL; if (sync&0x04) // FIXME: find criteria @@ -309,15 +323,15 @@ case FE_READ_BER: { u32 *ber=(u32 *) arg; - *ber=sp8870_readreg(i2c,0x0C07); // bit error rate before Viterbi + // bit error rate before Viterbi + *ber=sp8870_readreg(i2c,0x0C07); break; } - case FE_READ_SIGNAL_STRENGTH: // not supported by hardware? + case FE_READ_SIGNAL_STRENGTH: // FIXME: correct registers ? { - s32 *signal=(s32 *) arg; - *signal=0; + *((u16*) arg) = 0xffff-((sp8870_readreg (i2c, 0x306) << 8) | sp8870_readreg (i2c, 0x303)); break; } @@ -325,27 +339,64 @@ { s32 *snr=(s32 *) arg; *snr=0; - break; + return -EOPNOTSUPP; } case FE_READ_UNCORRECTED_BLOCKS: // not supported by hardware? { u32 *ublocks=(u32 *) arg; *ublocks=0; - break; + return -EOPNOTSUPP; } case FE_SET_FRONTEND: { struct dvb_frontend_parameters *p = arg; - sp5659_set_tv_freq (i2c, p->frequency, 0); - // all other parameters are set by the on card - // system controller. Don't know how to pass - // distinct values to the card. - break; + + // system controller stop + sp8870_writereg(i2c,0x0F00,0x0000); + + sp5659_set_tv_freq (i2c, p->frequency); + + // sample rate correction bit [23..17] + sp8870_writereg(i2c,0x0319,0x000A); + + // sample rate correction bit [16..0] + sp8870_writereg(i2c,0x031A,0x0AAB); + + // integer carrier offset + sp8870_writereg(i2c,0x0309,0x0400); + + // fractional carrier offset + sp8870_writereg(i2c,0x030A,0x0000); + + // filter for 6/7/8 Mhz channel + if (p->u.ofdm.bandwidth == BANDWIDTH_6_MHZ) + sp8870_writereg(i2c,0x0311,0x0002); + else if (p->u.ofdm.bandwidth == BANDWIDTH_7_MHZ) + sp8870_writereg(i2c,0x0311,0x0001); + else + sp8870_writereg(i2c,0x0311,0x0000); + + // scan order: 2k first = 0x0000, 8k first = 0x0001 + if (p->u.ofdm.transmission_mode == TRANSMISSION_MODE_2K) + sp8870_writereg(i2c,0x0338,0x0000); + else + sp8870_writereg(i2c,0x0338,0x0001); + + // instruction RAM register loword + sp8870_writereg(i2c,0x0F09,0x0000); + + // instruction RAM register hiword + sp8870_writereg(i2c,0x0F08,0x0000); + + // system controller start + sp8870_writereg(i2c,0x0F00,0x0001); + + break; } - case FE_GET_FRONTEND: // how to do this? + case FE_GET_FRONTEND: // FIXME: read known values back from Hardware... { break; } @@ -356,9 +407,6 @@ case FE_INIT: return sp8870_init (i2c); - case FE_RESET: - return sp8870_reset (i2c); - default: return -EOPNOTSUPP; }; @@ -371,12 +419,20 @@ int tdlb7_attach (struct dvb_i2c_bus *i2c) { - struct i2c_msg msg = { .addr = 0x71, .flags = 0, .buf = NULL, .len = 0 }; + struct i2c_msg msg = { addr: 0x71, flags: 0, buf: NULL, len: 0 }; dprintk ("%s\n", __FUNCTION__); if (i2c->xfer (i2c, &msg, 1) != 1) return -ENODEV; + + if (loadcode) { + dprintk("%s: loading mcfile '%s' !\n", __FUNCTION__, mcfile); + if (sp8870_load_code(i2c)==0) + dprintk("%s: microcode loaded!\n", __FUNCTION__); + }else{ + dprintk("%s: without loading mcfile!\n", __FUNCTION__); + } dvb_register_frontend (tdlb7_ioctl, i2c, NULL, &tdlb7_info); diff -Nru a/drivers/media/dvb/frontends/alps_tdmb7.c b/drivers/media/dvb/frontends/alps_tdmb7.c --- a/drivers/media/dvb/frontends/alps_tdmb7.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/frontends/alps_tdmb7.c Sat Apr 12 14:44:06 2003 @@ -23,7 +23,6 @@ #include #include -#include "compat.h" #include "dvb_frontend.h" @@ -33,15 +32,22 @@ static struct dvb_frontend_info tdmb7_info = { - .name = "Alps TDMB7", - .type = FE_OFDM, - .frequency_min = 470000000, - .frequency_max = 860000000, - .frequency_stepsize = 166667, - .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | - FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | - FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | - FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 + name: "Alps TDMB7", + type: FE_OFDM, + frequency_min: 470000000, + frequency_max: 860000000, + frequency_stepsize: 166667, +#if 0 + frequency_tolerance: ???, + symbol_rate_min: ???, + symbol_rate_max: ???, + symbol_rate_tolerance: 500, /* ppm */ + notifier_delay: 0, +#endif + caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | + FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | + FE_CAN_CLEAN_SETUP | FE_CAN_RECOVER }; @@ -81,7 +87,7 @@ { int ret; u8 buf [] = { reg, data }; - struct i2c_msg msg = { .addr = 0x43, .flags = 0, .buf = buf, .len = 2 }; + struct i2c_msg msg = { addr: 0x43, flags: 0, buf: buf, len: 2 }; dprintk ("%s\n", __FUNCTION__); @@ -101,8 +107,8 @@ int ret; u8 b0 [] = { reg }; u8 b1 [] = { 0 }; - struct i2c_msg msg [] = { { .addr = 0x43, .flags = 0, .buf = b0, .len = 1 }, - { .addr = 0x43, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; + struct i2c_msg msg [] = { { addr: 0x43, flags: 0, buf: b0, len: 1 }, + { addr: 0x43, flags: I2C_M_RD, buf: b1, len: 1 } }; dprintk ("%s\n", __FUNCTION__); @@ -118,7 +124,7 @@ static int pll_write (struct dvb_i2c_bus *i2c, u8 data [4]) { - struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = 4 }; + struct i2c_msg msg = { addr: 0x61, flags: 0, buf: data, len: 4 }; int ret; cx22700_writereg (i2c, 0x0a, 0x00); /* open i2c bus switch */ @@ -350,6 +356,7 @@ case FE_READ_BER: *((uint32_t*) arg) = cx22700_readreg (i2c, 0x0c) & 0x7f; + cx22700_writereg (i2c, 0x0c, 0x00); break; case FE_READ_SIGNAL_STRENGTH: @@ -368,6 +375,7 @@ } case FE_READ_UNCORRECTED_BLOCKS: *((uint32_t*) arg) = cx22700_readreg (i2c, 0x0f); + cx22700_writereg (i2c, 0x0f, 0x00); break; case FE_SET_FRONTEND: @@ -412,7 +420,7 @@ static int tdmb7_attach (struct dvb_i2c_bus *i2c) { - struct i2c_msg msg = { .addr = 0x43, .flags = 0, .buf = NULL, .len = 0 }; + struct i2c_msg msg = { addr: 0x43, flags: 0, buf: NULL, len: 0 }; dprintk ("%s\n", __FUNCTION__); diff -Nru a/drivers/media/dvb/frontends/at76c651.c b/drivers/media/dvb/frontends/at76c651.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/frontends/at76c651.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,542 @@ +/* + * at76c651.c + * + * Atmel DVB-C Frontend Driver (at76c651/dat7021) + * + * Copyright (C) 2001 fnbrd + * & 2002 Andreas Oberritter + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include +#include +#include +#include +#include + +#if defined(__powerpc__) +#include +#endif + +#include "dvb_frontend.h" +#include "dvb_i2c.h" + +static int debug = 0; + +#define dprintk if (debug) printk + +/* + * DAT7021 + * ------- + * Input Frequency Range (RF): 48.25 MHz to 863.25 MHz + * Band Width: 8 MHz + * Level Input (Range for Digital Signals): -61 dBm to -41 dBm + * Output Frequency (IF): 36 MHz + * + * (see http://www.atmel.com/atmel/acrobat/doc1320.pdf) + */ + +static struct dvb_frontend_info at76c651_info = { + + .name = "Atmel AT76c651(B) with DAT7021", + .type = FE_QAM, + .frequency_min = 48250000, + .frequency_max = 863250000, + .frequency_stepsize = 62500, + /*.frequency_tolerance = */ /* FIXME: 12% of SR */ + .symbol_rate_min = 0, /* FIXME */ + .symbol_rate_max = 9360000, /* FIXME */ + .symbol_rate_tolerance = 4000, + .notifier_delay = 0, + .caps = FE_CAN_INVERSION_AUTO | + FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | + FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO | + FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 | + FE_CAN_QAM_256, + /* FE_CAN_QAM_512 | FE_CAN_QAM_1024 | */ + +}; + +#if ! defined(__powerpc__) +static __inline__ int +__ilog2(unsigned long x) +{ + int i; + + if (x == 0) + return -1; + + for (i = 0; x != 0; i++) + x >>= 1; + + return i - 1; +} +#endif + +static int +at76c651_writereg(struct dvb_i2c_bus *i2c, u8 reg, u8 data) +{ + + int ret; + u8 buf[] = { reg, data }; + struct i2c_msg msg = { addr:0x1a >> 1, flags:0, buf:buf, len:2 }; + + ret = i2c->xfer(i2c, &msg, 1); + + if (ret != 1) + dprintk("%s: writereg error " + "(reg == 0x%02x, val == 0x%02x, ret == %i)\n", + __FUNCTION__, reg, data, ret); + + mdelay(10); + + return (ret != 1) ? -EREMOTEIO : 0; + +} + +static u8 +at76c651_readreg(struct dvb_i2c_bus *i2c, u8 reg) +{ + + int ret; + u8 b0[] = { reg }; + u8 b1[] = { 0 }; + struct i2c_msg msg[] = { {addr: 0x1a >> 1, flags: 0, buf: b0, len:1}, + {addr: 0x1a >> 1, flags: I2C_M_RD, buf: b1, len:1} }; + + ret = i2c->xfer(i2c, msg, 2); + + if (ret != 2) + dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); + + return b1[0]; + +} + +static int +at76c651_set_auto_config(struct dvb_i2c_bus *i2c) +{ + + at76c651_writereg(i2c, 0x06, 0x01); + + /* + * performance optimizations + */ + + at76c651_writereg(i2c, 0x10, 0x06); + at76c651_writereg(i2c, 0x11, 0x10); + at76c651_writereg(i2c, 0x15, 0x28); + at76c651_writereg(i2c, 0x20, 0x09); + at76c651_writereg(i2c, 0x24, 0x90); + + return 0; + +} + +static int +at76c651_set_bbfreq(struct dvb_i2c_bus *i2c) +{ + + at76c651_writereg(i2c, 0x04, 0x3f); + at76c651_writereg(i2c, 0x05, 0xee); + + return 0; + +} + +static int +at76c651_reset(struct dvb_i2c_bus *i2c) +{ + + return at76c651_writereg(i2c, 0x07, 0x01); + +} + +static int +at76c651_disable_interrupts(struct dvb_i2c_bus *i2c) +{ + + return at76c651_writereg(i2c, 0x0b, 0x00); + +} + +static int +at76c651_switch_tuner_i2c(struct dvb_i2c_bus *i2c, u8 enable) +{ + + if (enable) + return at76c651_writereg(i2c, 0x0c, 0xc2 | 0x01); + else + return at76c651_writereg(i2c, 0x0c, 0xc2); + +} + +static int +dat7021_write(struct dvb_i2c_bus *i2c, u32 tw) +{ + + int ret; + struct i2c_msg msg = + { addr:0xc2 >> 1, flags:0, buf:(u8 *) & tw, len:sizeof (tw) }; + + at76c651_switch_tuner_i2c(i2c, 1); + + ret = i2c->xfer(i2c, &msg, 1); + + at76c651_switch_tuner_i2c(i2c, 0); + + if (ret != 4) + return -EFAULT; + + at76c651_reset(i2c); + + return 0; + +} + +static int +dat7021_set_tv_freq(struct dvb_i2c_bus *i2c, u32 freq) +{ + + u32 dw; + + freq /= 1000; + + if ((freq < 48250) || (freq > 863250)) + return -EINVAL; + + /* + * formula: dw=0x17e28e06+(freq-346000UL)/8000UL*0x800000 + * or: dw=0x4E28E06+(freq-42000) / 125 * 0x20000 + */ + + dw = (freq - 42000) * 4096; + dw = dw / 125; + dw = dw * 32; + + if (freq > 394000) + dw += 0x4E28E85; + else + dw += 0x4E28E06; + + return dat7021_write(i2c, dw); + +} + +static int +at76c651_set_symbolrate(struct dvb_i2c_bus *i2c, u32 symbolrate) +{ + + u8 exponent; + u32 mantissa; + + if (symbolrate > 9360000) + return -1; + + /* + * FREF = 57800 kHz + * exponent = 10 + floor ( log2 ( symbolrate / FREF ) ) + * mantissa = ( symbolrate / FREF) * ( 1 << ( 30 - exponent ) ) + */ + + exponent = __ilog2((symbolrate << 4) / 903125); + mantissa = ((symbolrate / 3125) * (1 << (24 - exponent))) / 289; + + at76c651_writereg(i2c, 0x00, mantissa >> 13); + at76c651_writereg(i2c, 0x01, mantissa >> 5); + at76c651_writereg(i2c, 0x02, (mantissa << 3) | exponent); + + return 0; + +} + +static int +at76c651_set_qam(struct dvb_i2c_bus *i2c, fe_modulation_t qam) +{ + + u8 qamsel = 0; + + switch (qam) { + + case QPSK: + qamsel = 0x02; + break; + case QAM_16: + qamsel = 0x04; + break; + case QAM_32: + qamsel = 0x05; + break; + case QAM_64: + qamsel = 0x06; + break; + case QAM_128: + qamsel = 0x07; + break; + case QAM_256: + qamsel = 0x08; + break; +#if 0 + case QAM_512: + qamsel = 0x09; + break; + case QAM_1024: + qamsel = 0x0A; + break; +#endif + default: + return -EINVAL; + + } + + return at76c651_writereg(i2c, 0x03, qamsel); + +} + +static int +at76c651_set_inversion(struct dvb_i2c_bus *i2c, + fe_spectral_inversion_t inversion) +{ + + u8 feciqinv = at76c651_readreg(i2c, 0x60); + + switch (inversion) { + case INVERSION_OFF: + feciqinv |= 0x02; + feciqinv &= 0xFE; + break; + + case INVERSION_ON: + feciqinv |= 0x03; + break; + + case INVERSION_AUTO: + feciqinv &= 0xFC; + break; + + default: + return -EINVAL; + } + + return at76c651_writereg(i2c, 0x60, feciqinv); + +} + +static int +at76c651_set_parameters(struct dvb_i2c_bus *i2c, + struct dvb_frontend_parameters *p) +{ + + dat7021_set_tv_freq(i2c, p->frequency); + at76c651_set_symbolrate(i2c, p->u.qam.symbol_rate); + at76c651_set_inversion(i2c, p->inversion); + at76c651_set_auto_config(i2c); + + return 0; + +} + +static int +at76c651_set_defaults(struct dvb_i2c_bus *i2c) +{ + + at76c651_set_symbolrate(i2c, 6900000); + at76c651_set_qam(i2c, QAM_64); + at76c651_set_bbfreq(i2c); + at76c651_set_auto_config(i2c); + at76c651_disable_interrupts(i2c); + + return 0; + +} + +static int +at76c651_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg) +{ + + switch (cmd) { + + case FE_GET_INFO: + memcpy(arg, &at76c651_info, sizeof (struct dvb_frontend_info)); + break; + + case FE_READ_STATUS: + { + + fe_status_t *status = (fe_status_t *) arg; + u8 sync; + + /* + * Bits: FEC, CAR, EQU, TIM, AGC2, AGC1, ADC, PLL (PLL=0) + */ + sync = at76c651_readreg(fe->i2c, 0x80); + + *status = 0; + + if (sync & (0x04 | 0x10)) /* AGC1 || TIM */ + *status |= FE_HAS_SIGNAL; + + if (sync & 0x10) /* TIM */ + *status |= FE_HAS_CARRIER; + + if (sync & 0x80) /* FEC */ + *status |= FE_HAS_VITERBI; + + if (sync & 0x40) /* CAR */ + *status |= FE_HAS_SYNC; + + if ((sync & 0xF0) == 0xF0) /* TIM && EQU && CAR && FEC */ + *status |= FE_HAS_LOCK; + + break; + + } + + case FE_READ_BER: + { + u32 *ber = (u32 *) arg; + + *ber = (at76c651_readreg(fe->i2c, 0x81) & 0x0F) << 16; + *ber |= at76c651_readreg(fe->i2c, 0x82) << 8; + *ber |= at76c651_readreg(fe->i2c, 0x83); + *ber *= 10; + + break; + } + + case FE_READ_SIGNAL_STRENGTH: + { + u8 gain = ~at76c651_readreg(fe->i2c, 0x91); + + *(s32 *) arg = (gain << 8) | gain; + *(s32 *) arg = 0x0FFF; + break; + } + + case FE_READ_SNR: + *(s32 *) arg = + 0xFFFF - + ((at76c651_readreg(fe->i2c, 0x8F) << 8) | + at76c651_readreg(fe->i2c, 0x90)); + break; + + case FE_READ_UNCORRECTED_BLOCKS: + *(u32 *) arg = at76c651_readreg(fe->i2c, 0x82); + break; + + case FE_SET_FRONTEND: + return at76c651_set_parameters(fe->i2c, arg); + + case FE_GET_FRONTEND: + break; + + case FE_SLEEP: + break; + + case FE_INIT: + return at76c651_set_defaults(fe->i2c); + + case FE_RESET: + return at76c651_reset(fe->i2c); + + default: + return -ENOSYS; + } + + return 0; + +} + +static int +at76c651_attach(struct dvb_i2c_bus *i2c) +{ + + if (at76c651_readreg(i2c, 0x0e) != 0x65) { + + dprintk("no AT76C651(B) found\n"); + + return -ENODEV; + + } + + if (at76c651_readreg(i2c, 0x0F) != 0x10) { + + if (at76c651_readreg(i2c, 0x0F) == 0x11) { + + dprintk("AT76C651B found\n"); + + } else { + + dprintk("no AT76C651(B) found\n"); + + return -ENODEV; + + } + + } else { + + dprintk("AT76C651B found\n"); + + } + + at76c651_set_defaults(i2c); + + dvb_register_frontend(at76c651_ioctl, i2c, NULL, &at76c651_info); + + return 0; + +} + +static void +at76c651_detach(struct dvb_i2c_bus *i2c) +{ + + dvb_unregister_frontend(at76c651_ioctl, i2c); + + at76c651_disable_interrupts(i2c); + +} + +static int __init +at76c651_init(void) +{ + + return dvb_register_i2c_device(THIS_MODULE, at76c651_attach, + at76c651_detach); + +} + +static void __exit +at76c651_exit(void) +{ + + dvb_unregister_i2c_device(at76c651_attach); + +} + +module_init(at76c651_init); +module_exit(at76c651_exit); + +#ifdef MODULE +MODULE_DESCRIPTION("at76c651/dat7021 dvb-c frontend driver"); +MODULE_AUTHOR("Andreas Oberritter "); +#ifdef MODULE_LICENSE +MODULE_LICENSE("GPL"); +#endif +MODULE_PARM(debug, "i"); +#endif diff -Nru a/drivers/media/dvb/frontends/dvb_dummy_fe.c b/drivers/media/dvb/frontends/dvb_dummy_fe.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/frontends/dvb_dummy_fe.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,219 @@ +/* + * Driver for Dummy Frontend + * + * Written by Emard + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA.= + */ + +#include +#include + +#include "dvb_frontend.h" + +static int sct = 0; + + +/* depending on module parameter sct deliver different infos + */ + +static +struct dvb_frontend_info dvb_s_dummyfe_info = { + name: "DVB-S dummy frontend", + type: FE_QPSK, + frequency_min: 950000, + frequency_max: 2150000, + frequency_stepsize: 250, /* kHz for QPSK frontends */ + frequency_tolerance: 29500, + symbol_rate_min: 1000000, + symbol_rate_max: 45000000, +/* symbol_rate_tolerance: ???,*/ + notifier_delay: 50, /* 1/20 s */ + caps: FE_CAN_INVERSION_AUTO | + FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | + FE_CAN_QPSK +}; + +static +struct dvb_frontend_info dvb_c_dummyfe_info = { + .name = "DVB-C dummy frontend", + .type = FE_QAM, + .frequency_stepsize = 62500, + .frequency_min = 51000000, + .frequency_max = 858000000, + .symbol_rate_min = (57840000/2)/64, /* SACLK/64 == (XIN/2)/64 */ + .symbol_rate_max = (57840000/2)/4, /* SACLK/4 */ +#if 0 + frequency_tolerance: ???, + symbol_rate_tolerance: ???, /* ppm */ /* == 8% (spec p. 5) */ + notifier_delay: ?, +#endif + .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | + FE_CAN_QAM_128 | FE_CAN_QAM_256 | + FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO | + FE_CAN_CLEAN_SETUP +}; + +static struct dvb_frontend_info dvb_t_dummyfe_info = { + .name = "DVB-T dummy frontend", + .type = FE_OFDM, + .frequency_min = 0, + .frequency_max = 863250000, + .frequency_stepsize = 62500, + /*.frequency_tolerance = */ /* FIXME: 12% of SR */ + .symbol_rate_min = 0, /* FIXME */ + .symbol_rate_max = 9360000, /* FIXME */ + .symbol_rate_tolerance = 4000, + .notifier_delay = 0, + .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | + FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO | + FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | + FE_CAN_TRANSMISSION_MODE_AUTO | + FE_CAN_GUARD_INTERVAL_AUTO | + FE_CAN_HIERARCHY_AUTO, +}; + +struct dvb_frontend_info *frontend_info(void) +{ + switch(sct) + { + case 2: + return &dvb_t_dummyfe_info; + case 1: + return &dvb_c_dummyfe_info; + case 0: + default: + return &dvb_s_dummyfe_info; + } +} + + +static +int dvbdummyfe_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) +{ + switch (cmd) { + case FE_GET_INFO: + memcpy (arg, frontend_info(), + sizeof(struct dvb_frontend_info)); + break; + + case FE_READ_STATUS: + { + fe_status_t *status = arg; + *status = FE_HAS_SIGNAL + | FE_HAS_CARRIER + | FE_HAS_VITERBI + | FE_HAS_SYNC + | FE_HAS_LOCK; + break; + } + + case FE_READ_BER: + { + u32 *ber = (u32 *) arg; + *ber = 0; + break; + } + + case FE_READ_SIGNAL_STRENGTH: + { + u8 signal = 0xff; + *((u16*) arg) = (signal << 8) | signal; + break; + } + + case FE_READ_SNR: + { + u8 snr = 0xf0; + *(u16*) arg = (snr << 8) | snr; + break; + } + + case FE_READ_UNCORRECTED_BLOCKS: + *(u32*) arg = 0; + break; + + case FE_SET_FRONTEND: + break; + + case FE_GET_FRONTEND: + break; + + case FE_SLEEP: + return 0; + + case FE_INIT: + return 0; + + case FE_RESET: + return 0; + + case FE_SET_TONE: + return -EOPNOTSUPP; + + case FE_SET_VOLTAGE: + return 0; + + default: + return -EOPNOTSUPP; + } + return 0; +} + + +static +int dvbdummyfe_attach (struct dvb_i2c_bus *i2c) +{ + dvb_register_frontend (dvbdummyfe_ioctl, i2c, NULL, frontend_info()); + return 0; +} + + +static +void dvbdummyfe_detach (struct dvb_i2c_bus *i2c) +{ + dvb_unregister_frontend (dvbdummyfe_ioctl, i2c); +} + + +static +int __init init_dvbdummyfe (void) +{ + return dvb_register_i2c_device (THIS_MODULE, + dvbdummyfe_attach, + dvbdummyfe_detach); + return 0; +} + + +static +void __exit exit_dvbdummyfe (void) +{ + dvb_unregister_i2c_device (dvbdummyfe_attach); + return; +} + + +module_init(init_dvbdummyfe); +module_exit(exit_dvbdummyfe); + + +MODULE_DESCRIPTION("DVB DUMMY Frontend"); +MODULE_AUTHOR("Emard"); +MODULE_LICENSE("GPL"); +MODULE_PARM(sct, "i"); diff -Nru a/drivers/media/dvb/frontends/grundig_29504-401.c b/drivers/media/dvb/frontends/grundig_29504-401.c --- a/drivers/media/dvb/frontends/grundig_29504-401.c Sat Apr 12 14:44:06 2003 +++ b/drivers/media/dvb/frontends/grundig_29504-401.c Sat Apr 12 14:44:06 2003 @@ -25,7 +25,6 @@ #include #include -#include "compat.h" #include "dvb_frontend.h" static int debug = 0; @@ -34,14 +33,18 @@ struct dvb_frontend_info grundig_29504_401_info = { - .name = "Grundig 29504-401", - .type = FE_OFDM, - .frequency_stepsize = 166666, - .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | - FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | - FE_CAN_FEC_7_8 | FE_CAN_QPSK | - FE_CAN_QAM_16 | FE_CAN_QAM_64 | - FE_CAN_MUTE_TS + name: "Grundig 29504-401", + type: FE_OFDM, +/* frequency_min: ???,*/ +/* frequency_max: ???,*/ + frequency_stepsize: 166666, +/* frequency_tolerance: ???,*/ +/* symbol_rate_tolerance: ???,*/ + notifier_delay: 0, + caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | + FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | + FE_CAN_MUTE_TS /*| FE_CAN_CLEAN_SETUP*/ }; @@ -50,7 +53,7 @@ { int ret; u8 buf [] = { reg, data }; - struct i2c_msg msg = { .addr = 0x55, .flags = 0, .buf = buf, .len = 2 }; + struct i2c_msg msg = { addr: 0x55, flags: 0, buf: buf, len: 2 }; if ((ret = i2c->xfer (i2c, &msg, 1)) != 1) dprintk ("%s: write_reg error (reg == %02x) = %02x!\n", @@ -66,8 +69,8 @@ int ret; u8 b0 [] = { reg }; u8 b1 [] = { 0 }; - struct i2c_msg msg [] = { { .addr = 0x55, .flags = 0, .buf = b0, .len = 1 }, - { .addr = 0x55, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; + struct i2c_msg msg [] = { { addr: 0x55, flags: 0, buf: b0, len: 1 }, + { addr: 0x55, flags: I2C_M_RD, buf: b1, len: 1 } }; ret = i2c->xfer (i2c, msg, 2); @@ -82,7 +85,7 @@ int tsa5060_write (struct dvb_i2c_bus *i2c, u8 data [4]) { int ret; - struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = 4 }; + struct i2c_msg msg = { addr: 0x61, flags: 0, buf: data, len: 4 }; if ((ret = i2c->xfer (i2c, &msg, 1)) != 1) dprintk ("%s: write_reg error == %02x!\n", __FUNCTION__, ret); @@ -97,24 +100,19 @@ * frequency offset is 36000000 Hz. */ static -int tsa5060_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, u8 pwr) +int tsa5060_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq) { u32 div; u8 buf [4]; u8 cfg; - if (freq < 700000000) { - div = (36000000 + freq) / 31250; - cfg = 0x86; - } else { - div = (36000000 + freq) / 166666; - cfg = 0x88; - } + div = (36000000 + freq) / 166666; + cfg = 0x88; buf [0] = (div >> 8) & 0x7f; buf [1] = div & 0xff; buf [2] = ((div >> 10) & 0x60) | cfg; - buf [3] = pwr << 6; + buf [3] = 0xc0; return tsa5060_write (i2c, buf); } @@ -175,12 +173,13 @@ u8 val0x04; u8 val0x05; u8 val0x06; + int bw = p->bandwidth - BANDWIDTH_8_MHZ; if (param->inversion != INVERSION_ON && param->inversion != INVERSION_OFF) return -EINVAL; - if (p->bandwidth < BANDWIDTH_8_MHZ || p->bandwidth > BANDWIDTH_6_MHZ) + if (bw < 0 || bw > 2) return -EINVAL; if (p->code_rate_HP != FEC_1_2 && p->code_rate_HP != FEC_2_3 && @@ -230,6 +229,7 @@ val0x04 = (p->transmission_mode << 2) | p->guard_interval; val0x05 = fec_tab[p->code_rate_HP]; + if (p->hierarchy_information != HIERARCHY_NONE) val0x05 |= (p->code_rate_LP - FEC_1_2) << 3; @@ -269,7 +269,7 @@ void reset_and_configure (struct dvb_i2c_bus *i2c) { u8 buf [] = { 0x06 }; - struct i2c_msg msg = { .addr = 0x00, .flags = 0, .buf = buf, .len = 1 }; + struct i2c_msg msg = { addr: 0x00, flags: 0, buf: buf, len: 1 }; i2c->xfer (i2c, &msg, 1); } @@ -307,7 +307,7 @@ /*l64781_writereg (i2c, 0x19, 0x92);*/ /* Everything is two's complement, soft bit and CSI_OUT too */ - l64781_writereg (i2c, 0x1e, 0x49); + l64781_writereg (i2c, 0x1e, 0x09); return 0; } @@ -390,9 +390,8 @@ { struct dvb_frontend_parameters *p = arg; - tsa5060_set_tv_freq (i2c, p->frequency, 3); + tsa5060_set_tv_freq (i2c, p->frequency); apply_frontend_param (i2c, p); -// tsa5060_set_tv_freq (i2c, p->frequency, 0); } case FE_GET_FRONTEND: /* we could correct the frequency here, but... @@ -407,13 +406,6 @@ case FE_INIT: return init (i2c); - case FE_RESET: - //reset_afc (i2c); - apply_tps (i2c); - l64781_readreg (i2c, 0x00); /* clear interrupt registers... */ - l64781_readreg (i2c, 0x01); /* dto. */ - break; - default: dprintk ("%s: unknown command !!!\n", __FUNCTION__); return -EINVAL; @@ -428,8 +420,8 @@ { u8 b0 [] = { 0x1a }; u8 b1 [] = { 0x00 }; - struct i2c_msg msg [] = { { .addr = 0x55, .flags = 0, .buf = b0, .len = 1 }, - { .addr = 0x55, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; + struct i2c_msg msg [] = { { addr: 0x55, flags: 0, buf: b0, len: 1 }, + { addr: 0x55, flags: I2C_M_RD, buf: b1, len: 1 } }; if (i2c->xfer (i2c, msg, 2) == 2) /* probably an EEPROM... */ return -ENODEV; diff -Nru a/drivers/media/dvb/frontends/grundig_29504-491.c b/drivers/media/dvb/frontends/grundig_29504-491.c --- a/drivers/media/dvb/frontends/grundig_29504-491.c Sat Apr 12 14:44:09 2003 +++ b/drivers/media/dvb/frontends/grundig_29504-491.c Sat Apr 12 14:44:09 2003 @@ -27,7 +27,6 @@ #include #include -#include "compat.h" #include "dvb_frontend.h" static int debug = 0; @@ -36,20 +35,22 @@ static struct dvb_frontend_info grundig_29504_491_info = { - .name = "Grundig 29504-491, (TDA8083 based)", - .type = FE_QPSK, - .frequency_min = 950000, /* FIXME: guessed! */ - .frequency_max = 1400000, /* FIXME: guessed! */ - .frequency_stepsize = 125, /* kHz for QPSK frontends */ - .symbol_rate_min = 1000000, /* FIXME: guessed! */ - .symbol_rate_max = 45000000, /* FIXME: guessed! */ - .caps = FE_CAN_INVERSION_AUTO | - FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | - FE_CAN_FEC_3_4 | FE_CAN_FEC_4_5 | - FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | - FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | - FE_CAN_FEC_AUTO | FE_CAN_QPSK | - FE_CAN_MUTE_TS + name: "Grundig 29504-491, (TDA8083 based)", + type: FE_QPSK, + frequency_min: 950000, /* FIXME: guessed! */ + frequency_max: 1400000, /* FIXME: guessed! */ + frequency_stepsize: 125, /* kHz for QPSK frontends */ +/* frequency_tolerance: ???,*/ + symbol_rate_min: 1000000, /* FIXME: guessed! */ + symbol_rate_max: 45000000, /* FIXME: guessed! */ +/* symbol_rate_tolerance: ???,*/ + notifier_delay: 0, + caps: FE_CAN_INVERSION_AUTO | + FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | + FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO | + FE_CAN_QPSK | + FE_CAN_MUTE_TS | FE_CAN_CLEAN_SETUP }; @@ -71,7 +72,7 @@ { int ret; u8 buf [] = { reg, data }; - struct i2c_msg msg = { .addr = 0x68, .flags = 0, .buf = buf, .len = 2 }; + struct i2c_msg msg = { addr: 0x68, flags: 0, buf: buf, len: 2 }; ret = i2c->xfer (i2c, &msg, 1); @@ -87,8 +88,8 @@ int tda8083_readregs (struct dvb_i2c_bus *i2c, u8 reg1, u8 *b, u8 len) { int ret; - struct i2c_msg msg [] = { { .addr = 0x68, .flags = 0, .buf = ®1, .len = 1 }, - { .addr = 0x68, .flags = I2C_M_RD, .buf = b, .len = len } }; + struct i2c_msg msg [] = { { addr: 0x68, flags: 0, buf: ®1, len: 1 }, + { addr: 0x68, flags: I2C_M_RD, buf: b, len: len } }; ret = i2c->xfer (i2c, msg, 2); @@ -115,7 +116,7 @@ int tsa5522_write (struct dvb_i2c_bus *i2c, u8 data [4]) { int ret; - struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = data, .len = 4 }; + struct i2c_msg msg = { addr: 0x61, flags: 0, buf: data, len: 4 }; ret = i2c->xfer (i2c, &msg, 1); diff -Nru a/drivers/media/dvb/frontends/nxt6000.c b/drivers/media/dvb/frontends/nxt6000.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/frontends/nxt6000.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,869 @@ +/* + + NxtWave Communications - NXT6000 demodulator driver + + This driver currently supports: + + Alps TDME7 (Tuner: MITEL SP5659) + Alps TDED4 (Tuner: TI ALP510, external Nxt6000) + + Copyright (C) 2002-2003 Florian Schirmer + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "dvb_frontend.h" +#include "nxt6000.h" + +static int debug = 0; + +MODULE_DESCRIPTION("NxtWave NXT6000 DVB demodulator driver"); +MODULE_AUTHOR("Florian Schirmer"); +MODULE_LICENSE("GPL"); +MODULE_PARM(debug, "i"); + +static struct dvb_frontend_info nxt6000_info = { + + .name = "NxtWave NXT6000", + .type = FE_OFDM, + .frequency_min = 0, + .frequency_max = 863250000, + .frequency_stepsize = 62500, + /*.frequency_tolerance = */ /* FIXME: 12% of SR */ + .symbol_rate_min = 0, /* FIXME */ + .symbol_rate_max = 9360000, /* FIXME */ + .symbol_rate_tolerance = 4000, + .notifier_delay = 0, + .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | + FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO | + FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | + FE_CAN_TRANSMISSION_MODE_AUTO | + FE_CAN_GUARD_INTERVAL_AUTO | + FE_CAN_HIERARCHY_AUTO, + +}; + +#pragma pack(1) + +struct nxt6000_config { + + u8 demod_addr; + u8 tuner_addr; + u8 tuner_type; + u8 clock_inversion; + +}; + +#pragma pack() + +#define TUNER_TYPE_ALP510 0 +#define TUNER_TYPE_SP5659 1 + +#define FE2NXT(fe) ((struct nxt6000_config *)&(fe->data)) +#define FREQ2DIV(freq) ((freq + 36166667) / 166667) + +#define dprintk if (debug) printk + +static int nxt6000_write(struct dvb_i2c_bus *i2c, u8 addr, u8 reg, u8 data) +{ + + u8 buf[] = {reg, data}; + struct i2c_msg msg = {addr: addr >> 1, flags: 0, buf: buf, len: 2}; + int ret; + + if ((ret = i2c->xfer(i2c, &msg, 1)) != 1) + dprintk("nxt6000: nxt6000_write error (addr: 0x%02X, reg: 0x%02X, data: 0x%02X, ret: %d)\n", addr, reg, data, ret); + + return (ret != 1) ? -EFAULT : 0; + +} + +static u8 nxt6000_writereg(struct dvb_frontend *fe, u8 reg, u8 data) +{ + + struct nxt6000_config *nxt = FE2NXT(fe); + + return nxt6000_write(fe->i2c, nxt->demod_addr, reg, data); + +} + +static u8 nxt6000_read(struct dvb_i2c_bus *i2c, u8 addr, u8 reg) +{ + + int ret; + u8 b0[] = {reg}; + u8 b1[] = {0}; + struct i2c_msg msgs[] = {{addr: addr >> 1, flags: 0, buf: b0, len: 1}, + {addr: addr >> 1, flags: I2C_M_RD, buf: b1, len: 1}}; + + ret = i2c->xfer(i2c, msgs, 2); + + if (ret != 2) + dprintk("nxt6000: nxt6000_read error (addr: 0x%02X, reg: 0x%02X, ret: %d)\n", addr, reg, ret); + + return b1[0]; + +} + +static u8 nxt6000_readreg(struct dvb_frontend *fe, u8 reg) +{ + + struct nxt6000_config *nxt = FE2NXT(fe); + + return nxt6000_read(fe->i2c, nxt->demod_addr, reg); + +} + +static int pll_write(struct dvb_i2c_bus *i2c, u8 demod_addr, u8 tuner_addr, u8 *buf, u8 len) +{ + + struct i2c_msg msg = {addr: tuner_addr >> 1, flags: 0, buf: buf, len: len}; + int ret; + + nxt6000_write(i2c, demod_addr, ENABLE_TUNER_IIC, 0x01); /* open i2c bus switch */ + ret = i2c->xfer(i2c, &msg, 1); + nxt6000_write(i2c, demod_addr, ENABLE_TUNER_IIC, 0x00); /* close i2c bus switch */ + + if (ret != 1) + dprintk("nxt6000: pll_write error %d\n", ret); + + return (ret != 1) ? -EFAULT : 0; + +} + +static int sp5659_set_tv_freq(struct dvb_frontend *fe, u32 freq) +{ + + u8 buf[4]; + struct nxt6000_config *nxt = FE2NXT(fe); + + buf[0] = (FREQ2DIV(freq) >> 8) & 0x7F; + buf[1] = FREQ2DIV(freq) & 0xFF; + buf[2] = (((FREQ2DIV(freq) >> 15) & 0x03) << 5) | 0x85; + + if ((freq >= 174000000) && (freq < 230000000)) + buf[3] = 0x82; + else if ((freq >= 470000000) && (freq < 782000000)) + buf[3] = 0x85; + else if ((freq >= 782000000) && (freq < 863000000)) + buf[3] = 0xC5; + else + return -EINVAL; + + return pll_write(fe->i2c, nxt->demod_addr, nxt->tuner_addr, buf, 4); + +} + +static int alp510_set_tv_freq(struct dvb_frontend *fe, u32 freq) +{ + + u8 buf[4]; + struct nxt6000_config *nxt = FE2NXT(fe); + + buf[0] = (FREQ2DIV(freq) >> 8) & 0x7F; + buf[1] = FREQ2DIV(freq) & 0xFF; + buf[2] = 0x85; + +#if 0 + if ((freq >= 47000000) && (freq < 153000000)) + buf[3] = 0x01; + else if ((freq >= 153000000) && (freq < 430000000)) + buf[3] = 0x02; + else if ((freq >= 430000000) && (freq < 824000000)) + buf[3] = 0x08; + else if ((freq >= 824000000) && (freq < 863000000)) + buf[3] = 0x88; + else + return -EINVAL; +#else + if ((freq >= 47000000) && (freq < 153000000)) + buf[3] = 0x01; + else if ((freq >= 153000000) && (freq < 430000000)) + buf[3] = 0x02; + else if ((freq >= 430000000) && (freq < 824000000)) + buf[3] = 0x0C; + else if ((freq >= 824000000) && (freq < 863000000)) + buf[3] = 0x8C; + else + return -EINVAL; +#endif + + return pll_write(fe->i2c, nxt->demod_addr, nxt->tuner_addr, buf, 4); + +} + +static void nxt6000_reset(struct dvb_frontend *fe) +{ + + u8 val; + + val = nxt6000_readreg(fe, OFDM_COR_CTL); + + nxt6000_writereg(fe, OFDM_COR_CTL, val & ~COREACT); + nxt6000_writereg(fe, OFDM_COR_CTL, val | COREACT); + +} + +static int nxt6000_set_bandwidth(struct dvb_frontend *fe, fe_bandwidth_t bandwidth) +{ + + u16 nominal_rate; + int result; + + switch(bandwidth) { + + case BANDWIDTH_6_MHZ: + + nominal_rate = 0x55B7; + + break; + + case BANDWIDTH_7_MHZ: + + nominal_rate = 0x6400; + + break; + + case BANDWIDTH_8_MHZ: + + nominal_rate = 0x7249; + + break; + + default: + + return -EINVAL; + + } + + if ((result = nxt6000_writereg(fe, OFDM_TRL_NOMINALRATE_1, nominal_rate & 0xFF)) < 0) + return result; + + return nxt6000_writereg(fe, OFDM_TRL_NOMINALRATE_2, (nominal_rate >> 8) & 0xFF); + +} + +static int nxt6000_set_guard_interval(struct dvb_frontend *fe, fe_guard_interval_t guard_interval) +{ + + switch(guard_interval) { + + case GUARD_INTERVAL_1_32: + + return nxt6000_writereg(fe, OFDM_COR_MODEGUARD, 0x00 | (nxt6000_readreg(fe, OFDM_COR_MODEGUARD) & ~0x03)); + + case GUARD_INTERVAL_1_16: + + return nxt6000_writereg(fe, OFDM_COR_MODEGUARD, 0x01 | (nxt6000_readreg(fe, OFDM_COR_MODEGUARD) & ~0x03)); + + case GUARD_INTERVAL_AUTO: + case GUARD_INTERVAL_1_8: + + return nxt6000_writereg(fe, OFDM_COR_MODEGUARD, 0x02 | (nxt6000_readreg(fe, OFDM_COR_MODEGUARD) & ~0x03)); + + case GUARD_INTERVAL_1_4: + + return nxt6000_writereg(fe, OFDM_COR_MODEGUARD, 0x03 | (nxt6000_readreg(fe, OFDM_COR_MODEGUARD) & ~0x03)); + + default: + + return -EINVAL; + + } + +} + +static int nxt6000_set_inversion(struct dvb_frontend *fe, fe_spectral_inversion_t inversion) +{ + + switch(inversion) { + + case INVERSION_OFF: + + return nxt6000_writereg(fe, OFDM_ITB_CTL, 0x00); + + case INVERSION_ON: + + return nxt6000_writereg(fe, OFDM_ITB_CTL, ITBINV); + + default: + + return -EINVAL; + + } + +} + +static int nxt6000_set_transmission_mode(struct dvb_frontend *fe, fe_transmit_mode_t transmission_mode) +{ + + int result; + + switch(transmission_mode) { + + case TRANSMISSION_MODE_2K: + + if ((result = nxt6000_writereg(fe, EN_DMD_RACQ, 0x00 | (nxt6000_readreg(fe, EN_DMD_RACQ) & ~0x03))) < 0) + return result; + + return nxt6000_writereg(fe, OFDM_COR_MODEGUARD, (0x00 << 2) | (nxt6000_readreg(fe, OFDM_COR_MODEGUARD) & ~0x04)); + + case TRANSMISSION_MODE_8K: + case TRANSMISSION_MODE_AUTO: + + if ((result = nxt6000_writereg(fe, EN_DMD_RACQ, 0x02 | (nxt6000_readreg(fe, EN_DMD_RACQ) & ~0x03))) < 0) + return result; + + return nxt6000_writereg(fe, OFDM_COR_MODEGUARD, (0x01 << 2) | (nxt6000_readreg(fe, OFDM_COR_MODEGUARD) & ~0x04)); + + default: + + return -EINVAL; + + } + +} + +static void nxt6000_setup(struct dvb_frontend *fe) +{ + + struct nxt6000_config *nxt = FE2NXT(fe); + + nxt6000_writereg(fe, RS_COR_SYNC_PARAM, SYNC_PARAM); + nxt6000_writereg(fe, BER_CTRL, /*(1 << 2) |*/ (0x01 << 1) | 0x01); + nxt6000_writereg(fe, VIT_COR_CTL, VIT_COR_RESYNC); + nxt6000_writereg(fe, OFDM_COR_CTL, (0x01 << 5) | (nxt6000_readreg(fe, OFDM_COR_CTL) & 0x0F)); + nxt6000_writereg(fe, OFDM_COR_MODEGUARD, FORCEMODE8K | 0x02); + nxt6000_writereg(fe, OFDM_AGC_CTL, AGCLAST | INITIAL_AGC_BW); + nxt6000_writereg(fe, OFDM_ITB_FREQ_1, 0x06); + nxt6000_writereg(fe, OFDM_ITB_FREQ_2, 0x31); + nxt6000_writereg(fe, OFDM_CAS_CTL, (0x01 << 7) | (0x02 << 3) | 0x04); + nxt6000_writereg(fe, CAS_FREQ, 0xBB); // CHECKME + nxt6000_writereg(fe, OFDM_SYR_CTL, 1 << 2); + nxt6000_writereg(fe, OFDM_PPM_CTL_1, PPM256); + nxt6000_writereg(fe, OFDM_TRL_NOMINALRATE_1, 0x49); + nxt6000_writereg(fe, OFDM_TRL_NOMINALRATE_2, 0x72); + nxt6000_writereg(fe, ANALOG_CONTROL_0, 1 << 5); + nxt6000_writereg(fe, EN_DMD_RACQ, (1 << 7) | (3 << 4) | 2); + nxt6000_writereg(fe, DIAG_CONFIG, TB_SET); + + if (nxt->clock_inversion) + nxt6000_writereg(fe, SUB_DIAG_MODE_SEL, CLKINVERSION); + else + nxt6000_writereg(fe, SUB_DIAG_MODE_SEL, 0); + + nxt6000_writereg(fe, TS_FORMAT, 0); + +} + +static void nxt6000_dump_status(struct dvb_frontend *fe) +{ + + u8 val; + +// printk("RS_COR_STAT: 0x%02X\n", nxt6000_readreg(fe, RS_COR_STAT)); +// printk("VIT_SYNC_STATUS: 0x%02X\n", nxt6000_readreg(fe, VIT_SYNC_STATUS)); +// printk("OFDM_COR_STAT: 0x%02X\n", nxt6000_readreg(fe, OFDM_COR_STAT)); +// printk("OFDM_SYR_STAT: 0x%02X\n", nxt6000_readreg(fe, OFDM_SYR_STAT)); +// printk("OFDM_TPS_RCVD_1: 0x%02X\n", nxt6000_readreg(fe, OFDM_TPS_RCVD_1)); +// printk("OFDM_TPS_RCVD_2: 0x%02X\n", nxt6000_readreg(fe, OFDM_TPS_RCVD_2)); +// printk("OFDM_TPS_RCVD_3: 0x%02X\n", nxt6000_readreg(fe, OFDM_TPS_RCVD_3)); +// printk("OFDM_TPS_RCVD_4: 0x%02X\n", nxt6000_readreg(fe, OFDM_TPS_RCVD_4)); +// printk("OFDM_TPS_RESERVED_1: 0x%02X\n", nxt6000_readreg(fe, OFDM_TPS_RESERVED_1)); +// printk("OFDM_TPS_RESERVED_2: 0x%02X\n", nxt6000_readreg(fe, OFDM_TPS_RESERVED_2)); + + printk("NXT6000 status:"); + + val = nxt6000_readreg(fe, RS_COR_STAT); + + printk(" DATA DESCR LOCK: %d,", val & 0x01); + printk(" DATA SYNC LOCK: %d,", (val >> 1) & 0x01); + + val = nxt6000_readreg(fe, VIT_SYNC_STATUS); + + printk(" VITERBI LOCK: %d,", (val >> 7) & 0x01); + + switch((val >> 4) & 0x07) { + + case 0x00: + + printk(" VITERBI CODERATE: 1/2,"); + + break; + + case 0x01: + + printk(" VITERBI CODERATE: 2/3,"); + + break; + + case 0x02: + + printk(" VITERBI CODERATE: 3/4,"); + + break; + + case 0x03: + + printk(" VITERBI CODERATE: 5/6,"); + + case 0x04: + + printk(" VITERBI CODERATE: 7/8,"); + + break; + + default: + + printk(" VITERBI CODERATE: Reserved,"); + + } + + val = nxt6000_readreg(fe, OFDM_COR_STAT); + + printk(" CHCTrack: %d,", (val >> 7) & 0x01); + printk(" TPSLock: %d,", (val >> 6) & 0x01); + printk(" SYRLock: %d,", (val >> 5) & 0x01); + printk(" AGCLock: %d,", (val >> 4) & 0x01); + + switch(val & 0x0F) { + + case 0x00: + + printk(" CoreState: IDLE,"); + + break; + + case 0x02: + + printk(" CoreState: WAIT_AGC,"); + + break; + + case 0x03: + + printk(" CoreState: WAIT_SYR,"); + + break; + + case 0x04: + + printk(" CoreState: WAIT_PPM,"); + + case 0x01: + + printk(" CoreState: WAIT_TRL,"); + + break; + + case 0x05: + + printk(" CoreState: WAIT_TPS,"); + + break; + + case 0x06: + + printk(" CoreState: MONITOR_TPS,"); + + break; + + default: + + printk(" CoreState: Reserved,"); + + } + + val = nxt6000_readreg(fe, OFDM_SYR_STAT); + + printk(" SYRLock: %d,", (val >> 4) & 0x01); + printk(" SYRMode: %s,", (val >> 2) & 0x01 ? "8K" : "2K"); + + switch((val >> 4) & 0x03) { + + case 0x00: + + printk(" SYRGuard: 1/32,"); + + break; + + case 0x01: + + printk(" SYRGuard: 1/16,"); + + break; + + case 0x02: + + printk(" SYRGuard: 1/8,"); + + break; + + case 0x03: + + printk(" SYRGuard: 1/4,"); + + break; + + } + + val = nxt6000_readreg(fe, OFDM_TPS_RCVD_3); + + switch((val >> 4) & 0x07) { + + case 0x00: + + printk(" TPSLP: 1/2,"); + + break; + + case 0x01: + + printk(" TPSLP: 2/3,"); + + break; + + case 0x02: + + printk(" TPSLP: 3/4,"); + + break; + + case 0x03: + + printk(" TPSLP: 5/6,"); + + case 0x04: + + printk(" TPSLP: 7/8,"); + + break; + + default: + + printk(" TPSLP: Reserved,"); + + } + + switch(val & 0x07) { + + case 0x00: + + printk(" TPSHP: 1/2,"); + + break; + + case 0x01: + + printk(" TPSHP: 2/3,"); + + break; + + case 0x02: + + printk(" TPSHP: 3/4,"); + + break; + + case 0x03: + + printk(" TPSHP: 5/6,"); + + case 0x04: + + printk(" TPSHP: 7/8,"); + + break; + + default: + + printk(" TPSHP: Reserved,"); + + } + + val = nxt6000_readreg(fe, OFDM_TPS_RCVD_4); + + printk(" TPSMode: %s,", val & 0x01 ? "8K" : "2K"); + + switch((val >> 4) & 0x03) { + + case 0x00: + + printk(" TPSGuard: 1/32,"); + + break; + + case 0x01: + + printk(" TPSGuard: 1/16,"); + + break; + + case 0x02: + + printk(" TPSGuard: 1/8,"); + + break; + + case 0x03: + + printk(" TPSGuard: 1/4,"); + + break; + + } + + // Strange magic required to gain access to RF_AGC_STATUS + nxt6000_readreg(fe, RF_AGC_VAL_1); + val = nxt6000_readreg(fe, RF_AGC_STATUS); + val = nxt6000_readreg(fe, RF_AGC_STATUS); + + printk(" RF AGC LOCK: %d,", (val >> 4) & 0x01); + + printk("\n"); + +} + +static int nxt6000_ioctl(struct dvb_frontend *fe, unsigned int cmd, void *arg) +{ + + switch (cmd) { + + case FE_GET_INFO: + + memcpy(arg, &nxt6000_info, sizeof (struct dvb_frontend_info)); + + return 0; + + case FE_READ_STATUS: + { + fe_status_t *status = (fe_status_t *)arg; + + u8 core_status; + + *status = 0; + + core_status = nxt6000_readreg(fe, OFDM_COR_STAT); + + if (core_status & AGCLOCKED) + *status |= FE_HAS_SIGNAL; + + if (nxt6000_readreg(fe, OFDM_SYR_STAT) & GI14_SYR_LOCK) + *status |= FE_HAS_CARRIER; + + if (nxt6000_readreg(fe, VIT_SYNC_STATUS) & VITINSYNC) + *status |= FE_HAS_VITERBI; + + if (nxt6000_readreg(fe, RS_COR_STAT) & RSCORESTATUS) + *status |= FE_HAS_SYNC; + + if ((core_status & TPSLOCKED) && (*status == (FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC))) + *status |= FE_HAS_LOCK; + + if (debug) + nxt6000_dump_status(fe); + + return 0; + + } + + case FE_READ_BER: + { + u32 *ber = (u32 *)arg; + + *ber=0; + + return 0; + + } + + case FE_READ_SIGNAL_STRENGTH: + { +// s16 *signal = (s16 *)arg; + +// *signal=(((signed char)readreg(client, 0x16))+128)<<8; + + return 0; + + } + + case FE_READ_SNR: + { +// s16 *snr = (s16 *)arg; + +// *snr=readreg(client, 0x24)<<8; +// *snr|=readreg(client, 0x25); + + break; + } + + case FE_READ_UNCORRECTED_BLOCKS: + { + u32 *ublocks = (u32 *)arg; + + *ublocks = 0; + + break; + } + + case FE_INIT: + case FE_RESET: + + nxt6000_reset(fe); + nxt6000_setup(fe); + + break; + + case FE_SET_FRONTEND: + { + struct nxt6000_config *nxt = FE2NXT(fe); + struct dvb_frontend_parameters *param = (struct dvb_frontend_parameters *)arg; + int result; + + switch(nxt->tuner_type) { + + case TUNER_TYPE_ALP510: + + if ((result = alp510_set_tv_freq(fe, param->frequency)) < 0) + return result; + + break; + + case TUNER_TYPE_SP5659: + + if ((result = sp5659_set_tv_freq(fe, param->frequency)) < 0) + return result; + + break; + + default: + + return -EFAULT; + + } + + if ((result = nxt6000_set_bandwidth(fe, param->u.ofdm.bandwidth)) < 0) + return result; + if ((result = nxt6000_set_guard_interval(fe, param->u.ofdm.guard_interval)) < 0) + return result; + if ((result = nxt6000_set_transmission_mode(fe, param->u.ofdm.transmission_mode)) < 0) + return result; + if ((result = nxt6000_set_inversion(fe, param->inversion)) < 0) + return result; + + break; + } + + default: + + return -EOPNOTSUPP; + + } + + return 0; + +} + +static u8 demod_addr_tbl[] = {0x14, 0x18, 0x24, 0x28}; + +static int nxt6000_attach(struct dvb_i2c_bus *i2c) +{ + + u8 addr_nr; + u8 fe_count = 0; + struct nxt6000_config nxt; + + dprintk("nxt6000: attach\n"); + + for (addr_nr = 0; addr_nr < sizeof(demod_addr_tbl); addr_nr++) { + + if (nxt6000_read(i2c, demod_addr_tbl[addr_nr], OFDM_MSC_REV) != NXT6000ASICDEVICE) + continue; + + if (pll_write(i2c, demod_addr_tbl[addr_nr], 0xC0, NULL, 0) == 0) { + + nxt.tuner_addr = 0xC0; + nxt.tuner_type = TUNER_TYPE_ALP510; + nxt.clock_inversion = 1; + + dprintk("nxt6000: detected TI ALP510 tuner at 0x%02X\n", nxt.tuner_addr); + + } else if (pll_write(i2c, demod_addr_tbl[addr_nr], 0xC2, NULL, 0) == 0) { + + nxt.tuner_addr = 0xC2; + nxt.tuner_type = TUNER_TYPE_SP5659; + nxt.clock_inversion = 0; + + dprintk("nxt6000: detected MITEL SP5659 tuner at 0x%02X\n", nxt.tuner_addr); + + } else { + + printk("nxt6000: unable to detect tuner\n"); + + continue; + + } + + nxt.demod_addr = demod_addr_tbl[addr_nr]; + + dprintk("nxt6000: attached at %d:%d\n", i2c->adapter->num, i2c->id); + + dvb_register_frontend(nxt6000_ioctl, i2c, (void *)(*((u32 *)&nxt)), &nxt6000_info); + + } + + return (fe_count > 0) ? 0 : -ENODEV; + +} + +static void nxt6000_detach(struct dvb_i2c_bus *i2c) +{ + + dprintk("nxt6000: detach\n"); + + dvb_unregister_frontend(nxt6000_ioctl, i2c); + +} + +static __init int nxt6000_init(void) +{ + + dprintk("nxt6000: init\n"); + + return dvb_register_i2c_device(THIS_MODULE, nxt6000_attach, nxt6000_detach); + +} + +static __exit void nxt6000_exit(void) +{ + + dprintk("nxt6000: cleanup\n"); + + dvb_unregister_i2c_device(nxt6000_attach); + +} + +module_init(nxt6000_init); +module_exit(nxt6000_exit); diff -Nru a/drivers/media/dvb/frontends/nxt6000.h b/drivers/media/dvb/frontends/nxt6000.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/frontends/nxt6000.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,301 @@ +/**********************************************************************/ + * DRV6000reg.H + * Public Include File for DRV6000 users + * + * Copyright (C) 2001 NxtWave Communications, Inc. + * + * $Log: nxt6000.h,v $ + * Revision 1.2 2003/01/27 12:32:42 fschirmer + * Lots of bugfixes and new features + * + * Revision 1.1 2003/01/21 18:43:09 fschirmer + * Nxt6000 based frontend driver + * + * Revision 1.1 2003/01/03 02:25:45 obi + * alps tdme7 driver + * + * + * Rev 1.10 Jun 12 2002 11:28:02 dkoeger + * Updated for SA in GUi work + * + * Rev 1.9 Apr 01 2002 10:38:46 dkoeger + * Updated for 1.0.31 GUI + * + * Rev 1.8 Mar 11 2002 10:04:56 dkoeger + * Updated for 1.0.31 GUI version + * + * Rev 1.5 Dec 07 2001 14:40:40 dkoeger + * Updated for 1.0.28 GUI + * + * Rev 1.4 Nov 13 2001 11:09:00 dkoeger + * No change. + * + * Rev 1.3 Aug 23 2001 14:21:02 dkoeger + * Updated for driver version 2.1.9 + * + * Rev 1.2 Jul 09 2001 09:20:04 dkoeger + * Updated for 1.0.18 + * + * Rev 1.1 Jun 13 2001 16:14:24 dkoeger + * Updated to reflect NXT6000 GUI BETA 1.0.11 6/13/2001 + **********************************************************************/ + + +/* Nxt6000 Register Addresses and Bit Masks */ + +/* Maximum Register Number */ +#define MAXNXT6000REG (0x9A) + +/* 0x1B A_VIT_BER_0 aka 0x3A */ +#define A_VIT_BER_0 (0x1B) + +/* 0x1D A_VIT_BER_TIMER_0 aka 0x38 */ +#define A_VIT_BER_TIMER_0 (0x1D) + +/* 0x21 RS_COR_STAT */ +#define RS_COR_STAT (0x21) +#define RSCORESTATUS (0x03) + +/* 0x22 RS_COR_INTEN */ +#define RS_COR_INTEN (0x22) + +/* 0x23 RS_COR_INSTAT */ +#define RS_COR_INSTAT (0x23) +#define INSTAT_ERROR (0x04) +#define LOCK_LOSS_BITS (0x03) + +/* 0x24 RS_COR_SYNC_PARAM */ +#define RS_COR_SYNC_PARAM (0x24) +#define SYNC_PARAM (0x03) + +/* 0x25 BER_CTRL */ +#define BER_CTRL (0x25) +#define BER_ENABLE (0x02) +#define BER_RESET (0x01) + +/* 0x26 BER_PAY */ +#define BER_PAY (0x26) + +/* 0x27 BER_PKT_L */ +#define BER_PKT_L (0x27) +#define BER_PKTOVERFLOW (0x80) + +/* 0x30 VIT_COR_CTL */ +#define VIT_COR_CTL (0x30) +#define BER_CONTROL (0x02) +#define VIT_COR_MASK (0x82) +#define VIT_COR_RESYNC (0x80) + + +/* 0x32 VIT_SYNC_STATUS */ +#define VIT_SYNC_STATUS (0x32) +#define VITINSYNC (0x80) + +/* 0x33 VIT_COR_INTEN */ +#define VIT_COR_INTEN (0x33) +#define GLOBAL_ENABLE (0x80) + +/* 0x34 VIT_COR_INTSTAT */ +#define VIT_COR_INTSTAT (0x34) +#define BER_DONE (0x08) +#define BER_OVERFLOW (0x10) + +/* 0x38 OFDM_BERTimer */ /* Use the alias registers */ +#define A_VIT_BER_TIMER_0 (0x1D) + +/* 0x3A VIT_BER_TIMER_0 */ /* Use the alias registers */ +#define A_VIT_BER_0 (0x1B) + +/* 0x40 OFDM_COR_CTL */ +#define OFDM_COR_CTL (0x40) +#define COREACT (0x20) +#define HOLDSM (0x10) +#define WAIT_AGC (0x02) +#define WAIT_SYR (0x03) + +/* 0x41 OFDM_COR_STAT */ +#define OFDM_COR_STAT (0x41) +#define COR_STATUS (0x0F) +#define MONITOR_TPS (0x06) +#define TPSLOCKED (0x40) +#define AGCLOCKED (0x10) + +/* 0x42 OFDM_COR_INTEN */ +#define OFDM_COR_INTEN (0x42) +#define TPSRCVBAD (0x04) +#define TPSRCVCHANGED (0x02) +#define TPSRCVUPDATE (0x01) + +/* 0x43 OFDM_COR_INSTAT */ +#define OFDM_COR_INSTAT (0x43) + +/* 0x44 OFDM_COR_MODEGUARD */ +#define OFDM_COR_MODEGUARD (0x44) +#define FORCEMODE (0x08) +#define FORCEMODE8K (0x04) + +/* 0x45 OFDM_AGC_CTL */ +#define OFDM_AGC_CTL (0x45) +#define INITIAL_AGC_BW (0x08) +#define AGCNEG (0x02) +#define AGCLAST (0x10) + +/* 0x48 OFDM_AGC_TARGET */ +#define OFDM_AGC_TARGET (0x48) +#define OFDM_AGC_TARGET_DEFAULT (0x28) +#define OFDM_AGC_TARGET_IMPULSE (0x38) + +/* 0x49 OFDM_AGC_GAIN_1 */ +#define OFDM_AGC_GAIN_1 (0x49) + +/* 0x4B OFDM_ITB_CTL */ +#define OFDM_ITB_CTL (0x4B) +#define ITBINV (0x01) + +/* 0x4C OFDM_ITB_FREQ_1 */ +#define OFDM_ITB_FREQ_1 (0x4C) + +/* 0x4D OFDM_ITB_FREQ_2 */ +#define OFDM_ITB_FREQ_2 (0x4D) + +/* 0x4E OFDM_CAS_CTL */ +#define OFDM_CAS_CTL (0x4E) +#define ACSDIS (0x40) +#define CCSEN (0x80) + +/* 0x4F CAS_FREQ */ +#define CAS_FREQ (0x4F) + +/* 0x51 OFDM_SYR_CTL */ +#define OFDM_SYR_CTL (0x51) +#define SIXTH_ENABLE (0x80) +#define SYR_TRACKING_DISABLE (0x01) + +/* 0x52 OFDM_SYR_STAT */ +#define OFDM_SYR_STAT (0x52) +#define GI14_2K_SYR_LOCK (0x13) +#define GI14_8K_SYR_LOCK (0x17) +#define GI14_SYR_LOCK (0x10) + +/* 0x55 OFDM_SYR_OFFSET_1 */ +#define OFDM_SYR_OFFSET_1 (0x55) + +/* 0x56 OFDM_SYR_OFFSET_2 */ +#define OFDM_SYR_OFFSET_2 (0x56) + +/* 0x58 OFDM_SCR_CTL */ +#define OFDM_SCR_CTL (0x58) +#define SYR_ADJ_DECAY_MASK (0x70) +#define SYR_ADJ_DECAY (0x30) + +/* 0x59 OFDM_PPM_CTL_1 */ +#define OFDM_PPM_CTL_1 (0x59) +#define PPMMAX_MASK (0x30) +#define PPM256 (0x30) + +/* 0x5B OFDM_TRL_NOMINALRATE_1 */ +#define OFDM_TRL_NOMINALRATE_1 (0x5B) + +/* 0x5C OFDM_TRL_NOMINALRATE_2 */ +#define OFDM_TRL_NOMINALRATE_2 (0x5C) + +/* 0x5D OFDM_TRL_TIME_1 */ +#define OFDM_TRL_TIME_1 (0x5D) + +/* 0x60 OFDM_CRL_FREQ_1 */ +#define OFDM_CRL_FREQ_1 (0x60) + +/* 0x63 OFDM_CHC_CTL_1 */ +#define OFDM_CHC_CTL_1 (0x63) +#define MANMEAN1 (0xF0); +#define CHCFIR (0x01) + +/* 0x64 OFDM_CHC_SNR */ +#define OFDM_CHC_SNR (0x64) + +/* 0x65 OFDM_BDI_CTL */ +#define OFDM_BDI_CTL (0x65) +#define LP_SELECT (0x02) + +/* 0x67 OFDM_TPS_RCVD_1 */ +#define OFDM_TPS_RCVD_1 (0x67) +#define TPSFRAME (0x03) + +/* 0x68 OFDM_TPS_RCVD_2 */ +#define OFDM_TPS_RCVD_2 (0x68) + +/* 0x69 OFDM_TPS_RCVD_3 */ +#define OFDM_TPS_RCVD_3 (0x69) + +/* 0x6A OFDM_TPS_RCVD_4 */ +#define OFDM_TPS_RCVD_4 (0x6A) + +/* 0x6B OFDM_TPS_RESERVED_1 */ +#define OFDM_TPS_RESERVED_1 (0x6B) + +/* 0x6C OFDM_TPS_RESERVED_2 */ +#define OFDM_TPS_RESERVED_2 (0x6C) + +/* 0x73 OFDM_MSC_REV */ +#define OFDM_MSC_REV (0x73) + +/* 0x76 OFDM_SNR_CARRIER_2 */ +#define OFDM_SNR_CARRIER_2 (0x76) +#define MEAN_MASK (0x80) +#define MEANBIT (0x80) + +/* 0x80 ANALOG_CONTROL_0 */ +#define ANALOG_CONTROL_0 (0x80) +#define POWER_DOWN_ADC (0x40) + +/* 0x81 ENABLE_TUNER_IIC */ +#define ENABLE_TUNER_IIC (0x81) +#define ENABLE_TUNER_BIT (0x01) + +/* 0x82 EN_DMD_RACQ */ +#define EN_DMD_RACQ (0x82) +#define EN_DMD_RACQ_REG_VAL (0x81) +#define EN_DMD_RACQ_REG_VAL_14 (0x01) + +/* 0x84 SNR_COMMAND */ +#define SNR_COMMAND (0x84) +#define SNRStat (0x80) + +/* 0x85 SNRCARRIERNUMBER_LSB */ +#define SNRCARRIERNUMBER_LSB (0x85) + +/* 0x87 SNRMINTHRESHOLD_LSB */ +#define SNRMINTHRESHOLD_LSB (0x87) + +/* 0x89 SNR_PER_CARRIER_LSB */ +#define SNR_PER_CARRIER_LSB (0x89) + +/* 0x8B SNRBELOWTHRESHOLD_LSB */ +#define SNRBELOWTHRESHOLD_LSB (0x8B) + +/* 0x91 RF_AGC_VAL_1 */ +#define RF_AGC_VAL_1 (0x91) + +/* 0x92 RF_AGC_STATUS */ +#define RF_AGC_STATUS (0x92) + +/* 0x98 DIAG_CONFIG */ +#define DIAG_CONFIG (0x98) +#define DIAG_MASK (0x70) +#define TB_SET (0x10) +#define TRAN_SELECT (0x07) +#define SERIAL_SELECT (0x01) + +/* 0x99 SUB_DIAG_MODE_SEL */ +#define SUB_DIAG_MODE_SEL (0x99) +#define CLKINVERSION (0x01) + +/* 0x9A TS_FORMAT */ +#define TS_FORMAT (0x9A) +#define ERROR_SENSE (0x08) +#define VALID_SENSE (0x04) +#define SYNC_SENSE (0x02) +#define GATED_CLOCK (0x01) + +#define NXT6000ASICDEVICE (0x0b) + diff -Nru a/drivers/media/dvb/frontends/stv0299.c b/drivers/media/dvb/frontends/stv0299.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/frontends/stv0299.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,880 @@ +/* + Universal driver for STV0299/TDA5059/SL1935 based + DVB QPSK frontends + + Alps BSRU6, LG TDQB-S00x + + Copyright (C) 2001-2002 Convergence Integrated Media GmbH + , + , + + + Philips SU1278/SH + + Copyright (C) 2002 by Peter Schildmann + + + LG TDQF-S001F + + Copyright (C) 2002 Felix Domke + & Andreas Oberritter + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include + +#include "dvb_frontend.h" + +static int debug = 0; +#define dprintk if (debug) printk + +/* frontend types */ +#define UNKNOWN_FRONTEND -1 +#define PHILIPS_SU1278SH 0 +#define ALPS_BSRU6 1 +#define LG_TDQF_S001F 2 + +/* Master Clock = 88 MHz */ +#define M_CLK (88000000UL) + +static +struct dvb_frontend_info uni0299_info = { + name: "STV0299/TSA5059/SL1935 based", + type: FE_QPSK, + frequency_min: 950000, + frequency_max: 2150000, + frequency_stepsize: 125, /* kHz for QPSK frontends */ + frequency_tolerance: M_CLK/2000, + symbol_rate_min: 1000000, + symbol_rate_max: 45000000, + symbol_rate_tolerance: 500, /* ppm */ + notifier_delay: 0, + caps: FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | + FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | + FE_CAN_QPSK | + FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO | + FE_CAN_CLEAN_SETUP +}; + + +static +u8 init_tab [] = { + /* clock registers */ + 0x01, 0x15, /* K = 0, DIRCLK = 0, M = 0x15 */ + 0x02, 0x30, /* STDBY = 0, VCO = 0 (ON), SERCLK = 0, P = 0 */ + /* f_VCO = 4MHz * 4 * (M+1) / (K+1) = 352 MHz */ + 0x03, 0x00, /* auxiliary clock not used */ + 0x04, 0x7d, /* F22FR = 0x7d */ + /* F22 = f_VCO / 128 / 0x7d = 22 kHz */ + + /* I2C bus repeater */ + 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */ + + /* general purpose DAC registers */ + 0x06, 0x40, /* DAC not used, set to high impendance mode */ + 0x07, 0x00, /* DAC LSB */ + + /* DiSEqC registers */ + 0x08, 0x40, /* DiSEqC off */ + 0x09, 0x00, /* FIFO */ + + /* Input/Output configuration register */ + 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */ + /* OP0 ctl = Normal, OP0 val = 1 (18 V) */ + /* Nyquist filter = 00, QPSK reverse = 0 */ + + /* AGC1 control register */ + 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */ + + /* Timing loop register */ + 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */ + + 0x10, 0x3f, // AGC2 0x3d + 0x11, 0x84, + 0x12, 0xb5, // Lock detect: -64 Carrier freq detect:on + 0x13, 0xb6, // alpha_car b:4 a:0 noise est:256ks derot:on + 0x14, 0x93, // beat carc:0 d:0 e:0xf phase detect algo: 1 + 0x15, 0xc9, // lock detector threshold + + 0x16, 0x1d, /* AGC1 integrator value */ + 0x17, 0x00, + 0x18, 0x14, + 0x19, 0xf2, + + 0x1a, 0x11, + + 0x1b, 0x9c, + 0x1c, 0x00, + 0x1d, 0x00, + 0x1e, 0x0b, + 0x1f, 0x50, + + 0x20, 0x00, + 0x21, 0x00, + 0x22, 0x00, + 0x23, 0x00, + 0x24, 0xff, + 0x25, 0xff, + 0x26, 0xff, + + 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0 + 0x29, 0x1e, // 1/2 threshold + 0x2a, 0x14, // 2/3 threshold + 0x2b, 0x0f, // 3/4 threshold + 0x2c, 0x09, // 5/6 threshold + 0x2d, 0x05, // 7/8 threshold + 0x2e, 0x01, + + 0x31, 0x1f, // test all FECs + + 0x32, 0x19, // viterbi and synchro search + 0x33, 0xfc, // rs control + 0x34, 0x93, // error control + + 0x0b, 0x00, + 0x27, 0x00, + 0x2f, 0x00, + 0x30, 0x00, + 0x35, 0x00, + 0x36, 0x00, + 0x37, 0x00, + 0x38, 0x00, + 0x39, 0x00, + 0x3a, 0x00, + 0x3b, 0x00, + 0x3c, 0x00, + 0x3d, 0x00, + 0x3e, 0x00, + 0x3f, 0x00, + 0x40, 0x00, + 0x41, 0x00, + 0x42, 0x00, + 0x43, 0x00, + 0x44, 0x00, + 0x45, 0x00, + 0x46, 0x00, + 0x47, 0x00, + 0x48, 0x00, + 0x49, 0x00, + 0x4a, 0x00, + 0x4b, 0x00, + 0x4c, 0x00, + 0x4d, 0x00, + 0x4e, 0x00, + 0x4f, 0x00 +}; + + +static +int stv0299_writereg (struct dvb_i2c_bus *i2c, u8 reg, u8 data) +{ + int ret; + u8 buf [] = { reg, data }; + struct i2c_msg msg = { addr: 0x68, flags: 0, buf: buf, len: 2 }; + + dprintk ("%s\n", __FUNCTION__); + + ret = i2c->xfer (i2c, &msg, 1); + + if (ret != 1) + dprintk("%s: writereg error (reg == 0x%02x, val == 0x%02x, ret == %i)\n", + __FUNCTION__, reg, data, ret); + + return (ret != 1) ? -1 : 0; +} + + +static +u8 stv0299_readreg (struct dvb_i2c_bus *i2c, u8 reg) +{ + int ret; + u8 b0 [] = { reg }; + u8 b1 [] = { 0 }; + struct i2c_msg msg [] = { { addr: 0x68, flags: 0, buf: b0, len: 1 }, + { addr: 0x68, flags: I2C_M_RD, buf: b1, len: 1 } }; + + dprintk ("%s\n", __FUNCTION__); + + ret = i2c->xfer (i2c, msg, 2); + + if (ret != 2) + dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); + + return b1[0]; +} + + +static +int stv0299_readregs (struct dvb_i2c_bus *i2c, u8 reg1, u8 *b, u8 len) +{ + int ret; + struct i2c_msg msg [] = { { addr: 0x68, flags: 0, buf: ®1, len: 1 }, + { addr: 0x68, flags: I2C_M_RD, buf: b, len: len } }; + + dprintk ("%s\n", __FUNCTION__); + + ret = i2c->xfer (i2c, msg, 2); + + if (ret != 2) + dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); + + return ret == 2 ? 0 : -1; +} + + +static +int pll_write (struct dvb_i2c_bus *i2c, u8 data [4], int ftype) +{ + int ret; + u8 rpt1 [] = { 0x05, 0xb5 }; /* enable i2c repeater on stv0299 */ + /* TSA5059 i2c-bus address */ + u8 addr = (ftype == PHILIPS_SU1278SH) ? 0x60 : 0x61; + struct i2c_msg msg [] = {{ addr: 0x68, flags: 0, buf: rpt1, len: 2 }, + { addr: addr, flags: 0, buf: data, len: 4 }}; + + dprintk ("%s\n", __FUNCTION__); + + if (ftype == LG_TDQF_S001F || ftype == ALPS_BSRU6) { + ret = i2c->xfer (i2c, &msg[0], 1); + ret += i2c->xfer (i2c, &msg[1], 1); + } + else { + ret = i2c->xfer (i2c, msg, 2); + } + + if (ret != 2) + dprintk("%s: i/o error (ret == %i)\n", __FUNCTION__, ret); + + return (ret != 2) ? -1 : 0; +} + + +static +int sl1935_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, int ftype) +{ + u8 buf[4]; + u32 div; + + u32 ratios[] = { 2000, 1000, 500, 250, 125 }; + u8 ratio; + + for (ratio = 4; ratio > 0; ratio--) + if ((freq / ratios[ratio]) <= 0x3fff) + break; + + div = freq / ratios[ratio]; + + buf[0] = (freq >> 8) & 0x7f; + buf[1] = freq & 0xff; + buf[2] = 0x80 | ratio; + + if (freq < 1531000) + buf[3] = 0x10; + else + buf[3] = 0x00; + + return pll_write (i2c, buf, ftype); +} + +/** + * set up the downconverter frequency divisor for a + * reference clock comparision frequency of 125 kHz. + */ +static +int tsa5059_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, int ftype) +{ + u32 div = freq / 125; + + u8 buf[4] = { (div >> 8) & 0x7f, div & 0xff, 0x84 }; + + if (ftype == PHILIPS_SU1278SH) + /* activate f_xtal/f_comp signal output */ + /* charge pump current C0/C1 = 00 */ + buf[3] = 0x20; + else + buf[3] = freq > 1530000 ? 0xc0 : 0xc4; + + dprintk ("%s\n", __FUNCTION__); + + return pll_write (i2c, buf, ftype); +} + +static +int pll_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, int ftype) +{ + if (ftype == LG_TDQF_S001F) + return sl1935_set_tv_freq(i2c, freq, ftype); + else + return tsa5059_set_tv_freq(i2c, freq, ftype); +} + +#if 0 +static +int tsa5059_read_status (struct dvb_i2c_bus *i2c) +{ + int ret; + u8 rpt1 [] = { 0x05, 0xb5 }; + u8 stat [] = { 0 }; + + struct i2c_msg msg [] = {{ addr: 0x68, flags: 0, buf: rpt1, len: 2 }, + { addr: 0x60, flags: I2C_M_RD, buf: stat, len: 1 }}; + + dprintk ("%s\n", __FUNCTION__); + + ret = i2c->xfer (i2c, msg, 2); + + if (ret != 2) + dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); + + return stat[0]; +} +#endif + + +static +int stv0299_init (struct dvb_i2c_bus *i2c, int ftype) +{ + int i; + + dprintk("stv0299: init chip\n"); + + for (i=0; i 4) + return FEC_AUTO; + + return fec_tab [index]; +} + + +static +int stv0299_wait_diseqc_fifo (struct dvb_i2c_bus *i2c, int timeout) +{ + unsigned long start = jiffies; + + dprintk ("%s\n", __FUNCTION__); + + while (stv0299_readreg(i2c, 0x0a) & 1) { + if (jiffies - start > timeout) { + dprintk ("%s: timeout!!\n", __FUNCTION__); + return -ETIMEDOUT; + } + current->state = TASK_INTERRUPTIBLE; + schedule_timeout (1); + }; + + return 0; +} + + +static +int stv0299_wait_diseqc_idle (struct dvb_i2c_bus *i2c, int timeout) +{ + unsigned long start = jiffies; + + dprintk ("%s\n", __FUNCTION__); + + while ((stv0299_readreg(i2c, 0x0a) & 3) != 2 ) { + if (jiffies - start > timeout) { + dprintk ("%s: timeout!!\n", __FUNCTION__); + return -ETIMEDOUT; + } + current->state = TASK_INTERRUPTIBLE; + schedule_timeout (1); + }; + + return 0; +} + + +static +int stv0299_send_diseqc_msg (struct dvb_i2c_bus *i2c, + struct dvb_diseqc_master_cmd *m) +{ + u8 val; + int i; + + dprintk ("%s\n", __FUNCTION__); + + if (stv0299_wait_diseqc_idle (i2c, 100) < 0) + return -ETIMEDOUT; + + val = stv0299_readreg (i2c, 0x08); + + if (stv0299_writereg (i2c, 0x08, (val & ~0x7) | 0x6)) /* DiSEqC mode */ + return -EREMOTEIO; + + for (i=0; imsg_len; i++) { + if (stv0299_wait_diseqc_fifo (i2c, 100) < 0) + return -ETIMEDOUT; + + if (stv0299_writereg (i2c, 0x09, m->msg[i])) + return -EREMOTEIO; + } + + if (stv0299_wait_diseqc_idle (i2c, 100) < 0) + return -ETIMEDOUT; + + return 0; +} + + +static +int stv0299_send_diseqc_burst (struct dvb_i2c_bus *i2c, fe_sec_mini_cmd_t burst) +{ + u8 val; + + dprintk ("%s\n", __FUNCTION__); + + if (stv0299_wait_diseqc_idle (i2c, 100) < 0) + return -ETIMEDOUT; + + val = stv0299_readreg (i2c, 0x08); + + if (stv0299_writereg (i2c, 0x08, (val & ~0x7) | 0x2)) /* burst mode */ + return -EREMOTEIO; + + if (stv0299_writereg (i2c, 0x09, burst == SEC_MINI_A ? 0x00 : 0xff)) + return -EREMOTEIO; + + if (stv0299_wait_diseqc_idle (i2c, 100) < 0) + return -ETIMEDOUT; + + if (stv0299_writereg (i2c, 0x08, val)) + return -EREMOTEIO; + + return 0; +} + + +static +int stv0299_set_tone (struct dvb_i2c_bus *i2c, fe_sec_tone_mode_t tone) +{ + u8 val; + + dprintk ("%s\n", __FUNCTION__); + + if (stv0299_wait_diseqc_idle (i2c, 100) < 0) + return -ETIMEDOUT; + + val = stv0299_readreg (i2c, 0x08); + + switch (tone) { + case SEC_TONE_ON: + return stv0299_writereg (i2c, 0x08, val | 0x3); + case SEC_TONE_OFF: + return stv0299_writereg (i2c, 0x08, (val & ~0x3) | 0x02); + default: + return -EINVAL; + }; +} + + +static +int stv0299_set_voltage (struct dvb_i2c_bus *i2c, fe_sec_voltage_t voltage) +{ + u8 val; + + dprintk ("%s\n", __FUNCTION__); + + val = stv0299_readreg (i2c, 0x0c); + val &= 0x0f; + val |= 0x40; /* LNB power on */ + + switch (voltage) { + case SEC_VOLTAGE_13: + return stv0299_writereg (i2c, 0x0c, val); + case SEC_VOLTAGE_18: + return stv0299_writereg (i2c, 0x0c, val | 0x10); + default: + return -EINVAL; + }; +} + + +static +int stv0299_set_symbolrate (struct dvb_i2c_bus *i2c, u32 srate) +{ + u32 ratio; + u32 tmp; + u8 aclk = 0xb4, bclk = 0x51; + + if (srate > M_CLK) + srate = M_CLK; + if (srate < 500000) + srate = 500000; + + if (srate < 30000000) { aclk = 0xb6; bclk = 0x53; } + if (srate < 14000000) { aclk = 0xb7; bclk = 0x53; } + if (srate < 7000000) { aclk = 0xb7; bclk = 0x4f; } + if (srate < 3000000) { aclk = 0xb7; bclk = 0x4b; } + if (srate < 1500000) { aclk = 0xb7; bclk = 0x47; } + +#define FIN (M_CLK >> 4) + + tmp = srate << 4; + ratio = tmp / FIN; + + tmp = (tmp % FIN) << 8; + ratio = (ratio << 8) + tmp / FIN; + + tmp = (tmp % FIN) << 8; + ratio = (ratio << 8) + tmp / FIN; + + stv0299_writereg (i2c, 0x13, aclk); + stv0299_writereg (i2c, 0x14, bclk); + stv0299_writereg (i2c, 0x1f, (ratio >> 16) & 0xff); + stv0299_writereg (i2c, 0x20, (ratio >> 8) & 0xff); + stv0299_writereg (i2c, 0x21, (ratio ) & 0xf0); + + return 0; +} + + +static +int stv0299_get_symbolrate (struct dvb_i2c_bus *i2c) +{ + u32 Mclk = M_CLK / 4096L; + u32 srate; + s32 offset; + u8 sfr[3]; + s8 rtf; + + dprintk ("%s\n", __FUNCTION__); + + stv0299_readregs (i2c, 0x1f, sfr, 3); + stv0299_readregs (i2c, 0x1a, &rtf, 1); + + srate = (sfr[0] << 8) | sfr[1]; + srate *= Mclk; + srate /= 16; + srate += (sfr[2] >> 4) * Mclk / 256; + + offset = (s32) rtf * (srate / 4096L); + offset /= 128; + + srate += offset; + + srate += 1000; + srate /= 2000; + srate *= 2000; + + return srate; +} + + +static +int uni0299_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) +{ + int tuner_type = (int)fe->data; + struct dvb_i2c_bus *i2c = fe->i2c; + + dprintk ("%s\n", __FUNCTION__); + + switch (cmd) { + case FE_GET_INFO: + memcpy (arg, &uni0299_info, sizeof(struct dvb_frontend_info)); + break; + + case FE_READ_STATUS: + { + fe_status_t *status = (fe_status_t *) arg; + u8 signal = 0xff - stv0299_readreg (i2c, 0x18); + u8 sync = stv0299_readreg (i2c, 0x1b); + + dprintk ("VSTATUS: 0x%02x\n", sync); + + *status = 0; + + if (signal > 10) + *status |= FE_HAS_SIGNAL; + + if (sync & 0x80) + *status |= FE_HAS_CARRIER; + + if (sync & 0x10) + *status |= FE_HAS_VITERBI; + + if (sync & 0x08) + *status |= FE_HAS_SYNC; + + if ((sync & 0x98) == 0x98) + *status |= FE_HAS_LOCK; + + break; + } + + case FE_READ_BER: + *((u32*) arg) = (stv0299_readreg (i2c, 0x1d) << 8) + | stv0299_readreg (i2c, 0x1e); + break; + + case FE_READ_SIGNAL_STRENGTH: + { + s32 signal = 0xffff - ((stv0299_readreg (i2c, 0x18) << 8) + | stv0299_readreg (i2c, 0x19)); + + dprintk ("AGC2I: 0x%02x%02x, signal=0x%04x\n", + stv0299_readreg (i2c, 0x18), + stv0299_readreg (i2c, 0x19), signal); + + signal = signal * 5 / 4; + *((u16*) arg) = (signal > 0xffff) ? 0xffff : + (signal < 0) ? 0 : signal; + break; + } + case FE_READ_SNR: + { + s32 snr = 0xffff - ((stv0299_readreg (i2c, 0x24) << 8) + | stv0299_readreg (i2c, 0x25)); + snr = 3 * (snr - 0xa100); + *((u16*) arg) = (snr > 0xffff) ? 0xffff : + (snr < 0) ? 0 : snr; + break; + } + case FE_READ_UNCORRECTED_BLOCKS: + *((u32*) arg) = 0; /* the stv0299 can't measure BER and */ + return -EOPNOTSUPP; /* errors at the same time.... */ + + case FE_SET_FRONTEND: + { + struct dvb_frontend_parameters *p = arg; + + pll_set_tv_freq (i2c, p->frequency, tuner_type); + stv0299_set_FEC (i2c, p->u.qpsk.fec_inner); + stv0299_set_symbolrate (i2c, p->u.qpsk.symbol_rate); + stv0299_check_inversion (i2c); + /* pll_set_tv_freq (i2c, p->frequency, tuner_type); */ + stv0299_writereg (i2c, 0x22, 0x00); + stv0299_writereg (i2c, 0x23, 0x00); + stv0299_readreg (i2c, 0x23); + stv0299_writereg (i2c, 0x12, 0xb9); + + /* printk ("%s: tsa5059 status: %x\n", __FUNCTION__, tsa5059_read_status(i2c)); */ + break; + } + + case FE_GET_FRONTEND: + { + struct dvb_frontend_parameters *p = arg; + s32 derot_freq; + + derot_freq = (s32)(s16) ((stv0299_readreg (i2c, 0x22) << 8) + | stv0299_readreg (i2c, 0x23)); + + derot_freq *= (M_CLK >> 16); + derot_freq += 500; + derot_freq /= 1000; + + p->frequency += derot_freq; + p->inversion = (stv0299_readreg (i2c, 0x0c) & 1) ? + INVERSION_OFF : INVERSION_ON; + p->u.qpsk.fec_inner = stv0299_get_fec (i2c); + p->u.qpsk.symbol_rate = stv0299_get_symbolrate (i2c); + break; + } + + case FE_SLEEP: + stv0299_writereg (i2c, 0x0c, 0x00); /* LNB power off! */ + stv0299_writereg (i2c, 0x02, 0x80); + break; + + case FE_INIT: + return stv0299_init (i2c, tuner_type); + + case FE_RESET: + stv0299_writereg (i2c, 0x22, 0x00); + stv0299_writereg (i2c, 0x23, 0x00); + stv0299_readreg (i2c, 0x23); + stv0299_writereg (i2c, 0x12, 0xb9); + break; + + case FE_DISEQC_SEND_MASTER_CMD: + return stv0299_send_diseqc_msg (i2c, arg); + + case FE_DISEQC_SEND_BURST: + return stv0299_send_diseqc_burst (i2c, (fe_sec_mini_cmd_t) arg); + + case FE_SET_TONE: + return stv0299_set_tone (i2c, (fe_sec_tone_mode_t) arg); + + case FE_SET_VOLTAGE: + return stv0299_set_voltage (i2c, (fe_sec_voltage_t) arg); + + default: + return -EOPNOTSUPP; + }; + + return 0; +} + +static +int probe_tuner (struct dvb_i2c_bus *i2c) +{ + int type; + + /* read the status register of TSA5059 */ + u8 rpt[] = { 0x05, 0xb5 }; + u8 stat [] = { 0 }; + struct i2c_msg msg1 [] = {{ addr: 0x68, flags: 0, buf: rpt, len: 2 }, + { addr: 0x60, flags: I2C_M_RD, buf: stat, len: 1 }}; + struct i2c_msg msg2 [] = {{ addr: 0x68, flags: 0, buf: rpt, len: 2 }, + { addr: 0x61, flags: I2C_M_RD, buf: stat, len: 1 }}; + + if (i2c->xfer(i2c, msg1, 2) == 2) { + type = PHILIPS_SU1278SH; + printk ("%s: setup for tuner SU1278/SH\n", __FILE__); + } else if (i2c->xfer(i2c, msg2, 2) == 2) { +if (0) { // if ((stat[0] & 0x3f) == 0) { + type = LG_TDQF_S001F; + printk ("%s: setup for tuner TDQF-S001F\n", __FILE__); + } + else { + type = ALPS_BSRU6; + printk ("%s: setup for tuner BSRU6, TDQB-S00x\n", __FILE__); + } + } else { + type = UNKNOWN_FRONTEND; + printk ("%s: unknown PLL synthesizer, " + "please report to !!\n", + __FILE__); + } + return type; +} + + +static +int uni0299_attach (struct dvb_i2c_bus *i2c) +{ + int tuner_type; + u8 id = stv0299_readreg (i2c, 0x00); + + dprintk ("%s\n", __FUNCTION__); + + /* register 0x00 contains 0xa1 for STV0299 and STV0299B */ + /* register 0x00 might contain 0x80 when returning from standby */ + if (id != 0xa1 && id != 0x80) + return -ENODEV; + + if ((tuner_type = probe_tuner(i2c)) < 0) + return -ENODEV; + + dvb_register_frontend (uni0299_ioctl, i2c, (void*) tuner_type, + &uni0299_info); + + return 0; +} + + +static +void uni0299_detach (struct dvb_i2c_bus *i2c) +{ + dprintk ("%s\n", __FUNCTION__); + + dvb_unregister_frontend (uni0299_ioctl, i2c); +} + + +static +int __init init_uni0299 (void) +{ + dprintk ("%s\n", __FUNCTION__); + + return dvb_register_i2c_device (THIS_MODULE, uni0299_attach, uni0299_detach); +} + + +static +void __exit exit_uni0299 (void) +{ + dprintk ("%s\n", __FUNCTION__); + + dvb_unregister_i2c_device (uni0299_attach); +} + +module_init (init_uni0299); +module_exit (exit_uni0299); + +MODULE_PARM(debug,"i"); +MODULE_PARM_DESC(debug, "enable verbose debug messages"); + +MODULE_DESCRIPTION("Universal STV0299/TSA5059/SL1935 DVB Frontend driver"); +MODULE_AUTHOR("Ralph Metzler, Holger Waechtler, Peter Schildmann, Felix Domke, Andreas Oberritter"); +MODULE_LICENSE("GPL"); + diff -Nru a/drivers/media/dvb/frontends/ves1820.c b/drivers/media/dvb/frontends/ves1820.c --- a/drivers/media/dvb/frontends/ves1820.c Sat Apr 12 14:44:08 2003 +++ b/drivers/media/dvb/frontends/ves1820.c Sat Apr 12 14:44:08 2003 @@ -23,12 +23,14 @@ #include #include -#include "compat.h" #include "dvb_frontend.h" -static int debug = 0; -#define dprintk if (debug) printk +#if 0 +#define dprintk(x...) printk(x) +#else +#define dprintk(x...) +#endif /** @@ -36,36 +38,58 @@ * extra memory but use frontend->data as bitfield */ -#define SET_PWM(frontend,pwm) do { \ - (int) frontend->data &= ~0xff; \ - (int) frontend->data |= pwm; \ +#define SET_PWM(data,pwm) do { \ + (int) data &= ~0xff; \ + (int) data |= pwm; \ } while (0) -#define SET_REG0(frontend,reg0) do { \ - (int) frontend->data &= ~(0xff << 8); \ - (int) frontend->data |= reg0 << 8; \ +#define SET_REG0(data,reg0) do { \ + (int) data &= ~(0xff << 8); \ + (int) data |= reg0 << 8; \ } while (0) -#define SET_TUNER(frontend,type) do { \ - (int) frontend->data &= ~(0xff << 16); \ - (int) frontend->data |= type << 16; \ +#define SET_TUNER(data,type) do { \ + (int) data &= ~(0xff << 16); \ + (int) data |= type << 16; \ } while (0) -#define GET_PWM(frontend) ((u8) ((int) frontend->data & 0xff)) -#define GET_REG0(frontend) ((u8) (((int) frontend->data >> 8) & 0xff)) -#define GET_TUNER(frontend) ((u8) (((int) frontend->data >> 16) & 0xff)) +#define SET_DEMOD_ADDR(data,type) do { \ + (int) data &= ~(0xff << 24); \ + (int) data |= type << 24; \ +} while (0) + +#define GET_PWM(data) ((u8) ((int) data & 0xff)) +#define GET_REG0(data) ((u8) (((int) data >> 8) & 0xff)) +#define GET_TUNER(data) ((u8) (((int) data >> 16) & 0xff)) +#define GET_DEMOD_ADDR(data) ((u8) (((int) data >> 24) & 0xff)) +static inline +void ddelay (int ms) +{ + current->state=TASK_INTERRUPTIBLE; + schedule_timeout((HZ*ms)/1000); +} + static struct dvb_frontend_info ves1820_info = { - .name = "VES1820/Grundig tuner as used on the Siemens DVB-C card", - .type = FE_QAM, - .frequency_stepsize = 62500, - .frequency_min = 51000000, - .frequency_max = 858000000, - .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | - FE_CAN_QAM_128 | FE_CAN_QAM_256 + .name = "VES1820 based DVB-C frontend", + .type = FE_QAM, + .frequency_stepsize = 62500, + .frequency_min = 51000000, + .frequency_max = 858000000, + .symbol_rate_min = (57840000/2)/64, /* SACLK/64 == (XIN/2)/64 */ + .symbol_rate_max = (57840000/2)/4, /* SACLK/4 */ +#if 0 + frequency_tolerance: ???, + symbol_rate_tolerance: ???, /* ppm */ /* == 8% (spec p. 5) */ + notifier_delay: ?, +#endif + .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | + FE_CAN_QAM_128 | FE_CAN_QAM_256 | + FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO | + FE_CAN_CLEAN_SETUP | FE_CAN_RECOVER }; @@ -73,22 +97,24 @@ static u8 ves1820_inittab [] = { - 0x69, 0x6A, 0x9B, 0x0A, 0x52, 0x46, 0x26, 0x1A, - 0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x28, - 0xE0, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40 + 0x69, 0x6A, 0x9B, 0x0A, 0x52, 0x46, 0x26, 0x1A, + 0x43, 0x6A, 0xAA, 0xAA, 0x1E, 0x85, 0x43, 0x28, + 0xE0, 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40 }; static -int ves1820_writereg (struct dvb_i2c_bus *i2c, u8 reg, u8 data) +int ves1820_writereg (struct dvb_frontend *fe, u8 reg, u8 data) { - int ret; + u8 addr = GET_DEMOD_ADDR(fe->data); u8 buf[] = { 0x00, reg, data }; - struct i2c_msg msg = { .addr = 0x09, .flags = 0, .buf = buf, .len = 3 }; + struct i2c_msg msg = { addr: addr, flags: 0, buf: buf, len: 3 }; + struct dvb_i2c_bus *i2c = fe->i2c; + int ret; ret = i2c->xfer (i2c, &msg, 1); @@ -103,14 +129,15 @@ static -u8 ves1820_readreg (struct dvb_i2c_bus *i2c, u8 reg) +u8 ves1820_readreg (struct dvb_frontend *fe, u8 reg) { - int ret; u8 b0 [] = { 0x00, reg }; u8 b1 [] = { 0 }; - struct i2c_msg msg [] = { { .addr = 0x09, .flags = 0, .buf = b0, .len = 2 }, - { .addr = 0x09, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; - + u8 addr = GET_DEMOD_ADDR(fe->data); + struct i2c_msg msg [] = { { addr: addr, flags: 0, buf: b0, len: 2 }, + { addr: addr, flags: I2C_M_RD, buf: b1, len: 1 } }; + struct dvb_i2c_bus *i2c = fe->i2c; + int ret; ret = i2c->xfer (i2c, msg, 2); @@ -125,7 +152,7 @@ int tuner_write (struct dvb_i2c_bus *i2c, u8 addr, u8 data [4]) { int ret; - struct i2c_msg msg = { .addr = addr, .flags = 0, .buf = data, .len = 4 }; + struct i2c_msg msg = { addr: addr, flags: 0, buf: data, len: 4 }; ret = i2c->xfer (i2c, &msg, 1); @@ -141,15 +168,18 @@ * reference clock comparision frequency of 62.5 kHz. */ static -int tuner_set_tv_freq (struct dvb_frontend *frontend, u32 freq) +int tuner_set_tv_freq (struct dvb_frontend *fe, u32 freq) { u32 div; static u8 addr [] = { 0x61, 0x62 }; static u8 byte3 [] = { 0x8e, 0x85 }; - int tuner_type = GET_TUNER(frontend); + int tuner_type = GET_TUNER(fe->data); u8 buf [4]; - div = (freq + 36250000 + 31250) / 62500; + if (tuner_type == 0xff) /* PLL not reachable over i2c ... */ + return 0; + + div = (freq + 36125000 + 31250) / 62500; buf[0] = (div >> 8) & 0x7f; buf[1] = div & 0xff; buf[2] = byte3[tuner_type]; @@ -163,115 +193,56 @@ freq < 454000000 ? 0x92 : 0x34); } - return tuner_write (frontend->i2c, addr[tuner_type], buf); + return tuner_write (fe->i2c, addr[tuner_type], buf); } static -int probe_tuner (struct dvb_frontend *frontend) +int ves1820_setup_reg0 (struct dvb_frontend *fe, u8 reg0) { - struct dvb_i2c_bus *i2c = frontend->i2c; - struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = NULL, .len = 0 }; + reg0 |= GET_REG0(fe->data) & 0x62; + + ves1820_writereg (fe, 0x00, reg0 & 0xfe); + ves1820_writereg (fe, 0x00, reg0 | 0x01); - if (i2c->xfer(i2c, &msg, 1) == 1) { - SET_TUNER(frontend,0); - printk ("%s: setup for tuner spXXXX\n", __FILE__); - } else { - SET_TUNER(frontend,1); - printk ("%s: setup for tuner sp5659c\n", __FILE__); + /** + * check lock and toggle inversion bit if required... + */ + if (!(ves1820_readreg (fe, 0x11) & 0x08)) { + ddelay(1); + if (!(ves1820_readreg (fe, 0x11) & 0x08)) { + reg0 ^= 0x20; + ves1820_writereg (fe, 0x00, reg0 & 0xfe); + ves1820_writereg (fe, 0x00, reg0 | 0x01); + } } + SET_REG0(fe->data, reg0); + return 0; } static -int ves1820_init (struct dvb_frontend *frontend) +int ves1820_init (struct dvb_frontend *fe) { - struct dvb_i2c_bus *i2c = frontend->i2c; - u8 b0 [] = { 0xff }; - u8 pwm; int i; - struct i2c_msg msg [] = { { .addr = 0x50, .flags = 0, .buf = b0, .len = 1 }, - { .addr = 0x50, .flags = I2C_M_RD, .buf = &pwm, .len = 1 } }; dprintk("VES1820: init chip\n"); - i2c->xfer (i2c, msg, 2); - - dprintk("VES1820: pwm=%02x\n", pwm); - - if (pwm == 0xff) - pwm=0x48; - - ves1820_writereg (i2c, 0, 0); + ves1820_writereg (fe, 0, 0); for (i=0; i<53; i++) - ves1820_writereg (i2c, i, ves1820_inittab[i]); - - ves1820_writereg (i2c, 0x34, pwm); - - (int) frontend->data = 0; - SET_PWM(frontend,pwm); - - probe_tuner (frontend); - - return 0; -} - - -static -int ves1820_setup_reg0 (struct dvb_frontend *frontend, - u8 real_qam, fe_spectral_inversion_t inversion) -{ - struct dvb_i2c_bus *i2c = frontend->i2c; - u8 reg0 = (ves1820_inittab[0] & 0xe3) | (real_qam << 2); - - switch (inversion) { - case INVERSION_OFF: /* XXX FIXME: reversed?? p. 25 */ - reg0 |= 0x20; - break; - - case INVERSION_ON: - reg0 &= 0xdf; - break; - - default: - return -EINVAL; - } - - SET_REG0(frontend, reg0); + ves1820_writereg (fe, i, ves1820_inittab[i]); - ves1820_writereg (i2c, 0x00, reg0 & 0xfe); - ves1820_writereg (i2c, 0x00, reg0); + ves1820_writereg (fe, 0x34, GET_PWM(fe->data)); return 0; } static -int ves1820_reset (struct dvb_frontend *frontend) -{ - struct dvb_i2c_bus *i2c = frontend->i2c; - u8 reg0 = GET_REG0(frontend); - - ves1820_writereg (i2c, 0x00, reg0 & 0xfe); - ves1820_writereg (i2c, 0x00, reg0); - - return 0; -} - - -static -void ves1820_reset_uncorrected_block_counter (struct dvb_i2c_bus *i2c) -{ - ves1820_writereg (i2c, 0x10, ves1820_inittab[0x10] & 0xdf); - ves1820_writereg (i2c, 0x10, ves1820_inittab[0x10]); -} - - -static -int ves1820_set_symbolrate (struct dvb_i2c_bus *i2c, u32 symbolrate) +int ves1820_set_symbolrate (struct dvb_frontend *fe, u32 symbolrate) { s32 BDR; s32 BDRI; @@ -280,7 +251,7 @@ u32 tmp, ratio; #define XIN 57840000UL -#define FIN (57840000UL>>4) +#define FIN (XIN >> 4) if (symbolrate > XIN/2) symbolrate = XIN/2; @@ -317,81 +288,50 @@ NDEC = (NDEC << 6) | ves1820_inittab[0x03]; - ves1820_writereg (i2c, 0x03, NDEC); - ves1820_writereg (i2c, 0x0a, BDR&0xff); - ves1820_writereg (i2c, 0x0b, (BDR>> 8)&0xff); - ves1820_writereg (i2c, 0x0c, (BDR>>16)&0x3f); + ves1820_writereg (fe, 0x03, NDEC); + ves1820_writereg (fe, 0x0a, BDR&0xff); + ves1820_writereg (fe, 0x0b, (BDR>> 8)&0xff); + ves1820_writereg (fe, 0x0c, (BDR>>16)&0x3f); - ves1820_writereg (i2c, 0x0d, BDRI); - ves1820_writereg (i2c, 0x0e, SFIL); + ves1820_writereg (fe, 0x0d, BDRI); + ves1820_writereg (fe, 0x0e, SFIL); return 0; } static -void ves1820_reset_pwm (struct dvb_frontend *frontend) +int ves1820_set_parameters (struct dvb_frontend *fe, + struct dvb_frontend_parameters *p) { - u8 pwm = GET_PWM(frontend); - - ves1820_writereg (frontend->i2c, 0x34, pwm); -} - - -typedef struct { - fe_modulation_t QAM_Mode; - int NoOfSym; - u8 Reg1; - u8 Reg5; - u8 Reg8; - u8 Reg9; -} QAM_SETTING; + static const u8 reg0x00 [] = { 0x00, 0x04, 0x08, 0x0c, 0x10 }; + static const u8 reg0x01 [] = { 140, 140, 106, 120, 92 }; + static const u8 reg0x05 [] = { 135, 100, 70, 54, 38 }; + static const u8 reg0x08 [] = { 162, 116, 67, 52, 35 }; + static const u8 reg0x09 [] = { 145, 150, 106, 126, 107 }; + int real_qam = p->u.qam.modulation - QAM_16; + if (real_qam < 0 || real_qam > 4) + return -EINVAL; -QAM_SETTING QAM_Values[] = { - { QAM_16, 16, 140, 164, 162, 145 }, - { QAM_32, 32, 140, 120, 116, 150 }, - { QAM_64, 64, 106, 70, 67, 106 }, - { QAM_128, 128, 120, 54, 52, 126 }, - { QAM_256, 256, 92, 38, 35, 107 } -}; + tuner_set_tv_freq (fe, p->frequency); + ves1820_set_symbolrate (fe, p->u.qam.symbol_rate); + ves1820_writereg (fe, 0x34, GET_PWM(fe->data)); + + ves1820_writereg (fe, 0x01, reg0x01[real_qam]); + ves1820_writereg (fe, 0x05, reg0x05[real_qam]); + ves1820_writereg (fe, 0x08, reg0x08[real_qam]); + ves1820_writereg (fe, 0x09, reg0x09[real_qam]); + ves1820_setup_reg0 (fe, reg0x00[real_qam]); -static -int ves1820_set_parameters (struct dvb_frontend *frontend, - struct dvb_frontend_parameters *p) -{ - struct dvb_i2c_bus* i2c = frontend->i2c; - int real_qam; - - switch (p->u.qam.modulation) { - case QAM_16 : real_qam = 0; break; - case QAM_32 : real_qam = 1; break; - case QAM_64 : real_qam = 2; break; - case QAM_128: real_qam = 3; break; - case QAM_256: real_qam = 4; break; - default: - return -EINVAL; - } - - tuner_set_tv_freq (frontend, p->frequency); - ves1820_set_symbolrate (i2c, p->u.qam.symbol_rate); - ves1820_reset_pwm (frontend); - - ves1820_writereg (i2c, 0x01, QAM_Values[real_qam].Reg1); - ves1820_writereg (i2c, 0x05, QAM_Values[real_qam].Reg5); - ves1820_writereg (i2c, 0x08, QAM_Values[real_qam].Reg8); - ves1820_writereg (i2c, 0x09, QAM_Values[real_qam].Reg9); - - ves1820_setup_reg0 (frontend, real_qam, p->inversion); - return 0; } static -int ves1820_ioctl (struct dvb_frontend *frontend, unsigned int cmd, void *arg) +int ves1820_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) { switch (cmd) { case FE_GET_INFO: @@ -405,7 +345,7 @@ *status = 0; - sync = ves1820_readreg (frontend->i2c, 0x11); + sync = ves1820_readreg (fe, 0x11); if (sync & 2) *status |= FE_HAS_SIGNAL; @@ -427,35 +367,37 @@ case FE_READ_BER: { - u32 ber = ves1820_readreg(frontend->i2c, 0x14) | - (ves1820_readreg(frontend->i2c, 0x15) << 8) | - ((ves1820_readreg(frontend->i2c, 0x16) & 0x0f) << 16); + u32 ber = ves1820_readreg(fe, 0x14) | + (ves1820_readreg(fe, 0x15) << 8) | + ((ves1820_readreg(fe, 0x16) & 0x0f) << 16); *((u32*) arg) = 10 * ber; break; } case FE_READ_SIGNAL_STRENGTH: { - u8 gain = ves1820_readreg(frontend->i2c, 0x17); + u8 gain = ves1820_readreg(fe, 0x17); *((u16*) arg) = (gain << 8) | gain; break; } case FE_READ_SNR: { - u8 quality = ~ves1820_readreg(frontend->i2c, 0x18); + u8 quality = ~ves1820_readreg(fe, 0x18); *((u16*) arg) = (quality << 8) | quality; break; } case FE_READ_UNCORRECTED_BLOCKS: - *((u32*) arg) = ves1820_readreg (frontend->i2c, 0x13) & 0x7f; + *((u32*) arg) = ves1820_readreg (fe, 0x13) & 0x7f; if (*((u32*) arg) == 0x7f) *((u32*) arg) = 0xffffffff; - ves1820_reset_uncorrected_block_counter (frontend->i2c); + /* reset uncorrected block counter */ + ves1820_writereg (fe, 0x10, ves1820_inittab[0x10] & 0xdf); + ves1820_writereg (fe, 0x10, ves1820_inittab[0x10]); break; case FE_SET_FRONTEND: - return ves1820_set_parameters (frontend, arg); + return ves1820_set_parameters (fe, arg); case FE_GET_FRONTEND: /* XXX FIXME: implement! */ @@ -468,16 +410,12 @@ break; case FE_SLEEP: - ves1820_writereg (frontend->i2c, 0x1b, 0x02); /* pdown ADC */ - ves1820_writereg (frontend->i2c, 0x00, 0x80); /* standby */ + ves1820_writereg (fe, 0x1b, 0x02); /* pdown ADC */ + ves1820_writereg (fe, 0x00, 0x80); /* standby */ break; case FE_INIT: - return ves1820_init (frontend); - - case FE_RESET: - ves1820_reset (frontend); - break; + return ves1820_init (fe); default: return -EINVAL; @@ -488,12 +426,89 @@ static +int probe_tuner (struct dvb_i2c_bus *i2c) +{ + static const + struct i2c_msg msg1 = { addr: 0x61, flags: 0, buf: NULL, len: 0 }; + static const + struct i2c_msg msg2 = { addr: 0x62, flags: 0, buf: NULL, len: 0 }; + int type; + + if (i2c->xfer(i2c, &msg1, 1) == 1) { + type = 0; + printk ("%s: setup for tuner spXXXX\n", __FILE__); + } else if (i2c->xfer(i2c, &msg2, 1) == 1) { + type = 1; + printk ("%s: setup for tuner sp5659c\n", __FILE__); + } else { + type = -1; + printk ("%s: unknown PLL, " + "please report to !!\n", + __FILE__); + } + + return type; +} + + +static +u8 read_pwm (struct dvb_i2c_bus *i2c) +{ + u8 b = 0xff; + u8 pwm; + struct i2c_msg msg [] = { { addr: 0x50, flags: 0, buf: &b, len: 1 }, + { addr: 0x50, flags: I2C_M_RD, buf: &pwm, len: 1 } }; + + i2c->xfer (i2c, msg, 2); + + dprintk("VES1820: pwm=%02x\n", pwm); + + if (pwm == 0xff) + pwm = 0x48; + + return pwm; +} + + +static +int probe_demod_addr (struct dvb_i2c_bus *i2c) +{ + u8 b [] = { 0x00, 0x1a }; + u8 id; + struct i2c_msg msg [] = { { addr: 0x08, flags: 0, buf: b, len: 2 }, + { addr: 0x08, flags: I2C_M_RD, buf: &id, len: 1 } }; + + if (i2c->xfer(i2c, msg, 2) == 2 && (id & 0xf0) == 0x70) + return msg[0].addr; + + msg[0].addr = msg[1].addr = 0x09; + + if (i2c->xfer(i2c, msg, 2) == 2 && (id & 0xf0) == 0x70) + return msg[0].addr; + + return -1; +} + + +static int ves1820_attach (struct dvb_i2c_bus *i2c) { - if ((ves1820_readreg (i2c, 0x1a) & 0xf0) != 0x70) - return -ENODEV; - - dvb_register_frontend (ves1820_ioctl, i2c, NULL, &ves1820_info); + void *data = NULL; + int demod_addr; + int tuner_type; + + if ((demod_addr = probe_demod_addr(i2c)) < 0) + return -ENODEV; + + if ((tuner_type = probe_tuner(i2c)) < 0) + return -ENODEV; + + SET_PWM(data, read_pwm(i2c)); + SET_REG0(data, ves1820_inittab[0]); + SET_TUNER(data, tuner_type); + SET_DEMOD_ADDR(data, demod_addr); + + dvb_register_frontend (ves1820_ioctl, i2c, data, &ves1820_info); return 0; } @@ -524,8 +539,7 @@ module_init(init_ves1820); module_exit(exit_ves1820); -MODULE_DESCRIPTION(""); -MODULE_AUTHOR("Ralph Metzler"); +MODULE_DESCRIPTION("VES1820 DVB-C frontend driver"); +MODULE_AUTHOR("Ralph Metzler, Holger Waechtler"); MODULE_LICENSE("GPL"); -MODULE_PARM(debug,"i"); diff -Nru a/drivers/media/dvb/ttpci/Kconfig b/drivers/media/dvb/ttpci/Kconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/Kconfig Sat Apr 12 14:44:10 2003 @@ -0,0 +1,92 @@ +config DVB_AV7110 + tristate "AV7110 cards" + depends on VIDEO_DEV && DVB_CORE + help + Support for SAA7146 and AV7110 based DVB cards as produced + by Fujitsu-Siemens, Technotrend, Hauppauge and others. + + This driver only supports the fullfeatured cards with + onboard MPEG2 decoder. + + Say Y if you own such a card and want to use it. + +config DVB_AV7110_OSD + bool "AV7110 OSD support" + depends on DVB_AV7110 + help + The AV7110 firmware provides some code to generate an OnScreenDisplay + on the video output. This is kind of nonstandard and not guaranteed to + be maintained. + + Anyway, some popular DVB software like VDR uses this OSD to render + its menus, so say Y if you want to use this software. + + All other people say N. + +config DVB_BUDGET + tristate "Budget cards" + depends on DVB_CORE + help + Support for simple SAA7146 based DVB cards + (so called Budget- or Nova-PCI cards) without onboard + MPEG2 decoder. + + Say Y if you own such a card and want to use it. + + This driver is available as a module called + dvb-ttpci-budget.o ( = code which can be inserted in + and removed from the running kernel whenever you want). + If you want to compile it as a module, say M + here and read . + +config DVB_BUDGET_CI + tristate "Budget cards with onboard CI connector" + depends on VIDEO_DEV && DVB_CORE && DVB_BUDGET + help + Support for simple SAA7146 based DVB cards + (so called Budget- or Nova-PCI cards) without onboard + MPEG2 decoder, but with onboard Common Interface connector. + + Say Y if you own such a card and want to use it. + + This driver is available as a module called + dvb-ttpci-budget-av.o ( = code which can be inserted in + and removed from the running kernel whenever you want). + If you want to compile it as a module, say M + here and read . + +config DVB_BUDGET_AV + tristate "Budget cards with analog video inputs" + depends on VIDEO_DEV && DVB_CORE && DVB_BUDGET + help + Support for simple SAA7146 based DVB cards + (so called Budget- or Nova-PCI cards) without onboard + MPEG2 decoder, but with one or more analog video inputs. + + Say Y if you own such a card and want to use it. + + This driver is available as a module called + dvb-ttpci-budget-av.o ( = code which can be inserted in + and removed from the running kernel whenever you want). + here and read . + +config DVB_BUDGET_PATCH + tristate "AV7110 cards with Budget Patch" + depends on DVB_CORE && DVB_BUDGET + help + Support for Budget Patch (full TS) modification on + SAA7146+AV7110 based cards (DVB-S cards). This + driver doesn't use onboard MPEG2 decoder. The + card is driven in Budget-only mode. Card is + required to have loaded firmware to tune properly. + Firmware can be loaded by insertion and removal of + standard AV7110 driver prior to loading this + driver. + + Say Y if you own such a card and want to use it. + + This driver is available as a module called + dvb-ttpci-budget-patch.o ( = code which can be inserted in + and removed from the running kernel whenever you want). + If you want to compile it as a module, say M + here and read . diff -Nru a/drivers/media/dvb/ttpci/Makefile b/drivers/media/dvb/ttpci/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/Makefile Sat Apr 12 14:44:10 2003 @@ -0,0 +1,18 @@ +# +# Makefile for the kernel SAA7146 FULL TS DVB device driver +# and the AV7110 DVB device driver +# + +dvb-ttpci-budget-objs := budget.o +dvb-ttpci-budget-av-objs := budget-av.o +dvb-ttpci-budget-ci-objs := budget-ci.o +dvb-ttpci-budget-patch-objs := budget-patch.o +dvb-ttpci-objs := av7110.o av7110_ipack.o av7110_ir.o + +obj-$(CONFIG_DVB_BUDGET) += budget-core.o dvb-ttpci-budget.o +obj-$(CONFIG_DVB_BUDGET_CI) += budget-core.o dvb-ttpci-budget-ci.o +obj-$(CONFIG_DVB_BUDGET_AV) += budget-core.o dvb-ttpci-budget-av.o +obj-$(CONFIG_DVB_BUDGET_PATCH) += budget-core.o dvb-ttpci-budget-patch.o +obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o + +EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ diff -Nru a/drivers/media/dvb/ttpci/av7110.c b/drivers/media/dvb/ttpci/av7110.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/av7110.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,4371 @@ +/* + * av7110.c: driver for the SAA7146 based AV110 cards (like the Fujitsu-Siemens DVB) + * + * Copyright (C) 1999-2002 Ralph Metzler + * & Marcus Metzler for convergence integrated media GmbH + * + * originally based on code by: + * Copyright (C) 1998,1999 Christian Theiss + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + +#define NEW_CI 1 + +/* for debugging ARM communication: */ +//#define COM_DEBUG + +#define __KERNEL_SYSCALLS__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "dvb_i2c.h" +#include "dvb_frontend.h" + +#if 1 + #define DEBUG_VARIABLE av7110_debug +#else + #define DEB_S(x) + #define DEB_D(x) + #define DEB_EE(x) +#endif + +#include "av7110.h" +#include "av7110_ipack.h" + +static int AV_StartPlay(av7110_t *av7110, int av); +static void restart_feeds(av7110_t *av7110); +static int bootarm(av7110_t *av7110); +static inline int i2c_writereg(av7110_t *av7110, u8 id, u8 reg, u8 val); +static inline u8 i2c_readreg(av7110_t *av7110, u8 id, u8 reg); +static int outcom(av7110_t *av7110, int type, int com, int num, ...); +static void SetMode(av7110_t *av7110, int mode); + +void pes_to_ts(u8 const *buf, long int length, u16 pid, p2t_t *p); +void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter, struct dvb_demux_feed *feed); + +static int av7110_debug = 0; + +static int vidmode=CVBS_RGB_OUT; +static int pids_off; +static int adac=DVB_ADAC_TI; +static int hw_sections = 1; + +int av7110_num = 0; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME av7110 +#endif + +/**************************************************************************** + * General helper functions + ****************************************************************************/ + +static inline void ddelay(int i) +{ + current->state=TASK_INTERRUPTIBLE; + schedule_timeout((HZ*i)/100); +} + + +/**************************************************************************** + * DEBI functions + ****************************************************************************/ + +/* This DEBI code is based on the Stradis driver + by Nathan Laredo */ + +static +int wait_for_debi_done(av7110_t *av7110) +{ + struct saa7146_dev *dev = av7110->dev; + int start; + + /* wait for registers to be programmed */ + start = jiffies; + while (1) { + if (saa7146_read(dev, MC2) & 2) + break; + if (jiffies-start > HZ/20) { + printk ("%s: timed out while waiting for registers " + "getting programmed\n", __FUNCTION__); + return -ETIMEDOUT; + } + } + + /* wait for transfer to complete */ + start = jiffies; + while (1) { + if (!(saa7146_read(dev, PSR) & SPCI_DEBI_S)) + break; + saa7146_read(dev, MC2); + if (jiffies-start > HZ/4) { + printk ("%s: timed out while waiting for transfer " + "completion\n", __FUNCTION__); + return -ETIMEDOUT; + } + } + + return 0; +} + +static int debiwrite(av7110_t *av7110, u32 config, + int addr, u32 val, int count) +{ + struct saa7146_dev *dev = av7110->dev; + u32 cmd; + + if (count <= 0 || count > 32764) + return -1; + if (wait_for_debi_done(av7110) < 0) + return -1; + saa7146_write(dev, DEBI_CONFIG, config); + if (count <= 4) /* immediate transfer */ + saa7146_write(dev, DEBI_AD, val ); + else /* block transfer */ + saa7146_write(dev, DEBI_AD, av7110->debi_bus); + saa7146_write(dev, DEBI_COMMAND, (cmd = (count << 17) | (addr & 0xffff))); + saa7146_write(dev, MC2, (2 << 16) | 2); + return 0; +} + +static u32 debiread(av7110_t *av7110, u32 config, int addr, int count) +{ + struct saa7146_dev *dev = av7110->dev; + u32 result = 0; + + if (count > 32764 || count <= 0) + return 0; + if (wait_for_debi_done(av7110) < 0) + return 0; + saa7146_write(dev, DEBI_AD, av7110->debi_bus); + saa7146_write(dev, DEBI_COMMAND, (count << 17) | 0x10000 | (addr & 0xffff)); + + saa7146_write(dev, DEBI_CONFIG, config); + saa7146_write(dev, MC2, (2 << 16) | 2); + if (count > 4) + return count; + wait_for_debi_done(av7110); + result = saa7146_read(dev, DEBI_AD); + result &= (0xffffffffUL >> ((4-count)*8)); + return result; +} + +/* DEBI during interrupt */ + +static inline void +iwdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) +{ + if (count>4 && val) + memcpy(av7110->debi_virt, (char *) val, count); + debiwrite(av7110, config, addr, val, count); +} + +static inline u32 +irdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) +{ + u32 res; + + res=debiread(av7110, config, addr, count); + if (count<=4) + memcpy(av7110->debi_virt, (char *) &res, count); + return res; +} + +/* DEBI outside interrupts, only for count<=4! */ + +static inline void +wdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) +{ + unsigned long flags; + + spin_lock_irqsave(&av7110->debilock, flags); + debiwrite(av7110, config, addr, val, count); + spin_unlock_irqrestore(&av7110->debilock, flags); +} + +static inline u32 +rdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) +{ + unsigned long flags; + u32 res; + + spin_lock_irqsave(&av7110->debilock, flags); + res=debiread(av7110, config, addr, count); + spin_unlock_irqrestore(&av7110->debilock, flags); + return res; +} + + +static inline char +chtrans(char c) +{ + if (c<32 || c>126) + c=0x20; + return c; +} + + +/* handle mailbox registers of the dual ported RAM */ + +static inline void +ARM_ResetMailBox(av7110_t *av7110) +{ + unsigned long flags; + + DEB_EE(("av7110: %p\n",av7110)); + + spin_lock_irqsave(&av7110->debilock, flags); + debiread(av7110, DEBINOSWAP, IRQ_RX, 2); + //printk("dvb: IRQ_RX=%d\n", debiread(av7110, DEBINOSWAP, IRQ_RX, 2)); + debiwrite(av7110, DEBINOSWAP, IRQ_RX, 0, 2); + spin_unlock_irqrestore(&av7110->debilock, flags); +} + +static inline void +ARM_ClearMailBox(av7110_t *av7110) +{ + iwdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); +} + +static inline void +ARM_ClearIrq(av7110_t *av7110) +{ + irdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); +} + +static void +reset_arm(av7110_t *av7110) +{ + saa7146_setgpio(av7110->dev, RESET_LINE, SAA7146_GPIO_OUTLO); + + /* Disable DEBI and GPIO irq */ + IER_DISABLE(av7110->dev, (MASK_19 | MASK_03)); +// saa7146_write(av7110->dev, IER, +// saa7146_read(av7110->dev, IER) & ~(MASK_19 | MASK_03)); + saa7146_write(av7110->dev, ISR, (MASK_19 | MASK_03)); + + mdelay(800); + saa7146_setgpio(av7110->dev, RESET_LINE, SAA7146_GPIO_OUTHI); + mdelay(800); + + ARM_ResetMailBox(av7110); + + saa7146_write(av7110->dev, ISR, (MASK_19 | MASK_03)); + + IER_ENABLE(av7110->dev, MASK_03); +// saa7146_write(av7110->dev, IER, +// saa7146_read(av7110->dev, IER) | MASK_03 ); + + av7110->arm_ready=1; + printk("av7110: ARM RESET\n"); +} + +static void +recover_arm(av7110_t *av7110) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (current->files) + bootarm(av7110); + else { + printk("OOPS, no current->files\n"); + reset_arm(av7110); + } + ddelay(10); + restart_feeds(av7110); +} + +static void +arm_error(av7110_t *av7110) +{ + DEB_EE(("av7110: %p\n",av7110)); + + av7110->arm_errors++; + av7110->arm_ready=0; + recover_arm(av7110); +} + +static int arm_thread(void *data) +{ + av7110_t *av7110 = data; + u16 newloops = 0; + + DEB_EE(("av7110: %p\n",av7110)); + + lock_kernel(); +#if 0 + daemonize(); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + reparent_to_init (); +#endif +#else + exit_mm(current); + current->session=current->pgrp=1; +#endif + sigfillset(¤t->blocked); + strcpy(current->comm, "arm_mon"); + av7110->arm_thread = current; + unlock_kernel(); + + while (!av7110->arm_rmmod && !signal_pending(current)) { + interruptible_sleep_on_timeout(&av7110->arm_wait, 5*HZ); + + if (!av7110->arm_ready) + continue; + + if (down_interruptible(&av7110->dcomlock)) + break; + + newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2); + up(&av7110->dcomlock); + + if (newloops==av7110->arm_loops) { + printk(KERN_ERR "av7110%d: ARM crashed!\n", + av7110->dvb_adapter->num); + + arm_error(av7110); + + if (down_interruptible(&av7110->dcomlock)) + break; + + newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2)-1; + up(&av7110->dcomlock); + } + av7110->arm_loops=newloops; + } + + av7110->arm_thread = NULL; + return 0; +} + + +static int +record_cb(dvb_filter_pes2ts_t *p2t, u8 *buf, size_t len) +{ + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) p2t->priv; + + DEB_EE(("dvb_filter_pes2ts_t:%p\n",p2t)); + + if (!(dvbdmxfeed->ts_type & TS_PACKET)) + return 0; + if (buf[3]==0xe0) // video PES do not have a length in TS + buf[4]=buf[5]=0; + if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY) + return dvbdmxfeed->cb.ts(buf, len, 0, 0, + &dvbdmxfeed->feed.ts, DMX_OK); + else + return dvb_filter_pes2ts(p2t, buf, len); +} + +static int +dvb_filter_pes2ts_cb(void *priv, unsigned char *data) +{ + struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) priv; + + DEB_EE(("dvb_demux_feed:%p\n",dvbdmxfeed)); + + dvbdmxfeed->cb.ts(data, 188, 0, 0, + &dvbdmxfeed->feed.ts, + DMX_OK); + return 0; +} + +static int +AV_StartRecord(av7110_t *av7110, int av, + struct dvb_demux_feed *dvbdmxfeed) +{ + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + + DEB_EE(("av7110: %p, dvb_demux_feed:%p\n",av7110,dvbdmxfeed)); + + if (av7110->playing||(av7110->rec_mode&av)) + return -EBUSY; + outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); + dvbdmx->recording=1; + av7110->rec_mode|=av; + + switch (av7110->rec_mode) { + case RP_AUDIO: + dvb_filter_pes2ts_init (&av7110->p2t[0], + dvbdmx->pesfilter[0]->pid, + dvb_filter_pes2ts_cb, + (void *)dvbdmx->pesfilter[0]); + outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0); + break; + + case RP_VIDEO: + dvb_filter_pes2ts_init (&av7110->p2t[1], + dvbdmx->pesfilter[1]->pid, + dvb_filter_pes2ts_cb, + (void *)dvbdmx->pesfilter[1]); + outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0); + break; + + case RP_AV: + dvb_filter_pes2ts_init (&av7110->p2t[0], + dvbdmx->pesfilter[0]->pid, + dvb_filter_pes2ts_cb, + (void *)dvbdmx->pesfilter[0]); + dvb_filter_pes2ts_init (&av7110->p2t[1], + dvbdmx->pesfilter[1]->pid, + dvb_filter_pes2ts_cb, + (void *)dvbdmx->pesfilter[1]); + outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AV_PES, 0); + break; + } + return 0; +} + +static int +AV_StartPlay(av7110_t *av7110, int av) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->rec_mode) + return -EBUSY; + if (av7110->playing&av) + return -EBUSY; + + outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); + + if (av7110->playing == RP_NONE) { + av7110_ipack_reset(&av7110->ipack[0]); + av7110_ipack_reset(&av7110->ipack[1]); + } + + av7110->playing|=av; + switch (av7110->playing) { + case RP_AUDIO: + outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0); + break; + case RP_VIDEO: + outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0); + av7110->sinfo=0; + break; + case RP_AV: + av7110->sinfo=0; + outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AV_PES, 0); + break; + } + return av7110->playing; +} + +static void +AV_Stop(av7110_t *av7110, int av) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (!(av7110->playing&av) && !(av7110->rec_mode&av)) + return; + + outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); + if (av7110->playing) { + av7110->playing&=~av; + switch (av7110->playing) { + case RP_AUDIO: + outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0); + break; + case RP_VIDEO: + outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0); + break; + case RP_NONE: + SetMode(av7110, av7110->vidmode); + break; + } + } else { + av7110->rec_mode&=~av; + switch (av7110->rec_mode) { + case RP_AUDIO: + outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0); + break; + case RP_VIDEO: + outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0); + break; + case RP_NONE: + break; + } + } +} + +/** + * Hack! we save the last av7110 ptr. This should be ok, since + * you rarely will use more then one IR control. + * + * If we want to support multiple controls we would have to do much more... + */ +void av7110_setup_irc_config (av7110_t *av7110, u32 ir_config) +{ + static av7110_t *last; + + DEB_EE(("av7110: %p\n",av7110)); + + if (!av7110) + av7110 = last; + else + last = av7110; + + if (av7110) + outcom(av7110, COMTYPE_PIDFILTER, SetIR, 1, ir_config); +} + +static void (*irc_handler)(u32); + +void av7110_register_irc_handler(void (*func)(u32)) +{ + //DEB_EE(("registering %08x\n",func)); + irc_handler = func; +} + +void av7110_unregister_irc_handler(void (*func)(u32)) +{ + //DEB_EE(("unregistering %08x\n",func)); + irc_handler = NULL; +} + +void run_handlers(unsigned long ircom) +{ + if (irc_handler != NULL) + (*irc_handler)((u32) ircom); +} + +DECLARE_TASKLET(irtask,run_handlers,0); + +void IR_handle(av7110_t *av7110, u32 ircom) +{ + DEB_S(("av7110: ircommand = %08x\n", ircom)); + irtask.data = (unsigned long) ircom; + tasklet_schedule(&irtask); +} + +/**************************************************************************** + * IRQ handling + ****************************************************************************/ + +void CI_handle(av7110_t *av7110, u8 *data, u16 len) +{ + //CI_out(av7110, data, len); + + DEB_EE(("av7110: %p\n",av7110)); + + if (len<3) + return; + switch (data[0]) { + case CI_MSG_CI_INFO: + if (data[2]!=1 && data[2]!=2) + break; + switch (data[1]) { + case 0: + av7110->ci_slot[data[2]-1].flags=0; + break; + case 1: + av7110->ci_slot[data[2]-1].flags|=CA_CI_MODULE_PRESENT; + break; + case 2: + av7110->ci_slot[data[2]-1].flags|=CA_CI_MODULE_READY; + break; + } + break; + case CI_SWITCH_PRG_REPLY: + //av7110->ci_stat=data[1]; + break; + default: + break; + } + +} + +static inline int +DvbDmxFilterCallback(u8 * buffer1, size_t buffer1_len, + u8 * buffer2, size_t buffer2_len, + struct dvb_demux_filter *dvbdmxfilter, + dmx_success_t success, + av7110_t *av7110) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (!dvbdmxfilter->feed->demux->dmx.frontend) + return 0; + if (dvbdmxfilter->feed->demux->dmx.frontend->source==DMX_MEMORY_FE) + return 0; + + switch(dvbdmxfilter->type) { + case DMX_TYPE_SEC: + if ((((buffer1[1]<<8)|buffer1[2])&0xfff)+3!=buffer1_len) + return 0; + if (dvbdmxfilter->doneq) { + dmx_section_filter_t *filter=&dvbdmxfilter->filter; + int i; + u8 xor, neq=0; + + for (i=0; ifilter_value[i]^buffer1[i]; + neq|=dvbdmxfilter->maskandnotmode[i]&xor; + } + if (!neq) + return 0; + } + return dvbdmxfilter->feed->cb.sec(buffer1, buffer1_len, + buffer2, buffer2_len, + &dvbdmxfilter->filter, + DMX_OK); + case DMX_TYPE_TS: + if (!(dvbdmxfilter->feed->ts_type & TS_PACKET)) + return 0; + if (dvbdmxfilter->feed->ts_type & TS_PAYLOAD_ONLY) + return dvbdmxfilter->feed->cb.ts(buffer1, buffer1_len, + buffer2, buffer2_len, + &dvbdmxfilter->feed->feed.ts, + DMX_OK); + else + pes_to_ts(buffer1, buffer1_len, + dvbdmxfilter->feed->pid, + &av7110->p2t_filter[dvbdmxfilter->index]); + default: + return 0; + } +} + + +u8 pshead[0x26] = { + 0x00, 0x00, 0x01, 0xba, 0x5f, 0xff, 0xfe, 0xe6, + 0xc4, 0x01, 0x01, 0x89, 0xc3, 0xf8, 0x00, 0x00, + 0x01, 0xbb, 0x00, 0x12, 0x80, 0xc4, 0xe1, 0x00, + 0xe1, 0xff, 0xb9, 0xe0, 0xe8, 0xb8, 0xc0, 0x20, + 0xbd, 0xe0, 0x44, 0xbf, 0xe0, 0x02, +}; + + +//#define DEBUG_TIMING +inline static void +print_time(char *s) +{ +#ifdef DEBUG_TIMING + struct timeval tv; + do_gettimeofday(&tv); + printk("%s: %d.%d\n", s, (int)tv.tv_sec, (int)tv.tv_usec); +#endif +} + +static void +ci_get_data(dvb_ringbuffer_t *cibuf, u8 *data, int len) +{ + if (dvb_ringbuffer_free(cibuf) < len+2) + return; + + DVB_RINGBUFFER_WRITE_BYTE(cibuf,len>>8); + DVB_RINGBUFFER_WRITE_BYTE(cibuf,len&0xff); + + dvb_ringbuffer_write(cibuf,data,len,0); + + wake_up_interruptible(&cibuf->queue); +} + +static +void debiirq (unsigned long data) +{ + struct av7110_s *av7110 = (struct av7110_s*) data; + int type=av7110->debitype; + int handle=(type>>8)&0x1f; + +// DEB_EE(("av7110: %p\n",av7110)); + + print_time("debi"); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) & ~MASK_19 ); + saa7146_write(av7110->dev, ISR, MASK_19 ); + + if (type==-1) { + printk("DEBI irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",jiffies,saa7146_read(av7110->dev,PSR),saa7146_read(av7110->dev,SSR)); + ARM_ClearMailBox(av7110); + ARM_ClearIrq(av7110); + return; + } + av7110->debitype=-1; + + switch (type&0xff) { + + case DATA_TS_RECORD: + dvb_dmx_swfilter_packets(&av7110->demux, + (const u8 *)av7110->debi_virt, + av7110->debilen/188); + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + + case DATA_PES_RECORD: + if (av7110->demux.recording) + record_cb(&av7110->p2t[handle], + (u8 *)av7110->debi_virt, + av7110->debilen); + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + + case DATA_IPMPE: + case DATA_FSECTION: + case DATA_PIPING: + if (av7110->handle2filter[handle]) + DvbDmxFilterCallback((u8 *)av7110->debi_virt, + av7110->debilen, 0, 0, + av7110->handle2filter[handle], + DMX_OK, av7110); + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + + case DATA_CI_GET: + { + u8 *data=av7110->debi_virt; + + if ((data[0]<2) && data[2]==0xff) { + int flags=0; + if (data[5]>0) + flags|=CA_CI_MODULE_PRESENT; + if (data[5]>5) + flags|=CA_CI_MODULE_READY; + av7110->ci_slot[data[0]].flags=flags; + } else + ci_get_data(&av7110->ci_rbuffer, + av7110->debi_virt, + av7110->debilen); + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + } + + case DATA_COMMON_INTERFACE: + CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen); +#if 0 + { + int i; + + printk("av7110%d: ", av7110->num); + printk("%02x ", *(u8 *)av7110->debi_virt); + printk("%02x ", *(1+(u8 *)av7110->debi_virt)); + for (i=2; idebilen; i++) + printk("%02x ", (*(i+(unsigned char *)av7110->debi_virt))); + for (i=2; idebilen; i++) + printk("%c", chtrans(*(i+(unsigned char *)av7110->debi_virt))); + + printk("\n"); + } +#endif + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + + case DATA_DEBUG_MESSAGE: + ((s8*)av7110->debi_virt)[Reserved_SIZE-1]=0; + printk("%s\n", (s8 *)av7110->debi_virt); + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + + case DATA_CI_PUT: + case DATA_MPEG_PLAY: + case DATA_BMP_LOAD: + spin_lock(&av7110->debilock); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); + return; + default: + break; + } + spin_lock(&av7110->debilock); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); +} + +static int +pes_play(void *dest, dvb_ringbuffer_t *buf, int dlen) +{ + int len; + u32 sync; + u16 blen; + + DEB_EE(("dvb_ring_buffer_t: %p\n",buf)); + + if (!dlen) { + wake_up(&buf->queue); + return -1; + } + while (1) { + if ((len=dvb_ringbuffer_avail(buf)) < 6) + return -1; + sync= DVB_RINGBUFFER_PEEK(buf,0)<<24; + sync|=DVB_RINGBUFFER_PEEK(buf,1)<<16; + sync|=DVB_RINGBUFFER_PEEK(buf,2)<<8; + sync|=DVB_RINGBUFFER_PEEK(buf,3); + + if (((sync&~0x0f)==0x000001e0) || + ((sync&~0x1f)==0x000001c0) || + (sync==0x000001bd)) + break; + printk("resync\n"); + DVB_RINGBUFFER_SKIP(buf,1); + } + blen= DVB_RINGBUFFER_PEEK(buf,4)<<8; + blen|=DVB_RINGBUFFER_PEEK(buf,5); + blen+=6; + if (lendlen) { + printk("buffer empty - avail %d blen %u dlen %d\n",len,blen,dlen); + wake_up(&buf->queue); + return -1; + } + + (void)dvb_ringbuffer_read(buf,dest,(size_t)blen,0); + + DEB_S(("pread=%08x, pwrite=%08x\n",buf->pread, buf->pwrite)); + wake_up(&buf->queue); + return blen; +} + + +static +void gpioirq (unsigned long data) +{ + struct av7110_s *av7110 = (struct av7110_s*) data; + u32 rxbuf, txbuf; + int len; + + //printk("GPIO0 irq\n"); + + if (av7110->debitype !=-1) + printk("GPIO0 irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n",jiffies,saa7146_read(av7110->dev,PSR),saa7146_read(av7110->dev,SSR)); + + spin_lock(&av7110->debilock); + + ARM_ClearIrq(av7110); + + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) & ~MASK_19 ); + saa7146_write(av7110->dev, ISR, MASK_19 ); + + av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2); + av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + av7110->debibuf = 0; + rxbuf=irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + txbuf=irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + len=(av7110->debilen+3)&(~3); + + DEB_D(("GPIO0 irq %d %d\n", av7110->debitype, av7110->debilen)); + print_time("gpio"); + + DEB_D(("GPIO0 irq %02x\n", av7110->debitype&0xff)); + switch (av7110->debitype&0xff) { + + case DATA_TS_PLAY: + case DATA_PES_PLAY: + break; + + case DATA_CI_PUT: + { + int avail; + dvb_ringbuffer_t *cibuf=&av7110->ci_wbuffer; + + avail=dvb_ringbuffer_avail(cibuf); + if (avail<=2) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } + len= DVB_RINGBUFFER_PEEK(cibuf,0)<<8; + len|=DVB_RINGBUFFER_PEEK(cibuf,1); + if (availdebi_virt,len,0); + + wake_up(&cibuf->queue); + iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); + wait_for_debi_done(av7110); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19 ); + if (len<5) len=5; /* we want a real DEBI DMA */ + iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); + spin_unlock(&av7110->debilock); + return; + } + + case DATA_MPEG_PLAY: + if (!av7110->playing) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } + len=0; + if (av7110->debitype&0x100) { + spin_lock(&av7110->aout.lock); + len=pes_play(av7110->debi_virt, &av7110->aout, 2048); + spin_unlock(&av7110->aout.lock); + } + if (len<=0 && (av7110->debitype&0x200) + &&av7110->videostate.play_state!=VIDEO_FREEZED) { + spin_lock(&av7110->avout.lock); + len=pes_play(av7110->debi_virt, &av7110->avout, 2048); + spin_unlock(&av7110->avout.lock); + } + if (len<=0) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } + DEB_D(("GPIO0 PES_PLAY len=%04x\n", len)); + iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); + wait_for_debi_done(av7110); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19 ); + + iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); + spin_unlock(&av7110->debilock); + return; + + case DATA_BMP_LOAD: + len=av7110->debilen; + if (!len) { + av7110->bmp_state=BMP_LOADED; + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + wake_up(&av7110->bmpq); + break; + } + if (len>av7110->bmplen) + len=av7110->bmplen; + if (len>2*1024) + len=2*1024; + iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); + memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len); + av7110->bmpp+=len; + av7110->bmplen-=len; + wait_for_debi_done(av7110); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19 ); + if (len<5) len=5; /* we want a real DEBI DMA */ + iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); + spin_unlock(&av7110->debilock); + return; + + case DATA_CI_GET: + case DATA_COMMON_INTERFACE: + case DATA_FSECTION: + case DATA_IPMPE: + case DATA_PIPING: + if (!len || len>4*1024) { + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + break; + } /* yes, fall through */ + case DATA_TS_RECORD: + case DATA_PES_RECORD: + wait_for_debi_done(av7110); + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19); + irdebi(av7110, DEBISWAB, DPRAM_BASE+rxbuf, 0, len); + spin_unlock(&av7110->debilock); + return; + + case DATA_DEBUG_MESSAGE: + wait_for_debi_done(av7110); + if (!len || len>0xff) { + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + break; + } + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) | MASK_19); + irdebi(av7110, DEBISWAB, Reserved, 0, len); + spin_unlock(&av7110->debilock); + return; + + case DATA_IRCOMMAND: + IR_handle(av7110, + swahw32(irdebi(av7110, DEBINOSWAP, Reserved, 0, 4))); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + break; + + default: + printk("gpioirq unknown type=%d len=%d\n", + av7110->debitype, av7110->debilen); + break; + } + ARM_ClearMailBox(av7110); + av7110->debitype=-1; + spin_unlock(&av7110->debilock); +} + + +/**************************************************************************** + * DEBI command polling + ****************************************************************************/ + + +static int OutCommand(av7110_t *av7110, u16* buf, int length) +{ + int i; + u32 start; +#ifdef COM_DEBUG + u32 stat; +#endif + + DEB_EE(("av7110: %p\n",av7110)); + + if (!av7110->arm_ready) { + DEB_D(("arm not ready.\n")); + return -1; + } + + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2 ) ) + { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_FREE) { + printk(KERN_ERR "%s: timeout waiting for COMMAND idle\n", __FUNCTION__); + return -1; + } + } + +#ifndef _NOHANDSHAKE + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) + { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_SHAKE) { + printk(KERN_ERR "%s: timeout waiting for HANDSHAKE_REG\n", __FUNCTION__); + return -1; + } + } +#endif + + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2) & OSDQFull ) + { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_OSD) { + printk(KERN_ERR "%s: timeout waiting for !OSDQFull\n", __FUNCTION__); + return -1; + } + } + for (i=2; i ARM_WAIT_FREE) { + printk(KERN_ERR "%s: timeout waiting for COMMAND to complete\n", __FUNCTION__); + return -1; + } + } + + stat = rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2); + if (stat & GPMQOver) { + printk(KERN_ERR "%s: GPMQOver\n", __FUNCTION__); + return -1; + } + else if (stat & OSDQOver) { + printk(KERN_ERR "%s: OSDQOver\n", __FUNCTION__); + return -1; + } +#endif + + return 0; +} + +inline static int +SOutCommand(av7110_t *av7110, u16* buf, int length) +{ + int ret; + + DEB_EE(("av7110: %p\n",av7110)); + + if (!av7110->arm_ready) { + DEB_D(("arm not ready.\n")); + return -1; + } + + if (down_interruptible(&av7110->dcomlock)) + return -ERESTARTSYS; + + ret=OutCommand(av7110, buf, length); + up(&av7110->dcomlock); + if (ret) + printk("SOutCommand error\n"); + return ret; +} + + +static int outcom(av7110_t *av7110, int type, int com, int num, ...) +{ + va_list args; + u16 buf[num+2]; + int i, ret; + + DEB_EE(("av7110: %p\n",av7110)); + + buf[0]=(( type << 8 ) | com); + buf[1]=num; + + if (num) { + va_start(args, num); + for (i=0; iarm_ready) { + DEB_D(("arm not ready.\n")); + return -1; + } + + if (down_interruptible(&av7110->dcomlock)) + return -ERESTARTSYS; + + if ((err = OutCommand(av7110, Buff, length)) < 0) { + up(&av7110->dcomlock); + printk("CommandRequest error\n"); + return err; + } + + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2) ) + { +#ifdef _NOHANDSHAKE + ddelay(1); +#endif + if ((jiffies - start) > ARM_WAIT_FREE) { + printk("%s: timeout waiting for COMMAND to complete\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } + } + +#ifndef _NOHANDSHAKE + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_SHAKE) { + printk(KERN_ERR "%s: timeout waiting for HANDSHAKE_REG\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } + } +#endif + +#ifdef COM_DEBUG + stat = rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2); + if (stat & GPMQOver) { + printk(KERN_ERR "%s: GPMQOver\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } + else if (stat & OSDQOver) { + printk(KERN_ERR "%s: OSDQOver\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } +#endif + + for (i=0; idcomlock); + return 0; +} + + +static inline int +RequestParameter(av7110_t *av7110, u16 tag, u16* Buff, s16 length) +{ + int ret; + ret = CommandRequest(av7110, &tag, 0, Buff, length); + if (ret) + printk("RequestParameter error\n"); + return ret; +} + + +/**************************************************************************** + * Firmware commands + ****************************************************************************/ + + +inline static int +SendDAC(av7110_t *av7110, u8 addr, u8 data) +{ + DEB_EE(("av7110: %p\n",av7110)); + + return outcom(av7110, COMTYPE_AUDIODAC, AudioDAC, 2, addr, data); +} + +static int +SetVolume(av7110_t *av7110, int volleft, int volright) +{ + int err; + + DEB_EE(("av7110: %p\n",av7110)); + + switch (av7110->adac_type) { + case DVB_ADAC_TI: + volleft = (volleft * 256) / 1036; + volright = (volright * 256) / 1036; + if (volleft > 0x3f) + volleft = 0x3f; + if (volright > 0x3f) + volright = 0x3f; + if ((err = SendDAC(av7110, 3, 0x80 + volleft))) + return err; + return SendDAC(av7110, 4, volright); + + case DVB_ADAC_CRYSTAL: + volleft=127-volleft/2; + volright=127-volright/2; + i2c_writereg(av7110, 0x20, 0x03, volleft); + i2c_writereg(av7110, 0x20, 0x04, volright); + return 0; + } + return 0; +} + +#ifdef CONFIG_DVB_AV7110_OSD + +inline static int ResetBlend(av7110_t *av7110, u8 windownr) +{ + return outcom(av7110, COMTYPE_OSD, SetNonBlend, 1, windownr); +} + +inline static int SetColorBlend(av7110_t *av7110, u8 windownr) +{ + return outcom(av7110, COMTYPE_OSD, SetCBlend, 1, windownr); +} + +inline static int SetWindowBlend(av7110_t *av7110, u8 windownr, u8 blending) +{ + return outcom(av7110, COMTYPE_OSD, SetWBlend, 2, windownr, blending); +} + +inline static int SetBlend_(av7110_t *av7110, u8 windownr, + OSDPALTYPE colordepth, u16 index, u8 blending) +{ + return outcom(av7110, COMTYPE_OSD, SetBlend, 4, + windownr, colordepth, index, blending); +} + +inline static int SetColor_(av7110_t *av7110, u8 windownr, + OSDPALTYPE colordepth, u16 index, u16 colorhi, u16 colorlo) +{ + return outcom(av7110, COMTYPE_OSD, SetColor, 5, + windownr, colordepth, index, colorhi, colorlo); +} + +inline static int BringToTop(av7110_t *av7110, u8 windownr) +{ + return outcom(av7110, COMTYPE_OSD, WTop, 1, windownr); +} + +inline static int SetFont(av7110_t *av7110, u8 windownr, u8 fontsize, + u16 colorfg, u16 colorbg) +{ + return outcom(av7110, COMTYPE_OSD, Set_Font, 4, + windownr, fontsize, colorfg, colorbg); +} + +static int FlushText(av7110_t *av7110) +{ + u32 start; + + if (down_interruptible(&av7110->dcomlock)) + return -ERESTARTSYS; + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2 ) ) { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_OSD) { + printk(KERN_ERR "%s: timeout waiting for BUFF1_BASE == 0\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } + } + up(&av7110->dcomlock); + return 0; +} + +static int WriteText(av7110_t *av7110, u8 win, u16 x, u16 y, u8* buf) +{ + int i, ret; + u32 start; + int length=strlen(buf)+1; + u16 cbuf[5] = { (COMTYPE_OSD<<8) + DText, 3, win, x, y }; + + if (down_interruptible(&av7110->dcomlock)) + return -ERESTARTSYS; + + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2 ) ) { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_OSD) { + printk(KERN_ERR "%s: timeout waiting for BUFF1_BASE == 0\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } + } +#ifndef _NOHANDSHAKE + start = jiffies; + while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) { + ddelay(1); + if ((jiffies - start) > ARM_WAIT_SHAKE) { + printk(KERN_ERR "%s: timeout waiting for HANDSHAKE_REG\n", __FUNCTION__); + up(&av7110->dcomlock); + return -1; + } + } +#endif + for (i=0; idcomlock); + if (ret) + printk("WriteText error\n"); + return ret; +} + +inline static int DrawLine(av7110_t *av7110, u8 windownr, + u16 x, u16 y, u16 dx, u16 dy, u16 color) +{ + return outcom(av7110, COMTYPE_OSD, DLine, 6, + windownr, x, y, dx, dy, color); +} + +inline static int DrawBlock(av7110_t *av7110, u8 windownr, + u16 x, u16 y, u16 dx, u16 dy, u16 color) +{ + return outcom(av7110, COMTYPE_OSD, DBox, 6, + windownr, x, y, dx, dy, color); +} + +inline static int HideWindow(av7110_t *av7110, u8 windownr) +{ + return outcom(av7110, COMTYPE_OSD, WHide, 1, windownr); +} + +inline static int MoveWindowRel(av7110_t *av7110, u8 windownr, u16 x, u16 y) +{ + return outcom(av7110, COMTYPE_OSD, WMoveD, 3, windownr, x, y); +} + +inline static int MoveWindowAbs(av7110_t *av7110, u8 windownr, u16 x, u16 y) +{ + return outcom(av7110, COMTYPE_OSD, WMoveA, 3, windownr, x, y); +} + +inline static int DestroyOSDWindow(av7110_t *av7110, u8 windownr) +{ + return outcom(av7110, COMTYPE_OSD, WDestroy, 1, windownr); +} + +#if 0 +static void DestroyOSDWindows(av7110_t *av7110) +{ + int i; + + for (i=1; i<7; i++) + outcom(av7110, COMTYPE_OSD, WDestroy, 1, i); +} +#endif + +static inline int +CreateOSDWindow(av7110_t *av7110, u8 windownr, + DISPTYPE disptype, u16 width, u16 height) +{ + return outcom(av7110, COMTYPE_OSD, WCreate, 4, + windownr, disptype, width, height); +} + + +static OSDPALTYPE bpp2pal[8]={Pal1Bit, Pal2Bit, 0, Pal4Bit, 0, 0, 0, Pal8Bit}; +static DISPTYPE bpp2bit[8]={BITMAP1, BITMAP2, 0, BITMAP4, 0, 0, 0, BITMAP8}; + +static inline int +LoadBitmap(av7110_t *av7110, u16 format, u16 dx, u16 dy, int inc, u8* data) +{ + int bpp; + int i; + int d, delta; + u8 c; + DECLARE_WAITQUEUE(wait, current); + + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->bmp_state==BMP_LOADING) { + add_wait_queue(&av7110->bmpq, &wait); + while (1) { + set_current_state(TASK_INTERRUPTIBLE); + if (av7110->bmp_state!=BMP_LOADING + || signal_pending(current)) + break; + schedule(); + } + current->state=TASK_RUNNING; + remove_wait_queue(&av7110->bmpq, &wait); + } + if (av7110->bmp_state==BMP_LOADING) + return -1; + av7110->bmp_state=BMP_LOADING; + if (format==BITMAP8) { bpp=8; delta = 1; } + else if (format==BITMAP4) { bpp=4; delta = 2; } + else if (format==BITMAP2) { bpp=2; delta = 4; } + else if (format==BITMAP1) { bpp=1; delta = 8; } + else { + av7110->bmp_state=BMP_NONE; + return -1; + } + av7110->bmplen= ((dx*dy*bpp+7)&~7)/8; + av7110->bmpp=0; + if (av7110->bmplen>32768) { + av7110->bmp_state=BMP_NONE; + return -1; + } + for (i=0; ibmpbuf+1024+i*dx, data+i*inc, dx)) { + av7110->bmp_state=BMP_NONE; + return -1; + } + } + if (format != BITMAP8) { + for (i=0; ibmpbuf)[1024+i*delta+delta-1]; + for (d=delta-2; d>=0; d--) { + c |= (((u8 *)av7110->bmpbuf)[1024+i*delta+d] + << ((delta-d-1)*bpp)); + ((u8 *)av7110->bmpbuf)[1024+i] = c; + } + } + } + av7110->bmplen+=1024; + return outcom(av7110, COMTYPE_OSD, LoadBmp, 3, format, dx, dy); +} + +static int +BlitBitmap(av7110_t *av7110, u16 win, u16 x, u16 y, u16 trans) +{ + DECLARE_WAITQUEUE(wait, current); + + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->bmp_state==BMP_NONE) + return -1; + if (av7110->bmp_state==BMP_LOADING) { + add_wait_queue(&av7110->bmpq, &wait); + while (1) { + set_current_state(TASK_INTERRUPTIBLE); + if (av7110->bmp_state!=BMP_LOADING + || signal_pending(current)) + break; + schedule(); + } + current->state=TASK_RUNNING; + remove_wait_queue(&av7110->bmpq, &wait); + } + if (av7110->bmp_state==BMP_LOADED) + return outcom(av7110, COMTYPE_OSD, BlitBmp, 4, win, x, y, trans); + return -1; +} + +static inline int +ReleaseBitmap(av7110_t *av7110) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->bmp_state!=BMP_LOADED) + return -1; + av7110->bmp_state=BMP_NONE; + return outcom(av7110, COMTYPE_OSD, ReleaseBmp, 0); +} + +static u32 RGB2YUV(u16 R, u16 G, u16 B) +{ + u16 y, u, v; + u16 Y, Cr, Cb; + + y = R * 77 + G * 150 + B * 29; // Luma=0.299R+0.587G+0.114B 0..65535 + u = 2048+B * 8 -(y>>5); // Cr 0..4095 + v = 2048+R * 8 -(y>>5); // Cb 0..4095 + + Y=y/256; + Cb=u/16; + Cr=v/16; + + return Cr|(Cb<<16)|(Y<<8); +} + +static void +OSDSetColor(av7110_t *av7110, u8 color, u8 r, u8 g, u8 b, u8 blend) +{ + u16 ch, cl; + u32 yuv; + + yuv=blend ? RGB2YUV(r,g,b) : 0; + cl=(yuv&0xffff); + ch=((yuv>>16)&0xffff); + SetColor_(av7110, av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], + color, ch, cl); + SetBlend_(av7110, av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], + color, ((blend>>4)&0x0f)); +} + +static int +OSDSetBlock(av7110_t *av7110, int x0, int y0, int x1, int y1, int inc, u8 *data) +{ + uint w, h, bpp, bpl, size, lpb, bnum, brest; + int i; + + w=x1-x0+1; h=y1-y0+1; + if (inc<=0) + inc=w; + if (w<=0 || w>720 || h<=0 || h>576) + return -1; + bpp=av7110->osdbpp[av7110->osdwin]+1; + bpl=((w*bpp+7)&~7)/8; + size=h*bpl; + lpb=(32*1024)/bpl; + bnum=size/(lpb*bpl); + brest=size-bnum*lpb*bpl; + + for (i=0; iosdbpp[av7110->osdwin]], w, lpb, inc, data); + BlitBitmap(av7110, av7110->osdwin, x0, y0+i*lpb, 0); + data+=lpb*inc; + } + if (brest) { + LoadBitmap(av7110, bpp2bit[av7110->osdbpp[av7110->osdwin]], w, brest/bpl, inc, data); + BlitBitmap(av7110, av7110->osdwin, x0, y0+bnum*lpb, 0); + } + ReleaseBitmap(av7110); + return 0; +} + +static int +OSD_DrawCommand(av7110_t *av7110, osd_cmd_t *dc) +{ + switch (dc->cmd) { + case OSD_Close: + DestroyOSDWindow(av7110, av7110->osdwin); + return 0; + case OSD_Open: + av7110->osdbpp[av7110->osdwin]=(dc->color-1)&7; + CreateOSDWindow(av7110, av7110->osdwin, bpp2bit[av7110->osdbpp[av7110->osdwin]], + dc->x1-dc->x0+1, dc->y1-dc->y0+1); + if (!dc->data) { + MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0); + SetColorBlend(av7110, av7110->osdwin); + } + return 0; + case OSD_Show: + MoveWindowRel(av7110, av7110->osdwin, 0, 0); + return 0; + case OSD_Hide: + HideWindow(av7110, av7110->osdwin); + return 0; + case OSD_Clear: + DrawBlock(av7110, av7110->osdwin, 0, 0, 720, 576, 0); + return 0; + case OSD_Fill: + DrawBlock(av7110, av7110->osdwin, 0, 0, 720, 576, dc->color); + return 0; + case OSD_SetColor: + OSDSetColor(av7110, dc->color, dc->x0, dc->y0, dc->x1, dc->y1); + return 0; + case OSD_SetPalette: + { + int i, len=dc->x0-dc->color+1; + u8 *colors=(u8 *)dc->data; + + for (i=0; icolor+i, + colors[i*4] , colors[i*4+1], + colors[i*4+2], colors[i*4+3]); + return 0; + } + case OSD_SetTrans: + return 0; + case OSD_SetPixel: + DrawLine(av7110, av7110->osdwin, + dc->x0, dc->y0, 0, 0, + dc->color); + return 0; + case OSD_GetPixel: + return 0; + + case OSD_SetRow: + dc->y1=dc->y0; + case OSD_SetBlock: + OSDSetBlock(av7110, dc->x0, dc->y0, dc->x1, dc->y1, dc->color, dc->data); + return 0; + + case OSD_FillRow: + DrawBlock(av7110, av7110->osdwin, dc->x0, dc->y0, + dc->x1-dc->x0+1, dc->y1, + dc->color); + return 0; + case OSD_FillBlock: + DrawBlock(av7110, av7110->osdwin, dc->x0, dc->y0, + dc->x1-dc->x0+1, dc->y1-dc->y0+1, + dc->color); + return 0; + case OSD_Line: + DrawLine(av7110, av7110->osdwin, + dc->x0, dc->y0, dc->x1-dc->x0, dc->y1-dc->y0, + dc->color); + return 0; + case OSD_Query: + return 0; + case OSD_Test: + return 0; + case OSD_Text: + { + char textbuf[240]; + + if (strncpy_from_user(textbuf, dc->data, 240)<0) + return -EFAULT; + textbuf[239]=0; + if (dc->x1>3) + dc->x1=3; + SetFont(av7110, av7110->osdwin, dc->x1, + (u16) (dc->color&0xffff), (u16) (dc->color>>16)); + FlushText(av7110); + WriteText(av7110, av7110->osdwin, dc->x0, dc->y0, textbuf); + return 0; + } + case OSD_SetWindow: + if (dc->x0<1 || dc->x0>7) + return -EINVAL; + av7110->osdwin=dc->x0; + return 0; + case OSD_MoveWindow: + MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0); + SetColorBlend(av7110, av7110->osdwin); + return 0; + default: + return -EINVAL; + } +} + + +static int +dvb_osd_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, void *parg) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + if (cmd==OSD_SEND_CMD) + return OSD_DrawCommand(av7110, (osd_cmd_t *)parg); + + return -EINVAL; +} + + +static struct file_operations dvb_osd_fops = { + .owner = THIS_MODULE, + .ioctl = dvb_generic_ioctl, + .open = dvb_generic_open, + .release = dvb_generic_release, +}; + +static struct dvb_device dvbdev_osd = { + .priv = 0, + .users = 1, + .writers = 1, + .fops = &dvb_osd_fops, + .kernel_ioctl = dvb_osd_ioctl, +}; + +#endif /* CONFIG_DVB_AV7110_OSD */ + + +/* get version of the firmware ROM, RTSL, video ucode and ARM application */ + +static void +firmversion(av7110_t *av7110) +{ + u16 buf[20]; + + u16 tag = ((COMTYPE_REQUEST << 8) + ReqVersion); + + DEB_EE(("av7110: %p\n",av7110)); + + RequestParameter(av7110, tag, buf, 16); + + av7110->arm_fw=(buf[0] << 16) + buf[1]; + av7110->arm_rtsl=(buf[2] << 16) + buf[3]; + av7110->arm_vid=(buf[4] << 16) + buf[5]; + av7110->arm_app=(buf[6] << 16) + buf[7]; + av7110->avtype=(buf[8] << 16) + buf[9]; + + printk ("DVB: AV711%d(%d) - firm %08x, rtsl %08x, vid %08x, app %08x\n", + av7110->avtype, av7110->dvb_adapter->num, av7110->arm_fw, + av7110->arm_rtsl, av7110->arm_vid, av7110->arm_app); + + /* print firmware capabilities */ + if ((av7110->arm_app >> 16) & 0x8000) + printk ("DVB: AV711%d(%d) - firmware supports CI link layer interface\n", + av7110->avtype, av7110->dvb_adapter->num); + else + printk ("DVB: AV711%d(%d) - no firmware support for CI link layer interface\n", + av7110->avtype, av7110->dvb_adapter->num); + + return; +} + +static int +waitdebi(av7110_t *av7110, int adr, int state) +{ + int k; + + DEB_EE(("av7110: %p\n",av7110)); + + for (k=0; k<100; k++, udelay(500)) { + if (irdebi(av7110, DEBINOSWAP, adr, 0, 2) == state) + return 0; + } + return -1; +} + + +static int +load_dram(av7110_t *av7110, u32 *data, int len) +{ + int i; + int blocks, rest; + u32 base, bootblock=BOOT_BLOCK; + + DEB_EE(("av7110: %p\n",av7110)); + + blocks=len/BOOT_MAX_SIZE; + rest=len % BOOT_MAX_SIZE; + base=DRAM_START_CODE; + + for (i=0; i 0) { + if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BUFFER_EMPTY) < 0) + return -1; + if (rest>4) + iwdebi(av7110, DEBISWAB, bootblock, i*(BOOT_MAX_SIZE)+(u32)data, rest); + else + iwdebi(av7110, DEBISWAB, bootblock, i*(BOOT_MAX_SIZE)-4+(u32)data, rest+4); + + iwdebi(av7110, DEBISWAB, BOOT_BASE, swab32(base), 4); + iwdebi(av7110, DEBINOSWAP, BOOT_SIZE, rest, 2); + iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); + } + if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BUFFER_EMPTY) < 0) + return -1; + iwdebi(av7110, DEBINOSWAP, BOOT_SIZE, 0, 2); + iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); + if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BOOT_COMPLETE) < 0) + return -1; + return 0; +} + + +static u8 +bootcode[] = { + 0xea, 0x00, 0x00, 0x0e, 0xe1, 0xb0, 0xf0, 0x0e, /* 0x0000 */ + 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, + 0xe2, 0x5e, 0xf0, 0x08, 0xe2, 0x5e, 0xf0, 0x04, + 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, + 0x2c, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x34, + 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0x5a, 0x5a, + 0x00, 0x1f, 0x15, 0x55, 0x00, 0x00, 0x00, 0x09, + 0xe5, 0x9f, 0xd0, 0x5c, 0xe5, 0x9f, 0x40, 0x54, /* 0x0040 */ + 0xe3, 0xa0, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x00, + 0xe5, 0x84, 0x00, 0x04, 0xe1, 0xd4, 0x10, 0xb0, + 0xe3, 0x51, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xfc, + 0xe1, 0xa0, 0x10, 0x0d, 0xe5, 0x94, 0x30, 0x04, + 0xe1, 0xd4, 0x20, 0xb2, 0xe2, 0x82, 0x20, 0x3f, + 0xe1, 0xb0, 0x23, 0x22, 0x03, 0xa0, 0x00, 0x02, + 0xe1, 0xc4, 0x00, 0xb0, 0x0a, 0xff, 0xff, 0xf4, + 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, /* 0x0080 */ + 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, + 0xe2, 0x52, 0x20, 0x01, 0x1a, 0xff, 0xff, 0xf9, + 0xe2, 0x2d, 0xdb, 0x05, 0xea, 0xff, 0xff, 0xec, + 0x2c, 0x00, 0x03, 0xf8, 0x2c, 0x00, 0x04, 0x00, +}; + +#include "av7110_firm.h" + +static int +bootarm(av7110_t *av7110) +{ + struct saa7146_dev *dev= av7110->dev; + u32 ret; + int i; + + DEB_EE(("av7110: %p\n",av7110)); + + saa7146_setgpio(dev, RESET_LINE, SAA7146_GPIO_OUTLO); + + /* Disable DEBI and GPIO irq */ + IER_DISABLE(av7110->dev, MASK_03|MASK_19); +/* + saa7146_write(av7110->dev, IER, + saa7146_read(av7110->dev, IER) & + ~(MASK_19 | MASK_03)); +*/ + saa7146_write(av7110->dev, ISR, (MASK_19 | MASK_03)); + + /* enable DEBI */ + saa7146_write(av7110->dev, MC1, 0x08800880); + saa7146_write(av7110->dev, DD1_STREAM_B, 0x00000000); + saa7146_write(av7110->dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + + /* test DEBI */ + iwdebi(av7110, DEBISWAP, DPRAM_BASE, 0x76543210, 4); + if ((ret=irdebi(av7110, DEBINOSWAP, DPRAM_BASE, 0, 4))!=0x10325476) { + printk(KERN_ERR "dvb: debi test in bootarm() failed: " + "%08x != %08x\n", ret, 0x10325476);; + return -1; + } + for (i=0; i<8192; i+=4) + iwdebi(av7110, DEBISWAP, DPRAM_BASE+i, 0x00, 4); + DEB_D(("bootarm: debi test OK\n")); + + /* boot */ + DEB_D(("bootarm: load boot code\n")); + + saa7146_setgpio(dev, ARM_IRQ_LINE, SAA7146_GPIO_IRQLO); + //saa7146_setgpio(dev, DEBI_DONE_LINE, SAA7146_GPIO_INPUT); + //saa7146_setgpio(dev, 3, SAA7146_GPIO_INPUT); + + iwdebi(av7110, DEBISWAB, DPRAM_BASE, (u32) bootcode, sizeof(bootcode)); + iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); + + wait_for_debi_done(av7110); + saa7146_setgpio(dev, RESET_LINE, SAA7146_GPIO_OUTHI); + current->state=TASK_INTERRUPTIBLE; + schedule_timeout(HZ); + + DEB_D(("bootarm: load dram code\n")); + + if (load_dram(av7110, (u32 *)Root, sizeof(Root))<0) + return -1; + + saa7146_setgpio(dev, RESET_LINE, SAA7146_GPIO_OUTLO); + mdelay(1); + + DEB_D(("bootarm: load dpram code\n")); + + iwdebi(av7110, DEBISWAB, DPRAM_BASE, (u32) Dpram, sizeof(Dpram)); + + wait_for_debi_done(av7110); + + saa7146_setgpio(dev, RESET_LINE, SAA7146_GPIO_OUTHI); + mdelay(800); + + //ARM_ClearIrq(av7110); + ARM_ResetMailBox(av7110); + saa7146_write(av7110->dev, ISR, (MASK_19 | MASK_03)); + IER_ENABLE(av7110->dev, MASK_03); +// saa7146_write(av7110->dev, IER, +// saa7146_read(av7110->dev, IER) | MASK_03 ); + + av7110->arm_errors=0; + av7110->arm_ready=1; + return 0; +} + +static inline int +SetPIDs(av7110_t *av7110, u16 vpid, u16 apid, u16 ttpid, + u16 subpid, u16 pcrpid) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (vpid == 0x1fff || apid == 0x1fff || + ttpid == 0x1fff || subpid == 0x1fff || pcrpid == 0x1fff) + vpid = apid = ttpid = subpid = pcrpid = 0; + + return outcom(av7110, COMTYPE_PIDFILTER, MultiPID, 5, + pcrpid, vpid, apid, ttpid, subpid); +} + +static void +ChangePIDs(av7110_t *av7110, u16 vpid, u16 apid, u16 ttpid, + u16 subpid, u16 pcrpid) +{ + DEB_EE(("av7110: %p\n",av7110)); + + if (down_interruptible(&av7110->pid_mutex)) + return; + + if (!(vpid&0x8000)) av7110->pids[DMX_PES_VIDEO]=vpid; + if (!(apid&0x8000)) av7110->pids[DMX_PES_AUDIO]=apid; + if (!(ttpid&0x8000)) av7110->pids[DMX_PES_TELETEXT]=ttpid; + if (!(pcrpid&0x8000)) av7110->pids[DMX_PES_PCR]=pcrpid; + + av7110->pids[DMX_PES_SUBTITLE]=0; + + if (av7110->fe_synced) + SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid); + + up(&av7110->pid_mutex); +} + + +static void +SetMode(av7110_t *av7110, int mode) +{ + DEB_EE(("av7110: %p\n",av7110)); + + outcom(av7110, COMTYPE_ENCODER, LoadVidCode, 1, mode); + + if (!av7110->playing) { + ChangePIDs(av7110, av7110->pids[DMX_PES_VIDEO], + av7110->pids[DMX_PES_AUDIO], + av7110->pids[DMX_PES_TELETEXT], + 0, av7110->pids[DMX_PES_PCR]); + outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); + } +} + +inline static void +TestMode(av7110_t *av7110, int mode) +{ + DEB_EE(("av7110: %p\n",av7110)); + outcom(av7110, COMTYPE_ENCODER, SetTestMode, 1, mode); +} + +inline static void +VidMode(av7110_t *av7110, int mode) +{ + DEB_EE(("av7110: %p\n",av7110)); + outcom(av7110, COMTYPE_ENCODER, SetVidMode, 1, mode); +} + + +static int inline +vidcom(av7110_t *av7110, u32 com, u32 arg) +{ + DEB_EE(("av7110: %p\n",av7110)); + return outcom(av7110, 0x80, 0x02, 4, + (com>>16), (com&0xffff), + (arg>>16), (arg&0xffff)); +} + +static int inline +audcom(av7110_t *av7110, u32 com) +{ + DEB_EE(("av7110: %p\n",av7110)); + return outcom(av7110, 0x80, 0x03, 4, + (com>>16), (com&0xffff)); +} + +inline static void +Set22K(av7110_t *av7110, int state) +{ + DEB_EE(("av7110: %p\n",av7110)); + outcom(av7110, COMTYPE_AUDIODAC, (state ? ON22K : OFF22K), 0); +} + + +static +int SendDiSEqCMsg(av7110_t *av7110, int len, u8 *msg, int burst) +{ + int i; + u16 buf[18] = { ((COMTYPE_AUDIODAC << 8) + SendDiSEqC), + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + DEB_EE(("av7110: %p\n",av7110)); + + if (len>10) + len=10; + + buf[1] = len+2; + buf[2] = len; + + if (burst!=-1) + buf[3]=burst ? 0x01 : 0x00; + else + buf[3]=0xffff; + + for (i=0; ii2c_bus; + struct i2c_msg msgs; + + msgs.flags=0; + msgs.addr=id/2; + msgs.len=2; + msgs.buf=msg; + return i2c->xfer (i2c, &msgs, 1); +} + +static inline int +msp_writereg(av7110_t *av7110, u8 dev, u16 reg, u16 val) +{ + u8 msg[5]={ dev, reg>>8, reg&0xff, val>>8 , val&0xff }; + struct dvb_i2c_bus *i2c = av7110->i2c_bus; + struct i2c_msg msgs; + + msgs.flags=0; + msgs.addr=0x40; + msgs.len=5; + msgs.buf=msg; + return i2c->xfer(i2c, &msgs, 1); +} + +static inline u8 +i2c_readreg(av7110_t *av7110, u8 id, u8 reg) +{ + struct dvb_i2c_bus *i2c = av7110->i2c_bus; + u8 mm1[] = {0x00}; + u8 mm2[] = {0x00}; + struct i2c_msg msgs[2]; + + msgs[0].flags=0; + msgs[1].flags=I2C_M_RD; + msgs[0].addr=msgs[1].addr=id/2; + mm1[0]=reg; + msgs[0].len=1; msgs[1].len=1; + msgs[0].buf=mm1; msgs[1].buf=mm2; + i2c->xfer(i2c, msgs, 2); + + return mm2[0]; +} + + +/**************************************************************************** + * I/O buffer management and control + ****************************************************************************/ + +static int sw2mode[16] = { + VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, + VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, VIDEO_MODE_NTSC, + VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, + VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, +}; + +static void +get_video_format(av7110_t *av7110, u8 *buf, int count) +{ + int i; + int hsize,vsize; + int sw; + u8 *p; + + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->sinfo) + return; + for (i=7; i> 4) | (p[0] << 4); + vsize = ((p[1] &0x0F) << 8) | (p[2]); + sw = (p[3]&0x0F); + SetMode(av7110, sw2mode[sw]); + DEB_S(("dvb: playback %dx%d fr=%d\n", hsize, vsize, sw)); + av7110->sinfo=1; + break; + } +} + +static inline long +aux_ring_buffer_write(dvb_ringbuffer_t *rbuf, const char *buf, unsigned long count) +{ + unsigned long todo = count; + int free; + + while (todo > 0) { + if (dvb_ringbuffer_free(rbuf)<2048) { + if (wait_event_interruptible(rbuf->queue, + (dvb_ringbuffer_free(rbuf)>=2048))) + return count-todo; + } + free = dvb_ringbuffer_free(rbuf); + if (free > todo) + free = todo; + (void)dvb_ringbuffer_write(rbuf,buf,free,0); + todo -= free; + buf += free; + } + + return count-todo; +} + +static void +play_video_cb(u8 *buf, int count, void *priv) +{ + av7110_t *av7110=(av7110_t *) priv; + DEB_EE(("av7110: %p\n",av7110)); + + if ((buf[3]&0xe0)==0xe0) { + get_video_format(av7110, buf, count); + aux_ring_buffer_write(&av7110->avout, buf, count); + } else + aux_ring_buffer_write(&av7110->aout, buf, count); +} + +static void +play_audio_cb(u8 *buf, int count, void *priv) +{ + av7110_t *av7110=(av7110_t *) priv; + DEB_EE(("av7110: %p\n",av7110)); + + aux_ring_buffer_write(&av7110->aout, buf, count); +} + +#define FREE_COND (dvb_ringbuffer_free(&av7110->avout)>=20*1024 && dvb_ringbuffer_free(&av7110->aout)>=20*1024) + +static ssize_t +dvb_play(av7110_t *av7110, const u8 *buf, + unsigned long count, int nonblock, int type, int umem) +{ + unsigned long todo = count, n; + DEB_EE(("av7110: %p\n",av7110)); + + if (!av7110->kbuf[type]) + return -ENOBUFS; + + if (nonblock && !FREE_COND) + return -EWOULDBLOCK; + + while (todo>0) { + if (!FREE_COND) { + if (nonblock) + return count-todo; + if (wait_event_interruptible(av7110->avout.queue, + FREE_COND)) + return count-todo; + } + n=todo; + if (n>IPACKS*2) + n=IPACKS*2; + if (umem) { + if (copy_from_user(av7110->kbuf[type], buf, n)) + return -EFAULT; + av7110_ipack_instant_repack(av7110->kbuf[type], n, + &av7110->ipack[type]); + } else { + av7110_ipack_instant_repack(buf, n, + &av7110->ipack[type]); + } + todo -= n; + buf += n; + } + return count-todo; +} + +static ssize_t +dvb_aplay(av7110_t *av7110, const u8 *buf, + unsigned long count, int nonblock, int type) +{ + unsigned long todo = count, n; + DEB_EE(("av7110: %p\n",av7110)); + + if (!av7110->kbuf[type]) + return -ENOBUFS; + if (nonblock && dvb_ringbuffer_free(&av7110->aout)<20*1024) + return -EWOULDBLOCK; + + while (todo>0) { + if (dvb_ringbuffer_free(&av7110->aout)<20*1024) { + if (nonblock) + return count-todo; + if (wait_event_interruptible(av7110->aout.queue, + (dvb_ringbuffer_free(&av7110->aout)>= + 20*1024))) + return count-todo; + } + n=todo; + if (n>IPACKS*2) + n=IPACKS*2; + if (copy_from_user(av7110->kbuf[type], buf, n)) + return -EFAULT; + av7110_ipack_instant_repack(av7110->kbuf[type], n, + &av7110->ipack[type]); +// memcpy(dvb->kbuf[type], buf, n); + todo -= n; + buf += n; + } + return count-todo; +} + +void init_p2t(p2t_t *p, struct dvb_demux_feed *feed) +{ + memset(p->pes,0,TS_SIZE); + p->counter = 0; + p->pos = 0; + p->frags = 0; + if (feed) p->feed = feed; +} + +void clear_p2t(p2t_t *p) +{ + memset(p->pes,0,TS_SIZE); +// p->counter = 0; + p->pos = 0; + p->frags = 0; +} + + +long int find_pes_header(u8 const *buf, long int length, int *frags) +{ + int c = 0; + int found = 0; + + *frags = 0; + + while (c < length-3 && !found) { + if (buf[c] == 0x00 && buf[c+1] == 0x00 && + buf[c+2] == 0x01) { + switch ( buf[c+3] ) { + + case PROG_STREAM_MAP: + case PRIVATE_STREAM2: + case PROG_STREAM_DIR: + case ECM_STREAM : + case EMM_STREAM : + case PADDING_STREAM : + case DSM_CC_STREAM : + case ISO13522_STREAM: + case PRIVATE_STREAM1: + case AUDIO_STREAM_S ... AUDIO_STREAM_E: + case VIDEO_STREAM_S ... VIDEO_STREAM_E: + found = 1; + break; + + default: + c++; + break; + } + } else c++; + } + if (c == length-3 && !found){ + if (buf[length-1] == 0x00) *frags = 1; + if (buf[length-2] == 0x00 && + buf[length-1] == 0x00) *frags = 2; + if (buf[length-3] == 0x00 && + buf[length-2] == 0x00 && + buf[length-1] == 0x01) *frags = 3; + return -1; + } + + return c; +} + +void pes_to_ts( u8 const *buf, long int length, u16 pid, p2t_t *p) +{ + int c,c2,l,add; + int check,rest; + + c = 0; + c2 = 0; + if (p->frags){ + check = 0; + switch(p->frags){ + case 1: + if ( buf[c] == 0x00 && buf[c+1] == 0x01 ){ + check = 1; + c += 2; + } + break; + case 2: + if ( buf[c] == 0x01 ){ + check = 1; + c++; + } + break; + case 3: + check = 1; + } + if(check){ + switch ( buf[c] ) { + + case PROG_STREAM_MAP: + case PRIVATE_STREAM2: + case PROG_STREAM_DIR: + case ECM_STREAM : + case EMM_STREAM : + case PADDING_STREAM : + case DSM_CC_STREAM : + case ISO13522_STREAM: + case PRIVATE_STREAM1: + case AUDIO_STREAM_S ... AUDIO_STREAM_E: + case VIDEO_STREAM_S ... VIDEO_STREAM_E: + p->pes[0] = 0x00; + p->pes[1] = 0x00; + p->pes[2] = 0x01; + p->pes[3] = buf[c]; + p->pos=4; + memcpy(p->pes+p->pos,buf+c,(TS_SIZE-4)-p->pos); + c += (TS_SIZE-4)-p->pos; + p_to_t(p->pes,(TS_SIZE-4),pid,&p->counter, + p->feed); + clear_p2t(p); + break; + + default: + c=0; + break; + } + } + p->frags = 0; + } + + if (p->pos){ + c2 = find_pes_header(buf+c,length-c,&p->frags); + if (c2 >= 0 && c2 < (TS_SIZE-4)-p->pos){ + l = c2+c; + } else l = (TS_SIZE-4)-p->pos; + memcpy(p->pes+p->pos,buf,l); + c += l; + p->pos += l; + p_to_t(p->pes,p->pos,pid,&p->counter, p->feed); + clear_p2t(p); + } + + add = 0; + while (c < length){ + c2 = find_pes_header(buf+c+add,length-c-add,&p->frags); + if (c2 >= 0) { + c2 += c+add; + if (c2 > c){ + p_to_t(buf+c,c2-c,pid,&p->counter, + p->feed); + c = c2; + clear_p2t(p); + add = 0; + } else add = 1; + } else { + l = length-c; + rest = l % (TS_SIZE-4); + l -= rest; + p_to_t(buf+c,l,pid,&p->counter, + p->feed); + memcpy(p->pes,buf+c+l,rest); + p->pos = rest; + c = length; + } + } +} + + +int write_ts_header2(u16 pid, u8 *counter, int pes_start, u8 *buf, u8 length) +{ + int i; + int c = 0; + int fill; + u8 tshead[4] = { 0x47, 0x00, 0x00, 0x10}; + + fill = (TS_SIZE-4)-length; + if (pes_start) tshead[1] = 0x40; + if (fill) tshead[3] = 0x30; + tshead[1] |= (u8)((pid & 0x1F00) >> 8); + tshead[2] |= (u8)(pid & 0x00FF); + tshead[3] |= ((*counter)++ & 0x0F) ; + memcpy(buf,tshead,4); + c+=4; + + + if (fill){ + buf[4] = fill-1; + c++; + if (fill >1){ + buf[5] = 0x00; + c++; + } + for ( i = 6; i < fill+4; i++){ + buf[i] = 0xFF; + c++; + } + } + + return c; +} + + +void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter, + struct dvb_demux_feed *feed) +{ + + int l, pes_start; + u8 obuf[TS_SIZE]; + long int c = 0; + + pes_start = 0; + if ( length > 3 && + buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0x01 ) + switch (buf[3]){ + case PROG_STREAM_MAP: + case PRIVATE_STREAM2: + case PROG_STREAM_DIR: + case ECM_STREAM : + case EMM_STREAM : + case PADDING_STREAM : + case DSM_CC_STREAM : + case ISO13522_STREAM: + case PRIVATE_STREAM1: + case AUDIO_STREAM_S ... AUDIO_STREAM_E: + case VIDEO_STREAM_S ... VIDEO_STREAM_E: + pes_start = 1; + break; + + default: + break; + } + + while ( c < length ){ + memset(obuf,0,TS_SIZE); + if (length - c >= (TS_SIZE-4)){ + l = write_ts_header2(pid, counter, pes_start + , obuf, (TS_SIZE-4)); + memcpy(obuf+l, buf+c, TS_SIZE-l); + c += TS_SIZE-l; + } else { + l = write_ts_header2(pid, counter, pes_start + , obuf, length-c); + memcpy(obuf+l, buf+c, TS_SIZE-l); + c = length; + } + feed->cb.ts(obuf, 188, 0, 0, &feed->feed.ts, DMX_OK); + pes_start = 0; + } +} + +/**************************************************************************** + * V4L SECTION + ****************************************************************************/ + +int av7110_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) +{ + DEB_EE(("saa7146_dev: %p\n",dev)); + + switch(cmd) { + case VIDIOC_ENUMINPUT: + { + struct v4l2_input *i = arg; + + if( i->index != 0 ) { + return -EINVAL; + } + + memset(i,0,sizeof(*i)); + i->index = 0; + strcpy(i->name, "DVB"); + i->type = V4L2_INPUT_TYPE_CAMERA; + i->audioset = 1; + + return 0; + } + case VIDIOC_G_INPUT: + { + int *input = (int *)arg; + *input = 0; + return 0; + } + case VIDIOC_S_INPUT: + { + return 0; + } + default: + return -ENOIOCTLCMD; + } + return 0; +} + +static +unsigned int dvb_audio_poll(struct file *file, poll_table *wait) +{ + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + av7110_t *av7110 = (av7110_t *) dvbdev->priv; + unsigned int mask = 0; + + DEB_EE(("av7110: %p\n",av7110)); + + poll_wait(file, &av7110->aout.queue, wait); + + if (av7110->playing) { + if (dvb_ringbuffer_free(&av7110->aout)>=20*1024) + mask |= (POLLOUT | POLLWRNORM); + } else /* if not playing: may play if asked for */ + mask = (POLLOUT | POLLWRNORM); + + return mask; +} + + +/**************************************************************************** + * END OF V4L SECTION + ****************************************************************************/ + + +/**************************************************************************** + * DVB API SECTION + ****************************************************************************/ + + +/****************************************************************************** + * hardware filter functions + ******************************************************************************/ + +static int +StartHWFilter(struct dvb_demux_filter *dvbdmxfilter) +{ + struct dvb_demux_feed *dvbdmxfeed=dvbdmxfilter->feed; + av7110_t *av7110=(av7110_t *) dvbdmxfeed->demux->priv; + u16 buf[20]; + int ret, i; + u16 handle; +// u16 mode=0x0320; + u16 mode=0xb96a; + + DEB_EE(("av7110: %p\n",av7110)); + + if (dvbdmxfilter->type==DMX_TYPE_SEC) { + if (hw_sections) { + buf[4]=(dvbdmxfilter->filter.filter_value[0]<<8)| + dvbdmxfilter->maskandmode[0]; + for (i=3; i<18; i++) + buf[i+4-2]=(dvbdmxfilter->filter.filter_value[i]<<8)| + dvbdmxfilter->maskandmode[i]; + mode=4; + } + } else + if ((dvbdmxfeed->ts_type & TS_PACKET) && + !(dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)) + init_p2t(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed); + + buf[0] = (COMTYPE_PID_FILTER << 8) + AddPIDFilter; + buf[1] = 16; + buf[2] = dvbdmxfeed->pid; + buf[3] = mode; + + ret=CommandRequest(av7110, buf, 20, &handle, 1); + if (ret<0) { + printk("StartHWFilter error\n"); + return ret; + } + + av7110->handle2filter[handle]=dvbdmxfilter; + dvbdmxfilter->hw_handle=handle; + + return ret; +} + +static int +StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) +{ + av7110_t *av7110=(av7110_t *) dvbdmxfilter->feed->demux->priv; + u16 buf[3]; + u16 answ[2]; + int ret; + u16 handle; + + DEB_EE(("av7110: %p\n",av7110)); + + handle=dvbdmxfilter->hw_handle; + if (handle>32) { + DEB_S(("dvb: StopHWFilter tried to stop invalid filter %d.\n", + handle)); + DEB_S(("dvb: filter type = %d\n", dvbdmxfilter->type)); + return 0; + } + + av7110->handle2filter[handle]=NULL; + + buf[0] = (COMTYPE_PID_FILTER << 8) + DelPIDFilter; + buf[1] = 1; + buf[2] = handle; + ret=CommandRequest(av7110, buf, 3, answ, 2); + if (ret) + printk("StopHWFilter error\n"); + + if (answ[1] != handle) { + DEB_S(("dvb: filter %d shutdown error :%d\n", handle, answ[1])); + ret=-1; + } + return ret; +} + + +static int +av7110_write_to_decoder(struct dvb_demux_feed *feed, const u8 *buf, size_t len) +{ + struct dvb_demux *demux = feed->demux; + av7110_t *av7110 = (av7110_t *) demux->priv; + ipack *ipack = &av7110->ipack[feed->pes_type]; + + DEB_EE(("av7110: %p\n",av7110)); + + switch (feed->pes_type) { + case 0: + if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) + return -EINVAL; + break; + case 1: + if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) + return -EINVAL; + break; + default: + return -1; + } + + if (!(buf[3] & 0x10)) { // no payload? + return -1; + } + if (buf[1] & 0x40) + av7110_ipack_flush(ipack); + + if (buf[3] & 0x20) { // adaptation field? + len -= buf[4]+1; + buf += buf[4]+1; + if (!len) + return 0; + } + + av7110_ipack_instant_repack(buf+4, len-4, &av7110->ipack[feed->pes_type]); + return 0; +} + + +static void +dvb_feed_start_pid(struct dvb_demux_feed *dvbdmxfeed) +{ + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + av7110_t *av7110=(av7110_t *) dvbdmx->priv; + u16 *pid=dvbdmx->pids, npids[5]; + int i; + + DEB_EE(("av7110: %p\n",av7110)); + + npids[0]=npids[1]=npids[2]=npids[3]=0xffff; + npids[4]=0xffff; + i=dvbdmxfeed->pes_type; + npids[i]=(pid[i]&0x8000) ? 0 : pid[i]; + if ((i==2) && npids[i] && (dvbdmxfeed->ts_type & TS_PACKET)) { + npids[i]=0; + ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); + StartHWFilter(dvbdmxfeed->filter); + return; + } + if (dvbdmxfeed->pes_type<=2) + ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); + + if (dvbdmxfeed->pes_type<2 && npids[0]) + if (av7110->fe_synced) + outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); + + if ((dvbdmxfeed->ts_type & TS_PACKET)) { + if (dvbdmxfeed->pes_type == 0 && + !(dvbdmx->pids[0]&0x8000)) + AV_StartRecord(av7110, RP_AUDIO, + dvbdmxfeed); + if (dvbdmxfeed->pes_type == 1 && + !(dvbdmx->pids[1]&0x8000)) + AV_StartRecord(av7110, RP_VIDEO, + dvbdmxfeed); + } +} + +static void +dvb_feed_stop_pid(struct dvb_demux_feed *dvbdmxfeed) +{ + struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + av7110_t *av7110=(av7110_t *) dvbdmx->priv; + u16 *pid=dvbdmx->pids, npids[5]; + int i; + + DEB_EE(("av7110: %p\n",av7110)); + + if (dvbdmxfeed->pes_type<=1) { + AV_Stop(av7110, dvbdmxfeed->pes_type ? + RP_VIDEO : RP_AUDIO); + if (!av7110->rec_mode) + dvbdmx->recording=0; + if (!av7110->playing) + dvbdmx->playing=0; + } + npids[0]=npids[1]=npids[2]=npids[3]=0xffff; + npids[4]=0xffff; + i=dvbdmxfeed->pes_type; + switch (i) { + case 2: //teletext + if (dvbdmxfeed->ts_type & TS_PACKET) + StopHWFilter(dvbdmxfeed->filter); + npids[2]=0; + break; + case 0: + case 1: + case 4: + if (!pids_off) + return; + npids[i]=(pid[i]&0x8000) ? 0 : pid[i]; + break; + } + ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); +} + +static int +av7110_start_feed(struct dvb_demux_feed *feed) +{ + struct dvb_demux *demux = feed->demux; + av7110_t *av7110 = (av7110_t *) demux->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + if (!demux->dmx.frontend) + return -EINVAL; + + if (feed->pid > 0x1fff) + return -EINVAL; + + if (feed->type == DMX_TYPE_TS) { + if ((feed->ts_type & TS_DECODER) && + (feed->pes_type < DMX_TS_PES_OTHER)) { + switch (demux->dmx.frontend->source) { + case DMX_MEMORY_FE: + if (feed->ts_type & TS_DECODER) + if (feed->pes_type < 2 && + !(demux->pids[0] & 0x8000) && + !(demux->pids[1] & 0x8000)) { + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout); + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout); + AV_StartPlay(av7110,RP_AV); + demux->playing = 1; + } + break; + default: + dvb_feed_start_pid(feed); + break; + } + } else + if ((feed->ts_type & TS_PACKET) && + (demux->dmx.frontend->source!=DMX_MEMORY_FE)) + StartHWFilter(feed->filter); + } + + if (feed->type == DMX_TYPE_SEC) { + int i; + + for (i=0; ifilternum; i++) { + if (demux->filter[i].state!=DMX_STATE_READY) + continue; + if (demux->filter[i].type!=DMX_TYPE_SEC) + continue; + if (demux->filter[i].filter.parent!=&feed->feed.sec) + continue; + demux->filter[i].state=DMX_STATE_GO; + if (demux->dmx.frontend->source!=DMX_MEMORY_FE) + StartHWFilter(&demux->filter[i]); + } + } + + return 0; +} + + +static int +av7110_stop_feed(struct dvb_demux_feed *feed) +{ + struct dvb_demux *demux = feed->demux; + av7110_t *av7110 = (av7110_t *) demux->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + if (feed->type == DMX_TYPE_TS) { + if (feed->ts_type & TS_DECODER) { + if (feed->pes_type >= DMX_TS_PES_OTHER || + !demux->pesfilter[feed->pes_type]) + return -EINVAL; + demux->pids[feed->pes_type]|=0x8000; + demux->pesfilter[feed->pes_type]=0; + } + if (feed->ts_type & TS_DECODER && + feed->pes_type < DMX_TS_PES_OTHER) { + dvb_feed_stop_pid(feed); + } else + if ((feed->ts_type & TS_PACKET) && + (demux->dmx.frontend->source != DMX_MEMORY_FE)) + StopHWFilter(feed->filter); + } + + if (feed->type == DMX_TYPE_SEC) { + int i; + + for (i=0; ifilternum; i++) + if (demux->filter[i].state==DMX_STATE_GO && + demux->filter[i].filter.parent==&feed->feed.sec) { + demux->filter[i].state=DMX_STATE_READY; + if (demux->dmx.frontend->source!=DMX_MEMORY_FE) + StopHWFilter(&demux->filter[i]); + } + } + + return 0; +} + + +static void +restart_feeds(av7110_t *av7110) +{ + struct dvb_demux *dvbdmx=&av7110->demux; + struct dvb_demux_feed *feed; + int mode; + int i; + + DEB_EE(("av7110: %p\n",av7110)); + + mode=av7110->playing; + av7110->playing=0; + av7110->rec_mode=0; + + for (i=0; ifilternum; i++) { + feed=&dvbdmx->feed[i]; + if (feed->state==DMX_STATE_GO) + av7110_start_feed(feed); + } + + if (mode) + AV_StartPlay(av7110, mode); +} + +/****************************************************************************** + * SEC device file operations + ******************************************************************************/ + +static +int av7110_diseqc_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) +{ + av7110_t *av7110 = fe->before_after_data; + + DEB_EE(("av7110: %p\n",av7110)); + + switch (cmd) { + case FE_SET_TONE: + switch ((fe_sec_tone_mode_t) arg) { + case SEC_TONE_ON: + Set22K (av7110, 1); + break; + case SEC_TONE_OFF: + Set22K (av7110, 0); + break; + default: + return -EINVAL; + }; + break; + + case FE_DISEQC_SEND_MASTER_CMD: + { + struct dvb_diseqc_master_cmd *cmd = arg; + + SendDiSEqCMsg (av7110, cmd->msg_len, cmd->msg, 0); + break; + } + + case FE_DISEQC_SEND_BURST: + SendDiSEqCMsg (av7110, 0, NULL, (int) arg); + break; + + default: + return -EOPNOTSUPP; + }; + + return 0; +} + +/****************************************************************************** + * CI link layer file ops (FIXME: move this to separate module later) + ******************************************************************************/ + +int ci_ll_init(dvb_ringbuffer_t *cirbuf, dvb_ringbuffer_t *ciwbuf, int size) +{ + dvb_ringbuffer_init(cirbuf, vmalloc(size), size); + dvb_ringbuffer_init(ciwbuf, vmalloc(size), size); + return 0; +} + +void ci_ll_flush(dvb_ringbuffer_t *cirbuf, dvb_ringbuffer_t *ciwbuf) +{ + dvb_ringbuffer_flush_spinlock_wakeup(cirbuf); + dvb_ringbuffer_flush_spinlock_wakeup(ciwbuf); +} + +void ci_ll_release(dvb_ringbuffer_t *cirbuf, dvb_ringbuffer_t *ciwbuf) +{ + vfree(cirbuf->data); + cirbuf->data=0; + vfree(ciwbuf->data); + ciwbuf->data=0; +} + + +int ci_ll_reset(dvb_ringbuffer_t *cibuf, struct file *file, + int slots, ca_slot_info_t *slot) +{ + int i; + int len=0; + u8 msg[8]={0x00,0x06,0,0x00,0xff,0x02,0x00,0x00}; + + for (i=0; i<2; i++) { + if (slots & (1<f_flags&O_NONBLOCK; + + if (count>2048) + return -EINVAL; + free=dvb_ringbuffer_free(cibuf); + if (count+2>free) { + if (non_blocking) + return -EWOULDBLOCK; + if (wait_event_interruptible(cibuf->queue, + (dvb_ringbuffer_free(cibuf)>=count+2))) + return 0; + } + + DVB_RINGBUFFER_WRITE_BYTE(cibuf,count>>8); + DVB_RINGBUFFER_WRITE_BYTE(cibuf,count&0xff); + + return dvb_ringbuffer_write(cibuf,buf,count,1); +} + +static ssize_t +ci_ll_read(dvb_ringbuffer_t *cibuf, struct file *file, char *buf, size_t count, loff_t *ppos) +{ + int avail; + int non_blocking=file->f_flags&O_NONBLOCK; + ssize_t len; + + if (!cibuf->data || !count) + return 0; + if (non_blocking && (dvb_ringbuffer_empty(cibuf))) + return -EWOULDBLOCK; + if (wait_event_interruptible(cibuf->queue, + !dvb_ringbuffer_empty(cibuf))) + return 0; + avail=dvb_ringbuffer_avail(cibuf); + if (avail<4) + return 0; + len= DVB_RINGBUFFER_PEEK(cibuf,0)<<8; + len|=DVB_RINGBUFFER_PEEK(cibuf,1); + if (availprivate_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + int err=dvb_generic_open(inode, file); + + DEB_EE(("av7110: %p\n",av7110)); + + if (err<0) + return err; + ci_ll_flush(&av7110->ci_rbuffer, &av7110->ci_wbuffer); + return 0; +} + +static +unsigned int dvb_ca_poll (struct file *file, poll_table *wait) +{ + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + av7110_t *av7110 = (av7110_t *) dvbdev->priv; + dvb_ringbuffer_t *rbuf = &av7110->ci_rbuffer; + dvb_ringbuffer_t *wbuf = &av7110->ci_wbuffer; + unsigned int mask = 0; + + DEB_EE(("av7110: %p\n",av7110)); + + poll_wait (file, &rbuf->queue, wait); + + if (!dvb_ringbuffer_empty(rbuf)) + mask |= POLLIN; + + if (dvb_ringbuffer_avail(wbuf)>1024) + mask |= POLLOUT; + + return mask; +} + +static +int dvb_ca_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, void *parg) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + unsigned long arg=(unsigned long) parg; + + DEB_EE(("av7110: %p\n",av7110)); + + switch (cmd) { + case CA_RESET: +#ifdef NEW_CI + + return ci_ll_reset(&av7110->ci_wbuffer, file, arg, &av7110->ci_slot[0]); +#endif + break; + + case CA_GET_CAP: + { + ca_caps_t cap; + + cap.slot_num=2; +#ifdef NEW_CI + cap.slot_type=CA_CI_LINK|CA_DESCR; +#else + cap.slot_type=CA_CI|CA_DESCR; +#endif + cap.descr_num=16; + cap.descr_type=CA_ECD; + memcpy(parg, &cap, sizeof(cap)); + } + break; + + case CA_GET_SLOT_INFO: + { + ca_slot_info_t *info=(ca_slot_info_t *)parg; + + if (info->num>1) + return -EINVAL; + av7110->ci_slot[info->num].num = info->num; +#ifdef NEW_CI + av7110->ci_slot[info->num].type = CA_CI_LINK; +#else + av7110->ci_slot[info->num].type = CA_CI; +#endif + memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); + } + break; + + case CA_GET_MSG: + break; + + case CA_SEND_MSG: + break; + + case CA_GET_DESCR_INFO: + { + ca_descr_info_t info; + + info.num=16; + info.type=CA_ECD; + memcpy (parg, &info, sizeof (info)); + } + break; + + case CA_SET_DESCR: + { + ca_descr_t *descr=(ca_descr_t*) parg; + + if (descr->index>=16) + return -EINVAL; + if (descr->parity>1) + return -EINVAL; + outcom(av7110, COMTYPE_PIDFILTER, SetDescr, 5, + (descr->index<<8)|descr->parity, + (descr->cw[0]<<8)|descr->cw[1], + (descr->cw[2]<<8)|descr->cw[3], + (descr->cw[4]<<8)|descr->cw[5], + (descr->cw[6]<<8)|descr->cw[7]); + } + break; + + default: + return -EINVAL; + } + return 0; +} + +static ssize_t +dvb_ca_write(struct file *file, const char *buf, + size_t count, loff_t *ppos) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + return ci_ll_write(&av7110->ci_wbuffer, file, buf, count, ppos); +} + +static ssize_t +dvb_ca_read(struct file *file, char *buf, size_t count, loff_t *ppos) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + return ci_ll_read(&av7110->ci_rbuffer, file, buf, count, ppos); +} + + + +/****************************************************************************** + * DVB device file operations + ******************************************************************************/ + +static +unsigned int dvb_video_poll(struct file *file, poll_table *wait) +{ + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + av7110_t *av7110 = (av7110_t *) dvbdev->priv; + unsigned int mask = 0; + + DEB_EE(("av7110: %p\n",av7110)); + + poll_wait(file, &av7110->avout.queue, wait); + + if (av7110->playing) { + if (FREE_COND) + mask |= (POLLOUT | POLLWRNORM); + } else /* if not playing: may play if asked for */ + mask = (POLLOUT | POLLWRNORM); + + return mask; +} + +static ssize_t +dvb_video_write(struct file *file, const char *buf, + size_t count, loff_t *ppos) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->videostate.stream_source!=VIDEO_SOURCE_MEMORY) + return -EPERM; + + return dvb_play(av7110, buf, count, file->f_flags&O_NONBLOCK, 1, 1); +} + +static ssize_t +dvb_audio_write(struct file *file, const char *buf, + size_t count, loff_t *ppos) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->audiostate.stream_source!=AUDIO_SOURCE_MEMORY) { + printk(KERN_ERR "not audio source memory\n"); + return -EPERM; + } + return dvb_aplay(av7110, buf, count, file->f_flags&O_NONBLOCK, 0); +} + +u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00 }; + +#define MIN_IFRAME 400000 + +static void +play_iframe(av7110_t *av7110, u8 *buf, unsigned int len, int nonblock) +{ + int i, n=1; + + DEB_EE(("av7110: %p\n",av7110)); + + if (!(av7110->playing&RP_VIDEO)) { + AV_StartPlay(av7110, RP_VIDEO); + n=MIN_IFRAME/len+1; + } + + dvb_play(av7110, iframe_header, sizeof(iframe_header), 0, 1, 0); + + for (i=0; iipack[1]); +} + + +static int +dvb_video_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, void *parg) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + unsigned long arg=(unsigned long) parg; + int ret=0; + + DEB_EE(("av7110: %p\n",av7110)); + + if (((file->f_flags&O_ACCMODE)==O_RDONLY) && + (cmd!=VIDEO_GET_STATUS)) + return -EPERM; + + switch (cmd) { + case VIDEO_STOP: + av7110->videostate.play_state=VIDEO_STOPPED; + if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) + AV_Stop(av7110, RP_VIDEO); + else + vidcom(av7110, 0x000e, + av7110->videostate.video_blank ? 0 : 1); + av7110->trickmode=TRICK_NONE; + break; + + case VIDEO_PLAY: + av7110->trickmode=TRICK_NONE; + if (av7110->videostate.play_state==VIDEO_FREEZED) { + av7110->videostate.play_state=VIDEO_PLAYING; + vidcom(av7110, 0x000d, 0); + } + + if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) { + if (av7110->playing==RP_AV) { + outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); + av7110->playing&=~RP_VIDEO; + } + AV_StartPlay(av7110,RP_VIDEO); + vidcom(av7110, 0x000d, 0); + } else { + //AV_Stop(av7110, RP_VIDEO); + vidcom(av7110, 0x000d, 0); + } + av7110->videostate.play_state=VIDEO_PLAYING; + break; + + case VIDEO_FREEZE: + av7110->videostate.play_state=VIDEO_FREEZED; + if (av7110->playing&RP_VIDEO) + outcom(av7110, COMTYPE_REC_PLAY, __Pause, 0); + else + vidcom(av7110, 0x0102, 1); + av7110->trickmode=TRICK_FREEZE; + break; + + case VIDEO_CONTINUE: + if (av7110->playing&RP_VIDEO) + outcom(av7110, COMTYPE_REC_PLAY, __Continue, 0); + vidcom(av7110, 0x000d, 0); + av7110->videostate.play_state=VIDEO_PLAYING; + av7110->trickmode=TRICK_NONE; + break; + + case VIDEO_SELECT_SOURCE: + av7110->videostate.stream_source=(video_stream_source_t) arg; + break; + + case VIDEO_SET_BLANK: + av7110->videostate.video_blank=(int) arg; + break; + + case VIDEO_GET_STATUS: + memcpy(parg, &av7110->videostate, sizeof(struct video_status)); + break; + + case VIDEO_GET_EVENT: + //FIXME: write firmware support for this + ret=-EOPNOTSUPP; + + case VIDEO_SET_DISPLAY_FORMAT: + { + video_displayformat_t format=(video_displayformat_t) arg; + u16 val=0; + + switch(format) { + case VIDEO_PAN_SCAN: + val=VID_PAN_SCAN_PREF; + break; + + case VIDEO_LETTER_BOX: + val=VID_VC_AND_PS_PREF; + break; + + case VIDEO_CENTER_CUT_OUT: + val=VID_CENTRE_CUT_PREF; + break; + + default: + ret=-EINVAL; + break; + } + if (ret<0) + break; + av7110->videostate.video_format=format; + ret=outcom(av7110, COMTYPE_ENCODER, SetPanScanType, + 1, (u16) val); + break; + } + + case VIDEO_SET_FORMAT: + if (arg>1) { + ret=-EINVAL; + break; + } + av7110->display_ar=arg; + ret=outcom(av7110, COMTYPE_ENCODER, SetMonitorType, + 1, (u16) arg); + break; + + case VIDEO_STILLPICTURE: + { + struct video_still_picture *pic= + (struct video_still_picture *) parg; + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout); + play_iframe(av7110, pic->iFrame, pic->size, + file->f_flags&O_NONBLOCK); + break; + } + + case VIDEO_FAST_FORWARD: + //note: arg is ignored by firmware + if (av7110->playing&RP_VIDEO) + outcom(av7110, COMTYPE_REC_PLAY, + __Scan_I, 2, AV_PES, 0); + else + vidcom(av7110, 0x16, arg); + av7110->trickmode=TRICK_FAST; + av7110->videostate.play_state=VIDEO_PLAYING; + break; + + case VIDEO_SLOWMOTION: + if (av7110->playing&RP_VIDEO) { + outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0); + vidcom(av7110, 0x22, arg); + } else { + vidcom(av7110, 0x0d, 0); + vidcom(av7110, 0x0e, 0); + vidcom(av7110, 0x22, arg); + } + av7110->trickmode=TRICK_SLOW; + av7110->videostate.play_state=VIDEO_PLAYING; + break; + + case VIDEO_GET_CAPABILITIES: + *(int *)parg=VIDEO_CAP_MPEG1| + VIDEO_CAP_MPEG2| + VIDEO_CAP_SYS| + VIDEO_CAP_PROG; + break; + + case VIDEO_CLEAR_BUFFER: + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout); + av7110_ipack_reset(&av7110->ipack[1]); + + if (av7110->playing==RP_AV) { + outcom(av7110, COMTYPE_REC_PLAY, + __Play, 2, AV_PES, 0); + if (av7110->trickmode==TRICK_FAST) + outcom(av7110, COMTYPE_REC_PLAY, + __Scan_I, 2, AV_PES, 0); + if (av7110->trickmode==TRICK_SLOW) { + outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0); + vidcom(av7110, 0x22, arg); + } + if (av7110->trickmode==TRICK_FREEZE) + vidcom(av7110, 0x000e, 1); + } + break; + + case VIDEO_SET_STREAMTYPE: + + break; + + default: + ret=-ENOIOCTLCMD; + break; + } + return ret; +} + +static int +dvb_audio_ioctl(struct inode *inode, struct file *file, + unsigned int cmd, void *parg) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + unsigned long arg=(unsigned long) parg; + int ret=0; + + DEB_EE(("av7110: %p\n",av7110)); + + if (((file->f_flags&O_ACCMODE)==O_RDONLY) && + (cmd!=AUDIO_GET_STATUS)) + return -EPERM; + + switch (cmd) { + case AUDIO_STOP: + if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) + AV_Stop(av7110, RP_AUDIO); + else + audcom(av7110, 1); + av7110->audiostate.play_state=AUDIO_STOPPED; + break; + + case AUDIO_PLAY: + if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) + AV_StartPlay(av7110, RP_AUDIO); + audcom(av7110, 2); + av7110->audiostate.play_state=AUDIO_PLAYING; + break; + + case AUDIO_PAUSE: + audcom(av7110, 1); + av7110->audiostate.play_state=AUDIO_PAUSED; + break; + + case AUDIO_CONTINUE: + if (av7110->audiostate.play_state==AUDIO_PAUSED) { + av7110->audiostate.play_state=AUDIO_PLAYING; + audcom(av7110, 0x12); + } + break; + + case AUDIO_SELECT_SOURCE: + av7110->audiostate.stream_source=(audio_stream_source_t) arg; + break; + + case AUDIO_SET_MUTE: + { + audcom(av7110, arg ? 1 : 2); + av7110->audiostate.mute_state=(int) arg; + break; + } + + case AUDIO_SET_AV_SYNC: + av7110->audiostate.AV_sync_state=(int) arg; + audcom(av7110, arg ? 0x0f : 0x0e); + break; + + case AUDIO_SET_BYPASS_MODE: + ret=-EINVAL; + break; + + case AUDIO_CHANNEL_SELECT: + av7110->audiostate.channel_select=(audio_channel_select_t) arg; + + switch(av7110->audiostate.channel_select) { + case AUDIO_STEREO: + audcom(av7110, 0x80); + break; + + case AUDIO_MONO_LEFT: + audcom(av7110, 0x100); + break; + + case AUDIO_MONO_RIGHT: + audcom(av7110, 0x200); + break; + + default: + ret=-EINVAL; + break; + } + break; + + case AUDIO_GET_STATUS: + memcpy(parg, &av7110->audiostate, sizeof(struct audio_status)); + break; + + case AUDIO_GET_CAPABILITIES: + *(int *)parg=AUDIO_CAP_LPCM| + AUDIO_CAP_MP1| + AUDIO_CAP_MP2; + break; + + case AUDIO_CLEAR_BUFFER: + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout); + av7110_ipack_reset(&av7110->ipack[0]); + if (av7110->playing==RP_AV) + outcom(av7110, COMTYPE_REC_PLAY, + __Play, 2, AV_PES, 0); + break; + case AUDIO_SET_ID: + + break; + case AUDIO_SET_MIXER: + { + struct audio_mixer *amix=(struct audio_mixer *)parg; + + SetVolume(av7110, amix->volume_left, amix->volume_right); + break; + } + case AUDIO_SET_STREAMTYPE: + break; + default: + ret=-ENOIOCTLCMD; + break; + } + return ret; +} + + +static int dvb_video_open(struct inode *inode, struct file *file) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + int err; + + DEB_EE(("av7110: %p\n",av7110)); + + if ((err=dvb_generic_open(inode, file))<0) + return err; + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout); + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->avout); + av7110->video_blank=1; + av7110->audiostate.AV_sync_state=1; + av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX; + return 0; +} + +static int dvb_video_release(struct inode *inode, struct file *file) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + AV_Stop(av7110, RP_VIDEO); + return dvb_generic_release(inode, file); +} + +static int dvb_audio_open(struct inode *inode, struct file *file) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + int err=dvb_generic_open(inode, file); + + DEB_EE(("av7110: %p\n",av7110)); + + if (err<0) + return err; + dvb_ringbuffer_flush_spinlock_wakeup(&av7110->aout); + av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX; + return 0; +} + +static int dvb_audio_release(struct inode *inode, struct file *file) +{ + struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; + av7110_t *av7110=(av7110_t *) dvbdev->priv; + + DEB_EE(("av7110: %p\n",av7110)); + + AV_Stop(av7110, RP_AUDIO); + return dvb_generic_release(inode, file); +} + + + +/****************************************************************************** + * driver registration + ******************************************************************************/ + +static struct file_operations dvb_video_fops = { + .owner = THIS_MODULE, + .write = dvb_video_write, + .ioctl = dvb_generic_ioctl, + .open = dvb_video_open, + .release = dvb_video_release, + .poll = dvb_video_poll, +}; + +static struct dvb_device dvbdev_video = { + .priv = 0, + .users = 1, + .writers = 1, + .fops = &dvb_video_fops, + .kernel_ioctl = dvb_video_ioctl, +}; + +static struct file_operations dvb_audio_fops = { + .owner = THIS_MODULE, + .write = dvb_audio_write, + .ioctl = dvb_generic_ioctl, + .open = dvb_audio_open, + .release = dvb_audio_release, + .poll = dvb_audio_poll, +}; + +static struct dvb_device dvbdev_audio = { + .priv = 0, + .users = 1, + .writers = 1, + .fops = &dvb_audio_fops, + .kernel_ioctl = dvb_audio_ioctl, +}; + +static struct file_operations dvb_ca_fops = { + .owner = THIS_MODULE, + .read = dvb_ca_read, + .write = dvb_ca_write, + .ioctl = dvb_generic_ioctl, + .open = dvb_ca_open, + .release = dvb_generic_release, + .poll = dvb_ca_poll, +}; + +static struct dvb_device dvbdev_ca = { + .priv = 0, + .users = 1, + .writers = 1, + .fops = &dvb_ca_fops, + .kernel_ioctl = dvb_ca_ioctl, +}; + + +static +void av7110_before_after_tune (fe_status_t s, void *data) +{ + struct av7110_s *av7110 = data; + + DEB_EE(("av7110: %p\n",av7110)); + + av7110->fe_synced = (s & FE_HAS_LOCK) ? 1 : 0; + + if (av7110->playing) + return; + + if (down_interruptible(&av7110->pid_mutex)) + return; + + if (av7110->fe_synced) { + SetPIDs(av7110, av7110->pids[DMX_PES_VIDEO], + av7110->pids[DMX_PES_AUDIO], + av7110->pids[DMX_PES_TELETEXT], 0, + av7110->pids[DMX_PES_PCR]); + outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); + } else + SetPIDs(av7110, 0, 0, 0, 0, 0); + + up(&av7110->pid_mutex); +} + + +static +int av7110_register(av7110_t *av7110) +{ + int ret, i; + dmx_frontend_t *dvbfront=&av7110->hw_frontend; + struct dvb_demux *dvbdemux=&av7110->demux; + + DEB_EE(("av7110: %p\n",av7110)); + + if (av7110->registered) + return -1; + + av7110->registered=1; + + dvb_add_frontend_notifier (av7110->dvb_adapter, + av7110_before_after_tune, av7110); + + /** + * init DiSEqC stuff + */ + dvb_add_frontend_ioctls (av7110->dvb_adapter, + av7110_diseqc_ioctl, NULL, av7110); + + av7110->audiostate.AV_sync_state=0; + av7110->audiostate.mute_state=0; + av7110->audiostate.play_state=AUDIO_STOPPED; + av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX; + av7110->audiostate.channel_select=AUDIO_STEREO; + av7110->audiostate.bypass_mode=0; + + av7110->videostate.video_blank=0; + av7110->videostate.play_state=VIDEO_STOPPED; + av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX; + av7110->videostate.video_format=VIDEO_FORMAT_4_3; + av7110->videostate.display_format=VIDEO_CENTER_CUT_OUT; + av7110->display_ar=VIDEO_FORMAT_4_3; + + memcpy(av7110->demux_id, "demux0_0", 9); + av7110->demux_id[5] = av7110->dvb_adapter->num + '0'; + dvbdemux->priv = (void *) av7110; + + for (i=0; i<32; i++) + av7110->handle2filter[i]=NULL; + + dvbdemux->filternum = 32; + dvbdemux->feednum = 32; + dvbdemux->start_feed = av7110_start_feed; + dvbdemux->stop_feed = av7110_stop_feed; + dvbdemux->write_to_decoder = av7110_write_to_decoder; + dvbdemux->dmx.vendor = "TI"; + dvbdemux->dmx.model = "AV7110"; + dvbdemux->dmx.id = av7110->demux_id; + dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | + DMX_MEMORY_BASED_FILTERING); + + dvb_dmx_init(&av7110->demux); + + dvbfront->id = "hw_frontend"; + dvbfront->vendor = "VLSI"; + dvbfront->model = "DVB Frontend"; + dvbfront->source = DMX_FRONTEND_0; + + av7110->dmxdev.filternum = 32; + av7110->dmxdev.demux = &dvbdemux->dmx; + av7110->dmxdev.capabilities = 0; + + dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); + + ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, + &av7110->hw_frontend); + if (ret < 0) + return ret; + + av7110->mem_frontend.id = "mem_frontend"; + av7110->mem_frontend.vendor = "memory"; + av7110->mem_frontend.model = "sw"; + av7110->mem_frontend.source = DMX_MEMORY_FE; + + ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->mem_frontend); + + if (ret < 0) + return ret; + + ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, + &av7110->hw_frontend); + if (ret < 0) + return ret; + + dvb_register_device(av7110->dvb_adapter, &av7110->video_dev, + &dvbdev_video, av7110, DVB_DEVICE_VIDEO); + + dvb_register_device(av7110->dvb_adapter, &av7110->audio_dev, + &dvbdev_audio, av7110, DVB_DEVICE_AUDIO); + + dvb_register_device(av7110->dvb_adapter, &av7110->ca_dev, + &dvbdev_ca, av7110, DVB_DEVICE_CA); +#ifdef CONFIG_DVB_AV7110_OSD + dvb_register_device(av7110->dvb_adapter, &av7110->osd_dev, + &dvbdev_osd, av7110, DVB_DEVICE_OSD); +#endif +#ifdef USE_DVB_DSP + dvb->dsp_dev = dvb_register_dsp(dvb_audio_open, + dvb_audio_release, + dvb_audio_ioctl, + dvb_audio_write, + av7110->audio_dev); +#endif +// } + + av7110->dvb_net.card_num=av7110->dvb_adapter->num; + dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); + + return 0; +} + + +static void +dvb_unregister(av7110_t *av7110) +{ + struct dvb_demux *dvbdemux=&av7110->demux; + + DEB_EE(("av7110: %p\n",av7110)); + + if (!av7110->registered) + return; + + dvb_net_release(&av7110->dvb_net); + + dvbdemux->dmx.close(&dvbdemux->dmx); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend); + + dvb_dmxdev_release(&av7110->dmxdev); + dvb_dmx_release(&av7110->demux); + + dvb_remove_frontend_notifier (av7110->dvb_adapter, + av7110_before_after_tune); + + dvb_remove_frontend_ioctls (av7110->dvb_adapter, + av7110_diseqc_ioctl, NULL); + + dvb_unregister_device(av7110->audio_dev); + dvb_unregister_device(av7110->video_dev); + dvb_unregister_device(av7110->osd_dev); + dvb_unregister_device(av7110->ca_dev); +#ifdef USE_DVB_DSP + dvb_unregister_dsp(av7110->dsp_dev); +#endif +// } +} + +static +int master_xfer (struct dvb_i2c_bus *i2c, const struct i2c_msg msgs[], int num) +{ + struct saa7146_dev *dev = i2c->data; + return saa7146_i2c_transfer(dev, msgs, num, 6); +} + +/**************************************************************************** + * INITIALIZATION + ****************************************************************************/ + +struct saa7146_extension_ioctls ioctls[] = { + { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE }, + { 0, 0 } +}; + +static +int av7110_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_data *pci_ext) +{ + av7110_t *av7110 = NULL; + int ret = 0; + + if (!(av7110 = kmalloc (sizeof (struct av7110_s), GFP_KERNEL))) { + printk ("%s: out of memory!\n", __FUNCTION__); + return -ENOMEM; + } + + memset(av7110, 0, sizeof(av7110_t)); + + av7110->card_name = (char*)pci_ext->ext_priv; + (av7110_t*)dev->ext_priv = av7110; + + DEB_EE(("dev: %p, av7110: %p\n",dev,av7110)); + + if (saa7146_vv_init(dev)) { + ERR(("cannot init capture device. skipping.\n")); + kfree(av7110); + return -1; + } + + if (saa7146_register_device(&av7110->vd, dev, "av7110", VFL_TYPE_GRABBER)) { + ERR(("cannot register capture device. skipping.\n")); + saa7146_vv_release(dev); + kfree(av7110); + return -1; + } + + av7110->dev=(struct saa7146_dev *)dev; + dvb_register_adapter(&av7110->dvb_adapter, av7110->card_name); + + /* the Siemens DVB needs this if you want to have the i2c chips + get recognized before the main driver is fully loaded */ + saa7146_write(dev, GPIO_CTRL, 0x500000); + + saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_3200); + + av7110->i2c_bus = dvb_register_i2c_bus (master_xfer, dev, + av7110->dvb_adapter, 0); + + if (!av7110->i2c_bus) { + saa7146_unregister_device(&av7110->vd, dev); + saa7146_vv_release(dev); + dvb_unregister_adapter (av7110->dvb_adapter); + kfree(av7110); + return -ENOMEM; + } + + saa7146_write(dev, PCI_BT_V1, 0x1c00101f); + saa7146_write(dev, BCS_CTRL, 0x80400040); + + /* set dd1 stream a & b */ + saa7146_write(dev, DD1_STREAM_B, 0x00000000); + saa7146_write(dev, DD1_INIT, 0x02000000); + saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + + /* upload all */ + saa7146_write(dev, MC2, 0x077c077c); + saa7146_write(dev, GPIO_CTRL, 0x000000); + + tasklet_init (&av7110->debi_tasklet, debiirq, (unsigned long) av7110); + tasklet_init (&av7110->gpio_tasklet, gpioirq, (unsigned long) av7110); + + sema_init(&av7110->pid_mutex, 1); + + /* locks for data transfers from/to AV7110 */ + spin_lock_init (&av7110->debilock); + sema_init(&av7110->dcomlock, 1); + av7110->debilock=SPIN_LOCK_UNLOCKED; + av7110->debitype=-1; + + /* default ADAC type */ + av7110->adac_type = adac; + + /* default OSD window */ + av7110->osdwin=1; + + /* ARM "watchdog" */ + init_waitqueue_head(&av7110->arm_wait); + av7110->arm_thread=0; + + av7110->vidmode=VIDEO_MODE_PAL; + + av7110_ipack_init(&av7110->ipack[0], IPACKS, play_audio_cb); + av7110->ipack[0].data=(void *) av7110; + av7110_ipack_init(&av7110->ipack[1], IPACKS, play_video_cb); + av7110->ipack[1].data=(void *) av7110; + + + /* allocate and init buffers */ + av7110->debi_virt = pci_alloc_consistent(dev->pci, 8192, + &av7110->debi_bus); + if (!av7110->debi_virt) { + ret = -ENOMEM; + goto err; + } + + av7110->iobuf = vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS); + if (!av7110->iobuf) { + ret = -ENOMEM; + goto err; + } + + dvb_ringbuffer_init(&av7110->avout, av7110->iobuf, AVOUTLEN); + dvb_ringbuffer_init(&av7110->aout, av7110->iobuf+AVOUTLEN, AOUTLEN); + + /* init BMP buffer */ + av7110->bmpbuf=av7110->iobuf+AVOUTLEN+AOUTLEN; + init_waitqueue_head(&av7110->bmpq); + + av7110->kbuf[0]=(u8 *)(av7110->iobuf+AVOUTLEN+AOUTLEN+BMPLEN); + av7110->kbuf[1]=av7110->kbuf[0]+2*IPACKS; + + /* CI link layer buffers */ + ci_ll_init(&av7110->ci_rbuffer, &av7110->ci_wbuffer, 8192); + + /* handle different card types */ + + /* load firmware into AV7110 cards */ + + bootarm(av7110); + firmversion(av7110); + + if ((av7110->arm_app&0xffff)<0x2501) + printk ("av7110: Warning, firmware version 0x%04x is too old. " + "System might be unstable!\n", av7110->arm_app&0xffff); + + kernel_thread(arm_thread, (void *) av7110, 0); + + SetVolume(av7110, 0xff, 0xff); + VidMode(av7110, vidmode); + + /* remaining inits according to card and frontend type */ + if (i2c_writereg(av7110, 0x20, 0x00, 0x00)==1) { + printk ("av7110%d: Crystal audio DAC detected\n", + av7110->dvb_adapter->num); + av7110->adac_type = DVB_ADAC_CRYSTAL; + i2c_writereg(av7110, 0x20, 0x01, 0xd2); + i2c_writereg(av7110, 0x20, 0x02, 0x49); + i2c_writereg(av7110, 0x20, 0x03, 0x00); + i2c_writereg(av7110, 0x20, 0x04, 0x00); + } + + + /** + * some special handling for the Siemens DVB-C card... + */ + if (dev->pci->subsystem_vendor == 0x110a) { + if (i2c_writereg(av7110, 0x80, 0x0, 0x80)==1) { + i2c_writereg(av7110, 0x80, 0x0, 0); + printk ("av7110: DVB-C analog module detected, " + "initializing MSP3400\n"); + ddelay(10); + msp_writereg(av7110, 0x12, 0x0013, 0x0c00); + msp_writereg(av7110, 0x12, 0x0000, 0x7f00); // loudspeaker + headphone + msp_writereg(av7110, 0x12, 0x0008, 0x0220); // loudspeaker source + msp_writereg(av7110, 0x12, 0x0004, 0x7f00); // loudspeaker volume + msp_writereg(av7110, 0x12, 0x000a, 0x0220); // SCART 1 source + msp_writereg(av7110, 0x12, 0x0007, 0x7f00); // SCART 1 volume + msp_writereg(av7110, 0x12, 0x000d, 0x4800); // prescale SCART + } + + + // switch DVB SCART on + outcom(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0); + outcom(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1); + //saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // RGB on, SCART pin 16 + //saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // SCARTpin 8 + av7110->adac_type = DVB_ADAC_NONE; + } + + av7110_setup_irc_config (av7110, 0); + av7110_register(av7110); + + printk(KERN_INFO "av7110: found av7110-%d.\n",av7110_num); + av7110_num++; + return 0; + +err: + if (av7110 ) + kfree(av7110); + + /* FIXME: error handling is pretty bogus: memory does not get freed...*/ + saa7146_unregister_device(&av7110->vd, dev); + saa7146_vv_release(dev); + + dvb_unregister_i2c_bus (master_xfer,av7110->i2c_bus->adapter, + av7110->i2c_bus->id); + + dvb_unregister_adapter (av7110->dvb_adapter); + + return ret; +} + +static +int av7110_detach (struct saa7146_dev* saa) +{ + av7110_t *av7110 = (av7110_t*)saa->ext_priv; + DEB_EE(("av7110: %p\n",av7110)); + + saa7146_unregister_device(&av7110->vd, saa); + + av7110->arm_rmmod=1; + wake_up_interruptible(&av7110->arm_wait); + + while (av7110->arm_thread) + ddelay(1); + + dvb_unregister(av7110); + + IER_DISABLE(saa, (MASK_19 | MASK_03)); +// saa7146_write (av7110->dev, IER, +// saa7146_read(av7110->dev, IER) & ~(MASK_19 | MASK_03)); + + saa7146_write(av7110->dev, ISR,(MASK_19 | MASK_03)); + + ci_ll_release(&av7110->ci_rbuffer, &av7110->ci_wbuffer); + av7110_ipack_free(&av7110->ipack[0]); + av7110_ipack_free(&av7110->ipack[1]); + vfree(av7110->iobuf); + pci_free_consistent(saa->pci, 8192, av7110->debi_virt, + av7110->debi_bus); + + dvb_unregister_i2c_bus (master_xfer,av7110->i2c_bus->adapter, av7110->i2c_bus->id); + dvb_unregister_adapter (av7110->dvb_adapter); + + kfree (av7110); + + saa->ext_priv = NULL; + av7110_num--; + + return 0; +} + + +static +void av7110_irq(struct saa7146_dev* dev, u32 *isr) +{ + av7110_t *av7110 = (av7110_t*)dev->ext_priv; + + DEB_EE(("dev: %p, av7110: %p\n",dev,av7110)); + + if (*isr & MASK_19) + tasklet_schedule (&av7110->debi_tasklet); + + if (*isr & MASK_03) + tasklet_schedule (&av7110->gpio_tasklet); +} + + +/* FIXME: these values are experimental values that look better than the + values from the latest "official" driver -- at least for me... (MiHu) */ +static +struct saa7146_standard standard[] = { + { "PAL", V4L2_STD_PAL, 0x15, 288, 576, 0x4a, 708, 709, 576, 768 }, +// { "PAL", V4L2_STD_PAL, 0x15, 288, 576, 0x3a, 720, 721, 576, 768 }, + { "NTSC", V4L2_STD_NTSC, 0x10, 244, 480, 0x40, 708, 709, 480, 640 }, +}; + +static +struct saa7146_extension av7110_extension; + +#define MAKE_AV7110_INFO(x_var,x_name) \ +static struct saa7146_pci_extension_data x_var = { \ + .ext_priv = x_name, \ + .ext = &av7110_extension } + +MAKE_AV7110_INFO(fs_1_5, "Siemens cable card PCI rev1.5"); +MAKE_AV7110_INFO(fs_1_3, "Siemens/Technotrend/Hauppauge PCI rev1.3"); +MAKE_AV7110_INFO(tt_1_6, "Technotrend/Hauppauge PCI rev1.3 or 1.6"); +MAKE_AV7110_INFO(tt_2_1, "Technotrend/Hauppauge PCI rev2.1"); +MAKE_AV7110_INFO(tt_t, "Technotrend/Hauppauge PCI DVB-T"); +MAKE_AV7110_INFO(unkwn0, "Technotrend/Hauppauge PCI rev?(unknown0)?"); +MAKE_AV7110_INFO(unkwn1, "Technotrend/Hauppauge PCI rev?(unknown1)?"); +MAKE_AV7110_INFO(unkwn2, "Technotrend/Hauppauge PCI rev?(unknown2)?"); +MAKE_AV7110_INFO(nexus, "Technotrend/Hauppauge Nexus PCI DVB-S"); + +static +struct pci_device_id pci_tbl[] = { + MAKE_EXTENSION_PCI(fs_1_5, 0x110a, 0xffff), + MAKE_EXTENSION_PCI(fs_1_5, 0x110a, 0x0000), + MAKE_EXTENSION_PCI(fs_1_3, 0x13c2, 0x0000), + MAKE_EXTENSION_PCI(unkwn0, 0x13c2, 0x1002), + MAKE_EXTENSION_PCI(tt_1_6, 0x13c2, 0x0001), + MAKE_EXTENSION_PCI(tt_2_1, 0x13c2, 0x0002), + MAKE_EXTENSION_PCI(tt_2_1, 0x13c2, 0x0003), + MAKE_EXTENSION_PCI(tt_2_1, 0x13c2, 0x0004), + MAKE_EXTENSION_PCI(tt_1_6, 0x13c2, 0x0006), + MAKE_EXTENSION_PCI(tt_t, 0x13c2, 0x0008), + MAKE_EXTENSION_PCI(unkwn1, 0xffc2, 0x0000), + MAKE_EXTENSION_PCI(unkwn2, 0x00a1, 0x00a1), + MAKE_EXTENSION_PCI(nexus, 0x00a1, 0xa1a0), + { + .vendor = 0, + } +}; + +static int std_callback(struct saa7146_dev* dev, struct saa7146_standard *std) +{ + av7110_t *av7110 = (av7110_t*)dev->ext_priv; + if (std->id == V4L2_STD_PAL) { + av7110->vidmode = VIDEO_MODE_PAL; + SetMode(av7110, av7110->vidmode); + } + else if (std->id == V4L2_STD_NTSC) { + av7110->vidmode = VIDEO_MODE_NTSC; + SetMode(av7110, av7110->vidmode); + } + else + return -1; + + return 0; +} + + +static +struct saa7146_ext_vv av7110_vv_data = { + .inputs = 1, + .audios = 1, + .capabilities = 0, + .flags = SAA7146_EXT_SWAP_ODD_EVEN, + + .stds = &standard[0], + .num_stds = sizeof(standard)/sizeof(struct saa7146_standard), + .std_callback = &std_callback, + + .ioctls = &ioctls[0], + .ioctl = av7110_ioctl, +}; + +static +struct saa7146_extension av7110_extension = { + .name = "dvb\0", + .ext_vv_data = &av7110_vv_data, + + .module = THIS_MODULE, + .pci_tbl = &pci_tbl[0], + .attach = av7110_attach, + .detach = av7110_detach, + + .irq_mask = MASK_19|MASK_03, + .irq_func = av7110_irq, +}; + + +static +int __init av7110_init(void) +{ + if (saa7146_register_extension(&av7110_extension)) + return -ENODEV; + + av7110_ir_init(); + + return 0; +} + + +static +void __exit av7110_exit(void) +{ + av7110_ir_exit(); + saa7146_unregister_extension(&av7110_extension); +} + +module_init(av7110_init); +module_exit(av7110_exit); + +MODULE_DESCRIPTION("driver for the SAA7146 based AV110 PCI DVB cards by " + "Siemens, Technotrend, Hauppauge"); +MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others"); +MODULE_LICENSE("GPL"); + +MODULE_PARM(av7110_debug,"i"); +MODULE_PARM(vidmode,"i"); +MODULE_PARM(pids_off,"i"); +MODULE_PARM(adac,"i"); +MODULE_PARM(hw_sections, "i"); + diff -Nru a/drivers/media/dvb/ttpci/av7110.h b/drivers/media/dvb/ttpci/av7110.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/av7110.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,683 @@ +#ifndef _AV7110_H_ +#define _AV7110_H_ + +#define DVB_FIRM_PATH "/lib/DVB/" + +#include +#include +#include + +#ifdef CONFIG_DEVFS_FS +#include +#endif + +#include + +/* DEBI transfer mode defs */ + +#define DEBINOSWAP 0x000e0000 +#define DEBISWAB 0x001e0000 +#define DEBISWAP 0x002e0000 + +#define ARM_WAIT_FREE (HZ) +#define ARM_WAIT_SHAKE (HZ/5) +#define ARM_WAIT_OSD (HZ) + +#define WAIT_QUEUE wait_queue_head_t + +#include +#include +#include +#include +#include +#include + +#include "dvbdev.h" +#include "demux.h" +#include "dvb_demux.h" +#include "dmxdev.h" +#include "dvb_filter.h" +#include "dvb_net.h" +#include "dvb_ringbuffer.h" + +typedef enum BOOTSTATES +{ + BOOTSTATE_BUFFER_EMPTY = 0, + BOOTSTATE_BUFFER_FULL = 1, + BOOTSTATE_BOOT_COMPLETE = 2 +} BOOTSTATES; + +typedef enum +{ RP_None, + AudioPES, + AudioMp2, + AudioPCM, + VideoPES, + AV_PES +} TYPE_REC_PLAY_FORMAT; + +typedef struct PARAMSTRUCT +{ + unsigned int wCommand; + int error; + unsigned long pdwData[100]; +} PARAMSTRUCT, *PPARAMSTRUCT; + +typedef enum OSDPALTYPE +{ + NoPalet = 0, /* No palette */ + Pal1Bit = 2, /* 2 colors for 1 Bit Palette */ + Pal2Bit = 4, /* 4 colors for 2 bit palette */ + Pal4Bit = 16, /* 16 colors for 4 bit palette */ + Pal8Bit = 256 /* 256 colors for 16 bit palette */ +} OSDPALTYPE, *POSDPALTYPE; + +typedef enum { + BITMAP1, /* 1 bit bitmap */ + BITMAP2, /* 2 bit bitmap */ + BITMAP4, /* 4 bit bitmap */ + BITMAP8, /* 8 bit bitmap */ + BITMAP1HR, /* 1 Bit bitmap half resolution */ + BITMAP2HR, /* 2 bit bitmap half resolution */ + BITMAP4HR, /* 4 bit bitmap half resolution */ + BITMAP8HR, /* 8 bit bitmap half resolution */ + YCRCB422, /* 4:2:2 YCRCB Graphic Display */ + YCRCB444, /* 4:4:4 YCRCB Graphic Display */ + YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */ + VIDEOTSIZE, /* True Size Normal MPEG Video Display */ + VIDEOHSIZE, /* MPEG Video Display Half Resolution */ + VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */ + VIDEODSIZE, /* MPEG Video Display Double Resolution */ + VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */ + VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/ + VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */ + VIDEONSIZE, /* Full Size MPEG Video Display */ + CURSOR /* Cursor */ +} DISPTYPE; /* Window display type */ + +// switch defines +#define SB_GPIO 3 +#define SB_OFF SAA7146_GPIO_OUTLO //SlowBlank aus (TV-Mode) +#define SB_ON SAA7146_GPIO_INPUT //SlowBlank an (AV-Mode) +#define SB_WIDE SAA7146_GPIO_OUTHI //SlowBlank 6V (16/9-Mode) nicht realisiert + +#define FB_GPIO 1 +#define FB_OFF SAA7146_GPIO_LO //FastBlank aus (CVBS-Mode) +#define FB_ON SAA7146_GPIO_OUTHI //FastBlank an (RGB-Mode) +#define FB_LOOP SAA7146_GPIO_INPUT //FastBlank der PC-Grafik durchschleifen + +typedef enum VIDEOOUTPUTMODE +{ + NO_OUT = 0, //disable analog Output + CVBS_RGB_OUT = 1, + CVBS_YC_OUT = 2, + YC_OUT = 3 +} VIDEOOUTPUTMODE, *PVIDEOOUTPUTMODE; + + +#define GPMQFull 0x0001 //Main Message Queue Full +#define GPMQOver 0x0002 //Main Message Queue Overflow +#define HPQFull 0x0004 //High Priority Msg Queue Full +#define HPQOver 0x0008 +#define OSDQFull 0x0010 //OSD Queue Full +#define OSDQOver 0x0020 + +#define SECTION_EIT 0x01 +#define SECTION_SINGLE 0x00 +#define SECTION_CYCLE 0x02 +#define SECTION_CONTINUOS 0x04 +#define SECTION_MODE 0x06 +#define SECTION_IPMPE 0x0C // bis zu 4k gro_ +#define SECTION_HIGH_SPEED 0x1C // vergrv_erter Puffer f|r High Speed Filter +#define DATA_PIPING_FLAG 0x20 // f|r Data Piping Filter + +#define PBUFSIZE_NONE 0x0000 +#define PBUFSIZE_1P 0x0100 +#define PBUFSIZE_2P 0x0200 +#define PBUFSIZE_1K 0x0300 +#define PBUFSIZE_2K 0x0400 +#define PBUFSIZE_4K 0x0500 +#define PBUFSIZE_8K 0x0600 +#define PBUFSIZE_16K 0x0700 +#define PBUFSIZE_32K 0x0800 + +typedef enum { + WCreate, + WDestroy, + WMoveD, + WMoveA, + WHide, + WTop, + DBox, + DLine, + DText, + Set_Font, + SetColor, + SetBlend, + SetWBlend, + SetCBlend, + SetNonBlend, + LoadBmp, + BlitBmp, + ReleaseBmp, + SetWTrans, + SetWNoTrans +} OSDCOM; + +typedef enum { + MultiPID, + VideoPID, + AudioPID, + InitFilt, + FiltError, + NewVersion, + CacheError, + AddPIDFilter, + DelPIDFilter, + Scan, + SetDescr, + SetIR +} PIDCOM; + +typedef enum { + SelAudChannels +} MPEGCOM; + +typedef enum { + AudioDAC, + CabADAC, + ON22K, + OFF22K, + MainSwitch, + ADSwitch, + SendDiSEqC, + SetRegister +} AUDCOM; + +typedef enum { + AudioState, + AudioBuffState, + VideoState1, + VideoState2, + VideoState3, + CrashCounter, + ReqVersion, + ReqVCXO, + ReqRegister +} REQCOM; + +typedef enum { + SetVidMode, + SetTestMode, + LoadVidCode, + SetMonitorType, + SetPanScanType, + SetFreezeMode +} ENC; + +typedef enum { + __Record, + __Stop, + __Play, + __Pause, + __Slow, + __FF_IP, + __Scan_I, + __Continue +} REC_PLAY; + +typedef enum { + COMTYPE_NOCOM, + COMTYPE_PIDFILTER, + COMTYPE_MPEGDECODER, + COMTYPE_OSD, + COMTYPE_BMP, + COMTYPE_ENCODER, + COMTYPE_AUDIODAC, + COMTYPE_REQUEST, + COMTYPE_SYSTEM, + COMTYPE_REC_PLAY, + COMTYPE_COMMON_IF, + COMTYPE_PID_FILTER, + COMTYPE_PES, + COMTYPE_TS, + COMTYPE_VIDEO, + COMTYPE_AUDIO, + COMTYPE_CI_LL, +} COMTYPE; + +typedef enum { + AV7110_VIDEO_FREEZE, + AV7110_VIDEO_CONTINUE +} VIDEOCOM; + +typedef enum { + DVB_AUDIO_PAUSE, +} AUDIOCOM; + + +#define VID_NONE_PREF 0x00 /* No aspect ration processing preferred */ +#define VID_PAN_SCAN_PREF 0x01 /* Pan and Scan Display preferred */ +#define VID_VERT_COMP_PREF 0x02 /* Vertical compression display preferred */ +#define VID_VC_AND_PS_PREF 0x03 /* PanScan and vertical Compression if allowed */ +#define VID_CENTRE_CUT_PREF 0x05 /* PanScan with zero vector */ + +#define DATA_NONE 0x00 +#define DATA_FSECTION 0x01 +#define DATA_IPMPE 0x02 +#define DATA_MPEG_RECORD 0x03 +#define DATA_DEBUG_MESSAGE 0x04 +#define DATA_COMMON_INTERFACE 0x05 +#define DATA_MPEG_PLAY 0x06 +#define DATA_BMP_LOAD 0x07 +#define DATA_IRCOMMAND 0x08 +#define DATA_PIPING 0x09 +#define DATA_STREAMING 0x0a +#define DATA_CI_GET 0x0b +#define DATA_CI_PUT 0x0c + +#define DATA_PES_RECORD 0x10 +#define DATA_PES_PLAY 0x11 +#define DATA_TS_RECORD 0x12 +#define DATA_TS_PLAY 0x13 + +#define CI_CMD_ERROR 0x00 +#define CI_CMD_ACK 0x01 +#define CI_CMD_SYSTEM_READY 0x02 +#define CI_CMD_KEYPRESS 0x03 +#define CI_CMD_ON_TUNED 0x04 +#define CI_CMD_ON_SWITCH_PROGRAM 0x05 +#define CI_CMD_SECTION_ARRIVED 0x06 +#define CI_CMD_SECTION_TIMEOUT 0x07 +#define CI_CMD_TIME 0x08 +#define CI_CMD_ENTER_MENU 0x09 +#define CI_CMD_FAST_PSI 0x0a +#define CI_CMD_GET_SLOT_INFO 0x0b + +#define CI_MSG_NONE 0x00 +#define CI_MSG_CI_INFO 0x01 +#define CI_MSG_MENU 0x02 +#define CI_MSG_LIST 0x03 +#define CI_MSG_TEXT 0x04 +#define CI_MSG_REQUEST_INPUT 0x05 +#define CI_MSG_INPUT_COMPLETE 0x06 +#define CI_MSG_LIST_MORE 0x07 +#define CI_MSG_MENU_MORE 0x08 +#define CI_MSG_CLOSE_MMI_IMM 0x09 +#define CI_MSG_SECTION_REQUEST 0x0a +#define CI_MSG_CLOSE_FILTER 0x0b +#define CI_PSI_COMPLETE 0x0c +#define CI_MODULE_READY 0x0d +#define CI_SWITCH_PRG_REPLY 0x0e +#define CI_MSG_TEXT_MORE 0x0f + +#define CI_MSG_CA_PMT 0xe0 +#define CI_MSG_ERROR 0xf0 + + +#define PROG_STREAM_MAP 0xBC +#define PRIVATE_STREAM1 0xBD +#define PADDING_STREAM 0xBE +#define PRIVATE_STREAM2 0xBF +#define AUDIO_STREAM_S 0xC0 +#define AUDIO_STREAM_E 0xDF +#define VIDEO_STREAM_S 0xE0 +#define VIDEO_STREAM_E 0xEF +#define ECM_STREAM 0xF0 +#define EMM_STREAM 0xF1 +#define DSM_CC_STREAM 0xF2 +#define ISO13522_STREAM 0xF3 +#define PROG_STREAM_DIR 0xFF + +#define PTS_DTS_FLAGS 0xC0 + +//pts_dts flags +#define PTS_ONLY 0x80 +#define PTS_DTS 0xC0 +#define TS_SIZE 188 +#define TRANS_ERROR 0x80 +#define PAY_START 0x40 +#define TRANS_PRIO 0x20 +#define PID_MASK_HI 0x1F +//flags +#define TRANS_SCRMBL1 0x80 +#define TRANS_SCRMBL2 0x40 +#define ADAPT_FIELD 0x20 +#define PAYLOAD 0x10 +#define COUNT_MASK 0x0F + +// adaptation flags +#define DISCON_IND 0x80 +#define RAND_ACC_IND 0x40 +#define ES_PRI_IND 0x20 +#define PCR_FLAG 0x10 +#define OPCR_FLAG 0x08 +#define SPLICE_FLAG 0x04 +#define TRANS_PRIV 0x02 +#define ADAP_EXT_FLAG 0x01 + +// adaptation extension flags +#define LTW_FLAG 0x80 +#define PIECE_RATE 0x40 +#define SEAM_SPLICE 0x20 + +#define MAX_PLENGTH 0xFFFF +#define MAX_VID_PES 0x1FFF + +typedef struct section_s { + int id; + int length; + int found; + u8 payload[4096+3]; +} section_t; + + +#define MY_STATE_PES_START 1 +#define MY_STATE_PES_STARTED 2 +#define MY_STATE_FULL 4 + +#define MASKL DMX_MAX_FILTER_SIZE +#define MAXFILT 32 + +struct dvb_filter { + int state; + int flags; + int type; + u8 ts_state; + + u16 pid; + u8 value[MASKL]; + u8 mask[MASKL]; +}; + + +enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM}; + +typedef struct ps_packet_s{ + u8 scr[6]; + u8 mux_rate[3]; + u8 stuff_length; + u8 data[20]; + u8 sheader_llength[2]; + int sheader_length; + u8 rate_bound[3]; + u8 audio_bound; + u8 video_bound; + u8 reserved; + int npes; + int mpeg; +} ps_packet_t; + +typedef struct a2p_s{ + int type; + int found; + int length; + int headr; + u8 cid; + u8 flags; + u8 abuf[MAX_PLENGTH]; + int alength; + u8 vbuf[MAX_PLENGTH]; + int vlength; + int plength; + u8 last_av_pts[4]; + u8 av_pts[4]; + u8 scr[4]; + u16 count0; + u16 count1; + u16 pidv; + u16 pida; + u16 countv; + u16 counta; + void *dataA; + void *dataV; + void (*write_cb)(u8 const *buf, long int count, + void *data); +} a2p_t; + + +typedef struct p2t_s { + u8 pes[TS_SIZE]; + u8 counter; + long int pos; + int frags; + struct dvb_demux_feed *feed; +} p2t_t; + +/* place to store all the necessary device information */ +typedef struct av7110_s { + + /* devices */ + + struct dvb_device dvb_dev; + dvb_net_t dvb_net; + struct video_device vd; + + struct saa7146_dev *dev; + + struct dvb_i2c_bus *i2c_bus; + char *card_name; + + struct tasklet_struct debi_tasklet; + struct tasklet_struct gpio_tasklet; + + int adac_type; /* audio DAC type */ +#define DVB_ADAC_TI 0 +#define DVB_ADAC_CRYSTAL 1 +#define DVB_ADAC_NONE -1 + + + /* buffers */ + + void *iobuf; /* memory for all buffers */ + dvb_ringbuffer_t avout; /* buffer for video or A/V mux */ +#define AVOUTLEN (128*1024) + dvb_ringbuffer_t aout; /* buffer for audio */ +#define AOUTLEN (64*1024) + void *bmpbuf; +#define BMPLEN (8*32768+1024) + + /* bitmap buffers and states */ + + int bmpp; + int bmplen; + int bmp_win; + u16 bmp_x, bmp_y; + int bmp_trans; + int bmp_state; +#define BMP_NONE 0 +#define BMP_LOADING 1 +#define BMP_LOADINGS 2 +#define BMP_LOADED 3 + WAIT_QUEUE bmpq; + + + /* DEBI and polled command interface */ + + spinlock_t debilock; + struct semaphore dcomlock; + int debitype; + int debilen; + int debibuf; + + + /* Recording and playback flags */ + + int rec_mode; + int playing; +#define RP_NONE 0 +#define RP_VIDEO 1 +#define RP_AUDIO 2 +#define RP_AV 3 + + + /* OSD */ + + int osdwin; /* currently active window */ + u16 osdbpp[8]; + + + /* CA */ + + ca_slot_info_t ci_slot[2]; + + int vidmode; + dmxdev_t dmxdev; + struct dvb_demux demux; + char demux_id[16]; + + dmx_frontend_t hw_frontend; + dmx_frontend_t mem_frontend; + + int fe_synced; + struct semaphore pid_mutex; + + int video_blank; + struct video_status videostate; + int display_ar; + int trickmode; +#define TRICK_NONE 0 +#define TRICK_FAST 1 +#define TRICK_SLOW 2 +#define TRICK_FREEZE 3 + struct audio_status audiostate; + + struct dvb_demux_filter *handle2filter[32]; + p2t_t p2t_filter[MAXFILT]; + dvb_filter_pes2ts_t p2t[2]; + struct ipack_s ipack[2]; + u8 *kbuf[2]; + + int sinfo; + int feeding; + + int arm_errors; + int registered; + + + /* AV711X */ + + u32 arm_fw; + u32 arm_rtsl; + u32 arm_vid; + u32 arm_app; + u32 avtype; + int arm_ready; + struct task_struct *arm_thread; + WAIT_QUEUE arm_wait; + u16 arm_loops; + int arm_rmmod; + + void *debi_virt; + dma_addr_t debi_bus; + + u16 pids[DMX_PES_OTHER]; + + dvb_ringbuffer_t ci_rbuffer; + dvb_ringbuffer_t ci_wbuffer; + + + struct dvb_adapter *dvb_adapter; + struct dvb_device *video_dev; + struct dvb_device *audio_dev; + struct dvb_device *ca_dev; + struct dvb_device *osd_dev; + + int dsp_dev; +} av7110_t; + + +#define DPRAM_BASE 0x4000 + +#define BOOT_STATE (DPRAM_BASE + 0x3F8) +#define BOOT_SIZE (DPRAM_BASE + 0x3FA) +#define BOOT_BASE (DPRAM_BASE + 0x3FC) +#define BOOT_BLOCK (DPRAM_BASE + 0x400) +#define BOOT_MAX_SIZE 0xc00 + +#define IRQ_STATE (DPRAM_BASE + 0x0F4) +#define IRQ_STATE_EXT (DPRAM_BASE + 0x0F6) +#define MSGSTATE (DPRAM_BASE + 0x0F8) +#define FILT_STATE (DPRAM_BASE + 0x0FA) +#define COMMAND (DPRAM_BASE + 0x0FC) +#define COM_BUFF (DPRAM_BASE + 0x100) +#define COM_BUFF_SIZE 0x20 + +#define BUFF1_BASE (DPRAM_BASE + 0x120) +#define BUFF1_SIZE 0xE0 + +#define DATA_BUFF_BASE (DPRAM_BASE + 0x200) +#define DATA_BUFF_SIZE 0x1C00 + +/* new buffers */ + +#define DATA_BUFF0_BASE (DPRAM_BASE + 0x200) +#define DATA_BUFF0_SIZE 0x0800 + +#define DATA_BUFF1_BASE (DATA_BUFF0_BASE+DATA_BUFF0_SIZE) +#define DATA_BUFF1_SIZE 0x0800 + +#define DATA_BUFF2_BASE (DATA_BUFF1_BASE+DATA_BUFF1_SIZE) +#define DATA_BUFF2_SIZE 0x0800 + +#define Reserved (DPRAM_BASE + 0x1E00) +#define Reserved_SIZE 0x1C0 + +#define DEBUG_WINDOW (DPRAM_BASE + 0x1FC0) +#define DBG_LOOP_CNT (DEBUG_WINDOW + 0x00) +#define DBG_SEC_CNT (DEBUG_WINDOW + 0x02) +#define DBG_AVRP_BUFF (DEBUG_WINDOW + 0x04) +#define DBG_AVRP_PEAK (DEBUG_WINDOW + 0x06) +#define DBG_MSG_CNT (DEBUG_WINDOW + 0x08) +#define DBG_CODE_REG (DEBUG_WINDOW + 0x0a) +#define DBG_TTX_Q (DEBUG_WINDOW + 0x0c) +#define DBG_AUD_EN (DEBUG_WINDOW + 0x0e) +#define DBG_WRONG_COM (DEBUG_WINDOW + 0x10) +#define DBG_ARR_OVFL (DEBUG_WINDOW + 0x12) +#define DBG_BUFF_OVFL (DEBUG_WINDOW + 0x14) +#define DBG_OVFL_CNT (DEBUG_WINDOW + 0x16) +#define DBG_SEC_OVFL (DEBUG_WINDOW + 0x18) + +#define STATUS_BASE (DPRAM_BASE + 0x1FC0) +#define STATUS_SCR (STATUS_BASE + 0x00) +#define STATUS_MODES (STATUS_BASE + 0x04) +#define STATUS_LOOPS (STATUS_BASE + 0x08) + +#define RX_TYPE (DPRAM_BASE + 0x1FE8) +#define RX_LEN (DPRAM_BASE + 0x1FEA) +#define TX_TYPE (DPRAM_BASE + 0x1FEC) +#define TX_LEN (DPRAM_BASE + 0x1FEE) + +#define RX_BUFF (DPRAM_BASE + 0x1FF4) +#define TX_BUFF (DPRAM_BASE + 0x1FF6) + +#define HANDSHAKE_REG (DPRAM_BASE + 0x1FF8) +#define COM_IF_LOCK (DPRAM_BASE + 0x1FFA) + +#define IRQ_RX (DPRAM_BASE + 0x1FFC) +#define IRQ_TX (DPRAM_BASE + 0x1FFE) + +#define DRAM_START_CODE 0x2e000404 +#define DRAM_MAX_CODE_SIZE 0x00100000 + +#define RESET_LINE 2 +#define DEBI_DONE_LINE 1 +#define ARM_IRQ_LINE 0 + +#define DAC_CS 0x8000 +#define DAC_CDS 0x0000 + + +extern unsigned char *av7110_dpram_addr, *av7110_root_addr; +extern int av7110_dpram_len, av7110_root_len; + +extern void av7110_register_irc_handler(void (*func)(u32)); +extern void av7110_unregister_irc_handler(void (*func)(u32)); +extern void av7110_setup_irc_config (av7110_t *av7110, u32 ir_config); + +extern int av7110_ir_init (void); +extern void av7110_ir_exit (void); + + +#endif /* _AV7110_H_ */ + diff -Nru a/drivers/media/dvb/ttpci/av7110_firm.h b/drivers/media/dvb/ttpci/av7110_firm.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/av7110_firm.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,28080 @@ + +#include + +u8 Dpram [] __initdata = { + 0xe5, 0x9f, 0xf0, 0x1c, 0xe1, 0xb0, 0xf0, 0x0e, + 0xe5, 0x9f, 0xf0, 0x18, 0xe2, 0x5e, 0xf0, 0x04, + 0xe2, 0x5e, 0xf0, 0x08, 0xe1, 0xa0, 0x00, 0x00, + 0xea, 0x00, 0x00, 0x06, 0xe2, 0x5e, 0xf0, 0x04, + 0x2c, 0x00, 0x00, 0xe8, 0x2e, 0x02, 0x55, 0x6c, + 0x2e, 0x01, 0xc3, 0xe0, 0xa5, 0xa5, 0x5a, 0x5a, + 0x00, 0x1f, 0x15, 0x55, 0x00, 0x00, 0x00, 0x09, + 0xe9, 0x2d, 0x5f, 0xff, 0xe1, 0x4f, 0x00, 0x00, + 0xe9, 0x2d, 0x00, 0x01, 0xe2, 0x8f, 0x00, 0x01, + 0xe1, 0x2f, 0xff, 0x10, 0x21, 0xff, 0x48, 0x25, + 0x68, 0x00, 0x40, 0x52, 0x42, 0x08, 0xd1, 0x0b, + 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x07, + 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x03, + 0x0a, 0x00, 0x42, 0x08, 0xd0, 0x29, 0x32, 0x20, + 0x21, 0x0f, 0x42, 0x08, 0xd1, 0x01, 0x32, 0x10, + 0x09, 0x00, 0x21, 0x01, 0x42, 0x08, 0xd1, 0x08, + 0x1d, 0x12, 0x21, 0x02, 0x42, 0x08, 0xd1, 0x04, + 0x1d, 0x12, 0x21, 0x04, 0x42, 0x08, 0xd1, 0x00, + 0x1d, 0x12, 0x48, 0x13, 0x68, 0x00, 0xb4, 0x01, + 0x08, 0x90, 0x21, 0x01, 0x40, 0x81, 0x48, 0x0f, + 0x60, 0x01, 0x48, 0x0d, 0x58, 0x82, 0x48, 0x01, + 0x46, 0x86, 0x47, 0x10, 0x2c, 0x00, 0x00, 0xb1, + 0xbc, 0x02, 0x48, 0x0b, 0x68, 0x02, 0x23, 0x20, + 0x05, 0x1b, 0x40, 0x1a, 0x43, 0x99, 0x43, 0x11, + 0x60, 0x01, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, + 0xe8, 0xbd, 0x00, 0x01, 0xe1, 0x69, 0xf0, 0x00, + 0xe8, 0xbd, 0x5f, 0xff, 0xe2, 0x5e, 0xf0, 0x04, + 0x2e, 0x08, 0x3a, 0xfc, 0x66, 0x00, 0x00, 0x14, + 0x66, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x0c, 0x2e, 0x02, 0x56, 0x74, + 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + + +u8 Root [] __initdata = { + 0xb4, 0x90, 0x49, 0x18, 0x1c, 0x0b, 0x4a, 0x18, + 0x1a, 0x50, 0x4f, 0x18, 0x1a, 0x79, 0x10, 0x8f, + 0x21, 0x00, 0x2f, 0x00, 0xdd, 0x04, 0xcb, 0x10, + 0xc2, 0x10, 0x31, 0x01, 0x42, 0xb9, 0xdb, 0xfa, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, + 0x49, 0x13, 0x18, 0x08, 0x49, 0x13, 0x60, 0x08, + 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x01, 0xc0, 0xa8, + 0x9e, 0x00, 0x0a, 0x00, 0x2e, 0x01, 0xc1, 0xa8, + 0x2e, 0x01, 0xc0, 0xf8, 0x2e, 0x01, 0xc2, 0xc8, + 0x2e, 0x01, 0xc1, 0x30, 0x2e, 0x01, 0xc2, 0xcc, + 0x2e, 0x01, 0xc1, 0x4c, 0x2e, 0x01, 0xc2, 0xd0, + 0x2e, 0x01, 0xc0, 0xf8, 0x2e, 0x01, 0xc2, 0xd4, + 0x2e, 0x01, 0xc1, 0x14, 0x2e, 0x01, 0xc2, 0xd8, + 0x2e, 0x01, 0xc1, 0x4c, 0x2e, 0x01, 0xc2, 0xdc, + 0x2e, 0x01, 0xc1, 0x30, 0x2e, 0x01, 0xc2, 0xe0, + 0x2e, 0x01, 0xc0, 0xa8, 0x2e, 0x01, 0xc2, 0xe4, + 0xb5, 0xf0, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x07, + 0xb0, 0x82, 0x2a, 0x00, 0xd1, 0x03, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x0e, 0x38, + 0x06, 0x00, 0x21, 0x0b, 0x06, 0x89, 0x4b, 0x43, + 0x93, 0x01, 0x42, 0x88, 0xd1, 0x32, 0x08, 0x78, + 0xd3, 0x05, 0x1e, 0x78, 0x88, 0x00, 0x70, 0x20, + 0x34, 0x01, 0x3d, 0x01, 0x37, 0x01, 0x08, 0xb8, + 0xd3, 0x0f, 0x2d, 0x02, 0xdb, 0x0d, 0x08, 0x60, + 0xd3, 0x06, 0x88, 0x39, 0x0a, 0x09, 0x70, 0x21, + 0x88, 0x38, 0x70, 0x60, 0x34, 0x02, 0xe0, 0x02, + 0x88, 0x38, 0x80, 0x20, 0x34, 0x02, 0x3d, 0x02, + 0x37, 0x02, 0x07, 0xae, 0x0f, 0xb6, 0x1b, 0xad, + 0xd0, 0x08, 0x9b, 0x01, 0x68, 0x1b, 0x1c, 0x38, + 0x1c, 0x21, 0x1c, 0x2a, 0xf0, 0x17, 0xff, 0xdc, + 0x19, 0x7f, 0x19, 0x64, 0x2e, 0x00, 0xd0, 0x54, + 0x68, 0x38, 0x90, 0x00, 0x46, 0x6f, 0x78, 0x38, + 0x70, 0x20, 0x34, 0x01, 0x37, 0x01, 0x3e, 0x01, + 0xd1, 0xf9, 0xe0, 0x4a, 0x0e, 0x20, 0x06, 0x00, + 0x42, 0x88, 0xd1, 0x3f, 0xe0, 0x14, 0x08, 0x60, + 0xd3, 0x08, 0x1e, 0x60, 0x88, 0x01, 0x23, 0xff, + 0x02, 0x1b, 0x40, 0x19, 0x78, 0x3a, 0x43, 0x11, + 0x80, 0x01, 0xe0, 0x06, 0x88, 0x21, 0x06, 0x09, + 0x0e, 0x09, 0x78, 0x3a, 0x02, 0x12, 0x43, 0x11, + 0x80, 0x21, 0x34, 0x01, 0x3d, 0x01, 0x37, 0x01, + 0x07, 0xb8, 0xd0, 0x01, 0x2d, 0x00, 0xdc, 0xe6, + 0x07, 0xae, 0x0f, 0xb6, 0x1b, 0xad, 0xd0, 0x06, + 0x9b, 0x01, 0x68, 0x1b, 0x1c, 0x38, 0x1c, 0x21, + 0x1c, 0x2a, 0xf0, 0x17, 0xff, 0xa5, 0x19, 0x7f, + 0x19, 0x64, 0x2e, 0x00, 0xd0, 0x1d, 0x08, 0x60, + 0xd3, 0x08, 0x1e, 0x60, 0x88, 0x01, 0x23, 0xff, + 0x02, 0x1b, 0x40, 0x19, 0x78, 0x3a, 0x43, 0x11, + 0x80, 0x01, 0xe0, 0x06, 0x88, 0x21, 0x06, 0x09, + 0x0e, 0x09, 0x78, 0x3a, 0x02, 0x12, 0x43, 0x11, + 0x80, 0x21, 0x34, 0x01, 0x37, 0x01, 0x3e, 0x01, + 0xd1, 0xe9, 0xe0, 0x06, 0x9b, 0x01, 0x68, 0x1b, + 0x1c, 0x38, 0x1c, 0x21, 0x1c, 0x2a, 0xf0, 0x17, + 0xff, 0x83, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x48, + 0xb5, 0x00, 0x20, 0x03, 0xf0, 0x03, 0xfb, 0xe2, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x4f, 0x10, + 0x89, 0x3c, 0x89, 0xbe, 0x8a, 0x3d, 0x23, 0x04, + 0x43, 0xdb, 0x68, 0x78, 0x40, 0x18, 0x0c, 0x1a, + 0x60, 0x78, 0xb4, 0x04, 0x1c, 0x13, 0x22, 0x00, + 0x21, 0x00, 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x14, + 0x20, 0x01, 0x60, 0x78, 0xb0, 0x01, 0x4a, 0x07, + 0xb4, 0x04, 0x1c, 0x20, 0x1c, 0x31, 0x1c, 0x2a, + 0x4b, 0x04, 0xf0, 0x00, 0xf8, 0x09, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xb5, 0xf0, 0x9f, 0x05, 0x04, 0x04, 0x0c, 0x24, + 0x04, 0x0d, 0x0c, 0x2d, 0x04, 0x16, 0x0c, 0x36, + 0x04, 0x19, 0x0c, 0x09, 0xb0, 0x82, 0x91, 0x00, + 0x04, 0x38, 0x0c, 0x00, 0xb0, 0x81, 0x49, 0x89, + 0x4f, 0x89, 0x42, 0x8d, 0xd1, 0x00, 0x89, 0xbd, + 0x42, 0x8e, 0xd1, 0x00, 0x8a, 0x3e, 0x4a, 0x87, + 0x42, 0x95, 0xd1, 0x02, 0x89, 0xbd, 0x08, 0xd3, + 0x81, 0xbb, 0x4b, 0x84, 0x42, 0x9e, 0xd1, 0x02, + 0x8a, 0x3e, 0x08, 0xdb, 0x82, 0x3b, 0x9a, 0x01, + 0x42, 0x8a, 0xd1, 0x01, 0x8a, 0xba, 0x92, 0x01, + 0x8a, 0xbb, 0x99, 0x01, 0x42, 0x99, 0xd0, 0x20, + 0x68, 0x38, 0x90, 0x02, 0x28, 0x00, 0xd0, 0x1a, + 0x2b, 0x00, 0xd0, 0x0a, 0x22, 0x00, 0x21, 0x00, + 0x20, 0x1c, 0xb4, 0x07, 0x1c, 0x19, 0x23, 0x10, + 0x22, 0x1d, 0x98, 0x05, 0xf0, 0x0a, 0xf8, 0x1c, + 0xb0, 0x03, 0x99, 0x01, 0x29, 0x00, 0xd0, 0x0a, + 0x22, 0x01, 0x21, 0x00, 0x20, 0x1c, 0xb4, 0x07, + 0x99, 0x04, 0x23, 0x10, 0x22, 0x1d, 0x68, 0x38, + 0xf0, 0x0a, 0xf8, 0x0e, 0xb0, 0x03, 0x99, 0x01, + 0x82, 0xb9, 0x4b, 0x6d, 0x42, 0x9c, 0xd0, 0x37, + 0xdc, 0x28, 0x2c, 0x00, 0xd0, 0x2e, 0x3b, 0x02, + 0x42, 0x9c, 0xd0, 0x29, 0x4b, 0x69, 0x42, 0x9c, + 0xd1, 0x00, 0x1c, 0x34, 0x22, 0x00, 0xb4, 0x04, + 0x23, 0x00, 0x49, 0x62, 0x20, 0x1c, 0xf0, 0x0a, + 0xf9, 0x95, 0x89, 0xb8, 0xb0, 0x01, 0x42, 0x85, + 0xd1, 0x02, 0x89, 0x38, 0x42, 0x84, 0xd0, 0x44, + 0x81, 0xbd, 0x20, 0x1f, 0xf0, 0x0a, 0xfc, 0xce, + 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, + 0x21, 0x02, 0x20, 0x1f, 0xf0, 0x0a, 0xfb, 0x46, + 0x2d, 0x00, 0xd0, 0x33, 0x2d, 0x01, 0xd1, 0x11, + 0x25, 0x00, 0xe0, 0x32, 0x4b, 0x55, 0x42, 0x9c, + 0xd0, 0x04, 0x33, 0x01, 0x42, 0x9c, 0xd1, 0xd9, + 0x89, 0x3c, 0xe7, 0xd7, 0x2d, 0x00, 0xd0, 0x01, + 0x1c, 0x2c, 0xe7, 0xd3, 0x1c, 0x34, 0xe7, 0xd1, + 0x1c, 0x2c, 0xe7, 0xcf, 0x42, 0xac, 0xd1, 0x01, + 0x20, 0x80, 0xe0, 0x00, 0x20, 0x00, 0x22, 0x00, + 0xb4, 0x04, 0x06, 0x00, 0x0e, 0x00, 0x22, 0x02, + 0x43, 0x02, 0x23, 0x01, 0x20, 0x1f, 0x1c, 0x29, + 0xf0, 0x0a, 0xf9, 0x5c, 0x23, 0x01, 0x02, 0x9b, + 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1f, 0xb0, 0x01, + 0xf0, 0x0a, 0xfb, 0x18, 0x21, 0x00, 0x20, 0x1f, + 0xf0, 0x0b, 0xf8, 0x0a, 0x20, 0x01, 0xf0, 0x0d, + 0xfb, 0xf9, 0xe0, 0x02, 0x20, 0x00, 0xf0, 0x0d, + 0xfb, 0xf5, 0x8a, 0x38, 0x42, 0x86, 0xd1, 0x02, + 0x89, 0x39, 0x42, 0x8c, 0xd0, 0x52, 0x28, 0x00, + 0xd0, 0x0d, 0x20, 0x03, 0xf0, 0x0d, 0xfd, 0x4c, + 0x20, 0x1e, 0xf0, 0x0a, 0xfd, 0x49, 0x23, 0x03, + 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, + 0x20, 0x1e, 0xf0, 0x0a, 0xfa, 0xf7, 0x82, 0x3e, + 0x2e, 0x00, 0xd0, 0x3f, 0x42, 0xb4, 0xd1, 0x02, + 0x20, 0x80, 0x90, 0x00, 0xe0, 0x01, 0x20, 0x00, + 0x90, 0x00, 0xf0, 0x1b, 0xfd, 0xe7, 0x23, 0x01, + 0x04, 0x1b, 0x43, 0x18, 0xf0, 0x1b, 0xfd, 0xe6, + 0x21, 0x00, 0x20, 0x00, 0xf0, 0x0e, 0xfa, 0x2a, + 0x20, 0xff, 0x49, 0x29, 0x68, 0x09, 0x70, 0x08, + 0x49, 0x28, 0x48, 0x29, 0x23, 0x1e, 0x22, 0x10, + 0xf0, 0x0e, 0xfb, 0x5e, 0x48, 0x27, 0x68, 0x00, + 0x78, 0x01, 0x23, 0x06, 0x43, 0x19, 0x70, 0x01, + 0xf0, 0x1b, 0xfd, 0xcc, 0x4b, 0x24, 0x40, 0x18, + 0xf0, 0x1b, 0xfd, 0xcc, 0x22, 0x00, 0xb4, 0x04, + 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x22, 0x02, + 0x43, 0x02, 0x23, 0x02, 0x20, 0x1e, 0x1c, 0x31, + 0xf0, 0x0a, 0xf8, 0xfc, 0x23, 0x01, 0x02, 0x9b, + 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1e, 0xb0, 0x01, + 0xf0, 0x0a, 0xfa, 0xb8, 0x21, 0x00, 0x20, 0x1e, + 0xf0, 0x0a, 0xff, 0xaa, 0x42, 0xac, 0xd0, 0x13, + 0x42, 0xb4, 0xd0, 0x11, 0x2c, 0x00, 0xd0, 0x0f, + 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, + 0x20, 0x1c, 0xf0, 0x0a, 0xfa, 0xa7, 0x22, 0x00, + 0xb4, 0x04, 0x23, 0x00, 0x22, 0x82, 0x20, 0x1c, + 0x1c, 0x21, 0xf0, 0x0a, 0xf8, 0xdb, 0xb0, 0x01, + 0x81, 0x3c, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0x00, 0x00, 0xff, 0xfd, 0x00, 0x00, 0xff, 0xfc, + 0x2e, 0x08, 0x5e, 0x34, 0x2e, 0x08, 0x47, 0x68, + 0x2e, 0x08, 0x05, 0xb8, 0x2e, 0x08, 0x5e, 0x60, + 0xff, 0xfe, 0xff, 0xff, 0xb5, 0x00, 0x22, 0x00, + 0xb4, 0x04, 0x04, 0x01, 0x0c, 0x09, 0x23, 0x00, + 0x4a, 0x03, 0x1e, 0x50, 0xf7, 0xff, 0xfe, 0xc0, + 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xb5, 0x00, 0x22, 0x00, + 0xb4, 0x04, 0x04, 0x02, 0x0c, 0x12, 0x23, 0x00, + 0x49, 0x03, 0x1e, 0x48, 0xf7, 0xff, 0xfe, 0xb0, + 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xb5, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0xd0, 0x08, 0x28, 0x01, 0xd0, 0x0b, + 0x28, 0x02, 0xd1, 0x02, 0x02, 0x00, 0xf0, 0x0d, + 0xfc, 0xa3, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x80, + 0xf0, 0x0d, 0xfc, 0x9e, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0xff, 0x30, 0x01, 0xf0, 0x0d, 0xfc, 0x98, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xb0, 0x27, 0x00, + 0x4c, 0x1b, 0x20, 0x01, 0x04, 0x80, 0x21, 0x00, + 0x22, 0x00, 0xc4, 0x86, 0xc4, 0x84, 0x3c, 0x14, + 0xf0, 0x05, 0xf9, 0x40, 0x61, 0x60, 0x28, 0x00, + 0xd0, 0x06, 0x21, 0x01, 0x04, 0x89, 0x61, 0xe1, + 0x18, 0x41, 0x62, 0x20, 0x61, 0xa1, 0xe0, 0x02, + 0x61, 0xe7, 0x61, 0xa7, 0x62, 0x27, 0x68, 0x21, + 0x00, 0xc9, 0x4a, 0x10, 0x18, 0x89, 0x60, 0x48, + 0x20, 0x00, 0x49, 0x0f, 0x4d, 0x0f, 0x00, 0x42, + 0x52, 0x8d, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, + 0x28, 0x1d, 0xdb, 0xf8, 0x20, 0x00, 0x1c, 0x39, + 0x4c, 0x0b, 0x4f, 0x0c, 0x4b, 0x0c, 0x00, 0x42, + 0x52, 0xa5, 0x00, 0x82, 0x50, 0xb9, 0x50, 0x99, + 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, + 0xdb, 0xf5, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x08, 0x3b, 0x78, + 0x2e, 0x08, 0x49, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x49, 0x38, 0x2e, 0x08, 0x49, 0xf0, + 0x2e, 0x08, 0x4a, 0x70, 0xb4, 0xf0, 0xb0, 0x81, + 0x49, 0x25, 0xc9, 0x0c, 0x39, 0x08, 0x1a, 0xd2, + 0x60, 0x8a, 0xd5, 0x02, 0x32, 0xff, 0x32, 0x01, + 0x60, 0x8a, 0x6a, 0x0a, 0x62, 0x8a, 0x68, 0x8f, + 0x2f, 0xfe, 0xdb, 0x03, 0x20, 0x00, 0xb0, 0x01, + 0xbc, 0xf0, 0x47, 0x70, 0x30, 0x03, 0x08, 0x80, + 0x00, 0x80, 0x4c, 0x1b, 0x69, 0xa6, 0x69, 0x64, + 0x2f, 0x3e, 0xdb, 0x24, 0x00, 0xdb, 0x4f, 0x19, + 0x19, 0xdb, 0x68, 0x5b, 0x62, 0x4b, 0x93, 0x00, + 0x1a, 0x9f, 0x4b, 0x15, 0x69, 0xdd, 0x2f, 0x00, + 0xdc, 0x00, 0x19, 0x7f, 0x23, 0x01, 0x03, 0x1b, + 0x18, 0xc3, 0x42, 0xbb, 0xdd, 0x0f, 0x18, 0x17, + 0x42, 0xb7, 0xdb, 0x09, 0x9a, 0x00, 0x1b, 0x12, + 0x2a, 0x00, 0xdc, 0x00, 0x19, 0x52, 0x42, 0x93, + 0xdd, 0x11, 0x18, 0x20, 0x62, 0x08, 0xe0, 0x0e, + 0x62, 0x0f, 0x1c, 0x14, 0xe0, 0x0b, 0x18, 0x10, + 0x62, 0x08, 0x1c, 0x14, 0xe0, 0x07, 0x18, 0x12, + 0x42, 0xb2, 0xdb, 0x00, 0x62, 0x0c, 0x6a, 0x0a, + 0x18, 0x10, 0x62, 0x08, 0x1c, 0x14, 0x1c, 0x20, + 0xb0, 0x01, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x08, 0x3b, 0x78, + 0x48, 0x03, 0x6a, 0x81, 0x62, 0x01, 0x69, 0x01, + 0x31, 0x01, 0x61, 0x01, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x00, 0x1c, 0xb5, 0xf7, 0x04, 0x05, + 0x0c, 0x2d, 0x04, 0x0e, 0x0c, 0x36, 0xb0, 0x81, + 0x23, 0x01, 0x03, 0x1b, 0x98, 0x03, 0x42, 0x9e, + 0xdd, 0x05, 0x20, 0xff, 0xb0, 0x01, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x4f, 0x24, + 0x68, 0xb9, 0x29, 0xff, 0xdb, 0x02, 0x20, 0xff, + 0xb0, 0x01, 0xe7, 0xf4, 0x00, 0x69, 0x19, 0x49, + 0x00, 0x89, 0x4a, 0x20, 0x18, 0x8c, 0x89, 0x21, + 0x29, 0x01, 0xd0, 0x02, 0x20, 0xff, 0xb0, 0x01, + 0xe7, 0xe9, 0x79, 0x81, 0x91, 0x00, 0x88, 0xa0, + 0x08, 0x40, 0x07, 0x80, 0xd1, 0x02, 0x1c, 0x28, + 0xf0, 0x05, 0xfb, 0x98, 0x88, 0xa0, 0x23, 0x06, + 0x40, 0x18, 0x28, 0x02, 0xd1, 0x09, 0x88, 0xe0, + 0x99, 0x00, 0x42, 0x88, 0xd1, 0x05, 0x1c, 0x28, + 0xf0, 0x05, 0xfb, 0x8c, 0x20, 0xff, 0xb0, 0x01, + 0xe7, 0xd1, 0x88, 0xe0, 0x4b, 0x10, 0x42, 0x98, + 0xd1, 0x01, 0x99, 0x00, 0x80, 0xe1, 0x68, 0x39, + 0x00, 0xc8, 0x4a, 0x0e, 0x52, 0x15, 0x18, 0x80, + 0x80, 0x46, 0x9a, 0x03, 0x31, 0x01, 0x60, 0x42, + 0x20, 0x00, 0x23, 0xff, 0x60, 0x39, 0x33, 0x01, + 0x42, 0x99, 0xd1, 0x00, 0x60, 0x38, 0x68, 0xb9, + 0x31, 0x01, 0x60, 0xb9, 0x68, 0xfb, 0x42, 0x99, + 0xdd, 0x00, 0x60, 0xf9, 0xb0, 0x01, 0xe7, 0xb2, + 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x08, 0x47, 0x80, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x3b, 0x78, + 0xb5, 0xf0, 0x20, 0xff, 0xb0, 0x82, 0x49, 0x33, + 0x91, 0x01, 0x49, 0x33, 0x8e, 0x89, 0x29, 0x00, + 0xd0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x4f, 0x30, 0xcf, 0x0a, 0x3f, 0x08, + 0x1a, 0xc9, 0x60, 0xb9, 0x1c, 0x0a, 0xd5, 0x02, + 0x1d, 0xd1, 0x31, 0xf9, 0x60, 0xb9, 0x68, 0xb9, + 0x29, 0x00, 0xd1, 0x03, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0xda, 0x49, 0x28, + 0x5a, 0x8d, 0x18, 0x51, 0x88, 0x4c, 0x68, 0x49, + 0x91, 0x00, 0x00, 0xa9, 0x4a, 0x25, 0x58, 0x56, + 0x2e, 0x00, 0xd0, 0x07, 0x48, 0x24, 0x58, 0x43, + 0x99, 0x00, 0x1c, 0x28, 0x1c, 0x22, 0xf0, 0x17, + 0xfc, 0xb1, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x29, + 0x06, 0xed, 0x0e, 0xed, 0x1c, 0xe0, 0x08, 0x82, + 0x00, 0x92, 0x98, 0x00, 0x99, 0x01, 0x6a, 0xfb, + 0xf0, 0x17, 0xfc, 0x9e, 0x00, 0x68, 0x19, 0x40, + 0x00, 0x80, 0x49, 0x1a, 0x18, 0x40, 0x88, 0x80, + 0x21, 0x0c, 0x40, 0x01, 0x29, 0x0c, 0xd1, 0x04, + 0x02, 0x29, 0x31, 0x02, 0x04, 0x09, 0x0c, 0x09, + 0xe0, 0x03, 0x02, 0x29, 0x31, 0x01, 0x04, 0x09, + 0x0c, 0x09, 0x08, 0x40, 0xd3, 0x04, 0x04, 0x08, + 0x0c, 0x00, 0x21, 0x01, 0x03, 0xc9, 0x43, 0x01, + 0x48, 0x09, 0x85, 0x01, 0x85, 0x44, 0x21, 0x01, + 0x02, 0x49, 0x86, 0x81, 0x68, 0x78, 0x28, 0xff, + 0xd1, 0x02, 0x20, 0x00, 0x60, 0x78, 0xe0, 0x01, + 0x30, 0x01, 0x60, 0x78, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x02, 0x00, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x00, 0x1c, + 0x2e, 0x08, 0x3b, 0x78, 0x2e, 0x08, 0x49, 0xf0, + 0x2e, 0x08, 0x4a, 0x70, 0x2e, 0x08, 0x47, 0x80, + 0xb4, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x4f, 0x14, + 0x8e, 0xba, 0x2a, 0x00, 0xd0, 0x03, 0x20, 0x00, + 0x43, 0xc0, 0xbc, 0xf0, 0x47, 0x70, 0x1c, 0x05, + 0x4c, 0x10, 0x1d, 0x48, 0xd5, 0x00, 0x30, 0x01, + 0x10, 0x40, 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, + 0x29, 0x02, 0xdb, 0xf2, 0x29, 0xe0, 0xdc, 0xf0, + 0x22, 0x00, 0x29, 0x00, 0xdd, 0x07, 0x00, 0x53, + 0x5a, 0xee, 0x52, 0xe6, 0x32, 0x01, 0x04, 0x12, + 0x0c, 0x12, 0x42, 0x8a, 0xdb, 0xf7, 0x22, 0x04, + 0x85, 0x3a, 0x00, 0x49, 0x85, 0x79, 0x21, 0x0f, + 0x02, 0x49, 0x86, 0xb9, 0xbc, 0xf0, 0x47, 0x70, + 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x1e, 0x00, + 0xb5, 0xb0, 0x27, 0x00, 0x4d, 0x13, 0x8e, 0xa9, + 0x29, 0x00, 0xd0, 0x03, 0x43, 0xf8, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x79, 0x04, 0x09, + 0x0c, 0x09, 0x1c, 0x3a, 0x1c, 0x0f, 0x56, 0x81, + 0x29, 0x00, 0xd1, 0xf7, 0x24, 0x00, 0x2f, 0xfe, + 0xdd, 0x03, 0x27, 0xfe, 0x1d, 0xc1, 0x31, 0xd9, + 0x77, 0xcc, 0x1c, 0x7a, 0x49, 0x08, 0xf7, 0xff, + 0xfc, 0x03, 0x20, 0x04, 0x85, 0x28, 0x1c, 0xf8, + 0x08, 0x80, 0x00, 0x80, 0x85, 0x68, 0x20, 0x0f, + 0x02, 0x40, 0x86, 0xa8, 0x1c, 0x20, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, + 0x2c, 0x00, 0x1e, 0x00, 0xb4, 0xf0, 0x4b, 0x1b, + 0x8e, 0x9b, 0x2b, 0x00, 0xd0, 0x03, 0x20, 0x00, + 0x43, 0xc0, 0xbc, 0xf0, 0x47, 0x70, 0x1c, 0xd4, + 0xd5, 0x00, 0x34, 0x01, 0x10, 0x64, 0x1c, 0x0d, + 0x4f, 0x15, 0x02, 0x00, 0x04, 0x00, 0x0c, 0x00, + 0x78, 0x4e, 0x0a, 0x33, 0xd3, 0x07, 0x06, 0x73, + 0x0e, 0x5b, 0x18, 0x59, 0x78, 0x89, 0x43, 0x08, + 0x04, 0x00, 0x0c, 0x00, 0xe0, 0x03, 0x78, 0x89, + 0x43, 0x08, 0x04, 0x00, 0x0c, 0x00, 0x80, 0x38, + 0x20, 0x00, 0x2c, 0x00, 0xdd, 0x06, 0x00, 0x41, + 0x5a, 0x6b, 0x19, 0xc9, 0x80, 0x4b, 0x30, 0x01, + 0x42, 0xa0, 0xdb, 0xf8, 0x20, 0x0b, 0x49, 0x05, + 0x85, 0x08, 0x1c, 0x90, 0x85, 0x48, 0x20, 0x01, + 0x02, 0x40, 0x86, 0x88, 0x20, 0x00, 0xbc, 0xf0, + 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, + 0x2c, 0x00, 0x02, 0x00, 0x04, 0x02, 0x0c, 0x12, + 0x48, 0x0c, 0x6f, 0xc1, 0x20, 0x00, 0x43, 0xc0, + 0x29, 0x00, 0xd1, 0x12, 0x49, 0x0a, 0x8e, 0xcb, + 0x2b, 0x00, 0xd1, 0x0e, 0x8d, 0x8b, 0x2b, 0x00, + 0xd1, 0x0b, 0x48, 0x08, 0x86, 0xc2, 0x23, 0x07, + 0x86, 0x83, 0x85, 0x8b, 0x85, 0xca, 0x20, 0x09, + 0x02, 0x40, 0x86, 0xc8, 0x20, 0x01, 0x87, 0x88, + 0x20, 0x00, 0x47, 0x70, 0x2c, 0x00, 0x1f, 0x80, + 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x00, 0xc0, + 0xb5, 0x80, 0x1c, 0x01, 0x4a, 0x0d, 0x8e, 0xd3, + 0x20, 0x00, 0x43, 0xc0, 0x2b, 0x00, 0xd1, 0x12, + 0x8d, 0x93, 0x2b, 0x07, 0xd1, 0x0f, 0x8d, 0xd7, + 0x20, 0x00, 0x85, 0x90, 0x2f, 0x00, 0xd0, 0x0a, + 0x23, 0x01, 0x02, 0xdb, 0x42, 0x9f, 0xdc, 0x06, + 0x1c, 0x3a, 0x48, 0x05, 0x4b, 0x05, 0x6a, 0xdb, + 0xf0, 0x17, 0xfb, 0x8e, 0x1c, 0x38, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, + 0x2c, 0x00, 0x12, 0x00, 0x2e, 0x08, 0x00, 0x1c, + 0xb5, 0xf0, 0xb0, 0x83, 0x49, 0x62, 0x8e, 0x88, + 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x4e, 0x5f, 0x78, 0x30, + 0x49, 0x5f, 0x91, 0x02, 0x78, 0x09, 0x42, 0x88, + 0xd1, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x00, 0x4d, 0x5b, 0x4b, 0x5c, + 0x93, 0x01, 0x1d, 0xd9, 0x31, 0x19, 0x7d, 0x0a, + 0x00, 0x53, 0x18, 0x9b, 0x01, 0x1b, 0x19, 0x5b, + 0x78, 0xdc, 0x1c, 0x1f, 0x79, 0x1b, 0x42, 0x9c, + 0xd1, 0x04, 0x79, 0x7b, 0x07, 0xdb, 0x0f, 0xdb, + 0x2b, 0x01, 0xd1, 0x06, 0x7d, 0x0b, 0x93, 0x00, + 0x32, 0x01, 0x07, 0x52, 0x0f, 0x52, 0x75, 0x0a, + 0xe0, 0x08, 0x32, 0x01, 0x07, 0x52, 0x0f, 0x52, + 0x75, 0x0a, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, + 0x28, 0x08, 0xdb, 0xe0, 0x28, 0x08, 0xd1, 0x03, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x98, 0x00, 0x00, 0x43, 0x18, 0x18, 0x01, 0x00, + 0x19, 0x47, 0x78, 0xf8, 0x00, 0xc0, 0x19, 0xc0, + 0x89, 0x84, 0x23, 0x01, 0x03, 0x1b, 0x42, 0x9c, + 0xdd, 0x00, 0x1c, 0x1c, 0x68, 0x81, 0x89, 0xc0, + 0x18, 0x08, 0x1c, 0xe1, 0x08, 0x8a, 0x00, 0x92, + 0x49, 0x3e, 0x9b, 0x01, 0x6a, 0xdb, 0xf0, 0x17, + 0xfb, 0x2b, 0x88, 0x38, 0x02, 0x00, 0x30, 0x09, + 0x49, 0x35, 0x85, 0x08, 0x85, 0x4c, 0x20, 0x01, + 0x02, 0x40, 0x86, 0x88, 0x78, 0xf8, 0x00, 0xc0, + 0x19, 0xc0, 0x89, 0xc1, 0x19, 0x09, 0x81, 0xc1, + 0x78, 0xf8, 0x00, 0xc0, 0x19, 0xc0, 0x89, 0x81, + 0x1b, 0x09, 0x81, 0x81, 0x78, 0xf8, 0x00, 0xc0, + 0x19, 0xc0, 0x89, 0x81, 0x29, 0x00, 0xd1, 0x4f, + 0x24, 0x00, 0x81, 0xc4, 0x78, 0xf9, 0x6a, 0xb8, + 0x18, 0x40, 0x73, 0x04, 0x78, 0xf8, 0x30, 0x01, + 0x07, 0x80, 0x0f, 0x80, 0x70, 0xf8, 0x78, 0x30, + 0x30, 0x01, 0x70, 0x30, 0x78, 0xf8, 0x79, 0x39, + 0x42, 0x88, 0xd1, 0x3d, 0x79, 0x78, 0x21, 0x02, + 0x40, 0x01, 0x29, 0x02, 0xd1, 0x1e, 0x70, 0xfc, + 0x71, 0x3c, 0x71, 0x7c, 0x49, 0x22, 0x80, 0x39, + 0x6a, 0xb8, 0x68, 0x00, 0xf0, 0x04, 0xfe, 0x7c, + 0x6a, 0xb8, 0xf0, 0x04, 0xfe, 0x79, 0x20, 0x00, + 0x49, 0x1d, 0x00, 0x42, 0x18, 0x12, 0x01, 0x12, + 0x5a, 0xaa, 0x42, 0x8a, 0xd1, 0x04, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf4, + 0x28, 0x08, 0xd1, 0x1d, 0x70, 0x34, 0x99, 0x02, + 0x70, 0x0c, 0xe0, 0x19, 0x07, 0xc0, 0x0f, 0xc0, + 0x28, 0x01, 0xd1, 0x15, 0x70, 0xfc, 0x71, 0x3c, + 0x21, 0x06, 0x1d, 0xf8, 0x30, 0x19, 0x73, 0x41, + 0x6a, 0xb9, 0x72, 0x0c, 0x79, 0x79, 0x08, 0x49, + 0x00, 0x49, 0x71, 0x79, 0x22, 0x04, 0x7b, 0x01, + 0xb4, 0x06, 0x78, 0xb9, 0x22, 0x0a, 0x20, 0x85, + 0x6a, 0xbb, 0xf0, 0x09, 0xff, 0xb9, 0xb0, 0x02, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x03, 0xc0, + 0x2e, 0x08, 0x03, 0xbc, 0x2e, 0x08, 0x44, 0x70, + 0x2e, 0x08, 0x00, 0x1c, 0x2c, 0x00, 0x02, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x4f, 0x0b, + 0x68, 0x38, 0x28, 0x00, 0xd1, 0x0f, 0x20, 0x2f, + 0x02, 0x80, 0xf0, 0x04, 0xfe, 0x57, 0x60, 0x38, + 0x20, 0x00, 0x49, 0x07, 0x60, 0x08, 0x49, 0x07, + 0x60, 0x08, 0x49, 0x07, 0x60, 0x08, 0x20, 0x2f, + 0x02, 0x80, 0x49, 0x06, 0x60, 0x08, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0x55, 0x30, + 0x2e, 0x02, 0x55, 0x38, 0x2e, 0x02, 0x55, 0x34, + 0x2e, 0x02, 0x55, 0x3c, 0x2e, 0x02, 0x55, 0x40, + 0xb5, 0x80, 0x4f, 0x04, 0x68, 0x38, 0xf0, 0x04, + 0xfe, 0x43, 0x20, 0x00, 0x60, 0x38, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0x55, 0x30, + 0xb5, 0xf0, 0xb0, 0x82, 0x4a, 0x34, 0x8e, 0x90, + 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x48, 0x31, 0x68, 0x01, + 0x4e, 0x31, 0x68, 0x30, 0x1a, 0x09, 0xd1, 0x03, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x29, 0x00, 0xda, 0x02, 0x23, 0x2f, 0x02, 0x9b, + 0x18, 0xc9, 0x23, 0x2f, 0x01, 0x1b, 0x42, 0x99, + 0xda, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x4a, 0x25, 0x8e, 0xd2, 0x2a, 0x00, + 0xd0, 0x07, 0x23, 0xeb, 0x01, 0x1b, 0x42, 0x99, + 0xda, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x1f, 0xcf, 0x3f, 0xff, 0x3f, 0x72, + 0x4b, 0x20, 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, + 0x21, 0x2f, 0x02, 0x89, 0x1a, 0x0c, 0x4d, 0x1e, + 0x49, 0x1e, 0x91, 0x01, 0x42, 0xa7, 0xdd, 0x14, + 0x1b, 0x3a, 0x92, 0x00, 0x99, 0x01, 0x68, 0x09, + 0x18, 0x08, 0x1c, 0x22, 0x49, 0x1a, 0x6b, 0x2b, + 0xf0, 0x17, 0xfa, 0x3a, 0x4b, 0x18, 0x18, 0xe1, + 0x98, 0x01, 0x9a, 0x00, 0x68, 0x00, 0x6b, 0x2b, + 0xf0, 0x17, 0xfa, 0x32, 0x9a, 0x00, 0x60, 0x32, + 0xe0, 0x0e, 0x99, 0x01, 0x68, 0x09, 0x18, 0x08, + 0x1c, 0x3a, 0x49, 0x11, 0x6b, 0x2b, 0xf0, 0x17, + 0xfa, 0x27, 0x68, 0x30, 0x19, 0xc1, 0x20, 0x2f, + 0x02, 0x80, 0xf0, 0x17, 0xfa, 0x2b, 0x60, 0x31, + 0x20, 0x12, 0x4a, 0x05, 0x85, 0x10, 0x85, 0x57, + 0x20, 0x01, 0x02, 0x40, 0x86, 0x90, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x02, 0x55, 0x38, + 0x2e, 0x02, 0x55, 0x34, 0x00, 0x00, 0x0f, 0x6c, + 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x02, 0x55, 0x30, + 0x2c, 0x00, 0x02, 0x00, 0x2a, 0x00, 0xd0, 0x05, + 0x78, 0x03, 0x70, 0x0b, 0x30, 0x01, 0x31, 0x01, + 0x3a, 0x01, 0xd1, 0xf9, 0x47, 0x70, 0xb5, 0xf3, + 0xb0, 0x83, 0x98, 0x03, 0x78, 0x40, 0x00, 0x80, + 0x1c, 0x0f, 0x49, 0x3d, 0x58, 0x08, 0x28, 0x00, + 0xd1, 0x05, 0x20, 0xb0, 0xb0, 0x03, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x03, + 0x88, 0x45, 0x30, 0x04, 0xc8, 0x41, 0x1d, 0xf2, + 0x32, 0xb9, 0x1a, 0x14, 0x23, 0x01, 0x03, 0x1b, + 0x42, 0x9d, 0xdd, 0x03, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x03, 0xe7, 0xec, 0x19, 0x79, 0x91, 0x00, + 0x4b, 0x30, 0x93, 0x02, 0x2c, 0xbc, 0xdc, 0x01, + 0x2c, 0x00, 0xda, 0x07, 0x9b, 0x02, 0x68, 0x18, + 0x30, 0x01, 0x60, 0x18, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x03, 0xe7, 0xdc, 0x42, 0xac, 0xdb, 0x06, + 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x2a, + 0xf0, 0x17, 0xf9, 0xc6, 0xe0, 0x44, 0x2d, 0x00, + 0xdd, 0x42, 0x4b, 0x25, 0x93, 0x01, 0x99, 0x00, + 0x42, 0x8f, 0xd9, 0x07, 0x9b, 0x02, 0x68, 0x18, + 0x30, 0x01, 0x60, 0x18, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x03, 0xe7, 0xc4, 0x42, 0xa5, 0xdd, 0x07, + 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x22, + 0xf0, 0x17, 0xf9, 0xae, 0x68, 0x36, 0xe0, 0x05, + 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x2a, + 0xf0, 0x17, 0xf9, 0xa6, 0x19, 0x3f, 0x1b, 0x2d, + 0x79, 0xb0, 0x19, 0x80, 0x9a, 0x03, 0x78, 0x52, + 0x00, 0xd3, 0x1a, 0x9a, 0x00, 0x92, 0x9b, 0x01, + 0x68, 0x1b, 0x18, 0xd2, 0x78, 0x92, 0x06, 0xd2, + 0x0e, 0xd2, 0x1d, 0x31, 0x2a, 0x12, 0xd1, 0x06, + 0x78, 0xca, 0x0a, 0x12, 0xd2, 0x03, 0x78, 0x89, + 0x29, 0x09, 0xd1, 0x00, 0x38, 0x01, 0x1d, 0xf1, + 0x31, 0xb9, 0x1a, 0x0c, 0x2c, 0xbc, 0xdc, 0x01, + 0x2c, 0x00, 0xda, 0x03, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x03, 0xe7, 0x90, 0x2d, 0x00, 0xdc, 0xbe, + 0x20, 0x00, 0xb0, 0x03, 0xe7, 0x8b, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x64, 0x2e, 0x08, 0x00, 0x58, + 0x2e, 0x08, 0x5d, 0xcc, 0xb4, 0xf0, 0x68, 0x42, + 0x68, 0x84, 0x1d, 0xe1, 0x31, 0xb7, 0x1c, 0x16, + 0xb0, 0x81, 0x42, 0x91, 0xd9, 0x09, 0x78, 0x51, + 0x07, 0x09, 0x0f, 0x09, 0x02, 0x09, 0x78, 0x92, + 0x43, 0x11, 0x31, 0x03, 0x04, 0x09, 0x0c, 0x09, + 0xe0, 0x5b, 0x68, 0x21, 0x79, 0x8b, 0x93, 0x00, + 0x1d, 0x0f, 0x18, 0x59, 0x78, 0x45, 0x00, 0xeb, + 0x1b, 0x5b, 0x00, 0x9b, 0x4d, 0x2b, 0x68, 0x2d, + 0x19, 0x5b, 0x78, 0x9b, 0x06, 0xdb, 0x0e, 0xdb, + 0x2b, 0x12, 0xd1, 0x31, 0x1d, 0xe3, 0x33, 0xb9, + 0x1b, 0x9b, 0x06, 0x1d, 0x0e, 0x2d, 0x78, 0xfe, + 0x0a, 0x33, 0xd2, 0x29, 0x2d, 0x0e, 0xda, 0x27, + 0x9b, 0x00, 0x2b, 0x09, 0xdd, 0x06, 0x79, 0x3b, + 0x18, 0xfb, 0x33, 0x05, 0x42, 0x8b, 0xd0, 0x1f, + 0x39, 0x01, 0xe0, 0x1d, 0x9b, 0x00, 0x2b, 0x09, + 0xd1, 0x1a, 0x79, 0x3b, 0x2b, 0x00, 0xd0, 0x01, + 0x39, 0x01, 0xe0, 0x15, 0x39, 0x01, 0x1d, 0xe3, + 0x33, 0xb8, 0x42, 0x93, 0xd9, 0x09, 0x78, 0x53, + 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, 0x04, 0x1b, + 0x0c, 0x1b, 0x33, 0x03, 0x04, 0x1b, 0x0c, 0x1b, + 0xe0, 0x03, 0x78, 0x4b, 0x33, 0x03, 0x04, 0x1b, + 0x0c, 0x1b, 0x42, 0x9d, 0xda, 0x00, 0x31, 0x01, + 0x1d, 0xe3, 0x33, 0xb8, 0x42, 0x93, 0xd9, 0x0b, + 0x78, 0x52, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, + 0x04, 0x12, 0x0c, 0x12, 0x78, 0x09, 0x18, 0x51, + 0x31, 0x03, 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x08, + 0x78, 0x0a, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, + 0x78, 0x49, 0x43, 0x11, 0x31, 0x03, 0x04, 0x09, + 0x0c, 0x09, 0x80, 0x41, 0xb0, 0x01, 0xbc, 0xf0, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x5d, 0xcc, + 0x4a, 0x02, 0xc2, 0x03, 0x3a, 0x08, 0x20, 0x00, + 0x60, 0x90, 0x47, 0x70, 0x2e, 0x08, 0x43, 0x78, + 0x48, 0x01, 0x68, 0x80, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x43, 0x78, 0x48, 0x01, 0x68, 0x80, + 0x08, 0xc0, 0x47, 0x70, 0x2e, 0x08, 0x43, 0x78, + 0x48, 0x02, 0x68, 0x81, 0x08, 0xc9, 0x68, 0x00, + 0x18, 0x08, 0x47, 0x70, 0x2e, 0x08, 0x43, 0x78, + 0xb4, 0xf0, 0x1c, 0x03, 0x20, 0x00, 0xb0, 0x82, + 0x49, 0x53, 0x91, 0x01, 0x68, 0x89, 0x18, 0xcf, + 0x97, 0x00, 0x08, 0xca, 0x07, 0x4c, 0x0f, 0x64, + 0x49, 0x4f, 0x68, 0x09, 0xd1, 0x32, 0x1c, 0x1f, + 0xd5, 0x04, 0x42, 0x7f, 0x07, 0x7f, 0x0f, 0x7f, + 0x42, 0x7f, 0xe0, 0x01, 0x07, 0x7f, 0x0f, 0x7f, + 0x2f, 0x00, 0xd1, 0x27, 0x2b, 0x10, 0xd0, 0x16, + 0xdc, 0x05, 0x2b, 0x00, 0xd0, 0x5a, 0x2b, 0x08, + 0xd1, 0x59, 0x5c, 0x88, 0xe0, 0x81, 0x2b, 0x18, + 0xd0, 0x13, 0x2b, 0x20, 0xd1, 0x53, 0x5c, 0x88, + 0x06, 0x00, 0x18, 0x89, 0x78, 0x4a, 0x04, 0x12, + 0x18, 0x80, 0x78, 0x8a, 0x02, 0x12, 0x18, 0x80, + 0x78, 0xc9, 0x18, 0x40, 0xe0, 0x71, 0x5c, 0x88, + 0x02, 0x00, 0x18, 0x89, 0x78, 0x49, 0x18, 0x40, + 0xe0, 0x6b, 0x5c, 0x88, 0x04, 0x00, 0x18, 0x89, + 0x78, 0x4a, 0x02, 0x12, 0x18, 0x80, 0x78, 0x89, + 0x18, 0x40, 0xe0, 0x62, 0x2b, 0x00, 0xd1, 0x03, + 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, + 0x9f, 0x00, 0x08, 0xfd, 0x07, 0x7f, 0x0f, 0x7f, + 0x2b, 0x20, 0xdc, 0x56, 0x1a, 0xae, 0x4d, 0x2f, + 0x2e, 0x05, 0xd2, 0x52, 0xa3, 0x01, 0x5d, 0x9b, + 0x00, 0x5b, 0x44, 0x9f, 0x02, 0x09, 0x14, 0x25, + 0x38, 0x00, 0x5c, 0x88, 0x5d, 0x29, 0x40, 0x08, + 0x21, 0x08, 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x44, + 0x1c, 0x50, 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, + 0x02, 0x12, 0x5c, 0x08, 0x18, 0x80, 0x21, 0x08, + 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x39, 0x1c, 0x50, + 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, 0x02, 0x12, + 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, 0x02, 0x00, + 0x5c, 0xc9, 0x18, 0x08, 0x21, 0x08, 0x1b, 0xc9, + 0x40, 0xc8, 0xe0, 0x2a, 0xe0, 0x29, 0xe0, 0x28, + 0x1c, 0x50, 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, + 0x02, 0x12, 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, + 0x02, 0x00, 0x1c, 0x5a, 0x5c, 0xcb, 0x18, 0x18, + 0x02, 0x00, 0x5c, 0x89, 0x18, 0x08, 0x21, 0x08, + 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x15, 0x1c, 0x50, + 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, 0x02, 0x12, + 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, 0x02, 0x00, + 0x1c, 0x5a, 0x5c, 0xcb, 0x18, 0x18, 0x02, 0x03, + 0x1c, 0x50, 0x5c, 0x8a, 0x18, 0xd2, 0x40, 0xba, + 0x5c, 0x08, 0x21, 0x08, 0x1b, 0xc9, 0x40, 0xc8, + 0x18, 0x80, 0x99, 0x01, 0x9f, 0x00, 0x60, 0x8f, + 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x43, 0x78, 0x2e, 0x08, 0x00, 0x60, + 0xb5, 0xb0, 0x1c, 0x07, 0x20, 0x00, 0x24, 0x00, + 0x2f, 0x00, 0xdd, 0x09, 0x00, 0x85, 0x18, 0x2d, + 0x00, 0x6d, 0x20, 0x04, 0xf7, 0xff, 0xff, 0x44, + 0x19, 0x40, 0x34, 0x01, 0x42, 0xbc, 0xdb, 0xf5, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x47, 0x70, 0xb5, 0xb0, 0x1c, 0x0c, 0x1c, 0x05, + 0x1c, 0x17, 0xb0, 0x90, 0xf0, 0x1a, 0xff, 0xba, + 0x49, 0x25, 0x20, 0x0c, 0xf0, 0x1a, 0xff, 0x82, + 0xf0, 0x1a, 0xff, 0x78, 0x4b, 0x23, 0x40, 0x18, + 0xf0, 0x1a, 0xff, 0x78, 0xf0, 0x1a, 0xff, 0xe4, + 0x20, 0x10, 0x90, 0x0a, 0x20, 0xff, 0x90, 0x0b, + 0xa8, 0x0f, 0x90, 0x0c, 0x20, 0x0c, 0x90, 0x0d, + 0x48, 0x1d, 0x90, 0x0e, 0xa8, 0x0a, 0xf0, 0x0e, + 0xfd, 0x9b, 0xab, 0x07, 0x70, 0x1d, 0x94, 0x08, + 0x72, 0x1f, 0x24, 0x00, 0xab, 0x09, 0x70, 0x5c, + 0x27, 0x00, 0x4d, 0x18, 0xf0, 0x0e, 0xfd, 0xfc, + 0x28, 0x00, 0xd0, 0x02, 0x37, 0x01, 0x42, 0xaf, + 0xdb, 0xf8, 0x20, 0x01, 0xa9, 0x07, 0xf0, 0x0e, + 0xfd, 0xfd, 0xf0, 0x0e, 0xfd, 0xf1, 0x28, 0x00, + 0xd1, 0xfb, 0x94, 0x0b, 0xa8, 0x0a, 0xf0, 0x0e, + 0xfd, 0x7f, 0xf0, 0x1a, 0xff, 0x83, 0x21, 0x00, + 0x20, 0x0c, 0xf0, 0x1a, 0xff, 0x4b, 0xf0, 0x1a, + 0xff, 0x41, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, + 0xf0, 0x1a, 0xff, 0x40, 0xf0, 0x1a, 0xff, 0xac, + 0x46, 0x68, 0xf0, 0x0e, 0xfd, 0xb9, 0x98, 0x04, + 0xb0, 0x10, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x00, 0x14, 0x9d, 0xff, 0xff, 0xf7, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x27, 0x10, + 0xb5, 0xff, 0x9e, 0x09, 0x1c, 0x04, 0x1c, 0x0d, + 0x1c, 0x17, 0xb0, 0x93, 0xf0, 0x1a, 0xff, 0x5e, + 0x49, 0x31, 0x20, 0x0c, 0xf0, 0x1a, 0xff, 0x26, + 0xf0, 0x1a, 0xff, 0x1c, 0x4b, 0x2f, 0x40, 0x18, + 0xf0, 0x1a, 0xff, 0x1c, 0xf0, 0x1a, 0xff, 0x88, + 0x20, 0x10, 0x90, 0x0d, 0x20, 0xff, 0x90, 0x0e, + 0xa8, 0x12, 0x90, 0x0f, 0x20, 0x0c, 0x90, 0x10, + 0x48, 0x29, 0x90, 0x11, 0xa8, 0x0d, 0xf0, 0x0e, + 0xfd, 0x3f, 0xab, 0x07, 0x70, 0x1c, 0x95, 0x08, + 0x72, 0x1f, 0x20, 0xff, 0xab, 0x09, 0x70, 0x58, + 0x1c, 0x60, 0x71, 0x18, 0x9b, 0x16, 0x93, 0x0b, + 0xab, 0x0c, 0x70, 0x1e, 0x20, 0xff, 0x70, 0x58, + 0x24, 0x00, 0x4d, 0x20, 0xf0, 0x0e, 0xfd, 0x98, + 0x28, 0x00, 0xd0, 0x02, 0x34, 0x01, 0x42, 0xac, + 0xdb, 0xf8, 0x2f, 0x00, 0xd1, 0x04, 0x20, 0x01, + 0xa9, 0x0a, 0xf0, 0x0e, 0xfd, 0x97, 0xe0, 0x03, + 0x20, 0x02, 0xa9, 0x07, 0xf0, 0x0e, 0xfd, 0x92, + 0xf0, 0x0e, 0xfd, 0x86, 0x28, 0x00, 0xd1, 0xfb, + 0x27, 0x00, 0x97, 0x0e, 0xa8, 0x0d, 0xf0, 0x0e, + 0xfd, 0x13, 0xf0, 0x1a, 0xff, 0x17, 0x21, 0x00, + 0x20, 0x0c, 0xf0, 0x1a, 0xfe, 0xdf, 0xf0, 0x1a, + 0xfe, 0xd5, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, + 0xf0, 0x1a, 0xfe, 0xd4, 0xf0, 0x1a, 0xff, 0x40, + 0x46, 0x68, 0xf0, 0x0e, 0xfd, 0x4d, 0x98, 0x01, + 0x0a, 0x80, 0xd2, 0x05, 0x20, 0x01, 0xb0, 0x13, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x1c, 0x38, 0xb0, 0x13, 0xe7, 0xf8, 0x00, 0x00, + 0x2e, 0x00, 0x14, 0x9d, 0xff, 0xff, 0xf7, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x27, 0x10, + 0x1c, 0x01, 0x48, 0x04, 0x61, 0xc1, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x01, 0x48, 0x02, 0x60, 0x01, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x68, + 0x6e, 0x00, 0x17, 0x00, 0xb5, 0xb0, 0x4f, 0x41, + 0x69, 0x38, 0x4c, 0x41, 0x28, 0x00, 0xd0, 0x07, + 0x20, 0x03, 0x60, 0x20, 0x69, 0x38, 0x38, 0x01, + 0x61, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x21, 0x02, 0x69, 0x78, 0x28, 0x00, 0xd0, 0x04, + 0x60, 0x21, 0x69, 0x78, 0x38, 0x01, 0x61, 0x78, + 0xd1, 0xf3, 0x68, 0xf8, 0x28, 0x00, 0xd0, 0x20, + 0x38, 0x01, 0x60, 0xf8, 0x4a, 0x35, 0xd0, 0x08, + 0x68, 0xbb, 0x18, 0xd2, 0x3a, 0x20, 0x7f, 0xd2, + 0x1e, 0x45, 0x40, 0xea, 0x07, 0xd2, 0x0f, 0xd2, + 0xe0, 0x09, 0x68, 0xbb, 0x18, 0xd2, 0x3a, 0x20, + 0x7f, 0xd2, 0x4b, 0x2f, 0x5c, 0x9a, 0x23, 0x01, + 0x40, 0x5a, 0x06, 0x12, 0x0e, 0x12, 0x23, 0x01, + 0x2a, 0x00, 0xd0, 0x02, 0x61, 0x79, 0x61, 0x3b, + 0xe0, 0x01, 0x61, 0x39, 0x61, 0x7b, 0x28, 0x00, + 0xd1, 0xcf, 0x68, 0xb8, 0x30, 0x01, 0x60, 0xb8, + 0x23, 0x09, 0x68, 0x7a, 0x1c, 0x01, 0x42, 0x90, + 0xdc, 0x03, 0x60, 0xfb, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x20, 0x1c, 0x55, 0x42, 0x8d, + 0xd1, 0x03, 0x61, 0x78, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x1c, 0x95, 0x42, 0x8d, 0xd1, 0x0d, + 0x7e, 0x3d, 0x2d, 0xff, 0xd0, 0x0a, 0x2d, 0x00, + 0xd0, 0x03, 0x60, 0xfb, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x19, 0x61, 0x38, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x32, 0x03, 0x42, 0x8a, + 0xd1, 0x04, 0x20, 0x22, 0x61, 0x78, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x69, 0xf9, 0x60, 0x21, + 0x68, 0x79, 0x68, 0xba, 0x31, 0x04, 0x42, 0x91, + 0xd1, 0x0a, 0x69, 0xf9, 0x29, 0x00, 0xd0, 0x03, + 0x61, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x61, 0x78, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0xf0, 0x04, 0xf8, 0x90, 0x20, 0x00, 0x60, 0x38, + 0x69, 0xf8, 0x60, 0x20, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x68, + 0x6e, 0x00, 0x17, 0x00, 0x2e, 0x08, 0x43, 0x84, + 0x2e, 0x08, 0x00, 0x68, 0xb5, 0xb0, 0x04, 0x0b, + 0x0c, 0x1b, 0x04, 0x14, 0x0c, 0x24, 0x49, 0x14, + 0x68, 0x0a, 0x2a, 0x00, 0xd0, 0x02, 0x68, 0x0a, + 0x2a, 0x00, 0xd1, 0xfc, 0x22, 0x01, 0x60, 0x0a, + 0x2b, 0x0a, 0xdd, 0x00, 0x23, 0x0a, 0x22, 0x00, + 0x4f, 0x0e, 0x2b, 0x00, 0xdd, 0x05, 0x00, 0x55, + 0x5b, 0x45, 0x54, 0xbd, 0x32, 0x01, 0x42, 0x9a, + 0xdb, 0xf9, 0x76, 0x0c, 0x20, 0xff, 0x18, 0xfa, + 0x70, 0x50, 0x20, 0x00, 0x60, 0x4b, 0x22, 0x20, + 0x61, 0x08, 0x61, 0x4a, 0x60, 0x88, 0x60, 0xc8, + 0x49, 0x05, 0x20, 0x32, 0xf0, 0x04, 0xf8, 0x2c, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x01, 0x68, 0x2e, 0x08, 0x43, 0x84, + 0x2e, 0x00, 0x16, 0x59, 0xb5, 0x80, 0x04, 0x01, + 0x0c, 0x09, 0x20, 0x00, 0x22, 0x00, 0xb0, 0x88, + 0x00, 0x47, 0x46, 0x6b, 0x53, 0xda, 0x30, 0x01, + 0x04, 0x00, 0x14, 0x00, 0x28, 0x10, 0xdb, 0xf7, + 0x22, 0x80, 0x00, 0x43, 0x46, 0x68, 0x52, 0xc2, + 0x46, 0x6a, 0x1c, 0x08, 0x21, 0x05, 0xf0, 0x04, + 0xfa, 0xf9, 0x49, 0x06, 0x80, 0x88, 0x00, 0x42, + 0x18, 0x12, 0x00, 0x92, 0x4b, 0x04, 0x5a, 0x9a, + 0x81, 0x0a, 0xb0, 0x08, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x88, + 0x2e, 0x08, 0x47, 0x80, 0xb5, 0xf0, 0xb0, 0xb3, + 0xa8, 0x01, 0xf0, 0x0f, 0xfa, 0x8f, 0x48, 0x51, + 0x68, 0x06, 0x68, 0x45, 0x68, 0x84, 0x68, 0xc7, + 0x69, 0x00, 0x90, 0x00, 0x1c, 0x30, 0x1c, 0x29, + 0x1c, 0x3a, 0xf0, 0x00, 0xfa, 0x9b, 0x1c, 0x20, + 0xf0, 0x00, 0xfb, 0xb6, 0xa0, 0x4a, 0x22, 0x00, + 0x21, 0x11, 0xf0, 0x04, 0xff, 0xc5, 0x22, 0x0a, + 0x21, 0x11, 0x98, 0x1b, 0xf0, 0x05, 0xf8, 0x22, + 0x22, 0x14, 0x21, 0x11, 0x1c, 0x30, 0xf0, 0x05, + 0xf8, 0x1d, 0x22, 0x1e, 0x21, 0x11, 0x1c, 0x28, + 0xf0, 0x05, 0xf8, 0x18, 0x22, 0x28, 0x21, 0x11, + 0x1c, 0x20, 0xf0, 0x05, 0xf8, 0x13, 0x22, 0x32, + 0x21, 0x11, 0x1c, 0x38, 0xf0, 0x05, 0xf8, 0x0e, + 0x22, 0x3c, 0x21, 0x11, 0x98, 0x00, 0xf0, 0x05, + 0xf8, 0x09, 0xa0, 0x3b, 0x22, 0x00, 0x21, 0x13, + 0xf0, 0x04, 0xff, 0xa2, 0x22, 0x0a, 0x21, 0x13, + 0x4f, 0x39, 0x8d, 0x78, 0xf0, 0x04, 0xff, 0xfe, + 0xa0, 0x38, 0x22, 0x14, 0x21, 0x13, 0xf0, 0x04, + 0xff, 0x97, 0x22, 0x1e, 0x21, 0x13, 0x8d, 0xf8, + 0xf0, 0x04, 0xff, 0xf4, 0xa0, 0x35, 0x22, 0x00, + 0x21, 0x14, 0xf0, 0x04, 0xff, 0x8d, 0x22, 0x0a, + 0x21, 0x14, 0x8e, 0xb8, 0xf0, 0x04, 0xff, 0xea, + 0xa0, 0x32, 0x22, 0x14, 0x21, 0x14, 0xf0, 0x04, + 0xff, 0x83, 0x22, 0x1e, 0x21, 0x14, 0x8e, 0xf8, + 0xf0, 0x04, 0xff, 0xe0, 0xa0, 0x2f, 0x22, 0x28, + 0x21, 0x14, 0xf0, 0x04, 0xff, 0x79, 0x22, 0x32, + 0x21, 0x14, 0x48, 0x2f, 0x6f, 0xc0, 0xf0, 0x04, + 0xff, 0xd5, 0xa0, 0x2e, 0x22, 0x00, 0x21, 0x15, + 0xf0, 0x04, 0xff, 0x6e, 0x22, 0x0a, 0x21, 0x15, + 0x8d, 0x38, 0xf0, 0x04, 0xff, 0xcb, 0xa0, 0x2c, + 0x22, 0x14, 0x21, 0x15, 0xf0, 0x04, 0xff, 0x64, + 0x22, 0x1e, 0x21, 0x15, 0x8d, 0xb8, 0xf0, 0x04, + 0xff, 0xc1, 0xa0, 0x2a, 0x22, 0x00, 0x21, 0x10, + 0xf0, 0x04, 0xff, 0x5a, 0xf0, 0x0f, 0xfb, 0xd8, + 0x22, 0x0a, 0x21, 0x10, 0xf0, 0x04, 0xff, 0xb6, + 0xa0, 0x26, 0x22, 0x14, 0x21, 0x10, 0xf0, 0x04, + 0xff, 0x4f, 0x22, 0x1e, 0x21, 0x10, 0x27, 0x33, + 0x06, 0x7f, 0x6d, 0x78, 0xf0, 0x04, 0xff, 0xaa, + 0xa0, 0x22, 0x22, 0x28, 0x21, 0x10, 0xf0, 0x04, + 0xff, 0x43, 0xf0, 0x0f, 0xfb, 0xc1, 0x6d, 0x79, + 0x1a, 0x08, 0x22, 0x32, 0x21, 0x10, 0xf0, 0x04, + 0xff, 0x9d, 0xb0, 0x33, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x0c, 0x00, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x3a, 0x00, 0x00, + 0x72, 0x78, 0x6c, 0x65, 0x6e, 0x3a, 0x00, 0x00, + 0x2c, 0x00, 0x1f, 0xc0, 0x74, 0x78, 0x6c, 0x65, + 0x6e, 0x3a, 0x00, 0x00, 0x72, 0x78, 0x62, 0x75, + 0x66, 0x66, 0x3a, 0x00, 0x74, 0x78, 0x62, 0x75, + 0x66, 0x66, 0x3a, 0x00, 0x69, 0x66, 0x5f, 0x75, + 0x73, 0x65, 0x64, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x1f, 0x80, 0x72, 0x78, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x74, 0x78, 0x73, 0x74, 0x61, 0x74, 0x65, 0x3a, + 0x00, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x64, 0x63, + 0x75, 0x72, 0x3a, 0x00, 0x76, 0x69, 0x64, 0x62, + 0x75, 0x66, 0x3a, 0x00, 0x6f, 0x73, 0x64, 0x3a, + 0x00, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x06, 0x00, + 0x0e, 0x00, 0x06, 0x09, 0x0e, 0x09, 0xf0, 0x09, + 0xfe, 0xa1, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, + 0x06, 0x00, 0x0e, 0x00, 0x06, 0x09, 0x0e, 0x09, + 0x4b, 0x04, 0x68, 0x1b, 0x06, 0x1b, 0x0e, 0x1b, + 0x2b, 0x30, 0xd3, 0x01, 0xf0, 0x09, 0xfe, 0x92, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xc0, + 0xb5, 0xf0, 0x25, 0x00, 0x4e, 0x1a, 0x4c, 0x1b, + 0x4f, 0x1b, 0x68, 0x30, 0x68, 0x00, 0x00, 0x40, + 0x0a, 0x40, 0x02, 0x40, 0x21, 0x19, 0x06, 0x89, + 0x6a, 0x89, 0x4b, 0x18, 0x40, 0x19, 0x0a, 0x49, + 0x43, 0x08, 0x49, 0x17, 0x64, 0x08, 0xf0, 0x01, + 0xfc, 0x65, 0xf0, 0x02, 0xf9, 0x4d, 0x68, 0x38, + 0x30, 0x01, 0x60, 0x38, 0x48, 0x13, 0x88, 0x01, + 0x31, 0x01, 0x80, 0x01, 0x20, 0x0c, 0x68, 0x21, + 0xf0, 0x16, 0xfd, 0x6a, 0x29, 0x00, 0xd1, 0x01, + 0xf7, 0xff, 0xfe, 0xe0, 0x20, 0x32, 0x68, 0x21, + 0xf0, 0x16, 0xfd, 0x62, 0x4b, 0x0c, 0x42, 0x98, + 0xd9, 0x01, 0x49, 0x0c, 0x60, 0xf9, 0x42, 0x85, + 0xd0, 0xd3, 0x1c, 0x05, 0xf0, 0x00, 0xfe, 0x42, + 0x20, 0x00, 0x60, 0x38, 0xe7, 0xcd, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x40, 0x2e, 0x08, 0x05, 0xc0, + 0x2e, 0x08, 0x01, 0x88, 0x00, 0x03, 0xfe, 0x00, + 0x2c, 0x00, 0x1f, 0x80, 0x2c, 0x00, 0x1f, 0xc8, + 0x00, 0x00, 0x05, 0x46, 0x2e, 0x00, 0x19, 0xfb, + 0xb5, 0xf0, 0x27, 0x00, 0xb0, 0x94, 0x46, 0x68, + 0x4c, 0x2f, 0xcc, 0x6e, 0xc0, 0x6e, 0xcc, 0x6e, + 0xc0, 0x6e, 0x23, 0x28, 0x22, 0x41, 0x00, 0xd2, + 0x21, 0x00, 0x20, 0x01, 0xf0, 0x07, 0xfe, 0xd8, + 0x22, 0xff, 0x21, 0x64, 0x20, 0x01, 0x32, 0xf5, + 0xf0, 0x07, 0xff, 0x9a, 0x20, 0x00, 0x46, 0x69, + 0x5c, 0x09, 0x40, 0x41, 0x23, 0x35, 0x40, 0x59, + 0xaa, 0x0a, 0x54, 0x11, 0x30, 0x01, 0x28, 0x25, + 0xdb, 0xf5, 0x24, 0x00, 0xa9, 0x0a, 0x54, 0x0c, + 0x22, 0x00, 0x20, 0x01, 0x1c, 0x23, 0xf0, 0x08, + 0xf9, 0xf8, 0x4e, 0x1e, 0x4d, 0x1e, 0x4c, 0x1f, + 0xf0, 0x03, 0xff, 0x66, 0xf0, 0x03, 0xff, 0x64, + 0x28, 0x28, 0xd9, 0x10, 0x42, 0xb0, 0xd3, 0x0e, + 0x69, 0xe9, 0x08, 0xc9, 0xd3, 0x0b, 0x4b, 0x1a, + 0x18, 0xc1, 0x20, 0x1e, 0xf0, 0x16, 0xfd, 0x08, + 0x21, 0x64, 0x1d, 0xc2, 0x32, 0xff, 0x32, 0xee, + 0x20, 0x01, 0xf0, 0x07, 0xff, 0x6d, 0xf0, 0x01, + 0xfb, 0xed, 0xf0, 0x02, 0xf8, 0xd5, 0xf0, 0x03, + 0xff, 0x4b, 0x1c, 0x01, 0x20, 0x7d, 0x00, 0xc0, + 0xf0, 0x16, 0xfc, 0xf6, 0x1c, 0x01, 0x48, 0x0f, + 0x88, 0x02, 0x32, 0x01, 0x80, 0x02, 0x42, 0xb9, + 0xd0, 0xd6, 0x2f, 0x04, 0xd3, 0x06, 0x20, 0x01, + 0xf0, 0x07, 0xfe, 0x76, 0xb0, 0x14, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x0f, 0xf0, 0x00, + 0xfd, 0xcd, 0x20, 0x00, 0x60, 0x20, 0xe7, 0xc7, + 0x2e, 0x02, 0x56, 0xa0, 0x00, 0x00, 0x0b, 0xb8, + 0x72, 0x00, 0x01, 0x00, 0x2e, 0x08, 0x01, 0x88, + 0xff, 0xff, 0xf4, 0x48, 0x2c, 0x00, 0x1f, 0xc8, + 0xb5, 0x80, 0x27, 0x00, 0x48, 0x09, 0x81, 0x07, + 0x48, 0x09, 0x49, 0x0a, 0x60, 0xc8, 0xf0, 0x03, + 0xfd, 0x45, 0xf7, 0xff, 0xff, 0x85, 0xf0, 0x00, + 0xf8, 0xd5, 0xf0, 0x05, 0xfb, 0x90, 0xf7, 0xff, + 0xff, 0x37, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, + 0x2e, 0x00, 0x19, 0xe9, 0x2e, 0x08, 0x01, 0x88, + 0x47, 0x70, 0xb5, 0xf0, 0x4d, 0x29, 0x68, 0x01, + 0x31, 0x03, 0x10, 0x89, 0x1e, 0xcb, 0x68, 0x41, + 0x10, 0x89, 0x68, 0x82, 0x10, 0x92, 0x00, 0x89, + 0x30, 0x0c, 0x18, 0x0c, 0x21, 0x03, 0x05, 0x89, + 0x27, 0x35, 0x06, 0x7f, 0x60, 0x39, 0x49, 0x22, + 0x68, 0x0e, 0x08, 0xb6, 0x00, 0xb6, 0x60, 0x0e, + 0x21, 0x00, 0x2b, 0x00, 0xd9, 0x04, 0xc8, 0x40, + 0xc5, 0x40, 0x31, 0x01, 0x42, 0x99, 0xd3, 0xfa, + 0x23, 0x00, 0x49, 0x1c, 0x65, 0x8b, 0x20, 0x00, + 0x2a, 0x00, 0xd9, 0x04, 0xcc, 0x20, 0x64, 0x8d, + 0x30, 0x01, 0x42, 0x90, 0xd3, 0xfa, 0x48, 0x18, + 0x60, 0x03, 0x60, 0x3b, 0x66, 0x8b, 0x60, 0x3b, + 0x22, 0x01, 0x64, 0xca, 0x21, 0x00, 0x4a, 0x15, + 0x68, 0x03, 0x2b, 0x00, 0xd1, 0x05, 0x33, 0x01, + 0x2b, 0x64, 0xdb, 0xfc, 0x31, 0x01, 0x42, 0x91, + 0xdb, 0xf6, 0x48, 0x11, 0x68, 0x01, 0x23, 0x01, + 0x43, 0x19, 0x60, 0x01, 0x49, 0x0f, 0x20, 0x33, + 0x06, 0x40, 0x65, 0x41, 0x49, 0x0e, 0x65, 0x81, + 0x49, 0x0e, 0x66, 0x81, 0x39, 0x04, 0x66, 0x41, + 0x21, 0x03, 0x67, 0x01, 0x21, 0x00, 0x20, 0x0d, + 0xf0, 0x0e, 0xfe, 0x88, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x70, 0x6a, 0x00, 0x00, 0x80, + 0xcc, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x27, 0x10, + 0x6a, 0x00, 0x00, 0x10, 0xcc, 0x00, 0x0f, 0x84, + 0xcc, 0x00, 0x0f, 0x88, 0x98, 0x00, 0x0f, 0x88, + 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x08, + 0xf0, 0x0f, 0xfa, 0xc2, 0x48, 0x08, 0x21, 0x40, + 0xf0, 0x0e, 0xff, 0x92, 0x20, 0x01, 0x21, 0x35, + 0x06, 0x49, 0x61, 0x08, 0x20, 0x02, 0x43, 0xc0, + 0x49, 0x04, 0x63, 0x08, 0x20, 0x00, 0x21, 0x39, + 0x06, 0x49, 0x62, 0xc8, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x01, 0xc5, 0x30, 0x72, 0x00, 0x01, 0x00, + 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x0f, 0xd0, 0x10, + 0x29, 0x01, 0xd0, 0x12, 0x29, 0x02, 0xd0, 0x14, + 0x29, 0x03, 0xd1, 0x01, 0x49, 0x0c, 0x60, 0x01, + 0x68, 0x01, 0x68, 0x40, 0x43, 0x08, 0x22, 0x00, + 0x21, 0x1e, 0xf0, 0x0f, 0xfb, 0x01, 0xbc, 0x08, + 0x47, 0x18, 0x21, 0x01, 0x04, 0x49, 0x60, 0x01, + 0xe7, 0xf2, 0x21, 0x21, 0x03, 0x09, 0x60, 0x01, + 0xe7, 0xee, 0x21, 0x41, 0x03, 0x09, 0x60, 0x01, + 0xe7, 0xea, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x98, + 0x00, 0x08, 0x10, 0x08, 0xb5, 0x00, 0x1c, 0x01, + 0x48, 0x0b, 0xd0, 0x0e, 0x29, 0x01, 0xd0, 0x0f, + 0x29, 0x02, 0xd1, 0x01, 0x21, 0x04, 0x60, 0x41, + 0x68, 0x01, 0x68, 0x40, 0x43, 0x08, 0x22, 0x00, + 0x21, 0x1e, 0xf0, 0x0f, 0xfa, 0xdd, 0xbc, 0x08, + 0x47, 0x18, 0x21, 0x01, 0x60, 0x41, 0xe7, 0xf3, + 0x21, 0x02, 0x60, 0x41, 0xe7, 0xf0, 0x00, 0x00, + 0x2e, 0x08, 0x01, 0x98, 0xb5, 0x80, 0x4b, 0x09, + 0x22, 0x0a, 0x21, 0x0a, 0x20, 0x0b, 0xf0, 0x0f, + 0xfd, 0x11, 0x20, 0x0b, 0xf0, 0x0f, 0xfe, 0x33, + 0x4f, 0x05, 0x60, 0x38, 0x00, 0x80, 0xf0, 0x03, + 0xff, 0x21, 0x60, 0x78, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xc4, + 0x2e, 0x08, 0x01, 0xd4, 0xb5, 0xb0, 0x25, 0x00, + 0x1c, 0x0c, 0x1c, 0x07, 0x2a, 0x08, 0xd2, 0x30, + 0xa3, 0x01, 0x5c, 0x9b, 0x00, 0x5b, 0x44, 0x9f, + 0x2c, 0x29, 0x29, 0x03, 0x29, 0x29, 0x03, 0x29, + 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x4d, 0x23, 0x2d, + 0x01, 0x1b, 0x42, 0x9f, 0xd0, 0x13, 0x23, 0x0b, + 0x01, 0x9b, 0x42, 0x9f, 0xd0, 0x0f, 0x23, 0xff, + 0x33, 0xe1, 0x42, 0x9f, 0xd0, 0x0b, 0x23, 0xff, + 0x33, 0x61, 0x42, 0x9f, 0xd0, 0x07, 0x23, 0x21, + 0x01, 0x1b, 0x42, 0x9f, 0xd0, 0x03, 0x23, 0x11, + 0x01, 0x5b, 0x42, 0x9f, 0xd1, 0x08, 0x23, 0x09, + 0x01, 0x9b, 0x42, 0x9c, 0xd0, 0x09, 0x08, 0x5b, + 0x42, 0x9c, 0xd0, 0x06, 0x2c, 0xf0, 0xd0, 0x04, + 0x25, 0x01, 0xe0, 0x02, 0x20, 0x01, 0xf0, 0x00, + 0xf8, 0x27, 0x4f, 0x12, 0x6c, 0x78, 0x42, 0x85, + 0xd0, 0x1c, 0x1d, 0xfb, 0x33, 0x35, 0x2d, 0x00, + 0xd0, 0x12, 0x1f, 0xda, 0x3a, 0x0d, 0x21, 0x03, + 0x1d, 0x10, 0xb4, 0x07, 0x22, 0x0b, 0xb4, 0x04, + 0x1c, 0x19, 0x23, 0x00, 0x22, 0x00, 0x20, 0x00, + 0xf0, 0x0a, 0xf9, 0x0a, 0x6a, 0xb8, 0x1c, 0x29, + 0xb0, 0x04, 0xf0, 0x0b, 0xfa, 0x59, 0xe0, 0x04, + 0x21, 0x00, 0x6a, 0xb8, 0x1c, 0x1a, 0xf0, 0x0a, + 0xfc, 0x0f, 0x64, 0x7d, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x98, + 0xb5, 0xf0, 0x1c, 0x07, 0xb0, 0x81, 0x4d, 0x56, + 0x1d, 0xee, 0x36, 0x19, 0x79, 0x30, 0x42, 0x87, + 0xd1, 0x03, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x24, 0x00, 0x6c, 0x68, 0x28, 0x00, + 0xd0, 0x05, 0x64, 0x6c, 0x4a, 0x4f, 0x21, 0x00, + 0x6a, 0xa8, 0xf0, 0x0a, 0xfb, 0xf1, 0x71, 0x37, + 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x0e, 0xfd, 0x82, + 0x20, 0x00, 0xf0, 0x0c, 0xf8, 0x83, 0x20, 0x1f, + 0xf0, 0x09, 0xf9, 0x18, 0x26, 0x03, 0x02, 0x76, + 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, 0x20, 0x1f, + 0x1c, 0x33, 0xf0, 0x08, 0xff, 0x8f, 0x20, 0x1e, + 0xf0, 0x09, 0xf9, 0xd6, 0x22, 0x01, 0x02, 0xd2, + 0x21, 0x02, 0x20, 0x1e, 0x1c, 0x33, 0xf0, 0x08, + 0xff, 0x85, 0x26, 0x1c, 0x1c, 0x39, 0x48, 0x3e, + 0x27, 0x0c, 0x29, 0x06, 0xd2, 0x07, 0xa3, 0x02, + 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x03, 0x12, 0x03, 0x21, 0x12, 0x30, 0x48, 0x39, + 0x21, 0x40, 0xf0, 0x0e, 0xfe, 0x81, 0xab, 0x00, + 0x70, 0x1c, 0x20, 0x08, 0x70, 0x58, 0x70, 0x9e, + 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, 0xf0, 0x0f, + 0xf9, 0xa3, 0xe0, 0x2b, 0x21, 0x1f, 0x43, 0xc9, + 0xf0, 0x0e, 0xfe, 0x72, 0xab, 0x00, 0x70, 0x1c, + 0x70, 0x5c, 0x70, 0x9f, 0x70, 0xdc, 0x22, 0x00, + 0x21, 0x00, 0x20, 0x00, 0xf0, 0x0f, 0xf9, 0x94, + 0xe0, 0x1c, 0x21, 0x40, 0xf0, 0x0e, 0xfe, 0x64, + 0xab, 0x00, 0x70, 0x1c, 0x20, 0x10, 0x70, 0x58, + 0x70, 0x9e, 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, + 0x20, 0x08, 0xf0, 0x0f, 0xf9, 0x85, 0xe0, 0x0d, + 0x21, 0x1f, 0x43, 0xc9, 0xf0, 0x0e, 0xfe, 0x54, + 0xab, 0x00, 0x70, 0x1c, 0x70, 0x5c, 0x70, 0x9f, + 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, 0x20, 0x08, + 0xf0, 0x0f, 0xf9, 0x76, 0x20, 0x01, 0x21, 0x35, + 0x06, 0x49, 0x61, 0x08, 0x20, 0x02, 0x43, 0xc0, + 0x49, 0x19, 0x63, 0x08, 0x20, 0x39, 0x06, 0x40, + 0x62, 0xc4, 0xcd, 0x03, 0x43, 0x08, 0x22, 0x00, + 0x21, 0x1e, 0xf0, 0x0f, 0xf9, 0xcd, 0x48, 0x15, + 0xf0, 0x0b, 0xff, 0x8e, 0x20, 0x00, 0xf0, 0x0b, + 0xff, 0xff, 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x68, + 0x20, 0x00, 0xf0, 0x03, 0xfb, 0x15, 0x20, 0x01, + 0xf0, 0x0c, 0xf8, 0x04, 0x4a, 0x0e, 0xb4, 0x04, + 0x1c, 0x13, 0x3a, 0x01, 0x49, 0x0d, 0x1e, 0xc8, + 0xf7, 0xfe, 0xfb, 0x5a, 0x21, 0x00, 0x20, 0x0d, + 0xb0, 0x01, 0xf0, 0x0e, 0xfc, 0xf3, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xd4, + 0x2e, 0x02, 0x0b, 0x9c, 0x2e, 0x01, 0xc5, 0x30, + 0x72, 0x00, 0x01, 0x00, 0x00, 0x80, 0x10, 0x80, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, + 0xb5, 0xb0, 0x1c, 0x07, 0x4c, 0x10, 0x6a, 0x20, + 0x42, 0x87, 0xd0, 0x19, 0x20, 0x00, 0x2f, 0x03, + 0xd1, 0x02, 0x21, 0x01, 0x61, 0x61, 0xe0, 0x00, + 0x61, 0x60, 0x21, 0x02, 0x4d, 0x0b, 0x60, 0x29, + 0x71, 0x28, 0x71, 0x68, 0x22, 0x01, 0xb4, 0x04, + 0x7a, 0x23, 0x7c, 0x22, 0x7b, 0x21, 0x20, 0x00, + 0xf0, 0x0e, 0xff, 0xc0, 0x69, 0x61, 0x1c, 0x28, + 0xb0, 0x01, 0xf0, 0x10, 0xf8, 0x67, 0x62, 0x27, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xb0, + 0xb5, 0x00, 0x22, 0x02, 0x49, 0x09, 0x60, 0x0a, + 0x22, 0x00, 0x71, 0x0a, 0x71, 0x4a, 0x39, 0x48, + 0x28, 0x00, 0xd0, 0x08, 0x28, 0x01, 0xd1, 0x00, + 0x72, 0x08, 0x6a, 0x08, 0x62, 0x0a, 0xf7, 0xff, + 0xff, 0xc7, 0xbc, 0x08, 0x47, 0x18, 0x72, 0x0a, + 0xe7, 0xf7, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xe0, + 0xb5, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x4f, 0x0b, + 0xd0, 0x02, 0x20, 0x00, 0x73, 0x38, 0xe0, 0x01, + 0x20, 0x01, 0x73, 0x38, 0x22, 0x01, 0xb4, 0x04, + 0x7a, 0x3b, 0x7c, 0x3a, 0x7b, 0x39, 0x20, 0x00, + 0xf0, 0x0e, 0xff, 0x88, 0x69, 0x79, 0xb0, 0x01, + 0x48, 0x03, 0xf0, 0x10, 0xf8, 0x2f, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x01, 0x98, + 0x2e, 0x08, 0x01, 0xb0, 0xb5, 0x80, 0x06, 0x00, + 0x0e, 0x00, 0x1c, 0x01, 0x4f, 0x08, 0x74, 0x39, + 0x22, 0x01, 0xb4, 0x04, 0x7a, 0x3b, 0x7b, 0x39, + 0x1c, 0x02, 0x20, 0x00, 0xf0, 0x0e, 0xff, 0x6e, + 0x69, 0x79, 0xb0, 0x01, 0x48, 0x03, 0xf0, 0x10, + 0xf8, 0x15, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xb0, + 0xb4, 0xb0, 0x21, 0x00, 0x48, 0x08, 0x60, 0x01, + 0x20, 0x00, 0x4c, 0x08, 0x4f, 0x08, 0x4b, 0x09, + 0x4a, 0x09, 0x00, 0x85, 0x51, 0x61, 0x54, 0x39, + 0x54, 0x19, 0x54, 0x11, 0x30, 0x01, 0x28, 0x20, + 0xdb, 0xf7, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x01, 0xe8, 0x2e, 0x08, 0x43, 0x90, + 0x2e, 0x08, 0x44, 0x10, 0x2e, 0x08, 0x44, 0x50, + 0x2e, 0x08, 0x44, 0x30, 0x06, 0x00, 0x0e, 0x00, + 0x21, 0x01, 0x40, 0x81, 0x43, 0xca, 0x49, 0x05, + 0x68, 0x0b, 0x40, 0x1a, 0x60, 0x0a, 0x21, 0x00, + 0x00, 0x82, 0x4b, 0x03, 0x50, 0x99, 0x4a, 0x03, + 0x54, 0x11, 0x47, 0x70, 0x2e, 0x08, 0x01, 0xe8, + 0x2e, 0x08, 0x43, 0x90, 0x2e, 0x08, 0x44, 0x10, + 0xb5, 0xf0, 0xb0, 0x84, 0x4f, 0x36, 0x68, 0x38, + 0x1d, 0xc1, 0x31, 0x0d, 0x20, 0x00, 0xf0, 0x23, + 0xf8, 0x5d, 0x1c, 0x04, 0x68, 0x38, 0x1d, 0xc1, + 0x31, 0x05, 0x20, 0x00, 0xf0, 0x23, 0xf8, 0x56, + 0x1c, 0x05, 0x68, 0x38, 0x1d, 0xc1, 0x31, 0x09, + 0x20, 0x00, 0xf0, 0x23, 0xf8, 0x4f, 0x43, 0x2c, + 0x1c, 0x20, 0x4c, 0x2c, 0x68, 0x21, 0x43, 0x08, + 0x27, 0x00, 0x60, 0x20, 0x1c, 0x05, 0xd0, 0x4a, + 0x48, 0x29, 0x90, 0x03, 0x48, 0x29, 0x90, 0x02, + 0x4a, 0x29, 0x92, 0x01, 0x4e, 0x29, 0x08, 0x68, + 0xd3, 0x3c, 0x98, 0x03, 0x5d, 0xc0, 0x28, 0x00, + 0xd0, 0x32, 0x98, 0x02, 0x5d, 0xc0, 0x28, 0x00, + 0xd0, 0x2a, 0x46, 0x68, 0x1c, 0x39, 0xf0, 0x10, + 0xfc, 0x27, 0xa8, 0x00, 0x78, 0x00, 0x28, 0x01, + 0xd1, 0x1b, 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, + 0x5d, 0xf0, 0x28, 0x00, 0xd1, 0x06, 0x20, 0xff, + 0x55, 0xf0, 0x21, 0x00, 0x00, 0xb8, 0x9a, 0x01, + 0x50, 0x11, 0xe0, 0x1f, 0x20, 0x02, 0x1c, 0x39, + 0xf0, 0x00, 0xf8, 0x8e, 0x28, 0x00, 0xd1, 0x19, + 0x21, 0x00, 0x55, 0xf1, 0x20, 0x01, 0x40, 0xb8, + 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, + 0xe0, 0x10, 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, + 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, 0xe0, 0x09, + 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, 0xe0, 0x05, + 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, 0x68, 0x21, + 0x40, 0x08, 0x60, 0x20, 0x1c, 0x78, 0x06, 0x07, + 0x0e, 0x3f, 0x08, 0x6d, 0xd1, 0xbb, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x14, 0x2e, 0x08, 0x01, 0xe8, + 0x2e, 0x08, 0x44, 0x30, 0x2e, 0x08, 0x44, 0x50, + 0x2e, 0x08, 0x43, 0x90, 0x2e, 0x08, 0x44, 0x10, + 0xb5, 0xf0, 0x27, 0x00, 0xb0, 0x85, 0x4c, 0x26, + 0x68, 0x25, 0x2d, 0x00, 0xd0, 0x44, 0x4e, 0x25, + 0x48, 0x25, 0x90, 0x04, 0x49, 0x25, 0x91, 0x03, + 0x4a, 0x25, 0x92, 0x02, 0x48, 0x25, 0x90, 0x01, + 0x08, 0x68, 0xd3, 0x34, 0x5d, 0xf0, 0x28, 0x00, + 0xd0, 0x2b, 0x98, 0x04, 0x5d, 0xc0, 0x28, 0x00, + 0xd0, 0x2d, 0x46, 0x68, 0x1c, 0x39, 0xf0, 0x10, + 0xfb, 0xc3, 0xa8, 0x00, 0x78, 0x00, 0x28, 0x01, + 0xd1, 0x18, 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, + 0x00, 0xb8, 0x99, 0x03, 0x58, 0x09, 0x69, 0x09, + 0x9a, 0x02, 0x50, 0x11, 0x20, 0x02, 0x1c, 0x39, + 0xf0, 0x00, 0xf8, 0x2e, 0x28, 0x00, 0xd1, 0x16, + 0x21, 0x00, 0x98, 0x01, 0x55, 0xc1, 0x20, 0x01, + 0x40, 0xb8, 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, + 0x60, 0x20, 0xe0, 0x0c, 0x20, 0x01, 0x40, 0xb8, + 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, + 0xe0, 0x05, 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, + 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, 0x1c, 0x78, + 0x06, 0x07, 0x0e, 0x3f, 0x08, 0x6d, 0xd1, 0xc3, + 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x01, 0xe8, 0x2e, 0x08, 0x44, 0x30, + 0x2e, 0x08, 0x44, 0x50, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x43, 0x90, 0x2e, 0x08, 0x44, 0x10, + 0xb4, 0xf0, 0x06, 0x02, 0x0e, 0x12, 0xb0, 0x82, + 0x92, 0x00, 0x06, 0x0c, 0x0e, 0x24, 0x00, 0xa0, + 0xb0, 0x81, 0x49, 0x31, 0x58, 0x09, 0x91, 0x00, + 0x29, 0x00, 0xd1, 0x03, 0x20, 0xb0, 0xb0, 0x03, + 0xbc, 0xf0, 0x47, 0x70, 0x49, 0x2d, 0x68, 0x09, + 0x18, 0x47, 0x00, 0xe1, 0x1b, 0x09, 0x00, 0x89, + 0x4a, 0x2b, 0x68, 0x12, 0x18, 0x89, 0x9a, 0x01, + 0x4d, 0x2a, 0x4b, 0x2b, 0x93, 0x02, 0x2a, 0x01, + 0xd0, 0x28, 0x2a, 0x02, 0xd1, 0x44, 0x4b, 0x29, + 0x58, 0x1a, 0x2a, 0x00, 0xd1, 0x03, 0x20, 0xff, + 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, 0x60, 0x4a, + 0x22, 0x00, 0x50, 0x1a, 0x5c, 0xa8, 0x42, 0xa0, + 0xd1, 0x06, 0x00, 0x90, 0x9b, 0x02, 0x58, 0x18, + 0x78, 0x46, 0x23, 0x80, 0x43, 0x9e, 0x70, 0x46, + 0x1c, 0x50, 0x06, 0x02, 0x0e, 0x12, 0x2a, 0x20, + 0xdb, 0xf0, 0x88, 0x08, 0x4b, 0x1c, 0x40, 0x18, + 0x80, 0x08, 0x98, 0x00, 0x9a, 0x01, 0x70, 0xc2, + 0x68, 0x38, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, + 0x60, 0x38, 0xe0, 0x19, 0x68, 0x38, 0x4b, 0x17, + 0x40, 0x18, 0x60, 0x38, 0x98, 0x00, 0x9a, 0x01, + 0x70, 0xc2, 0x20, 0x00, 0x60, 0x88, 0x70, 0xc8, + 0x60, 0xc8, 0x5c, 0x29, 0x42, 0xa1, 0xd1, 0x06, + 0x00, 0x81, 0x9b, 0x02, 0x58, 0x59, 0x78, 0x4a, + 0x23, 0x80, 0x43, 0x1a, 0x70, 0x4a, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf0, + 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, + 0x20, 0xbc, 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, + 0x2e, 0x08, 0x5e, 0x64, 0x2e, 0x08, 0x5d, 0xd4, + 0x2e, 0x08, 0x5d, 0xcc, 0x2e, 0x08, 0x5f, 0xac, + 0x2e, 0x08, 0x5e, 0xec, 0x2e, 0x08, 0x43, 0x90, + 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, + 0xb4, 0xf0, 0x78, 0x43, 0x00, 0x9e, 0x49, 0x32, + 0x59, 0x8c, 0x88, 0x42, 0x68, 0x87, 0x68, 0x40, + 0x1d, 0xf9, 0x31, 0xb9, 0x1a, 0x09, 0x42, 0x91, + 0xda, 0x3d, 0x25, 0x00, 0x1c, 0x18, 0x00, 0xdb, + 0x1a, 0x18, 0x00, 0x80, 0x4b, 0x2b, 0x68, 0x1b, + 0x18, 0xc0, 0x78, 0x80, 0x06, 0xc0, 0x0e, 0xc0, + 0x28, 0x12, 0xd1, 0x02, 0x29, 0x0e, 0xda, 0x00, + 0x25, 0x01, 0x2a, 0x00, 0xdd, 0x2b, 0x42, 0x8a, + 0xdd, 0x05, 0x68, 0x3f, 0x2f, 0x00, 0xd1, 0x02, + 0x20, 0xba, 0xbc, 0xf0, 0x47, 0x70, 0x1a, 0x52, + 0x79, 0xb9, 0x23, 0xc0, 0x1a, 0x59, 0x79, 0xfb, + 0x1d, 0x38, 0x08, 0x5b, 0xd3, 0x01, 0x22, 0x00, + 0xe0, 0x16, 0x2d, 0x00, 0xd0, 0x14, 0x42, 0x91, + 0xdb, 0x01, 0x31, 0x01, 0xe0, 0x10, 0x1c, 0x4b, + 0x42, 0x93, 0xd1, 0x0d, 0x78, 0x85, 0x2d, 0x09, + 0xdd, 0x06, 0x79, 0x05, 0x78, 0x80, 0x35, 0x09, + 0x42, 0x85, 0xd0, 0x05, 0x1c, 0x19, 0xe0, 0x03, + 0x78, 0x80, 0x28, 0x09, 0xd1, 0x00, 0x1c, 0x19, + 0x25, 0x00, 0x2a, 0x00, 0xdc, 0xd3, 0x69, 0x21, + 0x20, 0x00, 0x1c, 0x0a, 0x42, 0xb9, 0xd0, 0xd4, + 0x68, 0x0b, 0x42, 0xbb, 0xd0, 0x08, 0x68, 0x09, + 0x29, 0x00, 0xd1, 0x02, 0x20, 0xba, 0xbc, 0xf0, + 0x47, 0x70, 0x68, 0x0b, 0x42, 0xbb, 0xd1, 0xf6, + 0x4b, 0x07, 0x51, 0x9a, 0x60, 0x08, 0x69, 0xa2, + 0x69, 0x23, 0x60, 0x13, 0x61, 0xa1, 0x61, 0x27, + 0x61, 0x67, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x64, 0x2e, 0x08, 0x5d, 0xcc, + 0x2e, 0x08, 0x43, 0x90, 0xb5, 0xf0, 0x06, 0x07, + 0x0e, 0x3f, 0x04, 0x0c, 0x0c, 0x24, 0x06, 0x15, + 0x0e, 0x2d, 0x00, 0xf8, 0x49, 0x2c, 0x68, 0x09, + 0x18, 0x40, 0x00, 0xb9, 0x4a, 0x2b, 0x68, 0x12, + 0x18, 0x8a, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, + 0x4b, 0x29, 0x68, 0x1b, 0x18, 0xc9, 0x68, 0x16, + 0x23, 0x01, 0x03, 0x5b, 0x43, 0x9e, 0x60, 0x16, + 0x68, 0x06, 0x23, 0x03, 0x03, 0x9b, 0x43, 0x9e, + 0x60, 0x06, 0x4b, 0x24, 0x42, 0x9c, 0xd0, 0x36, + 0x68, 0x06, 0x23, 0x21, 0x43, 0x9e, 0x60, 0x06, + 0x68, 0x16, 0x23, 0x07, 0x03, 0x5b, 0x40, 0x33, + 0x60, 0x13, 0x23, 0x07, 0x03, 0x5b, 0x43, 0x9c, + 0x1c, 0x23, 0x68, 0x14, 0x43, 0x23, 0x60, 0x13, + 0x22, 0x00, 0x75, 0x0a, 0x88, 0x0c, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x9c, 0x80, 0x0c, 0x07, 0xab, + 0x0f, 0x9b, 0x2b, 0x01, 0xd1, 0x04, 0x88, 0x0c, + 0x23, 0x10, 0x43, 0x23, 0x80, 0x0b, 0xe0, 0x03, + 0x88, 0x0c, 0x23, 0x10, 0x43, 0x9c, 0x80, 0x0c, + 0x68, 0x01, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x19, + 0x60, 0x01, 0x00, 0xf9, 0x4b, 0x0e, 0x68, 0x1b, + 0x18, 0xc9, 0x60, 0x4a, 0x68, 0x01, 0x4b, 0x0d, + 0x43, 0x19, 0x60, 0x01, 0x68, 0x01, 0x60, 0x01, + 0x21, 0x0f, 0x60, 0x41, 0xe0, 0x04, 0x1c, 0x38, + 0xf0, 0x0d, 0xfb, 0xdc, 0x28, 0x00, 0xd1, 0x00, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x5d, 0xd8, 0x2e, 0x08, 0x5d, 0xd4, + 0x2e, 0x08, 0x5d, 0xcc, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x5d, 0xdc, 0x00, 0x00, 0x20, 0xa0, + 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x07, + 0xb0, 0x8a, 0x48, 0x58, 0x29, 0x00, 0xd1, 0x0a, + 0x4d, 0x57, 0x69, 0x01, 0x91, 0x04, 0x49, 0x57, + 0x91, 0x03, 0x69, 0x41, 0x91, 0x02, 0x6a, 0x00, + 0x1e, 0x43, 0x93, 0x01, 0xe0, 0x0b, 0x29, 0x20, + 0xd1, 0x15, 0x4d, 0x53, 0x69, 0x81, 0x91, 0x04, + 0x49, 0x52, 0x91, 0x03, 0x69, 0xc1, 0x91, 0x02, + 0x6a, 0x40, 0x1e, 0x43, 0x93, 0x01, 0x24, 0x00, + 0x4b, 0x4f, 0x93, 0x09, 0x4a, 0x4f, 0x92, 0x08, + 0x4b, 0x4f, 0x93, 0x07, 0x4e, 0x4f, 0x96, 0x06, + 0x4a, 0x4f, 0x92, 0x05, 0xe0, 0x7a, 0x20, 0xb3, + 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x98, 0x04, 0x00, 0x80, 0x19, 0x40, 0x23, 0x01, + 0x02, 0x9b, 0x18, 0xc0, 0x68, 0x01, 0x98, 0x04, + 0x00, 0x80, 0x58, 0x28, 0x9a, 0x04, 0x18, 0xaa, + 0x00, 0x5b, 0x18, 0xd2, 0x78, 0x12, 0x92, 0x00, + 0x22, 0x00, 0x9b, 0x04, 0x18, 0xee, 0x23, 0x01, + 0x02, 0xdb, 0x18, 0xf3, 0x70, 0x1a, 0x9a, 0x04, + 0x32, 0x01, 0x92, 0x04, 0x9b, 0x01, 0x40, 0x1a, + 0x92, 0x04, 0x29, 0x00, 0xd0, 0x56, 0xb0, 0x82, + 0x91, 0x01, 0x21, 0x01, 0x9a, 0x02, 0x2a, 0x80, + 0xd1, 0x19, 0x22, 0x00, 0x9b, 0x01, 0x40, 0x0b, + 0xd0, 0x10, 0x9b, 0x0b, 0x5c, 0x9b, 0x2b, 0xff, + 0xd0, 0x0c, 0x9b, 0x0b, 0x5c, 0x9b, 0x93, 0x00, + 0x00, 0x91, 0x9a, 0x0a, 0x58, 0x52, 0x00, 0xa1, + 0x19, 0xc9, 0x61, 0x0a, 0x1c, 0x61, 0x06, 0x0c, + 0x0e, 0x24, 0xe0, 0x1c, 0x00, 0x49, 0x32, 0x01, + 0x2a, 0x10, 0xd3, 0xe7, 0xe0, 0x17, 0x22, 0x00, + 0x9b, 0x01, 0x40, 0x0b, 0xd0, 0x0f, 0x9b, 0x09, + 0x5c, 0x9b, 0x2b, 0xff, 0xd0, 0x0b, 0x93, 0x00, + 0x00, 0x93, 0x9e, 0x08, 0x58, 0xf6, 0x00, 0xa3, + 0x19, 0xdb, 0x61, 0x1e, 0x28, 0x00, 0xd0, 0x02, + 0x1c, 0x63, 0x06, 0x1c, 0x0e, 0x24, 0x00, 0x49, + 0x32, 0x01, 0x2a, 0x20, 0xd3, 0xe8, 0x2c, 0x00, + 0xd0, 0x1b, 0x9b, 0x00, 0x70, 0x7b, 0x60, 0x78, + 0x9b, 0x00, 0x00, 0x99, 0x9a, 0x07, 0x58, 0x52, + 0x69, 0x51, 0xe0, 0x07, 0x68, 0x09, 0x29, 0x00, + 0xd1, 0x04, 0x20, 0xba, 0xb0, 0x0c, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x42, 0x88, 0xd3, 0xf5, + 0x1d, 0xcb, 0x33, 0xb9, 0x42, 0x83, 0xd3, 0xf1, + 0x60, 0xb9, 0x61, 0x51, 0x1c, 0x38, 0xf0, 0x0d, + 0xfb, 0xe6, 0xb0, 0x02, 0x98, 0x04, 0x99, 0x02, + 0x42, 0x88, 0xd0, 0x01, 0x2c, 0x00, 0xd0, 0x83, + 0x70, 0x3c, 0x98, 0x04, 0x99, 0x03, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x9e, 0x00, 0x04, 0x80, + 0x2e, 0x08, 0x60, 0x98, 0x9e, 0x00, 0x04, 0x90, + 0x2e, 0x08, 0x69, 0x98, 0x9e, 0x00, 0x04, 0x98, + 0x2e, 0x08, 0x5f, 0xcc, 0x2e, 0x08, 0x5f, 0x6c, + 0x2e, 0x08, 0x5f, 0xac, 0x2e, 0x08, 0x5e, 0xec, + 0x2e, 0x08, 0x5e, 0x64, 0xb5, 0x00, 0x20, 0xff, + 0x49, 0x03, 0x60, 0x08, 0x20, 0x01, 0x05, 0x00, + 0xf0, 0x19, 0xfe, 0x3e, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x01, 0xe8, 0xb5, 0xf0, 0x06, 0x07, + 0x0e, 0x3f, 0x06, 0x0c, 0x0e, 0x24, 0x20, 0x10, + 0x2f, 0x1f, 0xdc, 0x2c, 0x2c, 0x1f, 0xdc, 0x2a, + 0x1c, 0x39, 0x43, 0x21, 0x08, 0x49, 0xd2, 0x26, + 0x49, 0x14, 0x1c, 0x38, 0xf0, 0x19, 0xfe, 0x3a, + 0x26, 0x01, 0x1c, 0x35, 0x40, 0xbd, 0x1c, 0x30, + 0x40, 0xa0, 0x1c, 0x04, 0x43, 0x28, 0xf0, 0x19, + 0xfe, 0x24, 0xf0, 0x19, 0xfe, 0x27, 0x43, 0xa8, + 0xf0, 0x19, 0xfe, 0x28, 0xf0, 0x19, 0xfe, 0x22, + 0x43, 0xa0, 0xf0, 0x19, 0xfe, 0x23, 0x1c, 0x38, + 0xf0, 0x0f, 0xfd, 0x28, 0x1c, 0x04, 0xd1, 0x07, + 0x21, 0x03, 0x05, 0x09, 0x20, 0x00, 0x1c, 0x3a, + 0x1c, 0x33, 0xf0, 0x10, 0xfb, 0xd9, 0x1c, 0x04, + 0xf7, 0xff, 0xfc, 0x92, 0x1c, 0x20, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x00, 0x2c, 0xa3, + 0xb5, 0xf0, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x0d, + 0x0c, 0x2d, 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x05, + 0x06, 0x38, 0x0e, 0x00, 0x22, 0x00, 0x21, 0x00, + 0xb4, 0x07, 0x21, 0x10, 0x1c, 0x1a, 0xb4, 0x06, + 0x23, 0x10, 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x32, + 0xf0, 0x00, 0xf8, 0x54, 0xb0, 0x05, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x04, + 0x0e, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x06, 0x16, + 0x0e, 0x36, 0x9f, 0x05, 0x06, 0x38, 0x0e, 0x00, + 0x22, 0x00, 0x21, 0x00, 0xb4, 0x07, 0x21, 0x18, + 0x1c, 0x1a, 0xb4, 0x06, 0x23, 0x11, 0x1c, 0x20, + 0x1c, 0x29, 0x1c, 0x32, 0xf0, 0x00, 0xf8, 0x3a, + 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xf0, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x0d, + 0x0c, 0x2d, 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x05, + 0x06, 0x38, 0x0e, 0x00, 0x22, 0x00, 0x21, 0x00, + 0xb4, 0x07, 0x21, 0x20, 0x1c, 0x1a, 0xb4, 0x06, + 0x23, 0x51, 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x32, + 0xf0, 0x00, 0xf8, 0x20, 0xb0, 0x05, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x06, 0x03, + 0x0e, 0x1b, 0x04, 0x0d, 0x0c, 0x2d, 0x06, 0x16, + 0x0e, 0x36, 0x9c, 0x09, 0x9f, 0x0a, 0x06, 0x20, + 0x0e, 0x00, 0x22, 0x00, 0x1c, 0x39, 0xb4, 0x07, + 0x21, 0x10, 0x9a, 0x06, 0xb4, 0x06, 0x1c, 0x18, + 0x23, 0x62, 0x1c, 0x29, 0x1c, 0x32, 0xf0, 0x00, + 0xf8, 0x05, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x9e, 0x09, + 0x9f, 0x0b, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x09, + 0x0c, 0x09, 0xb0, 0x88, 0x91, 0x00, 0x06, 0x15, + 0x0e, 0x2d, 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, + 0x06, 0x32, 0x0e, 0x12, 0x92, 0x02, 0x06, 0x38, + 0x0e, 0x00, 0x90, 0x03, 0xb0, 0x82, 0xf0, 0x19, + 0xfd, 0x89, 0x0d, 0x40, 0xd2, 0x09, 0x20, 0xff, + 0x90, 0x00, 0xf0, 0x19, 0xfd, 0x83, 0x23, 0x01, + 0x05, 0x1b, 0x43, 0x18, 0xf0, 0x19, 0xfd, 0x82, + 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x03, + 0x08, 0x40, 0xd3, 0x02, 0x22, 0x12, 0x92, 0x01, + 0xe0, 0x01, 0x22, 0x11, 0x92, 0x01, 0x22, 0x01, + 0x1c, 0x11, 0x40, 0xa9, 0x4b, 0x5f, 0x1c, 0x0f, + 0x68, 0x18, 0x40, 0x07, 0xd0, 0x01, 0x27, 0x11, + 0xe0, 0xa2, 0x27, 0x00, 0x43, 0x08, 0x60, 0x18, + 0x23, 0x1c, 0x98, 0x05, 0x40, 0x18, 0x28, 0x1c, + 0xd1, 0x06, 0x21, 0x01, 0x20, 0x7d, 0x01, 0x00, + 0xf0, 0x10, 0xf8, 0x86, 0x1c, 0x06, 0xe0, 0x0d, + 0x98, 0x05, 0x08, 0x40, 0xd3, 0x05, 0x21, 0x01, + 0x20, 0xc8, 0xf0, 0x10, 0xf8, 0x7d, 0x1c, 0x06, + 0xe0, 0x04, 0x21, 0x01, 0x20, 0x3c, 0xf0, 0x10, + 0xf8, 0x77, 0x1c, 0x06, 0x20, 0x34, 0xf0, 0x03, + 0xf9, 0x4d, 0x00, 0xaa, 0x92, 0x09, 0x49, 0x4c, + 0x91, 0x08, 0x50, 0x88, 0x00, 0xa1, 0x91, 0x07, + 0x48, 0x4a, 0x90, 0x06, 0x58, 0x40, 0x28, 0x00, + 0xd1, 0x05, 0x00, 0xb0, 0xf0, 0x03, 0xf9, 0x3e, + 0x99, 0x07, 0x9a, 0x06, 0x50, 0x50, 0x98, 0x09, + 0x99, 0x08, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x04, + 0x98, 0x06, 0x99, 0x07, 0x58, 0x40, 0x28, 0x00, + 0xd1, 0x01, 0x27, 0x13, 0xe0, 0x64, 0x99, 0x07, + 0x4a, 0x3f, 0x58, 0x51, 0x29, 0x00, 0xd1, 0x3a, + 0x9a, 0x01, 0xb4, 0x04, 0x23, 0x40, 0x1c, 0x31, + 0x1c, 0x22, 0xf0, 0x10, 0xf8, 0xd5, 0xb0, 0x01, + 0x1c, 0x07, 0xd1, 0x17, 0x23, 0x03, 0x02, 0x5b, + 0x22, 0x01, 0x02, 0xd2, 0x21, 0x01, 0x1c, 0x20, + 0xf0, 0x08, 0xfa, 0x18, 0x22, 0x00, 0xb4, 0x04, + 0x22, 0x02, 0x99, 0x03, 0x9b, 0x02, 0x1c, 0x20, + 0xf0, 0x08, 0xf8, 0x4c, 0xb0, 0x01, 0x1c, 0x07, + 0xd1, 0x04, 0x22, 0x01, 0x48, 0x2f, 0x55, 0x02, + 0x48, 0x2f, 0x55, 0x02, 0x2f, 0x00, 0xd1, 0x16, + 0x98, 0x16, 0x28, 0x00, 0xd0, 0x13, 0x21, 0x02, + 0x98, 0x16, 0xf0, 0x10, 0xf8, 0x25, 0x1c, 0x07, + 0x00, 0x80, 0xf0, 0x03, 0xf8, 0xfb, 0x99, 0x07, + 0x4a, 0x28, 0x50, 0x50, 0x28, 0x00, 0xd0, 0x05, + 0x1c, 0x39, 0x1c, 0x22, 0xf0, 0x10, 0xf8, 0x39, + 0x1c, 0x07, 0xe0, 0x00, 0x27, 0x13, 0x2f, 0x00, + 0xd1, 0x22, 0x98, 0x03, 0x09, 0x80, 0xd3, 0x06, + 0x20, 0x5c, 0xf0, 0x03, 0xf8, 0xe7, 0x28, 0x00, + 0xd1, 0x02, 0x27, 0x13, 0xe0, 0x00, 0x20, 0x00, + 0x1c, 0x02, 0x98, 0x05, 0x99, 0x17, 0xb4, 0x07, + 0x1c, 0x2a, 0xb4, 0x04, 0x98, 0x0d, 0x99, 0x0c, + 0x58, 0x08, 0x99, 0x18, 0x9a, 0x08, 0x9b, 0x07, + 0xf0, 0x00, 0xf9, 0x1c, 0xb0, 0x04, 0x2f, 0x00, + 0xd1, 0x06, 0x98, 0x09, 0x99, 0x08, 0x58, 0x08, + 0x1c, 0x21, 0xf0, 0x0c, 0xfa, 0xb9, 0x1c, 0x07, + 0x2f, 0x00, 0xd0, 0x03, 0x1c, 0x20, 0x1c, 0x29, + 0xf0, 0x00, 0xf8, 0x20, 0x98, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0xf0, 0x19, 0xfc, 0xbb, 0x4b, 0x0c, + 0x40, 0x18, 0xf0, 0x19, 0xfc, 0xbb, 0x1c, 0x38, + 0xb0, 0x0a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xf0, + 0x2e, 0x08, 0x01, 0xf4, 0x2e, 0x08, 0x02, 0x74, + 0x2e, 0x08, 0x5e, 0x64, 0x2e, 0x08, 0x44, 0x50, + 0x2e, 0x08, 0x44, 0x30, 0x2e, 0x08, 0x02, 0xf4, + 0xff, 0xef, 0xff, 0xff, 0xb5, 0xf0, 0x06, 0x07, + 0x0e, 0x3f, 0x06, 0x0d, 0x0e, 0x2d, 0xb0, 0x83, + 0xf0, 0x19, 0xfc, 0x98, 0x0d, 0x40, 0xd2, 0x09, + 0x20, 0xff, 0x90, 0x00, 0xf0, 0x19, 0xfc, 0x92, + 0x23, 0x01, 0x05, 0x1b, 0x43, 0x18, 0xf0, 0x19, + 0xfc, 0x91, 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, + 0x24, 0x00, 0x20, 0x01, 0x40, 0xa8, 0x1c, 0x02, + 0x49, 0x3f, 0x1c, 0x13, 0x68, 0x08, 0x40, 0x03, + 0xd0, 0x69, 0x43, 0xd2, 0x40, 0x10, 0x00, 0xae, + 0x60, 0x08, 0x4d, 0x3c, 0x59, 0xa8, 0x28, 0x00, + 0xd0, 0x62, 0x78, 0x81, 0x91, 0x02, 0x08, 0x49, + 0xd3, 0x02, 0x23, 0x12, 0x93, 0x01, 0xe0, 0x01, + 0x23, 0x11, 0x93, 0x01, 0x1c, 0x39, 0xf0, 0x0c, + 0xfa, 0xd3, 0x1c, 0x04, 0x59, 0xa8, 0x6b, 0x00, + 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x03, 0xf8, 0x8c, + 0x59, 0xa8, 0x6a, 0xc0, 0x28, 0x00, 0xd0, 0x01, + 0xf0, 0x03, 0xf8, 0x86, 0x59, 0xa8, 0xf0, 0x03, + 0xf8, 0x83, 0x20, 0x00, 0x51, 0xa8, 0x00, 0xbd, + 0x48, 0x2b, 0x59, 0x40, 0x78, 0x80, 0x28, 0x00, + 0xd1, 0x40, 0x1c, 0x39, 0xf0, 0x0f, 0xfd, 0xf8, + 0x2c, 0x00, 0xd1, 0x2a, 0x98, 0x02, 0x09, 0x80, + 0xd3, 0x0a, 0x21, 0x00, 0x1c, 0x3a, 0x48, 0x25, + 0xf0, 0x0f, 0xff, 0x93, 0x28, 0x00, 0xd0, 0x03, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x22, 0x00, 0xb4, 0x04, 0x22, 0x02, 0x9b, 0x02, + 0x1c, 0x38, 0x49, 0x1e, 0xf0, 0x07, 0xff, 0x7a, + 0xb0, 0x01, 0x1c, 0x04, 0xd1, 0x11, 0x9a, 0x01, + 0xb4, 0x04, 0x26, 0x00, 0x21, 0x00, 0x1c, 0x3a, + 0x1c, 0x33, 0x48, 0x18, 0xf0, 0x0f, 0xff, 0xe4, + 0x1c, 0x04, 0xb0, 0x01, 0x48, 0x16, 0x55, 0xc6, + 0x48, 0x16, 0x55, 0xc6, 0x1c, 0x38, 0xf7, 0xff, + 0xfa, 0xc5, 0x4f, 0x15, 0x59, 0x78, 0xf0, 0x03, + 0xf8, 0x47, 0x26, 0x00, 0x51, 0x7e, 0x37, 0x80, + 0x59, 0x78, 0x28, 0x00, 0xd0, 0x04, 0xf0, 0x03, + 0xf8, 0x3f, 0x51, 0x7e, 0xe0, 0x02, 0xe0, 0x00, + 0xe0, 0x00, 0x24, 0x12, 0x98, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0xf0, 0x19, 0xfc, 0x0f, 0x4b, 0x0b, + 0x40, 0x18, 0xf0, 0x19, 0xfc, 0x0f, 0x1c, 0x20, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x01, 0xf0, 0x2e, 0x08, 0x01, 0xf4, + 0x2e, 0x08, 0x5e, 0x64, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x44, 0x50, 0x2e, 0x08, 0x44, 0x30, + 0x2e, 0x08, 0x02, 0x74, 0xff, 0xef, 0xff, 0xff, + 0xb5, 0xb0, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x80, + 0x1c, 0x0c, 0x1c, 0x17, 0xb0, 0xad, 0x49, 0x1c, + 0x58, 0x08, 0x90, 0x04, 0x78, 0x81, 0x23, 0x04, + 0x40, 0x19, 0x25, 0x00, 0x29, 0x00, 0xd0, 0x0b, + 0xa9, 0x25, 0xf0, 0x0c, 0xfe, 0x95, 0xab, 0x00, + 0x80, 0x5d, 0xa8, 0x25, 0x90, 0x24, 0x46, 0x68, + 0x21, 0x00, 0xf0, 0x0c, 0xfe, 0xb4, 0xe0, 0x0c, + 0x78, 0x00, 0x0a, 0x00, 0xd3, 0x04, 0x20, 0x01, + 0x03, 0x00, 0xab, 0x00, 0x80, 0x58, 0xe0, 0x03, + 0x20, 0x01, 0x02, 0x80, 0xab, 0x00, 0x80, 0x58, + 0x20, 0x00, 0x28, 0x00, 0xd1, 0x0e, 0xa8, 0x00, + 0x88, 0x40, 0x60, 0x38, 0xf0, 0x02, 0xff, 0xca, + 0x60, 0x20, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x13, + 0xe0, 0x06, 0x1c, 0x01, 0x46, 0x68, 0xf0, 0x0c, + 0xfe, 0x96, 0xe0, 0x01, 0x60, 0x25, 0x60, 0x3d, + 0xb0, 0x2d, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x01, 0xf4, 0xb4, 0xf0, 0x06, 0x12, + 0x0e, 0x12, 0x06, 0x1b, 0x0e, 0x1b, 0x9c, 0x06, + 0x9f, 0x07, 0x9d, 0x05, 0x9e, 0x04, 0x06, 0x36, + 0x0e, 0x36, 0x06, 0x2d, 0xd0, 0x02, 0x25, 0x80, + 0x70, 0x05, 0xe0, 0x01, 0x25, 0x00, 0x70, 0x05, + 0x25, 0x00, 0x70, 0x45, 0x80, 0x85, 0x72, 0x05, + 0x70, 0xc6, 0x70, 0x83, 0x62, 0xc4, 0x63, 0x07, + 0x27, 0x00, 0x23, 0x00, 0x2a, 0x00, 0xdd, 0x10, + 0x5c, 0xcc, 0x19, 0xc5, 0x73, 0x2c, 0x18, 0xcc, + 0x78, 0x66, 0x1c, 0x7c, 0x06, 0x25, 0x0e, 0x2d, + 0x1c, 0x3c, 0x18, 0x24, 0x77, 0x26, 0x33, 0x02, + 0x06, 0x1b, 0x0e, 0x1b, 0x1c, 0x2f, 0x42, 0x93, + 0xdb, 0xee, 0xbc, 0xf0, 0x47, 0x70, 0xb5, 0xf0, + 0xb0, 0xac, 0x21, 0x00, 0xa8, 0x07, 0xf0, 0x0c, + 0xfd, 0x1b, 0xa8, 0x07, 0x78, 0x00, 0x90, 0x06, + 0x28, 0x00, 0xd0, 0x4b, 0x24, 0x00, 0x98, 0x06, + 0x28, 0x00, 0xdd, 0x43, 0xa8, 0x07, 0xf0, 0x0d, + 0xf8, 0xe2, 0x00, 0xa1, 0xa8, 0x07, 0x18, 0x08, + 0x69, 0x07, 0x78, 0xfe, 0xad, 0x07, 0x88, 0x6d, + 0x78, 0xb8, 0x09, 0xc0, 0xd3, 0x12, 0xa8, 0x07, + 0xa9, 0x01, 0xf0, 0x10, 0xfb, 0x31, 0x78, 0xb8, + 0x08, 0x40, 0xd3, 0x05, 0x46, 0x6a, 0x1c, 0x38, + 0xa9, 0x01, 0xf0, 0x10, 0xfb, 0x5e, 0xe0, 0x08, + 0x46, 0x6a, 0x1c, 0x38, 0xa9, 0x01, 0xf0, 0x10, + 0xfb, 0x9b, 0xe0, 0x02, 0x20, 0x40, 0xab, 0x00, + 0x70, 0x18, 0xa8, 0x00, 0x78, 0x00, 0x09, 0xc0, + 0xd3, 0x16, 0x1c, 0x28, 0xf7, 0xfd, 0xfe, 0x4a, + 0x1c, 0x07, 0xd0, 0x11, 0xa8, 0x07, 0x1c, 0x39, + 0xf0, 0x0c, 0xff, 0x54, 0x28, 0x00, 0xd1, 0x09, + 0x1c, 0x30, 0x1c, 0x29, 0x1c, 0x3a, 0xf7, 0xfd, + 0xfe, 0x99, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfd, + 0xfe, 0x8b, 0xe0, 0x01, 0xf7, 0xfd, 0xfe, 0x88, + 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, 0x98, 0x06, + 0x42, 0x84, 0xdb, 0xbb, 0xa8, 0x07, 0xf0, 0x0c, + 0xfd, 0xbd, 0xe7, 0xaa, 0xf7, 0xff, 0xfa, 0x5c, + 0xb0, 0x2c, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xf0, 0xb0, 0xad, 0x21, 0x00, 0xa8, 0x08, + 0xf0, 0x0c, 0xfc, 0xbe, 0x22, 0x05, 0x21, 0x16, + 0x1c, 0x04, 0xf0, 0x03, 0xfd, 0x54, 0x2c, 0xb2, + 0xd1, 0x03, 0x21, 0x00, 0xa8, 0x08, 0xf0, 0x0c, + 0xfc, 0x6d, 0xa8, 0x08, 0x78, 0x00, 0x90, 0x06, + 0x28, 0x00, 0xd0, 0x73, 0x25, 0x00, 0x98, 0x06, + 0x28, 0x00, 0xdd, 0x57, 0xa8, 0x08, 0xf0, 0x0d, + 0xf8, 0x7a, 0x00, 0xa9, 0xa8, 0x08, 0x18, 0x08, + 0x69, 0x07, 0x78, 0xf8, 0x90, 0x07, 0xae, 0x08, + 0x88, 0x76, 0x78, 0xb8, 0x09, 0xc0, 0xd3, 0x12, + 0xa8, 0x08, 0xa9, 0x01, 0xf0, 0x10, 0xfa, 0xc8, + 0x78, 0xb8, 0x08, 0x40, 0xd3, 0x05, 0x46, 0x6a, + 0x1c, 0x38, 0xa9, 0x01, 0xf0, 0x10, 0xfa, 0xf5, + 0xe0, 0x08, 0x46, 0x6a, 0x1c, 0x38, 0xa9, 0x01, + 0xf0, 0x10, 0xfb, 0x32, 0xe0, 0x02, 0x20, 0x40, + 0xab, 0x00, 0x70, 0x18, 0xa8, 0x00, 0x78, 0x00, + 0x09, 0xc0, 0xd3, 0x29, 0x78, 0xb8, 0x09, 0x80, + 0xd3, 0x0f, 0xa8, 0x08, 0xa9, 0x01, 0xf0, 0x10, + 0xfc, 0x8f, 0x1c, 0x04, 0xa8, 0x00, 0x78, 0x00, + 0x08, 0x80, 0xd2, 0x02, 0x78, 0xb8, 0x08, 0x80, + 0xd3, 0x1a, 0x1c, 0x38, 0xf0, 0x10, 0xfd, 0x96, + 0xe0, 0x16, 0x1c, 0x30, 0xf7, 0xfd, 0xfd, 0xce, + 0x1c, 0x07, 0xd0, 0x11, 0xa8, 0x08, 0x1c, 0x39, + 0xf0, 0x0c, 0xfe, 0xd8, 0x28, 0x00, 0xd1, 0x09, + 0x98, 0x07, 0x1c, 0x31, 0x1c, 0x3a, 0xf7, 0xfd, + 0xfe, 0x1d, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfd, + 0xfe, 0x0f, 0xe0, 0x01, 0xf7, 0xfd, 0xfe, 0x0c, + 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x06, + 0x42, 0x85, 0xdb, 0xa7, 0x98, 0x06, 0x28, 0x00, + 0xd0, 0x08, 0xa8, 0x08, 0xf0, 0x0c, 0xfd, 0x3e, + 0x2c, 0xb2, 0xd1, 0x03, 0x21, 0x00, 0xa8, 0x08, + 0xf0, 0x0c, 0xfc, 0x00, 0xf7, 0xff, 0xf9, 0x5c, + 0x21, 0x00, 0xa8, 0x08, 0xf7, 0xff, 0xfb, 0x88, + 0x1c, 0x04, 0xa8, 0x08, 0x78, 0x00, 0x90, 0x06, + 0x28, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xd1, 0x89, + 0xf7, 0xff, 0xf9, 0xca, 0xb0, 0x2d, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x26, 0x00, + 0x48, 0x28, 0x71, 0x06, 0x70, 0x06, 0x20, 0x00, + 0x4f, 0x27, 0x4a, 0x28, 0x49, 0x28, 0x00, 0x43, + 0x52, 0xd6, 0x52, 0xfe, 0x00, 0x83, 0x50, 0xce, + 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x1d, + 0xdb, 0xf5, 0x28, 0x20, 0xda, 0x08, 0x00, 0x43, + 0x52, 0xd6, 0x00, 0x83, 0x50, 0xce, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf6, + 0x20, 0x01, 0x02, 0x80, 0xf0, 0x19, 0xfa, 0x6d, + 0xf0, 0x19, 0xfa, 0x70, 0x4b, 0x1b, 0x40, 0x18, + 0xf0, 0x19, 0xfa, 0x70, 0x49, 0x1a, 0x20, 0x0a, + 0xf0, 0x19, 0xfa, 0x70, 0x21, 0x00, 0x4f, 0x19, + 0x20, 0xff, 0x4a, 0x19, 0x00, 0x4b, 0x18, 0x5b, + 0x01, 0x1b, 0x52, 0xd7, 0x18, 0x9b, 0x70, 0x98, + 0x70, 0xde, 0x71, 0x1e, 0x1d, 0xdc, 0x34, 0x19, + 0x73, 0x26, 0x71, 0x5e, 0x1c, 0x1d, 0x23, 0x06, + 0x73, 0x63, 0x23, 0x00, 0x00, 0xdc, 0x19, 0x2c, + 0x81, 0xa6, 0x81, 0xe6, 0x33, 0x01, 0x06, 0x1b, + 0x0e, 0x1b, 0x60, 0xa6, 0x2b, 0x04, 0xdb, 0xf5, + 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x08, + 0xdb, 0xe0, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xbc, + 0x2e, 0x08, 0x49, 0xb8, 0x2e, 0x08, 0x49, 0x78, + 0x2e, 0x08, 0x45, 0xf0, 0xff, 0xff, 0xfb, 0xff, + 0x2e, 0x00, 0x30, 0xdd, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x44, 0x70, 0xb5, 0xf0, 0x06, 0x00, + 0x0e, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x04, 0x09, + 0x0c, 0x09, 0x91, 0x01, 0x06, 0x10, 0x0e, 0x00, + 0x04, 0x1c, 0x0c, 0x24, 0x27, 0x00, 0x49, 0x5a, + 0x00, 0x7b, 0x19, 0xdb, 0x01, 0x1b, 0x5a, 0xcd, + 0x4b, 0x58, 0x42, 0x9d, 0xd1, 0x01, 0x1c, 0x3a, + 0xe0, 0x04, 0x1c, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, + 0x2f, 0x08, 0xdb, 0xf1, 0x2f, 0x08, 0xd1, 0x05, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x46, 0x4f, 0x50, + 0x97, 0x02, 0x5b, 0xbb, 0x2b, 0x00, 0xd0, 0x05, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x23, 0x01, 0x9f, 0x02, + 0x53, 0xbb, 0x00, 0x53, 0x18, 0x9a, 0x01, 0x12, + 0x18, 0x57, 0x80, 0x38, 0x20, 0x14, 0xf0, 0x02, + 0xfd, 0xf9, 0x1c, 0x01, 0x62, 0xb8, 0x20, 0x00, + 0x29, 0x00, 0xd1, 0x08, 0x49, 0x41, 0x80, 0x39, + 0x9f, 0x02, 0x53, 0xb8, 0x43, 0xc0, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x0d, + 0x21, 0xff, 0x02, 0x09, 0x40, 0x21, 0x12, 0x08, + 0x28, 0x09, 0xd2, 0x1f, 0xa3, 0x01, 0x5c, 0x1b, + 0x00, 0x5b, 0x44, 0x9f, 0x1b, 0x04, 0x06, 0x09, + 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x00, 0x24, 0xb8, + 0xe0, 0x16, 0x24, 0xff, 0x34, 0x71, 0xe0, 0x13, + 0x24, 0x01, 0x02, 0xa4, 0xe0, 0x10, 0x24, 0x01, + 0x02, 0xe4, 0xe0, 0x0d, 0x24, 0x01, 0x03, 0x24, + 0xe0, 0x0a, 0x24, 0x01, 0x03, 0x64, 0xe0, 0x07, + 0x24, 0x01, 0x03, 0xa4, 0xe0, 0x04, 0x24, 0x01, + 0x03, 0xe4, 0xe0, 0x01, 0x24, 0x01, 0x02, 0xa4, + 0x80, 0xac, 0x88, 0xa8, 0x00, 0x80, 0xf0, 0x02, + 0xfd, 0xbd, 0x60, 0x28, 0x28, 0x00, 0xd1, 0x0d, + 0x48, 0x24, 0x80, 0x38, 0x20, 0x00, 0x9f, 0x02, + 0x53, 0xb8, 0x1c, 0x28, 0xf0, 0x02, 0xfd, 0xd4, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x98, 0x00, 0x70, 0xb8, + 0x26, 0x00, 0x88, 0x38, 0x00, 0x80, 0x49, 0x1d, + 0x50, 0x0e, 0x20, 0x00, 0x1c, 0x01, 0x43, 0x61, + 0x68, 0x2a, 0x18, 0x8a, 0x00, 0xc1, 0x19, 0xc9, + 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x60, 0x8a, + 0x28, 0x04, 0xdb, 0xf3, 0x20, 0xb8, 0x1c, 0x21, + 0xf0, 0x15, 0xfa, 0x56, 0x1d, 0xfc, 0x34, 0x19, + 0x73, 0x20, 0x72, 0x2e, 0x78, 0xb8, 0x23, 0x01, + 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0xf0, 0x07, + 0xfe, 0x89, 0x22, 0x00, 0xb4, 0x04, 0x78, 0xb8, + 0x23, 0x05, 0x22, 0x02, 0x99, 0x02, 0xf0, 0x07, + 0xfc, 0xbd, 0x22, 0x04, 0x7b, 0x21, 0xb0, 0x01, + 0xb4, 0x06, 0x78, 0xb9, 0x22, 0x0a, 0x20, 0x85, + 0x6a, 0xbb, 0xf0, 0x07, 0xff, 0x05, 0x1c, 0x30, + 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x44, 0x70, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x49, 0x78, 0x2e, 0x08, 0x45, 0xf0, + 0xb5, 0xf0, 0xb0, 0x82, 0x46, 0x68, 0xf0, 0x08, + 0xfc, 0x99, 0x21, 0x00, 0x4f, 0x24, 0x4b, 0x25, + 0x93, 0x01, 0x4a, 0x25, 0x00, 0x48, 0x18, 0x40, + 0x01, 0x00, 0x19, 0xc0, 0x78, 0x84, 0x9d, 0x00, + 0x40, 0xe5, 0x07, 0xeb, 0x0f, 0xdb, 0x2b, 0x01, + 0xd1, 0x31, 0x6a, 0x83, 0x7a, 0x1c, 0x2c, 0xa4, + 0xd0, 0x01, 0x2c, 0xa5, 0xd1, 0x2b, 0x1d, 0xc4, + 0x34, 0x19, 0xe0, 0x0e, 0x79, 0x05, 0x73, 0x65, + 0x88, 0xde, 0x79, 0x05, 0x00, 0xed, 0x18, 0x2d, + 0x81, 0xae, 0x79, 0x05, 0x35, 0x01, 0x07, 0xad, + 0x0f, 0xad, 0x71, 0x05, 0x78, 0x15, 0x35, 0x01, + 0x70, 0x15, 0x7a, 0x9d, 0x7b, 0x66, 0x42, 0xb5, + 0xd0, 0x02, 0x79, 0x45, 0x2d, 0x00, 0xd0, 0xe9, + 0x7a, 0x1b, 0x2b, 0xa5, 0xd1, 0x0f, 0x79, 0x43, + 0x07, 0xdc, 0x0f, 0xe4, 0x2c, 0x01, 0xd0, 0x0a, + 0x1c, 0x1c, 0x23, 0x01, 0x43, 0x23, 0x71, 0x43, + 0x88, 0x00, 0x00, 0x80, 0x9b, 0x01, 0x18, 0xc0, + 0x68, 0x03, 0x33, 0x01, 0x60, 0x03, 0x1c, 0x48, + 0x06, 0x01, 0x0e, 0x09, 0x29, 0x08, 0xdb, 0xbd, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x44, 0x70, 0x2e, 0x08, 0x45, 0xf0, + 0x2e, 0x08, 0x03, 0xbc, 0xb5, 0xf0, 0x04, 0x05, + 0x0c, 0x2d, 0x20, 0x00, 0x4c, 0x31, 0x00, 0x42, + 0x18, 0x12, 0x01, 0x12, 0x5a, 0xa2, 0x42, 0xaa, + 0xd1, 0x01, 0x1c, 0x01, 0xe0, 0x04, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf2, + 0x28, 0x08, 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x48, + 0x18, 0x40, 0x01, 0x00, 0x19, 0x07, 0x78, 0xb8, + 0x49, 0x25, 0xf0, 0x07, 0xfe, 0xd1, 0x79, 0x78, + 0x23, 0x02, 0x43, 0x18, 0x71, 0x78, 0x78, 0xbe, + 0x20, 0xff, 0x70, 0xb8, 0x21, 0x00, 0x1d, 0xf8, + 0x30, 0x19, 0x73, 0x01, 0x21, 0x06, 0x73, 0x41, + 0x78, 0xf8, 0x79, 0x39, 0x42, 0x88, 0xd1, 0x11, + 0x79, 0x78, 0x07, 0xc0, 0x0f, 0xc0, 0x28, 0x01, + 0xd0, 0x0c, 0x20, 0x00, 0x70, 0xf8, 0x71, 0x38, + 0x71, 0x78, 0x48, 0x17, 0x80, 0x38, 0x6a, 0xb8, + 0x68, 0x00, 0xf0, 0x02, 0xfc, 0xf5, 0x6a, 0xb8, + 0xf0, 0x02, 0xfc, 0xf2, 0x4f, 0x12, 0x00, 0x68, + 0x49, 0x12, 0x52, 0x0f, 0x00, 0x71, 0x4a, 0x12, + 0x52, 0x57, 0x21, 0x00, 0x4a, 0x11, 0x52, 0x11, + 0x1c, 0x30, 0x1c, 0x29, 0xf0, 0x02, 0xff, 0xf0, + 0x20, 0x00, 0x00, 0x41, 0x18, 0x09, 0x01, 0x09, + 0x5a, 0x61, 0x42, 0xb9, 0xd1, 0x04, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf4, + 0x28, 0x08, 0xd1, 0x03, 0x21, 0x00, 0x48, 0x08, + 0x71, 0x01, 0x70, 0x01, 0x20, 0x00, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x44, 0x70, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0x38, + 0x2e, 0x08, 0x49, 0x00, 0x2e, 0x08, 0x49, 0x78, + 0x2e, 0x08, 0x03, 0xbc, 0xb5, 0x80, 0x1c, 0x07, + 0x30, 0x28, 0xf0, 0x02, 0xfc, 0x9b, 0x49, 0x07, + 0x64, 0x88, 0x65, 0x08, 0x65, 0x48, 0x19, 0xc0, + 0x64, 0xc8, 0x20, 0x00, 0x64, 0x08, 0x64, 0x4f, + 0x49, 0x03, 0x84, 0x08, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, + 0x2c, 0x00, 0x01, 0x00, 0xb5, 0x80, 0x1c, 0x07, + 0x30, 0x28, 0xf0, 0x02, 0xfc, 0x83, 0x49, 0x06, + 0x66, 0x08, 0x66, 0x88, 0x66, 0xc8, 0x19, 0xc0, + 0x66, 0x48, 0x20, 0x00, 0x65, 0x88, 0x65, 0xcf, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x03, 0xc4, 0xb4, 0x80, 0x04, 0x09, + 0x0c, 0x09, 0x88, 0x02, 0x42, 0x8a, 0xd0, 0x18, + 0x4a, 0x0d, 0x8f, 0x13, 0x2b, 0x01, 0xd0, 0x04, + 0x23, 0x01, 0x87, 0x13, 0x8f, 0x17, 0x2f, 0x01, + 0xd1, 0xfb, 0x88, 0x03, 0x42, 0x8b, 0xd0, 0x03, + 0x80, 0x01, 0x88, 0x03, 0x42, 0x8b, 0xd1, 0xfb, + 0x8f, 0x11, 0x1c, 0x10, 0x29, 0x00, 0xd0, 0x04, + 0x21, 0x00, 0x87, 0x01, 0x8f, 0x02, 0x2a, 0x00, + 0xd1, 0xfb, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, + 0x2c, 0x00, 0x1f, 0xc0, 0xb5, 0x80, 0x48, 0x1f, + 0x8f, 0x40, 0x28, 0x00, 0xd1, 0x37, 0x4f, 0x1e, + 0x88, 0x38, 0x12, 0x00, 0x4a, 0x1d, 0x28, 0x06, + 0xd0, 0x1e, 0xdc, 0x08, 0x28, 0x06, 0xd2, 0x26, + 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, + 0x2a, 0x12, 0x12, 0x0d, 0x22, 0x12, 0x28, 0x07, + 0xd0, 0x15, 0x28, 0x09, 0xd0, 0x0b, 0x28, 0x0b, + 0xd0, 0x14, 0x28, 0x80, 0xd1, 0x17, 0xf0, 0x00, + 0xf9, 0x1f, 0xe0, 0x18, 0x88, 0x79, 0x88, 0x38, + 0xf0, 0x00, 0xf8, 0x24, 0xe0, 0x13, 0x88, 0x79, + 0x88, 0x38, 0xf0, 0x00, 0xf8, 0xbd, 0xe0, 0x0e, + 0xf0, 0x00, 0xf9, 0x6a, 0xe0, 0x0b, 0xf0, 0x00, + 0xf9, 0xd5, 0xe0, 0x08, 0x88, 0x79, 0x88, 0x38, + 0xf0, 0x00, 0xfc, 0x70, 0xe0, 0x03, 0x48, 0x08, + 0x8e, 0x81, 0x31, 0x01, 0x86, 0x81, 0x21, 0x00, + 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x9f, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, + 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x01, 0x00, + 0x2e, 0x08, 0x04, 0x04, 0xb5, 0xf0, 0x04, 0x04, + 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x17, + 0x2d, 0x10, 0xdd, 0x03, 0x20, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x19, 0xf8, 0x32, + 0x1c, 0x68, 0x10, 0x40, 0x00, 0x40, 0x04, 0x01, + 0x0c, 0x09, 0x1c, 0x88, 0x00, 0x40, 0x1d, 0x02, + 0x48, 0x1c, 0x6c, 0x03, 0x18, 0x9d, 0x6c, 0x46, + 0x4b, 0x1b, 0x42, 0xb5, 0xdd, 0x0a, 0x88, 0x19, + 0x1c, 0x18, 0x23, 0x20, 0x43, 0x19, 0x80, 0x01, + 0xf0, 0x19, 0xf8, 0x52, 0x20, 0x01, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x64, 0x05, 0x35, 0x28, + 0x42, 0xb5, 0xdd, 0x04, 0x88, 0x1e, 0x1c, 0x1d, + 0x23, 0x10, 0x43, 0x33, 0x80, 0x2b, 0x6d, 0x03, + 0x80, 0x9c, 0x6d, 0x04, 0x80, 0xe2, 0x23, 0x00, + 0x29, 0x00, 0xdd, 0x08, 0x88, 0x3d, 0x00, 0x5c, + 0x6d, 0x06, 0x19, 0xa4, 0x81, 0x25, 0x33, 0x01, + 0x37, 0x02, 0x42, 0x8b, 0xdb, 0xf6, 0x6d, 0x01, + 0x18, 0x8a, 0x6c, 0xc3, 0x42, 0x9a, 0xd9, 0x00, + 0x6c, 0x82, 0x60, 0x0a, 0x65, 0x02, 0xf0, 0x19, + 0xf8, 0x2b, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, + 0x2c, 0x00, 0x00, 0xf8, 0xb4, 0xf0, 0x04, 0x04, + 0x0c, 0x24, 0x04, 0x08, 0x0c, 0x00, 0x28, 0x10, + 0xdd, 0x02, 0x20, 0x02, 0xbc, 0xf0, 0x47, 0x70, + 0x30, 0x01, 0x4f, 0x1c, 0x40, 0x07, 0x1c, 0xb8, + 0x00, 0x40, 0x1d, 0x01, 0x48, 0x1a, 0x6d, 0x83, + 0x18, 0x5d, 0x6d, 0xc6, 0x4b, 0x19, 0x42, 0xb5, + 0xdd, 0x07, 0x88, 0x19, 0x1c, 0x18, 0x23, 0x02, + 0x43, 0x19, 0x80, 0x01, 0x20, 0x01, 0xbc, 0xf0, + 0x47, 0x70, 0x65, 0x85, 0x35, 0x28, 0x42, 0xb5, + 0xdd, 0x04, 0x88, 0x1e, 0x1c, 0x1d, 0x23, 0x01, + 0x43, 0x33, 0x80, 0x2b, 0x6e, 0x83, 0x80, 0x9c, + 0x6e, 0x84, 0x80, 0xe1, 0x23, 0x00, 0x2f, 0x00, + 0xdd, 0x08, 0x88, 0x15, 0x00, 0x5c, 0x6e, 0x86, + 0x19, 0xa4, 0x81, 0x25, 0x32, 0x02, 0x33, 0x01, + 0x42, 0xbb, 0xdb, 0xf6, 0x6e, 0x82, 0x18, 0x51, + 0x6e, 0x43, 0x42, 0x99, 0xd3, 0x00, 0x6e, 0x01, + 0x60, 0x11, 0x66, 0x81, 0x20, 0x00, 0xbc, 0xf0, + 0x47, 0x70, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0x2e, 0x08, 0x03, 0xc4, 0x2c, 0x00, 0x00, 0xf8, + 0xb5, 0xb0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x0d, + 0x0c, 0x2d, 0x1c, 0x17, 0xf0, 0x18, 0xff, 0x9a, + 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x3a, 0xf7, 0xff, + 0xff, 0xa9, 0x1c, 0x07, 0xf0, 0x18, 0xff, 0xc8, + 0x1c, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0xb4, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x09, + 0x0c, 0x09, 0x29, 0x08, 0xdd, 0x02, 0x20, 0x02, + 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x88, 0x1d, 0xc7, + 0x37, 0x01, 0x48, 0x19, 0x6d, 0x83, 0x19, 0xdd, + 0x6d, 0xc6, 0x4b, 0x18, 0x42, 0xb5, 0xdd, 0x07, + 0x88, 0x19, 0x1c, 0x18, 0x23, 0x02, 0x43, 0x19, + 0x80, 0x01, 0x20, 0x01, 0xbc, 0xf0, 0x47, 0x70, + 0x65, 0x85, 0x35, 0x28, 0x42, 0xb5, 0xdd, 0x04, + 0x88, 0x1e, 0x1c, 0x1d, 0x23, 0x01, 0x43, 0x33, + 0x80, 0x2b, 0x6e, 0x83, 0x80, 0x9c, 0x6e, 0x84, + 0x80, 0xe7, 0x23, 0x00, 0x6e, 0x84, 0x29, 0x00, + 0xdd, 0x06, 0xca, 0x40, 0x00, 0x9d, 0x19, 0x2d, + 0x60, 0xae, 0x33, 0x01, 0x42, 0x8b, 0xdb, 0xf8, + 0x6e, 0x81, 0x19, 0xca, 0x6e, 0x43, 0x42, 0x9a, + 0xd3, 0x00, 0x6e, 0x02, 0x60, 0x0a, 0x66, 0x82, + 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x03, 0xc4, 0x2c, 0x00, 0x00, 0xf8, + 0xb5, 0x80, 0x48, 0x28, 0x88, 0x00, 0x06, 0x00, + 0x0e, 0x00, 0x4f, 0x27, 0x28, 0x01, 0xd0, 0x13, + 0x28, 0x02, 0xd0, 0x1a, 0x28, 0x03, 0xd1, 0x0c, + 0x68, 0x38, 0x88, 0x41, 0x29, 0x0e, 0xdb, 0x02, + 0x88, 0x41, 0x29, 0x0f, 0xdd, 0x2f, 0x88, 0x01, + 0x04, 0x09, 0x88, 0x40, 0x43, 0x08, 0xf0, 0x0a, + 0xfe, 0x43, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x68, 0x38, 0x88, 0x82, 0x88, 0x41, 0x88, 0x00, + 0xf0, 0x0d, 0xfd, 0x22, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0x38, 0x88, 0x81, 0x04, 0x09, + 0x88, 0xc2, 0x43, 0x11, 0x88, 0x02, 0x04, 0x12, + 0x88, 0x40, 0x43, 0x10, 0xf0, 0x0d, 0xf9, 0xc6, + 0x68, 0x38, 0x88, 0x41, 0x29, 0x0e, 0xd1, 0x08, + 0x88, 0x81, 0x04, 0x09, 0x88, 0xc0, 0x43, 0x08, + 0xf0, 0x0a, 0xfc, 0xc0, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x01, 0xf0, 0x0a, 0xfc, 0xba, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x88, 0x41, + 0x48, 0x08, 0x29, 0x0e, 0xd1, 0x02, 0x21, 0x00, + 0x60, 0x01, 0xe0, 0x01, 0x21, 0x01, 0x60, 0x01, + 0x68, 0x00, 0xf0, 0x00, 0xfb, 0xc3, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x00, 0xfc, + 0x2e, 0x08, 0x03, 0xc4, 0x2e, 0x08, 0x04, 0xfc, + 0xb5, 0x90, 0x48, 0x31, 0x88, 0x00, 0x06, 0x04, + 0x0e, 0x24, 0x48, 0x30, 0x22, 0x03, 0x21, 0x02, + 0x4f, 0x2f, 0x2c, 0x08, 0xd2, 0x4f, 0xa3, 0x02, + 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x04, 0x4b, 0x10, 0x16, 0x1c, 0x28, 0x34, 0x3f, + 0x68, 0x39, 0x88, 0x49, 0x06, 0x09, 0x0e, 0x09, + 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, 0xf0, 0x03, + 0xfa, 0x85, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x03, 0xf7, 0xfd, 0xff, 0xdd, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x20, 0x02, 0xf7, 0xfd, + 0xff, 0xd7, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x88, 0x00, 0x4b, 0x1e, 0x28, 0x00, 0xd0, 0x03, + 0x60, 0x1a, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x60, 0x19, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x88, 0x00, 0x4b, 0x19, 0x28, 0x00, 0xd0, 0x03, + 0x60, 0x1a, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x60, 0x19, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0xf0, 0x02, 0xfe, 0x50, 0x68, 0x39, 0x88, 0x4a, + 0x1d, 0x08, 0x88, 0x09, 0xf7, 0xfe, 0xf8, 0x4e, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x68, 0x38, + 0x88, 0x81, 0x04, 0x09, 0x88, 0xc2, 0x18, 0x8a, + 0x88, 0x01, 0x04, 0x09, 0x88, 0x40, 0x50, 0x0a, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x1d, 0xf8, + 0x30, 0x39, 0x8e, 0x81, 0x31, 0x01, 0x86, 0x81, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x01, 0x00, + 0x2e, 0x08, 0x03, 0xc4, 0x6e, 0x00, 0x13, 0x00, + 0x6e, 0x00, 0x12, 0x00, 0xb5, 0x90, 0xb0, 0x84, + 0x48, 0x76, 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, + 0x4c, 0x75, 0x4f, 0x76, 0x28, 0x0a, 0xd2, 0x60, + 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, + 0x04, 0x0e, 0x16, 0x39, 0x5d, 0x85, 0x8f, 0xbc, + 0xc4, 0xd2, 0xf0, 0x0a, 0xff, 0xfb, 0x90, 0x03, + 0x14, 0x00, 0x68, 0x39, 0x80, 0x08, 0x98, 0x03, + 0x68, 0x39, 0x80, 0x48, 0xe0, 0xcd, 0x20, 0x1e, + 0xa9, 0x03, 0xf0, 0x0a, 0xfe, 0xfd, 0x98, 0x03, + 0x68, 0x39, 0x80, 0x08, 0xe0, 0xc5, 0x1c, 0x20, + 0xf0, 0x0d, 0xfa, 0xf4, 0x20, 0x00, 0x00, 0x81, + 0x58, 0x61, 0x00, 0x42, 0x68, 0x3b, 0x52, 0x99, + 0x30, 0x01, 0x28, 0x04, 0xdd, 0xf7, 0x20, 0x07, + 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, 0x68, 0x3b, + 0x18, 0xd2, 0x3a, 0x40, 0x87, 0x91, 0x30, 0x01, + 0x28, 0x0b, 0xdd, 0xf5, 0x20, 0x0d, 0x00, 0x81, + 0x58, 0x61, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, + 0x3a, 0x40, 0x87, 0x51, 0x30, 0x01, 0x28, 0x12, + 0xdd, 0xf5, 0xe0, 0xa2, 0x20, 0x13, 0x00, 0x81, + 0x58, 0x61, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, + 0x3a, 0x40, 0x83, 0x51, 0x30, 0x01, 0x28, 0x15, + 0xdd, 0xf5, 0x20, 0x00, 0x00, 0x81, 0x19, 0x09, + 0x6d, 0x89, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, + 0x80, 0xd1, 0x30, 0x01, 0x28, 0x0a, 0xdd, 0xf5, + 0x20, 0x00, 0x00, 0x81, 0x19, 0x09, 0x31, 0x80, + 0x68, 0x49, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, + 0x83, 0x91, 0x30, 0x01, 0x28, 0x01, 0xdd, 0xf4, + 0xe0, 0x7f, 0xe0, 0x79, 0x20, 0x02, 0x00, 0x81, + 0x19, 0x09, 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, + 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x87, 0x91, + 0x30, 0x01, 0x28, 0x05, 0xdd, 0xf3, 0x20, 0x09, + 0x00, 0x81, 0x19, 0x09, 0x31, 0x80, 0x68, 0x49, + 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, + 0x86, 0xd1, 0x30, 0x01, 0x28, 0x0f, 0xdd, 0xf3, + 0x20, 0x11, 0x00, 0x81, 0x19, 0x09, 0x31, 0x80, + 0x68, 0x49, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, + 0x3a, 0x40, 0x86, 0x91, 0x30, 0x01, 0x28, 0x13, + 0xdd, 0xf3, 0xe0, 0x56, 0x22, 0x00, 0x21, 0x00, + 0x20, 0x01, 0x02, 0xc0, 0xf7, 0xff, 0xfe, 0x48, + 0x6f, 0xb8, 0x49, 0x2d, 0x80, 0x08, 0xe0, 0x4c, + 0x46, 0x68, 0xf0, 0x10, 0xf8, 0xdb, 0x98, 0x00, + 0x0c, 0x00, 0x68, 0x39, 0x80, 0x08, 0x98, 0x00, + 0x68, 0x39, 0x80, 0x48, 0x98, 0x01, 0x0c, 0x00, + 0x68, 0x39, 0x80, 0x88, 0x98, 0x01, 0x68, 0x39, + 0x80, 0xc8, 0x98, 0x02, 0x0c, 0x00, 0x68, 0x39, + 0x81, 0x08, 0x98, 0x02, 0x68, 0x39, 0x81, 0x48, + 0x20, 0x00, 0x68, 0x39, 0x81, 0x88, 0x68, 0x38, + 0x89, 0x81, 0x23, 0x01, 0x03, 0xdb, 0x43, 0x19, + 0x81, 0x81, 0x48, 0x1c, 0x68, 0x39, 0x81, 0xc8, + 0x48, 0x1b, 0x68, 0x01, 0x14, 0x09, 0x68, 0x3a, + 0x82, 0x11, 0x68, 0x00, 0x68, 0x39, 0x82, 0x48, + 0xe0, 0x1f, 0x20, 0x19, 0x06, 0x80, 0x6b, 0x80, + 0x06, 0x00, 0x0e, 0x00, 0x68, 0x39, 0x80, 0x08, + 0xe0, 0x17, 0x68, 0x38, 0x88, 0x01, 0x04, 0x09, + 0x88, 0x40, 0x18, 0x08, 0x68, 0x00, 0x90, 0x03, + 0x14, 0x00, 0x68, 0x39, 0x80, 0x08, 0x98, 0x03, + 0x68, 0x39, 0x80, 0x48, 0xe0, 0x09, 0x48, 0x0d, + 0x68, 0x00, 0x68, 0x39, 0x80, 0x08, 0xe0, 0x04, + 0x1d, 0xf8, 0x30, 0x39, 0x8e, 0x81, 0x31, 0x01, + 0x86, 0x81, 0xb0, 0x04, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x00, 0xfc, + 0x2e, 0x08, 0x46, 0x70, 0x2e, 0x08, 0x03, 0xc4, + 0x2c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x10, + 0x2e, 0x08, 0x05, 0x78, 0x2e, 0x08, 0x00, 0x58, + 0xb5, 0xb0, 0x4f, 0x60, 0x25, 0x00, 0x24, 0x01, + 0x6f, 0xf8, 0x28, 0x00, 0xd0, 0x08, 0xf0, 0x06, + 0xfc, 0x1f, 0x28, 0x00, 0xd0, 0x00, 0x67, 0xfd, + 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x6c, 0x38, 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x28, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x6d, 0x78, + 0x6d, 0x39, 0x42, 0x81, 0xd1, 0x03, 0x1c, 0x28, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x88, 0x81, + 0x06, 0x09, 0x0e, 0x09, 0x29, 0x12, 0xd2, 0x57, + 0xa3, 0x01, 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, + 0x08, 0x0f, 0x19, 0x13, 0x1f, 0x4f, 0x23, 0x2e, + 0x39, 0x44, 0x54, 0x5e, 0x65, 0x6a, 0x6e, 0x72, + 0x79, 0x80, 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, + 0x89, 0x00, 0xf0, 0x05, 0xff, 0x7d, 0xe0, 0x72, + 0x89, 0x00, 0xf0, 0x05, 0xff, 0x61, 0xe0, 0x6e, + 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x06, + 0xf8, 0x3b, 0xe0, 0x68, 0x89, 0x82, 0x89, 0x41, + 0x89, 0x00, 0xf0, 0x05, 0xff, 0xe3, 0xe0, 0x62, + 0x89, 0x00, 0xf0, 0x06, 0xf8, 0x79, 0xe0, 0x5e, + 0x8a, 0x42, 0x8a, 0x01, 0xb4, 0x06, 0x89, 0xc3, + 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x06, + 0xf8, 0xfd, 0xb0, 0x02, 0xe0, 0x53, 0x8a, 0x42, + 0x8a, 0x01, 0xb4, 0x06, 0x89, 0xc3, 0x89, 0x82, + 0x89, 0x41, 0x89, 0x00, 0xf0, 0x06, 0xf9, 0x44, + 0xb0, 0x02, 0xe0, 0x48, 0x89, 0x83, 0x89, 0x42, + 0x89, 0x00, 0x49, 0x2f, 0xf0, 0x06, 0xfa, 0x85, + 0x21, 0x00, 0x48, 0x2d, 0xf7, 0xff, 0xfc, 0x6e, + 0xe0, 0x3d, 0x89, 0xc1, 0x04, 0x0b, 0x14, 0x1b, + 0x89, 0x81, 0x04, 0x0a, 0x14, 0x12, 0x89, 0x41, + 0x89, 0x00, 0xf0, 0x06, 0xfa, 0xa5, 0xe0, 0x32, + 0x89, 0x00, 0xf0, 0x06, 0xf8, 0x59, 0xe0, 0x2e, + 0xe0, 0x2d, 0x89, 0xc1, 0x04, 0x09, 0x8a, 0x02, + 0x18, 0x8b, 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, + 0xf0, 0x06, 0xfa, 0xde, 0xe0, 0x23, 0x89, 0xc3, + 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x06, + 0xfb, 0x09, 0xe0, 0x1c, 0x89, 0x41, 0x89, 0x00, + 0xf0, 0x06, 0xf8, 0x7a, 0xe0, 0x17, 0x89, 0x00, + 0xf0, 0x06, 0xf8, 0x94, 0xe0, 0x13, 0x89, 0x00, + 0xf0, 0x06, 0xf8, 0xa4, 0xe0, 0x0f, 0x67, 0xfc, + 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x06, + 0xfb, 0xdd, 0xe0, 0x08, 0x89, 0xc3, 0x89, 0x82, + 0x89, 0x41, 0x89, 0x00, 0xf0, 0x06, 0xfc, 0x40, + 0xe0, 0x01, 0xf0, 0x06, 0xfc, 0xd7, 0x6d, 0x78, + 0x88, 0xc0, 0x6c, 0x39, 0x1a, 0x08, 0x64, 0x38, + 0x6c, 0x79, 0x1a, 0x08, 0x28, 0x28, 0xdb, 0x05, + 0x48, 0x08, 0x88, 0x01, 0x23, 0x10, 0x43, 0xdb, + 0x40, 0x19, 0x80, 0x01, 0x6d, 0x78, 0x68, 0x00, + 0x65, 0x78, 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, + 0x2c, 0x00, 0x01, 0x20, 0x2c, 0x00, 0x00, 0xf8, + 0xb5, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x09, + 0x0e, 0x09, 0x89, 0xd7, 0x23, 0xc7, 0x40, 0x7b, + 0x81, 0xd3, 0x4b, 0x06, 0x68, 0x1f, 0x37, 0x01, + 0x60, 0x1f, 0x2f, 0x28, 0xda, 0x03, 0x4b, 0x04, + 0x68, 0x1b, 0xf0, 0x14, 0xfd, 0x09, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x44, + 0x2e, 0x08, 0x01, 0x94, 0xb5, 0x90, 0x4f, 0x5c, + 0x6e, 0xf8, 0x6e, 0xb9, 0x42, 0x81, 0xd0, 0x5a, + 0x88, 0x81, 0x0a, 0x0a, 0x2a, 0x0a, 0xd2, 0x57, + 0xa3, 0x01, 0x5c, 0x9b, 0x00, 0x5b, 0x44, 0x9f, + 0x97, 0x04, 0x3d, 0x97, 0x97, 0x43, 0x97, 0x97, + 0x6a, 0x70, 0x06, 0x09, 0x0e, 0x09, 0x24, 0x00, + 0x29, 0x0c, 0xd2, 0x49, 0xa3, 0x01, 0x5c, 0x5b, + 0x00, 0x5b, 0x44, 0x9f, 0x1d, 0x09, 0x13, 0x2a, + 0x89, 0x89, 0x89, 0x89, 0x89, 0x27, 0x89, 0x05, + 0x89, 0x00, 0xf0, 0x03, 0xf8, 0xb7, 0xe0, 0x7f, + 0x22, 0x00, 0xb4, 0x04, 0x89, 0x01, 0x1c, 0x23, + 0x4a, 0x48, 0x1e, 0x50, 0xf7, 0xfc, 0xfd, 0x84, + 0xb0, 0x01, 0xe0, 0x75, 0x22, 0x00, 0xb4, 0x04, + 0x89, 0x02, 0x1c, 0x23, 0x49, 0x43, 0x1e, 0x48, + 0xf7, 0xfc, 0xfd, 0x7a, 0xb0, 0x01, 0xe0, 0x6b, + 0x8a, 0x02, 0xb4, 0x04, 0x89, 0xc3, 0x89, 0x82, + 0x89, 0x41, 0x89, 0x00, 0xf7, 0xfc, 0xfd, 0x70, + 0xb0, 0x01, 0xe0, 0x61, 0xf7, 0xfc, 0xfd, 0x40, + 0xe0, 0x5e, 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfe, + 0xfd, 0xd9, 0xe0, 0x59, 0x06, 0x09, 0xd1, 0x57, + 0x89, 0x00, 0xf7, 0xfc, 0xfe, 0xb7, 0xe0, 0x53, + 0x06, 0x09, 0x0e, 0x09, 0x29, 0x06, 0xd2, 0x0b, + 0xa3, 0x01, 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, + 0x02, 0x08, 0x0c, 0x10, 0x14, 0x18, 0x89, 0x00, + 0xf7, 0xfe, 0xf8, 0x9a, 0xe0, 0x44, 0xe0, 0x54, + 0xe0, 0x42, 0x89, 0x00, 0xf7, 0xfe, 0xf8, 0xba, + 0xe0, 0x3e, 0x89, 0x00, 0xf7, 0xfe, 0xf9, 0x48, + 0xe0, 0x3a, 0x89, 0x00, 0xf7, 0xfe, 0xfa, 0x2c, + 0xe0, 0x36, 0x89, 0x00, 0xf7, 0xfe, 0xfa, 0x5e, + 0xe0, 0x32, 0x89, 0x00, 0x06, 0x00, 0x0e, 0x00, + 0xf7, 0xfe, 0xfa, 0x3a, 0xe0, 0x2c, 0x06, 0x08, + 0xd1, 0x2a, 0x6f, 0xb8, 0x30, 0x01, 0x67, 0xb8, + 0xe0, 0x26, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x08, + 0xd2, 0x22, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x0c, 0x08, 0x0f, + 0x12, 0x16, 0x19, 0x1c, 0x89, 0x00, 0xf0, 0x01, + 0xf9, 0x83, 0xe0, 0x15, 0x89, 0x00, 0xf0, 0x01, + 0xf9, 0xab, 0xe0, 0x11, 0xf0, 0x01, 0xf9, 0xf6, + 0xe0, 0x0e, 0xf0, 0x01, 0xfa, 0x4d, 0xe0, 0x0b, + 0x89, 0x00, 0xf0, 0x01, 0xfa, 0xd1, 0xe0, 0x07, + 0xf0, 0x01, 0xfb, 0x0a, 0xe0, 0x04, 0xf0, 0x01, + 0xfb, 0x23, 0xe0, 0x01, 0xf0, 0x01, 0xfa, 0x80, + 0x6e, 0xf8, 0x88, 0xc0, 0x6d, 0xb9, 0x1a, 0x08, + 0x65, 0xb8, 0x6d, 0xf9, 0x1a, 0x08, 0x28, 0x28, + 0xdb, 0x04, 0x48, 0x07, 0x88, 0x01, 0x08, 0x49, + 0x00, 0x49, 0x80, 0x01, 0x6e, 0xf8, 0x68, 0x00, + 0x66, 0xf8, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x03, 0xc4, 0x00, 0x00, 0xff, 0xff, + 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x06, 0x00, + 0x0e, 0x00, 0x1c, 0x17, 0x28, 0x03, 0xd0, 0x0b, + 0x28, 0x07, 0xd0, 0x0e, 0x28, 0x08, 0xd1, 0x03, + 0x88, 0x38, 0xf0, 0x02, 0xfa, 0x43, 0x80, 0x78, + 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfe, 0xfd, 0x4e, + 0xe7, 0xf6, 0x88, 0x79, 0x88, 0x38, 0x1d, 0x3a, + 0xf0, 0x02, 0xf8, 0xb4, 0x49, 0x01, 0x68, 0x09, + 0x80, 0x08, 0xe7, 0xed, 0x2e, 0x08, 0x03, 0xc4, + 0x48, 0x0d, 0x6f, 0xc0, 0x28, 0x00, 0xd1, 0x0c, + 0x49, 0x0c, 0x60, 0x48, 0x48, 0x0c, 0x8e, 0x83, + 0x49, 0x0c, 0x22, 0x01, 0x2b, 0x00, 0xd0, 0x05, + 0x8d, 0x03, 0x86, 0x8b, 0x8d, 0x43, 0x86, 0xcb, + 0x87, 0x82, 0x47, 0x70, 0x8e, 0xc3, 0x2b, 0x00, + 0xd0, 0xfb, 0x8d, 0x83, 0x86, 0x8b, 0x8d, 0xc3, + 0x86, 0xcb, 0x87, 0x82, 0x47, 0x70, 0x00, 0x00, + 0x2c, 0x00, 0x1f, 0x80, 0x2e, 0x08, 0x04, 0x44, + 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x00, 0xc0, + 0xb5, 0x00, 0xf0, 0x00, 0xfa, 0x7f, 0xf7, 0xfd, + 0xf8, 0x73, 0xf7, 0xfc, 0xff, 0x19, 0xf7, 0xfd, + 0xf9, 0x73, 0xf0, 0x03, 0xf8, 0x75, 0xf7, 0xff, + 0xff, 0xcf, 0x48, 0x10, 0x8e, 0x80, 0x28, 0x00, + 0xd1, 0x19, 0x48, 0x0f, 0x6f, 0xc0, 0x28, 0x00, + 0xd1, 0x0f, 0xb0, 0x82, 0x46, 0x69, 0xa8, 0x01, + 0xf0, 0x01, 0xfa, 0xcc, 0xa8, 0x01, 0x78, 0x00, + 0x28, 0x32, 0xda, 0x05, 0xa8, 0x00, 0x78, 0x00, + 0x28, 0x32, 0xda, 0x01, 0xf0, 0x03, 0xfa, 0x90, + 0xb0, 0x02, 0xf7, 0xff, 0xfd, 0xf1, 0x28, 0x00, + 0xd1, 0x01, 0xf7, 0xff, 0xfe, 0xcf, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, + 0x2c, 0x00, 0x1f, 0x80, 0xb4, 0x80, 0x02, 0x4f, + 0x4b, 0x07, 0x40, 0x3b, 0x43, 0x1a, 0x23, 0x19, + 0x06, 0x9b, 0x62, 0x9a, 0x0a, 0x49, 0x02, 0x49, + 0x08, 0x49, 0x07, 0xc0, 0x43, 0x08, 0x49, 0x03, + 0x68, 0x09, 0x60, 0x08, 0xbc, 0x80, 0x47, 0x70, + 0x00, 0x03, 0xfe, 0x00, 0x2e, 0x08, 0x5e, 0x40, + 0xb4, 0x90, 0x4b, 0x0c, 0x68, 0x1f, 0x68, 0x3f, + 0x0f, 0xff, 0x60, 0x07, 0x68, 0x18, 0x68, 0x00, + 0x00, 0x40, 0x0a, 0x47, 0x02, 0x7f, 0x20, 0x19, + 0x06, 0x80, 0x6a, 0x84, 0x4b, 0x06, 0x40, 0x23, + 0x0a, 0x5b, 0x43, 0x3b, 0x60, 0x0b, 0x6a, 0x80, + 0x05, 0xc0, 0x0d, 0xc0, 0x60, 0x10, 0xbc, 0x90, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x5e, 0x40, + 0x00, 0x03, 0xfe, 0x00, 0xb5, 0x00, 0x49, 0x1d, + 0x62, 0xc8, 0x28, 0x00, 0xd0, 0x11, 0x28, 0x01, + 0xd0, 0x1b, 0x28, 0x02, 0xd0, 0x25, 0x28, 0x03, + 0xd1, 0x09, 0x48, 0x19, 0x68, 0x01, 0x08, 0x49, + 0x00, 0x49, 0x60, 0x01, 0x22, 0x01, 0x21, 0x01, + 0x20, 0x00, 0xf0, 0x0a, 0xfe, 0x6f, 0xbc, 0x08, + 0x47, 0x18, 0x48, 0x13, 0x68, 0x01, 0x08, 0x49, + 0x00, 0x49, 0x60, 0x01, 0x48, 0x11, 0x68, 0x01, + 0x04, 0x03, 0x43, 0x19, 0x60, 0x01, 0xbc, 0x08, + 0x47, 0x18, 0x48, 0x0d, 0x68, 0x01, 0x23, 0x01, + 0x43, 0x19, 0x60, 0x01, 0x48, 0x0b, 0x68, 0x01, + 0x4b, 0x0b, 0x40, 0x19, 0x60, 0x01, 0xbc, 0x08, + 0x47, 0x18, 0x48, 0x07, 0x68, 0x01, 0x08, 0x49, + 0x00, 0x49, 0x60, 0x01, 0x22, 0x00, 0x21, 0x00, + 0x20, 0x00, 0xf0, 0x0a, 0xfe, 0x4b, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xcc, + 0x6a, 0x00, 0x00, 0x18, 0x6c, 0x00, 0x00, 0x20, + 0xff, 0xdf, 0xff, 0xff, 0xb5, 0x90, 0x48, 0x11, + 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x0f, 0x48, 0x10, + 0xd5, 0x01, 0x69, 0x01, 0x18, 0x7f, 0x69, 0x00, + 0x10, 0x80, 0x4c, 0x0e, 0x42, 0xb8, 0xda, 0x0b, + 0x68, 0xe0, 0x28, 0x00, 0xd1, 0x08, 0x48, 0x0c, + 0x68, 0x01, 0x23, 0x02, 0x43, 0xdb, 0x40, 0x19, + 0x60, 0x01, 0x20, 0x02, 0xf0, 0x0a, 0xf9, 0xec, + 0x2f, 0x00, 0xd1, 0x04, 0x20, 0x01, 0x61, 0xe0, + 0x6b, 0xa0, 0x30, 0x01, 0x63, 0xa0, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x66, 0x00, 0x00, 0x80, + 0x2e, 0x08, 0x04, 0x4c, 0x2e, 0x08, 0x04, 0xcc, + 0x6c, 0x00, 0x00, 0x20, 0xb5, 0x00, 0x20, 0x03, + 0xf0, 0x0a, 0xf9, 0xd6, 0x20, 0x1e, 0xf0, 0x07, + 0xf9, 0xd3, 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, + 0x02, 0xd2, 0x21, 0x02, 0x20, 0x1e, 0xf0, 0x06, + 0xff, 0x81, 0x22, 0x00, 0xb4, 0x04, 0x23, 0x02, + 0x22, 0x02, 0x49, 0x07, 0x20, 0x1e, 0xf0, 0x06, + 0xfd, 0xb5, 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, + 0x21, 0x01, 0x20, 0x1e, 0xb0, 0x01, 0xf0, 0x06, + 0xff, 0x71, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xb5, 0x00, 0x21, 0x00, + 0x20, 0x0e, 0xf0, 0x0c, 0xfd, 0x4b, 0x20, 0x1f, + 0xf0, 0x07, 0xf8, 0xe4, 0x23, 0x03, 0x02, 0x5b, + 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, 0x20, 0x1f, + 0xf0, 0x06, 0xff, 0x5c, 0x20, 0x00, 0xf0, 0x0a, + 0xf8, 0x41, 0x22, 0x00, 0xb4, 0x04, 0x23, 0x01, + 0x22, 0x02, 0x49, 0x07, 0x20, 0x1f, 0xf0, 0x06, + 0xfd, 0x8d, 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, + 0x21, 0x01, 0x20, 0x1f, 0xb0, 0x01, 0xf0, 0x06, + 0xff, 0x49, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xfe, 0xb5, 0x80, 0x20, 0x0f, + 0x02, 0x40, 0x4f, 0x0a, 0x61, 0x38, 0x49, 0x0a, + 0x6c, 0x89, 0x61, 0x79, 0xf0, 0x01, 0xfe, 0x3a, + 0x1d, 0xf9, 0x31, 0x79, 0x61, 0x08, 0x28, 0x00, + 0xd0, 0x05, 0x20, 0x00, 0x61, 0xf8, 0x62, 0x38, + 0x64, 0xf8, 0x20, 0xff, 0x72, 0x08, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x4c, + 0x66, 0x00, 0x00, 0x80, 0xb5, 0x80, 0x4f, 0x05, + 0x69, 0x38, 0x28, 0x00, 0xd0, 0x03, 0xf0, 0x01, + 0xfe, 0x43, 0x20, 0x00, 0x61, 0x38, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0xcc, + 0xb5, 0x00, 0x4a, 0x0d, 0xb4, 0x04, 0x1f, 0x10, + 0x1e, 0x51, 0x1c, 0x13, 0xf7, 0xfc, 0xfb, 0x58, + 0x21, 0x33, 0x06, 0x49, 0x6d, 0x88, 0x6d, 0x4a, + 0x1a, 0x82, 0xb0, 0x01, 0x48, 0x07, 0x62, 0x42, + 0x6d, 0x49, 0x62, 0xc1, 0x21, 0x00, 0x65, 0x81, + 0x21, 0x01, 0x02, 0xc9, 0x64, 0x41, 0x21, 0x01, + 0x30, 0x60, 0x76, 0x01, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x04, 0x4c, + 0xb5, 0x00, 0x4a, 0x10, 0xb4, 0x04, 0x1c, 0x13, + 0x3a, 0x01, 0x49, 0x0f, 0x1e, 0xc8, 0xf7, 0xfc, + 0xfb, 0x37, 0x21, 0x33, 0x06, 0x49, 0x6d, 0x88, + 0x6d, 0x4a, 0x1a, 0x82, 0xb0, 0x01, 0x48, 0x0b, + 0x62, 0x42, 0x6d, 0x49, 0x62, 0xc1, 0x21, 0x00, + 0x65, 0x81, 0x21, 0x01, 0x02, 0xc9, 0x64, 0x41, + 0x21, 0x01, 0x30, 0x60, 0x76, 0x01, 0x48, 0x06, + 0x23, 0x02, 0x68, 0x01, 0x43, 0x19, 0x60, 0x01, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xfe, 0x2e, 0x08, 0x04, 0x4c, + 0x2e, 0x08, 0x00, 0x04, 0x48, 0x03, 0x23, 0x02, + 0x43, 0xdb, 0x68, 0x01, 0x40, 0x19, 0x60, 0x01, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x04, + 0xb5, 0xf0, 0x20, 0x0f, 0x02, 0x40, 0x4c, 0x11, + 0x61, 0x20, 0x20, 0x00, 0xf7, 0xfc, 0xfc, 0x4a, + 0x48, 0x0f, 0xf7, 0xfc, 0xfc, 0x47, 0x26, 0x00, + 0x1d, 0xe0, 0x30, 0x59, 0x77, 0x06, 0x25, 0xff, + 0x1d, 0xe7, 0x37, 0x79, 0x70, 0x3d, 0x20, 0x01, + 0x63, 0x78, 0x60, 0xe6, 0x69, 0x78, 0x28, 0x00, + 0xd1, 0x04, 0x20, 0x41, 0x01, 0x40, 0xf0, 0x01, + 0xfd, 0xa9, 0x61, 0x78, 0x69, 0x78, 0x28, 0x00, + 0xd0, 0x01, 0x76, 0x3e, 0x70, 0x3d, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x4c, + 0x00, 0x00, 0x1f, 0xff, 0xb5, 0x00, 0x20, 0x00, + 0xf7, 0xfd, 0xff, 0xde, 0x22, 0x00, 0xb4, 0x04, + 0x23, 0x00, 0x4a, 0x06, 0x21, 0x00, 0x20, 0x00, + 0xf7, 0xfc, 0xfa, 0xd6, 0x21, 0x00, 0x20, 0x0d, + 0xb0, 0x01, 0xf0, 0x0c, 0xfc, 0x6f, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xb5, 0x80, 0x22, 0x00, 0xb4, 0x04, 0x27, 0x00, + 0x1c, 0x3b, 0x4a, 0x17, 0x21, 0x00, 0x20, 0x00, + 0xf7, 0xfc, 0xfa, 0xc2, 0x22, 0x00, 0xb0, 0x01, + 0xb4, 0x04, 0x1c, 0x3b, 0x4a, 0x12, 0x49, 0x13, + 0x20, 0x00, 0xf7, 0xfc, 0xfa, 0xb9, 0x21, 0x33, + 0x06, 0x49, 0x6d, 0x88, 0x6d, 0x4a, 0x1a, 0x82, + 0xb0, 0x01, 0x48, 0x0f, 0x62, 0x42, 0x6d, 0x49, + 0x63, 0x01, 0x21, 0x01, 0x02, 0xc9, 0x64, 0x81, + 0x21, 0x01, 0x65, 0x87, 0x30, 0x60, 0x76, 0x01, + 0x77, 0x07, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, + 0xf7, 0xff, 0xfe, 0x28, 0x20, 0x00, 0xf7, 0xff, + 0xfe, 0x59, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x0c, + 0xfc, 0x39, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xfe, + 0x2e, 0x08, 0x04, 0x4c, 0xb5, 0xf0, 0x06, 0x05, + 0x0e, 0x2d, 0x20, 0x0f, 0x02, 0x40, 0x4f, 0x2f, + 0x26, 0x33, 0x06, 0x76, 0x61, 0x38, 0x6d, 0xb0, + 0x6d, 0x71, 0x1a, 0x40, 0x62, 0x78, 0x62, 0xb8, + 0x20, 0x00, 0x1d, 0xfc, 0x34, 0x79, 0x60, 0xe0, + 0x2d, 0x00, 0xd0, 0x02, 0x20, 0xff, 0xf7, 0xfd, + 0xff, 0x7b, 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, + 0x21, 0x00, 0x20, 0x00, 0xf7, 0xfc, 0xfa, 0x74, + 0x22, 0x01, 0x21, 0x01, 0x20, 0x00, 0xb0, 0x01, + 0xf0, 0x0a, 0xfc, 0xac, 0x21, 0x00, 0x20, 0x00, + 0xf0, 0x0a, 0xfd, 0x6c, 0x22, 0x00, 0xb4, 0x04, + 0x23, 0x00, 0x4a, 0x1d, 0x20, 0x00, 0x1e, 0x51, + 0xf7, 0xfc, 0xfa, 0x62, 0x20, 0x01, 0x63, 0x60, + 0x69, 0x60, 0xb0, 0x01, 0x28, 0x00, 0xd1, 0x04, + 0x20, 0x41, 0x01, 0x40, 0xf0, 0x01, 0xfd, 0x12, + 0x61, 0x60, 0x69, 0x60, 0x28, 0x00, 0xd0, 0x03, + 0x20, 0x00, 0x76, 0x20, 0x20, 0xff, 0x70, 0x20, + 0x6d, 0x70, 0x63, 0x38, 0x20, 0x01, 0x02, 0xc0, + 0x64, 0xb8, 0x20, 0x00, 0x26, 0x01, 0x65, 0xb8, + 0x1d, 0xf9, 0x31, 0x59, 0x76, 0x0e, 0x22, 0x00, + 0x21, 0x00, 0x20, 0x00, 0xf7, 0xff, 0xfd, 0xc6, + 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x0c, 0xfb, 0xda, + 0x20, 0x00, 0x60, 0xf8, 0x2d, 0x00, 0xd1, 0x02, + 0xf7, 0xff, 0xfd, 0xf0, 0x61, 0xe6, 0x20, 0x00, + 0x60, 0xb8, 0x66, 0x38, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x4c, + 0x00, 0x00, 0x1f, 0xff, 0xb5, 0xb0, 0x4f, 0x45, + 0x25, 0x00, 0x6d, 0x38, 0x4c, 0x44, 0x28, 0x05, + 0xd2, 0x14, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x10, 0x03, 0x2e, 0x65, + 0x73, 0x00, 0x4d, 0x40, 0x68, 0x28, 0x08, 0x41, + 0xd2, 0x08, 0x08, 0xc0, 0xd3, 0x09, 0xf7, 0xff, + 0xfe, 0xb3, 0x23, 0x04, 0x43, 0xdb, 0x68, 0x28, + 0x40, 0x18, 0x60, 0x28, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x6d, 0x78, 0x28, 0x00, 0xd0, 0xf9, + 0x28, 0x01, 0xd0, 0x01, 0x28, 0x05, 0xd1, 0x06, + 0xf0, 0x00, 0xf8, 0x6c, 0x8e, 0xa0, 0x28, 0x00, + 0xd1, 0xf0, 0xf0, 0x00, 0xf9, 0x29, 0x6d, 0x78, + 0x28, 0x04, 0xd0, 0x01, 0x28, 0x05, 0xd1, 0xe9, + 0x8e, 0xa0, 0x28, 0x00, 0xd1, 0xe6, 0xf0, 0x00, + 0xfa, 0x4b, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x8e, 0xe0, 0x28, 0x00, 0xd1, 0xde, 0x8d, 0xa0, + 0x06, 0x00, 0x0e, 0x00, 0x28, 0x06, 0xd1, 0x15, + 0x48, 0x27, 0x78, 0x00, 0x28, 0x00, 0xd0, 0x06, + 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x05, + 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0xc5, 0x6d, 0x78, + 0x28, 0x04, 0xd0, 0x01, 0x28, 0x05, 0xd1, 0x01, + 0xf0, 0x00, 0xfc, 0x2e, 0x85, 0xa5, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x8d, 0xa0, 0x28, 0x00, + 0xd1, 0xc0, 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x08, + 0x28, 0x04, 0xd0, 0x0b, 0x28, 0x05, 0xd1, 0xb9, + 0xf0, 0x00, 0xfd, 0xdc, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0xf0, 0x00, 0xfd, 0xb1, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x00, 0xfd, 0x80, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x8e, 0xe0, + 0x28, 0x00, 0xd1, 0xa7, 0x20, 0x06, 0x85, 0xa0, + 0x85, 0xe5, 0x20, 0x09, 0x02, 0x40, 0x86, 0xe0, + 0x20, 0x04, 0x65, 0x38, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x8e, 0xe0, 0x28, 0x00, 0xd1, 0x99, + 0x8d, 0xa0, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x06, + 0xd1, 0x94, 0x85, 0xa5, 0x65, 0x3d, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x4c, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x00, 0x04, + 0x2e, 0x08, 0x04, 0xcc, 0xb5, 0xb0, 0x48, 0x46, + 0x6c, 0xc1, 0x4c, 0x46, 0x64, 0x21, 0x69, 0x60, + 0x1a, 0x09, 0x1d, 0xe7, 0x37, 0x79, 0x63, 0xf9, + 0x29, 0x00, 0xda, 0x02, 0x69, 0x22, 0x18, 0x89, + 0x63, 0xf9, 0x23, 0xff, 0x6b, 0xf9, 0x33, 0x01, + 0x42, 0x99, 0xdb, 0x73, 0x22, 0x01, 0x03, 0x12, + 0x42, 0x91, 0xdd, 0x00, 0x63, 0xfa, 0x6b, 0xf9, + 0x08, 0x89, 0x00, 0x89, 0x63, 0xf9, 0x7a, 0x3a, + 0x2a, 0x00, 0xd0, 0x05, 0x23, 0xff, 0x03, 0x5b, + 0x1a, 0xc2, 0x61, 0xe2, 0x22, 0x00, 0x72, 0x3a, + 0x18, 0x42, 0x49, 0x35, 0x25, 0x12, 0x42, 0x8a, + 0xdd, 0x2c, 0x1a, 0x08, 0x64, 0x38, 0xf0, 0x18, + 0xf8, 0x1d, 0x4b, 0x32, 0x40, 0x18, 0xf0, 0x18, + 0xf8, 0x1d, 0x22, 0x00, 0x49, 0x30, 0xb4, 0x06, + 0x69, 0x60, 0x69, 0x39, 0x18, 0x41, 0x23, 0xff, + 0x03, 0x5b, 0x1a, 0xc9, 0x23, 0x0d, 0x06, 0x9b, + 0x1a, 0xc0, 0x6c, 0x3a, 0x1c, 0x2b, 0xf0, 0x0e, + 0xfd, 0x47, 0x22, 0x00, 0xb0, 0x02, 0x49, 0x28, + 0xb4, 0x06, 0x6b, 0xf8, 0x6c, 0x39, 0x1a, 0x42, + 0x69, 0x39, 0x1c, 0x2b, 0x48, 0x25, 0xf0, 0x0e, + 0xfd, 0x3b, 0xb0, 0x02, 0xf0, 0x17, 0xff, 0xfa, + 0x23, 0x01, 0x04, 0x9b, 0x43, 0x18, 0xf0, 0x17, + 0xff, 0xf9, 0xe0, 0x1d, 0xf0, 0x17, 0xff, 0xf2, + 0x4b, 0x1c, 0x40, 0x18, 0xf0, 0x17, 0xff, 0xf2, + 0x22, 0x00, 0x49, 0x1b, 0xb4, 0x06, 0x69, 0x60, + 0x69, 0x39, 0x18, 0x41, 0x23, 0xff, 0x03, 0x5b, + 0x1a, 0xc9, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, + 0x6b, 0xfa, 0x1c, 0x2b, 0xf0, 0x0e, 0xfd, 0x1c, + 0xb0, 0x02, 0xf0, 0x17, 0xff, 0xdb, 0x23, 0x01, + 0x04, 0x9b, 0x43, 0x18, 0xf0, 0x17, 0xff, 0xda, + 0x69, 0x60, 0x6b, 0xf9, 0x18, 0x40, 0x23, 0x0d, + 0x06, 0x9b, 0x1a, 0xc1, 0x61, 0x60, 0x4b, 0x0e, + 0x42, 0x99, 0xd3, 0x02, 0x69, 0x21, 0x1a, 0x40, + 0x61, 0x60, 0x23, 0xff, 0x03, 0x5b, 0x69, 0x60, + 0x1a, 0xc0, 0xe0, 0x00, 0xe0, 0x00, 0x62, 0x20, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x04, 0x4c, + 0x00, 0x1f, 0xfe, 0x00, 0xff, 0xfb, 0xff, 0xff, + 0x9e, 0x00, 0x08, 0x00, 0xcc, 0x1f, 0xe0, 0x00, + 0xcc, 0x1f, 0xfe, 0x00, 0x21, 0x00, 0x23, 0xff, + 0x68, 0x02, 0x33, 0xc1, 0x42, 0x9a, 0xd0, 0x01, + 0x1c, 0x08, 0x47, 0x70, 0x79, 0xc2, 0x0a, 0x12, + 0xd2, 0x01, 0x1c, 0x08, 0x47, 0x70, 0x7a, 0x41, + 0x23, 0x0e, 0x40, 0x19, 0x07, 0x49, 0x7a, 0x82, + 0x05, 0x92, 0x43, 0x11, 0x7a, 0xc2, 0x23, 0xfe, + 0x40, 0x1a, 0x03, 0x92, 0x43, 0x11, 0x7b, 0x02, + 0x01, 0xd2, 0x43, 0x11, 0x7b, 0x40, 0x40, 0x18, + 0x08, 0x40, 0x43, 0x08, 0x49, 0x01, 0x67, 0x08, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x4c, + 0xb5, 0xf0, 0xb0, 0x86, 0x4c, 0x8c, 0x6c, 0xe0, + 0x1d, 0xe7, 0x37, 0x79, 0x1d, 0xfd, 0x35, 0x39, + 0x28, 0x00, 0xd0, 0x04, 0x28, 0x01, 0xd0, 0x3a, + 0x28, 0x02, 0xd1, 0x73, 0xe0, 0x74, 0x69, 0xe0, + 0x6a, 0x21, 0x1a, 0x09, 0x63, 0xf9, 0x1c, 0x0a, + 0xd5, 0x02, 0x69, 0x21, 0x18, 0x51, 0x63, 0xf9, + 0x6b, 0xf9, 0x29, 0x04, 0xdb, 0x67, 0x69, 0x3e, + 0x5c, 0x31, 0x06, 0x0a, 0x65, 0x7a, 0x92, 0x05, + 0x1c, 0x41, 0x69, 0x20, 0x90, 0x04, 0xf0, 0x14, + 0xf8, 0x09, 0x61, 0xe1, 0x5c, 0x70, 0x04, 0x00, + 0x9a, 0x05, 0x18, 0x82, 0x65, 0x7a, 0x92, 0x03, + 0x98, 0x04, 0x31, 0x01, 0xf0, 0x13, 0xff, 0xfe, + 0x61, 0xe1, 0x5c, 0x70, 0x02, 0x00, 0x9a, 0x03, + 0x18, 0x80, 0x65, 0x78, 0x90, 0x02, 0x98, 0x04, + 0x31, 0x01, 0xf0, 0x13, 0xff, 0xf3, 0x61, 0xe1, + 0x5c, 0x70, 0x9a, 0x02, 0x18, 0x80, 0x65, 0x78, + 0x98, 0x04, 0x31, 0x01, 0xf0, 0x13, 0xff, 0xea, + 0x20, 0x01, 0x64, 0xe0, 0x61, 0xe1, 0x6a, 0x20, + 0x69, 0xe1, 0x1a, 0x40, 0x63, 0xf8, 0x1c, 0x01, + 0xd4, 0x05, 0x48, 0x67, 0x69, 0x06, 0x30, 0x80, + 0x69, 0x02, 0x92, 0x01, 0xe0, 0x03, 0x69, 0x20, + 0x18, 0x08, 0x63, 0xf8, 0xe7, 0xf5, 0x6b, 0xf8, + 0x90, 0x00, 0x28, 0x02, 0xdb, 0x22, 0x6d, 0x78, + 0x09, 0x01, 0x01, 0x09, 0x23, 0xff, 0x33, 0xc1, + 0x42, 0x99, 0xd1, 0x31, 0x9a, 0x01, 0x69, 0xe0, + 0x5c, 0x11, 0x02, 0x09, 0x83, 0x29, 0x1c, 0x41, + 0x1c, 0x30, 0xf0, 0x13, 0xff, 0xc3, 0x61, 0xe1, + 0x69, 0x38, 0x5c, 0x40, 0x8b, 0x2a, 0x18, 0x80, + 0x83, 0x28, 0x8b, 0x28, 0x30, 0x06, 0x83, 0x28, + 0x19, 0x88, 0x1f, 0x41, 0x1c, 0x30, 0xf0, 0x13, + 0xff, 0xb5, 0x61, 0xe1, 0x21, 0xff, 0x71, 0x39, + 0x20, 0x02, 0x64, 0xe0, 0x6c, 0xe0, 0x28, 0x02, + 0xd1, 0x00, 0xe0, 0x01, 0xe0, 0x94, 0xe0, 0x93, + 0x6a, 0x20, 0x69, 0xe1, 0x1a, 0x40, 0x63, 0xf8, + 0x1c, 0x01, 0xd5, 0x02, 0x69, 0x20, 0x18, 0x08, + 0x63, 0xf8, 0x79, 0x38, 0x28, 0x00, 0xd0, 0x13, + 0x20, 0x01, 0x02, 0xc0, 0x83, 0xa8, 0xe0, 0x11, + 0x02, 0x01, 0x65, 0x79, 0x9a, 0x01, 0x69, 0xe0, + 0x5c, 0x12, 0x18, 0x51, 0x65, 0x79, 0x1c, 0x41, + 0x1c, 0x30, 0xf0, 0x13, 0xff, 0x8f, 0x61, 0xe1, + 0x98, 0x00, 0x38, 0x01, 0x63, 0xf8, 0xe7, 0xb2, + 0x48, 0x3c, 0x83, 0xa8, 0x8b, 0x28, 0x6b, 0xf9, + 0x42, 0x88, 0xda, 0x01, 0x63, 0xf8, 0xe0, 0x02, + 0x8b, 0xa8, 0x42, 0x81, 0xdb, 0x68, 0x8b, 0xa8, + 0x6b, 0xf9, 0x42, 0x81, 0xdd, 0x00, 0x63, 0xf8, + 0x48, 0x35, 0x21, 0x00, 0x66, 0x78, 0x80, 0x01, + 0x30, 0x02, 0x21, 0xff, 0x31, 0xc1, 0x66, 0x78, + 0x80, 0x01, 0x48, 0x32, 0x66, 0x78, 0x79, 0x39, + 0x29, 0x00, 0xd0, 0x21, 0x21, 0x00, 0x71, 0x39, + 0x69, 0x3b, 0x69, 0x20, 0x18, 0x1a, 0xb4, 0x04, + 0x69, 0xe0, 0x18, 0x18, 0x6b, 0xfa, 0x49, 0x2a, + 0xf0, 0x00, 0xfe, 0xec, 0x6b, 0xf8, 0x38, 0x06, + 0x6e, 0x79, 0x80, 0x08, 0x31, 0x02, 0x66, 0x79, + 0xb0, 0x01, 0x48, 0x25, 0xf7, 0xff, 0xff, 0x02, + 0x8b, 0x28, 0x6b, 0xf9, 0x1a, 0x40, 0x83, 0x28, + 0x69, 0xe0, 0x6b, 0xf9, 0x18, 0x41, 0x69, 0x20, + 0xf0, 0x13, 0xff, 0x4c, 0x61, 0xe1, 0xe0, 0x26, + 0x6b, 0xf9, 0x31, 0x03, 0x80, 0x01, 0x48, 0x1e, + 0x21, 0x01, 0x03, 0xc9, 0x66, 0x78, 0x80, 0x01, + 0x30, 0x02, 0x21, 0xff, 0x66, 0x78, 0x80, 0x01, + 0x48, 0x1a, 0x66, 0x78, 0x69, 0x3b, 0x69, 0x20, + 0x18, 0x1a, 0xb4, 0x04, 0x69, 0xe0, 0x18, 0x18, + 0x6b, 0xfa, 0x49, 0x17, 0xf0, 0x00, 0xfe, 0xbe, + 0x8b, 0x28, 0x6b, 0xf9, 0x1a, 0x40, 0x83, 0x28, + 0x69, 0xe0, 0x6b, 0xfe, 0x19, 0x81, 0x69, 0x20, + 0xb0, 0x01, 0xf0, 0x13, 0xff, 0x27, 0x1d, 0xf0, + 0x30, 0x02, 0x61, 0xe1, 0x63, 0xf8, 0x8b, 0x28, + 0x28, 0x00, 0xd1, 0x01, 0x21, 0x00, 0x64, 0xe0, + 0x21, 0x10, 0x48, 0x0c, 0x85, 0x01, 0x6b, 0xf9, + 0x85, 0x41, 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, + 0xb0, 0x06, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x04, 0x4c, 0x00, 0x00, 0x07, 0xf7, + 0x2c, 0x00, 0x02, 0x00, 0x2c, 0x00, 0x02, 0x04, + 0x2c, 0x00, 0x02, 0x06, 0x2c, 0x00, 0x02, 0x0a, + 0x2c, 0x00, 0x02, 0x09, 0x2c, 0x00, 0x1f, 0xc0, + 0xb5, 0xf0, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x40, + 0xb0, 0x81, 0x4f, 0x77, 0x63, 0xb8, 0x6a, 0xf9, + 0x1a, 0x40, 0x1d, 0xfc, 0x34, 0x79, 0x63, 0xe0, + 0x28, 0x00, 0xda, 0x02, 0x6a, 0x79, 0x18, 0x40, + 0x63, 0xe0, 0x6b, 0xe0, 0x4b, 0x71, 0x42, 0x98, + 0xdc, 0x03, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x6d, 0xb9, 0x48, 0x6e, 0x1d, 0xc5, + 0x35, 0x59, 0x29, 0x00, 0xd1, 0x16, 0x7e, 0x01, + 0x29, 0x00, 0xd1, 0x13, 0x21, 0x01, 0x75, 0x01, + 0x21, 0x05, 0x84, 0x29, 0x23, 0x0d, 0x06, 0x9b, + 0x6c, 0x79, 0x1a, 0xca, 0x68, 0x52, 0x31, 0x08, + 0x23, 0x05, 0x02, 0x5b, 0x64, 0x79, 0x66, 0xba, + 0x42, 0x99, 0xdb, 0x06, 0x21, 0x01, 0x02, 0xc9, + 0x64, 0x79, 0xe0, 0x02, 0x21, 0x00, 0x75, 0x01, + 0x84, 0x29, 0x8c, 0x29, 0x1c, 0x4a, 0x6a, 0xfb, + 0x1a, 0x9a, 0x07, 0x92, 0x0f, 0x92, 0x18, 0x51, + 0x84, 0x29, 0x7e, 0x01, 0x29, 0x00, 0xd0, 0x03, + 0x21, 0x00, 0x66, 0x39, 0x66, 0x79, 0x76, 0x01, + 0x6c, 0x79, 0x4a, 0x58, 0x69, 0x52, 0x42, 0x91, + 0xd0, 0x26, 0x6e, 0x7a, 0x2a, 0x00, 0xd1, 0x10, + 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc9, 0x68, 0x09, + 0x66, 0x79, 0x1c, 0x0a, 0x6e, 0x3b, 0x18, 0x59, + 0x66, 0x39, 0x4b, 0x51, 0x42, 0x99, 0xdb, 0x04, + 0x32, 0x01, 0x31, 0x01, 0x40, 0x19, 0x66, 0x39, + 0x66, 0x7a, 0x6e, 0x79, 0x6d, 0xba, 0x1a, 0x89, + 0x65, 0x21, 0x91, 0x00, 0x8c, 0x2b, 0x4e, 0x4b, + 0x1a, 0xf3, 0x42, 0x8b, 0xd3, 0x04, 0x63, 0xe1, + 0x21, 0x00, 0x65, 0xb9, 0x66, 0x79, 0xe0, 0x0a, + 0x18, 0xd1, 0x63, 0xe3, 0x65, 0xb9, 0xe0, 0x06, + 0x8c, 0x29, 0x4a, 0x44, 0x1a, 0x51, 0x63, 0xe1, + 0x6d, 0xba, 0x18, 0x51, 0x65, 0xb9, 0x49, 0x42, + 0x66, 0x61, 0x8c, 0x2a, 0x6b, 0xe1, 0x18, 0x89, + 0x31, 0x03, 0x83, 0xa9, 0x22, 0x00, 0x6e, 0x61, + 0x80, 0x0a, 0x31, 0x02, 0x22, 0xff, 0x32, 0xe1, + 0x66, 0x61, 0x80, 0x0a, 0x31, 0x02, 0x66, 0x61, + 0x8b, 0xaa, 0x80, 0x0a, 0x31, 0x02, 0x66, 0x61, + 0x7d, 0x00, 0x28, 0x00, 0xd0, 0x1d, 0x4a, 0x37, + 0x80, 0x0a, 0x1c, 0x88, 0x66, 0x60, 0x8c, 0x29, + 0x02, 0x09, 0x6e, 0xba, 0x0f, 0x52, 0x23, 0x06, + 0x40, 0x1a, 0x43, 0x11, 0x23, 0x21, 0x43, 0x19, + 0x80, 0x01, 0x30, 0x02, 0x66, 0x60, 0x6e, 0xb9, + 0x0b, 0x89, 0x23, 0x01, 0x43, 0x19, 0x80, 0x01, + 0x30, 0x02, 0x66, 0x60, 0x6e, 0xb9, 0x00, 0x49, + 0x43, 0x19, 0x80, 0x01, 0x30, 0x02, 0x66, 0x60, + 0xe0, 0x0b, 0x20, 0x01, 0x03, 0xc0, 0x80, 0x08, + 0x31, 0x02, 0x66, 0x61, 0x8c, 0x28, 0x02, 0x00, + 0x23, 0xff, 0x43, 0x18, 0x80, 0x08, 0x31, 0x02, + 0x66, 0x61, 0x48, 0x23, 0x6e, 0x61, 0x80, 0x08, + 0x31, 0x02, 0x66, 0x61, 0x80, 0x08, 0x31, 0x02, + 0x22, 0x33, 0x06, 0x52, 0x66, 0x61, 0x00, 0x53, + 0x6d, 0x90, 0x18, 0xc2, 0xb4, 0x04, 0x08, 0x5a, + 0x6d, 0x50, 0x18, 0xc6, 0x8c, 0x28, 0x4b, 0x1b, + 0x18, 0xc1, 0x00, 0x53, 0x6a, 0xf8, 0x18, 0xc0, + 0x6b, 0xe2, 0x1c, 0x33, 0xf0, 0x00, 0xfd, 0xb6, + 0x6a, 0xf8, 0x6b, 0xe1, 0x18, 0x40, 0x22, 0x33, + 0x06, 0x52, 0x62, 0xf8, 0x6d, 0x92, 0xb0, 0x01, + 0x42, 0x90, 0xdb, 0x02, 0x6a, 0x79, 0x1a, 0x40, + 0x62, 0xf8, 0x21, 0xff, 0x31, 0x11, 0x48, 0x10, + 0x85, 0x01, 0x8b, 0xa9, 0x31, 0x06, 0x85, 0x41, + 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0x4c, 0x00, 0x00, 0x0f, 0xee, + 0x2e, 0x08, 0x04, 0xac, 0xcc, 0x00, 0x0f, 0x00, + 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xf7, + 0x2c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x80, + 0x00, 0x00, 0xff, 0xff, 0x2c, 0x00, 0x02, 0x09, + 0x2c, 0x00, 0x1f, 0xc0, 0xb5, 0xb0, 0x1c, 0x07, + 0xb0, 0x83, 0x4d, 0x20, 0x6b, 0x28, 0xf7, 0xff, + 0xfa, 0x51, 0x48, 0x1f, 0x6c, 0xc1, 0x6c, 0x80, + 0x1a, 0x08, 0xd5, 0x03, 0x1f, 0xe9, 0x39, 0x79, + 0x69, 0x09, 0x18, 0x40, 0x6e, 0xa9, 0x29, 0x00, + 0xd0, 0x22, 0x29, 0x10, 0xd0, 0x20, 0x29, 0x20, + 0xd0, 0x24, 0x29, 0x30, 0xd1, 0x04, 0x24, 0x2d, + 0x43, 0x44, 0xd5, 0x00, 0x34, 0x3f, 0x11, 0xa4, + 0x46, 0x6a, 0xa8, 0x01, 0xa9, 0x02, 0xf7, 0xff, + 0xfa, 0x17, 0x1b, 0x38, 0x99, 0x02, 0x1a, 0x08, + 0x22, 0x7d, 0x01, 0x52, 0x42, 0x90, 0xdc, 0x01, + 0x42, 0x90, 0xda, 0x05, 0x1a, 0x09, 0x91, 0x02, + 0x22, 0x00, 0x20, 0x00, 0xf7, 0xff, 0xf9, 0xf2, + 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x01, 0x04, 0x1a, 0x24, 0xd5, 0x00, 0x34, 0x1f, + 0x11, 0x64, 0xe7, 0xe1, 0x21, 0x4b, 0x43, 0x41, + 0x20, 0x93, 0xf0, 0x13, 0xfd, 0xb7, 0x1c, 0x04, + 0xe7, 0xda, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xcc, + 0x66, 0x00, 0x00, 0x80, 0xb5, 0x90, 0x1c, 0x07, + 0xb0, 0x83, 0x4c, 0x18, 0x6f, 0x60, 0x30, 0x01, + 0x46, 0x6a, 0x67, 0x60, 0xa8, 0x01, 0xa9, 0x02, + 0xf7, 0xff, 0xf9, 0xe6, 0x4b, 0x14, 0x18, 0xf9, + 0x98, 0x02, 0x1a, 0x40, 0x4b, 0x13, 0x42, 0x98, + 0xdc, 0x04, 0x42, 0xd8, 0xdb, 0x02, 0x69, 0xe0, + 0x28, 0x01, 0xd1, 0x07, 0x91, 0x02, 0x20, 0x00, + 0x90, 0x01, 0x22, 0x00, 0xf7, 0xff, 0xf9, 0xbe, + 0x20, 0x01, 0x61, 0xe0, 0x69, 0xe0, 0x28, 0x00, + 0xd0, 0x0b, 0x6b, 0x20, 0xf7, 0xff, 0xf9, 0xea, + 0x6f, 0x60, 0x67, 0xa0, 0x48, 0x08, 0x60, 0x07, + 0x6f, 0xe0, 0x30, 0x01, 0x67, 0xe0, 0x20, 0x00, + 0x61, 0xe0, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xcc, + 0xff, 0xff, 0xec, 0x78, 0x00, 0x02, 0xbf, 0x20, + 0x2e, 0x08, 0x05, 0x4c, 0xb4, 0xf0, 0x1c, 0x1c, + 0x23, 0x00, 0x9f, 0x04, 0x60, 0x3b, 0x79, 0x85, + 0x23, 0xc0, 0x40, 0x1d, 0x4b, 0x33, 0x2d, 0x80, + 0xd1, 0x16, 0x25, 0x02, 0x60, 0x9d, 0x79, 0xc5, + 0x0a, 0x2b, 0xd3, 0x06, 0x7a, 0x45, 0x23, 0xe0, + 0x40, 0x2b, 0x2b, 0x20, 0xd1, 0x01, 0x23, 0x09, + 0x60, 0x3b, 0x7a, 0x03, 0x33, 0x09, 0x60, 0x13, + 0x79, 0x02, 0x02, 0x12, 0x79, 0x45, 0x43, 0x2a, + 0x32, 0x06, 0x1a, 0xd2, 0x60, 0x22, 0xe0, 0x25, + 0x25, 0x06, 0x26, 0x01, 0x60, 0x9e, 0x79, 0x83, + 0x2b, 0xff, 0xd1, 0x03, 0x35, 0x01, 0x5d, 0x43, + 0x2b, 0xff, 0xd0, 0xfb, 0x5d, 0x46, 0x23, 0xc0, + 0x40, 0x33, 0x2b, 0x40, 0xd1, 0x00, 0x35, 0x02, + 0x5d, 0x46, 0x09, 0x33, 0x07, 0x9b, 0xd0, 0x08, + 0x60, 0x3d, 0x5d, 0x46, 0x09, 0x73, 0xd3, 0x02, + 0x1d, 0xeb, 0x33, 0x03, 0xe0, 0x02, 0x1d, 0x6b, + 0xe0, 0x00, 0x1c, 0x6b, 0x60, 0x13, 0x79, 0x02, + 0x02, 0x12, 0x79, 0x45, 0x43, 0x2a, 0x32, 0x06, + 0x1a, 0xd2, 0x60, 0x22, 0x68, 0x3a, 0x2a, 0x00, + 0xd0, 0x20, 0x5c, 0x82, 0x23, 0x0e, 0x40, 0x1a, + 0x07, 0x52, 0x60, 0x0a, 0x68, 0x3b, 0x18, 0xc3, + 0x78, 0x5b, 0x05, 0x9b, 0x43, 0x1a, 0x60, 0x0a, + 0x68, 0x3b, 0x18, 0xc3, 0x78, 0x9c, 0x23, 0xfe, + 0x40, 0x23, 0x03, 0x9b, 0x43, 0x1a, 0x60, 0x0a, + 0x68, 0x3b, 0x18, 0xc3, 0x78, 0xdb, 0x01, 0xdb, + 0x43, 0x1a, 0x60, 0x0a, 0x68, 0x3b, 0x18, 0xc0, + 0x79, 0x00, 0x23, 0xfe, 0x40, 0x18, 0x08, 0x40, + 0x43, 0x10, 0x60, 0x08, 0x20, 0x00, 0xbc, 0xf0, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x4c, + 0xb5, 0xb0, 0xb0, 0x83, 0x48, 0x3f, 0x49, 0x40, + 0x8d, 0xc9, 0x4c, 0x40, 0x63, 0xe1, 0x29, 0x06, + 0xda, 0x03, 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0x01, 0x09, 0x49, 0x01, 0x49, + 0x23, 0xff, 0x33, 0xe1, 0x42, 0x99, 0xd0, 0x03, + 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x46, 0x6a, 0xb4, 0x04, 0xaa, 0x03, 0xab, 0x02, + 0x49, 0x35, 0xf7, 0xff, 0xff, 0x6f, 0xb0, 0x01, + 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, 0x99, 0x01, + 0x18, 0x40, 0x6b, 0xe1, 0x42, 0x88, 0xd0, 0x03, + 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x98, 0x00, 0x4f, 0x2c, 0x28, 0x00, 0xd0, 0x25, + 0x6e, 0x38, 0x6d, 0xb9, 0x18, 0x40, 0x23, 0x01, + 0x06, 0x1b, 0x66, 0x38, 0x42, 0x98, 0xdb, 0x04, + 0x43, 0xdb, 0x18, 0xc0, 0x66, 0x38, 0x1e, 0x48, + 0x65, 0xb8, 0x23, 0x0d, 0x06, 0x9b, 0x6d, 0xb8, + 0x6c, 0xb9, 0x1a, 0xc9, 0x60, 0x08, 0x6e, 0xe0, + 0x6c, 0xb9, 0x1a, 0xc9, 0x60, 0x48, 0x20, 0x00, + 0x65, 0xb8, 0x6c, 0xb8, 0x30, 0x08, 0x23, 0x05, + 0x02, 0x5b, 0x64, 0xb8, 0x42, 0x98, 0xd1, 0x02, + 0x20, 0x01, 0x02, 0xc0, 0x64, 0xb8, 0x6c, 0xb8, + 0x49, 0x19, 0x61, 0x48, 0x24, 0x33, 0x06, 0x64, + 0x00, 0x63, 0x6d, 0xa0, 0x18, 0xc2, 0xb4, 0x04, + 0x6d, 0x60, 0x18, 0xc5, 0x6e, 0x60, 0x18, 0xc1, + 0x98, 0x03, 0x4b, 0x0e, 0x18, 0xc0, 0x9a, 0x02, + 0x1c, 0x2b, 0xf0, 0x00, 0xfc, 0x53, 0xb0, 0x01, + 0x6d, 0xb8, 0x99, 0x01, 0x18, 0x40, 0x65, 0xb8, + 0x48, 0x0e, 0x68, 0x02, 0x18, 0x51, 0x60, 0x01, + 0x6e, 0x60, 0x6d, 0xa1, 0x42, 0x88, 0xdb, 0x04, + 0x48, 0x0a, 0x68, 0x01, 0x6a, 0x7a, 0x1a, 0x89, + 0x60, 0x01, 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x04, 0xcc, + 0x2e, 0x08, 0x05, 0x38, 0x2e, 0x08, 0x04, 0x4c, + 0xcc, 0x00, 0x0f, 0x00, 0x66, 0x00, 0x00, 0x64, + 0xb5, 0xf0, 0xb0, 0x83, 0x4e, 0x65, 0x25, 0x00, + 0x4f, 0x65, 0x6a, 0xf8, 0xf7, 0xff, 0xf8, 0xca, + 0x48, 0x64, 0x8d, 0xc0, 0x63, 0xf8, 0x28, 0x0a, + 0xda, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0x34, 0x09, 0x60, 0x01, 0x40, + 0x23, 0xff, 0x33, 0xc1, 0x42, 0x98, 0xd0, 0x07, + 0x23, 0xff, 0x33, 0xbe, 0x42, 0x9c, 0xd0, 0x03, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x46, 0x6a, 0xb4, 0x04, 0xaa, 0x03, 0xab, 0x02, + 0x49, 0x57, 0x1c, 0x30, 0xf7, 0xff, 0xfe, 0xd6, + 0xb0, 0x01, 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, + 0x99, 0x01, 0x18, 0x41, 0x6b, 0xfa, 0x42, 0x91, + 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x21, 0x01, 0x1c, 0x22, 0x4c, 0x4d, + 0x23, 0xff, 0x33, 0xbe, 0x42, 0x9a, 0xd1, 0x3c, + 0x5c, 0x30, 0x28, 0xa0, 0xd0, 0x03, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xe0, + 0x28, 0x00, 0xd1, 0x1b, 0x20, 0x02, 0x63, 0x78, + 0x60, 0xe1, 0x21, 0x00, 0x20, 0x00, 0xf0, 0x09, + 0xfa, 0x75, 0x20, 0x00, 0xf7, 0xfb, 0xfe, 0x0a, + 0x98, 0x02, 0x4b, 0x3c, 0x18, 0xc0, 0x79, 0x40, + 0x23, 0x30, 0x40, 0x18, 0x66, 0xb8, 0xd0, 0x16, + 0x28, 0x10, 0xd0, 0x14, 0x28, 0x20, 0xd0, 0x17, + 0x28, 0x30, 0xd1, 0x03, 0x21, 0x20, 0x20, 0x1e, + 0xf0, 0x09, 0xfd, 0x8f, 0x98, 0x00, 0x28, 0x00, + 0xd0, 0x2b, 0x6d, 0x60, 0x28, 0x05, 0xd1, 0x28, + 0x68, 0xf8, 0x28, 0x00, 0xd1, 0x25, 0x6f, 0x38, + 0xf7, 0xff, 0xfe, 0x08, 0xe0, 0x21, 0x21, 0x02, + 0x20, 0x1e, 0xf0, 0x09, 0xfd, 0x7e, 0xe7, 0xed, + 0x21, 0x08, 0x20, 0x1e, 0xf0, 0x09, 0xfd, 0x79, + 0xe7, 0xe8, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x08, + 0x20, 0x00, 0x63, 0x79, 0x21, 0x00, 0x60, 0xe0, + 0xf0, 0x09, 0xfa, 0x40, 0x20, 0x02, 0xf0, 0x09, + 0xfa, 0x93, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x08, + 0x6d, 0x60, 0x28, 0x05, 0xd1, 0x05, 0x68, 0xf8, + 0x28, 0x00, 0xd1, 0x02, 0x6f, 0x38, 0xf7, 0xff, + 0xfe, 0x2d, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x01, + 0x98, 0x02, 0x1d, 0xc5, 0x6b, 0xf8, 0x1b, 0x42, + 0x63, 0xfa, 0x7e, 0x39, 0x69, 0x78, 0x18, 0x41, + 0x4b, 0x16, 0x18, 0xe8, 0xf7, 0xfb, 0xfb, 0xb0, + 0x7e, 0x38, 0x6b, 0xf9, 0x18, 0x40, 0x07, 0x81, + 0x0f, 0x89, 0x76, 0x39, 0x1a, 0x44, 0x20, 0x01, + 0x06, 0x00, 0x49, 0x15, 0x60, 0x08, 0xf0, 0x17, + 0xfb, 0x1d, 0x4b, 0x14, 0x40, 0x18, 0xf0, 0x17, + 0xfb, 0x1d, 0x22, 0x04, 0x49, 0x10, 0xb4, 0x06, + 0x23, 0x12, 0x21, 0x1e, 0x69, 0x78, 0x1c, 0x22, + 0xf0, 0x0e, 0xf8, 0x4e, 0xb0, 0x02, 0xf0, 0x17, + 0xfb, 0x0d, 0x23, 0x01, 0x04, 0x9b, 0x43, 0x18, + 0xf0, 0x17, 0xfb, 0x0c, 0x69, 0x78, 0x59, 0x01, + 0x60, 0x01, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, + 0x2e, 0x08, 0x04, 0xcc, 0x2c, 0x00, 0x1f, 0xc0, + 0x2e, 0x08, 0x05, 0x3c, 0x2e, 0x08, 0x04, 0x4c, + 0x9e, 0x00, 0x08, 0x00, 0xff, 0xfb, 0xff, 0xff, + 0x20, 0x33, 0x06, 0x40, 0x6e, 0x81, 0x6e, 0x40, + 0x1a, 0x09, 0x48, 0x0f, 0x63, 0xc1, 0x29, 0x00, + 0xdc, 0x04, 0x1f, 0xc2, 0x3a, 0x79, 0x6a, 0x52, + 0x18, 0x89, 0x63, 0xc1, 0x6b, 0xc1, 0x08, 0x89, + 0x00, 0x89, 0x23, 0x01, 0x02, 0xdb, 0x63, 0xc1, + 0x42, 0x99, 0xdd, 0x0b, 0x4a, 0x07, 0x42, 0x91, + 0xdd, 0x00, 0x63, 0xc2, 0x4a, 0x06, 0x49, 0x07, + 0x85, 0x8a, 0x6b, 0xc0, 0x85, 0xc8, 0x20, 0x09, + 0x02, 0x40, 0x86, 0xc8, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0xcc, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x02, 0x06, 0x2c, 0x00, 0x1f, 0xc0, + 0x48, 0x0f, 0x78, 0x01, 0x29, 0x00, 0xd0, 0x1a, + 0x49, 0x0e, 0x6c, 0x8a, 0x6c, 0xc9, 0x1a, 0x51, + 0x63, 0xc1, 0x1c, 0x0a, 0x29, 0x00, 0xdc, 0x04, + 0x1f, 0xc1, 0x39, 0x79, 0x69, 0x09, 0x18, 0x51, + 0x63, 0xc1, 0x23, 0x01, 0x03, 0x1b, 0x6b, 0xc1, + 0x42, 0x99, 0xdb, 0x08, 0x22, 0xff, 0x32, 0x07, + 0x49, 0x05, 0x85, 0x8a, 0x6b, 0xc0, 0x85, 0xc8, + 0x20, 0x09, 0x02, 0x40, 0x86, 0xc8, 0x47, 0x70, + 0x2e, 0x08, 0x04, 0xcc, 0x66, 0x00, 0x00, 0x80, + 0x2c, 0x00, 0x1f, 0xc0, 0xb4, 0x80, 0x20, 0x00, + 0x49, 0x1e, 0x6c, 0x8a, 0x6c, 0xc9, 0x1a, 0x52, + 0x49, 0x1d, 0x2a, 0x00, 0xdc, 0x01, 0x69, 0x0b, + 0x18, 0xd2, 0x23, 0x01, 0x02, 0xdb, 0x42, 0x9a, + 0xdd, 0x00, 0x08, 0xd8, 0x22, 0x33, 0x06, 0x52, + 0x6e, 0x93, 0x6e, 0x52, 0x1a, 0x9a, 0x2a, 0x00, + 0xdc, 0x01, 0x6a, 0x4b, 0x18, 0xd2, 0x08, 0x92, + 0x00, 0x92, 0x4b, 0x14, 0x68, 0xdb, 0x2b, 0x00, + 0xd0, 0x06, 0x23, 0x01, 0x03, 0x1b, 0x6a, 0x4f, + 0x18, 0xfb, 0x6a, 0x89, 0x1a, 0x59, 0xe0, 0x01, + 0x21, 0x01, 0x03, 0x09, 0x42, 0x8a, 0xdd, 0x04, + 0x04, 0x00, 0x0c, 0x00, 0x23, 0x01, 0x02, 0x5b, + 0x43, 0x18, 0x28, 0x00, 0xd0, 0x0b, 0x4b, 0x0a, + 0x42, 0x9a, 0xdd, 0x00, 0x1c, 0x1a, 0x21, 0x06, + 0x43, 0x01, 0x48, 0x08, 0x85, 0x81, 0x85, 0xc2, + 0x21, 0x09, 0x02, 0x49, 0x86, 0xc1, 0xbc, 0x80, + 0x47, 0x70, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, + 0x2e, 0x08, 0x04, 0x4c, 0x2e, 0x08, 0x04, 0xcc, + 0x00, 0x00, 0xff, 0xff, 0x2c, 0x00, 0x1f, 0xc0, + 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x4f, 0x13, + 0x6d, 0x39, 0x29, 0x00, 0xd1, 0x10, 0x24, 0x01, + 0x28, 0x01, 0xd0, 0x10, 0x28, 0x04, 0xd0, 0x15, + 0x28, 0x05, 0xd1, 0x09, 0xf7, 0xff, 0xf8, 0x50, + 0xf7, 0xff, 0xf8, 0x04, 0x20, 0x00, 0x66, 0xf8, + 0x67, 0x38, 0x20, 0x05, 0x65, 0x78, 0x65, 0x3c, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, + 0xff, 0xf9, 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x3c, + 0x20, 0x04, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x4c, + 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x4f, 0x23, + 0x6d, 0x39, 0x29, 0x00, 0xd0, 0x0e, 0x29, 0x02, + 0xd1, 0x09, 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x34, + 0x28, 0x04, 0xd0, 0x27, 0x28, 0x05, 0xd1, 0x02, + 0x20, 0xff, 0xf7, 0xff, 0xf8, 0xcf, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x24, 0x02, 0x28, 0x01, + 0xd0, 0x0c, 0x28, 0x04, 0xd0, 0x12, 0x28, 0x05, + 0xd1, 0xf5, 0x20, 0x00, 0xf7, 0xff, 0xf8, 0xc2, + 0x20, 0x05, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x40, + 0x20, 0x01, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x78, + 0x20, 0x04, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x21, 0x00, 0x20, 0x0e, + 0xf0, 0x0b, 0xfc, 0xd8, 0x21, 0x00, 0x20, 0x0d, + 0xf0, 0x0b, 0xfc, 0xd4, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x02, 0xf0, 0x09, 0xf9, 0x34, + 0x20, 0xff, 0x49, 0x03, 0x70, 0x08, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x4c, + 0x2e, 0x08, 0x04, 0xcc, 0xb5, 0xf0, 0x4f, 0x2b, + 0x24, 0x00, 0x6d, 0x38, 0x28, 0x01, 0xd0, 0x1e, + 0x28, 0x02, 0xd1, 0x19, 0x26, 0x03, 0x6d, 0x78, + 0x1d, 0xfd, 0x35, 0x79, 0x28, 0x01, 0xd0, 0x34, + 0x28, 0x04, 0xd0, 0x3f, 0x28, 0x05, 0xd1, 0x0f, + 0x20, 0x02, 0x63, 0x6c, 0xf0, 0x09, 0xf9, 0x14, + 0x20, 0x00, 0xf7, 0xfb, 0xfc, 0x53, 0xf7, 0xff, + 0xf8, 0x29, 0x65, 0x3e, 0x20, 0x00, 0x65, 0x78, + 0xf7, 0xfe, 0xfe, 0xc0, 0x20, 0x01, 0x61, 0xe8, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x6d, 0x78, + 0x28, 0x01, 0xd0, 0x0c, 0x28, 0x04, 0xd0, 0x11, + 0x28, 0x05, 0xd1, 0xf5, 0xf7, 0xfe, 0xff, 0x8a, + 0xf7, 0xfe, 0xff, 0xe0, 0x65, 0x3c, 0x65, 0x7c, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, + 0xff, 0x81, 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, 0xff, 0xd2, + 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x63, 0x6c, 0x20, 0x02, 0x60, 0xfc, + 0xf0, 0x09, 0xf8, 0xe2, 0x20, 0x00, 0xf7, 0xfb, + 0xfc, 0x21, 0x65, 0x7c, 0x65, 0x3e, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, 0xff, 0xf2, + 0x65, 0x7c, 0x65, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x4c, + 0xb5, 0x90, 0x4c, 0x1b, 0x68, 0xe0, 0x28, 0x03, + 0xd0, 0x1f, 0x1f, 0xe7, 0x3f, 0x79, 0x6d, 0x38, + 0x28, 0x02, 0xd1, 0x1a, 0x6d, 0x78, 0x28, 0x01, + 0xd0, 0x1a, 0x28, 0x04, 0xd0, 0x20, 0x28, 0x05, + 0xd1, 0x13, 0x4a, 0x14, 0x49, 0x14, 0x48, 0x15, + 0xf7, 0xfe, 0xfe, 0x52, 0x21, 0x00, 0x20, 0x0e, + 0xf0, 0x0b, 0xfc, 0x50, 0x20, 0x01, 0xf0, 0x09, + 0xf8, 0xb3, 0x20, 0x03, 0x60, 0xe0, 0x68, 0xf8, + 0x28, 0x00, 0xd0, 0x02, 0x20, 0x01, 0xf0, 0x09, + 0xf8, 0xab, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x01, 0xf0, 0x09, 0xf8, 0xa5, 0x20, 0x00, + 0x70, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x21, 0x00, 0x20, 0x0b, 0xf0, 0x0b, 0xfc, 0x36, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0xcc, 0x2e, 0x08, 0x05, 0x58, + 0x2e, 0x08, 0x05, 0x50, 0x2e, 0x08, 0x05, 0x54, + 0xb5, 0xf0, 0x4c, 0x21, 0x6d, 0x20, 0x28, 0x02, + 0xd1, 0x24, 0x26, 0xff, 0x6d, 0x60, 0x1d, 0xe7, + 0x37, 0x79, 0x28, 0x01, 0xd0, 0x1d, 0x28, 0x04, + 0xd0, 0x1f, 0x28, 0x05, 0xd1, 0x1a, 0x20, 0x01, + 0xf0, 0x09, 0xf8, 0x7e, 0x25, 0x00, 0x68, 0xe0, + 0x28, 0x00, 0xd0, 0x04, 0x21, 0x00, 0x20, 0x00, + 0xf0, 0x09, 0xf8, 0x20, 0x60, 0xe5, 0x70, 0x3e, + 0x68, 0xf8, 0x28, 0x03, 0xd1, 0x14, 0x48, 0x13, + 0x22, 0x00, 0x68, 0x41, 0x20, 0x00, 0xf7, 0xfe, + 0xfd, 0xed, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0x1e, + 0xe0, 0x0f, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x0b, + 0xfb, 0xf9, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x01, 0x61, 0xf8, 0x6b, 0x38, 0xf7, 0xfe, + 0xfe, 0x0d, 0x20, 0x02, 0x60, 0xfd, 0xf0, 0x09, + 0xf8, 0x53, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x0b, + 0xfb, 0xe9, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x04, 0x4c, 0x2e, 0x08, 0x05, 0x4c, + 0xb5, 0xb0, 0x04, 0x07, 0x0c, 0x3f, 0x2f, 0x01, + 0xda, 0x00, 0x27, 0x01, 0x2f, 0x3f, 0xdd, 0x00, + 0x27, 0x3f, 0x48, 0x17, 0x6d, 0x01, 0x29, 0x02, + 0xd1, 0x13, 0x6d, 0x40, 0x25, 0x02, 0x4c, 0x15, + 0x28, 0x04, 0xd0, 0x11, 0x28, 0x05, 0xd1, 0x0c, + 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x0b, 0xfb, 0xca, + 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x0b, 0xfb, 0xc6, + 0x20, 0x22, 0x1c, 0x39, 0xf0, 0x0b, 0xfb, 0xc2, + 0x60, 0xe5, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x0b, 0xfb, 0xba, + 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x0b, 0xfb, 0xb6, + 0x20, 0x22, 0x1c, 0x39, 0xf0, 0x0b, 0xfb, 0xb2, + 0x20, 0x00, 0xf7, 0xfe, 0xfd, 0xcb, 0x60, 0xe5, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0x4c, 0x2e, 0x08, 0x04, 0xcc, + 0xb5, 0x00, 0x48, 0x0b, 0x6d, 0x01, 0x29, 0x02, + 0xd1, 0x10, 0x6d, 0x40, 0x28, 0x04, 0xd0, 0x01, + 0x28, 0x05, 0xd1, 0x0b, 0x21, 0x00, 0x20, 0x16, + 0xf0, 0x0b, 0xfb, 0x98, 0x20, 0x00, 0xf7, 0xfe, + 0xfd, 0xb1, 0x21, 0x00, 0x48, 0x03, 0x70, 0x01, + 0x21, 0x01, 0x60, 0xc1, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x04, 0x4c, 0x2e, 0x08, 0x04, 0xcc, + 0xb5, 0x00, 0x48, 0x0b, 0x6d, 0x01, 0x29, 0x02, + 0xd1, 0x10, 0x6d, 0x40, 0x28, 0x04, 0xd0, 0x01, + 0x28, 0x05, 0xd1, 0x0b, 0x21, 0x00, 0x20, 0x1a, + 0xf0, 0x0b, 0xfb, 0x7c, 0x20, 0x00, 0xf7, 0xfe, + 0xfd, 0x95, 0x21, 0x00, 0x48, 0x03, 0x70, 0x01, + 0x21, 0x01, 0x60, 0xc1, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x04, 0x4c, 0x2e, 0x08, 0x04, 0xcc, + 0x48, 0x03, 0x6d, 0x00, 0x28, 0x00, 0xd1, 0x00, + 0x47, 0x70, 0x20, 0xff, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0x4c, 0xb5, 0xf0, 0x1c, 0x04, + 0x1c, 0x0f, 0x4d, 0x52, 0x6d, 0x29, 0x48, 0x52, + 0x26, 0x00, 0x29, 0x01, 0xd0, 0x4c, 0x29, 0x02, + 0xd1, 0x6e, 0x6d, 0x69, 0x29, 0x01, 0xd0, 0x20, + 0x29, 0x04, 0xd0, 0x2e, 0x29, 0x05, 0xd1, 0x3e, + 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x08, 0xd5, 0x01, + 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, + 0x69, 0x28, 0xf0, 0x13, 0xf9, 0x03, 0x70, 0x20, + 0x20, 0x33, 0x06, 0x40, 0x6e, 0x41, 0x6e, 0x80, + 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, 0x18, 0x40, + 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, 0xf0, 0x13, + 0xf8, 0xf5, 0x70, 0x38, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x08, + 0xd5, 0x01, 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, + 0x43, 0x41, 0x69, 0x28, 0xf0, 0x13, 0xf8, 0xe6, + 0x70, 0x20, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x41, + 0x6e, 0x80, 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, + 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, + 0xf0, 0x13, 0xf8, 0xd4, 0x70, 0x38, 0x70, 0x26, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x70, 0x26, + 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x6d, 0x69, 0x29, 0x01, 0xd0, 0x21, 0x29, 0x04, + 0xd0, 0x2f, 0x29, 0x05, 0xd1, 0x3f, 0x69, 0x69, + 0x6c, 0xc0, 0x1a, 0x40, 0xd5, 0x01, 0x69, 0x29, + 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x69, 0x28, + 0xf0, 0x13, 0xf8, 0xb8, 0x70, 0x20, 0x21, 0x33, + 0x06, 0x49, 0x6a, 0xe8, 0x6e, 0x49, 0x1a, 0x08, + 0xd5, 0x01, 0x6a, 0x69, 0x18, 0x40, 0x21, 0x64, + 0x43, 0x41, 0x6a, 0x68, 0xf0, 0x13, 0xf8, 0xaa, + 0x70, 0x38, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xe0, 0x26, 0x69, 0x69, 0x6c, 0xc0, 0x1a, 0x40, + 0xd5, 0x01, 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, + 0x43, 0x41, 0x69, 0x28, 0xf0, 0x13, 0xf8, 0x9a, + 0x70, 0x20, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x21, 0x33, 0x06, 0x49, 0x6a, 0xe8, + 0x6e, 0x49, 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, + 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, + 0xf0, 0x13, 0xf8, 0x88, 0x70, 0x38, 0x70, 0x26, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x70, 0x26, + 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x70, 0x26, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x4c, + 0x66, 0x00, 0x00, 0x80, 0xb5, 0xf0, 0x1c, 0x17, + 0x9e, 0x05, 0x1a, 0xf2, 0x1c, 0x0d, 0x21, 0x00, + 0x1c, 0x1c, 0x42, 0xba, 0xda, 0x03, 0x1c, 0x08, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x42, 0xa0, + 0xd3, 0x01, 0x42, 0xb0, 0xd9, 0x03, 0x1c, 0x08, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x19, 0xc1, + 0x42, 0xb1, 0xd9, 0x0c, 0x1a, 0x32, 0x4e, 0x0a, + 0x64, 0x32, 0x1c, 0x29, 0xf7, 0xfb, 0xf8, 0x38, + 0x6c, 0x30, 0x1a, 0x3a, 0x18, 0x29, 0x1c, 0x20, + 0xf7, 0xfb, 0xf8, 0x32, 0xe0, 0x03, 0x1c, 0x29, + 0x1c, 0x3a, 0xf7, 0xfb, 0xf8, 0x2d, 0x1c, 0x38, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0xcc, 0xb5, 0xf0, 0x1c, 0x17, + 0x9e, 0x05, 0x1a, 0xf2, 0x1c, 0x05, 0x20, 0x00, + 0x1c, 0x1c, 0x42, 0xba, 0xdb, 0x18, 0x42, 0xa1, + 0xd3, 0x16, 0x42, 0xb1, 0xd2, 0x14, 0x19, 0xc8, + 0x42, 0xb0, 0xd9, 0x0c, 0x1a, 0x72, 0x4e, 0x0a, + 0x64, 0x32, 0x1c, 0x28, 0xf7, 0xfb, 0xf8, 0x10, + 0x6c, 0x30, 0x1a, 0x3a, 0x18, 0x28, 0x1c, 0x21, + 0xf7, 0xfb, 0xf8, 0x0a, 0xe0, 0x03, 0x1c, 0x28, + 0x1c, 0x3a, 0xf7, 0xfb, 0xf8, 0x05, 0x1c, 0x38, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x04, 0xcc, 0x47, 0x70, 0xb5, 0x00, + 0xb0, 0x82, 0x46, 0x6a, 0x49, 0x06, 0xa8, 0x01, + 0xf7, 0xfe, 0xfc, 0x56, 0x21, 0x00, 0x20, 0x0b, + 0xf0, 0x0b, 0xfa, 0x54, 0x20, 0x03, 0x49, 0x03, + 0x61, 0x88, 0xb0, 0x02, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x05, 0x68, 0x2e, 0x08, 0x05, 0x4c, + 0xb5, 0x80, 0x4f, 0x0b, 0x22, 0x00, 0x20, 0x00, + 0x69, 0xf9, 0xf7, 0xfe, 0xfc, 0x2b, 0x21, 0x00, + 0x20, 0x0d, 0xf0, 0x0b, 0xfa, 0x3f, 0x21, 0x01, + 0x1f, 0xf8, 0x38, 0x79, 0x61, 0xc1, 0x6b, 0x00, + 0xf7, 0xfe, 0xfc, 0x54, 0x20, 0x00, 0x61, 0xb8, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x05, 0x4c, 0xb5, 0x80, 0x4f, 0x06, + 0x68, 0x38, 0x1d, 0xc1, 0x31, 0xb5, 0x20, 0x2f, + 0x02, 0x80, 0xf0, 0x12, 0xff, 0xe3, 0x60, 0x39, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x02, 0x55, 0x3c, 0x48, 0x05, 0x8f, 0xc1, + 0x29, 0x00, 0xd0, 0x05, 0x21, 0x00, 0x87, 0xc1, + 0x48, 0x03, 0x69, 0x01, 0x31, 0x01, 0x61, 0x01, + 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, + 0x2e, 0x08, 0x05, 0x6c, 0x48, 0x03, 0x21, 0x00, + 0x60, 0x01, 0x48, 0x03, 0x69, 0x41, 0x31, 0x01, + 0x61, 0x41, 0x47, 0x70, 0x2e, 0x08, 0x47, 0x58, + 0x2e, 0x08, 0x05, 0x6c, 0xb5, 0x00, 0xb0, 0x88, + 0x46, 0x68, 0xf0, 0x0d, 0xfd, 0xe5, 0x48, 0x07, + 0x69, 0x81, 0x31, 0x01, 0x23, 0x01, 0x22, 0x06, + 0x61, 0x81, 0x21, 0x47, 0x02, 0x49, 0x05, 0x48, + 0xf0, 0x0d, 0xfc, 0xd2, 0xb0, 0x08, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0x6c, + 0xb5, 0x90, 0x1c, 0x07, 0x20, 0xff, 0x30, 0xa5, + 0xb0, 0x85, 0x90, 0x00, 0x20, 0x01, 0x02, 0x40, + 0x90, 0x02, 0x48, 0x12, 0x90, 0x04, 0x20, 0x0e, + 0xab, 0x03, 0x80, 0x18, 0x46, 0x68, 0xf0, 0x0d, + 0xfd, 0xf7, 0x2f, 0x00, 0xd0, 0x16, 0x20, 0x33, + 0x06, 0x40, 0x6d, 0x40, 0x23, 0x0d, 0x06, 0x9b, + 0x1a, 0xc7, 0x98, 0x02, 0x1e, 0x79, 0xf0, 0x00, + 0xfb, 0x27, 0x4c, 0x09, 0x68, 0x20, 0x28, 0x00, + 0xd1, 0x04, 0x20, 0xa5, 0x01, 0xc0, 0xf0, 0x00, + 0xfb, 0x2d, 0x60, 0x20, 0x98, 0x02, 0x1a, 0x38, + 0x49, 0x04, 0x60, 0x88, 0xb0, 0x05, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x1c, 0x00, 0x00, + 0x2e, 0x08, 0x00, 0x00, 0x2e, 0x08, 0x05, 0x6c, + 0xb5, 0x00, 0x22, 0x01, 0x21, 0x01, 0x20, 0x00, + 0xf0, 0x09, 0xfa, 0x54, 0x48, 0x04, 0x68, 0x00, + 0x78, 0x01, 0x23, 0x06, 0x43, 0x19, 0x70, 0x01, + 0xf0, 0x00, 0xf9, 0xe0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x5e, 0x60, 0xb5, 0xf0, 0x48, 0x51, + 0x4e, 0x51, 0x80, 0x30, 0x27, 0x00, 0x4c, 0x51, + 0x86, 0xe7, 0x86, 0xa7, 0x48, 0x50, 0x60, 0x07, + 0xf0, 0x05, 0xf9, 0x54, 0x48, 0x4f, 0xf0, 0x0e, + 0xfa, 0x01, 0xf7, 0xfa, 0xfe, 0xdd, 0x21, 0xff, + 0x48, 0x4d, 0x60, 0x01, 0x68, 0x01, 0x29, 0x00, + 0xd0, 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x01, + 0x4a, 0x4a, 0x60, 0xd1, 0x60, 0x07, 0xf7, 0xfc, + 0xfb, 0x17, 0x20, 0x01, 0xf7, 0xff, 0xff, 0x98, + 0x21, 0x00, 0x20, 0x00, 0xf0, 0x08, 0xfd, 0x92, + 0xf0, 0x01, 0xfa, 0xa6, 0x48, 0x44, 0x60, 0x07, + 0x25, 0x02, 0x48, 0x44, 0x60, 0x05, 0x20, 0x03, + 0x49, 0x43, 0x60, 0x08, 0x49, 0x43, 0x60, 0x08, + 0x49, 0x43, 0x60, 0x0d, 0x49, 0x43, 0x60, 0x08, + 0x48, 0x43, 0x60, 0x07, 0x48, 0x43, 0x65, 0x87, + 0xf0, 0x00, 0xf9, 0x80, 0xf0, 0x0e, 0xfa, 0x6e, + 0x20, 0x00, 0xf0, 0x0b, 0xff, 0xab, 0x28, 0x00, + 0xd1, 0x5d, 0x48, 0x3f, 0xf0, 0x08, 0xfb, 0xe4, + 0x20, 0x00, 0xf0, 0x08, 0xfc, 0x55, 0x87, 0xe7, + 0x87, 0xa7, 0x22, 0x01, 0xb4, 0x04, 0x22, 0x03, + 0x21, 0x01, 0x20, 0x00, 0x1c, 0x2b, 0xf0, 0x0b, + 0xfc, 0x51, 0x20, 0x02, 0xb0, 0x01, 0xf7, 0xfc, + 0xfc, 0x73, 0xf7, 0xff, 0xff, 0x95, 0x20, 0x7d, + 0x00, 0xc0, 0xf7, 0xfd, 0xfd, 0xc7, 0x20, 0x7d, + 0x00, 0xc0, 0xf7, 0xfd, 0xfd, 0xdb, 0xf0, 0x04, + 0xf8, 0x4b, 0xf0, 0x04, 0xf8, 0x89, 0xf7, 0xfb, + 0xf9, 0x11, 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfd, + 0xf8, 0x11, 0xf7, 0xfd, 0xfb, 0xbf, 0xf7, 0xfb, + 0xfc, 0x3d, 0x05, 0xa8, 0xf0, 0x16, 0xfe, 0x49, + 0x49, 0x28, 0x20, 0x17, 0xf0, 0x16, 0xfe, 0x52, + 0x49, 0x27, 0x20, 0x08, 0xf0, 0x16, 0xfe, 0x4e, + 0xf0, 0x16, 0xfe, 0x44, 0x4b, 0x25, 0x40, 0x18, + 0xf0, 0x16, 0xfe, 0x44, 0x01, 0xe8, 0xf0, 0x16, + 0xfe, 0x38, 0x48, 0x23, 0x23, 0x01, 0x22, 0x08, + 0x21, 0x81, 0x01, 0x09, 0x60, 0x07, 0xf0, 0x0b, + 0xfb, 0x65, 0xf0, 0x01, 0xfa, 0xc7, 0x49, 0x1f, + 0x20, 0x04, 0xf0, 0x16, 0xfe, 0x37, 0xf0, 0x16, + 0xfe, 0x2d, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, + 0xf0, 0x16, 0xfe, 0x2c, 0x20, 0x10, 0xf0, 0x16, + 0xfe, 0x20, 0x87, 0x67, 0x21, 0x00, 0x1c, 0x30, + 0xf7, 0xfd, 0xfd, 0xb0, 0x1c, 0x38, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, + 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x1f, 0xc0, + 0x2e, 0x08, 0x04, 0x9c, 0x07, 0x77, 0x77, 0x20, + 0x72, 0x00, 0x02, 0x00, 0x2e, 0x08, 0x05, 0x6c, + 0x6e, 0x00, 0x10, 0x00, 0x6e, 0x00, 0x11, 0x00, + 0x6e, 0x00, 0x14, 0x00, 0x6e, 0x00, 0x15, 0x00, + 0x6e, 0x00, 0x16, 0x00, 0x6e, 0x00, 0x17, 0x00, + 0x6e, 0x00, 0x18, 0x00, 0xcc, 0x00, 0x0f, 0x80, + 0x00, 0x80, 0x10, 0x80, 0x2e, 0x00, 0x55, 0x39, + 0x2e, 0x00, 0x55, 0x59, 0xff, 0xff, 0xfe, 0xff, + 0x2e, 0x08, 0x47, 0x58, 0x2e, 0x00, 0x55, 0x19, + 0xb5, 0x90, 0x1c, 0x0c, 0x1c, 0x07, 0xf0, 0x16, + 0xfe, 0x29, 0x2f, 0x01, 0xda, 0x00, 0x27, 0x01, + 0x4b, 0x0e, 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, + 0x3f, 0x01, 0x04, 0x3f, 0x4b, 0x0c, 0x18, 0xff, + 0x21, 0x03, 0x48, 0x0c, 0x60, 0x01, 0x60, 0x47, + 0x21, 0x01, 0x60, 0x01, 0x20, 0x01, 0x1c, 0x21, + 0xf0, 0x16, 0xfd, 0xe0, 0xf0, 0x16, 0xfd, 0xd6, + 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x16, + 0xfd, 0xd5, 0xf0, 0x16, 0xfe, 0x41, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xfd, 0xe8, + 0x00, 0x00, 0x9e, 0x34, 0x6e, 0x00, 0x03, 0x00, + 0xb5, 0x90, 0x1c, 0x0c, 0x1c, 0x07, 0xf0, 0x16, + 0xfd, 0xfd, 0x2f, 0x01, 0xda, 0x00, 0x27, 0x01, + 0x4b, 0x0e, 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, + 0x3f, 0x01, 0x04, 0x3f, 0x21, 0x03, 0x37, 0xff, + 0x37, 0x96, 0x48, 0x0b, 0x60, 0x01, 0x60, 0x47, + 0x21, 0x01, 0x60, 0x01, 0x20, 0x01, 0x1c, 0x21, + 0xf0, 0x16, 0xfd, 0xb4, 0xf0, 0x16, 0xfd, 0xaa, + 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x16, + 0xfd, 0xa9, 0xf0, 0x16, 0xfe, 0x15, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xfd, 0xe8, + 0x6e, 0x00, 0x03, 0x00, 0xb5, 0x00, 0xf0, 0x16, + 0xfd, 0xd5, 0x20, 0x03, 0x49, 0x05, 0x60, 0x08, + 0xf0, 0x16, 0xfd, 0x94, 0x23, 0x02, 0x43, 0x18, + 0xf0, 0x16, 0xfd, 0x94, 0xf0, 0x16, 0xfe, 0x00, + 0xbc, 0x08, 0x47, 0x18, 0x6e, 0x00, 0x03, 0x00, + 0xb5, 0x90, 0x1c, 0x0c, 0x1c, 0x07, 0xf0, 0x16, + 0xfd, 0xc1, 0x2f, 0x01, 0xda, 0x00, 0x27, 0x01, + 0x4b, 0x0e, 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, + 0x3f, 0x01, 0x04, 0x3f, 0x4b, 0x0c, 0x18, 0xff, + 0x21, 0x03, 0x48, 0x0c, 0x60, 0x01, 0x60, 0x47, + 0x21, 0x01, 0x60, 0x01, 0x20, 0x05, 0x1c, 0x21, + 0xf0, 0x16, 0xfd, 0x78, 0xf0, 0x16, 0xfd, 0x6e, + 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x16, + 0xfd, 0x6d, 0xf0, 0x16, 0xfd, 0xd9, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xfd, 0xe8, + 0x00, 0x00, 0x9e, 0x34, 0x6e, 0x00, 0x04, 0x00, + 0xb5, 0x90, 0x1c, 0x0c, 0x1c, 0x07, 0xf0, 0x16, + 0xfd, 0x95, 0x2f, 0x01, 0xda, 0x00, 0x27, 0x01, + 0x4b, 0x0e, 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, + 0x3f, 0x01, 0x04, 0x3f, 0x21, 0x03, 0x37, 0xff, + 0x37, 0x96, 0x48, 0x0b, 0x60, 0x01, 0x60, 0x47, + 0x21, 0x01, 0x60, 0x01, 0x20, 0x05, 0x1c, 0x21, + 0xf0, 0x16, 0xfd, 0x4c, 0xf0, 0x16, 0xfd, 0x42, + 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x16, + 0xfd, 0x41, 0xf0, 0x16, 0xfd, 0xad, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xfd, 0xe8, + 0x6e, 0x00, 0x04, 0x00, 0xb5, 0x00, 0xf0, 0x16, + 0xfd, 0x6d, 0x20, 0x03, 0x49, 0x05, 0x60, 0x08, + 0xf0, 0x16, 0xfd, 0x2c, 0x23, 0x20, 0x43, 0x18, + 0xf0, 0x16, 0xfd, 0x2c, 0xf0, 0x16, 0xfd, 0x98, + 0xbc, 0x08, 0x47, 0x18, 0x6e, 0x00, 0x04, 0x00, + 0xb5, 0x00, 0x48, 0x0b, 0x68, 0x41, 0x31, 0x14, + 0x60, 0x41, 0x68, 0x81, 0x31, 0x01, 0x60, 0x81, + 0x48, 0x08, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x28, 0x01, 0xd1, 0x01, 0xf7, 0xfe, 0xfa, 0x5a, + 0xbc, 0x08, 0x47, 0x18, 0x48, 0x04, 0x21, 0x10, + 0xf0, 0x09, 0xf9, 0x64, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x05, 0xb8, 0x2e, 0x08, 0x05, 0x00, + 0x2e, 0x08, 0x05, 0xb8, 0xb5, 0x00, 0xf0, 0x16, + 0xfd, 0x3d, 0x21, 0x00, 0x48, 0x08, 0x60, 0x41, + 0x60, 0x81, 0x49, 0x08, 0x20, 0x07, 0xf0, 0x16, + 0xfd, 0x01, 0xf0, 0x16, 0xfc, 0xf7, 0x23, 0x80, + 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x16, 0xfc, 0xf6, + 0xf0, 0x16, 0xfd, 0x62, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x05, 0xb8, 0x2e, 0x00, 0x59, 0x65, + 0x48, 0x01, 0x68, 0x40, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x05, 0xb8, 0xb5, 0x90, 0x49, 0x0d, + 0x1c, 0x0f, 0x48, 0x0d, 0x24, 0x1e, 0x22, 0x10, + 0x1c, 0x23, 0xf0, 0x09, 0xfa, 0x65, 0x22, 0x02, + 0x21, 0x10, 0x1c, 0x38, 0x1c, 0x23, 0xf0, 0x05, + 0xfc, 0xcd, 0x49, 0x08, 0x20, 0x10, 0xf0, 0x16, + 0xfc, 0xd9, 0xf0, 0x16, 0xfc, 0xcf, 0x4b, 0x06, + 0x40, 0x18, 0xf0, 0x16, 0xfc, 0xcf, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x47, 0x68, + 0x2e, 0x08, 0x05, 0xb8, 0x2e, 0x00, 0x5a, 0x29, + 0xff, 0xfe, 0xff, 0xff, 0xb5, 0x00, 0xb0, 0x86, + 0x46, 0x68, 0x49, 0x0c, 0xc9, 0x0c, 0xc0, 0x0c, + 0xc9, 0x0c, 0xc0, 0x0c, 0xc9, 0x0c, 0xc0, 0x0c, + 0x48, 0x09, 0xab, 0x00, 0xcb, 0x0e, 0xb0, 0x03, + 0xf0, 0x09, 0xfa, 0x6a, 0xb0, 0x03, 0x48, 0x07, + 0x68, 0x01, 0x08, 0x4a, 0xd3, 0x04, 0x08, 0x49, + 0x00, 0x49, 0x23, 0x04, 0x43, 0x19, 0x60, 0x01, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x47, 0x68, + 0x2e, 0x08, 0x05, 0xb8, 0x2e, 0x08, 0x00, 0x04, + 0xb5, 0x80, 0x29, 0x0c, 0xd2, 0x00, 0x21, 0x0c, + 0x31, 0x07, 0x08, 0xc9, 0x00, 0xc9, 0x27, 0x00, + 0x68, 0x02, 0x42, 0x82, 0xd0, 0x03, 0x68, 0x93, + 0x42, 0x8b, 0xd3, 0x0d, 0x1c, 0x17, 0x2f, 0x00, + 0xd0, 0x1e, 0x68, 0xb8, 0x1a, 0x42, 0x2a, 0x0c, + 0xd2, 0x00, 0x1c, 0x01, 0x1a, 0x42, 0xd1, 0x05, + 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x76, 0xe0, 0x0c, + 0x68, 0x12, 0xe7, 0xea, 0x1d, 0xca, 0x32, 0x01, + 0x1a, 0x80, 0x60, 0xb8, 0x19, 0xc0, 0x1d, 0xc7, + 0x37, 0x01, 0x20, 0x00, 0x60, 0x38, 0x60, 0x78, + 0x60, 0xb9, 0x68, 0xb8, 0x60, 0x38, 0x1d, 0xf8, + 0x30, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xb0, 0x1f, 0xcc, 0x3c, 0x01, 0x68, 0x21, + 0x19, 0x0a, 0x60, 0xa1, 0x68, 0x07, 0x32, 0x08, + 0x42, 0x87, 0xd1, 0x06, 0x68, 0x41, 0x1c, 0x20, + 0xf0, 0x00, 0xf8, 0x48, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x42, 0x97, 0xd1, 0x0f, 0x68, 0x7d, + 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x46, 0x68, 0xa0, + 0x68, 0xb9, 0x18, 0x40, 0x30, 0x08, 0x60, 0xa0, + 0x1c, 0x20, 0x1c, 0x29, 0xf0, 0x00, 0xf8, 0x36, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xbb, + 0x19, 0xdb, 0x33, 0x08, 0x42, 0xa3, 0xd1, 0x13, + 0x68, 0xb8, 0x18, 0x40, 0x30, 0x08, 0x60, 0xb8, + 0x19, 0xc0, 0x68, 0x3c, 0x30, 0x08, 0x42, 0xa0, + 0xd1, 0xdc, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x29, + 0x68, 0xb8, 0x68, 0xa1, 0x18, 0x40, 0x30, 0x08, + 0x60, 0xb8, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x42, 0xbc, 0xd2, 0x06, 0x68, 0x79, 0x1c, 0x20, + 0xf0, 0x00, 0xf8, 0x14, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0x3f, 0xe7, 0xc0, 0xb5, 0x00, + 0x31, 0x10, 0x32, 0x01, 0x1c, 0x0b, 0x1a, 0x51, + 0x39, 0x08, 0x60, 0x99, 0x60, 0x00, 0x1c, 0x01, + 0x60, 0x40, 0x1c, 0x18, 0xf0, 0x00, 0xf8, 0x02, + 0xbc, 0x08, 0x47, 0x18, 0x68, 0x0a, 0x60, 0x02, + 0x60, 0x08, 0x68, 0x02, 0x60, 0x50, 0x60, 0x41, + 0x47, 0x70, 0xc8, 0x06, 0x38, 0x08, 0x60, 0x11, + 0xc8, 0x03, 0x60, 0x41, 0x47, 0x70, 0xb5, 0x00, + 0x1c, 0x0a, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, + 0xff, 0xde, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x05, 0xdc, 0xb5, 0x90, 0x1c, 0x07, + 0xf0, 0x16, 0xfb, 0xf8, 0x23, 0x11, 0x05, 0x1b, + 0x1c, 0x04, 0x43, 0x18, 0xf0, 0x16, 0xfb, 0xf6, + 0x1c, 0x39, 0x48, 0x05, 0xf7, 0xff, 0xff, 0x50, + 0x1c, 0x07, 0x1c, 0x20, 0xf0, 0x16, 0xfb, 0xee, + 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x05, 0xdc, 0xb5, 0x00, 0x1c, 0x01, + 0x48, 0x02, 0xf7, 0xff, 0xff, 0x41, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xdc, + 0xb5, 0x90, 0x1c, 0x07, 0xd0, 0x0e, 0xf0, 0x16, + 0xfb, 0xd5, 0x23, 0x11, 0x05, 0x1b, 0x1c, 0x04, + 0x43, 0x18, 0xf0, 0x16, 0xfb, 0xd3, 0x1c, 0x39, + 0x48, 0x04, 0xf7, 0xff, 0xff, 0x61, 0x1c, 0x20, + 0xf0, 0x16, 0xfb, 0xcc, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xdc, + 0xb5, 0x00, 0x4a, 0x04, 0xc2, 0x03, 0x1c, 0x0a, + 0x1c, 0x01, 0x48, 0x03, 0xf7, 0xff, 0xff, 0x97, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xc4, + 0x2e, 0x08, 0x05, 0xd4, 0xb5, 0x00, 0x1c, 0x01, + 0x48, 0x02, 0xf7, 0xff, 0xff, 0x11, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xd4, + 0xb5, 0x00, 0x49, 0x08, 0x68, 0x0a, 0x42, 0x90, + 0xd3, 0x02, 0x68, 0x49, 0x42, 0x88, 0xd9, 0x03, + 0xf7, 0xff, 0xff, 0xc6, 0xbc, 0x08, 0x47, 0x18, + 0x1c, 0x01, 0x48, 0x03, 0xf7, 0xff, 0xff, 0x30, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xc4, + 0x2e, 0x08, 0x05, 0xd4, 0xb5, 0x00, 0x4a, 0x05, + 0x60, 0x90, 0x60, 0xd1, 0x1c, 0x0a, 0x1c, 0x01, + 0x48, 0x03, 0xf7, 0xff, 0xff, 0x68, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xc4, + 0x2e, 0x08, 0x05, 0xe4, 0xb5, 0x00, 0x1c, 0x01, + 0x48, 0x02, 0xf7, 0xff, 0xfe, 0xe1, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xe4, + 0xb5, 0x00, 0x49, 0x08, 0x68, 0x8a, 0x42, 0x90, + 0xd3, 0x02, 0x68, 0xc9, 0x42, 0x88, 0xd9, 0x03, + 0xf7, 0xff, 0xff, 0x96, 0xbc, 0x08, 0x47, 0x18, + 0x1c, 0x01, 0x48, 0x03, 0xf7, 0xff, 0xff, 0x00, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xc4, + 0x2e, 0x08, 0x05, 0xe4, 0xb5, 0xf0, 0x06, 0x07, + 0x0e, 0x3f, 0x04, 0x09, 0x0c, 0x09, 0xb0, 0x81, + 0x91, 0x00, 0x06, 0x16, 0x0e, 0x36, 0x00, 0xbd, + 0x4c, 0x15, 0x59, 0x60, 0x28, 0x00, 0xd1, 0x15, + 0xf7, 0xfb, 0xf9, 0x40, 0x22, 0x00, 0xb4, 0x04, + 0x23, 0x00, 0x22, 0x02, 0x99, 0x01, 0x1c, 0x38, + 0xf0, 0x04, 0xfe, 0x8c, 0x23, 0x01, 0x02, 0x9b, + 0x00, 0x5a, 0x21, 0x01, 0x1c, 0x38, 0xb0, 0x01, + 0xf0, 0x05, 0xf8, 0x48, 0x20, 0x03, 0x00, 0x71, + 0x4a, 0x0a, 0x52, 0x50, 0x59, 0x60, 0x30, 0x01, + 0x51, 0x60, 0x48, 0x09, 0x23, 0x14, 0x5e, 0xc1, + 0x29, 0x00, 0xd1, 0x02, 0x49, 0x07, 0x4a, 0x08, + 0x65, 0xd1, 0x8a, 0x81, 0x31, 0x01, 0x82, 0x81, + 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x02, 0x54, 0xb0, 0x2e, 0x08, 0x49, 0x78, + 0x2e, 0x08, 0x07, 0x6c, 0x2e, 0x02, 0x52, 0xc0, + 0xa0, 0x00, 0x0d, 0x00, 0xb5, 0xb0, 0x06, 0x07, + 0x0e, 0x3f, 0x06, 0x0c, 0x0e, 0x24, 0x00, 0xb9, + 0x48, 0x1a, 0x58, 0x42, 0x3a, 0x01, 0x50, 0x42, + 0xd1, 0x20, 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, + 0x21, 0x02, 0x1c, 0x38, 0xf0, 0x05, 0xf8, 0x16, + 0x22, 0x00, 0xb4, 0x04, 0x25, 0x00, 0x1c, 0x38, + 0x1c, 0x2b, 0x49, 0x13, 0xf0, 0x04, 0xfe, 0x4a, + 0x00, 0x61, 0xb0, 0x01, 0x48, 0x11, 0x52, 0x45, + 0x48, 0x0f, 0x4a, 0x11, 0x52, 0x50, 0x00, 0x79, + 0x4a, 0x10, 0x52, 0x50, 0x00, 0x62, 0x19, 0x12, + 0x00, 0x92, 0x49, 0x0f, 0x18, 0x53, 0x81, 0x1d, + 0x52, 0x88, 0x80, 0x58, 0x48, 0x0d, 0x8a, 0x81, + 0x39, 0x01, 0x82, 0x81, 0x23, 0x14, 0x5e, 0xc0, + 0x28, 0x00, 0xd1, 0x03, 0x20, 0xd7, 0x00, 0xc0, + 0x49, 0x09, 0x65, 0xc8, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x02, 0x54, 0xb0, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0x78, + 0x2e, 0x08, 0x49, 0x38, 0x2e, 0x08, 0x49, 0x00, + 0x2e, 0x08, 0x47, 0x80, 0x2e, 0x08, 0x07, 0x6c, + 0xa0, 0x00, 0x0d, 0x00, 0xb5, 0xf0, 0x04, 0x06, + 0x0c, 0x36, 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x17, + 0xb0, 0x8a, 0x46, 0x69, 0x1c, 0x30, 0x1c, 0x22, + 0xf0, 0x00, 0xf8, 0xb0, 0x23, 0x01, 0x1c, 0x05, + 0x42, 0xd8, 0xd1, 0x03, 0xb0, 0x0a, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x4b, 0x4e, 0x42, 0x9c, + 0xd1, 0x06, 0xa8, 0x00, 0x88, 0x00, 0x1c, 0x31, + 0x1c, 0x2a, 0xf7, 0xff, 0xff, 0x57, 0xe0, 0x7f, + 0x20, 0x20, 0x40, 0x20, 0x28, 0x20, 0xd1, 0x1f, + 0x06, 0x2a, 0x0e, 0x12, 0xa8, 0x00, 0x88, 0x00, + 0x06, 0x00, 0x0e, 0x00, 0x1c, 0x31, 0x1c, 0x23, + 0xf7, 0xfd, 0xf8, 0x7c, 0x28, 0x00, 0xd0, 0x6f, + 0x48, 0x42, 0x00, 0x69, 0x4a, 0x42, 0x52, 0x50, + 0xa9, 0x00, 0x88, 0x09, 0x00, 0x49, 0x4a, 0x41, + 0x52, 0x50, 0xa8, 0x00, 0x88, 0x00, 0x1c, 0x29, + 0xf0, 0x00, 0xf9, 0xce, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0x21, 0x00, 0xaa, 0x01, 0x88, 0x3b, + 0x0a, 0x1b, 0x70, 0x13, 0x88, 0x3b, 0x93, 0x09, + 0x32, 0x01, 0x06, 0x1b, 0xd0, 0x02, 0x1c, 0x48, + 0x06, 0x00, 0x0e, 0x00, 0x9b, 0x09, 0x70, 0x13, + 0x31, 0x01, 0x32, 0x01, 0x37, 0x02, 0x29, 0x0e, + 0xdb, 0xed, 0x21, 0x00, 0x23, 0x00, 0x70, 0x13, + 0x31, 0x01, 0x32, 0x01, 0x29, 0x04, 0xdb, 0xfa, + 0x21, 0x0c, 0x40, 0x21, 0x29, 0x0c, 0xd1, 0x03, + 0x04, 0x21, 0x0c, 0x09, 0x24, 0x01, 0x43, 0x0c, + 0x28, 0x06, 0xdc, 0x0e, 0x06, 0x22, 0x0e, 0x12, + 0xb4, 0x04, 0x06, 0x2a, 0x0e, 0x12, 0xa8, 0x01, + 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x1c, 0x31, + 0xab, 0x02, 0xf7, 0xfc, 0xfc, 0x59, 0xb0, 0x01, + 0xe0, 0x1e, 0x28, 0x0a, 0xdc, 0x0e, 0x06, 0x22, + 0x0e, 0x12, 0xb4, 0x04, 0x06, 0x2a, 0x0e, 0x12, + 0xa8, 0x01, 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, + 0x1c, 0x31, 0xab, 0x02, 0xf7, 0xfc, 0xfc, 0x62, + 0xb0, 0x01, 0xe0, 0x0d, 0x06, 0x22, 0x0e, 0x12, + 0xb4, 0x04, 0x06, 0x2a, 0x0e, 0x12, 0xa8, 0x01, + 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x1c, 0x31, + 0xab, 0x02, 0xf7, 0xfc, 0xfc, 0x6d, 0xb0, 0x01, + 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xe7, 0xff, 0xa8, 0x00, 0x88, 0x00, 0x00, 0x6a, + 0x19, 0x52, 0x00, 0x92, 0x49, 0x0a, 0x52, 0x88, + 0x18, 0x50, 0x80, 0x46, 0x80, 0x84, 0x49, 0x05, + 0x80, 0xc1, 0x21, 0x01, 0x81, 0x01, 0x1c, 0x28, + 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0x00, 0xb9, 0x6a, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x49, 0x38, 0x2e, 0x08, 0x49, 0x00, + 0x2e, 0x08, 0x47, 0x80, 0xb4, 0xf0, 0x04, 0x04, + 0x0c, 0x24, 0x04, 0x17, 0x0c, 0x3f, 0xb0, 0x82, + 0x48, 0x58, 0x22, 0x00, 0x4d, 0x58, 0x95, 0x01, + 0x1c, 0x06, 0x00, 0x53, 0x9d, 0x01, 0x5a, 0xed, + 0x42, 0xb5, 0xd1, 0x02, 0x04, 0x10, 0x0c, 0x00, + 0xe0, 0x02, 0x32, 0x01, 0x2a, 0x20, 0xdb, 0xf4, + 0x42, 0xb0, 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x80, 0x0e, + 0x4a, 0x4e, 0x92, 0x00, 0x4d, 0x4e, 0x4a, 0x4f, + 0x4b, 0x4f, 0x42, 0x9f, 0xd1, 0x32, 0x23, 0x00, + 0x00, 0x5f, 0x5b, 0xd7, 0x42, 0xa7, 0xd1, 0x0a, + 0x00, 0x5f, 0x5b, 0xef, 0x2f, 0x03, 0xd1, 0x01, + 0x80, 0x0b, 0xe0, 0x07, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x33, 0x01, + 0x2b, 0x1c, 0xdb, 0xed, 0x88, 0x0f, 0x4b, 0x3f, + 0x42, 0x9f, 0xd1, 0x0a, 0x27, 0x00, 0x00, 0x7b, + 0x5a, 0xd6, 0x4b, 0x3c, 0x42, 0x9e, 0xd1, 0x01, + 0x80, 0x0f, 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x1c, + 0xdb, 0xf5, 0x88, 0x0f, 0x4b, 0x37, 0x42, 0x9f, + 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, + 0xbc, 0xf0, 0x47, 0x70, 0x23, 0x03, 0x00, 0x47, + 0x9e, 0x00, 0x53, 0xf3, 0x88, 0x0f, 0x00, 0x7f, + 0x53, 0xeb, 0xe0, 0x54, 0x23, 0x20, 0x40, 0x3b, + 0x2b, 0x20, 0xd1, 0x1e, 0x23, 0x00, 0x00, 0x5f, + 0x5b, 0xd7, 0x42, 0xa7, 0xd1, 0x04, 0x20, 0x00, + 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, + 0x33, 0x01, 0x2b, 0x1c, 0xdb, 0xf3, 0x27, 0x00, + 0x00, 0x7b, 0x5a, 0xd5, 0x42, 0xb5, 0xd1, 0x01, + 0x80, 0x0f, 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x1c, + 0xdb, 0xf6, 0x88, 0x0f, 0x42, 0xb7, 0xd1, 0x36, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, + 0x47, 0x70, 0x23, 0x00, 0x00, 0x5f, 0x5b, 0xd7, + 0x42, 0xa7, 0xd1, 0x0a, 0x00, 0x5f, 0x5b, 0xef, + 0x2f, 0x02, 0xd1, 0x01, 0x80, 0x0b, 0xe0, 0x07, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, + 0x47, 0x70, 0x33, 0x01, 0x2b, 0x1c, 0xdb, 0xed, + 0x88, 0x0f, 0x4b, 0x14, 0x42, 0x9f, 0xd1, 0x0a, + 0x27, 0x00, 0x00, 0x7b, 0x5a, 0xd6, 0x4b, 0x11, + 0x42, 0x9e, 0xd1, 0x01, 0x80, 0x0f, 0xe0, 0x02, + 0x37, 0x01, 0x2f, 0x1c, 0xdb, 0xf5, 0x88, 0x0f, + 0x4b, 0x0c, 0x42, 0x9f, 0xd1, 0x04, 0x20, 0x00, + 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, + 0x23, 0x02, 0x00, 0x47, 0x9e, 0x00, 0x53, 0xf3, + 0x88, 0x0f, 0x00, 0x7f, 0x53, 0xeb, 0x00, 0x43, + 0x9d, 0x01, 0x52, 0xec, 0x88, 0x09, 0x00, 0x49, + 0x52, 0x54, 0x04, 0x00, 0x14, 0x00, 0xb0, 0x02, + 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x49, 0x38, 0x2e, 0x08, 0x49, 0x78, + 0x2e, 0x08, 0x49, 0xb8, 0x2e, 0x08, 0x49, 0x00, + 0x00, 0x00, 0xb9, 0x6a, 0xb5, 0xf0, 0x04, 0x07, + 0x0c, 0x3f, 0xb0, 0x81, 0x4a, 0x34, 0x92, 0x00, + 0x1c, 0x11, 0x42, 0x97, 0xd0, 0x01, 0x2f, 0x20, + 0xdb, 0x05, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x7c, + 0x4a, 0x2e, 0x5b, 0x10, 0x42, 0x88, 0xd1, 0x05, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x49, 0x28, 0x53, 0x11, + 0x23, 0x00, 0x49, 0x29, 0x00, 0x5e, 0x5b, 0x8e, + 0x42, 0x86, 0xd1, 0x02, 0x04, 0x1d, 0x0c, 0x2d, + 0xe0, 0x02, 0x33, 0x01, 0x2b, 0x1c, 0xdb, 0xf5, + 0x23, 0x00, 0x00, 0x5e, 0x5b, 0x96, 0x42, 0x86, + 0xd1, 0x03, 0x04, 0x1a, 0x0c, 0x12, 0x92, 0x00, + 0xe0, 0x02, 0x33, 0x01, 0x2b, 0x20, 0xdb, 0xf4, + 0x9a, 0x00, 0x4e, 0x1b, 0x42, 0xb2, 0xd1, 0x0d, + 0x22, 0x00, 0x00, 0x53, 0x5a, 0xcb, 0x42, 0x83, + 0xd1, 0x05, 0x23, 0x00, 0x00, 0x50, 0x4a, 0x19, + 0x52, 0x13, 0x52, 0x0e, 0xe0, 0x02, 0x32, 0x01, + 0x2a, 0x1c, 0xdb, 0xf2, 0x4e, 0x16, 0x5b, 0x30, + 0x28, 0x02, 0xd1, 0x05, 0x23, 0x00, 0x53, 0x33, + 0x1c, 0x28, 0x1c, 0x39, 0xf0, 0x00, 0xf8, 0x38, + 0x5b, 0x30, 0x28, 0x01, 0xd1, 0x0a, 0x1c, 0x38, + 0xf7, 0xfc, 0xff, 0xf0, 0x28, 0x00, 0xd0, 0x05, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x5b, 0x30, 0x28, 0x03, + 0xd1, 0x03, 0x1c, 0x28, 0x1c, 0x39, 0xf7, 0xff, + 0xfd, 0xcd, 0x04, 0x38, 0x14, 0x00, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0x38, + 0x2e, 0x08, 0x49, 0x00, 0x2e, 0x08, 0x49, 0xb8, + 0x2e, 0x08, 0x49, 0x78, 0x04, 0x01, 0x0c, 0x09, + 0x20, 0x02, 0x00, 0x4b, 0x18, 0x5b, 0x00, 0x9b, + 0x4a, 0x03, 0x18, 0x99, 0x81, 0x08, 0x48, 0x03, + 0x52, 0xd0, 0x80, 0x48, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x47, 0x80, 0x00, 0x00, 0xff, 0xff, + 0xb5, 0x80, 0x04, 0x0f, 0x0c, 0x3f, 0x06, 0x39, + 0x0e, 0x09, 0x06, 0x00, 0x0e, 0x00, 0xf7, 0xfc, + 0xfc, 0x25, 0x20, 0x00, 0x00, 0x7b, 0x19, 0xdb, + 0x00, 0x9b, 0x4a, 0x04, 0x18, 0x99, 0x81, 0x08, + 0x48, 0x03, 0x52, 0xd0, 0x80, 0x48, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x47, 0x80, + 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x04, 0x09, + 0x0c, 0x09, 0x78, 0x42, 0x02, 0x12, 0x78, 0x83, + 0x43, 0x1a, 0x05, 0x12, 0x0d, 0x12, 0x27, 0x00, + 0x43, 0xff, 0x32, 0x03, 0x42, 0x8a, 0xd0, 0x03, + 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0xf0, 0x05, 0xfa, 0xd0, 0x28, 0x00, 0xd0, 0x03, + 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xff, 0x9c, 0x09, 0x04, 0x00, 0x0c, 0x00, + 0xb0, 0x81, 0x90, 0x00, 0x06, 0x09, 0x0e, 0x09, + 0x06, 0x12, 0x0e, 0x12, 0xb0, 0x88, 0x4f, 0x16, + 0x68, 0xb8, 0x28, 0x0c, 0xdb, 0x06, 0x20, 0x00, + 0x43, 0xc0, 0xb0, 0x09, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x23, 0x00, + 0x00, 0x45, 0x46, 0x6e, 0x53, 0x73, 0x30, 0x01, + 0x04, 0x00, 0x14, 0x00, 0x28, 0x10, 0xdb, 0xf7, + 0x02, 0x08, 0x43, 0x10, 0xab, 0x00, 0x80, 0x18, + 0x46, 0x6a, 0x21, 0x04, 0x98, 0x08, 0xf7, 0xff, + 0xfd, 0x95, 0x28, 0x00, 0xda, 0x01, 0xb0, 0x09, + 0xe7, 0xe4, 0x00, 0x81, 0x4a, 0x05, 0x50, 0x54, + 0x9b, 0x0c, 0x4a, 0x05, 0x50, 0x53, 0x68, 0xb9, + 0x31, 0x01, 0x60, 0xb9, 0xb0, 0x09, 0xe7, 0xd9, + 0x2e, 0x08, 0x07, 0x84, 0x2e, 0x08, 0x4a, 0x70, + 0x2e, 0x08, 0x49, 0xf0, 0xb5, 0x80, 0x04, 0x07, + 0x14, 0x3f, 0xd5, 0x04, 0x20, 0x00, 0x43, 0xc0, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, + 0xf7, 0xff, 0xfe, 0xf4, 0x20, 0x00, 0x00, 0xb9, + 0x4a, 0x05, 0x50, 0x50, 0x4a, 0x05, 0x50, 0x50, + 0x49, 0x05, 0x68, 0x8a, 0x3a, 0x01, 0x60, 0x8a, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x49, 0xf0, 0x2e, 0x08, 0x4a, 0x70, + 0x2e, 0x08, 0x07, 0x84, 0xb5, 0x90, 0x27, 0x00, + 0x4c, 0x08, 0x00, 0xb8, 0x58, 0x20, 0x28, 0x00, + 0xd0, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xd6, + 0x37, 0x01, 0x2f, 0x20, 0xdb, 0xf5, 0x20, 0x00, + 0x49, 0x03, 0x60, 0xc8, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x49, 0xf0, + 0x2e, 0x08, 0x07, 0x84, 0xb5, 0x00, 0xf7, 0xff, + 0xff, 0xe5, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, + 0x04, 0x00, 0x14, 0x00, 0xb0, 0x83, 0x90, 0x00, + 0x1c, 0x0f, 0x04, 0x11, 0x0c, 0x09, 0x24, 0x00, + 0x1c, 0x38, 0x1c, 0x1d, 0x1c, 0x0e, 0xb0, 0x81, + 0xf7, 0xff, 0xff, 0x58, 0x1c, 0x01, 0x20, 0x00, + 0x29, 0x00, 0xd0, 0x03, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x78, 0xf9, 0x02, 0x09, + 0x79, 0x3a, 0x43, 0x11, 0x04, 0x09, 0x0c, 0x09, + 0x88, 0x2a, 0x42, 0x91, 0xd0, 0x03, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x7a, 0x39, + 0x02, 0x09, 0x7a, 0x7a, 0x43, 0x11, 0x04, 0xc9, + 0x0c, 0xc9, 0x91, 0x00, 0x7a, 0xb9, 0x02, 0x09, + 0x7a, 0xfa, 0x43, 0x11, 0x05, 0x0b, 0x0d, 0x1b, + 0x1d, 0xf9, 0x31, 0x05, 0x27, 0x00, 0x1d, 0xd8, + 0x30, 0x09, 0x1a, 0x32, 0x2b, 0x00, 0xdd, 0x0a, + 0x78, 0x08, 0x28, 0x09, 0xd1, 0x00, 0x37, 0x01, + 0x78, 0x48, 0x1c, 0x85, 0x1b, 0x5b, 0x18, 0x40, + 0x1c, 0x81, 0x2b, 0x00, 0xdc, 0xf4, 0x2a, 0x00, + 0xdd, 0x36, 0x48, 0x26, 0x88, 0x06, 0x96, 0x03, + 0x88, 0x85, 0x95, 0x02, 0x78, 0xc8, 0x02, 0x00, + 0x79, 0x0b, 0x43, 0x18, 0x05, 0x00, 0x0d, 0x00, + 0x78, 0x0b, 0x2b, 0x01, 0xd0, 0x01, 0x2b, 0x02, + 0xd1, 0x06, 0x78, 0x4d, 0x02, 0x2d, 0x78, 0x8e, + 0x43, 0x35, 0x04, 0xed, 0x0c, 0xed, 0x9e, 0x03, + 0x2b, 0x04, 0xd0, 0x01, 0x2b, 0x03, 0xd1, 0x09, + 0x78, 0x4b, 0x02, 0x1b, 0x78, 0x8d, 0x43, 0x2b, + 0x04, 0xdb, 0x0c, 0xdb, 0x9d, 0x02, 0x42, 0xab, + 0xd1, 0x00, 0x24, 0x01, 0x1d, 0x43, 0x1a, 0xd2, + 0x31, 0x05, 0x28, 0x00, 0xdd, 0x0a, 0x78, 0x0b, + 0x2b, 0x09, 0xd1, 0x00, 0x37, 0x01, 0x78, 0x4b, + 0x1c, 0x9d, 0x1b, 0x40, 0x18, 0x59, 0x31, 0x02, + 0x28, 0x00, 0xdc, 0xf4, 0x2a, 0x00, 0xdc, 0xcd, + 0x2c, 0x00, 0xd0, 0x09, 0xf7, 0xff, 0xff, 0x62, + 0x99, 0x00, 0x48, 0x09, 0x80, 0x01, 0x2f, 0x00, + 0xd1, 0x07, 0xf7, 0xfa, 0xf8, 0xb7, 0xe0, 0x04, + 0x98, 0x01, 0xf7, 0xff, 0xff, 0x37, 0xf0, 0x00, + 0xf8, 0x23, 0x20, 0x00, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x07, 0x84, + 0x2e, 0x08, 0x00, 0x08, 0xb4, 0x90, 0x04, 0x02, + 0x0c, 0x12, 0x04, 0x0f, 0x0c, 0x3f, 0x4b, 0x07, + 0x68, 0xd8, 0x28, 0x80, 0xda, 0x08, 0x2a, 0x00, + 0xd0, 0x06, 0x00, 0x41, 0x4c, 0x04, 0x52, 0x67, + 0x4f, 0x04, 0x52, 0x7a, 0x30, 0x01, 0x60, 0xd8, + 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x08, 0x07, 0x84, + 0x2e, 0x08, 0x4a, 0xf0, 0x2e, 0x08, 0x4b, 0xf0, + 0xb5, 0x90, 0x4f, 0x13, 0x24, 0x00, 0x43, 0xe4, + 0x68, 0xf8, 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x20, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x40, + 0x49, 0x0e, 0x18, 0x41, 0x1e, 0x8a, 0xb4, 0x04, + 0x49, 0x0d, 0x18, 0x40, 0x38, 0x40, 0x8f, 0xc0, + 0x4b, 0x0c, 0x22, 0xff, 0x21, 0x02, 0xf7, 0xff, + 0xfe, 0xbb, 0xb0, 0x01, 0x28, 0x00, 0xda, 0x03, + 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x68, 0xf8, 0x38, 0x01, 0x60, 0xf8, 0x20, 0x00, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x07, 0x84, 0x2e, 0x08, 0x4b, 0xf0, + 0x2e, 0x08, 0x4a, 0xf0, 0x2e, 0x00, 0x63, 0x73, + 0xb5, 0xf0, 0x04, 0x05, 0x14, 0x2d, 0x1c, 0x0f, + 0x04, 0x11, 0x0c, 0x09, 0x1c, 0x0e, 0x4c, 0x28, + 0x23, 0x02, 0x69, 0x20, 0x42, 0xd8, 0xd0, 0x04, + 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0x77, 0x28, 0x00, + 0xd0, 0x06, 0x1c, 0x28, 0xf7, 0xff, 0xfe, 0xce, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x79, 0xb8, 0x69, 0x21, 0x42, 0x88, 0xd1, 0x09, + 0x20, 0x01, 0x43, 0xc0, 0x61, 0x20, 0x1c, 0x28, + 0xf7, 0xff, 0xfe, 0xc0, 0x20, 0x00, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x23, 0x01, 0x42, 0xd9, + 0xd1, 0x02, 0x61, 0x20, 0x20, 0x00, 0x60, 0xe0, + 0x37, 0x08, 0x1f, 0xf4, 0x3c, 0x05, 0x2c, 0x00, + 0xdd, 0x11, 0x78, 0x38, 0x02, 0x00, 0x78, 0x79, + 0x43, 0x08, 0x04, 0x00, 0x0c, 0x00, 0x78, 0xb9, + 0x02, 0x09, 0x78, 0xfa, 0x43, 0x11, 0x04, 0xc9, + 0x0c, 0xc9, 0xf7, 0xff, 0xff, 0x77, 0x37, 0x04, + 0x3c, 0x04, 0x2c, 0x00, 0xdc, 0xed, 0xf7, 0xff, + 0xff, 0x8b, 0xf7, 0xff, 0xff, 0x89, 0xf7, 0xff, + 0xff, 0x87, 0xf7, 0xff, 0xff, 0x85, 0xf7, 0xff, + 0xff, 0x83, 0xf7, 0xff, 0xff, 0x81, 0xf7, 0xff, + 0xff, 0x7f, 0xf7, 0xff, 0xff, 0x7d, 0x20, 0x00, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x07, 0x84, 0xb5, 0xf0, 0x04, 0x04, + 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x26, 0x00, + 0x43, 0xf6, 0x4f, 0x0f, 0x62, 0x3e, 0x61, 0xfe, + 0x61, 0xbe, 0xf7, 0xff, 0xfe, 0x9b, 0x2d, 0x00, + 0xd0, 0x13, 0x2c, 0x00, 0xd0, 0x11, 0x0c, 0xf0, + 0x42, 0x85, 0xd0, 0x0e, 0x42, 0x84, 0xd0, 0x0c, + 0x80, 0x3c, 0x80, 0xbd, 0x20, 0x00, 0x61, 0x3e, + 0x22, 0x00, 0x61, 0x78, 0xb4, 0x04, 0x4b, 0x05, + 0x22, 0xff, 0x21, 0x00, 0xf7, 0xff, 0xfe, 0x28, + 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x07, 0x84, 0x2e, 0x00, 0x65, 0x35, + 0x56, 0x47, 0x41, 0x38, 0x78, 0x31, 0x36, 0x00, + 0xb5, 0x00, 0xb0, 0x81, 0x48, 0x05, 0x69, 0xc0, + 0x68, 0x80, 0x46, 0x6b, 0x22, 0x00, 0x21, 0x00, + 0xf0, 0x0d, 0xfb, 0x5e, 0xb0, 0x01, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0xf0, 0x27, 0x00, 0xb0, 0x85, 0x97, 0x00, + 0x26, 0x10, 0x96, 0x01, 0x25, 0x05, 0x01, 0xed, + 0x95, 0x02, 0x20, 0xff, 0x30, 0xd1, 0x90, 0x03, + 0x97, 0x04, 0x22, 0x00, 0x21, 0x00, 0xb4, 0x06, + 0x4c, 0x0d, 0x69, 0xe0, 0x68, 0x81, 0x1c, 0x08, + 0xaa, 0x02, 0x1c, 0x3b, 0xf0, 0x0d, 0xfd, 0xc6, + 0xb0, 0x02, 0x97, 0x00, 0x20, 0xff, 0x30, 0xd1, + 0x90, 0x01, 0x95, 0x02, 0x96, 0x03, 0x97, 0x04, + 0x69, 0xe0, 0x68, 0x80, 0x46, 0x69, 0xf0, 0x0d, + 0xfc, 0xf7, 0xf7, 0xff, 0xff, 0xc9, 0xb0, 0x05, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x55, 0x18, 0xb5, 0x90, 0x20, 0x07, + 0xb0, 0x85, 0xf0, 0x03, 0xf8, 0xc1, 0x24, 0xff, + 0x34, 0xe1, 0x22, 0x05, 0x01, 0xd2, 0x21, 0x00, + 0x20, 0x07, 0x1c, 0x23, 0xf0, 0x03, 0xf8, 0xd0, + 0x27, 0x00, 0x22, 0x00, 0x21, 0x02, 0x20, 0x07, + 0x1c, 0x3b, 0xf0, 0x03, 0xfc, 0x79, 0x22, 0x01, + 0x21, 0x01, 0x20, 0x07, 0x1c, 0x3b, 0xf0, 0x03, + 0xfc, 0x2b, 0x22, 0x32, 0x21, 0x32, 0x20, 0x07, + 0xf0, 0x03, 0xf9, 0x86, 0x97, 0x00, 0x97, 0x01, + 0x20, 0x05, 0x01, 0xc0, 0x90, 0x02, 0x94, 0x03, + 0x97, 0x04, 0x48, 0x06, 0x69, 0xc0, 0x68, 0x80, + 0x46, 0x69, 0xf0, 0x0d, 0xfc, 0xc1, 0xf7, 0xff, + 0xff, 0x93, 0xb0, 0x05, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb4, 0x80, 0x01, 0x00, 0x4b, 0x2a, 0x18, 0xc0, + 0x4b, 0x2a, 0x69, 0xdb, 0x69, 0x9f, 0x00, 0x8b, + 0x18, 0x59, 0x02, 0x09, 0x18, 0x89, 0x18, 0x79, + 0x78, 0x02, 0x70, 0x0a, 0x78, 0x42, 0x1d, 0xcb, + 0x33, 0x39, 0x74, 0x1a, 0x78, 0x82, 0x1d, 0xcb, + 0x33, 0x99, 0x70, 0x1a, 0x78, 0xc2, 0x1d, 0xcb, + 0x33, 0xd9, 0x74, 0x1a, 0x79, 0x02, 0x1d, 0xcb, + 0x33, 0xff, 0x33, 0x3a, 0x70, 0x1a, 0x79, 0x42, + 0x1d, 0xcb, 0x33, 0xff, 0x33, 0x7a, 0x74, 0x1a, + 0x79, 0x82, 0x1d, 0xcb, 0x33, 0xff, 0x33, 0xda, + 0x70, 0x1a, 0x79, 0xc2, 0x23, 0x11, 0x01, 0x5b, + 0x18, 0xcb, 0x74, 0x1a, 0x7a, 0x02, 0x23, 0x05, + 0x01, 0xdb, 0x18, 0xcb, 0x70, 0x1a, 0x7a, 0x42, + 0x23, 0x0b, 0x01, 0x9b, 0x18, 0xcb, 0x74, 0x1a, + 0x7a, 0x82, 0x23, 0x19, 0x01, 0x5b, 0x18, 0xcb, + 0x70, 0x1a, 0x7a, 0xc2, 0x23, 0x1b, 0x01, 0x5b, + 0x18, 0xcb, 0x74, 0x1a, 0x7b, 0x02, 0x23, 0x0f, + 0x01, 0x9b, 0x18, 0xcb, 0x70, 0x1a, 0x7b, 0x42, + 0x23, 0x01, 0x02, 0x9b, 0x18, 0xcb, 0x74, 0x1a, + 0x7b, 0x82, 0x23, 0x23, 0x01, 0x5b, 0x18, 0xcb, + 0x70, 0x1a, 0x7b, 0xc0, 0x23, 0x25, 0x01, 0x5b, + 0x18, 0xc9, 0x74, 0x08, 0xbc, 0x80, 0x47, 0x70, + 0x2e, 0x08, 0x07, 0xa8, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0xb0, 0x23, 0x00, 0x1c, 0x07, 0x56, 0xc0, + 0x1c, 0x14, 0x1c, 0x0d, 0x28, 0x00, 0xd0, 0x0f, + 0x20, 0x50, 0x1c, 0x21, 0xf0, 0x11, 0xfe, 0x7a, + 0x19, 0x41, 0x23, 0x00, 0x56, 0xf8, 0x1c, 0x22, + 0xf7, 0xff, 0xff, 0x92, 0x23, 0x00, 0x37, 0x01, + 0x56, 0xf8, 0x34, 0x01, 0x28, 0x00, 0xd1, 0xef, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, + 0x06, 0x00, 0x0e, 0x00, 0x04, 0x09, 0x14, 0x09, + 0x04, 0x17, 0x14, 0x3f, 0x09, 0x03, 0xb0, 0x81, + 0x4a, 0x08, 0x5c, 0xd4, 0xab, 0x00, 0x70, 0x1c, + 0x07, 0x00, 0x0f, 0x00, 0x5c, 0x10, 0x70, 0x58, + 0x20, 0x00, 0x70, 0x98, 0x46, 0x68, 0x1c, 0x3a, + 0xf7, 0xff, 0xff, 0xce, 0xb0, 0x01, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x17, 0xc0, + 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, + 0x14, 0x09, 0x04, 0x17, 0x14, 0x3f, 0x0b, 0x03, + 0xb0, 0x82, 0x4a, 0x0f, 0x5c, 0xd4, 0xab, 0x00, + 0x70, 0x1c, 0x0a, 0x03, 0x07, 0x1b, 0x0f, 0x1b, + 0x5c, 0xd4, 0xab, 0x00, 0x70, 0x5c, 0x09, 0x03, + 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xd4, 0xab, 0x00, + 0x70, 0x9c, 0x07, 0x00, 0x0f, 0x00, 0x5c, 0x10, + 0x70, 0xd8, 0x20, 0x00, 0x71, 0x18, 0x46, 0x68, + 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0xa5, 0xb0, 0x02, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x17, 0xc0, 0xb5, 0x90, 0x04, 0x0f, + 0x14, 0x3f, 0x04, 0x12, 0x14, 0x12, 0x0f, 0x03, + 0xb0, 0x83, 0x49, 0x1b, 0x5c, 0xcc, 0xab, 0x00, + 0x70, 0x1c, 0x0e, 0x03, 0x07, 0x1b, 0x0f, 0x1b, + 0x5c, 0xcc, 0xab, 0x00, 0x70, 0x5c, 0x0d, 0x03, + 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x00, + 0x70, 0x9c, 0x0c, 0x03, 0x07, 0x1b, 0x0f, 0x1b, + 0x5c, 0xcc, 0xab, 0x00, 0x70, 0xdc, 0x0b, 0x03, + 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x01, + 0x70, 0x1c, 0x0a, 0x03, 0x07, 0x1b, 0x0f, 0x1b, + 0x5c, 0xcc, 0xab, 0x01, 0x70, 0x5c, 0x09, 0x03, + 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x01, + 0x70, 0x9c, 0x07, 0x00, 0x0f, 0x00, 0x5c, 0x08, + 0x70, 0xd8, 0x20, 0x00, 0x71, 0x18, 0x46, 0x68, + 0x1c, 0x39, 0xf7, 0xff, 0xff, 0x65, 0xb0, 0x03, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x17, 0xc0, 0xb5, 0xf0, 0x1c, 0x04, + 0x04, 0x10, 0x14, 0x00, 0xb0, 0x81, 0x90, 0x00, + 0x04, 0x1e, 0x14, 0x36, 0x22, 0x3c, 0x1c, 0x20, + 0x1c, 0x0f, 0xb0, 0x85, 0xf0, 0x11, 0xfe, 0x0e, + 0xa3, 0x72, 0xcb, 0x0c, 0xf0, 0x11, 0xfe, 0x1a, + 0xf0, 0x11, 0xfe, 0x1c, 0x4d, 0x71, 0x5c, 0x28, + 0xab, 0x02, 0x70, 0x18, 0x22, 0x38, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0xff, 0xa3, 0x6b, + 0xcb, 0x0c, 0xf0, 0x11, 0xfe, 0x0b, 0xf0, 0x11, + 0xfe, 0x0d, 0x5c, 0x28, 0xab, 0x02, 0x70, 0x58, + 0x22, 0x34, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0xf1, 0xa3, 0x64, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0xfd, 0xf0, 0x11, 0xfd, 0xff, 0x5c, 0x28, + 0xab, 0x02, 0x70, 0x98, 0x22, 0x30, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0xe3, 0xa3, 0x5d, + 0xcb, 0x0c, 0xf0, 0x11, 0xfd, 0xef, 0xf0, 0x11, + 0xfd, 0xf1, 0x5c, 0x28, 0xab, 0x02, 0x70, 0xd8, + 0x22, 0x2c, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0xd5, 0xa3, 0x56, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0xe1, 0xf0, 0x11, 0xfd, 0xe3, 0x5c, 0x28, + 0xab, 0x03, 0x70, 0x18, 0x22, 0x28, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0xc7, 0xa3, 0x4f, + 0xcb, 0x0c, 0xf0, 0x11, 0xfd, 0xd3, 0xf0, 0x11, + 0xfd, 0xd5, 0x5c, 0x28, 0xab, 0x03, 0x70, 0x58, + 0x22, 0x24, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0xb9, 0xa3, 0x48, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0xc5, 0xf0, 0x11, 0xfd, 0xc7, 0x5c, 0x28, + 0xab, 0x03, 0x70, 0x98, 0x22, 0x20, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0xab, 0xa3, 0x41, + 0xcb, 0x0c, 0xf0, 0x11, 0xfd, 0xb7, 0xf0, 0x11, + 0xfd, 0xb9, 0x5c, 0x28, 0xab, 0x03, 0x70, 0xd8, + 0x22, 0x1c, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0x9d, 0xa3, 0x3a, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0xa9, 0xf0, 0x11, 0xfd, 0xab, 0x5c, 0x28, + 0xab, 0x00, 0x70, 0x18, 0x22, 0x18, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0x8f, 0xa3, 0x33, + 0xcb, 0x0c, 0xf0, 0x11, 0xfd, 0x9b, 0xf0, 0x11, + 0xfd, 0x9d, 0x5c, 0x28, 0xab, 0x00, 0x70, 0x58, + 0x22, 0x14, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0x81, 0xa3, 0x2c, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0x8d, 0xf0, 0x11, 0xfd, 0x8f, 0x5c, 0x28, + 0xab, 0x00, 0x70, 0x98, 0x22, 0x10, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0x73, 0xa3, 0x25, + 0xcb, 0x0c, 0xf0, 0x11, 0xfd, 0x7f, 0xf0, 0x11, + 0xfd, 0x81, 0x5c, 0x28, 0xab, 0x00, 0x70, 0xd8, + 0x22, 0x0c, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0x65, 0xa3, 0x1e, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0x71, 0xf0, 0x11, 0xfd, 0x73, 0x5c, 0x28, + 0xab, 0x01, 0x70, 0x18, 0x22, 0x08, 0x1c, 0x20, + 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0x57, 0xa3, 0x17, + 0xcb, 0x0c, 0xf0, 0x11, 0xfd, 0x63, 0xf0, 0x11, + 0xfd, 0x65, 0x5c, 0x28, 0xab, 0x01, 0x70, 0x58, + 0x22, 0x04, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, + 0xfd, 0x49, 0xa3, 0x10, 0xcb, 0x0c, 0xf0, 0x11, + 0xfd, 0x55, 0xf0, 0x11, 0xfd, 0x57, 0x5c, 0x28, + 0xab, 0x01, 0x70, 0x98, 0xa3, 0x0b, 0xcb, 0x0c, + 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x11, 0xfd, 0x4a, + 0xf0, 0x11, 0xfd, 0x4c, 0x5c, 0x28, 0xab, 0x01, + 0x70, 0xd8, 0x20, 0x00, 0x73, 0x18, 0x46, 0x68, + 0x99, 0x05, 0x1c, 0x32, 0x33, 0x0c, 0xf7, 0xff, + 0xfe, 0x6f, 0xb0, 0x06, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x17, 0xc0, + 0x21, 0x00, 0xb0, 0x81, 0x91, 0x00, 0xe0, 0x02, + 0x99, 0x00, 0x31, 0x01, 0x91, 0x00, 0x99, 0x00, + 0x42, 0x81, 0xdb, 0xf9, 0xb0, 0x01, 0x47, 0x70, + 0xb5, 0xf0, 0x06, 0x06, 0x0e, 0x36, 0x25, 0x02, + 0x48, 0x0d, 0x60, 0x05, 0x27, 0x07, 0x4c, 0x0d, + 0x60, 0x25, 0x20, 0x01, 0x40, 0xb8, 0x40, 0x30, + 0xd0, 0x01, 0x20, 0x03, 0xe0, 0x00, 0x20, 0x02, + 0x49, 0x09, 0x60, 0x08, 0x20, 0x0a, 0xf7, 0xff, + 0xff, 0xdf, 0x20, 0x03, 0x60, 0x20, 0x20, 0x0c, + 0xf7, 0xff, 0xff, 0xda, 0x3f, 0x01, 0xd5, 0xeb, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x6e, 0x00, 0x14, 0x00, 0x6e, 0x00, 0x13, 0x00, + 0x6e, 0x00, 0x12, 0x00, 0xb5, 0x80, 0x06, 0x00, + 0x0e, 0x00, 0x06, 0x0f, 0x0e, 0x3f, 0x06, 0x00, + 0x0e, 0x00, 0x23, 0x80, 0x43, 0x18, 0xf7, 0xff, + 0xff, 0xcf, 0x20, 0x14, 0xf7, 0xff, 0xff, 0xc0, + 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xc9, 0x20, 0x03, + 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, 0x49, 0x04, + 0x60, 0x08, 0x49, 0x04, 0x60, 0x08, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x6e, 0x00, 0x14, 0x00, + 0x6e, 0x00, 0x12, 0x00, 0x6e, 0x00, 0x13, 0x00, + 0xb5, 0x00, 0x21, 0x01, 0x20, 0x02, 0xf7, 0xff, + 0xff, 0xd9, 0x48, 0x10, 0xf7, 0xff, 0xff, 0xa4, + 0x21, 0x00, 0x20, 0x02, 0xf7, 0xff, 0xff, 0xd2, + 0x48, 0x0d, 0xf7, 0xff, 0xff, 0x9d, 0x21, 0x44, + 0x20, 0x00, 0xf7, 0xff, 0xff, 0xcb, 0x21, 0x81, + 0x20, 0x01, 0xf7, 0xff, 0xff, 0xc7, 0x21, 0xf0, + 0x20, 0x02, 0xf7, 0xff, 0xff, 0xc3, 0x21, 0x45, + 0x20, 0x03, 0xf7, 0xff, 0xff, 0xbf, 0x21, 0x45, + 0x20, 0x04, 0xf7, 0xff, 0xff, 0xbb, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x20, + 0x00, 0x00, 0xc3, 0x50, 0xb5, 0x80, 0x06, 0x07, + 0x0e, 0x3f, 0x06, 0x08, 0x0e, 0x00, 0x28, 0x45, + 0xdd, 0x00, 0x20, 0x45, 0x1d, 0xc1, 0x31, 0x79, + 0x20, 0x03, 0xf7, 0xff, 0xff, 0xa7, 0x2f, 0x45, + 0xdd, 0x00, 0x27, 0x45, 0x20, 0x04, 0x1d, 0xf9, + 0x31, 0x79, 0xf7, 0xff, 0xff, 0x9f, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0xf0, 0x15, + 0xfb, 0xad, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, + 0xf0, 0x15, 0xfb, 0xac, 0xf0, 0x15, 0xfb, 0xa6, + 0x23, 0x01, 0x03, 0x9b, 0x43, 0x18, 0xf0, 0x15, + 0xfb, 0xa5, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, + 0xf0, 0x15, 0xfb, 0x9c, 0x4b, 0x05, 0x40, 0x18, + 0xf0, 0x15, 0xfb, 0x9c, 0xf0, 0x15, 0xfb, 0x96, + 0x4b, 0x03, 0x40, 0x18, 0xf0, 0x15, 0xfb, 0x96, + 0xbc, 0x08, 0x47, 0x18, 0xff, 0xff, 0xbf, 0xff, + 0xff, 0xff, 0xdf, 0xff, 0xb5, 0x80, 0x1c, 0x07, + 0xf7, 0xff, 0xff, 0xd8, 0x07, 0xf8, 0x0f, 0x40, + 0x49, 0x0a, 0x58, 0x08, 0x0c, 0x39, 0xd3, 0x05, + 0x23, 0x01, 0x02, 0x5b, 0x68, 0x01, 0x43, 0x19, + 0x60, 0x01, 0xe0, 0x03, 0x68, 0x01, 0x4b, 0x06, + 0x40, 0x19, 0x60, 0x01, 0xf0, 0x0e, 0xf8, 0x9a, + 0xf7, 0xff, 0xff, 0xd5, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x48, + 0xff, 0xff, 0xfd, 0xff, 0xb5, 0x00, 0x4a, 0x09, + 0x1f, 0x11, 0x20, 0x0e, 0xf0, 0x0e, 0xf8, 0x44, + 0x28, 0x00, 0xd1, 0x09, 0x48, 0x06, 0xf0, 0x0e, + 0xf8, 0x85, 0x49, 0x06, 0x20, 0x0e, 0xf0, 0x15, + 0xfb, 0x65, 0xf7, 0xff, 0xff, 0xbc, 0x20, 0x00, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x17, 0xe4, + 0x2e, 0x08, 0x1a, 0x3c, 0x2e, 0x00, 0x6d, 0x17, + 0xb5, 0x00, 0xf7, 0xff, 0xff, 0x9f, 0x21, 0x00, + 0x20, 0x0e, 0xf0, 0x15, 0xfb, 0x53, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x00, 0x48, 0x05, 0x7c, 0x01, + 0x29, 0x01, 0xd1, 0x05, 0x69, 0x41, 0x29, 0xff, + 0xd0, 0x02, 0x20, 0x01, 0xf0, 0x00, 0xf8, 0x04, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x17, 0xd0, + 0xb5, 0x90, 0x06, 0x0c, 0x0e, 0x24, 0x1c, 0x07, + 0xf7, 0xff, 0xff, 0x84, 0x48, 0x11, 0x68, 0x01, + 0x00, 0x49, 0x08, 0x49, 0x07, 0xfa, 0x43, 0x11, + 0x0a, 0x09, 0x02, 0x09, 0x43, 0x21, 0x60, 0x01, + 0x68, 0xc2, 0x2a, 0x00, 0xd1, 0x11, 0x68, 0x82, + 0x1c, 0x53, 0x68, 0x82, 0x60, 0x83, 0x00, 0x92, + 0x4b, 0x09, 0x50, 0x99, 0x68, 0x81, 0x29, 0x64, + 0xd1, 0x01, 0x21, 0x00, 0x60, 0x81, 0x68, 0x81, + 0x68, 0x42, 0x42, 0x91, 0xd1, 0x01, 0x21, 0x01, + 0x60, 0xc1, 0xf7, 0xff, 0xff, 0x74, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x17, 0xd0, + 0x2e, 0x08, 0x4c, 0xf0, 0xb5, 0x90, 0x1c, 0x07, + 0xf7, 0xff, 0xff, 0x58, 0x48, 0x10, 0x68, 0xc1, + 0x24, 0x00, 0x29, 0x00, 0xd1, 0x03, 0x68, 0x41, + 0x68, 0x82, 0x42, 0x91, 0xd0, 0x12, 0x68, 0x41, + 0x1c, 0x4a, 0x68, 0x41, 0x60, 0x42, 0x00, 0x89, + 0x4a, 0x0a, 0x58, 0x51, 0x60, 0x39, 0x68, 0x41, + 0x29, 0x64, 0xd1, 0x00, 0x60, 0x44, 0x60, 0xc4, + 0xf7, 0xff, 0xff, 0x51, 0x20, 0x01, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xff, 0x4b, + 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x17, 0xd0, 0x2e, 0x08, 0x4c, 0xf0, + 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x0e, 0x8e, 0xb8, + 0x28, 0x00, 0xd1, 0x04, 0x46, 0x68, 0xf7, 0xff, + 0xff, 0xcd, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x00, + 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x98, 0x00, 0x49, 0x07, 0x60, 0x08, + 0x20, 0x08, 0x85, 0x38, 0x20, 0x04, 0x85, 0x78, + 0x20, 0x0f, 0x02, 0x40, 0x86, 0xb8, 0x20, 0x01, + 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x1e, 0x00, + 0x21, 0x00, 0xb0, 0x81, 0x91, 0x00, 0xe0, 0x02, + 0x99, 0x00, 0x31, 0x01, 0x91, 0x00, 0x99, 0x00, + 0x42, 0x81, 0xd3, 0xf9, 0xb0, 0x01, 0x47, 0x70, + 0xb5, 0xf0, 0x06, 0x0d, 0x0e, 0x2d, 0xb0, 0x83, + 0x49, 0x23, 0x68, 0x09, 0x91, 0x01, 0x26, 0x09, + 0x1d, 0xc4, 0x34, 0x19, 0xab, 0x02, 0x70, 0x1d, + 0x20, 0xff, 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, + 0xb4, 0x04, 0x7b, 0x20, 0xa9, 0x03, 0xab, 0x02, + 0xf7, 0xfa, 0xfb, 0x72, 0xb0, 0x01, 0xaf, 0x01, + 0x78, 0x3f, 0xab, 0x02, 0x70, 0x1d, 0x20, 0xff, + 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, 0xb4, 0x04, + 0x7b, 0x20, 0xa9, 0x03, 0xab, 0x02, 0xf7, 0xfa, + 0xfb, 0x63, 0xb0, 0x01, 0xa9, 0x01, 0x78, 0x09, + 0x91, 0x00, 0xab, 0x02, 0x70, 0x1d, 0x20, 0xff, + 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, 0xb4, 0x04, + 0x7b, 0x20, 0xa9, 0x03, 0xab, 0x02, 0xf7, 0xfa, + 0xfb, 0x53, 0xb0, 0x01, 0xa8, 0x01, 0x78, 0x00, + 0x99, 0x00, 0x42, 0x8f, 0xd1, 0x06, 0x42, 0x87, + 0xd1, 0x04, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x1e, 0x70, 0x06, 0x06, + 0x0e, 0x36, 0xd1, 0xc3, 0x20, 0xff, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x02, 0x56, 0xc8, 0xb5, 0xf0, 0x06, 0x0c, + 0x0e, 0x24, 0x06, 0x16, 0x0e, 0x36, 0x25, 0x0a, + 0xb0, 0x82, 0xab, 0x00, 0x70, 0x1c, 0x70, 0x5e, + 0x1c, 0x07, 0x30, 0x20, 0x90, 0x01, 0x98, 0x01, + 0x7b, 0x00, 0x46, 0x69, 0x22, 0x02, 0xf7, 0xfa, + 0xfa, 0xcc, 0x1c, 0x38, 0x1c, 0x21, 0xf7, 0xff, + 0xff, 0x9b, 0x1c, 0x01, 0x2c, 0x00, 0xd0, 0x05, + 0x2c, 0x09, 0xd0, 0x03, 0x2c, 0x1f, 0xd1, 0x03, + 0x20, 0x7f, 0xe0, 0x02, 0x20, 0x5e, 0xe0, 0x00, + 0x20, 0xff, 0x40, 0x71, 0x40, 0x08, 0xd1, 0x03, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x1e, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0xd1, 0xde, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0x90, 0x1c, 0x07, 0x2a, 0x00, 0xd0, 0x01, + 0x24, 0x09, 0xe0, 0x00, 0x24, 0x00, 0x00, 0x90, + 0x19, 0xc0, 0x6c, 0x02, 0x42, 0x8a, 0xd0, 0x15, + 0x64, 0x01, 0x20, 0x03, 0x4a, 0x19, 0x29, 0x01, + 0xd0, 0x13, 0x29, 0x02, 0xd0, 0x1f, 0x29, 0x03, + 0xd1, 0x0c, 0x60, 0x10, 0x1c, 0x38, 0x1c, 0x21, + 0xf7, 0xff, 0xff, 0x66, 0x23, 0xf3, 0x40, 0x18, + 0x22, 0x08, 0x43, 0x02, 0x1c, 0x38, 0x1c, 0x21, + 0xf7, 0xff, 0xff, 0xac, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x60, 0x10, 0x1c, 0x38, 0x1c, 0x21, + 0xf7, 0xff, 0xff, 0x56, 0x22, 0xf3, 0x40, 0x02, + 0x1c, 0x38, 0x1c, 0x21, 0xf7, 0xff, 0xff, 0x9e, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, + 0x1c, 0x21, 0xf7, 0xff, 0xff, 0x49, 0x23, 0xf3, + 0x40, 0x18, 0x22, 0x04, 0x43, 0x02, 0x1c, 0x38, + 0x1c, 0x21, 0xf7, 0xff, 0xff, 0x8f, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x6e, 0x00, 0x11, 0x00, + 0xb5, 0xf0, 0x1c, 0x0c, 0x68, 0x41, 0x68, 0x09, + 0x68, 0x80, 0x1c, 0x1f, 0x28, 0x00, 0xd0, 0x01, + 0x6b, 0x8b, 0xe0, 0x00, 0x23, 0x00, 0x6b, 0x0e, + 0x43, 0x32, 0x6b, 0xcd, 0x43, 0x2a, 0x43, 0x1a, + 0x43, 0x1e, 0x1c, 0x15, 0x1c, 0x02, 0x1c, 0x08, + 0x21, 0x01, 0xf7, 0xff, 0xff, 0xa5, 0x20, 0x00, + 0x2f, 0x00, 0xdd, 0x07, 0x88, 0x29, 0x54, 0x21, + 0x88, 0x31, 0x54, 0x21, 0x30, 0x01, 0x35, 0x02, + 0x42, 0xb8, 0xdb, 0xf7, 0x1c, 0x38, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x68, 0x41, + 0x68, 0x0c, 0x68, 0x80, 0x1c, 0x1f, 0x28, 0x00, + 0xd0, 0x01, 0x6b, 0xa6, 0xe0, 0x00, 0x26, 0x00, + 0x6b, 0x21, 0x43, 0x11, 0x6b, 0xe2, 0x43, 0x11, + 0x43, 0x31, 0x1c, 0x02, 0x1c, 0x0d, 0x21, 0x01, + 0x1c, 0x20, 0xf7, 0xff, 0xff, 0x81, 0x20, 0x00, + 0x2f, 0x00, 0xdd, 0x09, 0x99, 0x01, 0x5c, 0x09, + 0x80, 0x29, 0x6b, 0x21, 0x19, 0x89, 0x88, 0x09, + 0x30, 0x01, 0x35, 0x02, 0x42, 0xb8, 0xdb, 0xf5, + 0x1c, 0x38, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0xb0, 0x68, 0x42, 0x68, 0x17, + 0x68, 0x82, 0x2a, 0x00, 0xd0, 0x01, 0x6b, 0xbc, + 0xe0, 0x00, 0x24, 0x00, 0x08, 0x48, 0xd3, 0x0a, + 0x23, 0xfe, 0x40, 0x19, 0x6b, 0x38, 0x43, 0x08, + 0x6b, 0x79, 0x43, 0x08, 0x6b, 0xf9, 0x43, 0x08, + 0x43, 0x20, 0x1c, 0x05, 0xe0, 0x05, 0x6b, 0x38, + 0x43, 0x08, 0x6b, 0xf9, 0x43, 0x08, 0x43, 0x20, + 0x1c, 0x05, 0x21, 0x02, 0x1c, 0x38, 0xf7, 0xff, + 0xff, 0x4f, 0x6b, 0x38, 0x43, 0x20, 0x88, 0x29, + 0x88, 0x01, 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xb0, + 0x06, 0x15, 0x0e, 0x2d, 0x68, 0x42, 0x68, 0x13, + 0x68, 0x82, 0x2a, 0x00, 0xd0, 0x01, 0x6b, 0x98, + 0xe0, 0x00, 0x20, 0x00, 0x07, 0xcc, 0x0f, 0xe4, + 0xd0, 0x08, 0x6b, 0x1f, 0x43, 0x39, 0x6b, 0x5f, + 0x43, 0x39, 0x6b, 0xdf, 0x43, 0x39, 0x43, 0x01, + 0x1c, 0x0f, 0xe0, 0x05, 0x6b, 0x1f, 0x43, 0x39, + 0x6b, 0xdf, 0x43, 0x39, 0x43, 0x01, 0x1c, 0x0f, + 0x21, 0x02, 0x1c, 0x18, 0xf7, 0xff, 0xff, 0x24, + 0x80, 0x3d, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x47, 0x70, 0xb5, 0x80, 0x68, 0x41, 0x68, 0x0a, + 0x68, 0x80, 0x28, 0x00, 0xd0, 0x01, 0x21, 0x09, + 0xe0, 0x00, 0x21, 0x00, 0x27, 0x00, 0x1c, 0x10, + 0x6c, 0xd2, 0xf0, 0x11, 0xf9, 0xdb, 0x08, 0x40, + 0xd3, 0x00, 0x27, 0x01, 0x1c, 0x38, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x68, 0x42, + 0x68, 0x17, 0x68, 0x80, 0x28, 0x00, 0xd0, 0x01, + 0x24, 0x09, 0xe0, 0x00, 0x24, 0x00, 0x29, 0x00, + 0xd0, 0x16, 0x29, 0x01, 0xd0, 0x21, 0x29, 0x02, + 0xd1, 0x0e, 0x22, 0x80, 0x6c, 0xbb, 0x1c, 0x38, + 0x1c, 0x21, 0xf0, 0x11, 0xf9, 0xc1, 0x48, 0x1e, + 0xf7, 0xff, 0xfe, 0x66, 0x22, 0x00, 0x6c, 0xbb, + 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x11, 0xf9, 0xb8, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x6c, 0xfa, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x11, + 0xf9, 0xad, 0x22, 0x9f, 0x40, 0x02, 0x6c, 0xbb, + 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x11, 0xf9, 0xa8, + 0xe7, 0xee, 0x6c, 0xfa, 0x1c, 0x38, 0x1c, 0x21, + 0xf0, 0x11, 0xf9, 0xa0, 0x22, 0x20, 0x43, 0x02, + 0x6c, 0xbb, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x11, + 0xf9, 0x9b, 0x25, 0x00, 0x6c, 0xfa, 0x1c, 0x38, + 0x1c, 0x21, 0xf0, 0x11, 0xf9, 0x93, 0x1c, 0x06, + 0x09, 0x80, 0xd2, 0x05, 0x20, 0x14, 0xf7, 0xff, + 0xfe, 0x37, 0x35, 0x01, 0x2d, 0x0a, 0xdb, 0xf1, + 0x22, 0x40, 0x43, 0x32, 0x6c, 0xbb, 0x1c, 0x38, + 0x1c, 0x21, 0xf0, 0x11, 0xf9, 0x85, 0xe7, 0xcb, + 0x00, 0x01, 0x86, 0xa0, 0xb5, 0x80, 0x49, 0x0f, + 0x4f, 0x0f, 0x8e, 0xfa, 0x20, 0x00, 0x43, 0xc0, + 0x2a, 0x00, 0xd1, 0x13, 0x8d, 0xba, 0x06, 0x12, + 0x0e, 0x12, 0x2a, 0x0c, 0xd1, 0x0e, 0x8d, 0xf8, + 0x28, 0x00, 0xd0, 0x09, 0x8d, 0xf8, 0x1e, 0x82, + 0xb4, 0x04, 0x78, 0x4a, 0x1c, 0x8b, 0x78, 0x09, + 0x48, 0x06, 0xf0, 0x00, 0xfd, 0x69, 0xb0, 0x01, + 0x20, 0x00, 0x85, 0xb8, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x4e, 0x80, + 0x48, 0x08, 0x8d, 0x81, 0x29, 0x00, 0xd0, 0x02, + 0x20, 0x00, 0x43, 0xc0, 0x47, 0x70, 0x21, 0x0c, + 0x85, 0x81, 0x21, 0x01, 0x02, 0xc9, 0x85, 0xc1, + 0x21, 0x09, 0x02, 0x49, 0x86, 0xc1, 0x20, 0x00, + 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, + 0xb5, 0x90, 0x4f, 0x15, 0x68, 0x38, 0x28, 0x00, + 0xd0, 0x23, 0xf7, 0xff, 0xff, 0xbf, 0x48, 0x13, + 0x68, 0x00, 0x68, 0x79, 0x1a, 0x41, 0x29, 0x02, + 0xd3, 0x1b, 0x60, 0x78, 0x4c, 0x10, 0x8e, 0xa0, + 0x4f, 0x10, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, + 0xf0, 0x00, 0xfc, 0xda, 0x8e, 0xa0, 0x28, 0x00, + 0xd1, 0x04, 0x23, 0xc9, 0x00, 0x9b, 0x18, 0xf8, + 0xf0, 0x00, 0xfc, 0xd2, 0x69, 0xb8, 0x28, 0x06, + 0xd0, 0x05, 0x23, 0x03, 0x02, 0x1b, 0x18, 0xf8, + 0x6b, 0xc0, 0x28, 0x06, 0xd1, 0x01, 0xf7, 0xff, + 0xff, 0xc3, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x1a, 0x50, 0x2e, 0x08, 0x05, 0xc0, + 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x4e, 0xd0, + 0xb5, 0x00, 0x1c, 0x10, 0x1c, 0x1a, 0x1c, 0x03, + 0x1c, 0x08, 0x1c, 0x19, 0xf7, 0xf9, 0xfd, 0x06, + 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, + 0x4f, 0x23, 0x24, 0x02, 0x48, 0x23, 0x60, 0x04, + 0x22, 0x50, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x11, + 0xf9, 0x57, 0x20, 0x80, 0x1d, 0xf9, 0x31, 0x19, + 0x73, 0x08, 0x20, 0x03, 0x07, 0x00, 0x63, 0x38, + 0x02, 0xe0, 0x63, 0x78, 0x03, 0x20, 0x63, 0xb8, + 0x03, 0x60, 0x63, 0xf8, 0x48, 0x1a, 0x64, 0xb8, + 0x48, 0x1a, 0x64, 0xf8, 0x60, 0x3f, 0x48, 0x1a, + 0x60, 0xf8, 0x60, 0x7c, 0x24, 0x00, 0x60, 0xbc, + 0x48, 0x18, 0x61, 0x78, 0x48, 0x18, 0x61, 0xb8, + 0x48, 0x18, 0x61, 0xf8, 0x48, 0x18, 0x62, 0x38, + 0x48, 0x18, 0x61, 0x38, 0x48, 0x18, 0x62, 0x78, + 0x48, 0x18, 0x62, 0xb8, 0x1c, 0x38, 0xf0, 0x00, + 0xf8, 0xcb, 0x4f, 0x17, 0x28, 0x00, 0xd0, 0x03, + 0x60, 0x3c, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x01, 0x06, 0x40, 0xf0, 0x15, 0xf8, 0x2d, + 0x48, 0x12, 0xf7, 0xff, 0xfd, 0x71, 0x20, 0x01, + 0x60, 0x38, 0x48, 0x11, 0x68, 0x00, 0x60, 0x78, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x4e, 0x80, 0x6e, 0x00, 0x11, 0x00, + 0x2e, 0x00, 0x6e, 0xe1, 0x2e, 0x00, 0x6e, 0x45, + 0x2e, 0x08, 0x4e, 0xd0, 0x2e, 0x00, 0x6f, 0xcd, + 0x2e, 0x00, 0x70, 0x19, 0x2e, 0x00, 0x70, 0x67, + 0x2e, 0x00, 0x70, 0xbb, 0x2e, 0x00, 0x72, 0xb5, + 0x2e, 0x00, 0x71, 0x07, 0x2e, 0x00, 0x71, 0x31, + 0x2e, 0x08, 0x1a, 0x50, 0x00, 0x06, 0x1a, 0x80, + 0x2e, 0x08, 0x05, 0xc0, 0xb5, 0x00, 0x23, 0xc9, + 0x00, 0x9b, 0x43, 0x4b, 0x68, 0xc2, 0x18, 0xd2, + 0x60, 0x10, 0x60, 0x91, 0x60, 0x50, 0x1c, 0x10, + 0xf0, 0x00, 0xfb, 0xc4, 0x20, 0x00, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x80, 0x22, 0x80, 0x21, 0x1f, + 0x6c, 0x83, 0x1c, 0x07, 0xf0, 0x11, 0xf8, 0x8c, + 0x48, 0x3e, 0xf7, 0xff, 0xfd, 0x31, 0x22, 0x55, + 0x21, 0x02, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x83, 0x21, 0x02, 0x6c, 0xfa, 0x1c, 0x38, + 0xf0, 0x11, 0xf8, 0x7c, 0x28, 0x55, 0xd0, 0x04, + 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x22, 0x33, 0x21, 0x05, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x71, 0x22, 0x33, + 0x21, 0x0e, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x6b, 0x22, 0x21, 0x21, 0x17, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x65, 0x22, 0x00, + 0x21, 0x01, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x5f, 0x22, 0x00, 0x21, 0x0a, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x59, 0x22, 0x01, + 0x21, 0x02, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x53, 0x22, 0x01, 0x21, 0x0b, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x4d, 0x22, 0x00, + 0x21, 0x03, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x47, 0x22, 0x00, 0x21, 0x0c, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x41, 0x22, 0x00, + 0x21, 0x04, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x3b, 0x22, 0x01, 0x21, 0x0d, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x35, 0x22, 0x02, + 0x21, 0x1e, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x2f, 0x22, 0x04, 0x21, 0x1c, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x29, 0x22, 0x03, + 0x21, 0x1b, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x23, 0x22, 0x01, 0x21, 0x1f, 0x6c, 0xbb, + 0x1c, 0x38, 0xf0, 0x11, 0xf8, 0x1d, 0x22, 0x01, + 0x21, 0x18, 0x6c, 0xbb, 0x1c, 0x38, 0xf0, 0x11, + 0xf8, 0x17, 0x21, 0x1a, 0x6c, 0xfa, 0x1c, 0x38, + 0xf0, 0x11, 0xf8, 0x10, 0x20, 0x00, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xc3, 0x50, + 0xb5, 0x90, 0x1c, 0x07, 0xf7, 0xff, 0xff, 0x75, + 0x28, 0x00, 0xda, 0x04, 0x20, 0x00, 0x43, 0xc0, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x24, 0x00, + 0x64, 0x3c, 0x64, 0x7c, 0x1c, 0x38, 0xf0, 0x00, + 0xfc, 0x29, 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0xb5, 0x00, 0x1c, 0x13, + 0x1c, 0x0a, 0x1c, 0x01, 0x1c, 0x18, 0xf0, 0x00, + 0xf8, 0xe5, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, + 0x1c, 0x0b, 0x68, 0x54, 0x69, 0x27, 0x1c, 0x11, + 0x2f, 0x00, 0xd0, 0x04, 0x68, 0x89, 0x1c, 0x02, + 0x1c, 0x20, 0xf0, 0x10, 0xff, 0xe9, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x69, 0x82, + 0x68, 0x44, 0xb0, 0x81, 0x42, 0x8a, 0xd1, 0x03, + 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x22, 0xff, 0xab, 0x00, 0x61, 0x81, 0x70, 0x1a, + 0x22, 0x02, 0x70, 0x5a, 0x22, 0x00, 0x70, 0x9a, + 0x70, 0xd9, 0x69, 0x27, 0x2f, 0x00, 0xd0, 0x05, + 0x46, 0x6a, 0x68, 0x81, 0x23, 0x04, 0x1c, 0x20, + 0xf0, 0x10, 0xff, 0xca, 0xb0, 0x01, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x49, 0x04, + 0x68, 0x09, 0x31, 0x19, 0x61, 0x01, 0x21, 0x00, + 0xf7, 0xff, 0xff, 0xd8, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x05, 0xc0, 0xb5, 0xf0, 0x1c, 0x07, + 0x68, 0x40, 0x69, 0x40, 0x25, 0x00, 0xb0, 0x9e, + 0x28, 0x00, 0xd1, 0x08, 0x21, 0x02, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0xc8, 0x1c, 0x28, 0xb0, 0x1e, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x23, 0x11, + 0x01, 0x5b, 0x18, 0xfc, 0x70, 0x25, 0x23, 0xff, + 0x22, 0x00, 0x68, 0x7e, 0x69, 0x76, 0x1c, 0x38, + 0x1c, 0x21, 0x33, 0x01, 0xf0, 0x10, 0xff, 0x9a, + 0x46, 0x68, 0x22, 0xff, 0x1c, 0x21, 0x32, 0x01, + 0xf0, 0x01, 0xfb, 0x08, 0x28, 0x00, 0xda, 0x11, + 0x23, 0x03, 0x02, 0x1b, 0x18, 0xf8, 0x6a, 0x01, + 0x31, 0x01, 0x62, 0x01, 0x29, 0x64, 0xdd, 0x03, + 0x21, 0x00, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xa2, + 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x1e, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x46, 0x68, 0x1d, 0xc1, + 0x31, 0x6b, 0x23, 0x01, 0x9a, 0x16, 0x68, 0x7c, + 0x69, 0xa4, 0x1c, 0x38, 0xf0, 0x10, 0xff, 0x72, + 0x21, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x8e, + 0x21, 0x01, 0x68, 0x7a, 0x6a, 0x92, 0x1c, 0x38, + 0xf0, 0x10, 0xff, 0x64, 0x1c, 0x28, 0xb0, 0x1e, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, + 0x21, 0x01, 0x68, 0x42, 0x69, 0xd2, 0xf0, 0x10, + 0xff, 0x59, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, + 0x1d, 0xc6, 0x36, 0x19, 0x1c, 0x07, 0xf7, 0xff, + 0xff, 0xf2, 0x0a, 0x00, 0xd2, 0x03, 0x20, 0x00, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x21, 0x02, + 0x68, 0x7a, 0x69, 0xd2, 0x1c, 0x38, 0xf0, 0x10, + 0xff, 0x45, 0x1c, 0x04, 0x21, 0x03, 0x68, 0x7a, + 0x69, 0xd2, 0x1c, 0x38, 0xf0, 0x10, 0xff, 0x3e, + 0x02, 0x00, 0x43, 0x20, 0x04, 0x04, 0x0c, 0x24, + 0x69, 0xf8, 0x42, 0xa0, 0xda, 0x01, 0x04, 0x04, + 0x0c, 0x24, 0x25, 0x00, 0x2c, 0x00, 0xdd, 0x09, + 0x21, 0x00, 0x68, 0x7a, 0x69, 0xd2, 0x1c, 0x38, + 0xf0, 0x10, 0xff, 0x2c, 0x55, 0x70, 0x35, 0x01, + 0x42, 0xa5, 0xdb, 0xf5, 0x1c, 0x21, 0xa0, 0x07, + 0xf0, 0x10, 0xff, 0x98, 0x69, 0xb8, 0x28, 0x06, + 0xd1, 0x04, 0x68, 0xf8, 0x1c, 0x31, 0x1c, 0x22, + 0xf0, 0x00, 0xff, 0x5e, 0x1c, 0x20, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x6c, 0x65, 0x6e, 0x3d, 0x25, + 0x64, 0x0a, 0x00, 0x00, 0xb5, 0xf0, 0x1c, 0x14, + 0x1c, 0x0d, 0x1c, 0x07, 0xf7, 0xff, 0xff, 0xab, + 0x22, 0x01, 0x21, 0x01, 0x68, 0x7b, 0x6a, 0x1b, + 0x1c, 0x38, 0xf0, 0x10, 0xfe, 0xfd, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0x99, 0x09, 0xc0, 0xd3, 0x23, + 0x06, 0x22, 0x0e, 0x12, 0x21, 0x02, 0x68, 0x7b, + 0x6a, 0x1b, 0x1c, 0x38, 0xf0, 0x10, 0xfe, 0xf0, + 0x12, 0x22, 0x21, 0x03, 0x68, 0x7b, 0x6a, 0x1b, + 0x1c, 0x38, 0xf0, 0x10, 0xfe, 0xe9, 0x26, 0x00, + 0x2c, 0x00, 0xdd, 0x09, 0x5d, 0xaa, 0x21, 0x00, + 0x68, 0x7b, 0x6a, 0x1b, 0x1c, 0x38, 0xf0, 0x10, + 0xfe, 0xdf, 0x36, 0x01, 0x42, 0xa6, 0xdb, 0xf5, + 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x78, 0x08, 0x80, + 0xd3, 0x02, 0xa0, 0x0b, 0xf0, 0x10, 0xff, 0x46, + 0x22, 0x00, 0x21, 0x01, 0x68, 0x7b, 0x6a, 0x1b, + 0x1c, 0x38, 0xf0, 0x10, 0xfe, 0xcd, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0x69, 0x08, 0x80, 0xd3, 0x02, + 0xa0, 0x0b, 0xf0, 0x10, 0xff, 0x37, 0x20, 0x00, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x63, 0x69, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x20, 0x31, 0x0a, 0x00, 0x00, 0x00, + 0x63, 0x69, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x3a, 0x20, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x20, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x20, 0x32, 0x0a, 0x00, 0x00, 0x00, + 0xb5, 0x00, 0x1c, 0x0a, 0x1d, 0xc1, 0x31, 0xff, + 0x31, 0x1a, 0xf7, 0xff, 0xff, 0x8f, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x80, 0x1c, 0x07, 0xa0, 0x0d, + 0xf0, 0x10, 0xff, 0x04, 0x22, 0x08, 0x21, 0x01, + 0x68, 0x7b, 0x6a, 0x1b, 0x1c, 0x38, 0xf0, 0x10, + 0xfe, 0x8b, 0x21, 0x03, 0x1c, 0x38, 0xf7, 0xff, + 0xfe, 0xa9, 0x48, 0x0a, 0x68, 0x00, 0x30, 0x05, + 0x61, 0x38, 0x20, 0x00, 0x23, 0x03, 0x02, 0x1b, + 0x18, 0xf9, 0x62, 0x08, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x0a, 0x00, 0x2e, 0x08, 0x05, 0xc0, + 0xb5, 0x90, 0x22, 0x00, 0x21, 0x01, 0x68, 0x43, + 0x6a, 0x1b, 0x1c, 0x07, 0xf0, 0x10, 0xfe, 0x68, + 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x04, 0x23, 0x40, + 0x40, 0x18, 0x4c, 0x14, 0xd1, 0x13, 0x68, 0x20, + 0x30, 0x05, 0x23, 0x03, 0x02, 0x1b, 0x61, 0x38, + 0x18, 0xf8, 0x6a, 0x01, 0x31, 0x01, 0x62, 0x01, + 0x29, 0x0a, 0xdd, 0x03, 0x21, 0x00, 0x1c, 0x38, + 0xf7, 0xff, 0xfe, 0x74, 0x20, 0x00, 0x43, 0xc0, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x22, 0x04, + 0x21, 0x01, 0x68, 0x7b, 0x6a, 0x1b, 0x1c, 0x38, + 0xf0, 0x10, 0xfe, 0x46, 0x21, 0x04, 0x1c, 0x38, + 0xf7, 0xff, 0xfe, 0x64, 0x68, 0x20, 0x30, 0x05, + 0x61, 0x38, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xc0, + 0xb5, 0xf0, 0x26, 0xff, 0x36, 0x01, 0x61, 0xc6, + 0x1d, 0xc5, 0x35, 0x19, 0x1c, 0x07, 0xf7, 0xff, + 0xfe, 0xd6, 0x4c, 0x17, 0x28, 0x00, 0xd1, 0x0d, + 0xa0, 0x16, 0xf0, 0x10, 0xfe, 0x9b, 0x21, 0xfe, + 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0x47, 0x68, 0x20, + 0x61, 0x78, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x78, 0x28, 0x02, 0x00, + 0x78, 0x69, 0x43, 0x01, 0x61, 0xf9, 0xa0, 0x19, + 0xf0, 0x10, 0xfe, 0x88, 0x69, 0xf8, 0x42, 0xb0, + 0xdd, 0x00, 0x61, 0xfe, 0x22, 0x02, 0x21, 0x01, + 0x68, 0x7b, 0x6a, 0x1b, 0x1c, 0x38, 0xf0, 0x10, + 0xfe, 0x0b, 0x68, 0x20, 0x30, 0x05, 0x61, 0x38, + 0x21, 0x05, 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0x26, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x05, 0xc0, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x74, 0x6f, + 0x20, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, 0x69, 0x7a, + 0x65, 0x0a, 0x00, 0x00, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x20, 0x62, 0x75, 0x66, 0x66, + 0x65, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x20, + 0x3d, 0x20, 0x25, 0x30, 0x34, 0x78, 0x0a, 0x00, + 0xb5, 0xb0, 0x1c, 0x07, 0xf7, 0xff, 0xfe, 0x6f, + 0x23, 0x40, 0x40, 0x18, 0x25, 0x00, 0x43, 0xed, + 0x4c, 0x3d, 0x28, 0x00, 0xd1, 0x0c, 0xa0, 0x3d, + 0xf0, 0x10, 0xfe, 0x38, 0x21, 0xff, 0x1c, 0x38, + 0xf7, 0xff, 0xfd, 0xe4, 0x68, 0x20, 0x61, 0x78, + 0x1c, 0x28, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x22, 0x03, 0x21, 0x01, 0x68, 0x7b, 0x6a, 0x1b, + 0x1c, 0x38, 0xf0, 0x10, 0xfd, 0xb5, 0x1c, 0x38, + 0xf7, 0xff, 0xfe, 0x51, 0x09, 0xc0, 0xd2, 0x0c, + 0xa0, 0x3d, 0xf0, 0x10, 0xfe, 0x1f, 0x21, 0xff, + 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0xcb, 0x68, 0x20, + 0x61, 0x78, 0x1c, 0x28, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x22, 0x02, 0x21, 0x02, 0x68, 0x7b, + 0x6a, 0x1b, 0x1c, 0x38, 0xf0, 0x10, 0xfd, 0x9c, + 0x22, 0x00, 0x21, 0x03, 0x68, 0x7b, 0x6a, 0x1b, + 0x1c, 0x38, 0xf0, 0x10, 0xfd, 0x95, 0x69, 0xf8, + 0x12, 0x02, 0x21, 0x00, 0x68, 0x7b, 0x6a, 0x1b, + 0x1c, 0x38, 0xf0, 0x10, 0xfd, 0x8d, 0x69, 0xf8, + 0x06, 0x02, 0x0e, 0x12, 0x21, 0x00, 0x68, 0x7b, + 0x6a, 0x1b, 0x1c, 0x38, 0xf0, 0x10, 0xfd, 0x84, + 0xa0, 0x34, 0xf0, 0x10, 0xfd, 0xf3, 0x1c, 0x38, + 0xf7, 0xff, 0xfe, 0x1d, 0x08, 0x80, 0xd3, 0x02, + 0xa0, 0x3e, 0xf0, 0x10, 0xfd, 0xeb, 0x22, 0x00, + 0x21, 0x01, 0x68, 0x7b, 0x6a, 0x1b, 0x1c, 0x38, + 0xf0, 0x10, 0xfd, 0x72, 0x68, 0xf8, 0x69, 0xf9, + 0xf0, 0x00, 0xfa, 0x3e, 0x48, 0x42, 0x68, 0xf9, + 0x4b, 0x42, 0x18, 0xc9, 0x61, 0x48, 0x68, 0xf8, + 0x18, 0xc0, 0x61, 0x07, 0x48, 0x40, 0x68, 0xf9, + 0x18, 0xc9, 0x61, 0x88, 0x68, 0xf8, 0x18, 0xc0, + 0x60, 0xc7, 0x69, 0xf9, 0xa0, 0x3d, 0xf0, 0x10, + 0xfd, 0xcd, 0x68, 0x20, 0x61, 0x38, 0x21, 0x06, + 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0x77, 0x20, 0x00, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x05, 0xc0, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x74, 0x6f, + 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, + 0x73, 0x69, 0x7a, 0x65, 0x0a, 0x00, 0x00, 0x00, + 0x63, 0x69, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x3a, + 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x20, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, + 0x20, 0x32, 0x0a, 0x00, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x73, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x65, 0x67, + 0x6f, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, + 0x69, 0x7a, 0x65, 0x20, 0x62, 0x61, 0x63, 0x6b, + 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x0a, 0x00, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x5f, 0x6e, 0x65, 0x67, 0x6f, + 0x74, 0x69, 0x61, 0x74, 0x65, 0x3a, 0x20, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x20, 0x73, 0x69, + 0x7a, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0a, 0x00, + 0x2e, 0x00, 0x74, 0xf1, 0x00, 0x01, 0x3b, 0x80, + 0x2e, 0x00, 0x75, 0x03, 0x63, 0x69, 0x5f, 0x73, + 0x6c, 0x6f, 0x74, 0x3a, 0x20, 0x62, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x20, 0x73, 0x69, 0x7a, 0x65, + 0x20, 0x3d, 0x20, 0x25, 0x30, 0x34, 0x78, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0xb5, 0x80, 0x1c, 0x07, + 0x20, 0xff, 0x30, 0x01, 0x61, 0xf8, 0x21, 0x00, + 0x1c, 0x38, 0xf7, 0xff, 0xfc, 0xeb, 0x48, 0x05, + 0x68, 0x00, 0x61, 0x38, 0x48, 0x04, 0xf7, 0xfe, + 0xf8, 0x2d, 0x60, 0xf8, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xc0, + 0x00, 0x01, 0x3b, 0x9c, 0xb5, 0x00, 0x68, 0xc0, + 0xf7, 0xfe, 0xf8, 0x42, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0x80, 0x1c, 0x1f, 0x06, 0x0b, 0x0e, 0x1b, + 0x69, 0x81, 0x29, 0x06, 0xd0, 0x04, 0x20, 0x00, + 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x78, 0x11, 0x29, 0xff, 0xd1, 0x05, 0xf7, 0xff, + 0xfc, 0xe5, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0xc0, 0x1c, 0x11, 0x1c, 0x3a, + 0xf0, 0x00, 0xfb, 0x9a, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x69, 0x00, 0x49, 0x04, 0x68, 0x09, + 0x1a, 0x40, 0x4b, 0x04, 0x42, 0x98, 0xd2, 0x01, + 0x20, 0x00, 0x47, 0x70, 0x20, 0x01, 0x47, 0x70, + 0x2e, 0x08, 0x05, 0xc0, 0x80, 0x00, 0x00, 0x00, + 0xb5, 0x90, 0x68, 0x44, 0x6a, 0x61, 0x1c, 0x07, + 0x29, 0x00, 0xd0, 0x03, 0x1c, 0x38, 0xf0, 0x10, + 0xfc, 0x7b, 0xe0, 0x00, 0x20, 0x01, 0x08, 0x40, + 0xd2, 0x06, 0x21, 0x00, 0x1c, 0x38, 0xf7, 0xff, + 0xfc, 0x99, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x69, 0xb8, 0x28, 0x00, 0xd1, 0xf9, 0x6a, 0xa2, + 0x2a, 0x00, 0xd0, 0x03, 0x21, 0x02, 0x1c, 0x38, + 0xf0, 0x10, 0xfc, 0x68, 0x21, 0x01, 0x1c, 0x38, + 0xf7, 0xff, 0xfc, 0x88, 0x20, 0x00, 0x23, 0x03, + 0x02, 0x1b, 0x18, 0xf9, 0x62, 0x08, 0x48, 0x03, + 0x68, 0x00, 0x30, 0x19, 0x61, 0x38, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xc0, + 0xb5, 0x90, 0x1c, 0x07, 0xf7, 0xff, 0xff, 0xcc, + 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xba, 0x28, 0x00, + 0xd1, 0x03, 0x43, 0xc0, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x69, 0xb8, 0x4c, 0x23, 0x28, 0x05, + 0xd0, 0x30, 0xdc, 0x0b, 0x28, 0x01, 0xd0, 0x1e, + 0x28, 0x02, 0xd0, 0x23, 0x28, 0x03, 0xd0, 0x25, + 0x28, 0x04, 0xd1, 0x14, 0x1c, 0x38, 0xf7, 0xff, + 0xfe, 0x03, 0xe0, 0x10, 0x28, 0x06, 0xd0, 0x25, + 0x28, 0xfe, 0xd0, 0x01, 0x28, 0xff, 0xd1, 0x0a, + 0x69, 0x78, 0x68, 0x21, 0x1a, 0x08, 0x23, 0xff, + 0x33, 0xf5, 0x42, 0x98, 0xd9, 0x03, 0x21, 0x00, + 0x1c, 0x38, 0xf7, 0xff, 0xfc, 0x4b, 0x20, 0x00, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x68, 0x20, + 0x30, 0x05, 0x61, 0x38, 0x1c, 0x38, 0xf7, 0xff, + 0xfc, 0x6d, 0xe7, 0xf4, 0x1c, 0x38, 0xf7, 0xff, + 0xfd, 0x84, 0xe7, 0xf0, 0x1c, 0x38, 0xf7, 0xff, + 0xfd, 0xa7, 0xe7, 0xec, 0x1c, 0x38, 0xf7, 0xff, + 0xfe, 0x3f, 0xe7, 0xe8, 0x68, 0xf8, 0xf0, 0x00, + 0xfc, 0x71, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, + 0xf7, 0xff, 0xfc, 0xb1, 0x68, 0xf8, 0xf0, 0x00, + 0xfb, 0xf7, 0x68, 0x20, 0x30, 0x02, 0x61, 0x38, + 0xe7, 0xd9, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xc0, + 0xb5, 0xb0, 0x06, 0x15, 0x0e, 0x2d, 0x9f, 0x04, + 0x68, 0x42, 0x1c, 0x1c, 0x42, 0x8a, 0xdc, 0x04, + 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0xc0, 0x23, 0xc9, 0x00, 0x9b, + 0x43, 0x59, 0x18, 0x40, 0x1c, 0x29, 0x1c, 0x22, + 0x1c, 0x3b, 0xf7, 0xff, 0xff, 0x35, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x24, 0x00, + 0x1c, 0x07, 0x68, 0x40, 0x28, 0x00, 0xdd, 0x0a, + 0x21, 0xc9, 0x00, 0x89, 0x43, 0x61, 0x68, 0xf8, + 0x18, 0x40, 0xf7, 0xff, 0xff, 0x81, 0x68, 0x78, + 0x34, 0x01, 0x42, 0xa0, 0xdc, 0xf4, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x24, 0x00, + 0x1c, 0x07, 0x68, 0x40, 0x28, 0x00, 0xdd, 0x0f, + 0x21, 0xc9, 0x00, 0x89, 0x43, 0x61, 0x68, 0xf8, + 0x18, 0x40, 0x60, 0x84, 0x68, 0x3a, 0xc0, 0x84, + 0x68, 0xf8, 0x18, 0x40, 0xf7, 0xff, 0xfe, 0xee, + 0x68, 0x78, 0x34, 0x01, 0x42, 0xa0, 0xdc, 0xef, + 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xf0, 0x25, 0x00, 0x1c, 0x07, 0x68, 0x40, + 0x1c, 0x0c, 0x28, 0x00, 0xdd, 0x0f, 0x26, 0x01, + 0x1c, 0x30, 0x40, 0xa8, 0x40, 0x20, 0xd0, 0x06, + 0x21, 0xc9, 0x00, 0x89, 0x43, 0x69, 0x68, 0xf8, + 0x18, 0x40, 0xf7, 0xff, 0xfb, 0xe7, 0x68, 0x78, + 0x35, 0x01, 0x42, 0xa8, 0xdc, 0xf0, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb4, 0xf0, 0x21, 0x00, + 0x78, 0x07, 0x22, 0x80, 0x43, 0xd2, 0x40, 0x3a, + 0x1c, 0x04, 0x0a, 0x3b, 0xd3, 0x0f, 0x27, 0x00, + 0x30, 0x01, 0x2a, 0x00, 0xdd, 0x0d, 0x1b, 0xd3, + 0x00, 0xdb, 0x78, 0x06, 0x1f, 0xdd, 0x3d, 0x01, + 0x40, 0xae, 0x43, 0x31, 0x30, 0x01, 0x37, 0x01, + 0x42, 0x97, 0xdb, 0xf4, 0xe0, 0x01, 0x30, 0x01, + 0x1c, 0x11, 0x1b, 0x00, 0x18, 0x40, 0xbc, 0xf0, + 0x47, 0x70, 0xb4, 0xb0, 0x22, 0x01, 0x28, 0x80, + 0xda, 0x02, 0x70, 0x08, 0xbc, 0xb0, 0x47, 0x70, + 0x27, 0x03, 0x25, 0xff, 0x00, 0xfc, 0x1c, 0x2b, + 0x40, 0xa3, 0x40, 0x03, 0xd0, 0x03, 0x1c, 0x03, + 0x41, 0x23, 0x54, 0x8b, 0x32, 0x01, 0x37, 0x01, + 0xd5, 0xf4, 0x20, 0x80, 0x43, 0x10, 0x70, 0x08, + 0xbc, 0xb0, 0x47, 0x70, 0xb5, 0xb0, 0x22, 0x00, + 0x78, 0x41, 0x1c, 0x47, 0x20, 0x80, 0x43, 0xc0, + 0x40, 0x08, 0x0a, 0x09, 0xd3, 0x0f, 0x21, 0x00, + 0x37, 0x01, 0x28, 0x00, 0xdd, 0x0d, 0x1a, 0x43, + 0x00, 0xdb, 0x78, 0x3d, 0x1f, 0xdc, 0x3c, 0x01, + 0x40, 0xa5, 0x43, 0x2a, 0x31, 0x01, 0x37, 0x01, + 0x42, 0x81, 0xdb, 0xf4, 0xe0, 0x01, 0x1c, 0x02, + 0x37, 0x01, 0x78, 0x3b, 0xa1, 0x03, 0xa0, 0x04, + 0xf0, 0x10, 0xfb, 0xb8, 0x78, 0x38, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x63, 0x69, 0x3a, 0x00, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x3a, 0x20, 0x25, 0x73, 0x2c, 0x20, 0x6c, 0x65, + 0x6e, 0x3d, 0x25, 0x64, 0x2c, 0x20, 0x69, 0x64, + 0x3d, 0x25, 0x30, 0x32, 0x78, 0x0a, 0x00, 0x00, + 0xb5, 0xb0, 0x25, 0x00, 0x60, 0x01, 0x1c, 0x07, + 0x4b, 0x2f, 0x18, 0xc4, 0x72, 0x25, 0x72, 0x65, + 0x72, 0xa5, 0x72, 0xe5, 0x1c, 0x08, 0x21, 0x01, + 0x04, 0x09, 0xf0, 0x10, 0xfb, 0x2b, 0x21, 0x01, + 0x02, 0x49, 0x42, 0x88, 0xdd, 0x01, 0x60, 0x79, + 0xe0, 0x00, 0x60, 0x78, 0x22, 0x01, 0x04, 0x12, + 0x21, 0x00, 0x1d, 0xf8, 0x30, 0x01, 0xf0, 0x10, + 0xfb, 0x6b, 0x20, 0x00, 0x43, 0xc1, 0x00, 0x82, + 0x19, 0xd2, 0x4b, 0x22, 0x18, 0xd3, 0x60, 0x9d, + 0x4b, 0x21, 0x18, 0xd3, 0x60, 0x9d, 0x23, 0x9d, + 0x02, 0x5b, 0x18, 0xd3, 0x60, 0x9d, 0x4b, 0x1f, + 0x18, 0xd2, 0x60, 0x95, 0x00, 0x42, 0x19, 0xd2, + 0x4b, 0x1d, 0x18, 0xd3, 0x81, 0x19, 0x4b, 0x1d, + 0x18, 0xd2, 0x81, 0x11, 0x30, 0x01, 0x28, 0x20, + 0xdb, 0xe5, 0x20, 0x00, 0x68, 0x79, 0x29, 0x00, + 0xdd, 0x11, 0x00, 0x41, 0x18, 0x09, 0x00, 0xc9, + 0x19, 0xc9, 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc9, + 0x72, 0x0d, 0x60, 0xcd, 0x61, 0x0d, 0x61, 0x4d, + 0x76, 0x0d, 0x76, 0x4d, 0x61, 0xc8, 0x68, 0x79, + 0x30, 0x01, 0x42, 0x81, 0xdc, 0xed, 0x4b, 0x10, + 0x18, 0xf8, 0x22, 0x01, 0x02, 0xd2, 0x21, 0x00, + 0xf0, 0x10, 0xfb, 0x32, 0x4b, 0x0d, 0x18, 0xf8, + 0x22, 0xff, 0x21, 0x00, 0x32, 0x01, 0xf0, 0x10, + 0xfb, 0x2b, 0x60, 0xe5, 0x61, 0x25, 0x61, 0x65, + 0x61, 0xa5, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0x01, 0x3b, 0x80, 0x00, 0x01, 0x39, 0x00, + 0x00, 0x01, 0x39, 0x80, 0x00, 0x01, 0x3a, 0x80, + 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x3b, 0x40, + 0x00, 0x01, 0x30, 0x08, 0x00, 0x01, 0x38, 0x08, + 0x21, 0x00, 0x70, 0x01, 0x60, 0x41, 0x60, 0x81, + 0x60, 0xc1, 0x74, 0x01, 0x74, 0x41, 0x47, 0x70, + 0xb4, 0x80, 0x21, 0x00, 0x68, 0x42, 0x2a, 0x00, + 0xdd, 0x18, 0x00, 0x4b, 0x18, 0x5b, 0x00, 0xdb, + 0x18, 0x1f, 0x23, 0x01, 0x04, 0x1b, 0x18, 0xfb, + 0x7a, 0x1b, 0x2b, 0x00, 0xd1, 0x0b, 0x22, 0x01, + 0x00, 0x4b, 0x18, 0x59, 0x00, 0xc9, 0x18, 0x08, + 0x04, 0x13, 0x18, 0xc1, 0x72, 0x0a, 0x4b, 0x05, + 0x18, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x31, 0x01, + 0x42, 0x8a, 0xdc, 0xe6, 0x20, 0x00, 0xbc, 0x80, + 0x47, 0x70, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, + 0xb5, 0xb0, 0x06, 0x1d, 0x0e, 0x2d, 0x1c, 0x14, + 0x68, 0x0a, 0x21, 0x00, 0x1c, 0x07, 0xf0, 0x10, + 0xfa, 0xdf, 0x70, 0x3d, 0x2c, 0x00, 0xd0, 0x04, + 0x20, 0x80, 0x70, 0x78, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x00, 0x70, 0x78, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x99, 0x01, + 0x1c, 0x1c, 0x1c, 0x15, 0x1c, 0x07, 0x29, 0x00, + 0xd1, 0x04, 0x20, 0x00, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x28, 0xf7, 0xff, + 0xff, 0xb7, 0x1c, 0x06, 0xd1, 0x01, 0x20, 0x00, + 0xe7, 0xf4, 0x69, 0x70, 0x68, 0x29, 0x43, 0x48, + 0x19, 0x01, 0x23, 0x01, 0x04, 0x1b, 0x42, 0x99, + 0xdd, 0x01, 0x20, 0x00, 0xe7, 0xea, 0x18, 0x2d, + 0x99, 0x01, 0x1d, 0xe8, 0x30, 0x01, 0x1c, 0x22, + 0xf0, 0x10, 0xfa, 0xf8, 0x74, 0x34, 0x7a, 0x68, + 0x74, 0x70, 0x2f, 0x00, 0xd0, 0x04, 0x68, 0xb8, + 0x60, 0xb0, 0x60, 0xf7, 0x60, 0xbe, 0xe0, 0x02, + 0x20, 0x00, 0x60, 0xb0, 0x60, 0xf0, 0x1c, 0x30, + 0xe7, 0xd4, 0xb5, 0xff, 0x9c, 0x09, 0x06, 0x25, + 0x0e, 0x2d, 0x24, 0x00, 0x43, 0xe4, 0x1c, 0x07, + 0x98, 0x02, 0x1c, 0x21, 0x4b, 0x4c, 0x18, 0xfa, + 0x28, 0x00, 0xd0, 0x03, 0x28, 0x01, 0xd1, 0x6a, + 0x20, 0x00, 0xe0, 0x2d, 0x20, 0x00, 0x00, 0x43, + 0x19, 0xde, 0x4b, 0x48, 0x18, 0xf6, 0x23, 0x08, + 0x5e, 0xf3, 0x42, 0xab, 0xd1, 0x00, 0x1c, 0x04, + 0x29, 0x00, 0xda, 0x04, 0x1c, 0x1e, 0x23, 0x01, + 0x42, 0xde, 0xd1, 0x00, 0x1c, 0x01, 0x30, 0x01, + 0x28, 0x20, 0xdb, 0xec, 0x20, 0x00, 0x43, 0xc0, + 0x42, 0x84, 0xd1, 0x05, 0x42, 0x81, 0xd0, 0x03, + 0x7a, 0x13, 0x33, 0x01, 0x72, 0x13, 0x1c, 0x0c, + 0x2c, 0x00, 0xdb, 0x44, 0x00, 0x60, 0x19, 0xc0, + 0x4b, 0x38, 0x18, 0xc0, 0x81, 0x05, 0x00, 0xa0, + 0x19, 0xc1, 0x4b, 0x37, 0x18, 0xc8, 0x68, 0x80, + 0x4b, 0x36, 0x18, 0xc9, 0x68, 0x8d, 0xe0, 0x2c, + 0x00, 0x43, 0x19, 0xde, 0x4b, 0x34, 0x18, 0xf6, + 0x23, 0x08, 0x5e, 0xf3, 0x42, 0xab, 0xd1, 0x00, + 0x1c, 0x04, 0x29, 0x00, 0xda, 0x04, 0x1c, 0x1e, + 0x23, 0x01, 0x42, 0xde, 0xd1, 0x00, 0x1c, 0x01, + 0x30, 0x01, 0x28, 0x20, 0xdb, 0xec, 0x20, 0x00, + 0x43, 0xc0, 0x42, 0x84, 0xd1, 0x05, 0x42, 0x81, + 0xd0, 0x03, 0x7a, 0x93, 0x33, 0x01, 0x72, 0x93, + 0x1c, 0x0c, 0x2c, 0x00, 0xdb, 0x17, 0x00, 0x60, + 0x19, 0xc0, 0x4b, 0x25, 0x18, 0xc0, 0x81, 0x05, + 0x00, 0xa0, 0x19, 0xc1, 0x23, 0x9d, 0x02, 0x5b, + 0x18, 0xc8, 0x68, 0x80, 0x4b, 0x21, 0x18, 0xc9, + 0x68, 0x8d, 0x28, 0x00, 0xd0, 0x0f, 0x99, 0x01, + 0x9b, 0x03, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x5a, + 0x28, 0x00, 0xd1, 0x12, 0x43, 0xc0, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, + 0x20, 0x00, 0x43, 0xc0, 0xe7, 0xf7, 0x99, 0x01, + 0x9b, 0x03, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x4a, + 0x1c, 0x05, 0xd1, 0x01, 0x43, 0xe8, 0xe7, 0xee, + 0x1c, 0x28, 0x60, 0x44, 0x9a, 0x02, 0x2a, 0x00, + 0xd0, 0x0c, 0x2a, 0x01, 0xd1, 0x08, 0x00, 0xa1, + 0x19, 0xc9, 0x23, 0x9d, 0x02, 0x5b, 0x18, 0xca, + 0x60, 0x90, 0x4b, 0x0c, 0x18, 0xc8, 0x60, 0x85, + 0x1c, 0x20, 0xe7, 0xdc, 0x00, 0xa1, 0x19, 0xc9, + 0x4b, 0x05, 0x18, 0xca, 0x60, 0x90, 0x4b, 0x05, + 0x18, 0xc8, 0x60, 0x85, 0xe7, 0xf4, 0x00, 0x00, + 0x00, 0x01, 0x3b, 0x80, 0x00, 0x01, 0x3b, 0x00, + 0x00, 0x01, 0x39, 0x00, 0x00, 0x01, 0x39, 0x80, + 0x00, 0x01, 0x3b, 0x40, 0x00, 0x01, 0x3a, 0x80, + 0xb5, 0x80, 0x27, 0x00, 0x28, 0x00, 0xd1, 0x03, + 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x22, 0x00, 0x68, 0x81, 0x29, 0x00, 0xd0, 0x0b, + 0x68, 0xc3, 0x2b, 0x00, 0xd0, 0x05, 0x60, 0x99, + 0x68, 0xc1, 0x68, 0x82, 0x60, 0xd1, 0x68, 0xc7, + 0xe0, 0x07, 0x60, 0xca, 0x68, 0x87, 0xe0, 0x04, + 0x68, 0xc1, 0x29, 0x00, 0xd0, 0x01, 0x60, 0x8a, + 0x68, 0xc7, 0xf7, 0xff, 0xfe, 0xbd, 0x1c, 0x38, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf7, + 0x1c, 0x07, 0x98, 0x01, 0x68, 0x46, 0x99, 0x02, + 0x29, 0x00, 0xd0, 0x0b, 0x29, 0x01, 0xd1, 0x12, + 0x00, 0xb0, 0x19, 0xc0, 0x23, 0x9d, 0x02, 0x5b, + 0x18, 0xc1, 0x68, 0x8d, 0x4b, 0x2c, 0x18, 0xc0, + 0x68, 0x84, 0xe0, 0x0a, 0x00, 0xb0, 0x19, 0xc0, + 0x4b, 0x2a, 0x18, 0xc1, 0x68, 0x8d, 0x4b, 0x2a, + 0x18, 0xc0, 0x68, 0x84, 0xe0, 0x01, 0x25, 0x00, + 0x24, 0x00, 0x99, 0x01, 0x42, 0xa9, 0xd1, 0x08, + 0x98, 0x01, 0xf7, 0xff, 0xff, 0xb9, 0x99, 0x01, + 0x1c, 0x05, 0x42, 0xa1, 0xd1, 0x08, 0x24, 0x00, + 0xe0, 0x06, 0x99, 0x01, 0x42, 0xa1, 0xd1, 0x03, + 0x98, 0x01, 0xf7, 0xff, 0xff, 0xad, 0x1c, 0x04, + 0x22, 0x00, 0x43, 0xd2, 0x99, 0x02, 0x4b, 0x1d, + 0x18, 0xf8, 0x29, 0x00, 0xd0, 0x1a, 0x29, 0x01, + 0xd1, 0x14, 0x00, 0xb1, 0x19, 0xc9, 0x23, 0x9d, + 0x02, 0x5b, 0x18, 0xcb, 0x60, 0x9d, 0x4b, 0x14, + 0x18, 0xc9, 0x60, 0x8c, 0x2d, 0x00, 0xd1, 0x09, + 0x2c, 0x00, 0xd1, 0x07, 0x7a, 0x81, 0x39, 0x01, + 0x72, 0x81, 0x00, 0x70, 0x19, 0xc0, 0x4b, 0x12, + 0x18, 0xc0, 0x81, 0x02, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb1, 0x19, 0xc9, + 0x4b, 0x0a, 0x18, 0xcb, 0x60, 0x9d, 0x4b, 0x0a, + 0x18, 0xc9, 0x60, 0x8c, 0x2d, 0x00, 0xd1, 0xf1, + 0x2c, 0x00, 0xd1, 0xef, 0x7a, 0x01, 0x39, 0x01, + 0x72, 0x01, 0x00, 0x70, 0x19, 0xc0, 0x4b, 0x07, + 0x18, 0xc0, 0x81, 0x02, 0xe7, 0xe6, 0x00, 0x00, + 0x00, 0x01, 0x3a, 0x80, 0x00, 0x01, 0x39, 0x00, + 0x00, 0x01, 0x39, 0x80, 0x00, 0x01, 0x3b, 0x80, + 0x00, 0x01, 0x3b, 0x40, 0x00, 0x01, 0x3b, 0x00, + 0xb5, 0xf0, 0x1c, 0x14, 0x06, 0x1a, 0x0e, 0x12, + 0xb0, 0x81, 0x92, 0x00, 0x1c, 0x07, 0x1c, 0x08, + 0x1c, 0x0d, 0xb0, 0x81, 0xf7, 0xff, 0xfd, 0x8e, + 0x90, 0x00, 0x1c, 0x22, 0x1c, 0x03, 0xa1, 0x3e, + 0x48, 0x3e, 0xf0, 0x10, 0xf9, 0x5f, 0x68, 0x38, + 0x38, 0x02, 0x4b, 0x3d, 0x18, 0xfe, 0x42, 0xa0, + 0xda, 0x3a, 0x68, 0x38, 0x38, 0x02, 0x1a, 0x24, + 0x22, 0x01, 0x9b, 0x00, 0x1c, 0x30, 0x1c, 0x39, + 0xf7, 0xff, 0xfe, 0x4e, 0x9a, 0x01, 0xb4, 0x04, + 0x22, 0x00, 0x68, 0x3b, 0x1c, 0x38, 0x1c, 0x31, + 0xf7, 0xff, 0xfe, 0x8f, 0xb0, 0x01, 0x28, 0x00, + 0xda, 0x05, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x80, + 0x19, 0xc0, 0x4b, 0x2e, 0x18, 0xc0, 0x68, 0x80, + 0x69, 0x40, 0x68, 0x39, 0x43, 0x48, 0x30, 0x02, + 0x18, 0x42, 0x23, 0x01, 0x04, 0x1b, 0x3a, 0x02, + 0x42, 0x9a, 0xdd, 0x05, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x18, 0x38, 0x1e, 0x8a, 0x30, 0x08, 0x1c, 0x29, + 0xf0, 0x10, 0xf9, 0x54, 0x68, 0x38, 0x18, 0x29, + 0x38, 0x02, 0x1e, 0x8d, 0x42, 0xa0, 0xdb, 0xc4, + 0x2c, 0x00, 0xd0, 0x30, 0x22, 0x00, 0x9b, 0x00, + 0x1c, 0x30, 0x1c, 0x39, 0xf7, 0xff, 0xfe, 0x14, + 0x9a, 0x01, 0xb4, 0x04, 0x22, 0x00, 0x1c, 0x38, + 0x1c, 0x31, 0x1c, 0xa3, 0xf7, 0xff, 0xfe, 0x55, + 0xb0, 0x01, 0x28, 0x00, 0xda, 0x05, 0x20, 0x00, + 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x80, 0x19, 0xc0, 0x4b, 0x11, + 0x18, 0xc0, 0x68, 0x80, 0x69, 0x40, 0x68, 0x39, + 0x43, 0x48, 0x30, 0x02, 0x19, 0x01, 0x23, 0x01, + 0x04, 0x1b, 0x42, 0x99, 0xdd, 0x05, 0x20, 0x00, + 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x18, 0x38, 0x30, 0x08, 0x1c, 0x29, + 0x1c, 0x22, 0xf0, 0x10, 0xf9, 0x1b, 0x20, 0x00, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x63, 0x69, 0x3a, 0x00, 0x2e, 0x00, 0x7e, 0x5c, + 0x00, 0x01, 0x38, 0x08, 0x00, 0x01, 0x39, 0x00, + 0xb5, 0xf3, 0xb0, 0x83, 0x1c, 0x07, 0x99, 0x04, + 0x00, 0x88, 0x19, 0xc0, 0x4b, 0x27, 0x18, 0xc0, + 0x90, 0x02, 0x68, 0x84, 0x4b, 0x26, 0x18, 0xf8, + 0x90, 0x01, 0x2c, 0x00, 0xd0, 0x37, 0x25, 0x00, + 0x7c, 0x26, 0x69, 0x60, 0x68, 0x39, 0x43, 0x48, + 0x7c, 0x61, 0x23, 0x80, 0x40, 0x19, 0x91, 0x00, + 0x30, 0x02, 0x19, 0x81, 0x02, 0x5b, 0x39, 0x02, + 0x42, 0x99, 0xdd, 0x04, 0xb0, 0x03, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x18, 0x38, + 0x1d, 0xc1, 0x31, 0x01, 0x19, 0x78, 0x1e, 0xb2, + 0x4b, 0x18, 0x18, 0xc0, 0xf0, 0x10, 0xf8, 0xe2, + 0x19, 0xa8, 0x1e, 0x85, 0x22, 0x01, 0x1c, 0x38, + 0x1c, 0x21, 0xf7, 0xff, 0xfe, 0xc4, 0x98, 0x02, + 0x68, 0x84, 0x2c, 0x00, 0xd0, 0x02, 0x99, 0x00, + 0x29, 0x00, 0xd1, 0xd5, 0x23, 0x01, 0x02, 0xdb, + 0x42, 0x9d, 0xda, 0x08, 0x98, 0x01, 0x68, 0xc2, + 0x4b, 0x0c, 0x18, 0xf8, 0x9b, 0x01, 0x69, 0x9b, + 0x1c, 0x29, 0xf0, 0x10, 0xf8, 0x25, 0x99, 0x04, + 0x1c, 0x48, 0xd5, 0x04, 0x42, 0x40, 0x06, 0xc0, + 0x0e, 0xc0, 0x42, 0x40, 0xe0, 0x01, 0x06, 0xc0, + 0x0e, 0xc0, 0x9b, 0x01, 0x72, 0x58, 0xb0, 0x03, + 0xe7, 0xc9, 0x00, 0x00, 0x00, 0x01, 0x3a, 0x80, + 0x00, 0x01, 0x3b, 0x80, 0x00, 0x01, 0x30, 0x08, + 0xb5, 0xf0, 0x21, 0x00, 0x4b, 0x24, 0x18, 0xc4, + 0x7a, 0xe7, 0x7a, 0xa2, 0x25, 0x00, 0x2a, 0x00, + 0xd1, 0x03, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x22, 0x00, 0xe0, 0x1e, 0x00, 0x7b, + 0x18, 0x1e, 0x4b, 0x1e, 0x18, 0xf6, 0x23, 0x08, + 0x5e, 0xf3, 0x2b, 0x00, 0xdb, 0x0c, 0x00, 0xbb, + 0x18, 0x1e, 0x23, 0x9d, 0x02, 0x5b, 0x18, 0xf3, + 0x68, 0x9b, 0x2b, 0x00, 0xd0, 0x04, 0x7c, 0x5e, + 0x0a, 0x33, 0xd2, 0x01, 0x21, 0x01, 0xe0, 0x09, + 0x37, 0x01, 0xd5, 0x04, 0x42, 0x7f, 0x06, 0xff, + 0x0e, 0xff, 0x42, 0x7f, 0xe0, 0x01, 0x06, 0xff, + 0x0e, 0xff, 0x32, 0x01, 0x2a, 0x20, 0xda, 0x01, + 0x29, 0x00, 0xd0, 0xdc, 0x29, 0x00, 0xd1, 0x04, + 0x72, 0xe5, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x72, 0xe7, 0x1c, 0x39, 0xf7, 0xff, + 0xff, 0x67, 0x1c, 0x78, 0xd5, 0x04, 0x42, 0x40, + 0x06, 0xc0, 0x0e, 0xc0, 0x42, 0x40, 0xe0, 0x01, + 0x06, 0xc0, 0x0e, 0xc0, 0x72, 0xe0, 0x20, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x00, 0x01, 0x3b, 0x80, 0x00, 0x01, 0x3b, 0x40, + 0xb5, 0xb0, 0x78, 0x0b, 0x1c, 0x14, 0x1c, 0x05, + 0x1c, 0x0f, 0xa1, 0x0c, 0x48, 0x0c, 0xf0, 0x10, + 0xf8, 0x29, 0x78, 0x3a, 0xb4, 0x04, 0x22, 0x01, + 0x1c, 0x28, 0x1c, 0x39, 0x1c, 0x23, 0xf7, 0xff, + 0xfd, 0x68, 0xb0, 0x01, 0x28, 0x00, 0xda, 0x04, + 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x63, 0x69, 0x3a, 0x00, + 0x2e, 0x00, 0x7e, 0x5c, 0xb5, 0xf0, 0x1c, 0x07, + 0x4b, 0x2a, 0x18, 0xc4, 0x7a, 0x65, 0x7a, 0x20, + 0x28, 0x00, 0xd1, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x00, 0x43, 0xc1, 0xe0, 0x09, + 0x35, 0x01, 0xd5, 0x04, 0x42, 0x6d, 0x06, 0xed, + 0x0e, 0xed, 0x42, 0x6d, 0xe0, 0x01, 0x06, 0xed, + 0x0e, 0xed, 0x30, 0x01, 0x28, 0x20, 0xda, 0x07, + 0x00, 0x6a, 0x19, 0xd2, 0x4b, 0x1e, 0x18, 0xd2, + 0x23, 0x08, 0x5e, 0xd2, 0x42, 0x8a, 0xd0, 0xeb, + 0x00, 0xa8, 0x19, 0xc0, 0x4b, 0x1b, 0x18, 0xc1, + 0x68, 0x89, 0x29, 0x00, 0xd0, 0x10, 0x72, 0x65, + 0x4b, 0x19, 0x18, 0xc6, 0x68, 0xb1, 0x69, 0x48, + 0x68, 0x3a, 0x43, 0x50, 0x7c, 0x09, 0x18, 0x0a, + 0x23, 0x01, 0x04, 0x1b, 0x42, 0x9a, 0xdd, 0x08, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0x72, 0x60, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x18, 0x38, 0x69, 0x22, 0x69, 0x63, + 0x30, 0x08, 0xf0, 0x0f, 0xff, 0x59, 0x22, 0x00, + 0x68, 0xb1, 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0xdf, + 0x1c, 0x68, 0xd5, 0x04, 0x42, 0x40, 0x06, 0xc0, + 0x0e, 0xc0, 0x42, 0x40, 0xe0, 0x01, 0x06, 0xc0, + 0x0e, 0xc0, 0x72, 0x60, 0x20, 0x01, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x01, 0x3b, 0x80, + 0x00, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x39, 0x00, + 0x00, 0x01, 0x39, 0x80, 0xb5, 0xff, 0xb0, 0x8b, + 0x9a, 0x0d, 0x1c, 0x1c, 0x1c, 0x0f, 0x2a, 0x02, + 0xda, 0x06, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x0b, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x78, 0x79, 0x91, 0x04, 0x31, 0x02, 0x78, 0x3b, + 0x1c, 0x0d, 0x42, 0x83, 0xd0, 0x07, 0x1c, 0x19, + 0x1c, 0x02, 0xa0, 0xf9, 0xf0, 0x0f, 0xff, 0x96, + 0x42, 0x68, 0xb0, 0x0b, 0xe7, 0xec, 0x9a, 0x0d, + 0x42, 0x91, 0xdd, 0x02, 0x42, 0x68, 0xb0, 0x0b, + 0xe7, 0xe6, 0x1d, 0x39, 0x91, 0x0a, 0x1d, 0xe2, + 0x32, 0x59, 0x92, 0x09, 0x1d, 0xe6, 0x36, 0x39, + 0x28, 0x1d, 0xd0, 0x63, 0xdc, 0x08, 0x28, 0x15, + 0xd0, 0x13, 0x28, 0x1a, 0xd0, 0x5f, 0x28, 0x1b, + 0xd0, 0x5e, 0x28, 0x1c, 0xd0, 0x5a, 0xe0, 0x7a, + 0x28, 0x20, 0xd0, 0x41, 0x1c, 0xbe, 0x28, 0xc0, + 0xd0, 0x74, 0x28, 0xc1, 0xd1, 0x73, 0x98, 0x14, + 0x28, 0x1b, 0xd0, 0x71, 0x42, 0x68, 0xb0, 0x0b, + 0xe7, 0xc6, 0x78, 0xb8, 0x28, 0x05, 0xd0, 0x02, + 0x42, 0x68, 0xb0, 0x0b, 0xe7, 0xc0, 0x78, 0xf8, + 0x28, 0x00, 0xd0, 0x02, 0x42, 0x68, 0xb0, 0x0b, + 0xe7, 0xba, 0x98, 0x04, 0x1e, 0x82, 0x2a, 0x4f, + 0xda, 0x04, 0x99, 0x0a, 0x1c, 0x20, 0xf0, 0x0f, + 0xff, 0x89, 0xe0, 0x04, 0x22, 0x4f, 0x99, 0x0a, + 0x1c, 0x20, 0xf0, 0x0f, 0xff, 0x83, 0x78, 0xfa, + 0x78, 0xb9, 0x9c, 0x0a, 0xa0, 0xe0, 0x1c, 0x23, + 0xf0, 0x0f, 0xff, 0x4c, 0x98, 0x04, 0x18, 0x38, + 0x1c, 0x47, 0x42, 0xa7, 0xd9, 0x0c, 0x1c, 0x20, + 0xf0, 0x0f, 0xff, 0xb8, 0x19, 0x00, 0x1c, 0x44, + 0x42, 0xa7, 0xd9, 0x03, 0x1c, 0x21, 0xa0, 0xdd, + 0xf0, 0x0f, 0xff, 0x3c, 0x42, 0xa7, 0xd8, 0xf2, + 0xa0, 0xd4, 0xf0, 0x0f, 0xff, 0x37, 0xe0, 0xe3, + 0x98, 0x04, 0x28, 0x04, 0xd0, 0x02, 0x42, 0x68, + 0xb0, 0x0b, 0xe7, 0x89, 0x78, 0xf8, 0x02, 0x00, + 0x78, 0xb9, 0x43, 0x08, 0x82, 0x30, 0x79, 0x78, + 0x02, 0x00, 0x79, 0x39, 0x43, 0x08, 0x82, 0x70, + 0x8a, 0x72, 0x8a, 0x31, 0xa0, 0xd1, 0xf0, 0x0f, + 0xff, 0x21, 0xe0, 0xcd, 0xe2, 0x17, 0xe0, 0x00, + 0xe0, 0x62, 0x78, 0xb8, 0x07, 0x80, 0x0f, 0x80, + 0x30, 0x01, 0x75, 0x30, 0x78, 0xb8, 0x08, 0x80, + 0x07, 0x00, 0x0f, 0x00, 0x30, 0x01, 0x75, 0x70, + 0x78, 0xf8, 0x9a, 0x09, 0x73, 0x10, 0x20, 0x00, + 0x65, 0xa0, 0x7d, 0x31, 0x29, 0x00, 0xdd, 0x0e, + 0x18, 0x39, 0x79, 0x09, 0x00, 0xc2, 0x40, 0x91, + 0x6d, 0xa2, 0x43, 0x11, 0x65, 0xa1, 0x7d, 0x31, + 0x30, 0x01, 0xe0, 0x02, 0xe1, 0x02, 0xe1, 0xf9, + 0xe1, 0x4b, 0x42, 0x81, 0xdc, 0xf0, 0x7d, 0x30, + 0x30, 0x04, 0x90, 0x03, 0x7d, 0x72, 0x18, 0x39, + 0x1d, 0xe0, 0x30, 0x55, 0xf0, 0x0f, 0xff, 0x22, + 0x7d, 0x70, 0x99, 0x03, 0x18, 0x40, 0x90, 0x03, + 0x6d, 0xa1, 0xa0, 0xbc, 0xf0, 0x0f, 0xfe, 0xea, + 0x7d, 0x70, 0x28, 0x00, 0xd0, 0x17, 0xa0, 0xbf, + 0xf0, 0x0f, 0xfe, 0xe4, 0x21, 0x00, 0x91, 0x02, + 0x7d, 0x70, 0x28, 0x00, 0xdd, 0x0c, 0x99, 0x02, + 0x18, 0x60, 0x30, 0x40, 0x7f, 0x01, 0xa0, 0xbc, + 0xf0, 0x0f, 0xfe, 0xd8, 0x99, 0x02, 0x31, 0x01, + 0x91, 0x02, 0x7d, 0x70, 0x42, 0x88, 0xdc, 0xf2, + 0xa0, 0xb9, 0xf0, 0x0f, 0xfe, 0xcf, 0x9a, 0x09, + 0x7b, 0x11, 0xa0, 0xb8, 0xf0, 0x0f, 0xfe, 0xca, + 0x22, 0x1a, 0xb4, 0x04, 0x98, 0x04, 0x9a, 0x0e, + 0x1a, 0x12, 0x18, 0x39, 0x20, 0xc0, 0x1c, 0x23, + 0xf7, 0xff, 0xff, 0x10, 0xb0, 0x01, 0x28, 0x00, + 0xda, 0x6a, 0x42, 0x68, 0xb0, 0x0b, 0xe7, 0x13, + 0x78, 0xb8, 0x06, 0x86, 0x0e, 0xb6, 0x1c, 0x31, + 0xa0, 0xb1, 0xf0, 0x0f, 0xfe, 0xb3, 0x9a, 0x09, + 0x7b, 0x10, 0x42, 0xb0, 0xd1, 0x01, 0x22, 0x01, + 0x67, 0x62, 0x78, 0xb8, 0x23, 0xc0, 0x40, 0x18, + 0x28, 0xc0, 0xd0, 0x02, 0x1c, 0x28, 0xb0, 0x0b, + 0xe6, 0xfe, 0x2e, 0x00, 0xd1, 0x02, 0x1c, 0x28, + 0xb0, 0x0b, 0xe6, 0xf9, 0x78, 0xf8, 0x28, 0x04, + 0xd0, 0x02, 0x1c, 0x28, 0xb0, 0x0b, 0xe6, 0xf3, + 0x79, 0x38, 0x90, 0x08, 0x23, 0x0b, 0x40, 0x18, + 0x28, 0x09, 0xda, 0x02, 0x1c, 0x28, 0xb0, 0x0b, + 0xe6, 0xea, 0x20, 0x00, 0x21, 0x00, 0x79, 0x7a, + 0x92, 0x07, 0x9a, 0x07, 0x40, 0xca, 0x08, 0x52, + 0xd3, 0x05, 0x30, 0x01, 0x18, 0x3a, 0x79, 0x52, + 0x0a, 0x12, 0xd3, 0x00, 0x30, 0x01, 0x31, 0x01, + 0x29, 0x08, 0xdb, 0xf2, 0x1c, 0x41, 0x98, 0x08, + 0x08, 0xc0, 0xd3, 0x22, 0x20, 0x00, 0x18, 0x7a, + 0x79, 0x52, 0x92, 0x06, 0x07, 0x92, 0xd0, 0x0a, + 0x19, 0xca, 0x79, 0x92, 0x0a, 0x12, 0xd3, 0x05, + 0x30, 0x01, 0x18, 0x0a, 0x19, 0xd2, 0x79, 0x92, + 0x0a, 0x12, 0xd2, 0xf9, 0x30, 0x01, 0x9a, 0x06, + 0x08, 0x92, 0x07, 0x52, 0xd0, 0x0b, 0x18, 0x0a, + 0x19, 0xd2, 0x79, 0x92, 0x0a, 0x12, 0xd3, 0x05, + 0x30, 0x01, 0x18, 0x0a, 0x19, 0xd2, 0x79, 0x92, + 0x0a, 0x12, 0xd2, 0xf9, 0x30, 0x01, 0x18, 0x08, + 0x1c, 0x41, 0x18, 0x78, 0x79, 0x40, 0x28, 0x22, + 0xd0, 0x03, 0x1c, 0x28, 0xb0, 0x0b, 0xe6, 0xab, + 0xe1, 0x49, 0x1c, 0x48, 0x99, 0x08, 0x09, 0x49, + 0xd3, 0x05, 0x18, 0x39, 0x79, 0x49, 0x09, 0x49, + 0xd3, 0x00, 0x30, 0x02, 0x30, 0x01, 0x99, 0x08, + 0x09, 0x49, 0x07, 0x49, 0xd0, 0x1b, 0x22, 0x00, + 0x92, 0x01, 0x92, 0x00, 0x18, 0x39, 0x79, 0x49, + 0x91, 0x05, 0x08, 0xc9, 0x07, 0x89, 0x0f, 0x89, + 0xd0, 0x03, 0x22, 0x01, 0x39, 0x01, 0x40, 0x8a, + 0x92, 0x01, 0x99, 0x05, 0x09, 0x49, 0x07, 0x89, + 0x0f, 0x89, 0xd0, 0x03, 0x22, 0x01, 0x39, 0x01, + 0x40, 0x8a, 0x92, 0x00, 0x99, 0x00, 0x9a, 0x01, + 0x18, 0x51, 0x18, 0x08, 0x30, 0x01, 0x1d, 0x41, + 0x91, 0x03, 0x22, 0x1b, 0xb4, 0x04, 0x99, 0x04, + 0x9a, 0x0e, 0x1a, 0x52, 0x18, 0x79, 0x20, 0xc0, + 0x1c, 0x23, 0xf7, 0xff, 0xfe, 0x6b, 0xb0, 0x01, + 0x28, 0x00, 0xda, 0x02, 0x42, 0x68, 0xb0, 0x0b, + 0xe6, 0x6e, 0x99, 0x03, 0x18, 0x08, 0x22, 0x1b, + 0xb4, 0x04, 0x9a, 0x0e, 0x1a, 0x12, 0x18, 0x39, + 0x20, 0xc1, 0x1c, 0x23, 0xf7, 0xff, 0xfe, 0x5a, + 0xb0, 0x01, 0x28, 0x00, 0xda, 0x02, 0x42, 0x68, + 0xb0, 0x0b, 0xe6, 0x5d, 0x9a, 0x09, 0x74, 0x96, + 0x9a, 0x09, 0x7c, 0x91, 0xa0, 0x5d, 0xf0, 0x0f, + 0xfd, 0xfd, 0xe0, 0xf4, 0x98, 0x14, 0x28, 0x1a, + 0xd1, 0x2f, 0x98, 0x04, 0x28, 0x0e, 0xd0, 0x02, + 0x42, 0x68, 0xb0, 0x0b, 0xe6, 0x4c, 0x78, 0xb8, + 0x28, 0x41, 0xd1, 0x02, 0x78, 0xf8, 0x28, 0x02, + 0xd0, 0x02, 0x42, 0x68, 0xb0, 0x0b, 0xe6, 0x43, + 0xa0, 0x5a, 0xf0, 0x0f, 0xfe, 0x5b, 0x99, 0x0a, + 0x1c, 0x02, 0xa0, 0x58, 0xf0, 0x0f, 0xfe, 0x78, + 0x28, 0x00, 0xd0, 0x02, 0x42, 0x68, 0xb0, 0x0b, + 0xe6, 0x36, 0xa0, 0x54, 0xf0, 0x0f, 0xfe, 0x4e, + 0x19, 0xc0, 0x1d, 0x01, 0x1d, 0xe0, 0x30, 0x66, + 0x22, 0x04, 0x1c, 0x07, 0xf0, 0x0f, 0xfe, 0x92, + 0x20, 0x00, 0x9a, 0x09, 0x74, 0x50, 0x1c, 0x3a, + 0xa1, 0x4c, 0xa0, 0x4f, 0xf0, 0x0f, 0xfd, 0xca, + 0xe0, 0xc1, 0x98, 0x14, 0x28, 0x1b, 0xd1, 0x11, + 0xa0, 0x4f, 0xf0, 0x0f, 0xfe, 0x37, 0x1c, 0x31, + 0x1c, 0x02, 0xa0, 0x4d, 0xf0, 0x0f, 0xfe, 0x54, + 0x28, 0x00, 0xd0, 0x02, 0x42, 0x68, 0xb0, 0x0b, + 0xe6, 0x12, 0xa1, 0x49, 0xa0, 0x4b, 0xf0, 0x0f, + 0xfd, 0xb5, 0xe0, 0xac, 0x42, 0x68, 0xb0, 0x0b, + 0xe6, 0x0a, 0xa0, 0x4c, 0xf0, 0x0f, 0xfe, 0x22, + 0x1c, 0x31, 0x1c, 0x02, 0xa0, 0x49, 0xf0, 0x0f, + 0xfe, 0x3f, 0x28, 0x00, 0xe0, 0x96, 0x00, 0x00, + 0x74, 0x75, 0x70, 0x6c, 0x65, 0x20, 0x70, 0x61, + 0x72, 0x73, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x3a, 0x20, 0x74, 0x75, 0x70, 0x6c, 0x65, + 0x20, 0x3d, 0x20, 0x30, 0x78, 0x25, 0x30, 0x32, + 0x78, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x30, 0x78, + 0x25, 0x30, 0x32, 0x78, 0x0a, 0x00, 0x00, 0x00, + 0x76, 0x65, 0x72, 0x73, 0x5f, 0x31, 0x3a, 0x20, + 0x25, 0x64, 0x2e, 0x25, 0x64, 0x2c, 0x20, 0x25, + 0x73, 0x00, 0x00, 0x00, 0x2c, 0x20, 0x25, 0x73, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x6e, 0x66, + 0x69, 0x64, 0x3a, 0x20, 0x30, 0x78, 0x25, 0x30, + 0x34, 0x78, 0x20, 0x20, 0x30, 0x78, 0x25, 0x30, + 0x34, 0x78, 0x0a, 0x00, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x20, 0x62, 0x61, 0x73, 0x65, 0x3a, + 0x20, 0x30, 0x78, 0x25, 0x30, 0x34, 0x78, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x73, 0x6b, + 0x3a, 0x20, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x25, 0x30, 0x32, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x20, + 0x30, 0x78, 0x25, 0x30, 0x32, 0x78, 0x0a, 0x00, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x20, 0x6e, 0x62, 0x3a, + 0x20, 0x30, 0x78, 0x25, 0x30, 0x32, 0x78, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x66, 0x67, 0x20, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x63, 0x6f, + 0x72, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x20, 0x30, 0x78, 0x25, 0x30, 0x32, 0x78, 0x20, + 0x0a, 0x00, 0x00, 0x00, 0x44, 0x56, 0x42, 0x5f, + 0x43, 0x49, 0x5f, 0x56, 0x00, 0x00, 0x00, 0x00, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, + 0x20, 0x25, 0x73, 0x25, 0x73, 0x0a, 0x00, 0x00, + 0x44, 0x56, 0x42, 0x5f, 0x48, 0x4f, 0x53, 0x54, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x74, 0x63, 0x65, + 0x5f, 0x65, 0x76, 0x3a, 0x20, 0x25, 0x73, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x44, 0x56, 0x42, 0x5f, + 0x43, 0x49, 0x5f, 0x4d, 0x4f, 0x44, 0x55, 0x4c, + 0x45, 0x00, 0x00, 0x00, 0xd0, 0x02, 0x42, 0x68, + 0xb0, 0x0b, 0xe5, 0x65, 0x46, 0x79, 0x39, 0x1c, + 0xa0, 0x04, 0xf0, 0x0f, 0xfd, 0x07, 0x1c, 0x28, + 0xb0, 0x0b, 0xe5, 0x5d, 0x1c, 0x28, 0xb0, 0x0b, + 0xe5, 0x5a, 0x00, 0x00, 0x73, 0x74, 0x63, 0x65, + 0x5f, 0x70, 0x64, 0x3a, 0x20, 0x25, 0x73, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0xb5, 0xf0, 0x26, 0x00, + 0x1c, 0x04, 0x20, 0x00, 0x67, 0x60, 0x1c, 0x0d, + 0x1c, 0x17, 0xe0, 0x00, 0x36, 0x01, 0x42, 0xbe, + 0xda, 0x02, 0x5d, 0xa8, 0x28, 0x1d, 0xd1, 0xf9, + 0x22, 0x00, 0xb4, 0x04, 0x1b, 0xba, 0x19, 0xa9, + 0x20, 0x1d, 0x1c, 0x23, 0xf7, 0xff, 0xfd, 0x32, + 0xb0, 0x01, 0x28, 0x00, 0xda, 0x04, 0x20, 0x00, + 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x18, 0x36, 0x22, 0x00, 0xb4, 0x04, 0x1b, 0xba, + 0x19, 0xa9, 0x20, 0x1c, 0x1c, 0x23, 0xf7, 0xff, + 0xfd, 0x21, 0xb0, 0x01, 0x28, 0x00, 0xda, 0x04, + 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x18, 0x36, 0x22, 0x00, 0xb4, 0x04, + 0x1b, 0xba, 0x19, 0xa9, 0x20, 0x15, 0x1c, 0x23, + 0xf7, 0xff, 0xfd, 0x10, 0xb0, 0x01, 0x28, 0x00, + 0xda, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x18, 0x36, 0x22, 0x00, + 0xb4, 0x04, 0x1b, 0xba, 0x19, 0xa9, 0x20, 0x20, + 0x1c, 0x23, 0xf7, 0xff, 0xfc, 0xff, 0xb0, 0x01, + 0x28, 0x00, 0xda, 0x04, 0x20, 0x00, 0x43, 0xc0, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x18, 0x36, + 0x22, 0x00, 0xb4, 0x04, 0x1b, 0xba, 0x19, 0xa9, + 0x20, 0x1a, 0x1c, 0x23, 0xf7, 0xff, 0xfc, 0xee, + 0xb0, 0x01, 0x28, 0x00, 0xda, 0x04, 0x20, 0x00, + 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x18, 0x36, 0xe0, 0x10, 0x22, 0x00, 0xb4, 0x04, + 0x1b, 0xba, 0x19, 0xa9, 0x20, 0x1b, 0x1c, 0x23, + 0xf7, 0xff, 0xfc, 0xdc, 0xb0, 0x01, 0x28, 0x00, + 0xda, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x18, 0x36, 0x42, 0xbe, + 0xda, 0x02, 0x6f, 0x60, 0x28, 0x00, 0xd0, 0xe9, + 0x22, 0x00, 0xb4, 0x04, 0x1b, 0xba, 0x19, 0xa9, + 0x20, 0x14, 0x1c, 0x23, 0xf7, 0xff, 0xfc, 0xc6, + 0xb0, 0x01, 0x28, 0x00, 0xda, 0x04, 0x20, 0x00, + 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xf7, 0x06, 0x0e, 0x0e, 0x36, 0xb0, 0x83, + 0xf0, 0x0c, 0xfc, 0x4c, 0x1c, 0x05, 0xd0, 0x05, + 0x00, 0xa8, 0x30, 0x0c, 0xf7, 0xfc, 0xff, 0x56, + 0x1c, 0x04, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x22, + 0x95, 0x01, 0x1d, 0xe0, 0x30, 0x05, 0x90, 0x02, + 0x46, 0x6a, 0xb4, 0x04, 0x25, 0x00, 0x98, 0x04, + 0x1c, 0x31, 0xaa, 0x02, 0x1c, 0x2b, 0x1c, 0x27, + 0xf0, 0x0c, 0xf9, 0xf2, 0xb0, 0x01, 0x98, 0x00, + 0x60, 0x38, 0x28, 0x00, 0xd0, 0x0b, 0x99, 0x05, + 0xf0, 0x0c, 0xfb, 0xc8, 0x28, 0x00, 0xd1, 0x02, + 0x60, 0x7d, 0x1c, 0x38, 0xe0, 0x07, 0x68, 0x38, + 0xa9, 0x01, 0xf0, 0x0c, 0xfa, 0x11, 0x1c, 0x20, + 0xf7, 0xfc, 0xff, 0x52, 0x1c, 0x28, 0xb0, 0x03, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xff, 0x9c, 0x0b, 0x9d, 0x09, 0x9e, 0x0a, + 0xb0, 0x8c, 0x4a, 0x78, 0x92, 0x0b, 0x49, 0x78, + 0x91, 0x0a, 0x2c, 0x00, 0xd1, 0x0b, 0x20, 0x00, + 0x00, 0x81, 0x9a, 0x0b, 0x58, 0x51, 0x29, 0x00, + 0xd1, 0x01, 0x1c, 0x04, 0xe0, 0x19, 0x30, 0x01, + 0x28, 0x08, 0xdb, 0xf5, 0xe0, 0x15, 0x2c, 0x08, + 0xd8, 0x07, 0x3c, 0x01, 0x00, 0xa0, 0x9a, 0x0b, + 0x58, 0x10, 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x00, + 0xe0, 0xcf, 0x23, 0x20, 0x99, 0x0a, 0x5e, 0xcc, + 0x1c, 0x60, 0x84, 0x08, 0x99, 0x0a, 0x5e, 0xc8, + 0x28, 0x00, 0xd1, 0x02, 0x20, 0x64, 0x99, 0x0a, + 0x84, 0x08, 0x2e, 0x00, 0xd0, 0x03, 0x2e, 0x01, + 0xd1, 0x03, 0x22, 0x01, 0xe0, 0x02, 0x22, 0x00, + 0xe0, 0x00, 0x22, 0x03, 0x92, 0x01, 0x1c, 0x28, + 0xf0, 0x08, 0xfd, 0xfd, 0x90, 0x00, 0x00, 0x80, + 0x30, 0x80, 0xf7, 0xfc, 0xfe, 0xeb, 0x1c, 0x07, + 0xd0, 0xdd, 0x98, 0x00, 0x1d, 0xc2, 0x32, 0x79, + 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, 0xfb, 0xd0, + 0x98, 0x00, 0x60, 0xf8, 0x1d, 0xf8, 0x30, 0x79, + 0x61, 0x38, 0x98, 0x0e, 0x86, 0x78, 0x98, 0x0f, + 0x86, 0xb8, 0x98, 0x0c, 0x90, 0x02, 0x99, 0x0d, + 0x91, 0x03, 0x9a, 0x0e, 0x18, 0x80, 0x38, 0x01, + 0x90, 0x04, 0x98, 0x0f, 0x18, 0x08, 0x38, 0x01, + 0x90, 0x05, 0xa8, 0x02, 0x1c, 0x29, 0xf0, 0x08, + 0xfd, 0xdd, 0x61, 0x78, 0x9a, 0x01, 0x2a, 0x00, + 0xd0, 0x0e, 0x2a, 0x01, 0xd1, 0x1e, 0x00, 0x80, + 0xf7, 0xfc, 0xfe, 0xc0, 0x61, 0xb8, 0x28, 0x00, + 0xd0, 0x04, 0x69, 0x79, 0x00, 0x8a, 0x21, 0x00, + 0xf0, 0x0f, 0xfb, 0xa6, 0x20, 0x01, 0xe0, 0x0b, + 0x00, 0x80, 0xf7, 0xfc, 0xfe, 0xfb, 0x61, 0xb8, + 0x28, 0x00, 0xd0, 0x04, 0x69, 0x79, 0x00, 0x8a, + 0x21, 0x00, 0xf0, 0x0f, 0xfb, 0x99, 0x20, 0x00, + 0x86, 0x38, 0x23, 0x01, 0x03, 0xdb, 0x69, 0xf8, + 0x43, 0x18, 0xe0, 0x0d, 0x61, 0xbe, 0x0e, 0x36, + 0x06, 0x36, 0x23, 0x0d, 0x06, 0x9b, 0x42, 0xde, + 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x01, + 0x86, 0x38, 0x69, 0xf8, 0x4b, 0x33, 0x40, 0x18, + 0x61, 0xf8, 0x69, 0xb8, 0x28, 0x00, 0xd1, 0x06, + 0x69, 0x78, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, + 0xf7, 0xfc, 0xfe, 0xae, 0xe7, 0x7f, 0x68, 0xf8, + 0x90, 0x06, 0x69, 0x38, 0x90, 0x07, 0x69, 0x78, + 0x90, 0x08, 0x69, 0xb8, 0x90, 0x09, 0xa8, 0x02, + 0x1c, 0x21, 0x1d, 0xfa, 0x32, 0x01, 0xb4, 0x07, + 0x1c, 0x2a, 0xb4, 0x04, 0x20, 0x00, 0x9a, 0x05, + 0xa9, 0x0a, 0xab, 0x0c, 0xf0, 0x03, 0xf8, 0xb4, + 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, + 0xf0, 0x00, 0xf8, 0x5f, 0xe7, 0x63, 0x2d, 0x00, + 0xd0, 0x09, 0x2d, 0x01, 0xd0, 0x07, 0x2d, 0x02, + 0xd0, 0x05, 0x2d, 0x03, 0xd0, 0x03, 0x23, 0x02, + 0x69, 0xf8, 0x43, 0x18, 0x61, 0xf8, 0x85, 0xfc, + 0x2c, 0x08, 0xd2, 0x02, 0x00, 0xa0, 0x9a, 0x0b, + 0x50, 0x17, 0x20, 0x01, 0x24, 0x00, 0x63, 0xf8, + 0x63, 0xbc, 0x85, 0xbd, 0x21, 0x01, 0x1c, 0x38, + 0xf0, 0x00, 0xf9, 0x0c, 0x99, 0x0a, 0x8c, 0x88, + 0x06, 0x01, 0x0e, 0x09, 0x1c, 0x38, 0xf0, 0x00, + 0xf8, 0xbe, 0x22, 0x00, 0x21, 0x00, 0x1c, 0x38, + 0xf0, 0x00, 0xf8, 0x93, 0x98, 0x18, 0x60, 0x38, + 0x98, 0x18, 0x28, 0x00, 0xd0, 0x06, 0x22, 0x00, + 0x21, 0x03, 0x1c, 0x23, 0x9c, 0x18, 0x1c, 0x38, + 0xf0, 0x0f, 0xfa, 0xd4, 0x68, 0xb8, 0x60, 0x78, + 0x1c, 0x38, 0xb0, 0x0c, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x58, + 0x2e, 0x08, 0x1a, 0x58, 0xff, 0xff, 0x7f, 0xff, + 0xb5, 0x80, 0x1c, 0x07, 0xb0, 0x82, 0x28, 0x00, + 0xd0, 0x13, 0x68, 0x78, 0x28, 0x00, 0xd1, 0x10, + 0x68, 0xb8, 0x90, 0x00, 0x1d, 0xf8, 0x30, 0x05, + 0x90, 0x01, 0x46, 0x69, 0x68, 0x38, 0xf0, 0x0c, + 0xf8, 0xfb, 0x22, 0x0c, 0x21, 0x00, 0x1c, 0x38, + 0xf0, 0x0f, 0xfb, 0x06, 0x1c, 0x38, 0xf7, 0xfc, + 0xfe, 0x37, 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0xb0, 0x84, + 0x28, 0x00, 0xd1, 0x03, 0xb0, 0x04, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x23, 0x00, + 0x49, 0x1d, 0x00, 0x82, 0x58, 0x8c, 0x42, 0xbc, + 0xd1, 0x00, 0x50, 0x8b, 0x30, 0x01, 0x28, 0x08, + 0xdb, 0xf7, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x00, + 0xf8, 0xbc, 0x68, 0xf8, 0x90, 0x00, 0x69, 0x38, + 0x90, 0x01, 0x69, 0x78, 0x90, 0x02, 0x69, 0xb8, + 0x90, 0x03, 0x46, 0x68, 0x1d, 0xc2, 0x32, 0x01, + 0x46, 0x69, 0x68, 0xb8, 0xf0, 0x03, 0xfb, 0x38, + 0x6a, 0x38, 0x28, 0x00, 0xd0, 0x03, 0x68, 0x41, + 0x39, 0x01, 0x60, 0x41, 0x30, 0x04, 0x69, 0xf8, + 0x0c, 0x00, 0xd3, 0x0c, 0x23, 0x30, 0x5e, 0xf8, + 0x28, 0x00, 0xd1, 0x03, 0x69, 0xb8, 0xf7, 0xfc, + 0xfe, 0x2b, 0xe0, 0x04, 0x28, 0x01, 0xd1, 0x02, + 0x69, 0xb8, 0xf7, 0xfc, 0xfd, 0xf5, 0x22, 0x80, + 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, 0xfa, 0xbc, + 0x1c, 0x38, 0xf7, 0xfc, 0xfd, 0xed, 0xe7, 0xbd, + 0x2e, 0x08, 0x1a, 0x58, 0x28, 0x00, 0xd0, 0x08, + 0x28, 0x01, 0xd0, 0x08, 0x28, 0x02, 0xd0, 0x08, + 0x28, 0x03, 0xd1, 0x08, 0x20, 0xff, 0x30, 0x01, + 0x47, 0x70, 0x20, 0x02, 0x47, 0x70, 0x20, 0x04, + 0x47, 0x70, 0x20, 0x10, 0x47, 0x70, 0x20, 0x00, + 0x47, 0x70, 0xb5, 0x90, 0x1c, 0x07, 0x06, 0x08, + 0x0e, 0x00, 0x06, 0x14, 0x0e, 0x24, 0x28, 0x00, + 0xd0, 0x0a, 0x21, 0x03, 0x68, 0xb8, 0xf0, 0x04, + 0xfc, 0x3f, 0x68, 0xb8, 0x1c, 0x21, 0xf0, 0x04, + 0xfc, 0xe7, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x21, 0x00, 0x68, 0xb8, 0xf0, 0x04, 0xfc, 0x34, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, + 0x06, 0x09, 0xd0, 0x02, 0x68, 0x80, 0x21, 0x02, + 0xe0, 0x01, 0x68, 0x80, 0x21, 0x00, 0xf0, 0x04, + 0xfc, 0x27, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, + 0x06, 0x09, 0x0e, 0x09, 0x28, 0x00, 0xd0, 0x02, + 0x68, 0x80, 0xf0, 0x04, 0xfe, 0x2d, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0xb0, 0x23, 0x05, 0x43, 0x18, + 0x4d, 0x08, 0x84, 0xa8, 0x27, 0x00, 0x4c, 0x08, + 0x00, 0xb8, 0x58, 0x20, 0x8c, 0xa9, 0x06, 0x09, + 0x0e, 0x09, 0xf7, 0xff, 0xff, 0xe8, 0x37, 0x01, + 0x2f, 0x08, 0xdb, 0xf5, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x58, + 0x2e, 0x08, 0x1a, 0x58, 0x48, 0x01, 0x23, 0x24, + 0x5e, 0xc0, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x58, + 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x28, 0x00, + 0xd0, 0x15, 0x6a, 0x20, 0x28, 0x00, 0xd0, 0x06, + 0x42, 0xb8, 0xd0, 0x10, 0x68, 0x41, 0x39, 0x01, + 0x60, 0x41, 0x20, 0x00, 0x62, 0x20, 0x2f, 0x00, + 0xd0, 0x09, 0x68, 0xa0, 0x68, 0x39, 0xf0, 0x0c, + 0xf8, 0x39, 0x28, 0x00, 0xd1, 0x03, 0x62, 0x27, + 0x68, 0x78, 0x30, 0x01, 0x60, 0x78, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x06, 0x09, + 0xd0, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, + 0x68, 0x80, 0xf0, 0x04, 0xfd, 0x2d, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0x1c, 0x0c, + 0xd0, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, + 0x68, 0xb8, 0xf0, 0x04, 0xf8, 0xc5, 0x2c, 0x00, + 0xd0, 0x03, 0x23, 0x01, 0x69, 0xf8, 0x43, 0x18, + 0xe0, 0x02, 0x69, 0xf8, 0x08, 0x40, 0x00, 0x40, + 0x61, 0xf8, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x01, 0x21, 0x07, 0x07, 0x09, 0x63, 0x88, + 0x47, 0x70, 0x00, 0x00, 0xb5, 0x90, 0x9c, 0x03, + 0x9f, 0x04, 0xb0, 0x85, 0x91, 0x00, 0x92, 0x01, + 0x93, 0x02, 0x94, 0x03, 0x97, 0x04, 0x68, 0x80, + 0x46, 0x69, 0xf0, 0x0a, 0xff, 0x89, 0xb0, 0x05, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, + 0xb0, 0x86, 0x98, 0x06, 0x6a, 0x40, 0x68, 0xc3, + 0x93, 0x05, 0x98, 0x06, 0x6b, 0xc0, 0x01, 0x80, + 0x06, 0x05, 0x0e, 0x2d, 0x95, 0x00, 0x68, 0x18, + 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, 0x01, 0x40, + 0x08, 0xc0, 0x90, 0x04, 0x99, 0x07, 0x68, 0x48, + 0x99, 0x04, 0x43, 0x48, 0x99, 0x07, 0x68, 0x09, + 0x08, 0xc9, 0x18, 0x0f, 0x97, 0x03, 0x21, 0x00, + 0x91, 0x02, 0x9b, 0x05, 0x68, 0x58, 0x28, 0x00, + 0xdd, 0x5e, 0x23, 0x32, 0x98, 0x06, 0x5e, 0xc0, + 0x9b, 0x09, 0x43, 0x58, 0x9a, 0x08, 0x18, 0x81, + 0x1c, 0x08, 0xd5, 0x00, 0x30, 0x03, 0x10, 0x80, + 0x29, 0x00, 0xda, 0x04, 0x42, 0x49, 0x07, 0x89, + 0x0f, 0x89, 0x42, 0x49, 0xe0, 0x01, 0x07, 0x89, + 0x0f, 0x89, 0x00, 0x4a, 0x9d, 0x00, 0x41, 0x15, + 0x1c, 0x2b, 0x06, 0x2d, 0x0e, 0x2d, 0x27, 0xc0, + 0x40, 0xd7, 0x06, 0x3a, 0x0e, 0x12, 0x9b, 0x06, + 0x69, 0x9b, 0x18, 0x18, 0x9b, 0x05, 0x9f, 0x03, + 0x19, 0xdb, 0x33, 0x88, 0x78, 0x1f, 0x33, 0x01, + 0x93, 0x01, 0x24, 0x00, 0x9b, 0x07, 0x68, 0x9b, + 0x2b, 0x00, 0xd9, 0x23, 0x0a, 0x3b, 0xd3, 0x05, + 0x78, 0x03, 0x43, 0x93, 0x70, 0x03, 0x78, 0x03, + 0x43, 0x2b, 0x70, 0x03, 0x31, 0x01, 0x29, 0x03, + 0xdd, 0x04, 0x22, 0xc0, 0x21, 0x00, 0x9d, 0x00, + 0x30, 0x01, 0xe0, 0x05, 0x10, 0x92, 0x06, 0x12, + 0x0e, 0x12, 0x10, 0xab, 0x06, 0x1d, 0x0e, 0x2d, + 0x00, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, 0x34, 0x01, + 0x07, 0x63, 0xd1, 0x03, 0x9b, 0x01, 0x78, 0x1f, + 0x33, 0x01, 0x93, 0x01, 0x9b, 0x07, 0x68, 0x9b, + 0x42, 0xa3, 0xd8, 0xdb, 0x98, 0x04, 0x9f, 0x03, + 0x18, 0x3f, 0x97, 0x03, 0x9b, 0x09, 0x33, 0x01, + 0x93, 0x09, 0x99, 0x02, 0x31, 0x01, 0x91, 0x02, + 0x9b, 0x05, 0x68, 0x58, 0x42, 0x88, 0xdc, 0xa0, + 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0xff, 0xb0, 0x86, 0x98, 0x06, + 0x6a, 0x40, 0x68, 0xc3, 0x93, 0x05, 0x98, 0x06, + 0x6b, 0xc0, 0x07, 0x06, 0x0f, 0x36, 0x96, 0x00, + 0x01, 0x30, 0x06, 0x06, 0x0e, 0x36, 0x96, 0x01, + 0x68, 0x18, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, + 0x01, 0x40, 0x08, 0xc0, 0x90, 0x04, 0x68, 0x48, + 0x9a, 0x04, 0x43, 0x50, 0x68, 0x0a, 0x08, 0xd2, + 0x18, 0x17, 0x97, 0x03, 0x22, 0x00, 0x92, 0x02, + 0x9b, 0x05, 0x68, 0x58, 0x28, 0x00, 0xdd, 0x48, + 0x23, 0x32, 0x98, 0x06, 0x5e, 0xc0, 0x9b, 0x09, + 0x43, 0x58, 0x9a, 0x08, 0x18, 0x82, 0x1c, 0x10, + 0xd5, 0x00, 0x30, 0x01, 0x10, 0x40, 0x9b, 0x06, + 0x69, 0x9b, 0x18, 0x18, 0x9b, 0x05, 0x9f, 0x03, + 0x19, 0xdb, 0x1d, 0xdd, 0x35, 0x81, 0x78, 0x2f, + 0x24, 0x00, 0x68, 0x8b, 0x35, 0x01, 0x2b, 0x00, + 0xd9, 0x21, 0x0a, 0x3b, 0xd3, 0x10, 0x08, 0x53, + 0xd3, 0x06, 0x78, 0x06, 0x23, 0xf0, 0x40, 0x33, + 0x70, 0x03, 0x78, 0x03, 0x9e, 0x00, 0xe0, 0x05, + 0x78, 0x03, 0x07, 0x1b, 0x0f, 0x1b, 0x70, 0x03, + 0x78, 0x03, 0x9e, 0x01, 0x43, 0x33, 0x70, 0x03, + 0x32, 0x01, 0x08, 0x53, 0xd2, 0x00, 0x30, 0x01, + 0x00, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, 0x34, 0x01, + 0x07, 0x63, 0xd1, 0x01, 0x78, 0x2f, 0x35, 0x01, + 0x68, 0x8b, 0x42, 0xa3, 0xd8, 0xdd, 0x98, 0x04, + 0x9f, 0x03, 0x18, 0x3f, 0x97, 0x03, 0x9b, 0x09, + 0x33, 0x01, 0x93, 0x09, 0x9a, 0x02, 0x32, 0x01, + 0x92, 0x02, 0x9b, 0x05, 0x68, 0x58, 0x42, 0x90, + 0xdc, 0xb6, 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0xb0, 0x83, + 0x98, 0x03, 0x6a, 0x40, 0x68, 0xc4, 0x98, 0x03, + 0x6b, 0xc0, 0x06, 0x03, 0x0e, 0x1b, 0x93, 0x00, + 0x68, 0x20, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, + 0x01, 0x40, 0x08, 0xc2, 0x92, 0x02, 0x68, 0x48, + 0x43, 0x50, 0x68, 0x0a, 0x08, 0xd2, 0x18, 0x10, + 0x90, 0x01, 0x25, 0x00, 0x68, 0x60, 0x28, 0x00, + 0xdd, 0x35, 0x23, 0x32, 0x98, 0x03, 0x5e, 0xc0, + 0x9b, 0x06, 0x43, 0x58, 0x9a, 0x05, 0x18, 0x80, + 0x9a, 0x03, 0x69, 0x92, 0x18, 0x17, 0x98, 0x01, + 0x18, 0x20, 0x1d, 0xc6, 0x36, 0x81, 0x78, 0x32, + 0x20, 0x00, 0x68, 0x8b, 0x36, 0x01, 0x2b, 0x00, + 0xd9, 0x16, 0x0a, 0x13, 0xd3, 0x01, 0x9b, 0x00, + 0x70, 0x3b, 0x00, 0x52, 0x06, 0x12, 0x0e, 0x12, + 0xd1, 0x09, 0x1d, 0xc2, 0x32, 0x01, 0x08, 0xd2, + 0x00, 0xd2, 0x1a, 0x10, 0x19, 0xc7, 0x1c, 0x10, + 0x78, 0x32, 0x36, 0x01, 0xe0, 0x01, 0x30, 0x01, + 0x37, 0x01, 0x68, 0x8b, 0x42, 0x83, 0xd8, 0xe8, + 0x98, 0x01, 0x9a, 0x02, 0x18, 0x80, 0x90, 0x01, + 0x9b, 0x06, 0x33, 0x01, 0x93, 0x06, 0x68, 0x60, + 0x35, 0x01, 0x42, 0xa8, 0xdc, 0xc9, 0xb0, 0x03, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xff, 0x23, 0x2c, 0x1c, 0x07, 0x5e, 0xc0, + 0xb0, 0x85, 0x28, 0x01, 0xd0, 0x0f, 0x28, 0x02, + 0xd0, 0x07, 0x28, 0x03, 0xd1, 0x11, 0xab, 0x06, + 0xcb, 0x0e, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x9a, + 0xe0, 0x5d, 0xab, 0x06, 0xcb, 0x0e, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0x23, 0xe0, 0x57, 0xab, 0x06, + 0xcb, 0x0e, 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0x97, + 0xe0, 0x51, 0x6a, 0x78, 0x68, 0xc0, 0x90, 0x04, + 0x68, 0x00, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, + 0x01, 0x40, 0x08, 0xc0, 0x90, 0x03, 0x99, 0x06, + 0x68, 0x48, 0x99, 0x03, 0x43, 0x48, 0x99, 0x06, + 0x68, 0x09, 0x08, 0xc9, 0x18, 0x09, 0x91, 0x02, + 0x21, 0x00, 0x91, 0x01, 0x98, 0x04, 0x68, 0x40, + 0x28, 0x00, 0xdd, 0x38, 0x98, 0x04, 0x99, 0x02, + 0x9e, 0x07, 0x18, 0x40, 0x30, 0x88, 0x78, 0x05, + 0x30, 0x01, 0x90, 0x00, 0x24, 0x00, 0x99, 0x06, + 0x68, 0x88, 0x28, 0x00, 0xd9, 0x1d, 0x0a, 0x28, + 0xd3, 0x05, 0x68, 0xb8, 0x6b, 0xfb, 0x9a, 0x08, + 0x1c, 0x31, 0xf0, 0x0a, 0xfb, 0xa7, 0x00, 0x68, + 0x06, 0x05, 0x0e, 0x2d, 0xd1, 0x0b, 0x1d, 0xe0, + 0x30, 0x01, 0x08, 0xc0, 0x00, 0xc0, 0x1b, 0x01, + 0x19, 0x8e, 0x1c, 0x04, 0x98, 0x00, 0x78, 0x05, + 0x30, 0x01, 0x90, 0x00, 0xe0, 0x01, 0x34, 0x01, + 0x36, 0x01, 0x99, 0x06, 0x68, 0x88, 0x42, 0xa0, + 0xd8, 0xe1, 0x98, 0x03, 0x99, 0x02, 0x18, 0x09, + 0x91, 0x02, 0x9a, 0x08, 0x32, 0x01, 0x92, 0x08, + 0x99, 0x01, 0x31, 0x01, 0x91, 0x01, 0x98, 0x04, + 0x68, 0x40, 0x42, 0x88, 0xdc, 0xc6, 0xb0, 0x05, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0x90, 0x1c, 0x07, 0x20, 0x00, 0xb0, 0x88, + 0xf0, 0x08, 0xfa, 0x55, 0x90, 0x06, 0x00, 0x80, + 0x30, 0x10, 0x00, 0x80, 0xf7, 0xfc, 0xfb, 0x42, + 0x1c, 0x04, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x03, + 0xb0, 0x08, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x1d, 0xe1, 0x31, 0x09, 0x91, 0x07, 0x49, 0x19, + 0x68, 0x4b, 0x1c, 0x5a, 0x60, 0x4a, 0x60, 0x63, + 0x60, 0xe7, 0x68, 0x39, 0x01, 0x09, 0x31, 0x1f, + 0x09, 0x49, 0x01, 0x49, 0x90, 0x00, 0x90, 0x01, + 0x1e, 0x48, 0x90, 0x02, 0x68, 0xe0, 0x68, 0x40, + 0x00, 0xc0, 0x38, 0x01, 0x90, 0x03, 0x46, 0x68, + 0x21, 0x00, 0xf0, 0x08, 0xfa, 0x33, 0x60, 0xa0, + 0x68, 0xe0, 0x30, 0x88, 0x90, 0x05, 0x68, 0xa0, + 0x90, 0x04, 0x46, 0x68, 0x1c, 0x22, 0x68, 0x61, + 0xb4, 0x07, 0x22, 0x00, 0xb4, 0x04, 0x22, 0x01, + 0x20, 0x00, 0xa9, 0x0a, 0xab, 0x08, 0xf0, 0x02, + 0xfd, 0x4b, 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x03, + 0x1c, 0x20, 0xf7, 0xfc, 0xfb, 0x29, 0x24, 0x00, + 0x1c, 0x20, 0xe7, 0xc5, 0x2e, 0x08, 0x1a, 0x80, + 0xb5, 0x80, 0x1c, 0x07, 0xb0, 0x84, 0x28, 0x00, + 0xd0, 0x1a, 0x20, 0x00, 0xf0, 0x08, 0xfa, 0x07, + 0x90, 0x00, 0x1d, 0xf8, 0x30, 0x09, 0x90, 0x01, + 0x68, 0xb8, 0x90, 0x02, 0x68, 0xf8, 0x30, 0x88, + 0x90, 0x03, 0x46, 0x68, 0x46, 0x69, 0x1d, 0xc2, + 0x32, 0x01, 0x68, 0x38, 0xf0, 0x03, 0xf8, 0x38, + 0x22, 0x10, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0e, + 0xff, 0xd3, 0x1c, 0x38, 0xf7, 0xfc, 0xfb, 0x04, + 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xff, 0x23, 0x32, 0x1c, 0x07, 0x5e, 0xc0, + 0x1c, 0x0c, 0x1c, 0x15, 0xb0, 0x8a, 0x42, 0x90, + 0xdd, 0x63, 0x6a, 0x78, 0x28, 0x00, 0xd1, 0x0b, + 0x4e, 0x38, 0x68, 0x30, 0x28, 0x00, 0xd1, 0x05, + 0x48, 0x37, 0xf7, 0xff, 0xff, 0x7d, 0x60, 0x30, + 0x28, 0x00, 0xd0, 0x61, 0x68, 0x30, 0x62, 0x78, + 0x23, 0x01, 0x6b, 0xb8, 0x6a, 0x79, 0x42, 0xd8, + 0xd1, 0x01, 0x22, 0x01, 0xe0, 0x00, 0x22, 0x00, + 0x92, 0x01, 0x68, 0xc8, 0x90, 0x00, 0x68, 0x00, + 0x90, 0x04, 0x98, 0x00, 0x68, 0x40, 0x90, 0x03, + 0x6b, 0xf8, 0x28, 0x01, 0xd1, 0x01, 0x90, 0x02, + 0xe0, 0x11, 0x20, 0x00, 0x90, 0x02, 0x9a, 0x01, + 0x2a, 0x00, 0xd1, 0x0c, 0x1c, 0x20, 0xf0, 0x00, + 0xf8, 0x57, 0x6b, 0xba, 0x99, 0x03, 0xb4, 0x06, + 0x1c, 0x03, 0x9a, 0x0f, 0x1c, 0x38, 0x1c, 0x29, + 0xf7, 0xff, 0xfd, 0x80, 0xb0, 0x02, 0x99, 0x03, + 0x91, 0x08, 0x20, 0x01, 0x90, 0x09, 0x78, 0x20, + 0x28, 0x00, 0xd0, 0x31, 0x23, 0x32, 0x5e, 0xf8, + 0x42, 0xa8, 0xdd, 0x22, 0x78, 0x20, 0x99, 0x00, + 0xf0, 0x00, 0xf8, 0x34, 0x90, 0x07, 0x1c, 0x06, + 0x78, 0x20, 0x07, 0x00, 0x0f, 0x00, 0x99, 0x04, + 0x43, 0x48, 0x90, 0x05, 0x78, 0x20, 0x09, 0x00, + 0x07, 0x40, 0x0f, 0x40, 0x99, 0x03, 0x43, 0x48, + 0x90, 0x06, 0x98, 0x02, 0x34, 0x01, 0x28, 0x00, + 0xd0, 0x0c, 0x99, 0x0d, 0x9a, 0x01, 0xb4, 0x06, + 0x6a, 0x78, 0x68, 0xb9, 0x68, 0x00, 0xaa, 0x07, + 0x1c, 0x2b, 0xf0, 0x0a, 0xfd, 0xab, 0xb0, 0x02, + 0xe0, 0x06, 0xe0, 0x09, 0x9b, 0x0d, 0x1c, 0x38, + 0xa9, 0x05, 0x1c, 0x2a, 0xf7, 0xff, 0xfe, 0xa8, + 0x19, 0xad, 0x78, 0x20, 0x28, 0x00, 0xd1, 0xcd, + 0xb0, 0x0a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x80, + 0x2e, 0x02, 0xcf, 0xe4, 0x29, 0x00, 0xd1, 0x00, + 0x49, 0x02, 0x06, 0x40, 0x0e, 0x40, 0x18, 0x40, + 0x7a, 0x00, 0x47, 0x70, 0x2e, 0x02, 0xcf, 0xe4, + 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0xd1, 0x08, + 0x4f, 0x0c, 0x68, 0x38, 0x28, 0x00, 0xd1, 0x03, + 0x48, 0x0b, 0xf7, 0xff, 0xfe, 0xf9, 0x60, 0x38, + 0x68, 0x3f, 0x25, 0x00, 0x78, 0x20, 0x28, 0x00, + 0xd0, 0x08, 0x78, 0x20, 0x68, 0xf9, 0x34, 0x01, + 0xf7, 0xff, 0xff, 0xe0, 0x19, 0x45, 0x78, 0x20, + 0x28, 0x00, 0xd1, 0xf6, 0x1c, 0x28, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x80, + 0x2e, 0x02, 0xcf, 0xe4, 0xb5, 0x80, 0x28, 0x00, + 0xd1, 0x08, 0x4f, 0x09, 0x68, 0x38, 0x28, 0x00, + 0xd1, 0x03, 0x48, 0x08, 0xf7, 0xff, 0xfe, 0xd8, + 0x60, 0x38, 0x68, 0x38, 0x28, 0x00, 0xd1, 0x02, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xc0, + 0x68, 0x40, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x1a, 0x80, 0x2e, 0x02, 0xcf, 0xe4, + 0xb5, 0xf0, 0xb0, 0x83, 0x4a, 0x18, 0x21, 0x00, + 0x20, 0xff, 0x30, 0x01, 0xf7, 0xff, 0xfa, 0xac, + 0x49, 0x16, 0x27, 0x00, 0x64, 0x08, 0x49, 0x16, + 0x91, 0x02, 0x49, 0x16, 0x91, 0x01, 0x49, 0x16, + 0x91, 0x00, 0x4c, 0x16, 0x01, 0x38, 0x06, 0x01, + 0x0e, 0x09, 0x20, 0x10, 0x1c, 0x22, 0x1c, 0x0d, + 0xf7, 0xff, 0xfa, 0x9a, 0x00, 0xbe, 0x99, 0x02, + 0x51, 0x88, 0x20, 0x04, 0x1c, 0x29, 0x1c, 0x22, + 0xf7, 0xff, 0xfa, 0x92, 0x99, 0x01, 0x51, 0x88, + 0x20, 0x02, 0x1c, 0x29, 0x1c, 0x22, 0xf7, 0xff, + 0xfa, 0x8b, 0x99, 0x00, 0x51, 0x88, 0x37, 0x01, + 0x2f, 0x08, 0xdb, 0xe3, 0x20, 0x00, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x1a, 0xc8, 0x2e, 0x08, 0x1c, 0x88, + 0x2e, 0x08, 0x55, 0x58, 0x2e, 0x08, 0x55, 0x78, + 0x2e, 0x08, 0x55, 0x98, 0x2e, 0x08, 0x1a, 0x88, + 0xb5, 0x80, 0x48, 0x0c, 0xf7, 0xff, 0xfe, 0x84, + 0x4f, 0x0b, 0x64, 0x78, 0x48, 0x0b, 0xf7, 0xff, + 0xfe, 0x7f, 0x64, 0xb8, 0x48, 0x0a, 0xf7, 0xff, + 0xfe, 0x7b, 0x64, 0xf8, 0x20, 0x00, 0x22, 0x00, + 0x49, 0x08, 0x00, 0x83, 0x50, 0xca, 0x30, 0x01, + 0x28, 0x10, 0xdb, 0xfa, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x02, 0x56, 0xcc, + 0x2e, 0x08, 0x1c, 0x88, 0x2e, 0x02, 0x8d, 0x58, + 0x2e, 0x02, 0xcf, 0xe4, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0x90, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, + 0x29, 0x00, 0xd0, 0x0b, 0x29, 0x0f, 0xdc, 0x09, + 0x00, 0x8c, 0x4f, 0x06, 0x59, 0x39, 0x29, 0x00, + 0xd0, 0x04, 0x1c, 0x08, 0xf7, 0xff, 0xfb, 0x91, + 0x20, 0x00, 0x51, 0x38, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0xff, 0x04, 0x05, 0x0c, 0x2d, 0x04, 0x10, + 0x0c, 0x00, 0xb0, 0x82, 0x90, 0x00, 0x04, 0x18, + 0x0c, 0x00, 0x90, 0x01, 0x2d, 0x00, 0xd0, 0x01, + 0x2d, 0x0f, 0xdd, 0x01, 0x20, 0xff, 0xe0, 0x53, + 0x00, 0xaf, 0x4c, 0x2c, 0x59, 0xe0, 0x28, 0x00, + 0xd0, 0x02, 0x1c, 0x28, 0xf7, 0xff, 0xff, 0xd0, + 0x98, 0x00, 0x4a, 0x29, 0x40, 0x02, 0x92, 0x00, + 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9a, 0xdd, 0x01, + 0x1c, 0x1a, 0x93, 0x00, 0x23, 0x09, 0x01, 0x9b, + 0x98, 0x01, 0x42, 0x98, 0xdd, 0x01, 0x1c, 0x1a, + 0x93, 0x00, 0x2d, 0x08, 0xda, 0x01, 0x20, 0x00, + 0xe0, 0x00, 0x20, 0x01, 0x22, 0x00, 0x21, 0x00, + 0xb4, 0x07, 0x9a, 0x06, 0xb4, 0x04, 0x20, 0x00, + 0x9a, 0x04, 0x9b, 0x05, 0xf7, 0xff, 0xfa, 0x38, + 0x51, 0xe0, 0xb0, 0x04, 0x1c, 0x01, 0xd0, 0xd1, + 0x48, 0x18, 0x6c, 0x82, 0x62, 0x4a, 0x21, 0x01, + 0x59, 0xe2, 0x63, 0xd1, 0x21, 0x00, 0x43, 0xc9, + 0x59, 0xe2, 0x63, 0x91, 0x99, 0x03, 0x29, 0x08, + 0xd2, 0x10, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x06, 0x08, 0x0b, + 0x04, 0x06, 0x08, 0x0b, 0x48, 0x0e, 0xe0, 0x02, + 0x48, 0x0e, 0xe0, 0x00, 0x48, 0x0e, 0x59, 0xc6, + 0xe0, 0x00, 0x6c, 0x06, 0x59, 0xe0, 0x1c, 0x31, + 0xf7, 0xff, 0xfb, 0xd6, 0x59, 0xe0, 0x68, 0x80, + 0x21, 0x07, 0xf0, 0x04, 0xf9, 0xdd, 0x20, 0x00, + 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0x00, 0x00, 0xff, 0xfe, 0x2e, 0x08, 0x1c, 0x88, + 0x2e, 0x08, 0x55, 0x98, 0x2e, 0x08, 0x55, 0x78, + 0x2e, 0x08, 0x55, 0x58, 0xb5, 0xf0, 0x04, 0x00, + 0x0c, 0x00, 0x04, 0x09, 0x14, 0x09, 0x04, 0x16, + 0x14, 0x36, 0xb0, 0x85, 0x28, 0x07, 0xdc, 0x29, + 0x00, 0x84, 0x4f, 0x21, 0x59, 0x38, 0x28, 0x00, + 0xd0, 0x24, 0x08, 0x49, 0x00, 0x49, 0x04, 0x0d, + 0x14, 0x2d, 0x68, 0x80, 0xa9, 0x01, 0xf0, 0x04, + 0xfa, 0x8b, 0x98, 0x01, 0x19, 0x40, 0x90, 0x01, + 0x98, 0x03, 0x19, 0x40, 0x90, 0x03, 0x98, 0x02, + 0x19, 0x80, 0x90, 0x02, 0x98, 0x04, 0x19, 0x80, + 0x90, 0x04, 0x98, 0x01, 0x49, 0x15, 0x42, 0x88, + 0xd8, 0x0c, 0x98, 0x02, 0x42, 0x88, 0xd8, 0x09, + 0x23, 0x2d, 0x01, 0x1b, 0x98, 0x01, 0x42, 0x98, + 0xda, 0x04, 0x23, 0x09, 0x01, 0x9b, 0x98, 0x02, + 0x42, 0x98, 0xdb, 0x01, 0x20, 0xff, 0xe0, 0x12, + 0x59, 0x38, 0x68, 0x80, 0xa9, 0x01, 0xf0, 0x02, + 0xf8, 0x5b, 0x59, 0x38, 0x68, 0x80, 0x46, 0x69, + 0xf0, 0x03, 0xff, 0x2a, 0x98, 0x00, 0x28, 0x00, + 0xd1, 0x04, 0x59, 0x38, 0x68, 0x80, 0x21, 0x01, + 0xf0, 0x03, 0xfc, 0x6e, 0x20, 0x00, 0xb0, 0x05, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x55, 0x18, 0x80, 0x00, 0x00, 0x00, + 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x0b, + 0x0c, 0x1b, 0x04, 0x16, 0x0c, 0x36, 0x20, 0xff, + 0xb0, 0x85, 0x2f, 0x07, 0xdc, 0x10, 0x00, 0xbc, + 0x4f, 0x1c, 0x59, 0x39, 0x29, 0x00, 0xd0, 0x0b, + 0x08, 0x5a, 0x00, 0x52, 0x04, 0x15, 0x0c, 0x2d, + 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9d, 0xda, 0x03, + 0x23, 0x09, 0x01, 0x9b, 0x42, 0x9e, 0xdb, 0x03, + 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x68, 0x88, 0xa9, 0x01, 0xf0, 0x04, 0xfa, 0x2c, + 0x98, 0x03, 0x99, 0x01, 0x1a, 0x40, 0x90, 0x03, + 0x19, 0x40, 0x90, 0x03, 0x98, 0x04, 0x99, 0x02, + 0x1a, 0x40, 0x90, 0x04, 0x19, 0x80, 0x90, 0x04, + 0x95, 0x01, 0x96, 0x02, 0x59, 0x38, 0x68, 0x80, + 0xa9, 0x01, 0xf0, 0x02, 0xf8, 0x0d, 0x59, 0x38, + 0x68, 0x80, 0x46, 0x69, 0xf0, 0x03, 0xfe, 0xdc, + 0x98, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x59, 0x38, + 0x68, 0x80, 0x21, 0x01, 0xf0, 0x03, 0xfc, 0x20, + 0x20, 0x00, 0xe7, 0xd5, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x80, + 0x49, 0x04, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x03, + 0x68, 0x80, 0x21, 0x00, 0xf0, 0x03, 0xfc, 0x10, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0x80, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, + 0x29, 0x07, 0xdc, 0x0c, 0x29, 0x01, 0xdb, 0x0a, + 0x00, 0x88, 0x49, 0x06, 0x58, 0x08, 0x27, 0x00, + 0x28, 0x00, 0xd0, 0x03, 0x68, 0x80, 0x21, 0x01, + 0xf0, 0x03, 0xfa, 0x56, 0x1c, 0x38, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x55, 0x18, + 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, 0x29, 0x0f, + 0xdc, 0x06, 0x00, 0x89, 0x4a, 0x03, 0x58, 0x51, + 0x29, 0x00, 0xd0, 0x01, 0x23, 0x32, 0x5e, 0xc8, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, 0x29, 0x0f, + 0xdc, 0x06, 0x00, 0x89, 0x4a, 0x03, 0x58, 0x51, + 0x29, 0x00, 0xd0, 0x01, 0x23, 0x34, 0x5e, 0xc8, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0xb0, 0x04, 0x03, 0x0c, 0x1b, 0x04, 0x0a, + 0x0c, 0x12, 0x20, 0xff, 0x2b, 0x07, 0xdc, 0x10, + 0x00, 0x9d, 0x4f, 0x09, 0x59, 0x79, 0x29, 0x00, + 0xd0, 0x0b, 0x07, 0x14, 0x0f, 0x24, 0x68, 0x88, + 0x21, 0x03, 0xf0, 0x03, 0xfe, 0xc5, 0x59, 0x78, + 0x68, 0x80, 0x1c, 0x21, 0xf0, 0x03, 0xff, 0x6c, + 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0xb5, 0x00, 0x04, 0x01, + 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, + 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, + 0xd0, 0x04, 0x68, 0x88, 0x21, 0x02, 0xf0, 0x03, + 0xfe, 0xab, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0xb5, 0x00, 0x04, 0x01, + 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, + 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, + 0xd0, 0x04, 0x68, 0x88, 0x21, 0x00, 0xf0, 0x03, + 0xfe, 0x97, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0xb5, 0xf0, 0x04, 0x05, + 0x0c, 0x2d, 0x04, 0x09, 0x0c, 0x09, 0x04, 0x12, + 0x0c, 0x12, 0x04, 0x1e, 0x0c, 0x36, 0x9c, 0x05, + 0x9f, 0x06, 0x04, 0x24, 0x0c, 0x24, 0x04, 0x3f, + 0x0c, 0x3f, 0x20, 0xff, 0xb0, 0x85, 0x2d, 0x0f, + 0xdc, 0x04, 0x00, 0xab, 0x4d, 0x10, 0x58, 0xed, + 0x2d, 0x00, 0xd1, 0x03, 0xb0, 0x05, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x19, 0x88, 0x23, 0x32, + 0x5e, 0xeb, 0x42, 0x98, 0xdd, 0x02, 0x1a, 0x58, + 0x04, 0x06, 0x0c, 0x36, 0x19, 0x10, 0x23, 0x34, + 0x5e, 0xeb, 0x42, 0x98, 0xdd, 0x02, 0x1a, 0x98, + 0x04, 0x04, 0x0c, 0x24, 0x91, 0x00, 0x92, 0x01, + 0x96, 0x02, 0x94, 0x03, 0x97, 0x04, 0x46, 0x69, + 0x68, 0xa8, 0xf0, 0x0a, 0xfa, 0x3d, 0xe7, 0xe1, + 0x2e, 0x08, 0x55, 0x18, 0xb4, 0x80, 0x04, 0x03, + 0x0c, 0x1b, 0x20, 0x00, 0x29, 0x00, 0xdb, 0x0f, + 0x2a, 0x00, 0xdb, 0x0d, 0x00, 0x9b, 0x4f, 0x07, + 0x58, 0xff, 0x2f, 0x00, 0xd0, 0x08, 0x23, 0x32, + 0x5e, 0xfb, 0x42, 0x8b, 0xdd, 0x04, 0x23, 0x34, + 0x5e, 0xf9, 0x42, 0x91, 0xdd, 0x00, 0x20, 0x01, + 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0xf0, 0x9c, 0x06, 0x9e, 0x05, 0x04, 0x00, + 0x0c, 0x00, 0xb0, 0x85, 0x90, 0x00, 0x04, 0x08, + 0x14, 0x00, 0x04, 0x17, 0x14, 0x3f, 0x04, 0x1d, + 0x14, 0x2d, 0x04, 0x31, 0x14, 0x09, 0x91, 0x01, + 0x04, 0x23, 0x0c, 0x1b, 0x93, 0x02, 0xb0, 0x82, + 0x99, 0x02, 0x00, 0x89, 0x91, 0x06, 0x4a, 0x71, + 0x92, 0x05, 0x58, 0x51, 0x29, 0x00, 0xd1, 0x01, + 0x20, 0xff, 0xe0, 0xd6, 0x2d, 0x00, 0xda, 0x0e, + 0x19, 0x40, 0x04, 0x00, 0x14, 0x00, 0x42, 0x69, + 0x04, 0x0d, 0x14, 0x2d, 0x99, 0x03, 0x18, 0x79, + 0x04, 0x0f, 0x14, 0x3f, 0x99, 0x03, 0x42, 0x49, + 0x04, 0x09, 0x14, 0x09, 0x91, 0x03, 0x1c, 0x01, + 0x1c, 0x04, 0x98, 0x02, 0x1c, 0x3a, 0xf7, 0xff, + 0xff, 0xb1, 0x28, 0x00, 0xd0, 0x08, 0x98, 0x06, + 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, 0x9b, 0x04, + 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, 0xff, 0x9a, + 0x98, 0x03, 0x10, 0x40, 0x90, 0x00, 0x10, 0x6e, + 0x1c, 0x28, 0xb0, 0x82, 0xf0, 0x0e, 0xfd, 0x56, + 0xf0, 0x0e, 0xfd, 0x92, 0x90, 0x00, 0x91, 0x01, + 0x98, 0x05, 0xf0, 0x0e, 0xfd, 0x4f, 0xf0, 0x0e, + 0xfd, 0x8b, 0x9a, 0x00, 0x9b, 0x01, 0xb0, 0x02, + 0xf0, 0x0e, 0xfd, 0x8a, 0x28, 0x00, 0xd0, 0x4c, + 0x98, 0x03, 0x28, 0x00, 0xdd, 0x21, 0x26, 0x00, + 0x2d, 0x00, 0xdd, 0x6d, 0x98, 0x00, 0x99, 0x03, + 0x18, 0x40, 0x90, 0x00, 0x34, 0x01, 0x42, 0xa8, + 0xdb, 0x03, 0x98, 0x00, 0x1b, 0x40, 0x90, 0x00, + 0x37, 0x01, 0x98, 0x02, 0x1c, 0x21, 0x1c, 0x3a, + 0xf7, 0xff, 0xff, 0x78, 0x28, 0x00, 0xd0, 0x08, + 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, + 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, + 0xff, 0x61, 0x36, 0x01, 0x42, 0xae, 0xdb, 0xe1, + 0xe0, 0x76, 0x98, 0x03, 0x42, 0x40, 0x04, 0x00, + 0x14, 0x00, 0x90, 0x03, 0x98, 0x00, 0x42, 0x46, + 0x20, 0x00, 0x90, 0x01, 0x2d, 0x00, 0xdd, 0x43, + 0x98, 0x03, 0x18, 0x36, 0x34, 0x01, 0x42, 0xae, + 0xdb, 0x01, 0x1b, 0x76, 0x3f, 0x01, 0x98, 0x02, + 0x1c, 0x21, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x52, + 0x28, 0x00, 0xd0, 0x08, 0x98, 0x06, 0x99, 0x05, + 0x58, 0x08, 0x68, 0x80, 0x9b, 0x04, 0x1c, 0x21, + 0x1c, 0x3a, 0xf0, 0x09, 0xff, 0x3b, 0x98, 0x01, + 0x30, 0x01, 0x90, 0x01, 0x42, 0xa8, 0xdb, 0xe3, + 0xe0, 0x4e, 0x98, 0x03, 0x28, 0x00, 0xdd, 0x24, + 0x20, 0x00, 0x90, 0x01, 0x98, 0x03, 0x28, 0x00, + 0xdd, 0x1e, 0x19, 0x76, 0x99, 0x03, 0x37, 0x01, + 0x42, 0x8e, 0xdb, 0x02, 0x98, 0x03, 0x1a, 0x36, + 0x34, 0x01, 0x98, 0x02, 0x1c, 0x21, 0x1c, 0x3a, + 0xf7, 0xff, 0xff, 0x2c, 0x28, 0x00, 0xd0, 0x08, + 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, + 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, + 0xff, 0x15, 0x98, 0x01, 0x30, 0x01, 0x90, 0x01, + 0x99, 0x03, 0x42, 0x88, 0xdb, 0xe1, 0xe0, 0x27, + 0xe0, 0x26, 0x98, 0x03, 0x42, 0x40, 0x04, 0x01, + 0x14, 0x09, 0x91, 0x03, 0x20, 0x00, 0x90, 0x01, + 0x29, 0x00, 0xdd, 0x1d, 0x19, 0x76, 0x99, 0x03, + 0x3f, 0x01, 0x42, 0x8e, 0xdb, 0x02, 0x99, 0x03, + 0x1a, 0x76, 0x34, 0x01, 0x98, 0x02, 0x1c, 0x21, + 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x03, 0x28, 0x00, + 0xd0, 0x08, 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, + 0x68, 0x80, 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, + 0xf0, 0x09, 0xfe, 0xec, 0x98, 0x01, 0x30, 0x01, + 0x90, 0x01, 0x99, 0x03, 0x42, 0x88, 0xdb, 0xe1, + 0x20, 0x00, 0xb0, 0x07, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb4, 0x80, 0x23, 0x00, 0x88, 0x01, 0x0a, 0x0a, + 0x06, 0x12, 0x0e, 0x12, 0x06, 0x09, 0x0e, 0x09, + 0x2a, 0xdf, 0xd0, 0x1a, 0xdc, 0x07, 0x2a, 0xc4, + 0xd0, 0x19, 0x2a, 0xd6, 0xd0, 0x1b, 0x2a, 0xdc, + 0xd1, 0x08, 0x22, 0x1e, 0xe0, 0x06, 0x2a, 0xe4, + 0xd0, 0x13, 0x2a, 0xf6, 0xd0, 0x15, 0x2a, 0xfc, + 0xd1, 0x00, 0x22, 0x1f, 0x29, 0xdf, 0xd0, 0x26, + 0xdc, 0x11, 0x29, 0xc4, 0xd0, 0x25, 0x29, 0xd6, + 0xd0, 0x27, 0x29, 0xdc, 0xd1, 0x12, 0x21, 0x1e, + 0xe0, 0x10, 0x22, 0x19, 0xe7, 0xf2, 0x22, 0x1a, + 0xe7, 0xf0, 0x22, 0x1b, 0xe7, 0xee, 0x22, 0x1c, + 0xe7, 0xec, 0x22, 0x1d, 0xe7, 0xea, 0x29, 0xe4, + 0xd0, 0x15, 0x29, 0xf6, 0xd0, 0x17, 0x29, 0xfc, + 0xd1, 0x00, 0x21, 0x1f, 0x02, 0x17, 0x18, 0x7f, + 0x80, 0x07, 0x30, 0x02, 0x2a, 0x00, 0xd0, 0x04, + 0x29, 0x00, 0xd0, 0x02, 0x33, 0x01, 0x2b, 0x70, + 0xdb, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x21, 0x19, + 0xe7, 0xf0, 0x21, 0x1a, 0xe7, 0xee, 0x21, 0x1b, + 0xe7, 0xec, 0x21, 0x1c, 0xe7, 0xea, 0x21, 0x1d, + 0xe7, 0xe8, 0xb5, 0xf0, 0x1c, 0x0f, 0x1c, 0x11, + 0x04, 0x02, 0x0c, 0x12, 0x04, 0x0c, 0x0c, 0x24, + 0x04, 0x1d, 0x0c, 0x2d, 0x00, 0x96, 0xb0, 0x81, + 0x48, 0x10, 0x90, 0x00, 0x59, 0x81, 0x20, 0xff, + 0x29, 0x00, 0xd0, 0x16, 0x2a, 0x00, 0xd0, 0x14, + 0x2a, 0x0f, 0xdc, 0x12, 0x23, 0x32, 0x5e, 0xca, + 0x42, 0xa2, 0xdb, 0x0e, 0x23, 0x34, 0x5e, 0xc9, + 0x42, 0xa9, 0xdb, 0x0a, 0x1c, 0x38, 0xf7, 0xff, + 0xff, 0x93, 0x98, 0x00, 0x59, 0x80, 0x1c, 0x39, + 0x1c, 0x22, 0x1c, 0x2b, 0xf7, 0xff, 0xfb, 0x5c, + 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb4, 0xb0, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x09, + 0x0c, 0x09, 0x04, 0x14, 0x14, 0x24, 0x04, 0x1a, + 0x14, 0x12, 0x20, 0xff, 0x2f, 0x0f, 0xdc, 0x1d, + 0x00, 0xbd, 0x4f, 0x0f, 0x59, 0x7b, 0x2b, 0x00, + 0xd0, 0x18, 0x48, 0x0e, 0x29, 0x01, 0xd0, 0x05, + 0x29, 0x02, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0x03, + 0x6c, 0x80, 0xe0, 0x02, 0x6c, 0x40, 0xe0, 0x00, + 0x6c, 0xc0, 0x62, 0x58, 0x59, 0x78, 0x63, 0xc4, + 0x20, 0x00, 0x43, 0xc0, 0x42, 0x82, 0xd1, 0x02, + 0x59, 0x79, 0x63, 0x88, 0xe0, 0x01, 0x59, 0x78, + 0x63, 0x82, 0x20, 0x00, 0xbc, 0xb0, 0x47, 0x70, + 0x2e, 0x08, 0x55, 0x18, 0x2e, 0x08, 0x1c, 0x88, + 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, + 0x0c, 0x09, 0x00, 0x80, 0x4a, 0x07, 0x58, 0x10, + 0x28, 0x00, 0xd1, 0x02, 0x20, 0xff, 0xbc, 0x08, + 0x47, 0x18, 0x07, 0x89, 0x0f, 0x89, 0x68, 0x80, + 0xf0, 0x03, 0xfe, 0x96, 0x20, 0x00, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x55, 0x18, + 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x12, + 0x0c, 0x12, 0x1c, 0x1f, 0x28, 0x07, 0xdc, 0x1f, + 0x28, 0x01, 0xdb, 0x1d, 0x00, 0x80, 0x4b, 0x10, + 0x58, 0x1b, 0x2b, 0x00, 0xd0, 0x18, 0x29, 0x02, + 0xd0, 0x0e, 0x29, 0x04, 0xd0, 0x0c, 0x29, 0x10, + 0xd0, 0x0a, 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, + 0xd1, 0x0e, 0x06, 0x12, 0x0e, 0x12, 0x1c, 0x39, + 0x48, 0x08, 0x6c, 0x00, 0x68, 0x00, 0xe0, 0x05, + 0x07, 0x12, 0x0f, 0x12, 0x49, 0x06, 0x58, 0x08, + 0x68, 0x00, 0x1c, 0x39, 0xf0, 0x0b, 0xfb, 0x1c, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x55, 0x18, 0x2e, 0x08, 0x1c, 0x88, + 0x2e, 0x08, 0x55, 0x58, 0xb5, 0xf0, 0x04, 0x07, + 0x0c, 0x3f, 0x04, 0x10, 0x0c, 0x00, 0x22, 0x00, + 0xb0, 0x85, 0x92, 0x00, 0x2f, 0x07, 0xdc, 0x74, + 0x2f, 0x01, 0xdb, 0x73, 0x00, 0xbe, 0x4a, 0x3e, + 0x59, 0x92, 0x2a, 0x00, 0xd0, 0x6f, 0x04, 0x1a, + 0x0c, 0x12, 0x07, 0xd5, 0x0f, 0xed, 0x24, 0x02, + 0x40, 0x14, 0x27, 0x04, 0x40, 0x17, 0x23, 0x08, + 0x40, 0x1a, 0x92, 0x04, 0x29, 0x02, 0xd0, 0x34, + 0x29, 0x04, 0xd0, 0x32, 0x29, 0x10, 0xd0, 0x30, + 0x01, 0x5b, 0x42, 0x99, 0xd1, 0x60, 0x06, 0x02, + 0x0e, 0x12, 0x46, 0x69, 0x1c, 0x16, 0x48, 0x31, + 0x90, 0x01, 0x6c, 0x00, 0x68, 0x00, 0xf0, 0x0b, + 0xfb, 0x13, 0x98, 0x00, 0x4b, 0x2e, 0x40, 0x18, + 0x90, 0x00, 0x2d, 0x00, 0xd0, 0x02, 0x23, 0x02, + 0x43, 0x18, 0x90, 0x00, 0x2c, 0x00, 0xd0, 0x04, + 0x23, 0x01, 0x04, 0x5b, 0x98, 0x00, 0x43, 0x18, + 0x90, 0x00, 0x2f, 0x00, 0xd0, 0x03, 0x23, 0x01, + 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x9a, 0x04, + 0x2a, 0x00, 0xd0, 0x04, 0x23, 0x01, 0x04, 0x1b, + 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x98, 0x01, + 0x99, 0x00, 0x6c, 0x00, 0x68, 0x00, 0x1c, 0x32, + 0xe0, 0x30, 0x07, 0x02, 0x0f, 0x12, 0x92, 0x03, + 0x48, 0x1c, 0x90, 0x02, 0x59, 0x80, 0x68, 0x00, + 0x46, 0x69, 0xf0, 0x0b, 0xfa, 0xe5, 0x98, 0x00, + 0x4b, 0x17, 0x40, 0x18, 0x90, 0x00, 0x2d, 0x00, + 0xd0, 0x02, 0x23, 0x02, 0x43, 0x18, 0x90, 0x00, + 0x2c, 0x00, 0xd0, 0x04, 0x23, 0x01, 0x04, 0x5b, + 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x2f, 0x00, + 0xd0, 0x03, 0x23, 0x01, 0x98, 0x00, 0x43, 0x18, + 0x90, 0x00, 0x9a, 0x04, 0x2a, 0x00, 0xd0, 0x04, + 0x23, 0x01, 0x04, 0x1b, 0x98, 0x00, 0x43, 0x18, + 0x90, 0x00, 0x98, 0x02, 0x9a, 0x03, 0x59, 0x80, + 0xe0, 0x02, 0xe0, 0x05, 0xe0, 0x04, 0xe0, 0x03, + 0x68, 0x00, 0x99, 0x00, 0xf0, 0x0b, 0xfa, 0x8c, + 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0x2e, 0x08, 0x1c, 0x88, + 0xff, 0xfc, 0xff, 0xfc, 0x2e, 0x08, 0x55, 0x58, + 0xb5, 0xf0, 0x4f, 0x28, 0x25, 0x00, 0x24, 0xff, + 0x69, 0x38, 0x28, 0x00, 0xd1, 0x01, 0x60, 0xbd, + 0xe0, 0x0c, 0x26, 0x05, 0x68, 0xb9, 0x29, 0x07, + 0xd2, 0xf9, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x08, 0x10, 0x1a, + 0x21, 0x30, 0x38, 0x00, 0x1c, 0x20, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, 0x02, 0x80, + 0xf7, 0xf6, 0xfd, 0xd4, 0x28, 0x00, 0xdb, 0x2d, + 0x20, 0x02, 0xe0, 0x25, 0x48, 0x18, 0xf7, 0xf6, + 0xfd, 0xef, 0x28, 0x00, 0xdb, 0x26, 0x89, 0xb8, + 0x28, 0x00, 0xdd, 0x15, 0x20, 0x03, 0xe0, 0x1b, + 0x89, 0xb8, 0xf7, 0xf6, 0xfd, 0xc3, 0x28, 0x00, + 0xdb, 0x1c, 0x20, 0x04, 0xe0, 0x14, 0xf7, 0xf6, + 0xfd, 0xdf, 0x28, 0x00, 0xdb, 0x16, 0x69, 0x39, + 0x18, 0x09, 0x61, 0x39, 0x89, 0xb9, 0x1a, 0x08, + 0x81, 0xb8, 0x89, 0xb8, 0x28, 0x00, 0xdc, 0xe9, + 0x60, 0xbe, 0xe0, 0x0b, 0x20, 0x00, 0xf7, 0xf6, + 0xfd, 0xad, 0x28, 0x00, 0xd1, 0x06, 0x20, 0x06, + 0x60, 0xb8, 0xe0, 0x03, 0xf7, 0xf6, 0xfd, 0xc8, + 0x28, 0x00, 0xda, 0xb8, 0x1c, 0x28, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1d, 0x08, + 0x2e, 0x08, 0x55, 0xb8, 0xb5, 0xf0, 0x04, 0x04, + 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x04, 0x16, + 0x0c, 0x36, 0xb0, 0x85, 0xa8, 0x01, 0x49, 0x2e, + 0xc9, 0x8e, 0xc0, 0x8e, 0x2c, 0x00, 0xd0, 0x07, + 0x2c, 0x01, 0xd0, 0x07, 0x2c, 0x02, 0xd0, 0x07, + 0x2c, 0x03, 0xd1, 0x3f, 0x21, 0x08, 0xe0, 0x04, + 0x21, 0x01, 0xe0, 0x02, 0x21, 0x02, 0xe0, 0x00, + 0x21, 0x04, 0x91, 0x00, 0x23, 0x2d, 0x01, 0x1b, + 0x42, 0x9d, 0xdc, 0x33, 0x23, 0x09, 0x01, 0x9b, + 0x42, 0x9e, 0xdc, 0x2f, 0x1e, 0x68, 0x90, 0x03, + 0x1e, 0x70, 0x90, 0x04, 0xa8, 0x01, 0x1c, 0x21, + 0xf0, 0x07, 0xfb, 0xb8, 0x4f, 0x1d, 0x60, 0x78, + 0x00, 0x80, 0x23, 0x01, 0x04, 0x1b, 0x42, 0x98, + 0xdc, 0x20, 0x1f, 0xf8, 0x38, 0x79, 0x67, 0xc4, + 0x68, 0x38, 0x28, 0x00, 0xd0, 0x0a, 0x68, 0x80, + 0xb0, 0x81, 0x46, 0x6b, 0x22, 0x00, 0x21, 0x00, + 0xf0, 0x09, 0xfd, 0x42, 0x68, 0x38, 0xf7, 0xfe, + 0xfe, 0x7c, 0xb0, 0x01, 0x22, 0x00, 0x21, 0x0a, + 0x20, 0x01, 0xb4, 0x07, 0x1c, 0x22, 0xb4, 0x04, + 0x21, 0x00, 0x20, 0x00, 0x1c, 0x2a, 0x1c, 0x33, + 0xf7, 0xfe, 0xfd, 0x56, 0xb0, 0x04, 0x60, 0x38, + 0x1c, 0x01, 0xd1, 0x03, 0xb0, 0x05, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x69, 0x88, 0x99, 0x00, + 0x43, 0x4d, 0x1d, 0xe9, 0xd5, 0x00, 0x31, 0x07, + 0x10, 0xc9, 0x43, 0x71, 0x61, 0x38, 0x60, 0x79, + 0x81, 0xb9, 0x20, 0x01, 0x60, 0xb8, 0xe7, 0xed, + 0x2e, 0x03, 0x31, 0xf0, 0x2e, 0x08, 0x1d, 0x08, + 0xb5, 0xf0, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, + 0x0c, 0x09, 0xb0, 0x87, 0x91, 0x00, 0x04, 0x11, + 0x0c, 0x09, 0x91, 0x01, 0x04, 0x19, 0x0c, 0x09, + 0x91, 0x02, 0xb0, 0x85, 0x28, 0x07, 0xdc, 0x43, + 0x28, 0x01, 0xdb, 0x41, 0x00, 0x85, 0x48, 0x3e, + 0x90, 0x0b, 0x59, 0x41, 0x29, 0x00, 0xd0, 0x3b, + 0x48, 0x3c, 0x90, 0x0a, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x36, 0x23, 0x2c, 0x5e, 0xca, 0x2a, 0x0b, + 0xd2, 0x32, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, + 0x22, 0x00, 0x92, 0x00, 0x92, 0x01, 0x23, 0x32, + 0x5e, 0xc3, 0x93, 0x02, 0x23, 0x34, 0x5e, 0xc0, + 0x90, 0x03, 0x92, 0x04, 0x98, 0x07, 0x08, 0x80, + 0xd3, 0x40, 0x23, 0x2c, 0x5e, 0xc8, 0x28, 0x00, + 0xd0, 0x08, 0x28, 0x01, 0xd0, 0x08, 0x28, 0x02, + 0xd0, 0x08, 0x28, 0x03, 0xd1, 0x10, 0x27, 0xff, + 0x37, 0x01, 0xe0, 0x04, 0x27, 0x02, 0xe0, 0x02, + 0x27, 0x04, 0xe0, 0x00, 0x27, 0x10, 0x4e, 0x24, + 0x23, 0xff, 0x33, 0x01, 0x42, 0x9f, 0xd1, 0x16, + 0x24, 0x00, 0x48, 0x22, 0x90, 0x09, 0xe0, 0x03, + 0xb0, 0x0c, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0xa0, 0x58, 0x31, 0x29, 0x00, 0xd0, 0x06, + 0x06, 0x22, 0x0e, 0x12, 0x98, 0x09, 0x6c, 0x00, + 0x68, 0x00, 0xf0, 0x0b, 0xf9, 0x5d, 0x34, 0x01, + 0x42, 0xbc, 0xdb, 0xf1, 0xe0, 0x12, 0x24, 0x00, + 0x2f, 0x00, 0xdd, 0x0f, 0x48, 0x16, 0x90, 0x08, + 0x00, 0xa0, 0x58, 0x31, 0x29, 0x00, 0xd0, 0x06, + 0x07, 0x22, 0x0f, 0x12, 0x98, 0x08, 0x59, 0x40, + 0x68, 0x00, 0xf0, 0x0b, 0xf9, 0x49, 0x34, 0x01, + 0x42, 0xbc, 0xdb, 0xf1, 0x98, 0x07, 0x08, 0x40, + 0xd3, 0x01, 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, + 0x99, 0x06, 0xb4, 0x06, 0x98, 0x0d, 0x59, 0x40, + 0x68, 0x81, 0x98, 0x0c, 0x68, 0x00, 0x68, 0x80, + 0x9b, 0x07, 0xaa, 0x02, 0xf0, 0x09, 0xff, 0x12, + 0xb0, 0x0e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0x2e, 0x08, 0x1d, 0x08, + 0x2e, 0x08, 0x55, 0xb8, 0x2e, 0x08, 0x1c, 0x88, + 0x2e, 0x08, 0x55, 0x58, 0xb5, 0x80, 0x4f, 0x0a, + 0x68, 0x38, 0x28, 0x00, 0xd0, 0x0c, 0x68, 0x80, + 0xb0, 0x81, 0x46, 0x6b, 0x22, 0x00, 0x21, 0x00, + 0xf0, 0x09, 0xfc, 0x72, 0x68, 0x38, 0xf7, 0xfe, + 0xfd, 0xac, 0x20, 0x00, 0x60, 0x38, 0xb0, 0x01, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x1d, 0x08, 0xb5, 0x00, 0x04, 0x01, + 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, + 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, + 0xd0, 0x04, 0x68, 0x88, 0x21, 0x01, 0xf0, 0x03, + 0xfb, 0x93, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0xb5, 0x00, 0x04, 0x01, + 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, + 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, + 0xd0, 0x04, 0x68, 0x88, 0x21, 0x00, 0xf0, 0x03, + 0xfb, 0x7f, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x55, 0x18, 0xb5, 0xf7, 0xb0, 0x86, + 0x9c, 0x07, 0x20, 0x00, 0x6e, 0x40, 0x90, 0x05, + 0x98, 0x05, 0x30, 0x0c, 0x90, 0x05, 0x48, 0x7f, + 0x90, 0x04, 0x98, 0x04, 0x30, 0x0c, 0x90, 0x04, + 0xf0, 0x11, 0xff, 0xce, 0x90, 0x01, 0xf0, 0x11, + 0xff, 0xb1, 0x90, 0x00, 0x20, 0x00, 0x43, 0xc0, + 0x49, 0x79, 0x60, 0x08, 0x20, 0x00, 0x43, 0xc0, + 0x49, 0x77, 0x60, 0x88, 0x20, 0x00, 0x43, 0xc0, + 0x49, 0x75, 0x61, 0x08, 0x98, 0x06, 0x28, 0x00, + 0xd0, 0x73, 0x20, 0x00, 0x6a, 0x40, 0x90, 0x03, + 0x68, 0x20, 0x30, 0x05, 0x99, 0x06, 0x1a, 0x08, + 0x90, 0x06, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x08, + 0x68, 0x60, 0x99, 0x03, 0x68, 0x09, 0x42, 0x88, + 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x06, 0x68, 0x60, 0x9a, 0x08, 0x42, 0x90, + 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0x28, 0x00, 0xd0, 0x73, 0x68, 0x27, 0x68, 0xe0, + 0x28, 0x00, 0xd0, 0x01, 0x98, 0x05, 0xe0, 0x00, + 0x98, 0x04, 0x1c, 0x06, 0x68, 0xe0, 0x28, 0x00, + 0xd0, 0x02, 0x20, 0x00, 0x6e, 0x40, 0xe0, 0x00, + 0x48, 0x5c, 0x90, 0x02, 0x1d, 0xe5, 0x35, 0x0d, + 0x68, 0xa0, 0x28, 0x08, 0xd2, 0x5f, 0xa3, 0x02, + 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x04, 0x16, 0x28, 0x3a, 0x49, 0x55, 0x65, 0x71, + 0x69, 0x20, 0x49, 0x55, 0x60, 0x08, 0xcd, 0x02, + 0x48, 0x53, 0x60, 0x41, 0xcd, 0x02, 0x98, 0x02, + 0x60, 0x01, 0x3f, 0x01, 0x1c, 0x38, 0x3f, 0x01, + 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, + 0xe7, 0xf8, 0xe0, 0x67, 0x69, 0x20, 0x49, 0x4c, + 0x60, 0x88, 0xcd, 0x02, 0x48, 0x4a, 0x60, 0xc1, + 0xcd, 0x02, 0x98, 0x02, 0x60, 0x41, 0x3f, 0x01, + 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, + 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x55, + 0x69, 0x20, 0x49, 0x43, 0x61, 0x08, 0xcd, 0x02, + 0x48, 0x41, 0x61, 0x41, 0xcd, 0x02, 0x98, 0x02, + 0x60, 0x81, 0x3f, 0x01, 0x1c, 0x38, 0x3f, 0x01, + 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, + 0xe7, 0xf8, 0xe0, 0x43, 0x69, 0x20, 0x00, 0x80, + 0xe0, 0x00, 0xe0, 0x4b, 0x21, 0x00, 0x6a, 0x89, + 0x50, 0x0e, 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, + 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, + 0xe0, 0x34, 0x69, 0x20, 0x00, 0x80, 0x49, 0x33, + 0x50, 0x0e, 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, + 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, + 0xe0, 0x28, 0x69, 0x20, 0x00, 0x80, 0x21, 0x00, + 0x6e, 0x09, 0xe0, 0x01, 0xe0, 0x28, 0xe0, 0x20, + 0x50, 0x0e, 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, + 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, + 0xe0, 0x18, 0x69, 0x20, 0x00, 0x80, 0x49, 0x26, + 0x50, 0x0e, 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, + 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, + 0xe0, 0x0c, 0x69, 0x20, 0x90, 0x03, 0x1c, 0x38, + 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x04, 0xcd, 0x02, + 0x98, 0x03, 0xc0, 0x02, 0x90, 0x03, 0xe7, 0xf6, + 0xe0, 0x00, 0xe7, 0xff, 0x68, 0xe0, 0x28, 0xff, + 0xd1, 0x01, 0x96, 0x05, 0xe0, 0x00, 0x96, 0x04, + 0x68, 0x20, 0x00, 0x80, 0x19, 0x00, 0x1d, 0xc4, + 0x34, 0x0d, 0xe7, 0x3b, 0x98, 0x01, 0x28, 0x00, + 0xd1, 0x01, 0xf0, 0x11, 0xff, 0x2d, 0x98, 0x00, + 0x28, 0x00, 0xd1, 0x01, 0xf0, 0x11, 0xff, 0x0c, + 0x20, 0x00, 0x6e, 0x80, 0x68, 0x00, 0x4b, 0x0f, + 0x42, 0x98, 0xd0, 0x06, 0x48, 0x0d, 0x21, 0x00, + 0x6e, 0x89, 0x60, 0x08, 0x20, 0x01, 0x49, 0x08, + 0x62, 0x08, 0x20, 0x00, 0x21, 0x00, 0x6e, 0x89, + 0x60, 0x08, 0x20, 0x00, 0xb0, 0x06, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x06, + 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x08, 0x59, 0xb8, + 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x3a, 0xfc, + 0x2e, 0x08, 0x1d, 0x1c, 0xda, 0xa5, 0xaa, 0x57, + 0xb5, 0x80, 0xb0, 0xa7, 0x46, 0x68, 0x4f, 0x08, + 0x23, 0x13, 0xcf, 0x06, 0xc0, 0x06, 0x3b, 0x01, + 0xd1, 0xfb, 0xcf, 0x04, 0xc0, 0x04, 0x46, 0x69, + 0x4a, 0x04, 0x20, 0x27, 0xf7, 0xff, 0xfe, 0xde, + 0xb0, 0x27, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x03, 0x32, 0x00, 0xf0, 0x24, 0x00, 0x09, + 0xb5, 0xff, 0xb0, 0x83, 0x99, 0x04, 0x04, 0x09, + 0x0c, 0x09, 0x91, 0x00, 0x9a, 0x05, 0x06, 0x16, + 0x0e, 0x36, 0x9b, 0x06, 0x06, 0x18, 0x0e, 0x00, + 0x90, 0x01, 0x98, 0x0c, 0x06, 0x00, 0x0e, 0x00, + 0x90, 0x02, 0xb0, 0x84, 0x25, 0x00, 0x98, 0x07, + 0x1d, 0xc2, 0x32, 0x21, 0x92, 0x00, 0x20, 0xff, + 0x30, 0x01, 0x68, 0x00, 0x49, 0x6b, 0x60, 0x08, + 0x98, 0x12, 0x28, 0x01, 0xd1, 0x73, 0x98, 0x07, + 0x28, 0x00, 0xd1, 0x05, 0x20, 0x63, 0xb0, 0x07, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x21, 0x00, 0x91, 0x01, 0x99, 0x01, 0x23, 0xff, + 0x33, 0xe1, 0x42, 0x99, 0xd3, 0x04, 0xe0, 0x0a, + 0x99, 0x01, 0x31, 0x01, 0x91, 0x01, 0xe7, 0xf5, + 0x20, 0x00, 0x99, 0x01, 0x23, 0x2c, 0x43, 0x59, + 0x9a, 0x00, 0x50, 0x50, 0xe7, 0xf4, 0x98, 0x07, + 0x49, 0x5b, 0x68, 0x09, 0x60, 0x08, 0x98, 0x05, + 0x28, 0x10, 0xdb, 0x01, 0x20, 0x01, 0xe0, 0x00, + 0x20, 0x00, 0x99, 0x05, 0x29, 0x1f, 0xdc, 0x01, + 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, 0x40, 0x08, + 0xd0, 0x04, 0x98, 0x05, 0x49, 0x53, 0x68, 0x09, + 0x60, 0x08, 0xe0, 0x02, 0x20, 0x62, 0xb0, 0x07, + 0xe7, 0xce, 0x20, 0x00, 0x49, 0x4d, 0x68, 0x09, + 0x70, 0x08, 0x1c, 0x30, 0x23, 0x03, 0x02, 0x5b, + 0x22, 0x01, 0x02, 0xd2, 0x21, 0x01, 0xf0, 0x00, + 0xfb, 0x01, 0x1c, 0x07, 0x2f, 0x00, 0xd0, 0x02, + 0x20, 0xa2, 0xb0, 0x07, 0xe7, 0xbc, 0x22, 0x00, + 0xb4, 0x04, 0x99, 0x05, 0x1c, 0x30, 0x23, 0x04, + 0x22, 0x00, 0xf0, 0x00, 0xf9, 0x2f, 0xb0, 0x01, + 0x1c, 0x07, 0x2f, 0x00, 0xd0, 0x02, 0x20, 0xa2, + 0xb0, 0x07, 0xe7, 0xad, 0x98, 0x06, 0x28, 0x00, + 0xdb, 0x04, 0x98, 0x06, 0x28, 0x3f, 0xdc, 0x01, + 0x9d, 0x06, 0xe0, 0x00, 0x25, 0x1b, 0x98, 0x11, + 0x01, 0x80, 0x43, 0x05, 0x23, 0x80, 0x43, 0x1d, + 0x48, 0x39, 0x68, 0x01, 0x0a, 0x09, 0x02, 0x09, + 0x60, 0x01, 0x48, 0x37, 0x68, 0x01, 0x43, 0x29, + 0x60, 0x01, 0xf0, 0x11, 0xfe, 0x0b, 0x90, 0x03, + 0xf0, 0x11, 0xfe, 0x22, 0xe0, 0x00, 0xe0, 0x13, + 0x90, 0x02, 0xf0, 0x11, 0xfe, 0x81, 0x1c, 0x04, + 0x4b, 0x30, 0x40, 0x1c, 0x1c, 0x20, 0xf0, 0x11, + 0xfe, 0x7f, 0x98, 0x02, 0x28, 0x40, 0xd0, 0x01, + 0xf0, 0x11, 0xfe, 0x4a, 0x98, 0x03, 0x28, 0x80, + 0xd0, 0x01, 0xf0, 0x11, 0xfe, 0x29, 0xe0, 0x43, + 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x30, 0x23, 0x04, + 0x22, 0x00, 0x49, 0x27, 0xf0, 0x00, 0xf8, 0xee, + 0xb0, 0x01, 0x1c, 0x07, 0x2f, 0x00, 0xd0, 0x02, + 0x20, 0xa2, 0xb0, 0x07, 0xe7, 0x6c, 0x1c, 0x30, + 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, + 0x21, 0x02, 0xf0, 0x00, 0xfa, 0xa3, 0x1c, 0x07, + 0x2f, 0x00, 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, + 0xe7, 0x5e, 0x48, 0x19, 0x68, 0x01, 0x0a, 0x09, + 0x02, 0x09, 0x60, 0x01, 0x48, 0x16, 0x68, 0x01, + 0x23, 0x1b, 0x43, 0x19, 0x60, 0x01, 0x48, 0x12, + 0x68, 0x00, 0x68, 0x00, 0x90, 0x07, 0xf0, 0x11, + 0xfd, 0xc5, 0x90, 0x03, 0xf0, 0x11, 0xfd, 0xdc, + 0x90, 0x02, 0xf0, 0x11, 0xfe, 0x3d, 0x1c, 0x04, + 0x23, 0x01, 0x04, 0x5b, 0x43, 0x1c, 0x1c, 0x20, + 0xf0, 0x11, 0xfe, 0x3a, 0x98, 0x02, 0x28, 0x40, + 0xd0, 0x01, 0xf0, 0x11, 0xfe, 0x05, 0x98, 0x03, + 0x28, 0x80, 0xd0, 0x01, 0xf0, 0x11, 0xfd, 0xe4, + 0x1c, 0x38, 0xb0, 0x07, 0xe7, 0x34, 0xb0, 0x04, + 0xb0, 0x03, 0xe7, 0x31, 0x2e, 0x08, 0x5d, 0xc0, + 0x2e, 0x08, 0x5d, 0xb8, 0x2e, 0x08, 0x5d, 0xbc, + 0x68, 0x00, 0x00, 0x38, 0xff, 0xfd, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xb5, 0x00, 0xf7, 0xff, + 0xfe, 0xe7, 0xf0, 0x00, 0xf8, 0x02, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0xf0, 0xf0, 0x0b, 0xf9, 0x48, + 0x26, 0x00, 0x2e, 0x04, 0xd3, 0x02, 0xe0, 0x12, + 0x36, 0x01, 0xe7, 0xfa, 0x01, 0x30, 0x4b, 0x3c, + 0x18, 0xc7, 0x25, 0x00, 0x2d, 0x04, 0xd3, 0x02, + 0xe0, 0x08, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x00, + 0x60, 0xb8, 0x20, 0x00, 0x60, 0xf8, 0x37, 0xff, + 0x37, 0x01, 0xe7, 0xf6, 0xe7, 0xec, 0x4f, 0x35, + 0x25, 0x00, 0x2d, 0x04, 0xd3, 0x02, 0xe0, 0x07, + 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x00, 0x60, 0xb8, + 0x20, 0x00, 0x60, 0xf8, 0x37, 0x10, 0xe7, 0xf7, + 0x20, 0x00, 0x49, 0x2f, 0x68, 0x09, 0x70, 0x08, + 0x24, 0x00, 0x2c, 0x20, 0xd3, 0x02, 0xe0, 0x1f, + 0x34, 0x01, 0xe7, 0xfa, 0x21, 0x00, 0x00, 0xe0, + 0x4a, 0x2a, 0x68, 0x12, 0x50, 0x11, 0x20, 0x00, + 0x00, 0xe1, 0x4a, 0x28, 0x68, 0x12, 0x18, 0x89, + 0x60, 0x48, 0x21, 0x00, 0x00, 0xe0, 0x4a, 0x26, + 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, 0x20, 0x00, + 0x00, 0xa1, 0x4a, 0x24, 0x68, 0x12, 0x50, 0x50, + 0x20, 0x00, 0x00, 0xe1, 0x1b, 0x09, 0x00, 0x89, + 0x4a, 0x21, 0x68, 0x12, 0x52, 0x50, 0xe7, 0xdf, + 0x20, 0x00, 0x21, 0x19, 0x06, 0x89, 0x62, 0x48, + 0x48, 0x1e, 0x21, 0x19, 0x06, 0x89, 0x62, 0x48, + 0x20, 0x00, 0x49, 0x1d, 0x68, 0x09, 0x60, 0x08, + 0x20, 0x00, 0x49, 0x1b, 0x68, 0x09, 0x60, 0x48, + 0x20, 0x00, 0x49, 0x19, 0x68, 0x09, 0x60, 0xc8, + 0x20, 0x00, 0x49, 0x17, 0x68, 0x09, 0x61, 0x08, + 0x20, 0x00, 0x49, 0x15, 0x68, 0x09, 0x61, 0x48, + 0x20, 0x00, 0x49, 0x13, 0x68, 0x09, 0x61, 0x88, + 0x20, 0x00, 0x49, 0x12, 0x68, 0x09, 0x60, 0x08, + 0x20, 0x00, 0x49, 0x10, 0x68, 0x09, 0x60, 0x48, + 0x20, 0x00, 0x49, 0x0e, 0x68, 0x09, 0x60, 0x88, + 0x48, 0x0d, 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, + 0x60, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x9e, 0x00, 0x00, 0xc0, 0x9e, 0x00, 0x09, 0x80, + 0x2e, 0x08, 0x5d, 0xc4, 0x2e, 0x08, 0x5d, 0xd8, + 0x2e, 0x08, 0x5d, 0xdc, 0x2e, 0x08, 0x5d, 0xd4, + 0x2e, 0x08, 0x5d, 0xcc, 0x00, 0x40, 0x00, 0x03, + 0x2e, 0x08, 0x5e, 0x14, 0x2e, 0x08, 0x5e, 0x18, + 0x6a, 0x00, 0x00, 0x10, 0xb5, 0xff, 0xb0, 0x83, + 0x98, 0x03, 0x06, 0x04, 0x0e, 0x24, 0x99, 0x04, + 0x04, 0x08, 0x0c, 0x00, 0x90, 0x00, 0x9a, 0x05, + 0x06, 0x10, 0x0e, 0x00, 0x90, 0x01, 0x9b, 0x06, + 0x06, 0x18, 0x0e, 0x00, 0x90, 0x02, 0xb0, 0x81, + 0x00, 0xe0, 0x49, 0xc1, 0x68, 0x09, 0x18, 0x47, + 0x00, 0xa0, 0x49, 0xc0, 0x68, 0x09, 0x18, 0x45, + 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, 0x49, 0xbe, + 0x68, 0x09, 0x18, 0x46, 0x2c, 0x20, 0xdb, 0x05, + 0x20, 0xa2, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x68, 0x28, 0x4b, 0xb9, + 0x40, 0x18, 0x60, 0x28, 0x68, 0x38, 0x4b, 0xb8, + 0x40, 0x18, 0x60, 0x38, 0x68, 0x38, 0x23, 0x40, + 0x40, 0x18, 0xd0, 0x17, 0x68, 0x38, 0x23, 0x40, + 0x43, 0xdb, 0x40, 0x18, 0x60, 0x38, 0x48, 0xb3, + 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, + 0x48, 0xb1, 0x68, 0x01, 0x23, 0x01, 0x05, 0x5b, + 0x43, 0x19, 0x60, 0x01, 0x98, 0x01, 0x4b, 0xaf, + 0x42, 0x98, 0xd1, 0x03, 0x20, 0x00, 0x49, 0xae, + 0x68, 0x09, 0x60, 0x08, 0x98, 0x01, 0x4b, 0xab, + 0x42, 0x98, 0xd0, 0x73, 0x68, 0x38, 0x23, 0x21, + 0x43, 0xdb, 0x40, 0x18, 0x60, 0x38, 0x68, 0x28, + 0x23, 0x07, 0x03, 0x5b, 0x40, 0x18, 0x60, 0x28, + 0x98, 0x01, 0x4b, 0xa6, 0x40, 0x18, 0x68, 0x29, + 0x43, 0x08, 0x60, 0x28, 0x20, 0x00, 0x75, 0x30, + 0x98, 0x02, 0x07, 0x80, 0x0f, 0x80, 0x28, 0x01, + 0xd1, 0x04, 0x88, 0x30, 0x23, 0x10, 0x43, 0x18, + 0x80, 0x30, 0xe0, 0x04, 0x88, 0x30, 0x23, 0x10, + 0x43, 0xdb, 0x40, 0x18, 0x80, 0x30, 0x98, 0x02, + 0x23, 0x80, 0x40, 0x18, 0x28, 0x80, 0xd1, 0x08, + 0x68, 0x38, 0x23, 0x40, 0x43, 0x18, 0x60, 0x38, + 0x20, 0xff, 0x49, 0x97, 0x68, 0x09, 0x70, 0x08, + 0xe0, 0x04, 0x68, 0x38, 0x23, 0x40, 0x43, 0xdb, + 0x40, 0x18, 0x60, 0x38, 0x98, 0x03, 0x28, 0x01, + 0xd1, 0x36, 0x88, 0x30, 0x23, 0x10, 0x43, 0xdb, + 0x40, 0x18, 0x80, 0x30, 0x20, 0x33, 0x06, 0x40, + 0x6d, 0x40, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc1, + 0x00, 0xe0, 0x4a, 0x8c, 0x68, 0x12, 0x18, 0x80, + 0x60, 0x41, 0x20, 0x01, 0x70, 0xb0, 0x68, 0x38, + 0x23, 0x01, 0x03, 0x9b, 0x43, 0x18, 0x60, 0x38, + 0x68, 0x38, 0x4b, 0x87, 0x43, 0x18, 0x60, 0x38, + 0x48, 0x86, 0x70, 0x44, 0x20, 0x00, 0x49, 0x86, + 0x68, 0x09, 0x60, 0x08, 0x20, 0x01, 0x02, 0xc0, + 0x49, 0x84, 0x61, 0x48, 0x49, 0x83, 0x61, 0x08, + 0x20, 0x01, 0x49, 0x83, 0x64, 0x48, 0x20, 0x00, + 0x49, 0x81, 0x64, 0x48, 0x68, 0x28, 0x23, 0x01, + 0x03, 0x5b, 0x43, 0x18, 0x60, 0x28, 0x20, 0x00, + 0x49, 0x7e, 0x68, 0x09, 0x60, 0x08, 0xe0, 0x9a, + 0x98, 0x03, 0x28, 0x02, 0xd1, 0x30, 0x20, 0x33, + 0x06, 0x40, 0xe0, 0x00, 0xe0, 0x94, 0x6d, 0xc0, + 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x00, 0xe1, + 0x4a, 0x70, 0x68, 0x12, 0x18, 0x89, 0x60, 0x48, + 0x20, 0x02, 0x70, 0xb0, 0x68, 0x38, 0x23, 0x01, + 0x03, 0xdb, 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, + 0x4b, 0x6b, 0x43, 0x18, 0x60, 0x38, 0x48, 0x6b, + 0x70, 0x84, 0x20, 0x00, 0x49, 0x6e, 0x60, 0x08, + 0x00, 0xe0, 0x49, 0x5b, 0x68, 0x09, 0x58, 0x08, + 0x23, 0xff, 0x33, 0x01, 0x43, 0x18, 0x00, 0xe1, + 0x4a, 0x57, 0x68, 0x12, 0x50, 0x50, 0x20, 0x4b, + 0x49, 0x67, 0x60, 0x08, 0x68, 0x28, 0x23, 0x01, + 0x03, 0x5b, 0x43, 0x18, 0x60, 0x28, 0xe0, 0x66, + 0x98, 0x03, 0x28, 0x04, 0xd1, 0x15, 0x20, 0x00, + 0x00, 0xe1, 0x4a, 0x5a, 0x68, 0x12, 0x18, 0x89, + 0x60, 0x48, 0x98, 0x03, 0x70, 0xb0, 0x68, 0x38, + 0x23, 0x20, 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, + 0x60, 0x38, 0x48, 0x56, 0x70, 0x04, 0x68, 0x28, + 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, 0x60, 0x28, + 0xe0, 0x4d, 0x98, 0x03, 0x23, 0x10, 0x40, 0x18, + 0xd0, 0x0f, 0x21, 0x00, 0x00, 0xe0, 0x4a, 0x4d, + 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, 0x68, 0x38, + 0x4b, 0x52, 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, + 0x60, 0x38, 0x37, 0x04, 0x20, 0x0e, 0x60, 0x38, + 0xe0, 0x39, 0x98, 0x03, 0x28, 0x08, 0xd1, 0x23, + 0x48, 0x4d, 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, + 0x28, 0x00, 0xd0, 0x03, 0x20, 0x4f, 0xb0, 0x04, + 0xe6, 0xf8, 0xe0, 0x67, 0x20, 0x01, 0x49, 0x48, + 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x48, 0x46, + 0x68, 0x00, 0x30, 0x60, 0x76, 0x04, 0x20, 0x01, + 0x49, 0x43, 0x68, 0x09, 0x31, 0x80, 0x70, 0xc8, + 0x49, 0x42, 0x00, 0xe0, 0x4a, 0x37, 0x68, 0x12, + 0x18, 0x80, 0x60, 0x41, 0x68, 0x28, 0x23, 0x01, + 0x03, 0x5b, 0x43, 0x18, 0x60, 0x28, 0xe0, 0x12, + 0x21, 0x00, 0x00, 0xe0, 0x4a, 0x31, 0x68, 0x12, + 0x18, 0x80, 0x60, 0x41, 0x98, 0x03, 0x70, 0xb0, + 0x68, 0x38, 0x23, 0x20, 0x43, 0x18, 0x60, 0x38, + 0x68, 0x38, 0x60, 0x38, 0x68, 0x28, 0x23, 0x01, + 0x03, 0x5b, 0x43, 0x18, 0x60, 0x28, 0xe0, 0x33, + 0x98, 0x03, 0x23, 0x10, 0x40, 0x18, 0xd0, 0x09, + 0x1c, 0x20, 0xf0, 0x05, 0xf8, 0x0f, 0x90, 0x00, + 0x28, 0x00, 0xd0, 0x02, 0x98, 0x00, 0xb0, 0x04, + 0xe6, 0xbc, 0xe0, 0x1a, 0x98, 0x03, 0x28, 0x01, + 0xd1, 0x03, 0x20, 0xff, 0x49, 0x21, 0x70, 0x48, + 0xe0, 0x13, 0x98, 0x03, 0x28, 0x02, 0xd1, 0x03, + 0x20, 0xff, 0x49, 0x1e, 0x70, 0x88, 0xe0, 0x0c, + 0x98, 0x03, 0x28, 0x08, 0xd1, 0x09, 0x20, 0x00, + 0x49, 0x21, 0x68, 0x09, 0x31, 0x80, 0x70, 0xc8, + 0x20, 0x00, 0x49, 0x1f, 0x68, 0x09, 0x31, 0x60, + 0x76, 0x88, 0x7d, 0x30, 0x07, 0xc0, 0x0f, 0xc0, + 0x28, 0x01, 0xd1, 0x03, 0x1c, 0x20, 0x49, 0x1c, + 0xf0, 0x00, 0xf9, 0x16, 0x20, 0x00, 0x70, 0xb0, + 0x20, 0x00, 0xb0, 0x04, 0xe6, 0x92, 0xb0, 0x01, + 0xb0, 0x03, 0xe6, 0x8f, 0xe6, 0x8e, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xd8, 0x2e, 0x08, 0x5d, 0xd4, + 0x2e, 0x08, 0x5d, 0xcc, 0xff, 0xff, 0xdf, 0xff, + 0xff, 0xff, 0x3f, 0xff, 0x6a, 0x00, 0x00, 0x18, + 0x6c, 0x00, 0x00, 0x20, 0x00, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x5d, 0xe0, 0xff, 0xff, 0x1f, 0xff, + 0x2e, 0x08, 0x5e, 0x34, 0x2e, 0x08, 0x5d, 0xdc, + 0x00, 0x00, 0x20, 0x01, 0x2e, 0x08, 0x5e, 0x38, + 0x2e, 0x08, 0x5e, 0x04, 0xcc, 0x00, 0x0f, 0x00, + 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x5e, 0x48, + 0x2e, 0x08, 0x5e, 0x4c, 0x00, 0x00, 0x20, 0xa0, + 0x2e, 0x08, 0x7c, 0x4c, 0x66, 0x00, 0x01, 0xf0, + 0xff, 0xff, 0x00, 0x00, 0xb5, 0xff, 0x98, 0x00, + 0x06, 0x01, 0x0e, 0x09, 0x98, 0x01, 0x06, 0x02, + 0x0e, 0x12, 0x98, 0x02, 0x04, 0x07, 0x0c, 0x3f, + 0x9b, 0x03, 0x04, 0x1c, 0x0c, 0x24, 0x29, 0x20, + 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2a, 0x02, 0xd1, 0x0a, + 0x00, 0xc8, 0x4b, 0x1f, 0x68, 0x1b, 0x58, 0x18, + 0x4b, 0x1e, 0x40, 0x18, 0x00, 0xcb, 0x4d, 0x1c, + 0x68, 0x2d, 0x50, 0xe8, 0xe0, 0x30, 0x2a, 0x01, + 0xd1, 0x0b, 0x00, 0xc8, 0x4b, 0x18, 0x68, 0x1b, + 0x58, 0x18, 0x43, 0x27, 0x1c, 0x3b, 0x43, 0x18, + 0x00, 0xcb, 0x4d, 0x15, 0x68, 0x2d, 0x50, 0xe8, + 0xe0, 0x22, 0x20, 0x00, 0x28, 0x20, 0xdb, 0x04, + 0xe0, 0x1e, 0x1c, 0x43, 0x06, 0x1b, 0x16, 0x18, + 0xe7, 0xf8, 0x2a, 0x03, 0xd1, 0x0b, 0x00, 0xc3, + 0x4d, 0x0d, 0x68, 0x2d, 0x58, 0xeb, 0x1c, 0x3d, + 0x43, 0x25, 0x43, 0x1d, 0x00, 0xc3, 0x4e, 0x0a, + 0x68, 0x36, 0x50, 0xf5, 0xe0, 0x0b, 0x2a, 0x04, + 0xd1, 0x09, 0x00, 0xc3, 0x4d, 0x06, 0x68, 0x2d, + 0x58, 0xed, 0x4b, 0x06, 0x40, 0x2b, 0x00, 0xc5, + 0x4e, 0x03, 0x68, 0x36, 0x51, 0x73, 0xe7, 0xe0, + 0x20, 0x00, 0xe7, 0xbb, 0xe7, 0xba, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xd8, 0xff, 0xff, 0xe1, 0xff, + 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x38, + 0x0e, 0x00, 0x06, 0x11, 0x0e, 0x09, 0x4c, 0x14, + 0x68, 0x25, 0x4b, 0x14, 0x40, 0x2b, 0x60, 0x23, + 0x28, 0x01, 0xd1, 0x06, 0x4c, 0x10, 0x68, 0x25, + 0x23, 0x01, 0x04, 0x1b, 0x43, 0x2b, 0x60, 0x23, + 0xe0, 0x07, 0x28, 0x00, 0xd1, 0x05, 0x4c, 0x0c, + 0x68, 0x25, 0x23, 0x01, 0x05, 0x9b, 0x43, 0x2b, + 0x60, 0x23, 0x29, 0x01, 0xd1, 0x06, 0x4c, 0x08, + 0x68, 0x25, 0x23, 0x01, 0x03, 0x9b, 0x43, 0x2b, + 0x60, 0x23, 0xe0, 0x07, 0x29, 0x02, 0xd1, 0x05, + 0x4c, 0x03, 0x68, 0x25, 0x23, 0x01, 0x03, 0xdb, + 0x43, 0x2b, 0x60, 0x23, 0xbc, 0xb0, 0x47, 0x70, + 0x64, 0x00, 0x00, 0x24, 0xff, 0xbe, 0x3f, 0xff, + 0xb5, 0xff, 0x1c, 0x1f, 0x9c, 0x09, 0xb0, 0x82, + 0x98, 0x02, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, + 0x99, 0x03, 0x06, 0x0a, 0x0e, 0x12, 0x98, 0x04, + 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x0c, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x01, 0x00, 0xd0, 0x1a, 0x80, + 0x00, 0x80, 0x4b, 0x1b, 0x68, 0x1b, 0x18, 0xc1, + 0x2a, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x02, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2d, 0x1f, 0xdb, 0x02, 0x20, 0xaf, 0xb0, 0x02, + 0xe7, 0xf6, 0x71, 0x8d, 0x68, 0x3b, 0x00, 0xd0, + 0x4e, 0x12, 0x68, 0x36, 0x19, 0x80, 0x60, 0x43, + 0x1c, 0x20, 0x71, 0xc8, 0x20, 0x00, 0x80, 0x88, + 0x20, 0x00, 0x60, 0xc8, 0x98, 0x00, 0x23, 0x01, + 0x43, 0x18, 0x75, 0x08, 0x98, 0x01, 0x74, 0x88, + 0x60, 0x8f, 0x88, 0xb8, 0x82, 0x08, 0x20, 0x00, + 0x74, 0xc8, 0x88, 0xb8, 0x61, 0x38, 0x20, 0x00, + 0x73, 0x38, 0x20, 0x00, 0x73, 0x78, 0x20, 0x00, + 0x73, 0xb8, 0x20, 0x00, 0x73, 0xf8, 0x20, 0x00, + 0xb0, 0x02, 0xe7, 0xd1, 0xb0, 0x02, 0xe7, 0xcf, + 0x2e, 0x08, 0x5d, 0xcc, 0x2e, 0x08, 0x5d, 0xdc, + 0xb5, 0xf3, 0x98, 0x00, 0x06, 0x04, 0x0e, 0x24, + 0x99, 0x01, 0x04, 0x0d, 0x0c, 0x2d, 0x00, 0xe0, + 0x1b, 0x00, 0x00, 0x80, 0x49, 0x25, 0x68, 0x09, + 0x18, 0x47, 0x2c, 0x20, 0xdb, 0x04, 0x20, 0xa2, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x4b, 0x21, 0x42, 0x9d, 0xd1, 0x27, 0x00, 0xe1, + 0x4b, 0x20, 0x68, 0x1b, 0x18, 0xc8, 0x00, 0xa1, + 0x4b, 0x1f, 0x68, 0x1b, 0x18, 0xca, 0x68, 0x11, + 0x4b, 0x1e, 0x40, 0x19, 0x60, 0x11, 0x68, 0x01, + 0x23, 0x40, 0x40, 0x19, 0xd0, 0x13, 0x68, 0x01, + 0x23, 0x40, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, + 0x21, 0x00, 0x4b, 0x19, 0x68, 0x1b, 0x70, 0x19, + 0x49, 0x18, 0x68, 0x0b, 0x08, 0x5b, 0x00, 0x5b, + 0x60, 0x0b, 0x49, 0x17, 0x68, 0x0e, 0x23, 0x01, + 0x05, 0x5b, 0x43, 0x33, 0x60, 0x0b, 0x68, 0x01, + 0x4b, 0x14, 0x40, 0x19, 0x60, 0x01, 0x20, 0x00, + 0x75, 0x38, 0x20, 0x00, 0x80, 0x38, 0x20, 0x00, + 0x80, 0xb8, 0x68, 0xb8, 0x72, 0x44, 0x20, 0xa0, + 0x68, 0xb9, 0x72, 0x08, 0x20, 0x00, 0x60, 0xb8, + 0x79, 0xb9, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x11, + 0xf9, 0xc3, 0x20, 0x00, 0x71, 0xb8, 0x20, 0x00, + 0xe7, 0xba, 0xe7, 0xb9, 0x2e, 0x08, 0x5d, 0xcc, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x5d, 0xd8, + 0x2e, 0x08, 0x5d, 0xd4, 0xff, 0xff, 0xdf, 0xff, + 0x2e, 0x08, 0x5d, 0xc8, 0x6a, 0x00, 0x00, 0x18, + 0x6c, 0x00, 0x00, 0x20, 0xff, 0xff, 0x3f, 0xde, + 0xb5, 0xff, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, + 0x06, 0x28, 0x0e, 0x00, 0x06, 0x23, 0x0e, 0x1b, + 0x06, 0x39, 0x0e, 0x09, 0x9e, 0x03, 0x06, 0x36, + 0x16, 0x32, 0x28, 0x20, 0xda, 0x02, 0x4e, 0x08, + 0x68, 0x36, 0x60, 0x30, 0x4e, 0x07, 0x68, 0x36, + 0x60, 0x33, 0x4e, 0x07, 0x68, 0x36, 0x60, 0x31, + 0x4e, 0x06, 0x68, 0x36, 0x60, 0x32, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xf4, 0x2e, 0x08, 0x5d, 0xf8, + 0x2e, 0x08, 0x5d, 0xfc, 0x2e, 0x08, 0x5e, 0x00, + 0x1c, 0x01, 0x06, 0x08, 0x0e, 0x00, 0x28, 0x01, + 0xd1, 0x04, 0x22, 0x01, 0x4b, 0x04, 0x68, 0x1b, + 0x60, 0x1a, 0xe0, 0x03, 0x22, 0x02, 0x4b, 0x02, + 0x68, 0x1b, 0x60, 0x1a, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x3c, 0xb5, 0xf1, 0x98, 0x00, + 0x06, 0x04, 0x0e, 0x24, 0xb0, 0x81, 0x27, 0x00, + 0x26, 0x00, 0x4a, 0x55, 0x92, 0x00, 0x00, 0xe0, + 0x49, 0x54, 0x68, 0x09, 0x58, 0x08, 0x23, 0x03, + 0x03, 0x9b, 0x40, 0x18, 0x23, 0x01, 0x03, 0x9b, + 0x42, 0x98, 0xd0, 0x05, 0x20, 0xa0, 0xb0, 0x01, + 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0xe0, 0x49, 0x4c, 0x68, 0x09, 0x58, 0x08, + 0x21, 0x20, 0x43, 0x01, 0x00, 0xe0, 0x4a, 0x49, + 0x68, 0x12, 0x50, 0x11, 0x21, 0x00, 0x48, 0x48, + 0xf0, 0x05, 0xfc, 0x3c, 0x48, 0x47, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x01, 0xe0, 0x08, 0xe0, 0x82, + 0x20, 0x02, 0xf0, 0x0c, 0xf8, 0x75, 0x1c, 0x38, + 0x37, 0x01, 0x4b, 0x43, 0x42, 0x98, 0xd3, 0xf1, + 0x4b, 0x41, 0x42, 0x9f, 0xd3, 0x00, 0x26, 0xa1, + 0x48, 0x40, 0x68, 0x01, 0x4b, 0x40, 0x40, 0x19, + 0x60, 0x01, 0x20, 0x00, 0x00, 0xe1, 0x1b, 0x09, + 0x00, 0x89, 0x4a, 0x3e, 0x68, 0x12, 0x18, 0x89, + 0x70, 0x88, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x3c, + 0x67, 0x48, 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x20, + 0x23, 0x00, 0x22, 0x00, 0x49, 0x39, 0xf7, 0xff, + 0xfc, 0x69, 0xb0, 0x01, 0x27, 0x00, 0x25, 0x00, + 0x2d, 0x04, 0xdb, 0x02, 0xe0, 0x1e, 0x35, 0x01, + 0xe7, 0xfa, 0x00, 0xa9, 0x22, 0x0f, 0x1c, 0x10, + 0x40, 0x88, 0x01, 0x29, 0x9a, 0x00, 0x18, 0x89, + 0x68, 0x49, 0x42, 0xa1, 0xd1, 0x11, 0x21, 0x33, + 0x06, 0x49, 0x6b, 0xc9, 0x40, 0x01, 0xd0, 0x01, + 0x37, 0x01, 0xe0, 0x00, 0xe0, 0x02, 0x4b, 0x26, + 0x42, 0x9f, 0xd3, 0xf4, 0x4b, 0x24, 0x42, 0x9f, + 0xd3, 0x02, 0x26, 0xa1, 0xe0, 0x02, 0xe0, 0x3a, + 0x27, 0x00, 0xe7, 0xe0, 0x48, 0x26, 0x68, 0x01, + 0x23, 0xff, 0x33, 0x01, 0x43, 0x19, 0x60, 0x01, + 0x48, 0x21, 0x6d, 0x80, 0x49, 0x20, 0x65, 0x88, + 0x48, 0x1f, 0x6b, 0xc0, 0x23, 0x01, 0x07, 0x9b, + 0x40, 0x18, 0xd0, 0x00, 0xe7, 0xf8, 0x20, 0x33, + 0x06, 0x40, 0x6d, 0x40, 0x21, 0x33, 0x06, 0x49, + 0x66, 0x48, 0x20, 0x33, 0x06, 0x40, 0x6d, 0x80, + 0x21, 0x33, 0x06, 0x49, 0x66, 0x88, 0x20, 0x03, + 0x02, 0x00, 0x49, 0x15, 0x67, 0x48, 0x48, 0x11, + 0x68, 0x01, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x19, + 0x60, 0x01, 0x20, 0x00, 0x49, 0x13, 0x65, 0x88, + 0x20, 0x00, 0x49, 0x12, 0x65, 0xc8, 0x20, 0x00, + 0x49, 0x10, 0x66, 0x08, 0x21, 0x00, 0x20, 0xff, + 0xf0, 0x05, 0xfb, 0xb8, 0x1c, 0x30, 0xb0, 0x01, + 0xe7, 0x66, 0xb0, 0x01, 0xe7, 0x64, 0xe7, 0x63, + 0x9e, 0x00, 0x00, 0xc0, 0x2e, 0x08, 0x5d, 0xd8, + 0x00, 0x00, 0x80, 0x0f, 0xcc, 0x00, 0x05, 0x00, + 0x00, 0x1e, 0x84, 0x80, 0x66, 0x00, 0x00, 0x4c, + 0xff, 0xff, 0xfd, 0xff, 0x2e, 0x08, 0x5d, 0xcc, + 0x66, 0x00, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, + 0x66, 0x00, 0x00, 0xe0, 0xcc, 0x00, 0x00, 0x00, + 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x07, 0x0e, 0x3f, + 0xb0, 0x81, 0x25, 0x00, 0x26, 0x00, 0x4a, 0x2e, + 0x92, 0x00, 0x00, 0xf8, 0x49, 0x2d, 0x68, 0x09, + 0x58, 0x08, 0x23, 0x03, 0x03, 0x9b, 0x40, 0x18, + 0x23, 0x01, 0x03, 0xdb, 0x42, 0x98, 0xd0, 0x05, + 0x20, 0xa0, 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x22, 0x00, 0xb4, 0x04, + 0x1c, 0x38, 0x23, 0x00, 0x22, 0x00, 0x49, 0x24, + 0xf7, 0xff, 0xfb, 0xd0, 0xb0, 0x01, 0x24, 0x00, + 0x2c, 0x04, 0xdb, 0x02, 0xe0, 0x1e, 0x34, 0x01, + 0xe7, 0xfa, 0x00, 0xa1, 0x22, 0x0f, 0x1c, 0x10, + 0x40, 0x88, 0x01, 0x21, 0x9a, 0x00, 0x18, 0x89, + 0x68, 0x49, 0x42, 0xb9, 0xd1, 0x11, 0x21, 0x33, + 0x06, 0x49, 0x6b, 0xc9, 0x40, 0x01, 0xd0, 0x01, + 0x35, 0x01, 0xe0, 0x00, 0xe0, 0x02, 0x4b, 0x17, + 0x42, 0x9d, 0xd3, 0xf4, 0x4b, 0x15, 0x42, 0x9d, + 0xd9, 0x02, 0x26, 0xa1, 0xe0, 0x02, 0xe0, 0x1d, + 0x25, 0x00, 0xe7, 0xe0, 0x20, 0x04, 0xf0, 0x02, + 0xff, 0xb7, 0x20, 0x01, 0x21, 0x33, 0x06, 0x49, + 0x66, 0xc8, 0x21, 0x00, 0x00, 0xf8, 0x4a, 0x0b, + 0x68, 0x12, 0x50, 0x11, 0x21, 0x00, 0x00, 0xf8, + 0x4a, 0x08, 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, + 0x21, 0x00, 0x00, 0xb8, 0x4a, 0x08, 0x68, 0x12, + 0x50, 0x11, 0x1c, 0x30, 0xb0, 0x01, 0xe7, 0xb5, + 0xb0, 0x01, 0xe7, 0xb3, 0xe7, 0xb2, 0x00, 0x00, + 0x9e, 0x00, 0x00, 0xc0, 0x2e, 0x08, 0x5d, 0xd8, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0xd4, 0xc0, + 0x2e, 0x08, 0x5d, 0xd4, 0xb5, 0xff, 0x99, 0x01, + 0x06, 0x0f, 0x0e, 0x3f, 0x9a, 0x02, 0x06, 0x15, + 0x0e, 0x2d, 0x9b, 0x03, 0x06, 0x1e, 0x0e, 0x36, + 0x2d, 0x1f, 0xdb, 0x04, 0x20, 0xaf, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2f, 0x20, + 0xdb, 0x01, 0x20, 0xa2, 0xe7, 0xf7, 0x2e, 0x80, + 0xd0, 0x13, 0xf0, 0x11, 0xf8, 0x67, 0x1c, 0x04, + 0x1c, 0x39, 0x22, 0x80, 0x20, 0x01, 0xf0, 0x00, + 0xfb, 0x6d, 0x2c, 0x80, 0xd0, 0x01, 0xf0, 0x11, + 0xf8, 0x93, 0x98, 0x00, 0x21, 0x80, 0x68, 0x49, + 0x60, 0x08, 0x48, 0x09, 0x68, 0x00, 0x70, 0x05, + 0xe0, 0x0b, 0xf0, 0x11, 0xf8, 0x53, 0x1c, 0x04, + 0x1c, 0x39, 0x22, 0x80, 0x20, 0x02, 0xf0, 0x00, + 0xfb, 0x59, 0x2c, 0x80, 0xd0, 0x01, 0xf0, 0x11, + 0xf8, 0x7f, 0x20, 0x00, 0xe7, 0xd3, 0xe7, 0xd2, + 0x2e, 0x08, 0x5e, 0x24, 0xb5, 0xff, 0x99, 0x01, + 0x06, 0x0e, 0x0e, 0x36, 0x9a, 0x02, 0x06, 0x17, + 0x0e, 0x3f, 0x9b, 0x03, 0x06, 0x1c, 0x0e, 0x24, + 0xb0, 0x82, 0x20, 0x80, 0x40, 0x38, 0x90, 0x00, + 0x06, 0x7f, 0x0e, 0x7f, 0x2e, 0x1f, 0xdb, 0x05, + 0x20, 0xaf, 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x20, 0xdb, 0x02, + 0x20, 0xa2, 0xb0, 0x02, 0xe7, 0xf6, 0x2f, 0x04, + 0xd1, 0x00, 0x27, 0x00, 0x00, 0xe0, 0x1b, 0x00, + 0x00, 0x80, 0x49, 0x17, 0x68, 0x09, 0x18, 0x40, + 0x90, 0x01, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x0d, + 0xf0, 0x11, 0xf8, 0x18, 0x1c, 0x05, 0x1c, 0x21, + 0x22, 0x01, 0x02, 0x92, 0x20, 0x02, 0xf0, 0x00, + 0xfb, 0x1d, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x11, + 0xf8, 0x43, 0xe0, 0x13, 0xf0, 0x11, 0xf8, 0x0a, + 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0x92, + 0x20, 0x01, 0xf0, 0x00, 0xfb, 0x0f, 0x2d, 0x80, + 0xd0, 0x01, 0xf0, 0x11, 0xf8, 0x35, 0x98, 0x02, + 0x21, 0x80, 0x68, 0x89, 0x60, 0x08, 0x20, 0x80, + 0x6a, 0x00, 0x55, 0xc6, 0x20, 0x00, 0xb0, 0x02, + 0xe7, 0xc4, 0xb0, 0x02, 0xe7, 0xc2, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xcc, 0xb5, 0xff, 0xb0, 0x82, + 0x99, 0x03, 0x04, 0x0d, 0x0c, 0x2d, 0x9a, 0x04, + 0x06, 0x10, 0x0e, 0x00, 0x90, 0x00, 0x9b, 0x05, + 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, 0x98, 0x00, + 0x28, 0x1f, 0xdb, 0x05, 0x20, 0xaf, 0xb0, 0x02, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x98, 0x01, 0x23, 0x80, 0x40, 0x18, 0xd1, 0x2f, + 0x98, 0x00, 0x49, 0x2c, 0x68, 0x09, 0x73, 0x08, + 0x27, 0x00, 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x26, + 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, + 0x20, 0x01, 0x40, 0xb8, 0x99, 0x02, 0x40, 0x08, + 0xd0, 0x1c, 0x24, 0x00, 0x20, 0x40, 0x40, 0x28, + 0xd0, 0x04, 0x04, 0x20, 0x0c, 0x00, 0x24, 0x01, + 0x03, 0xa4, 0x43, 0x04, 0x20, 0x80, 0x40, 0x28, + 0xd0, 0x04, 0x04, 0x20, 0x0c, 0x00, 0x24, 0x01, + 0x03, 0xe4, 0x43, 0x04, 0xf0, 0x10, 0xff, 0xb2, + 0x1c, 0x06, 0x1c, 0x22, 0x1c, 0x39, 0x20, 0x01, + 0xf0, 0x00, 0xfa, 0xb8, 0x2e, 0x80, 0xd0, 0x01, + 0xf0, 0x10, 0xff, 0xde, 0xe7, 0xd8, 0xe0, 0x24, + 0x27, 0x00, 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x20, + 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, + 0x20, 0x01, 0x40, 0xb8, 0x99, 0x02, 0x40, 0x08, + 0xd0, 0x16, 0x24, 0x00, 0x20, 0x40, 0x40, 0x28, + 0xd0, 0x01, 0x4b, 0x0d, 0x40, 0x1c, 0x20, 0x80, + 0x40, 0x28, 0xd0, 0x01, 0x04, 0x64, 0x0c, 0x64, + 0xf0, 0x10, 0xff, 0x8c, 0x1c, 0x06, 0x1c, 0x22, + 0x1c, 0x39, 0x20, 0x02, 0xf0, 0x00, 0xfa, 0x92, + 0x2e, 0x80, 0xd0, 0x01, 0xf0, 0x10, 0xff, 0xb8, + 0xe7, 0xde, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x9f, + 0xb0, 0x02, 0xe7, 0x9d, 0x2e, 0x08, 0x5e, 0x18, + 0x00, 0x00, 0xbf, 0xff, 0xb5, 0x80, 0x1c, 0x07, + 0x48, 0x07, 0x68, 0x01, 0x20, 0x00, 0xf0, 0x19, + 0xfe, 0x51, 0x60, 0x38, 0x48, 0x04, 0x68, 0x00, + 0x1d, 0x01, 0x20, 0x00, 0xf0, 0x19, 0xfe, 0x4a, + 0x60, 0x78, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x5e, 0x18, 0xb5, 0xf7, 0x1c, 0x07, + 0x99, 0x01, 0x06, 0x0e, 0x0e, 0x36, 0x9a, 0x02, + 0x06, 0x14, 0x0e, 0x24, 0x2e, 0x1f, 0xdb, 0x04, + 0x20, 0xaf, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x2c, 0x20, 0xdb, 0x01, 0x20, 0xa2, + 0xe7, 0xf7, 0x20, 0x80, 0x40, 0x20, 0xd0, 0x0d, + 0xf0, 0x10, 0xff, 0x4c, 0x1c, 0x05, 0x1c, 0x21, + 0x22, 0x01, 0x02, 0xd2, 0x20, 0x02, 0xf0, 0x00, + 0xfa, 0x51, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x10, + 0xff, 0x77, 0xe0, 0x16, 0x48, 0x0c, 0x68, 0x00, + 0x60, 0x07, 0x48, 0x0b, 0x68, 0x00, 0x71, 0x46, + 0x20, 0xff, 0x49, 0x09, 0x68, 0x09, 0x71, 0x08, + 0xf0, 0x10, 0xff, 0x34, 0x1c, 0x05, 0x1c, 0x21, + 0x22, 0x01, 0x02, 0xd2, 0x20, 0x01, 0xf0, 0x00, + 0xfa, 0x39, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x10, + 0xff, 0x5f, 0x20, 0x00, 0xe7, 0xcd, 0xe7, 0xcc, + 0x2e, 0x08, 0x5e, 0x1c, 0xb5, 0xf7, 0x1c, 0x07, + 0x99, 0x01, 0x06, 0x0e, 0x0e, 0x36, 0x9a, 0x02, + 0x06, 0x14, 0x0e, 0x24, 0x2e, 0x1f, 0xdb, 0x04, + 0x20, 0xaf, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x2c, 0x20, 0xdb, 0x01, 0x20, 0xa2, + 0xe7, 0xf7, 0x20, 0x80, 0x40, 0x20, 0xd0, 0x0d, + 0xf0, 0x10, 0xff, 0x0c, 0x1c, 0x05, 0x1c, 0x21, + 0x22, 0x01, 0x03, 0x12, 0x20, 0x02, 0xf0, 0x00, + 0xfa, 0x11, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x10, + 0xff, 0x37, 0xe0, 0x16, 0x48, 0x0c, 0x68, 0x00, + 0x60, 0x07, 0x48, 0x0b, 0x68, 0x00, 0x71, 0x46, + 0x20, 0xff, 0x49, 0x09, 0x68, 0x09, 0x71, 0x08, + 0xf0, 0x10, 0xfe, 0xf4, 0x1c, 0x05, 0x1c, 0x21, + 0x22, 0x01, 0x03, 0x12, 0x20, 0x01, 0xf0, 0x00, + 0xf9, 0xf9, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x10, + 0xff, 0x1f, 0x20, 0x00, 0xe7, 0xcd, 0xe7, 0xcc, + 0x2e, 0x08, 0x5e, 0x20, 0xb5, 0xff, 0xb0, 0x81, + 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, + 0x99, 0x02, 0x06, 0x0d, 0x0e, 0x2d, 0x9a, 0x03, + 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x04, 0x1c, 0x29, + 0x98, 0x00, 0xf0, 0x00, 0xf8, 0x91, 0x28, 0x00, + 0xd0, 0x05, 0x20, 0xa2, 0xb0, 0x01, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x79, 0x38, + 0x79, 0x79, 0x18, 0x40, 0x79, 0xb9, 0x18, 0x40, + 0x06, 0x04, 0x0e, 0x24, 0x79, 0xb8, 0x02, 0x00, + 0x43, 0x04, 0x00, 0x68, 0x19, 0x80, 0x01, 0x00, + 0x49, 0x15, 0x68, 0x09, 0x50, 0x0c, 0x9b, 0x04, + 0x88, 0x99, 0x00, 0x68, 0x19, 0x80, 0x01, 0x00, + 0x4a, 0x11, 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, + 0x78, 0x78, 0x78, 0x39, 0x18, 0x40, 0x78, 0xb9, + 0x18, 0x40, 0x06, 0x04, 0x0e, 0x24, 0x78, 0xb8, + 0x02, 0x00, 0x43, 0x04, 0x00, 0x68, 0x19, 0x80, + 0x01, 0x00, 0x49, 0x09, 0x68, 0x09, 0x18, 0x40, + 0x60, 0x84, 0x9b, 0x04, 0x88, 0x19, 0x00, 0x68, + 0x19, 0x80, 0x01, 0x00, 0x4a, 0x04, 0x68, 0x12, + 0x18, 0x80, 0x60, 0xc1, 0x20, 0x00, 0xb0, 0x01, + 0xe7, 0xc5, 0xb0, 0x01, 0xe7, 0xc3, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xd0, 0xb5, 0xff, 0x1c, 0x07, + 0x06, 0x3d, 0x0e, 0x2d, 0x99, 0x01, 0x06, 0x0c, + 0x0e, 0x24, 0x9a, 0x02, 0x06, 0x16, 0x0e, 0x36, + 0x1c, 0x21, 0x1c, 0x28, 0xf0, 0x00, 0xf8, 0x40, + 0x28, 0x00, 0xd0, 0x04, 0x20, 0xa2, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x9a, 0x03, + 0x1c, 0x31, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x02, + 0xe7, 0xf5, 0xe7, 0xf4, 0xb4, 0xf0, 0x1c, 0x04, + 0x1c, 0x0f, 0x1c, 0x13, 0x06, 0x21, 0x0e, 0x09, + 0x06, 0x3a, 0x0e, 0x12, 0x29, 0x10, 0xdb, 0x02, + 0x20, 0xa2, 0xbc, 0xf0, 0x47, 0x70, 0x88, 0xdd, + 0x00, 0x48, 0x18, 0x80, 0x01, 0x00, 0x4e, 0x0f, + 0x68, 0x36, 0x50, 0x35, 0x88, 0x98, 0x00, 0x4d, + 0x18, 0xad, 0x01, 0x2d, 0x4e, 0x0b, 0x68, 0x36, + 0x19, 0xad, 0x60, 0x68, 0x88, 0x58, 0x00, 0x4d, + 0x18, 0xad, 0x01, 0x2d, 0x4e, 0x07, 0x68, 0x36, + 0x19, 0xad, 0x60, 0xa8, 0x88, 0x18, 0x00, 0x4d, + 0x18, 0xad, 0x01, 0x2d, 0x4e, 0x03, 0x68, 0x36, + 0x19, 0xad, 0x60, 0xe8, 0x20, 0x00, 0xe7, 0xdc, + 0xe7, 0xdb, 0x00, 0x00, 0x2e, 0x08, 0x5d, 0xd0, + 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x39, + 0x0e, 0x09, 0x06, 0x15, 0x0e, 0x2d, 0xb0, 0x81, + 0x29, 0x20, 0xdb, 0x03, 0x20, 0xa2, 0xb0, 0x01, + 0xbc, 0xb0, 0x47, 0x70, 0x2d, 0x10, 0xdb, 0x02, + 0x20, 0xa2, 0xb0, 0x01, 0xe7, 0xf8, 0x00, 0xc8, + 0x4b, 0x0a, 0x68, 0x1b, 0x18, 0xc4, 0x68, 0x20, + 0x90, 0x00, 0x98, 0x00, 0x4b, 0x08, 0x40, 0x18, + 0x90, 0x00, 0x00, 0x68, 0x23, 0x1e, 0x40, 0x18, + 0x9b, 0x00, 0x43, 0x18, 0x90, 0x00, 0x98, 0x00, + 0x60, 0x20, 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xe3, + 0xb0, 0x01, 0xe7, 0xe1, 0x2e, 0x08, 0x5d, 0xd8, + 0xff, 0xff, 0xdf, 0xe1, 0x20, 0xff, 0x49, 0x02, + 0x68, 0x09, 0x70, 0x08, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x34, 0xb4, 0xb0, 0x1c, 0x07, + 0x1c, 0x0a, 0xb0, 0x83, 0x20, 0x00, 0x43, 0xc0, + 0x23, 0x19, 0x06, 0x9b, 0x67, 0x58, 0x08, 0xb9, + 0x00, 0x89, 0x1a, 0x78, 0x90, 0x02, 0x98, 0x02, + 0x18, 0x10, 0x07, 0x80, 0x0f, 0x80, 0x90, 0x01, + 0x98, 0x02, 0x18, 0x10, 0x08, 0x80, 0x90, 0x00, + 0x9b, 0x02, 0x20, 0x03, 0x1a, 0xc0, 0x23, 0x19, + 0x06, 0x9b, 0x67, 0xd8, 0x24, 0x00, 0x98, 0x00, + 0x42, 0x84, 0xd3, 0x02, 0xe0, 0x06, 0x34, 0x01, + 0xe7, 0xf9, 0xc9, 0x08, 0x20, 0x19, 0x06, 0x80, + 0x67, 0x03, 0xe7, 0xf8, 0x98, 0x01, 0x28, 0x00, + 0xd0, 0x0b, 0x9b, 0x01, 0x00, 0xd8, 0x25, 0x00, + 0x43, 0xed, 0x40, 0xc5, 0x1c, 0x2b, 0x43, 0xdb, + 0x68, 0x0d, 0x40, 0x2b, 0x25, 0x19, 0x06, 0xad, + 0x67, 0x2b, 0x20, 0x19, 0x06, 0x80, 0x6f, 0x40, + 0xb0, 0x03, 0xbc, 0xb0, 0x47, 0x70, 0xb0, 0x03, + 0xe7, 0xfb, 0x1c, 0x01, 0x06, 0x08, 0x0e, 0x00, + 0x22, 0x19, 0x06, 0x92, 0x63, 0x90, 0x47, 0x70, + 0xb4, 0xf0, 0x48, 0x4d, 0x6a, 0x80, 0x07, 0xc0, + 0x0f, 0xc0, 0xd0, 0x74, 0x22, 0x00, 0x27, 0x00, + 0x49, 0x4a, 0x20, 0x00, 0x28, 0x20, 0xdb, 0x04, + 0xe0, 0x16, 0x1c, 0x43, 0x06, 0x18, 0x0e, 0x00, + 0xe7, 0xf8, 0x00, 0x83, 0x58, 0xcc, 0x23, 0x01, + 0x03, 0x5b, 0x40, 0x23, 0xd0, 0x0b, 0x24, 0x01, + 0x40, 0x84, 0x1c, 0x23, 0x43, 0x1f, 0x00, 0x83, + 0x58, 0xcc, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x9c, + 0x1c, 0x23, 0x00, 0x84, 0x51, 0x0b, 0xe7, 0xe8, + 0x20, 0x00, 0x28, 0x04, 0xdb, 0x04, 0xe0, 0x1a, + 0x1c, 0x43, 0x06, 0x18, 0x0e, 0x00, 0xe7, 0xf8, + 0x01, 0x05, 0x4b, 0x39, 0x18, 0xec, 0x22, 0x00, + 0x2a, 0x04, 0xdb, 0x04, 0xe0, 0x0e, 0x1c, 0x53, + 0x06, 0x1a, 0x0e, 0x12, 0xe7, 0xf8, 0x4b, 0x35, + 0x60, 0x23, 0x4b, 0x35, 0x60, 0x63, 0x23, 0x00, + 0x60, 0xa3, 0x23, 0x00, 0x60, 0xe3, 0x34, 0xff, + 0x34, 0x01, 0xe7, 0xf0, 0xe7, 0xe4, 0xb0, 0x82, + 0x4b, 0x2b, 0x69, 0xdc, 0x23, 0x0c, 0x40, 0x23, + 0x08, 0x9c, 0xab, 0x01, 0x70, 0x1c, 0x4b, 0x28, + 0x69, 0xdc, 0x23, 0x30, 0x40, 0x23, 0x09, 0x1c, + 0xab, 0x00, 0x70, 0x1c, 0xab, 0x01, 0x78, 0x1b, + 0xac, 0x00, 0x78, 0x24, 0x42, 0xa3, 0xd1, 0x09, + 0x23, 0x33, 0x06, 0x5b, 0x6b, 0xdb, 0x2b, 0x00, + 0xd1, 0x04, 0x4b, 0x1f, 0x6a, 0x9b, 0x07, 0xdb, + 0x0f, 0xdb, 0xd0, 0x21, 0x4b, 0x1c, 0x69, 0xdd, + 0x23, 0x0c, 0x40, 0x2b, 0x08, 0x9c, 0x00, 0xa5, + 0x26, 0x01, 0x40, 0xae, 0x1c, 0x33, 0x25, 0x33, + 0x06, 0x6d, 0x64, 0x2b, 0x25, 0x01, 0x40, 0xa5, + 0x1c, 0x2b, 0x4d, 0x1a, 0x63, 0xab, 0x4b, 0x14, + 0x69, 0xdd, 0x23, 0x0c, 0x40, 0x2b, 0x08, 0x9d, + 0xab, 0x01, 0x70, 0x1d, 0xe0, 0x00, 0xe0, 0x1d, + 0x4b, 0x0f, 0x69, 0xdd, 0x23, 0x30, 0x40, 0x2b, + 0x09, 0x1d, 0xab, 0x00, 0x70, 0x1d, 0xe7, 0xcd, + 0xb0, 0x02, 0x20, 0x00, 0x28, 0x20, 0xdb, 0x04, + 0xe0, 0x10, 0x1c, 0x43, 0x06, 0x18, 0x0e, 0x00, + 0xe7, 0xf8, 0x24, 0x01, 0x40, 0x84, 0x1c, 0x23, + 0x40, 0x3b, 0xd0, 0x06, 0x00, 0x83, 0x58, 0xcc, + 0x23, 0x01, 0x03, 0x5b, 0x43, 0x23, 0x00, 0x84, + 0x51, 0x0b, 0xe7, 0xee, 0xbc, 0xf0, 0x47, 0x70, + 0x66, 0x00, 0x01, 0x00, 0x64, 0x00, 0x00, 0x80, + 0x9e, 0x00, 0x00, 0xc0, 0x9e, 0x00, 0x00, 0x00, + 0x2e, 0x0f, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, + 0xb4, 0x80, 0x1c, 0x03, 0x1c, 0x0a, 0x48, 0x0a, + 0x68, 0x00, 0x68, 0x01, 0x20, 0x19, 0x06, 0x80, + 0x6a, 0x80, 0x0a, 0x40, 0x00, 0x4f, 0x43, 0x38, + 0x60, 0x18, 0x0f, 0xc8, 0x07, 0xc0, 0x60, 0x10, + 0x68, 0x10, 0x0f, 0xc0, 0x60, 0x10, 0x20, 0x00, + 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x40, 0xb5, 0x80, 0x1c, 0x07, + 0x48, 0x05, 0x68, 0x00, 0x1d, 0xc1, 0x31, 0x01, + 0x20, 0x00, 0xf0, 0x19, 0xfb, 0xdb, 0x60, 0x38, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x18, 0xb4, 0xf0, 0x1c, 0x04, + 0x1c, 0x0f, 0x1c, 0x13, 0x06, 0x20, 0x0e, 0x00, + 0x06, 0x39, 0x0e, 0x09, 0x04, 0x1a, 0x0c, 0x12, + 0x4d, 0x07, 0x68, 0x2d, 0x70, 0xe8, 0x4d, 0x06, + 0x68, 0x2d, 0x70, 0xa9, 0x4d, 0x04, 0x68, 0x2d, + 0x80, 0x2a, 0x25, 0x01, 0x04, 0x2d, 0x26, 0x33, + 0x06, 0x76, 0x60, 0x35, 0xbc, 0xf0, 0x47, 0x70, + 0x2e, 0x08, 0x5e, 0x44, 0x20, 0x0d, 0x06, 0xc0, + 0x69, 0xc0, 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, + 0x31, 0x01, 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x99, + 0xd9, 0x03, 0x20, 0x2d, 0x01, 0x00, 0x47, 0x70, + 0xe0, 0x01, 0x1c, 0x08, 0xe7, 0xfb, 0xe7, 0xfa, + 0xb5, 0xf3, 0xb0, 0x85, 0x20, 0x00, 0x90, 0x03, + 0x20, 0x00, 0x90, 0x02, 0x9f, 0x05, 0x69, 0x3d, + 0x69, 0x38, 0x28, 0x13, 0xd1, 0x05, 0x20, 0x75, + 0xb0, 0x05, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x99, 0x06, 0x68, 0x88, 0x68, 0x09, + 0x1a, 0x40, 0x1c, 0x41, 0x91, 0x04, 0x69, 0x78, + 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, 0x99, 0x04, + 0x08, 0x49, 0x91, 0x04, 0x00, 0xa8, 0x49, 0xf8, + 0x58, 0x08, 0x99, 0x04, 0x43, 0x48, 0x61, 0xf8, + 0x99, 0x06, 0x68, 0x88, 0x68, 0x09, 0x1a, 0x40, + 0x30, 0x01, 0x63, 0xb8, 0x68, 0xf8, 0x90, 0x01, + 0x48, 0xf2, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, + 0x98, 0x01, 0x28, 0x19, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, 0x98, 0x01, + 0x28, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, + 0x20, 0x00, 0x28, 0x00, 0xd0, 0x07, 0x1d, 0xf8, + 0x30, 0x21, 0x99, 0x06, 0xf0, 0x02, 0xf9, 0xea, + 0x20, 0x00, 0xb0, 0x05, 0xe7, 0xc5, 0x49, 0xe6, + 0x20, 0x91, 0xf0, 0x19, 0xfb, 0x5b, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0b, 0xfb, 0x64, + 0xe7, 0xf5, 0x98, 0x01, 0x00, 0x80, 0x49, 0xe1, + 0x58, 0x08, 0x99, 0x05, 0x42, 0x88, 0xd0, 0x05, + 0x20, 0x92, 0x49, 0xdd, 0x60, 0x08, 0x20, 0xff, + 0xb0, 0x05, 0xe7, 0xae, 0x48, 0xd9, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x03, 0x2d, 0x0b, 0xdb, 0x26, + 0x2d, 0x12, 0xdc, 0x24, 0x2d, 0x0b, 0xdb, 0x0b, + 0x2d, 0x12, 0xdc, 0x09, 0x48, 0xd6, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x05, 0x1d, 0xf8, 0x30, 0x21, + 0x99, 0x06, 0xf0, 0x02, 0xf9, 0xbb, 0xe0, 0x16, + 0x6b, 0x38, 0xf7, 0xff, 0xff, 0x7c, 0x90, 0x00, + 0x6a, 0xb9, 0x9a, 0x00, 0x48, 0xcf, 0xf0, 0x0c, + 0xfb, 0x4b, 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x06, + 0xf0, 0x02, 0xf9, 0xac, 0x6b, 0x38, 0xf7, 0xff, + 0xff, 0x6e, 0x90, 0x00, 0x6a, 0xb9, 0x9a, 0x00, + 0x48, 0xc8, 0xf0, 0x0c, 0xfb, 0x6b, 0x48, 0xc8, + 0x68, 0x00, 0x99, 0x05, 0x42, 0x88, 0xd1, 0x30, + 0x48, 0xc0, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x2c, + 0x48, 0xc1, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x0a, + 0x20, 0x0d, 0x06, 0xc0, 0x68, 0xc0, 0x90, 0x02, + 0x98, 0x02, 0x28, 0x01, 0xd1, 0x03, 0x20, 0x00, + 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x48, 0xba, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x0d, 0x6a, 0xb8, + 0x30, 0x01, 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, + 0x02, 0x89, 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, + 0x43, 0x08, 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, + 0xe0, 0x0b, 0x6a, 0xb8, 0x30, 0x01, 0x05, 0x00, + 0x6a, 0xf9, 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, + 0x6b, 0x79, 0x31, 0x02, 0x43, 0x08, 0x49, 0xaf, + 0x60, 0x08, 0x2d, 0x0b, 0xdb, 0x15, 0x2d, 0x12, + 0xdc, 0x13, 0x48, 0xa9, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x0f, 0x48, 0xa4, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x0b, 0x20, 0x00, 0x62, 0xb8, 0x20, 0x00, + 0x62, 0xf8, 0x48, 0xa7, 0x63, 0x38, 0x48, 0xa7, + 0x63, 0x78, 0x6b, 0x38, 0xf7, 0xff, 0xff, 0x1b, + 0x90, 0x00, 0x48, 0x9c, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x16, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, + 0x90, 0x03, 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, + 0x60, 0x88, 0xf0, 0x01, 0xfb, 0x07, 0x6b, 0x38, + 0xf7, 0xff, 0xff, 0x09, 0x90, 0x00, 0x9a, 0x00, + 0x99, 0x01, 0x1c, 0x38, 0xf0, 0x01, 0xfa, 0x8c, + 0x98, 0x03, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, + 0x48, 0x93, 0x68, 0x00, 0x99, 0x05, 0x42, 0x88, + 0xd1, 0x0b, 0x48, 0x8c, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x07, 0x48, 0x8d, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x03, 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, + 0x60, 0xc8, 0x48, 0x86, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x73, 0x48, 0x87, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x6f, 0xb0, 0x84, 0x98, 0x05, 0xf0, 0x0c, + 0xf9, 0xe1, 0x28, 0x00, 0xd1, 0x0e, 0x2d, 0x0b, + 0xdb, 0x01, 0x2d, 0x12, 0xdd, 0x0a, 0x1d, 0xf8, + 0x30, 0x21, 0x99, 0x0a, 0xf0, 0x02, 0xf9, 0x12, + 0x20, 0x92, 0x49, 0x7b, 0x60, 0x08, 0x20, 0x00, + 0xb0, 0x09, 0xe6, 0xea, 0x49, 0x80, 0x20, 0x91, + 0xf0, 0x19, 0xfa, 0x80, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0xf0, 0x0c, 0xfa, 0x22, 0x20, 0x92, + 0x49, 0x7b, 0x60, 0x08, 0x20, 0x01, 0x49, 0x7b, + 0x68, 0x09, 0x60, 0x08, 0x2d, 0x0b, 0xdb, 0x39, + 0x2d, 0x12, 0xdc, 0x37, 0xb0, 0x81, 0x24, 0x00, + 0x20, 0x00, 0x90, 0x03, 0x20, 0x01, 0x49, 0x75, + 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, + 0x66, 0x88, 0x6a, 0xb8, 0x30, 0x01, 0x05, 0x00, + 0x6a, 0xf9, 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, + 0x6b, 0x79, 0x31, 0x02, 0x43, 0x08, 0x90, 0x00, + 0x20, 0x00, 0x62, 0xb8, 0x20, 0x00, 0x62, 0xf8, + 0x48, 0x67, 0x63, 0x38, 0x48, 0x67, 0x63, 0x78, + 0x6b, 0x38, 0xf7, 0xff, 0xfe, 0x9c, 0x90, 0x02, + 0x48, 0x66, 0x68, 0x00, 0x23, 0x77, 0x01, 0x1b, + 0x18, 0xc0, 0x9a, 0x02, 0x1c, 0x39, 0xf0, 0x0b, + 0xfe, 0x05, 0x98, 0x00, 0x49, 0x61, 0x68, 0x09, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, + 0x48, 0x5e, 0x68, 0x00, 0xf0, 0x0c, 0xf9, 0xf8, + 0xb0, 0x01, 0xe1, 0x2b, 0x24, 0x00, 0x26, 0x00, + 0x2e, 0x00, 0xd1, 0x16, 0x2c, 0x07, 0xd2, 0x14, + 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, + 0x34, 0x01, 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, + 0xe0, 0x00, 0xe1, 0x3c, 0x4a, 0x53, 0x68, 0x12, + 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, + 0x6f, 0xc0, 0x42, 0x81, 0xd1, 0x00, 0x26, 0x01, + 0xe7, 0xe6, 0x2e, 0x00, 0xd1, 0x13, 0x2c, 0x18, + 0xd2, 0x11, 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, + 0x1c, 0x20, 0x34, 0x01, 0x23, 0x4c, 0x43, 0x58, + 0x4a, 0x48, 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, + 0xd1, 0x00, 0x26, 0x01, 0xe7, 0xe9, 0x3c, 0x01, + 0x6b, 0x38, 0xf7, 0xff, 0xfe, 0x50, 0x90, 0x01, + 0x2c, 0x07, 0xd2, 0x05, 0x48, 0x3f, 0x68, 0x01, + 0x1c, 0x20, 0xf0, 0x0b, 0xfc, 0xcb, 0xe0, 0x06, + 0x2c, 0x18, 0xd2, 0x04, 0x1f, 0xe0, 0x49, 0x3b, + 0x68, 0x09, 0xf0, 0x0b, 0xfd, 0x01, 0x48, 0x3a, + 0x49, 0x38, 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, + 0x18, 0xc9, 0x66, 0xc8, 0x48, 0x36, 0x49, 0x35, + 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, + 0x67, 0x08, 0x48, 0x33, 0x49, 0x31, 0x68, 0x09, + 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x66, 0x88, + 0x48, 0x2f, 0x49, 0x2e, 0x68, 0x09, 0x23, 0x09, + 0x01, 0xdb, 0x18, 0xc9, 0x66, 0x48, 0x20, 0x00, + 0x49, 0x2a, 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, + 0x18, 0xc9, 0x64, 0x88, 0x6b, 0x79, 0x48, 0x27, + 0x68, 0x00, 0xf0, 0x0b, 0xfd, 0x4b, 0x94, 0x02, + 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x0a, 0xf0, 0x02, + 0xf8, 0x4d, 0x24, 0x00, 0x26, 0x00, 0x2e, 0x00, + 0xd1, 0x14, 0x2c, 0x07, 0xd2, 0x12, 0x6a, 0xf8, + 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, + 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, 0x4a, 0x1b, + 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, + 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, 0xda, 0x00, + 0x26, 0x01, 0xe7, 0xe8, 0x2e, 0x00, 0xd1, 0x2f, + 0x2c, 0x18, 0xd2, 0x2d, 0x6a, 0xf8, 0x05, 0x81, + 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, 0x23, 0x4c, + 0x43, 0x58, 0x4a, 0x10, 0x68, 0x12, 0x18, 0x80, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, + 0x42, 0x81, 0xda, 0x1c, 0xe0, 0x1a, 0x00, 0x00, + 0x2e, 0x03, 0x32, 0xf4, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xc8, 0x2e, 0x08, 0x7c, 0x60, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x7d, 0x9c, + 0x2e, 0x08, 0x7c, 0xc4, 0x2e, 0x08, 0x5e, 0x54, + 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0x3f, + 0x2e, 0x08, 0x94, 0x90, 0x2e, 0x08, 0x7d, 0xbc, + 0x00, 0x00, 0xff, 0xff, 0x26, 0x01, 0xe7, 0xcd, + 0x3c, 0x01, 0x6b, 0x38, 0xf7, 0xff, 0xfd, 0xc3, + 0x90, 0x01, 0x2c, 0x07, 0xd2, 0x12, 0x48, 0x48, + 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0b, 0xfb, 0xcc, + 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, 0x49, 0x44, + 0x68, 0x09, 0x18, 0x40, 0x23, 0x2b, 0x01, 0x5b, + 0x18, 0xc0, 0x9a, 0x01, 0x1c, 0x39, 0xf0, 0x0b, + 0xfd, 0x21, 0xe0, 0x4a, 0x2c, 0x18, 0xd2, 0x48, + 0x1f, 0xe0, 0x49, 0x3d, 0x68, 0x09, 0xf0, 0x0b, + 0xfc, 0x0b, 0x20, 0x4c, 0x43, 0x60, 0x49, 0x3a, + 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x0a, 0x9a, 0x01, 0x1c, 0x39, 0xf0, 0x0b, + 0xfd, 0x0d, 0x20, 0x4c, 0x43, 0x60, 0x49, 0x34, + 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x82, 0x6f, 0xc0, 0x28, 0x00, 0xd0, 0x17, + 0x20, 0x4c, 0x43, 0x60, 0x49, 0x2e, 0x68, 0x09, + 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, + 0x68, 0x00, 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x0b, + 0x20, 0x4c, 0x43, 0x60, 0x49, 0x28, 0x68, 0x09, + 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, + 0x68, 0x00, 0x0c, 0x00, 0x04, 0x00, 0xd1, 0x0a, + 0x20, 0x02, 0x21, 0x4c, 0x43, 0x61, 0x4a, 0x22, + 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, + 0x39, 0x82, 0x67, 0x48, 0xe0, 0x09, 0x20, 0x03, + 0x21, 0x4c, 0x43, 0x61, 0x4a, 0x1c, 0x68, 0x12, + 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, + 0x67, 0x48, 0x48, 0x19, 0x68, 0x00, 0xf0, 0x0c, + 0xf8, 0xcf, 0x6b, 0x79, 0x48, 0x16, 0x68, 0x00, + 0xf0, 0x0b, 0xfc, 0x36, 0x98, 0x02, 0x42, 0x84, + 0xda, 0x01, 0x1c, 0x21, 0xe0, 0x00, 0x99, 0x02, + 0x91, 0x00, 0x99, 0x00, 0x48, 0x10, 0x68, 0x00, + 0xf0, 0x0b, 0xfd, 0x46, 0x49, 0x0f, 0x20, 0x91, + 0xf0, 0x19, 0xf8, 0xfc, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0x48, 0x0b, 0x68, 0x00, 0x90, 0x03, + 0x48, 0x0b, 0x68, 0x00, 0x49, 0x08, 0x60, 0x08, + 0x98, 0x03, 0x49, 0x09, 0x60, 0x08, 0x20, 0x92, + 0x49, 0x06, 0x60, 0x08, 0xb0, 0x04, 0x20, 0x92, + 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x05, + 0xe5, 0x4b, 0xb0, 0x05, 0xe5, 0x49, 0x00, 0x00, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xc0, 0x2e, 0x08, 0x7c, 0xc8, + 0xb5, 0xff, 0x1c, 0x07, 0x9d, 0x09, 0xb0, 0x89, + 0x26, 0x00, 0x20, 0x00, 0x90, 0x03, 0x99, 0x0a, + 0x68, 0x4c, 0x2d, 0x13, 0xd1, 0x05, 0x20, 0x75, + 0xb0, 0x09, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x98, 0x15, 0x60, 0x04, 0x20, 0x00, + 0x60, 0xe0, 0x20, 0x00, 0x61, 0x20, 0x69, 0x60, + 0x4b, 0xf9, 0x40, 0x18, 0x61, 0x60, 0x02, 0x00, + 0x69, 0x60, 0x4b, 0xf8, 0x40, 0x18, 0x61, 0x60, + 0x04, 0x80, 0x69, 0x60, 0x4b, 0xf6, 0x40, 0x18, + 0x61, 0x60, 0x05, 0x80, 0x69, 0x60, 0x23, 0xc0, + 0x43, 0xdb, 0x40, 0x18, 0x61, 0x60, 0x06, 0x00, + 0x69, 0x60, 0x4b, 0xf2, 0x40, 0x18, 0x61, 0x60, + 0x04, 0x40, 0x69, 0x60, 0x23, 0x20, 0x43, 0xdb, + 0x40, 0x18, 0x61, 0x60, 0x06, 0x80, 0x69, 0x60, + 0x09, 0x40, 0x01, 0x40, 0x61, 0x60, 0x06, 0xc0, + 0x20, 0x00, 0x61, 0xa0, 0x20, 0x00, 0x61, 0xe0, + 0x20, 0x00, 0x62, 0x20, 0x20, 0x00, 0x62, 0x60, + 0x20, 0x00, 0x63, 0xa0, 0x20, 0x00, 0x63, 0xe0, + 0x20, 0x00, 0x64, 0x60, 0x20, 0x00, 0x64, 0x20, + 0x20, 0x00, 0x60, 0x20, 0x20, 0x00, 0x71, 0x20, + 0x99, 0x0a, 0x68, 0x48, 0x64, 0xe0, 0x99, 0x0a, + 0x68, 0x08, 0x64, 0xa0, 0x1d, 0xe0, 0x30, 0x21, + 0x99, 0x13, 0xf0, 0x01, 0xff, 0x07, 0x2d, 0x0b, + 0xdb, 0x06, 0x2d, 0x12, 0xdc, 0x04, 0x1d, 0xe0, + 0x30, 0x49, 0x99, 0x13, 0xf0, 0x01, 0xfe, 0xfe, + 0x6b, 0x20, 0x6a, 0xa1, 0x1a, 0x40, 0x30, 0x01, + 0x63, 0xa0, 0x00, 0xa8, 0x49, 0xd4, 0x58, 0x08, + 0x69, 0x61, 0x09, 0x49, 0x01, 0x49, 0x06, 0xc0, + 0x0e, 0xc0, 0x43, 0x08, 0x61, 0x60, 0x06, 0xc0, + 0x0e, 0xc0, 0x6b, 0x20, 0x6a, 0xa1, 0x1a, 0x40, + 0x1c, 0x41, 0x91, 0x04, 0x69, 0x60, 0x23, 0x04, + 0x40, 0x18, 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, + 0x91, 0x04, 0x00, 0xa8, 0x49, 0xc9, 0x58, 0x08, + 0x99, 0x04, 0x43, 0x48, 0x61, 0xe0, 0x2d, 0x13, + 0xd1, 0x04, 0x20, 0x00, 0x90, 0x14, 0x20, 0x00, + 0x61, 0xa0, 0xe0, 0x13, 0x9b, 0x0c, 0x68, 0x58, + 0x90, 0x01, 0x98, 0x01, 0x08, 0x80, 0x61, 0xa0, + 0x98, 0x01, 0x64, 0x60, 0x9b, 0x0c, 0x68, 0x18, + 0x64, 0x20, 0x20, 0x00, 0x62, 0x60, 0x9a, 0x0b, + 0x63, 0xe2, 0x69, 0x60, 0x4b, 0xb6, 0x40, 0x18, + 0x61, 0x60, 0x02, 0x00, 0x69, 0x60, 0x4b, 0xb6, + 0x40, 0x18, 0x61, 0x60, 0x05, 0x80, 0x69, 0x60, + 0x23, 0x0f, 0x02, 0x9b, 0x43, 0x18, 0x61, 0x60, + 0x04, 0x80, 0x69, 0x60, 0x23, 0x20, 0x43, 0xdb, + 0x40, 0x18, 0x61, 0x60, 0x06, 0x80, 0x69, 0x60, + 0x23, 0xc0, 0x43, 0x18, 0x61, 0x60, 0x06, 0x00, + 0x69, 0x60, 0x23, 0x01, 0x03, 0x9b, 0x43, 0x18, + 0x61, 0x60, 0x04, 0x40, 0x98, 0x14, 0x60, 0xe0, + 0x61, 0x25, 0x48, 0xab, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x06, 0x98, 0x14, 0x28, 0x19, 0xd3, 0x01, + 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, + 0x98, 0x14, 0x28, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, + 0x20, 0x00, 0xb0, 0x09, 0xe7, 0x35, 0x49, 0xa1, + 0x20, 0x91, 0xf0, 0x18, 0xff, 0xff, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0b, 0xf8, 0x08, + 0xe7, 0xf5, 0x48, 0x9d, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x53, 0x68, 0x38, 0x01, 0x80, 0x0f, 0xc0, + 0x68, 0xa1, 0x4b, 0x9a, 0x40, 0x19, 0x07, 0xc0, + 0x09, 0x80, 0x43, 0x08, 0x60, 0xa0, 0x01, 0x80, + 0x0f, 0xc0, 0x68, 0x38, 0x01, 0xc0, 0x0f, 0xc0, + 0x68, 0xa1, 0x4b, 0x95, 0x40, 0x19, 0x07, 0xc0, + 0x09, 0xc0, 0x43, 0x08, 0x60, 0xa0, 0x01, 0xc0, + 0x0f, 0xc0, 0x68, 0x38, 0x02, 0x00, 0x0e, 0x00, + 0x68, 0xa1, 0x4b, 0x85, 0x40, 0x19, 0x06, 0x00, + 0x0e, 0x00, 0x04, 0x00, 0x43, 0x08, 0x60, 0xa0, + 0x02, 0x00, 0x0e, 0x00, 0x48, 0x86, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x2a, 0x2f, 0x00, 0xd0, 0x28, + 0x20, 0x0d, 0x06, 0xc0, 0x6a, 0x00, 0x1c, 0x06, + 0x68, 0x38, 0x4b, 0x85, 0x43, 0x98, 0xd0, 0x06, + 0x68, 0x38, 0x02, 0x00, 0x0e, 0x01, 0x20, 0x01, + 0x40, 0x88, 0x43, 0x06, 0xe0, 0x05, 0x68, 0x38, + 0x02, 0x00, 0x0e, 0x00, 0x21, 0x01, 0x40, 0x81, + 0x43, 0x8e, 0x68, 0x38, 0x4b, 0x7b, 0x43, 0x98, + 0xd0, 0x08, 0x68, 0x38, 0x02, 0x00, 0x0e, 0x00, + 0x1d, 0xc1, 0x31, 0x01, 0x20, 0x01, 0x40, 0x88, + 0x43, 0x06, 0xe0, 0x06, 0x68, 0x38, 0x02, 0x00, + 0x0e, 0x00, 0x30, 0x08, 0x21, 0x01, 0x40, 0x81, + 0x43, 0x8e, 0x2d, 0x0b, 0xdb, 0x0a, 0x2d, 0x12, + 0xdc, 0x08, 0x48, 0x6f, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x04, 0x20, 0x51, 0x01, 0x00, 0x21, 0x0d, + 0x06, 0xc9, 0x60, 0x08, 0x98, 0x14, 0x00, 0x80, + 0x49, 0x6c, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x01, + 0x20, 0x83, 0x90, 0x03, 0x2d, 0x0b, 0xdb, 0x08, + 0x2d, 0x12, 0xdc, 0x06, 0x48, 0x68, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x01, 0x20, 0x84, 0x90, 0x03, + 0xe0, 0x06, 0x9a, 0x0b, 0x2a, 0x01, 0xd1, 0x03, + 0x2d, 0x13, 0xd0, 0x01, 0x20, 0x82, 0x90, 0x03, + 0x98, 0x03, 0x28, 0x00, 0xd0, 0x07, 0x20, 0x92, + 0x49, 0x5a, 0x60, 0x08, 0x20, 0x08, 0x60, 0xe0, + 0x98, 0x03, 0xb0, 0x09, 0xe6, 0xa1, 0x98, 0x15, + 0x68, 0x01, 0x98, 0x14, 0x00, 0x80, 0x4a, 0x59, + 0x50, 0x11, 0x6a, 0xa0, 0x28, 0x00, 0xda, 0x01, + 0x20, 0x00, 0x62, 0xa0, 0x6b, 0x20, 0x28, 0x00, + 0xdc, 0x01, 0x20, 0x01, 0x63, 0x20, 0x6a, 0xe0, + 0x28, 0x00, 0xda, 0x01, 0x20, 0x00, 0x62, 0xe0, + 0x6b, 0x60, 0x4b, 0x52, 0x42, 0x98, 0xdd, 0x01, + 0x48, 0x50, 0x63, 0x60, 0x6b, 0x20, 0xf7, 0xff, + 0xfb, 0x9e, 0x90, 0x00, 0x2d, 0x13, 0xd1, 0x05, + 0x6a, 0xa1, 0x9a, 0x00, 0x48, 0x4c, 0xf0, 0x0b, + 0xff, 0x99, 0xe0, 0x15, 0x2d, 0x0b, 0xdb, 0x01, + 0x2d, 0x12, 0xdd, 0x03, 0x48, 0x40, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x0d, 0x2d, 0x0b, 0xdb, 0x06, + 0x2d, 0x12, 0xdc, 0x04, 0x48, 0x3e, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x00, 0xe0, 0x04, 0x6a, 0xa1, + 0x9a, 0x00, 0x48, 0x41, 0xf0, 0x0b, 0xff, 0x82, + 0x2d, 0x0b, 0xdb, 0x5f, 0x2d, 0x12, 0xdc, 0x5e, + 0x98, 0x15, 0x68, 0x00, 0x49, 0x3a, 0x60, 0x08, + 0x99, 0x13, 0xa8, 0x05, 0xf0, 0x01, 0xfd, 0xae, + 0xa9, 0x05, 0x98, 0x15, 0x68, 0x00, 0xf0, 0x05, + 0xfc, 0x5f, 0x1d, 0xe0, 0x30, 0x21, 0xa9, 0x05, + 0xf0, 0x01, 0xfd, 0xa4, 0x20, 0x01, 0x49, 0x35, + 0x65, 0x08, 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, + 0x60, 0xc8, 0x21, 0x00, 0x20, 0x02, 0xf0, 0x04, + 0xfa, 0xdd, 0x2d, 0x0b, 0xd0, 0x05, 0x2d, 0x0f, + 0xd0, 0x03, 0x2d, 0x10, 0xd0, 0x01, 0x2d, 0x11, + 0xd1, 0x03, 0x21, 0x00, 0x20, 0x12, 0xf0, 0x04, + 0xfa, 0xd1, 0x2d, 0x0c, 0xd0, 0x01, 0x2d, 0x0f, + 0xd1, 0x03, 0x21, 0x00, 0x20, 0x04, 0xf0, 0x04, + 0xfa, 0xc9, 0x2d, 0x0d, 0xd0, 0x01, 0x2d, 0x10, + 0xd1, 0x03, 0x21, 0x00, 0x20, 0x08, 0xf0, 0x04, + 0xfa, 0xc1, 0x2d, 0x0e, 0xd0, 0x01, 0x2d, 0x11, + 0xd1, 0x03, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x04, + 0xfa, 0xb9, 0x48, 0x15, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x73, 0xb0, 0x82, 0x49, 0x1c, 0x20, 0x91, + 0xf0, 0x18, 0xfe, 0xe4, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0xf0, 0x0b, 0xfe, 0x86, 0x20, 0x92, + 0x49, 0x17, 0x60, 0x08, 0x20, 0x01, 0x49, 0x17, + 0x68, 0x09, 0x60, 0x08, 0x20, 0x01, 0x49, 0x15, + 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, + 0x66, 0x88, 0xe0, 0x25, 0xe0, 0xae, 0xe0, 0xad, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, + 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xbf, 0xff, + 0x2e, 0x03, 0x32, 0xa4, 0x2e, 0x03, 0x32, 0xf4, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x60, 0x8c, 0xfd, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0x2e, 0x08, 0x7c, 0x60, + 0x2e, 0x08, 0x7c, 0xc4, 0x00, 0x00, 0x02, 0x3f, + 0x2e, 0x08, 0x7d, 0x9c, 0xcc, 0x00, 0x00, 0x00, + 0x2e, 0x08, 0x94, 0x90, 0x2e, 0x08, 0x7d, 0xbc, + 0x6a, 0xa0, 0x30, 0x01, 0x05, 0x00, 0x6a, 0xe1, + 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, 0x6b, 0x61, + 0x31, 0x02, 0x43, 0x08, 0x90, 0x00, 0x20, 0x00, + 0x62, 0xa0, 0x20, 0x00, 0x62, 0xe0, 0x48, 0x5f, + 0x63, 0x20, 0x48, 0x5f, 0x63, 0x60, 0x6b, 0x20, + 0xf7, 0xff, 0xfa, 0xe1, 0x90, 0x02, 0x48, 0x5d, + 0x68, 0x00, 0x23, 0x77, 0x01, 0x1b, 0x18, 0xc0, + 0x9a, 0x02, 0x1c, 0x21, 0xf0, 0x0b, 0xfa, 0x4a, + 0x98, 0x00, 0x49, 0x58, 0x68, 0x09, 0x23, 0x07, + 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, 0x48, 0x55, + 0x68, 0x00, 0x21, 0x00, 0xf0, 0x0b, 0xfa, 0xc4, + 0x48, 0x52, 0x68, 0x00, 0xf0, 0x0b, 0xfe, 0x38, + 0x49, 0x51, 0x20, 0x91, 0xf0, 0x18, 0xfe, 0x76, + 0xe0, 0x00, 0xe0, 0x11, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf6, 0x48, 0x4c, 0x68, 0x00, 0x90, 0x01, + 0x48, 0x4c, 0x68, 0x00, 0x49, 0x49, 0x60, 0x08, + 0x98, 0x01, 0x49, 0x4a, 0x60, 0x08, 0x20, 0x92, + 0x49, 0x47, 0x60, 0x08, 0xb0, 0x02, 0xe0, 0x40, + 0x48, 0x47, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0c, + 0x6a, 0xa0, 0x30, 0x01, 0x05, 0x00, 0x6a, 0xe1, + 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, 0x6b, 0x61, + 0x31, 0x02, 0x43, 0x08, 0x49, 0x41, 0x60, 0x08, + 0xe0, 0x0c, 0x6a, 0xa0, 0x30, 0x01, 0x05, 0x00, + 0x6a, 0xe1, 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, + 0x6b, 0x61, 0x31, 0x02, 0x43, 0x08, 0x21, 0x0d, + 0x06, 0xc9, 0x61, 0x88, 0x20, 0x0d, 0x06, 0xc0, + 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, + 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x00, 0xfe, 0x82, + 0x48, 0x33, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x07, + 0x20, 0x00, 0x62, 0xa0, 0x20, 0x00, 0x62, 0xe0, + 0x48, 0x2a, 0x63, 0x20, 0x48, 0x2a, 0x63, 0x60, + 0x6b, 0x20, 0xf7, 0xff, 0xfa, 0x78, 0x90, 0x00, + 0x9a, 0x00, 0x99, 0x14, 0x1c, 0x20, 0xf0, 0x00, + 0xfd, 0xfb, 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, + 0x60, 0x88, 0xe0, 0x05, 0x2d, 0x13, 0xd1, 0x03, + 0x20, 0x1f, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x08, + 0x2d, 0x0b, 0xdb, 0x01, 0x2d, 0x12, 0xdd, 0x1a, + 0x48, 0x23, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x16, + 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, + 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, + 0xf0, 0x00, 0xfe, 0x50, 0x6b, 0x20, 0xf7, 0xff, + 0xfa, 0x52, 0x90, 0x00, 0x9a, 0x00, 0x99, 0x14, + 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0xd5, 0x98, 0x02, + 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0x48, 0x14, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x06, 0x48, 0x14, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x0d, + 0x06, 0xc0, 0x62, 0x06, 0x48, 0x0e, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x07, 0x48, 0x0e, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x03, 0x98, 0x14, 0x21, 0x00, + 0xf0, 0x0b, 0xfd, 0x0a, 0x20, 0x92, 0x49, 0x0b, + 0x60, 0x08, 0x20, 0x00, 0xb0, 0x09, 0xe5, 0x10, + 0xb0, 0x09, 0xe5, 0x0e, 0x00, 0x00, 0x02, 0xcf, + 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x7d, 0xbc, + 0x2e, 0x08, 0x94, 0x90, 0x2e, 0x08, 0x7d, 0xc0, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x5e, 0x54, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0xb5, 0xf7, 0xb0, 0x83, 0x9f, 0x03, 0x69, 0x38, + 0x90, 0x00, 0x98, 0x00, 0x28, 0x13, 0xd1, 0x05, + 0x20, 0x75, 0xb0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x6c, 0x78, 0x99, 0x04, + 0x60, 0x48, 0x6c, 0x38, 0x99, 0x04, 0x60, 0x08, + 0x6c, 0xf8, 0x9a, 0x05, 0x60, 0x50, 0x6c, 0xb8, + 0x9a, 0x05, 0x60, 0x10, 0x68, 0xfd, 0x48, 0xf9, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, + 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xda, 0x49, 0xf0, + 0x20, 0x91, 0xf0, 0x18, 0xfd, 0x97, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, 0xfd, 0xa0, + 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0xeb, 0x58, 0x08, + 0x99, 0x03, 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, + 0x49, 0xe7, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x03, + 0xe7, 0xc4, 0x21, 0x00, 0x00, 0xa8, 0x4a, 0xe5, + 0x50, 0x11, 0x48, 0xe2, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0x69, 0x38, 0x28, 0x0b, 0xdb, 0x16, + 0x69, 0x38, 0x28, 0x12, 0xdc, 0x13, 0x48, 0xe0, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x06, 0x69, 0x38, + 0x28, 0x0b, 0xdb, 0x03, 0x69, 0x38, 0x28, 0x12, + 0xdc, 0x00, 0xe0, 0x08, 0x6b, 0x38, 0xf7, 0xff, + 0xf9, 0xb6, 0x90, 0x01, 0x6a, 0xb9, 0x9a, 0x01, + 0x48, 0xd8, 0xf0, 0x0b, 0xfd, 0x85, 0x69, 0x38, + 0x28, 0x0b, 0xdb, 0x2e, 0x69, 0x38, 0x28, 0x12, + 0xdc, 0x2b, 0x48, 0xd0, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x27, 0x20, 0x00, 0x49, 0xd2, 0x65, 0x08, + 0x20, 0x01, 0x03, 0x00, 0x49, 0xd0, 0x65, 0x48, + 0x20, 0x00, 0x49, 0xcf, 0x65, 0x88, 0x20, 0x00, + 0x49, 0xcd, 0x65, 0xc8, 0x20, 0x00, 0x49, 0xcc, + 0x66, 0x08, 0x20, 0x00, 0x49, 0xcb, 0x60, 0x08, + 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, + 0x21, 0x00, 0x20, 0x02, 0xf0, 0x04, 0xf9, 0x0a, + 0x48, 0xc3, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x04, + 0x48, 0xc5, 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, + 0xe0, 0x02, 0x48, 0xc3, 0x49, 0xc3, 0x60, 0x08, + 0xe0, 0x06, 0x69, 0x38, 0x28, 0x13, 0xd1, 0x03, + 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x08, + 0x48, 0xb6, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x2c, + 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, + 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, + 0xf0, 0x00, 0xfd, 0x64, 0x20, 0x00, 0x43, 0xc0, + 0x00, 0xe9, 0x4b, 0xb7, 0x18, 0xc9, 0x60, 0x08, + 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0xb4, + 0x18, 0xc9, 0x60, 0x48, 0x20, 0x00, 0x43, 0xc0, + 0x00, 0xe9, 0x4b, 0xb1, 0x18, 0xc9, 0x64, 0x08, + 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0xae, + 0x18, 0xc9, 0x64, 0x48, 0x20, 0x01, 0x40, 0xa8, + 0x43, 0xc0, 0x99, 0x02, 0x40, 0x08, 0x90, 0x02, + 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, + 0xe0, 0x9c, 0x69, 0x38, 0x28, 0x0b, 0xdb, 0x74, + 0x69, 0x38, 0x28, 0x12, 0xdc, 0x72, 0x48, 0x9b, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, 0x20, 0x00, + 0x49, 0x9d, 0x65, 0x08, 0x20, 0x01, 0x03, 0x00, + 0x49, 0x9b, 0x65, 0x48, 0x20, 0x00, 0x49, 0x9a, + 0x65, 0x88, 0x20, 0x00, 0x49, 0x98, 0x65, 0xc8, + 0x20, 0x00, 0x49, 0x97, 0x66, 0x08, 0x20, 0x00, + 0x49, 0x96, 0x60, 0x08, 0x20, 0x02, 0x21, 0x0d, + 0x06, 0xc9, 0x60, 0xc8, 0x21, 0x00, 0x20, 0x02, + 0xf0, 0x04, 0xf8, 0xa0, 0x49, 0x95, 0x20, 0x91, + 0xf0, 0x18, 0xfc, 0xd0, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0xf0, 0x0b, 0xfc, 0x72, 0x20, 0x92, + 0x49, 0x90, 0x60, 0x08, 0x48, 0x90, 0x68, 0x00, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, + 0x08, 0x40, 0x00, 0x40, 0x49, 0x8c, 0x68, 0x09, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, + 0x20, 0x01, 0x49, 0x89, 0x68, 0x09, 0x60, 0x08, + 0x20, 0x01, 0x49, 0x87, 0x68, 0x09, 0x23, 0x07, + 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x20, 0x00, + 0x43, 0xc0, 0x49, 0x83, 0x68, 0x09, 0x23, 0x0f, + 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x08, 0x20, 0x00, + 0x43, 0xc0, 0x49, 0x7f, 0x68, 0x09, 0x23, 0x0f, + 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x48, 0x20, 0x00, + 0x43, 0xc0, 0x49, 0x7b, 0x68, 0x09, 0x23, 0x0f, + 0x01, 0xdb, 0x18, 0xc9, 0x60, 0xc8, 0x20, 0x00, + 0x43, 0xc0, 0x49, 0x77, 0x68, 0x09, 0x23, 0x0f, + 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x88, 0x6b, 0x38, + 0xf7, 0xff, 0xf8, 0xd9, 0x90, 0x01, 0x48, 0x72, + 0x68, 0x00, 0x23, 0x77, 0x01, 0x1b, 0x18, 0xc0, + 0x9a, 0x01, 0x1c, 0x39, 0xf0, 0x0b, 0xf8, 0x42, + 0xe0, 0x02, 0xe0, 0x23, 0xe0, 0x22, 0xe0, 0x21, + 0x48, 0x67, 0x49, 0x6b, 0x68, 0x09, 0x23, 0x07, + 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, 0x48, 0x68, + 0x68, 0x00, 0x21, 0x00, 0xf0, 0x0b, 0xf8, 0xb8, + 0x48, 0x65, 0x68, 0x00, 0xf0, 0x0b, 0xfc, 0x2c, + 0x49, 0x62, 0x20, 0x91, 0xf0, 0x18, 0xfc, 0x6a, + 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x60, + 0x68, 0x04, 0x48, 0x60, 0x68, 0x00, 0x49, 0x5e, + 0x60, 0x08, 0x48, 0x5e, 0x60, 0x04, 0x20, 0x92, + 0x49, 0x5a, 0x60, 0x08, 0x48, 0x52, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x73, 0x48, 0x4d, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x6f, 0x1c, 0x28, 0xf0, 0x0b, + 0xfb, 0x9d, 0x28, 0x01, 0xd1, 0x6a, 0x98, 0x00, + 0x28, 0x0b, 0xdb, 0x02, 0x98, 0x00, 0x28, 0x12, + 0xdd, 0x65, 0xb0, 0x84, 0x49, 0x4f, 0x20, 0x91, + 0xf0, 0x18, 0xfc, 0x44, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0xf0, 0x0b, 0xfb, 0xe6, 0x48, 0x4c, + 0x68, 0x00, 0x68, 0x40, 0x28, 0x00, 0xd0, 0x06, + 0x48, 0x49, 0x68, 0x00, 0x68, 0x40, 0x38, 0x01, + 0x49, 0x47, 0x68, 0x09, 0x60, 0x48, 0x20, 0x92, + 0x49, 0x44, 0x60, 0x08, 0x20, 0x01, 0x49, 0x44, + 0x68, 0x09, 0x60, 0x08, 0x24, 0x00, 0x20, 0x00, + 0x90, 0x02, 0x98, 0x02, 0x28, 0x00, 0xd1, 0x15, + 0x2c, 0x07, 0xd2, 0x13, 0x6a, 0xf8, 0x05, 0x81, + 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, 0x00, 0x83, + 0x18, 0x18, 0x00, 0xc0, 0x4a, 0x3a, 0x68, 0x12, + 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, + 0x6f, 0xc0, 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, + 0x90, 0x02, 0xe7, 0xe6, 0x98, 0x02, 0x28, 0x00, + 0xd1, 0x14, 0x2c, 0x18, 0xd2, 0x12, 0x6a, 0xf8, + 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, + 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x2e, 0x68, 0x12, + 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, + 0x69, 0x40, 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, + 0x90, 0x02, 0xe7, 0xe7, 0x3c, 0x01, 0x6b, 0x38, + 0xf7, 0xff, 0xf8, 0x41, 0x90, 0x01, 0x2c, 0x07, + 0xd2, 0x09, 0x48, 0x25, 0x68, 0x01, 0x1c, 0x20, + 0xf0, 0x0a, 0xfe, 0xbc, 0x48, 0x22, 0x68, 0x00, + 0xf0, 0x0b, 0xfb, 0xa6, 0xe0, 0x09, 0x2c, 0x18, + 0xd2, 0x07, 0xe0, 0x01, 0xe0, 0x95, 0xe0, 0x94, + 0x1f, 0xe0, 0x49, 0x1d, 0x68, 0x09, 0xf0, 0x0a, + 0xfe, 0xeb, 0x48, 0x1b, 0x68, 0x00, 0x4b, 0x1c, + 0x18, 0xc0, 0xf0, 0x0b, 0xf8, 0x0b, 0x20, 0x00, + 0x49, 0x17, 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, + 0x18, 0xc9, 0x64, 0x88, 0x48, 0x14, 0x68, 0x00, + 0x68, 0x40, 0x28, 0x07, 0xd3, 0x2c, 0x48, 0x12, + 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, + 0x69, 0x80, 0x23, 0xfe, 0x43, 0x18, 0x49, 0x0e, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0xe0, 0x1c, 0x00, 0x00, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xc8, 0x2e, 0x08, 0x7c, 0x60, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x7d, 0x9c, + 0xcc, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0xc4, + 0x3f, 0xff, 0xff, 0xff, 0x2e, 0x08, 0x5e, 0x54, + 0x68, 0x00, 0x04, 0x00, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0x00, 0x00, 0x04, 0xcc, 0x61, 0x88, 0xe0, 0x2d, + 0x26, 0x01, 0x21, 0x00, 0x91, 0x00, 0x48, 0x2b, + 0x68, 0x00, 0x68, 0x40, 0x99, 0x00, 0x42, 0x88, + 0xd8, 0x04, 0xe0, 0x06, 0x99, 0x00, 0x31, 0x01, + 0x91, 0x00, 0xe7, 0xf4, 0x00, 0x70, 0x1c, 0x46, + 0xe7, 0xf8, 0x08, 0x76, 0x00, 0x76, 0x48, 0x23, + 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, + 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0x49, 0x1f, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x61, 0x88, 0x48, 0x1c, 0x68, 0x00, 0x23, 0x0d, + 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x43, 0x30, + 0x49, 0x18, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc9, 0x61, 0x88, 0x1c, 0x21, 0x48, 0x15, + 0x68, 0x00, 0xf0, 0x0a, 0xff, 0xb1, 0x6b, 0x79, + 0x48, 0x12, 0x68, 0x00, 0xf0, 0x0a, 0xfe, 0xe6, + 0x1c, 0x28, 0x21, 0x00, 0xf0, 0x0b, 0xfa, 0x88, + 0x49, 0x0f, 0x20, 0x91, 0xf0, 0x18, 0xfb, 0x5e, + 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x0b, + 0x68, 0x00, 0x90, 0x03, 0x48, 0x0b, 0x68, 0x00, + 0x49, 0x08, 0x60, 0x08, 0x98, 0x03, 0x49, 0x09, + 0x60, 0x08, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, + 0xb0, 0x04, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x03, 0xe5, 0x86, 0xb0, 0x03, + 0xe5, 0x84, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0xbc, + 0x2e, 0x08, 0x94, 0x90, 0x2e, 0x08, 0x7d, 0xc0, + 0x2e, 0x08, 0x7c, 0xc8, 0xb5, 0xf3, 0xb0, 0x85, + 0x20, 0x00, 0x90, 0x01, 0x9d, 0x05, 0x9f, 0x06, + 0x69, 0x28, 0x90, 0x04, 0x69, 0x3c, 0x98, 0x04, + 0x28, 0x13, 0xd0, 0x01, 0x2c, 0x13, 0xd1, 0x05, + 0x20, 0xff, 0xb0, 0x05, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x68, 0xee, 0x68, 0xf9, + 0x91, 0x03, 0x48, 0xdf, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0x2e, 0x19, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2e, 0x08, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0x28, 0x00, 0xd0, 0x20, 0x48, 0xd6, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x06, 0x99, 0x03, 0x29, 0x19, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x05, 0x99, 0x03, 0x29, 0x08, 0xd3, 0x01, + 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, + 0xd0, 0x06, 0x99, 0x03, 0x60, 0xe9, 0x60, 0xfe, + 0x20, 0x00, 0xb0, 0x05, 0xe7, 0xce, 0xe1, 0x92, + 0x1c, 0x3d, 0x9f, 0x05, 0x9e, 0x03, 0x68, 0xf9, + 0x91, 0x03, 0x9c, 0x04, 0xe0, 0xaa, 0x48, 0xc6, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x99, 0x03, + 0x29, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, + 0x20, 0x00, 0xe0, 0x05, 0x99, 0x03, 0x29, 0x08, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0x28, 0x00, 0xd1, 0x73, 0x49, 0xbd, 0x20, 0x91, + 0xf0, 0x18, 0xfa, 0xdc, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x0a, 0xfa, 0xe5, 0xe7, 0xf5, + 0x00, 0xb0, 0x49, 0xb9, 0x58, 0x08, 0x42, 0xa8, + 0xd1, 0x05, 0x99, 0x03, 0x00, 0x88, 0x49, 0xb6, + 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, + 0x49, 0xb2, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, + 0xe7, 0x98, 0x48, 0xb2, 0x68, 0x00, 0x42, 0xa8, + 0xd0, 0x03, 0x48, 0xb0, 0x68, 0x00, 0x42, 0xb8, + 0xd1, 0x0a, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0xc0, + 0x90, 0x01, 0x98, 0x01, 0x28, 0x01, 0xd1, 0x03, + 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, + 0x99, 0x03, 0x60, 0xe9, 0x60, 0xfe, 0x00, 0xb0, + 0x49, 0xa5, 0x50, 0x0f, 0x99, 0x03, 0x00, 0x88, + 0x49, 0xa3, 0x50, 0x0d, 0x48, 0xa0, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x55, 0x20, 0x0d, 0x06, 0xc0, + 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, + 0x06, 0xc9, 0x60, 0x88, 0x20, 0x01, 0x40, 0xb0, + 0x99, 0x02, 0x40, 0x08, 0xd1, 0x12, 0x99, 0x03, + 0x20, 0x01, 0x40, 0x88, 0x99, 0x02, 0x40, 0x08, + 0xd0, 0x0b, 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, + 0x43, 0xc0, 0x99, 0x02, 0x40, 0x08, 0x90, 0x02, + 0x20, 0x01, 0x40, 0xb0, 0x99, 0x02, 0x43, 0x08, + 0x90, 0x02, 0xe0, 0x11, 0x99, 0x03, 0x20, 0x01, + 0x40, 0x88, 0x99, 0x02, 0x40, 0x08, 0xd1, 0x0b, + 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, 0x99, 0x02, + 0x40, 0x08, 0x90, 0x02, 0x99, 0x03, 0x20, 0x01, + 0x40, 0x88, 0x99, 0x02, 0x43, 0x08, 0x90, 0x02, + 0x6b, 0x28, 0xf7, 0xfe, 0xfe, 0xbc, 0x90, 0x00, + 0x9a, 0x00, 0xe0, 0x00, 0xe0, 0x22, 0x99, 0x03, + 0x1c, 0x28, 0xf0, 0x00, 0xfa, 0x3d, 0x6b, 0x38, + 0xf7, 0xfe, 0xfe, 0xb1, 0x90, 0x00, 0x9a, 0x00, + 0x1c, 0x31, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x34, + 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, + 0x48, 0x7c, 0x68, 0x00, 0x42, 0xa8, 0xd0, 0x03, + 0x48, 0x7a, 0x68, 0x00, 0x42, 0xb8, 0xd1, 0x03, + 0x98, 0x01, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, + 0x20, 0x92, 0x49, 0x74, 0x60, 0x08, 0x20, 0x00, + 0xb0, 0x05, 0xe7, 0x1b, 0x49, 0x71, 0x20, 0x91, + 0xf0, 0x18, 0xfa, 0x44, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x0a, 0xfa, 0x4d, 0xe7, 0xf5, + 0x00, 0xb0, 0x49, 0x6d, 0x58, 0x08, 0x42, 0xa8, + 0xd0, 0x05, 0x20, 0x92, 0x49, 0x69, 0x60, 0x08, + 0x20, 0xff, 0xb0, 0x05, 0xe7, 0x06, 0x2c, 0x0b, + 0xdb, 0x12, 0x2c, 0x12, 0xdc, 0x10, 0x48, 0x67, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x09, 0x48, 0x65, + 0x68, 0x00, 0x42, 0xa8, 0xd0, 0x05, 0x20, 0x92, + 0x49, 0x60, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, + 0xe6, 0xf4, 0x48, 0x60, 0x60, 0x07, 0xe0, 0x08, + 0x6b, 0xf8, 0x28, 0x01, 0xd1, 0x05, 0x20, 0x92, + 0x49, 0x5a, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, + 0xe6, 0xe8, 0x48, 0x5a, 0x68, 0x00, 0x42, 0xa8, + 0xd1, 0x02, 0x20, 0x00, 0x49, 0x57, 0x60, 0x08, + 0x00, 0xb0, 0x49, 0x55, 0x50, 0x0f, 0x99, 0x03, + 0x60, 0xe9, 0x60, 0xfe, 0x48, 0x50, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x73, 0x6b, 0x28, 0xf7, 0xfe, + 0xfe, 0x4e, 0x90, 0x00, 0x6a, 0xa9, 0x9a, 0x00, + 0x48, 0x4f, 0xf0, 0x0b, 0xfa, 0x1d, 0x6b, 0x38, + 0xf7, 0xfe, 0xfe, 0x45, 0x90, 0x00, 0x6a, 0xb9, + 0x9a, 0x00, 0x48, 0x4b, 0xf0, 0x0b, 0xfa, 0x42, + 0x48, 0x48, 0x68, 0x00, 0x42, 0xa8, 0xd1, 0x0f, + 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, + 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x07, + 0x21, 0x00, 0x20, 0x02, 0xf0, 0x03, 0xfd, 0xae, + 0x48, 0x42, 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, + 0x2c, 0x0b, 0xdb, 0x42, 0x2c, 0x12, 0xdc, 0x40, + 0x98, 0x04, 0x42, 0xa0, 0xd0, 0x2c, 0x20, 0x02, + 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x21, 0x00, + 0x20, 0x02, 0xf0, 0x03, 0xfd, 0x9b, 0x2c, 0x0f, + 0xd0, 0x05, 0x2c, 0x10, 0xd0, 0x03, 0x2c, 0x11, + 0xd0, 0x01, 0x2c, 0x0b, 0xd1, 0x03, 0x21, 0x00, + 0x20, 0x12, 0xf0, 0x03, 0xfd, 0x8f, 0x2c, 0x0c, + 0xd0, 0x01, 0x2c, 0x0f, 0xd1, 0x03, 0x21, 0x00, + 0x20, 0x04, 0xf0, 0x03, 0xfd, 0x87, 0x2c, 0x0d, + 0xd0, 0x01, 0x2c, 0x10, 0xd1, 0x03, 0x21, 0x00, + 0x20, 0x08, 0xf0, 0x03, 0xfd, 0x7f, 0x2c, 0x0e, + 0xd0, 0x01, 0x2c, 0x11, 0xd1, 0x03, 0x21, 0x00, + 0x20, 0x01, 0xf0, 0x03, 0xfd, 0x77, 0xe0, 0x03, + 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, + 0x6a, 0xb8, 0x30, 0x01, 0x05, 0x00, 0x6a, 0xf9, + 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, 0x6b, 0x79, + 0x31, 0x02, 0x43, 0x08, 0x21, 0x0d, 0x06, 0xc9, + 0x61, 0x88, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, + 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, + 0x60, 0x88, 0xe0, 0x00, 0xe0, 0x1f, 0x20, 0x01, + 0x40, 0xb0, 0x43, 0xc0, 0x99, 0x02, 0x40, 0x08, + 0x90, 0x02, 0xf0, 0x00, 0xf9, 0xcf, 0x6b, 0x38, + 0xf7, 0xfe, 0xfd, 0xd1, 0x90, 0x00, 0x9a, 0x00, + 0x1c, 0x31, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x54, + 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, + 0x2c, 0x0b, 0xdb, 0x08, 0x2c, 0x12, 0xdc, 0x06, + 0x98, 0x04, 0x42, 0xa0, 0xd1, 0x03, 0x20, 0x01, + 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x20, 0x92, + 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x05, + 0xe6, 0x3c, 0xb0, 0x05, 0xe6, 0x3a, 0xe6, 0x39, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x2e, 0x08, 0x7c, 0xc4, + 0x2e, 0x08, 0x7d, 0x9c, 0x3f, 0xff, 0xff, 0xff, + 0xb5, 0xf0, 0x1c, 0x07, 0x00, 0xb8, 0x49, 0x09, + 0x58, 0x0c, 0x1c, 0x7d, 0x60, 0xe5, 0x00, 0xa8, + 0x49, 0x06, 0x50, 0x0c, 0x6b, 0x20, 0xf7, 0xfe, + 0xfd, 0x9a, 0x1c, 0x06, 0x1c, 0x32, 0x1c, 0x29, + 0x1c, 0x20, 0xf0, 0x00, 0xf9, 0x1d, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x7c, 0x60, + 0xb5, 0xf0, 0x1c, 0x07, 0x00, 0xb8, 0x49, 0x09, + 0x58, 0x0c, 0x1e, 0x7d, 0x60, 0xe5, 0x00, 0xa8, + 0x49, 0x06, 0x50, 0x0c, 0x6b, 0x20, 0xf7, 0xfe, + 0xfd, 0x82, 0x1c, 0x06, 0x1c, 0x32, 0x1c, 0x29, + 0x1c, 0x20, 0xf0, 0x00, 0xf9, 0x05, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x7c, 0x60, + 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x86, 0x98, 0x06, + 0x90, 0x05, 0x98, 0x05, 0x68, 0xc5, 0x48, 0x77, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x20, 0xff, 0xb0, 0x06, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x98, 0x05, 0x69, 0x00, + 0x28, 0x13, 0xd1, 0x02, 0x20, 0xff, 0xb0, 0x06, + 0xe7, 0xf4, 0x49, 0x69, 0x20, 0x91, 0xf0, 0x18, + 0xf9, 0x01, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, + 0xf0, 0x0a, 0xf9, 0x0a, 0xe7, 0xf5, 0x00, 0xa8, + 0x49, 0x64, 0x58, 0x08, 0x99, 0x05, 0x42, 0x88, + 0xd0, 0x05, 0x20, 0x92, 0x49, 0x60, 0x60, 0x08, + 0x20, 0xff, 0xb0, 0x06, 0xe7, 0xde, 0x42, 0xbd, + 0xd1, 0x05, 0x20, 0x92, 0x49, 0x5c, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x06, 0xe7, 0xd6, 0x20, 0x00, + 0x00, 0xa9, 0x4a, 0x5a, 0x50, 0x50, 0x98, 0x05, + 0x60, 0xc7, 0x48, 0x59, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x0d, 0x48, 0x54, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x09, 0x99, 0x05, 0x00, 0xb8, 0x4a, 0x53, + 0x50, 0x11, 0x20, 0x92, 0x49, 0x50, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x06, 0xe7, 0xbe, 0x20, 0x0d, + 0x06, 0xc0, 0x68, 0x80, 0x1c, 0x04, 0x20, 0x00, + 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0x20, 0x00, + 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0x4b, 0x18, 0xc9, + 0x60, 0x08, 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, + 0x4b, 0x48, 0x18, 0xc9, 0x60, 0x48, 0x20, 0x00, + 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0x45, 0x18, 0xc9, + 0x64, 0x08, 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, + 0x4b, 0x42, 0x18, 0xc9, 0x64, 0x48, 0x20, 0x01, + 0x90, 0x01, 0x20, 0x01, 0x40, 0xa8, 0x40, 0x20, + 0xd1, 0x01, 0x20, 0x00, 0x90, 0x01, 0x20, 0x01, + 0x40, 0xa8, 0x43, 0xc0, 0x40, 0x04, 0x1c, 0x3e, + 0x42, 0xbd, 0xd9, 0x23, 0x00, 0xb0, 0x49, 0x37, + 0x58, 0x08, 0x28, 0x00, 0xd0, 0x01, 0x36, 0x01, + 0xe7, 0xf8, 0x1e, 0x70, 0x90, 0x04, 0x98, 0x04, + 0x42, 0xb8, 0xda, 0x04, 0xe0, 0x07, 0x98, 0x04, + 0x38, 0x01, 0x90, 0x04, 0xe7, 0xf7, 0x98, 0x04, + 0xf7, 0xff, 0xff, 0x32, 0xe7, 0xf7, 0x20, 0xff, + 0x40, 0xb8, 0x90, 0x03, 0x20, 0xff, 0x40, 0xb0, + 0x43, 0xc0, 0x99, 0x03, 0x40, 0x08, 0x90, 0x03, + 0x98, 0x03, 0x00, 0x40, 0x90, 0x03, 0x00, 0x60, + 0x90, 0x00, 0xe0, 0x1f, 0x00, 0xb0, 0x49, 0x25, + 0x58, 0x08, 0x28, 0x00, 0xd0, 0x01, 0x3e, 0x01, + 0xe7, 0xf8, 0x1c, 0x70, 0x90, 0x04, 0x98, 0x04, + 0x42, 0xb8, 0xd9, 0x04, 0xe0, 0x07, 0x98, 0x04, + 0x30, 0x01, 0x90, 0x04, 0xe7, 0xf7, 0x98, 0x04, + 0xf7, 0xff, 0xff, 0x26, 0xe7, 0xf7, 0x20, 0xff, + 0x40, 0xb0, 0x90, 0x03, 0x20, 0xff, 0x40, 0xb8, + 0x43, 0xc0, 0x99, 0x03, 0x40, 0x08, 0x90, 0x03, + 0x08, 0x60, 0x90, 0x00, 0x98, 0x00, 0x99, 0x03, + 0x40, 0x08, 0x90, 0x00, 0x98, 0x03, 0x43, 0x84, + 0x98, 0x00, 0x43, 0x04, 0x20, 0x01, 0x40, 0xb8, + 0x43, 0xc0, 0x40, 0x04, 0x98, 0x01, 0x40, 0xb8, + 0x43, 0x04, 0x99, 0x05, 0x00, 0xb8, 0x4a, 0x0d, + 0x50, 0x11, 0x98, 0x05, 0x6b, 0x00, 0xf7, 0xfe, + 0xfc, 0x92, 0x90, 0x02, 0x9a, 0x02, 0x1c, 0x39, + 0x98, 0x05, 0xf0, 0x00, 0xf8, 0x15, 0x20, 0x0d, + 0x06, 0xc0, 0x60, 0x84, 0x20, 0x92, 0x49, 0x04, + 0x60, 0x08, 0x20, 0x00, 0xb0, 0x06, 0xe7, 0x25, + 0xb0, 0x06, 0xe7, 0x23, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xc8, 0x2e, 0x08, 0x7c, 0x60, + 0x2e, 0x08, 0x60, 0x8c, 0x68, 0x00, 0x04, 0x00, + 0xb5, 0xf7, 0x1c, 0x04, 0x1c, 0x0f, 0x01, 0x3d, + 0x4b, 0x2f, 0x18, 0xe9, 0x1d, 0xe2, 0x32, 0x0d, + 0x20, 0x00, 0x28, 0x03, 0xd3, 0x02, 0xe0, 0x04, + 0x30, 0x01, 0xe7, 0xfa, 0xca, 0x20, 0xc1, 0x20, + 0xe7, 0xfa, 0x6a, 0xe3, 0x05, 0x9d, 0x0d, 0xad, + 0x00, 0xfe, 0x4b, 0x28, 0x18, 0xf3, 0x60, 0x1d, + 0x6b, 0x63, 0x33, 0x01, 0x05, 0x9d, 0x0d, 0xad, + 0x00, 0xfe, 0x4b, 0x24, 0x18, 0xf3, 0x60, 0x5d, + 0x6a, 0xa5, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x1d, + 0x00, 0xfe, 0x4b, 0x20, 0x18, 0xf3, 0x64, 0x1d, + 0x9d, 0x02, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x1d, + 0x00, 0xfe, 0x4b, 0x1c, 0x18, 0xf3, 0x64, 0x5d, + 0x4b, 0x1b, 0x68, 0x1b, 0x2b, 0x01, 0xd1, 0x2a, + 0x2f, 0x00, 0xd1, 0x28, 0x4b, 0x17, 0x68, 0x5d, + 0x23, 0x8f, 0x00, 0x9b, 0x42, 0x9d, 0xd3, 0x03, + 0x23, 0x8f, 0x00, 0x9b, 0x4d, 0x13, 0x60, 0x6b, + 0x4b, 0x12, 0x68, 0x1d, 0x4b, 0x13, 0x42, 0x9d, + 0xd3, 0x02, 0x4b, 0x12, 0x4d, 0x0f, 0x60, 0x2b, + 0x4b, 0x0e, 0x6c, 0x5d, 0x23, 0x01, 0x02, 0x9b, + 0x1a, 0xed, 0x23, 0xb3, 0x00, 0x9b, 0x42, 0x9d, + 0xd3, 0x02, 0x4b, 0x0d, 0x4d, 0x09, 0x64, 0x6b, + 0x4b, 0x08, 0x6c, 0x1d, 0x23, 0x01, 0x02, 0x9b, + 0x1a, 0xed, 0x4b, 0x0a, 0x42, 0x9d, 0xd3, 0x02, + 0x4b, 0x09, 0x4d, 0x04, 0x64, 0x2b, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x68, 0x00, 0x0c, 0x00, 0x68, 0x00, 0x04, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x00, 0x00, 0x02, 0x3a, + 0x00, 0x00, 0x06, 0xcc, 0x00, 0x00, 0x02, 0xca, + 0x00, 0x00, 0x06, 0xca, 0xb4, 0xf0, 0x4f, 0x15, + 0x4c, 0x15, 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, + 0x43, 0xd2, 0x4d, 0x14, 0x68, 0x6d, 0x42, 0x85, + 0xdd, 0x1b, 0x1c, 0x05, 0x30, 0x01, 0x00, 0xad, + 0x59, 0x7b, 0x42, 0x93, 0xd0, 0xf9, 0x4d, 0x0f, + 0x68, 0x6d, 0x42, 0x85, 0xda, 0x00, 0xe0, 0x10, + 0x31, 0x01, 0x1c, 0x05, 0x30, 0x01, 0x00, 0xad, + 0x59, 0x7a, 0x42, 0x93, 0xd0, 0xf9, 0x02, 0x95, + 0x43, 0x1d, 0x1c, 0x2e, 0xc4, 0x40, 0x4d, 0x07, + 0x68, 0x6d, 0x42, 0x85, 0xdb, 0x00, 0x31, 0x01, + 0xe7, 0xdf, 0x25, 0x0d, 0x06, 0xed, 0x61, 0x29, + 0xbc, 0xf0, 0x47, 0x70, 0x2e, 0x08, 0x7c, 0xd4, + 0x68, 0x00, 0x0d, 0x40, 0x2e, 0x08, 0x7d, 0x9c, + 0xb5, 0xf3, 0xb0, 0x82, 0x9d, 0x02, 0x69, 0x2c, + 0x2c, 0x13, 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x02, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x68, 0xee, 0x48, 0xf8, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0x2e, 0x19, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2e, 0x08, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0x28, 0x00, 0xd0, 0x02, 0x20, 0xff, 0xb0, 0x02, + 0xe7, 0xe6, 0x49, 0xef, 0x20, 0x91, 0xf0, 0x17, + 0xff, 0x61, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, + 0xf0, 0x09, 0xff, 0x6a, 0xe7, 0xf5, 0x00, 0xb0, + 0x49, 0xea, 0x58, 0x08, 0x99, 0x02, 0x42, 0x88, + 0xd0, 0x05, 0x20, 0x92, 0x49, 0xe6, 0x60, 0x08, + 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xd0, 0x48, 0xe3, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x16, 0x20, 0x0d, + 0x06, 0xc0, 0x68, 0x80, 0x90, 0x01, 0x99, 0x03, + 0x29, 0x01, 0xd1, 0x05, 0x20, 0x01, 0x40, 0xb0, + 0x99, 0x01, 0x43, 0x08, 0x90, 0x01, 0xe0, 0x05, + 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, 0x99, 0x01, + 0x40, 0x08, 0x90, 0x01, 0x98, 0x01, 0x21, 0x0d, + 0x06, 0xc9, 0x60, 0x88, 0x48, 0xd8, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x73, 0x48, 0xd3, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x6f, 0x99, 0x03, 0x29, 0x01, + 0xd1, 0x6c, 0xb0, 0x83, 0x1c, 0x30, 0xf0, 0x0a, + 0xfe, 0x71, 0x28, 0x01, 0xd1, 0x05, 0x20, 0x92, + 0x49, 0xcd, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x05, + 0xe7, 0x9e, 0x49, 0xce, 0x20, 0x91, 0xf0, 0x17, + 0xff, 0x19, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, + 0xf0, 0x0a, 0xfe, 0xbb, 0x2c, 0x0b, 0xdb, 0x01, + 0x2c, 0x12, 0xdd, 0x06, 0x48, 0xc8, 0x68, 0x00, + 0x68, 0x40, 0x30, 0x01, 0x49, 0xc6, 0x68, 0x09, + 0x60, 0x48, 0x20, 0x92, 0x49, 0xc3, 0x60, 0x08, + 0x20, 0x01, 0x49, 0xc3, 0x68, 0x09, 0x60, 0x08, + 0x2c, 0x0b, 0xdb, 0x11, 0x2c, 0x12, 0xdc, 0x0f, + 0x48, 0xbf, 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc0, 0x69, 0x80, 0x23, 0x01, 0x43, 0x18, + 0x49, 0xbb, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc9, 0x61, 0x88, 0x27, 0x00, 0xe0, 0xbc, + 0x27, 0x00, 0x20, 0x00, 0x90, 0x01, 0x98, 0x01, + 0x28, 0x00, 0xd1, 0x15, 0x2f, 0x07, 0xd2, 0x13, + 0x6a, 0xe8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, + 0x37, 0x01, 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, + 0x4a, 0xaf, 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, + 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, + 0xda, 0x01, 0x20, 0x01, 0x90, 0x01, 0xe7, 0xe6, + 0x98, 0x01, 0x28, 0x00, 0xd1, 0x16, 0x2f, 0x18, + 0xd2, 0x14, 0x6a, 0xe8, 0x05, 0x81, 0x0d, 0x89, + 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, 0x43, 0x58, + 0x4a, 0xa3, 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, + 0xda, 0x03, 0xe0, 0x00, 0xe0, 0xb0, 0x20, 0x01, + 0x90, 0x01, 0xe7, 0xe5, 0x3f, 0x01, 0x6b, 0x28, + 0xf7, 0xfe, 0xfb, 0x01, 0x90, 0x00, 0x2f, 0x07, + 0xd2, 0x16, 0x48, 0x99, 0x68, 0x01, 0x1c, 0x38, + 0xf0, 0x0a, 0xf9, 0x0a, 0x00, 0xb8, 0x19, 0xc0, + 0x00, 0xc0, 0x49, 0x95, 0x68, 0x09, 0x18, 0x40, + 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc0, 0x9a, 0x00, + 0x1c, 0x29, 0xf0, 0x0a, 0xfa, 0x5f, 0x48, 0x90, + 0x68, 0x00, 0xf0, 0x0a, 0xfe, 0x59, 0xe0, 0x4a, + 0x2f, 0x18, 0xd2, 0x48, 0x1f, 0xf8, 0x49, 0x8c, + 0x68, 0x09, 0xf0, 0x0a, 0xf9, 0x45, 0x20, 0x4c, + 0x43, 0x78, 0x49, 0x89, 0x68, 0x09, 0x18, 0x40, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, 0x9a, 0x00, + 0x1c, 0x29, 0xf0, 0x0a, 0xfa, 0x47, 0x20, 0x4c, + 0x43, 0x78, 0x49, 0x83, 0x68, 0x09, 0x18, 0x40, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x82, 0x6f, 0xc0, + 0x28, 0x00, 0xd0, 0x17, 0x20, 0x4c, 0x43, 0x78, + 0x49, 0x7d, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0xd0, 0x0b, 0x20, 0x4c, 0x43, 0x78, + 0x49, 0x77, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x0c, 0x00, + 0x04, 0x00, 0xd1, 0x0a, 0x20, 0x02, 0x21, 0x4c, + 0x43, 0x79, 0x4a, 0x71, 0x68, 0x12, 0x18, 0x89, + 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, + 0xe0, 0x09, 0x20, 0x03, 0x21, 0x4c, 0x43, 0x79, + 0x4a, 0x6b, 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, + 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, 0x48, 0x68, + 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, + 0x69, 0x80, 0x00, 0x40, 0x90, 0x03, 0x98, 0x03, + 0x23, 0x02, 0x43, 0x18, 0x90, 0x03, 0x48, 0x62, + 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, + 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0x99, 0x03, + 0x18, 0x40, 0x90, 0x03, 0x98, 0x03, 0x49, 0x5c, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x61, 0x88, 0x1c, 0x39, 0x48, 0x58, 0x68, 0x00, + 0xf0, 0x0a, 0xfa, 0x72, 0x2c, 0x0b, 0xdb, 0x01, + 0x2c, 0x12, 0xdd, 0x04, 0x6b, 0x69, 0x48, 0x54, + 0x68, 0x00, 0xf0, 0x0a, 0xf9, 0x4d, 0x1c, 0x30, + 0x21, 0x01, 0xf0, 0x0a, 0xfd, 0x45, 0x49, 0x4f, + 0x20, 0x91, 0xf0, 0x17, 0xfe, 0x1b, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x4c, 0x68, 0x00, + 0x90, 0x02, 0x48, 0x4c, 0x68, 0x00, 0x49, 0x4a, + 0x60, 0x08, 0x98, 0x02, 0x49, 0x49, 0x60, 0x08, + 0x20, 0x92, 0x49, 0x46, 0x60, 0x08, 0xb0, 0x03, + 0x48, 0x43, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x75, + 0x48, 0x3e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x71, + 0x99, 0x03, 0x29, 0x00, 0xd1, 0x6e, 0xb0, 0x85, + 0x1c, 0x30, 0xf0, 0x0a, 0xfd, 0x47, 0x28, 0x00, + 0xd1, 0x05, 0x20, 0x92, 0x49, 0x38, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x07, 0xe6, 0x74, 0x49, 0x39, + 0x20, 0x91, 0xf0, 0x17, 0xfd, 0xef, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfd, 0x91, + 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x0b, + 0x48, 0x33, 0x68, 0x00, 0x68, 0x40, 0x28, 0x00, + 0xd0, 0x06, 0x48, 0x31, 0x68, 0x00, 0x68, 0x40, + 0x38, 0x01, 0x49, 0x2f, 0x68, 0x09, 0x60, 0x48, + 0x20, 0x92, 0x49, 0x2c, 0x60, 0x08, 0x20, 0x01, + 0x49, 0x2b, 0x68, 0x09, 0x60, 0x08, 0x2c, 0x0b, + 0xdb, 0x11, 0x2c, 0x12, 0xdc, 0x0f, 0x48, 0x28, + 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, + 0x69, 0x80, 0x08, 0x40, 0x00, 0x40, 0x49, 0x24, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x61, 0x88, 0x27, 0x00, 0xe0, 0xb2, 0x27, 0x00, + 0x20, 0x00, 0x90, 0x03, 0x98, 0x03, 0x28, 0x00, + 0xd1, 0x15, 0x2f, 0x07, 0xd2, 0x13, 0x6a, 0xe8, + 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, + 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, 0x4a, 0x18, + 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, + 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, 0xd1, 0x01, + 0x20, 0x01, 0x90, 0x03, 0xe7, 0xe6, 0x98, 0x03, + 0x28, 0x00, 0xd1, 0x26, 0x2f, 0x18, 0xd2, 0x24, + 0x6a, 0xe8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, + 0x37, 0x01, 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x0c, + 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x02, 0xe0, 0x00, 0xe0, 0xa9, 0x69, 0x40, + 0x42, 0x81, 0xd1, 0x11, 0x20, 0x01, 0x90, 0x03, + 0xe0, 0x0e, 0x00, 0x00, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xc8, 0x2e, 0x08, 0x7c, 0x60, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0xe7, 0xd5, 0x3f, 0x01, 0x6b, 0x28, 0xf7, 0xfe, + 0xf9, 0xc2, 0x90, 0x01, 0x2f, 0x07, 0xd2, 0x09, + 0x48, 0x4a, 0x68, 0x01, 0x1c, 0x38, 0xf0, 0x0a, + 0xf8, 0x3d, 0x48, 0x48, 0x68, 0x00, 0xf0, 0x0a, + 0xfd, 0x27, 0xe0, 0x06, 0x2f, 0x18, 0xd2, 0x04, + 0x1f, 0xf8, 0x49, 0x44, 0x68, 0x09, 0xf0, 0x0a, + 0xf8, 0x6f, 0x48, 0x42, 0x68, 0x00, 0x4b, 0x42, + 0x18, 0xc0, 0xf0, 0x0a, 0xf9, 0x8f, 0x20, 0x00, + 0x49, 0x3e, 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, + 0x18, 0xc9, 0x64, 0x88, 0x48, 0x3b, 0x68, 0x00, + 0x68, 0x40, 0x28, 0x07, 0xd3, 0x0e, 0x48, 0x39, + 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, + 0x69, 0x80, 0x23, 0xfe, 0x43, 0x18, 0x49, 0x35, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x61, 0x88, 0xe0, 0x33, 0x20, 0x01, 0x90, 0x00, + 0x21, 0x00, 0x91, 0x02, 0x48, 0x2f, 0x68, 0x00, + 0x68, 0x40, 0x99, 0x02, 0x42, 0x88, 0xd8, 0x04, + 0xe0, 0x08, 0x99, 0x02, 0x31, 0x01, 0x91, 0x02, + 0xe7, 0xf4, 0x98, 0x00, 0x00, 0x40, 0x30, 0x01, + 0x90, 0x00, 0xe7, 0xf6, 0x98, 0x00, 0x08, 0x40, + 0x00, 0x40, 0x90, 0x00, 0x48, 0x25, 0x68, 0x00, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, + 0x07, 0xc0, 0x0f, 0xc0, 0x49, 0x21, 0x68, 0x09, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, + 0x48, 0x1e, 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc0, 0x69, 0x80, 0x99, 0x00, 0x43, 0x08, + 0x49, 0x1a, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc9, 0x61, 0x88, 0x1c, 0x39, 0x48, 0x17, + 0x68, 0x00, 0xf0, 0x0a, 0xf9, 0x4d, 0x2c, 0x0b, + 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x04, 0x6b, 0x69, + 0x48, 0x12, 0x68, 0x00, 0xf0, 0x0a, 0xf8, 0x7e, + 0x1c, 0x30, 0x21, 0x00, 0xf0, 0x0a, 0xfc, 0x20, + 0x49, 0x10, 0x20, 0x91, 0xf0, 0x17, 0xfc, 0xf6, + 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x0b, + 0x68, 0x00, 0x90, 0x04, 0x48, 0x0c, 0x68, 0x00, + 0x49, 0x08, 0x60, 0x08, 0x98, 0x04, 0x49, 0x0a, + 0x60, 0x08, 0x20, 0x92, 0x49, 0x07, 0x60, 0x08, + 0xb0, 0x05, 0x20, 0x92, 0x49, 0x07, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x02, 0xe5, 0x60, 0xb0, 0x02, + 0xe5, 0x5e, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0xbc, + 0x00, 0x00, 0x04, 0xcc, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xc0, 0x2e, 0x08, 0x7c, 0xc8, + 0xb5, 0xf3, 0x1c, 0x07, 0x1c, 0x3e, 0x69, 0x30, + 0x28, 0x13, 0xd1, 0x04, 0x20, 0x75, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xf4, + 0x48, 0x1e, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x2c, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, + 0x20, 0x00, 0xe0, 0x04, 0x2c, 0x08, 0xd3, 0x01, + 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, + 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xe7, 0x49, 0x16, + 0x20, 0x91, 0xf0, 0x17, 0xfc, 0xaf, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, 0xfc, 0xb8, + 0xe7, 0xf5, 0x00, 0xa0, 0x49, 0x11, 0x58, 0x08, + 0x42, 0xb8, 0xd0, 0x04, 0x20, 0x92, 0x49, 0x0e, + 0x60, 0x08, 0x20, 0xff, 0xe7, 0xd3, 0x20, 0x0d, + 0x06, 0xc0, 0x68, 0x80, 0x1c, 0x05, 0x20, 0x01, + 0x40, 0xa0, 0x40, 0x05, 0x2d, 0x00, 0xd1, 0x03, + 0x20, 0x00, 0x99, 0x01, 0x60, 0x08, 0xe0, 0x02, + 0x20, 0x01, 0x99, 0x01, 0x60, 0x08, 0x20, 0x92, + 0x49, 0x03, 0x60, 0x08, 0x20, 0x00, 0xe7, 0xbe, + 0xe7, 0xbd, 0x00, 0x00, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xc8, 0x2e, 0x08, 0x7c, 0x60, + 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x81, 0x1c, 0x3c, + 0x68, 0xe5, 0x69, 0x60, 0x4b, 0x49, 0x40, 0x18, + 0x99, 0x02, 0x07, 0x89, 0x0f, 0x89, 0x02, 0x09, + 0x43, 0x08, 0x61, 0x60, 0x05, 0x80, 0x48, 0x46, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x49, 0x3b, 0x20, 0x91, + 0xf0, 0x17, 0xfc, 0x58, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x09, 0xfc, 0x61, 0xe7, 0xf5, + 0x00, 0xa8, 0x49, 0x37, 0x58, 0x08, 0x42, 0xb8, + 0xd0, 0x05, 0x20, 0x92, 0x49, 0x33, 0x60, 0x08, + 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xe6, 0x48, 0x30, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x69, 0x20, + 0x28, 0x0b, 0xdb, 0x0c, 0x69, 0x20, 0x28, 0x12, + 0xdc, 0x09, 0x01, 0x28, 0x4b, 0x2d, 0x18, 0xc1, + 0x91, 0x00, 0x1d, 0xe6, 0x36, 0x0d, 0x68, 0x30, + 0x99, 0x00, 0x60, 0x08, 0xe0, 0x41, 0x48, 0x26, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x28, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, + 0x1c, 0x28, 0xf0, 0x0a, 0xfb, 0x73, 0x28, 0x00, + 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1f, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xbe, 0x49, 0x21, + 0x20, 0x91, 0xf0, 0x17, 0xfc, 0x1b, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfb, 0xbd, + 0x20, 0x92, 0x49, 0x1c, 0x60, 0x08, 0x20, 0x01, + 0x49, 0x1b, 0x68, 0x09, 0x60, 0x08, 0x48, 0x1a, + 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0a, 0xfb, 0x6e, + 0x90, 0x00, 0x69, 0x60, 0x99, 0x00, 0x60, 0xc8, + 0x49, 0x14, 0x20, 0x91, 0xf0, 0x17, 0xfc, 0x02, + 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x12, + 0x68, 0x00, 0x90, 0x01, 0x48, 0x11, 0x68, 0x00, + 0x49, 0x0f, 0x60, 0x08, 0x98, 0x01, 0x49, 0x0f, + 0x60, 0x08, 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, + 0xb0, 0x02, 0x20, 0x92, 0x49, 0x05, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x01, 0xe7, 0x8a, 0xb0, 0x01, + 0xe7, 0x88, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xff, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x68, 0x00, 0x0c, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x81, 0x1c, 0x3c, + 0x68, 0xe5, 0x69, 0x60, 0x4b, 0x49, 0x40, 0x18, + 0x99, 0x02, 0x07, 0x09, 0x0f, 0x09, 0x02, 0x89, + 0x43, 0x08, 0x61, 0x60, 0x04, 0x80, 0x48, 0x46, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x49, 0x3b, 0x20, 0x91, + 0xf0, 0x17, 0xfb, 0xac, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x09, 0xfb, 0xb5, 0xe7, 0xf5, + 0x00, 0xa8, 0x49, 0x37, 0x58, 0x08, 0x42, 0xb8, + 0xd0, 0x05, 0x20, 0x92, 0x49, 0x33, 0x60, 0x08, + 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xe6, 0x48, 0x30, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x69, 0x20, + 0x28, 0x0b, 0xdb, 0x0c, 0x69, 0x20, 0x28, 0x12, + 0xdc, 0x09, 0x01, 0x28, 0x4b, 0x2d, 0x18, 0xc6, + 0x1d, 0xe0, 0x30, 0x0d, 0x90, 0x00, 0x98, 0x00, + 0x68, 0x00, 0x60, 0x30, 0xe0, 0x41, 0x48, 0x26, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x28, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, + 0x1c, 0x28, 0xf0, 0x0a, 0xfa, 0xc7, 0x28, 0x00, + 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1f, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xbe, 0x49, 0x21, + 0x20, 0x91, 0xf0, 0x17, 0xfb, 0x6f, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfb, 0x11, + 0x20, 0x92, 0x49, 0x1c, 0x60, 0x08, 0x20, 0x01, + 0x49, 0x1b, 0x68, 0x09, 0x60, 0x08, 0x48, 0x1a, + 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0a, 0xfa, 0xc2, + 0x90, 0x00, 0x69, 0x60, 0x99, 0x00, 0x60, 0xc8, + 0x49, 0x14, 0x20, 0x91, 0xf0, 0x17, 0xfb, 0x56, + 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x12, + 0x68, 0x00, 0x90, 0x01, 0x48, 0x11, 0x68, 0x00, + 0x49, 0x0f, 0x60, 0x08, 0x98, 0x01, 0x49, 0x0f, + 0x60, 0x08, 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, + 0xb0, 0x02, 0x20, 0x92, 0x49, 0x05, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x01, 0xe7, 0x8a, 0xb0, 0x01, + 0xe7, 0x88, 0x00, 0x00, 0xff, 0xff, 0xc3, 0xff, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x68, 0x00, 0x0c, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x82, 0x1c, 0x3c, + 0x68, 0xe5, 0x26, 0x00, 0x99, 0x03, 0x29, 0x01, + 0xd1, 0x00, 0x26, 0x01, 0x69, 0x60, 0x06, 0x80, + 0x0f, 0xc0, 0x42, 0xb0, 0xd1, 0x05, 0x20, 0x00, + 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x69, 0x60, 0x23, 0x20, 0x43, 0xdb, + 0x40, 0x18, 0x07, 0xf1, 0x0e, 0x89, 0x43, 0x08, + 0x61, 0x60, 0x06, 0x80, 0x48, 0x44, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, + 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, + 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, + 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, + 0xb0, 0x02, 0xe7, 0xde, 0x49, 0x3b, 0x20, 0x91, + 0xf0, 0x17, 0xfa, 0xf4, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x09, 0xfa, 0xfd, 0xe7, 0xf5, + 0x00, 0xa8, 0x49, 0x37, 0x58, 0x08, 0x42, 0xb8, + 0xd0, 0x05, 0x20, 0x92, 0x49, 0x33, 0x60, 0x08, + 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xc9, 0x48, 0x30, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x69, 0x20, + 0x28, 0x0b, 0xdb, 0x0e, 0x69, 0x20, 0x28, 0x12, + 0xdc, 0x0b, 0x01, 0x28, 0x4b, 0x2d, 0x18, 0xc1, + 0x91, 0x01, 0x1d, 0xe0, 0x30, 0x0d, 0x90, 0x00, + 0x98, 0x00, 0x68, 0x00, 0x99, 0x01, 0x60, 0x08, + 0xe0, 0x41, 0x48, 0x25, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x3d, 0x48, 0x27, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x28, 0xf0, 0x0a, + 0xfa, 0x0d, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, + 0x49, 0x1e, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x04, + 0xe7, 0x9f, 0x49, 0x20, 0x20, 0x91, 0xf0, 0x17, + 0xfa, 0xb5, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, + 0xf0, 0x0a, 0xfa, 0x57, 0x20, 0x92, 0x49, 0x1b, + 0x60, 0x08, 0x20, 0x01, 0x49, 0x1a, 0x68, 0x09, + 0x60, 0x08, 0x48, 0x19, 0x68, 0x01, 0x1c, 0x20, + 0xf0, 0x0a, 0xfa, 0x08, 0x90, 0x00, 0x69, 0x60, + 0x99, 0x00, 0x60, 0xc8, 0x49, 0x13, 0x20, 0x91, + 0xf0, 0x17, 0xfa, 0x9c, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0x48, 0x11, 0x68, 0x00, 0x90, 0x01, + 0x48, 0x10, 0x68, 0x00, 0x49, 0x0e, 0x60, 0x08, + 0x98, 0x01, 0x49, 0x0e, 0x60, 0x08, 0x20, 0x92, + 0x49, 0x0a, 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, + 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, + 0xe7, 0x6b, 0xb0, 0x02, 0xe7, 0x69, 0x00, 0x00, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x68, 0x00, 0x0c, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0xb0, 0x83, + 0x1c, 0x25, 0x69, 0x28, 0x28, 0x13, 0xd1, 0x04, + 0x20, 0x75, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0xee, 0x20, 0x04, 0x40, 0x38, + 0x08, 0x81, 0x91, 0x02, 0x69, 0x68, 0x23, 0xc0, + 0x43, 0xdb, 0x40, 0x18, 0x07, 0xb9, 0x0f, 0x89, + 0x01, 0x89, 0x43, 0x08, 0x61, 0x68, 0x06, 0x00, + 0x69, 0x68, 0x4b, 0x48, 0x40, 0x18, 0x99, 0x02, + 0x07, 0xc9, 0x0c, 0x49, 0x43, 0x08, 0x61, 0x68, + 0x04, 0x40, 0x48, 0x45, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0x2e, 0x19, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2e, 0x08, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x03, + 0xe7, 0xd0, 0x49, 0x3c, 0x20, 0x91, 0xf0, 0x17, + 0xfa, 0x35, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, + 0xf0, 0x09, 0xfa, 0x3e, 0xe7, 0xf5, 0x00, 0xb0, + 0x49, 0x37, 0x58, 0x08, 0x42, 0xa0, 0xd0, 0x05, + 0x20, 0x92, 0x49, 0x34, 0x60, 0x08, 0x20, 0xff, + 0xb0, 0x03, 0xe7, 0xbb, 0x48, 0x30, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x05, 0x69, 0x28, 0x28, 0x0b, + 0xdb, 0x0e, 0x69, 0x28, 0x28, 0x12, 0xdc, 0x0b, + 0x01, 0x30, 0x4b, 0x2e, 0x18, 0xc0, 0x90, 0x01, + 0x1d, 0xe8, 0x30, 0x0d, 0x90, 0x00, 0x98, 0x00, + 0x68, 0x00, 0x99, 0x01, 0x60, 0x08, 0xe0, 0x41, + 0x48, 0x25, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, + 0x48, 0x27, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, + 0xb0, 0x82, 0x1c, 0x30, 0xf0, 0x0a, 0xf9, 0x4e, + 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1f, + 0x60, 0x08, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x91, + 0x49, 0x20, 0x20, 0x91, 0xf0, 0x17, 0xf9, 0xf6, + 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, + 0xf9, 0x98, 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, + 0x20, 0x01, 0x49, 0x1b, 0x68, 0x09, 0x60, 0x08, + 0x48, 0x19, 0x68, 0x01, 0x1c, 0x28, 0xf0, 0x0a, + 0xf9, 0x49, 0x90, 0x00, 0x69, 0x68, 0x99, 0x00, + 0x60, 0xc8, 0x49, 0x14, 0x20, 0x91, 0xf0, 0x17, + 0xf9, 0xdd, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, + 0x48, 0x11, 0x68, 0x00, 0x90, 0x01, 0x48, 0x11, + 0x68, 0x00, 0x49, 0x0f, 0x60, 0x08, 0x98, 0x01, + 0x49, 0x0e, 0x60, 0x08, 0x20, 0x92, 0x49, 0x0b, + 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, 0x49, 0x05, + 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, 0xe7, 0x5d, + 0xb0, 0x03, 0xe7, 0x5b, 0xff, 0xff, 0xbf, 0xff, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x68, 0x00, 0x0c, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0x1c, 0x01, 0x20, 0x0d, 0x06, 0xc0, 0x60, 0x41, + 0x48, 0x02, 0x63, 0x81, 0x20, 0x00, 0x47, 0x70, + 0xe7, 0xfd, 0x00, 0x00, 0x68, 0x00, 0x0d, 0x00, + 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x40, 0x02, 0x00, + 0x0a, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, + 0x1c, 0x0a, 0x68, 0xd0, 0x47, 0x70, 0xe7, 0xfd, + 0x1c, 0x03, 0x1c, 0x0a, 0x1c, 0x19, 0x69, 0x08, + 0x28, 0x13, 0xd1, 0x01, 0x20, 0x75, 0x47, 0x70, + 0x69, 0x08, 0x28, 0x0b, 0xdb, 0x0b, 0x69, 0x08, + 0x28, 0x12, 0xdc, 0x08, 0x6d, 0x08, 0x60, 0x10, + 0x6d, 0x88, 0x60, 0x90, 0x6d, 0x48, 0x60, 0x50, + 0x6d, 0xc8, 0x60, 0xd0, 0xe0, 0x07, 0x6a, 0x88, + 0x60, 0x10, 0x6b, 0x08, 0x60, 0x90, 0x6a, 0xc8, + 0x60, 0x50, 0x6b, 0x48, 0x60, 0xd0, 0x20, 0x00, + 0xe7, 0xe5, 0xe7, 0xe4, 0x1c, 0x03, 0x1c, 0x0a, + 0x68, 0x10, 0x60, 0x18, 0x68, 0x90, 0x60, 0x98, + 0x68, 0x50, 0x60, 0x58, 0x68, 0xd0, 0x60, 0xd8, + 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x1c, 0x0a, + 0x69, 0x50, 0x05, 0x80, 0x0f, 0x80, 0x47, 0x70, + 0xe7, 0xfd, 0x1c, 0x01, 0x1c, 0x0a, 0x69, 0x50, + 0x12, 0x80, 0x07, 0x00, 0x0f, 0x00, 0x47, 0x70, + 0xe7, 0xfd, 0xb4, 0x80, 0x1c, 0x01, 0x1c, 0x0f, + 0x22, 0x01, 0x69, 0x78, 0x23, 0x20, 0x40, 0x18, + 0xd1, 0x00, 0x22, 0x00, 0x1c, 0x10, 0xbc, 0x80, + 0x47, 0x70, 0xe7, 0xfc, 0x1c, 0x01, 0x1c, 0x0b, + 0x69, 0x18, 0x28, 0x13, 0xd1, 0x01, 0x20, 0x75, + 0x47, 0x70, 0x69, 0x58, 0x06, 0x00, 0x0f, 0x82, + 0x69, 0x58, 0x04, 0x40, 0x0f, 0xc0, 0x00, 0x80, + 0x43, 0x02, 0x1c, 0x10, 0xe7, 0xf4, 0xe7, 0xf3, + 0x1c, 0x01, 0x20, 0x0d, 0x06, 0xc0, 0x61, 0x41, + 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x20, 0x0d, + 0x06, 0xc0, 0x69, 0x40, 0x1c, 0x01, 0x1c, 0x08, + 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x22, 0x00, + 0x29, 0x01, 0xd1, 0x00, 0x22, 0x01, 0x20, 0x0d, + 0x06, 0xc0, 0x68, 0xc0, 0x1c, 0x03, 0x2b, 0x02, + 0xd1, 0x01, 0x29, 0x00, 0xd1, 0x02, 0x20, 0x0d, + 0x06, 0xc0, 0x60, 0xc2, 0x20, 0x00, 0x47, 0x70, + 0xe7, 0xfd, 0x21, 0x01, 0x20, 0x0d, 0x06, 0xc0, + 0x68, 0xc0, 0x1c, 0x02, 0x2a, 0x00, 0xd1, 0x00, + 0x21, 0x00, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, + 0x1c, 0x01, 0x1c, 0x0a, 0x69, 0x10, 0x47, 0x70, + 0xe7, 0xfd, 0xb4, 0x90, 0x1c, 0x07, 0x1c, 0x0a, + 0x1c, 0x39, 0x69, 0x08, 0x28, 0x13, 0xd0, 0x05, + 0x69, 0x08, 0x28, 0x0b, 0xdb, 0x05, 0x69, 0x08, + 0x28, 0x12, 0xdc, 0x02, 0x20, 0x86, 0xbc, 0x90, + 0x47, 0x70, 0x6b, 0x8c, 0x69, 0x48, 0x23, 0x04, + 0x40, 0x18, 0xd0, 0x00, 0x08, 0x64, 0x69, 0x08, + 0x00, 0x80, 0x4b, 0x03, 0x58, 0x18, 0x43, 0x60, + 0x60, 0x10, 0x20, 0x00, 0xe7, 0xef, 0xe7, 0xee, + 0x2e, 0x03, 0x32, 0xf4, 0xb5, 0xf3, 0x1c, 0x07, + 0xb0, 0x81, 0x9c, 0x02, 0x69, 0x20, 0x28, 0x13, + 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x08, + 0x69, 0x20, 0x28, 0x12, 0xdc, 0x05, 0x20, 0x86, + 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x68, 0xe5, 0x68, 0x38, 0x64, 0x20, + 0x68, 0x7e, 0x64, 0x66, 0x08, 0xb6, 0x61, 0xa6, + 0x48, 0x3f, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, + 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, + 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, + 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xe0, + 0x49, 0x36, 0x20, 0x91, 0xf0, 0x17, 0xf8, 0xba, + 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, + 0xf8, 0xc3, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x32, + 0x58, 0x08, 0x99, 0x02, 0x42, 0x88, 0xd0, 0x05, + 0x20, 0x92, 0x49, 0x2e, 0x60, 0x08, 0x20, 0x86, + 0xb0, 0x01, 0xe7, 0xca, 0x48, 0x2a, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x06, 0x01, 0x28, 0x4b, 0x2b, + 0x18, 0xc0, 0x90, 0x00, 0x98, 0x00, 0x60, 0x06, + 0xe0, 0x41, 0x48, 0x25, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x3d, 0x48, 0x27, 0x68, 0x00, 0x28, 0x01, + 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x28, 0xf0, 0x09, + 0xff, 0xdd, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, + 0x49, 0x1e, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, + 0xe7, 0xab, 0x49, 0x20, 0x20, 0x91, 0xf0, 0x17, + 0xf8, 0x85, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, + 0xf0, 0x0a, 0xf8, 0x27, 0x20, 0x92, 0x49, 0x1b, + 0x60, 0x08, 0x20, 0x01, 0x49, 0x1a, 0x68, 0x09, + 0x60, 0x08, 0x48, 0x19, 0x68, 0x01, 0x1c, 0x20, + 0xf0, 0x09, 0xff, 0xd8, 0x90, 0x00, 0x69, 0xa0, + 0x99, 0x00, 0x61, 0x08, 0x49, 0x13, 0x20, 0x91, + 0xf0, 0x17, 0xf8, 0x6c, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0x48, 0x11, 0x68, 0x00, 0x90, 0x01, + 0x48, 0x10, 0x68, 0x00, 0x49, 0x0e, 0x60, 0x08, + 0x98, 0x01, 0x49, 0x0e, 0x60, 0x08, 0x20, 0x92, + 0x49, 0x0a, 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, + 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, + 0xe7, 0x77, 0xb0, 0x01, 0xe7, 0x75, 0x00, 0x00, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x68, 0x00, 0x0c, 0x04, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x7d, 0xc0, + 0xb4, 0x80, 0x1c, 0x01, 0x06, 0x0b, 0x0e, 0x1b, + 0x22, 0x01, 0x2a, 0x19, 0xd3, 0x02, 0xe0, 0x0f, + 0x32, 0x01, 0xe7, 0xfa, 0x00, 0x90, 0x4f, 0x08, + 0x58, 0x38, 0x68, 0x80, 0x02, 0x00, 0x0e, 0x00, + 0x42, 0x98, 0xd1, 0x04, 0x00, 0x90, 0x4f, 0x04, + 0x58, 0x38, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xef, + 0x20, 0x00, 0xe7, 0xfa, 0xe7, 0xf9, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x60, 0xb4, 0x90, 0x1c, 0x07, + 0x1c, 0x0a, 0x06, 0x38, 0x16, 0x01, 0x48, 0x20, + 0x60, 0x02, 0x48, 0x20, 0x68, 0x80, 0x23, 0x33, + 0x06, 0x5b, 0x65, 0xd8, 0x48, 0x1d, 0x68, 0xc0, + 0x23, 0x33, 0x06, 0x5b, 0x66, 0x18, 0x48, 0x1c, + 0x4b, 0x1a, 0x60, 0x98, 0x48, 0x1b, 0x4b, 0x19, + 0x60, 0xd8, 0x20, 0x01, 0x23, 0x33, 0x06, 0x5b, + 0x66, 0xd8, 0x48, 0x19, 0x68, 0x04, 0x23, 0x01, + 0x04, 0xdb, 0x43, 0x23, 0x60, 0x03, 0x48, 0x16, + 0x68, 0x04, 0x23, 0x01, 0x04, 0xdb, 0x43, 0x9c, + 0x1c, 0x23, 0x60, 0x03, 0x29, 0x00, 0xd1, 0x10, + 0x20, 0xff, 0x30, 0x14, 0x23, 0x1b, 0x06, 0x9b, + 0x62, 0x18, 0x48, 0x10, 0x68, 0x04, 0x23, 0xff, + 0x33, 0x01, 0x43, 0x9c, 0x1c, 0x23, 0x60, 0x03, + 0x48, 0x0d, 0x23, 0x1b, 0x06, 0x9b, 0x64, 0x18, + 0xe0, 0x08, 0x20, 0xff, 0x30, 0x14, 0x23, 0x1b, + 0x06, 0x9b, 0x62, 0x18, 0x48, 0x02, 0x68, 0x00, + 0x4b, 0x08, 0x60, 0x18, 0xbc, 0x90, 0x47, 0x70, + 0x2e, 0x08, 0x5e, 0x58, 0x2e, 0x08, 0x7c, 0x24, + 0xcc, 0x1f, 0xe0, 0x00, 0xcc, 0x1f, 0xfe, 0x00, + 0x6c, 0x00, 0x00, 0x40, 0x6c, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x82, 0x18, 0x6c, 0x00, 0x00, 0x80, + 0xb4, 0xf0, 0x1c, 0x01, 0xb0, 0x82, 0x23, 0x1b, + 0x06, 0x9b, 0x6a, 0x1b, 0x1c, 0x18, 0x27, 0x00, + 0x22, 0x00, 0x08, 0x40, 0x00, 0x40, 0x4b, 0xaf, + 0x68, 0x1c, 0x08, 0x64, 0x00, 0x64, 0x60, 0x1c, + 0x4b, 0xad, 0x68, 0x1b, 0x1c, 0x1d, 0x23, 0x1b, + 0x06, 0x9b, 0x6c, 0x1b, 0x93, 0x01, 0x23, 0xff, + 0x33, 0x01, 0x40, 0x03, 0xd0, 0x00, 0x22, 0xff, + 0x23, 0x01, 0x04, 0x9b, 0x40, 0x03, 0xd0, 0x1b, + 0x4c, 0xa4, 0x68, 0x26, 0x23, 0x01, 0x04, 0x9b, + 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x23, 0x4c, 0xa1, + 0x68, 0x26, 0x23, 0x01, 0x43, 0x33, 0x60, 0x23, + 0x23, 0x00, 0x93, 0x00, 0x9b, 0x00, 0x2b, 0x0a, + 0xdb, 0x04, 0xe0, 0x04, 0x9b, 0x00, 0x33, 0x01, + 0x93, 0x00, 0xe7, 0xf7, 0xe7, 0xfa, 0x4b, 0x99, + 0x68, 0x1c, 0x08, 0x64, 0x00, 0x64, 0x60, 0x1c, + 0x23, 0x01, 0x02, 0x9b, 0x40, 0x0b, 0xd0, 0x29, + 0x23, 0x01, 0x02, 0xdb, 0x40, 0x0b, 0xd0, 0x01, + 0x4b, 0x94, 0x40, 0x18, 0x23, 0x01, 0x03, 0x1b, + 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x01, 0x05, 0x9b, + 0x43, 0x18, 0x4b, 0x91, 0x40, 0x18, 0x02, 0x4c, + 0x23, 0x7f, 0x02, 0x5b, 0x40, 0x23, 0x43, 0x18, + 0x23, 0x40, 0x40, 0x0b, 0xd0, 0x03, 0x23, 0x01, + 0x04, 0x5b, 0x43, 0x18, 0xe0, 0x0a, 0x4b, 0x8b, + 0x40, 0x18, 0x23, 0x20, 0x40, 0x0b, 0xd0, 0x03, + 0x23, 0x01, 0x04, 0x1b, 0x43, 0x18, 0xe0, 0x01, + 0x4b, 0x87, 0x40, 0x18, 0x23, 0x1b, 0x06, 0x9b, + 0x62, 0x18, 0xe0, 0xfc, 0x23, 0x04, 0x40, 0x0b, + 0xd0, 0x0f, 0x4c, 0x7e, 0x68, 0x26, 0x23, 0x01, + 0x43, 0x33, 0x60, 0x23, 0x4b, 0x81, 0x68, 0x9b, + 0x24, 0x33, 0x06, 0x64, 0x65, 0xe3, 0x4b, 0x7f, + 0x68, 0xdb, 0x24, 0x33, 0x06, 0x64, 0x66, 0x23, + 0xe0, 0xe9, 0x23, 0x01, 0x03, 0x5b, 0x40, 0x0b, + 0xd0, 0x13, 0x4b, 0x7a, 0x68, 0x9b, 0x24, 0x33, + 0x06, 0x64, 0x65, 0xe3, 0x4b, 0x77, 0x68, 0xdb, + 0x24, 0x33, 0x06, 0x64, 0x66, 0x23, 0x23, 0x01, + 0x24, 0x33, 0x06, 0x64, 0x66, 0xe3, 0x4c, 0x6d, + 0x68, 0x26, 0x23, 0x01, 0x43, 0x33, 0x60, 0x23, + 0xe0, 0xd1, 0x07, 0xcb, 0x0f, 0xdb, 0xd0, 0x02, + 0x23, 0x02, 0x43, 0x18, 0xe0, 0x05, 0x23, 0x02, + 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x02, 0x43, 0xdb, + 0x40, 0x18, 0x23, 0x07, 0x01, 0xdb, 0x40, 0x0b, + 0xd0, 0x0f, 0x23, 0x0c, 0x43, 0xdb, 0x40, 0x18, + 0x23, 0xff, 0x33, 0x01, 0x40, 0x0b, 0xd0, 0x02, + 0x23, 0x04, 0x43, 0x18, 0xe0, 0x05, 0x23, 0x01, + 0x02, 0x5b, 0x40, 0x0b, 0xd0, 0x01, 0x23, 0x08, + 0x43, 0x18, 0x23, 0x01, 0x04, 0x1b, 0x40, 0x0b, + 0xd0, 0x08, 0x23, 0x01, 0x04, 0x9b, 0x43, 0x98, + 0x1c, 0x04, 0x20, 0x01, 0x04, 0xc0, 0x43, 0x20, + 0x23, 0x01, 0x43, 0x18, 0x23, 0x78, 0x40, 0x0b, + 0xd0, 0x73, 0x23, 0x30, 0x40, 0x03, 0xd0, 0x06, + 0x2b, 0x10, 0xd0, 0x04, 0x2b, 0x20, 0xd0, 0x42, + 0x2b, 0x30, 0xd0, 0x40, 0xe0, 0x81, 0x23, 0x10, + 0x40, 0x0b, 0xd1, 0x02, 0x23, 0x08, 0x40, 0x0b, + 0xd0, 0x08, 0x23, 0x30, 0x43, 0xdb, 0x40, 0x18, + 0x23, 0x10, 0x40, 0x0b, 0xd0, 0x01, 0x23, 0x10, + 0x43, 0x18, 0xe0, 0x2f, 0x23, 0x30, 0x43, 0xdb, + 0x40, 0x18, 0x23, 0x20, 0x40, 0x0b, 0xd0, 0x02, + 0x23, 0x20, 0x43, 0x18, 0xe0, 0x01, 0x23, 0x30, + 0x43, 0x18, 0x23, 0x01, 0x43, 0x18, 0x23, 0x1b, + 0x06, 0x9b, 0x62, 0x18, 0x27, 0xff, 0x2a, 0x00, + 0xd0, 0x04, 0x4b, 0x43, 0x68, 0x1b, 0x4c, 0x43, + 0x60, 0x23, 0xe0, 0x17, 0x07, 0xab, 0x0f, 0x9b, + 0xd0, 0x09, 0x2b, 0x01, 0xd0, 0x02, 0x2b, 0x02, + 0xd0, 0x0a, 0xe0, 0x0e, 0x4b, 0x3e, 0x24, 0x1b, + 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x0a, 0x4b, 0x3d, + 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x05, + 0x4b, 0x3b, 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, + 0xe0, 0x00, 0xe7, 0xff, 0xe0, 0x42, 0x23, 0x40, + 0x40, 0x0b, 0xd1, 0x02, 0x23, 0x20, 0x40, 0x0b, + 0xd0, 0x0b, 0x23, 0x30, 0x43, 0xdb, 0x40, 0x18, + 0x23, 0x20, 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x20, + 0x43, 0x18, 0xe0, 0x01, 0x23, 0x30, 0x43, 0x18, + 0xe0, 0x2e, 0x23, 0x30, 0x43, 0xdb, 0x40, 0x18, + 0x23, 0x10, 0x40, 0x0b, 0xd0, 0x01, 0x23, 0x10, + 0x43, 0x18, 0x23, 0x01, 0x43, 0x18, 0x23, 0x1b, + 0x06, 0x9b, 0x62, 0x18, 0x27, 0xff, 0x2a, 0x00, + 0xd0, 0x04, 0x4b, 0x23, 0x68, 0x1b, 0x4c, 0x23, + 0x60, 0x23, 0xe0, 0x19, 0x07, 0xab, 0x0f, 0x9b, + 0xe0, 0x00, 0xe0, 0x17, 0xd0, 0x09, 0x2b, 0x01, + 0xd0, 0x02, 0x2b, 0x02, 0xd0, 0x0a, 0xe0, 0x0e, + 0x4b, 0x20, 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, + 0xe0, 0x0a, 0x4b, 0x1f, 0x24, 0x1b, 0x06, 0xa4, + 0x64, 0x23, 0xe0, 0x05, 0x4b, 0x1d, 0x24, 0x1b, + 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x00, 0xe7, 0xff, + 0xe0, 0x00, 0xe7, 0xff, 0x2f, 0x00, 0xd1, 0x12, + 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, 0x23, 0x00, + 0x93, 0x00, 0x9b, 0x00, 0x2b, 0x0a, 0xdb, 0x04, + 0xe0, 0x04, 0x9b, 0x00, 0x33, 0x01, 0x93, 0x00, + 0xe7, 0xf7, 0xe7, 0xfa, 0x4b, 0x03, 0x68, 0x1c, + 0x08, 0x64, 0x00, 0x64, 0x60, 0x1c, 0xb0, 0x02, + 0xbc, 0xf0, 0x47, 0x70, 0x6c, 0x00, 0x00, 0x20, + 0x6c, 0x00, 0x68, 0x00, 0xff, 0xbf, 0xff, 0xff, + 0xff, 0xfe, 0x01, 0xff, 0xff, 0xfd, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xff, 0x2e, 0x08, 0x7c, 0x24, + 0x2e, 0x08, 0x5e, 0x58, 0x6c, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x98, 0x60, 0x00, 0x01, 0x58, 0x60, + 0x00, 0x02, 0x54, 0x28, 0x00, 0x00, 0x82, 0x18, + 0x00, 0x01, 0x42, 0x18, 0x00, 0x02, 0x42, 0x18, + 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x81, 0x98, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, 0x98, 0x00, + 0x28, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x01, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x33, 0x06, 0x40, 0x6e, 0x00, 0x21, 0x33, + 0x06, 0x49, 0x6d, 0xc9, 0x1a, 0x46, 0x48, 0x12, + 0x6c, 0x80, 0x1c, 0x04, 0x48, 0x10, 0x6c, 0xc0, + 0x1c, 0x05, 0x42, 0xac, 0xd9, 0x09, 0x1b, 0x60, + 0x21, 0x64, 0x43, 0x41, 0x1c, 0x30, 0xf0, 0x09, + 0xff, 0xcb, 0x21, 0x64, 0x1a, 0x08, 0x60, 0x38, + 0xe0, 0x06, 0x1b, 0x28, 0x21, 0x64, 0x43, 0x41, + 0x1c, 0x30, 0xf0, 0x09, 0xff, 0xc1, 0x60, 0x38, + 0x42, 0xac, 0xd1, 0x03, 0x20, 0x31, 0xb0, 0x01, + 0xe7, 0xd6, 0xe0, 0x02, 0x20, 0x00, 0xb0, 0x01, + 0xe7, 0xd2, 0xb0, 0x01, 0xe7, 0xd0, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x80, 0xb5, 0xff, 0x1c, 0x14, + 0x1c, 0x1f, 0xb0, 0x82, 0x98, 0x02, 0x06, 0x01, + 0x0e, 0x09, 0x91, 0x00, 0x98, 0x0b, 0x06, 0x03, + 0x16, 0x1b, 0x93, 0x01, 0xb0, 0x84, 0x99, 0x04, + 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x06, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x9b, 0x05, 0x2b, 0x1f, 0xdd, 0x02, 0x20, 0xaf, + 0xb0, 0x06, 0xe7, 0xf5, 0x98, 0x07, 0x90, 0x01, + 0x2f, 0x00, 0xd0, 0x47, 0xb0, 0x81, 0x98, 0x08, + 0x22, 0x00, 0x92, 0x00, 0x22, 0x1b, 0x06, 0x92, + 0x6a, 0x12, 0x23, 0x01, 0x05, 0x1b, 0x40, 0x1a, + 0xd0, 0x01, 0x22, 0xff, 0x92, 0x00, 0x25, 0x00, + 0x08, 0x62, 0x42, 0xaa, 0xd8, 0x02, 0xe0, 0x34, + 0x35, 0x01, 0xe7, 0xf9, 0x9a, 0x00, 0x2a, 0x00, + 0xd0, 0x1e, 0x88, 0x02, 0x23, 0xff, 0x02, 0x1b, + 0x40, 0x1a, 0x12, 0x12, 0x88, 0x03, 0x02, 0x1b, + 0x43, 0x1a, 0x04, 0x11, 0x0c, 0x09, 0x2f, 0x00, + 0xda, 0x05, 0x42, 0x7a, 0x41, 0x11, 0x1c, 0x0b, + 0x04, 0x19, 0x0c, 0x09, 0xe0, 0x03, 0x40, 0xb9, + 0x1c, 0x0a, 0x04, 0x11, 0x0c, 0x09, 0x22, 0xff, + 0x02, 0x12, 0x40, 0x0a, 0x12, 0x12, 0x02, 0x0b, + 0x43, 0x13, 0x80, 0x03, 0x30, 0x02, 0xe0, 0x0f, + 0x2f, 0x00, 0xda, 0x07, 0x88, 0x02, 0x42, 0x7e, + 0x41, 0x32, 0x04, 0x12, 0x0c, 0x12, 0x80, 0x02, + 0x30, 0x02, 0xe0, 0x05, 0x88, 0x02, 0x40, 0xba, + 0x04, 0x12, 0x0c, 0x12, 0x80, 0x02, 0x30, 0x02, + 0xe7, 0xca, 0xb0, 0x01, 0x49, 0x23, 0x91, 0x03, + 0x20, 0x01, 0x06, 0x00, 0x99, 0x03, 0x60, 0x08, + 0x48, 0x21, 0x6c, 0x80, 0x49, 0x20, 0x6c, 0xc9, + 0x1a, 0x40, 0x90, 0x00, 0x98, 0x00, 0x28, 0x00, + 0xdc, 0x09, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x00, + 0x21, 0x33, 0x06, 0x49, 0x6d, 0xc9, 0x1a, 0x40, + 0x99, 0x00, 0x18, 0x40, 0x90, 0x00, 0x98, 0x00, + 0x23, 0x3b, 0x01, 0xdb, 0x42, 0x98, 0xda, 0x02, + 0x20, 0x06, 0xf0, 0x08, 0xfd, 0x8d, 0x98, 0x00, + 0x23, 0x3b, 0x01, 0xdb, 0x42, 0x98, 0xdb, 0xdf, + 0x98, 0x00, 0x42, 0x84, 0xd9, 0x02, 0x98, 0x00, + 0x90, 0x02, 0xe0, 0x00, 0x94, 0x02, 0x22, 0x04, + 0x99, 0x03, 0xb4, 0x06, 0x9b, 0x07, 0x9a, 0x04, + 0x99, 0x06, 0x98, 0x03, 0xf0, 0x04, 0xfb, 0x8c, + 0xb0, 0x02, 0x98, 0x02, 0x1a, 0x24, 0x98, 0x01, + 0x99, 0x02, 0x18, 0x40, 0x90, 0x01, 0x20, 0x00, + 0x90, 0x00, 0x2c, 0x00, 0xd1, 0xc4, 0x20, 0x00, + 0xb0, 0x06, 0xe7, 0x65, 0xb0, 0x04, 0xb0, 0x02, + 0xe7, 0x62, 0x00, 0x00, 0x9e, 0x00, 0x08, 0x00, + 0x66, 0x00, 0x00, 0x80, 0x20, 0x1b, 0x06, 0x80, + 0x6a, 0x00, 0x07, 0xc0, 0x0f, 0xc0, 0x4a, 0x03, + 0x68, 0x12, 0x1c, 0x01, 0x43, 0x11, 0x1c, 0x08, + 0x47, 0x70, 0xe7, 0xfd, 0x6c, 0x00, 0x08, 0x00, + 0xb4, 0x90, 0x1c, 0x01, 0x20, 0x1b, 0x06, 0x80, + 0x6a, 0x00, 0x1c, 0x04, 0x48, 0x1b, 0x68, 0x00, + 0x1c, 0x07, 0x20, 0x30, 0x40, 0x20, 0xd0, 0x06, + 0x28, 0x10, 0xd0, 0x06, 0x28, 0x20, 0xd0, 0x06, + 0x28, 0x30, 0xd0, 0x06, 0xe0, 0x07, 0x22, 0x01, + 0xe0, 0x08, 0x22, 0x02, 0xe0, 0x06, 0x22, 0x04, + 0xe0, 0x04, 0x22, 0x08, 0xe0, 0x02, 0x20, 0x30, + 0xbc, 0x90, 0x47, 0x70, 0x20, 0x03, 0x07, 0x40, + 0x40, 0x38, 0x0f, 0x40, 0xd0, 0x04, 0x28, 0x01, + 0xd0, 0x05, 0x28, 0x02, 0xd0, 0x06, 0xe0, 0x08, + 0x23, 0x10, 0x43, 0x1a, 0xe0, 0x07, 0x23, 0x20, + 0x43, 0x1a, 0xe0, 0x04, 0x23, 0x40, 0x43, 0x1a, + 0xe0, 0x01, 0x20, 0x30, 0xe7, 0xe8, 0x20, 0x01, + 0x05, 0xc0, 0x40, 0x38, 0xd1, 0x01, 0x23, 0x80, + 0x43, 0x1a, 0x60, 0x0a, 0x20, 0x00, 0xe7, 0xdf, + 0xe7, 0xde, 0x00, 0x00, 0x6c, 0x00, 0x08, 0x00, + 0x1c, 0x01, 0x48, 0x01, 0x60, 0x01, 0x47, 0x70, + 0x6c, 0x00, 0x00, 0x80, 0x1c, 0x01, 0x29, 0x1f, + 0xdd, 0x01, 0x20, 0xaf, 0x47, 0x70, 0x20, 0x80, + 0x6c, 0x00, 0x60, 0x01, 0x20, 0x00, 0xe7, 0xf9, + 0xe7, 0xf8, 0xb5, 0xf3, 0x1c, 0x0a, 0xb0, 0x81, + 0x98, 0x01, 0x06, 0x03, 0x0e, 0x1b, 0x93, 0x00, + 0xb0, 0x81, 0x20, 0x1b, 0x06, 0x80, 0x6a, 0x00, + 0x1c, 0x01, 0x25, 0x00, 0x20, 0x00, 0x90, 0x00, + 0x20, 0x1b, 0x06, 0x80, 0x6c, 0x00, 0x1c, 0x04, + 0x27, 0x00, 0x9b, 0x01, 0x2b, 0x20, 0xdb, 0x05, + 0x20, 0xa2, 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x20, 0x33, 0x06, 0x40, + 0x6d, 0xc0, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, + 0x9b, 0x01, 0x00, 0xdb, 0x4e, 0x5f, 0x68, 0x36, + 0x19, 0x9b, 0x60, 0x58, 0x20, 0xff, 0x30, 0x01, + 0x40, 0x08, 0xd0, 0x01, 0x20, 0xff, 0x90, 0x00, + 0x23, 0x01, 0x04, 0xdb, 0x43, 0x99, 0x1c, 0x08, + 0x21, 0x01, 0x04, 0x89, 0x43, 0x01, 0x20, 0x01, + 0x03, 0x00, 0x40, 0x10, 0xd0, 0x05, 0x06, 0x90, + 0x0e, 0x80, 0xd0, 0x02, 0x23, 0x01, 0x05, 0x1b, + 0x43, 0x19, 0x23, 0x30, 0x43, 0xdb, 0x40, 0x19, + 0x05, 0x10, 0x0d, 0x00, 0x28, 0x40, 0xd0, 0x48, + 0xdc, 0x0e, 0x28, 0x08, 0xd0, 0x32, 0xdc, 0x06, + 0x28, 0x01, 0xd0, 0x1e, 0x28, 0x02, 0xd0, 0x21, + 0x28, 0x04, 0xd0, 0x26, 0xe0, 0x67, 0x28, 0x10, + 0xd0, 0x2f, 0x28, 0x20, 0xd0, 0x32, 0xe0, 0x62, + 0x23, 0x01, 0x02, 0x5b, 0x42, 0x98, 0xd0, 0x49, + 0xdc, 0x06, 0x28, 0x80, 0xd0, 0x38, 0x23, 0xff, + 0x33, 0x01, 0x42, 0x98, 0xd0, 0x3b, 0xe0, 0x56, + 0x23, 0x01, 0x02, 0x9b, 0x42, 0x98, 0xd0, 0x44, + 0x23, 0x01, 0x02, 0xdb, 0x42, 0x98, 0xd0, 0x47, + 0xe0, 0x4d, 0x4b, 0x3d, 0x42, 0x9c, 0xd0, 0x00, + 0x4f, 0x3b, 0xe0, 0x49, 0x23, 0x10, 0x43, 0x19, + 0x4b, 0x39, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x38, + 0xe0, 0x42, 0x4b, 0x38, 0x42, 0x9c, 0xd0, 0x00, + 0x4f, 0x36, 0xe0, 0x3d, 0x23, 0x10, 0x43, 0x19, + 0x4b, 0x34, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x33, + 0xe0, 0x36, 0x4b, 0x33, 0x42, 0x9c, 0xd0, 0x00, + 0x4f, 0x31, 0xe0, 0x31, 0x23, 0x10, 0x43, 0x19, + 0x4b, 0x2f, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x2e, + 0xe0, 0x2a, 0x23, 0x20, 0x43, 0x19, 0x4b, 0x2d, + 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x2b, 0xe0, 0x23, + 0x23, 0x30, 0x43, 0x19, 0x4b, 0x29, 0x42, 0x9c, + 0xd0, 0x00, 0x4f, 0x28, 0xe0, 0x1c, 0x23, 0x20, + 0x43, 0x19, 0x4b, 0x27, 0x42, 0x9c, 0xd0, 0x00, + 0x4f, 0x25, 0xe0, 0x15, 0x23, 0x30, 0x43, 0x19, + 0x4b, 0x23, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x22, + 0xe0, 0x0e, 0x23, 0x20, 0x43, 0x19, 0x4b, 0x21, + 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x1f, 0xe0, 0x07, + 0x23, 0x30, 0x43, 0x19, 0x4b, 0x1d, 0x42, 0x9c, + 0xd0, 0x00, 0x4f, 0x1c, 0xe0, 0x00, 0xe7, 0xff, + 0x98, 0x00, 0x28, 0x00, 0xd0, 0x0a, 0x23, 0x01, + 0x43, 0x19, 0x20, 0x1b, 0x06, 0x80, 0x62, 0x01, + 0x48, 0x17, 0x68, 0x00, 0x4b, 0x17, 0x60, 0x18, + 0x25, 0xff, 0xe0, 0x0e, 0x23, 0x01, 0x43, 0x19, + 0x2f, 0x00, 0xd0, 0x07, 0x20, 0x1b, 0x06, 0x80, + 0x62, 0x01, 0x20, 0x1b, 0x06, 0x80, 0x64, 0x07, + 0x25, 0xff, 0xe0, 0x02, 0x20, 0x1b, 0x06, 0x80, + 0x62, 0x01, 0x2d, 0x00, 0xd1, 0x04, 0x48, 0x0e, + 0x68, 0x03, 0x08, 0x5b, 0x00, 0x5b, 0x60, 0x03, + 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x36, 0xb0, 0x01, + 0xb0, 0x01, 0xe7, 0x33, 0x2e, 0x08, 0x5d, 0xdc, + 0x00, 0x00, 0x82, 0x18, 0x00, 0x01, 0x42, 0x18, + 0x00, 0x02, 0x42, 0x18, 0x00, 0x00, 0x98, 0x60, + 0x00, 0x01, 0x58, 0x60, 0x00, 0x02, 0x54, 0x28, + 0x2e, 0x08, 0x5e, 0x58, 0x6c, 0x00, 0x00, 0x80, + 0x6c, 0x00, 0x00, 0x20, 0xb5, 0xf3, 0x1c, 0x0f, + 0xb0, 0x82, 0x49, 0x2c, 0x46, 0x68, 0x22, 0x08, + 0xf0, 0x09, 0xfe, 0x14, 0x20, 0x04, 0xf7, 0xff, + 0xfc, 0x23, 0x48, 0x29, 0x68, 0x80, 0x21, 0x33, + 0x06, 0x49, 0x65, 0xc8, 0x48, 0x26, 0x68, 0xc0, + 0x21, 0x33, 0x06, 0x49, 0x66, 0x08, 0x48, 0x25, + 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, + 0x20, 0x01, 0x21, 0x33, 0x06, 0x49, 0x67, 0xc8, + 0x48, 0x21, 0x68, 0x01, 0x31, 0xff, 0x31, 0xff, + 0x31, 0x02, 0x60, 0x01, 0x1c, 0x78, 0x12, 0x00, + 0xab, 0x01, 0x70, 0x18, 0x1c, 0x78, 0xab, 0x01, + 0x70, 0x58, 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc5, + 0x4b, 0x1a, 0x43, 0x1d, 0x26, 0x00, 0x2e, 0x10, + 0xdb, 0x02, 0xe0, 0x18, 0x36, 0x01, 0xe7, 0xfa, + 0x24, 0x00, 0x2c, 0x07, 0xd3, 0x02, 0xe0, 0x06, + 0x34, 0x01, 0xe7, 0xfa, 0x46, 0x68, 0x5d, 0x01, + 0x70, 0x29, 0x35, 0x01, 0xe7, 0xf8, 0x24, 0x00, + 0x42, 0xbc, 0xdb, 0x02, 0xe0, 0x06, 0x34, 0x01, + 0xe7, 0xfa, 0x98, 0x02, 0x5d, 0x01, 0x70, 0x29, + 0x35, 0x01, 0xe7, 0xf8, 0xe7, 0xe6, 0x20, 0x33, + 0x06, 0x40, 0x66, 0x05, 0x48, 0x0a, 0x68, 0x01, + 0x23, 0x01, 0x05, 0x5b, 0x43, 0x19, 0x60, 0x01, + 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x03, 0x32, 0x9c, + 0x2e, 0x08, 0x7c, 0x24, 0x66, 0x00, 0x00, 0x70, + 0x66, 0x00, 0x00, 0x5c, 0xcc, 0x00, 0x00, 0x00, + 0x6c, 0x00, 0x00, 0x20, 0xb5, 0xf7, 0x1c, 0x04, + 0x1c, 0x0f, 0x06, 0x20, 0x0e, 0x00, 0x06, 0x3d, + 0x0e, 0x2d, 0x99, 0x02, 0x06, 0x0a, 0x0e, 0x12, + 0x21, 0x02, 0x40, 0x01, 0xd0, 0x04, 0x21, 0xff, + 0x4b, 0x2f, 0x68, 0x1b, 0x72, 0x19, 0xe0, 0x0c, + 0x49, 0x2d, 0x68, 0x09, 0x7a, 0x09, 0x29, 0xff, + 0xd1, 0x03, 0x21, 0x00, 0x4b, 0x2a, 0x68, 0x1b, + 0x60, 0x19, 0x21, 0x00, 0x4b, 0x28, 0x68, 0x1b, + 0x72, 0x19, 0x07, 0xc1, 0x0f, 0xc9, 0xd0, 0x04, + 0x21, 0xff, 0x4b, 0x25, 0x68, 0x1b, 0x72, 0x59, + 0xe0, 0x0c, 0x49, 0x23, 0x68, 0x09, 0x7a, 0x49, + 0x29, 0xff, 0xd1, 0x03, 0x21, 0x00, 0x4b, 0x20, + 0x68, 0x1b, 0x60, 0x59, 0x21, 0x00, 0x4b, 0x1e, + 0x68, 0x1b, 0x72, 0x59, 0x2d, 0x01, 0xd1, 0x0f, + 0x49, 0x1c, 0x68, 0x0e, 0x23, 0x01, 0x05, 0x5b, + 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x0b, 0x49, 0x1a, + 0x68, 0x09, 0x78, 0x09, 0x23, 0x02, 0x43, 0x19, + 0x4b, 0x17, 0x68, 0x1b, 0x70, 0x19, 0xe0, 0x0e, + 0x49, 0x14, 0x68, 0x0e, 0x23, 0x01, 0x05, 0x5b, + 0x43, 0x33, 0x60, 0x0b, 0x49, 0x12, 0x68, 0x09, + 0x78, 0x09, 0x23, 0x02, 0x43, 0xdb, 0x40, 0x19, + 0x4b, 0x0f, 0x68, 0x1b, 0x70, 0x19, 0x49, 0x0f, + 0x62, 0x4a, 0x2a, 0x01, 0xd1, 0x08, 0x49, 0x0c, + 0x68, 0x09, 0x78, 0x09, 0x23, 0x01, 0x43, 0x19, + 0x4b, 0x09, 0x68, 0x1b, 0x70, 0x19, 0xe0, 0x07, + 0x49, 0x07, 0x68, 0x09, 0x78, 0x09, 0x08, 0x49, + 0x00, 0x49, 0x4b, 0x05, 0x68, 0x1b, 0x70, 0x19, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x5e, 0x5c, 0x6c, 0x00, 0x00, 0x20, + 0x2e, 0x08, 0x5e, 0x60, 0xcc, 0x00, 0x0f, 0x80, + 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x68, 0x38, + 0x49, 0x23, 0x68, 0x09, 0x60, 0xc8, 0x68, 0x78, + 0x49, 0x21, 0x68, 0x09, 0x61, 0x08, 0x68, 0xb8, + 0x49, 0x1f, 0x68, 0x09, 0x61, 0x48, 0x68, 0xf8, + 0x49, 0x1d, 0x68, 0x09, 0x61, 0x88, 0x7d, 0x38, + 0x49, 0x1b, 0x68, 0x09, 0x31, 0x20, 0x70, 0x08, + 0x7d, 0x78, 0x49, 0x19, 0x68, 0x09, 0x31, 0x20, + 0x70, 0x48, 0x69, 0x38, 0x49, 0x16, 0x68, 0x09, + 0x61, 0xc8, 0x7d, 0xb8, 0x49, 0x14, 0x68, 0x09, + 0x31, 0x20, 0x70, 0x88, 0x68, 0x10, 0x49, 0x12, + 0x68, 0x09, 0x62, 0x48, 0x68, 0x50, 0x49, 0x10, + 0x68, 0x09, 0x62, 0x88, 0x68, 0x90, 0x49, 0x0e, + 0x68, 0x09, 0x62, 0xc8, 0x68, 0xd0, 0x49, 0x0c, + 0x68, 0x09, 0x63, 0x08, 0x7d, 0x10, 0x49, 0x0a, + 0x68, 0x09, 0x31, 0x20, 0x76, 0x08, 0x7d, 0x50, + 0x49, 0x07, 0x68, 0x09, 0x31, 0x20, 0x76, 0x48, + 0x69, 0x10, 0x49, 0x05, 0x68, 0x09, 0x63, 0x48, + 0x7d, 0x90, 0x49, 0x03, 0x68, 0x09, 0x31, 0x20, + 0x76, 0x88, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x5c, 0x1c, 0x02, 0x1c, 0x0b, + 0x48, 0x03, 0x68, 0x00, 0x60, 0x02, 0x48, 0x02, + 0x68, 0x00, 0x60, 0x43, 0x47, 0x70, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x5c, 0xb5, 0xf3, 0xb0, 0x88, + 0x98, 0x08, 0x68, 0x04, 0x20, 0x01, 0x90, 0x06, + 0x20, 0x01, 0x90, 0x05, 0x48, 0x8c, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x19, 0x48, 0x8a, 0x68, 0x00, + 0x38, 0x01, 0x49, 0x89, 0x60, 0x08, 0x48, 0x88, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x10, 0x48, 0x87, + 0x78, 0x80, 0x90, 0x00, 0x98, 0x00, 0x00, 0xc0, + 0x49, 0x85, 0x68, 0x09, 0x58, 0x08, 0x23, 0xff, + 0x33, 0x01, 0x43, 0x98, 0x1c, 0x01, 0x98, 0x00, + 0x00, 0xc0, 0x4a, 0x81, 0x68, 0x12, 0x50, 0x11, + 0x20, 0x33, 0x06, 0x40, 0x6e, 0x00, 0x23, 0x0d, + 0x06, 0x9b, 0x1a, 0xc1, 0x91, 0x02, 0x20, 0x33, + 0x06, 0x40, 0x6d, 0xc0, 0x23, 0x0d, 0x06, 0x9b, + 0x1a, 0xc0, 0x90, 0x01, 0x48, 0x79, 0x68, 0x00, + 0x42, 0x84, 0xd1, 0x73, 0x98, 0x01, 0x1d, 0xc7, + 0x37, 0x01, 0x78, 0x38, 0x18, 0x38, 0x1c, 0x47, + 0x48, 0x75, 0x6c, 0xc0, 0x23, 0x0d, 0x06, 0x9b, + 0x1a, 0xc0, 0x42, 0xb8, 0xd9, 0x19, 0x78, 0x38, + 0x28, 0xff, 0xd1, 0x12, 0x78, 0x78, 0x23, 0xf0, + 0x40, 0x18, 0x28, 0xf0, 0xd1, 0x0d, 0x78, 0xb8, + 0x10, 0x80, 0x07, 0x80, 0x0f, 0x80, 0x06, 0x00, + 0x16, 0x00, 0x90, 0x06, 0x78, 0x78, 0x10, 0xc0, + 0x07, 0xc0, 0x09, 0xc0, 0x16, 0x00, 0x90, 0x05, + 0xe0, 0x03, 0x21, 0x01, 0x70, 0x39, 0x18, 0x7f, + 0xe7, 0xde, 0x21, 0x40, 0x91, 0x03, 0x25, 0x20, + 0x21, 0x14, 0x91, 0x07, 0x98, 0x06, 0x28, 0x00, + 0xd1, 0x02, 0x25, 0x23, 0x21, 0x12, 0x91, 0x07, + 0x98, 0x06, 0x28, 0x02, 0xd1, 0x02, 0x25, 0x30, + 0x21, 0x18, 0x91, 0x07, 0x98, 0x05, 0x28, 0x00, + 0xd1, 0x02, 0x00, 0x6d, 0x21, 0x70, 0x91, 0x03, + 0x99, 0x03, 0x00, 0x48, 0x99, 0x02, 0x1a, 0x08, + 0x90, 0x04, 0x98, 0x04, 0x99, 0x02, 0x42, 0x88, + 0xd3, 0x05, 0xe0, 0x4e, 0x98, 0x04, 0x99, 0x03, + 0x18, 0x40, 0x90, 0x04, 0xe7, 0xf5, 0x9f, 0x04, + 0x21, 0x00, 0x70, 0x39, 0x37, 0x01, 0x21, 0x00, + 0x70, 0x39, 0x37, 0x01, 0x21, 0x01, 0x70, 0x39, + 0x18, 0x7f, 0x21, 0xc0, 0x70, 0x39, 0x37, 0x01, + 0x21, 0x00, 0x70, 0x39, 0x37, 0x01, 0x21, 0x3a, + 0x70, 0x39, 0x37, 0x01, 0x21, 0x80, 0x70, 0x39, + 0x37, 0x01, 0x21, 0x00, 0x70, 0x39, 0x37, 0x01, + 0x99, 0x03, 0x1f, 0xc8, 0x38, 0x02, 0x1b, 0x41, + 0x70, 0x39, 0x37, 0x01, 0x26, 0x00, 0x99, 0x03, + 0x1f, 0xc8, 0x38, 0x02, 0x1b, 0x40, 0x42, 0xb0, + 0xdc, 0x04, 0xe0, 0x00, 0xe0, 0x34, 0xe0, 0x05, + 0x36, 0x01, 0xe7, 0xf4, 0x21, 0xff, 0x70, 0x39, + 0x37, 0x01, 0xe7, 0xf9, 0x21, 0xff, 0x70, 0x39, + 0x37, 0x01, 0x98, 0x05, 0x00, 0xc0, 0x21, 0xf7, + 0x43, 0x01, 0x70, 0x39, 0x37, 0x01, 0x99, 0x07, + 0x70, 0x39, 0x37, 0x01, 0x21, 0xc0, 0x70, 0x39, + 0x37, 0x01, 0x26, 0x00, 0x1f, 0x28, 0x42, 0xb0, + 0xdc, 0x02, 0xe0, 0x05, 0x36, 0x01, 0xe7, 0xf9, + 0x21, 0x00, 0x70, 0x39, 0x37, 0x01, 0xe7, 0xf9, + 0xe7, 0xb0, 0x99, 0x03, 0x00, 0x48, 0x99, 0x02, + 0x1a, 0x08, 0x23, 0x0d, 0x06, 0x9b, 0x18, 0xc0, + 0x49, 0x29, 0x64, 0x88, 0x99, 0x09, 0x20, 0x78, + 0x40, 0x08, 0x23, 0x02, 0x43, 0x18, 0xf7, 0xff, + 0xfa, 0x17, 0x20, 0x01, 0xf7, 0xff, 0xfa, 0x14, + 0x48, 0x22, 0x68, 0x00, 0x38, 0x02, 0x42, 0xa0, + 0xd1, 0x09, 0x48, 0x22, 0x68, 0x01, 0x23, 0x01, + 0x05, 0x5b, 0x43, 0x19, 0x60, 0x01, 0x20, 0xff, + 0x49, 0x1f, 0x68, 0x09, 0x70, 0x08, 0x48, 0x1b, + 0x68, 0x00, 0x38, 0x02, 0x42, 0xa0, 0xd3, 0x0f, + 0x48, 0x1c, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, + 0x48, 0x1a, 0x68, 0x00, 0x23, 0x01, 0x06, 0x9b, + 0x40, 0x18, 0xd0, 0x05, 0x20, 0x32, 0x49, 0x13, + 0x60, 0x08, 0x48, 0x12, 0x68, 0x00, 0x1e, 0x84, + 0x2c, 0x01, 0xd1, 0x02, 0x20, 0x02, 0xf7, 0xff, + 0xf9, 0xeb, 0x2c, 0xff, 0xd1, 0x08, 0x20, 0x33, + 0x06, 0x40, 0x6d, 0xc0, 0x30, 0xbc, 0x49, 0x0c, + 0x6c, 0xc9, 0x42, 0x88, 0xd2, 0x00, 0x24, 0x18, + 0x2c, 0x00, 0xd0, 0x02, 0x2c, 0xff, 0xd0, 0x00, + 0x3c, 0x01, 0x98, 0x08, 0x60, 0x04, 0xb0, 0x08, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x5e, 0x4c, 0x2e, 0x08, 0x5e, 0x38, + 0x2e, 0x08, 0x5d, 0xd8, 0x2e, 0x08, 0x1f, 0x20, + 0x66, 0x00, 0x00, 0x80, 0x6c, 0x00, 0x00, 0x20, + 0x2e, 0x08, 0x5e, 0x34, 0x6c, 0x00, 0x08, 0x00, + 0xb5, 0xff, 0x1c, 0x04, 0x1c, 0x0f, 0x9a, 0x02, + 0x06, 0x15, 0x0e, 0x2d, 0x9b, 0x03, 0x06, 0x1e, + 0x0e, 0x36, 0x2e, 0x20, 0xdb, 0x04, 0x20, 0xa2, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2d, 0x1f, 0xdb, 0x01, 0x20, 0xaf, 0xe7, 0xf7, + 0x20, 0x01, 0x03, 0x40, 0xf7, 0xff, 0xf9, 0xac, + 0x20, 0x14, 0x49, 0x09, 0x60, 0x08, 0x20, 0xff, + 0x60, 0x20, 0x1c, 0x33, 0x1c, 0x29, 0x1c, 0x38, + 0x22, 0x02, 0xf7, 0xfc, 0xfa, 0x4b, 0x48, 0x05, + 0x68, 0x01, 0x23, 0x01, 0x05, 0x5b, 0x43, 0x19, + 0x60, 0x01, 0x20, 0x00, 0xe7, 0xe0, 0xe7, 0xdf, + 0x2e, 0x08, 0x1f, 0x20, 0x6c, 0x00, 0x00, 0x20, + 0xb4, 0x0f, 0xb5, 0xf0, 0x1c, 0x07, 0xb0, 0x82, + 0x20, 0x00, 0x49, 0x16, 0x60, 0x08, 0x48, 0x16, + 0x6f, 0x80, 0x23, 0x09, 0x01, 0x9b, 0x42, 0x98, + 0xd1, 0x02, 0x20, 0xe1, 0x00, 0xc0, 0xe0, 0x00, + 0x48, 0x12, 0x1c, 0x05, 0x68, 0x38, 0x28, 0xff, + 0xd1, 0x17, 0x98, 0x0d, 0x90, 0x00, 0x98, 0x0c, + 0x90, 0x01, 0x98, 0x01, 0x99, 0x00, 0x1a, 0x46, + 0x08, 0x68, 0x19, 0x81, 0x1c, 0x28, 0xf0, 0x09, + 0xfa, 0xeb, 0x1c, 0x04, 0x34, 0x01, 0x0f, 0xf0, + 0x07, 0xc0, 0xd0, 0x00, 0x24, 0x04, 0x2c, 0x32, + 0xd9, 0x00, 0x24, 0x04, 0x1d, 0xe0, 0x30, 0x0d, + 0x60, 0x38, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0xb0, 0x04, 0x47, 0x18, 0x2e, 0x08, 0x5e, 0x4c, + 0xcc, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x05, 0xdd, + 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x81, 0x99, 0x02, + 0x06, 0x09, 0x0e, 0x09, 0x91, 0x00, 0xb0, 0x82, + 0x99, 0x02, 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, + 0xb0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x99, 0x02, 0x00, 0x88, 0x49, 0x2f, + 0x58, 0x08, 0x90, 0x01, 0x28, 0x00, 0xd1, 0x02, + 0x20, 0xb0, 0xb0, 0x03, 0xe7, 0xf1, 0x20, 0x00, + 0x70, 0x78, 0x78, 0xb8, 0x07, 0x00, 0x0f, 0x00, + 0x90, 0x00, 0x98, 0x00, 0x28, 0x04, 0xd1, 0x1f, + 0x6a, 0xfe, 0x24, 0x00, 0x2c, 0x08, 0xdb, 0x04, + 0xe0, 0x18, 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, + 0xe7, 0xf8, 0x00, 0xa0, 0x19, 0x80, 0x68, 0x40, + 0x00, 0xa1, 0x19, 0x89, 0x64, 0x48, 0x21, 0x00, + 0x00, 0xa0, 0x19, 0x80, 0x62, 0x41, 0x00, 0xa0, + 0x19, 0x80, 0x6c, 0x40, 0x28, 0x00, 0xd0, 0x04, + 0x20, 0x80, 0x41, 0x20, 0x88, 0x31, 0x43, 0x08, + 0x80, 0x30, 0xe7, 0xe6, 0x88, 0x30, 0x80, 0x70, + 0x78, 0xb8, 0x23, 0x20, 0x40, 0x18, 0xd0, 0x1f, + 0x6b, 0x3d, 0x20, 0x00, 0x60, 0x28, 0x20, 0x00, + 0x60, 0x68, 0x20, 0x00, 0x60, 0xa8, 0x24, 0x00, + 0x2c, 0x08, 0xdb, 0x04, 0xe0, 0x0c, 0x1c, 0x60, + 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, 0x20, 0x00, + 0x00, 0xa1, 0x19, 0x49, 0x60, 0xc8, 0x20, 0x00, + 0x00, 0xa1, 0x19, 0x49, 0x63, 0x88, 0xe7, 0xf2, + 0x20, 0x00, 0x62, 0xe8, 0x20, 0x00, 0x63, 0x28, + 0x20, 0x00, 0x63, 0x68, 0x20, 0x00, 0x65, 0xa8, + 0x99, 0x02, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x3e, + 0xb0, 0x03, 0xe7, 0x9e, 0xb0, 0x02, 0xb0, 0x01, + 0xe7, 0x9b, 0x00, 0x00, 0x2e, 0x08, 0x5e, 0x64, + 0xb5, 0xf3, 0x1c, 0x07, 0x99, 0x01, 0x06, 0x0c, + 0x0e, 0x24, 0xb0, 0x82, 0x2c, 0x20, 0xdb, 0x05, + 0x20, 0xa2, 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0xa0, 0x49, 0x12, + 0x58, 0x08, 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xb0, + 0xb0, 0x02, 0xe7, 0xf3, 0x1c, 0x21, 0x1c, 0x38, + 0xf0, 0x00, 0xf9, 0x84, 0x1c, 0x06, 0xd0, 0x02, + 0x1c, 0x30, 0xb0, 0x02, 0xe7, 0xea, 0x78, 0x68, + 0x21, 0x20, 0x40, 0x01, 0x91, 0x00, 0x99, 0x00, + 0x1c, 0x38, 0xf0, 0x00, 0xff, 0x3f, 0x68, 0xe9, + 0x91, 0x01, 0x29, 0x00, 0xd0, 0x03, 0x99, 0x01, + 0x1c, 0x38, 0xf0, 0x03, 0xfe, 0x7a, 0x20, 0x00, + 0xb0, 0x02, 0xe7, 0xd7, 0xb0, 0x02, 0xe7, 0xd5, + 0x2e, 0x08, 0x5e, 0x64, 0xb5, 0xf3, 0x1c, 0x02, + 0x99, 0x01, 0x06, 0x0f, 0x0e, 0x3f, 0xb0, 0x86, + 0x00, 0xb8, 0x4b, 0xa1, 0x68, 0x1b, 0x18, 0xc0, + 0x90, 0x00, 0x2f, 0x20, 0xdb, 0x05, 0x20, 0xa2, + 0xb0, 0x06, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0xb8, 0x4b, 0x9b, 0x58, 0x18, + 0x90, 0x05, 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb0, + 0xb0, 0x06, 0xe7, 0xf2, 0x78, 0x90, 0x90, 0x01, + 0x71, 0xd7, 0x78, 0xd1, 0x98, 0x01, 0x23, 0x80, + 0x40, 0x18, 0xd1, 0x73, 0x29, 0x20, 0xdd, 0x02, + 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0xe5, 0x48, 0x92, + 0x68, 0x00, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x02, + 0x20, 0xb2, 0xb0, 0x06, 0xe7, 0xdd, 0x20, 0x01, + 0x40, 0x88, 0x4b, 0x8d, 0x68, 0x1b, 0x40, 0x18, + 0xd0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0xd4, + 0x00, 0x88, 0x4b, 0x8a, 0x50, 0x1a, 0x48, 0x8a, + 0x54, 0x47, 0x01, 0x08, 0x4b, 0x89, 0x18, 0xc5, + 0x7f, 0x10, 0x06, 0x00, 0x7f, 0x53, 0x04, 0x1b, + 0x43, 0x18, 0x7f, 0x93, 0x02, 0x1b, 0x43, 0x18, + 0x7f, 0xd3, 0x43, 0x03, 0xc5, 0x08, 0x1d, 0xd0, + 0x30, 0x19, 0x78, 0x00, 0x06, 0x00, 0x1d, 0xd3, + 0x33, 0x19, 0x78, 0x5b, 0x04, 0x1b, 0x43, 0x18, + 0x1d, 0xd3, 0x33, 0x19, 0x78, 0x9b, 0x02, 0x1b, + 0x43, 0x18, 0x1d, 0xd3, 0x33, 0x19, 0x78, 0xdb, + 0x43, 0x03, 0xc5, 0x08, 0x01, 0x08, 0x4b, 0x7a, + 0x18, 0xc4, 0x7b, 0x10, 0x06, 0x00, 0x7b, 0x53, + 0x04, 0x1b, 0x43, 0x18, 0x7b, 0x93, 0x02, 0x1b, + 0x43, 0x18, 0x7b, 0xd3, 0x43, 0x03, 0xc4, 0x08, + 0x7c, 0x10, 0x06, 0x00, 0x7c, 0x53, 0x04, 0x1b, + 0x43, 0x18, 0x7c, 0x93, 0x02, 0x1b, 0x43, 0x18, + 0x7c, 0xd3, 0x43, 0x03, 0xc4, 0x08, 0x98, 0x01, + 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x20, 0x1d, 0xd0, + 0x30, 0x19, 0x79, 0x00, 0x06, 0x00, 0x1d, 0xd3, + 0x33, 0x19, 0x79, 0x5b, 0x04, 0x1b, 0x43, 0x18, + 0x1d, 0xd3, 0x33, 0x19, 0x79, 0x9b, 0x02, 0x1b, + 0x43, 0x18, 0x1d, 0xd3, 0x33, 0x19, 0x79, 0xdb, + 0x43, 0x03, 0xc5, 0x08, 0x7d, 0x10, 0x06, 0x00, + 0x7d, 0x53, 0x04, 0x1b, 0x43, 0x18, 0x7d, 0x93, + 0x02, 0x1b, 0xe0, 0x00, 0xe0, 0x42, 0x43, 0x18, + 0x7d, 0xd3, 0x43, 0x03, 0xc4, 0x08, 0xe0, 0x03, + 0x23, 0x00, 0xc5, 0x08, 0x23, 0x00, 0xc4, 0x08, + 0x23, 0xff, 0xc5, 0x08, 0x20, 0x19, 0x06, 0x80, + 0x6b, 0x00, 0x23, 0x08, 0x40, 0x18, 0xd0, 0x06, + 0x88, 0x90, 0x04, 0x00, 0x19, 0xc3, 0x93, 0x02, + 0x9b, 0x02, 0xc4, 0x08, 0xe0, 0x00, 0xc4, 0x80, + 0x98, 0x01, 0x23, 0x08, 0x40, 0x18, 0xd0, 0x17, + 0x48, 0x50, 0x5d, 0xc0, 0x30, 0x01, 0x4b, 0x4f, + 0x55, 0xd8, 0x7a, 0x10, 0x07, 0xc0, 0x0f, 0xc0, + 0xd0, 0x04, 0x20, 0x01, 0x40, 0x88, 0x23, 0x19, + 0x06, 0x9b, 0x61, 0x18, 0x7a, 0x10, 0x23, 0x02, + 0x40, 0x18, 0xd0, 0x04, 0x20, 0x01, 0x40, 0x88, + 0x23, 0x19, 0x06, 0x9b, 0x61, 0x58, 0xe0, 0x05, + 0x4e, 0x45, 0x20, 0x01, 0x40, 0x88, 0x68, 0x33, + 0x43, 0x18, 0x60, 0x30, 0x20, 0x01, 0x40, 0x88, + 0x4b, 0x3b, 0x68, 0x1b, 0x43, 0x18, 0x4b, 0x3a, + 0x60, 0x18, 0xe0, 0x4f, 0x98, 0x01, 0x23, 0x80, + 0x40, 0x18, 0xd0, 0x48, 0x48, 0x3d, 0x88, 0x00, + 0x4b, 0x3d, 0x42, 0x98, 0xd1, 0x02, 0x20, 0xb2, + 0xb0, 0x06, 0xe7, 0x26, 0x00, 0x88, 0x4b, 0x3b, + 0x58, 0x18, 0x28, 0x00, 0xd0, 0x02, 0x20, 0xb1, + 0xb0, 0x06, 0xe7, 0x1e, 0x29, 0x10, 0xdb, 0x02, + 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x19, 0x20, 0x01, + 0x40, 0x88, 0x4b, 0x32, 0x88, 0x1b, 0x40, 0x18, + 0xd0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x10, + 0x98, 0x05, 0x78, 0x80, 0x28, 0x02, 0xdb, 0x02, + 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x09, 0x00, 0x88, + 0x4b, 0x2c, 0x50, 0x1a, 0x48, 0x2c, 0x54, 0x47, + 0x00, 0xf8, 0x1b, 0xc0, 0x00, 0x80, 0x4b, 0x2b, + 0x68, 0x1b, 0x18, 0xc0, 0x90, 0x04, 0x98, 0x04, + 0x7e, 0x00, 0x28, 0xff, 0xd1, 0x02, 0x98, 0x04, + 0x76, 0x01, 0xe0, 0x01, 0x98, 0x04, 0x76, 0x41, + 0x4e, 0x25, 0x96, 0x03, 0x1d, 0xd3, 0x33, 0x05, + 0x00, 0x88, 0x9e, 0x03, 0x50, 0x33, 0x20, 0x01, + 0x40, 0x88, 0x4b, 0x1c, 0x88, 0x1b, 0x43, 0x18, + 0x4b, 0x1a, 0x80, 0x18, 0xe0, 0x02, 0x20, 0xb1, + 0xb0, 0x06, 0xe6, 0xe2, 0x78, 0x50, 0x23, 0x80, + 0x43, 0xdb, 0x40, 0x18, 0x70, 0x50, 0x98, 0x05, + 0x78, 0x80, 0x28, 0x00, 0xd1, 0x09, 0x98, 0x00, + 0x68, 0x00, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, + 0x9b, 0x00, 0x60, 0x18, 0x20, 0x02, 0x9b, 0x05, + 0x70, 0xd8, 0x98, 0x05, 0x78, 0x80, 0x30, 0x01, + 0x9b, 0x05, 0x70, 0x98, 0x20, 0x00, 0xb0, 0x06, + 0xe6, 0xc7, 0xb0, 0x06, 0xe6, 0xc5, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xd4, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x5e, 0xe4, 0x2e, 0x08, 0x5e, 0xec, + 0x2e, 0x08, 0x5f, 0xac, 0x64, 0x00, 0x10, 0x00, + 0x64, 0x00, 0x08, 0x00, 0x2e, 0x08, 0x7b, 0xfc, + 0x64, 0x00, 0x00, 0x18, 0x2e, 0x08, 0x5e, 0xe8, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x5f, 0x6c, + 0x2e, 0x08, 0x5f, 0xcc, 0x2e, 0x08, 0x5d, 0xcc, + 0x9e, 0x00, 0x04, 0xb8, 0xb5, 0xf3, 0x1c, 0x02, + 0x99, 0x01, 0x06, 0x0f, 0x0e, 0x3f, 0xb0, 0x86, + 0x00, 0xb8, 0x4b, 0x65, 0x68, 0x1b, 0x18, 0xc0, + 0x90, 0x01, 0x2f, 0x20, 0xdb, 0x05, 0x20, 0xa2, + 0xb0, 0x06, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0xb8, 0x4b, 0x5f, 0x58, 0x18, + 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x06, + 0xe7, 0xf3, 0x78, 0x90, 0x90, 0x03, 0x78, 0xd1, + 0x00, 0x88, 0x4b, 0x5b, 0x58, 0x18, 0x42, 0x90, + 0xd0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0xe8, + 0x98, 0x03, 0x23, 0x80, 0x40, 0x18, 0xd1, 0x49, + 0x01, 0x08, 0x4b, 0x56, 0x18, 0xc3, 0x93, 0x00, + 0x20, 0x00, 0x9b, 0x00, 0x60, 0x18, 0x23, 0x00, + 0x00, 0x88, 0x4e, 0x51, 0x50, 0x33, 0x23, 0xff, + 0x48, 0x51, 0x54, 0x43, 0x20, 0x01, 0x40, 0x88, + 0x43, 0xc0, 0x4b, 0x50, 0x68, 0x1b, 0x40, 0x18, + 0x4b, 0x4e, 0x60, 0x18, 0x98, 0x03, 0x23, 0x08, + 0x40, 0x18, 0xd0, 0x27, 0x20, 0x01, 0x40, 0x88, + 0x90, 0x04, 0x7a, 0x10, 0x07, 0xc0, 0x0f, 0xc0, + 0xd0, 0x0b, 0x98, 0x04, 0x23, 0x19, 0x06, 0x9b, + 0x69, 0x1b, 0x40, 0x18, 0xd0, 0x04, 0x98, 0x04, + 0x23, 0x19, 0x06, 0x9b, 0x61, 0x18, 0xe7, 0xf4, + 0xe0, 0x0e, 0x7a, 0x10, 0x23, 0x02, 0x40, 0x18, + 0xd0, 0x0a, 0x98, 0x04, 0x23, 0x19, 0x06, 0x9b, + 0x69, 0x5b, 0x40, 0x18, 0xd0, 0x04, 0x98, 0x04, + 0x23, 0x19, 0x06, 0x9b, 0x61, 0x58, 0xe7, 0xf4, + 0x48, 0x3b, 0x5d, 0xc0, 0x38, 0x01, 0x4b, 0x3a, + 0x55, 0xd8, 0xe0, 0x06, 0x4e, 0x39, 0x20, 0x01, + 0x40, 0x88, 0x43, 0xc0, 0x68, 0x33, 0x40, 0x18, + 0x60, 0x30, 0xe0, 0x36, 0x98, 0x03, 0x23, 0x80, + 0x40, 0x18, 0xd0, 0x2f, 0x00, 0xf8, 0x1b, 0xc0, + 0x00, 0x80, 0x4b, 0x33, 0x68, 0x1b, 0x18, 0xc3, + 0x93, 0x02, 0x9b, 0x02, 0x7e, 0x18, 0x42, 0x88, + 0xd1, 0x03, 0x20, 0xff, 0x9b, 0x02, 0x76, 0x18, + 0xe0, 0x0a, 0x9b, 0x02, 0x7e, 0x58, 0x42, 0x88, + 0xd1, 0x03, 0x20, 0xff, 0x9b, 0x02, 0x76, 0x58, + 0xe0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x7c, + 0x23, 0x00, 0x00, 0x88, 0x4e, 0x27, 0x50, 0x33, + 0x20, 0xff, 0x4b, 0x27, 0x54, 0x58, 0x20, 0x01, + 0x40, 0x88, 0x43, 0xc0, 0x4b, 0x25, 0x88, 0x1b, + 0x40, 0x18, 0x4b, 0x24, 0x80, 0x18, 0x4e, 0x24, + 0x96, 0x05, 0x23, 0x00, 0x00, 0x88, 0x9e, 0x05, + 0x50, 0x33, 0xe0, 0x02, 0x20, 0xb1, 0xb0, 0x06, + 0xe7, 0x63, 0x78, 0xa8, 0x38, 0x01, 0x70, 0xa8, + 0x78, 0x50, 0x23, 0x80, 0x43, 0x18, 0x70, 0x50, + 0x78, 0xa8, 0x28, 0x00, 0xd1, 0x07, 0x98, 0x01, + 0x68, 0x00, 0x4b, 0x1a, 0x40, 0x18, 0x9b, 0x01, + 0x60, 0x18, 0x20, 0x01, 0x70, 0xe8, 0x24, 0x1f, + 0x2c, 0x00, 0xd1, 0x02, 0xe0, 0x0a, 0x3c, 0x01, + 0xe7, 0xfa, 0x48, 0x0d, 0x5d, 0x00, 0x28, 0x00, + 0xd1, 0x03, 0x20, 0x19, 0x06, 0x80, 0x64, 0xc4, + 0xe0, 0x00, 0xe7, 0xf4, 0x20, 0x00, 0xb0, 0x06, + 0xe7, 0x3f, 0xb0, 0x06, 0xe7, 0x3d, 0x00, 0x00, + 0x2e, 0x08, 0x5d, 0xd4, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x5e, 0xec, 0x64, 0x00, 0x08, 0x08, + 0x2e, 0x08, 0x5f, 0xac, 0x2e, 0x08, 0x5e, 0xe4, + 0x2e, 0x08, 0x7b, 0xfc, 0x64, 0x00, 0x00, 0x18, + 0x2e, 0x08, 0x5d, 0xcc, 0x2e, 0x08, 0x5f, 0x6c, + 0x2e, 0x08, 0x5f, 0xcc, 0x2e, 0x08, 0x5e, 0xe8, + 0x9e, 0x00, 0x04, 0xb8, 0xff, 0xff, 0xdf, 0xff, + 0x1c, 0x03, 0x1c, 0x0a, 0x78, 0x58, 0x70, 0x10, + 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0xb5, 0xf7, + 0x1c, 0x07, 0xb0, 0x81, 0x9a, 0x03, 0x06, 0x10, + 0x0e, 0x00, 0x90, 0x00, 0xb0, 0x87, 0x78, 0x78, + 0x23, 0x80, 0x40, 0x18, 0xd0, 0x4c, 0x78, 0x78, + 0x23, 0x80, 0x40, 0x18, 0xd0, 0x48, 0x78, 0xb8, + 0x90, 0x06, 0x99, 0x09, 0x78, 0x88, 0x90, 0x05, + 0x98, 0x06, 0x23, 0x20, 0x40, 0x18, 0xd0, 0x3f, + 0x98, 0x05, 0x23, 0x20, 0x40, 0x18, 0xd0, 0x3b, + 0x6b, 0x38, 0x90, 0x01, 0x99, 0x09, 0x6b, 0x08, + 0x90, 0x00, 0x98, 0x01, 0x28, 0x00, 0xd1, 0x02, + 0x98, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd1, 0x05, + 0x20, 0xb6, 0xb0, 0x08, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x98, 0x01, 0x68, 0x05, + 0x98, 0x00, 0x68, 0x04, 0x7a, 0x2e, 0x7a, 0x21, + 0x91, 0x04, 0x7d, 0x6a, 0x92, 0x03, 0x7d, 0x62, + 0x92, 0x02, 0x98, 0x07, 0x28, 0x00, 0xd0, 0x0a, + 0x9a, 0x02, 0x99, 0x04, 0x1c, 0x28, 0xf0, 0x00, + 0xfc, 0xe5, 0x9a, 0x03, 0x1c, 0x31, 0x1c, 0x20, + 0xf0, 0x00, 0xfc, 0xe0, 0xe0, 0x09, 0x99, 0x04, + 0x1c, 0x28, 0x22, 0x00, 0xf0, 0x00, 0xfc, 0xda, + 0x1c, 0x31, 0x1c, 0x20, 0x22, 0x00, 0xf0, 0x00, + 0xfc, 0xd5, 0x20, 0x00, 0xb0, 0x08, 0xe7, 0xd5, + 0x20, 0xb1, 0xb0, 0x08, 0xe7, 0xd2, 0xb0, 0x07, + 0xb0, 0x01, 0xe7, 0xcf, 0xb4, 0xf0, 0x1c, 0x02, + 0x1c, 0x0b, 0x06, 0x1d, 0x0e, 0x2d, 0xb0, 0x82, + 0x2d, 0x00, 0xd1, 0x0a, 0x48, 0x1a, 0x69, 0x00, + 0x90, 0x01, 0x49, 0x1a, 0x48, 0x18, 0x69, 0x40, + 0x90, 0x00, 0x48, 0x17, 0x6a, 0x00, 0x1e, 0x44, + 0xe0, 0x10, 0x2d, 0x20, 0xd1, 0x0a, 0x48, 0x14, + 0x69, 0x80, 0x90, 0x01, 0x49, 0x14, 0x48, 0x12, + 0x69, 0xc0, 0x90, 0x00, 0x48, 0x10, 0x6a, 0x40, + 0x1e, 0x44, 0xe0, 0x03, 0x20, 0xb3, 0xb0, 0x02, + 0xbc, 0xf0, 0x47, 0x70, 0x20, 0x00, 0x70, 0x10, + 0x78, 0x50, 0x00, 0x80, 0x4e, 0x0d, 0x58, 0x37, + 0x69, 0x38, 0x61, 0x78, 0x98, 0x01, 0x9e, 0x00, + 0x42, 0xb0, 0xd0, 0x07, 0x98, 0x01, 0x30, 0x01, + 0x90, 0x01, 0x98, 0x01, 0x40, 0x20, 0x90, 0x01, + 0x98, 0x01, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, + 0xe7, 0xe6, 0xb0, 0x02, 0xe7, 0xe4, 0x00, 0x00, + 0x9e, 0x00, 0x04, 0x80, 0x9e, 0x00, 0x04, 0x90, + 0x9e, 0x00, 0x04, 0x98, 0x2e, 0x08, 0x5e, 0x64, + 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x81, 0x99, 0x02, + 0x06, 0x08, 0x0e, 0x00, 0x90, 0x00, 0xb0, 0x88, + 0x98, 0x08, 0x28, 0x00, 0xd1, 0x0e, 0x49, 0x69, + 0x91, 0x02, 0x48, 0x69, 0x69, 0x00, 0x90, 0x07, + 0x48, 0x68, 0x90, 0x06, 0x48, 0x66, 0x69, 0x40, + 0x90, 0x05, 0x48, 0x65, 0x6a, 0x00, 0x1e, 0x41, + 0x91, 0x04, 0xe0, 0x17, 0x98, 0x08, 0x28, 0x20, + 0xd1, 0x0e, 0x49, 0x63, 0x91, 0x02, 0x48, 0x60, + 0x69, 0x80, 0x90, 0x07, 0x48, 0x61, 0x90, 0x06, + 0x48, 0x5d, 0x69, 0xc0, 0x90, 0x05, 0x48, 0x5c, + 0x6a, 0x40, 0x1e, 0x41, 0x91, 0x04, 0xe0, 0x05, + 0x20, 0xb3, 0xb0, 0x09, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x25, 0x00, 0x98, 0x07, + 0x99, 0x05, 0x42, 0x88, 0xd0, 0x73, 0x2d, 0x00, + 0xd1, 0x72, 0x98, 0x07, 0x00, 0x80, 0x99, 0x02, + 0x18, 0x40, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xc0, + 0x68, 0x01, 0x91, 0x03, 0x98, 0x07, 0x00, 0x80, + 0x99, 0x02, 0x58, 0x08, 0x90, 0x01, 0x99, 0x02, + 0x98, 0x07, 0x18, 0x08, 0x23, 0x01, 0x02, 0xdb, + 0x18, 0xc0, 0x78, 0x00, 0x90, 0x00, 0x20, 0x00, + 0x99, 0x02, 0x9a, 0x07, 0x18, 0x89, 0x23, 0x01, + 0x02, 0xdb, 0x18, 0xc9, 0x70, 0x08, 0x98, 0x07, + 0x30, 0x01, 0x90, 0x07, 0x98, 0x07, 0x99, 0x04, + 0x40, 0x08, 0x90, 0x07, 0x99, 0x03, 0x29, 0x00, + 0xd0, 0x71, 0xb0, 0x83, 0x20, 0x00, 0x90, 0x00, + 0x99, 0x06, 0x91, 0x02, 0x20, 0x01, 0x90, 0x01, + 0x98, 0x03, 0x28, 0x80, 0xd1, 0x1f, 0x24, 0x00, + 0x2c, 0x10, 0xd3, 0x02, 0xe0, 0x1a, 0x34, 0x01, + 0xe7, 0xfa, 0x98, 0x01, 0x99, 0x02, 0x40, 0x08, + 0xd0, 0x10, 0x48, 0x39, 0x5d, 0x00, 0x28, 0xff, + 0xd0, 0x0c, 0x48, 0x37, 0x5d, 0x00, 0x90, 0x00, + 0x00, 0xa0, 0x49, 0x36, 0x58, 0x09, 0x00, 0xa8, + 0x19, 0xc0, 0x61, 0x01, 0x1c, 0x68, 0x06, 0x05, + 0x0e, 0x2d, 0xe0, 0x03, 0x98, 0x01, 0x00, 0x40, + 0x90, 0x01, 0xe7, 0xe4, 0xe0, 0x1d, 0x24, 0x00, + 0x2c, 0x20, 0xd3, 0x02, 0xe0, 0x19, 0x34, 0x01, + 0xe7, 0xfa, 0x98, 0x01, 0x99, 0x02, 0x40, 0x08, + 0xd0, 0x0f, 0x48, 0x2b, 0x5d, 0x00, 0x28, 0xff, + 0xd0, 0x0b, 0x48, 0x29, 0x5d, 0x00, 0x90, 0x00, + 0x00, 0xa0, 0x49, 0x28, 0x58, 0x09, 0x00, 0xa8, + 0x19, 0xc0, 0x61, 0x01, 0x1c, 0x68, 0x06, 0x05, + 0x0e, 0x2d, 0x98, 0x01, 0x00, 0x40, 0x90, 0x01, + 0xe7, 0xe5, 0x2d, 0x00, 0xe0, 0x01, 0xe0, 0x27, + 0xe0, 0x26, 0xd0, 0x23, 0xb0, 0x81, 0x98, 0x01, + 0x70, 0x78, 0x98, 0x05, 0x60, 0x78, 0x98, 0x01, + 0x00, 0x80, 0x49, 0x1d, 0x58, 0x08, 0x90, 0x00, + 0x98, 0x00, 0x69, 0x46, 0x98, 0x05, 0x42, 0xb0, + 0xd3, 0x04, 0x1d, 0xf0, 0x30, 0xb9, 0x99, 0x05, + 0x42, 0x88, 0xd2, 0x08, 0x68, 0x30, 0x28, 0x00, + 0xd0, 0x01, 0x68, 0x36, 0xe0, 0x02, 0x20, 0xba, + 0xb0, 0x0d, 0xe7, 0x63, 0xe7, 0xee, 0x60, 0xbe, + 0x98, 0x00, 0x61, 0x46, 0x1c, 0x38, 0xf0, 0x00, + 0xfb, 0x02, 0xb0, 0x01, 0xb0, 0x03, 0xe7, 0x5e, + 0x70, 0x3d, 0x98, 0x07, 0x99, 0x06, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x09, 0xe7, 0x52, 0xb0, 0x08, + 0xb0, 0x01, 0xe7, 0x4f, 0x2e, 0x08, 0x60, 0x98, + 0x9e, 0x00, 0x04, 0x80, 0x9e, 0x00, 0x04, 0x90, + 0x2e, 0x08, 0x69, 0x98, 0x9e, 0x00, 0x04, 0x98, + 0x2e, 0x08, 0x5f, 0xcc, 0x2e, 0x08, 0x5f, 0x6c, + 0x2e, 0x08, 0x5f, 0xac, 0x2e, 0x08, 0x5e, 0xec, + 0x2e, 0x08, 0x5e, 0x64, 0xb4, 0x90, 0x1c, 0x01, + 0x78, 0x48, 0x00, 0x80, 0x4c, 0x0d, 0x58, 0x23, + 0x69, 0x1a, 0x68, 0x8f, 0x42, 0xba, 0xd0, 0x12, + 0x68, 0x10, 0x42, 0xb8, 0xd0, 0x08, 0x68, 0x10, + 0x28, 0x00, 0xd0, 0x01, 0x68, 0x12, 0xe0, 0x02, + 0x20, 0xba, 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xf3, + 0x20, 0x00, 0x60, 0x10, 0x69, 0x9c, 0x69, 0x18, + 0x60, 0x20, 0x61, 0x1f, 0x61, 0x9a, 0x20, 0x00, + 0xe7, 0xf3, 0xe7, 0xf2, 0x2e, 0x08, 0x5e, 0x64, + 0xb4, 0xb0, 0x1c, 0x02, 0x1c, 0x0f, 0x78, 0x90, + 0x23, 0x04, 0x40, 0x18, 0xd0, 0x1c, 0x78, 0x90, + 0x23, 0x20, 0x40, 0x18, 0xd0, 0x18, 0x6b, 0x14, + 0x68, 0x20, 0x28, 0x00, 0xd0, 0x02, 0x1d, 0xe5, + 0x35, 0x05, 0xe0, 0x01, 0x1d, 0xe5, 0x35, 0x31, + 0x21, 0x00, 0x29, 0x08, 0xdb, 0x04, 0xe0, 0x08, + 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, + 0x00, 0x88, 0x58, 0x2b, 0x00, 0x88, 0x50, 0x3b, + 0xe7, 0xf6, 0x20, 0x00, 0xbc, 0xb0, 0x47, 0x70, + 0x20, 0xb1, 0xe7, 0xfb, 0xe7, 0xfa, 0xb5, 0xf3, + 0x1c, 0x0a, 0xb0, 0x93, 0x20, 0x00, 0x90, 0x06, + 0x98, 0x13, 0x69, 0x00, 0x90, 0x00, 0x98, 0x00, + 0x6b, 0x00, 0x90, 0x12, 0x98, 0x00, 0x78, 0x80, + 0x90, 0x05, 0x98, 0x12, 0x68, 0x00, 0x90, 0x01, + 0x28, 0x00, 0xd0, 0x03, 0x98, 0x12, 0x30, 0x0c, + 0x90, 0x09, 0xe0, 0x0e, 0x98, 0x12, 0x6a, 0xc0, + 0x90, 0x01, 0x28, 0x00, 0xd0, 0x03, 0x98, 0x12, + 0x30, 0x38, 0x90, 0x09, 0xe0, 0x05, 0x20, 0xb1, + 0xb0, 0x13, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x20, 0x00, 0x90, 0x06, 0x98, 0x05, + 0x23, 0x04, 0x40, 0x18, 0xd0, 0x73, 0x21, 0x00, + 0x29, 0x08, 0xdb, 0x04, 0xe0, 0x0c, 0x1c, 0x48, + 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x98, 0x13, + 0x30, 0x80, 0x69, 0x00, 0x00, 0x8b, 0x58, 0xc0, + 0x00, 0x8e, 0xab, 0x0a, 0x51, 0x98, 0xe7, 0xf2, + 0x9d, 0x01, 0x21, 0x00, 0x29, 0x08, 0xdb, 0x04, + 0xe0, 0xa7, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, + 0xe7, 0xf8, 0x00, 0x88, 0xab, 0x0a, 0x58, 0x18, + 0x28, 0x00, 0xd0, 0x55, 0x20, 0x00, 0x90, 0x08, + 0x48, 0x73, 0x90, 0x07, 0x20, 0x00, 0x90, 0x02, + 0x98, 0x02, 0x28, 0x20, 0xdb, 0x06, 0xe0, 0x8d, + 0x98, 0x02, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, + 0x90, 0x02, 0xe7, 0xf5, 0x00, 0x8b, 0xa8, 0x0a, + 0x58, 0xc0, 0x9b, 0x07, 0x40, 0x18, 0x90, 0x08, + 0x28, 0x00, 0xd0, 0x73, 0x00, 0x88, 0x9b, 0x09, + 0x58, 0x18, 0x9b, 0x08, 0x40, 0x18, 0xd0, 0x6e, + 0x1d, 0xec, 0x34, 0x01, 0x27, 0x00, 0x79, 0xa0, + 0x9b, 0x06, 0x42, 0x98, 0xd0, 0x08, 0x68, 0x68, + 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xba, 0xb0, 0x13, + 0xe7, 0xab, 0x1d, 0xec, 0x34, 0x01, 0xe7, 0xf2, + 0x78, 0x60, 0x07, 0x00, 0x0f, 0x00, 0x02, 0x00, + 0x04, 0x07, 0x0c, 0x3f, 0x78, 0xa0, 0x19, 0xc0, + 0x30, 0x03, 0x04, 0x07, 0x0c, 0x3f, 0x2a, 0x00, + 0xd0, 0x42, 0x98, 0x13, 0x88, 0x40, 0x42, 0xb8, + 0xdb, 0x3a, 0x98, 0x13, 0x88, 0x40, 0x1b, 0xc0, + 0x9b, 0x13, 0x80, 0x58, 0x20, 0xbc, 0x90, 0x04, + 0x2f, 0x00, 0xdd, 0x30, 0x2f, 0xbc, 0xdd, 0x1b, + 0x20, 0x00, 0x90, 0x03, 0x98, 0x03, 0x28, 0xbc, + 0xdb, 0x09, 0xe0, 0x0d, 0x98, 0x03, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0xe0, 0x01, 0xe0, 0x4c, + 0xe0, 0x41, 0x90, 0x03, 0xe7, 0xf2, 0x78, 0x23, + 0x34, 0x01, 0x70, 0x13, 0x32, 0x01, 0xe7, 0xf1, + 0x1f, 0xf8, 0x38, 0xb5, 0x04, 0x07, 0x0c, 0x3f, + 0x68, 0x2d, 0x1d, 0xec, 0x34, 0x01, 0xe0, 0x11, + 0x20, 0x00, 0x90, 0x03, 0x98, 0x03, 0x42, 0xb8, + 0xdb, 0x06, 0xe0, 0x0a, 0x98, 0x03, 0x30, 0x01, + 0x06, 0x00, 0x0e, 0x00, 0x90, 0x03, 0xe7, 0xf5, + 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, 0x32, 0x01, + 0xe7, 0xf4, 0x27, 0x00, 0xe7, 0xcc, 0xe0, 0x02, + 0x20, 0xb7, 0xb0, 0x13, 0xe7, 0x59, 0xe0, 0x04, + 0x98, 0x13, 0x88, 0x40, 0x19, 0xc0, 0x9b, 0x13, + 0x80, 0x58, 0x00, 0x88, 0xab, 0x0a, 0x58, 0x18, + 0x9b, 0x07, 0x43, 0x98, 0x00, 0x8e, 0xab, 0x0a, + 0x51, 0x98, 0xe0, 0x01, 0xe0, 0x01, 0xe0, 0x00, + 0x9d, 0x01, 0x98, 0x06, 0x30, 0x01, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x06, 0x98, 0x07, 0x08, 0x40, + 0x90, 0x07, 0xe7, 0x71, 0xe0, 0x04, 0x98, 0x06, + 0x30, 0x20, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x06, + 0xe7, 0x57, 0x20, 0x00, 0xb0, 0x13, 0xe7, 0x34, + 0xe0, 0x44, 0x98, 0x05, 0x23, 0x02, 0x40, 0x18, + 0xd0, 0x3b, 0x98, 0x01, 0x1d, 0xc4, 0x34, 0x01, + 0x78, 0x60, 0x07, 0x00, 0x0f, 0x00, 0x02, 0x00, + 0x04, 0x07, 0x0c, 0x3f, 0x78, 0xa0, 0x19, 0xc0, + 0x30, 0x03, 0x04, 0x07, 0x0c, 0x3f, 0x2f, 0x00, + 0xdd, 0x28, 0x2f, 0xbc, 0xdd, 0x17, 0x21, 0x00, + 0x29, 0xbc, 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x48, + 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x78, 0x23, + 0x34, 0x01, 0x70, 0x13, 0x32, 0x01, 0xe7, 0xf6, + 0x1f, 0xf8, 0x38, 0xb5, 0x04, 0x07, 0x0c, 0x3f, + 0x98, 0x01, 0x68, 0x00, 0x90, 0x01, 0x98, 0x01, + 0x1d, 0xc4, 0x34, 0x01, 0xe0, 0x0d, 0x21, 0x00, + 0x42, 0xb9, 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x48, + 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x78, 0x23, + 0x34, 0x01, 0x70, 0x13, 0x32, 0x01, 0xe7, 0xf6, + 0x27, 0x00, 0xe7, 0xd4, 0x20, 0x00, 0xb0, 0x13, + 0xe6, 0xf3, 0x20, 0xb1, 0xb0, 0x13, 0xe6, 0xf0, + 0xb0, 0x13, 0xe6, 0xee, 0xe6, 0xed, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0xb5, 0xf3, 0xb0, 0x84, + 0x98, 0x04, 0x78, 0x40, 0x00, 0x80, 0x49, 0x4b, + 0x58, 0x08, 0x90, 0x03, 0x28, 0x00, 0xd1, 0x05, + 0x20, 0xb0, 0xb0, 0x04, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x98, 0x04, 0x68, 0x86, + 0x98, 0x04, 0x88, 0x47, 0x98, 0x04, 0x68, 0x44, + 0x1d, 0xf0, 0x30, 0xb9, 0x99, 0x04, 0x68, 0x49, + 0x1a, 0x45, 0x42, 0xbd, 0xdb, 0x0c, 0x2f, 0x00, + 0xdb, 0x01, 0x2f, 0xbc, 0xdd, 0x02, 0x20, 0xba, + 0xb0, 0x04, 0xe7, 0xe7, 0x1c, 0x3a, 0x99, 0x05, + 0x1c, 0x20, 0xf0, 0x00, 0xf9, 0x29, 0xe0, 0x6b, + 0x20, 0x00, 0x90, 0x00, 0x98, 0x04, 0x78, 0x40, + 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, 0x49, 0x36, + 0x68, 0x09, 0x18, 0x40, 0x90, 0x01, 0x98, 0x01, + 0x78, 0x80, 0x90, 0x02, 0x98, 0x02, 0x06, 0xc0, + 0x0e, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x28, 0x12, + 0xd1, 0x03, 0x2d, 0x0e, 0xda, 0x01, 0x20, 0x01, + 0x90, 0x00, 0x2f, 0x00, 0xdd, 0x50, 0xb0, 0x81, + 0x42, 0xaf, 0xdd, 0x0d, 0x2d, 0x00, 0xdb, 0x01, + 0x2d, 0xbc, 0xdd, 0x02, 0x20, 0xba, 0xb0, 0x05, + 0xe7, 0xbc, 0x1c, 0x2a, 0x99, 0x06, 0x1c, 0x20, + 0xf0, 0x00, 0xf8, 0xfe, 0x68, 0x36, 0xe0, 0x0b, + 0x2f, 0x00, 0xdb, 0x01, 0x2f, 0xbc, 0xdd, 0x02, + 0x20, 0xba, 0xb0, 0x05, 0xe7, 0xae, 0x1c, 0x3a, + 0x99, 0x06, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0xf0, + 0x99, 0x06, 0x19, 0x49, 0x91, 0x06, 0x1b, 0x7f, + 0x1d, 0x31, 0x91, 0x00, 0x99, 0x00, 0x78, 0x88, + 0x19, 0x84, 0x98, 0x01, 0x28, 0x00, 0xd0, 0x20, + 0x99, 0x00, 0x78, 0xc8, 0x23, 0x80, 0x40, 0x18, + 0xd1, 0x1b, 0x1d, 0xf0, 0x30, 0xb9, 0x1b, 0x05, + 0x42, 0xbd, 0xdb, 0x01, 0x3c, 0x01, 0xe0, 0x14, + 0x1c, 0x68, 0x42, 0xb8, 0xd1, 0x11, 0x99, 0x00, + 0x78, 0x88, 0x28, 0x09, 0xdd, 0x08, 0x99, 0x00, + 0x79, 0x08, 0x30, 0x09, 0x99, 0x00, 0x78, 0x89, + 0x42, 0x88, 0xd0, 0x00, 0x3c, 0x01, 0xe0, 0x04, + 0x99, 0x00, 0x78, 0x88, 0x28, 0x09, 0xd1, 0x00, + 0x3c, 0x01, 0x20, 0x00, 0x90, 0x01, 0x1d, 0xf0, + 0x30, 0xb9, 0x1b, 0x05, 0xb0, 0x01, 0xe7, 0xac, + 0x20, 0x00, 0xb0, 0x04, 0xe7, 0x72, 0xb0, 0x04, + 0xe7, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x5d, 0xcc, 0xb5, 0xf1, 0x98, 0x00, + 0x06, 0x04, 0x0e, 0x24, 0xb0, 0x83, 0x00, 0xa0, + 0x4b, 0x4c, 0x58, 0x1d, 0x78, 0x28, 0x90, 0x02, + 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x03, + 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0xa0, 0x4b, 0x46, 0x58, 0x18, 0x1c, 0x05, + 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x03, 0xe7, 0xf3, + 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, 0x4b, 0x42, + 0x68, 0x1b, 0x18, 0xc7, 0x78, 0xa8, 0x28, 0x00, + 0xd0, 0x63, 0x20, 0x00, 0x42, 0x80, 0xd0, 0x20, + 0x21, 0x00, 0x29, 0x20, 0xdb, 0x04, 0xe0, 0x1b, + 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, + 0x00, 0x88, 0x4b, 0x3a, 0x58, 0x18, 0x90, 0x01, + 0x98, 0x01, 0x79, 0xc0, 0x42, 0xa0, 0xd1, 0x0e, + 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, 0x4b, 0x36, + 0x68, 0x1b, 0x40, 0x18, 0x4b, 0x34, 0x60, 0x18, + 0x23, 0x00, 0x00, 0x88, 0x4e, 0x31, 0x50, 0x33, + 0x23, 0xff, 0x48, 0x32, 0x54, 0x43, 0xe7, 0xe3, + 0xe0, 0x3f, 0x7e, 0x38, 0x1c, 0x02, 0x28, 0xff, + 0xd0, 0x10, 0x20, 0xff, 0x4b, 0x2e, 0x54, 0x98, + 0x23, 0x00, 0x00, 0x90, 0x4e, 0x2d, 0x50, 0x33, + 0x20, 0x01, 0x40, 0x90, 0x43, 0xc0, 0x4b, 0x2c, + 0x88, 0x1b, 0x40, 0x18, 0x4b, 0x2a, 0x80, 0x18, + 0x20, 0xff, 0x76, 0x38, 0x7e, 0x78, 0x1c, 0x02, + 0x28, 0xff, 0xd0, 0x11, 0x20, 0xff, 0x4b, 0x24, + 0x54, 0x98, 0x23, 0x00, 0x00, 0x90, 0x4e, 0x23, + 0x50, 0x33, 0x20, 0x01, 0x40, 0x90, 0x43, 0xc0, + 0x4b, 0x21, 0x88, 0x1b, 0x40, 0x18, 0x4b, 0x20, + 0x80, 0x18, 0x20, 0xff, 0x76, 0x78, 0xe0, 0x02, + 0x20, 0xb1, 0xb0, 0x03, 0xe7, 0x98, 0x23, 0x00, + 0x00, 0x90, 0x4e, 0x1a, 0x50, 0x33, 0x20, 0x01, + 0x40, 0x90, 0x43, 0xc0, 0x4b, 0x18, 0x88, 0x1b, + 0x40, 0x18, 0x4b, 0x17, 0x80, 0x18, 0x4e, 0x17, + 0x96, 0x00, 0x20, 0x00, 0x00, 0x93, 0x9e, 0x00, + 0x50, 0xf0, 0x98, 0x02, 0x23, 0x20, 0x40, 0x18, + 0xd0, 0xff, 0x21, 0x00, 0x29, 0x0c, 0xdb, 0x04, + 0xe0, 0x07, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, + 0xe7, 0xf8, 0x20, 0x00, 0x18, 0x7b, 0x73, 0x18, + 0xe7, 0xf7, 0x20, 0x00, 0x83, 0x38, 0x20, 0x00, + 0x70, 0xf8, 0x20, 0x00, 0xb0, 0x03, 0xe7, 0x6f, + 0xb0, 0x03, 0xe7, 0x6d, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x5d, 0xcc, 0x2e, 0x08, 0x5e, 0xec, + 0x2e, 0x08, 0x5e, 0xe4, 0x2e, 0x08, 0x5f, 0xac, + 0x2e, 0x08, 0x5f, 0xcc, 0x2e, 0x08, 0x5f, 0x6c, + 0x2e, 0x08, 0x5e, 0xe8, 0x9e, 0x00, 0x04, 0xb8, + 0xb5, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, + 0x20, 0x1d, 0x02, 0x80, 0x69, 0x86, 0x1c, 0x3a, + 0x1c, 0x29, 0x1c, 0x20, 0xf0, 0x08, 0xfb, 0x32, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb4, 0xf0, + 0x1c, 0x01, 0xb0, 0x82, 0x68, 0x48, 0x68, 0x8c, + 0x1d, 0xe2, 0x32, 0xb7, 0x42, 0x82, 0xd9, 0x09, + 0x78, 0x42, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, + 0x78, 0x83, 0x43, 0x1a, 0x32, 0x03, 0x04, 0x17, + 0x0c, 0x3f, 0xe0, 0x41, 0xb0, 0x82, 0x68, 0x23, + 0x93, 0x01, 0x9b, 0x01, 0x33, 0x04, 0x93, 0x00, + 0x9b, 0x00, 0x78, 0x9b, 0x9e, 0x01, 0x19, 0x9a, + 0x78, 0x4e, 0x00, 0xf3, 0x1b, 0x9b, 0x00, 0x9b, + 0x4e, 0x1b, 0x68, 0x36, 0x19, 0x9b, 0x93, 0x02, + 0x9b, 0x02, 0x78, 0x9d, 0x06, 0xed, 0x0e, 0xed, + 0x2d, 0x12, 0xd1, 0x0f, 0x1d, 0xe3, 0x33, 0xb9, + 0x68, 0x4e, 0x1b, 0x9b, 0x06, 0x1b, 0x0e, 0x1b, + 0x93, 0x03, 0x9b, 0x00, 0x78, 0xde, 0x23, 0x80, + 0x40, 0x33, 0xd1, 0x03, 0x9b, 0x03, 0x2b, 0x0e, + 0xda, 0x00, 0x3a, 0x01, 0x1d, 0xe3, 0x33, 0xb8, + 0x42, 0x83, 0xd9, 0x0b, 0x78, 0x43, 0x07, 0x1b, + 0x0f, 0x1b, 0x02, 0x1b, 0x04, 0x1f, 0x0c, 0x3f, + 0x78, 0x13, 0x18, 0xfb, 0x33, 0x03, 0x04, 0x1f, + 0x0c, 0x3f, 0xe0, 0x08, 0x78, 0x13, 0x07, 0x1b, + 0x0f, 0x1b, 0x02, 0x1b, 0x78, 0x56, 0x43, 0x33, + 0x33, 0x03, 0x04, 0x1f, 0x0c, 0x3f, 0xb0, 0x02, + 0x80, 0x4f, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, + 0x2e, 0x08, 0x5d, 0xcc, 0xb5, 0xf3, 0xb0, 0x81, + 0x99, 0x02, 0x06, 0x0b, 0x0e, 0x1b, 0x93, 0x00, + 0x9b, 0x00, 0x2b, 0x00, 0xd1, 0x0a, 0x49, 0x24, + 0x4b, 0x24, 0x69, 0x1b, 0x1c, 0x18, 0x4b, 0x23, + 0x69, 0x5b, 0x1c, 0x1c, 0x4b, 0x21, 0x6a, 0x1b, + 0x1e, 0x5a, 0xe0, 0x09, 0x49, 0x20, 0x4b, 0x1f, + 0x69, 0x9b, 0x1c, 0x18, 0x4b, 0x1d, 0x69, 0xdb, + 0x1c, 0x1c, 0x4b, 0x1c, 0x6a, 0x5b, 0x1e, 0x5a, + 0x9b, 0x01, 0x78, 0xdd, 0x26, 0x01, 0x40, 0xae, + 0x1c, 0x37, 0x42, 0xa0, 0xd0, 0x26, 0x00, 0x83, + 0x18, 0x5d, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xeb, + 0x68, 0x1b, 0x40, 0x3b, 0xd0, 0x1b, 0x00, 0x83, + 0x18, 0x5d, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xeb, + 0x68, 0x1b, 0x43, 0xbb, 0x1c, 0x1d, 0x00, 0x83, + 0x18, 0x5e, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xf3, + 0x60, 0x1d, 0x00, 0x83, 0x18, 0x5d, 0x23, 0x01, + 0x02, 0x9b, 0x18, 0xeb, 0x68, 0x1b, 0x2b, 0x00, + 0xd1, 0x05, 0x25, 0x00, 0x18, 0x0e, 0x23, 0x01, + 0x02, 0xdb, 0x18, 0xf3, 0x70, 0x1d, 0x30, 0x01, + 0x40, 0x10, 0xe7, 0xd6, 0xb0, 0x01, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x60, 0x98, 0x9e, 0x00, 0x04, 0x80, + 0x2e, 0x08, 0x69, 0x98, 0xb4, 0x90, 0x1c, 0x03, + 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x21, 0x0e, 0x09, + 0x06, 0x38, 0x0e, 0x00, 0x72, 0x19, 0x28, 0x00, + 0xd0, 0x00, 0x75, 0x58, 0x68, 0x5b, 0x2b, 0x00, + 0xd1, 0xf8, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x00, + 0xb5, 0x80, 0x1c, 0x07, 0x68, 0xf8, 0x28, 0x1f, + 0xd9, 0x03, 0x20, 0xe1, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x48, 0x1e, 0x6d, 0x00, 0x68, 0x00, + 0x4b, 0x1d, 0x40, 0x18, 0x49, 0x1b, 0x6d, 0x09, + 0x60, 0x08, 0x05, 0x80, 0x48, 0x19, 0x6d, 0x00, + 0x68, 0x00, 0x49, 0x18, 0x6e, 0xc9, 0x60, 0x08, + 0x48, 0x16, 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, + 0x02, 0x5b, 0x43, 0x18, 0x49, 0x13, 0x6d, 0x09, + 0x60, 0x08, 0x05, 0x80, 0x48, 0x11, 0x6d, 0x00, + 0x68, 0x00, 0x49, 0x10, 0x6e, 0xc9, 0x60, 0x08, + 0x48, 0x0e, 0x6f, 0xc1, 0xcf, 0x09, 0xc1, 0x09, + 0xcf, 0x09, 0xc1, 0x09, 0xcf, 0x08, 0xc1, 0x08, + 0xf0, 0x00, 0xfc, 0x1e, 0x20, 0x00, 0x49, 0x09, + 0x60, 0x08, 0x20, 0x00, 0x49, 0x07, 0x60, 0x48, + 0x20, 0x00, 0x49, 0x06, 0x60, 0x88, 0x49, 0x07, + 0x20, 0x0b, 0xf0, 0x0c, 0xf9, 0x93, 0x20, 0xff, + 0x30, 0x01, 0x49, 0x02, 0x61, 0xc8, 0x20, 0x00, + 0xe7, 0xc0, 0xe7, 0xbf, 0x2e, 0x08, 0x1f, 0x24, + 0xff, 0xff, 0xfd, 0xff, 0x2e, 0x01, 0x01, 0xf9, + 0x1c, 0x01, 0x48, 0x0e, 0x6f, 0x00, 0x68, 0x00, + 0x60, 0x08, 0x48, 0x0c, 0x6e, 0x80, 0x68, 0x00, + 0x60, 0x48, 0x48, 0x0a, 0x6e, 0xc0, 0x68, 0x00, + 0x60, 0x88, 0x48, 0x08, 0x6f, 0x40, 0x68, 0x00, + 0x60, 0xc8, 0x48, 0x06, 0x68, 0x00, 0x61, 0x08, + 0x48, 0x04, 0x68, 0x40, 0x61, 0x48, 0x48, 0x03, + 0x68, 0x80, 0x61, 0x88, 0x20, 0x00, 0x47, 0x70, + 0xe7, 0xfd, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x24, + 0x48, 0x03, 0x6e, 0x80, 0x68, 0x00, 0x07, 0x40, + 0x0f, 0xc0, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, + 0x2e, 0x08, 0x1f, 0x24, 0xb4, 0x80, 0x1c, 0x07, + 0x1c, 0x0a, 0x48, 0x37, 0x69, 0xc0, 0x23, 0xff, + 0x33, 0x01, 0x42, 0x98, 0xd0, 0x02, 0x20, 0xe0, + 0xbc, 0x80, 0x47, 0x70, 0x48, 0x32, 0x62, 0x07, + 0x20, 0x00, 0x49, 0x31, 0x62, 0x48, 0x48, 0x31, + 0x60, 0x02, 0x48, 0x30, 0x68, 0x00, 0x78, 0x00, + 0x49, 0x2d, 0x61, 0x88, 0x48, 0x2d, 0x68, 0x00, + 0x7a, 0x00, 0x49, 0x2b, 0x61, 0x08, 0x48, 0x2b, + 0x68, 0x00, 0x68, 0x40, 0x49, 0x28, 0x60, 0xc8, + 0x48, 0x27, 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, + 0xd0, 0x01, 0x48, 0x27, 0xe0, 0x01, 0x20, 0x01, + 0x02, 0x40, 0x49, 0x23, 0x61, 0xc8, 0x48, 0x22, + 0x68, 0x40, 0x30, 0x01, 0x49, 0x20, 0x60, 0x48, + 0x48, 0x1f, 0x6d, 0x40, 0x68, 0x00, 0x0a, 0x00, + 0x02, 0x00, 0x49, 0x1d, 0x69, 0x89, 0x08, 0x49, + 0x06, 0x09, 0x0e, 0x09, 0x43, 0x08, 0x49, 0x1a, + 0x6d, 0x49, 0x60, 0x08, 0x06, 0x00, 0x48, 0x18, + 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x19, 0x40, 0x18, + 0x49, 0x15, 0x69, 0x89, 0x07, 0xc9, 0x0c, 0x49, + 0x43, 0x08, 0x49, 0x13, 0x6d, 0x09, 0x60, 0x08, + 0x04, 0x40, 0x48, 0x11, 0x6d, 0x00, 0x68, 0x00, + 0x4b, 0x13, 0x40, 0x18, 0x49, 0x0e, 0x6d, 0x09, + 0x60, 0x08, 0x05, 0x40, 0x48, 0x0c, 0x6d, 0x00, + 0x68, 0x00, 0x23, 0x01, 0x03, 0x1b, 0x43, 0x18, + 0x49, 0x09, 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, + 0x48, 0x07, 0x6d, 0x40, 0x68, 0x00, 0x49, 0x06, + 0x6f, 0x09, 0x60, 0x08, 0x48, 0x04, 0x6d, 0x00, + 0x68, 0x00, 0x49, 0x03, 0x6e, 0xc9, 0x60, 0x08, + 0x20, 0x00, 0xe7, 0x99, 0xe7, 0x98, 0x00, 0x00, + 0x2e, 0x08, 0x1f, 0x24, 0x2e, 0x08, 0x60, 0x5c, + 0x00, 0x00, 0x02, 0x01, 0xff, 0xff, 0xbf, 0xff, + 0xff, 0xff, 0xfb, 0xff, 0xb5, 0x00, 0x48, 0xf6, + 0x6e, 0x80, 0x68, 0x00, 0x23, 0x08, 0x40, 0x18, + 0xd0, 0x74, 0x48, 0xf3, 0x6d, 0x00, 0x68, 0x00, + 0x4b, 0xf2, 0x40, 0x18, 0x49, 0xf0, 0x6d, 0x09, + 0x60, 0x08, 0x04, 0x80, 0x48, 0xee, 0x6e, 0x40, + 0x68, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x49, 0xec, + 0x6e, 0x49, 0x60, 0x08, 0x06, 0x00, 0x48, 0xea, + 0x6e, 0xc0, 0x68, 0x00, 0x23, 0x01, 0x02, 0xdb, + 0x40, 0x18, 0xd0, 0x3e, 0x20, 0xff, 0x30, 0x01, + 0x49, 0xe5, 0x61, 0xc8, 0x48, 0xe4, 0x6d, 0x00, + 0x68, 0x00, 0x4b, 0xe5, 0x40, 0x18, 0x49, 0xe2, + 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, 0x48, 0xe0, + 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, + 0x0a, 0x09, 0x4a, 0xdd, 0x6a, 0x52, 0x06, 0x12, + 0x43, 0x11, 0x60, 0x01, 0x48, 0xdd, 0x68, 0x00, + 0x7a, 0x00, 0x49, 0xd9, 0x69, 0x09, 0x1a, 0x41, + 0x48, 0xd7, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, + 0x4b, 0xd9, 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, + 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, + 0x0c, 0x00, 0x48, 0xd1, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x01, 0x23, 0x04, 0x43, 0x19, 0x60, 0x01, + 0x07, 0x48, 0x48, 0xcd, 0x6f, 0xc0, 0x68, 0xc1, + 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0c, 0xf8, 0x74, + 0x48, 0xc9, 0x68, 0x00, 0x30, 0x01, 0x49, 0xc8, + 0x60, 0x08, 0x48, 0xc7, 0x69, 0xc0, 0x4b, 0xcb, + 0x42, 0x98, 0xd0, 0x73, 0xdc, 0x08, 0x23, 0xff, + 0x33, 0x01, 0x42, 0x98, 0xd0, 0x6f, 0x23, 0x01, + 0x02, 0x5b, 0x42, 0x98, 0xd0, 0x07, 0xe2, 0xba, + 0x4b, 0xc5, 0x42, 0x98, 0xd0, 0x68, 0x4b, 0xc5, + 0x42, 0x98, 0xd0, 0x66, 0xe2, 0xb3, 0x48, 0xbc, + 0x6e, 0x80, 0x68, 0x00, 0x23, 0x01, 0x02, 0x5b, + 0x40, 0x18, 0xe0, 0x00, 0xe2, 0xcd, 0xd0, 0x3f, + 0x48, 0xb7, 0x68, 0x00, 0x30, 0x01, 0x49, 0xb6, + 0x60, 0x08, 0x48, 0xb5, 0x6d, 0x00, 0x68, 0x00, + 0x4b, 0xb5, 0x40, 0x18, 0x49, 0xb2, 0x6d, 0x09, + 0x60, 0x08, 0x04, 0xc0, 0x20, 0xff, 0x30, 0x01, + 0x49, 0xaf, 0x61, 0xc8, 0x48, 0xae, 0x6f, 0xc0, + 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, + 0x4a, 0xab, 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, + 0x60, 0x01, 0x48, 0xac, 0x68, 0x00, 0x7a, 0x00, + 0x49, 0xa7, 0x69, 0x09, 0x1a, 0x41, 0x48, 0xa6, + 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, 0x4b, 0xa8, + 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, + 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, + 0x48, 0x9f, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, + 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, 0x07, 0x88, + 0x48, 0x9b, 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, + 0x40, 0x88, 0xf0, 0x0c, 0xf8, 0x11, 0xe0, 0x5e, + 0x48, 0x97, 0x69, 0x00, 0x28, 0x00, 0xd0, 0x20, + 0x48, 0x95, 0x69, 0x00, 0x38, 0x01, 0x49, 0x94, + 0x61, 0x08, 0x48, 0x93, 0x68, 0xc0, 0x78, 0x00, + 0x49, 0x91, 0x6c, 0x89, 0x68, 0x09, 0x0a, 0x09, + 0x02, 0x09, 0x43, 0x08, 0x49, 0x8e, 0x6c, 0x89, + 0x60, 0x08, 0x06, 0x00, 0x0e, 0x00, 0x48, 0x8c, + 0x68, 0xc0, 0xe0, 0x03, 0xe1, 0x4b, 0xe2, 0x4d, + 0xe0, 0x42, 0xe1, 0x93, 0x30, 0x01, 0x49, 0x88, + 0x60, 0xc8, 0x48, 0x8d, 0x49, 0x86, 0x61, 0xc8, + 0xe0, 0x39, 0x20, 0xff, 0x30, 0x01, 0x49, 0x84, + 0x61, 0xc8, 0x48, 0x83, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0x80, + 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, + 0x48, 0x80, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x7c, + 0x69, 0x09, 0x1a, 0x41, 0x48, 0x7a, 0x6f, 0xc0, + 0x68, 0x80, 0x68, 0x02, 0x4b, 0x7c, 0x40, 0x1a, + 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, + 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, 0x48, 0x74, + 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x23, 0x01, + 0x43, 0x19, 0x60, 0x01, 0x07, 0xc8, 0x48, 0x70, + 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, + 0xf0, 0x0b, 0xff, 0xba, 0x48, 0x6c, 0x6d, 0x00, + 0x68, 0x00, 0x4b, 0x6d, 0x40, 0x18, 0x49, 0x6a, + 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, 0xe2, 0x08, + 0x48, 0x67, 0x69, 0x00, 0x28, 0x00, 0xd0, 0x5f, + 0x48, 0x65, 0x6e, 0x80, 0x68, 0x00, 0x23, 0xff, + 0x33, 0x01, 0x40, 0x18, 0xd0, 0x3f, 0x48, 0x62, + 0x68, 0x00, 0x30, 0x01, 0x49, 0x60, 0x60, 0x08, + 0x48, 0x5f, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x60, + 0x40, 0x18, 0x49, 0x5d, 0x6d, 0x09, 0x60, 0x08, + 0x04, 0xc0, 0x20, 0xff, 0x30, 0x01, 0x49, 0x5a, + 0x61, 0xc8, 0x48, 0x59, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0x56, + 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, + 0x48, 0x56, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x52, + 0x69, 0x09, 0x1a, 0x41, 0x48, 0x50, 0x6f, 0xc0, + 0x68, 0x80, 0x68, 0x02, 0x4b, 0x52, 0x40, 0x1a, + 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, + 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, 0x48, 0x4a, + 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x23, 0x02, + 0x43, 0x19, 0x60, 0x01, 0x07, 0x88, 0x48, 0x46, + 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, + 0xf0, 0x0b, 0xff, 0x66, 0xe0, 0x17, 0x48, 0x42, + 0x68, 0xc0, 0x78, 0x00, 0x49, 0x40, 0x6c, 0x89, + 0x68, 0x09, 0x0a, 0x09, 0x02, 0x09, 0x43, 0x08, + 0x49, 0x3d, 0x6c, 0x89, 0x60, 0x08, 0x06, 0x00, + 0x0e, 0x00, 0x48, 0x3b, 0x68, 0xc0, 0x30, 0x01, + 0x49, 0x39, 0x60, 0xc8, 0x48, 0x38, 0x69, 0x00, + 0x38, 0x01, 0x49, 0x37, 0x61, 0x08, 0xe0, 0xa1, + 0x48, 0x35, 0x6a, 0x00, 0x38, 0x01, 0x49, 0x34, + 0x62, 0x08, 0x48, 0x33, 0x6a, 0x00, 0x28, 0x00, + 0xd0, 0x4b, 0x48, 0x31, 0x6a, 0x40, 0x30, 0x01, + 0x49, 0x2f, 0x62, 0x48, 0x48, 0x31, 0x68, 0x00, + 0x30, 0x0c, 0x49, 0x30, 0x60, 0x08, 0x48, 0x2f, + 0x68, 0x00, 0x78, 0x00, 0x49, 0x2a, 0x61, 0x88, + 0x48, 0x2c, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x28, + 0x61, 0x08, 0x48, 0x2a, 0x68, 0x00, 0x68, 0x40, + 0x49, 0x25, 0x60, 0xc8, 0x48, 0x24, 0x69, 0x80, + 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x48, 0x27, + 0xe0, 0x01, 0x20, 0x01, 0x02, 0x40, 0x49, 0x20, + 0x61, 0xc8, 0x48, 0x1f, 0x6d, 0x00, 0x68, 0x00, + 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, 0x49, 0x1c, + 0x6d, 0x09, 0x60, 0x08, 0x04, 0x80, 0x48, 0x1a, + 0x6d, 0x40, 0x68, 0x00, 0x0a, 0x00, 0x02, 0x00, + 0x49, 0x17, 0x69, 0x89, 0x08, 0x49, 0x06, 0x09, + 0x0e, 0x09, 0x43, 0x08, 0x49, 0x14, 0x6d, 0x49, + 0x60, 0x08, 0x06, 0x00, 0x48, 0x12, 0x6d, 0x00, + 0x68, 0x00, 0x4b, 0x19, 0x40, 0x18, 0x49, 0x10, + 0x69, 0x89, 0x07, 0xc9, 0x0c, 0x49, 0x43, 0x08, + 0x49, 0x0d, 0x6d, 0x09, 0x60, 0x08, 0x04, 0x40, + 0xe0, 0x4c, 0x20, 0xff, 0x30, 0x01, 0x49, 0x0a, + 0x61, 0xc8, 0x48, 0x09, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0x06, + 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, + 0x48, 0x06, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x02, + 0x69, 0x09, 0x1a, 0x41, 0x48, 0x00, 0xe0, 0x11, + 0x2e, 0x08, 0x1f, 0x24, 0xff, 0xff, 0xdf, 0xff, + 0xff, 0xff, 0xef, 0xff, 0x2e, 0x08, 0x60, 0x5c, + 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x02, 0x01, + 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x03, + 0xff, 0xff, 0xbf, 0xff, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x02, 0x4b, 0xa5, 0x40, 0x1a, 0x04, 0x09, + 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, + 0x02, 0x08, 0x0c, 0x00, 0x48, 0xa1, 0x6f, 0xc0, + 0x68, 0x80, 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, + 0x60, 0x01, 0x07, 0xc8, 0x48, 0x9d, 0x6f, 0xc0, + 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0b, + 0xfe, 0xb3, 0x48, 0x9a, 0x6d, 0x00, 0x68, 0x00, + 0x4b, 0x99, 0x40, 0x18, 0x49, 0x97, 0x6d, 0x09, + 0x60, 0x08, 0x04, 0xc0, 0xe1, 0x01, 0x48, 0x95, + 0x6e, 0x80, 0x68, 0x00, 0x23, 0x01, 0x02, 0x5b, + 0x40, 0x18, 0xd0, 0x3f, 0x48, 0x91, 0x68, 0x00, + 0x30, 0x01, 0x49, 0x90, 0x60, 0x08, 0x48, 0x8f, + 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x8e, 0x40, 0x18, + 0x49, 0x8c, 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, + 0x20, 0xff, 0x30, 0x01, 0x49, 0x89, 0x61, 0xc8, + 0x48, 0x88, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, + 0x02, 0x09, 0x0a, 0x09, 0x4a, 0x85, 0x6a, 0x52, + 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, 0x48, 0x85, + 0x68, 0x00, 0x7a, 0x00, 0x49, 0x81, 0x69, 0x09, + 0x1a, 0x41, 0x48, 0x80, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x02, 0x4b, 0x7d, 0x40, 0x1a, 0x04, 0x09, + 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, + 0x02, 0x08, 0x0c, 0x00, 0x48, 0x79, 0x6f, 0xc0, + 0x68, 0x80, 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, + 0x60, 0x01, 0x07, 0x88, 0x48, 0x75, 0x6f, 0xc0, + 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0b, + 0xfe, 0x63, 0xe0, 0x02, 0x48, 0x74, 0x49, 0x71, + 0x61, 0xc8, 0xe0, 0xb6, 0x48, 0x6f, 0x69, 0x00, + 0x28, 0x00, 0xd0, 0x62, 0x48, 0x6d, 0x6e, 0x00, + 0x68, 0x00, 0x49, 0x6c, 0x68, 0xc9, 0x70, 0x08, + 0x48, 0x6a, 0x68, 0xc0, 0x30, 0x01, 0x49, 0x69, + 0x60, 0xc8, 0x48, 0x68, 0x69, 0x00, 0x38, 0x01, + 0x49, 0x66, 0x61, 0x08, 0x48, 0x65, 0x69, 0x00, + 0x28, 0x00, 0xd1, 0x4d, 0x48, 0x63, 0x6a, 0x00, + 0x28, 0x01, 0xd1, 0x49, 0x48, 0x63, 0x68, 0x00, + 0x7a, 0x40, 0x49, 0x60, 0x6d, 0x09, 0x68, 0x09, + 0x4b, 0x62, 0x40, 0x19, 0x07, 0xc0, 0x0d, 0x40, + 0x43, 0x08, 0x49, 0x5c, 0x6d, 0x09, 0x60, 0x08, + 0x05, 0x40, 0x0f, 0xc0, 0x20, 0xff, 0x30, 0x01, + 0x49, 0x58, 0x61, 0xc8, 0x48, 0x57, 0x6d, 0x00, + 0x68, 0x00, 0x4b, 0x57, 0x40, 0x18, 0x49, 0x55, + 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, 0x48, 0x53, + 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, + 0x0a, 0x09, 0x4a, 0x50, 0x6a, 0x52, 0x06, 0x12, + 0x43, 0x11, 0x60, 0x01, 0x48, 0x4f, 0x68, 0x00, + 0x7a, 0x00, 0x49, 0x4c, 0x69, 0x09, 0x1a, 0x41, + 0x48, 0x4a, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, + 0x4b, 0x47, 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, + 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, + 0x0c, 0x00, 0x48, 0x44, 0x6f, 0xc0, 0x68, 0x80, + 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, + 0x07, 0xc8, 0x48, 0x40, 0x6f, 0xc0, 0x68, 0xc1, + 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0b, 0xfd, 0xf8, + 0xe0, 0x4f, 0x48, 0x3c, 0x6a, 0x00, 0x38, 0x01, + 0x49, 0x3a, 0x62, 0x08, 0x48, 0x39, 0x6a, 0x40, + 0x30, 0x01, 0x49, 0x38, 0x62, 0x48, 0x48, 0x39, + 0x68, 0x00, 0x30, 0x0c, 0x49, 0x37, 0x60, 0x08, + 0x48, 0x36, 0x68, 0x00, 0x78, 0x00, 0x49, 0x33, + 0x61, 0x88, 0x48, 0x34, 0x68, 0x00, 0x7a, 0x00, + 0x49, 0x30, 0x61, 0x08, 0x48, 0x31, 0x68, 0x00, + 0x68, 0x40, 0x49, 0x2e, 0x60, 0xc8, 0x48, 0x2d, + 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, + 0x48, 0x2f, 0xe0, 0x01, 0x20, 0x01, 0x02, 0x40, + 0x49, 0x28, 0x61, 0xc8, 0x48, 0x27, 0x6d, 0x00, + 0x68, 0x00, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, + 0x49, 0x24, 0x6d, 0x09, 0x60, 0x08, 0x04, 0x80, + 0x48, 0x22, 0x6d, 0x40, 0x68, 0x00, 0x0a, 0x00, + 0x02, 0x00, 0x49, 0x20, 0x69, 0x89, 0x08, 0x49, + 0x06, 0x09, 0x0e, 0x09, 0x43, 0x08, 0x49, 0x1d, + 0x6d, 0x49, 0x60, 0x08, 0x06, 0x00, 0x48, 0x1b, + 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x1f, 0x40, 0x18, + 0x49, 0x18, 0x69, 0x89, 0x07, 0xc9, 0x0c, 0x49, + 0x43, 0x08, 0x49, 0x16, 0x6d, 0x09, 0x60, 0x08, + 0x04, 0x40, 0xe0, 0x01, 0xe0, 0x00, 0xe7, 0xff, + 0x48, 0x12, 0x6c, 0x80, 0x68, 0x00, 0x49, 0x11, + 0x6e, 0x49, 0x60, 0x08, 0x48, 0x0f, 0x6d, 0x40, + 0x68, 0x00, 0x49, 0x0e, 0x6f, 0x09, 0x60, 0x08, + 0x48, 0x0c, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x0b, + 0x6e, 0xc9, 0x60, 0x08, 0x48, 0x09, 0x6c, 0xc0, + 0x68, 0x00, 0x23, 0x08, 0x43, 0x18, 0x49, 0x07, + 0x6c, 0xc9, 0x60, 0x08, 0x07, 0x00, 0x48, 0x05, + 0x6c, 0xc0, 0x68, 0x00, 0x49, 0x03, 0x6e, 0x89, + 0x60, 0x08, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0xff, 0x00, 0x00, 0xff, 0x2e, 0x08, 0x1f, 0x24, + 0xff, 0xff, 0xef, 0xff, 0x2e, 0x08, 0x60, 0x5c, + 0x00, 0x00, 0x02, 0x03, 0xff, 0xff, 0xfb, 0xff, + 0x00, 0x00, 0x02, 0x01, 0xff, 0xff, 0xbf, 0xff, + 0xb4, 0x80, 0x49, 0x2e, 0x20, 0x00, 0x28, 0x08, + 0xd3, 0x04, 0xe0, 0x06, 0x1c, 0x42, 0x06, 0x10, + 0x0e, 0x00, 0xe7, 0xf8, 0x23, 0x00, 0xc1, 0x08, + 0xe7, 0xf8, 0x4a, 0x29, 0x6f, 0xd2, 0x68, 0x12, + 0x4b, 0x27, 0x6d, 0x9b, 0x68, 0x1b, 0x0a, 0x1b, + 0x02, 0x1b, 0x06, 0x12, 0x0e, 0x12, 0x43, 0x1a, + 0x4b, 0x23, 0x6d, 0x9b, 0x60, 0x1a, 0x06, 0x12, + 0x0e, 0x12, 0x4a, 0x21, 0x6f, 0xd2, 0x68, 0x52, + 0x4b, 0x1f, 0x6d, 0x1b, 0x68, 0x1f, 0x23, 0x01, + 0x03, 0xdb, 0x43, 0x9f, 0x1c, 0x3b, 0x07, 0xd2, + 0x0c, 0x12, 0x43, 0x1a, 0x4b, 0x1a, 0x6d, 0x1b, + 0x60, 0x1a, 0x04, 0x12, 0x0f, 0xd2, 0x4a, 0x18, + 0x6f, 0xd2, 0x69, 0x12, 0x4b, 0x16, 0x6d, 0xdb, + 0x68, 0x1b, 0x0c, 0x1b, 0x04, 0x1b, 0x04, 0x12, + 0x0c, 0x12, 0x43, 0x1a, 0x4b, 0x12, 0x6d, 0xdb, + 0x60, 0x1a, 0x04, 0x12, 0x0c, 0x12, 0x4a, 0x10, + 0x6d, 0x12, 0x68, 0x12, 0x23, 0x01, 0x02, 0x5b, + 0x43, 0x1a, 0x4b, 0x0d, 0x6d, 0x1b, 0x60, 0x1a, + 0x05, 0x92, 0x4a, 0x0b, 0x6d, 0x12, 0x68, 0x12, + 0x4b, 0x09, 0x6e, 0xdb, 0x60, 0x1a, 0x4a, 0x08, + 0x6d, 0x92, 0x68, 0x12, 0x4b, 0x06, 0x6f, 0x5b, + 0x60, 0x1a, 0x4a, 0x05, 0x6d, 0xd2, 0x68, 0x12, + 0x4b, 0x03, 0x6f, 0x9b, 0x60, 0x1a, 0xbc, 0x80, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x4c, + 0x2e, 0x08, 0x1f, 0x24, 0xb5, 0x90, 0x1c, 0x07, + 0x1c, 0x0c, 0x2f, 0x22, 0xd1, 0x07, 0x2c, 0x3f, + 0xd8, 0x01, 0x2c, 0x01, 0xd2, 0x03, 0x20, 0x38, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, + 0x49, 0x13, 0x70, 0x08, 0x23, 0x01, 0x03, 0xdb, + 0x42, 0x9f, 0xd0, 0x02, 0x4b, 0x11, 0x42, 0x9f, + 0xd1, 0x04, 0x48, 0x11, 0x60, 0x07, 0x20, 0x00, + 0xe7, 0xee, 0xe0, 0x18, 0x2f, 0xff, 0xd1, 0x0b, + 0x21, 0x00, 0x43, 0xc9, 0x20, 0x0d, 0xf0, 0x00, + 0xf8, 0x1d, 0x48, 0x0c, 0x68, 0x01, 0x48, 0x0c, + 0x68, 0x00, 0xf0, 0x00, 0xf8, 0x43, 0xe0, 0x07, + 0x1c, 0x21, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x3e, + 0x48, 0x07, 0x60, 0x07, 0x48, 0x05, 0x60, 0x04, + 0x20, 0x00, 0xe7, 0xd5, 0xe7, 0xd4, 0xe7, 0xd3, + 0x2e, 0x08, 0x60, 0x84, 0x00, 0x00, 0x80, 0x0f, + 0xcc, 0x00, 0x05, 0x00, 0x2e, 0x08, 0x60, 0x80, + 0x2e, 0x08, 0x1f, 0xa4, 0xb4, 0xb0, 0x1c, 0x07, + 0x1c, 0x0a, 0x4b, 0x13, 0x68, 0x5b, 0x1c, 0x18, + 0x21, 0x00, 0x29, 0x02, 0xdb, 0x04, 0xe0, 0x1a, + 0x1c, 0x4b, 0x06, 0x19, 0x0e, 0x09, 0xe7, 0xf8, + 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc4, 0x29, 0x00, + 0xd1, 0x01, 0x60, 0x27, 0xe0, 0x05, 0x23, 0x01, + 0x42, 0xda, 0xd0, 0x01, 0x60, 0x22, 0xe0, 0x00, + 0xe0, 0x09, 0x1d, 0x05, 0x23, 0x05, 0x02, 0x1b, + 0x42, 0x9d, 0xdb, 0x02, 0x20, 0x01, 0x02, 0x80, + 0xe0, 0x00, 0x30, 0x04, 0xe7, 0xe4, 0x4b, 0x02, + 0x60, 0x58, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, + 0xcc, 0x00, 0x0f, 0x00, 0xb5, 0x90, 0x1c, 0x04, + 0x1c, 0x0f, 0x05, 0x20, 0x0d, 0x00, 0x23, 0xff, + 0x33, 0x04, 0x42, 0x98, 0xd0, 0x50, 0xdc, 0x18, + 0x28, 0x10, 0xd0, 0x2d, 0xdc, 0x08, 0x28, 0x01, + 0xd0, 0x23, 0x28, 0x02, 0xd0, 0x1e, 0x28, 0x04, + 0xd0, 0x1f, 0x28, 0x08, 0xd0, 0x1d, 0xe0, 0x76, + 0x28, 0x12, 0xd0, 0x1d, 0x28, 0x22, 0xd0, 0x3a, + 0x23, 0xff, 0x33, 0x02, 0x42, 0x98, 0xd0, 0x24, + 0x23, 0xff, 0x33, 0x03, 0x42, 0x98, 0xd0, 0x29, + 0xe0, 0x69, 0x38, 0xff, 0x38, 0x05, 0x28, 0x08, + 0xd2, 0x65, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x35, 0x3c, 0x41, 0x4f, + 0x56, 0x4b, 0x5d, 0x46, 0x20, 0x00, 0x49, 0x32, + 0x63, 0x48, 0x48, 0x31, 0x62, 0x04, 0xe0, 0x5c, + 0x20, 0x01, 0x49, 0x2f, 0x63, 0x48, 0xe0, 0x58, + 0x20, 0x00, 0x49, 0x2e, 0x67, 0x08, 0x21, 0x00, + 0x43, 0xc9, 0x20, 0x10, 0xf7, 0xff, 0xff, 0x92, + 0xe0, 0x4f, 0x20, 0x01, 0x49, 0x29, 0x67, 0x08, + 0x21, 0x00, 0x43, 0xc9, 0x20, 0x10, 0xf7, 0xff, + 0xff, 0x89, 0xe0, 0x46, 0x20, 0x02, 0x49, 0x25, + 0x67, 0x08, 0x21, 0x00, 0x43, 0xc9, 0x20, 0x10, + 0xf7, 0xff, 0xff, 0x80, 0xe0, 0x3d, 0x1c, 0x39, + 0x20, 0x22, 0xf7, 0xff, 0xff, 0x7b, 0xe0, 0x38, + 0x48, 0x1e, 0x65, 0xc7, 0x21, 0x01, 0x20, 0x35, + 0xf7, 0xff, 0xff, 0x74, 0xe0, 0x31, 0x48, 0x1b, + 0x65, 0xc7, 0x21, 0x02, 0x20, 0x35, 0xf7, 0xff, + 0xff, 0x6d, 0xe0, 0x2a, 0x21, 0x00, 0x20, 0x35, + 0xf7, 0xff, 0xff, 0x68, 0xe0, 0x25, 0x21, 0x03, + 0x20, 0x35, 0xf7, 0xff, 0xff, 0x63, 0xe0, 0x20, + 0x21, 0x04, 0x20, 0x35, 0xf7, 0xff, 0xff, 0x5e, + 0xe0, 0x1b, 0x20, 0x00, 0x49, 0x0f, 0x65, 0xc8, + 0xe0, 0x17, 0x48, 0x0e, 0x66, 0x07, 0x21, 0x01, + 0x20, 0x36, 0xf7, 0xff, 0xff, 0x53, 0xe0, 0x10, + 0x48, 0x0a, 0x66, 0x07, 0x21, 0x02, 0x20, 0x36, + 0xf7, 0xff, 0xff, 0x4c, 0xe0, 0x09, 0x20, 0x00, + 0x49, 0x06, 0x66, 0x08, 0xe0, 0x05, 0x1c, 0x20, + 0x21, 0x00, 0x43, 0xc9, 0xf7, 0xff, 0xff, 0x42, + 0xe7, 0xff, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0xcc, 0x00, 0x0f, 0x80, 0xcc, 0x00, 0x05, 0x00, + 0xb4, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, + 0x06, 0x38, 0x0e, 0x00, 0x06, 0x19, 0x0e, 0x09, + 0x29, 0x01, 0xd0, 0x08, 0x22, 0x00, 0x4d, 0x09, + 0x60, 0x2a, 0x22, 0x00, 0x43, 0xd2, 0x4d, 0x08, + 0x68, 0x2d, 0x60, 0x2a, 0xe0, 0x08, 0x4a, 0x07, + 0x68, 0x12, 0x60, 0x14, 0x4a, 0x04, 0x68, 0x12, + 0x60, 0x10, 0x22, 0x01, 0x4d, 0x01, 0x60, 0x2a, + 0xbc, 0xb0, 0x47, 0x70, 0xcc, 0x00, 0x0d, 0x00, + 0x2e, 0x08, 0x60, 0x78, 0x2e, 0x08, 0x60, 0x74, + 0xb5, 0xf3, 0xb0, 0x81, 0x99, 0x02, 0x06, 0x08, + 0x16, 0x00, 0x90, 0x00, 0xb0, 0x85, 0x20, 0x00, + 0x90, 0x01, 0x9c, 0x06, 0x1d, 0xe6, 0x36, 0x05, + 0xcc, 0x20, 0x07, 0xa8, 0x0f, 0x80, 0x06, 0x00, + 0x16, 0x00, 0x90, 0x00, 0x08, 0xad, 0x3d, 0x03, + 0xcc, 0x80, 0x08, 0xb8, 0x00, 0x80, 0x19, 0x86, + 0xcc, 0x02, 0x91, 0x04, 0x99, 0x04, 0x08, 0x89, + 0x91, 0x04, 0x20, 0x03, 0x05, 0x80, 0x21, 0x35, + 0x06, 0x49, 0x60, 0x08, 0x48, 0x46, 0x68, 0x01, + 0x08, 0x89, 0x00, 0x89, 0x60, 0x01, 0x48, 0x45, + 0x90, 0x03, 0x20, 0x00, 0x90, 0x02, 0x98, 0x02, + 0x42, 0xa8, 0xd3, 0x04, 0xe0, 0x08, 0x98, 0x02, + 0x30, 0x01, 0x90, 0x02, 0xe7, 0xf7, 0xcc, 0x02, + 0x98, 0x03, 0xc0, 0x02, 0x90, 0x03, 0xe7, 0xf6, + 0x98, 0x00, 0x28, 0x00, 0xd0, 0x03, 0xcc, 0x02, + 0x98, 0x03, 0xc0, 0x02, 0x90, 0x03, 0x20, 0x00, + 0x49, 0x39, 0x65, 0x88, 0x9f, 0x04, 0x2f, 0x00, + 0xd8, 0x02, 0xe0, 0x05, 0x3f, 0x01, 0xe7, 0xfa, + 0xce, 0x02, 0x48, 0x35, 0x64, 0x81, 0xe7, 0xf9, + 0x20, 0x00, 0x49, 0x34, 0x60, 0x48, 0x20, 0x00, + 0x21, 0x35, 0x06, 0x49, 0x60, 0x08, 0x20, 0x00, + 0x49, 0x2f, 0x66, 0x88, 0x20, 0x00, 0x21, 0x35, + 0x06, 0x49, 0x61, 0x88, 0x20, 0x01, 0x49, 0x2c, + 0x64, 0xc8, 0x48, 0x2c, 0x68, 0x40, 0x28, 0x00, + 0xd1, 0x0e, 0x27, 0x00, 0x2f, 0x64, 0xd3, 0x02, + 0xe0, 0x02, 0x37, 0x01, 0xe7, 0xfa, 0xe7, 0xfc, + 0x98, 0x01, 0x1c, 0x41, 0x91, 0x01, 0x4b, 0x26, + 0x42, 0x98, 0xdb, 0x00, 0xe0, 0x00, 0xe7, 0xec, + 0x48, 0x24, 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, + 0x60, 0x01, 0x48, 0x23, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x03, 0x48, 0x21, 0x68, 0x40, 0x28, 0x00, + 0xd1, 0x0b, 0x48, 0x20, 0x68, 0x40, 0x4b, 0x19, + 0x18, 0xc0, 0x49, 0x1d, 0x60, 0x08, 0x48, 0x1d, + 0x68, 0x80, 0x4b, 0x16, 0x18, 0xc0, 0x49, 0x1a, + 0x60, 0x48, 0x48, 0x19, 0x68, 0x00, 0x21, 0x33, + 0x06, 0x49, 0x65, 0x48, 0x48, 0x16, 0x68, 0x40, + 0x21, 0x33, 0x06, 0x49, 0x65, 0x88, 0x48, 0x14, + 0x68, 0x40, 0x21, 0x33, 0x06, 0x49, 0x66, 0x88, + 0x48, 0x11, 0x68, 0x00, 0x21, 0x33, 0x06, 0x49, + 0x66, 0x48, 0x20, 0x03, 0x21, 0x33, 0x06, 0x49, + 0x67, 0x08, 0x20, 0x00, 0x49, 0x0e, 0x68, 0x09, + 0x70, 0x08, 0x21, 0x00, 0x20, 0x0d, 0xf7, 0xff, + 0xfe, 0x2d, 0xb0, 0x05, 0xb0, 0x01, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x70, 0xcc, 0x00, 0x00, 0x00, + 0x6a, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x27, 0x10, 0x6a, 0x00, 0x00, 0x10, + 0x2e, 0x08, 0x7c, 0x24, 0xcc, 0x00, 0x0f, 0x80, + 0x2e, 0x08, 0x94, 0xac, 0x1c, 0x01, 0xb0, 0x81, + 0x48, 0x27, 0x22, 0x00, 0x92, 0x00, 0x9a, 0x00, + 0x2a, 0x16, 0xdb, 0x04, 0xe0, 0x09, 0x9a, 0x00, + 0x32, 0x01, 0x92, 0x00, 0xe7, 0xf7, 0x68, 0x02, + 0x9b, 0x00, 0x00, 0x9b, 0x50, 0xca, 0x30, 0x04, + 0xe7, 0xf5, 0x48, 0x20, 0x22, 0x00, 0x92, 0x00, + 0x9a, 0x00, 0x2a, 0x0b, 0xdb, 0x04, 0xe0, 0x0a, + 0x9a, 0x00, 0x32, 0x01, 0x92, 0x00, 0xe7, 0xf7, + 0x68, 0x03, 0x9a, 0x00, 0x00, 0x92, 0x18, 0x52, + 0x65, 0x93, 0x30, 0x04, 0xe7, 0xf4, 0x48, 0x18, + 0x22, 0x00, 0x92, 0x00, 0x9a, 0x00, 0x2a, 0x11, + 0xdb, 0x04, 0xe0, 0x0b, 0x9a, 0x00, 0x32, 0x01, + 0x92, 0x00, 0xe7, 0xf7, 0x68, 0x03, 0x9a, 0x00, + 0x00, 0x92, 0x18, 0x52, 0x32, 0x80, 0x60, 0x53, + 0x30, 0x04, 0xe7, 0xf3, 0x48, 0x0f, 0x22, 0x02, + 0x92, 0x00, 0x9a, 0x00, 0x2a, 0x05, 0xdb, 0x04, + 0xe0, 0x0b, 0x9a, 0x00, 0x32, 0x01, 0x92, 0x00, + 0xe7, 0xf7, 0x68, 0x02, 0x9b, 0x00, 0x00, 0x9b, + 0x18, 0x5b, 0x33, 0x80, 0x60, 0x5a, 0x30, 0x04, + 0xe7, 0xf3, 0x4a, 0x07, 0x6c, 0x12, 0x1d, 0xcb, + 0x33, 0x79, 0x61, 0xda, 0xb0, 0x01, 0x47, 0x70, + 0xcc, 0x00, 0x05, 0x20, 0xcc, 0x00, 0x0c, 0x00, + 0xcc, 0x00, 0x0c, 0x5c, 0xcc, 0x00, 0x0c, 0xa0, + 0xcc, 0x00, 0x0c, 0x80, 0xb4, 0xf0, 0x1c, 0x06, + 0x1c, 0x0f, 0x1c, 0x14, 0x1c, 0x1d, 0x06, 0x29, + 0x0e, 0x09, 0x2c, 0x1f, 0xdb, 0x02, 0x20, 0xaf, + 0xbc, 0xf0, 0x47, 0x70, 0x4b, 0x0b, 0x40, 0x1f, + 0x48, 0x0b, 0x68, 0x00, 0x60, 0x06, 0x29, 0x01, + 0xd1, 0x07, 0x48, 0x0a, 0x68, 0x02, 0x43, 0x3a, + 0x60, 0x02, 0x20, 0x80, 0x6e, 0x00, 0x60, 0x04, + 0xe0, 0x05, 0x29, 0x02, 0xd1, 0x03, 0x48, 0x05, + 0x68, 0x02, 0x43, 0xba, 0x60, 0x02, 0x20, 0x00, + 0xe7, 0xe6, 0xe7, 0xe5, 0xff, 0xff, 0xf8, 0xff, + 0x2e, 0x08, 0x60, 0x7c, 0xcc, 0x00, 0x02, 0x20, + 0xb5, 0xf3, 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x00, 0x99, 0x02, 0x06, 0x0e, + 0x0e, 0x36, 0x48, 0x1a, 0x6f, 0x00, 0x23, 0x02, + 0x40, 0x18, 0xd0, 0x0d, 0x20, 0x33, 0x06, 0x40, + 0x6d, 0x80, 0x21, 0x33, 0x06, 0x49, 0x6d, 0x49, + 0x1a, 0x41, 0x48, 0x14, 0x6d, 0xc0, 0x4a, 0x13, + 0x6d, 0x92, 0x1a, 0x80, 0x18, 0x0d, 0xe0, 0x06, + 0x20, 0x33, 0x06, 0x40, 0x6d, 0x80, 0x21, 0x33, + 0x06, 0x49, 0x6d, 0x49, 0x1a, 0x45, 0x98, 0x00, + 0x43, 0x68, 0x1c, 0x01, 0x20, 0x64, 0xf0, 0x07, + 0xfb, 0x43, 0x1c, 0x04, 0x43, 0x6e, 0x1c, 0x31, + 0x20, 0x64, 0xf0, 0x07, 0xfb, 0x3d, 0x1c, 0x07, + 0x08, 0xa4, 0x00, 0xa4, 0x08, 0xbf, 0x00, 0xbf, + 0x48, 0x05, 0x64, 0x84, 0x48, 0x04, 0x64, 0xc7, + 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, + 0xcc, 0x00, 0x0c, 0x80, 0xb5, 0xf7, 0x9a, 0x02, + 0x06, 0x15, 0x0e, 0x2d, 0xb0, 0x82, 0x27, 0x00, + 0x2d, 0x1f, 0xdb, 0x05, 0x20, 0xaf, 0xb0, 0x02, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2f, 0x00, 0xd1, 0x0d, 0x48, 0x19, 0x69, 0x80, + 0x28, 0x00, 0xd0, 0x00, 0xe7, 0xfa, 0x20, 0x02, + 0x49, 0x16, 0x61, 0x88, 0x48, 0x15, 0x69, 0x80, + 0x28, 0x02, 0xd1, 0x00, 0x27, 0xff, 0xe7, 0xef, + 0x4c, 0x13, 0x94, 0x00, 0x20, 0x01, 0x02, 0x40, + 0x90, 0x01, 0x22, 0x00, 0x99, 0x03, 0xb4, 0x06, + 0x06, 0x2b, 0x16, 0x1b, 0x9a, 0x03, 0x99, 0x04, + 0x1c, 0x20, 0xf0, 0x01, 0xff, 0x75, 0xb0, 0x02, + 0x1c, 0x06, 0x2e, 0xd2, 0xd1, 0x06, 0x20, 0x00, + 0x49, 0x08, 0x61, 0x88, 0x20, 0xd2, 0xb0, 0x02, + 0xe7, 0xd2, 0xe0, 0x08, 0x20, 0x00, 0x99, 0x00, + 0x60, 0x08, 0x20, 0x00, 0x49, 0x03, 0x61, 0x88, + 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xc8, 0xb0, 0x02, + 0xe7, 0xc6, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x80, + 0xcc, 0x00, 0x06, 0x00, 0xb5, 0xff, 0x9f, 0x09, + 0xb0, 0x81, 0x9b, 0x01, 0x06, 0x18, 0x0e, 0x00, + 0x9b, 0x02, 0x06, 0x19, 0x0e, 0x09, 0x9b, 0x03, + 0x06, 0x1b, 0x0e, 0x1b, 0x93, 0x00, 0x9b, 0x04, + 0x06, 0x1a, 0x0e, 0x12, 0x06, 0x3d, 0x0e, 0x2d, + 0x2d, 0x01, 0xd1, 0x07, 0x4c, 0x1c, 0x68, 0x26, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x9e, 0x1c, 0x33, + 0x60, 0x23, 0xe0, 0x07, 0x2d, 0x02, 0xd1, 0x05, + 0x4c, 0x17, 0x68, 0x26, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x33, 0x60, 0x23, 0x28, 0x00, 0xd1, 0x03, + 0x23, 0x00, 0x4c, 0x14, 0x61, 0xe3, 0xe0, 0x04, + 0x28, 0x01, 0xd1, 0x02, 0x23, 0x01, 0x4c, 0x11, + 0x61, 0xe3, 0x29, 0x00, 0xd1, 0x03, 0x23, 0x00, + 0x4c, 0x0e, 0x65, 0xa3, 0xe0, 0x04, 0x29, 0x01, + 0xd1, 0x02, 0x23, 0x01, 0x4c, 0x0b, 0x65, 0xa3, + 0x2a, 0x00, 0xd1, 0x03, 0x23, 0x02, 0x4c, 0x09, + 0x66, 0xe3, 0xe0, 0x04, 0x2a, 0x01, 0xd1, 0x02, + 0x23, 0x03, 0x4c, 0x06, 0x66, 0xe3, 0x9b, 0x00, + 0x4c, 0x04, 0x67, 0x23, 0xb0, 0x01, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0xcc, 0x00, 0x02, 0x20, 0xcc, 0x00, 0x0f, 0x80, + 0xb5, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, + 0x06, 0x2e, 0x0e, 0x36, 0xb0, 0x84, 0x48, 0x15, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x04, 0x20, 0x39, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x01, 0xd1, 0x0a, 0x94, 0x00, 0x97, 0x01, + 0x48, 0x0f, 0x90, 0x02, 0x48, 0x0f, 0x90, 0x03, + 0x46, 0x68, 0x21, 0x01, 0xf0, 0x00, 0xfd, 0x1a, + 0xe0, 0x0f, 0x20, 0x00, 0x90, 0x00, 0x20, 0x00, + 0x90, 0x01, 0x48, 0x09, 0x90, 0x02, 0x48, 0x09, + 0x90, 0x03, 0x46, 0x68, 0x21, 0x01, 0xf0, 0x00, + 0xfd, 0x0d, 0x21, 0x00, 0x20, 0x02, 0xf7, 0xff, + 0xfc, 0x85, 0x20, 0x00, 0xb0, 0x04, 0xe7, 0xdc, + 0xb0, 0x04, 0xe7, 0xda, 0x2e, 0x08, 0x7c, 0xc4, + 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0x3f, + 0xb4, 0xb0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, + 0x48, 0x14, 0x6c, 0x00, 0x1c, 0x01, 0x48, 0x13, + 0x6f, 0x80, 0x23, 0x09, 0x01, 0x9b, 0x42, 0x98, + 0xd1, 0x12, 0x20, 0x02, 0x40, 0x20, 0xd0, 0x0c, + 0x2d, 0x02, 0xd1, 0x0a, 0x2f, 0x03, 0xd1, 0x00, + 0x31, 0x04, 0x2f, 0x03, 0xd2, 0x05, 0x07, 0xe0, + 0x0f, 0xc0, 0xd0, 0x01, 0x31, 0x05, 0xe0, 0x00, + 0x31, 0x08, 0x2d, 0x02, 0xd9, 0x00, 0x21, 0x12, + 0x00, 0x48, 0x18, 0x40, 0x30, 0x01, 0x10, 0x40, + 0x21, 0x2d, 0x02, 0x09, 0x43, 0x41, 0x48, 0x03, + 0x69, 0x40, 0x18, 0x09, 0x1c, 0x08, 0xbc, 0xb0, + 0x47, 0x70, 0xe7, 0xfc, 0xcc, 0x00, 0x0f, 0x80, + 0x48, 0x07, 0x6a, 0xc0, 0x1c, 0x01, 0x00, 0x48, + 0x18, 0x40, 0x30, 0x01, 0x10, 0x40, 0x21, 0x2d, + 0x02, 0x09, 0x43, 0x41, 0x48, 0x03, 0x69, 0x40, + 0x18, 0x09, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, + 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x80, + 0x48, 0x07, 0x68, 0x80, 0x28, 0x00, 0xd1, 0x03, + 0x48, 0x06, 0x69, 0x00, 0x1c, 0x01, 0xe0, 0x02, + 0x48, 0x04, 0x68, 0xc0, 0x1c, 0x01, 0x4b, 0x02, + 0x18, 0xc9, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, + 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x80, + 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x48, 0x06, + 0x6c, 0x40, 0x60, 0x20, 0x48, 0x04, 0x6c, 0x80, + 0x60, 0x38, 0xf7, 0xff, 0xff, 0xe1, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xfb, 0x00, 0x00, + 0xcc, 0x00, 0x02, 0x00, 0xb5, 0xf0, 0x1c, 0x05, + 0x1c, 0x0c, 0x1c, 0x17, 0xf7, 0xff, 0xff, 0xd4, + 0x1c, 0x06, 0x2d, 0x00, 0xd0, 0x01, 0x2c, 0x00, + 0xd1, 0x03, 0x20, 0x3a, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x08, 0x78, 0x00, 0x40, 0xd0, 0x01, + 0x20, 0x3a, 0xe7, 0xf7, 0x20, 0x00, 0x49, 0x0d, + 0x66, 0x88, 0x48, 0x0d, 0x68, 0x01, 0x23, 0x12, + 0x43, 0x19, 0x60, 0x01, 0x48, 0x0b, 0x63, 0x45, + 0x48, 0x0a, 0x63, 0x84, 0x20, 0x01, 0x49, 0x09, + 0x62, 0x48, 0x48, 0x09, 0x68, 0x01, 0x23, 0x01, + 0x40, 0x59, 0x60, 0x01, 0x48, 0x05, 0x63, 0xc7, + 0x48, 0x02, 0x60, 0x46, 0x20, 0x00, 0xe7, 0xdd, + 0xe7, 0xdc, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0x0f, 0x48, 0xcc, 0x00, 0x00, 0x80, + 0xcc, 0x00, 0x00, 0x08, 0xb4, 0xf0, 0x1c, 0x07, + 0x1c, 0x0c, 0x1c, 0x16, 0x1c, 0x1d, 0x48, 0x10, + 0x6a, 0x00, 0x28, 0x10, 0xd0, 0x02, 0x20, 0x3b, + 0xbc, 0xf0, 0x47, 0x70, 0x48, 0x0d, 0x68, 0x00, + 0x60, 0x38, 0x68, 0x38, 0x4b, 0x0b, 0x18, 0xc0, + 0x60, 0x38, 0x48, 0x0b, 0x6b, 0x40, 0x60, 0x30, + 0x48, 0x09, 0x6b, 0x80, 0x60, 0x28, 0x48, 0x09, + 0x6c, 0x80, 0x23, 0x10, 0x40, 0x18, 0xd0, 0x02, + 0x20, 0x02, 0x60, 0x20, 0xe0, 0x01, 0x20, 0x01, + 0x60, 0x20, 0x20, 0x00, 0xe7, 0xe4, 0xe7, 0xe3, + 0xcc, 0x00, 0x05, 0x00, 0xcc, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x0f, 0x00, + 0xb4, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, + 0x06, 0x2a, 0x0e, 0x12, 0x06, 0x21, 0x0e, 0x09, + 0x2f, 0x00, 0xd1, 0x30, 0xb0, 0x81, 0x46, 0x6f, + 0x2a, 0x00, 0xd0, 0x06, 0x2a, 0x08, 0xd0, 0x0d, + 0x2a, 0x10, 0xd0, 0x14, 0x2a, 0x18, 0xd0, 0x1b, + 0xe0, 0x23, 0x20, 0x00, 0x70, 0x38, 0x20, 0x00, + 0x70, 0x78, 0x20, 0x0c, 0x70, 0xb8, 0x20, 0x00, + 0x70, 0xf8, 0xe0, 0x1b, 0x20, 0x00, 0x70, 0x38, + 0x20, 0x08, 0x70, 0x78, 0x20, 0x1c, 0x70, 0xb8, + 0x20, 0x00, 0x70, 0xf8, 0xe0, 0x12, 0x20, 0x00, + 0x70, 0x38, 0x20, 0x10, 0x70, 0x78, 0x20, 0x0c, + 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, 0xe0, 0x09, + 0x20, 0x00, 0x70, 0x38, 0x20, 0x18, 0x70, 0x78, + 0x20, 0x1c, 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, + 0xe0, 0x00, 0xe7, 0xff, 0xb0, 0x01, 0x23, 0x00, + 0x56, 0xf8, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x18, + 0x23, 0x01, 0x56, 0xf8, 0x23, 0x39, 0x06, 0x5b, + 0x61, 0xd8, 0x29, 0x00, 0xd1, 0x06, 0x48, 0x0e, + 0x68, 0x06, 0x23, 0x20, 0x43, 0x9e, 0x1c, 0x33, + 0x60, 0x03, 0xe0, 0x06, 0x29, 0x20, 0xd1, 0x04, + 0x48, 0x09, 0x68, 0x06, 0x23, 0x20, 0x43, 0x33, + 0x60, 0x03, 0x23, 0x02, 0x56, 0xf8, 0x23, 0x39, + 0x06, 0x5b, 0x60, 0x58, 0x23, 0x03, 0x56, 0xf8, + 0x4b, 0x04, 0x63, 0x18, 0x20, 0x00, 0x23, 0x39, + 0x06, 0x5b, 0x64, 0x98, 0xbc, 0xf0, 0x47, 0x70, + 0x72, 0x00, 0x00, 0x1c, 0x72, 0x00, 0x01, 0x00, + 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0d, 0x1c, 0x14, + 0x06, 0x29, 0x0e, 0x09, 0x06, 0x22, 0x0e, 0x12, + 0xb0, 0x84, 0x29, 0x33, 0xdc, 0x01, 0x2a, 0x0f, + 0xdd, 0x03, 0x20, 0xff, 0xb0, 0x04, 0xbc, 0xb0, + 0x47, 0x70, 0x20, 0x39, 0x06, 0x40, 0x63, 0x41, + 0x20, 0x10, 0x43, 0x10, 0x23, 0x39, 0x06, 0x5b, + 0x63, 0x98, 0x20, 0x39, 0x06, 0x40, 0x68, 0x00, + 0x90, 0x03, 0x98, 0x03, 0x23, 0x9c, 0x43, 0xdb, + 0x40, 0x18, 0x90, 0x03, 0x20, 0x39, 0x06, 0x40, + 0x68, 0x40, 0x90, 0x01, 0x98, 0x01, 0x23, 0x20, + 0x43, 0xdb, 0x40, 0x18, 0x90, 0x01, 0x06, 0x38, + 0x0e, 0x00, 0xd0, 0x29, 0x20, 0x10, 0x40, 0x38, + 0xd0, 0x03, 0x98, 0x03, 0x23, 0x80, 0x43, 0x18, + 0x90, 0x03, 0x20, 0x08, 0x40, 0x38, 0xd0, 0x03, + 0x98, 0x03, 0x23, 0x10, 0x43, 0x18, 0x90, 0x03, + 0x20, 0x04, 0x40, 0x38, 0xd0, 0x04, 0x98, 0x03, + 0x23, 0x08, 0x43, 0x18, 0x90, 0x03, 0xe0, 0x0c, + 0x20, 0x02, 0x40, 0x38, 0xd0, 0x04, 0x98, 0x03, + 0x23, 0x0c, 0x43, 0x18, 0x90, 0x03, 0xe0, 0x04, + 0x98, 0x03, 0x23, 0x0c, 0x43, 0xdb, 0x40, 0x18, + 0x90, 0x03, 0x20, 0x20, 0x40, 0x38, 0xd0, 0x03, + 0x98, 0x01, 0x23, 0x20, 0x43, 0x18, 0x90, 0x01, + 0x98, 0x03, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x18, + 0x98, 0x01, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x58, + 0x20, 0x39, 0x06, 0x40, 0x6a, 0x00, 0x90, 0x00, + 0x98, 0x00, 0x23, 0xf0, 0x43, 0xdb, 0x43, 0x18, + 0x90, 0x00, 0x20, 0xff, 0x02, 0x00, 0x40, 0x38, + 0xd0, 0x27, 0x20, 0xff, 0x30, 0x01, 0x40, 0x38, + 0xd0, 0x03, 0x98, 0x00, 0x23, 0xfe, 0x40, 0x18, + 0x90, 0x00, 0x20, 0x01, 0x02, 0x40, 0x40, 0x38, + 0xd0, 0x03, 0x98, 0x00, 0x23, 0xfd, 0x40, 0x18, + 0x90, 0x00, 0x20, 0x01, 0x02, 0x80, 0x40, 0x38, + 0xd0, 0x03, 0x98, 0x00, 0x23, 0xfb, 0x40, 0x18, + 0x90, 0x00, 0x20, 0x01, 0x02, 0xc0, 0x40, 0x38, + 0xd0, 0x03, 0x98, 0x00, 0x23, 0xf7, 0x40, 0x18, + 0x90, 0x00, 0x20, 0x01, 0x03, 0x00, 0x40, 0x38, + 0xd0, 0x03, 0x98, 0x00, 0x23, 0xf0, 0x40, 0x18, + 0x90, 0x00, 0x98, 0x00, 0x23, 0x39, 0x06, 0x5b, + 0x62, 0x18, 0x20, 0x39, 0x06, 0x40, 0x69, 0xc0, + 0x90, 0x02, 0x98, 0x02, 0x08, 0x40, 0x00, 0x40, + 0x90, 0x02, 0x20, 0x39, 0x06, 0x40, 0x6a, 0xc0, + 0x90, 0x00, 0x98, 0x00, 0x23, 0x1c, 0x43, 0xdb, + 0x40, 0x18, 0x90, 0x00, 0x20, 0x39, 0x06, 0x40, + 0x6b, 0x80, 0x90, 0x03, 0x98, 0x03, 0x23, 0x10, + 0x43, 0xdb, 0x40, 0x18, 0x90, 0x03, 0x20, 0x39, + 0x06, 0x40, 0x6b, 0xc0, 0x90, 0x01, 0x98, 0x01, + 0x09, 0x00, 0x01, 0x00, 0x90, 0x01, 0x48, 0x4a, + 0x40, 0x38, 0xd0, 0x45, 0x20, 0x01, 0x04, 0x00, + 0x40, 0x38, 0xd0, 0x03, 0x98, 0x02, 0x23, 0x01, + 0x43, 0x18, 0x90, 0x02, 0x20, 0x01, 0x05, 0xc0, + 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, 0x23, 0x10, + 0x43, 0x18, 0x90, 0x00, 0x20, 0x07, 0x04, 0x40, + 0x40, 0x38, 0x23, 0x01, 0x04, 0x5b, 0x42, 0x98, + 0xd0, 0x08, 0x23, 0x01, 0x04, 0x9b, 0x42, 0x98, + 0xd0, 0x07, 0x23, 0x01, 0x04, 0xdb, 0x42, 0x98, + 0xd0, 0x08, 0xe0, 0x0c, 0x98, 0x00, 0x90, 0x00, + 0xe0, 0x0a, 0x98, 0x00, 0x23, 0x04, 0x43, 0x18, + 0x90, 0x00, 0xe0, 0x05, 0x98, 0x00, 0x23, 0x0c, + 0x43, 0x18, 0x90, 0x00, 0xe0, 0x00, 0xe7, 0xff, + 0x20, 0x01, 0x05, 0x80, 0x40, 0x38, 0xd0, 0x03, + 0x98, 0x03, 0x23, 0x10, 0x43, 0x18, 0x90, 0x03, + 0x20, 0x01, 0x05, 0x00, 0x40, 0x38, 0xd0, 0x03, + 0x98, 0x01, 0x23, 0x08, 0x43, 0x18, 0x90, 0x01, + 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, 0xd0, 0x03, + 0x98, 0x01, 0x23, 0x07, 0x43, 0x18, 0x90, 0x01, + 0x98, 0x03, 0x23, 0x39, 0x06, 0x5b, 0x63, 0x98, + 0x98, 0x02, 0x23, 0x39, 0x06, 0x5b, 0x61, 0xd8, + 0x98, 0x01, 0x23, 0x39, 0x06, 0x5b, 0x63, 0xd8, + 0x98, 0x00, 0x23, 0x39, 0x06, 0x5b, 0x62, 0xd8, + 0x20, 0x39, 0x06, 0x40, 0x68, 0x80, 0x90, 0x03, + 0x98, 0x03, 0x08, 0x80, 0x00, 0x80, 0x90, 0x03, + 0x0f, 0x38, 0x07, 0x00, 0xd0, 0x26, 0x20, 0x01, + 0x07, 0x00, 0x40, 0x38, 0x23, 0x01, 0x07, 0x1b, + 0x42, 0x98, 0xd1, 0x04, 0x98, 0x03, 0x23, 0x02, + 0x43, 0x18, 0x90, 0x03, 0xe0, 0x07, 0x20, 0x00, + 0x42, 0x80, 0xd1, 0x04, 0x98, 0x03, 0x23, 0x02, + 0x43, 0xdb, 0x40, 0x18, 0x90, 0x03, 0x20, 0x01, + 0x07, 0x40, 0x40, 0x38, 0x23, 0x01, 0x07, 0x5b, + 0x42, 0x98, 0xd1, 0x04, 0x98, 0x03, 0x23, 0x01, + 0x43, 0x18, 0x90, 0x03, 0xe0, 0x06, 0x20, 0x00, + 0x42, 0x80, 0xd1, 0x03, 0x98, 0x03, 0x08, 0x40, + 0x00, 0x40, 0x90, 0x03, 0x98, 0x03, 0x23, 0x39, + 0x06, 0x5b, 0x60, 0x98, 0x20, 0x00, 0xb0, 0x04, + 0xe6, 0xc1, 0xb0, 0x04, 0xe6, 0xbf, 0x00, 0x00, + 0x0f, 0xff, 0x00, 0x00, 0x48, 0x02, 0x69, 0xc0, + 0x06, 0x00, 0x16, 0x00, 0x47, 0x70, 0xe7, 0xfd, + 0x72, 0x00, 0x01, 0x00, 0xb5, 0xf7, 0x1c, 0x04, + 0x1c, 0x0f, 0x06, 0x23, 0x16, 0x18, 0x06, 0x3b, + 0x16, 0x19, 0x9b, 0x02, 0x06, 0x1a, 0x0e, 0x12, + 0x2a, 0x00, 0xd1, 0x0b, 0x23, 0x39, 0x06, 0x5b, + 0x60, 0xd8, 0x23, 0x39, 0x06, 0x5b, 0x61, 0x19, + 0x4d, 0x0b, 0x68, 0x2e, 0x23, 0x01, 0x43, 0x33, + 0x60, 0x2b, 0xe0, 0x0c, 0x2a, 0x01, 0xd1, 0x0a, + 0x23, 0x39, 0x06, 0x5b, 0x61, 0x58, 0x23, 0x39, + 0x06, 0x5b, 0x61, 0x99, 0x4d, 0x04, 0x68, 0x2e, + 0x23, 0x02, 0x43, 0x33, 0x60, 0x2b, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x72, 0x00, 0x00, 0x08, 0xb4, 0x90, 0x1c, 0x01, + 0x20, 0x92, 0x4b, 0x4b, 0x60, 0x18, 0x20, 0x92, + 0x4b, 0x4a, 0x60, 0x18, 0x20, 0x10, 0x4b, 0x4a, + 0x60, 0x18, 0x20, 0x00, 0x4b, 0x48, 0x60, 0x58, + 0x48, 0x48, 0x4b, 0x47, 0x60, 0x98, 0x22, 0x00, + 0x2a, 0x10, 0xdb, 0x02, 0xe0, 0x07, 0x32, 0x01, + 0xe7, 0xfa, 0x20, 0x00, 0x43, 0xc0, 0x00, 0x93, + 0x4c, 0x42, 0x50, 0xe0, 0xe7, 0xf7, 0x20, 0x00, + 0x43, 0xc0, 0x00, 0x93, 0x4c, 0x3f, 0x50, 0xe0, + 0x22, 0x00, 0x2a, 0x08, 0xdb, 0x02, 0xe0, 0x08, + 0x32, 0x01, 0xe7, 0xfa, 0x20, 0x00, 0x43, 0xc0, + 0x00, 0x94, 0x4b, 0x3b, 0x18, 0xe3, 0x64, 0x18, + 0xe7, 0xf6, 0x22, 0x00, 0x2a, 0x20, 0xdb, 0x02, + 0xe0, 0x08, 0x32, 0x01, 0xe7, 0xfa, 0x20, 0x00, + 0x43, 0xc0, 0x00, 0x94, 0x4b, 0x35, 0x18, 0xe3, + 0x60, 0x18, 0xe7, 0xf6, 0x22, 0x00, 0x2a, 0x19, + 0xdb, 0x02, 0xe0, 0x06, 0x32, 0x01, 0xe7, 0xfa, + 0x20, 0x00, 0x00, 0x93, 0x4c, 0x30, 0x50, 0xe0, + 0xe7, 0xf8, 0x20, 0x00, 0x4b, 0x2f, 0x60, 0x18, + 0x20, 0x39, 0x06, 0x40, 0x69, 0xc0, 0x27, 0x18, + 0x40, 0x07, 0x2f, 0x00, 0xd0, 0x03, 0x48, 0x2c, + 0x4b, 0x2c, 0x60, 0x18, 0xe0, 0x03, 0x20, 0xff, + 0x30, 0xe0, 0x4b, 0x2a, 0x60, 0x18, 0x20, 0x00, + 0x4b, 0x29, 0x60, 0x18, 0x20, 0x00, 0x4b, 0x28, + 0x60, 0x58, 0x48, 0x28, 0x4b, 0x26, 0x60, 0x98, + 0x48, 0x24, 0x68, 0x00, 0x4b, 0x24, 0x60, 0xd8, + 0x48, 0x25, 0x60, 0x01, 0x20, 0x0d, 0x06, 0xc0, + 0x61, 0xc1, 0x20, 0x05, 0x02, 0x00, 0x23, 0x0d, + 0x06, 0xdb, 0x60, 0x18, 0x48, 0x21, 0x23, 0x0d, + 0x06, 0xdb, 0x60, 0x58, 0x48, 0x1f, 0x4b, 0x16, + 0x63, 0x98, 0x20, 0x00, 0x23, 0x0d, 0x06, 0xdb, + 0x60, 0x98, 0x20, 0x00, 0x23, 0x0d, 0x06, 0xdb, + 0x61, 0x18, 0x48, 0x1b, 0x23, 0x0d, 0x06, 0xdb, + 0x61, 0x98, 0x20, 0x01, 0x23, 0x0d, 0x06, 0xdb, + 0x60, 0xd8, 0x48, 0x18, 0x23, 0x0d, 0x06, 0xdb, + 0x63, 0x18, 0x48, 0x17, 0x23, 0x0d, 0x06, 0xdb, + 0x63, 0x58, 0x20, 0x00, 0x4b, 0x15, 0x60, 0x18, + 0x48, 0x11, 0x4b, 0x15, 0x60, 0x18, 0x20, 0x00, + 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0xcc, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7d, 0x9c, 0x2e, 0x08, 0x7c, 0xd4, + 0x68, 0x00, 0x0d, 0x00, 0x68, 0x00, 0x04, 0x00, + 0x2e, 0x08, 0x7c, 0x60, 0x2e, 0x08, 0x7c, 0xc4, + 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x60, 0x88, + 0x2e, 0x08, 0x7d, 0xa8, 0x00, 0x00, 0x02, 0xcf, + 0x2e, 0x08, 0x60, 0x8c, 0x00, 0xf0, 0x29, 0x6d, + 0x3f, 0xff, 0xff, 0xff, 0x00, 0x80, 0x10, 0x80, + 0x00, 0x80, 0xeb, 0x80, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x5e, 0x54, 0xb5, 0xff, 0xb0, 0x85, + 0x20, 0x39, 0x06, 0x40, 0x69, 0xc0, 0x23, 0x18, + 0x40, 0x18, 0x90, 0x00, 0x98, 0x00, 0x28, 0x00, + 0xd0, 0x03, 0x48, 0x5a, 0x4b, 0x5a, 0x60, 0x18, + 0xe0, 0x03, 0x20, 0xff, 0x30, 0xe0, 0x4b, 0x58, + 0x60, 0x18, 0x9c, 0x06, 0x9f, 0x07, 0x22, 0x00, + 0x21, 0x00, 0x98, 0x05, 0x38, 0x0c, 0x28, 0x06, + 0xd2, 0x0c, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x03, 0x06, 0x04, + 0x03, 0x06, 0x32, 0x01, 0x32, 0x01, 0xe0, 0x02, + 0x3a, 0x01, 0xe0, 0x00, 0xe7, 0xff, 0x98, 0x05, + 0x38, 0x0b, 0x28, 0x08, 0xd2, 0x15, 0xa3, 0x02, + 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x0a, 0x04, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x04, + 0x25, 0x2d, 0x01, 0x2d, 0x48, 0x44, 0x68, 0x00, + 0x1c, 0x46, 0xe0, 0x0e, 0x48, 0x43, 0x6c, 0x40, + 0x1c, 0x05, 0x48, 0x43, 0x68, 0x40, 0x1c, 0x06, + 0xe0, 0x07, 0x21, 0xff, 0x1c, 0x08, 0xb0, 0x05, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xe7, 0xff, 0x2d, 0x00, 0xd0, 0x01, 0x2e, 0x00, + 0xd1, 0x04, 0x25, 0x2d, 0x01, 0x2d, 0x48, 0x38, + 0x68, 0x00, 0x1c, 0x46, 0x29, 0xff, 0xd1, 0x02, + 0x1c, 0x08, 0xb0, 0x05, 0xe7, 0xec, 0x1e, 0x68, + 0x90, 0x02, 0x1e, 0x70, 0x90, 0x01, 0x23, 0x01, + 0x42, 0xda, 0xd1, 0x08, 0x42, 0x50, 0x40, 0x85, + 0x1c, 0x2b, 0x1e, 0x5d, 0x42, 0x50, 0x40, 0x86, + 0x1c, 0x33, 0x1e, 0x5e, 0xe0, 0x05, 0x41, 0x15, + 0x1c, 0x28, 0x1e, 0x45, 0x41, 0x16, 0x1c, 0x30, + 0x1e, 0x46, 0x07, 0xe0, 0x0f, 0xc0, 0xd0, 0x02, + 0x21, 0x80, 0x08, 0x64, 0x00, 0x64, 0x07, 0xf8, + 0x0f, 0xc0, 0xd0, 0x02, 0x21, 0x80, 0x08, 0x7f, + 0x00, 0x7f, 0x19, 0x60, 0x90, 0x04, 0x19, 0xb8, + 0x90, 0x03, 0x2c, 0x00, 0xda, 0x01, 0x21, 0x80, + 0x24, 0x00, 0x98, 0x04, 0x28, 0x01, 0xda, 0x02, + 0x21, 0x80, 0x20, 0x01, 0x90, 0x04, 0x4b, 0x1f, + 0x42, 0x9c, 0xdb, 0x01, 0x21, 0x80, 0x4c, 0x1e, + 0x98, 0x04, 0x4b, 0x1c, 0x42, 0x98, 0xdd, 0x02, + 0x21, 0x80, 0x48, 0x1a, 0x90, 0x04, 0x2f, 0x00, + 0xda, 0x01, 0x21, 0x80, 0x27, 0x00, 0x98, 0x03, + 0x28, 0x01, 0xda, 0x02, 0x21, 0x80, 0x20, 0x01, + 0x90, 0x03, 0x48, 0x11, 0x68, 0x00, 0x42, 0x87, + 0xd3, 0x03, 0x21, 0x80, 0x48, 0x0e, 0x68, 0x00, + 0x1e, 0x47, 0x98, 0x03, 0x4b, 0x0c, 0x68, 0x1b, + 0x42, 0x98, 0xd9, 0x03, 0x21, 0x80, 0x48, 0x0a, + 0x68, 0x00, 0x90, 0x03, 0x9b, 0x08, 0x60, 0x1c, + 0x9b, 0x08, 0x60, 0x5f, 0x98, 0x04, 0x9b, 0x08, + 0x60, 0x98, 0x98, 0x03, 0x9b, 0x08, 0x60, 0xd8, + 0x1c, 0x08, 0xb0, 0x05, 0xe7, 0x88, 0xb0, 0x05, + 0xe7, 0x86, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3f, + 0x2e, 0x08, 0x60, 0x88, 0xcc, 0x00, 0x02, 0x00, + 0xcc, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0xcf, + 0x00, 0x00, 0x02, 0xce, 0xb5, 0xf0, 0x1c, 0x07, + 0x1c, 0x0c, 0xb0, 0x81, 0x2c, 0x0b, 0xdb, 0x19, + 0x2c, 0x12, 0xdc, 0x17, 0x68, 0xbe, 0x68, 0xf9, + 0x91, 0x00, 0x68, 0x7a, 0x1c, 0x3b, 0x68, 0x39, + 0x1c, 0x20, 0xf7, 0xff, 0xff, 0x23, 0x1c, 0x05, + 0x68, 0xb8, 0x42, 0xb0, 0xd0, 0x00, 0x25, 0x80, + 0x68, 0xf8, 0x99, 0x00, 0x42, 0x88, 0xd0, 0x00, + 0x25, 0x80, 0x1c, 0x28, 0xb0, 0x01, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x25, 0x00, 0x68, 0x38, + 0x28, 0x00, 0xda, 0x02, 0x25, 0x80, 0x20, 0x00, + 0x60, 0x38, 0x68, 0x78, 0x28, 0x00, 0xda, 0x02, + 0x25, 0x80, 0x20, 0x00, 0x60, 0x78, 0x68, 0x38, + 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x04, 0x25, 0x80, + 0x68, 0x38, 0x08, 0x40, 0x00, 0x40, 0x60, 0x38, + 0x68, 0xb8, 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x09, + 0x25, 0x80, 0x68, 0xb8, 0x07, 0xc0, 0x0f, 0xc0, + 0xd0, 0x01, 0x68, 0xb8, 0xe0, 0x01, 0x68, 0xb8, + 0x38, 0x01, 0x60, 0xb8, 0x68, 0xb8, 0x68, 0x39, + 0x42, 0x88, 0xdc, 0x03, 0x25, 0x80, 0x68, 0x38, + 0x30, 0x01, 0x60, 0xb8, 0x68, 0x78, 0x68, 0xf9, + 0x42, 0x88, 0xdb, 0x03, 0x25, 0x80, 0x68, 0x78, + 0x30, 0x01, 0x60, 0xf8, 0x1c, 0x28, 0xb0, 0x01, + 0xe7, 0xc5, 0xb0, 0x01, 0xe7, 0xc3, 0x1c, 0x02, + 0x21, 0x18, 0xe0, 0x00, 0x31, 0x01, 0x1c, 0x08, + 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0xf0, 0x1c, 0x07, + 0x1c, 0x0a, 0xb0, 0x81, 0x68, 0xb8, 0x68, 0x3b, + 0x1a, 0xc0, 0x1c, 0x46, 0x68, 0xf8, 0x68, 0x7b, + 0x1a, 0xc0, 0x30, 0x01, 0x90, 0x00, 0x00, 0x90, + 0x4b, 0x15, 0x58, 0x1c, 0x98, 0x00, 0x43, 0x46, + 0x1c, 0x35, 0x07, 0xa0, 0x0f, 0x80, 0x1c, 0x29, + 0x40, 0x81, 0x2a, 0x0b, 0xdb, 0x01, 0x2a, 0x12, + 0xdd, 0x01, 0x2a, 0x13, 0xd1, 0x01, 0x21, 0x00, + 0xe0, 0x0a, 0x2a, 0x09, 0xd0, 0x01, 0x2a, 0x0a, + 0xd1, 0x03, 0x00, 0x69, 0x19, 0x49, 0x00, 0xc9, + 0xe0, 0x02, 0x2a, 0x08, 0xd1, 0x00, 0x01, 0x29, + 0x20, 0x04, 0x40, 0x20, 0xd0, 0x00, 0x08, 0x49, + 0x09, 0x4c, 0x06, 0xc8, 0x0e, 0xc0, 0xd0, 0x00, + 0x34, 0x01, 0x1c, 0x20, 0xb0, 0x01, 0xbc, 0xf0, + 0x47, 0x70, 0xb0, 0x01, 0xe7, 0xfb, 0x00, 0x00, + 0x2e, 0x03, 0x32, 0xa4, 0xb4, 0x80, 0x23, 0x00, + 0x22, 0x01, 0x21, 0x00, 0x29, 0x08, 0xdb, 0x02, + 0xe0, 0x09, 0x31, 0x01, 0xe7, 0xfa, 0x00, 0x88, + 0x4f, 0x05, 0x58, 0x38, 0x28, 0x00, 0xd0, 0x00, + 0x43, 0x13, 0x00, 0x52, 0xe7, 0xf5, 0x1c, 0x18, + 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x60, 0xb5, 0xf3, 0x1c, 0x0f, + 0xb0, 0x81, 0x20, 0x39, 0x06, 0x40, 0x69, 0xc0, + 0x23, 0x18, 0x40, 0x18, 0x90, 0x00, 0x98, 0x00, + 0x28, 0x00, 0xd0, 0x03, 0x48, 0x32, 0x49, 0x33, + 0x60, 0x08, 0xe0, 0x03, 0x20, 0xff, 0x30, 0xe0, + 0x49, 0x30, 0x60, 0x08, 0x24, 0x00, 0x99, 0x01, + 0x48, 0x2f, 0xf7, 0xfc, 0xfa, 0x1f, 0x48, 0x2e, + 0x68, 0x00, 0x28, 0x00, 0xda, 0x03, 0x20, 0x00, + 0x49, 0x2b, 0x60, 0x08, 0x24, 0x80, 0x48, 0x2a, + 0x68, 0x40, 0x28, 0x00, 0xda, 0x03, 0x20, 0x00, + 0x49, 0x27, 0x60, 0x48, 0x24, 0x80, 0x48, 0x26, + 0x68, 0x80, 0x4b, 0x26, 0x42, 0x98, 0xdd, 0x03, + 0x48, 0x24, 0x49, 0x23, 0x60, 0x88, 0x24, 0x80, + 0x48, 0x21, 0x68, 0xc0, 0x49, 0x1f, 0x68, 0x09, + 0x42, 0x88, 0xd9, 0x04, 0x48, 0x1d, 0x68, 0x00, + 0x49, 0x1d, 0x60, 0xc8, 0x24, 0x80, 0x48, 0x1e, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x27, 0x2f, 0x01, + 0xd1, 0x25, 0x48, 0x19, 0x68, 0x06, 0x48, 0x18, + 0x68, 0x45, 0x23, 0xff, 0x33, 0x68, 0x42, 0x9e, + 0xdd, 0x01, 0x26, 0xff, 0x36, 0x68, 0x48, 0x13, + 0x68, 0x00, 0x08, 0x40, 0x42, 0xa8, 0xd2, 0x02, + 0x48, 0x10, 0x68, 0x00, 0x08, 0x45, 0x48, 0x13, + 0x49, 0x13, 0x65, 0x48, 0x48, 0x13, 0x43, 0x70, + 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, + 0x49, 0x0f, 0x65, 0x88, 0x20, 0x00, 0x49, 0x0e, + 0x65, 0xc8, 0x48, 0x0d, 0x66, 0x05, 0x1c, 0x38, + 0x21, 0x00, 0xf7, 0xfe, 0xff, 0x13, 0x1c, 0x20, + 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x60, 0x88, + 0x2e, 0x08, 0x7d, 0xa8, 0x00, 0x00, 0x02, 0xcf, + 0x2e, 0x08, 0x7c, 0xc4, 0x00, 0x00, 0x07, 0xfa, + 0xcc, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x60, 0xb6, + 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0xb0, 0x81, + 0x1c, 0x26, 0x69, 0x30, 0x90, 0x00, 0x98, 0x00, + 0x28, 0x13, 0xd1, 0x04, 0x20, 0x75, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xf5, + 0x68, 0x38, 0x08, 0x40, 0x00, 0x40, 0x60, 0x38, + 0x68, 0x78, 0x08, 0x40, 0x00, 0x40, 0x60, 0x78, + 0x68, 0xb8, 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x02, + 0x68, 0xb8, 0x38, 0x01, 0x60, 0xb8, 0x68, 0xf8, + 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x02, 0x68, 0xf8, + 0x38, 0x01, 0x60, 0xf8, 0x1d, 0xf0, 0x30, 0x49, + 0x1c, 0x39, 0xf7, 0xfc, 0xf9, 0x8b, 0x48, 0x1c, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, + 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, + 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, + 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xcc, 0x49, 0x13, + 0x20, 0x91, 0xf0, 0x13, 0xfa, 0xeb, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x05, 0xfa, 0xf4, + 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x0e, 0x58, 0x08, + 0x42, 0xa0, 0xd0, 0x05, 0x20, 0x92, 0x49, 0x0b, + 0x60, 0x08, 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xb7, + 0x48, 0x0a, 0x68, 0x00, 0x42, 0xa0, 0xd1, 0x03, + 0x1c, 0x39, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x10, + 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, + 0xb0, 0x01, 0xe7, 0xa9, 0xb0, 0x01, 0xe7, 0xa7, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xc8, + 0x2e, 0x08, 0x7c, 0x60, 0x2e, 0x08, 0x7c, 0xc4, + 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x9b, 0x20, 0x39, + 0x06, 0x40, 0x69, 0xc0, 0x23, 0x18, 0x40, 0x18, + 0x90, 0x01, 0x98, 0x01, 0x28, 0x00, 0xd0, 0x03, + 0x48, 0xf8, 0x49, 0xf9, 0x60, 0x08, 0xe0, 0x03, + 0x20, 0xff, 0x30, 0xe0, 0x49, 0xf6, 0x60, 0x08, + 0x20, 0xff, 0x30, 0x01, 0x90, 0x06, 0x98, 0x1b, + 0x90, 0x1a, 0x98, 0x1a, 0x69, 0x05, 0x98, 0x1a, + 0x68, 0xc0, 0x90, 0x19, 0x48, 0xf1, 0x68, 0x00, + 0x99, 0x1b, 0x42, 0x88, 0xd1, 0x73, 0x20, 0x02, + 0x90, 0x08, 0x2d, 0x0c, 0xd0, 0x01, 0x2d, 0x0f, + 0xd1, 0x02, 0x20, 0x04, 0x90, 0x08, 0xe0, 0x0c, + 0x2d, 0x0d, 0xd0, 0x01, 0x2d, 0x10, 0xd1, 0x02, + 0x20, 0x08, 0x90, 0x08, 0xe0, 0x05, 0x2d, 0x0e, + 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x01, 0x20, 0x01, + 0x90, 0x08, 0x68, 0xf8, 0x68, 0x79, 0x1a, 0x40, + 0x1c, 0x44, 0x2d, 0x0b, 0xd0, 0x05, 0x2d, 0x0f, + 0xd0, 0x03, 0x2d, 0x10, 0xd0, 0x01, 0x2d, 0x11, + 0xd1, 0x11, 0x48, 0xdf, 0x6c, 0x40, 0x1c, 0x06, + 0x48, 0xdd, 0x6c, 0x81, 0x91, 0x07, 0x2e, 0x00, + 0xd0, 0x02, 0x99, 0x07, 0x29, 0x00, 0xd1, 0x05, + 0x26, 0x2d, 0x01, 0x36, 0x48, 0xd6, 0x68, 0x00, + 0x1c, 0x41, 0x91, 0x07, 0xe0, 0x05, 0x26, 0x2d, + 0x01, 0x36, 0x48, 0xd3, 0x68, 0x00, 0x1c, 0x41, + 0x91, 0x07, 0x49, 0xd4, 0xa8, 0x15, 0xf7, 0xfc, + 0xf8, 0xe9, 0x98, 0x17, 0x1e, 0x71, 0x42, 0x88, + 0xdd, 0x01, 0x1e, 0x70, 0x90, 0x17, 0x98, 0x18, + 0x99, 0x07, 0x39, 0x01, 0x42, 0x88, 0xdd, 0x02, + 0x99, 0x07, 0x1e, 0x48, 0x90, 0x18, 0x98, 0x18, + 0x99, 0x16, 0x1a, 0x40, 0x00, 0x40, 0x1c, 0x81, + 0x98, 0x08, 0xf0, 0x06, 0xfb, 0xd3, 0x90, 0x0a, + 0x98, 0x0a, 0x42, 0x84, 0xdd, 0x00, 0x9c, 0x0a, + 0x48, 0xc5, 0x6f, 0x00, 0x90, 0x02, 0x20, 0x00, + 0x90, 0x05, 0x98, 0x02, 0x28, 0x02, 0xd0, 0x02, + 0x98, 0x02, 0x28, 0x03, 0xd1, 0x3a, 0x48, 0xc1, + 0x6b, 0x00, 0x90, 0x04, 0x48, 0xbe, 0x6e, 0xc1, + 0x91, 0x03, 0x98, 0x04, 0x99, 0x03, 0x42, 0x88, + 0xdd, 0x21, 0x20, 0xc0, 0x90, 0x06, 0x1d, 0x20, + 0x28, 0x00, 0xda, 0x02, 0xe0, 0x00, 0xe1, 0x8e, + 0x30, 0x07, 0x10, 0xc0, 0x90, 0x05, 0x98, 0x04, + 0x28, 0x03, 0xd0, 0x14, 0x99, 0x03, 0x29, 0x03, + 0xd1, 0x07, 0x20, 0xcd, 0x90, 0x06, 0x1d, 0x61, + 0x20, 0x0a, 0xf0, 0x06, 0xfb, 0xa3, 0x90, 0x05, + 0xe0, 0x09, 0x98, 0x02, 0x28, 0x02, 0xd1, 0x06, + 0x20, 0x9a, 0x90, 0x06, 0x1c, 0xa1, 0x20, 0x05, + 0xf0, 0x06, 0xfb, 0x98, 0x90, 0x05, 0x98, 0x06, + 0x28, 0x9a, 0xd0, 0x02, 0x98, 0x06, 0x28, 0xcd, + 0xd1, 0x08, 0x2d, 0x0e, 0xd0, 0x01, 0x2d, 0x11, + 0xd1, 0x04, 0x20, 0x00, 0x90, 0x05, 0x20, 0xff, + 0x30, 0x01, 0x90, 0x06, 0x2d, 0x12, 0xd1, 0x0b, + 0x48, 0x9d, 0x68, 0x00, 0x30, 0x01, 0x42, 0xa0, + 0xd1, 0x06, 0x68, 0x78, 0x28, 0x00, 0xd1, 0x03, + 0x20, 0x01, 0x49, 0x9f, 0x63, 0x48, 0xe0, 0x02, + 0x20, 0x00, 0x49, 0x9d, 0x63, 0x48, 0x98, 0x0a, + 0x99, 0x06, 0x43, 0x48, 0x28, 0x00, 0xda, 0x00, + 0x30, 0xff, 0x12, 0x00, 0x42, 0xa0, 0xdd, 0x04, + 0x20, 0x00, 0x90, 0x05, 0x20, 0xff, 0x30, 0x01, + 0x90, 0x06, 0x68, 0x78, 0x99, 0x05, 0x18, 0x40, + 0x60, 0x78, 0x1c, 0x39, 0xa8, 0x11, 0xf7, 0xfc, + 0xf8, 0x61, 0x1c, 0x29, 0xa8, 0x11, 0xf7, 0xff, + 0xfd, 0x71, 0x98, 0x12, 0x49, 0x88, 0x68, 0x09, + 0x39, 0x01, 0x42, 0x88, 0xd1, 0x00, 0x24, 0x00, + 0x99, 0x15, 0x91, 0x0d, 0x98, 0x16, 0x90, 0x0f, + 0x21, 0x00, 0x91, 0x10, 0x68, 0x38, 0x28, 0x00, + 0xda, 0x08, 0x68, 0x38, 0x99, 0x08, 0x43, 0x48, + 0x42, 0x41, 0x29, 0x00, 0xda, 0x00, 0x31, 0x01, + 0x10, 0x49, 0x91, 0x10, 0x68, 0x78, 0x28, 0x00, + 0xda, 0x0d, 0x68, 0x78, 0x99, 0x08, 0x43, 0x48, + 0x28, 0x00, 0xda, 0x00, 0x30, 0x01, 0x10, 0x40, + 0x02, 0x01, 0x98, 0x06, 0xf0, 0x06, 0xfb, 0x36, + 0x99, 0x0f, 0x1a, 0x08, 0x90, 0x0f, 0x98, 0x18, + 0x99, 0x0f, 0x42, 0x88, 0xdc, 0x02, 0x98, 0x18, + 0x30, 0x01, 0x90, 0x0f, 0x98, 0x17, 0x99, 0x0d, + 0x1a, 0x40, 0x30, 0x01, 0x90, 0x0e, 0x98, 0x18, + 0x99, 0x0f, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x09, + 0x98, 0x09, 0x00, 0x41, 0x98, 0x08, 0xf0, 0x06, + 0xfb, 0x1d, 0x99, 0x06, 0x43, 0x48, 0x28, 0x00, + 0xda, 0x00, 0x30, 0xff, 0x12, 0x00, 0x90, 0x09, + 0x68, 0xb8, 0x68, 0x39, 0x1a, 0x40, 0x1c, 0x41, + 0x91, 0x0c, 0x98, 0x17, 0x99, 0x15, 0x1a, 0x40, + 0x00, 0x40, 0x1c, 0x81, 0x98, 0x08, 0xf0, 0x06, + 0xfb, 0x09, 0x90, 0x0b, 0x98, 0x0b, 0x4b, 0x65, + 0x40, 0x18, 0x90, 0x0b, 0x98, 0x0b, 0x99, 0x08, + 0x43, 0x48, 0x28, 0x00, 0xda, 0x00, 0x30, 0x01, + 0x10, 0x40, 0x90, 0x0e, 0x99, 0x0c, 0x98, 0x0b, + 0x42, 0x81, 0xdd, 0x01, 0x98, 0x0b, 0x90, 0x0c, + 0x99, 0x0c, 0x4b, 0x5c, 0x40, 0x19, 0x91, 0x0c, + 0x98, 0x0c, 0x28, 0x00, 0xdd, 0x05, 0x68, 0x38, + 0x99, 0x0c, 0x18, 0x40, 0x38, 0x01, 0x90, 0x13, + 0xe0, 0x02, 0x68, 0x38, 0x30, 0x01, 0x90, 0x13, + 0x98, 0x13, 0x28, 0x01, 0xda, 0x01, 0x20, 0x01, + 0x90, 0x13, 0x98, 0x13, 0x4b, 0x52, 0x42, 0x98, + 0xdd, 0x01, 0x48, 0x51, 0x90, 0x13, 0x99, 0x06, + 0x43, 0x4c, 0x1c, 0x20, 0x28, 0x00, 0xda, 0x00, + 0x30, 0xff, 0x12, 0x04, 0x98, 0x0a, 0x42, 0x84, + 0xdd, 0x00, 0x9c, 0x0a, 0x2c, 0x02, 0xda, 0x00, + 0x24, 0x02, 0x68, 0x78, 0x19, 0x00, 0x38, 0x01, + 0x90, 0x14, 0x98, 0x14, 0x28, 0x01, 0xda, 0x01, + 0x20, 0x01, 0x90, 0x14, 0x98, 0x14, 0x49, 0x3c, + 0x68, 0x09, 0x42, 0x88, 0xd9, 0x02, 0x48, 0x3a, + 0x68, 0x00, 0x90, 0x14, 0x98, 0x12, 0x49, 0x38, + 0x68, 0x09, 0x39, 0x01, 0x42, 0x88, 0xd9, 0x03, + 0x48, 0x35, 0x68, 0x00, 0x38, 0x01, 0x90, 0x12, + 0x98, 0x09, 0x28, 0x04, 0xdb, 0x01, 0x2c, 0x04, + 0xda, 0x01, 0x20, 0x00, 0x90, 0x0e, 0x98, 0x0e, + 0x28, 0x03, 0xdb, 0x02, 0x98, 0x0c, 0x28, 0x04, + 0xda, 0x09, 0x20, 0x00, 0x90, 0x0e, 0x48, 0x35, + 0x90, 0x11, 0x48, 0x33, 0x90, 0x13, 0x20, 0x00, + 0x90, 0x12, 0x20, 0x01, 0x90, 0x14, 0x21, 0x00, + 0x91, 0x00, 0x98, 0x08, 0x28, 0x01, 0xd1, 0x16, + 0x98, 0x0e, 0x99, 0x10, 0x1a, 0x40, 0x00, 0x40, + 0x4b, 0x2b, 0x42, 0x98, 0xdd, 0x0b, 0x98, 0x0e, + 0x99, 0x10, 0x1a, 0x40, 0x00, 0x40, 0x23, 0x2d, + 0x01, 0x1b, 0x1a, 0xc1, 0x29, 0x00, 0xda, 0x00, + 0x31, 0x01, 0x10, 0x49, 0x91, 0x00, 0x98, 0x0e, + 0x42, 0xb0, 0xdd, 0x00, 0x96, 0x0e, 0x99, 0x10, + 0x42, 0xb1, 0xdd, 0x00, 0x96, 0x10, 0x1c, 0x30, + 0x21, 0x01, 0x07, 0x49, 0xf0, 0x06, 0xfa, 0x76, + 0x99, 0x0d, 0x43, 0x48, 0x23, 0x01, 0x04, 0x1b, + 0x18, 0xc0, 0x14, 0x40, 0x49, 0x1c, 0x65, 0x88, + 0x1c, 0x30, 0x21, 0x01, 0x07, 0x49, 0xf0, 0x06, + 0xfa, 0x69, 0x99, 0x10, 0x43, 0x48, 0x23, 0x01, + 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, 0x49, 0x16, + 0x65, 0xc8, 0x1c, 0x30, 0x21, 0x01, 0x07, 0x49, + 0xf0, 0x06, 0xfa, 0x5c, 0x99, 0x0e, 0x43, 0x48, + 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, + 0x49, 0x0f, 0x65, 0x48, 0x99, 0x07, 0x1f, 0x08, + 0x99, 0x0f, 0x42, 0x88, 0xdc, 0x1b, 0x99, 0x07, + 0x1f, 0x08, 0xe0, 0x17, 0x00, 0x00, 0x02, 0x3f, + 0x2e, 0x08, 0x60, 0x88, 0x2e, 0x08, 0x7c, 0xc4, + 0xcc, 0x00, 0x02, 0x00, 0x2e, 0x08, 0x7d, 0xa8, + 0xcc, 0x00, 0x0f, 0x80, 0xcc, 0x00, 0x00, 0x80, + 0xcc, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0xce, + 0xcc, 0x00, 0x00, 0x00, 0x90, 0x0f, 0x98, 0x0f, + 0x49, 0x0d, 0x66, 0x08, 0x1c, 0x30, 0x21, 0x01, + 0x07, 0x49, 0xf0, 0x06, 0xfa, 0x2b, 0x99, 0x00, + 0x43, 0x48, 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, + 0x14, 0x40, 0x49, 0x07, 0x66, 0x48, 0xa9, 0x11, + 0x1c, 0x38, 0xf7, 0xfb, 0xff, 0x1f, 0x20, 0x00, + 0xb0, 0x1b, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb0, 0x1b, 0xe7, 0xf9, 0x00, 0x00, + 0xcc, 0x00, 0x00, 0x00, 0xb4, 0xb0, 0x1c, 0x02, + 0x1c, 0x0f, 0x2a, 0x00, 0xd1, 0x02, 0x20, 0x01, + 0xbc, 0xb0, 0x47, 0x70, 0x2f, 0x01, 0xd1, 0x20, + 0x20, 0x00, 0x23, 0x00, 0x4d, 0x13, 0x62, 0x2b, + 0x23, 0x00, 0x4d, 0x12, 0x62, 0xab, 0x4b, 0x12, + 0x68, 0x9b, 0x1c, 0x1c, 0x4b, 0x11, 0x6e, 0xdb, + 0x1c, 0x19, 0x2c, 0x02, 0xd0, 0x01, 0x29, 0x02, + 0xd1, 0x01, 0x20, 0x08, 0xe0, 0x00, 0x20, 0x07, + 0x79, 0x13, 0x2b, 0x00, 0xd0, 0x01, 0x23, 0x10, + 0x43, 0x18, 0x4b, 0x08, 0x62, 0x58, 0x79, 0x55, + 0x23, 0x80, 0x43, 0x2b, 0x4d, 0x05, 0x62, 0xab, + 0xe0, 0x05, 0x48, 0x07, 0x68, 0x05, 0x23, 0x80, + 0x43, 0x9d, 0x1c, 0x2b, 0x60, 0x03, 0x20, 0x00, + 0xe7, 0xd2, 0xe7, 0xd1, 0x72, 0x00, 0x01, 0x00, + 0xcc, 0x00, 0x0c, 0x00, 0xcc, 0x00, 0x0f, 0x80, + 0x72, 0x00, 0x01, 0x28, 0xb5, 0xff, 0x9f, 0x09, + 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, + 0x90, 0x00, 0x99, 0x02, 0x06, 0x0c, 0x0e, 0x24, + 0x98, 0x03, 0x06, 0x02, 0x0e, 0x12, 0x9b, 0x04, + 0x06, 0x1d, 0x0e, 0x2d, 0x2f, 0x01, 0xd1, 0x1b, + 0x20, 0x00, 0x4b, 0x14, 0x62, 0x18, 0x20, 0x00, + 0x4b, 0x12, 0x62, 0x98, 0x98, 0x00, 0x07, 0x00, + 0x0f, 0x00, 0x01, 0x23, 0x43, 0x18, 0x06, 0x01, + 0x0e, 0x09, 0x48, 0x0e, 0x62, 0x41, 0x07, 0x50, + 0x0f, 0x40, 0x07, 0x6b, 0x0f, 0x5b, 0x00, 0xdb, + 0x43, 0x18, 0x06, 0x01, 0x0e, 0x09, 0x20, 0x80, + 0x43, 0x08, 0x4b, 0x08, 0x62, 0x98, 0xe0, 0x05, + 0x48, 0x07, 0x68, 0x06, 0x23, 0x80, 0x43, 0x9e, + 0x1c, 0x33, 0x60, 0x03, 0x20, 0x00, 0xb0, 0x01, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb0, 0x01, 0xe7, 0xf9, 0x72, 0x00, 0x01, 0x00, + 0x72, 0x00, 0x01, 0x28, 0xb5, 0xf1, 0x98, 0x00, + 0x06, 0x07, 0x0e, 0x3f, 0xb0, 0x81, 0x2f, 0x1f, + 0xdb, 0x05, 0x20, 0xb3, 0xb0, 0x01, 0xb0, 0x01, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x62, + 0x23, 0x80, 0x68, 0x1b, 0x60, 0x18, 0x48, 0x61, + 0x23, 0x80, 0x6b, 0x1b, 0x60, 0x18, 0x48, 0x60, + 0x23, 0x80, 0x6b, 0x5b, 0x60, 0x18, 0x48, 0x5f, + 0x23, 0x80, 0x6b, 0x9b, 0x60, 0x18, 0x20, 0x01, + 0x40, 0xb8, 0x4b, 0x59, 0x60, 0x18, 0x20, 0x00, + 0x4b, 0x57, 0x71, 0x18, 0x20, 0x00, 0x4b, 0x56, + 0x71, 0x58, 0x48, 0x55, 0x68, 0x00, 0x4b, 0x58, + 0x60, 0x58, 0x48, 0x58, 0x4b, 0x56, 0x60, 0x98, + 0x48, 0x57, 0x4b, 0x55, 0x60, 0xd8, 0x20, 0xff, + 0x30, 0x01, 0x4b, 0x53, 0x62, 0x18, 0x20, 0xff, + 0x30, 0x01, 0x4b, 0x51, 0x62, 0x58, 0x20, 0x03, + 0x4b, 0x52, 0x75, 0x18, 0x20, 0x0e, 0x4b, 0x51, + 0x75, 0x58, 0x20, 0x04, 0x4b, 0x4f, 0x75, 0x98, + 0x20, 0x03, 0x4b, 0x4e, 0x75, 0xd8, 0x20, 0x00, + 0x4b, 0x4d, 0x60, 0x18, 0x20, 0x00, 0x4b, 0x4d, + 0x60, 0x18, 0x20, 0x0d, 0x23, 0x19, 0x06, 0x9b, + 0x63, 0x18, 0x22, 0x00, 0x2a, 0x20, 0xdb, 0x04, + 0xe0, 0x21, 0x1c, 0x50, 0x06, 0x02, 0x0e, 0x12, + 0xe7, 0xf8, 0x25, 0x00, 0x00, 0x93, 0x4e, 0x46, + 0x50, 0xf5, 0x25, 0xff, 0x4b, 0x45, 0x54, 0x9d, + 0x01, 0x15, 0x4b, 0x45, 0x18, 0xec, 0x01, 0x15, + 0x4b, 0x44, 0x18, 0xe8, 0x25, 0x00, 0xc4, 0x20, + 0x25, 0x00, 0xc4, 0x20, 0x25, 0x00, 0xc4, 0x20, + 0x25, 0x00, 0xc4, 0x20, 0x25, 0x00, 0xc0, 0x20, + 0x25, 0x00, 0xc0, 0x20, 0x25, 0x00, 0xc0, 0x20, + 0x25, 0x00, 0xc0, 0x20, 0xe7, 0xdd, 0x21, 0x00, + 0x29, 0x20, 0xdb, 0x04, 0xe0, 0x0b, 0x1c, 0x48, + 0x04, 0x01, 0x0c, 0x09, 0xe7, 0xf8, 0x23, 0x00, + 0x00, 0x88, 0x4c, 0x2a, 0x50, 0x23, 0x23, 0x00, + 0x48, 0x35, 0x54, 0x43, 0xe7, 0xf3, 0x4c, 0x35, + 0x94, 0x00, 0x22, 0x00, 0x2a, 0x10, 0xdb, 0x04, + 0xe0, 0x0f, 0x1c, 0x50, 0x06, 0x02, 0x0e, 0x12, + 0xe7, 0xf8, 0x20, 0x00, 0x00, 0x93, 0x4c, 0x30, + 0x50, 0xe0, 0x23, 0xff, 0x48, 0x2f, 0x54, 0x83, + 0x20, 0x00, 0x00, 0x93, 0x9c, 0x00, 0x50, 0xe0, + 0xe7, 0xef, 0x21, 0x00, 0x23, 0xff, 0x33, 0x01, + 0x42, 0x99, 0xdb, 0x04, 0xe0, 0x2a, 0x1c, 0x48, + 0x04, 0x01, 0x0c, 0x09, 0xe7, 0xf6, 0x23, 0x00, + 0x00, 0x88, 0x4c, 0x1a, 0x50, 0x23, 0x20, 0x00, + 0x00, 0x8b, 0x4c, 0x18, 0x19, 0x1c, 0x23, 0x01, + 0x02, 0x9b, 0x18, 0xe3, 0x60, 0x18, 0x20, 0x00, + 0x4b, 0x14, 0x18, 0x5c, 0x23, 0x01, 0x02, 0xdb, + 0x18, 0xe3, 0x70, 0x18, 0x20, 0x00, 0x00, 0x8b, + 0x4c, 0x11, 0x50, 0xe0, 0x20, 0x00, 0x00, 0x8b, + 0x4c, 0x0f, 0x19, 0x1c, 0x23, 0x01, 0x02, 0x9b, + 0x18, 0xe3, 0x60, 0x18, 0x20, 0x00, 0x4b, 0x0c, + 0x18, 0x5c, 0x23, 0x01, 0x02, 0xdb, 0x18, 0xe3, + 0x70, 0x18, 0xe7, 0xd4, 0x20, 0x00, 0xb0, 0x01, + 0xe7, 0x39, 0xb0, 0x01, 0xe7, 0x37, 0x00, 0x00, + 0x2e, 0x08, 0x72, 0xf4, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x72, 0x98, 0x2e, 0x08, 0x72, 0xa4, + 0x9e, 0x00, 0x04, 0x80, 0x2e, 0x08, 0x60, 0x98, + 0x2e, 0x08, 0x69, 0x98, 0x9e, 0x00, 0x04, 0xa0, + 0x2e, 0x08, 0x5e, 0xe4, 0x2e, 0x08, 0x5e, 0xe8, + 0x2e, 0x08, 0x5e, 0xec, 0x2e, 0x08, 0x5f, 0xac, + 0x64, 0x00, 0x08, 0x00, 0x64, 0x00, 0x10, 0x00, + 0x2e, 0x08, 0x7b, 0xfc, 0x9e, 0x00, 0x04, 0xb8, + 0x2e, 0x08, 0x5f, 0x6c, 0x2e, 0x08, 0x5f, 0xcc, + 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x11, + 0x0e, 0x09, 0x29, 0x20, 0xdb, 0x02, 0x20, 0xa2, + 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x88, 0x4b, 0x0a, + 0x58, 0x18, 0x1c, 0x05, 0xd1, 0x01, 0x20, 0xb0, + 0xe7, 0xf6, 0x68, 0xe8, 0x1c, 0x04, 0xd1, 0x01, + 0x20, 0xb6, 0xe7, 0xf1, 0x68, 0x60, 0x00, 0x43, + 0x18, 0x18, 0x01, 0x80, 0x08, 0x80, 0x60, 0x38, + 0x20, 0x00, 0xe7, 0xe9, 0xe7, 0xe8, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x64, 0xb5, 0xff, 0xb0, 0x82, + 0x9a, 0x04, 0x06, 0x11, 0x0e, 0x09, 0x91, 0x00, + 0x9b, 0x05, 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, + 0xb0, 0x83, 0x99, 0x03, 0x29, 0x20, 0xdb, 0x05, + 0x20, 0xa2, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x98, 0x05, 0x28, 0x00, + 0xd0, 0x64, 0x98, 0x05, 0x23, 0x0d, 0x06, 0x9b, + 0x42, 0xd8, 0xd3, 0x02, 0x20, 0xb4, 0xb0, 0x05, + 0xe7, 0xf0, 0x99, 0x06, 0x23, 0xff, 0x33, 0x81, + 0x42, 0x99, 0xd2, 0x02, 0x20, 0xb5, 0xb0, 0x05, + 0xe7, 0xe8, 0x99, 0x03, 0x00, 0x88, 0x49, 0x2c, + 0x58, 0x08, 0x90, 0x02, 0x28, 0x00, 0xd1, 0x02, + 0x20, 0xb0, 0xb0, 0x05, 0xe7, 0xde, 0x99, 0x06, + 0x00, 0x88, 0x1f, 0xc1, 0x39, 0x05, 0x91, 0x00, + 0x9e, 0x05, 0x98, 0x05, 0x1d, 0xc5, 0x35, 0x05, + 0x60, 0x35, 0x99, 0x06, 0x60, 0x71, 0x20, 0x00, + 0x60, 0xb0, 0x98, 0x04, 0x28, 0x10, 0xd1, 0x0a, + 0x98, 0x02, 0x68, 0x84, 0x98, 0x02, 0x30, 0x18, + 0x90, 0x01, 0x1c, 0x2a, 0x99, 0x00, 0x98, 0x01, + 0xf0, 0x00, 0xfc, 0x86, 0xe0, 0x25, 0x98, 0x04, + 0x28, 0x20, 0xd1, 0x1f, 0x98, 0x02, 0x68, 0xc0, + 0x1c, 0x07, 0xd1, 0x02, 0x20, 0xb6, 0xb0, 0x05, + 0xe7, 0xb8, 0x78, 0xb8, 0x08, 0x40, 0x00, 0x40, + 0x70, 0xb8, 0x69, 0x3c, 0x1d, 0xf8, 0x30, 0x05, + 0x90, 0x01, 0x68, 0xb8, 0x28, 0x00, 0xd1, 0x00, + 0x60, 0xbd, 0x1c, 0x2a, 0x99, 0x00, 0x98, 0x01, + 0xf0, 0x00, 0xfc, 0x6a, 0x68, 0x79, 0x18, 0x40, + 0x60, 0x78, 0x78, 0x78, 0x99, 0x03, 0xf0, 0x00, + 0xf8, 0xb9, 0xe0, 0x02, 0x20, 0xbc, 0xb0, 0x05, + 0xe7, 0x9c, 0x68, 0xa0, 0x28, 0x00, 0xd0, 0x01, + 0x68, 0xa4, 0xe7, 0xfa, 0x60, 0xa6, 0x20, 0x00, + 0xb0, 0x05, 0xe7, 0x93, 0x20, 0xb4, 0xb0, 0x05, + 0xe7, 0x90, 0xb0, 0x03, 0xb0, 0x02, 0xe7, 0x8d, + 0x2e, 0x08, 0x5e, 0x64, 0xb5, 0xff, 0xb0, 0x81, + 0x9a, 0x03, 0x06, 0x16, 0x0e, 0x36, 0x9b, 0x04, + 0x06, 0x18, 0x0e, 0x00, 0x90, 0x00, 0xb0, 0x83, + 0x27, 0x00, 0x2e, 0x20, 0xdb, 0x05, 0x20, 0xa2, + 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0xb0, 0x49, 0x45, 0x58, 0x08, + 0x1c, 0x04, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x04, + 0xe7, 0xf3, 0x78, 0xe0, 0x28, 0x00, 0xd1, 0x73, + 0x98, 0x03, 0x28, 0x20, 0xd1, 0x19, 0x68, 0xe0, + 0x1c, 0x07, 0xd1, 0x02, 0x20, 0xb6, 0xb0, 0x04, + 0xe7, 0xe7, 0x69, 0x38, 0x49, 0x3c, 0x60, 0x48, + 0x48, 0x3b, 0x68, 0x40, 0x68, 0x00, 0x60, 0xb8, + 0x1d, 0xf8, 0x30, 0x05, 0x90, 0x02, 0x20, 0x01, + 0x90, 0x00, 0x48, 0x37, 0x68, 0x40, 0x68, 0x40, + 0x00, 0x80, 0x1f, 0xc1, 0x39, 0x19, 0x91, 0x01, + 0xe0, 0x1d, 0x98, 0x03, 0x28, 0x10, 0xd1, 0x17, + 0x68, 0xa0, 0x49, 0x31, 0x60, 0x48, 0x48, 0x30, + 0x68, 0x40, 0x68, 0x00, 0x61, 0x20, 0x48, 0x2e, + 0x68, 0x40, 0x68, 0x00, 0x61, 0x60, 0x1d, 0xe0, + 0x30, 0x11, 0x90, 0x02, 0x48, 0x2a, 0x68, 0x40, + 0x68, 0x40, 0x00, 0x80, 0x1f, 0xc1, 0x39, 0x21, + 0x91, 0x01, 0x20, 0x00, 0x90, 0x00, 0xe0, 0x02, + 0x20, 0xbc, 0xb0, 0x04, 0xe7, 0xb5, 0x48, 0x24, + 0x68, 0x40, 0x68, 0x80, 0x28, 0x00, 0xd0, 0x37, + 0x25, 0x00, 0x48, 0x21, 0x68, 0x40, 0x68, 0x02, + 0x99, 0x01, 0x98, 0x02, 0xf0, 0x00, 0xfb, 0xe8, + 0x19, 0x45, 0x48, 0x1d, 0x68, 0x40, 0x49, 0x1c, + 0x60, 0x08, 0x48, 0x1b, 0x68, 0x00, 0x68, 0x80, + 0x49, 0x19, 0x60, 0x48, 0x48, 0x18, 0x68, 0x40, + 0x68, 0x40, 0x00, 0x80, 0x1f, 0xc1, 0x39, 0x05, + 0x91, 0x01, 0x48, 0x15, 0x68, 0x40, 0x68, 0x80, + 0x28, 0x00, 0xd1, 0xe2, 0x20, 0x00, 0x49, 0x12, + 0x68, 0x09, 0x60, 0x88, 0x48, 0x10, 0x68, 0x40, + 0x99, 0x04, 0x60, 0x08, 0x48, 0x0e, 0x68, 0x40, + 0x68, 0x40, 0x99, 0x05, 0x60, 0x08, 0x98, 0x00, + 0x28, 0x00, 0xd0, 0x06, 0x60, 0x7d, 0x78, 0x78, + 0x1c, 0x31, 0xf0, 0x00, 0xf8, 0x13, 0xe0, 0x00, + 0xe0, 0x05, 0x20, 0x00, 0xb0, 0x04, 0xe7, 0x78, + 0x20, 0xb4, 0xb0, 0x04, 0xe7, 0x75, 0x20, 0xbc, + 0xb0, 0x04, 0xe7, 0x72, 0xb0, 0x03, 0xb0, 0x01, + 0xe7, 0x6f, 0x00, 0x00, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x60, 0x90, 0xb5, 0xf3, 0x98, 0x00, + 0x06, 0x02, 0x0e, 0x12, 0x99, 0x01, 0x06, 0x0c, + 0x0e, 0x24, 0xb0, 0x81, 0x2c, 0x20, 0xdb, 0x05, + 0x20, 0xa2, 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0xa0, 0x4b, 0x14, + 0x58, 0x18, 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xb0, + 0xb0, 0x01, 0xe7, 0xf3, 0x68, 0xe8, 0x1c, 0x01, + 0xd1, 0x02, 0x20, 0xb6, 0xb0, 0x01, 0xe7, 0xed, + 0x11, 0x10, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, + 0x28, 0x00, 0xd1, 0x04, 0x68, 0x48, 0x40, 0xd0, + 0x06, 0x07, 0x0e, 0x3f, 0xe0, 0x09, 0x68, 0x48, + 0x07, 0x16, 0x0f, 0x36, 0x40, 0xf0, 0x68, 0x4e, + 0x40, 0xd6, 0x1c, 0x33, 0x18, 0xc0, 0x06, 0x07, + 0x0e, 0x3f, 0x70, 0x0f, 0x70, 0x4a, 0x20, 0x00, + 0xb0, 0x01, 0xe7, 0xd3, 0xb0, 0x01, 0xe7, 0xd1, + 0x2e, 0x08, 0x5e, 0x64, 0xb4, 0xb0, 0x1c, 0x03, + 0x1c, 0x0a, 0x06, 0x11, 0x0e, 0x09, 0x29, 0x20, + 0xdb, 0x02, 0x20, 0xa2, 0xbc, 0xb0, 0x47, 0x70, + 0x00, 0x88, 0x4d, 0x08, 0x58, 0x28, 0x1c, 0x04, + 0xd1, 0x01, 0x20, 0xb0, 0xe7, 0xf6, 0x68, 0xe0, + 0x1c, 0x07, 0xd1, 0x01, 0x20, 0xb6, 0xe7, 0xf1, + 0x78, 0x78, 0x70, 0x18, 0x20, 0x00, 0xe7, 0xed, + 0xe7, 0xec, 0x00, 0x00, 0x2e, 0x08, 0x5e, 0x64, + 0xb5, 0xf3, 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x00, 0x99, 0x02, 0x06, 0x0d, + 0x0e, 0x2d, 0xb0, 0x86, 0x20, 0x00, 0x90, 0x00, + 0x2d, 0x20, 0xdd, 0x05, 0x20, 0xa2, 0xb0, 0x07, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x00, 0xa8, 0x49, 0xa2, 0x58, 0x08, 0x90, 0x04, + 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x07, + 0xe7, 0xf2, 0x00, 0xa8, 0x49, 0x9e, 0x68, 0x09, + 0x18, 0x40, 0x90, 0x05, 0x00, 0xe8, 0x1b, 0x40, + 0x00, 0x80, 0x49, 0x9c, 0x68, 0x09, 0x18, 0x46, + 0x98, 0x06, 0x28, 0x00, 0xd0, 0x73, 0x28, 0x01, + 0xd0, 0x4f, 0x28, 0x02, 0xd0, 0x00, 0xe1, 0x1d, + 0x98, 0x04, 0x69, 0x00, 0x60, 0x70, 0x98, 0x04, + 0x78, 0x40, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, + 0x98, 0x02, 0x28, 0x13, 0xd0, 0x16, 0x27, 0x00, + 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x11, 0x1c, 0x78, + 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x8e, + 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x08, 0x00, 0xb8, + 0x49, 0x8c, 0x58, 0x08, 0x30, 0x01, 0x78, 0x01, + 0x23, 0x80, 0x43, 0xdb, 0x40, 0x19, 0x70, 0x01, + 0xe7, 0xed, 0xe0, 0x1e, 0x27, 0x00, 0x2f, 0x10, + 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x78, 0x06, 0x07, + 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x84, 0x5d, 0xc0, + 0x42, 0xa8, 0xd1, 0x11, 0x00, 0xb8, 0x49, 0x83, + 0x58, 0x08, 0x30, 0x01, 0x78, 0x01, 0x23, 0x80, + 0x43, 0xdb, 0x40, 0x19, 0x70, 0x01, 0x98, 0x00, + 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, + 0x98, 0x00, 0x28, 0x02, 0xd1, 0x00, 0xe0, 0x00, + 0xe7, 0xe4, 0x88, 0x30, 0x4b, 0x7a, 0x40, 0x18, + 0x80, 0x30, 0x98, 0x05, 0x68, 0x00, 0x23, 0x01, + 0x03, 0x5b, 0x43, 0x18, 0x99, 0x05, 0x60, 0x08, + 0xe0, 0xd3, 0x98, 0x05, 0x68, 0x00, 0x4b, 0x75, + 0x40, 0x18, 0x99, 0x05, 0x60, 0x08, 0x20, 0x00, + 0x60, 0xb0, 0x20, 0x00, 0x70, 0xf0, 0x20, 0x00, + 0x60, 0xf0, 0x98, 0x04, 0x78, 0x40, 0x06, 0xc0, + 0x0e, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x28, 0x13, + 0xd0, 0x16, 0x27, 0x00, 0x2f, 0x20, 0xdb, 0x04, + 0xe0, 0x11, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, + 0xe7, 0xf8, 0x48, 0x63, 0x5d, 0xc0, 0x42, 0xa8, + 0xd1, 0x08, 0x00, 0xb8, 0xe0, 0x00, 0xe0, 0x27, + 0x49, 0x60, 0x58, 0x0c, 0x78, 0x60, 0x23, 0x80, + 0x43, 0x18, 0x70, 0x60, 0xe7, 0xed, 0xe0, 0x1e, + 0x27, 0x00, 0x2f, 0x10, 0xdb, 0x04, 0xe0, 0x1a, + 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, + 0x48, 0x59, 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x11, + 0x00, 0xb8, 0x49, 0x58, 0x58, 0x08, 0x30, 0x01, + 0x78, 0x01, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x19, + 0x70, 0x01, 0x98, 0x00, 0x30, 0x01, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x00, 0x98, 0x00, 0x28, 0x02, + 0xd1, 0x00, 0xe0, 0x00, 0xe7, 0xe4, 0xe0, 0x88, + 0x98, 0x05, 0x68, 0x00, 0x4b, 0x4f, 0x40, 0x18, + 0x99, 0x05, 0x60, 0x08, 0x20, 0x00, 0x60, 0xb0, + 0x20, 0x00, 0x70, 0xf0, 0x20, 0x00, 0x60, 0xf0, + 0x98, 0x04, 0x78, 0x40, 0x06, 0xc0, 0x0e, 0xc0, + 0x90, 0x02, 0x98, 0x04, 0x78, 0x40, 0x21, 0x20, + 0x40, 0x01, 0x91, 0x03, 0x98, 0x02, 0x28, 0x13, + 0xd0, 0x4c, 0x27, 0x00, 0x2f, 0x20, 0xdb, 0x04, + 0xe0, 0x47, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, + 0xe7, 0xf8, 0x48, 0x3b, 0x5d, 0xc0, 0x42, 0xa8, + 0xd1, 0x3e, 0x00, 0xb8, 0x49, 0x39, 0x58, 0x0c, + 0x20, 0x80, 0x70, 0x60, 0x99, 0x03, 0x1c, 0x20, + 0xf7, 0xfd, 0xfb, 0x30, 0x78, 0xa0, 0x23, 0x04, + 0x40, 0x18, 0xd0, 0x28, 0x6a, 0xe0, 0x22, 0x00, + 0x92, 0x01, 0x99, 0x01, 0x29, 0x08, 0xdb, 0x06, + 0xe0, 0x1f, 0x99, 0x01, 0x31, 0x01, 0x06, 0x09, + 0x0e, 0x09, 0x91, 0x01, 0xe7, 0xf5, 0x99, 0x01, + 0x00, 0x89, 0x18, 0x09, 0x68, 0x49, 0x9a, 0x01, + 0x00, 0x92, 0x18, 0x12, 0x64, 0x51, 0x22, 0x00, + 0x99, 0x01, 0x00, 0x89, 0x18, 0x09, 0x62, 0x4a, + 0x99, 0x01, 0x00, 0x89, 0x18, 0x09, 0x6c, 0x49, + 0x29, 0x00, 0xd0, 0x05, 0x9a, 0x01, 0x21, 0x80, + 0x41, 0x11, 0x88, 0x02, 0x43, 0x11, 0x80, 0x01, + 0xe7, 0xdf, 0x88, 0x01, 0x80, 0x41, 0x78, 0xa0, + 0x23, 0x20, 0x40, 0x18, 0xd0, 0x04, 0x98, 0x04, + 0x68, 0xc1, 0x1c, 0x20, 0xf0, 0x00, 0xfa, 0x3d, + 0xe7, 0xb7, 0xe0, 0x1e, 0x27, 0x00, 0x2f, 0x10, + 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x78, 0x06, 0x07, + 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x16, 0x5d, 0xc0, + 0x42, 0xa8, 0xd1, 0x11, 0x00, 0xb8, 0x49, 0x15, + 0x58, 0x0c, 0x20, 0x80, 0x70, 0x60, 0x99, 0x03, + 0x1c, 0x20, 0xf7, 0xfd, 0xfa, 0xe3, 0x98, 0x00, + 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, + 0x98, 0x00, 0x28, 0x02, 0xd1, 0x00, 0xe0, 0x00, + 0xe7, 0xe4, 0xe0, 0x02, 0x20, 0xbc, 0xb0, 0x07, + 0xe6, 0xbe, 0x98, 0x06, 0x99, 0x04, 0x70, 0xc8, + 0x20, 0x00, 0xb0, 0x07, 0xe6, 0xb8, 0xb0, 0x06, + 0xb0, 0x01, 0xe6, 0xb5, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x5d, 0xd4, 0x2e, 0x08, 0x5d, 0xcc, + 0x2e, 0x08, 0x5f, 0xac, 0x2e, 0x08, 0x5e, 0xec, + 0x2e, 0x08, 0x5f, 0xcc, 0x2e, 0x08, 0x5f, 0x6c, + 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, + 0xb4, 0x90, 0x1c, 0x03, 0x1c, 0x0a, 0x06, 0x11, + 0x0e, 0x09, 0x29, 0x20, 0xdd, 0x02, 0x20, 0xa2, + 0xbc, 0x90, 0x47, 0x70, 0x00, 0x88, 0x4c, 0x05, + 0x58, 0x20, 0x1c, 0x07, 0xd1, 0x01, 0x20, 0xb0, + 0xe7, 0xf6, 0x78, 0xf8, 0x70, 0x18, 0x20, 0x00, + 0xe7, 0xf2, 0xe7, 0xf1, 0x2e, 0x08, 0x5e, 0x64, + 0xb4, 0x90, 0x1c, 0x02, 0x1c, 0x0f, 0x06, 0x38, + 0x16, 0x04, 0x2a, 0x02, 0xda, 0x02, 0x20, 0x00, + 0xbc, 0x90, 0x47, 0x70, 0x2c, 0x01, 0xd1, 0x01, + 0x21, 0x28, 0xe0, 0x09, 0x2c, 0x02, 0xd1, 0x01, + 0x21, 0x20, 0xe0, 0x05, 0x2c, 0x00, 0xd1, 0x01, + 0x21, 0x0c, 0xe0, 0x01, 0x20, 0x00, 0xe7, 0xef, + 0x00, 0x50, 0x18, 0x80, 0x01, 0x80, 0x18, 0x41, + 0x1c, 0xc8, 0x08, 0x81, 0x1c, 0x08, 0xe7, 0xe7, + 0xe7, 0xe6, 0xb5, 0xf7, 0x1c, 0x07, 0xb0, 0x81, + 0x9a, 0x03, 0x06, 0x11, 0x0e, 0x09, 0x91, 0x00, + 0xb0, 0x84, 0x99, 0x04, 0x29, 0x20, 0xdb, 0x05, + 0x20, 0xa2, 0xb0, 0x05, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x99, 0x04, 0x00, 0x88, + 0x49, 0x29, 0x58, 0x08, 0x1c, 0x06, 0xd1, 0x02, + 0x20, 0xb0, 0xb0, 0x05, 0xe7, 0xf2, 0x2f, 0x00, + 0xd1, 0x02, 0x20, 0xb4, 0xb0, 0x05, 0xe7, 0xed, + 0x4b, 0x24, 0x42, 0x9f, 0xd1, 0x0a, 0x78, 0xf0, + 0x28, 0x00, 0xd0, 0x02, 0x20, 0xbc, 0xb0, 0x05, + 0xe7, 0xe4, 0x20, 0x00, 0x60, 0xf0, 0x20, 0x00, + 0xb0, 0x05, 0xe7, 0xdf, 0x68, 0xf0, 0x28, 0x00, + 0xd0, 0x02, 0x20, 0xb4, 0xb0, 0x05, 0xe7, 0xd9, + 0x99, 0x06, 0x00, 0x88, 0x1f, 0xc1, 0x39, 0x19, + 0x91, 0x02, 0x20, 0xff, 0x30, 0x81, 0x90, 0x01, + 0x99, 0x02, 0x98, 0x01, 0x42, 0x81, 0xda, 0x02, + 0x20, 0xb5, 0xb0, 0x05, 0xe7, 0xca, 0x1c, 0x3c, + 0x60, 0xf4, 0x37, 0x14, 0x1c, 0x3d, 0x37, 0x0c, + 0x60, 0x2f, 0x99, 0x06, 0x60, 0x69, 0x20, 0x00, + 0x60, 0xa8, 0x97, 0x03, 0x20, 0x00, 0x60, 0xe0, + 0x1d, 0xe0, 0x30, 0x05, 0x9a, 0x03, 0x99, 0x02, + 0xf0, 0x00, 0xf9, 0x56, 0x90, 0x00, 0x20, 0x00, + 0x70, 0xa0, 0x98, 0x00, 0x60, 0x60, 0x9a, 0x03, + 0x60, 0xa2, 0x61, 0x25, 0x99, 0x04, 0x20, 0x54, + 0xf7, 0xff, 0xfd, 0xa0, 0xb0, 0x05, 0xe7, 0xa9, + 0xb0, 0x04, 0xb0, 0x01, 0xe7, 0xa6, 0x00, 0x00, + 0x2e, 0x08, 0x5e, 0x64, 0x00, 0x00, 0xff, 0xff, + 0xb5, 0xff, 0xb0, 0x83, 0x9a, 0x05, 0x06, 0x11, + 0x0e, 0x09, 0x91, 0x00, 0x9b, 0x06, 0x06, 0x18, + 0x0e, 0x00, 0x90, 0x01, 0x98, 0x0c, 0x06, 0x01, + 0x0e, 0x09, 0x91, 0x02, 0xb0, 0x85, 0x99, 0x05, + 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x08, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x98, 0x08, 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb4, + 0xb0, 0x08, 0xe7, 0xf5, 0x99, 0x05, 0x00, 0xc8, + 0x1a, 0x40, 0x00, 0x80, 0x49, 0x83, 0x68, 0x09, + 0x18, 0x47, 0x98, 0x08, 0x4b, 0x82, 0x42, 0x98, + 0xd1, 0x73, 0x99, 0x05, 0x00, 0x88, 0x49, 0x81, + 0x58, 0x08, 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xb0, + 0xb0, 0x08, 0xe7, 0xe1, 0x68, 0xe8, 0x28, 0x00, + 0xd1, 0x02, 0x78, 0xe8, 0x28, 0x00, 0xd0, 0x02, + 0x20, 0xbc, 0xb0, 0x08, 0xe7, 0xd8, 0x78, 0xa8, + 0x28, 0x00, 0xd0, 0x54, 0x20, 0x00, 0x42, 0x80, + 0xd0, 0x1d, 0x24, 0x00, 0x2c, 0x20, 0xdb, 0x04, + 0xe0, 0x18, 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, + 0xe7, 0xf8, 0x48, 0x73, 0x5d, 0x00, 0x99, 0x05, + 0x42, 0x88, 0xd1, 0x0e, 0x20, 0x01, 0x40, 0xa0, + 0x43, 0xc0, 0x49, 0x70, 0x68, 0x09, 0x40, 0x08, + 0x49, 0x6e, 0x60, 0x08, 0x20, 0x00, 0x00, 0xa1, + 0x4a, 0x6d, 0x50, 0x50, 0x20, 0xff, 0x49, 0x6a, + 0x55, 0x08, 0xe7, 0xe6, 0xe0, 0x33, 0x4a, 0x6b, + 0x92, 0x03, 0x7e, 0x38, 0x1c, 0x06, 0x28, 0xff, + 0xd0, 0x14, 0x20, 0x00, 0x00, 0xb1, 0x4a, 0x68, + 0x50, 0x50, 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, + 0x49, 0x66, 0x68, 0x09, 0x40, 0x08, 0x49, 0x65, + 0x60, 0x08, 0x20, 0xff, 0x76, 0x38, 0x21, 0xff, + 0x48, 0x63, 0x55, 0x81, 0x21, 0x00, 0x00, 0xb0, + 0x9a, 0x03, 0x50, 0x11, 0x7e, 0x78, 0x1c, 0x06, + 0x28, 0xff, 0xd0, 0x14, 0x21, 0x00, 0x00, 0xb0, + 0x4a, 0x5b, 0x50, 0x11, 0x20, 0x01, 0x40, 0xb0, + 0x43, 0xc0, 0x49, 0x5a, 0x68, 0x09, 0x40, 0x08, + 0x49, 0x58, 0x60, 0x08, 0x20, 0xff, 0x76, 0x78, + 0x20, 0xff, 0x49, 0x51, 0x55, 0x88, 0x21, 0x00, + 0x00, 0xb0, 0x9a, 0x03, 0x50, 0x11, 0x20, 0x00, + 0x99, 0x05, 0x00, 0x89, 0x4a, 0x4b, 0x50, 0x50, + 0x24, 0x00, 0x2c, 0x0c, 0xdb, 0x06, 0xe0, 0x09, + 0xe0, 0x00, 0xe0, 0x0e, 0x1c, 0x60, 0x06, 0x04, + 0x0e, 0x24, 0xe7, 0xf6, 0x20, 0x00, 0x19, 0x39, + 0x73, 0x08, 0xe7, 0xf7, 0x20, 0x00, 0x83, 0x38, + 0x20, 0x00, 0x70, 0xf8, 0x20, 0x00, 0xb0, 0x08, + 0xe7, 0x66, 0x99, 0x05, 0x00, 0x88, 0x49, 0x3f, + 0x58, 0x08, 0x28, 0x00, 0xd0, 0x02, 0x20, 0xb0, + 0xb0, 0x08, 0xe7, 0x5d, 0x99, 0x07, 0x29, 0x11, + 0xdb, 0x02, 0x99, 0x07, 0x29, 0x13, 0xdd, 0x02, + 0x20, 0xb1, 0xb0, 0x08, 0xe7, 0x54, 0x99, 0x09, + 0x00, 0x88, 0x1f, 0xc1, 0x39, 0x21, 0x91, 0x01, + 0x20, 0xff, 0x30, 0x81, 0x90, 0x00, 0x99, 0x01, + 0x98, 0x00, 0x42, 0x81, 0xda, 0x02, 0x20, 0xb5, + 0xb0, 0x08, 0xe7, 0x45, 0x9d, 0x08, 0x98, 0x08, + 0x30, 0x1c, 0x90, 0x08, 0x98, 0x08, 0x90, 0x04, + 0x98, 0x08, 0x30, 0x0c, 0x90, 0x08, 0x98, 0x08, + 0x90, 0x02, 0x9a, 0x02, 0x98, 0x04, 0x60, 0x02, + 0x99, 0x09, 0x98, 0x04, 0x60, 0x41, 0x20, 0x00, + 0x99, 0x04, 0x60, 0x88, 0x20, 0x00, 0x61, 0xa8, + 0x1d, 0xe8, 0x30, 0x11, 0x9a, 0x02, 0x99, 0x01, + 0xf0, 0x00, 0xf8, 0x56, 0x20, 0x00, 0x70, 0x28, + 0x98, 0x06, 0x99, 0x07, 0x43, 0x08, 0x70, 0x68, + 0x20, 0x00, 0x70, 0xa8, 0x20, 0x02, 0x70, 0xe8, + 0x20, 0x00, 0x71, 0x28, 0x98, 0x04, 0x60, 0xa8, + 0x20, 0x00, 0x60, 0xe8, 0x9a, 0x02, 0x61, 0x2a, + 0x9a, 0x02, 0x61, 0x6a, 0x99, 0x05, 0x00, 0x88, + 0x49, 0x16, 0x50, 0x0d, 0x20, 0x00, 0x60, 0xf8, + 0x88, 0x38, 0x4b, 0x1c, 0x40, 0x18, 0x80, 0x38, + 0x20, 0x00, 0x60, 0xb8, 0x9a, 0x02, 0x60, 0x7a, + 0x98, 0x06, 0x99, 0x07, 0x43, 0x08, 0x70, 0xb8, + 0x24, 0x00, 0x2c, 0x0c, 0xdb, 0x04, 0xe0, 0x07, + 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, + 0x20, 0x00, 0x19, 0x39, 0x74, 0x08, 0xe7, 0xf7, + 0x20, 0x00, 0x83, 0x38, 0x20, 0x00, 0x70, 0xf8, + 0x20, 0xff, 0x76, 0x38, 0x20, 0xff, 0x76, 0x78, + 0x20, 0x00, 0xb0, 0x08, 0xe6, 0xec, 0xb0, 0x05, + 0xb0, 0x03, 0xe6, 0xe9, 0x2e, 0x08, 0x5d, 0xcc, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x5e, 0x64, + 0x2e, 0x08, 0x5f, 0xac, 0x2e, 0x08, 0x5e, 0xe4, + 0x2e, 0x08, 0x5e, 0xec, 0x9e, 0x00, 0x04, 0xb8, + 0x2e, 0x08, 0x5f, 0x6c, 0x2e, 0x08, 0x5e, 0xe8, + 0x2e, 0x08, 0x5f, 0xcc, 0xff, 0xff, 0xfb, 0xff, + 0xb4, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, + 0x21, 0x00, 0x68, 0x22, 0x2a, 0x00, 0xd0, 0x00, + 0x60, 0x13, 0x1d, 0xd8, 0x30, 0xb9, 0x60, 0x18, + 0x33, 0xc0, 0x31, 0x01, 0x3f, 0xc0, 0x2f, 0xc0, + 0xd8, 0xf7, 0x20, 0x00, 0x60, 0x18, 0x60, 0x23, + 0x31, 0x01, 0x1c, 0x08, 0xbc, 0x90, 0x47, 0x70, + 0xe7, 0xfc, 0xb4, 0x90, 0x1c, 0x03, 0x1c, 0x0a, + 0x6b, 0x18, 0x68, 0xd1, 0x68, 0x07, 0x2f, 0x00, + 0xd0, 0x0c, 0x68, 0x07, 0x60, 0x0f, 0x68, 0x41, + 0x68, 0x57, 0x68, 0x84, 0x19, 0x3f, 0x60, 0x57, + 0x27, 0x00, 0x60, 0x07, 0x27, 0x00, 0x60, 0x47, + 0x27, 0x00, 0x60, 0x87, 0x6a, 0xc7, 0x2f, 0x00, + 0xd0, 0x0c, 0x6a, 0xc7, 0x60, 0x0f, 0x6b, 0x01, + 0x68, 0x57, 0x6b, 0x44, 0x19, 0x3f, 0x60, 0x57, + 0x27, 0x00, 0x62, 0xc7, 0x27, 0x00, 0x63, 0x07, + 0x27, 0x00, 0x63, 0x47, 0x60, 0xd1, 0xbc, 0x90, + 0x47, 0x70, 0xe7, 0xfc, 0x20, 0x00, 0x49, 0x01, + 0x70, 0x08, 0x47, 0x70, 0x2e, 0x08, 0x7c, 0x1c, + 0xb5, 0xff, 0xb0, 0x82, 0x9b, 0x05, 0x06, 0x18, + 0x16, 0x00, 0x90, 0x00, 0x98, 0x0c, 0x06, 0x01, + 0x16, 0x09, 0x91, 0x01, 0x98, 0x00, 0x28, 0x1f, + 0xdd, 0x05, 0x20, 0xaf, 0xb0, 0x02, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x37, + 0x78, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x20, 0xd2, + 0xb0, 0x02, 0xe7, 0xf4, 0xe0, 0x64, 0x20, 0xff, + 0x49, 0x32, 0x70, 0x08, 0x49, 0x32, 0x98, 0x00, + 0xf0, 0x09, 0xfa, 0xa8, 0x9a, 0x04, 0x2a, 0x00, + 0xd9, 0x52, 0x20, 0xff, 0x49, 0x2f, 0x70, 0x08, + 0x9d, 0x02, 0x98, 0x0b, 0x99, 0x01, 0x18, 0x44, + 0x99, 0x01, 0x20, 0xc0, 0x1a, 0x40, 0x9a, 0x04, + 0x42, 0x90, 0xd9, 0x01, 0x9f, 0x04, 0xe0, 0x02, + 0x99, 0x01, 0x20, 0xc0, 0x1a, 0x47, 0x1c, 0x3a, + 0x1c, 0x21, 0x1c, 0x28, 0x23, 0xfe, 0xf0, 0x05, + 0xfa, 0xa5, 0x1c, 0x06, 0x2e, 0xd0, 0xd1, 0x0a, + 0x20, 0x03, 0xf0, 0x04, 0xf9, 0xa9, 0x1c, 0x3a, + 0x1c, 0x21, 0x1c, 0x28, 0x23, 0xfe, 0xf0, 0x05, + 0xfa, 0x99, 0x1c, 0x06, 0xe7, 0xf2, 0x98, 0x02, + 0x19, 0xc0, 0x90, 0x02, 0x9a, 0x04, 0x1b, 0xd2, + 0x92, 0x04, 0x9d, 0x0b, 0x9c, 0x03, 0x9b, 0x00, + 0x1c, 0x3a, 0x1c, 0x21, 0x1c, 0x28, 0xf0, 0x05, + 0xfa, 0x89, 0x1c, 0x06, 0x2e, 0xd0, 0xd1, 0x0a, + 0x20, 0x03, 0xf0, 0x04, 0xf9, 0x8d, 0x9b, 0x00, + 0x1c, 0x3a, 0x1c, 0x21, 0x1c, 0x28, 0xf0, 0x05, + 0xfa, 0x7d, 0x1c, 0x06, 0xe7, 0xf2, 0x99, 0x03, + 0x29, 0x20, 0xd3, 0x04, 0x99, 0x01, 0x18, 0x78, + 0x99, 0x03, 0x18, 0x41, 0x91, 0x03, 0x48, 0x0b, + 0x78, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x20, 0x03, + 0xf0, 0x04, 0xf9, 0x76, 0xe7, 0xf7, 0xe7, 0xa9, + 0x20, 0x00, 0x49, 0x04, 0x70, 0x08, 0x20, 0x00, + 0xb0, 0x02, 0xe7, 0x90, 0xb0, 0x02, 0xe7, 0x8e, + 0xe7, 0x8d, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0xa8, + 0x2e, 0x01, 0x2e, 0x19, 0x2e, 0x08, 0x7c, 0x1c, + 0xb5, 0xff, 0x1c, 0x0f, 0x9a, 0x02, 0x06, 0x14, + 0x0e, 0x24, 0x9b, 0x03, 0x06, 0x1d, 0x0e, 0x2d, + 0x2c, 0x1f, 0xdb, 0x04, 0x20, 0xb3, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x04, 0x3a, + 0x0c, 0x12, 0x2d, 0x01, 0xd1, 0x73, 0x20, 0x01, + 0x03, 0x40, 0x40, 0x10, 0xd0, 0x0a, 0x4b, 0x6f, + 0x40, 0x1a, 0x48, 0x6f, 0x68, 0x00, 0x68, 0x00, + 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, 0x4b, 0x6c, + 0x68, 0x1b, 0x60, 0x18, 0x20, 0x01, 0x02, 0x40, + 0x40, 0x10, 0xd0, 0x0a, 0x4b, 0x69, 0x40, 0x1a, + 0x48, 0x67, 0x68, 0x00, 0x68, 0x00, 0x23, 0x20, + 0x43, 0xdb, 0x40, 0x18, 0x4b, 0x64, 0x68, 0x1b, + 0x60, 0x18, 0x20, 0x01, 0x05, 0x00, 0x40, 0x38, + 0xd0, 0x08, 0x48, 0x63, 0x68, 0x00, 0x69, 0x80, + 0x23, 0x01, 0x05, 0x1b, 0x43, 0x18, 0x4b, 0x60, + 0x68, 0x1b, 0x61, 0x98, 0x20, 0x01, 0x05, 0x40, + 0x40, 0x38, 0xd0, 0x08, 0x48, 0x5c, 0x68, 0x00, + 0x69, 0x80, 0x23, 0x01, 0x05, 0x5b, 0x43, 0x18, + 0x4b, 0x59, 0x68, 0x1b, 0x61, 0x98, 0x0a, 0x12, + 0x48, 0x55, 0x68, 0x00, 0x68, 0x00, 0x43, 0x90, + 0x4b, 0x53, 0x68, 0x1b, 0x60, 0x18, 0x48, 0x52, + 0x68, 0x00, 0x68, 0x00, 0x4b, 0x53, 0x65, 0x18, + 0x48, 0x51, 0x68, 0x00, 0x77, 0x04, 0x20, 0x09, + 0x04, 0x80, 0x40, 0x38, 0xd0, 0x35, 0x21, 0x00, + 0x29, 0x20, 0xdb, 0x04, 0xe0, 0x31, 0x1c, 0x48, + 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x20, 0x01, + 0x40, 0x88, 0x9b, 0x00, 0x40, 0x18, 0xd0, 0x27, + 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, 0xd0, 0x0e, + 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, 0x4b, 0x46, + 0x68, 0x1b, 0x5a, 0x18, 0x23, 0xff, 0x33, 0x01, + 0x43, 0x18, 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, + 0x4e, 0x41, 0x68, 0x36, 0x52, 0xf0, 0x20, 0x01, + 0x04, 0x80, 0x40, 0x38, 0xd0, 0x10, 0x00, 0xc8, + 0x1a, 0x40, 0x00, 0x80, 0xe0, 0x00, 0xe0, 0x0d, + 0x4b, 0x3b, 0x68, 0x1b, 0x5a, 0x18, 0x23, 0x01, + 0x02, 0x5b, 0x43, 0x18, 0x00, 0xcb, 0x1a, 0x5b, + 0x00, 0x9b, 0x4e, 0x37, 0x68, 0x36, 0x52, 0xf0, + 0xe7, 0xcd, 0xe0, 0x5c, 0x2d, 0x02, 0xd1, 0x5a, + 0x0a, 0x12, 0x48, 0x2f, 0x68, 0x00, 0x68, 0x00, + 0x43, 0x10, 0x4b, 0x2d, 0x68, 0x1b, 0x60, 0x18, + 0x48, 0x2b, 0x68, 0x00, 0x68, 0x00, 0x4b, 0x2d, + 0x65, 0x18, 0x20, 0x01, 0x05, 0x00, 0x40, 0x38, + 0xd0, 0x07, 0x48, 0x29, 0x68, 0x00, 0x69, 0x80, + 0x4b, 0x2a, 0x40, 0x18, 0x4b, 0x26, 0x68, 0x1b, + 0x61, 0x98, 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, + 0xd0, 0x07, 0x48, 0x23, 0x68, 0x00, 0x69, 0x80, + 0x4b, 0x25, 0x40, 0x18, 0x4b, 0x20, 0x68, 0x1b, + 0x61, 0x98, 0x21, 0x00, 0x29, 0x20, 0xdb, 0x04, + 0xe0, 0x31, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, + 0xe7, 0xf8, 0x20, 0x09, 0x04, 0x80, 0x40, 0x38, + 0xd0, 0x28, 0x20, 0x01, 0x40, 0x88, 0x9b, 0x00, + 0x40, 0x18, 0xd0, 0x23, 0x20, 0x01, 0x05, 0x40, + 0x40, 0x38, 0xd0, 0x0d, 0x00, 0xc8, 0x1a, 0x40, + 0x00, 0x80, 0x4b, 0x15, 0x68, 0x1b, 0x5a, 0x18, + 0x4b, 0x16, 0x40, 0x18, 0x00, 0xcb, 0x1a, 0x5b, + 0x00, 0x9b, 0x4e, 0x11, 0x68, 0x36, 0x52, 0xf0, + 0x20, 0x01, 0x04, 0x80, 0x40, 0x38, 0xd0, 0x0d, + 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, 0x4b, 0x0c, + 0x68, 0x1b, 0x5a, 0x18, 0x4b, 0x05, 0x40, 0x18, + 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x08, + 0x68, 0x36, 0x52, 0xf0, 0xe7, 0xcd, 0x20, 0x00, + 0xe7, 0x15, 0xe7, 0x14, 0xff, 0xff, 0xfd, 0xff, + 0x2e, 0x08, 0x7c, 0x20, 0xff, 0xff, 0xdf, 0xff, + 0x2e, 0x08, 0x5e, 0x14, 0x66, 0x00, 0x00, 0x80, + 0x2e, 0x08, 0x5d, 0xcc, 0xff, 0xef, 0xff, 0xff, + 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xb5, 0x80, 0x1c, 0x07, 0x48, 0x17, 0x68, 0x01, + 0x20, 0x00, 0xf0, 0x12, 0xf8, 0x47, 0x60, 0x38, + 0x48, 0x14, 0x68, 0x00, 0x1d, 0x01, 0x20, 0x00, + 0xf0, 0x12, 0xf8, 0x40, 0x60, 0x78, 0x48, 0x11, + 0x68, 0x00, 0x1d, 0xc1, 0x31, 0x05, 0x20, 0x00, + 0xf0, 0x12, 0xf8, 0x38, 0x60, 0xf8, 0x48, 0x0d, + 0x68, 0x00, 0x1d, 0xc1, 0x31, 0x09, 0x20, 0x00, + 0xf0, 0x12, 0xf8, 0x30, 0x61, 0x38, 0x48, 0x09, + 0x68, 0x00, 0x1d, 0xc1, 0x31, 0x0d, 0x20, 0x00, + 0xf0, 0x12, 0xf8, 0x28, 0x61, 0x78, 0x48, 0x05, + 0x68, 0x00, 0x1d, 0xc1, 0x31, 0x01, 0x20, 0x00, + 0xf0, 0x12, 0xf8, 0x20, 0x60, 0xb8, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x5e, 0x14, + 0xb5, 0xf0, 0x1c, 0x07, 0xb0, 0x82, 0x26, 0x00, + 0x89, 0xb8, 0x23, 0x08, 0x40, 0x18, 0xd0, 0x08, + 0x48, 0x59, 0x6e, 0xc2, 0x48, 0x58, 0x6f, 0x01, + 0x48, 0x57, 0x6a, 0x00, 0xf7, 0xfd, 0xff, 0x5c, + 0x1c, 0x06, 0x89, 0xb8, 0x23, 0x10, 0x40, 0x18, + 0xd0, 0x02, 0x48, 0x53, 0x69, 0x40, 0x1c, 0x06, + 0x89, 0xb8, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x21, + 0x48, 0x50, 0x68, 0xc0, 0x90, 0x00, 0x68, 0x78, + 0x02, 0x40, 0x99, 0x00, 0x1a, 0x08, 0x90, 0x01, + 0x98, 0x01, 0x21, 0x33, 0x06, 0x49, 0x65, 0xc8, + 0x98, 0x00, 0x21, 0x33, 0x06, 0x49, 0x66, 0x08, + 0x98, 0x01, 0x49, 0x48, 0x60, 0x88, 0x98, 0x00, + 0x49, 0x46, 0x60, 0xc8, 0x20, 0x01, 0x21, 0x33, + 0x06, 0x49, 0x66, 0xc8, 0x20, 0x00, 0x21, 0x33, + 0x06, 0x49, 0x66, 0xc8, 0x89, 0xb8, 0x23, 0x02, + 0x43, 0x18, 0x81, 0xb8, 0x89, 0xb8, 0x23, 0x02, + 0x40, 0x18, 0xd0, 0x3e, 0x48, 0x3d, 0x68, 0x80, + 0x1f, 0xc4, 0x3c, 0xff, 0x3c, 0xfa, 0x68, 0x38, + 0x02, 0x40, 0x1a, 0x25, 0x48, 0x38, 0x60, 0x45, + 0x48, 0x37, 0x60, 0x84, 0x20, 0x33, 0x06, 0x40, + 0x65, 0x45, 0x20, 0x33, 0x06, 0x40, 0x65, 0x84, + 0x1b, 0x60, 0x38, 0xc0, 0x21, 0x33, 0x06, 0x49, + 0x66, 0x88, 0x21, 0x00, 0x48, 0x32, 0xf7, 0xfd, + 0xfb, 0x89, 0x48, 0x32, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x00, 0xe7, 0xfa, 0x48, 0x30, 0x68, 0x01, + 0x23, 0xff, 0x33, 0x01, 0x43, 0x19, 0x60, 0x01, + 0x48, 0x2e, 0x6d, 0x80, 0x49, 0x2d, 0x65, 0x88, + 0x48, 0x2c, 0x6b, 0xc0, 0x23, 0x01, 0x07, 0x9b, + 0x40, 0x18, 0xd0, 0x00, 0xe7, 0xf8, 0x20, 0x33, + 0x06, 0x40, 0x66, 0x45, 0x20, 0x33, 0x06, 0x40, + 0x66, 0x84, 0x21, 0x00, 0x20, 0xff, 0xf7, 0xfd, + 0xfb, 0x69, 0x48, 0x20, 0x60, 0x05, 0x48, 0x1f, + 0x60, 0x44, 0x89, 0xb8, 0x23, 0x04, 0x40, 0x18, + 0xd0, 0x21, 0x68, 0xb8, 0x28, 0x00, 0xd1, 0x06, + 0x48, 0x1f, 0x68, 0x01, 0x23, 0x02, 0x43, 0xdb, + 0x40, 0x19, 0x60, 0x01, 0xe0, 0x17, 0x69, 0x38, + 0x49, 0x1a, 0x65, 0x88, 0x69, 0x38, 0x68, 0xb9, + 0x02, 0x49, 0x18, 0x40, 0x49, 0x17, 0x65, 0xc8, + 0x20, 0x03, 0x02, 0x00, 0x49, 0x15, 0x67, 0x48, + 0x20, 0x02, 0x49, 0x14, 0x67, 0x88, 0x20, 0x40, + 0x49, 0x12, 0x66, 0x08, 0x48, 0x12, 0x68, 0x01, + 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, 0x20, 0x33, + 0x06, 0x40, 0x6d, 0x40, 0x23, 0x0d, 0x06, 0x9b, + 0x1a, 0xc0, 0x60, 0x38, 0x20, 0x33, 0x06, 0x40, + 0x6d, 0xc0, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, + 0x60, 0x78, 0x48, 0x0a, 0x43, 0x30, 0x60, 0xb8, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xcc, 0x00, 0x0f, 0x80, 0x2e, 0x08, 0x7c, 0x24, + 0x00, 0x00, 0x80, 0x0f, 0xcc, 0x00, 0x05, 0x00, + 0x66, 0x00, 0x00, 0xe0, 0x66, 0x00, 0x00, 0x80, + 0x66, 0x00, 0x00, 0xf0, 0xcc, 0x00, 0x00, 0x00, + 0xb5, 0xf3, 0x1c, 0x02, 0xb0, 0x81, 0x68, 0x93, + 0x68, 0x54, 0x21, 0x00, 0x1d, 0xd8, 0x30, 0xb9, + 0x1b, 0x00, 0x06, 0x05, 0x0e, 0x2d, 0x2d, 0x12, + 0xda, 0x12, 0x21, 0x00, 0x42, 0xa9, 0xdb, 0x04, + 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, + 0xe7, 0xf8, 0x78, 0x26, 0x34, 0x01, 0x98, 0x02, + 0x54, 0x46, 0xe7, 0xf6, 0x68, 0x1b, 0x1d, 0x18, + 0x90, 0x00, 0x98, 0x00, 0x78, 0x80, 0x18, 0xc4, + 0x1c, 0x0f, 0x2f, 0x12, 0xdb, 0x04, 0xe0, 0x08, + 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, + 0x78, 0x26, 0x34, 0x01, 0x98, 0x02, 0x55, 0xc6, + 0xe7, 0xf6, 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, + 0xe7, 0xf9, 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0d, + 0x1c, 0x14, 0xb0, 0x82, 0x20, 0x00, 0x70, 0x20, + 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x03, + 0x20, 0xb1, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, + 0x78, 0xba, 0x20, 0x40, 0x40, 0x10, 0xd0, 0x2a, + 0x07, 0x12, 0x0f, 0x12, 0x07, 0xd0, 0x0f, 0xc0, + 0xd0, 0x25, 0x20, 0x40, 0x70, 0x20, 0x35, 0x0a, + 0x21, 0x00, 0x1d, 0xf8, 0x30, 0x0d, 0x90, 0x01, + 0x1d, 0xf8, 0x30, 0x1d, 0x90, 0x00, 0x21, 0x00, + 0x29, 0x08, 0xdb, 0x04, 0xe0, 0x14, 0x1c, 0x48, + 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x78, 0x2e, + 0x35, 0x01, 0x98, 0x00, 0x78, 0x03, 0x30, 0x01, + 0x90, 0x00, 0x40, 0x33, 0x98, 0x01, 0x78, 0x06, + 0x30, 0x01, 0x90, 0x01, 0x42, 0xb3, 0xd0, 0x02, + 0x20, 0x00, 0x70, 0x20, 0xe0, 0x00, 0xe7, 0xea, + 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xce, 0x20, 0xb1, + 0xb0, 0x02, 0xe7, 0xcb, 0xb0, 0x02, 0xe7, 0xc9, + 0xb5, 0xf7, 0x1c, 0x07, 0xb0, 0x8d, 0x20, 0x00, + 0x9a, 0x0f, 0x70, 0x10, 0x78, 0x78, 0x23, 0x80, + 0x40, 0x18, 0xd0, 0x05, 0x20, 0xb1, 0xb0, 0x0d, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x78, 0xb8, 0x90, 0x05, 0x98, 0x05, 0x23, 0x40, + 0x40, 0x18, 0xd0, 0x73, 0x98, 0x05, 0x07, 0x00, + 0x0f, 0x00, 0x90, 0x05, 0x98, 0x05, 0x23, 0x02, + 0x40, 0x18, 0xd1, 0x03, 0x98, 0x05, 0x23, 0x04, + 0x40, 0x18, 0xd0, 0x68, 0x99, 0x0e, 0x79, 0x48, + 0x23, 0x3e, 0x40, 0x18, 0x90, 0x0c, 0x78, 0xf8, + 0x90, 0x04, 0x98, 0x04, 0x01, 0x00, 0x4b, 0x81, + 0x18, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x68, 0x00, + 0x90, 0x01, 0x78, 0x7c, 0x23, 0xbf, 0x40, 0x1c, + 0x23, 0xfe, 0x40, 0x1c, 0x20, 0x00, 0x90, 0x03, + 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x99, 0x0c, + 0x42, 0x88, 0xd0, 0x08, 0x06, 0x20, 0x0e, 0x00, + 0x24, 0x01, 0x43, 0x04, 0x20, 0x01, 0x90, 0x03, + 0x23, 0xdf, 0x40, 0x1c, 0xe0, 0x06, 0x20, 0x02, + 0x40, 0x20, 0xd0, 0x03, 0x70, 0x7c, 0x20, 0x00, + 0xb0, 0x0d, 0xe7, 0xbd, 0x23, 0xfd, 0x40, 0x1c, + 0x98, 0x05, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x73, + 0x6a, 0xfd, 0x98, 0x03, 0x28, 0x00, 0xd0, 0x14, + 0x26, 0x00, 0x2e, 0x08, 0xdb, 0x04, 0xe0, 0x0e, + 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0xe7, 0xf8, + 0x00, 0xb0, 0x19, 0x40, 0x68, 0x40, 0x00, 0xb1, + 0x19, 0x49, 0x64, 0x48, 0x20, 0x00, 0x00, 0xb1, + 0x19, 0x49, 0x62, 0x48, 0xe7, 0xf0, 0x88, 0x28, + 0x80, 0x68, 0x20, 0x20, 0x40, 0x20, 0xd1, 0x3e, + 0x99, 0x0e, 0x79, 0xc8, 0x09, 0x40, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x0a, 0x99, 0x0e, 0x79, 0xc8, + 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x09, 0x98, 0x0a, + 0x30, 0x01, 0x06, 0x06, 0x0e, 0x36, 0x2e, 0x08, + 0xdb, 0x04, 0xe0, 0x10, 0x1c, 0x70, 0x06, 0x06, + 0x0e, 0x36, 0xe7, 0xf8, 0x20, 0x00, 0x00, 0xb1, + 0x19, 0x49, 0xe0, 0x01, 0xe0, 0x9d, 0xe0, 0x9c, + 0x64, 0x48, 0x88, 0x68, 0x21, 0x80, 0x41, 0x31, + 0x43, 0x88, 0x80, 0x68, 0xe7, 0xee, 0x98, 0x0a, + 0x00, 0x80, 0x19, 0x40, 0x6c, 0x41, 0x98, 0x09, + 0x00, 0x80, 0x4a, 0x4b, 0x58, 0x10, 0x40, 0x08, + 0x99, 0x0a, 0x00, 0x89, 0x19, 0x49, 0x64, 0x48, + 0x06, 0x20, 0x0e, 0x00, 0x24, 0x20, 0x43, 0x04, + 0x98, 0x01, 0x0a, 0x00, 0x02, 0x00, 0x90, 0x01, + 0x98, 0x01, 0x99, 0x0c, 0x43, 0x08, 0x90, 0x01, + 0x98, 0x01, 0x99, 0x02, 0x60, 0x08, 0x78, 0x38, + 0x23, 0x80, 0x40, 0x18, 0xd0, 0x19, 0x99, 0x0e, + 0x7b, 0x08, 0x07, 0x42, 0x0f, 0x52, 0x92, 0x07, + 0x99, 0x0e, 0x7b, 0x08, 0x08, 0xc0, 0x06, 0x02, + 0x0e, 0x12, 0x92, 0x08, 0x1d, 0xe9, 0x31, 0x3d, + 0x91, 0x06, 0x99, 0x06, 0x9a, 0x08, 0x5c, 0x88, + 0x49, 0x36, 0x9a, 0x07, 0x5c, 0x89, 0xe0, 0x00, + 0xe0, 0x4e, 0x40, 0x08, 0x99, 0x06, 0x9a, 0x08, + 0x54, 0x88, 0x99, 0x0e, 0x79, 0x88, 0x06, 0xc0, + 0x0e, 0xc0, 0x90, 0x00, 0x98, 0x00, 0x49, 0x30, + 0x40, 0xc1, 0x91, 0x00, 0x99, 0x0e, 0x79, 0x88, + 0x09, 0x40, 0x06, 0x02, 0x0e, 0x12, 0x92, 0x0b, + 0x9a, 0x0b, 0x00, 0x90, 0x19, 0x40, 0x6c, 0x40, + 0x99, 0x00, 0x40, 0x08, 0xd0, 0x33, 0x06, 0x20, + 0x0e, 0x00, 0x24, 0x40, 0x43, 0x04, 0x9a, 0x0b, + 0x00, 0x90, 0x19, 0x40, 0x6c, 0x40, 0x99, 0x00, + 0x40, 0x41, 0x00, 0x90, 0x19, 0x40, 0x64, 0x41, + 0x9a, 0x0b, 0x00, 0x90, 0x19, 0x40, 0x6a, 0x40, + 0x99, 0x00, 0x43, 0x01, 0x00, 0x90, 0x19, 0x40, + 0x62, 0x41, 0x9a, 0x0b, 0x00, 0x90, 0x19, 0x40, + 0x6c, 0x40, 0x28, 0x00, 0xd1, 0x17, 0x88, 0x68, + 0x9a, 0x0b, 0x21, 0x80, 0x41, 0x11, 0x43, 0x88, + 0x80, 0x68, 0x88, 0x68, 0x28, 0x00, 0xd1, 0x0e, + 0x06, 0x20, 0x0e, 0x00, 0x24, 0x02, 0x43, 0x04, + 0x23, 0xfe, 0x40, 0x1c, 0x98, 0x0c, 0x30, 0x02, + 0x06, 0x00, 0x0e, 0x00, 0x90, 0x0c, 0x98, 0x0c, + 0x23, 0x3e, 0x40, 0x18, 0x90, 0x0c, 0xe0, 0x0a, + 0x06, 0x20, 0x0e, 0x00, 0x24, 0x40, 0x43, 0x04, + 0x23, 0xfe, 0x40, 0x1c, 0x98, 0x0c, 0x1c, 0x41, + 0x98, 0x04, 0xf0, 0x00, 0xf8, 0x13, 0x9a, 0x0f, + 0x70, 0x14, 0x70, 0x7c, 0x20, 0x00, 0xb0, 0x0d, + 0xe6, 0xe2, 0x20, 0xb1, 0xb0, 0x0d, 0xe6, 0xdf, + 0xb0, 0x0d, 0xe6, 0xdd, 0x64, 0x00, 0x08, 0x00, + 0x2e, 0x08, 0x20, 0x18, 0x2e, 0x08, 0x20, 0x98, + 0x80, 0x00, 0x00, 0x00, 0xb5, 0xf3, 0x98, 0x00, + 0x06, 0x07, 0x0e, 0x3f, 0x99, 0x01, 0x06, 0x0e, + 0x0e, 0x36, 0x00, 0xf8, 0x4b, 0x13, 0x18, 0xc5, + 0x01, 0x38, 0x4b, 0x13, 0x18, 0xc4, 0x01, 0x38, + 0x4b, 0x12, 0x18, 0xc2, 0x68, 0x10, 0x23, 0x40, + 0x43, 0xdb, 0x40, 0x18, 0x60, 0x10, 0x2e, 0x3e, + 0xdc, 0x15, 0x68, 0x20, 0x1c, 0x01, 0x0a, 0x09, + 0x02, 0x09, 0x43, 0x31, 0x60, 0x21, 0x68, 0x28, + 0x1c, 0x01, 0x0a, 0x09, 0x02, 0x09, 0x23, 0x3e, + 0x43, 0x19, 0x60, 0x29, 0x68, 0x10, 0x23, 0x40, + 0x43, 0x18, 0x60, 0x10, 0x20, 0x00, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x20, 0xbd, + 0xe7, 0xf9, 0xe7, 0xf8, 0x64, 0x00, 0x10, 0x00, + 0x64, 0x00, 0x08, 0x00, 0x64, 0x00, 0x08, 0x08, + 0xb5, 0xf3, 0xb0, 0x93, 0x98, 0x13, 0x69, 0x00, + 0x90, 0x01, 0x98, 0x01, 0x78, 0x40, 0x23, 0x80, + 0x40, 0x18, 0xd0, 0x05, 0x20, 0xbe, 0xb0, 0x13, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x98, 0x01, 0x78, 0x80, 0x90, 0x08, 0x98, 0x08, + 0x23, 0x40, 0x40, 0x18, 0xd0, 0x73, 0x98, 0x08, + 0x23, 0x20, 0x40, 0x18, 0xd0, 0x6f, 0x98, 0x01, + 0x6b, 0x07, 0x98, 0x01, 0x79, 0xc0, 0x00, 0x80, + 0x49, 0x76, 0x58, 0x08, 0x90, 0x00, 0x98, 0x00, + 0x68, 0xc0, 0x1c, 0x06, 0xd1, 0x02, 0x20, 0xb6, + 0xb0, 0x13, 0xe7, 0xe1, 0x78, 0xb0, 0x07, 0xc0, + 0x0f, 0xc0, 0xd0, 0x02, 0x20, 0xb6, 0xb0, 0x13, + 0xe7, 0xda, 0xa9, 0x11, 0x1c, 0x30, 0xf0, 0x00, + 0xf9, 0x2b, 0x90, 0x02, 0x98, 0x11, 0x28, 0x00, + 0xd1, 0x02, 0x98, 0x02, 0xb0, 0x13, 0xe7, 0xcf, + 0x98, 0x11, 0x90, 0x0e, 0x20, 0x01, 0x90, 0x0b, + 0x98, 0x13, 0x88, 0x40, 0x90, 0x0d, 0x98, 0x13, + 0x68, 0x40, 0x90, 0x06, 0x98, 0x13, 0x68, 0x81, + 0x91, 0x10, 0x99, 0x10, 0x1d, 0xc8, 0x30, 0xb9, + 0x90, 0x05, 0x98, 0x05, 0x99, 0x06, 0x1a, 0x40, + 0x04, 0x04, 0x0c, 0x24, 0x99, 0x14, 0x79, 0x88, + 0x90, 0x03, 0x98, 0x03, 0x06, 0xc0, 0x0e, 0xc0, + 0x90, 0x0a, 0x98, 0x0a, 0x49, 0x5a, 0x40, 0xc1, + 0x91, 0x0a, 0x98, 0x03, 0x09, 0x40, 0x06, 0x00, + 0x0e, 0x00, 0x90, 0x09, 0x98, 0x09, 0x00, 0x80, + 0x19, 0xc0, 0x6b, 0x80, 0x99, 0x0a, 0x40, 0x08, + 0xd0, 0x02, 0x20, 0xb1, 0xb0, 0x13, 0xe7, 0x9f, + 0x20, 0xb8, 0x90, 0x0c, 0x98, 0x11, 0x30, 0x08, + 0x90, 0x04, 0x20, 0x00, 0x90, 0x07, 0x98, 0x07, + 0x28, 0x00, 0xd0, 0x10, 0x99, 0x10, 0x68, 0x09, + 0x91, 0x10, 0x99, 0x10, 0x1d, 0x08, 0x90, 0x12, + 0x98, 0x12, 0x78, 0x80, 0x99, 0x10, 0x18, 0x40, + 0x90, 0x06, 0x98, 0x12, 0x78, 0x81, 0x20, 0xc0, + 0x1a, 0x40, 0x04, 0x04, 0x0c, 0x24, 0x98, 0x0d, + 0x42, 0x84, 0xdb, 0x05, 0xe0, 0x00, 0xe0, 0x7c, + 0x9c, 0x0d, 0x20, 0x00, 0x90, 0x0d, 0xe0, 0x06, + 0x98, 0x0d, 0x1b, 0x00, 0x04, 0x00, 0x0c, 0x00, + 0x90, 0x0d, 0x20, 0x01, 0x90, 0x07, 0x98, 0x0c, + 0x42, 0xa0, 0xda, 0x2e, 0x25, 0x00, 0x98, 0x0c, + 0x42, 0x85, 0xdb, 0x04, 0xe0, 0x0c, 0x1c, 0x68, + 0x06, 0x05, 0x0e, 0x2d, 0xe7, 0xf7, 0x98, 0x06, + 0x78, 0x01, 0x30, 0x01, 0x90, 0x06, 0x98, 0x04, + 0x70, 0x01, 0x30, 0x01, 0x90, 0x04, 0xe7, 0xf2, + 0x98, 0x0c, 0x1a, 0x20, 0x04, 0x04, 0x0c, 0x24, + 0xa9, 0x11, 0x1c, 0x30, 0xf0, 0x00, 0xf8, 0xac, + 0x90, 0x02, 0x98, 0x11, 0x28, 0x00, 0xd1, 0x08, + 0x98, 0x0e, 0x60, 0xb0, 0x68, 0x70, 0x99, 0x0b, + 0x18, 0x40, 0x60, 0x70, 0x98, 0x02, 0xb0, 0x13, + 0xe7, 0x4a, 0x98, 0x0b, 0x30, 0x01, 0x90, 0x0b, + 0x20, 0xb8, 0x90, 0x0c, 0x98, 0x11, 0x30, 0x08, + 0x90, 0x04, 0x25, 0x00, 0x42, 0xa5, 0xdb, 0x04, + 0xe0, 0x0c, 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, + 0xe7, 0xf8, 0x98, 0x06, 0x78, 0x01, 0x30, 0x01, + 0x90, 0x06, 0x98, 0x04, 0x70, 0x01, 0x30, 0x01, + 0x90, 0x04, 0xe7, 0xf2, 0x98, 0x0c, 0x1b, 0x00, + 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0c, 0x98, 0x0d, + 0x28, 0x00, 0xd1, 0x90, 0x6b, 0x39, 0x91, 0x0f, + 0x6a, 0xf8, 0x28, 0x00, 0xd1, 0x02, 0x98, 0x0e, + 0x62, 0xf8, 0xe0, 0x05, 0x98, 0x0e, 0x99, 0x0f, + 0x60, 0x08, 0x98, 0x0e, 0x6d, 0xb9, 0x60, 0x08, + 0x98, 0x09, 0x00, 0x80, 0x19, 0xc0, 0x6b, 0x80, + 0x99, 0x0a, 0x43, 0x01, 0x98, 0x09, 0x00, 0x80, + 0x19, 0xc0, 0x63, 0x81, 0x6b, 0x78, 0x99, 0x0b, + 0x18, 0x40, 0x63, 0x78, 0x20, 0x00, 0x99, 0x11, + 0x60, 0x08, 0x98, 0x11, 0x63, 0x38, 0x98, 0x0e, + 0x30, 0x04, 0x65, 0xb8, 0x98, 0x02, 0xb0, 0x13, + 0xe7, 0x02, 0x20, 0xb1, 0xb0, 0x13, 0xe6, 0xff, + 0xb0, 0x13, 0xe6, 0xfd, 0x2e, 0x08, 0x5e, 0x64, + 0x80, 0x00, 0x00, 0x00, 0xb4, 0xf0, 0x1c, 0x01, + 0x78, 0x88, 0x23, 0x20, 0x40, 0x18, 0xd0, 0x42, + 0x79, 0xc8, 0x00, 0x80, 0x4b, 0x21, 0x58, 0x1d, + 0x6b, 0x0a, 0x68, 0xef, 0x68, 0x10, 0x28, 0x00, + 0xd0, 0x17, 0x68, 0xfe, 0x68, 0x10, 0x60, 0x30, + 0x68, 0x50, 0x60, 0xf8, 0x68, 0x78, 0x68, 0x93, + 0x18, 0xc0, 0x60, 0x78, 0x20, 0x00, 0x60, 0x10, + 0x20, 0x00, 0x60, 0x50, 0x20, 0x00, 0x60, 0x90, + 0x68, 0x78, 0x78, 0x3b, 0x42, 0x98, 0xd9, 0x04, + 0x78, 0xb8, 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, + 0x70, 0xb8, 0x6a, 0xd0, 0x60, 0x10, 0x6b, 0x10, + 0x60, 0x50, 0x6b, 0x50, 0x60, 0x90, 0x24, 0x00, + 0x2c, 0x08, 0xdb, 0x04, 0xe0, 0x0e, 0x1c, 0x60, + 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, 0x00, 0xa0, + 0x18, 0x80, 0x6b, 0x80, 0x00, 0xa3, 0x18, 0x9b, + 0x60, 0xd8, 0x23, 0x00, 0x00, 0xa0, 0x18, 0x80, + 0x63, 0x83, 0xe7, 0xf0, 0x20, 0x00, 0x62, 0xd0, + 0x20, 0x00, 0x63, 0x10, 0x20, 0x00, 0x63, 0x50, + 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, 0x20, 0xb1, + 0xe7, 0xfb, 0xe7, 0xfa, 0x2e, 0x08, 0x5e, 0x64, + 0xb4, 0x90, 0x1c, 0x02, 0x1c, 0x0f, 0x78, 0x14, + 0x68, 0x90, 0x1c, 0x01, 0xd1, 0x08, 0x20, 0x00, + 0x60, 0x38, 0x78, 0x90, 0x23, 0x01, 0x43, 0x18, + 0x70, 0x90, 0x20, 0xb7, 0xbc, 0x90, 0x47, 0x70, + 0x68, 0x08, 0x60, 0x90, 0x20, 0x00, 0x60, 0x48, + 0x60, 0x39, 0x68, 0x50, 0x38, 0x01, 0x60, 0x50, + 0x68, 0x50, 0x42, 0xa0, 0xd1, 0x02, 0x20, 0xbf, + 0xe7, 0xf0, 0xe0, 0x01, 0x20, 0x00, 0xe7, 0xed, + 0xe7, 0xec, 0x00, 0x00, 0x1c, 0x01, 0x22, 0x00, + 0x6a, 0x50, 0x68, 0x02, 0x60, 0x0a, 0x4a, 0x05, + 0x6f, 0xd2, 0x60, 0x8a, 0x4a, 0x04, 0x68, 0x12, + 0x60, 0x4a, 0x22, 0x1d, 0x02, 0x92, 0x68, 0x12, + 0x60, 0xca, 0x47, 0x70, 0xcc, 0x00, 0x0f, 0x80, + 0x2e, 0x08, 0x1f, 0xac, 0x1c, 0x01, 0x48, 0x02, + 0x60, 0x01, 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, + 0x66, 0x00, 0x01, 0x00, 0x1c, 0x01, 0x20, 0x33, + 0x06, 0x40, 0x62, 0x01, 0x20, 0x00, 0x47, 0x70, + 0xe7, 0xfd, 0x1c, 0x01, 0x20, 0x33, 0x06, 0x40, + 0x6a, 0xc0, 0x23, 0x7f, 0x03, 0x9b, 0x40, 0x18, + 0x03, 0x8a, 0x43, 0x10, 0x22, 0x33, 0x06, 0x52, + 0x62, 0xd0, 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, + 0x1c, 0x01, 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, + 0x23, 0x03, 0x03, 0x1b, 0x40, 0x18, 0x43, 0x08, + 0x22, 0x33, 0x06, 0x52, 0x62, 0xd0, 0x20, 0x00, + 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x06, 0x0a, + 0x0e, 0x12, 0x2a, 0x00, 0xd0, 0x06, 0x20, 0x33, + 0x06, 0x40, 0x6a, 0xc0, 0x23, 0x01, 0x05, 0x5b, + 0x43, 0x18, 0xe0, 0x04, 0x20, 0x33, 0x06, 0x40, + 0x6a, 0xc0, 0x4b, 0x04, 0x40, 0x18, 0x23, 0x33, + 0x06, 0x5b, 0x62, 0xd8, 0x20, 0x00, 0x47, 0x70, + 0xe7, 0xfd, 0x00, 0x00, 0xff, 0xdf, 0xff, 0xff, + 0x48, 0x04, 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, + 0xd0, 0x01, 0x20, 0xff, 0x47, 0x70, 0x20, 0x00, + 0xe7, 0xfc, 0xe7, 0xfb, 0x66, 0x00, 0x00, 0x80, + 0xb4, 0x80, 0x1c, 0x01, 0x06, 0x0f, 0x0e, 0x3f, + 0x4a, 0x08, 0x2f, 0x00, 0xd0, 0x03, 0x68, 0x10, + 0x23, 0x01, 0x43, 0x18, 0xe0, 0x02, 0x68, 0x10, + 0x08, 0x40, 0x00, 0x40, 0x68, 0x13, 0x43, 0x18, + 0x60, 0x10, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, + 0xe7, 0xfc, 0x00, 0x00, 0x66, 0x00, 0x00, 0x98, + 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x4b, 0x06, + 0x40, 0x1a, 0x4b, 0x06, 0x40, 0x1f, 0x0b, 0x10, + 0x02, 0x39, 0x43, 0x08, 0x49, 0x04, 0x61, 0xc8, + 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, + 0x01, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xf0, 0x00, + 0x66, 0x00, 0x00, 0x80, 0x48, 0x01, 0x69, 0xc0, + 0x47, 0x70, 0xe7, 0xfd, 0x66, 0x00, 0x00, 0x80, + 0x1c, 0x01, 0x48, 0x07, 0x68, 0x02, 0x4b, 0x07, + 0x40, 0x1a, 0x60, 0x02, 0x23, 0x01, 0x05, 0x9b, + 0x42, 0x99, 0xd1, 0x03, 0x48, 0x02, 0x68, 0x02, + 0x43, 0x0a, 0x60, 0x02, 0x47, 0x70, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x2c, 0xff, 0xbf, 0xff, 0xff, + 0x1c, 0x01, 0x20, 0x33, 0x06, 0x40, 0x67, 0x41, + 0x47, 0x70, 0x1c, 0x01, 0x20, 0x33, 0x06, 0x40, + 0x67, 0x81, 0x47, 0x70, 0xb5, 0x90, 0x4c, 0x21, + 0x20, 0x01, 0x60, 0x20, 0xf0, 0x11, 0xfb, 0x48, + 0x48, 0x1f, 0x69, 0x84, 0x27, 0x00, 0x2f, 0x04, + 0xd3, 0x04, 0xe0, 0x06, 0x1c, 0x78, 0x06, 0x07, + 0x0e, 0x3f, 0xe7, 0xf8, 0x21, 0x00, 0xc4, 0x02, + 0xe7, 0xf8, 0x20, 0x00, 0x49, 0x18, 0x69, 0x49, + 0x60, 0x08, 0x20, 0x00, 0x49, 0x16, 0x69, 0x49, + 0x60, 0x48, 0x20, 0x00, 0x49, 0x14, 0x69, 0x49, + 0x60, 0x88, 0x20, 0x00, 0x49, 0x12, 0x69, 0x49, + 0x60, 0xc8, 0x20, 0x00, 0x49, 0x10, 0x69, 0x49, + 0x61, 0x08, 0x20, 0x00, 0x49, 0x0e, 0x69, 0x49, + 0x61, 0x48, 0x20, 0x00, 0x49, 0x0c, 0x69, 0x49, + 0x61, 0x88, 0x20, 0x00, 0x49, 0x0a, 0x69, 0x49, + 0x61, 0xc8, 0x20, 0x00, 0x49, 0x08, 0x69, 0x49, + 0x62, 0x08, 0x20, 0x00, 0x49, 0x06, 0x69, 0x49, + 0x62, 0x48, 0x20, 0x18, 0x49, 0x04, 0x69, 0x49, + 0x62, 0x88, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0xe7, 0xfb, 0x70, 0x00, 0x00, 0x38, + 0x2e, 0x08, 0x1f, 0xb0, 0xb5, 0xff, 0x1c, 0x0f, + 0xb0, 0x81, 0x9c, 0x01, 0x69, 0x20, 0x28, 0x08, + 0xd1, 0x01, 0x08, 0x7f, 0x00, 0x7f, 0x6b, 0xa0, + 0x9a, 0x03, 0x43, 0x50, 0x19, 0xc6, 0x69, 0x20, + 0x00, 0x80, 0x49, 0x34, 0x58, 0x08, 0x23, 0x04, + 0x40, 0x18, 0xd0, 0x00, 0x08, 0x76, 0x69, 0x20, + 0x00, 0x80, 0x49, 0x31, 0x58, 0x08, 0x43, 0x70, + 0x90, 0x00, 0x69, 0xa0, 0x99, 0x00, 0x09, 0x49, + 0x18, 0x45, 0x6b, 0xe0, 0x28, 0x00, 0xd1, 0x02, + 0x03, 0x28, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x28, + 0x0a, 0x00, 0x1c, 0x05, 0xf0, 0x11, 0xfa, 0xe6, + 0xf0, 0x11, 0xfa, 0xc2, 0x48, 0x27, 0x69, 0x80, + 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x49, 0x25, + 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, 0x48, 0x23, + 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, + 0x49, 0x20, 0x69, 0x89, 0x60, 0x08, 0x6b, 0xe0, + 0x49, 0x1e, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x1e, + 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, + 0x49, 0x1a, 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, + 0x0f, 0xc0, 0x1c, 0x21, 0x1c, 0x20, 0xf0, 0x00, + 0xfe, 0x51, 0x48, 0x16, 0x69, 0xc0, 0x68, 0x00, + 0x4b, 0x16, 0x40, 0x18, 0x02, 0x29, 0x0a, 0x09, + 0x00, 0x89, 0x43, 0x08, 0x49, 0x11, 0x69, 0xc9, + 0x60, 0x08, 0x01, 0x80, 0x48, 0x0f, 0x69, 0xc0, + 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, 0x99, 0x00, + 0x06, 0xc9, 0x43, 0x08, 0x49, 0x0b, 0x69, 0xc9, + 0x60, 0x08, 0x99, 0x04, 0x1c, 0x20, 0x22, 0x00, + 0xf0, 0x00, 0xfe, 0xbc, 0xf0, 0x00, 0xff, 0x9d, + 0xf0, 0x11, 0xfa, 0xb8, 0x20, 0x00, 0xb0, 0x01, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb0, 0x01, 0xe7, 0xf9, 0x2e, 0x03, 0x32, 0xa4, + 0x2e, 0x03, 0x32, 0xf4, 0x2e, 0x08, 0x1f, 0xb0, + 0xff, 0xff, 0xdf, 0xff, 0xfc, 0x00, 0x00, 0x03, + 0xb5, 0xff, 0x1c, 0x0f, 0xb0, 0x81, 0x9c, 0x01, + 0x69, 0x20, 0x28, 0x08, 0xd1, 0x01, 0x08, 0x7f, + 0x00, 0x7f, 0x6b, 0xa0, 0x9a, 0x03, 0x43, 0x50, + 0x19, 0xc6, 0x69, 0x20, 0x00, 0x80, 0x49, 0x37, + 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, + 0x08, 0x76, 0x69, 0x20, 0x00, 0x80, 0x49, 0x34, + 0x58, 0x08, 0x43, 0x70, 0x90, 0x00, 0x69, 0xa0, + 0x99, 0x00, 0x09, 0x49, 0x18, 0x45, 0x6b, 0xe0, + 0x28, 0x00, 0xd1, 0x02, 0x03, 0x28, 0x0b, 0x00, + 0xe0, 0x01, 0x02, 0x28, 0x0a, 0x00, 0x1c, 0x05, + 0xf0, 0x11, 0xfa, 0x64, 0xf0, 0x11, 0xfa, 0x40, + 0x48, 0x2a, 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, + 0x00, 0xc0, 0x23, 0x01, 0x43, 0x18, 0x49, 0x27, + 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, 0x6b, 0xe0, + 0x49, 0x24, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x24, + 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, + 0x49, 0x20, 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, + 0x0f, 0xc0, 0x48, 0x1e, 0x69, 0x80, 0x68, 0x00, + 0x01, 0x40, 0x09, 0x40, 0x99, 0x00, 0x06, 0xc9, + 0x43, 0x01, 0x48, 0x1a, 0x69, 0x80, 0x60, 0x01, + 0x1c, 0x21, 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0xca, + 0x48, 0x16, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x17, + 0x40, 0x18, 0x02, 0x29, 0x0a, 0x09, 0x00, 0x89, + 0x43, 0x08, 0x49, 0x12, 0x69, 0xc9, 0x60, 0x08, + 0x01, 0x80, 0x48, 0x10, 0x69, 0xc0, 0x68, 0x00, + 0x01, 0x40, 0x09, 0x40, 0x49, 0x0d, 0x69, 0xc9, + 0x60, 0x08, 0xf0, 0x00, 0xff, 0x1e, 0xf0, 0x11, + 0xfa, 0x17, 0x48, 0x0a, 0x6b, 0x81, 0x1c, 0x20, + 0xf0, 0x00, 0xfe, 0xf0, 0x9b, 0x04, 0x60, 0x18, + 0xf0, 0x11, 0xfa, 0x30, 0x20, 0x00, 0xb0, 0x01, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb0, 0x01, 0xe7, 0xf9, 0x2e, 0x03, 0x32, 0xa4, + 0x2e, 0x03, 0x32, 0xf4, 0x2e, 0x08, 0x1f, 0xb0, + 0xff, 0xff, 0xdf, 0xff, 0xfc, 0x00, 0x00, 0x03, + 0xb5, 0xff, 0x1c, 0x0c, 0x1c, 0x1f, 0xb0, 0x83, + 0x9d, 0x03, 0x6b, 0x28, 0x6a, 0xa9, 0x1a, 0x40, + 0x30, 0x01, 0x90, 0x00, 0x19, 0xe0, 0x99, 0x00, + 0x42, 0x88, 0xd9, 0x01, 0x98, 0x00, 0x1b, 0x07, + 0x69, 0x28, 0x28, 0x08, 0xd1, 0x02, 0x08, 0x7f, + 0x08, 0x64, 0x00, 0x64, 0x6b, 0xa8, 0x9a, 0x05, + 0x43, 0x50, 0x19, 0x01, 0x91, 0x01, 0x69, 0x28, + 0x00, 0x80, 0x49, 0x38, 0x58, 0x08, 0x23, 0x04, + 0x40, 0x18, 0xd0, 0x02, 0x99, 0x01, 0x08, 0x49, + 0x91, 0x01, 0x69, 0x28, 0x00, 0x80, 0x49, 0x34, + 0x58, 0x08, 0x99, 0x01, 0x43, 0x48, 0x90, 0x02, + 0x69, 0xa8, 0x99, 0x02, 0x09, 0x49, 0x18, 0x46, + 0x6b, 0xe8, 0x28, 0x00, 0xd1, 0x02, 0x03, 0x30, + 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x30, 0x0a, 0x00, + 0x1c, 0x06, 0xf0, 0x11, 0xf9, 0xcb, 0xf0, 0x11, + 0xf9, 0xa7, 0x48, 0x2a, 0x69, 0x80, 0x68, 0x00, + 0x01, 0x40, 0x09, 0x40, 0x49, 0x27, 0x69, 0x89, + 0x60, 0x08, 0x48, 0x26, 0x69, 0x80, 0x68, 0x00, + 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x02, 0x43, 0x18, + 0x49, 0x22, 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, + 0x6b, 0xe8, 0x49, 0x20, 0x69, 0x89, 0x68, 0x09, + 0x4b, 0x1f, 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x80, + 0x43, 0x08, 0x49, 0x1c, 0x69, 0x89, 0x60, 0x08, + 0x04, 0x80, 0x0f, 0xc0, 0x1c, 0x29, 0x1c, 0x28, + 0xf0, 0x00, 0xfd, 0x34, 0x48, 0x17, 0x69, 0xc0, + 0x68, 0x00, 0x4b, 0x18, 0x40, 0x18, 0x02, 0x31, + 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, 0x49, 0x13, + 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, 0x48, 0x11, + 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, + 0x99, 0x02, 0x06, 0xc9, 0x43, 0x08, 0x49, 0x0d, + 0x69, 0xc9, 0x60, 0x08, 0x99, 0x0c, 0x1c, 0x28, + 0x22, 0x02, 0xf0, 0x00, 0xfd, 0x9f, 0x48, 0x09, + 0x69, 0x40, 0x62, 0x07, 0xf0, 0x00, 0xfe, 0x7d, + 0xf0, 0x11, 0xf9, 0x98, 0x20, 0x00, 0xb0, 0x03, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb0, 0x03, 0xe7, 0xf9, 0x2e, 0x03, 0x32, 0xa4, + 0x2e, 0x03, 0x32, 0xf4, 0x2e, 0x08, 0x1f, 0xb0, + 0xff, 0xff, 0xdf, 0xff, 0xfc, 0x00, 0x00, 0x03, + 0xb5, 0xff, 0xb0, 0x81, 0x9f, 0x01, 0x6b, 0x78, + 0x6a, 0xf9, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, + 0x9a, 0x03, 0x9b, 0x04, 0x18, 0xd0, 0x99, 0x00, + 0x42, 0x88, 0xd9, 0x03, 0x98, 0x00, 0x9a, 0x03, + 0x1a, 0x83, 0x93, 0x04, 0x69, 0x38, 0x28, 0x08, + 0xd1, 0x03, 0x99, 0x02, 0x08, 0x49, 0x00, 0x49, + 0x91, 0x02, 0x6b, 0xb8, 0x9a, 0x03, 0x43, 0x50, + 0x99, 0x02, 0x18, 0x45, 0x69, 0x38, 0x00, 0x80, + 0x49, 0x3c, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, + 0xd0, 0x00, 0x08, 0x6d, 0x69, 0x38, 0x00, 0x80, + 0x49, 0x39, 0x58, 0x08, 0x1c, 0x06, 0x43, 0x6e, + 0x69, 0xb8, 0x09, 0x71, 0x18, 0x44, 0x6b, 0xf8, + 0x28, 0x00, 0xd1, 0x02, 0x03, 0x20, 0x0b, 0x00, + 0xe0, 0x01, 0x02, 0x20, 0x0a, 0x00, 0x1c, 0x04, + 0xf0, 0x11, 0xf9, 0x34, 0xf0, 0x11, 0xf9, 0x10, + 0x48, 0x30, 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, + 0x09, 0x40, 0x49, 0x2e, 0x69, 0x89, 0x60, 0x08, + 0x48, 0x2c, 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, + 0x00, 0xc0, 0x23, 0x03, 0x43, 0x18, 0x49, 0x29, + 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, 0x6b, 0xf8, + 0x49, 0x26, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x26, + 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, + 0x49, 0x22, 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, + 0x0f, 0xc0, 0x1c, 0x39, 0x1c, 0x38, 0xf0, 0x00, + 0xfc, 0x9d, 0x99, 0x0a, 0x1c, 0x38, 0x22, 0x03, + 0xf0, 0x00, 0xfd, 0x20, 0x69, 0xf8, 0x49, 0x1b, + 0x69, 0x49, 0x61, 0x08, 0x48, 0x19, 0x69, 0xc0, + 0x68, 0x00, 0x4b, 0x1a, 0x40, 0x18, 0x02, 0x21, + 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, 0x49, 0x15, + 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, 0x48, 0x13, + 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, + 0x06, 0xf1, 0x43, 0x08, 0x49, 0x0f, 0x69, 0xc9, + 0x60, 0x08, 0x48, 0x0e, 0x69, 0x40, 0x61, 0x84, + 0x06, 0xf0, 0x0e, 0xc0, 0x49, 0x0b, 0x69, 0x49, + 0x61, 0x48, 0x9b, 0x04, 0x48, 0x09, 0x69, 0x40, + 0x62, 0x43, 0xf0, 0x00, 0xfd, 0xda, 0xf0, 0x11, + 0xf8, 0xf5, 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, + 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x03, 0x32, 0xa4, + 0x2e, 0x03, 0x32, 0xf4, 0x2e, 0x08, 0x1f, 0xb0, + 0xff, 0xff, 0xdf, 0xff, 0xfc, 0x00, 0x00, 0x03, + 0xb5, 0xf3, 0xb0, 0x86, 0x9f, 0x06, 0x99, 0x07, + 0x68, 0x8c, 0x99, 0x07, 0x68, 0xc8, 0x90, 0x03, + 0x99, 0x07, 0x68, 0x0d, 0x99, 0x07, 0x68, 0x49, + 0x91, 0x02, 0x6b, 0x78, 0x6a, 0xf9, 0x1a, 0x40, + 0x30, 0x01, 0x90, 0x01, 0x6b, 0x38, 0x6a, 0xb9, + 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, 0x99, 0x02, + 0x98, 0x03, 0x18, 0x08, 0x99, 0x01, 0x42, 0x88, + 0xd9, 0x03, 0x98, 0x01, 0x99, 0x02, 0x1a, 0x40, + 0x90, 0x03, 0x19, 0x28, 0x99, 0x00, 0x42, 0x88, + 0xd9, 0x01, 0x98, 0x00, 0x1b, 0x44, 0x69, 0x38, + 0x28, 0x08, 0xd1, 0x02, 0x08, 0x64, 0x08, 0x6d, + 0x00, 0x6d, 0x6b, 0xb8, 0x99, 0x02, 0x43, 0x48, + 0x19, 0x41, 0x91, 0x04, 0x69, 0x38, 0x00, 0x80, + 0x49, 0x41, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, + 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, + 0x69, 0x38, 0x00, 0x80, 0x49, 0x3d, 0x58, 0x08, + 0x99, 0x04, 0x43, 0x48, 0x90, 0x05, 0x69, 0xb8, + 0x99, 0x05, 0x09, 0x49, 0x18, 0x46, 0x6b, 0xf8, + 0x28, 0x00, 0xd1, 0x02, 0x03, 0x30, 0x0b, 0x00, + 0xe0, 0x01, 0x02, 0x30, 0x0a, 0x00, 0x1c, 0x06, + 0xf0, 0x11, 0xf8, 0x78, 0xf0, 0x11, 0xf8, 0x54, + 0x48, 0x33, 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, + 0x09, 0x40, 0x49, 0x31, 0x69, 0x89, 0x60, 0x08, + 0x48, 0x2f, 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, + 0x00, 0xc0, 0x23, 0x04, 0x43, 0x18, 0x49, 0x2c, + 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, 0x48, 0x2a, + 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, + 0x99, 0x05, 0x06, 0xc9, 0x43, 0x08, 0x49, 0x26, + 0x69, 0xc9, 0x60, 0x08, 0x48, 0x24, 0x69, 0xc0, + 0x68, 0x00, 0x4b, 0x24, 0x40, 0x18, 0x02, 0x31, + 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, 0x49, 0x20, + 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, 0x1c, 0x39, + 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0xd7, 0x6b, 0xf8, + 0x49, 0x1b, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x1c, + 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, + 0x49, 0x17, 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, + 0x0f, 0xc0, 0x99, 0x07, 0x69, 0x09, 0x1c, 0x38, + 0x22, 0x04, 0xf0, 0x00, 0xfc, 0x4b, 0x69, 0xf8, + 0x49, 0x11, 0x69, 0x49, 0x61, 0x08, 0x98, 0x05, + 0x06, 0xc0, 0x0e, 0xc0, 0x49, 0x0e, 0x69, 0x49, + 0x61, 0x48, 0x48, 0x0d, 0x69, 0x40, 0x61, 0x86, + 0x48, 0x0b, 0x69, 0x40, 0x62, 0x04, 0x98, 0x03, + 0x49, 0x09, 0x69, 0x49, 0x62, 0x48, 0xf0, 0x00, + 0xfd, 0x18, 0xf0, 0x11, 0xf8, 0x33, 0x20, 0x00, + 0xb0, 0x06, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb0, 0x06, 0xe7, 0xf9, 0x00, 0x00, + 0x2e, 0x03, 0x32, 0xa4, 0x2e, 0x03, 0x32, 0xf4, + 0x2e, 0x08, 0x1f, 0xb0, 0xfc, 0x00, 0x00, 0x03, + 0xff, 0xff, 0xdf, 0xff, 0xb5, 0xff, 0x9d, 0x09, + 0xb0, 0x81, 0x98, 0x0b, 0x06, 0x02, 0x0e, 0x12, + 0x92, 0x00, 0xb0, 0x93, 0x98, 0x14, 0x90, 0x12, + 0x99, 0x15, 0x91, 0x11, 0xaf, 0x0c, 0x1c, 0x38, + 0x9a, 0x16, 0xca, 0x5e, 0xc0, 0x5e, 0x68, 0x39, + 0x91, 0x04, 0x68, 0x79, 0x91, 0x03, 0x98, 0x12, + 0x99, 0x11, 0x42, 0x88, 0xd1, 0x73, 0x99, 0x03, + 0x42, 0x8d, 0xd9, 0x71, 0x68, 0xb8, 0x90, 0x01, + 0x68, 0xf8, 0x90, 0x02, 0x99, 0x11, 0x6b, 0x48, + 0x6a, 0xc9, 0x1a, 0x40, 0x1c, 0x44, 0x99, 0x11, + 0x6b, 0x08, 0x6a, 0x89, 0x1a, 0x40, 0x30, 0x01, + 0x90, 0x00, 0x98, 0x02, 0x18, 0x28, 0x42, 0xa0, + 0xd9, 0x01, 0x1b, 0x61, 0x91, 0x02, 0x9b, 0x17, + 0x98, 0x01, 0x18, 0x18, 0x99, 0x00, 0x42, 0x88, + 0xd9, 0x03, 0x98, 0x00, 0x9b, 0x17, 0x1a, 0xc0, + 0x90, 0x01, 0x98, 0x01, 0x60, 0xb8, 0x98, 0x02, + 0x60, 0xf8, 0x98, 0x12, 0x69, 0xc0, 0x90, 0x0a, + 0x98, 0x12, 0x6b, 0x80, 0x99, 0x03, 0x43, 0x48, + 0x99, 0x04, 0x18, 0x41, 0x91, 0x05, 0x98, 0x12, + 0x69, 0x00, 0x00, 0x80, 0x49, 0x48, 0x58, 0x08, + 0x99, 0x05, 0x43, 0x48, 0x90, 0x0b, 0x98, 0x12, + 0x69, 0x80, 0x99, 0x0b, 0x09, 0x49, 0x18, 0x41, + 0x91, 0x07, 0x98, 0x0a, 0x99, 0x02, 0x43, 0x48, + 0x90, 0x0b, 0x98, 0x0b, 0x09, 0x40, 0x99, 0x07, + 0x18, 0x40, 0x90, 0x06, 0x98, 0x06, 0x0b, 0xc0, + 0x99, 0x07, 0x0b, 0xc9, 0x1a, 0x40, 0x90, 0x09, + 0x98, 0x09, 0x28, 0x00, 0xd0, 0x56, 0x9e, 0x02, + 0x98, 0x06, 0x04, 0x40, 0x0c, 0x40, 0x01, 0x41, + 0x91, 0x08, 0x99, 0x08, 0x98, 0x0a, 0xf0, 0x04, + 0xf9, 0x17, 0x1c, 0x04, 0x2c, 0x00, 0xd1, 0x00, + 0x34, 0x01, 0x99, 0x03, 0x98, 0x02, 0x18, 0x08, + 0x1b, 0x00, 0x60, 0x78, 0x60, 0xfc, 0x98, 0x02, + 0x18, 0x28, 0x1b, 0x05, 0x9a, 0x13, 0x1c, 0x29, + 0xb4, 0x06, 0x9b, 0x19, 0x1c, 0x3a, 0x99, 0x17, + 0x98, 0x16, 0xf0, 0x00, 0xf8, 0x57, 0xb0, 0x02, + 0x1b, 0x36, 0x98, 0x09, 0xe0, 0x01, 0xe0, 0x3c, + 0xe0, 0x3b, 0x38, 0x01, 0x90, 0x09, 0x98, 0x09, + 0x28, 0x00, 0xd0, 0x1a, 0x98, 0x0a, 0x21, 0x01, + 0x03, 0x09, 0xf0, 0x04, 0xf8, 0xf1, 0x1c, 0x04, + 0x68, 0x78, 0x1b, 0x80, 0x60, 0x78, 0x60, 0xfc, + 0x68, 0xf8, 0x1a, 0x2d, 0x9a, 0x13, 0x1c, 0x29, + 0xb4, 0x06, 0x9b, 0x19, 0x1c, 0x3a, 0x99, 0x17, + 0x98, 0x16, 0xf0, 0x00, 0xf8, 0x37, 0xb0, 0x02, + 0x1b, 0x36, 0x98, 0x09, 0x38, 0x01, 0x90, 0x09, + 0xe7, 0xe1, 0x68, 0x78, 0x1b, 0x80, 0x60, 0x78, + 0x60, 0xfe, 0x68, 0xf8, 0x1a, 0x2d, 0x9a, 0x13, + 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, 0x1c, 0x3a, + 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, 0xf8, 0x22, + 0xb0, 0x02, 0xe0, 0x09, 0x9a, 0x13, 0x1c, 0x29, + 0xb4, 0x06, 0x9b, 0x19, 0x1c, 0x3a, 0x99, 0x17, + 0x98, 0x16, 0xf0, 0x00, 0xf8, 0x17, 0xb0, 0x02, + 0xe0, 0x09, 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, + 0x9b, 0x19, 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, + 0xf0, 0x00, 0xf8, 0xb8, 0xb0, 0x02, 0x20, 0x00, + 0xb0, 0x14, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb0, 0x13, 0xb0, 0x01, 0xe7, 0xf8, + 0x2e, 0x03, 0x32, 0xf4, 0xb5, 0xff, 0x9d, 0x09, + 0xb0, 0x81, 0x98, 0x0b, 0x06, 0x02, 0x0e, 0x12, + 0x92, 0x00, 0xb0, 0x92, 0x98, 0x13, 0x90, 0x11, + 0x99, 0x14, 0x91, 0x10, 0xaf, 0x0b, 0x1c, 0x38, + 0x9a, 0x15, 0xca, 0x5e, 0xc0, 0x5e, 0x68, 0x38, + 0x90, 0x03, 0x68, 0x78, 0x90, 0x02, 0x68, 0xb8, + 0x90, 0x00, 0x68, 0xf9, 0x91, 0x01, 0x98, 0x11, + 0x69, 0xc0, 0x90, 0x09, 0x99, 0x10, 0x6b, 0x88, + 0x43, 0x68, 0x9b, 0x16, 0x18, 0xc1, 0x91, 0x04, + 0x99, 0x10, 0x69, 0x08, 0x00, 0x80, 0x49, 0x42, + 0x58, 0x08, 0x99, 0x04, 0x43, 0x48, 0x90, 0x0a, + 0x99, 0x10, 0x69, 0x88, 0x99, 0x0a, 0x09, 0x49, + 0x18, 0x40, 0x90, 0x06, 0x98, 0x09, 0x99, 0x01, + 0x43, 0x48, 0x90, 0x0a, 0x98, 0x0a, 0x09, 0x40, + 0x99, 0x06, 0x18, 0x40, 0x90, 0x05, 0x98, 0x05, + 0x0b, 0xc0, 0x99, 0x06, 0x0b, 0xc9, 0x1a, 0x40, + 0x90, 0x08, 0x98, 0x08, 0x28, 0x00, 0xd0, 0x53, + 0x9e, 0x01, 0x98, 0x05, 0x04, 0x40, 0x0c, 0x40, + 0x01, 0x41, 0x91, 0x07, 0x99, 0x07, 0x98, 0x09, + 0xf0, 0x04, 0xf8, 0x5e, 0x1c, 0x04, 0x2c, 0x00, + 0xd1, 0x00, 0x34, 0x01, 0x98, 0x02, 0x99, 0x01, + 0x18, 0x40, 0x1b, 0x00, 0x60, 0x78, 0x60, 0xfc, + 0x99, 0x01, 0x18, 0x68, 0x1b, 0x05, 0x9a, 0x12, + 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, + 0x99, 0x16, 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x4a, + 0xb0, 0x02, 0x1b, 0x36, 0x98, 0x08, 0x38, 0x01, + 0x90, 0x08, 0x98, 0x08, 0x28, 0x00, 0xd0, 0x1a, + 0x98, 0x09, 0x21, 0x01, 0x03, 0x09, 0xf0, 0x04, + 0xf8, 0x3b, 0x1c, 0x04, 0x68, 0x78, 0x1b, 0x80, + 0x60, 0x78, 0x60, 0xfc, 0x68, 0xf8, 0x1a, 0x2d, + 0x9a, 0x12, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x18, + 0x1c, 0x3a, 0x99, 0x16, 0x98, 0x15, 0xf0, 0x00, + 0xf8, 0x2d, 0xb0, 0x02, 0x1b, 0x36, 0x98, 0x08, + 0x38, 0x01, 0x90, 0x08, 0xe7, 0xe1, 0x68, 0x78, + 0x1b, 0x80, 0x60, 0x78, 0x60, 0xfe, 0x68, 0xf8, + 0x1a, 0x2d, 0x9a, 0x12, 0x1c, 0x29, 0xb4, 0x06, + 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, 0x98, 0x15, + 0xf0, 0x00, 0xf8, 0x18, 0xb0, 0x02, 0xe0, 0x09, + 0x9a, 0x12, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x18, + 0x1c, 0x3a, 0x99, 0x16, 0x98, 0x15, 0xf0, 0x00, + 0xf8, 0x0d, 0xb0, 0x02, 0x20, 0x00, 0xb0, 0x13, + 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xb0, 0x12, 0xb0, 0x01, 0xe7, 0xf8, 0x00, 0x00, + 0x2e, 0x03, 0x32, 0xf4, 0xb5, 0xff, 0xb0, 0x81, + 0x98, 0x0b, 0x06, 0x02, 0x0e, 0x12, 0x92, 0x00, + 0xb0, 0x8e, 0x9f, 0x0f, 0x9c, 0x10, 0x9a, 0x11, + 0x68, 0x10, 0x90, 0x07, 0x9a, 0x11, 0x68, 0x50, + 0x90, 0x06, 0x9a, 0x11, 0x68, 0x91, 0x91, 0x08, + 0x9a, 0x11, 0x68, 0xd0, 0x90, 0x09, 0x6b, 0x60, + 0x6a, 0xe1, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x01, + 0x6b, 0x20, 0x6a, 0xa1, 0x1a, 0x40, 0x30, 0x01, + 0x90, 0x00, 0x99, 0x18, 0x98, 0x09, 0x18, 0x08, + 0x99, 0x01, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x01, + 0x99, 0x18, 0x1a, 0x41, 0x91, 0x09, 0x9b, 0x12, + 0x99, 0x08, 0x18, 0x58, 0x99, 0x00, 0x42, 0x88, + 0xd9, 0x03, 0x98, 0x00, 0x9b, 0x12, 0x1a, 0xc1, + 0x91, 0x08, 0x22, 0x00, 0x92, 0x05, 0x42, 0xa7, + 0xd1, 0x20, 0x99, 0x18, 0x98, 0x06, 0x42, 0x81, + 0xd9, 0x0c, 0x22, 0x02, 0x92, 0x05, 0x99, 0x06, + 0x98, 0x09, 0x18, 0x08, 0x1e, 0x41, 0x91, 0x06, + 0x99, 0x18, 0x98, 0x09, 0x18, 0x08, 0x1e, 0x41, + 0x91, 0x18, 0xe0, 0x0f, 0x9b, 0x12, 0x98, 0x07, + 0x42, 0x83, 0xd9, 0x0b, 0x22, 0x01, 0x92, 0x05, + 0x98, 0x07, 0x99, 0x08, 0x18, 0x40, 0x38, 0x01, + 0x90, 0x07, 0x9b, 0x12, 0x99, 0x08, 0x18, 0x58, + 0x1e, 0x43, 0x93, 0x12, 0x69, 0x38, 0x28, 0x08, + 0xd1, 0x0a, 0x99, 0x08, 0x08, 0x49, 0x91, 0x08, + 0x98, 0x07, 0x08, 0x40, 0x00, 0x40, 0x90, 0x07, + 0x9b, 0x12, 0x08, 0x5b, 0x00, 0x5b, 0x93, 0x12, + 0x69, 0x38, 0x00, 0x80, 0x49, 0xc6, 0x58, 0x08, + 0x23, 0x04, 0x40, 0x18, 0x08, 0x80, 0x90, 0x03, + 0x69, 0x20, 0x00, 0x80, 0x49, 0xc2, 0x58, 0x08, + 0x23, 0x04, 0x40, 0x18, 0x08, 0x80, 0x90, 0x02, + 0x6b, 0xb8, 0x99, 0x06, 0x43, 0x48, 0x99, 0x07, + 0x18, 0x41, 0x91, 0x04, 0x98, 0x03, 0x28, 0x00, + 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, + 0x69, 0x38, 0x00, 0x80, 0x49, 0xb9, 0x58, 0x08, + 0x99, 0x04, 0x1c, 0x06, 0x43, 0x4e, 0x6b, 0xa0, + 0x99, 0x18, 0x43, 0x48, 0x9b, 0x12, 0x18, 0xc1, + 0x91, 0x04, 0x98, 0x02, 0x28, 0x00, 0xd0, 0x02, + 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, 0x69, 0x20, + 0x00, 0x80, 0x49, 0xb0, 0x58, 0x08, 0x99, 0x04, + 0x1c, 0x05, 0x43, 0x4d, 0x9a, 0x05, 0x2a, 0x01, + 0xd1, 0x3d, 0x69, 0x38, 0x28, 0x08, 0xd0, 0x3a, + 0x69, 0x38, 0x28, 0x09, 0xd0, 0x02, 0x69, 0x38, + 0x28, 0x0a, 0xd1, 0x0a, 0x36, 0x10, 0x69, 0xb8, + 0x09, 0x71, 0x18, 0x41, 0x91, 0x0b, 0x06, 0xf0, + 0x0e, 0xc0, 0x1d, 0xc1, 0x31, 0x01, 0x91, 0x0a, + 0xe0, 0x0b, 0x69, 0xb8, 0x09, 0x71, 0x18, 0x41, + 0x91, 0x0b, 0x69, 0x38, 0x00, 0x80, 0x49, 0x9f, + 0x58, 0x08, 0x19, 0x86, 0x06, 0xf1, 0x0e, 0xc9, + 0x91, 0x0a, 0x69, 0x20, 0x28, 0x09, 0xd0, 0x02, + 0x69, 0x20, 0x28, 0x0a, 0xd1, 0x0a, 0x35, 0x10, + 0x69, 0xa0, 0x09, 0x69, 0x18, 0x41, 0x91, 0x0d, + 0x06, 0xe8, 0x0e, 0xc0, 0x1d, 0xc1, 0x31, 0x01, + 0x91, 0x0c, 0xe0, 0x0b, 0x69, 0xa0, 0x09, 0x69, + 0x18, 0x41, 0x91, 0x0d, 0x69, 0x20, 0x00, 0x80, + 0x49, 0x90, 0x58, 0x08, 0x19, 0x45, 0x06, 0xe9, + 0x0e, 0xc9, 0x91, 0x0c, 0xe0, 0x0d, 0x69, 0xb8, + 0x09, 0x71, 0x18, 0x41, 0x91, 0x0b, 0x69, 0xa0, + 0x09, 0x69, 0x18, 0x41, 0x91, 0x0d, 0x06, 0xf1, + 0x0e, 0xc9, 0x91, 0x0a, 0x06, 0xe9, 0x0e, 0xc9, + 0x91, 0x0c, 0x6b, 0xf8, 0x28, 0x00, 0xd1, 0x03, + 0x99, 0x0b, 0x03, 0x09, 0x0b, 0x09, 0xe0, 0x02, + 0x99, 0x0b, 0x02, 0x09, 0x0a, 0x09, 0x91, 0x0b, + 0x6b, 0xe0, 0x28, 0x00, 0xd1, 0x03, 0x99, 0x0d, + 0x03, 0x09, 0x0b, 0x09, 0xe0, 0x02, 0x99, 0x0d, + 0x02, 0x09, 0x0a, 0x09, 0x91, 0x0d, 0xf0, 0x10, + 0xfd, 0x79, 0xf0, 0x10, 0xfd, 0x55, 0x48, 0x7a, + 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, + 0x23, 0x05, 0x43, 0x18, 0x49, 0x76, 0x69, 0x89, + 0x60, 0x08, 0x07, 0x40, 0x1c, 0x21, 0x1c, 0x38, + 0xf0, 0x00, 0xf8, 0xf8, 0x98, 0x03, 0x28, 0x00, + 0xd0, 0x18, 0x98, 0x02, 0x28, 0x00, 0xd0, 0x15, + 0x48, 0x6f, 0x69, 0x80, 0x68, 0x00, 0x23, 0x08, + 0x43, 0xdb, 0x40, 0x18, 0x49, 0x6c, 0x69, 0x89, + 0x60, 0x08, 0x07, 0x00, 0x48, 0x6a, 0x69, 0x80, + 0x68, 0x00, 0x4b, 0x6a, 0x40, 0x18, 0x49, 0x68, + 0x69, 0x89, 0x60, 0x08, 0x05, 0xc0, 0x99, 0x08, + 0x08, 0x49, 0x91, 0x08, 0x6b, 0xf8, 0x49, 0x64, + 0x69, 0x89, 0x68, 0x09, 0x4b, 0x64, 0x40, 0x19, + 0x07, 0xc0, 0x0c, 0x40, 0x43, 0x08, 0x49, 0x60, + 0x69, 0x89, 0x60, 0x08, 0x04, 0x40, 0x0f, 0xc0, + 0x6b, 0xe0, 0x49, 0x5d, 0x69, 0x89, 0x68, 0x09, + 0x4b, 0x5e, 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x80, + 0x43, 0x08, 0x49, 0x59, 0x69, 0x89, 0x60, 0x08, + 0x04, 0x80, 0x0f, 0xc0, 0x68, 0x38, 0x28, 0x00, + 0xd0, 0x0d, 0x79, 0x38, 0x49, 0x54, 0x69, 0x89, + 0x68, 0x09, 0x4b, 0x57, 0x40, 0x19, 0x03, 0xc0, + 0x43, 0x08, 0x49, 0x51, 0x69, 0x89, 0x60, 0x08, + 0x02, 0x40, 0x0e, 0x00, 0xe0, 0x0d, 0x6a, 0x78, + 0x78, 0x00, 0x49, 0x4d, 0x69, 0x89, 0x68, 0x09, + 0x4b, 0x4f, 0x40, 0x19, 0x03, 0xc0, 0x43, 0x08, + 0x49, 0x49, 0x69, 0x89, 0x60, 0x08, 0x02, 0x40, + 0x0e, 0x00, 0x69, 0x20, 0x00, 0x80, 0x49, 0x45, + 0x58, 0x08, 0x99, 0x08, 0x43, 0x48, 0x28, 0x40, + 0xd9, 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x01, + 0x1c, 0x08, 0x49, 0x41, 0x69, 0x89, 0x68, 0x09, + 0x4b, 0x44, 0x40, 0x19, 0x07, 0xc2, 0x09, 0x52, + 0x43, 0x11, 0x4a, 0x3d, 0x69, 0x92, 0x60, 0x11, + 0x01, 0x49, 0x0f, 0xc9, 0x49, 0x3a, 0x69, 0x89, + 0x68, 0x09, 0x4b, 0x3f, 0x40, 0x19, 0x9a, 0x05, + 0x07, 0x92, 0x0f, 0x92, 0x05, 0xd2, 0x43, 0x11, + 0x4a, 0x35, 0x69, 0x92, 0x60, 0x11, 0x01, 0xc9, + 0x49, 0x33, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x39, + 0x40, 0x19, 0x9a, 0x0e, 0x07, 0xd2, 0x09, 0x92, + 0x43, 0x11, 0x4a, 0x2f, 0x69, 0x92, 0x60, 0x11, + 0x01, 0x89, 0x69, 0xf9, 0x4a, 0x2c, 0x69, 0x52, + 0x60, 0x11, 0x49, 0x2b, 0x69, 0x89, 0x68, 0x09, + 0x01, 0x49, 0x09, 0x49, 0x9a, 0x0a, 0x06, 0xd2, + 0x43, 0x11, 0x4a, 0x27, 0x69, 0x92, 0x60, 0x11, + 0x99, 0x0a, 0x4a, 0x25, 0x69, 0x52, 0x60, 0x51, + 0x99, 0x0b, 0x4a, 0x23, 0x69, 0x52, 0x60, 0x91, + 0x99, 0x0b, 0x4a, 0x21, 0x69, 0x52, 0x60, 0xd1, + 0x69, 0xe1, 0x4a, 0x1f, 0x69, 0x52, 0x61, 0x11, + 0x49, 0x1d, 0x69, 0xc9, 0x68, 0x09, 0x01, 0x49, + 0x09, 0x49, 0x9a, 0x0c, 0x06, 0xd2, 0x43, 0x11, + 0x4a, 0x19, 0x69, 0xd2, 0x60, 0x11, 0x99, 0x0c, + 0x4a, 0x17, 0x69, 0x52, 0x61, 0x51, 0x99, 0x0d, + 0x4a, 0x15, 0x69, 0x52, 0x61, 0x91, 0x99, 0x0d, + 0x4a, 0x13, 0x69, 0x52, 0x61, 0xd1, 0x99, 0x09, + 0x4a, 0x11, 0x69, 0x52, 0x62, 0x51, 0x99, 0x08, + 0x4a, 0x0f, 0x69, 0x52, 0x62, 0x11, 0x68, 0x38, + 0x28, 0x00, 0xd0, 0x05, 0x48, 0x14, 0x68, 0x01, + 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0xe0, 0x02, + 0x48, 0x11, 0x21, 0x00, 0x60, 0x01, 0xf0, 0x00, + 0xf9, 0x8c, 0xf0, 0x10, 0xfc, 0xa7, 0x20, 0x00, + 0xb0, 0x0f, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb0, 0x0e, 0xb0, 0x01, 0xe7, 0xf8, + 0x2e, 0x03, 0x32, 0xa4, 0x2e, 0x03, 0x32, 0xf4, + 0x2e, 0x08, 0x1f, 0xb0, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, + 0xff, 0x80, 0x7f, 0xff, 0xfb, 0xff, 0xff, 0xff, + 0xfe, 0x7f, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, + 0x68, 0x00, 0x00, 0x40, 0xb4, 0x80, 0x1c, 0x07, + 0x1c, 0x0a, 0x69, 0x38, 0x00, 0x80, 0x49, 0x3c, + 0x58, 0x08, 0x23, 0x18, 0x40, 0x18, 0x08, 0xc0, + 0x49, 0x3a, 0x69, 0x89, 0x68, 0x09, 0x23, 0xc0, + 0x43, 0xdb, 0x40, 0x19, 0x07, 0x80, 0x0f, 0x80, + 0x01, 0x80, 0x43, 0x08, 0x49, 0x35, 0x69, 0x89, + 0x60, 0x08, 0x06, 0x00, 0x0f, 0x80, 0x69, 0x38, + 0x00, 0x80, 0x49, 0x31, 0x58, 0x08, 0x23, 0x04, + 0x40, 0x18, 0x08, 0x80, 0x49, 0x2f, 0x69, 0x89, + 0x68, 0x09, 0x23, 0x08, 0x43, 0xdb, 0x40, 0x19, + 0x07, 0xc0, 0x0f, 0x00, 0x43, 0x08, 0x49, 0x2b, + 0x69, 0x89, 0x60, 0x08, 0x07, 0x00, 0x0f, 0xc0, + 0x69, 0x38, 0x00, 0x80, 0x49, 0x26, 0x58, 0x08, + 0x49, 0x26, 0x69, 0x89, 0x68, 0x09, 0x23, 0x30, + 0x43, 0xdb, 0x40, 0x19, 0x07, 0x80, 0x0f, 0x80, + 0x01, 0x00, 0x43, 0x08, 0x49, 0x21, 0x69, 0x89, + 0x60, 0x08, 0x06, 0x80, 0x0f, 0x80, 0x69, 0x10, + 0x00, 0x80, 0x49, 0x1d, 0x58, 0x08, 0x23, 0x18, + 0x40, 0x18, 0x08, 0xc0, 0x49, 0x1b, 0x69, 0x89, + 0x68, 0x09, 0x4b, 0x1b, 0x40, 0x19, 0x07, 0x80, + 0x0f, 0x80, 0x02, 0xc0, 0x43, 0x08, 0x49, 0x17, + 0x69, 0x89, 0x60, 0x08, 0x04, 0xc0, 0x0f, 0x80, + 0x69, 0x10, 0x00, 0x80, 0x49, 0x12, 0x58, 0x08, + 0x23, 0x04, 0x40, 0x18, 0x08, 0x80, 0x49, 0x11, + 0x69, 0x89, 0x68, 0x09, 0x4b, 0x11, 0x40, 0x19, + 0x07, 0xc0, 0x0d, 0xc0, 0x43, 0x08, 0x49, 0x0d, + 0x69, 0x89, 0x60, 0x08, 0x05, 0xc0, 0x0f, 0xc0, + 0x69, 0x10, 0x00, 0x80, 0x49, 0x08, 0x58, 0x08, + 0x49, 0x08, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x0a, + 0x40, 0x19, 0x07, 0x80, 0x0f, 0x80, 0x02, 0x40, + 0x43, 0x08, 0x49, 0x04, 0x69, 0x89, 0x60, 0x08, + 0x05, 0x40, 0x0f, 0x80, 0xbc, 0x80, 0x47, 0x70, + 0x2e, 0x03, 0x32, 0xa4, 0x2e, 0x08, 0x1f, 0xb0, + 0xff, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xf9, 0xff, 0xb4, 0xb0, 0x1c, 0x04, + 0x1c, 0x0f, 0x1c, 0x15, 0x2d, 0x00, 0xd0, 0x06, + 0x2d, 0x02, 0xd0, 0x21, 0x2d, 0x03, 0xd0, 0x02, + 0x2d, 0x04, 0xd0, 0x1d, 0xe0, 0xa3, 0x69, 0x20, + 0x28, 0x0b, 0xd2, 0x14, 0xa3, 0x01, 0x5c, 0x1b, + 0x00, 0x5b, 0x44, 0x9f, 0x05, 0x07, 0x09, 0x0b, + 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0e, 0x0e, 0x00, + 0x07, 0xff, 0xe0, 0x09, 0x07, 0xbf, 0xe0, 0x07, + 0x07, 0x3f, 0xe0, 0x05, 0x06, 0x3f, 0xe0, 0x03, + 0xe0, 0x02, 0x02, 0x3f, 0xe0, 0x00, 0xe7, 0xff, + 0x48, 0x46, 0x6a, 0x00, 0x60, 0x07, 0xe0, 0x86, + 0x69, 0x20, 0x28, 0x0b, 0xd2, 0x73, 0xa3, 0x02, + 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x06, 0x15, 0x24, 0x33, 0x06, 0x15, 0x24, 0x33, + 0x41, 0x45, 0x45, 0x00, 0x01, 0xff, 0x48, 0x3d, + 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x3c, 0x40, 0x18, + 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, + 0x49, 0x38, 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, + 0xe0, 0x69, 0x01, 0xbf, 0x48, 0x35, 0x6a, 0x40, + 0x68, 0x00, 0x4b, 0x35, 0x40, 0x18, 0x06, 0x39, + 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, 0x49, 0x31, + 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, 0xe0, 0x5a, + 0x01, 0x3f, 0x48, 0x2e, 0x6a, 0x40, 0x68, 0x00, + 0x4b, 0x2d, 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, + 0x00, 0x89, 0x43, 0x08, 0x49, 0x29, 0x6a, 0x49, + 0x60, 0x08, 0x05, 0x80, 0xe0, 0x4b, 0x48, 0x27, + 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x26, 0x40, 0x18, + 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, + 0x49, 0x22, 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, + 0xe0, 0x3d, 0x48, 0x20, 0x6a, 0x00, 0x60, 0x07, + 0xe0, 0x39, 0x48, 0x1e, 0x6a, 0x40, 0x68, 0x00, + 0x4b, 0x1d, 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, + 0x00, 0x89, 0x43, 0x08, 0x49, 0x19, 0x6a, 0x49, + 0x60, 0x08, 0x05, 0x80, 0x48, 0x17, 0x6a, 0x40, + 0x68, 0x00, 0x4b, 0x18, 0x40, 0x18, 0x21, 0xff, + 0x02, 0x09, 0x40, 0x39, 0x00, 0x89, 0x43, 0x08, + 0x49, 0x12, 0x6a, 0x49, 0x60, 0x08, 0x03, 0x80, + 0x48, 0x10, 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x12, + 0x40, 0x18, 0x21, 0xff, 0x04, 0x09, 0x40, 0x39, + 0x00, 0x89, 0x43, 0x01, 0x48, 0x0b, 0x6a, 0x40, + 0x60, 0x01, 0x01, 0x88, 0xe0, 0x00, 0xe0, 0x0d, + 0x48, 0x08, 0x6a, 0x40, 0x68, 0x00, 0x01, 0x80, + 0x09, 0x80, 0x21, 0x3f, 0x06, 0x09, 0x40, 0x39, + 0x00, 0x89, 0x43, 0x08, 0x49, 0x03, 0x6a, 0x49, + 0x60, 0x08, 0xe0, 0x00, 0xe7, 0xff, 0xbc, 0xb0, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0xb0, + 0xff, 0xff, 0xfc, 0x03, 0xff, 0xfc, 0x03, 0xff, + 0xfc, 0x03, 0xff, 0xff, 0xb4, 0x80, 0x1c, 0x07, + 0x1c, 0x0a, 0x69, 0x38, 0x28, 0x0b, 0xd2, 0x1a, + 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, + 0x05, 0x08, 0x0b, 0x0e, 0x05, 0x08, 0x0b, 0x0e, + 0x11, 0x13, 0x13, 0x00, 0x68, 0x10, 0x0f, 0xc1, + 0xe0, 0x0f, 0x68, 0x10, 0x0f, 0x81, 0xe0, 0x0c, + 0x68, 0x10, 0x0f, 0x01, 0xe0, 0x09, 0x68, 0x10, + 0x0e, 0x01, 0xe0, 0x06, 0x68, 0x11, 0xe0, 0x04, + 0x68, 0x10, 0x0a, 0x01, 0xe0, 0x01, 0x68, 0x11, + 0xe7, 0xff, 0x1c, 0x08, 0xbc, 0x80, 0x47, 0x70, + 0xe7, 0xfc, 0x48, 0x14, 0x69, 0x80, 0x68, 0x00, + 0x49, 0x12, 0x6a, 0x89, 0x60, 0x08, 0x48, 0x11, + 0x69, 0xc0, 0x68, 0x00, 0x49, 0x0f, 0x6a, 0xc9, + 0x60, 0x08, 0x48, 0x0e, 0x6a, 0x00, 0x68, 0x00, + 0x49, 0x0c, 0x6b, 0x09, 0x60, 0x08, 0x48, 0x0b, + 0x6a, 0x40, 0x68, 0x00, 0x49, 0x09, 0x6b, 0x49, + 0x60, 0x08, 0x20, 0x01, 0x49, 0x07, 0x6b, 0xc9, + 0x60, 0x08, 0x20, 0x00, 0x49, 0x06, 0x60, 0x08, + 0x20, 0x00, 0x49, 0x05, 0x60, 0x48, 0x20, 0x00, + 0x49, 0x03, 0x60, 0x88, 0x20, 0x00, 0x49, 0x02, + 0x60, 0xc8, 0x47, 0x70, 0x2e, 0x08, 0x1f, 0xb0, + 0x2e, 0x08, 0x1f, 0xb4, 0xb4, 0x90, 0x1c, 0x01, + 0x29, 0x00, 0xd1, 0x02, 0x20, 0x8d, 0xbc, 0x90, + 0x47, 0x70, 0x4c, 0x08, 0x1c, 0x0f, 0x22, 0x00, + 0x23, 0xff, 0x33, 0x01, 0x42, 0x9a, 0xd3, 0x02, + 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xf8, 0xcf, 0x08, + 0xc4, 0x08, 0xe7, 0xfa, 0x20, 0x00, 0xe7, 0xee, + 0xe7, 0xed, 0x00, 0x00, 0x68, 0x00, 0x18, 0x00, + 0xb4, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, + 0x06, 0x1a, 0x0e, 0x12, 0x1c, 0x21, 0x60, 0x0f, + 0x71, 0x0a, 0x20, 0x00, 0xbc, 0x90, 0x47, 0x70, + 0xe7, 0xfc, 0x00, 0x00, 0xb5, 0x00, 0x48, 0x1d, + 0x69, 0x00, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x19, + 0x48, 0x1a, 0x69, 0x00, 0x23, 0x02, 0x40, 0x18, + 0xd0, 0x09, 0x48, 0x18, 0x69, 0x40, 0x49, 0x18, + 0x68, 0x09, 0x60, 0x08, 0x20, 0x01, 0x49, 0x17, + 0x68, 0x09, 0x70, 0x08, 0xe0, 0x03, 0x20, 0x00, + 0x49, 0x14, 0x68, 0x09, 0x70, 0x08, 0x48, 0x14, + 0x78, 0x01, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x07, + 0xfb, 0x43, 0xe0, 0x18, 0x48, 0x11, 0x6a, 0x80, + 0x23, 0x02, 0x40, 0x18, 0xd0, 0x13, 0x48, 0x0f, + 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x04, + 0x20, 0xfe, 0x49, 0x0d, 0x68, 0x09, 0x70, 0x08, + 0xe0, 0x03, 0x20, 0x0e, 0x49, 0x0a, 0x68, 0x09, + 0x70, 0x08, 0x48, 0x0a, 0x78, 0x01, 0x20, 0x01, + 0x40, 0x88, 0xf0, 0x07, 0xfb, 0x29, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x6e, 0x00, 0x0c, 0x00, + 0x2e, 0x08, 0x7c, 0x34, 0x2e, 0x08, 0x7c, 0x38, + 0x2e, 0x08, 0x7c, 0x3c, 0x6e, 0x00, 0x0e, 0x00, + 0x2e, 0x08, 0x7c, 0x40, 0x2e, 0x08, 0x7c, 0x44, + 0xb5, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, + 0x06, 0x2e, 0x0e, 0x36, 0x2e, 0x1f, 0xdd, 0x03, + 0x20, 0xaf, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x49, 0x08, 0x20, 0x0d, 0xf0, 0x07, 0xfb, 0x1a, + 0x48, 0x07, 0x60, 0x04, 0x20, 0x00, 0x49, 0x06, + 0x68, 0x09, 0x70, 0x08, 0x48, 0x05, 0x60, 0x07, + 0x48, 0x05, 0x70, 0x06, 0x20, 0x00, 0xe7, 0xec, + 0xe7, 0xeb, 0x00, 0x00, 0x2e, 0x01, 0x4c, 0xd1, + 0x2e, 0x08, 0x7c, 0x38, 0x2e, 0x08, 0x7c, 0x34, + 0x2e, 0x08, 0x7c, 0x3c, 0xb5, 0xb0, 0x1c, 0x04, + 0x1c, 0x0f, 0x06, 0x25, 0x0e, 0x2d, 0x2d, 0x1f, + 0xdd, 0x03, 0x20, 0xaf, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x49, 0x07, 0x20, 0x0d, 0xf0, 0x07, + 0xfa, 0xf5, 0x48, 0x06, 0x60, 0x07, 0x20, 0x00, + 0x49, 0x04, 0x68, 0x09, 0x70, 0x08, 0x48, 0x04, + 0x70, 0x05, 0x20, 0x00, 0xe7, 0xee, 0xe7, 0xed, + 0x2e, 0x01, 0x4c, 0xd1, 0x2e, 0x08, 0x7c, 0x40, + 0x2e, 0x08, 0x7c, 0x44, 0xb4, 0xb0, 0x1c, 0x01, + 0x4a, 0x35, 0x23, 0x01, 0x60, 0x13, 0x4a, 0x35, + 0x1c, 0x0f, 0x68, 0x3d, 0xc2, 0x20, 0x88, 0x8d, + 0xc2, 0x20, 0x88, 0xcb, 0x60, 0x13, 0x68, 0x8c, + 0x2c, 0x00, 0xd0, 0x57, 0x4a, 0x30, 0x1c, 0x27, + 0x20, 0x00, 0x28, 0x13, 0xdb, 0x02, 0xe0, 0x04, + 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, + 0xe7, 0xfa, 0x4a, 0x2c, 0x1d, 0xe7, 0x37, 0x45, + 0x20, 0x00, 0x28, 0x0b, 0xdb, 0x02, 0xe0, 0x04, + 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, + 0xe7, 0xfa, 0x4a, 0x27, 0x1d, 0xe7, 0x37, 0x71, + 0x20, 0x00, 0x28, 0x07, 0xdb, 0x02, 0xe0, 0x04, + 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, + 0xe7, 0xfa, 0x4a, 0x22, 0x1d, 0xe7, 0x37, 0x8d, + 0x20, 0x00, 0x28, 0x09, 0xdb, 0x02, 0xe0, 0x04, + 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, + 0xe7, 0xfa, 0x4a, 0x1d, 0x1d, 0xe7, 0x37, 0xb1, + 0x20, 0x00, 0x28, 0x09, 0xdb, 0x02, 0xe0, 0x04, + 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, + 0xe7, 0xfa, 0x68, 0x0d, 0x23, 0x01, 0x02, 0x9b, + 0x40, 0x2b, 0xd0, 0x17, 0x4a, 0x15, 0x1d, 0xe7, + 0x37, 0xd5, 0x20, 0x00, 0x28, 0x09, 0xdb, 0x02, + 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, + 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x10, 0x1d, 0xe7, + 0x37, 0xf9, 0x20, 0x00, 0x28, 0x09, 0xdb, 0x02, + 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, 0xcf, 0x20, + 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x02, 0x23, 0x00, + 0x60, 0x13, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, + 0x6e, 0x00, 0x0c, 0x0c, 0x6e, 0x00, 0x0c, 0x00, + 0x6e, 0x00, 0x08, 0x00, 0x6e, 0x00, 0x08, 0x50, + 0x6e, 0x00, 0x08, 0x80, 0x6e, 0x00, 0x08, 0xa0, + 0x6e, 0x00, 0x08, 0xd0, 0x6e, 0x00, 0x09, 0x00, + 0x6e, 0x00, 0x09, 0x30, 0xb4, 0xf0, 0x1c, 0x01, + 0x69, 0x08, 0x06, 0xc0, 0x0e, 0xc0, 0x28, 0x01, + 0xdb, 0x04, 0x69, 0x08, 0x06, 0xc0, 0x0e, 0xc0, + 0x28, 0x0a, 0xdd, 0x02, 0x20, 0xc3, 0xbc, 0xf0, + 0x47, 0x70, 0x69, 0x08, 0x05, 0x80, 0x0e, 0xc0, + 0x28, 0x01, 0xdb, 0x04, 0x69, 0x08, 0x05, 0x80, + 0x0e, 0xc0, 0x28, 0x0a, 0xdd, 0x01, 0x20, 0xc4, + 0xe7, 0xf1, 0x48, 0x4f, 0x6a, 0x80, 0x07, 0xc0, + 0x0f, 0xc0, 0xd1, 0x01, 0x20, 0xc0, 0xe7, 0xea, + 0x68, 0x08, 0x07, 0x00, 0x0f, 0xc0, 0x4b, 0x4b, + 0x70, 0x18, 0x4f, 0x49, 0x1c, 0x0c, 0x22, 0x00, + 0x2a, 0x04, 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, + 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, + 0x4f, 0x45, 0x69, 0x08, 0x06, 0xc0, 0x0e, 0xc0, + 0x00, 0x43, 0x18, 0x18, 0x38, 0x03, 0x69, 0x0b, + 0x05, 0x9b, 0x0e, 0xde, 0x00, 0x73, 0x19, 0x9b, + 0x3b, 0x03, 0x01, 0x5b, 0x43, 0x18, 0x60, 0x38, + 0x4f, 0x3e, 0x69, 0x48, 0x60, 0x38, 0x4f, 0x3e, + 0x69, 0x88, 0x05, 0x40, 0x0d, 0x40, 0x69, 0x8b, + 0x02, 0x9b, 0x0d, 0x5b, 0x02, 0xdb, 0x43, 0x18, + 0x60, 0x38, 0x69, 0xcd, 0x2d, 0x00, 0xd0, 0x63, + 0x4f, 0x38, 0x1c, 0x2c, 0x22, 0x00, 0x2a, 0x09, + 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, + 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x34, + 0x1d, 0xec, 0x34, 0x1d, 0x22, 0x00, 0x2a, 0x09, + 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, + 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x2f, + 0x1d, 0xec, 0x34, 0x41, 0x22, 0x00, 0x2a, 0x09, + 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, + 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x2a, + 0x1d, 0xec, 0x34, 0x65, 0x22, 0x00, 0x2a, 0x09, + 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, + 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x25, + 0x1d, 0xec, 0x34, 0x89, 0x22, 0x00, 0x2a, 0x05, + 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, + 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x20, + 0x1d, 0xec, 0x34, 0x9d, 0x22, 0x00, 0x2a, 0x05, + 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, + 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, 0x68, 0x08, + 0x23, 0x01, 0x02, 0x9b, 0x40, 0x18, 0xd0, 0x17, + 0x4f, 0x18, 0x1d, 0xec, 0x34, 0xb1, 0x22, 0x00, + 0x2a, 0x05, 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, + 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, + 0x4f, 0x13, 0x1d, 0xec, 0x34, 0xc5, 0x22, 0x00, + 0x2a, 0x05, 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, + 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, 0xe7, 0xfa, + 0x20, 0x00, 0xe7, 0x54, 0xe7, 0x53, 0x00, 0x00, + 0x6e, 0x00, 0x0e, 0x00, 0x2e, 0x08, 0x7c, 0x45, + 0x6e, 0x00, 0x0e, 0x10, 0x6e, 0x00, 0x0e, 0x14, + 0x6e, 0x00, 0x0e, 0x18, 0x6e, 0x00, 0x0a, 0x00, + 0x6e, 0x00, 0x0a, 0x24, 0x6e, 0x00, 0x0a, 0x48, + 0x6e, 0x00, 0x0a, 0x90, 0x6e, 0x00, 0x0a, 0xc0, + 0x6e, 0x00, 0x0a, 0xe4, 0x6e, 0x00, 0x09, 0xc0, + 0x6e, 0x00, 0x09, 0xe4, 0x1c, 0x01, 0x48, 0x0c, + 0x78, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x20, 0xc1, + 0x47, 0x70, 0x48, 0x0a, 0x6a, 0x80, 0x07, 0xc0, + 0x0f, 0xc0, 0xd1, 0x01, 0x20, 0xc0, 0xe7, 0xf7, + 0x20, 0x00, 0x4b, 0x06, 0x61, 0x58, 0x4a, 0x06, + 0x68, 0x08, 0x60, 0x10, 0x4a, 0x05, 0x68, 0x48, + 0x60, 0x10, 0x20, 0x00, 0xe7, 0xec, 0xe7, 0xeb, + 0x2e, 0x08, 0x7c, 0x45, 0x6e, 0x00, 0x0e, 0x00, + 0x6e, 0x00, 0x0e, 0x20, 0x6e, 0x00, 0x0e, 0x24, + 0x48, 0x09, 0x78, 0x00, 0x28, 0x00, 0xd0, 0x01, + 0x20, 0xc1, 0x47, 0x70, 0x48, 0x07, 0x6a, 0x80, + 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x20, 0xc2, + 0xe7, 0xf7, 0x20, 0x01, 0x49, 0x03, 0x61, 0x48, + 0x20, 0x00, 0xe7, 0xf2, 0xe7, 0xf1, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x45, 0x6e, 0x00, 0x0e, 0x00, + 0xb5, 0xff, 0x1c, 0x04, 0x1c, 0x0d, 0x1c, 0x17, + 0x9e, 0x09, 0x20, 0x00, 0x60, 0x30, 0x48, 0x13, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x07, 0x9b, 0x03, + 0x2b, 0x00, 0xd1, 0x04, 0x20, 0x8a, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x23, 0xff, + 0x33, 0x01, 0x42, 0x9c, 0xdd, 0x01, 0x20, 0x87, + 0xe7, 0xf5, 0x19, 0x28, 0x23, 0xff, 0x33, 0x01, + 0x42, 0x98, 0xd9, 0x01, 0x20, 0x88, 0xe7, 0xee, + 0x68, 0x79, 0x1c, 0x20, 0x80, 0x48, 0x70, 0x0d, + 0x9b, 0x03, 0x60, 0x4b, 0x68, 0x78, 0x60, 0xc8, + 0x68, 0x38, 0x60, 0x88, 0x60, 0x31, 0x20, 0x00, + 0xe7, 0xe1, 0xe7, 0xe0, 0x2e, 0x08, 0x60, 0x8c, + 0x1c, 0x03, 0x1c, 0x0a, 0x1c, 0x19, 0x68, 0xc8, + 0x60, 0x50, 0x68, 0x88, 0x60, 0x10, 0x20, 0x00, + 0x47, 0x70, 0xe7, 0xfd, 0xb5, 0xf3, 0xb0, 0x87, + 0x21, 0x00, 0x91, 0x06, 0x26, 0x00, 0x98, 0x07, + 0xf0, 0x00, 0xfa, 0xcb, 0x90, 0x03, 0x9c, 0x07, + 0x9d, 0x08, 0x88, 0x69, 0x91, 0x04, 0x98, 0x03, + 0x99, 0x04, 0x42, 0x88, 0xd0, 0x09, 0x48, 0xbb, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x05, 0x20, 0xff, + 0xb0, 0x07, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x78, 0x28, 0x90, 0x05, 0x99, 0x04, + 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, 0xdd, 0x02, + 0x20, 0xff, 0xb0, 0x07, 0xe7, 0xf1, 0x98, 0x05, + 0x99, 0x04, 0x18, 0x40, 0x23, 0xff, 0x33, 0x01, + 0x42, 0x98, 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x07, + 0xe7, 0xe7, 0x48, 0xad, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x0a, 0x68, 0xa0, 0x23, 0x01, 0x06, 0x1b, + 0x40, 0x18, 0xd0, 0x05, 0x68, 0x68, 0x28, 0x00, + 0xd1, 0x02, 0x20, 0x8a, 0xb0, 0x07, 0xe7, 0xd8, + 0x62, 0x65, 0x69, 0x60, 0x4b, 0xa5, 0x40, 0x18, + 0x99, 0x05, 0x06, 0x09, 0x0e, 0x09, 0x04, 0x09, + 0x43, 0x08, 0x61, 0x60, 0x02, 0x00, 0x68, 0xe0, + 0x90, 0x00, 0x48, 0x9e, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x06, 0x98, 0x00, 0x28, 0x19, 0xd3, 0x01, + 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, + 0x98, 0x00, 0x28, 0x08, 0xd3, 0x01, 0x20, 0x01, + 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, + 0x20, 0x00, 0xb0, 0x07, 0xe7, 0xb5, 0x48, 0x94, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x1e, 0x48, 0x91, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x1a, 0x68, 0xa0, + 0x02, 0x00, 0x0e, 0x00, 0x06, 0x01, 0x0e, 0x09, + 0x91, 0x06, 0x99, 0x04, 0x29, 0x04, 0xd0, 0x06, + 0x29, 0x10, 0xd0, 0x07, 0x23, 0xff, 0x33, 0x01, + 0x42, 0x99, 0xd0, 0x06, 0xe0, 0x08, 0x26, 0xff, + 0x36, 0x01, 0xe0, 0x07, 0x26, 0x01, 0x02, 0x76, + 0xe0, 0x04, 0x26, 0x03, 0x02, 0x36, 0xe0, 0x01, + 0x26, 0x00, 0xe7, 0xff, 0x49, 0x84, 0x20, 0x91, + 0xf0, 0x0f, 0xff, 0xa8, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x01, 0xff, 0xb1, 0xe7, 0xf5, + 0x98, 0x00, 0x00, 0x80, 0x49, 0x7f, 0x58, 0x08, + 0x99, 0x07, 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, + 0x49, 0x7b, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x07, + 0xe7, 0x7b, 0x48, 0x77, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x73, 0x48, 0x74, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x6f, 0x98, 0x00, 0xf0, 0x02, 0xfe, 0xd6, + 0x28, 0x00, 0xd0, 0x6a, 0xb0, 0x82, 0x49, 0x74, + 0x20, 0x91, 0xf0, 0x0f, 0xff, 0x83, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x02, 0xff, 0x25, + 0x20, 0x92, 0x49, 0x6f, 0x60, 0x08, 0x20, 0x01, + 0x49, 0x6e, 0x68, 0x09, 0x60, 0x08, 0x27, 0x00, + 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, 0x28, 0x00, + 0xd1, 0x15, 0x2f, 0x07, 0xd2, 0x13, 0x6a, 0xe0, + 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, + 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, 0x4a, 0x65, + 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, + 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, 0xd1, 0x01, + 0x20, 0x01, 0x90, 0x00, 0xe7, 0xe6, 0x98, 0x00, + 0x28, 0x00, 0xd1, 0x14, 0x2f, 0x18, 0xd2, 0x12, + 0x6a, 0xe0, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, + 0x37, 0x01, 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x59, + 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, 0xd1, 0x01, + 0x20, 0x01, 0x90, 0x00, 0xe7, 0xe7, 0x3f, 0x01, + 0x2f, 0x07, 0xd2, 0x10, 0x00, 0xb8, 0x19, 0xc0, + 0x00, 0xc0, 0x49, 0x50, 0x68, 0x09, 0x18, 0x40, + 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc0, 0x1c, 0x21, + 0xf0, 0x02, 0xfb, 0x38, 0x48, 0x4b, 0x68, 0x00, + 0xf0, 0x02, 0xfe, 0xee, 0xe0, 0x46, 0x2f, 0x18, + 0xd2, 0x44, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x47, + 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x0a, 0x1c, 0x21, 0xf0, 0x02, 0xfb, 0x26, + 0x20, 0x4c, 0x43, 0x78, 0x49, 0x41, 0x68, 0x09, + 0xe0, 0x00, 0xe0, 0x48, 0x18, 0x40, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x82, 0x6f, 0xc0, 0x28, 0x00, + 0xd0, 0x17, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x3b, + 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x02, 0x68, 0x00, 0x04, 0x00, 0x0c, 0x00, + 0xd0, 0x0b, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x35, + 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x02, 0x68, 0x00, 0x0c, 0x00, 0x04, 0x00, + 0xd1, 0x0a, 0x20, 0x02, 0x21, 0x4c, 0x43, 0x79, + 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, + 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, 0xe0, 0x09, + 0x20, 0x03, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x29, + 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, + 0x39, 0x82, 0x67, 0x48, 0x49, 0x24, 0x20, 0x91, + 0xf0, 0x0f, 0xfe, 0xe4, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0x48, 0x22, 0x68, 0x00, 0x90, 0x01, + 0x48, 0x21, 0x68, 0x00, 0x49, 0x1f, 0x60, 0x08, + 0x98, 0x01, 0x49, 0x1f, 0x60, 0x08, 0x20, 0x92, + 0x49, 0x1b, 0x60, 0x08, 0xb0, 0x02, 0x48, 0x15, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x1d, 0x98, 0x00, + 0x01, 0x00, 0x4b, 0x1a, 0x18, 0xc1, 0x91, 0x01, + 0x1d, 0xe0, 0x30, 0x0d, 0x90, 0x02, 0x98, 0x02, + 0x68, 0x00, 0x99, 0x01, 0x60, 0x08, 0x48, 0x0e, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0d, 0x68, 0x68, + 0x08, 0x80, 0x99, 0x06, 0x00, 0x89, 0x4b, 0x12, + 0x18, 0xc9, 0x67, 0x08, 0x98, 0x05, 0x43, 0x30, + 0x99, 0x06, 0x00, 0x89, 0x4b, 0x0f, 0x18, 0xc9, + 0x61, 0x08, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, + 0x20, 0x00, 0xb0, 0x07, 0xe6, 0x91, 0xb0, 0x07, + 0xe6, 0x8f, 0x00, 0x00, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x60, 0x8c, 0xff, 0x00, 0xff, 0xff, + 0x2e, 0x08, 0x7c, 0xc8, 0x2e, 0x08, 0x7c, 0x60, + 0x2e, 0x08, 0x94, 0x90, 0x2e, 0x08, 0x7d, 0xbc, + 0x2e, 0x08, 0x7d, 0xc0, 0x68, 0x00, 0x0c, 0x00, + 0x68, 0x00, 0x0e, 0x00, 0x68, 0x00, 0x0e, 0x80, + 0x1c, 0x01, 0x1c, 0x0a, 0x6a, 0x53, 0x1c, 0x18, + 0x47, 0x70, 0xe7, 0xfd, 0xb5, 0xf3, 0x1c, 0x0f, + 0xb0, 0x82, 0x48, 0x2b, 0x68, 0x00, 0x28, 0x00, + 0xd0, 0x05, 0x20, 0x8a, 0xb0, 0x02, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, + 0x90, 0x01, 0x98, 0x01, 0x88, 0x44, 0x98, 0x01, + 0x78, 0x06, 0x23, 0xff, 0x33, 0x01, 0x42, 0x9c, + 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xee, + 0x19, 0x30, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, + 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xe6, + 0x49, 0x1c, 0x20, 0x91, 0xf0, 0x0f, 0xfe, 0x66, + 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, + 0xfe, 0x6f, 0xe7, 0xf5, 0x2c, 0x10, 0xda, 0x0d, + 0x25, 0x00, 0x42, 0xa5, 0xdb, 0x02, 0xe0, 0x08, + 0x35, 0x01, 0xe7, 0xfa, 0xcf, 0x01, 0x19, 0x71, + 0x00, 0x89, 0x4b, 0x13, 0x18, 0xc9, 0x60, 0x08, + 0xe7, 0xf6, 0xe0, 0x15, 0x4a, 0x11, 0x43, 0x22, + 0x92, 0x00, 0x20, 0x91, 0x49, 0x10, 0x60, 0x08, + 0x00, 0xb0, 0x4b, 0x0d, 0x18, 0xc1, 0x9a, 0x00, + 0x1c, 0x38, 0x23, 0x02, 0xf0, 0x00, 0xfa, 0xfe, + 0x28, 0x00, 0xd0, 0x00, 0xe7, 0xf4, 0x48, 0x0a, + 0x68, 0x00, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xfa, + 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, + 0xb0, 0x02, 0xe7, 0xb0, 0xb0, 0x02, 0xe7, 0xae, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x7c, 0xcc, + 0x68, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0xd0, 0x21, 0x04, 0xe0, 0x00, + 0x31, 0x01, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, + 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x82, 0x48, 0x2b, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x8a, + 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x98, 0x02, 0x90, 0x01, 0x98, 0x01, + 0x88, 0x44, 0x98, 0x01, 0x78, 0x06, 0x23, 0xff, + 0x33, 0x01, 0x42, 0x9c, 0xdd, 0x02, 0x20, 0xff, + 0xb0, 0x02, 0xe7, 0xee, 0x19, 0x30, 0x23, 0xff, + 0x33, 0x01, 0x42, 0x98, 0xdd, 0x02, 0x20, 0xff, + 0xb0, 0x02, 0xe7, 0xe6, 0x49, 0x1c, 0x20, 0x91, + 0xf0, 0x0f, 0xfd, 0xfc, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x01, 0xfe, 0x05, 0xe7, 0xf5, + 0x2c, 0x10, 0xda, 0x0d, 0x25, 0x00, 0x42, 0xa5, + 0xdb, 0x02, 0xe0, 0x08, 0x35, 0x01, 0xe7, 0xfa, + 0x19, 0x70, 0x00, 0x80, 0x4b, 0x13, 0x18, 0xc0, + 0x68, 0x01, 0xc7, 0x02, 0xe7, 0xf6, 0xe0, 0x15, + 0x4a, 0x11, 0x43, 0x22, 0x92, 0x00, 0x20, 0x91, + 0x49, 0x10, 0x60, 0x08, 0x00, 0xb0, 0x4b, 0x0d, + 0x18, 0xc0, 0x9a, 0x00, 0x1c, 0x39, 0x23, 0x02, + 0xf0, 0x00, 0xfa, 0x94, 0x28, 0x00, 0xd0, 0x00, + 0xe7, 0xf4, 0x48, 0x0a, 0x68, 0x00, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xfa, 0x20, 0x92, 0x49, 0x04, + 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xb0, + 0xb0, 0x02, 0xe7, 0xae, 0x2e, 0x08, 0x60, 0x8c, + 0x2e, 0x08, 0x7c, 0xcc, 0x68, 0x00, 0x08, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0xd0, + 0xb5, 0xf7, 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, + 0x9c, 0x00, 0x88, 0x66, 0x42, 0xb5, 0xdd, 0x04, + 0x20, 0xff, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x78, 0x20, 0x19, 0x40, 0x06, 0x07, + 0x0e, 0x3f, 0x23, 0xff, 0x33, 0x01, 0x42, 0x9f, + 0xdd, 0x01, 0x20, 0xff, 0xe7, 0xf1, 0x49, 0x0a, + 0x20, 0x91, 0xf0, 0x0f, 0xfd, 0xa3, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, 0xfd, 0xac, + 0xe7, 0xf5, 0x99, 0x01, 0x00, 0xb8, 0x4b, 0x05, + 0x18, 0xc0, 0x60, 0x01, 0x20, 0x92, 0x49, 0x02, + 0x60, 0x08, 0x20, 0x00, 0xe7, 0xdd, 0xe7, 0xdc, + 0x2e, 0x08, 0x7c, 0xcc, 0x68, 0x00, 0x08, 0x00, + 0xb5, 0xf7, 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, + 0x9f, 0x00, 0x88, 0x7d, 0x78, 0x38, 0x19, 0x00, + 0x06, 0x06, 0x0e, 0x36, 0x42, 0xac, 0xdd, 0x04, + 0x20, 0xff, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x49, 0x0b, 0x20, 0x91, 0xf0, 0x0f, + 0xfd, 0x79, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, + 0xf0, 0x01, 0xfd, 0x82, 0xe7, 0xf5, 0x00, 0xb0, + 0x4b, 0x06, 0x18, 0xc0, 0x68, 0x00, 0x99, 0x01, + 0x60, 0x08, 0x20, 0x92, 0x49, 0x02, 0x60, 0x08, + 0x20, 0x00, 0xe7, 0xe6, 0xe7, 0xe5, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0xcc, 0x68, 0x00, 0x08, 0x00, + 0x1c, 0x01, 0x1c, 0x0a, 0x88, 0x50, 0x47, 0x70, + 0xe7, 0xfd, 0xb4, 0x80, 0x1c, 0x01, 0x1c, 0x0f, + 0x69, 0x3a, 0x2a, 0x08, 0xd2, 0x12, 0xa3, 0x02, + 0x5c, 0x9b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x04, 0x07, 0x09, 0x0b, 0x04, 0x07, 0x09, 0x0b, + 0x20, 0x02, 0xbc, 0x80, 0x47, 0x70, 0x20, 0x04, + 0xe7, 0xfb, 0x20, 0x10, 0xe7, 0xf9, 0x20, 0xff, + 0x30, 0x01, 0xe7, 0xf6, 0x20, 0x00, 0xe7, 0xf4, + 0xe7, 0xf3, 0xb5, 0xf3, 0x98, 0x00, 0x06, 0x05, + 0x0e, 0x2d, 0x48, 0x89, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x04, 0x20, 0x8b, 0xb0, 0x02, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x48, 0x85, 0x68, 0x00, + 0x28, 0x01, 0xd1, 0x04, 0x2d, 0x17, 0xdd, 0x02, + 0x20, 0x8c, 0xe7, 0xf3, 0xe0, 0xfe, 0x2d, 0x07, + 0xdd, 0x01, 0x20, 0x8c, 0xe7, 0xee, 0x49, 0x80, + 0x20, 0x91, 0xf0, 0x0f, 0xfd, 0x23, 0x28, 0x92, + 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, 0xfd, 0x2c, + 0xe7, 0xf5, 0x1c, 0x28, 0xf7, 0xf8, 0xfc, 0xd8, + 0x1c, 0x04, 0x2c, 0x00, 0xd0, 0x09, 0x68, 0xa0, + 0x4b, 0x78, 0x40, 0x18, 0x99, 0x01, 0x07, 0xc9, + 0x09, 0xc9, 0x43, 0x08, 0x60, 0xa0, 0x01, 0xc0, + 0xe0, 0x04, 0x20, 0x92, 0x49, 0x72, 0x60, 0x08, + 0x20, 0xff, 0xe7, 0xcf, 0x48, 0x6f, 0x68, 0x00, + 0x28, 0x00, 0xd1, 0x11, 0x99, 0x01, 0x29, 0x00, + 0xd0, 0x06, 0x48, 0x6f, 0x21, 0x01, 0x40, 0xa9, + 0x68, 0x02, 0x43, 0x11, 0x60, 0x01, 0xe0, 0x06, + 0x48, 0x6b, 0x21, 0x01, 0x40, 0xa9, 0x43, 0xc9, + 0x68, 0x02, 0x40, 0x11, 0x60, 0x01, 0xe0, 0xbf, + 0x68, 0xe0, 0xf0, 0x02, 0xfc, 0x3b, 0x28, 0x00, + 0xd0, 0x73, 0xb0, 0x81, 0x49, 0x65, 0x20, 0x91, + 0xf0, 0x0f, 0xfc, 0xe8, 0x28, 0x92, 0xd0, 0x00, + 0xe7, 0xf8, 0xf0, 0x02, 0xfc, 0x8a, 0x20, 0x92, + 0x49, 0x60, 0x60, 0x08, 0x20, 0x01, 0x49, 0x60, + 0x68, 0x09, 0x60, 0x08, 0x27, 0x00, 0x26, 0x00, + 0x2e, 0x00, 0xd1, 0x14, 0x2f, 0x07, 0xd2, 0x12, + 0x6a, 0xe0, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, + 0x37, 0x01, 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, + 0x4a, 0x57, 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, + 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, + 0xd1, 0x00, 0x26, 0x01, 0xe7, 0xe8, 0x2e, 0x00, + 0xd1, 0x13, 0x2f, 0x18, 0xd2, 0x11, 0x6a, 0xe0, + 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, + 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x4c, 0x68, 0x12, + 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, + 0x69, 0x40, 0x42, 0x81, 0xd1, 0x00, 0x26, 0x01, + 0xe7, 0xe9, 0x3f, 0x01, 0x2f, 0x07, 0xd2, 0x32, + 0x99, 0x02, 0x29, 0x00, 0xd0, 0x16, 0x00, 0xb8, + 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x42, 0x68, 0x09, + 0x18, 0x40, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, + 0x6e, 0x80, 0x4b, 0x40, 0x43, 0x18, 0x00, 0xb9, + 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x3c, 0x68, 0x12, + 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, + 0x66, 0x88, 0xe0, 0x17, 0x00, 0xb8, 0x19, 0xc0, + 0x00, 0xc0, 0x49, 0x37, 0x68, 0x09, 0x18, 0x40, + 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6e, 0x80, + 0x04, 0x00, 0x0c, 0x00, 0x00, 0xb9, 0x19, 0xc9, + 0x00, 0xc9, 0x4a, 0x31, 0x68, 0x12, 0x18, 0x89, + 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, + 0xe0, 0x00, 0xe0, 0x45, 0xe0, 0x2b, 0x99, 0x02, + 0x29, 0x00, 0xd0, 0x14, 0x20, 0x4c, 0x43, 0x78, + 0x49, 0x29, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x4b, 0x27, + 0x43, 0x18, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x24, + 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, + 0x39, 0x02, 0x60, 0x08, 0xe0, 0x13, 0x20, 0x4c, + 0x43, 0x78, 0x49, 0x1f, 0x68, 0x09, 0x18, 0x40, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, + 0x04, 0x00, 0x0c, 0x00, 0x21, 0x4c, 0x43, 0x79, + 0x4a, 0x19, 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, + 0x39, 0xff, 0x39, 0x02, 0x60, 0x08, 0x48, 0x16, + 0x68, 0x00, 0xf0, 0x02, 0xfc, 0x05, 0x49, 0x13, + 0x20, 0x91, 0xf0, 0x0f, 0xfc, 0x43, 0x28, 0x92, + 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x10, 0x68, 0x00, + 0x90, 0x00, 0x48, 0x11, 0x68, 0x00, 0x49, 0x0e, + 0x60, 0x08, 0x98, 0x00, 0x49, 0x0e, 0x60, 0x08, + 0x20, 0x92, 0x49, 0x0a, 0x60, 0x08, 0xb0, 0x01, + 0x20, 0x92, 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, + 0xe6, 0xf4, 0xe6, 0xf3, 0xe6, 0xf2, 0x00, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xcc, 0xfe, 0xff, 0xff, 0xff, + 0x68, 0x00, 0x00, 0x20, 0x2e, 0x08, 0x94, 0x90, + 0x2e, 0x08, 0x7d, 0xbc, 0xff, 0xff, 0x00, 0x00, + 0x2e, 0x08, 0x7d, 0xc0, 0xb5, 0xf0, 0x1c, 0x04, + 0x1c, 0x0f, 0x06, 0x26, 0x0e, 0x36, 0x48, 0x0f, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x8b, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x07, + 0xdd, 0x01, 0x20, 0x8c, 0xe7, 0xf8, 0x1c, 0x30, + 0xf7, 0xf8, 0xfb, 0xc2, 0x1c, 0x05, 0x2d, 0x00, + 0xd0, 0x04, 0x68, 0xa8, 0x01, 0xc0, 0x0f, 0xc0, + 0x60, 0x38, 0xe0, 0x04, 0x20, 0x92, 0x49, 0x04, + 0x60, 0x08, 0x20, 0xff, 0xe7, 0xe8, 0x20, 0x00, + 0xe7, 0xe6, 0xe7, 0xe5, 0x2e, 0x08, 0x60, 0x8c, + 0x2e, 0x08, 0x7c, 0xcc, 0xb5, 0xb0, 0x1c, 0x04, + 0x1c, 0x0f, 0x06, 0x25, 0x0e, 0x2d, 0x48, 0x20, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x8b, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x1d, + 0x68, 0x00, 0x28, 0x01, 0xd1, 0x04, 0x2d, 0x17, + 0xdd, 0x02, 0x20, 0x8c, 0xe7, 0xf4, 0xe0, 0x2d, + 0x2d, 0x07, 0xdd, 0x01, 0x20, 0x8c, 0xe7, 0xef, + 0x48, 0x16, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x01, + 0x20, 0xff, 0xe7, 0xe9, 0x49, 0x14, 0x20, 0x91, + 0xf0, 0x0f, 0xfb, 0xcc, 0x28, 0x92, 0xd0, 0x03, + 0x20, 0x01, 0xf0, 0x01, 0xfb, 0xd5, 0xe7, 0xf5, + 0x2f, 0x00, 0xd0, 0x08, 0x48, 0x0f, 0x1d, 0xe9, + 0x31, 0x01, 0x22, 0x01, 0x40, 0x8a, 0x68, 0x01, + 0x43, 0x11, 0x60, 0x01, 0xe0, 0x08, 0x48, 0x0b, + 0x1d, 0xea, 0x32, 0x01, 0x21, 0x01, 0x40, 0x91, + 0x43, 0xc9, 0x68, 0x02, 0x40, 0x11, 0x60, 0x01, + 0x20, 0x92, 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, + 0xe7, 0xc6, 0xe7, 0xc5, 0xe7, 0xc4, 0x00, 0x00, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x94, 0x8c, + 0x2e, 0x08, 0x7c, 0xcc, 0x68, 0x00, 0x00, 0x20, + 0xb4, 0x90, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x39, + 0x0e, 0x09, 0x48, 0x10, 0x68, 0x00, 0x28, 0x00, + 0xd1, 0x02, 0x20, 0x8b, 0xbc, 0x90, 0x47, 0x70, + 0x29, 0x07, 0xdd, 0x01, 0x20, 0x8c, 0xe7, 0xf9, + 0x48, 0x0b, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x01, + 0x20, 0xff, 0xe7, 0xf3, 0x1d, 0xc8, 0x30, 0x01, + 0x24, 0x01, 0x40, 0x84, 0x1c, 0x23, 0x20, 0x0d, + 0x06, 0xc0, 0x6a, 0x00, 0x40, 0x18, 0x1d, 0xcc, + 0x34, 0x01, 0x40, 0xe0, 0x60, 0x10, 0x20, 0x00, + 0xe7, 0xe4, 0xe7, 0xe3, 0x2e, 0x08, 0x60, 0x8c, + 0x2e, 0x08, 0x94, 0x8c, 0xb5, 0xb0, 0x1c, 0x04, + 0x1c, 0x0f, 0x06, 0x25, 0x0e, 0x2d, 0x48, 0x13, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x8b, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x07, + 0xdd, 0x01, 0x20, 0x8c, 0xe7, 0xf8, 0x48, 0x0e, + 0x68, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, + 0xe7, 0xf2, 0x49, 0x0c, 0x20, 0x91, 0xf0, 0x0f, + 0xfb, 0x5d, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, + 0xf0, 0x01, 0xfb, 0x66, 0xe7, 0xf5, 0x08, 0xb8, + 0x00, 0xa9, 0x4b, 0x07, 0x18, 0xc9, 0x67, 0x08, + 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, + 0xe7, 0xde, 0xe7, 0xdd, 0x2e, 0x08, 0x60, 0x8c, + 0x2e, 0x08, 0x94, 0x8c, 0x2e, 0x08, 0x7c, 0xcc, + 0x68, 0x00, 0x0e, 0x00, 0xb4, 0xf0, 0x1c, 0x05, + 0x1c, 0x0c, 0x1c, 0x17, 0x1c, 0x1e, 0x04, 0x3f, + 0x0c, 0x3f, 0x1c, 0x39, 0x29, 0x00, 0xd8, 0x02, + 0xe0, 0x04, 0x39, 0x01, 0xe7, 0xfa, 0xcd, 0x04, + 0xc4, 0x04, 0xe7, 0xfa, 0x20, 0x92, 0x4a, 0x03, + 0x60, 0x10, 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, + 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0xd0, + 0x20, 0x00, 0x6b, 0x00, 0x49, 0x63, 0x60, 0x08, + 0x20, 0x00, 0x6b, 0x40, 0x49, 0x62, 0x60, 0x08, + 0x48, 0x62, 0x49, 0x63, 0x60, 0x08, 0x48, 0x63, + 0x49, 0x63, 0x60, 0x08, 0x20, 0x00, 0x6a, 0xc0, + 0x49, 0x62, 0x60, 0x08, 0x48, 0x62, 0x49, 0x63, + 0x60, 0x08, 0x48, 0x63, 0x49, 0x63, 0x60, 0x08, + 0x48, 0x63, 0x49, 0x64, 0x60, 0x08, 0x20, 0x00, + 0x6b, 0x80, 0x49, 0x63, 0x60, 0x08, 0x20, 0x00, + 0x6b, 0xc0, 0x49, 0x62, 0x60, 0x08, 0x20, 0x00, + 0x6c, 0x00, 0x49, 0x61, 0x60, 0x08, 0x20, 0x00, + 0x6c, 0x40, 0x49, 0x60, 0x60, 0x08, 0x20, 0x00, + 0x6c, 0x80, 0x49, 0x5f, 0x60, 0x08, 0x20, 0x00, + 0x6c, 0xc0, 0x49, 0x5e, 0x60, 0x08, 0x20, 0x00, + 0x6e, 0xc0, 0x49, 0x5d, 0x60, 0x08, 0x20, 0x80, + 0x6d, 0x00, 0x49, 0x5c, 0x60, 0x08, 0x20, 0x80, + 0x6d, 0x40, 0x49, 0x5b, 0x60, 0x08, 0x20, 0x80, + 0x6d, 0x80, 0x49, 0x5a, 0x60, 0x08, 0x20, 0x00, + 0x6d, 0x00, 0x49, 0x59, 0x60, 0x08, 0x20, 0x00, + 0x6d, 0x40, 0x49, 0x58, 0x60, 0x08, 0x20, 0x00, + 0x6d, 0x80, 0x49, 0x57, 0x60, 0x08, 0x20, 0x00, + 0x6d, 0xc0, 0x49, 0x56, 0x60, 0x08, 0x20, 0x80, + 0x6a, 0xc0, 0x49, 0x55, 0x60, 0x08, 0x20, 0x80, + 0x6d, 0xc0, 0x49, 0x54, 0x60, 0x08, 0x20, 0x80, + 0x6c, 0xc0, 0x49, 0x53, 0x60, 0x08, 0x20, 0x80, + 0x68, 0x40, 0x49, 0x52, 0x60, 0x08, 0x20, 0x80, + 0x68, 0x80, 0x49, 0x51, 0x60, 0x08, 0x20, 0x80, + 0x68, 0xc0, 0x49, 0x50, 0x60, 0x08, 0x20, 0x80, + 0x69, 0x00, 0x49, 0x4f, 0x60, 0x08, 0x20, 0x80, + 0x69, 0x40, 0x49, 0x4e, 0x60, 0x08, 0x20, 0x80, + 0x69, 0x80, 0x49, 0x4d, 0x60, 0x08, 0x20, 0x80, + 0x69, 0xc0, 0x49, 0x4c, 0x60, 0x08, 0x20, 0x80, + 0x6a, 0x00, 0x49, 0x4b, 0x60, 0x08, 0x20, 0x80, + 0x6a, 0x40, 0x49, 0x4a, 0x60, 0x08, 0x20, 0x80, + 0x6a, 0x80, 0x49, 0x49, 0x60, 0x08, 0x20, 0x00, + 0x6f, 0x00, 0x49, 0x48, 0x60, 0x08, 0x20, 0x00, + 0x6f, 0x40, 0x49, 0x47, 0x60, 0x08, 0x20, 0x80, + 0x6c, 0x40, 0x49, 0x46, 0x60, 0x08, 0x20, 0x80, + 0x6c, 0x80, 0x49, 0x45, 0x60, 0x08, 0x20, 0x80, + 0x6e, 0x40, 0x49, 0x44, 0x60, 0x08, 0x20, 0x80, + 0x6e, 0x80, 0x49, 0x43, 0x60, 0x08, 0x20, 0x00, + 0x49, 0x42, 0x60, 0x08, 0x20, 0x00, 0x49, 0x41, + 0x60, 0x48, 0x48, 0x41, 0x49, 0x3f, 0x60, 0x88, + 0x48, 0x40, 0x49, 0x3e, 0x60, 0xc8, 0x20, 0xff, + 0x30, 0x01, 0x68, 0x40, 0x49, 0x3e, 0x60, 0x08, + 0x20, 0x80, 0x6e, 0xc0, 0x49, 0x3d, 0x60, 0x08, + 0x20, 0x80, 0x6f, 0x00, 0x49, 0x3c, 0x60, 0x08, + 0x20, 0x80, 0x6f, 0x40, 0x49, 0x3b, 0x60, 0x08, + 0x20, 0x80, 0x6f, 0x80, 0x49, 0x3a, 0x60, 0x08, + 0x20, 0x80, 0x6f, 0xc0, 0x49, 0x39, 0x60, 0x08, + 0x20, 0xff, 0x30, 0x01, 0x68, 0x80, 0x49, 0x38, + 0x60, 0x08, 0x47, 0x70, 0x2e, 0x08, 0x5d, 0xc4, + 0x2e, 0x08, 0x5d, 0xc8, 0x64, 0x00, 0x05, 0x00, + 0x2e, 0x08, 0x5d, 0xd0, 0x64, 0x00, 0x00, 0x80, + 0x2e, 0x08, 0x5d, 0xd4, 0x2e, 0x08, 0x5d, 0xcc, + 0x64, 0x00, 0x04, 0x00, 0x2e, 0x08, 0x5d, 0xd8, + 0x9e, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x5d, 0xf0, + 0x9e, 0x00, 0x05, 0x00, 0x2e, 0x08, 0x5d, 0xdc, + 0x2e, 0x08, 0x94, 0xa4, 0x2e, 0x08, 0x94, 0xa8, + 0x2e, 0x08, 0x94, 0xac, 0x2e, 0x08, 0x94, 0xb0, + 0x2e, 0x08, 0x5d, 0xe0, 0x2e, 0x08, 0x5d, 0xe4, + 0x2e, 0x08, 0x5d, 0xf4, 0x2e, 0x08, 0x5d, 0xf8, + 0x2e, 0x08, 0x5d, 0xfc, 0x2e, 0x08, 0x5e, 0x00, + 0x2e, 0x08, 0x5d, 0xe8, 0x2e, 0x08, 0x5d, 0xec, + 0x2e, 0x08, 0x60, 0x74, 0x2e, 0x08, 0x60, 0x78, + 0x2e, 0x08, 0x5e, 0x04, 0x2e, 0x08, 0x5e, 0x08, + 0x2e, 0x08, 0x5e, 0x34, 0x2e, 0x08, 0x5e, 0x0c, + 0x2e, 0x08, 0x5e, 0x10, 0x2e, 0x08, 0x5e, 0x14, + 0x2e, 0x08, 0x5e, 0x18, 0x2e, 0x08, 0x5e, 0x1c, + 0x2e, 0x08, 0x5e, 0x20, 0x2e, 0x08, 0x5e, 0x24, + 0x2e, 0x08, 0x5e, 0x28, 0x2e, 0x08, 0x5e, 0x2c, + 0x2e, 0x08, 0x5e, 0x30, 0x2e, 0x08, 0x5d, 0xb8, + 0x2e, 0x08, 0x5d, 0xbc, 0x2e, 0x08, 0x7c, 0x4c, + 0x2e, 0x08, 0x5e, 0x5c, 0x2e, 0x08, 0x5e, 0x3c, + 0x2e, 0x08, 0x60, 0x7c, 0x2e, 0x08, 0x7c, 0x24, + 0xcc, 0x1f, 0xe0, 0x00, 0xcc, 0x1f, 0xfe, 0x00, + 0x2e, 0x08, 0x5e, 0x48, 0x2e, 0x08, 0x5e, 0x60, + 0x2e, 0x08, 0x5e, 0x40, 0x2e, 0x08, 0x5e, 0x44, + 0x2e, 0x08, 0x7c, 0x48, 0x2e, 0x08, 0x7c, 0x20, + 0x2e, 0x08, 0x5e, 0x50, 0x49, 0x4f, 0x68, 0x0a, + 0x23, 0x04, 0x43, 0x1a, 0x60, 0x0a, 0x21, 0xff, + 0x4a, 0x4d, 0x68, 0x12, 0x32, 0x40, 0x72, 0x11, + 0x21, 0xff, 0x4a, 0x4b, 0x68, 0x12, 0x32, 0x40, + 0x76, 0x11, 0x21, 0xff, 0x4a, 0x48, 0x68, 0x12, + 0x32, 0x60, 0x72, 0x11, 0x21, 0xff, 0x4a, 0x46, + 0x68, 0x12, 0x32, 0x20, 0x72, 0x11, 0x21, 0xff, + 0x4a, 0x43, 0x68, 0x12, 0x32, 0x20, 0x76, 0x11, + 0x21, 0xff, 0x4a, 0x41, 0x68, 0x12, 0x32, 0x60, + 0x76, 0x11, 0x21, 0x00, 0x4a, 0x3e, 0x68, 0x12, + 0x32, 0x40, 0x72, 0x91, 0x21, 0x00, 0x4a, 0x3c, + 0x68, 0x12, 0x32, 0x40, 0x76, 0x91, 0x21, 0x00, + 0x4a, 0x39, 0x68, 0x12, 0x32, 0x60, 0x72, 0x91, + 0x21, 0x00, 0x4a, 0x37, 0x68, 0x12, 0x32, 0x20, + 0x72, 0x91, 0x21, 0x00, 0x4a, 0x34, 0x68, 0x12, + 0x32, 0x20, 0x76, 0x91, 0x21, 0x00, 0x4a, 0x32, + 0x68, 0x12, 0x32, 0x60, 0x76, 0x91, 0x21, 0x00, + 0x4a, 0x2f, 0x68, 0x12, 0x32, 0x80, 0x70, 0xd1, + 0x21, 0x00, 0x4a, 0x2d, 0x68, 0x12, 0x32, 0x80, + 0x70, 0x51, 0x21, 0x00, 0x4a, 0x2a, 0x68, 0x12, + 0x32, 0x80, 0x70, 0x91, 0x21, 0x00, 0x4a, 0x29, + 0x60, 0x11, 0x21, 0x00, 0x4a, 0x28, 0x64, 0x11, + 0x21, 0x03, 0x4a, 0x28, 0x61, 0x11, 0x49, 0x28, + 0x68, 0x0a, 0x4b, 0x28, 0x43, 0x1a, 0x60, 0x0a, + 0x49, 0x26, 0x22, 0x33, 0x06, 0x52, 0x60, 0x51, + 0x21, 0x00, 0x4a, 0x25, 0x70, 0x11, 0x21, 0x00, + 0x4a, 0x23, 0x70, 0x51, 0x21, 0x00, 0x4a, 0x22, + 0x70, 0x91, 0x21, 0x00, 0x4a, 0x20, 0x70, 0xd1, + 0x21, 0x00, 0x4a, 0x1f, 0x71, 0x11, 0x21, 0x00, + 0x4a, 0x1d, 0x71, 0x51, 0x21, 0x00, 0x4a, 0x1c, + 0x71, 0x91, 0x21, 0x00, 0x4a, 0x1a, 0x71, 0xd1, + 0x21, 0x00, 0x4a, 0x19, 0x72, 0x11, 0x21, 0x00, + 0x4a, 0x17, 0x72, 0x51, 0x21, 0x00, 0x4a, 0x16, + 0x72, 0x91, 0x21, 0x00, 0x4a, 0x14, 0x72, 0xd1, + 0x21, 0x00, 0x4a, 0x13, 0x73, 0x11, 0x21, 0xff, + 0x4a, 0x11, 0x70, 0x11, 0x21, 0x00, 0x4a, 0x10, + 0x70, 0x11, 0x21, 0x00, 0x4a, 0x0e, 0x70, 0x51, + 0x20, 0x00, 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x08, + 0x1c, 0x41, 0x06, 0x08, 0x0e, 0x00, 0xe7, 0xf8, + 0x21, 0xff, 0x4a, 0x03, 0x68, 0x12, 0x54, 0x11, + 0xe7, 0xf6, 0x47, 0x70, 0x66, 0x00, 0x01, 0x18, + 0x2e, 0x08, 0x7c, 0x4c, 0x9e, 0x00, 0x0a, 0x00, + 0x9e, 0x00, 0x0a, 0x80, 0x66, 0x00, 0x01, 0x00, + 0x66, 0x00, 0x00, 0x08, 0x23, 0x48, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x50, 0xb4, 0x80, 0x1c, 0x07, + 0x1c, 0x0a, 0x06, 0x39, 0x0e, 0x09, 0x29, 0x05, + 0xd2, 0x40, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x03, 0x14, 0x07, 0x0d, + 0x13, 0x00, 0x78, 0x10, 0x4b, 0x1f, 0x70, 0x18, + 0xe0, 0x38, 0x78, 0x50, 0x4b, 0x1e, 0x68, 0x1b, + 0x33, 0x80, 0x71, 0x58, 0xe0, 0x32, 0x78, 0x10, + 0x4b, 0x1b, 0x68, 0x1b, 0x33, 0x80, 0x71, 0x18, + 0xe0, 0x2c, 0xe0, 0x2b, 0x78, 0x10, 0x4b, 0x17, + 0x70, 0x18, 0x78, 0x50, 0x4b, 0x15, 0x70, 0x58, + 0x78, 0x90, 0x4b, 0x14, 0x70, 0x98, 0x78, 0xd0, + 0x4b, 0x12, 0x70, 0xd8, 0x79, 0x10, 0x4b, 0x11, + 0x71, 0x18, 0x79, 0x50, 0x4b, 0x0f, 0x71, 0x58, + 0x79, 0x90, 0x4b, 0x0e, 0x71, 0x98, 0x79, 0xd0, + 0x4b, 0x0c, 0x71, 0xd8, 0x7a, 0x10, 0x4b, 0x0b, + 0x72, 0x18, 0x7a, 0x50, 0x4b, 0x09, 0x72, 0x58, + 0x7a, 0x90, 0x4b, 0x08, 0x72, 0x98, 0x7a, 0xd0, + 0x4b, 0x06, 0x72, 0xd8, 0x7b, 0x10, 0x4b, 0x05, + 0x73, 0x18, 0xe0, 0x03, 0x20, 0x4a, 0xbc, 0x80, + 0x47, 0x70, 0xe7, 0xff, 0x20, 0x00, 0xe7, 0xfa, + 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0x50, + 0x2e, 0x08, 0x7c, 0x4c, 0xb5, 0xf3, 0x1c, 0x07, + 0x06, 0x3e, 0x0e, 0x36, 0x99, 0x01, 0x06, 0x0c, + 0x0e, 0x24, 0x2e, 0x20, 0xdb, 0x04, 0x20, 0xa2, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2c, 0x02, 0xd0, 0x03, 0x2c, 0x03, 0xd0, 0x01, + 0x2c, 0x04, 0xd1, 0x0b, 0x48, 0xb8, 0x68, 0x00, + 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x39, + 0x48, 0xb5, 0x68, 0x00, 0x30, 0x20, 0x7e, 0x80, + 0x28, 0x00, 0xd1, 0x33, 0x2c, 0x00, 0xd1, 0x17, + 0x48, 0xb1, 0x68, 0x00, 0x30, 0x40, 0x7a, 0x80, + 0x28, 0x00, 0xd1, 0x2b, 0x48, 0xae, 0x68, 0x00, + 0x30, 0x40, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x25, + 0x48, 0xab, 0x68, 0x00, 0x30, 0x60, 0x7a, 0x80, + 0x28, 0x00, 0xd1, 0x1f, 0x48, 0xa8, 0x68, 0x00, + 0x30, 0x20, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x19, + 0x2c, 0x01, 0xd1, 0x19, 0x48, 0xa4, 0x68, 0x00, + 0x30, 0x40, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x11, + 0x48, 0xa1, 0x68, 0x00, 0x30, 0x40, 0x7e, 0x80, + 0x28, 0x00, 0xd1, 0x0b, 0x48, 0x9e, 0x68, 0x00, + 0x30, 0x60, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x05, + 0x48, 0x9b, 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, + 0x28, 0x00, 0xd0, 0x01, 0x20, 0x49, 0xe7, 0xb3, + 0x48, 0x97, 0x68, 0x00, 0x55, 0x84, 0x2c, 0xff, + 0xd0, 0x73, 0x20, 0x01, 0x49, 0x95, 0x60, 0x48, + 0x2c, 0x05, 0xd2, 0x6f, 0xa3, 0x01, 0x5d, 0x1b, + 0x00, 0x5b, 0x44, 0x9f, 0x02, 0x34, 0x30, 0x30, + 0x30, 0x00, 0x20, 0x02, 0x49, 0x90, 0x61, 0x88, + 0x48, 0x90, 0x6a, 0xc0, 0x49, 0x90, 0x60, 0x08, + 0x48, 0x90, 0x68, 0x01, 0x23, 0x01, 0x07, 0x5b, + 0x43, 0x19, 0x60, 0x01, 0x48, 0x8e, 0x49, 0x8b, + 0x62, 0xc8, 0x48, 0x8c, 0x68, 0x01, 0x4b, 0x8d, + 0x40, 0x19, 0x60, 0x01, 0x20, 0x01, 0x21, 0x31, + 0x06, 0x49, 0x61, 0x88, 0x20, 0x15, 0x21, 0x31, + 0x06, 0x49, 0x61, 0x08, 0x20, 0x0f, 0x21, 0x31, + 0x06, 0x49, 0x61, 0xc8, 0x20, 0x0c, 0x21, 0x31, + 0x06, 0x49, 0x61, 0xc8, 0x20, 0x54, 0x21, 0x31, + 0x06, 0x49, 0x62, 0xc8, 0x20, 0x37, 0x21, 0x31, + 0x06, 0x49, 0x60, 0x88, 0xe0, 0x56, 0x20, 0x00, + 0x49, 0x79, 0x61, 0x88, 0xe0, 0x52, 0x20, 0x01, + 0x49, 0x77, 0x61, 0x88, 0x20, 0x01, 0x49, 0x7c, + 0x62, 0x88, 0x48, 0x7c, 0x78, 0x00, 0x06, 0x80, + 0x0e, 0x80, 0x02, 0x80, 0x49, 0x79, 0x78, 0x49, + 0x07, 0xc9, 0x0d, 0x89, 0x43, 0x08, 0x49, 0x77, + 0x78, 0x89, 0x07, 0xc9, 0x0d, 0xc9, 0x43, 0x08, + 0x49, 0x74, 0x78, 0xc9, 0x07, 0x89, 0x0f, 0x89, + 0x01, 0x89, 0x43, 0x08, 0x49, 0x71, 0x79, 0x09, + 0x07, 0x89, 0x0f, 0x89, 0x01, 0x09, 0x43, 0x08, + 0x49, 0x6e, 0x79, 0x49, 0x07, 0x89, 0x0f, 0x89, + 0x00, 0x89, 0x43, 0x08, 0x49, 0x6b, 0x79, 0x89, + 0x07, 0x89, 0x0f, 0x89, 0x43, 0x08, 0x49, 0x68, + 0x62, 0x08, 0x48, 0x68, 0x79, 0xc0, 0x07, 0xc0, + 0x0e, 0x40, 0x49, 0x66, 0x7a, 0x09, 0x07, 0xc9, + 0xe0, 0x01, 0xe0, 0x21, 0xe0, 0x18, 0x0e, 0xc9, + 0x43, 0x08, 0x49, 0x62, 0x7a, 0x49, 0x07, 0xc9, + 0x0f, 0x09, 0x43, 0x08, 0x49, 0x5f, 0x7a, 0x89, + 0x07, 0xc9, 0x0f, 0x49, 0x43, 0x08, 0x49, 0x5d, + 0x7a, 0xc9, 0x07, 0xc9, 0x0f, 0x89, 0x43, 0x08, + 0x49, 0x5a, 0x7b, 0x09, 0x07, 0xc9, 0x0f, 0xc9, + 0x43, 0x08, 0x49, 0x57, 0x62, 0x48, 0xe0, 0x01, + 0x20, 0x4a, 0xe7, 0x1d, 0x48, 0x51, 0x68, 0x01, + 0x4b, 0x55, 0x40, 0x19, 0x60, 0x01, 0xe0, 0x8f, + 0x48, 0x49, 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, + 0x28, 0x00, 0xd0, 0x08, 0x22, 0x00, 0xb4, 0x04, + 0x1c, 0x30, 0x23, 0x00, 0x22, 0x00, 0x49, 0x4f, + 0xf7, 0xf4, 0xfc, 0x10, 0xb0, 0x01, 0x20, 0x00, + 0x49, 0x42, 0x60, 0x48, 0x48, 0x45, 0x68, 0x01, + 0x4b, 0x4b, 0x43, 0x19, 0x60, 0x01, 0x48, 0x4a, + 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, 0x48, 0x49, + 0x68, 0x01, 0x23, 0x04, 0x43, 0x19, 0x60, 0x01, + 0x2c, 0x00, 0xd1, 0x0e, 0x48, 0x3c, 0x68, 0x00, + 0x28, 0x00, 0xd0, 0x0a, 0x48, 0x3a, 0x68, 0x00, + 0x49, 0x38, 0x62, 0xc8, 0x20, 0x00, 0x49, 0x38, + 0x60, 0x08, 0x20, 0x00, 0x21, 0x31, 0x06, 0x49, + 0x61, 0x88, 0x20, 0x00, 0x49, 0x30, 0x68, 0x09, + 0x31, 0x80, 0x70, 0x48, 0x20, 0x00, 0x49, 0x2e, + 0x68, 0x09, 0x31, 0x80, 0x70, 0x88, 0x20, 0x00, + 0x49, 0x39, 0x60, 0x08, 0x20, 0x00, 0x49, 0x39, + 0x64, 0x08, 0x20, 0x03, 0x49, 0x2a, 0x61, 0x08, + 0x25, 0x00, 0x2d, 0x20, 0xd3, 0x02, 0xe0, 0x06, + 0x35, 0x01, 0xe7, 0xfa, 0x20, 0xff, 0x49, 0x24, + 0x68, 0x09, 0x55, 0x48, 0xe7, 0xf8, 0x20, 0xff, + 0x49, 0x21, 0x68, 0x09, 0x31, 0x40, 0x72, 0x08, + 0x20, 0xff, 0x49, 0x1f, 0x68, 0x09, 0x31, 0x40, + 0x76, 0x08, 0x20, 0xff, 0x49, 0x1c, 0x68, 0x09, + 0x31, 0x60, 0x72, 0x08, 0x20, 0xff, 0x49, 0x1a, + 0x68, 0x09, 0x31, 0x20, 0x72, 0x08, 0x20, 0xff, + 0x49, 0x17, 0x68, 0x09, 0x31, 0x20, 0x76, 0x08, + 0x20, 0xff, 0x49, 0x15, 0x68, 0x09, 0x31, 0x60, + 0x76, 0x08, 0x20, 0x00, 0x49, 0x12, 0x68, 0x09, + 0x31, 0x40, 0x72, 0x88, 0x20, 0x00, 0x49, 0x10, + 0x68, 0x09, 0x31, 0x40, 0x76, 0x88, 0x20, 0x00, + 0x49, 0x0d, 0x68, 0x09, 0x31, 0x60, 0x72, 0x88, + 0x20, 0x00, 0x49, 0x0b, 0x68, 0x09, 0x31, 0x20, + 0x72, 0x88, 0x20, 0x00, 0x49, 0x08, 0x68, 0x09, + 0x31, 0x20, 0x76, 0x88, 0x20, 0x00, 0x49, 0x06, + 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x20, 0x00, + 0x49, 0x03, 0x68, 0x09, 0x31, 0x80, 0x70, 0xc8, + 0x20, 0x00, 0xe6, 0x85, 0xe6, 0x84, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x4c, 0x62, 0x00, 0x03, 0x00, + 0x66, 0x00, 0x01, 0x00, 0xa0, 0x00, 0x0d, 0x80, + 0x2e, 0x08, 0x20, 0x10, 0x66, 0x00, 0x00, 0x08, + 0x2e, 0x01, 0x84, 0x8c, 0xdf, 0xff, 0xff, 0xff, + 0x62, 0x01, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0x50, + 0xfc, 0xb7, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0x23, 0x48, 0x00, 0x00, 0x66, 0x00, 0x01, 0x18, + 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, + 0xb5, 0xf7, 0x1c, 0x17, 0x98, 0x00, 0x06, 0x02, + 0x0e, 0x12, 0x99, 0x01, 0x06, 0x0d, 0x0e, 0x2d, + 0x48, 0x6a, 0x68, 0x00, 0x5c, 0x81, 0x2a, 0x20, + 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x29, 0xff, 0xd1, 0x01, + 0x20, 0x4b, 0xe7, 0xf7, 0x48, 0x64, 0x69, 0x80, + 0x28, 0x00, 0xd1, 0x03, 0x29, 0x04, 0xd1, 0x01, + 0x20, 0x58, 0xe7, 0xef, 0x48, 0x60, 0x69, 0x80, + 0x28, 0x00, 0xd1, 0x03, 0x29, 0x02, 0xd0, 0x01, + 0x29, 0x03, 0xd1, 0x0b, 0x48, 0x5c, 0x69, 0x80, + 0x28, 0x02, 0xd1, 0x01, 0x29, 0x00, 0xd1, 0x05, + 0x48, 0x59, 0x69, 0x80, 0x28, 0x01, 0xd1, 0x03, + 0x29, 0x01, 0xd0, 0x01, 0x20, 0x4d, 0xe7, 0xd9, + 0x29, 0x02, 0xd1, 0x05, 0x48, 0x53, 0x68, 0x00, + 0x30, 0x40, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x17, + 0x29, 0x03, 0xd1, 0x05, 0x48, 0x4f, 0x68, 0x00, + 0x30, 0x40, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x0f, + 0x29, 0x00, 0xd1, 0x05, 0x48, 0x4b, 0x68, 0x00, + 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x07, + 0x29, 0x01, 0xd1, 0x07, 0x48, 0x47, 0x68, 0x00, + 0x30, 0x20, 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x01, + 0x20, 0x4e, 0xe7, 0xb7, 0x68, 0x78, 0x28, 0x00, + 0xd1, 0x01, 0x20, 0x4c, 0xe7, 0xb2, 0x23, 0x01, + 0x01, 0x08, 0x4e, 0x40, 0x68, 0x36, 0x19, 0x80, + 0x30, 0x20, 0x72, 0x83, 0x2d, 0x01, 0xd1, 0x0b, + 0x20, 0x33, 0x06, 0x40, 0x6e, 0x40, 0x23, 0x0d, + 0x06, 0x9b, 0x1a, 0xc0, 0x00, 0xd3, 0x4e, 0x3b, + 0x68, 0x36, 0x19, 0x9b, 0x60, 0x58, 0xe0, 0x12, + 0x2d, 0x02, 0xd1, 0x0a, 0x48, 0x38, 0x6c, 0xc0, + 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc3, 0x00, 0xd0, + 0x4e, 0x34, 0x68, 0x36, 0x19, 0x80, 0x60, 0x43, + 0xe0, 0x05, 0x68, 0x3b, 0x00, 0xd0, 0x4e, 0x31, + 0x68, 0x36, 0x19, 0x80, 0x60, 0x43, 0x68, 0x3b, + 0x01, 0x08, 0x4e, 0x2c, 0x68, 0x36, 0x19, 0x80, + 0x62, 0x03, 0x68, 0x7b, 0x01, 0x08, 0x4e, 0x29, + 0x68, 0x36, 0x19, 0x80, 0x62, 0x43, 0x01, 0x08, + 0x4b, 0x26, 0x68, 0x1b, 0x18, 0xc0, 0x62, 0xc7, + 0x01, 0x08, 0x4b, 0x24, 0x68, 0x1b, 0x18, 0xc0, + 0x30, 0x20, 0x72, 0x45, 0x01, 0x08, 0x4b, 0x21, + 0x68, 0x1b, 0x18, 0xc0, 0x30, 0x20, 0x72, 0x02, + 0x20, 0x00, 0x60, 0x78, 0x20, 0x00, 0x72, 0x78, + 0x20, 0x00, 0x4b, 0x20, 0x60, 0x18, 0x20, 0x00, + 0x4b, 0x1f, 0x64, 0x18, 0x01, 0x08, 0x4b, 0x19, + 0x68, 0x1b, 0x18, 0xc0, 0x6a, 0x40, 0x28, 0xbc, + 0xdd, 0x01, 0x24, 0xbc, 0xe0, 0x04, 0x01, 0x08, + 0x4b, 0x14, 0x68, 0x1b, 0x18, 0xc0, 0x6a, 0x44, + 0x48, 0x18, 0x60, 0x04, 0x29, 0x01, 0xd1, 0x14, + 0x20, 0x01, 0x4b, 0x17, 0x62, 0x98, 0x48, 0x17, + 0x68, 0x03, 0x04, 0x1b, 0x0c, 0x1b, 0x60, 0x03, + 0x48, 0x14, 0x04, 0x23, 0x68, 0x06, 0x43, 0x33, + 0x60, 0x03, 0x48, 0x13, 0x68, 0x06, 0x23, 0x20, + 0x43, 0x33, 0x60, 0x03, 0x20, 0x01, 0x4b, 0x0e, + 0x63, 0x18, 0x48, 0x07, 0x69, 0x80, 0x28, 0x00, + 0xd1, 0x04, 0x48, 0x0e, 0x68, 0x06, 0x23, 0x28, + 0x43, 0x33, 0x60, 0x03, 0x20, 0x00, 0xe7, 0x31, + 0xe7, 0x30, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0x4c, + 0x66, 0x00, 0x01, 0x00, 0x2e, 0x08, 0x5d, 0xdc, + 0x66, 0x00, 0x00, 0x80, 0x9e, 0x00, 0x0a, 0x00, + 0x9e, 0x00, 0x0a, 0x80, 0x62, 0x00, 0x03, 0x00, + 0x62, 0x01, 0x00, 0x00, 0x62, 0x01, 0x00, 0x20, + 0x62, 0x01, 0x00, 0x24, 0x64, 0x00, 0x00, 0x60, + 0xb5, 0xf3, 0x1c, 0x0f, 0x98, 0x00, 0x06, 0x06, + 0x0e, 0x36, 0xb0, 0x82, 0x4d, 0x68, 0x49, 0x69, + 0x91, 0x01, 0x48, 0x69, 0x68, 0x00, 0x5d, 0x84, + 0x2e, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x02, + 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2c, 0xff, 0xd1, 0x02, 0x20, 0x4b, 0xb0, 0x02, + 0xe7, 0xf6, 0x48, 0x62, 0x69, 0x80, 0x28, 0x00, + 0xd1, 0x05, 0x2c, 0x02, 0xd0, 0x03, 0x2c, 0x03, + 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, 0x48, 0x5d, + 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, 0x2c, 0x00, + 0xd1, 0x05, 0x48, 0x5a, 0x69, 0x80, 0x28, 0x01, + 0xd1, 0x04, 0x2c, 0x01, 0xd0, 0x02, 0x20, 0x4d, + 0xb0, 0x02, 0xe7, 0xdd, 0x48, 0x54, 0x68, 0x00, + 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x02, + 0x20, 0x4f, 0xb0, 0x02, 0xe7, 0xd4, 0x48, 0x50, + 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, + 0xd0, 0x02, 0x20, 0x50, 0xb0, 0x02, 0xe7, 0xcb, + 0x68, 0x78, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x4c, + 0xb0, 0x02, 0xe7, 0xc5, 0x2c, 0x04, 0xd1, 0x08, + 0x68, 0x79, 0x20, 0xbc, 0xf0, 0x01, 0xff, 0xac, + 0x29, 0x00, 0xd0, 0x02, 0x20, 0x59, 0xb0, 0x02, + 0xe7, 0xba, 0x48, 0x43, 0x68, 0x00, 0x30, 0x80, + 0x78, 0x80, 0x21, 0x01, 0x40, 0x81, 0x48, 0x41, + 0x68, 0x40, 0x40, 0x08, 0x07, 0x80, 0x0f, 0x80, + 0xd0, 0x02, 0x20, 0x51, 0xb0, 0x02, 0xe7, 0xab, + 0x20, 0x33, 0x06, 0x40, 0x6b, 0x80, 0x90, 0x00, + 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, 0x20, 0x52, + 0xb0, 0x02, 0xe7, 0xa1, 0x2c, 0x00, 0xd1, 0x04, + 0x48, 0x37, 0x68, 0x01, 0x23, 0xfd, 0x40, 0x19, + 0x60, 0x01, 0x20, 0x01, 0x49, 0x32, 0x68, 0x09, + 0x31, 0x60, 0x76, 0x88, 0x68, 0x38, 0x49, 0x30, + 0x68, 0x09, 0x67, 0x08, 0x68, 0x78, 0x49, 0x2e, + 0x68, 0x09, 0x67, 0x48, 0x48, 0x2c, 0x68, 0x00, + 0x67, 0xc7, 0x20, 0x00, 0x49, 0x2a, 0x68, 0x09, + 0x31, 0x60, 0x76, 0x48, 0x48, 0x28, 0x68, 0x00, + 0x30, 0x60, 0x76, 0x06, 0x20, 0x00, 0x60, 0x78, + 0x20, 0x00, 0x72, 0x78, 0x48, 0x24, 0x68, 0x00, + 0x5d, 0x80, 0x28, 0x01, 0xd1, 0x02, 0x20, 0x01, + 0x49, 0x24, 0x62, 0x88, 0x98, 0x00, 0x01, 0x00, + 0x19, 0x45, 0x48, 0x1f, 0x68, 0x00, 0x6f, 0x40, + 0x28, 0xbc, 0xdd, 0x07, 0x48, 0x20, 0x60, 0xa8, + 0x20, 0xbc, 0x49, 0x1b, 0x68, 0x09, 0x31, 0x80, + 0x70, 0x08, 0xe0, 0x0d, 0x48, 0x18, 0x68, 0x00, + 0x6f, 0x40, 0x23, 0x01, 0x07, 0x9b, 0x43, 0x18, + 0x60, 0xa8, 0x48, 0x15, 0x68, 0x00, 0x6f, 0x40, + 0x49, 0x13, 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, + 0x48, 0x11, 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, + 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, 0x99, 0x01, + 0x18, 0x41, 0x91, 0x01, 0x48, 0x0c, 0x68, 0x00, + 0x6f, 0x00, 0x60, 0x28, 0x99, 0x01, 0x1d, 0x08, + 0x60, 0x68, 0x20, 0x01, 0x06, 0x00, 0x60, 0xe8, + 0x99, 0x00, 0x20, 0x01, 0x40, 0x88, 0x21, 0x33, + 0x06, 0x49, 0x63, 0x48, 0x20, 0x00, 0xb0, 0x02, + 0xe7, 0x3a, 0xb0, 0x02, 0xe7, 0x38, 0x00, 0x00, + 0x9e, 0x00, 0x09, 0x80, 0x9e, 0x00, 0x0b, 0x80, + 0x2e, 0x08, 0x7c, 0x4c, 0x66, 0x00, 0x01, 0x00, + 0x62, 0x00, 0x00, 0x1c, 0x62, 0x01, 0x00, 0x00, + 0x40, 0x00, 0x00, 0xbc, 0xb5, 0xf3, 0x1c, 0x0f, + 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, + 0x90, 0x00, 0xb0, 0x82, 0x48, 0xf9, 0x68, 0x00, + 0x99, 0x02, 0x5c, 0x44, 0x98, 0x02, 0x28, 0x20, + 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x03, 0xb0, 0x02, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2c, 0xff, + 0xd1, 0x02, 0x20, 0x4b, 0xb0, 0x03, 0xe7, 0xf6, + 0x48, 0xf1, 0x69, 0x80, 0x28, 0x00, 0xd1, 0x05, + 0x2c, 0x02, 0xd0, 0x03, 0x2c, 0x03, 0xd0, 0x01, + 0x2c, 0x04, 0xd1, 0x0b, 0x48, 0xec, 0x69, 0x80, + 0x28, 0x02, 0xd1, 0x01, 0x2c, 0x00, 0xd1, 0x05, + 0x48, 0xe9, 0x69, 0x80, 0x28, 0x01, 0xd1, 0x04, + 0x2c, 0x01, 0xd0, 0x02, 0x20, 0x4d, 0xb0, 0x03, + 0xe7, 0xdd, 0x48, 0xe4, 0x68, 0x00, 0x30, 0x60, + 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x4f, + 0xb0, 0x03, 0xe7, 0xd4, 0x68, 0x78, 0x28, 0x00, + 0xd1, 0x02, 0x20, 0x4c, 0xb0, 0x03, 0xe7, 0xce, + 0x2c, 0x04, 0xd1, 0x08, 0x68, 0x79, 0x20, 0xbc, + 0xf0, 0x01, 0xfe, 0xce, 0x29, 0x00, 0xd0, 0x02, + 0x20, 0x59, 0xb0, 0x03, 0xe7, 0xc3, 0x48, 0xd7, + 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, + 0xd0, 0x02, 0x20, 0x50, 0xb0, 0x03, 0xe7, 0xba, + 0x2c, 0x00, 0xd1, 0x04, 0x48, 0xd3, 0x68, 0x01, + 0x23, 0xfd, 0x40, 0x19, 0x60, 0x01, 0x48, 0xd2, + 0x68, 0x01, 0x23, 0x8d, 0x05, 0x9b, 0x43, 0x19, + 0x60, 0x01, 0x48, 0xd0, 0x21, 0x33, 0x06, 0x49, + 0x60, 0x48, 0x20, 0x01, 0x49, 0xc9, 0x68, 0x09, + 0x31, 0x60, 0x76, 0x88, 0x68, 0x38, 0x49, 0xc7, + 0x68, 0x09, 0x67, 0x08, 0x68, 0x78, 0x49, 0xc5, + 0x68, 0x09, 0x67, 0x48, 0x48, 0xc3, 0x68, 0x00, + 0x67, 0xc7, 0x20, 0x00, 0x49, 0xc1, 0x68, 0x09, + 0x31, 0x60, 0x76, 0x48, 0x98, 0x02, 0x49, 0xbf, + 0x68, 0x09, 0x31, 0x60, 0x76, 0x08, 0x20, 0x00, + 0x49, 0xbc, 0x68, 0x09, 0x6f, 0xc9, 0x60, 0x48, + 0x20, 0x00, 0x49, 0xba, 0x68, 0x09, 0x6f, 0xc9, + 0x72, 0x48, 0x48, 0xb8, 0x68, 0x00, 0x99, 0x02, + 0x5c, 0x40, 0x28, 0x01, 0xd1, 0x02, 0x20, 0x01, + 0x49, 0xb9, 0x62, 0x88, 0x48, 0xb3, 0x68, 0x00, + 0x30, 0x80, 0x78, 0x81, 0x20, 0x01, 0x40, 0x88, + 0x49, 0xb1, 0x68, 0x49, 0x40, 0x08, 0x07, 0x80, + 0x0f, 0x80, 0xd0, 0x1b, 0x20, 0x00, 0x49, 0xad, + 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x20, 0x51, + 0x49, 0xaa, 0x68, 0x09, 0x6f, 0xc9, 0x72, 0x48, + 0x48, 0xa8, 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x00, + 0x28, 0xff, 0xd0, 0x07, 0x48, 0xa5, 0x68, 0x00, + 0x6f, 0xc0, 0x7a, 0x01, 0x20, 0x01, 0x40, 0x88, + 0xf0, 0x05, 0xfd, 0x8e, 0x20, 0x51, 0xb0, 0x03, + 0xe7, 0x55, 0xe1, 0x6c, 0x20, 0x33, 0x06, 0x40, + 0x6b, 0x81, 0x91, 0x00, 0x99, 0x00, 0x20, 0x04, + 0x40, 0x08, 0xd0, 0x07, 0x20, 0x04, 0xf0, 0x00, + 0xfc, 0xb3, 0x20, 0x33, 0x06, 0x40, 0x6b, 0x81, + 0x91, 0x00, 0xe7, 0xf3, 0x4d, 0x9d, 0x99, 0x00, + 0x01, 0x08, 0x19, 0x45, 0x48, 0x95, 0x68, 0x00, + 0x6f, 0x40, 0x28, 0xbc, 0xdd, 0x07, 0x48, 0x9a, + 0x60, 0xa8, 0x20, 0xbc, 0x49, 0x91, 0x68, 0x09, + 0x31, 0x80, 0x70, 0x08, 0xe0, 0x0d, 0x48, 0x8f, + 0x68, 0x00, 0x6f, 0x40, 0x23, 0x01, 0x07, 0x9b, + 0x43, 0x18, 0x60, 0xa8, 0x48, 0x8b, 0x68, 0x00, + 0x6f, 0x40, 0x49, 0x8a, 0x68, 0x09, 0x31, 0x80, + 0x70, 0x08, 0x48, 0x90, 0x90, 0x01, 0x48, 0x87, + 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x00, 0x43, + 0x18, 0x18, 0x01, 0x80, 0x99, 0x01, 0x18, 0x40, + 0x90, 0x01, 0x48, 0x82, 0x68, 0x00, 0x6f, 0x00, + 0x60, 0x28, 0x98, 0x01, 0x30, 0x04, 0x60, 0x68, + 0x20, 0x01, 0x06, 0x00, 0x60, 0xe8, 0x99, 0x00, + 0x20, 0x01, 0x40, 0x88, 0x21, 0x33, 0x06, 0x49, + 0x63, 0x48, 0x48, 0x83, 0x6b, 0x00, 0x23, 0x01, + 0x06, 0x1b, 0x40, 0x18, 0xd1, 0x03, 0x20, 0x04, + 0xf0, 0x00, 0xfc, 0x6a, 0xe7, 0xf5, 0x20, 0x01, + 0x06, 0x00, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, + 0x4e, 0x7c, 0x48, 0x72, 0x68, 0x00, 0x30, 0x80, + 0x78, 0x80, 0x01, 0x00, 0x19, 0x86, 0x98, 0x01, + 0x30, 0x04, 0x60, 0x30, 0x48, 0x78, 0x60, 0x70, + 0x48, 0x6c, 0x68, 0x00, 0x30, 0x80, 0x78, 0x00, + 0x23, 0x01, 0x07, 0x9b, 0x43, 0x18, 0x60, 0xb0, + 0x20, 0x01, 0x05, 0x80, 0x60, 0xf0, 0x48, 0x67, + 0x68, 0x00, 0x30, 0x80, 0x78, 0x81, 0x20, 0x01, + 0x40, 0x88, 0x49, 0x65, 0x60, 0xc8, 0x48, 0x63, + 0x68, 0x00, 0x30, 0x60, 0x7e, 0x00, 0x49, 0x61, + 0x68, 0x09, 0x5c, 0x08, 0x28, 0x00, 0xd0, 0x48, + 0x28, 0x01, 0xd0, 0x47, 0x28, 0x02, 0xd0, 0x02, + 0x28, 0x03, 0xd0, 0x21, 0xe0, 0x5a, 0x48, 0x67, + 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, + 0x48, 0x58, 0x68, 0x00, 0x6f, 0x40, 0x49, 0x57, + 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, 0x1a, 0x40, + 0x28, 0xbc, 0xd8, 0x05, 0x48, 0x5f, 0x68, 0x01, + 0x23, 0x10, 0x43, 0x19, 0x60, 0x01, 0xe0, 0x05, + 0x48, 0x5c, 0x68, 0x01, 0x23, 0x10, 0x43, 0xdb, + 0x40, 0x19, 0x60, 0x01, 0x48, 0x59, 0x68, 0x01, + 0x23, 0x08, 0x43, 0x19, 0x60, 0x01, 0xe0, 0x39, + 0x48, 0x56, 0x68, 0x01, 0x23, 0x04, 0x43, 0x19, + 0x60, 0x01, 0x48, 0x48, 0x68, 0x00, 0x6f, 0x40, + 0x49, 0x46, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, + 0x1a, 0x40, 0x28, 0xbc, 0xd8, 0x05, 0x48, 0x4f, + 0x68, 0x01, 0x23, 0x10, 0x43, 0x19, 0x60, 0x01, + 0xe0, 0x05, 0x48, 0x4c, 0x68, 0x01, 0x23, 0x10, + 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, 0x48, 0x49, + 0x68, 0x01, 0x23, 0x08, 0x43, 0x19, 0x60, 0x01, + 0xe0, 0x18, 0xe0, 0x17, 0x48, 0x46, 0x68, 0x01, + 0x04, 0x09, 0x0c, 0x09, 0x60, 0x01, 0x48, 0x44, + 0x49, 0x36, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, + 0x04, 0x09, 0x68, 0x02, 0x43, 0x11, 0x60, 0x01, + 0x48, 0x40, 0x68, 0x01, 0x23, 0x20, 0x43, 0xdb, + 0x40, 0x19, 0x60, 0x01, 0x20, 0x01, 0x49, 0x34, + 0x63, 0x08, 0xe7, 0xff, 0x48, 0x36, 0x6b, 0x00, + 0x23, 0x01, 0x05, 0x9b, 0x40, 0x18, 0xd1, 0x03, + 0x20, 0x04, 0xf0, 0x00, 0xfb, 0xd1, 0xe7, 0xf5, + 0x20, 0x01, 0x05, 0x80, 0x21, 0x33, 0x06, 0x49, + 0x60, 0x48, 0x48, 0x26, 0x68, 0x00, 0x30, 0x80, + 0x78, 0x80, 0x23, 0x01, 0x40, 0x58, 0x49, 0x23, + 0x68, 0x09, 0x31, 0x80, 0x70, 0x88, 0x48, 0x21, + 0x68, 0x00, 0x6f, 0x40, 0x49, 0x1f, 0x68, 0x09, + 0x31, 0x80, 0x78, 0x09, 0x1a, 0x40, 0x49, 0x1d, + 0x68, 0x09, 0x67, 0x48, 0x48, 0x1b, 0x68, 0x00, + 0x6f, 0xc0, 0x30, 0x04, 0x49, 0x19, 0x68, 0x09, + 0x31, 0x80, 0x78, 0x09, 0x68, 0x02, 0x18, 0x89, + 0x60, 0x01, 0x48, 0x16, 0x68, 0x00, 0x6f, 0x00, + 0x49, 0x14, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, + 0x18, 0x40, 0x49, 0x12, 0x68, 0x09, 0x67, 0x08, + 0x48, 0x10, 0x68, 0x00, 0x6f, 0x40, 0x28, 0x00, + 0xd0, 0x00, 0xe6, 0xb3, 0x48, 0x11, 0x21, 0x33, + 0x06, 0x49, 0x60, 0x48, 0x48, 0x0e, 0x68, 0x01, + 0x4b, 0x19, 0x40, 0x19, 0x60, 0x01, 0x20, 0x48, + 0x49, 0x08, 0x68, 0x09, 0x6f, 0xc9, 0x72, 0x48, + 0x20, 0x00, 0x49, 0x06, 0x68, 0x09, 0x31, 0x60, + 0x76, 0x88, 0x48, 0x04, 0x68, 0x00, 0x6f, 0xc0, + 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x29, 0x48, 0x01, + 0xe0, 0x20, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0x4c, + 0x66, 0x00, 0x01, 0x00, 0x62, 0x00, 0x00, 0x1c, + 0x66, 0x00, 0x00, 0x08, 0x23, 0x48, 0x00, 0x00, + 0x62, 0x01, 0x00, 0x00, 0x9e, 0x00, 0x09, 0x80, + 0x40, 0x00, 0x00, 0xbc, 0x9e, 0x00, 0x0b, 0x80, + 0x66, 0x00, 0x00, 0x80, 0x9e, 0x00, 0x09, 0xc0, + 0x66, 0x00, 0x01, 0xf0, 0x64, 0x00, 0x00, 0x60, + 0x62, 0x01, 0x00, 0x20, 0x62, 0x01, 0x00, 0x24, + 0xfc, 0xb7, 0xff, 0xff, 0x68, 0x00, 0x6f, 0xc0, + 0x7a, 0x01, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x05, + 0xfc, 0x23, 0x20, 0x00, 0xb0, 0x03, 0xe5, 0xea, + 0xb0, 0x02, 0xb0, 0x01, 0xe5, 0xe7, 0xe5, 0xe6, + 0xb5, 0xb0, 0x1c, 0x07, 0x06, 0x3d, 0x0e, 0x2d, + 0x48, 0x5d, 0x68, 0x00, 0x5d, 0x44, 0x2d, 0x20, + 0xdb, 0x03, 0x20, 0xa2, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x48, 0x59, 0x68, 0x00, 0x5d, 0x40, + 0x28, 0xff, 0xd1, 0x01, 0x20, 0x4b, 0xe7, 0xf5, + 0x48, 0x56, 0x69, 0x80, 0x28, 0x00, 0xd1, 0x05, + 0x2c, 0x02, 0xd0, 0x03, 0x2c, 0x03, 0xd0, 0x01, + 0x2c, 0x04, 0xd1, 0x0b, 0x48, 0x51, 0x69, 0x80, + 0x28, 0x02, 0xd1, 0x01, 0x2c, 0x00, 0xd1, 0x05, + 0x48, 0x4e, 0x69, 0x80, 0x28, 0x01, 0xd1, 0x04, + 0x2c, 0x01, 0xd0, 0x02, 0x20, 0x4d, 0xe7, 0xdd, + 0xe0, 0x90, 0x48, 0x4b, 0x68, 0x01, 0x4b, 0x4b, + 0x43, 0x19, 0x60, 0x01, 0x48, 0x49, 0x21, 0x33, + 0x06, 0x49, 0x60, 0x48, 0x48, 0x48, 0x68, 0x01, + 0x23, 0x04, 0x43, 0x19, 0x60, 0x01, 0x20, 0x00, + 0x49, 0x41, 0x68, 0x09, 0x31, 0x80, 0x70, 0x88, + 0x20, 0x00, 0x49, 0x3f, 0x68, 0x09, 0x31, 0x80, + 0x70, 0x48, 0x20, 0xff, 0x49, 0x3c, 0x68, 0x09, + 0x55, 0x48, 0x2c, 0x00, 0xd1, 0x03, 0x20, 0x18, + 0x21, 0x31, 0x06, 0x49, 0x62, 0x48, 0x01, 0x20, + 0x49, 0x37, 0x68, 0x09, 0x18, 0x40, 0x30, 0x20, + 0x7a, 0x80, 0x28, 0x00, 0xd0, 0x28, 0x20, 0x00, + 0x49, 0x38, 0x60, 0x08, 0x20, 0x00, 0x49, 0x38, + 0x64, 0x08, 0x20, 0x03, 0x49, 0x31, 0x61, 0x08, + 0x21, 0x55, 0x01, 0x20, 0x4a, 0x2e, 0x68, 0x12, + 0x18, 0x80, 0x6a, 0xc0, 0x72, 0x41, 0x21, 0x00, + 0x01, 0x20, 0x4a, 0x2b, 0x68, 0x12, 0x18, 0x80, + 0x30, 0x20, 0x72, 0x81, 0x01, 0x20, 0x49, 0x28, + 0x68, 0x09, 0x18, 0x40, 0x6a, 0xc0, 0x7a, 0x00, + 0x28, 0xff, 0xd0, 0x09, 0x01, 0x20, 0x49, 0x24, + 0x68, 0x09, 0x18, 0x40, 0x6a, 0xc0, 0x7a, 0x01, + 0x20, 0x01, 0x40, 0x88, 0xf0, 0x05, 0xfb, 0x9c, + 0x48, 0x1f, 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, + 0x28, 0x00, 0xd0, 0x2b, 0x48, 0x1c, 0x68, 0x00, + 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x0d, + 0x20, 0x00, 0x49, 0x19, 0x68, 0x09, 0x31, 0x80, + 0x70, 0xc8, 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x28, + 0x23, 0x00, 0x22, 0x00, 0x49, 0x1b, 0xf7, 0xf3, + 0xfe, 0xcd, 0xb0, 0x01, 0x20, 0x55, 0x49, 0x12, + 0x68, 0x09, 0x6f, 0xc9, 0x72, 0x48, 0x20, 0x00, + 0x49, 0x0f, 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, + 0x48, 0x0d, 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x00, + 0x28, 0xff, 0xd0, 0x07, 0x48, 0x0a, 0x68, 0x00, + 0x6f, 0xc0, 0x7a, 0x01, 0x20, 0x01, 0x40, 0x88, + 0xf0, 0x05, 0xfb, 0x6a, 0x48, 0x09, 0x21, 0x33, + 0x06, 0x49, 0x60, 0x48, 0x48, 0x06, 0x68, 0x01, + 0x4b, 0x0b, 0x40, 0x19, 0x60, 0x01, 0x20, 0x00, + 0xe7, 0x4c, 0xe7, 0x4b, 0xe7, 0x4a, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x4c, 0x66, 0x00, 0x01, 0x00, + 0x66, 0x00, 0x00, 0x08, 0x23, 0x48, 0x00, 0x00, + 0x66, 0x00, 0x01, 0x18, 0x9e, 0x00, 0x0a, 0x00, + 0x9e, 0x00, 0x0a, 0x80, 0x00, 0x00, 0xff, 0xff, + 0xfc, 0xb7, 0xff, 0xff, 0xb5, 0xff, 0x1c, 0x1f, + 0x98, 0x00, 0x06, 0x02, 0x0e, 0x12, 0x99, 0x01, + 0x06, 0x0d, 0x0e, 0x2d, 0x98, 0x02, 0x06, 0x04, + 0x0e, 0x24, 0x48, 0x2d, 0x68, 0x00, 0x5c, 0x81, + 0x2a, 0x20, 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x04, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x29, 0xff, + 0xd1, 0x01, 0x20, 0x4b, 0xe7, 0xf7, 0x48, 0x27, + 0x69, 0x80, 0x28, 0x00, 0xd1, 0x05, 0x29, 0x02, + 0xd0, 0x03, 0x29, 0x03, 0xd0, 0x01, 0x29, 0x04, + 0xd1, 0x0b, 0x48, 0x22, 0x69, 0x80, 0x28, 0x02, + 0xd1, 0x01, 0x29, 0x00, 0xd1, 0x05, 0x48, 0x1f, + 0x69, 0x80, 0x28, 0x01, 0xd1, 0x03, 0x29, 0x01, + 0xd0, 0x01, 0x20, 0x4d, 0xe7, 0xdf, 0x29, 0x05, + 0xd2, 0x2a, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, + 0x44, 0x9f, 0x1c, 0x00, 0x03, 0x07, 0x04, 0x05, + 0x06, 0x00, 0xe0, 0x24, 0xe0, 0x23, 0xe0, 0x22, + 0xe0, 0x21, 0x01, 0x08, 0x4b, 0x12, 0x68, 0x1b, + 0x18, 0xc0, 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, + 0xd1, 0x05, 0x48, 0x0f, 0x68, 0x00, 0x30, 0x60, + 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x49, + 0xe7, 0xc1, 0xe0, 0x13, 0x2d, 0x00, 0xd1, 0x05, + 0x00, 0xa0, 0x4b, 0x0b, 0x18, 0xc0, 0x68, 0x00, + 0x60, 0x38, 0xe0, 0x04, 0x68, 0x38, 0x00, 0xa6, + 0x4b, 0x07, 0x18, 0xf3, 0x60, 0x18, 0xe0, 0x02, + 0x20, 0x4a, 0xe7, 0xb0, 0xe7, 0xff, 0x20, 0x00, + 0xe7, 0xad, 0xe7, 0xac, 0xe7, 0xab, 0x00, 0x00, + 0x2e, 0x08, 0x7c, 0x4c, 0x66, 0x00, 0x01, 0x00, + 0x62, 0x01, 0x00, 0x80, 0xb5, 0xf7, 0xb0, 0x82, + 0x98, 0x02, 0x06, 0x03, 0x0e, 0x1b, 0x93, 0x00, + 0x99, 0x03, 0x06, 0x08, 0x0e, 0x00, 0x90, 0x01, + 0x9a, 0x04, 0x06, 0x15, 0x0e, 0x2d, 0xb0, 0x84, + 0x4a, 0xca, 0x4f, 0xcb, 0x48, 0xcb, 0x68, 0x00, + 0x9b, 0x04, 0x5c, 0xc4, 0x48, 0xca, 0x90, 0x02, + 0x21, 0x00, 0x23, 0x00, 0x93, 0x01, 0x9b, 0x04, + 0x2b, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x06, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2c, 0xff, 0xd1, 0x02, 0x20, 0x4b, 0xb0, 0x06, + 0xe7, 0xf6, 0x48, 0xc2, 0x69, 0x80, 0x28, 0x02, + 0xd1, 0x01, 0x2c, 0x00, 0xd1, 0x03, 0x48, 0xbf, + 0x69, 0x80, 0x28, 0x02, 0xd0, 0x02, 0x20, 0x4d, + 0xb0, 0x06, 0xe7, 0xe9, 0x98, 0x05, 0x28, 0x01, + 0xd1, 0x08, 0x48, 0xb8, 0x68, 0x00, 0x30, 0x80, + 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x50, + 0xb0, 0x06, 0xe7, 0xdd, 0x98, 0x05, 0x28, 0x00, + 0xd1, 0x05, 0x48, 0xb2, 0x68, 0x00, 0x30, 0x20, + 0x7a, 0x80, 0x28, 0x00, 0xd0, 0x08, 0x98, 0x05, + 0x28, 0x01, 0xd1, 0x08, 0x48, 0xad, 0x68, 0x00, + 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x02, + 0x20, 0x5a, 0xb0, 0x06, 0xe7, 0xc8, 0x20, 0x00, + 0x4b, 0xa8, 0x68, 0x1b, 0x6f, 0xdb, 0x72, 0x58, + 0x98, 0x05, 0x28, 0x00, 0xd1, 0x50, 0x2d, 0x01, + 0xd0, 0x01, 0x2d, 0x02, 0xd1, 0x32, 0x4e, 0xa6, + 0x68, 0x30, 0x23, 0x01, 0x04, 0xdb, 0x43, 0x18, + 0x60, 0x30, 0x20, 0x00, 0x4b, 0xa3, 0x60, 0x18, + 0x48, 0x9e, 0x68, 0x00, 0x30, 0x80, 0x78, 0x40, + 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, 0x9b, 0x02, + 0x18, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x68, 0x01, + 0x48, 0x9a, 0x69, 0x80, 0x07, 0x80, 0x0f, 0x80, + 0x01, 0x80, 0x43, 0x01, 0x23, 0x20, 0x43, 0x19, + 0x4b, 0x99, 0x43, 0x19, 0x98, 0x02, 0x60, 0x01, + 0x4e, 0x98, 0x68, 0x30, 0x23, 0x01, 0x04, 0xdb, + 0x43, 0x18, 0x60, 0x30, 0x4e, 0x92, 0x68, 0x30, + 0x4b, 0x95, 0x40, 0x18, 0x60, 0x30, 0x2c, 0x00, + 0xd1, 0x04, 0x20, 0x00, 0x4b, 0x8b, 0x68, 0x1b, + 0x33, 0x20, 0x72, 0x98, 0x2d, 0x02, 0xd0, 0x04, + 0x20, 0x01, 0x04, 0xc0, 0x23, 0x33, 0x06, 0x5b, + 0x60, 0x18, 0x2c, 0x00, 0xd1, 0x0f, 0x20, 0xff, + 0x02, 0x00, 0x40, 0x08, 0xd1, 0x0b, 0x2d, 0x02, + 0xd0, 0x09, 0x48, 0x82, 0x68, 0x00, 0x30, 0x80, + 0x78, 0x40, 0x23, 0x01, 0x40, 0x58, 0x4b, 0x7f, + 0x68, 0x1b, 0x33, 0x80, 0x70, 0x58, 0xe0, 0xed, + 0x2d, 0x01, 0xd1, 0x73, 0x2c, 0x00, 0xd1, 0x72, + 0x20, 0x31, 0x06, 0x40, 0x68, 0x80, 0x23, 0x08, + 0x40, 0x18, 0xd1, 0x3a, 0x48, 0x7a, 0x68, 0x06, + 0x23, 0x05, 0x05, 0x9b, 0x43, 0x33, 0x60, 0x03, + 0x68, 0x10, 0x4b, 0x7c, 0x40, 0x18, 0x60, 0x10, + 0x32, 0xc0, 0x68, 0x10, 0x4b, 0x79, 0x40, 0x18, + 0x60, 0x10, 0x20, 0x00, 0x4b, 0x6f, 0x68, 0x1b, + 0x67, 0x58, 0x20, 0x00, 0x4b, 0x6d, 0x68, 0x1b, + 0x33, 0x80, 0x70, 0x18, 0x48, 0x6d, 0x68, 0x80, + 0x23, 0x02, 0x40, 0x18, 0xd1, 0x04, 0x20, 0x00, + 0x4b, 0x68, 0x68, 0x1b, 0x33, 0x60, 0x76, 0x98, + 0x20, 0x5b, 0x4b, 0x66, 0x68, 0x1b, 0x6f, 0xdb, + 0x72, 0x58, 0x4e, 0x6d, 0x68, 0x30, 0x23, 0x02, + 0x43, 0x18, 0x60, 0x30, 0x4e, 0x67, 0x68, 0x30, + 0x23, 0x05, 0x05, 0x9b, 0x43, 0x18, 0x60, 0x30, + 0x4e, 0x61, 0x68, 0x30, 0x4b, 0x67, 0x40, 0x18, + 0x60, 0x30, 0x20, 0x5b, 0xb0, 0x06, 0xe7, 0x2b, + 0xe0, 0xae, 0x48, 0x5d, 0x68, 0x06, 0x23, 0x01, + 0x05, 0x9b, 0x43, 0x33, 0x60, 0x03, 0x20, 0x31, + 0x06, 0x40, 0x6a, 0x00, 0x23, 0x04, 0x40, 0x18, + 0xd1, 0x27, 0x9b, 0x01, 0x20, 0x31, 0x06, 0x40, + 0x6b, 0x00, 0x18, 0x1b, 0x93, 0x01, 0x4e, 0x5c, + 0x68, 0x30, 0x23, 0x3b, 0x40, 0x18, 0x60, 0x30, + 0x4e, 0x57, 0x68, 0x30, 0x23, 0x0e, 0x43, 0x18, + 0x60, 0x30, 0x4e, 0x55, 0x68, 0x30, 0x23, 0x0c, + 0x40, 0x18, 0x60, 0x30, 0x20, 0x37, 0x23, 0x31, + 0x06, 0x5b, 0x60, 0x98, 0x20, 0x01, 0x90, 0x00, + 0x98, 0x00, 0x28, 0x64, 0xd3, 0x04, 0xe0, 0x07, + 0x98, 0x00, 0x30, 0x01, 0x90, 0x00, 0xe7, 0xf7, + 0xe7, 0xfa, 0xe0, 0x01, 0xe0, 0x36, 0xe0, 0x34, + 0xe7, 0xd1, 0x4e, 0x46, 0x68, 0x30, 0x23, 0x01, + 0x05, 0x9b, 0x43, 0x18, 0x60, 0x30, 0x4e, 0x40, + 0x68, 0x30, 0x4b, 0x48, 0x40, 0x18, 0x60, 0x30, + 0x48, 0x3c, 0x68, 0x40, 0x28, 0x00, 0xd0, 0x0d, + 0x20, 0x5b, 0x4b, 0x38, 0x68, 0x1b, 0x6f, 0xdb, + 0x72, 0x58, 0x20, 0x00, 0x4b, 0x35, 0x68, 0x1b, + 0x33, 0x60, 0x76, 0x98, 0x20, 0x5b, 0xb0, 0x06, + 0xe6, 0xda, 0xe0, 0x5d, 0x48, 0x31, 0x68, 0x00, + 0x6f, 0xc0, 0x1d, 0x06, 0x48, 0x2f, 0x68, 0x00, + 0x30, 0x80, 0x78, 0x00, 0x9b, 0x01, 0x1a, 0xc0, + 0x68, 0x33, 0x18, 0xc0, 0x60, 0x30, 0x20, 0x5c, + 0x4b, 0x2a, 0x68, 0x1b, 0x6f, 0xdb, 0x72, 0x58, + 0x20, 0x00, 0x4b, 0x28, 0x68, 0x1b, 0x33, 0x60, + 0x76, 0x98, 0xe0, 0x3f, 0x20, 0x33, 0x06, 0x40, + 0x6b, 0x80, 0x90, 0x03, 0x23, 0x04, 0x40, 0x18, + 0xd0, 0x03, 0x20, 0x52, 0xb0, 0x06, 0xe6, 0xb7, + 0xe0, 0x3a, 0x98, 0x03, 0x01, 0x00, 0x19, 0xc7, + 0x48, 0x1e, 0x68, 0x00, 0x6f, 0x40, 0x28, 0xbc, + 0xdd, 0x07, 0x48, 0x29, 0x60, 0xb8, 0x20, 0xbc, + 0x4b, 0x1a, 0x68, 0x1b, 0x33, 0x80, 0x70, 0x18, + 0xe0, 0x0d, 0x48, 0x18, 0x68, 0x00, 0x6f, 0x40, + 0x23, 0x01, 0x07, 0x9b, 0x43, 0x18, 0x60, 0xb8, + 0x48, 0x14, 0x68, 0x00, 0x6f, 0x40, 0x4b, 0x13, + 0x68, 0x1b, 0x33, 0x80, 0x70, 0x18, 0x48, 0x11, + 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x00, 0x43, + 0x18, 0x18, 0x01, 0x80, 0x18, 0x82, 0x48, 0x0d, + 0x68, 0x00, 0x6f, 0x00, 0x60, 0x38, 0x1d, 0x10, + 0x60, 0x78, 0x20, 0x01, 0x06, 0x00, 0x60, 0xf8, + 0x9e, 0x03, 0x20, 0x01, 0x40, 0xb0, 0x23, 0x33, + 0x06, 0x5b, 0x63, 0x58, 0x20, 0x00, 0xb0, 0x06, + 0xe6, 0x7e, 0xb0, 0x04, 0xb0, 0x02, 0xe6, 0x7b, + 0xe6, 0x7a, 0x00, 0x00, 0x9e, 0x00, 0x0b, 0x80, + 0x9e, 0x00, 0x09, 0x80, 0x2e, 0x08, 0x7c, 0x4c, + 0x9e, 0x00, 0x0a, 0x00, 0x66, 0x00, 0x01, 0x00, + 0x66, 0x00, 0x00, 0x08, 0x62, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x04, + 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, + 0x62, 0x00, 0x00, 0x1c, 0xfe, 0xbf, 0xff, 0xff, + 0x62, 0x00, 0x00, 0x08, 0xff, 0xbf, 0xff, 0xff, + 0x40, 0x00, 0x00, 0xbc, 0x48, 0x07, 0x69, 0x80, + 0x28, 0x02, 0xd0, 0x03, 0x48, 0x05, 0x69, 0x80, + 0x28, 0x03, 0xd1, 0x04, 0x20, 0x31, 0x06, 0x40, + 0x6a, 0x80, 0x47, 0x70, 0xe0, 0x01, 0x20, 0x00, + 0xe7, 0xfb, 0xe7, 0xfa, 0x66, 0x00, 0x01, 0x00, + 0xb5, 0xb0, 0x27, 0x0f, 0x20, 0x31, 0x06, 0x40, + 0x68, 0xc0, 0x09, 0x05, 0xf7, 0xff, 0xff, 0xe6, + 0x43, 0xc4, 0x48, 0x18, 0x69, 0x80, 0x28, 0x00, + 0xd0, 0x03, 0x48, 0x16, 0x69, 0x80, 0x28, 0x01, + 0xd1, 0x03, 0x1c, 0x38, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x2d, 0x09, 0xd2, 0x1e, 0xa3, 0x02, + 0x5d, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x05, 0x05, 0x05, 0x05, 0x05, 0x07, 0x07, 0x07, + 0x0e, 0x00, 0x1c, 0x2f, 0xe0, 0x13, 0x20, 0x08, + 0x40, 0x20, 0xd0, 0x01, 0x1c, 0x2f, 0xe0, 0x00, + 0x27, 0x02, 0xe0, 0x0c, 0x20, 0x08, 0x40, 0x20, + 0xd0, 0x06, 0x20, 0x02, 0x40, 0x20, 0xd0, 0x01, + 0x27, 0x07, 0xe0, 0x00, 0x27, 0x08, 0xe0, 0x00, + 0x27, 0x02, 0xe0, 0x00, 0xe7, 0xff, 0x1c, 0x38, + 0xe7, 0xd8, 0xe7, 0xd7, 0x66, 0x00, 0x01, 0x00, + 0x1c, 0x01, 0x29, 0x07, 0xd2, 0x0f, 0xa3, 0x02, + 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, + 0x04, 0x05, 0x06, 0x09, 0x08, 0x07, 0x0a, 0x00, + 0xe0, 0x06, 0xe0, 0x05, 0xe0, 0x04, 0xe0, 0x03, + 0xe0, 0x02, 0xe0, 0x01, 0xe0, 0x00, 0xe7, 0xff, + 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, + 0x20, 0x1d, 0x02, 0x80, 0x69, 0x80, 0x49, 0x06, + 0x60, 0x08, 0x20, 0x1d, 0x02, 0x80, 0x69, 0x40, + 0x49, 0x04, 0x60, 0x08, 0x20, 0x1d, 0x02, 0x80, + 0x69, 0xc0, 0x49, 0x03, 0x60, 0x08, 0x47, 0x70, + 0x2e, 0x08, 0x94, 0x98, 0x2e, 0x08, 0x94, 0x9c, + 0x2e, 0x08, 0x94, 0xa0, 0xb5, 0xf1, 0xb0, 0x81, + 0x20, 0x00, 0x4d, 0x21, 0x95, 0x00, 0x21, 0x00, + 0x22, 0x00, 0x23, 0x00, 0x43, 0xdb, 0x4c, 0x1f, + 0x68, 0x64, 0x42, 0x8c, 0xdd, 0x21, 0x1c, 0x0c, + 0x31, 0x01, 0x00, 0xa4, 0x9d, 0x00, 0x59, 0x2f, + 0x42, 0x9f, 0xd0, 0xf8, 0x4c, 0x19, 0x68, 0x64, + 0x42, 0x8c, 0xda, 0x00, 0xe0, 0x15, 0x32, 0x01, + 0x1c, 0x0c, 0x31, 0x01, 0x00, 0xa4, 0x9d, 0x00, + 0x59, 0x2b, 0x42, 0x9f, 0xd0, 0xf8, 0x02, 0x9c, + 0x43, 0x3c, 0x1c, 0x25, 0x1c, 0x04, 0x30, 0x01, + 0x00, 0xa4, 0x9e, 0x01, 0x51, 0x35, 0x4c, 0x0f, + 0x68, 0x64, 0x42, 0x8c, 0xdb, 0x00, 0x32, 0x01, + 0xe7, 0xd9, 0x28, 0x08, 0xd3, 0x02, 0xe0, 0x07, + 0x30, 0x01, 0xe7, 0xfa, 0x25, 0x00, 0x43, 0xed, + 0x00, 0x84, 0x9e, 0x01, 0x51, 0x35, 0xe7, 0xf7, + 0x4c, 0x07, 0x68, 0x24, 0x2c, 0x00, 0xd1, 0x02, + 0x24, 0x0d, 0x06, 0xe4, 0x61, 0x22, 0xb0, 0x01, + 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x7c, 0xd4, 0x2e, 0x08, 0x7d, 0x9c, + 0x2e, 0x08, 0x94, 0x8c, 0xb5, 0x80, 0x48, 0xdc, + 0x68, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x48, 0xda, + 0x68, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0xf7, 0xff, 0xff, 0x92, 0x48, 0xd7, 0x49, 0xd8, + 0x60, 0x08, 0x48, 0xd8, 0x49, 0xd8, 0x60, 0x08, + 0x48, 0xd8, 0x49, 0xd9, 0x60, 0x08, 0x48, 0xd3, + 0x49, 0xd8, 0x68, 0x0b, 0x4a, 0xd8, 0x21, 0x00, + 0xf0, 0x01, 0xf8, 0xda, 0x20, 0x00, 0x49, 0xd0, + 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0xd0, + 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0xd0, + 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0xca, + 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, + 0x66, 0x88, 0x48, 0xce, 0x49, 0xc6, 0x68, 0x09, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, + 0x20, 0x00, 0x49, 0xc5, 0x68, 0x09, 0x23, 0x07, + 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x48, 0xc7, + 0x49, 0xc1, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, + 0x18, 0xc9, 0x66, 0xc8, 0x20, 0x00, 0x49, 0xc0, + 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, + 0x66, 0x88, 0x48, 0xc0, 0x49, 0xbc, 0x68, 0x09, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, + 0x27, 0x00, 0x2f, 0x19, 0xd3, 0x02, 0xe0, 0x38, + 0x37, 0x01, 0xe7, 0xfa, 0x48, 0xba, 0x00, 0xb9, + 0x4a, 0xb1, 0x68, 0x12, 0x18, 0x89, 0x23, 0x0d, + 0x01, 0xdb, 0x18, 0xc9, 0x62, 0x08, 0x48, 0xb6, + 0x00, 0xb9, 0x4a, 0xad, 0x68, 0x12, 0x18, 0x89, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x60, 0x48, + 0x48, 0xb1, 0x00, 0xb9, 0x4a, 0xaa, 0x68, 0x12, + 0x18, 0x89, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x62, 0x08, 0x48, 0xad, 0x00, 0xb9, 0x4a, 0xa6, + 0x68, 0x12, 0x18, 0x89, 0x23, 0x07, 0x02, 0x1b, + 0x18, 0xc9, 0x60, 0x48, 0x48, 0xa8, 0x00, 0xb9, + 0x4a, 0xa3, 0x68, 0x12, 0x18, 0x89, 0x23, 0x0d, + 0x01, 0xdb, 0x18, 0xc9, 0x62, 0x08, 0x48, 0xa4, + 0x00, 0xb9, 0x4a, 0x9f, 0x68, 0x12, 0x18, 0x89, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x60, 0x48, + 0xe7, 0xc6, 0x27, 0x00, 0x2f, 0x07, 0xd3, 0x02, + 0xe0, 0x86, 0x37, 0x01, 0xe7, 0xfa, 0x48, 0x9c, + 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x92, + 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, + 0x18, 0xc9, 0x60, 0x08, 0x48, 0x96, 0x00, 0xb9, + 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x8c, 0x68, 0x12, + 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, + 0x67, 0xc8, 0x48, 0x91, 0x00, 0xb9, 0x19, 0xc9, + 0x00, 0xc9, 0x4a, 0x87, 0x68, 0x12, 0x18, 0x89, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x48, + 0x48, 0x8b, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, + 0x4a, 0x81, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, + 0x02, 0x1b, 0x18, 0xc9, 0x67, 0x88, 0x48, 0x86, + 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x7e, + 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, + 0x18, 0xc9, 0x60, 0x08, 0x48, 0x80, 0x00, 0xb9, + 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x78, 0x68, 0x12, + 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, + 0x67, 0xc8, 0x48, 0x7b, 0x00, 0xb9, 0x19, 0xc9, + 0x00, 0xc9, 0x4a, 0x73, 0x68, 0x12, 0x18, 0x89, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x48, + 0x48, 0x75, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, + 0x4a, 0x6d, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, + 0x02, 0x1b, 0x18, 0xc9, 0x67, 0x88, 0x48, 0x70, + 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x6a, + 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, + 0x18, 0xc9, 0x60, 0x08, 0x48, 0x6a, 0x00, 0xb9, + 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x64, 0x68, 0x12, + 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, + 0x67, 0xc8, 0x48, 0x65, 0x00, 0xb9, 0x19, 0xc9, + 0x00, 0xc9, 0x4a, 0x5f, 0x68, 0x12, 0x18, 0x89, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x48, + 0x48, 0x5f, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, + 0x4a, 0x59, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, + 0x02, 0x1b, 0x18, 0xc9, 0x67, 0x88, 0xe7, 0x78, + 0x27, 0x00, 0x2f, 0x12, 0xd3, 0x02, 0xe0, 0x56, + 0x37, 0x01, 0xe7, 0xfa, 0x48, 0x56, 0x21, 0x4c, + 0x43, 0x79, 0x4a, 0x4d, 0x68, 0x12, 0x18, 0x89, + 0x62, 0xc8, 0x48, 0x53, 0x21, 0x4c, 0x43, 0x79, + 0x4a, 0x49, 0x68, 0x12, 0x18, 0x89, 0x62, 0x88, + 0x48, 0x4f, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x46, + 0x68, 0x12, 0x18, 0x89, 0x63, 0x08, 0x48, 0x4c, + 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x42, 0x68, 0x12, + 0x18, 0x89, 0x62, 0x48, 0x48, 0x48, 0x21, 0x4c, + 0x43, 0x79, 0x4a, 0x41, 0x68, 0x12, 0x18, 0x89, + 0x62, 0xc8, 0x48, 0x45, 0x21, 0x4c, 0x43, 0x79, + 0x4a, 0x3d, 0x68, 0x12, 0x18, 0x89, 0x62, 0x88, + 0x48, 0x41, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x3a, + 0x68, 0x12, 0x18, 0x89, 0x63, 0x08, 0x48, 0x3e, + 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x36, 0x68, 0x12, + 0x18, 0x89, 0x62, 0x48, 0x48, 0x3a, 0x21, 0x4c, + 0x43, 0x79, 0x4a, 0x35, 0x68, 0x12, 0x18, 0x89, + 0x62, 0xc8, 0x48, 0x37, 0x21, 0x4c, 0x43, 0x79, + 0x4a, 0x31, 0x68, 0x12, 0x18, 0x89, 0x62, 0x88, + 0x48, 0x33, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x2e, + 0x68, 0x12, 0x18, 0x89, 0x63, 0x08, 0x48, 0x30, + 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x2a, 0x68, 0x12, + 0x18, 0x89, 0x62, 0x48, 0xe7, 0xa8, 0x20, 0x00, + 0x49, 0x25, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc9, 0x61, 0xc8, 0x20, 0x00, 0x49, 0x22, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x61, 0x88, 0x20, 0x00, 0x49, 0x1c, 0x68, 0x09, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0xc8, + 0x20, 0x00, 0x49, 0x19, 0x68, 0x09, 0x23, 0x0d, + 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x20, 0x00, + 0x49, 0x19, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xc9, 0x61, 0xc8, 0x20, 0x00, 0x49, 0x16, + 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, + 0x61, 0x88, 0x20, 0x92, 0x49, 0x17, 0x60, 0x08, + 0x27, 0x00, 0x2f, 0x08, 0xd3, 0x02, 0xe0, 0x08, + 0x37, 0x01, 0xe7, 0xfa, 0x20, 0x00, 0x43, 0xc0, + 0x00, 0xb9, 0x4b, 0x13, 0x18, 0xc9, 0x64, 0x08, + 0xe7, 0xf6, 0x20, 0x10, 0x21, 0x0d, 0x06, 0xc9, + 0x61, 0x08, 0x20, 0x01, 0x49, 0x0f, 0x60, 0x08, + 0x48, 0x0e, 0x68, 0x00, 0xe6, 0x4d, 0xe6, 0x4c, + 0x2e, 0x08, 0x60, 0x8c, 0x2e, 0x08, 0x7d, 0xc4, + 0x2e, 0x08, 0x7d, 0xb8, 0x2e, 0x08, 0x85, 0x5c, + 0x2e, 0x08, 0x7d, 0xbc, 0x2e, 0x08, 0x8c, 0xf4, + 0x2e, 0x08, 0x7d, 0xc0, 0x2e, 0x08, 0x94, 0x9c, + 0x00, 0x00, 0x16, 0xc8, 0x3f, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x94, 0x90, + 0x68, 0x00, 0x0d, 0x00, 0x2e, 0x08, 0x94, 0x8c, + 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x39, + 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x4d, 0x1c, 0x39, + 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x03, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x1c, 0x04, + 0x1c, 0x0f, 0x68, 0x78, 0x28, 0x07, 0xd9, 0x1d, + 0x23, 0x03, 0x02, 0x5b, 0x18, 0xf8, 0x6d, 0x40, + 0x28, 0x00, 0xd0, 0x06, 0x23, 0x03, 0x02, 0x5b, + 0x18, 0xf8, 0x6d, 0x80, 0x04, 0x00, 0x0c, 0x00, + 0xd1, 0x02, 0x20, 0x02, 0x60, 0xb8, 0xe0, 0x01, + 0x20, 0x03, 0x60, 0xb8, 0x1d, 0xfd, 0x35, 0x05, + 0x23, 0x65, 0x01, 0x1b, 0x18, 0xfe, 0x1c, 0x31, + 0x1c, 0x28, 0x4a, 0x11, 0x68, 0x13, 0x22, 0x28, + 0xf0, 0x00, 0xfe, 0xee, 0x2c, 0x06, 0xd0, 0x18, + 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, 0x19, 0xc0, + 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc6, 0x00, 0xa0, + 0x19, 0x00, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0xb1, + 0x00, 0xdb, 0x18, 0xc5, 0x20, 0x06, 0x1b, 0x00, + 0x00, 0x82, 0x18, 0x12, 0x00, 0xd2, 0x1c, 0x31, + 0x1c, 0x28, 0x4b, 0x04, 0x68, 0x1b, 0xf0, 0x00, + 0xfe, 0xd3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x94, 0x98, 0x2e, 0x08, 0x94, 0xa0, + 0xb5, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0x2f, 0x10, + 0xd0, 0x13, 0x20, 0x4c, 0x43, 0x78, 0x19, 0x00, + 0x1d, 0xc6, 0x36, 0x01, 0x20, 0x4c, 0x43, 0x78, + 0x19, 0x00, 0x1d, 0xc5, 0x35, 0x4d, 0x20, 0x10, + 0x1b, 0xc0, 0x22, 0x4c, 0x43, 0x42, 0x1c, 0x31, + 0x1c, 0x28, 0x4b, 0x03, 0x68, 0x1b, 0xf0, 0x00, + 0xfe, 0xb3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x94, 0xa0, 0xb5, 0x90, 0x1c, 0x04, + 0x1c, 0x0f, 0x1c, 0x39, 0x1c, 0x20, 0xf0, 0x00, + 0xf8, 0x07, 0x1c, 0x39, 0x20, 0x00, 0xf0, 0x00, + 0xf8, 0x33, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x00, 0xa0, + 0x19, 0x00, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0xb1, + 0x00, 0xdb, 0x18, 0xc6, 0x00, 0xa0, 0x19, 0x00, + 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x2b, 0x01, 0x5b, + 0x18, 0xc5, 0x20, 0x06, 0x1b, 0x00, 0x00, 0x82, + 0x18, 0x12, 0x00, 0xd2, 0x1c, 0x31, 0x1c, 0x28, + 0x4b, 0x09, 0x68, 0x1b, 0xf0, 0x00, 0xfe, 0x84, + 0x1d, 0xfe, 0x36, 0x05, 0x23, 0x65, 0x01, 0x1b, + 0x18, 0xfd, 0x1c, 0x31, 0x1c, 0x28, 0x4a, 0x05, + 0x68, 0x13, 0x22, 0x28, 0xf0, 0x00, 0xfe, 0x78, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x94, 0xa0, 0x2e, 0x08, 0x94, 0x98, + 0xb5, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0x20, 0x4c, + 0x43, 0x78, 0x19, 0x00, 0x1d, 0xc6, 0x36, 0x4d, + 0x20, 0x4c, 0x43, 0x78, 0x19, 0x00, 0x1d, 0xc5, + 0x35, 0x01, 0x20, 0x10, 0x1b, 0xc0, 0x22, 0x4c, + 0x43, 0x42, 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x03, + 0x68, 0x1b, 0xf0, 0x00, 0xfe, 0x59, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x94, 0xa0, + 0xb4, 0xb0, 0x1c, 0x02, 0x1c, 0x0f, 0x20, 0x00, + 0x1c, 0x03, 0x30, 0x01, 0x00, 0x9b, 0x18, 0x9c, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xe3, 0x68, 0x5b, + 0x10, 0x7c, 0x34, 0x01, 0x42, 0xa3, 0xd2, 0x00, + 0xe7, 0xf2, 0x38, 0x01, 0x21, 0x18, 0x42, 0x81, + 0xd8, 0x02, 0xe0, 0x1a, 0x39, 0x01, 0xe7, 0xfa, + 0x00, 0x8b, 0x18, 0x9c, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xe3, 0x69, 0xdc, 0x00, 0x8b, 0x18, 0x9d, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xeb, 0x62, 0x1c, + 0x00, 0x8b, 0x18, 0x9c, 0x23, 0x07, 0x02, 0x1b, + 0x18, 0xe3, 0x68, 0x1c, 0x00, 0x8b, 0x18, 0x9d, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xeb, 0x60, 0x5c, + 0xe7, 0xe4, 0x23, 0x00, 0x2b, 0x00, 0xd0, 0x10, + 0x10, 0x7b, 0x1c, 0x5c, 0x00, 0x83, 0x18, 0x9d, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xeb, 0x62, 0x1c, + 0x10, 0x7b, 0x1c, 0x5c, 0x00, 0x83, 0x18, 0x9d, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xeb, 0x60, 0x5c, + 0xe0, 0x0e, 0x10, 0x7c, 0x00, 0x83, 0x18, 0x9d, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xeb, 0x62, 0x1c, + 0x10, 0x7b, 0x1c, 0x5c, 0x00, 0x83, 0x18, 0x9d, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xeb, 0x60, 0x5c, + 0xbc, 0xb0, 0x47, 0x70, 0xb4, 0xb0, 0x1c, 0x02, + 0x1c, 0x0f, 0x21, 0x00, 0x1c, 0x0b, 0x31, 0x01, + 0x00, 0x9b, 0x18, 0x9c, 0x23, 0x07, 0x02, 0x1b, + 0x18, 0xe3, 0x68, 0x5b, 0x10, 0x7c, 0x34, 0x01, + 0x42, 0xa3, 0xd0, 0x00, 0xe7, 0xf2, 0x39, 0x01, + 0x1c, 0x08, 0x28, 0x18, 0xd3, 0x02, 0xe0, 0x1a, + 0x30, 0x01, 0xe7, 0xfa, 0x00, 0x83, 0x18, 0x9c, + 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xe3, 0x6a, 0x5c, + 0x00, 0x83, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xeb, 0x62, 0x1c, 0x00, 0x83, 0x18, 0x9c, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xe3, 0x68, 0x9c, + 0x00, 0x83, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, + 0x18, 0xeb, 0x60, 0x5c, 0xe7, 0xe4, 0x4c, 0x06, + 0x23, 0x07, 0x02, 0x1b, 0x18, 0xd3, 0x60, 0x1c, + 0x4c, 0x03, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xd3, + 0x66, 0x5c, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xb4, 0xb0, 0x1c, 0x07, + 0x1c, 0x0c, 0x1c, 0x15, 0x6a, 0xa1, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x19, 0x62, 0x39, 0x21, 0x01, + 0x02, 0x89, 0x43, 0x29, 0x62, 0x79, 0x6a, 0xe1, + 0x05, 0x89, 0x0d, 0x89, 0x61, 0xf9, 0x6b, 0x61, + 0x31, 0x01, 0x05, 0x89, 0x0d, 0x89, 0x61, 0xb9, + 0x69, 0x61, 0x60, 0xf9, 0x69, 0xa1, 0x61, 0x39, + 0x69, 0xe1, 0x61, 0x79, 0x68, 0xa1, 0x23, 0x01, + 0x06, 0x1b, 0x40, 0x19, 0xd0, 0x02, 0x49, 0x0f, + 0x60, 0xb9, 0xe0, 0x01, 0x21, 0x00, 0x60, 0xb9, + 0x6a, 0x60, 0x28, 0x00, 0xd0, 0x0b, 0x68, 0x41, + 0x60, 0x39, 0x78, 0x01, 0x00, 0x89, 0x4b, 0x0a, + 0x18, 0xc9, 0x60, 0x79, 0x68, 0xb9, 0x88, 0x42, + 0x43, 0x11, 0x60, 0xb9, 0xe0, 0x07, 0x21, 0x00, + 0x60, 0x39, 0x21, 0x00, 0x60, 0x79, 0x68, 0xb9, + 0x0c, 0x09, 0x04, 0x09, 0x60, 0xb9, 0xbc, 0xb0, + 0x47, 0x70, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0x68, 0x00, 0x08, 0x00, 0xb4, 0x80, 0x1c, 0x02, + 0x1c, 0x0f, 0x69, 0x79, 0x60, 0xd1, 0x69, 0xb9, + 0x61, 0x11, 0x69, 0xf9, 0x61, 0x51, 0x68, 0xb9, + 0x23, 0x01, 0x06, 0x1b, 0x40, 0x19, 0xd0, 0x02, + 0x49, 0x0e, 0x60, 0x91, 0xe0, 0x01, 0x21, 0x00, + 0x60, 0x91, 0x6a, 0x78, 0x28, 0x00, 0xd0, 0x0b, + 0x68, 0x41, 0x60, 0x11, 0x78, 0x01, 0x00, 0x89, + 0x4b, 0x09, 0x18, 0xc9, 0x60, 0x51, 0x68, 0x91, + 0x88, 0x43, 0x43, 0x19, 0x60, 0x91, 0xe0, 0x07, + 0x21, 0x00, 0x60, 0x11, 0x21, 0x00, 0x60, 0x51, + 0x68, 0x91, 0x0c, 0x09, 0x04, 0x09, 0x60, 0x91, + 0xbc, 0x80, 0x47, 0x70, 0xff, 0xff, 0x00, 0x00, + 0x68, 0x00, 0x08, 0x00, 0x1c, 0x01, 0x48, 0x07, + 0x62, 0x08, 0x48, 0x06, 0x62, 0x48, 0x48, 0x05, + 0x61, 0xc8, 0x48, 0x04, 0x61, 0x88, 0x20, 0x00, + 0x60, 0x08, 0x20, 0x00, 0x60, 0x48, 0x20, 0x00, + 0x60, 0x88, 0x47, 0x70, 0x00, 0x00, 0xff, 0xff, + 0xb5, 0xb0, 0x1c, 0x07, 0x1c, 0x0c, 0x2c, 0x07, + 0xd2, 0x73, 0x25, 0x00, 0x2d, 0x07, 0xdb, 0x02, + 0xe0, 0x2f, 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa8, + 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, + 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x00, 0xa9, + 0x19, 0x49, 0x00, 0xc9, 0x19, 0xc9, 0x23, 0x0b, + 0x01, 0xdb, 0x18, 0xc9, 0x68, 0x49, 0x42, 0x88, + 0xd0, 0x1a, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, + 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, + 0x68, 0x40, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x02, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, + 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, + 0x68, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x01, 0x48, 0xf8, 0xf0, 0x00, 0xfb, 0xd2, + 0xe7, 0xcf, 0x23, 0xcf, 0x00, 0xdb, 0x18, 0xf8, + 0xf7, 0xff, 0xfb, 0xb8, 0x25, 0x00, 0x2d, 0x07, + 0xdb, 0x02, 0xe0, 0x54, 0x35, 0x01, 0xe7, 0xfa, + 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, + 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, 0x19, 0xc9, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x68, 0x49, + 0x42, 0x88, 0xd0, 0x1a, 0x00, 0xa8, 0x19, 0x40, + 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, + 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, 0x19, 0x40, + 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, + 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x01, 0x48, 0xdb, 0xf0, 0x00, + 0xfb, 0x6b, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, + 0xe0, 0x00, 0xe0, 0x94, 0x6b, 0x09, 0x42, 0x88, + 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x01, 0x48, 0xcc, 0xf0, 0x00, 0xfb, 0x7a, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x30, 0x34, + 0xf7, 0xff, 0xfb, 0x60, 0xe7, 0xaa, 0x25, 0x07, + 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x4e, 0x35, 0x01, + 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, + 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x39, 0xff, + 0x39, 0xff, 0x39, 0x02, 0x69, 0xc9, 0x42, 0x88, + 0xd0, 0x18, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0xc0, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0xb1, + 0xf0, 0x00, 0xfb, 0x16, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, + 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, + 0x48, 0xa2, 0xf0, 0x00, 0xfb, 0x27, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, + 0xfb, 0x0d, 0xe7, 0xb0, 0x25, 0x0a, 0x2d, 0x11, + 0xdb, 0x02, 0xe0, 0x1f, 0x35, 0x01, 0xe7, 0xfa, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, + 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, + 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x01, 0x48, 0x8d, 0xf0, 0x00, + 0xfa, 0xcf, 0xe7, 0xdf, 0xe1, 0xca, 0x2c, 0x0e, + 0xd3, 0x73, 0x3c, 0x07, 0x1f, 0xe5, 0x42, 0xa5, + 0xd3, 0x02, 0xe0, 0x1f, 0x35, 0x01, 0xe7, 0xfa, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, + 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, + 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x01, 0x48, 0x79, 0xf0, 0x00, + 0xfa, 0xd5, 0xe7, 0xdf, 0x1c, 0x25, 0x2d, 0x11, + 0xdb, 0x02, 0xe0, 0x50, 0x35, 0x01, 0xe7, 0xfa, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, 0x21, 0x4c, + 0x43, 0x69, 0x19, 0xc9, 0x39, 0xff, 0x39, 0xff, + 0x39, 0x02, 0x69, 0xc9, 0x42, 0x88, 0xd0, 0x18, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x69, 0xc0, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, + 0x38, 0x02, 0x69, 0x80, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x01, 0x48, 0x61, 0xf0, 0x00, + 0xfa, 0x77, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, + 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x53, + 0xf0, 0x00, 0xfa, 0x88, 0x20, 0x4c, 0x43, 0x68, + 0xe0, 0x00, 0xe0, 0x29, 0x19, 0xc0, 0x30, 0x34, + 0xf7, 0xff, 0xfa, 0x6c, 0xe7, 0xae, 0x25, 0x0a, + 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x1f, 0x35, 0x01, + 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, + 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x3d, + 0xf0, 0x00, 0xfa, 0x2e, 0xe7, 0xdf, 0xe1, 0x29, + 0x3c, 0x07, 0x1c, 0x25, 0x2d, 0x07, 0xdb, 0x02, + 0xe0, 0x2f, 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa8, + 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, + 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x00, 0xa9, + 0x19, 0x49, 0x00, 0xc9, 0x19, 0xc9, 0x23, 0x0b, + 0x01, 0xdb, 0x18, 0xc9, 0x68, 0x49, 0x42, 0x88, + 0xd0, 0x1a, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, + 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, + 0x68, 0x40, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x02, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, + 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, + 0x68, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x01, 0x48, 0x22, 0xf0, 0x00, 0xfa, 0x26, + 0xe7, 0xcf, 0x25, 0x00, 0x42, 0xa5, 0xd3, 0x02, + 0xe0, 0x1f, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, + 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, + 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x01, 0x48, 0x10, 0xf0, 0x00, 0xfa, 0x02, + 0xe7, 0xdf, 0x1c, 0x25, 0x2d, 0x07, 0xdb, 0x02, + 0xe0, 0x55, 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa8, + 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, + 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x00, 0xa9, + 0x19, 0x49, 0x00, 0xc9, 0x19, 0xc9, 0x23, 0x0b, + 0x01, 0xdb, 0x18, 0xc9, 0x68, 0x49, 0x42, 0x88, + 0xd0, 0x1d, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, + 0x19, 0xc0, 0xe0, 0x01, 0x2e, 0x08, 0x7d, 0x9c, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, + 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, + 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, + 0x48, 0x50, 0xf0, 0x00, 0xf9, 0x9d, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, + 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, + 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, + 0x1c, 0x01, 0x48, 0x42, 0xf0, 0x00, 0xf9, 0xae, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x30, 0x34, + 0xf7, 0xff, 0xf9, 0x94, 0xe7, 0xa9, 0x25, 0x07, + 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x4e, 0x35, 0x01, + 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, + 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x39, 0xff, + 0x39, 0xff, 0x39, 0x02, 0x69, 0xc9, 0x42, 0x88, + 0xd0, 0x18, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, + 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0xc0, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, + 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, 0x23, 0x01, + 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x27, + 0xf0, 0x00, 0xf9, 0x4a, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, + 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, + 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, + 0x48, 0x18, 0xf0, 0x00, 0xf9, 0x5b, 0x20, 0x4c, + 0x43, 0x68, 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, + 0xf9, 0x41, 0xe7, 0xb0, 0x25, 0x0a, 0x2d, 0x11, + 0xdb, 0x02, 0xe0, 0x1f, 0x35, 0x01, 0xe7, 0xfa, + 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, + 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, + 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, + 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, + 0x43, 0x98, 0x1c, 0x01, 0x48, 0x03, 0xf0, 0x00, + 0xf9, 0x03, 0xe7, 0xdf, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x9c, + 0xb4, 0x90, 0x1c, 0x02, 0x1c, 0x0f, 0x3a, 0x01, + 0x2f, 0x01, 0xd1, 0x0d, 0x09, 0x50, 0x00, 0x80, + 0x49, 0x0d, 0x58, 0x08, 0x06, 0xd4, 0x0e, 0xe4, + 0x21, 0x01, 0x40, 0xa1, 0x43, 0x08, 0x09, 0x51, + 0x00, 0x89, 0x4b, 0x09, 0x50, 0x58, 0xe0, 0x0d, + 0x09, 0x50, 0x00, 0x80, 0x49, 0x06, 0x58, 0x08, + 0x06, 0xd4, 0x0e, 0xe4, 0x21, 0x01, 0x40, 0xa1, + 0x43, 0xc9, 0x40, 0x01, 0x09, 0x50, 0x00, 0x80, + 0x4b, 0x01, 0x50, 0x19, 0xbc, 0x90, 0x47, 0x70, + 0x2e, 0x08, 0x94, 0x94, 0xb4, 0x80, 0x1c, 0x01, + 0x39, 0x01, 0x09, 0x48, 0x00, 0x80, 0x4a, 0x08, + 0x58, 0x10, 0x06, 0xca, 0x0e, 0xd2, 0x27, 0x01, + 0x40, 0x97, 0x1c, 0x3b, 0x40, 0x18, 0xd0, 0x03, + 0x20, 0x01, 0xbc, 0x80, 0x47, 0x70, 0xe0, 0x01, + 0x20, 0x00, 0xe7, 0xfa, 0xe7, 0xf9, 0x00, 0x00, + 0x2e, 0x08, 0x94, 0x94, 0xb4, 0xf0, 0x1c, 0x07, + 0x1c, 0x0a, 0x68, 0x54, 0x6a, 0xf8, 0x05, 0x86, + 0x0d, 0xb6, 0x2c, 0x07, 0xda, 0x01, 0x1c, 0x20, + 0xe0, 0x00, 0x20, 0x07, 0x1c, 0x05, 0x21, 0x00, + 0x42, 0xa9, 0xd3, 0x02, 0xe0, 0x15, 0x31, 0x01, + 0xe7, 0xfa, 0x00, 0x88, 0x18, 0x40, 0x00, 0xc0, + 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, + 0x6f, 0xc0, 0x42, 0xb0, 0xd1, 0x08, 0x00, 0x88, + 0x18, 0x40, 0x00, 0xc0, 0x18, 0x80, 0x23, 0x2b, + 0x01, 0x5b, 0x18, 0xc0, 0xbc, 0xf0, 0x47, 0x70, + 0xe7, 0xe9, 0x1f, 0xe0, 0x28, 0x11, 0xda, 0x01, + 0x1f, 0xe0, 0xe0, 0x00, 0x20, 0x11, 0x1c, 0x05, + 0x21, 0x00, 0x42, 0xa9, 0xd3, 0x02, 0xe0, 0x0d, + 0x31, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x48, + 0x18, 0x80, 0x6a, 0x80, 0x42, 0xb0, 0xd1, 0x04, + 0x20, 0x4c, 0x43, 0x48, 0x18, 0x80, 0x30, 0x0c, + 0xe7, 0xe4, 0xe7, 0xf1, 0x20, 0x00, 0xe7, 0xe1, + 0xe7, 0xe0, 0xb5, 0x90, 0x48, 0x07, 0x68, 0x04, + 0x48, 0x07, 0x68, 0x07, 0x1c, 0x39, 0x1c, 0x20, + 0x4a, 0x06, 0x68, 0x13, 0x22, 0xf3, 0x00, 0xd2, + 0xf0, 0x00, 0xf9, 0xca, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0xbc, + 0x2e, 0x08, 0x7d, 0xc0, 0x2e, 0x08, 0x94, 0x98, + 0xb4, 0xf0, 0x1c, 0x01, 0xb0, 0x83, 0x22, 0x00, + 0x68, 0x4b, 0x2b, 0x07, 0xdd, 0x01, 0x23, 0x07, + 0xe0, 0x00, 0x68, 0x4b, 0x1c, 0x1c, 0x23, 0x00, + 0x43, 0xdb, 0x93, 0x02, 0x23, 0x00, 0x43, 0xdb, + 0x93, 0x01, 0x23, 0x00, 0x93, 0x00, 0x4b, 0x17, + 0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x07, 0x4b, 0x15, + 0x68, 0x1b, 0x6a, 0xdb, 0x93, 0x02, 0x4b, 0x13, + 0x68, 0x1b, 0x6b, 0x5b, 0x93, 0x01, 0x20, 0x00, + 0x42, 0xa0, 0xd3, 0x02, 0xe0, 0x16, 0x30, 0x01, + 0xe7, 0xfa, 0x00, 0x83, 0x18, 0x1b, 0x00, 0xdb, + 0x18, 0x5d, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xeb, + 0x6e, 0x9f, 0x04, 0x3b, 0x0c, 0x1b, 0xd0, 0x08, + 0x0c, 0x3b, 0x04, 0x1b, 0xd0, 0x05, 0x9b, 0x00, + 0x18, 0xc5, 0x26, 0x01, 0x40, 0xae, 0x1c, 0x33, + 0x43, 0x1a, 0xe7, 0xe8, 0x23, 0x0d, 0x01, 0xdb, + 0x18, 0xcb, 0x61, 0xda, 0xb0, 0x03, 0xbc, 0xf0, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x7c, 0x60, + 0xb4, 0x80, 0x1c, 0x01, 0x20, 0x00, 0x68, 0x0a, + 0x42, 0x90, 0xdb, 0x02, 0xe0, 0x07, 0x30, 0x01, + 0xe7, 0xf9, 0x23, 0x00, 0x43, 0xdb, 0x68, 0x8a, + 0x00, 0x87, 0x51, 0xd3, 0xe7, 0xf7, 0x22, 0x00, + 0x43, 0xd2, 0x68, 0x8b, 0x68, 0x0f, 0x00, 0xbf, + 0x51, 0xda, 0x23, 0x00, 0x43, 0xdb, 0x68, 0x8a, + 0x68, 0x0f, 0x00, 0xbf, 0x19, 0xd2, 0x60, 0x53, + 0x22, 0x00, 0x60, 0x4a, 0xbc, 0x80, 0x47, 0x70, + 0xb4, 0xf0, 0x1c, 0x03, 0x1c, 0x0c, 0x1c, 0x17, + 0x68, 0x9a, 0xca, 0x40, 0x42, 0xa6, 0xd2, 0x00, + 0xe7, 0xfb, 0x3a, 0x04, 0x1c, 0x11, 0xc9, 0x40, + 0x42, 0xbe, 0xd2, 0x00, 0xe7, 0xfb, 0x39, 0x04, + 0x68, 0x10, 0x42, 0xa0, 0xd1, 0x02, 0x68, 0x08, + 0x42, 0xb8, 0xd0, 0x02, 0x20, 0xff, 0xbc, 0xf0, + 0x47, 0x70, 0x39, 0x04, 0x68, 0x98, 0x68, 0x5e, + 0x00, 0xb6, 0x19, 0x85, 0x68, 0x58, 0x38, 0x02, + 0x60, 0x58, 0x68, 0x50, 0x60, 0x10, 0x32, 0x04, + 0x42, 0x8a, 0xd3, 0xfa, 0x68, 0x88, 0x60, 0x08, + 0x31, 0x04, 0x42, 0xa9, 0xd3, 0xfa, 0x20, 0x00, + 0xe7, 0xe9, 0xe7, 0xe8, 0xb4, 0xf0, 0x1c, 0x03, + 0x1c, 0x0c, 0x1c, 0x17, 0x68, 0x58, 0x68, 0x1e, + 0x3e, 0x01, 0x42, 0xb0, 0xdb, 0x02, 0x20, 0xff, + 0xbc, 0xf0, 0x47, 0x70, 0x68, 0x9a, 0xca, 0x40, + 0x42, 0xa6, 0xd2, 0x00, 0xe7, 0xfb, 0x3a, 0x04, + 0x1c, 0x15, 0xcd, 0x40, 0x42, 0xbe, 0xd2, 0x00, + 0xe7, 0xfb, 0x68, 0x58, 0x30, 0x02, 0x60, 0x58, + 0x68, 0x98, 0x68, 0x5e, 0x00, 0xb6, 0x19, 0x80, + 0x1f, 0xc1, 0x39, 0x01, 0x68, 0x08, 0x60, 0x88, + 0x39, 0x04, 0x1d, 0xc8, 0x30, 0x01, 0x42, 0xa8, + 0xd8, 0xf8, 0x60, 0x8f, 0x68, 0x08, 0x60, 0x48, + 0x39, 0x04, 0x1d, 0x08, 0x42, 0x90, 0xd8, 0xf9, + 0x60, 0x14, 0x20, 0x00, 0xe7, 0xd8, 0xe7, 0xd7, + 0xb5, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0xb0, 0x81, + 0x1c, 0x38, 0x21, 0x00, 0xf0, 0x0c, 0xff, 0xbe, + 0x1c, 0x06, 0x1c, 0x38, 0x21, 0x01, 0xf0, 0x0c, + 0xff, 0xb9, 0x90, 0x00, 0x1c, 0x31, 0x1c, 0x38, + 0xf0, 0x00, 0xf8, 0x50, 0x49, 0x20, 0x68, 0x09, + 0x60, 0x08, 0x99, 0x00, 0x1c, 0x38, 0xf0, 0x00, + 0xf8, 0x49, 0x49, 0x1e, 0x68, 0x09, 0x60, 0x08, + 0x48, 0x1b, 0x68, 0x00, 0x68, 0x05, 0x48, 0x1c, + 0x68, 0x01, 0x23, 0x02, 0x43, 0xdb, 0x40, 0x19, + 0x60, 0x01, 0x2c, 0x00, 0xd0, 0x0c, 0x48, 0x19, + 0x68, 0x00, 0x78, 0x00, 0x28, 0x00, 0xd0, 0x07, + 0x48, 0x14, 0x68, 0x00, 0x68, 0x05, 0x48, 0x14, + 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, + 0x1c, 0x20, 0x49, 0x13, 0x68, 0x09, 0x70, 0x08, + 0x48, 0x12, 0x63, 0xc5, 0x20, 0x3f, 0x04, 0x00, + 0x40, 0x28, 0x0c, 0x00, 0x49, 0x10, 0x62, 0x08, + 0x20, 0xff, 0x02, 0x00, 0x40, 0x28, 0x0a, 0x00, + 0x49, 0x0d, 0x62, 0x48, 0x06, 0xa8, 0x0e, 0x80, + 0x23, 0x80, 0x43, 0x18, 0x49, 0x0a, 0x62, 0x88, + 0x1c, 0x28, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xfa, 0x00, 0x00, + 0x2e, 0x08, 0x94, 0xa4, 0x2e, 0x08, 0x94, 0xa8, + 0x6a, 0x00, 0x00, 0x18, 0x2e, 0x08, 0x94, 0xac, + 0x2e, 0x08, 0x94, 0xb0, 0x68, 0x00, 0x0d, 0x00, + 0x72, 0x00, 0x01, 0x00, 0xb4, 0x80, 0x1c, 0x02, + 0x1c, 0x0f, 0x06, 0xb9, 0x0e, 0x89, 0x20, 0x01, + 0x03, 0x80, 0x40, 0x10, 0x09, 0xc0, 0x43, 0x01, + 0x20, 0xf0, 0x40, 0x10, 0x01, 0x40, 0x43, 0x01, + 0x07, 0x10, 0x0f, 0x00, 0x03, 0x00, 0x43, 0x01, + 0x20, 0x07, 0x02, 0xc0, 0x40, 0x10, 0x01, 0x40, + 0x43, 0x01, 0x20, 0x07, 0x02, 0x00, 0x40, 0x10, + 0x02, 0xc0, 0x43, 0x01, 0x1c, 0x08, 0xbc, 0x80, + 0x47, 0x70, 0xe7, 0xfc, 0xb5, 0xff, 0x1c, 0x05, + 0x1c, 0x0c, 0x1c, 0x17, 0x9b, 0x03, 0x06, 0x18, + 0x16, 0x06, 0x20, 0x33, 0x06, 0x40, 0x6b, 0x80, + 0x1c, 0x01, 0x20, 0x04, 0x40, 0x08, 0xd0, 0x05, + 0x20, 0xd0, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0xe0, 0x17, 0x23, 0x04, 0x43, 0xdb, + 0x40, 0x19, 0x01, 0x08, 0x4b, 0x0a, 0x68, 0x1b, + 0x18, 0xc2, 0x60, 0x15, 0x60, 0x54, 0x2e, 0xfe, + 0xd0, 0x04, 0x20, 0x01, 0x40, 0xb0, 0x60, 0xd0, + 0x4b, 0x06, 0x43, 0x1f, 0x60, 0x97, 0x20, 0x01, + 0x40, 0x88, 0x23, 0x33, 0x06, 0x5b, 0x63, 0x58, + 0x20, 0x00, 0xe7, 0xe2, 0xe7, 0xe1, 0x00, 0x00, + 0x2e, 0x08, 0x20, 0x14, 0x80, 0x00, 0x00, 0x00, + 0xb4, 0xb0, 0x1c, 0x01, 0x06, 0x08, 0x16, 0x04, + 0x4f, 0x0c, 0x22, 0x00, 0x20, 0x00, 0x28, 0x04, + 0xd3, 0x02, 0xe0, 0x0b, 0x30, 0x01, 0xe7, 0xfa, + 0x01, 0x03, 0x19, 0xdb, 0x68, 0x5b, 0x42, 0xa3, + 0xd1, 0x03, 0x25, 0x01, 0x40, 0x85, 0x1c, 0x2b, + 0x43, 0x1a, 0xe7, 0xf3, 0x23, 0x33, 0x06, 0x5b, + 0x6c, 0x1b, 0x40, 0x13, 0xd0, 0x00, 0xe7, 0xf9, + 0xbc, 0xb0, 0x47, 0x70, 0x9e, 0x00, 0x00, 0xc0, + 0xe3, 0xa0, 0x14, 0x62, 0xe5, 0x91, 0x10, 0x14, + 0xe2, 0x01, 0x00, 0xff, 0xe5, 0x9f, 0x10, 0x2c, + 0xe5, 0xd1, 0x10, 0x00, 0xe3, 0x51, 0x00, 0xff, + 0x0a, 0x00, 0x00, 0x05, 0xe5, 0x9f, 0x10, 0x1c, + 0xe5, 0xd1, 0x10, 0x00, 0xe3, 0xa0, 0x20, 0x01, + 0xe1, 0xa0, 0x11, 0x12, 0xe3, 0xa0, 0x24, 0x66, + 0xe5, 0x82, 0x10, 0x10, 0xe3, 0xa0, 0x14, 0x62, + 0xe5, 0x81, 0x00, 0x14, 0xe1, 0x2f, 0xff, 0x1e, + 0x2e, 0x08, 0x7c, 0x50, 0x47, 0x00, 0x00, 0x00, + 0x47, 0x08, 0x00, 0x00, 0x47, 0x10, 0x00, 0x00, + 0x47, 0x18, 0x00, 0x00, 0x47, 0x20, 0x00, 0x00, + 0x47, 0x28, 0x00, 0x00, 0x47, 0x30, 0x00, 0x00, + 0x47, 0x38, 0x00, 0x00, 0x17, 0xcb, 0x40, 0x59, + 0x1a, 0xc9, 0x17, 0xc2, 0x40, 0x50, 0x1a, 0x80, + 0xd1, 0x01, 0xf0, 0x00, 0xf9, 0xe5, 0xb4, 0x0c, + 0x08, 0x4b, 0x1c, 0x02, 0x42, 0x9a, 0xd8, 0x00, + 0x00, 0x52, 0xd3, 0xfb, 0x23, 0x00, 0xe0, 0x00, + 0x08, 0x52, 0x42, 0x91, 0x41, 0x5b, 0x42, 0x91, + 0xd3, 0x00, 0x1a, 0x89, 0x42, 0x82, 0xd1, 0xf7, + 0x1c, 0x18, 0xbc, 0x0c, 0x40, 0x5a, 0x40, 0x50, + 0x1a, 0x80, 0x40, 0x59, 0x1a, 0xc9, 0x47, 0x70, + 0x08, 0x4b, 0x1c, 0x02, 0xd1, 0x01, 0xf0, 0x00, + 0xf9, 0xc7, 0x42, 0x9a, 0xd8, 0x00, 0x00, 0x52, + 0xd3, 0xfb, 0x23, 0x00, 0xe0, 0x00, 0x08, 0x52, + 0x42, 0x91, 0x41, 0x5b, 0x42, 0x91, 0xd3, 0x00, + 0x1a, 0x89, 0x42, 0x82, 0xd1, 0xf7, 0x1c, 0x18, + 0x47, 0x70, 0x00, 0x00, 0x3a, 0x20, 0xd5, 0x09, + 0x42, 0x53, 0x32, 0x20, 0x40, 0xd0, 0x46, 0x94, + 0x1c, 0x0a, 0x40, 0x9a, 0x43, 0x10, 0x46, 0x62, + 0x40, 0xd1, 0x47, 0x70, 0x1c, 0x08, 0x40, 0xd0, + 0x21, 0x00, 0x47, 0x70, 0x40, 0x10, 0x40, 0x19, + 0x47, 0x70, 0x00, 0x00, 0x47, 0x70, 0x00, 0x00, + 0x46, 0x84, 0x07, 0x83, 0xd0, 0x05, 0x1e, 0x52, + 0xd3, 0x12, 0x70, 0x01, 0x1c, 0x40, 0x07, 0x83, + 0xd1, 0xf9, 0x3a, 0x08, 0xd3, 0x07, 0x02, 0x0b, + 0x43, 0x19, 0x04, 0x0b, 0x43, 0x19, 0x1c, 0x0b, + 0xc0, 0x0a, 0x3a, 0x08, 0xd2, 0xfc, 0x1d, 0xd2, + 0xd3, 0x02, 0x54, 0x81, 0x1e, 0x52, 0xd2, 0xfc, + 0x46, 0x60, 0x47, 0x70, 0xb5, 0x80, 0x00, 0x43, + 0x15, 0x5f, 0x43, 0xff, 0x1c, 0x02, 0x0f, 0xc0, + 0x07, 0xc0, 0x2f, 0x00, 0xd0, 0x15, 0x43, 0x0b, + 0xd0, 0x0c, 0x28, 0x00, 0xd1, 0x07, 0x1c, 0x10, + 0xf0, 0x00, 0xf9, 0x92, 0xf0, 0x00, 0xfa, 0x2c, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x21, 0x01, + 0x1c, 0x10, 0xe0, 0x11, 0x21, 0x01, 0x07, 0xc8, + 0xf0, 0x00, 0xfb, 0x2a, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x03, 0x13, 0x43, 0x0b, 0xd1, 0x05, + 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x10, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x21, 0x01, 0x07, 0xc8, + 0xf0, 0x00, 0xfb, 0x14, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x1a, 0x43, 0x42, 0x93, + 0xd3, 0x30, 0x46, 0x84, 0x07, 0x8b, 0xd0, 0x07, + 0x1e, 0x52, 0xd3, 0x29, 0x78, 0x0b, 0x70, 0x03, + 0x1c, 0x40, 0x1c, 0x49, 0x07, 0x8b, 0xd1, 0xf7, + 0x07, 0x83, 0xd1, 0x17, 0x3a, 0x10, 0xd3, 0x05, + 0xb4, 0xb0, 0xc9, 0xb8, 0xc0, 0xb8, 0x3a, 0x10, + 0xd2, 0xfb, 0xbc, 0xb0, 0x32, 0x0c, 0xd3, 0x0f, + 0xc9, 0x08, 0xc0, 0x08, 0x1f, 0x12, 0xd2, 0xfb, + 0xe0, 0x0a, 0xc9, 0x08, 0x70, 0xc3, 0x0a, 0x1b, + 0x70, 0x83, 0x0a, 0x1b, 0x70, 0x43, 0x0a, 0x1b, + 0x70, 0x03, 0x1d, 0x00, 0x1f, 0x12, 0xd2, 0xf4, + 0x1c, 0xd2, 0xd3, 0x05, 0x78, 0x0b, 0x70, 0x03, + 0x1c, 0x49, 0x1c, 0x40, 0x1e, 0x52, 0xd2, 0xf9, + 0x46, 0x60, 0x47, 0x70, 0x1c, 0x03, 0x43, 0x0b, + 0x43, 0x13, 0x07, 0x9b, 0xd1, 0x04, 0x1f, 0x12, + 0x58, 0x8b, 0x50, 0x83, 0xd1, 0xfb, 0x47, 0x70, + 0x1e, 0x52, 0x5c, 0x8b, 0x54, 0x83, 0xd1, 0xfb, + 0x47, 0x70, 0x00, 0x00, 0x42, 0x41, 0x46, 0x8c, + 0x07, 0x83, 0xd0, 0x05, 0x78, 0x03, 0x2b, 0x00, + 0xd0, 0x16, 0x1c, 0x40, 0x07, 0x83, 0xd1, 0xf9, + 0x49, 0x0a, 0xc8, 0x04, 0x09, 0xc9, 0x1a, 0x53, + 0x43, 0x93, 0x01, 0xc9, 0x40, 0x0b, 0xd0, 0xf8, + 0x1f, 0x00, 0x0e, 0x13, 0xd0, 0x08, 0x1c, 0x40, + 0x02, 0x13, 0x0e, 0x1b, 0xd0, 0x04, 0x1c, 0x40, + 0x04, 0x13, 0x0e, 0x1b, 0xd0, 0x00, 0x1c, 0x40, + 0x44, 0x60, 0x47, 0x70, 0x80, 0x80, 0x80, 0x80, + 0x46, 0xbc, 0xb4, 0x60, 0x1c, 0x03, 0x43, 0x08, + 0x07, 0x80, 0xd1, 0x1b, 0x1f, 0x12, 0xd3, 0x0b, + 0x4e, 0x0f, 0xcb, 0x01, 0xc9, 0x80, 0x1b, 0xc0, + 0xd1, 0x09, 0x1b, 0xbd, 0x43, 0xbd, 0x01, 0xf7, + 0x40, 0x3d, 0xd1, 0x04, 0x1f, 0x12, 0xd2, 0xf4, + 0x1c, 0xd2, 0xd3, 0x0e, 0xe0, 0x02, 0x1f, 0x1b, + 0x1f, 0x09, 0x1c, 0xd2, 0x78, 0x18, 0x78, 0x0f, + 0x1b, 0xc0, 0xd1, 0x06, 0x2f, 0x00, 0xd0, 0x04, + 0x1c, 0x5b, 0x1c, 0x49, 0x1e, 0x52, 0xd2, 0xf5, + 0x20, 0x00, 0xbc, 0x60, 0x46, 0x67, 0x47, 0x70, + 0x01, 0x01, 0x01, 0x01, 0x46, 0x84, 0x1c, 0x03, + 0x43, 0x0b, 0x07, 0x9b, 0xd1, 0x15, 0x1f, 0x12, + 0xd3, 0x0b, 0xb4, 0xb0, 0x4c, 0x10, 0x01, 0xe5, + 0xc9, 0x80, 0x1b, 0x3b, 0x43, 0xbb, 0x40, 0x2b, + 0xd1, 0x0f, 0xc0, 0x80, 0x1f, 0x12, 0xd2, 0xf7, + 0xbc, 0xb0, 0x1c, 0xd2, 0xd3, 0x11, 0x78, 0x0b, + 0x70, 0x03, 0x1c, 0x49, 0x1c, 0x40, 0x2b, 0x00, + 0xd0, 0x09, 0x1e, 0x52, 0xd2, 0xf7, 0x46, 0x60, + 0x47, 0x70, 0xbc, 0xb0, 0x1f, 0x09, 0x1c, 0xd2, + 0xe7, 0xf1, 0x70, 0x03, 0x1c, 0x40, 0x1e, 0x52, + 0xd2, 0xfb, 0x46, 0x60, 0x47, 0x70, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x47, 0x78, 0x00, 0x00, + 0xe2, 0x10, 0xc1, 0x02, 0x12, 0x60, 0x00, 0x00, + 0x03, 0x30, 0x00, 0x00, 0x03, 0xa0, 0x10, 0x00, + 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x8c, 0xc1, 0x01, + 0xe3, 0x8c, 0xc6, 0x1e, 0xe1, 0xb0, 0x28, 0x20, + 0x01, 0xa0, 0x08, 0x00, 0x02, 0x4c, 0xc4, 0x01, + 0xe1, 0xb0, 0x2c, 0x20, 0x01, 0xa0, 0x04, 0x00, + 0x02, 0x4c, 0xc5, 0x02, 0xe1, 0xb0, 0x2e, 0x20, + 0x01, 0xa0, 0x02, 0x00, 0x02, 0x4c, 0xc5, 0x01, + 0xe1, 0xb0, 0x2f, 0x20, 0x01, 0xa0, 0x01, 0x00, + 0x02, 0x4c, 0xc6, 0x02, 0xe1, 0xb0, 0x2f, 0xa0, + 0x01, 0xa0, 0x00, 0x80, 0x02, 0x4c, 0xc6, 0x01, + 0xe1, 0xa0, 0x00, 0x80, 0xe1, 0xa0, 0x1a, 0x00, + 0xe1, 0x8c, 0x06, 0x20, 0xe1, 0x2f, 0xff, 0x1e, + 0x22, 0x01, 0x07, 0xd2, 0x40, 0x50, 0x47, 0x70, + 0xe2, 0x20, 0x01, 0x02, 0xe1, 0x2f, 0xff, 0x1e, + 0x00, 0x40, 0x08, 0x40, 0x47, 0x70, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0xc4, 0xff, + 0xe3, 0x8c, 0xc6, 0x0e, 0xe1, 0x5c, 0x00, 0x82, + 0x9a, 0x00, 0x00, 0x0a, 0xe1, 0xb0, 0x00, 0x80, + 0x03, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, + 0x3a, 0x00, 0x00, 0x12, 0xe1, 0x50, 0x00, 0x0c, + 0x03, 0x51, 0x00, 0x00, 0x8a, 0x00, 0x01, 0x0c, + 0xe1, 0xb0, 0x20, 0x82, 0x8a, 0x00, 0x00, 0x18, + 0xe3, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0x03, 0x53, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xf2, + 0xea, 0x00, 0x01, 0x09, 0xe1, 0x50, 0x00, 0x0c, + 0x03, 0x51, 0x00, 0x00, 0x8a, 0x00, 0x01, 0x02, + 0xe1, 0xb0, 0x20, 0x82, 0x33, 0xa0, 0x00, 0x01, + 0x23, 0xa0, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, + 0x03, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, + 0x8a, 0x00, 0x00, 0xf9, 0xe1, 0xb0, 0x20, 0x82, + 0x23, 0xa0, 0x00, 0x00, 0x21, 0x2f, 0xff, 0x1e, + 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, + 0x33, 0xa0, 0x00, 0x01, 0x23, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, + 0x01, 0x51, 0x00, 0x03, 0x83, 0xa0, 0x00, 0x01, + 0x93, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc0, 0x28, + 0xe8, 0xac, 0x7f, 0xff, 0xe2, 0x8f, 0x00, 0x0c, + 0xe2, 0x4c, 0x10, 0x3c, 0xe2, 0x4e, 0xe0, 0x04, + 0xe5, 0x8c, 0xe0, 0x00, 0xea, 0x00, 0x01, 0x91, + 0x80, 0x00, 0x00, 0x20, 0x44, 0x69, 0x76, 0x69, + 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x7a, 0x65, + 0x72, 0x6f, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x58, + 0xb5, 0xf0, 0xb0, 0x8f, 0xf0, 0x00, 0xfd, 0x01, + 0x1c, 0x04, 0x1c, 0x16, 0x1c, 0x0f, 0xf0, 0x00, + 0xfd, 0x3b, 0x90, 0x03, 0x91, 0x04, 0x92, 0x05, + 0xa3, 0x3e, 0xcb, 0x0c, 0x1c, 0x20, 0x1c, 0x39, + 0xf0, 0x00, 0xfd, 0xae, 0x49, 0x3d, 0x22, 0x00, + 0x4f, 0x3d, 0x28, 0x00, 0xd0, 0x0a, 0x48, 0x3d, + 0xab, 0x03, 0xf0, 0x00, 0xfd, 0xfb, 0x90, 0x0c, + 0x91, 0x0d, 0x92, 0x0e, 0xaa, 0x03, 0xca, 0x07, + 0x1c, 0x3b, 0xe0, 0x08, 0x48, 0x38, 0xab, 0x03, + 0x3e, 0x01, 0xf0, 0x00, 0xfd, 0xef, 0x90, 0x0c, + 0x91, 0x0d, 0x92, 0x0e, 0x1c, 0x3b, 0xf0, 0x00, + 0xfe, 0x03, 0x1c, 0x3b, 0xf0, 0x00, 0xfd, 0xe6, + 0xab, 0x0c, 0xf0, 0x00, 0xfe, 0x17, 0x90, 0x09, + 0x91, 0x0a, 0x92, 0x0b, 0xf0, 0x00, 0xfe, 0x48, + 0x1c, 0x04, 0x1c, 0x15, 0x1c, 0x0f, 0x4a, 0x2d, + 0xb4, 0x04, 0x23, 0x03, 0x1c, 0x2a, 0xf0, 0x00, + 0xfe, 0x5b, 0x90, 0x01, 0x91, 0x02, 0x92, 0x03, + 0xb0, 0x01, 0x4a, 0x29, 0xb4, 0x04, 0x23, 0x03, + 0x1c, 0x20, 0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x00, + 0xfe, 0x65, 0xb0, 0x01, 0x46, 0x6b, 0xf0, 0x00, + 0xfd, 0xf9, 0xab, 0x09, 0xf0, 0x00, 0xfd, 0xdc, + 0xab, 0x09, 0xf0, 0x00, 0xfd, 0xbf, 0x2e, 0x00, + 0xd0, 0x2c, 0xb0, 0x86, 0xab, 0x0c, 0xc3, 0x07, + 0x1c, 0x30, 0xf0, 0x00, 0xfe, 0x69, 0x1c, 0x0c, + 0x1c, 0x05, 0x1c, 0x17, 0x4b, 0x1b, 0x1c, 0x1e, + 0xf0, 0x00, 0xfd, 0xca, 0x90, 0x03, 0x91, 0x04, + 0x92, 0x05, 0xab, 0x0c, 0xf0, 0x00, 0xfd, 0xaa, + 0x90, 0x06, 0x91, 0x07, 0x92, 0x08, 0xab, 0x03, + 0xf0, 0x00, 0xfe, 0x86, 0xab, 0x0c, 0xf0, 0x00, + 0xfe, 0x83, 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, + 0x1c, 0x28, 0x1c, 0x21, 0x1c, 0x3a, 0x1d, 0xf3, + 0x33, 0x05, 0xf0, 0x00, 0xfd, 0xb1, 0x46, 0x6b, + 0xf0, 0x00, 0xfd, 0x94, 0xab, 0x06, 0xf0, 0x00, + 0xfd, 0x91, 0xb0, 0x06, 0xb0, 0x0f, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x3f, 0xe6, 0xa0, 0x9e, + 0x66, 0x7f, 0x3b, 0xcd, 0x80, 0x00, 0x00, 0x00, + 0x2e, 0x03, 0x33, 0xb0, 0x80, 0x00, 0x3f, 0xff, + 0x80, 0x00, 0x3f, 0xfe, 0x2e, 0x03, 0x33, 0x5c, + 0x2e, 0x03, 0x33, 0x80, 0x2e, 0x03, 0x33, 0x44, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0xa0, 0x38, 0x80, + 0xe1, 0xa0, 0x38, 0xa3, 0xe1, 0xc0, 0x00, 0x03, + 0xe1, 0xd1, 0xc0, 0x80, 0x5a, 0x00, 0x00, 0x0c, + 0xe2, 0x53, 0x3b, 0x0f, 0x4a, 0x00, 0x00, 0x13, + 0x12, 0x83, 0xc0, 0x01, 0x13, 0x5c, 0x0b, 0x02, + 0xaa, 0x00, 0x00, 0x0d, 0xe1, 0xb0, 0xc5, 0xa2, + 0x2a, 0x00, 0x00, 0x58, 0xe1, 0x80, 0x0a, 0x03, + 0xe3, 0xc1, 0x11, 0x02, 0xe1, 0x80, 0x05, 0xa1, + 0xe1, 0x8c, 0x1a, 0x81, 0xe3, 0xa0, 0x30, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x10, 0x01, 0x01, + 0x1a, 0x00, 0x00, 0x40, 0xe2, 0x00, 0x01, 0x02, + 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x30, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x33, 0x00, 0x00, + 0x13, 0xa0, 0x33, 0x19, 0x11, 0x2f, 0xff, 0x1e, + 0xe2, 0x93, 0x30, 0x34, 0x0a, 0x00, 0x00, 0x31, + 0x42, 0x00, 0x01, 0x02, 0x43, 0xa0, 0x10, 0x00, + 0x43, 0xa0, 0x30, 0x00, 0x41, 0x2f, 0xff, 0x1e, + 0xe2, 0x53, 0x30, 0x20, 0x0a, 0x00, 0x00, 0x13, + 0xba, 0x00, 0x00, 0x1a, 0xe1, 0xb0, 0xc3, 0x12, + 0x4a, 0x00, 0x00, 0x05, 0xe2, 0x63, 0xc0, 0x20, + 0xe1, 0x80, 0x0c, 0x31, 0xe1, 0xa0, 0x2c, 0x32, + 0xe1, 0x82, 0x13, 0x11, 0xe3, 0xa0, 0x30, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x96, 0xc0, 0x8c, + 0xe2, 0x63, 0xc0, 0x20, 0xe1, 0x80, 0x0c, 0x31, + 0xe1, 0xa0, 0x2c, 0x32, 0xe1, 0x82, 0x13, 0x11, + 0xe3, 0xa0, 0x30, 0x00, 0x03, 0x11, 0x00, 0x01, + 0x01, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, + 0x22, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0x32, 0x01, 0x02, + 0x41, 0x2f, 0xff, 0x1e, 0x03, 0x11, 0x00, 0x01, + 0x01, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, + 0x22, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0xe2, 0x83, 0x30, 0x20, 0xe1, 0xb0, 0xc3, 0x11, + 0x4a, 0x00, 0x00, 0x04, 0xe2, 0x63, 0xc0, 0x20, + 0xe1, 0xa0, 0x1c, 0x31, 0xe2, 0x00, 0x01, 0x02, + 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0x3c, 0x01, 0x02, 0x01, 0x92, 0xc0, 0x06, + 0xe2, 0x63, 0xc0, 0x20, 0xe1, 0xa0, 0x1c, 0x31, + 0x03, 0x11, 0x00, 0x01, 0x12, 0x81, 0x10, 0x01, + 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0x31, 0x01, 0x02, 0x03, 0x32, 0x00, 0x00, + 0x03, 0xa0, 0x10, 0x00, 0x13, 0xa0, 0x10, 0x01, + 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0x10, 0x02, 0x02, 0x1a, 0x00, 0x00, 0x0b, + 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0x31, 0x00, 0x00, + 0x11, 0xb0, 0x10, 0x81, 0x43, 0xe0, 0x00, 0x00, + 0x41, 0x2f, 0xff, 0x1e, 0x03, 0x32, 0x00, 0x00, + 0x13, 0xa0, 0x34, 0x61, 0x11, 0x2f, 0xff, 0x1e, + 0xe2, 0x00, 0x01, 0x02, 0xe3, 0x80, 0x02, 0x07, + 0xe3, 0x80, 0x06, 0xff, 0xe1, 0x2f, 0xff, 0x1e, + 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0xc1, 0x11, 0x02, 0xe1, 0xa0, 0xcb, 0x02, + 0xe1, 0x9c, 0xc0, 0x06, 0xe2, 0x00, 0xc1, 0x02, + 0xe1, 0xa0, 0x0a, 0x03, 0xe1, 0x80, 0x05, 0xa1, + 0xe1, 0xa0, 0x1a, 0x81, 0xe1, 0x81, 0x15, 0xa2, + 0xe3, 0xa0, 0x30, 0x00, 0x0a, 0x00, 0x00, 0x06, + 0xe2, 0x91, 0x10, 0x01, 0x22, 0x80, 0x00, 0x01, + 0xe2, 0x90, 0x26, 0x01, 0xe1, 0x80, 0x00, 0x0c, + 0x51, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x33, 0x19, + 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x11, 0x00, 0x01, + 0x01, 0x80, 0x00, 0x0c, 0x01, 0x2f, 0xff, 0x1e, + 0xe2, 0x91, 0x10, 0x01, 0x22, 0x80, 0x00, 0x01, + 0xe2, 0x90, 0x26, 0x01, 0xe1, 0x80, 0x00, 0x0c, + 0x51, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x33, 0x19, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe3, 0xa0, 0x20, 0x01, 0xea, 0x00, 0x00, 0x01, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x20, 0x02, + 0xe2, 0x00, 0x31, 0x02, 0xe5, 0x9f, 0x00, 0x18, + 0xe5, 0x80, 0x20, 0x00, 0xe3, 0x31, 0x00, 0x00, + 0x03, 0xa0, 0x00, 0x00, 0x15, 0x9f, 0x00, 0x0c, + 0x18, 0x90, 0x00, 0x03, 0xe1, 0x80, 0x00, 0x03, + 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x08, 0x20, 0xb8, + 0x2e, 0x08, 0x20, 0xc4, 0xe3, 0x10, 0x06, 0x01, + 0x13, 0xa0, 0x00, 0x00, 0x11, 0x2f, 0xff, 0x1e, + 0xea, 0x00, 0x00, 0x0a, 0xe3, 0x12, 0x07, 0x02, + 0x0a, 0x00, 0x00, 0x08, 0xe1, 0x5c, 0x00, 0x80, + 0x83, 0xa0, 0x00, 0x00, 0x81, 0x2f, 0xff, 0x1e, + 0x03, 0x51, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x00, + 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x10, 0x07, 0x02, + 0x13, 0xa0, 0x00, 0x00, 0x11, 0x2f, 0xff, 0x1e, + 0xe3, 0xa0, 0x35, 0x06, 0xea, 0x00, 0x04, 0xee, + 0xe1, 0x2f, 0xff, 0x1f, 0xea, 0x00, 0x00, 0x3e, + 0xe5, 0x9f, 0x04, 0x5c, 0xe3, 0x50, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x02, 0xe3, 0xa0, 0x00, 0x20, + 0xe3, 0xa0, 0x10, 0x01, 0xef, 0x12, 0x34, 0x56, + 0xe5, 0x9f, 0x04, 0x48, 0xe3, 0x50, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x05, 0xe5, 0x90, 0x10, 0x00, + 0xe5, 0x9f, 0x04, 0x3c, 0xe5, 0x90, 0x30, 0x00, + 0xe5, 0x9f, 0x04, 0x38, 0xe5, 0x90, 0xd0, 0x00, + 0xea, 0x00, 0x00, 0x0b, 0xe3, 0xa0, 0x00, 0x16, + 0xe5, 0x9f, 0x44, 0x18, 0xe2, 0x84, 0x20, 0xa8, + 0xe2, 0x84, 0x10, 0xa4, 0xe5, 0x81, 0x20, 0x00, + 0xef, 0x12, 0x34, 0x56, 0xe2, 0x84, 0x00, 0xa8, + 0xe5, 0x90, 0xd0, 0x08, 0xe5, 0x90, 0x30, 0x04, + 0xe5, 0x90, 0x10, 0x00, 0xe3, 0x51, 0x00, 0x00, + 0x05, 0x9f, 0x14, 0x04, 0xe2, 0x8f, 0x00, 0x10, + 0xeb, 0x00, 0x00, 0x36, 0xe5, 0x9f, 0x03, 0xfc, + 0xe5, 0x9f, 0x33, 0xfc, 0xeb, 0x00, 0x00, 0x12, + 0xea, 0x00, 0x00, 0x4e, 0x2e, 0x00, 0x04, 0x04, + 0x2e, 0x03, 0x34, 0x9c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, + 0xe3, 0x1c, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x03, + 0xe1, 0xa0, 0xe0, 0x0f, 0xe1, 0x2f, 0xff, 0x1c, + 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0x8f, 0xe0, 0x01, 0xe1, 0x2f, 0xff, 0x1c, + 0x47, 0x78, 0x00, 0x00, 0xe8, 0xbd, 0x40, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x1c, 0x02, 0x1c, 0x13, + 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, + 0xe3, 0x13, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x03, + 0xe1, 0xa0, 0xe0, 0x0f, 0xe1, 0x2f, 0xff, 0x13, + 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0x8f, 0xe0, 0x01, 0xe1, 0x2f, 0xff, 0x13, + 0x47, 0x78, 0x00, 0x00, 0xe8, 0xbd, 0x40, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe5, 0x9f, 0xc0, 0x44, + 0xe8, 0x8c, 0xff, 0xff, 0xe2, 0x8f, 0x00, 0x00, + 0xea, 0x00, 0x0c, 0xac, 0x00, 0x80, 0x0e, 0x09, + 0x54, 0x68, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x64, + 0x65, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x6f, + 0x6e, 0x20, 0x61, 0x20, 0x54, 0x68, 0x75, 0x6d, + 0x62, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, + 0x69, 0x62, 0x6c, 0x65, 0x20, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x00, 0x00, + 0x2e, 0x08, 0x21, 0x58, 0x47, 0x78, 0x00, 0x00, + 0xe5, 0x9f, 0x73, 0x08, 0xe5, 0x87, 0x00, 0x00, + 0xe2, 0x8f, 0x50, 0xc9, 0xe2, 0x85, 0x5c, 0x02, + 0xe5, 0x87, 0x50, 0x10, 0xe2, 0x8f, 0x50, 0xe9, + 0xe2, 0x85, 0x5c, 0x02, 0xe5, 0x87, 0x50, 0x14, + 0xe1, 0xa0, 0x80, 0x0e, 0xe2, 0x87, 0x00, 0x04, + 0xeb, 0x00, 0x02, 0x39, 0xe9, 0x2d, 0x01, 0x00, + 0xe3, 0xa0, 0x00, 0x00, 0xe5, 0xc7, 0x00, 0x2c, + 0xe2, 0x87, 0x00, 0x04, 0xeb, 0x00, 0x00, 0xce, + 0xe3, 0xa0, 0x40, 0x00, 0xe2, 0x8d, 0x00, 0x04, + 0xe5, 0x97, 0x10, 0x00, 0xe3, 0xa0, 0x30, 0x00, + 0xe5, 0xc7, 0x30, 0x2e, 0xe2, 0x81, 0x30, 0x08, + 0xe8, 0x91, 0x00, 0x06, 0xe5, 0x9f, 0xc2, 0xcc, + 0xeb, 0xff, 0xff, 0xb7, 0xe8, 0xbd, 0x40, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe3, 0xa0, 0x80, 0x01, 0xea, 0x00, 0x00, 0x01, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x80, 0x00, + 0xe1, 0xa0, 0x70, 0x00, 0xeb, 0x00, 0x02, 0x31, + 0xe1, 0xa0, 0x00, 0x08, 0xeb, 0x00, 0x00, 0x0d, + 0xe1, 0xa0, 0x20, 0x07, 0xe3, 0x52, 0x00, 0x00, + 0x12, 0x8f, 0x00, 0x08, 0x15, 0x9f, 0x10, 0x00, + 0xeb, 0x00, 0x0c, 0x6d, 0x41, 0x42, 0x45, 0x58, + 0x00, 0x80, 0x0e, 0x06, 0x52, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, + 0x74, 0x6f, 0x6f, 0x20, 0x6c, 0x61, 0x72, 0x67, + 0x65, 0x00, 0x00, 0x00, 0xe3, 0xa0, 0x00, 0x00, + 0xe9, 0x2d, 0x40, 0x00, 0xe5, 0x9f, 0x32, 0x60, + 0xeb, 0xff, 0xff, 0xa9, 0xe8, 0xbd, 0x40, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe5, 0x9f, 0xc2, 0x28, 0xe5, 0xdc, 0x00, 0x2c, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xa0, 0x30, 0x00, + 0xe5, 0x9f, 0x12, 0x14, 0xe4, 0x81, 0xf0, 0x04, + 0xe8, 0xb3, 0x00, 0x04, 0xe8, 0xa1, 0x00, 0x04, + 0xe4, 0xd3, 0x20, 0x01, 0xe4, 0xc1, 0x20, 0x01, + 0xe3, 0x52, 0x00, 0x00, 0x1a, 0xff, 0xff, 0xfb, + 0xe1, 0xa0, 0xf0, 0x0e, 0x47, 0x78, 0x00, 0x00, + 0xe1, 0xa0, 0x80, 0x01, 0xeb, 0xff, 0xff, 0xf2, + 0xe5, 0x9f, 0x71, 0xe8, 0xe5, 0xd7, 0x20, 0x2f, + 0xe3, 0x52, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x2c, + 0xe3, 0xa0, 0x20, 0x01, 0xe5, 0xc7, 0x20, 0x2f, + 0xeb, 0x00, 0x00, 0x3b, 0xe1, 0xa0, 0x10, 0x08, + 0xeb, 0x00, 0x01, 0xfa, 0xe3, 0x50, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x1b, 0xe2, 0x88, 0xb0, 0x40, + 0xe9, 0x3b, 0x01, 0xef, 0xe9, 0x2c, 0x01, 0xef, + 0xe9, 0x3b, 0x01, 0xef, 0xe9, 0x2c, 0x01, 0xef, + 0xe5, 0x9f, 0x71, 0xa8, 0xe5, 0x97, 0x40, 0xa0, + 0xe3, 0x84, 0x40, 0x80, 0xe1, 0x21, 0xf0, 0x04, + 0xe1, 0xa0, 0xd0, 0x0c, 0xe1, 0xa0, 0xb0, 0x04, + 0xe5, 0x9f, 0x01, 0x8c, 0xe5, 0x90, 0x00, 0x04, + 0xe1, 0xa0, 0x10, 0x0d, 0xeb, 0x00, 0x02, 0x1a, + 0xe3, 0xa0, 0x10, 0x00, 0xe5, 0xc7, 0x10, 0x2f, + 0xe1, 0xa0, 0x10, 0x0d, 0xe3, 0x54, 0x00, 0x10, + 0x1a, 0x00, 0x00, 0x02, 0xe3, 0xa0, 0x00, 0x17, + 0xef, 0x12, 0x34, 0x56, 0xe3, 0x21, 0xf0, 0x93, + 0xe1, 0xa0, 0x00, 0x00, 0xe2, 0x81, 0xe0, 0x3c, + 0xe9, 0x5e, 0x7f, 0xff, 0xe1, 0xa0, 0x00, 0x00, + 0xe8, 0xde, 0x80, 0x00, 0xe2, 0x8f, 0x00, 0x00, + 0xea, 0x00, 0x0c, 0x2a, 0x00, 0x80, 0x0e, 0x07, + 0x4e, 0x6f, 0x20, 0x53, 0x74, 0x61, 0x63, 0x6b, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x54, 0x72, 0x61, + 0x70, 0x20, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x72, 0x00, 0x00, 0x00, 0xe2, 0x8f, 0x00, 0x00, + 0xea, 0x00, 0x0c, 0x20, 0x00, 0x80, 0x0e, 0x00, + 0x52, 0x65, 0x63, 0x75, 0x72, 0x73, 0x69, 0x76, + 0x65, 0x20, 0x54, 0x72, 0x61, 0x70, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc1, 0x04, + 0xe3, 0xa0, 0x00, 0x00, 0xe5, 0xcc, 0x00, 0x2f, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe5, 0x9f, 0x00, 0xf0, 0xe5, 0x90, 0x00, 0x00, + 0xe5, 0x90, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x00, 0xdc, + 0xe2, 0x80, 0x00, 0x04, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc0, 0xcc, + 0xe3, 0x50, 0x0b, 0x02, 0x33, 0xa0, 0x0b, 0x02, + 0xe2, 0x8c, 0xc0, 0x04, 0xe9, 0x9c, 0x00, 0x0c, + 0xe0, 0x53, 0x31, 0x00, 0x21, 0x53, 0x00, 0x02, + 0x3a, 0x00, 0x00, 0x03, 0xe5, 0x81, 0x20, 0x00, + 0xe0, 0x82, 0x21, 0x00, 0xe5, 0x8c, 0x20, 0x04, + 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x50, 0x03, + 0xe1, 0xa0, 0x10, 0x0c, 0xeb, 0x00, 0x00, 0x44, + 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0d, + 0xe5, 0x9d, 0xc0, 0x08, 0xe9, 0x9c, 0x40, 0x04, + 0xe1, 0x5e, 0x00, 0x01, 0x10, 0x4e, 0x30, 0x02, + 0xe0, 0x81, 0xe0, 0x00, 0x11, 0xa0, 0x00, 0x02, + 0x11, 0xa0, 0x20, 0x01, 0xe9, 0x8c, 0x40, 0x04, + 0x13, 0x53, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x03, + 0xe8, 0xbd, 0x50, 0x03, 0xe5, 0x81, 0x00, 0x00, + 0xe1, 0xa0, 0x01, 0x43, 0xe1, 0x2f, 0xff, 0x1e, + 0xe8, 0xbd, 0x50, 0x03, 0xe9, 0x9c, 0x00, 0x0c, + 0xe0, 0x43, 0x00, 0x02, 0xe1, 0xb0, 0x01, 0x40, + 0x03, 0xa0, 0x20, 0x00, 0x15, 0x8c, 0x30, 0x04, + 0xe5, 0x81, 0x20, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe2, 0x80, 0x20, 0x03, + 0xe3, 0xc2, 0x20, 0x03, 0xe5, 0x9f, 0xc0, 0x24, + 0xe2, 0x8c, 0xc0, 0x08, 0xe8, 0x9c, 0x00, 0x03, + 0xe0, 0x90, 0x20, 0x02, 0x31, 0x52, 0x00, 0x01, + 0x35, 0x8c, 0x20, 0x00, 0x23, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x08, 0x20, 0xd4, + 0x2e, 0x08, 0x20, 0xa0, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x02, 0x56, 0x44, 0x2e, 0x02, 0x56, 0x40, + 0x2e, 0x02, 0x56, 0x3c, 0x2e, 0x08, 0x9a, 0x04, + 0x2e, 0x00, 0x1b, 0x8d, 0x2e, 0x01, 0x99, 0xd5, + 0x2e, 0x01, 0x98, 0x89, 0x2e, 0x01, 0x99, 0x49, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x00, 0x04, + 0xe5, 0x90, 0x00, 0x00, 0xe2, 0x00, 0x04, 0xff, + 0xe3, 0x50, 0x04, 0xea, 0x03, 0xa0, 0x00, 0x01, + 0x13, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe2, 0x40, 0x0b, 0x05, + 0xe3, 0x50, 0x0b, 0x1b, 0x33, 0xa0, 0x00, 0x01, + 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe2, 0x8f, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x42, 0x72, 0x61, 0x6e, + 0x63, 0x68, 0x20, 0x54, 0x68, 0x72, 0x6f, 0x75, + 0x67, 0x68, 0x20, 0x5a, 0x65, 0x72, 0x6f, 0x00, + 0x00, 0x02, 0x00, 0x01, 0x55, 0x6e, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, + 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x64, 0x20, 0x53, 0x57, 0x49, 0x20, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x74, 0x63, 0x68, + 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x20, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x05, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x20, 0x45, 0x78, 0x63, 0x65, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x06, 0x55, 0x6e, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x00, + 0x00, 0x02, 0x00, 0x07, 0x55, 0x6e, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x20, 0x46, 0x61, + 0x73, 0x74, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x72, 0x75, 0x70, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x01, 0x91, 0xcc, 0x2e, 0x01, 0x91, 0xe4, + 0x2e, 0x01, 0x92, 0x00, 0x2e, 0x01, 0x92, 0x20, + 0x2e, 0x01, 0x92, 0x34, 0x2e, 0x01, 0x92, 0x44, + 0x2e, 0x01, 0x92, 0x5c, 0x2e, 0x01, 0x92, 0x74, + 0xe2, 0x4f, 0x20, 0x28, 0xe7, 0x92, 0x01, 0x00, + 0xea, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xb5, 0x04, 0xf0, 0x00, + 0xf8, 0x04, 0xbc, 0x08, 0x60, 0x1a, 0xbc, 0x08, + 0x47, 0x18, 0x47, 0x78, 0xe1, 0xb0, 0x00, 0x80, + 0x03, 0x31, 0x00, 0x00, 0x01, 0xa0, 0x00, 0x60, + 0x03, 0xa0, 0x20, 0x00, 0x01, 0x2f, 0xff, 0x1e, + 0xe1, 0xa0, 0x2a, 0xa0, 0xe1, 0xc0, 0x0a, 0x82, + 0xe1, 0xa0, 0x00, 0x60, 0xe3, 0x32, 0x00, 0x00, + 0xe2, 0x42, 0x2c, 0x03, 0xe2, 0x42, 0x20, 0xfe, + 0x0a, 0x00, 0x00, 0x06, 0xe3, 0x80, 0x04, 0x3f, + 0xe3, 0x80, 0x06, 0x0e, 0xe2, 0x22, 0x3b, 0x01, + 0xe3, 0x33, 0x00, 0x01, 0x11, 0x2f, 0xff, 0x1e, + 0xe3, 0xa0, 0x10, 0x01, 0xea, 0xff, 0xfe, 0x39, + 0xe2, 0x00, 0xc1, 0x02, 0xe1, 0xa0, 0x06, 0x00, + 0xe2, 0x42, 0x20, 0x01, 0xe1, 0xb0, 0x00, 0x80, + 0x4a, 0x00, 0x00, 0x02, 0xe1, 0xb0, 0x10, 0x81, + 0x23, 0x80, 0x0a, 0x01, 0xea, 0xff, 0xff, 0xf9, + 0xe1, 0xa0, 0x04, 0xc0, 0xe3, 0xc0, 0x05, 0x01, + 0xe1, 0x8c, 0x01, 0x20, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0xb0, 0xc0, 0x80, + 0x03, 0x31, 0x00, 0x00, 0xe1, 0xa0, 0x35, 0x0c, + 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, + 0xe1, 0x83, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, + 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, + 0xe1, 0xb0, 0xca, 0xcc, 0x0a, 0x00, 0x00, 0x02, + 0xe3, 0x7c, 0x00, 0x01, 0x03, 0x80, 0x01, 0x01, + 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x11, 0x01, 0x02, + 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0xd1, 0x11, 0x02, + 0x0a, 0x00, 0x00, 0x15, 0xe1, 0xb0, 0x38, 0x21, + 0x01, 0xa0, 0x18, 0x01, 0x03, 0xa0, 0xc0, 0x10, + 0x13, 0xa0, 0xc0, 0x00, 0xe1, 0xb0, 0x3c, 0x21, + 0x01, 0xa0, 0x14, 0x01, 0x02, 0x8c, 0xc0, 0x08, + 0xe1, 0xb0, 0x3e, 0x21, 0x01, 0xa0, 0x12, 0x01, + 0x02, 0x8c, 0xc0, 0x04, 0xe1, 0xb0, 0x3f, 0x21, + 0x01, 0xa0, 0x11, 0x01, 0x02, 0x8c, 0xc0, 0x02, + 0xe1, 0xb0, 0x3f, 0xa1, 0x01, 0xa0, 0x10, 0x81, + 0x02, 0x8c, 0xc0, 0x01, 0xe2, 0x6c, 0x30, 0x20, + 0xe1, 0x81, 0x13, 0x32, 0xe1, 0xa0, 0x2c, 0x12, + 0xe0, 0x40, 0x00, 0x0c, 0xe2, 0x80, 0x00, 0x01, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xb0, 0x38, 0x22, + 0x01, 0xa0, 0x28, 0x02, 0x03, 0xa0, 0xc0, 0x10, + 0x13, 0xa0, 0xc0, 0x00, 0xe1, 0xb0, 0x3c, 0x22, + 0x01, 0xa0, 0x24, 0x02, 0x02, 0x8c, 0xc0, 0x08, + 0xe1, 0xb0, 0x3e, 0x22, 0x01, 0xa0, 0x22, 0x02, + 0x02, 0x8c, 0xc0, 0x04, 0xe1, 0xb0, 0x3f, 0x22, + 0x01, 0xa0, 0x21, 0x02, 0x02, 0x8c, 0xc0, 0x02, + 0xe1, 0xb0, 0x3f, 0xa2, 0x01, 0xa0, 0x20, 0x82, + 0x02, 0x8c, 0xc0, 0x01, 0xe1, 0xa0, 0x10, 0x02, + 0xe3, 0xa0, 0x20, 0x00, 0xe2, 0x40, 0x00, 0x1f, + 0xe0, 0x40, 0x00, 0x0c, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0xc4, 0xff, + 0xe3, 0x8c, 0xc6, 0x0e, 0xe1, 0x5c, 0x00, 0x82, + 0x9a, 0x00, 0x00, 0x0a, 0xe1, 0xb0, 0x00, 0x80, + 0x03, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, + 0x3a, 0x00, 0x00, 0x11, 0xe1, 0x50, 0x00, 0x0c, + 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfd, 0xf2, + 0xe1, 0xb0, 0x20, 0x82, 0x8a, 0x00, 0x00, 0x17, + 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x03, 0x53, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xf2, + 0xea, 0xff, 0xfd, 0xef, 0xe1, 0x50, 0x00, 0x0c, + 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfd, 0xe8, + 0xe1, 0xb0, 0x20, 0x82, 0x03, 0x33, 0x00, 0x00, + 0x83, 0xa0, 0x00, 0x01, 0x93, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, + 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfd, 0xe0, + 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x01, + 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, + 0x01, 0x51, 0x00, 0x03, 0x93, 0xa0, 0x00, 0x00, + 0x83, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, + 0x33, 0xa0, 0x00, 0x01, 0x23, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe9, 0x2d, 0x4b, 0xf0, 0xe8, 0x93, 0x00, 0x38, + 0xe3, 0x10, 0x01, 0x01, 0x03, 0x13, 0x01, 0x01, + 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x02, 0x30, + 0xeb, 0x00, 0x03, 0x38, 0xe8, 0xbd, 0x4b, 0xf0, + 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, + 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x02, 0x86, + 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, + 0xe8, 0x93, 0x00, 0x38, 0xe3, 0x10, 0x01, 0x01, + 0x03, 0x13, 0x01, 0x01, 0x1a, 0x00, 0x00, 0x03, + 0xeb, 0x00, 0x03, 0x5e, 0xeb, 0x00, 0x03, 0x2b, + 0xe8, 0xbd, 0x4b, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, + 0xe2, 0x4f, 0xe0, 0x14, 0xe3, 0xa0, 0xb0, 0x00, + 0xea, 0x00, 0x03, 0xf8, 0x47, 0x78, 0x00, 0x00, + 0xe9, 0x2d, 0x4b, 0xf0, 0xe8, 0x93, 0x00, 0x38, + 0xe3, 0xa0, 0xb0, 0x00, 0xe1, 0xd1, 0xc0, 0x80, + 0x41, 0xd4, 0xc0, 0x83, 0x5a, 0x00, 0x00, 0x04, + 0xe3, 0xa0, 0xb0, 0x04, 0xeb, 0x00, 0x04, 0x3f, + 0xeb, 0x00, 0x03, 0x1c, 0xe8, 0xbd, 0x4b, 0xf0, + 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x11, 0x01, 0x02, + 0x0a, 0x00, 0x00, 0x08, 0xe3, 0x10, 0x01, 0x01, + 0x03, 0x13, 0x01, 0x01, 0x02, 0x4f, 0xe0, 0x24, + 0xe3, 0xa0, 0xb0, 0x04, 0x0a, 0x00, 0x05, 0x5b, + 0xe0, 0x23, 0x00, 0x00, 0xe2, 0x00, 0x01, 0x02, + 0xe8, 0xbd, 0x4b, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, + 0xe3, 0x14, 0x01, 0x02, 0x03, 0xa0, 0x34, 0x62, + 0x13, 0xa0, 0x34, 0x61, 0xea, 0x00, 0x02, 0x9d, + 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, + 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0xa0, 0x40, 0x01, + 0xe1, 0xa0, 0x50, 0x02, 0xe3, 0x10, 0x01, 0x01, + 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x03, 0x35, + 0xeb, 0x00, 0x03, 0x02, 0xe8, 0xbd, 0x4b, 0xf0, + 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, + 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x03, 0xcf, + 0xb4, 0x77, 0x46, 0x76, 0x1e, 0x5d, 0x9b, 0x06, + 0x1c, 0x1c, 0x34, 0x0c, 0xf7, 0xff, 0xff, 0x8c, + 0x1c, 0x23, 0x34, 0x0c, 0xf7, 0xff, 0xff, 0x6e, + 0x46, 0x6b, 0xf7, 0xff, 0xff, 0x85, 0x1e, 0x6d, + 0xd1, 0xf6, 0xb0, 0x03, 0x46, 0xb6, 0xbc, 0x70, + 0x47, 0x70, 0x00, 0x00, 0xb4, 0x77, 0x46, 0x76, + 0x1e, 0x5d, 0x9b, 0x06, 0x1c, 0x1c, 0x34, 0x0c, + 0xf7, 0xff, 0xff, 0x5c, 0x46, 0x6b, 0xf7, 0xff, + 0xff, 0x73, 0x1c, 0x23, 0x34, 0x0c, 0xf7, 0xff, + 0xff, 0x55, 0x1e, 0x6d, 0xd1, 0xf6, 0xb0, 0x03, + 0x46, 0xb6, 0xbc, 0x70, 0x47, 0x70, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0xb0, 0x10, 0x00, + 0xe2, 0x00, 0x01, 0x02, 0x42, 0x61, 0x10, 0x00, + 0xe3, 0xa0, 0x20, 0x00, 0x01, 0x2f, 0xff, 0x1e, + 0xe3, 0x80, 0x09, 0x01, 0xe3, 0x80, 0x00, 0x1e, + 0xe1, 0xb0, 0xc8, 0x21, 0x01, 0xa0, 0x18, 0x01, + 0x02, 0x40, 0x00, 0x10, 0xe1, 0xb0, 0xcc, 0x21, + 0x01, 0xa0, 0x14, 0x01, 0x02, 0x40, 0x00, 0x08, + 0xe1, 0xb0, 0xce, 0x21, 0x01, 0xa0, 0x12, 0x01, + 0x02, 0x40, 0x00, 0x04, 0xe1, 0xb0, 0xcf, 0x21, + 0x01, 0xa0, 0x11, 0x01, 0x02, 0x40, 0x00, 0x02, + 0xe1, 0xb0, 0xcf, 0xa1, 0x01, 0xa0, 0x10, 0x81, + 0x02, 0x40, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, + 0xe8, 0x93, 0x00, 0x38, 0xe2, 0x23, 0x31, 0x02, + 0xe3, 0x10, 0x01, 0x01, 0x03, 0x13, 0x01, 0x01, + 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x01, 0xbe, + 0xeb, 0x00, 0x02, 0xc6, 0xe8, 0xbd, 0x4b, 0xf0, + 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, + 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x02, 0x14, + 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0xb0, 0x00, + 0xe1, 0xa0, 0x20, 0x01, 0xe8, 0x80, 0x00, 0x0e, + 0xe5, 0x9f, 0xc0, 0x38, 0xe5, 0x8c, 0xd0, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe5, 0x9f, 0x20, 0x28, 0xe5, 0x92, 0x20, 0x00, + 0xe5, 0x91, 0x40, 0x2c, 0xe5, 0x91, 0xc0, 0x34, + 0xe1, 0x5c, 0x00, 0x02, 0x23, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, + 0xe5, 0x9f, 0xc0, 0x08, 0xe5, 0x9c, 0xd0, 0x00, + 0xe3, 0xa0, 0xb0, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x2e, 0x08, 0x21, 0x98, 0x47, 0x78, 0x00, 0x00, + 0xe9, 0x2d, 0x40, 0x00, 0xe5, 0x9f, 0xc0, 0xe4, + 0xe5, 0x9c, 0x00, 0x00, 0xe3, 0x50, 0x00, 0x00, + 0xe3, 0xa0, 0x00, 0x04, 0x15, 0x8c, 0x00, 0x04, + 0x0b, 0x00, 0x00, 0x01, 0xe8, 0xbd, 0x40, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe5, 0x9f, 0xc0, 0xcc, + 0xea, 0xff, 0xfd, 0x6b, 0xe3, 0xa0, 0x10, 0x0a, + 0xe3, 0x50, 0x01, 0x02, 0x13, 0x50, 0x01, 0x06, + 0x13, 0x50, 0x01, 0x16, 0x03, 0xa0, 0x10, 0x03, + 0xe3, 0x50, 0x01, 0x0a, 0x13, 0x50, 0x01, 0x0e, + 0x03, 0xa0, 0x10, 0x05, 0xe5, 0x9f, 0x20, 0xa8, + 0xe1, 0x50, 0x00, 0x02, 0xe2, 0x82, 0x20, 0xff, + 0x21, 0x52, 0x00, 0x00, 0x23, 0xa0, 0x10, 0x02, + 0xe3, 0x50, 0x01, 0x82, 0x03, 0xa0, 0x10, 0x02, + 0xe3, 0x50, 0x01, 0x86, 0x03, 0xa0, 0x10, 0x07, + 0xe5, 0x9f, 0x20, 0x88, 0xe0, 0x50, 0x20, 0x02, + 0x13, 0x52, 0x00, 0x01, 0x03, 0xa0, 0x10, 0x05, + 0xe1, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x02, + 0xe1, 0xa0, 0x30, 0x00, 0xeb, 0xff, 0xff, 0xe4, + 0xe8, 0xbd, 0x40, 0x02, 0xe5, 0x9f, 0xc0, 0x50, + 0xe3, 0xa0, 0x20, 0x01, 0xe5, 0xcc, 0x20, 0x00, + 0xe9, 0x2d, 0x00, 0x0a, 0xeb, 0xff, 0xff, 0xdc, + 0xea, 0x00, 0x00, 0x09, 0x47, 0x78, 0x00, 0x00, + 0xe5, 0x9f, 0xc0, 0x30, 0xe3, 0xa0, 0x10, 0x00, + 0xe5, 0x8c, 0x10, 0x00, 0xe5, 0x9c, 0x00, 0x04, + 0xe3, 0x50, 0x00, 0x00, 0x01, 0x2f, 0xff, 0x1e, + 0xe5, 0x8c, 0x10, 0x04, 0xea, 0xff, 0xff, 0xd2, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0xa0, 0xc0, 0x0d, + 0xe9, 0x2d, 0xd9, 0xf0, 0xe2, 0x4c, 0xb0, 0x04, + 0xe3, 0xa0, 0x10, 0x01, 0xea, 0xff, 0xfd, 0x88, + 0x2e, 0x08, 0x20, 0xbc, 0x2e, 0x08, 0x20, 0xce, + 0x2e, 0x01, 0xae, 0x81, 0x80, 0x00, 0x02, 0x00, + 0x80, 0x80, 0x0e, 0xa0, 0xb5, 0xff, 0xa6, 0x23, + 0xa5, 0x22, 0xa4, 0x22, 0x68, 0x5a, 0x68, 0x1f, + 0x4b, 0x21, 0x60, 0x5a, 0x23, 0x00, 0x4a, 0x21, + 0x70, 0x13, 0x70, 0x53, 0x70, 0x93, 0x4a, 0x20, + 0x2a, 0x00, 0xd0, 0x02, 0x9a, 0x02, 0xf7, 0xff, + 0xff, 0xfe, 0x48, 0x1e, 0x28, 0x00, 0xd0, 0x01, + 0xf7, 0xff, 0xff, 0xfe, 0x48, 0x1c, 0x28, 0x00, + 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x48, 0x1b, + 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, 0xfc, 0xb2, + 0x48, 0x19, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, + 0xff, 0xfe, 0x48, 0x18, 0x28, 0x00, 0xd0, 0x01, + 0xf0, 0x01, 0xfb, 0x18, 0x48, 0x16, 0x28, 0x00, + 0xd0, 0x01, 0xf0, 0x01, 0xfc, 0x89, 0x48, 0x15, + 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, + 0xf7, 0xff, 0xff, 0xa0, 0x48, 0x12, 0x28, 0x00, + 0xd0, 0x04, 0x1c, 0x30, 0x1c, 0x29, 0x1c, 0x22, + 0xf0, 0x01, 0xfe, 0xa6, 0x2f, 0x00, 0xd0, 0x01, + 0xf7, 0xfe, 0xfd, 0xee, 0xb0, 0x04, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x3a, 0x74, 0x74, 0x00, + 0x2e, 0x08, 0x21, 0x9c, 0x2e, 0x08, 0x21, 0x9c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xb2, 0x31, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xaf, 0x11, + 0x2e, 0x01, 0xb1, 0xfd, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x01, 0xb6, 0x55, 0xb5, 0x90, 0x28, 0x00, + 0xd0, 0x04, 0x48, 0x12, 0x28, 0x00, 0xd0, 0x01, + 0xf7, 0xff, 0xff, 0xfe, 0x4f, 0x10, 0x68, 0x78, + 0x28, 0x00, 0xd0, 0x03, 0xf7, 0xfe, 0xfd, 0xb6, + 0x20, 0x00, 0x60, 0x78, 0x4f, 0x0d, 0x78, 0x78, + 0x24, 0x01, 0x28, 0x00, 0xd1, 0x05, 0x70, 0x7c, + 0x48, 0x0b, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, + 0xff, 0xfe, 0x78, 0xb8, 0x28, 0x00, 0xd1, 0x05, + 0x70, 0xbc, 0x48, 0x08, 0x28, 0x00, 0xd0, 0x01, + 0xf0, 0x01, 0xfe, 0xb2, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x08, 0x21, 0x9c, 0x2e, 0x08, 0x21, 0x9c, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xb6, 0xf5, + 0xb5, 0x90, 0x1c, 0x0c, 0x21, 0x01, 0x1c, 0x17, + 0xf0, 0x01, 0xfa, 0xbc, 0x21, 0x00, 0x1c, 0x20, + 0xf0, 0x01, 0xfa, 0xb8, 0x21, 0x02, 0x1c, 0x38, + 0xf0, 0x01, 0xfa, 0xb4, 0x20, 0x01, 0xf7, 0xff, + 0xfa, 0x5d, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0xf1, 0x20, 0x00, 0xb0, 0x89, 0x90, 0x06, + 0x26, 0x00, 0x90, 0x05, 0x20, 0x01, 0x90, 0x04, + 0x27, 0x00, 0x20, 0x00, 0x90, 0x03, 0x90, 0x02, + 0x25, 0x00, 0x90, 0x01, 0xf0, 0x01, 0xfb, 0xe2, + 0x1c, 0x04, 0x78, 0x00, 0x28, 0x00, 0xd0, 0x17, + 0x49, 0xe3, 0x5d, 0xe0, 0x5c, 0x08, 0x08, 0x40, + 0xd3, 0x06, 0x37, 0x01, 0x5d, 0xe0, 0x5c, 0x08, + 0x08, 0x40, 0xd2, 0xfa, 0xe0, 0x00, 0x37, 0x01, + 0x5d, 0xe0, 0x5c, 0x0a, 0x08, 0x52, 0xd2, 0x01, + 0x28, 0x00, 0xd1, 0xf8, 0x98, 0x04, 0x30, 0x01, + 0x90, 0x04, 0x5d, 0xe0, 0x28, 0x00, 0xd1, 0xe8, + 0x98, 0x04, 0x00, 0x80, 0xf0, 0x01, 0xfc, 0x16, + 0x4b, 0xd6, 0x93, 0x08, 0x60, 0x18, 0x1c, 0x78, + 0xf0, 0x01, 0xfc, 0x10, 0x9b, 0x08, 0x60, 0x58, + 0x48, 0xd3, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, + 0xff, 0xfe, 0x21, 0x00, 0x20, 0x00, 0x90, 0x04, + 0x48, 0xd0, 0x90, 0x07, 0x78, 0x27, 0x34, 0x01, + 0x2e, 0x00, 0xd1, 0x58, 0x2f, 0x22, 0xd0, 0x01, + 0x2f, 0x27, 0xd1, 0x02, 0x97, 0x05, 0x1c, 0x3e, + 0xe0, 0x93, 0x98, 0x06, 0x42, 0x81, 0xd1, 0x4e, + 0x98, 0x03, 0x28, 0x00, 0xd1, 0x4b, 0x25, 0x00, + 0x43, 0xed, 0x1c, 0x2a, 0x95, 0x01, 0x22, 0x00, + 0xab, 0x00, 0x70, 0x1a, 0x70, 0x5a, 0x1e, 0x60, + 0x78, 0x02, 0x2a, 0x30, 0xdb, 0x04, 0x2a, 0x39, + 0xdc, 0x02, 0x30, 0x01, 0x1f, 0xd5, 0x3d, 0x29, + 0x78, 0x02, 0x2a, 0x3e, 0xd0, 0x01, 0x2a, 0x3c, + 0xd1, 0x35, 0x2a, 0x3e, 0xd1, 0x0e, 0x22, 0x77, + 0xab, 0x00, 0x70, 0x1a, 0x2d, 0x00, 0xd0, 0x63, + 0x2d, 0x02, 0xdc, 0x62, 0x78, 0x42, 0x30, 0x01, + 0x2a, 0x3e, 0xd1, 0x13, 0x22, 0x61, 0x70, 0x1a, + 0x30, 0x01, 0xe0, 0x0f, 0x30, 0x01, 0x1c, 0x02, + 0xe0, 0x02, 0x2b, 0x3e, 0xd0, 0x56, 0x32, 0x01, + 0x78, 0x13, 0x2b, 0x00, 0xd0, 0x01, 0x2b, 0x20, + 0xd1, 0xf7, 0x2d, 0x00, 0xdc, 0x4d, 0x22, 0x72, + 0xab, 0x00, 0x70, 0x1a, 0x78, 0x02, 0x2a, 0x26, + 0xd1, 0x24, 0x23, 0x01, 0x42, 0xdd, 0xd0, 0x19, + 0x2d, 0x00, 0xdd, 0x5e, 0x78, 0x42, 0x30, 0x01, + 0x2a, 0x30, 0xdb, 0x5b, 0x2a, 0x32, 0xdc, 0x3c, + 0x30, 0x01, 0x1c, 0x2b, 0xd5, 0x04, 0x07, 0xdb, + 0x0f, 0xdb, 0x42, 0x5b, 0xe0, 0x02, 0xe0, 0x42, + 0x07, 0xdb, 0x0f, 0xdb, 0x33, 0x31, 0x42, 0x9a, + 0xd1, 0x63, 0x22, 0x00, 0xab, 0x00, 0x70, 0x1a, + 0x95, 0x01, 0xe0, 0x11, 0x22, 0x02, 0x92, 0x01, + 0xaa, 0x00, 0x78, 0x12, 0x30, 0x01, 0x2a, 0x72, + 0xd0, 0x09, 0xe0, 0x06, 0x23, 0x01, 0x42, 0xdd, + 0xd1, 0x06, 0xaa, 0x00, 0x78, 0x12, 0x2a, 0x72, + 0xd0, 0x01, 0x25, 0x01, 0xe0, 0x00, 0x25, 0x00, + 0xaa, 0x00, 0x78, 0x12, 0x2a, 0x00, 0xd0, 0x16, + 0x22, 0x01, 0x92, 0x03, 0x4a, 0x8c, 0x78, 0x03, + 0x5c, 0xd3, 0x08, 0x5b, 0xd3, 0x04, 0x78, 0x43, + 0x5c, 0xd3, 0x30, 0x01, 0x08, 0x5b, 0xd2, 0xfa, + 0x78, 0x02, 0x2a, 0x22, 0xd0, 0x01, 0x2a, 0x27, + 0xd1, 0x0c, 0x30, 0x01, 0x1c, 0x16, 0xe0, 0x09, + 0xe0, 0x6a, 0xe0, 0xfb, 0xe0, 0x23, 0x78, 0x02, + 0x2a, 0x00, 0xd0, 0x03, 0x4b, 0x80, 0x5c, 0x9a, + 0x08, 0x52, 0xd3, 0x61, 0x22, 0x01, 0x92, 0x02, + 0x1c, 0x04, 0x78, 0x27, 0x34, 0x01, 0x2e, 0x00, + 0xd0, 0x15, 0x2f, 0x5c, 0xd1, 0x0b, 0x78, 0x20, + 0x28, 0x22, 0xd0, 0x03, 0x28, 0x5c, 0xd0, 0x01, + 0x28, 0x27, 0xd1, 0x04, 0x34, 0x01, 0x1c, 0x07, + 0xe0, 0x09, 0xe0, 0xdf, 0xe0, 0xde, 0x1c, 0x30, + 0x42, 0xb7, 0xd1, 0x04, 0x40, 0x7e, 0x78, 0x27, + 0x34, 0x01, 0x42, 0x87, 0xd0, 0xfa, 0x2f, 0x00, + 0xd0, 0x0c, 0x2e, 0x00, 0xd1, 0x03, 0x48, 0x6e, + 0x5d, 0xc0, 0x08, 0x40, 0xd2, 0x06, 0x1c, 0x08, + 0x9b, 0x08, 0x68, 0x5a, 0x54, 0x17, 0x31, 0x01, + 0xe0, 0x97, 0xe0, 0xc7, 0x98, 0x06, 0x42, 0x81, + 0xd1, 0x08, 0x98, 0x05, 0x28, 0x00, 0xd1, 0x05, + 0x98, 0x02, 0x28, 0x00, 0xd0, 0x74, 0x98, 0x03, + 0x28, 0x00, 0xd1, 0x72, 0x22, 0x00, 0x1c, 0x08, + 0x9b, 0x08, 0x68, 0x5b, 0x54, 0x1a, 0x98, 0x02, + 0x31, 0x01, 0x28, 0x00, 0xd0, 0x6a, 0x98, 0x03, + 0x28, 0x00, 0xd0, 0x13, 0x01, 0xa8, 0x99, 0x07, + 0x18, 0x42, 0x9b, 0x08, 0x68, 0x58, 0x99, 0x06, + 0x18, 0x40, 0x46, 0x69, 0xf0, 0x01, 0xfc, 0x72, + 0x28, 0x00, 0xd1, 0x07, 0x9b, 0x08, 0x68, 0x58, + 0x99, 0x06, 0x18, 0x41, 0xa2, 0x58, 0xa0, 0x5e, + 0xf7, 0xff, 0xfe, 0xb6, 0x23, 0x01, 0x98, 0x01, + 0x42, 0xd8, 0xdd, 0x51, 0x98, 0x01, 0x28, 0x00, + 0xda, 0x03, 0x40, 0x18, 0x42, 0x40, 0xe0, 0x02, + 0xe0, 0x90, 0x07, 0xc0, 0x0f, 0xc0, 0x1c, 0x41, + 0x98, 0x01, 0xf0, 0x01, 0xfd, 0x61, 0x01, 0x80, + 0x99, 0x07, 0x18, 0x40, 0xf0, 0x01, 0xf9, 0xfc, + 0x28, 0x00, 0xd1, 0x3d, 0xb0, 0x82, 0x98, 0x03, + 0x01, 0x80, 0x99, 0x09, 0x18, 0x40, 0x90, 0x01, + 0x9a, 0x03, 0x2a, 0x00, 0xda, 0x03, 0x07, 0xd2, + 0x0f, 0xd2, 0x42, 0x52, 0xe0, 0x01, 0x07, 0xd2, + 0x0f, 0xd2, 0x01, 0x90, 0x99, 0x09, 0x18, 0x40, + 0x30, 0x40, 0x90, 0x00, 0x20, 0xff, 0x30, 0x01, + 0xf0, 0x01, 0xfa, 0xe0, 0x1c, 0x01, 0x23, 0xff, + 0x22, 0x01, 0x02, 0x52, 0x98, 0x01, 0x33, 0x01, + 0xf0, 0x01, 0xfd, 0x56, 0x98, 0x01, 0x68, 0xc0, + 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, 0x99, 0x01, + 0x60, 0xc8, 0x08, 0xd8, 0xf0, 0x01, 0xfa, 0xce, + 0x1c, 0x01, 0x23, 0xff, 0x22, 0x01, 0x02, 0x52, + 0x98, 0x00, 0x33, 0x01, 0xf0, 0x01, 0xfd, 0x44, + 0x98, 0x00, 0x68, 0xc0, 0x23, 0x01, 0x02, 0xdb, + 0x43, 0x18, 0x99, 0x00, 0x60, 0xc8, 0xe0, 0x02, + 0xe0, 0x13, 0xe0, 0x12, 0xe0, 0x05, 0xb0, 0x02, + 0x20, 0x00, 0x90, 0x02, 0x90, 0x03, 0x99, 0x06, + 0xe0, 0x0b, 0x9b, 0x08, 0x68, 0x58, 0x9a, 0x06, + 0x18, 0x82, 0x98, 0x04, 0x1c, 0x43, 0x93, 0x04, + 0x00, 0x80, 0x9b, 0x08, 0x68, 0x1b, 0x50, 0x1a, + 0x91, 0x06, 0x2f, 0x00, 0xd0, 0x01, 0x26, 0x00, + 0x96, 0x05, 0x2f, 0x00, 0xd0, 0x00, 0xe6, 0x9d, + 0x2e, 0x00, 0xd0, 0x0a, 0xb0, 0x81, 0xab, 0x00, + 0x70, 0x1e, 0x22, 0x00, 0x70, 0x5a, 0x46, 0x69, + 0xa2, 0x24, 0xa0, 0x25, 0xf7, 0xff, 0xfe, 0x3c, + 0xb0, 0x01, 0x22, 0x00, 0x98, 0x04, 0x00, 0x80, + 0x9b, 0x08, 0x68, 0x19, 0x50, 0x0a, 0x98, 0x04, + 0x28, 0x00, 0xdd, 0x0f, 0x9b, 0x08, 0x68, 0x18, + 0x68, 0x01, 0x68, 0x09, 0x4b, 0x21, 0x40, 0x19, + 0xa2, 0x21, 0x68, 0x12, 0x42, 0x91, 0xd1, 0x05, + 0x9b, 0x04, 0x3b, 0x01, 0x93, 0x04, 0x30, 0x04, + 0x9b, 0x08, 0x60, 0x18, 0x9a, 0x09, 0x9b, 0x08, + 0x68, 0x19, 0x98, 0x04, 0xf7, 0xff, 0xf8, 0x0f, + 0xf7, 0xff, 0xf8, 0x88, 0x1e, 0x61, 0xa2, 0x19, + 0xa0, 0x19, 0xf7, 0xff, 0xfe, 0x15, 0xb0, 0x09, + 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x21, 0xb4, 0x2e, 0x08, 0x21, 0xa4, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x95, 0xe4, + 0x27, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x2f, + 0x4f, 0x20, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x00, 0x00, + 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x6f, 0x70, + 0x65, 0x6e, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, + 0x63, 0x6c, 0x6f, 0x73, 0x69, 0x6e, 0x67, 0x20, + 0x00, 0x00, 0x00, 0x00, 0xdf, 0xdf, 0xdf, 0xdf, + 0x52, 0x55, 0x4e, 0x00, 0x27, 0x0a, 0x00, 0x00, + 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x69, + 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x49, + 0x2f, 0x4f, 0x20, 0x72, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x27, + 0x00, 0x00, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, + 0xe1, 0xa0, 0x68, 0x80, 0xe0, 0x56, 0x88, 0x83, + 0xe0, 0x20, 0xe0, 0x03, 0xe2, 0x00, 0x01, 0x02, + 0xe1, 0xa0, 0x38, 0xa6, 0x8a, 0x00, 0x00, 0x1a, + 0x01, 0xa0, 0x90, 0x08, 0x0a, 0x00, 0x00, 0x2e, + 0xe2, 0x68, 0x60, 0x00, 0xe1, 0xa0, 0x68, 0xa6, + 0xe0, 0x83, 0x30, 0x06, 0xe1, 0xa0, 0x92, 0xa6, + 0xe1, 0xc6, 0x62, 0x89, 0xe3, 0x59, 0x00, 0x02, + 0x33, 0x39, 0x00, 0x00, 0xe2, 0x66, 0x90, 0x20, + 0xe1, 0xa0, 0x89, 0x12, 0xe1, 0xa0, 0x26, 0x32, + 0xe1, 0x82, 0x29, 0x11, 0xe1, 0xa0, 0x16, 0x31, + 0x0a, 0x00, 0x00, 0x03, 0x11, 0x88, 0x81, 0x08, + 0x11, 0x82, 0x81, 0x28, 0x11, 0xa0, 0x20, 0x01, + 0x13, 0xa0, 0x10, 0x00, 0x3a, 0x00, 0x00, 0x04, + 0x21, 0x88, 0x80, 0x02, 0x21, 0x88, 0x81, 0x08, + 0x21, 0x81, 0x81, 0x28, 0x23, 0xa0, 0x20, 0x00, + 0x23, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x90, 0x00, + 0xea, 0x00, 0x00, 0x15, 0xe1, 0xa0, 0x68, 0xa8, + 0xe1, 0xa0, 0x82, 0xa6, 0xe1, 0xc6, 0x62, 0x88, + 0xe3, 0x58, 0x00, 0x02, 0x33, 0x38, 0x00, 0x00, + 0xe2, 0x66, 0x80, 0x20, 0xe1, 0xa0, 0x98, 0x15, + 0xe1, 0xa0, 0x56, 0x35, 0xe1, 0x85, 0x58, 0x14, + 0xe1, 0xa0, 0x46, 0x34, 0x0a, 0x00, 0x00, 0x03, + 0x11, 0x89, 0x91, 0x09, 0x11, 0x85, 0x91, 0x29, + 0x11, 0xa0, 0x50, 0x04, 0x13, 0xa0, 0x40, 0x00, + 0x3a, 0x00, 0x00, 0x04, 0x21, 0x89, 0x90, 0x05, + 0x21, 0x89, 0x91, 0x09, 0x21, 0x84, 0x91, 0x29, + 0x23, 0xa0, 0x50, 0x00, 0x23, 0xa0, 0x40, 0x00, + 0xe3, 0xa0, 0x80, 0x00, 0xe3, 0x1e, 0x01, 0x02, + 0x1a, 0x00, 0x00, 0x09, 0xe0, 0x98, 0x60, 0x09, + 0xe0, 0xb2, 0x20, 0x05, 0xe0, 0xb1, 0x10, 0x04, + 0x38, 0xbd, 0x80, 0x00, 0xe2, 0x83, 0x30, 0x01, + 0xe1, 0xb0, 0x10, 0x61, 0xe1, 0xb0, 0x20, 0x62, + 0xe1, 0x86, 0x60, 0x86, 0xe1, 0xa0, 0x60, 0x66, + 0xe8, 0xbd, 0x80, 0x00, 0xe0, 0x58, 0x60, 0x09, + 0xe0, 0xd2, 0x20, 0x05, 0xe0, 0xd1, 0x10, 0x04, + 0x2a, 0x00, 0x00, 0x03, 0xe2, 0x20, 0x01, 0x02, + 0xe2, 0x76, 0x60, 0x00, 0xe2, 0xf2, 0x20, 0x00, + 0xe2, 0xe1, 0x10, 0x00, 0xe3, 0x11, 0x01, 0x02, + 0x18, 0xbd, 0x80, 0x00, 0xe0, 0x96, 0x60, 0x06, + 0xe0, 0xb2, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, + 0xe2, 0x43, 0x30, 0x01, 0xe3, 0x11, 0x01, 0x02, + 0x18, 0xbd, 0x80, 0x00, 0xe1, 0x91, 0xe0, 0x02, + 0x1b, 0x00, 0x06, 0x90, 0x18, 0xbd, 0x80, 0x00, + 0xe3, 0xa0, 0x00, 0x00, 0xe3, 0xa0, 0x10, 0x00, + 0xe2, 0x8d, 0xd0, 0x04, 0xe8, 0xbd, 0x4b, 0xf0, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xa0, 0x98, 0x83, + 0xe3, 0x79, 0x08, 0x02, 0x30, 0x09, 0x90, 0x04, + 0xe0, 0x19, 0x90, 0x83, 0xe1, 0xa0, 0x88, 0x80, + 0xe3, 0x78, 0x08, 0x02, 0x30, 0x08, 0x80, 0x01, + 0xe0, 0x18, 0x80, 0x80, 0x4a, 0x00, 0x00, 0x14, + 0xe3, 0x19, 0x01, 0x02, 0x1a, 0x00, 0x00, 0x22, + 0xe9, 0x2d, 0x40, 0x00, 0xe0, 0x11, 0x60, 0x80, + 0x43, 0xc1, 0x11, 0x02, 0x42, 0x80, 0x00, 0x01, + 0xe0, 0x14, 0x60, 0x83, 0x43, 0xc4, 0x41, 0x02, + 0x42, 0x83, 0x30, 0x01, 0xe3, 0x10, 0x01, 0x01, + 0x11, 0xb0, 0x68, 0x80, 0x1b, 0x00, 0x05, 0xf8, + 0xe3, 0x13, 0x01, 0x01, 0x11, 0xb0, 0x68, 0x83, + 0x1b, 0x00, 0x06, 0x2f, 0xeb, 0xff, 0xff, 0x8a, + 0xe3, 0x11, 0x01, 0x02, 0x18, 0xbd, 0x80, 0x00, + 0xe1, 0x91, 0xe0, 0x02, 0x1b, 0x00, 0x06, 0x6d, + 0xe8, 0xbd, 0x80, 0x00, 0xe3, 0x19, 0x01, 0x02, + 0x0a, 0x00, 0x00, 0x09, 0xe1, 0x82, 0x80, 0x81, + 0xe1, 0x88, 0x80, 0x05, 0xe1, 0x98, 0x80, 0x84, + 0x1a, 0x00, 0x06, 0xb7, 0xe0, 0x23, 0x85, 0x0b, + 0xe0, 0x38, 0x80, 0x00, 0x52, 0x00, 0x81, 0x02, + 0x5a, 0x00, 0x00, 0x0a, 0xe3, 0x80, 0x04, 0x61, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x92, 0x80, 0x81, + 0x1a, 0x00, 0x06, 0xc0, 0xe2, 0x00, 0x81, 0x02, + 0xea, 0x00, 0x00, 0x04, 0xe1, 0x95, 0x80, 0x84, + 0x1a, 0x00, 0x06, 0xb3, 0xe2, 0x03, 0x81, 0x02, + 0xe3, 0x1b, 0x06, 0x02, 0x12, 0x28, 0x81, 0x02, + 0xe3, 0x1b, 0x06, 0x01, 0x12, 0x28, 0x81, 0x02, + 0xe2, 0x8f, 0x00, 0x14, 0xe8, 0x90, 0x00, 0x07, + 0xe1, 0x80, 0x00, 0x08, 0xe1, 0xa0, 0xf0, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe8, 0xbd, 0x4b, 0xf0, 0xe5, 0x9f, 0x20, 0x6c, + 0xe5, 0x92, 0x10, 0x00, 0xe1, 0xa0, 0xc1, 0x83, + 0xe1, 0xa0, 0xcd, 0xac, 0xe1, 0x81, 0x10, 0x0c, + 0xe5, 0x82, 0x10, 0x00, 0xe3, 0x13, 0x03, 0x01, + 0x1a, 0x00, 0x00, 0x05, 0xe3, 0x13, 0x04, 0x02, + 0x1a, 0x00, 0x00, 0x07, 0xe3, 0x11, 0x08, 0x01, + 0x0a, 0x00, 0x00, 0x44, 0xe2, 0x8f, 0x00, 0x54, + 0xea, 0x00, 0x00, 0x06, 0xe3, 0x11, 0x07, 0x01, + 0x0a, 0x00, 0x00, 0x34, 0xe2, 0x8f, 0x00, 0x74, + 0xea, 0x00, 0x00, 0x02, 0xe3, 0x11, 0x08, 0x02, + 0x0a, 0x00, 0x00, 0x30, 0xe2, 0x8f, 0x00, 0x8c, + 0xe5, 0x9f, 0x10, 0x1c, 0xe2, 0x4e, 0xe0, 0x04, + 0xe5, 0x81, 0xe0, 0x3c, 0xe3, 0xa0, 0xec, 0xde, + 0xe3, 0x8e, 0xe0, 0xad, 0xe1, 0x8e, 0xe8, 0x0e, + 0xe8, 0x81, 0x7f, 0xff, 0xea, 0x00, 0x00, 0x01, + 0x2e, 0x08, 0x22, 0xb4, 0x2e, 0x08, 0x22, 0xb8, + 0xe5, 0x9f, 0xc1, 0x2c, 0xe3, 0x5c, 0x00, 0x00, + 0x11, 0x2f, 0xff, 0x1c, 0xe6, 0x00, 0x00, 0x10, + 0x80, 0x00, 0x02, 0x00, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, + 0x80, 0x00, 0x02, 0x01, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4f, 0x76, + 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x00, 0x00, + 0x80, 0x00, 0x02, 0x02, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x20, 0x45, 0x78, 0x63, 0x65, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x44, 0x69, + 0x76, 0x69, 0x64, 0x65, 0x20, 0x42, 0x79, 0x20, + 0x5a, 0x65, 0x72, 0x6f, 0x00, 0x00, 0x00, 0x00, + 0xe2, 0x00, 0x21, 0x02, 0xe3, 0x13, 0x07, 0x0f, + 0x1a, 0x00, 0x00, 0x13, 0xe3, 0x13, 0x05, 0x02, + 0x12, 0x8f, 0x00, 0x0c, 0x18, 0x90, 0x00, 0x03, + 0x05, 0x9f, 0x00, 0x0c, 0xe1, 0x80, 0x00, 0x02, + 0xe1, 0x2f, 0xff, 0x1e, 0x7f, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0xe3, 0x13, 0x07, 0x0f, 0x12, 0x00, 0x21, 0x02, + 0x1a, 0x00, 0x00, 0x07, 0xe3, 0x13, 0x05, 0x02, + 0x12, 0x8f, 0x00, 0x08, 0x18, 0x90, 0x00, 0x03, + 0x05, 0x9f, 0x00, 0x08, 0xe1, 0x2f, 0xff, 0x1e, + 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, 0xe3, 0x13, 0x07, 0x02, + 0x13, 0xa0, 0x00, 0x00, 0x13, 0xa0, 0x10, 0x00, + 0x11, 0x2f, 0xff, 0x1e, 0xe3, 0x13, 0x07, 0x01, + 0x13, 0xe0, 0x00, 0x00, 0x13, 0xe0, 0x10, 0x00, + 0x11, 0x2f, 0xff, 0x1e, 0xe3, 0x13, 0x06, 0x01, + 0x13, 0xa0, 0x00, 0x00, 0x13, 0xa0, 0x11, 0x02, + 0x03, 0xa0, 0x01, 0x02, 0xe3, 0x32, 0x01, 0x02, + 0x11, 0xe0, 0x00, 0x00, 0x11, 0xe0, 0x10, 0x01, + 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x01, 0x8f, 0x31, + 0xe3, 0x10, 0x02, 0x06, 0x1a, 0x00, 0x00, 0x0d, + 0xe1, 0xb0, 0x80, 0x86, 0x0a, 0x00, 0x00, 0x0d, + 0x22, 0x92, 0x20, 0x01, 0x22, 0x91, 0x10, 0x01, + 0x23, 0xa0, 0x11, 0x02, 0xe2, 0xb3, 0x30, 0x00, + 0x4a, 0x00, 0x00, 0x0a, 0xe2, 0x83, 0xc0, 0x01, + 0xe3, 0xcc, 0xc1, 0x01, 0xe3, 0x5c, 0x09, 0x02, + 0xc3, 0xa0, 0x33, 0x19, 0xe2, 0x00, 0x01, 0x02, + 0xe1, 0x83, 0x00, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, + 0x21, 0xb0, 0x80, 0xa2, 0xea, 0xff, 0xff, 0xef, + 0xe3, 0x11, 0x01, 0x02, 0x1a, 0x00, 0x00, 0x04, + 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x20, 0x00, + 0xe2, 0x00, 0x01, 0x02, 0xe3, 0xa0, 0x30, 0x00, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0xb0, 0xc8, 0x21, + 0x01, 0xa0, 0xc8, 0x22, 0x01, 0x8c, 0x18, 0x01, + 0x02, 0x83, 0x30, 0x10, 0xe1, 0xb0, 0xcc, 0x21, + 0x01, 0xa0, 0xcc, 0x22, 0x01, 0x8c, 0x14, 0x01, + 0x02, 0x83, 0x30, 0x08, 0xe1, 0xb0, 0xce, 0x21, + 0x01, 0xa0, 0xce, 0x22, 0x01, 0x8c, 0x12, 0x01, + 0x02, 0x83, 0x30, 0x04, 0xe1, 0xb0, 0xcf, 0x21, + 0x01, 0xa0, 0xcf, 0x22, 0x01, 0x8c, 0x11, 0x01, + 0x02, 0x83, 0x30, 0x02, 0xe1, 0xb0, 0xcf, 0xa1, + 0x01, 0xa0, 0xcf, 0xa2, 0x01, 0x8c, 0x10, 0x81, + 0x02, 0x83, 0x30, 0x01, 0xe1, 0xb0, 0x30, 0x03, + 0x4a, 0xff, 0xff, 0xe4, 0x5a, 0xff, 0xff, 0xda, + 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, + 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, + 0xe0, 0x88, 0x30, 0x09, 0xe2, 0x43, 0x3c, 0x3f, + 0xe2, 0x43, 0x30, 0xfe, 0xe3, 0x32, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x5d, 0xe3, 0x35, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x3d, 0xe9, 0x2d, 0x48, 0x81, + 0xe1, 0xa0, 0x08, 0x21, 0xe1, 0xc1, 0x78, 0x00, + 0xe1, 0xa0, 0x68, 0x24, 0xe1, 0xc4, 0x88, 0x06, + 0xe0, 0x09, 0x06, 0x90, 0xe0, 0x06, 0x06, 0x97, + 0xe0, 0x07, 0x07, 0x98, 0xe0, 0x97, 0x78, 0x06, + 0xe0, 0xa9, 0x98, 0x26, 0xe0, 0x08, 0x08, 0x90, + 0xe0, 0x97, 0x78, 0x08, 0xe0, 0xa9, 0x08, 0x28, + 0xe1, 0xa0, 0xb8, 0x22, 0xe1, 0xc2, 0xe8, 0x0b, + 0xe1, 0xa0, 0x68, 0x25, 0xe1, 0xc5, 0x88, 0x06, + 0xe0, 0x09, 0x06, 0x9b, 0xe0, 0x06, 0x06, 0x9e, + 0xe0, 0x0e, 0x0e, 0x98, 0xe0, 0x9e, 0xe8, 0x06, + 0xe0, 0xa9, 0x98, 0x26, 0xe0, 0x08, 0x08, 0x9b, + 0xe0, 0x9e, 0xe8, 0x08, 0xe0, 0xa9, 0xb8, 0x28, + 0xe0, 0x97, 0x70, 0x0b, 0xe2, 0xa0, 0x00, 0x00, + 0xe0, 0x97, 0xb0, 0x0e, 0xe0, 0xb7, 0x70, 0x00, + 0xe2, 0xa0, 0x00, 0x00, 0xe0, 0x51, 0x80, 0x02, + 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x60, 0x00, + 0x31, 0xe0, 0x10, 0x01, 0x30, 0x44, 0x60, 0x05, + 0x10, 0x55, 0x90, 0x04, 0x03, 0xa0, 0x10, 0x00, + 0x31, 0xe0, 0x10, 0x01, 0x30, 0x46, 0x60, 0x08, + 0xe1, 0xa0, 0x48, 0x28, 0xe1, 0xc8, 0x58, 0x04, + 0xe1, 0xa0, 0x88, 0x29, 0xe1, 0xc9, 0x98, 0x08, + 0xe0, 0x22, 0x68, 0x94, 0xe0, 0x08, 0x08, 0x95, + 0xe0, 0x06, 0x05, 0x99, 0xe0, 0x96, 0x68, 0x08, + 0xe0, 0xa2, 0x28, 0x28, 0xe0, 0x09, 0x09, 0x94, + 0xe0, 0x96, 0x68, 0x09, 0xe0, 0xa2, 0x28, 0x29, + 0xe0, 0x9b, 0x60, 0x06, 0xe0, 0xb7, 0x20, 0x02, + 0xe0, 0xb0, 0x10, 0x01, 0xe1, 0x8e, 0xe1, 0x0e, + 0xe1, 0x86, 0x61, 0x2e, 0x48, 0xbd, 0x88, 0x81, + 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, + 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, + 0xe8, 0xbd, 0x88, 0x81, 0xe1, 0xa0, 0x58, 0x24, + 0xe1, 0xc4, 0x68, 0x05, 0xe1, 0xa0, 0x88, 0x21, + 0xe1, 0xc1, 0x98, 0x08, 0xe0, 0x04, 0x08, 0x95, + 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x01, 0x06, 0x99, + 0xe0, 0x91, 0x18, 0x08, 0xe0, 0xa4, 0x48, 0x28, + 0xe0, 0x09, 0x09, 0x95, 0xe0, 0x91, 0x18, 0x09, + 0xe0, 0xa4, 0x48, 0x29, 0xe1, 0xa0, 0x88, 0x22, + 0xe1, 0xc2, 0x98, 0x08, 0xe0, 0x02, 0x08, 0x95, + 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x06, 0x06, 0x99, + 0xe0, 0x96, 0x68, 0x08, 0xe0, 0xa2, 0x28, 0x28, + 0xe0, 0x09, 0x09, 0x95, 0xe0, 0x96, 0x68, 0x09, + 0xe0, 0xa2, 0x58, 0x29, 0xe0, 0x95, 0x20, 0x01, + 0xe2, 0xb4, 0x10, 0x00, 0x41, 0xa0, 0xf0, 0x0e, + 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, + 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x35, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x24, 0xe1, 0xa0, 0x28, 0x21, + 0xe1, 0xc1, 0x68, 0x02, 0xe1, 0xa0, 0x88, 0x24, + 0xe1, 0xc4, 0x98, 0x08, 0xe0, 0x01, 0x08, 0x92, + 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x04, 0x06, 0x99, + 0xe0, 0x94, 0x48, 0x08, 0xe0, 0xa1, 0x18, 0x28, + 0xe0, 0x09, 0x09, 0x92, 0xe0, 0x94, 0x48, 0x09, + 0xe0, 0xa1, 0x18, 0x29, 0xe1, 0xa0, 0x88, 0x25, + 0xe1, 0xc5, 0x98, 0x08, 0xe0, 0x05, 0x08, 0x92, + 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x06, 0x06, 0x99, + 0xe0, 0x96, 0x68, 0x08, 0xe0, 0xa5, 0x58, 0x28, + 0xe0, 0x09, 0x09, 0x92, 0xe0, 0x96, 0x68, 0x09, + 0xe0, 0xa5, 0x28, 0x29, 0xe0, 0x92, 0x20, 0x04, + 0xe2, 0xb1, 0x10, 0x00, 0x41, 0xa0, 0xf0, 0x0e, + 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, + 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0xc0, 0x81, 0x03, + 0xe3, 0xc3, 0x91, 0x03, 0xe0, 0x20, 0x00, 0x03, + 0xe2, 0x00, 0x01, 0x02, 0xe0, 0x88, 0x30, 0x09, + 0xe2, 0x43, 0x3c, 0x3f, 0xe2, 0x43, 0x30, 0xfe, + 0xe1, 0xa0, 0x58, 0x24, 0xe1, 0xc4, 0x68, 0x05, + 0xe1, 0xa0, 0x88, 0x21, 0xe1, 0xc1, 0x98, 0x08, + 0xe0, 0x01, 0x08, 0x95, 0xe0, 0x08, 0x08, 0x96, + 0xe0, 0x02, 0x06, 0x99, 0xe0, 0x92, 0x28, 0x08, + 0xe0, 0xa1, 0x18, 0x28, 0xe0, 0x09, 0x09, 0x95, + 0xe0, 0x92, 0x28, 0x09, 0xe0, 0xb1, 0x18, 0x29, + 0xe3, 0xa0, 0x60, 0x00, 0x41, 0xa0, 0xf0, 0x0e, + 0xe0, 0x92, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, + 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, + 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, + 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, + 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, + 0x4a, 0x00, 0x00, 0x1f, 0xe3, 0x19, 0x01, 0x02, + 0x1a, 0x00, 0x00, 0x2f, 0xe1, 0x91, 0x80, 0x02, + 0x11, 0x94, 0x80, 0x05, 0x0a, 0x00, 0x00, 0x13, + 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, + 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, + 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, + 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, + 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, + 0xe0, 0x88, 0x30, 0x09, 0xe2, 0x43, 0x3c, 0x3f, + 0xe2, 0x43, 0x30, 0xfe, 0xe9, 0x2d, 0x40, 0x00, + 0xe3, 0x11, 0x01, 0x02, 0x0b, 0x00, 0x04, 0xed, + 0xe3, 0x14, 0x01, 0x02, 0x0b, 0x00, 0x05, 0x04, + 0xe8, 0xbd, 0x40, 0x00, 0xea, 0xff, 0xff, 0x44, + 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, + 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x20, 0x00, + 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0xa0, 0x60, 0x00, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x19, 0x01, 0x02, + 0x0a, 0x00, 0x00, 0x09, 0xe1, 0x82, 0x80, 0x81, + 0xe1, 0x88, 0x80, 0x05, 0xe1, 0x98, 0x80, 0x84, + 0x1a, 0x00, 0x05, 0x2d, 0xe0, 0x20, 0x80, 0x03, + 0xe2, 0x08, 0x81, 0x02, 0xe2, 0x8f, 0x00, 0x44, + 0xe8, 0x90, 0x00, 0x07, 0xe1, 0x80, 0x00, 0x08, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x92, 0x80, 0x81, + 0x1a, 0x00, 0x05, 0x36, 0xe1, 0x94, 0x80, 0x05, + 0x1a, 0xff, 0xff, 0xf5, 0xe3, 0x80, 0x04, 0x61, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x95, 0x80, 0x84, + 0x1a, 0x00, 0x05, 0x27, 0xe1, 0x91, 0x80, 0x02, + 0x1a, 0xff, 0xff, 0xef, 0xe3, 0x80, 0x04, 0x61, + 0xe1, 0xa0, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe1, 0xa0, 0x80, 0x00, + 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x30, 0x08, + 0xe1, 0xa0, 0x80, 0x01, 0xe1, 0xa0, 0x10, 0x04, + 0xe1, 0xa0, 0x40, 0x08, 0xe1, 0xa0, 0x80, 0x02, + 0xe1, 0xa0, 0x20, 0x05, 0xe1, 0xa0, 0x50, 0x08, + 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, + 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, + 0xe0, 0x49, 0x30, 0x08, 0xe2, 0x83, 0x3c, 0x3f, + 0xe2, 0x83, 0x30, 0xff, 0xe9, 0x2d, 0x48, 0x89, + 0xe1, 0xa0, 0x08, 0x21, 0xe1, 0xc1, 0x78, 0x00, + 0xe1, 0xa0, 0xb8, 0x22, 0xe1, 0xc2, 0xe8, 0x0b, + 0xe2, 0x8f, 0x6e, 0x36, 0xe7, 0xd6, 0x64, 0x20, + 0xe0, 0x28, 0x66, 0x90, 0xe2, 0x68, 0x85, 0x02, + 0xe0, 0x06, 0x06, 0x98, 0xe1, 0xa0, 0x69, 0xa6, + 0xe2, 0x86, 0x60, 0x02, 0xe1, 0xa0, 0x86, 0xa1, + 0xe0, 0x29, 0x66, 0x98, 0xe2, 0x69, 0x92, 0x02, + 0xe1, 0xa0, 0x88, 0x29, 0xe1, 0xc9, 0x98, 0x08, + 0xe0, 0x02, 0x06, 0x99, 0xe0, 0x01, 0x06, 0x98, + 0xe0, 0x81, 0x68, 0x22, 0xe1, 0xa0, 0x63, 0x26, + 0xe1, 0xb0, 0x40, 0xa4, 0xe1, 0xb0, 0x50, 0x65, + 0x33, 0xa0, 0x30, 0x00, 0x23, 0xa0, 0x31, 0x02, + 0xe1, 0xa0, 0x87, 0xa4, 0xe0, 0x09, 0x08, 0x96, + 0xe1, 0xa0, 0x98, 0x29, 0xe0, 0x08, 0x0b, 0x99, + 0xe0, 0x55, 0x50, 0x08, 0xe0, 0x08, 0x09, 0x90, + 0xe0, 0xc4, 0x40, 0x08, 0xe0, 0x08, 0x0e, 0x99, + 0xe0, 0x53, 0x38, 0x08, 0xe0, 0xd5, 0x58, 0x28, + 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x58, 0x08, + 0x20, 0x55, 0x58, 0x08, 0xe0, 0xc4, 0x48, 0x28, + 0xe1, 0xa0, 0x18, 0x09, 0xe1, 0xa0, 0x81, 0x24, + 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, + 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x53, 0x39, 0x88, + 0xe0, 0xd5, 0x56, 0xa8, 0xe0, 0x08, 0x09, 0x90, + 0x30, 0x45, 0x59, 0x88, 0x20, 0x55, 0x59, 0x88, + 0xe0, 0xc4, 0x46, 0xa8, 0xe0, 0x08, 0x0e, 0x99, + 0xe0, 0x53, 0x31, 0x88, 0xe0, 0xd5, 0x5e, 0xa8, + 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x51, 0x88, + 0x20, 0x55, 0x51, 0x88, 0xe0, 0xc4, 0x4e, 0xa8, + 0xe1, 0xa0, 0x4d, 0x04, 0xe1, 0x84, 0x43, 0x25, + 0xe1, 0xa0, 0x5d, 0x05, 0xe1, 0x85, 0x53, 0x23, + 0xe1, 0xa0, 0x3d, 0x03, 0xe0, 0x81, 0x11, 0x89, + 0xe5, 0x9d, 0x80, 0x0c, 0xe3, 0x18, 0x00, 0x01, + 0x1a, 0x00, 0x00, 0x94, 0xe1, 0xa0, 0x87, 0xa4, + 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, + 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x55, 0x50, 0x08, + 0xe0, 0x08, 0x09, 0x90, 0xe0, 0xc4, 0x40, 0x08, + 0xe0, 0x08, 0x0e, 0x99, 0xe0, 0x53, 0x38, 0x08, + 0xe0, 0xd5, 0x58, 0x28, 0xe0, 0x08, 0x07, 0x99, + 0x30, 0x45, 0x58, 0x08, 0x20, 0x55, 0x58, 0x08, + 0xe0, 0xc4, 0x48, 0x28, 0xe1, 0xa0, 0x2b, 0x09, + 0xe0, 0x81, 0x15, 0x29, 0xe1, 0xa0, 0x81, 0x24, + 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, + 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x53, 0x39, 0x88, + 0xe0, 0xd5, 0x56, 0xa8, 0xe0, 0x08, 0x09, 0x90, + 0x30, 0x45, 0x59, 0x88, 0x20, 0x55, 0x59, 0x88, + 0xe0, 0xc4, 0x46, 0xa8, 0xe0, 0x08, 0x0e, 0x99, + 0xe0, 0x53, 0x31, 0x88, 0xe0, 0xd5, 0x5e, 0xa8, + 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x51, 0x88, + 0x20, 0x55, 0x51, 0x88, 0xe0, 0xc4, 0x4e, 0xa8, + 0xe1, 0xa0, 0x4d, 0x04, 0xe1, 0x84, 0x43, 0x25, + 0xe1, 0xa0, 0x5d, 0x05, 0xe1, 0x85, 0x53, 0x23, + 0xe1, 0xa0, 0x3d, 0x03, 0xe0, 0x92, 0x24, 0x89, + 0xe2, 0xa1, 0x10, 0x00, 0xe5, 0x9d, 0x80, 0x0c, + 0xe3, 0x18, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x3f, + 0xe1, 0xa0, 0x87, 0xa4, 0xe0, 0x09, 0x08, 0x96, + 0xe1, 0xa0, 0x98, 0x29, 0xe0, 0x08, 0x0b, 0x99, + 0xe0, 0x55, 0x50, 0x08, 0xe0, 0x08, 0x09, 0x90, + 0xe0, 0xc4, 0x40, 0x08, 0xe0, 0x08, 0x0e, 0x99, + 0xe0, 0x53, 0x38, 0x08, 0xe0, 0xd5, 0x58, 0x28, + 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x58, 0x08, + 0x20, 0x55, 0x58, 0x08, 0xe0, 0xc4, 0x48, 0x28, + 0xe1, 0xa0, 0x47, 0x04, 0xe1, 0x84, 0x49, 0x25, + 0xe1, 0xa0, 0x57, 0x05, 0xe1, 0x85, 0x59, 0x23, + 0xe1, 0xa0, 0x37, 0x03, 0xe1, 0xa0, 0x6e, 0x09, + 0xe0, 0x92, 0x22, 0x29, 0xe2, 0xa1, 0x10, 0x00, + 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, + 0xe3, 0xa0, 0xe0, 0x00, 0xe0, 0x55, 0x90, 0x07, + 0xe0, 0xd4, 0x80, 0x00, 0x21, 0xa0, 0x50, 0x09, + 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, + 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, + 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, + 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, + 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, + 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, + 0xe0, 0xae, 0xe0, 0x0e, 0xe3, 0xa0, 0xb0, 0x00, + 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, + 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, + 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, + 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, + 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, + 0xe1, 0x94, 0x80, 0x05, 0x13, 0x86, 0x60, 0x01, + 0xe0, 0x96, 0x6e, 0x0e, 0xe2, 0xb2, 0x20, 0x00, + 0xe2, 0xb1, 0x10, 0x00, 0x48, 0xbd, 0x88, 0x89, + 0xe8, 0xbd, 0x48, 0x89, 0xe0, 0x96, 0x60, 0x06, + 0xe0, 0xb2, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, + 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, + 0xe3, 0xa0, 0xe0, 0x00, 0xe0, 0x93, 0x30, 0x03, + 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xa4, 0x40, 0x04, + 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, + 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, + 0xe0, 0xae, 0xe0, 0x0e, 0xe3, 0xa0, 0xb0, 0x00, + 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, + 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, + 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, + 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, + 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, + 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, + 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, + 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, + 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, + 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, + 0xe0, 0xae, 0xe0, 0x0e, 0xe1, 0x84, 0x60, 0x05, + 0xe0, 0x92, 0x24, 0x8e, 0xe2, 0xb1, 0x10, 0x00, + 0x48, 0xbd, 0x88, 0x89, 0xe8, 0xbd, 0x48, 0x89, + 0xe0, 0x92, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, + 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, + 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, + 0xe0, 0xa4, 0x40, 0x04, 0xe0, 0x55, 0x90, 0x07, + 0xe0, 0xd4, 0x80, 0x00, 0x21, 0xa0, 0x50, 0x09, + 0x21, 0xa0, 0x40, 0x08, 0x22, 0x81, 0x10, 0x20, + 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, + 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, + 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, + 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, + 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, + 0x22, 0x81, 0x10, 0x10, 0xe3, 0xa0, 0xb0, 0x00, + 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, + 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, + 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, + 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, + 0x21, 0xa0, 0x40, 0x08, 0x22, 0x81, 0x10, 0x08, + 0xe1, 0x84, 0x60, 0x05, 0xe3, 0xa0, 0x20, 0x00, + 0xe3, 0x31, 0x00, 0x00, 0x48, 0xbd, 0x88, 0x89, + 0xe8, 0xbd, 0x48, 0x89, 0xe1, 0xa0, 0x10, 0x81, + 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, + 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, + 0x79, 0x78, 0x77, 0x76, 0x76, 0x75, 0x74, 0x73, + 0x72, 0x71, 0x71, 0x70, 0x6f, 0x6e, 0x6e, 0x6d, + 0x6c, 0x6c, 0x6b, 0x6a, 0x6a, 0x69, 0x68, 0x68, + 0x67, 0x66, 0x66, 0x65, 0x64, 0x64, 0x63, 0x63, + 0x62, 0x61, 0x61, 0x60, 0x60, 0x5f, 0x5f, 0x5e, + 0x5e, 0x5d, 0x5d, 0x5c, 0x5c, 0x5b, 0x5b, 0x5a, + 0x5a, 0x59, 0x59, 0x58, 0x58, 0x57, 0x57, 0x56, + 0x56, 0x55, 0x55, 0x55, 0x54, 0x54, 0x53, 0x53, + 0x52, 0x52, 0x52, 0x51, 0x51, 0x50, 0x50, 0x50, + 0x4f, 0x4f, 0x4f, 0x4e, 0x4e, 0x4d, 0x4d, 0x4d, + 0x4c, 0x4c, 0x4c, 0x4b, 0x4b, 0x4b, 0x4a, 0x4a, + 0x4a, 0x49, 0x49, 0x49, 0x48, 0x48, 0x48, 0x47, + 0x47, 0x47, 0x47, 0x46, 0x46, 0x46, 0x45, 0x45, + 0x45, 0x44, 0x44, 0x44, 0x44, 0x43, 0x43, 0x43, + 0x43, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, + 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, + 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, + 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, + 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, + 0x4a, 0x00, 0x00, 0x20, 0xe3, 0x19, 0x01, 0x02, + 0x1a, 0x00, 0x00, 0x32, 0xe3, 0x1b, 0x00, 0x04, + 0x1a, 0x00, 0x00, 0x08, 0xe1, 0xa0, 0x80, 0x00, + 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x30, 0x08, + 0xe1, 0xa0, 0x80, 0x01, 0xe1, 0xa0, 0x10, 0x04, + 0xe1, 0xa0, 0x40, 0x08, 0xe1, 0xa0, 0x80, 0x02, + 0xe1, 0xa0, 0x20, 0x05, 0xe1, 0xa0, 0x50, 0x08, + 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, + 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, + 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, + 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, + 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, + 0xe0, 0x49, 0x30, 0x08, 0xe2, 0x83, 0x3c, 0x3f, + 0xe2, 0x83, 0x30, 0xff, 0xe9, 0x2d, 0x40, 0x00, + 0xe3, 0x11, 0x01, 0x02, 0x0b, 0x00, 0x03, 0xa1, + 0xe3, 0x14, 0x01, 0x02, 0x0b, 0x00, 0x03, 0x86, + 0xe8, 0xbd, 0x40, 0x00, 0xea, 0xff, 0xfe, 0xb6, + 0xe3, 0x19, 0x01, 0x02, 0x0a, 0x00, 0x00, 0x05, + 0xe1, 0x82, 0x80, 0x81, 0xe1, 0x88, 0x80, 0x05, + 0xe1, 0x98, 0x80, 0x84, 0x1a, 0x00, 0x03, 0xb6, + 0xe3, 0x80, 0x04, 0x61, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe1, 0x92, 0x80, 0x81, 0x1a, 0x00, 0x03, 0xc3, + 0xe0, 0x20, 0x80, 0x03, 0xe2, 0x08, 0x81, 0x02, + 0xe3, 0x1b, 0x00, 0x04, 0x02, 0x8f, 0x00, 0x50, + 0x12, 0x8f, 0x00, 0x40, 0xe8, 0x90, 0x00, 0x07, + 0xe1, 0x80, 0x00, 0x08, 0xe3, 0xa0, 0x30, 0x00, + 0xe3, 0xa0, 0x60, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe1, 0x95, 0x80, 0x84, 0x1a, 0x00, 0x03, 0xae, + 0xe0, 0x20, 0x80, 0x03, 0xe2, 0x08, 0x81, 0x02, + 0xe3, 0x1b, 0x00, 0x04, 0x12, 0x8f, 0x00, 0x20, + 0x02, 0x8f, 0x00, 0x10, 0xe8, 0x90, 0x00, 0x07, + 0xe1, 0x80, 0x00, 0x08, 0xe3, 0xa0, 0x30, 0x00, + 0xe3, 0xa0, 0x60, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb5, 0x00, 0x49, 0x02, 0xf0, 0x00, 0xf9, 0x2a, + 0xbc, 0x08, 0x47, 0x18, 0xff, 0xff, 0xff, 0xfd, + 0xb5, 0x80, 0x1c, 0x07, 0x28, 0x0a, 0xd2, 0x14, + 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, + 0x10, 0x04, 0x10, 0x06, 0x08, 0x0a, 0x0c, 0x10, + 0x0e, 0x0e, 0xa0, 0x0f, 0xe0, 0x0c, 0xa0, 0x1a, + 0xe0, 0x0a, 0xa0, 0x33, 0xe0, 0x08, 0xa0, 0x3f, + 0xe0, 0x06, 0xa0, 0x4b, 0xe0, 0x04, 0xa0, 0x52, + 0xe0, 0x02, 0x1c, 0x38, 0xf0, 0x00, 0xff, 0x89, + 0x21, 0x03, 0xf0, 0x00, 0xf9, 0x27, 0x2f, 0x04, + 0xd1, 0x05, 0x20, 0x01, 0xf7, 0xfe, 0xf8, 0xd4, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, + 0xfd, 0xb3, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x41, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, + 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x65, 0x2e, + 0x67, 0x2e, 0x20, 0x61, 0x62, 0x6f, 0x72, 0x74, + 0x28, 0x29, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x29, 0x00, 0x00, 0x00, 0x00, + 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, + 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x28, 0x63, 0x61, 0x6c, + 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x6f, 0x6e, + 0x2d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x63, + 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, + 0x29, 0x0a, 0x5b, 0x69, 0x73, 0x20, 0x74, 0x68, + 0x65, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x20, 0x65, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, + 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x3f, 0x5d, 0x00, 0x00, 0x00, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, + 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x75, 0x73, 0x65, 0x72, 0x20, 0x2d, 0x20, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x74, + 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, + 0x64, 0x00, 0x00, 0x00, 0x49, 0x6c, 0x6c, 0x65, + 0x67, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, + 0x2e, 0x20, 0x77, 0x69, 0x6c, 0x64, 0x6c, 0x79, + 0x20, 0x6f, 0x75, 0x74, 0x73, 0x69, 0x64, 0x65, + 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x62, + 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x29, 0x00, 0x00, + 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x20, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x73, 0x65, 0x72, 0x2d, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x64, 0x20, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x6c, 0x00, 0xb5, 0x00, 0x20, 0x01, + 0x49, 0x05, 0x70, 0x08, 0xa0, 0x05, 0x21, 0x03, + 0xf0, 0x00, 0xf8, 0x78, 0x20, 0x64, 0xf7, 0xfe, + 0xf8, 0x27, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x21, 0x9c, 0x53, 0x74, 0x61, 0x63, + 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, + 0x6f, 0x77, 0x0a, 0x00, 0xb5, 0x00, 0x28, 0x07, + 0xd1, 0x03, 0xf7, 0xff, 0xff, 0xe3, 0xbc, 0x08, + 0x47, 0x18, 0xf7, 0xff, 0xff, 0x19, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x00, 0xf7, 0xff, 0xff, 0xf2, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x28, 0x00, + 0xdd, 0x01, 0x28, 0x0b, 0xdb, 0x05, 0x20, 0x03, + 0x49, 0x0b, 0x60, 0x08, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x87, 0x4b, 0x09, 0x59, 0xd9, + 0x4a, 0x09, 0x42, 0x91, 0xd1, 0x02, 0xf7, 0xff, + 0xff, 0xdd, 0xe0, 0x05, 0x4c, 0x07, 0x42, 0xa1, + 0xd0, 0x02, 0x51, 0xda, 0xf7, 0xfd, 0xfb, 0x10, + 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x20, 0xb8, 0x2e, 0x08, 0x94, 0xb4, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, + 0x28, 0x00, 0xdd, 0x09, 0x28, 0x0b, 0xda, 0x07, + 0x00, 0x80, 0x49, 0x04, 0x58, 0x08, 0x49, 0x04, + 0x42, 0x88, 0xd0, 0x01, 0x20, 0x01, 0x47, 0x70, + 0x20, 0x00, 0x47, 0x70, 0x2e, 0x08, 0x94, 0xb4, + 0xff, 0xff, 0xff, 0xff, 0x28, 0x00, 0xdd, 0x01, + 0x28, 0x0b, 0xdb, 0x01, 0x48, 0x03, 0x47, 0x70, + 0x00, 0x83, 0x4a, 0x03, 0x58, 0xd0, 0x50, 0xd1, + 0x47, 0x70, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, + 0x2e, 0x08, 0x94, 0xb4, 0xb5, 0x90, 0x27, 0x01, + 0x4c, 0x05, 0x1c, 0x38, 0x1c, 0x21, 0xf7, 0xff, + 0xff, 0xe9, 0x37, 0x01, 0x2f, 0x0b, 0xdb, 0xf8, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xb5, 0x90, 0x1c, 0x0c, + 0x1c, 0x07, 0x48, 0x12, 0x28, 0x00, 0xd0, 0x09, + 0x48, 0x11, 0x78, 0x00, 0x28, 0x00, 0xd1, 0x05, + 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, 0xfb, 0x44, + 0x28, 0x00, 0xd1, 0x13, 0x08, 0x60, 0xd3, 0x02, + 0x20, 0x0a, 0xf0, 0x00, 0xf8, 0xd3, 0x78, 0x38, + 0x28, 0x00, 0xd0, 0x06, 0x78, 0x38, 0x37, 0x01, + 0xf0, 0x00, 0xf8, 0xcc, 0x78, 0x38, 0x28, 0x00, + 0xd1, 0xf8, 0x08, 0xa0, 0xd3, 0x02, 0x20, 0x0a, + 0xf0, 0x00, 0xf8, 0xc4, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x01, 0xb5, 0xd5, + 0x2e, 0x08, 0x21, 0x9c, 0xb5, 0x80, 0xb0, 0x83, + 0x90, 0x00, 0x91, 0x01, 0xf7, 0xfd, 0xfb, 0x8a, + 0x90, 0x02, 0x46, 0x69, 0x20, 0x01, 0xf0, 0x01, + 0xf8, 0x61, 0x23, 0x01, 0x1c, 0x07, 0x42, 0xd8, + 0xd1, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x01, + 0xf8, 0x59, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, + 0xb0, 0x03, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x20, 0xb8, 0xb5, 0x80, 0xb0, 0x81, + 0x90, 0x00, 0x46, 0x69, 0x20, 0x02, 0xf0, 0x01, + 0xf8, 0x49, 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, + 0x20, 0x13, 0xf0, 0x01, 0xf8, 0x43, 0x49, 0x03, + 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x01, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x20, 0xb8, + 0xb5, 0x80, 0xb0, 0x84, 0x90, 0x00, 0x91, 0x01, + 0x92, 0x02, 0x46, 0x69, 0x20, 0x05, 0xf0, 0x01, + 0xf8, 0x31, 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, + 0x20, 0x13, 0xf0, 0x01, 0xf8, 0x2b, 0x49, 0x03, + 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x04, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x20, 0xb8, + 0xb5, 0x80, 0xb0, 0x84, 0x90, 0x00, 0x91, 0x01, + 0x92, 0x02, 0x93, 0x03, 0x46, 0x69, 0x20, 0x06, + 0xf0, 0x01, 0xf8, 0x18, 0x1c, 0x07, 0xd0, 0x05, + 0x21, 0x00, 0x20, 0x13, 0xf0, 0x01, 0xf8, 0x12, + 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x04, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x20, 0xb8, 0xb5, 0x00, 0xb0, 0x81, + 0x90, 0x00, 0x46, 0x69, 0x20, 0x08, 0xf0, 0x01, + 0xf8, 0x01, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, + 0xb5, 0x00, 0x69, 0x40, 0xb0, 0x81, 0x90, 0x00, + 0x46, 0x69, 0x20, 0x09, 0xf0, 0x00, 0xff, 0xf6, + 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, + 0xb0, 0x82, 0x90, 0x00, 0x91, 0x01, 0x46, 0x69, + 0x20, 0x0a, 0xf0, 0x00, 0xff, 0xeb, 0x1c, 0x07, + 0xd5, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, + 0xff, 0xe5, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, + 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x20, 0xb8, 0xb5, 0x80, 0xb0, 0x81, + 0x90, 0x00, 0x46, 0x69, 0x20, 0x0b, 0xf0, 0x00, + 0xff, 0xd5, 0x1c, 0x07, 0xd5, 0x05, 0x21, 0x00, + 0x20, 0x13, 0xf0, 0x00, 0xff, 0xcf, 0x49, 0x03, + 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x01, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x20, 0xb8, + 0xb5, 0x00, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, + 0x20, 0x0c, 0xf0, 0x00, 0xff, 0xbf, 0xb0, 0x01, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0xb0, 0x83, + 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x46, 0x69, + 0x20, 0x0d, 0xf0, 0x00, 0xff, 0xb3, 0xb0, 0x03, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x01, 0x46, 0x69, + 0x20, 0x03, 0xf0, 0x00, 0xff, 0xab, 0xb0, 0x01, + 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0xb0, 0x82, + 0x90, 0x00, 0xf7, 0xfd, 0xfa, 0xc7, 0x90, 0x01, + 0x46, 0x69, 0x20, 0x12, 0xf0, 0x00, 0xff, 0x9e, + 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, + 0xf0, 0x00, 0xff, 0x98, 0x49, 0x03, 0x60, 0x08, + 0x1c, 0x38, 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x20, 0xb8, + 0xb5, 0x80, 0xb0, 0x82, 0x90, 0x00, 0xf7, 0xfd, + 0xfa, 0xad, 0x90, 0x01, 0x46, 0x69, 0x20, 0x0e, + 0xf0, 0x00, 0xff, 0x84, 0x1c, 0x07, 0xd0, 0x05, + 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, 0xff, 0x7e, + 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x02, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x20, 0xb8, 0xb5, 0x80, 0xb0, 0x84, + 0x90, 0x00, 0x1c, 0x0f, 0xf7, 0xfd, 0xfa, 0x92, + 0x90, 0x01, 0x97, 0x02, 0x1c, 0x38, 0xf7, 0xfd, + 0xfa, 0x8d, 0x90, 0x03, 0x46, 0x69, 0x20, 0x0f, + 0xf0, 0x00, 0xff, 0x64, 0x1c, 0x07, 0xd0, 0x05, + 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, 0xff, 0x5e, + 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x04, + 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x20, 0xb8, 0xb5, 0x80, 0xb0, 0x82, + 0x4f, 0x08, 0x97, 0x00, 0x20, 0xff, 0x30, 0x01, + 0x90, 0x01, 0x46, 0x69, 0x20, 0x15, 0xf0, 0x00, + 0xff, 0x49, 0x28, 0x00, 0xd0, 0x01, 0x20, 0x00, + 0xe0, 0x00, 0x1c, 0x38, 0xb0, 0x02, 0xbc, 0x80, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x94, 0xe4, + 0xb5, 0x00, 0x21, 0x00, 0x20, 0x10, 0xf0, 0x00, + 0xff, 0x39, 0x49, 0x02, 0x68, 0x09, 0x1a, 0x40, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0xac, + 0xb5, 0x00, 0x21, 0x00, 0x20, 0x10, 0xf0, 0x00, + 0xff, 0x2d, 0x49, 0x02, 0x60, 0x08, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0xac, + 0xb5, 0x80, 0x21, 0x00, 0x1c, 0x07, 0x20, 0x11, + 0xf0, 0x00, 0xff, 0x20, 0x2f, 0x00, 0xd0, 0x00, + 0x60, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0x47, 0x70, 0xb4, 0x80, 0x20, 0x03, + 0x43, 0xc0, 0x23, 0x00, 0x49, 0x07, 0x54, 0x0b, + 0x30, 0x01, 0xd4, 0xfc, 0x20, 0x00, 0x4a, 0x06, + 0x5c, 0x17, 0x54, 0x0f, 0x18, 0x0f, 0x37, 0x80, + 0x70, 0x3b, 0x30, 0x01, 0x28, 0x80, 0xd3, 0xf7, + 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x21, 0xb4, + 0x2e, 0x03, 0x33, 0xf8, 0xb5, 0x80, 0x49, 0x07, + 0x68, 0x09, 0xf7, 0xfd, 0xf9, 0x35, 0x1c, 0x07, + 0xd1, 0x03, 0xa1, 0x05, 0xa0, 0x05, 0xf0, 0x00, + 0xfc, 0xe7, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x20, 0xb0, + 0x00, 0x00, 0x00, 0x00, 0x4e, 0x6f, 0x20, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x20, 0x6c, 0x65, 0x66, + 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x2f, + 0x4f, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x6c, 0x69, 0x6b, 0x65, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x80, 0x68, 0xc1, 0x43, 0x19, 0x60, 0xc1, + 0x21, 0x00, 0x60, 0x01, 0x60, 0x81, 0x47, 0x70, + 0xb5, 0xf7, 0x68, 0xd5, 0x69, 0x56, 0x1c, 0x0c, + 0x1c, 0x17, 0x0d, 0x68, 0xd3, 0x05, 0x23, 0x10, + 0x43, 0x1d, 0x1c, 0x30, 0xf7, 0xff, 0xfe, 0xfc, + 0x61, 0xb8, 0x48, 0x12, 0x40, 0x28, 0xd0, 0x08, + 0x69, 0xb9, 0x1c, 0x30, 0xf7, 0xff, 0xfe, 0xc7, + 0x28, 0x00, 0xdb, 0x10, 0x4b, 0x0e, 0x40, 0x1d, + 0x60, 0xfd, 0x99, 0x00, 0x1c, 0x30, 0x1c, 0x22, + 0x1c, 0x2b, 0xf7, 0xff, 0xfe, 0x75, 0x00, 0x41, + 0x08, 0x49, 0x1a, 0x61, 0x69, 0xba, 0x18, 0x51, + 0x61, 0xb9, 0x28, 0x00, 0xd0, 0x08, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0xce, 0x20, 0x00, 0x43, 0xc0, + 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0xe7, 0xf9, 0x00, 0x02, 0x00, 0x10, + 0xff, 0xfd, 0xff, 0xef, 0xb5, 0xb0, 0x48, 0x15, + 0x68, 0xc1, 0x4b, 0x15, 0x40, 0x19, 0x1c, 0x1d, + 0x42, 0x99, 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0xd6, + 0x48, 0x12, 0x68, 0xc1, 0x4b, 0x10, 0x40, 0x19, + 0x42, 0xa9, 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0xce, + 0x48, 0x0f, 0x68, 0xc1, 0x4b, 0x0c, 0x40, 0x19, + 0x42, 0xa9, 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0xc6, + 0x27, 0x00, 0x4c, 0x0c, 0x01, 0xb8, 0x19, 0x00, + 0x68, 0xc1, 0x4b, 0x07, 0x40, 0x19, 0x42, 0xa9, + 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0xbb, 0x37, 0x01, + 0x2f, 0x0d, 0xdb, 0xf3, 0xbc, 0xb0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x95, 0xe4, + 0x00, 0x00, 0x02, 0x02, 0x2e, 0x08, 0x96, 0x24, + 0x2e, 0x08, 0x96, 0x64, 0x2e, 0x08, 0x96, 0xa4, + 0xb5, 0xf0, 0x1c, 0x07, 0x69, 0x04, 0x6a, 0xc0, + 0x68, 0x79, 0x42, 0x88, 0xd9, 0x00, 0x1c, 0x01, + 0x68, 0xf8, 0x4b, 0x13, 0x40, 0x18, 0x07, 0x82, + 0x0f, 0x92, 0x25, 0x00, 0x60, 0xf8, 0x2a, 0x01, + 0xd0, 0x1a, 0x22, 0x82, 0x40, 0x02, 0x15, 0x1e, + 0x2a, 0x02, 0xd1, 0x0a, 0x0c, 0x40, 0xd3, 0x13, + 0x42, 0xa1, 0xd0, 0x0a, 0x1b, 0x09, 0x1c, 0x20, + 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x75, 0x28, 0x00, + 0xd0, 0x03, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x62, 0xfc, 0x60, 0x7c, 0x60, 0xbd, + 0x68, 0xf8, 0x4b, 0x04, 0x40, 0x18, 0x60, 0xf8, + 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, + 0xb5, 0x80, 0x1c, 0x07, 0x68, 0xc0, 0x23, 0x20, + 0x43, 0xdb, 0x40, 0x18, 0x60, 0xf8, 0x69, 0xb8, + 0x6a, 0xb9, 0x42, 0x88, 0xd0, 0x0d, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0xbe, 0x68, 0xf8, 0x4b, 0x08, + 0x40, 0x18, 0x23, 0x10, 0x43, 0x18, 0x60, 0xf8, + 0x6a, 0xb8, 0x61, 0xb8, 0x69, 0x38, 0x62, 0xf8, + 0x60, 0x78, 0x68, 0xf8, 0x4b, 0x03, 0x40, 0x18, + 0x60, 0xf8, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0xff, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xbf, 0xbf, + 0xb5, 0xf0, 0x1c, 0x07, 0x69, 0x40, 0xb0, 0x83, + 0x90, 0x01, 0x69, 0x38, 0x90, 0x00, 0x25, 0x00, + 0x68, 0xfe, 0x07, 0xb0, 0xd1, 0x01, 0x43, 0xc0, + 0xe0, 0x48, 0x09, 0x30, 0xd2, 0x40, 0x24, 0x10, + 0x1c, 0x38, 0xf0, 0x00, 0xfc, 0x3f, 0x1c, 0x05, + 0x0d, 0x70, 0xd3, 0x1b, 0x24, 0x00, 0x49, 0x21, + 0x91, 0x02, 0x01, 0xa0, 0x99, 0x02, 0x18, 0x40, + 0x42, 0xb8, 0xd0, 0x10, 0x68, 0xc1, 0x07, 0x8a, + 0xd0, 0x0d, 0x69, 0x42, 0x9b, 0x01, 0x42, 0x9a, + 0xd1, 0x09, 0x0d, 0x49, 0xd3, 0x07, 0x68, 0xc1, + 0x4b, 0x19, 0x40, 0x19, 0x60, 0xc1, 0x68, 0xf8, + 0x40, 0x18, 0x60, 0xf8, 0xe0, 0x02, 0x34, 0x01, + 0x2c, 0x10, 0xdb, 0xe6, 0x2c, 0x10, 0xd1, 0x06, + 0x98, 0x01, 0xf7, 0xff, 0xfd, 0x83, 0x28, 0x00, + 0xda, 0x01, 0x25, 0x00, 0x43, 0xed, 0x0b, 0x30, + 0xd3, 0x04, 0x98, 0x00, 0x49, 0x0f, 0x68, 0x09, + 0xf7, 0xfd, 0xf8, 0x02, 0x0d, 0xf0, 0x05, 0xc0, + 0x23, 0xa5, 0x05, 0xdb, 0x42, 0xd8, 0xd1, 0x07, + 0x48, 0x0b, 0x28, 0x00, 0xd0, 0x04, 0x1c, 0x38, + 0x1c, 0x29, 0xf7, 0xff, 0xff, 0xfe, 0x1c, 0x05, + 0x22, 0x40, 0x21, 0x00, 0x1c, 0x38, 0xf7, 0xfd, + 0xf8, 0x4b, 0x1c, 0x28, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x95, 0xe4, + 0xff, 0xef, 0xff, 0xff, 0x2e, 0x08, 0x20, 0xb4, + 0x00, 0x00, 0x00, 0x00, 0xb5, 0xf7, 0x1c, 0x10, + 0x1c, 0x0c, 0x1c, 0x17, 0xf7, 0xff, 0xff, 0x98, + 0x78, 0x20, 0x34, 0x01, 0x28, 0x61, 0xd0, 0x09, + 0x28, 0x72, 0xd0, 0x04, 0x28, 0x77, 0xd1, 0x25, + 0x26, 0x02, 0x25, 0x04, 0xe0, 0x04, 0x26, 0x01, + 0x25, 0x00, 0xe0, 0x01, 0x4e, 0x1a, 0x25, 0x08, + 0x78, 0x20, 0x34, 0x01, 0x28, 0x2b, 0xd0, 0x06, + 0x28, 0x62, 0xd1, 0x09, 0x23, 0x04, 0x43, 0x1e, + 0x23, 0x01, 0x43, 0x1d, 0xe7, 0xf4, 0x23, 0x03, + 0x43, 0x1e, 0x23, 0x02, 0x43, 0x1d, 0xe7, 0xef, + 0x1f, 0xe0, 0x38, 0x19, 0x7f, 0xc0, 0x28, 0x74, + 0xd1, 0x01, 0x23, 0x10, 0x43, 0x1d, 0x98, 0x00, + 0x1c, 0x29, 0xf7, 0xff, 0xfd, 0x0b, 0x23, 0x01, + 0x42, 0xd8, 0xd1, 0x04, 0x20, 0x00, 0xb0, 0x03, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x21, 0x00, + 0x60, 0x79, 0x61, 0x39, 0x21, 0x01, 0x03, 0x09, + 0x61, 0x78, 0x61, 0xf9, 0x60, 0xfe, 0x09, 0x28, + 0xd3, 0x04, 0x22, 0x02, 0x21, 0x00, 0x1c, 0x38, + 0xf0, 0x00, 0xfb, 0xc4, 0x1c, 0x38, 0xe7, 0xea, + 0x00, 0x00, 0x80, 0x02, 0xb5, 0x90, 0x23, 0x03, + 0x4f, 0x08, 0x01, 0x9a, 0x19, 0xd2, 0x68, 0xd4, + 0x07, 0xa4, 0xd1, 0x04, 0xf7, 0xff, 0xff, 0xaa, + 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x33, 0x01, + 0x2b, 0x10, 0xdb, 0xf2, 0x20, 0x00, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x95, 0xe4, + 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x4d, 0x10, + 0x68, 0xe8, 0x08, 0x80, 0xd3, 0x18, 0x20, 0x01, + 0x4e, 0x0e, 0x70, 0x30, 0x40, 0x38, 0xd0, 0x03, + 0x20, 0x0a, 0x1c, 0x29, 0xf0, 0x00, 0xfc, 0x1e, + 0x1c, 0x20, 0x1c, 0x29, 0xf0, 0x00, 0xfc, 0x2c, + 0x08, 0xb8, 0xd3, 0x03, 0x20, 0x0a, 0x1c, 0x29, + 0xf0, 0x00, 0xfc, 0x14, 0x20, 0x00, 0x70, 0x30, + 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x96, 0x64, 0x2e, 0x08, 0x21, 0x9c, + 0xb5, 0x80, 0x1c, 0x07, 0xa0, 0x06, 0x21, 0x01, + 0xf7, 0xff, 0xfc, 0x80, 0x21, 0x02, 0x1c, 0x38, + 0xf7, 0xff, 0xfc, 0x7c, 0x20, 0x01, 0xf7, 0xfd, + 0xfc, 0x25, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, + 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x6e, 0x27, 0x74, + 0x20, 0x77, 0x72, 0x69, 0x74, 0x65, 0x20, 0x00, + 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x15, 0x1c, 0x0f, + 0x48, 0x20, 0x22, 0x01, 0x02, 0x92, 0x21, 0x00, + 0x1c, 0x06, 0xf7, 0xfc, 0xff, 0x91, 0x4a, 0x1e, + 0x1c, 0x28, 0xa1, 0x1e, 0xf7, 0xff, 0xff, 0x4e, + 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x28, 0xf7, 0xff, + 0xff, 0xd3, 0x1c, 0x20, 0x1c, 0x32, 0xa1, 0x1a, + 0xf7, 0xff, 0xff, 0x44, 0x28, 0x00, 0xd1, 0x02, + 0x1c, 0x20, 0xf7, 0xff, 0xff, 0xc9, 0x4a, 0x17, + 0x1c, 0x38, 0x1c, 0x15, 0xa1, 0x13, 0xf7, 0xff, + 0xff, 0x39, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, + 0xf7, 0xff, 0xff, 0xbe, 0x1c, 0x30, 0x26, 0x01, + 0x03, 0x36, 0x08, 0xf2, 0x21, 0x00, 0x1c, 0x33, + 0xf0, 0x00, 0xf8, 0x52, 0x28, 0x00, 0xd0, 0x02, + 0x1c, 0x20, 0xf7, 0xff, 0xff, 0xb1, 0x22, 0x01, + 0x02, 0x52, 0x21, 0x00, 0x1c, 0x28, 0x1c, 0x33, + 0xf0, 0x00, 0xf8, 0x46, 0x28, 0x00, 0xd0, 0x02, + 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xa5, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x95, 0xe4, + 0x2e, 0x08, 0x96, 0x64, 0x77, 0x00, 0x00, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x96, 0x24, + 0xb5, 0x90, 0x27, 0x03, 0x4c, 0x09, 0x01, 0xb8, + 0x19, 0x00, 0xf7, 0xff, 0xfe, 0xa5, 0x37, 0x01, + 0x2f, 0x10, 0xdb, 0xf8, 0x27, 0x00, 0x01, 0xb8, + 0x19, 0x00, 0xf7, 0xff, 0xfe, 0x9d, 0x37, 0x01, + 0x2f, 0x03, 0xdb, 0xf8, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x95, 0xe4, + 0xb5, 0xb0, 0x01, 0x80, 0x1c, 0x0f, 0x4c, 0x0a, + 0x19, 0x00, 0x1c, 0x05, 0xf7, 0xff, 0xfe, 0x8c, + 0x01, 0xb8, 0x19, 0x00, 0x23, 0x01, 0x05, 0x1b, + 0x68, 0xc1, 0x43, 0x19, 0x60, 0xc1, 0x4b, 0x05, + 0x40, 0x19, 0x60, 0xe9, 0x69, 0x40, 0x61, 0x68, + 0x1c, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, + 0x2e, 0x08, 0x95, 0xe4, 0x00, 0x10, 0x8f, 0x03, + 0xb4, 0xf0, 0x1c, 0x1f, 0x68, 0xc3, 0x07, 0x9e, + 0x0f, 0xb6, 0x25, 0x01, 0x1c, 0x1c, 0x2e, 0x00, + 0xd0, 0x13, 0x1c, 0x1e, 0x0d, 0xf3, 0xd2, 0x10, + 0x02, 0x2b, 0x42, 0x9a, 0xd0, 0x09, 0x00, 0x5b, + 0x42, 0x9a, 0xd0, 0x06, 0x00, 0x5b, 0x42, 0x9a, + 0xd1, 0x07, 0x27, 0x01, 0x1d, 0xc1, 0x31, 0x1d, + 0xe0, 0x06, 0x1e, 0x7e, 0x4b, 0x08, 0x42, 0x9e, + 0xd3, 0x02, 0x1c, 0x28, 0xbc, 0xf0, 0x47, 0x70, + 0x61, 0x01, 0x23, 0x0f, 0x02, 0x1b, 0x43, 0x9c, + 0x60, 0x41, 0x61, 0xc7, 0x1c, 0x21, 0x43, 0x11, + 0x60, 0xc1, 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, + 0x00, 0xff, 0xff, 0xff, 0xe2, 0x00, 0x01, 0x02, + 0xe3, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x17, + 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xb0, 0x98, 0x21, + 0x01, 0xa0, 0x18, 0x01, 0x02, 0x88, 0x80, 0x10, + 0xe1, 0xb0, 0x9c, 0x21, 0x01, 0xa0, 0x14, 0x01, + 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x21, + 0x01, 0xa0, 0x12, 0x01, 0x02, 0x88, 0x80, 0x04, + 0xe1, 0xb0, 0x9f, 0x21, 0x01, 0xa0, 0x11, 0x01, + 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa1, + 0x01, 0xa0, 0x10, 0x81, 0x02, 0x88, 0x80, 0x01, + 0xe0, 0x58, 0x98, 0xa6, 0x81, 0xa0, 0x19, 0x31, + 0x81, 0xa0, 0x88, 0xa6, 0xe2, 0x68, 0x60, 0x20, + 0xe1, 0x81, 0x16, 0x32, 0xe1, 0xa0, 0x28, 0x12, + 0x30, 0x40, 0x00, 0x09, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe3, 0x56, 0x05, 0x01, 0x3a, 0x00, 0x00, 0x16, + 0xe1, 0xb0, 0x10, 0x02, 0x01, 0xa0, 0xf0, 0x0e, + 0xe3, 0xa0, 0x20, 0x00, 0xe3, 0xa0, 0x80, 0x20, + 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, + 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, + 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, + 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, + 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, + 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, + 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, + 0x02, 0x88, 0x80, 0x01, 0xe0, 0x58, 0x98, 0xa6, + 0x81, 0xa0, 0x19, 0x31, 0x30, 0x40, 0x00, 0x09, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0xa0, 0x88, 0xa6, + 0xe2, 0x68, 0x90, 0x20, 0xe1, 0xa0, 0x18, 0x11, + 0xe1, 0x81, 0x19, 0x32, 0xe1, 0xa0, 0x28, 0x12, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe2, 0x03, 0x31, 0x02, + 0xe3, 0x34, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x17, + 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xb0, 0x98, 0x24, + 0x01, 0xa0, 0x48, 0x04, 0x02, 0x88, 0x80, 0x10, + 0xe1, 0xb0, 0x9c, 0x24, 0x01, 0xa0, 0x44, 0x04, + 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x24, + 0x01, 0xa0, 0x42, 0x04, 0x02, 0x88, 0x80, 0x04, + 0xe1, 0xb0, 0x9f, 0x24, 0x01, 0xa0, 0x41, 0x04, + 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa4, + 0x01, 0xa0, 0x40, 0x84, 0x02, 0x88, 0x80, 0x01, + 0xe0, 0x58, 0x98, 0xa6, 0x81, 0xa0, 0x49, 0x34, + 0x81, 0xa0, 0x88, 0xa6, 0xe2, 0x68, 0x60, 0x20, + 0xe1, 0x84, 0x46, 0x35, 0xe1, 0xa0, 0x58, 0x15, + 0x30, 0x43, 0x30, 0x09, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe3, 0x56, 0x05, 0x01, 0x3a, 0x00, 0x00, 0x16, + 0xe1, 0xb0, 0x40, 0x05, 0x01, 0xa0, 0xf0, 0x0e, + 0xe3, 0xa0, 0x50, 0x00, 0xe3, 0xa0, 0x80, 0x20, + 0xe1, 0xb0, 0x98, 0x24, 0x01, 0xa0, 0x48, 0x04, + 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x24, + 0x01, 0xa0, 0x44, 0x04, 0x02, 0x88, 0x80, 0x08, + 0xe1, 0xb0, 0x9e, 0x24, 0x01, 0xa0, 0x42, 0x04, + 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x24, + 0x01, 0xa0, 0x41, 0x04, 0x02, 0x88, 0x80, 0x02, + 0xe1, 0xb0, 0x9f, 0xa4, 0x01, 0xa0, 0x40, 0x84, + 0x02, 0x88, 0x80, 0x01, 0xe0, 0x58, 0x98, 0xa6, + 0x81, 0xa0, 0x49, 0x34, 0x30, 0x43, 0x30, 0x09, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0xa0, 0x88, 0xa6, + 0xe2, 0x68, 0x90, 0x20, 0xe1, 0xa0, 0x48, 0x14, + 0xe1, 0x84, 0x49, 0x35, 0xe1, 0xa0, 0x58, 0x15, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0xa0, 0x20, 0x00, + 0xe2, 0x16, 0x01, 0x02, 0x12, 0x66, 0x10, 0x00, + 0x01, 0xb0, 0x10, 0x06, 0x03, 0xa0, 0x30, 0x00, + 0x01, 0xa0, 0xf0, 0x0e, 0xe3, 0xa0, 0x39, 0x01, + 0xe3, 0x83, 0x30, 0x1e, 0xe3, 0xa0, 0x60, 0x00, + 0xe3, 0x31, 0x00, 0x00, 0x01, 0xa0, 0x10, 0x02, + 0x03, 0xa0, 0x20, 0x00, 0x02, 0x43, 0x30, 0x20, + 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xb0, 0x98, 0x21, + 0x01, 0xa0, 0x18, 0x01, 0x02, 0x88, 0x80, 0x10, + 0xe1, 0xb0, 0x9c, 0x21, 0x01, 0xa0, 0x14, 0x01, + 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x21, + 0x01, 0xa0, 0x12, 0x01, 0x02, 0x88, 0x80, 0x04, + 0xe1, 0xb0, 0x9f, 0x21, 0x01, 0xa0, 0x11, 0x01, + 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa1, + 0x01, 0xa0, 0x10, 0x81, 0x02, 0x88, 0x80, 0x01, + 0xe2, 0x78, 0x90, 0x20, 0xe1, 0x81, 0x19, 0x32, + 0xe1, 0xa0, 0x28, 0x12, 0xe0, 0x43, 0x30, 0x08, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x34, 0x00, 0x00, + 0x01, 0xa0, 0x40, 0x05, 0x03, 0xa0, 0x50, 0x00, + 0x02, 0x43, 0x30, 0x20, 0xe3, 0xa0, 0x80, 0x00, + 0xe1, 0xb0, 0x98, 0x24, 0x01, 0xa0, 0x48, 0x04, + 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x24, + 0x01, 0xa0, 0x44, 0x04, 0x02, 0x88, 0x80, 0x08, + 0xe1, 0xb0, 0x9e, 0x24, 0x01, 0xa0, 0x42, 0x04, + 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x24, + 0x01, 0xa0, 0x41, 0x04, 0x02, 0x88, 0x80, 0x02, + 0xe1, 0xb0, 0x9f, 0xa4, 0x01, 0xa0, 0x40, 0x84, + 0x02, 0x88, 0x80, 0x01, 0xe2, 0x78, 0x90, 0x20, + 0xe1, 0x84, 0x49, 0x35, 0xe1, 0xa0, 0x58, 0x15, + 0xe0, 0x43, 0x30, 0x08, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe3, 0x31, 0x00, 0x00, 0x01, 0xa0, 0x10, 0x02, + 0x03, 0xa0, 0x20, 0x00, 0x02, 0x83, 0x30, 0x20, + 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xb0, 0x98, 0x21, + 0x01, 0xa0, 0x18, 0x01, 0x02, 0x88, 0x80, 0x10, + 0xe1, 0xb0, 0x9c, 0x21, 0x01, 0xa0, 0x14, 0x01, + 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x21, + 0x01, 0xa0, 0x12, 0x01, 0x02, 0x88, 0x80, 0x04, + 0xe1, 0xb0, 0x9f, 0x21, 0x01, 0xa0, 0x11, 0x01, + 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa1, + 0x01, 0xa0, 0x10, 0x81, 0x02, 0x88, 0x80, 0x01, + 0xe2, 0x78, 0x90, 0x20, 0xe1, 0x81, 0x19, 0x32, + 0xe1, 0xa0, 0x28, 0x12, 0xe0, 0x83, 0x30, 0x08, + 0xe1, 0xa0, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe1, 0x92, 0x80, 0x81, + 0x0a, 0x00, 0x00, 0x05, 0xe3, 0x11, 0x01, 0x01, + 0x0a, 0x00, 0x00, 0x0c, 0xe1, 0x95, 0x80, 0x84, + 0x0a, 0x00, 0x00, 0x0a, 0xe3, 0x14, 0x01, 0x01, + 0x1a, 0x00, 0x00, 0x08, 0xe3, 0x14, 0x01, 0x01, + 0x0a, 0x00, 0x00, 0x28, 0xe1, 0xa0, 0x00, 0x03, + 0xe1, 0xa0, 0x10, 0x04, 0xe1, 0xa0, 0x20, 0x05, + 0xea, 0x00, 0x00, 0x04, 0xe3, 0x11, 0x01, 0x01, + 0x0a, 0x00, 0x00, 0x22, 0xea, 0x00, 0x00, 0x01, + 0xe3, 0x11, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x1f, + 0xe3, 0x1b, 0x00, 0x01, 0x1a, 0x00, 0x00, 0x16, + 0xe3, 0x1b, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x0c, + 0xe3, 0x1b, 0x0c, 0x02, 0x1a, 0x00, 0x00, 0x05, + 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xa0, 0x90, 0xff, + 0xe3, 0x89, 0x9c, 0x43, 0xe1, 0x58, 0x00, 0x09, + 0x33, 0xc2, 0x20, 0x01, 0x03, 0x82, 0x20, 0x01, + 0xe2, 0x00, 0x01, 0x03, 0xe3, 0x80, 0x00, 0xff, + 0xe3, 0x80, 0x0c, 0x7f, 0xe1, 0x30, 0x00, 0x00, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe2, 0x00, 0x01, 0x03, + 0xe3, 0x80, 0x00, 0xff, 0xe3, 0x80, 0x0c, 0x43, + 0xe1, 0xa0, 0x25, 0xa2, 0xe1, 0xa0, 0x25, 0x82, + 0xe3, 0x81, 0x11, 0x02, 0xe1, 0x30, 0x00, 0x00, + 0xe1, 0xa0, 0xf0, 0x0e, 0xe2, 0x00, 0x01, 0x03, + 0xe3, 0x80, 0x00, 0x7f, 0xe3, 0x80, 0x09, 0x01, + 0xe3, 0xa0, 0x20, 0x00, 0xe3, 0xc1, 0x10, 0xff, + 0xe3, 0x81, 0x11, 0x02, 0xe1, 0xa0, 0xf0, 0x0e, + 0xe3, 0x80, 0x04, 0x61, 0xe1, 0xa0, 0xf0, 0x0e, + 0xb5, 0x80, 0x1c, 0x0f, 0x29, 0x0f, 0xdd, 0x04, + 0x11, 0x39, 0xf7, 0xff, 0xff, 0xf9, 0x07, 0x3f, + 0x0f, 0x3f, 0x2f, 0x09, 0xdd, 0x02, 0x1d, 0xf9, + 0x31, 0x29, 0xe0, 0x01, 0x1d, 0xf9, 0x31, 0x50, + 0x70, 0x01, 0x30, 0x01, 0xbc, 0x80, 0xbc, 0x08, + 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0x48, 0x0d, + 0x68, 0x01, 0x29, 0x00, 0xd1, 0x12, 0x4c, 0x0c, + 0x1c, 0x20, 0xa1, 0x0c, 0x22, 0x14, 0xf7, 0xfc, + 0xfd, 0x0d, 0x1d, 0xe0, 0x30, 0x0b, 0x1c, 0x39, + 0xf7, 0xff, 0xff, 0xda, 0x21, 0x29, 0x70, 0x01, + 0x21, 0x00, 0x70, 0x41, 0x1c, 0x20, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x30, 0x08, 0xbc, 0x90, + 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x20, 0xd4, + 0x2e, 0x08, 0x99, 0xe4, 0x55, 0x6e, 0x6b, 0x6e, + 0x6f, 0x77, 0x6e, 0x20, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x20, 0x28, 0x30, 0x78, 0x00, 0x00, + 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0xa0, 0x09, + 0x21, 0x01, 0xf7, 0xff, 0xf9, 0x6f, 0x21, 0x00, + 0x1c, 0x20, 0xf7, 0xff, 0xf9, 0x6b, 0x21, 0x02, + 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0x67, 0x20, 0x01, + 0xf7, 0xfd, 0xf9, 0x10, 0xbc, 0x90, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x2a, 0x2a, 0x2a, 0x20, + 0x66, 0x61, 0x74, 0x61, 0x6c, 0x20, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x72, + 0x75, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x3a, 0x20, + 0x00, 0x00, 0x00, 0x00, 0xb5, 0xb0, 0x1c, 0x07, + 0x68, 0xc0, 0x07, 0x81, 0xd0, 0x1f, 0x23, 0x20, + 0x40, 0x18, 0xd0, 0x01, 0x6a, 0xbd, 0xe0, 0x04, + 0x68, 0x79, 0x69, 0xba, 0x18, 0x89, 0x69, 0x3a, + 0x1a, 0x8d, 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, + 0xf7, 0xff, 0xfb, 0xa2, 0x68, 0xf8, 0x4b, 0x0a, + 0x40, 0x18, 0x60, 0xf8, 0x1c, 0x38, 0xf7, 0xff, + 0xfb, 0x67, 0x1c, 0x04, 0x22, 0x00, 0x1c, 0x38, + 0x1c, 0x29, 0xf0, 0x00, 0xf8, 0x27, 0x1c, 0x20, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0xff, 0xff, 0xcf, 0xff, 0xb5, 0xb0, 0x24, 0x00, + 0x28, 0x00, 0xd0, 0x03, 0xf7, 0xff, 0xff, 0xce, + 0x1c, 0x04, 0xe0, 0x0c, 0x27, 0x00, 0x4d, 0x08, + 0x01, 0xb8, 0x19, 0x40, 0xf7, 0xff, 0xff, 0xc6, + 0x28, 0x00, 0xd0, 0x01, 0x24, 0x00, 0x43, 0xe4, + 0x37, 0x01, 0x2f, 0x10, 0xdb, 0xf4, 0x1c, 0x20, + 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0x2e, 0x08, 0x95, 0xe4, 0xb5, 0xf7, 0x68, 0xc5, + 0x69, 0x46, 0x1c, 0x0c, 0x1c, 0x07, 0xb0, 0x81, + 0x48, 0x3c, 0x40, 0x28, 0xd0, 0x04, 0x1c, 0x38, + 0xf7, 0xff, 0xf9, 0x92, 0x28, 0x00, 0xd0, 0x01, + 0x20, 0x02, 0xe0, 0x6a, 0x9a, 0x03, 0x2a, 0x00, + 0xd0, 0x26, 0x2a, 0x01, 0xd0, 0x0b, 0x2a, 0x02, + 0xd1, 0x24, 0x1c, 0x30, 0xf7, 0xff, 0xf9, 0xbc, + 0x28, 0x00, 0xda, 0x09, 0x1c, 0x38, 0xf7, 0xff, + 0xfa, 0xa7, 0x20, 0x01, 0xe0, 0x59, 0x1c, 0x38, + 0xf0, 0x00, 0xf8, 0x8c, 0x19, 0x04, 0xe0, 0x13, + 0x68, 0x79, 0x6a, 0xfa, 0x42, 0x8a, 0xd9, 0x00, + 0x1c, 0x11, 0x69, 0xba, 0x18, 0x89, 0x69, 0x3a, + 0x1a, 0x89, 0x68, 0xfa, 0x09, 0x92, 0xd3, 0x03, + 0x6a, 0xba, 0x42, 0x8a, 0xdd, 0x00, 0x1c, 0x11, + 0x42, 0x81, 0xdd, 0x00, 0x1c, 0x08, 0x18, 0x24, + 0x2c, 0x00, 0xda, 0x03, 0x1c, 0x38, 0xf7, 0xff, + 0xfa, 0x87, 0xe7, 0xcd, 0x0b, 0xa8, 0xd3, 0x04, + 0x68, 0x78, 0x6a, 0xf9, 0x42, 0x81, 0xd2, 0x00, + 0x62, 0xf8, 0x69, 0xb8, 0x42, 0xa0, 0xdc, 0x10, + 0x68, 0x79, 0x6a, 0xfa, 0x42, 0x8a, 0xd9, 0x01, + 0x1c, 0x13, 0xe0, 0x00, 0x1c, 0x0b, 0x18, 0x1b, + 0x69, 0x3e, 0x1b, 0x9b, 0x42, 0xa3, 0xdb, 0x04, + 0x6b, 0x3b, 0x93, 0x00, 0x18, 0xc3, 0x42, 0xa3, + 0xdc, 0x06, 0x20, 0x20, 0x43, 0x28, 0x21, 0x00, + 0x60, 0x39, 0x60, 0xb9, 0x62, 0xbc, 0xe0, 0x14, + 0x1a, 0x24, 0x08, 0xa8, 0xd3, 0x03, 0x9b, 0x00, + 0x1b, 0x18, 0x42, 0x40, 0x60, 0xb8, 0x08, 0x68, + 0xd3, 0x06, 0x42, 0x8a, 0xd9, 0x00, 0x1c, 0x11, + 0x1b, 0x88, 0x1b, 0x00, 0x42, 0x40, 0x60, 0x38, + 0x19, 0x30, 0x23, 0x20, 0x43, 0x9d, 0x60, 0x78, + 0x1c, 0x28, 0x4b, 0x05, 0x40, 0x18, 0x60, 0xf8, + 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x03, 0xbc, 0xf0, + 0xbc, 0x08, 0x47, 0x18, 0x00, 0x10, 0x00, 0x03, + 0xff, 0xf7, 0xcf, 0xbf, 0xb5, 0x00, 0x68, 0x8a, + 0x68, 0x4b, 0x3a, 0x01, 0xd5, 0x03, 0xf0, 0x00, + 0xf8, 0x3f, 0xbc, 0x08, 0x47, 0x18, 0x06, 0x00, + 0x0e, 0x00, 0x70, 0x18, 0x33, 0x01, 0x60, 0x8a, + 0x60, 0x4b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, + 0xb5, 0xb0, 0x1c, 0x07, 0x78, 0x00, 0x1c, 0x0c, + 0x37, 0x01, 0x28, 0x00, 0xd0, 0x0e, 0x25, 0x00, + 0x43, 0xed, 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0xe8, + 0x42, 0xa8, 0xd1, 0x03, 0x1c, 0x28, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x78, 0x38, 0x37, 0x01, + 0x28, 0x00, 0xd1, 0xf2, 0x20, 0x00, 0xbc, 0xb0, + 0xbc, 0x08, 0x47, 0x18, 0x68, 0xc1, 0x07, 0x8a, + 0xd1, 0x04, 0x20, 0x01, 0x49, 0x09, 0x60, 0x08, + 0x42, 0x40, 0x47, 0x70, 0x09, 0x8a, 0xd3, 0x01, + 0x6a, 0x80, 0xe0, 0x04, 0x68, 0x42, 0x69, 0x83, + 0x18, 0xd2, 0x69, 0x00, 0x1a, 0x10, 0x0d, 0x09, + 0xd3, 0xf3, 0x28, 0x00, 0xdd, 0xf1, 0x38, 0x01, + 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x20, 0xb8, + 0xb5, 0xf0, 0x1c, 0x04, 0x68, 0xc8, 0x1c, 0x0f, + 0x4b, 0x5a, 0x40, 0x18, 0x23, 0x01, 0x05, 0x9b, + 0x43, 0x18, 0x60, 0xc8, 0x09, 0x80, 0xd3, 0x02, + 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x95, 0x06, 0x26, + 0x0e, 0x36, 0x68, 0xb9, 0x29, 0x00, 0xda, 0x12, + 0x68, 0xf8, 0x0a, 0x82, 0xd2, 0x0f, 0x22, 0x00, + 0x43, 0xd2, 0x1a, 0x51, 0x23, 0x09, 0x03, 0x5b, + 0x43, 0x18, 0x60, 0xf8, 0x60, 0xb9, 0x68, 0x79, + 0x70, 0x0e, 0x31, 0x01, 0x60, 0x79, 0x1c, 0x30, + 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xf8, + 0x49, 0x49, 0x40, 0x01, 0x29, 0x02, 0xd0, 0x03, + 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0xcd, 0xe0, 0x7f, + 0x49, 0x46, 0x40, 0x01, 0x23, 0x01, 0x03, 0xdb, + 0x42, 0x99, 0xd1, 0x0b, 0x22, 0x02, 0x21, 0x00, + 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0xfb, 0x68, 0xf8, + 0x09, 0x80, 0xd3, 0x02, 0x1c, 0x38, 0xf7, 0xff, + 0xfa, 0x63, 0x68, 0xf8, 0x25, 0x09, 0x03, 0x6d, + 0x43, 0x05, 0x60, 0xfd, 0x69, 0x38, 0x28, 0x00, + 0xd1, 0x2f, 0x1c, 0x38, 0xf7, 0xff, 0xf8, 0x88, + 0x28, 0x00, 0xd0, 0x18, 0x68, 0xf8, 0x0a, 0x00, + 0x07, 0x80, 0xd0, 0x09, 0x69, 0xf8, 0xf7, 0xff, + 0xf9, 0x7d, 0x61, 0x38, 0x60, 0x78, 0x23, 0x01, + 0x02, 0xdb, 0x43, 0x1d, 0x68, 0xf8, 0xe0, 0x1a, + 0x1d, 0xf8, 0x30, 0x1d, 0x61, 0x38, 0x60, 0x78, + 0x20, 0x01, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x1d, + 0x61, 0xf8, 0x60, 0xfd, 0xe0, 0x11, 0x69, 0xf8, + 0xf7, 0xff, 0xf9, 0x68, 0x61, 0x38, 0x60, 0x78, + 0x23, 0x01, 0x02, 0xdb, 0x43, 0x1d, 0x68, 0xf8, + 0x43, 0x28, 0x60, 0xf8, 0x0a, 0x29, 0x07, 0x89, + 0xd1, 0x03, 0x08, 0xdb, 0x43, 0x1d, 0x43, 0x28, + 0x60, 0xf8, 0x0a, 0x68, 0xd3, 0x19, 0x68, 0x78, + 0x6a, 0xf9, 0x69, 0x3c, 0x42, 0x81, 0xd9, 0x00, + 0x1c, 0x08, 0x1b, 0x01, 0xd0, 0x05, 0x1c, 0x20, + 0x1c, 0x3a, 0xf7, 0xff, 0xf9, 0x7d, 0x28, 0x00, + 0xd1, 0x26, 0x1c, 0x60, 0x62, 0xf8, 0x60, 0x78, + 0x69, 0xf8, 0x1e, 0x41, 0x63, 0x38, 0x60, 0xb9, + 0x70, 0x26, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x69, 0x38, 0x68, 0x7a, 0x70, 0x14, + 0x32, 0x01, 0x60, 0x7a, 0x6a, 0xf9, 0x42, 0x91, + 0xd8, 0x00, 0x1c, 0x11, 0x1a, 0x09, 0x69, 0xfa, + 0x63, 0x3a, 0x0a, 0xeb, 0xd2, 0x03, 0x2e, 0x0a, + 0xd0, 0x01, 0x42, 0x8a, 0xdc, 0x0d, 0x62, 0xf8, + 0x22, 0x00, 0x60, 0x78, 0x60, 0xba, 0x1c, 0x3a, + 0xf7, 0xff, 0xf9, 0x56, 0x28, 0x00, 0xd0, 0x04, + 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0xff, 0xf7, 0xff, 0xff, + 0x00, 0x00, 0x10, 0x8a, 0x00, 0x00, 0xa0, 0x10, + 0xb5, 0x00, 0x68, 0x8a, 0x68, 0x4b, 0x3a, 0x01, + 0xd5, 0x03, 0xf7, 0xff, 0xff, 0x39, 0xbc, 0x08, + 0x47, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x70, 0x18, + 0x33, 0x01, 0x60, 0x8a, 0x60, 0x4b, 0xbc, 0x08, + 0x47, 0x18, 0x00, 0x00, 0x47, 0x78, 0x46, 0xc0, + 0xe9, 0x2d, 0x40, 0x00, 0xe2, 0x8f, 0xe0, 0x00, + 0xef, 0x12, 0x34, 0x56, 0xe8, 0xbd, 0x40, 0x00, + 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xa0, 0x10, 0x00, + 0xe3, 0xa0, 0x00, 0x18, 0xe5, 0x9f, 0x10, 0x18, + 0xef, 0x12, 0x34, 0x56, 0xea, 0xff, 0xff, 0xfe, + 0xe1, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x00, 0x18, + 0xe5, 0x9f, 0x10, 0x08, 0xef, 0x12, 0x34, 0x56, + 0xea, 0xff, 0xff, 0xfe, 0x00, 0x02, 0x00, 0x26, + 0x00, 0x02, 0x00, 0x23, 0xe8, 0xb0, 0x01, 0xf0, + 0xe8, 0xa1, 0x01, 0xf0, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe8, 0xb0, 0x01, 0xf8, + 0xe8, 0xa1, 0x01, 0xf8, 0xe2, 0x52, 0x20, 0xbc, + 0x1a, 0xff, 0xff, 0xed, 0xe8, 0xbd, 0x01, 0xf8, + 0xe1, 0x2f, 0xff, 0x1e, 0xe4, 0x90, 0x40, 0x04, + 0xe1, 0x85, 0x54, 0x24, 0xe4, 0x81, 0x50, 0x04, + 0xe1, 0xa0, 0x5c, 0x04, 0xe2, 0x53, 0x30, 0x04, + 0x1a, 0xff, 0xff, 0xf9, 0xe5, 0x9f, 0xf0, 0x88, + 0xe4, 0x90, 0x40, 0x04, 0xe1, 0x85, 0x5c, 0x24, + 0xe4, 0x81, 0x50, 0x04, 0xe1, 0xa0, 0x54, 0x04, + 0xe2, 0x53, 0x30, 0x04, 0x1a, 0xff, 0xff, 0xf9, + 0xe5, 0x9f, 0xf0, 0x70, 0xe4, 0x90, 0x40, 0x04, + 0xe1, 0xa0, 0x58, 0x24, 0xe0, 0xc1, 0x50, 0xb2, + 0xe0, 0xc1, 0x40, 0xb2, 0xe2, 0x53, 0x30, 0x04, + 0x1a, 0xff, 0xff, 0xf9, 0xe5, 0x9f, 0xf0, 0x4c, + 0xe2, 0x03, 0x40, 0x0f, 0xe0, 0x53, 0x40, 0x04, + 0x0a, 0x00, 0x00, 0x0a, 0xe9, 0x2d, 0x00, 0xc4, + 0xe1, 0xa0, 0x20, 0x03, 0xe1, 0xa0, 0x30, 0x04, + 0xe8, 0xb0, 0x00, 0xf0, 0xe8, 0xa1, 0x00, 0xf0, + 0xe2, 0x53, 0x30, 0x10, 0x1a, 0xff, 0xff, 0xfb, + 0xe1, 0xa0, 0x30, 0x02, 0xe8, 0xbd, 0x00, 0xc4, + 0xe2, 0x13, 0x30, 0x0f, 0x0a, 0x00, 0x00, 0x03, + 0xe4, 0x90, 0x40, 0x04, 0xe4, 0x81, 0x40, 0x04, + 0xe2, 0x53, 0x30, 0x04, 0x1a, 0xff, 0xff, 0xfb, + 0xe5, 0x9f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x01, 0xc2, 0x84, 0x2e, 0x01, 0xc2, 0x28, + 0x2e, 0x01, 0xc2, 0x58, 0xe9, 0x2d, 0x00, 0x38, + 0xe3, 0x52, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x3f, + 0xe3, 0xe0, 0x30, 0x03, 0xe0, 0x12, 0x30, 0x03, + 0x0a, 0x00, 0x00, 0x30, 0xe2, 0x10, 0x30, 0x01, + 0x0a, 0x00, 0x00, 0x03, 0xe4, 0xd0, 0x30, 0x01, + 0xe4, 0xc1, 0x30, 0x01, 0xe2, 0x52, 0x20, 0x01, + 0x0a, 0x00, 0x00, 0x36, 0xe2, 0x10, 0x30, 0x02, + 0x0a, 0x00, 0x00, 0x05, 0xe0, 0xd0, 0x30, 0xb2, + 0xe1, 0xa0, 0x44, 0x23, 0xe4, 0xc1, 0x40, 0x01, + 0xe4, 0xc1, 0x30, 0x01, 0xe2, 0x52, 0x20, 0x02, + 0x0a, 0x00, 0x00, 0x2e, 0xe3, 0xe0, 0x30, 0x03, + 0xe0, 0x12, 0x30, 0x03, 0x0a, 0x00, 0x00, 0x1f, + 0xe2, 0x11, 0x40, 0x01, 0x0a, 0x00, 0x00, 0x19, + 0xe2, 0x11, 0x40, 0x02, 0x1a, 0x00, 0x00, 0x0b, + 0xe2, 0x41, 0x10, 0x01, 0xe5, 0x91, 0x50, 0x00, + 0xe1, 0xa0, 0x5c, 0x25, 0xe1, 0xa0, 0x5c, 0x05, + 0xe5, 0x9f, 0xf0, 0xa8, 0xe5, 0x91, 0x40, 0x00, + 0xe1, 0xa0, 0x44, 0x04, 0xe1, 0xa0, 0x44, 0x24, + 0xe1, 0x85, 0x50, 0x04, 0xe5, 0x81, 0x50, 0x00, + 0xe2, 0x81, 0x10, 0x01, 0xea, 0x00, 0x00, 0x0f, + 0xe2, 0x41, 0x10, 0x03, 0xe5, 0x91, 0x50, 0x00, + 0xe1, 0xa0, 0x54, 0x25, 0xe1, 0xa0, 0x54, 0x05, + 0xe5, 0x9f, 0xf0, 0x7c, 0xe5, 0x91, 0x40, 0x00, + 0xe1, 0xa0, 0x4c, 0x04, 0xe1, 0xa0, 0x4c, 0x24, + 0xe1, 0x85, 0x50, 0x04, 0xe5, 0x81, 0x50, 0x00, + 0xe2, 0x81, 0x10, 0x03, 0xea, 0x00, 0x00, 0x03, + 0xe2, 0x11, 0x40, 0x02, 0x0a, 0x00, 0x00, 0x00, + 0xe5, 0x9f, 0xf0, 0x5c, 0xe5, 0x9f, 0xf0, 0x48, + 0xe2, 0x12, 0x20, 0x03, 0x0a, 0x00, 0x00, 0x09, + 0xe4, 0xd0, 0x40, 0x01, 0xe4, 0xc1, 0x40, 0x01, + 0xe2, 0x52, 0x20, 0x01, 0x0a, 0x00, 0x00, 0x05, + 0xe4, 0xd0, 0x40, 0x01, 0xe4, 0xc1, 0x40, 0x01, + 0xe2, 0x52, 0x20, 0x01, 0x0a, 0x00, 0x00, 0x01, + 0xe4, 0xd0, 0x40, 0x01, 0xe4, 0xc1, 0x40, 0x01, + 0xe8, 0xbd, 0x00, 0x38, 0xe3, 0x8e, 0xe0, 0x01, + 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x01, 0xf8, + 0xe5, 0x9f, 0xf0, 0x18, 0x2e, 0x01, 0xc0, 0xf8, + 0x2e, 0x01, 0xc1, 0x30, 0x2e, 0x01, 0xc1, 0x4c, + 0x2e, 0x01, 0xc0, 0xf8, 0x2e, 0x01, 0xc1, 0x14, + 0x2e, 0x01, 0xc1, 0x4c, 0x2e, 0x01, 0xc1, 0x30, + 0x2e, 0x01, 0xc0, 0xa8, 0xe9, 0x2d, 0x5f, 0xff, + 0xe1, 0x4f, 0x00, 0x00, 0xe9, 0x2d, 0x00, 0x01, + 0xe2, 0x8f, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x10, + 0x21, 0xff, 0x48, 0x37, 0x68, 0x00, 0x40, 0x52, + 0x42, 0x08, 0xd1, 0x0b, 0x32, 0x20, 0x0a, 0x00, + 0x42, 0x08, 0xd1, 0x07, 0x32, 0x20, 0x0a, 0x00, + 0x42, 0x08, 0xd1, 0x03, 0x0a, 0x00, 0x42, 0x08, + 0xd0, 0x23, 0x32, 0x20, 0x21, 0x0f, 0x42, 0x08, + 0xd1, 0x01, 0x32, 0x10, 0x09, 0x00, 0x21, 0x01, + 0x42, 0x08, 0xd1, 0x08, 0x1d, 0x12, 0x21, 0x02, + 0x42, 0x08, 0xd1, 0x04, 0x1d, 0x12, 0x21, 0x04, + 0x42, 0x08, 0xd1, 0x00, 0x1d, 0x12, 0x48, 0x25, + 0x68, 0x00, 0xb4, 0x01, 0x08, 0x90, 0x21, 0x01, + 0x40, 0x81, 0x48, 0x21, 0x60, 0x01, 0x48, 0x1d, + 0x58, 0x82, 0x48, 0x01, 0x46, 0x86, 0x47, 0x10, + 0x2e, 0x01, 0xc3, 0x61, 0xbc, 0x02, 0x48, 0x1d, + 0x60, 0x01, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, + 0xe8, 0xbd, 0x00, 0x01, 0xe1, 0x69, 0xf0, 0x00, + 0xe8, 0xbd, 0x5f, 0xff, 0xe2, 0x5e, 0xf0, 0x04, + 0x48, 0x12, 0x21, 0x20, 0x4a, 0x12, 0x60, 0x02, + 0x1d, 0x00, 0x1e, 0x49, 0xd1, 0xfb, 0x20, 0x00, + 0x47, 0x70, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0x46, 0x73, 0x49, 0x0e, 0x60, 0x08, 0x20, 0x00, + 0x47, 0x18, 0x46, 0x73, 0x49, 0x0c, 0x60, 0x08, + 0x20, 0x00, 0x47, 0x18, 0x46, 0x73, 0x48, 0x0b, + 0x68, 0x00, 0x47, 0x18, 0x46, 0x73, 0x49, 0x09, + 0x60, 0x08, 0x47, 0x18, 0x46, 0x73, 0x4a, 0x03, + 0x00, 0x80, 0x18, 0x12, 0x68, 0x10, 0x60, 0x11, + 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x3a, 0xfc, + 0x2e, 0x01, 0xc3, 0x90, 0x66, 0x00, 0x00, 0x10, + 0x66, 0x00, 0x00, 0x14, 0x66, 0x00, 0x00, 0x18, + 0x66, 0x00, 0x00, 0x1c, 0xe9, 0x2d, 0x5f, 0xf0, + 0xe1, 0x4f, 0x40, 0x00, 0xe3, 0x14, 0x00, 0x20, + 0x11, 0x5e, 0x40, 0xb2, 0x13, 0xc4, 0x4c, 0xff, + 0x05, 0x1e, 0x40, 0x04, 0x03, 0xc4, 0x44, 0xff, + 0xe5, 0x9f, 0x50, 0x14, 0xe7, 0x95, 0x51, 0x04, + 0xe5, 0x9f, 0xe0, 0x00, 0xe1, 0x2f, 0xff, 0x15, + 0x2e, 0x01, 0xc4, 0x10, 0xe8, 0xbd, 0x5f, 0xf0, + 0xe1, 0xb0, 0xf0, 0x0e, 0x2e, 0x08, 0x1f, 0xf0, + 0x00, 0x00, 0x00, 0xc0, 0x46, 0x73, 0x47, 0x78, + 0xe1, 0x0f, 0x10, 0x00, 0xe3, 0x81, 0x00, 0x80, + 0xe1, 0x29, 0xf0, 0x00, 0xe2, 0x01, 0x00, 0x80, + 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x4f, 0x10, 0x00, + 0xe3, 0x81, 0x00, 0x80, 0xe1, 0x69, 0xf0, 0x00, + 0xe2, 0x01, 0x00, 0x80, 0xe1, 0x2f, 0xff, 0x13, + 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, + 0xe1, 0x0f, 0x10, 0x00, 0xe3, 0x81, 0x00, 0x40, + 0xe1, 0x29, 0xf0, 0x00, 0xe2, 0x01, 0x00, 0x40, + 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x4f, 0x10, 0x00, + 0xe3, 0x81, 0x00, 0x40, 0xe1, 0x69, 0xf0, 0x00, + 0xe2, 0x01, 0x00, 0x40, 0xe1, 0x2f, 0xff, 0x13, + 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, + 0xe1, 0x0f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x80, + 0xe1, 0x29, 0xf0, 0x00, 0xe3, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x4f, 0x00, 0x00, + 0xe3, 0xc0, 0x00, 0x80, 0xe1, 0x69, 0xf0, 0x00, + 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x13, + 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, + 0xe1, 0x0f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x40, + 0xe1, 0x29, 0xf0, 0x00, 0xe3, 0xa0, 0x00, 0x00, + 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, + 0x47, 0x78, 0x00, 0x00, 0xe1, 0x4f, 0x00, 0x00, + 0xe3, 0xc0, 0x00, 0x40, 0xe1, 0x69, 0xf0, 0x00, + 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x13, + 0x46, 0x73, 0x49, 0x02, 0x60, 0x08, 0x20, 0x00, + 0x46, 0x9f, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x46, 0x73, 0x49, 0x02, 0x60, 0x08, 0x20, 0x00, + 0x46, 0x9f, 0x00, 0x00, 0x66, 0x00, 0x00, 0x04, + 0x46, 0x73, 0x48, 0x03, 0x68, 0x00, 0x47, 0x18, + 0x46, 0x73, 0x49, 0x01, 0x60, 0x08, 0x47, 0x18, + 0x66, 0x00, 0x00, 0x08, 0x00, 0x00, 0x46, 0x6c, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x02, 0xd0, + 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x00, 0x15, + 0x00, 0x03, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x90, 0x85, 0x00, 0x00, 0xa6, 0xee, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xd0, + 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x08, 0xa0, 0x00, 0x08, 0x08, 0x28, + 0x00, 0x08, 0x88, 0x68, 0x00, 0x08, 0xa0, 0x98, + 0x00, 0x08, 0x88, 0x68, 0x00, 0x08, 0x28, 0x98, + 0x00, 0x08, 0xac, 0xf4, 0x00, 0x08, 0xb8, 0x7c, + 0x00, 0x02, 0x02, 0x88, 0x00, 0x02, 0x08, 0x22, + 0x00, 0x02, 0x88, 0xaa, 0x00, 0x02, 0x22, 0xaa, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x24, 0x00, 0x04, 0x04, 0x24, + 0x00, 0x04, 0x28, 0x6c, 0x00, 0x04, 0x28, 0x6c, + 0x00, 0x01, 0x10, 0x44, 0x00, 0x01, 0x20, 0x44, + 0x00, 0x01, 0x11, 0xaa, 0x00, 0x01, 0x88, 0x55, + 0x00, 0x01, 0x44, 0xaa, 0x00, 0x01, 0x44, 0x55, + 0x00, 0x20, 0x80, 0xa0, 0x00, 0x20, 0x80, 0xc0, + 0x00, 0x20, 0x20, 0xa0, 0x00, 0x20, 0x40, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x10, 0x13, 0x16, 0x1a, 0x1b, 0x1d, 0x22, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x10, 0x13, 0x16, 0x1a, 0x1b, 0x1d, 0x22, + 0x10, 0x10, 0x16, 0x18, 0x1b, 0x1d, 0x22, 0x25, + 0x13, 0x16, 0x1a, 0x1b, 0x1d, 0x22, 0x22, 0x26, + 0x16, 0x16, 0x1a, 0x1b, 0x1d, 0x22, 0x25, 0x28, + 0x16, 0x1a, 0x1b, 0x1d, 0x20, 0x23, 0x28, 0x30, + 0x1a, 0x1b, 0x1d, 0x20, 0x23, 0x28, 0x30, 0x3a, + 0x1a, 0x1b, 0x1d, 0x22, 0x26, 0x2e, 0x38, 0x45, + 0x1b, 0x1d, 0x23, 0x26, 0x2e, 0x38, 0x45, 0x53, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x1b, 0x08, 0x00, + 0x00, 0x1f, 0xde, 0x00, 0x00, 0x00, 0x50, 0x00, + 0x00, 0x09, 0xce, 0x00, 0x00, 0x13, 0x4c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x05, 0x28, 0x20, 0x01, + 0x00, 0x00, 0x02, 0x40, 0x71, 0x01, 0x00, 0x68, + 0xe0, 0x7f, 0xb0, 0x7f, 0x60, 0x40, 0xe0, 0x1d, + 0x90, 0x10, 0xb4, 0x81, 0xe8, 0xc0, 0xe0, 0xc2, + 0x90, 0x18, 0x00, 0x8a, 0x70, 0xc0, 0x0f, 0x87, + 0xe3, 0xe8, 0xc0, 0x00, 0x70, 0x40, 0xe0, 0x01, + 0xe0, 0x86, 0x00, 0x26, 0xd0, 0x28, 0xe0, 0x0e, + 0xd0, 0x0e, 0x0f, 0x0b, 0x70, 0x1d, 0xe0, 0x67, + 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, + 0x0f, 0x87, 0x02, 0x20, 0xd0, 0x01, 0xe0, 0x25, + 0x0f, 0x45, 0x6f, 0x81, 0xdf, 0xa6, 0xe0, 0x36, + 0xe1, 0x30, 0xa0, 0x37, 0xc0, 0x00, 0xe0, 0x26, + 0x00, 0x33, 0xdf, 0x00, 0xe0, 0x32, 0x0f, 0xc5, + 0x0f, 0x87, 0x00, 0x27, 0xd0, 0x4c, 0xe0, 0x21, + 0x00, 0x33, 0xdf, 0x60, 0x00, 0x27, 0xd0, 0x56, + 0x60, 0x01, 0xe0, 0x2d, 0x03, 0xa0, 0xd0, 0x41, + 0xa0, 0x78, 0x00, 0x60, 0xd0, 0x41, 0xa0, 0x77, + 0x00, 0x22, 0xd0, 0x58, 0xa0, 0x76, 0x00, 0x21, + 0xd0, 0x7c, 0x00, 0x4a, 0xd0, 0x72, 0x70, 0x40, + 0x00, 0x06, 0x0f, 0x87, 0x00, 0x22, 0xdc, 0xf8, + 0xf0, 0x4a, 0xe1, 0x70, 0x07, 0xef, 0xdd, 0xbf, + 0x4f, 0x36, 0x1d, 0x99, 0x4d, 0x80, 0x10, 0x18, + 0xdd, 0x50, 0x60, 0x35, 0xdd, 0x72, 0xdd, 0x10, + 0x3d, 0xb4, 0xec, 0x57, 0x2d, 0x36, 0x1d, 0x03, + 0xbd, 0x04, 0xe4, 0x2b, 0x01, 0x46, 0x00, 0x06, + 0xac, 0xf6, 0x80, 0x3f, 0x0d, 0x0a, 0x10, 0x02, + 0x7d, 0x40, 0x10, 0x1e, 0xb0, 0x20, 0xbc, 0xe0, + 0x00, 0x06, 0x00, 0xc6, 0xe0, 0x52, 0xb7, 0x60, + 0xb7, 0x60, 0xc0, 0x5d, 0x30, 0x5f, 0xe4, 0x72, + 0xc7, 0x5e, 0x00, 0xed, 0xd0, 0x28, 0x70, 0x40, + 0xb0, 0x7f, 0x60, 0x40, 0xc0, 0x1d, 0x30, 0x1c, + 0xf8, 0x7e, 0x00, 0x21, 0xd0, 0x01, 0x00, 0x26, + 0xd0, 0x78, 0xa0, 0x38, 0x80, 0x3f, 0x70, 0x01, + 0xb0, 0x3f, 0x60, 0x01, 0x0f, 0x87, 0x80, 0x34, + 0x03, 0xef, 0xd8, 0x3f, 0xa8, 0x38, 0x01, 0x35, + 0xdc, 0x33, 0xe0, 0x46, 0xc0, 0x1c, 0xe4, 0xa5, + 0x97, 0x2e, 0x30, 0x1c, 0xe8, 0x8e, 0x00, 0x21, + 0xd0, 0x00, 0xa0, 0x38, 0xc0, 0x5d, 0x00, 0x23, + 0xd0, 0x00, 0x30, 0x40, 0x30, 0x5e, 0xe4, 0x99, + 0x20, 0x5e, 0xc0, 0x01, 0x30, 0x1c, 0xec, 0xa4, + 0xe0, 0x9d, 0x20, 0x5f, 0xc0, 0x1c, 0x30, 0x01, + 0xf4, 0xa5, 0xc0, 0x1c, 0x30, 0x1d, 0xec, 0xa4, + 0xe4, 0xa5, 0x90, 0x38, 0x00, 0x1b, 0xe8, 0xa5, + 0xa0, 0x66, 0xb1, 0x3f, 0xe4, 0xb3, 0xe8, 0xb1, + 0xc0, 0x4b, 0x30, 0x44, 0xf8, 0xb3, 0x60, 0x45, + 0xb1, 0x7c, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x05, + 0x80, 0x40, 0x72, 0xc5, 0x00, 0x06, 0x90, 0x55, + 0xd0, 0x01, 0x00, 0x40, 0xa0, 0x55, 0x0f, 0x87, + 0x01, 0x46, 0x00, 0x06, 0x03, 0xef, 0xd0, 0x3f, + 0xa0, 0x38, 0xb0, 0x01, 0xa0, 0x37, 0x80, 0x3f, + 0x82, 0x34, 0x80, 0x3f, 0xf2, 0x1a, 0x80, 0x34, + 0x80, 0x3f, 0xf2, 0x1a, 0xd8, 0x00, 0xd8, 0x40, + 0xd8, 0x80, 0xd8, 0xc0, 0xd9, 0x00, 0xd9, 0x40, + 0xd9, 0x80, 0xd9, 0xc0, 0xda, 0x00, 0xda, 0x40, + 0xda, 0x80, 0xda, 0xc0, 0xdb, 0x00, 0xdb, 0x40, + 0xdb, 0x80, 0xdb, 0xc0, 0xdc, 0x00, 0xdc, 0x40, + 0xdc, 0x80, 0xdc, 0xc0, 0xdd, 0x00, 0xdd, 0x40, + 0xdd, 0x80, 0xdd, 0xc0, 0xde, 0x00, 0xde, 0x40, + 0xde, 0x80, 0xde, 0xc0, 0xdf, 0x00, 0xdf, 0x40, + 0xdf, 0x80, 0xdf, 0xc0, 0xde, 0x80, 0xde, 0xc1, + 0x00, 0x28, 0xd0, 0x60, 0x6e, 0x81, 0x80, 0x00, + 0x80, 0x05, 0x00, 0xe3, 0xd1, 0x88, 0x00, 0x73, + 0xd5, 0x80, 0x60, 0x06, 0xb1, 0xbc, 0x00, 0xfa, + 0xd0, 0x80, 0x60, 0x06, 0x00, 0x26, 0xd0, 0x6c, + 0x6e, 0x81, 0x04, 0xf4, 0xdc, 0x00, 0x00, 0xee, + 0xd1, 0x94, 0x60, 0x06, 0x00, 0xed, 0xd0, 0x50, + 0x6e, 0x81, 0x00, 0x22, 0xd0, 0x70, 0x6e, 0x81, + 0x00, 0xee, 0xd0, 0x74, 0x6e, 0x81, 0xd0, 0x4c, + 0x6e, 0x81, 0xd0, 0x02, 0x00, 0xef, 0xd0, 0x6c, + 0x60, 0x01, 0xd0, 0x03, 0x00, 0xef, 0xd0, 0x70, + 0x60, 0x01, 0x00, 0xe0, 0xd0, 0x48, 0xd0, 0x02, + 0x60, 0x01, 0x00, 0x32, 0xdf, 0x20, 0xa0, 0x1c, + 0x00, 0x21, 0xd0, 0x60, 0xa0, 0x76, 0x00, 0x34, + 0xd5, 0x70, 0x80, 0x3f, 0x00, 0x23, 0xd0, 0x5c, + 0x00, 0x4a, 0xd0, 0x72, 0x70, 0x40, 0x00, 0x06, + 0x00, 0x22, 0xd1, 0xa4, 0x6e, 0xc6, 0xd0, 0x58, + 0x6e, 0xc1, 0xd0, 0xc9, 0x00, 0xed, 0xd0, 0x54, + 0x60, 0xc1, 0x00, 0x22, 0xd0, 0x40, 0x60, 0xc1, + 0x00, 0x22, 0xd0, 0x60, 0x60, 0xc1, 0x82, 0x34, + 0x80, 0x3f, 0xd6, 0xd9, 0x01, 0x2d, 0xd6, 0x0c, + 0x16, 0x08, 0xd0, 0x55, 0xd0, 0x2c, 0x60, 0x40, + 0xd0, 0x70, 0x00, 0xfb, 0xd1, 0x00, 0x60, 0x01, + 0x00, 0x2b, 0xd4, 0x10, 0x00, 0x29, 0xd4, 0x40, + 0x00, 0x2b, 0xd0, 0x90, 0xc0, 0xc2, 0xd1, 0x18, + 0xd1, 0x44, 0xa1, 0x50, 0x00, 0x21, 0xd0, 0xb6, + 0xd0, 0xd7, 0x00, 0x29, 0xd0, 0x04, 0x64, 0x00, + 0xb0, 0x3c, 0x64, 0x40, 0x80, 0x34, 0x80, 0x3f, + 0xd0, 0x40, 0x00, 0x35, 0xd0, 0x00, 0x60, 0x01, + 0xd0, 0x48, 0x6e, 0x81, 0xd0, 0x44, 0x6e, 0x81, + 0x00, 0x64, 0xd1, 0x80, 0x6e, 0x86, 0x01, 0x3c, + 0xd2, 0x39, 0xe0, 0x46, 0xd0, 0x00, 0xd0, 0x40, + 0xd0, 0x80, 0xd0, 0xc0, 0xd1, 0x00, 0xd1, 0x40, + 0xd1, 0x80, 0xd1, 0xc0, 0xd2, 0x00, 0xd2, 0x40, + 0xd2, 0x80, 0xd2, 0xc0, 0xd3, 0x00, 0xd3, 0x40, + 0xd3, 0x80, 0xd3, 0xc0, 0xd4, 0x00, 0xd4, 0x40, + 0xd4, 0x80, 0xd4, 0xc0, 0xd5, 0x00, 0xd5, 0x40, + 0xd5, 0x80, 0xd5, 0xc0, 0xd6, 0x00, 0xd6, 0x40, + 0xd6, 0x80, 0xd6, 0xc0, 0xd7, 0x00, 0xd7, 0x40, + 0xd7, 0x80, 0xd7, 0xc0, 0x0f, 0xc5, 0x50, 0x00, + 0x01, 0x46, 0x00, 0x06, 0xde, 0x80, 0xde, 0xc1, + 0x03, 0x2f, 0xd0, 0x33, 0xa0, 0x38, 0xb0, 0x01, + 0xa0, 0x37, 0x80, 0x3f, 0x08, 0x20, 0xdf, 0x00, + 0x82, 0x34, 0x80, 0x3f, 0x00, 0xee, 0xd0, 0x08, + 0x77, 0xc0, 0xb0, 0x04, 0x77, 0x80, 0xb0, 0x04, + 0xc0, 0x5f, 0x30, 0x5e, 0x60, 0x40, 0xd7, 0x00, + 0xb7, 0x01, 0x80, 0x34, 0x80, 0x3f, 0x00, 0x60, + 0xd0, 0x80, 0x00, 0xec, 0xd0, 0x40, 0x60, 0x81, + 0xb0, 0x7c, 0x60, 0x81, 0x00, 0xa0, 0xd0, 0x80, + 0xb0, 0x74, 0x60, 0x81, 0xb0, 0x7c, 0x60, 0x81, + 0x00, 0x68, 0xd0, 0x80, 0x6e, 0x82, 0x00, 0xef, + 0xd0, 0x8c, 0x6e, 0x82, 0x00, 0x06, 0xd0, 0x11, + 0xa0, 0x38, 0x80, 0x3f, 0x08, 0x20, 0xd0, 0x40, + 0x10, 0x48, 0xa0, 0x4a, 0xa0, 0x5b, 0x0c, 0x20, + 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0xa0, 0x0a, + 0x90, 0x4d, 0x0f, 0xff, 0xd8, 0x1f, 0x40, 0x40, + 0xa0, 0x4d, 0x80, 0x0a, 0x80, 0x07, 0x80, 0x1b, + 0x80, 0x27, 0x00, 0x60, 0xd0, 0x00, 0xa0, 0x09, + 0x80, 0x28, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, + 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, + 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, + 0xd0, 0x00, 0xa0, 0x29, 0x80, 0x2b, 0x02, 0x30, + 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, 0x01, 0xb0, + 0xd0, 0x10, 0xa0, 0x37, 0x80, 0x3f, 0x02, 0x30, + 0xd0, 0x01, 0xa0, 0x38, 0x00, 0xea, 0xd0, 0x00, + 0xd0, 0x4e, 0x0f, 0x0b, 0x70, 0x40, 0x00, 0x06, + 0x00, 0x21, 0xd0, 0x88, 0x00, 0xe1, 0xd0, 0x60, + 0x60, 0x81, 0x00, 0x2b, 0xd0, 0x80, 0x00, 0xe0, + 0xd0, 0x6c, 0x60, 0x81, 0xb0, 0x7c, 0x00, 0x29, + 0xd0, 0x80, 0x60, 0x81, 0xb0, 0x7c, 0xd0, 0x82, + 0x60, 0x81, 0xb0, 0x7c, 0xd0, 0x85, 0x60, 0x81, + 0xb0, 0x7c, 0x03, 0xaa, 0xd0, 0x98, 0x60, 0x81, + 0xb0, 0x7c, 0x6e, 0x81, 0x00, 0x27, 0xd0, 0x40, + 0x6e, 0x81, 0xb0, 0x7c, 0x6e, 0x81, 0xb0, 0x7c, + 0x6e, 0x81, 0x00, 0x27, 0xd1, 0x90, 0x6e, 0x86, + 0x00, 0x21, 0xd1, 0xb8, 0x6e, 0x86, 0x00, 0x66, + 0xd1, 0xa0, 0xd0, 0x00, 0x01, 0x64, 0xd0, 0x58, + 0x30, 0x01, 0x60, 0x06, 0x00, 0xed, 0xd1, 0xbc, + 0x6e, 0x86, 0x00, 0xec, 0xd1, 0xb8, 0x6e, 0x86, + 0xb1, 0x84, 0x6e, 0x86, 0x00, 0xee, 0xd1, 0x84, + 0x70, 0x46, 0x00, 0x65, 0xd1, 0x94, 0x60, 0x46, + 0x00, 0x64, 0xd1, 0xbc, 0x6e, 0x86, 0x00, 0x65, + 0xd1, 0x80, 0x6e, 0x86, 0xb1, 0xbc, 0x6e, 0x86, + 0xb1, 0xbc, 0x6e, 0x86, 0x00, 0xed, 0xd1, 0xa8, + 0x6e, 0x86, 0xd0, 0x0e, 0xb1, 0xbc, 0x60, 0x06, + 0xb1, 0xbc, 0x60, 0x06, 0x00, 0x65, 0xd1, 0xa4, + 0x60, 0x06, 0x00, 0x28, 0xd1, 0xa4, 0x6e, 0x86, + 0x00, 0x27, 0xd1, 0x98, 0x6e, 0x86, 0x00, 0x64, + 0xd1, 0xa4, 0x6e, 0x86, 0xd2, 0x01, 0x00, 0x64, + 0xd0, 0x60, 0x62, 0x01, 0x00, 0x64, 0xd1, 0x80, + 0x70, 0x46, 0x6e, 0x86, 0x00, 0xef, 0xd1, 0x98, + 0x70, 0x86, 0x08, 0x20, 0xd0, 0xcf, 0x30, 0xc1, + 0xea, 0x42, 0xd0, 0x81, 0x00, 0x21, 0xd1, 0xa8, + 0x60, 0x86, 0x00, 0xed, 0xd1, 0xa0, 0x6e, 0xc6, + 0x00, 0x65, 0xd1, 0x98, 0x6e, 0xc6, 0x00, 0x22, + 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, 0x00, 0xc6, + 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, 0x50, 0x00, + 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, 0x00, 0x64, + 0xd0, 0x60, 0x70, 0xc1, 0x00, 0xec, 0xd0, 0x40, + 0x71, 0x81, 0xb0, 0x7c, 0x71, 0xc1, 0xc0, 0x87, + 0x30, 0x86, 0xf9, 0x83, 0x10, 0xee, 0xe9, 0x76, + 0x10, 0xe1, 0xe9, 0x76, 0xe2, 0x57, 0x00, 0x63, + 0xd0, 0xbf, 0x72, 0x06, 0xb1, 0xbc, 0x41, 0x82, + 0x02, 0x1b, 0xe9, 0x8d, 0x72, 0x86, 0xb1, 0xbc, + 0x41, 0x82, 0xd0, 0x75, 0x30, 0x48, 0xe9, 0xfe, + 0xb0, 0x7f, 0xea, 0x00, 0x02, 0x1c, 0xe9, 0x96, + 0x15, 0xa3, 0xea, 0x57, 0x10, 0xf0, 0xe9, 0x9a, + 0x10, 0xfa, 0xf9, 0xa1, 0x15, 0xa3, 0xea, 0x57, + 0x00, 0x21, 0xd0, 0x4c, 0x70, 0x41, 0x10, 0x61, + 0xfa, 0x57, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x40, + 0xd0, 0x85, 0x40, 0x42, 0x60, 0x40, 0x00, 0x64, + 0xd0, 0x64, 0x62, 0x01, 0x12, 0x2b, 0xe9, 0xeb, + 0x12, 0x3b, 0xe9, 0xd5, 0x00, 0xec, 0xd0, 0x40, + 0x61, 0x81, 0x12, 0x2d, 0xe9, 0xbf, 0x12, 0x30, + 0xe9, 0xd4, 0x12, 0x36, 0xe9, 0xd4, 0x12, 0x3a, + 0xe9, 0xd4, 0xd0, 0x62, 0x30, 0x48, 0xe9, 0xf2, + 0x12, 0x2e, 0xe9, 0xf9, 0xe1, 0x76, 0x00, 0xed, + 0xd0, 0x08, 0x70, 0x40, 0xd0, 0x85, 0x40, 0x42, + 0x60, 0x40, 0xb0, 0x08, 0x00, 0x21, 0xd0, 0x41, + 0x60, 0x40, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, + 0xf2, 0x5a, 0x00, 0xed, 0xd0, 0x20, 0xd0, 0x41, + 0x60, 0x40, 0x10, 0xe1, 0xea, 0x3a, 0xe2, 0x57, + 0xe2, 0x53, 0x10, 0xee, 0xf9, 0xe9, 0x01, 0x46, + 0x82, 0x34, 0x80, 0x3f, 0x97, 0x2e, 0xc7, 0x5c, + 0xa7, 0x66, 0x81, 0x34, 0x80, 0x3f, 0x00, 0x21, + 0xd0, 0x01, 0xa0, 0x38, 0x00, 0xc6, 0x00, 0x21, + 0xd0, 0x15, 0x0b, 0x09, 0x00, 0x4d, 0xb0, 0x01, + 0xed, 0xe5, 0xd2, 0x1a, 0xe1, 0xec, 0xf1, 0x18, + 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0xd0, 0x4e, + 0x60, 0x46, 0xe2, 0x54, 0xc0, 0x0a, 0x10, 0x06, + 0x52, 0x80, 0x00, 0xed, 0xd0, 0x40, 0x62, 0x81, + 0xe2, 0x53, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, + 0xf2, 0x5a, 0xe1, 0x70, 0x12, 0xa3, 0xf6, 0x57, + 0x15, 0xa1, 0xfa, 0x57, 0x12, 0xa0, 0xea, 0x23, + 0x00, 0x65, 0xd1, 0x1c, 0xd0, 0x75, 0x30, 0x48, + 0xea, 0x0a, 0xb1, 0x3c, 0x71, 0x04, 0x11, 0x20, + 0xfa, 0x11, 0x00, 0xec, 0xd0, 0x40, 0x61, 0x81, + 0xe2, 0x57, 0x12, 0xa1, 0xea, 0x33, 0x00, 0xe2, + 0xd0, 0x60, 0x70, 0x01, 0xb0, 0x7c, 0x70, 0x41, + 0x10, 0x0c, 0x50, 0x40, 0x0c, 0x30, 0xd0, 0x00, + 0x31, 0x01, 0xee, 0x21, 0x21, 0x00, 0xe6, 0x57, + 0xe2, 0x23, 0x31, 0x00, 0xfe, 0x57, 0xd0, 0x75, + 0x30, 0x48, 0xea, 0x28, 0xf2, 0x5a, 0xe2, 0x0d, + 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0x00, 0x63, + 0xd1, 0x3f, 0xb1, 0xbc, 0x41, 0x84, 0x61, 0x81, + 0xd0, 0x50, 0x60, 0x46, 0xe2, 0x57, 0x00, 0xed, + 0xd0, 0x7c, 0x70, 0x41, 0x08, 0x20, 0xd0, 0x00, + 0x10, 0x08, 0xe2, 0x1c, 0xd2, 0x84, 0x00, 0xed, + 0xd1, 0xa4, 0x62, 0x86, 0xd5, 0x00, 0xb5, 0x01, + 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc7, 0x5e, + 0x97, 0x2e, 0x81, 0x34, 0x80, 0x3f, 0x02, 0xe8, + 0xd0, 0x30, 0xa0, 0x37, 0xa0, 0x38, 0x08, 0x20, + 0xdf, 0x00, 0x80, 0x73, 0x80, 0x3f, 0x00, 0xc6, + 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0xf2, 0x5a, + 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, 0x02, 0x3c, + 0xdc, 0x89, 0xe0, 0x46, 0x00, 0x28, 0xd0, 0x64, + 0x70, 0x81, 0x00, 0x22, 0xd0, 0x00, 0x50, 0x80, + 0x60, 0x81, 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, + 0x00, 0xed, 0xd1, 0xa4, 0x72, 0x86, 0x00, 0xef, + 0xd1, 0x90, 0x70, 0x46, 0x10, 0x5c, 0x10, 0x65, + 0xed, 0x7d, 0xd0, 0x46, 0xc0, 0x0a, 0x10, 0x40, + 0x60, 0x46, 0x00, 0x22, 0xd0, 0x73, 0x30, 0x54, + 0xe9, 0x8e, 0x12, 0xa4, 0xe9, 0xb5, 0x15, 0x20, + 0xe9, 0xc0, 0xb0, 0x7b, 0xe9, 0xc3, 0xb0, 0x41, + 0xe9, 0xc9, 0xc0, 0x54, 0x10, 0x5c, 0x10, 0x6e, + 0xe9, 0xc6, 0xe1, 0xb5, 0x00, 0x28, 0xd1, 0xb0, + 0xd0, 0x00, 0x60, 0x06, 0x12, 0xa4, 0xf9, 0xb2, + 0x00, 0xed, 0xd1, 0x9c, 0x62, 0x86, 0xd2, 0x80, + 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, 0xd0, 0x02, + 0x00, 0xec, 0xd1, 0xbc, 0x60, 0x06, 0x00, 0x64, + 0xd1, 0xa0, 0x72, 0x06, 0x12, 0x21, 0xf9, 0xa6, + 0xd2, 0x0d, 0x62, 0x06, 0x00, 0xed, 0xd1, 0xa0, + 0x61, 0x86, 0xd0, 0x0e, 0x00, 0xed, 0xd1, 0xac, + 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, 0x00, 0x65, + 0xd1, 0xa4, 0x60, 0x06, 0x01, 0x7e, 0xd2, 0x32, + 0xe1, 0xcb, 0x01, 0x46, 0x90, 0x49, 0x00, 0x60, + 0xd0, 0x00, 0x50, 0x40, 0xa0, 0x49, 0x80, 0x3f, + 0x00, 0xc6, 0x0c, 0x09, 0x05, 0x0d, 0xe1, 0x70, + 0x01, 0xbf, 0xd0, 0x41, 0xe1, 0xcb, 0x01, 0xbb, + 0xda, 0x10, 0xe1, 0xcb, 0x01, 0xbd, 0xda, 0x0b, + 0xe1, 0xcb, 0x03, 0xb9, 0xd8, 0x10, 0x01, 0x46, + 0x90, 0x49, 0x00, 0x60, 0xd1, 0x00, 0x50, 0x44, + 0x30, 0x44, 0xa0, 0x49, 0x80, 0x3f, 0x00, 0xc6, + 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x01, 0xfa, 0xd4, 0x3d, 0x00, 0x25, 0xdc, 0xd8, + 0xf0, 0x4a, 0x00, 0x26, 0xd0, 0x18, 0xd0, 0x40, + 0x60, 0x40, 0x00, 0x28, 0xd0, 0x24, 0x70, 0x40, + 0xd0, 0x82, 0x50, 0x42, 0x60, 0x40, 0x00, 0xec, + 0xd0, 0xa4, 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x81, + 0x00, 0xec, 0xd1, 0x98, 0xd0, 0x41, 0x60, 0x46, + 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x8e, 0xd0, 0x40, + 0x60, 0x46, 0xe1, 0x81, 0xd0, 0x40, 0x00, 0xe6, + 0xd0, 0x10, 0x60, 0x40, 0xb0, 0x3c, 0x60, 0x40, + 0xb0, 0x3c, 0x60, 0x40, 0xd0, 0xe0, 0x00, 0xea, + 0xd0, 0x40, 0x00, 0xe8, 0xd0, 0x82, 0x01, 0x46, + 0x70, 0x01, 0xb0, 0x7c, 0x60, 0x02, 0xb0, 0xbc, + 0x00, 0x06, 0x00, 0xc6, 0xb0, 0xc1, 0xed, 0x9b, + 0x80, 0x49, 0xd6, 0x44, 0xd5, 0x43, 0x00, 0xe0, + 0xd1, 0x80, 0x00, 0x06, 0x0b, 0x09, 0x01, 0x0d, + 0x0b, 0x09, 0x61, 0x06, 0xb1, 0xbc, 0x01, 0x4d, + 0x09, 0x09, 0x61, 0x46, 0xb1, 0xbc, 0x00, 0xcd, + 0x09, 0x09, 0x10, 0xe4, 0xed, 0xb8, 0x60, 0xc6, + 0xb1, 0xbc, 0x00, 0xcd, 0x60, 0xc6, 0x00, 0xed, + 0xd0, 0x04, 0x70, 0x00, 0x10, 0x20, 0xf9, 0xd8, + 0xd0, 0x0a, 0x40, 0x03, 0xe9, 0xc9, 0x10, 0xe2, + 0xe9, 0xc9, 0x10, 0xe7, 0xe9, 0xc9, 0x10, 0xe8, + 0xf9, 0xd8, 0x01, 0x46, 0x90, 0x10, 0x00, 0x20, + 0xd0, 0x44, 0x50, 0x40, 0x00, 0xc6, 0xa0, 0x50, + 0x00, 0xa0, 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, + 0x00, 0xed, 0xd1, 0xa4, 0xd0, 0x04, 0x60, 0x06, + 0x00, 0xee, 0xd1, 0xac, 0x73, 0x86, 0x10, 0xe3, + 0xe5, 0xe3, 0xe9, 0xe8, 0x00, 0xe7, 0xd0, 0x40, + 0x00, 0xae, 0xd0, 0xbb, 0xe1, 0xec, 0x01, 0x24, + 0xd0, 0x6b, 0x00, 0xea, 0xd0, 0xa6, 0xe1, 0xec, + 0x01, 0x21, 0xd0, 0x7b, 0x00, 0xe8, 0xd0, 0x90, + 0x13, 0xa0, 0xf9, 0xef, 0xc0, 0x42, 0x00, 0xe0, + 0xd1, 0xa8, 0x60, 0x46, 0xb1, 0x98, 0x0b, 0xc9, + 0x00, 0x4d, 0x09, 0x09, 0x10, 0x44, 0x00, 0x8d, + 0x20, 0x42, 0x10, 0x5f, 0x60, 0x46, 0xb1, 0xb8, + 0x00, 0x90, 0xea, 0x1c, 0x0a, 0x89, 0x00, 0x8d, + 0x60, 0x86, 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, + 0x60, 0x46, 0x10, 0x60, 0xea, 0x10, 0x00, 0xe8, + 0xd1, 0x80, 0xf2, 0xb0, 0x10, 0x60, 0xfa, 0x1c, + 0x08, 0x49, 0x00, 0xe0, 0xd1, 0xa4, 0x00, 0x4d, + 0x60, 0x46, 0x10, 0x60, 0xea, 0x20, 0x00, 0xe9, + 0xd1, 0x80, 0xf2, 0xb0, 0x10, 0x60, 0xea, 0x20, + 0x00, 0xe0, 0xd1, 0x88, 0xd0, 0x40, 0x60, 0x46, + 0xd0, 0x00, 0x00, 0xe0, 0xd1, 0xa8, 0x70, 0x46, + 0x00, 0xef, 0xd1, 0x9c, 0x70, 0x86, 0xb0, 0xb0, + 0xee, 0x2a, 0xd0, 0x81, 0x00, 0x90, 0xea, 0x2d, + 0x20, 0x01, 0x10, 0x41, 0x10, 0x9f, 0x10, 0xa0, + 0xee, 0x2a, 0x10, 0x1c, 0x00, 0x65, 0xd1, 0xa8, + 0x60, 0x06, 0x01, 0xb4, 0xd6, 0x3a, 0xe0, 0x46, + 0x02, 0x31, 0xde, 0x13, 0x00, 0x27, 0xdc, 0xd8, + 0xf0, 0x4a, 0x0c, 0x09, 0x00, 0x06, 0x05, 0x0d, + 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, 0xe9, 0xea, + 0xb0, 0x7d, 0xfa, 0x05, 0x09, 0x09, 0x01, 0xcd, + 0x11, 0xe1, 0xf9, 0xc7, 0x80, 0x09, 0x80, 0x27, + 0x0a, 0x09, 0xd6, 0x45, 0x00, 0xe1, 0xd1, 0xa0, + 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, + 0x00, 0x4d, 0x60, 0x46, 0x00, 0x50, 0xe9, 0x91, + 0xd4, 0x01, 0xb1, 0xbc, 0x08, 0x89, 0x00, 0x4d, + 0x60, 0x46, 0x00, 0xe0, 0xd1, 0x80, 0x08, 0x89, + 0x00, 0x4d, 0x08, 0x89, 0x10, 0x4c, 0x71, 0x06, + 0x21, 0x01, 0x61, 0x06, 0xb1, 0xbc, 0x00, 0x4d, + 0x0b, 0x49, 0x10, 0x4c, 0x71, 0x46, 0x21, 0x41, + 0x61, 0x46, 0xb1, 0xb0, 0x00, 0x4d, 0x10, 0x5f, + 0x60, 0x46, 0xb1, 0xbc, 0x0a, 0x09, 0x00, 0x4d, + 0x10, 0x4a, 0x70, 0x86, 0x20, 0x81, 0x60, 0x86, + 0x00, 0xe1, 0xd1, 0xac, 0x08, 0x49, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x89, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x09, 0x49, 0x00, 0x8d, + 0x60, 0x86, 0xc0, 0x02, 0x00, 0xe0, 0xd1, 0xa8, + 0x70, 0xc6, 0x10, 0xc0, 0xd0, 0x20, 0x30, 0x01, + 0x10, 0xc0, 0x60, 0xc6, 0xe1, 0x75, 0x11, 0xe2, + 0xf9, 0x75, 0x00, 0xe2, 0xd1, 0x80, 0x08, 0xc9, + 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, + 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x10, 0x60, + 0xf9, 0xd7, 0xb1, 0xb4, 0xe1, 0xde, 0xd2, 0x03, + 0x0a, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0xb2, 0x01, 0xf9, 0xd8, 0x0b, 0xc9, 0x00, 0x4d, + 0x10, 0x49, 0x10, 0x56, 0x60, 0x46, 0xb1, 0xbc, + 0x0b, 0x89, 0x00, 0x4d, 0x10, 0x4a, 0x10, 0x56, + 0x60, 0x46, 0xe1, 0x75, 0x0b, 0x2c, 0xd4, 0x40, + 0xf3, 0xb0, 0xe1, 0x77, 0x00, 0xe0, 0xd0, 0x6c, + 0x00, 0xe0, 0xd1, 0x80, 0xd0, 0x0a, 0xf1, 0xfe, + 0x00, 0xe1, 0xd1, 0xb0, 0xd0, 0x02, 0xf1, 0xfe, + 0x00, 0xe0, 0xd1, 0x80, 0x76, 0x86, 0xb1, 0xbc, + 0x73, 0x46, 0xe2, 0x3c, 0x70, 0x81, 0x60, 0x86, + 0xb1, 0xbc, 0xb0, 0x7c, 0xb0, 0x01, 0xed, 0xfe, + 0x0f, 0xc5, 0x00, 0xe1, 0xd1, 0xa0, 0x70, 0x46, + 0xd0, 0x8f, 0x40, 0x42, 0x00, 0x25, 0xd0, 0xe0, + 0x00, 0x24, 0xd1, 0x20, 0x10, 0x6a, 0xea, 0x1e, + 0x00, 0x66, 0xd0, 0xe0, 0x00, 0x62, 0xd1, 0x00, + 0x10, 0x66, 0xea, 0x1e, 0x00, 0x6e, 0xd0, 0xc0, + 0x10, 0x64, 0xea, 0x1e, 0x00, 0x2b, 0xd0, 0xd0, + 0x00, 0x29, 0xd1, 0x00, 0x00, 0xe0, 0xd1, 0x80, + 0x76, 0x86, 0x16, 0xa0, 0xe9, 0xee, 0x30, 0xda, + 0xe5, 0xee, 0xb1, 0xbc, 0x73, 0x46, 0x13, 0x60, + 0xe9, 0xee, 0x31, 0x0d, 0xe5, 0xee, 0xd0, 0x82, + 0xb1, 0xbc, 0x70, 0x46, 0x10, 0x60, 0xe9, 0xee, + 0xb0, 0x81, 0xee, 0x2c, 0x00, 0xe0, 0xd0, 0x40, + 0x00, 0xe0, 0xd1, 0xac, 0xd0, 0x0a, 0xf1, 0xfe, + 0x00, 0xe1, 0xd0, 0x70, 0xd0, 0x02, 0xf1, 0xfe, + 0x00, 0xec, 0xd1, 0x98, 0xd0, 0x40, 0x60, 0x46, + 0x00, 0xe0, 0xd0, 0x8c, 0x70, 0x82, 0x00, 0x21, + 0xd0, 0x70, 0x60, 0x81, 0xd0, 0x40, 0x00, 0x25, + 0xd0, 0x20, 0x30, 0x1a, 0xfa, 0x50, 0x00, 0x24, + 0xd0, 0x20, 0x30, 0x0d, 0xfa, 0x50, 0xd0, 0x41, + 0x00, 0x21, 0xd1, 0x84, 0x60, 0x46, 0xb6, 0xb1, + 0x16, 0x9c, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, + 0x02, 0x31, 0xde, 0x13, 0x00, 0x27, 0xdc, 0xd8, + 0xf0, 0x4a, 0x00, 0xec, 0xd0, 0xa8, 0x70, 0xc2, + 0x10, 0xe0, 0xf9, 0x77, 0x00, 0xec, 0xd1, 0x9c, + 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, + 0xe9, 0x84, 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x77, + 0x0b, 0x49, 0x00, 0xe2, 0xd1, 0xa0, 0x00, 0x4d, + 0x10, 0x5f, 0x00, 0x6f, 0xd0, 0xff, 0x40, 0x43, + 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x09, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x89, 0x00, 0x4d, + 0x60, 0x46, 0x10, 0x61, 0xf9, 0x9b, 0xd3, 0xc2, + 0x00, 0xec, 0xd1, 0xbc, 0x63, 0xc6, 0x0c, 0x09, + 0x90, 0x4d, 0x10, 0x60, 0xe5, 0x9c, 0x00, 0x06, + 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, + 0xf9, 0xa9, 0x0b, 0xa0, 0xd4, 0x40, 0xf3, 0xb0, + 0xe1, 0xa0, 0x00, 0xec, 0xd1, 0x9c, 0xd0, 0x40, + 0x60, 0x46, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, + 0x0b, 0x09, 0x00, 0x4d, 0x0b, 0x09, 0x00, 0x4d, + 0x0a, 0x09, 0x01, 0x4d, 0x0a, 0x09, 0x00, 0x4d, + 0x01, 0x59, 0xe9, 0x96, 0x09, 0x09, 0x00, 0x4d, + 0x10, 0x5f, 0x10, 0x61, 0xf9, 0x96, 0x09, 0x09, + 0x01, 0x4d, 0x11, 0x5f, 0x0b, 0xc9, 0x00, 0x4d, + 0xc0, 0x01, 0x10, 0x5f, 0x11, 0x4e, 0x51, 0x41, + 0x08, 0x49, 0x00, 0x4d, 0x0b, 0xc9, 0x10, 0x0f, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0xed, 0xd1, 0xb6, + 0x01, 0x46, 0x00, 0x06, 0xa0, 0x3c, 0xa1, 0x7d, + 0x60, 0x06, 0x00, 0xc6, 0xd5, 0x00, 0xb5, 0x01, + 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, + 0x00, 0xec, 0xd0, 0xac, 0x70, 0xc2, 0x10, 0xe0, + 0xf9, 0x70, 0x00, 0xec, 0xd1, 0xa0, 0xd0, 0x41, + 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x7f, + 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x70, 0x0a, 0x89, + 0x0b, 0xcd, 0x00, 0xe3, 0xd1, 0x80, 0x6b, 0xc6, + 0x08, 0xc9, 0x05, 0x8d, 0x15, 0xa3, 0xee, 0x6e, + 0x15, 0xa0, 0xea, 0x6e, 0x90, 0x4d, 0xd0, 0x9f, + 0xd0, 0xdf, 0x40, 0x81, 0x10, 0x55, 0x40, 0xc1, + 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc8, 0x1d, + 0x81, 0x34, 0x80, 0x3f, 0x00, 0xc6, 0xd1, 0x23, + 0x31, 0x03, 0x11, 0x02, 0x38, 0x04, 0xb0, 0x8d, + 0x10, 0x9d, 0x28, 0x02, 0xc0, 0x60, 0x00, 0x65, + 0xd1, 0x94, 0x71, 0x06, 0x68, 0x06, 0x30, 0x44, + 0x00, 0xed, 0xd1, 0xa8, 0x70, 0x06, 0x10, 0x20, + 0xe9, 0xb0, 0x00, 0xee, 0xd0, 0xc0, 0x70, 0xc3, + 0x20, 0x43, 0xb0, 0x01, 0xf9, 0xac, 0x60, 0x06, + 0x00, 0x64, 0xd1, 0xbc, 0x71, 0x06, 0xc0, 0x04, + 0x21, 0x01, 0x61, 0x06, 0x10, 0x20, 0xf5, 0xbb, + 0x11, 0x20, 0xe5, 0xbb, 0xb0, 0x41, 0x00, 0x65, + 0xd1, 0x80, 0x71, 0x06, 0x21, 0x01, 0x61, 0x06, + 0x00, 0xed, 0xd1, 0xac, 0x71, 0x06, 0x15, 0xa1, + 0xe9, 0xcb, 0xb1, 0x3f, 0x61, 0x06, 0x15, 0xa3, + 0xf9, 0xd6, 0xd0, 0xbf, 0xe1, 0xd3, 0xd0, 0x40, + 0x60, 0x46, 0xb1, 0xbc, 0x70, 0x86, 0x61, 0x06, + 0x31, 0x02, 0xe5, 0xd3, 0x20, 0x84, 0x00, 0x65, + 0xd1, 0xa4, 0x60, 0x86, 0xd9, 0x40, 0x00, 0xec, + 0xd1, 0x94, 0x79, 0x06, 0xb1, 0x84, 0x78, 0xc6, + 0xc0, 0x63, 0x30, 0x64, 0xe9, 0xf8, 0x00, 0xa7, + 0xd0, 0xff, 0x7a, 0x63, 0x00, 0x65, 0xd0, 0x00, + 0x71, 0x00, 0x31, 0x29, 0xe5, 0xf8, 0xc0, 0x63, + 0xc8, 0xc1, 0xb0, 0x78, 0x40, 0x43, 0xc0, 0xa4, + 0x30, 0x81, 0xe9, 0xf2, 0x7a, 0x41, 0x31, 0x29, + 0xf5, 0xe8, 0x21, 0x29, 0x61, 0x00, 0xb8, 0xfc, + 0x79, 0x63, 0xb8, 0xfc, 0x48, 0xc3, 0x68, 0xc6, + 0x00, 0xed, 0xd1, 0xb8, 0x69, 0x46, 0x80, 0x28, + 0x0b, 0xc9, 0x00, 0x4d, 0x08, 0x49, 0x10, 0x41, + 0x00, 0xe3, 0xd1, 0x84, 0x00, 0x8d, 0x20, 0x42, + 0x60, 0x46, 0x00, 0xee, 0xd1, 0xa4, 0x70, 0x86, + 0x10, 0xa1, 0xee, 0x18, 0xe6, 0x6b, 0x90, 0x86, + 0x00, 0x90, 0xea, 0x18, 0x00, 0xed, 0xd0, 0x1c, + 0x70, 0x80, 0xb0, 0x81, 0xe6, 0x6b, 0x60, 0x80, + 0xb1, 0xa8, 0x70, 0x86, 0x10, 0xa0, 0xfa, 0x6b, + 0x00, 0x21, 0xd0, 0x38, 0x70, 0x80, 0x10, 0xa0, + 0xfa, 0x6b, 0x0f, 0xef, 0xd0, 0xbf, 0x30, 0x81, + 0xfa, 0x22, 0x60, 0x00, 0x08, 0x20, 0xd0, 0x00, + 0x5f, 0x00, 0x15, 0xa3, 0xea, 0x6b, 0x00, 0xee, + 0xd1, 0x80, 0x79, 0x46, 0x00, 0xf8, 0xd0, 0x00, + 0xc4, 0x40, 0x00, 0xe3, 0xd1, 0x84, 0x78, 0x46, + 0x0f, 0xef, 0xd0, 0x3f, 0x30, 0x21, 0xea, 0x48, + 0x00, 0xe0, 0xd1, 0x90, 0x78, 0x06, 0xc0, 0xa1, + 0x18, 0x43, 0x28, 0x42, 0x18, 0x43, 0x28, 0x42, + 0x18, 0x1e, 0xd8, 0x80, 0x08, 0x11, 0xea, 0x41, + 0x28, 0xa1, 0x18, 0x01, 0x18, 0x5f, 0x18, 0x60, + 0xee, 0x3e, 0xc0, 0x51, 0x30, 0x62, 0xee, 0x4e, + 0xc8, 0x91, 0x18, 0x9f, 0x00, 0x21, 0xd1, 0xb8, + 0xd0, 0x01, 0x60, 0x06, 0x00, 0xef, 0xd0, 0x10, + 0xd0, 0x72, 0x60, 0x40, 0x01, 0x46, 0x82, 0x34, + 0x80, 0x3f, 0xc8, 0xdc, 0xc9, 0x1d, 0x81, 0x34, + 0x80, 0x3f, 0x00, 0xc6, 0x38, 0xe4, 0xee, 0x5e, + 0xea, 0x52, 0x28, 0xe5, 0x01, 0x46, 0x90, 0x6d, + 0x28, 0xc1, 0x00, 0xc6, 0x38, 0xe2, 0xf6, 0x6b, + 0xdb, 0x08, 0xf1, 0x16, 0xf1, 0x18, 0x00, 0x21, + 0xd1, 0xb4, 0x61, 0x86, 0xe2, 0x52, 0x01, 0xf7, + 0xd2, 0x19, 0xe0, 0x46, 0xd5, 0x00, 0xb5, 0x01, + 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, + 0x02, 0x31, 0xde, 0x13, 0x00, 0x27, 0xdc, 0xd8, + 0xf0, 0x4a, 0xdb, 0x09, 0x00, 0xe3, 0xd0, 0x1c, + 0x6b, 0x00, 0xda, 0xc1, 0x00, 0xe6, 0xd1, 0x98, + 0x70, 0x06, 0xb1, 0x84, 0x60, 0x06, 0xb1, 0x84, + 0x60, 0x06, 0x05, 0x9f, 0xe9, 0x9f, 0x08, 0x49, + 0xd1, 0x17, 0x46, 0x44, 0x00, 0x4d, 0x10, 0x43, + 0x26, 0x41, 0x08, 0xc9, 0x05, 0xcd, 0xb5, 0xc1, + 0xe5, 0xcc, 0xc0, 0x57, 0x15, 0xc6, 0x25, 0xc1, + 0x15, 0xa3, 0xf9, 0x9f, 0x08, 0x49, 0xd1, 0x0f, + 0x46, 0x44, 0x00, 0x4d, 0x10, 0x44, 0x26, 0x41, + 0x08, 0xc9, 0x06, 0x0d, 0xb6, 0x01, 0xe5, 0xcc, + 0xc0, 0x58, 0x16, 0x06, 0x26, 0x01, 0x08, 0x49, + 0x00, 0x4d, 0x10, 0x60, 0xe9, 0xa6, 0x0a, 0x09, + 0x00, 0x4d, 0xe1, 0x9f, 0x0c, 0x09, 0x90, 0x4d, + 0x10, 0x60, 0xe5, 0xa7, 0x00, 0x06, 0x05, 0x0d, + 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, 0xf9, 0xb3, + 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0xab, 0xb0, 0x7d, + 0xf9, 0xb8, 0x02, 0x34, 0xd4, 0x44, 0xe0, 0x46, + 0x00, 0xec, 0xd1, 0xa0, 0xd0, 0x40, 0x60, 0x46, + 0x02, 0x3c, 0xdc, 0x89, 0x00, 0xec, 0xd1, 0x80, + 0x70, 0x46, 0xb1, 0xbc, 0x70, 0x86, 0x30, 0x81, + 0xe8, 0x46, 0x15, 0x63, 0xe9, 0xc9, 0x05, 0x5e, + 0xe8, 0x46, 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, + 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, + 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0xcc, 0xc0, 0xcd, 0x01, 0xcd, 0x42, 0xcd, 0x83, + 0x00, 0xa0, 0xd0, 0x01, 0xa0, 0x38, 0xc8, 0x7f, + 0xc8, 0x06, 0xb1, 0xbe, 0xf3, 0x96, 0xc8, 0x80, + 0xf3, 0x92, 0x58, 0x80, 0xf3, 0x96, 0xc8, 0xc0, + 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x58, 0xc0, + 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, 0x59, 0x40, + 0xc0, 0x22, 0xc0, 0x65, 0xc0, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x59, 0x00, + 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x96, 0xc9, 0x80, + 0xf3, 0x92, 0x59, 0x40, 0xf3, 0x96, 0xc9, 0xc0, + 0xf3, 0x92, 0x58, 0x80, 0xc0, 0x23, 0xc0, 0x62, + 0xd0, 0x88, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, + 0xc8, 0xc0, 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, + 0xc8, 0x80, 0xf3, 0x92, 0x59, 0xc0, 0xc0, 0x24, + 0xc0, 0x67, 0xd0, 0x90, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x59, 0x80, + 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x96, 0xca, 0x00, + 0xf3, 0x92, 0x59, 0xc0, 0xf3, 0x96, 0xca, 0x40, + 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x25, 0xc0, 0x64, + 0xd0, 0x98, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, + 0xc9, 0x40, 0xf3, 0x92, 0x58, 0x80, 0xf3, 0x96, + 0xc9, 0x00, 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x23, + 0xc0, 0x64, 0xd0, 0x84, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, 0x59, 0x40, + 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x5a, 0x40, + 0xc0, 0x26, 0xc0, 0x69, 0xd0, 0xa0, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, + 0x5a, 0x00, 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, + 0x5a, 0x40, 0xf3, 0x96, 0xca, 0x80, 0xf3, 0x92, + 0x59, 0x80, 0xc0, 0x27, 0xc0, 0x66, 0xd0, 0xa8, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0xc0, + 0xf3, 0x92, 0x59, 0x00, 0xf3, 0x96, 0xc9, 0x80, + 0xf3, 0x92, 0x58, 0xc0, 0xc0, 0x22, 0xc0, 0x63, + 0xd0, 0x8c, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, + 0x59, 0x80, 0xc0, 0x25, 0xc0, 0x66, 0xd0, 0x94, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0x80, + 0xf3, 0x92, 0x59, 0xc0, 0xf3, 0x96, 0xc8, 0xc0, + 0xf3, 0x92, 0x5a, 0x80, 0xc0, 0x28, 0xc0, 0x6a, + 0xd0, 0xb0, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, + 0xc9, 0x40, 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x29, + 0xc0, 0x65, 0xd0, 0xb8, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x58, 0xc0, + 0xf3, 0x96, 0xca, 0x00, 0xf3, 0x92, 0x58, 0x80, + 0xc0, 0x24, 0xc0, 0x62, 0xd0, 0x9c, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x92, 0x5a, 0x00, 0xc0, 0x27, + 0xc0, 0x68, 0xd0, 0xa4, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xca, 0x80, 0xf3, 0x92, 0x59, 0x80, + 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, 0x5a, 0x40, + 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, 0x5a, 0x80, + 0xc0, 0x23, 0xc0, 0x6a, 0xd0, 0xac, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x26, + 0xc0, 0x65, 0xd0, 0xb4, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, 0x59, 0x00, + 0xc0, 0x29, 0xc0, 0x64, 0xd0, 0xbc, 0x20, 0x86, + 0xf3, 0x9a, 0xc0, 0x33, 0xc0, 0x74, 0xc0, 0xb5, + 0xc0, 0xf6, 0xd0, 0x40, 0x00, 0xa0, 0xd8, 0x00, + 0xa8, 0x38, 0x08, 0x45, 0x0a, 0x09, 0x00, 0x0d, + 0x0f, 0xc5, 0x50, 0x00, 0x0a, 0x09, 0x00, 0x0d, + 0x10, 0x08, 0x0f, 0xc5, 0x01, 0x46, 0x00, 0x06, + 0xa0, 0x7c, 0xa0, 0x3d, 0x60, 0x42, 0x00, 0xc6, + 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x14, 0x48, 0xd0, 0x81, 0x00, 0xef, 0xd1, 0x8c, + 0x71, 0x46, 0x11, 0x60, 0xfb, 0xb1, 0x60, 0x86, + 0x71, 0x46, 0x31, 0x42, 0xfb, 0xb1, 0x00, 0xec, + 0xd1, 0x0c, 0x74, 0x84, 0x00, 0x68, 0xd0, 0x80, + 0x70, 0x02, 0x10, 0x20, 0xfb, 0xc4, 0xc4, 0x82, + 0xc4, 0xd2, 0xb4, 0xfc, 0xda, 0x00, 0xda, 0x4f, + 0x0a, 0x09, 0x0f, 0xef, 0xd0, 0x3f, 0xb4, 0x7f, + 0xca, 0x29, 0x1a, 0x18, 0x4a, 0x00, 0x1a, 0x48, + 0x00, 0x8d, 0x2a, 0x42, 0xd0, 0x03, 0x40, 0x11, + 0xfb, 0xe3, 0xb4, 0x44, 0x00, 0xa0, 0xd0, 0xc0, + 0x30, 0xd3, 0xff, 0xe3, 0xb4, 0xfe, 0x01, 0x46, + 0x00, 0x06, 0xaa, 0x3d, 0xaa, 0x7c, 0x6a, 0x53, + 0x00, 0xc6, 0xb4, 0xfe, 0xb4, 0x7c, 0x1a, 0x61, + 0xfb, 0xc8, 0xb4, 0x43, 0x00, 0xef, 0xd0, 0x3f, + 0x40, 0x11, 0xeb, 0xf7, 0xb0, 0xc4, 0xe7, 0xf7, + 0xeb, 0xee, 0x61, 0x53, 0x64, 0x52, 0x64, 0xc4, + 0x00, 0x28, 0xd1, 0x24, 0x70, 0x04, 0x00, 0x21, + 0xd0, 0x80, 0x50, 0x02, 0x60, 0x04, 0x61, 0x46, + 0x0a, 0x09, 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, + 0x02, 0x31, 0xde, 0x13, 0x00, 0x27, 0xdc, 0xd8, + 0xf0, 0x4a, 0x01, 0xfa, 0xd4, 0x3d, 0x00, 0x25, + 0xdc, 0xd8, 0xf0, 0x4a, 0x09, 0x09, 0x01, 0xcd, + 0x11, 0xe8, 0xf9, 0xe2, 0x00, 0xe3, 0xd1, 0x9c, + 0x09, 0x09, 0x05, 0xcd, 0xb5, 0xc1, 0x09, 0x09, + 0x00, 0x4d, 0xb0, 0x41, 0x10, 0x46, 0x25, 0xc1, + 0x09, 0x09, 0x06, 0x0d, 0xb6, 0x01, 0x09, 0x09, + 0x00, 0x4d, 0x08, 0x89, 0xb0, 0x41, 0x10, 0x46, + 0x26, 0x01, 0x00, 0x8d, 0x08, 0x89, 0x10, 0x82, + 0xd0, 0x04, 0xc0, 0x55, 0x00, 0x40, 0x40, 0x40, + 0x05, 0x4d, 0x08, 0x49, 0x0b, 0x0d, 0xd1, 0x00, + 0x15, 0x63, 0xe9, 0xa2, 0xd1, 0x01, 0x55, 0x41, + 0xdb, 0x01, 0x4b, 0x15, 0xa1, 0x1b, 0x08, 0x89, + 0x00, 0x4d, 0x08, 0x49, 0x10, 0x41, 0xd1, 0x19, + 0x46, 0x44, 0x26, 0x41, 0x00, 0xcd, 0x08, 0x49, + 0x10, 0xc4, 0x00, 0x4d, 0x08, 0x49, 0x10, 0x41, + 0x20, 0x81, 0xa0, 0x89, 0x00, 0x4d, 0x10, 0x43, + 0x20, 0xc1, 0xa0, 0xe8, 0x08, 0x49, 0x00, 0x4d, + 0x1b, 0x03, 0x5b, 0x01, 0xbb, 0x3f, 0x6b, 0x06, + 0x08, 0x49, 0xb1, 0xbc, 0x00, 0x4d, 0x60, 0x46, + 0x08, 0x49, 0xb1, 0xbc, 0x0a, 0xcd, 0x1a, 0xc2, + 0x4a, 0xd9, 0x1a, 0xde, 0x6a, 0xc6, 0x08, 0x49, + 0xb1, 0xbc, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, + 0xea, 0x3e, 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x08, 0xc9, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x09, 0xc9, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0x0a, 0x09, 0x00, 0x4d, + 0x60, 0x46, 0xe2, 0x3e, 0x11, 0xe3, 0xfa, 0x00, + 0x00, 0xe7, 0xd0, 0xc0, 0xd0, 0x84, 0xb0, 0x81, + 0xe6, 0x3e, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x43, + 0xb0, 0xfc, 0x10, 0x60, 0xe9, 0xe7, 0x10, 0xa3, + 0xf9, 0xf4, 0x00, 0xe8, 0xd1, 0x80, 0xe1, 0xf8, + 0x10, 0xa2, 0xf9, 0xfa, 0x00, 0xe9, 0xd1, 0x80, + 0xf2, 0xb0, 0xe1, 0xe7, 0xd2, 0x3f, 0x0a, 0x09, + 0x00, 0x4d, 0xb2, 0x01, 0xf5, 0xfb, 0xe1, 0xe7, + 0x11, 0xe7, 0xfa, 0x3e, 0xd4, 0x01, 0x00, 0xe1, + 0xd0, 0x24, 0x70, 0x00, 0x10, 0x21, 0xea, 0x0d, + 0x15, 0x63, 0xfa, 0x0d, 0xd4, 0x03, 0x44, 0x2c, + 0xb4, 0x3f, 0x00, 0xe6, 0xd1, 0x90, 0x0b, 0x09, + 0x00, 0x4d, 0x09, 0x49, 0x10, 0x45, 0x00, 0x8d, + 0x50, 0x81, 0xd0, 0x40, 0x10, 0x87, 0x10, 0x98, + 0x30, 0x42, 0xf2, 0x61, 0x60, 0x46, 0xb1, 0xbc, + 0x0b, 0x09, 0x00, 0x0d, 0x09, 0x49, 0x00, 0x0d, + 0xb4, 0x01, 0xfa, 0x0f, 0x00, 0xe6, 0xd0, 0x18, + 0x30, 0x06, 0xe6, 0x29, 0x60, 0x46, 0xb1, 0xbc, + 0xe2, 0x22, 0x00, 0xe0, 0xd1, 0x88, 0x70, 0x46, + 0x10, 0x63, 0xea, 0x39, 0x10, 0x64, 0xea, 0x39, + 0x00, 0xe6, 0xd1, 0x90, 0xd0, 0x00, 0x60, 0x06, + 0xb1, 0xbc, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, + 0xe2, 0x3e, 0x00, 0xef, 0xd1, 0x84, 0x70, 0x46, + 0x10, 0x60, 0xfa, 0x30, 0x0c, 0x09, 0x90, 0x4d, + 0x10, 0x60, 0xe6, 0x3f, 0x00, 0x06, 0x05, 0x0d, + 0x00, 0x22, 0xd0, 0x72, 0x30, 0x54, 0xfa, 0x4b, + 0xd4, 0x40, 0xf3, 0xb0, 0xe2, 0x43, 0xb0, 0x7d, + 0xe9, 0x7a, 0x00, 0xec, 0xd1, 0xa0, 0xd0, 0x40, + 0x60, 0x46, 0x02, 0x3c, 0xdc, 0x89, 0x00, 0xec, + 0xd1, 0x80, 0x70, 0x46, 0xb1, 0xbc, 0x70, 0x86, + 0x30, 0x81, 0xe8, 0x46, 0x15, 0x63, 0xea, 0x5e, + 0x05, 0x5e, 0xe8, 0x46, 0x01, 0x73, 0xd4, 0x3d, + 0xe0, 0x46, 0x00, 0xe0, 0xd0, 0x00, 0x70, 0xc0, + 0x10, 0xc1, 0x00, 0xe0, 0xd0, 0x08, 0x70, 0x00, + 0x10, 0x23, 0xea, 0x75, 0xc0, 0x83, 0x10, 0x9d, + 0x30, 0xc2, 0x10, 0x9f, 0x30, 0xc2, 0x00, 0xef, + 0xd0, 0xac, 0x70, 0x82, 0x10, 0xa3, 0xea, 0x75, + 0x10, 0xc1, 0xc0, 0x83, 0x30, 0x81, 0xe6, 0x7e, + 0xc0, 0x83, 0x20, 0x81, 0xf6, 0x7f, 0xd0, 0x40, + 0x30, 0x43, 0x0f, 0xc5, 0xc0, 0x43, 0x0f, 0xc5, + 0x00, 0xed, 0xd1, 0xa4, 0x72, 0x86, 0x15, 0xa3, + 0xee, 0x23, 0x15, 0xa1, 0xe6, 0x23, 0x08, 0x20, + 0xd0, 0x00, 0x5f, 0x00, 0xd8, 0xc4, 0x15, 0x63, + 0xe9, 0x7e, 0x48, 0xd5, 0x18, 0xde, 0x18, 0xe0, + 0xe9, 0xc2, 0x00, 0xed, 0xd1, 0xb4, 0x79, 0xc6, + 0x19, 0xe0, 0xe9, 0x8c, 0x00, 0xed, 0xd0, 0x3a, + 0x79, 0xc6, 0x69, 0xc0, 0xd9, 0xc0, 0x69, 0xc6, + 0x00, 0xed, 0xd0, 0x38, 0x79, 0x40, 0x19, 0x60, + 0xe9, 0x98, 0x00, 0x28, 0xd0, 0x24, 0x70, 0x40, + 0x02, 0x20, 0xd0, 0x80, 0x50, 0x42, 0x60, 0x40, + 0x15, 0xa3, 0xe9, 0x9f, 0x00, 0xec, 0xd1, 0xb8, + 0x79, 0xc6, 0x69, 0x46, 0xc9, 0x67, 0x00, 0xec, + 0xd9, 0xb4, 0x70, 0x66, 0x00, 0xec, 0xd1, 0xbc, + 0x70, 0x06, 0x10, 0x20, 0xed, 0xbe, 0x10, 0x60, + 0xe9, 0xc1, 0x00, 0xe0, 0xda, 0xa8, 0x7a, 0xaa, + 0xc0, 0x2a, 0x10, 0x1f, 0x00, 0x22, 0xd0, 0xa0, + 0x70, 0x82, 0x20, 0x6a, 0x00, 0x9f, 0xe9, 0xb5, + 0x20, 0x40, 0x19, 0x60, 0xf9, 0xb8, 0xc9, 0x41, + 0xb0, 0x48, 0x30, 0x65, 0xf5, 0xbd, 0xb0, 0x70, + 0xed, 0xbe, 0xd9, 0x40, 0x00, 0xed, 0xd1, 0xbc, + 0x69, 0x46, 0x69, 0x66, 0x12, 0xa4, 0xea, 0x21, + 0x00, 0xec, 0xd1, 0xbc, 0x73, 0xc6, 0x15, 0xa3, + 0xe9, 0xdf, 0x33, 0xe3, 0xe5, 0xd3, 0xed, 0xd2, + 0x63, 0xc6, 0x00, 0x21, 0xd1, 0xa8, 0x63, 0xc6, + 0x00, 0xed, 0xd1, 0xa0, 0x63, 0xc6, 0x15, 0xa1, + 0xf9, 0xdc, 0x12, 0xa3, 0xe5, 0xe3, 0xd3, 0xc2, + 0x00, 0xec, 0xd1, 0xbc, 0x63, 0xc6, 0xe1, 0xe3, + 0x12, 0xa3, 0xea, 0x21, 0xe1, 0xe3, 0x12, 0xa2, + 0xf6, 0x21, 0x13, 0xe0, 0xfa, 0x21, 0x00, 0xee, + 0xd1, 0x8c, 0x78, 0x06, 0xb1, 0xbc, 0x78, 0x46, + 0xb1, 0xbc, 0x78, 0x86, 0xd1, 0x88, 0x72, 0x46, + 0xd1, 0x84, 0x73, 0x06, 0x13, 0x20, 0xf9, 0xe3, + 0x00, 0x64, 0xd1, 0xa0, 0x70, 0x46, 0xd0, 0xa2, + 0x30, 0x81, 0xe9, 0xff, 0x10, 0x70, 0xea, 0x11, + 0x10, 0x6d, 0xea, 0x14, 0x10, 0x76, 0xea, 0x19, + 0x10, 0x7a, 0xea, 0x28, 0xe2, 0x3b, 0x18, 0xe0, + 0xea, 0x3b, 0x00, 0xed, 0xd1, 0x80, 0x70, 0x86, + 0xb0, 0x81, 0xd0, 0x3f, 0x40, 0x02, 0x10, 0x20, + 0xea, 0x0c, 0x60, 0x86, 0xf3, 0x8a, 0xe1, 0xe3, + 0xc0, 0x02, 0x10, 0x1a, 0x50, 0x80, 0x60, 0x86, + 0xe2, 0x3b, 0x15, 0xa3, 0xea, 0x21, 0xe2, 0xe9, + 0xd2, 0x80, 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, + 0xe3, 0x0c, 0x00, 0xed, 0xd1, 0x88, 0xd0, 0x60, + 0x70, 0x06, 0x50, 0x40, 0x60, 0x46, 0x15, 0xa3, + 0xfb, 0x0c, 0xd5, 0x84, 0xe3, 0x0c, 0xd5, 0x00, + 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, + 0x00, 0xed, 0xd1, 0x88, 0xd0, 0x60, 0x70, 0x06, + 0x50, 0x40, 0x60, 0x46, 0x15, 0xa2, 0xe7, 0x0c, + 0xee, 0x21, 0x00, 0x21, 0xd1, 0x8c, 0x18, 0xe0, + 0xfa, 0x39, 0x70, 0x46, 0x10, 0x61, 0xea, 0x70, + 0xe2, 0x21, 0x65, 0x86, 0xe2, 0x21, 0x18, 0xe0, + 0xea, 0x70, 0xd1, 0x80, 0x73, 0x06, 0x15, 0xa2, + 0xee, 0x68, 0x00, 0x22, 0xd1, 0x80, 0x70, 0x46, + 0x6b, 0x06, 0xcb, 0x01, 0xb1, 0xb4, 0x70, 0x46, + 0x6a, 0xc6, 0xca, 0xc1, 0x00, 0x65, 0xd1, 0x98, + 0x70, 0x46, 0x10, 0x61, 0xfa, 0x50, 0x02, 0x41, + 0xc3, 0x21, 0xc7, 0xe0, 0x02, 0x50, 0xea, 0x56, + 0xc3, 0x20, 0xc7, 0xe1, 0xd1, 0x88, 0xd0, 0x01, + 0x02, 0x40, 0x62, 0x46, 0x0f, 0xef, 0xd0, 0x7f, + 0x30, 0x6f, 0xfa, 0x5f, 0xc3, 0x20, 0xc7, 0x4c, + 0xd0, 0x00, 0x00, 0x65, 0xd1, 0x98, 0x70, 0x46, + 0x60, 0x06, 0xb0, 0x41, 0x43, 0x01, 0xe2, 0x70, + 0xc3, 0x22, 0xc7, 0xcc, 0xc7, 0x60, 0xc7, 0xa1, + 0x02, 0x50, 0xea, 0x70, 0xc7, 0x61, 0xc7, 0xa0, + 0xdb, 0x80, 0xd1, 0x00, 0x00, 0xef, 0xd1, 0xa8, + 0x70, 0x46, 0x10, 0x60, 0xfa, 0x7a, 0x00, 0xe0, + 0xd1, 0x88, 0x70, 0x46, 0x00, 0x22, 0xd1, 0xb0, + 0x70, 0x86, 0x30, 0x81, 0xea, 0x82, 0x60, 0x46, + 0xd0, 0x20, 0xf3, 0x06, 0x10, 0x63, 0xea, 0x87, + 0x10, 0x64, 0xea, 0x87, 0xe2, 0x95, 0x00, 0xef, + 0xd1, 0x6c, 0x71, 0x45, 0xc0, 0x05, 0x30, 0x01, + 0xf6, 0x95, 0xdb, 0x82, 0xd1, 0x01, 0x10, 0x63, + 0xea, 0x95, 0xd1, 0x02, 0x11, 0x62, 0xea, 0x95, + 0xd1, 0x03, 0xd1, 0x8c, 0x61, 0x06, 0xdb, 0x40, + 0x00, 0xe0, 0xd0, 0x00, 0x71, 0x00, 0xc0, 0x84, + 0x10, 0x9c, 0xb0, 0x96, 0xfa, 0xa0, 0xb1, 0x38, + 0xb0, 0x96, 0xfa, 0xa3, 0xb1, 0x30, 0x00, 0x29, + 0xd1, 0x84, 0x00, 0x22, 0xd0, 0x74, 0x70, 0x86, + 0x70, 0xc1, 0x61, 0x06, 0x30, 0xc2, 0xea, 0xae, + 0x60, 0x81, 0xdb, 0x41, 0xb0, 0x3c, 0xb1, 0xbc, + 0xb0, 0x7c, 0x71, 0x00, 0x70, 0x86, 0x70, 0xc1, + 0x61, 0x06, 0x30, 0xc2, 0xea, 0xb9, 0x60, 0x81, + 0xdb, 0x41, 0x00, 0xee, 0xd1, 0xb4, 0x70, 0x06, + 0xb1, 0xbc, 0x70, 0x46, 0x30, 0x40, 0xea, 0xc2, + 0x60, 0x06, 0xdb, 0x41, 0x00, 0x24, 0xd0, 0x60, + 0x30, 0x81, 0xea, 0xc7, 0x30, 0x81, 0x50, 0x02, + 0xea, 0xca, 0xd0, 0x01, 0x00, 0x22, 0xd1, 0xbc, + 0x70, 0x86, 0x30, 0x80, 0xea, 0xd2, 0x60, 0x06, + 0xd0, 0x10, 0xf3, 0x06, 0x00, 0x22, 0xd1, 0xa4, + 0x71, 0x06, 0xd0, 0x01, 0x41, 0x00, 0x5b, 0x44, + 0x5b, 0x6e, 0x6b, 0x46, 0x00, 0x28, 0xd0, 0x70, + 0x70, 0x41, 0x10, 0x62, 0xfa, 0xe6, 0xd1, 0x84, + 0x70, 0x06, 0x10, 0x20, 0xfa, 0xdf, 0x00, 0x22, + 0xd0, 0x00, 0xf3, 0x06, 0x02, 0x7d, 0xde, 0x68, + 0xe0, 0x46, 0x00, 0xed, 0xd1, 0x88, 0x71, 0x06, + 0x01, 0x1f, 0xfa, 0xfd, 0xd0, 0x41, 0x41, 0x01, + 0xd0, 0x62, 0x00, 0x65, 0xd0, 0x30, 0x70, 0x00, + 0x10, 0x21, 0xea, 0xfa, 0xee, 0xf9, 0x1a, 0xe1, + 0xfa, 0xfa, 0xd0, 0x52, 0x51, 0x01, 0x61, 0x06, + 0xe3, 0x0c, 0x18, 0xe0, 0xea, 0x70, 0xc7, 0x60, + 0xc7, 0xe1, 0x02, 0x50, 0xea, 0x70, 0xc7, 0x61, + 0xc7, 0xe0, 0xe2, 0x70, 0x00, 0x28, 0xdc, 0xa4, + 0x7c, 0x72, 0x5c, 0x40, 0x6c, 0x72, 0x0f, 0xc5, + 0x18, 0xe0, 0xeb, 0x82, 0xd9, 0x0d, 0x00, 0xee, + 0xd1, 0xa4, 0x70, 0x06, 0x10, 0x21, 0xfb, 0x7f, + 0xd9, 0x0c, 0x90, 0x06, 0x00, 0x10, 0xeb, 0x7f, + 0x00, 0x21, 0xd1, 0x88, 0x7a, 0x06, 0x1a, 0x20, + 0xeb, 0x7f, 0xd9, 0x00, 0x00, 0xed, 0xd1, 0xbc, + 0x79, 0x46, 0x19, 0x60, 0xeb, 0x7f, 0x39, 0x68, + 0xc0, 0xe5, 0xc0, 0x25, 0x10, 0x13, 0xb0, 0x0f, + 0xef, 0x7f, 0xb0, 0x22, 0xe7, 0x7f, 0x00, 0xe0, + 0xd1, 0xa8, 0x71, 0x46, 0x11, 0x5f, 0x29, 0x45, + 0x00, 0x22, 0xd0, 0x18, 0x00, 0x22, 0xd4, 0x54, + 0x00, 0x22, 0xd0, 0x9c, 0x70, 0x00, 0x74, 0x51, + 0x70, 0x42, 0x34, 0x40, 0xe7, 0x3c, 0xd0, 0x40, + 0x00, 0x22, 0xd4, 0x50, 0x74, 0x51, 0x34, 0x40, + 0xef, 0x42, 0x20, 0x45, 0x60, 0x42, 0x39, 0x41, + 0x19, 0x60, 0xf7, 0x5e, 0x00, 0x65, 0xd1, 0xa8, + 0x7a, 0x86, 0x29, 0x6a, 0x19, 0x59, 0xb9, 0x7e, + 0xf7, 0x75, 0x15, 0xa3, 0xf7, 0x57, 0x00, 0xed, + 0xd1, 0xac, 0x70, 0x06, 0x00, 0xed, 0xd1, 0xb0, + 0x70, 0x46, 0x30, 0x01, 0xfb, 0x7f, 0x00, 0x65, + 0xd1, 0x84, 0x70, 0x46, 0xb0, 0x7f, 0x60, 0x46, + 0xd5, 0x84, 0xe3, 0x7f, 0x11, 0x41, 0xd0, 0x4a, + 0x00, 0xed, 0xd1, 0xa0, 0x74, 0x46, 0xd0, 0x00, + 0x60, 0x06, 0x30, 0xc5, 0x39, 0x45, 0xe7, 0x6e, + 0x14, 0x60, 0xeb, 0x6b, 0xf3, 0x85, 0xb0, 0x41, + 0xef, 0x65, 0xe3, 0x71, 0x00, 0x66, 0xd1, 0xa0, + 0x60, 0xc6, 0x15, 0xa3, 0xeb, 0x7f, 0xf3, 0x85, + 0xe3, 0x7f, 0xd9, 0x01, 0x00, 0x66, 0xd1, 0xa0, + 0x70, 0x06, 0x30, 0x03, 0xe7, 0x7e, 0x10, 0x1d, + 0x10, 0x3b, 0xe7, 0x7f, 0x60, 0xc6, 0x00, 0x66, + 0xd1, 0xa4, 0x69, 0x06, 0x15, 0xa4, 0xea, 0x23, + 0xe2, 0x3b, 0x00, 0x65, 0xdd, 0x08, 0x7c, 0xf4, + 0xbc, 0xff, 0x6c, 0xf4, 0x00, 0xef, 0xdd, 0x10, + 0x7c, 0xf4, 0xbc, 0xfe, 0x6c, 0xf4, 0xc0, 0x3f, + 0xf1, 0x18, 0xf1, 0x16, 0xf1, 0x18, 0x00, 0x05, + 0x08, 0x20, 0xd0, 0x40, 0x5f, 0x01, 0x15, 0x63, + 0xe9, 0x77, 0x05, 0x5e, 0xeb, 0x08, 0x00, 0x22, + 0xd1, 0xa0, 0x6b, 0x06, 0x00, 0x22, 0xd1, 0xa8, + 0x6b, 0xc6, 0x00, 0x22, 0xd1, 0xac, 0x6a, 0xc6, + 0x00, 0xee, 0xd0, 0x0c, 0x00, 0xe6, 0xd1, 0x9c, + 0x70, 0x40, 0x30, 0x5f, 0xe9, 0x8d, 0xb0, 0x3c, + 0xb1, 0xb4, 0x70, 0x40, 0x30, 0x5f, 0xe9, 0x8d, + 0xb1, 0xb4, 0x00, 0xe6, 0xd0, 0x10, 0xd0, 0x83, + 0x70, 0x40, 0x60, 0x46, 0xb0, 0x3c, 0xb1, 0xbc, + 0xb0, 0x81, 0xed, 0x90, 0x00, 0xee, 0xd0, 0x0c, + 0x00, 0xe6, 0xd1, 0x9c, 0x70, 0x40, 0x30, 0x4c, + 0xe9, 0xa3, 0xb0, 0x3c, 0xb1, 0xb4, 0x70, 0x40, + 0x30, 0x4c, 0xe9, 0xa3, 0xb1, 0xb4, 0x00, 0xe6, + 0xd0, 0x00, 0x61, 0x80, 0x00, 0x21, 0xd1, 0xb4, + 0x70, 0x06, 0x10, 0x20, 0xe9, 0xae, 0xd0, 0x00, + 0x60, 0x06, 0xf1, 0x18, 0x00, 0x21, 0xd1, 0x8c, + 0x70, 0x46, 0x65, 0x86, 0xde, 0xc0, 0x00, 0xee, + 0xd0, 0x20, 0x70, 0x00, 0x10, 0x22, 0xfd, 0xb9, + 0xde, 0xc2, 0x00, 0x21, 0xd0, 0x04, 0x70, 0x00, + 0x10, 0x21, 0xe9, 0xc0, 0x15, 0xa3, 0xe9, 0xdc, + 0xd0, 0x02, 0x4c, 0x00, 0x10, 0x63, 0xe9, 0xc5, + 0xcc, 0x3b, 0xd0, 0x04, 0x63, 0x00, 0xd0, 0x00, + 0x70, 0x00, 0x30, 0x1f, 0xfb, 0x08, 0xd0, 0x18, + 0x70, 0x00, 0x10, 0x20, 0xed, 0xc7, 0xd0, 0x04, + 0x70, 0x80, 0x10, 0xa0, 0xeb, 0x08, 0xf1, 0x16, + 0x00, 0x21, 0xd0, 0x9a, 0xc0, 0x39, 0x30, 0x1f, + 0x10, 0x18, 0x30, 0x02, 0xfd, 0xcf, 0xe3, 0x08, + 0x00, 0xe0, 0xd9, 0x04, 0x79, 0x24, 0xb9, 0x38, + 0x19, 0x1c, 0xdc, 0x88, 0x4c, 0xac, 0xd0, 0x02, + 0x40, 0x2c, 0x10, 0x02, 0x0c, 0x80, 0x10, 0x63, + 0xea, 0x70, 0x15, 0x63, 0xf9, 0xec, 0xf1, 0x18, + 0x00, 0xef, 0xdc, 0x00, 0x7c, 0x30, 0x00, 0x24, + 0xd0, 0x30, 0x70, 0x00, 0x10, 0x21, 0xf9, 0xf6, + 0xbc, 0x3b, 0xe1, 0xfd, 0x10, 0x22, 0xf9, 0xfa, + 0xbc, 0x38, 0xe1, 0xfd, 0x10, 0x23, 0xf9, 0xfd, + 0xbc, 0x3c, 0x1e, 0xe0, 0xea, 0x03, 0x15, 0x63, + 0xfa, 0x02, 0xbe, 0xfc, 0xdc, 0x12, 0x0e, 0xde, + 0xfa, 0x09, 0xc0, 0x24, 0x30, 0x30, 0xf6, 0x09, + 0x2c, 0x00, 0xd0, 0x2c, 0x6c, 0x00, 0x1e, 0xe0, + 0xea, 0x0f, 0xcc, 0x24, 0x1c, 0x1f, 0xd9, 0x40, + 0x06, 0x50, 0xea, 0x22, 0xc0, 0x24, 0xb0, 0x12, + 0xfe, 0x22, 0xd9, 0x74, 0x79, 0x65, 0x19, 0x5f, + 0x30, 0x25, 0xee, 0x1b, 0x29, 0x40, 0x19, 0x5f, + 0x19, 0x41, 0xc0, 0x25, 0x20, 0x30, 0x30, 0x24, + 0xe6, 0x22, 0x3c, 0x00, 0xd0, 0x38, 0x69, 0x40, + 0x1c, 0x05, 0xbc, 0x38, 0x3c, 0x32, 0x5c, 0x3b, + 0xbc, 0x3f, 0xd8, 0xec, 0x78, 0xe3, 0xc0, 0xa3, + 0x10, 0xb2, 0xf6, 0x2f, 0xd0, 0x92, 0x02, 0xe4, + 0xd8, 0x00, 0xd0, 0xc0, 0x20, 0xe0, 0xb0, 0x81, + 0xee, 0x32, 0xd0, 0x30, 0x60, 0xc0, 0x00, 0xac, + 0xd0, 0x20, 0xc0, 0xc0, 0xd8, 0x40, 0xc1, 0x23, + 0xd4, 0x64, 0x34, 0x63, 0xdc, 0x40, 0x0c, 0x1f, + 0xfa, 0x5b, 0xc0, 0x65, 0xb0, 0x41, 0xe6, 0x47, + 0x68, 0x40, 0xb0, 0x3c, 0xe2, 0x42, 0xc0, 0xc0, + 0x34, 0x65, 0xdc, 0x48, 0x4c, 0x70, 0x1c, 0x5f, + 0x20, 0xf1, 0x15, 0x63, 0xfa, 0x5c, 0xf2, 0x54, + 0xc1, 0x11, 0xc0, 0x83, 0xf2, 0xa5, 0xe2, 0x6f, + 0xb1, 0x01, 0xe6, 0x5a, 0x68, 0x40, 0x28, 0x60, + 0xb0, 0x3c, 0xe2, 0x54, 0x0f, 0xc5, 0xd9, 0x40, + 0xb1, 0x12, 0x11, 0x01, 0x21, 0x25, 0xf2, 0x54, + 0xc1, 0x11, 0xb1, 0x01, 0xe6, 0x6f, 0x20, 0x31, + 0x68, 0x40, 0x30, 0x31, 0xb0, 0x3c, 0x28, 0x60, + 0x70, 0x43, 0x30, 0x31, 0x60, 0x40, 0x20, 0x31, + 0xb0, 0x3c, 0xb0, 0xf8, 0xe2, 0x61, 0xe2, 0xf7, + 0xd8, 0xec, 0x78, 0xe3, 0x00, 0xa8, 0xd0, 0x80, + 0x00, 0xa8, 0xd1, 0x44, 0x00, 0xac, 0xd0, 0x20, + 0xc0, 0xc0, 0x0c, 0x1f, 0xfa, 0xb3, 0xd9, 0x78, + 0x79, 0x65, 0x39, 0x25, 0x19, 0x5f, 0xc9, 0xa5, + 0x19, 0x83, 0x20, 0x26, 0x20, 0xe6, 0x20, 0xa6, + 0x21, 0x66, 0xc1, 0x23, 0xc0, 0x64, 0x10, 0x5f, + 0x10, 0x9d, 0x20, 0x81, 0x31, 0x01, 0x30, 0x44, + 0xf6, 0x8e, 0x21, 0x01, 0x30, 0x84, 0x10, 0x83, + 0xc4, 0x64, 0x34, 0x63, 0xdc, 0x48, 0x4c, 0x70, + 0x1c, 0x5f, 0x15, 0x63, 0xfa, 0xc3, 0x20, 0xb1, + 0xf2, 0xa5, 0xc1, 0x24, 0x11, 0x1f, 0xc0, 0x85, + 0x30, 0xb1, 0xf2, 0xa5, 0xc1, 0x11, 0xc0, 0x83, + 0x0c, 0x9d, 0xfa, 0xa3, 0xb0, 0xbc, 0xf2, 0xa5, + 0xe2, 0xec, 0xb1, 0x01, 0xe6, 0x5a, 0x70, 0x42, + 0xb0, 0xb8, 0x60, 0x40, 0xb0, 0x3c, 0xe2, 0xa5, + 0xb1, 0x01, 0xe6, 0x5a, 0x70, 0x42, 0xb0, 0xb8, + 0x60, 0x40, 0xb0, 0x38, 0xe2, 0xac, 0x00, 0xac, + 0xd0, 0x24, 0xc1, 0x23, 0xb1, 0x12, 0xf2, 0xac, + 0xd1, 0x24, 0x31, 0x23, 0x00, 0xa8, 0xd0, 0x84, + 0xf2, 0xac, 0xd1, 0x12, 0x00, 0xa8, 0xd0, 0x84, + 0xc0, 0x03, 0xf2, 0xac, 0xe2, 0xec, 0xd8, 0x82, + 0x48, 0x95, 0x18, 0x81, 0xb1, 0x01, 0xe6, 0xd9, + 0x20, 0xb1, 0x70, 0x42, 0x30, 0xb1, 0x20, 0x22, + 0x60, 0x40, 0x30, 0x22, 0xb0, 0xbc, 0xb0, 0x3c, + 0x30, 0xb1, 0x70, 0x42, 0x20, 0xb1, 0x30, 0x22, + 0x60, 0x40, 0x20, 0x22, 0xb0, 0xbc, 0xb0, 0x3c, + 0xe2, 0xc6, 0xc1, 0x11, 0xc0, 0x85, 0x30, 0xb1, + 0x20, 0xe2, 0xb1, 0x01, 0xe6, 0xec, 0x70, 0x42, + 0xb0, 0xb8, 0x20, 0x22, 0x60, 0x40, 0x30, 0x22, + 0xb0, 0x3c, 0x70, 0x43, 0xb0, 0xf8, 0x30, 0x22, + 0x60, 0x40, 0x20, 0x22, 0xb0, 0x3c, 0xe2, 0xdd, + 0xd0, 0x08, 0x5c, 0x00, 0x3c, 0x32, 0xd0, 0x04, + 0x40, 0x30, 0x3c, 0x00, 0x15, 0x63, 0xfa, 0xf7, + 0x1e, 0xe0, 0xea, 0xf7, 0xbc, 0x3c, 0x00, 0xac, + 0xd0, 0xa0, 0x00, 0xa8, 0xd0, 0x00, 0x00, 0x20, + 0xd1, 0x24, 0x70, 0x42, 0xb0, 0xbc, 0x60, 0x40, + 0xb0, 0x3c, 0xb1, 0x01, 0xee, 0xfd, 0xd0, 0x30, + 0x30, 0x30, 0xef, 0x03, 0xd0, 0x04, 0x63, 0x00, + 0x08, 0x20, 0xd0, 0x40, 0x3f, 0x01, 0x02, 0xba, + 0xde, 0x3c, 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, + 0x01, 0x46, 0xd0, 0x08, 0x94, 0x89, 0xd0, 0x8c, + 0x44, 0x82, 0x14, 0x9e, 0x30, 0x12, 0xd0, 0x88, + 0x10, 0x80, 0x00, 0xe8, 0xd1, 0x80, 0x70, 0xc6, + 0x00, 0x06, 0xa0, 0xbd, 0xa0, 0xfc, 0x80, 0x3f, + 0xb1, 0xbe, 0x60, 0xc6, 0x00, 0x06, 0x80, 0xa9, + 0x80, 0x3f, 0x80, 0x2a, 0x80, 0x3f, 0x00, 0x21, + 0xd0, 0x3c, 0x00, 0x0a, 0xb1, 0x82, 0xd0, 0x6b, + 0x70, 0x46, 0x00, 0x06, 0x80, 0x07, 0x01, 0x20, + 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, + 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, + 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x29, + 0x80, 0x2b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, + 0xa0, 0x27, 0x90, 0x09, 0xd0, 0x41, 0x40, 0x01, + 0xd0, 0x44, 0x40, 0x70, 0x20, 0x01, 0xa0, 0x27, + 0x80, 0x3f, 0x00, 0xc6, 0x15, 0x63, 0xe9, 0xae, + 0x05, 0x5e, 0xe9, 0xbe, 0x00, 0xe0, 0xd0, 0x40, + 0x70, 0x81, 0x10, 0x9c, 0xb0, 0x96, 0xf9, 0xb7, + 0x00, 0x21, 0xd0, 0x40, 0xe1, 0xbb, 0xb0, 0x96, + 0xf9, 0xbe, 0x00, 0x22, 0xd0, 0x40, 0x27, 0xc1, + 0x27, 0x41, 0x27, 0x81, 0x90, 0x83, 0x00, 0x64, + 0xd0, 0x10, 0x60, 0x80, 0x01, 0x46, 0x82, 0x34, + 0x80, 0x3f, 0x00, 0x64, 0xd0, 0x14, 0x67, 0x40, + 0x80, 0x34, 0x80, 0x3f, 0x00, 0xc6, 0x90, 0xae, + 0x00, 0x64, 0xd0, 0x18, 0x60, 0x80, 0x90, 0xa6, + 0x00, 0x64, 0xd0, 0x1c, 0x60, 0x80, 0x15, 0x63, + 0xe9, 0xe3, 0x0c, 0x1f, 0xe9, 0xe3, 0x05, 0x50, + 0xf9, 0xe3, 0x15, 0xa3, 0xf9, 0xe3, 0x90, 0x4d, + 0x10, 0x60, 0xe5, 0xdb, 0x00, 0x06, 0x05, 0x0d, + 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x15, 0xa3, + 0xf9, 0xfb, 0x00, 0x21, 0xd0, 0x04, 0x70, 0x00, + 0x10, 0x21, 0xe9, 0xfb, 0xd0, 0x38, 0x70, 0x00, + 0x15, 0x63, 0xe9, 0xef, 0x10, 0x1f, 0x15, 0x21, + 0xe5, 0xe0, 0xd0, 0x64, 0x30, 0x54, 0xe5, 0xe0, + 0xc0, 0x40, 0xb0, 0x7f, 0x30, 0x54, 0xe9, 0xfb, + 0x0c, 0x09, 0x05, 0x0d, 0xe1, 0xef, 0xc0, 0x5f, + 0x10, 0x58, 0x10, 0x48, 0x00, 0xee, 0xd0, 0x8c, + 0xd0, 0xc3, 0x70, 0x02, 0x30, 0x01, 0xea, 0x10, + 0xb0, 0xbc, 0xb0, 0xc1, 0xee, 0x01, 0x00, 0x26, + 0xd0, 0x20, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, + 0x15, 0xa3, 0xea, 0x0f, 0xb0, 0x88, 0x77, 0xc2, + 0x80, 0x07, 0x09, 0x49, 0xd4, 0x00, 0xd4, 0x40, + 0xd4, 0x80, 0xd4, 0xc0, 0x00, 0x4d, 0xa0, 0x6c, + 0xd3, 0x80, 0xd0, 0xa1, 0x00, 0x88, 0xd0, 0xa9, + 0x00, 0x4d, 0x00, 0x50, 0xfa, 0x1a, 0x0c, 0x49, + 0x00, 0x8d, 0xc0, 0x42, 0x10, 0x60, 0xea, 0x2a, + 0xb0, 0x5e, 0xb0, 0x43, 0xfe, 0x34, 0xd0, 0x61, + 0x23, 0x81, 0xe2, 0x1f, 0x0c, 0x09, 0x05, 0x0d, + 0x15, 0x20, 0xfe, 0x31, 0xd0, 0x65, 0x30, 0x54, + 0xee, 0x10, 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, + 0xc6, 0xd4, 0xb6, 0xc1, 0xe6, 0x31, 0xd0, 0x64, + 0x30, 0x5b, 0xfe, 0x31, 0xd7, 0x00, 0xb7, 0x01, + 0xd3, 0x81, 0x00, 0x27, 0xd0, 0x10, 0xd0, 0x81, + 0x60, 0x80, 0x15, 0x63, 0xfa, 0x54, 0x00, 0x22, + 0xdc, 0xd8, 0x03, 0xf8, 0xd0, 0x10, 0xf0, 0x4a, + 0x15, 0xa3, 0xfa, 0x51, 0x02, 0xf7, 0xdc, 0x26, + 0x0c, 0x10, 0xf8, 0x46, 0x02, 0xfc, 0xd8, 0x22, + 0xe0, 0x46, 0x02, 0xf2, 0xd6, 0x2b, 0xe0, 0x46, + 0x00, 0x22, 0xdc, 0xd8, 0x03, 0xfa, 0xd0, 0x10, + 0xf0, 0x4a, 0x03, 0x35, 0xda, 0x20, 0x15, 0xa3, + 0xe8, 0x46, 0x03, 0x30, 0xdc, 0x27, 0xe0, 0x46, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xe0, 0xe1, 0xec, 0xe2, 0x12, + 0xe2, 0x14, 0xe1, 0xc7, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x8d, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, + 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x64, 0x30, 0x5b, 0xfc, 0x11, + 0xc0, 0x39, 0x30, 0x31, 0x10, 0x12, 0x10, 0x20, + 0xe9, 0x88, 0x03, 0x10, 0xe9, 0x93, 0x0f, 0x19, + 0xf9, 0x8f, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xde, + 0xf9, 0xba, 0x03, 0xdf, 0xe9, 0x99, 0xd3, 0x40, + 0xca, 0x50, 0xd1, 0x42, 0xe2, 0xea, 0xc0, 0x50, + 0x10, 0x54, 0xc0, 0x90, 0x10, 0x8c, 0x10, 0x92, + 0x10, 0xe0, 0xe5, 0xa8, 0xc0, 0x01, 0x10, 0x01, + 0x20, 0x40, 0xc0, 0x02, 0x10, 0x01, 0x20, 0x80, + 0x10, 0x60, 0xfd, 0xab, 0xb0, 0x7f, 0x10, 0xa0, + 0xfd, 0xae, 0xb0, 0xbf, 0x10, 0x5f, 0x10, 0x9f, + 0x00, 0xef, 0xd0, 0x3e, 0x20, 0x52, 0x20, 0x83, + 0x20, 0x93, 0x10, 0x4c, 0x10, 0x82, 0x40, 0x80, + 0x50, 0x42, 0x0f, 0xc5, 0xcb, 0xaa, 0xcb, 0xeb, + 0xca, 0x50, 0xd0, 0xc0, 0xb0, 0xc1, 0xf1, 0x9b, + 0xcb, 0x01, 0xd0, 0xc1, 0xf1, 0x9b, 0xcb, 0x41, + 0xba, 0x7f, 0xbb, 0x3f, 0xe2, 0xea, 0xcc, 0x5b, + 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, + 0x2c, 0x40, 0x1c, 0x48, 0xcc, 0xb1, 0x1c, 0x9f, + 0x06, 0xd0, 0xe9, 0xd5, 0x01, 0x69, 0xd0, 0x20, + 0x3c, 0x80, 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, + 0x2c, 0x40, 0x2c, 0x80, 0x01, 0xb5, 0xd4, 0x00, + 0x2c, 0x80, 0xde, 0x84, 0xde, 0xc4, 0xe3, 0x1e, + 0xd3, 0xc2, 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xe5, + 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xec, 0x80, 0x07, + 0xd4, 0x00, 0xc4, 0x50, 0xd3, 0x08, 0xe2, 0x95, + 0xd0, 0x71, 0x20, 0x56, 0x00, 0x48, 0xd1, 0x8c, + 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xfa, 0x06, 0x5e, + 0xfa, 0x03, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, + 0xf9, 0xfa, 0xd3, 0xc4, 0x06, 0x5e, 0xfa, 0x03, + 0xd0, 0x43, 0x40, 0x4c, 0xea, 0x03, 0x08, 0x49, + 0x00, 0x8d, 0x10, 0x87, 0x53, 0x02, 0x01, 0x46, + 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xea, 0x0a, + 0x09, 0x49, 0x00, 0x0d, 0xd0, 0x9f, 0x40, 0x02, + 0xb0, 0x20, 0x03, 0x19, 0xea, 0x10, 0xb0, 0x20, + 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x80, + 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, + 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xd3, 0xe1, 0xdc, 0xe2, 0x00, + 0xe2, 0x02, 0xe1, 0xac, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x91, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, + 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x64, 0x30, 0x5b, 0xfc, 0x11, + 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x8e, + 0xbc, 0x10, 0xd0, 0x30, 0xc0, 0x40, 0x30, 0x70, + 0xed, 0x8e, 0x03, 0x10, 0xe9, 0x97, 0x0f, 0x19, + 0xf9, 0x93, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xdf, + 0xe9, 0xa1, 0xd3, 0x40, 0xca, 0x50, 0xcb, 0x52, + 0x03, 0x1d, 0xf9, 0xa8, 0xca, 0x12, 0xca, 0x52, + 0xe1, 0xa5, 0x03, 0x1d, 0xf9, 0xa8, 0xca, 0x12, + 0xca, 0x53, 0xca, 0xae, 0xca, 0xef, 0xb1, 0x7e, + 0x03, 0x1e, 0xfa, 0xea, 0xb1, 0x7e, 0xe2, 0xea, + 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, + 0x17, 0x20, 0xf9, 0xd2, 0x00, 0xa8, 0xd0, 0x00, + 0xcc, 0x5b, 0x1c, 0x5f, 0x1c, 0x43, 0x20, 0x31, + 0x7c, 0x40, 0xb0, 0x3c, 0x7e, 0x80, 0xcc, 0xb1, + 0xce, 0xfa, 0x1c, 0x9f, 0x1e, 0xdf, 0x01, 0x69, + 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xc4, 0x3c, 0x80, + 0x0e, 0xd9, 0xe9, 0xc7, 0x3e, 0xc0, 0x3e, 0xf2, + 0x3e, 0xb1, 0xd0, 0x01, 0x40, 0x1b, 0x10, 0x05, + 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0xd0, 0x30, + 0x70, 0x00, 0x2c, 0x80, 0xe3, 0x1e, 0xd3, 0xc2, + 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xd8, 0xf2, 0x32, + 0xb3, 0x81, 0xe9, 0xdc, 0x80, 0x07, 0xe2, 0x95, + 0x0d, 0x09, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, + 0xe9, 0xe8, 0x06, 0x5e, 0xf9, 0xf1, 0x08, 0x89, + 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xe8, 0xd3, 0xc4, + 0x06, 0x5e, 0xf9, 0xf1, 0xd0, 0x43, 0x40, 0x4c, + 0xe9, 0xf1, 0x08, 0x49, 0x00, 0x8d, 0x10, 0x87, + 0x53, 0x02, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, + 0x03, 0x1c, 0xe9, 0xf8, 0x09, 0x49, 0x00, 0x0d, + 0xd0, 0x9f, 0x40, 0x02, 0xb0, 0x20, 0x03, 0x19, + 0xe9, 0xfe, 0xb0, 0x20, 0xa0, 0x2c, 0xe2, 0x5b, + 0x06, 0x5f, 0xfa, 0x80, 0xd4, 0x00, 0xc4, 0x50, + 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xc1, 0xe1, 0xca, 0xe1, 0xee, + 0xe1, 0xf0, 0xe1, 0xa8, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x8d, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, + 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x64, 0x30, 0x5b, 0xfc, 0x11, + 0xc0, 0x39, 0x30, 0x31, 0x10, 0x12, 0x10, 0x20, + 0xe9, 0x88, 0x03, 0x10, 0xe9, 0x93, 0x0f, 0x19, + 0xf9, 0x8f, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xdf, + 0xe9, 0x9d, 0xd3, 0x40, 0xca, 0x50, 0xcb, 0x52, + 0x03, 0x1d, 0xf9, 0xa4, 0xca, 0x12, 0xca, 0x52, + 0xe1, 0xa1, 0x03, 0x1d, 0xf9, 0xa4, 0xca, 0x12, + 0xca, 0x53, 0xca, 0xae, 0xca, 0xef, 0xb1, 0x7e, + 0x03, 0x1e, 0xfa, 0xea, 0xb1, 0x7e, 0xe2, 0xea, + 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, + 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x48, 0xcc, 0xb1, + 0x1c, 0x9f, 0x06, 0xd0, 0xe9, 0xb6, 0x01, 0x69, + 0xd0, 0x20, 0x3c, 0x80, 0xc0, 0x1c, 0x10, 0x08, + 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0xd0, 0x30, + 0x70, 0x00, 0x2c, 0x80, 0xde, 0x84, 0xde, 0xc4, + 0xe3, 0x1e, 0xd3, 0xc2, 0xf2, 0xd3, 0x13, 0xa0, + 0xed, 0xc6, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xca, + 0x80, 0x07, 0xe2, 0x95, 0x0d, 0x09, 0xd1, 0x8c, + 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xd6, 0x06, 0x5e, + 0xf9, 0xdf, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, + 0xf9, 0xd6, 0xd3, 0xc4, 0x06, 0x5e, 0xf9, 0xdf, + 0xd0, 0x43, 0x40, 0x4c, 0xe9, 0xdf, 0x08, 0x49, + 0x00, 0x8d, 0x10, 0x87, 0x53, 0x02, 0x01, 0x46, + 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xe6, + 0x09, 0x49, 0x00, 0x0d, 0xd0, 0x9f, 0x40, 0x02, + 0xb0, 0x20, 0x03, 0x19, 0xe9, 0xec, 0xb0, 0x20, + 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x80, + 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, + 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xdb, 0xe1, 0xe9, 0xe2, 0x00, + 0xe2, 0x02, 0xe1, 0xc3, 0xe1, 0x65, 0x30, 0x5a, + 0xe5, 0x8d, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, + 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x52, 0x30, 0x5b, 0xfc, 0x11, + 0xc0, 0x39, 0x30, 0x31, 0x10, 0x11, 0x10, 0x20, + 0xe9, 0x88, 0x03, 0x10, 0xe9, 0x93, 0x0f, 0x19, + 0xf9, 0x8f, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xd0, + 0xf9, 0x98, 0xca, 0x50, 0x03, 0xde, 0xf9, 0x9a, + 0xd1, 0x42, 0xe2, 0xea, 0xcb, 0xaa, 0xcb, 0xeb, + 0xc0, 0x50, 0x10, 0x54, 0xc0, 0x90, 0x10, 0x8c, + 0x10, 0x92, 0xd0, 0xc1, 0x05, 0x50, 0xe9, 0xa5, + 0xb0, 0xc2, 0x10, 0x60, 0xfd, 0xa8, 0xb0, 0x7f, + 0x10, 0xa0, 0xfd, 0xab, 0xb0, 0xbf, 0x10, 0x5f, + 0x10, 0x9f, 0x00, 0xef, 0xd0, 0x3e, 0x20, 0x52, + 0x20, 0x83, 0x20, 0x93, 0x10, 0x4c, 0x10, 0x82, + 0x40, 0x80, 0x50, 0x42, 0xd0, 0x81, 0x14, 0x1f, + 0x14, 0x01, 0x05, 0x50, 0xe9, 0xbd, 0x50, 0x42, + 0xe1, 0xbe, 0x54, 0x02, 0xca, 0x10, 0xca, 0x50, + 0xcb, 0x01, 0xcb, 0x41, 0xe2, 0xea, 0xcc, 0x5b, + 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, + 0x2c, 0x40, 0x1c, 0x49, 0xcc, 0xb1, 0x1c, 0x9f, + 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, 0x05, 0x50, + 0xf9, 0xd2, 0xb0, 0x3c, 0x2c, 0x40, 0x2c, 0x80, + 0x01, 0xb5, 0xd4, 0x00, 0x2c, 0x80, 0x02, 0xe4, + 0xde, 0x80, 0xde, 0xc1, 0xe3, 0x1e, 0xd3, 0xc0, + 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xe0, 0xf2, 0x32, + 0xb3, 0x81, 0xe9, 0xe9, 0x80, 0x07, 0xd4, 0x02, + 0x44, 0x15, 0x14, 0x1f, 0xc4, 0x50, 0xd3, 0x08, + 0xe2, 0x95, 0xd0, 0x71, 0x20, 0x56, 0x00, 0x48, + 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xf7, + 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xf6, + 0xd3, 0xc4, 0xe1, 0xf7, 0xb3, 0xc1, 0x01, 0x46, + 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xfe, + 0x09, 0x49, 0x00, 0x0d, 0xa0, 0x2c, 0xe2, 0x5b, + 0x06, 0x5f, 0xfa, 0x7f, 0xd4, 0x02, 0x44, 0x15, + 0x14, 0x1f, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, + 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xc9, 0xe1, 0xd2, 0xe1, 0xe7, + 0xe1, 0xe9, 0xe1, 0xab, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x91, 0x06, 0x50, 0xe9, 0x83, 0xc0, 0x54, + 0x30, 0x5b, 0xb0, 0x42, 0xf8, 0x11, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x52, 0x30, 0x5b, 0xfc, 0x11, + 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x8e, + 0xbc, 0x10, 0xd0, 0x20, 0xc0, 0x40, 0x30, 0x70, + 0xed, 0x8e, 0x03, 0x10, 0xe9, 0x97, 0x0f, 0x19, + 0xf9, 0x93, 0xd1, 0x44, 0xe1, 0x79, 0x03, 0xd0, + 0xf9, 0xa0, 0xca, 0x50, 0xcb, 0x52, 0x03, 0x1d, + 0xf9, 0xa7, 0xca, 0x12, 0xca, 0x52, 0xe1, 0xa4, + 0x03, 0x1d, 0xf9, 0xa7, 0xca, 0x12, 0xca, 0x53, + 0xca, 0xae, 0xca, 0xef, 0xb1, 0x7e, 0x03, 0x1e, + 0xfa, 0xea, 0xb1, 0x7e, 0xe2, 0xea, 0x00, 0x24, + 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, + 0xf9, 0xc8, 0x00, 0x2a, 0xd0, 0x00, 0x20, 0x1b, + 0x20, 0x1b, 0x05, 0x50, 0xf9, 0xb8, 0xb0, 0x3f, + 0x10, 0x02, 0x7c, 0x40, 0xcc, 0xb1, 0x1c, 0x9f, + 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xc1, + 0x3c, 0x80, 0xde, 0xa0, 0x2c, 0x5f, 0x2c, 0x9f, + 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, 0xde, 0xc1, + 0xe3, 0x1e, 0xd3, 0xc0, 0xf2, 0xd3, 0x13, 0xa0, + 0xed, 0xce, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xd2, + 0x80, 0x07, 0xe2, 0x95, 0x0d, 0x09, 0xd1, 0x8c, + 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xde, 0x08, 0x89, + 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xdd, 0xd3, 0xc4, + 0xe1, 0xde, 0xb3, 0xc1, 0x01, 0x46, 0x90, 0x2c, + 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xe5, 0x09, 0x49, + 0x00, 0x0d, 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, + 0xfa, 0x7f, 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, + 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xa3, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xe1, 0x8a, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x87, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x64, + 0x30, 0x5b, 0xfd, 0xb4, 0xc0, 0x39, 0x30, 0x31, + 0x10, 0x12, 0x10, 0x20, 0xe9, 0x82, 0xd1, 0x42, + 0xd3, 0x40, 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, + 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, + 0x1c, 0x48, 0xcc, 0xb1, 0x1c, 0x9f, 0x06, 0xd0, + 0xe9, 0x98, 0x01, 0x69, 0xd0, 0x20, 0x3c, 0x80, + 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, 0x2c, 0x40, + 0x2c, 0x80, 0x01, 0xb5, 0xd4, 0x00, 0x2c, 0x80, + 0xde, 0x84, 0xde, 0xc4, 0xe3, 0x1e, 0xf2, 0xd3, + 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xc8, + 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, + 0xe9, 0xbf, 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, + 0x10, 0x5c, 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xc8, + 0x0f, 0x17, 0xf9, 0xb4, 0x0f, 0x49, 0xf2, 0xd3, + 0x0f, 0x19, 0xf9, 0xb8, 0xdf, 0x00, 0x00, 0x06, + 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, 0xc0, 0x5b, + 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xc8, 0x0f, 0x17, + 0xf9, 0xc3, 0x02, 0xf2, 0xd6, 0x2b, 0xe0, 0x46, + 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xb5, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xe1, 0x8e, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x8b, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x64, + 0x30, 0x5b, 0xfd, 0xc6, 0xbc, 0x10, 0xd0, 0x10, + 0x0c, 0x1e, 0xf9, 0x88, 0xbc, 0x10, 0xd0, 0x30, + 0xc0, 0x40, 0x30, 0x70, 0xed, 0x88, 0xd1, 0x42, + 0xd3, 0x40, 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, + 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xb4, + 0x00, 0xa8, 0xd0, 0x00, 0xcc, 0x5b, 0x1c, 0x5f, + 0x1c, 0x43, 0x20, 0x31, 0x7c, 0x40, 0xb0, 0x3c, + 0x7e, 0x80, 0xcc, 0xb1, 0xce, 0xfa, 0x1c, 0x9f, + 0x1e, 0xdf, 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, + 0xe9, 0xa6, 0x3c, 0x80, 0x0e, 0xd9, 0xe9, 0xa9, + 0x3e, 0xc0, 0x3e, 0xf2, 0x3e, 0xb1, 0xd0, 0x01, + 0x40, 0x1b, 0x10, 0x05, 0x20, 0x1f, 0x2c, 0x40, + 0x2c, 0x80, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, + 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, + 0x30, 0x5a, 0xe5, 0xda, 0x00, 0x26, 0xd0, 0x00, + 0x70, 0x00, 0x10, 0x20, 0xe9, 0xd1, 0x00, 0xe0, + 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5c, 0x30, 0x5b, + 0xb0, 0x41, 0xed, 0xda, 0x0f, 0x17, 0xf9, 0xc6, + 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xca, + 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb4, 0xd6, 0x29, + 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, + 0xe5, 0xda, 0x0f, 0x17, 0xf9, 0xd5, 0x02, 0xf7, + 0xdc, 0x26, 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, + 0xe2, 0x95, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xa2, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xe1, 0x8a, 0xe1, 0x65, 0x30, 0x5a, + 0xe5, 0x87, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x52, + 0x30, 0x5b, 0xfd, 0xb3, 0xc0, 0x39, 0x30, 0x31, + 0x10, 0x11, 0x10, 0x20, 0xe9, 0x82, 0xd1, 0x42, + 0xd3, 0x41, 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, + 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, + 0x1c, 0x49, 0xcc, 0xb1, 0x1c, 0x9f, 0xc0, 0x1c, + 0x10, 0x08, 0x20, 0x1f, 0x05, 0x50, 0xf9, 0x99, + 0xb0, 0x3c, 0x2c, 0x40, 0x2c, 0x80, 0x01, 0xb5, + 0xd4, 0x00, 0x2c, 0x80, 0x02, 0xe4, 0xde, 0x80, + 0xde, 0xc1, 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, + 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xc7, 0x00, 0x26, + 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, 0xe9, 0xbe, + 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5b, + 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xc7, 0x0f, 0x17, + 0xf9, 0xb3, 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, + 0xf9, 0xb7, 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb4, + 0xd6, 0x29, 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, + 0xb0, 0x7e, 0xe5, 0xc7, 0x0f, 0x17, 0xf9, 0xc2, + 0x03, 0x30, 0xdc, 0x27, 0xe0, 0x46, 0xd3, 0x08, + 0xd3, 0xc0, 0xe2, 0x95, 0x50, 0x00, 0x50, 0x00, + 0x03, 0x76, 0xd0, 0x73, 0x00, 0x24, 0xdc, 0xd8, + 0xf0, 0x4a, 0xe1, 0xac, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xe1, 0x8e, 0xe1, 0x30, 0x30, 0x5a, + 0xe5, 0x8b, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x52, + 0x30, 0x5b, 0xfd, 0xbd, 0xbc, 0x10, 0xd0, 0x10, + 0x0c, 0x1e, 0xf9, 0x88, 0xbc, 0x10, 0xd0, 0x20, + 0xc0, 0x40, 0x30, 0x70, 0xed, 0x88, 0xd1, 0x42, + 0xd3, 0x41, 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, + 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xab, + 0x00, 0x2a, 0xd0, 0x00, 0x20, 0x1b, 0x20, 0x1b, + 0x05, 0x50, 0xf9, 0x9b, 0xb0, 0x3f, 0x10, 0x02, + 0x7c, 0x40, 0xcc, 0xb1, 0x1c, 0x9f, 0x01, 0x69, + 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xa4, 0x3c, 0x80, + 0xde, 0xa0, 0x2c, 0x5f, 0x2c, 0x9f, 0xd0, 0x30, + 0x70, 0x00, 0x2c, 0x80, 0xde, 0xc1, 0xe3, 0x1e, + 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, + 0xe5, 0xd1, 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, + 0x10, 0x20, 0xe9, 0xc8, 0x00, 0xe0, 0xd0, 0x44, + 0x70, 0x41, 0x10, 0x5b, 0x30, 0x5b, 0xb0, 0x41, + 0xed, 0xd1, 0x0f, 0x17, 0xf9, 0xbd, 0x0f, 0x49, + 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xc1, 0xdf, 0x00, + 0x00, 0x06, 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, + 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xd1, + 0x0f, 0x17, 0xf9, 0xcc, 0x03, 0x35, 0xda, 0x20, + 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, + 0xd0, 0x61, 0x23, 0x81, 0x0c, 0x49, 0xd0, 0x61, + 0x00, 0x8d, 0x10, 0xa0, 0xea, 0x3b, 0x30, 0x42, + 0xe6, 0x30, 0x23, 0x82, 0x0f, 0xc5, 0x0c, 0x09, + 0x05, 0x0d, 0x15, 0x20, 0xfe, 0x45, 0xd0, 0x65, + 0x15, 0x63, 0xea, 0x43, 0xd0, 0x53, 0x30, 0x54, + 0xee, 0x4a, 0x0f, 0x17, 0xfa, 0x45, 0x03, 0xb4, + 0xd6, 0x29, 0xe0, 0x46, 0x80, 0x07, 0x09, 0x49, + 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, + 0x00, 0x4d, 0xa0, 0x6c, 0xd0, 0xa1, 0x00, 0x88, + 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, 0xfa, 0x53, + 0xf2, 0x32, 0xd3, 0x80, 0xe1, 0x76, 0xd1, 0xc2, + 0x41, 0xcf, 0x11, 0xdf, 0xd0, 0x41, 0x01, 0xc1, + 0x00, 0xef, 0xd0, 0xbe, 0x03, 0x10, 0xf9, 0x77, + 0x80, 0x07, 0x21, 0x96, 0x11, 0xa2, 0xe9, 0x78, + 0x03, 0x1d, 0xea, 0x73, 0xc0, 0xd7, 0xc2, 0x90, + 0xf2, 0xa4, 0xc4, 0x0a, 0x03, 0xd0, 0xea, 0x72, + 0xc2, 0x91, 0xf2, 0xa4, 0xc4, 0x4a, 0x03, 0x1e, + 0xea, 0x8d, 0xc0, 0xd8, 0xc2, 0x92, 0xf2, 0xa4, + 0xc4, 0x8a, 0x03, 0xd0, 0xea, 0x7d, 0xc2, 0x93, + 0xf2, 0xa4, 0xc4, 0xca, 0xe2, 0x8d, 0xd3, 0xc0, + 0xc0, 0xd7, 0xc2, 0x90, 0xf2, 0xa4, 0xc4, 0x0a, + 0x03, 0xd0, 0xea, 0x88, 0xc2, 0x91, 0xf2, 0xa4, + 0xc4, 0x4a, 0x08, 0x49, 0x00, 0x4d, 0x10, 0x61, + 0xf8, 0x11, 0x03, 0x1f, 0xea, 0x93, 0x0d, 0xc9, + 0x00, 0x4d, 0xd0, 0x1a, 0xe2, 0x98, 0x03, 0x10, + 0xfa, 0x97, 0xd0, 0x1d, 0xe2, 0x98, 0xd0, 0x18, + 0x0f, 0x16, 0xfa, 0x98, 0xd0, 0x4c, 0x40, 0x4c, + 0x10, 0x6c, 0xea, 0xa2, 0x03, 0xde, 0xfa, 0xa2, + 0x0f, 0x12, 0xfa, 0xa0, 0x00, 0x08, 0xe2, 0xd9, + 0xd2, 0x00, 0x13, 0xe1, 0xee, 0xa9, 0x08, 0x49, + 0x02, 0x0d, 0x00, 0xc8, 0xc2, 0xca, 0x12, 0x94, + 0xd0, 0x1f, 0x30, 0x07, 0x12, 0xc0, 0xc2, 0x43, + 0x12, 0x5a, 0x00, 0x0d, 0x03, 0xde, 0xea, 0xb6, + 0x0e, 0xc9, 0x04, 0x8d, 0x02, 0x48, 0x22, 0x80, + 0x12, 0x88, 0xd0, 0x0b, 0x30, 0x03, 0x12, 0x80, + 0xd0, 0x19, 0x20, 0x03, 0x12, 0x80, 0x00, 0x0d, + 0x22, 0xc0, 0x12, 0xc8, 0xd0, 0x0b, 0x30, 0x09, + 0x12, 0xc0, 0x12, 0xd8, 0xd0, 0x16, 0x20, 0x09, + 0x20, 0x07, 0x12, 0xc0, 0x42, 0xc2, 0x22, 0x8b, + 0x22, 0x88, 0x03, 0xde, 0xea, 0xd2, 0x0e, 0xc9, + 0xc4, 0x4a, 0x04, 0xcd, 0x0f, 0xc5, 0x01, 0x46, + 0x90, 0x4d, 0x00, 0xc6, 0x10, 0x60, 0xe6, 0xd3, + 0x0f, 0xc5, 0x01, 0xb5, 0xd4, 0x00, 0xca, 0x9d, + 0xcb, 0x9e, 0xca, 0xea, 0xcb, 0xee, 0x2a, 0xc0, + 0x2b, 0xc0, 0xca, 0x10, 0xca, 0x51, 0xcb, 0x12, + 0xcb, 0x53, 0xd1, 0x40, 0xd3, 0x41, 0xb7, 0x3f, + 0xc0, 0x5c, 0xe1, 0x7b, 0xd0, 0xc0, 0xc1, 0x28, + 0xc2, 0x2a, 0xc2, 0xab, 0xf1, 0x7a, 0x0f, 0x17, + 0xfa, 0xef, 0xcc, 0xe8, 0xcd, 0x29, 0xcd, 0x6c, + 0xcd, 0xad, 0xc8, 0x08, 0xc8, 0x49, 0xca, 0x0a, + 0xca, 0x4b, 0xf3, 0x31, 0xd0, 0xc1, 0xc1, 0x34, + 0xc2, 0x2a, 0xc2, 0xab, 0xf1, 0x7a, 0x00, 0x28, + 0xd9, 0xc0, 0xc8, 0x88, 0xc8, 0xc9, 0xa9, 0xf8, + 0xca, 0x8a, 0xca, 0xcb, 0x11, 0x62, 0xe9, 0x79, + 0xd0, 0xc0, 0xc1, 0x35, 0xc2, 0x2e, 0xc2, 0xaf, + 0xf1, 0x7a, 0xc9, 0x08, 0xc9, 0x49, 0xa9, 0xf8, + 0xcb, 0x0a, 0xcb, 0x4b, 0xd0, 0xc1, 0xc1, 0x36, + 0xc2, 0x2e, 0xc2, 0xaf, 0xf1, 0x7a, 0xc0, 0x27, + 0xc9, 0x88, 0xc9, 0xc9, 0xa0, 0x38, 0xcb, 0x8a, + 0xcb, 0xcb, 0xe1, 0x79, 0x5f, 0x0d, 0x07, 0x7d, + 0xde, 0x07, 0x11, 0x5e, 0x30, 0x05, 0xcd, 0xc0, + 0x00, 0x28, 0xd0, 0x00, 0xa0, 0x38, 0x11, 0x61, + 0xf9, 0x75, 0x00, 0xe2, 0xd0, 0x00, 0x0f, 0x1d, + 0xeb, 0x29, 0x00, 0x2d, 0xdf, 0x4b, 0xf3, 0x3f, + 0xe1, 0x75, 0x04, 0xeb, 0xd0, 0x00, 0x11, 0x62, + 0xeb, 0x36, 0xb0, 0x20, 0x0f, 0x19, 0xfb, 0x36, + 0xac, 0xe0, 0x01, 0xa4, 0xde, 0x00, 0x5e, 0x0d, + 0x00, 0x2d, 0xdf, 0x7a, 0xdd, 0xc0, 0xd8, 0x80, + 0xd9, 0x00, 0xd9, 0x80, 0x5f, 0x00, 0x01, 0x46, + 0x00, 0x28, 0xd0, 0x01, 0x00, 0x06, 0xa0, 0x37, + 0x80, 0x3f, 0x00, 0xc6, 0x0f, 0xc5, 0xad, 0xda, + 0xc6, 0xb1, 0xd0, 0x01, 0x01, 0xa3, 0xde, 0x1d, + 0x40, 0x30, 0x3e, 0x00, 0x80, 0x3f, 0x0e, 0x0a, + 0x66, 0xda, 0xc8, 0x28, 0xc8, 0x69, 0xc8, 0xaa, + 0xc8, 0xeb, 0x0c, 0x1e, 0xfb, 0x68, 0x26, 0xba, + 0x07, 0x7d, 0xdc, 0x00, 0x1d, 0xcf, 0x1d, 0xd1, + 0x5d, 0xc0, 0x00, 0x2d, 0xdf, 0x64, 0x0f, 0x87, + 0xad, 0xda, 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, + 0xc9, 0x2c, 0xc9, 0x6d, 0xc9, 0xae, 0xc9, 0xef, + 0x0f, 0x2f, 0xd0, 0x37, 0x4f, 0x00, 0x0f, 0x1a, + 0xeb, 0xbe, 0x01, 0xa4, 0xde, 0x20, 0xd0, 0x01, + 0x40, 0x3c, 0x2e, 0x00, 0x00, 0x2d, 0xdf, 0x7a, + 0xac, 0xe0, 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe0, + 0xbf, 0x79, 0xbe, 0x3c, 0x0f, 0x1b, 0xeb, 0x9e, + 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe1, 0xbf, 0x79, + 0xbe, 0x34, 0x18, 0xa0, 0xeb, 0xb9, 0x0f, 0x87, + 0xad, 0x20, 0x80, 0x3f, 0x0e, 0x0a, 0x76, 0xe2, + 0xbf, 0x79, 0xbe, 0x3c, 0x0f, 0x87, 0x0e, 0x0a, + 0x76, 0xe3, 0x0f, 0x1b, 0xeb, 0xb3, 0xbf, 0x77, + 0xbe, 0x0c, 0x19, 0x20, 0xeb, 0xb9, 0x0f, 0x87, + 0xad, 0x60, 0x80, 0x3f, 0x0e, 0x0a, 0x76, 0xe4, + 0xbe, 0x3c, 0xbf, 0x75, 0x0f, 0x15, 0xf8, 0x1c, + 0x1f, 0x0a, 0x1f, 0x16, 0x0f, 0x87, 0x0e, 0x0a, + 0x76, 0xe5, 0xbf, 0x79, 0xbe, 0x34, 0x19, 0xa0, + 0xeb, 0xb9, 0x0f, 0x87, 0xad, 0xa0, 0x80, 0x3f, + 0x0e, 0x0a, 0x76, 0xe6, 0xbe, 0x3c, 0xbf, 0x79, + 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe7, 0x0f, 0x15, + 0xeb, 0xbe, 0x00, 0x2f, 0xdf, 0x72, 0x1d, 0xe0, + 0xf8, 0x1c, 0x00, 0x28, 0xd0, 0x01, 0xa0, 0x38, + 0x80, 0x3f, 0x0f, 0x87, 0xd0, 0x01, 0x4d, 0xc0, + 0x1f, 0x0f, 0x1f, 0x11, 0x00, 0x2f, 0xdf, 0x76, + 0xc6, 0xb2, 0x03, 0x7d, 0xde, 0x0e, 0x01, 0xa3, + 0xde, 0x2d, 0x5d, 0xc0, 0x0f, 0x87, 0x1e, 0xe1, + 0xeb, 0xdb, 0xad, 0xda, 0x80, 0x3f, 0x0e, 0x0a, + 0x66, 0xda, 0x0c, 0x1e, 0xfb, 0xe4, 0x26, 0xbb, + 0x03, 0xff, 0xdd, 0xff, 0x4d, 0xc0, 0x00, 0xa3, + 0xde, 0x2d, 0xbf, 0x56, 0x0f, 0x87, 0x07, 0x7d, + 0xde, 0x0e, 0x5d, 0xc0, 0x00, 0xa3, 0xde, 0x1d, + 0xad, 0xda, 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, + 0xdf, 0x5c, 0xd0, 0x0e, 0x4f, 0x00, 0x0f, 0x87, + 0xd0, 0x06, 0x40, 0x3c, 0xeb, 0xf0, 0xbf, 0x3e, + 0xb0, 0x04, 0xe7, 0xf2, 0xeb, 0xf6, 0xbf, 0x0c, + 0xbf, 0x3a, 0x0f, 0x87, 0x0f, 0x1d, 0xfb, 0x4b, + 0xbf, 0x38, 0x0f, 0x87, 0x0f, 0x1c, 0xfb, 0xcb, + 0xbf, 0x30, 0x0f, 0x87, 0x50, 0x00, 0x50, 0x00, + 0x0f, 0x17, 0xf9, 0x70, 0x90, 0x4d, 0x10, 0x60, + 0xe5, 0x72, 0x0f, 0x49, 0x90, 0x4d, 0x10, 0x60, + 0xe5, 0x76, 0x0f, 0x19, 0xf9, 0x79, 0x01, 0x46, + 0xd0, 0x11, 0xa0, 0x38, 0x80, 0x3f, 0x00, 0xc6, + 0xdf, 0x00, 0x00, 0x06, 0x08, 0x20, 0xd0, 0x00, + 0x10, 0x08, 0xa0, 0x0a, 0xa0, 0x1b, 0x0c, 0x20, + 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0x90, 0x4d, + 0x0f, 0xff, 0xd8, 0x1f, 0x40, 0x40, 0xa0, 0x4d, + 0x80, 0x0a, 0xd0, 0x00, 0x06, 0x50, 0xf9, 0x95, + 0xd0, 0x01, 0xa0, 0x09, 0x80, 0x1b, 0xa0, 0x27, + 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, + 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, + 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x40, + 0xa0, 0x69, 0x80, 0x2b, 0x80, 0x07, 0x08, 0x20, + 0xdf, 0x00, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, + 0x80, 0x3f, 0x01, 0xb0, 0xd0, 0x10, 0xa0, 0x37, + 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, + 0xd0, 0x10, 0xa0, 0x38, 0x15, 0x63, 0xe9, 0xba, + 0x05, 0x5e, 0xf9, 0xfa, 0xc0, 0xdf, 0x00, 0xe0, + 0xd1, 0x80, 0x70, 0x06, 0x10, 0x1c, 0xc1, 0x40, + 0x11, 0x48, 0xd3, 0x10, 0x00, 0x21, 0xd0, 0x80, + 0xb0, 0x16, 0xe9, 0xca, 0xd3, 0x20, 0x10, 0x81, + 0xb0, 0x16, 0xf9, 0xfa, 0x30, 0xc2, 0xd2, 0x64, + 0xd0, 0x92, 0x00, 0xee, 0xd0, 0x54, 0x70, 0x41, + 0x30, 0x43, 0xed, 0xd7, 0xd2, 0x6c, 0x72, 0x49, + 0xc0, 0x89, 0xb0, 0xbf, 0x10, 0x9f, 0x22, 0x42, + 0x04, 0x31, 0xd0, 0x10, 0xc0, 0x42, 0x30, 0x49, + 0xe5, 0xde, 0x10, 0x03, 0xc1, 0x0c, 0xc1, 0x83, + 0xb1, 0xbe, 0x01, 0x46, 0x00, 0x06, 0xa0, 0x3d, + 0xa0, 0x3c, 0x60, 0x06, 0x00, 0xc6, 0xb1, 0xbc, + 0xb1, 0x01, 0xed, 0xe1, 0xc1, 0x0c, 0x21, 0x85, + 0x01, 0x46, 0x00, 0x06, 0xa0, 0x3d, 0xa0, 0x3c, + 0x60, 0x06, 0x00, 0xc6, 0xb1, 0xbc, 0xb1, 0x01, + 0xed, 0xec, 0x02, 0xe4, 0xd0, 0x00, 0x20, 0xc0, + 0xb2, 0x41, 0xed, 0xd8, 0x15, 0xa3, 0xfa, 0x00, + 0xbc, 0x10, 0x0c, 0x1e, 0xfa, 0x00, 0xbc, 0x10, + 0xd0, 0x04, 0x70, 0x00, 0x10, 0x20, 0xfa, 0x00, + 0x00, 0x27, 0xd0, 0x10, 0xd0, 0x40, 0x60, 0x40, + 0x00, 0x26, 0xd0, 0x14, 0x60, 0x40, 0xb0, 0x28, + 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x01, 0x7a, + 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, + 0x00, 0x28, 0xd1, 0xb0, 0x70, 0x06, 0xd0, 0x81, + 0x60, 0x86, 0x10, 0x20, 0xe9, 0xab, 0xb0, 0x3f, + 0x60, 0x06, 0x00, 0xec, 0xd1, 0x84, 0x70, 0x46, + 0xb1, 0x84, 0x70, 0x86, 0x30, 0x42, 0xe9, 0xab, + 0x70, 0x42, 0xd0, 0x35, 0x30, 0x40, 0xf9, 0xab, + 0x00, 0x63, 0xd0, 0x3f, 0xb0, 0xbc, 0x40, 0x80, + 0x70, 0xc2, 0x10, 0xe3, 0xe5, 0xab, 0xb0, 0xbc, + 0x40, 0x80, 0x60, 0x86, 0x00, 0x28, 0xd0, 0x24, + 0x70, 0x40, 0x00, 0x22, 0xd0, 0x80, 0x50, 0x42, + 0x60, 0x40, 0x00, 0x64, 0xd0, 0x60, 0xd0, 0x90, + 0x60, 0x81, 0x00, 0xed, 0xd1, 0x88, 0x70, 0x46, + 0x10, 0xe4, 0xe9, 0xa8, 0x00, 0x21, 0xd0, 0xe8, + 0xd0, 0x00, 0x60, 0x03, 0xd0, 0x81, 0x40, 0x42, + 0x60, 0x46, 0x02, 0x3c, 0xdc, 0x89, 0xe0, 0x46, + 0xd0, 0x82, 0x50, 0x42, 0x60, 0x46, 0x00, 0x23, + 0xd5, 0x3e, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, + 0x01, 0x46, 0xdf, 0x5c, 0x08, 0x20, 0xd1, 0x00, + 0xcf, 0x04, 0x11, 0x08, 0xa1, 0x0a, 0xa1, 0x1b, + 0x11, 0x1f, 0xa1, 0x27, 0xd2, 0x80, 0xb2, 0x81, + 0x90, 0x4d, 0xc0, 0x01, 0x10, 0x14, 0x00, 0x16, + 0xe9, 0x8d, 0x80, 0x33, 0x80, 0x3f, 0x92, 0x8b, + 0x00, 0x23, 0xd0, 0x3f, 0x42, 0x80, 0xe9, 0x8d, + 0x0f, 0xff, 0xdf, 0xff, 0x40, 0x01, 0xa0, 0x0d, + 0xe1, 0x94, 0xa1, 0x0a, 0x00, 0xea, 0xd0, 0x00, + 0xd0, 0x8e, 0x00, 0x06, 0x0f, 0x0b, 0x70, 0x80, + 0x80, 0x73, 0x80, 0x0a, 0xd0, 0x00, 0x06, 0x50, + 0xf9, 0x9a, 0xd0, 0x01, 0xd0, 0x44, 0x40, 0x70, + 0x20, 0x01, 0x15, 0x63, 0xf9, 0xa1, 0x80, 0x1b, + 0xe1, 0xa2, 0x80, 0x5b, 0xa0, 0x27, 0x01, 0x20, + 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, + 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, + 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x40, 0xa0, 0x69, + 0x80, 0x2b, 0x80, 0x07, 0x08, 0x20, 0xd0, 0x00, + 0xcf, 0x00, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, + 0x80, 0x3f, 0x01, 0xb2, 0xd2, 0x10, 0xa0, 0x37, + 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, + 0x00, 0x30, 0xd0, 0x10, 0xa0, 0x38, 0x80, 0x3f, + 0x00, 0xc6, 0x00, 0x28, 0xd1, 0x24, 0x70, 0x04, + 0xd0, 0x41, 0x50, 0x01, 0x60, 0x04, 0x00, 0x27, + 0xd0, 0x18, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, + 0x00, 0x26, 0xd0, 0x20, 0x70, 0x40, 0xb0, 0x7f, + 0x60, 0x40, 0x08, 0x20, 0xdf, 0x00, 0xd4, 0x00, + 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, 0xd3, 0x81, + 0x12, 0xa0, 0xed, 0xe3, 0xd0, 0x08, 0x0a, 0x09, + 0x00, 0x4d, 0xb0, 0x01, 0xed, 0xdf, 0x03, 0xbf, + 0xd4, 0x27, 0xe0, 0x46, 0x50, 0x00, 0x50, 0x00, + 0x02, 0x24, 0xd0, 0x00, 0xa0, 0x37, 0x00, 0x27, + 0xd3, 0xd0, 0x00, 0x26, 0xd0, 0x04, 0x73, 0xcf, + 0x13, 0xe1, 0xe9, 0x7b, 0xb0, 0x3c, 0xf2, 0x00, + 0x00, 0x26, 0xd0, 0x40, 0xd0, 0x00, 0x60, 0x01, + 0x00, 0x26, 0xd0, 0x14, 0xf2, 0x00, 0x00, 0x26, + 0xd0, 0x18, 0xf2, 0x00, 0x00, 0xee, 0xd0, 0x1c, + 0x71, 0x40, 0xd1, 0x24, 0x15, 0x63, 0xe9, 0x8d, + 0x11, 0x1f, 0xc7, 0x1a, 0xb7, 0x01, 0xd3, 0x81, + 0xc4, 0xd4, 0xf2, 0x04, 0x00, 0x26, 0xd0, 0x18, + 0x70, 0x40, 0xb0, 0x54, 0xfd, 0x9b, 0x00, 0xed, + 0xd0, 0x24, 0xd0, 0x44, 0x60, 0x40, 0x13, 0xe1, + 0xf9, 0xbc, 0x15, 0xa3, 0xf9, 0xa1, 0x0c, 0x10, + 0xe9, 0xb9, 0x11, 0x61, 0xe5, 0xb3, 0xed, 0xb9, + 0x15, 0xa3, 0xf9, 0xab, 0x00, 0x26, 0xd0, 0x14, + 0x70, 0x40, 0x10, 0x62, 0xf5, 0xb3, 0x15, 0x22, + 0xe5, 0xb3, 0xc0, 0x44, 0x30, 0x54, 0xe5, 0xb3, + 0x34, 0xd4, 0xf5, 0xb3, 0xe1, 0xbf, 0x03, 0xb4, + 0xd6, 0x29, 0x00, 0x26, 0xd0, 0x40, 0x60, 0x01, + 0xe1, 0xdb, 0x03, 0xb4, 0xd6, 0x29, 0xe0, 0x46, + 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x80, 0x07, + 0x09, 0x49, 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, + 0xd4, 0xc0, 0x00, 0x4d, 0xa0, 0x6c, 0xd3, 0x80, + 0xd0, 0xa1, 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, + 0x00, 0x50, 0xf9, 0xc9, 0x0c, 0x49, 0xd0, 0x61, + 0x00, 0x8d, 0x10, 0xa0, 0xe9, 0x90, 0x30, 0x42, + 0xf5, 0xd8, 0xd0, 0x61, 0x23, 0x81, 0xe1, 0xce, + 0x23, 0x82, 0x13, 0xa1, 0xf9, 0x90, 0xd0, 0x42, + 0x15, 0xa1, 0xf9, 0xdf, 0xb0, 0x7f, 0x00, 0x26, + 0xd0, 0x14, 0x70, 0x00, 0x30, 0x01, 0xf5, 0xe8, + 0x16, 0xe0, 0xe5, 0xe8, 0xb6, 0xc1, 0xbc, 0x20, + 0xc0, 0x44, 0x30, 0x5b, 0xfd, 0xb9, 0xc0, 0x44, + 0x30, 0x54, 0xe5, 0xb9, 0x15, 0x63, 0xf9, 0xf8, + 0x15, 0xa3, 0xf9, 0xf5, 0x03, 0x3c, 0xd8, 0x1c, + 0xe0, 0x46, 0x03, 0x39, 0xda, 0x17, 0xe0, 0x46, + 0x15, 0xa3, 0xf9, 0xfd, 0x03, 0x72, 0xde, 0x19, + 0xe0, 0x46, 0x03, 0x70, 0xd0, 0x17, 0xe0, 0x46, + 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x0f, 0xc5, + 0xdf, 0x00, 0x0c, 0x09, 0x05, 0x0d, 0x08, 0x20, + 0xdf, 0x00, 0x0f, 0xc5, 0x50, 0x00, 0x50, 0x00, + 0x00, 0xef, 0xd0, 0x14, 0x70, 0x40, 0x10, 0x60, + 0xe9, 0x45, 0xb0, 0x04, 0x70, 0x40, 0xb0, 0x41, + 0xed, 0x44, 0x00, 0xed, 0xd0, 0x24, 0xd0, 0x44, + 0x60, 0x40, 0x00, 0x64, 0xd0, 0x20, 0x70, 0x00, + 0x10, 0x30, 0xe9, 0x45, 0x00, 0x21, 0xd0, 0x28, + 0x60, 0x40, 0x00, 0x64, 0xd2, 0xc0, 0x70, 0x0b, + 0x00, 0x11, 0xe9, 0x6a, 0x08, 0x20, 0xd0, 0x4f, + 0x30, 0x40, 0xe9, 0x55, 0xb0, 0x4f, 0xf9, 0x6a, + 0x03, 0xef, 0xdf, 0xbf, 0xaf, 0xb8, 0xdf, 0x80, + 0x0f, 0x87, 0xd0, 0x18, 0x70, 0x00, 0x10, 0x20, + 0xed, 0x6c, 0xdf, 0x84, 0xd0, 0x40, 0x60, 0x7e, + 0x00, 0x27, 0xd0, 0x54, 0x70, 0x41, 0x10, 0x60, + 0x01, 0xa0, 0xd0, 0x40, 0xa0, 0x78, 0x80, 0x34, + 0x80, 0x3f, 0x01, 0x3c, 0xd2, 0x39, 0x00, 0x21, + 0xdf, 0x86, 0x0f, 0x87, 0xd0, 0x40, 0x60, 0x4b, + 0x03, 0xe6, 0xd0, 0x08, 0xe0, 0x36, 0x50, 0x00, + 0x00, 0x28, 0xd0, 0x24, 0x72, 0xc0, 0xd0, 0x40, + 0x60, 0x40, 0xd0, 0x0c, 0x52, 0xc0, 0xc0, 0x1c, + 0x30, 0x1d, 0xf5, 0x3c, 0x20, 0x1f, 0x30, 0x1e, + 0x90, 0x6d, 0x20, 0x01, 0x00, 0x22, 0xd0, 0x58, + 0x60, 0x01, 0x00, 0xe3, 0xd0, 0x48, 0x70, 0x41, + 0x30, 0x40, 0xf5, 0x47, 0xb2, 0xc8, 0x00, 0xe3, + 0xd0, 0x4c, 0x70, 0x41, 0x30, 0x40, 0xfd, 0x4d, + 0xb2, 0xc4, 0x00, 0x28, 0xd0, 0x20, 0x70, 0x00, + 0x42, 0xc0, 0xa2, 0xc5, 0x12, 0xe0, 0xe9, 0x55, + 0x80, 0x40, 0x80, 0x34, 0x80, 0x3f, 0xcf, 0x95, + 0x82, 0x34, 0x80, 0x3f, 0x03, 0xe8, 0xd0, 0x00, + 0x1f, 0xa3, 0xe9, 0x60, 0x03, 0xea, 0xd0, 0x00, + 0x00, 0x27, 0xd0, 0x4c, 0x7f, 0x81, 0x00, 0x27, + 0xd0, 0x54, 0x70, 0x41, 0x10, 0x60, 0x03, 0xa0, + 0xd0, 0x40, 0xa0, 0x78, 0xe0, 0x3c, 0x50, 0x00, + 0xc0, 0x84, 0x10, 0x8c, 0x10, 0x92, 0xd0, 0x41, + 0x30, 0x4d, 0x40, 0x43, 0x10, 0x43, 0x20, 0x81, + 0xd1, 0x8f, 0x41, 0x82, 0x10, 0x9c, 0x20, 0x9b, + 0xc1, 0xc2, 0x10, 0x82, 0x20, 0x87, 0xc0, 0x42, + 0x10, 0x43, 0x20, 0x81, 0x10, 0x88, 0x22, 0x02, + 0x10, 0x97, 0x01, 0xd0, 0xe9, 0x48, 0xb0, 0x96, + 0x10, 0x88, 0x22, 0x82, 0xc0, 0x5c, 0x10, 0x48, + 0xc0, 0x84, 0x10, 0x91, 0x10, 0x86, 0x20, 0x42, + 0x41, 0x0d, 0x11, 0x02, 0x20, 0x44, 0x22, 0x01, + 0x22, 0x81, 0x02, 0xe4, 0xd2, 0x40, 0xc2, 0xca, + 0xb2, 0xe0, 0x01, 0xd0, 0xe9, 0x5e, 0xc2, 0xca, + 0x22, 0xc9, 0xb2, 0xa0, 0x22, 0x48, 0xd0, 0x78, + 0x03, 0x50, 0xf9, 0x69, 0xd0, 0x7c, 0x01, 0x9d, + 0xf9, 0x69, 0xc2, 0x48, 0xb2, 0x60, 0xc2, 0xca, + 0xb2, 0xf0, 0x11, 0x82, 0x41, 0x81, 0x22, 0x06, + 0x11, 0x9f, 0x41, 0x81, 0x22, 0x86, 0x0f, 0xc5, + 0xc0, 0x84, 0x10, 0x8c, 0x10, 0x92, 0xd1, 0x8f, + 0x41, 0x82, 0x10, 0x9c, 0xc1, 0xdb, 0x11, 0xc1, + 0x21, 0xc3, 0x20, 0x87, 0xc1, 0xc2, 0x10, 0x82, + 0x20, 0x87, 0xc0, 0x42, 0x10, 0x43, 0x20, 0x81, + 0x10, 0x88, 0x22, 0x02, 0x10, 0x97, 0x01, 0xd0, + 0xe9, 0x46, 0xb0, 0x96, 0x10, 0x88, 0x22, 0x82, + 0xc0, 0x5c, 0x10, 0x48, 0xc0, 0x84, 0x10, 0x91, + 0x10, 0x86, 0x20, 0x42, 0xd0, 0x81, 0x41, 0x02, + 0x11, 0x02, 0x20, 0x44, 0x22, 0x01, 0x22, 0x81, + 0x02, 0xe4, 0xd2, 0x40, 0xc2, 0xca, 0xb2, 0xe0, + 0x01, 0xd0, 0xe9, 0x5d, 0xc2, 0xca, 0x22, 0xc9, + 0xb2, 0xa0, 0x22, 0x48, 0x11, 0x9f, 0x11, 0x83, + 0x22, 0x06, 0x11, 0x9c, 0x11, 0x83, 0x22, 0x86, + 0x0f, 0xc5, 0xd0, 0x41, 0x40, 0x44, 0x20, 0x55, + 0x10, 0x62, 0xf9, 0x6f, 0x01, 0xb5, 0xd4, 0x00, + 0xc2, 0x9f, 0xc2, 0x1f, 0x22, 0x80, 0xe1, 0x30, + 0x0f, 0x11, 0xf9, 0x51, 0x90, 0x38, 0x80, 0x3f, + 0x00, 0x1b, 0xf9, 0x51, 0x00, 0x27, 0xd0, 0x04, + 0x70, 0x40, 0x30, 0x71, 0xf9, 0x51, 0xb0, 0x3c, + 0x70, 0x40, 0x30, 0x5d, 0xf9, 0x51, 0xb0, 0x08, + 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x10, 0x63, + 0xe5, 0x5d, 0x02, 0x20, 0xd0, 0x01, 0xa0, 0x37, + 0x00, 0x26, 0xd0, 0x24, 0x70, 0x40, 0xb0, 0x7f, + 0x60, 0x40, 0xb0, 0x08, 0x70, 0x40, 0xb0, 0x41, + 0x60, 0x40, 0x00, 0x26, 0xd0, 0x30, 0x70, 0x40, + 0xb0, 0x7f, 0x60, 0x40, 0xb0, 0x30, 0xd0, 0x40, + 0x60, 0x40, 0xb0, 0x3c, 0x6c, 0x40, 0xb0, 0x3c, + 0x67, 0x40, 0x00, 0x33, 0xdf, 0xb0, 0xe0, 0x36, + 0x00, 0x26, 0xd0, 0x1c, 0x70, 0x40, 0xb0, 0x7f, + 0x60, 0x40, 0xb0, 0x3c, 0x70, 0x40, 0xb0, 0x41, + 0x60, 0x40, 0x08, 0x20, 0xdf, 0x00, 0x80, 0x35, + 0xc0, 0x3c, 0x10, 0x08, 0xa0, 0x0a, 0xa0, 0x27, + 0xa0, 0x1b, 0xdf, 0x5c, 0x01, 0xa0, 0xd0, 0x00, + 0xa0, 0x38, 0x80, 0x3f, 0x80, 0x34, 0x80, 0x3f, + 0x03, 0xbb, 0xd8, 0x1e, 0xcf, 0x95, 0x82, 0x34, + 0x80, 0x3f, 0x03, 0xe8, 0xd0, 0x00, 0x1f, 0xa3, + 0xe9, 0x55, 0x1f, 0xa0, 0xe9, 0x55, 0x03, 0xea, + 0xd0, 0x00, 0x00, 0x21, 0xdf, 0x86, 0xe0, 0x3c, + 0x89, 0x78, 0x89, 0x37, 0x00, 0xee, 0xd0, 0x14, + 0x76, 0x00, 0xd0, 0x30, 0x76, 0x40, 0x26, 0x58, + 0xd6, 0xd9, 0x00, 0xee, 0xd0, 0x20, 0x75, 0x40, + 0xd0, 0x1c, 0x71, 0x40, 0xd0, 0x20, 0x71, 0x00, + 0xd0, 0x24, 0x70, 0x80, 0xc4, 0x02, 0xd0, 0x28, + 0x70, 0xc0, 0x00, 0x21, 0xd0, 0x10, 0x72, 0x00, + 0x93, 0x90, 0xd4, 0x81, 0x13, 0x96, 0x43, 0x92, + 0x34, 0x8e, 0x00, 0x22, 0xd1, 0xa4, 0x71, 0x86, + 0xde, 0x40, 0x7e, 0x79, 0xd0, 0x18, 0x70, 0x40, + 0xb0, 0x41, 0xf5, 0x58, 0xd3, 0x42, 0x50, 0x4d, + 0x60, 0x40, 0x10, 0x60, 0xe5, 0x62, 0xd0, 0x54, + 0x70, 0x01, 0xb0, 0x3c, 0x60, 0x01, 0x04, 0x2d, + 0xd0, 0x30, 0xe0, 0x36, 0x00, 0x22, 0xd0, 0x60, + 0x71, 0xc1, 0xd0, 0x4f, 0x41, 0xc1, 0x04, 0x20, + 0xd0, 0x28, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, + 0x04, 0x22, 0xd0, 0x18, 0xd3, 0x44, 0x72, 0x8d, + 0x12, 0xa0, 0xe8, 0x36, 0xc0, 0x47, 0x10, 0x5d, + 0x30, 0x4e, 0xf8, 0x36, 0xb2, 0x3e, 0x60, 0x4d, + 0x00, 0xed, 0xd0, 0x48, 0x70, 0x01, 0xde, 0x45, + 0x50, 0x39, 0x00, 0x1b, 0xf9, 0x44, 0xb0, 0x01, + 0x00, 0x1c, 0xf9, 0x47, 0xb0, 0x04, 0x60, 0x01, + 0xd0, 0x40, 0x62, 0x81, 0xce, 0x4a, 0xd0, 0x43, + 0x41, 0xc1, 0xd0, 0x58, 0x61, 0xc1, 0x90, 0x43, + 0x00, 0xe0, 0xd0, 0x28, 0x70, 0x00, 0x10, 0x1f, + 0x20, 0x40, 0xb1, 0xc1, 0xf5, 0x54, 0x00, 0x21, + 0xd0, 0x08, 0x60, 0x40, 0x00, 0xe6, 0xd0, 0x40, + 0x70, 0x41, 0xd2, 0x94, 0x60, 0x4a, 0x04, 0x2c, + 0xd0, 0x08, 0x01, 0x90, 0xf8, 0x36, 0x04, 0x2d, + 0xd0, 0x30, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, + 0xc0, 0x47, 0x10, 0x5d, 0x30, 0x4e, 0xf9, 0x41, + 0x90, 0x43, 0x00, 0xe0, 0xd0, 0x28, 0x70, 0x00, + 0x20, 0x40, 0x00, 0x21, 0xd0, 0x08, 0x60, 0x40, + 0x00, 0x26, 0xd0, 0x74, 0x70, 0x01, 0xb0, 0x3f, + 0x60, 0x01, 0x00, 0xed, 0xd0, 0x48, 0x70, 0x41, + 0x00, 0x5e, 0xf9, 0x4b, 0x00, 0x21, 0xd0, 0x00, + 0x73, 0x80, 0xd4, 0x81, 0x34, 0x8e, 0x00, 0x34, + 0xd3, 0x70, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, + 0xd1, 0x88, 0xd1, 0xc8, 0x01, 0x1b, 0xe9, 0x39, + 0x11, 0x9f, 0x11, 0xdf, 0xd4, 0x80, 0xd3, 0x81, + 0xe1, 0x43, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x00, + 0x00, 0x10, 0xf9, 0x37, 0x0c, 0x1f, 0xf9, 0x36, + 0x13, 0xa1, 0xe9, 0x43, 0xbe, 0x7c, 0x00, 0x69, + 0xd2, 0x54, 0x12, 0x48, 0xc0, 0x39, 0x30, 0x18, + 0xe5, 0x4b, 0xd2, 0x70, 0x72, 0x49, 0x22, 0x79, + 0x00, 0x21, 0xd0, 0x00, 0x63, 0x80, 0x04, 0x24, + 0xd0, 0x38, 0x02, 0x10, 0xe9, 0x56, 0xd0, 0x41, + 0x51, 0x41, 0xe0, 0x36, 0x15, 0x61, 0xe8, 0x36, + 0xd5, 0x80, 0xd3, 0x00, 0xd3, 0x40, 0x04, 0x28, + 0xd0, 0x18, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, + 0x00, 0x21, 0xd0, 0x18, 0x73, 0x00, 0xb0, 0x04, + 0x73, 0x80, 0xd2, 0x80, 0xb0, 0x38, 0x72, 0xc0, + 0x31, 0x0d, 0xc0, 0x0e, 0x10, 0x0b, 0x10, 0x20, + 0xe9, 0x42, 0xf5, 0x3f, 0x22, 0x8d, 0x10, 0x01, + 0x13, 0x5f, 0xe1, 0x3b, 0x33, 0x8b, 0x15, 0x61, + 0xf9, 0x49, 0x00, 0x21, 0xd0, 0x64, 0x70, 0x41, + 0x33, 0x81, 0x03, 0xd0, 0xe9, 0x4c, 0x20, 0x0b, + 0x13, 0xdf, 0x12, 0xc1, 0x13, 0xe0, 0xf9, 0x49, + 0x10, 0x03, 0xc0, 0x50, 0x10, 0x4b, 0x13, 0x0b, + 0x23, 0x00, 0x13, 0x20, 0xe9, 0x5c, 0xf5, 0x59, + 0x22, 0x81, 0x13, 0x01, 0x10, 0x5f, 0xe1, 0x55, + 0x12, 0x99, 0x12, 0x87, 0x21, 0x0a, 0x00, 0xa0, + 0xd2, 0x80, 0xc3, 0x0a, 0x03, 0x90, 0xe9, 0x66, + 0x22, 0x82, 0x23, 0x03, 0x10, 0x81, 0x10, 0xc1, + 0x13, 0x9f, 0x13, 0xa0, 0xed, 0x62, 0xc0, 0x8a, + 0xc0, 0xcc, 0x04, 0x26, 0xd0, 0x38, 0xe0, 0x36, + 0x15, 0x61, 0xf9, 0x3d, 0x07, 0x32, 0xd0, 0x00, + 0x30, 0x03, 0xed, 0x3d, 0xc0, 0x03, 0x10, 0x1d, + 0x30, 0xc0, 0xc0, 0x02, 0x10, 0x1d, 0x30, 0x80, + 0xe1, 0x32, 0x10, 0x94, 0x10, 0xd4, 0x00, 0x21, + 0xd0, 0x20, 0x73, 0x00, 0xc5, 0x8c, 0xd3, 0x4e, + 0x01, 0x1b, 0xe9, 0x48, 0x13, 0x1f, 0xd3, 0x4f, + 0x43, 0x4c, 0x13, 0x1c, 0xc0, 0x0c, 0x10, 0x03, + 0x20, 0x0c, 0xc0, 0x40, 0x10, 0x42, 0x20, 0x40, + 0x10, 0x46, 0x20, 0x4d, 0x10, 0x42, 0x2e, 0x41, + 0x10, 0x5c, 0x10, 0x43, 0x00, 0x59, 0xe9, 0x5b, + 0x01, 0x69, 0xd0, 0x20, 0x30, 0x40, 0x22, 0x41, + 0x04, 0x28, 0xd0, 0x18, 0xe0, 0x36, 0x50, 0x00, + 0x2c, 0x14, 0xd0, 0x34, 0x63, 0x00, 0xd0, 0x38, + 0x72, 0xc0, 0xc0, 0x51, 0x10, 0x5c, 0x30, 0x4b, + 0x10, 0x44, 0xd4, 0xc0, 0xd5, 0x00, 0xc0, 0x18, + 0x30, 0x39, 0xed, 0x5f, 0xd4, 0xd0, 0xc5, 0x01, + 0xd0, 0x18, 0x70, 0x00, 0x0c, 0x1f, 0xe9, 0x48, + 0x10, 0x20, 0xfd, 0x48, 0xd4, 0xc0, 0xd5, 0x00, + 0x10, 0x22, 0xe5, 0x4e, 0xd4, 0xc0, 0xbc, 0x30, + 0xd5, 0x00, 0xb5, 0x10, 0xb0, 0x3f, 0xf9, 0x52, + 0x3c, 0x01, 0x3c, 0x01, 0x02, 0x1f, 0xe9, 0x5f, + 0x00, 0xa8, 0xd3, 0xc0, 0xd3, 0xa4, 0x00, 0xaa, + 0xd0, 0x10, 0x70, 0x4f, 0xb3, 0xfc, 0x60, 0x40, + 0xb0, 0x3c, 0xb3, 0x81, 0xed, 0x59, 0x00, 0x21, + 0xd0, 0x28, 0x70, 0x00, 0x10, 0x20, 0xf9, 0x69, + 0x02, 0x1f, 0xf9, 0x6a, 0x90, 0x10, 0x00, 0x1e, + 0xe9, 0x6a, 0xb1, 0x7c, 0x04, 0x2a, 0xd0, 0x18, + 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, + 0x01, 0x5e, 0xf9, 0x35, 0x01, 0x50, 0xe9, 0x35, + 0xb1, 0x78, 0xd2, 0x00, 0x01, 0x5c, 0xf9, 0x5f, + 0xc0, 0x18, 0x30, 0x39, 0xed, 0x5f, 0x11, 0x9f, + 0xce, 0x58, 0xc2, 0x59, 0x00, 0xaa, 0xd2, 0x10, + 0x14, 0x82, 0x22, 0x12, 0xc0, 0x0c, 0x10, 0x1f, + 0x10, 0x03, 0x22, 0x00, 0x70, 0x48, 0x03, 0x10, + 0xe9, 0x4c, 0xb2, 0x38, 0xbe, 0x60, 0xb2, 0x60, + 0x2e, 0x41, 0x10, 0x5f, 0x00, 0x59, 0xe9, 0x53, + 0x01, 0x69, 0xd0, 0x3c, 0x30, 0x40, 0x22, 0x41, + 0x13, 0x41, 0x2e, 0x4d, 0x13, 0x5d, 0x13, 0x43, + 0x22, 0x4d, 0x14, 0xe0, 0xe9, 0x5f, 0x33, 0x0b, + 0x13, 0x04, 0x2c, 0x0c, 0x35, 0x0c, 0xc3, 0x46, + 0xc3, 0x87, 0x04, 0x62, 0xd0, 0x10, 0x15, 0x62, + 0xfc, 0x36, 0x04, 0x60, 0xd0, 0x10, 0xe0, 0x36, + 0x00, 0x22, 0xd0, 0x74, 0x74, 0x01, 0xb0, 0x7c, + 0x74, 0x41, 0xb0, 0x7c, 0x71, 0x41, 0xd1, 0x18, + 0xc0, 0x10, 0x10, 0x1c, 0xb0, 0x16, 0xf9, 0x45, + 0x00, 0x24, 0xd0, 0x20, 0x30, 0x11, 0xf9, 0x45, + 0xb1, 0x70, 0x01, 0x50, 0xf9, 0x45, 0xb1, 0x20, + 0x14, 0x41, 0xc0, 0x90, 0x00, 0x2b, 0xd0, 0xd0, + 0x01, 0x50, 0xe9, 0x4b, 0xc0, 0xd0, 0x00, 0x35, + 0xdc, 0x00, 0x20, 0x11, 0x10, 0x1f, 0xa0, 0x1c, + 0x00, 0x21, 0xd0, 0x2c, 0x70, 0x00, 0x10, 0x05, + 0x51, 0x40, 0xd0, 0x1c, 0x61, 0x40, 0xd0, 0x20, + 0x61, 0x00, 0xd0, 0x24, 0x60, 0x80, 0xd0, 0x28, + 0x60, 0xc0, 0x04, 0x2d, 0xd0, 0x30, 0x00, 0x22, + 0xd0, 0x64, 0xb1, 0x81, 0x61, 0x81, 0xe0, 0x36, + 0x90, 0x50, 0xd0, 0x3c, 0x10, 0x41, 0x60, 0x40, + 0x15, 0x62, 0xfd, 0x3d, 0xc0, 0x10, 0x10, 0x1e, + 0x10, 0x07, 0x21, 0x00, 0x10, 0x16, 0x34, 0x00, + 0xc0, 0x90, 0xd3, 0x40, 0x00, 0x24, 0xd3, 0xc0, + 0x04, 0x23, 0xd0, 0x18, 0x01, 0x9f, 0xe8, 0x36, + 0xd0, 0x54, 0x70, 0x41, 0x73, 0x41, 0x04, 0x2e, + 0xd0, 0x28, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, + 0x00, 0xef, 0xd3, 0x30, 0x73, 0x0c, 0xd0, 0x0c, + 0x70, 0x00, 0xc0, 0x40, 0x13, 0x24, 0xf5, 0x42, + 0x13, 0x22, 0xe9, 0x41, 0xe5, 0x43, 0xd3, 0x00, + 0x10, 0x22, 0xf9, 0x41, 0xd0, 0x01, 0xd0, 0x43, + 0xd3, 0x01, 0x21, 0x00, 0xd3, 0x40, 0x03, 0x10, + 0xf9, 0x47, 0xd3, 0x40, 0xe1, 0x61, 0x00, 0x23, + 0xd0, 0x00, 0x10, 0x61, 0xe9, 0x50, 0xb0, 0x33, + 0x10, 0x63, 0xe9, 0x50, 0x00, 0x22, 0xd0, 0x1a, + 0xc3, 0xc0, 0xd2, 0xc0, 0x00, 0x10, 0xe9, 0x55, + 0x22, 0xd0, 0x10, 0x1f, 0x14, 0x01, 0x10, 0x20, + 0xed, 0x52, 0x14, 0x18, 0x12, 0xd8, 0xc0, 0x8b, + 0x32, 0xd0, 0x12, 0xc3, 0x33, 0x4b, 0x13, 0x47, + 0x21, 0x0d, 0x04, 0x23, 0xd0, 0x18, 0xe0, 0x36, + 0x00, 0x24, 0xd0, 0x30, 0xd0, 0x40, 0x60, 0x40, + 0xd3, 0xc7, 0x43, 0xc4, 0x31, 0x0f, 0xd5, 0xd4, + 0x25, 0xcf, 0x15, 0xc4, 0x10, 0xdf, 0xc2, 0xc6, + 0xc3, 0x07, 0x11, 0x81, 0xb1, 0x3b, 0x15, 0x64, + 0xe9, 0x47, 0x10, 0xdf, 0x12, 0xc1, 0x11, 0x81, + 0x11, 0xc1, 0xb1, 0x3f, 0xb5, 0xf8, 0x90, 0x10, + 0x00, 0x16, 0xf9, 0x5e, 0xb5, 0xfc, 0xd0, 0x20, + 0x40, 0x39, 0x2e, 0x4b, 0x22, 0x4c, 0x12, 0x20, + 0xe9, 0x59, 0x20, 0x39, 0x00, 0x1b, 0xe9, 0x59, + 0x2c, 0x13, 0x35, 0x13, 0x0e, 0x5a, 0xf9, 0x59, + 0xb2, 0x38, 0x02, 0xe3, 0xd0, 0x00, 0x0e, 0x5a, + 0xe9, 0x5e, 0x2e, 0x40, 0x01, 0xee, 0xd2, 0x80, + 0x42, 0x84, 0xc0, 0x03, 0x30, 0x02, 0xf5, 0x6b, + 0x31, 0x0a, 0x12, 0x98, 0x20, 0x03, 0xf5, 0x69, + 0x12, 0x9f, 0x12, 0x87, 0x51, 0x0a, 0x00, 0x34, + 0xd4, 0xf0, 0xe0, 0x36, 0x50, 0x00, 0x50, 0x00, + 0xd3, 0xc7, 0x43, 0xc4, 0x15, 0x61, 0xf9, 0x48, + 0x10, 0xc1, 0xd5, 0xe0, 0xd1, 0x80, 0xd1, 0xc0, + 0x31, 0x0f, 0x13, 0xe1, 0xe9, 0x3c, 0xd3, 0xc0, + 0x00, 0x24, 0xd0, 0x30, 0x63, 0xc0, 0x25, 0xcf, + 0x15, 0xc2, 0xd0, 0x03, 0x40, 0x16, 0x25, 0xc0, + 0x15, 0xc2, 0x15, 0x81, 0x35, 0x91, 0xe1, 0x5c, + 0x00, 0x24, 0xd0, 0x30, 0x63, 0xc0, 0x01, 0x50, + 0xe9, 0x54, 0x15, 0xa0, 0xf9, 0x55, 0x00, 0x24, + 0xd0, 0x34, 0x70, 0x00, 0x10, 0x20, 0xe9, 0x55, + 0xd3, 0xc0, 0x31, 0x0f, 0xd5, 0xfc, 0x25, 0xcf, + 0x15, 0xc3, 0x14, 0xa0, 0xe9, 0x5c, 0xb5, 0xfc, + 0x00, 0x34, 0xd4, 0xf0, 0xe0, 0x36, 0x50, 0x00, + 0xc4, 0x91, 0x34, 0x96, 0xed, 0x34, 0xd4, 0x80, + 0x14, 0x84, 0xb3, 0xc1, 0xe5, 0x41, 0xc0, 0x52, + 0x10, 0x5e, 0x34, 0x81, 0xb3, 0xc1, 0xe5, 0x41, + 0xc0, 0x52, 0x10, 0x5c, 0x24, 0x81, 0xb3, 0xc1, + 0xe5, 0x37, 0x02, 0xe8, 0xd0, 0x00, 0xb4, 0xb0, + 0x14, 0x9b, 0x00, 0x24, 0xd0, 0x60, 0x30, 0x52, + 0xed, 0x4a, 0x24, 0x81, 0x20, 0x12, 0xa0, 0x1c, + 0x10, 0x8a, 0x50, 0x83, 0xa0, 0x96, 0xa1, 0x50, + 0xa1, 0x11, 0xc0, 0x52, 0xd4, 0x84, 0x10, 0x6c, + 0xed, 0x56, 0xd4, 0x81, 0xd1, 0x00, 0xb1, 0x17, + 0x00, 0x23, 0xd1, 0x40, 0xc2, 0xb9, 0x22, 0x86, + 0x12, 0x20, 0xf9, 0x66, 0x02, 0xe3, 0xd0, 0x40, + 0x02, 0x9a, 0xe9, 0x63, 0x22, 0x81, 0x02, 0x5a, + 0xe9, 0x66, 0x22, 0x41, 0x75, 0xd7, 0xc3, 0xd7, + 0xd0, 0xd7, 0x00, 0x21, 0xd0, 0xb6, 0x8b, 0x38, + 0x00, 0x33, 0xdd, 0x08, 0xe0, 0x36, 0x50, 0x00, + 0xd0, 0x7c, 0x60, 0x01, 0xae, 0x52, 0xd0, 0x60, + 0x40, 0x79, 0x00, 0x13, 0xe8, 0xc9, 0xa2, 0x94, + 0x22, 0x86, 0x13, 0xe0, 0xe4, 0xd0, 0x13, 0xc1, + 0x15, 0x62, 0xfc, 0xd1, 0x13, 0xc1, 0xe0, 0xd1, + 0xc3, 0xd7, 0x03, 0xd9, 0xe8, 0xd4, 0x22, 0x8d, + 0x15, 0x62, 0xfc, 0xda, 0x03, 0xda, 0xe8, 0xda, + 0x22, 0x8d, 0x22, 0x8d, 0xce, 0x4a, 0x22, 0x86, + 0x00, 0x14, 0xe8, 0xe0, 0xa2, 0x53, 0x22, 0x47, + 0x03, 0xd1, 0xe8, 0xe8, 0x22, 0x4e, 0x15, 0x62, + 0xfc, 0xe8, 0x03, 0xd2, 0xe8, 0xe8, 0x22, 0x4e, + 0x12, 0x20, 0xe9, 0x09, 0x20, 0x79, 0x00, 0x5b, + 0xe8, 0xf4, 0x15, 0x20, 0xfc, 0xf1, 0x2c, 0x13, + 0x35, 0x13, 0x0e, 0x5b, 0xe8, 0xf4, 0xb2, 0x38, + 0x02, 0x9a, 0xe8, 0xfb, 0x70, 0x08, 0xd0, 0x7c, + 0x42, 0x81, 0x22, 0x98, 0x22, 0x80, 0x02, 0x5a, + 0xe9, 0x11, 0x70, 0x08, 0xd0, 0x78, 0x42, 0x41, + 0x22, 0x59, 0x10, 0x1f, 0x22, 0x40, 0x00, 0x19, + 0xe9, 0x11, 0x01, 0x69, 0xd0, 0x7c, 0x32, 0x41, + 0xe1, 0x11, 0x02, 0xe3, 0xd0, 0x40, 0x02, 0x9a, + 0xe9, 0x0e, 0x22, 0x81, 0x02, 0x5a, 0xe9, 0x11, + 0x22, 0x41, 0x0e, 0x5a, 0xe9, 0x15, 0xce, 0x4a, + 0x3e, 0x46, 0x0f, 0x87, 0xdd, 0x48, 0xe1, 0x19, + 0xdd, 0x40, 0xdc, 0xc8, 0xdd, 0x3c, 0x7d, 0x34, + 0x1d, 0x19, 0x3d, 0x35, 0x4d, 0x33, 0x4c, 0xec, + 0x3d, 0x33, 0xf9, 0x17, 0x0f, 0xc5, 0x50, 0x00, + 0xd0, 0x39, 0xd0, 0x35, 0xd0, 0x1d, 0xd0, 0x2d, + 0xd0, 0x3f, 0xd0, 0x2e, 0xd0, 0x3c, 0xd0, 0x37, + 0xd0, 0x33, 0xd0, 0x19, 0xd0, 0x33, 0xd0, 0x2e, + 0xd0, 0x3d, 0xd0, 0x3e, 0xd0, 0x27, 0xd0, 0x3e, + 0xd0, 0x3a, 0xd0, 0x2f, 0xd0, 0x32, 0x00, 0x00, + 0x00, 0x00, 0x46, 0x44, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x50, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x02, 0xd0, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x05, 0x46, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90, 0x85, + 0x00, 0x00, 0xa6, 0xee, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x01, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xa0, + 0x00, 0x08, 0x08, 0x28, 0x00, 0x08, 0x88, 0x68, + 0x00, 0x08, 0xa0, 0x98, 0x00, 0x08, 0x88, 0x68, + 0x00, 0x08, 0x28, 0x98, 0x00, 0x08, 0xac, 0xf4, + 0x00, 0x08, 0xb8, 0x7c, 0x00, 0x02, 0x02, 0x88, + 0x00, 0x02, 0x08, 0x22, 0x00, 0x02, 0x88, 0xaa, + 0x00, 0x02, 0x22, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x24, + 0x00, 0x04, 0x04, 0x24, 0x00, 0x04, 0x28, 0x6c, + 0x00, 0x04, 0x28, 0x6c, 0x00, 0x01, 0x10, 0x44, + 0x00, 0x01, 0x20, 0x44, 0x00, 0x01, 0x11, 0xaa, + 0x00, 0x01, 0x88, 0x55, 0x00, 0x01, 0x44, 0xaa, + 0x00, 0x01, 0x44, 0x55, 0x00, 0x20, 0x80, 0xa0, + 0x00, 0x20, 0x80, 0xc0, 0x00, 0x20, 0x20, 0xa0, + 0x00, 0x20, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, + 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x13, 0x16, + 0x1a, 0x1b, 0x1d, 0x22, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x13, 0x16, + 0x1a, 0x1b, 0x1d, 0x22, 0x10, 0x10, 0x16, 0x18, + 0x1b, 0x1d, 0x22, 0x25, 0x13, 0x16, 0x1a, 0x1b, + 0x1d, 0x22, 0x22, 0x26, 0x16, 0x16, 0x1a, 0x1b, + 0x1d, 0x22, 0x25, 0x28, 0x16, 0x1a, 0x1b, 0x1d, + 0x20, 0x23, 0x28, 0x30, 0x1a, 0x1b, 0x1d, 0x20, + 0x23, 0x28, 0x30, 0x3a, 0x1a, 0x1b, 0x1d, 0x22, + 0x26, 0x2e, 0x38, 0x45, 0x1b, 0x1d, 0x23, 0x26, + 0x2e, 0x38, 0x45, 0x53, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x1b, 0x08, 0x00, 0x00, 0x1f, 0xde, 0x00, + 0x00, 0x00, 0x50, 0x00, 0x00, 0x08, 0x39, 0x00, + 0x00, 0x10, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x05, 0x28, 0x20, 0x01, 0x00, 0x00, 0x01, 0xe0, + 0x71, 0x01, 0x00, 0x68, 0xe0, 0x7f, 0xb0, 0x7f, + 0x60, 0x40, 0xe0, 0x1d, 0x90, 0x10, 0xb4, 0x81, + 0xe8, 0xc0, 0xe0, 0xc2, 0x90, 0x18, 0x00, 0x8a, + 0x70, 0xc0, 0x0f, 0x87, 0xe3, 0xe8, 0xc0, 0x00, + 0x70, 0x40, 0xe0, 0x01, 0xe0, 0x86, 0x00, 0x26, + 0xd0, 0x28, 0xe0, 0x0e, 0xd0, 0x0e, 0x0f, 0x0b, + 0x70, 0x1d, 0xe0, 0x67, 0x0f, 0x87, 0x0f, 0x87, + 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, 0x02, 0x20, + 0xd0, 0x01, 0xe0, 0x25, 0x0f, 0x45, 0x6f, 0x81, + 0xdf, 0xa6, 0xe0, 0x36, 0xe1, 0x30, 0xa0, 0x37, + 0xc0, 0x00, 0xe0, 0x26, 0x00, 0x33, 0xde, 0xc8, + 0xe0, 0x32, 0x0f, 0xc5, 0x0f, 0x87, 0x00, 0x27, + 0xd0, 0x4c, 0xe0, 0x21, 0x00, 0x33, 0xdf, 0x28, + 0x00, 0x27, 0xd0, 0x56, 0x60, 0x01, 0xe0, 0x2d, + 0x03, 0xa0, 0xd0, 0x41, 0xa0, 0x78, 0x00, 0x60, + 0xd0, 0x41, 0xa0, 0x77, 0x00, 0x22, 0xd0, 0x58, + 0xa0, 0x76, 0x00, 0x21, 0xd0, 0x7c, 0x00, 0x4a, + 0xd0, 0x72, 0x70, 0x40, 0x00, 0x06, 0x0f, 0x87, + 0x00, 0x22, 0xdc, 0xf8, 0xf0, 0x4a, 0xe1, 0x70, + 0x07, 0xef, 0xdd, 0xbf, 0x4f, 0x36, 0x1d, 0x99, + 0x4d, 0x80, 0x10, 0x18, 0xdd, 0x50, 0x60, 0x35, + 0xdd, 0x72, 0xdd, 0x10, 0x3d, 0xb4, 0xec, 0x57, + 0x2d, 0x36, 0x1d, 0x03, 0xbd, 0x04, 0xe4, 0x2b, + 0x01, 0x46, 0x00, 0x06, 0xac, 0xf6, 0x80, 0x3f, + 0x0d, 0x0a, 0x10, 0x02, 0x7d, 0x40, 0x10, 0x1e, + 0xb0, 0x20, 0xbc, 0xe0, 0x00, 0x06, 0x00, 0xc6, + 0xe0, 0x52, 0xb7, 0x60, 0xb7, 0x60, 0xc0, 0x5d, + 0x30, 0x5f, 0xe4, 0x72, 0xc7, 0x5e, 0x00, 0xed, + 0xd0, 0x28, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, + 0xc0, 0x1d, 0x30, 0x1c, 0xf8, 0x7e, 0x00, 0x21, + 0xd0, 0x01, 0x00, 0x26, 0xd0, 0x78, 0xa0, 0x38, + 0x80, 0x3f, 0x70, 0x01, 0xb0, 0x3f, 0x60, 0x01, + 0x0f, 0x87, 0x80, 0x34, 0x03, 0xef, 0xd8, 0x3f, + 0xa8, 0x38, 0x01, 0x35, 0xdc, 0x33, 0xe0, 0x46, + 0xc0, 0x1c, 0xe4, 0xa5, 0x97, 0x2e, 0x30, 0x1c, + 0xe8, 0x8e, 0x00, 0x21, 0xd0, 0x00, 0xa0, 0x38, + 0xc0, 0x5d, 0x00, 0x23, 0xd0, 0x00, 0x30, 0x40, + 0x30, 0x5e, 0xe4, 0x99, 0x20, 0x5e, 0xc0, 0x01, + 0x30, 0x1c, 0xec, 0xa4, 0xe0, 0x9d, 0x20, 0x5f, + 0xc0, 0x1c, 0x30, 0x01, 0xf4, 0xa5, 0xc0, 0x1c, + 0x30, 0x1d, 0xec, 0xa4, 0xe4, 0xa5, 0x90, 0x38, + 0x00, 0x1b, 0xe8, 0xa5, 0xa0, 0x66, 0xb1, 0x3f, + 0xe4, 0xb3, 0xe8, 0xb1, 0xc0, 0x4b, 0x30, 0x44, + 0xf8, 0xb3, 0x60, 0x45, 0xb1, 0x7c, 0x01, 0x20, + 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, 0x72, 0xc5, + 0x00, 0x06, 0x90, 0x55, 0xd0, 0x01, 0x00, 0x40, + 0xa0, 0x55, 0x0f, 0x87, 0x01, 0x46, 0x00, 0x06, + 0x03, 0xef, 0xd0, 0x3f, 0xa0, 0x38, 0xb0, 0x01, + 0xa0, 0x37, 0x80, 0x3f, 0x82, 0x34, 0x80, 0x3f, + 0xf2, 0x1a, 0x80, 0x34, 0x80, 0x3f, 0xf2, 0x1a, + 0xd8, 0x00, 0xd8, 0x40, 0xd8, 0x80, 0xd8, 0xc0, + 0xd9, 0x00, 0xd9, 0x40, 0xd9, 0x80, 0xd9, 0xc0, + 0xda, 0x00, 0xda, 0x40, 0xda, 0x80, 0xda, 0xc0, + 0xdb, 0x00, 0xdb, 0x40, 0xdb, 0x80, 0xdb, 0xc0, + 0xdc, 0x00, 0xdc, 0x40, 0xdc, 0x80, 0xdc, 0xc0, + 0xdd, 0x00, 0xdd, 0x40, 0xdd, 0x80, 0xdd, 0xc0, + 0xde, 0x00, 0xde, 0x40, 0xde, 0x80, 0xde, 0xc0, + 0xdf, 0x00, 0xdf, 0x40, 0xdf, 0x80, 0xdf, 0xc0, + 0xde, 0x80, 0xde, 0xc1, 0x00, 0x28, 0xd0, 0x60, + 0x6e, 0x81, 0x80, 0x00, 0x80, 0x05, 0x00, 0xe3, + 0xd1, 0x88, 0x00, 0x73, 0xd5, 0x80, 0x60, 0x06, + 0xb1, 0xbc, 0x00, 0xfa, 0xd0, 0x80, 0x60, 0x06, + 0x00, 0x26, 0xd0, 0x6c, 0x6e, 0x81, 0x04, 0x32, + 0xd2, 0x00, 0x00, 0xee, 0xd1, 0x94, 0x60, 0x06, + 0x00, 0xed, 0xd0, 0x50, 0x6e, 0x81, 0x00, 0x22, + 0xd0, 0x70, 0x6e, 0x81, 0x00, 0xee, 0xd0, 0x74, + 0x6e, 0x81, 0xd0, 0x4c, 0x6e, 0x81, 0xd0, 0x02, + 0x00, 0xef, 0xd0, 0x6c, 0x60, 0x01, 0xd0, 0x03, + 0x00, 0xef, 0xd0, 0x70, 0x60, 0x01, 0x00, 0xe0, + 0xd0, 0x48, 0xd0, 0x02, 0x60, 0x01, 0x00, 0x32, + 0xd6, 0xf0, 0xa0, 0x1c, 0x00, 0x21, 0xd0, 0x60, + 0xa0, 0x76, 0x00, 0x34, 0xd5, 0x48, 0x80, 0x3f, + 0x00, 0x23, 0xd0, 0x5c, 0x00, 0x4a, 0xd0, 0x72, + 0x70, 0x40, 0x00, 0x06, 0x00, 0x22, 0xd1, 0xa4, + 0x6e, 0xc6, 0xd0, 0x58, 0x6e, 0xc1, 0xd0, 0xc9, + 0x00, 0xed, 0xd0, 0x54, 0x60, 0xc1, 0x00, 0x22, + 0xd0, 0x40, 0x60, 0xc1, 0x00, 0x22, 0xd0, 0x60, + 0x60, 0xc1, 0x82, 0x34, 0x80, 0x3f, 0xd6, 0xd9, + 0x01, 0x20, 0xd6, 0x22, 0x16, 0x08, 0xd0, 0x5e, + 0xd0, 0x2c, 0x60, 0x40, 0xd0, 0x70, 0x01, 0x74, + 0xd6, 0x00, 0x60, 0x01, 0x00, 0x2b, 0xd4, 0x10, + 0x00, 0x27, 0xd4, 0x60, 0x00, 0x2b, 0xd0, 0x90, + 0xc0, 0xc2, 0xd1, 0x08, 0xd1, 0x44, 0xa1, 0x50, + 0x00, 0x21, 0xd0, 0xb6, 0xd0, 0xd7, 0x00, 0x29, + 0xd0, 0x04, 0x64, 0x00, 0xb0, 0x3c, 0x64, 0x40, + 0x80, 0x34, 0x80, 0x3f, 0xd0, 0x40, 0x00, 0x35, + 0xd0, 0x00, 0x60, 0x01, 0xd0, 0x48, 0x6e, 0x81, + 0xd0, 0x44, 0x6e, 0x81, 0x00, 0x64, 0xd1, 0x80, + 0x6e, 0x86, 0x01, 0x3c, 0xd2, 0x39, 0xe0, 0x46, + 0xd0, 0x00, 0xd0, 0x40, 0xd0, 0x80, 0xd0, 0xc0, + 0xd1, 0x00, 0xd1, 0x40, 0xd1, 0x80, 0xd1, 0xc0, + 0xd2, 0x00, 0xd2, 0x40, 0xd2, 0x80, 0xd2, 0xc0, + 0xd3, 0x00, 0xd3, 0x40, 0xd3, 0x80, 0xd3, 0xc0, + 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, + 0xd5, 0x00, 0xd5, 0x40, 0xd5, 0x80, 0xd5, 0xc0, + 0xd6, 0x00, 0xd6, 0x40, 0xd6, 0x80, 0xd6, 0xc0, + 0xd7, 0x00, 0xd7, 0x40, 0xd7, 0x80, 0xd7, 0xc0, + 0x0f, 0xc5, 0x50, 0x00, 0x01, 0x46, 0x00, 0x06, + 0xde, 0x80, 0xde, 0xc1, 0x03, 0x2f, 0xd0, 0x33, + 0xa0, 0x38, 0xb0, 0x01, 0xa0, 0x37, 0x80, 0x3f, + 0x08, 0x20, 0xdf, 0x00, 0x82, 0x34, 0x80, 0x3f, + 0x00, 0xee, 0xd0, 0x08, 0x77, 0xc0, 0xb0, 0x04, + 0x77, 0x80, 0xb0, 0x04, 0xc0, 0x5f, 0x30, 0x5e, + 0x60, 0x40, 0xd7, 0x00, 0xb7, 0x01, 0x80, 0x34, + 0x80, 0x3f, 0x00, 0x60, 0xd0, 0x80, 0x00, 0xec, + 0xd0, 0x40, 0x60, 0x81, 0xb0, 0x7c, 0x60, 0x81, + 0x00, 0xa0, 0xd0, 0x80, 0xb0, 0x74, 0x60, 0x81, + 0xb0, 0x7c, 0x60, 0x81, 0x00, 0x68, 0xd0, 0x80, + 0x6e, 0x82, 0x00, 0xef, 0xd0, 0x8c, 0x6e, 0x82, + 0x00, 0x06, 0xd0, 0x11, 0xa0, 0x38, 0x80, 0x3f, + 0x08, 0x20, 0xd0, 0x40, 0x10, 0x48, 0xa0, 0x4a, + 0xa0, 0x5b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, + 0xa0, 0x27, 0xa0, 0x0a, 0x90, 0x4d, 0x0f, 0xff, + 0xd8, 0x1f, 0x40, 0x40, 0xa0, 0x4d, 0x80, 0x0a, + 0x80, 0x07, 0x80, 0x1b, 0x80, 0x27, 0x00, 0x60, + 0xd0, 0x00, 0xa0, 0x09, 0x80, 0x28, 0x01, 0x20, + 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, + 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, + 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x29, + 0x80, 0x2b, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, + 0x80, 0x3f, 0x01, 0xb0, 0xd0, 0x10, 0xa0, 0x37, + 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, + 0x00, 0xea, 0xd0, 0x00, 0xd0, 0x4e, 0x0f, 0x0b, + 0x70, 0x40, 0x00, 0x06, 0x00, 0x21, 0xd0, 0x88, + 0x00, 0xe1, 0xd0, 0x60, 0x60, 0x81, 0x00, 0x2b, + 0xd0, 0x80, 0x00, 0xe0, 0xd0, 0x6c, 0x60, 0x81, + 0xb0, 0x7c, 0x00, 0x27, 0xd0, 0xa0, 0x60, 0x81, + 0xb0, 0x7c, 0xd0, 0x82, 0x60, 0x81, 0xb0, 0x7c, + 0xd0, 0x85, 0x60, 0x81, 0xb0, 0x7c, 0x03, 0xaa, + 0xd0, 0x98, 0x60, 0x81, 0xb0, 0x7c, 0x6e, 0x81, + 0x00, 0x27, 0xd0, 0x40, 0x6e, 0x81, 0xb0, 0x7c, + 0x6e, 0x81, 0xb0, 0x7c, 0x6e, 0x81, 0x00, 0x27, + 0xd1, 0x90, 0x6e, 0x86, 0x00, 0x21, 0xd1, 0xb8, + 0x6e, 0x86, 0x00, 0x66, 0xd1, 0xa0, 0xd0, 0x00, + 0x01, 0x26, 0xd0, 0x58, 0x30, 0x01, 0x60, 0x06, + 0x00, 0xed, 0xd1, 0xbc, 0x6e, 0x86, 0x00, 0xec, + 0xd1, 0xb8, 0x6e, 0x86, 0xb1, 0x84, 0x6e, 0x86, + 0x00, 0xee, 0xd1, 0x84, 0x70, 0x46, 0x00, 0x65, + 0xd1, 0x94, 0x60, 0x46, 0x00, 0x64, 0xd1, 0xbc, + 0x6e, 0x86, 0x00, 0x65, 0xd1, 0x80, 0x6e, 0x86, + 0xb1, 0xbc, 0x6e, 0x86, 0xb1, 0xbc, 0x6e, 0x86, + 0x00, 0xed, 0xd1, 0xa8, 0x6e, 0x86, 0xd0, 0x0e, + 0xb1, 0xbc, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, + 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x06, 0x00, 0x28, + 0xd1, 0xa4, 0x6e, 0x86, 0x00, 0x27, 0xd1, 0x98, + 0x6e, 0x86, 0x00, 0x64, 0xd1, 0xa4, 0x6e, 0x86, + 0xd2, 0x01, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, + 0x00, 0x64, 0xd1, 0x80, 0x70, 0x46, 0x6e, 0x86, + 0x00, 0xef, 0xd1, 0x98, 0x70, 0x86, 0x08, 0x20, + 0xd0, 0xcf, 0x30, 0xc1, 0xea, 0x42, 0xd0, 0x81, + 0x00, 0x21, 0xd1, 0xa8, 0x60, 0x86, 0x00, 0xed, + 0xd1, 0xa0, 0x6e, 0xc6, 0x00, 0x65, 0xd1, 0x98, + 0x6e, 0xc6, 0x00, 0x22, 0xd0, 0x00, 0xa0, 0x05, + 0x80, 0x40, 0x00, 0xc6, 0x01, 0x73, 0xd4, 0x3d, + 0xe0, 0x46, 0x50, 0x00, 0x08, 0x20, 0xd0, 0x00, + 0x5f, 0x00, 0x00, 0x64, 0xd0, 0x60, 0x70, 0xc1, + 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0xb0, 0x7c, + 0x71, 0xc1, 0xc0, 0x87, 0x30, 0x86, 0xf9, 0x83, + 0x10, 0xee, 0xe9, 0x76, 0x10, 0xe1, 0xe9, 0x76, + 0xe2, 0x57, 0x00, 0x63, 0xd0, 0xbf, 0x72, 0x06, + 0xb1, 0xbc, 0x41, 0x82, 0x02, 0x1b, 0xe9, 0x8d, + 0x72, 0x86, 0xb1, 0xbc, 0x41, 0x82, 0xd0, 0x75, + 0x30, 0x48, 0xe9, 0xfe, 0xb0, 0x7f, 0xea, 0x00, + 0x02, 0x1c, 0xe9, 0x96, 0x15, 0xa3, 0xea, 0x57, + 0x10, 0xf0, 0xe9, 0x9a, 0x10, 0xfa, 0xf9, 0xa1, + 0x15, 0xa3, 0xea, 0x57, 0x00, 0x21, 0xd0, 0x4c, + 0x70, 0x41, 0x10, 0x61, 0xfa, 0x57, 0x00, 0xed, + 0xd0, 0x08, 0x70, 0x40, 0xd0, 0x85, 0x40, 0x42, + 0x60, 0x40, 0x00, 0x64, 0xd0, 0x64, 0x62, 0x01, + 0x12, 0x2b, 0xe9, 0xeb, 0x12, 0x3b, 0xe9, 0xd5, + 0x00, 0xec, 0xd0, 0x40, 0x61, 0x81, 0x12, 0x2d, + 0xe9, 0xbf, 0x12, 0x30, 0xe9, 0xd4, 0x12, 0x36, + 0xe9, 0xd4, 0x12, 0x3a, 0xe9, 0xd4, 0xd0, 0x62, + 0x30, 0x48, 0xe9, 0xf2, 0x12, 0x2e, 0xe9, 0xf9, + 0xe1, 0x76, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x40, + 0xd0, 0x85, 0x40, 0x42, 0x60, 0x40, 0xb0, 0x08, + 0x00, 0x21, 0xd0, 0x41, 0x60, 0x40, 0x00, 0x64, + 0xd0, 0x60, 0x62, 0x01, 0xf2, 0x5a, 0x00, 0xed, + 0xd0, 0x20, 0xd0, 0x41, 0x60, 0x40, 0x10, 0xe1, + 0xea, 0x3a, 0xe2, 0x57, 0xe2, 0x53, 0x10, 0xee, + 0xf9, 0xe9, 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, + 0x97, 0x2e, 0xc7, 0x5c, 0xa7, 0x66, 0x81, 0x34, + 0x80, 0x3f, 0x00, 0x21, 0xd0, 0x01, 0xa0, 0x38, + 0x00, 0xc6, 0x00, 0x21, 0xd0, 0x15, 0x0b, 0x09, + 0x00, 0x4d, 0xb0, 0x01, 0xed, 0xe5, 0xd2, 0x1a, + 0xe1, 0xec, 0xf1, 0x18, 0x00, 0xec, 0xd0, 0x40, + 0x71, 0x81, 0xd0, 0x4e, 0x60, 0x46, 0xe2, 0x54, + 0xc0, 0x0a, 0x10, 0x06, 0x52, 0x80, 0x00, 0xed, + 0xd0, 0x40, 0x62, 0x81, 0xe2, 0x53, 0x00, 0x64, + 0xd0, 0x60, 0x62, 0x01, 0xf2, 0x5a, 0xe1, 0x70, + 0x12, 0xa3, 0xf6, 0x57, 0x15, 0xa1, 0xfa, 0x57, + 0x12, 0xa0, 0xea, 0x23, 0x00, 0x65, 0xd1, 0x1c, + 0xd0, 0x75, 0x30, 0x48, 0xea, 0x0a, 0xb1, 0x3c, + 0x71, 0x04, 0x11, 0x20, 0xfa, 0x11, 0x00, 0xec, + 0xd0, 0x40, 0x61, 0x81, 0xe2, 0x57, 0x12, 0xa1, + 0xea, 0x33, 0x00, 0xe2, 0xd0, 0x60, 0x70, 0x01, + 0xb0, 0x7c, 0x70, 0x41, 0x10, 0x0c, 0x50, 0x40, + 0x0c, 0x30, 0xd0, 0x00, 0x31, 0x01, 0xee, 0x21, + 0x21, 0x00, 0xe6, 0x57, 0xe2, 0x23, 0x31, 0x00, + 0xfe, 0x57, 0xd0, 0x75, 0x30, 0x48, 0xea, 0x28, + 0xf2, 0x5a, 0xe2, 0x0d, 0x00, 0xec, 0xd0, 0x40, + 0x71, 0x81, 0x00, 0x63, 0xd1, 0x3f, 0xb1, 0xbc, + 0x41, 0x84, 0x61, 0x81, 0xd0, 0x50, 0x60, 0x46, + 0xe2, 0x57, 0x00, 0xed, 0xd0, 0x7c, 0x70, 0x41, + 0x08, 0x20, 0xd0, 0x00, 0x10, 0x08, 0xe2, 0x1c, + 0xd2, 0x84, 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, + 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x46, 0x82, 0x34, + 0x80, 0x3f, 0xc7, 0x5e, 0x97, 0x2e, 0x81, 0x34, + 0x80, 0x3f, 0x02, 0xe8, 0xd0, 0x30, 0xa0, 0x37, + 0xa0, 0x38, 0x08, 0x20, 0xdf, 0x00, 0x80, 0x73, + 0x80, 0x3f, 0x00, 0xc6, 0x01, 0x7a, 0xde, 0x1a, + 0xe0, 0x46, 0xf2, 0x5a, 0x00, 0x64, 0xd0, 0x60, + 0x62, 0x01, 0x02, 0x3c, 0xda, 0x89, 0xe0, 0x46, + 0x00, 0x28, 0xd0, 0x64, 0x70, 0x81, 0x00, 0x22, + 0xd0, 0x00, 0x50, 0x80, 0x60, 0x81, 0x0f, 0xc5, + 0x50, 0x00, 0x50, 0x00, 0x00, 0xed, 0xd1, 0xa4, + 0x72, 0x86, 0x00, 0xef, 0xd1, 0x90, 0x70, 0x46, + 0x10, 0x5c, 0x10, 0x65, 0xed, 0x7d, 0xd0, 0x46, + 0xc0, 0x0a, 0x10, 0x40, 0x60, 0x46, 0x00, 0x22, + 0xd0, 0x73, 0x30, 0x54, 0xe9, 0x8e, 0x12, 0xa4, + 0xe9, 0xb5, 0x15, 0x20, 0xe9, 0xc0, 0xb0, 0x7b, + 0xe9, 0xc3, 0xb0, 0x41, 0xe9, 0xc9, 0xc0, 0x54, + 0x10, 0x5c, 0x10, 0x6e, 0xe9, 0xc6, 0xe1, 0xb5, + 0x00, 0x28, 0xd1, 0xb0, 0xd0, 0x00, 0x60, 0x06, + 0x12, 0xa4, 0xf9, 0xb2, 0x00, 0xed, 0xd1, 0x9c, + 0x62, 0x86, 0xd2, 0x80, 0x00, 0xed, 0xd1, 0xa4, + 0x62, 0x86, 0xd0, 0x02, 0x00, 0xec, 0xd1, 0xbc, + 0x60, 0x06, 0x00, 0x64, 0xd1, 0xa0, 0x72, 0x06, + 0x12, 0x21, 0xf9, 0xa6, 0xd2, 0x0d, 0x62, 0x06, + 0x00, 0xed, 0xd1, 0xa0, 0x61, 0x86, 0xd0, 0x0e, + 0x00, 0xed, 0xd1, 0xac, 0x60, 0x06, 0xb1, 0xbc, + 0x60, 0x06, 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x06, + 0x01, 0x7e, 0xd2, 0x31, 0xe1, 0xcb, 0x01, 0x46, + 0x90, 0x49, 0x00, 0x60, 0xd0, 0x00, 0x50, 0x40, + 0xa0, 0x49, 0x80, 0x3f, 0x00, 0xc6, 0x0c, 0x09, + 0x05, 0x0d, 0xe1, 0x70, 0x01, 0xbe, 0xde, 0x41, + 0xe1, 0xcb, 0x01, 0xbb, 0xd8, 0x10, 0xe1, 0xcb, + 0x01, 0xbd, 0xd8, 0x0b, 0xe1, 0xcb, 0x03, 0xb8, + 0xda, 0x10, 0x01, 0x46, 0x90, 0x49, 0x00, 0x60, + 0xd1, 0x00, 0x50, 0x44, 0x30, 0x44, 0xa0, 0x49, + 0x80, 0x3f, 0x00, 0xc6, 0xe0, 0x46, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x01, 0xfa, 0xd2, 0x3d, + 0x00, 0x25, 0xdc, 0xd8, 0xf0, 0x4a, 0x00, 0x26, + 0xd0, 0x18, 0xd0, 0x40, 0x60, 0x40, 0x00, 0x28, + 0xd0, 0x24, 0x70, 0x40, 0xd0, 0x82, 0x50, 0x42, + 0x60, 0x40, 0x00, 0xec, 0xd0, 0xa4, 0x70, 0xc2, + 0x10, 0xe0, 0xf9, 0x81, 0x00, 0xec, 0xd1, 0x98, + 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, + 0xe9, 0x8e, 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x81, + 0xd0, 0x40, 0x00, 0xe6, 0xd0, 0x10, 0x60, 0x40, + 0xb0, 0x3c, 0x60, 0x40, 0xb0, 0x3c, 0x60, 0x40, + 0xd0, 0xe0, 0x00, 0xea, 0xd0, 0x40, 0x00, 0xe8, + 0xd0, 0x82, 0x01, 0x46, 0x70, 0x01, 0xb0, 0x7c, + 0x60, 0x02, 0xb0, 0xbc, 0x00, 0x06, 0x00, 0xc6, + 0xb0, 0xc1, 0xed, 0x9b, 0x80, 0x49, 0xd6, 0x44, + 0xd5, 0x43, 0x00, 0xe0, 0xd1, 0x80, 0x00, 0x06, + 0x0b, 0x09, 0x01, 0x0d, 0x0b, 0x09, 0x61, 0x06, + 0xb1, 0xbc, 0x01, 0x4d, 0x09, 0x09, 0x61, 0x46, + 0xb1, 0xbc, 0x00, 0xcd, 0x09, 0x09, 0x10, 0xe4, + 0xed, 0xb8, 0x60, 0xc6, 0xb1, 0xbc, 0x00, 0xcd, + 0x60, 0xc6, 0x00, 0xed, 0xd0, 0x04, 0x70, 0x00, + 0x10, 0x20, 0xf9, 0xd3, 0x10, 0xe3, 0xe9, 0xc4, + 0x10, 0xe6, 0xf9, 0xd3, 0x01, 0x46, 0x90, 0x10, + 0x00, 0x20, 0xd0, 0x44, 0x50, 0x40, 0x00, 0xc6, + 0xa0, 0x50, 0x00, 0xa0, 0xd0, 0x00, 0xa0, 0x05, + 0x80, 0x40, 0x00, 0xed, 0xd1, 0xa4, 0xd0, 0x04, + 0x60, 0x06, 0x00, 0xee, 0xd1, 0xac, 0x73, 0x86, + 0x10, 0xe3, 0xe5, 0xde, 0xe9, 0xe3, 0x00, 0xe7, + 0xd0, 0x40, 0x00, 0xae, 0xd0, 0xbb, 0xe1, 0xe7, + 0x01, 0x24, 0xd0, 0x6b, 0x00, 0xea, 0xd0, 0xa6, + 0xe1, 0xe7, 0x01, 0x21, 0xd0, 0x7b, 0x00, 0xe8, + 0xd0, 0x90, 0x13, 0xa0, 0xf9, 0xea, 0xc0, 0x42, + 0x00, 0xe0, 0xd1, 0xa8, 0x60, 0x46, 0xb1, 0x98, + 0x0b, 0xc9, 0x00, 0x4d, 0x09, 0x09, 0x10, 0x44, + 0x00, 0x8d, 0x20, 0x42, 0x10, 0x5f, 0x60, 0x46, + 0xb1, 0xb8, 0x00, 0x90, 0xea, 0x17, 0x0a, 0x89, + 0x00, 0x8d, 0x60, 0x86, 0xb1, 0xbc, 0x08, 0x49, + 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, 0x08, 0x49, + 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, 0xea, 0x0b, + 0x00, 0xe8, 0xd1, 0x80, 0xf2, 0xb0, 0x10, 0x60, + 0xfa, 0x17, 0x08, 0x49, 0x00, 0xe0, 0xd1, 0xa4, + 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, 0xea, 0x1b, + 0x00, 0xe9, 0xd1, 0x80, 0xf2, 0xb0, 0x10, 0x60, + 0xea, 0x1b, 0x00, 0xe0, 0xd1, 0x88, 0xd0, 0x40, + 0x60, 0x46, 0xd0, 0x00, 0x00, 0xe0, 0xd1, 0xa8, + 0x70, 0x46, 0x00, 0xef, 0xd1, 0x9c, 0x70, 0x86, + 0xb0, 0xb0, 0xee, 0x25, 0xd0, 0x81, 0x00, 0x90, + 0xea, 0x28, 0x20, 0x01, 0x10, 0x41, 0x10, 0x9f, + 0x10, 0xa0, 0xee, 0x25, 0x10, 0x1c, 0x00, 0x65, + 0xd1, 0xa8, 0x60, 0x06, 0x01, 0xb4, 0xd4, 0x3a, + 0xe0, 0x46, 0x50, 0x00, 0x02, 0x31, 0xdc, 0x13, + 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x0c, 0x09, + 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, + 0x30, 0x54, 0xe9, 0xea, 0xb0, 0x7d, 0xfa, 0x05, + 0x09, 0x09, 0x01, 0xcd, 0x11, 0xe1, 0xf9, 0xc7, + 0x80, 0x09, 0x80, 0x27, 0x0a, 0x09, 0xd6, 0x45, + 0x00, 0xe1, 0xd1, 0xa0, 0x00, 0x4d, 0x60, 0x46, + 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, + 0x00, 0x50, 0xe9, 0x91, 0xd4, 0x01, 0xb1, 0xbc, + 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0x00, 0xe0, + 0xd1, 0x80, 0x08, 0x89, 0x00, 0x4d, 0x08, 0x89, + 0x10, 0x4c, 0x71, 0x06, 0x21, 0x01, 0x61, 0x06, + 0xb1, 0xbc, 0x00, 0x4d, 0x0b, 0x49, 0x10, 0x4c, + 0x71, 0x46, 0x21, 0x41, 0x61, 0x46, 0xb1, 0xb0, + 0x00, 0x4d, 0x10, 0x5f, 0x60, 0x46, 0xb1, 0xbc, + 0x0a, 0x09, 0x00, 0x4d, 0x10, 0x4a, 0x70, 0x86, + 0x20, 0x81, 0x60, 0x86, 0x00, 0xe1, 0xd1, 0xac, + 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x09, 0x49, 0x00, 0x8d, 0x60, 0x86, 0xc0, 0x02, + 0x00, 0xe0, 0xd1, 0xa8, 0x70, 0xc6, 0x10, 0xc0, + 0xd0, 0x20, 0x30, 0x01, 0x10, 0xc0, 0x60, 0xc6, + 0xe1, 0x75, 0x11, 0xe2, 0xf9, 0x75, 0x00, 0xe2, + 0xd1, 0x80, 0x08, 0xc9, 0x00, 0x4d, 0x60, 0x46, + 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, + 0xb1, 0xbc, 0x10, 0x60, 0xf9, 0xd7, 0xb1, 0xb4, + 0xe1, 0xde, 0xd2, 0x03, 0x0a, 0x09, 0x00, 0x4d, + 0x60, 0x46, 0xb1, 0xbc, 0xb2, 0x01, 0xf9, 0xd8, + 0x0b, 0xc9, 0x00, 0x4d, 0x10, 0x49, 0x10, 0x56, + 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x89, 0x00, 0x4d, + 0x10, 0x4a, 0x10, 0x56, 0x60, 0x46, 0xe1, 0x75, + 0x0b, 0x2c, 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0x77, + 0x00, 0xe0, 0xd0, 0x6c, 0x00, 0xe0, 0xd1, 0x80, + 0xd0, 0x0a, 0xf1, 0xfe, 0x00, 0xe1, 0xd1, 0xb0, + 0xd0, 0x02, 0xf1, 0xfe, 0x00, 0xe0, 0xd1, 0x80, + 0x76, 0x86, 0xb1, 0xbc, 0x73, 0x46, 0xe2, 0x3c, + 0x70, 0x81, 0x60, 0x86, 0xb1, 0xbc, 0xb0, 0x7c, + 0xb0, 0x01, 0xed, 0xfe, 0x0f, 0xc5, 0x00, 0xe1, + 0xd1, 0xa0, 0x70, 0x46, 0xd0, 0x8f, 0x40, 0x42, + 0x00, 0x25, 0xd0, 0xe0, 0x00, 0x24, 0xd1, 0x20, + 0x10, 0x6a, 0xea, 0x1e, 0x00, 0x66, 0xd0, 0xe0, + 0x00, 0x62, 0xd1, 0x00, 0x10, 0x66, 0xea, 0x1e, + 0x00, 0x6e, 0xd0, 0xc0, 0x10, 0x64, 0xea, 0x1e, + 0x00, 0x2b, 0xd0, 0xd0, 0x00, 0x29, 0xd1, 0x00, + 0x00, 0xe0, 0xd1, 0x80, 0x76, 0x86, 0x16, 0xa0, + 0xe9, 0xee, 0x30, 0xda, 0xe5, 0xee, 0xb1, 0xbc, + 0x73, 0x46, 0x13, 0x60, 0xe9, 0xee, 0x31, 0x0d, + 0xe5, 0xee, 0xd0, 0x82, 0xb1, 0xbc, 0x70, 0x46, + 0x10, 0x60, 0xe9, 0xee, 0xb0, 0x81, 0xee, 0x2c, + 0x00, 0xe0, 0xd0, 0x40, 0x00, 0xe0, 0xd1, 0xac, + 0xd0, 0x0a, 0xf1, 0xfe, 0x00, 0xe1, 0xd0, 0x70, + 0xd0, 0x02, 0xf1, 0xfe, 0x00, 0xec, 0xd1, 0x98, + 0xd0, 0x40, 0x60, 0x46, 0x00, 0xe0, 0xd0, 0x8c, + 0x70, 0x82, 0x00, 0x21, 0xd0, 0x70, 0x60, 0x81, + 0xd0, 0x40, 0x00, 0x25, 0xd0, 0x20, 0x30, 0x1a, + 0xfa, 0x50, 0x00, 0x23, 0xd0, 0x30, 0x30, 0x0d, + 0xfa, 0x50, 0xd0, 0x41, 0x00, 0x21, 0xd1, 0x84, + 0x60, 0x46, 0xb6, 0xb1, 0x16, 0x9c, 0x01, 0x7a, + 0xde, 0x1a, 0xe0, 0x46, 0x02, 0x31, 0xdc, 0x13, + 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x00, 0xec, + 0xd0, 0xa8, 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x77, + 0x00, 0xec, 0xd1, 0x9c, 0xd0, 0x41, 0x60, 0x46, + 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x84, 0xd0, 0x40, + 0x60, 0x46, 0xe1, 0x77, 0x0b, 0x49, 0x00, 0xe2, + 0xd1, 0xa0, 0x00, 0x4d, 0x10, 0x5f, 0x00, 0x6f, + 0xd0, 0xff, 0x40, 0x43, 0x60, 0x46, 0xb1, 0xbc, + 0x0b, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x61, + 0xf9, 0x9b, 0xd3, 0xc2, 0x00, 0xec, 0xd1, 0xbc, + 0x63, 0xc6, 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, + 0xe5, 0x9c, 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, + 0xd0, 0x72, 0x30, 0x54, 0xf9, 0xa9, 0x0b, 0xa0, + 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0xa0, 0x00, 0xec, + 0xd1, 0x9c, 0xd0, 0x40, 0x60, 0x46, 0x01, 0x7a, + 0xde, 0x1a, 0xe0, 0x46, 0x0b, 0x09, 0x00, 0x4d, + 0x0b, 0x09, 0x00, 0x4d, 0x0a, 0x09, 0x01, 0x4d, + 0x0a, 0x09, 0x00, 0x4d, 0x01, 0x59, 0xe9, 0x96, + 0x09, 0x09, 0x00, 0x4d, 0x10, 0x5f, 0x10, 0x61, + 0xf9, 0x96, 0x09, 0x09, 0x01, 0x4d, 0x11, 0x5f, + 0x0b, 0xc9, 0x00, 0x4d, 0xc0, 0x01, 0x10, 0x5f, + 0x11, 0x4e, 0x51, 0x41, 0x08, 0x49, 0x00, 0x4d, + 0x0b, 0xc9, 0x10, 0x0f, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0xed, 0xd1, 0xb6, 0x01, 0x46, 0x00, 0x06, + 0xa0, 0x3c, 0xa1, 0x7d, 0x60, 0x06, 0x00, 0xc6, + 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, + 0xe0, 0x46, 0x50, 0x00, 0x00, 0xec, 0xd0, 0xac, + 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x70, 0x00, 0xec, + 0xd1, 0xa0, 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, + 0x10, 0xe0, 0xe9, 0x7f, 0xd0, 0x40, 0x60, 0x46, + 0xe1, 0x70, 0x0a, 0x89, 0x0b, 0xcd, 0x00, 0xe3, + 0xd1, 0x80, 0x6b, 0xc6, 0x08, 0xc9, 0x05, 0x8d, + 0x15, 0xa3, 0xee, 0x6e, 0x15, 0xa0, 0xea, 0x6e, + 0x90, 0x4d, 0xd0, 0x9f, 0xd0, 0xdf, 0x40, 0x81, + 0x10, 0x55, 0x40, 0xc1, 0x01, 0x46, 0x82, 0x34, + 0x80, 0x3f, 0xc8, 0x1d, 0x81, 0x34, 0x80, 0x3f, + 0x00, 0xc6, 0xd1, 0x23, 0x31, 0x03, 0x11, 0x02, + 0x38, 0x04, 0xb0, 0x8d, 0x10, 0x9d, 0x28, 0x02, + 0xc0, 0x60, 0x00, 0x65, 0xd1, 0x94, 0x71, 0x06, + 0x68, 0x06, 0x30, 0x44, 0x00, 0xed, 0xd1, 0xa8, + 0x70, 0x06, 0x10, 0x20, 0xe9, 0xb0, 0x00, 0xee, + 0xd0, 0xc0, 0x70, 0xc3, 0x20, 0x43, 0xb0, 0x01, + 0xf9, 0xac, 0x60, 0x06, 0x00, 0x64, 0xd1, 0xbc, + 0x71, 0x06, 0xc0, 0x04, 0x21, 0x01, 0x61, 0x06, + 0x10, 0x20, 0xf5, 0xbb, 0x11, 0x20, 0xe5, 0xbb, + 0xb0, 0x41, 0x00, 0x65, 0xd1, 0x80, 0x71, 0x06, + 0x21, 0x01, 0x61, 0x06, 0x00, 0xed, 0xd1, 0xac, + 0x71, 0x06, 0x15, 0xa1, 0xe9, 0xcb, 0xb1, 0x3f, + 0x61, 0x06, 0x15, 0xa3, 0xf9, 0xd6, 0xd0, 0xbf, + 0xe1, 0xd3, 0xd0, 0x40, 0x60, 0x46, 0xb1, 0xbc, + 0x70, 0x86, 0x61, 0x06, 0x31, 0x02, 0xe5, 0xd3, + 0x20, 0x84, 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x86, + 0xd9, 0x40, 0x00, 0xec, 0xd1, 0x94, 0x79, 0x06, + 0xb1, 0x84, 0x78, 0xc6, 0xc0, 0x63, 0x30, 0x64, + 0xe9, 0xf8, 0x00, 0xa7, 0xd0, 0xff, 0x7a, 0x63, + 0x00, 0x65, 0xd0, 0x00, 0x71, 0x00, 0x31, 0x29, + 0xe5, 0xf8, 0xc0, 0x63, 0xc8, 0xc1, 0xb0, 0x78, + 0x40, 0x43, 0xc0, 0xa4, 0x30, 0x81, 0xe9, 0xf2, + 0x7a, 0x41, 0x31, 0x29, 0xf5, 0xe8, 0x21, 0x29, + 0x61, 0x00, 0xb8, 0xfc, 0x79, 0x63, 0xb8, 0xfc, + 0x48, 0xc3, 0x68, 0xc6, 0x00, 0xed, 0xd1, 0xb8, + 0x69, 0x46, 0x80, 0x28, 0x0b, 0xc9, 0x00, 0x4d, + 0x08, 0x49, 0x10, 0x41, 0x00, 0xe3, 0xd1, 0x84, + 0x00, 0x8d, 0x20, 0x42, 0x60, 0x46, 0x00, 0xee, + 0xd1, 0xa4, 0x70, 0x86, 0x10, 0xa1, 0xee, 0x18, + 0xe6, 0x6b, 0x90, 0x86, 0x00, 0x90, 0xea, 0x18, + 0x00, 0xed, 0xd0, 0x1c, 0x70, 0x80, 0xb0, 0x81, + 0xe6, 0x6b, 0x60, 0x80, 0xb1, 0xa8, 0x70, 0x86, + 0x10, 0xa0, 0xfa, 0x6b, 0x00, 0x21, 0xd0, 0x38, + 0x70, 0x80, 0x10, 0xa0, 0xfa, 0x6b, 0x0f, 0xef, + 0xd0, 0xbf, 0x30, 0x81, 0xfa, 0x22, 0x60, 0x00, + 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, 0x15, 0xa3, + 0xea, 0x6b, 0x00, 0xee, 0xd1, 0x80, 0x79, 0x46, + 0x00, 0xf8, 0xd0, 0x00, 0xc4, 0x40, 0x00, 0xe3, + 0xd1, 0x84, 0x78, 0x46, 0x0f, 0xef, 0xd0, 0x3f, + 0x30, 0x21, 0xea, 0x48, 0x00, 0xe0, 0xd1, 0x90, + 0x78, 0x06, 0xc0, 0xa1, 0x18, 0x43, 0x28, 0x42, + 0x18, 0x43, 0x28, 0x42, 0x18, 0x1e, 0xd8, 0x80, + 0x08, 0x11, 0xea, 0x41, 0x28, 0xa1, 0x18, 0x01, + 0x18, 0x5f, 0x18, 0x60, 0xee, 0x3e, 0xc0, 0x51, + 0x30, 0x62, 0xee, 0x4e, 0xc8, 0x91, 0x18, 0x9f, + 0x00, 0x21, 0xd1, 0xb8, 0xd0, 0x01, 0x60, 0x06, + 0x00, 0xef, 0xd0, 0x10, 0xd0, 0x72, 0x60, 0x40, + 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc8, 0xdc, + 0xc9, 0x1d, 0x81, 0x34, 0x80, 0x3f, 0x00, 0xc6, + 0x38, 0xe4, 0xee, 0x5e, 0xea, 0x52, 0x28, 0xe5, + 0x01, 0x46, 0x90, 0x6d, 0x28, 0xc1, 0x00, 0xc6, + 0x38, 0xe2, 0xf6, 0x6b, 0xdb, 0x08, 0xf1, 0x16, + 0xf1, 0x18, 0x00, 0x21, 0xd1, 0xb4, 0x61, 0x86, + 0xe2, 0x52, 0x01, 0xf7, 0xd0, 0x19, 0xe0, 0x46, + 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, + 0xe0, 0x46, 0x50, 0x00, 0x02, 0x31, 0xdc, 0x13, + 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0xdb, 0x09, + 0x00, 0xe3, 0xd0, 0x1c, 0x6b, 0x00, 0xda, 0xc1, + 0x00, 0xe6, 0xd1, 0x98, 0x70, 0x06, 0xb1, 0x84, + 0x60, 0x06, 0xb1, 0x84, 0x60, 0x06, 0x05, 0x9f, + 0xe9, 0x9f, 0x08, 0x49, 0xd1, 0x17, 0x46, 0x44, + 0x00, 0x4d, 0x10, 0x43, 0x26, 0x41, 0x08, 0xc9, + 0x05, 0xcd, 0xb5, 0xc1, 0xe5, 0xcc, 0xc0, 0x57, + 0x15, 0xc6, 0x25, 0xc1, 0x15, 0xa3, 0xf9, 0x9f, + 0x08, 0x49, 0xd1, 0x0f, 0x46, 0x44, 0x00, 0x4d, + 0x10, 0x44, 0x26, 0x41, 0x08, 0xc9, 0x06, 0x0d, + 0xb6, 0x01, 0xe5, 0xcc, 0xc0, 0x58, 0x16, 0x06, + 0x26, 0x01, 0x08, 0x49, 0x00, 0x4d, 0x10, 0x60, + 0xe9, 0xa6, 0x0a, 0x09, 0x00, 0x4d, 0xe1, 0x9f, + 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, 0xe5, 0xa7, + 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, + 0x30, 0x54, 0xf9, 0xb3, 0xd4, 0x40, 0xf3, 0xb0, + 0xe1, 0xab, 0xb0, 0x7d, 0xf9, 0xb8, 0x02, 0x34, + 0xd2, 0x44, 0xe0, 0x46, 0x00, 0xec, 0xd1, 0xa0, + 0xd0, 0x40, 0x60, 0x46, 0x02, 0x3c, 0xda, 0x89, + 0x00, 0xec, 0xd1, 0x80, 0x70, 0x46, 0xb1, 0xbc, + 0x70, 0x86, 0x30, 0x81, 0xe8, 0x46, 0x15, 0x63, + 0xe9, 0xc9, 0x05, 0x5e, 0xe8, 0x46, 0x01, 0x73, + 0xd4, 0x3d, 0xe0, 0x46, 0xd5, 0x00, 0xb5, 0x01, + 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0xcc, 0xc0, 0xcd, 0x01, + 0xcd, 0x42, 0xcd, 0x83, 0x00, 0xa0, 0xd0, 0x01, + 0xa0, 0x38, 0xc8, 0x7f, 0xc8, 0x06, 0xb1, 0xbe, + 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x58, 0x80, + 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x96, 0xc9, 0x00, + 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, 0xc9, 0x40, + 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x22, 0xc0, 0x65, + 0xc0, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0x80, + 0xf3, 0x92, 0x59, 0x00, 0xf3, 0x96, 0xc9, 0x40, + 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x59, 0x40, + 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x92, 0x58, 0x80, + 0xc0, 0x23, 0xc0, 0x62, 0xd0, 0x88, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, + 0x58, 0xc0, 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, + 0x59, 0xc0, 0xc0, 0x24, 0xc0, 0x67, 0xd0, 0x90, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x00, + 0xf3, 0x92, 0x59, 0x80, 0xf3, 0x96, 0xc9, 0xc0, + 0xf3, 0x96, 0xca, 0x00, 0xf3, 0x92, 0x59, 0xc0, + 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, 0x59, 0x00, + 0xc0, 0x25, 0xc0, 0x64, 0xd0, 0x98, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, + 0x58, 0x80, 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, + 0x59, 0x00, 0xc0, 0x23, 0xc0, 0x64, 0xd0, 0x84, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0xc0, + 0xf3, 0x92, 0x59, 0x40, 0xf3, 0x96, 0xc9, 0x00, + 0xf3, 0x92, 0x5a, 0x40, 0xc0, 0x26, 0xc0, 0x69, + 0xd0, 0xa0, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, + 0xc9, 0x80, 0xf3, 0x92, 0x5a, 0x00, 0xf3, 0x96, + 0xca, 0x40, 0xf3, 0x92, 0x5a, 0x40, 0xf3, 0x96, + 0xca, 0x80, 0xf3, 0x92, 0x59, 0x80, 0xc0, 0x27, + 0xc0, 0x66, 0xd0, 0xa8, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x92, 0x59, 0x00, + 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x58, 0xc0, + 0xc0, 0x22, 0xc0, 0x63, 0xd0, 0x8c, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x92, 0x59, 0x80, 0xc0, 0x25, + 0xc0, 0x66, 0xd0, 0x94, 0x20, 0x86, 0xf3, 0x9a, + 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x59, 0xc0, + 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, 0x5a, 0x80, + 0xc0, 0x28, 0xc0, 0x6a, 0xd0, 0xb0, 0x20, 0x86, + 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, + 0x59, 0x40, 0xc0, 0x29, 0xc0, 0x65, 0xd0, 0xb8, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x80, + 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, 0xca, 0x00, + 0xf3, 0x92, 0x58, 0x80, 0xc0, 0x24, 0xc0, 0x62, + 0xd0, 0x9c, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, + 0x5a, 0x00, 0xc0, 0x27, 0xc0, 0x68, 0xd0, 0xa4, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xca, 0x80, + 0xf3, 0x92, 0x59, 0x80, 0xf3, 0x96, 0xca, 0x40, + 0xf3, 0x92, 0x5a, 0x40, 0xf3, 0x96, 0xc9, 0x40, + 0xf3, 0x92, 0x5a, 0x80, 0xc0, 0x23, 0xc0, 0x6a, + 0xd0, 0xac, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, + 0x59, 0x40, 0xc0, 0x26, 0xc0, 0x65, 0xd0, 0xb4, + 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x00, + 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x29, 0xc0, 0x64, + 0xd0, 0xbc, 0x20, 0x86, 0xf3, 0x9a, 0xc0, 0x33, + 0xc0, 0x74, 0xc0, 0xb5, 0xc0, 0xf6, 0xd0, 0x40, + 0x00, 0xa0, 0xd8, 0x00, 0xa8, 0x38, 0x08, 0x45, + 0x0a, 0x09, 0x00, 0x0d, 0x0f, 0xc5, 0x50, 0x00, + 0x0a, 0x09, 0x00, 0x0d, 0x10, 0x08, 0x0f, 0xc5, + 0x01, 0x46, 0x00, 0x06, 0xa0, 0x7c, 0xa0, 0x3d, + 0x60, 0x42, 0x00, 0xc6, 0x0f, 0xc5, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x14, 0x48, 0xd0, 0x81, + 0x00, 0xef, 0xd1, 0x8c, 0x71, 0x46, 0x11, 0x60, + 0xfb, 0xb1, 0x60, 0x86, 0x71, 0x46, 0x31, 0x42, + 0xfb, 0xb1, 0x00, 0xec, 0xd1, 0x0c, 0x74, 0x84, + 0x00, 0x68, 0xd0, 0x80, 0x70, 0x02, 0x10, 0x20, + 0xfb, 0xc4, 0xc4, 0x82, 0xc4, 0xd2, 0xb4, 0xfc, + 0xda, 0x00, 0xda, 0x4f, 0x0a, 0x09, 0x0f, 0xef, + 0xd0, 0x3f, 0xb4, 0x7f, 0xca, 0x29, 0x1a, 0x18, + 0x4a, 0x00, 0x1a, 0x48, 0x00, 0x8d, 0x2a, 0x42, + 0xd0, 0x03, 0x40, 0x11, 0xfb, 0xe3, 0xb4, 0x44, + 0x00, 0xa0, 0xd0, 0xc0, 0x30, 0xd3, 0xff, 0xe3, + 0xb4, 0xfe, 0x01, 0x46, 0x00, 0x06, 0xaa, 0x3d, + 0xaa, 0x7c, 0x6a, 0x53, 0x00, 0xc6, 0xb4, 0xfe, + 0xb4, 0x7c, 0x1a, 0x61, 0xfb, 0xc8, 0xb4, 0x43, + 0x00, 0xef, 0xd0, 0x3f, 0x40, 0x11, 0xeb, 0xf7, + 0xb0, 0xc4, 0xe7, 0xf7, 0xeb, 0xee, 0x61, 0x53, + 0x64, 0x52, 0x64, 0xc4, 0x00, 0x28, 0xd1, 0x24, + 0x70, 0x04, 0x00, 0x21, 0xd0, 0x80, 0x50, 0x02, + 0x60, 0x04, 0x61, 0x46, 0x0a, 0x09, 0x0f, 0xc5, + 0x50, 0x00, 0x50, 0x00, 0x02, 0x31, 0xdc, 0x13, + 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x01, 0xfa, + 0xd2, 0x3d, 0x00, 0x25, 0xdc, 0xd8, 0xf0, 0x4a, + 0x09, 0x09, 0x01, 0xcd, 0x11, 0xe8, 0xf9, 0xe2, + 0x00, 0xe3, 0xd1, 0x9c, 0x09, 0x09, 0x05, 0xcd, + 0xb5, 0xc1, 0x09, 0x09, 0x00, 0x4d, 0xb0, 0x41, + 0x10, 0x46, 0x25, 0xc1, 0x09, 0x09, 0x06, 0x0d, + 0xb6, 0x01, 0x09, 0x09, 0x00, 0x4d, 0x08, 0x89, + 0xb0, 0x41, 0x10, 0x46, 0x26, 0x01, 0x00, 0x8d, + 0x08, 0x89, 0x10, 0x82, 0xd0, 0x04, 0xc0, 0x55, + 0x00, 0x40, 0x40, 0x40, 0x05, 0x4d, 0x08, 0x49, + 0x0b, 0x0d, 0xd1, 0x00, 0x15, 0x63, 0xe9, 0xa2, + 0xd1, 0x01, 0x55, 0x41, 0xdb, 0x01, 0x4b, 0x15, + 0xa1, 0x1b, 0x08, 0x89, 0x00, 0x4d, 0x08, 0x49, + 0x10, 0x41, 0xd1, 0x19, 0x46, 0x44, 0x26, 0x41, + 0x00, 0xcd, 0x08, 0x49, 0x10, 0xc4, 0x00, 0x4d, + 0x08, 0x49, 0x10, 0x41, 0x20, 0x81, 0xa0, 0x89, + 0x00, 0x4d, 0x10, 0x43, 0x20, 0xc1, 0xa0, 0xe8, + 0x08, 0x49, 0x00, 0x4d, 0x1b, 0x03, 0x5b, 0x01, + 0xbb, 0x3f, 0x6b, 0x06, 0x08, 0x49, 0xb1, 0xbc, + 0x00, 0x4d, 0x60, 0x46, 0x08, 0x49, 0xb1, 0xbc, + 0x0a, 0xcd, 0x1a, 0xc2, 0x4a, 0xd9, 0x1a, 0xde, + 0x6a, 0xc6, 0x08, 0x49, 0xb1, 0xbc, 0x00, 0x4d, + 0x60, 0x46, 0x10, 0x60, 0xea, 0x3e, 0xb1, 0xbc, + 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x08, 0xc9, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x09, 0xc9, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, + 0x0a, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xe2, 0x3e, + 0x11, 0xe3, 0xfa, 0x00, 0x00, 0xe7, 0xd0, 0xc0, + 0xd0, 0x84, 0xb0, 0x81, 0xe6, 0x3e, 0x08, 0x49, + 0x00, 0x4d, 0x60, 0x43, 0xb0, 0xfc, 0x10, 0x60, + 0xe9, 0xe7, 0x10, 0xa3, 0xf9, 0xf4, 0x00, 0xe8, + 0xd1, 0x80, 0xe1, 0xf8, 0x10, 0xa2, 0xf9, 0xfa, + 0x00, 0xe9, 0xd1, 0x80, 0xf2, 0xb0, 0xe1, 0xe7, + 0xd2, 0x3f, 0x0a, 0x09, 0x00, 0x4d, 0xb2, 0x01, + 0xf5, 0xfb, 0xe1, 0xe7, 0x11, 0xe7, 0xfa, 0x3e, + 0xd4, 0x01, 0x00, 0xe1, 0xd0, 0x24, 0x70, 0x00, + 0x10, 0x21, 0xea, 0x0d, 0x15, 0x63, 0xfa, 0x0d, + 0xd4, 0x03, 0x44, 0x2c, 0xb4, 0x3f, 0x00, 0xe6, + 0xd1, 0x90, 0x0b, 0x09, 0x00, 0x4d, 0x09, 0x49, + 0x10, 0x45, 0x00, 0x8d, 0x50, 0x81, 0xd0, 0x40, + 0x10, 0x87, 0x10, 0x98, 0x30, 0x42, 0xf2, 0x61, + 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x09, 0x00, 0x0d, + 0x09, 0x49, 0x00, 0x0d, 0xb4, 0x01, 0xfa, 0x0f, + 0x00, 0xe6, 0xd0, 0x18, 0x30, 0x06, 0xe6, 0x29, + 0x60, 0x46, 0xb1, 0xbc, 0xe2, 0x22, 0x00, 0xe0, + 0xd1, 0x88, 0x70, 0x46, 0x10, 0x63, 0xea, 0x39, + 0x10, 0x64, 0xea, 0x39, 0x00, 0xe6, 0xd1, 0x90, + 0xd0, 0x00, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, + 0xb1, 0xbc, 0x60, 0x06, 0xe2, 0x3e, 0x00, 0xef, + 0xd1, 0x84, 0x70, 0x46, 0x10, 0x60, 0xfa, 0x30, + 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, 0xe6, 0x3f, + 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, + 0x30, 0x54, 0xfa, 0x4b, 0xd4, 0x40, 0xf3, 0xb0, + 0xe2, 0x43, 0xb0, 0x7d, 0xe9, 0x7a, 0x00, 0xec, + 0xd1, 0xa0, 0xd0, 0x40, 0x60, 0x46, 0x02, 0x3c, + 0xda, 0x89, 0x00, 0xec, 0xd1, 0x80, 0x70, 0x46, + 0xb1, 0xbc, 0x70, 0x86, 0x30, 0x81, 0xe8, 0x46, + 0x15, 0x63, 0xea, 0x5e, 0x05, 0x5e, 0xe8, 0x46, + 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, 0x00, 0xe0, + 0xd0, 0x00, 0x70, 0xc0, 0x10, 0xc1, 0x00, 0xe0, + 0xd0, 0x08, 0x70, 0x00, 0x10, 0x23, 0xea, 0x75, + 0xc0, 0x83, 0x10, 0x9d, 0x30, 0xc2, 0x10, 0x9f, + 0x30, 0xc2, 0x00, 0xef, 0xd0, 0xac, 0x70, 0x82, + 0x10, 0xa3, 0xea, 0x75, 0x10, 0xc1, 0xc0, 0x83, + 0x30, 0x81, 0xe6, 0x7e, 0xc0, 0x83, 0x20, 0x81, + 0xf6, 0x7f, 0xd0, 0x40, 0x30, 0x43, 0x0f, 0xc5, + 0xc0, 0x43, 0x0f, 0xc5, 0x00, 0xed, 0xd1, 0xa4, + 0x72, 0x86, 0x15, 0xa3, 0xee, 0x23, 0x15, 0xa1, + 0xe6, 0x23, 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, + 0xd8, 0xc4, 0x15, 0x63, 0xe9, 0x7e, 0x48, 0xd5, + 0x18, 0xde, 0x18, 0xe0, 0xe9, 0xc2, 0x00, 0xed, + 0xd1, 0xb4, 0x79, 0xc6, 0x19, 0xe0, 0xe9, 0x8c, + 0x00, 0xed, 0xd0, 0x3a, 0x79, 0xc6, 0x69, 0xc0, + 0xd9, 0xc0, 0x69, 0xc6, 0x00, 0xed, 0xd0, 0x38, + 0x79, 0x40, 0x19, 0x60, 0xe9, 0x98, 0x00, 0x28, + 0xd0, 0x24, 0x70, 0x40, 0x02, 0x20, 0xd0, 0x80, + 0x50, 0x42, 0x60, 0x40, 0x15, 0xa3, 0xe9, 0x9f, + 0x00, 0xec, 0xd1, 0xb8, 0x79, 0xc6, 0x69, 0x46, + 0xc9, 0x67, 0x00, 0xec, 0xd9, 0xb4, 0x70, 0x66, + 0x00, 0xec, 0xd1, 0xbc, 0x70, 0x06, 0x10, 0x20, + 0xed, 0xbe, 0x10, 0x60, 0xe9, 0xc1, 0x00, 0xe0, + 0xda, 0xa8, 0x7a, 0xaa, 0xc0, 0x2a, 0x10, 0x1f, + 0x00, 0x22, 0xd0, 0xa0, 0x70, 0x82, 0x20, 0x6a, + 0x00, 0x9f, 0xe9, 0xb5, 0x20, 0x40, 0x19, 0x60, + 0xf9, 0xb8, 0xc9, 0x41, 0xb0, 0x48, 0x30, 0x65, + 0xf5, 0xbd, 0xb0, 0x70, 0xed, 0xbe, 0xd9, 0x40, + 0x00, 0xed, 0xd1, 0xbc, 0x69, 0x46, 0x69, 0x66, + 0x12, 0xa4, 0xea, 0x21, 0x00, 0xec, 0xd1, 0xbc, + 0x73, 0xc6, 0x15, 0xa3, 0xe9, 0xdf, 0x33, 0xe3, + 0xe5, 0xd3, 0xed, 0xd2, 0x63, 0xc6, 0x00, 0x21, + 0xd1, 0xa8, 0x63, 0xc6, 0x00, 0xed, 0xd1, 0xa0, + 0x63, 0xc6, 0x15, 0xa1, 0xf9, 0xdc, 0x12, 0xa3, + 0xe5, 0xe3, 0xd3, 0xc2, 0x00, 0xec, 0xd1, 0xbc, + 0x63, 0xc6, 0xe1, 0xe3, 0x12, 0xa3, 0xea, 0x21, + 0xe1, 0xe3, 0x12, 0xa2, 0xf6, 0x21, 0x13, 0xe0, + 0xfa, 0x21, 0x00, 0xee, 0xd1, 0x8c, 0x78, 0x06, + 0xb1, 0xbc, 0x78, 0x46, 0xb1, 0xbc, 0x78, 0x86, + 0xd1, 0x88, 0x72, 0x46, 0xd1, 0x84, 0x73, 0x06, + 0x13, 0x20, 0xf9, 0xe3, 0x00, 0x64, 0xd1, 0xa0, + 0x70, 0x46, 0xd0, 0xa2, 0x30, 0x81, 0xe9, 0xff, + 0x10, 0x70, 0xea, 0x11, 0x10, 0x6d, 0xea, 0x14, + 0x10, 0x76, 0xea, 0x19, 0x10, 0x7a, 0xea, 0x28, + 0xe2, 0x3b, 0x18, 0xe0, 0xea, 0x3b, 0x00, 0xed, + 0xd1, 0x80, 0x70, 0x86, 0xb0, 0x81, 0xd0, 0x3f, + 0x40, 0x02, 0x10, 0x20, 0xea, 0x0c, 0x60, 0x86, + 0xf3, 0x8a, 0xe1, 0xe3, 0xc0, 0x02, 0x10, 0x1a, + 0x50, 0x80, 0x60, 0x86, 0xe2, 0x3b, 0x15, 0xa3, + 0xea, 0x21, 0xe2, 0xe9, 0xd2, 0x80, 0x00, 0xed, + 0xd1, 0xa4, 0x62, 0x86, 0xe3, 0x0c, 0x00, 0xed, + 0xd1, 0x88, 0xd0, 0x60, 0x70, 0x06, 0x50, 0x40, + 0x60, 0x46, 0x15, 0xa3, 0xfb, 0x0c, 0xd5, 0x84, + 0xe3, 0x0c, 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, + 0xde, 0x1a, 0xe0, 0x46, 0x00, 0xed, 0xd1, 0x88, + 0xd0, 0x60, 0x70, 0x06, 0x50, 0x40, 0x60, 0x46, + 0x15, 0xa2, 0xe7, 0x0c, 0xee, 0x21, 0x00, 0x21, + 0xd1, 0x8c, 0x18, 0xe0, 0xfa, 0x39, 0x70, 0x46, + 0x10, 0x61, 0xea, 0x70, 0xe2, 0x21, 0x65, 0x86, + 0xe2, 0x21, 0x18, 0xe0, 0xea, 0x70, 0xd1, 0x80, + 0x73, 0x06, 0x15, 0xa2, 0xee, 0x68, 0x00, 0x22, + 0xd1, 0x80, 0x70, 0x46, 0x6b, 0x06, 0xcb, 0x01, + 0xb1, 0xb4, 0x70, 0x46, 0x6a, 0xc6, 0xca, 0xc1, + 0x00, 0x65, 0xd1, 0x98, 0x70, 0x46, 0x10, 0x61, + 0xfa, 0x50, 0x02, 0x41, 0xc3, 0x21, 0xc7, 0xe0, + 0x02, 0x50, 0xea, 0x56, 0xc3, 0x20, 0xc7, 0xe1, + 0xd1, 0x88, 0xd0, 0x01, 0x02, 0x40, 0x62, 0x46, + 0x0f, 0xef, 0xd0, 0x7f, 0x30, 0x6f, 0xfa, 0x5f, + 0xc3, 0x20, 0xc7, 0x4c, 0xd0, 0x00, 0x00, 0x65, + 0xd1, 0x98, 0x70, 0x46, 0x60, 0x06, 0xb0, 0x41, + 0x43, 0x01, 0xe2, 0x70, 0xc3, 0x22, 0xc7, 0xcc, + 0xc7, 0x60, 0xc7, 0xa1, 0x02, 0x50, 0xea, 0x70, + 0xc7, 0x61, 0xc7, 0xa0, 0xdb, 0x80, 0xd1, 0x00, + 0x00, 0xef, 0xd1, 0xa8, 0x70, 0x46, 0x10, 0x60, + 0xfa, 0x7a, 0x00, 0xe0, 0xd1, 0x88, 0x70, 0x46, + 0x00, 0x22, 0xd1, 0xb0, 0x70, 0x86, 0x30, 0x81, + 0xea, 0x82, 0x60, 0x46, 0xd0, 0x20, 0xf3, 0x06, + 0x10, 0x63, 0xea, 0x87, 0x10, 0x64, 0xea, 0x87, + 0xe2, 0x95, 0x00, 0xef, 0xd1, 0x6c, 0x71, 0x45, + 0xc0, 0x05, 0x30, 0x01, 0xf6, 0x95, 0xdb, 0x82, + 0xd1, 0x01, 0x10, 0x63, 0xea, 0x95, 0xd1, 0x02, + 0x11, 0x62, 0xea, 0x95, 0xd1, 0x03, 0xd1, 0x8c, + 0x61, 0x06, 0xdb, 0x40, 0x00, 0xe0, 0xd0, 0x00, + 0x71, 0x00, 0xc0, 0x84, 0x10, 0x9c, 0xb0, 0x96, + 0xfa, 0xa0, 0xb1, 0x38, 0xb0, 0x96, 0xfa, 0xa3, + 0xb1, 0x30, 0x00, 0x29, 0xd1, 0x84, 0x00, 0x22, + 0xd0, 0x74, 0x70, 0x86, 0x70, 0xc1, 0x61, 0x06, + 0x30, 0xc2, 0xea, 0xae, 0x60, 0x81, 0xdb, 0x41, + 0xb0, 0x3c, 0xb1, 0xbc, 0xb0, 0x7c, 0x71, 0x00, + 0x70, 0x86, 0x70, 0xc1, 0x61, 0x06, 0x30, 0xc2, + 0xea, 0xb9, 0x60, 0x81, 0xdb, 0x41, 0x00, 0xee, + 0xd1, 0xb4, 0x70, 0x06, 0xb1, 0xbc, 0x70, 0x46, + 0x30, 0x40, 0xea, 0xc2, 0x60, 0x06, 0xdb, 0x41, + 0x00, 0x23, 0xd0, 0x70, 0x30, 0x81, 0xea, 0xc7, + 0x30, 0x81, 0x50, 0x02, 0xea, 0xca, 0xd0, 0x01, + 0x00, 0x22, 0xd1, 0xbc, 0x70, 0x86, 0x30, 0x80, + 0xea, 0xd2, 0x60, 0x06, 0xd0, 0x10, 0xf3, 0x06, + 0x00, 0x22, 0xd1, 0xa4, 0x71, 0x06, 0xd0, 0x01, + 0x41, 0x00, 0x5b, 0x44, 0x5b, 0x6e, 0x6b, 0x46, + 0x00, 0x28, 0xd0, 0x70, 0x70, 0x41, 0x10, 0x62, + 0xfa, 0xe6, 0xd1, 0x84, 0x70, 0x06, 0x10, 0x20, + 0xfa, 0xdf, 0x00, 0x22, 0xd0, 0x00, 0xf3, 0x06, + 0x02, 0x7d, 0xdc, 0x62, 0xe0, 0x46, 0x00, 0xed, + 0xd1, 0x88, 0x71, 0x06, 0x01, 0x1f, 0xfa, 0xfd, + 0xd0, 0x41, 0x41, 0x01, 0xd0, 0x62, 0x00, 0x65, + 0xd0, 0x30, 0x70, 0x00, 0x10, 0x21, 0xea, 0xfa, + 0xee, 0xf9, 0x1a, 0xe1, 0xfa, 0xfa, 0xd0, 0x52, + 0x51, 0x01, 0x61, 0x06, 0xe3, 0x0c, 0x18, 0xe0, + 0xea, 0x70, 0xc7, 0x60, 0xc7, 0xe1, 0x02, 0x50, + 0xea, 0x70, 0xc7, 0x61, 0xc7, 0xe0, 0xe2, 0x70, + 0x00, 0x28, 0xdc, 0xa4, 0x7c, 0x72, 0x5c, 0x40, + 0x6c, 0x72, 0x0f, 0xc5, 0x18, 0xe0, 0xeb, 0x82, + 0xd9, 0x0d, 0x00, 0xee, 0xd1, 0xa4, 0x70, 0x06, + 0x10, 0x21, 0xfb, 0x7f, 0xd9, 0x0c, 0x90, 0x06, + 0x00, 0x10, 0xeb, 0x7f, 0x00, 0x21, 0xd1, 0x88, + 0x7a, 0x06, 0x1a, 0x20, 0xeb, 0x7f, 0xd9, 0x00, + 0x00, 0xed, 0xd1, 0xbc, 0x79, 0x46, 0x19, 0x60, + 0xeb, 0x7f, 0x39, 0x68, 0xc0, 0xe5, 0xc0, 0x25, + 0x10, 0x13, 0xb0, 0x0f, 0xef, 0x7f, 0xb0, 0x22, + 0xe7, 0x7f, 0x00, 0xe0, 0xd1, 0xa8, 0x71, 0x46, + 0x11, 0x5f, 0x29, 0x45, 0x00, 0x22, 0xd0, 0x18, + 0x00, 0x22, 0xd4, 0x54, 0x00, 0x22, 0xd0, 0x9c, + 0x70, 0x00, 0x74, 0x51, 0x70, 0x42, 0x34, 0x40, + 0xe7, 0x3c, 0xd0, 0x40, 0x00, 0x22, 0xd4, 0x50, + 0x74, 0x51, 0x34, 0x40, 0xef, 0x42, 0x20, 0x45, + 0x60, 0x42, 0x39, 0x41, 0x19, 0x60, 0xf7, 0x5e, + 0x00, 0x65, 0xd1, 0xa8, 0x7a, 0x86, 0x29, 0x6a, + 0x19, 0x59, 0xb9, 0x7e, 0xf7, 0x75, 0x15, 0xa3, + 0xf7, 0x57, 0x00, 0xed, 0xd1, 0xac, 0x70, 0x06, + 0x00, 0xed, 0xd1, 0xb0, 0x70, 0x46, 0x30, 0x01, + 0xfb, 0x7f, 0x00, 0x65, 0xd1, 0x84, 0x70, 0x46, + 0xb0, 0x7f, 0x60, 0x46, 0xd5, 0x84, 0xe3, 0x7f, + 0x11, 0x41, 0xd0, 0x4a, 0x00, 0xed, 0xd1, 0xa0, + 0x74, 0x46, 0xd0, 0x00, 0x60, 0x06, 0x30, 0xc5, + 0x39, 0x45, 0xe7, 0x6e, 0x14, 0x60, 0xeb, 0x6b, + 0xf3, 0x85, 0xb0, 0x41, 0xef, 0x65, 0xe3, 0x71, + 0x00, 0x66, 0xd1, 0xa0, 0x60, 0xc6, 0x15, 0xa3, + 0xeb, 0x7f, 0xf3, 0x85, 0xe3, 0x7f, 0xd9, 0x01, + 0x00, 0x66, 0xd1, 0xa0, 0x70, 0x06, 0x30, 0x03, + 0xe7, 0x7e, 0x10, 0x1d, 0x10, 0x3b, 0xe7, 0x7f, + 0x60, 0xc6, 0x00, 0x66, 0xd1, 0xa4, 0x69, 0x06, + 0x15, 0xa4, 0xea, 0x23, 0xe2, 0x3b, 0x00, 0x65, + 0xdd, 0x08, 0x7c, 0xf4, 0xbc, 0xff, 0x6c, 0xf4, + 0x00, 0xef, 0xdd, 0x10, 0x7c, 0xf4, 0xbc, 0xfe, + 0x6c, 0xf4, 0xc0, 0x3f, 0xf1, 0x18, 0xf1, 0x16, + 0xf1, 0x18, 0x00, 0x05, 0x08, 0x20, 0xd0, 0x40, + 0x5f, 0x01, 0x15, 0x63, 0xe9, 0x77, 0x05, 0x5e, + 0xea, 0xf2, 0x00, 0x22, 0xd1, 0xa0, 0x6b, 0x06, + 0x00, 0x22, 0xd1, 0xa8, 0x6b, 0xc6, 0x00, 0x22, + 0xd1, 0xac, 0x6a, 0xc6, 0x00, 0xee, 0xd0, 0x0c, + 0x00, 0xe6, 0xd1, 0x9c, 0x70, 0x40, 0x30, 0x5f, + 0xe9, 0x8d, 0xb0, 0x3c, 0xb1, 0xb4, 0x70, 0x40, + 0x30, 0x5f, 0xe9, 0x8d, 0xb1, 0xb4, 0x00, 0xe6, + 0xd0, 0x10, 0xd0, 0x83, 0x70, 0x40, 0x60, 0x46, + 0xb0, 0x3c, 0xb1, 0xbc, 0xb0, 0x81, 0xed, 0x90, + 0x00, 0xee, 0xd0, 0x0c, 0x00, 0xe6, 0xd1, 0x9c, + 0x70, 0x40, 0x30, 0x4c, 0xe9, 0xa3, 0xb0, 0x3c, + 0xb1, 0xb4, 0x70, 0x40, 0x30, 0x4c, 0xe9, 0xa3, + 0xb1, 0xb4, 0x00, 0xe6, 0xd0, 0x00, 0x61, 0x80, + 0x00, 0x21, 0xd1, 0xb4, 0x70, 0x06, 0x10, 0x20, + 0xe9, 0xae, 0xd0, 0x00, 0x60, 0x06, 0xf1, 0x18, + 0x00, 0x21, 0xd1, 0x8c, 0x70, 0x46, 0x65, 0x86, + 0xde, 0xc0, 0x00, 0xee, 0xd0, 0x20, 0x70, 0x00, + 0x10, 0x22, 0xfd, 0xb9, 0xde, 0xc2, 0x00, 0x21, + 0xd0, 0x04, 0x70, 0x00, 0x10, 0x21, 0xe9, 0xc0, + 0x15, 0xa3, 0xe9, 0xdc, 0xd0, 0x02, 0x4c, 0x00, + 0x10, 0x63, 0xe9, 0xc5, 0xcc, 0x3b, 0xd0, 0x04, + 0x63, 0x00, 0xd0, 0x00, 0x70, 0x00, 0x30, 0x1f, + 0xfa, 0xf2, 0xd0, 0x18, 0x70, 0x00, 0x10, 0x20, + 0xed, 0xc7, 0xd0, 0x04, 0x70, 0x80, 0x10, 0xa0, + 0xea, 0xf2, 0xf1, 0x16, 0x00, 0x21, 0xd0, 0x9a, + 0xc0, 0x39, 0x30, 0x1f, 0x10, 0x18, 0x30, 0x02, + 0xfd, 0xcf, 0xe2, 0xf2, 0x00, 0xe0, 0xd9, 0x04, + 0x79, 0x24, 0xb9, 0x38, 0x19, 0x1c, 0xd0, 0x1e, + 0x30, 0x24, 0xf5, 0xe5, 0x29, 0x00, 0xdc, 0x88, + 0x4c, 0xac, 0xd0, 0x02, 0x40, 0x2c, 0x10, 0x02, + 0x0c, 0x80, 0x10, 0x63, 0xea, 0x5a, 0x15, 0x63, + 0xf9, 0xf0, 0xf1, 0x18, 0xdc, 0x1e, 0x1e, 0xe0, + 0xe9, 0xf6, 0x15, 0x63, 0xf9, 0xf6, 0xbe, 0xfc, + 0xd0, 0x2c, 0x6c, 0x00, 0xcc, 0x24, 0xd9, 0x40, + 0x06, 0x50, 0xea, 0x0c, 0xc0, 0x24, 0xb0, 0x0f, + 0xfe, 0x0c, 0xd9, 0x74, 0x79, 0x65, 0x19, 0x5f, + 0x30, 0x25, 0xee, 0x05, 0x29, 0x40, 0x19, 0x5f, + 0x19, 0x41, 0xc0, 0x25, 0x20, 0x30, 0x30, 0x24, + 0xe6, 0x0c, 0x3c, 0x00, 0xd0, 0x38, 0x69, 0x40, + 0x1c, 0x05, 0xbc, 0x38, 0x3c, 0x32, 0x5c, 0x3b, + 0xbc, 0x3f, 0xd8, 0xec, 0x78, 0xe3, 0xc0, 0xa3, + 0x10, 0xaf, 0xf6, 0x19, 0xd0, 0x8f, 0x02, 0xe4, + 0xd8, 0x00, 0xd0, 0xc0, 0x20, 0xe0, 0xb0, 0x81, + 0xee, 0x1c, 0xd0, 0x30, 0x60, 0xc0, 0x00, 0xab, + 0xd0, 0x30, 0xc0, 0xc0, 0xd8, 0x40, 0xc1, 0x23, + 0xd4, 0x5e, 0x34, 0x63, 0xdc, 0x40, 0x0c, 0x1f, + 0xfa, 0x45, 0xc0, 0x65, 0xb0, 0x41, 0xe6, 0x31, + 0x68, 0x40, 0xb0, 0x3c, 0xe2, 0x2c, 0xc0, 0xc0, + 0x34, 0x65, 0xdc, 0x48, 0x4c, 0x70, 0x1c, 0x5f, + 0x20, 0xf1, 0x15, 0x63, 0xfa, 0x46, 0xf2, 0x3e, + 0xc1, 0x11, 0xc0, 0x83, 0xf2, 0x8f, 0xe2, 0x59, + 0xb1, 0x01, 0xe6, 0x44, 0x68, 0x40, 0x28, 0x60, + 0xb0, 0x3c, 0xe2, 0x3e, 0x0f, 0xc5, 0xd9, 0x40, + 0xb1, 0x0f, 0x11, 0x01, 0x21, 0x25, 0xf2, 0x3e, + 0xc1, 0x11, 0xb1, 0x01, 0xe6, 0x59, 0x20, 0x31, + 0x68, 0x40, 0x30, 0x31, 0xb0, 0x3c, 0x28, 0x60, + 0x70, 0x43, 0x30, 0x31, 0x60, 0x40, 0x20, 0x31, + 0xb0, 0x3c, 0xb0, 0xf8, 0xe2, 0x4b, 0xe2, 0xe1, + 0xd8, 0xec, 0x78, 0xe3, 0x00, 0xa8, 0xd0, 0x80, + 0x00, 0xa8, 0xd1, 0x44, 0x00, 0xab, 0xd0, 0x30, + 0xc0, 0xc0, 0x0c, 0x1f, 0xfa, 0x9d, 0xd9, 0x78, + 0x79, 0x65, 0x39, 0x25, 0x19, 0x5f, 0xc9, 0xa5, + 0x19, 0x83, 0x20, 0x26, 0x20, 0xe6, 0x20, 0xa6, + 0x21, 0x66, 0xc1, 0x23, 0xc0, 0x64, 0x10, 0x5f, + 0x10, 0x9d, 0x20, 0x81, 0x31, 0x01, 0x30, 0x44, + 0xf6, 0x78, 0x21, 0x01, 0x30, 0x84, 0x10, 0x83, + 0xc4, 0x64, 0x34, 0x63, 0xdc, 0x48, 0x4c, 0x70, + 0x1c, 0x5f, 0x15, 0x63, 0xfa, 0xad, 0x20, 0xb1, + 0xf2, 0x8f, 0xc1, 0x24, 0x11, 0x1f, 0xc0, 0x85, + 0x30, 0xb1, 0xf2, 0x8f, 0xc1, 0x11, 0xc0, 0x83, + 0x0c, 0x9d, 0xfa, 0x8d, 0xb0, 0xbc, 0xf2, 0x8f, + 0xe2, 0xd6, 0xb1, 0x01, 0xe6, 0x44, 0x70, 0x42, + 0xb0, 0xb8, 0x60, 0x40, 0xb0, 0x3c, 0xe2, 0x8f, + 0xb1, 0x01, 0xe6, 0x44, 0x70, 0x42, 0xb0, 0xb8, + 0x60, 0x40, 0xb0, 0x38, 0xe2, 0x96, 0x00, 0xab, + 0xd0, 0x34, 0xc1, 0x23, 0xb1, 0x0f, 0xf2, 0x96, + 0xd1, 0x1e, 0x31, 0x23, 0x00, 0xa8, 0xd0, 0x84, + 0xf2, 0x96, 0xd1, 0x0f, 0x00, 0xa8, 0xd0, 0x84, + 0xc0, 0x03, 0xf2, 0x96, 0xe2, 0xd6, 0xd8, 0x82, + 0x48, 0x95, 0x18, 0x81, 0xb1, 0x01, 0xe6, 0xc3, + 0x20, 0xb1, 0x70, 0x42, 0x30, 0xb1, 0x20, 0x22, + 0x60, 0x40, 0x30, 0x22, 0xb0, 0xbc, 0xb0, 0x3c, + 0x30, 0xb1, 0x70, 0x42, 0x20, 0xb1, 0x30, 0x22, + 0x60, 0x40, 0x20, 0x22, 0xb0, 0xbc, 0xb0, 0x3c, + 0xe2, 0xb0, 0xc1, 0x11, 0xc0, 0x85, 0x30, 0xb1, + 0x20, 0xe2, 0xb1, 0x01, 0xe6, 0xd6, 0x70, 0x42, + 0xb0, 0xb8, 0x20, 0x22, 0x60, 0x40, 0x30, 0x22, + 0xb0, 0x3c, 0x70, 0x43, 0xb0, 0xf8, 0x30, 0x22, + 0x60, 0x40, 0x20, 0x22, 0xb0, 0x3c, 0xe2, 0xc7, + 0xd0, 0x08, 0x5c, 0x00, 0x3c, 0x32, 0xd0, 0x04, + 0x40, 0x30, 0x3c, 0x00, 0x15, 0x63, 0xfa, 0xe1, + 0x1e, 0xe0, 0xea, 0xe1, 0xbc, 0x3c, 0x00, 0xab, + 0xd0, 0xb0, 0x00, 0xa8, 0xd0, 0x00, 0x00, 0x20, + 0xd1, 0x1e, 0x70, 0x42, 0xb0, 0xbc, 0x60, 0x40, + 0xb0, 0x3c, 0xb1, 0x01, 0xee, 0xe7, 0xd0, 0x30, + 0x30, 0x30, 0xee, 0xed, 0xd0, 0x04, 0x63, 0x00, + 0x08, 0x20, 0xd0, 0x40, 0x3f, 0x01, 0x02, 0xba, + 0xd0, 0x3c, 0xe0, 0x46, 0x01, 0x46, 0xd0, 0x08, + 0x94, 0x89, 0xd0, 0x8c, 0x44, 0x82, 0x14, 0x9e, + 0x30, 0x12, 0xd0, 0x88, 0x10, 0x80, 0x00, 0xe8, + 0xd1, 0x80, 0x70, 0xc6, 0x00, 0x06, 0xa0, 0xbd, + 0xa0, 0xfc, 0x80, 0x3f, 0xb1, 0xbe, 0x60, 0xc6, + 0x00, 0x06, 0x80, 0xa9, 0x80, 0x3f, 0x80, 0x2a, + 0x80, 0x3f, 0x00, 0x21, 0xd0, 0x3c, 0x00, 0x0a, + 0xb1, 0x82, 0xd0, 0x6b, 0x70, 0x46, 0x00, 0x06, + 0x80, 0x07, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, + 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, + 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, + 0xd0, 0x00, 0xa0, 0x29, 0x80, 0x2b, 0x0c, 0x20, + 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0x90, 0x09, + 0xd0, 0x41, 0x40, 0x01, 0xd0, 0x44, 0x40, 0x70, + 0x20, 0x01, 0xa0, 0x27, 0x80, 0x3f, 0x00, 0xc6, + 0x15, 0x63, 0xe9, 0xae, 0x05, 0x5e, 0xe9, 0xbe, + 0x00, 0xe0, 0xd0, 0x40, 0x70, 0x81, 0x10, 0x9c, + 0xb0, 0x96, 0xf9, 0xb7, 0x00, 0x21, 0xd0, 0x40, + 0xe1, 0xbb, 0xb0, 0x96, 0xf9, 0xbe, 0x00, 0x22, + 0xd0, 0x40, 0x27, 0xc1, 0x27, 0x41, 0x27, 0x81, + 0x90, 0x83, 0x00, 0x64, 0xd0, 0x10, 0x60, 0x80, + 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0x00, 0x64, + 0xd0, 0x14, 0x67, 0x40, 0x80, 0x34, 0x80, 0x3f, + 0x00, 0xc6, 0x90, 0xae, 0x00, 0x64, 0xd0, 0x18, + 0x60, 0x80, 0x90, 0xa6, 0x00, 0x64, 0xd0, 0x1c, + 0x60, 0x80, 0x15, 0x63, 0xe9, 0xe3, 0x0c, 0x1f, + 0xe9, 0xe3, 0x05, 0x50, 0xf9, 0xe3, 0x15, 0xa3, + 0xf9, 0xe3, 0x90, 0x4d, 0x10, 0x60, 0xe5, 0xdb, + 0x00, 0x06, 0x05, 0x0d, 0x01, 0x7a, 0xde, 0x1a, + 0xe0, 0x46, 0x15, 0xa3, 0xf9, 0xfb, 0x00, 0x21, + 0xd0, 0x04, 0x70, 0x00, 0x10, 0x21, 0xe9, 0xfb, + 0xd0, 0x38, 0x70, 0x00, 0x15, 0x63, 0xe9, 0xef, + 0x10, 0x1f, 0x15, 0x21, 0xe5, 0xe0, 0xd0, 0x5e, + 0x30, 0x54, 0xe5, 0xe0, 0xc0, 0x40, 0xb0, 0x7f, + 0x30, 0x54, 0xe9, 0xfb, 0x0c, 0x09, 0x05, 0x0d, + 0xe1, 0xef, 0xc0, 0x5f, 0x10, 0x58, 0x10, 0x48, + 0x00, 0xee, 0xd0, 0x8c, 0xd0, 0xc3, 0x70, 0x02, + 0x30, 0x01, 0xea, 0x10, 0xb0, 0xbc, 0xb0, 0xc1, + 0xee, 0x01, 0x00, 0x26, 0xd0, 0x20, 0x70, 0x40, + 0xb0, 0x7f, 0x60, 0x40, 0x15, 0xa3, 0xea, 0x0f, + 0xb0, 0x88, 0x77, 0xc2, 0x80, 0x07, 0x09, 0x49, + 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, + 0x00, 0x4d, 0xa0, 0x6c, 0xd3, 0x80, 0xd0, 0xa1, + 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, + 0xfa, 0x1a, 0x0c, 0x49, 0x00, 0x8d, 0xc0, 0x42, + 0x10, 0x60, 0xea, 0x2a, 0xb0, 0x5e, 0xb0, 0x43, + 0xfe, 0x34, 0xd0, 0x61, 0x23, 0x81, 0xe2, 0x1f, + 0x0c, 0x09, 0x05, 0x0d, 0x15, 0x20, 0xfe, 0x31, + 0xd0, 0x5f, 0x30, 0x54, 0xee, 0x10, 0x03, 0xb3, + 0xd8, 0x29, 0xe0, 0x46, 0xc6, 0xd4, 0xb6, 0xc1, + 0xe6, 0x31, 0xd0, 0x5e, 0x30, 0x5b, 0xfe, 0x31, + 0xd7, 0x00, 0xb7, 0x01, 0xd3, 0x81, 0x00, 0x27, + 0xd0, 0x10, 0xd0, 0x81, 0x60, 0x80, 0x15, 0x63, + 0xfa, 0x54, 0x00, 0x22, 0xdc, 0xd8, 0x03, 0xf7, + 0xd2, 0x10, 0xf0, 0x4a, 0x15, 0xa3, 0xfa, 0x51, + 0x02, 0xf6, 0xde, 0x26, 0x0c, 0x10, 0xf8, 0x46, + 0x02, 0xfb, 0xda, 0x22, 0xe0, 0x46, 0x02, 0xf1, + 0xd8, 0x2b, 0xe0, 0x46, 0x00, 0x22, 0xdc, 0xd8, + 0x03, 0xf9, 0xd2, 0x10, 0xf0, 0x4a, 0x03, 0x34, + 0xdc, 0x20, 0x15, 0xa3, 0xe8, 0x46, 0x02, 0xff, + 0xde, 0x27, 0xe0, 0x46, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xe0, + 0xe1, 0xec, 0xe2, 0x12, 0xe2, 0x14, 0xe1, 0xc7, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8d, 0x06, 0x50, + 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, + 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x5e, + 0x30, 0x5b, 0xfc, 0x11, 0xc0, 0x39, 0x30, 0x31, + 0x10, 0x12, 0x10, 0x20, 0xe9, 0x88, 0x03, 0x10, + 0xe9, 0x93, 0x0f, 0x19, 0xf9, 0x8f, 0xd1, 0x44, + 0xe1, 0x79, 0x03, 0xde, 0xf9, 0xba, 0x03, 0xdf, + 0xe9, 0x99, 0xd3, 0x40, 0xca, 0x50, 0xd1, 0x42, + 0xe2, 0xea, 0xc0, 0x50, 0x10, 0x54, 0xc0, 0x90, + 0x10, 0x8c, 0x10, 0x92, 0x10, 0xe0, 0xe5, 0xa8, + 0xc0, 0x01, 0x10, 0x01, 0x20, 0x40, 0xc0, 0x02, + 0x10, 0x01, 0x20, 0x80, 0x10, 0x60, 0xfd, 0xab, + 0xb0, 0x7f, 0x10, 0xa0, 0xfd, 0xae, 0xb0, 0xbf, + 0x10, 0x5f, 0x10, 0x9f, 0x00, 0xef, 0xd0, 0x3e, + 0x20, 0x52, 0x20, 0x83, 0x20, 0x93, 0x10, 0x4c, + 0x10, 0x82, 0x40, 0x80, 0x50, 0x42, 0x0f, 0xc5, + 0xcb, 0xaa, 0xcb, 0xeb, 0xca, 0x50, 0xd0, 0xc0, + 0xb0, 0xc1, 0xf1, 0x9b, 0xcb, 0x01, 0xd0, 0xc1, + 0xf1, 0x9b, 0xcb, 0x41, 0xba, 0x7f, 0xbb, 0x3f, + 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, + 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x48, + 0xcc, 0xb1, 0x1c, 0x9f, 0x06, 0xd0, 0xe9, 0xd5, + 0x01, 0x69, 0xd0, 0x20, 0x3c, 0x80, 0xc0, 0x1c, + 0x10, 0x08, 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, + 0x01, 0x74, 0xd6, 0x00, 0x2c, 0x80, 0xde, 0x84, + 0xde, 0xc4, 0xe3, 0x1e, 0xd3, 0xc2, 0xf2, 0xd3, + 0x13, 0xa0, 0xed, 0xe5, 0xf2, 0x32, 0xb3, 0x81, + 0xe9, 0xec, 0x80, 0x07, 0xd4, 0x00, 0xc4, 0x50, + 0xd3, 0x08, 0xe2, 0x95, 0xd0, 0x71, 0x20, 0x56, + 0x00, 0x48, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, + 0xe9, 0xfa, 0x06, 0x5e, 0xfa, 0x03, 0x08, 0x89, + 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xfa, 0xd3, 0xc4, + 0x06, 0x5e, 0xfa, 0x03, 0xd0, 0x43, 0x40, 0x4c, + 0xea, 0x03, 0x08, 0x49, 0x00, 0x8d, 0x10, 0x87, + 0x53, 0x02, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, + 0x03, 0x1c, 0xea, 0x0a, 0x09, 0x49, 0x00, 0x0d, + 0xd0, 0x9f, 0x40, 0x02, 0xb0, 0x20, 0x03, 0x19, + 0xea, 0x10, 0xb0, 0x20, 0xa0, 0x2c, 0xe2, 0x5b, + 0x06, 0x5f, 0xfa, 0x80, 0xd4, 0x00, 0xc4, 0x50, + 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xd3, + 0xe1, 0xdc, 0xe2, 0x00, 0xe2, 0x02, 0xe1, 0xac, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x91, 0x06, 0x50, + 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, + 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x5e, + 0x30, 0x5b, 0xfc, 0x11, 0xbc, 0x10, 0xd0, 0x10, + 0x0c, 0x1e, 0xf9, 0x8e, 0xbc, 0x10, 0xd0, 0x30, + 0xc0, 0x40, 0x30, 0x70, 0xed, 0x8e, 0x03, 0x10, + 0xe9, 0x97, 0x0f, 0x19, 0xf9, 0x93, 0xd1, 0x44, + 0xe1, 0x79, 0x03, 0xdf, 0xe9, 0xa1, 0xd3, 0x40, + 0xca, 0x50, 0xcb, 0x52, 0x03, 0x1d, 0xf9, 0xa8, + 0xca, 0x12, 0xca, 0x52, 0xe1, 0xa5, 0x03, 0x1d, + 0xf9, 0xa8, 0xca, 0x12, 0xca, 0x53, 0xca, 0xae, + 0xca, 0xef, 0xb1, 0x7e, 0x03, 0x1e, 0xfa, 0xea, + 0xb1, 0x7e, 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, + 0x2c, 0x40, 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xd2, + 0x00, 0xa8, 0xd0, 0x00, 0xcc, 0x5b, 0x1c, 0x5f, + 0x1c, 0x43, 0x20, 0x31, 0x7c, 0x40, 0xb0, 0x3c, + 0x7e, 0x80, 0xcc, 0xb1, 0xce, 0xfa, 0x1c, 0x9f, + 0x1e, 0xdf, 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, + 0xe9, 0xc4, 0x3c, 0x80, 0x0e, 0xd9, 0xe9, 0xc7, + 0x3e, 0xc0, 0x3e, 0xf2, 0x3e, 0xb1, 0xd0, 0x01, + 0x40, 0x1b, 0x10, 0x05, 0x20, 0x1f, 0x2c, 0x40, + 0x2c, 0x80, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, + 0xe3, 0x1e, 0xd3, 0xc2, 0xf2, 0xd3, 0x13, 0xa0, + 0xed, 0xd8, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xdc, + 0x80, 0x07, 0xe2, 0x95, 0x0d, 0x09, 0xd1, 0x8c, + 0x03, 0x0d, 0x41, 0x8c, 0xe9, 0xe8, 0x06, 0x5e, + 0xf9, 0xf1, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, + 0xf9, 0xe8, 0xd3, 0xc4, 0x06, 0x5e, 0xf9, 0xf1, + 0xd0, 0x43, 0x40, 0x4c, 0xe9, 0xf1, 0x08, 0x49, + 0x00, 0x8d, 0x10, 0x87, 0x53, 0x02, 0x01, 0x46, + 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, 0xe9, 0xf8, + 0x09, 0x49, 0x00, 0x0d, 0xd0, 0x9f, 0x40, 0x02, + 0xb0, 0x20, 0x03, 0x19, 0xe9, 0xfe, 0xb0, 0x20, + 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x80, + 0xd4, 0x00, 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, + 0xe2, 0x8d, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xc1, + 0xe1, 0xca, 0xe1, 0xee, 0xe1, 0xf0, 0xe1, 0xa8, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8d, 0x06, 0x50, + 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, + 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x5e, + 0x30, 0x5b, 0xfc, 0x11, 0xc0, 0x39, 0x30, 0x31, + 0x10, 0x12, 0x10, 0x20, 0xe9, 0x88, 0x03, 0x10, + 0xe9, 0x93, 0x0f, 0x19, 0xf9, 0x8f, 0xd1, 0x44, + 0xe1, 0x79, 0x03, 0xdf, 0xe9, 0x9d, 0xd3, 0x40, + 0xca, 0x50, 0xcb, 0x52, 0x03, 0x1d, 0xf9, 0xa4, + 0xca, 0x12, 0xca, 0x52, 0xe1, 0xa1, 0x03, 0x1d, + 0xf9, 0xa4, 0xca, 0x12, 0xca, 0x53, 0xca, 0xae, + 0xca, 0xef, 0xb1, 0x7e, 0x03, 0x1e, 0xfa, 0xea, + 0xb1, 0x7e, 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, + 0x2c, 0x5b, 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, + 0x1c, 0x48, 0xcc, 0xb1, 0x1c, 0x9f, 0x06, 0xd0, + 0xe9, 0xb6, 0x01, 0x69, 0xd0, 0x20, 0x3c, 0x80, + 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, 0x2c, 0x40, + 0x2c, 0x80, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, + 0xde, 0x84, 0xde, 0xc4, 0xe3, 0x1e, 0xd3, 0xc2, + 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xc6, 0xf2, 0x32, + 0xb3, 0x81, 0xe9, 0xca, 0x80, 0x07, 0xe2, 0x95, + 0x0d, 0x09, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, + 0xe9, 0xd6, 0x06, 0x5e, 0xf9, 0xdf, 0x08, 0x89, + 0x03, 0xcd, 0x13, 0xe3, 0xf9, 0xd6, 0xd3, 0xc4, + 0x06, 0x5e, 0xf9, 0xdf, 0xd0, 0x43, 0x40, 0x4c, + 0xe9, 0xdf, 0x08, 0x49, 0x00, 0x8d, 0x10, 0x87, + 0x53, 0x02, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, + 0x03, 0x1c, 0xe9, 0xe6, 0x09, 0x49, 0x00, 0x0d, + 0xd0, 0x9f, 0x40, 0x02, 0xb0, 0x20, 0x03, 0x19, + 0xe9, 0xec, 0xb0, 0x20, 0xa0, 0x2c, 0xe2, 0x5b, + 0x06, 0x5f, 0xfa, 0x80, 0xd4, 0x00, 0xc4, 0x50, + 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xdb, + 0xe1, 0xe9, 0xe2, 0x00, 0xe2, 0x02, 0xe1, 0xc3, + 0xe1, 0x65, 0x30, 0x5a, 0xe5, 0x8d, 0x06, 0x50, + 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, + 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x4f, + 0x30, 0x5b, 0xfc, 0x11, 0xc0, 0x39, 0x30, 0x31, + 0x10, 0x11, 0x10, 0x20, 0xe9, 0x88, 0x03, 0x10, + 0xe9, 0x93, 0x0f, 0x19, 0xf9, 0x8f, 0xd1, 0x44, + 0xe1, 0x79, 0x03, 0xd0, 0xf9, 0x98, 0xca, 0x50, + 0x03, 0xde, 0xf9, 0x9a, 0xd1, 0x42, 0xe2, 0xea, + 0xcb, 0xaa, 0xcb, 0xeb, 0xc0, 0x50, 0x10, 0x54, + 0xc0, 0x90, 0x10, 0x8c, 0x10, 0x92, 0xd0, 0xc1, + 0x05, 0x50, 0xe9, 0xa5, 0xb0, 0xc2, 0x10, 0x60, + 0xfd, 0xa8, 0xb0, 0x7f, 0x10, 0xa0, 0xfd, 0xab, + 0xb0, 0xbf, 0x10, 0x5f, 0x10, 0x9f, 0x00, 0xef, + 0xd0, 0x3e, 0x20, 0x52, 0x20, 0x83, 0x20, 0x93, + 0x10, 0x4c, 0x10, 0x82, 0x40, 0x80, 0x50, 0x42, + 0xd0, 0x81, 0x14, 0x1f, 0x14, 0x01, 0x05, 0x50, + 0xe9, 0xbd, 0x50, 0x42, 0xe1, 0xbe, 0x54, 0x02, + 0xca, 0x10, 0xca, 0x50, 0xcb, 0x01, 0xcb, 0x41, + 0xe2, 0xea, 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, + 0xc0, 0x31, 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x49, + 0xcc, 0xb1, 0x1c, 0x9f, 0xc0, 0x1c, 0x10, 0x08, + 0x20, 0x1f, 0x05, 0x50, 0xf9, 0xd2, 0xb0, 0x3c, + 0x2c, 0x40, 0x2c, 0x80, 0x01, 0x74, 0xd6, 0x00, + 0x2c, 0x80, 0x02, 0xe4, 0xde, 0x80, 0xde, 0xc1, + 0xe3, 0x1e, 0xd3, 0xc0, 0xf2, 0xd3, 0x13, 0xa0, + 0xed, 0xe0, 0xf2, 0x32, 0xb3, 0x81, 0xe9, 0xe9, + 0x80, 0x07, 0xd4, 0x02, 0x44, 0x15, 0x14, 0x1f, + 0xc4, 0x50, 0xd3, 0x08, 0xe2, 0x95, 0xd0, 0x71, + 0x20, 0x56, 0x00, 0x48, 0xd1, 0x8c, 0x03, 0x0d, + 0x41, 0x8c, 0xe9, 0xf7, 0x08, 0x89, 0x03, 0xcd, + 0x13, 0xe3, 0xf9, 0xf6, 0xd3, 0xc4, 0xe1, 0xf7, + 0xb3, 0xc1, 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, + 0x03, 0x1c, 0xe9, 0xfe, 0x09, 0x49, 0x00, 0x0d, + 0xa0, 0x2c, 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x7f, + 0xd4, 0x02, 0x44, 0x15, 0x14, 0x1f, 0xc4, 0x50, + 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xc9, + 0xe1, 0xd2, 0xe1, 0xe7, 0xe1, 0xe9, 0xe1, 0xab, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x91, 0x06, 0x50, + 0xe9, 0x83, 0xc0, 0x54, 0x30, 0x5b, 0xb0, 0x42, + 0xf8, 0x11, 0x37, 0x1a, 0xb6, 0xff, 0xd0, 0x4f, + 0x30, 0x5b, 0xfc, 0x11, 0xbc, 0x10, 0xd0, 0x10, + 0x0c, 0x1e, 0xf9, 0x8e, 0xbc, 0x10, 0xd0, 0x20, + 0xc0, 0x40, 0x30, 0x70, 0xed, 0x8e, 0x03, 0x10, + 0xe9, 0x97, 0x0f, 0x19, 0xf9, 0x93, 0xd1, 0x44, + 0xe1, 0x79, 0x03, 0xd0, 0xf9, 0xa0, 0xca, 0x50, + 0xcb, 0x52, 0x03, 0x1d, 0xf9, 0xa7, 0xca, 0x12, + 0xca, 0x52, 0xe1, 0xa4, 0x03, 0x1d, 0xf9, 0xa7, + 0xca, 0x12, 0xca, 0x53, 0xca, 0xae, 0xca, 0xef, + 0xb1, 0x7e, 0x03, 0x1e, 0xfa, 0xea, 0xb1, 0x7e, + 0xe2, 0xea, 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, + 0x2c, 0x80, 0x17, 0x20, 0xf9, 0xc8, 0x00, 0x2a, + 0xd0, 0x00, 0x20, 0x1b, 0x20, 0x1b, 0x05, 0x50, + 0xf9, 0xb8, 0xb0, 0x3f, 0x10, 0x02, 0x7c, 0x40, + 0xcc, 0xb1, 0x1c, 0x9f, 0x01, 0x69, 0xd0, 0x3c, + 0x0c, 0x99, 0xe9, 0xc1, 0x3c, 0x80, 0xde, 0xa0, + 0x2c, 0x5f, 0x2c, 0x9f, 0xd0, 0x30, 0x70, 0x00, + 0x2c, 0x80, 0xde, 0xc1, 0xe3, 0x1e, 0xd3, 0xc0, + 0xf2, 0xd3, 0x13, 0xa0, 0xed, 0xce, 0xf2, 0x32, + 0xb3, 0x81, 0xe9, 0xd2, 0x80, 0x07, 0xe2, 0x95, + 0x0d, 0x09, 0xd1, 0x8c, 0x03, 0x0d, 0x41, 0x8c, + 0xe9, 0xde, 0x08, 0x89, 0x03, 0xcd, 0x13, 0xe3, + 0xf9, 0xdd, 0xd3, 0xc4, 0xe1, 0xde, 0xb3, 0xc1, + 0x01, 0x46, 0x90, 0x2c, 0x00, 0xc6, 0x03, 0x1c, + 0xe9, 0xe5, 0x09, 0x49, 0x00, 0x0d, 0xa0, 0x2c, + 0xe2, 0x5b, 0x06, 0x5f, 0xfa, 0x7f, 0xd4, 0x00, + 0xc4, 0x50, 0xc4, 0x90, 0xc4, 0xd0, 0xe2, 0x8d, + 0x50, 0x00, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xa3, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8a, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x87, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x5e, 0x30, 0x5b, 0xfd, 0xb4, + 0xc0, 0x39, 0x30, 0x31, 0x10, 0x12, 0x10, 0x20, + 0xe9, 0x82, 0xd1, 0x42, 0xd3, 0x40, 0xe2, 0xea, + 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, + 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x48, 0xcc, 0xb1, + 0x1c, 0x9f, 0x06, 0xd0, 0xe9, 0x98, 0x01, 0x69, + 0xd0, 0x20, 0x3c, 0x80, 0xc0, 0x1c, 0x10, 0x08, + 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0x01, 0x74, + 0xd6, 0x00, 0x2c, 0x80, 0xde, 0x84, 0xde, 0xc4, + 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, + 0x30, 0x5a, 0xe5, 0xc8, 0x00, 0x26, 0xd0, 0x00, + 0x70, 0x00, 0x10, 0x20, 0xe9, 0xbf, 0x00, 0xe0, + 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5c, 0x30, 0x5b, + 0xb0, 0x41, 0xed, 0xc8, 0x0f, 0x17, 0xf9, 0xb4, + 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xb8, + 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb3, 0xd8, 0x29, + 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, + 0xe5, 0xc8, 0x0f, 0x17, 0xf9, 0xc3, 0x02, 0xf1, + 0xd8, 0x2b, 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, + 0xe2, 0x95, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xb5, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8e, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8b, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x5e, 0x30, 0x5b, 0xfd, 0xc6, + 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x88, + 0xbc, 0x10, 0xd0, 0x30, 0xc0, 0x40, 0x30, 0x70, + 0xed, 0x88, 0xd1, 0x42, 0xd3, 0x40, 0xe2, 0xea, + 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, + 0x17, 0x20, 0xf9, 0xb4, 0x00, 0xa8, 0xd0, 0x00, + 0xcc, 0x5b, 0x1c, 0x5f, 0x1c, 0x43, 0x20, 0x31, + 0x7c, 0x40, 0xb0, 0x3c, 0x7e, 0x80, 0xcc, 0xb1, + 0xce, 0xfa, 0x1c, 0x9f, 0x1e, 0xdf, 0x01, 0x69, + 0xd0, 0x3c, 0x0c, 0x99, 0xe9, 0xa6, 0x3c, 0x80, + 0x0e, 0xd9, 0xe9, 0xa9, 0x3e, 0xc0, 0x3e, 0xf2, + 0x3e, 0xb1, 0xd0, 0x01, 0x40, 0x1b, 0x10, 0x05, + 0x20, 0x1f, 0x2c, 0x40, 0x2c, 0x80, 0xd0, 0x30, + 0x70, 0x00, 0x2c, 0x80, 0xe3, 0x1e, 0xf2, 0xd3, + 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xda, + 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, + 0xe9, 0xd1, 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, + 0x10, 0x5c, 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xda, + 0x0f, 0x17, 0xf9, 0xc6, 0x0f, 0x49, 0xf2, 0xd3, + 0x0f, 0x19, 0xf9, 0xca, 0xdf, 0x00, 0x00, 0x06, + 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, 0xc0, 0x5b, + 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xda, 0x0f, 0x17, + 0xf9, 0xd5, 0x02, 0xf6, 0xde, 0x26, 0xe0, 0x46, + 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xa2, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8a, + 0xe1, 0x65, 0x30, 0x5a, 0xe5, 0x87, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x4f, 0x30, 0x5b, 0xfd, 0xb3, + 0xc0, 0x39, 0x30, 0x31, 0x10, 0x11, 0x10, 0x20, + 0xe9, 0x82, 0xd1, 0x42, 0xd3, 0x41, 0xe2, 0xea, + 0xcc, 0x5b, 0x1c, 0x42, 0x2c, 0x5b, 0xc0, 0x31, + 0x1c, 0x43, 0x2c, 0x40, 0x1c, 0x49, 0xcc, 0xb1, + 0x1c, 0x9f, 0xc0, 0x1c, 0x10, 0x08, 0x20, 0x1f, + 0x05, 0x50, 0xf9, 0x99, 0xb0, 0x3c, 0x2c, 0x40, + 0x2c, 0x80, 0x01, 0x74, 0xd6, 0x00, 0x2c, 0x80, + 0x02, 0xe4, 0xde, 0x80, 0xde, 0xc1, 0xe3, 0x1e, + 0xf2, 0xd3, 0xc0, 0x5c, 0xb0, 0x7f, 0x30, 0x5a, + 0xe5, 0xc7, 0x00, 0x26, 0xd0, 0x00, 0x70, 0x00, + 0x10, 0x20, 0xe9, 0xbe, 0x00, 0xe0, 0xd0, 0x44, + 0x70, 0x41, 0x10, 0x5b, 0x30, 0x5b, 0xb0, 0x41, + 0xed, 0xc7, 0x0f, 0x17, 0xf9, 0xb3, 0x0f, 0x49, + 0xf2, 0xd3, 0x0f, 0x19, 0xf9, 0xb7, 0xdf, 0x00, + 0x00, 0x06, 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, + 0xc0, 0x5b, 0x30, 0x54, 0xb0, 0x7e, 0xe5, 0xc7, + 0x0f, 0x17, 0xf9, 0xc2, 0x02, 0xff, 0xde, 0x27, + 0xe0, 0x46, 0xd3, 0x08, 0xd3, 0xc0, 0xe2, 0x95, + 0x50, 0x00, 0x50, 0x00, 0x03, 0x75, 0xd2, 0x73, + 0x00, 0x24, 0xdc, 0xd8, 0xf0, 0x4a, 0xe1, 0xac, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0x8e, + 0xe1, 0x30, 0x30, 0x5a, 0xe5, 0x8b, 0x37, 0x1a, + 0xb6, 0xff, 0xd0, 0x4f, 0x30, 0x5b, 0xfd, 0xbd, + 0xbc, 0x10, 0xd0, 0x10, 0x0c, 0x1e, 0xf9, 0x88, + 0xbc, 0x10, 0xd0, 0x20, 0xc0, 0x40, 0x30, 0x70, + 0xed, 0x88, 0xd1, 0x42, 0xd3, 0x41, 0xe2, 0xea, + 0x00, 0x24, 0xd0, 0x00, 0x2c, 0x40, 0x2c, 0x80, + 0x17, 0x20, 0xf9, 0xab, 0x00, 0x2a, 0xd0, 0x00, + 0x20, 0x1b, 0x20, 0x1b, 0x05, 0x50, 0xf9, 0x9b, + 0xb0, 0x3f, 0x10, 0x02, 0x7c, 0x40, 0xcc, 0xb1, + 0x1c, 0x9f, 0x01, 0x69, 0xd0, 0x3c, 0x0c, 0x99, + 0xe9, 0xa4, 0x3c, 0x80, 0xde, 0xa0, 0x2c, 0x5f, + 0x2c, 0x9f, 0xd0, 0x30, 0x70, 0x00, 0x2c, 0x80, + 0xde, 0xc1, 0xe3, 0x1e, 0xf2, 0xd3, 0xc0, 0x5c, + 0xb0, 0x7f, 0x30, 0x5a, 0xe5, 0xd1, 0x00, 0x26, + 0xd0, 0x00, 0x70, 0x00, 0x10, 0x20, 0xe9, 0xc8, + 0x00, 0xe0, 0xd0, 0x44, 0x70, 0x41, 0x10, 0x5b, + 0x30, 0x5b, 0xb0, 0x41, 0xed, 0xd1, 0x0f, 0x17, + 0xf9, 0xbd, 0x0f, 0x49, 0xf2, 0xd3, 0x0f, 0x19, + 0xf9, 0xc1, 0xdf, 0x00, 0x00, 0x06, 0x03, 0xb3, + 0xd8, 0x29, 0xe0, 0x46, 0xc0, 0x5b, 0x30, 0x54, + 0xb0, 0x7e, 0xe5, 0xd1, 0x0f, 0x17, 0xf9, 0xcc, + 0x03, 0x34, 0xdc, 0x20, 0xe0, 0x46, 0xd3, 0x08, + 0xd3, 0xc0, 0xe2, 0x95, 0xd0, 0x61, 0x23, 0x81, + 0x0c, 0x49, 0xd0, 0x61, 0x00, 0x8d, 0x10, 0xa0, + 0xea, 0x3b, 0x30, 0x42, 0xe6, 0x30, 0x23, 0x82, + 0x0f, 0xc5, 0x0c, 0x09, 0x05, 0x0d, 0x15, 0x20, + 0xfe, 0x45, 0xd0, 0x5f, 0x15, 0x63, 0xea, 0x43, + 0xd0, 0x50, 0x30, 0x54, 0xee, 0x4a, 0x0f, 0x17, + 0xfa, 0x45, 0x03, 0xb3, 0xd8, 0x29, 0xe0, 0x46, + 0x80, 0x07, 0x09, 0x49, 0xd4, 0x00, 0xd4, 0x40, + 0xd4, 0x80, 0xd4, 0xc0, 0x00, 0x4d, 0xa0, 0x6c, + 0xd0, 0xa1, 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, + 0x00, 0x50, 0xfa, 0x53, 0xf2, 0x32, 0xd3, 0x80, + 0xe1, 0x76, 0xd1, 0xc2, 0x41, 0xcf, 0x11, 0xdf, + 0xd0, 0x41, 0x01, 0xc1, 0x00, 0xef, 0xd0, 0xbe, + 0x03, 0x10, 0xf9, 0x77, 0x80, 0x07, 0x21, 0x96, + 0x11, 0xa2, 0xe9, 0x78, 0x03, 0x1d, 0xea, 0x73, + 0xc0, 0xd7, 0xc2, 0x90, 0xf2, 0xa4, 0xc4, 0x0a, + 0x03, 0xd0, 0xea, 0x72, 0xc2, 0x91, 0xf2, 0xa4, + 0xc4, 0x4a, 0x03, 0x1e, 0xea, 0x8d, 0xc0, 0xd8, + 0xc2, 0x92, 0xf2, 0xa4, 0xc4, 0x8a, 0x03, 0xd0, + 0xea, 0x7d, 0xc2, 0x93, 0xf2, 0xa4, 0xc4, 0xca, + 0xe2, 0x8d, 0xd3, 0xc0, 0xc0, 0xd7, 0xc2, 0x90, + 0xf2, 0xa4, 0xc4, 0x0a, 0x03, 0xd0, 0xea, 0x88, + 0xc2, 0x91, 0xf2, 0xa4, 0xc4, 0x4a, 0x08, 0x49, + 0x00, 0x4d, 0x10, 0x61, 0xf8, 0x11, 0x03, 0x1f, + 0xea, 0x93, 0x0d, 0xc9, 0x00, 0x4d, 0xd0, 0x1a, + 0xe2, 0x98, 0x03, 0x10, 0xfa, 0x97, 0xd0, 0x1d, + 0xe2, 0x98, 0xd0, 0x18, 0x0f, 0x16, 0xfa, 0x98, + 0xd0, 0x4c, 0x40, 0x4c, 0x10, 0x6c, 0xea, 0xa2, + 0x03, 0xde, 0xfa, 0xa2, 0x0f, 0x12, 0xfa, 0xa0, + 0x00, 0x08, 0xe2, 0xd9, 0xd2, 0x00, 0x13, 0xe1, + 0xee, 0xa9, 0x08, 0x49, 0x02, 0x0d, 0x00, 0xc8, + 0xc2, 0xca, 0x12, 0x94, 0xd0, 0x1f, 0x30, 0x07, + 0x12, 0xc0, 0xc2, 0x43, 0x12, 0x5a, 0x00, 0x0d, + 0x03, 0xde, 0xea, 0xb6, 0x0e, 0xc9, 0x04, 0x8d, + 0x02, 0x48, 0x22, 0x80, 0x12, 0x88, 0xd0, 0x0b, + 0x30, 0x03, 0x12, 0x80, 0xd0, 0x19, 0x20, 0x03, + 0x12, 0x80, 0x00, 0x0d, 0x22, 0xc0, 0x12, 0xc8, + 0xd0, 0x0b, 0x30, 0x09, 0x12, 0xc0, 0x12, 0xd8, + 0xd0, 0x16, 0x20, 0x09, 0x20, 0x07, 0x12, 0xc0, + 0x42, 0xc2, 0x22, 0x8b, 0x22, 0x88, 0x03, 0xde, + 0xea, 0xd2, 0x0e, 0xc9, 0xc4, 0x4a, 0x04, 0xcd, + 0x0f, 0xc5, 0x01, 0x46, 0x90, 0x4d, 0x00, 0xc6, + 0x10, 0x60, 0xe6, 0xd3, 0x0f, 0xc5, 0x01, 0x74, + 0xd6, 0x00, 0xca, 0x9d, 0xcb, 0x9e, 0xca, 0xea, + 0xcb, 0xee, 0x2a, 0xc0, 0x2b, 0xc0, 0xca, 0x10, + 0xca, 0x51, 0xcb, 0x12, 0xcb, 0x53, 0xd1, 0x40, + 0xd3, 0x41, 0xb7, 0x3f, 0xc0, 0x5c, 0xe1, 0x7b, + 0xd0, 0xc0, 0xc1, 0x28, 0xc2, 0x2a, 0xc2, 0xab, + 0xf1, 0x7a, 0x0f, 0x17, 0xfa, 0xef, 0xcc, 0xe8, + 0xcd, 0x29, 0xcd, 0x6c, 0xcd, 0xad, 0xc8, 0x08, + 0xc8, 0x49, 0xca, 0x0a, 0xca, 0x4b, 0xf3, 0x31, + 0xd0, 0xc1, 0xc1, 0x34, 0xc2, 0x2a, 0xc2, 0xab, + 0xf1, 0x7a, 0x00, 0x28, 0xd9, 0xc0, 0xc8, 0x88, + 0xc8, 0xc9, 0xa9, 0xf8, 0xca, 0x8a, 0xca, 0xcb, + 0x11, 0x62, 0xe9, 0x79, 0xd0, 0xc0, 0xc1, 0x35, + 0xc2, 0x2e, 0xc2, 0xaf, 0xf1, 0x7a, 0xc9, 0x08, + 0xc9, 0x49, 0xa9, 0xf8, 0xcb, 0x0a, 0xcb, 0x4b, + 0xd0, 0xc1, 0xc1, 0x36, 0xc2, 0x2e, 0xc2, 0xaf, + 0xf1, 0x7a, 0xc0, 0x27, 0xc9, 0x88, 0xc9, 0xc9, + 0xa0, 0x38, 0xcb, 0x8a, 0xcb, 0xcb, 0xe1, 0x79, + 0x5f, 0x0d, 0x07, 0x7d, 0xde, 0x07, 0x11, 0x5e, + 0x30, 0x05, 0xcd, 0xc0, 0x00, 0x28, 0xd0, 0x00, + 0xa0, 0x38, 0x11, 0x61, 0xf9, 0x75, 0x00, 0xe2, + 0xd0, 0x00, 0x0f, 0x1d, 0xeb, 0x29, 0x00, 0x2d, + 0xdf, 0x4b, 0xf3, 0x3f, 0xe1, 0x75, 0x04, 0xeb, + 0xd0, 0x00, 0x11, 0x62, 0xeb, 0x36, 0xb0, 0x20, + 0x0f, 0x19, 0xfb, 0x36, 0xac, 0xe0, 0x01, 0xa4, + 0xde, 0x00, 0x5e, 0x0d, 0x00, 0x2d, 0xdf, 0x7a, + 0xdd, 0xc0, 0xd8, 0x80, 0xd9, 0x00, 0xd9, 0x80, + 0x5f, 0x00, 0x01, 0x46, 0x00, 0x28, 0xd0, 0x01, + 0x00, 0x06, 0xa0, 0x37, 0x80, 0x3f, 0x00, 0xc6, + 0x0f, 0xc5, 0xad, 0xda, 0xc6, 0xb1, 0xd0, 0x01, + 0x01, 0xa3, 0xde, 0x1d, 0x40, 0x30, 0x3e, 0x00, + 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, 0xc8, 0x28, + 0xc8, 0x69, 0xc8, 0xaa, 0xc8, 0xeb, 0x0c, 0x1e, + 0xfb, 0x68, 0x26, 0xba, 0x07, 0x7d, 0xdc, 0x00, + 0x1d, 0xcf, 0x1d, 0xd1, 0x5d, 0xc0, 0x00, 0x2d, + 0xdf, 0x64, 0x0f, 0x87, 0xad, 0xda, 0x80, 0x3f, + 0x0e, 0x0a, 0x66, 0xda, 0xc9, 0x2c, 0xc9, 0x6d, + 0xc9, 0xae, 0xc9, 0xef, 0x0f, 0x2f, 0xd0, 0x37, + 0x4f, 0x00, 0x0f, 0x1a, 0xeb, 0xbe, 0x01, 0xa4, + 0xde, 0x20, 0xd0, 0x01, 0x40, 0x3c, 0x2e, 0x00, + 0x00, 0x2d, 0xdf, 0x7a, 0xac, 0xe0, 0x0f, 0x87, + 0x0e, 0x0a, 0x76, 0xe0, 0xbf, 0x79, 0xbe, 0x3c, + 0x0f, 0x1b, 0xeb, 0x9e, 0x0f, 0x87, 0x0e, 0x0a, + 0x76, 0xe1, 0xbf, 0x79, 0xbe, 0x34, 0x18, 0xa0, + 0xeb, 0xb9, 0x0f, 0x87, 0xad, 0x20, 0x80, 0x3f, + 0x0e, 0x0a, 0x76, 0xe2, 0xbf, 0x79, 0xbe, 0x3c, + 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe3, 0x0f, 0x1b, + 0xeb, 0xb3, 0xbf, 0x77, 0xbe, 0x0c, 0x19, 0x20, + 0xeb, 0xb9, 0x0f, 0x87, 0xad, 0x60, 0x80, 0x3f, + 0x0e, 0x0a, 0x76, 0xe4, 0xbe, 0x3c, 0xbf, 0x75, + 0x0f, 0x15, 0xf8, 0x1c, 0x1f, 0x0a, 0x1f, 0x16, + 0x0f, 0x87, 0x0e, 0x0a, 0x76, 0xe5, 0xbf, 0x79, + 0xbe, 0x34, 0x19, 0xa0, 0xeb, 0xb9, 0x0f, 0x87, + 0xad, 0xa0, 0x80, 0x3f, 0x0e, 0x0a, 0x76, 0xe6, + 0xbe, 0x3c, 0xbf, 0x79, 0x0f, 0x87, 0x0e, 0x0a, + 0x76, 0xe7, 0x0f, 0x15, 0xeb, 0xbe, 0x00, 0x2f, + 0xdf, 0x72, 0x1d, 0xe0, 0xf8, 0x1c, 0x00, 0x28, + 0xd0, 0x01, 0xa0, 0x38, 0x80, 0x3f, 0x0f, 0x87, + 0xd0, 0x01, 0x4d, 0xc0, 0x1f, 0x0f, 0x1f, 0x11, + 0x00, 0x2f, 0xdf, 0x76, 0xc6, 0xb2, 0x03, 0x7d, + 0xde, 0x0e, 0x01, 0xa3, 0xde, 0x2d, 0x5d, 0xc0, + 0x0f, 0x87, 0x1e, 0xe1, 0xeb, 0xdb, 0xad, 0xda, + 0x80, 0x3f, 0x0e, 0x0a, 0x66, 0xda, 0x0c, 0x1e, + 0xfb, 0xe4, 0x26, 0xbb, 0x03, 0xff, 0xdd, 0xff, + 0x4d, 0xc0, 0x00, 0xa3, 0xde, 0x2d, 0xbf, 0x56, + 0x0f, 0x87, 0x07, 0x7d, 0xde, 0x0e, 0x5d, 0xc0, + 0x00, 0xa3, 0xde, 0x1d, 0xad, 0xda, 0x80, 0x3f, + 0x0e, 0x0a, 0x66, 0xda, 0xdf, 0x5c, 0xd0, 0x0e, + 0x4f, 0x00, 0x0f, 0x87, 0xd0, 0x06, 0x40, 0x3c, + 0xeb, 0xf0, 0xbf, 0x3e, 0xb0, 0x04, 0xe7, 0xf2, + 0xeb, 0xf6, 0xbf, 0x0c, 0xbf, 0x3a, 0x0f, 0x87, + 0x0f, 0x1d, 0xfb, 0x4b, 0xbf, 0x38, 0x0f, 0x87, + 0x0f, 0x1c, 0xfb, 0xcb, 0xbf, 0x30, 0x0f, 0x87, + 0x50, 0x00, 0x50, 0x00, 0x0f, 0x17, 0xf9, 0x70, + 0x90, 0x4d, 0x10, 0x60, 0xe5, 0x72, 0x0f, 0x49, + 0x90, 0x4d, 0x10, 0x60, 0xe5, 0x76, 0x0f, 0x19, + 0xf9, 0x79, 0x01, 0x46, 0xd0, 0x11, 0xa0, 0x38, + 0x80, 0x3f, 0x00, 0xc6, 0xdf, 0x00, 0x00, 0x06, + 0x08, 0x20, 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x0a, + 0xa0, 0x1b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, + 0xa0, 0x27, 0x90, 0x4d, 0x0f, 0xff, 0xd8, 0x1f, + 0x40, 0x40, 0xa0, 0x4d, 0x80, 0x0a, 0xd0, 0x00, + 0x06, 0x50, 0xf9, 0x95, 0xd0, 0x01, 0xa0, 0x09, + 0x80, 0x1b, 0xa0, 0x27, 0x01, 0x20, 0xd0, 0x67, + 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, + 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, + 0x01, 0x20, 0xd0, 0x40, 0xa0, 0x69, 0x80, 0x2b, + 0x80, 0x07, 0x08, 0x20, 0xdf, 0x00, 0x02, 0x30, + 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, 0x01, 0xb0, + 0xd0, 0x10, 0xa0, 0x37, 0x80, 0x3f, 0x02, 0x30, + 0xd0, 0x01, 0xa0, 0x38, 0xd0, 0x10, 0xa0, 0x38, + 0x15, 0x63, 0xe9, 0xba, 0x05, 0x5e, 0xf9, 0xfa, + 0xc0, 0xdf, 0x00, 0xe0, 0xd1, 0x80, 0x70, 0x06, + 0x10, 0x1c, 0xc1, 0x40, 0x11, 0x48, 0xd3, 0x10, + 0x00, 0x21, 0xd0, 0x80, 0xb0, 0x16, 0xe9, 0xca, + 0xd3, 0x20, 0x10, 0x81, 0xb0, 0x16, 0xf9, 0xfa, + 0x30, 0xc2, 0xd2, 0x5e, 0xd0, 0x8f, 0x00, 0xee, + 0xd0, 0x54, 0x70, 0x41, 0x30, 0x43, 0xed, 0xd7, + 0xd2, 0x6c, 0x72, 0x49, 0xc0, 0x89, 0xb0, 0xbf, + 0x10, 0x9f, 0x22, 0x42, 0x04, 0x31, 0xd0, 0x10, + 0xc0, 0x42, 0x30, 0x49, 0xe5, 0xde, 0x10, 0x03, + 0xc1, 0x0c, 0xc1, 0x83, 0xb1, 0xbe, 0x01, 0x46, + 0x00, 0x06, 0xa0, 0x3d, 0xa0, 0x3c, 0x60, 0x06, + 0x00, 0xc6, 0xb1, 0xbc, 0xb1, 0x01, 0xed, 0xe1, + 0xc1, 0x0c, 0x21, 0x85, 0x01, 0x46, 0x00, 0x06, + 0xa0, 0x3d, 0xa0, 0x3c, 0x60, 0x06, 0x00, 0xc6, + 0xb1, 0xbc, 0xb1, 0x01, 0xed, 0xec, 0x02, 0xe4, + 0xd0, 0x00, 0x20, 0xc0, 0xb2, 0x41, 0xed, 0xd8, + 0x15, 0xa3, 0xfa, 0x00, 0xbc, 0x10, 0x0c, 0x1e, + 0xfa, 0x00, 0xbc, 0x10, 0xd0, 0x04, 0x70, 0x00, + 0x10, 0x20, 0xfa, 0x00, 0x00, 0x27, 0xd0, 0x10, + 0xd0, 0x40, 0x60, 0x40, 0x00, 0x26, 0xd0, 0x14, + 0x60, 0x40, 0xb0, 0x28, 0x70, 0x40, 0xb0, 0x7f, + 0x60, 0x40, 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, + 0x50, 0x00, 0x50, 0x00, 0x00, 0x28, 0xd1, 0xb0, + 0x70, 0x06, 0xd0, 0x81, 0x60, 0x86, 0x10, 0x20, + 0xe9, 0xab, 0xb0, 0x3f, 0x60, 0x06, 0x00, 0xec, + 0xd1, 0x84, 0x70, 0x46, 0xb1, 0x84, 0x70, 0x86, + 0x30, 0x42, 0xe9, 0xab, 0x70, 0x42, 0xd0, 0x35, + 0x30, 0x40, 0xf9, 0xab, 0x00, 0x63, 0xd0, 0x3f, + 0xb0, 0xbc, 0x40, 0x80, 0x70, 0xc2, 0x10, 0xe3, + 0xe5, 0xab, 0xb0, 0xbc, 0x40, 0x80, 0x60, 0x86, + 0x00, 0x28, 0xd0, 0x24, 0x70, 0x40, 0x00, 0x22, + 0xd0, 0x80, 0x50, 0x42, 0x60, 0x40, 0x00, 0x64, + 0xd0, 0x60, 0xd0, 0x90, 0x60, 0x81, 0x00, 0xed, + 0xd1, 0x88, 0x70, 0x46, 0x10, 0xe4, 0xe9, 0xa8, + 0x00, 0x21, 0xd0, 0xe8, 0xd0, 0x00, 0x60, 0x03, + 0xd0, 0x81, 0x40, 0x42, 0x60, 0x46, 0x02, 0x3c, + 0xda, 0x89, 0xe0, 0x46, 0xd0, 0x82, 0x50, 0x42, + 0x60, 0x46, 0x00, 0x23, 0xd5, 0x3e, 0x01, 0x7a, + 0xde, 0x1a, 0xe0, 0x46, 0x01, 0x46, 0xdf, 0x5c, + 0x08, 0x20, 0xd1, 0x00, 0xcf, 0x04, 0x11, 0x08, + 0xa1, 0x0a, 0xa1, 0x1b, 0x11, 0x1f, 0xa1, 0x27, + 0xd2, 0x80, 0xb2, 0x81, 0x90, 0x4d, 0xc0, 0x01, + 0x10, 0x14, 0x00, 0x16, 0xe9, 0x8d, 0x80, 0x33, + 0x80, 0x3f, 0x92, 0x8b, 0x00, 0x23, 0xd0, 0x3f, + 0x42, 0x80, 0xe9, 0x8d, 0x0f, 0xff, 0xdf, 0xff, + 0x40, 0x01, 0xa0, 0x0d, 0xe1, 0x94, 0xa1, 0x0a, + 0x00, 0xea, 0xd0, 0x00, 0xd0, 0x8e, 0x00, 0x06, + 0x0f, 0x0b, 0x70, 0x80, 0x80, 0x73, 0x80, 0x0a, + 0xd0, 0x00, 0x06, 0x50, 0xf9, 0x9a, 0xd0, 0x01, + 0xd0, 0x44, 0x40, 0x70, 0x20, 0x01, 0x15, 0x63, + 0xf9, 0xa1, 0x80, 0x1b, 0xe1, 0xa2, 0x80, 0x5b, + 0xa0, 0x27, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, + 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, + 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, + 0xd0, 0x40, 0xa0, 0x69, 0x80, 0x2b, 0x80, 0x07, + 0x08, 0x20, 0xd0, 0x00, 0xcf, 0x00, 0x02, 0x30, + 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, 0x01, 0xb2, + 0xd2, 0x10, 0xa0, 0x37, 0x80, 0x3f, 0x02, 0x30, + 0xd0, 0x01, 0xa0, 0x38, 0x00, 0x30, 0xd0, 0x10, + 0xa0, 0x38, 0x80, 0x3f, 0x00, 0xc6, 0x00, 0x28, + 0xd1, 0x24, 0x70, 0x04, 0xd0, 0x41, 0x50, 0x01, + 0x60, 0x04, 0x00, 0x27, 0xd0, 0x18, 0x70, 0x40, + 0xb0, 0x7f, 0x60, 0x40, 0x00, 0x26, 0xd0, 0x20, + 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0x08, 0x20, + 0xdf, 0x00, 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, + 0xd4, 0xc0, 0xd3, 0x81, 0x12, 0xa0, 0xed, 0xe3, + 0xd0, 0x08, 0x0a, 0x09, 0x00, 0x4d, 0xb0, 0x01, + 0xed, 0xdf, 0x03, 0xbe, 0xd6, 0x27, 0xe0, 0x46, + 0x50, 0x00, 0x50, 0x00, 0x02, 0x24, 0xd0, 0x00, + 0xa0, 0x37, 0x00, 0x27, 0xd3, 0xd0, 0x00, 0x26, + 0xd0, 0x04, 0x73, 0xcf, 0x13, 0xe1, 0xe9, 0x7b, + 0xb0, 0x3c, 0xf2, 0x00, 0x00, 0x26, 0xd0, 0x40, + 0xd0, 0x00, 0x60, 0x01, 0x00, 0x26, 0xd0, 0x14, + 0xf2, 0x00, 0x00, 0x26, 0xd0, 0x18, 0xf2, 0x00, + 0x00, 0xee, 0xd0, 0x1c, 0x71, 0x40, 0xd1, 0x1e, + 0x15, 0x63, 0xe9, 0x8d, 0x11, 0x1f, 0xc7, 0x1a, + 0xb7, 0x01, 0xd3, 0x81, 0xc4, 0xd4, 0xf2, 0x04, + 0x00, 0x26, 0xd0, 0x18, 0x70, 0x40, 0xb0, 0x54, + 0xfd, 0x9b, 0x00, 0xed, 0xd0, 0x24, 0xd0, 0x44, + 0x60, 0x40, 0x13, 0xe1, 0xf9, 0xbc, 0x15, 0xa3, + 0xf9, 0xa1, 0x0c, 0x10, 0xe9, 0xb9, 0x11, 0x61, + 0xe5, 0xb3, 0xed, 0xb9, 0x15, 0xa3, 0xf9, 0xab, + 0x00, 0x26, 0xd0, 0x14, 0x70, 0x40, 0x10, 0x62, + 0xf5, 0xb3, 0x15, 0x22, 0xe5, 0xb3, 0xc0, 0x44, + 0x30, 0x54, 0xe5, 0xb3, 0x34, 0xd4, 0xf5, 0xb3, + 0xe1, 0xbf, 0x03, 0xb3, 0xd8, 0x29, 0x00, 0x26, + 0xd0, 0x40, 0x60, 0x01, 0xe1, 0xdb, 0x03, 0xb3, + 0xd8, 0x29, 0xe0, 0x46, 0x01, 0x7a, 0xde, 0x1a, + 0xe0, 0x46, 0x80, 0x07, 0x09, 0x49, 0xd4, 0x00, + 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, 0x00, 0x4d, + 0xa0, 0x6c, 0xd3, 0x80, 0xd0, 0xa1, 0x00, 0x88, + 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, 0xf9, 0xc9, + 0x0c, 0x49, 0xd0, 0x61, 0x00, 0x8d, 0x10, 0xa0, + 0xe9, 0x90, 0x30, 0x42, 0xf5, 0xd8, 0xd0, 0x61, + 0x23, 0x81, 0xe1, 0xce, 0x23, 0x82, 0x13, 0xa1, + 0xf9, 0x90, 0xd0, 0x42, 0x15, 0xa1, 0xf9, 0xdf, + 0xb0, 0x7f, 0x00, 0x26, 0xd0, 0x14, 0x70, 0x00, + 0x30, 0x01, 0xf5, 0xe8, 0x16, 0xe0, 0xe5, 0xe8, + 0xb6, 0xc1, 0xbc, 0x20, 0xc0, 0x44, 0x30, 0x5b, + 0xfd, 0xb9, 0xc0, 0x44, 0x30, 0x54, 0xe5, 0xb9, + 0x15, 0x63, 0xf9, 0xf8, 0x15, 0xa3, 0xf9, 0xf5, + 0x03, 0x3b, 0xda, 0x1c, 0xe0, 0x46, 0x03, 0x38, + 0xdc, 0x17, 0xe0, 0x46, 0x15, 0xa3, 0xf9, 0xfd, + 0x03, 0x72, 0xd0, 0x19, 0xe0, 0x46, 0x03, 0x3f, + 0xd2, 0x17, 0xe0, 0x46, 0x70, 0x40, 0xb0, 0x7f, + 0x60, 0x40, 0x0f, 0xc5, 0xdf, 0x00, 0x0c, 0x09, + 0x05, 0x0d, 0x08, 0x20, 0xdf, 0x00, 0x0f, 0xc5, + 0x50, 0x00, 0x50, 0x00, 0x00, 0xef, 0xd0, 0x14, + 0x70, 0x40, 0x10, 0x60, 0xe9, 0x45, 0xb0, 0x04, + 0x70, 0x40, 0xb0, 0x41, 0xed, 0x44, 0x00, 0xed, + 0xd0, 0x24, 0xd0, 0x44, 0x60, 0x40, 0x00, 0x64, + 0xd0, 0x20, 0x70, 0x00, 0x10, 0x30, 0xe9, 0x45, + 0x00, 0x21, 0xd0, 0x28, 0x60, 0x40, 0x00, 0x64, + 0xd2, 0xc0, 0x70, 0x0b, 0x00, 0x11, 0xe9, 0x6a, + 0x08, 0x20, 0xd0, 0x4f, 0x30, 0x40, 0xe9, 0x55, + 0xb0, 0x4f, 0xf9, 0x6a, 0x03, 0xef, 0xdf, 0xbf, + 0xaf, 0xb8, 0xdf, 0x80, 0x0f, 0x87, 0xd0, 0x18, + 0x70, 0x00, 0x10, 0x20, 0xed, 0x6c, 0xdf, 0x84, + 0xd0, 0x40, 0x60, 0x7e, 0x00, 0x27, 0xd0, 0x54, + 0x70, 0x41, 0x10, 0x60, 0x01, 0xa0, 0xd0, 0x40, + 0xa0, 0x78, 0x80, 0x34, 0x80, 0x3f, 0x01, 0x3c, + 0xd2, 0x39, 0x00, 0x21, 0xdf, 0x86, 0x0f, 0x87, + 0xd0, 0x40, 0x60, 0x4b, 0x03, 0xe5, 0xd0, 0x10, + 0xe0, 0x36, 0x50, 0x00, 0x00, 0x28, 0xd0, 0x24, + 0x72, 0xc0, 0xd0, 0x40, 0x60, 0x40, 0xd0, 0x0c, + 0x52, 0xc0, 0xc0, 0x1c, 0x30, 0x1d, 0xf5, 0x3c, + 0x20, 0x1f, 0x30, 0x1e, 0x90, 0x6d, 0x20, 0x01, + 0x00, 0x22, 0xd0, 0x58, 0x60, 0x01, 0x00, 0xe3, + 0xd0, 0x48, 0x70, 0x41, 0x30, 0x40, 0xf5, 0x47, + 0xb2, 0xc8, 0x00, 0xe3, 0xd0, 0x4c, 0x70, 0x41, + 0x30, 0x40, 0xfd, 0x4d, 0xb2, 0xc4, 0x00, 0x28, + 0xd0, 0x20, 0x70, 0x00, 0x42, 0xc0, 0xa2, 0xc5, + 0x12, 0xe0, 0xe9, 0x55, 0x80, 0x40, 0x80, 0x34, + 0x80, 0x3f, 0xcf, 0x95, 0x82, 0x34, 0x80, 0x3f, + 0x03, 0xe7, 0xd0, 0x08, 0x1f, 0xa3, 0xe9, 0x60, + 0x03, 0xe9, 0xd0, 0x08, 0x00, 0x27, 0xd0, 0x4c, + 0x7f, 0x81, 0x00, 0x27, 0xd0, 0x54, 0x70, 0x41, + 0x10, 0x60, 0x03, 0xa0, 0xd0, 0x40, 0xa0, 0x78, + 0xe0, 0x3c, 0x50, 0x00, 0xc0, 0x84, 0x10, 0x8c, + 0x10, 0x92, 0xd0, 0x41, 0x30, 0x4d, 0x40, 0x43, + 0x10, 0x43, 0x20, 0x81, 0xd1, 0x8f, 0x41, 0x82, + 0x10, 0x9c, 0x20, 0x9b, 0xc1, 0xc2, 0x10, 0x82, + 0x20, 0x87, 0xc0, 0x42, 0x10, 0x43, 0x20, 0x81, + 0x10, 0x88, 0x22, 0x02, 0x10, 0x97, 0x01, 0xd0, + 0xe9, 0x48, 0xb0, 0x96, 0x10, 0x88, 0x22, 0x82, + 0xc0, 0x5c, 0x10, 0x48, 0xc0, 0x84, 0x10, 0x91, + 0x10, 0x86, 0x20, 0x42, 0x41, 0x0d, 0x11, 0x02, + 0x20, 0x44, 0x22, 0x01, 0x22, 0x81, 0x02, 0xe4, + 0xd2, 0x40, 0xc2, 0xca, 0xb2, 0xe0, 0x01, 0xd0, + 0xe9, 0x5e, 0xc2, 0xca, 0x22, 0xc9, 0xb2, 0xa0, + 0x22, 0x48, 0xd0, 0x78, 0x03, 0x50, 0xf9, 0x69, + 0xd0, 0x7c, 0x01, 0x9d, 0xf9, 0x69, 0xc2, 0x48, + 0xb2, 0x60, 0xc2, 0xca, 0xb2, 0xf0, 0x11, 0x82, + 0x41, 0x81, 0x22, 0x06, 0x11, 0x9f, 0x41, 0x81, + 0x22, 0x86, 0x0f, 0xc5, 0xc0, 0x84, 0x10, 0x8c, + 0x10, 0x92, 0xd1, 0x8f, 0x41, 0x82, 0x10, 0x9c, + 0xc1, 0xdb, 0x11, 0xc1, 0x21, 0xc3, 0x20, 0x87, + 0xc1, 0xc2, 0x10, 0x82, 0x20, 0x87, 0xc0, 0x42, + 0x10, 0x43, 0x20, 0x81, 0x10, 0x88, 0x22, 0x02, + 0x10, 0x97, 0x01, 0xd0, 0xe9, 0x46, 0xb0, 0x96, + 0x10, 0x88, 0x22, 0x82, 0xc0, 0x5c, 0x10, 0x48, + 0xc0, 0x84, 0x10, 0x91, 0x10, 0x86, 0x20, 0x42, + 0xd0, 0x81, 0x41, 0x02, 0x11, 0x02, 0x20, 0x44, + 0x22, 0x01, 0x22, 0x81, 0x02, 0xe4, 0xd2, 0x40, + 0xc2, 0xca, 0xb2, 0xe0, 0x01, 0xd0, 0xe9, 0x5d, + 0xc2, 0xca, 0x22, 0xc9, 0xb2, 0xa0, 0x22, 0x48, + 0x11, 0x9f, 0x11, 0x83, 0x22, 0x06, 0x11, 0x9c, + 0x11, 0x83, 0x22, 0x86, 0x0f, 0xc5, 0xd0, 0x41, + 0x40, 0x44, 0x20, 0x55, 0x10, 0x62, 0xf9, 0x6f, + 0x01, 0x74, 0xd6, 0x00, 0xc2, 0x9f, 0xc2, 0x1f, + 0x22, 0x80, 0xe1, 0x30, 0x0f, 0x11, 0xf9, 0x51, + 0x90, 0x38, 0x80, 0x3f, 0x00, 0x1b, 0xf9, 0x51, + 0x00, 0x27, 0xd0, 0x04, 0x70, 0x40, 0x30, 0x71, + 0xf9, 0x51, 0xb0, 0x3c, 0x70, 0x40, 0x30, 0x5d, + 0xf9, 0x51, 0xb0, 0x08, 0x70, 0x40, 0xb0, 0x7f, + 0x60, 0x40, 0x10, 0x63, 0xe5, 0x5d, 0x02, 0x20, + 0xd0, 0x01, 0xa0, 0x37, 0x00, 0x26, 0xd0, 0x24, + 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0xb0, 0x08, + 0x70, 0x40, 0xb0, 0x41, 0x60, 0x40, 0x00, 0x26, + 0xd0, 0x30, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, + 0xb0, 0x30, 0xd0, 0x40, 0x60, 0x40, 0xb0, 0x3c, + 0x6c, 0x40, 0xb0, 0x3c, 0x67, 0x40, 0x00, 0x33, + 0xdf, 0x78, 0xe0, 0x36, 0x00, 0x26, 0xd0, 0x1c, + 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, 0xb0, 0x3c, + 0x70, 0x40, 0xb0, 0x41, 0x60, 0x40, 0x08, 0x20, + 0xdf, 0x00, 0x80, 0x35, 0xc0, 0x3c, 0x10, 0x08, + 0xa0, 0x0a, 0xa0, 0x27, 0xa0, 0x1b, 0xdf, 0x5c, + 0x01, 0xa0, 0xd0, 0x00, 0xa0, 0x38, 0x80, 0x3f, + 0x80, 0x34, 0x80, 0x3f, 0x03, 0xba, 0xda, 0x1e, + 0xcf, 0x95, 0x82, 0x34, 0x80, 0x3f, 0x03, 0xe7, + 0xd0, 0x08, 0x1f, 0xa3, 0xe9, 0x55, 0x1f, 0xa0, + 0xe9, 0x55, 0x03, 0xe9, 0xd0, 0x08, 0x00, 0x21, + 0xdf, 0x86, 0xe0, 0x3c, 0x89, 0x78, 0x89, 0x37, + 0x00, 0xee, 0xd0, 0x14, 0x76, 0x00, 0xd0, 0x30, + 0x76, 0x40, 0x26, 0x58, 0xd6, 0xd9, 0x00, 0xee, + 0xd0, 0x20, 0x75, 0x40, 0xd0, 0x1c, 0x71, 0x40, + 0xd0, 0x20, 0x71, 0x00, 0xd0, 0x24, 0x70, 0x80, + 0xc4, 0x02, 0xd0, 0x28, 0x70, 0xc0, 0x00, 0x21, + 0xd0, 0x10, 0x72, 0x00, 0x93, 0x90, 0xd4, 0x81, + 0x13, 0x96, 0x43, 0x92, 0x34, 0x8e, 0x00, 0x22, + 0xd1, 0xa4, 0x71, 0x86, 0xde, 0x40, 0x7e, 0x79, + 0xd0, 0x18, 0x70, 0x40, 0xb0, 0x41, 0xf5, 0x58, + 0xd3, 0x42, 0x50, 0x4d, 0x60, 0x40, 0x10, 0x60, + 0xe5, 0x62, 0xd0, 0x54, 0x70, 0x01, 0xb0, 0x3c, + 0x60, 0x01, 0x04, 0x2d, 0xd0, 0x08, 0xe0, 0x36, + 0x00, 0x22, 0xd0, 0x60, 0x71, 0xc1, 0xd0, 0x4f, + 0x41, 0xc1, 0x03, 0xef, 0xd0, 0x30, 0xe0, 0x36, + 0x50, 0x00, 0x50, 0x00, 0x04, 0x21, 0xd0, 0x20, + 0xd3, 0x44, 0x72, 0x8d, 0x12, 0xa0, 0xe8, 0x36, + 0xc0, 0x47, 0x10, 0x5d, 0x30, 0x4e, 0xf8, 0x36, + 0xb2, 0x3e, 0x60, 0x4d, 0x00, 0xed, 0xd0, 0x48, + 0x70, 0x01, 0xde, 0x45, 0x50, 0x39, 0x00, 0x1b, + 0xf9, 0x44, 0xb0, 0x01, 0x00, 0x1c, 0xf9, 0x47, + 0xb0, 0x04, 0x60, 0x01, 0xd0, 0x40, 0x62, 0x81, + 0xce, 0x4a, 0xd0, 0x43, 0x41, 0xc1, 0xd0, 0x58, + 0x61, 0xc1, 0x90, 0x43, 0x00, 0xe0, 0xd0, 0x28, + 0x70, 0x00, 0x10, 0x1f, 0x20, 0x40, 0xb1, 0xc1, + 0xf5, 0x54, 0x00, 0x21, 0xd0, 0x08, 0x60, 0x40, + 0x00, 0xe6, 0xd0, 0x40, 0x70, 0x41, 0xd2, 0x94, + 0x60, 0x4a, 0x04, 0x2b, 0xd0, 0x10, 0x01, 0x90, + 0xf8, 0x36, 0x04, 0x2d, 0xd0, 0x08, 0xe0, 0x36, + 0x50, 0x00, 0x50, 0x00, 0xc0, 0x47, 0x10, 0x5d, + 0x30, 0x4e, 0xf9, 0x41, 0x90, 0x43, 0x00, 0xe0, + 0xd0, 0x28, 0x70, 0x00, 0x20, 0x40, 0x00, 0x21, + 0xd0, 0x08, 0x60, 0x40, 0x00, 0x26, 0xd0, 0x74, + 0x70, 0x01, 0xb0, 0x3f, 0x60, 0x01, 0x00, 0xed, + 0xd0, 0x48, 0x70, 0x41, 0x00, 0x5e, 0xf9, 0x4b, + 0x00, 0x21, 0xd0, 0x00, 0x73, 0x80, 0xd4, 0x81, + 0x34, 0x8e, 0x00, 0x34, 0xd3, 0x48, 0xe0, 0x36, + 0x50, 0x00, 0x50, 0x00, 0xd1, 0x88, 0xd1, 0xc8, + 0x01, 0x1b, 0xe9, 0x39, 0x11, 0x9f, 0x11, 0xdf, + 0xd4, 0x80, 0xd3, 0x81, 0xe1, 0x43, 0x00, 0xed, + 0xd0, 0x08, 0x70, 0x00, 0x00, 0x10, 0xf9, 0x37, + 0x0c, 0x1f, 0xf9, 0x36, 0x13, 0xa1, 0xe9, 0x43, + 0xbe, 0x7c, 0x00, 0x65, 0xd2, 0x46, 0x12, 0x48, + 0xc0, 0x39, 0x30, 0x18, 0xe5, 0x4b, 0xd2, 0x70, + 0x72, 0x49, 0x22, 0x79, 0x00, 0x21, 0xd0, 0x00, + 0x63, 0x80, 0x04, 0x24, 0xd0, 0x00, 0x02, 0x10, + 0xe9, 0x56, 0xd0, 0x41, 0x51, 0x41, 0xe0, 0x36, + 0x15, 0x61, 0xe8, 0x36, 0xd5, 0x80, 0xd3, 0x00, + 0xd3, 0x40, 0x04, 0x27, 0xd0, 0x20, 0xe0, 0x36, + 0x50, 0x00, 0x50, 0x00, 0x00, 0x21, 0xd0, 0x18, + 0x73, 0x00, 0xb0, 0x04, 0x73, 0x80, 0xd2, 0x80, + 0xb0, 0x38, 0x72, 0xc0, 0x31, 0x0d, 0xc0, 0x0e, + 0x10, 0x0b, 0x10, 0x20, 0xe9, 0x42, 0xf5, 0x3f, + 0x22, 0x8d, 0x10, 0x01, 0x13, 0x5f, 0xe1, 0x3b, + 0x33, 0x8b, 0x15, 0x61, 0xf9, 0x49, 0x00, 0x21, + 0xd0, 0x64, 0x70, 0x41, 0x33, 0x81, 0x03, 0xd0, + 0xe9, 0x4c, 0x20, 0x0b, 0x13, 0xdf, 0x12, 0xc1, + 0x13, 0xe0, 0xf9, 0x49, 0x10, 0x03, 0xc0, 0x50, + 0x10, 0x4b, 0x13, 0x0b, 0x23, 0x00, 0x13, 0x20, + 0xe9, 0x5c, 0xf5, 0x59, 0x22, 0x81, 0x13, 0x01, + 0x10, 0x5f, 0xe1, 0x55, 0x12, 0x99, 0x12, 0x87, + 0x21, 0x0a, 0x00, 0xa0, 0xd2, 0x80, 0xc3, 0x0a, + 0x03, 0x90, 0xe9, 0x66, 0x22, 0x82, 0x23, 0x03, + 0x10, 0x81, 0x10, 0xc1, 0x13, 0x9f, 0x13, 0xa0, + 0xed, 0x62, 0xc0, 0x8a, 0xc0, 0xcc, 0x04, 0x26, + 0xd0, 0x00, 0xe0, 0x36, 0x15, 0x61, 0xf9, 0x3d, + 0x07, 0x32, 0xd0, 0x00, 0x30, 0x03, 0xed, 0x3d, + 0xc0, 0x03, 0x10, 0x1d, 0x30, 0xc0, 0xc0, 0x02, + 0x10, 0x1d, 0x30, 0x80, 0xe1, 0x32, 0x10, 0x94, + 0x10, 0xd4, 0x00, 0x21, 0xd0, 0x20, 0x73, 0x00, + 0xc5, 0x8c, 0xd3, 0x4e, 0x01, 0x1b, 0xe9, 0x48, + 0x13, 0x1f, 0xd3, 0x4f, 0x43, 0x4c, 0x13, 0x1c, + 0xc0, 0x0c, 0x10, 0x03, 0x20, 0x0c, 0xc0, 0x40, + 0x10, 0x42, 0x20, 0x40, 0x10, 0x46, 0x20, 0x4d, + 0x10, 0x42, 0x2e, 0x41, 0x10, 0x5c, 0x10, 0x43, + 0x00, 0x59, 0xe9, 0x5b, 0x01, 0x69, 0xd0, 0x20, + 0x30, 0x40, 0x22, 0x41, 0x04, 0x27, 0xd0, 0x20, + 0xe0, 0x36, 0x50, 0x00, 0x2c, 0x14, 0xd0, 0x34, + 0x63, 0x00, 0xd0, 0x38, 0x72, 0xc0, 0xc0, 0x51, + 0x10, 0x5c, 0x30, 0x4b, 0x10, 0x44, 0xd4, 0xc0, + 0xd5, 0x00, 0xc0, 0x18, 0x30, 0x39, 0xed, 0x5f, + 0xd4, 0xd0, 0xc5, 0x01, 0xd0, 0x18, 0x70, 0x00, + 0x0c, 0x1f, 0xe9, 0x48, 0x10, 0x20, 0xfd, 0x48, + 0xd4, 0xc0, 0xd5, 0x00, 0x10, 0x22, 0xe5, 0x4e, + 0xd4, 0xc0, 0xbc, 0x30, 0xd5, 0x00, 0xb5, 0x10, + 0xb0, 0x3f, 0xf9, 0x52, 0x3c, 0x01, 0x3c, 0x01, + 0x02, 0x1f, 0xe9, 0x5f, 0x00, 0xa8, 0xd3, 0xc0, + 0xd3, 0x9e, 0x00, 0xa9, 0xd0, 0x38, 0x70, 0x4f, + 0xb3, 0xfc, 0x60, 0x40, 0xb0, 0x3c, 0xb3, 0x81, + 0xed, 0x59, 0x00, 0x21, 0xd0, 0x28, 0x70, 0x00, + 0x10, 0x20, 0xf9, 0x69, 0x02, 0x1f, 0xf9, 0x6a, + 0x90, 0x10, 0x00, 0x1e, 0xe9, 0x6a, 0xb1, 0x7c, + 0x04, 0x29, 0xd0, 0x20, 0xe0, 0x36, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x01, 0x5e, 0xf9, 0x35, + 0x01, 0x50, 0xe9, 0x35, 0xb1, 0x78, 0xd2, 0x00, + 0x01, 0x5c, 0xf9, 0x5f, 0xc0, 0x18, 0x30, 0x39, + 0xed, 0x5f, 0x11, 0x9f, 0xce, 0x58, 0xc2, 0x59, + 0x00, 0xa9, 0xd2, 0x38, 0x14, 0x82, 0x22, 0x12, + 0xc0, 0x0c, 0x10, 0x1f, 0x10, 0x03, 0x22, 0x00, + 0x70, 0x48, 0x03, 0x10, 0xe9, 0x4c, 0xb2, 0x38, + 0xbe, 0x60, 0xb2, 0x60, 0x2e, 0x41, 0x10, 0x5f, + 0x00, 0x59, 0xe9, 0x53, 0x01, 0x69, 0xd0, 0x3c, + 0x30, 0x40, 0x22, 0x41, 0x13, 0x41, 0x2e, 0x4d, + 0x13, 0x5d, 0x13, 0x43, 0x22, 0x4d, 0x14, 0xe0, + 0xe9, 0x5f, 0x33, 0x0b, 0x13, 0x04, 0x2c, 0x0c, + 0x35, 0x0c, 0xc3, 0x46, 0xc3, 0x87, 0x04, 0x61, + 0xd0, 0x28, 0x15, 0x62, 0xfc, 0x36, 0x04, 0x2f, + 0xd0, 0x28, 0xe0, 0x36, 0x00, 0x22, 0xd0, 0x74, + 0x74, 0x01, 0xb0, 0x7c, 0x74, 0x41, 0xb0, 0x7c, + 0x00, 0x27, 0xd0, 0x20, 0x30, 0x11, 0xf5, 0x3b, + 0x24, 0x40, 0x71, 0x41, 0xd1, 0x08, 0xc0, 0x10, + 0x10, 0x1c, 0xb0, 0x16, 0xf9, 0x4a, 0x00, 0x23, + 0xd0, 0x30, 0x30, 0x11, 0xf9, 0x4a, 0xb1, 0x70, + 0x01, 0x50, 0xf9, 0x4a, 0xb1, 0x20, 0x14, 0x41, + 0xc0, 0x90, 0x00, 0x2b, 0xd0, 0xd0, 0x01, 0x50, + 0xe9, 0x50, 0xc0, 0xd0, 0x00, 0x34, 0xdc, 0x00, + 0x20, 0x11, 0x10, 0x1f, 0xa0, 0x1c, 0x00, 0x21, + 0xd0, 0x2c, 0x70, 0x00, 0x10, 0x05, 0x51, 0x40, + 0xd0, 0x1c, 0x61, 0x40, 0xd0, 0x20, 0x61, 0x00, + 0xd0, 0x24, 0x60, 0x80, 0xd0, 0x28, 0x60, 0xc0, + 0x04, 0x2d, 0xd0, 0x08, 0x00, 0x22, 0xd0, 0x64, + 0xb1, 0x81, 0x61, 0x81, 0xe0, 0x36, 0x50, 0x00, + 0x50, 0x00, 0x50, 0x00, 0x90, 0x50, 0xd0, 0x3c, + 0x10, 0x41, 0x60, 0x40, 0x15, 0x62, 0xfd, 0x3d, + 0xc0, 0x10, 0x10, 0x1e, 0x10, 0x07, 0x21, 0x00, + 0x10, 0x16, 0x34, 0x00, 0xc0, 0x90, 0xd3, 0x40, + 0x00, 0x24, 0xd3, 0xc0, 0x04, 0x22, 0xd0, 0x20, + 0x01, 0x9f, 0xe8, 0x36, 0xd0, 0x54, 0x70, 0x41, + 0x73, 0x41, 0x04, 0x2e, 0xd0, 0x00, 0xe0, 0x36, + 0x50, 0x00, 0x50, 0x00, 0x00, 0xef, 0xd3, 0x30, + 0x73, 0x0c, 0xd0, 0x0c, 0x70, 0x00, 0xc0, 0x40, + 0x13, 0x24, 0xf5, 0x42, 0x13, 0x22, 0xe9, 0x41, + 0xe5, 0x43, 0xd3, 0x00, 0x10, 0x22, 0xf9, 0x41, + 0xd0, 0x01, 0xd0, 0x43, 0xd3, 0x01, 0x21, 0x00, + 0xd3, 0x40, 0x03, 0x10, 0xf9, 0x47, 0xd3, 0x40, + 0xe1, 0x61, 0x00, 0x23, 0xd0, 0x00, 0x10, 0x61, + 0xe9, 0x50, 0xb0, 0x33, 0x10, 0x63, 0xe9, 0x50, + 0x00, 0x22, 0xd0, 0x1a, 0xc3, 0xc0, 0xd2, 0xc0, + 0x00, 0x10, 0xe9, 0x55, 0x22, 0xd0, 0x10, 0x1f, + 0x14, 0x01, 0x10, 0x20, 0xed, 0x52, 0x14, 0x18, + 0x12, 0xd8, 0xc0, 0x8b, 0x32, 0xd0, 0x12, 0xc3, + 0x33, 0x4b, 0x13, 0x47, 0x21, 0x0d, 0x04, 0x22, + 0xd0, 0x20, 0xe0, 0x36, 0x00, 0x24, 0xd0, 0x30, + 0xd0, 0x40, 0x60, 0x40, 0xd3, 0xc7, 0x43, 0xc4, + 0x31, 0x0f, 0xd5, 0xd4, 0x25, 0xcf, 0x15, 0xc4, + 0x10, 0xdf, 0xc2, 0xc6, 0xc3, 0x07, 0x11, 0x81, + 0xb1, 0x3b, 0x15, 0x64, 0xe9, 0x47, 0x10, 0xdf, + 0x12, 0xc1, 0x11, 0x81, 0x11, 0xc1, 0xb1, 0x3f, + 0xb5, 0xf8, 0x90, 0x10, 0x00, 0x16, 0xf9, 0x5e, + 0xb5, 0xfc, 0xd0, 0x20, 0x40, 0x39, 0x2e, 0x4b, + 0x22, 0x4c, 0x12, 0x20, 0xe9, 0x59, 0x20, 0x39, + 0x00, 0x1b, 0xe9, 0x59, 0x2c, 0x13, 0x35, 0x13, + 0x0e, 0x5a, 0xf9, 0x59, 0xb2, 0x38, 0x02, 0xe3, + 0xd0, 0x00, 0x0e, 0x5a, 0xe9, 0x5e, 0x2e, 0x40, + 0x01, 0xee, 0xd2, 0x80, 0x42, 0x84, 0xc0, 0x03, + 0x30, 0x02, 0xf5, 0x6b, 0x31, 0x0a, 0x12, 0x98, + 0x20, 0x03, 0xf5, 0x69, 0x12, 0x9f, 0x12, 0x87, + 0x51, 0x0a, 0x00, 0x34, 0xd4, 0xc8, 0xe0, 0x36, + 0x50, 0x00, 0x50, 0x00, 0xd3, 0xc7, 0x43, 0xc4, + 0x15, 0x61, 0xf9, 0x48, 0x10, 0xc1, 0xd5, 0xe0, + 0xd1, 0x80, 0xd1, 0xc0, 0x31, 0x0f, 0x13, 0xe1, + 0xe9, 0x3c, 0xd3, 0xc0, 0x00, 0x24, 0xd0, 0x30, + 0x63, 0xc0, 0x25, 0xcf, 0x15, 0xc2, 0xd0, 0x03, + 0x40, 0x16, 0x25, 0xc0, 0x15, 0xc2, 0x15, 0x81, + 0x35, 0x91, 0xe1, 0x5c, 0x00, 0x24, 0xd0, 0x30, + 0x63, 0xc0, 0x01, 0x50, 0xe9, 0x54, 0x15, 0xa0, + 0xf9, 0x55, 0x00, 0x24, 0xd0, 0x34, 0x70, 0x00, + 0x10, 0x20, 0xe9, 0x55, 0xd3, 0xc0, 0x31, 0x0f, + 0xd5, 0xfc, 0x25, 0xcf, 0x15, 0xc3, 0x14, 0xa0, + 0xe9, 0x5c, 0xb5, 0xfc, 0x00, 0x34, 0xd4, 0xc8, + 0xe0, 0x36, 0x50, 0x00, 0xc4, 0x91, 0x34, 0x96, + 0xed, 0x34, 0xd4, 0x80, 0x14, 0x84, 0xb3, 0xc1, + 0xe5, 0x41, 0xc0, 0x52, 0x10, 0x5e, 0x34, 0x81, + 0xb3, 0xc1, 0xe5, 0x41, 0xc0, 0x52, 0x10, 0x5c, + 0x24, 0x81, 0xb3, 0xc1, 0xe5, 0x37, 0x02, 0x68, + 0xd0, 0x00, 0xb4, 0xb0, 0x14, 0x9b, 0x00, 0x23, + 0xd0, 0x70, 0x30, 0x52, 0xed, 0x4a, 0x24, 0x81, + 0x20, 0x12, 0xa0, 0x1c, 0x10, 0x8a, 0x50, 0x83, + 0xa0, 0x96, 0xa1, 0x50, 0xa1, 0x11, 0xc0, 0x52, + 0xd4, 0x84, 0x10, 0x6c, 0xed, 0x56, 0xd4, 0x81, + 0xd1, 0x00, 0xb1, 0x13, 0x00, 0x23, 0xd1, 0x40, + 0xc2, 0xb9, 0x22, 0x86, 0x12, 0x20, 0xf9, 0x66, + 0x02, 0xe3, 0xd0, 0x40, 0x02, 0x9a, 0xe9, 0x63, + 0x22, 0x81, 0x02, 0x5a, 0xe9, 0x66, 0x22, 0x41, + 0x75, 0xd7, 0xc3, 0xd7, 0xd0, 0xd7, 0x00, 0x21, + 0xd0, 0xb6, 0x8b, 0x38, 0x00, 0x33, 0xdc, 0xd0, + 0xe0, 0x36, 0x50, 0x00, 0xd0, 0x7c, 0x60, 0x01, + 0xae, 0x52, 0xd0, 0x60, 0x40, 0x79, 0x00, 0x13, + 0xe8, 0xc9, 0xa2, 0x94, 0x22, 0x86, 0x13, 0xe0, + 0xe4, 0xd0, 0x13, 0xc1, 0x15, 0x62, 0xfc, 0xd1, + 0x13, 0xc1, 0xe0, 0xd1, 0xc3, 0xd7, 0x03, 0xd9, + 0xe8, 0xd4, 0x22, 0x8d, 0x15, 0x62, 0xfc, 0xda, + 0x03, 0xda, 0xe8, 0xda, 0x22, 0x8d, 0x22, 0x8d, + 0xce, 0x4a, 0x22, 0x86, 0x00, 0x14, 0xe8, 0xe0, + 0xa2, 0x53, 0x22, 0x47, 0x03, 0xd1, 0xe8, 0xe8, + 0x22, 0x4e, 0x15, 0x62, 0xfc, 0xe8, 0x03, 0xd2, + 0xe8, 0xe8, 0x22, 0x4e, 0x12, 0x20, 0xe9, 0x09, + 0x20, 0x79, 0x00, 0x5b, 0xe8, 0xf4, 0x15, 0x20, + 0xfc, 0xf1, 0x2c, 0x13, 0x35, 0x13, 0x0e, 0x5b, + 0xe8, 0xf4, 0xb2, 0x38, 0x02, 0x9a, 0xe8, 0xfb, + 0x70, 0x08, 0xd0, 0x7c, 0x42, 0x81, 0x22, 0x98, + 0x22, 0x80, 0x02, 0x5a, 0xe9, 0x11, 0x70, 0x08, + 0xd0, 0x78, 0x42, 0x41, 0x22, 0x59, 0x10, 0x1f, + 0x22, 0x40, 0x00, 0x19, 0xe9, 0x11, 0x01, 0x69, + 0xd0, 0x7c, 0x32, 0x41, 0xe1, 0x11, 0x02, 0xe3, + 0xd0, 0x40, 0x02, 0x9a, 0xe9, 0x0e, 0x22, 0x81, + 0x02, 0x5a, 0xe9, 0x11, 0x22, 0x41, 0x0e, 0x5a, + 0xe9, 0x15, 0xce, 0x4a, 0x3e, 0x46, 0x0f, 0x87, + 0xdd, 0x48, 0xe1, 0x19, 0xdd, 0x40, 0xdc, 0xc8, + 0xdd, 0x3c, 0x7d, 0x34, 0x1d, 0x19, 0x3d, 0x35, + 0x4d, 0x33, 0x4c, 0xec, 0x3d, 0x33, 0xf9, 0x17, + 0x0f, 0xc5, 0x50, 0x00, 0xd0, 0x39, 0xd0, 0x35, + 0xd0, 0x1d, 0xd0, 0x2d, 0xd0, 0x3f, 0xd0, 0x2e, + 0xd0, 0x3c, 0xd0, 0x37, 0xd0, 0x38, 0xd0, 0x19, + 0xd0, 0x33, 0xd0, 0x2e, 0xd0, 0x3d, 0xd0, 0x3e, + 0xd0, 0x27, 0xd0, 0x3e, 0xd0, 0x3a, 0xd0, 0x2f, + 0xd0, 0x32, 0x00, 0x00, 0x47, 0x78, 0x46, 0xc0, + 0xe1, 0x01, 0x00, 0x90, 0xe1, 0x2f, 0xff, 0x1e, + 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, + 0xe5, 0x9f, 0x20, 0x6c, 0xe0, 0x21, 0x10, 0x01, + 0xe1, 0x02, 0x00, 0x91, 0xe3, 0x50, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x02, 0xe3, 0xa0, 0x00, 0x00, + 0xeb, 0x00, 0x38, 0x99, 0xea, 0xff, 0xff, 0xf7, + 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, + 0xb5, 0x00, 0x4a, 0x12, 0x68, 0x10, 0x28, 0x00, + 0xd1, 0x03, 0x20, 0x00, 0xf7, 0xf1, 0xff, 0xe8, + 0xe7, 0xf7, 0xbd, 0x00, 0x47, 0x78, 0x00, 0x00, + 0xe9, 0x2d, 0x40, 0x00, 0xe5, 0x9f, 0x20, 0x2c, + 0xe3, 0xa0, 0x10, 0x01, 0xe1, 0x02, 0x00, 0x91, + 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, + 0xe3, 0xa0, 0x00, 0x00, 0xeb, 0x00, 0x38, 0x88, + 0xea, 0xff, 0xff, 0xf7, 0xe8, 0xbd, 0x00, 0x01, + 0xe1, 0x2f, 0xff, 0x10, 0x48, 0x02, 0x40, 0x49, + 0x60, 0x01, 0x47, 0x70, 0x70, 0x00, 0x00, 0x34, + 0x2e, 0x08, 0x1f, 0xb0, 0x47, 0x78, 0x46, 0xc0, + 0xe1, 0xa0, 0x09, 0x00, 0xe1, 0xb0, 0x10, 0x01, + 0x03, 0xc0, 0x01, 0x02, 0x13, 0x80, 0x01, 0x02, + 0xe3, 0xa0, 0x13, 0x3f, 0xe3, 0xa0, 0x30, 0x0e, + 0xe1, 0xb0, 0x10, 0x81, 0x3a, 0x00, 0x00, 0x04, + 0xe1, 0xb0, 0x00, 0x80, 0x32, 0x21, 0x13, 0x03, + 0xe2, 0x53, 0x30, 0x01, 0x1a, 0xff, 0xff, 0xf9, + 0xea, 0x00, 0x00, 0x03, 0xe1, 0xb0, 0x00, 0x80, + 0x22, 0x21, 0x13, 0x03, 0xe2, 0x53, 0x30, 0x01, + 0x1a, 0xff, 0xff, 0xf4, 0xe1, 0xa0, 0x0d, 0x21, + 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x41, 0xf0, + 0xe2, 0x4d, 0xd0, 0x14, 0xe3, 0xa0, 0xc0, 0x44, + 0xe2, 0x8c, 0xc4, 0x66, 0xe5, 0x9c, 0xc0, 0x00, + 0xe5, 0x9f, 0x01, 0x94, 0xe5, 0x80, 0xc0, 0x00, + 0xe1, 0xa0, 0xc1, 0x4c, 0xe2, 0x0c, 0xc0, 0x03, + 0xe5, 0x9f, 0x01, 0x88, 0xe5, 0xc0, 0xc0, 0x00, + 0xe5, 0x9f, 0x01, 0x84, 0xe5, 0x90, 0x00, 0x00, + 0xe0, 0x80, 0x64, 0x0c, 0xe1, 0xa0, 0x70, 0x06, + 0xe8, 0xb7, 0x00, 0x01, 0xe2, 0x00, 0x40, 0x1f, + 0xe2, 0x8f, 0x2f, 0x69, 0xe7, 0x92, 0x21, 0x04, + 0xe3, 0x52, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x51, + 0xe5, 0x9f, 0x32, 0x1c, 0xe2, 0x83, 0x50, 0xbc, + 0xe5, 0x9f, 0x12, 0x1c, 0xe1, 0x55, 0x00, 0x01, + 0x03, 0xa0, 0x50, 0x00, 0xe5, 0x9f, 0x12, 0x04, + 0xe1, 0x51, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x45, + 0xe5, 0x9f, 0x81, 0xf4, 0xe0, 0x88, 0x80, 0x03, + 0xe5, 0x9f, 0x11, 0x5c, 0xe1, 0xa0, 0x36, 0x20, + 0xe2, 0x03, 0x30, 0x0f, 0xe1, 0x81, 0x10, 0x03, + 0xe5, 0x9f, 0x21, 0x48, 0xe7, 0x92, 0x31, 0x04, + 0xe1, 0xa0, 0x39, 0x83, 0xe1, 0xa0, 0x35, 0xa3, + 0xe1, 0x81, 0x10, 0x03, 0xe1, 0xa0, 0x33, 0xa0, + 0xe2, 0x03, 0x30, 0x01, 0xe1, 0xa0, 0x3b, 0x03, + 0xe1, 0x81, 0x10, 0x03, 0xe1, 0xa0, 0x35, 0x20, + 0xe2, 0x03, 0x30, 0x03, 0xe1, 0xa0, 0x32, 0x03, + 0xe1, 0x81, 0x10, 0x03, 0xe1, 0xa0, 0x3a, 0xa0, + 0xe2, 0x03, 0x30, 0x01, 0xe1, 0xa0, 0x3b, 0x83, + 0xe1, 0x81, 0x10, 0x03, 0xe1, 0xa0, 0x34, 0xa0, + 0xe2, 0x03, 0x30, 0x01, 0xe1, 0xa0, 0x3a, 0x83, + 0xe1, 0x81, 0x10, 0x03, 0xe2, 0x00, 0x30, 0x60, + 0xe1, 0xa0, 0x30, 0x83, 0xe1, 0x81, 0x10, 0x03, + 0xe8, 0xa8, 0x00, 0x02, 0xe5, 0x9f, 0x00, 0xf0, + 0xe3, 0xa0, 0x10, 0x30, 0xe5, 0x80, 0x10, 0x00, + 0xe5, 0x9f, 0x00, 0x9c, 0xe5, 0xd0, 0x40, 0x00, + 0xe2, 0x84, 0x10, 0x01, 0xe5, 0xc0, 0x10, 0x00, + 0xe2, 0x04, 0x40, 0x00, 0xe5, 0x9f, 0x00, 0x98, + 0xe5, 0x90, 0x10, 0x00, 0xe3, 0x11, 0x00, 0x10, + 0x1a, 0x00, 0x00, 0x1a, 0xe5, 0x80, 0x10, 0x00, + 0xe5, 0x8f, 0x51, 0x4c, 0xe1, 0xa0, 0x22, 0x04, + 0xe1, 0x82, 0x10, 0x0c, 0xe5, 0x9f, 0x00, 0xac, + 0xe0, 0x80, 0x02, 0x01, 0xe5, 0x80, 0x70, 0x00, + 0xe5, 0x80, 0x80, 0x04, 0xe5, 0x9f, 0x10, 0x5c, + 0xe5, 0x80, 0x10, 0x08, 0xe5, 0x9f, 0x10, 0x58, + 0xe5, 0x80, 0x10, 0x0c, 0xe5, 0x9f, 0x00, 0x58, + 0xe5, 0x90, 0x10, 0x00, 0xe0, 0x84, 0x00, 0x01, + 0xe3, 0xa0, 0x20, 0x01, 0xe1, 0xa0, 0x00, 0x12, + 0xe3, 0xa0, 0x10, 0x40, 0xe2, 0x81, 0x14, 0x66, + 0xe5, 0x81, 0x00, 0x00, 0xe3, 0xa0, 0x10, 0x01, + 0xe1, 0xa0, 0x0c, 0x11, 0xe3, 0xa0, 0x10, 0xb8, + 0xe2, 0x81, 0x14, 0x66, 0xe5, 0x81, 0x00, 0x00, + 0xe2, 0x8d, 0xd0, 0x14, 0xe8, 0xbd, 0x81, 0xf0, + 0xe5, 0x9f, 0x10, 0xf0, 0xe2, 0x81, 0x10, 0x01, + 0xe5, 0x8f, 0x10, 0xe8, 0xea, 0xff, 0xff, 0xf4, + 0xe5, 0x9f, 0xf0, 0x08, 0xa0, 0x00, 0x05, 0xc4, + 0x80, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x06, 0xf4, 0xa0, 0x00, 0x04, 0x28, + 0xa0, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x05, 0x50, + 0x2c, 0x00, 0x1f, 0xe8, 0x2c, 0x00, 0x1f, 0xea, + 0x2c, 0x00, 0x1f, 0xf4, 0x00, 0x00, 0x05, 0xe0, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x12, + 0x2c, 0x00, 0x02, 0x00, 0x64, 0x00, 0x04, 0x00, + 0x64, 0x00, 0x00, 0x80, 0x47, 0x00, 0x00, 0x00, + 0x9e, 0x00, 0x00, 0xc0, 0x66, 0x00, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x07, + 0xe1, 0xb0, 0xf0, 0x0e, 0xe5, 0x9f, 0xf1, 0x00, + 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x08, + 0xea, 0x00, 0x00, 0x02, 0xe5, 0x9f, 0xf0, 0xec, + 0xe2, 0x5e, 0xf0, 0x04, 0x2c, 0x00, 0x00, 0xe8, + 0xe1, 0x0f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x1f, + 0xe3, 0x80, 0x00, 0x1b, 0xe1, 0x29, 0xf0, 0x00, + 0xe5, 0x9f, 0xd0, 0xd8, 0xe5, 0x9f, 0x00, 0xd8, + 0xe0, 0x8d, 0xd0, 0x00, 0xe1, 0x0f, 0x00, 0x00, + 0xe3, 0xc0, 0x00, 0x1f, 0xe3, 0x80, 0x00, 0x13, + 0xe1, 0x29, 0xf0, 0x00, 0xe5, 0x9f, 0xd0, 0xc4, + 0xe5, 0x9f, 0x00, 0xc4, 0xe0, 0x8d, 0xd0, 0x00, + 0xe1, 0x0f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x1f, + 0xe3, 0x80, 0x00, 0x12, 0xe1, 0x29, 0xf0, 0x00, + 0xe5, 0x9f, 0xd0, 0xb0, 0xe5, 0x9f, 0x00, 0xb0, + 0xe0, 0x8d, 0xd0, 0x00, 0xe1, 0x0f, 0x00, 0x00, + 0xe3, 0xc0, 0x00, 0x9f, 0xe3, 0x80, 0x00, 0x10, + 0xe1, 0x29, 0xf0, 0x00, 0xe5, 0x9f, 0xd0, 0x60, + 0xeb, 0x00, 0x00, 0x08, 0xe5, 0x9f, 0x00, 0x64, + 0xe5, 0x9f, 0x10, 0x5c, 0xeb, 0x00, 0x37, 0xa7, + 0xe5, 0x9f, 0x00, 0x60, 0xe5, 0x9f, 0x10, 0x58, + 0xeb, 0x00, 0x37, 0xa7, 0xe5, 0x9f, 0xe0, 0x58, + 0xe3, 0x8e, 0xe0, 0x01, 0xe1, 0x2f, 0xff, 0x1e, + 0xe5, 0x9f, 0x00, 0x8c, 0xe5, 0x9f, 0x10, 0x8c, + 0xe5, 0x9f, 0x30, 0x8c, 0xe1, 0x50, 0x00, 0x01, + 0x0a, 0x00, 0x00, 0x03, 0xe1, 0x51, 0x00, 0x03, + 0x34, 0x90, 0x20, 0x04, 0x34, 0x81, 0x20, 0x04, + 0x3a, 0xff, 0xff, 0xfb, 0xe5, 0x9f, 0x10, 0x74, + 0xe3, 0xa0, 0x20, 0x00, 0xe1, 0x53, 0x00, 0x01, + 0x34, 0x83, 0x20, 0x04, 0x3a, 0xff, 0xff, 0xfc, + 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x1b, 0xff, 0xf0, + 0x2e, 0x1b, 0x7f, 0xf0, 0x2e, 0x1b, 0x7f, 0xef, + 0x2e, 0x08, 0x9a, 0x08, 0xcc, 0x1f, 0xff, 0xef, + 0xcc, 0x1f, 0x7f, 0xf0, 0x2e, 0x00, 0x1b, 0x8d, + 0x2e, 0x01, 0xc2, 0xe8, 0x2e, 0x01, 0xc3, 0xe0, + 0x2e, 0x08, 0x32, 0xfc, 0x00, 0x00, 0x08, 0x00, + 0x2e, 0x08, 0x22, 0xfc, 0x00, 0x00, 0x08, 0x00, + 0x2e, 0x08, 0x2a, 0xfc, 0x00, 0x00, 0x08, 0x00, + 0x2e, 0x08, 0x59, 0xb8, 0xe5, 0x9f, 0xf0, 0x04, + 0xe5, 0x9f, 0xf0, 0x04, 0xe5, 0x9f, 0xf0, 0x04, + 0x2e, 0x08, 0x59, 0xb8, 0x2e, 0x08, 0x59, 0xb9, + 0x2e, 0x08, 0x59, 0xba, 0x2e, 0x03, 0x34, 0x9c, + 0x2e, 0x08, 0x00, 0x00, 0x2e, 0x08, 0x3b, 0x78, + 0x2e, 0x08, 0x9a, 0x04, 0x1d, 0x77, 0x1e, 0x16, + 0x03, 0x00, 0x03, 0x03, 0x1d, 0x7f, 0x50, 0x50, + 0x4f, 0x5d, 0x49, 0x5d, 0x40, 0x4a, 0x44, 0x43, + 0x01, 0x49, 0x4d, 0x56, 0x48, 0x4b, 0x5d, 0x4f, + 0x5d, 0x4d, 0x4f, 0x0a, 0x78, 0x71, 0x73, 0x7f, + 0x70, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1b, + 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, + 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, + 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, + 0x08, 0x0f, 0x0f, 0x0d, 0x13, 0x0d, 0x11, 0x0e, + 0x07, 0x08, 0x09, 0x0d, 0x0d, 0x15, 0x10, 0x05, + 0x08, 0x08, 0x09, 0x0e, 0x07, 0x08, 0x07, 0x07, + 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, + 0x0d, 0x0d, 0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x0d, + 0x18, 0x0f, 0x10, 0x11, 0x11, 0x10, 0x0f, 0x13, + 0x11, 0x06, 0x0c, 0x10, 0x0d, 0x13, 0x11, 0x13, + 0x10, 0x13, 0x11, 0x10, 0x0e, 0x11, 0x0f, 0x17, + 0x0f, 0x10, 0x0f, 0x07, 0x07, 0x07, 0x0c, 0x0d, + 0x08, 0x0d, 0x0e, 0x0c, 0x0e, 0x0d, 0x07, 0x0e, + 0x0e, 0x05, 0x06, 0x0c, 0x06, 0x14, 0x0e, 0x0d, + 0x0e, 0x0e, 0x08, 0x0c, 0x07, 0x0e, 0x0b, 0x11, + 0x0b, 0x0c, 0x0c, 0x08, 0x06, 0x08, 0x0e, 0x12, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, + 0x1e, 0x0f, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, + 0x06, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, + 0x0e, 0xe0, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x30, 0x01, 0x80, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, + 0x0c, 0x60, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, + 0x0c, 0x60, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x60, 0x00, 0xc0, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x60, 0x00, 0xc0, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, + 0x18, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x60, 0x00, 0xc0, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0xf0, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, + 0x60, 0x00, 0xc0, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x30, 0x78, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x60, 0x00, 0xc0, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x3e, 0x60, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x70, 0x60, 0x00, 0x00, + 0x30, 0x01, 0x80, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x0c, 0x00, 0x00, + 0x60, 0x0c, 0x00, 0x00, 0x60, 0xe0, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x38, 0x0e, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x37, 0x1c, 0x00, 0x00, + 0x60, 0x0c, 0x00, 0x00, 0x71, 0xe0, 0x00, 0x00, + 0x1e, 0x0f, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x1c, 0x1c, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0xf8, 0x00, 0x00, + 0xe0, 0x0e, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x0f, 0xf8, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x1f, 0xfe, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x31, 0xf0, 0x00, 0x00, + 0xc0, 0x06, 0x00, 0x00, 0x1e, 0x30, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x07, 0xf0, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x06, 0x30, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x33, 0x07, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, + 0x7a, 0xf0, 0x00, 0x00, 0x61, 0x86, 0x00, 0x00, + 0x1c, 0xe0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, + 0x62, 0x30, 0x00, 0x00, 0x61, 0x8e, 0x00, 0x00, + 0x18, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0x0c, 0x60, 0x00, 0x00, + 0x62, 0x00, 0x00, 0x00, 0x61, 0x8c, 0x00, 0x00, + 0x18, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x66, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x72, 0x00, 0x00, 0x00, 0x61, 0x9c, 0x00, 0x00, + 0x0c, 0xe0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x7a, 0x00, 0x00, 0x00, 0x61, 0xb8, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x33, 0x30, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x00, + 0x0f, 0xe0, 0x00, 0x00, 0x1e, 0x73, 0xc0, 0x00, + 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x00, + 0x02, 0xe0, 0x00, 0x00, 0x00, 0x66, 0x60, 0x00, + 0x39, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, + 0x02, 0x70, 0x00, 0x00, 0x00, 0xec, 0x30, 0x00, + 0x70, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x02, 0x30, 0x00, 0x00, 0x00, 0xcc, 0x30, 0x00, + 0x60, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x62, 0x30, 0x00, 0x00, 0x01, 0xcc, 0x30, 0x00, + 0x60, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, + 0x72, 0x70, 0x00, 0x00, 0x01, 0x8c, 0x30, 0x00, + 0x70, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x3a, 0xf0, 0x00, 0x00, 0x03, 0x8c, 0x30, 0x00, + 0x38, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x03, 0x06, 0x60, 0x00, + 0x3f, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x07, 0x03, 0xc0, 0x00, + 0x0f, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x70, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x70, 0x60, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x30, 0x60, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x1d, 0x80, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x06, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, + 0x30, 0x60, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x0e, 0xc0, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0x30, 0x60, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x03, 0xe0, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0x0c, 0xc0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, + 0x67, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x60, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x1c, 0xc0, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x7f, 0xe0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x38, 0xc0, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, + 0x78, 0xe0, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x30, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x30, 0xe0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x70, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x60, 0x70, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xe0, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x7f, 0xf0, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x30, 0x70, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x38, 0x60, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x7f, 0xf0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1f, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x7f, 0xf0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x30, 0x0f, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x38, 0x06, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x03, 0xff, 0xc0, 0x00, 0x07, 0xc0, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x30, 0x1e, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, + 0x38, 0x06, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, + 0x07, 0xc1, 0xe0, 0x00, 0x07, 0xc0, 0x00, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x30, 0x3c, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, + 0x3c, 0x06, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x0e, 0x00, 0x70, 0x00, 0x06, 0xc0, 0x00, 0x00, + 0x30, 0x0c, 0x00, 0x00, 0x38, 0x07, 0x00, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0x03, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, + 0x3e, 0x06, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x1c, 0x79, 0xb8, 0x00, 0x0e, 0xe0, 0x00, 0x00, + 0x30, 0x0c, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, + 0x30, 0x07, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x03, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x30, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x36, 0x0d, 0x80, 0x00, + 0x36, 0x06, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, + 0x39, 0xff, 0x9c, 0x00, 0x0c, 0x60, 0x00, 0x00, + 0x30, 0x0c, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x30, 0x07, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x31, 0xc0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x36, 0x0d, 0x80, 0x00, + 0x37, 0x06, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x31, 0xcf, 0x9c, 0x00, 0x0c, 0x60, 0x00, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x37, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x36, 0x0d, 0x80, 0x00, + 0x33, 0x06, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x33, 0x87, 0x0c, 0x00, 0x1c, 0x70, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x03, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x37, 0x1d, 0x80, 0x00, + 0x31, 0x86, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x77, 0x03, 0x0c, 0x00, 0x18, 0x30, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x03, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x60, 0x3f, 0x80, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x19, 0x80, 0x00, + 0x31, 0xc6, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x67, 0x03, 0x0c, 0x00, 0x38, 0x38, 0x00, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x3f, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x3d, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x19, 0x80, 0x00, + 0x30, 0xc6, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x66, 0x03, 0x0c, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x03, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x01, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x19, 0x80, 0x00, + 0x30, 0x66, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x66, 0x07, 0x1c, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x70, 0x03, 0x00, 0x00, + 0x30, 0x07, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x01, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0xc0, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x31, 0xb1, 0x80, 0x00, + 0x30, 0x76, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x66, 0x06, 0x18, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x60, 0xc0, 0x00, 0x00, 0x30, 0x38, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x31, 0xb1, 0x80, 0x00, + 0x30, 0x36, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, + 0x67, 0x0e, 0x38, 0x00, 0x60, 0x0c, 0x00, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x38, 0x06, 0x00, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x60, 0xc0, 0x00, 0x00, 0x30, 0x3c, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x31, 0xf1, 0x80, 0x00, + 0x30, 0x3e, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x77, 0x1e, 0x70, 0x00, 0x60, 0x0c, 0x00, 0x00, + 0x30, 0x1e, 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1e, 0x0f, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x71, 0xc0, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x31, 0xf1, 0x80, 0x00, + 0x30, 0x1e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x73, 0xff, 0xe0, 0x00, 0xe0, 0x0e, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x30, 0xe1, 0x80, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, + 0x39, 0xe7, 0xc0, 0x00, 0xc0, 0x06, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x30, 0x07, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x30, 0xe1, 0x80, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x3c, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xc0, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0xc0, 0x06, 0x00, 0x00, 0xc0, 0x38, 0x06, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, + 0x7f, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0xe0, 0x0e, 0x00, 0x00, 0xe0, 0x7c, 0x0e, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x7f, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x1e, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x30, 0x1e, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x60, 0x0c, 0x00, 0x00, 0xe0, 0x7c, 0x0e, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x30, 0x1c, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x0e, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x60, 0x6c, 0x0c, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x01, 0x80, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x60, 0xec, 0x0c, 0x00, + 0x0e, 0xe0, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x19, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x30, 0x06, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x70, 0xee, 0x1c, 0x00, + 0x06, 0xc0, 0x00, 0x00, 0x0e, 0x70, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x39, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x30, 0x1e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x70, 0xc6, 0x1c, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x18, 0x30, 0x00, 0x00, 0x30, 0xc6, 0x18, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x70, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x18, 0x30, 0x00, 0x00, 0x31, 0xc7, 0x18, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x30, 0xe0, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x31, 0x83, 0x18, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0xc0, 0x00, + 0x30, 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x0c, 0x60, 0x00, 0x00, 0x39, 0x83, 0x38, 0x00, + 0x0e, 0xe0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x30, 0x38, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x0e, 0xe0, 0x00, 0x00, 0x1b, 0x83, 0xb0, 0x00, + 0x0e, 0xe0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x31, 0x80, 0x00, + 0x30, 0x38, 0x00, 0x00, 0x70, 0x06, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, + 0x0e, 0xe0, 0x00, 0x00, 0x1b, 0x01, 0xb0, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0x3f, 0x80, 0x00, + 0x30, 0x1c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x1f, 0x01, 0xf0, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1e, 0x1f, 0x00, 0x00, + 0x30, 0x1e, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x1f, 0x01, 0xf0, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, + 0x30, 0x0e, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x1e, 0x00, 0xe0, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, + 0x30, 0x07, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x0e, 0x00, 0xe0, 0x00, + 0xe0, 0x0e, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0xff, 0xfc, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x33, 0xc0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x0f, 0xb0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x33, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x37, 0xcf, 0x80, 0x00, + 0x33, 0xc0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3f, 0xdf, 0x80, 0x00, + 0x37, 0xe0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x3c, 0x70, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x3c, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3c, 0xf9, 0xc0, 0x00, + 0x3c, 0x70, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x70, 0x60, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x38, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x70, 0xc0, 0x00, + 0x38, 0x30, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x60, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x60, 0x30, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x33, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x70, 0x60, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x70, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x71, 0xe0, 0x00, 0x00, + 0x3c, 0x70, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x00, 0x00, + 0x33, 0xc0, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x0f, 0x30, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x60, 0xc0, 0x00, + 0x30, 0x30, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x37, 0xc0, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0xc0, 0x60, 0x00, 0x00, 0xc0, 0x81, 0x80, 0x00, + 0xe0, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0xc0, 0x60, 0x00, 0x00, 0xc1, 0xc1, 0x80, 0x00, + 0x60, 0xc0, 0x00, 0x00, 0x60, 0xe0, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x3c, 0x70, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0xe0, 0xe0, 0x00, 0x00, 0xe1, 0xc1, 0x80, 0x00, + 0x31, 0xc0, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x60, 0xc0, 0x00, 0x00, 0x63, 0xe3, 0x00, 0x00, + 0x3b, 0x80, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x3e, 0x08, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x71, 0xc0, 0x00, 0x00, 0x63, 0x63, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x7f, 0x98, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x31, 0x80, 0x00, 0x00, 0x67, 0x63, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x67, 0xf8, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x31, 0x80, 0x00, 0x00, 0x37, 0x76, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x41, 0xf0, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x3b, 0x80, 0x00, 0x00, 0x36, 0x36, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x30, 0x18, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x1d, 0x80, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x30, 0x70, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x3c, 0x00, 0x00, + 0x3b, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x3c, 0x70, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0xf0, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, + 0x31, 0x80, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x37, 0xe0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x3e, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, + 0x60, 0xc0, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x33, 0xc0, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x0f, 0x30, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, + 0xe0, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x21, 0x16, 0x16, 0x16, 0x16, + 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, + 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, + 0x16, 0x16, 0x16, 0x16, 0x0a, 0x12, 0x13, 0x10, + 0x17, 0x10, 0x15, 0x10, 0x08, 0x09, 0x0a, 0x10, + 0x10, 0x1a, 0x13, 0x06, 0x0a, 0x0a, 0x0b, 0x11, + 0x08, 0x0a, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, + 0x11, 0x11, 0x11, 0x10, 0x1d, 0x13, 0x13, 0x15, + 0x15, 0x13, 0x12, 0x17, 0x15, 0x07, 0x0f, 0x13, + 0x10, 0x17, 0x15, 0x17, 0x13, 0x17, 0x15, 0x13, + 0x13, 0x15, 0x13, 0x1e, 0x13, 0x13, 0x12, 0x08, + 0x08, 0x08, 0x0e, 0x10, 0x0a, 0x10, 0x10, 0x0f, + 0x10, 0x10, 0x08, 0x10, 0x10, 0x07, 0x07, 0x0e, + 0x07, 0x19, 0x10, 0x10, 0x10, 0x10, 0x0a, 0x0f, + 0x08, 0x10, 0x0d, 0x15, 0x0d, 0x0d, 0x0e, 0x0a, + 0x08, 0x0a, 0x11, 0x16, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x8e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x8e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x8e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xf8, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, + 0x0e, 0x38, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x1c, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, + 0x0e, 0x38, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x0c, 0x00, 0x00, 0x03, 0xb8, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x1f, 0x83, 0xf0, 0x00, + 0x0e, 0x38, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x07, 0xbc, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x0f, 0x1e, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x70, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x70, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x70, 0x00, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x78, 0x00, 0x00, 0x1c, 0x07, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x38, 0x3e, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, + 0x00, 0xfc, 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x38, 0x1f, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x38, 0x07, 0x80, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x3f, 0x9c, 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x78, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x3c, 0x01, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x78, 0x03, 0xc0, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0xf8, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x3c, 0x01, 0xe0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x39, 0xc3, 0x80, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x70, 0x3c, 0x00, 0x00, 0x1f, 0x83, 0xf0, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x1f, 0x07, 0xc0, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x39, 0xe7, 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x78, 0x7c, 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x0f, 0xff, 0x80, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xff, 0x00, 0x00, 0xe0, 0x01, 0xe0, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xc0, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x7c, 0x00, 0x00, 0xe0, 0x00, 0xe0, 0x00, + 0x1f, 0x8e, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, + 0x0f, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x07, 0x1c, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, + 0x0f, 0x80, 0x60, 0x00, 0x03, 0xe0, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x07, 0x1c, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x1f, 0xc0, 0xe0, 0x00, 0x07, 0xf0, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x0f, 0x3c, 0x00, 0x00, 0x3d, 0xb8, 0x00, 0x00, + 0x38, 0xe0, 0xc0, 0x00, 0x0f, 0x78, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x76, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x0e, 0x38, 0x00, 0x00, 0x79, 0xbc, 0x00, 0x00, + 0x30, 0x61, 0xc0, 0x00, 0x0e, 0x38, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0x0e, 0x38, 0x00, 0x00, 0x71, 0x9c, 0x00, 0x00, + 0x30, 0x61, 0x80, 0x00, 0x0e, 0x38, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0x71, 0x80, 0x00, 0x00, + 0x30, 0x63, 0x80, 0x00, 0x0e, 0x38, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x73, 0x80, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0x79, 0x80, 0x00, 0x00, + 0x30, 0x63, 0x00, 0x00, 0x0f, 0x78, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0x7d, 0x80, 0x00, 0x00, + 0x30, 0x67, 0x00, 0x00, 0x07, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x78, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, + 0x38, 0xe6, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x1f, 0xce, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x0f, 0x8c, 0x7c, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x70, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, + 0x00, 0x1c, 0xfe, 0x00, 0x3e, 0xe2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0xf0, 0x00, 0x00, 0x01, 0xbe, 0x00, 0x00, + 0x00, 0x19, 0xc7, 0x00, 0x38, 0x73, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0x01, 0x9e, 0x00, 0x00, + 0x00, 0x39, 0x83, 0x00, 0x78, 0x3f, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0x01, 0x8e, 0x00, 0x00, + 0x00, 0x31, 0x83, 0x00, 0x70, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0x71, 0x8e, 0x00, 0x00, + 0x00, 0x71, 0x83, 0x00, 0x70, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x71, 0x8e, 0x00, 0x00, + 0x00, 0x61, 0x83, 0x00, 0x70, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x79, 0x9e, 0x00, 0x00, + 0x00, 0xe1, 0x83, 0x00, 0x78, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x79, 0xe0, 0x00, 0x00, 0x3d, 0xbc, 0x00, 0x00, + 0x00, 0xc1, 0xc7, 0x00, 0x3c, 0x7f, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xc0, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x01, 0xc0, 0xfe, 0x00, 0x1f, 0xfb, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, + 0x01, 0x80, 0x7c, 0x00, 0x0f, 0xe1, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x00, 0x60, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, + 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xf0, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x03, 0xe0, 0x00, 0x00, 0x7c, 0x7c, 0x00, 0x00, + 0x7c, 0x7c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x1e, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x0f, 0xe0, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, + 0x70, 0x3c, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x78, 0x0e, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, + 0x1e, 0xe0, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x1c, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x03, 0xb8, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x10, 0xe0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00, + 0x7b, 0xe0, 0x00, 0x00, 0x73, 0xf0, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x0f, 0x38, 0x00, 0x00, + 0x7f, 0xf8, 0x00, 0x00, 0x77, 0xf8, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, 0x0e, 0x38, 0x00, 0x00, + 0x7f, 0xfc, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x00, + 0x78, 0x3c, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x3c, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0xf0, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x01, 0xe0, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, + 0x1f, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x0f, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xfc, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x3f, 0x80, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x70, 0x0e, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x78, 0x1e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, + 0x78, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x3f, 0xf8, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf0, 0x00, + 0x01, 0xf0, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x01, 0xfe, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x01, 0xe0, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x7c, 0x00, 0x3c, 0x00, 0xe0, 0x00, + 0x01, 0xff, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x07, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x07, 0xff, 0xc0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x03, 0xc0, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x7c, 0x00, 0x3c, 0x00, 0xe0, 0x00, + 0x07, 0xff, 0x80, 0x00, 0x01, 0xff, 0xff, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xc0, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x0f, 0xff, 0xe0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x07, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7e, 0x00, 0xfc, 0x00, 0x3e, 0x00, 0xe0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, 0x03, 0xf8, 0x3f, 0x80, + 0x03, 0xb8, 0x00, 0x00, 0x38, 0x0f, 0x80, 0x00, + 0x1f, 0x83, 0xe0, 0x00, 0x38, 0x07, 0xc0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1f, 0x83, 0xf0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x0f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7e, 0x00, 0xfc, 0x00, 0x3f, 0x00, 0xe0, 0x00, + 0x1f, 0x83, 0xf0, 0x00, 0x07, 0xc0, 0x07, 0xc0, + 0x07, 0xbc, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x3e, 0x01, 0xe0, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0xf0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7f, 0x01, 0xfc, 0x00, 0x3f, 0x00, 0xe0, 0x00, + 0x3e, 0x00, 0xf8, 0x00, 0x07, 0x80, 0x03, 0xe0, + 0x07, 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x3c, 0x00, 0xf0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x78, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x77, 0x01, 0xdc, 0x00, 0x3b, 0x80, 0xe0, 0x00, + 0x3c, 0x00, 0x78, 0x00, 0x0f, 0x0f, 0x1d, 0xe0, + 0x07, 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x78, 0x00, 0x70, 0x00, 0x38, 0x00, 0xf0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x77, 0x01, 0xdc, 0x00, 0x3b, 0xc0, 0xe0, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x1e, 0x3f, 0xbc, 0xf0, + 0x0f, 0x1e, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0x70, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x77, 0x83, 0xdc, 0x00, 0x39, 0xc0, 0xe0, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x1e, 0x7f, 0xfc, 0xf0, + 0x0e, 0x0e, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x70, 0x00, + 0x3f, 0xff, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x39, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x73, 0x83, 0x9c, 0x00, 0x38, 0xe0, 0xe0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x1c, 0xf9, 0xf8, 0x70, + 0x0e, 0x0e, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x70, 0x00, + 0x3f, 0xff, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3b, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x73, 0x83, 0x9c, 0x00, 0x38, 0xe0, 0xe0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x3c, 0xf0, 0xf8, 0x70, + 0x1e, 0x0f, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x70, 0x00, + 0x3f, 0xff, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x0f, 0xf8, 0x00, 0x3f, 0xff, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x73, 0xc7, 0x9c, 0x00, 0x38, 0x70, 0xe0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x39, 0xe0, 0x78, 0x70, + 0x1c, 0x07, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x70, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x0f, 0xf8, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x71, 0xc7, 0x1c, 0x00, 0x38, 0x38, 0xe0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x39, 0xe0, 0x78, 0x70, + 0x1f, 0xff, 0x00, 0x00, 0x38, 0x03, 0xc0, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x70, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x0f, 0xf8, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3e, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x71, 0xc7, 0x1c, 0x00, 0x38, 0x38, 0xe0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x39, 0xc0, 0x70, 0x70, + 0x3f, 0xff, 0x80, 0x00, 0x38, 0x01, 0xc0, 0x00, + 0x78, 0x00, 0x60, 0x00, 0x38, 0x00, 0xf0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x38, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x71, 0xef, 0x1c, 0x00, 0x38, 0x1c, 0xe0, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x39, 0xc0, 0xf0, 0xf0, + 0x3f, 0xff, 0x80, 0x00, 0x38, 0x01, 0xc0, 0x00, + 0x78, 0x00, 0xf0, 0x00, 0x38, 0x00, 0xf0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x38, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, + 0x38, 0x3e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0xee, 0x1c, 0x00, 0x38, 0x1e, 0xe0, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x39, 0xc0, 0xf0, 0xe0, + 0x38, 0x03, 0x80, 0x00, 0x38, 0x01, 0xc0, 0x00, + 0x3c, 0x00, 0xf0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x38, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, + 0x38, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0xee, 0x1c, 0x00, 0x38, 0x0e, 0xe0, 0x00, + 0x3c, 0x00, 0x78, 0x00, 0x39, 0xe1, 0xe1, 0xc0, + 0x78, 0x03, 0xc0, 0x00, 0x38, 0x03, 0xc0, 0x00, + 0x3e, 0x01, 0xe0, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3e, 0x00, 0x78, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, + 0x38, 0x0f, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0xfe, 0x1c, 0x00, 0x38, 0x07, 0xe0, 0x00, + 0x1e, 0x00, 0xf8, 0x00, 0x3d, 0xe3, 0xe3, 0xc0, + 0x70, 0x01, 0xc0, 0x00, 0x38, 0x07, 0xc0, 0x00, + 0x1f, 0x87, 0xe0, 0x00, 0x38, 0x07, 0xc0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1f, 0x81, 0xf8, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x7c, 0xf8, 0x00, 0x00, + 0x38, 0x07, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x7c, 0x1c, 0x00, 0x38, 0x07, 0xe0, 0x00, + 0x1f, 0x83, 0xf0, 0x00, 0x3c, 0xff, 0xe7, 0x80, + 0x70, 0x01, 0xc0, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xf0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, + 0x38, 0x07, 0x80, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x7c, 0x1c, 0x00, 0x38, 0x03, 0xe0, 0x00, + 0x0f, 0xff, 0xe0, 0x00, 0x1e, 0xfe, 0xff, 0x00, + 0xe0, 0x01, 0xe0, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x07, 0xff, 0x80, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x03, 0xff, 0xe0, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x3f, 0xf0, 0x00, 0x00, + 0x38, 0x03, 0xc0, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x7c, 0x1c, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x03, 0xff, 0xc0, 0x00, 0x1e, 0x3c, 0x7c, 0x78, + 0xe0, 0x00, 0xe0, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x01, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, + 0x3f, 0xff, 0x80, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, + 0x38, 0x01, 0xe0, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x38, 0x1c, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x01, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x0f, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x01, 0xff, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xe0, 0x00, + 0xe0, 0x0f, 0x80, 0x38, 0x78, 0x03, 0xc0, 0x00, + 0xf0, 0x01, 0xe0, 0x00, 0x7f, 0xff, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x07, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0xf0, 0x01, 0xe0, 0x00, + 0xf0, 0x0f, 0x80, 0x78, 0x3c, 0x07, 0x80, 0x00, + 0x70, 0x03, 0xc0, 0x00, 0x7f, 0xff, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x0f, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xc0, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0xf0, 0x1f, 0xc0, 0x78, 0x1c, 0x07, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x7f, 0xff, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x07, 0xc0, 0x00, + 0x1f, 0x83, 0xf0, 0x00, 0x38, 0x03, 0xe0, 0x00, + 0x3e, 0x0f, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x70, 0x01, 0xc0, 0x00, + 0x70, 0x1f, 0xc0, 0x70, 0x1e, 0x0f, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0xc0, 0x00, + 0x1e, 0x00, 0xf8, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x78, 0x03, 0xc0, 0x00, + 0x70, 0x1d, 0xc0, 0x70, 0x0f, 0x1e, 0x00, 0x00, + 0x1e, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0xc0, 0x00, + 0x3c, 0x00, 0x78, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x78, 0x1d, 0xc0, 0xf0, 0x07, 0xbc, 0x00, 0x00, + 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0xc0, 0x00, + 0x38, 0x00, 0x3c, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x38, 0x07, 0x80, 0x00, + 0x78, 0x3d, 0xe0, 0xf0, 0x07, 0xbc, 0x00, 0x00, + 0x0f, 0x1e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x1c, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x01, 0xc0, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x3c, 0x07, 0x80, 0x00, + 0x38, 0x38, 0xe0, 0xe0, 0x03, 0xf8, 0x00, 0x00, + 0x07, 0x1c, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0xc0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x38, 0x03, 0xe0, 0x00, + 0x1f, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x1c, 0x07, 0x00, 0x00, + 0x38, 0x38, 0xe0, 0xe0, 0x01, 0xf0, 0x00, 0x00, + 0x07, 0xbc, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x38, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x07, 0xc0, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x3f, 0xff, 0xc0, 0x00, + 0x0f, 0xf8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x3c, 0x38, 0xe1, 0xe0, 0x00, 0xe0, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x3f, 0xff, 0x80, 0x00, + 0x03, 0xfe, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x1e, 0x0f, 0x00, 0x00, + 0x3c, 0x78, 0xf1, 0xe0, 0x01, 0xf0, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x70, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x3f, 0xff, 0x00, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x0e, 0x0e, 0x00, 0x00, + 0x1c, 0x70, 0x71, 0xc0, 0x01, 0xf0, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x70, 0x00, 0x1c, 0x00, 0x38, 0x3c, 0x00, 0x00, + 0x00, 0x07, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x0f, 0x1e, 0x00, 0x00, + 0x1c, 0x70, 0x71, 0xc0, 0x03, 0xb8, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x38, 0x1e, 0x00, 0x00, + 0x00, 0x03, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x1e, 0x70, 0x73, 0xc0, 0x07, 0xbc, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x08, 0x38, 0x00, 0x38, 0x0f, 0x00, 0x00, + 0x70, 0x03, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x38, 0x00, 0xe0, 0x00, 0x07, 0x1c, 0x00, 0x00, + 0x1e, 0xf0, 0x7b, 0xc0, 0x0f, 0x1e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x0e, 0x78, 0x00, 0x38, 0x07, 0x80, 0x00, + 0x78, 0x03, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x3c, 0x01, 0xe0, 0x00, 0x07, 0xbc, 0x00, 0x00, + 0x0e, 0xe0, 0x3b, 0x80, 0x0f, 0x1e, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1e, 0x0f, 0xf0, 0x00, 0x38, 0x03, 0x80, 0x00, + 0x78, 0x07, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x3c, 0x01, 0xe0, 0x00, 0x03, 0xb8, 0x00, 0x00, + 0x0e, 0xe0, 0x3b, 0x80, 0x1e, 0x0f, 0x00, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1f, 0x83, 0xe0, 0x00, 0x38, 0x03, 0xc0, 0x00, + 0x3e, 0x0f, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x1f, 0x07, 0xc0, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x0f, 0xe0, 0x3f, 0x80, 0x3c, 0x07, 0x80, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xf0, 0x00, 0x38, 0x01, 0xe0, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x0f, 0xff, 0x80, 0x00, 0x03, 0xf8, 0x00, 0x00, + 0x0f, 0xe0, 0x3f, 0x80, 0x38, 0x03, 0x80, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x03, 0xff, 0xf8, 0x00, 0x38, 0x00, 0xe0, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x07, 0xff, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, + 0x07, 0xc0, 0x1f, 0x00, 0x78, 0x03, 0xc0, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x01, 0xff, 0x3c, 0x00, 0x38, 0x00, 0xf0, 0x00, + 0x07, 0xf8, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, + 0x03, 0xfe, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, + 0x07, 0xc0, 0x1f, 0x00, 0xf0, 0x01, 0xe0, 0x00, + 0x00, 0xe0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, 0x39, 0xf0, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x0f, 0x9c, 0x00, 0x00, 0x39, 0xf0, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x39, 0xf0, 0xf8, 0x00, 0x39, 0xf0, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3f, 0xfb, 0xfc, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x3c, 0x00, 0x00, + 0x3c, 0x78, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x3c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3e, 0x3f, 0x1e, 0x00, 0x3e, 0x3c, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x39, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x1e, 0x0e, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x1e, 0x00, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3b, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xfc, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3f, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x7f, 0xfe, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x9c, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3b, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x39, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x70, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, + 0x78, 0x0e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x3c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x3c, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x38, 0x3c, 0x00, 0x00, + 0x38, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x7c, 0x00, 0x00, 0x3e, 0x3c, 0x00, 0x00, + 0x3c, 0x78, 0x00, 0x00, 0x3c, 0x7c, 0x00, 0x00, + 0x3e, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x8e, 0x00, 0x00, 0x39, 0xf0, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x0f, 0x9c, 0x00, 0x00, + 0x07, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x0f, 0x9c, 0x00, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x0e, 0x00, 0x38, 0x1c, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x39, 0xf0, 0x00, 0x00, + 0x0f, 0x9c, 0x00, 0x00, 0x3b, 0xc0, 0x00, 0x00, + 0x1f, 0xe0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0xe0, 0x38, 0x00, 0x01, + 0xe0, 0x70, 0x3c, 0x00, 0xe0, 0x38, 0x00, 0x00, + 0xe0, 0x38, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x3f, 0xf0, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0xf0, 0x78, 0x00, 0x00, + 0xe0, 0x70, 0x38, 0x00, 0x70, 0x70, 0x00, 0x00, + 0xf0, 0x78, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3e, 0x3c, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x78, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0xe0, 0xf8, 0x38, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x70, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0xe0, 0xf8, 0x38, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x70, 0x70, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x7f, 0xe3, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x38, 0x1e, 0x00, 0x00, + 0x78, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x70, 0xd8, 0x70, 0x00, 0x1d, 0xc0, 0x00, 0x00, + 0x78, 0xf0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x7c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x71, 0xdc, 0x70, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x61, 0xff, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3f, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x71, 0x8c, 0x70, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x38, 0xe0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x40, 0x7c, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1f, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x31, 0x8c, 0x60, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x39, 0xe0, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x1d, 0xc0, 0x00, 0x00, + 0x33, 0x8e, 0xe0, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x1d, 0xc0, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x38, 0x0e, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x1d, 0xc0, 0x00, 0x00, + 0x3b, 0x06, 0xe0, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x1d, 0xc0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3c, 0x1e, 0x00, 0x00, + 0x78, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x70, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x0d, 0x80, 0x00, 0x00, + 0x1b, 0x06, 0xe0, 0x00, 0x1d, 0xc0, 0x00, 0x00, + 0x1f, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3c, 0x1c, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x78, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x38, 0x3c, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x1f, 0x07, 0xc0, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3e, 0x3c, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x3c, 0x7c, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, + 0x1e, 0x07, 0xc0, 0x00, 0x38, 0xe0, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x3f, 0xf8, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1f, 0xf8, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x1f, 0xfc, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x1e, 0x03, 0xc0, 0x00, 0x70, 0x70, 0x00, 0x00, + 0x0f, 0x80, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x40, 0x00, 0x39, 0xe0, 0x00, 0x00, + 0x07, 0x9c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x0f, 0xe0, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x0f, 0x9c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0e, 0x03, 0x80, 0x00, 0xe0, 0x38, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xc0, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x27, + 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, + 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, + 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, + 0x0b, 0x15, 0x17, 0x13, 0x1a, 0x13, 0x19, 0x13, + 0x09, 0x0b, 0x0c, 0x13, 0x13, 0x1e, 0x17, 0x06, + 0x0b, 0x0b, 0x0d, 0x14, 0x09, 0x0b, 0x09, 0x09, + 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, + 0x13, 0x13, 0x09, 0x09, 0x14, 0x14, 0x14, 0x13, + 0x23, 0x17, 0x17, 0x19, 0x19, 0x17, 0x15, 0x1a, + 0x19, 0x09, 0x11, 0x17, 0x13, 0x1d, 0x19, 0x1a, + 0x17, 0x1a, 0x19, 0x17, 0x15, 0x19, 0x17, 0x22, + 0x17, 0x15, 0x15, 0x09, 0x09, 0x09, 0x11, 0x13, + 0x0b, 0x12, 0x12, 0x11, 0x12, 0x12, 0x0a, 0x12, + 0x13, 0x07, 0x07, 0x11, 0x07, 0x1b, 0x13, 0x12, + 0x12, 0x12, 0x0b, 0x11, 0x09, 0x13, 0x11, 0x17, + 0x10, 0x11, 0x10, 0x0b, 0x09, 0x0b, 0x14, 0x1a, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, + 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, + 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, + 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, + 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, + 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, + 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, + 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, + 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, + 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, + 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, + 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, + 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x07, + 0x1c, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, + 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, + 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, + 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, + 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x07, + 0x1c, 0x00, 0x00, 0x00, 0x07, 0xe1, 0xf8, 0x00, + 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x07, 0x00, + 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x07, + 0x1c, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x7c, 0x00, + 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x07, 0x00, + 0x00, 0x00, 0x01, 0xef, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x07, 0x00, + 0x00, 0x00, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x07, 0x00, + 0x00, 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, 0x0f, + 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0e, 0x00, + 0x00, 0x00, 0x03, 0xc7, 0x80, 0x00, 0x00, 0x1f, + 0xfe, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x00, + 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0e, 0x00, + 0x00, 0x00, 0x03, 0x83, 0x80, 0x00, 0x00, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, + 0x00, 0x00, 0x07, 0x83, 0xc0, 0x00, 0x00, 0x78, + 0x1f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, + 0x00, 0x00, 0x07, 0x01, 0xc0, 0x00, 0x00, 0x70, + 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, + 0x00, 0x00, 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1f, 0x00, + 0x00, 0x00, 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0f, 0x80, + 0x00, 0x00, 0x0f, 0xff, 0xe0, 0x00, 0x00, 0x07, + 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x07, 0xc0, + 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, + 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x01, 0xe0, + 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x3f, + 0xf7, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xf0, + 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x7c, + 0x07, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x1c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x70, + 0x00, 0x00, 0x3c, 0x00, 0x78, 0x00, 0x00, 0x70, + 0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1e, 0x00, + 0x3c, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x20, 0x70, + 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 0x70, + 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, + 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, 0x1e, 0x00, + 0x3c, 0x00, 0x00, 0x38, 0x07, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xf0, 0xf0, + 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x70, + 0x1f, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x7c, 0x00, + 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, + 0x78, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xf9, 0xf0, + 0x00, 0x00, 0x78, 0x00, 0x3c, 0x00, 0x00, 0x7c, + 0x3f, 0x00, 0x00, 0x00, 0x07, 0xe1, 0xf8, 0x00, + 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0xc1, + 0xf8, 0x00, 0x00, 0x3e, 0x1f, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x7f, 0xe0, + 0x00, 0x00, 0x70, 0x00, 0x1c, 0x00, 0x00, 0x3f, + 0xff, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, + 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xff, + 0xf0, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, + 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, + 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x3f, 0xc0, + 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x3f, + 0xf7, 0x80, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, + 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, + 0xe0, 0x00, 0x00, 0x1f, 0xfb, 0x80, 0x00, 0x00, + 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, + 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, + 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, + 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x0f, 0xff, + 0xfc, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1f, 0x80, + 0x00, 0x00, 0xe0, 0x00, 0x0e, 0x00, 0x00, 0x0f, + 0xe3, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, + 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x80, 0x00, 0x00, 0x07, 0xe3, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x01, + 0xc3, 0x80, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x07, 0xc0, 0x0e, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x01, + 0xc7, 0x80, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, + 0x00, 0x1f, 0xe0, 0x1e, 0x00, 0x00, 0x01, 0xfe, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x03, + 0xc7, 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, + 0x00, 0x1c, 0x70, 0x1c, 0x00, 0x00, 0x03, 0xfe, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x03, + 0xc7, 0x00, 0x00, 0x00, 0x3e, 0xde, 0x00, 0x00, + 0x00, 0x3c, 0x78, 0x3c, 0x00, 0x00, 0x07, 0x8f, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x76, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x03, + 0x87, 0x00, 0x00, 0x00, 0x3c, 0xcf, 0x00, 0x00, + 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x07, 0x07, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x03, + 0x87, 0x00, 0x00, 0x00, 0x38, 0xc7, 0x00, 0x00, + 0x00, 0x38, 0x38, 0x78, 0x00, 0x00, 0x07, 0x07, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x03, + 0x8f, 0x00, 0x00, 0x00, 0x38, 0xc0, 0x00, 0x00, + 0x00, 0x38, 0x38, 0x70, 0x00, 0x00, 0x07, 0x07, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x71, 0xc0, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xc0, 0x00, 0x00, 0x38, 0xc0, 0x00, 0x00, + 0x00, 0x38, 0x38, 0xf0, 0x00, 0x00, 0x07, 0x8f, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xc0, 0x00, 0x00, 0x3c, 0xc0, 0x00, 0x00, + 0x00, 0x38, 0x38, 0xe0, 0x00, 0x00, 0x03, 0x9e, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x39, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xc0, 0x00, 0x00, 0x1e, 0xc0, 0x00, 0x00, + 0x00, 0x3c, 0x79, 0xe0, 0x00, 0x00, 0x03, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x19, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x0e, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x00, + 0x00, 0x1c, 0x71, 0xc0, 0x00, 0x00, 0x01, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x1e, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, + 0x00, 0x1f, 0xe3, 0xc0, 0x00, 0x00, 0x03, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x1e, 0x00, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, + 0x00, 0x07, 0xc3, 0x8f, 0x80, 0x00, 0x07, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xbf, 0xc0, 0x00, 0x0f, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x38, 0xe0, 0x00, 0x1e, 0x3c, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0xc7, 0x80, 0x00, + 0x00, 0x00, 0x0f, 0x78, 0xf0, 0x00, 0x3c, 0x1e, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0xc3, 0x80, 0x00, + 0x00, 0x00, 0x0e, 0x70, 0x70, 0x00, 0x38, 0x1e, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0xc3, 0x80, 0x00, + 0x00, 0x00, 0x1e, 0x70, 0x70, 0x00, 0x38, 0x0f, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, + 0x38, 0x00, 0x00, 0x00, 0x70, 0xc3, 0x80, 0x00, + 0x00, 0x00, 0x1c, 0x70, 0x70, 0x00, 0x38, 0x07, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x38, 0x00, 0x00, 0x00, 0x78, 0xc7, 0x80, 0x00, + 0x00, 0x00, 0x3c, 0x70, 0x70, 0x00, 0x3c, 0x03, + 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x38, 0x00, 0x00, 0x00, 0x78, 0xc7, 0x80, 0x00, + 0x00, 0x00, 0x38, 0x70, 0x70, 0x00, 0x3c, 0x07, + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x78, 0x00, 0x00, 0x00, 0x3e, 0xdf, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x78, 0xf0, 0x00, 0x1f, 0x1f, + 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x78, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x38, 0xe0, 0x00, 0x0f, 0xff, + 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x70, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0xe0, 0x3f, 0xc0, 0x00, 0x07, 0xfe, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x70, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x00, 0xe0, 0x0f, 0x80, 0x00, 0x03, 0xf8, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0xe0, 0x00, 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, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x07, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x01, 0xfc, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x0f, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, + 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x0f, 0xff, + 0x80, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, + 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, + 0x00, 0x00, 0x3e, 0x0f, 0x80, 0x00, 0x00, 0x3e, + 0x1f, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, + 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0f, + 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x1e, 0x0f, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x03, 0xf0, 0x00, + 0x00, 0x00, 0x78, 0x03, 0xc0, 0x00, 0x00, 0x78, + 0x07, 0x80, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x03, + 0xc0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x3c, 0x03, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x00, + 0x00, 0x00, 0x70, 0x03, 0xc0, 0x00, 0x00, 0x70, + 0x03, 0x80, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x01, + 0xc0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x78, 0x03, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x03, 0x80, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x1f, 0x70, 0x00, + 0x00, 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x01, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x1e, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x01, 0xee, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x01, 0xc0, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x18, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x03, 0xce, 0x00, 0x00, + 0x00, 0x3b, 0xf8, 0x00, 0x00, 0x00, 0x78, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x70, 0x01, 0xc0, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x00, 0x00, 0x03, 0xce, 0x00, 0x00, + 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x71, 0xfc, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x1e, 0x0f, 0x00, 0x00, 0x00, 0x70, 0x01, 0xc0, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x01, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, + 0xfe, 0x00, 0x00, 0x00, 0x07, 0x8e, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x77, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x78, 0x03, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x3f, + 0x80, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x01, + 0xfe, 0x00, 0x00, 0x00, 0x0f, 0x0e, 0x00, 0x00, + 0x00, 0x7c, 0x0f, 0x80, 0x00, 0x00, 0x7f, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x07, 0xfc, 0x00, 0x00, 0x00, 0x78, 0x07, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0xc0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, + 0xff, 0x80, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, + 0x00, 0x78, 0x03, 0x80, 0x00, 0x00, 0x7e, 0x0f, + 0x80, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x0f, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xc0, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x7c, 0x03, + 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0x3e, 0x0f, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0xc0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x3c, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x78, 0x03, + 0xc0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, + 0x78, 0x03, 0x80, 0x00, 0x00, 0x0f, 0xfd, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x80, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x78, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x70, 0x01, + 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x07, 0xf1, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x01, 0xfe, + 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x70, 0x01, + 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x07, 0xf8, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x70, 0x01, + 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, + 0x00, 0x3f, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xc0, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x70, + 0x01, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, + 0x00, 0x70, 0x01, 0xc0, 0x00, 0x00, 0x70, 0x01, + 0xc0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, + 0x70, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x78, + 0x03, 0xc0, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x78, 0x03, 0xc0, 0x00, 0x00, 0x38, 0x03, + 0xc0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x70, 0x07, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x78, + 0x07, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, 0x3c, 0x03, + 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, + 0x78, 0x03, 0xc0, 0x00, 0x00, 0x78, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x3e, + 0x0f, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x3e, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x0f, + 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, + 0x3e, 0x0f, 0x80, 0x00, 0x00, 0x3c, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x1f, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x0f, + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xfe, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x03, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, + 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xf8, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xfe, 0x00, 0x00, 0x00, 0x7c, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, + 0xe0, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x7c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0x00, 0x07, 0xc0, 0x00, 0x1e, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x7c, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x01, + 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, + 0xe0, 0x00, 0x00, 0x01, 0xff, 0xf0, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0xf8, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0x80, 0x0f, 0xc0, 0x00, 0x1e, 0x00, + 0x1c, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0xe0, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x03, + 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, + 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, + 0xe0, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x01, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0x80, 0x0f, 0xc0, 0x00, 0x1f, 0x00, + 0x1c, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, + 0x00, 0xfe, 0x07, 0xf0, 0x00, 0x00, 0xfe, 0x00, + 0x00, 0x00, 0x1c, 0x01, 0xf0, 0x00, 0x00, 0x07, + 0xc1, 0xf0, 0x00, 0x00, 0x1c, 0x01, 0xf8, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xe0, 0xfc, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x03, 0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0x80, 0x0f, 0xc0, 0x00, 0x1f, 0x80, + 0x1c, 0x00, 0x00, 0x07, 0xe1, 0xf8, 0x00, 0x00, + 0x01, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0xee, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0xf0, 0x00, 0x00, 0x0f, + 0x00, 0x78, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x80, 0x1e, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x07, 0xc0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xc0, 0x1f, 0xc0, 0x00, 0x1f, 0x80, + 0x1c, 0x00, 0x00, 0x0f, 0x80, 0x7c, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x7c, 0x00, 0x01, 0xef, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x1e, + 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x0f, 0x80, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1d, 0xc0, 0x1d, 0xc0, 0x00, 0x1f, 0xc0, + 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, + 0x07, 0x80, 0x00, 0x3c, 0x00, 0x01, 0xc7, 0x00, + 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x1c, + 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x1f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1d, 0xc0, 0x1d, 0xc0, 0x00, 0x1d, 0xc0, + 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, + 0x0f, 0x03, 0xe3, 0x9e, 0x00, 0x03, 0xc7, 0x80, + 0x00, 0x00, 0x1c, 0x00, 0x70, 0x00, 0x00, 0x1c, + 0x00, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x06, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x3e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1d, 0xe0, 0x1d, 0xc0, 0x00, 0x1c, 0xe0, + 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, + 0x0f, 0x0f, 0xf7, 0x8e, 0x00, 0x03, 0xc7, 0x80, + 0x00, 0x00, 0x1c, 0x00, 0xf0, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x7c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xe0, 0x39, 0xc0, 0x00, 0x1c, 0xf0, + 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x00, + 0x1e, 0x1f, 0xff, 0x8f, 0x00, 0x03, 0x83, 0x80, + 0x00, 0x00, 0x1c, 0x01, 0xe0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xe0, 0x39, 0xc0, 0x00, 0x1c, 0x70, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x3e, 0x3f, 0x0f, 0x00, 0x07, 0x83, 0xc0, + 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, + 0xf0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xf0, 0x39, 0xc0, 0x00, 0x1c, 0x78, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x3c, 0x1f, 0x07, 0x00, 0x07, 0x01, 0xc0, + 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, + 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1f, + 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0xf0, 0x79, 0xc0, 0x00, 0x1c, 0x3c, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x3c, 0x78, 0x0f, 0x07, 0x00, 0x0f, 0x01, 0xe0, + 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, + 0x80, 0x00, 0x00, 0x38, 0x03, 0xff, 0x00, 0x00, + 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1f, + 0xfc, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x70, 0x71, 0xc0, 0x00, 0x1c, 0x1c, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x38, 0x70, 0x0f, 0x07, 0x00, 0x0f, 0x01, 0xe0, + 0x00, 0x00, 0x1c, 0x01, 0xf0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, + 0x80, 0x00, 0x00, 0x38, 0x03, 0xff, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1f, + 0x9c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x70, 0x71, 0xc0, 0x00, 0x1c, 0x1e, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x38, 0xf0, 0x0f, 0x07, 0x00, 0x0f, 0xff, 0xe0, + 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x03, 0xff, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1f, + 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x78, 0xf1, 0xc0, 0x00, 0x1c, 0x0f, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x38, 0xe0, 0x0e, 0x07, 0x00, 0x1f, 0xff, 0xf0, + 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1e, + 0x0f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x38, 0xe1, 0xc0, 0x00, 0x1c, 0x07, + 0x1c, 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, + 0x38, 0xe0, 0x0e, 0x0f, 0x00, 0x1f, 0xff, 0xf0, + 0x00, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x00, 0x3c, + 0x00, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x07, 0x80, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x38, 0xe1, 0xc0, 0x00, 0x1c, 0x07, + 0x9c, 0x00, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x00, + 0x38, 0xe0, 0x1e, 0x0e, 0x00, 0x1c, 0x00, 0x70, + 0x00, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x00, 0x1c, + 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x3d, 0xe1, 0xc0, 0x00, 0x1c, 0x03, + 0x9c, 0x00, 0x00, 0x1c, 0x00, 0x0e, 0x00, 0x00, + 0x38, 0xe0, 0x1e, 0x1e, 0x00, 0x3c, 0x00, 0x78, + 0x00, 0x00, 0x1c, 0x00, 0x38, 0x00, 0x00, 0x1e, + 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x03, 0xc0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x1d, 0xc1, 0xc0, 0x00, 0x1c, 0x01, + 0xdc, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, + 0x38, 0xe0, 0x3c, 0x1c, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, 0x1e, + 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x00, 0x1c, + 0x01, 0xe0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x1d, 0xc1, 0xc0, 0x00, 0x1c, 0x01, + 0xfc, 0x00, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, + 0x3c, 0xf0, 0x7c, 0x3c, 0x00, 0x78, 0x00, 0x3c, + 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, 0x0f, + 0x00, 0x7c, 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x80, 0x1f, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x78, 0x3c, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x1f, 0xc1, 0xc0, 0x00, 0x1c, 0x00, + 0xfc, 0x00, 0x00, 0x0f, 0x80, 0x7c, 0x00, 0x00, + 0x3c, 0x78, 0xfc, 0xf8, 0x00, 0x78, 0x00, 0x3c, + 0x00, 0x00, 0x1c, 0x01, 0xf0, 0x00, 0x00, 0x07, + 0xe1, 0xf8, 0x00, 0x00, 0x1c, 0x01, 0xf8, 0x00, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xe0, 0x7f, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0x78, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x70, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1c, 0x1f, 0x81, 0xc0, 0x00, 0x1c, 0x00, + 0xfc, 0x00, 0x00, 0x07, 0xe1, 0xf8, 0x00, 0x00, + 0x1c, 0x7f, 0xff, 0xf0, 0x00, 0x70, 0x00, 0x1c, + 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x03, + 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, + 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x78, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, + 0x00, 0x1c, 0x0f, 0x81, 0xc0, 0x00, 0x1c, 0x00, + 0x7c, 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, + 0x1e, 0x3f, 0xdf, 0xe0, 0x00, 0xf0, 0x00, 0x1e, + 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x01, + 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, + 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x3c, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, + 0x00, 0x1c, 0x0f, 0x81, 0xc0, 0x00, 0x1c, 0x00, + 0x3c, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x00, + 0x0f, 0x1f, 0x0f, 0x87, 0x80, 0xe0, 0x00, 0x0e, + 0x00, 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, + 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x1c, + 0x00, 0x1e, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, + 0x00, 0x1c, 0x0f, 0x01, 0xc0, 0x00, 0x1c, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, + 0x0f, 0x80, 0x00, 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, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xfe, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x01, + 0xfe, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0xe0, 0x00, + 0x0e, 0x00, 0x00, 0xe0, 0x03, 0xe0, 0x03, 0x80, + 0x3c, 0x00, 0x78, 0x00, 0x00, 0xf0, 0x00, 0x78, + 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xc0, + 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x03, + 0xff, 0x80, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0xf0, 0x00, + 0x1e, 0x00, 0x00, 0xf0, 0x03, 0xe0, 0x07, 0x80, + 0x1e, 0x00, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x70, + 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x03, 0xff, 0xe0, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x0f, + 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0xf0, 0x00, + 0x1e, 0x00, 0x00, 0xf0, 0x07, 0xe0, 0x07, 0x80, + 0x0e, 0x00, 0xe0, 0x00, 0x00, 0x78, 0x00, 0xf0, + 0x00, 0x00, 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0xf0, 0x00, 0x00, 0x07, 0xc1, 0xf0, + 0x00, 0x00, 0x1c, 0x00, 0xf8, 0x00, 0x00, 0x0f, + 0x83, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, + 0x3c, 0x00, 0x00, 0x70, 0x07, 0xf0, 0x07, 0x00, + 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x3c, 0x01, 0xe0, + 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x78, 0x00, 0x00, 0x0f, 0x00, 0x78, + 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x1e, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x78, 0x00, + 0x3c, 0x00, 0x00, 0x70, 0x07, 0x70, 0x07, 0x00, + 0x07, 0x83, 0xc0, 0x00, 0x00, 0x1c, 0x01, 0xc0, + 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x07, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x78, 0x00, 0x00, 0x1e, 0x00, 0x3c, + 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x00, 0x78, 0x07, 0x70, 0x0f, 0x00, + 0x03, 0x83, 0x80, 0x00, 0x00, 0x1e, 0x03, 0xc0, + 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x3c, + 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, + 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x00, + 0x78, 0x00, 0x00, 0x78, 0x0f, 0x78, 0x0f, 0x00, + 0x03, 0xc7, 0x80, 0x00, 0x00, 0x0f, 0x07, 0x80, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x1c, + 0x00, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x00, + 0x78, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x00, + 0x01, 0xef, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x38, 0x00, 0x00, 0x3c, 0x00, 0x1e, + 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, + 0x70, 0x00, 0x00, 0x38, 0x0e, 0x38, 0x0e, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0x00, 0x07, 0x8f, 0x00, + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x0f, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, + 0xf0, 0x00, 0x00, 0x3c, 0x0e, 0x38, 0x1e, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x03, 0x8e, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1c, 0x00, 0xf8, 0x00, 0x00, 0x0f, + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, + 0xf0, 0x00, 0x00, 0x3c, 0x1e, 0x3c, 0x1e, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x03, 0xde, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x01, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1f, 0xff, 0xf8, 0x00, 0x00, 0x07, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x01, + 0xe0, 0x00, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1f, 0xff, 0xf0, 0x00, 0x00, 0x01, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x01, + 0xe0, 0x00, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x00, + 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x01, + 0xc0, 0x00, 0x00, 0x1e, 0x3c, 0x1c, 0x3c, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0xff, 0x80, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1c, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x83, + 0xc0, 0x00, 0x00, 0x1e, 0x3c, 0x1e, 0x3c, 0x00, + 0x01, 0xef, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0e, + 0x00, 0x00, 0x1c, 0x07, 0x80, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x83, + 0xc0, 0x00, 0x00, 0x0e, 0x38, 0x0e, 0x38, 0x00, + 0x01, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x1e, + 0x00, 0x00, 0x1c, 0x07, 0xc0, 0x00, 0x00, 0x38, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x03, 0xc7, + 0x80, 0x00, 0x00, 0x0e, 0x38, 0x0e, 0x38, 0x00, + 0x03, 0xc7, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x1c, + 0x00, 0x00, 0x1c, 0x03, 0xe0, 0x00, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x00, 0x03, 0xc7, + 0x80, 0x00, 0x00, 0x0f, 0x78, 0x0f, 0x78, 0x00, + 0x07, 0x83, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x07, 0x3c, + 0x00, 0x00, 0x1c, 0x01, 0xf0, 0x00, 0x00, 0x3c, + 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x01, 0xc7, + 0x00, 0x00, 0x00, 0x0f, 0x70, 0x07, 0x78, 0x00, + 0x0f, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x07, 0xb8, + 0x00, 0x00, 0x1c, 0x00, 0xf0, 0x00, 0x00, 0x1c, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x00, 0x01, 0xef, + 0x00, 0x00, 0x00, 0x07, 0x70, 0x07, 0x70, 0x00, + 0x0e, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x07, 0xf8, + 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, 0x1e, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x78, 0x00, 0x00, 0x01, 0xef, + 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x00, + 0x1e, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc1, 0xf0, + 0x00, 0x00, 0x1c, 0x00, 0x78, 0x00, 0x00, 0x0f, + 0xc1, 0xf0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x0f, 0xc1, 0xf8, 0x00, 0x00, 0x00, 0xfe, + 0x00, 0x00, 0x00, 0x07, 0xf0, 0x07, 0xf0, 0x00, + 0x3c, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, + 0x00, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x00, 0x0f, + 0xff, 0xe0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00, 0xfe, + 0x00, 0x00, 0x00, 0x07, 0xe0, 0x03, 0xf0, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfe, + 0x00, 0x00, 0x1c, 0x00, 0x3e, 0x00, 0x00, 0x03, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x03, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x03, 0xe0, 0x03, 0xe0, 0x00, + 0x78, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x9f, + 0x00, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x03, 0xe0, 0x03, 0xe0, 0x00, + 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xff, 0xff, 0xe0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, + 0x00, 0x00, 0x39, 0xf8, 0x00, 0x00, 0x00, 0x03, + 0xf0, 0x00, 0x00, 0x00, 0x07, 0xe7, 0x00, 0x00, + 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x07, 0xe7, 0x00, 0x00, 0x00, + 0x38, 0xfc, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x0f, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x39, 0xf0, 0x7e, 0x00, 0x00, 0x39, 0xfc, + 0x00, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, + 0x00, 0x00, 0x3b, 0xfc, 0x00, 0x00, 0x00, 0x0f, + 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf7, 0x00, 0x00, + 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x0f, 0xf7, 0x00, 0x00, 0x00, + 0x3b, 0xfe, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x1f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3b, 0xfc, 0xff, 0x00, 0x00, 0x3b, 0xff, + 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x1f, + 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, + 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0xff, 0x80, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, + 0x3f, 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x3e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xfd, 0xff, 0x80, 0x00, 0x3f, 0xff, + 0x00, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1f, 0x00, + 0x00, 0x00, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x3e, + 0x1e, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x00, 0x00, + 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x00, 0x00, 0x00, + 0x3f, 0x0f, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0x1f, 0x8f, 0x80, 0x00, 0x3f, 0x0f, + 0x80, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x3e, 0x07, 0x00, 0x00, 0x00, 0x3c, + 0x0f, 0x00, 0x00, 0x00, 0x38, 0x1f, 0x00, 0x00, + 0x00, 0x38, 0x07, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x1f, 0x00, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0xf0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x1f, 0x07, 0x80, 0x00, 0x3c, 0x07, + 0x80, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, 0x78, + 0x07, 0x00, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, + 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, + 0x3c, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x39, + 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x0f, 0x03, 0x80, 0x00, 0x3c, 0x03, + 0x80, 0x00, 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3b, + 0xc0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0x00, + 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xc0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, + 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf7, 0x00, + 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0xf0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, + 0x07, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, + 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x70, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x0f, 0x00, + 0x00, 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, 0x78, + 0x0f, 0x00, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x78, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x78, 0x07, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1f, 0x00, + 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x38, + 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, + 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x0f, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x3c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x3c, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x3f, 0x00, + 0x00, 0x00, 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x3e, + 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x00, 0x00, + 0x00, 0x3e, 0x0f, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x1e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x3e, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0x00, + 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x1f, + 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x1e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf7, 0x80, + 0x00, 0x00, 0x3b, 0xfc, 0x00, 0x00, 0x00, 0x0f, + 0xf8, 0x00, 0x00, 0x00, 0x0f, 0xf7, 0x00, 0x00, + 0x00, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe3, 0x80, + 0x00, 0x00, 0x39, 0xf8, 0x00, 0x00, 0x00, 0x07, + 0xf0, 0x00, 0x00, 0x00, 0x07, 0xe7, 0x00, 0x00, + 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x07, 0xe7, 0x00, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x38, + 0x07, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x0e, 0x03, 0x80, 0x00, 0x38, 0x03, + 0x80, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7c, 0x3e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x39, 0xf8, 0x00, 0x00, 0x00, 0x07, 0xe7, 0x00, + 0x00, 0x00, 0x39, 0xe0, 0x00, 0x00, 0x00, 0x0f, + 0xf0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0xf0, 0x07, + 0x80, 0x00, 0x01, 0xe0, 0x38, 0x0f, 0x00, 0x00, + 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3b, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf7, 0x00, + 0x00, 0x00, 0x3b, 0xe0, 0x00, 0x00, 0x00, 0x1f, + 0xf8, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0xf0, 0x07, + 0x80, 0x00, 0x00, 0xe0, 0x3c, 0x0e, 0x00, 0x00, + 0x78, 0x0f, 0x00, 0x00, 0x00, 0x78, 0x0f, 0x00, + 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, + 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x3f, + 0xfc, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x07, + 0x00, 0x00, 0x00, 0xf0, 0x7c, 0x1e, 0x00, 0x00, + 0x38, 0x1e, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, + 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x00, + 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x78, + 0x3e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x78, 0x0f, + 0x00, 0x00, 0x00, 0xf0, 0x7c, 0x1e, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x38, 0x0e, 0x00, + 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, + 0x40, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3e, 0x0f, 0x00, 0x00, 0x00, 0x38, 0x1f, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x0e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x0e, + 0x00, 0x00, 0x00, 0x70, 0x7c, 0x1c, 0x00, 0x00, + 0x1e, 0x38, 0x00, 0x00, 0x00, 0x3c, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, + 0xc0, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x78, 0x0f, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x38, 0x0e, + 0x00, 0x00, 0x00, 0x70, 0xec, 0x1c, 0x00, 0x00, + 0x0e, 0x78, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf1, + 0xc0, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x03, 0x80, 0x00, 0x00, 0x70, 0x0f, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x3c, 0x1e, + 0x00, 0x00, 0x00, 0x78, 0xee, 0x3c, 0x00, 0x00, + 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x1e, 0x1c, 0x00, + 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x71, 0xff, + 0xc0, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xe0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x1c, 0x1c, + 0x00, 0x00, 0x00, 0x38, 0xee, 0x38, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x00, 0x1e, 0x1c, 0x00, + 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x60, 0x7f, + 0x80, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xfc, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x1e, 0x3c, + 0x00, 0x00, 0x00, 0x38, 0xe6, 0x38, 0x00, 0x00, + 0x03, 0xe0, 0x00, 0x00, 0x00, 0x0e, 0x38, 0x00, + 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x40, 0x1f, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0xfe, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x0e, 0x38, + 0x00, 0x00, 0x00, 0x3d, 0xc6, 0x78, 0x00, 0x00, + 0x03, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x00, + 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x0e, 0x38, + 0x00, 0x00, 0x00, 0x1d, 0xc7, 0x70, 0x00, 0x00, + 0x07, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0x38, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x38, 0x03, 0x80, 0x00, 0x00, 0x70, 0x07, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x03, 0x80, 0x00, 0x00, 0x0f, 0x78, + 0x00, 0x00, 0x00, 0x1d, 0xc7, 0x70, 0x00, 0x00, + 0x07, 0xf0, 0x00, 0x00, 0x00, 0x07, 0x70, 0x00, + 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x07, 0x80, 0x00, 0x00, 0x78, 0x0f, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x07, 0x80, 0x00, 0x00, 0x07, 0x70, + 0x00, 0x00, 0x00, 0x1d, 0xc3, 0x70, 0x00, 0x00, + 0x0f, 0x70, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, + 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3c, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x0f, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x78, + 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x07, 0x80, 0x00, 0x00, 0x07, 0xf0, + 0x00, 0x00, 0x00, 0x0f, 0x83, 0xe0, 0x00, 0x00, + 0x1e, 0x78, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, + 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3f, 0x1f, 0x00, 0x00, 0x00, 0x3e, 0x3f, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3c, + 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x00, 0x3e, 0x1f, 0x80, 0x00, 0x00, 0x03, 0xe0, + 0x00, 0x00, 0x00, 0x0f, 0x83, 0xe0, 0x00, 0x00, + 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, + 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3f, 0xfe, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xfe, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xff, 0x80, 0x00, 0x00, 0x03, 0xe0, + 0x00, 0x00, 0x00, 0x0f, 0x83, 0xe0, 0x00, 0x00, + 0x38, 0x1c, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, + 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x3b, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xf7, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0xfc, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x1f, 0xfb, 0x80, 0x00, 0x00, 0x03, 0xe0, + 0x00, 0x00, 0x00, 0x0f, 0x03, 0xc0, 0x00, 0x00, + 0x78, 0x1e, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, + 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, + 0x39, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xe7, 0x00, + 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x07, + 0xf0, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x07, 0xe3, 0x80, 0x00, 0x00, 0x01, 0xc0, + 0x00, 0x00, 0x00, 0x07, 0x01, 0xc0, 0x00, 0x00, + 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, + 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0xc0, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0xf0, 0x24, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x0c, 0x94, + 0xea, 0xff, 0xfd, 0x70, 0xea, 0x00, 0x00, 0x01, + 0xe3, 0x5c, 0x00, 0xb7, 0xa5, 0x9f, 0xf0, 0x04, + 0xe0, 0x86, 0xc0, 0x0c, 0xe5, 0x9f, 0xf0, 0x00, + 0x00, 0x00, 0x0f, 0x74, 0x00, 0x00, 0x0c, 0x98, + 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x24, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x0e, 0x4c, 0xea, 0xff, 0xfd, 0x03, + 0xea, 0x00, 0x00, 0x07, 0xe5, 0x9f, 0xc0, 0x1c, + 0xe5, 0x9c, 0x30, 0x00, 0xe3, 0x83, 0x33, 0x33, + 0xe1, 0x52, 0x00, 0x03, 0x05, 0x9f, 0xc0, 0x10, + 0x05, 0x9c, 0xc0, 0x00, 0x03, 0x8c, 0x23, 0x33, + 0xe5, 0x9f, 0xc0, 0x08, 0xe5, 0x9f, 0xf0, 0x08, + 0x66, 0x00, 0x00, 0x60, 0x66, 0x00, 0x00, 0x5c, + 0x66, 0x00, 0x00, 0x58, 0x00, 0x00, 0x0e, 0x50, + 0x00, 0x00, 0x00, 0x01, 0xf0, 0x24, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x02, 0x6c, 0xa0, 0x00, 0x0b, 0x38, + 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, + 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1f, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0xfe, 0xb1, 0x72, 0x17, 0xf7, + 0xd1, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xcd, + 0xf3, 0x57, 0x93, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x3f, 0xfe, 0xca, 0x20, 0xad, 0x9a, + 0xb5, 0xe9, 0x46, 0xe9, 0x00, 0x00, 0x40, 0x03, + 0x83, 0x12, 0x51, 0x00, 0xb5, 0x7f, 0x65, 0x09, + 0x80, 0x00, 0x40, 0x05, 0x80, 0x3f, 0xf8, 0x95, + 0x9d, 0xac, 0xd2, 0x28, 0x80, 0x00, 0x40, 0x04, + 0x8e, 0xac, 0x02, 0x5b, 0x3e, 0x70, 0x76, 0xbb, + 0x00, 0x00, 0x40, 0x07, 0x9c, 0x04, 0x1f, 0xd0, + 0xa9, 0x33, 0xef, 0x60, 0x80, 0x00, 0x40, 0x08, + 0xc0, 0x5f, 0xf4, 0xe0, 0x6c, 0x83, 0xbb, 0x96, + 0x00, 0x00, 0x3f, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, + 0xc9, 0x0f, 0xda, 0xa2, 0x21, 0x68, 0xc2, 0x35, + 0x00, 0x00, 0x3f, 0xfe, 0xb1, 0x73, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, + 0xff, 0xfe, 0x2f, 0xf1, 0x48, 0x3b, 0x9d, 0x27, + 0x00, 0x00, 0x3f, 0xee, 0xe8, 0x08, 0x97, 0x58, + 0x10, 0x16, 0xb3, 0x7d, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, + 0x41, 0x41, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x05, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x90, 0x90, 0x90, + 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x88, 0x88, 0x88, + 0x88, 0x88, 0x88, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x02, + 0x02, 0x02, 0x02, 0x40, 0xe5, 0x9f, 0xc0, 0x00, + 0xe1, 0x2f, 0xff, 0x1c, 0x2e, 0x01, 0x71, 0xfd, + 0xe5, 0x9f, 0xc0, 0x00, 0xe1, 0x2f, 0xff, 0x1c, + 0x2e, 0x00, 0x5b, 0x9b, 0xe5, 0x9f, 0xc0, 0x00, + 0xe1, 0x2f, 0xff, 0x1c, 0x2e, 0x00, 0x5c, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2e, 0x01, 0xc1, 0xa8, 0x2e, 0x01, 0xc2, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xc1, 0xa8, + 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcf, + 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x01, 0x00, + 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x20, 0x46, 0x75, 0x6a, 0x69, 0x74, 0x73, + 0x75, 0x20, 0x53, 0x69, 0x65, 0x6d, 0x65, 0x6e, + 0x73, 0x20, 0x26, 0x20, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x65, 0x20, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x20, 0x6d, 0x65, 0x64, 0x69, 0x61, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x57, 0x5e, 0x61, 0xa3, + 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x0c, + 0x6c, 0x00, 0x00, 0x24, 0x64, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xd0, 0x00, 0x00, 0x07, 0xd0, + 0x00, 0x00, 0x13, 0x88, 0x02, 0x02, 0x01, 0x00, + 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0xd0, 0x00, 0x00, 0x07, 0xd0, + 0x00, 0x00, 0x13, 0x88, 0x02, 0x02, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xd4, + 0x2e, 0x08, 0x05, 0xd4, 0x2e, 0x08, 0x05, 0xdc, + 0x2e, 0x08, 0x05, 0xdc, 0x2e, 0x08, 0x05, 0xe4, + 0x2e, 0x08, 0x05, 0xe4, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, + 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, + 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, + 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, + 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, + 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, + 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, + 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, + 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, + 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, + 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, + 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, + 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, + 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, + 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, + 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, + 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, + 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, + 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, + 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, + 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, + 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, + 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, + 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, + 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, + 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, + 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, + 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, + 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, + 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, + 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, + 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, + 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, + 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, + 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, + 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, + 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, + 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, + 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, + 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, + 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, + 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, + 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, + 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, + 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, + 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, + 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, + 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, + 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, + 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, + 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, + 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, + 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, + 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, + 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, + 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, + 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, + 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, + 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, + 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, + 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, + 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, + 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, + 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, + 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, + 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, + 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, + 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, + 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, + 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, + 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, + 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, + 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, + 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, + 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, + 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, + 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, + 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, + 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x70, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, + 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x70, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, + 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, + 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xfe, + 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, + 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x36, 0x36, + 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, + 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00, + 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, + 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, + 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, + 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, + 0xcc, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, + 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, + 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, + 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, + 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, + 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, + 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, + 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, + 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00, + 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, + 0x66, 0xce, 0x9a, 0x3f, 0x06, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, + 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, + 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, + 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, + 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, + 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, + 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, + 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, + 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, + 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, + 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, + 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, + 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x18, + 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, + 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, + 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, + 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, + 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, + 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, + 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, + 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, + 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, + 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, + 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, + 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, + 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, + 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, + 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7e, + 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, + 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, + 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x6c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x32, 0x7e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, + 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x2e, 0x00, 0x66, 0x3c, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, + 0x2e, 0x08, 0x07, 0xa8, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf7, + 0x11, 0x38, 0x06, 0x53, 0x2e, 0x08, 0x17, 0xe8, + 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x21, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x39, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x21, + 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xb9, + 0x0e, 0xa6, 0x06, 0x53, 0x2e, 0x08, 0x19, 0x18, + 0x2e, 0x08, 0x1a, 0x3c, 0x2e, 0x08, 0x19, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x64, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x80, 0x10, 0x80, 0x00, 0x80, 0xda, 0x80, + 0x00, 0x5a, 0x51, 0xf0, 0x00, 0x36, 0x91, 0x22, + 0x00, 0xf0, 0x29, 0x6e, 0x00, 0x10, 0xd2, 0x92, + 0x00, 0xca, 0x6a, 0xde, 0x00, 0xa6, 0xaa, 0x10, + 0x00, 0x80, 0x3b, 0x80, 0x00, 0x80, 0xbc, 0x80, + 0x00, 0x80, 0x7e, 0x80, 0x00, 0xcf, 0x22, 0x73, + 0x00, 0x93, 0x48, 0x5d, 0x00, 0xa2, 0x73, 0x93, + 0x00, 0x25, 0xae, 0xad, 0x00, 0xa7, 0x9f, 0x60, + 0x00, 0x10, 0x10, 0x10, 0x00, 0x59, 0x10, 0x10, + 0x00, 0xa2, 0x10, 0x10, 0x00, 0xeb, 0x10, 0x10, + 0x00, 0x10, 0x10, 0x59, 0x00, 0x59, 0x10, 0x59, + 0x00, 0xa2, 0x10, 0x59, 0x00, 0xeb, 0x10, 0x59, + 0x00, 0x10, 0x10, 0xa2, 0x00, 0x59, 0x10, 0xa2, + 0x00, 0xa2, 0x10, 0xa2, 0x00, 0xeb, 0x10, 0xa2, + 0x00, 0x10, 0x10, 0xeb, 0x00, 0x59, 0x10, 0xeb, + 0x00, 0xa2, 0x10, 0xeb, 0x00, 0xeb, 0x10, 0xeb, + 0x00, 0x10, 0x2f, 0x10, 0x00, 0x59, 0x2f, 0x10, + 0x00, 0xa2, 0x2f, 0x10, 0x00, 0xeb, 0x2f, 0x10, + 0x00, 0x10, 0x2f, 0x59, 0x00, 0x59, 0x2f, 0x59, + 0x00, 0xa2, 0x2f, 0x59, 0x00, 0xeb, 0x2f, 0x59, + 0x00, 0x10, 0x2f, 0xa2, 0x00, 0x59, 0x2f, 0xa2, + 0x00, 0xa2, 0x2f, 0xa2, 0x00, 0xeb, 0x2f, 0xa2, + 0x00, 0x10, 0x2f, 0xeb, 0x00, 0x59, 0x2f, 0xeb, + 0x00, 0xa2, 0x2f, 0xeb, 0x00, 0xeb, 0x2f, 0xeb, + 0x00, 0x10, 0x4e, 0x10, 0x00, 0x59, 0x4e, 0x10, + 0x00, 0xa2, 0x4e, 0x10, 0x00, 0xeb, 0x4e, 0x10, + 0x00, 0x10, 0x4e, 0x59, 0x00, 0x59, 0x4e, 0x59, + 0x00, 0xa2, 0x4e, 0x59, 0x00, 0xeb, 0x4e, 0x59, + 0x00, 0x10, 0x4e, 0xa2, 0x00, 0x59, 0x4e, 0xa2, + 0x00, 0xa2, 0x4e, 0xa2, 0x00, 0xeb, 0x4e, 0xa2, + 0x00, 0x10, 0x4e, 0xeb, 0x00, 0x59, 0x4e, 0xeb, + 0x00, 0xa2, 0x4e, 0xeb, 0x00, 0xeb, 0x4e, 0xeb, + 0x00, 0x10, 0x6d, 0x10, 0x00, 0x59, 0x6d, 0x10, + 0x00, 0xa2, 0x6d, 0x10, 0x00, 0xeb, 0x6d, 0x10, + 0x00, 0x10, 0x6d, 0x59, 0x00, 0x59, 0x6d, 0x59, + 0x00, 0xa2, 0x6d, 0x59, 0x00, 0xeb, 0x6d, 0x59, + 0x00, 0x10, 0x6d, 0xa2, 0x00, 0x59, 0x6d, 0xa2, + 0x00, 0xa2, 0x6d, 0xa2, 0x00, 0xeb, 0x6d, 0xa2, + 0x00, 0x10, 0x6d, 0xeb, 0x00, 0x59, 0x6d, 0xeb, + 0x00, 0xa2, 0x6d, 0xeb, 0x00, 0xeb, 0x6d, 0xeb, + 0x00, 0x10, 0x8c, 0x10, 0x00, 0x59, 0x8c, 0x10, + 0x00, 0xa2, 0x8c, 0x10, 0x00, 0xeb, 0x8c, 0x10, + 0x00, 0x10, 0x8c, 0x59, 0x00, 0x59, 0x8c, 0x59, + 0x00, 0xa2, 0x8c, 0x59, 0x00, 0xeb, 0x8c, 0x59, + 0x00, 0x10, 0x8c, 0xa2, 0x00, 0x59, 0x8c, 0xa2, + 0x00, 0xa2, 0x8c, 0xa2, 0x00, 0xeb, 0x8c, 0xa2, + 0x00, 0x10, 0x8c, 0xeb, 0x00, 0x59, 0x8c, 0xeb, + 0x00, 0xa2, 0x8c, 0xeb, 0x00, 0xeb, 0x8c, 0xeb, + 0x00, 0x10, 0xab, 0x10, 0x00, 0x59, 0xab, 0x10, + 0x00, 0xa2, 0xab, 0x10, 0x00, 0xeb, 0xab, 0x10, + 0x00, 0x10, 0xab, 0x59, 0x00, 0x59, 0xab, 0x59, + 0x00, 0xa2, 0xab, 0x59, 0x00, 0xeb, 0xab, 0x59, + 0x00, 0x10, 0xab, 0xa2, 0x00, 0x59, 0xab, 0xa2, + 0x00, 0xa2, 0xab, 0xa2, 0x00, 0xeb, 0xab, 0xa2, + 0x00, 0x10, 0xab, 0xeb, 0x00, 0x59, 0xab, 0xeb, + 0x00, 0xa2, 0xab, 0xeb, 0x00, 0xeb, 0xab, 0xeb, + 0x00, 0x10, 0xca, 0x10, 0x00, 0x59, 0xca, 0x10, + 0x00, 0xa2, 0xca, 0x10, 0x00, 0xeb, 0xca, 0x10, + 0x00, 0x10, 0xca, 0x59, 0x00, 0x59, 0xca, 0x59, + 0x00, 0xa2, 0xca, 0x59, 0x00, 0xeb, 0xca, 0x59, + 0x00, 0x10, 0xca, 0xa2, 0x00, 0x59, 0xca, 0xa2, + 0x00, 0xa2, 0xca, 0xa2, 0x00, 0xeb, 0xca, 0xa2, + 0x00, 0x10, 0xca, 0xeb, 0x00, 0x59, 0xca, 0xeb, + 0x00, 0xa2, 0xca, 0xeb, 0x00, 0xeb, 0xca, 0xeb, + 0x00, 0x10, 0xe9, 0x10, 0x00, 0x59, 0xe9, 0x10, + 0x00, 0xa2, 0xe9, 0x10, 0x00, 0xeb, 0xe9, 0x10, + 0x00, 0x10, 0xe9, 0x59, 0x00, 0x59, 0xe9, 0x59, + 0x00, 0xa2, 0xe9, 0x59, 0x00, 0xeb, 0xe9, 0x59, + 0x00, 0x10, 0xe9, 0xa2, 0x00, 0x59, 0xe9, 0xa2, + 0x00, 0xa2, 0xe9, 0xa2, 0x00, 0xeb, 0xe9, 0xa2, + 0x00, 0x10, 0xe9, 0xeb, 0x00, 0x59, 0xe9, 0xeb, + 0x00, 0xa2, 0xe9, 0xeb, 0x00, 0xeb, 0xe9, 0xeb, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x24, 0xc0, 0xc1, 0x11, 0x11, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x6d, 0xbb, 0xeb, + 0x8e, 0x01, 0xea, 0x25, 0x04, 0xd0, 0x82, 0x49, + 0xed, 0x4c, 0x8f, 0xc2, 0x66, 0x0b, 0x65, 0xc5, + 0x0c, 0xc2, 0x41, 0x19, 0x07, 0xa8, 0x94, 0x13, + 0x42, 0x09, 0x27, 0xb5, 0x32, 0x3f, 0x09, 0x98, + 0x2d, 0x97, 0x14, 0x33, 0x09, 0x04, 0x64, 0x00, + 0xff, 0xff, 0x24, 0xc0, 0xe0, 0x11, 0x21, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x13, 0x8e, 0xf7, 0xe7, + 0x6e, 0x9c, 0x0c, 0xc3, 0xd2, 0xb4, 0x05, 0x16, + 0x3c, 0x8e, 0x82, 0xd4, 0x16, 0x5e, 0x9c, 0x0c, + 0xc3, 0xd2, 0xb4, 0x05, 0x16, 0x3c, 0x8e, 0x82, + 0xd4, 0x16, 0x5e, 0x9c, 0x0c, 0xc3, 0xd2, 0xb4, + 0x05, 0x16, 0x3c, 0x8e, 0x82, 0xd4, 0x16, 0x50, + 0xff, 0xff, 0x24, 0xc0, 0xd4, 0x11, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x4d, 0xf8, 0xd5, + 0x9e, 0x7f, 0x02, 0x22, 0x08, 0xa3, 0xbd, 0x94, + 0x53, 0x16, 0x79, 0xfc, 0x08, 0x88, 0x22, 0x8e, + 0xf6, 0x51, 0x4c, 0x59, 0xe7, 0xf0, 0x22, 0x20, + 0x8a, 0x3b, 0xd9, 0x45, 0x31, 0x67, 0x9f, 0xc0, + 0x88, 0x82, 0x28, 0xef, 0x65, 0x14, 0xc4, 0x00, + 0xff, 0xff, 0x24, 0xc0, 0xe8, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x14, 0x6d, 0xfb, 0x1d, + 0x77, 0xc1, 0x38, 0x81, 0xfb, 0xb1, 0xd7, 0x7c, + 0x13, 0x88, 0x1f, 0xbb, 0x1d, 0x77, 0xc1, 0x38, + 0x81, 0xfb, 0xb1, 0xd7, 0x7c, 0x13, 0x88, 0x1f, + 0xbb, 0x1d, 0x77, 0xc1, 0x38, 0x81, 0xfb, 0xb1, + 0xd7, 0x7c, 0x13, 0x88, 0x1f, 0x80, 0x00, 0x00, + 0xff, 0xff, 0x24, 0xc0, 0x9b, 0x00, 0x20, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x3d, 0x75, 0xf7, + 0x14, 0x0a, 0xc3, 0x29, 0x9f, 0x51, 0xbc, 0xfb, + 0xdc, 0x7b, 0x8a, 0x05, 0x61, 0x94, 0xcf, 0xa8, + 0xde, 0x7d, 0xee, 0x3d, 0xc5, 0x02, 0xb0, 0xca, + 0x67, 0xd4, 0x6f, 0x3e, 0xf7, 0x1e, 0xe2, 0x81, + 0x58, 0x65, 0x33, 0xea, 0x37, 0x9f, 0x7b, 0x80, + 0xff, 0xff, 0x24, 0xc0, 0x12, 0xe0, 0x00, 0x00, + 0x00, 0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xeb, 0x50, 0xfb, 0xe7, + 0x78, 0x1f, 0xde, 0xa1, 0x62, 0x99, 0x11, 0x36, + 0x02, 0x00, 0x97, 0xd6, 0x69, 0x98, 0x1f, 0xde, + 0xa1, 0x62, 0x99, 0x11, 0x36, 0x02, 0x00, 0x97, + 0xd6, 0x69, 0x98, 0x1f, 0xde, 0xa1, 0x62, 0x99, + 0x11, 0x36, 0x02, 0x00, 0x97, 0xd6, 0x69, 0x90, + 0xff, 0xff, 0x24, 0xc0, 0x11, 0xba, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdf, 0x95, 0x03, 0xa1, + 0x49, 0xc5, 0x45, 0xe7, 0x96, 0xe6, 0x1d, 0xdc, + 0x0d, 0x50, 0xa4, 0xe2, 0xa2, 0xf3, 0xcb, 0x73, + 0x0e, 0xee, 0x06, 0xa8, 0x52, 0x71, 0x51, 0x79, + 0xe5, 0xb9, 0x87, 0x77, 0x03, 0x54, 0x29, 0x38, + 0xa8, 0xbc, 0xf2, 0xdc, 0xc3, 0xbb, 0x81, 0xa0, + 0xff, 0xff, 0x24, 0xc0, 0x11, 0x21, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe7, 0xae, 0x35, 0x0d, + 0x42, 0x14, 0xc2, 0xf9, 0x4a, 0x13, 0x55, 0xa6, + 0x6e, 0xf4, 0x88, 0x53, 0x0b, 0xe5, 0x28, 0x4d, + 0x56, 0x99, 0xbb, 0xd2, 0x21, 0x4c, 0x2f, 0x94, + 0xa1, 0x35, 0x5a, 0x66, 0xef, 0x48, 0x85, 0x30, + 0xbe, 0x52, 0x84, 0xd5, 0x69, 0x9b, 0xbd, 0x20, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x50, + 0x2e, 0x08, 0x1f, 0x54, 0x2e, 0x08, 0x1f, 0x58, + 0x2e, 0x08, 0x1f, 0x60, 0x2e, 0x08, 0x1f, 0x64, + 0x2e, 0x08, 0x1f, 0x68, 0x6e, 0x00, 0x01, 0x00, + 0x6e, 0x00, 0x01, 0x00, 0x6e, 0x00, 0x01, 0x08, + 0x6e, 0x00, 0x01, 0x0c, 0x6e, 0x00, 0x01, 0x04, + 0x6e, 0x00, 0x01, 0x10, 0x6e, 0x00, 0x01, 0x14, + 0x2e, 0x08, 0x60, 0x60, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x00, 0xb0, 0x25, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x0d, 0x00, + 0x2e, 0x08, 0x1f, 0xb4, 0x2e, 0x08, 0x1f, 0xb8, + 0x2e, 0x08, 0x1f, 0xbc, 0x2e, 0x08, 0x1f, 0xc0, + 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x04, + 0x70, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x0c, + 0x70, 0x00, 0x00, 0x10, 0x70, 0x00, 0x00, 0x30, + 0x2e, 0x01, 0xc4, 0xa9, 0x2e, 0x01, 0xc4, 0x39, + 0x2e, 0x01, 0xc3, 0xb1, 0x2e, 0x01, 0xc3, 0xa9, + 0x2e, 0x01, 0xc4, 0xe1, 0x2e, 0x01, 0xc4, 0x71, + 0x2e, 0x01, 0xc5, 0x25, 0x2e, 0x01, 0xc5, 0x1d, + 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x09, 0x80, + 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, + 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, + 0xfe, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, + 0xff, 0x80, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, + 0xff, 0xe0, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, + 0xff, 0xf8, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, + 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, + 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xc0, 0x00, + 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0xf0, 0x00, + 0xff, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xf0, + 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, + 0x2e, 0x01, 0xc3, 0x90, 0x2e, 0x01, 0xc3, 0x90, +}; + diff -Nru a/drivers/media/dvb/ttpci/av7110_ipack.c b/drivers/media/dvb/ttpci/av7110_ipack.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/av7110_ipack.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,404 @@ +#include "dvb_filter.h" +#include "av7110_ipack.h" +#include /* for memcpy() */ + + +void av7110_ipack_reset(ipack *p) +{ + p->found = 0; + p->cid = 0; + p->plength = 0; + p->flag1 = 0; + p->flag2 = 0; + p->hlength = 0; + p->mpeg = 0; + p->check = 0; + p->which = 0; + p->done = 0; + p->count = 0; +} + + +void av7110_ipack_init(ipack *p, int size, + void (*func)(u8 *buf, int size, void *priv)) +{ + if ( !(p->buf = vmalloc(size*sizeof(u8))) ){ + printk ("Couldn't allocate memory for ipack\n"); + } + p->size = size; + p->func = func; + p->repack_subids = 0; + av7110_ipack_reset(p); +} + + +void av7110_ipack_free(ipack * p) +{ + if (p->buf) vfree(p->buf); +} + + +static +void send_ipack(ipack *p) +{ + int off; + AudioInfo ai; + int ac3_off = 0; + int streamid=0; + int nframes= 0; + int f=0; + + switch ( p->mpeg ){ + case 2: + if (p->count < 10) return; + p->buf[3] = p->cid; + + p->buf[4] = (u8)(((p->count-6) & 0xFF00) >> 8); + p->buf[5] = (u8)((p->count-6) & 0x00FF); + if (p->repack_subids && p->cid == PRIVATE_STREAM1){ + + off = 9+p->buf[8]; + streamid = p->buf[off]; + if ((streamid & 0xF8) == 0x80){ + ai.off = 0; + ac3_off = ((p->buf[off+2] << 8)| + p->buf[off+3]); + if (ac3_off < p->count) + f=dvb_filter_get_ac3info(p->buf+off+3+ac3_off, + p->count-ac3_off, &ai,0); + if ( !f ){ + nframes = (p->count-off-3-ac3_off)/ + ai.framesize + 1; + p->buf[off+2] = (ac3_off >> 8)& 0xFF; + p->buf[off+3] = (ac3_off)& 0xFF; + p->buf[off+1] = nframes; + + ac3_off += nframes * ai.framesize - + p->count; + } + } + } + p->func(p->buf, p->count, p->data); + + p->buf[6] = 0x80; + p->buf[7] = 0x00; + p->buf[8] = 0x00; + p->count = 9; + if (p->repack_subids && p->cid == PRIVATE_STREAM1 + && (streamid & 0xF8)==0x80 ){ + p->count += 4; + p->buf[9] = streamid; + p->buf[10] = (ac3_off >> 8)& 0xFF; + p->buf[11] = (ac3_off)& 0xFF; + p->buf[12] = 0; + } + + break; + case 1: + if (p->count < 8) return; + p->buf[3] = p->cid; + + p->buf[4] = (u8)(((p->count-6) & 0xFF00) >> 8); + p->buf[5] = (u8)((p->count-6) & 0x00FF); + p->func(p->buf, p->count, p->data); + + p->buf[6] = 0x0F; + p->count = 7; + break; + } +} + + +void av7110_ipack_flush(ipack *p) +{ + if (p->plength != MMAX_PLENGTH-6 || p->found<=6) + return; + p->plength = p->found-6; + p->found = 0; + send_ipack(p); + av7110_ipack_reset(p); +} + + +static +void write_ipack(ipack *p, const u8 *data, int count) +{ + u8 headr[3] = { 0x00, 0x00, 0x01} ; + + if (p->count < 6){ + memcpy(p->buf, headr, 3); + p->count = 6; + } + + if (p->count + count < p->size){ + memcpy(p->buf+p->count, data, count); + p->count += count; + } else { + int rest = p->size - p->count; + memcpy(p->buf+p->count, data, rest); + p->count += rest; + send_ipack(p); + if (count - rest > 0) + write_ipack(p, data+rest, count-rest); + } +} + + +int av7110_ipack_instant_repack (const u8 *buf, int count, ipack *p) +{ + int l; + int c=0; + + while (c < count && (p->mpeg == 0 || + (p->mpeg == 1 && p->found < 7) || + (p->mpeg == 2 && p->found < 9)) + && (p->found < 5 || !p->done)){ + switch ( p->found ){ + case 0: + case 1: + if (buf[c] == 0x00) p->found++; + else p->found = 0; + c++; + break; + case 2: + if (buf[c] == 0x01) p->found++; + else if (buf[c] == 0) { + p->found = 2; + } else p->found = 0; + c++; + break; + case 3: + p->cid = 0; + switch (buf[c]){ + case PROG_STREAM_MAP: + case PRIVATE_STREAM2: + case PROG_STREAM_DIR: + case ECM_STREAM : + case EMM_STREAM : + case PADDING_STREAM : + case DSM_CC_STREAM : + case ISO13522_STREAM: + p->done = 1; + case PRIVATE_STREAM1: + case VIDEO_STREAM_S ... VIDEO_STREAM_E: + case AUDIO_STREAM_S ... AUDIO_STREAM_E: + p->found++; + p->cid = buf[c]; + c++; + break; + default: + p->found = 0; + break; + } + break; + + case 4: + if (count-c > 1){ + p->plen[0] = buf[c]; + c++; + p->plen[1] = buf[c]; + c++; + p->found+=2; + p->plength=(p->plen[0]<<8)|p->plen[1]; + } else { + p->plen[0] = buf[c]; + p->found++; + return count; + } + break; + case 5: + p->plen[1] = buf[c]; + c++; + p->found++; + p->plength=(p->plen[0]<<8)|p->plen[1]; + break; + case 6: + if (!p->done){ + p->flag1 = buf[c]; + c++; + p->found++; + if ( (p->flag1 & 0xC0) == 0x80 ) p->mpeg = 2; + else { + p->hlength = 0; + p->which = 0; + p->mpeg = 1; + p->flag2 = 0; + } + } + break; + + case 7: + if ( !p->done && p->mpeg == 2) { + p->flag2 = buf[c]; + c++; + p->found++; + } + break; + + case 8: + if ( !p->done && p->mpeg == 2) { + p->hlength = buf[c]; + c++; + p->found++; + } + break; + + default: + + break; + } + } + + if (c == count) return count; + + if (!p->plength) p->plength = MMAX_PLENGTH-6; + + if ( p->done || ((p->mpeg == 2 && p->found >= 9) || + (p->mpeg == 1 && p->found >= 7)) ){ + switch (p->cid){ + + case AUDIO_STREAM_S ... AUDIO_STREAM_E: + case VIDEO_STREAM_S ... VIDEO_STREAM_E: + case PRIVATE_STREAM1: + + if (p->mpeg == 2 && p->found == 9) { + write_ipack(p, &p->flag1, 1); + write_ipack(p, &p->flag2, 1); + write_ipack(p, &p->hlength, 1); + } + + if (p->mpeg == 1 && p->found == 7) + write_ipack(p, &p->flag1, 1); + + if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) && + p->found < 14) { + while (c < count && p->found < 14) { + p->pts[p->found-9] = buf[c]; + write_ipack(p, buf+c, 1); + c++; + p->found++; + } + if (c == count) return count; + } + + if (p->mpeg == 1 && p->which < 2000) { + + if (p->found == 7) { + p->check = p->flag1; + p->hlength = 1; + } + + while (!p->which && c < count && + p->check == 0xFF){ + p->check = buf[c]; + write_ipack(p, buf+c, 1); + c++; + p->found++; + p->hlength++; + } + + if ( c == count) return count; + + if ( (p->check & 0xC0) == 0x40 && !p->which){ + p->check = buf[c]; + write_ipack(p, buf+c, 1); + c++; + p->found++; + p->hlength++; + + p->which = 1; + if ( c == count) return count; + p->check = buf[c]; + write_ipack(p, buf+c, 1); + c++; + p->found++; + p->hlength++; + p->which = 2; + if ( c == count) return count; + } + + if (p->which == 1){ + p->check = buf[c]; + write_ipack(p, buf+c, 1); + c++; + p->found++; + p->hlength++; + p->which = 2; + if ( c == count) return count; + } + + if ( (p->check & 0x30) && p->check != 0xFF){ + p->flag2 = (p->check & 0xF0) << 2; + p->pts[0] = p->check; + p->which = 3; + } + + if ( c == count) return count; + if (p->which > 2){ + if ((p->flag2 & PTS_DTS_FLAGS) + == PTS_ONLY){ + while (c < count && + p->which < 7){ + p->pts[p->which-2] = + buf[c]; + write_ipack(p,buf+c,1); + c++; + p->found++; + p->which++; + p->hlength++; + } + if ( c == count) return count; + } else if ((p->flag2 & PTS_DTS_FLAGS) + == PTS_DTS){ + while (c < count && + p->which< 12){ + if (p->which< 7) + p->pts[p->which + -2] = + buf[c]; + write_ipack(p,buf+c,1); + c++; + p->found++; + p->which++; + p->hlength++; + } + if ( c == count) return count; + } + p->which = 2000; + } + + } + + while (c < count && p->found < p->plength+6){ + l = count -c; + if (l+p->found > p->plength+6) + l = p->plength+6-p->found; + write_ipack(p, buf+c, l); + p->found += l; + c += l; + } + + break; + } + + + if ( p->done ){ + if( p->found + count - c < p->plength+6){ + p->found += count-c; + c = count; + } else { + c += p->plength+6 - p->found; + p->found = p->plength+6; + } + } + + if (p->plength && p->found == p->plength+6) { + send_ipack(p); + av7110_ipack_reset(p); + if (c < count) + av7110_ipack_instant_repack(buf+c, count-c, p); + } + } + return count; +} + diff -Nru a/drivers/media/dvb/ttpci/av7110_ipack.h b/drivers/media/dvb/ttpci/av7110_ipack.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/av7110_ipack.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,13 @@ +#ifndef _AV7110_IPACK_H_ +#define _AV7110_IPACK_H_ + +extern void av7110_ipack_init(ipack *p, int size, + void (*func)(u8 *buf, int size, void *priv)); + +extern void av7110_ipack_reset(ipack *p); +extern int av7110_ipack_instant_repack(const u8 *buf, int count, ipack *p); +extern void av7110_ipack_free(ipack * p); +extern void av7110_ipack_flush(ipack *p); + +#endif + diff -Nru a/drivers/media/dvb/ttpci/av7110_ir.c b/drivers/media/dvb/ttpci/av7110_ir.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/av7110_ir.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include +#include + +#include "av7110.h" + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "input_fake.h" +#endif + + +#define UP_TIMEOUT (HZ/2) + +static int av7110_ir_debug = 0; + +#define dprintk(x...) do { if (av7110_ir_debug) printk (x); } while (0) + + +static struct input_dev input_dev; + + +static +u16 key_map [256] = { + KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, + KEY_8, KEY_9, KEY_MHP, 0, KEY_POWER, KEY_MUTE, 0, KEY_INFO, + KEY_VOLUMEUP, KEY_VOLUMEDOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + KEY_CHANNELUP, KEY_CHANNELDOWN, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, KEY_TEXT, 0, 0, KEY_TV, 0, 0, 0, 0, 0, KEY_SETUP, 0, 0, + 0, 0, 0, KEY_SUBTITLE, 0, 0, KEY_LANGUAGE, 0, + KEY_RADIO, 0, 0, 0, 0, KEY_EXIT, 0, 0, + KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_OK, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RED, KEY_GREEN, KEY_YELLOW, + KEY_BLUE, 0, 0, 0, 0, 0, 0, 0, KEY_MENU, KEY_LIST, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, KEY_UP, KEY_UP, KEY_DOWN, KEY_DOWN, + 0, 0, 0, 0, KEY_EPG, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_VCR +}; + + +static +void av7110_emit_keyup (unsigned long data) +{ + if (!data || !test_bit (data, input_dev.key)) + return; + + input_event (&input_dev, EV_KEY, data, !!0); +} + + +static +struct timer_list keyup_timer = { function: av7110_emit_keyup }; + + +static +void av7110_emit_key (u32 ircom) +{ + int down = ircom & (0x80000000); + u16 keycode = key_map[ircom & 0xff]; + + dprintk ("#########%08x######### key %02x %s (keycode %i)\n", + ircom, ircom & 0xff, down ? "pressed" : "released", keycode); + + if (!keycode) { + printk ("%s: unknown key 0x%02x!!\n", + __FUNCTION__, ircom & 0xff); + return; + } + + if (timer_pending (&keyup_timer)) { + del_timer (&keyup_timer); + if (keyup_timer.data != keycode) + input_event (&input_dev, EV_KEY, keyup_timer.data, !!0); + } + + clear_bit (keycode, input_dev.key); + + input_event (&input_dev, EV_KEY, keycode, !0); + + keyup_timer.expires = jiffies + UP_TIMEOUT; + keyup_timer.data = keycode; + + add_timer (&keyup_timer); +} + +static +void input_register_keys (void) +{ + int i; + + memset (input_dev.keybit, 0, sizeof(input_dev.keybit)); + + for (i=0; i KEY_MAX) + key_map[i] = 0; + else if (key_map[i] > KEY_RESERVED) + set_bit (key_map[i], input_dev.keybit); + } +} + + +static +int av7110_ir_write_proc (struct file *file, const char *buffer, + unsigned long count, void *data) +{ + u32 ir_config; + + if (count < 4 + 256 * sizeof(u16)) + return -EINVAL; + + memcpy (&ir_config, buffer, 4); + memcpy (&key_map, buffer + 4, 256 * sizeof(u16)); + + av7110_setup_irc_config (NULL, ir_config); + + input_register_keys (); + + return count; +} + + +int __init av7110_ir_init (void) +{ + static struct proc_dir_entry *e; + + init_timer (&keyup_timer); + keyup_timer.data = 0; + + input_dev.name = "DVB on-card IR receiver"; + + /** + * enable keys + */ + set_bit (EV_KEY, input_dev.evbit); + + input_register_keys (); + + input_register_device(&input_dev); + + av7110_setup_irc_config (NULL, 0x0001); + av7110_register_irc_handler (av7110_emit_key); + + e = create_proc_entry ("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL); + + if (e) { + e->write_proc = av7110_ir_write_proc; + e->size = 4 + 256 * sizeof(u16); + } + + return 0; +} + + +void __exit av7110_ir_exit (void) +{ + remove_proc_entry ("av7110_ir", NULL); + av7110_unregister_irc_handler (av7110_emit_key); + input_unregister_device(&input_dev); +} + +//MODULE_AUTHOR("Holger Waechtler "); +//MODULE_LICENSE("GPL"); + +MODULE_PARM(av7110_ir_debug,"i"); +MODULE_PARM_DESC(av7110_ir_debug, "enable AV7110 IR receiver debug messages"); + diff -Nru a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/budget-av.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,395 @@ +/* + * budget-av.c: driver for the SAA7146 based Budget DVB cards + * with analog video in + * + * Compiled from various sources by Michael Hunold + * + * Copyright (C) 2002 Ralph Metzler + * + * Copyright (C) 1999-2002 Ralph Metzler + * & Marcus Metzler for convergence integrated media GmbH + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + +#include "budget.h" +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME budget_av +#endif + + +struct budget_av { + struct budget budget; + struct video_device vd; + int cur_input; +}; + +/**************************************************************************** + * INITIALIZATION + ****************************************************************************/ + +static inline +void ddelay(int i) +{ + current->state=TASK_INTERRUPTIBLE; + schedule_timeout((HZ*i)/100); +} + + +static +u8 i2c_readreg (struct dvb_i2c_bus *i2c, u8 id, u8 reg) +{ + u8 mm1[] = {0x00}; + u8 mm2[] = {0x00}; + struct i2c_msg msgs[2]; + + msgs[0].flags = 0; + msgs[1].flags = I2C_M_RD; + msgs[0].addr = msgs[1].addr=id/2; + mm1[0] = reg; + msgs[0].len = 1; msgs[1].len = 1; + msgs[0].buf = mm1; msgs[1].buf = mm2; + + i2c->xfer(i2c, msgs, 2); + + return mm2[0]; +} + + +static +int i2c_writereg (struct dvb_i2c_bus *i2c, u8 id, u8 reg, u8 val) +{ + u8 msg[2]={ reg, val }; + struct i2c_msg msgs; + + msgs.flags=0; + msgs.addr=id/2; + msgs.len=2; + msgs.buf=msg; + return i2c->xfer (i2c, &msgs, 1); +} + + +static const +u8 saa7113_tab[] = { + 0x01, 0x08, + 0x02, 0xc0, + 0x03, 0x33, + 0x04, 0x00, + 0x05, 0x00, + 0x06, 0xeb, + 0x07, 0xe0, + 0x08, 0x28, + 0x09, 0x00, + 0x0a, 0x80, + 0x0b, 0x47, + 0x0c, 0x40, + 0x0d, 0x00, + 0x0e, 0x01, + 0x0f, 0x44, + + 0x10, 0x08, + 0x11, 0x0c, + 0x12, 0x7b, + 0x13, 0x00, + 0x15, 0x00, 0x16, 0x00, 0x17, 0x00, + + 0x57, 0xff, + 0x40, 0x82, 0x58, 0x00, 0x59, 0x54, 0x5a, 0x07, + 0x5b, 0x83, 0x5e, 0x00, + 0xff +}; + + +static +int saa7113_init (struct budget_av *budget_av) +{ + struct budget *budget = &budget_av->budget; + const u8 *data = saa7113_tab; + + if (i2c_writereg (budget->i2c_bus, 0x4a, 0x01, 0x08) != 1) { + DEB_D(("saa7113: not found on KNC card\n")); + return -ENODEV; + } + + INFO(("saa7113: detected and initializing\n")); + + while (*data != 0xff) { + i2c_writereg(budget->i2c_bus, 0x4a, *data, *(data+1)); + data += 2; + } + + DEB_D(("saa7113: status=%02x\n", + i2c_readreg(budget->i2c_bus, 0x4a, 0x1f))); + + return 0; +} + + +static +int saa7113_setinput (struct budget_av *budget_av, int input) +{ + struct budget *budget = &budget_av->budget; + + if (input == 1) { + i2c_writereg(budget->i2c_bus, 0x4a, 0x02, 0xc7); + i2c_writereg(budget->i2c_bus, 0x4a, 0x09, 0x80); + } else if (input == 0) { + i2c_writereg(budget->i2c_bus, 0x4a, 0x02, 0xc0); + i2c_writereg(budget->i2c_bus, 0x4a, 0x09, 0x00); + } else + return -EINVAL; + + budget_av->cur_input = input; + return 0; +} + + +static +int budget_av_detach (struct saa7146_dev *dev) +{ + struct budget_av *budget_av = (struct budget_av*) dev->ext_priv; + int err; + + DEB_EE(("dev: %p\n",dev)); + + saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO); + + ddelay(20); + + saa7146_unregister_device (&budget_av->vd, dev); + + err = ttpci_budget_deinit (&budget_av->budget); + + kfree (budget_av); + + return err; +} + + +static +int budget_av_attach (struct saa7146_dev* dev, + struct saa7146_pci_extension_data *info) +{ + struct budget_av *budget_av; + struct budget_info *bi = info->ext_priv; + int err; + + DEB_EE(("dev: %p\n",dev)); + + if (bi->type != BUDGET_KNC1) { + return -ENODEV; + } + + if (!(budget_av = kmalloc(sizeof(struct budget_av), GFP_KERNEL))) + return -ENOMEM; + + memset(budget_av, 0, sizeof(struct budget_av)); + + if ((err = ttpci_budget_init(&budget_av->budget, dev, info))) { + kfree(budget_av); + return err; + } + + dev->ext_priv = budget_av; + + /* knc1 initialization */ + saa7146_write(dev, DD1_STREAM_B, 0x04000000); + saa7146_write(dev, DD1_INIT, 0x07000600); + saa7146_write(dev, MC2, MASK_09 | MASK_25 | MASK_10 | MASK_26); + + //test_knc_ci(av7110); + + saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTHI); + ddelay(50); + + if ((err = saa7113_init (budget_av))) { + budget_av_detach(dev); + return err; + } + + saa7146_vv_init(dev); + if ((err = saa7146_register_device(&budget_av->vd, dev, "knc1", + VFL_TYPE_GRABBER))) + { + ERR(("cannot register capture v4l2 device.\n")); + budget_av_detach(dev); + return err; + } + + /* beware: this modifies dev->vv ... */ + saa7146_set_hps_source_and_sync(dev, SAA7146_HPS_SOURCE_PORT_A, + SAA7146_HPS_SYNC_PORT_A); + + saa7113_setinput (budget_av, 0); + + /* what is this? since we don't support open()/close() + notifications, we simply put this into the release handler... */ +// saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO); + ddelay(20); + + /* fixme: find some sane values here... */ + saa7146_write(dev, PCI_BT_V1, 0x1c00101f); + + return 0; +} + + + +#define KNC1_INPUTS 2 +static struct v4l2_input knc1_inputs[KNC1_INPUTS] = { + { 0, "Composite", V4L2_INPUT_TYPE_TUNER, 1, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, + { 1, "S-Video", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, +}; + + +static +struct saa7146_extension_ioctls ioctls[] = { + { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE }, + { 0, 0 } +}; + + +static +int av_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) +{ + struct budget_av *budget_av = (struct budget_av*) dev->ext_priv; +/* + struct saa7146_vv *vv = dev->vv_data; +*/ + switch(cmd) { + case VIDIOC_ENUMINPUT: + { + struct v4l2_input *i = arg; + + DEB_EE(("VIDIOC_ENUMINPUT %d.\n",i->index)); + if( i->index < 0 || i->index >= KNC1_INPUTS) { + return -EINVAL; + } + memcpy(i, &knc1_inputs[i->index], sizeof(struct v4l2_input)); + return 0; + } + case VIDIOC_G_INPUT: + { + int *input = (int *)arg; + + *input = budget_av->cur_input; + + DEB_EE(("VIDIOC_G_INPUT %d.\n",*input)); + return 0; + } + case VIDIOC_S_INPUT: + { + int input = *(int *)arg; + DEB_EE(("VIDIOC_S_INPUT %d.\n", input)); + return saa7113_setinput (budget_av, input); + } + default: +/* + DEB2(printk("does not handle this ioctl.\n")); +*/ + return -ENOIOCTLCMD; + } + return 0; +} + +static +struct saa7146_standard standard[] = { + { "PAL", V4L2_STD_PAL, SAA7146_PAL_VALUES }, + { "NTSC", V4L2_STD_NTSC, SAA7146_NTSC_VALUES }, +}; + + +static +struct saa7146_ext_vv vv_data = { + .inputs = 2, + .capabilities = 0, // perhaps later: V4L2_CAP_VBI_CAPTURE, but that need tweaking with the saa7113 + .flags = 0, + .stds = &standard[0], + .num_stds = sizeof(standard)/sizeof(struct saa7146_standard), + .ioctls = &ioctls[0], + .ioctl = av_ioctl, +}; + + + +static struct saa7146_extension budget_extension; + + +MAKE_BUDGET_INFO(knc1, "KNC1 DVB-S", BUDGET_KNC1); + +static +struct pci_device_id pci_tbl [] = { + MAKE_EXTENSION_PCI(knc1, 0x1131, 0x4f56), + { + .vendor = 0, + } +}; + + + +static +struct saa7146_extension budget_extension = { + .name = "budget dvb /w video in\0", + .pci_tbl = pci_tbl, + + .module = THIS_MODULE, + .attach = budget_av_attach, + .detach = budget_av_detach, + + .ext_vv_data = &vv_data, + + .irq_mask = MASK_10, + .irq_func = ttpci_budget_irq10_handler, +}; + + +static +int __init budget_av_init(void) +{ + DEB_EE((".\n")); + + if (saa7146_register_extension(&budget_extension)) + return -ENODEV; + + return 0; +} + + +static +void __exit budget_av_exit(void) +{ + DEB_EE((".\n")); + saa7146_unregister_extension(&budget_extension); +} + +module_init(budget_av_init); +module_exit(budget_av_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, Michael Hunold, others"); +MODULE_DESCRIPTION("driver for the SAA7146 based so-called " + "budget PCI DVB w/ analog input (e.g. the KNC cards)"); + diff -Nru a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/budget-ci.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,434 @@ +/* + * budget-ci.c: driver for the SAA7146 based Budget DVB cards + * + * Compiled from various sources by Michael Hunold + * + * msp430 IR support contributed by Jack Thomasson + * partially based on the Siemens DVB driver by Ralph+Marcus Metzler + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + +#include "budget.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME budget +#endif + + +#include +#include +#include +#include +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include "input_fake.h" +#endif + + + +struct budget_ci { + struct budget budget; + struct input_dev input_dev; + struct tasklet_struct msp430_irq_tasklet; +}; + + + +#ifndef BORROWED_FROM_AV7110_H_BUT_REALLY_BELONGS_IN_SAA7146_DEFS_H + +#define DEBINOSWAP 0x000e0000 +#define GPIO_IRQHI 0x10 +#define GPIO_INPUT 0x00 + +void gpio_set(struct saa7146_dev* saa, u8 pin, u8 data) +{ + u32 value = 0; + + /* sanity check */ + if(pin > 3) + return; + + /* read old register contents */ + value = saa7146_read(saa, GPIO_CTRL ); + + value &= ~(0xff << (8*pin)); + value |= (data << (8*pin)); + + saa7146_write(saa, GPIO_CTRL, value); +} + + + +static +int wait_for_debi_done(struct saa7146_dev *saa) +{ + int start = jiffies; + + /* wait for registers to be programmed */ + while (1) { + if (saa7146_read(saa, MC2) & 2) + break; + if (jiffies - start > HZ / 20) { + printk ("DVB (%s): timed out while waiting" + " for registers getting programmed\n", + __FUNCTION__); + return -ETIMEDOUT; + } + } + + /* wait for transfer to complete */ + start = jiffies; + while (1) { + if (!(saa7146_read(saa, PSR) & SPCI_DEBI_S)) + break; + saa7146_read(saa, MC2); + if (jiffies - start > HZ / 4) { + printk ("DVB (%s): timed out while waiting" + " for transfer completion\n", + __FUNCTION__); + return -ETIMEDOUT; + } + } + + return 0; +} + + +static +u32 debiread (struct saa7146_dev *saa, u32 config, int addr, int count) +{ + u32 result = 0; + + if (count > 4 || count <= 0) + return 0; + + if (wait_for_debi_done(saa) < 0) + return 0; + + saa7146_write (saa, DEBI_COMMAND, + (count << 17) | 0x10000 | (addr & 0xffff)); + + saa7146_write(saa, DEBI_CONFIG, config); + saa7146_write(saa, MC2, (2 << 16) | 2); + + wait_for_debi_done(saa); + + result = saa7146_read(saa, DEBI_AD); + result &= (0xffffffffUL >> ((4 - count) * 8)); + + return result; +} + + + +/* DEBI during interrupt */ +static inline +u32 irdebi(struct saa7146_dev *saa, u32 config, int addr, u32 val, int count) +{ + u32 res; + res = debiread(saa, config, addr, count); + return res; +} +#endif + + + + +/* from reading the following remotes: + Zenith Universal 7 / TV Mode 807 / VCR Mode 837 + Hauppauge (from NOVA-CI-s box product) + i've taken a "middle of the road" approach and note the differences +*/ +static + u16 key_map[64] = { + /* 0x0X */ + KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, + KEY_9, + KEY_ENTER, + 0, + KEY_POWER, /* RADIO on Hauppauge */ + KEY_MUTE, + 0, + KEY_A, /* TV on Hauppauge */ + /* 0x1X */ + KEY_VOLUMEUP, KEY_VOLUMEDOWN, + 0, 0, + KEY_B, + 0, 0, 0, 0, 0, 0, 0, + KEY_UP, KEY_DOWN, + KEY_OPTION, /* RESERVED on Hauppauge */ + 0, + /* 0x2X */ + KEY_CHANNELUP, KEY_CHANNELDOWN, + KEY_PREVIOUS, /* Prev. Ch on Zenith, SOURCE on Hauppauge */ + 0, 0, 0, + KEY_CYCLEWINDOWS, /* MINIMIZE on Hauppauge */ + 0, + KEY_ENTER, /* VCR mode on Zenith */ + KEY_PAUSE, + 0, + KEY_RIGHT, KEY_LEFT, + 0, + KEY_MENU, /* FULL SCREEN on Hauppauge */ + 0, + /* 0x3X */ + 0, + KEY_PREVIOUS, /* VCR mode on Zenith */ + KEY_REWIND, + 0, + KEY_FASTFORWARD, + KEY_PLAY, KEY_STOP, + KEY_RECORD, + KEY_TUNER, /* TV/VCR on Zenith */ + 0, + KEY_C, + 0, + KEY_EXIT, + 0, + KEY_TUNER, /* VCR mode on Zenith */ + 0, +}; + + +static +void msp430_ir_debounce (unsigned long data) +{ + struct input_dev *dev = (struct input_dev *) data; + + if (dev->rep[0] == 0 || dev->rep[0] == ~0) { + input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0); + return; + } + + dev->rep[0] = 0; + dev->timer.expires = jiffies + HZ * 350 / 1000; + add_timer(&dev->timer); + input_event(dev, EV_KEY, key_map[dev->repeat_key], 2); /* REPEAT */ +} + + + +static +void msp430_ir_interrupt (unsigned long data) +{ + struct budget_ci *budget_ci = (struct budget_ci*) data; + struct saa7146_dev *saa = budget_ci->budget.dev; + struct input_dev *dev = &budget_ci->input_dev; + unsigned int code = irdebi(saa, DEBINOSWAP, 0x1234, 0, 2) >> 8; + + if (code & 0x40) { + code &= 0x3f; + + if (timer_pending(&dev->timer)) { + if (code == dev->repeat_key) { + ++dev->rep[0]; + return; + } + del_timer(&dev->timer); + input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0); + } + + if (!key_map[code]) { + printk ("DVB (%s): no key for %02x!\n", + __FUNCTION__, code); + return; + } + + /* initialize debounce and repeat */ + dev->repeat_key = code; + /* Zenith remote _always_ sends 2 sequences */ + dev->rep[0] = ~0; + /* 350 milliseconds */ + dev->timer.expires = jiffies + HZ * 350 / 1000; + /* MAKE */ + input_event(dev, EV_KEY, key_map[code], !0); + add_timer(&dev->timer); + } +} + + +static +int msp430_ir_init (struct budget_ci *budget_ci) +{ + struct saa7146_dev *saa = budget_ci->budget.dev; + int i; + + memset(&budget_ci->input_dev, 0, sizeof(struct input_dev)); + + budget_ci->input_dev.name = saa->name; + + set_bit(EV_KEY, budget_ci->input_dev.evbit); + + for (i=0; iinput_dev.keybit); + + input_register_device(&budget_ci->input_dev); + + budget_ci->input_dev.timer.function = msp430_ir_debounce; + + saa7146_write(saa, IER, saa7146_read(saa, IER) | MASK_06); + + gpio_set(saa, 3, GPIO_IRQHI); + + return 0; +} + + +static +void msp430_ir_deinit (struct budget_ci *budget_ci) +{ + struct saa7146_dev *saa = budget_ci->budget.dev; + struct input_dev *dev = &budget_ci->input_dev; + + saa7146_write(saa, IER, saa7146_read(saa, IER) & ~MASK_06); + gpio_set(saa, 3, GPIO_INPUT); + gpio_set(saa, 2, GPIO_INPUT); + + if (del_timer(&dev->timer)) + input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0); + + input_unregister_device(dev); +} + + +static +void budget_ci_irq (struct saa7146_dev *dev, u32 *isr) +{ + struct budget_ci *budget_ci = (struct budget_ci*) dev->ext_priv; + + DEB_EE(("dev: %p, budget_ci: %p\n", dev, budget_ci)); + + if (*isr & MASK_06) + tasklet_schedule (&budget_ci->msp430_irq_tasklet); + + if (*isr & MASK_10) + ttpci_budget_irq10_handler (dev, isr); +} + + + +static +int budget_ci_attach (struct saa7146_dev* dev, + struct saa7146_pci_extension_data *info) +{ + struct budget_ci *budget_ci; + int err; + + if (!(budget_ci = kmalloc (sizeof(struct budget_ci), GFP_KERNEL))) + return -ENOMEM; + + DEB_EE(("budget_ci: %p\n", budget_ci)); + + if ((err = ttpci_budget_init (&budget_ci->budget, dev, info))) { + kfree (budget_ci); + return err; + } + + dev->ext_priv = budget_ci; + + tasklet_init (&budget_ci->msp430_irq_tasklet, msp430_ir_interrupt, + (unsigned long) budget_ci); + + msp430_ir_init (budget_ci); + + return 0; +} + + + +static +int budget_ci_detach (struct saa7146_dev* dev) +{ + struct budget_ci *budget_ci = (struct budget_ci*) dev->ext_priv; + int err; + + err = ttpci_budget_deinit (&budget_ci->budget); + + tasklet_kill (&budget_ci->msp430_irq_tasklet); + + msp430_ir_deinit (budget_ci); + + kfree (budget_ci); + + return err; +} + + + +static struct saa7146_extension budget_extension; + +MAKE_BUDGET_INFO(ttbci, "TT-Budget/WinTV-NOVA-CI PCI", BUDGET_TT_HW_DISEQC); + +static +struct pci_device_id pci_tbl[] = { + MAKE_EXTENSION_PCI(ttbci, 0x13c2, 0x100c), + MAKE_EXTENSION_PCI(ttbci, 0x13c2, 0x100f), + { + .vendor = 0, + } +}; + + + +static +struct saa7146_extension budget_extension = { + .name = "budget_ci dvb\0", + .flags = 0, + .ext_vv_data = NULL, + + .module = THIS_MODULE, + .pci_tbl = &pci_tbl[0], + .attach = budget_ci_attach, + .detach = budget_ci_detach, + + .irq_mask = MASK_06 | MASK_10, + .irq_func = budget_ci_irq, +}; + + +static +int __init budget_ci_init(void) +{ + if (saa7146_register_extension(&budget_extension)) + return -ENODEV; + + return 0; +} + + +static +void __exit budget_ci_exit(void) +{ + DEB_EE((".\n")); + saa7146_unregister_extension(&budget_extension); +} + +module_init(budget_ci_init); +module_exit(budget_ci_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Michael Hunold, Jack Thomasson, others"); +MODULE_DESCRIPTION("driver for the SAA7146 based so-called " + "budget PCI DVB cards w/ CI-module produced by " + "Siemens, Technotrend, Hauppauge"); + diff -Nru a/drivers/media/dvb/ttpci/budget-core.c b/drivers/media/dvb/ttpci/budget-core.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/budget-core.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,339 @@ +#include "budget.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME budget +#endif + +int budget_debug = 0; + +/**************************************************************************** + * General helper functions + ****************************************************************************/ + +static inline void ddelay(int i) +{ + current->state=TASK_INTERRUPTIBLE; + schedule_timeout((HZ*i)/100); +} + +/**************************************************************************** + * TT budget / WinTV Nova + ****************************************************************************/ + +static +int stop_ts_capture(struct budget *budget) +{ + DEB_EE(("budget: %p\n",budget)); + + if (--budget->feeding) + return budget->feeding; + + saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off + IER_DISABLE(budget->dev, MASK_10); + return 0; +} + + +static +int start_ts_capture (struct budget *budget) +{ + struct saa7146_dev *dev=budget->dev; + + DEB_EE(("budget: %p\n",budget)); + + if (budget->feeding) + return ++budget->feeding; + + saa7146_write(dev, MC1, MASK_20); // DMA3 off + + memset(budget->grabbing, 0x00, TS_HEIGHT*TS_WIDTH); + + saa7146_write(dev, PCI_BT_V1, 0x001c0000 | + (saa7146_read(dev, PCI_BT_V1) & ~0x001f0000)); + + budget->tsf=0xff; + budget->ttbp=0; + saa7146_write(dev, DD1_INIT, 0x02000600); + saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + + saa7146_write(dev, BRS_CTRL, 0x60000000); + saa7146_write(dev, MC2, (MASK_08 | MASK_24)); + mdelay(10); + + saa7146_write(dev, BASE_ODD3, 0); + saa7146_write(dev, BASE_EVEN3, TS_WIDTH*TS_HEIGHT/2); + saa7146_write(dev, PROT_ADDR3, TS_WIDTH*TS_HEIGHT); + saa7146_write(dev, BASE_PAGE3, budget->pt.dma |ME1|0x90); + saa7146_write(dev, PITCH3, TS_WIDTH); + + saa7146_write(dev, NUM_LINE_BYTE3, ((TS_HEIGHT/2)<<16)|TS_WIDTH); + saa7146_write(dev, MC2, (MASK_04 | MASK_20)); + saa7146_write(dev, MC1, (MASK_04 | MASK_20)); // DMA3 on + + IER_ENABLE(budget->dev, MASK_10); // VPE + + return ++budget->feeding; +} + + +static +void vpeirq (unsigned long data) +{ + struct budget *budget = (struct budget*) data; + u8 *mem = (u8 *)(budget->grabbing); + u32 olddma = budget->ttbp; + u32 newdma = saa7146_read(budget->dev, PCI_VDP3); + + /* nearest lower position divisible by 188 */ + newdma -= newdma % 188; + + if (newdma >= TS_BUFLEN) + return; + + budget->ttbp = newdma; + + if(budget->feeding == 0 || newdma == olddma) + return; + + if (newdma > olddma) { /* no wraparound, dump olddma..newdma */ + if(mem[olddma] == 0x47) + dvb_dmx_swfilter_packets(&budget->demux, + mem+olddma, (newdma-olddma) / 188); + } else { /* wraparound, dump olddma..buflen and 0..newdma */ + if(mem[olddma] == 0x47) + dvb_dmx_swfilter_packets(&budget->demux, + mem+olddma, (TS_BUFLEN-olddma) / 188); + if(mem[0] == 0x47) + dvb_dmx_swfilter_packets(&budget->demux, + mem, newdma / 188); + } +} + + +/**************************************************************************** + * DVB API SECTION + ****************************************************************************/ + +static +int budget_start_feed(struct dvb_demux_feed *feed) +{ + struct dvb_demux *demux = feed->demux; + struct budget *budget = (struct budget*) demux->priv; + + DEB_EE(("budget: %p\n",budget)); + + if (!demux->dmx.frontend) + return -EINVAL; + + return start_ts_capture (budget); +} + +static +int budget_stop_feed(struct dvb_demux_feed *feed) +{ + struct dvb_demux *demux = feed->demux; + struct budget *budget = (struct budget *) demux->priv; + + DEB_EE(("budget: %p\n",budget)); + + return stop_ts_capture (budget); +} + + +static +int budget_register(struct budget *budget) +{ + int ret; + dmx_frontend_t *dvbfront=&budget->hw_frontend; + struct dvb_demux *dvbdemux=&budget->demux; + + DEB_EE(("budget: %p\n",budget)); + + memcpy(budget->demux_id, "demux0_0", 9); + budget->demux_id[5] = budget->dvb_adapter->num + '0'; + dvbdemux->priv = (void *) budget; + + dvbdemux->filternum = 256; + dvbdemux->feednum = 256; + dvbdemux->start_feed = budget_start_feed; + dvbdemux->stop_feed = budget_stop_feed; + dvbdemux->write_to_decoder = NULL; + + dvbdemux->dmx.vendor = "CIM"; + dvbdemux->dmx.model = "sw"; + dvbdemux->dmx.id = budget->demux_id; + dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | + DMX_MEMORY_BASED_FILTERING); + + dvb_dmx_init(&budget->demux); + + dvbfront->id = "hw_frontend"; + dvbfront->vendor = "VLSI"; + dvbfront->model = "DVB Frontend"; + dvbfront->source = DMX_FRONTEND_0; + + budget->dmxdev.filternum = 256; + budget->dmxdev.demux = &dvbdemux->dmx; + budget->dmxdev.capabilities = 0; + + dvb_dmxdev_init(&budget->dmxdev, budget->dvb_adapter); + + ret=dvbdemux->dmx.add_frontend (&dvbdemux->dmx, + &budget->hw_frontend); + if (ret < 0) + return ret; + + budget->mem_frontend.id = "mem_frontend"; + budget->mem_frontend.vendor = "memory"; + budget->mem_frontend.model = "sw"; + budget->mem_frontend.source = DMX_MEMORY_FE; + ret=dvbdemux->dmx.add_frontend (&dvbdemux->dmx, + &budget->mem_frontend); + if (ret<0) + return ret; + + ret=dvbdemux->dmx.connect_frontend (&dvbdemux->dmx, + &budget->hw_frontend); + if (ret < 0) + return ret; + + budget->dvb_net.card_num = budget->dvb_adapter->num; + dvb_net_init(budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); + + return 0; +} + + +static +void budget_unregister(struct budget *budget) +{ + struct dvb_demux *dvbdemux=&budget->demux; + + DEB_EE(("budget: %p\n",budget)); + + dvb_net_release(&budget->dvb_net); + + dvbdemux->dmx.close(&dvbdemux->dmx); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend); + + dvb_dmxdev_release(&budget->dmxdev); + dvb_dmx_release(&budget->demux); +} + + +static +int master_xfer (struct dvb_i2c_bus *i2c, const struct i2c_msg msgs[], int num) +{ + struct saa7146_dev *dev = i2c->data; + return saa7146_i2c_transfer(dev, msgs, num, 6); +} + + +int ttpci_budget_init (struct budget *budget, + struct saa7146_dev* dev, + struct saa7146_pci_extension_data *info) +{ + int length = TS_WIDTH*TS_HEIGHT; + int ret = 0; + struct budget_info *bi = info->ext_priv; + + memset(budget, 0, sizeof(struct budget)); + + DEB_EE(("dev: %p, budget: %p\n", dev, budget)); + + budget->card = bi; + budget->dev = (struct saa7146_dev *) dev; + + dvb_register_adapter(&budget->dvb_adapter, budget->card->name); + + /* set dd1 stream a & b */ + saa7146_write(dev, DD1_STREAM_B, 0x00000000); + saa7146_write(dev, DD1_INIT, 0x02000000); + saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + + /* the Siemens DVB needs this if you want to have the i2c chips + get recognized before the main driver is loaded */ + saa7146_write(dev, GPIO_CTRL, 0x500000); + + saa7146_i2c_adapter_prepare(dev, NULL, SAA7146_I2C_BUS_BIT_RATE_3200); + + budget->i2c_bus = dvb_register_i2c_bus (master_xfer, dev, + budget->dvb_adapter, 0); + + if (!budget->i2c_bus) { + dvb_unregister_adapter (budget->dvb_adapter); + return -ENOMEM; + } + + if( NULL == (budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci,length,&budget->pt))) { + ret = -ENOMEM; + goto err; + } + + saa7146_write(dev, PCI_BT_V1, 0x001c0000); + /* upload all */ + saa7146_write(dev, GPIO_CTRL, 0x000000); + + tasklet_init (&budget->vpe_tasklet, vpeirq, (unsigned long) budget); + + saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI); /* frontend power on */ + + if (budget_register(budget) == 0) + return 0; + +err: + if (budget->grabbing) + vfree(budget->grabbing); + + dvb_unregister_i2c_bus (master_xfer,budget->i2c_bus->adapter, + budget->i2c_bus->id); + + dvb_unregister_adapter (budget->dvb_adapter); + + return ret; +} + + +int ttpci_budget_deinit (struct budget *budget) +{ + struct saa7146_dev *dev = budget->dev; + + DEB_EE(("budget: %p\n", budget)); + + budget_unregister (budget); + + dvb_unregister_i2c_bus (master_xfer, budget->i2c_bus->adapter, + budget->i2c_bus->id); + + dvb_unregister_adapter (budget->dvb_adapter); + + tasklet_kill (&budget->vpe_tasklet); + + saa7146_pgtable_free (dev->pci, &budget->pt); + + vfree (budget->grabbing); + kfree (budget); + + return 0; +} + +void ttpci_budget_irq10_handler (struct saa7146_dev* dev, u32 *isr) +{ + struct budget *budget = (struct budget*)dev->ext_priv; + + DEB_EE(("dev: %p, budget: %p\n",dev,budget)); + + if (*isr & MASK_10) + tasklet_schedule (&budget->vpe_tasklet); +} + + +EXPORT_SYMBOL_GPL(ttpci_budget_init); +EXPORT_SYMBOL_GPL(ttpci_budget_deinit); +EXPORT_SYMBOL_GPL(ttpci_budget_irq10_handler); +EXPORT_SYMBOL_GPL(budget_debug); + +MODULE_PARM(budget_debug,"i"); +MODULE_LICENSE("GPL"); + + diff -Nru a/drivers/media/dvb/ttpci/budget-patch.c b/drivers/media/dvb/ttpci/budget-patch.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/budget-patch.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,335 @@ +/* + * budget-patch.c: driver for Budget Patch, + * hardware modification of DVB-S cards enabling full TS + * + * Written by Emard + * + * Original idea by Roberto Deza + * + * Special thanks to Holger Waechtler, Michael Hunold, Marian Durkovic + * and Metzlerbros + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + +#include "budget.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME budget_patch +#endif + +#define budget_patch budget + +static struct saa7146_extension budget_extension; + +MAKE_BUDGET_INFO(fs_1_3,"Siemens/Technotrend/Hauppauge PCI rev1.3+Budget_Patch", BUDGET_PATCH); + +static +struct pci_device_id pci_tbl[] = { + MAKE_EXTENSION_PCI(fs_1_3,0x13c2, 0x0000), + { + .vendor = 0, + } +}; + + +#define COMMAND (DPRAM_BASE + 0x0FC) +#define DPRAM_BASE 0x4000 +#define DEBINOSWAP 0x000e0000 + + +typedef enum { + AudioDAC, + CabADAC, + ON22K, + OFF22K, + MainSwitch, + ADSwitch, + SendDiSEqC, + SetRegister +} AUDCOM; + + +typedef enum { + COMTYPE_NOCOM, + COMTYPE_PIDFILTER, + COMTYPE_MPEGDECODER, + COMTYPE_OSD, + COMTYPE_BMP, + COMTYPE_ENCODER, + COMTYPE_AUDIODAC, + COMTYPE_REQUEST, + COMTYPE_SYSTEM, + COMTYPE_REC_PLAY, + COMTYPE_COMMON_IF, + COMTYPE_PID_FILTER, + COMTYPE_PES, + COMTYPE_TS, + COMTYPE_VIDEO, + COMTYPE_AUDIO, + COMTYPE_CI_LL, +} COMTYPE; + + +static +int wdebi(struct budget_patch *budget, u32 config, int addr, u32 val, int count) +{ + struct saa7146_dev *dev=budget->dev; + + DEB_EE(("budget: %p\n", budget)); + + if (count <= 0 || count > 4) + return -1; + + saa7146_write(dev, DEBI_CONFIG, config); + + saa7146_write(dev, DEBI_AD, val ); + saa7146_write(dev, DEBI_COMMAND, (count << 17) | (addr & 0xffff)); + saa7146_write(dev, MC2, (2 << 16) | 2); + mdelay(5); + + return 0; +} + + +static +int SOutCommand(struct budget_patch *budget, u16* buf, int length) +{ + int i; + + DEB_EE(("budget: %p\n", budget)); + + for (i = 2; i < length; i++) + wdebi(budget, DEBINOSWAP, COMMAND + 2*i, (u32) buf[i], 2); + + if (length) + wdebi(budget, DEBINOSWAP, COMMAND + 2, (u32) buf[1], 2); + else + wdebi(budget, DEBINOSWAP, COMMAND + 2, 0, 2); + + wdebi(budget, DEBINOSWAP, COMMAND, (u32) buf[0], 2); + return 0; +} + + +static +void av7110_set22k(struct budget_patch *budget, int state) +{ + u16 buf[2] = {( COMTYPE_AUDIODAC << 8) | (state ? ON22K : OFF22K), 0}; + + DEB_EE(("budget: %p\n", budget)); + SOutCommand(budget, buf, 2); +} + + +static int +av7110_send_diseqc_msg(struct budget_patch *budget, int len, u8 *msg, int burst) +{ + int i; + u16 buf[18] = { ((COMTYPE_AUDIODAC << 8) | SendDiSEqC), + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + DEB_EE(("budget: %p\n", budget)); + + if (len>10) + len=10; + + buf[1] = len+2; + buf[2] = len; + + if (burst != -1) + buf[3]=burst ? 0x01 : 0x00; + else + buf[3]=0xffff; + + for (i=0; ibefore_after_data; + + DEB_EE(("budget: %p\n", budget)); + + switch (cmd) { + case FE_SET_TONE: + switch ((fe_sec_tone_mode_t) arg) { + case SEC_TONE_ON: + av7110_set22k (budget, 1); + break; + case SEC_TONE_OFF: + av7110_set22k (budget, 0); + break; + default: + return -EINVAL; + } + break; + + case FE_DISEQC_SEND_MASTER_CMD: + { + struct dvb_diseqc_master_cmd *cmd = arg; + + av7110_send_diseqc_msg (budget, cmd->msg_len, cmd->msg, 0); + break; + } + + case FE_DISEQC_SEND_BURST: + av7110_send_diseqc_msg (budget, 0, NULL, (int) arg); + break; + + default: + return -EOPNOTSUPP; + } + + return 0; +} + + +static +int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_data *info) +{ + struct budget_patch *budget; + int err; + int cnt; + + if (!(budget = kmalloc (sizeof(struct budget_patch), GFP_KERNEL))) + return -ENOMEM; + + DEB_EE(("budget: %p\n",budget)); + + if ((err = ttpci_budget_init (budget, dev, info))) { + kfree (budget); + return err; + } + +/* +** This code will setup the SAA7146_RPS1 to generate a square +** wave on GPIO3, changing when a field (TS_HEIGHT/2 "lines" of +** TS_WIDTH packets) has been acquired on SAA7146_D1B video port; +** then, this GPIO3 output which is connected to the D1B_VSYNC +** input, will trigger the acquisition of the alternate field +** and so on. +** Currently, the TT_budget / WinTV_Nova cards have two ICs +** (74HCT4040, LVC74) for the generation of this VSYNC signal, +** which seems that can be done perfectly without this :-)). +*/ + cnt = 0; // Setup RPS1 "program" (p35) + // Wait reset Source Line Counter Threshold (p36) + dev->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | RPS_INV | EVT_HS); + // Wait Source Line Counter Threshold (p36) + dev->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | EVT_HS); + // Set GPIO3=1 (p42) + dev->rps1[cnt++]=cpu_to_le32(CMD_WR_REG_MASK | (GPIO_CTRL>>2)); + dev->rps1[cnt++]=cpu_to_le32(GPIO3_MSK); + dev->rps1[cnt++]=cpu_to_le32(SAA7146_GPIO_OUTHI<<24); + // Wait reset Source Line Counter Threshold (p36) + dev->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | RPS_INV | EVT_HS); + // Wait Source Line Counter Threshold + dev->rps1[cnt++]=cpu_to_le32(CMD_PAUSE | EVT_HS); + // Set GPIO3=0 (p42) + dev->rps1[cnt++]=cpu_to_le32(CMD_WR_REG_MASK | (GPIO_CTRL>>2)); + dev->rps1[cnt++]=cpu_to_le32(GPIO3_MSK); + dev->rps1[cnt++]=cpu_to_le32(SAA7146_GPIO_OUTLO<<24); + // Jump to begin of RPS program (p37) + dev->rps1[cnt++]=cpu_to_le32(CMD_JUMP); + dev->rps1[cnt++]=cpu_to_le32(virt_to_bus(&dev->rps1[0])); + + // Fix VSYNC level + saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); + // Set RPS1 Address register to point to RPS code (r108 p42) + saa7146_write(dev, RPS_ADDR1, virt_to_bus(&dev->rps1[0])); + // Set Source Line Counter Threshold, using BRS (rCC p43) + saa7146_write(dev, RPS_THRESH1, ((TS_HEIGHT/2) | MASK_12)); + // Enable RPS1 (rFC p33) + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); + + dvb_add_frontend_ioctls (budget->dvb_adapter, + budget_patch_diseqc_ioctl, NULL, budget); + + dev->ext_priv = budget; + + return 0; +} + + +static +int budget_patch_detach (struct saa7146_dev* dev) +{ + struct budget_patch *budget = (struct budget_patch*) dev->ext_priv; + int err; + + dvb_remove_frontend_ioctls (budget->dvb_adapter, + budget_patch_diseqc_ioctl, NULL); + + err = ttpci_budget_deinit (budget); + + kfree (budget); + + return err; +} + + +static +int __init budget_patch_init(void) +{ + if (saa7146_register_extension(&budget_extension)) + return -ENODEV; + + return 0; +} + + +static +void __exit budget_patch_exit(void) +{ + DEB_EE((".\n")); + saa7146_unregister_extension(&budget_extension); +} + + +static +struct saa7146_extension budget_extension = { + .name = "budget_patch dvb\0", + .flags = 0, + .ext_vv_data = NULL, + + .module = THIS_MODULE, + .pci_tbl = pci_tbl, + .attach = budget_patch_attach, + .detach = budget_patch_detach, + + .irq_mask = MASK_10, + .irq_func = ttpci_budget_irq10_handler, +}; + + +module_init(budget_patch_init); +module_exit(budget_patch_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Emard, Roberto Deza, Holger Waechtler, Michael Hunold, others"); +MODULE_DESCRIPTION("Driver for full TS modified DVB-S SAA7146+AV7110 " + "based so-called Budget Patch cards"); + diff -Nru a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/budget.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,267 @@ +/* + * budget.c: driver for the SAA7146 based Budget DVB cards + * + * Compiled from various sources by Michael Hunold + * + * Copyright (C) 2002 Ralph Metzler + * + * Copyright (C) 1999-2002 Ralph Metzler + * & Marcus Metzler for convergence integrated media GmbH + * + * 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. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + * + * + * the project's page is at http://www.linuxtv.org/dvb/ + */ + +#include "budget.h" +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME budget +#endif + + + +static inline void ddelay(int i) +{ + current->state=TASK_INTERRUPTIBLE; + schedule_timeout((HZ*i)/100); +} + + +static +void Set22K (struct budget *budget, int state) +{ + struct saa7146_dev *dev=budget->dev; + DEB_EE(("budget: %p\n",budget)); + saa7146_setgpio(dev, 3, (state ? SAA7146_GPIO_OUTHI : SAA7146_GPIO_OUTLO)); +} + + +/* Diseqc functions only for TT Budget card */ +/* taken from the Skyvision DVB driver by + Ralph Metzler */ + +static +void DiseqcSendBit (struct budget *budget, int data) +{ + struct saa7146_dev *dev=budget->dev; + DEB_EE(("budget: %p\n",budget)); + + saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTHI); + udelay(data ? 500 : 1000); + saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); + udelay(data ? 1000 : 500); +} + + +static +void DiseqcSendByte (struct budget *budget, int data) +{ + int i, par=1, d; + + DEB_EE(("budget: %p\n",budget)); + + for (i=7; i>=0; i--) { + d = (data>>i)&1; + par ^= d; + DiseqcSendBit(budget, d); + } + + DiseqcSendBit(budget, par); +} + + +static +int SendDiSEqCMsg (struct budget *budget, int len, u8 *msg, int burst) +{ + struct saa7146_dev *dev=budget->dev; + int i; + + DEB_EE(("budget: %p\n",budget)); + + saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); + mdelay(16); + + for (i=0; ibefore_after_data; + + DEB_EE(("budget: %p\n",budget)); + + switch (cmd) { + case FE_SET_TONE: + switch ((fe_sec_tone_mode_t) arg) { + case SEC_TONE_ON: + Set22K (budget, 1); + break; + case SEC_TONE_OFF: + Set22K (budget, 0); + break; + default: + return -EINVAL; + }; + break; + + case FE_DISEQC_SEND_MASTER_CMD: + { + struct dvb_diseqc_master_cmd *cmd = arg; + + SendDiSEqCMsg (budget, cmd->msg_len, cmd->msg, 0); + break; + } + + case FE_DISEQC_SEND_BURST: + SendDiSEqCMsg (budget, 0, NULL, (int) arg); + break; + + default: + return -EOPNOTSUPP; + }; + + return 0; +} + + +static +int budget_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_data *info) +{ + struct budget *budget; + int err; + + if (!(budget = kmalloc (sizeof(struct budget), GFP_KERNEL))) + return -ENOMEM; + + DEB_EE(("budget: %p\n",budget)); + + if ((err = ttpci_budget_init (budget, dev, info))) { + kfree (budget); + return err; + } + + dvb_add_frontend_ioctls (budget->dvb_adapter, + budget_diseqc_ioctl, NULL, budget); + + dev->ext_priv = budget; + + return 0; +} + + +static +int budget_detach (struct saa7146_dev* dev) +{ + struct budget *budget = (struct budget*) dev->ext_priv; + int err; + + dvb_remove_frontend_ioctls (budget->dvb_adapter, + budget_diseqc_ioctl, NULL); + + err = ttpci_budget_deinit (budget); + + kfree (budget); + + return err; +} + + + +static struct saa7146_extension budget_extension; + +MAKE_BUDGET_INFO(ttbs, "TT-Budget/WinTV-NOVA-S PCI", BUDGET_TT); +MAKE_BUDGET_INFO(ttbc, "TT-Budget/WinTV-NOVA-C PCI", BUDGET_TT); +MAKE_BUDGET_INFO(ttbt, "TT-Budget/WinTV-NOVA-T PCI", BUDGET_TT); +MAKE_BUDGET_INFO(satel, "SATELCO Multimedia PCI", BUDGET_TT_HW_DISEQC); +/* Uncomment for Budget Patch */ +/*MAKE_BUDGET_INFO(fs_1_3,"Siemens/Technotrend/Hauppauge PCI rev1.3+Budget_Patch", BUDGET_PATCH);*/ + +static +struct pci_device_id pci_tbl[] = { + /* Uncomment for Budget Patch */ + /*MAKE_EXTENSION_PCI(fs_1_3,0x13c2, 0x0000),*/ + MAKE_EXTENSION_PCI(ttbs, 0x13c2, 0x1003), + MAKE_EXTENSION_PCI(ttbc, 0x13c2, 0x1004), + MAKE_EXTENSION_PCI(ttbt, 0x13c2, 0x1005), + MAKE_EXTENSION_PCI(satel, 0x13c2, 0x1013), + { + .vendor = 0, + } +}; + + + +static +struct saa7146_extension budget_extension = { + .name = "budget dvb\0", + .flags = 0, + .ext_vv_data = NULL, + + .module = THIS_MODULE, + .pci_tbl = pci_tbl, + .attach = budget_attach, + .detach = budget_detach, + + .irq_mask = MASK_10, + .irq_func = ttpci_budget_irq10_handler, +}; + + +static +int __init budget_init(void) +{ + if (saa7146_register_extension(&budget_extension)) + return -ENODEV; + + return 0; +} + + +static +void __exit budget_exit(void) +{ + DEB_EE((".\n")); + saa7146_unregister_extension(&budget_extension); +} + +module_init(budget_init); +module_exit(budget_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, Michael Hunold, others"); +MODULE_DESCRIPTION("driver for the SAA7146 based so-called " + "budget PCI DVB cards by Siemens, Technotrend, Hauppauge"); + diff -Nru a/drivers/media/dvb/ttpci/budget.h b/drivers/media/dvb/ttpci/budget.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/dvb/ttpci/budget.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,86 @@ +#ifndef __BUDGET_DVB__ +#define __BUDGET_DVB__ + +#include "dvb_i2c.h" +#include "dvb_frontend.h" +#include "dvbdev.h" +#include "demux.h" +#include "dvb_demux.h" +#include "dmxdev.h" +#include "dvb_filter.h" +#include "dvb_net.h" + +#include + +extern int budget_debug; + +struct budget_info { + char *name; + int type; +}; + +/* place to store all the necessary device information */ +struct budget { + + /* devices */ + struct dvb_device dvb_dev; + dvb_net_t dvb_net; + + struct saa7146_dev *dev; + + struct dvb_i2c_bus *i2c_bus; + struct budget_info *card; + + unsigned char *grabbing; + struct saa7146_pgtable pt; + + struct tasklet_struct fidb_tasklet; + struct tasklet_struct vpe_tasklet; + + dmxdev_t dmxdev; + struct dvb_demux demux; + char demux_id[16]; + + dmx_frontend_t hw_frontend; + dmx_frontend_t mem_frontend; + + int fe_synced; + struct semaphore pid_mutex; + + u8 tsf; + u32 ttbp; + int feeding; + + struct dvb_adapter *dvb_adapter; + void *priv; +}; + + + +#define MAKE_BUDGET_INFO(x_var,x_name,x_type) \ +static struct budget_info x_var ## _info = { \ + .name=x_name, \ + .type=x_type }; \ +static struct saa7146_pci_extension_data x_var = { \ + .ext_priv = &x_var ## _info, \ + .ext = &budget_extension }; + +#define TS_WIDTH (4*188) +#define TS_HEIGHT (1024/4) +#define TS_BUFLEN (TS_WIDTH*TS_HEIGHT) +#define TS_MAX_PACKETS (TS_BUFLEN/TS_SIZE) + +#define BUDGET_TT 0 +#define BUDGET_TT_HW_DISEQC 1 +#define BUDGET_KNC1 2 +#define BUDGET_PATCH 3 + + +extern int ttpci_budget_init (struct budget *budget, + struct saa7146_dev* dev, + struct saa7146_pci_extension_data *info); +extern int ttpci_budget_deinit (struct budget *budget); +extern void ttpci_budget_irq10_handler (struct saa7146_dev* dev, u32 *isr); + +#endif + diff -Nru a/drivers/media/radio/radio-cadet.c b/drivers/media/radio/radio-cadet.c --- a/drivers/media/radio/radio-cadet.c Sat Apr 12 14:44:07 2003 +++ b/drivers/media/radio/radio-cadet.c Sat Apr 12 14:44:07 2003 @@ -516,7 +516,7 @@ {.id = ""} }; -MODULE_DEVICE_TABLE(pnp, id_table); +MODULE_DEVICE_TABLE(pnp, cadet_pnp_devices); static int cadet_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id) { diff -Nru a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig --- a/drivers/media/video/Kconfig Sat Apr 12 14:44:10 2003 +++ b/drivers/media/video/Kconfig Sat Apr 12 14:44:10 2003 @@ -230,5 +230,32 @@ whenever you want). If you want to compile it as a module, say M here and read . +config VIDEO_MXB + tristate "Siemens-Nixdorf 'Multimedia eXtension Board'" + depends on VIDEO_DEV && PCI && I2C + ---help--- + This is a video4linux driver for the 'Multimedia eXtension Board' + TV card by Siemens-Nixdorf. + + This driver is available as a module called mxb ( = code + which can be inserted in and removed from the running kernel + whenever you want). If you want to compile it as a module, say M + here and read . + +config VIDEO_DPC + tristate "Philips-Semiconductors 'dpc7146 demonstration board'" + depends on VIDEO_DEV && PCI && I2C + ---help--- + This is a video4linux driver for the 'dpc7146 demonstration + board' by Philips-Semiconductors. It's the reference design + for SAA7146 bases boards, so if you have some unsupported + saa7146 based, analog video card, chances are good that it + will work with this skeleton driver. + + This driver is available as a module called dpc7146 ( = code + which can be inserted in and removed from the running kernel + whenever you want). If you want to compile it as a module, say M + here and read . + endmenu diff -Nru a/drivers/media/video/Makefile b/drivers/media/video/Makefile --- a/drivers/media/video/Makefile Sat Apr 12 14:44:07 2003 +++ b/drivers/media/video/Makefile Sat Apr 12 14:44:07 2003 @@ -9,7 +9,7 @@ obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-common.o v4l1-compat.o obj-$(CONFIG_VIDEO_BT848) += bttv.o msp3400.o tvaudio.o \ - tda7432.o tda9875.o tuner.o video-buf.o tda9887.o + tda7432.o tda9875.o obj-$(CONFIG_SOUND_TVMIXER) += tvmixer.o obj-$(CONFIG_VIDEO_ZR36120) += zoran.o @@ -29,5 +29,11 @@ obj-$(CONFIG_VIDEO_CPIA_PP) += cpia_pp.o obj-$(CONFIG_VIDEO_CPIA_USB) += cpia_usb.o obj-$(CONFIG_VIDEO_MEYE) += meye.o -obj-$(CONFIG_VIDEO_SAA7134) += saa7134/ tuner.o tda9887.o video-buf.o +obj-$(CONFIG_VIDEO_SAA7134) += saa7134/ +obj-$(CONFIG_VIDEO_MXB) += saa7111.o tuner.o tda9840.o tea6415c.o tea6420.o mxb.o +obj-$(CONFIG_VIDEO_DPC) += saa7111.o dpc7146.o obj-$(CONFIG_TUNER_3036) += tuner-3036.o + +obj-$(CONFIG_VIDEO_TUNER) += tuner.o tda9887.o +obj-$(CONFIG_VIDEO_BUF) += video-buf.o + diff -Nru a/drivers/media/video/dpc7146.c b/drivers/media/video/dpc7146.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/dpc7146.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,391 @@ +/* + dpc7146.c - v4l2 driver for the dpc7146 demonstration board + + Copyright (C) 2000-2003 Michael Hunold + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define DEBUG_VARIABLE debug + +#include +#include /* for saa7111a */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME dpc7146 +#endif + +#define I2C_SAA7111A 0x24 + +/* All unused bytes are reserverd. */ +#define SAA711X_CHIP_VERSION 0x00 +#define SAA711X_ANALOG_INPUT_CONTROL_1 0x02 +#define SAA711X_ANALOG_INPUT_CONTROL_2 0x03 +#define SAA711X_ANALOG_INPUT_CONTROL_3 0x04 +#define SAA711X_ANALOG_INPUT_CONTROL_4 0x05 +#define SAA711X_HORIZONTAL_SYNC_START 0x06 +#define SAA711X_HORIZONTAL_SYNC_STOP 0x07 +#define SAA711X_SYNC_CONTROL 0x08 +#define SAA711X_LUMINANCE_CONTROL 0x09 +#define SAA711X_LUMINANCE_BRIGHTNESS 0x0A +#define SAA711X_LUMINANCE_CONTRAST 0x0B +#define SAA711X_CHROMA_SATURATION 0x0C +#define SAA711X_CHROMA_HUE_CONTROL 0x0D +#define SAA711X_CHROMA_CONTROL 0x0E +#define SAA711X_FORMAT_DELAY_CONTROL 0x10 +#define SAA711X_OUTPUT_CONTROL_1 0x11 +#define SAA711X_OUTPUT_CONTROL_2 0x12 +#define SAA711X_OUTPUT_CONTROL_3 0x13 +#define SAA711X_V_GATE_1_START 0x15 +#define SAA711X_V_GATE_1_STOP 0x16 +#define SAA711X_V_GATE_1_MSB 0x17 +#define SAA711X_TEXT_SLICER_STATUS 0x1A +#define SAA711X_DECODED_BYTES_OF_TS_1 0x1B +#define SAA711X_DECODED_BYTES_OF_TS_2 0x1C +#define SAA711X_STATUS_BYTE 0x1F + +#define DPC_BOARD_CAN_DO_VBI(dev) (dev->revision != 0) + +static int debug = 0; +MODULE_PARM(debug,"i"); +MODULE_PARM_DESC(debug, "debug verbosity"); + +/* global variables */ +int dpc_num = 0; + +#define DPC_INPUTS 2 +static struct v4l2_input dpc_inputs[DPC_INPUTS] = { + { 0, "Port A", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, + { 1, "Port B", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, +}; + +#define DPC_AUDIOS 0 + +static struct saa7146_extension_ioctls ioctls[] = { + { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_S_STD, SAA7146_AFTER }, + { 0, 0 } +}; + +struct dpc +{ + struct video_device video_dev; + struct video_device vbi_dev; + + struct i2c_adapter i2c_adapter; + struct i2c_client *saa7111a; + + int cur_input; /* current input */ +}; + +/* fixme: add vbi stuff here */ +static int dpc_probe(struct saa7146_dev* dev) +{ + struct dpc* dpc = 0; + int i = 0; + + dpc = (struct dpc*)kmalloc(sizeof(struct dpc), GFP_KERNEL); + if( NULL == dpc ) { + printk("dpc_v4l2.o: dpc_probe: not enough kernel memory.\n"); + return -ENOMEM; + } + memset(dpc, 0x0, sizeof(struct dpc)); + + /* FIXME: enable i2c-port pins, video-port-pins + video port pins should be enabled here ?! */ + saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); + + saa7146_i2c_adapter_prepare(dev, &dpc->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480); + if(i2c_add_adapter(&dpc->i2c_adapter) < 0) { + DEB_S(("cannot register i2c-device. skipping.\n")); + kfree(dpc); + return -EFAULT; + } + + /* loop through all i2c-devices on the bus and look who is there */ + for(i = 0; i < I2C_CLIENT_MAX; i++) { + if( NULL == dpc->i2c_adapter.clients[i] ) { + continue; + } + if( I2C_SAA7111A == dpc->i2c_adapter.clients[i]->addr ) + dpc->saa7111a = dpc->i2c_adapter.clients[i]; + } + + /* check if all devices are present */ + if( 0 == dpc->saa7111a ) { + DEB_D(("dpc_v4l2.o: dpc_attach failed for this device.\n")); + kfree(dpc); + return -ENODEV; + } + + /* all devices are present, probe was successful */ + DEB_D(("dpc_v4l2.o: dpc_probe succeeded for this device.\n")); + + /* we store the pointer in our private data field */ + (struct dpc*)dev->ext_priv = dpc; + + return 0; +} + +/* bring hardware to a sane state. this has to be done, just in case someone + wants to capture from this device before it has been properly initialized. + the capture engine would badly fail, because no valid signal arrives on the + saa7146, thus leading to timeouts and stuff. */ +static int dpc_init_done(struct saa7146_dev* dev) +{ + struct dpc* dpc = (struct dpc*)dev->ext_priv; + + DEB_D(("dpc_v4l2.o: dpc_init_done called.\n")); + + /* initialize the helper ics to useful values */ + i2c_smbus_write_byte_data(dpc->saa7111a, 0x00, 0x11); + + i2c_smbus_write_byte_data(dpc->saa7111a, 0x02, 0xc0); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x03, 0x30); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x04, 0x00); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x05, 0x00); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x06, 0xde); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x07, 0xad); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x08, 0xa8); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x09, 0x00); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x0a, 0x80); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x0b, 0x47); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x0c, 0x40); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x0d, 0x00); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x0e, 0x03); + + i2c_smbus_write_byte_data(dpc->saa7111a, 0x10, 0xd0); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x11, 0x1c); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x12, 0xc1); + i2c_smbus_write_byte_data(dpc->saa7111a, 0x13, 0x30); + + i2c_smbus_write_byte_data(dpc->saa7111a, 0x1f, 0x81); + + return 0; +} + +/* this function only gets called when the probing was successful */ +static int dpc_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *info) +{ + struct dpc* dpc = (struct dpc*)dev->ext_priv; + + DEB_D(("dpc_v4l2.o: dpc_attach called.\n")); + + /* checking for i2c-devices can be omitted here, because we + already did this in "dpc_vl42_probe" */ + + saa7146_vv_init(dev); + if( 0 != saa7146_register_device(&dpc->video_dev, dev, "dpc", VFL_TYPE_GRABBER)) { + ERR(("cannot register capture v4l2 device. skipping.\n")); + return -1; + } + + /* initialization stuff (vbi) (only for revision > 0 and for extensions which want it)*/ + if( 0 != DPC_BOARD_CAN_DO_VBI(dev)) { + if( 0 != saa7146_register_device(&dpc->vbi_dev, dev, "dpc", VFL_TYPE_VBI)) { + ERR(("cannot register vbi v4l2 device. skipping.\n")); + } + } + + i2c_use_client(dpc->saa7111a); + + printk("dpc: found 'dpc7146 demonstration board'-%d.\n",dpc_num); + dpc_num++; + + /* the rest */ + dpc->cur_input = 0; + dpc_init_done(dev); + + return 0; +} + +static int dpc_detach(struct saa7146_dev* dev) +{ + struct dpc* dpc = (struct dpc*)dev->ext_priv; + + DEB_EE(("dev:%p\n",dev)); + + i2c_release_client(dpc->saa7111a); + + saa7146_unregister_device(&dpc->video_dev,dev); + if( 0 != DPC_BOARD_CAN_DO_VBI(dev)) { + saa7146_unregister_device(&dpc->vbi_dev,dev); + } + saa7146_vv_release(dev); + + dpc_num--; + + i2c_del_adapter(&dpc->i2c_adapter); + kfree(dpc); + return 0; +} + +#ifdef axa +int dpc_vbi_bypass(struct saa7146_dev* dev) +{ + struct dpc* dpc = (struct dpc*)dev->ext_priv; + + int i = 1; + + /* switch bypass in saa7111a */ + if ( 0 != dpc->saa7111a->driver->command(dpc->saa7111a,SAA711X_VBI_BYPASS, &i)) { + printk("dpc_v4l2.o: VBI_BYPASS: could not address saa7111a.\n"); + return -1; + } + + return 0; +} +#endif + +static int dpc_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) +{ + struct dpc* dpc = (struct dpc*)dev->ext_priv; +/* + struct saa7146_vv *vv = dev->vv_data; +*/ + switch(cmd) + { + case VIDIOC_ENUMINPUT: + { + struct v4l2_input *i = arg; + DEB_EE(("VIDIOC_ENUMINPUT %d.\n",i->index)); + + if( i->index < 0 || i->index >= DPC_INPUTS) { + return -EINVAL; + } + + memcpy(i, &dpc_inputs[i->index], sizeof(struct v4l2_input)); + + DEB_D(("dpc_v4l2.o: v4l2_ioctl: VIDIOC_ENUMINPUT %d.\n",i->index)); + return 0; + } + case VIDIOC_G_INPUT: + { + int *input = (int *)arg; + *input = dpc->cur_input; + + DEB_D(("dpc_v4l2.o: VIDIOC_G_INPUT: %d\n",*input)); + return 0; + } + case VIDIOC_S_INPUT: + { + int input = *(int *)arg; + + if (input < 0 || input >= DPC_INPUTS) { + return -EINVAL; + } + + dpc->cur_input = input; + + /* fixme: switch input here, switch audio, too! */ +// saa7146_set_hps_source_and_sync(dev, input_port_selection[input].hps_source, input_port_selection[input].hps_sync); + printk("dpc_v4l2.o: VIDIOC_S_INPUT: fixme switch input.\n"); + + return 0; + } + default: +/* + DEB_D(("dpc_v4l2.o: v4l2_ioctl does not handle this ioctl.\n")); +*/ + return -ENOIOCTLCMD; + } + return 0; +} + +static int std_callback(struct saa7146_dev* dev, struct saa7146_standard *std) +{ + return 0; +} + +static struct saa7146_standard standard[] = { + { "PAL-BG", V4L2_STD_PAL_BG, SAA7146_PAL_VALUES }, + { "PAL-I", V4L2_STD_PAL_I, SAA7146_PAL_VALUES }, + { "NTSC", V4L2_STD_NTSC, SAA7146_NTSC_VALUES }, + { "SECAM", V4L2_STD_SECAM, SAA7146_SECAM_VALUES }, +}; + +static +struct saa7146_extension extension; + +static +struct saa7146_pci_extension_data dpc = { + .ext_priv = "Multimedia eXtension Board", + .ext = &extension, +}; + +static +struct pci_device_id pci_tbl[] = { + { + .vendor = PCI_VENDOR_ID_PHILIPS, + .device = PCI_DEVICE_ID_PHILIPS_SAA7146, + .subvendor = 0x0000, + .subdevice = 0x0000, + .driver_data = (unsigned long)&dpc, + }, { + .vendor = 0, + } +}; + +static +struct saa7146_ext_vv vv_data = { + .inputs = DPC_INPUTS, + .capabilities = V4L2_CAP_VBI_CAPTURE, + .stds = &standard[0], + .num_stds = sizeof(standard)/sizeof(struct saa7146_standard), + .std_callback = &std_callback, + .ioctls = &ioctls[0], + .ioctl = dpc_ioctl, +}; + +static +struct saa7146_extension extension = { + .name = "dpc7146 demonstration board", + .flags = SAA7146_USE_I2C_IRQ, + + .pci_tbl = &pci_tbl[0], + .module = THIS_MODULE, + .ext_vv_data = &vv_data, + + .probe = dpc_probe, + .attach = dpc_attach, + .detach = dpc_detach, + + .irq_mask = 0, + .irq_func = NULL, +}; + +int __init dpc_init_module(void) +{ + if( 0 != saa7146_register_extension(&extension)) { + DEB_S(("failed to register extension.\n")); + return -ENODEV; + } + + return 0; +} + +void __exit dpc_cleanup_module(void) +{ + saa7146_unregister_extension(&extension); +} + +module_init(dpc_init_module); +module_exit(dpc_cleanup_module); + +MODULE_DESCRIPTION("video4linux-2 driver for the 'dpc7146 demonstration board'"); +MODULE_AUTHOR("Michael Hunold "); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/video/mxb.c b/drivers/media/video/mxb.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/mxb.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,1075 @@ +/* + mxb.c - v4l2 driver for the Multimedia eXtension Board + + Copyright (C) 1998-2003 Michael Hunold + + Visit http://www.mihu.de/linux/saa7146/mxb/ + for further details about this card. + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define DEBUG_VARIABLE debug + +#include +#include /* for saa7111a */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME mxb +#endif + +#include "mxb.h" +#include "tea6415c.h" +#include "tea6420.h" +#include "tda9840.h" +#include + +#define I2C_SAA7111A 0x24 + +/* All unused bytes are reserverd. */ +#define SAA711X_CHIP_VERSION 0x00 +#define SAA711X_ANALOG_INPUT_CONTROL_1 0x02 +#define SAA711X_ANALOG_INPUT_CONTROL_2 0x03 +#define SAA711X_ANALOG_INPUT_CONTROL_3 0x04 +#define SAA711X_ANALOG_INPUT_CONTROL_4 0x05 +#define SAA711X_HORIZONTAL_SYNC_START 0x06 +#define SAA711X_HORIZONTAL_SYNC_STOP 0x07 +#define SAA711X_SYNC_CONTROL 0x08 +#define SAA711X_LUMINANCE_CONTROL 0x09 +#define SAA711X_LUMINANCE_BRIGHTNESS 0x0A +#define SAA711X_LUMINANCE_CONTRAST 0x0B +#define SAA711X_CHROMA_SATURATION 0x0C +#define SAA711X_CHROMA_HUE_CONTROL 0x0D +#define SAA711X_CHROMA_CONTROL 0x0E +#define SAA711X_FORMAT_DELAY_CONTROL 0x10 +#define SAA711X_OUTPUT_CONTROL_1 0x11 +#define SAA711X_OUTPUT_CONTROL_2 0x12 +#define SAA711X_OUTPUT_CONTROL_3 0x13 +#define SAA711X_V_GATE_1_START 0x15 +#define SAA711X_V_GATE_1_STOP 0x16 +#define SAA711X_V_GATE_1_MSB 0x17 +#define SAA711X_TEXT_SLICER_STATUS 0x1A +#define SAA711X_DECODED_BYTES_OF_TS_1 0x1B +#define SAA711X_DECODED_BYTES_OF_TS_2 0x1C +#define SAA711X_STATUS_BYTE 0x1F + +#define MXB_BOARD_CAN_DO_VBI(dev) (dev->revision != 0) + +/* global variable */ +static int mxb_num = 0; + +/* initial frequence the tuner will be tuned to. + in verden (lower saxony, germany) 4148 is a + channel called "phoenix" */ +static int freq = 4148; +MODULE_PARM(freq,"i"); +MODULE_PARM_DESC(freq, "initial frequency the tuner will be tuned to while setup"); + +static int debug = 0; +MODULE_PARM(debug,"i"); +MODULE_PARM_DESC(debug, "debug verbosity"); + +#define MXB_INPUTS 4 +enum { TUNER, AUX1, AUX3, AUX3_YC }; + +static struct v4l2_input mxb_inputs[MXB_INPUTS] = { + { TUNER, "Tuner", V4L2_INPUT_TYPE_TUNER, 1, 1, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, + { AUX1, "AUX1", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, + { AUX3, "AUX3 Composite", V4L2_INPUT_TYPE_CAMERA, 4, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, + { AUX3_YC, "AUX3 S-Video", V4L2_INPUT_TYPE_CAMERA, 4, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, +}; + +/* this array holds the information, which port of the saa7146 each + input actually uses. the mxb uses port 0 for every input */ +static struct { + int hps_source; + int hps_sync; +} input_port_selection[MXB_INPUTS] = { + { SAA7146_HPS_SOURCE_PORT_A, SAA7146_HPS_SYNC_PORT_A }, + { SAA7146_HPS_SOURCE_PORT_A, SAA7146_HPS_SYNC_PORT_A }, + { SAA7146_HPS_SOURCE_PORT_A, SAA7146_HPS_SYNC_PORT_A }, + { SAA7146_HPS_SOURCE_PORT_A, SAA7146_HPS_SYNC_PORT_A }, +}; + +/* this array holds the information of the audio source (mxb_audios), + which has to be switched corresponding to the video source (mxb_channels) */ +static int video_audio_connect[MXB_AUDIOS] = + { 0, 1, 2, 3, 3 }; + +/* these are the necessary input-output-pins for bringing one audio source +(see above) to the CD-output */ +static struct tea6420_multiplex TEA6420_cd[MXB_AUDIOS+1][2] = + { + {{1,1,0},{1,1,0}}, /* Tuner */ + {{5,1,0},{6,1,0}}, /* AUX 1 */ + {{4,1,0},{6,1,0}}, /* AUX 2 */ + {{3,1,0},{6,1,0}}, /* AUX 3 */ + {{1,1,0},{3,1,0}}, /* Radio */ + {{1,1,0},{2,1,0}}, /* CD-Rom */ + {{6,1,0},{6,1,0}} /* Mute */ + }; + +/* these are the necessary input-output-pins for bringing one audio source +(see above) to the line-output */ +static struct tea6420_multiplex TEA6420_line[MXB_AUDIOS+1][2] = + { + {{2,3,0},{1,2,0}}, + {{5,3,0},{6,2,0}}, + {{4,3,0},{6,2,0}}, + {{3,3,0},{6,2,0}}, + {{2,3,0},{3,2,0}}, + {{2,3,0},{2,2,0}}, + {{6,3,0},{6,2,0}} /* Mute */ + }; + +#define MAXCONTROLS 1 +static struct v4l2_queryctrl mxb_controls[] = { + { V4L2_CID_AUDIO_MUTE, V4L2_CTRL_TYPE_BOOLEAN, "Mute", 0, 1, 1, 0, 0 }, +}; + +static struct saa7146_extension_ioctls ioctls[] = { + { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE }, + { VIDIOC_QUERYCTRL, SAA7146_BEFORE }, + { VIDIOC_G_CTRL, SAA7146_BEFORE }, + { VIDIOC_S_CTRL, SAA7146_BEFORE }, + { VIDIOC_G_TUNER, SAA7146_EXCLUSIVE }, + { VIDIOC_S_TUNER, SAA7146_EXCLUSIVE }, + { VIDIOC_G_FREQUENCY, SAA7146_EXCLUSIVE }, + { VIDIOC_S_FREQUENCY, SAA7146_EXCLUSIVE }, + { VIDIOC_G_AUDIO, SAA7146_EXCLUSIVE }, + { VIDIOC_S_AUDIO, SAA7146_EXCLUSIVE }, + { MXB_S_AUDIO_CD, SAA7146_EXCLUSIVE }, /* custom control */ + { MXB_S_AUDIO_LINE, SAA7146_EXCLUSIVE }, /* custom control */ + { 0, 0 } +}; + +struct mxb +{ + struct video_device video_dev; + struct video_device vbi_dev; + + struct i2c_adapter i2c_adapter; + + struct i2c_client* saa7111a; + struct i2c_client* tda9840; + struct i2c_client* tea6415c; + struct i2c_client* tuner; + struct i2c_client* tea6420_1; + struct i2c_client* tea6420_2; + + int cur_mode; /* current audio mode (mono, stereo, ...) */ + int cur_input; /* current input */ + int cur_freq; /* current frequency the tuner is tuned to */ + int cur_mute; /* current mute status */ +}; + +static int mxb_vbi_bypass(struct saa7146_dev* dev) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; + s32 byte = 0x0; + int result = 0; + + DEB_EE(("dev:%p\n",dev)); + + /* switch bypass in saa7111a, this should be done in the + saa7111a driver of course... */ + if ( -1 == (result = i2c_smbus_read_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_3))) { + DEB_D(("could not read from saa7111a.\n")); + return -EFAULT; + } + byte = result; + byte &= 0xf0; + byte |= 0x0a; + + if ( 0 != (result = i2c_smbus_write_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_3, byte))) { + DEB_D(("could not write to saa7111a.\n")); + return -EFAULT; + } + return 0; +} + +static int mxb_probe(struct saa7146_dev* dev) +{ + struct mxb* mxb = 0; + int i = 0; + + request_module("tuner"); + request_module("tea6420"); + request_module("tea6415c"); + request_module("tda9840"); + request_module("saa7111"); + + mxb = (struct mxb*)kmalloc(sizeof(struct mxb), GFP_KERNEL); + if( NULL == mxb ) { + DEB_D(("not enough kernel memory.\n")); + return -ENOMEM; + } + memset(mxb, 0x0, sizeof(struct mxb)); + + /* FIXME: enable i2c-port pins, video-port-pins + video port pins should be enabled here ?! */ + saa7146_write(dev, MC1, (MASK_08 | MASK_24 | MASK_10 | MASK_26)); + + saa7146_i2c_adapter_prepare(dev, &mxb->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480); + if(i2c_add_adapter(&mxb->i2c_adapter) < 0) { + DEB_S(("cannot register i2c-device. skipping.\n")); + kfree(mxb); + return -EFAULT; + } + + /* loop through all i2c-devices on the bus and look who is there */ + for(i = 0; i < I2C_CLIENT_MAX; i++) { + if( NULL == mxb->i2c_adapter.clients[i] ) { + continue; + } + if( I2C_TEA6420_1 == mxb->i2c_adapter.clients[i]->addr ) + mxb->tea6420_1 = mxb->i2c_adapter.clients[i]; + if( I2C_TEA6420_2 == mxb->i2c_adapter.clients[i]->addr ) + mxb->tea6420_2 = mxb->i2c_adapter.clients[i]; + if( I2C_TEA6415C_2 == mxb->i2c_adapter.clients[i]->addr ) + mxb->tea6415c = mxb->i2c_adapter.clients[i]; + if( I2C_TDA9840 == mxb->i2c_adapter.clients[i]->addr ) + mxb->tda9840 = mxb->i2c_adapter.clients[i]; + if( I2C_SAA7111A == mxb->i2c_adapter.clients[i]->addr ) + mxb->saa7111a = mxb->i2c_adapter.clients[i]; + if( 0x60 == mxb->i2c_adapter.clients[i]->addr ) + mxb->tuner = mxb->i2c_adapter.clients[i]; + } + + /* check if all devices are present */ + if( 0 == mxb->tea6420_1 || 0 == mxb->tea6420_2 || 0 == mxb->tea6415c + || 0 == mxb->tda9840 || 0 == mxb->saa7111a || 0 == mxb->tuner ) { + + printk("mxb: did not find all i2c devices. are you sure you\n"); + printk("mxb: insmod'ed tea6420, tea6415c, saa7111, tea6415c and tuner?\n"); + i2c_del_adapter(&mxb->i2c_adapter); + kfree(mxb); + return -ENODEV; + } + + /* all devices are present, probe was successful */ + + /* we store the pointer in our private data field */ + (struct mxb*)dev->ext_priv = mxb; + + return 0; +} + +/* bring hardware to a sane state. this has to be done, just in case someone + wants to capture from this device before it has been properly initialized. + the capture engine would badly fail, because no valid signal arrives on the + saa7146, thus leading to timeouts and stuff. */ +static int mxb_init_done(struct saa7146_dev* dev) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; + + struct { + int length; + char data[9]; + } saa7740_init[] = { + { 3, { 0x80, 0x00, 0x00 } },{ 3, { 0x80, 0x89, 0x00 } }, + { 3, { 0x80, 0xb0, 0x0a } },{ 3, { 0x00, 0x00, 0x00 } }, + { 3, { 0x49, 0x00, 0x00 } },{ 3, { 0x4a, 0x00, 0x00 } }, + { 3, { 0x4b, 0x00, 0x00 } },{ 3, { 0x4c, 0x00, 0x00 } }, + { 3, { 0x4d, 0x00, 0x00 } },{ 3, { 0x4e, 0x00, 0x00 } }, + { 3, { 0x4f, 0x00, 0x00 } },{ 3, { 0x50, 0x00, 0x00 } }, + { 3, { 0x51, 0x00, 0x00 } },{ 3, { 0x52, 0x00, 0x00 } }, + { 3, { 0x53, 0x00, 0x00 } },{ 3, { 0x54, 0x00, 0x00 } }, + { 3, { 0x55, 0x00, 0x00 } },{ 3, { 0x56, 0x00, 0x00 } }, + { 3, { 0x57, 0x00, 0x00 } },{ 3, { 0x58, 0x00, 0x00 } }, + { 3, { 0x59, 0x00, 0x00 } },{ 3, { 0x5a, 0x00, 0x00 } }, + { 3, { 0x5b, 0x00, 0x00 } },{ 3, { 0x5c, 0x00, 0x00 } }, + { 3, { 0x5d, 0x00, 0x00 } },{ 3, { 0x5e, 0x00, 0x00 } }, + { 3, { 0x5f, 0x00, 0x00 } },{ 3, { 0x60, 0x00, 0x00 } }, + { 3, { 0x61, 0x00, 0x00 } },{ 3, { 0x62, 0x00, 0x00 } }, + { 3, { 0x63, 0x00, 0x00 } },{ 3, { 0x64, 0x00, 0x00 } }, + { 3, { 0x65, 0x00, 0x00 } },{ 3, { 0x66, 0x00, 0x00 } }, + { 3, { 0x67, 0x00, 0x00 } },{ 3, { 0x68, 0x00, 0x00 } }, + { 3, { 0x69, 0x00, 0x00 } },{ 3, { 0x6a, 0x00, 0x00 } }, + { 3, { 0x6b, 0x00, 0x00 } },{ 3, { 0x6c, 0x00, 0x00 } }, + { 3, { 0x6d, 0x00, 0x00 } },{ 3, { 0x6e, 0x00, 0x00 } }, + { 3, { 0x6f, 0x00, 0x00 } },{ 3, { 0x70, 0x00, 0x00 } }, + { 3, { 0x71, 0x00, 0x00 } },{ 3, { 0x72, 0x00, 0x00 } }, + { 3, { 0x73, 0x00, 0x00 } },{ 3, { 0x74, 0x00, 0x00 } }, + { 3, { 0x75, 0x00, 0x00 } },{ 3, { 0x76, 0x00, 0x00 } }, + { 3, { 0x77, 0x00, 0x00 } },{ 3, { 0x41, 0x00, 0x42 } }, + { 3, { 0x42, 0x10, 0x42 } },{ 3, { 0x43, 0x20, 0x42 } }, + { 3, { 0x44, 0x30, 0x42 } },{ 3, { 0x45, 0x00, 0x01 } }, + { 3, { 0x46, 0x00, 0x01 } },{ 3, { 0x47, 0x00, 0x01 } }, + { 3, { 0x48, 0x00, 0x01 } }, + { 9, { 0x01, 0x03, 0xc5, 0x5c, 0x7a, 0x85, 0x01, 0x00, 0x54 } }, + { 9, { 0x21, 0x03, 0xc5, 0x5c, 0x7a, 0x85, 0x01, 0x00, 0x54 } }, + { 9, { 0x09, 0x0b, 0xb4, 0x6b, 0x74, 0x85, 0x95, 0x00, 0x34 } }, + { 9, { 0x29, 0x0b, 0xb4, 0x6b, 0x74, 0x85, 0x95, 0x00, 0x34 } }, + { 9, { 0x11, 0x17, 0x43, 0x62, 0x68, 0x89, 0xd1, 0xff, 0xb0 } }, + { 9, { 0x31, 0x17, 0x43, 0x62, 0x68, 0x89, 0xd1, 0xff, 0xb0 } }, + { 9, { 0x19, 0x20, 0x62, 0x51, 0x5a, 0x95, 0x19, 0x01, 0x50 } }, + { 9, { 0x39, 0x20, 0x62, 0x51, 0x5a, 0x95, 0x19, 0x01, 0x50 } }, + { 9, { 0x05, 0x3e, 0xd2, 0x69, 0x4e, 0x9a, 0x51, 0x00, 0xf0 } }, + { 9, { 0x25, 0x3e, 0xd2, 0x69, 0x4e, 0x9a, 0x51, 0x00, 0xf0 } }, + { 9, { 0x0d, 0x3d, 0xa1, 0x40, 0x7d, 0x9f, 0x29, 0xfe, 0x14 } }, + { 9, { 0x2d, 0x3d, 0xa1, 0x40, 0x7d, 0x9f, 0x29, 0xfe, 0x14 } }, + { 9, { 0x15, 0x73, 0xa1, 0x50, 0x5d, 0xa6, 0xf5, 0xfe, 0x38 } }, + { 9, { 0x35, 0x73, 0xa1, 0x50, 0x5d, 0xa6, 0xf5, 0xfe, 0x38 } }, + { 9, { 0x1d, 0xed, 0xd0, 0x68, 0x29, 0xb4, 0xe1, 0x00, 0xb8 } }, + { 9, { 0x3d, 0xed, 0xd0, 0x68, 0x29, 0xb4, 0xe1, 0x00, 0xb8 } }, + { 3, { 0x80, 0xb3, 0x0a } }, + {-1, { 0} } + }; + + unsigned char init[25] = { + 0x00, + + 0x00, /* 00 - ID byte */ + 0x00, /* 01 - reserved */ + + /*front end */ + 0xd8, /* 02 - FUSE=x, GUDL=x, MODE=x */ + 0x23, /* 03 - HLNRS=0, VBSL=1, WPOFF=0, HOLDG=0, GAFIX=0, GAI1=256, GAI2=256 */ + 0x00, /* 04 - GAI1=256 */ + 0x00, /* 05 - GAI2=256 */ + + /* decoder */ + 0xf0, /* 06 - HSB at xx(50Hz) / xx(60Hz) pixels after end of last line */ + 0x30, /* 07 - HSS at xx(50Hz) / xx(60Hz) pixels after end of last line */ + 0xa8, /* 08 - AUFD=x, FSEL=x, EXFIL=x, VTRC=x, HPLL=x, VNOI=x */ + 0x02, /* 09 - BYPS=x, PREF=x, BPSS=x, VBLB=x, UPTCV=x, APER=x */ + 0x80, /* 0a - BRIG=128 */ + 0x47, /* 0b - CONT=1.109 */ + 0x40, /* 0c - SATN=1.0 */ + 0x00, /* 0d - HUE=0 */ + 0x01, /* 0e - CDTO=0, CSTD=0, DCCF=0, FCTC=0, CHBW=1 */ + 0x00, /* 0f - reserved */ + 0xd0, /* 10 - OFTS=x, HDEL=x, VRLN=x, YDEL=x */ + 0x8c, /* 11 - GPSW=x, CM99=x, FECO=x, COMPO=x, OEYC=1, OEHV=1, VIPB=0, COLO=0 */ + 0x80, /* 12 - xx output control 2 */ + 0x30, /* 13 - xx output control 3 */ + 0x00, /* 14 - reserved */ + 0x15, /* 15 - VBI */ + 0x04, /* 16 - VBI */ + 0x00, /* 17 - VBI */ + }; + + struct i2c_msg msg; + + int i = 0, err = 0; + struct tea6415c_multiplex vm; + + /* write configuration to saa7111a */ + i = i2c_master_send(mxb->saa7111a, init, sizeof(init)); + if (i < 0) { + printk("failed to initialize saa7111a. this should never happen.\n"); + } + + /* select tuner-output on saa7111a */ + i = 0; + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i); +// i = VIDEO_MODE_PAL; +// mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_NORM, &i); + + mxb_vbi_bypass(dev); + + /* select a tuner type */ + i = 5; + mxb->tuner->driver->command(mxb->tuner,TUNER_SET_TYPE, &i); + + /* mute audio on tea6420s */ + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[6][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[6][1]); + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_cd[6][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_cd[6][1]); + + /* switch to tuner-channel on tea6415c*/ + vm.out = 17; + vm.in = 3; + mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm); + + /* select tuner-output on multicable on tea6415c*/ + vm.in = 3; + vm.out = 13; + mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm); + + /* tune in some frequency on tuner */ + mxb->tuner->driver->command(mxb->tuner, VIDIOCSFREQ, &freq); + + /* the rest for mxb */ + mxb->cur_input = 0; + mxb->cur_freq = freq; + mxb->cur_mute = 1; + + mxb->cur_mode = V4L2_TUNER_MODE_STEREO; + mxb->tda9840->driver->command(mxb->tda9840, TDA9840_SWITCH, &mxb->cur_mode); + + /* check if the saa7740 (aka 'sound arena module') is present + on the mxb. if so, we must initialize it. due to lack of + informations about the saa7740, the values were reverse + engineered. */ + msg.addr = 0x1b; + msg.flags = 0; + msg.len = saa7740_init[0].length; + msg.buf = &saa7740_init[0].data[0]; + + if( 1 == (err = i2c_transfer(&mxb->i2c_adapter, &msg, 1))) { + for(i = 1;;i++) { + msg.len = saa7740_init[i].length; + if( -1 == msg.len ) { + break; + } + msg.buf = &saa7740_init[i].data[0]; + if( 1 != (err = i2c_transfer(&mxb->i2c_adapter, &msg, 1))) { + DEB_D(("failed to initialize 'sound arena module'.\n")); + goto err; + } + } + INFO(("'sound arena module' detected.\n")); + } +err: + /* the rest for saa7146: you should definitely set some basic values + for the input-port handling of the saa7146. */ + + /* ext->saa has been filled by the core driver */ + + /* some stuff is done via variables */ + saa7146_set_hps_source_and_sync(dev, input_port_selection[mxb->cur_input].hps_source, input_port_selection[mxb->cur_input].hps_sync); + + /* some stuff is done via direct write to the registers */ + + /* this is ugly, but because of the fact that this is completely + hardware dependend, it should be done directly... */ + saa7146_write(dev, DD1_STREAM_B, 0x00000000); + saa7146_write(dev, DD1_INIT, 0x02000200); + saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + + return 0; +} + +/* interrupt-handler. this gets called when irq_mask is != 0. + it must clear the interrupt-bits in irq_mask it has handled */ +/* +void mxb_irq_bh(struct saa7146_dev* dev, u32* irq_mask) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; +} +*/ + +/* this function only gets called when the probing was successful */ +static int mxb_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_data *info) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; + + DEB_EE(("dev:%p\n",dev)); + + /* checking for i2c-devices can be omitted here, because we + already did this in "mxb_vl42_probe" */ + + saa7146_vv_init(dev); + if( 0 != saa7146_register_device(&mxb->video_dev, dev, "mxb", VFL_TYPE_GRABBER)) { + ERR(("cannot register capture v4l2 device. skipping.\n")); + return -1; + } + + /* initialization stuff (vbi) (only for revision > 0 and for extensions which want it)*/ + if( 0 != MXB_BOARD_CAN_DO_VBI(dev)) { + if( 0 != saa7146_register_device(&mxb->vbi_dev, dev, "mxb", VFL_TYPE_VBI)) { + ERR(("cannot register vbi v4l2 device. skipping.\n")); + } + } + + i2c_use_client(mxb->tea6420_1); + i2c_use_client(mxb->tea6420_2); + i2c_use_client(mxb->tea6415c); + i2c_use_client(mxb->tda9840); + i2c_use_client(mxb->saa7111a); + i2c_use_client(mxb->tuner); + + printk("mxb: found 'Multimedia eXtension Board'-%d.\n",mxb_num); + + mxb_num++; + mxb_init_done(dev); + return 0; +} + +static int mxb_detach(struct saa7146_dev* dev) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; + + DEB_EE(("dev:%p\n",dev)); + + i2c_release_client(mxb->tea6420_1); + i2c_release_client(mxb->tea6420_2); + i2c_release_client(mxb->tea6415c); + i2c_release_client(mxb->tda9840); + i2c_release_client(mxb->saa7111a); + i2c_release_client(mxb->tuner); + + saa7146_unregister_device(&mxb->video_dev,dev); + if( 0 != MXB_BOARD_CAN_DO_VBI(dev)) { + saa7146_unregister_device(&mxb->vbi_dev,dev); + } + saa7146_vv_release(dev); + + mxb_num--; + + i2c_del_adapter(&mxb->i2c_adapter); + kfree(mxb); + + return 0; +} + +/* hack: this should go into saa711x */ +static int saa7111_set_gpio(struct saa7146_dev *dev, int bl) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; + s32 byte = 0x0; + int result = 0; + + DEB_EE(("dev:%p\n",dev)); + + /* get the old register contents */ + if ( -1 == (byte = i2c_smbus_read_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_1))) { + DEB_D(("could not read from saa711x\n")); + return -EFAULT; + } + + if( 0 == bl ) { + byte &= 0x7f; + } else { + byte |= 0x80; + } + + /* write register contents back */ + if ( 0 != (result = i2c_smbus_write_byte_data(mxb->saa7111a, SAA711X_OUTPUT_CONTROL_1, byte))) { + DEB_D(("could not write to saa711x\n")); + return -EFAULT; + } + + return 0; +} + +static int mxb_ioctl(struct saa7146_dev *dev, unsigned int cmd, void *arg) +{ + struct mxb* mxb = (struct mxb*)dev->ext_priv; + struct saa7146_vv *vv = dev->vv_data; + + switch(cmd) { + case VIDIOC_ENUMINPUT: + { + struct v4l2_input *i = arg; + + DEB_EE(("VIDIOC_ENUMINPUT %d.\n",i->index)); + if( i->index < 0 || i->index >= MXB_INPUTS) { + return -EINVAL; + } + memcpy(i, &mxb_inputs[i->index], sizeof(struct v4l2_input)); + + return 0; + } + /* the saa7146 provides some controls (brightness, contrast, saturation) + which gets registered *after* this function. because of this we have + to return with a value != 0 even if the function succeded.. */ + case VIDIOC_QUERYCTRL: + { + struct v4l2_queryctrl *qc = arg; + int i; + + for (i = MAXCONTROLS - 1; i >= 0; i--) { + if (mxb_controls[i].id == qc->id) { + *qc = mxb_controls[i]; + DEB_D(("VIDIOC_QUERYCTRL %d.\n",qc->id)); + return 0; + } + } + return -EAGAIN; + } + case VIDIOC_G_CTRL: + { + struct v4l2_control *vc = arg; + int i; + + for (i = MAXCONTROLS - 1; i >= 0; i--) { + if (mxb_controls[i].id == vc->id) { + break; + } + } + + if( i < 0 ) { + return -EAGAIN; + } + + switch (vc->id ) { + case V4L2_CID_AUDIO_MUTE: { + vc->value = mxb->cur_mute; + DEB_D(("VIDIOC_G_CTRL V4L2_CID_AUDIO_MUTE:%d.\n",vc->value)); + return 0; + } + } + + DEB_EE(("VIDIOC_G_CTRL V4L2_CID_AUDIO_MUTE:%d.\n",vc->value)); + return 0; + } + + case VIDIOC_S_CTRL: + { + struct v4l2_control *vc = arg; + int i = 0; + + for (i = MAXCONTROLS - 1; i >= 0; i--) { + if (mxb_controls[i].id == vc->id) { + break; + } + } + + if( i < 0 ) { + return -EAGAIN; + } + + switch (vc->id ) { + case V4L2_CID_AUDIO_MUTE: { + mxb->cur_mute = vc->value; + if( 0 == vc->value ) { + /* switch the audio-source */ + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[mxb->cur_input]][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[mxb->cur_input]][1]); + } else { + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[6][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[6][1]); + } + DEB_EE(("VIDIOC_S_CTRL, V4L2_CID_AUDIO_MUTE: %d.\n",vc->value)); + break; + } + } + return 0; + } + case VIDIOC_G_INPUT: + { + int *input = (int *)arg; + *input = mxb->cur_input; + + DEB_EE(("VIDIOC_G_INPUT %d.\n",*input)); + return 0; + } + case VIDIOC_S_INPUT: + { + int input = *(int *)arg; + struct tea6415c_multiplex vm; + int i = 0; + + DEB_EE(("VIDIOC_S_INPUT %d.\n",input)); + + if (input < 0 || input >= MXB_INPUTS) { + return -EINVAL; + } + + /* fixme: locke das setzen des inputs mit hilfe des mutexes + down(&dev->lock); + video_mux(dev,*i); + up(&dev->lock); + */ + + /* fixme: check if streaming capture + if ( 0 != dev->streaming ) { + DEB_D(("VIDIOC_S_INPUT illegal while streaming.\n")); + return -EPERM; + } + */ + + mxb->cur_input = input; + + saa7146_set_hps_source_and_sync(dev, input_port_selection[input].hps_source, input_port_selection[input].hps_sync); + + /* prepare switching of tea6415c and saa7111a; + have a look at the 'background'-file for further informations */ + switch( input ) { + + case TUNER: + { + i = 0; + vm.in = 3; + vm.out = 17; + + if ( 0 != mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm)) { + printk("VIDIOC_S_INPUT: could not address tea6415c #1\n"); + return -EFAULT; + } + /* connect tuner-output always to multicable */ + vm.in = 3; + vm.out = 13; + break; + } + case AUX3_YC: + { + /* nothing to be done here. aux3_yc is + directly connected to the saa711a */ + i = 5; + break; + } + case AUX3: + { + /* nothing to be done here. aux3 is + directly connected to the saa711a */ + i = 1; + break; + } + case AUX1: + { + i = 0; + vm.in = 1; + vm.out = 17; + break; + } + } + + /* switch video in tea6415c only if necessary */ + switch( input ) { + case TUNER: + case AUX1: + { + if ( 0 != mxb->tea6415c->driver->command(mxb->tea6415c,TEA6415C_SWITCH, &vm)) { + printk("VIDIOC_S_INPUT: could not address tea6415c #3\n"); + return -EFAULT; + } + break; + } + default: + { + break; + } + } + + /* switch video in saa7111a */ + if ( 0 != mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_SET_INPUT, &i)) { + printk("VIDIOC_S_INPUT: could not address saa7111a #1.\n"); + } + + /* switch the audio-source only if necessary */ + if( 0 == mxb->cur_mute ) { + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[input]][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[video_audio_connect[input]][1]); + } + + return 0; + } + case VIDIOC_G_TUNER: + { + struct v4l2_tuner *t = arg; + int byte = 0; + + if( 0 != t->index ) { + DEB_D(("VIDIOC_G_TUNER: channel %d does not have a tuner attached.\n", t->index)); + return -EINVAL; + } + + DEB_EE(("VIDIOC_G_TUNER: %d\n", t->index)); + + memset(t,0,sizeof(*t)); + strcpy(t->name, "Television"); + + t->type = V4L2_TUNER_ANALOG_TV; + t->capability = V4L2_TUNER_CAP_NORM | V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 | V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP; + t->rangelow = 772; /* 48.25 MHZ / 62.5 kHz = 772, see fi1216mk2-specs, page 2 */ + t->rangehigh = 13684; /* 855.25 MHz / 62.5 kHz = 13684 */ + /* FIXME: add the real signal strength here */ + t->signal = 0xffff; + t->afc = 0; + + byte = mxb->tda9840->driver->command(mxb->tda9840,TDA9840_DETECT, NULL); + t->audmode = mxb->cur_mode; + + if( byte < 0 ) { + t->rxsubchans = V4L2_TUNER_SUB_MONO; + } else { + switch(byte) { + case TDA9840_MONO_DETECT: { + t->rxsubchans = V4L2_TUNER_SUB_MONO; + DEB_D(("VIDIOC_G_TUNER: V4L2_TUNER_MODE_MONO.\n")); + break; + } + case TDA9840_DUAL_DETECT: { + t->rxsubchans = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2; + DEB_D(("VIDIOC_G_TUNER: V4L2_TUNER_MODE_LANG1.\n")); + break; + } + case TDA9840_STEREO_DETECT: { + t->rxsubchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_MONO; + DEB_D(("VIDIOC_G_TUNER: V4L2_TUNER_MODE_STEREO.\n")); + break; + } + default: { /* TDA9840_INCORRECT_DETECT */ + t->rxsubchans = V4L2_TUNER_MODE_MONO; + DEB_D(("VIDIOC_G_TUNER: TDA9840_INCORRECT_DETECT => V4L2_TUNER_MODE_MONO\n")); + break; + } + } + } + + return 0; + } + case VIDIOC_S_TUNER: + { + struct v4l2_tuner *t = arg; + int result = 0; + int byte = 0; + + if( 0 != t->index ) { + DEB_D(("VIDIOC_S_TUNER: channel %d does not have a tuner attached.\n",t->index)); + return -EINVAL; + } + + switch(t->audmode) { + case V4L2_TUNER_MODE_STEREO: { + mxb->cur_mode = V4L2_TUNER_MODE_STEREO; + byte = TDA9840_SET_STEREO; + DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_STEREO\n")); + break; + } + case V4L2_TUNER_MODE_LANG1: { + mxb->cur_mode = V4L2_TUNER_MODE_LANG1; + byte = TDA9840_SET_LANG1; + DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_LANG1\n")); + break; + } + case V4L2_TUNER_MODE_LANG2: { + mxb->cur_mode = V4L2_TUNER_MODE_LANG2; + byte = TDA9840_SET_LANG2; + DEB_D(("VIDIOC_S_TUNER: V4L2_TUNER_MODE_LANG2\n")); + break; + } + default: { /* case V4L2_TUNER_MODE_MONO: {*/ + mxb->cur_mode = V4L2_TUNER_MODE_MONO; + byte = TDA9840_SET_MONO; + DEB_D(("VIDIOC_S_TUNER: TDA9840_SET_MONO\n")); + break; + } + } + + if( 0 != (result = mxb->tda9840->driver->command(mxb->tda9840, TDA9840_SWITCH, &byte))) { + printk("VIDIOC_S_TUNER error. result:%d, byte:%d\n",result,byte); + } + + return 0; + } + case VIDIOC_G_FREQUENCY: + { + struct v4l2_frequency *f = arg; + + if(0 != mxb->cur_input) { + DEB_D(("VIDIOC_G_FREQ: channel %d does not have a tuner!\n",mxb->cur_input)); + return -EINVAL; + } + + memset(f,0,sizeof(*f)); + f->type = V4L2_TUNER_ANALOG_TV; + f->frequency = mxb->cur_freq; + + DEB_EE(("VIDIOC_G_FREQ: freq:0x%08x.\n", mxb->cur_freq)); + return 0; + } + case VIDIOC_S_FREQUENCY: + { + struct v4l2_frequency *f = arg; + int t_locked = 0; + int v_byte = 0; + + if (0 != f->tuner) + return -EINVAL; + + if (V4L2_TUNER_ANALOG_TV != f->type) + return -EINVAL; + + if(0 != mxb->cur_input) { + DEB_D(("VIDIOC_S_FREQ: channel %d does not have a tuner!\n",mxb->cur_input)); + return -EINVAL; + } + + DEB_EE(("VIDIOC_S_FREQUENCY: freq:0x%08x.\n",f->frequency)); + + mxb->cur_freq = f->frequency; + + /* tune in desired frequency */ + mxb->tuner->driver->command(mxb->tuner, VIDIOCSFREQ, &mxb->cur_freq); + + /* check if pll of tuner & saa7111a is locked */ +// mxb->tuner->driver->command(mxb->tuner,TUNER_IS_LOCKED, &t_locked); + mxb->saa7111a->driver->command(mxb->saa7111a,DECODER_GET_STATUS, &v_byte); + + /* not locked -- anything to do here ? */ + if( 0 == t_locked || 0 == (v_byte & DECODER_STATUS_GOOD)) { + } + + /* hack: changing the frequency should invalidate the vbi-counter (=> alevt) */ + spin_lock(&dev->slock); + vv->vbi_fieldcount = 0; + spin_unlock(&dev->slock); + + return 0; + } + case MXB_S_AUDIO_CD: + { + int i = *(int*)arg; + + if( i < 0 || i >= MXB_AUDIOS ) { + DEB_D(("illegal argument to MXB_S_AUDIO_CD: i:%d.\n",i)); + return -EINVAL; + } + + DEB_EE(("MXB_S_AUDIO_CD: i:%d.\n",i)); + + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_cd[i][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_cd[i][1]); + + return 0; + } + case MXB_S_AUDIO_LINE: + { + int i = *(int*)arg; + + if( i < 0 || i >= MXB_AUDIOS ) { + DEB_D(("illegal argument to MXB_S_AUDIO_LINE: i:%d.\n",i)); + return -EINVAL; + } + + DEB_EE(("MXB_S_AUDIO_LINE: i:%d.\n",i)); + mxb->tea6420_1->driver->command(mxb->tea6420_1,TEA6420_SWITCH, &TEA6420_line[i][0]); + mxb->tea6420_2->driver->command(mxb->tea6420_2,TEA6420_SWITCH, &TEA6420_line[i][1]); + + return 0; + } + case VIDIOC_G_AUDIO: + { + struct v4l2_audio *a = arg; + + if( a->index < 0 || a->index > MXB_INPUTS ) { + DEB_D(("VIDIOC_G_AUDIO %d out of range.\n",a->index)); + return -EINVAL; + } + + DEB_EE(("VIDIOC_G_AUDIO %d.\n",a->index)); + memcpy(a, &mxb_audios[video_audio_connect[mxb->cur_input]], sizeof(struct v4l2_audio)); + + return 0; + } + case VIDIOC_S_AUDIO: + { + struct v4l2_audio *a = arg; + DEB_D(("VIDIOC_S_AUDIO %d.\n",a->index)); + return 0; + } + default: +/* + DEB2(printk("does not handle this ioctl.\n")); +*/ + return -ENOIOCTLCMD; + } + return 0; +} + +static int std_callback(struct saa7146_dev* dev, struct saa7146_standard *std) +{ + if(V4L2_STD_PAL_I == std->id ) { + DEB_D(("VIDIOC_S_STD: setting mxb for PAL_I.\n")); + /* set the 7146 gpio register -- I don't know what this does exactly */ + saa7146_write(dev, GPIO_CTRL, 0x00404050); + /* unset the 7111 gpio register -- I don't know what this does exactly */ + saa7111_set_gpio(dev,0); + } else { + DEB_D(("VIDIOC_S_STD: setting mxb for PAL/NTSC/SECAM.\n")); + /* set the 7146 gpio register -- I don't know what this does exactly */ + saa7146_write(dev, GPIO_CTRL, 0x00404050); + /* set the 7111 gpio register -- I don't know what this does exactly */ + saa7111_set_gpio(dev,1); + } + return 0; +} + +static struct saa7146_standard standard[] = { + { "PAL-BG", V4L2_STD_PAL_BG, SAA7146_PAL_VALUES }, + { "PAL-I", V4L2_STD_PAL_I, SAA7146_PAL_VALUES }, + { "NTSC", V4L2_STD_NTSC, SAA7146_NTSC_VALUES }, + { "SECAM", V4L2_STD_SECAM, SAA7146_SECAM_VALUES }, +}; + +static +struct saa7146_extension extension; + +static +struct saa7146_pci_extension_data mxb = { + .ext_priv = "Multimedia eXtension Board", + .ext = &extension, +}; + +static +struct pci_device_id pci_tbl[] = { + { + .vendor = PCI_VENDOR_ID_PHILIPS, + .device = PCI_DEVICE_ID_PHILIPS_SAA7146, + .subvendor = 0x0000, + .subdevice = 0x0000, + .driver_data = (unsigned long)&mxb, + }, { + .vendor = 0, + } +}; + +static +struct saa7146_ext_vv vv_data = { + .inputs = MXB_INPUTS, + .capabilities = V4L2_CAP_TUNER | V4L2_CAP_VBI_CAPTURE, + .stds = &standard[0], + .num_stds = sizeof(standard)/sizeof(struct saa7146_standard), + .std_callback = &std_callback, + .ioctls = &ioctls[0], + .ioctl = mxb_ioctl, +}; + +static +struct saa7146_extension extension = { + .name = MXB_IDENTIFIER, + .flags = SAA7146_USE_I2C_IRQ, + + .pci_tbl = &pci_tbl[0], + .module = THIS_MODULE, + .ext_vv_data = &vv_data, + + .probe = mxb_probe, + .attach = mxb_attach, + .detach = mxb_detach, + + .irq_mask = 0, + .irq_func = NULL, +}; + +int __init mxb_init_module(void) +{ + if( 0 != saa7146_register_extension(&extension)) { + DEB_S(("failed to register extension.\n")); + return -ENODEV; + } + + return 0; +} + +void __exit mxb_cleanup_module(void) +{ + saa7146_unregister_extension(&extension); +} + +module_init(mxb_init_module); +module_exit(mxb_cleanup_module); + +MODULE_DESCRIPTION("video4linux-2 driver for the Siemens-Nixdorf 'Multimedia eXtension board'"); +MODULE_AUTHOR("Michael Hunold "); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/video/mxb.h b/drivers/media/video/mxb.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/mxb.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,42 @@ +#ifndef __MXB__ +#define __MXB__ + +#define BASE_VIDIOC_MXB 10 + +#define MXB_S_AUDIO_CD _IOW ('V', BASE_VIDIOC_PRIVATE+BASE_VIDIOC_MXB+0, int) +#define MXB_S_AUDIO_LINE _IOW ('V', BASE_VIDIOC_PRIVATE+BASE_VIDIOC_MXB+1, int) + +#define MXB_IDENTIFIER "Multimedia eXtension Board" + +#define MXB_AUDIOS 6 + +/* these are the available audio sources, which can switched + to the line- and cd-output individually */ +struct v4l2_audio mxb_audios[MXB_AUDIOS] = { + { + .index = 0, + .name = "Tuner", + .capability = V4L2_AUDCAP_STEREO, + } , { + .index = 1, + .name = "AUX1", + .capability = V4L2_AUDCAP_STEREO, + } , { + .index = 2, + .name = "AUX2", + .capability = V4L2_AUDCAP_STEREO, + } , { + .index = 3, + .name = "AUX3", + .capability = V4L2_AUDCAP_STEREO, + } , { + .index = 4, + .name = "Radio (X9)", + .capability = V4L2_AUDCAP_STEREO, + } , { + .index = 5, + .name = "CD-ROM (X10)", + .capability = V4L2_AUDCAP_STEREO, + } +}; +#endif diff -Nru a/drivers/media/video/saa7111.c b/drivers/media/video/saa7111.c --- a/drivers/media/video/saa7111.c Sat Apr 12 14:44:07 2003 +++ b/drivers/media/video/saa7111.c Sat Apr 12 14:44:07 2003 @@ -57,15 +57,13 @@ int sat; }; -#define I2C_SAA7111 0x48 - -#define I2C_DELAY 10 - static unsigned short normal_i2c[] = { 34>>1, I2C_CLIENT_END }; static unsigned short normal_i2c_range[] = { I2C_CLIENT_END }; I2C_CLIENT_INSMOD; +static struct i2c_client client_template; + /* ----------------------------------------------------------------------- */ static int saa7111_attach(struct i2c_adapter *adap, int addr, unsigned short flags, int kind) @@ -73,40 +71,45 @@ int i; struct saa7111 *decoder; struct i2c_client *client; + + /* who wrote this? init[] is used for i2c_master_send() which expects an array that + will be used for the 'buf' part of an i2c message unchanged. so, the first byte + needs to be the subaddress to start with, then follow the data bytes... */ static const unsigned char init[] = { - 0x00, 0x00, /* 00 - ID byte */ - 0x01, 0x00, /* 01 - reserved */ + 0x00, /* start address */ + + 0x00, /* 00 - ID byte */ + 0x00, /* 01 - reserved */ /*front end */ - 0x02, 0xd0, /* 02 - FUSE=3, GUDL=2, MODE=0 */ - 0x03, 0x23, /* 03 - HLNRS=0, VBSL=1, WPOFF=0, HOLDG=0, GAFIX=0, GAI1=256, GAI2=256 */ - 0x04, 0x00, /* 04 - GAI1=256 */ - 0x05, 0x00, /* 05 - GAI2=256 */ + 0xd0, /* 02 - FUSE=3, GUDL=2, MODE=0 */ + 0x23, /* 03 - HLNRS=0, VBSL=1, WPOFF=0, HOLDG=0, GAFIX=0, GAI1=256, GAI2=256 */ + 0x00, /* 04 - GAI1=256 */ + 0x00, /* 05 - GAI2=256 */ /* decoder */ - 0x06, 0xf3, /* 06 - HSB at 13(50Hz) / 17(60Hz) pixels after end of last line */ - 0x07, 0x13, /* 07 - HSS at 113(50Hz) / 117(60Hz) pixels after end of last line */ - 0x08, 0xc8, /* 08 - AUFD=1, FSEL=1, EXFIL=0, VTRC=1, HPLL=0, VNOI=0 */ - 0x09, 0x01, /* 09 - BYPS=0, PREF=0, BPSS=0, VBLB=0, UPTCV=0, APER=1 */ - 0x0a, 0x80, /* 0a - BRIG=128 */ - 0x0b, 0x47, /* 0b - CONT=1.109 */ - 0x0c, 0x40, /* 0c - SATN=1.0 */ - 0x0d, 0x00, /* 0d - HUE=0 */ - 0x0e, 0x01, /* 0e - CDTO=0, CSTD=0, DCCF=0, FCTC=0, CHBW=1 */ - 0x0f, 0x00, /* 0f - reserved */ - 0x10, 0x48, /* 10 - OFTS=1, HDEL=0, VRLN=1, YDEL=0 */ - 0x11, 0x1c, /* 11 - GPSW=0, CM99=0, FECO=0, COMPO=1, OEYC=1, OEHV=1, VIPB=0, COLO=0 */ - 0x12, 0x00, /* 12 - output control 2 */ - 0x13, 0x00, /* 13 - output control 3 */ - 0x14, 0x00, /* 14 - reserved */ - 0x15, 0x00, /* 15 - VBI */ - 0x16, 0x00, /* 16 - VBI */ - 0x17, 0x00, /* 17 - VBI */ + 0xf3, /* 06 - HSB at 13(50Hz) / 17(60Hz) pixels after end of last line */ + 0x13, /* 07 - HSS at 113(50Hz) / 117(60Hz) pixels after end of last line */ + 0xc8, /* 08 - AUFD=1, FSEL=1, EXFIL=0, VTRC=1, HPLL=0, VNOI=0 */ + 0x01, /* 09 - BYPS=0, PREF=0, BPSS=0, VBLB=0, UPTCV=0, APER=1 */ + 0x80, /* 0a - BRIG=128 */ + 0x47, /* 0b - CONT=1.109 */ + 0x40, /* 0c - SATN=1.0 */ + 0x00, /* 0d - HUE=0 */ + 0x01, /* 0e - CDTO=0, CSTD=0, DCCF=0, FCTC=0, CHBW=1 */ + 0x00, /* 0f - reserved */ + 0x48, /* 10 - OFTS=1, HDEL=0, VRLN=1, YDEL=0 */ + 0x1c, /* 11 - GPSW=0, CM99=0, FECO=0, COMPO=1, OEYC=1, OEHV=1, VIPB=0, COLO=0 */ + 0x00, /* 12 - output control 2 */ + 0x00, /* 13 - output control 3 */ + 0x00, /* 14 - reserved */ + 0x00, /* 15 - VBI */ + 0x00, /* 16 - VBI */ + 0x00, /* 17 - VBI */ }; client = kmalloc(sizeof(*client), GFP_KERNEL); if(client == NULL) return -ENOMEM; - memset(client, 0, sizeof(*client)); client_template.adapter = adap; client_template.addr = addr; memcpy(client, &client_template, sizeof(*client)); @@ -136,9 +139,10 @@ printk(KERN_ERR "%s_attach: init status %d\n", client->dev.name, i); } else { - printk(KERN_INFO "%s_attach: chip version %x\n", - client->dev.name, i2c_smbus_read_byte_data(client, 0x00) >> 4); + printk(KERN_INFO "%s_attach: chip version %x @ 0x%08x\n", + client->dev.name, i2c_smbus_read_byte_data(client, 0x00) >> 4,addr); } + init_MUTEX(&decoder->lock); i2c_attach_client(client); MOD_INC_USE_COUNT; @@ -146,6 +150,16 @@ } static int saa7111_probe(struct i2c_adapter *adap) { + /* probing unknown devices on any Matrox i2c-bus takes ages due to the + slow bit banging algorithm used. because of the fact a saa7111(a) + is *never* present on a Matrox gfx card, we can skip such adapters + here */ + if( 0 != (adap->id & I2C_HW_B_G400)) { + return -ENODEV; + } + + printk("saa7111: probing %s i2c adapter [id=0x%x]\n", + adap->dev.name,adap->id); return i2c_probe(adap, &addr_data, saa7111_attach); } @@ -385,6 +399,9 @@ /* ----------------------------------------------------------------------- */ static struct i2c_driver i2c_driver_saa7111 = { +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54) + .owner = THIS_MODULE, +#endif .name = "saa7111", /* name */ .id = I2C_DRIVERID_SAA7111A, /* ID */ .flags = I2C_DF_NOTIFY, diff -Nru a/drivers/media/video/tda9840.c b/drivers/media/video/tda9840.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/tda9840.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,289 @@ + /* + tda9840.h - i2c-driver for the tda9840 by SGS Thomson + + Copyright (C) 1998-2003 Michael Hunold + + The tda9840 is a stereo/dual sound processor with digital + identification. It can be found at address 0x84 on the i2c-bus. + + For detailed informations download the specifications directly + from SGS Thomson at http://www.st.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "tda9840.h" + +static int debug = 0; /* insmod parameter */ +MODULE_PARM(debug,"i"); +#define dprintk if (debug) printk + +#define SWITCH 0x00 +#define LEVEL_ADJUST 0x02 +#define STEREO_ADJUST 0x03 +#define TEST 0x04 + +/* addresses to scan, found only at 0x42 (7-Bit) */ +static unsigned short normal_i2c[] = {I2C_TDA9840, I2C_CLIENT_END}; +static unsigned short normal_i2c_range[] = {I2C_CLIENT_END}; + +/* magic definition of all other variables and things */ +I2C_CLIENT_INSMOD; + +/* unique ID allocation */ +static int tda9840_id = 0; + +static struct i2c_driver driver; + +static int tda9840_command(struct i2c_client *client, unsigned int cmd, void* arg) +{ + int result = 0; + + switch (cmd) { + case TDA9840_SWITCH: + { + int byte = *(int*)arg; + + dprintk("tda9840.o: TDA9840_SWITCH: 0x%02x\n",byte); + + if ( byte != TDA9840_SET_MONO + && byte != TDA9840_SET_MUTE + && byte != TDA9840_SET_STEREO + && byte != TDA9840_SET_LANG1 + && byte != TDA9840_SET_LANG2 + && byte != TDA9840_SET_BOTH + && byte != TDA9840_SET_BOTH_R + && byte != TDA9840_SET_EXTERNAL ) { + return -EINVAL; + } + + if ( 0 != (result = i2c_smbus_write_byte_data(client, SWITCH, byte))) { + printk("tda9840.o: TDA9840_SWITCH error.\n"); + return -EFAULT; + } + + return 0; + } + + case TDA9840_LEVEL_ADJUST: + { + int byte = *(int*)arg; + + dprintk("tda9840.o: TDA9840_LEVEL_ADJUST: %d\n",byte); + + /* check for correct range */ + if ( byte > 25 || byte < -20 ) + return -EINVAL; + + /* calculate actual value to set, see specs, page 18 */ + byte /= 5; + if ( 0 < byte ) + byte += 0x8; + else + byte = -byte; + + if ( 0 != (result = i2c_smbus_write_byte_data(client, LEVEL_ADJUST, byte))) { + printk("tda9840.o: TDA9840_LEVEL_ADJUST error.\n"); + return -EFAULT; + } + + return 0; + } + + case TDA9840_STEREO_ADJUST: + { + int byte = *(int*)arg; + + dprintk("tda9840.o: TDA9840_STEREO_ADJUST: %d\n",byte); + + /* check for correct range */ + if ( byte > 25 || byte < -24 ) + return -EINVAL; + + /* calculate actual value to set */ + byte /= 5; + if ( 0 < byte ) + byte += 0x20; + else + byte = -byte; + + if ( 0 != (result = i2c_smbus_write_byte_data(client, STEREO_ADJUST, byte))) { + printk("tda9840.o: TDA9840_STEREO_ADJUST error.\n"); + return -EFAULT; + } + + return 0; + } + + case TDA9840_DETECT: + { + int byte = 0x0; + + if ( -1 == (byte = i2c_smbus_read_byte_data(client, STEREO_ADJUST))) { + printk("tda9840.o: TDA9840_DETECT error while reading.\n"); + return -EFAULT; + } + + if( 0 != (byte & 0x80)) { + dprintk("tda9840.o: TDA9840_DETECT, register contents invalid.\n"); + return -EFAULT; + } + + dprintk("tda9840.o: TDA9840_DETECT, result: 0x%02x (original byte)\n",byte); + + return ((byte & 0x60) >> 5); + } + + case TDA9840_TEST: + { + int byte = *(int*)arg; + + dprintk("tda9840.o: TDA9840_TEST: 0x%02x\n",byte); + + /* mask out irrelevant bits */ + byte &= 0x3; + + if ( 0 != (result = i2c_smbus_write_byte_data(client, TEST, byte))) { + printk("tda9840.o: TDA9840_TEST error.\n"); + return -EFAULT; + } + + return 0; + } + + default: + return -ENOIOCTLCMD; + } + + return 0; +} + +static int tda9840_detect(struct i2c_adapter *adapter, int address, unsigned short flags, int kind) +{ + struct i2c_client *client; + int result = 0; + + int byte = 0x0; + + /* let's see whether this adapter can support what we need */ + if ( 0 == i2c_check_functionality(adapter, I2C_FUNC_SMBUS_READ_BYTE_DATA|I2C_FUNC_SMBUS_WRITE_BYTE_DATA)) { + return 0; + } + + /* allocate memory for client structure */ + client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); + if (0 == client) { + printk("tda9840.o: not enough kernel memory.\n"); + return -ENOMEM; + } + + /* fill client structure */ + sprintf(client->dev.name,"tda9840 (0x%02x)", address); + client->id = tda9840_id++; + client->flags = 0; + client->addr = address; + client->adapter = adapter; + client->driver = &driver; + i2c_set_clientdata(client, NULL); + + /* tell the i2c layer a new client has arrived */ + if (0 != (result = i2c_attach_client(client))) { + kfree(client); + return result; + } + + /* set initial values for level & stereo - adjustment, mode */ + byte = 0; + if ( 0 != (result = tda9840_command(client, TDA9840_LEVEL_ADJUST, &byte))) { + printk("tda9840.o: could not initialize ic #1. continuing anyway. (result:%d)\n",result); + } + + if ( 0 != (result = tda9840_command(client, TDA9840_STEREO_ADJUST, &byte))) { + printk("tda9840.o: could not initialize ic #2. continuing anyway. (result:%d)\n",result); + } + + byte = TDA9840_SET_MONO; + if ( 0 != (result = tda9840_command(client, TDA9840_SWITCH, &byte))) { + printk("tda9840.o: could not initialize ic #3. continuing anyway. (result:%d)\n",result); + } + + printk("tda9840.o: detected @ 0x%02x on adapter %s\n",2*address,&client->adapter->dev.name[0]); + + return 0; +} + +static int tda9840_attach(struct i2c_adapter *adapter) +{ + /* let's see whether this is a know adapter we can attach to */ + if( adapter->id != I2C_ALGO_SAA7146 ) { + dprintk("tda9840.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->dev.name,adapter->id); + return -ENODEV; + } + + return i2c_probe(adapter,&addr_data,&tda9840_detect); +} + +static int tda9840_detach(struct i2c_client *client) +{ + int err = 0; + + if ( 0 != (err = i2c_detach_client(client))) { + printk("tda9840.o: Client deregistration failed, client not detached.\n"); + return err; + } + + kfree(client); + + return 0; +} + +static struct i2c_driver driver = { +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54) + .owner = THIS_MODULE, +#endif + .name = "tda9840 driver", + .id = I2C_DRIVERID_TDA9840, + .flags = I2C_DF_NOTIFY, + .attach_adapter = tda9840_attach, + .detach_client = tda9840_detach, + .command = tda9840_command, +}; + +static int tda9840_init_module(void) +{ + i2c_add_driver(&driver); + return 0; +} + +static void tda9840_cleanup_module(void) +{ + i2c_del_driver(&driver); +} + +module_init(tda9840_init_module); +module_exit(tda9840_cleanup_module); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("tda9840 driver"); +MODULE_LICENSE("GPL"); + diff -Nru a/drivers/media/video/tda9840.h b/drivers/media/video/tda9840.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/tda9840.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,35 @@ +#ifndef __INCLUDED_TDA9840__ +#define __INCLUDED_TDA9840__ + +#define I2C_TDA9840 0x42 + +#define TDA9840_DETECT _IOR('v',1,int) +/* return values for TDA9840_DETCT */ +#define TDA9840_MONO_DETECT 0x0 +#define TDA9840_DUAL_DETECT 0x1 +#define TDA9840_STEREO_DETECT 0x2 +#define TDA9840_INCORRECT_DETECT 0x3 + +#define TDA9840_SWITCH _IOW('v',2,int) +/* modes than can be set with TDA9840_SWITCH */ +#define TDA9840_SET_MUTE 0x00 +#define TDA9840_SET_MONO 0x10 +#define TDA9840_SET_STEREO 0x2a +#define TDA9840_SET_LANG1 0x12 +#define TDA9840_SET_LANG2 0x1e +#define TDA9840_SET_BOTH 0x1a +#define TDA9840_SET_BOTH_R 0x16 +#define TDA9840_SET_EXTERNAL 0x7a + +/* values may range between +2.5 and -2.0; + the value has to be multiplied with 10 */ +#define TDA9840_LEVEL_ADJUST _IOW('v',3,int) + +/* values may range between +2.5 and -2.4; + the value has to be multiplied with 10 */ +#define TDA9840_STEREO_ADJUST _IOW('v',4,int) + +/* currently not implemented */ +#define TDA9840_TEST _IOW('v',5,int) + +#endif diff -Nru a/drivers/media/video/tea6415c.c b/drivers/media/video/tea6415c.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/tea6415c.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,238 @@ + /* + tea6415c.h - i2c-driver for the tea6415c by SGS Thomson + + Copyright (C) 1998-2003 Michael Hunold + + The tea6415c is a bus controlled video-matrix-switch + with 8 inputs and 6 outputs. + It is cascadable, i.e. it can be found at the addresses + 0x86 and 0x06 on the i2c-bus. + + For detailed informations download the specifications directly + from SGS Thomson at http://www.st.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License vs 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., 675 Mvss Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "tea6415c.h" + +static int debug = 0; /* insmod parameter */ +MODULE_PARM(debug,"i"); +#define dprintk if (debug) printk + +#define TEA6415C_NUM_INPUTS 8 +#define TEA6415C_NUM_OUTPUTS 6 + +/* addresses to scan, found only at 0x03 and/or 0x43 (7-bit) */ +static unsigned short normal_i2c[] = {I2C_TEA6415C_1, I2C_TEA6415C_2, I2C_CLIENT_END}; +static unsigned short normal_i2c_range[] = {I2C_CLIENT_END}; + +/* magic definition of all other variables and things */ +I2C_CLIENT_INSMOD; + +static struct i2c_driver driver; + +/* unique ID allocation */ +static int tea6415c_id = 0; + +/* this function is called by i2c_probe */ +static int tea6415c_detect(struct i2c_adapter *adapter, int address, unsigned short flags, int kind) +{ + struct i2c_client *client = 0; + int err = 0; + + /* let's see whether this adapter can support what we need */ + if ( 0 == i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WRITE_BYTE)) { + return 0; + } + + /* allocate memory for client structure */ + client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); + if (0 == client) { + return -ENOMEM; + } + + /* fill client structure */ + sprintf(client->dev.name,"tea6415c (0x%02x)", address); + client->id = tea6415c_id++; + client->flags = 0; + client->addr = address; + client->adapter = adapter; + client->driver = &driver; + + /* tell the i2c layer a new client has arrived */ + if (0 != (err = i2c_attach_client(client))) { + kfree(client); + return err; + } + + printk("tea6415c.o: detected @ 0x%02x on adapter %s\n",2*address,&client->adapter->dev.name[0]); + + return 0; +} + +static int tea6415c_attach(struct i2c_adapter *adapter) +{ + /* let's see whether this is a know adapter we can attach to */ + if( adapter->id != I2C_ALGO_SAA7146 ) { + dprintk("tea6415c.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->dev.name,adapter->id); + return -ENODEV; + } + + return i2c_probe(adapter,&addr_data,&tea6415c_detect); +} + +static int tea6415c_detach(struct i2c_client *client) +{ + int err = 0; + + if ( 0 != (err = i2c_detach_client(client))) { + printk("tea6415c.o: Client deregistration failed, client not detached.\n"); + return err; + } + + kfree(client); + + return 0; +} + +/* makes a connection between the input-pin 'i' and the output-pin 'o' + for the tea6415c-client 'client' */ +static int tea6415c_switch(struct i2c_client *client, int i, int o) +{ + u8 byte = 0; + + dprintk("tea6415c.o: tea6415c_switch: adr:0x%02x, i:%d, o:%d\n", client->addr, i, o); + + /* check if the pins are valid */ + if ( 0 == (( 1 == i || 3 == i || 5 == i || 6 == i || 8 == i || 10 == i || 20 == i || 11 == i ) && + (18 == o || 17 == o || 16 == o || 15 == o || 14 == o || 13 == o ))) + return -1; + + /* to understand this, have a look at the tea6415c-specs (p.5) */ + switch(o) { + case 18: + byte = 0x00; + break; + case 14: + byte = 0x20; + break; + case 16: + byte = 0x10; + break; + case 17: + byte = 0x08; + break; + case 15: + byte = 0x18; + break; + case 13: + byte = 0x28; + break; + }; + + switch(i) { + case 5: + byte |= 0x00; + break; + case 8: + byte |= 0x04; + break; + case 3: + byte |= 0x02; + break; + case 20: + byte |= 0x06; + break; + case 6: + byte |= 0x01; + break; + case 10: + byte |= 0x05; + break; + case 1: + byte |= 0x03; + break; + case 11: + byte |= 0x07; + break; + }; + + if ( 0 != i2c_smbus_write_byte(client,byte)) { + dprintk("tea6415c.o: tea6415c_switch: could not write to tea6415c\n"); + return -1; + } + + return 0; +} + +static int tea6415c_command(struct i2c_client *client, unsigned int cmd, void* arg) +{ + struct tea6415c_multiplex *v = (struct tea6415c_multiplex*)arg; + int result = 0; + + switch (cmd) { + case TEA6415C_SWITCH: { + result = tea6415c_switch(client,v->in,v->out); + break; + } + default: { + return -ENOIOCTLCMD; + } + } + + if ( 0 != result ) + return result; + + return 0; +} + +static struct i2c_driver driver = { +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54) + .owner = THIS_MODULE, +#endif + .name = "tea6415c driver", + .id = I2C_DRIVERID_TEA6415C, + .flags = I2C_DF_NOTIFY, + .attach_adapter = tea6415c_attach, + .detach_client = tea6415c_detach, + .command = tea6415c_command, +}; + +static int tea6415c_init_module(void) +{ + i2c_add_driver(&driver); + return 0; +} + +static void tea6415c_cleanup_module(void) +{ + i2c_del_driver(&driver); +} + +module_init(tea6415c_init_module); +module_exit(tea6415c_cleanup_module); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("tea6415c driver"); +MODULE_LICENSE("GPL"); + diff -Nru a/drivers/media/video/tea6415c.h b/drivers/media/video/tea6415c.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/tea6415c.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,39 @@ +#ifndef __INCLUDED_TEA6415C__ +#define __INCLUDED_TEA6415C__ + +/* possible i2c-addresses */ +#define I2C_TEA6415C_1 0x03 +#define I2C_TEA6415C_2 0x43 + +/* the tea6415c's design is quite brain-dead. although there are + 8 inputs and 6 outputs, these aren't enumerated in any way. because + I don't want to say "connect input pin 20 to output pin 17", I define + a "virtual" pin-order. */ + +/* input pins */ +#define TEA6415C_OUTPUT1 18 +#define TEA6415C_OUTPUT2 14 +#define TEA6415C_OUTPUT3 16 +#define TEA6415C_OUTPUT4 17 +#define TEA6415C_OUTPUT5 13 +#define TEA6415C_OUTPUT6 15 + +/* output pins */ +#define TEA6415C_INPUT1 5 +#define TEA6415C_INPUT2 8 +#define TEA6415C_INPUT3 3 +#define TEA6415C_INPUT4 20 +#define TEA6415C_INPUT5 6 +#define TEA6415C_INPUT6 10 +#define TEA6415C_INPUT7 1 +#define TEA6415C_INPUT8 11 + +struct tea6415c_multiplex +{ + int in; /* input-pin */ + int out; /* output-pin */ +}; + +#define TEA6415C_SWITCH _IOW('v',1,struct tea6415c_multiplex) + +#endif diff -Nru a/drivers/media/video/tea6420.c b/drivers/media/video/tea6420.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/tea6420.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,217 @@ + /* + tea6420.o - i2c-driver for the tea6420 by SGS Thomson + + Copyright (C) 1998-2003 Michael Hunold + + The tea6420 is a bus controlled audio-matrix with 5 stereo inputs, + 4 stereo outputs and gain control for each output. + It is cascadable, i.e. it can be found at the adresses 0x98 + and 0x9a on the i2c-bus. + + For detailed informations download the specifications directly + from SGS Thomson at http://www.st.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "tea6420.h" + +static int debug = 0; /* insmod parameter */ +MODULE_PARM(debug,"i"); +#define dprintk if (debug) printk + +/* addresses to scan, found only at 0x4c and/or 0x4d (7-Bit) */ +static unsigned short normal_i2c[] = {I2C_TEA6420_1, I2C_TEA6420_2, I2C_CLIENT_END}; +static unsigned short normal_i2c_range[] = {I2C_CLIENT_END}; + +/* magic definition of all other variables and things */ +I2C_CLIENT_INSMOD; + +static struct i2c_driver driver; + +/* unique ID allocation */ +static int tea6420_id = 0; + +/* make a connection between the input 'i' and the output 'o' + with gain 'g' for the tea6420-client 'client' (note: i = 6 means 'mute') */ +static int tea6420_switch(struct i2c_client *client, int i, int o, int g) +{ + u8 byte = 0; + + int result = 0; + + dprintk("tea6420.o: tea6420_switch: adr:0x%02x, i:%d, o:%d, g:%d\n",client->addr,i,o,g); + + /* check if the paramters are valid */ + if ( i < 1 || i > 6 || o < 1 || o > 4 || g < 0 || g > 6 || g%2 != 0 ) + return -1; + + byte = ((o-1)<<5); + byte |= (i-1); + + /* to understand this, have a look at the tea6420-specs (p.5) */ + switch(g) { + case 0: + byte |= (3<<3); + break; + case 2: + byte |= (2<<3); + break; + case 4: + byte |= (1<<3); + break; + case 6: + break; + } + + /* fixme?: 1 != ... => 0 != */ + if ( 0 != (result = i2c_smbus_write_byte(client,byte))) { + printk("tea6402:%d\n",result); + dprintk(KERN_ERR "tea6420.o: could not switch, result:%d\n",result); + return -EFAULT; + } + + return 0; +} + +/* this function is called by i2c_probe */ +static int tea6420_detect(struct i2c_adapter *adapter, int address, unsigned short flags, int kind) +{ + struct i2c_client *client; + int err = 0, i = 0; + + /* let's see whether this adapter can support what we need */ + if ( 0 == i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WRITE_BYTE)) { + return 0; + } + + /* allocate memory for client structure */ + client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); + if (0 == client) { + return -ENOMEM; + } + + /* fill client structure */ + sprintf(client->dev.name,"tea6420 (0x%02x)", address); + client->id = tea6420_id++; + client->flags = 0; + client->addr = address; + client->adapter = adapter; + client->driver = &driver; + i2c_set_clientdata(client, NULL); + + /* tell the i2c layer a new client has arrived */ + if (0 != (err = i2c_attach_client(client))) { + kfree(client); + return err; + } + + /* set initial values: set "mute"-input to all outputs at gain 0 */ + err = 0; + for(i = 1; i < 5; i++) { + err += tea6420_switch(client, 6, i, 0); + } + if( 0 != err) { + printk("tea6420.o: could not initialize chipset. continuing anyway.\n"); + } + + printk("tea6420.o: detected @ 0x%02x on adapter %s\n",2*address,&client->adapter->dev.name[0]); + + return 0; +} + +static int tea6420_attach(struct i2c_adapter *adapter) +{ + /* let's see whether this is a know adapter we can attach to */ + if( adapter->id != I2C_ALGO_SAA7146 ) { + dprintk("tea6420.o: refusing to probe on unknown adapter [name='%s',id=0x%x]\n",adapter->dev.name,adapter->id); + return -ENODEV; + } + + return i2c_probe(adapter,&addr_data,&tea6420_detect); +} + +static int tea6420_detach(struct i2c_client *client) +{ + int err = 0; + + if ( 0 != (err = i2c_detach_client(client))) { + printk("tea6420.o: Client deregistration failed, client not detached.\n"); + return err; + } + + kfree(client); + + return 0; +} + +static int tea6420_command(struct i2c_client *client, unsigned int cmd, void* arg) +{ + struct tea6420_multiplex *a = (struct tea6420_multiplex*)arg; + int result = 0; + + switch (cmd) { + case TEA6420_SWITCH: { + result = tea6420_switch(client,a->in,a->out,a->gain); + break; + } + default: { + return -ENOIOCTLCMD; + } + } + + if ( 0 != result ) + return result; + + return 0; +} + +static struct i2c_driver driver = { +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,54) + .owner = THIS_MODULE, +#endif + .name = "tea6420 driver", + .id = I2C_DRIVERID_TEA6420, + .flags = I2C_DF_NOTIFY, + .attach_adapter = tea6420_attach, + .detach_client = tea6420_detach, + .command = tea6420_command, +}; + +static int tea6420_init_module(void) +{ + i2c_add_driver(&driver); + return 0; +} + +static void tea6420_cleanup_module(void) +{ + i2c_del_driver(&driver); +} + +module_init(tea6420_init_module); +module_exit(tea6420_cleanup_module); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("tea6420 driver"); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/video/tea6420.h b/drivers/media/video/tea6420.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/video/tea6420.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,17 @@ +#ifndef __INCLUDED_TEA6420__ +#define __INCLUDED_TEA6420__ + +/* possible addresses */ +#define I2C_TEA6420_1 0x4c +#define I2C_TEA6420_2 0x4d + +struct tea6420_multiplex +{ + int in; /* input of audio switch */ + int out; /* output of audio switch */ + int gain; /* gain of connection */ +}; + +#define TEA6420_SWITCH _IOW('v',1,struct tea6420_multiplex) + +#endif diff -Nru a/drivers/mtd/mtdblock.c b/drivers/mtd/mtdblock.c --- a/drivers/mtd/mtdblock.c Sat Apr 12 14:44:07 2003 +++ b/drivers/mtd/mtdblock.c Sat Apr 12 14:44:07 2003 @@ -388,7 +388,7 @@ struct mtdblk_dev *mtdblk; unsigned int res; - while ((req = elv_next_request(&mtd_queue) != NULL) { + while ((req = elv_next_request(&mtd_queue)) != NULL) { struct mtdblk_dev **p = req->rq_disk->private_data; spin_unlock_irq(mtd_queue.queue_lock); mtdblk = *p; diff -Nru a/drivers/net/3c59x.c b/drivers/net/3c59x.c --- a/drivers/net/3c59x.c Sat Apr 12 14:44:05 2003 +++ b/drivers/net/3c59x.c Sat Apr 12 14:44:05 2003 @@ -479,11 +479,12 @@ int drv_flags; int io_size; } vortex_info_tbl[] __devinitdata = { -#define EISA_TBL_OFFSET 0 /* Offset of this entry for vortex_eisa_init */ {"3c590 Vortex 10Mbps", PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, +#define EISA_3C592_OFFSET 1 /* Offset of this entry for vortex_eisa_init */ {"3c592 EISA 10Mbps Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, +#define EISA_3C597_OFFSET 2 /* Offset of this entry for vortex_eisa_init */ {"3c597 EISA Fast Demon/Vortex", /* AKPM: from Don's 3c59x_cb.c 0.49H */ PCI_USES_IO|PCI_USES_MASTER, IS_VORTEX, 32, }, {"3c595 Vortex 100baseTx", @@ -947,8 +948,8 @@ #ifdef CONFIG_EISA static struct eisa_device_id vortex_eisa_ids[] = { - { "TCM5920" }, - { "TCM5970" }, + { "TCM5920", EISA_3C592_OFFSET }, + { "TCM5970", EISA_3C597_OFFSET }, { "" } }; @@ -976,7 +977,7 @@ return -EBUSY; if (vortex_probe1(device, ioaddr, inw(ioaddr + 0xC88) >> 12, - EISA_TBL_OFFSET, vortex_cards_found)) { + edev->id.driver_data, vortex_cards_found)) { release_region (ioaddr, VORTEX_TOTAL_SIZE); return -ENODEV; } @@ -1018,10 +1019,6 @@ { int eisa_found = 0; int orig_cards_found = vortex_cards_found; - - /* Now check all slots of the EISA bus. */ - if (!EISA_bus) - return 0; #ifdef CONFIG_EISA if (eisa_driver_register (&vortex_eisa_driver) >= 0) { diff -Nru a/drivers/net/8139cp.c b/drivers/net/8139cp.c --- a/drivers/net/8139cp.c Sat Apr 12 14:44:07 2003 +++ b/drivers/net/8139cp.c Sat Apr 12 14:44:08 2003 @@ -826,7 +826,7 @@ * Otherwise we could race with the device. */ first_eor = eor; - first_len = skb->len - skb->data_len; + first_len = skb_headlen(skb); first_mapping = pci_map_single(cp->pdev, skb->data, first_len, PCI_DMA_TODEVICE); cp->tx_skb[entry].skb = skb; diff -Nru a/drivers/net/acenic.c b/drivers/net/acenic.c --- a/drivers/net/acenic.c Sat Apr 12 14:44:07 2003 +++ b/drivers/net/acenic.c Sat Apr 12 14:44:07 2003 @@ -2829,7 +2829,7 @@ int i, len = 0; mapping = ace_map_tx_skb(ap, skb, NULL, idx); - flagsize = ((skb->len - skb->data_len) << 16); + flagsize = (skb_headlen(skb) << 16); if (skb->ip_summed == CHECKSUM_HW) flagsize |= BD_FLG_TCP_UDP_SUM; #if ACENIC_DO_VLAN diff -Nru a/drivers/net/appletalk/cops.c b/drivers/net/appletalk/cops.c --- a/drivers/net/appletalk/cops.c Sat Apr 12 14:44:08 2003 +++ b/drivers/net/appletalk/cops.c Sat Apr 12 14:44:08 2003 @@ -801,7 +801,7 @@ lp->stats.rx_dropped++; while(pkt_len--) /* Discard packet */ inb(ioaddr); - restore_flags(flags); + spin_unlock_irqrestore(&lp->lock, flags); return; } skb->dev = dev; diff -Nru a/drivers/net/appletalk/ltpc.c b/drivers/net/appletalk/ltpc.c --- a/drivers/net/appletalk/ltpc.c Sat Apr 12 14:44:07 2003 +++ b/drivers/net/appletalk/ltpc.c Sat Apr 12 14:44:07 2003 @@ -213,6 +213,7 @@ #include #include #include +#include #include #include #include @@ -235,6 +236,9 @@ /* our stuff */ #include "ltpc.h" +static spinlock_t txqueue_lock = SPIN_LOCK_UNLOCKED; +static spinlock_t mbox_lock = SPIN_LOCK_UNLOCKED; + /* function prototypes */ static int do_read(struct net_device *dev, void *cbuf, int cbuflen, void *dbuf, int dbuflen); @@ -283,17 +287,17 @@ { unsigned long flags; qel->next = NULL; - save_flags(flags); - cli(); + + spin_lock_irqsave(&txqueue_lock, flags); if (xmQtl) { xmQtl->next = qel; } else { xmQhd = qel; } xmQtl = qel; - restore_flags(flags); + spin_unlock_irqrestore(&txqueue_lock, flags); - if (debug&DEBUG_LOWER) + if (debug & DEBUG_LOWER) printk("enqueued a 0x%02x command\n",qel->cbuf[0]); } @@ -302,18 +306,18 @@ unsigned long flags; int i; struct xmitQel *qel=NULL; - save_flags(flags); - cli(); + + spin_lock_irqsave(&txqueue_lock, flags); if (xmQhd) { qel = xmQhd; xmQhd = qel->next; if(!xmQhd) xmQtl = NULL; } - restore_flags(flags); + spin_unlock_irqrestore(&txqueue_lock, flags); - if ((debug&DEBUG_LOWER) && qel) { + if ((debug & DEBUG_LOWER) && qel) { int n; - printk("ltpc: dequeued command "); + printk(KERN_DEBUG "ltpc: dequeued command "); n = qel->cbuflen; if (n>100) n=100; for(i=0;icbuf[i]); @@ -352,14 +356,13 @@ unsigned long flags; int i; - save_flags(flags); - cli(); + spin_lock_irqsave(&mbox_lock, flags); for(i=1;i<16;i++) if(!mboxinuse[i]) { mboxinuse[i]=1; - restore_flags(flags); + spin_unlock_irqrestore(&mbox_lock, flags); return i; } - restore_flags(flags); + spin_unlock_irqrestore(&mbox_lock, flags); return 0; } @@ -503,16 +506,13 @@ int i; int base = dev->base_addr; - save_flags(flags); - cli(); + spin_lock_irqsave(&txqueue_lock, flags); if(QInIdle) { - restore_flags(flags); + spin_unlock_irqrestore(&txqueue_lock, flags); return; } QInIdle = 1; - - - restore_flags(flags); + spin_unlock_irqrestore(&txqueue_lock, flags); /* this tri-states the IRQ line */ (void) inb_p(base+6); @@ -531,17 +531,17 @@ switch(state) { case 0xfc: /* incoming command */ - if (debug&DEBUG_LOWER) printk("idle: fc\n"); + if (debug & DEBUG_LOWER) printk("idle: fc\n"); handlefc(dev); break; case 0xfd: /* incoming data */ - if(debug&DEBUG_LOWER) printk("idle: fd\n"); + if(debug & DEBUG_LOWER) printk("idle: fd\n"); handlefd(dev); break; case 0xf9: /* result ready */ - if (debug&DEBUG_LOWER) printk("idle: f9\n"); + if (debug & DEBUG_LOWER) printk("idle: f9\n"); if(!mboxinuse[0]) { mboxinuse[0] = 1; qels[0].cbuf = rescbuf; @@ -570,7 +570,7 @@ break; case 0xfa: /* waiting for command */ - if(debug&DEBUG_LOWER) printk("idle: fa\n"); + if(debug & DEBUG_LOWER) printk("idle: fa\n"); if (xmQhd) { q=deQ(); memcpy(ltdmacbuf,q->cbuf,q->cbuflen); @@ -608,7 +608,7 @@ break; case 0Xfb: /* data transfer ready */ - if(debug&DEBUG_LOWER) printk("idle: fb\n"); + if(debug & DEBUG_LOWER) printk("idle: fb\n"); if(q->QWrite) { memcpy(ltdmabuf,q->dbuf,q->dbuflen); handlewrite(dev); @@ -826,7 +826,7 @@ struct lt_init c; int ltflags; - if(debug&DEBUG_VERBOSE) printk("ltpc_ioctl called\n"); + if(debug & DEBUG_VERBOSE) printk("ltpc_ioctl called\n"); switch(cmd) { case SIOCSIFADDR: @@ -872,7 +872,7 @@ static int ltpc_hard_header (struct sk_buff *skb, struct net_device *dev, unsigned short type, void *daddr, void *saddr, unsigned len) { - if(debug&DEBUG_VERBOSE) + if(debug & DEBUG_VERBOSE) printk("ltpc_hard_header called for device %s\n", dev->name); return 0; @@ -914,7 +914,7 @@ del_timer(<pc_timer); - if(debug&DEBUG_VERBOSE) { + if(debug & DEBUG_VERBOSE) { if (!ltpc_poll_counter) { ltpc_poll_counter = 50; printk("ltpc poll is alive\n"); @@ -951,7 +951,7 @@ cbuf.length = skb->len; /* this is host order */ skb->h.raw=skb->data; - if(debug&DEBUG_UPPER) { + if(debug & DEBUG_UPPER) { printk("command "); for(i=0;i<6;i++) printk("%02x ",((unsigned char *)&cbuf)[i]); @@ -960,7 +960,7 @@ do_write(dev,&cbuf,sizeof(cbuf),skb->h.raw,skb->len); - if(debug&DEBUG_UPPER) { + if(debug & DEBUG_UPPER) { printk("sent %d ddp bytes\n",skb->len); for(i=0;ilen;i++) printk("%02x ",skb->h.raw[i]); printk("\n"); @@ -984,7 +984,7 @@ static int __init ltpc_probe_dma(int base) { int dma = 0; - int timeout; + unsigned long timeout; unsigned long f; if (!request_dma(1,"ltpc")) { @@ -1055,16 +1055,13 @@ { int err; int x=0,y=0; - int timeout; int autoirq; - unsigned long flags; unsigned long f; int portfound=0; + unsigned long timeout; SET_MODULE_OWNER(dev); - save_flags(flags); - /* probe for the I/O port address */ if (io != 0x240 && request_region(0x220,8,"ltpc")) { x = inb_p(0x220+6); @@ -1093,15 +1090,13 @@ } if(!portfound) { /* give up in despair */ - printk ("LocalTalk card not found; 220 = %02x, 240 = %02x.\n", - x,y); - restore_flags(flags); + printk(KERN_ERR "LocalTalk card not found; 220 = %02x, 240 = %02x.\n", x,y); return -1; } /* probe for the IRQ line */ if (irq < 2) { - unsigned long irq_mask, delay; + unsigned long irq_mask; irq_mask = probe_irq_on(); /* reset the interrupt line */ @@ -1109,14 +1104,11 @@ inb_p(io+7); /* trigger an interrupt (I hope) */ inb_p(io+6); - - delay = jiffies + HZ/50; - while (time_before(jiffies, delay)) ; + mdelay(2); autoirq = probe_irq_off(irq_mask); if (autoirq == 0) { - printk("ltpc: probe at %#x failed to detect IRQ line.\n", - io); + printk(KERN_ERR "ltpc: probe at %#x failed to detect IRQ line.\n", io); } else { irq = autoirq; @@ -1129,12 +1121,11 @@ if (ltdmabuf) ltdmacbuf = <dmabuf[800]; if (!ltdmabuf) { - printk("ltpc: mem alloc failed\n"); - restore_flags(flags); - return(-1); + printk(KERN_ERR "ltpc: mem alloc failed\n"); + return -1; } - if(debug&DEBUG_VERBOSE) { + if(debug & DEBUG_VERBOSE) { printk("ltdmabuf pointer %08lx\n",(unsigned long) ltdmabuf); } @@ -1142,8 +1133,10 @@ inb_p(io+1); inb_p(io+3); - timeout = jiffies+2*HZ/100; - while(time_before(jiffies, timeout)) ; /* hold it in reset for a coupla jiffies */ + + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(2*HZ/100); + inb_p(io+0); inb_p(io+2); inb_p(io+7); /* clear reset */ @@ -1152,12 +1145,9 @@ inb_p(io+5); /* enable dma */ inb_p(io+6); /* tri-state interrupt line */ - timeout = jiffies+100*HZ/100; + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(HZ); - while(time_before(jiffies, timeout)) { - /* wait for the card to complete initialization */ - } - /* now, figure out which dma channel we're using, unless it's already been specified */ /* well, 0 is a legal DMA channel, but the LTPC card doesn't @@ -1165,8 +1155,7 @@ if (dma == 0) { dma = ltpc_probe_dma(io); if (!dma) { /* no dma channel */ - printk("No DMA channel found on ltpc card.\n"); - restore_flags(flags); + printk(KERN_ERR "No DMA channel found on ltpc card.\n"); return -1; } } @@ -1174,9 +1163,9 @@ /* print out friendly message */ if(irq) - printk("Apple/Farallon LocalTalk-PC card at %03x, IR%d, DMA%d.\n",io,irq,dma); + printk(KERN_INFO "Apple/Farallon LocalTalk-PC card at %03x, IR%d, DMA%d.\n",io,irq,dma); else - printk("Apple/Farallon LocalTalk-PC card at %03x, DMA%d. Using polled mode.\n",io,dma); + printk(KERN_INFO "Apple/Farallon LocalTalk-PC card at %03x, DMA%d. Using polled mode.\n",io,dma); /* seems more logical to do this *after* probing the card... */ err = ltpc_init(dev); @@ -1202,20 +1191,25 @@ (void) inb_p(io+3); (void) inb_p(io+2); timeout = jiffies+100*HZ/100; + while(time_before(jiffies, timeout)) { - if( 0xf9 == inb_p(io+6)) break; + if( 0xf9 == inb_p(io+6)) + break; + schedule(); } - if(debug&DEBUG_VERBOSE) { + if(debug & DEBUG_VERBOSE) { printk("setting up timer and irq\n"); } - if (irq) { - /* grab it and don't let go :-) */ - (void) request_irq( irq, <pc_interrupt, 0, "ltpc", dev); + /* grab it and don't let go :-) */ + if (irq && request_irq( irq, <pc_interrupt, 0, "ltpc", dev) >= 0) + { (void) inb_p(io+7); /* enable interrupts from board */ (void) inb_p(io+7); /* and reset irq line */ } else { + if( irq ) + printk(KERN_ERR "ltpc: IRQ already in use, using polled mode.\n"); /* polled mode -- 20 times per second */ /* this is really, really slow... should it poll more often? */ init_timer(<pc_timer); @@ -1224,7 +1218,6 @@ ltpc_timer.expires = jiffies + 5; add_timer(<pc_timer); - restore_flags(flags); } return 0; @@ -1294,7 +1287,7 @@ printk(KERN_DEBUG "could not register Localtalk-PC device\n"); return result; } else { - if(debug&DEBUG_VERBOSE) printk("0 from register_netdev\n"); + if(debug & DEBUG_VERBOSE) printk("0 from register_netdev\n"); return 0; } } @@ -1306,7 +1299,7 @@ ltpc_timer.data = 0; /* signal the poll routine that we're done */ - if(debug&DEBUG_VERBOSE) printk("freeing irq\n"); + if(debug & DEBUG_VERBOSE) printk("freeing irq\n"); if(dev_ltpc.irq) { free_irq(dev_ltpc.irq,&dev_ltpc); @@ -1316,7 +1309,7 @@ if(del_timer(<pc_timer)) { /* either the poll was never started, or a poll is in process */ - if(debug&DEBUG_VERBOSE) printk("waiting\n"); + if(debug & DEBUG_VERBOSE) printk("waiting\n"); /* if it's in process, wait a bit for it to finish */ timeout = jiffies+HZ; add_timer(<pc_timer); @@ -1327,31 +1320,31 @@ } } - if(debug&DEBUG_VERBOSE) printk("freeing dma\n"); + if(debug & DEBUG_VERBOSE) printk("freeing dma\n"); if(dev_ltpc.dma) { free_dma(dev_ltpc.dma); dev_ltpc.dma = 0; } - if(debug&DEBUG_VERBOSE) printk("freeing ioaddr\n"); + if(debug & DEBUG_VERBOSE) printk("freeing ioaddr\n"); if(dev_ltpc.base_addr) { release_region(dev_ltpc.base_addr,8); dev_ltpc.base_addr = 0; } - if(debug&DEBUG_VERBOSE) printk("free_pages\n"); + if(debug & DEBUG_VERBOSE) printk("free_pages\n"); free_pages( (unsigned long) ltdmabuf, get_order(1000)); ltdmabuf=NULL; ltdmacbuf=NULL; - if(debug&DEBUG_VERBOSE) printk("unregister_netdev\n"); + if(debug & DEBUG_VERBOSE) printk("unregister_netdev\n"); unregister_netdev(&dev_ltpc); - if(debug&DEBUG_VERBOSE) printk("returning from cleanup_module\n"); + if(debug & DEBUG_VERBOSE) printk("returning from cleanup_module\n"); } module_exit(ltpc_cleanup); diff -Nru a/drivers/net/arcnet/arcnet.c b/drivers/net/arcnet/arcnet.c --- a/drivers/net/arcnet/arcnet.c Sat Apr 12 14:44:09 2003 +++ b/drivers/net/arcnet/arcnet.c Sat Apr 12 14:44:09 2003 @@ -80,6 +80,7 @@ null_prepare_tx }; +static spinlock_t arcnet_lock = SPIN_LOCK_UNLOCKED; /* Exported function prototypes */ int arcnet_debug = ARCNET_DEBUG; @@ -186,10 +187,7 @@ void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc) { int i; - unsigned long flags; - save_flags(flags); - cli(); printk(KERN_DEBUG "%6s: skb dump (%s) follows:", dev->name, desc); for (i = 0; i < skb->len; i++) { if (i % 16 == 0) @@ -197,7 +195,6 @@ printk("%02X ", ((u_char *) skb->data)[i]); } printk("\n"); - restore_flags(flags); } EXPORT_SYMBOL(arcnet_dump_skb); @@ -215,10 +212,11 @@ unsigned long flags; static uint8_t buf[512]; - save_flags(flags); - cli(); - + /* hw.copy_from_card expects IRQ context so take the IRQ lock + to keep it single threaded */ + spin_lock_irqsave(&arcnet_lock, flags); lp->hw.copy_from_card(dev, bufnum, 0, buf, 512); + spin_unlock_irqrestore(&arcnet_lock, flags); /* if the offset[0] byte is nonzero, this is a 256-byte packet */ length = (buf[2] ? 256 : 512); @@ -231,7 +229,6 @@ } printk("\n"); - restore_flags(flags); } EXPORT_SYMBOL(arcnet_dump_packet); @@ -670,9 +667,7 @@ int status = ASTATUS(); char *msg; - save_flags(flags); - cli(); - + spin_lock_irqsave(&arcnet_lock, flags); if (status & TXFREEflag) { /* transmit _DID_ finish */ msg = " - missed IRQ?"; } else { @@ -687,8 +682,8 @@ AINTMASK(0); lp->intmask |= TXFREEflag; AINTMASK(lp->intmask); - - restore_flags(flags); + + spin_unlock_irqrestore(&arcnet_lock, flags); if (jiffies - lp->last_timeout > 10*HZ) { BUGMSG(D_EXTRA, "tx timed out%s (status=%Xh, intmask=%Xh, dest=%02Xh)\n", @@ -714,17 +709,14 @@ BUGMSG(D_DURING, "\n"); - if (dev == NULL) { - BUGMSG(D_DURING, "arcnet: irq %d for unknown device.\n", irq); - return; - } BUGMSG(D_DURING, "in arcnet_interrupt\n"); + spin_lock(&arcnet_lock); + lp = (struct arcnet_local *) dev->priv; - if (!lp) { - BUGMSG(D_DURING, "arcnet: irq ignored due to missing lp.\n"); - return; - } + if (!lp) + BUG(); + /* * RESET flag was enabled - if device is not running, we must clear it right * away (but nothing else). @@ -733,6 +725,7 @@ if (ASTATUS() & RESETflag) ACOMMAND(CFLAGScmd | RESETclear); AINTMASK(0); + spin_unlock(&arcnet_lock); return; } @@ -899,6 +892,8 @@ AINTMASK(0); udelay(1); AINTMASK(lp->intmask); + + spin_unlock(&arcnet_lock); } diff -Nru a/drivers/net/e100/e100_main.c b/drivers/net/e100/e100_main.c --- a/drivers/net/e100/e100_main.c Sat Apr 12 14:44:08 2003 +++ b/drivers/net/e100/e100_main.c Sat Apr 12 14:44:08 2003 @@ -2199,10 +2199,10 @@ (tcb->tbd_ptr)->tbd_buf_addr = cpu_to_le32(pci_map_single(bdp->pdev, skb->data, - (skb->len - skb->data_len), + skb_headlen(skb), PCI_DMA_TODEVICE)); (tcb->tbd_ptr)->tbd_buf_cnt = - cpu_to_le16(skb->len - skb->data_len); + cpu_to_le16(skb_headlen(skb)); for (i = 0; i < skb_shinfo(skb)->nr_frags; i++, tbd_arr_ptr++, frag++) { diff -Nru a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c --- a/drivers/net/hamradio/scc.c Sat Apr 12 14:44:09 2003 +++ b/drivers/net/hamradio/scc.c Sat Apr 12 14:44:09 2003 @@ -235,13 +235,14 @@ /* These provide interrupt save 2-step access to the Z8530 registers */ +static spinlock_t iolock; /* Guards paired accesses */ + static inline unsigned char InReg(io_port port, unsigned char reg) { unsigned long flags; unsigned char r; - - save_flags(flags); - cli(); + + spin_lock_irqsave(&iolock, flags); #ifdef SCC_LDELAY Outb(port, reg); udelay(SCC_LDELAY); @@ -251,16 +252,15 @@ Outb(port, reg); r=Inb(port); #endif - restore_flags(flags); + spin_unlock_irqrestore(&iolock, flags); return r; } static inline void OutReg(io_port port, unsigned char reg, unsigned char val) { unsigned long flags; - - save_flags(flags); - cli(); + + spin_lock_irqsave(&iolock, flags); #ifdef SCC_LDELAY Outb(port, reg); udelay(SCC_LDELAY); Outb(port, val); udelay(SCC_LDELAY); @@ -268,7 +268,7 @@ Outb(port, reg); Outb(port, val); #endif - restore_flags(flags); + spin_unlock_irqrestore(&iolock, flags); } static inline void wr(struct scc_channel *scc, unsigned char reg, @@ -295,9 +295,7 @@ { unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); if (scc->tx_buff != NULL) { dev_kfree_skb(scc->tx_buff); @@ -307,7 +305,7 @@ while (skb_queue_len(&scc->tx_queue)) dev_kfree_skb(skb_dequeue(&scc->tx_queue)); - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); } @@ -609,6 +607,7 @@ static void scc_isr_dispatch(struct scc_channel *scc, int vector) { + spin_lock(&scc->lock); switch (vector & VECTOR_MASK) { case TXINT: scc_txint(scc); break; @@ -616,6 +615,7 @@ case RXINT: scc_rxint(scc); break; case SPINT: scc_spint(scc); break; } + spin_unlock(&scc->lock); } /* If the card has a latch for the interrupt vector (like the PA0HZP card) @@ -722,12 +722,13 @@ static inline void set_speed(struct scc_channel *scc) { - disable_irq(scc->irq); + unsigned long flags; + spin_lock_irqsave(&scc->lock, flags); if (scc->modem.speed > 0) /* paranoia... */ set_brg(scc, (unsigned) (scc->clock / (scc->modem.speed * 64)) - 2); - - enable_irq(scc->irq); + + spin_unlock_irqrestore(&scc->lock, flags); } @@ -988,14 +989,8 @@ /* ----> SCC timer interrupt handler and friends. <---- */ -static void scc_start_tx_timer(struct scc_channel *scc, void (*handler)(unsigned long), unsigned long when) +static void __scc_start_tx_timer(struct scc_channel *scc, void (*handler)(unsigned long), unsigned long when) { - unsigned long flags; - - - save_flags(flags); - cli(); - del_timer(&scc->tx_t); if (when == 0) @@ -1009,17 +1004,22 @@ scc->tx_t.expires = jiffies + (when*HZ)/100; add_timer(&scc->tx_t); } +} + +static void scc_start_tx_timer(struct scc_channel *scc, void (*handler)(unsigned long), unsigned long when) +{ + unsigned long flags; - restore_flags(flags); + spin_lock_irqsave(&scc->lock, flags); + __scc_start_tx_timer(scc, handler, when); + spin_unlock_irqrestore(&scc->lock, flags); } static void scc_start_defer(struct scc_channel *scc) { unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); del_timer(&scc->tx_wdog); if (scc->kiss.maxdefer != 0 && scc->kiss.maxdefer != TIMER_OFF) @@ -1029,16 +1029,14 @@ scc->tx_wdog.expires = jiffies + HZ*scc->kiss.maxdefer; add_timer(&scc->tx_wdog); } - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); } static void scc_start_maxkeyup(struct scc_channel *scc) { unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); del_timer(&scc->tx_wdog); if (scc->kiss.maxkeyup != 0 && scc->kiss.maxkeyup != TIMER_OFF) @@ -1048,8 +1046,7 @@ scc->tx_wdog.expires = jiffies + HZ*scc->kiss.maxkeyup; add_timer(&scc->tx_wdog); } - - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); } /* @@ -1189,13 +1186,10 @@ struct scc_channel *scc = (struct scc_channel *) channel; unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); del_timer(&scc->tx_wdog); scc_key_trx(scc, TX_OFF); - - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); if (scc->stat.tx_state == TXS_TIMEOUT) /* we had a timeout? */ { @@ -1242,9 +1236,7 @@ struct scc_channel *scc = (struct scc_channel *) channel; unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); /* * let things settle down before we start to * accept new data. @@ -1259,7 +1251,7 @@ cl(scc, R15, TxUIE); /* count it. */ OutReg(scc->ctrl, R0, RES_Tx_P); - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); scc->stat.txerrs++; scc->stat.tx_state = TXS_TIMEOUT; @@ -1289,13 +1281,10 @@ static void scc_init_timer(struct scc_channel *scc) { unsigned long flags; - - save_flags(flags); - cli(); - - scc->stat.tx_state = TXS_IDLE; - restore_flags(flags); + spin_lock_irqsave(&scc->lock, flags); + scc->stat.tx_state = TXS_IDLE; + spin_unlock_irqrestore(&scc->lock, flags); } @@ -1414,9 +1403,7 @@ struct scc_channel *scc = (struct scc_channel *) channel; unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); del_timer(&scc->tx_wdog); scc_key_trx(scc, TX_OFF); wr(scc, R6, 0); @@ -1425,7 +1412,7 @@ Outb(scc->ctrl,RES_EXT_INT); netif_wake_queue(scc->dev); - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); } @@ -1434,9 +1421,7 @@ { unsigned long flags; - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); netif_stop_queue(scc->dev); scc_discard_buffers(scc); @@ -1460,7 +1445,7 @@ Outb(scc->ctrl,RES_EXT_INT); scc_key_trx(scc, TX_ON); - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); } /* ******************************************************************* */ @@ -1508,16 +1493,14 @@ /* Reset and pre-init Z8530 */ - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); + Outb(scc->ctrl, 0); OutReg(scc->ctrl,R9,FHWRES); /* force hardware reset */ udelay(100); /* give it 'a bit' more time than required */ wr(scc, R2, chip*16); /* interrupt vector */ wr(scc, R9, VIS); /* vector includes status */ - - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); } @@ -1548,6 +1531,8 @@ dev->priv = (void *) scc; dev->init = scc_net_init; + spin_lock_init(&scc->lock); + if ((addev? register_netdevice(dev) : register_netdev(dev)) != 0) { kfree(dev); return -EIO; @@ -1625,17 +1610,14 @@ netif_stop_queue(dev); - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); Outb(scc->ctrl,0); /* Make sure pointer is written */ wr(scc,R1,0); /* disable interrupts */ wr(scc,R3,0); + spin_unlock_irqrestore(&scc->lock, flags); - del_timer(&scc->tx_t); - del_timer(&scc->tx_wdog); - - restore_flags(flags); + del_timer_sync(&scc->tx_t); + del_timer_sync(&scc->tx_wdog); scc_discard_buffers(scc); @@ -1689,9 +1671,8 @@ return 0; } - save_flags(flags); - cli(); - + spin_lock_irqsave(&scc->lock, flags); + if (skb_queue_len(&scc->tx_queue) > scc->dev->tx_queue_len) { struct sk_buff *skb_del; skb_del = skb_dequeue(&scc->tx_queue); @@ -1710,12 +1691,11 @@ if(scc->stat.tx_state == TXS_IDLE || scc->stat.tx_state == TXS_IDLE2) { scc->stat.tx_state = TXS_BUSY; if (scc->kiss.fulldup == KISS_DUPLEX_HALF) - scc_start_tx_timer(scc, t_dwait, scc->kiss.waittime); + __scc_start_tx_timer(scc, t_dwait, scc->kiss.waittime); else - scc_start_tx_timer(scc, t_dwait, 0); + __scc_start_tx_timer(scc, t_dwait, 0); } - - restore_flags(flags); + spin_unlock_irqrestore(&scc->lock, flags); return 0; } @@ -1785,19 +1765,23 @@ hwcfg.clock = SCC_DEFAULT_CLOCK; #ifndef SCC_DONT_CHECK - disable_irq(hwcfg.irq); - - check_region(scc->ctrl, 1); - Outb(hwcfg.ctrl_a, 0); - OutReg(hwcfg.ctrl_a, R9, FHWRES); - udelay(100); - OutReg(hwcfg.ctrl_a,R13,0x55); /* is this chip really there? */ - udelay(5); - if (InReg(hwcfg.ctrl_a,R13) != 0x55) + if(request_region(scc->ctrl, 1, "scc-probe")) + { + disable_irq(hwcfg.irq); + Outb(hwcfg.ctrl_a, 0); + OutReg(hwcfg.ctrl_a, R9, FHWRES); + udelay(100); + OutReg(hwcfg.ctrl_a,R13,0x55); /* is this chip really there? */ + udelay(5); + + if (InReg(hwcfg.ctrl_a,R13) != 0x55) + found = 0; + enable_irq(hwcfg.irq); + release_region(scc->ctrl, 1); + } + else found = 0; - - enable_irq(hwcfg.irq); #endif if (found) @@ -2111,6 +2095,8 @@ printk(banner); + spin_lock_init(&iolock); + sprintf(devname,"%s0", SCC_DriverName); result = scc_net_setup(SCC_Info, devname, 0); @@ -2127,20 +2113,19 @@ static void __exit scc_cleanup_driver(void) { - unsigned long flags; io_port ctrl; int k; struct scc_channel *scc; - save_flags(flags); - cli(); - if (Nchips == 0) { unregister_netdev(SCC_Info[0].dev); kfree(SCC_Info[0].dev); } + /* Guard against chip prattle */ + local_irq_disable(); + for (k = 0; k < Nchips; k++) if ( (ctrl = SCC_ctrl[k].chan_A) ) { @@ -2149,6 +2134,13 @@ udelay(50); } + /* To unload the port must be closed so no real IRQ pending */ + for (k=0; k < NR_IRQS ; k++) + if (Ivec[k].used) free_irq(k, NULL); + + local_irq_enable(); + + /* Now clean up */ for (k = 0; k < Nchips*2; k++) { scc = &SCC_Info[k]; @@ -2164,13 +2156,9 @@ } } - for (k=0; k < NR_IRQS ; k++) - if (Ivec[k].used) free_irq(k, NULL); if (Vector_Latch) release_region(Vector_Latch, 1); - - restore_flags(flags); proc_net_remove("z8530drv"); } diff -Nru a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c --- a/drivers/net/hamradio/yam.c Sat Apr 12 14:44:09 2003 +++ b/drivers/net/hamradio/yam.c Sat Apr 12 14:44:09 2003 @@ -722,7 +722,6 @@ int counter = 100; int i; - sti(); for (i = 0; i < NR_PORTS; i++) { yp = &yam_ports[i]; @@ -768,7 +767,6 @@ off_t pos = 0; off_t begin = 0; - cli(); for (i = 0; i < NR_PORTS; i++) { if (yam_ports[i].iobase == 0 || yam_ports[i].irq == 0) @@ -802,8 +800,6 @@ if (pos > offset + length) break; } - - sti(); *start = buffer + (offset - begin); len -= (offset - begin); diff -Nru a/drivers/net/lp486e.c b/drivers/net/lp486e.c --- a/drivers/net/lp486e.c Sat Apr 12 14:44:07 2003 +++ b/drivers/net/lp486e.c Sat Apr 12 14:44:07 2003 @@ -56,7 +56,7 @@ All other communication is through memory! */ -#define SLOW_DOWN_IO udelay(5); +#define SLOW_DOWN_IO udelay(5) #include #include @@ -195,7 +195,7 @@ typedef u32 phys_addr; static inline phys_addr -va_to_pa(volatile void *x) { +va_to_pa(void *x) { return x ? virt_to_bus(x) : I596_NULL; } @@ -341,14 +341,15 @@ unsigned long tdr_stat; /* directly follows tdr */ int last_restart; - volatile struct i596_rbd *rbd_list; - volatile struct i596_rbd *rbd_tail; - volatile struct i596_rfd *rx_tail; - volatile struct i596_cmd *cmd_tail; - volatile struct i596_cmd *cmd_head; + struct i596_rbd *rbd_list; + struct i596_rbd *rbd_tail; + struct i596_rfd *rx_tail; + struct i596_cmd *cmd_tail; + struct i596_cmd *cmd_head; int cmd_backlog; unsigned long last_cmd; struct net_device_stats stats; + spinlock_t cmd_lock; }; static char init_setup[14] = { @@ -386,7 +387,7 @@ static int i596_timeout(struct net_device *dev, char *msg, int ct) { - volatile struct i596_private *lp; + struct i596_private *lp; int boguscnt = ct; lp = (struct i596_private *) dev->priv; @@ -398,13 +399,14 @@ return 1; } udelay(5); + barrier(); } return 0; } static inline int init_rx_bufs(struct net_device *dev, int num) { - volatile struct i596_private *lp; + struct i596_private *lp; struct i596_rfd *rfd; int i; // struct i596_rbd *rbd; @@ -517,8 +519,8 @@ /* selftest or dump */ static void i596_port_do(struct net_device *dev, int portcmd, char *cmdname) { - volatile struct i596_private *lp = dev->priv; - volatile u16 *outp; + struct i596_private *lp = dev->priv; + u16 *outp; int i, m; memset((void *)&(lp->dump), 0, sizeof(struct i596_dump)); @@ -541,7 +543,7 @@ static int i596_scp_setup(struct net_device *dev) { - volatile struct i596_private *lp = dev->priv; + struct i596_private *lp = dev->priv; int boguscnt; /* Setup SCP, ISCP, SCB */ @@ -608,6 +610,7 @@ return 1; } udelay(5); + barrier(); } /* I find here boguscnt==100, so no delay was required. */ @@ -616,7 +619,7 @@ static int init_i596(struct net_device *dev) { - volatile struct i596_private *lp; + struct i596_private *lp; if (i596_scp_setup(dev)) return 1; @@ -641,6 +644,8 @@ lp->scb.command = RX_START; CA(); + barrier(); + if (lp->scb.command && i596_timeout(dev, "Receive Unit start", 100)) return 1; @@ -649,7 +654,7 @@ /* Receive a single frame */ static inline int -i596_rx_one(struct net_device *dev, volatile struct i596_private *lp, +i596_rx_one(struct net_device *dev, struct i596_private *lp, struct i596_rfd *rfd, int *frames) { if (rfd->stat & RFD_STAT_OK) { @@ -703,14 +708,14 @@ static int i596_rx(struct net_device *dev) { - volatile struct i596_private *lp = (struct i596_private *) dev->priv; + struct i596_private *lp = (struct i596_private *) dev->priv; struct i596_rfd *rfd; int frames = 0; while (1) { rfd = pa_to_va(lp->scb.pa_rfd); if (!rfd) { - printk("i596_rx: NULL rfd?\n"); + printk(KERN_ERR "i596_rx: NULL rfd?\n"); return 0; } #if 1 @@ -725,6 +730,7 @@ lp->rx_tail->cmd = 0; lp->rx_tail = rfd; lp->scb.pa_rfd = rfd->pa_next; + barrier(); } return frames; @@ -732,7 +738,7 @@ static void i596_cleanup_cmd(struct net_device *dev) { - volatile struct i596_private *lp; + struct i596_private *lp; struct i596_cmd *cmd; lp = (struct i596_private *) dev->priv; @@ -770,6 +776,7 @@ break; } } + barrier(); } if (lp->scb.command && i596_timeout(dev, "i596_cleanup_cmd", 100)) @@ -778,9 +785,7 @@ lp->scb.pa_cmd = va_to_pa(lp->cmd_head); } -static inline void -i596_reset(struct net_device *dev, - volatile struct i596_private *lp, int ioaddr) { +static void i596_reset(struct net_device *dev, struct i596_private *lp, int ioaddr) { if (lp->scb.command && i596_timeout(dev, "i596_reset", 100)) ; @@ -789,7 +794,8 @@ lp->scb.command = CUC_ABORT | RX_ABORT; CA(); - + barrier(); + /* wait for shutdown */ if (lp->scb.command && i596_timeout(dev, "i596_reset(2)", 400)) ; @@ -803,7 +809,7 @@ } static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd) { - volatile struct i596_private *lp = dev->priv; + struct i596_private *lp = dev->priv; int ioaddr = dev->base_addr; unsigned long flags; @@ -811,8 +817,8 @@ cmd->command |= (CMD_EOL | CMD_INTR); cmd->pa_next = I596_NULL; - save_flags(flags); - cli(); + spin_lock_irqsave(&lp->cmd_lock, flags); + if (lp->cmd_head) { lp->cmd_tail->pa_next = va_to_pa(cmd); } else { @@ -827,64 +833,45 @@ lp->cmd_backlog++; lp->cmd_head = pa_to_va(lp->scb.pa_cmd); - restore_flags(flags); + spin_unlock_irqrestore(&lp->cmd_lock, flags); if (lp->cmd_backlog > 16) { int tickssofar = jiffies - lp->last_cmd; - if (tickssofar < 25) return; + if (tickssofar < HZ/4) + return; - printk("%s: command unit timed out, status resetting.\n", - dev->name); + printk(KERN_WARNING "%s: command unit timed out, status resetting.\n", dev->name); i596_reset(dev, lp, ioaddr); } } -static int -i596_open(struct net_device *dev) { +static int i596_open(struct net_device *dev) +{ int i; i = request_irq(dev->irq, &i596_interrupt, SA_SHIRQ, dev->name, dev); if (i) { - printk("%s: IRQ %d not free\n", dev->name, dev->irq); + printk(KERN_ERR "%s: IRQ %d not free\n", dev->name, dev->irq); return i; } if ((i = init_rx_bufs(dev, RX_RING_SIZE)) < RX_RING_SIZE) - printk("%s: only able to allocate %d receive buffers\n", - dev->name, i); + printk(KERN_ERR "%s: only able to allocate %d receive buffers\n", dev->name, i); if (i < 4) { -// release buffers free_irq(dev->irq, dev); return -EAGAIN; } - netif_start_queue(dev); - init_i596(dev); - return 0; /* Always succeed */ } -static int -i596_start_xmit (struct sk_buff *skb, struct net_device *dev) { - volatile struct i596_private *lp = dev->priv; +static int i596_start_xmit (struct sk_buff *skb, struct net_device *dev) { + struct i596_private *lp = dev->priv; struct tx_cmd *tx_cmd; short length; - /* If some higher level thinks we've missed a tx-done interrupt - we are passed NULL. n.b. dev_tint handles the cli()/sti() - itself. */ - if (skb == NULL) { - printk ("What about dev_tint\n"); - /* dev_tint(dev); */ - return 0; - } - - /* shouldn't happen */ - if (skb->len <= 0) - return 0; - length = skb->len; if (length < ETH_ZLEN) { @@ -896,14 +883,10 @@ dev->trans_start = jiffies; - tx_cmd = (struct tx_cmd *) - kmalloc ((sizeof (struct tx_cmd) - + sizeof (struct i596_tbd)), GFP_ATOMIC); + tx_cmd = (struct tx_cmd *) kmalloc ((sizeof (struct tx_cmd) + sizeof (struct i596_tbd)), GFP_ATOMIC); if (tx_cmd == NULL) { - printk ("%s: i596_xmit Memory squeeze, dropping packet.\n", - dev->name); + printk(KERN_WARNING "%s: i596_xmit Memory squeeze, dropping packet.\n", dev->name); lp->stats.tx_dropped++; - dev_kfree_skb (skb); } else { struct i596_tbd *tx_cmd_tbd; @@ -934,11 +917,11 @@ static void i596_tx_timeout (struct net_device *dev) { - volatile struct i596_private *lp = dev->priv; + struct i596_private *lp = dev->priv; int ioaddr = dev->base_addr; /* Transmitter timeout, serious problems. */ - printk ("%s: transmit timed out, status resetting.\n", dev->name); + printk(KERN_WARNING "%s: transmit timed out, status resetting.\n", dev->name); lp->stats.tx_errors++; /* Try to restart the adaptor */ @@ -957,8 +940,8 @@ netif_wake_queue(dev); } -static void -print_eth(char *add) { +static void print_eth(char *add) +{ int i; printk ("Dest "); @@ -975,9 +958,8 @@ (unsigned char) add[12], (unsigned char) add[13]); } -int __init -lp486e_probe(struct net_device *dev) { - volatile struct i596_private *lp; +int __init lp486e_probe(struct net_device *dev) { + struct i596_private *lp; unsigned char eth_addr[6] = { 0, 0xaa, 0, 0, 0, 0 }; unsigned char *bios; int i, j; @@ -996,14 +978,14 @@ /* * Allocate working memory, 16-byte aligned */ - dev->mem_start = (unsigned long) - kmalloc(sizeof(struct i596_private) + 0x0f, GFP_KERNEL); + dev->mem_start = (unsigned long) kmalloc(sizeof(struct i596_private) + 0x0f, GFP_KERNEL); if (!dev->mem_start) goto err_out; dev->priv = (void *)((dev->mem_start + 0xf) & 0xfffffff0); lp = (struct i596_private *) dev->priv; memset((void *)lp, 0, sizeof(struct i596_private)); - + spin_lock_init(&lp->cmd_lock); + /* * Do we really have this thing? */ @@ -1071,14 +1053,16 @@ static inline void i596_handle_CU_completion(struct net_device *dev, - volatile struct i596_private *lp, + struct i596_private *lp, unsigned short status, unsigned short *ack_cmdp) { - volatile struct i596_cmd *cmd; + struct i596_cmd *cmd; int frames_out = 0; int commands_done = 0; int cmd_val; + unsigned long flags; + spin_lock_irqsave(&lp->cmd_lock, flags); cmd = lp->cmd_head; while (lp->cmd_head && (lp->cmd_head->status & CMD_STAT_C)) { @@ -1160,31 +1144,29 @@ lp->last_cmd = jiffies; } + barrier(); } cmd = lp->cmd_head; while (cmd && (cmd != lp->cmd_tail)) { cmd->command &= 0x1fff; cmd = pa_to_va(cmd->pa_next); + barrier(); } if (lp->cmd_head) *ack_cmdp |= CUC_START; lp->scb.pa_cmd = va_to_pa(lp->cmd_head); + spin_unlock_irqrestore(&lp->cmd_lock, flags); } static void i596_interrupt (int irq, void *dev_instance, struct pt_regs *regs) { struct net_device *dev = (struct net_device *) dev_instance; - volatile struct i596_private *lp; + struct i596_private *lp; unsigned short status, ack_cmd = 0; int frames_in = 0; - if (dev == NULL) { - printk ("i596_interrupt(): irq %d for unknown device.\n", irq); - return; - } - lp = (struct i596_private *) dev->priv; /* @@ -1251,7 +1233,7 @@ } static int i596_close(struct net_device *dev) { - volatile struct i596_private *lp = dev->priv; + struct i596_private *lp = dev->priv; netif_stop_queue(dev); @@ -1284,7 +1266,7 @@ */ static void set_multicast_list(struct net_device *dev) { - volatile struct i596_private *lp = dev->priv; + struct i596_private *lp = dev->priv; struct i596_cmd *cmd; if (i596_debug > 1) @@ -1294,12 +1276,9 @@ if (dev->mc_count > 0) { struct dev_mc_list *dmi; char *cp; - cmd = (struct i596_cmd *) - kmalloc(sizeof(struct i596_cmd)+2+dev->mc_count*6, - GFP_ATOMIC); + cmd = (struct i596_cmd *)kmalloc(sizeof(struct i596_cmd)+2+dev->mc_count*6, GFP_ATOMIC); if (cmd == NULL) { - printk ("%s: set_multicast Memory squeeze.\n", - dev->name); + printk (KERN_ERR "%s: set_multicast Memory squeeze.\n", dev->name); return; } cmd->command = CmdMulticastList; @@ -1316,8 +1295,7 @@ if (lp->set_conf.pa_next != I596_NULL) { return; } - if (dev->mc_count == 0 && - !(dev->flags & (IFF_PROMISC | IFF_ALLMULTI))) { + if (dev->mc_count == 0 && !(dev->flags & (IFF_PROMISC | IFF_ALLMULTI))) { if (dev->flags & IFF_ALLMULTI) dev->flags |= IFF_PROMISC; lp->i596_config[8] &= ~0x01; diff -Nru a/drivers/net/macmace.c b/drivers/net/macmace.c --- a/drivers/net/macmace.c Sat Apr 12 14:44:07 2003 +++ b/drivers/net/macmace.c Sat Apr 12 14:44:07 2003 @@ -319,8 +319,8 @@ /* Allocate the DMA ring buffers */ - mp->rx_ring = (void *) __get_free_pages(GFP_DMA, N_RX_PAGES); - mp->tx_ring = (void *) __get_free_pages(GFP_DMA, 0); + mp->rx_ring = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, N_RX_PAGES); + mp->tx_ring = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, 0); if (mp->tx_ring==NULL || mp->rx_ring==NULL) { if (mp->rx_ring) free_pages((u32) mp->rx_ring, N_RX_PAGES); diff -Nru a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c --- a/drivers/net/pcmcia/3c574_cs.c Sat Apr 12 14:44:06 2003 +++ b/drivers/net/pcmcia/3c574_cs.c Sat Apr 12 14:44:06 2003 @@ -3,6 +3,7 @@ Written 1993-1998 by Donald Becker, becker@scyld.com, (driver core) and David Hinds, dahinds@users.sourceforge.net (from his PC card code). + Locking fixes (C) Copyright 2003 Red Hat Inc This software may be used and distributed according to the terms of the GNU General Public License, incorporated herein by reference. @@ -11,6 +12,7 @@ following copyright: Copyright 1993 United States Government as represented by the Director, National Security Agency. + */ @@ -125,7 +127,7 @@ INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG); #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args) static char *version = -"3c574_cs.c 1.65 2001/10/13 00:08:50 Donald Becker/David Hinds, becker@scyld.com.\n"; +"3c574_cs.c 1.65ac1 2003/04/07 Donald Becker/David Hinds, becker@scyld.com.\n"; #else #define DEBUG(n, args...) #endif @@ -212,15 +214,15 @@ struct net_device dev; dev_node_t node; struct net_device_stats stats; - u16 advertising, partner; /* NWay media advertisement */ - unsigned char phys; /* MII device address */ - unsigned int - autoselect:1, default_media:3; /* Read from the EEPROM/Wn3_Config. */ + u16 advertising, partner; /* NWay media advertisement */ + unsigned char phys; /* MII device address */ + unsigned int autoselect:1, default_media:3; /* Read from the EEPROM/Wn3_Config. */ /* for transceiver monitoring */ struct timer_list media; - u_short media_status; - u_short fast_poll; - u_long last_irq; + unsigned short media_status; + unsigned short fast_poll; + unsigned long last_irq; + spinlock_t window_lock; /* Guards the Window selection */ }; /* Set iff a MII transceiver on any interface requires mdio preamble. @@ -231,18 +233,18 @@ /* Index of functions. */ static void tc574_config(dev_link_t *link); -static void tc574_release(u_long arg); +static void tc574_release(unsigned long arg); static int tc574_event(event_t event, int priority, event_callback_args_t *args); static void mdio_sync(ioaddr_t ioaddr, int bits); static int mdio_read(ioaddr_t ioaddr, int phy_id, int location); static void mdio_write(ioaddr_t ioaddr, int phy_id, int location, int value); -static u_short read_eeprom(ioaddr_t ioaddr, int index); +static unsigned short read_eeprom(ioaddr_t ioaddr, int index); static void tc574_wait_for_completion(struct net_device *dev, int cmd); static void tc574_reset(struct net_device *dev); -static void media_check(u_long arg); +static void media_check(unsigned long arg); static int el3_open(struct net_device *dev); static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev); static void el3_interrupt(int irq, void *dev_id, struct pt_regs *regs); @@ -266,15 +268,15 @@ dev_link_t *link, *next; for (link = dev_list; link; link = next) { next = link->next; - if (link->state & DEV_STALE_LINK) + if (link->state & DEV_STALE_LINK) tc574_detach(link); - } + } } static void cs_error(client_handle_t handle, int func, int ret) { #if CS_RELEASE_CODE < 0x2911 - CardServices(ReportError, dev_info, (void *)func, (void *)ret); + CardServices(ReportError, dev_info, (void *)func, (void *)ret); #else error_info_t err = { func, ret }; CardServices(ReportError, handle, &err); @@ -300,14 +302,16 @@ /* Create the PC card device object. */ lp = kmalloc(sizeof(*lp), GFP_KERNEL); - if (!lp) return NULL; + if (!lp) + return NULL; + memset(lp, 0, sizeof(*lp)); link = &lp->link; dev = &lp->dev; link->priv = dev->priv = link->irq.Instance = lp; init_timer(&link->release); link->release.function = &tc574_release; - link->release.data = (u_long)link; + link->release.data = (unsigned long)link; link->io.NumPorts1 = 32; link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; @@ -381,9 +385,9 @@ if (*linkp == NULL) return; - del_timer(&link->release); + del_timer_sync(&link->release); if (link->state & DEV_CONFIG) { - tc574_release((u_long)link); + tc574_release((unsigned long)link); if (link->state & DEV_STALE_CONFIG) { link->state |= DEV_STALE_LINK; return; @@ -417,7 +421,7 @@ struct net_device *dev = &lp->dev; tuple_t tuple; cisparse_t parse; - u_short buf[32]; + unsigned short buf[32]; int last_fn, last_ret, i, j; ioaddr_t ioaddr; u16 *phys_addr; @@ -562,7 +566,7 @@ cs_failed: cs_error(link->handle, last_fn, last_ret); failed: - tc574_release((u_long)link); + tc574_release((unsigned long)link); return; } /* tc574_config */ @@ -573,7 +577,7 @@ still open, this will be postponed until it is closed. */ -static void tc574_release(u_long arg) +static void tc574_release(unsigned long arg) { dev_link_t *link = (dev_link_t *)arg; @@ -652,12 +656,12 @@ { ioaddr_t ioaddr = dev->base_addr; EL3WINDOW(1); - printk(KERN_INFO " irq status %04x, rx status %04x, tx status " + printk(KERN_INFO " irq status %04x, rx status %04x, tx status " "%02x, tx free %04x\n", inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus), inb(ioaddr+TxStatus), inw(ioaddr+TxFree)); EL3WINDOW(4); - printk(KERN_INFO " diagnostics: fifo %04x net %04x ethernet %04x" + printk(KERN_INFO " diagnostics: fifo %04x net %04x ethernet %04x" " media %04x\n", inw(ioaddr+0x04), inw(ioaddr+0x06), inw(ioaddr+0x08), inw(ioaddr+0x0a)); EL3WINDOW(1); @@ -668,19 +672,18 @@ */ static void tc574_wait_for_completion(struct net_device *dev, int cmd) { - int i = 1500; - outw(cmd, dev->base_addr + EL3_CMD); - while (--i > 0) + int i = 1500; + outw(cmd, dev->base_addr + EL3_CMD); + while (--i > 0) if (!(inw(dev->base_addr + EL3_STATUS) & 0x1000)) break; - if (i == 0) - printk(KERN_NOTICE "%s: command 0x%04x did not complete!\n", - dev->name, cmd); + if (i == 0) + printk(KERN_NOTICE "%s: command 0x%04x did not complete!\n", dev->name, cmd); } /* Read a word from the EEPROM using the regular EEPROM access register. Assume that we are in register window zero. */ -static u_short read_eeprom(ioaddr_t ioaddr, int index) +static unsigned short read_eeprom(ioaddr_t ioaddr, int index) { int timer; outw(EEPROM_Read + index, ioaddr + Wn0EepromCmd); @@ -773,9 +776,11 @@ { struct el3_private *lp = (struct el3_private *)dev->priv; int i, ioaddr = dev->base_addr; + unsigned long flags; tc574_wait_for_completion(dev, TotalReset|0x10); + spin_lock_irqsave(&lp->window_lock, flags); /* Clear any transactions in progress. */ outw(0, ioaddr + RunnerWrCtrl); outw(0, ioaddr + RunnerRdCtrl); @@ -792,14 +797,18 @@ outb((dev->mtu > 1500 ? 0x40 : 0), ioaddr + Wn3_MAC_Ctrl); outl((lp->autoselect ? 0x01000000 : 0) | 0x0062001b, ioaddr + Wn3_Config); - /* Roadrunner only: Turn on the MII transceiver. */ outw(0x8040, ioaddr + Wn3_Options); mdelay(1); outw(0xc040, ioaddr + Wn3_Options); + EL3WINDOW(1); + spin_unlock_irqrestore(&lp->window_lock, flags); + tc574_wait_for_completion(dev, TxReset); tc574_wait_for_completion(dev, RxReset); mdelay(1); + spin_lock_irqsave(&lp->window_lock, flags); + EL3WINDOW(3); outw(0x8040, ioaddr + Wn3_Options); /* Switch to the stats window, and clear all stats by reading. */ @@ -815,6 +824,10 @@ /* .. enable any extra statistics bits.. */ outw(0x0040, ioaddr + Wn4_NetDiag); + + EL3WINDOW(1); + spin_unlock_irqrestore(&lp->window_lock, flags); + /* .. re-sync MII and re-fill what NWay is advertising. */ mdio_sync(ioaddr, 32); mdio_write(ioaddr, lp->phys, 4, lp->advertising); @@ -824,10 +837,10 @@ mdio_write(ioaddr, lp->phys, 16, i); } + spin_lock_irqsave(&lp->window_lock, flags); /* Switch to register set 1 for normal use, just for TxFree. */ - EL3WINDOW(1); - set_rx_mode(dev); + spin_unlock_irqrestore(&lp->window_lock, flags); outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */ outw(RxEnable, ioaddr + EL3_CMD); /* Enable the receiver. */ outw(TxEnable, ioaddr + EL3_CMD); /* Enable transmitter. */ @@ -849,12 +862,11 @@ return -ENODEV; link->open++; - MOD_INC_USE_COUNT; netif_start_queue(dev); tc574_reset(dev); lp->media.function = &media_check; - lp->media.data = (u_long)lp; + lp->media.data = (unsigned long)lp; lp->media.expires = jiffies + HZ; add_timer(&lp->media); @@ -881,14 +893,15 @@ static void pop_tx_status(struct net_device *dev) { - struct el3_private *lp = (struct el3_private *)dev->priv; - ioaddr_t ioaddr = dev->base_addr; - int i; + struct el3_private *lp = (struct el3_private *)dev->priv; + ioaddr_t ioaddr = dev->base_addr; + int i; - /* Clear the Tx status stack. */ - for (i = 32; i > 0; i--) { + /* Clear the Tx status stack. */ + for (i = 32; i > 0; i--) { u_char tx_status = inb(ioaddr + TxStatus); - if (!(tx_status & 0x84)) break; + if (!(tx_status & 0x84)) + break; /* reset transmitter on jabber error or underrun */ if (tx_status & 0x30) tc574_wait_for_completion(dev, TxReset); @@ -899,17 +912,20 @@ lp->stats.tx_aborted_errors++; } outb(0x00, ioaddr + TxStatus); /* Pop the status stack. */ - } + } } static int el3_start_xmit(struct sk_buff *skb, struct net_device *dev) { ioaddr_t ioaddr = dev->base_addr; + struct el3_private *lp = (struct el3_private *)dev->priv; + unsigned long flags; DEBUG(3, "%s: el3_start_xmit(length = %ld) called, " "status %4.4x.\n", dev->name, (long)skb->len, inw(ioaddr + EL3_STATUS)); + spin_lock_irqsave(&lp->window_lock, flags); outw(skb->len, ioaddr + TX_FIFO); outw(0, ioaddr + TX_FIFO); outsl(ioaddr + TX_FIFO, skb->data, (skb->len+3)>>2); @@ -927,6 +943,8 @@ dev_kfree_skb (skb); pop_tx_status(dev); + spin_unlock(&lp->window_lock); + return 0; } @@ -945,6 +963,8 @@ DEBUG(3, "%s: interrupt, status %4.4x.\n", dev->name, inw(ioaddr + EL3_STATUS)); + spin_lock(&lp->window_lock); + while ((status = inw(ioaddr + EL3_STATUS)) & (IntLatch | RxComplete | RxEarly | StatsFull)) { if (!netif_device_present(dev) || @@ -1009,6 +1029,8 @@ DEBUG(3, "%s: exiting interrupt, status %4.4x.\n", dev->name, inw(ioaddr + EL3_STATUS)); + + spin_unlock(&lp->window_lock); return; } @@ -1017,41 +1039,38 @@ (and as a last resort, poll the NIC for events), and to monitor the MII, reporting changes in cable status. */ -static void media_check(u_long arg) +static void media_check(unsigned long arg) { - struct el3_private *lp = (struct el3_private *)arg; - struct net_device *dev = &lp->dev; - ioaddr_t ioaddr = dev->base_addr; - u_long flags; - u_short /* cable, */ media, partner; + struct el3_private *lp = (struct el3_private *)arg; + struct net_device *dev = &lp->dev; + ioaddr_t ioaddr = dev->base_addr; + unsigned long flags; + unsigned short /* cable, */ media, partner; if (!netif_device_present(dev)) goto reschedule; - /* Check for pending interrupt with expired latency timer: with - this, we can limp along even if the interrupt is blocked */ - if ((inw(ioaddr + EL3_STATUS) & IntLatch) && - (inb(ioaddr + Timer) == 0xff)) { + /* Check for pending interrupt with expired latency timer: with + this, we can limp along even if the interrupt is blocked */ + if ((inw(ioaddr + EL3_STATUS) & IntLatch) && (inb(ioaddr + Timer) == 0xff)) { if (!lp->fast_poll) printk(KERN_INFO "%s: interrupt(s) dropped!\n", dev->name); el3_interrupt(dev->irq, lp, NULL); lp->fast_poll = HZ; - } - if (lp->fast_poll) { + } + if (lp->fast_poll) { lp->fast_poll--; lp->media.expires = jiffies + 2; add_timer(&lp->media); return; - } + } - save_flags(flags); - cli(); + spin_lock_irqsave(&lp->window_lock, flags); EL3WINDOW(4); media = mdio_read(ioaddr, lp->phys, 1); partner = mdio_read(ioaddr, lp->phys, 5); EL3WINDOW(1); - restore_flags(flags); - + if (media != lp->media_status) { if ((media ^ lp->media_status) & 0x0004) printk(KERN_INFO "%s: %s link beat\n", dev->name, @@ -1086,10 +1105,11 @@ printk(KERN_INFO "%s: jabber detected\n", dev->name); lp->media_status = media; } + spin_unlock_irqrestore(&lp->window_lock, flags); reschedule: - lp->media.expires = jiffies + HZ; - add_timer(&lp->media); + lp->media.expires = jiffies + HZ; + add_timer(&lp->media); } static struct net_device_stats *el3_get_stats(struct net_device *dev) @@ -1109,37 +1129,41 @@ { struct el3_private *lp = (struct el3_private *)dev->priv; ioaddr_t ioaddr = dev->base_addr; + unsigned long flags; u8 rx, tx, up; DEBUG(2, "%s: updating the statistics.\n", dev->name); if (inw(ioaddr+EL3_STATUS) == 0xffff) /* No card. */ return; + + spin_lock_irqsave(&lp->window_lock, flags); /* Unlike the 3c509 we need not turn off stats updates while reading. */ /* Switch to the stats window, and read everything. */ EL3WINDOW(6); - lp->stats.tx_carrier_errors += inb(ioaddr + 0); - lp->stats.tx_heartbeat_errors += inb(ioaddr + 1); + lp->stats.tx_carrier_errors += inb(ioaddr + 0); + lp->stats.tx_heartbeat_errors += inb(ioaddr + 1); /* Multiple collisions. */ inb(ioaddr + 2); lp->stats.collisions += inb(ioaddr + 3); lp->stats.tx_window_errors += inb(ioaddr + 4); lp->stats.rx_fifo_errors += inb(ioaddr + 5); lp->stats.tx_packets += inb(ioaddr + 6); - up = inb(ioaddr + 9); + up = inb(ioaddr + 9); lp->stats.tx_packets += (up&0x30) << 4; - /* Rx packets */ inb(ioaddr + 7); - /* Tx deferrals */ inb(ioaddr + 8); - rx = inw(ioaddr + 10); - tx = inw(ioaddr + 12); + /* Rx packets */ inb(ioaddr + 7); + /* Tx deferrals */ inb(ioaddr + 8); + rx = inw(ioaddr + 10); + tx = inw(ioaddr + 12); EL3WINDOW(4); - /* BadSSD */ inb(ioaddr + 12); - up = inb(ioaddr + 13); + /* BadSSD */ inb(ioaddr + 12); + up = inb(ioaddr + 13); - lp->stats.tx_bytes += tx + ((up & 0xf0) << 12); + lp->stats.tx_bytes += tx + ((up & 0xf0) << 12); EL3WINDOW(1); + spin_unlock_irqrestore(&lp->window_lock, flags); } static int el3_rx(struct net_device *dev, int worklimit) @@ -1150,7 +1174,7 @@ DEBUG(3, "%s: in rx_packet(), status %4.4x, rx_status %4.4x.\n", dev->name, inw(ioaddr+EL3_STATUS), inw(ioaddr+RxStatus)); - while (!((rx_status = inw(ioaddr + RxStatus)) & 0x8000) && + while (!((rx_status = inw(ioaddr + RxStatus)) & 0x8000) && (--worklimit >= 0)) { if (rx_status & 0x4000) { /* Error, update stats. */ short error = rx_status & 0x3800; @@ -1225,7 +1249,7 @@ dev->name, rq->ifr_ifrn.ifrn_name, cmd, data[0], data[1], data[2], data[3]); - switch(cmd) { + switch(cmd) { case SIOCETHTOOL: return netdev_ethtool_ioctl(dev, (void *)rq->ifr_data); case SIOCDEVPRIVATE: /* Get the address of the PHY in use. */ @@ -1233,15 +1257,14 @@ case SIOCDEVPRIVATE+1: /* Read the specified MII register. */ { int saved_window; - unsigned long flags; + unsigned long flags; - save_flags(flags); - cli(); + spin_lock_irqsave(&lp->window_lock, flags); saved_window = inw(ioaddr + EL3_CMD) >> 13; EL3WINDOW(4); data[3] = mdio_read(ioaddr, data[0] & 0x1f, data[1] & 0x1f); EL3WINDOW(saved_window); - restore_flags(flags); + spin_unlock_irqrestore(&lp->window_lock, flags); return 0; } case SIOCDEVPRIVATE+2: /* Write the specified MII register */ @@ -1251,13 +1274,12 @@ if (!capable(CAP_NET_ADMIN)) return -EPERM; - save_flags(flags); - cli(); + spin_lock_irqsave(&lp->window_lock, flags); saved_window = inw(ioaddr + EL3_CMD) >> 13; EL3WINDOW(4); mdio_write(ioaddr, data[0] & 0x1f, data[1] & 0x1f, data[2]); EL3WINDOW(saved_window); - restore_flags(flags); + spin_unlock_irqrestore(&lp->window_lock, flags); return 0; } default: @@ -1310,12 +1332,9 @@ link->open--; netif_stop_queue(dev); - del_timer(&lp->media); + del_timer_sync(&lp->media); if (link->state & DEV_STALE_CONFIG) mod_timer(&link->release, jiffies + HZ/20); - - MOD_DEC_USE_COUNT; - return 0; } diff -Nru a/drivers/net/slip.c b/drivers/net/slip.c --- a/drivers/net/slip.c Sat Apr 12 14:44:10 2003 +++ b/drivers/net/slip.c Sat Apr 12 14:44:10 2003 @@ -836,8 +836,6 @@ if(!capable(CAP_NET_ADMIN)) return -EPERM; - MOD_INC_USE_COUNT; - /* RTnetlink lock is misused here to serialize concurrent opens of slip channels. There are better ways, but it is the simplest one. @@ -905,7 +903,6 @@ rtnl_unlock(); /* Count references from TTY module */ - MOD_DEC_USE_COUNT; return err; } @@ -953,7 +950,6 @@ #endif /* Count references from TTY module */ - MOD_DEC_USE_COUNT; } /************************************************************************ @@ -1122,8 +1118,7 @@ #endif /* CONFIG_SLIP_MODE_SLIP6 */ /* Perform I/O control on an active SLIP channel. */ -static int -slip_ioctl(struct tty_struct *tty, void *file, int cmd, void *arg) +static int slip_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg) { struct slip *sl = (struct slip *) tty->disc_data; unsigned int tmp; @@ -1135,11 +1130,8 @@ switch(cmd) { case SIOCGIFNAME: - /* Please, do not put this line under copy_to_user, - it breaks my old poor gcc on alpha --ANK - */ tmp = strlen(sl->dev->name) + 1; - if (copy_to_user(arg, sl->dev->name, tmp)) + if (copy_to_user((void *)arg, sl->dev->name, tmp)) return -EFAULT; return 0; @@ -1230,7 +1222,7 @@ /* Allow stty to read, but not set, the serial port */ case TCGETS: case TCGETA: - return n_tty_ioctl(tty, (struct file *) file, cmd, (unsigned long) arg); + return n_tty_ioctl(tty, file, cmd, arg); default: return -ENOIOCTLCMD; @@ -1349,34 +1341,28 @@ memset(slip_ctrls, 0, sizeof(void*)*slip_maxdev); /* Pointers */ /* Fill in our line protocol discipline, and register it */ - memset(&sl_ldisc, 0, sizeof(sl_ldisc)); - sl_ldisc.magic = TTY_LDISC_MAGIC; - sl_ldisc.name = "slip"; - sl_ldisc.flags = 0; - sl_ldisc.open = slip_open; - sl_ldisc.close = slip_close; - sl_ldisc.read = NULL; - sl_ldisc.write = NULL; - sl_ldisc.ioctl = (int (*)(struct tty_struct *, struct file *, - unsigned int, unsigned long)) slip_ioctl; - sl_ldisc.poll = NULL; - sl_ldisc.receive_buf = slip_receive_buf; - sl_ldisc.receive_room = slip_receive_room; - sl_ldisc.write_wakeup = slip_write_wakeup; if ((status = tty_register_ldisc(N_SLIP, &sl_ldisc)) != 0) { printk(KERN_ERR "SLIP: can't register line discipline (err = %d)\n", status); } - - return status; } - +static struct tty_ldisc sl_ldisc = +{ + .owner = THIS_MODULE, + .magic = TTY_LDISC_MAGIC, + .name = "slip", + .open = slip_open, + .close = slip_close, + .ioctl = slip_ioctl, + .receive_buf = slip_receive_buf, + .receive_room = slip_receive_room, + .write_wakeup = slip_write_wakeup, +}; #ifdef MODULE -int -init_module(void) +int init_module(void) { return slip_init_ctrl_dev(); } diff -Nru a/drivers/net/sungem.c b/drivers/net/sungem.c --- a/drivers/net/sungem.c Sat Apr 12 14:44:10 2003 +++ b/drivers/net/sungem.c Sat Apr 12 14:44:10 2003 @@ -894,7 +894,7 @@ /* We must give this initial chunk to the device last. * Otherwise we could race with the device. */ - first_len = skb->len - skb->data_len; + first_len = skb_headlen(skb); first_mapping = pci_map_page(gp->pdev, virt_to_page(skb->data), ((unsigned long) skb->data & ~PAGE_MASK), first_len, PCI_DMA_TODEVICE); diff -Nru a/drivers/net/sunhme.c b/drivers/net/sunhme.c --- a/drivers/net/sunhme.c Sat Apr 12 14:44:07 2003 +++ b/drivers/net/sunhme.c Sat Apr 12 14:44:07 2003 @@ -2319,7 +2319,7 @@ /* We must give this initial chunk to the device last. * Otherwise we could race with the device. */ - first_len = skb->len - skb->data_len; + first_len = skb_headlen(skb); first_mapping = hme_dma_map(hp, skb->data, first_len, DMA_TODEVICE); entry = NEXT_TX(entry); diff -Nru a/drivers/net/tg3.c b/drivers/net/tg3.c --- a/drivers/net/tg3.c Sat Apr 12 14:44:08 2003 +++ b/drivers/net/tg3.c Sat Apr 12 14:44:08 2003 @@ -1751,7 +1751,7 @@ pci_unmap_single(tp->pdev, pci_unmap_addr(ri, mapping), - (skb->len - skb->data_len), + skb_headlen(skb), PCI_DMA_TODEVICE); ri->skb = NULL; @@ -2316,7 +2316,7 @@ int len; if (i == 0) - len = skb->len - skb->data_len; + len = skb_headlen(skb); else len = skb_shinfo(skb)->frags[i-1].size; pci_unmap_single(tp->pdev, @@ -2401,7 +2401,7 @@ int would_hit_hwbug; unsigned long flags; - len = (skb->len - skb->data_len); + len = skb_headlen(skb); /* No BH disabling for tx_lock here. We are running in BH disabled * context and TX reclaim runs via tp->poll inside of a software @@ -2520,7 +2520,7 @@ i = 0; while (entry != last_plus_one) { if (i == 0) - len = skb->len - skb->data_len; + len = skb_headlen(skb); else len = skb_shinfo(skb)->frags[i-1].size; @@ -2593,7 +2593,7 @@ u32 len, entry, base_flags, mss; unsigned long flags; - len = (skb->len - skb->data_len); + len = skb_headlen(skb); /* No BH disabling for tx_lock here. We are running in BH disabled * context and TX reclaim runs via tp->poll inside of a software @@ -2829,7 +2829,7 @@ pci_unmap_single(tp->pdev, pci_unmap_addr(txp, mapping), - (skb->len - skb->data_len), + skb_headlen(skb), PCI_DMA_TODEVICE); txp->skb = NULL; diff -Nru a/drivers/net/typhoon.c b/drivers/net/typhoon.c --- a/drivers/net/typhoon.c Sat Apr 12 14:44:08 2003 +++ b/drivers/net/typhoon.c Sat Apr 12 14:44:08 2003 @@ -844,7 +844,7 @@ } else { int i, len; - len = skb->len - skb->data_len; + len = skb_headlen(skb); skb_dma = pci_map_single(tp->tx_pdev, skb->data, len, PCI_DMA_TODEVICE); txd->flags = TYPHOON_FRAG_DESC | TYPHOON_DESC_VALID; diff -Nru a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c --- a/drivers/net/wan/cosa.c Sat Apr 12 14:44:06 2003 +++ b/drivers/net/wan/cosa.c Sat Apr 12 14:44:06 2003 @@ -1057,7 +1057,8 @@ return -EPERM; } - if (get_user(addr, &(d->addr)) || + if (verify_area(VERIFY_READ, d, sizeof(*d)) || + __get_user(addr, &(d->addr)) || __get_user(len, &(d->len)) || __get_user(code, &(d->code))) return -EFAULT; @@ -1098,7 +1099,8 @@ return -EPERM; } - if (get_user(addr, &(d->addr)) || + if (verify_area(VERIFY_READ, d, sizeof(*d)) || + __get_user(addr, &(d->addr)) || __get_user(len, &(d->len)) || __get_user(code, &(d->code))) return -EFAULT; @@ -1106,7 +1108,7 @@ /* If something fails, force the user to reset the card */ cosa->firmware_status &= ~COSA_FW_RESET; - if ((i=readmem(cosa, d->code, len, addr)) < 0) { + if ((i=readmem(cosa, code, len, addr)) < 0) { printk(KERN_NOTICE "cosa%d: reading memory failed: %d\n", cosa->num, i); return -EIO; diff -Nru a/drivers/net/wireless/strip.c b/drivers/net/wireless/strip.c --- a/drivers/net/wireless/strip.c Sat Apr 12 14:44:09 2003 +++ b/drivers/net/wireless/strip.c Sat Apr 12 14:44:09 2003 @@ -69,9 +69,9 @@ */ #ifdef MODULE -static const char StripVersion[] = "1.3-STUART.CHESHIRE-MODULAR"; +static const char StripVersion[] = "1.3A-STUART.CHESHIRE-MODULAR"; #else -static const char StripVersion[] = "1.3-STUART.CHESHIRE"; +static const char StripVersion[] = "1.3A-STUART.CHESHIRE"; #endif #define TICKLE_TIMERS 0 @@ -89,18 +89,7 @@ #include #include -/* - * isdigit() and isspace() use the ctype[] array, which is not available - * to kernel modules. If compiling as a module, use a local definition - * of isdigit() and isspace() until _ctype is added to ksyms. - */ -#ifdef MODULE -# define isdigit(c) ('0' <= (c) && (c) <= '9') -# define isspace(c) ((c) == ' ' || (c) == '\t') -#else # include -#endif - #include #include #include @@ -131,10 +120,9 @@ * Starmode packet. */ -typedef union -{ - __u8 c[4]; - __u32 l; +typedef union { + __u8 c[4]; + __u32 l; } MetricomKey; /* @@ -142,10 +130,9 @@ * a single 32-bit long (which is convenient for assignment, equality testing etc.) */ -typedef union -{ - __u8 b[4]; - __u32 l; +typedef union { + __u8 b[4]; + __u32 l; } IPaddr; /* @@ -153,9 +140,8 @@ * a Metricom address. */ -typedef struct -{ - __u8 c[24]; +typedef struct { + __u8 c[24]; } MetricomAddressString; /* Encapsulation can expand packet of size x to 65/64x + 1 @@ -173,24 +159,21 @@ * already understands Ethernet headers. */ -typedef struct -{ - MetricomAddress dst_addr; /* Destination address, e.g. "0000-1234" */ - MetricomAddress src_addr; /* Source address, e.g. "0000-5678" */ - unsigned short protocol; /* The protocol type, using Ethernet codes */ +typedef struct { + MetricomAddress dst_addr; /* Destination address, e.g. "0000-1234" */ + MetricomAddress src_addr; /* Source address, e.g. "0000-5678" */ + unsigned short protocol; /* The protocol type, using Ethernet codes */ } STRIP_Header; -typedef struct -{ - char c[60]; +typedef struct { + char c[60]; } MetricomNode; #define NODE_TABLE_SIZE 32 -typedef struct -{ - struct timeval timestamp; - int num_nodes; - MetricomNode node[NODE_TABLE_SIZE]; +typedef struct { + struct timeval timestamp; + int num_nodes; + MetricomNode node[NODE_TABLE_SIZE]; } MetricomNodeTable; enum { FALSE = 0, TRUE = 1 }; @@ -198,123 +181,117 @@ /* * Holds the radio's firmware version. */ -typedef struct -{ - char c[50]; +typedef struct { + char c[50]; } FirmwareVersion; /* * Holds the radio's serial number. */ -typedef struct -{ - char c[18]; +typedef struct { + char c[18]; } SerialNumber; /* * Holds the radio's battery voltage. */ -typedef struct -{ - char c[11]; +typedef struct { + char c[11]; } BatteryVoltage; -typedef struct -{ - char c[8]; +typedef struct { + char c[8]; } char8; -enum -{ - NoStructure = 0, /* Really old firmware */ - StructuredMessages = 1, /* Parsable AT response msgs */ - ChecksummedMessages = 2 /* Parsable AT response msgs with checksums */ +enum { + NoStructure = 0, /* Really old firmware */ + StructuredMessages = 1, /* Parsable AT response msgs */ + ChecksummedMessages = 2 /* Parsable AT response msgs with checksums */ } FirmwareLevel; -struct strip -{ - int magic; - /* - * These are pointers to the malloc()ed frame buffers. - */ - - unsigned char *rx_buff; /* buffer for received IP packet*/ - unsigned char *sx_buff; /* buffer for received serial data*/ - int sx_count; /* received serial data counter */ - int sx_size; /* Serial buffer size */ - unsigned char *tx_buff; /* transmitter buffer */ - unsigned char *tx_head; /* pointer to next byte to XMIT */ - int tx_left; /* bytes left in XMIT queue */ - int tx_size; /* Serial buffer size */ - - /* - * STRIP interface statistics. - */ - - unsigned long rx_packets; /* inbound frames counter */ - unsigned long tx_packets; /* outbound frames counter */ - unsigned long rx_errors; /* Parity, etc. errors */ - unsigned long tx_errors; /* Planned stuff */ - unsigned long rx_dropped; /* No memory for skb */ - unsigned long tx_dropped; /* When MTU change */ - unsigned long rx_over_errors; /* Frame bigger then STRIP buf. */ - - unsigned long pps_timer; /* Timer to determine pps */ - unsigned long rx_pps_count; /* Counter to determine pps */ - unsigned long tx_pps_count; /* Counter to determine pps */ - unsigned long sx_pps_count; /* Counter to determine pps */ - unsigned long rx_average_pps; /* rx packets per second * 8 */ - unsigned long tx_average_pps; /* tx packets per second * 8 */ - unsigned long sx_average_pps; /* sent packets per second * 8 */ +struct strip { + int magic; + /* + * These are pointers to the malloc()ed frame buffers. + */ + + unsigned char *rx_buff; /* buffer for received IP packet */ + unsigned char *sx_buff; /* buffer for received serial data */ + int sx_count; /* received serial data counter */ + int sx_size; /* Serial buffer size */ + unsigned char *tx_buff; /* transmitter buffer */ + unsigned char *tx_head; /* pointer to next byte to XMIT */ + int tx_left; /* bytes left in XMIT queue */ + int tx_size; /* Serial buffer size */ + + /* + * STRIP interface statistics. + */ + + unsigned long rx_packets; /* inbound frames counter */ + unsigned long tx_packets; /* outbound frames counter */ + unsigned long rx_errors; /* Parity, etc. errors */ + unsigned long tx_errors; /* Planned stuff */ + unsigned long rx_dropped; /* No memory for skb */ + unsigned long tx_dropped; /* When MTU change */ + unsigned long rx_over_errors; /* Frame bigger then STRIP buf. */ + + unsigned long pps_timer; /* Timer to determine pps */ + unsigned long rx_pps_count; /* Counter to determine pps */ + unsigned long tx_pps_count; /* Counter to determine pps */ + unsigned long sx_pps_count; /* Counter to determine pps */ + unsigned long rx_average_pps; /* rx packets per second * 8 */ + unsigned long tx_average_pps; /* tx packets per second * 8 */ + unsigned long sx_average_pps; /* sent packets per second * 8 */ #ifdef EXT_COUNTERS - unsigned long rx_bytes; /* total received bytes */ - unsigned long tx_bytes; /* total received bytes */ - unsigned long rx_rbytes; /* bytes thru radio i/f */ - unsigned long tx_rbytes; /* bytes thru radio i/f */ - unsigned long rx_sbytes; /* tot bytes thru serial i/f */ - unsigned long tx_sbytes; /* tot bytes thru serial i/f */ - unsigned long rx_ebytes; /* tot stat/err bytes */ - unsigned long tx_ebytes; /* tot stat/err bytes */ + unsigned long rx_bytes; /* total received bytes */ + unsigned long tx_bytes; /* total received bytes */ + unsigned long rx_rbytes; /* bytes thru radio i/f */ + unsigned long tx_rbytes; /* bytes thru radio i/f */ + unsigned long rx_sbytes; /* tot bytes thru serial i/f */ + unsigned long tx_sbytes; /* tot bytes thru serial i/f */ + unsigned long rx_ebytes; /* tot stat/err bytes */ + unsigned long tx_ebytes; /* tot stat/err bytes */ #endif - /* - * Internal variables. - */ - - struct strip *next; /* The next struct in the list */ - struct strip **referrer; /* The pointer that points to us*/ - int discard; /* Set if serial error */ - int working; /* Is radio working correctly? */ - int firmware_level; /* Message structuring level */ - int next_command; /* Next periodic command */ - unsigned int user_baud; /* The user-selected baud rate */ - int mtu; /* Our mtu (to spot changes!) */ - long watchdog_doprobe; /* Next time to test the radio */ - long watchdog_doreset; /* Time to do next reset */ - long gratuitous_arp; /* Time to send next ARP refresh*/ - long arp_interval; /* Next ARP interval */ - struct timer_list idle_timer; /* For periodic wakeup calls */ - MetricomAddress true_dev_addr; /* True address of radio */ - int manual_dev_addr; /* Hack: See note below */ - - FirmwareVersion firmware_version; /* The radio's firmware version */ - SerialNumber serial_number; /* The radio's serial number */ - BatteryVoltage battery_voltage; /* The radio's battery voltage */ - - /* - * Other useful structures. - */ - - struct tty_struct *tty; /* ptr to TTY structure */ - struct net_device dev; /* Our device structure */ - - /* - * Neighbour radio records - */ + /* + * Internal variables. + */ + + struct strip *next; /* The next struct in the list */ + struct strip **referrer; /* The pointer that points to us */ + int discard; /* Set if serial error */ + int working; /* Is radio working correctly? */ + int firmware_level; /* Message structuring level */ + int next_command; /* Next periodic command */ + unsigned int user_baud; /* The user-selected baud rate */ + int mtu; /* Our mtu (to spot changes!) */ + long watchdog_doprobe; /* Next time to test the radio */ + long watchdog_doreset; /* Time to do next reset */ + long gratuitous_arp; /* Time to send next ARP refresh */ + long arp_interval; /* Next ARP interval */ + struct timer_list idle_timer; /* For periodic wakeup calls */ + MetricomAddress true_dev_addr; /* True address of radio */ + int manual_dev_addr; /* Hack: See note below */ + + FirmwareVersion firmware_version; /* The radio's firmware version */ + SerialNumber serial_number; /* The radio's serial number */ + BatteryVoltage battery_voltage; /* The radio's battery voltage */ + + /* + * Other useful structures. + */ + + struct tty_struct *tty; /* ptr to TTY structure */ + struct net_device dev; /* Our device structure */ - MetricomNodeTable portables; - MetricomNodeTable poletops; + /* + * Neighbour radio records + */ + + MetricomNodeTable portables; + MetricomNodeTable poletops; }; /* @@ -406,36 +383,39 @@ static const char CommandString3[] = "*&COMMAND*ATS300?"; /* Query version information */ static const char CommandString4[] = "*&COMMAND*ATS311?"; /* Query poletop list */ static const char CommandString5[] = "*&COMMAND*AT~LA"; /* Query portables list */ -typedef struct { const char *string; long length; } StringDescriptor; - -static const StringDescriptor CommandString[] = - { - { CommandString0, sizeof(CommandString0)-1 }, - { CommandString1, sizeof(CommandString1)-1 }, - { CommandString2, sizeof(CommandString2)-1 }, - { CommandString3, sizeof(CommandString3)-1 }, - { CommandString4, sizeof(CommandString4)-1 }, - { CommandString5, sizeof(CommandString5)-1 } - }; +typedef struct { + const char *string; + long length; +} StringDescriptor; + +static const StringDescriptor CommandString[] = { + {CommandString0, sizeof(CommandString0) - 1}, + {CommandString1, sizeof(CommandString1) - 1}, + {CommandString2, sizeof(CommandString2) - 1}, + {CommandString3, sizeof(CommandString3) - 1}, + {CommandString4, sizeof(CommandString4) - 1}, + {CommandString5, sizeof(CommandString5) - 1} +}; #define GOT_ALL_RADIO_INFO(S) \ ((S)->firmware_version.c[0] && \ (S)->battery_voltage.c[0] && \ memcmp(&(S)->true_dev_addr, zero_address.c, sizeof(zero_address))) -static const char hextable[16] = "0123456789ABCDEF"; +static const char hextable[16] = "0123456789ABCDEF"; static const MetricomAddress zero_address; -static const MetricomAddress broadcast_address = { { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF } }; +static const MetricomAddress broadcast_address = + { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} }; -static const MetricomKey SIP0Key = { { "SIP0" } }; -static const MetricomKey ARP0Key = { { "ARP0" } }; -static const MetricomKey ATR_Key = { { "ATR " } }; -static const MetricomKey ACK_Key = { { "ACK_" } }; -static const MetricomKey INF_Key = { { "INF_" } }; -static const MetricomKey ERR_Key = { { "ERR_" } }; +static const MetricomKey SIP0Key = { {"SIP0"} }; +static const MetricomKey ARP0Key = { {"ARP0"} }; +static const MetricomKey ATR_Key = { {"ATR "} }; +static const MetricomKey ACK_Key = { {"ACK_"} }; +static const MetricomKey INF_Key = { {"INF_"} }; +static const MetricomKey ERR_Key = { {"ERR_"} }; -static const long MaxARPInterval = 60 * HZ; /* One minute */ +static const long MaxARPInterval = 60 * HZ; /* One minute */ /* * Maximum Starmode packet length is 1183 bytes. Allowing 4 bytes for @@ -445,18 +425,17 @@ * long, including IP header, UDP header, and NFS header. Setting the STRIP * MTU to 1152 allows us to send default sized NFS packets without fragmentation. */ -static const unsigned short MAX_SEND_MTU = 1152; -static const unsigned short MAX_RECV_MTU = 1500; /* Hoping for Ethernet sized packets in the future! */ -static const unsigned short DEFAULT_STRIP_MTU = 1152; -static const int STRIP_MAGIC = 0x5303; -static const long LongTime = 0x7FFFFFFF; - +static const unsigned short MAX_SEND_MTU = 1152; +static const unsigned short MAX_RECV_MTU = 1500; /* Hoping for Ethernet sized packets in the future! */ +static const unsigned short DEFAULT_STRIP_MTU = 1152; +static const int STRIP_MAGIC = 0x5303; +static const long LongTime = 0x7FFFFFFF; /************************************************************************/ /* Global variables */ static struct strip *struct_strip_list; - +static spinlock_t strip_lock; /************************************************************************/ /* Macros */ @@ -486,99 +465,52 @@ /************************************************************************/ /* Utility routines */ -typedef unsigned long InterruptStatus; - -static inline InterruptStatus DisableInterrupts(void) +static int arp_query(unsigned char *haddr, u32 paddr, + struct net_device *dev) { - InterruptStatus x; - save_flags(x); - cli(); - return(x); -} + struct neighbour *neighbor_entry; -static inline void RestoreInterrupts(InterruptStatus x) -{ - restore_flags(x); -} - -static int arp_query(unsigned char *haddr, u32 paddr, struct net_device * dev) -{ - struct neighbour *neighbor_entry; + neighbor_entry = neigh_lookup(&arp_tbl, &paddr, dev); - neighbor_entry = neigh_lookup(&arp_tbl, &paddr, dev); - - if (neighbor_entry != NULL) - { - neighbor_entry->used = jiffies; - if (neighbor_entry->nud_state & NUD_VALID) - { - memcpy(haddr, neighbor_entry->ha, dev->addr_len); - return 1; + if (neighbor_entry != NULL) { + neighbor_entry->used = jiffies; + if (neighbor_entry->nud_state & NUD_VALID) { + memcpy(haddr, neighbor_entry->ha, dev->addr_len); + return 1; + } } - } - return 0; + return 0; } -static void DumpData(char *msg, struct strip *strip_info, __u8 *ptr, __u8 *end) +static void DumpData(char *msg, struct strip *strip_info, __u8 * ptr, + __u8 * end) { - static const int MAX_DumpData = 80; - __u8 pkt_text[MAX_DumpData], *p = pkt_text; - - *p++ = '\"'; - - while (ptr= 32 && *ptr <= 126) - { - *p++ = *ptr; - } - else - { - sprintf(p, "\\%02X", *ptr); - p+= 3; - } - } - ptr++; - } - - if (ptr == end) - { - *p++ = '\"'; - } + static const int MAX_DumpData = 80; + __u8 pkt_text[MAX_DumpData], *p = pkt_text; - *p++ = 0; - - printk(KERN_INFO "%s: %-13s%s\n", strip_info->dev.name, msg, pkt_text); -} + *p++ = '\"'; + + while (ptr < end && p < &pkt_text[MAX_DumpData - 4]) { + if (*ptr == '\\') { + *p++ = '\\'; + *p++ = '\\'; + } else { + if (*ptr >= 32 && *ptr <= 126) { + *p++ = *ptr; + } else { + sprintf(p, "\\%02X", *ptr); + p += 3; + } + } + ptr++; + } -#if 0 -static void HexDump(char *msg, struct strip *strip_info, __u8 *start, __u8 *end) -{ - __u8 *ptr = start; - printk(KERN_INFO "%s: %s: %d bytes\n", strip_info->dev.name, msg, end-ptr); + if (ptr == end) + *p++ = '\"'; + *p++ = 0; - while (ptr < end) - { - long offset = ptr - start; - __u8 text[80], *p = text; - while (ptr < end && p < &text[16*3]) - { - *p++ = hextable[*ptr >> 4]; - *p++ = hextable[*ptr++ & 0xF]; - *p++ = ' '; - } - p[-1] = 0; - printk(KERN_INFO "%s: %4lX %s\n", strip_info->dev.name, offset, text); - } + printk(KERN_INFO "%s: %-13s%s\n", strip_info->dev.name, msg, pkt_text); } -#endif /************************************************************************/ @@ -592,18 +524,17 @@ * C0-FF Run of 1-64 zeroes (ASCII 0) */ -typedef enum -{ - Stuff_Diff = 0x00, - Stuff_DiffZero = 0x40, - Stuff_Same = 0x80, - Stuff_Zero = 0xC0, - Stuff_NoCode = 0xFF, /* Special code, meaning no code selected */ - - Stuff_CodeMask = 0xC0, - Stuff_CountMask = 0x3F, - Stuff_MaxCount = 0x3F, - Stuff_Magic = 0x0D /* The value we are eliminating */ +typedef enum { + Stuff_Diff = 0x00, + Stuff_DiffZero = 0x40, + Stuff_Same = 0x80, + Stuff_Zero = 0xC0, + Stuff_NoCode = 0xFF, /* Special code, meaning no code selected */ + + Stuff_CodeMask = 0xC0, + Stuff_CountMask = 0x3F, + Stuff_MaxCount = 0x3F, + Stuff_Magic = 0x0D /* The value we are eliminating */ } StuffingCode; /* StuffData encodes the data starting at "src" for "length" bytes. @@ -622,138 +553,122 @@ #define StuffData_FinishBlock(X) \ (*code_ptr = (X) ^ Stuff_Magic, code = Stuff_NoCode) -static __u8 *StuffData(__u8 *src, __u32 length, __u8 *dst, __u8 **code_ptr_ptr) +static __u8 *StuffData(__u8 * src, __u32 length, __u8 * dst, + __u8 ** code_ptr_ptr) { - __u8 *end = src + length; - __u8 *code_ptr = *code_ptr_ptr; - __u8 code = Stuff_NoCode, count = 0; - - if (!length) - return(dst); - - if (code_ptr) - { - /* - * Recover state from last call, if applicable - */ - code = (*code_ptr ^ Stuff_Magic) & Stuff_CodeMask; - count = (*code_ptr ^ Stuff_Magic) & Stuff_CountMask; - } - - while (src < end) - { - switch (code) - { - /* Stuff_NoCode: If no current code, select one */ - case Stuff_NoCode: - /* Record where we're going to put this code */ - code_ptr = dst++; - count = 0; /* Reset the count (zero means one instance) */ - /* Tentatively start a new block */ - if (*src == 0) - { - code = Stuff_Zero; - src++; - } - else - { - code = Stuff_Same; - *dst++ = *src++ ^ Stuff_Magic; - } - /* Note: We optimistically assume run of same -- */ - /* which will be fixed later in Stuff_Same */ - /* if it turns out not to be true. */ - break; - - /* Stuff_Zero: We already have at least one zero encoded */ - case Stuff_Zero: - /* If another zero, count it, else finish this code block */ - if (*src == 0) - { - count++; - src++; - } - else - { - StuffData_FinishBlock(Stuff_Zero + count); - } - break; - - /* Stuff_Same: We already have at least one byte encoded */ - case Stuff_Same: - /* If another one the same, count it */ - if ((*src ^ Stuff_Magic) == code_ptr[1]) - { - count++; - src++; - break; - } - /* else, this byte does not match this block. */ - /* If we already have two or more bytes encoded, finish this code block */ - if (count) - { - StuffData_FinishBlock(Stuff_Same + count); - break; - } - /* else, we only have one so far, so switch to Stuff_Diff code */ - code = Stuff_Diff; - /* and fall through to Stuff_Diff case below - * Note cunning cleverness here: case Stuff_Diff compares - * the current character with the previous two to see if it - * has a run of three the same. Won't this be an error if - * there aren't two previous characters stored to compare with? - * No. Because we know the current character is *not* the same - * as the previous one, the first test below will necessarily - * fail and the send half of the "if" won't be executed. - */ - - /* Stuff_Diff: We have at least two *different* bytes encoded */ - case Stuff_Diff: - /* If this is a zero, must encode a Stuff_DiffZero, and begin a new block */ - if (*src == 0) - { - StuffData_FinishBlock(Stuff_DiffZero + count); - } - /* else, if we have three in a row, it is worth starting a Stuff_Same block */ - else if ((*src ^ Stuff_Magic)==dst[-1] && dst[-1]==dst[-2]) - { - /* Back off the last two characters we encoded */ - code += count-2; - /* Note: "Stuff_Diff + 0" is an illegal code */ - if (code == Stuff_Diff + 0) - { - code = Stuff_Same + 0; - } - StuffData_FinishBlock(code); - code_ptr = dst-2; - /* dst[-1] already holds the correct value */ - count = 2; /* 2 means three bytes encoded */ - code = Stuff_Same; - } - /* else, another different byte, so add it to the block */ - else - { - *dst++ = *src ^ Stuff_Magic; - count++; - } - src++; /* Consume the byte */ - break; - } - if (count == Stuff_MaxCount) - { - StuffData_FinishBlock(code + count); - } - } - if (code == Stuff_NoCode) - { - *code_ptr_ptr = NULL; - } - else - { - *code_ptr_ptr = code_ptr; - StuffData_FinishBlock(code + count); - } - return(dst); + __u8 *end = src + length; + __u8 *code_ptr = *code_ptr_ptr; + __u8 code = Stuff_NoCode, count = 0; + + if (!length) + return (dst); + + if (code_ptr) { + /* + * Recover state from last call, if applicable + */ + code = (*code_ptr ^ Stuff_Magic) & Stuff_CodeMask; + count = (*code_ptr ^ Stuff_Magic) & Stuff_CountMask; + } + + while (src < end) { + switch (code) { + /* Stuff_NoCode: If no current code, select one */ + case Stuff_NoCode: + /* Record where we're going to put this code */ + code_ptr = dst++; + count = 0; /* Reset the count (zero means one instance) */ + /* Tentatively start a new block */ + if (*src == 0) { + code = Stuff_Zero; + src++; + } else { + code = Stuff_Same; + *dst++ = *src++ ^ Stuff_Magic; + } + /* Note: We optimistically assume run of same -- */ + /* which will be fixed later in Stuff_Same */ + /* if it turns out not to be true. */ + break; + + /* Stuff_Zero: We already have at least one zero encoded */ + case Stuff_Zero: + /* If another zero, count it, else finish this code block */ + if (*src == 0) { + count++; + src++; + } else { + StuffData_FinishBlock(Stuff_Zero + count); + } + break; + + /* Stuff_Same: We already have at least one byte encoded */ + case Stuff_Same: + /* If another one the same, count it */ + if ((*src ^ Stuff_Magic) == code_ptr[1]) { + count++; + src++; + break; + } + /* else, this byte does not match this block. */ + /* If we already have two or more bytes encoded, finish this code block */ + if (count) { + StuffData_FinishBlock(Stuff_Same + count); + break; + } + /* else, we only have one so far, so switch to Stuff_Diff code */ + code = Stuff_Diff; + /* and fall through to Stuff_Diff case below + * Note cunning cleverness here: case Stuff_Diff compares + * the current character with the previous two to see if it + * has a run of three the same. Won't this be an error if + * there aren't two previous characters stored to compare with? + * No. Because we know the current character is *not* the same + * as the previous one, the first test below will necessarily + * fail and the send half of the "if" won't be executed. + */ + + /* Stuff_Diff: We have at least two *different* bytes encoded */ + case Stuff_Diff: + /* If this is a zero, must encode a Stuff_DiffZero, and begin a new block */ + if (*src == 0) { + StuffData_FinishBlock(Stuff_DiffZero + + count); + } + /* else, if we have three in a row, it is worth starting a Stuff_Same block */ + else if ((*src ^ Stuff_Magic) == dst[-1] + && dst[-1] == dst[-2]) { + /* Back off the last two characters we encoded */ + code += count - 2; + /* Note: "Stuff_Diff + 0" is an illegal code */ + if (code == Stuff_Diff + 0) { + code = Stuff_Same + 0; + } + StuffData_FinishBlock(code); + code_ptr = dst - 2; + /* dst[-1] already holds the correct value */ + count = 2; /* 2 means three bytes encoded */ + code = Stuff_Same; + } + /* else, another different byte, so add it to the block */ + else { + *dst++ = *src ^ Stuff_Magic; + count++; + } + src++; /* Consume the byte */ + break; + } + if (count == Stuff_MaxCount) { + StuffData_FinishBlock(code + count); + } + } + if (code == Stuff_NoCode) { + *code_ptr_ptr = NULL; + } else { + *code_ptr_ptr = code_ptr; + StuffData_FinishBlock(code + count); + } + return (dst); } /* @@ -776,78 +691,75 @@ * call to resume correctly). */ -static __u8 *UnStuffData(__u8 *src, __u8 *end, __u8 *dst, __u32 dst_length) +static __u8 *UnStuffData(__u8 * src, __u8 * end, __u8 * dst, + __u32 dst_length) { - __u8 *dst_end = dst + dst_length; - /* Sanity check */ - if (!src || !end || !dst || !dst_length) - return(NULL); - while (src < end && dst < dst_end) - { - int count = (*src ^ Stuff_Magic) & Stuff_CountMask; - switch ((*src ^ Stuff_Magic) & Stuff_CodeMask) - { - case Stuff_Diff: - if (src+1+count >= end) - return(NULL); - do - { - *dst++ = *++src ^ Stuff_Magic; - } - while(--count >= 0 && dst < dst_end); - if (count < 0) - src += 1; - else - { - if (count == 0) - *src = Stuff_Same ^ Stuff_Magic; - else - *src = (Stuff_Diff + count) ^ Stuff_Magic; - } - break; - case Stuff_DiffZero: - if (src+1+count >= end) - return(NULL); - do - { - *dst++ = *++src ^ Stuff_Magic; - } - while(--count >= 0 && dst < dst_end); - if (count < 0) - *src = Stuff_Zero ^ Stuff_Magic; - else - *src = (Stuff_DiffZero + count) ^ Stuff_Magic; - break; - case Stuff_Same: - if (src+1 >= end) - return(NULL); - do - { - *dst++ = src[1] ^ Stuff_Magic; - } - while(--count >= 0 && dst < dst_end); - if (count < 0) - src += 2; - else - *src = (Stuff_Same + count) ^ Stuff_Magic; - break; - case Stuff_Zero: - do - { - *dst++ = 0; - } - while(--count >= 0 && dst < dst_end); - if (count < 0) - src += 1; - else - *src = (Stuff_Zero + count) ^ Stuff_Magic; - break; - } - } - if (dst < dst_end) - return(NULL); - else - return(src); + __u8 *dst_end = dst + dst_length; + /* Sanity check */ + if (!src || !end || !dst || !dst_length) + return (NULL); + while (src < end && dst < dst_end) { + int count = (*src ^ Stuff_Magic) & Stuff_CountMask; + switch ((*src ^ Stuff_Magic) & Stuff_CodeMask) { + case Stuff_Diff: + if (src + 1 + count >= end) + return (NULL); + do { + *dst++ = *++src ^ Stuff_Magic; + } + while (--count >= 0 && dst < dst_end); + if (count < 0) + src += 1; + else { + if (count == 0) + *src = Stuff_Same ^ Stuff_Magic; + else + *src = + (Stuff_Diff + + count) ^ Stuff_Magic; + } + break; + case Stuff_DiffZero: + if (src + 1 + count >= end) + return (NULL); + do { + *dst++ = *++src ^ Stuff_Magic; + } + while (--count >= 0 && dst < dst_end); + if (count < 0) + *src = Stuff_Zero ^ Stuff_Magic; + else + *src = + (Stuff_DiffZero + count) ^ Stuff_Magic; + break; + case Stuff_Same: + if (src + 1 >= end) + return (NULL); + do { + *dst++ = src[1] ^ Stuff_Magic; + } + while (--count >= 0 && dst < dst_end); + if (count < 0) + src += 2; + else + *src = (Stuff_Same + count) ^ Stuff_Magic; + break; + case Stuff_Zero: + do { + *dst++ = 0; + } + while (--count >= 0 && dst < dst_end); + if (count < 0) + src += 1; + else + *src = (Stuff_Zero + count) ^ Stuff_Magic; + break; + } + } + if (dst < dst_end) + return (NULL); + else + return (src); } @@ -862,16 +774,19 @@ * currently in effect (57.6 or 115.2) is returned. */ static unsigned int get_baud(struct tty_struct *tty) - { - if (!tty || !tty->termios) return(0); - if ((tty->termios->c_cflag & CBAUD) == B38400 && tty->driver_data) - { - struct async_struct *info = (struct async_struct *)tty->driver_data; - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI ) return(B57600); - if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) return(B115200); - } - return(tty->termios->c_cflag & CBAUD); - } +{ + if (!tty || !tty->termios) + return (0); + if ((tty->termios->c_cflag & CBAUD) == B38400 && tty->driver_data) { + struct async_struct *info = + (struct async_struct *) tty->driver_data; + if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) + return (B57600); + if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) + return (B115200); + } + return (tty->termios->c_cflag & CBAUD); +} /* * set_baud sets the baud rate to the rate defined by baudcode @@ -882,12 +797,12 @@ * user, so it is simplest to just avoid using 38400. */ static void set_baud(struct tty_struct *tty, unsigned int baudcode) - { - struct termios old_termios = *(tty->termios); - tty->termios->c_cflag &= ~CBAUD; /* Clear the old baud setting */ - tty->termios->c_cflag |= baudcode; /* Set the new baud setting */ - tty->driver.set_termios(tty, &old_termios); - } +{ + struct termios old_termios = *(tty->termios); + tty->termios->c_cflag &= ~CBAUD; /* Clear the old baud setting */ + tty->termios->c_cflag |= baudcode; /* Set the new baud setting */ + tty->driver.set_termios(tty, &old_termios); +} /* * Convert a string to a Metricom Address. @@ -898,26 +813,29 @@ (p)[4] == '-' && \ isdigit((p)[5]) && isdigit((p)[6]) && isdigit((p)[7]) && isdigit((p)[8]) ) -static int string_to_radio_address(MetricomAddress *addr, __u8 *p) +static int string_to_radio_address(MetricomAddress * addr, __u8 * p) { - if (!IS_RADIO_ADDRESS(p)) return(1); - addr->c[0] = 0; - addr->c[1] = 0; - addr->c[2] = READHEX(p[0]) << 4 | READHEX(p[1]); - addr->c[3] = READHEX(p[2]) << 4 | READHEX(p[3]); - addr->c[4] = READHEX(p[5]) << 4 | READHEX(p[6]); - addr->c[5] = READHEX(p[7]) << 4 | READHEX(p[8]); - return(0); + if (!IS_RADIO_ADDRESS(p)) + return (1); + addr->c[0] = 0; + addr->c[1] = 0; + addr->c[2] = READHEX(p[0]) << 4 | READHEX(p[1]); + addr->c[3] = READHEX(p[2]) << 4 | READHEX(p[3]); + addr->c[4] = READHEX(p[5]) << 4 | READHEX(p[6]); + addr->c[5] = READHEX(p[7]) << 4 | READHEX(p[8]); + return (0); } /* * Convert a Metricom Address to a string. */ -static __u8 *radio_address_to_string(const MetricomAddress *addr, MetricomAddressString *p) +static __u8 *radio_address_to_string(const MetricomAddress * addr, + MetricomAddressString * p) { - sprintf(p->c, "%02X%02X-%02X%02X", addr->c[2], addr->c[3], addr->c[4], addr->c[5]); - return(p->c); + sprintf(p->c, "%02X%02X-%02X%02X", addr->c[2], addr->c[3], + addr->c[4], addr->c[5]); + return (p->c); } /* @@ -928,110 +846,101 @@ static int allocate_buffers(struct strip *strip_info) { - struct net_device *dev = &strip_info->dev; - int sx_size = MAX(STRIP_ENCAP_SIZE(MAX_RECV_MTU), 4096); - int tx_size = STRIP_ENCAP_SIZE(dev->mtu) + MaxCommandStringLength; - __u8 *r = kmalloc(MAX_RECV_MTU, GFP_ATOMIC); - __u8 *s = kmalloc(sx_size, GFP_ATOMIC); - __u8 *t = kmalloc(tx_size, GFP_ATOMIC); - if (r && s && t) - { - strip_info->rx_buff = r; - strip_info->sx_buff = s; - strip_info->tx_buff = t; - strip_info->sx_size = sx_size; - strip_info->tx_size = tx_size; - strip_info->mtu = dev->mtu; - return(1); - } - if (r) kfree(r); - if (s) kfree(s); - if (t) kfree(t); - return(0); + struct net_device *dev = &strip_info->dev; + int sx_size = MAX(STRIP_ENCAP_SIZE(MAX_RECV_MTU), 4096); + int tx_size = STRIP_ENCAP_SIZE(dev->mtu) + MaxCommandStringLength; + __u8 *r = kmalloc(MAX_RECV_MTU, GFP_ATOMIC); + __u8 *s = kmalloc(sx_size, GFP_ATOMIC); + __u8 *t = kmalloc(tx_size, GFP_ATOMIC); + if (r && s && t) { + strip_info->rx_buff = r; + strip_info->sx_buff = s; + strip_info->tx_buff = t; + strip_info->sx_size = sx_size; + strip_info->tx_size = tx_size; + strip_info->mtu = dev->mtu; + return (1); + } + if (r) + kfree(r); + if (s) + kfree(s); + if (t) + kfree(t); + return (0); } /* * MTU has been changed by the IP layer. Unfortunately we are not told * about this, but we spot it ourselves and fix things up. We could be in * an upcall from the tty driver, or in an ip packet queue. + * + * Caller must hold the strip_lock */ static void strip_changedmtu(struct strip *strip_info) { - int old_mtu = strip_info->mtu; - struct net_device *dev = &strip_info->dev; - unsigned char *orbuff = strip_info->rx_buff; - unsigned char *osbuff = strip_info->sx_buff; - unsigned char *otbuff = strip_info->tx_buff; - InterruptStatus intstat; - - if (dev->mtu > MAX_SEND_MTU) - { - printk(KERN_ERR "%s: MTU exceeds maximum allowable (%d), MTU change cancelled.\n", - strip_info->dev.name, MAX_SEND_MTU); - dev->mtu = old_mtu; - return; - } - - /* - * Have to disable interrupts here because we're reallocating and resizing - * the serial buffers, and we can't have data arriving in them while we're - * moving them around in memory. This may cause data to be lost on the serial - * port, but hopefully people won't change MTU that often. - * Also note, this may not work on a symmetric multi-processor system. - */ - intstat = DisableInterrupts(); - - if (!allocate_buffers(strip_info)) - { - RestoreInterrupts(intstat); - printk(KERN_ERR "%s: unable to grow strip buffers, MTU change cancelled.\n", - strip_info->dev.name); - dev->mtu = old_mtu; - return; - } - - if (strip_info->sx_count) - { - if (strip_info->sx_count <= strip_info->sx_size) - memcpy(strip_info->sx_buff, osbuff, strip_info->sx_count); - else - { - strip_info->discard = strip_info->sx_count; - strip_info->rx_over_errors++; - } - } - - if (strip_info->tx_left) - { - if (strip_info->tx_left <= strip_info->tx_size) - memcpy(strip_info->tx_buff, strip_info->tx_head, strip_info->tx_left); - else - { - strip_info->tx_left = 0; - strip_info->tx_dropped++; - } - } - strip_info->tx_head = strip_info->tx_buff; - - RestoreInterrupts(intstat); - - printk(KERN_NOTICE "%s: strip MTU changed fom %d to %d.\n", - strip_info->dev.name, old_mtu, strip_info->mtu); - - if (orbuff) kfree(orbuff); - if (osbuff) kfree(osbuff); - if (otbuff) kfree(otbuff); + int old_mtu = strip_info->mtu; + struct net_device *dev = &strip_info->dev; + unsigned char *orbuff = strip_info->rx_buff; + unsigned char *osbuff = strip_info->sx_buff; + unsigned char *otbuff = strip_info->tx_buff; + + if (dev->mtu > MAX_SEND_MTU) { + printk(KERN_ERR + "%s: MTU exceeds maximum allowable (%d), MTU change cancelled.\n", + strip_info->dev.name, MAX_SEND_MTU); + dev->mtu = old_mtu; + return; + } + + if (!allocate_buffers(strip_info)) { + printk(KERN_ERR "%s: unable to grow strip buffers, MTU change cancelled.\n", + strip_info->dev.name); + dev->mtu = old_mtu; + return; + } + + if (strip_info->sx_count) { + if (strip_info->sx_count <= strip_info->sx_size) + memcpy(strip_info->sx_buff, osbuff, + strip_info->sx_count); + else { + strip_info->discard = strip_info->sx_count; + strip_info->rx_over_errors++; + } + } + + if (strip_info->tx_left) { + if (strip_info->tx_left <= strip_info->tx_size) + memcpy(strip_info->tx_buff, strip_info->tx_head, + strip_info->tx_left); + else { + strip_info->tx_left = 0; + strip_info->tx_dropped++; + } + } + strip_info->tx_head = strip_info->tx_buff; + + printk(KERN_NOTICE "%s: strip MTU changed fom %d to %d.\n", + strip_info->dev.name, old_mtu, strip_info->mtu); + + if (orbuff) + kfree(orbuff); + if (osbuff) + kfree(osbuff); + if (otbuff) + kfree(otbuff); } static void strip_unlock(struct strip *strip_info) { - /* - * Set the timer to go off in one second. - */ - strip_info->idle_timer.expires = jiffies + 1*HZ; - add_timer(&strip_info->idle_timer); - netif_wake_queue(&strip_info->dev); + /* + * Set the timer to go off in one second. + */ + strip_info->idle_timer.expires = jiffies + 1 * HZ; + add_timer(&strip_info->idle_timer); + netif_wake_queue(&strip_info->dev); } @@ -1046,32 +955,30 @@ * amount printed so far exceeds the total amount requested, then this * function returns 1, otherwise 0. */ -static int +static int shift_buffer(char *buffer, int requested_offset, int requested_len, - int *total, int *slop, char **buf) + int *total, int *slop, char **buf) { - int printed; + int printed; - /* printk(KERN_DEBUG "shift: buffer: %d o: %d l: %d t: %d buf: %d\n", - (int) buffer, requested_offset, requested_len, *total, - (int) *buf); */ - printed = *buf - buffer; - if (*total + printed <= requested_offset) { - *total += printed; - *buf = buffer; - } - else { - if (*total < requested_offset) { - *slop = requested_offset - *total; - } - *total = requested_offset + printed - *slop; - } - if (*total > requested_offset + requested_len) { - return 1; - } - else { - return 0; - } + /* printk(KERN_DEBUG "shift: buffer: %d o: %d l: %d t: %d buf: %d\n", + (int) buffer, requested_offset, requested_len, *total, + (int) *buf); */ + printed = *buf - buffer; + if (*total + printed <= requested_offset) { + *total += printed; + *buf = buffer; + } else { + if (*total < requested_offset) { + *slop = requested_offset - *total; + } + *total = requested_offset + printed - *slop; + } + if (*total > requested_offset + requested_len) { + return 1; + } else { + return 0; + } } /* @@ -1081,29 +988,29 @@ */ static int calc_start_len(char *buffer, char **start, int requested_offset, - int requested_len, int total, char *buf) + int requested_len, int total, char *buf) { - int return_len, buffer_len; + int return_len, buffer_len; - buffer_len = buf - buffer; - if (buffer_len >= 4095) { - printk(KERN_ERR "STRIP: exceeded /proc buffer size\n"); - } - - /* - * There may be bytes before and after the - * chunk that was actually requested. - */ - return_len = total - requested_offset; - if (return_len < 0) { - return_len = 0; - } - *start = buf - return_len; - if (return_len > requested_len) { - return_len = requested_len; - } - /* printk(KERN_DEBUG "return_len: %d\n", return_len); */ - return return_len; + buffer_len = buf - buffer; + if (buffer_len >= 4095) { + printk(KERN_ERR "STRIP: exceeded /proc buffer size\n"); + } + + /* + * There may be bytes before and after the + * chunk that was actually requested. + */ + return_len = total - requested_offset; + if (return_len < 0) { + return_len = 0; + } + *start = buf - return_len; + if (return_len > requested_len) { + return_len = requested_len; + } + /* printk(KERN_DEBUG "return_len: %d\n", return_len); */ + return return_len; } /* @@ -1116,34 +1023,39 @@ */ static char *time_delta(char buffer[], long time) { - time -= jiffies; - if (time > LongTime / 2) return("Not scheduled"); - if(time < 0) time = 0; /* Don't print negative times */ - sprintf(buffer, "%ld seconds", time / HZ); - return(buffer); -} - -static int sprintf_neighbours(char *buffer, MetricomNodeTable *table, char *title) -{ - /* We wrap this in a do/while loop, so if the table changes */ - /* while we're reading it, we just go around and try again. */ - struct timeval t; - char *ptr; - do - { - int i; - t = table->timestamp; - ptr = buffer; - if (table->num_nodes) ptr += sprintf(ptr, "\n %s\n", title); - for (i=0; inum_nodes; i++) - { - InterruptStatus intstat = DisableInterrupts(); - MetricomNode node = table->node[i]; - RestoreInterrupts(intstat); - ptr += sprintf(ptr, " %s\n", node.c); - } - } while (table->timestamp.tv_sec != t.tv_sec || table->timestamp.tv_usec != t.tv_usec); - return ptr - buffer; + time -= jiffies; + if (time > LongTime / 2) + return ("Not scheduled"); + if (time < 0) + time = 0; /* Don't print negative times */ + sprintf(buffer, "%ld seconds", time / HZ); + return (buffer); +} + +static int sprintf_neighbours(char *buffer, MetricomNodeTable * table, + char *title) +{ + /* We wrap this in a do/while loop, so if the table changes */ + /* while we're reading it, we just go around and try again. */ + struct timeval t; + char *ptr; + unsigned long flags; + + do { + int i; + t = table->timestamp; + ptr = buffer; + if (table->num_nodes) + ptr += sprintf(ptr, "\n %s\n", title); + for (i = 0; i < table->num_nodes; i++) { + spin_lock_irqsave(&strip_lock, flags); + MetricomNode node = table->node[i]; + spin_unlock_irqrestore(&strip_lock, flags); + ptr += sprintf(ptr, " %s\n", node.c); + } + } while (table->timestamp.tv_sec != t.tv_sec + || table->timestamp.tv_usec != t.tv_usec); + return ptr - buffer; } /* @@ -1152,91 +1064,105 @@ * than 4K of data into it. With the maximum of 32 portables and 32 poletops * reported, the routine outputs 3107 bytes into the buffer. */ -static int -sprintf_status_info(char *buffer, struct strip *strip_info) +static int sprintf_status_info(char *buffer, struct strip *strip_info) { - char temp[32]; - char *p = buffer; - MetricomAddressString addr_string; - - /* First, we must copy all of our data to a safe place, */ - /* in case a serial interrupt comes in and changes it. */ - InterruptStatus intstat = DisableInterrupts(); - int tx_left = strip_info->tx_left; - unsigned long rx_average_pps = strip_info->rx_average_pps; - unsigned long tx_average_pps = strip_info->tx_average_pps; - unsigned long sx_average_pps = strip_info->sx_average_pps; - int working = strip_info->working; - int firmware_level = strip_info->firmware_level; - long watchdog_doprobe = strip_info->watchdog_doprobe; - long watchdog_doreset = strip_info->watchdog_doreset; - long gratuitous_arp = strip_info->gratuitous_arp; - long arp_interval = strip_info->arp_interval; - FirmwareVersion firmware_version = strip_info->firmware_version; - SerialNumber serial_number = strip_info->serial_number; - BatteryVoltage battery_voltage = strip_info->battery_voltage; - char* if_name = strip_info->dev.name; - MetricomAddress true_dev_addr = strip_info->true_dev_addr; - MetricomAddress dev_dev_addr = *(MetricomAddress*)strip_info->dev.dev_addr; - int manual_dev_addr = strip_info->manual_dev_addr; + char temp[32]; + char *p = buffer; + MetricomAddressString addr_string; + + /* First, we must copy all of our data to a safe place, */ + /* in case a serial interrupt comes in and changes it. */ + int tx_left = strip_info->tx_left; + unsigned long rx_average_pps = strip_info->rx_average_pps; + unsigned long tx_average_pps = strip_info->tx_average_pps; + unsigned long sx_average_pps = strip_info->sx_average_pps; + int working = strip_info->working; + int firmware_level = strip_info->firmware_level; + long watchdog_doprobe = strip_info->watchdog_doprobe; + long watchdog_doreset = strip_info->watchdog_doreset; + long gratuitous_arp = strip_info->gratuitous_arp; + long arp_interval = strip_info->arp_interval; + FirmwareVersion firmware_version = strip_info->firmware_version; + SerialNumber serial_number = strip_info->serial_number; + BatteryVoltage battery_voltage = strip_info->battery_voltage; + char *if_name = strip_info->dev.name; + MetricomAddress true_dev_addr = strip_info->true_dev_addr; + MetricomAddress dev_dev_addr = + *(MetricomAddress *) strip_info->dev.dev_addr; + int manual_dev_addr = strip_info->manual_dev_addr; #ifdef EXT_COUNTERS - unsigned long rx_bytes = strip_info->rx_bytes; - unsigned long tx_bytes = strip_info->tx_bytes; - unsigned long rx_rbytes = strip_info->rx_rbytes; - unsigned long tx_rbytes = strip_info->tx_rbytes; - unsigned long rx_sbytes = strip_info->rx_sbytes; - unsigned long tx_sbytes = strip_info->tx_sbytes; - unsigned long rx_ebytes = strip_info->rx_ebytes; - unsigned long tx_ebytes = strip_info->tx_ebytes; + unsigned long rx_bytes = strip_info->rx_bytes; + unsigned long tx_bytes = strip_info->tx_bytes; + unsigned long rx_rbytes = strip_info->rx_rbytes; + unsigned long tx_rbytes = strip_info->tx_rbytes; + unsigned long rx_sbytes = strip_info->rx_sbytes; + unsigned long tx_sbytes = strip_info->tx_sbytes; + unsigned long rx_ebytes = strip_info->rx_ebytes; + unsigned long tx_ebytes = strip_info->tx_ebytes; #endif - RestoreInterrupts(intstat); - p += sprintf(p, "\nInterface name\t\t%s\n", if_name); - p += sprintf(p, " Radio working:\t\t%s\n", working ? "Yes" : "No"); - radio_address_to_string(&true_dev_addr, &addr_string); - p += sprintf(p, " Radio address:\t\t%s\n", addr_string.c); - if (manual_dev_addr) - { - radio_address_to_string(&dev_dev_addr, &addr_string); - p += sprintf(p, " Device address:\t%s\n", addr_string.c); - } - p += sprintf(p, " Firmware version:\t%s", !working ? "Unknown" : - !firmware_level ? "Should be upgraded" : - firmware_version.c); - if (firmware_level >= ChecksummedMessages) p += sprintf(p, " (Checksums Enabled)"); - p += sprintf(p, "\n"); - p += sprintf(p, " Serial number:\t\t%s\n", serial_number.c); - p += sprintf(p, " Battery voltage:\t%s\n", battery_voltage.c); - p += sprintf(p, " Transmit queue (bytes):%d\n", tx_left); - p += sprintf(p, " Receive packet rate: %ld packets per second\n", rx_average_pps / 8); - p += sprintf(p, " Transmit packet rate: %ld packets per second\n", tx_average_pps / 8); - p += sprintf(p, " Sent packet rate: %ld packets per second\n", sx_average_pps / 8); - p += sprintf(p, " Next watchdog probe:\t%s\n", time_delta(temp, watchdog_doprobe)); - p += sprintf(p, " Next watchdog reset:\t%s\n", time_delta(temp, watchdog_doreset)); - p += sprintf(p, " Next gratuitous ARP:\t"); - - if (!memcmp(strip_info->dev.dev_addr, zero_address.c, sizeof(zero_address))) - p += sprintf(p, "Disabled\n"); - else - { - p += sprintf(p, "%s\n", time_delta(temp, gratuitous_arp)); - p += sprintf(p, " Next ARP interval:\t%ld seconds\n", JIFFIE_TO_SEC(arp_interval)); - } + p += sprintf(p, "\nInterface name\t\t%s\n", if_name); + p += sprintf(p, " Radio working:\t\t%s\n", working ? "Yes" : "No"); + radio_address_to_string(&true_dev_addr, &addr_string); + p += sprintf(p, " Radio address:\t\t%s\n", addr_string.c); + if (manual_dev_addr) { + radio_address_to_string(&dev_dev_addr, &addr_string); + p += sprintf(p, " Device address:\t%s\n", addr_string.c); + } + p += sprintf(p, " Firmware version:\t%s", !working ? "Unknown" : + !firmware_level ? "Should be upgraded" : + firmware_version.c); + if (firmware_level >= ChecksummedMessages) + p += sprintf(p, " (Checksums Enabled)"); + p += sprintf(p, "\n"); + p += sprintf(p, " Serial number:\t\t%s\n", serial_number.c); + p += sprintf(p, " Battery voltage:\t%s\n", battery_voltage.c); + p += sprintf(p, " Transmit queue (bytes):%d\n", tx_left); + p += sprintf(p, " Receive packet rate: %ld packets per second\n", + rx_average_pps / 8); + p += sprintf(p, " Transmit packet rate: %ld packets per second\n", + tx_average_pps / 8); + p += sprintf(p, " Sent packet rate: %ld packets per second\n", + sx_average_pps / 8); + p += sprintf(p, " Next watchdog probe:\t%s\n", + time_delta(temp, watchdog_doprobe)); + p += sprintf(p, " Next watchdog reset:\t%s\n", + time_delta(temp, watchdog_doreset)); + p += sprintf(p, " Next gratuitous ARP:\t"); + + if (!memcmp + (strip_info->dev.dev_addr, zero_address.c, + sizeof(zero_address))) + p += sprintf(p, "Disabled\n"); + else { + p += sprintf(p, "%s\n", time_delta(temp, gratuitous_arp)); + p += sprintf(p, " Next ARP interval:\t%ld seconds\n", + JIFFIE_TO_SEC(arp_interval)); + } - if (working) - { + if (working) { #ifdef EXT_COUNTERS - p += sprintf(p, "\n"); - p += sprintf(p, " Total bytes: \trx:\t%lu\ttx:\t%lu\n", rx_bytes, tx_bytes); - p += sprintf(p, " thru radio: \trx:\t%lu\ttx:\t%lu\n", rx_rbytes, tx_rbytes); - p += sprintf(p, " thru serial port: \trx:\t%lu\ttx:\t%lu\n", rx_sbytes, tx_sbytes); - p += sprintf(p, " Total stat/err bytes:\trx:\t%lu\ttx:\t%lu\n", rx_ebytes, tx_ebytes); + p += sprintf(p, "\n"); + p += sprintf(p, + " Total bytes: \trx:\t%lu\ttx:\t%lu\n", + rx_bytes, tx_bytes); + p += sprintf(p, + " thru radio: \trx:\t%lu\ttx:\t%lu\n", + rx_rbytes, tx_rbytes); + p += sprintf(p, + " thru serial port: \trx:\t%lu\ttx:\t%lu\n", + rx_sbytes, tx_sbytes); + p += sprintf(p, + " Total stat/err bytes:\trx:\t%lu\ttx:\t%lu\n", + rx_ebytes, tx_ebytes); #endif - p += sprintf_neighbours(p, &strip_info->poletops, "Poletops:"); - p += sprintf_neighbours(p, &strip_info->portables, "Portables:"); - } + p += sprintf_neighbours(p, &strip_info->poletops, + "Poletops:"); + p += sprintf_neighbours(p, &strip_info->portables, + "Portables:"); + } - return p - buffer; + return p - buffer; } /* @@ -1244,23 +1170,27 @@ * the /proc file system. */ -static int get_status_info(char *buffer, char **start, off_t req_offset, int req_len) +static int get_status_info(char *buffer, char **start, off_t req_offset, + int req_len) { - int total = 0, slop = 0; - struct strip *strip_info = struct_strip_list; - char *buf = buffer; - - buf += sprintf(buf, "strip_version: %s\n", StripVersion); - if (shift_buffer(buffer, req_offset, req_len, &total, &slop, &buf)) goto exit; - - while (strip_info != NULL) - { - buf += sprintf_status_info(buf, strip_info); - if (shift_buffer(buffer, req_offset, req_len, &total, &slop, &buf)) break; - strip_info = strip_info->next; - } - exit: - return(calc_start_len(buffer, start, req_offset, req_len, total, buf)); + int total = 0, slop = 0; + struct strip *strip_info = struct_strip_list; + char *buf = buffer; + + buf += sprintf(buf, "strip_version: %s\n", StripVersion); + if (shift_buffer(buffer, req_offset, req_len, &total, &slop, &buf)) + goto exit; + + while (strip_info != NULL) { + buf += sprintf_status_info(buf, strip_info); + if (shift_buffer + (buffer, req_offset, req_len, &total, &slop, &buf)) + break; + strip_info = strip_info->next; + } + exit: + return (calc_start_len + (buffer, start, req_offset, req_len, total, buf)); } /************************************************************************/ @@ -1268,73 +1198,77 @@ static void ResetRadio(struct strip *strip_info) { - struct tty_struct *tty = strip_info->tty; - static const char init[] = "ate0q1dt**starmode\r**"; - StringDescriptor s = { init, sizeof(init)-1 }; - - /* - * If the radio isn't working anymore, - * we should clear the old status information. - */ - if (strip_info->working) - { - printk(KERN_INFO "%s: No response: Resetting radio.\n", strip_info->dev.name); - strip_info->firmware_version.c[0] = '\0'; - strip_info->serial_number.c[0] = '\0'; - strip_info->battery_voltage.c[0] = '\0'; - strip_info->portables.num_nodes = 0; - do_gettimeofday(&strip_info->portables.timestamp); - strip_info->poletops.num_nodes = 0; - do_gettimeofday(&strip_info->poletops.timestamp); - } - - strip_info->pps_timer = jiffies; - strip_info->rx_pps_count = 0; - strip_info->tx_pps_count = 0; - strip_info->sx_pps_count = 0; - strip_info->rx_average_pps = 0; - strip_info->tx_average_pps = 0; - strip_info->sx_average_pps = 0; - - /* Mark radio address as unknown */ - *(MetricomAddress*)&strip_info->true_dev_addr = zero_address; - if (!strip_info->manual_dev_addr) - *(MetricomAddress*)strip_info->dev.dev_addr = zero_address; - strip_info->working = FALSE; - strip_info->firmware_level = NoStructure; - strip_info->next_command = CompatibilityCommand; - strip_info->watchdog_doprobe = jiffies + 10 * HZ; - strip_info->watchdog_doreset = jiffies + 1 * HZ; - - /* If the user has selected a baud rate above 38.4 see what magic we have to do */ - if (strip_info->user_baud > B38400) - { - /* - * Subtle stuff: Pay attention :-) - * If the serial port is currently at the user's selected (>38.4) rate, - * then we temporarily switch to 19.2 and issue the ATS304 command - * to tell the radio to switch to the user's selected rate. - * If the serial port is not currently at that rate, that means we just - * issued the ATS304 command last time through, so this time we restore - * the user's selected rate and issue the normal starmode reset string. - */ - if (strip_info->user_baud == get_baud(tty)) - { - static const char b0[] = "ate0q1s304=57600\r"; - static const char b1[] = "ate0q1s304=115200\r"; - static const StringDescriptor baudstring[2] = - { { b0, sizeof(b0)-1 }, { b1, sizeof(b1)-1 } }; - set_baud(tty, B19200); - if (strip_info->user_baud == B57600 ) s = baudstring[0]; - else if (strip_info->user_baud == B115200) s = baudstring[1]; - else s = baudstring[1]; /* For now */ - } - else set_baud(tty, strip_info->user_baud); - } + struct tty_struct *tty = strip_info->tty; + static const char init[] = "ate0q1dt**starmode\r**"; + StringDescriptor s = { init, sizeof(init) - 1 }; + + /* + * If the radio isn't working anymore, + * we should clear the old status information. + */ + if (strip_info->working) { + printk(KERN_INFO "%s: No response: Resetting radio.\n", + strip_info->dev.name); + strip_info->firmware_version.c[0] = '\0'; + strip_info->serial_number.c[0] = '\0'; + strip_info->battery_voltage.c[0] = '\0'; + strip_info->portables.num_nodes = 0; + do_gettimeofday(&strip_info->portables.timestamp); + strip_info->poletops.num_nodes = 0; + do_gettimeofday(&strip_info->poletops.timestamp); + } - tty->driver.write(tty, 0, s.string, s.length); + strip_info->pps_timer = jiffies; + strip_info->rx_pps_count = 0; + strip_info->tx_pps_count = 0; + strip_info->sx_pps_count = 0; + strip_info->rx_average_pps = 0; + strip_info->tx_average_pps = 0; + strip_info->sx_average_pps = 0; + + /* Mark radio address as unknown */ + *(MetricomAddress *) & strip_info->true_dev_addr = zero_address; + if (!strip_info->manual_dev_addr) + *(MetricomAddress *) strip_info->dev.dev_addr = + zero_address; + strip_info->working = FALSE; + strip_info->firmware_level = NoStructure; + strip_info->next_command = CompatibilityCommand; + strip_info->watchdog_doprobe = jiffies + 10 * HZ; + strip_info->watchdog_doreset = jiffies + 1 * HZ; + + /* If the user has selected a baud rate above 38.4 see what magic we have to do */ + if (strip_info->user_baud > B38400) { + /* + * Subtle stuff: Pay attention :-) + * If the serial port is currently at the user's selected (>38.4) rate, + * then we temporarily switch to 19.2 and issue the ATS304 command + * to tell the radio to switch to the user's selected rate. + * If the serial port is not currently at that rate, that means we just + * issued the ATS304 command last time through, so this time we restore + * the user's selected rate and issue the normal starmode reset string. + */ + if (strip_info->user_baud == get_baud(tty)) { + static const char b0[] = "ate0q1s304=57600\r"; + static const char b1[] = "ate0q1s304=115200\r"; + static const StringDescriptor baudstring[2] = + { {b0, sizeof(b0) - 1} + , {b1, sizeof(b1) - 1} + }; + set_baud(tty, B19200); + if (strip_info->user_baud == B57600) + s = baudstring[0]; + else if (strip_info->user_baud == B115200) + s = baudstring[1]; + else + s = baudstring[1]; /* For now */ + } else + set_baud(tty, strip_info->user_baud); + } + + tty->driver.write(tty, 0, s.string, s.length); #ifdef EXT_COUNTERS - strip_info->tx_ebytes += s.length; + strip_info->tx_ebytes += s.length; #endif } @@ -1345,346 +1279,354 @@ static void strip_write_some_more(struct tty_struct *tty) { - struct strip *strip_info = (struct strip *) tty->disc_data; + struct strip *strip_info = (struct strip *) tty->disc_data; - /* First make sure we're connected. */ - if (!strip_info || strip_info->magic != STRIP_MAGIC || - !netif_running(&strip_info->dev)) - return; - - if (strip_info->tx_left > 0) - { - /* - * If some data left, send it - * Note: There's a kernel design bug here. The write_wakeup routine has to - * know how many bytes were written in the previous call, but the number of - * bytes written is returned as the result of the tty->driver.write call, - * and there's no guarantee that the tty->driver.write routine will have - * returned before the write_wakeup routine is invoked. If the PC has fast - * Serial DMA hardware, then it's quite possible that the write could complete - * almost instantaneously, meaning that my write_wakeup routine could be - * called immediately, before tty->driver.write has had a chance to return - * the number of bytes that it wrote. In an attempt to guard against this, - * I disable interrupts around the call to tty->driver.write, although even - * this might not work on a symmetric multi-processor system. - */ - InterruptStatus intstat = DisableInterrupts(); - int num_written = tty->driver.write(tty, 0, strip_info->tx_head, strip_info->tx_left); - strip_info->tx_left -= num_written; - strip_info->tx_head += num_written; + /* First make sure we're connected. */ + if (!strip_info || strip_info->magic != STRIP_MAGIC || + !netif_running(&strip_info->dev)) + return; + + if (strip_info->tx_left > 0) { + int num_written = + tty->driver.write(tty, 0, strip_info->tx_head, + strip_info->tx_left); + strip_info->tx_left -= num_written; + strip_info->tx_head += num_written; #ifdef EXT_COUNTERS - strip_info->tx_sbytes += num_written; + strip_info->tx_sbytes += num_written; #endif - RestoreInterrupts(intstat); - } - else /* Else start transmission of another packet */ - { - tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); - strip_unlock(strip_info); - } -} - -static __u8 *add_checksum(__u8 *buffer, __u8 *end) -{ - __u16 sum = 0; - __u8 *p = buffer; - while (p < end) sum += *p++; - end[3] = hextable[sum & 0xF]; sum >>= 4; - end[2] = hextable[sum & 0xF]; sum >>= 4; - end[1] = hextable[sum & 0xF]; sum >>= 4; - end[0] = hextable[sum & 0xF]; - return(end+4); -} - -static unsigned char *strip_make_packet(unsigned char *buffer, struct strip *strip_info, struct sk_buff *skb) -{ - __u8 *ptr = buffer; - __u8 *stuffstate = NULL; - STRIP_Header *header = (STRIP_Header *)skb->data; - MetricomAddress haddr = header->dst_addr; - int len = skb->len - sizeof(STRIP_Header); - MetricomKey key; - - /*HexDump("strip_make_packet", strip_info, skb->data, skb->data + skb->len);*/ - - if (header->protocol == htons(ETH_P_IP)) key = SIP0Key; - else if (header->protocol == htons(ETH_P_ARP)) key = ARP0Key; - else - { - printk(KERN_ERR "%s: strip_make_packet: Unknown packet type 0x%04X\n", - strip_info->dev.name, ntohs(header->protocol)); - return(NULL); - } - - if (len > strip_info->mtu) - { - printk(KERN_ERR "%s: Dropping oversized transmit packet: %d bytes\n", - strip_info->dev.name, len); - return(NULL); - } - - /* - * If we're sending to ourselves, discard the packet. - * (Metricom radios choke if they try to send a packet to their own address.) - */ - if (!memcmp(haddr.c, strip_info->true_dev_addr.c, sizeof(haddr))) - { - printk(KERN_ERR "%s: Dropping packet addressed to self\n", strip_info->dev.name); - return(NULL); - } - - /* - * If this is a broadcast packet, send it to our designated Metricom - * 'broadcast hub' radio (First byte of address being 0xFF means broadcast) - */ - if (haddr.c[0] == 0xFF) - { - u32 brd = 0; - struct in_device *in_dev = in_dev_get(&strip_info->dev); - if (in_dev == NULL) - return NULL; - read_lock(&in_dev->lock); - if (in_dev->ifa_list) - brd = in_dev->ifa_list->ifa_broadcast; - read_unlock(&in_dev->lock); - in_dev_put(in_dev); - - /* arp_query returns 1 if it succeeds in looking up the address, 0 if it fails */ - if (!arp_query(haddr.c, brd, &strip_info->dev)) - { - printk(KERN_ERR "%s: Unable to send packet (no broadcast hub configured)\n", - strip_info->dev.name); - return(NULL); - } + } else { /* Else start transmission of another packet */ + + tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); + strip_unlock(strip_info); + } +} + +static __u8 *add_checksum(__u8 * buffer, __u8 * end) +{ + __u16 sum = 0; + __u8 *p = buffer; + while (p < end) + sum += *p++; + end[3] = hextable[sum & 0xF]; + sum >>= 4; + end[2] = hextable[sum & 0xF]; + sum >>= 4; + end[1] = hextable[sum & 0xF]; + sum >>= 4; + end[0] = hextable[sum & 0xF]; + return (end + 4); +} + +static unsigned char *strip_make_packet(unsigned char *buffer, + struct strip *strip_info, + struct sk_buff *skb) +{ + __u8 *ptr = buffer; + __u8 *stuffstate = NULL; + STRIP_Header *header = (STRIP_Header *) skb->data; + MetricomAddress haddr = header->dst_addr; + int len = skb->len - sizeof(STRIP_Header); + MetricomKey key; + + /*HexDump("strip_make_packet", strip_info, skb->data, skb->data + skb->len); */ + + if (header->protocol == htons(ETH_P_IP)) + key = SIP0Key; + else if (header->protocol == htons(ETH_P_ARP)) + key = ARP0Key; + else { + printk(KERN_ERR + "%s: strip_make_packet: Unknown packet type 0x%04X\n", + strip_info->dev.name, ntohs(header->protocol)); + return (NULL); + } + + if (len > strip_info->mtu) { + printk(KERN_ERR + "%s: Dropping oversized transmit packet: %d bytes\n", + strip_info->dev.name, len); + return (NULL); + } + /* - * If we are the broadcast hub, don't bother sending to ourselves. + * If we're sending to ourselves, discard the packet. * (Metricom radios choke if they try to send a packet to their own address.) */ - if (!memcmp(haddr.c, strip_info->true_dev_addr.c, sizeof(haddr))) return(NULL); - } + if (!memcmp(haddr.c, strip_info->true_dev_addr.c, sizeof(haddr))) { + printk(KERN_ERR "%s: Dropping packet addressed to self\n", + strip_info->dev.name); + return (NULL); + } - *ptr++ = 0x0D; - *ptr++ = '*'; - *ptr++ = hextable[haddr.c[2] >> 4]; - *ptr++ = hextable[haddr.c[2] & 0xF]; - *ptr++ = hextable[haddr.c[3] >> 4]; - *ptr++ = hextable[haddr.c[3] & 0xF]; - *ptr++ = '-'; - *ptr++ = hextable[haddr.c[4] >> 4]; - *ptr++ = hextable[haddr.c[4] & 0xF]; - *ptr++ = hextable[haddr.c[5] >> 4]; - *ptr++ = hextable[haddr.c[5] & 0xF]; - *ptr++ = '*'; - *ptr++ = key.c[0]; - *ptr++ = key.c[1]; - *ptr++ = key.c[2]; - *ptr++ = key.c[3]; + /* + * If this is a broadcast packet, send it to our designated Metricom + * 'broadcast hub' radio (First byte of address being 0xFF means broadcast) + */ + if (haddr.c[0] == 0xFF) { + u32 brd = 0; + struct in_device *in_dev = in_dev_get(&strip_info->dev); + if (in_dev == NULL) + return NULL; + read_lock(&in_dev->lock); + if (in_dev->ifa_list) + brd = in_dev->ifa_list->ifa_broadcast; + read_unlock(&in_dev->lock); + in_dev_put(in_dev); + + /* arp_query returns 1 if it succeeds in looking up the address, 0 if it fails */ + if (!arp_query(haddr.c, brd, &strip_info->dev)) { + printk(KERN_ERR + "%s: Unable to send packet (no broadcast hub configured)\n", + strip_info->dev.name); + return (NULL); + } + /* + * If we are the broadcast hub, don't bother sending to ourselves. + * (Metricom radios choke if they try to send a packet to their own address.) + */ + if (!memcmp + (haddr.c, strip_info->true_dev_addr.c, sizeof(haddr))) + return (NULL); + } - ptr = StuffData(skb->data + sizeof(STRIP_Header), len, ptr, &stuffstate); + *ptr++ = 0x0D; + *ptr++ = '*'; + *ptr++ = hextable[haddr.c[2] >> 4]; + *ptr++ = hextable[haddr.c[2] & 0xF]; + *ptr++ = hextable[haddr.c[3] >> 4]; + *ptr++ = hextable[haddr.c[3] & 0xF]; + *ptr++ = '-'; + *ptr++ = hextable[haddr.c[4] >> 4]; + *ptr++ = hextable[haddr.c[4] & 0xF]; + *ptr++ = hextable[haddr.c[5] >> 4]; + *ptr++ = hextable[haddr.c[5] & 0xF]; + *ptr++ = '*'; + *ptr++ = key.c[0]; + *ptr++ = key.c[1]; + *ptr++ = key.c[2]; + *ptr++ = key.c[3]; + + ptr = + StuffData(skb->data + sizeof(STRIP_Header), len, ptr, + &stuffstate); - if (strip_info->firmware_level >= ChecksummedMessages) ptr = add_checksum(buffer+1, ptr); + if (strip_info->firmware_level >= ChecksummedMessages) + ptr = add_checksum(buffer + 1, ptr); - *ptr++ = 0x0D; - return(ptr); + *ptr++ = 0x0D; + return (ptr); } static void strip_send(struct strip *strip_info, struct sk_buff *skb) { - MetricomAddress haddr; - unsigned char *ptr = strip_info->tx_buff; - int doreset = (long)jiffies - strip_info->watchdog_doreset >= 0; - int doprobe = (long)jiffies - strip_info->watchdog_doprobe >= 0 && !doreset; - u32 addr, brd; - - /* - * 1. If we have a packet, encapsulate it and put it in the buffer - */ - if (skb) - { - char *newptr = strip_make_packet(ptr, strip_info, skb); - strip_info->tx_pps_count++; - if (!newptr) strip_info->tx_dropped++; - else - { - ptr = newptr; - strip_info->sx_pps_count++; - strip_info->tx_packets++; /* Count another successful packet */ + MetricomAddress haddr; + unsigned char *ptr = strip_info->tx_buff; + int doreset = (long) jiffies - strip_info->watchdog_doreset >= 0; + int doprobe = (long) jiffies - strip_info->watchdog_doprobe >= 0 + && !doreset; + u32 addr, brd; + + /* + * 1. If we have a packet, encapsulate it and put it in the buffer + */ + if (skb) { + char *newptr = strip_make_packet(ptr, strip_info, skb); + strip_info->tx_pps_count++; + if (!newptr) + strip_info->tx_dropped++; + else { + ptr = newptr; + strip_info->sx_pps_count++; + strip_info->tx_packets++; /* Count another successful packet */ #ifdef EXT_COUNTERS - strip_info->tx_bytes += skb->len; - strip_info->tx_rbytes += ptr - strip_info->tx_buff; + strip_info->tx_bytes += skb->len; + strip_info->tx_rbytes += ptr - strip_info->tx_buff; #endif - /*DumpData("Sending:", strip_info, strip_info->tx_buff, ptr);*/ - /*HexDump("Sending", strip_info, strip_info->tx_buff, ptr);*/ - } - } - - /* - * 2. If it is time for another tickle, tack it on, after the packet - */ - if (doprobe) - { - StringDescriptor ts = CommandString[strip_info->next_command]; + /*DumpData("Sending:", strip_info, strip_info->tx_buff, ptr); */ + /*HexDump("Sending", strip_info, strip_info->tx_buff, ptr); */ + } + } + + /* + * 2. If it is time for another tickle, tack it on, after the packet + */ + if (doprobe) { + StringDescriptor ts = CommandString[strip_info->next_command]; #if TICKLE_TIMERS - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO "**** Sending tickle string %d at %02d.%06d\n", - strip_info->next_command, tv.tv_sec % 100, tv.tv_usec); - } + { + struct timeval tv; + do_gettimeofday(&tv); + printk(KERN_INFO "**** Sending tickle string %d at %02d.%06d\n", + strip_info->next_command, tv.tv_sec % 100, + tv.tv_usec); + } #endif - if (ptr == strip_info->tx_buff) *ptr++ = 0x0D; - - *ptr++ = '*'; /* First send "**" to provoke an error message */ - *ptr++ = '*'; + if (ptr == strip_info->tx_buff) + *ptr++ = 0x0D; - /* Then add the command */ - memcpy(ptr, ts.string, ts.length); + *ptr++ = '*'; /* First send "**" to provoke an error message */ + *ptr++ = '*'; - /* Add a checksum ? */ - if (strip_info->firmware_level < ChecksummedMessages) ptr += ts.length; - else ptr = add_checksum(ptr, ptr + ts.length); + /* Then add the command */ + memcpy(ptr, ts.string, ts.length); - *ptr++ = 0x0D; /* Terminate the command with a */ - - /* Cycle to next periodic command? */ - if (strip_info->firmware_level >= StructuredMessages) - if (++strip_info->next_command >= ELEMENTS_OF(CommandString)) - strip_info->next_command = 0; + /* Add a checksum ? */ + if (strip_info->firmware_level < ChecksummedMessages) + ptr += ts.length; + else + ptr = add_checksum(ptr, ptr + ts.length); + + *ptr++ = 0x0D; /* Terminate the command with a */ + + /* Cycle to next periodic command? */ + if (strip_info->firmware_level >= StructuredMessages) + if (++strip_info->next_command >= + ELEMENTS_OF(CommandString)) + strip_info->next_command = 0; #ifdef EXT_COUNTERS - strip_info->tx_ebytes += ts.length; + strip_info->tx_ebytes += ts.length; #endif - strip_info->watchdog_doprobe = jiffies + 10 * HZ; - strip_info->watchdog_doreset = jiffies + 1 * HZ; - /*printk(KERN_INFO "%s: Routine radio test.\n", strip_info->dev.name);*/ - } - - /* - * 3. Set up the strip_info ready to send the data (if any). - */ - strip_info->tx_head = strip_info->tx_buff; - strip_info->tx_left = ptr - strip_info->tx_buff; - strip_info->tty->flags |= (1 << TTY_DO_WRITE_WAKEUP); - - /* - * 4. Debugging check to make sure we're not overflowing the buffer. - */ - if (strip_info->tx_size - strip_info->tx_left < 20) - printk(KERN_ERR "%s: Sending%5d bytes;%5d bytes free.\n", strip_info->dev.name, - strip_info->tx_left, strip_info->tx_size - strip_info->tx_left); - - /* - * 5. If watchdog has expired, reset the radio. Note: if there's data waiting in - * the buffer, strip_write_some_more will send it after the reset has finished - */ - if (doreset) { ResetRadio(strip_info); return; } - - if (1) { - struct in_device *in_dev = in_dev_get(&strip_info->dev); - brd = addr = 0; - if (in_dev) { - read_lock(&in_dev->lock); - if (in_dev->ifa_list) { - brd = in_dev->ifa_list->ifa_broadcast; - addr = in_dev->ifa_list->ifa_local; - } - read_unlock(&in_dev->lock); - in_dev_put(in_dev); - } - } - - - /* - * 6. If it is time for a periodic ARP, queue one up to be sent. - * We only do this if: - * 1. The radio is working - * 2. It's time to send another periodic ARP - * 3. We really know what our address is (and it is not manually set to zero) - * 4. We have a designated broadcast address configured - * If we queue up an ARP packet when we don't have a designated broadcast - * address configured, then the packet will just have to be discarded in - * strip_make_packet. This is not fatal, but it causes misleading information - * to be displayed in tcpdump. tcpdump will report that periodic APRs are - * being sent, when in fact they are not, because they are all being dropped - * in the strip_make_packet routine. - */ - if (strip_info->working && (long)jiffies - strip_info->gratuitous_arp >= 0 && - memcmp(strip_info->dev.dev_addr, zero_address.c, sizeof(zero_address)) && - arp_query(haddr.c, brd, &strip_info->dev)) - { - /*printk(KERN_INFO "%s: Sending gratuitous ARP with interval %ld\n", - strip_info->dev.name, strip_info->arp_interval / HZ);*/ - strip_info->gratuitous_arp = jiffies + strip_info->arp_interval; - strip_info->arp_interval *= 2; - if (strip_info->arp_interval > MaxARPInterval) - strip_info->arp_interval = MaxARPInterval; - if (addr) - arp_send( - ARPOP_REPLY, ETH_P_ARP, - addr, /* Target address of ARP packet is our address */ - &strip_info->dev, /* Device to send packet on */ - addr, /* Source IP address this ARP packet comes from */ - NULL, /* Destination HW address is NULL (broadcast it) */ - strip_info->dev.dev_addr, /* Source HW address is our HW address */ - strip_info->dev.dev_addr); /* Target HW address is our HW address (redundant) */ - } - - /* - * 7. All ready. Start the transmission - */ - strip_write_some_more(strip_info->tty); + strip_info->watchdog_doprobe = jiffies + 10 * HZ; + strip_info->watchdog_doreset = jiffies + 1 * HZ; + /*printk(KERN_INFO "%s: Routine radio test.\n", strip_info->dev.name); */ + } + + /* + * 3. Set up the strip_info ready to send the data (if any). + */ + strip_info->tx_head = strip_info->tx_buff; + strip_info->tx_left = ptr - strip_info->tx_buff; + strip_info->tty->flags |= (1 << TTY_DO_WRITE_WAKEUP); + + /* + * 4. Debugging check to make sure we're not overflowing the buffer. + */ + if (strip_info->tx_size - strip_info->tx_left < 20) + printk(KERN_ERR "%s: Sending%5d bytes;%5d bytes free.\n", + strip_info->dev.name, strip_info->tx_left, + strip_info->tx_size - strip_info->tx_left); + + /* + * 5. If watchdog has expired, reset the radio. Note: if there's data waiting in + * the buffer, strip_write_some_more will send it after the reset has finished + */ + if (doreset) { + ResetRadio(strip_info); + return; + } + + if (1) { + struct in_device *in_dev = in_dev_get(&strip_info->dev); + brd = addr = 0; + if (in_dev) { + read_lock(&in_dev->lock); + if (in_dev->ifa_list) { + brd = in_dev->ifa_list->ifa_broadcast; + addr = in_dev->ifa_list->ifa_local; + } + read_unlock(&in_dev->lock); + in_dev_put(in_dev); + } + } + + + /* + * 6. If it is time for a periodic ARP, queue one up to be sent. + * We only do this if: + * 1. The radio is working + * 2. It's time to send another periodic ARP + * 3. We really know what our address is (and it is not manually set to zero) + * 4. We have a designated broadcast address configured + * If we queue up an ARP packet when we don't have a designated broadcast + * address configured, then the packet will just have to be discarded in + * strip_make_packet. This is not fatal, but it causes misleading information + * to be displayed in tcpdump. tcpdump will report that periodic APRs are + * being sent, when in fact they are not, because they are all being dropped + * in the strip_make_packet routine. + */ + if (strip_info->working + && (long) jiffies - strip_info->gratuitous_arp >= 0 + && memcmp(strip_info->dev.dev_addr, zero_address.c, + sizeof(zero_address)) + && arp_query(haddr.c, brd, &strip_info->dev)) { + /*printk(KERN_INFO "%s: Sending gratuitous ARP with interval %ld\n", + strip_info->dev.name, strip_info->arp_interval / HZ); */ + strip_info->gratuitous_arp = + jiffies + strip_info->arp_interval; + strip_info->arp_interval *= 2; + if (strip_info->arp_interval > MaxARPInterval) + strip_info->arp_interval = MaxARPInterval; + if (addr) + arp_send(ARPOP_REPLY, ETH_P_ARP, addr, /* Target address of ARP packet is our address */ + &strip_info->dev, /* Device to send packet on */ + addr, /* Source IP address this ARP packet comes from */ + NULL, /* Destination HW address is NULL (broadcast it) */ + strip_info->dev.dev_addr, /* Source HW address is our HW address */ + strip_info->dev.dev_addr); /* Target HW address is our HW address (redundant) */ + } + + /* + * 7. All ready. Start the transmission + */ + strip_write_some_more(strip_info->tty); } /* Encapsulate a datagram and kick it into a TTY queue. */ static int strip_xmit(struct sk_buff *skb, struct net_device *dev) { - struct strip *strip_info = (struct strip *)(dev->priv); + struct strip *strip_info = (struct strip *) (dev->priv); + unsigned long flags; + + if (!netif_running(dev)) { + printk(KERN_ERR "%s: xmit call when iface is down\n", + dev->name); + return (1); + } - if (!netif_running(dev)) - { - printk(KERN_ERR "%s: xmit call when iface is down\n", dev->name); - return(1); - } - - netif_stop_queue(dev); - - del_timer(&strip_info->idle_timer); - - /* See if someone has been ifconfigging */ - if (strip_info->mtu != strip_info->dev.mtu) - strip_changedmtu(strip_info); - - if (jiffies - strip_info->pps_timer > HZ) - { - unsigned long t = jiffies - strip_info->pps_timer; - unsigned long rx_pps_count = (strip_info->rx_pps_count * HZ * 8 + t/2) / t; - unsigned long tx_pps_count = (strip_info->tx_pps_count * HZ * 8 + t/2) / t; - unsigned long sx_pps_count = (strip_info->sx_pps_count * HZ * 8 + t/2) / t; - - strip_info->pps_timer = jiffies; - strip_info->rx_pps_count = 0; - strip_info->tx_pps_count = 0; - strip_info->sx_pps_count = 0; - - strip_info->rx_average_pps = (strip_info->rx_average_pps + rx_pps_count + 1) / 2; - strip_info->tx_average_pps = (strip_info->tx_average_pps + tx_pps_count + 1) / 2; - strip_info->sx_average_pps = (strip_info->sx_average_pps + sx_pps_count + 1) / 2; - - if (rx_pps_count / 8 >= 10) - printk(KERN_INFO "%s: WARNING: Receiving %ld packets per second.\n", - strip_info->dev.name, rx_pps_count / 8); - if (tx_pps_count / 8 >= 10) - printk(KERN_INFO "%s: WARNING: Tx %ld packets per second.\n", - strip_info->dev.name, tx_pps_count / 8); - if (sx_pps_count / 8 >= 10) - printk(KERN_INFO "%s: WARNING: Sending %ld packets per second.\n", - strip_info->dev.name, sx_pps_count / 8); - } - - strip_send(strip_info, skb); - - if (skb) - dev_kfree_skb(skb); - return(0); + netif_stop_queue(dev); + + del_timer(&strip_info->idle_timer); + + + if (jiffies - strip_info->pps_timer > HZ) { + unsigned long t = jiffies - strip_info->pps_timer; + unsigned long rx_pps_count = (strip_info->rx_pps_count * HZ * 8 + t / 2) / t; + unsigned long tx_pps_count = (strip_info->tx_pps_count * HZ * 8 + t / 2) / t; + unsigned long sx_pps_count = (strip_info->sx_pps_count * HZ * 8 + t / 2) / t; + + strip_info->pps_timer = jiffies; + strip_info->rx_pps_count = 0; + strip_info->tx_pps_count = 0; + strip_info->sx_pps_count = 0; + + strip_info->rx_average_pps = (strip_info->rx_average_pps + rx_pps_count + 1) / 2; + strip_info->tx_average_pps = (strip_info->tx_average_pps + tx_pps_count + 1) / 2; + strip_info->sx_average_pps = (strip_info->sx_average_pps + sx_pps_count + 1) / 2; + + if (rx_pps_count / 8 >= 10) + printk(KERN_INFO "%s: WARNING: Receiving %ld packets per second.\n", + strip_info->dev.name, rx_pps_count / 8); + if (tx_pps_count / 8 >= 10) + printk(KERN_INFO "%s: WARNING: Tx %ld packets per second.\n", + strip_info->dev.name, tx_pps_count / 8); + if (sx_pps_count / 8 >= 10) + printk(KERN_INFO "%s: WARNING: Sending %ld packets per second.\n", + strip_info->dev.name, sx_pps_count / 8); + } + + spin_lock_irqsave(&strip_lock, flags); + /* See if someone has been ifconfigging */ + if (strip_info->mtu != strip_info->dev.mtu) + strip_changedmtu(strip_info); + + strip_send(strip_info, skb); + + spin_unlock_irqrestore(&strip_lock, flags); + + if (skb) + dev_kfree_skb(skb); + return 0; } /* @@ -1695,7 +1637,7 @@ static void strip_IdleTask(unsigned long parameter) { - strip_xmit(NULL, (struct net_device *)parameter); + strip_xmit(NULL, (struct net_device *) parameter); } /* @@ -1710,23 +1652,25 @@ */ static int strip_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, void *saddr, unsigned len) + unsigned short type, void *daddr, void *saddr, + unsigned len) { - struct strip *strip_info = (struct strip *)(dev->priv); - STRIP_Header *header = (STRIP_Header *)skb_push(skb, sizeof(STRIP_Header)); + struct strip *strip_info = (struct strip *) (dev->priv); + STRIP_Header *header = (STRIP_Header *) skb_push(skb, sizeof(STRIP_Header)); - /*printk(KERN_INFO "%s: strip_header 0x%04X %s\n", dev->name, type, - type == ETH_P_IP ? "IP" : type == ETH_P_ARP ? "ARP" : "");*/ + /*printk(KERN_INFO "%s: strip_header 0x%04X %s\n", dev->name, type, + type == ETH_P_IP ? "IP" : type == ETH_P_ARP ? "ARP" : ""); */ - header->src_addr = strip_info->true_dev_addr; - header->protocol = htons(type); + header->src_addr = strip_info->true_dev_addr; + header->protocol = htons(type); - /*HexDump("strip_header", (struct strip *)(dev->priv), skb->data, skb->data + skb->len);*/ + /*HexDump("strip_header", (struct strip *)(dev->priv), skb->data, skb->data + skb->len); */ - if (!daddr) return(-dev->hard_header_len); + if (!daddr) + return (-dev->hard_header_len); - header->dst_addr = *(MetricomAddress*)daddr; - return(dev->hard_header_len); + header->dst_addr = *(MetricomAddress *) daddr; + return (dev->hard_header_len); } /* @@ -1740,13 +1684,13 @@ static int strip_rebuild_header(struct sk_buff *skb) { #ifdef CONFIG_INET - STRIP_Header *header = (STRIP_Header *) skb->data; + STRIP_Header *header = (STRIP_Header *) skb->data; - /* Arp find returns zero if if knows the address, */ - /* or if it doesn't know the address it sends an ARP packet and returns non-zero */ - return arp_find(header->dst_addr.c, skb)? 1 : 0; + /* Arp find returns zero if if knows the address, */ + /* or if it doesn't know the address it sends an ARP packet and returns non-zero */ + return arp_find(header->dst_addr.c, skb) ? 1 : 0; #else - return 0; + return 0; #endif } @@ -1756,422 +1700,446 @@ static int strip_receive_room(struct tty_struct *tty) { - return 0x10000; /* We can handle an infinite amount of data. :-) */ + return 0x10000; /* We can handle an infinite amount of data. :-) */ } /* * This function parses the response to the ATS300? command, * extracting the radio version and serial number. */ -static void get_radio_version(struct strip *strip_info, __u8 *ptr, __u8 *end) +static void get_radio_version(struct strip *strip_info, __u8 * ptr, __u8 * end) { - __u8 *p, *value_begin, *value_end; - int len; - - /* Determine the beginning of the second line of the payload */ - p = ptr; - while (p < end && *p != 10) p++; - if (p >= end) return; - p++; - value_begin = p; - - /* Determine the end of line */ - while (p < end && *p != 10) p++; - if (p >= end) return; - value_end = p; - p++; - - len = value_end - value_begin; - len = MIN(len, sizeof(FirmwareVersion) - 1); - if (strip_info->firmware_version.c[0] == 0) - printk(KERN_INFO "%s: Radio Firmware: %.*s\n", - strip_info->dev.name, len, value_begin); - sprintf(strip_info->firmware_version.c, "%.*s", len, value_begin); - - /* Look for the first colon */ - while (p < end && *p != ':') p++; - if (p >= end) return; - /* Skip over the space */ - p += 2; - len = sizeof(SerialNumber) - 1; - if (p + len <= end) { - sprintf(strip_info->serial_number.c, "%.*s", len, p); - } - else { - printk(KERN_DEBUG "STRIP: radio serial number shorter (%d) than expected (%d)\n", - end - p, len); - } + __u8 *p, *value_begin, *value_end; + int len; + + /* Determine the beginning of the second line of the payload */ + p = ptr; + while (p < end && *p != 10) + p++; + if (p >= end) + return; + p++; + value_begin = p; + + /* Determine the end of line */ + while (p < end && *p != 10) + p++; + if (p >= end) + return; + value_end = p; + p++; + + len = value_end - value_begin; + len = MIN(len, sizeof(FirmwareVersion) - 1); + if (strip_info->firmware_version.c[0] == 0) + printk(KERN_INFO "%s: Radio Firmware: %.*s\n", + strip_info->dev.name, len, value_begin); + sprintf(strip_info->firmware_version.c, "%.*s", len, value_begin); + + /* Look for the first colon */ + while (p < end && *p != ':') + p++; + if (p >= end) + return; + /* Skip over the space */ + p += 2; + len = sizeof(SerialNumber) - 1; + if (p + len <= end) { + sprintf(strip_info->serial_number.c, "%.*s", len, p); + } else { + printk(KERN_DEBUG + "STRIP: radio serial number shorter (%d) than expected (%d)\n", + end - p, len); + } } /* * This function parses the response to the ATS325? command, * extracting the radio battery voltage. */ -static void get_radio_voltage(struct strip *strip_info, __u8 *ptr, __u8 *end) +static void get_radio_voltage(struct strip *strip_info, __u8 * ptr, __u8 * end) { - int len; + int len; - len = sizeof(BatteryVoltage) - 1; - if (ptr + len <= end) { - sprintf(strip_info->battery_voltage.c, "%.*s", len, ptr); - } - else { - printk(KERN_DEBUG "STRIP: radio voltage string shorter (%d) than expected (%d)\n", - end - ptr, len); - } + len = sizeof(BatteryVoltage) - 1; + if (ptr + len <= end) { + sprintf(strip_info->battery_voltage.c, "%.*s", len, ptr); + } else { + printk(KERN_DEBUG + "STRIP: radio voltage string shorter (%d) than expected (%d)\n", + end - ptr, len); + } } /* * This function parses the responses to the AT~LA and ATS311 commands, * which list the radio's neighbours. */ -static void get_radio_neighbours(MetricomNodeTable *table, __u8 *ptr, __u8 *end) +static void get_radio_neighbours(MetricomNodeTable * table, __u8 * ptr, __u8 * end) { - table->num_nodes = 0; - while (ptr < end && table->num_nodes < NODE_TABLE_SIZE) - { - MetricomNode *node = &table->node[table->num_nodes++]; - char *dst = node->c, *limit = dst + sizeof(*node) - 1; - while (ptr < end && *ptr <= 32) ptr++; - while (ptr < end && dst < limit && *ptr != 10) *dst++ = *ptr++; - *dst++ = 0; - while (ptr < end && ptr[-1] != 10) ptr++; - } - do_gettimeofday(&table->timestamp); -} - -static int get_radio_address(struct strip *strip_info, __u8 *p) -{ - MetricomAddress addr; - - if (string_to_radio_address(&addr, p)) return(1); - - /* See if our radio address has changed */ - if (memcmp(strip_info->true_dev_addr.c, addr.c, sizeof(addr))) - { - MetricomAddressString addr_string; - radio_address_to_string(&addr, &addr_string); - printk(KERN_INFO "%s: Radio address = %s\n", strip_info->dev.name, addr_string.c); - strip_info->true_dev_addr = addr; - if (!strip_info->manual_dev_addr) *(MetricomAddress*)strip_info->dev.dev_addr = addr; - /* Give the radio a few seconds to get its head straight, then send an arp */ - strip_info->gratuitous_arp = jiffies + 15 * HZ; - strip_info->arp_interval = 1 * HZ; - } - return(0); + table->num_nodes = 0; + while (ptr < end && table->num_nodes < NODE_TABLE_SIZE) { + MetricomNode *node = &table->node[table->num_nodes++]; + char *dst = node->c, *limit = dst + sizeof(*node) - 1; + while (ptr < end && *ptr <= 32) + ptr++; + while (ptr < end && dst < limit && *ptr != 10) + *dst++ = *ptr++; + *dst++ = 0; + while (ptr < end && ptr[-1] != 10) + ptr++; + } + do_gettimeofday(&table->timestamp); +} + +static int get_radio_address(struct strip *strip_info, __u8 * p) +{ + MetricomAddress addr; + + if (string_to_radio_address(&addr, p)) + return (1); + + /* See if our radio address has changed */ + if (memcmp(strip_info->true_dev_addr.c, addr.c, sizeof(addr))) { + MetricomAddressString addr_string; + radio_address_to_string(&addr, &addr_string); + printk(KERN_INFO "%s: Radio address = %s\n", + strip_info->dev.name, addr_string.c); + strip_info->true_dev_addr = addr; + if (!strip_info->manual_dev_addr) + *(MetricomAddress *) strip_info->dev.dev_addr = + addr; + /* Give the radio a few seconds to get its head straight, then send an arp */ + strip_info->gratuitous_arp = jiffies + 15 * HZ; + strip_info->arp_interval = 1 * HZ; + } + return (0); } static int verify_checksum(struct strip *strip_info) { - __u8 *p = strip_info->sx_buff; - __u8 *end = strip_info->sx_buff + strip_info->sx_count - 4; - u_short sum = (READHEX16(end[0]) << 12) | (READHEX16(end[1]) << 8) | - (READHEX16(end[2]) << 4) | (READHEX16(end[3])); - while (p < end) sum -= *p++; - if (sum == 0 && strip_info->firmware_level == StructuredMessages) - { - strip_info->firmware_level = ChecksummedMessages; - printk(KERN_INFO "%s: Radio provides message checksums\n", strip_info->dev.name); - } - return(sum == 0); + __u8 *p = strip_info->sx_buff; + __u8 *end = strip_info->sx_buff + strip_info->sx_count - 4; + u_short sum = + (READHEX16(end[0]) << 12) | (READHEX16(end[1]) << 8) | + (READHEX16(end[2]) << 4) | (READHEX16(end[3])); + while (p < end) + sum -= *p++; + if (sum == 0 && strip_info->firmware_level == StructuredMessages) { + strip_info->firmware_level = ChecksummedMessages; + printk(KERN_INFO "%s: Radio provides message checksums\n", + strip_info->dev.name); + } + return (sum == 0); } static void RecvErr(char *msg, struct strip *strip_info) { - __u8 *ptr = strip_info->sx_buff; - __u8 *end = strip_info->sx_buff + strip_info->sx_count; - DumpData(msg, strip_info, ptr, end); - strip_info->rx_errors++; -} - -static void RecvErr_Message(struct strip *strip_info, __u8 *sendername, const __u8 *msg, u_long len) -{ - if (has_prefix(msg, len, "001")) /* Not in StarMode! */ - { - RecvErr("Error Msg:", strip_info); - printk(KERN_INFO "%s: Radio %s is not in StarMode\n", - strip_info->dev.name, sendername); - } - - else if (has_prefix(msg, len, "002")) /* Remap handle */ - { - /* We ignore "Remap handle" messages for now */ - } - - else if (has_prefix(msg, len, "003")) /* Can't resolve name */ - { - RecvErr("Error Msg:", strip_info); - printk(KERN_INFO "%s: Destination radio name is unknown\n", - strip_info->dev.name); - } - - else if (has_prefix(msg, len, "004")) /* Name too small or missing */ - { - strip_info->watchdog_doreset = jiffies + LongTime; -#if TICKLE_TIMERS - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO "**** Got ERR_004 response at %02d.%06d\n", - tv.tv_sec % 100, tv.tv_usec); - } -#endif - if (!strip_info->working) - { - strip_info->working = TRUE; - printk(KERN_INFO "%s: Radio now in starmode\n", strip_info->dev.name); - /* - * If the radio has just entered a working state, we should do our first - * probe ASAP, so that we find out our radio address etc. without delay. - */ - strip_info->watchdog_doprobe = jiffies; - } - if (strip_info->firmware_level == NoStructure && sendername) - { - strip_info->firmware_level = StructuredMessages; - strip_info->next_command = 0; /* Try to enable checksums ASAP */ - printk(KERN_INFO "%s: Radio provides structured messages\n", strip_info->dev.name); - } - if (strip_info->firmware_level >= StructuredMessages) - { - /* - * If this message has a valid checksum on the end, then the call to verify_checksum - * will elevate the firmware_level to ChecksummedMessages for us. (The actual return - * code from verify_checksum is ignored here.) - */ - verify_checksum(strip_info); - /* - * If the radio has structured messages but we don't yet have all our information about it, - * we should do probes without delay, until we have gathered all the information - */ - if (!GOT_ALL_RADIO_INFO(strip_info)) strip_info->watchdog_doprobe = jiffies; - } - } - - else if (has_prefix(msg, len, "005")) /* Bad count specification */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "006")) /* Header too big */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "007")) /* Body too big */ - { - RecvErr("Error Msg:", strip_info); - printk(KERN_ERR "%s: Error! Packet size too big for radio.\n", - strip_info->dev.name); - } - - else if (has_prefix(msg, len, "008")) /* Bad character in name */ - { - RecvErr("Error Msg:", strip_info); - printk(KERN_ERR "%s: Radio name contains illegal character\n", - strip_info->dev.name); - } - - else if (has_prefix(msg, len, "009")) /* No count or line terminator */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "010")) /* Invalid checksum */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "011")) /* Checksum didn't match */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "012")) /* Failed to transmit packet */ - RecvErr("Error Msg:", strip_info); - - else - RecvErr("Error Msg:", strip_info); -} - -static void process_AT_response(struct strip *strip_info, __u8 *ptr, __u8 *end) -{ - u_long len; - __u8 *p = ptr; - while (p < end && p[-1] != 10) p++; /* Skip past first newline character */ - /* Now ptr points to the AT command, and p points to the text of the response. */ - len = p-ptr; + __u8 *ptr = strip_info->sx_buff; + __u8 *end = strip_info->sx_buff + strip_info->sx_count; + DumpData(msg, strip_info, ptr, end); + strip_info->rx_errors++; +} + +static void RecvErr_Message(struct strip *strip_info, __u8 * sendername, + const __u8 * msg, u_long len) +{ + if (has_prefix(msg, len, "001")) { /* Not in StarMode! */ + RecvErr("Error Msg:", strip_info); + printk(KERN_INFO "%s: Radio %s is not in StarMode\n", + strip_info->dev.name, sendername); + } + + else if (has_prefix(msg, len, "002")) { /* Remap handle */ + /* We ignore "Remap handle" messages for now */ + } + + else if (has_prefix(msg, len, "003")) { /* Can't resolve name */ + RecvErr("Error Msg:", strip_info); + printk(KERN_INFO "%s: Destination radio name is unknown\n", + strip_info->dev.name); + } + else if (has_prefix(msg, len, "004")) { /* Name too small or missing */ + strip_info->watchdog_doreset = jiffies + LongTime; #if TICKLE_TIMERS - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO "**** Got AT response %.7s at %02d.%06d\n", - ptr, tv.tv_sec % 100, tv.tv_usec); - } + { + struct timeval tv; + do_gettimeofday(&tv); + printk(KERN_INFO + "**** Got ERR_004 response at %02d.%06d\n", + tv.tv_sec % 100, tv.tv_usec); + } #endif + if (!strip_info->working) { + strip_info->working = TRUE; + printk(KERN_INFO "%s: Radio now in starmode\n", + strip_info->dev.name); + /* + * If the radio has just entered a working state, we should do our first + * probe ASAP, so that we find out our radio address etc. without delay. + */ + strip_info->watchdog_doprobe = jiffies; + } + if (strip_info->firmware_level == NoStructure && sendername) { + strip_info->firmware_level = StructuredMessages; + strip_info->next_command = 0; /* Try to enable checksums ASAP */ + printk(KERN_INFO + "%s: Radio provides structured messages\n", + strip_info->dev.name); + } + if (strip_info->firmware_level >= StructuredMessages) { + /* + * If this message has a valid checksum on the end, then the call to verify_checksum + * will elevate the firmware_level to ChecksummedMessages for us. (The actual return + * code from verify_checksum is ignored here.) + */ + verify_checksum(strip_info); + /* + * If the radio has structured messages but we don't yet have all our information about it, + * we should do probes without delay, until we have gathered all the information + */ + if (!GOT_ALL_RADIO_INFO(strip_info)) + strip_info->watchdog_doprobe = jiffies; + } + } + + else if (has_prefix(msg, len, "005")) /* Bad count specification */ + RecvErr("Error Msg:", strip_info); + + else if (has_prefix(msg, len, "006")) /* Header too big */ + RecvErr("Error Msg:", strip_info); + + else if (has_prefix(msg, len, "007")) { /* Body too big */ + RecvErr("Error Msg:", strip_info); + printk(KERN_ERR + "%s: Error! Packet size too big for radio.\n", + strip_info->dev.name); + } - if (has_prefix(ptr, len, "ATS300?" )) get_radio_version(strip_info, p, end); - else if (has_prefix(ptr, len, "ATS305?" )) get_radio_address(strip_info, p); - else if (has_prefix(ptr, len, "ATS311?" )) get_radio_neighbours(&strip_info->poletops, p, end); - else if (has_prefix(ptr, len, "ATS319=7")) verify_checksum(strip_info); - else if (has_prefix(ptr, len, "ATS325?" )) get_radio_voltage(strip_info, p, end); - else if (has_prefix(ptr, len, "AT~LA" )) get_radio_neighbours(&strip_info->portables, p, end); - else RecvErr("Unknown AT Response:", strip_info); + else if (has_prefix(msg, len, "008")) { /* Bad character in name */ + RecvErr("Error Msg:", strip_info); + printk(KERN_ERR + "%s: Radio name contains illegal character\n", + strip_info->dev.name); + } + + else if (has_prefix(msg, len, "009")) /* No count or line terminator */ + RecvErr("Error Msg:", strip_info); + + else if (has_prefix(msg, len, "010")) /* Invalid checksum */ + RecvErr("Error Msg:", strip_info); + + else if (has_prefix(msg, len, "011")) /* Checksum didn't match */ + RecvErr("Error Msg:", strip_info); + + else if (has_prefix(msg, len, "012")) /* Failed to transmit packet */ + RecvErr("Error Msg:", strip_info); + + else + RecvErr("Error Msg:", strip_info); } -static void process_ACK(struct strip *strip_info, __u8 *ptr, __u8 *end) +static void process_AT_response(struct strip *strip_info, __u8 * ptr, + __u8 * end) +{ + u_long len; + __u8 *p = ptr; + while (p < end && p[-1] != 10) + p++; /* Skip past first newline character */ + /* Now ptr points to the AT command, and p points to the text of the response. */ + len = p - ptr; + +#if TICKLE_TIMERS + { + struct timeval tv; + do_gettimeofday(&tv); + printk(KERN_INFO "**** Got AT response %.7s at %02d.%06d\n", + ptr, tv.tv_sec % 100, tv.tv_usec); + } +#endif + + if (has_prefix(ptr, len, "ATS300?")) + get_radio_version(strip_info, p, end); + else if (has_prefix(ptr, len, "ATS305?")) + get_radio_address(strip_info, p); + else if (has_prefix(ptr, len, "ATS311?")) + get_radio_neighbours(&strip_info->poletops, p, end); + else if (has_prefix(ptr, len, "ATS319=7")) + verify_checksum(strip_info); + else if (has_prefix(ptr, len, "ATS325?")) + get_radio_voltage(strip_info, p, end); + else if (has_prefix(ptr, len, "AT~LA")) + get_radio_neighbours(&strip_info->portables, p, end); + else + RecvErr("Unknown AT Response:", strip_info); +} + +static void process_ACK(struct strip *strip_info, __u8 * ptr, __u8 * end) { - /* Currently we don't do anything with ACKs from the radio */ + /* Currently we don't do anything with ACKs from the radio */ } -static void process_Info(struct strip *strip_info, __u8 *ptr, __u8 *end) +static void process_Info(struct strip *strip_info, __u8 * ptr, __u8 * end) { - if (ptr+16 > end) RecvErr("Bad Info Msg:", strip_info); + if (ptr + 16 > end) + RecvErr("Bad Info Msg:", strip_info); } static struct net_device *get_strip_dev(struct strip *strip_info) { - /* If our hardware address is *manually set* to zero, and we know our */ - /* real radio hardware address, try to find another strip device that has been */ - /* manually set to that address that we can 'transfer ownership' of this packet to */ - if (strip_info->manual_dev_addr && - !memcmp(strip_info->dev.dev_addr, zero_address.c, sizeof(zero_address)) && - memcmp(&strip_info->true_dev_addr, zero_address.c, sizeof(zero_address))) - { - struct net_device *dev; - read_lock_bh(&dev_base_lock); - dev = dev_base; - while (dev) - { - if (dev->type == strip_info->dev.type && - !memcmp(dev->dev_addr, &strip_info->true_dev_addr, sizeof(MetricomAddress))) - { - printk(KERN_INFO "%s: Transferred packet ownership to %s.\n", - strip_info->dev.name, dev->name); + /* If our hardware address is *manually set* to zero, and we know our */ + /* real radio hardware address, try to find another strip device that has been */ + /* manually set to that address that we can 'transfer ownership' of this packet to */ + if (strip_info->manual_dev_addr && + !memcmp(strip_info->dev.dev_addr, zero_address.c, + sizeof(zero_address)) + && memcmp(&strip_info->true_dev_addr, zero_address.c, + sizeof(zero_address))) { + struct net_device *dev; + read_lock_bh(&dev_base_lock); + dev = dev_base; + while (dev) { + if (dev->type == strip_info->dev.type && + !memcmp(dev->dev_addr, + &strip_info->true_dev_addr, + sizeof(MetricomAddress))) { + printk(KERN_INFO + "%s: Transferred packet ownership to %s.\n", + strip_info->dev.name, dev->name); + read_unlock_bh(&dev_base_lock); + return (dev); + } + dev = dev->next; + } read_unlock_bh(&dev_base_lock); - return(dev); - } - dev = dev->next; - } - read_unlock_bh(&dev_base_lock); - } - return(&strip_info->dev); + } + return (&strip_info->dev); } /* * Send one completely decapsulated datagram to the next layer. */ -static void deliver_packet(struct strip *strip_info, STRIP_Header *header, __u16 packetlen) +static void deliver_packet(struct strip *strip_info, STRIP_Header * header, + __u16 packetlen) { - struct sk_buff *skb = dev_alloc_skb(sizeof(STRIP_Header) + packetlen); - if (!skb) - { - printk(KERN_ERR "%s: memory squeeze, dropping packet.\n", strip_info->dev.name); - strip_info->rx_dropped++; - } - else - { - memcpy(skb_put(skb, sizeof(STRIP_Header)), header, sizeof(STRIP_Header)); - memcpy(skb_put(skb, packetlen), strip_info->rx_buff, packetlen); - skb->dev = get_strip_dev(strip_info); - skb->protocol = header->protocol; - skb->mac.raw = skb->data; - - /* Having put a fake header on the front of the sk_buff for the */ - /* benefit of tools like tcpdump, skb_pull now 'consumes' that */ - /* fake header before we hand the packet up to the next layer. */ - skb_pull(skb, sizeof(STRIP_Header)); - - /* Finally, hand the packet up to the next layer (e.g. IP or ARP, etc.) */ - strip_info->rx_packets++; - strip_info->rx_pps_count++; + struct sk_buff *skb = dev_alloc_skb(sizeof(STRIP_Header) + packetlen); + if (!skb) { + printk(KERN_ERR "%s: memory squeeze, dropping packet.\n", + strip_info->dev.name); + strip_info->rx_dropped++; + } else { + memcpy(skb_put(skb, sizeof(STRIP_Header)), header, + sizeof(STRIP_Header)); + memcpy(skb_put(skb, packetlen), strip_info->rx_buff, + packetlen); + skb->dev = get_strip_dev(strip_info); + skb->protocol = header->protocol; + skb->mac.raw = skb->data; + + /* Having put a fake header on the front of the sk_buff for the */ + /* benefit of tools like tcpdump, skb_pull now 'consumes' that */ + /* fake header before we hand the packet up to the next layer. */ + skb_pull(skb, sizeof(STRIP_Header)); + + /* Finally, hand the packet up to the next layer (e.g. IP or ARP, etc.) */ + strip_info->rx_packets++; + strip_info->rx_pps_count++; #ifdef EXT_COUNTERS - strip_info->rx_bytes += packetlen; + strip_info->rx_bytes += packetlen; #endif - skb->dev->last_rx = jiffies; - netif_rx(skb); - } -} - -static void process_IP_packet(struct strip *strip_info, STRIP_Header *header, __u8 *ptr, __u8 *end) -{ - __u16 packetlen; - - /* Decode start of the IP packet header */ - ptr = UnStuffData(ptr, end, strip_info->rx_buff, 4); - if (!ptr) - { - RecvErr("IP Packet too short", strip_info); - return; - } - - packetlen = ((__u16)strip_info->rx_buff[2] << 8) | strip_info->rx_buff[3]; - - if (packetlen > MAX_RECV_MTU) - { - printk(KERN_INFO "%s: Dropping oversized received IP packet: %d bytes\n", - strip_info->dev.name, packetlen); - strip_info->rx_dropped++; - return; - } - - /*printk(KERN_INFO "%s: Got %d byte IP packet\n", strip_info->dev.name, packetlen);*/ - - /* Decode remainder of the IP packet */ - ptr = UnStuffData(ptr, end, strip_info->rx_buff+4, packetlen-4); - if (!ptr) - { - RecvErr("IP Packet too short", strip_info); - return; - } - - if (ptr < end) - { - RecvErr("IP Packet too long", strip_info); - return; - } - - header->protocol = htons(ETH_P_IP); - - deliver_packet(strip_info, header, packetlen); -} - -static void process_ARP_packet(struct strip *strip_info, STRIP_Header *header, __u8 *ptr, __u8 *end) -{ - __u16 packetlen; - struct arphdr *arphdr = (struct arphdr *)strip_info->rx_buff; - - /* Decode start of the ARP packet */ - ptr = UnStuffData(ptr, end, strip_info->rx_buff, 8); - if (!ptr) - { - RecvErr("ARP Packet too short", strip_info); - return; - } - - packetlen = 8 + (arphdr->ar_hln + arphdr->ar_pln) * 2; - - if (packetlen > MAX_RECV_MTU) - { - printk(KERN_INFO "%s: Dropping oversized received ARP packet: %d bytes\n", - strip_info->dev.name, packetlen); - strip_info->rx_dropped++; - return; - } - - /*printk(KERN_INFO "%s: Got %d byte ARP %s\n", - strip_info->dev.name, packetlen, - ntohs(arphdr->ar_op) == ARPOP_REQUEST ? "request" : "reply");*/ - - /* Decode remainder of the ARP packet */ - ptr = UnStuffData(ptr, end, strip_info->rx_buff+8, packetlen-8); - if (!ptr) - { - RecvErr("ARP Packet too short", strip_info); - return; - } - - if (ptr < end) - { - RecvErr("ARP Packet too long", strip_info); - return; - } + skb->dev->last_rx = jiffies; + netif_rx(skb); + } +} + +static void process_IP_packet(struct strip *strip_info, + STRIP_Header * header, __u8 * ptr, + __u8 * end) +{ + __u16 packetlen; + + /* Decode start of the IP packet header */ + ptr = UnStuffData(ptr, end, strip_info->rx_buff, 4); + if (!ptr) { + RecvErr("IP Packet too short", strip_info); + return; + } + + packetlen = ((__u16) strip_info->rx_buff[2] << 8) | strip_info->rx_buff[3]; + + if (packetlen > MAX_RECV_MTU) { + printk(KERN_INFO "%s: Dropping oversized received IP packet: %d bytes\n", + strip_info->dev.name, packetlen); + strip_info->rx_dropped++; + return; + } + + /*printk(KERN_INFO "%s: Got %d byte IP packet\n", strip_info->dev.name, packetlen); */ + + /* Decode remainder of the IP packet */ + ptr = + UnStuffData(ptr, end, strip_info->rx_buff + 4, packetlen - 4); + if (!ptr) { + RecvErr("IP Packet too short", strip_info); + return; + } + + if (ptr < end) { + RecvErr("IP Packet too long", strip_info); + return; + } - header->protocol = htons(ETH_P_ARP); + header->protocol = htons(ETH_P_IP); - deliver_packet(strip_info, header, packetlen); + deliver_packet(strip_info, header, packetlen); +} + +static void process_ARP_packet(struct strip *strip_info, + STRIP_Header * header, __u8 * ptr, + __u8 * end) +{ + __u16 packetlen; + struct arphdr *arphdr = (struct arphdr *) strip_info->rx_buff; + + /* Decode start of the ARP packet */ + ptr = UnStuffData(ptr, end, strip_info->rx_buff, 8); + if (!ptr) { + RecvErr("ARP Packet too short", strip_info); + return; + } + + packetlen = 8 + (arphdr->ar_hln + arphdr->ar_pln) * 2; + + if (packetlen > MAX_RECV_MTU) { + printk(KERN_INFO + "%s: Dropping oversized received ARP packet: %d bytes\n", + strip_info->dev.name, packetlen); + strip_info->rx_dropped++; + return; + } + + /*printk(KERN_INFO "%s: Got %d byte ARP %s\n", + strip_info->dev.name, packetlen, + ntohs(arphdr->ar_op) == ARPOP_REQUEST ? "request" : "reply"); */ + + /* Decode remainder of the ARP packet */ + ptr = + UnStuffData(ptr, end, strip_info->rx_buff + 8, packetlen - 8); + if (!ptr) { + RecvErr("ARP Packet too short", strip_info); + return; + } + + if (ptr < end) { + RecvErr("ARP Packet too long", strip_info); + return; + } + + header->protocol = htons(ETH_P_ARP); + + deliver_packet(strip_info, header, packetlen); } /* @@ -2184,22 +2152,29 @@ */ static void process_text_message(struct strip *strip_info) { - __u8 *msg = strip_info->sx_buff; - int len = strip_info->sx_count; + __u8 *msg = strip_info->sx_buff; + int len = strip_info->sx_count; - /* Check for anything that looks like it might be our radio name */ - /* (This is here for backwards compatibility with old firmware) */ - if (len == 9 && get_radio_address(strip_info, msg) == 0) return; - - if (text_equal(msg, len, "OK" )) return; /* Ignore 'OK' responses from prior commands */ - if (text_equal(msg, len, "ERROR" )) return; /* Ignore 'ERROR' messages */ - if (has_prefix(msg, len, "ate0q1" )) return; /* Ignore character echo back from the radio */ - - /* Catch other error messages */ - /* (This is here for backwards compatibility with old firmware) */ - if (has_prefix(msg, len, "ERR_")) { RecvErr_Message(strip_info, NULL, &msg[4], len-4); return; } - - RecvErr("No initial *", strip_info); + /* Check for anything that looks like it might be our radio name */ + /* (This is here for backwards compatibility with old firmware) */ + if (len == 9 && get_radio_address(strip_info, msg) == 0) + return; + + if (text_equal(msg, len, "OK")) + return; /* Ignore 'OK' responses from prior commands */ + if (text_equal(msg, len, "ERROR")) + return; /* Ignore 'ERROR' messages */ + if (has_prefix(msg, len, "ate0q1")) + return; /* Ignore character echo back from the radio */ + + /* Catch other error messages */ + /* (This is here for backwards compatibility with old firmware) */ + if (has_prefix(msg, len, "ERR_")) { + RecvErr_Message(strip_info, NULL, &msg[4], len - 4); + return; + } + + RecvErr("No initial *", strip_info); } /* @@ -2213,105 +2188,113 @@ */ static void process_message(struct strip *strip_info) { - STRIP_Header header = { zero_address, zero_address, 0 }; - __u8 *ptr = strip_info->sx_buff; - __u8 *end = strip_info->sx_buff + strip_info->sx_count; - __u8 sendername[32], *sptr = sendername; - MetricomKey key; - - /*HexDump("Receiving", strip_info, ptr, end);*/ - - /* Check for start of address marker, and then skip over it */ - if (*ptr == '*') ptr++; - else { process_text_message(strip_info); return; } - - /* Copy out the return address */ - while (ptr < end && *ptr != '*' && sptr < ARRAY_END(sendername)-1) *sptr++ = *ptr++; - *sptr = 0; /* Null terminate the sender name */ - - /* Check for end of address marker, and skip over it */ - if (ptr >= end || *ptr != '*') - { - RecvErr("No second *", strip_info); - return; - } - ptr++; /* Skip the second '*' */ - - /* If the sender name is "&COMMAND", ignore this 'packet' */ - /* (This is here for backwards compatibility with old firmware) */ - if (!strcmp(sendername, "&COMMAND")) - { - strip_info->firmware_level = NoStructure; - strip_info->next_command = CompatibilityCommand; - return; - } - - if (ptr+4 > end) - { - RecvErr("No proto key", strip_info); - return; - } - - /* Get the protocol key out of the buffer */ - key.c[0] = *ptr++; - key.c[1] = *ptr++; - key.c[2] = *ptr++; - key.c[3] = *ptr++; - - /* If we're using checksums, verify the checksum at the end of the packet */ - if (strip_info->firmware_level >= ChecksummedMessages) - { - end -= 4; /* Chop the last four bytes off the packet (they're the checksum) */ - if (ptr > end) - { - RecvErr("Missing Checksum", strip_info); - return; - } - if (!verify_checksum(strip_info)) - { - RecvErr("Bad Checksum", strip_info); - return; - } - } - - /*printk(KERN_INFO "%s: Got packet from \"%s\".\n", strip_info->dev.name, sendername);*/ - - /* - * Fill in (pseudo) source and destination addresses in the packet. - * We assume that the destination address was our address (the radio does not - * tell us this). If the radio supplies a source address, then we use it. - */ - header.dst_addr = strip_info->true_dev_addr; - string_to_radio_address(&header.src_addr, sendername); + STRIP_Header header = { zero_address, zero_address, 0 }; + __u8 *ptr = strip_info->sx_buff; + __u8 *end = strip_info->sx_buff + strip_info->sx_count; + __u8 sendername[32], *sptr = sendername; + MetricomKey key; + + /*HexDump("Receiving", strip_info, ptr, end); */ + + /* Check for start of address marker, and then skip over it */ + if (*ptr == '*') + ptr++; + else { + process_text_message(strip_info); + return; + } + + /* Copy out the return address */ + while (ptr < end && *ptr != '*' + && sptr < ARRAY_END(sendername) - 1) + *sptr++ = *ptr++; + *sptr = 0; /* Null terminate the sender name */ + + /* Check for end of address marker, and skip over it */ + if (ptr >= end || *ptr != '*') { + RecvErr("No second *", strip_info); + return; + } + ptr++; /* Skip the second '*' */ + + /* If the sender name is "&COMMAND", ignore this 'packet' */ + /* (This is here for backwards compatibility with old firmware) */ + if (!strcmp(sendername, "&COMMAND")) { + strip_info->firmware_level = NoStructure; + strip_info->next_command = CompatibilityCommand; + return; + } + + if (ptr + 4 > end) { + RecvErr("No proto key", strip_info); + return; + } + + /* Get the protocol key out of the buffer */ + key.c[0] = *ptr++; + key.c[1] = *ptr++; + key.c[2] = *ptr++; + key.c[3] = *ptr++; + + /* If we're using checksums, verify the checksum at the end of the packet */ + if (strip_info->firmware_level >= ChecksummedMessages) { + end -= 4; /* Chop the last four bytes off the packet (they're the checksum) */ + if (ptr > end) { + RecvErr("Missing Checksum", strip_info); + return; + } + if (!verify_checksum(strip_info)) { + RecvErr("Bad Checksum", strip_info); + return; + } + } + + /*printk(KERN_INFO "%s: Got packet from \"%s\".\n", strip_info->dev.name, sendername); */ + + /* + * Fill in (pseudo) source and destination addresses in the packet. + * We assume that the destination address was our address (the radio does not + * tell us this). If the radio supplies a source address, then we use it. + */ + header.dst_addr = strip_info->true_dev_addr; + string_to_radio_address(&header.src_addr, sendername); #ifdef EXT_COUNTERS - if (key.l == SIP0Key.l) { - strip_info->rx_rbytes += (end - ptr); - process_IP_packet(strip_info, &header, ptr, end); - } else if (key.l == ARP0Key.l) { - strip_info->rx_rbytes += (end - ptr); - process_ARP_packet(strip_info, &header, ptr, end); - } else if (key.l == ATR_Key.l) { - strip_info->rx_ebytes += (end - ptr); - process_AT_response(strip_info, ptr, end); - } else if (key.l == ACK_Key.l) { - strip_info->rx_ebytes += (end - ptr); - process_ACK(strip_info, ptr, end); - } else if (key.l == INF_Key.l) { - strip_info->rx_ebytes += (end - ptr); - process_Info(strip_info, ptr, end); - } else if (key.l == ERR_Key.l) { - strip_info->rx_ebytes += (end - ptr); - RecvErr_Message(strip_info, sendername, ptr, end-ptr); - } else RecvErr("Unrecognized protocol key", strip_info); + if (key.l == SIP0Key.l) { + strip_info->rx_rbytes += (end - ptr); + process_IP_packet(strip_info, &header, ptr, end); + } else if (key.l == ARP0Key.l) { + strip_info->rx_rbytes += (end - ptr); + process_ARP_packet(strip_info, &header, ptr, end); + } else if (key.l == ATR_Key.l) { + strip_info->rx_ebytes += (end - ptr); + process_AT_response(strip_info, ptr, end); + } else if (key.l == ACK_Key.l) { + strip_info->rx_ebytes += (end - ptr); + process_ACK(strip_info, ptr, end); + } else if (key.l == INF_Key.l) { + strip_info->rx_ebytes += (end - ptr); + process_Info(strip_info, ptr, end); + } else if (key.l == ERR_Key.l) { + strip_info->rx_ebytes += (end - ptr); + RecvErr_Message(strip_info, sendername, ptr, end - ptr); + } else + RecvErr("Unrecognized protocol key", strip_info); #else - if (key.l == SIP0Key.l) process_IP_packet (strip_info, &header, ptr, end); - else if (key.l == ARP0Key.l) process_ARP_packet (strip_info, &header, ptr, end); - else if (key.l == ATR_Key.l) process_AT_response(strip_info, ptr, end); - else if (key.l == ACK_Key.l) process_ACK (strip_info, ptr, end); - else if (key.l == INF_Key.l) process_Info (strip_info, ptr, end); - else if (key.l == ERR_Key.l) RecvErr_Message (strip_info, sendername, ptr, end-ptr); - else RecvErr("Unrecognized protocol key", strip_info); + if (key.l == SIP0Key.l) + process_IP_packet(strip_info, &header, ptr, end); + else if (key.l == ARP0Key.l) + process_ARP_packet(strip_info, &header, ptr, end); + else if (key.l == ATR_Key.l) + process_AT_response(strip_info, ptr, end); + else if (key.l == ACK_Key.l) + process_ACK(strip_info, ptr, end); + else if (key.l == INF_Key.l) + process_Info(strip_info, ptr, end); + else if (key.l == ERR_Key.l) + RecvErr_Message(strip_info, sendername, ptr, end - ptr); + else + RecvErr("Unrecognized protocol key", strip_info); #endif } @@ -2327,121 +2310,140 @@ * and sent on to some IP layer for further processing. */ -static void -strip_receive_buf(struct tty_struct *tty, const unsigned char *cp, char *fp, int count) +static void strip_receive_buf(struct tty_struct *tty, const unsigned char *cp, + char *fp, int count) { - struct strip *strip_info = (struct strip *) tty->disc_data; - const unsigned char *end = cp + count; - - if (!strip_info || strip_info->magic != STRIP_MAGIC - || !netif_running(&strip_info->dev)) - return; - - /* Argh! mtu change time! - costs us the packet part received at the change */ - if (strip_info->mtu != strip_info->dev.mtu) - strip_changedmtu(strip_info); + struct strip *strip_info = (struct strip *) tty->disc_data; + const unsigned char *end = cp + count; + unsigned long flags; + + if (!strip_info || strip_info->magic != STRIP_MAGIC + || !netif_running(&strip_info->dev)) + return; + + spin_lock_irqsave(&strip_lock, flags); + + /* Argh! mtu change time! - costs us the packet part received at the change */ + if (strip_info->mtu != strip_info->dev.mtu) + strip_changedmtu(strip_info); #if 0 - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO "**** strip_receive_buf: %3d bytes at %02d.%06d\n", - count, tv.tv_sec % 100, tv.tv_usec); - } + { + struct timeval tv; + do_gettimeofday(&tv); + printk(KERN_INFO + "**** strip_receive_buf: %3d bytes at %02d.%06d\n", + count, tv.tv_sec % 100, tv.tv_usec); + } #endif #ifdef EXT_COUNTERS - strip_info->rx_sbytes += count; + strip_info->rx_sbytes += count; #endif - /* Read the characters out of the buffer */ - while (cp < end) - { - if (fp && *fp) printk(KERN_INFO "%s: %s on serial port\n", strip_info->dev.name, TTYERROR(*fp)); - if (fp && *fp++ && !strip_info->discard) /* If there's a serial error, record it */ - { - /* If we have some characters in the buffer, discard them */ - strip_info->discard = strip_info->sx_count; - strip_info->rx_errors++; - } - - /* Leading control characters (CR, NL, Tab, etc.) are ignored */ - if (strip_info->sx_count > 0 || *cp >= ' ') - { - if (*cp == 0x0D) /* If end of packet, decide what to do with it */ - { - if (strip_info->sx_count > 3000) - printk(KERN_INFO "%s: Cut a %d byte packet (%d bytes remaining)%s\n", - strip_info->dev.name, strip_info->sx_count, end-cp-1, - strip_info->discard ? " (discarded)" : ""); - if (strip_info->sx_count > strip_info->sx_size) - { - strip_info->rx_over_errors++; - printk(KERN_INFO "%s: sx_buff overflow (%d bytes total)\n", - strip_info->dev.name, strip_info->sx_count); - } - else if (strip_info->discard) - printk(KERN_INFO "%s: Discarding bad packet (%d/%d)\n", - strip_info->dev.name, strip_info->discard, strip_info->sx_count); - else process_message(strip_info); - strip_info->discard = 0; - strip_info->sx_count = 0; - } - else - { - /* Make sure we have space in the buffer */ - if (strip_info->sx_count < strip_info->sx_size) - strip_info->sx_buff[strip_info->sx_count] = *cp; - strip_info->sx_count++; - } - } - cp++; - } + /* Read the characters out of the buffer */ + while (cp < end) { + if (fp && *fp) + printk(KERN_INFO "%s: %s on serial port\n", + strip_info->dev.name, TTYERROR(*fp)); + if (fp && *fp++ && !strip_info->discard) { /* If there's a serial error, record it */ + /* If we have some characters in the buffer, discard them */ + strip_info->discard = strip_info->sx_count; + strip_info->rx_errors++; + } + + /* Leading control characters (CR, NL, Tab, etc.) are ignored */ + if (strip_info->sx_count > 0 || *cp >= ' ') { + if (*cp == 0x0D) { /* If end of packet, decide what to do with it */ + if (strip_info->sx_count > 3000) + printk(KERN_INFO + "%s: Cut a %d byte packet (%d bytes remaining)%s\n", + strip_info->dev.name, + strip_info->sx_count, + end - cp - 1, + strip_info-> + discard ? " (discarded)" : + ""); + if (strip_info->sx_count > + strip_info->sx_size) { + strip_info->rx_over_errors++; + printk(KERN_INFO + "%s: sx_buff overflow (%d bytes total)\n", + strip_info->dev.name, + strip_info->sx_count); + } else if (strip_info->discard) + printk(KERN_INFO + "%s: Discarding bad packet (%d/%d)\n", + strip_info->dev.name, + strip_info->discard, + strip_info->sx_count); + else + process_message(strip_info); + strip_info->discard = 0; + strip_info->sx_count = 0; + } else { + /* Make sure we have space in the buffer */ + if (strip_info->sx_count < + strip_info->sx_size) + strip_info->sx_buff[strip_info-> + sx_count] = + *cp; + strip_info->sx_count++; + } + } + cp++; + } + spin_unlock_irqrestore(&strip_lock, flags); } /************************************************************************/ /* General control routines */ -static int set_mac_address(struct strip *strip_info, MetricomAddress *addr) +static int set_mac_address(struct strip *strip_info, + MetricomAddress * addr) { - /* - * We're using a manually specified address if the address is set - * to anything other than all ones. Setting the address to all ones - * disables manual mode and goes back to automatic address determination - * (tracking the true address that the radio has). - */ - strip_info->manual_dev_addr = memcmp(addr->c, broadcast_address.c, sizeof(broadcast_address)); - if (strip_info->manual_dev_addr) - *(MetricomAddress*)strip_info->dev.dev_addr = *addr; - else *(MetricomAddress*)strip_info->dev.dev_addr = strip_info->true_dev_addr; - return 0; + /* + * We're using a manually specified address if the address is set + * to anything other than all ones. Setting the address to all ones + * disables manual mode and goes back to automatic address determination + * (tracking the true address that the radio has). + */ + strip_info->manual_dev_addr = + memcmp(addr->c, broadcast_address.c, + sizeof(broadcast_address)); + if (strip_info->manual_dev_addr) + *(MetricomAddress *) strip_info->dev.dev_addr = *addr; + else + *(MetricomAddress *) strip_info->dev.dev_addr = + strip_info->true_dev_addr; + return 0; } static int dev_set_mac_address(struct net_device *dev, void *addr) { - struct strip *strip_info = (struct strip *)(dev->priv); - struct sockaddr *sa = addr; - printk(KERN_INFO "%s: strip_set_dev_mac_address called\n", dev->name); - set_mac_address(strip_info, (MetricomAddress *)sa->sa_data); - return 0; + struct strip *strip_info = (struct strip *) (dev->priv); + struct sockaddr *sa = addr; + printk(KERN_INFO "%s: strip_set_dev_mac_address called\n", dev->name); + set_mac_address(strip_info, (MetricomAddress *) sa->sa_data); + return 0; } static struct net_device_stats *strip_get_stats(struct net_device *dev) { - static struct net_device_stats stats; - struct strip *strip_info = (struct strip *)(dev->priv); + static struct net_device_stats stats; + struct strip *strip_info = (struct strip *) (dev->priv); - memset(&stats, 0, sizeof(struct net_device_stats)); + memset(&stats, 0, sizeof(struct net_device_stats)); - stats.rx_packets = strip_info->rx_packets; - stats.tx_packets = strip_info->tx_packets; - stats.rx_dropped = strip_info->rx_dropped; - stats.tx_dropped = strip_info->tx_dropped; - stats.tx_errors = strip_info->tx_errors; - stats.rx_errors = strip_info->rx_errors; - stats.rx_over_errors = strip_info->rx_over_errors; - return(&stats); + stats.rx_packets = strip_info->rx_packets; + stats.tx_packets = strip_info->tx_packets; + stats.rx_dropped = strip_info->rx_dropped; + stats.tx_dropped = strip_info->tx_dropped; + stats.tx_errors = strip_info->tx_errors; + stats.rx_errors = strip_info->rx_errors; + stats.rx_over_errors = strip_info->rx_over_errors; + return (&stats); } @@ -2474,43 +2476,30 @@ static int strip_open_low(struct net_device *dev) { - struct strip *strip_info = (struct strip *)(dev->priv); -#if 0 - struct in_device *in_dev = dev->ip_ptr; -#endif - - if (strip_info->tty == NULL) - return(-ENODEV); - - if (!allocate_buffers(strip_info)) - return(-ENOMEM); + struct strip *strip_info = (struct strip *) (dev->priv); - strip_info->sx_count = 0; - strip_info->tx_left = 0; + if (strip_info->tty == NULL) + return (-ENODEV); - strip_info->discard = 0; - strip_info->working = FALSE; - strip_info->firmware_level = NoStructure; - strip_info->next_command = CompatibilityCommand; - strip_info->user_baud = get_baud(strip_info->tty); + if (!allocate_buffers(strip_info)) + return (-ENOMEM); -#if 0 - /* - * Needed because address '0' is special - * - * --ANK Needed it or not needed, it does not matter at all. - * Make it at user level, guys. - */ - - if (in_dev->ifa_list->ifa_address == 0) - in_dev->ifa_list->ifa_address = ntohl(0xC0A80001); -#endif - printk(KERN_INFO "%s: Initializing Radio.\n", strip_info->dev.name); - ResetRadio(strip_info); - strip_info->idle_timer.expires = jiffies + 1*HZ; - add_timer(&strip_info->idle_timer); - netif_wake_queue(dev); - return(0); + strip_info->sx_count = 0; + strip_info->tx_left = 0; + + strip_info->discard = 0; + strip_info->working = FALSE; + strip_info->firmware_level = NoStructure; + strip_info->next_command = CompatibilityCommand; + strip_info->user_baud = get_baud(strip_info->tty); + + printk(KERN_INFO "%s: Initializing Radio.\n", + strip_info->dev.name); + ResetRadio(strip_info); + strip_info->idle_timer.expires = jiffies + 1 * HZ; + add_timer(&strip_info->idle_timer); + netif_wake_queue(dev); + return (0); } @@ -2520,34 +2509,31 @@ static int strip_close_low(struct net_device *dev) { - struct strip *strip_info = (struct strip *)(dev->priv); + struct strip *strip_info = (struct strip *) (dev->priv); + + if (strip_info->tty == NULL) + return -EBUSY; + strip_info->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); - if (strip_info->tty == NULL) - return -EBUSY; - strip_info->tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP); - - netif_stop_queue(dev); - - /* - * Free all STRIP frame buffers. - */ - if (strip_info->rx_buff) - { - kfree(strip_info->rx_buff); - strip_info->rx_buff = NULL; - } - if (strip_info->sx_buff) - { - kfree(strip_info->sx_buff); - strip_info->sx_buff = NULL; - } - if (strip_info->tx_buff) - { - kfree(strip_info->tx_buff); - strip_info->tx_buff = NULL; - } - del_timer(&strip_info->idle_timer); - return 0; + netif_stop_queue(dev); + + /* + * Free all STRIP frame buffers. + */ + if (strip_info->rx_buff) { + kfree(strip_info->rx_buff); + strip_info->rx_buff = NULL; + } + if (strip_info->sx_buff) { + kfree(strip_info->sx_buff); + strip_info->sx_buff = NULL; + } + if (strip_info->tx_buff) { + kfree(strip_info->tx_buff); + strip_info->tx_buff = NULL; + } + del_timer(&strip_info->idle_timer); + return 0; } /* @@ -2557,38 +2543,38 @@ static int strip_dev_init(struct net_device *dev) { - /* - * Finish setting up the DEVICE info. - */ - - dev->trans_start = 0; - dev->last_rx = 0; - dev->tx_queue_len = 30; /* Drop after 30 frames queued */ - - dev->flags = 0; - dev->mtu = DEFAULT_STRIP_MTU; - dev->type = ARPHRD_METRICOM; /* dtang */ - dev->hard_header_len = sizeof(STRIP_Header); - /* - * dev->priv Already holds a pointer to our struct strip - */ - - *(MetricomAddress*)&dev->broadcast = broadcast_address; - dev->dev_addr[0] = 0; - dev->addr_len = sizeof(MetricomAddress); - - /* - * Pointers to interface service routines. - */ - - dev->open = strip_open_low; - dev->stop = strip_close_low; - dev->hard_start_xmit = strip_xmit; - dev->hard_header = strip_header; - dev->rebuild_header = strip_rebuild_header; - dev->set_mac_address = dev_set_mac_address; - dev->get_stats = strip_get_stats; - return 0; + /* + * Finish setting up the DEVICE info. + */ + + dev->trans_start = 0; + dev->last_rx = 0; + dev->tx_queue_len = 30; /* Drop after 30 frames queued */ + + dev->flags = 0; + dev->mtu = DEFAULT_STRIP_MTU; + dev->type = ARPHRD_METRICOM; /* dtang */ + dev->hard_header_len = sizeof(STRIP_Header); + /* + * dev->priv Already holds a pointer to our struct strip + */ + + *(MetricomAddress *) & dev->broadcast = broadcast_address; + dev->dev_addr[0] = 0; + dev->addr_len = sizeof(MetricomAddress); + + /* + * Pointers to interface service routines. + */ + + dev->open = strip_open_low; + dev->stop = strip_close_low; + dev->hard_start_xmit = strip_xmit; + dev->hard_header = strip_header; + dev->rebuild_header = strip_rebuild_header; + dev->set_mac_address = dev_set_mac_address; + dev->get_stats = strip_get_stats; + return 0; } /* @@ -2597,11 +2583,11 @@ static void strip_free(struct strip *strip_info) { - *(strip_info->referrer) = strip_info->next; - if (strip_info->next) - strip_info->next->referrer = strip_info->referrer; - strip_info->magic = 0; - kfree(strip_info); + *(strip_info->referrer) = strip_info->next; + if (strip_info->next) + strip_info->next->referrer = strip_info->referrer; + strip_info->magic = 0; + kfree(strip_info); } /* @@ -2610,59 +2596,58 @@ static struct strip *strip_alloc(void) { - int channel_id = 0; - struct strip **s = &struct_strip_list; - struct strip *strip_info = (struct strip *) - kmalloc(sizeof(struct strip), GFP_KERNEL); - - if (!strip_info) - return(NULL); /* If no more memory, return */ - - /* - * Clear the allocated memory - */ - - memset(strip_info, 0, sizeof(struct strip)); - - /* - * Search the list to find where to put our new entry - * (and in the process decide what channel number it is - * going to be) - */ - - while (*s && (*s)->dev.base_addr == channel_id) - { - channel_id++; - s = &(*s)->next; - } - - /* - * Fill in the link pointers - */ - - strip_info->next = *s; - if (*s) - (*s)->referrer = &strip_info->next; - strip_info->referrer = s; - *s = strip_info; - - strip_info->magic = STRIP_MAGIC; - strip_info->tty = NULL; - - strip_info->gratuitous_arp = jiffies + LongTime; - strip_info->arp_interval = 0; - init_timer(&strip_info->idle_timer); - strip_info->idle_timer.data = (long)&strip_info->dev; - strip_info->idle_timer.function = strip_IdleTask; - - /* Note: strip_info->if_name is currently 8 characters long */ - sprintf(strip_info->dev.name, "st%d", channel_id); - strip_info->dev.base_addr = channel_id; - strip_info->dev.priv = (void*)strip_info; - strip_info->dev.next = NULL; - strip_info->dev.init = strip_dev_init; + int channel_id = 0; + struct strip **s = &struct_strip_list; + struct strip *strip_info = (struct strip *) + kmalloc(sizeof(struct strip), GFP_KERNEL); + + if (!strip_info) + return NULL; /* If no more memory, return */ + + /* + * Clear the allocated memory + */ - return(strip_info); + memset(strip_info, 0, sizeof(struct strip)); + + /* + * Search the list to find where to put our new entry + * (and in the process decide what channel number it is + * going to be) + */ + + while (*s && (*s)->dev.base_addr == channel_id) { + channel_id++; + s = &(*s)->next; + } + + /* + * Fill in the link pointers + */ + + strip_info->next = *s; + if (*s) + (*s)->referrer = &strip_info->next; + strip_info->referrer = s; + *s = strip_info; + + strip_info->magic = STRIP_MAGIC; + strip_info->tty = NULL; + + strip_info->gratuitous_arp = jiffies + LongTime; + strip_info->arp_interval = 0; + init_timer(&strip_info->idle_timer); + strip_info->idle_timer.data = (long) &strip_info->dev; + strip_info->idle_timer.function = strip_IdleTask; + + /* Note: strip_info->if_name is currently 8 characters long */ + sprintf(strip_info->dev.name, "st%d", channel_id); + strip_info->dev.base_addr = channel_id; + strip_info->dev.priv = (void *) strip_info; + strip_info->dev.next = NULL; + strip_info->dev.init = strip_dev_init; + + return strip_info; } /* @@ -2675,62 +2660,62 @@ static int strip_open(struct tty_struct *tty) { - struct strip *strip_info = (struct strip *) tty->disc_data; + struct strip *strip_info = (struct strip *) tty->disc_data; + + /* + * First make sure we're not already connected. + */ + + if (strip_info && strip_info->magic == STRIP_MAGIC) + return -EEXIST; + + /* + * OK. Find a free STRIP channel to use. + */ + if ((strip_info = strip_alloc()) == NULL) + return -ENFILE; + + /* + * Register our newly created device so it can be ifconfig'd + * strip_dev_init() will be called as a side-effect + */ + + if (register_netdev(&strip_info->dev) != 0) { + printk(KERN_ERR "strip: register_netdev() failed.\n"); + strip_free(strip_info); + return -ENFILE; + } + + strip_info->tty = tty; + tty->disc_data = strip_info; + if (tty->driver.flush_buffer) + tty->driver.flush_buffer(tty); + if (tty->ldisc.flush_buffer) + tty->ldisc.flush_buffer(tty); + + /* + * Restore default settings + */ + + strip_info->dev.type = ARPHRD_METRICOM; /* dtang */ + + /* + * Set tty options + */ + + tty->termios->c_iflag |= IGNBRK | IGNPAR; /* Ignore breaks and parity errors. */ + tty->termios->c_cflag |= CLOCAL; /* Ignore modem control signals. */ + tty->termios->c_cflag &= ~HUPCL; /* Don't close on hup */ + + MOD_INC_USE_COUNT; - /* - * First make sure we're not already connected. - */ - - if (strip_info && strip_info->magic == STRIP_MAGIC) - return -EEXIST; - - /* - * OK. Find a free STRIP channel to use. - */ - if ((strip_info = strip_alloc()) == NULL) - return -ENFILE; - - /* - * Register our newly created device so it can be ifconfig'd - * strip_dev_init() will be called as a side-effect - */ - - if (register_netdev(&strip_info->dev) != 0) - { - printk(KERN_ERR "strip: register_netdev() failed.\n"); - strip_free(strip_info); - return -ENFILE; - } - - strip_info->tty = tty; - tty->disc_data = strip_info; - if (tty->driver.flush_buffer) - tty->driver.flush_buffer(tty); - if (tty->ldisc.flush_buffer) - tty->ldisc.flush_buffer(tty); - - /* - * Restore default settings - */ - - strip_info->dev.type = ARPHRD_METRICOM; /* dtang */ - - /* - * Set tty options - */ - - tty->termios->c_iflag |= IGNBRK |IGNPAR;/* Ignore breaks and parity errors. */ - tty->termios->c_cflag |= CLOCAL; /* Ignore modem control signals. */ - tty->termios->c_cflag &= ~HUPCL; /* Don't close on hup */ - - MOD_INC_USE_COUNT; - - printk(KERN_INFO "STRIP: device \"%s\" activated\n", strip_info->dev.name); - - /* - * Done. We have linked the TTY line to a channel. - */ - return(strip_info->dev.base_addr); + printk(KERN_INFO "STRIP: device \"%s\" activated\n", + strip_info->dev.name); + + /* + * Done. We have linked the TTY line to a channel. + */ + return (strip_info->dev.base_addr); } /* @@ -2742,23 +2727,24 @@ static void strip_close(struct tty_struct *tty) { - struct strip *strip_info = (struct strip *) tty->disc_data; + struct strip *strip_info = (struct strip *) tty->disc_data; + + /* + * First make sure we're connected. + */ + + if (!strip_info || strip_info->magic != STRIP_MAGIC) + return; - /* - * First make sure we're connected. - */ - - if (!strip_info || strip_info->magic != STRIP_MAGIC) - return; - - unregister_netdev(&strip_info->dev); - - tty->disc_data = 0; - strip_info->tty = NULL; - printk(KERN_INFO "STRIP: device \"%s\" closed down\n", strip_info->dev.name); - strip_free(strip_info); - tty->disc_data = NULL; - MOD_DEC_USE_COUNT; + unregister_netdev(&strip_info->dev); + + tty->disc_data = 0; + strip_info->tty = NULL; + printk(KERN_INFO "STRIP: device \"%s\" closed down\n", + strip_info->dev.name); + strip_free(strip_info); + tty->disc_data = NULL; + MOD_DEC_USE_COUNT; } @@ -2766,45 +2752,43 @@ /* Perform I/O control calls on an active STRIP channel. */ static int strip_ioctl(struct tty_struct *tty, struct file *file, - unsigned int cmd, unsigned long arg) + unsigned int cmd, unsigned long arg) { - struct strip *strip_info = (struct strip *) tty->disc_data; + struct strip *strip_info = (struct strip *) tty->disc_data; + + /* + * First make sure we're connected. + */ + + if (!strip_info || strip_info->magic != STRIP_MAGIC) + return -EINVAL; + + switch (cmd) { + case SIOCGIFNAME: + if(copy_to_user((void *) arg, strip_info->dev.name, strlen(strip_info->dev.name) + 1)) + return -EFAULT; + break; + case SIOCSIFHWADDR: + { + MetricomAddress addr; + //printk(KERN_INFO "%s: SIOCSIFHWADDR\n", strip_info->dev.name); + if(copy_from_user(&addr, (void *) arg, sizeof(MetricomAddress))) + return -EFAULT; + return set_mac_address(strip_info, &addr); + } + /* + * Allow stty to read, but not set, the serial port + */ - /* - * First make sure we're connected. - */ - - if (!strip_info || strip_info->magic != STRIP_MAGIC) - return -EINVAL; - - switch(cmd) - { - case SIOCGIFNAME: - return copy_to_user((void*)arg, strip_info->dev.name, - strlen(strip_info->dev.name) + 1) ? - -EFAULT : 0; - break; - case SIOCSIFHWADDR: - { - MetricomAddress addr; - printk(KERN_INFO "%s: SIOCSIFHWADDR\n", strip_info->dev.name); - return copy_from_user(&addr, (void*)arg, sizeof(MetricomAddress)) ? - -EFAULT : set_mac_address(strip_info, &addr); - break; - } - /* - * Allow stty to read, but not set, the serial port - */ - - case TCGETS: - case TCGETA: - return n_tty_ioctl(tty, (struct file *) file, cmd, - (unsigned long) arg); - break; - default: - return -ENOIOCTLCMD; - break; - } + case TCGETS: + case TCGETA: + return n_tty_ioctl(tty, (struct file *) file, cmd, (unsigned long) arg); + break; + default: + return -ENOIOCTLCMD; + break; + } + return 0; } @@ -2812,14 +2796,14 @@ /* Initialization */ static struct tty_ldisc strip_ldisc = { - .magic = TTY_LDISC_MAGIC, - .name = "strip", - .open = strip_open, - .close = strip_close, - .ioctl = strip_ioctl, - .receive_buf = strip_receive_buf, - .receive_room = strip_receive_room, - .write_wakeup = strip_write_some_more, + .magic = TTY_LDISC_MAGIC, + .name = "strip", + .open = strip_open, + .close = strip_close, + .ioctl = strip_ioctl, + .receive_buf = strip_receive_buf, + .receive_room = strip_receive_room, + .write_wakeup = strip_write_some_more, }; /* @@ -2828,45 +2812,52 @@ * STRIP driver */ -static char signon[] __initdata = KERN_INFO "STRIP: Version %s (unlimited channels)\n"; +static char signon[] __initdata = + KERN_INFO "STRIP: Version %s (unlimited channels)\n"; static int __init strip_init_driver(void) { - int status; + int status; - printk(signon, StripVersion); + printk(signon, StripVersion); - /* - * Fill in our line protocol discipline, and register it - */ - if ((status = tty_register_ldisc(N_STRIP, &strip_ldisc))) - printk(KERN_ERR "STRIP: can't register line discipline (err = %d)\n", status); - - /* - * Register the status file with /proc - */ - proc_net_create("strip", S_IFREG | S_IRUGO, get_status_info); + spin_lock_init(&strip_lock); + + /* + * Fill in our line protocol discipline, and register it + */ + if ((status = tty_register_ldisc(N_STRIP, &strip_ldisc))) + printk(KERN_ERR "STRIP: can't register line discipline (err = %d)\n", + status); - return status; + /* + * Register the status file with /proc + */ + proc_net_create("strip", S_IFREG | S_IRUGO, get_status_info); + + return status; } + module_init(strip_init_driver); -static const char signoff[] __exitdata = KERN_INFO "STRIP: Module Unloaded\n"; +static const char signoff[] __exitdata = + KERN_INFO "STRIP: Module Unloaded\n"; static void __exit strip_exit_driver(void) { - int i; - while (struct_strip_list) - strip_free(struct_strip_list); + int i; + while (struct_strip_list) + strip_free(struct_strip_list); - /* Unregister with the /proc/net file here. */ - proc_net_remove("strip"); + /* Unregister with the /proc/net file here. */ + proc_net_remove("strip"); - if ((i = tty_register_ldisc(N_STRIP, NULL))) - printk(KERN_ERR "STRIP: can't unregister line discipline (err = %d)\n", i); + if ((i = tty_register_ldisc(N_STRIP, NULL))) + printk(KERN_ERR "STRIP: can't unregister line discipline (err = %d)\n", i); - printk(signoff); + printk(signoff); } + module_exit(strip_exit_driver); MODULE_AUTHOR("Stuart Cheshire "); @@ -2874,4 +2865,3 @@ MODULE_LICENSE("Dual BSD/GPL"); MODULE_SUPPORTED_DEVICE("Starmode Radio IP (STRIP) modem"); - diff -Nru a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c --- a/drivers/pnp/isapnp/core.c Sat Apr 12 14:44:08 2003 +++ b/drivers/pnp/isapnp/core.c Sat Apr 12 14:44:08 2003 @@ -106,8 +106,6 @@ /* some prototypes */ -extern struct pnp_protocol isapnp_protocol; - static inline void write_data(unsigned char x) { outb(x, _PNPWRP); diff -Nru a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c --- a/drivers/pnp/pnpbios/core.c Sat Apr 12 14:44:06 2003 +++ b/drivers/pnp/pnpbios/core.c Sat Apr 12 14:44:06 2003 @@ -869,7 +869,7 @@ /* PnP Layer support */ -static struct pnp_protocol pnpbios_protocol = { +struct pnp_protocol pnpbios_protocol = { .name = "Plug and Play BIOS", .get = pnpbios_get_resources, .set = pnpbios_set_resources, diff -Nru a/drivers/scsi/NCR_D700.c b/drivers/scsi/NCR_D700.c --- a/drivers/scsi/NCR_D700.c Sat Apr 12 14:44:06 2003 +++ b/drivers/scsi/NCR_D700.c Sat Apr 12 14:44:06 2003 @@ -95,17 +95,8 @@ #include #include #include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include diff -Nru a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c --- a/drivers/serial/68360serial.c Sat Apr 12 14:44:10 2003 +++ b/drivers/serial/68360serial.c Sat Apr 12 14:44:10 2003 @@ -39,7 +39,6 @@ #include #include #include -#include #include #include diff -Nru a/drivers/usb/class/audio.c b/drivers/usb/class/audio.c --- a/drivers/usb/class/audio.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/class/audio.c Sat Apr 12 14:44:10 2003 @@ -99,6 +99,8 @@ * for abs. Bug report by Andrew Morton * 2001-06-16: Bryce Nesbitt * Fix SNDCTL_DSP_STEREO API violation + * 2003-04-08: Oliver Neukum (oliver@neukum.name): + * Setting a configuration is done by usbcore and must not be overridden */ /* @@ -3790,10 +3792,6 @@ */ i = dev->actconfig - config; - if (usb_set_configuration(dev, config->desc.bConfigurationValue) < 0) { - printk(KERN_ERR "usbaudio: set_configuration failed (ConfigValue 0x%x)\n", config->desc.bConfigurationValue); - return -EIO; - } ret = usb_get_descriptor(dev, USB_DT_CONFIG, i, buf, 8); if (ret < 0) { printk(KERN_ERR "usbaudio: cannot get first 8 bytes of config descriptor %d of device %d (error %d)\n", i, dev->devnum, ret); diff -Nru a/drivers/usb/class/usb-midi.c b/drivers/usb/class/usb-midi.c --- a/drivers/usb/class/usb-midi.c Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/class/usb-midi.c Sat Apr 12 14:44:06 2003 @@ -1806,22 +1806,6 @@ printk(KERN_INFO "usb-midi: Found YAMAHA USB-MIDI device on dev %04x:%04x, iface %d\n", d->descriptor.idVendor, d->descriptor.idProduct, ifnum); - for ( i=0 ; i < d->descriptor.bNumConfigurations ; i++ ) { - if ( d->config+i == c ) goto configfound; - } - - printk(KERN_INFO "usb-midi: Config not found.\n"); - - return -EINVAL; - - configfound: - - /* this may not be necessary. */ - if ( usb_set_configuration( d, c->desc.bConfigurationValue ) < 0 ) { - printk(KERN_INFO "usb-midi: Could not set config.\n"); - return -EINVAL; - } - ret = usb_get_descriptor( d, USB_DT_CONFIG, i, buf, USB_DT_CONFIG_SIZE ); if ( ret < 0 ) { printk(KERN_INFO "usb-midi: Could not get config (error=%d).\n", ret); @@ -1916,21 +1900,6 @@ printk(KERN_INFO "usb-midi: Found MIDISTREAMING on dev %04x:%04x, iface %d\n", d->descriptor.idVendor, d->descriptor.idProduct, ifnum); - for ( i=0 ; i < d->descriptor.bNumConfigurations ; i++ ) { - if ( d->config+i == c ) goto configfound; - } - - printk(KERN_INFO "usb-midi: Config not found.\n"); - - return -EINVAL; - - configfound: - - /* this may not be necessary. */ - if ( usb_set_configuration( d, c->desc.bConfigurationValue ) < 0 ) { - printk(KERN_INFO "usb-midi: Could not set config.\n"); - return -EINVAL; - } /* From USB Spec v2.0, Section 9.5. If the class or vendor specific descriptors use the same format diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c Sat Apr 12 14:44:07 2003 +++ b/drivers/usb/core/hub.c Sat Apr 12 14:44:07 2003 @@ -1175,8 +1175,10 @@ * * Take a look at proc_resetdevice in devio.c for some sample code to * do this. + * Use this only from within your probe function, otherwise use + * usb_reset_device() below, which ensure proper locking */ -int usb_reset_device(struct usb_device *dev) +int usb_physical_reset_device(struct usb_device *dev) { struct usb_device *parent = dev->parent; struct usb_device_descriptor *descriptor; @@ -1305,4 +1307,17 @@ return 0; } + +int usb_reset_device(struct usb_device *udev) +{ + struct device *gdev = &udev->dev; + int r; + + down_read(&gdev->bus->subsys.rwsem); + r = usb_physical_reset_device(udev); + up_read(&gdev->bus->subsys.rwsem); + + return r; +} + diff -Nru a/drivers/usb/core/message.c b/drivers/usb/core/message.c --- a/drivers/usb/core/message.c Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/core/message.c Sat Apr 12 14:44:06 2003 @@ -930,6 +930,8 @@ /* reset more hc/hcd endpoint state */ dev->toggle[0] = 0; dev->toggle[1] = 0; + dev->halted[0] = 0; + dev->halted[1] = 0; usb_set_maxpacket(dev); return 0; diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Sat Apr 12 14:44:08 2003 +++ b/drivers/usb/core/usb.c Sat Apr 12 14:44:08 2003 @@ -89,11 +89,6 @@ if (!driver->probe) return error; - if (!try_module_get(driver->owner)) { - dev_err (dev, "Can't get a module reference for %s\n", driver->name); - return error; - } - id = usb_match_id (intf, driver->id_table); if (id) { dev_dbg (dev, "%s - got id\n", __FUNCTION__); @@ -104,8 +99,6 @@ if (!error) intf->driver = driver; - module_put(driver->owner); - return error; } @@ -117,22 +110,6 @@ intf = list_entry(dev,struct usb_interface,dev); driver = to_usb_driver(dev->driver); - if (!driver) { - dev_err(dev, "%s does not have a valid driver to work with!", - __FUNCTION__); - return -ENODEV; - } - - if (!try_module_get(driver->owner)) { - // FIXME this happens even when we just rmmod - // drivers that aren't in active use... - dev_err(dev, "Dieing driver still bound to device.\n"); - return -EIO; - } - - /* if we sleep here on an umanaged driver - * the holder of the lock guards against - * module unload */ down(&driver->serialize); if (intf->driver && intf->driver->disconnect) @@ -143,7 +120,6 @@ usb_driver_release_interface(driver, intf); up(&driver->serialize); - module_put(driver->owner); return 0; } @@ -498,9 +474,6 @@ continue; intf = to_usb_interface(dev); - if (!intf) - continue; - if (kdev_same(intf->kdev,kdev)) { return intf; } @@ -566,12 +539,7 @@ return 0; intf = to_usb_interface(dev); - if (!intf) - return -ENODEV; - usb_dev = interface_to_usbdev (intf); - if (!usb_dev) - return -ENODEV; if (usb_dev->devnum < 0) { dbg ("device already deleted ??"); @@ -748,8 +716,6 @@ struct usb_device *udev; udev = to_usb_device(dev); - if (!udev) - return; if (udev->bus && udev->bus->op && udev->bus->op->deallocate) udev->bus->op->deallocate(udev); diff -Nru a/drivers/usb/host/ehci-mem.c b/drivers/usb/host/ehci-mem.c --- a/drivers/usb/host/ehci-mem.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/host/ehci-mem.c Sat Apr 12 14:44:10 2003 @@ -62,6 +62,7 @@ { memset (qtd, 0, sizeof *qtd); qtd->qtd_dma = dma; + qtd->hw_token = cpu_to_le32 (QTD_STS_HALT); qtd->hw_next = EHCI_LIST_END; qtd->hw_alt_next = EHCI_LIST_END; INIT_LIST_HEAD (&qtd->qtd_list); diff -Nru a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c --- a/drivers/usb/host/ehci-q.c Sat Apr 12 14:44:09 2003 +++ b/drivers/usb/host/ehci-q.c Sat Apr 12 14:44:09 2003 @@ -137,7 +137,10 @@ if (QTD_CERR (token)) urb->status = -EPIPE; else { - dbg ("3strikes"); + ehci_dbg (ehci, "devpath %s ep%d%s 3strikes\n", + urb->dev->devpath, + usb_pipeendpoint (urb->pipe), + usb_pipein (urb->pipe) ? "in" : "out"); urb->status = -EPROTO; } /* CERR nonzero + no errors + halt --> stall */ @@ -213,7 +216,6 @@ /* complete() can reenter this HCD */ spin_unlock (&ehci->lock); usb_hcd_giveback_urb (&ehci->hcd, urb, regs); - spin_lock (&ehci->lock); } @@ -827,7 +829,7 @@ * HC is allowed to fetch the old dummy (4.10.2). */ token = qtd->hw_token; - qtd->hw_token = 0; + qtd->hw_token = cpu_to_le32 (QTD_STS_HALT); wmb (); dummy = qh->dummy; @@ -879,8 +881,7 @@ if (usb_pipein (urb->pipe) && !usb_pipecontrol (urb->pipe)) epnum |= 0x10; - vdbg ("%s: submit_async urb %p len %d ep %d-%s qtd %p [qh %p]", - hcd_to_bus (&ehci->hcd)->bus_name, + ehci_vdbg (ehci, "submit_async urb %p len %d ep%d%s qtd %p [qh %p]\n", urb, urb->transfer_buffer_length, epnum & 0x0f, (epnum & 0x10) ? "in" : "out", qtd, dev ? dev->ep [epnum] : (void *)~0); @@ -916,7 +917,7 @@ del_timer (&ehci->watchdog); - qh->hw_next = cpu_to_le32 (qh->qh_dma); + // qh->hw_next = cpu_to_le32 (qh->qh_dma); qh->qh_state = QH_STATE_IDLE; qh->qh_next.qh = 0; qh_put (ehci, qh); // refcount from reclaim diff -Nru a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c --- a/drivers/usb/host/ohci-hcd.c Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/host/ohci-hcd.c Sat Apr 12 14:44:06 2003 @@ -429,6 +429,8 @@ ohci->hc_control = readl (&ohci->regs->control); ohci->hc_control &= OHCI_CTRL_RWC; /* hcfs 0 = RESET */ writel (ohci->hc_control, &ohci->regs->control); + // flush those pci writes + (void) readl (&ohci->regs->control); wait_ms (50); /* HC Reset requires max 10 us delay */ @@ -450,6 +452,8 @@ * this if we write fmInterval after we're OPERATIONAL. */ writel (ohci->hc_control, &ohci->regs->control); + // flush those pci writes + (void) readl (&ohci->regs->control); return 0; } @@ -524,6 +528,8 @@ writel (tmp, &ohci->regs->roothub.a); writel (RH_HS_LPSC, &ohci->regs->roothub.status); writel (0, &ohci->regs->roothub.b); + // flush those pci writes + (void) readl (&ohci->regs->control); // POTPGT delay is bits 24-31, in 2 ms units. mdelay ((roothub_a (ohci) >> 23) & 0x1fe); @@ -610,6 +616,8 @@ writel (ints, ®s->intrstatus); writel (OHCI_INTR_MIE, ®s->intrenable); + // flush those pci writes + (void) readl (&ohci->regs->control); } /*-------------------------------------------------------------------------*/ diff -Nru a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c --- a/drivers/usb/host/ohci-q.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/host/ohci-q.c Sat Apr 12 14:44:10 2003 @@ -446,6 +446,8 @@ if (!ohci->sleeping) { writel (OHCI_INTR_SF, &ohci->regs->intrstatus); writel (OHCI_INTR_SF, &ohci->regs->intrenable); + // flush those pci writes + (void) readl (&ohci->regs->control); } } diff -Nru a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c --- a/drivers/usb/input/hid-core.c Sat Apr 12 14:44:08 2003 +++ b/drivers/usb/input/hid-core.c Sat Apr 12 14:44:08 2003 @@ -1664,6 +1664,9 @@ .probe = hid_probe, .disconnect = hid_disconnect, .id_table = hid_usb_ids, + .driver = { + .devclass = &input_devclass, + }, }; static int __init hid_init(void) diff -Nru a/drivers/usb/input/kbtab.c b/drivers/usb/input/kbtab.c --- a/drivers/usb/input/kbtab.c Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/input/kbtab.c Sat Apr 12 14:44:06 2003 @@ -91,7 +91,7 @@ } struct usb_device_id kbtab_ids[] = { - { USB_DEVICE(USB_VENDOR_ID_KBGEAR, 0x1001), driver_info : 0 }, + { USB_DEVICE(USB_VENDOR_ID_KBGEAR, 0x1001), .driver_info = 0 }, { } }; diff -Nru a/drivers/usb/input/usbkbd.c b/drivers/usb/input/usbkbd.c --- a/drivers/usb/input/usbkbd.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/input/usbkbd.c Sat Apr 12 14:44:10 2003 @@ -359,6 +359,9 @@ .probe = usb_kbd_probe, .disconnect = usb_kbd_disconnect, .id_table = usb_kbd_id_table, + .driver = { + .devclass = &input_devclass, + }, }; static int __init usb_kbd_init(void) diff -Nru a/drivers/usb/input/usbmouse.c b/drivers/usb/input/usbmouse.c --- a/drivers/usb/input/usbmouse.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/input/usbmouse.c Sat Apr 12 14:44:10 2003 @@ -242,6 +242,9 @@ .probe = usb_mouse_probe, .disconnect = usb_mouse_disconnect, .id_table = usb_mouse_id_table, + .driver = { + .devclass = &input_devclass, + }, }; static int __init usb_mouse_init(void) diff -Nru a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig --- a/drivers/usb/misc/Kconfig Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/misc/Kconfig Sat Apr 12 14:44:10 2003 @@ -94,7 +94,7 @@ a module, say M here and read . config USB_SPEEDTOUCH - tristate "Alcatel Speedtouch ADSL USB Modem" + tristate "Alcatel Speedtouch USB support" depends on USB && ATM help Say Y here if you have an Alcatel SpeedTouch USB or SpeedTouch 330 diff -Nru a/drivers/usb/misc/speedtch.c b/drivers/usb/misc/speedtch.c --- a/drivers/usb/misc/speedtch.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/misc/speedtch.c Sat Apr 12 14:44:10 2003 @@ -933,15 +933,24 @@ if (vcc->qos.aal != ATM_AAL5) return -EINVAL; + if (!instance->firmware_loaded) { + dbg ("firmware not loaded!"); + return -EAGAIN; + } + + MOD_INC_USE_COUNT; + down (&instance->serialize); /* vs self, udsl_atm_close */ if (udsl_find_vcc (instance, vpi, vci)) { up (&instance->serialize); + MOD_DEC_USE_COUNT; return -EADDRINUSE; } if (!(new = kmalloc (sizeof (struct udsl_vcc_data), GFP_KERNEL))) { up (&instance->serialize); + MOD_DEC_USE_COUNT; return -ENOMEM; } @@ -967,10 +976,7 @@ dbg ("Allocated new SARLib vcc 0x%p with vpi %d vci %d", new, vpi, vci); - MOD_INC_USE_COUNT; - - if (instance->firmware_loaded) - udsl_fire_receivers (instance); + udsl_fire_receivers (instance); dbg ("udsl_atm_open successful"); @@ -1034,6 +1040,24 @@ ** USB ** **********/ +static int udsl_set_alternate (struct udsl_instance_data *instance) +{ + down (&instance->serialize); /* vs self */ + if (!instance->firmware_loaded) { + int ret; + + if ((ret = usb_set_interface (instance->usb_dev, 1, 1)) < 0) { + dbg ("usb_set_interface returned %d!", ret); + up (&instance->serialize); + return ret; + } + instance->firmware_loaded = 1; + } + up (&instance->serialize); + udsl_fire_receivers (instance); + return 0; +} + static int udsl_usb_ioctl (struct usb_interface *intf, unsigned int code, void *user_data) { struct udsl_instance_data *instance = usb_get_intfdata (intf); @@ -1048,14 +1072,7 @@ switch (code) { case UDSL_IOCTL_START: instance->atm_dev->signal = ATM_PHY_SIG_FOUND; - down (&instance->serialize); /* vs self */ - if (!instance->firmware_loaded) { - usb_set_interface (instance->usb_dev, 1, 1); - instance->firmware_loaded = 1; - } - up (&instance->serialize); - udsl_fire_receivers (instance); - return 0; + return udsl_set_alternate (instance); case UDSL_IOCTL_STOP: instance->atm_dev->signal = ATM_PHY_SIG_LOST; return 0; diff -Nru a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c --- a/drivers/usb/misc/uss720.c Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/misc/uss720.c Sat Apr 12 14:44:06 2003 @@ -493,54 +493,42 @@ return rlen; } -void parport_uss720_inc_use_count(void) -{ - MOD_INC_USE_COUNT; -} - -void parport_uss720_dec_use_count(void) -{ - MOD_DEC_USE_COUNT; -} - /* --------------------------------------------------------------------- */ static struct parport_operations parport_uss720_ops = { - parport_uss720_write_data, - parport_uss720_read_data, - - parport_uss720_write_control, - parport_uss720_read_control, - parport_uss720_frob_control, - - parport_uss720_read_status, - - parport_uss720_enable_irq, - parport_uss720_disable_irq, - - parport_uss720_data_forward, - parport_uss720_data_reverse, - - parport_uss720_init_state, - parport_uss720_save_state, - parport_uss720_restore_state, - - parport_uss720_inc_use_count, - parport_uss720_dec_use_count, - - parport_uss720_epp_write_data, - parport_uss720_epp_read_data, - parport_uss720_epp_write_addr, - parport_uss720_epp_read_addr, - - parport_uss720_ecp_write_data, - parport_uss720_ecp_read_data, - parport_uss720_ecp_write_addr, - - parport_uss720_write_compat, - parport_ieee1284_read_nibble, - parport_ieee1284_read_byte, + .owner = THIS_MODULE, + .write_data = parport_uss720_write_data, + .read_data = parport_uss720_read_data, + + .write_control = parport_uss720_write_control, + .read_control = parport_uss720_read_control, + .frob_control = parport_uss720_frob_control, + + .read_status = parport_uss720_read_status, + + .enable_irq = parport_uss720_enable_irq, + .disable_irq = parport_uss720_disable_irq, + + .data_forward = parport_uss720_data_forward, + .data_reverse = parport_uss720_data_reverse, + + .init_state = parport_uss720_init_state, + .save_state = parport_uss720_save_state, + .restore_state = parport_uss720_restore_state, + + .epp_write_data = parport_uss720_epp_write_data, + .epp_read_data = parport_uss720_epp_read_data, + .epp_write_addr = parport_uss720_epp_write_addr, + .epp_read_addr = parport_uss720_epp_read_addr, + + .ecp_write_data = parport_uss720_ecp_write_data, + .ecp_read_data = parport_uss720_ecp_read_data, + .ecp_write_addr = parport_uss720_ecp_write_addr, + + .compat_write_data = parport_uss720_write_compat, + .nibble_read_data = parport_ieee1284_read_nibble, + .byte_read_data = parport_ieee1284_read_byte, }; /* --------------------------------------------------------------------- */ @@ -607,7 +595,6 @@ parport_proc_register(pp); parport_announce_port(pp); - MOD_INC_USE_COUNT; usb_set_intfdata (intf, pp); return 0; @@ -635,7 +622,6 @@ parport_proc_unregister(pp); parport_unregister_port(pp); kfree(priv); - MOD_DEC_USE_COUNT; } } @@ -652,6 +638,7 @@ static struct usb_driver uss720_driver = { + .owner = THIS_MODULE, .name = "uss720", .probe = uss720_probe, .disconnect = uss720_disconnect, diff -Nru a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c --- a/drivers/usb/net/pegasus.c Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/net/pegasus.c Sat Apr 12 14:44:10 2003 @@ -45,7 +45,7 @@ /* * Version Information */ -#define DRIVER_VERSION "v0.5.9 (2002/12/31)" +#define DRIVER_VERSION "v0.5.10 (2003/04/01)" #define DRIVER_AUTHOR "Petko Manolov " #define DRIVER_DESC "Pegasus/Pegasus II USB Ethernet driver" @@ -121,7 +121,7 @@ char *buffer; DECLARE_WAITQUEUE(wait, current); - buffer = kmalloc(size, GFP_KERNEL); + buffer = kmalloc(size, GFP_DMA); if (!buffer) { warn("%s: looks like we're out of memory", __FUNCTION__); return -ENOMEM; @@ -170,7 +170,7 @@ char *buffer; DECLARE_WAITQUEUE(wait, current); - buffer = kmalloc(size, GFP_KERNEL); + buffer = kmalloc(size, GFP_DMA); if (!buffer) { warn("%s: looks like we're out of memory", __FUNCTION__); return -ENOMEM; @@ -218,7 +218,7 @@ char *tmp; DECLARE_WAITQUEUE(wait, current); - tmp = kmalloc(1, GFP_KERNEL); + tmp = kmalloc(1, GFP_DMA); if (!tmp) { warn("%s: looks like we're out of memory", __FUNCTION__); return -ENOMEM; @@ -233,7 +233,7 @@ pegasus->dr.bRequestType = PEGASUS_REQT_WRITE; pegasus->dr.bRequest = PEGASUS_REQ_SET_REG; - pegasus->dr.wValue = cpu_to_le16p(&data); + pegasus->dr.wValue = cpu_to_le16(data); pegasus->dr.wIndex = cpu_to_le16p(&indx); pegasus->dr.wLength = cpu_to_le16(1); pegasus->ctrl_urb->transfer_buffer_length = 1; @@ -711,11 +711,11 @@ pegasus->stats.tx_aborted_errors++; if (d[0] & LATE_COL) pegasus->stats.tx_window_errors++; - if (d[0] & (NO_CARRIER | LOSS_CARRIER)) { - pegasus->stats.tx_carrier_errors++; - netif_carrier_off(net); - } else { + if (d[5] & LINK_STATUS) { netif_carrier_on(net); + } else { + pegasus->stats.tx_carrier_errors++; + netif_carrier_off(net); } } @@ -1171,10 +1171,6 @@ pegasus_t *pegasus; int dev_index = id - pegasus_ids; - if (usb_set_configuration(dev, dev->config[0].desc.bConfigurationValue)) { - err("usb_set_configuration() failed"); - return -ENODEV; - } if (!(pegasus = kmalloc(sizeof (struct pegasus), GFP_KERNEL))) { err("out of memory allocating device structure"); return -ENOMEM; diff -Nru a/drivers/usb/net/pegasus.h b/drivers/usb/net/pegasus.h --- a/drivers/usb/net/pegasus.h Sat Apr 12 14:44:10 2003 +++ b/drivers/usb/net/pegasus.h Sat Apr 12 14:44:10 2003 @@ -52,6 +52,8 @@ #define LOSS_CARRIER 0x08 #define JABBER_TIMEOUT 0x04 +#define LINK_STATUS 0x01 + #define PEGASUS_REQT_READ 0xc0 #define PEGASUS_REQT_WRITE 0x40 #define PEGASUS_REQ_GET_REGS 0xf0 diff -Nru a/drivers/usb/net/rtl8150.c b/drivers/usb/net/rtl8150.c --- a/drivers/usb/net/rtl8150.c Sat Apr 12 14:44:08 2003 +++ b/drivers/usb/net/rtl8150.c Sat Apr 12 14:44:08 2003 @@ -791,10 +791,6 @@ rtl8150_t *dev; struct net_device *netdev; - if (usb_set_configuration(udev, udev->config[0].desc.bConfigurationValue)) { - err("usb_set_configuration() failed"); - return -EIO; - } dev = kmalloc(sizeof(rtl8150_t), GFP_KERNEL); if (!dev) { err("Out of memory"); diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c --- a/drivers/usb/net/usbnet.c Sat Apr 12 14:44:08 2003 +++ b/drivers/usb/net/usbnet.c Sat Apr 12 14:44:08 2003 @@ -122,6 +122,11 @@ * cleanups and stubbed PXA-250 support (db), fix for framing * issues on Z, net1080, and gl620a (Toby Milne) * + * 31-mar-2003 Use endpoint descriptors: high speed support, simpler sa1100 + * vs pxa25x, and CDC Ethernet. Throttle down log floods on + * disconnect; other cleanups. (db) Flush net1080 fifos + * after several sequential framing errors. (Johannes Erdfelt) + * *-------------------------------------------------------------------------*/ #include @@ -155,16 +160,17 @@ /* minidrivers _could_ be individually configured */ #define CONFIG_USB_AN2720 #define CONFIG_USB_BELKIN +#undef CONFIG_USB_CDCETHER +//#define CONFIG_USB_CDCETHER /* NYET */ #define CONFIG_USB_EPSON2888 #define CONFIG_USB_GENESYS #define CONFIG_USB_NET1080 #define CONFIG_USB_PL2301 -// #define CONFIG_USB_PXA -#define CONFIG_USB_SA1100 +#define CONFIG_USB_ARMLINUX #define CONFIG_USB_ZAURUS -#define DRIVER_VERSION "18-Oct-2002" +#define DRIVER_VERSION "31-Mar-2003" /*-------------------------------------------------------------------------*/ @@ -176,11 +182,11 @@ * Ethernet packets (so queues should be bigger). */ #ifdef REALLY_QUEUE -#define RX_QLEN 4 -#define TX_QLEN 4 +#define RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4) +#define TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4) #else -#define RX_QLEN 1 -#define TX_QLEN 1 +#define RX_QLEN(dev) 1 +#define TX_QLEN(dev) 1 #endif // packets are always ethernet inside @@ -191,6 +197,10 @@ // reawaken network queue this soon after stopping; else watchdog barks #define TX_TIMEOUT_JIFFIES (5*HZ) +// throttle rx/tx briefly after some faults, so khubd might disconnect() +// us (it polls at HZ/4 usually) before we report too many false errors. +#define THROTTLE_JIFFIES (HZ/8) + // for vendor-specific control operations #define CONTROL_TIMEOUT_MS (500) /* msec */ #define CONTROL_TIMEOUT_JIFFIES ((CONTROL_TIMEOUT_MS * HZ)/1000) @@ -200,10 +210,6 @@ /*-------------------------------------------------------------------------*/ -// list of all devices we manage -static DECLARE_MUTEX (usbnet_mutex); -static LIST_HEAD (usbnet_list); - // randomly generated ethernet address static u8 node_id [ETH_ALEN]; @@ -213,17 +219,18 @@ struct usb_device *udev; struct driver_info *driver_info; struct semaphore mutex; - struct list_head dev_list; wait_queue_head_t *wait; + // i/o info: pipes etc + unsigned in, out; + unsigned maxpacket; + struct timer_list delay; + // protocol/interface state struct net_device net; struct net_device_stats stats; int msg_level; - -#ifdef CONFIG_USB_NET1080 - u16 packet_id; -#endif + unsigned long data [5]; // various kinds of pending driver work struct sk_buff_head rxq; @@ -231,7 +238,7 @@ struct sk_buff_head done; struct tasklet_struct bh; - struct work_struct kevent; + struct work_struct kevent; unsigned long flags; # define EVENT_TX_HALT 0 # define EVENT_RX_HALT 1 @@ -243,11 +250,19 @@ char *description; int flags; +/* framing is CDC Ethernet, not writing ZLPs (hw issues), or optionally: */ #define FLAG_FRAMING_NC 0x0001 /* guard against device dropouts */ #define FLAG_FRAMING_GL 0x0002 /* genelink batches packets */ #define FLAG_FRAMING_Z 0x0004 /* zaurus adds a trailer */ + #define FLAG_NO_SETINT 0x0010 /* device can't set_interface() */ + /* init device ... can sleep, or cause probe() failure */ + int (*bind)(struct usbnet *, struct usb_interface *); + + /* cleanup device ... can sleep, but can't fail */ + void (*unbind)(struct usbnet *, struct usb_interface *); + /* reset device ... can sleep */ int (*reset)(struct usbnet *); @@ -263,15 +278,13 @@ // FIXME -- also an interrupt mechanism // useful for at least PL2301/2302 and GL620USB-A + // and CDC use them to report 'is it connected' changes - /* framework currently "knows" bulk EPs talk packets */ + /* for new devices, use the descriptor-reading code instead */ int in; /* rx endpoint */ int out; /* tx endpoint */ - int epsize; }; -#define EP_SIZE(usbnet) ((usbnet)->driver_info->epsize) - // we record the state for each of our queued skbs enum skb_state { illegal = 0, @@ -300,14 +313,6 @@ #define RUN_CONTEXT (in_irq () ? "in_irq" \ : (in_interrupt () ? "in_interrupt" : "can sleep")) -/* mostly for PDA style devices, which are always present */ -static int always_connected (struct usbnet *dev) -{ - return 0; -} - -/*-------------------------------------------------------------------------*/ - #ifdef DEBUG #define devdbg(usbnet, fmt, arg...) \ printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net.name, ## arg) @@ -315,11 +320,76 @@ #define devdbg(usbnet, fmt, arg...) do {} while(0) #endif +#define deverr(usbnet, fmt, arg...) \ + printk(KERN_ERR "%s: " fmt "\n" , (usbnet)->net.name, ## arg) +#define devwarn(usbnet, fmt, arg...) \ + printk(KERN_WARNING "%s: " fmt "\n" , (usbnet)->net.name, ## arg) + #define devinfo(usbnet, fmt, arg...) \ do { if ((usbnet)->msg_level >= 1) \ printk(KERN_INFO "%s: " fmt "\n" , (usbnet)->net.name, ## arg); \ } while (0) +/*-------------------------------------------------------------------------*/ + +/* mostly for PDA style devices, which are always connected if present */ +static int always_connected (struct usbnet *dev) +{ + return 0; +} + +/* handles CDC Ethernet and many other network "bulk data" interfaces */ +static int +get_endpoints (struct usbnet *dev, struct usb_interface *intf) +{ + int tmp; + struct usb_host_interface *alt; + struct usb_host_endpoint *in, *out; + + for (tmp = 0; tmp < intf->max_altsetting; tmp++) { + unsigned ep; + + in = out = 0; + alt = intf->altsetting + tmp; + + /* take the first altsetting with in-bulk + out-bulk; + * ignore other endpoints and altsetttings. + */ + for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) { + struct usb_host_endpoint *e; + + e = alt->endpoint + ep; + if (e->desc.bmAttributes != USB_ENDPOINT_XFER_BULK) + continue; + if (e->desc.bEndpointAddress & USB_DIR_IN) { + if (!in) + in = e; + } else { + if (!out) + out = e; + } + if (in && out) + goto found; + } + } + return -EINVAL; + +found: + if (alt->desc.bAlternateSetting != 0 + || !(dev->driver_info->flags & FLAG_NO_SETINT)) { + tmp = usb_set_interface (dev->udev, alt->desc.bInterfaceNumber, + alt->desc.bAlternateSetting); + if (tmp < 0) + return tmp; + } + + dev->in = usb_rcvbulkpipe (dev->udev, + in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); + dev->out = usb_sndbulkpipe (dev->udev, + out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK); + return 0; +} + #ifdef CONFIG_USB_AN2720 @@ -340,7 +410,6 @@ // no check_connect available! .in = 2, .out = 2, // direction distinguishes these - .epsize =64, }; #endif /* CONFIG_USB_AN2720 */ @@ -359,15 +428,226 @@ static const struct driver_info belkin_info = { .description = "Belkin, eTEK, or compatible", - - .in = 1, .out = 1, // direction distinguishes these - .epsize =64, }; #endif /* CONFIG_USB_BELKIN */ +#if defined (CONFIG_USB_CDCETHER) || defined (CONFIG_USB_ZAURUS) + +/*------------------------------------------------------------------------- + * + * Communications Device Class, Ethernet Control model + * + * Takes two interfaces. The DATA interface is inactive till an altsetting + * is selected. Configuration data includes class descriptors. + * + * Zaurus uses nonstandard framing, but is otherwise CDC Ether. + * + *-------------------------------------------------------------------------*/ + +/* "Header Functional Descriptor" from CDC spec 5.2.3.1 */ +struct header_desc { + u8 bLength; + u8 bDescriptorType; + u8 bDescriptorSubType; + + u16 bcdCDC; +} __attribute__ ((packed)); + +/* "Union Functional Descriptor" from CDC spec 5.2.3.X */ +struct union_desc { + u8 bLength; + u8 bDescriptorType; + u8 bDescriptorSubType; + + u8 bMasterInterface0; + u8 bSlaveInterface0; + /* ... and there could be other slave interfaces */ +} __attribute__ ((packed)); + +/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */ +struct ether_desc { + u8 bLength; + u8 bDescriptorType; + u8 bDescriptorSubType; + + u8 iMACAddress; + u32 bmEthernetStatistics; + u16 wMaxSegmentSize; + u16 wNumberMCFilters; + u8 bNumberPowerFilters; +} __attribute__ ((packed)); + +struct cdc_info { + struct header_desc *header; + struct union_desc *u; + struct ether_desc *ether; + struct usb_interface *control; + struct usb_interface *data; +}; + +#include + +static u8 nibble (unsigned char c) +{ + if (likely (isdigit (c))) + return c - '0'; + c = toupper (c); + if (likely (isxdigit (c))) + return 10 + c - 'A'; + return 0; +} + +static inline int get_ethernet_addr (struct usbnet *dev, struct ether_desc *e) +{ + int tmp, i; + unsigned char buf [13]; + + tmp = usb_string (dev->udev, e->iMACAddress, buf, sizeof buf); + if (tmp < 0) + return tmp; + else if (tmp != 12) + return -EINVAL; + for (i = tmp = 0; i < 6; i++, tmp += 2) + dev->net.dev_addr [i] = + (nibble (buf [tmp]) << 4) + nibble (buf [tmp + 1]); + return 0; +} + +static struct usb_driver usbnet_driver; + +static int cdc_bind (struct usbnet *dev, struct usb_interface *intf) +{ + u8 *buf = intf->altsetting->extra; + int len = intf->altsetting->extralen; + struct usb_interface_descriptor *d; + struct cdc_info *info = (void *) &dev->data; + int status; + + if (sizeof dev->data < sizeof *info) + return -EDOM; + + /* expect strict spec conformance for the descriptors */ + memset (info, 0, sizeof *info); + info->control = intf; + while (len > 3) { + /* ignore bDescriptorType != CS_INTERFACE */ + if (buf [1] != 0x24) + goto next_desc; + + /* bDescriptorSubType identifies three "must have" descriptors; + * save them for later. + */ + switch (buf [2]) { + case 0x00: /* Header, mostly useless */ + if (info->header) + goto bad_desc; + info->header = (void *) buf; + if (info->header->bLength != sizeof *info->header) + goto bad_desc; + break; + case 0x06: /* Union (groups interfaces) */ + if (info->u) + goto bad_desc; + info->u = (void *) buf; + if (info->u->bLength != sizeof *info->u) + goto bad_desc; + d = &intf->altsetting->desc; + if (info->u->bMasterInterface0 != d->bInterfaceNumber) + goto bad_desc; + info->data = dev->udev->actconfig->interface; + if (intf != (info->data + info->u->bMasterInterface0)) + goto bad_desc; + + /* a data interface altsetting does the real i/o */ + info->data += info->u->bSlaveInterface0; + d = &info->data->altsetting->desc; + if (info->u->bSlaveInterface0 != d->bInterfaceNumber + || d->bInterfaceClass != USB_CLASS_CDC_DATA) + goto bad_desc; + if (usb_interface_claimed (info->data)) + return -EBUSY; + break; + case 0x0F: /* Ethernet Networking */ + if (info->ether) + goto bad_desc; + info->ether = (void *) buf; + if (info->ether->bLength != sizeof *info->ether) + goto bad_desc; + break; + } +next_desc: + len -= buf [0]; /* bLength */ + buf += buf [0]; + } + if (!info->header || !info ->u || !info->ether) + goto bad_desc; + + status = get_ethernet_addr (dev, info->ether); + if (status < 0) + return status; + + /* claim data interface and set it up ... with side effects. + * network traffic can't flow until an altsetting is enabled. + */ + usb_driver_claim_interface (&usbnet_driver, info->data, dev); + status = get_endpoints (dev, info->data); + if (status < 0) { + usb_driver_release_interface (&usbnet_driver, info->data); + return status; + } + + /* FIXME cdc-ether has some multicast code too, though it complains + * in routine cases. info->ether describes the multicast support. + */ + + dev->net.mtu = cpu_to_le16p (&info->ether->wMaxSegmentSize) + - ETH_HLEN; + if ((dev->driver_info->flags & FLAG_FRAMING_Z) == 0) + strcpy (dev->net.name, "eth%d"); + return 0; + +bad_desc: + // devdbg (dev, "bad CDC descriptors"); + return -ENODEV; +} + +static void cdc_unbind (struct usbnet *dev, struct usb_interface *intf) +{ + struct cdc_info *info = (void *) &dev->data; + + /* disconnect master --> disconnect slave */ + if (intf == info->control && info->data) { + usb_driver_release_interface (&usbnet_driver, info->data); + info->data = 0; + } + + /* and vice versa (just in case) */ + else if (intf == info->data && info->control) { + usb_driver_release_interface (&usbnet_driver, info->control); + info->control = 0; + } + +} + +#endif /* CONFIG_USB_ZAURUS || CONFIG_USB_CDCETHER */ + + +#ifdef CONFIG_USB_CDCETHER + +static const struct driver_info cdc_info = { + .description = "CDC Ethernet Device", + // .check_connect = cdc_check_connect, + .bind = cdc_bind, + .unbind = cdc_unbind, +}; + +#endif /* CONFIG_USB_CDCETHER */ + + + #ifdef CONFIG_USB_EPSON2888 /*------------------------------------------------------------------------- @@ -386,7 +666,6 @@ .check_connect = always_connected, .in = 4, .out = 3, - .epsize = 64, }; #endif /* CONFIG_USB_EPSON2888 */ @@ -704,7 +983,7 @@ *packet_len = length; // add padding byte - if ((skb->len % EP_SIZE (dev)) == 0) + if ((skb->len % dev->maxpacket) == 0) skb_put (skb, 1); return skb; @@ -717,7 +996,6 @@ .tx_fixup = genelink_tx_fixup, .in = 1, .out = 2, - .epsize =64, #ifdef GENELINK_ACK .check_connect =genelink_check_connect, @@ -737,6 +1015,9 @@ * *-------------------------------------------------------------------------*/ +#define dev_packet_id data[0] +#define frame_errors data[1] + /* * NetChip framing of ethernet packets, supporting additional error * checks for links that may drop bulk packets from inside messages. @@ -1064,6 +1345,60 @@ return 0; } +static void nc_flush_complete (struct urb *urb, struct pt_regs *regs) +{ + kfree (urb->context); + usb_free_urb(urb); +} + +static void nc_ensure_sync (struct usbnet *dev) +{ + dev->frame_errors++; + if (dev->frame_errors > 5) { + struct urb *urb; + struct usb_ctrlrequest *req; + int status; + + /* Send a flush */ + urb = usb_alloc_urb (0, SLAB_ATOMIC); + if (!urb) + return; + + req = kmalloc (sizeof *req, GFP_ATOMIC); + if (!req) { + usb_free_urb (urb); + return; + } + + req->bRequestType = USB_DIR_OUT + | USB_TYPE_VENDOR + | USB_RECIP_DEVICE; + req->bRequest = REQUEST_REGISTER; + req->wValue = cpu_to_le16 (USBCTL_FLUSH_THIS + | USBCTL_FLUSH_OTHER); + req->wIndex = cpu_to_le16 (REG_USBCTL); + req->wLength = cpu_to_le16 (0); + + /* queue an async control request, we don't need + * to do anything when it finishes except clean up. + */ + usb_fill_control_urb (urb, dev->udev, + usb_sndctrlpipe (dev->udev, 0), + (unsigned char *) req, + NULL, 0, + nc_flush_complete, req); + status = usb_submit_urb (urb, GFP_ATOMIC); + if (status) { + kfree (req); + usb_free_urb (urb); + return; + } + + devdbg (dev, "flush net1080; too many framing errors"); + dev->frame_errors = 0; + } +} + static int net1080_rx_fixup (struct usbnet *dev, struct sk_buff *skb) { struct nc_header *header; @@ -1076,6 +1411,7 @@ dbg ("rx framesize %d range %d..%d mtu %d", skb->len, (int)MIN_FRAMED, (int)FRAMED_SIZE (dev->net.mtu), dev->net.mtu); + nc_ensure_sync (dev); return 0; } @@ -1085,15 +1421,18 @@ if (FRAMED_SIZE (header->packet_len) > MAX_PACKET) { dev->stats.rx_frame_errors++; dbg ("packet too big, %d", header->packet_len); + nc_ensure_sync (dev); return 0; } else if (header->hdr_len < MIN_HEADER) { dev->stats.rx_frame_errors++; dbg ("header too short, %d", header->hdr_len); + nc_ensure_sync (dev); return 0; } else if (header->hdr_len > MIN_HEADER) { // out of band data for us? dbg ("header OOB, %d bytes", header->hdr_len - MIN_HEADER); + nc_ensure_sync (dev); // switch (vendor/product ids) { ... } } skb_pull (skb, header->hdr_len); @@ -1114,6 +1453,7 @@ dev->stats.rx_frame_errors++; dbg ("bad packet len %d (expected %d)", skb->len, header->packet_len); + nc_ensure_sync (dev); return 0; } if (header->packet_id != get_unaligned (&trailer->packet_id)) { @@ -1126,6 +1466,7 @@ devdbg (dev, "frame hdr_len, header->packet_len, header->packet_id); #endif + dev->frame_errors = 0; return 1; } @@ -1143,11 +1484,13 @@ if ((padlen + sizeof (struct nc_trailer)) <= tailroom && sizeof (struct nc_header) <= headroom) + /* There's enough head and tail room */ return skb; if ((sizeof (struct nc_header) + padlen + sizeof (struct nc_trailer)) < (headroom + tailroom)) { + /* There's enough total room, so just readjust */ skb->data = memmove (skb->head + sizeof (struct nc_header), skb->data, skb->len); @@ -1155,6 +1498,8 @@ return skb; } } + + /* Create a new skb to use with the correct size */ skb2 = skb_copy_expand (skb, sizeof (struct nc_header), sizeof (struct nc_trailer) + padlen, @@ -1170,9 +1515,6 @@ .check_connect =net1080_check_connect, .rx_fixup = net1080_rx_fixup, .tx_fixup = net1080_tx_fixup, - - .in = 1, .out = 1, // direction distinguishes these - .epsize =64, }; #endif /* CONFIG_USB_NET1080 */ @@ -1237,37 +1579,13 @@ .flags = FLAG_NO_SETINT, /* some PL-2302 versions seem to fail usb_set_interface() */ .reset = pl_reset, - - .in = 3, .out = 2, - .epsize =64, }; #endif /* CONFIG_USB_PL2301 */ -#ifdef CONFIG_USB_PXA - -/*------------------------------------------------------------------------- - * - * PXA250 and PXA210 use XScale cores (ARM v5TE) with better USB support, - * and different USB endpoint numbering than the SA1100 devices. - * - *-------------------------------------------------------------------------*/ - -static const struct driver_info pxa_info = { - .description = "PXA-250 Linux Device", - .check_connect = always_connected, - - .in = 1, .out = 2, - .epsize = 64, -}; - -#endif /* CONFIG_USB_PXA */ - - - -#ifdef CONFIG_USB_SA1100 +#ifdef CONFIG_USB_ARMLINUX /*------------------------------------------------------------------------- * @@ -1279,25 +1597,24 @@ * This describes the driver currently in standard ARM Linux kernels. * The Zaurus uses a different driver (see later). * + * PXA25x and PXA210 use XScale cores (ARM v5TE) with better USB support + * and different USB endpoint numbering than the SA1100 devices. The + * mach-pxa/usb-eth.c driver re-uses the device ids from mach-sa1100 + * so we rely on the endpoint descriptors. + * *-------------------------------------------------------------------------*/ static const struct driver_info linuxdev_info = { - .description = "SA-1100 Linux Device", + .description = "Linux Device", .check_connect = always_connected, - - .in = 2, .out = 1, - .epsize = 64, }; static const struct driver_info yopy_info = { .description = "Yopy", .check_connect = always_connected, - - .in = 2, .out = 1, - .epsize = 64, }; -#endif /* CONFIG_USB_SA1100 */ +#endif /* CONFIG_USB_ARMLINUX */ #ifdef CONFIG_USB_ZAURUS @@ -1349,10 +1666,9 @@ .description = "Sharp Zaurus SL-5x00", .flags = FLAG_FRAMING_Z, .check_connect = always_connected, + .bind = cdc_bind, + .unbind = cdc_unbind, .tx_fixup = zaurus_tx_fixup, - - .in = 2, .out = 1, - .epsize = 64, }; static const struct driver_info zaurus_sla300_info = { .description = "Sharp Zaurus SL-A300", @@ -1361,7 +1677,6 @@ .tx_fixup = zaurus_tx_fixup, .in = 1, .out = 2, - .epsize = 64, }; static const struct driver_info zaurus_slb500_info = { /* Japanese B500 ~= US SL-5600 */ @@ -1371,7 +1686,6 @@ .tx_fixup = zaurus_tx_fixup, .in = 1, .out = 2, - .epsize = 64, }; // SL-5600 and C-700 are PXA based; should resemble A300 @@ -1403,7 +1717,7 @@ return -EINVAL; #endif // no second zero-length packet read wanted after mtu-sized packets - if (((new_mtu + sizeof (struct ethhdr)) % EP_SIZE (dev)) == 0) + if (((new_mtu + sizeof (struct ethhdr)) % dev->maxpacket) == 0) return -EDOM; net->mtu = new_mtu; return 0; @@ -1444,10 +1758,9 @@ { set_bit (work, &dev->flags); if (!schedule_work (&dev->kevent)) - err ("%s: kevent %d may have been dropped", - dev->net.name, work); + deverr (dev, "kevent %d may have been dropped", work); else - dbg ("%s: kevent %d scheduled", dev->net.name, work); + devdbg (dev, "kevent %d scheduled", work); } /*-------------------------------------------------------------------------*/ @@ -1480,7 +1793,7 @@ size = (sizeof (struct ethhdr) + dev->net.mtu); if ((skb = alloc_skb (size, flags)) == 0) { - dbg ("no rx skb"); + devdbg (dev, "no rx skb"); defer_kevent (dev, EVENT_RX_MEMORY); usb_free_urb (urb); return; @@ -1492,14 +1805,14 @@ entry->state = rx_start; entry->length = 0; - usb_fill_bulk_urb (urb, dev->udev, - usb_rcvbulkpipe (dev->udev, dev->driver_info->in), + usb_fill_bulk_urb (urb, dev->udev, dev->in, skb->data, size, rx_complete, skb); urb->transfer_flags |= URB_ASYNC_UNLINK; spin_lock_irqsave (&dev->rxq.lock, lockflags); if (netif_running (&dev->net) + && netif_device_present (&dev->net) && !test_bit (EVENT_RX_HALT, &dev->flags)) { switch (retval = usb_submit_urb (urb, GFP_ATOMIC)){ case -EPIPE: @@ -1508,15 +1821,19 @@ case -ENOMEM: defer_kevent (dev, EVENT_RX_MEMORY); break; + case -ENODEV: + devdbg (dev, "device gone"); + netif_device_detach (&dev->net); + break; default: - dbg ("%s rx submit, %d", dev->net.name, retval); + devdbg (dev, "rx submit, %d", retval); tasklet_schedule (&dev->bh); break; case 0: __skb_queue_tail (&dev->rxq, skb); } } else { - dbg ("rx: stopped"); + devdbg (dev, "rx: stopped"); retval = -ENOLINK; } spin_unlock_irqrestore (&dev->rxq.lock, lockflags); @@ -1553,7 +1870,7 @@ if (status != NET_RX_SUCCESS) devdbg (dev, "netif_rx status %d", status); } else { - dbg ("drop"); + devdbg (dev, "drop"); error: dev->stats.rx_errors++; skb_queue_tail (&dev->done, skb); @@ -1580,7 +1897,7 @@ entry->state = rx_cleanup; dev->stats.rx_errors++; dev->stats.rx_length_errors++; - dbg ("rx length %d", skb->len); + devdbg (dev, "rx length %d", skb->len); } break; @@ -1589,15 +1906,31 @@ // we avoid the highspeed version of the ETIMEOUT/EILSEQ // storm, recovering as needed. case -EPIPE: + dev->stats.rx_errors++; defer_kevent (dev, EVENT_RX_HALT); // FALLTHROUGH // software-driven interface shutdown - case -ECONNRESET: // according to API spec - case -ECONNABORTED: // some (now fixed?) UHCI bugs - dbg ("%s rx shutdown, code %d", dev->net.name, urb_status); + case -ECONNRESET: // async unlink + case -ESHUTDOWN: // hardware gone +#ifdef VERBOSE + devdbg (dev, "rx shutdown, code %d", urb_status); +#endif + goto block; + + // we get controller i/o faults during khubd disconnect() delays. + // throttle down resubmits, to avoid log floods; just temporarily, + // so we still recover when the fault isn't a khubd delay. + case -EPROTO: // ehci + case -ETIMEDOUT: // ohci + case -EILSEQ: // uhci + dev->stats.rx_errors++; + if (!timer_pending (&dev->delay)) { + mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES); + devdbg (dev, "rx throttle %d", urb_status); + } +block: entry->state = rx_cleanup; - // do urb frees only in the tasklet (UHCI has oopsed ...) entry->urb = urb; urb = 0; break; @@ -1608,12 +1941,9 @@ // FALLTHROUGH default: - // on unplug we get ETIMEDOUT (ohci) or EILSEQ (uhci) - // until khubd sees its interrupt and disconnects us. - // that can easily be hundreds of passes through here. entry->state = rx_cleanup; dev->stats.rx_errors++; - dbg ("%s rx: status %d", dev->net.name, urb_status); + devdbg (dev, "rx status %d", urb_status); break; } @@ -1628,7 +1958,7 @@ usb_free_urb (urb); } #ifdef VERBOSE - dbg ("no read resubmitted"); + devdbg (dev, "no read resubmitted"); #endif /* VERBOSE */ } @@ -1636,7 +1966,7 @@ // unlink pending rx/tx; completion handlers do all other cleanup -static int unlink_urbs (struct sk_buff_head *q) +static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q) { unsigned long flags; struct sk_buff *skb, *skbnext; @@ -1656,7 +1986,7 @@ // these (async) unlinks complete immediately retval = usb_unlink_urb (urb); if (retval != -EINPROGRESS && retval != 0) - dbg ("unlink urb err, %d", retval); + devdbg (dev, "unlink urb err, %d", retval); else count++; } @@ -1688,7 +2018,7 @@ // ensure there are no more active urbs add_wait_queue (&unlink_wakeup, &wait); dev->wait = &unlink_wakeup; - temp = unlink_urbs (&dev->txq) + unlink_urbs (&dev->rxq); + temp = unlink_urbs (dev, &dev->txq) + unlink_urbs (dev, &dev->rxq); // maybe wait for deletions to finish. while (skb_queue_len (&dev->rxq) @@ -1696,11 +2026,16 @@ && skb_queue_len (&dev->done)) { set_current_state (TASK_UNINTERRUPTIBLE); schedule_timeout (UNLINK_TIMEOUT_JIFFIES); - dbg ("waited for %d urb completions", temp); + devdbg (dev, "waited for %d urb completions", temp); } dev->wait = 0; remove_wait_queue (&unlink_wakeup, &wait); + // deferred work (task, timer, softirq) must also stop + flush_scheduled_work (); + del_timer_sync (&dev->delay); + tasklet_kill (&dev->bh); + mutex_unlock (&dev->mutex); return 0; } @@ -1738,7 +2073,7 @@ if (dev->msg_level >= 2) devinfo (dev, "open: enable queueing " "(rx %d, tx %d) mtu %d %s framing", - RX_QLEN, TX_QLEN, dev->net.mtu, + RX_QLEN (dev), TX_QLEN (dev), dev->net.mtu, (info->flags & (FLAG_FRAMING_NC | FLAG_FRAMING_GL)) ? ((info->flags & FLAG_FRAMING_NC) ? "NetChip" @@ -1755,7 +2090,8 @@ /*-------------------------------------------------------------------------*/ -static int usbnet_ethtool_ioctl (struct net_device *net, void *useraddr) +static inline int +usbnet_ethtool_ioctl (struct net_device *net, void *useraddr) { struct usbnet *dev = (struct usbnet *) net->priv; u32 cmd; @@ -1829,9 +2165,8 @@ /* work that cannot be done in interrupt context uses keventd. * - * NOTE: "uhci" and "usb-uhci" may have trouble with this since they don't - * queue control transfers to individual devices, and other threads could - * trigger control requests concurrently. hope that's rare. + * NOTE: with 2.5 we could do more of this using completion callbacks, + * especially now that control transfers can be queued. */ static void kevent (void *data) @@ -1841,24 +2176,22 @@ /* usb_clear_halt() needs a thread context */ if (test_bit (EVENT_TX_HALT, &dev->flags)) { - unlink_urbs (&dev->txq); - status = usb_clear_halt (dev->udev, - usb_sndbulkpipe (dev->udev, dev->driver_info->out)); + unlink_urbs (dev, &dev->txq); + status = usb_clear_halt (dev->udev, dev->out); if (status < 0) - err ("%s: can't clear tx halt, status %d", - dev->net.name, status); + deverr (dev, "can't clear tx halt, status %d", + status); else { clear_bit (EVENT_TX_HALT, &dev->flags); netif_wake_queue (&dev->net); } } if (test_bit (EVENT_RX_HALT, &dev->flags)) { - unlink_urbs (&dev->rxq); - status = usb_clear_halt (dev->udev, - usb_rcvbulkpipe (dev->udev, dev->driver_info->in)); + unlink_urbs (dev, &dev->rxq); + status = usb_clear_halt (dev->udev, dev->in); if (status < 0) - err ("%s: can't clear rx halt, status %d", - dev->net.name, status); + deverr (dev, "can't clear rx halt, status %d", + status); else { clear_bit (EVENT_RX_HALT, &dev->flags); tasklet_schedule (&dev->bh); @@ -1881,8 +2214,8 @@ } if (dev->flags) - dbg ("%s: kevent done, flags = 0x%lx", - dev->net.name, dev->flags); + devdbg (dev, "kevent done, flags = 0x%lx", + dev->flags); } /*-------------------------------------------------------------------------*/ @@ -1893,8 +2226,35 @@ struct skb_data *entry = (struct skb_data *) skb->cb; struct usbnet *dev = entry->dev; - if (urb->status == -EPIPE) - defer_kevent (dev, EVENT_TX_HALT); + if (urb->status == 0) { + dev->stats.tx_packets++; + dev->stats.tx_bytes += entry->length; + } else { + dev->stats.tx_errors++; + + switch (urb->status) { + case -EPIPE: + defer_kevent (dev, EVENT_TX_HALT); + break; + + // like rx, tx gets controller i/o faults during khubd delays + // and so it uses the same throttling mechanism. + case -EPROTO: // ehci + case -ETIMEDOUT: // ohci + case -EILSEQ: // uhci + if (!timer_pending (&dev->delay)) { + mod_timer (&dev->delay, + jiffies + THROTTLE_JIFFIES); + devdbg (dev, "tx throttle %d", urb->status); + } + netif_stop_queue (&dev->net); + break; + default: + devdbg (dev, "tx err %d", entry->urb->status); + break; + } + } + urb->dev = 0; entry->state = tx_done; defer_bh (dev, skb); @@ -1906,7 +2266,7 @@ { struct usbnet *dev = (struct usbnet *) net->priv; - unlink_urbs (&dev->txq); + unlink_urbs (dev, &dev->txq); tasklet_schedule (&dev->bh); // FIXME: device recovery -- reset? @@ -1933,14 +2293,14 @@ if (info->tx_fixup) { skb = info->tx_fixup (dev, skb, GFP_ATOMIC); if (!skb) { - dbg ("can't tx_fixup skb"); + devdbg (dev, "can't tx_fixup skb"); goto drop; } } length = skb->len; if (!(urb = usb_alloc_urb (0, GFP_ATOMIC))) { - dbg ("no urb"); + devdbg (dev, "no urb"); goto drop; } @@ -1965,20 +2325,24 @@ } else #endif /* CONFIG_USB_NET1080 */ - /* don't assume the hardware handles USB_ZERO_PACKET */ - if ((length % EP_SIZE (dev)) == 0) - skb->len++; - - usb_fill_bulk_urb (urb, dev->udev, - usb_sndbulkpipe (dev->udev, info->out), + usb_fill_bulk_urb (urb, dev->udev, dev->out, skb->data, skb->len, tx_complete, skb); urb->transfer_flags |= URB_ASYNC_UNLINK; + /* don't assume the hardware handles USB_ZERO_PACKET + * NOTE: strictly conforming cdc-ether devices should expect + * the ZLP here, but ignore the one-byte packet. + * + * FIXME zero that byte, if it doesn't require a new skb. + */ + if ((length % dev->maxpacket) == 0) + urb->transfer_buffer_length++; + spin_lock_irqsave (&dev->txq.lock, flags); #ifdef CONFIG_USB_NET1080 if (info->flags & FLAG_FRAMING_NC) { - header->packet_id = cpu_to_le16 (dev->packet_id++); + header->packet_id = cpu_to_le16 ((u16)dev->dev_packet_id++); put_unaligned (header->packet_id, &trailer->packet_id); #if 0 devdbg (dev, "frame >tx h %d p %d id %d", @@ -1994,12 +2358,12 @@ defer_kevent (dev, EVENT_TX_HALT); break; default: - dbg ("%s tx: submit urb err %d", net->name, retval); + devdbg (dev, "tx: submit urb err %d", retval); break; case 0: net->trans_start = jiffies; __skb_queue_tail (&dev->txq, skb); - if (dev->txq.qlen >= TX_QLEN) + if (dev->txq.qlen >= TX_QLEN (dev)) netif_stop_queue (net); } spin_unlock_irqrestore (&dev->txq.lock, flags); @@ -2024,7 +2388,7 @@ /*-------------------------------------------------------------------------*/ -// tasklet ... work that avoided running in_irq() +// tasklet (work deferred from completions, in_irq) or timer static void usbnet_bh (unsigned long param) { @@ -2040,23 +2404,12 @@ rx_process (dev, skb); continue; case tx_done: - if (entry->urb->status) { - // can this statistic become more specific? - dev->stats.tx_errors++; - dbg ("%s tx: err %d", dev->net.name, - entry->urb->status); - } else { - dev->stats.tx_packets++; - dev->stats.tx_bytes += entry->length; - } - // FALLTHROUGH: case rx_cleanup: usb_free_urb (entry->urb); dev_kfree_skb (skb); continue; default: - dbg ("%s: bogus skb state %d", - dev->net.name, entry->state); + devdbg (dev, "bogus skb state %d", entry->state); } } @@ -2068,23 +2421,28 @@ // or are we maybe short a few urbs? } else if (netif_running (&dev->net) + && netif_device_present (&dev->net) + && !timer_pending (&dev->delay) && !test_bit (EVENT_RX_HALT, &dev->flags)) { int temp = dev->rxq.qlen; + int qlen = RX_QLEN (dev); - if (temp < RX_QLEN) { + if (temp < qlen) { struct urb *urb; int i; - for (i = 0; i < 3 && dev->rxq.qlen < RX_QLEN; i++) { + + // don't refill the queue all at once + for (i = 0; i < 10 && dev->rxq.qlen < qlen; i++) { if ((urb = usb_alloc_urb (0, GFP_ATOMIC)) != 0) rx_submit (dev, urb, GFP_ATOMIC); } if (temp != dev->rxq.qlen) devdbg (dev, "rxqlen %d --> %d", temp, dev->rxq.qlen); - if (dev->rxq.qlen < RX_QLEN) + if (dev->rxq.qlen < qlen) tasklet_schedule (&dev->bh); } - if (dev->txq.qlen < TX_QLEN) + if (dev->txq.qlen < TX_QLEN (dev)) netif_wake_queue (&dev->net); } } @@ -2117,13 +2475,8 @@ unregister_netdev (&dev->net); - mutex_lock (&usbnet_mutex); - mutex_lock (&dev->mutex); - list_del (&dev->dev_list); - mutex_unlock (&usbnet_mutex); - - // assuming we used keventd, it must quiesce too - flush_scheduled_work (); + if (dev->driver_info->unbind) + dev->driver_info->unbind (dev, intf); kfree (dev); usb_put_dev (xdev); @@ -2142,20 +2495,12 @@ struct usb_host_interface *interface; struct driver_info *info; struct usb_device *xdev; + int status; info = (struct driver_info *) prod->driver_info; - xdev = interface_to_usbdev (udev); interface = &udev->altsetting [udev->act_altsetting]; - if (!(info->flags & FLAG_NO_SETINT)) { - if (usb_set_interface (xdev, interface->desc.bInterfaceNumber, - interface->desc.bAlternateSetting) < 0) { - err ("set_interface failed"); - return -EIO; - } - } - // set up our own records if (!(dev = kmalloc (sizeof *dev, GFP_KERNEL))) { dbg ("can't kmalloc dev"); @@ -2168,13 +2513,15 @@ dev->udev = xdev; dev->driver_info = info; dev->msg_level = msg_level; - INIT_LIST_HEAD (&dev->dev_list); skb_queue_head_init (&dev->rxq); skb_queue_head_init (&dev->txq); skb_queue_head_init (&dev->done); dev->bh.func = usbnet_bh; dev->bh.data = (unsigned long) dev; INIT_WORK (&dev->kevent, kevent, dev); + dev->delay.function = usbnet_bh; + dev->delay.data = (unsigned long) dev; + init_timer (&dev->delay); // set up network interface records net = &dev->net; @@ -2200,31 +2547,41 @@ net->tx_timeout = usbnet_tx_timeout; net->do_ioctl = usbnet_ioctl; + // allow device-specific bind/init procedures + // NOTE net->name still not usable ... + if (info->bind) + status = info->bind (dev, udev); + else if (!info->in || info->out) + status = get_endpoints (dev, udev); + else { + dev->in = usb_rcvbulkpipe (xdev, info->in); + dev->out = usb_sndbulkpipe (xdev, info->out); + if (!(info->flags & FLAG_NO_SETINT)) + status = usb_set_interface (xdev, + interface->desc.bInterfaceNumber, + interface->desc.bAlternateSetting); + else + status = 0; + + } + if (status < 0) { + kfree (dev); + return status; + } + dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1); + register_netdev (&dev->net); - devinfo (dev, "register usbnet usb-%s-%s, %s", + devinfo (dev, "register usbnet at usb-%s-%s, %s", xdev->bus->bus_name, xdev->devpath, dev->driver_info->description); -#ifdef CONFIG_USB_ZAURUS - if (dev->driver_info == &zaurus_sl5x00_info) { - int status; - status = usb_set_configuration (xdev, 1); - devinfo (dev, "set config --> %d", status); - status = usb_set_interface (xdev, 1, 1); - devinfo (dev, "set altsetting --> %d", status); - } -#endif - // ok, it's ready to go. - usb_set_intfdata(udev, dev); - mutex_lock (&usbnet_mutex); - list_add (&dev->dev_list, &usbnet_list); + usb_set_intfdata (udev, dev); mutex_unlock (&dev->mutex); // start as if the link is up netif_device_attach (&dev->net); - mutex_unlock (&usbnet_mutex); return 0; } @@ -2298,28 +2655,19 @@ }, #endif -#ifdef CONFIG_USB_PXA -/* - * PXA250 or PXA210 ... these use a "usb-eth" driver much like - * the sa1100 one. - */ -{ - // Compaq "Itsy" vendor/product id, version "2.0" - USB_DEVICE_VER (0x049F, 0x505A, 0x0200, 0x0200), - .driver_info = (unsigned long) &pxa_info, -}, -#endif - -#ifdef CONFIG_USB_SA1100 +#ifdef CONFIG_USB_ARMLINUX /* * SA-1100 using standard ARM Linux kernels, or compatible. * Often used when talking to Linux PDAs (iPaq, Yopy, etc). * The sa-1100 "usb-eth" driver handles the basic framing. + * + * PXA25x or PXA210 ... these use a "usb-eth" driver much like + * the sa1100 one, but hardware uses different endpoint numbers. */ { // 1183 = 0x049F, both used as hex values? - // Compaq "Itsy" vendor/product id, version "0.0" - USB_DEVICE_VER (0x049F, 0x505A, 0, 0), + // Compaq "Itsy" vendor/product id + USB_DEVICE (0x049F, 0x505A), .driver_info = (unsigned long) &linuxdev_info, }, { USB_DEVICE (0x0E7E, 0x1001), // G.Mate "Yopy" @@ -2337,9 +2685,10 @@ | USB_DEVICE_ID_MATCH_DEVICE, .idVendor = 0x04DD, .idProduct = 0x8004, - .bInterfaceClass = 0x0a, - .bInterfaceSubClass = 0x00, - .bInterfaceProtocol = 0x00, + /* match the master interface */ + .bInterfaceClass = USB_CLASS_COMM, + .bInterfaceSubClass = 6 /* Ethernet model */, + .bInterfaceProtocol = 0, .driver_info = (unsigned long) &zaurus_sl5x00_info, }, { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO @@ -2359,6 +2708,24 @@ .bInterfaceSubClass = 0x0a, .bInterfaceProtocol = 0x00, .driver_info = (unsigned long) &zaurus_slb500_info, +}, +#endif + +#ifdef CONFIG_USB_CDCETHER +{ + /* CDC Ether uses two interfaces, not necessarily consecutive. + * We match the main interface, ignoring the optional device + * class so we could handle devices that aren't exclusively + * CDC ether. + * + * NOTE: this match must come AFTER entries working around + * bugs/quirks in a given product (like Zaurus, above). + */ + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO, + .bInterfaceClass = USB_CLASS_COMM, + .bInterfaceSubClass = 6 /* Ethernet model */, + .bInterfaceProtocol = 0, + .driver_info = (unsigned long) &cdc_info, }, #endif diff -Nru a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c --- a/drivers/usb/serial/io_edgeport.c Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/serial/io_edgeport.c Sat Apr 12 14:44:06 2003 @@ -25,6 +25,10 @@ * * Version history: * + * 2003_04_03 al borchers + * - fixed a bug (that shows up with dosemu) where the tty struct is + * used in a callback after it has been freed + * * 2.3 2002_03_08 greg kroah-hartman * - fixed bug when multiple devices were attached at the same time. * @@ -918,7 +922,7 @@ tty = edge_port->port->tty; - if (tty) { + if (tty && edge_port->open) { /* let the tty driver wakeup if it has a special write_wakeup function */ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && tty->ldisc.write_wakeup) { (tty->ldisc.write_wakeup)(tty); @@ -975,7 +979,7 @@ tty = edge_port->port->tty; /* tell the tty driver that something has changed */ - if (tty) + if (tty && edge_port->open) wake_up_interruptible(&tty->write_wait); /* we have completed the command */ diff -Nru a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c --- a/drivers/usb/serial/ipaq.c Sat Apr 12 14:44:09 2003 +++ b/drivers/usb/serial/ipaq.c Sat Apr 12 14:44:09 2003 @@ -131,6 +131,7 @@ { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_E740_ID) }, { USB_DEVICE(HTC_VENDOR_ID, HTC_PRODUCT_ID) }, { USB_DEVICE(NEC_VENDOR_ID, NEC_PRODUCT_ID) }, + { USB_DEVICE(ASUS_VENDOR_ID, ASUS_A600_PRODUCT_ID) }, { } /* Terminating entry */ }; diff -Nru a/drivers/usb/serial/ipaq.h b/drivers/usb/serial/ipaq.h --- a/drivers/usb/serial/ipaq.h Sat Apr 12 14:44:06 2003 +++ b/drivers/usb/serial/ipaq.h Sat Apr 12 14:44:06 2003 @@ -77,6 +77,9 @@ #define NEC_VENDOR_ID 0x0409 #define NEC_PRODUCT_ID 0x00d5 +#define ASUS_VENDOR_ID 0x0b05 +#define ASUS_A600_PRODUCT_ID 0x4201 + /* * Since we can't queue our bulk write urbs (don't know why - it just * doesn't work), we can send down only one write urb at a time. The simplistic diff -Nru a/drivers/usb/serial/keyspan.h b/drivers/usb/serial/keyspan.h --- a/drivers/usb/serial/keyspan.h Sat Apr 12 14:44:09 2003 +++ b/drivers/usb/serial/keyspan.h Sat Apr 12 14:44:09 2003 @@ -411,19 +411,19 @@ }; static const struct keyspan_device_details usa49wlc_device_details = { - product_id: keyspan_usa49wlc_product_id, - msg_format: msg_usa49, - num_ports: 4, - indat_endp_flip: 0, - outdat_endp_flip: 0, - indat_endpoints: {0x81, 0x82, 0x83, 0x84}, - outdat_endpoints: {0x01, 0x02, 0x03, 0x04}, - inack_endpoints: {-1, -1, -1, -1}, - outcont_endpoints: {-1, -1, -1, -1}, - instat_endpoint: 0x87, - glocont_endpoint: 0x07, - calculate_baud_rate: keyspan_usa19w_calc_baud, - baudclk: KEYSPAN_USA19W_BAUDCLK, + .product_id = keyspan_usa49wlc_product_id, + .msg_format = msg_usa49, + .num_ports = 4, + .indat_endp_flip = 0, + .outdat_endp_flip = 0, + .indat_endpoints = {0x81, 0x82, 0x83, 0x84}, + .outdat_endpoints = {0x01, 0x02, 0x03, 0x04}, + .inack_endpoints = {-1, -1, -1, -1}, + .outcont_endpoints = {-1, -1, -1, -1}, + .instat_endpoint = 0x87, + .glocont_endpoint = 0x07, + .calculate_baud_rate = keyspan_usa19w_calc_baud, + .baudclk = KEYSPAN_USA19W_BAUDCLK, }; static const struct keyspan_device_details *keyspan_devices[] = { diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c --- a/drivers/usb/serial/usb-serial.c Sat Apr 12 14:44:07 2003 +++ b/drivers/usb/serial/usb-serial.c Sat Apr 12 14:44:07 2003 @@ -531,7 +531,7 @@ dbg("%s - port %d", __FUNCTION__, port->number); /* if disconnect beat us to the punch here, there's nothing to do */ - if (tty->driver_data) { + if (tty && tty->driver_data) { __serial_close(port, filp); } } @@ -830,6 +830,7 @@ while (port->open_count > 0) { __serial_close(port, NULL); } + port->tty = NULL; } } diff -Nru a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c --- a/drivers/usb/storage/scsiglue.c Sat Apr 12 14:44:08 2003 +++ b/drivers/usb/storage/scsiglue.c Sat Apr 12 14:44:08 2003 @@ -141,13 +141,19 @@ static int usb_storage_queuecommand( Scsi_Cmnd *srb , void (*done)(Scsi_Cmnd *)) { struct us_data *us = (struct us_data *)srb->device->host->hostdata[0]; + int state = atomic_read(&us->sm_state); US_DEBUGP("queuecommand() called\n"); srb->host_scribble = (unsigned char *)us; /* enqueue the command */ - BUG_ON(atomic_read(&us->sm_state) != US_STATE_IDLE); - BUG_ON(us->srb != NULL); + if (state != US_STATE_IDLE || us->srb != NULL) { + printk(KERN_ERR USB_STORAGE "Error in %s: " + "state = %d, us->srb = %p\n", + __FUNCTION__, state, us->srb); + return SCSI_MLQUEUE_HOST_BUSY; + } + srb->scsi_done = done; us->srb = srb; @@ -175,8 +181,7 @@ return FAILED; } - usb_stor_abort_transport(us); - return SUCCESS; + return usb_stor_abort_transport(us); } /* This invokes the transport reset mechanism to reset the state of the @@ -185,10 +190,15 @@ static int usb_storage_device_reset( Scsi_Cmnd *srb ) { struct us_data *us = (struct us_data *)srb->device->host->hostdata[0]; + int state = atomic_read(&us->sm_state); int result; US_DEBUGP("device_reset() called\n" ); - BUG_ON(atomic_read(&us->sm_state) != US_STATE_IDLE); + if (state != US_STATE_IDLE) { + printk(KERN_ERR USB_STORAGE "Error in %s: " + "invalid state %d\n", __FUNCTION__, state); + return FAILED; + } /* set the state and release the lock */ atomic_set(&us->sm_state, US_STATE_RESETTING); @@ -260,6 +270,7 @@ struct us_data *us; char *pos = buffer; struct Scsi_Host *hostptr; + unsigned long f; /* if someone is sending us data, just throw it away */ if (inout) @@ -274,6 +285,7 @@ /* if we couldn't find it, we return an error */ if (!us) { + scsi_host_put(hostptr); return -ESRCH; } @@ -288,6 +300,24 @@ /* show the protocol and transport */ SPRINTF(" Protocol: %s\n", us->protocol_name); SPRINTF(" Transport: %s\n", us->transport_name); + + /* show the device flags */ + if (pos < buffer + length) { + pos += sprintf(pos, " Quirks:"); + f = us->flags; + +#define DO_FLAG(a) if (f & US_FL_##a) pos += sprintf(pos, " " #a) + DO_FLAG(SINGLE_LUN); + DO_FLAG(MODE_XLATE); + DO_FLAG(START_STOP); + DO_FLAG(IGNORE_SER); + DO_FLAG(SCM_MULT_TARG); + DO_FLAG(FIX_INQUIRY); + DO_FLAG(FIX_CAPACITY); +#undef DO_FLAG + + *(pos++) = '\n'; + } /* release the reference count on this host */ scsi_host_put(hostptr); diff -Nru a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c --- a/drivers/usb/storage/transport.c Sat Apr 12 14:44:07 2003 +++ b/drivers/usb/storage/transport.c Sat Apr 12 14:44:07 2003 @@ -297,10 +297,11 @@ /* stalled */ case -EPIPE: - /* for control endpoints, a stall indicates a protocol error */ + /* for control endpoints, (used by CB[I]) a stall indicates + * a failed command */ if (usb_pipecontrol(pipe)) { US_DEBUGP("-- stall on control pipe\n"); - return USB_STOR_XFER_ERROR; + return USB_STOR_XFER_STALLED; } /* for other sorts of endpoint, clear the stall */ @@ -691,7 +692,7 @@ /* Abort the currently running scsi command or device reset. * This must be called with scsi_lock(us->srb->host) held */ -void usb_stor_abort_transport(struct us_data *us) +int usb_stor_abort_transport(struct us_data *us) { struct Scsi_Host *host; int state = atomic_read(&us->sm_state); @@ -701,7 +702,11 @@ /* Normally the current state is RUNNING. If the control thread * hasn't even started processing this command, the state will be * IDLE. Anything else is a bug. */ - BUG_ON((state != US_STATE_RUNNING && state != US_STATE_IDLE)); + if (state != US_STATE_RUNNING && state != US_STATE_IDLE) { + printk(KERN_ERR USB_STORAGE "Error in %s: " + "invalid state %d\n", __FUNCTION__, state); + return FAILED; + } /* set state to abort and release the lock */ atomic_set(&us->sm_state, US_STATE_ABORTING); @@ -730,6 +735,7 @@ /* Reacquire the lock: note that us->srb is now NULL */ scsi_lock(host); + return SUCCESS; } /* @@ -750,8 +756,14 @@ /* check the return code for the command */ US_DEBUGP("Call to usb_stor_ctrl_transfer() returned %d\n", result); + + /* if we stalled the command, it means command failed */ + if (result == USB_STOR_XFER_STALLED) { + return USB_STOR_TRANSPORT_FAILED; + } + + /* Uh oh... serious problem here */ if (result != USB_STOR_XFER_GOOD) { - /* Uh oh... serious problem here */ return USB_STOR_TRANSPORT_ERROR; } @@ -834,8 +846,14 @@ /* check the return code for the command */ US_DEBUGP("Call to usb_stor_ctrl_transfer() returned %d\n", result); + + /* if we stalled the command, it means command failed */ + if (result == USB_STOR_XFER_STALLED) { + return USB_STOR_TRANSPORT_FAILED; + } + + /* Uh oh... serious problem here */ if (result != USB_STOR_XFER_GOOD) { - /* Uh oh... serious problem here */ return USB_STOR_TRANSPORT_ERROR; } diff -Nru a/drivers/usb/storage/transport.h b/drivers/usb/storage/transport.h --- a/drivers/usb/storage/transport.h Sat Apr 12 14:44:07 2003 +++ b/drivers/usb/storage/transport.h Sat Apr 12 14:44:07 2003 @@ -154,7 +154,7 @@ extern int usb_stor_Bulk_reset(struct us_data*); extern void usb_stor_invoke_transport(Scsi_Cmnd*, struct us_data*); -extern void usb_stor_abort_transport(struct us_data*); +extern int usb_stor_abort_transport(struct us_data*); extern int usb_stor_bulk_msg(struct us_data *us, void *data, unsigned int pipe, unsigned int len, unsigned int *act_len); diff -Nru a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h --- a/drivers/usb/storage/unusual_devs.h Sat Apr 12 14:44:09 2003 +++ b/drivers/usb/storage/unusual_devs.h Sat Apr 12 14:44:09 2003 @@ -286,6 +286,19 @@ "USB Hard Disk", US_SC_RBC, US_PR_CB, NULL, 0 ), +/* This Pentax still camera is not conformant + * to the USB storage specification: - + * - It does not like the INQUIRY command. So we must handle this command + * of the SCSI layer ourselves. + * Tested on Rev. 10.00 (0x1000) + * Submitted by James Courtier-Dutton + */ +UNUSUAL_DEV( 0x0a17, 0x0004, 0x1000, 0x1000, + "ASAHI PENTAX", + "PENTAX OPTIO 430", + US_SC_8070, US_PR_CBI, NULL, + US_FL_FIX_INQUIRY ), + #ifdef CONFIG_USB_STORAGE_ISD200 UNUSUAL_DEV( 0x05ab, 0x0031, 0x0100, 0x0110, "In-System", diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c --- a/drivers/usb/storage/usb.c Sat Apr 12 14:44:07 2003 +++ b/drivers/usb/storage/usb.c Sat Apr 12 14:44:07 2003 @@ -430,39 +430,39 @@ } /* Set up the URB and the usb_ctrlrequest. - * ss->dev_semaphore must already be locked. + * us->dev_semaphore must already be locked. * Note that this function assumes that all the data in the us_data * structure is current. * Returns non-zero on failure, zero on success */ -static int usb_stor_allocate_urbs(struct us_data *ss) +static int usb_stor_allocate_urbs(struct us_data *us) { /* calculate and store the pipe values */ - ss->send_ctrl_pipe = usb_sndctrlpipe(ss->pusb_dev, 0); - ss->recv_ctrl_pipe = usb_rcvctrlpipe(ss->pusb_dev, 0); - ss->send_bulk_pipe = usb_sndbulkpipe(ss->pusb_dev, ss->ep_out); - ss->recv_bulk_pipe = usb_rcvbulkpipe(ss->pusb_dev, ss->ep_in); - ss->recv_intr_pipe = usb_rcvintpipe(ss->pusb_dev, ss->ep_int); + us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0); + us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0); + us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); + us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); + us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev, us->ep_int); /* allocate the usb_ctrlrequest for control packets */ US_DEBUGP("Allocating usb_ctrlrequest\n"); - ss->dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO); - if (!ss->dr) { + us->dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO); + if (!us->dr) { US_DEBUGP("allocation failed\n"); return 1; } /* allocate the URB we're going to use */ US_DEBUGP("Allocating URB\n"); - ss->current_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!ss->current_urb) { + us->current_urb = usb_alloc_urb(0, GFP_KERNEL); + if (!us->current_urb) { US_DEBUGP("allocation failed\n"); return 2; } US_DEBUGP("Allocating scatter-gather request block\n"); - ss->current_sg = kmalloc(sizeof(*ss->current_sg), GFP_KERNEL); - if (!ss->current_sg) { + us->current_sg = kmalloc(sizeof(*us->current_sg), GFP_KERNEL); + if (!us->current_sg) { US_DEBUGP("allocation failed\n"); return 5; } @@ -471,32 +471,32 @@ } /* Deallocate the URB, the usb_ctrlrequest, and the IRQ pipe. - * ss->dev_semaphore must already be locked. + * us->dev_semaphore must already be locked. */ -static void usb_stor_deallocate_urbs(struct us_data *ss) +static void usb_stor_deallocate_urbs(struct us_data *us) { /* free the scatter-gather request block */ - if (ss->current_sg) { - kfree(ss->current_sg); - ss->current_sg = NULL; + if (us->current_sg) { + kfree(us->current_sg); + us->current_sg = NULL; } /* free up the main URB for this device */ - if (ss->current_urb) { + if (us->current_urb) { US_DEBUGP("-- releasing main URB\n"); - usb_free_urb(ss->current_urb); - ss->current_urb = NULL; + usb_free_urb(us->current_urb); + us->current_urb = NULL; } /* free the usb_ctrlrequest buffer */ - if (ss->dr) { - kfree(ss->dr); - ss->dr = NULL; + if (us->dr) { + kfree(us->dr); + us->dr = NULL; } /* mark the device as gone */ - usb_put_dev(ss->pusb_dev); - ss->pusb_dev = NULL; + usb_put_dev(us->pusb_dev); + us->pusb_dev = NULL; } /* Probe to see if a new device is actually a SCSI device */ @@ -512,7 +512,7 @@ char serial[USB_STOR_STRING_LEN]; /* serial number */ unsigned int flags; struct us_unusual_dev *unusual_dev; - struct us_data *ss = NULL; + struct us_data *us = NULL; int result; /* these are temporary copies -- we test on these, then put them @@ -633,212 +633,212 @@ serial, sizeof(serial)); /* New device -- allocate memory and initialize */ - if ((ss = (struct us_data *)kmalloc(sizeof(struct us_data), + if ((us = (struct us_data *)kmalloc(sizeof(struct us_data), GFP_KERNEL)) == NULL) { printk(KERN_WARNING USB_STORAGE "Out of memory\n"); usb_put_dev(dev); return -ENOMEM; } - memset(ss, 0, sizeof(struct us_data)); + memset(us, 0, sizeof(struct us_data)); /* Initialize the mutexes only when the struct is new */ - init_completion(&(ss->notify)); - init_MUTEX_LOCKED(&(ss->dev_semaphore)); + init_completion(&(us->notify)); + init_MUTEX_LOCKED(&(us->dev_semaphore)); /* copy over the subclass and protocol data */ - ss->subclass = subclass; - ss->protocol = protocol; - ss->flags = flags; - ss->unusual_dev = unusual_dev; + us->subclass = subclass; + us->protocol = protocol; + us->flags = flags; + us->unusual_dev = unusual_dev; /* copy over the endpoint data */ - ss->ep_in = ep_in->bEndpointAddress & + us->ep_in = ep_in->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; - ss->ep_out = ep_out->bEndpointAddress & + us->ep_out = ep_out->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; if (ep_int) { - ss->ep_int = ep_int->bEndpointAddress & + us->ep_int = ep_int->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; - ss->ep_bInterval = ep_int->bInterval; + us->ep_bInterval = ep_int->bInterval; } else - ss->ep_int = ss->ep_bInterval = 0; + us->ep_int = us->ep_bInterval = 0; /* establish the connection to the new device */ - ss->ifnum = ifnum; - ss->pusb_dev = dev; + us->ifnum = ifnum; + us->pusb_dev = dev; /* copy over the identifiying strings */ - strncpy(ss->vendor, mf, USB_STOR_STRING_LEN); - strncpy(ss->product, prod, USB_STOR_STRING_LEN); - strncpy(ss->serial, serial, USB_STOR_STRING_LEN); - if (strlen(ss->vendor) == 0) { + strncpy(us->vendor, mf, USB_STOR_STRING_LEN); + strncpy(us->product, prod, USB_STOR_STRING_LEN); + strncpy(us->serial, serial, USB_STOR_STRING_LEN); + if (strlen(us->vendor) == 0) { if (unusual_dev->vendorName) - strncpy(ss->vendor, unusual_dev->vendorName, + strncpy(us->vendor, unusual_dev->vendorName, USB_STOR_STRING_LEN); else - strncpy(ss->vendor, "Unknown", + strncpy(us->vendor, "Unknown", USB_STOR_STRING_LEN); } - if (strlen(ss->product) == 0) { + if (strlen(us->product) == 0) { if (unusual_dev->productName) - strncpy(ss->product, unusual_dev->productName, + strncpy(us->product, unusual_dev->productName, USB_STOR_STRING_LEN); else - strncpy(ss->product, "Unknown", + strncpy(us->product, "Unknown", USB_STOR_STRING_LEN); } - if (strlen(ss->serial) == 0) - strncpy(ss->serial, "None", USB_STOR_STRING_LEN); + if (strlen(us->serial) == 0) + strncpy(us->serial, "None", USB_STOR_STRING_LEN); /* * Set the handler pointers based on the protocol * Again, this data is persistent across reattachments */ - switch (ss->protocol) { + switch (us->protocol) { case US_PR_CB: - ss->transport_name = "Control/Bulk"; - ss->transport = usb_stor_CB_transport; - ss->transport_reset = usb_stor_CB_reset; - ss->max_lun = 7; + us->transport_name = "Control/Bulk"; + us->transport = usb_stor_CB_transport; + us->transport_reset = usb_stor_CB_reset; + us->max_lun = 7; break; case US_PR_CBI: - ss->transport_name = "Control/Bulk/Interrupt"; - ss->transport = usb_stor_CBI_transport; - ss->transport_reset = usb_stor_CB_reset; - ss->max_lun = 7; + us->transport_name = "Control/Bulk/Interrupt"; + us->transport = usb_stor_CBI_transport; + us->transport_reset = usb_stor_CB_reset; + us->max_lun = 7; break; case US_PR_BULK: - ss->transport_name = "Bulk"; - ss->transport = usb_stor_Bulk_transport; - ss->transport_reset = usb_stor_Bulk_reset; - ss->max_lun = usb_stor_Bulk_max_lun(ss); + us->transport_name = "Bulk"; + us->transport = usb_stor_Bulk_transport; + us->transport_reset = usb_stor_Bulk_reset; + us->max_lun = usb_stor_Bulk_max_lun(us); break; #ifdef CONFIG_USB_STORAGE_HP8200e case US_PR_SCM_ATAPI: - ss->transport_name = "SCM/ATAPI"; - ss->transport = hp8200e_transport; - ss->transport_reset = usb_stor_CB_reset; - ss->max_lun = 1; + us->transport_name = "SCM/ATAPI"; + us->transport = hp8200e_transport; + us->transport_reset = usb_stor_CB_reset; + us->max_lun = 1; break; #endif #ifdef CONFIG_USB_STORAGE_SDDR09 case US_PR_EUSB_SDDR09: - ss->transport_name = "EUSB/SDDR09"; - ss->transport = sddr09_transport; - ss->transport_reset = usb_stor_CB_reset; - ss->max_lun = 0; + us->transport_name = "EUSB/SDDR09"; + us->transport = sddr09_transport; + us->transport_reset = usb_stor_CB_reset; + us->max_lun = 0; break; #endif #ifdef CONFIG_USB_STORAGE_SDDR55 case US_PR_SDDR55: - ss->transport_name = "SDDR55"; - ss->transport = sddr55_transport; - ss->transport_reset = sddr55_reset; - ss->max_lun = 0; + us->transport_name = "SDDR55"; + us->transport = sddr55_transport; + us->transport_reset = sddr55_reset; + us->max_lun = 0; break; #endif #ifdef CONFIG_USB_STORAGE_DPCM case US_PR_DPCM_USB: - ss->transport_name = "Control/Bulk-EUSB/SDDR09"; - ss->transport = dpcm_transport; - ss->transport_reset = usb_stor_CB_reset; - ss->max_lun = 1; + us->transport_name = "Control/Bulk-EUSB/SDDR09"; + us->transport = dpcm_transport; + us->transport_reset = usb_stor_CB_reset; + us->max_lun = 1; break; #endif #ifdef CONFIG_USB_STORAGE_FREECOM case US_PR_FREECOM: - ss->transport_name = "Freecom"; - ss->transport = freecom_transport; - ss->transport_reset = usb_stor_freecom_reset; - ss->max_lun = 0; + us->transport_name = "Freecom"; + us->transport = freecom_transport; + us->transport_reset = usb_stor_freecom_reset; + us->max_lun = 0; break; #endif #ifdef CONFIG_USB_STORAGE_DATAFAB case US_PR_DATAFAB: - ss->transport_name = "Datafab Bulk-Only"; - ss->transport = datafab_transport; - ss->transport_reset = usb_stor_Bulk_reset; - ss->max_lun = 1; + us->transport_name = "Datafab Bulk-Only"; + us->transport = datafab_transport; + us->transport_reset = usb_stor_Bulk_reset; + us->max_lun = 1; break; #endif #ifdef CONFIG_USB_STORAGE_JUMPSHOT case US_PR_JUMPSHOT: - ss->transport_name = "Lexar Jumpshot Control/Bulk"; - ss->transport = jumpshot_transport; - ss->transport_reset = usb_stor_Bulk_reset; - ss->max_lun = 1; + us->transport_name = "Lexar Jumpshot Control/Bulk"; + us->transport = jumpshot_transport; + us->transport_reset = usb_stor_Bulk_reset; + us->max_lun = 1; break; #endif default: - /* ss->transport_name = "Unknown"; */ + /* us->transport_name = "Unknown"; */ goto BadDevice; } - US_DEBUGP("Transport: %s\n", ss->transport_name); + US_DEBUGP("Transport: %s\n", us->transport_name); /* fix for single-lun devices */ - if (ss->flags & US_FL_SINGLE_LUN) - ss->max_lun = 0; + if (us->flags & US_FL_SINGLE_LUN) + us->max_lun = 0; - switch (ss->subclass) { + switch (us->subclass) { case US_SC_RBC: - ss->protocol_name = "Reduced Block Commands (RBC)"; - ss->proto_handler = usb_stor_transparent_scsi_command; + us->protocol_name = "Reduced Block Commands (RBC)"; + us->proto_handler = usb_stor_transparent_scsi_command; break; case US_SC_8020: - ss->protocol_name = "8020i"; - ss->proto_handler = usb_stor_ATAPI_command; - ss->max_lun = 0; + us->protocol_name = "8020i"; + us->proto_handler = usb_stor_ATAPI_command; + us->max_lun = 0; break; case US_SC_QIC: - ss->protocol_name = "QIC-157"; - ss->proto_handler = usb_stor_qic157_command; - ss->max_lun = 0; + us->protocol_name = "QIC-157"; + us->proto_handler = usb_stor_qic157_command; + us->max_lun = 0; break; case US_SC_8070: - ss->protocol_name = "8070i"; - ss->proto_handler = usb_stor_ATAPI_command; - ss->max_lun = 0; + us->protocol_name = "8070i"; + us->proto_handler = usb_stor_ATAPI_command; + us->max_lun = 0; break; case US_SC_SCSI: - ss->protocol_name = "Transparent SCSI"; - ss->proto_handler = usb_stor_transparent_scsi_command; + us->protocol_name = "Transparent SCSI"; + us->proto_handler = usb_stor_transparent_scsi_command; break; case US_SC_UFI: - ss->protocol_name = "Uniform Floppy Interface (UFI)"; - ss->proto_handler = usb_stor_ufi_command; + us->protocol_name = "Uniform Floppy Interface (UFI)"; + us->proto_handler = usb_stor_ufi_command; break; #ifdef CONFIG_USB_STORAGE_ISD200 case US_SC_ISD200: - ss->protocol_name = "ISD200 ATA/ATAPI"; - ss->proto_handler = isd200_ata_command; + us->protocol_name = "ISD200 ATA/ATAPI"; + us->proto_handler = isd200_ata_command; break; #endif default: - /* ss->protocol_name = "Unknown"; */ + /* us->protocol_name = "Unknown"; */ goto BadDevice; } - US_DEBUGP("Protocol: %s\n", ss->protocol_name); + US_DEBUGP("Protocol: %s\n", us->protocol_name); /* allocate the URB, the usb_ctrlrequest, and the IRQ URB */ - if (usb_stor_allocate_urbs(ss)) + if (usb_stor_allocate_urbs(us)) goto BadDevice; /* @@ -849,59 +849,59 @@ /* Just before we start our control thread, initialize * the device if it needs initialization */ if (unusual_dev && unusual_dev->initFunction) - unusual_dev->initFunction(ss); + unusual_dev->initFunction(us); /* start up our control thread */ - atomic_set(&ss->sm_state, US_STATE_IDLE); - ss->pid = kernel_thread(usb_stor_control_thread, ss, + atomic_set(&us->sm_state, US_STATE_IDLE); + us->pid = kernel_thread(usb_stor_control_thread, us, CLONE_VM); - if (ss->pid < 0) { + if (us->pid < 0) { printk(KERN_WARNING USB_STORAGE "Unable to start control thread\n"); goto BadDevice; } /* wait for the thread to start */ - wait_for_completion(&(ss->notify)); + wait_for_completion(&(us->notify)); /* unlock the device pointers */ - up(&(ss->dev_semaphore)); + up(&(us->dev_semaphore)); /* now register */ - ss->host = scsi_register(&usb_stor_host_template, sizeof(ss)); - if (!ss->host) { + us->host = scsi_register(&usb_stor_host_template, sizeof(us)); + if (!us->host) { printk(KERN_WARNING USB_STORAGE "Unable to register the scsi host\n"); /* tell the control thread to exit */ - ss->srb = NULL; - up(&ss->sema); - wait_for_completion(&ss->notify); + us->srb = NULL; + up(&us->sema); + wait_for_completion(&us->notify); /* re-lock the device pointers */ - down(&ss->dev_semaphore); + down(&us->dev_semaphore); goto BadDevice; } /* set the hostdata to prepare for scanning */ - ss->host->hostdata[0] = (unsigned long)ss; + us->host->hostdata[0] = (unsigned long)us; /* associate this host with our interface */ - scsi_set_device(ss->host, &intf->dev); + scsi_set_device(us->host, &intf->dev); /* now add the host */ - result = scsi_add_host(ss->host, NULL); + result = scsi_add_host(us->host, NULL); if (result) { printk(KERN_WARNING USB_STORAGE "Unable to add the scsi host\n"); /* tell the control thread to exit */ - ss->srb = NULL; - up(&ss->sema); - wait_for_completion(&ss->notify); + us->srb = NULL; + up(&us->sema); + wait_for_completion(&us->notify); /* re-lock the device pointers */ - down(&ss->dev_semaphore); + down(&us->dev_semaphore); goto BadDevice; } @@ -911,66 +911,61 @@ "USB Mass Storage device found at %d\n", dev->devnum); /* save a pointer to our structure */ - usb_set_intfdata(intf, ss); + usb_set_intfdata(intf, us); return 0; /* we come here if there are any problems */ - /* ss->dev_semaphore must be locked */ + /* us->dev_semaphore must be locked */ BadDevice: US_DEBUGP("storage_probe() failed\n"); - usb_stor_deallocate_urbs(ss); - up(&ss->dev_semaphore); - kfree(ss); + usb_stor_deallocate_urbs(us); + up(&us->dev_semaphore); + kfree(us); return -EIO; } /* Handle a disconnect event from the USB core */ static void storage_disconnect(struct usb_interface *intf) { - struct us_data *ss; + struct us_data *us; struct scsi_device *sdev; US_DEBUGP("storage_disconnect() called\n"); - ss = usb_get_intfdata(intf); + us = usb_get_intfdata(intf); usb_set_intfdata(intf, NULL); - /* serious error -- we're attempting to disconnect an interface but - * cannot locate the local data structure - */ - BUG_ON(ss == NULL); - /* set devices offline -- need host lock for this */ - scsi_lock(ss->host); - list_for_each_entry(sdev, &ss->host->my_devices, siblings) + scsi_lock(us->host); + list_for_each_entry(sdev, &us->host->my_devices, siblings) sdev->online = 0; - scsi_unlock(ss->host); + scsi_unlock(us->host); /* lock device access -- no need to unlock, as we're going away */ - down(&(ss->dev_semaphore)); + down(&(us->dev_semaphore)); /* Complete all pending commands with * cmd->result = DID_ERROR << 16. * Since we only queue one command at a time, this is pretty easy. */ - if (ss->srb) { - ss->srb->result = DID_ERROR << 16; - ss->srb->scsi_done(ss->srb); + if (us->srb) { + us->srb->result = DID_ERROR << 16; + us->srb->scsi_done(us->srb); } /* TODO: somehow, wait for the device to * be 'idle' (tasklet completion) */ /* remove the pointer to the data structure we were using */ - (struct us_data*)ss->host->hostdata[0] = NULL; + (struct us_data*)us->host->hostdata[0] = NULL; /* begin SCSI host removal sequence */ - if(scsi_remove_host(ss->host)) { + if(scsi_remove_host(us->host)) { US_DEBUGP("-- SCSI refused to unregister\n"); BUG(); return; }; /* finish SCSI host removal sequence */ - scsi_unregister(ss->host); + scsi_unregister(us->host); /* Kill the control threads * @@ -978,34 +973,34 @@ * notification that it has exited. */ US_DEBUGP("-- sending exit command to thread\n"); - BUG_ON(atomic_read(&ss->sm_state) != US_STATE_IDLE); - ss->srb = NULL; - up(&(ss->sema)); - wait_for_completion(&(ss->notify)); + BUG_ON(atomic_read(&us->sm_state) != US_STATE_IDLE); + us->srb = NULL; + up(&(us->sema)); + wait_for_completion(&(us->notify)); /* free allocated urbs */ - usb_stor_deallocate_urbs(ss); + usb_stor_deallocate_urbs(us); /* If there's extra data in the us_data structure then * free that first */ - if (ss->extra) { + if (us->extra) { /* call the destructor routine, if it exists */ - if (ss->extra_destructor) { + if (us->extra_destructor) { US_DEBUGP("-- calling extra_destructor()\n"); - ss->extra_destructor(ss->extra); + us->extra_destructor(us->extra); } /* destroy the extra data */ US_DEBUGP("-- freeing the data structure\n"); - kfree(ss->extra); + kfree(us->extra); } /* up the semaphore so auto-code-checkers won't complain about * the down/up imbalance */ - up(&(ss->dev_semaphore)); + up(&(us->dev_semaphore)); /* free the structure itself */ - kfree (ss); + kfree (us); } /*********************************************************************** diff -Nru a/fs/afs/kafstimod.c b/fs/afs/kafstimod.c --- a/fs/afs/kafstimod.c Sat Apr 12 14:44:08 2003 +++ b/fs/afs/kafstimod.c Sat Apr 12 14:44:08 2003 @@ -99,18 +99,18 @@ spin_lock(&kafstimod_lock); if (list_empty(&kafstimod_list)) { timeout = MAX_SCHEDULE_TIMEOUT; - } - else { - timer = list_entry(kafstimod_list.next,afs_timer_t,link); - timeout = timer->timo_jif; + } else { + unsigned long tmo; + + timer = list_entry(kafstimod_list.next, + afs_timer_t, link); + tmo = timer->timo_jif; jif = jiffies; - if (time_before_eq(timeout,jif)) + if (time_before_eq(tmo,jif)) goto immediate; - else { - timeout = (long)timeout - (long)jiffies; - } + timeout = (long)tmo - (long)jiffies; } spin_unlock(&kafstimod_lock); diff -Nru a/fs/buffer.c b/fs/buffer.c --- a/fs/buffer.c Sat Apr 12 14:44:08 2003 +++ b/fs/buffer.c Sat Apr 12 14:44:08 2003 @@ -123,7 +123,8 @@ wait_queue_head_t *wqh = bh_waitq_head(bh); DEFINE_WAIT(wait); - if (atomic_read(&bh->b_count) == 0) + if (atomic_read(&bh->b_count) == 0 && + (!bh->b_page || !PageLocked(bh->b_page))) buffer_error(); do { diff -Nru a/fs/dcache.c b/fs/dcache.c --- a/fs/dcache.c Sat Apr 12 14:44:06 2003 +++ b/fs/dcache.c Sat Apr 12 14:44:06 2003 @@ -825,6 +825,7 @@ struct dentry * d_alloc_anon(struct inode *inode) { + static const struct qstr anonstring = { "", 0, 0}; struct dentry *tmp; struct dentry *res; @@ -833,7 +834,7 @@ return res; } - tmp = d_alloc(NULL, &(const struct qstr) {"",0,0}); + tmp = d_alloc(NULL, &anonstring); if (!tmp) return NULL; @@ -1365,7 +1366,7 @@ * return NULL; * } */ -asmlinkage long sys_getcwd(char *buf, unsigned long size) +asmlinkage long sys_getcwd(char __user *buf, unsigned long size) { int error; struct vfsmount *pwdmnt, *rootmnt; diff -Nru a/fs/eventpoll.c b/fs/eventpoll.c --- a/fs/eventpoll.c Sat Apr 12 14:44:07 2003 +++ b/fs/eventpoll.c Sat Apr 12 14:44:07 2003 @@ -1342,6 +1342,13 @@ ep_use_epitem(epi); /* + * We need to increase the usage count of the "struct file" because + * another thread might call close() on this target and make the file + * to vanish before we will be able to call f_op->poll(). + */ + get_file(epi->file); + + /* * This is initialized in this way so that the default * behaviour of the reinjecting code will be to push back * the item inside the ready list. @@ -1386,6 +1393,14 @@ revents = epi->file->f_op->poll(epi->file, NULL); /* + * Release the file usage before checking the event mask. + * In case this call will lead to the file removal, its + * ->event.events member has been already set to zero and + * this will make the event to be dropped. + */ + fput(epi->file); + + /* * Set the return event set for the current file descriptor. * Note that only the task task was successfully able to link * the item to its "txlist" will write this field. @@ -1398,8 +1413,17 @@ eventbuf++; if (eventbuf == EP_MAX_BUF_EVENTS) { if (__copy_to_user(&events[eventcnt], event, - eventbuf * sizeof(struct epoll_event))) + eventbuf * sizeof(struct epoll_event))) { + /* + * We need to complete the loop to decrement the file + * usage before returning from this function. + */ + for (lnk = lnk->next; lnk != txlist; lnk = lnk->next) { + epi = list_entry(lnk, struct epitem, txlink); + fput(epi->file); + } return -EFAULT; + } eventcnt += eventbuf; eventbuf = 0; } diff -Nru a/fs/exec.c b/fs/exec.c --- a/fs/exec.c Sat Apr 12 14:44:07 2003 +++ b/fs/exec.c Sat Apr 12 14:44:07 2003 @@ -111,7 +111,7 @@ * * Also note that we take the address to load from from the file itself. */ -asmlinkage long sys_uselib(const char * library) +asmlinkage long sys_uselib(const char __user * library) { struct file * file; struct nameidata nd; @@ -164,13 +164,13 @@ /* * count() counts the number of strings in array ARGV. */ -static int count(char ** argv, int max) +static int count(char __user * __user * argv, int max) { int i = 0; if (argv != NULL) { for (;;) { - char * p; + char __user * p; if (get_user(p, argv)) return -EFAULT; @@ -189,14 +189,14 @@ * memory to free pages in kernel mem. These are in a format ready * to be put directly into the top of new user memory. */ -int copy_strings(int argc,char ** argv, struct linux_binprm *bprm) +int copy_strings(int argc,char __user * __user * argv, struct linux_binprm *bprm) { struct page *kmapped_page = NULL; char *kaddr = NULL; int ret; while (argc-- > 0) { - char *str; + char __user *str; int len; unsigned long pos; @@ -275,7 +275,7 @@ int r; mm_segment_t oldfs = get_fs(); set_fs(KERNEL_DS); - r = copy_strings(argc, argv, bprm); + r = copy_strings(argc, (char __user * __user *)argv, bprm); set_fs(oldfs); return r; } @@ -1050,7 +1050,10 @@ /* * sys_execve() executes a new program. */ -int do_execve(char * filename, char ** argv, char ** envp, struct pt_regs * regs) +int do_execve(char * filename, + char __user *__user *argv, + char __user *__user *envp, + struct pt_regs * regs) { struct linux_binprm bprm; struct file *file; diff -Nru a/fs/ext2/xattr.c b/fs/ext2/xattr.c --- a/fs/ext2/xattr.c Sat Apr 12 14:44:08 2003 +++ b/fs/ext2/xattr.c Sat Apr 12 14:44:08 2003 @@ -732,7 +732,8 @@ * The old block will be released after updating * the inode. */ - ea_bdebug(new_bh, "reusing block %ld", + ea_bdebug(new_bh, "%s block %ld", + (old_bh == new_bh) ? "keeping" : "reusing", new_bh->b_blocknr); error = -EDQUOT; @@ -746,6 +747,7 @@ } else if (old_bh && header == HDR(old_bh)) { /* Keep this block. */ new_bh = old_bh; + get_bh(new_bh); ext2_xattr_cache_insert(new_bh); } else { /* We need to allocate a new block */ @@ -816,8 +818,7 @@ } cleanup: - if (old_bh != new_bh) - brelse(new_bh); + brelse(new_bh); return error; } diff -Nru a/fs/ext3/xattr.c b/fs/ext3/xattr.c --- a/fs/ext3/xattr.c Sat Apr 12 14:44:08 2003 +++ b/fs/ext3/xattr.c Sat Apr 12 14:44:08 2003 @@ -733,7 +733,8 @@ * The old block will be released after updating * the inode. */ - ea_bdebug(new_bh, "reusing block %ld", + ea_bdebug(new_bh, "%s block %ld", + (old_bh == new_bh) ? "keeping" : "reusing", new_bh->b_blocknr); error = -EDQUOT; @@ -750,6 +751,7 @@ } else if (old_bh && header == HDR(old_bh)) { /* Keep this block. */ new_bh = old_bh; + get_bh(new_bh); ext3_xattr_cache_insert(new_bh); } else { /* We need to allocate a new block */ @@ -827,8 +829,7 @@ } cleanup: - if (old_bh != new_bh) - brelse(new_bh); + brelse(new_bh); return error; } diff -Nru a/fs/filesystems.c b/fs/filesystems.c --- a/fs/filesystems.c Sat Apr 12 14:44:09 2003 +++ b/fs/filesystems.c Sat Apr 12 14:44:09 2003 @@ -61,7 +61,7 @@ /* define fs_subsys */ -static decl_subsys(fs, NULL); +static decl_subsys(fs, NULL, NULL); static int register_fs_subsys(struct file_system_type * fs) { diff -Nru a/fs/fs-writeback.c b/fs/fs-writeback.c --- a/fs/fs-writeback.c Sat Apr 12 14:44:10 2003 +++ b/fs/fs-writeback.c Sat Apr 12 14:44:10 2003 @@ -149,10 +149,10 @@ * read speculatively by this cpu before &= ~I_DIRTY -- mikulas */ - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); if (wait || !wbc->for_kupdate || list_empty(&mapping->io_pages)) list_splice_init(&mapping->dirty_pages, &mapping->io_pages); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); spin_unlock(&inode_lock); do_writepages(mapping, wbc); diff -Nru a/fs/inode.c b/fs/inode.c --- a/fs/inode.c Sat Apr 12 14:44:10 2003 +++ b/fs/inode.c Sat Apr 12 14:44:10 2003 @@ -181,7 +181,7 @@ INIT_LIST_HEAD(&inode->i_devices); sema_init(&inode->i_sem, 1); INIT_RADIX_TREE(&inode->i_data.page_tree, GFP_ATOMIC); - rwlock_init(&inode->i_data.page_lock); + spin_lock_init(&inode->i_data.page_lock); init_MUTEX(&inode->i_data.i_shared_sem); INIT_LIST_HEAD(&inode->i_data.private_list); spin_lock_init(&inode->i_data.private_lock); diff -Nru a/fs/mpage.c b/fs/mpage.c --- a/fs/mpage.c Sat Apr 12 14:44:06 2003 +++ b/fs/mpage.c Sat Apr 12 14:44:06 2003 @@ -627,7 +627,7 @@ writepage = mapping->a_ops->writepage; pagevec_init(&pvec, 0); - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); while (!list_empty(&mapping->io_pages) && !done) { struct page *page = list_entry(mapping->io_pages.prev, struct page, list); @@ -647,7 +647,7 @@ list_add(&page->list, &mapping->locked_pages); page_cache_get(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); /* * At this point we hold neither mapping->page_lock nor @@ -679,12 +679,12 @@ unlock_page(page); } page_cache_release(page); - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); } /* * Leave any remaining dirty pages on ->io_pages */ - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); if (bio) mpage_bio_submit(WRITE, bio); return ret; diff -Nru a/fs/namei.c b/fs/namei.c --- a/fs/namei.c Sat Apr 12 14:44:07 2003 +++ b/fs/namei.c Sat Apr 12 14:44:07 2003 @@ -108,7 +108,7 @@ * POSIX.1 2.4: an empty pathname is invalid (ENOENT). * PATH_MAX includes the nul terminator --RR. */ -static inline int do_getname(const char *filename, char *page) +static inline int do_getname(const char __user *filename, char *page) { int retval; unsigned long len = PATH_MAX; @@ -129,7 +129,7 @@ return retval; } -char * getname(const char * filename) +char * getname(const char __user * filename) { char *tmp, *result; @@ -941,7 +941,7 @@ * that namei follows links, while lnamei does not. * SMP-safe */ -int __user_walk(const char *name, unsigned flags, struct nameidata *nd) +int __user_walk(const char __user *name, unsigned flags, struct nameidata *nd) { char *tmp = getname(name); int err = PTR_ERR(tmp); @@ -1402,7 +1402,7 @@ return error; } -asmlinkage long sys_mknod(const char * filename, int mode, dev_t dev) +asmlinkage long sys_mknod(const char __user * filename, int mode, dev_t dev) { int error = 0; char * tmp; @@ -1471,7 +1471,7 @@ return error; } -asmlinkage long sys_mkdir(const char * pathname, int mode) +asmlinkage long sys_mkdir(const char __user * pathname, int mode) { int error = 0; char * tmp; @@ -1568,7 +1568,7 @@ return error; } -asmlinkage long sys_rmdir(const char * pathname) +asmlinkage long sys_rmdir(const char __user * pathname) { int error = 0; char * name; @@ -1643,7 +1643,7 @@ * writeout happening, and we don't want to prevent access to the directory * while waiting on the I/O. */ -asmlinkage long sys_unlink(const char * pathname) +asmlinkage long sys_unlink(const char __user * pathname) { int error = 0; char * name; @@ -1714,7 +1714,7 @@ return error; } -asmlinkage long sys_symlink(const char * oldname, const char * newname) +asmlinkage long sys_symlink(const char __user * oldname, const char __user * newname) { int error = 0; char * from; @@ -1796,7 +1796,7 @@ * with linux 2.0, and to avoid hard-linking to directories * and other special files. --ADM */ -asmlinkage long sys_link(const char * oldname, const char * newname) +asmlinkage long sys_link(const char __user * oldname, const char __user * newname) { struct dentry *new_dentry; struct nameidata nd, old_nd; @@ -2057,7 +2057,7 @@ return error; } -asmlinkage long sys_rename(const char * oldname, const char * newname) +asmlinkage long sys_rename(const char __user * oldname, const char __user * newname) { int error; char * from; @@ -2076,7 +2076,7 @@ return error; } -int vfs_readlink(struct dentry *dentry, char *buffer, int buflen, const char *link) +int vfs_readlink(struct dentry *dentry, char __user *buffer, int buflen, const char *link) { int len; @@ -2157,7 +2157,7 @@ return (char*)page; } -int page_readlink(struct dentry *dentry, char *buffer, int buflen) +int page_readlink(struct dentry *dentry, char __user *buffer, int buflen) { struct page *page = NULL; char *s = page_getlink(dentry, &page); diff -Nru a/fs/nfs/Makefile b/fs/nfs/Makefile --- a/fs/nfs/Makefile Sat Apr 12 14:44:06 2003 +++ b/fs/nfs/Makefile Sat Apr 12 14:44:06 2003 @@ -8,6 +8,7 @@ proc.o read.o symlink.o unlink.o write.o nfs-$(CONFIG_ROOT_NFS) += nfsroot.o mount_clnt.o nfs-$(CONFIG_NFS_V3) += nfs3proc.o nfs3xdr.o -nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o +nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \ + idmap.o nfs-$(CONFIG_NFS_DIRECTIO) += direct.o nfs-objs := $(nfs-y) diff -Nru a/fs/nfs/dir.c b/fs/nfs/dir.c --- a/fs/nfs/dir.c Sat Apr 12 14:44:08 2003 +++ b/fs/nfs/dir.c Sat Apr 12 14:44:08 2003 @@ -35,6 +35,7 @@ #define NFS_PARANOIA 1 /* #define NFS_DEBUG_VERBOSE 1 */ +static int nfs_opendir(struct inode *, struct file *); static int nfs_readdir(struct file *, void *, filldir_t); static struct dentry *nfs_lookup(struct inode *, struct dentry *); static int nfs_cached_lookup(struct inode *, struct dentry *, @@ -52,7 +53,7 @@ struct file_operations nfs_dir_operations = { .read = generic_read_dir, .readdir = nfs_readdir, - .open = nfs_open, + .open = nfs_opendir, .release = nfs_release, }; @@ -71,6 +72,26 @@ .setattr = nfs_setattr, }; +/* + * Open file + */ +static int +nfs_opendir(struct inode *inode, struct file *filp) +{ + struct nfs_server *server = NFS_SERVER(inode); + int res = 0; + + lock_kernel(); + /* Do cto revalidation */ + if (server->flags & NFS_MOUNT_NOCTO) + res = __nfs_revalidate_inode(server, inode); + /* Call generic open code in order to cache credentials */ + if (!res) + res = nfs_open(inode, filp); + unlock_kernel(); + return res; +} + typedef u32 * (*decode_dirent_t)(u32 *, struct nfs_entry *, int); typedef struct { struct file *file; @@ -715,9 +736,10 @@ res = -EIO; if (PageUptodate(page)) { - desc.ptr = kmap_atomic(page, KM_USER0); + void * kaddr = kmap_atomic(page, KM_USER0); + desc.ptr = kaddr; res = find_dirent_name(&desc, page, dentry); - kunmap_atomic(desc.ptr, KM_USER0); + kunmap_atomic(kaddr, KM_USER0); } page_cache_release(page); diff -Nru a/fs/nfs/file.c b/fs/nfs/file.c --- a/fs/nfs/file.c Sat Apr 12 14:44:08 2003 +++ b/fs/nfs/file.c Sat Apr 12 14:44:08 2003 @@ -34,6 +34,7 @@ #define NFSDBG_FACILITY NFSDBG_FILE +static int nfs_file_open(struct inode *, struct file *); static int nfs_file_mmap(struct file *, struct vm_area_struct *); static ssize_t nfs_file_sendfile(struct file *, loff_t *, size_t, read_actor_t, void *); static ssize_t nfs_file_read(struct kiocb *, char *, size_t, loff_t); @@ -48,7 +49,7 @@ .aio_read = nfs_file_read, .aio_write = nfs_file_write, .mmap = nfs_file_mmap, - .open = nfs_open, + .open = nfs_file_open, .flush = nfs_file_flush, .release = nfs_release, .fsync = nfs_fsync, @@ -66,6 +67,30 @@ #ifndef IS_SWAPFILE # define IS_SWAPFILE(inode) (0) #endif + +/* + * Open file + */ +static int +nfs_file_open(struct inode *inode, struct file *filp) +{ + struct nfs_server *server = NFS_SERVER(inode); + int (*open)(struct inode *, struct file *); + int res = 0; + + lock_kernel(); + /* Do NFSv4 open() call */ + if ((open = server->rpc_ops->file_open) != NULL) + res = open(inode, filp); + /* Do cto revalidation */ + else if (server->flags & NFS_MOUNT_NOCTO) + res = __nfs_revalidate_inode(server, inode); + /* Call generic open code in order to cache credentials */ + if (!res) + res = nfs_open(inode, filp); + unlock_kernel(); + return res; +} /* * Flush all dirty pages, and check for write errors. diff -Nru a/fs/nfs/idmap.c b/fs/nfs/idmap.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/fs/nfs/idmap.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,474 @@ +/* + * fs/nfs/idmap.c + * + * UID and GID to name mapping for clients. + * + * Copyright (c) 2002 The Regents of the University of Michigan. + * All rights reserved. + * + * Marius Aamodt Eriksen + * + * 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. Neither the name of the University nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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 +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#define IDMAP_HASH_SZ 128 +#define IDMAP_HASH_TYPE_NAME 0x01 +#define IDMAP_HASH_TYPE_ID 0x02 +#define IDMAP_HASH_TYPE_INSERT 0x04 + +struct idmap_hashent { + uid_t ih_id; + char ih_name[IDMAP_NAMESZ]; + u_int32_t ih_namelen; +}; + +struct idmap { + char idmap_path[48]; + struct dentry *idmap_dentry; + wait_queue_head_t idmap_wq; + struct idmap_msg idmap_im; + struct nfs_server *idmap_server; + struct semaphore idmap_lock; + struct semaphore idmap_im_lock; + struct semaphore idmap_hash_lock; + struct idmap_hashent idmap_id_hash[IDMAP_HASH_SZ]; + struct idmap_hashent idmap_name_hash[IDMAP_HASH_SZ]; +}; + +static ssize_t idmap_pipe_upcall(struct file *, struct rpc_pipe_msg *, char *, + size_t); +static ssize_t idmap_pipe_downcall(struct file *, const char *, size_t); +void idmap_pipe_destroy_msg(struct rpc_pipe_msg *); + +static int validate_ascii(char *, u_int32_t); + +static u_int32_t fnvhash32(void *, u_int32_t); +static int idmap_cache_lookup(struct idmap *, int, char *, u_int32_t *, uid_t *); + +static struct rpc_pipe_ops idmap_upcall_ops = { + .upcall = idmap_pipe_upcall, + .downcall = idmap_pipe_downcall, + .destroy_msg = idmap_pipe_destroy_msg, +}; + +void * +nfs_idmap_new(struct nfs_server *server) +{ + struct idmap *idmap; + + if ((idmap = kmalloc(sizeof(*idmap), GFP_KERNEL)) == NULL) + return (NULL); + + memset(idmap, 0, sizeof(*idmap)); + + idmap->idmap_server = server; + + snprintf(idmap->idmap_path, sizeof(idmap->idmap_path), + "%s/idmap", idmap->idmap_server->client->cl_pathname); + + idmap->idmap_dentry = rpc_mkpipe(idmap->idmap_path, + idmap->idmap_server, &idmap_upcall_ops); + if (IS_ERR(idmap->idmap_dentry)) + goto err_free; + + init_MUTEX(&idmap->idmap_lock); + init_MUTEX(&idmap->idmap_im_lock); + init_MUTEX(&idmap->idmap_hash_lock); + + return (idmap); + + err_free: + kfree(idmap); + return (NULL); +} + +void +nfs_idmap_delete(struct nfs_server *server) +{ + struct idmap *idmap = server->idmap; + + rpc_unlink(idmap->idmap_path); + kfree(idmap); +} + +/* + * Name -> ID + */ +int +nfs_idmap_id(struct nfs_server *server, u_int8_t type, char *name, + u_int namelen, uid_t *id) +{ + struct rpc_pipe_msg msg; + struct idmap *idmap = server->idmap; + struct idmap_msg *im; + DECLARE_WAITQUEUE(wq, current); + int ret = -1, hashtype = IDMAP_HASH_TYPE_NAME, xnamelen = namelen; + + if (idmap == NULL) + return (-1); + + im = &idmap->idmap_im; + + if (namelen > IDMAP_NAMESZ || namelen == 0) + return (-1); + + down(&idmap->idmap_lock); + down(&idmap->idmap_im_lock); + + if (name[xnamelen - 1] == '\0') + xnamelen--; + + if (idmap_cache_lookup(idmap, hashtype, name, &xnamelen, id) == 0) { + ret = 0; + goto out; + } + + memset(im, 0, sizeof(*im)); + memcpy(im->im_name, name, namelen); + /* Make sure the string is NULL terminated */ + if (namelen != xnamelen) { + /* We cannot fit a NULL character */ + if (namelen == IDMAP_NAMESZ) { + ret = -1; + goto out; + } + im->im_name[namelen] = '\0'; + } + + im->im_type = type; + im->im_conv = IDMAP_CONV_NAMETOID; + + memset(&msg, 0, sizeof(msg)); + msg.data = im; + msg.len = sizeof(*im); + + init_waitqueue_head(&idmap->idmap_wq); + add_wait_queue(&idmap->idmap_wq, &wq); + set_current_state(TASK_UNINTERRUPTIBLE); + + if (rpc_queue_upcall(idmap->idmap_dentry->d_inode, &msg) < 0) { + set_current_state(TASK_RUNNING); + goto out; + } + + up(&idmap->idmap_im_lock); + schedule(); + down(&idmap->idmap_im_lock); + + /* + * XXX Race condition here, with testing for status. Go ahead + * and and do the cace lookup anyway. + */ + if (im->im_status & IDMAP_STATUS_SUCCESS) { + ret = 0; + *id = im->im_id; + + hashtype |= IDMAP_HASH_TYPE_INSERT; + ret = idmap_cache_lookup(idmap, hashtype, name, &xnamelen, id); + } + + out: + memset(im, 0, sizeof(*im)); + up(&idmap->idmap_im_lock); + up(&idmap->idmap_lock); + return (ret); +} + +/* + * ID -> Name + */ +int +nfs_idmap_name(struct nfs_server *server, u_int8_t type, uid_t id, + char *name, u_int *namelen) +{ + struct rpc_pipe_msg msg; + struct idmap *idmap = server->idmap; + struct idmap_msg *im; + DECLARE_WAITQUEUE(wq, current); + int ret = -1, hashtype = IDMAP_HASH_TYPE_ID; + u_int len; + + if (idmap == NULL) + return (-1); + + im = &idmap->idmap_im; + + if (*namelen < IDMAP_NAMESZ || *namelen == 0) + return (-1); + + down(&idmap->idmap_lock); + down(&idmap->idmap_im_lock); + + if (idmap_cache_lookup(idmap, hashtype, name, namelen, &id) == 0) { + ret = 0; + goto out; + } + + memset(im, 0, sizeof(*im)); + im->im_type = type; + im->im_conv = IDMAP_CONV_IDTONAME; + im->im_id = id; + + memset(&msg, 0, sizeof(msg)); + msg.data = im; + msg.len = sizeof(*im); + + init_waitqueue_head(&idmap->idmap_wq); + add_wait_queue(&idmap->idmap_wq, &wq); + set_current_state(TASK_UNINTERRUPTIBLE); + + if (rpc_queue_upcall(idmap->idmap_dentry->d_inode, &msg) < 0) { + set_current_state(TASK_RUNNING); + goto out; + } + + /* + * XXX add timeouts here + */ + up(&idmap->idmap_im_lock); + schedule(); + down(&idmap->idmap_im_lock); + + if (im->im_status & IDMAP_STATUS_SUCCESS) { + if ((len = validate_ascii(im->im_name, IDMAP_NAMESZ)) == -1) + goto out; + ret = 0; + memcpy(name, im->im_name, len); + *namelen = len; + + hashtype |= IDMAP_HASH_TYPE_INSERT; + ret = idmap_cache_lookup(idmap, hashtype, name, namelen, &id); + } + + out: + memset(im, 0, sizeof(*im)); + up(&idmap->idmap_im_lock); + up(&idmap->idmap_lock); + return (ret); +} + +static ssize_t +idmap_pipe_upcall(struct file *filp, struct rpc_pipe_msg *msg, + char *dst, size_t buflen) +{ + char *data = (char *)msg->data + msg->copied; + ssize_t mlen = msg->len - msg->copied; + ssize_t left; + + if (mlen > buflen) + mlen = buflen; + + left = copy_to_user(dst, data, mlen); + + return (mlen - left); +} + +static ssize_t +idmap_pipe_downcall(struct file *filp, const char *src, size_t mlen) +{ + struct rpc_inode *rpci = RPC_I(filp->f_dentry->d_inode); + struct nfs_server *server = rpci->private; + struct idmap *idmap = server->idmap; + struct idmap_msg im_in, *im = &idmap->idmap_im; + int match = 0, hashtype, badmsg = 0, namelen_in, namelen; + + if (mlen != sizeof(im_in)) + return (-ENOSPC); + + if (copy_from_user(&im_in, src, mlen) != 0) + return (-EFAULT); + + down(&idmap->idmap_im_lock); + + namelen_in = validate_ascii(im_in.im_name, IDMAP_NAMESZ); + namelen = validate_ascii(im->im_name, IDMAP_NAMESZ); + + badmsg = !(im_in.im_status & IDMAP_STATUS_SUCCESS) || namelen_in <= 0; + + switch (im_in.im_conv) { + case IDMAP_CONV_IDTONAME: + match = im->im_id == im_in.im_id; + break; + case IDMAP_CONV_NAMETOID: + match = namelen == namelen_in && + memcmp(im->im_name, im_in.im_name, namelen) == 0; + break; + default: + badmsg = 1; + break; + } + + match = match && im->im_type == im_in.im_type; + + if (match) { + memcpy(im, &im_in, sizeof(*im)); + wake_up(&idmap->idmap_wq); + __rpc_purge_current_upcall(filp); + } else if (!badmsg) { + hashtype = im_in.im_conv == IDMAP_CONV_IDTONAME ? + IDMAP_HASH_TYPE_ID : IDMAP_HASH_TYPE_NAME; + hashtype |= IDMAP_HASH_TYPE_INSERT; + idmap_cache_lookup(idmap, hashtype, im_in.im_name, &namelen_in, + &im_in.im_id); + } + + up(&idmap->idmap_im_lock); + return (mlen); +} + +void +idmap_pipe_destroy_msg(struct rpc_pipe_msg *msg) +{ + struct idmap_msg *im = msg->data; + struct idmap *idmap = container_of(im, struct idmap, idmap_im); + + down(&idmap->idmap_im_lock); + im->im_status = IDMAP_STATUS_LOOKUPFAIL; + wake_up(&idmap->idmap_wq); + up(&idmap->idmap_im_lock); +} + +static int +validate_ascii(char *string, u_int32_t len) +{ + int i; + + for (i = 0; i < len; i++) { + if (string[i] == '\0') + break; + + if (string[i] & 0x80) + return (-1); + } + + if (string[i] != '\0') + return (-1); + + return (i); +} + +/* + * Fowler/Noll/Vo hash + * http://www.isthe.com/chongo/tech/comp/fnv/ + */ + +#define FNV_P_32 ((u_int32_t)0x01000193) /* 16777619 */ +#define FNV_1_32 ((u_int32_t)0x811c9dc5) /* 2166136261 */ + +static u_int32_t +fnvhash32(void *buf, u_int32_t buflen) +{ + u_char *p, *end = (u_char *)buf + buflen; + u_int32_t hash = FNV_1_32; + + for (p = buf; p < end; p++) { + hash *= FNV_P_32; + hash ^= (u_int32_t)*p; + } + + return (hash); +} + +/* + * ->ih_namelen == 0 indicates negative entry + */ +static int +idmap_cache_lookup(struct idmap *idmap, int type, char *name, u_int32_t *namelen, + uid_t *id) +{ + u_int32_t hash; + struct idmap_hashent *he = NULL; + int insert = type & IDMAP_HASH_TYPE_INSERT; + int ret = -1; + + /* + * XXX technically, this is not needed, since we will always + * hold idmap_im_lock when altering the hash tables. but + * semantically that just hurts. + * + * XXX cache negative responses + */ + down(&idmap->idmap_hash_lock); + + if (*namelen > IDMAP_NAMESZ || *namelen == 0) + goto out; + + if (type & IDMAP_HASH_TYPE_NAME) { + hash = fnvhash32(name, *namelen) % IDMAP_HASH_SZ; + he = &idmap->idmap_name_hash[hash]; + + /* + * Testing he->ih_namelen == *namelen implicitly tests + * namelen != 0, and thus a non-negative entry. + */ + if (!insert && he->ih_namelen == *namelen && + memcmp(he->ih_name, name, *namelen) == 0) { + *id = he->ih_id; + ret = 0; + goto out; + } + } + + if (type & IDMAP_HASH_TYPE_ID) { + hash = fnvhash32(id, sizeof(*id)) % IDMAP_HASH_SZ; + he = &idmap->idmap_id_hash[hash]; + + if (!insert && *id == he->ih_id && he->ih_namelen != 0 && + *namelen >= he->ih_namelen) { + memcpy(name, he->ih_name, he->ih_namelen); + *namelen = he->ih_namelen; + ret = 0; + goto out; + } + } + + if (insert && he != NULL) { + he->ih_id = *id; + memcpy(he->ih_name, name, *namelen); + he->ih_namelen = *namelen; + ret = 0; + } + + out: + up(&idmap->idmap_hash_lock); + return (ret); +} diff -Nru a/fs/nfs/inode.c b/fs/nfs/inode.c --- a/fs/nfs/inode.c Sat Apr 12 14:44:09 2003 +++ b/fs/nfs/inode.c Sat Apr 12 14:44:09 2003 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -140,6 +141,10 @@ cred = nfsi->cache_access.cred; if (cred) put_rpccred(cred); + /* Clean up the V4 state */ + nfs4_put_shareowner(inode, nfsi->wo_owner); + nfs4_put_shareowner(inode, nfsi->ro_owner); + nfs4_put_shareowner(inode, nfsi->rw_owner); } void @@ -148,6 +153,11 @@ struct nfs_server *server = NFS_SB(sb); struct rpc_clnt *rpc; +#ifdef CONFIG_NFS_V4 + if (server->idmap != NULL) + nfs_idmap_delete(server); +#endif /* CONFIG_NFS_V4 */ + if ((rpc = server->client) != NULL) rpc_shutdown_client(rpc); @@ -156,6 +166,7 @@ rpciod_down(); /* release rpciod */ destroy_nfsv4_state(server); + kfree(server->hostname); } @@ -855,23 +866,13 @@ { struct rpc_auth *auth; struct rpc_cred *cred; - int err = 0; - lock_kernel(); - /* Ensure that we revalidate the data cache */ - if (NFS_SERVER(inode)->flags & NFS_MOUNT_NOCTO) { - err = __nfs_revalidate_inode(NFS_SERVER(inode),inode); - if (err) - goto out; - } auth = NFS_CLIENT(inode)->cl_auth; cred = rpcauth_lookupcred(auth, 0); filp->private_data = cred; if (filp->f_mode & FMODE_WRITE) nfs_set_mmcred(inode, cred); -out: - unlock_kernel(); - return err; + return 0; } int nfs_release(struct inode *inode, struct file *filp) @@ -1368,11 +1369,16 @@ if (create_nfsv4_state(server, data)) goto out_shutdown; + if ((server->idmap = nfs_idmap_new(server)) == NULL) + printk(KERN_WARNING "NFS: couldn't start IDmap\n"); + err = nfs_sb_init(sb); if (err == 0) return 0; rpciod_down(); destroy_nfsv4_state(server); + if (server->idmap != NULL) + nfs_idmap_delete(server); out_shutdown: rpc_shutdown_client(server->client); out_fail: @@ -1502,9 +1508,18 @@ .kill_sb = nfs_kill_super, .fs_flags = FS_ODD_RENAME, }; + +#define nfs4_zero_state(nfsi) \ + do { \ + (nfsi)->wo_owner = NULL; \ + (nfsi)->ro_owner = NULL; \ + (nfsi)->rw_owner = NULL; \ + } while(0) #define register_nfs4fs() register_filesystem(&nfs4_fs_type) #define unregister_nfs4fs() unregister_filesystem(&nfs4_fs_type) #else +#define nfs4_zero_state(nfsi) \ + do { } while (0) #define register_nfs4fs() (0) #define unregister_nfs4fs() #endif @@ -1526,6 +1541,7 @@ return NULL; nfsi->flags = 0; nfsi->mm_cred = NULL; + nfs4_zero_state(nfsi); return &nfsi->vfs_inode; } diff -Nru a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c --- a/fs/nfs/nfs4proc.c Sat Apr 12 14:44:09 2003 +++ b/fs/nfs/nfs4proc.c Sat Apr 12 14:44:09 2003 @@ -55,7 +55,8 @@ extern struct rpc_procinfo nfs4_procedures[]; static nfs4_stateid zero_stateid = - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + static spinlock_t renew_lock = SPIN_LOCK_UNLOCKED; static void @@ -81,19 +82,6 @@ } static void -nfs4_setup_close(struct nfs4_compound *cp, nfs4_stateid stateid, u32 seqid) -{ - struct nfs4_close *close = GET_OP(cp, close); - - close->cl_stateid = stateid; - close->cl_seqid = seqid; - - OPNUM(cp) = OP_CLOSE; - cp->req_nops++; - cp->renew_index = cp->req_nops; -} - -static void nfs4_setup_create_dir(struct nfs4_compound *cp, struct qstr *name, struct iattr *sattr, struct nfs4_change_info *info) { @@ -347,48 +335,6 @@ } static void -nfs4_setup_open(struct nfs4_compound *cp, int flags, struct qstr *name, - struct iattr *sattr, char *stateid, struct nfs4_change_info *cinfo, - u32 *rflags) -{ - struct nfs4_open *open = GET_OP(cp, open); - - BUG_ON(cp->flags); - - open->op_client_state = cp->server->nfs4_state; - open->op_share_access = flags & 3; - open->op_opentype = (flags & O_CREAT) ? NFS4_OPEN_CREATE : NFS4_OPEN_NOCREATE; - open->op_createmode = NFS4_CREATE_UNCHECKED; - open->op_attrs = sattr; - if (flags & O_EXCL) { - u32 *p = (u32 *) open->op_verifier; - p[0] = jiffies; - p[1] = current->pid; - open->op_createmode = NFS4_CREATE_EXCLUSIVE; - } - open->op_name = name; - open->op_stateid = stateid; - open->op_cinfo = cinfo; - open->op_rflags = rflags; - - OPNUM(cp) = OP_OPEN; - cp->req_nops++; - cp->renew_index = cp->req_nops; -} - -static void -nfs4_setup_open_confirm(struct nfs4_compound *cp, char *stateid) -{ - struct nfs4_open_confirm *open_confirm = GET_OP(cp, open_confirm); - - open_confirm->oc_stateid = stateid; - - OPNUM(cp) = OP_OPEN_CONFIRM; - cp->req_nops++; - cp->renew_index = cp->req_nops; -} - -static void nfs4_setup_readdir(struct nfs4_compound *cp, u64 cookie, u32 *verifier, struct page **pages, unsigned int bufsize, struct dentry *dentry) { @@ -517,18 +463,6 @@ } static void -nfs4_setup_setattr(struct nfs4_compound *cp, char *stateid, struct iattr *iap) -{ - struct nfs4_setattr *setattr = GET_OP(cp, setattr); - - setattr->st_stateid = stateid; - setattr->st_iap = iap; - - OPNUM(cp) = OP_SETATTR; - cp->req_nops++; -} - -static void nfs4_setup_setclientid(struct nfs4_compound *cp, u32 program, unsigned short port) { struct nfs4_setclientid *setclientid = GET_OP(cp, setclientid); @@ -626,72 +560,193 @@ } } -static int -do_open(struct inode *dir, struct qstr *name, int flags, struct iattr *sattr, - struct nfs_fattr *fattr, struct nfs_fh *fhandle, u32 *seqid, char *stateid) -{ - struct nfs4_compound compound; - struct nfs4_op ops[7]; - struct nfs4_change_info dir_cinfo; - struct nfs_fattr dir_attr; - u32 dir_bmres[2]; - u32 bmres[2]; - u32 rflags; - int status; - - dir_attr.valid = 0; - fattr->valid = 0; - nfs4_setup_compound(&compound, ops, NFS_SERVER(dir), "open"); - nfs4_setup_putfh(&compound, NFS_FH(dir)); - nfs4_setup_savefh(&compound); - nfs4_setup_open(&compound, flags, name, sattr, stateid, &dir_cinfo, &rflags); - nfs4_setup_getattr(&compound, fattr, bmres); - nfs4_setup_getfh(&compound, fhandle); - nfs4_setup_restorefh(&compound); - nfs4_setup_getattr(&compound, &dir_attr, dir_bmres); - if ((status = nfs4_call_compound(&compound, NULL, 0))) - return status; +int +nfs4_do_open(struct inode *dir, struct qstr *name, int flags, + struct iattr *sattr, struct nfs_fattr *fattr, + struct nfs_fh *fhandle, struct nfs4_shareowner **spp) +{ + struct nfs4_shareowner *sp; + struct nfs_server *server = NFS_SERVER(dir); + struct nfs4_change_info d_cinfo; + int status; + u32 f_bmres[2]; + u32 d_bmres[2]; + struct nfs_fattr d_attr = { + .valid 0, + }; + struct nfs_fattr f_attr = { + .valid 0, + }; + struct nfs4_getattr f_getattr = { + .gt_bmval = nfs4_fattr_bitmap, + .gt_attrs = (fattr == NULL ? &f_attr: fattr), + .gt_bmres = f_bmres, + }; + struct nfs4_getattr d_getattr = { + .gt_bmval = nfs4_fattr_bitmap, + .gt_attrs = &d_attr, + .gt_bmres = d_bmres, + }; + struct nfs_openargs o_arg = { + .fh = NFS_FH(dir), + .share_access = flags & O_ACCMODE, + .clientid = NFS_SERVER(dir)->nfs4_state->cl_clientid, + .opentype = (flags & O_CREAT) ? NFS4_OPEN_CREATE : NFS4_OPEN_NOCREATE, + .createmode = (flags & O_EXCL) ? NFS4_CREATE_EXCLUSIVE : NFS4_CREATE_UNCHECKED, + .name = name, + .f_getattr = &f_getattr, + .d_getattr = &d_getattr, + .server = server, + }; + struct nfs_openres o_res = { + .cinfo = &d_cinfo, + .f_getattr = &f_getattr, + .d_getattr = &d_getattr, + .server = server, + }; + struct rpc_message msg = { + .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN], + .rpc_argp = &o_arg, + .rpc_resp = &o_res, + }; - process_cinfo(&dir_cinfo, &dir_attr); - nfs_refresh_inode(dir, &dir_attr); - if (!(rflags & NFS4_OPEN_RESULT_CONFIRM)) { - *seqid = 1; - return 0; + status = -ENOMEM; + if (!(sp = nfs4_get_shareowner(dir))) { + dprintk("nfs4_do_open: nfs4_get_shareowner failed!\n"); + goto out; + } + if (o_arg.createmode & NFS4_CREATE_EXCLUSIVE){ + u32 *p = (u32 *) o_arg.u.verifier; + p[0] = jiffies; + p[1] = current->pid; + } else if (o_arg.createmode == NFS4_CREATE_UNCHECKED) { + o_arg.u.attrs = sattr; + } + /* Serialization for the sequence id */ + down(&sp->so_sema); + o_arg.seqid = sp->so_seqid; + o_arg.id = sp->so_id; + + status = rpc_call_sync(server->client, &msg, 0); + if (status) { + goto out_up; + } + nfs4_increment_seqid(status, sp); + process_cinfo(&d_cinfo, &d_attr); + nfs_refresh_inode(dir, &d_attr); + + if (fhandle) { + memset(fhandle, 0, sizeof(*fhandle)); + fhandle->size = (o_res.fh.size < NFS_MAXFHSIZE ? o_res.fh.size : NFS_MAXFHSIZE); + memcpy(fhandle->data, o_res.fh.data, fhandle->size); } - *seqid = 2; - nfs4_setup_compound(&compound, ops, NFS_SERVER(dir), "open_confirm"); - nfs4_setup_putfh(&compound, fhandle); - nfs4_setup_open_confirm(&compound, stateid); - return nfs4_call_compound(&compound, NULL, 0); -} + if(o_res.rflags & NFS4_OPEN_RESULT_CONFIRM) { + struct nfs_open_confirmargs oc_arg = { + .fh = &o_res.fh, + .seqid = sp->so_seqid, + }; + struct nfs_open_confirmres oc_res = { + .status = 0, + }; + struct rpc_message msg = { + .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_CONFIRM], + .rpc_argp = &oc_arg, + .rpc_resp = &oc_res, + }; -static int -do_setattr(struct nfs_server *server, struct nfs_fattr *fattr, - struct nfs_fh *fhandle, struct iattr *sattr, char *stateid) -{ - struct nfs4_compound compound; - struct nfs4_op ops[3]; - u32 bmres[2]; + memcpy(oc_arg.stateid, o_res.stateid, sizeof(nfs4_stateid)); + status = rpc_call_sync(server->client, &msg, 0); + if (status) + goto out_up; + nfs4_increment_seqid(status, sp); + memcpy(sp->so_stateid, oc_res.stateid, sizeof(nfs4_stateid)); + } else + memcpy(sp->so_stateid, o_res.stateid, sizeof(nfs4_stateid)); + sp->so_flags = flags & O_ACCMODE; - fattr->valid = 0; - nfs4_setup_compound(&compound, ops, server, "setattr"); - nfs4_setup_putfh(&compound, fhandle); - nfs4_setup_setattr(&compound, stateid, sattr); - nfs4_setup_getattr(&compound, fattr, bmres); - return nfs4_call_compound(&compound, NULL, 0); +out_up: + up(&sp->so_sema); +out: + *spp = sp; + return status; } -static int -do_close(struct nfs_server *server, struct nfs_fh *fhandle, u32 seqid, char *stateid) +int +nfs4_do_setattr(struct nfs_server *server, struct nfs_fattr *fattr, + struct nfs_fh *fhandle, struct iattr *sattr, + struct nfs4_shareowner *sp) +{ + u32 g_bmres[2]; + struct nfs4_getattr getattr = { + .gt_bmval = nfs4_fattr_bitmap, + .gt_attrs = fattr, + .gt_bmres = g_bmres, + }; + struct nfs_setattrargs arg = { + .fh = fhandle, + .iap = sattr, + .attr = &getattr, + .server = server, + }; + struct nfs_setattrres res = { + .attr = &getattr, + .server = server, + }; + struct rpc_message msg = { + .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SETATTR], + .rpc_argp = &arg, + .rpc_resp = &res, + }; + + fattr->valid = 0; + + if (sp) + memcpy(arg.stateid, sp->so_stateid, sizeof(nfs4_stateid)); + else + memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid)); + + return(rpc_call_sync(server->client, &msg, 0)); +} + +/* + * It is possible for data to be read/written from a mem-mapped file + * after the sys_close call (which hits the vfs layer as a flush). + * This means that we can't safely call nfsv4 close on a file until + * the inode is cleared. This in turn means that we are not good + * NFSv4 citizens - we do not indicate to the server to update the file's + * share state even when we are done with one of the three share + * stateid's in the inode. + */ +int +nfs4_do_close(struct inode *inode, struct nfs4_shareowner *sp) { - struct nfs4_compound compound; - struct nfs4_op ops[2]; - - nfs4_setup_compound(&compound, ops, server, "close"); - nfs4_setup_putfh(&compound, fhandle); - nfs4_setup_close(&compound, stateid, seqid); - return nfs4_call_compound(&compound, NULL, 0); + int status = 0; + struct nfs_closeargs arg = { + .fh = NFS_FH(inode), + }; + struct nfs_closeres res = { + .status = 0, + }; + struct rpc_message msg = { + .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE], + .rpc_argp = &arg, + .rpc_resp = &res, + }; + + memcpy(arg.stateid, sp->so_stateid, sizeof(nfs4_stateid)); + /* Serialization for the sequence id */ + down(&sp->so_sema); + arg.seqid = sp->so_seqid, + status = rpc_call_sync(NFS_SERVER(inode)->client, &msg, 0); + + /* hmm. we are done with the inode, and in the process of freeing + * the shareowner. we keep this around to process errors + */ + nfs4_increment_seqid(status, sp); + up(&sp->so_sema); + + return status; } static int @@ -792,47 +847,54 @@ return nfs4_call_compound(&compound, NULL, 0); } +/* + * The file is not closed if it is opened due to the a request to change + * the size of the file. The open call will not be needed once the + * VFS layer lookup-intents are implemented. + * + * Close is called when the inode is destroyed. + * If we haven't opened the file for O_WRONLY, we + * need to in the size_change case to obtain a stateid. + * + * Got race? + * Because OPEN is always done by name in nfsv4, it is + * possible that we opened a different file by the same + * name. We can recognize this race condition, but we + * can't do anything about it besides returning an error. + * + * This will be fixed with VFS changes (lookup-intent). + */ static int nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, struct iattr *sattr) { struct inode * inode = dentry->d_inode; int size_change = sattr->ia_valid & ATTR_SIZE; - struct nfs_fh throwaway_fh; - u32 seqid; - nfs4_stateid stateid; + struct nfs4_shareowner *sp = NULL; int status; fattr->valid = 0; if (size_change) { - status = do_open(dentry->d_parent->d_inode, &dentry->d_name, - NFS4_SHARE_ACCESS_WRITE, NULL, fattr, - &throwaway_fh, &seqid, stateid); + if (NFS_I(inode)->wo_owner) { + /* file is already open for O_WRONLY */ + sp = NFS_I(inode)->wo_owner; + goto no_open; + } + status = nfs4_do_open(dentry->d_parent->d_inode, + &dentry->d_name, O_WRONLY, NULL, fattr, + NULL, &sp); if (status) return status; - /* - * Because OPEN is always done by name in nfsv4, it is - * possible that we opened a different file by the same - * name. We can recognize this race condition, but we - * can't do anything about it besides returning an error. - * - * XXX: Should we compare filehandles too, as in - * nfs_find_actor()? - */ if (fattr->fileid != NFS_FILEID(inode)) { printk(KERN_WARNING "nfs: raced in setattr, returning -EIO\n"); - do_close(NFS_SERVER(inode), NFS_FH(inode), seqid, stateid); return -EIO; } } - else - memcpy(stateid, zero_stateid, sizeof(nfs4_stateid)); - - status = do_setattr(NFS_SERVER(inode), fattr, NFS_FH(inode), sattr, stateid); - if (size_change) - do_close(NFS_SERVER(inode), NFS_FH(inode), seqid, stateid); +no_open: + status = nfs4_do_setattr(NFS_SERVER(inode), fattr, + NFS_FH(inode), sattr, sp); return status; } @@ -956,6 +1018,7 @@ struct page *page, int *eofp) { struct nfs_server *server = NFS_SERVER(inode); + struct nfs4_shareowner *sp; uint64_t offset = page_offset(page) + base; struct nfs_readargs arg = { .fh = NFS_FH(inode), @@ -978,6 +1041,17 @@ int status; dprintk("NFS call read %d @ %Ld\n", count, (long long)offset); + /* + * Try first to use O_RDONLY, then O_RDWR stateid. + */ + sp = nfs4_get_inode_share(inode, O_RDONLY); + if (!sp) + sp = nfs4_get_inode_share(inode, O_RDWR); + if (sp) + memcpy(arg.stateid,sp->so_stateid, sizeof(nfs4_stateid)); + else + memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid)); + fattr->valid = 0; status = rpc_call_sync(server->client, &msg, flags); if (!status) { @@ -998,6 +1072,7 @@ struct page *page, struct nfs_writeverf *verf) { struct nfs_server *server = NFS_SERVER(inode); + struct nfs4_shareowner *sp; uint64_t offset = page_offset(page) + base; struct nfs_writeargs arg = { .fh = NFS_FH(inode), @@ -1021,25 +1096,54 @@ int rpcflags = (flags & NFS_RW_SWAP) ? NFS_RPC_SWAPFLAGS : 0; dprintk("NFS call write %d @ %Ld\n", count, (long long)offset); + + /* + * Try first to use O_WRONLY, then O_RDWR stateid. + */ + sp = nfs4_get_inode_share(inode, O_WRONLY); + if (!sp) + sp = nfs4_get_inode_share(inode, O_RDWR); + + if (sp) + memcpy(arg.stateid,sp->so_stateid, sizeof(nfs4_stateid)); + else + memcpy(arg.stateid, zero_stateid, sizeof(nfs4_stateid)); + fattr->valid = 0; return rpc_call_sync(server->client, &msg, rpcflags); } +/* + * Got race? + * We will need to arrange for the VFS layer to provide an atomic open. + * Until then, this create/open method is prone to inefficiency and race + * conditions due to the lookup, create, and open VFS calls from sys_open() + * placed on the wire. + * + * Given the above sorry state of affairs, I'm simply sending an OPEN. + * The file will be opened again in the subsequent VFS open call + * (nfs4_proc_file_open). + * + * The open for read will just hang around to be used by any process that + * opens the file O_RDONLY. This will all be resolved with the VFS changes. + */ + static int nfs4_proc_create(struct inode *dir, struct qstr *name, struct iattr *sattr, - int flags, struct nfs_fh *fhandle, struct nfs_fattr *fattr) + int flags, struct nfs_fh *fhandle, struct nfs_fattr *fattr) { - int oflags; - u32 seqid; - nfs4_stateid stateid; - int status; + int oflags; + struct nfs4_shareowner *sp = NULL; + int status; - oflags = NFS4_SHARE_ACCESS_READ | O_CREAT | (flags & O_EXCL); - status = do_open(dir, name, oflags, sattr, fattr, fhandle, &seqid, stateid); + oflags = O_RDONLY | O_CREAT | (flags & O_EXCL); + status = nfs4_do_open(dir, name, oflags, sattr, fattr, fhandle, &sp); if (!status) { - if (flags & O_EXCL) - status = do_setattr(NFS_SERVER(dir), fattr, fhandle, sattr, stateid); - do_close(NFS_SERVER(dir), fhandle, seqid, stateid); + if (flags & O_EXCL) { + status = nfs4_do_setattr(NFS_SERVER(dir), fattr, + fhandle, sattr, sp); + /* XXX should i bother closing the file? */ + } } return status; } @@ -1368,6 +1472,7 @@ }; struct inode *inode = data->inode; struct nfs_page *req = nfs_list_entry(data->pages.next); + struct nfs4_shareowner *sp; int flags; data->args.fh = NFS_FH(inode); @@ -1380,6 +1485,19 @@ data->res.eof = 0; data->timestamp = jiffies; + if(req->wb_file) { + unsigned int oflags = req->wb_file->f_flags; + sp = nfs4_get_inode_share(inode, oflags); + } else { + sp = nfs4_get_inode_share(inode, O_RDONLY); + if (!sp) + sp = nfs4_get_inode_share(inode, O_RDWR); + } + if (sp) + memcpy(data->args.stateid,sp->so_stateid, sizeof(nfs4_stateid)); + else + memcpy(data->args.stateid, zero_stateid, sizeof(nfs4_stateid)); + /* N.B. Do we need to test? Never called for swapfile inode */ flags = RPC_TASK_ASYNC | (IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0); @@ -1432,6 +1550,7 @@ }; struct inode *inode = data->inode; struct nfs_page *req = nfs_list_entry(data->pages.next); + struct nfs4_shareowner *sp; int stable; int flags; @@ -1454,6 +1573,20 @@ data->res.verf = &data->verf; data->timestamp = jiffies; + if(req->wb_file) { + unsigned int oflags = req->wb_file->f_flags; + sp = nfs4_get_inode_share(inode, oflags); + } else { + sp = nfs4_get_inode_share(inode, O_WRONLY); + if (!sp) + sp = nfs4_get_inode_share(inode, O_RDWR); + } + + if (sp) + memcpy(data->args.stateid,sp->so_stateid, sizeof(nfs4_stateid)); + else + memcpy(data->args.stateid, zero_stateid, sizeof(nfs4_stateid)); + /* Set the initial flags for the task. */ flags = (how & FLUSH_SYNC) ? 0 : RPC_TASK_ASYNC; @@ -1560,6 +1693,55 @@ return rpc_execute(task); } +/* + * We will need to arrange for the VFS layer to provide an atomic open. + * Until then, this open method is prone to inefficiency and race conditions + * due to the lookup, potential create, and open VFS calls from sys_open() + * placed on the wire. + */ +int +nfs4_proc_file_open(struct inode *inode, struct file *filp) +{ + struct dentry *dentry = filp->f_dentry; + struct inode *dir = dentry->d_parent->d_inode; + int flags, status = 0; + + dprintk("nfs4_proc_file_open: starting on (%.*s/%.*s)\n", + (int)dentry->d_parent->d_name.len, + dentry->d_parent->d_name.name, + (int)dentry->d_name.len, dentry->d_name.name); + + lock_kernel(); + + /* isn't this done in open_namei? */ + if (!S_ISREG(inode->i_mode)) { + status = -EISDIR; + goto out; + } + + flags = filp->f_flags & O_ACCMODE; + +/* +* Got race?? +* We have already opened the file "O_EXCL" in nfs4_proc_create!! +* This ugliness will go away with lookup-intent... +*/ + while (!nfs4_get_inode_share(inode, flags)) { + struct nfs4_shareowner *sp = NULL; + status = nfs4_do_open(dir, &dentry->d_name, flags, NULL, NULL, NULL, &sp); + if (status) { + nfs4_put_shareowner(inode,sp); + break; + } + if (nfs4_set_inode_share(inode, sp, flags)) + nfs4_put_shareowner(inode,sp); + } +out: + unlock_kernel(); + return status; +} + + struct nfs_rpc_ops nfs_v4_clientops = { .version = 4, /* protocol version */ .getroot = nfs4_proc_get_root, @@ -1589,6 +1771,7 @@ .read_setup = nfs4_proc_read_setup, .write_setup = nfs4_proc_write_setup, .commit_setup = nfs4_proc_commit_setup, + .file_open = nfs4_proc_file_open, }; /* diff -Nru a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c --- a/fs/nfs/nfs4state.c Sat Apr 12 14:44:06 2003 +++ b/fs/nfs/nfs4state.c Sat Apr 12 14:44:06 2003 @@ -42,6 +42,16 @@ #include #include +/* This protects most of the client-side state. */ +static spinlock_t state_spinlock = SPIN_LOCK_UNLOCKED; + +nfs4_stateid zero_stateid = + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + +nfs4_stateid one_stateid = + { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + + /* * nfs4_get_client(): returns an empty client structure * nfs4_put_client(): drops reference to client structure @@ -52,26 +62,166 @@ struct nfs4_client * nfs4_get_client(void) { - struct nfs4_client *clp; + struct nfs4_client *clp; - if ((clp = kmalloc(sizeof(*clp), GFP_KERNEL))) { - atomic_set(&clp->cl_count, 1); - clp->cl_clientid = 0; - INIT_LIST_HEAD(&clp->cl_lockowners); - } - return clp; + if ((clp = kmalloc(sizeof(*clp), GFP_KERNEL))) + memset(clp, 0, sizeof(nfs4_verifier)); + return clp; } void nfs4_put_client(struct nfs4_client *clp) { - BUG_ON(!clp); - BUG_ON(!atomic_read(&clp->cl_count)); - - if (atomic_dec_and_test(&clp->cl_count)) { - BUG_ON(!list_empty(&clp->cl_lockowners)); - kfree(clp); + BUG_ON(!clp); + kfree(clp); +} + +static inline u32 +nfs4_alloc_lockowner_id(struct nfs4_client *clp) +{ + u32 res; + + spin_lock(&state_spinlock); + res = clp->cl_lockowner_id ++; + spin_unlock(&state_spinlock); + return res; +} + +/* + * nfs4_get_shareowner(): this is called on the OPEN or CREATE path to + * obtain a new shareowner. + * + * There are three shareowners (open_owner4 in rfc3010) per inode, + * one for each possible combination of share lock access. Since + * Linux does not support the deny access type, there are + * three (not 9) referenced by the nfs_inode: + * + * O_WRONLY: inode->wo_owner + * O_RDONLY: inode->ro_owner + * O_RDWR: inode->rw_owner + * + * We create a new shareowner the first time a file is OPENed with + * one of the above shares. All other OPENs with a similar + * share use the single stateid associated with the inode. + * + */ +struct nfs4_shareowner * +nfs4_get_shareowner(struct inode *dir) +{ + struct nfs4_client *clp; + struct nfs4_shareowner *sp; + + sp = kmalloc(sizeof(*sp),GFP_KERNEL); + if (!sp) + return NULL; + clp = (NFS_SB(dir->i_sb))->nfs4_state; + BUG_ON(!clp); + init_MUTEX(&sp->so_sema); + sp->so_seqid = 0; /* arbitrary */ + memset(sp->so_stateid, 0, sizeof(nfs4_stateid)); + sp->so_id = nfs4_alloc_lockowner_id(clp); + return sp; +} + +/* + * Called for each non-null inode shareowner in nfs_clear_inode, + * or if nfs4_do_open fails. + */ +void +nfs4_put_shareowner(struct inode *inode, struct nfs4_shareowner *sp) +{ + if (!sp) + return; + if (sp->so_flags & O_ACCMODE) + nfs4_do_close(inode, sp); + kfree(sp); +} + +/* +* Called with sp->so_sema held. +* +* Increment the seqid if the OPEN/OPEN_DOWNGRADE/CLOSE succeeded, or +* failed with a seqid incrementing error - +* see comments nfs_fs.h:seqid_mutating_error() +*/ +void +nfs4_increment_seqid(u32 status, struct nfs4_shareowner *sp) +{ + if (status == NFS_OK || seqid_mutating_err(status)) + sp->so_seqid++; +} + +/* +* Called by nfs4_proc_open to set the appropriate stateid +*/ +int +nfs4_set_inode_share(struct inode * inode, struct nfs4_shareowner *sp, unsigned int open_flags) +{ + struct nfs_inode *nfsi = NFS_I(inode); + + switch (open_flags & O_ACCMODE) { + case O_RDONLY: + if (!nfsi->ro_owner) { + nfsi->ro_owner = sp; + return 0; + } + break; + case O_WRONLY: + if (!nfsi->wo_owner) { + nfsi->wo_owner = sp; + return 0; + } + break; + case O_RDWR: + if (!nfsi->rw_owner) { + nfsi->rw_owner = sp; + return 0; + } + } + return -EBUSY; +} + +/* +* Boolean test to determine if an OPEN call goes on the wire. +* +* Called by nfs4_proc_open. +*/ +int +nfs4_test_shareowner(struct inode *inode, unsigned int open_flags) +{ + struct nfs_inode *nfsi = NFS_I(inode); + + switch (open_flags & O_ACCMODE) { + case O_RDONLY: + if(nfsi->ro_owner) + return 0; + break; + case O_WRONLY: + if(nfsi->wo_owner) + return 0; + break; + case O_RDWR: + if(nfsi->rw_owner) + return 0; } + return 1; +} + +struct nfs4_shareowner * +nfs4_get_inode_share(struct inode * inode, unsigned int open_flags) +{ + struct nfs_inode *nfsi = NFS_I(inode); + + switch (open_flags & O_ACCMODE) { + case O_RDONLY: + return nfsi->ro_owner; + case O_WRONLY: + return nfsi->wo_owner; + case O_RDWR: + return nfsi->rw_owner; + } + /* Duh gcc warning if we don't... */ + return NULL; } /* diff -Nru a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c --- a/fs/nfs/nfs4xdr.c Sat Apr 12 14:44:10 2003 +++ b/fs/nfs/nfs4xdr.c Sat Apr 12 14:44:10 2003 @@ -8,7 +8,7 @@ * * Kendrick Smith * Andy Adamson - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -50,12 +50,7 @@ #include #include #include - -/* Emperically, it seems that the NFS client gets confused if - * cookies larger than this are returned -- presumably a - * signedness issue? - */ -#define COOKIE_MAX 0x7fffffff +#include #define NFSDBG_FACILITY NFSDBG_XDR @@ -78,6 +73,17 @@ #define encode_putfh_maxsz op_encode_hdr_maxsz + 1 + \ (NFS4_FHSIZE >> 2) #define decode_putfh_maxsz op_decode_hdr_maxsz +#define encode_getfh_maxsz op_encode_hdr_maxsz +#define decode_getfh_maxsz op_decode_hdr_maxsz + 1 + \ + (NFS4_FHSIZE >> 2) +#define encode_getattr_maxsz op_encode_hdr_maxsz + 3 +#define nfs4_fattr_bitmap_maxsz 26 + 2 * ((NFS4_MAXNAMLEN +1) >> 2) +#define decode_getattr_maxsz op_decode_hdr_maxsz + 3 + \ + nfs4_fattr_bitmap_maxsz +#define encode_savefh_maxsz op_encode_hdr_maxsz +#define decode_savefh_maxsz op_decode_hdr_maxsz +#define encode_restorefh_maxsz op_encode_hdr_maxsz +#define decode_restorefh_maxsz op_decode_hdr_maxsz #define encode_read_getattr_maxsz op_encode_hdr_maxsz + 2 #define decode_read_getattr_maxsz op_decode_hdr_maxsz + 8 #define encode_pre_write_getattr_maxsz op_encode_hdr_maxsz + 2 @@ -115,6 +121,44 @@ decode_pre_write_getattr_maxsz + \ op_decode_hdr_maxsz + 2 + \ decode_post_write_getattr_maxsz +#define NFS4_enc_open_sz compound_encode_hdr_maxsz + \ + encode_putfh_maxsz + \ + encode_savefh_maxsz + \ + op_encode_hdr_maxsz + \ + 13 + 3 + 2 + 64 + \ + encode_getattr_maxsz + \ + encode_getfh_maxsz + \ + encode_restorefh_maxsz + \ + encode_getattr_maxsz +#define NFS4_dec_open_sz compound_decode_hdr_maxsz + \ + decode_putfh_maxsz + \ + decode_savefh_maxsz + \ + op_decode_hdr_maxsz + 4 + 5 + 2 + 3 + \ + decode_getattr_maxsz + \ + decode_getfh_maxsz + \ + decode_restorefh_maxsz + \ + decode_getattr_maxsz +#define NFS4_enc_open_confirm_sz \ + compound_encode_hdr_maxsz + \ + encode_putfh_maxsz + \ + op_encode_hdr_maxsz + 5 +#define NFS4_dec_open_confirm_sz compound_decode_hdr_maxsz + \ + decode_putfh_maxsz + \ + op_decode_hdr_maxsz + 4 +#define NFS4_enc_close_sz compound_encode_hdr_maxsz + \ + encode_putfh_maxsz + \ + op_encode_hdr_maxsz + 5 +#define NFS4_dec_close_sz compound_decode_hdr_maxsz + \ + decode_putfh_maxsz + \ + op_decode_hdr_maxsz + 4 +#define NFS4_enc_setattr_sz compound_encode_hdr_maxsz + \ + encode_putfh_maxsz + \ + op_encode_hdr_maxsz + 4 + \ + nfs4_fattr_bitmap_maxsz + \ + encode_getattr_maxsz +#define NFS4_dec_setattr_sz compound_decode_hdr_maxsz + \ + decode_putfh_maxsz + \ + op_decode_hdr_maxsz + 3 static struct { @@ -190,30 +234,9 @@ return 0; } -/* - * FIXME: The following dummy entries will be replaced once the userland - * upcall gets in... - */ -static int -encode_uid(char *p, uid_t uid) -{ - strcpy(p, "nobody"); - return 6; -} - -/* - * FIXME: The following dummy entries will be replaced once the userland - * upcall gets in... - */ -static int -encode_gid(char *p, gid_t gid) -{ - strcpy(p, "nobody"); - return 6; -} - static int -encode_attrs(struct xdr_stream *xdr, struct iattr *iap) +encode_attrs(struct xdr_stream *xdr, struct iattr *iap, + struct nfs_server *server) { char owner_name[256]; char owner_group[256]; @@ -241,20 +264,27 @@ if (iap->ia_valid & ATTR_MODE) len += 4; if (iap->ia_valid & ATTR_UID) { - status = owner_namelen = encode_uid(owner_name, iap->ia_uid); + status = nfs_idmap_name(server, IDMAP_TYPE_USER, + iap->ia_uid, owner_name, &owner_namelen); if (status < 0) { printk(KERN_WARNING "nfs: couldn't resolve uid %d to string\n", iap->ia_uid); - goto out; + /* XXX */ + strcpy(owner_name, "nobody"); + owner_namelen = sizeof("nobody") - 1; + /* goto out; */ } len += 4 + (XDR_QUADLEN(owner_namelen) << 2); } if (iap->ia_valid & ATTR_GID) { - status = owner_grouplen = encode_gid(owner_group, iap->ia_gid); + status = nfs_idmap_name(server, IDMAP_TYPE_GROUP, + iap->ia_gid, owner_group, &owner_grouplen); if (status < 0) { printk(KERN_WARNING "nfs4: couldn't resolve gid %d to string\n", iap->ia_gid); - goto out; + strcpy(owner_group, "nobody"); + owner_grouplen = sizeof("nobody") - 1; + /* goto out; */ } len += 4 + (XDR_QUADLEN(owner_grouplen) << 2); } @@ -348,14 +378,14 @@ } static int -encode_close(struct xdr_stream *xdr, struct nfs4_close *close) +encode_close(struct xdr_stream *xdr, struct nfs_closeargs *arg) { uint32_t *p; RESERVE_SPACE(8+sizeof(nfs4_stateid)); WRITE32(OP_CLOSE); - WRITE32(close->cl_seqid); - WRITEMEM(close->cl_stateid, sizeof(nfs4_stateid)); + WRITE32(arg->seqid); + WRITEMEM(arg->stateid, sizeof(nfs4_stateid)); return 0; } @@ -374,7 +404,8 @@ } static int -encode_create(struct xdr_stream *xdr, struct nfs4_create *create) +encode_create(struct xdr_stream *xdr, struct nfs4_create *create, + struct nfs_server *server) { uint32_t *p; @@ -403,7 +434,7 @@ WRITE32(create->cr_namelen); WRITEMEM(create->cr_name, create->cr_namelen); - return encode_attrs(xdr, create->cr_attrs); + return encode_attrs(xdr, create->cr_attrs, server); } static int @@ -509,69 +540,76 @@ } static int -encode_open(struct xdr_stream *xdr, struct nfs4_open *open) +encode_open(struct xdr_stream *xdr, struct nfs_openargs *arg) { - static int global_id = 0; - int id = global_id++; int status; uint32_t *p; - - /* seqid, share_access, share_deny, clientid, ownerlen, owner, opentype */ + + /* + * opcode 4, seqid 4, share_access 4, share_deny 4, clientid 8, ownerlen 4, + * owner 4, opentype 4 = 36 + */ RESERVE_SPACE(36); WRITE32(OP_OPEN); - WRITE32(0); /* seqid */ - WRITE32(open->op_share_access); - WRITE32(0); /* for us, share_deny== 0 always */ - WRITE64(open->op_client_state->cl_clientid); + WRITE32(arg->seqid); + switch (arg->share_access) { + case O_RDONLY: + WRITE32(NFS4_SHARE_ACCESS_READ); + break; + case O_WRONLY: + WRITE32(NFS4_SHARE_ACCESS_WRITE); + break; + case O_RDWR: + WRITE32(NFS4_SHARE_ACCESS_BOTH); + } + WRITE32(0); /* for linux, share_deny = 0 always */ + WRITE64(arg->clientid); WRITE32(4); - WRITE32(id); - WRITE32(open->op_opentype); - - if (open->op_opentype == NFS4_OPEN_CREATE) { - if (open->op_createmode == NFS4_CREATE_EXCLUSIVE) { - RESERVE_SPACE(4+sizeof(nfs4_verifier)); - WRITE32(open->op_createmode); - WRITEMEM(open->op_verifier, sizeof(nfs4_verifier)); + WRITE32(arg->id); + WRITE32(arg->opentype); + + if (arg->opentype == NFS4_OPEN_CREATE) { + if (arg->createmode == NFS4_CREATE_EXCLUSIVE) { + RESERVE_SPACE(12); + WRITE32(arg->createmode); + WRITEMEM(arg->u.verifier, sizeof(nfs4_verifier)); } - else if (open->op_attrs) { + else if (arg->u.attrs) { RESERVE_SPACE(4); - WRITE32(open->op_createmode); - if ((status = encode_attrs(xdr, open->op_attrs))) + WRITE32(arg->createmode); + if ((status = encode_attrs(xdr, arg->u.attrs, arg->server))) return status; } else { RESERVE_SPACE(12); - WRITE32(open->op_createmode); + WRITE32(arg->createmode); WRITE32(0); WRITE32(0); } } - RESERVE_SPACE(8 + open->op_name->len); + RESERVE_SPACE(8 + arg->name->len); WRITE32(NFS4_OPEN_CLAIM_NULL); - WRITE32(open->op_name->len); - WRITEMEM(open->op_name->name, open->op_name->len); - + WRITE32(arg->name->len); + WRITEMEM(arg->name->name, arg->name->len); + return 0; } static int -encode_open_confirm(struct xdr_stream *xdr, struct nfs4_open_confirm *open_confirm) +encode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmargs *arg) { uint32_t *p; - /* - * Note: In this "stateless" implementation, the OPEN_CONFIRM - * seqid is always equal to 1. - */ RESERVE_SPACE(8+sizeof(nfs4_stateid)); WRITE32(OP_OPEN_CONFIRM); - WRITEMEM(open_confirm->oc_stateid, sizeof(nfs4_stateid)); - WRITE32(1); - + WRITEMEM(arg->stateid, sizeof(nfs4_stateid)); + WRITE32(arg->seqid); + return 0; } + static int encode_putfh(struct xdr_stream *xdr, struct nfs_fh *fh) { @@ -604,10 +642,7 @@ RESERVE_SPACE(32); WRITE32(OP_READ); - WRITE32(0); /* all-zero stateid! */ - WRITE32(0); - WRITE32(0); - WRITE32(0); + WRITEMEM(args->stateid, sizeof(nfs4_stateid)); WRITE64(args->offset); WRITE32(args->count); @@ -727,16 +762,17 @@ } static int -encode_setattr(struct xdr_stream *xdr, struct nfs4_setattr *setattr) +encode_setattr(struct xdr_stream *xdr, struct nfs_setattrargs *arg, + struct nfs_server *server) { int status; uint32_t *p; RESERVE_SPACE(4+sizeof(nfs4_stateid)); WRITE32(OP_SETATTR); - WRITEMEM(setattr->st_stateid, sizeof(nfs4_stateid)); + WRITEMEM(arg->stateid, sizeof(nfs4_stateid)); - if ((status = encode_attrs(xdr, setattr->st_iap))) + if ((status = encode_attrs(xdr, arg->iap, server))) return status; return 0; @@ -790,10 +826,7 @@ RESERVE_SPACE(36); WRITE32(OP_WRITE); - WRITE32(0xffffffff); /* magic stateid -1 */ - WRITE32(0xffffffff); - WRITE32(0xffffffff); - WRITE32(0xffffffff); + WRITEMEM(args->stateid, sizeof(nfs4_stateid)); WRITE64(args->offset); WRITE32(args->stable); WRITE32(args->count); @@ -821,11 +854,8 @@ case OP_ACCESS: status = encode_access(xdr, &cp->ops[i].u.access); break; - case OP_CLOSE: - status = encode_close(xdr, &cp->ops[i].u.close); - break; case OP_CREATE: - status = encode_create(xdr, &cp->ops[i].u.create); + status = encode_create(xdr, &cp->ops[i].u.create, cp->server); break; case OP_GETATTR: status = encode_getattr(xdr, &cp->ops[i].u.getattr); @@ -839,12 +869,6 @@ case OP_LOOKUP: status = encode_lookup(xdr, &cp->ops[i].u.lookup); break; - case OP_OPEN: - status = encode_open(xdr, &cp->ops[i].u.open); - break; - case OP_OPEN_CONFIRM: - status = encode_open_confirm(xdr, &cp->ops[i].u.open_confirm); - break; case OP_PUTFH: status = encode_putfh(xdr, cp->ops[i].u.putfh.pf_fhandle); break; @@ -872,9 +896,6 @@ case OP_SAVEFH: status = encode_savefh(xdr); break; - case OP_SETATTR: - status = encode_setattr(xdr, &cp->ops[i].u.setattr); - break; case OP_SETCLIENTID: status = encode_setclientid(xdr, &cp->ops[i].u.setclientid); break; @@ -909,6 +930,87 @@ cp->timestamp = jiffies; return status; } +/* + * Encode a CLOSE request + */ +static int +nfs4_xdr_enc_close(struct rpc_rqst *req, uint32_t *p, struct nfs_closeargs *args) +{ + struct xdr_stream xdr; + struct compound_hdr hdr = { + .nops = 2, + }; + int status; + + xdr_init_encode(&xdr, &req->rq_snd_buf, p); + encode_compound_hdr(&xdr, &hdr); + status = encode_putfh(&xdr, args->fh); + if(status) + goto out; + status = encode_close(&xdr, args); +out: + return status; +} + +/* + * Encode an OPEN request + */ +static int +nfs4_xdr_enc_open(struct rpc_rqst *req, uint32_t *p, struct nfs_openargs *args) +{ + struct xdr_stream xdr; + struct compound_hdr hdr = { + .nops = 7, + }; + int status; + + xdr_init_encode(&xdr, &req->rq_snd_buf, p); + encode_compound_hdr(&xdr, &hdr); + status = encode_putfh(&xdr, args->fh); + if (status) + goto out; + status = encode_savefh(&xdr); + if (status) + goto out; + status = encode_open(&xdr, args); + if (status) + goto out; + status = encode_getattr(&xdr, args->f_getattr); + if (status) + goto out; + status = encode_getfh(&xdr); + if (status) + goto out; + status = encode_restorefh(&xdr); + if (status) + goto out; + status = encode_getattr(&xdr, args->d_getattr); +out: + return status; +} + +/* + * Encode an OPEN_CONFIRM request + */ +static int +nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, uint32_t *p, struct nfs_open_confirmargs *args) +{ + struct xdr_stream xdr; + struct compound_hdr hdr = { + .nops = 2, + }; + int status; + + xdr_init_encode(&xdr, &req->rq_snd_buf, p); + encode_compound_hdr(&xdr, &hdr); + status = encode_putfh(&xdr, args->fh); + if(status) + goto out; + status = encode_open_confirm(&xdr, args); +out: + return status; +} + /* * Encode a READ request @@ -946,6 +1048,32 @@ } /* + * Encode an SETATTR request + */ +static int +nfs4_xdr_enc_setattr(struct rpc_rqst *req, uint32_t *p, struct nfs_setattrargs *args) + +{ + struct xdr_stream xdr; + struct compound_hdr hdr = { + .nops = 3, + }; + int status; + + xdr_init_encode(&xdr, &req->rq_snd_buf, p); + encode_compound_hdr(&xdr, &hdr); + status = encode_putfh(&xdr, args->fh); + if(status) + goto out; + status = encode_setattr(&xdr, args, args->server); + if(status) + goto out; + status = encode_getattr(&xdr, args->attr); +out: + return status; +} + +/* * Encode a WRITE request */ static int @@ -974,7 +1102,7 @@ } /* - * Encode a COMMIT request + * a COMMIT request */ static int nfs4_xdr_enc_commit(struct rpc_rqst *req, uint32_t *p, struct nfs_writeargs *args) @@ -1044,28 +1172,6 @@ } \ } while (0) -/* - * FIXME: The following dummy entry will be replaced once the userland - * upcall gets in... - */ -static int -decode_uid(char *p, uint32_t len, uid_t *uid) -{ - *uid = -2; - return 0; -} - -/* - * FIXME: The following dummy entry will be replaced once the userland - * upcall gets in... - */ -static int -decode_gid(char *p, uint32_t len, gid_t *gid) -{ - *gid = -2; - return 0; -} - static int decode_compound_hdr(struct xdr_stream *xdr, struct compound_hdr *hdr) { @@ -1139,7 +1245,7 @@ } static int -decode_close(struct xdr_stream *xdr, struct nfs4_close *close) +decode_close(struct xdr_stream *xdr, struct nfs_closeres *res) { uint32_t *p; int status; @@ -1148,7 +1254,7 @@ if (status) return status; READ_BUF(sizeof(nfs4_stateid)); - COPYMEM(close->cl_stateid, sizeof(nfs4_stateid)); + COPYMEM(res->stateid, sizeof(nfs4_stateid)); return 0; } @@ -1190,7 +1296,8 @@ extern uint32_t nfs4_pathconf_bitmap[2]; static int -decode_getattr(struct xdr_stream *xdr, struct nfs4_getattr *getattr) +decode_getattr(struct xdr_stream *xdr, struct nfs4_getattr *getattr, + struct nfs_server *server) { struct nfs_fattr *nfp = getattr->gt_attrs; struct nfs_fsstat *fsstat = getattr->gt_fsstat; @@ -1354,35 +1461,39 @@ } if (bmval1 & FATTR4_WORD1_OWNER) { READ_BUF(4); - len += 4; - READ32(dummy32); /* name length */ - if (dummy32 > XDR_MAX_NETOBJ) { + len += 4; + READ32(dummy32); /* name length */ + if (dummy32 > XDR_MAX_NETOBJ) { dprintk("read_attrs: name too long!\n"); - goto xdr_error; - } - READ_BUF(dummy32); - len += (XDR_QUADLEN(dummy32) << 2); - if ((status = decode_uid((char *)p, dummy32, &nfp->uid))) { - dprintk("read_attrs: gss_get_num failed!\n"); - goto out; - } - dprintk("read_attrs: uid=%d\n", (int)nfp->uid); + goto xdr_error; + } + READ_BUF(dummy32); + len += (XDR_QUADLEN(dummy32) << 2); + if ((status = nfs_idmap_id(server, IDMAP_TYPE_USER, + (char *)p, len, &nfp->uid)) == -1) { + dprintk("read_attrs: gss_get_num failed!\n"); + /* goto out; */ + nfp->uid = -2; + } + dprintk("read_attrs: uid=%d\n", (int)nfp->uid); } if (bmval1 & FATTR4_WORD1_OWNER_GROUP) { READ_BUF(4); - len += 4; - READ32(dummy32); - if (dummy32 > XDR_MAX_NETOBJ) { - dprintk("read_attrs: name too long!\n"); - goto xdr_error; - } - READ_BUF(dummy32); - len += (XDR_QUADLEN(dummy32) << 2); - if ((status = decode_gid((char *)p, dummy32, &nfp->gid))) { - dprintk("read_attrs: gss_get_num failed!\n"); - goto out; - } - dprintk("read_attrs: gid=%d\n", (int)nfp->gid); + len += 4; + READ32(dummy32); + if (dummy32 > XDR_MAX_NETOBJ) { + dprintk("read_attrs: name too long!\n"); + goto xdr_error; + } + READ_BUF(dummy32); + len += (XDR_QUADLEN(dummy32) << 2); + if ((status = nfs_idmap_id(server, IDMAP_TYPE_GROUP, + (char *)p, len, &nfp->gid)) == -1) { + dprintk("read_attrs: gss_get_num failed!\n"); + nfp->gid = -2; + /* goto out; */ + } + dprintk("read_attrs: gid=%d\n", (int)nfp->gid); } if (bmval1 & FATTR4_WORD1_RAWDEV) { uint32_t major, minor; @@ -1617,49 +1728,49 @@ } static int -decode_open(struct xdr_stream *xdr, struct nfs4_open *open) +decode_open(struct xdr_stream *xdr, struct nfs_openres *res) { - uint32_t *p; - uint32_t bmlen, delegation_type; - int status; - - status = decode_op_hdr(xdr, OP_OPEN); - if (status) - return status; - READ_BUF(sizeof(nfs4_stateid)); - COPYMEM(open->op_stateid, sizeof(nfs4_stateid)); + uint32_t *p; + uint32_t bmlen, delegation_type; + int status; - decode_change_info(xdr, open->op_cinfo); + status = decode_op_hdr(xdr, OP_OPEN); + if (status) + return status; + READ_BUF(sizeof(nfs4_stateid)); + COPYMEM(res->stateid, sizeof(nfs4_stateid)); - READ_BUF(8); - READ32(*open->op_rflags); - READ32(bmlen); - if (bmlen > 10) - goto xdr_error; - - READ_BUF((bmlen << 2) + 4); - p += bmlen; - READ32(delegation_type); - if (delegation_type != NFS4_OPEN_DELEGATE_NONE) - goto xdr_error; - - DECODE_TAIL; + decode_change_info(xdr, res->cinfo); + + READ_BUF(8); + READ32(res->rflags); + READ32(bmlen); + if (bmlen > 10) + goto xdr_error; + + READ_BUF((bmlen << 2) + 4); + p += bmlen; + READ32(delegation_type); + if (delegation_type != NFS4_OPEN_DELEGATE_NONE) + goto xdr_error; + + DECODE_TAIL; } static int -decode_open_confirm(struct xdr_stream *xdr, struct nfs4_open_confirm *open_confirm) +decode_open_confirm(struct xdr_stream *xdr, struct nfs_open_confirmres *res) { - uint32_t *p; - int status; + uint32_t *p; - status = decode_op_hdr(xdr, OP_OPEN_CONFIRM); - if (status) - return status; - READ_BUF(sizeof(nfs4_stateid)); - COPYMEM(open_confirm->oc_stateid, sizeof(nfs4_stateid)); - return 0; + res->status = decode_op_hdr(xdr, OP_OPEN_CONFIRM); + if (res->status) + return res->status; + READ_BUF(sizeof(nfs4_stateid)); + COPYMEM(res->stateid, sizeof(nfs4_stateid)); + return 0; } + static int decode_putfh(struct xdr_stream *xdr) { @@ -1875,7 +1986,7 @@ } static int -decode_setattr(struct xdr_stream *xdr) +decode_setattr(struct xdr_stream *xdr, struct nfs_setattrres *res) { uint32_t *p; uint32_t bmlen; @@ -1986,14 +2097,11 @@ case OP_ACCESS: status = decode_access(xdr, &op->u.access); break; - case OP_CLOSE: - status = decode_close(xdr, &op->u.close); - break; case OP_CREATE: status = decode_create(xdr, &op->u.create); break; case OP_GETATTR: - status = decode_getattr(xdr, &op->u.getattr); + status = decode_getattr(xdr, &op->u.getattr, cp->server); break; case OP_GETFH: status = decode_getfh(xdr, &op->u.getfh); @@ -2004,12 +2112,6 @@ case OP_LOOKUP: status = decode_lookup(xdr); break; - case OP_OPEN: - status = decode_open(xdr, &op->u.open); - break; - case OP_OPEN_CONFIRM: - status = decode_open_confirm(xdr, &op->u.open_confirm); - break; case OP_PUTFH: status = decode_putfh(xdr); break; @@ -2037,9 +2139,6 @@ case OP_SAVEFH: status = decode_savefh(xdr); break; - case OP_SETATTR: - status = decode_setattr(xdr); - break; case OP_SETCLIENTID: status = decode_setclientid(xdr, &op->u.setclientid); break; @@ -2082,6 +2181,118 @@ } /* + * Decode CLOSE response + */ +static int +nfs4_xdr_dec_close(struct rpc_rqst *rqstp, uint32_t *p, struct nfs_closeres *res) +{ + struct xdr_stream xdr; + struct compound_hdr hdr; + int status; + + xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p); + status = decode_compound_hdr(&xdr, &hdr); + if (status) + goto out; + status = decode_putfh(&xdr); + if (status) + goto out; + status = decode_close(&xdr, res); +out: + return status; +} + +/* + * Decode OPEN response + */ +static int +nfs4_xdr_dec_open(struct rpc_rqst *rqstp, uint32_t *p, struct nfs_openres *res) +{ + struct xdr_stream xdr; + struct compound_hdr hdr; + struct nfs4_getfh gfh = { + .gf_fhandle = &res->fh, + }; + int status; + + xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p); + status = decode_compound_hdr(&xdr, &hdr); + if (status) + goto out; + status = decode_putfh(&xdr); + if (status) + goto out; + status = decode_savefh(&xdr); + if (status) + goto out; + status = decode_open(&xdr, res); + if (status) + goto out; + status = decode_getattr(&xdr, res->f_getattr, res->server); + if (status) + goto out; + status = decode_getfh(&xdr, &gfh); + if (status) + goto out; + status = decode_restorefh(&xdr); + if (status) + goto out; + status = decode_getattr(&xdr, res->d_getattr, res->server); + if (status) + goto out; +out: + return status; +} + +/* + * Decode OPEN_CONFIRM response + */ +static int +nfs4_xdr_dec_open_confirm(struct rpc_rqst *rqstp, uint32_t *p, struct nfs_open_confirmres *res) +{ + struct xdr_stream xdr; + struct compound_hdr hdr; + int status; + + xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p); + status = decode_compound_hdr(&xdr, &hdr); + if (status) + goto out; + status = decode_putfh(&xdr); + if (status) + goto out; + status = decode_open_confirm(&xdr, res); +out: + return status; +} + +/* + * Decode SETATTR response + */ +static int +nfs4_xdr_dec_setattr(struct rpc_rqst *rqstp, uint32_t *p, struct nfs_setattrres *res) +{ + struct xdr_stream xdr; + struct compound_hdr hdr; + int status; + + xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p); + status = decode_compound_hdr(&xdr, &hdr); + if (status) + goto out; + status = decode_putfh(&xdr); + if (status) + goto out; + status = decode_setattr(&xdr, res); + if (status) + goto out; + status = decode_getattr(&xdr, res->attr, res->server); +out: + return status; +} + + +/* * Decode Read response */ static int @@ -2188,9 +2399,6 @@ entry->name = (const char *) p; p += XDR_QUADLEN(entry->len); - if (entry->cookie > COOKIE_MAX) - entry->cookie = COOKIE_MAX; - /* * In case the server doesn't return an inode number, * we fake one here. (We don't use inode number 0, @@ -2213,7 +2421,7 @@ #endif #define PROC(proc, argtype, restype) \ -[NFSPROC4_CLNT_##proc] = { \ +[NFSPROC4_CLNT_##proc] = { \ .p_proc = NFSPROC4_COMPOUND, \ .p_encode = (kxdrproc_t) nfs4_xdr_##argtype, \ .p_decode = (kxdrproc_t) nfs4_xdr_##restype, \ @@ -2225,6 +2433,10 @@ PROC(READ, enc_read, dec_read), PROC(WRITE, enc_write, dec_write), PROC(COMMIT, enc_commit, dec_commit), + PROC(OPEN, enc_open, dec_open), + PROC(OPEN_CONFIRM, enc_open_confirm, dec_open_confirm), + PROC(CLOSE, enc_close, dec_close), + PROC(SETATTR, enc_setattr, dec_setattr), }; struct rpc_version nfs_version4 = { diff -Nru a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c --- a/fs/nfsd/nfs4xdr.c Sat Apr 12 14:44:09 2003 +++ b/fs/nfsd/nfs4xdr.c Sat Apr 12 14:44:09 2003 @@ -45,7 +45,6 @@ #include #include #include -#include #include #include #include diff -Nru a/fs/open.c b/fs/open.c --- a/fs/open.c Sat Apr 12 14:44:06 2003 +++ b/fs/open.c Sat Apr 12 14:44:06 2003 @@ -41,7 +41,7 @@ } -asmlinkage long sys_statfs(const char * path, struct statfs * buf) +asmlinkage long sys_statfs(const char __user * path, struct statfs __user * buf) { struct nameidata nd; int error; @@ -57,7 +57,7 @@ return error; } -asmlinkage long sys_fstatfs(unsigned int fd, struct statfs * buf) +asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user * buf) { struct file * file; struct statfs tmp; @@ -92,7 +92,7 @@ return err; } -static inline long do_sys_truncate(const char * path, loff_t length) +static inline long do_sys_truncate(const char __user * path, loff_t length) { struct nameidata nd; struct inode * inode; @@ -152,7 +152,7 @@ return error; } -asmlinkage long sys_truncate(const char * path, unsigned long length) +asmlinkage long sys_truncate(const char __user * path, unsigned long length) { /* on 32-bit boxen it will cut the range 2^31--2^32-1 off */ return do_sys_truncate(path, (long)length); @@ -208,7 +208,7 @@ /* LFS versions of truncate are only needed on 32 bit machines */ #if BITS_PER_LONG == 32 -asmlinkage long sys_truncate64(const char * path, loff_t length) +asmlinkage long sys_truncate64(const char __user * path, loff_t length) { return do_sys_truncate(path, length); } @@ -232,7 +232,7 @@ * must be owner or have write permission. * Else, update from *times, must be owner or super user. */ -asmlinkage long sys_utime(char * filename, struct utimbuf * times) +asmlinkage long sys_utime(char __user * filename, struct utimbuf __user * times) { int error; struct nameidata nd; @@ -280,7 +280,7 @@ * must be owner or have write permission. * Else, update from *times, must be owner or super user. */ -long do_utimes(char * filename, struct timeval * times) +long do_utimes(char __user * filename, struct timeval __user * times) { int error; struct nameidata nd; @@ -319,7 +319,7 @@ return error; } -asmlinkage long sys_utimes(char * filename, struct timeval * utimes) +asmlinkage long sys_utimes(char __user * filename, struct timeval __user * utimes) { struct timeval times[2]; @@ -334,7 +334,7 @@ * We do this by temporarily clearing all FS-related capabilities and * switching the fsuid/fsgid around to the real ones. */ -asmlinkage long sys_access(const char * filename, int mode) +asmlinkage long sys_access(const char __user * filename, int mode) { struct nameidata nd; int old_fsuid, old_fsgid; @@ -381,7 +381,7 @@ return res; } -asmlinkage long sys_chdir(const char * filename) +asmlinkage long sys_chdir(const char __user * filename) { struct nameidata nd; int error; @@ -432,7 +432,7 @@ return error; } -asmlinkage long sys_chroot(const char * filename) +asmlinkage long sys_chroot(const char __user * filename) { struct nameidata nd; int error; @@ -493,7 +493,7 @@ return err; } -asmlinkage long sys_chmod(const char * filename, mode_t mode) +asmlinkage long sys_chmod(const char __user * filename, mode_t mode) { struct nameidata nd; struct inode * inode; @@ -562,7 +562,7 @@ return error; } -asmlinkage long sys_chown(const char * filename, uid_t user, gid_t group) +asmlinkage long sys_chown(const char __user * filename, uid_t user, gid_t group) { struct nameidata nd; int error; @@ -575,7 +575,7 @@ return error; } -asmlinkage long sys_lchown(const char * filename, uid_t user, gid_t group) +asmlinkage long sys_lchown(const char __user * filename, uid_t user, gid_t group) { struct nameidata nd; int error; @@ -793,7 +793,7 @@ write_unlock(&files->file_lock); } -asmlinkage long sys_open(const char * filename, int flags, int mode) +asmlinkage long sys_open(const char __user * filename, int flags, int mode) { char * tmp; int fd, error; @@ -829,7 +829,7 @@ * For backward compatibility? Maybe this should be moved * into arch/i386 instead? */ -asmlinkage long sys_creat(const char * pathname, int mode) +asmlinkage long sys_creat(const char __user * pathname, int mode) { return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode); } diff -Nru a/fs/partitions/check.c b/fs/partitions/check.c --- a/fs/partitions/check.c Sat Apr 12 14:44:09 2003 +++ b/fs/partitions/check.c Sat Apr 12 14:44:09 2003 @@ -248,7 +248,7 @@ extern struct subsystem block_subsys; -static struct kobj_type ktype_part = { +struct kobj_type ktype_part = { .default_attrs = default_attrs, .sysfs_ops = &part_sysfs_ops, }; diff -Nru a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c --- a/fs/proc/proc_misc.c Sat Apr 12 14:44:06 2003 +++ b/fs/proc/proc_misc.c Sat Apr 12 14:44:06 2003 @@ -177,8 +177,7 @@ "Mapped: %8lu kB\n" "Slab: %8lu kB\n" "Committed_AS: %8u kB\n" - "PageTables: %8lu kB\n" - "ReverseMaps: %8lu\n", + "PageTables: %8lu kB\n", K(i.totalram), K(i.freeram), K(i.bufferram), @@ -197,8 +196,7 @@ K(ps.nr_mapped), K(ps.nr_slab), K(committed), - K(ps.nr_page_table_pages), - ps.nr_reverse_maps + K(ps.nr_page_table_pages) ); len += hugetlb_report_meminfo(page + len); diff -Nru a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c --- a/fs/proc/task_mmu.c Sat Apr 12 14:44:06 2003 +++ b/fs/proc/task_mmu.c Sat Apr 12 14:44:06 2003 @@ -45,13 +45,7 @@ unsigned long task_vsize(struct mm_struct *mm) { - struct vm_area_struct *vma; - unsigned long vsize = 0; - - for (vma = mm->mmap; vma; vma = vma->vm_next) - vsize += vma->vm_end - vma->vm_start; - - return vsize; + return PAGE_SIZE * mm->total_vm; } int task_statm(struct mm_struct *mm, int *shared, int *text, diff -Nru a/fs/read_write.c b/fs/read_write.c --- a/fs/read_write.c Sat Apr 12 14:44:08 2003 +++ b/fs/read_write.c Sat Apr 12 14:44:08 2003 @@ -135,7 +135,7 @@ #if !defined(__alpha__) asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high, - unsigned long offset_low, loff_t * result, + unsigned long offset_low, loff_t __user * result, unsigned int origin) { int retval; @@ -167,7 +167,7 @@ } #endif -ssize_t do_sync_read(struct file *filp, char *buf, size_t len, loff_t *ppos) +ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) { struct kiocb kiocb; ssize_t ret; @@ -181,7 +181,7 @@ return ret; } -ssize_t vfs_read(struct file *file, char *buf, size_t count, loff_t *pos) +ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos) { struct inode *inode = file->f_dentry->d_inode; ssize_t ret; @@ -207,7 +207,7 @@ return ret; } -ssize_t do_sync_write(struct file *filp, const char *buf, size_t len, loff_t *ppos) +ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) { struct kiocb kiocb; ssize_t ret; @@ -221,7 +221,7 @@ return ret; } -ssize_t vfs_write(struct file *file, const char *buf, size_t count, loff_t *pos) +ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { struct inode *inode = file->f_dentry->d_inode; ssize_t ret; @@ -247,7 +247,7 @@ return ret; } -asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) +asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) { struct file *file; ssize_t ret = -EBADF; @@ -261,7 +261,7 @@ return ret; } -asmlinkage ssize_t sys_write(unsigned int fd, const char * buf, size_t count) +asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count) { struct file *file; ssize_t ret = -EBADF; @@ -275,7 +275,7 @@ return ret; } -asmlinkage ssize_t sys_pread64(unsigned int fd, char *buf, +asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, size_t count, loff_t pos) { struct file *file; @@ -293,7 +293,7 @@ return ret; } -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char *buf, +asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, size_t count, loff_t pos) { struct file *file; @@ -332,7 +332,7 @@ } static ssize_t do_readv_writev(int type, struct file *file, - const struct iovec * vector, + const struct iovec __user * uvector, unsigned long nr_segs, loff_t *pos) { typedef ssize_t (*io_fn_t)(struct file *, char *, size_t, loff_t *); @@ -340,7 +340,7 @@ size_t tot_len; struct iovec iovstack[UIO_FASTIOV]; - struct iovec *iov=iovstack; + struct iovec *iov=iovstack, *vector; ssize_t ret; int seg; io_fn_t fn; @@ -372,7 +372,7 @@ goto out; } ret = -EFAULT; - if (copy_from_user(iov, vector, nr_segs*sizeof(*vector))) + if (copy_from_user(iov, uvector, nr_segs*sizeof(*uvector))) goto out; /* @@ -451,7 +451,7 @@ return ret; } -ssize_t vfs_readv(struct file *file, const struct iovec *vec, +ssize_t vfs_readv(struct file *file, const struct iovec __user *vec, unsigned long vlen, loff_t *pos) { if (!(file->f_mode & FMODE_READ)) @@ -462,7 +462,7 @@ return do_readv_writev(READ, file, vec, vlen, pos); } -ssize_t vfs_writev(struct file *file, const struct iovec *vec, +ssize_t vfs_writev(struct file *file, const struct iovec __user *vec, unsigned long vlen, loff_t *pos) { if (!(file->f_mode & FMODE_WRITE)) @@ -475,7 +475,7 @@ asmlinkage ssize_t -sys_readv(unsigned long fd, const struct iovec *vec, unsigned long vlen) +sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) { struct file *file; ssize_t ret = -EBADF; @@ -490,7 +490,7 @@ } asmlinkage ssize_t -sys_writev(unsigned long fd, const struct iovec *vec, unsigned long vlen) +sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) { struct file *file; ssize_t ret = -EBADF; @@ -586,7 +586,7 @@ return retval; } -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t *offset, size_t count) +asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count) { loff_t pos; off_t off; @@ -605,7 +605,7 @@ return do_sendfile(out_fd, in_fd, NULL, count, MAX_NON_LFS); } -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t *offset, size_t count) +asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count) { loff_t pos; ssize_t ret; diff -Nru a/fs/readdir.c b/fs/readdir.c --- a/fs/readdir.c Sat Apr 12 14:44:08 2003 +++ b/fs/readdir.c Sat Apr 12 14:44:08 2003 @@ -58,7 +58,7 @@ }; struct readdir_callback { - struct old_linux_dirent * dirent; + struct old_linux_dirent __user * dirent; int count; }; @@ -66,7 +66,7 @@ ino_t ino, unsigned int d_type) { struct readdir_callback * buf = (struct readdir_callback *) __buf; - struct old_linux_dirent * dirent; + struct old_linux_dirent __user * dirent; if (buf->count) return -EINVAL; @@ -85,7 +85,7 @@ return 0; } -asmlinkage long old_readdir(unsigned int fd, void * dirent, unsigned int count) +asmlinkage long old_readdir(unsigned int fd, struct old_linux_dirent __user * dirent, unsigned int count) { int error; struct file * file; @@ -122,8 +122,8 @@ }; struct getdents_callback { - struct linux_dirent * current_dir; - struct linux_dirent * previous; + struct linux_dirent __user * current_dir; + struct linux_dirent __user * previous; int count; int error; }; @@ -131,7 +131,7 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { - struct linux_dirent * dirent; + struct linux_dirent __user * dirent; struct getdents_callback * buf = (struct getdents_callback *) __buf; int reclen = ROUND_UP(NAME_OFFSET(dirent) + namlen + 1); @@ -161,10 +161,10 @@ return -EFAULT; } -asmlinkage long sys_getdents(unsigned int fd, void * dirent, unsigned int count) +asmlinkage long sys_getdents(unsigned int fd, struct linux_dirent __user * dirent, unsigned int count) { struct file * file; - struct linux_dirent * lastdirent; + struct linux_dirent __user * lastdirent; struct getdents_callback buf; int error; @@ -177,7 +177,7 @@ if (!file) goto out; - buf.current_dir = (struct linux_dirent *) dirent; + buf.current_dir = dirent; buf.previous = NULL; buf.count = count; buf.error = 0; @@ -203,8 +203,8 @@ #define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1)) struct getdents_callback64 { - struct linux_dirent64 * current_dir; - struct linux_dirent64 * previous; + struct linux_dirent64 __user * current_dir; + struct linux_dirent64 __user * previous; int count; int error; }; @@ -212,7 +212,7 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, ino_t ino, unsigned int d_type) { - struct linux_dirent64 *dirent; + struct linux_dirent64 __user *dirent; struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf; int reclen = ROUND_UP64(NAME_OFFSET(dirent) + namlen + 1); @@ -246,10 +246,10 @@ return -EFAULT; } -asmlinkage long sys_getdents64(unsigned int fd, void * dirent, unsigned int count) +asmlinkage long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count) { struct file * file; - struct linux_dirent64 * lastdirent; + struct linux_dirent64 __user * lastdirent; struct getdents_callback64 buf; int error; @@ -262,7 +262,7 @@ if (!file) goto out; - buf.current_dir = (struct linux_dirent64 *) dirent; + buf.current_dir = dirent; buf.previous = NULL; buf.count = count; buf.error = 0; @@ -273,9 +273,8 @@ error = buf.error; lastdirent = buf.previous; if (lastdirent) { - struct linux_dirent64 d; - d.d_off = file->f_pos; - __put_user(d.d_off, &lastdirent->d_off); + typeof(lastdirent->d_off) d_off = file->f_pos; + __put_user(d_off, &lastdirent->d_off); error = count - buf.count; } diff -Nru a/fs/select.c b/fs/select.c --- a/fs/select.c Sat Apr 12 14:44:06 2003 +++ b/fs/select.c Sat Apr 12 14:44:06 2003 @@ -268,7 +268,7 @@ ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) asmlinkage long -sys_select(int n, fd_set *inp, fd_set *outp, fd_set *exp, struct timeval *tvp) +sys_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval __user *tvp) { fd_set_bits fds; char *bits; @@ -429,7 +429,7 @@ return count; } -asmlinkage long sys_poll(struct pollfd * ufds, unsigned int nfds, long timeout) +asmlinkage long sys_poll(struct pollfd __user * ufds, unsigned int nfds, long timeout) { struct poll_wqueues table; int fdcount, err; diff -Nru a/fs/seq_file.c b/fs/seq_file.c --- a/fs/seq_file.c Sat Apr 12 14:44:09 2003 +++ b/fs/seq_file.c Sat Apr 12 14:44:09 2003 @@ -43,7 +43,7 @@ * * Ready-made ->f_op->read() */ -ssize_t seq_read(struct file *file, char *buf, size_t size, loff_t *ppos) +ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) { struct seq_file *m = (struct seq_file *)file->private_data; size_t copied = 0; diff -Nru a/fs/stat.c b/fs/stat.c --- a/fs/stat.c Sat Apr 12 14:44:06 2003 +++ b/fs/stat.c Sat Apr 12 14:44:06 2003 @@ -56,7 +56,7 @@ return 0; } -int vfs_stat(char *name, struct kstat *stat) +int vfs_stat(char __user *name, struct kstat *stat) { struct nameidata nd; int error; @@ -69,7 +69,7 @@ return error; } -int vfs_lstat(char *name, struct kstat *stat) +int vfs_lstat(char __user *name, struct kstat *stat) { struct nameidata nd; int error; @@ -102,7 +102,7 @@ * For backward compatibility? Maybe this should be moved * into arch/i386 instead? */ -static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat * statbuf) +static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * statbuf) { static int warncount = 5; struct __old_kernel_stat tmp; @@ -134,7 +134,7 @@ return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; } -asmlinkage long sys_stat(char * filename, struct __old_kernel_stat * statbuf) +asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user * statbuf) { struct kstat stat; int error = vfs_stat(filename, &stat); @@ -144,7 +144,7 @@ return error; } -asmlinkage long sys_lstat(char * filename, struct __old_kernel_stat * statbuf) +asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf) { struct kstat stat; int error = vfs_lstat(filename, &stat); @@ -154,7 +154,7 @@ return error; } -asmlinkage long sys_fstat(unsigned int fd, struct __old_kernel_stat * statbuf) +asmlinkage long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * statbuf) { struct kstat stat; int error = vfs_fstat(fd, &stat); @@ -167,7 +167,7 @@ #endif -static int cp_new_stat(struct kstat *stat, struct stat *statbuf) +static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) { struct stat tmp; @@ -197,7 +197,7 @@ return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; } -asmlinkage long sys_newstat(char * filename, struct stat * statbuf) +asmlinkage long sys_newstat(char __user * filename, struct stat __user * statbuf) { struct kstat stat; int error = vfs_stat(filename, &stat); @@ -207,7 +207,7 @@ return error; } -asmlinkage long sys_newlstat(char * filename, struct stat * statbuf) +asmlinkage long sys_newlstat(char __user * filename, struct stat __user * statbuf) { struct kstat stat; int error = vfs_lstat(filename, &stat); @@ -217,7 +217,7 @@ return error; } -asmlinkage long sys_newfstat(unsigned int fd, struct stat * statbuf) +asmlinkage long sys_newfstat(unsigned int fd, struct stat __user * statbuf) { struct kstat stat; int error = vfs_fstat(fd, &stat); @@ -228,7 +228,7 @@ return error; } -asmlinkage long sys_readlink(const char * path, char * buf, int bufsiz) +asmlinkage long sys_readlink(const char __user * path, char __user * buf, int bufsiz) { struct nameidata nd; int error; @@ -257,7 +257,7 @@ /* ---------- LFS-64 ----------- */ #if !defined(__alpha__) && !defined(__ia64__) && !defined(__mips64) && !defined(__x86_64__) && !defined(CONFIG_ARCH_S390X) -static long cp_new_stat64(struct kstat *stat, struct stat64 *statbuf) +static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf) { struct stat64 tmp; @@ -284,7 +284,7 @@ return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; } -asmlinkage long sys_stat64(char * filename, struct stat64 * statbuf, long flags) +asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbuf, long flags) { struct kstat stat; int error = vfs_stat(filename, &stat); @@ -294,7 +294,7 @@ return error; } -asmlinkage long sys_lstat64(char * filename, struct stat64 * statbuf, long flags) +asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statbuf, long flags) { struct kstat stat; int error = vfs_lstat(filename, &stat); @@ -304,7 +304,7 @@ return error; } -asmlinkage long sys_fstat64(unsigned long fd, struct stat64 * statbuf, long flags) +asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf, long flags) { struct kstat stat; int error = vfs_fstat(fd, &stat); diff -Nru a/fs/super.c b/fs/super.c --- a/fs/super.c Sat Apr 12 14:44:07 2003 +++ b/fs/super.c Sat Apr 12 14:44:07 2003 @@ -407,7 +407,7 @@ return NULL; } -asmlinkage long sys_ustat(dev_t dev, struct ustat * ubuf) +asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf) { struct super_block *s; struct ustat tmp; diff -Nru a/fs/xfs/linux/xfs_aops.c b/fs/xfs/linux/xfs_aops.c --- a/fs/xfs/linux/xfs_aops.c Sat Apr 12 14:44:09 2003 +++ b/fs/xfs/linux/xfs_aops.c Sat Apr 12 14:44:09 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -48,8 +48,11 @@ clear_buffer_unwritten(bh); if (!uptodate) pagebuf_ioerror(pb, -EIO); - if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) + if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) { pagebuf_iodone(pb, 1, 1); + pb->pb_flags &= ~_PBF_LOCKABLE; + pagebuf_rele(pb); + } end_buffer_async_write(bh, uptodate); } @@ -160,7 +163,7 @@ delta -= mp->pbm_offset; delta >>= block_bits; - sector_shift = block_bits - 9; + sector_shift = block_bits - BBSHIFT; bn = mp->pbm_bn >> sector_shift; bn += delta; ASSERT((bn << sector_shift) >= mp->pbm_bn); @@ -282,7 +285,7 @@ total += bh->b_size; } while ((bh = bh->b_this_page) != head); - /* if we reached the end of the page, sum forwards in + /* If we reached the end of the page, sum forwards in * following pages. */ if (bh == head) { @@ -438,8 +441,11 @@ XFS_BUF_SET_FSPRIVATE(pb, LINVFS_GET_VP(inode)->v_fbhv); XFS_BUF_SET_IODONE_FUNC(pb, xfs_unwritten_conv); - if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) + if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) { pagebuf_iodone(pb, 1, 1); + pb->pb_flags &= ~_PBF_LOCKABLE; + pagebuf_rele(pb); + } return 0; } @@ -729,8 +735,8 @@ page_dirty = 0; } } else if (startio) { - if (buffer_uptodate(bh)) { - lock_buffer(bh); + if (buffer_uptodate(bh) && + !test_and_set_bit(BH_Lock, &bh->b_state)) { bh_arr[cnt++] = bh; page_dirty = 0; } @@ -753,8 +759,7 @@ } if (mp) { - cluster_write(inode, page->index + 1, mp, - startio, unmapped); + cluster_write(inode, page->index + 1, mp, startio, unmapped); } return page_dirty; @@ -763,7 +768,7 @@ for (i = 0; i < cnt; i++) { unlock_buffer(bh_arr[i]); } - + /* * If it's delalloc and we have nowhere to put it, * throw it away, unless the lower layers told @@ -806,8 +811,7 @@ size = 1 << inode->i_blkbits; VOP_BMAP(vp, offset, size, - create ? flags : PBF_READ, - (struct page_buf_bmap_s *)&pbmap, &retpbbm, error); + create ? flags : PBF_READ, &pbmap, &retpbbm, error); if (error) return -error; @@ -825,7 +829,7 @@ delta = offset - pbmap.pbm_offset; delta >>= inode->i_blkbits; - bn = pbmap.pbm_bn >> (inode->i_blkbits - 9); + bn = pbmap.pbm_bn >> (inode->i_blkbits - BBSHIFT); bn += delta; bh_result->b_blocknr = bn; diff -Nru a/fs/xfs/linux/xfs_file.c b/fs/xfs/linux/xfs_file.c --- a/fs/xfs/linux/xfs_file.c Sat Apr 12 14:44:08 2003 +++ b/fs/xfs/linux/xfs_file.c Sat Apr 12 14:44:08 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as @@ -136,6 +136,7 @@ return linvfs_writev(iocb->ki_filp, &iov, 1, &iocb->ki_pos); } + STATIC ssize_t linvfs_sendfile( struct file *filp, @@ -199,9 +200,7 @@ flags |= FSYNC_DATA; ASSERT(vp); - VOP_FSYNC(vp, flags, NULL, (xfs_off_t)0, (xfs_off_t)-1, error); - return -error; } @@ -287,6 +286,7 @@ kfree(read_buf); return -error; } + STATIC int linvfs_file_mmap( diff -Nru a/fs/xfs/linux/xfs_globals.c b/fs/xfs/linux/xfs_globals.c --- a/fs/xfs/linux/xfs_globals.c Sat Apr 12 14:44:08 2003 +++ b/fs/xfs/linux/xfs_globals.c Sat Apr 12 14:44:08 2003 @@ -49,11 +49,6 @@ xfs_param_t xfs_params = { 0, 1, 0, 0, 0, 3 }; /* - * Used to serialize atomicIncWithWrap. - */ -spinlock_t xfs_atomic_spin = SPIN_LOCK_UNLOCKED; - -/* * Global system credential structure. */ cred_t sys_cred_val, *sys_cred = &sys_cred_val; diff -Nru a/fs/xfs/linux/xfs_globals.h b/fs/xfs/linux/xfs_globals.h --- a/fs/xfs/linux/xfs_globals.h Sat Apr 12 14:44:07 2003 +++ b/fs/xfs/linux/xfs_globals.h Sat Apr 12 14:44:07 2003 @@ -38,11 +38,7 @@ */ extern uint64_t xfs_panic_mask; /* set to cause more panics */ - extern unsigned long xfs_physmem; - -extern spinlock_t xfs_atomic_spin; - extern struct cred *sys_cred; #endif /* __XFS_GLOBALS_H__ */ diff -Nru a/fs/xfs/linux/xfs_ioctl.c b/fs/xfs/linux/xfs_ioctl.c --- a/fs/xfs/linux/xfs_ioctl.c Sat Apr 12 14:44:09 2003 +++ b/fs/xfs/linux/xfs_ioctl.c Sat Apr 12 14:44:09 2003 @@ -39,11 +39,6 @@ #include -extern int xfs_change_file_space(bhv_desc_t *, int, - xfs_flock64_t *, xfs_off_t, cred_t *, int); -extern int xfs_set_dmattrs(bhv_desc_t *, u_int, u_int16_t, cred_t *); - - /* * xfs_find_handle maps from userspace xfs_fsop_handlereq structure to * a file or fs handle. diff -Nru a/fs/xfs/linux/xfs_lrw.c b/fs/xfs/linux/xfs_lrw.c --- a/fs/xfs/linux/xfs_lrw.c Sat Apr 12 14:44:05 2003 +++ b/fs/xfs/linux/xfs_lrw.c Sat Apr 12 14:44:05 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as diff -Nru a/fs/xfs/linux/xfs_lrw.h b/fs/xfs/linux/xfs_lrw.h --- a/fs/xfs/linux/xfs_lrw.h Sat Apr 12 14:44:06 2003 +++ b/fs/xfs/linux/xfs_lrw.h Sat Apr 12 14:44:06 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as diff -Nru a/fs/xfs/linux/xfs_super.c b/fs/xfs/linux/xfs_super.c --- a/fs/xfs/linux/xfs_super.c Sat Apr 12 14:44:09 2003 +++ b/fs/xfs/linux/xfs_super.c Sat Apr 12 14:44:09 2003 @@ -257,7 +257,7 @@ }; struct proc_xfs_info *xfs_infop; struct xfs_mount *mp = XFS_BHVTOM(bhv); - char b[BDEVNAME_SIZE]; + char b[BDEVNAME_SIZE]; for (xfs_infop = xfs_info; xfs_infop->flag; xfs_infop++) { if (mp->m_flags & xfs_infop->flag) diff -Nru a/fs/xfs/support/atomic.h b/fs/xfs/support/atomic.h --- a/fs/xfs/support/atomic.h Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., 59 - * Temple Place - Suite 330, Boston MA 02111-1307, USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * - * http://www.sgi.com - * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ - */ -#ifndef __XFS_SUPPORT_ATOMIC_H__ -#define __XFS_SUPPORT_ATOMIC_H__ - -#include -#include -#include -#include -#include -#include - -/* - * This is used for two variables in XFS, one of which is a debug trace - * buffer index. They are not accessed via any other atomic operations - * so this is safe. All other atomic increments and decrements in XFS - * now use the Linux built-in functions. - */ - -extern spinlock_t xfs_atomic_spin; - -static __inline__ int atomicIncWithWrap(int *ip, int val) -{ - unsigned long flags; - int ret; - spin_lock_irqsave(&xfs_atomic_spin, flags); - ret = *ip; - (*ip)++; - if (*ip == val) *ip = 0; - spin_unlock_irqrestore(&xfs_atomic_spin, flags); - return ret; -} - -#endif /* __XFS_SUPPORT_ATOMIC_H__ */ diff -Nru a/fs/xfs/support/ktrace.c b/fs/xfs/support/ktrace.c --- a/fs/xfs/support/ktrace.c Sat Apr 12 14:44:07 2003 +++ b/fs/xfs/support/ktrace.c Sat Apr 12 14:44:07 2003 @@ -37,7 +37,6 @@ #include "kmem.h" #include "spin.h" #include "debug.h" -#include "atomic.h" #include "ktrace.h" #if (defined(DEBUG) || defined(CONFIG_XFS_VNODE_TRACING)) @@ -181,6 +180,7 @@ void *val14, void *val15) { + static lock_t wrap_lock = SPIN_LOCK_UNLOCKED; int index; ktrace_entry_t *ktep; @@ -189,7 +189,11 @@ /* * Grab an entry by pushing the index up to the next one. */ - index = atomicIncWithWrap(&ktp->kt_index, ktp->kt_nentries); + spin_lock(&wrap_lock); + index = ktp->kt_index; + if (++ktp->kt_index == ktp->kt_nentries) + ktp->kt_index = 0; + spin_unlock(&wrap_lock); if (!ktp->kt_rollover && index == ktp->kt_nentries - 1) ktp->kt_rollover = 1; diff -Nru a/fs/xfs/xfs.h b/fs/xfs/xfs.h --- a/fs/xfs/xfs.h Sat Apr 12 14:44:06 2003 +++ b/fs/xfs/xfs.h Sat Apr 12 14:44:06 2003 @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include diff -Nru a/fs/xfs/xfs_bmap_btree.h b/fs/xfs/xfs_bmap_btree.h --- a/fs/xfs/xfs_bmap_btree.h Sat Apr 12 14:44:08 2003 +++ b/fs/xfs/xfs_bmap_btree.h Sat Apr 12 14:44:08 2003 @@ -459,6 +459,8 @@ #endif +#ifdef __KERNEL__ + /* * Prototypes for xfs_bmap.c to call. */ @@ -706,5 +708,6 @@ xfs_bmbt_irec_t *, xfs_bmbt_irec_t *); +#endif /* __KERNEL__ */ #endif /* __XFS_BMAP_BTREE_H__ */ diff -Nru a/fs/xfs/xfs_dmapi.h b/fs/xfs/xfs_dmapi.h --- a/fs/xfs/xfs_dmapi.h Sat Apr 12 14:44:10 2003 +++ b/fs/xfs/xfs_dmapi.h Sat Apr 12 14:44:10 2003 @@ -186,7 +186,7 @@ extern struct bhv_vfsops xfs_dmops; -extern void xfs_dm_init(void); -extern void xfs_dm_exit(void); +extern int dmapi_init(void); +extern void dmapi_uninit(void); #endif /* __XFS_DMAPI_H__ */ diff -Nru a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h --- a/fs/xfs/xfs_fs.h Sat Apr 12 14:44:06 2003 +++ b/fs/xfs/xfs_fs.h Sat Apr 12 14:44:06 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 1995-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2.1 of the GNU Lesser General Public License @@ -44,21 +44,25 @@ * d_miniosz is the min xfer size, xfer size multiple and file seek offset * alignment. */ +#ifndef HAVE_DIOATTR struct dioattr { __u32 d_mem; /* data buffer memory alignment */ __u32 d_miniosz; /* min xfer size */ __u32 d_maxiosz; /* max xfer size */ }; +#endif /* * Structure for XFS_IOC_FSGETXATTR[A] and XFS_IOC_FSSETXATTR. */ +#ifndef HAVE_FSXATTR struct fsxattr { __u32 fsx_xflags; /* xflags field value (get/set) */ __u32 fsx_extsize; /* extsize field value (get/set)*/ __u32 fsx_nextents; /* nextents field value (get) */ unsigned char fsx_pad[16]; }; +#endif /* * Flags for the bs_xflags/fsx_xflags field @@ -79,6 +83,7 @@ * number of array elements given. The first structure is updated on * return to give the offset and length for the next call. */ +#ifndef HAVE_GETBMAP struct getbmap { __s64 bmv_offset; /* file offset of segment in blocks */ __s64 bmv_block; /* starting block (64-bit daddr_t) */ @@ -86,6 +91,7 @@ __s32 bmv_count; /* # of entries in array incl. 1st */ __s32 bmv_entries; /* # of entries filled in (output) */ }; +#endif /* * Structure for XFS_IOC_GETBMAPX. Fields bmv_offset through bmv_entries @@ -96,6 +102,7 @@ * in by the XFS_IOC_GETBMAPX command for each returned structure after * the first. */ +#ifndef HAVE_GETBMAPX struct getbmapx { __s64 bmv_offset; /* file offset of segment in blocks */ __s64 bmv_block; /* starting block (64-bit daddr_t) */ @@ -107,6 +114,7 @@ __s32 bmv_unused1; /* future use */ __s32 bmv_unused2; /* future use */ }; +#endif /* bmv_iflags values - set by XFS_IOC_GETBMAPX caller. */ #define BMV_IF_ATTRFORK 0x1 /* return attr fork rather than data */ @@ -136,11 +144,13 @@ * only values previously obtained via xfs_bulkstat! (Specifically the * xfs_bstat_t fields bs_dmevmask and bs_dmstate.) */ +#ifndef HAVE_FSDMIDATA struct fsdmidata { __u32 fsd_dmevmask; /* corresponds to di_dmevmask */ __u16 fsd_padding; __u16 fsd_dmstate; /* corresponds to di_dmstate */ }; +#endif /* * File segment locking set data type for 64 bit access. @@ -391,7 +401,7 @@ * This is typically called by a stateless file server in order to generate * "file handles". */ -#ifndef MAXFIDSZ +#ifndef HAVE_FID #define MAXFIDSZ 46 typedef struct fid { __u16 fid_len; /* length of data in bytes */ @@ -472,7 +482,7 @@ #define XFS_IOC_FSGROWFSLOG _IOW ('X', 111, struct xfs_growfs_log) #define XFS_IOC_FSGROWFSRT _IOW ('X', 112, struct xfs_growfs_rt) #define XFS_IOC_FSCOUNTS _IOR ('X', 113, struct xfs_fsop_counts) -#define XFS_IOC_SET_RESBLKS _IOR ('X', 114, struct xfs_fsop_resblks) +#define XFS_IOC_SET_RESBLKS _IOWR('X', 114, struct xfs_fsop_resblks) #define XFS_IOC_GET_RESBLKS _IOR ('X', 115, struct xfs_fsop_resblks) #define XFS_IOC_ERROR_INJECTION _IOW ('X', 116, struct xfs_error_injection) #define XFS_IOC_ERROR_CLEARALL _IOW ('X', 117, struct xfs_error_injection) @@ -486,6 +496,7 @@ /* XFS_IOC_GETFSUUID ---------- deprecated 140 */ +#ifndef HAVE_BBMACROS /* * Block I/O parameterization. A basic block (BB) is the lowest size of * filesystem allocation, and must equal 512. Length units given to bio @@ -497,5 +508,6 @@ #define BTOBB(bytes) (((__u64)(bytes) + BBSIZE - 1) >> BBSHIFT) #define BTOBBT(bytes) ((__u64)(bytes) >> BBSHIFT) #define BBTOB(bbs) ((bbs) << BBSHIFT) +#endif #endif /* __XFS_FS_H__ */ diff -Nru a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c --- a/fs/xfs/xfs_ialloc.c Sat Apr 12 14:44:08 2003 +++ b/fs/xfs/xfs_ialloc.c Sat Apr 12 14:44:08 2003 @@ -336,6 +336,21 @@ return 0; } +STATIC __inline xfs_agnumber_t +xfs_ialloc_next_ag( + xfs_mount_t *mp) +{ + xfs_agnumber_t agno; + + spin_lock(&mp->m_agirotor_lock); + agno = mp->m_agirotor; + if (++mp->m_agirotor == mp->m_maxagi) + mp->m_agirotor = 0; + spin_unlock(&mp->m_agirotor_lock); + + return agno; +} + /* * Select an allocation group to look for a free inode in, based on the parent * inode and then mode. Return the allocation group buffer. @@ -366,7 +381,7 @@ mp = tp->t_mountp; agcount = mp->m_maxagi; if (S_ISDIR(mode)) - pagno = atomicIncWithWrap((int *)&mp->m_agirotor, agcount); + pagno = xfs_ialloc_next_ag(mp); else { pagno = XFS_INO_TO_AGNO(mp, parent); if (pagno >= agcount) @@ -394,7 +409,7 @@ agbp = NULL; if (!pag->pagi_inodeok) { - atomicIncWithWrap((int *)&mp->m_agirotor, agcount); + xfs_ialloc_next_ag(mp); goto unlock_nextag; } diff -Nru a/fs/xfs/xfs_iget.c b/fs/xfs/xfs_iget.c --- a/fs/xfs/xfs_iget.c Sat Apr 12 14:44:10 2003 +++ b/fs/xfs/xfs_iget.c Sat Apr 12 14:44:10 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as diff -Nru a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c --- a/fs/xfs/xfs_inode.c Sat Apr 12 14:44:10 2003 +++ b/fs/xfs/xfs_inode.c Sat Apr 12 14:44:10 2003 @@ -3608,31 +3608,6 @@ ip->i_update_core = 1; } -/* - * xfs_ibusy_check -- Checks whether inode reference count allows unmount - * - * The value returned is one if the reference count would prevent an unmount. - */ -int -xfs_ibusy_check( - xfs_inode_t *ip, - int refs) -{ - xfs_mount_t *mp = ip->i_mount; - - if ((refs == 1) && (ip == mp->m_rootip)) - return (0); - if ((refs == 1) && (ip == mp->m_rbmip)) - return (0); - if ((refs == 1) && (ip == mp->m_rsumip)) - return (0); - if (mp->m_quotainfo && ip->i_ino == mp->m_sb.sb_uquotino) - return (0); - if (mp->m_quotainfo && ip->i_ino == mp->m_sb.sb_gquotino) - return (0); - return (1); -} - #ifdef XFS_ILOCK_TRACE void xfs_ilock_trace(xfs_inode_t *ip, int lock, unsigned int lockflags, inst_t *ra) diff -Nru a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h --- a/fs/xfs/xfs_inode.h Sat Apr 12 14:44:09 2003 +++ b/fs/xfs/xfs_inode.h Sat Apr 12 14:44:09 2003 @@ -516,7 +516,6 @@ int xfs_iextents_copy(xfs_inode_t *, xfs_bmbt_rec_t *, int); int xfs_iflush(xfs_inode_t *, uint); int xfs_iflush_all(struct xfs_mount *, int); -int xfs_ibusy_check(xfs_inode_t *, int); int xfs_iaccess(xfs_inode_t *, mode_t, cred_t *); uint xfs_iroundup(uint); void xfs_ichgtime(xfs_inode_t *, int); diff -Nru a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c --- a/fs/xfs/xfs_mount.c Sat Apr 12 14:44:07 2003 +++ b/fs/xfs/xfs_mount.c Sat Apr 12 14:44:07 2003 @@ -509,6 +509,7 @@ int i; mp->m_agfrotor = mp->m_agirotor = 0; + spinlock_init(&mp->m_agirotor_lock, "m_agirotor_lock"); mp->m_maxagi = mp->m_sb.sb_agcount; mp->m_blkbit_log = sbp->sb_blocklog + XFS_NBBYLOG; mp->m_blkbb_log = sbp->sb_blocklog - BBSHIFT; diff -Nru a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h --- a/fs/xfs/xfs_mount.h Sat Apr 12 14:44:05 2003 +++ b/fs/xfs/xfs_mount.h Sat Apr 12 14:44:05 2003 @@ -291,6 +291,7 @@ int m_bsize; /* fs logical block size */ xfs_agnumber_t m_agfrotor; /* last ag where space found */ xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */ + lock_t m_agirotor_lock;/* .. and lock protecting it */ xfs_agnumber_t m_maxagi; /* highest inode alloc group */ int m_ihsize; /* size of next field */ struct xfs_ihash *m_ihash; /* fs private inode hash table*/ diff -Nru a/fs/xfs/xfs_rw.h b/fs/xfs/xfs_rw.h --- a/fs/xfs/xfs_rw.h Sat Apr 12 14:44:06 2003 +++ b/fs/xfs/xfs_rw.h Sat Apr 12 14:44:06 2003 @@ -153,39 +153,55 @@ xfs_bioerror( struct xfs_buf *b); -/* - * XFS I/O core functions - */ -extern int xfs_bioerror_relse(struct xfs_buf *); +int +xfs_bioerror_relse( + struct xfs_buf *b); + +int +xfs_read_buf( + struct xfs_mount *mp, + xfs_buftarg_t *target, + xfs_daddr_t blkno, + int len, + uint flags, + struct xfs_buf **bpp); + +void +xfs_ioerror_alert( + char *func, + struct xfs_mount *mp, + xfs_buf_t *bp, + xfs_daddr_t blkno); /* - * Needed by xfs_rw.c + * Prototypes for functions in xfs_vnodeops.c. */ + int xfs_rwlock( - bhv_desc_t *bdp, - vrwlock_t write_lock); + bhv_desc_t *bdp, + vrwlock_t write_lock); void xfs_rwunlock( - bhv_desc_t *bdp, - vrwlock_t write_lock); + bhv_desc_t *bdp, + vrwlock_t write_lock); int -xfs_read_buf( - struct xfs_mount *mp, - xfs_buftarg_t *target, - xfs_daddr_t blkno, - int len, - uint flags, - struct xfs_buf **bpp); +xfs_change_file_space( + bhv_desc_t *bdp, + int cmd, + xfs_flock64_t *bf, + xfs_off_t offset, + cred_t *credp, + int flags); -void -xfs_ioerror_alert( - char *func, - struct xfs_mount *mp, - xfs_buf_t *bp, - xfs_daddr_t blkno); +int +xfs_set_dmattrs( + bhv_desc_t *bdp, + u_int evmask, + u_int16_t state, + cred_t *credp); #endif /* __XFS_RW_H__ */ diff -Nru a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c --- a/fs/xfs/xfs_vfsops.c Sat Apr 12 14:44:06 2003 +++ b/fs/xfs/xfs_vfsops.c Sat Apr 12 14:44:06 2003 @@ -34,9 +34,7 @@ #include -STATIC int xfs_ibusy(xfs_mount_t *); STATIC int xfs_sync(bhv_desc_t *, int, cred_t *); -STATIC int xfs_unmount(bhv_desc_t *, int, cred_t *); int xfs_init(void) @@ -485,59 +483,6 @@ return error; } -/* - * xfs_ibusy searches for a busy inode in the mounted file system. - * - * Return 0 if there are no active inodes otherwise return 1. - */ -STATIC int -xfs_ibusy( - xfs_mount_t *mp) -{ - xfs_inode_t *ip; - vnode_t *vp; - int busy; - - busy = 0; - - XFS_MOUNT_ILOCK(mp); - - ip = mp->m_inodes; - if (ip == NULL) { - XFS_MOUNT_IUNLOCK(mp); - return busy; - } - - do { - /* Skip markers inserted by xfs_sync */ - if (ip->i_mount == NULL) { - ip = ip->i_mnext; - continue; - } - - vp = XFS_ITOV_NULL(ip); - - if (vp && vn_count(vp) != 0) { - if (xfs_ibusy_check(ip, vn_count(vp)) == 0) { - ip = ip->i_mnext; - continue; - } -#ifdef DEBUG - cmn_err(CE_WARN, "%s: busy vp=0x%p ip=0x%p " - "inum %Ld count=%d", - __FUNCTION__, vp, ip, ip->i_ino, vn_count(vp)); -#endif - busy++; - } - ip = ip->i_mnext; - } while ((ip != mp->m_inodes) && !busy); - - XFS_MOUNT_IUNLOCK(mp); - - return busy; -} - - STATIC int xfs_unmount( bhv_desc_t *bdp, @@ -570,16 +515,6 @@ unmount_event_wanted = 1; unmount_event_flags = (mp->m_dmevmask & (1<m_ddev_targp); diff -Nru a/include/asm-alpha/mmzone.h b/include/asm-alpha/mmzone.h --- a/include/asm-alpha/mmzone.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-alpha/mmzone.h Sat Apr 12 14:44:09 2003 @@ -51,7 +51,7 @@ #ifdef CONFIG_DISCONTIGMEM /* - * Following are macros that each numa implmentation must define. + * Following are macros that each numa implementation must define. */ /* diff -Nru a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h --- a/include/asm-alpha/pci.h Sat Apr 12 14:44:05 2003 +++ b/include/asm-alpha/pci.h Sat Apr 12 14:44:05 2003 @@ -78,7 +78,7 @@ /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must be values that were returned from pci_alloc_consistent. SIZE must be the same as what as passed into pci_alloc_consistent. - References to the memory and mappings assosciated with CPU_ADDR or + References to the memory and mappings associated with CPU_ADDR or DMA_ADDR past this call are illegal. */ extern void pci_free_consistent(struct pci_dev *, size_t, void *, dma_addr_t); @@ -118,7 +118,7 @@ (((PTR)->LEN_NAME) = (VAL)) /* Map a set of buffers described by scatterlist in streaming mode for - PCI DMA. This is the scather-gather version of the above + PCI DMA. This is the scatter-gather version of the above pci_map_single interface. Here the scatter gather list elements are each tagged with the appropriate PCI dma address and length. They are obtained via sg_dma_{address,length}(SG). diff -Nru a/include/asm-alpha/uaccess.h b/include/asm-alpha/uaccess.h --- a/include/asm-alpha/uaccess.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-alpha/uaccess.h Sat Apr 12 14:44:09 2003 @@ -31,7 +31,7 @@ /* - * Is a address valid? This does a straighforward calculation rather + * Is a address valid? This does a straightforward calculation rather * than tests. * * Address valid if: diff -Nru a/include/asm-generic/siginfo.h b/include/asm-generic/siginfo.h --- a/include/asm-generic/siginfo.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-generic/siginfo.h Sat Apr 12 14:44:07 2003 @@ -1,6 +1,7 @@ #ifndef _ASM_GENERIC_SIGINFO_H #define _ASM_GENERIC_SIGINFO_H +#include #include typedef union sigval { @@ -106,7 +107,7 @@ #define si_fd _sifields._sigpoll._fd #ifdef __KERNEL__ -#define __SI_MASK 0xffff0000 +#define __SI_MASK 0xffff0000u #define __SI_KILL (0 << 16) #define __SI_TIMER (1 << 16) #define __SI_POLL (2 << 16) @@ -275,7 +276,7 @@ #endif -extern int copy_siginfo_to_user(struct siginfo *to, struct siginfo *from); +extern int copy_siginfo_to_user(struct siginfo __user *to, struct siginfo *from); #endif /* __KERNEL__ */ diff -Nru a/include/asm-i386/i387.h b/include/asm-i386/i387.h --- a/include/asm-i386/i387.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-i386/i387.h Sat Apr 12 14:44:09 2003 @@ -81,8 +81,8 @@ /* * Signal frame handlers... */ -extern int save_i387( struct _fpstate *buf ); -extern int restore_i387( struct _fpstate *buf ); +extern int save_i387( struct _fpstate __user *buf ); +extern int restore_i387( struct _fpstate __user *buf ); /* * ptrace request handers... diff -Nru a/include/asm-i386/mach-default/apm.h b/include/asm-i386/mach-default/apm.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/apm.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,75 @@ +/* + * include/asm-i386/mach-default/apm.h + * + * Machine specific APM BIOS functions for generic. + * Split out from apm.c by Osamu Tomita + */ + +#ifndef _ASM_APM_H +#define _ASM_APM_H + +#ifdef APM_ZERO_SEGS +# define APM_DO_ZERO_SEGS \ + "pushl %%ds\n\t" \ + "pushl %%es\n\t" \ + "xorl %%edx, %%edx\n\t" \ + "mov %%dx, %%ds\n\t" \ + "mov %%dx, %%es\n\t" \ + "mov %%dx, %%fs\n\t" \ + "mov %%dx, %%gs\n\t" +# define APM_DO_POP_SEGS \ + "popl %%es\n\t" \ + "popl %%ds\n\t" +#else +# define APM_DO_ZERO_SEGS +# define APM_DO_POP_SEGS +#endif + +static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in, + u32 *eax, u32 *ebx, u32 *ecx, + u32 *edx, u32 *esi) +{ + /* + * N.B. We do NOT need a cld after the BIOS call + * because we always save and restore the flags. + */ + __asm__ __volatile__(APM_DO_ZERO_SEGS + "pushl %%edi\n\t" + "pushl %%ebp\n\t" + "lcall *%%cs:apm_bios_entry\n\t" + "setc %%al\n\t" + "popl %%ebp\n\t" + "popl %%edi\n\t" + APM_DO_POP_SEGS + : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx), + "=S" (*esi) + : "a" (func), "b" (ebx_in), "c" (ecx_in) + : "memory", "cc"); +} + +static inline u8 apm_bios_call_simple_asm(u32 func, u32 ebx_in, + u32 ecx_in, u32 *eax) +{ + int cx, dx, si; + u8 error; + + /* + * N.B. We do NOT need a cld after the BIOS call + * because we always save and restore the flags. + */ + __asm__ __volatile__(APM_DO_ZERO_SEGS + "pushl %%edi\n\t" + "pushl %%ebp\n\t" + "lcall *%%cs:apm_bios_entry\n\t" + "setc %%bl\n\t" + "popl %%ebp\n\t" + "popl %%edi\n\t" + APM_DO_POP_SEGS + : "=a" (*eax), "=b" (error), "=c" (cx), "=d" (dx), + "=S" (si) + : "a" (func), "b" (ebx_in), "c" (ecx_in) + : "memory", "cc"); + return error; +} + +#endif /* _ASM_APM_H */ diff -Nru a/include/asm-i386/mach-default/bios_ebda.h b/include/asm-i386/mach-default/bios_ebda.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/bios_ebda.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,15 @@ +#ifndef _MACH_BIOS_EBDA_H +#define _MACH_BIOS_EBDA_H + +/* + * there is a real-mode segmented pointer pointing to the + * 4K EBDA area at 0x40E. + */ +static inline unsigned int get_bios_ebda(void) +{ + unsigned int address = *(unsigned short *)phys_to_virt(0x40E); + address <<= 4; + return address; /* 0 means none */ +} + +#endif /* _MACH_BIOS_EBDA_H */ diff -Nru a/include/asm-i386/mach-default/io_ports.h b/include/asm-i386/mach-default/io_ports.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/io_ports.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,30 @@ +/* + * arch/i386/mach-generic/io_ports.h + * + * Machine specific IO port address definition for generic. + * Written by Osamu Tomita + */ +#ifndef _MACH_IO_PORTS_H +#define _MACH_IO_PORTS_H + +/* i8253A PIT registers */ +#define PIT_MODE 0x43 +#define PIT_CH0 0x40 +#define PIT_CH2 0x42 + +/* i8259A PIC registers */ +#define PIC_MASTER_CMD 0x20 +#define PIC_MASTER_IMR 0x21 +#define PIC_MASTER_ISR PIC_MASTER_CMD +#define PIC_MASTER_POLL PIC_MASTER_ISR +#define PIC_MASTER_OCW3 PIC_MASTER_ISR +#define PIC_SLAVE_CMD 0xa0 +#define PIC_SLAVE_IMR 0xa1 + +/* i8259A PIC related value */ +#define PIC_CASCADE_IR 2 +#define MASTER_ICW4_DEFAULT 0x01 +#define SLAVE_ICW4_DEFAULT 0x01 +#define PIC_ICW4_AEOI 2 + +#endif /* !_MACH_IO_PORTS_H */ diff -Nru a/include/asm-i386/mach-default/irq_vectors.h b/include/asm-i386/mach-default/irq_vectors.h --- a/include/asm-i386/mach-default/irq_vectors.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-i386/mach-default/irq_vectors.h Sat Apr 12 14:44:06 2003 @@ -82,4 +82,11 @@ #define NR_IRQS 16 #endif +#define FPU_IRQ 13 + +#define FIRST_VM86_IRQ 3 +#define LAST_VM86_IRQ 15 +#define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) + + #endif /* _ASM_IRQ_VECTORS_H */ diff -Nru a/include/asm-i386/mach-default/mach_mpparse.h b/include/asm-i386/mach-default/mach_mpparse.h --- a/include/asm-i386/mach-default/mach_mpparse.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-i386/mach-default/mach_mpparse.h Sat Apr 12 14:44:09 2003 @@ -4,7 +4,7 @@ static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name, struct mpc_config_translation *translation) { - Dprintk("Bus #%d is %s\n", m->mpc_busid, name); +// Dprintk("Bus #%d is %s\n", m->mpc_busid, name); } static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, diff -Nru a/include/asm-i386/mach-default/mach_resources.h b/include/asm-i386/mach-default/mach_resources.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/mach_resources.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,110 @@ +/* + * include/asm-i386/mach-default/mach_resources.h + * + * Machine specific resource allocation for generic. + * Split out from setup.c by Osamu Tomita + */ +#ifndef _MACH_RESOURCES_H +#define _MACH_RESOURCES_H + +struct resource standard_io_resources[] = { + { "dma1", 0x00, 0x1f, IORESOURCE_BUSY }, + { "pic1", 0x20, 0x3f, IORESOURCE_BUSY }, + { "timer", 0x40, 0x5f, IORESOURCE_BUSY }, + { "keyboard", 0x60, 0x6f, IORESOURCE_BUSY }, + { "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY }, + { "pic2", 0xa0, 0xbf, IORESOURCE_BUSY }, + { "dma2", 0xc0, 0xdf, IORESOURCE_BUSY }, + { "fpu", 0xf0, 0xff, IORESOURCE_BUSY } +}; +#ifdef CONFIG_MELAN +standard_io_resources[1] = { "pic1", 0x20, 0x21, IORESOURCE_BUSY }; +standard_io_resources[5] = { "pic2", 0xa0, 0xa1, IORESOURCE_BUSY }; +#endif + +#define STANDARD_IO_RESOURCES (sizeof(standard_io_resources)/sizeof(struct resource)) + +static struct resource vram_resource = { "Video RAM area", 0xa0000, 0xbffff, IORESOURCE_BUSY }; + +/* System ROM resources */ +#define MAXROMS 6 +static struct resource rom_resources[MAXROMS] = { + { "System ROM", 0xF0000, 0xFFFFF, IORESOURCE_BUSY }, + { "Video ROM", 0xc0000, 0xc7fff, IORESOURCE_BUSY } +}; + +#define romsignature(x) (*(unsigned short *)(x) == 0xaa55) + +static inline void probe_video_rom(int roms) +{ + unsigned long base; + unsigned char *romstart; + + + /* Video ROM is standard at C000:0000 - C7FF:0000, check signature */ + for (base = 0xC0000; base < 0xE0000; base += 2048) { + romstart = isa_bus_to_virt(base); + if (!romsignature(romstart)) + continue; + request_resource(&iomem_resource, rom_resources + roms); + roms++; + break; + } +} + +static inline void probe_extension_roms(int roms) +{ + unsigned long base; + unsigned char *romstart; + + /* Extension roms at C800:0000 - DFFF:0000 */ + for (base = 0xC8000; base < 0xE0000; base += 2048) { + unsigned long length; + + romstart = isa_bus_to_virt(base); + if (!romsignature(romstart)) + continue; + length = romstart[2] * 512; + if (length) { + unsigned int i; + unsigned char chksum; + + chksum = 0; + for (i = 0; i < length; i++) + chksum += romstart[i]; + + /* Good checksum? */ + if (!chksum) { + rom_resources[roms].start = base; + rom_resources[roms].end = base + length - 1; + rom_resources[roms].name = "Extension ROM"; + rom_resources[roms].flags = IORESOURCE_BUSY; + + request_resource(&iomem_resource, rom_resources + roms); + roms++; + if (roms >= MAXROMS) + return; + } + } + } + + /* Final check for motherboard extension rom at E000:0000 */ + base = 0xE0000; + romstart = isa_bus_to_virt(base); + + if (romsignature(romstart)) { + rom_resources[roms].start = base; + rom_resources[roms].end = base + 65535; + rom_resources[roms].name = "Extension ROM"; + rom_resources[roms].flags = IORESOURCE_BUSY; + + request_resource(&iomem_resource, rom_resources + roms); + } +} + +static inline void request_graphics_resource(void) +{ + request_resource(&iomem_resource, &vram_resource); +} + +#endif /* !_MACH_RESOURCES_H */ diff -Nru a/include/asm-i386/mach-default/mach_time.h b/include/asm-i386/mach-default/mach_time.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/mach_time.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,122 @@ +/* + * include/asm-i386/mach-default/mach_time.h + * + * Machine specific set RTC function for generic. + * Split out from time.c by Osamu Tomita + */ +#ifndef _MACH_TIME_H +#define _MACH_TIME_H + +#include + +/* for check timing call set_rtc_mmss() 500ms */ +/* used in arch/i386/time.c::do_timer_interrupt() */ +#define USEC_AFTER 500000 +#define USEC_BEFORE 500000 + +/* + * In order to set the CMOS clock precisely, set_rtc_mmss has to be + * called 500 ms after the second nowtime has started, because when + * nowtime is written into the registers of the CMOS clock, it will + * jump to the next second precisely 500 ms later. Check the Motorola + * MC146818A or Dallas DS12887 data sheet for details. + * + * BUG: This routine does not handle hour overflow properly; it just + * sets the minutes. Usually you'll only notice that after reboot! + */ +static inline int mach_set_rtc_mmss(unsigned long nowtime) +{ + int retval = 0; + int real_seconds, real_minutes, cmos_minutes; + unsigned char save_control, save_freq_select; + + save_control = CMOS_READ(RTC_CONTROL); /* tell the clock it's being set */ + CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL); + + save_freq_select = CMOS_READ(RTC_FREQ_SELECT); /* stop and reset prescaler */ + CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT); + + cmos_minutes = CMOS_READ(RTC_MINUTES); + if (!(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) + BCD_TO_BIN(cmos_minutes); + + /* + * since we're only adjusting minutes and seconds, + * don't interfere with hour overflow. This avoids + * messing with unknown time zones but requires your + * RTC not to be off by more than 15 minutes + */ + real_seconds = nowtime % 60; + real_minutes = nowtime / 60; + if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1) + real_minutes += 30; /* correct for half hour time zone */ + real_minutes %= 60; + + if (abs(real_minutes - cmos_minutes) < 30) { + if (!(save_control & RTC_DM_BINARY) || RTC_ALWAYS_BCD) { + BIN_TO_BCD(real_seconds); + BIN_TO_BCD(real_minutes); + } + CMOS_WRITE(real_seconds,RTC_SECONDS); + CMOS_WRITE(real_minutes,RTC_MINUTES); + } else { + printk(KERN_WARNING + "set_rtc_mmss: can't update from %d to %d\n", + cmos_minutes, real_minutes); + retval = -1; + } + + /* The following flags have to be released exactly in this order, + * otherwise the DS12887 (popular MC146818A clone with integrated + * battery and quartz) will not reset the oscillator and will not + * update precisely 500 ms later. You won't find this mentioned in + * the Dallas Semiconductor data sheets, but who believes data + * sheets anyway ... -- Markus Kuhn + */ + CMOS_WRITE(save_control, RTC_CONTROL); + CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT); + + return retval; +} + +static inline unsigned long mach_get_cmos_time(void) +{ + unsigned int year, mon, day, hour, min, sec; + int i; + + /* The Linux interpretation of the CMOS clock register contents: + * When the Update-In-Progress (UIP) flag goes from 1 to 0, the + * RTC registers show the second which has precisely just started. + * Let's hope other operating systems interpret the RTC the same way. + */ + /* read RTC exactly on falling edge of update flag */ + for (i = 0 ; i < 1000000 ; i++) /* may take up to 1 second... */ + if (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP) + break; + for (i = 0 ; i < 1000000 ; i++) /* must try at least 2.228 ms */ + if (!(CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP)) + break; + do { /* Isn't this overkill ? UIP above should guarantee consistency */ + sec = CMOS_READ(RTC_SECONDS); + min = CMOS_READ(RTC_MINUTES); + hour = CMOS_READ(RTC_HOURS); + day = CMOS_READ(RTC_DAY_OF_MONTH); + mon = CMOS_READ(RTC_MONTH); + year = CMOS_READ(RTC_YEAR); + } while (sec != CMOS_READ(RTC_SECONDS)); + if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) || RTC_ALWAYS_BCD) + { + BCD_TO_BIN(sec); + BCD_TO_BIN(min); + BCD_TO_BIN(hour); + BCD_TO_BIN(day); + BCD_TO_BIN(mon); + BCD_TO_BIN(year); + } + if ((year += 1900) < 1970) + year += 100; + + return mktime(year, mon, day, hour, min, sec); +} + +#endif /* !_MACH_TIME_H */ diff -Nru a/include/asm-i386/mach-default/mach_timer.h b/include/asm-i386/mach-default/mach_timer.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/mach_timer.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,47 @@ +/* + * include/asm-i386/mach-default/mach_timer.h + * + * Machine specific calibrate_tsc() for generic. + * Split out from timer_tsc.c by Osamu Tomita + */ +/* ------ Calibrate the TSC ------- + * Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset(). + * Too much 64-bit arithmetic here to do this cleanly in C, and for + * accuracy's sake we want to keep the overhead on the CTC speaker (channel 2) + * output busy loop as low as possible. We avoid reading the CTC registers + * directly because of the awkward 8-bit access mechanism of the 82C54 + * device. + */ +#ifndef _MACH_TIMER_H +#define _MACH_TIMER_H + +#define CALIBRATE_LATCH (5 * LATCH) + +static inline void mach_prepare_counter(void) +{ + /* Set the Gate high, disable speaker */ + outb((inb(0x61) & ~0x02) | 0x01, 0x61); + + /* + * Now let's take care of CTC channel 2 + * + * Set the Gate high, program CTC channel 2 for mode 0, + * (interrupt on terminal count mode), binary count, + * load 5 * LATCH count, (LSB and MSB) to begin countdown. + * + * Some devices need a delay here. + */ + outb(0xb0, 0x43); /* binary, mode 0, LSB/MSB, Ch 2 */ + outb_p(CALIBRATE_LATCH & 0xff, 0x42); /* LSB of count */ + outb_p(CALIBRATE_LATCH >> 8, 0x42); /* MSB of count */ +} + +static inline void mach_countup(unsigned long *count) +{ + *count = 0L; + do { + *count++; + } while ((inb_p(0x61) & 0x20) == 0); +} + +#endif /* !_MACH_TIMER_H */ diff -Nru a/include/asm-i386/mach-default/mach_traps.h b/include/asm-i386/mach-default/mach_traps.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-default/mach_traps.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,29 @@ +/* + * include/asm-i386/mach-default/mach_traps.h + * + * Machine specific NMI handling for generic. + * Split out from traps.c by Osamu Tomita + */ +#ifndef _MACH_TRAPS_H +#define _MACH_TRAPS_H + +static inline void clear_mem_error(unsigned char reason) +{ + reason = (reason & 0xf) | 4; + outb(reason, 0x61); +} + +static inline unsigned char get_nmi_reason(void) +{ + return inb(0x61); +} + +static inline void reassert_nmi(void) +{ + outb(0x8f, 0x70); + inb(0x71); /* dummy */ + outb(0x0f, 0x70); + inb(0x71); /* dummy */ +} + +#endif /* !_MACH_TRAPS_H */ diff -Nru a/include/asm-i386/mach-default/smpboot_hooks.h b/include/asm-i386/mach-default/smpboot_hooks.h --- a/include/asm-i386/mach-default/smpboot_hooks.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-i386/mach-default/smpboot_hooks.h Sat Apr 12 14:44:07 2003 @@ -6,7 +6,18 @@ io_apic_irqs = 0; } -static inline void smpboot_setup_warm_reset_vector(void) +static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) +{ + CMOS_WRITE(0xa, 0xf); + local_flush_tlb(); + Dprintk("1.\n"); + *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; + Dprintk("2.\n"); + *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; + Dprintk("3.\n"); +} + +static inline void smpboot_restore_warm_reset_vector(void) { /* * Install writable page 0 entry to set BIOS data area. diff -Nru a/include/asm-i386/mach-pc9800/apm.h b/include/asm-i386/mach-pc9800/apm.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/apm.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,82 @@ +/* + * include/asm-i386/mach-pc9800/apm.h + * + * Machine specific APM BIOS functions for NEC PC9800. + * Split out from apm.c by Osamu Tomita + */ + +#ifndef _ASM_APM_H +#define _ASM_APM_H + +#include + +#ifdef APM_ZERO_SEGS +# define APM_DO_ZERO_SEGS \ + "pushl %%ds\n\t" \ + "pushl %%es\n\t" \ + "xorl %%edx, %%edx\n\t" \ + "mov %%dx, %%ds\n\t" \ + "mov %%dx, %%es\n\t" \ + "mov %%dx, %%fs\n\t" \ + "mov %%dx, %%gs\n\t" +# define APM_DO_POP_SEGS \ + "popl %%es\n\t" \ + "popl %%ds\n\t" +#else +# define APM_DO_ZERO_SEGS +# define APM_DO_POP_SEGS +#endif + +static inline void apm_bios_call_asm(u32 func, u32 ebx_in, u32 ecx_in, + u32 *eax, u32 *ebx, u32 *ecx, + u32 *edx, u32 *esi) +{ + /* + * N.B. We do NOT need a cld after the BIOS call + * because we always save and restore the flags. + */ + __asm__ __volatile__(APM_DO_ZERO_SEGS + "pushl %%edi\n\t" + "pushl %%ebp\n\t" + "pushfl\n\t" + "lcall *%%cs:apm_bios_entry\n\t" + "setc %%al\n\t" + "popl %%ebp\n\t" + "popl %%edi\n\t" + APM_DO_POP_SEGS + : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx), + "=S" (*esi) + : "a" (func), "b" (ebx_in), "c" (ecx_in) + : "memory", "cc"); +} + +static inline u8 apm_bios_call_simple_asm(u32 func, u32 ebx_in, + u32 ecx_in, u32 *eax) +{ + int cx, dx, si; + u8 error; + + /* + * N.B. We do NOT need a cld after the BIOS call + * because we always save and restore the flags. + */ + __asm__ __volatile__(APM_DO_ZERO_SEGS + "pushl %%edi\n\t" + "pushl %%ebp\n\t" + "pushfl\n\t" + "lcall *%%cs:apm_bios_entry\n\t" + "setc %%bl\n\t" + "popl %%ebp\n\t" + "popl %%edi\n\t" + APM_DO_POP_SEGS + : "=a" (*eax), "=b" (error), "=c" (cx), "=d" (dx), + "=S" (si) + : "a" (func), "b" (ebx_in), "c" (ecx_in) + : "memory", "cc"); + if (func == APM_FUNC_VERSION) + *eax = (*eax & 0xff00) | ((*eax & 0x00f0) >> 4); + + return error; +} + +#endif /* _ASM_APM_H */ diff -Nru a/include/asm-i386/mach-pc9800/bios_ebda.h b/include/asm-i386/mach-pc9800/bios_ebda.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/bios_ebda.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,14 @@ +#ifndef _MACH_BIOS_EBDA_H +#define _MACH_BIOS_EBDA_H + +/* + * PC-9800 has no EBDA. + * Its BIOS uses 0x40E for other purpose, + * Not pointer to 4K EBDA area. + */ +static inline unsigned int get_bios_ebda(void) +{ + return 0; /* 0 means none */ +} + +#endif /* _MACH_BIOS_EBDA_H */ diff -Nru a/include/asm-i386/mach-pc9800/do_timer.h b/include/asm-i386/mach-pc9800/do_timer.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/do_timer.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,82 @@ +/* defines for inline arch setup functions */ + +#include + +/** + * do_timer_interrupt_hook - hook into timer tick + * @regs: standard registers from interrupt + * + * Description: + * This hook is called immediately after the timer interrupt is ack'd. + * It's primary purpose is to allow architectures that don't possess + * individual per CPU clocks (like the CPU APICs supply) to broadcast the + * timer interrupt as a means of triggering reschedules etc. + **/ + +static inline void do_timer_interrupt_hook(struct pt_regs *regs) +{ + do_timer(regs); +/* + * In the SMP case we use the local APIC timer interrupt to do the + * profiling, except when we simulate SMP mode on a uniprocessor + * system, in that case we have to call the local interrupt handler. + */ +#ifndef CONFIG_X86_LOCAL_APIC + x86_do_profile(regs); +#else + if (!using_apic_timer) + smp_local_timer_interrupt(regs); +#endif +} + + +/* you can safely undefine this if you don't have the Neptune chipset */ + +#define BUGGY_NEPTUN_TIMER + +/** + * do_timer_overflow - process a detected timer overflow condition + * @count: hardware timer interrupt count on overflow + * + * Description: + * This call is invoked when the jiffies count has not incremented but + * the hardware timer interrupt has. It means that a timer tick interrupt + * came along while the previous one was pending, thus a tick was missed + **/ +static inline int do_timer_overflow(int count) +{ + int i; + + spin_lock(&i8259A_lock); + /* + * This is tricky when I/O APICs are used; + * see do_timer_interrupt(). + */ + i = inb(0x00); + spin_unlock(&i8259A_lock); + + /* assumption about timer being IRQ0 */ + if (i & 0x01) { + /* + * We cannot detect lost timer interrupts ... + * well, that's why we call them lost, don't we? :) + * [hmm, on the Pentium and Alpha we can ... sort of] + */ + count -= LATCH; + } else { +#ifdef BUGGY_NEPTUN_TIMER + /* + * for the Neptun bug we know that the 'latch' + * command doesn't latch the high and low value + * of the counter atomically. Thus we have to + * substract 256 from the counter + * ... funny, isnt it? :) + */ + + count -= 256; +#else + printk("do_slow_gettimeoffset(): hardware timer problem?\n"); +#endif + } + return count; +} diff -Nru a/include/asm-i386/mach-pc9800/io_ports.h b/include/asm-i386/mach-pc9800/io_ports.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/io_ports.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,30 @@ +/* + * arch/i386/mach-pc9800/io_ports.h + * + * Machine specific IO port address definition for PC-9800. + * Written by Osamu Tomita + */ +#ifndef _MACH_IO_PORTS_H +#define _MACH_IO_PORTS_H + +/* i8253A PIT registers */ +#define PIT_MODE 0x77 +#define PIT_CH0 0x71 +#define PIT_CH2 0x75 + +/* i8259A PIC registers */ +#define PIC_MASTER_CMD 0x00 +#define PIC_MASTER_IMR 0x02 +#define PIC_MASTER_ISR PIC_MASTER_CMD +#define PIC_MASTER_POLL PIC_MASTER_ISR +#define PIC_MASTER_OCW3 PIC_MASTER_ISR +#define PIC_SLAVE_CMD 0x08 +#define PIC_SLAVE_IMR 0x0a + +/* i8259A PIC related values */ +#define PIC_CASCADE_IR 7 +#define MASTER_ICW4_DEFAULT 0x1d +#define SLAVE_ICW4_DEFAULT 0x09 +#define PIC_ICW4_AEOI 0x02 + +#endif /* !_MACH_IO_PORTS_H */ diff -Nru a/include/asm-i386/mach-pc9800/irq_vectors.h b/include/asm-i386/mach-pc9800/irq_vectors.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/irq_vectors.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,93 @@ +/* + * This file should contain #defines for all of the interrupt vector + * numbers used by this architecture. + * + * In addition, there are some standard defines: + * + * FIRST_EXTERNAL_VECTOR: + * The first free place for external interrupts + * + * SYSCALL_VECTOR: + * The IRQ vector a syscall makes the user to kernel transition + * under. + * + * TIMER_IRQ: + * The IRQ number the timer interrupt comes in at. + * + * NR_IRQS: + * The total number of interrupt vectors (including all the + * architecture specific interrupts) needed. + * + */ +#ifndef _ASM_IRQ_VECTORS_H +#define _ASM_IRQ_VECTORS_H + +/* + * IDT vectors usable for external interrupt sources start + * at 0x20: + */ +#define FIRST_EXTERNAL_VECTOR 0x20 + +#define SYSCALL_VECTOR 0x80 + +/* + * Vectors 0x20-0x2f are used for ISA interrupts. + */ + +/* + * Special IRQ vectors used by the SMP architecture, 0xf0-0xff + * + * some of the following vectors are 'rare', they are merged + * into a single vector (CALL_FUNCTION_VECTOR) to save vector space. + * TLB, reschedule and local APIC vectors are performance-critical. + * + * Vectors 0xf0-0xfa are free (reserved for future Linux use). + */ +#define SPURIOUS_APIC_VECTOR 0xff +#define ERROR_APIC_VECTOR 0xfe +#define INVALIDATE_TLB_VECTOR 0xfd +#define RESCHEDULE_VECTOR 0xfc +#define CALL_FUNCTION_VECTOR 0xfb + +#define THERMAL_APIC_VECTOR 0xf0 +/* + * Local APIC timer IRQ vector is on a different priority level, + * to work around the 'lost local interrupt if more than 2 IRQ + * sources per level' errata. + */ +#define LOCAL_TIMER_VECTOR 0xef + +/* + * First APIC vector available to drivers: (vectors 0x30-0xee) + * we start at 0x31 to spread out vectors evenly between priority + * levels. (0x80 is the syscall vector) + */ +#define FIRST_DEVICE_VECTOR 0x31 +#define FIRST_SYSTEM_VECTOR 0xef + +#define TIMER_IRQ 0 + +/* + * 16 8259A IRQ's, 208 potential APIC interrupt sources. + * Right now the APIC is mostly only used for SMP. + * 256 vectors is an architectural limit. (we can have + * more than 256 devices theoretically, but they will + * have to use shared interrupts) + * Since vectors 0x00-0x1f are used/reserved for the CPU, + * the usable vector space is 0x20-0xff (224 vectors) + */ +#ifdef CONFIG_X86_IO_APIC +#define NR_IRQS 224 +#else +#define NR_IRQS 16 +#endif + +#define FPU_IRQ 8 + +#define FIRST_VM86_IRQ 2 +#define LAST_VM86_IRQ 15 +#define invalid_vm86_irq(irq) ((irq) < 2 || (irq) == 7 || (irq) > 15) + +#endif /* _ASM_IRQ_VECTORS_H */ + + diff -Nru a/include/asm-i386/mach-pc9800/mach_resources.h b/include/asm-i386/mach-pc9800/mach_resources.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/mach_resources.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,191 @@ +/* + * include/asm-i386/mach-pc9800/mach_resources.h + * + * Machine specific resource allocation for PC-9800. + * Written by Osamu Tomita + */ +#ifndef _MACH_RESOURCES_H +#define _MACH_RESOURCES_H + +static char str_pic1[] = "pic1"; +static char str_dma[] = "dma"; +static char str_pic2[] = "pic2"; +static char str_calender_clock[] = "calender clock"; +static char str_system[] = "system"; +static char str_nmi_control[] = "nmi control"; +static char str_kanji_rom[] = "kanji rom"; +static char str_keyboard[] = "keyboard"; +static char str_text_gdc[] = "text gdc"; +static char str_crtc[] = "crtc"; +static char str_timer[] = "timer"; +static char str_graphic_gdc[] = "graphic gdc"; +static char str_dma_ex_bank[] = "dma ex. bank"; +static char str_beep_freq[] = "beep freq."; +static char str_mouse_pio[] = "mouse pio"; +struct resource standard_io_resources[] = { + { str_pic1, 0x00, 0x00, IORESOURCE_BUSY }, + { str_dma, 0x01, 0x01, IORESOURCE_BUSY }, + { str_pic1, 0x02, 0x02, IORESOURCE_BUSY }, + { str_dma, 0x03, 0x03, IORESOURCE_BUSY }, + { str_dma, 0x05, 0x05, IORESOURCE_BUSY }, + { str_dma, 0x07, 0x07, IORESOURCE_BUSY }, + { str_pic2, 0x08, 0x08, IORESOURCE_BUSY }, + { str_dma, 0x09, 0x09, IORESOURCE_BUSY }, + { str_pic2, 0x0a, 0x0a, IORESOURCE_BUSY }, + { str_dma, 0x0b, 0x0b, IORESOURCE_BUSY }, + { str_dma, 0x0d, 0x0d, IORESOURCE_BUSY }, + { str_dma, 0x0f, 0x0f, IORESOURCE_BUSY }, + { str_dma, 0x11, 0x11, IORESOURCE_BUSY }, + { str_dma, 0x13, 0x13, IORESOURCE_BUSY }, + { str_dma, 0x15, 0x15, IORESOURCE_BUSY }, + { str_dma, 0x17, 0x17, IORESOURCE_BUSY }, + { str_dma, 0x19, 0x19, IORESOURCE_BUSY }, + { str_dma, 0x1b, 0x1b, IORESOURCE_BUSY }, + { str_dma, 0x1d, 0x1d, IORESOURCE_BUSY }, + { str_dma, 0x1f, 0x1f, IORESOURCE_BUSY }, + { str_calender_clock, 0x20, 0x20, 0 }, + { str_dma, 0x21, 0x21, IORESOURCE_BUSY }, + { str_calender_clock, 0x22, 0x22, 0 }, + { str_dma, 0x23, 0x23, IORESOURCE_BUSY }, + { str_dma, 0x25, 0x25, IORESOURCE_BUSY }, + { str_dma, 0x27, 0x27, IORESOURCE_BUSY }, + { str_dma, 0x29, 0x29, IORESOURCE_BUSY }, + { str_dma, 0x2b, 0x2b, IORESOURCE_BUSY }, + { str_dma, 0x2d, 0x2d, IORESOURCE_BUSY }, + { str_system, 0x31, 0x31, IORESOURCE_BUSY }, + { str_system, 0x33, 0x33, IORESOURCE_BUSY }, + { str_system, 0x35, 0x35, IORESOURCE_BUSY }, + { str_system, 0x37, 0x37, IORESOURCE_BUSY }, + { str_nmi_control, 0x50, 0x50, IORESOURCE_BUSY }, + { str_nmi_control, 0x52, 0x52, IORESOURCE_BUSY }, + { "time stamp", 0x5c, 0x5f, IORESOURCE_BUSY }, + { str_kanji_rom, 0xa1, 0xa1, IORESOURCE_BUSY }, + { str_kanji_rom, 0xa3, 0xa3, IORESOURCE_BUSY }, + { str_kanji_rom, 0xa5, 0xa5, IORESOURCE_BUSY }, + { str_kanji_rom, 0xa7, 0xa7, IORESOURCE_BUSY }, + { str_kanji_rom, 0xa9, 0xa9, IORESOURCE_BUSY }, + { str_keyboard, 0x41, 0x41, IORESOURCE_BUSY }, + { str_keyboard, 0x43, 0x43, IORESOURCE_BUSY }, + { str_text_gdc, 0x60, 0x60, IORESOURCE_BUSY }, + { str_text_gdc, 0x62, 0x62, IORESOURCE_BUSY }, + { str_text_gdc, 0x64, 0x64, IORESOURCE_BUSY }, + { str_text_gdc, 0x66, 0x66, IORESOURCE_BUSY }, + { str_text_gdc, 0x68, 0x68, IORESOURCE_BUSY }, + { str_text_gdc, 0x6a, 0x6a, IORESOURCE_BUSY }, + { str_text_gdc, 0x6c, 0x6c, IORESOURCE_BUSY }, + { str_text_gdc, 0x6e, 0x6e, IORESOURCE_BUSY }, + { str_crtc, 0x70, 0x70, IORESOURCE_BUSY }, + { str_crtc, 0x72, 0x72, IORESOURCE_BUSY }, + { str_crtc, 0x74, 0x74, IORESOURCE_BUSY }, + { str_crtc, 0x74, 0x74, IORESOURCE_BUSY }, + { str_crtc, 0x76, 0x76, IORESOURCE_BUSY }, + { str_crtc, 0x78, 0x78, IORESOURCE_BUSY }, + { str_crtc, 0x7a, 0x7a, IORESOURCE_BUSY }, + { str_timer, 0x71, 0x71, IORESOURCE_BUSY }, + { str_timer, 0x73, 0x73, IORESOURCE_BUSY }, + { str_timer, 0x75, 0x75, IORESOURCE_BUSY }, + { str_timer, 0x77, 0x77, IORESOURCE_BUSY }, + { str_graphic_gdc, 0xa0, 0xa0, IORESOURCE_BUSY }, + { str_graphic_gdc, 0xa2, 0xa2, IORESOURCE_BUSY }, + { str_graphic_gdc, 0xa4, 0xa4, IORESOURCE_BUSY }, + { str_graphic_gdc, 0xa6, 0xa6, IORESOURCE_BUSY }, + { "cpu", 0xf0, 0xf7, IORESOURCE_BUSY }, + { "fpu", 0xf8, 0xff, IORESOURCE_BUSY }, + { str_dma_ex_bank, 0x0e05, 0x0e05, 0 }, + { str_dma_ex_bank, 0x0e07, 0x0e07, 0 }, + { str_dma_ex_bank, 0x0e09, 0x0e09, 0 }, + { str_dma_ex_bank, 0x0e0b, 0x0e0b, 0 }, + { str_beep_freq, 0x3fd9, 0x3fd9, IORESOURCE_BUSY }, + { str_beep_freq, 0x3fdb, 0x3fdb, IORESOURCE_BUSY }, + { str_beep_freq, 0x3fdd, 0x3fdd, IORESOURCE_BUSY }, + { str_beep_freq, 0x3fdf, 0x3fdf, IORESOURCE_BUSY }, + /* All PC-9800 have (exactly) one mouse interface. */ + { str_mouse_pio, 0x7fd9, 0x7fd9, 0 }, + { str_mouse_pio, 0x7fdb, 0x7fdb, 0 }, + { str_mouse_pio, 0x7fdd, 0x7fdd, 0 }, + { str_mouse_pio, 0x7fdf, 0x7fdf, 0 }, + { "mouse timer", 0xbfdb, 0xbfdb, 0 }, + { "mouse irq", 0x98d7, 0x98d7, 0 }, +}; + +#define STANDARD_IO_RESOURCES (sizeof(standard_io_resources)/sizeof(struct resource)) + +static struct resource tvram_resource = { "Text VRAM/CG window", 0xa0000, 0xa4fff, IORESOURCE_BUSY }; +static struct resource gvram_brg_resource = { "Graphic VRAM (B/R/G)", 0xa8000, 0xbffff, IORESOURCE_BUSY }; +static struct resource gvram_e_resource = { "Graphic VRAM (E)", 0xe0000, 0xe7fff, IORESOURCE_BUSY }; + +/* System ROM resources */ +#define MAXROMS 6 +static struct resource rom_resources[MAXROMS] = { + { "System ROM", 0xe8000, 0xfffff, IORESOURCE_BUSY } +}; + +static inline void probe_video_rom(int roms) +{ + /* PC-9800 has no video ROM */ +} + +static inline void probe_extension_roms(int roms) +{ + int i; + __u8 *xrom_id; + + xrom_id = (__u8 *) isa_bus_to_virt(PC9800SCA_XROM_ID + 0x10); + + for (i = 0; i < 16; i++) { + if (xrom_id[i] & 0x80) { + int j; + + for (j = i + 1; j < 16 && (xrom_id[j] & 0x80); j++) + ; + rom_resources[roms].start = 0x0d0000 + i * 0x001000; + rom_resources[roms].end = 0x0d0000 + j * 0x001000 - 1; + rom_resources[roms].name = "Extension ROM"; + rom_resources[roms].flags = IORESOURCE_BUSY; + + request_resource(&iomem_resource, + rom_resources + roms); + if (++roms >= MAXROMS) + return; + } + } +} + +static inline void request_graphics_resource(void) +{ + int i; + + if (PC9800_HIGHRESO_P()) { + tvram_resource.start = 0xe0000; + tvram_resource.end = 0xe4fff; + gvram_brg_resource.name = "Graphic VRAM"; + gvram_brg_resource.start = 0xc0000; + gvram_brg_resource.end = 0xdffff; + } + + request_resource(&iomem_resource, &tvram_resource); + request_resource(&iomem_resource, &gvram_brg_resource); + if (!PC9800_HIGHRESO_P()) + request_resource(&iomem_resource, &gvram_e_resource); + + if (PC9800_HIGHRESO_P() || PC9800_9821_P()) { + static char graphics[] = "graphics"; + static struct resource graphics_resources[] = { + { graphics, 0x9a0, 0x9a0, 0 }, + { graphics, 0x9a2, 0x9a2, 0 }, + { graphics, 0x9a4, 0x9a4, 0 }, + { graphics, 0x9a6, 0x9a6, 0 }, + { graphics, 0x9a8, 0x9a8, 0 }, + { graphics, 0x9aa, 0x9aa, 0 }, + { graphics, 0x9ac, 0x9ac, 0 }, + { graphics, 0x9ae, 0x9ae, 0 }, + }; + +#define GRAPHICS_RESOURCES (sizeof(graphics_resources)/sizeof(struct resource)) + + for (i = 0; i < GRAPHICS_RESOURCES; i++) + request_resource(&ioport_resource, graphics_resources + i); + } +} + +#endif /* !_MACH_RESOURCES_H */ diff -Nru a/include/asm-i386/mach-pc9800/mach_time.h b/include/asm-i386/mach-pc9800/mach_time.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/mach_time.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,100 @@ +/* + * include/asm-i386/mach-pc9800/mach_time.h + * + * Machine specific set RTC function for PC-9800. + * Written by Osamu Tomita + */ +#ifndef _MACH_TIME_H +#define _MACH_TIME_H + +#include +#include + +/* for check timing call set_rtc_mmss() */ +/* used in arch/i386/time.c::do_timer_interrupt() */ +/* + * Because PC-9800's RTC (NEC uPD4990A) does not allow setting + * time partially, we always have to read-modify-write the + * entire time (including year) so that set_rtc_mmss() will + * take quite much time to execute. You may want to relax + * RTC resetting interval (currently ~11 minuts)... + */ +#define USEC_AFTER 1000000 +#define USEC_BEFORE 0 + +static inline int mach_set_rtc_mmss(unsigned long nowtime) +{ + int retval = 0; + int real_seconds, real_minutes, cmos_minutes; + struct upd4990a_raw_data data; + + upd4990a_get_time(&data, 1); + cmos_minutes = BCD2BIN(data.min); + + /* + * since we're only adjusting minutes and seconds, + * don't interfere with hour overflow. This avoids + * messing with unknown time zones but requires your + * RTC not to be off by more than 15 minutes + */ + real_seconds = nowtime % 60; + real_minutes = nowtime / 60; + if (((abs(real_minutes - cmos_minutes) + 15) / 30) & 1) + real_minutes += 30; /* correct for half hour time zone */ + real_minutes %= 60; + + if (abs(real_minutes - cmos_minutes) < 30) { + u8 temp_seconds = (real_seconds / 10) * 16 + real_seconds % 10; + u8 temp_minutes = (real_minutes / 10) * 16 + real_minutes % 10; + + if (data.sec != temp_seconds || data.min != temp_minutes) { + data.sec = temp_seconds; + data.min = temp_minutes; + upd4990a_set_time(&data, 1); + } + } else { + printk(KERN_WARNING + "set_rtc_mmss: can't update from %d to %d\n", + cmos_minutes, real_minutes); + retval = -1; + } + + /* uPD4990A users' manual says we should issue Register Hold + * command after reading time, or future Time Read command + * may not work. When we have set the time, this also starts + * the clock. + */ + upd4990a_serial_command(UPD4990A_REGISTER_HOLD); + + return retval; +} + +static inline unsigned long mach_get_cmos_time(void) +{ + int i; + u8 prev, cur; + unsigned int year; + struct upd4990a_raw_data data; + + /* Connect uPD4990A's DATA OUT pin to its 1Hz reference clock. */ + upd4990a_serial_command(UPD4990A_REGISTER_HOLD); + + /* Catch rising edge of reference clock. */ + prev = ~UPD4990A_READ_DATA(); + for (i = 0; i < 1800000; i++) { /* may take up to 1 second... */ + __asm__ ("outb %%al,%0" : : "N" (0x5f)); /* 0.6usec delay */ + cur = UPD4990A_READ_DATA(); + if (!(prev & cur & 1)) + break; + prev = ~cur; + } + + upd4990a_get_time(&data, 0); + + if ((year = BCD2BIN(data.year) + 1900) < 1995) + year += 100; + return mktime(year, data.mon, BCD2BIN(data.mday), BCD2BIN(data.hour), + BCD2BIN(data.min), BCD2BIN(data.sec)); +} + +#endif /* !_MACH_TIME_H */ diff -Nru a/include/asm-i386/mach-pc9800/mach_timer.h b/include/asm-i386/mach-pc9800/mach_timer.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/mach_timer.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,31 @@ +/* + * include/asm-i386/mach-pc9800/mach_timer.h + * + * Machine specific calibrate_tsc() for PC-9800. + * Written by Osamu Tomita + */ +/* ------ Calibrate the TSC ------- + * PC-9800: + * CTC cannot be used because some models (especially + * note-machines) may disable clock to speaker channel (#1) + * unless speaker is enabled. We use ARTIC instead. + */ +#ifndef _MACH_TIMER_H +#define _MACH_TIMER_H + +#define CALIBRATE_LATCH (5 * 307200/HZ) /* 0.050sec * 307200Hz = 15360 */ + +static inline void mach_prepare_counter(void) +{ + /* ARTIC can't be stopped nor reset. So we wait roundup. */ + while (inw(0x5c)); +} + +static inline void mach_countup(unsigned long *count) +{ + do { + *count = inw(0x5c); + } while (*count < CALIBRATE_LATCH); +} + +#endif /* !_MACH_TIMER_H */ diff -Nru a/include/asm-i386/mach-pc9800/mach_traps.h b/include/asm-i386/mach-pc9800/mach_traps.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/mach_traps.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,27 @@ +/* + * include/asm-i386/mach-pc9800/mach_traps.h + * + * Machine specific NMI handling for PC-9800. + * Written by Osamu Tomita + */ +#ifndef _MACH_TRAPS_H +#define _MACH_TRAPS_H + +static inline void clear_mem_error(unsigned char reason) +{ + outb(0x08, 0x37); + outb(0x09, 0x37); +} + +static inline unsigned char get_nmi_reason(void) +{ + return (inb(0x33) & 6) ? 0x80 : 0; +} + +static inline void reassert_nmi(void) +{ + outb(0x09, 0x50); /* disable NMI once */ + outb(0x09, 0x52); /* re-enable it */ +} + +#endif /* !_MACH_TRAPS_H */ diff -Nru a/include/asm-i386/mach-pc9800/mach_wakecpu.h b/include/asm-i386/mach-pc9800/mach_wakecpu.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/mach_wakecpu.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,45 @@ +#ifndef __ASM_MACH_WAKECPU_H +#define __ASM_MACH_WAKECPU_H + +/* + * This file copes with machines that wakeup secondary CPUs by the + * INIT, INIT, STARTUP sequence. + */ + +#define WAKE_SECONDARY_VIA_INIT + +/* + * On PC-9800, continuation on warm reset is done by loading + * %ss:%sp from 0x0000:0404 and executing 'lret', so: + */ +#define TRAMPOLINE_LOW phys_to_virt(0x4fa) +#define TRAMPOLINE_HIGH phys_to_virt(0x4fc) + +#define boot_cpu_apicid boot_cpu_physical_apicid + +static inline void wait_for_init_deassert(atomic_t *deassert) +{ + while (!atomic_read(deassert)); + return; +} + +/* Nothing to do for most platforms, since cleared by the INIT cycle */ +static inline void smp_callin_clear_local_apic(void) +{ +} + +static inline void store_NMI_vector(unsigned short *high, unsigned short *low) +{ +} + +static inline void restore_NMI_vector(unsigned short *high, unsigned short *low) +{ +} + +#if APIC_DEBUG + #define inquire_remote_apic(apicid) __inquire_remote_apic(apicid) +#else + #define inquire_remote_apic(apicid) {} +#endif + +#endif /* __ASM_MACH_WAKECPU_H */ diff -Nru a/include/asm-i386/mach-pc9800/smpboot_hooks.h b/include/asm-i386/mach-pc9800/smpboot_hooks.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/mach-pc9800/smpboot_hooks.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,52 @@ +/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws + * which needs to alter them. */ + +static inline void smpboot_clear_io_apic_irqs(void) +{ + io_apic_irqs = 0; +} + +static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) +{ + /* reset code is stored in 8255 on PC-9800. */ + outb(0x0e, 0x37); /* SHUT0 = 0 */ + local_flush_tlb(); + Dprintk("1.\n"); + *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; + Dprintk("2.\n"); + *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; + Dprintk("3.\n"); + /* + * On PC-9800, continuation on warm reset is done by loading + * %ss:%sp from 0x0000:0404 and executing 'lret', so: + */ + /* 0x3f0 is on unused interrupt vector and should be safe... */ + *((volatile unsigned long *) phys_to_virt(0x404)) = 0x000003f0; + Dprintk("4.\n"); +} + +static inline void smpboot_restore_warm_reset_vector(void) +{ + /* + * Install writable page 0 entry to set BIOS data area. + */ + local_flush_tlb(); + + /* + * Paranoid: Set warm reset code and vector here back + * to default values. + */ + outb(0x0f, 0x37); /* SHUT0 = 1 */ + + *((volatile long *) phys_to_virt(0x404)) = 0; +} + +static inline void smpboot_setup_io_apic(void) +{ + /* + * Here we can be sure that there is an IO-APIC in the system. Let's + * go and set it up: + */ + if (!skip_ioapic_setup && nr_ioapics) + setup_IO_APIC(); +} diff -Nru a/include/asm-i386/mach-visws/irq_vectors.h b/include/asm-i386/mach-visws/irq_vectors.h --- a/include/asm-i386/mach-visws/irq_vectors.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-i386/mach-visws/irq_vectors.h Sat Apr 12 14:44:06 2003 @@ -51,4 +51,10 @@ */ #define NR_IRQS 224 +#define FPU_IRQ 13 + +#define FIRST_VM86_IRQ 3 +#define LAST_VM86_IRQ 15 +#define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) + #endif /* _ASM_IRQ_VECTORS_H */ diff -Nru a/include/asm-i386/mach-visws/smpboot_hooks.h b/include/asm-i386/mach-visws/smpboot_hooks.h --- a/include/asm-i386/mach-visws/smpboot_hooks.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-i386/mach-visws/smpboot_hooks.h Sat Apr 12 14:44:06 2003 @@ -1,10 +1,21 @@ +static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) +{ + CMOS_WRITE(0xa, 0xf); + local_flush_tlb(); + Dprintk("1.\n"); + *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; + Dprintk("2.\n"); + *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; + Dprintk("3.\n"); +} + /* for visws do nothing for any of these */ static inline void smpboot_clear_io_apic_irqs(void) { } -static inline void smpboot_setup_warm_reset_vector(void) +static inline void smpboot_restore_warm_reset_vector(void) { } diff -Nru a/include/asm-i386/mach-voyager/irq_vectors.h b/include/asm-i386/mach-voyager/irq_vectors.h --- a/include/asm-i386/mach-voyager/irq_vectors.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-i386/mach-voyager/irq_vectors.h Sat Apr 12 14:44:06 2003 @@ -57,6 +57,12 @@ #define NR_IRQS 224 +#define FPU_IRQ 13 + +#define FIRST_VM86_IRQ 3 +#define LAST_VM86_IRQ 15 +#define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15) + #ifndef __ASSEMBLY__ extern asmlinkage void vic_cpi_interrupt(void); extern asmlinkage void vic_sys_interrupt(void); diff -Nru a/include/asm-i386/math_emu.h b/include/asm-i386/math_emu.h --- a/include/asm-i386/math_emu.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-i386/math_emu.h Sat Apr 12 14:44:09 2003 @@ -3,8 +3,8 @@ #include -int restore_i387_soft(void *s387, struct _fpstate *buf); -int save_i387_soft(void *s387, struct _fpstate * buf); +int restore_i387_soft(void *s387, struct _fpstate __user *buf); +int save_i387_soft(void *s387, struct _fpstate __user *buf); /* This structure matches the layout of the data saved to the stack following a device-not-present interrupt, part of it saved diff -Nru a/include/asm-i386/pc9800.h b/include/asm-i386/pc9800.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-i386/pc9800.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,27 @@ +/* + * PC-9800 machine types. + * + * Copyright (C) 1999 TAKAI Kosuke + * (Linux/98 Project) + */ + +#ifndef _ASM_PC9800_H_ +#define _ASM_PC9800_H_ + +#include +#include + +#define __PC9800SCA(type, pa) (*(type *) phys_to_virt(pa)) +#define __PC9800SCA_TEST_BIT(pa, n) \ + ((__PC9800SCA(u8, pa) & (1U << (n))) != 0) + +#define PC9800_HIGHRESO_P() __PC9800SCA_TEST_BIT(PC9800SCA_BIOS_FLAG, 3) +#define PC9800_8MHz_P() __PC9800SCA_TEST_BIT(PC9800SCA_BIOS_FLAG, 7) + + /* 0x2198 is 98 21 on memory... */ +#define PC9800_9821_P() (__PC9800SCA(u16, PC9821SCA_ROM_ID) == 0x2198) + +/* Note PC9821_...() are valid only when PC9800_9821_P() was true. */ +#define PC9821_IDEIF_DOUBLE_P() __PC9800SCA_TEST_BIT(PC9821SCA_ROM_FLAG4, 4) + +#endif diff -Nru a/include/asm-i386/sigcontext.h b/include/asm-i386/sigcontext.h --- a/include/asm-i386/sigcontext.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-i386/sigcontext.h Sat Apr 12 14:44:07 2003 @@ -1,6 +1,8 @@ #ifndef _ASMi386_SIGCONTEXT_H #define _ASMi386_SIGCONTEXT_H +#include + /* * As documented in the iBCS2 standard.. * @@ -74,7 +76,7 @@ unsigned long eflags; unsigned long esp_at_signal; unsigned short ss, __ssh; - struct _fpstate * fpstate; + struct _fpstate __user * fpstate; unsigned long oldmask; unsigned long cr2; }; diff -Nru a/include/asm-i386/signal.h b/include/asm-i386/signal.h --- a/include/asm-i386/signal.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-i386/signal.h Sat Apr 12 14:44:06 2003 @@ -86,13 +86,13 @@ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single * Unix names RESETHAND and NODEFER respectively. */ -#define SA_NOCLDSTOP 0x00000001 -#define SA_NOCLDWAIT 0x00000002 -#define SA_SIGINFO 0x00000004 -#define SA_ONSTACK 0x08000000 -#define SA_RESTART 0x10000000 -#define SA_NODEFER 0x40000000 -#define SA_RESETHAND 0x80000000 +#define SA_NOCLDSTOP 0x00000001u +#define SA_NOCLDWAIT 0x00000002u +#define SA_SIGINFO 0x00000004u +#define SA_ONSTACK 0x08000000u +#define SA_RESTART 0x10000000u +#define SA_NODEFER 0x40000000u +#define SA_RESETHAND 0x80000000u #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND diff -Nru a/include/asm-i386/uaccess.h b/include/asm-i386/uaccess.h --- a/include/asm-i386/uaccess.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-i386/uaccess.h Sat Apr 12 14:44:06 2003 @@ -110,7 +110,7 @@ * * See access_ok() for more details. */ -static inline int verify_area(int type, const void * addr, unsigned long size) +static inline int verify_area(int type, const void __user * addr, unsigned long size) { return access_ok(type,addr,size) ? 0 : -EFAULT; } @@ -373,8 +373,8 @@ : "m"(__m(addr)), "i"(errret), "0"(err)) -unsigned long __copy_to_user_ll(void *to, const void *from, unsigned long n); -unsigned long __copy_from_user_ll(void *to, const void *from, unsigned long n); +unsigned long __copy_to_user_ll(void __user *to, const void *from, unsigned long n); +unsigned long __copy_from_user_ll(void *to, const void __user *from, unsigned long n); /* * Here we special-case 1, 2 and 4-byte copy_*_user invocations. On a fault @@ -398,7 +398,7 @@ * On success, this will be zero. */ static inline unsigned long -__copy_to_user(void *to, const void *from, unsigned long n) +__copy_to_user(void __user *to, const void *from, unsigned long n) { if (__builtin_constant_p(n)) { unsigned long ret; @@ -436,7 +436,7 @@ * data to the requested size using zero bytes. */ static inline unsigned long -__copy_from_user(void *to, const void *from, unsigned long n) +__copy_from_user(void *to, const void __user *from, unsigned long n) { if (__builtin_constant_p(n)) { unsigned long ret; @@ -470,7 +470,7 @@ * On success, this will be zero. */ static inline unsigned long -copy_to_user(void *to, const void *from, unsigned long n) +copy_to_user(void __user *to, const void *from, unsigned long n) { if (access_ok(VERIFY_WRITE, to, n)) n = __copy_to_user(to, from, n); @@ -494,15 +494,15 @@ * data to the requested size using zero bytes. */ static inline unsigned long -copy_from_user(void *to, const void *from, unsigned long n) +copy_from_user(void *to, const void __user *from, unsigned long n) { if (access_ok(VERIFY_READ, from, n)) n = __copy_from_user(to, from, n); return n; } -long strncpy_from_user(char *dst, const char *src, long count); -long __strncpy_from_user(char *dst, const char *src, long count); +long strncpy_from_user(char *dst, const char __user *src, long count); +long __strncpy_from_user(char *dst, const char __user *src, long count); /** * strlen_user: - Get the size of a string in user space. @@ -520,8 +520,8 @@ */ #define strlen_user(str) strnlen_user(str, ~0UL >> 1) -long strnlen_user(const char *str, long n); -unsigned long clear_user(void *mem, unsigned long len); -unsigned long __clear_user(void *mem, unsigned long len); +long strnlen_user(const char __user *str, long n); +unsigned long clear_user(void __user *mem, unsigned long len); +unsigned long __clear_user(void __user *mem, unsigned long len); #endif /* __i386_UACCESS_H */ diff -Nru a/include/asm-ia64/acpi-ext.h b/include/asm-ia64/acpi-ext.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-ia64/acpi-ext.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,32 @@ +/* + * ia64/platform/hp/common/hp_acpi.h + * + * Copyright (C) 2003 Hewlett-Packard + * Copyright (C) Alex Williamson + * + * Vendor specific extensions to ACPI. The HP-specific extensiosn are also used by NEC. + */ +#ifndef _ASM_IA64_ACPI_EXT_H +#define _ASM_IA64_ACPI_EXT_H + +#include + +#define HP_CCSR_LENGTH 0x21 +#define HP_CCSR_TYPE 0x2 +#define HP_CCSR_GUID EFI_GUID(0x69e9adf9, 0x924f, 0xab5f, \ + 0xf6, 0x4a, 0x24, 0xd2, 0x01, 0x37, 0x0e, 0xad) + +struct acpi_hp_vendor_long { + u8 guid_id; + u8 guid[16]; + u8 csr_base[8]; + u8 csr_length[8]; +}; + +extern acpi_status hp_acpi_csr_space (acpi_handle, u64 *base, u64 *length); +extern acpi_status acpi_get_crs (acpi_handle, struct acpi_buffer *); +extern struct acpi_resource *acpi_get_crs_next (struct acpi_buffer *, int *); +extern union acpi_resource_data *acpi_get_crs_type (struct acpi_buffer *, int *, int); +extern void acpi_dispose_crs (struct acpi_buffer *); + +#endif /* _ASM_IA64_ACPI_EXT_H */ diff -Nru a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h --- a/include/asm-ia64/acpi.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-ia64/acpi.h Sat Apr 12 14:44:09 2003 @@ -100,7 +100,9 @@ int acpi_request_vector (u32 int_type); int acpi_get_prt (struct pci_vector_struct **vectors, int *count); int acpi_get_interrupt_model (int *type); +int acpi_register_irq (u32 gsi, u32 polarity, u32 trigger); int acpi_irq_to_vector (u32 irq); +int acpi_get_addr_space (void *obj, u8 type, u64 *base, u64 *length,u64 *tra); #ifdef CONFIG_ACPI_NUMA #include diff -Nru a/include/asm-ia64/atomic.h b/include/asm-ia64/atomic.h --- a/include/asm-ia64/atomic.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/atomic.h Sat Apr 12 14:44:06 2003 @@ -55,6 +55,13 @@ return new; } +#define atomic_add_return(i,v) \ + ((__builtin_constant_p(i) && \ + ( (i == 1) || (i == 4) || (i == 8) || (i == 16) \ + || (i == -1) || (i == -4) || (i == -8) || (i == -16))) \ + ? ia64_fetch_and_add(i, &(v)->counter) \ + : ia64_atomic_add(i, v)) + /* * Atomically add I to V and return TRUE if the resulting value is * negative. @@ -62,15 +69,9 @@ static __inline__ int atomic_add_negative (int i, atomic_t *v) { - return ia64_atomic_add(i, v) < 0; + return atomic_add_return(i, v) < 0; } -#define atomic_add_return(i,v) \ - ((__builtin_constant_p(i) && \ - ( (i == 1) || (i == 4) || (i == 8) || (i == 16) \ - || (i == -1) || (i == -4) || (i == -8) || (i == -16))) \ - ? ia64_fetch_and_add(i, &(v)->counter) \ - : ia64_atomic_add(i, v)) #define atomic_sub_return(i,v) \ ((__builtin_constant_p(i) && \ diff -Nru a/include/asm-ia64/bitops.h b/include/asm-ia64/bitops.h --- a/include/asm-ia64/bitops.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-ia64/bitops.h Sat Apr 12 14:44:09 2003 @@ -275,7 +275,7 @@ } static __inline__ int -test_bit (int nr, volatile void *addr) +test_bit (int nr, const volatile void *addr) { return 1 & (((const volatile __u32 *) addr)[nr >> 5] >> (nr & 31)); } diff -Nru a/include/asm-ia64/compat.h b/include/asm-ia64/compat.h --- a/include/asm-ia64/compat.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-ia64/compat.h Sat Apr 12 14:44:10 2003 @@ -27,6 +27,11 @@ typedef u32 compat_caddr_t; typedef __kernel_fsid_t compat_fsid_t; +typedef s32 compat_int_t; +typedef s32 compat_long_t; +typedef u32 compat_uint_t; +typedef u32 compat_ulong_t; + struct compat_timespec { compat_time_t tv_sec; s32 tv_nsec; @@ -68,6 +73,22 @@ compat_pid_t l_pid; }; +#define F_GETLK64 12 +#define F_SETLK64 13 +#define F_SETLKW64 14 + +/* + * IA32 uses 4 byte alignment for 64 bit quantities, + * so we need to pack this structure. + */ +struct compat_flock64 { + short l_type; + short l_whence; + compat_loff_t l_start; + compat_loff_t l_len; + compat_pid_t l_pid; +} __attribute__((packed)); + struct compat_statfs { int f_type; int f_bsize; @@ -87,5 +108,21 @@ #define _COMPAT_NSIG_BPW 32 typedef u32 compat_sigset_word; + +#define COMPAT_OFF_T_MAX 0x7fffffff +#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL + +/* + * A pointer passed in from user mode. This should not be used for syscall parameters, + * just declare them as pointers because the syscall entry code will have appropriately + * comverted them already. + */ +typedef u32 compat_uptr_t; + +static inline void * +compat_ptr (compat_uptr_t uptr) +{ + return (void *) (unsigned long) uptr; +} #endif /* _ASM_IA64_COMPAT_H */ diff -Nru a/include/asm-ia64/fcntl.h b/include/asm-ia64/fcntl.h --- a/include/asm-ia64/fcntl.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-ia64/fcntl.h Sat Apr 12 14:44:08 2003 @@ -78,9 +78,6 @@ pid_t l_pid; }; -#ifdef __KERNEL__ -# define flock64 flock -#endif - #define F_LINUX_SPECIFIC_BASE 1024 + #endif /* _ASM_IA64_FCNTL_H */ diff -Nru a/include/asm-ia64/fpu.h b/include/asm-ia64/fpu.h --- a/include/asm-ia64/fpu.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-ia64/fpu.h Sat Apr 12 14:44:10 2003 @@ -2,7 +2,7 @@ #define _ASM_IA64_FPU_H /* - * Copyright (C) 1998, 1999, 2002 Hewlett-Packard Co + * Copyright (C) 1998, 1999, 2002, 2003 Hewlett-Packard Co * David Mosberger-Tang */ @@ -57,8 +57,9 @@ struct ia64_fpreg { union { unsigned long bits[2]; + long double __dummy; /* force 16-byte alignment */ } u; -} __attribute__ ((aligned (16))); +}; # endif /* __ASSEMBLY__ */ diff -Nru a/include/asm-ia64/ia32.h b/include/asm-ia64/ia32.h --- a/include/asm-ia64/ia32.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-ia64/ia32.h Sat Apr 12 14:44:10 2003 @@ -18,10 +18,6 @@ #define IA32_PAGE_ALIGN(addr) (((addr) + IA32_PAGE_SIZE - 1) & IA32_PAGE_MASK) #define IA32_CLOCKS_PER_SEC 100 /* Cast in stone for IA32 Linux */ -#define F_GETLK64 12 -#define F_SETLK64 13 -#define F_SETLKW64 14 - /* sigcontext.h */ /* * As documented in the iBCS2 standard.. @@ -214,8 +210,11 @@ /* POSIX.1b timers */ struct { - unsigned int _timer1; - unsigned int _timer2; + timer_t _tid; /* timer id */ + int _overrun; /* overrun count */ + char _pad[sizeof(unsigned int) - sizeof(int)]; + sigval_t32 _sigval; /* same as below */ + int _sys_private; /* not to be passed to user */ } _timer; /* POSIX.1b signals */ diff -Nru a/include/asm-ia64/intrinsics.h b/include/asm-ia64/intrinsics.h --- a/include/asm-ia64/intrinsics.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-ia64/intrinsics.h Sat Apr 12 14:44:08 2003 @@ -46,14 +46,10 @@ IA64_FETCHADD(_tmp, _v, -8, sizeof(*(v))); \ else if ((i) == -4) \ IA64_FETCHADD(_tmp, _v, -4, sizeof(*(v))); \ - else if ((i) == -2) \ - IA64_FETCHADD(_tmp, _v, -2, sizeof(*(v))); \ else if ((i) == -1) \ IA64_FETCHADD(_tmp, _v, -1, sizeof(*(v))); \ else if ((i) == 1) \ IA64_FETCHADD(_tmp, _v, 1, sizeof(*(v))); \ - else if ((i) == 2) \ - IA64_FETCHADD(_tmp, _v, 2, sizeof(*(v))); \ else if ((i) == 4) \ IA64_FETCHADD(_tmp, _v, 4, sizeof(*(v))); \ else if ((i) == 8) \ diff -Nru a/include/asm-ia64/io.h b/include/asm-ia64/io.h --- a/include/asm-ia64/io.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/io.h Sat Apr 12 14:44:06 2003 @@ -69,22 +69,6 @@ */ #define __ia64_mf_a() __asm__ __volatile__ ("mf.a" ::: "memory") -/** - * __ia64_mmiob - I/O space memory barrier - * - * Acts as a memory mapped I/O barrier for platforms that queue writes to - * I/O space. This ensures that subsequent writes to I/O space arrive after - * all previous writes. For most ia64 platforms, this is a simple - * 'mf.a' instruction, so the address is ignored. For other platforms, - * the address may be required to ensure proper ordering of writes to I/O space - * since a 'dummy' read might be necessary to barrier the write operation. - */ -static inline void -__ia64_mmiob (void) -{ - __ia64_mf_a(); -} - static inline const unsigned long __ia64_get_io_port_base (void) { @@ -287,7 +271,6 @@ #define __outb platform_outb #define __outw platform_outw #define __outl platform_outl -#define __mmiob platform_mmiob #define inb(p) __inb(p) #define inw(p) __inw(p) @@ -301,31 +284,35 @@ #define outsb(p,s,c) __outsb(p,s,c) #define outsw(p,s,c) __outsw(p,s,c) #define outsl(p,s,c) __outsl(p,s,c) -#define mmiob() __mmiob() /* * The address passed to these functions are ioremap()ped already. + * + * We need these to be machine vectors since some platforms don't provide + * DMA coherence via PIO reads (PCI drivers and the spec imply that this is + * a good idea). Writes are ok though for all existing ia64 platforms (and + * hopefully it'll stay that way). */ static inline unsigned char -__readb (void *addr) +__ia64_readb (void *addr) { return *(volatile unsigned char *)addr; } static inline unsigned short -__readw (void *addr) +__ia64_readw (void *addr) { return *(volatile unsigned short *)addr; } static inline unsigned int -__readl (void *addr) +__ia64_readl (void *addr) { return *(volatile unsigned int *) addr; } static inline unsigned long -__readq (void *addr) +__ia64_readq (void *addr) { return *(volatile unsigned long *) addr; } @@ -353,6 +340,11 @@ { *(volatile unsigned long *) addr = val; } + +#define __readb platform_readb +#define __readw platform_readw +#define __readl platform_readl +#define __readq platform_readq #define readb(a) __readb((void *)(a)) #define readw(a) __readw((void *)(a)) diff -Nru a/include/asm-ia64/machvec.h b/include/asm-ia64/machvec.h --- a/include/asm-ia64/machvec.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-ia64/machvec.h Sat Apr 12 14:44:08 2003 @@ -43,7 +43,6 @@ typedef void ia64_mv_pci_unmap_sg (struct pci_dev *, struct scatterlist *, int, int); typedef void ia64_mv_pci_dma_sync_single (struct pci_dev *, dma_addr_t, size_t, int); typedef void ia64_mv_pci_dma_sync_sg (struct pci_dev *, struct scatterlist *, int, int); -typedef unsigned long ia64_mv_pci_dma_address (struct scatterlist *); typedef int ia64_mv_pci_dma_supported (struct pci_dev *, u64); /* @@ -61,7 +60,10 @@ typedef void ia64_mv_outb_t (unsigned char, unsigned long); typedef void ia64_mv_outw_t (unsigned short, unsigned long); typedef void ia64_mv_outl_t (unsigned int, unsigned long); -typedef void ia64_mv_mmiob_t (void); +typedef unsigned char ia64_mv_readb_t (void *); +typedef unsigned short ia64_mv_readw_t (void *); +typedef unsigned int ia64_mv_readl_t (void *); +typedef unsigned long ia64_mv_readq_t (void *); extern void machvec_noop (void); @@ -99,7 +101,6 @@ # define platform_pci_unmap_sg ia64_mv.unmap_sg # define platform_pci_dma_sync_single ia64_mv.sync_single # define platform_pci_dma_sync_sg ia64_mv.sync_sg -# define platform_pci_dma_address ia64_mv.dma_address # define platform_pci_dma_supported ia64_mv.dma_supported # define platform_irq_desc ia64_mv.irq_desc # define platform_irq_to_vector ia64_mv.irq_to_vector @@ -110,7 +111,10 @@ # define platform_outb ia64_mv.outb # define platform_outw ia64_mv.outw # define platform_outl ia64_mv.outl -# define platofrm_mmiob ia64_mv.mmiob +# define platform_readb ia64_mv.readb +# define platform_readw ia64_mv.readw +# define platform_readl ia64_mv.readl +# define platform_readq ia64_mv.readq # endif /* __attribute__((__aligned__(16))) is required to make size of the @@ -138,7 +142,6 @@ ia64_mv_pci_unmap_sg *unmap_sg; ia64_mv_pci_dma_sync_single *sync_single; ia64_mv_pci_dma_sync_sg *sync_sg; - ia64_mv_pci_dma_address *dma_address; ia64_mv_pci_dma_supported *dma_supported; ia64_mv_irq_desc *irq_desc; ia64_mv_irq_to_vector *irq_to_vector; @@ -149,8 +152,11 @@ ia64_mv_outb_t *outb; ia64_mv_outw_t *outw; ia64_mv_outl_t *outl; - ia64_mv_mmiob_t *mmiob; -} __attribute__((__aligned__(16))); + ia64_mv_readb_t *readb; + ia64_mv_readw_t *readw; + ia64_mv_readl_t *readl; + ia64_mv_readq_t *readq; +}; #define MACHVEC_INIT(name) \ { \ @@ -173,7 +179,6 @@ platform_pci_unmap_sg, \ platform_pci_dma_sync_single, \ platform_pci_dma_sync_sg, \ - platform_pci_dma_address, \ platform_pci_dma_supported, \ platform_irq_desc, \ platform_irq_to_vector, \ @@ -184,7 +189,10 @@ platform_outb, \ platform_outw, \ platform_outl, \ - platform_mmiob \ + platform_readb, \ + platform_readw, \ + platform_readl, \ + platform_readq, \ } extern struct ia64_machine_vector ia64_mv; @@ -206,7 +214,6 @@ extern ia64_mv_pci_unmap_sg swiotlb_unmap_sg; extern ia64_mv_pci_dma_sync_single swiotlb_sync_single; extern ia64_mv_pci_dma_sync_sg swiotlb_sync_sg; -extern ia64_mv_pci_dma_address swiotlb_dma_address; extern ia64_mv_pci_dma_supported swiotlb_pci_dma_supported; /* @@ -267,9 +274,6 @@ #ifndef platform_pci_dma_sync_sg # define platform_pci_dma_sync_sg swiotlb_sync_sg #endif -#ifndef platform_pci_dma_address -# define platform_pci_dma_address swiotlb_dma_address -#endif #ifndef platform_pci_dma_supported # define platform_pci_dma_supported swiotlb_pci_dma_supported #endif @@ -300,8 +304,17 @@ #ifndef platform_outl # define platform_outl __ia64_outl #endif -#ifndef platform_mmiob -# define platform_mmiob __ia64_mmiob +#ifndef platform_readb +# define platform_readb __ia64_readb +#endif +#ifndef platform_readw +# define platform_readw __ia64_readw +#endif +#ifndef platform_readl +# define platform_readl __ia64_readl +#endif +#ifndef platform_readq +# define platform_readq __ia64_readq #endif #endif /* _ASM_IA64_MACHVEC_H */ diff -Nru a/include/asm-ia64/machvec_hpzx1.h b/include/asm-ia64/machvec_hpzx1.h --- a/include/asm-ia64/machvec_hpzx1.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/machvec_hpzx1.h Sat Apr 12 14:44:06 2003 @@ -8,7 +8,6 @@ extern ia64_mv_pci_unmap_single sba_unmap_single; extern ia64_mv_pci_map_sg sba_map_sg; extern ia64_mv_pci_unmap_sg sba_unmap_sg; -extern ia64_mv_pci_dma_address sba_dma_address; extern ia64_mv_pci_dma_supported sba_dma_supported; /* @@ -29,7 +28,6 @@ #define platform_pci_unmap_sg sba_unmap_sg #define platform_pci_dma_sync_single ((ia64_mv_pci_dma_sync_single *) machvec_noop) #define platform_pci_dma_sync_sg ((ia64_mv_pci_dma_sync_sg *) machvec_noop) -#define platform_pci_dma_address sba_dma_address #define platform_pci_dma_supported sba_dma_supported #endif /* _ASM_IA64_MACHVEC_HPZX1_h */ diff -Nru a/include/asm-ia64/machvec_init.h b/include/asm-ia64/machvec_init.h --- a/include/asm-ia64/machvec_init.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/machvec_init.h Sat Apr 12 14:44:06 2003 @@ -16,7 +16,6 @@ extern ia64_mv_outb_t __ia64_outb; extern ia64_mv_outw_t __ia64_outw; extern ia64_mv_outl_t __ia64_outl; -extern ia64_mv_mmiob_t __ia64_mmiob; #define MACHVEC_HELPER(name) \ struct ia64_machine_vector machvec_##name __attribute__ ((unused, __section__ (".machvec"))) \ diff -Nru a/include/asm-ia64/machvec_sn1.h b/include/asm-ia64/machvec_sn1.h --- a/include/asm-ia64/machvec_sn1.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-ia64/machvec_sn1.h Sat Apr 12 14:44:08 2003 @@ -44,7 +44,6 @@ extern ia64_mv_outb_t sn1_outb; extern ia64_mv_outw_t sn1_outw; extern ia64_mv_outl_t sn1_outl; -extern ia64_mv_mmiob_t sn_mmiob; extern ia64_mv_pci_alloc_consistent sn1_pci_alloc_consistent; extern ia64_mv_pci_free_consistent sn1_pci_free_consistent; extern ia64_mv_pci_map_single sn1_pci_map_single; @@ -53,7 +52,6 @@ extern ia64_mv_pci_unmap_sg sn1_pci_unmap_sg; extern ia64_mv_pci_dma_sync_single sn1_pci_dma_sync_single; extern ia64_mv_pci_dma_sync_sg sn1_pci_dma_sync_sg; -extern ia64_mv_pci_dma_address sn1_dma_address; /* * This stuff has dual use! @@ -74,7 +72,6 @@ #define platform_outb sn1_outb #define platform_outw sn1_outw #define platform_outl sn1_outl -#define platform_mmiob sn_mmiob #define platform_pci_dma_init machvec_noop #define platform_pci_alloc_consistent sn1_pci_alloc_consistent #define platform_pci_free_consistent sn1_pci_free_consistent @@ -84,6 +81,5 @@ #define platform_pci_unmap_sg sn1_pci_unmap_sg #define platform_pci_dma_sync_single sn1_pci_dma_sync_single #define platform_pci_dma_sync_sg sn1_pci_dma_sync_sg -#define platform_pci_dma_address sn1_dma_address #endif /* _ASM_IA64_MACHVEC_SN1_h */ diff -Nru a/include/asm-ia64/machvec_sn2.h b/include/asm-ia64/machvec_sn2.h --- a/include/asm-ia64/machvec_sn2.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-ia64/machvec_sn2.h Sat Apr 12 14:44:07 2003 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002 Silicon Graphics, Inc. All Rights Reserved. + * Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License @@ -41,13 +41,16 @@ extern ia64_mv_irq_desc sn_irq_desc; extern ia64_mv_irq_to_vector sn_irq_to_vector; extern ia64_mv_local_vector_to_irq sn_local_vector_to_irq; -extern ia64_mv_inb_t sn_inb; -extern ia64_mv_inw_t sn_inw; -extern ia64_mv_inl_t sn_inl; -extern ia64_mv_outb_t sn_outb; -extern ia64_mv_outw_t sn_outw; -extern ia64_mv_outl_t sn_outl; -extern ia64_mv_mmiob_t sn2_mmiob; +extern ia64_mv_inb_t __sn_inb; +extern ia64_mv_inw_t __sn_inw; +extern ia64_mv_inl_t __sn_inl; +extern ia64_mv_outb_t __sn_outb; +extern ia64_mv_outw_t __sn_outw; +extern ia64_mv_outl_t __sn_outl; +extern ia64_mv_readb_t __sn_readb; +extern ia64_mv_readw_t __sn_readw; +extern ia64_mv_readl_t __sn_readl; +extern ia64_mv_readq_t __sn_readq; extern ia64_mv_pci_alloc_consistent sn_pci_alloc_consistent; extern ia64_mv_pci_free_consistent sn_pci_free_consistent; extern ia64_mv_pci_map_single sn_pci_map_single; @@ -56,7 +59,6 @@ extern ia64_mv_pci_unmap_sg sn_pci_unmap_sg; extern ia64_mv_pci_dma_sync_single sn_pci_dma_sync_single; extern ia64_mv_pci_dma_sync_sg sn_pci_dma_sync_sg; -extern ia64_mv_pci_dma_address sn_dma_address; extern ia64_mv_pci_dma_supported sn_pci_dma_supported; /* @@ -72,13 +74,17 @@ #define platform_irq_init sn_irq_init #define platform_send_ipi sn2_send_IPI #define platform_global_tlb_purge sn2_global_tlb_purge -#define platform_inb sn_inb -#define platform_inw sn_inw -#define platform_inl sn_inl -#define platform_outb sn_outb -#define platform_outw sn_outw -#define platform_outl sn_outl -#define platform_mmiob sn2_mmiob +#define platform_pci_fixup sn_pci_fixup +#define platform_inb __sn_inb +#define platform_inw __sn_inw +#define platform_inl __sn_inl +#define platform_outb __sn_outb +#define platform_outw __sn_outw +#define platform_outl __sn_outl +#define platform_readb __sn_readb +#define platform_readw __sn_readw +#define platform_readl __sn_readl +#define platform_readq __sn_readq #define platform_irq_desc sn_irq_desc #define platform_irq_to_vector sn_irq_to_vector #define platform_local_vector_to_irq sn_local_vector_to_irq @@ -91,7 +97,6 @@ #define platform_pci_unmap_sg sn_pci_unmap_sg #define platform_pci_dma_sync_single sn_pci_dma_sync_single #define platform_pci_dma_sync_sg sn_pci_dma_sync_sg -#define platform_pci_dma_address sn_dma_address #define platform_pci_dma_supported sn_pci_dma_supported #endif /* _ASM_IA64_MACHVEC_SN2_H */ diff -Nru a/include/asm-ia64/mca.h b/include/asm-ia64/mca.h --- a/include/asm-ia64/mca.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/mca.h Sat Apr 12 14:44:06 2003 @@ -24,7 +24,7 @@ IA64_MCA_FAILURE = 1 }; -#define IA64_MCA_RENDEZ_TIMEOUT (100 * HZ) /* 1000 milliseconds */ +#define IA64_MCA_RENDEZ_TIMEOUT (20 * 1000) /* value in milliseconds - 20 seconds */ #define IA64_CMC_INT_DISABLE 0 #define IA64_CMC_INT_ENABLE 1 diff -Nru a/include/asm-ia64/module.h b/include/asm-ia64/module.h --- a/include/asm-ia64/module.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-ia64/module.h Sat Apr 12 14:44:07 2003 @@ -1,6 +1,34 @@ #ifndef _ASM_IA64_MODULE_H #define _ASM_IA64_MODULE_H -/* Module support currently broken (due to in-kernel module loader). */ +/* + * IA-64-specific support for kernel module loader. + * + * Copyright (C) 2003 Hewlett-Packard Co + * David Mosberger-Tang + */ + +struct elf64_shdr; /* forward declration */ + +struct mod_arch_specific { + struct elf64_shdr *core_plt; /* core PLT section */ + struct elf64_shdr *init_plt; /* init PLT section */ + struct elf64_shdr *got; /* global offset table */ + struct elf64_shdr *opd; /* official procedure descriptors */ + struct elf64_shdr *unwind; /* unwind-table section */ + unsigned long gp; /* global-pointer for module */ + + void *unw_table; /* unwind-table cookie returned by unwinder */ + unsigned int next_got_entry; /* index of next available got entry */ +}; + +#define Elf_Shdr Elf64_Shdr +#define Elf_Sym Elf64_Sym +#define Elf_Ehdr Elf64_Ehdr + +#define MODULE_PROC_FAMILY "ia64" +#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY + +#define ARCH_SHF_SMALL SHF_IA_64_SHORT #endif /* _ASM_IA64_MODULE_H */ diff -Nru a/include/asm-ia64/pci.h b/include/asm-ia64/pci.h --- a/include/asm-ia64/pci.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-ia64/pci.h Sat Apr 12 14:44:09 2003 @@ -21,7 +21,7 @@ #define PCIBIOS_MIN_MEM 0x10000000 void pcibios_config_init(void); -struct pci_bus * pcibios_scan_root(int bus); +struct pci_bus * pcibios_scan_root(void *acpi_handle, int segment, int bus); struct pci_dev; @@ -58,7 +58,6 @@ #define pci_unmap_sg platform_pci_unmap_sg #define pci_dma_sync_single platform_pci_dma_sync_single #define pci_dma_sync_sg platform_pci_dma_sync_sg -#define sg_dma_address platform_pci_dma_address #define pci_dma_supported platform_pci_dma_supported /* pci_unmap_{single,page} is not a nop, thus... */ @@ -92,10 +91,22 @@ #define pci_controller_num(PDEV) (0) #define sg_dma_len(sg) ((sg)->dma_length) +#define sg_dma_address(sg) ((sg)->dma_address) #define HAVE_PCI_MMAP extern int pci_mmap_page_range (struct pci_dev *dev, struct vm_area_struct *vma, enum pci_mmap_state mmap_state, int write_combine); + +struct pci_controller { + void *acpi_handle; + void *iommu; + int segment; + + u64 mem_offset; +}; + +#define PCI_CONTROLLER(busdev) ((struct pci_controller *) busdev->sysdata) +#define PCI_SEGMENT(busdev) (PCI_CONTROLLER(busdev)->segment) /* generic pci stuff */ #include diff -Nru a/include/asm-ia64/pgtable.h b/include/asm-ia64/pgtable.h --- a/include/asm-ia64/pgtable.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-ia64/pgtable.h Sat Apr 12 14:44:07 2003 @@ -59,6 +59,9 @@ #define _PAGE_ED (__IA64_UL(1) << 52) /* exception deferral */ #define _PAGE_PROTNONE (__IA64_UL(1) << 63) +/* Valid only for a PTE with the present bit cleared: */ +#define _PAGE_FILE (1 << 1) /* see swap & file pte remarks below */ + #define _PFN_MASK _PAGE_PPN_MASK #define _PAGE_CHG_MASK (_PFN_MASK | _PAGE_A | _PAGE_D) @@ -253,6 +256,7 @@ #define pte_exec(pte) ((pte_val(pte) & _PAGE_AR_RX) != 0) #define pte_dirty(pte) ((pte_val(pte) & _PAGE_D) != 0) #define pte_young(pte) ((pte_val(pte) & _PAGE_A) != 0) +#define pte_file(pte) ((pte_val(pte) & _PAGE_FILE) != 0) /* * Note: we convert AR_RWX to AR_RX and AR_RW to AR_R by clearing the 2nd bit in the * access rights: @@ -402,11 +406,34 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; extern void paging_init (void); -#define __swp_type(entry) (((entry).val >> 1) & 0xff) +/* + * Note: The macros below rely on the fact that MAX_SWAPFILES_SHIFT <= number of + * bits in the swap-type field of the swap pte. It would be nice to + * enforce that, but we can't easily include here. + * (Of course, better still would be to define MAX_SWAPFILES_SHIFT here...). + * + * Format of swap pte: + * bit 0 : present bit (must be zero) + * bit 1 : _PAGE_FILE (must be zero) + * bits 2- 8: swap-type + * bits 9-62: swap offset + * bit 63 : _PAGE_PROTNONE bit + * + * Format of file pte: + * bit 0 : present bit (must be zero) + * bit 1 : _PAGE_FILE (must be one) + * bits 2-62: file_offset/PAGE_SIZE + * bit 63 : _PAGE_PROTNONE bit + */ +#define __swp_type(entry) (((entry).val >> 2) & 0x7f) #define __swp_offset(entry) (((entry).val << 1) >> 10) -#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 1) | ((long) (offset) << 9) }) +#define __swp_entry(type,offset) ((swp_entry_t) { ((type) << 2) | ((long) (offset) << 9) }) #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) + +#define PTE_FILE_MAX_BITS 61 +#define pte_to_pgoff(pte) ((pte_val(pte) << 1) >> 3) +#define pgoff_to_pte(off) ((pte_t) { ((off) << 2) | _PAGE_FILE }) #define io_remap_page_range remap_page_range /* XXX is this right? */ diff -Nru a/include/asm-ia64/processor.h b/include/asm-ia64/processor.h --- a/include/asm-ia64/processor.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-ia64/processor.h Sat Apr 12 14:44:07 2003 @@ -379,7 +379,7 @@ static inline unsigned long ia64_get_kr (unsigned long regnum) { - unsigned long r; + unsigned long r = 0; switch (regnum) { case 0: asm volatile ("mov %0=ar.k0" : "=r"(r)); break; @@ -915,13 +915,13 @@ #define ARCH_HAS_SPINLOCK_PREFETCH #define PREFETCH_STRIDE 256 -extern inline void +static inline void prefetch (const void *x) { __asm__ __volatile__ ("lfetch [%0]" : : "r"(x)); } -extern inline void +static inline void prefetchw (const void *x) { __asm__ __volatile__ ("lfetch.excl [%0]" : : "r"(x)); diff -Nru a/include/asm-ia64/sal.h b/include/asm-ia64/sal.h --- a/include/asm-ia64/sal.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-ia64/sal.h Sat Apr 12 14:44:10 2003 @@ -36,14 +36,24 @@ #define __SAL_CALL(result,a0,a1,a2,a3,a4,a5,a6,a7) \ result = (*ia64_sal)(a0,a1,a2,a3,a4,a5,a6,a7) -# define SAL_CALL(result,args...) do { \ - unsigned long flags; \ - struct ia64_fpreg fr[6]; \ - ia64_save_scratch_fpregs(fr); \ - spin_lock_irqsave(&sal_lock, flags); \ - __SAL_CALL(result,args); \ - spin_unlock_irqrestore(&sal_lock, flags); \ - ia64_load_scratch_fpregs(fr); \ +# define SAL_CALL(result,args...) do { \ + unsigned long __ia64_sc_flags; \ + struct ia64_fpreg __ia64_sc_fr[6]; \ + ia64_save_scratch_fpregs(__ia64_sc_fr); \ + spin_lock_irqsave(&sal_lock, __ia64_sc_flags); \ + __SAL_CALL(result, args); \ + spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags); \ + ia64_load_scratch_fpregs(__ia64_sc_fr); \ +} while (0) + +# define SAL_CALL_NOLOCK(result,args...) do { \ + unsigned long __ia64_scn_flags; \ + struct ia64_fpreg __ia64_scn_fr[6]; \ + ia64_save_scratch_fpregs(__ia64_scn_fr); \ + local_irq_save(__ia64_scn_flags); \ + __SAL_CALL(result, args); \ + local_irq_restore(__ia64_scn_flags); \ + ia64_load_scratch_fpregs(__ia64_scn_fr); \ } while (0) #define SAL_SET_VECTORS 0x01000000 @@ -686,13 +696,14 @@ /* * Causes the processor to go into a spin loop within SAL where SAL awaits a wakeup from - * the monarch processor. + * the monarch processor. Must not lock, because it will not return on any cpu until the + * monarch processor sends a wake up. */ static inline s64 ia64_sal_mc_rendez (void) { struct ia64_sal_retval isrv; - SAL_CALL(isrv, SAL_MC_RENDEZ, 0, 0, 0, 0, 0, 0, 0); + SAL_CALL_NOLOCK(isrv, SAL_MC_RENDEZ, 0, 0, 0, 0, 0, 0, 0); return isrv.status; } diff -Nru a/include/asm-ia64/smp.h b/include/asm-ia64/smp.h --- a/include/asm-ia64/smp.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-ia64/smp.h Sat Apr 12 14:44:08 2003 @@ -3,7 +3,7 @@ * * Copyright (C) 1999 VA Linux Systems * Copyright (C) 1999 Walt Drummond - * Copyright (C) 2001-2002 Hewlett-Packard Co + * Copyright (C) 2001-2003 Hewlett-Packard Co * David Mosberger-Tang */ #ifndef _ASM_IA64_SMP_H @@ -74,7 +74,7 @@ int i; for (i = 0; i < NR_CPUS; ++i) - if (cpu_physical_id(i) == (__u32) cpuid) + if (cpu_physical_id(i) == cpuid) break; return i; } diff -Nru a/include/asm-ia64/sn/io.h b/include/asm-ia64/sn/io.h --- a/include/asm-ia64/sn/io.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/sn/io.h Sat Apr 12 14:44:06 2003 @@ -3,8 +3,8 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * + * Copyright (C) 2000-2003 Silicon Graphics, Inc. All Rights Reserved. * Copyright (C) 2000 Ralf Baechle - * Copyright (C) 2000-2001 Silicon Graphics, Inc. */ #ifndef _ASM_IA64_SN_IO_H #define _ASM_IA64_SN_IO_H @@ -77,5 +77,10 @@ #include #include #endif + +/* + * Used to ensure write ordering (like mb(), but for I/O space) + */ +extern void sn_mmiob(void); #endif /* _ASM_IA64_SN_IO_H */ diff -Nru a/include/asm-ia64/sn/sn2/io.h b/include/asm-ia64/sn/sn2/io.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/asm-ia64/sn/sn2/io.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,206 @@ +/* + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved. + */ + +#ifndef _ASM_SN_SN2_IO_H +#define _ASM_SN_SN2_IO_H + +extern void * sn_io_addr(unsigned long port); /* Forward definition */ +extern void sn_mmiob(void); /* Forward definition */ + +#define __sn_mf_a() __asm__ __volatile__ ("mf.a" ::: "memory") + +extern void sn_dma_flush(unsigned long); + +/* + * The following routines are SN Platform specific, called when + * a reference is made to inX/outX set macros. SN Platform + * inX set of macros ensures that Posted DMA writes on the + * Bridge is flushed. + * + * The routines should be self explainatory. + */ + +static inline unsigned int +__sn_inb (unsigned long port) +{ + volatile unsigned char *addr = sn_io_addr(port); + unsigned char ret; + + ret = *addr; + sn_dma_flush((unsigned long)addr); + __sn_mf_a(); + return ret; +} + +static inline unsigned int +__sn_inw (unsigned long port) +{ + volatile unsigned short *addr = sn_io_addr(port); + unsigned short ret; + + ret = *addr; + sn_dma_flush((unsigned long)addr); + __sn_mf_a(); + return ret; +} + +static inline unsigned int +__sn_inl (unsigned long port) +{ + volatile unsigned int *addr = sn_io_addr(port); + unsigned int ret; + + ret = *addr; + sn_dma_flush((unsigned long)addr); + __sn_mf_a(); + return ret; +} + +static inline void +__sn_outb (unsigned char val, unsigned long port) +{ + volatile unsigned char *addr = sn_io_addr(port); + + *addr = val; + sn_mmiob(); +} + +static inline void +__sn_outw (unsigned short val, unsigned long port) +{ + volatile unsigned short *addr = sn_io_addr(port); + + *addr = val; + sn_mmiob(); +} + +static inline void +__sn_outl (unsigned int val, unsigned long port) +{ + volatile unsigned int *addr = sn_io_addr(port); + + *addr = val; + sn_mmiob(); +} + +/* + * The following routines are SN Platform specific, called when + * a reference is made to readX/writeX set macros. SN Platform + * readX set of macros ensures that Posted DMA writes on the + * Bridge is flushed. + * + * The routines should be self explainatory. + */ + +static inline unsigned char +__sn_readb (void *addr) +{ + unsigned char val; + + val = *(volatile unsigned char *)addr; + sn_dma_flush((unsigned long)addr); + return val; +} + +static inline unsigned short +__sn_readw (void *addr) +{ + unsigned short val; + + val = *(volatile unsigned short *)addr; + sn_dma_flush((unsigned long)addr); + return val; +} + +static inline unsigned int +__sn_readl (void *addr) +{ + unsigned int val; + + val = *(volatile unsigned int *) addr; + sn_dma_flush((unsigned long)addr); + return val; +} + +static inline unsigned long +__sn_readq (void *addr) +{ + unsigned long val; + + val = *(volatile unsigned long *) addr; + sn_dma_flush((unsigned long)addr); + return val; +} + +/* + * For generic and SN2 kernels, we have a set of fast access + * PIO macros. These macros are provided on SN Platform + * because the normal inX and readX macros perform an + * additional task of flushing Post DMA request on the Bridge. + * + * These routines should be self explainatory. + */ + +static inline unsigned int +sn_inb_fast (unsigned long port) +{ + volatile unsigned char *addr = (unsigned char *)port; + unsigned char ret; + + ret = *addr; + __sn_mf_a(); + return ret; +} + +static inline unsigned int +sn_inw_fast (unsigned long port) +{ + volatile unsigned short *addr = (unsigned short *)port; + unsigned short ret; + + ret = *addr; + __sn_mf_a(); + return ret; +} + +static inline unsigned int +sn_inl_fast (unsigned long port) +{ + volatile unsigned int *addr = (unsigned int *)port; + unsigned int ret; + + ret = *addr; + __sn_mf_a(); + return ret; +} + +static inline unsigned char +sn_readb_fast (void *addr) +{ + return *(volatile unsigned char *)addr; +} + +static inline unsigned short +sn_readw_fast (void *addr) +{ + return *(volatile unsigned short *)addr; +} + +static inline unsigned int +sn_readl_fast (void *addr) +{ + return *(volatile unsigned int *) addr; +} + +static inline unsigned long +sn_readq_fast (void *addr) +{ + return *(volatile unsigned long *) addr; +} + +#endif diff -Nru a/include/asm-ia64/spinlock.h b/include/asm-ia64/spinlock.h --- a/include/asm-ia64/spinlock.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-ia64/spinlock.h Sat Apr 12 14:44:06 2003 @@ -2,7 +2,7 @@ #define _ASM_IA64_SPINLOCK_H /* - * Copyright (C) 1998-2002 Hewlett-Packard Co + * Copyright (C) 1998-2003 Hewlett-Packard Co * David Mosberger-Tang * Copyright (C) 1999 Walt Drummond * @@ -15,58 +15,6 @@ #include #include -#undef NEW_LOCK - -#ifdef NEW_LOCK - -typedef struct { - volatile unsigned int lock; -} spinlock_t; - -#define SPIN_LOCK_UNLOCKED (spinlock_t) { 0 } -#define spin_lock_init(x) ((x)->lock = 0) - -/* - * Streamlined test_and_set_bit(0, (x)). We use test-and-test-and-set - * rather than a simple xchg to avoid writing the cache-line when - * there is contention. - */ -#define _raw_spin_lock(x) \ -{ \ - register char *addr __asm__ ("r31") = (char *) &(x)->lock; \ - \ - __asm__ __volatile__ ( \ - "mov r30=1\n" \ - "mov ar.ccv=r0\n" \ - ";;\n" \ - "cmpxchg4.acq r30=[%0],r30,ar.ccv\n" \ - ";;\n" \ - "cmp.ne p15,p0=r30,r0\n" \ - "(p15) br.call.spnt.few b7=ia64_spinlock_contention\n" \ - ";;\n" \ - "1:\n" /* force a new bundle */ \ - :: "r"(addr) \ - : "ar.ccv", "ar.pfs", "b7", "p15", "r28", "r29", "r30", "memory"); \ -} - -#define _raw_spin_trylock(x) \ -({ \ - register long result; \ - \ - __asm__ __volatile__ ( \ - "mov ar.ccv=r0\n" \ - ";;\n" \ - "cmpxchg4.acq %0=[%2],%1,ar.ccv\n" \ - : "=r"(result) : "r"(1), "r"(&(x)->lock) : "ar.ccv", "memory"); \ - (result == 0); \ -}) - -#define spin_is_locked(x) ((x)->lock != 0) -#define _raw_spin_unlock(x) do { barrier(); ((spinlock_t *) x)->lock = 0;} while (0) -#define spin_unlock_wait(x) do { barrier(); } while ((x)->lock) - -#else /* !NEW_LOCK */ - typedef struct { volatile unsigned int lock; } spinlock_t; @@ -123,8 +71,6 @@ #define _raw_spin_trylock(x) (cmpxchg_acq(&(x)->lock, 0, 1) == 0) #define spin_unlock_wait(x) do { barrier(); } while ((x)->lock) -#endif /* !NEW_LOCK */ - typedef struct { volatile int read_counter:31; volatile int write_lock:1; @@ -136,7 +82,7 @@ #define _raw_read_lock(rw) \ do { \ - int tmp = 0; \ + int __read_lock_tmp = 0; \ __asm__ __volatile__ ("1:\tfetchadd4.acq %0 = [%1], 1\n" \ ";;\n" \ "tbit.nz p6,p0 = %0, 31\n" \ @@ -151,15 +97,15 @@ "br.cond.sptk.few 1b\n" \ ";;\n" \ ".previous\n" \ - : "=&r" (tmp) \ + : "=&r" (__read_lock_tmp) \ : "r" (rw) : "p6", "memory"); \ } while(0) #define _raw_read_unlock(rw) \ do { \ - int tmp = 0; \ + int __read_unlock_tmp = 0; \ __asm__ __volatile__ ("fetchadd4.rel %0 = [%1], -1\n" \ - : "=r" (tmp) \ + : "=r" (__read_unlock_tmp) \ : "r" (rw) \ : "memory"); \ } while(0) diff -Nru a/include/asm-ia64/system.h b/include/asm-ia64/system.h --- a/include/asm-ia64/system.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-ia64/system.h Sat Apr 12 14:44:07 2003 @@ -31,6 +31,7 @@ #include struct pci_vector_struct { + __u16 segment; /* PCI Segment number */ __u16 bus; /* PCI Bus number */ __u32 pci_id; /* ACPI split 16 bits device, 16 bits function (see section 6.1.1) */ __u8 pin; /* PCI PIN (0 = A, 1 = B, 2 = C, 3 = D) */ @@ -108,7 +109,7 @@ #define set_mb(var, value) do { (var) = (value); mb(); } while (0) #define set_wmb(var, value) do { (var) = (value); mb(); } while (0) -#define safe_halt() ia64_pal_halt(1) /* PAL_HALT */ +#define safe_halt() ia64_pal_halt_light() /* PAL_HALT_LIGHT */ /* * The group barrier in front of the rsm & ssm are necessary to ensure diff -Nru a/include/asm-ia64/unaligned.h b/include/asm-ia64/unaligned.h --- a/include/asm-ia64/unaligned.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-ia64/unaligned.h Sat Apr 12 14:44:10 2003 @@ -7,8 +7,8 @@ * The main single-value unaligned transfer routines. Derived from * the Linux/Alpha version. * - * Copyright (C) 1998, 1999 Hewlett-Packard Co - * Copyright (C) 1998, 1999 David Mosberger-Tang + * Copyright (C) 1998, 1999, 2003 Hewlett-Packard Co + * David Mosberger-Tang */ #define get_unaligned(ptr) \ ((__typeof__(*(ptr)))ia64_get_unaligned((ptr), sizeof(*(ptr)))) @@ -16,110 +16,105 @@ #define put_unaligned(x,ptr) \ ia64_put_unaligned((unsigned long)(x), (ptr), sizeof(*(ptr))) -/* - * EGCS 1.1 knows about arbitrary unaligned loads. Define some - * packed structures to talk about such things with. - */ struct __una_u64 { __u64 x __attribute__((packed)); }; struct __una_u32 { __u32 x __attribute__((packed)); }; struct __una_u16 { __u16 x __attribute__((packed)); }; static inline unsigned long -__uldq (const unsigned long * r11) +__uld8 (const unsigned long * addr) { - const struct __una_u64 *ptr = (const struct __una_u64 *) r11; + const struct __una_u64 *ptr = (const struct __una_u64 *) addr; return ptr->x; } static inline unsigned long -__uldl (const unsigned int * r11) +__uld4 (const unsigned int * addr) { - const struct __una_u32 *ptr = (const struct __una_u32 *) r11; + const struct __una_u32 *ptr = (const struct __una_u32 *) addr; return ptr->x; } static inline unsigned long -__uldw (const unsigned short * r11) +__uld2 (const unsigned short * addr) { - const struct __una_u16 *ptr = (const struct __una_u16 *) r11; + const struct __una_u16 *ptr = (const struct __una_u16 *) addr; return ptr->x; } static inline void -__ustq (unsigned long r5, unsigned long * r11) +__ust8 (unsigned long val, unsigned long * addr) { - struct __una_u64 *ptr = (struct __una_u64 *) r11; - ptr->x = r5; + struct __una_u64 *ptr = (struct __una_u64 *) addr; + ptr->x = val; } static inline void -__ustl (unsigned long r5, unsigned int * r11) +__ust4 (unsigned long val, unsigned int * addr) { - struct __una_u32 *ptr = (struct __una_u32 *) r11; - ptr->x = r5; + struct __una_u32 *ptr = (struct __una_u32 *) addr; + ptr->x = val; } static inline void -__ustw (unsigned long r5, unsigned short * r11) +__ust2 (unsigned long val, unsigned short * addr) { - struct __una_u16 *ptr = (struct __una_u16 *) r11; - ptr->x = r5; + struct __una_u16 *ptr = (struct __una_u16 *) addr; + ptr->x = val; } /* - * This function doesn't actually exist. The idea is that when - * someone uses the macros below with an unsupported size (datatype), - * the linker will alert us to the problem via an unresolved reference - * error. + * This function doesn't actually exist. The idea is that when someone uses the macros + * below with an unsupported size (datatype), the linker will alert us to the problem via + * an unresolved reference error. */ extern unsigned long ia64_bad_unaligned_access_length (void); -#define ia64_get_unaligned(_ptr,size) \ -({ \ - const void *ptr = (_ptr); \ - unsigned long val; \ - \ - switch (size) { \ - case 1: \ - val = *(const unsigned char *) ptr; \ - break; \ - case 2: \ - val = __uldw((const unsigned short *)ptr); \ - break; \ - case 4: \ - val = __uldl((const unsigned int *)ptr); \ - break; \ - case 8: \ - val = __uldq((const unsigned long *)ptr); \ - break; \ - default: \ - val = ia64_bad_unaligned_access_length(); \ - } \ - val; \ +#define ia64_get_unaligned(_ptr,size) \ +({ \ + const void *__ia64_ptr = (_ptr); \ + unsigned long __ia64_val; \ + \ + switch (size) { \ + case 1: \ + __ia64_val = *(const unsigned char *) __ia64_ptr; \ + break; \ + case 2: \ + __ia64_val = __uld2((const unsigned short *)__ia64_ptr); \ + break; \ + case 4: \ + __ia64_val = __uld4((const unsigned int *)__ia64_ptr); \ + break; \ + case 8: \ + __ia64_val = __uld8((const unsigned long *)__ia64_ptr); \ + break; \ + default: \ + __ia64_val = ia64_bad_unaligned_access_length(); \ + } \ + __ia64_val; \ }) -#define ia64_put_unaligned(_val,_ptr,size) \ -do { \ - const void *ptr = (_ptr); \ - unsigned long val = (_val); \ - \ - switch (size) { \ - case 1: \ - *(unsigned char *)ptr = (val); \ - break; \ - case 2: \ - __ustw(val, (unsigned short *)ptr); \ - break; \ - case 4: \ - __ustl(val, (unsigned int *)ptr); \ - break; \ - case 8: \ - __ustq(val, (unsigned long *)ptr); \ - break; \ - default: \ - ia64_bad_unaligned_access_length(); \ - } \ +#define ia64_put_unaligned(_val,_ptr,size) \ +do { \ + const void *__ia64_ptr = (_ptr); \ + unsigned long __ia64_val = (_val); \ + \ + switch (size) { \ + case 1: \ + *(unsigned char *)__ia64_ptr = (__ia64_val); \ + break; \ + case 2: \ + __ust2(__ia64_val, (unsigned short *)__ia64_ptr); \ + break; \ + case 4: \ + __ust4(__ia64_val, (unsigned int *)__ia64_ptr); \ + break; \ + case 8: \ + __ust8(__ia64_val, (unsigned long *)__ia64_ptr); \ + break; \ + default: \ + ia64_bad_unaligned_access_length(); \ + } \ } while (0) #endif /* _ASM_IA64_UNALIGNED_H */ diff -Nru a/include/asm-sparc/pci.h b/include/asm-sparc/pci.h --- a/include/asm-sparc/pci.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-sparc/pci.h Sat Apr 12 14:44:09 2003 @@ -137,4 +137,7 @@ #endif /* __KERNEL__ */ +/* generic pci stuff */ +#include + #endif /* __SPARC_PCI_H */ diff -Nru a/include/asm-sparc/pgtable.h b/include/asm-sparc/pgtable.h --- a/include/asm-sparc/pgtable.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-sparc/pgtable.h Sat Apr 12 14:44:08 2003 @@ -11,7 +11,7 @@ #include #include -/* #include */ /* doesn't seem like being used XXX */ +#include #ifdef CONFIG_SUN4 #include #else @@ -252,6 +252,17 @@ return pte_val(pte) & BTFIXUP_HALF(pte_youngi); } +/* + * The following only work if pte_present() is not true. + */ +BTFIXUPDEF_HALF(pte_filei) + +extern int pte_file(pte_t pte) __attribute__((const)); +extern __inline__ int pte_file(pte_t pte) +{ + return pte_val(pte) & BTFIXUP_HALF(pte_filei); +} + BTFIXUPDEF_HALF(pte_wrprotecti) BTFIXUPDEF_HALF(pte_mkcleani) BTFIXUPDEF_HALF(pte_mkoldi) @@ -373,6 +384,17 @@ #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val }) +/* file-offset-in-pte helpers */ +BTFIXUPDEF_CALL(unsigned long, pte_to_pgoff, pte_t pte); +BTFIXUPDEF_CALL(pte_t, pgoff_to_pte, unsigned long pgoff); +BTFIXUPDEF_SIMM13(pte_file_max_bits); + +#define pte_to_pgoff(pte) BTFIXUP_CALL(pte_to_pgoff)(pte) +#define pgoff_to_pte(off) BTFIXUP_CALL(pgoff_to_pte)(off) +#define PTE_FILE_MAX_BITS BTFIXUP_SIMM13(pte_file_max_bits) + +/* + */ struct ctx_list { struct ctx_list *next; struct ctx_list *prev; diff -Nru a/include/asm-sparc/pgtsrmmu.h b/include/asm-sparc/pgtsrmmu.h --- a/include/asm-sparc/pgtsrmmu.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-sparc/pgtsrmmu.h Sat Apr 12 14:44:07 2003 @@ -62,6 +62,11 @@ #define SRMMU_PRIV 0x1c #define SRMMU_PRIV_RDONLY 0x18 +#define SRMMU_FILE 0x40 /* Implemented in software */ + +#define SRMMU_PTE_FILE_MAX_BITS 24 +#define SRMMU_PTE_FILE_SHIFT 8 + #define SRMMU_CHG_MASK (0xffffff00 | SRMMU_REF | SRMMU_DIRTY) /* Some day I will implement true fine grained access bits for diff -Nru a/include/asm-sparc/pgtsun4c.h b/include/asm-sparc/pgtsun4c.h --- a/include/asm-sparc/pgtsun4c.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-sparc/pgtsun4c.h Sat Apr 12 14:44:06 2003 @@ -53,6 +53,7 @@ #define _SUN4C_PAGE_NOCACHE 0x10000000 /* non-cacheable page */ #define _SUN4C_PAGE_PRESENT 0x08000000 /* implemented in software */ #define _SUN4C_PAGE_IO 0x04000000 /* I/O page */ +#define _SUN4C_PAGE_FILE 0x02000000 /* implemented in software */ #define _SUN4C_PAGE_READ 0x00800000 /* implemented in software */ #define _SUN4C_PAGE_WRITE 0x00400000 /* implemented in software */ #define _SUN4C_PAGE_ACCESSED 0x00200000 /* implemented in software */ @@ -72,6 +73,12 @@ #define SUN4C_PAGE_READONLY __pgprot(_SUN4C_PAGE_PRESENT|_SUN4C_READABLE) #define SUN4C_PAGE_KERNEL __pgprot(_SUN4C_READABLE|_SUN4C_WRITEABLE|\ _SUN4C_PAGE_DIRTY|_SUN4C_PAGE_PRIV) + +/* + * We have a couple of free bits left, but it's probably not a big + * deal, considering sizes of RAM and swap on sun4c. + */ +#define SUN4C_PTE_FILE_MAX_BITS 20 #ifndef __ASSEMBLY__ diff -Nru a/include/asm-sparc/signal.h b/include/asm-sparc/signal.h --- a/include/asm-sparc/signal.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-sparc/signal.h Sat Apr 12 14:44:08 2003 @@ -118,10 +118,10 @@ }; /* Sigvec flags */ -#define SV_SSTACK 1 /* This signal handler should use sig-stack */ -#define SV_INTR 2 /* Sig return should not restart system call */ -#define SV_RESET 4 /* Set handler to SIG_DFL upon taken signal */ -#define SV_IGNCHILD 8 /* Do not send SIGCHLD */ +#define SV_SSTACK 1u /* This signal handler should use sig-stack */ +#define SV_INTR 2u /* Sig return should not restart system call */ +#define SV_RESET 4u /* Set handler to SIG_DFL upon taken signal */ +#define SV_IGNCHILD 8u /* Do not send SIGCHLD */ /* * sa_flags values: SA_STACK is not currently supported, but will allow the @@ -137,11 +137,11 @@ #define SA_ONSTACK SV_SSTACK #define SA_RESTART SV_INTR #define SA_ONESHOT SV_RESET -#define SA_INTERRUPT 0x10 -#define SA_NOMASK 0x20 -#define SA_SHIRQ 0x40 -#define SA_NOCLDWAIT 0x100 -#define SA_SIGINFO 0x200 +#define SA_INTERRUPT 0x10u +#define SA_NOMASK 0x20u +#define SA_SHIRQ 0x40u +#define SA_NOCLDWAIT 0x100u +#define SA_SIGINFO 0x200u #define SIG_BLOCK 0x01 /* for blocking signals */ #define SIG_UNBLOCK 0x02 /* for unblocking signals */ diff -Nru a/include/asm-sparc/system.h b/include/asm-sparc/system.h --- a/include/asm-sparc/system.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-sparc/system.h Sat Apr 12 14:44:09 2003 @@ -11,7 +11,6 @@ #include #include -#include /* romvec. XXX will be dealt later. Promise. */ #include #include #include @@ -95,20 +94,12 @@ } while(0) #endif -// #define prepare_arch_schedule(prev) task_lock(prev) -// #define finish_arch_schedule(prev) task_unlock(prev) -#define prepare_arch_schedule(prev) do{ }while(0) -#define finish_arch_schedule(prev) do{ }while(0) - /* * Flush windows so that the VM switch which follows * would not pull the stack from under us. * * SWITCH_ENTER and SWITH_DO_LAZY_FPU do not work yet (e.g. SMP does not work) * XXX WTF is the above comment? Found in late teen 2.4.x. - * - * XXX prepare_arch_switch() is much smarter than this in sparc64, are we sure? - * XXX Cosider if doing it the flush_user_windows way is faster (by uwinmask). */ #define prepare_arch_switch(rq, next) do { \ __asm__ __volatile__( \ @@ -133,14 +124,13 @@ * - Anton & Pete */ #define switch_to(prev, next, last) do { \ - __label__ here; \ - register unsigned long task_pc asm("o7"); \ SWITCH_ENTER(prev); \ SWITCH_DO_LAZY_FPU(next); \ next->active_mm->cpu_vm_mask |= (1 << smp_processor_id()); \ - task_pc = ((unsigned long) &&here) - 0x8; \ __asm__ __volatile__( \ + "sethi %%hi(here - 0x8), %%o7\n\t" \ "mov %%g6, %%g3\n\t" \ + "or %%o7, %%lo(here - 0x8), %%o7\n\t" \ "rd %%psr, %%g4\n\t" \ "std %%sp, [%%g6 + %4]\n\t" \ "rd %%wim, %%g5\n\t" \ @@ -155,7 +145,7 @@ "wr %%g4, 0x20, %%psr\n\t" \ "nop\n\t" \ "nop\n\t" \ - "nop\n\t" /* LEON needs this: load to %sp depends on CWP. */ \ + "nop\n\t" /* LEON needs all 3 nops: load to %sp depends on CWP. */ \ "ldd [%%g6 + %4], %%sp\n\t" \ "wr %%g5, 0x0, %%wim\n\t" \ "ldd [%%sp + 0x00], %%l0\n\t" \ @@ -165,18 +155,18 @@ "nop\n\t" \ "jmpl %%o7 + 0x8, %%g0\n\t" \ " ld [%%g3 + %5], %0\n\t" \ + "here:\n" \ : "=&r" (last) \ : "r" (&(current_set[hard_smp_processor_id()])), \ "r" ((next)->thread_info), \ "i" (TI_KPSR), \ "i" (TI_KSP), \ - "i" (TI_TASK), \ - "r" (task_pc) \ + "i" (TI_TASK) \ : "g1", "g2", "g3", "g4", "g5", "g7", \ "l0", "l1", "l3", "l4", "l5", "l6", "l7", \ "i0", "i1", "i2", "i3", "i4", "i5", \ - "o0", "o1", "o2", "o3"); \ -here:; } while(0) + "o0", "o1", "o2", "o3", "o7"); \ + } while(0) /* * Changing the IRQ level on the Sparc. diff -Nru a/include/asm-sparc/uaccess.h b/include/asm-sparc/uaccess.h --- a/include/asm-sparc/uaccess.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-sparc/uaccess.h Sat Apr 12 14:44:09 2003 @@ -8,6 +8,7 @@ #define _ASM_UACCESS_H #ifdef __KERNEL__ +#include #include #include #include @@ -45,7 +46,7 @@ #define __access_ok(addr,size) (__user_ok((addr) & get_fs().seg,(size))) #define access_ok(type,addr,size) __access_ok((unsigned long)(addr),(size)) -extern inline int verify_area(int type, const void * addr, unsigned long size) +static inline int verify_area(int type, const void __user * addr, unsigned long size) { return access_ok(type,addr,size)?0:-EFAULT; } @@ -104,7 +105,7 @@ * doing multiple accesses to the same area (the user has to do the * checks by hand with "access_ok()") */ -#define __put_user(x,ptr) __put_user_nocheck((x),(ptr),sizeof(*(ptr))) +#define __put_user(x,ptr) __put_user_nocheck((__typeof__(*(ptr)))(x),(ptr),sizeof(*(ptr))) #define __get_user(x,ptr) __get_user_nocheck((x),(ptr),sizeof(*(ptr)),__typeof__(*(ptr))) struct __large_struct { unsigned long buf[100]; }; @@ -291,87 +292,87 @@ extern int __get_user_bad(void); -extern __kernel_size_t __copy_user(void *to, void *from, __kernel_size_t size); +extern unsigned long __copy_user(void *to, const void *from, unsigned long size); -#define copy_to_user(to,from,n) ({ \ -void *__copy_to = (void *) (to); \ -__kernel_size_t __copy_size = (__kernel_size_t) (n); \ -__kernel_size_t __copy_res; \ -if(__copy_size && __access_ok((unsigned long)__copy_to, __copy_size)) { \ -__copy_res = __copy_user(__copy_to, (void *) (from), __copy_size); \ -} else __copy_res = __copy_size; \ -__copy_res; }) - -#define __copy_to_user(to,from,n) \ - __copy_user((void *)(to), \ - (void *)(from), n) - -#define copy_from_user(to,from,n) ({ \ -void *__copy_to = (void *) (to); \ -void *__copy_from = (void *) (from); \ -__kernel_size_t __copy_size = (__kernel_size_t) (n); \ -__kernel_size_t __copy_res; \ -if(__copy_size && __access_ok((unsigned long)__copy_from, __copy_size)) { \ -__copy_res = __copy_user(__copy_to, __copy_from, __copy_size); \ -} else __copy_res = __copy_size; \ -__copy_res; }) - -#define __copy_from_user(to,from,n) \ - __copy_user((void *)(to), \ - (void *)(from), n) - -extern __inline__ __kernel_size_t __clear_user(void *addr, __kernel_size_t size) -{ - __kernel_size_t ret; - __asm__ __volatile__ ( - ".section __ex_table,#alloc\n\t" - ".align 4\n\t" - ".word 1f,3\n\t" - ".previous\n\t" - "mov %2, %%o1\n" - "1:\n\t" - "call __bzero\n\t" - " mov %1, %%o0\n\t" - "mov %%o0, %0\n" - : "=r" (ret) : "r" (addr), "r" (size) : - "o0", "o1", "o2", "o3", "o4", "o5", "o7", - "g1", "g2", "g3", "g4", "g5", "g7", "cc"); - return ret; +static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n) +{ + if (n && __access_ok((unsigned long) to, n)) + return __copy_user((void *) to, from, n); + else + return n; } -#define clear_user(addr,n) ({ \ -void *__clear_addr = (void *) (addr); \ -__kernel_size_t __clear_size = (__kernel_size_t) (n); \ -__kernel_size_t __clear_res; \ -if(__clear_size && __access_ok((unsigned long)__clear_addr, __clear_size)) { \ -__clear_res = __clear_user(__clear_addr, __clear_size); \ -} else __clear_res = __clear_size; \ -__clear_res; }) - -extern int __strncpy_from_user(unsigned long dest, unsigned long src, int count); - -#define strncpy_from_user(dest,src,count) ({ \ -unsigned long __sfu_src = (unsigned long) (src); \ -int __sfu_count = (int) (count); \ -long __sfu_res = -EFAULT; \ -if(__access_ok(__sfu_src, __sfu_count)) { \ -__sfu_res = __strncpy_from_user((unsigned long) (dest), __sfu_src, __sfu_count); \ -} __sfu_res; }) +static inline unsigned long __copy_to_user(void __user *to, const void *from, unsigned long n) +{ + return __copy_user((void *)to, from, n); +} + +static inline unsigned long copy_from_user(void *to, const void __user *from, unsigned long n) +{ + if (n && __access_ok((unsigned long) from, n)) + return __copy_user(to, (void *) from, n); + else + return n; +} + +static inline unsigned long __copy_from_user(void *to, const void __user *from, unsigned long n) +{ + return __copy_user(to, (void *)from, n); +} + +static inline unsigned long __clear_user(void __user *addr, unsigned long size) +{ + unsigned long ret; + + __asm__ __volatile__ ( + ".section __ex_table,#alloc\n\t" + ".align 4\n\t" + ".word 1f,3\n\t" + ".previous\n\t" + "mov %2, %%o1\n" + "1:\n\t" + "call __bzero\n\t" + " mov %1, %%o0\n\t" + "mov %%o0, %0\n" + : "=r" (ret) : "r" (addr), "r" (size) : + "o0", "o1", "o2", "o3", "o4", "o5", "o7", + "g1", "g2", "g3", "g4", "g5", "g7", "cc"); + + return ret; +} + +static inline unsigned long clear_user(void __user *addr, unsigned long n) +{ + if (n && __access_ok((unsigned long) addr, n)) + return __clear_user(addr, n); + else + return n; +} + +extern long __strncpy_from_user(char *dest, const char __user *src, long count); + +static inline long strncpy_from_user(char *dest, const char __user *src, long count) +{ + if (__access_ok((unsigned long) src, count)) + return __strncpy_from_user(dest, src, count); + else + return -EFAULT; +} -extern int __strlen_user(const char *); -extern int __strnlen_user(const char *, long len); +extern long __strlen_user(const char __user *); +extern long __strnlen_user(const char __user *, long len); -extern __inline__ int strlen_user(const char *str) +static inline long strlen_user(const char __user *str) { - if(!access_ok(VERIFY_READ, str, 0)) + if (!access_ok(VERIFY_READ, str, 0)) return 0; else return __strlen_user(str); } -extern __inline__ int strnlen_user(const char *str, long len) +static inline long strnlen_user(const char __user *str, long len) { - if(!access_ok(VERIFY_READ, str, 0)) + if (!access_ok(VERIFY_READ, str, 0)) return 0; else return __strnlen_user(str, len); diff -Nru a/include/asm-sparc64/signal.h b/include/asm-sparc64/signal.h --- a/include/asm-sparc64/signal.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-sparc64/signal.h Sat Apr 12 14:44:06 2003 @@ -123,10 +123,10 @@ }; /* Sigvec flags */ -#define SV_SSTACK 1 /* This signal handler should use sig-stack */ -#define SV_INTR 2 /* Sig return should not restart system call */ -#define SV_RESET 4 /* Set handler to SIG_DFL upon taken signal */ -#define SV_IGNCHILD 8 /* Do not send SIGCHLD */ +#define SV_SSTACK 1u /* This signal handler should use sig-stack */ +#define SV_INTR 2u /* Sig return should not restart system call */ +#define SV_RESET 4u /* Set handler to SIG_DFL upon taken signal */ +#define SV_IGNCHILD 8u /* Do not send SIGCHLD */ /* * sa_flags values: SA_STACK is not currently supported, but will allow the @@ -142,11 +142,11 @@ #define SA_ONSTACK SV_SSTACK #define SA_RESTART SV_INTR #define SA_ONESHOT SV_RESET -#define SA_INTERRUPT 0x10 -#define SA_NOMASK 0x20 -#define SA_SHIRQ 0x40 -#define SA_NOCLDWAIT 0x100 -#define SA_SIGINFO 0x200 +#define SA_INTERRUPT 0x10u +#define SA_NOMASK 0x20u +#define SA_SHIRQ 0x40u +#define SA_NOCLDWAIT 0x100u +#define SA_SIGINFO 0x200u #define SIG_BLOCK 0x01 /* for blocking signals */ diff -Nru a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h --- a/include/asm-sparc64/uaccess.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-sparc64/uaccess.h Sat Apr 12 14:44:07 2003 @@ -7,6 +7,7 @@ */ #ifdef __KERNEL__ +#include #include #include #include @@ -52,7 +53,7 @@ #define __access_ok(addr,size) 1 #define access_ok(type,addr,size) 1 -static inline int verify_area(int type, const void * addr, unsigned long size) +static inline int verify_area(int type, const void __user * addr, unsigned long size) { return 0; } @@ -249,44 +250,34 @@ extern int __get_user_bad(void); -extern __kernel_size_t __copy_from_user(void *to, const void *from, - __kernel_size_t size); +extern unsigned long __copy_from_user(void *to, const void __user *from, + unsigned long size); -extern __kernel_size_t __copy_to_user(void *to, const void *from, - __kernel_size_t size); +extern unsigned long __copy_to_user(void __user *to, const void *from, + unsigned long size); -extern __kernel_size_t __copy_in_user(void *to, const void *from, - __kernel_size_t size); +extern unsigned long __copy_in_user(void __user *to, const void __user *from, + unsigned long size); -#define copy_from_user(to,from,n) \ - __copy_from_user((void *)(to), \ - (void *)(from), (__kernel_size_t)(n)) +#define copy_from_user __copy_from_user +#define copy_to_user __copy_to_user +#define copy_in_user __copy_in_user -#define copy_to_user(to,from,n) \ - __copy_to_user((void *)(to), \ - (void *) (from), (__kernel_size_t)(n)) - -#define copy_in_user(to,from,n) \ - __copy_in_user((void *)(to), \ - (void *) (from), (__kernel_size_t)(n)) - -static __inline__ __kernel_size_t __clear_user(void *addr, __kernel_size_t size) +static inline unsigned long __clear_user(void __user *addr, unsigned long size) { - extern __kernel_size_t __bzero_noasi(void *addr, __kernel_size_t size); + extern unsigned long __bzero_noasi(void *addr, unsigned long size); - return __bzero_noasi(addr, size); + return __bzero_noasi((void *) addr, size); } -#define clear_user(addr,n) \ - __clear_user((void *)(addr), (__kernel_size_t)(n)) +#define clear_user __clear_user -extern int __strncpy_from_user(unsigned long dest, unsigned long src, int count); +extern long __strncpy_from_user(char *dest, const char __user *src, long count); -#define strncpy_from_user(dest,src,count) \ - __strncpy_from_user((unsigned long)(dest), (unsigned long)(src), (int)(count)) +#define strncpy_from_user __strncpy_from_user -extern int __strlen_user(const char *); -extern int __strnlen_user(const char *, long len); +extern long __strlen_user(const char __user *); +extern long __strnlen_user(const char __user *, long len); #define strlen_user __strlen_user #define strnlen_user __strnlen_user diff -Nru a/include/asm-v850/nb85e_cache.h b/include/asm-v850/nb85e_cache.h --- a/include/asm-v850/nb85e_cache.h Sat Apr 12 14:44:08 2003 +++ b/include/asm-v850/nb85e_cache.h Sat Apr 12 14:44:08 2003 @@ -2,8 +2,8 @@ * include/asm-v850/nb85e_cache_cache.h -- Cache control for NB85E_CACHE212 and * NB85E_CACHE213 cache memories * - * Copyright (C) 2001 NEC Corporation - * Copyright (C) 2001 Miles Bader + * Copyright (C) 2001,03 NEC Electronics Corporation + * Copyright (C) 2001,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -15,92 +15,65 @@ #ifndef __V850_NB85E_CACHE_H__ #define __V850_NB85E_CACHE_H__ +#include + + /* Cache control registers. */ -#define NB85E_CACHE_ICC_ADDR 0xFFFFF070 -#define NB85E_CACHE_DCC_ADDR 0xFFFFF078 +#define NB85E_CACHE_BHC_ADDR 0xFFFFF06A +#define NB85E_CACHE_BHC (*(volatile u16 *)NB85E_CACHE_BHC_ADDR) +#define NB85E_CACHE_ICC_ADDR 0xFFFFF070 +#define NB85E_CACHE_ICC (*(volatile u16 *)NB85E_CACHE_ICC_ADDR) +#define NB85E_CACHE_ISI_ADDR 0xFFFFF072 +#define NB85E_CACHE_ISI (*(volatile u16 *)NB85E_CACHE_ISI_ADDR) +#define NB85E_CACHE_DCC_ADDR 0xFFFFF078 +#define NB85E_CACHE_DCC (*(volatile u16 *)NB85E_CACHE_DCC_ADDR) /* Size of a cache line in bytes. */ -#define NB85E_CACHE_LINE_SIZE 16 - +#define NB85E_CACHE_LINE_SIZE 16 -#ifndef __ASSEMBLY__ +/* For */ +#define L1_CACHE_BYTES NB85E_CACHE_LINE_SIZE -extern inline void nb85e_cache_flush_cache (unsigned long cache_control_addr) -{ - /* - From the NB85E Instruction/Data Cache manual, how to flush - the instruction cache (ICC is the `Instruction Cache Control - Register'): - - mov 0x3, r2 - LOP0: - ld.h ICC[r0], r1 - cmp r0, r1 - bnz LOP0 - st.h r2, ICC[r0] - LOP1: - First TAG clear - ld.h ICC[r0], r1 - cmp r0, r1 - bnz LOP1 - st.h r2, ICC[r0] - LOP2: - Second TAG clear - ld.h ICC[r0], r1 - cmp r0, r1 - bnz LOP2 - */ - int cache_flush_bits, ccr_contents; - __asm__ __volatile__ ( - " mov 0x3, %1;" - "1: ld.h 0[%2], %0;" - " cmp r0, %0;" - " bnz 1b;" - " st.h %1, 0[%2];" - "2: ld.h 0[%2], %0;" - " cmp r0, %0;" - " bnz 2b;" - " st.h %1, 0[%2];" - "3: ld.h 0[%2], %0;" - " cmp r0, %0;" - " bnz 3b" - : "=&r" (ccr_contents), "=&r" (cache_flush_bits) - : "r" (cache_control_addr) - : "memory"); -} - -extern inline void nb85e_cache_flush_icache (void) -{ - nb85e_cache_flush_cache (NB85E_CACHE_ICC_ADDR); -} - -extern inline void nb85e_cache_flush_dcache (void) -{ - nb85e_cache_flush_cache (NB85E_CACHE_DCC_ADDR); -} - -extern inline void nb85e_cache_flush (void) -{ - nb85e_cache_flush_icache (); - nb85e_cache_flush_dcache (); -} -#endif /* !__ASSEMBLY__ */ +#ifndef __ASSEMBLY__ - -/* Define standard definitions in terms of processor-specific ones. */ +/* Set caching params via the BHC and DCC registers. */ +void nb85e_cache_enable (u16 bhc, u16 dcc); -/* For */ -#define L1_CACHE_BYTES NB85E_CACHE_LINE_SIZE +struct page; +struct mm_struct; +struct vm_area_struct; + +extern void nb85e_cache_flush_all (void); +extern void nb85e_cache_flush_mm (struct mm_struct *mm); +extern void nb85e_cache_flush_range (struct mm_struct *mm, + unsigned long start, + unsigned long end); +extern void nb85e_cache_flush_page (struct vm_area_struct *vma, + unsigned long page_addr); +extern void nb85e_cache_flush_dcache_page (struct page *page); +extern void nb85e_cache_flush_icache (void); +extern void nb85e_cache_flush_icache_range (unsigned long start, + unsigned long end); +extern void nb85e_cache_flush_icache_page (struct vm_area_struct *vma, + struct page *page); +extern void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma, + struct page *page, + unsigned long adr, int len); +extern void nb85e_cache_flush_sigtramp (unsigned long addr); + +#define flush_page_to_ram(x) ((void)0) +#define flush_cache_all nb85e_cache_flush_all +#define flush_cache_mm nb85e_cache_flush_mm +#define flush_cache_range nb85e_cache_flush_range +#define flush_cache_page nb85e_cache_flush_page +#define flush_dcache_page nb85e_cache_flush_dcache_page +#define flush_icache nb85e_cache_flush_icache +#define flush_icache_range nb85e_cache_flush_icache_range +#define flush_icache_page nb85e_cache_flush_icache_page +#define flush_icache_user_range nb85e_cache_flush_icache_user_range +#define flush_cache_sigtramp nb85e_cache_flush_sigtramp -/* For */ -#define flush_cache_all() nb85e_cache_flush () -#define flush_cache_mm(mm) nb85e_cache_flush () -#define flush_cache_range(mm, start, end) nb85e_cache_flush () -#define flush_cache_page(vma, vmaddr) nb85e_cache_flush () -#define flush_page_to_ram(page) nb85e_cache_flush () -#define flush_dcache_page(page) nb85e_cache_flush_dcache () -#define flush_icache_range(start, end) nb85e_cache_flush_icache () -#define flush_icache_page(vma,pg) nb85e_cache_flush_icache () -#define flush_icache() nb85e_cache_flush_icache () -#define flush_cache_sigtramp(vaddr) nb85e_cache_flush_icache () +#endif /* !__ASSEMBLY__ */ #endif /* __V850_NB85E_CACHE_H__ */ diff -Nru a/include/asm-v850/nb85e_intc.h b/include/asm-v850/nb85e_intc.h --- a/include/asm-v850/nb85e_intc.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-v850/nb85e_intc.h Sat Apr 12 14:44:09 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/nb85e_intc.h -- NB85E cpu core interrupt controller (INTC) * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -26,7 +26,7 @@ address. */ #define NB85E_INTC_IC_BASE_ADDR 0xFFFFF110 #define NB85E_INTC_IC_ADDR(irq) (NB85E_INTC_IC_BASE_ADDR + ((irq) << 1)) -#define NB85E_INTC_IC(irq) (*(char *)NB85E_INTC_IC_ADDR(irq)) +#define NB85E_INTC_IC(irq) (*(volatile u8 *)NB85E_INTC_IC_ADDR(irq)) /* Encode priority PR for storing in an interrupt control register. */ #define NB85E_INTC_IC_PR(pr) (pr) /* Interrupt disable bit in an interrupt control register. */ @@ -35,6 +35,13 @@ /* Interrupt pending flag in an interrupt control register. */ #define NB85E_INTC_IC_IF_BIT 7 #define NB85E_INTC_IC_IF (1 << NB85E_INTC_IC_IF_BIT) + +/* The ISPR (In-service priority register) contains one bit for each interrupt + priority level, which is set to one when that level is currently being + serviced (and thus blocking any interrupts of equal or lesser level). */ +#define NB85E_INTC_ISPR_ADDR 0xFFFFF1FA +#define NB85E_INTC_ISPR (*(volatile u8 *)NB85E_INTC_ISPR_ADDR) + #ifndef __ASSEMBLY__ diff -Nru a/include/asm-v850/nb85e_timer_d.h b/include/asm-v850/nb85e_timer_d.h --- a/include/asm-v850/nb85e_timer_d.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-v850/nb85e_timer_d.h Sat Apr 12 14:44:07 2003 @@ -2,8 +2,8 @@ * include/asm-v850/nb85e_timer_d.h -- `Timer D' component often used * with the NB85E cpu core * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -27,7 +27,7 @@ /* Count compare registers for timer D. */ #define NB85E_TIMER_D_CMD_ADDR(n) (NB85E_TIMER_D_CMD_BASE_ADDR + 0x10 * (n)) -#define NB85E_TIMER_D_CMD(n) (*(u16 *)NB85E_TIMER_D_CMD_ADDR(n)) +#define NB85E_TIMER_D_CMD(n) (*(volatile u16 *)NB85E_TIMER_D_CMD_ADDR(n)) /* Control registers for timer D. */ #define NB85E_TIMER_D_TMCD_ADDR(n) (NB85E_TIMER_D_TMCD_BASE_ADDR + 0x10 * (n)) diff -Nru a/include/asm-v850/posix_types.h b/include/asm-v850/posix_types.h --- a/include/asm-v850/posix_types.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-v850/posix_types.h Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/posix_types.h -- Kernel versions of standard types * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -31,6 +31,8 @@ typedef long __kernel_time_t; typedef long __kernel_suseconds_t; typedef long __kernel_clock_t; +typedef int __kernel_timer_t; +typedef int __kernel_clockid_t; typedef int __kernel_daddr_t; typedef char * __kernel_caddr_t; typedef unsigned short __kernel_uid16_t; diff -Nru a/include/asm-v850/processor.h b/include/asm-v850/processor.h --- a/include/asm-v850/processor.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-v850/processor.h Sat Apr 12 14:44:07 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/processor.h * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -91,15 +91,17 @@ { } -/* Return saved (kernel) PC of a blocked thread. */ -extern inline unsigned long thread_saved_pc (struct thread_struct *t) -{ - struct pt_regs *r = (struct pt_regs *)(t->ksp + STATE_SAVE_PT_OFFSET); - /* Actually, we return the LP register, because the thread is - actually blocked in switch_thread, and we're interested in - the PC it will _return_ to. */ - return r->gpr[GPR_LP]; -} + +/* Return the registers saved during context-switch by the currently + not-running thread T. Note that this only includes some registers! + See entry.S for details. */ +#define thread_saved_regs(t) \ + ((struct pt_regs*)((t)->thread.ksp + STATE_SAVE_PT_OFFSET)) +/* Return saved (kernel) PC of a blocked thread. Actually, we return the + LP register, because the thread is actually blocked in switch_thread, + and we're interested in the PC it will _return_ to. */ +#define thread_saved_pc(t) (thread_saved_regs(t)->gpr[GPR_LP]) + unsigned long get_wchan (struct task_struct *p); diff -Nru a/include/asm-v850/ptrace.h b/include/asm-v850/ptrace.h --- a/include/asm-v850/ptrace.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-v850/ptrace.h Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/ptrace.h -- Access to CPU registers * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -102,10 +102,19 @@ #define PT_CTBP ((NUM_GPRS + 4) * _PT_REG_SIZE) #define PT_KERNEL_MODE ((NUM_GPRS + 5) * _PT_REG_SIZE) -#define PT_SYSCALL PT_GPR(0) +/* Where the current syscall number is stashed; obviously only valid in + the kernel! */ +#define PT_CUR_SYSCALL PT_GPR(0) /* Size of struct pt_regs, including alignment. */ #define PT_SIZE ((NUM_GPRS + 6) * _PT_REG_SIZE) + + +/* These are `magic' values for PTRACE_PEEKUSR that return info about where + a process is located in memory. */ +#define PT_TEXT_ADDR (PT_SIZE + 1) +#define PT_TEXT_LEN (PT_SIZE + 2) +#define PT_DATA_ADDR (PT_SIZE + 3) #endif /* __V850_PTRACE_H__ */ diff -Nru a/include/asm-v850/rte_cb.h b/include/asm-v850/rte_cb.h --- a/include/asm-v850/rte_cb.h Sat Apr 12 14:44:07 2003 +++ b/include/asm-v850/rte_cb.h Sat Apr 12 14:44:07 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/rte_cb.h -- Midas labs RTE-CB series of evaluation boards * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -15,18 +15,6 @@ #define __V850_RTE_CB_H__ -/* CPU addresses of GBUS memory spaces. */ -#define GCS0_ADDR 0x05000000 /* GCS0 - Common SRAM (2MB) */ -#define GCS0_SIZE 0x00200000 /* 2MB */ -#define GCS1_ADDR 0x06000000 /* GCS1 - Flash ROM (8MB) */ -#define GCS1_SIZE 0x00800000 /* 8MB */ -#define GCS2_ADDR 0x07900000 /* GCS2 - I/O registers */ -#define GCS2_SIZE 0x00400000 /* 4MB */ -#define GCS5_ADDR 0x04000000 /* GCS5 - PCI bus space */ -#define GCS5_SIZE 0x01000000 /* 16MB */ -#define GCS6_ADDR 0x07980000 /* GCS6 - PCI control registers */ -#define GCS6_SIZE 0x00000200 /* 512B */ - /* The SRAM on the Mother-A motherboard. */ #define MB_A_SRAM_ADDR GCS0_ADDR #define MB_A_SRAM_SIZE 0x00200000 /* 2MB */ @@ -78,9 +66,8 @@ #ifndef __ASSEMBLY__ - +extern void rte_cb_early_init (void); extern void rte_cb_init_irqs (void); - #endif /* !__ASSEMBLY__ */ diff -Nru a/include/asm-v850/rte_ma1_cb.h b/include/asm-v850/rte_ma1_cb.h --- a/include/asm-v850/rte_ma1_cb.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-v850/rte_ma1_cb.h Sat Apr 12 14:44:06 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/rte_ma1_cb.h -- Midas labs RTE-V850/MA1-CB board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -15,6 +15,19 @@ #define __V850_RTE_MA1_CB_H__ #include /* Common defs for Midas RTE-CB boards. */ + + +/* CPU addresses of GBUS memory spaces. */ +#define GCS0_ADDR 0x05000000 /* GCS0 - Common SRAM (2MB) */ +#define GCS0_SIZE 0x00200000 /* 2MB */ +#define GCS1_ADDR 0x06000000 /* GCS1 - Flash ROM (8MB) */ +#define GCS1_SIZE 0x00800000 /* 8MB */ +#define GCS2_ADDR 0x07900000 /* GCS2 - I/O registers */ +#define GCS2_SIZE 0x00400000 /* 4MB */ +#define GCS5_ADDR 0x04000000 /* GCS5 - PCI bus space */ +#define GCS5_SIZE 0x01000000 /* 16MB */ +#define GCS6_ADDR 0x07980000 /* GCS6 - PCI control registers */ +#define GCS6_SIZE 0x00000200 /* 512B */ /* The GBUS GINT0 - GINT4 interrupts are connected to the INTP000 - INTP011 diff -Nru a/include/asm-v850/rte_nb85e_cb.h b/include/asm-v850/rte_nb85e_cb.h --- a/include/asm-v850/rte_nb85e_cb.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-v850/rte_nb85e_cb.h Sat Apr 12 14:44:09 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/rte_nb85e_cb.h -- Midas labs RTE-V850/NB85E-CB board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -16,6 +16,30 @@ #include /* Common defs for Midas RTE-CB boards. */ + +/* CPU addresses of GBUS memory spaces. */ +#define GCS0_ADDR 0x00400000 /* GCS0 - Common SRAM (2MB) */ +#define GCS0_SIZE 0x00400000 /* 4MB */ +#define GCS1_ADDR 0x02000000 /* GCS1 - Flash ROM (8MB) */ +#define GCS1_SIZE 0x00800000 /* 8MB */ +#define GCS2_ADDR 0x03900000 /* GCS2 - I/O registers */ +#define GCS2_SIZE 0x00080000 /* 512KB */ +#define GCS3_ADDR 0x02800000 /* GCS3 - EXT-bus: memory space */ +#define GCS3_SIZE 0x00800000 /* 8MB */ +#define GCS4_ADDR 0x03A00000 /* GCS4 - EXT-bus: I/O space */ +#define GCS4_SIZE 0x00200000 /* 2MB */ +#define GCS5_ADDR 0x00800000 /* GCS5 - PCI bus space */ +#define GCS5_SIZE 0x00800000 /* 8MB */ +#define GCS6_ADDR 0x03980000 /* GCS6 - PCI control registers */ +#define GCS6_SIZE 0x00010000 /* 64KB */ + + +/* The GBUS GINT0 - GINT3 interrupts are connected to CPU interrupts 10-12. + These are shared among the GBUS interrupts. */ +#define IRQ_GINT(n) (10 + (n)) +#define IRQ_GINT_NUM 3 + + #define PLATFORM "rte-v850e/nb85e-cb" #define PLATFORM_LONG "Midas lab RTE-V850E/NB85E-CB" @@ -41,13 +65,13 @@ /* The chip's real interrupt vectors are in ROM, but they jump to a secondary interrupt vector table in RAM. */ -#define INTV_BASE 0x004F8000 +#define INTV_BASE 0x03CF8000 /* Scratch memory used by the ROM monitor, which shouldn't be used by linux (except for the alternate interrupt vector area, defined above). */ #define MON_SCRATCH_ADDR 0x03CE8000 -#define MON_SCRATCH_SIZE 0x00008000 /* 32KB */ +#define MON_SCRATCH_SIZE 0x00018000 /* 96KB */ #endif /* CONFIG_ROM_KERNEL */ @@ -58,6 +82,27 @@ #define LED_ADDR(n) (0x03802000 + (n)) #define LED(n) (*(volatile unsigned char *)LED_ADDR(n)) #define LED_NUM_DIGITS 4 + + +/* Override the basic TEG UART pre-initialization so that we can + initialize extra stuff. */ +#undef NB85E_UART_PRE_CONFIGURE /* should be defined by */ +#define NB85E_UART_PRE_CONFIGURE rte_nb85e_cb_uart_pre_configure +#ifndef __ASSEMBLY__ +extern void rte_nb85e_cb_uart_pre_configure (unsigned chan, + unsigned cflags, unsigned baud); +#endif + +/* This board supports RTS/CTS for the on-chip UART. */ + +/* CTS is pin P00. */ +#define NB85E_UART_CTS(chan) (! (TEG_PORT0_IO & 0x1)) +/* RTS is pin P02. */ +#define NB85E_UART_SET_RTS(chan, val) \ + do { \ + unsigned old = TEG_PORT0_IO; \ + TEG_PORT0_IO = val ? (old & ~0x4) : (old | 0x4); \ + } while (0) #endif /* __V850_RTE_NB85E_CB_H__ */ diff -Nru a/include/asm-v850/system.h b/include/asm-v850/system.h --- a/include/asm-v850/system.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-v850/system.h Sat Apr 12 14:44:09 2003 @@ -72,17 +72,10 @@ #define set_mb(var, value) set_rmb (var, value) #define set_wmb(var, value) do { var = value; wmb (); } while (0) -#ifdef CONFIG_SMP #define smp_mb() mb () #define smp_rmb() rmb () #define smp_wmb() wmb () #define smp_read_barrier_depends() read_barrier_depends() -#else -#define smp_mb() barrier () -#define smp_rmb() barrier () -#define smp_wmb() barrier () -#define smp_read_barrier_depends() ((void)0) -#endif #define xchg(ptr, with) \ ((__typeof__ (*(ptr)))__xchg ((unsigned long)(with), (ptr), sizeof (*(ptr)))) diff -Nru a/include/asm-v850/teg.h b/include/asm-v850/teg.h --- a/include/asm-v850/teg.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-v850/teg.h Sat Apr 12 14:44:06 2003 @@ -1,8 +1,8 @@ /* - * include/asm-v850/nb85e_teg.h -- NB85E-TEG cpu chip + * include/asm-v850/teg.h -- NB85E-TEG cpu chip * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -11,33 +11,44 @@ * Written by Miles Bader */ -#ifndef __V850_NB85E_TEG_H__ -#define __V850_NB85E_TEG_H__ +#ifndef __V850_TEG_H__ +#define __V850_TEG_H__ -/* The NB85E_TEG uses the NB85E cpu core. */ + +/* The TEG uses the NB85E cpu core. */ #include +#include + + +#define CPU_MODEL "v850e/nb85e-teg" +#define CPU_MODEL_LONG "NEC V850E/NB85E TEG" -#define CHIP "v850e/nb85e-teg" -#define CHIP_LONG "NEC V850E/NB85E TEG" -/* Hardware-specific interrupt numbers (in the kernel IRQ namespace). */ -#define IRQ_INTOV(n) (n) /* 0-3 */ -#define IRQ_INTOV_NUM 4 -#define IRQ_INTCMD(n) (0x1c + (n)) /* interval timer interrupts 0-3 */ -#define IRQ_INTCMD_NUM 4 -#define IRQ_INTDMA(n) (0x20 + (n)) /* DMA interrupts 0-3 */ -#define IRQ_INTDMA_NUM 4 -#define IRQ_INTCSI(n) (0x24 + (n)) /* CSI 0-2 transmit/receive completion */ -#define IRQ_INTCSI_NUM 3 -#define IRQ_INTSER(n) (0x25 + (n)) /* UART 0-2 reception error */ -#define IRQ_INTSER_NUM 3 -#define IRQ_INTSR(n) (0x26 + (n)) /* UART 0-2 reception completion */ -#define IRQ_INTSR_NUM 3 -#define IRQ_INTST(n) (0x27 + (n)) /* UART 0-2 transmission completion */ -#define IRQ_INTST_NUM 3 +/* For */ +/* We use on-chip RAM, for a few miscellaneous variables that must be + accessible using a load instruction relative to R0. On the NB85E/TEG, + There's 60KB of iRAM starting at 0xFFFF0000, however we need the base + address to be addressable by a 16-bit signed offset, so we only use the + second half of it starting from 0xFFFF8000. */ +#define R0_RAM_ADDR 0xFFFF8000 + + +/* Hardware-specific interrupt numbers (in the kernel IRQ namespace). + Some of these are parameterized even though there's only a single + interrupt, for compatibility with some generic code that works on other + processor models. */ +#define IRQ_INTCMD(n) 6 /* interval timer interrupt */ +#define IRQ_INTCMD_NUM 1 +#define IRQ_INTSER(n) 16 /* UART reception error */ +#define IRQ_INTSER_NUM 1 +#define IRQ_INTSR(n) 17 /* UART reception completion */ +#define IRQ_INTSR_NUM 1 +#define IRQ_INTST(n) 18 /* UART transmission completion */ +#define IRQ_INTST_NUM 1 /* For */ -#define NUM_MACH_IRQS 0x30 +#define NUM_CPU_IRQS 64 + /* TEG UART details. */ #define NB85E_UART_BASE_ADDR(n) (0xFFFFF600 + 0x10 * (n)) @@ -50,9 +61,41 @@ #define NB85E_UART_RXB_ADDR(n) (NB85E_UART_BASE_ADDR(n) + 0xC) #define NB85E_UART_NUM_CHANNELS 1 #define NB85E_UART_BASE_FREQ CPU_CLOCK_FREQ +/* This is a function that gets called before configuring the UART. */ +#define NB85E_UART_PRE_CONFIGURE teg_uart_pre_configure +#ifndef __ASSEMBLY__ +extern void teg_uart_pre_configure (unsigned chan, + unsigned cflags, unsigned baud); +#endif + /* The TEG RTPU. */ #define NB85E_RTPU_BASE_ADDR 0xFFFFF210 -#endif /* __V850_NB85E_TEG_H__ */ +/* TEG series timer D details. */ +#define NB85E_TIMER_D_BASE_ADDR 0xFFFFF210 +#define NB85E_TIMER_D_TMCD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x0) +#define NB85E_TIMER_D_TMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x4) +#define NB85E_TIMER_D_CMD_BASE_ADDR (NB85E_TIMER_D_BASE_ADDR + 0x8) +#define NB85E_TIMER_D_BASE_FREQ CPU_CLOCK_FREQ + + +/* `Interrupt Source Select' control register. */ +#define TEG_ISS_ADDR 0xFFFFF7FA +#define TEG_ISS (*(volatile u8 *)TEG_ISS_ADDR) + +/* Port 0 I/O register (bits 0-3 used). */ +#define TEG_PORT0_IO_ADDR 0xFFFFF7F2 +#define TEG_PORT0_IO (*(volatile u8 *)TEG_PORT0_IO_ADDR) +/* Port 0 control register (bits 0-3 control mode, 0 = output, 1 = input). */ +#define TEG_PORT0_PM_ADDR 0xFFFFF7F4 +#define TEG_PORT0_PM (*(volatile u8 *)TEG_PORT0_PM_ADDR) + + +#ifndef __ASSEMBLY__ +extern void teg_init_irqs (void); +#endif + + +#endif /* __V850_TEG_H__ */ diff -Nru a/include/asm-v850/unistd.h b/include/asm-v850/unistd.h --- a/include/asm-v850/unistd.h Sat Apr 12 14:44:10 2003 +++ b/include/asm-v850/unistd.h Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/unistd.h -- System call numbers and invocation mechanism * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -205,8 +205,6 @@ #define __NR_pivot_root 200 #define __NR_gettid 201 #define __NR_tkill 202 -/* #define __NR_mincore 203 */ -/* #define __NR_madvise 204 */ /* Syscall protocol: diff -Nru a/include/asm-x86_64/byteorder.h b/include/asm-x86_64/byteorder.h --- a/include/asm-x86_64/byteorder.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-x86_64/byteorder.h Sat Apr 12 14:44:09 2003 @@ -17,7 +17,7 @@ return x; } -/* Do not define swab16. Gcc is smart enought to recognize "C" version and +/* Do not define swab16. Gcc is smart enough to recognize "C" version and convert it into rotation or exhange. */ #define __arch__swab32(x) ___arch__swab32(x) diff -Nru a/include/asm-x86_64/fixmap.h b/include/asm-x86_64/fixmap.h --- a/include/asm-x86_64/fixmap.h Sat Apr 12 14:44:06 2003 +++ b/include/asm-x86_64/fixmap.h Sat Apr 12 14:44:06 2003 @@ -66,7 +66,7 @@ /* * 'index to address' translation. If anyone tries to use the idx - * directly without tranlation, we catch the bug with a NULL-deference + * directly without translation, we catch the bug with a NULL-deference * kernel oops. Illegal ranges of incoming indices are caught too. */ extern inline unsigned long fix_to_virt(const unsigned int idx) diff -Nru a/include/asm-x86_64/mmzone.h b/include/asm-x86_64/mmzone.h --- a/include/asm-x86_64/mmzone.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-x86_64/mmzone.h Sat Apr 12 14:44:09 2003 @@ -1,6 +1,6 @@ /* K8 NUMA support */ /* Copyright 2002,2003 by Andi Kleen, SuSE Labs */ -/* 2.5 Version losely based on the NUMAQ Code by Pat Gaughen. */ +/* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */ #ifndef _ASM_X86_64_MMZONE_H #define _ASM_X86_64_MMZONE_H 1 diff -Nru a/include/asm-x86_64/rwsem.h b/include/asm-x86_64/rwsem.h --- a/include/asm-x86_64/rwsem.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-x86_64/rwsem.h Sat Apr 12 14:44:09 2003 @@ -26,7 +26,7 @@ * This should be totally fair - if anything is waiting, a process that wants a * lock will go to the back of the queue. When the currently active lock is * released, if there's a writer at the front of the queue, then that and only - * that will be woken up; if there's a bunch of consequtive readers at the + * that will be woken up; if there's a bunch of consecutive readers at the * front, then they'll all be woken up, but no other readers will be. */ diff -Nru a/include/asm-x86_64/system.h b/include/asm-x86_64/system.h --- a/include/asm-x86_64/system.h Sat Apr 12 14:44:09 2003 +++ b/include/asm-x86_64/system.h Sat Apr 12 14:44:09 2003 @@ -40,7 +40,7 @@ /* It would be more efficient to let the compiler clobber most of these registers. Clobbering all is not possible because that lets reload freak out. Even just clobbering six generates wrong code with gcc 3.1 for me so do it this way for now. - rbp needs to be always explicitely saved because gcc cannot clobber the + rbp needs to be always explicitly saved because gcc cannot clobber the frame pointer and the scheduler is compiled with frame pointers. -AK */ #define SAVE_CONTEXT \ __PUSH(rsi) __PUSH(rdi) \ diff -Nru a/include/linux/agp_backend.h b/include/linux/agp_backend.h --- a/include/linux/agp_backend.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/agp_backend.h Sat Apr 12 14:44:09 2003 @@ -53,7 +53,7 @@ INTEL_I850, INTEL_I860, INTEL_460GX, - INTEL_I7505, + INTEL_E7505, VIA_GENERIC, SIS_GENERIC, AMD_GENERIC, diff -Nru a/include/linux/compatmac.h b/include/linux/compatmac.h --- a/include/linux/compatmac.h Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,160 +0,0 @@ - /* - * This header tries to allow you to write 2.3-compatible drivers, - * but (using this header) still allows you to run them on 2.2 and - * 2.0 kernels. - * - * Sometimes, a #define replaces a "construct" that older kernels - * had. For example, - * - * DECLARE_MUTEX(name); - * - * replaces the older - * - * struct semaphore name = MUTEX; - * - * This file then declares the DECLARE_MUTEX macro to compile into the - * older version. - * - * In some cases, a macro or function changes the number of arguments. - * In that case, there is nothing we can do except define an access - * macro that provides the same functionality on both versions of Linux. - * - * This is the case for example with the "get_user" macro 2.0 kernels use: - * - * a = get_user (b); - * - * while newer kernels use - * - * get_user (a,b); - * - * This is unfortunate. We therefore define "Get_user (a,b)" which looks - * almost the same as the 2.2+ construct, and translates into the - * appropriate sequence for earlier constructs. - * - * Supported by this file are the 2.0 kernels, 2.2 kernels, and the - * most recent 2.3 kernel. 2.3 support will be dropped as soon when 2.4 - * comes out. 2.0 support may someday be dropped. But then again, maybe - * not. - * - * I'll try to maintain this, provided that Linus agrees with the setup. - * Feel free to mail updates or suggestions. - * - * -- R.E.Wolff@BitWizard.nl - * - */ - -#ifndef COMPATMAC_H -#define COMPATMAC_H - -#include - -#if LINUX_VERSION_CODE < 0x020100 /* Less than 2.1.0 */ -#define TWO_ZERO -#else -#if LINUX_VERSION_CODE < 0x020200 /* less than 2.2.x */ -#warning "Please use a 2.2.x kernel. " -#else -#if LINUX_VERSION_CODE < 0x020300 /* less than 2.3.x */ -#define TWO_TWO -#else -#define TWO_THREE -#endif -#endif -#endif - -#ifdef TWO_ZERO - -/* Here is the section that makes the 2.2 compatible driver source - work for 2.0 too! We mostly try to adopt the "new thingies" from 2.2, - and provide for compatibility stuff here if possible. */ - -/* Some 200 days (on intel) */ -#define MAX_SCHEDULE_TIMEOUT ((long)(~0UL>>1)) - -#include - -#define Get_user(a,b) a = get_user(b) -#define Put_user(a,b) 0,put_user(a,b) -#define copy_to_user(a,b,c) memcpy_tofs(a,b,c) - -static inline int copy_from_user(void *to,const void *from, int c) -{ - memcpy_fromfs(to, from, c); - return 0; -} - -#define pci_present pcibios_present -#define pci_read_config_word pcibios_read_config_word -#define pci_read_config_dword pcibios_read_config_dword - -static inline unsigned char get_irq (unsigned char bus, unsigned char fn) -{ - unsigned char t; - pcibios_read_config_byte (bus, fn, PCI_INTERRUPT_LINE, &t); - return t; -} - -static inline void *ioremap(unsigned long base, long length) -{ - if (base < 0x100000) return (void *)base; - return vremap (base, length); -} - -#define my_iounmap(x, b) (((long)x<0x100000)?0:vfree ((void*)x)) - -#define tty_flip_buffer_push(tty) schedule_delayed_work(&tty->flip.work, 1) -#define signal_pending(current) (current->signal & ~current->blocked) -#define schedule_timeout(to) do {current->timeout = jiffies + (to);schedule ();} while (0) -#define time_after(t1,t2) (((long)t1-t2) > 0) - - -#define test_and_set_bit(nr, addr) set_bit(nr, addr) -#define test_and_clear_bit(nr, addr) clear_bit(nr, addr) - -/* Not yet implemented on 2.0 */ -#define ASYNC_SPD_SHI -1 -#define ASYNC_SPD_WARP -1 - - -/* Ugly hack: the driver_name doesn't exist in 2.0.x . So we define it - to the "name" field that does exist. As long as the assignments are - done in the right order, there is nothing to worry about. */ -#define driver_name name - -/* Should be in a header somewhere. They are in tty.h on 2.2 */ -#define TTY_HW_COOK_OUT 14 /* Flag to tell ntty what we can handle */ -#define TTY_HW_COOK_IN 15 /* in hardware - output and input */ - -/* The return type of a "close" routine. */ -#define INT void -#define NO_ERROR /* Nothing */ - -#else - -/* The 2.2.x compatibility section. */ -#include - - -#define Get_user(a,b) get_user(a,b) -#define Put_user(a,b) put_user(a,b) -#define get_irq(pdev) pdev->irq - -#define INT int -#define NO_ERROR 0 - -#define my_iounmap(x,b) (iounmap((char *)(b))) - -#endif - -#ifndef TWO_THREE -/* These are new in 2.3. The source now uses 2.3 syntax, and here is - the compatibility define... */ -#define wait_queue_head_t struct wait_queue * -#define DECLARE_MUTEX(name) struct semaphore name = MUTEX -#define DECLARE_WAITQUEUE(wait, current) \ - struct wait_queue wait = { current, NULL } - -#endif - - -#endif diff -Nru a/include/linux/compiler.h b/include/linux/compiler.h --- a/include/linux/compiler.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/compiler.h Sat Apr 12 14:44:08 2003 @@ -1,6 +1,14 @@ #ifndef __LINUX_COMPILER_H #define __LINUX_COMPILER_H +#ifdef __CHECKER__ + #define __user __attribute__((noderef, address_space(1))) + #define __kernel /* default address space */ +#else + #define __user + #define __kernel +#endif + #if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) #define inline __inline__ __attribute__((always_inline)) #define __inline__ __inline__ __attribute__((always_inline)) diff -Nru a/include/linux/dvb/audio.h b/include/linux/dvb/audio.h --- a/include/linux/dvb/audio.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/dvb/audio.h Sat Apr 12 14:44:06 2003 @@ -47,10 +47,17 @@ typedef enum { AUDIO_STEREO, AUDIO_MONO_LEFT, - AUDIO_MONO_RIGHT, + AUDIO_MONO_RIGHT } audio_channel_select_t; +typedef struct audio_mixer { + unsigned int volume_left; + unsigned int volume_right; + // what else do we need? bass, pass-through, ... +} audio_mixer_t; + + typedef struct audio_status { int AV_sync_state; /* sync audio and video? */ int mute_state; /* audio is muted */ @@ -58,14 +65,8 @@ audio_stream_source_t stream_source; /* current stream source */ audio_channel_select_t channel_select; /* currently selected channel */ int bypass_mode; /* pass on audio data to */ + audio_mixer_t mixer_state; /* current mixer state */ } audio_status_t; /* separate decoder hardware */ - - -typedef struct audio_mixer { - unsigned int volume_left; - unsigned int volume_right; - // what else do we need? bass, pass-through, ... -} audio_mixer_t; typedef diff -Nru a/include/linux/dvb/ca.h b/include/linux/dvb/ca.h --- a/include/linux/dvb/ca.h Sat Apr 12 14:44:10 2003 +++ b/include/linux/dvb/ca.h Sat Apr 12 14:44:10 2003 @@ -21,8 +21,8 @@ * */ -#ifndef _CA_H_ -#define _CA_H_ +#ifndef _DVBCA_H_ +#define _DVBCA_H_ /* slot interface types and info */ @@ -33,6 +33,7 @@ #define CA_CI 1 /* CI high level interface */ #define CA_CI_LINK 2 /* CI link layer level interface */ #define CA_CI_PHYS 4 /* CI physical layer level interface */ +#define CA_DESCR 8 /* built-in descrambler */ #define CA_SC 128 /* simple smart card interface */ unsigned int flags; @@ -44,7 +45,7 @@ /* descrambler types and info */ typedef struct ca_descr_info { - unsigned int num; /* number of available descramblers (keys) */ + unsigned int num; /* number of available descramblers (keys) */ unsigned int type; /* type of supported scrambling system */ #define CA_ECD 1 #define CA_NDS 2 @@ -59,19 +60,24 @@ } ca_caps_t; /* a message to/from a CI-CAM */ -typedef struct ca_msg { - unsigned int index; +typedef struct ca_msg { + unsigned int index; unsigned int type; unsigned int length; unsigned char msg[256]; } ca_msg_t; typedef struct ca_descr { - unsigned int index; - unsigned int parity; + unsigned int index; + unsigned int parity; /* 0 == even, 1 == odd */ unsigned char cw[8]; } ca_descr_t; +typedef struct ca_pid { + unsigned int pid; + int index; /* -1 == disable*/ +} ca_pid_t; + #define CA_RESET _IO('o', 128) #define CA_GET_CAP _IOR('o', 129, ca_caps_t) #define CA_GET_SLOT_INFO _IOR('o', 130, ca_slot_info_t) @@ -79,6 +85,7 @@ #define CA_GET_MSG _IOR('o', 132, ca_msg_t) #define CA_SEND_MSG _IOW('o', 133, ca_msg_t) #define CA_SET_DESCR _IOW('o', 134, ca_descr_t) +#define CA_SET_PID _IOW('o', 135, ca_pid_t) #endif diff -Nru a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h --- a/include/linux/dvb/dmx.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/dvb/dmx.h Sat Apr 12 14:44:09 2003 @@ -21,13 +21,14 @@ * */ -#ifndef _DMX_H_ -#define _DMX_H_ +#ifndef _DVBDMX_H_ +#define _DVBDMX_H_ #ifdef __KERNEL__ #include #else #include +#include #endif #define DMX_FILTER_SIZE 16 @@ -154,9 +155,15 @@ DMX_SOURCE_DVR0 = 16, DMX_SOURCE_DVR1, DMX_SOURCE_DVR2, - DMX_SOURCE_DVR3, + DMX_SOURCE_DVR3 } dmx_source_t; +struct dmx_stc { + unsigned int num; /* input : which STC? 0..N */ + unsigned int base; /* output: divisor for stc to get 90 kHz clock */ + uint64_t stc; /* output: stc in 'base'*90 kHz units */ +}; + #define DMX_START _IO('o',41) #define DMX_STOP _IO('o',42) @@ -164,9 +171,10 @@ #define DMX_SET_PES_FILTER _IOW('o',44,struct dmx_pes_filter_params) #define DMX_SET_BUFFER_SIZE _IO('o',45) #define DMX_GET_EVENT _IOR('o',46,struct dmx_event) -#define DMX_GET_PES_PIDS _IOR('o',47,uint16_t) +#define DMX_GET_PES_PIDS _IOR('o',47,uint16_t[5]) #define DMX_GET_CAPS _IOR('o',48,dmx_caps_t) #define DMX_SET_SOURCE _IOW('o',49,dmx_source_t) +#define DMX_GET_STC _IOWR('o',50,struct dmx_stc) -#endif /*_DMX_H_*/ +#endif /*_DVBDMX_H_*/ diff -Nru a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h --- a/include/linux/dvb/frontend.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/dvb/frontend.h Sat Apr 12 14:44:08 2003 @@ -23,8 +23,8 @@ * */ -#ifndef _FRONTEND_H_ -#define _FRONTEND_H_ +#ifndef _DVBFRONTEND_H_ +#define _DVBFRONTEND_H_ #ifdef __KERNEL__ #include @@ -33,14 +33,14 @@ #endif -typedef enum { +typedef enum fe_type { FE_QPSK, FE_QAM, FE_OFDM } fe_type_t; -typedef enum { +typedef enum fe_caps { FE_IS_STUPID = 0, FE_CAN_INVERSION_AUTO = 0x1, FE_CAN_FEC_1_2 = 0x2, @@ -63,6 +63,8 @@ FE_CAN_BANDWIDTH_AUTO = 0x40000, FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, FE_CAN_HIERARCHY_AUTO = 0x100000, + FE_CAN_RECOVER = 0x20000000, + FE_CAN_CLEAN_SETUP = 0x40000000, FE_CAN_MUTE_TS = 0x80000000 } fe_caps_t; @@ -99,25 +101,25 @@ }; /* errorcode when no message was received */ -typedef enum { +typedef enum fe_sec_voltage { SEC_VOLTAGE_13, SEC_VOLTAGE_18 } fe_sec_voltage_t; -typedef enum { +typedef enum fe_sec_tone_mode { SEC_TONE_ON, SEC_TONE_OFF } fe_sec_tone_mode_t; -typedef enum { +typedef enum fe_sec_mini_cmd { SEC_MINI_A, SEC_MINI_B } fe_sec_mini_cmd_t; -typedef enum { +typedef enum fe_status { FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ FE_HAS_CARRIER = 0x02, /* found a DVB signal */ FE_HAS_VITERBI = 0x04, /* FEC is stable */ @@ -125,17 +127,17 @@ FE_HAS_LOCK = 0x10, /* everything's working... */ FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ FE_REINIT = 0x40 /* frontend was reinitialized, */ -} fe_status_t; /* application is recommned to reset */ +} fe_status_t; /* application is recommended to reset */ /* DiSEqC, tone and parameters */ -typedef enum { +typedef enum fe_spectral_inversion { INVERSION_OFF, INVERSION_ON, INVERSION_AUTO } fe_spectral_inversion_t; -typedef enum { +typedef enum fe_code_rate { FEC_NONE = 0, FEC_1_2, FEC_2_3, @@ -149,7 +151,7 @@ } fe_code_rate_t; -typedef enum { +typedef enum fe_modulation { QPSK, QAM_16, QAM_32, @@ -160,13 +162,13 @@ } fe_modulation_t; -typedef enum { +typedef enum fe_transmit_mode { TRANSMISSION_MODE_2K, TRANSMISSION_MODE_8K, TRANSMISSION_MODE_AUTO } fe_transmit_mode_t; -typedef enum { +typedef enum fe_bandwidth { BANDWIDTH_8_MHZ, BANDWIDTH_7_MHZ, BANDWIDTH_6_MHZ, @@ -174,7 +176,7 @@ } fe_bandwidth_t; -typedef enum { +typedef enum fe_guard_interval { GUARD_INTERVAL_1_32, GUARD_INTERVAL_1_16, GUARD_INTERVAL_1_8, @@ -183,7 +185,7 @@ } fe_guard_interval_t; -typedef enum { +typedef enum fe_hierarchy { HIERARCHY_NONE, HIERARCHY_1, HIERARCHY_2, @@ -257,5 +259,5 @@ #define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) -#endif /*_FRONTEND_H_*/ +#endif /*_DVBFRONTEND_H_*/ diff -Nru a/include/linux/dvb/net.h b/include/linux/dvb/net.h --- a/include/linux/dvb/net.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/dvb/net.h Sat Apr 12 14:44:06 2003 @@ -39,6 +39,7 @@ #define NET_ADD_IF _IOWR('o', 52, struct dvb_net_if) #define NET_REMOVE_IF _IO('o', 53) +#define NET_GET_IF _IOWR('o', 54, struct dvb_net_if) #endif /*_DVBNET_H_*/ diff -Nru a/include/linux/dvb/osd.h b/include/linux/dvb/osd.h --- a/include/linux/dvb/osd.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/dvb/osd.h Sat Apr 12 14:44:09 2003 @@ -25,83 +25,83 @@ #define _DVBOSD_H_ typedef enum { - // All functions return -2 on "not open" + // All functions return -2 on "not open" OSD_Close=1, // () - // Disables OSD and releases the buffers - // returns 0 on success - OSD_Open, // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0)) - // Opens OSD with this size and bit depth - // returns 0 on success, -1 on DRAM allocation error, -2 on "already open" - OSD_Show, // () - // enables OSD mode - // returns 0 on success - OSD_Hide, // () - // disables OSD mode - // returns 0 on success - OSD_Clear, // () - // Sets all pixel to color 0 - // returns 0 on success - OSD_Fill, // (color) - // Sets all pixel to color - // returns 0 on success - OSD_SetColor, // (color,R{x0},G{y0},B{x1},opacity{y1}) - // set palette entry to , and apply - // R,G,B: 0..255 - // R=Red, G=Green, B=Blue - // opacity=0: pixel opacity 0% (only video pixel shows) - // opacity=1..254: pixel opacity as specified in header - // opacity=255: pixel opacity 100% (only OSD pixel shows) - // returns 0 on success, -1 on error - OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data) - // Set a number of entries in the palette - // sets the entries "firstcolor" through "lastcolor" from the array "data" - // data has 4 byte for each color: - // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel - OSD_SetTrans, // (transparency{color}) - // Sets transparency of mixed pixel (0..15) - // returns 0 on success - OSD_SetPixel, // (x0,y0,color) - // sets pixel , to color number - // returns 0 on success, -1 on error - OSD_GetPixel, // (x0,y0) - // returns color number of pixel ,, or -1 - OSD_SetRow, // (x0,y0,x1,data) - // fills pixels x0,y through x1,y with the content of data[] - // returns 0 on success, -1 on clipping all pixel (no pixel drawn) - OSD_SetBlock, // (x0,y0,x1,y1,increment{color},data) - // fills pixels x0,y0 through x1,y1 with the content of data[] - // inc contains the width of one line in the data block, - // inc<=0 uses blockwidth as linewidth - // returns 0 on success, -1 on clipping all pixel - OSD_FillRow, // (x0,y0,x1,color) - // fills pixels x0,y through x1,y with the color - // returns 0 on success, -1 on clipping all pixel - OSD_FillBlock, // (x0,y0,x1,y1,color) - // fills pixels x0,y0 through x1,y1 with the color - // returns 0 on success, -1 on clipping all pixel - OSD_Line, // (x0,y0,x1,y1,color) - // draw a line from x0,y0 to x1,y1 with the color - // returns 0 on success - OSD_Query, // (x0,y0,x1,y1,xasp{color}}), yasp=11 - // fills parameters with the picture dimensions and the pixel aspect ratio - // returns 0 on success - OSD_Test, // () - // draws a test picture. for debugging purposes only - // returns 0 on success + // Disables OSD and releases the buffers + // returns 0 on success + OSD_Open, // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0)) + // Opens OSD with this size and bit depth + // returns 0 on success, -1 on DRAM allocation error, -2 on "already open" + OSD_Show, // () + // enables OSD mode + // returns 0 on success + OSD_Hide, // () + // disables OSD mode + // returns 0 on success + OSD_Clear, // () + // Sets all pixel to color 0 + // returns 0 on success + OSD_Fill, // (color) + // Sets all pixel to color + // returns 0 on success + OSD_SetColor, // (color,R{x0},G{y0},B{x1},opacity{y1}) + // set palette entry to , and apply + // R,G,B: 0..255 + // R=Red, G=Green, B=Blue + // opacity=0: pixel opacity 0% (only video pixel shows) + // opacity=1..254: pixel opacity as specified in header + // opacity=255: pixel opacity 100% (only OSD pixel shows) + // returns 0 on success, -1 on error + OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data) + // Set a number of entries in the palette + // sets the entries "firstcolor" through "lastcolor" from the array "data" + // data has 4 byte for each color: + // R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel + OSD_SetTrans, // (transparency{color}) + // Sets transparency of mixed pixel (0..15) + // returns 0 on success + OSD_SetPixel, // (x0,y0,color) + // sets pixel , to color number + // returns 0 on success, -1 on error + OSD_GetPixel, // (x0,y0) + // returns color number of pixel ,, or -1 + OSD_SetRow, // (x0,y0,x1,data) + // fills pixels x0,y through x1,y with the content of data[] + // returns 0 on success, -1 on clipping all pixel (no pixel drawn) + OSD_SetBlock, // (x0,y0,x1,y1,increment{color},data) + // fills pixels x0,y0 through x1,y1 with the content of data[] + // inc contains the width of one line in the data block, + // inc<=0 uses blockwidth as linewidth + // returns 0 on success, -1 on clipping all pixel + OSD_FillRow, // (x0,y0,x1,color) + // fills pixels x0,y through x1,y with the color + // returns 0 on success, -1 on clipping all pixel + OSD_FillBlock, // (x0,y0,x1,y1,color) + // fills pixels x0,y0 through x1,y1 with the color + // returns 0 on success, -1 on clipping all pixel + OSD_Line, // (x0,y0,x1,y1,color) + // draw a line from x0,y0 to x1,y1 with the color + // returns 0 on success + OSD_Query, // (x0,y0,x1,y1,xasp{color}}), yasp=11 + // fills parameters with the picture dimensions and the pixel aspect ratio + // returns 0 on success + OSD_Test, // () + // draws a test picture. for debugging purposes only + // returns 0 on success // TODO: remove "test" in final version - OSD_Text, // (x0,y0,size,color,text) - OSD_SetWindow, // (x0) set window with number 0 #else #include +#include #endif diff -Nru a/include/linux/fdreg.h b/include/linux/fdreg.h --- a/include/linux/fdreg.h Sat Apr 12 14:44:10 2003 +++ b/include/linux/fdreg.h Sat Apr 12 14:44:10 2003 @@ -7,8 +7,12 @@ */ #ifdef FDPATCHES - #define FD_IOPORT fdc_state[fdc].address +#else +/* It would be a lot saner just to force fdc_state[fdc].address to always + be set ! FIXME */ +#define FD_IOPORT 0x3f0 +#endif /* Fd controller regs. S&C, about page 340 */ #define FD_STATUS (4 + FD_IOPORT ) @@ -22,16 +26,6 @@ /* Diskette Control Register (write)*/ #define FD_DCR (7 + FD_IOPORT ) - -#else - -#define FD_STATUS 0x3f4 -#define FD_DATA 0x3f5 -#define FD_DOR 0x3f2 /* Digital Output Register */ -#define FD_DIR 0x3f7 /* Digital Input Register (read) */ -#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/ - -#endif /* Bits of main status register */ #define STATUS_BUSYMASK 0x0F /* drive busy mask */ diff -Nru a/include/linux/fs.h b/include/linux/fs.h --- a/include/linux/fs.h Sat Apr 12 14:44:07 2003 +++ b/include/linux/fs.h Sat Apr 12 14:44:07 2003 @@ -313,7 +313,7 @@ struct address_space { struct inode *host; /* owner: inode, block_device */ struct radix_tree_root page_tree; /* radix tree of all pages */ - rwlock_t page_lock; /* and rwlock protecting it */ + spinlock_t page_lock; /* and rwlock protecting it */ struct list_head clean_pages; /* list of clean pages */ struct list_head dirty_pages; /* list of dirty pages */ struct list_head locked_pages; /* list of locked pages */ @@ -321,8 +321,8 @@ unsigned long nrpages; /* number of total pages */ struct address_space_operations *a_ops; /* methods */ struct list_head i_mmap; /* list of private mappings */ - struct list_head i_mmap_shared; /* list of private mappings */ - struct semaphore i_shared_sem; /* and sem protecting it */ + struct list_head i_mmap_shared; /* list of shared mappings */ + struct semaphore i_shared_sem; /* protect both above lists */ unsigned long dirtied_when; /* jiffies of first page dirtying */ int gfp_mask; /* how to allocate the pages */ struct backing_dev_info *backing_dev_info; /* device readahead, etc */ @@ -705,10 +705,10 @@ struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); - ssize_t (*read) (struct file *, char *, size_t, loff_t *); - ssize_t (*aio_read) (struct kiocb *, char *, size_t, loff_t); - ssize_t (*write) (struct file *, const char *, size_t, loff_t *); - ssize_t (*aio_write) (struct kiocb *, const char *, size_t, loff_t); + ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); + ssize_t (*aio_read) (struct kiocb *, char __user *, size_t, loff_t); + ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); + ssize_t (*aio_write) (struct kiocb *, const char __user *, size_t, loff_t); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); @@ -738,7 +738,7 @@ int (*mknod) (struct inode *,struct dentry *,int,dev_t); int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *); - int (*readlink) (struct dentry *, char *,int); + int (*readlink) (struct dentry *, char __user *,int); int (*follow_link) (struct dentry *, struct nameidata *); void (*truncate) (struct inode *); int (*permission) (struct inode *, int); @@ -1024,7 +1024,7 @@ extern struct file *filp_open(const char *, int, int); extern struct file * dentry_open(struct dentry *, struct vfsmount *, int); extern int filp_close(struct file *, fl_owner_t id); -extern char * getname(const char *); +extern char * getname(const char __user *); /* fs/dcache.c */ extern void vfs_caches_init(unsigned long); diff -Nru a/include/linux/hdreg.h b/include/linux/hdreg.h --- a/include/linux/hdreg.h Sat Apr 12 14:44:07 2003 +++ b/include/linux/hdreg.h Sat Apr 12 14:44:07 2003 @@ -355,7 +355,7 @@ #define SETFEATURES_DIS_MSN 0x31 /* Disable Media Status Notification */ #define SETFEATURES_DIS_RETRY 0x33 /* Disable Retry */ #define SETFEATURES_EN_AAM 0x42 /* Enable Automatic Acoustic Management */ -#define SETFEATURES_RW_LONG 0x44 /* Set Lenght of VS bytes */ +#define SETFEATURES_RW_LONG 0x44 /* Set Length of VS bytes */ #define SETFEATURES_SET_CACHE 0x54 /* Set Cache segments to SC Reg. Val */ #define SETFEATURES_DIS_RLA 0x55 /* Disable read look-ahead feature */ #define SETFEATURES_EN_RI 0x5D /* Enable release interrupt */ diff -Nru a/include/linux/i2c-dev.h b/include/linux/i2c-dev.h --- a/include/linux/i2c-dev.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/i2c-dev.h Sat Apr 12 14:44:06 2003 @@ -31,16 +31,16 @@ /* This is the structure as used in the I2C_SMBUS ioctl call */ struct i2c_smbus_ioctl_data { - char read_write; + __u8 read_write; __u8 command; - int size; + __u32 size; union i2c_smbus_data *data; }; /* This is the structure as used in the I2C_RDWR ioctl call */ struct i2c_rdwr_ioctl_data { struct i2c_msg *msgs; /* pointers to i2c_msgs */ - int nmsgs; /* number of i2c_msgs */ + __u32 nmsgs; /* number of i2c_msgs */ }; #endif /* _LINUX_I2C_DEV_H */ diff -Nru a/include/linux/i2c.h b/include/linux/i2c.h --- a/include/linux/i2c.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/i2c.h Sat Apr 12 14:44:06 2003 @@ -182,6 +182,13 @@ return dev_set_drvdata (&dev->dev, data); } +#define I2C_DEVNAME(str) .dev = { .name = str } + +static inline char *i2c_clientname(struct i2c_client *c) +{ + return c->dev.name; +} + /* * The following structs are for those who like to implement new bus drivers: * i2c_algorithm is the interface to a class of hardware solutions which can @@ -360,15 +367,15 @@ */ struct i2c_msg { __u16 addr; /* slave address */ - unsigned short flags; + __u16 flags; #define I2C_M_TEN 0x10 /* we have a ten bit chip address */ #define I2C_M_RD 0x01 #define I2C_M_NOSTART 0x4000 #define I2C_M_REV_DIR_ADDR 0x2000 #define I2C_M_IGNORE_NAK 0x1000 #define I2C_M_NO_RD_ACK 0x0800 - short len; /* msg length */ - char *buf; /* pointer to msg data */ + __u16 len; /* msg length */ + __u8 *buf; /* pointer to msg data */ }; /* To determine what functionality is present */ diff -Nru a/include/linux/if_bridge.h b/include/linux/if_bridge.h --- a/include/linux/if_bridge.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/if_bridge.h Sat Apr 12 14:44:08 2003 @@ -101,7 +101,7 @@ struct net_bridge; struct net_bridge_port; -extern int (*br_ioctl_hook)(unsigned long arg); +extern void brioctl_set(int (*ioctl_hook)(unsigned long)); extern int (*br_handle_frame_hook)(struct sk_buff *skb); extern int (*br_should_route_hook)(struct sk_buff **pskb); diff -Nru a/include/linux/igmp.h b/include/linux/igmp.h --- a/include/linux/igmp.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/igmp.h Sat Apr 12 14:44:08 2003 @@ -32,13 +32,60 @@ __u32 group; }; +/* V3 group record types [grec_type] */ +#define IGMPV3_MODE_IS_INCLUDE 1 +#define IGMPV3_MODE_IS_EXCLUDE 2 +#define IGMPV3_CHANGE_TO_INCLUDE 3 +#define IGMPV3_CHANGE_TO_EXCLUDE 4 +#define IGMPV3_ALLOW_NEW_SOURCES 5 +#define IGMPV3_BLOCK_OLD_SOURCES 6 + +struct igmpv3_grec { + __u8 grec_type; + __u8 grec_auxwords; + __u16 grec_nsrcs; + __u32 grec_mca; + __u32 grec_src[0]; +}; + +struct igmpv3_report { + __u8 type; + __u8 resv1; + __u16 csum; + __u16 resv2; + __u16 ngrec; + struct igmpv3_grec grec[0]; +}; + +struct igmpv3_query { + __u8 type; + __u8 code; + __u16 csum; + __u32 group; +#if defined(__LITTLE_ENDIAN_BITFIELD) + __u8 qrv:3, + suppress:1, + resv:4; +#elif defined(__BIG_ENDIAN_BITFIELD) + __u8 resv:4, + suppress:1, + qrv:3; +#else +#error "Please fix " +#endif + __u8 qqic; + __u16 nsrcs; + __u32 srcs[0]; +}; + #define IGMP_HOST_MEMBERSHIP_QUERY 0x11 /* From RFC1112 */ #define IGMP_HOST_MEMBERSHIP_REPORT 0x12 /* Ditto */ #define IGMP_DVMRP 0x13 /* DVMRP routing */ #define IGMP_PIM 0x14 /* PIM routing */ #define IGMP_TRACE 0x15 -#define IGMP_HOST_NEW_MEMBERSHIP_REPORT 0x16 /* New version of 0x11 */ +#define IGMPV2_HOST_MEMBERSHIP_REPORT 0x16 /* V2 version of 0x11 */ #define IGMP_HOST_LEAVE_MESSAGE 0x17 +#define IGMPV3_HOST_MEMBERSHIP_REPORT 0x22 /* V3 version of 0x11 */ #define IGMP_MTRACE_RESP 0x1e #define IGMP_MTRACE 0x1f @@ -68,6 +115,7 @@ #define IGMP_ALL_HOSTS htonl(0xE0000001L) #define IGMP_ALL_ROUTER htonl(0xE0000002L) +#define IGMPV3_ALL_MCR htonl(0xE0000016L) #define IGMP_LOCAL_GROUP htonl(0xE0000000L) #define IGMP_LOCAL_GROUP_MASK htonl(0xFFFFFF00L) @@ -79,6 +127,18 @@ #include #include +struct ip_sf_socklist +{ + unsigned int sl_max; + unsigned int sl_count; + __u32 sl_addr[0]; +}; + +#define IP_SFLSIZE(count) (sizeof(struct ip_sf_socklist) + \ + (count) * sizeof(__u32)) + +#define IP_SFBLOCK 10 /* allocate this many at once */ + /* ip_mc_socklist is real list now. Speed is not argument; this list never used in fast path code */ @@ -88,12 +148,28 @@ struct ip_mc_socklist *next; int count; struct ip_mreqn multi; + unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */ + struct ip_sf_socklist *sflist; +}; + +struct ip_sf_list +{ + struct ip_sf_list *sf_next; + __u32 sf_inaddr; + unsigned long sf_count[2]; /* include/exclude counts */ + unsigned char sf_gsresp; /* include in g & s response? */ + unsigned char sf_oldin; /* change state */ + unsigned char sf_crcount; /* retrans. left to send */ }; struct ip_mc_list { struct in_device *interface; unsigned long multiaddr; + struct ip_sf_list *sources; + struct ip_sf_list *tomb; + unsigned int sfmode; + unsigned long sfcount[2]; struct ip_mc_list *next; struct timer_list timer; int users; @@ -103,13 +179,31 @@ char reporter; char unsolicit_count; char loaded; + unsigned char gsquery; /* check source marks? */ + unsigned char crcount; }; -extern int ip_check_mc(struct in_device *dev, u32 mc_addr); +/* V3 exponential field decoding */ +#define IGMPV3_MASK(value, nb) ((nb)>=32 ? (value) : ((1<<(nb))-1) & (value)) +#define IGMPV3_EXP(thresh, nbmant, nbexp, value) \ + ((value) < (thresh) ? (value) : \ + ((IGMPV3_MASK(value, nbmant) | (1<<(nbmant+nbexp))) << \ + (IGMPV3_MASK((value) >> (nbmant), nbexp) + (nbexp)))) + +#define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value) +#define IGMPV3_MRC(value) IGMPV3_EXP(0x8000, 12, 3, value) + +extern int ip_check_mc(struct in_device *dev, u32 mc_addr, u32 src_addr, u16 proto); extern int igmp_rcv(struct sk_buff *); extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr); extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr); extern void ip_mc_drop_socket(struct sock *sk); +extern int ip_mc_source(int add, int omode, struct sock *sk, + struct ip_mreq_source *mreqs); +extern int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf); +extern int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf, + struct ip_msfilter *optval, int *optlen); +extern int ip_mc_sf_allow(struct sock *sk, u32 local, u32 rmt, int dif); extern void ip_mr_init(void); extern void ip_mc_init_dev(struct in_device *); extern void ip_mc_destroy_dev(struct in_device *); diff -Nru a/include/linux/in.h b/include/linux/in.h --- a/include/linux/in.h Sat Apr 12 14:44:10 2003 +++ b/include/linux/in.h Sat Apr 12 14:44:10 2003 @@ -85,6 +85,14 @@ #define IP_MULTICAST_LOOP 34 #define IP_ADD_MEMBERSHIP 35 #define IP_DROP_MEMBERSHIP 36 +#define IP_UNBLOCK_SOURCE 37 +#define IP_BLOCK_SOURCE 38 +#define IP_ADD_SOURCE_MEMBERSHIP 39 +#define IP_DROP_SOURCE_MEMBERSHIP 40 +#define IP_MSFILTER 41 + +#define MCAST_EXCLUDE 0 +#define MCAST_INCLUDE 1 /* These need to appear somewhere around here */ #define IP_DEFAULT_MULTICAST_TTL 1 @@ -104,6 +112,24 @@ struct in_addr imr_address; /* local IP address of interface */ int imr_ifindex; /* Interface index */ }; + +struct ip_mreq_source { + __u32 imr_multiaddr; + __u32 imr_interface; + __u32 imr_sourceaddr; +}; + +struct ip_msfilter { + __u32 imsf_multiaddr; + __u32 imsf_interface; + __u32 imsf_fmode; + __u32 imsf_numsrc; + __u32 imsf_slist[1]; +}; + +#define IP_MSFILTER_SIZE(numsrc) \ + (sizeof(struct ip_msfilter) - sizeof(__u32) \ + + (numsrc) * sizeof(__u32)) struct in_pktinfo { diff -Nru a/include/linux/inetdevice.h b/include/linux/inetdevice.h --- a/include/linux/inetdevice.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/inetdevice.h Sat Apr 12 14:44:08 2003 @@ -34,7 +34,17 @@ int dead; struct in_ifaddr *ifa_list; /* IP ifaddr chain */ struct ip_mc_list *mc_list; /* IP multicast filter chain */ + rwlock_t mc_lock; /* for mc_tomb */ + struct ip_mc_list *mc_tomb; unsigned long mr_v1_seen; + unsigned long mr_v2_seen; + unsigned long mr_maxdelay; + unsigned char mr_qrv; + unsigned char mr_gq_running; + unsigned char mr_ifc_count; + struct timer_list mr_gq_timer; /* general query timer */ + struct timer_list mr_ifc_timer; /* interface change timer */ + struct neigh_parms *arp_parms; struct ipv4_devconf cnf; }; diff -Nru a/include/linux/irda.h b/include/linux/irda.h --- a/include/linux/irda.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/irda.h Sat Apr 12 14:44:06 2003 @@ -25,6 +25,8 @@ #ifndef KERNEL_IRDA_H #define KERNEL_IRDA_H +#include /* only for sa_family_t */ + /* Hint bit positions for first hint byte */ #define HINT_PNP 0x01 #define HINT_PDA 0x02 diff -Nru a/include/linux/jbd.h b/include/linux/jbd.h --- a/include/linux/jbd.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/jbd.h Sat Apr 12 14:44:09 2003 @@ -274,8 +274,9 @@ #define __journal_expect(expr, why...) \ do { \ if (!(expr)) { \ - printk(KERN_ERR "EXT3-fs unexpected failure: %s;\n", # expr); \ - printk(KERN_ERR ## why); \ + printk(KERN_ERR \ + "EXT3-fs unexpected failure: %s;\n",# expr); \ + printk(KERN_ERR why); \ } \ } while (0) #define J_EXPECT(expr, why...) __journal_expect(expr, ## why) diff -Nru a/include/linux/kernel.h b/include/linux/kernel.h --- a/include/linux/kernel.h Sat Apr 12 14:44:05 2003 +++ b/include/linux/kernel.h Sat Apr 12 14:44:05 2003 @@ -104,6 +104,7 @@ extern void bust_spinlocks(int yes); extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in progress */ +extern int panic_on_oops; extern int tainted; extern const char *print_tainted(void); diff -Nru a/include/linux/kobject.h b/include/linux/kobject.h --- a/include/linux/kobject.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/kobject.h Sat Apr 12 14:44:06 2003 @@ -57,12 +57,24 @@ * of object; multiple ksets can belong to one subsystem. All * ksets of a subsystem share the subsystem's lock. * + * Each kset can support hotplugging; if it does, it will be given + * the opportunity to filter out specific kobjects from being + * reported, as well as to add its own "data" elements to the + * environment being passed to the hotplug helper. */ +struct kset_hotplug_ops { + int (*filter)(struct kset *kset, struct kobject *kobj); + char *(*name)(struct kset *kset, struct kobject *kobj); + int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp, + int num_envp, char *buffer, int buffer_size); +}; + struct kset { struct subsystem * subsys; struct kobj_type * ktype; struct list_head list; struct kobject kobj; + struct kset_hotplug_ops * hotplug_ops; }; @@ -86,6 +98,13 @@ kobject_put(&k->kobj); } +static inline struct kobj_type * get_ktype(struct kobject * k) +{ + if (k->kset && k->kset->ktype) + return k->kset->ktype; + else + return k->ktype; +} extern struct kobject * kset_find_obj(struct kset *, const char *); @@ -95,11 +114,12 @@ struct rw_semaphore rwsem; }; -#define decl_subsys(_name,_type) \ +#define decl_subsys(_name,_type,_hotplug_ops) \ struct subsystem _name##_subsys = { \ .kset = { \ .kobj = { .name = __stringify(_name) }, \ .ktype = _type, \ + .hotplug_ops =_hotplug_ops, \ } \ } diff -Nru a/include/linux/mm.h b/include/linux/mm.h --- a/include/linux/mm.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/mm.h Sat Apr 12 14:44:06 2003 @@ -231,8 +231,8 @@ static inline void put_page(struct page *page) { if (PageCompound(page)) { + page = (struct page *)page->lru.next; if (put_page_testzero(page)) { - page = (struct page *)page->lru.next; if (page->lru.prev) { /* destructor? */ (*(void (*)(struct page *))page->lru.prev)(page); } else { diff -Nru a/include/linux/mtd/compatmac.h b/include/linux/mtd/compatmac.h --- a/include/linux/mtd/compatmac.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/mtd/compatmac.h Sat Apr 12 14:44:09 2003 @@ -17,7 +17,6 @@ #ifndef __LINUX_MTD_COMPATMAC_H__ #define __LINUX_MTD_COMPATMAC_H__ -#include #include /* used later in this header */ #include #ifndef LINUX_VERSION_CODE diff -Nru a/include/linux/namei.h b/include/linux/namei.h --- a/include/linux/namei.h Sat Apr 12 14:44:07 2003 +++ b/include/linux/namei.h Sat Apr 12 14:44:07 2003 @@ -33,7 +33,7 @@ #define LOOKUP_NOALT 32 -extern int FASTCALL(__user_walk(const char *, unsigned, struct nameidata *)); +extern int FASTCALL(__user_walk(const char __user *, unsigned, struct nameidata *)); #define user_path_walk(name,nd) \ __user_walk(name, LOOKUP_FOLLOW, nd) #define user_path_walk_link(name,nd) \ diff -Nru a/include/linux/net.h b/include/linux/net.h --- a/include/linux/net.h Sat Apr 12 14:44:07 2003 +++ b/include/linux/net.h Sat Apr 12 14:44:07 2003 @@ -19,7 +19,6 @@ #define _LINUX_NET_H #include -#include #include struct poll_table_struct; @@ -88,6 +87,8 @@ struct vm_area_struct; struct page; struct kiocb; +struct sockaddr; +struct msghdr; struct proto_ops { int family; @@ -135,6 +136,8 @@ short encryption; short encrypt_net; }; + +struct iovec; extern int sock_wake_async(struct socket *sk, int how, int band); extern int sock_register(struct net_proto_family *fam); diff -Nru a/include/linux/netlink.h b/include/linux/netlink.h --- a/include/linux/netlink.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/netlink.h Sat Apr 12 14:44:09 2003 @@ -1,6 +1,8 @@ #ifndef __LINUX_NETLINK_H #define __LINUX_NETLINK_H +#include /* for sa_family_t */ + #define NETLINK_ROUTE 0 /* Routing/device hook */ #define NETLINK_SKIP 1 /* Reserved for ENskip */ #define NETLINK_USERSOCK 2 /* Reserved for user mode socket protocols */ diff -Nru a/include/linux/nfs4.h b/include/linux/nfs4.h --- a/include/linux/nfs4.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/nfs4.h Sat Apr 12 14:44:08 2003 @@ -206,6 +206,10 @@ NFSPROC4_CLNT_READ, NFSPROC4_CLNT_WRITE, NFSPROC4_CLNT_COMMIT, + NFSPROC4_CLNT_OPEN, + NFSPROC4_CLNT_OPEN_CONFIRM, + NFSPROC4_CLNT_CLOSE, + NFSPROC4_CLNT_SETATTR, }; #endif diff -Nru a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h --- a/include/linux/nfs_fs.h Sat Apr 12 14:44:07 2003 +++ b/include/linux/nfs_fs.h Sat Apr 12 14:44:07 2003 @@ -155,6 +155,13 @@ wait_queue_head_t nfs_i_wait; +#ifdef CONFIG_NFS_V4 + /* NFSv4 state */ + struct nfs4_shareowner *ro_owner; + struct nfs4_shareowner *wo_owner; + struct nfs4_shareowner *rw_owner; +#endif /* CONFIG_NFS_V4*/ + struct inode vfs_inode; }; @@ -435,28 +442,75 @@ #define NFS_JUKEBOX_RETRY_TIME (5 * HZ) #ifdef CONFIG_NFS_V4 + +/* + * In a seqid-mutating op, this macro controls which error return + * values trigger incrementation of the seqid. + * + * from rfc 3010: + * The client MUST monotonically increment the sequence number for the + * CLOSE, LOCK, LOCKU, OPEN, OPEN_CONFIRM, and OPEN_DOWNGRADE + * operations. This is true even in the event that the previous + * operation that used the sequence number received an error. The only + * exception to this rule is if the previous operation received one of + * the following errors: NFSERR_STALE_CLIENTID, NFSERR_STALE_STATEID, + * NFSERR_BAD_STATEID, NFSERR_BAD_SEQID, NFSERR_BADXDR, + * NFSERR_RESOURCE, NFSERR_NOFILEHANDLE. + * + */ +#define seqid_mutating_err(err) \ +(((err) != NFSERR_STALE_CLIENTID) && \ + ((err) != NFSERR_STALE_STATEID) && \ + ((err) != NFSERR_BAD_STATEID) && \ + ((err) != NFSERR_BAD_SEQID) && \ + ((err) != NFSERR_BAD_XDR) && \ + ((err) != NFSERR_RESOURCE) && \ + ((err) != NFSERR_NOFILEHANDLE)) + struct nfs4_client { - atomic_t cl_count; /* refcount */ u64 cl_clientid; /* constant */ - nfs4_verifier cl_confirm; + nfs4_verifier cl_confirm; + + u32 cl_lockowner_id; +}; - /* - * Starts a list of lockowners, linked through lo_list. - */ - struct list_head cl_lockowners; /* protected by state_spinlock */ +/* +* The ->so_sema is held during all shareowner seqid-mutating operations: +* OPEN, OPEN_DOWNGRADE, and CLOSE. +* Its purpose is to properly serialize so_seqid, as mandated by +* the protocol. +*/ +struct nfs4_shareowner { + u32 so_id; /* 32-bit identifier, unique */ + struct semaphore so_sema; + u32 so_seqid; /* protected by so_sema */ + nfs4_stateid so_stateid; /* protected by so_sema */ + unsigned int so_flags; /* protected by so_sema */ }; + /* nfs4proc.c */ extern int nfs4_proc_renew(struct nfs_server *server); +extern int nfs4_do_close(struct inode *inode, struct nfs4_shareowner *sp); /* nfs4renewd.c */ extern int nfs4_init_renewd(struct nfs_server *server); -#endif /* CONFIG_NFS_V4 */ - -#ifdef CONFIG_NFS_V4 +/* nfs4state.c */ extern struct nfs4_client *nfs4_get_client(void); extern void nfs4_put_client(struct nfs4_client *clp); +extern struct nfs4_shareowner * nfs4_get_shareowner(struct inode *inode); +void nfs4_put_shareowner(struct inode *inode, struct nfs4_shareowner *sp); +extern int nfs4_set_inode_share(struct inode * inode, + struct nfs4_shareowner *sp, unsigned int flags); +extern void nfs4_increment_seqid(u32 status, struct nfs4_shareowner *sp); +extern int nfs4_test_shareowner(struct inode *inode, unsigned int open_flags); +struct nfs4_shareowner * nfs4_get_inode_share(struct inode * inode, unsigned int open_flags); + + + + + struct nfs4_mount_data; static inline int @@ -481,6 +535,7 @@ #else #define create_nfsv4_state(server, data) 0 #define destroy_nfsv4_state(server) do { } while (0) +#define nfs4_put_shareowner(inode, owner) do { } while (0) #endif #endif /* __KERNEL__ */ diff -Nru a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h --- a/include/linux/nfs_fs_sb.h Sat Apr 12 14:44:10 2003 +++ b/include/linux/nfs_fs_sb.h Sat Apr 12 14:44:10 2003 @@ -36,6 +36,7 @@ struct nfs4_client * nfs4_state; /* all NFSv4 state starts here */ unsigned long lease_time; /* in jiffies */ unsigned long last_renewal; /* in jiffies */ + void *idmap; #endif }; diff -Nru a/include/linux/nfs_idmap.h b/include/linux/nfs_idmap.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/linux/nfs_idmap.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,69 @@ +/* + * include/linux/nfs_idmap.h + * + * UID and GID to name mapping for clients. + * + * Copyright (c) 2002 The Regents of the University of Michigan. + * All rights reserved. + * + * Marius Aamodt Eriksen + * + * 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. Neither the name of the University nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS 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 NFS_IDMAP_H +#define NFS_IDMAP_H + +/* XXX from bits/utmp.h */ +#define IDMAP_NAMESZ 128 + +#define IDMAP_TYPE_USER 0 +#define IDMAP_TYPE_GROUP 1 + +#define IDMAP_CONV_IDTONAME 0 +#define IDMAP_CONV_NAMETOID 1 + +#define IDMAP_STATUS_INVALIDMSG 0x01 +#define IDMAP_STATUS_AGAIN 0x02 +#define IDMAP_STATUS_LOOKUPFAIL 0x04 +#define IDMAP_STATUS_SUCCESS 0x08 + +struct idmap_msg { + u_int8_t im_type; + u_int8_t im_conv; + char im_name[IDMAP_NAMESZ]; + u_int32_t im_id; + u_int8_t im_status; +}; + +#ifdef __KERNEL__ +void *nfs_idmap_new(struct nfs_server *); +void nfs_idmap_delete(struct nfs_server *); +int nfs_idmap_id(struct nfs_server *, u_int8_t, char *, u_int, uid_t *); +int nfs_idmap_name(struct nfs_server *, u_int8_t, uid_t, char *, u_int *); +#endif /* __KERNEL__ */ + +#endif /* NFS_IDMAP_H */ diff -Nru a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h --- a/include/linux/nfs_xdr.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/nfs_xdr.h Sat Apr 12 14:44:09 2003 @@ -88,6 +88,67 @@ }; /* + * Arguments to the open call. + */ +struct nfs_openargs { + struct nfs_fh * fh; + __u32 seqid; + __u32 share_access; + __u64 clientid; + __u32 id; + __u32 opentype; + __u32 createmode; + union { + struct iattr * attrs; /* UNCHECKED, GUARDED */ + nfs4_verifier verifier; /* EXCLUSIVE */ + } u; + struct qstr * name; + struct nfs4_getattr * f_getattr; + struct nfs4_getattr * d_getattr; + struct nfs_server * server; /* Needed for ID mapping */ +}; + +struct nfs_openres { + __u32 status; + nfs4_stateid stateid; + struct nfs_fh fh; + struct nfs4_change_info * cinfo; + __u32 rflags; + struct nfs4_getattr * f_getattr; + struct nfs4_getattr * d_getattr; + struct nfs_server * server; +}; + +/* + * Arguments to the open_confirm call. + */ +struct nfs_open_confirmargs { + struct nfs_fh * fh; + nfs4_stateid stateid; + __u32 seqid; +}; + +struct nfs_open_confirmres { + __u32 status; + nfs4_stateid stateid; +}; + +/* + * Arguments to the close call. + */ +struct nfs_closeargs { + struct nfs_fh * fh; + nfs4_stateid stateid; + __u32 seqid; +}; + +struct nfs_closeres { + __u32 status; + nfs4_stateid stateid; +}; + + +/* * Arguments to the read call. */ @@ -98,6 +159,7 @@ struct nfs_readargs { struct nfs_fh * fh; + nfs4_stateid stateid; __u64 offset; __u32 count; unsigned int pgbase; @@ -120,6 +182,7 @@ struct nfs_writeargs { struct nfs_fh * fh; + nfs4_stateid stateid; __u64 offset; __u32 count; enum nfs3_stable_how stable; @@ -182,6 +245,19 @@ unsigned int tolen; }; +struct nfs_setattrargs { + struct nfs_fh * fh; + nfs4_stateid stateid; + struct iattr * iap; + struct nfs4_getattr * attr; + struct nfs_server * server; /* Needed for name mapping */ +}; + +struct nfs_setattrres { + struct nfs4_getattr * attr; + struct nfs_server * server; +}; + struct nfs_linkargs { struct nfs_fh * fromfh; struct nfs_fh * tofh; @@ -597,6 +673,7 @@ void (*read_setup) (struct nfs_read_data *, unsigned int count); void (*write_setup) (struct nfs_write_data *, unsigned int count, int how); void (*commit_setup) (struct nfs_write_data *, u64 start, u32 len, int how); + int (*file_open) (struct inode *, struct file *); }; /* diff -Nru a/include/linux/page-flags.h b/include/linux/page-flags.h --- a/include/linux/page-flags.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/page-flags.h Sat Apr 12 14:44:09 2003 @@ -83,7 +83,6 @@ unsigned long nr_dirty; /* Dirty writeable pages */ unsigned long nr_writeback; /* Pages under writeback */ unsigned long nr_page_table_pages;/* Pages used for pagetables */ - unsigned long nr_reverse_maps; /* includes PageDirect */ unsigned long nr_mapped; /* mapped into pagetables */ unsigned long nr_slab; /* In slab */ #define GET_PAGE_STATE_LAST nr_slab diff -Nru a/include/linux/pci_ids.h b/include/linux/pci_ids.h --- a/include/linux/pci_ids.h Sat Apr 12 14:44:07 2003 +++ b/include/linux/pci_ids.h Sat Apr 12 14:44:07 2003 @@ -1074,6 +1074,7 @@ #define PCI_DEVICE_ID_TTI_HPT374 0x0008 #define PCI_VENDOR_ID_VIA 0x1106 +#define PCI_DEVICE_ID_VIA_P4X600 0x0198 #define PCI_DEVICE_ID_VIA_8363_0 0x0305 #define PCI_DEVICE_ID_VIA_8371_0 0x0391 #define PCI_DEVICE_ID_VIA_8501_0 0x0501 @@ -1113,11 +1114,19 @@ #define PCI_DEVICE_ID_VIA_8653_0 0x3101 #define PCI_DEVICE_ID_VIA_8622 0x3102 #define PCI_DEVICE_ID_VIA_8233C_0 0x3109 -#define PCI_DEVICE_ID_VIA_8361 0x3112 +#define PCI_DEVICE_ID_VIA_8361 0x3112 +#define PCI_DEVICE_ID_VIA_KM266 0x3116 +#define PCI_DEVICE_ID_VIA_CLE266 0x3123 +#define PCI_DEVICE_ID_VIA_8753_0 0x3128 #define PCI_DEVICE_ID_VIA_8233A 0x3147 +#define PCI_DEVICE_ID_VIA_8752 0x3148 +#define PCI_DEVICE_ID_VIA_KN266 0x3156 #define PCI_DEVICE_ID_VIA_8754 0x3168 #define PCI_DEVICE_ID_VIA_8235 0x3177 +#define PCI_DEVICE_ID_VIA_P4N333 0x3178 #define PCI_DEVICE_ID_VIA_8377_0 0x3189 +#define PCI_DEVICE_ID_VIA_KM400 0x3205 +#define PCI_DEVICE_ID_VIA_P4M400 0x3209 #define PCI_DEVICE_ID_VIA_86C100A 0x6100 #define PCI_DEVICE_ID_VIA_8231 0x8231 #define PCI_DEVICE_ID_VIA_8231_4 0x8235 diff -Nru a/include/linux/pnp.h b/include/linux/pnp.h --- a/include/linux/pnp.h Sat Apr 12 14:44:10 2003 +++ b/include/linux/pnp.h Sat Apr 12 14:44:10 2003 @@ -274,12 +274,31 @@ #define pnp_can_configure(dev) ((!(dev)->active) && ((dev)->config_mode & PNP_CONFIG_AUTO) && \ ((dev)->capabilities & PNP_CONFIGURABLE)) +#ifdef CONFIG_ISAPNP +extern struct pnp_protocol isapnp_protocol; +#define pnp_device_is_isapnp(dev) ((dev)->protocol == (&isapnp_protocol)) +#else +#define pnp_device_is_isapnp(dev) 0 +#endif + +#ifdef CONFIG_PNPBIOS +extern struct pnp_protocol pnpbios_protocol; +#define pnp_device_is_pnpbios(dev) ((dev)->protocol == (&pnpbios_protocol)) +#else +#define pnp_device_is_pnpbios(dev) 0 +#endif + + /* status */ #define PNP_READY 0x0000 #define PNP_ATTACHED 0x0001 #define PNP_BUSY 0x0002 #define PNP_FAULTY 0x0004 +/* isapnp specific macros */ + +#define isapnp_card_number(dev) ((dev)->card ? (dev)->card->number : -1) +#define isapnp_csn_number(dev) ((dev)->number) /* * Driver Management diff -Nru a/include/linux/poll.h b/include/linux/poll.h --- a/include/linux/poll.h Sat Apr 12 14:44:10 2003 +++ b/include/linux/poll.h Sat Apr 12 14:44:10 2003 @@ -67,7 +67,7 @@ * Use "unsigned long" accesses to let user-mode fd_set's be long-aligned. */ static inline -int get_fd_set(unsigned long nr, void *ufdset, unsigned long *fdset) +int get_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset) { nr = FDS_BYTES(nr); if (ufdset) { @@ -82,7 +82,7 @@ } static inline -void set_fd_set(unsigned long nr, void *ufdset, unsigned long *fdset) +void set_fd_set(unsigned long nr, void __user *ufdset, unsigned long *fdset) { if (ufdset) __copy_to_user(ufdset, fdset, FDS_BYTES(nr)); diff -Nru a/include/linux/scc.h b/include/linux/scc.h --- a/include/linux/scc.h Sat Apr 12 14:44:09 2003 +++ b/include/linux/scc.h Sat Apr 12 14:44:09 2003 @@ -244,6 +244,9 @@ /* Timer */ struct timer_list tx_t; /* tx timer for this channel */ struct timer_list tx_wdog; /* tx watchdogs */ + + /* Channel lock */ + spinlock_t lock; /* Channel guard lock */ }; #endif /* defined(__KERNEL__) */ diff -Nru a/include/linux/sched.h b/include/linux/sched.h --- a/include/linux/sched.h Sat Apr 12 14:44:06 2003 +++ b/include/linux/sched.h Sat Apr 12 14:44:06 2003 @@ -686,7 +686,11 @@ extern void unhash_process(struct task_struct *p); -/* Protects ->fs, ->files, ->mm, and synchronises with wait4(). Nests inside tasklist_lock */ +/* Protects ->fs, ->files, ->mm, and synchronises with wait4(). + * Nests both inside and outside of read_lock(&tasklist_lock). + * It must not be nested with write_lock_irq(&tasklist_lock), + * neither inside nor outside. + */ static inline void task_lock(struct task_struct *p) { spin_lock(&p->alloc_lock); diff -Nru a/include/linux/sysctl.h b/include/linux/sysctl.h --- a/include/linux/sysctl.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/sysctl.h Sat Apr 12 14:44:08 2003 @@ -129,6 +129,7 @@ KERN_CADPID=54, /* int: PID of the process to notify on CAD */ KERN_PIDMAX=55, /* int: PID # limit */ KERN_CORE_PATTERN=56, /* string: pattern for core-file names */ + KERN_PANIC_ON_OOPS=57, /* int: whether we will panic on an oops */ }; @@ -678,8 +679,8 @@ typedef struct ctl_table ctl_table; typedef int ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, void **context); typedef int proc_handler (ctl_table *ctl, int write, struct file * filp, @@ -706,8 +707,8 @@ extern int do_sysctl_strategy (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, void ** context); + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, void ** context); extern ctl_handler sysctl_string; extern ctl_handler sysctl_intvec; diff -Nru a/include/linux/time.h b/include/linux/time.h --- a/include/linux/time.h Sat Apr 12 14:44:08 2003 +++ b/include/linux/time.h Sat Apr 12 14:44:08 2003 @@ -31,7 +31,7 @@ * Have the 32 bit jiffies value wrap 5 minutes after boot * so jiffies wrap bugs show up earlier. */ -#define INITIAL_JIFFIES ((unsigned int) (-300*HZ)) +#define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ)) /* * Change timeval to jiffies, trying to avoid the diff -Nru a/include/media/saa7146.h b/include/media/saa7146.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/media/saa7146.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,431 @@ +#ifndef __SAA7146__ +#define __SAA7146__ + +#include /* for version macros */ +#include /* for module-version */ +#include /* for delay-stuff */ +#include /* for kmalloc/kfree */ +#include /* for pci-config-stuff, vendor ids etc. */ +#include /* for mem_map_reserve */ +#include /* for "__init" */ +#include /* for IMMEDIATE_BH */ +#include /* for kernel module loader */ +#include /* for i2c subsystem */ +#include /* for accessing devices */ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #include "compat.h" +#endif + +#define SAA7146_VERSION_CODE KERNEL_VERSION(0,5,0) + +#define saa7146_write(sxy,adr,dat) writel((dat),(sxy->mem+(adr))) +#define saa7146_read(sxy,adr) readl(sxy->mem+(adr)) + +extern unsigned int saa7146_debug; + +//#define DEBUG_PROLOG printk("(0x%08x)(0x%08x) %s: %s(): ",(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,RPS_ADDR0))),(dev==0?-1:(dev->mem==0?-1:saa7146_read(dev,IER))),__stringify(KBUILD_MODNAME),__FUNCTION__) + +#ifndef DEBUG_VARIABLE + #define DEBUG_VARIABLE saa7146_debug +#endif + +#define DEBUG_PROLOG printk("%s: %s(): ",__stringify(KBUILD_MODNAME),__FUNCTION__) +#define DEB_S(x) if (0!=(DEBUG_VARIABLE&0x01)) { DEBUG_PROLOG; printk x; } /* simple debug messages */ +#define DEB_D(x) if (0!=(DEBUG_VARIABLE&0x02)) { DEBUG_PROLOG; printk x; } /* more detailed debug messages */ +#define DEB_EE(x) if (0!=(DEBUG_VARIABLE&0x04)) { DEBUG_PROLOG; printk x; } /* print enter and exit of functions */ +#define DEB_I2C(x) if (0!=(DEBUG_VARIABLE&0x08)) { DEBUG_PROLOG; printk x; } /* i2c debug messages */ +#define DEB_VBI(x) if (0!=(DEBUG_VARIABLE&0x10)) { DEBUG_PROLOG; printk x; } /* vbi debug messages */ +#define DEB_INT(x) if (0!=(DEBUG_VARIABLE&0x20)) { DEBUG_PROLOG; printk x; } /* interrupt debug messages */ +#define DEB_CAP(x) if (0!=(DEBUG_VARIABLE&0x40)) { DEBUG_PROLOG; printk x; } /* capture debug messages */ + +#define ERR(x) { DEBUG_PROLOG; printk x; } +#define INFO(x) { printk("%s: ",__stringify(KBUILD_MODNAME)); printk x; } + +#define IER_DISABLE(x,y) \ + saa7146_write(x, IER, saa7146_read(x, IER) & ~(y)); +#define IER_ENABLE(x,y) \ + saa7146_write(x, IER, saa7146_read(x, IER) | (y)); + +struct saa7146_dev; +struct saa7146_extension; +struct saa7146_vv; + +/* saa7146 page table */ +struct saa7146_pgtable { + unsigned int size; + u32 *cpu; + dma_addr_t dma; + /* used for offsets for u,v planes for planar capture modes */ + unsigned long offset; +}; + +struct saa7146_pci_extension_data { + struct saa7146_extension *ext; + void *ext_priv; /* most likely a name string */ +}; + +#define MAKE_EXTENSION_PCI(x_var, x_vendor, x_device) \ + { \ + .vendor = PCI_VENDOR_ID_PHILIPS, \ + .device = PCI_DEVICE_ID_PHILIPS_SAA7146, \ + .subvendor = x_vendor, \ + .subdevice = x_device, \ + .driver_data = (unsigned long)& x_var, \ + } + +struct saa7146_extension +{ + char name[32]; /* name of the device */ +#define SAA7146_USE_I2C_IRQ 0x1 + int flags; + + struct saa7146_ext_vv *ext_vv_data; + + /* pairs of subvendor and subdevice ids for + supported devices, last entry 0xffff, 0xfff */ + struct module *module; + struct pci_driver driver; + struct pci_device_id *pci_tbl; + + /* extension functions */ + int (*probe)(struct saa7146_dev *); + int (*attach)(struct saa7146_dev *, struct saa7146_pci_extension_data *); + int (*detach)(struct saa7146_dev*); + + u32 irq_mask; /* mask to indicate, which irq-events are handled by the extension */ + void (*irq_func)(struct saa7146_dev*, u32* irq_mask); +}; + +struct saa7146_dev +{ + struct module *module; + + struct list_head item; + + /* different device locks */ + spinlock_t slock; + struct semaphore lock; + + unsigned char *mem; /* pointer to mapped IO memory */ + int revision; /* chip revision; needed for bug-workarounds*/ + + /* pci-device & irq stuff*/ + char name[32]; + struct pci_dev *pci; + u32 int_todo; + spinlock_t int_slock; + + /* extension handling */ + struct saa7146_extension *ext; /* indicates if handled by extension */ + void *ext_priv; /* pointer for extension private use (most likely some private data) */ + + /* per device video/vbi informations (if available) */ + struct saa7146_vv *vv_data; + void (*vv_callback)(struct saa7146_dev *dev, unsigned long status); + + /* i2c-stuff */ + struct semaphore i2c_lock; + u32 i2c_bitrate; + u32 *i2c_mem; /* pointer to i2c memory */ + wait_queue_head_t i2c_wq; + int i2c_op; + + /* memories */ + u32 *rps0; + u32 *rps1; +}; + +/* from saa7146_i2c.c */ +int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate); +int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg msgs[], int num, int retries); + +/* from saa7146_core.c */ +extern struct list_head saa7146_devices; +extern struct semaphore saa7146_devices_lock; +int saa7146_register_extension(struct saa7146_extension*); +int saa7146_unregister_extension(struct saa7146_extension*); +struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc); +int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt); +void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt); +void saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int length ); +char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa7146_pgtable *pt); +void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data); + +/* some memory sizes */ +#define SAA7146_I2C_MEM ( 1*PAGE_SIZE) +#define SAA7146_RPS_MEM ( 1*PAGE_SIZE) + +/* some i2c constants */ +#define SAA7146_I2C_TIMEOUT 100 /* i2c-timeout-value in ms */ +#define SAA7146_I2C_RETRIES 3 /* how many times shall we retry an i2c-operation? */ +#define SAA7146_I2C_DELAY 5 /* time we wait after certain i2c-operations */ + +/* unsorted defines */ +#define ME1 0x0000000800 +#define PV1 0x0000000008 + +/* gpio defines */ +#define SAA7146_GPIO_INPUT 0x00 +#define SAA7146_GPIO_IRQHI 0x10 +#define SAA7146_GPIO_IRQLO 0x20 +#define SAA7146_GPIO_IRQHL 0x30 +#define SAA7146_GPIO_OUTLO 0x40 +#define SAA7146_GPIO_OUTHI 0x50 + +/* define for the register programming sequencer (rps) */ +#define CMD_NOP 0x00000000 /* No operation */ +#define CMD_CLR_EVENT 0x00000000 /* Clear event */ +#define CMD_SET_EVENT 0x10000000 /* Set signal event */ +#define CMD_PAUSE 0x20000000 /* Pause */ +#define CMD_CHECK_LATE 0x30000000 /* Check late */ +#define CMD_UPLOAD 0x40000000 /* Upload */ +#define CMD_STOP 0x50000000 /* Stop */ +#define CMD_INTERRUPT 0x60000000 /* Interrupt */ +#define CMD_JUMP 0x80000000 /* Jump */ +#define CMD_WR_REG 0x90000000 /* Write (load) register */ +#define CMD_RD_REG 0xa0000000 /* Read (store) register */ +#define CMD_WR_REG_MASK 0xc0000000 /* Write register with mask */ + +#define CMD_OAN MASK_27 +#define CMD_INV MASK_26 +#define CMD_SIG4 MASK_25 +#define CMD_SIG3 MASK_24 +#define CMD_SIG2 MASK_23 +#define CMD_SIG1 MASK_22 +#define CMD_SIG0 MASK_21 +#define CMD_O_FID_B MASK_14 +#define CMD_E_FID_B MASK_13 +#define CMD_O_FID_A MASK_12 +#define CMD_E_FID_A MASK_11 + +/* some events and command modifiers for rps1 squarewave generator */ +#define EVT_HS (1<<15) // Source Line Threshold reached +#define EVT_VBI_B (1<<9) // VSYNC Event +#define RPS_OAN (1<<27) // 1: OR events, 0: AND events +#define RPS_INV (1<<26) // Invert (compound) event +#define GPIO3_MSK 0xFF000000 // GPIO #3 control bits + +/* Bit mask constants */ +#define MASK_00 0x00000001 /* Mask value for bit 0 */ +#define MASK_01 0x00000002 /* Mask value for bit 1 */ +#define MASK_02 0x00000004 /* Mask value for bit 2 */ +#define MASK_03 0x00000008 /* Mask value for bit 3 */ +#define MASK_04 0x00000010 /* Mask value for bit 4 */ +#define MASK_05 0x00000020 /* Mask value for bit 5 */ +#define MASK_06 0x00000040 /* Mask value for bit 6 */ +#define MASK_07 0x00000080 /* Mask value for bit 7 */ +#define MASK_08 0x00000100 /* Mask value for bit 8 */ +#define MASK_09 0x00000200 /* Mask value for bit 9 */ +#define MASK_10 0x00000400 /* Mask value for bit 10 */ +#define MASK_11 0x00000800 /* Mask value for bit 11 */ +#define MASK_12 0x00001000 /* Mask value for bit 12 */ +#define MASK_13 0x00002000 /* Mask value for bit 13 */ +#define MASK_14 0x00004000 /* Mask value for bit 14 */ +#define MASK_15 0x00008000 /* Mask value for bit 15 */ +#define MASK_16 0x00010000 /* Mask value for bit 16 */ +#define MASK_17 0x00020000 /* Mask value for bit 17 */ +#define MASK_18 0x00040000 /* Mask value for bit 18 */ +#define MASK_19 0x00080000 /* Mask value for bit 19 */ +#define MASK_20 0x00100000 /* Mask value for bit 20 */ +#define MASK_21 0x00200000 /* Mask value for bit 21 */ +#define MASK_22 0x00400000 /* Mask value for bit 22 */ +#define MASK_23 0x00800000 /* Mask value for bit 23 */ +#define MASK_24 0x01000000 /* Mask value for bit 24 */ +#define MASK_25 0x02000000 /* Mask value for bit 25 */ +#define MASK_26 0x04000000 /* Mask value for bit 26 */ +#define MASK_27 0x08000000 /* Mask value for bit 27 */ +#define MASK_28 0x10000000 /* Mask value for bit 28 */ +#define MASK_29 0x20000000 /* Mask value for bit 29 */ +#define MASK_30 0x40000000 /* Mask value for bit 30 */ +#define MASK_31 0x80000000 /* Mask value for bit 31 */ + +#define MASK_B0 0x000000ff /* Mask value for byte 0 */ +#define MASK_B1 0x0000ff00 /* Mask value for byte 1 */ +#define MASK_B2 0x00ff0000 /* Mask value for byte 2 */ +#define MASK_B3 0xff000000 /* Mask value for byte 3 */ + +#define MASK_W0 0x0000ffff /* Mask value for word 0 */ +#define MASK_W1 0xffff0000 /* Mask value for word 1 */ + +#define MASK_PA 0xfffffffc /* Mask value for physical address */ +#define MASK_PR 0xfffffffe /* Mask value for protection register */ +#define MASK_ER 0xffffffff /* Mask value for the entire register */ + +#define MASK_NONE 0x00000000 /* No mask */ + +/* register aliases */ +#define BASE_ODD1 0x00 /* Video DMA 1 registers */ +#define BASE_EVEN1 0x04 +#define PROT_ADDR1 0x08 +#define PITCH1 0x0C +#define BASE_PAGE1 0x10 /* Video DMA 1 base page */ +#define NUM_LINE_BYTE1 0x14 + +#define BASE_ODD2 0x18 /* Video DMA 2 registers */ +#define BASE_EVEN2 0x1C +#define PROT_ADDR2 0x20 +#define PITCH2 0x24 +#define BASE_PAGE2 0x28 /* Video DMA 2 base page */ +#define NUM_LINE_BYTE2 0x2C + +#define BASE_ODD3 0x30 /* Video DMA 3 registers */ +#define BASE_EVEN3 0x34 +#define PROT_ADDR3 0x38 +#define PITCH3 0x3C +#define BASE_PAGE3 0x40 /* Video DMA 3 base page */ +#define NUM_LINE_BYTE3 0x44 + +#define PCI_BT_V1 0x48 /* Video/FIFO 1 */ +#define PCI_BT_V2 0x49 /* Video/FIFO 2 */ +#define PCI_BT_V3 0x4A /* Video/FIFO 3 */ +#define PCI_BT_DEBI 0x4B /* DEBI */ +#define PCI_BT_A 0x4C /* Audio */ + +#define DD1_INIT 0x50 /* Init setting of DD1 interface */ + +#define DD1_STREAM_B 0x54 /* DD1 B video data stream handling */ +#define DD1_STREAM_A 0x56 /* DD1 A video data stream handling */ + +#define BRS_CTRL 0x58 /* BRS control register */ +#define HPS_CTRL 0x5C /* HPS control register */ +#define HPS_V_SCALE 0x60 /* HPS vertical scale */ +#define HPS_V_GAIN 0x64 /* HPS vertical ACL and gain */ +#define HPS_H_PRESCALE 0x68 /* HPS horizontal prescale */ +#define HPS_H_SCALE 0x6C /* HPS horizontal scale */ +#define BCS_CTRL 0x70 /* BCS control */ +#define CHROMA_KEY_RANGE 0x74 +#define CLIP_FORMAT_CTRL 0x78 /* HPS outputs formats & clipping */ + +#define DEBI_CONFIG 0x7C +#define DEBI_COMMAND 0x80 +#define DEBI_PAGE 0x84 +#define DEBI_AD 0x88 + +#define I2C_TRANSFER 0x8C +#define I2C_STATUS 0x90 + +#define BASE_A1_IN 0x94 /* Audio 1 input DMA */ +#define PROT_A1_IN 0x98 +#define PAGE_A1_IN 0x9C + +#define BASE_A1_OUT 0xA0 /* Audio 1 output DMA */ +#define PROT_A1_OUT 0xA4 +#define PAGE_A1_OUT 0xA8 + +#define BASE_A2_IN 0xAC /* Audio 2 input DMA */ +#define PROT_A2_IN 0xB0 +#define PAGE_A2_IN 0xB4 + +#define BASE_A2_OUT 0xB8 /* Audio 2 output DMA */ +#define PROT_A2_OUT 0xBC +#define PAGE_A2_OUT 0xC0 + +#define RPS_PAGE0 0xC4 /* RPS task 0 page register */ +#define RPS_PAGE1 0xC8 /* RPS task 1 page register */ + +#define RPS_THRESH0 0xCC /* HBI threshold for task 0 */ +#define RPS_THRESH1 0xD0 /* HBI threshold for task 1 */ + +#define RPS_TOV0 0xD4 /* RPS timeout for task 0 */ +#define RPS_TOV1 0xD8 /* RPS timeout for task 1 */ + +#define IER 0xDC /* Interrupt enable register */ + +#define GPIO_CTRL 0xE0 /* GPIO 0-3 register */ + +#define EC1SSR 0xE4 /* Event cnt set 1 source select */ +#define EC2SSR 0xE8 /* Event cnt set 2 source select */ +#define ECT1R 0xEC /* Event cnt set 1 thresholds */ +#define ECT2R 0xF0 /* Event cnt set 2 thresholds */ + +#define ACON1 0xF4 +#define ACON2 0xF8 + +#define MC1 0xFC /* Main control register 1 */ +#define MC2 0x100 /* Main control register 2 */ + +#define RPS_ADDR0 0x104 /* RPS task 0 address register */ +#define RPS_ADDR1 0x108 /* RPS task 1 address register */ + +#define ISR 0x10C /* Interrupt status register */ +#define PSR 0x110 /* Primary status register */ +#define SSR 0x114 /* Secondary status register */ + +#define EC1R 0x118 /* Event counter set 1 register */ +#define EC2R 0x11C /* Event counter set 2 register */ + +#define PCI_VDP1 0x120 /* Video DMA pointer of FIFO 1 */ +#define PCI_VDP2 0x124 /* Video DMA pointer of FIFO 2 */ +#define PCI_VDP3 0x128 /* Video DMA pointer of FIFO 3 */ +#define PCI_ADP1 0x12C /* Audio DMA pointer of audio out 1 */ +#define PCI_ADP2 0x130 /* Audio DMA pointer of audio in 1 */ +#define PCI_ADP3 0x134 /* Audio DMA pointer of audio out 2 */ +#define PCI_ADP4 0x138 /* Audio DMA pointer of audio in 2 */ +#define PCI_DMA_DDP 0x13C /* DEBI DMA pointer */ + +#define LEVEL_REP 0x140, +#define A_TIME_SLOT1 0x180, /* from 180 - 1BC */ +#define A_TIME_SLOT2 0x1C0, /* from 1C0 - 1FC */ + +/* isr masks */ +#define SPCI_PPEF 0x80000000 /* PCI parity error */ +#define SPCI_PABO 0x40000000 /* PCI access error (target or master abort) */ +#define SPCI_PPED 0x20000000 /* PCI parity error on 'real time data' */ +#define SPCI_RPS_I1 0x10000000 /* Interrupt issued by RPS1 */ +#define SPCI_RPS_I0 0x08000000 /* Interrupt issued by RPS0 */ +#define SPCI_RPS_LATE1 0x04000000 /* RPS task 1 is late */ +#define SPCI_RPS_LATE0 0x02000000 /* RPS task 0 is late */ +#define SPCI_RPS_E1 0x01000000 /* RPS error from task 1 */ +#define SPCI_RPS_E0 0x00800000 /* RPS error from task 0 */ +#define SPCI_RPS_TO1 0x00400000 /* RPS timeout task 1 */ +#define SPCI_RPS_TO0 0x00200000 /* RPS timeout task 0 */ +#define SPCI_UPLD 0x00100000 /* RPS in upload */ +#define SPCI_DEBI_S 0x00080000 /* DEBI status */ +#define SPCI_DEBI_E 0x00040000 /* DEBI error */ +#define SPCI_IIC_S 0x00020000 /* I2C status */ +#define SPCI_IIC_E 0x00010000 /* I2C error */ +#define SPCI_A2_IN 0x00008000 /* Audio 2 input DMA protection / limit */ +#define SPCI_A2_OUT 0x00004000 /* Audio 2 output DMA protection / limit */ +#define SPCI_A1_IN 0x00002000 /* Audio 1 input DMA protection / limit */ +#define SPCI_A1_OUT 0x00001000 /* Audio 1 output DMA protection / limit */ +#define SPCI_AFOU 0x00000800 /* Audio FIFO over- / underflow */ +#define SPCI_V_PE 0x00000400 /* Video protection address */ +#define SPCI_VFOU 0x00000200 /* Video FIFO over- / underflow */ +#define SPCI_FIDA 0x00000100 /* Field ID video port A */ +#define SPCI_FIDB 0x00000080 /* Field ID video port B */ +#define SPCI_PIN3 0x00000040 /* GPIO pin 3 */ +#define SPCI_PIN2 0x00000020 /* GPIO pin 2 */ +#define SPCI_PIN1 0x00000010 /* GPIO pin 1 */ +#define SPCI_PIN0 0x00000008 /* GPIO pin 0 */ +#define SPCI_ECS 0x00000004 /* Event counter 1, 2, 4, 5 */ +#define SPCI_EC3S 0x00000002 /* Event counter 3 */ +#define SPCI_EC0S 0x00000001 /* Event counter 0 */ + +/* i2c */ +#define SAA7146_I2C_ABORT (1<<7) +#define SAA7146_I2C_SPERR (1<<6) +#define SAA7146_I2C_APERR (1<<5) +#define SAA7146_I2C_DTERR (1<<4) +#define SAA7146_I2C_DRERR (1<<3) +#define SAA7146_I2C_AL (1<<2) +#define SAA7146_I2C_ERR (1<<1) +#define SAA7146_I2C_BUSY (1<<0) + +#define SAA7146_I2C_START (0x3) +#define SAA7146_I2C_CONT (0x2) +#define SAA7146_I2C_STOP (0x1) +#define SAA7146_I2C_NOP (0x0) + +#define SAA7146_I2C_BUS_BIT_RATE_6400 (0x500) +#define SAA7146_I2C_BUS_BIT_RATE_3200 (0x100) +#define SAA7146_I2C_BUS_BIT_RATE_480 (0x400) +#define SAA7146_I2C_BUS_BIT_RATE_320 (0x600) +#define SAA7146_I2C_BUS_BIT_RATE_240 (0x700) +#define SAA7146_I2C_BUS_BIT_RATE_120 (0x000) +#define SAA7146_I2C_BUS_BIT_RATE_80 (0x200) +#define SAA7146_I2C_BUS_BIT_RATE_60 (0x300) + +#endif + diff -Nru a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/media/saa7146_vv.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,269 @@ +#ifndef __SAA7146_VV__ +#define __SAA7146_VV__ + +#include + +#include +#include + +#define MAX_SAA7146_CAPTURE_BUFFERS 32 /* arbitrary */ +#define BUFFER_TIMEOUT (HZ/2) /* 0.5 seconds */ + +struct saa7146_video_dma { + u32 base_odd; + u32 base_even; + u32 prot_addr; + u32 pitch; + u32 base_page; + u32 num_line_byte; +}; + +struct saa7146_format { + char *name; + int pixelformat; + u32 trans; + u8 depth; + int swap; +}; + +struct saa7146_standard +{ + char *name; + v4l2_std_id id; + + int v_offset; + int v_field; + int v_calc; + + int h_offset; + int h_pixels; + int h_calc; + + int v_max_out; + int h_max_out; +}; + +/* buffer for one video/vbi frame */ +struct saa7146_buf { + /* common v4l buffer stuff -- must be first */ + struct videobuf_buffer vb; + + /* saa7146 specific */ + struct v4l2_pix_format *fmt; + int (*activate)(struct saa7146_dev *dev, + struct saa7146_buf *buf, + struct saa7146_buf *next); + + /* page tables */ + struct saa7146_pgtable pt[3]; +}; + +struct saa7146_dmaqueue { + struct saa7146_dev *dev; + struct saa7146_buf *curr; + struct list_head queue; + struct timer_list timeout; +}; + +struct saa7146_overlay { + struct saa7146_fh *fh; + struct v4l2_window win; + struct v4l2_clip clips[16]; + int nclips; +}; + +/* per open data */ +struct saa7146_fh { + struct saa7146_dev *dev; + /* if this is a vbi or capture open */ + enum v4l2_buf_type type; + + /* video overlay */ + struct saa7146_overlay ov; + + /* video capture */ + struct videobuf_queue video_q; + struct v4l2_pix_format video_fmt; + + /* vbi capture */ + struct videobuf_queue vbi_q; + struct v4l2_vbi_format vbi_fmt; + struct timer_list vbi_read_timeout; +}; + +struct saa7146_vv +{ + int vbi_minor; + + /* vbi capture */ + struct saa7146_dmaqueue vbi_q; + /* vbi workaround interrupt queue */ + wait_queue_head_t vbi_wq; + int vbi_fieldcount; + struct saa7146_fh *vbi_streaming; + + int video_minor; + + /* video overlay */ + struct v4l2_framebuffer ov_fb; + struct saa7146_format *ov_fmt; + struct saa7146_overlay *ov_data; + + /* video capture */ + struct saa7146_dmaqueue video_q; + struct saa7146_fh *streaming; + + /* common: fixme? shouldn't this be in saa7146_fh? + (this leads to a more complicated question: shall the driver + store the different settings (for example S_INPUT) for every open + and restore it appropriately, or should all settings be common for + all opens? currently, we do the latter, like all other + drivers do... */ + struct saa7146_standard *standard; + + int vflip; + int hflip; + int current_hps_source; + int current_hps_sync; + + u32 *clipping; /* pointer to clipping memory */ +}; + +#define SAA7146_EXCLUSIVE 0x1 +#define SAA7146_BEFORE 0x2 +#define SAA7146_AFTER 0x4 + +struct saa7146_extension_ioctls +{ + unsigned int cmd; + int flags; +}; + +/* flags */ +#define SAA7146_EXT_SWAP_ODD_EVEN 0x1 /* needs odd/even fields swapped */ + +struct saa7146_ext_vv +{ + /* informations about the video capabilities of the device */ + int inputs; + int audios; + u32 capabilities; + int flags; + + /* additionally supported transmission standards */ + struct saa7146_standard *stds; + int num_stds; + int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); + + struct saa7146_extension_ioctls *ioctls; + int (*ioctl)(struct saa7146_dev*, unsigned int cmd, void *arg); +}; + +struct saa7146_use_ops { + void (*init)(struct saa7146_dev *, struct saa7146_vv *); + void(*open)(struct saa7146_dev *, struct saa7146_fh *); + void (*release)(struct saa7146_dev *, struct saa7146_fh *,struct file *); + void (*irq_done)(struct saa7146_dev *, unsigned long status); + ssize_t (*read)(struct file *, char *, size_t, loff_t *); + int (*capture_begin)(struct saa7146_fh *); + int (*capture_end)(struct saa7146_fh *); +}; + +/* from saa7146_fops.c */ +int saa7146_register_device(struct video_device *vid, struct saa7146_dev* dev, char *name, int type); +int saa7146_unregister_device(struct video_device *vid, struct saa7146_dev* dev); +void saa7146_buffer_finish(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, int state); +void saa7146_buffer_next(struct saa7146_dev *dev, struct saa7146_dmaqueue *q,int vbi); +int saa7146_buffer_queue(struct saa7146_dev *dev, struct saa7146_dmaqueue *q, struct saa7146_buf *buf); +void saa7146_buffer_timeout(unsigned long data); +void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf); + +int saa7146_vv_init(struct saa7146_dev* dev); +int saa7146_vv_release(struct saa7146_dev* dev); + + +/* from saa7146_hlp.c */ +void saa7146_set_overlay(struct saa7146_dev *dev, struct saa7146_fh *fh, int v); +void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next); +void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) ; +void saa7146_set_hps_source_and_sync(struct saa7146_dev *saa, int source, int sync); +void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data); + +/* from saa7146_video.c */ +extern struct saa7146_use_ops saa7146_video_uops; + +/* from saa7146_vbi.c */ +extern struct saa7146_use_ops saa7146_vbi_uops; + +/* saa7146 source inputs */ +#define SAA7146_HPS_SOURCE_PORT_A 0x00 +#define SAA7146_HPS_SOURCE_PORT_B 0x01 +#define SAA7146_HPS_SOURCE_YPB_CPA 0x02 +#define SAA7146_HPS_SOURCE_YPA_CPB 0x03 + +/* sync inputs */ +#define SAA7146_HPS_SYNC_PORT_A 0x00 +#define SAA7146_HPS_SYNC_PORT_B 0x01 + +/* number of vertical active lines */ +#define V_ACTIVE_LINES_PAL 576 +#define V_ACTIVE_LINES_NTSC 480 +#define V_ACTIVE_LINES_SECAM 576 + +/* number of lines in a field for HPS to process */ +#define V_FIELD_PAL 288 +#define V_FIELD_NTSC 240 +#define V_FIELD_SECAM 288 + +/* number of lines of vertical offset before processing */ +#define V_OFFSET_PAL 0x17 +#define V_OFFSET_NTSC 0x16 +#define V_OFFSET_SECAM 0x14 + +/* number of horizontal pixels to process */ +#define H_PIXELS_PAL 680 +#define H_PIXELS_NTSC 708 +#define H_PIXELS_SECAM 720 + +/* horizontal offset of processing window */ +#define H_OFFSET_PAL 0x14 +#define H_OFFSET_NTSC 0x06 +#define H_OFFSET_SECAM 0x14 + +#define SAA7146_PAL_VALUES V_OFFSET_PAL, V_FIELD_PAL, V_ACTIVE_LINES_PAL, H_OFFSET_PAL, H_PIXELS_PAL, H_PIXELS_PAL+1, V_ACTIVE_LINES_PAL, 768 +#define SAA7146_NTSC_VALUES V_OFFSET_NTSC, V_FIELD_NTSC, V_ACTIVE_LINES_NTSC, H_OFFSET_NTSC, H_PIXELS_NTSC, H_PIXELS_NTSC+1, V_ACTIVE_LINES_NTSC, 640 +#define SAA7146_SECAM_VALUES V_OFFSET_SECAM, V_FIELD_SECAM, V_ACTIVE_LINES_SECAM, H_OFFSET_SECAM, H_PIXELS_SECAM, H_PIXELS_SECAM+1, V_ACTIVE_LINES_SECAM, 768 + +/* some memory sizes */ +#define SAA7146_CLIPPING_MEM (14*PAGE_SIZE) + +/* some defines for the various clipping-modes */ +#define SAA7146_CLIPPING_RECT 0x4 +#define SAA7146_CLIPPING_RECT_INVERTED 0x5 +#define SAA7146_CLIPPING_MASK 0x6 +#define SAA7146_CLIPPING_MASK_INVERTED 0x7 + +/* output formats: each entry holds four informations */ +#define RGB08_COMPOSED 0x0217 /* composed is used in the sense of "not-planar" */ +/* this means: planar?=0, yuv2rgb-conversation-mode=2, dither=yes(=1), format-mode = 7 */ +#define RGB15_COMPOSED 0x0213 +#define RGB16_COMPOSED 0x0210 +#define RGB24_COMPOSED 0x0201 +#define RGB32_COMPOSED 0x0202 + +#define Y8 0x0006 +#define YUV411_COMPOSED 0x0003 +#define YUV422_COMPOSED 0x0000 +/* this means: planar?=1, yuv2rgb-conversion-mode=0, dither=no(=0), format-mode = b */ +#define YUV411_DECOMPOSED 0x100b +#define YUV422_DECOMPOSED 0x1009 +#define YUV420_DECOMPOSED 0x100a + +#define IS_PLANAR(x) (x & 0xf000) + +/* misc defines */ +#define SAA7146_NO_SWAP (0x0) +#define SAA7146_TWO_BYTE_SWAP (0x1) +#define SAA7146_FOUR_BYTE_SWAP (0x2) + +#endif diff -Nru a/include/net/ip.h b/include/net/ip.h --- a/include/net/ip.h Sat Apr 12 14:44:09 2003 +++ b/include/net/ip.h Sat Apr 12 14:44:09 2003 @@ -79,6 +79,7 @@ extern void ip_mc_dropsocket(struct sock *); extern void ip_mc_dropdevice(struct net_device *dev); extern int ip_mc_procinfo(char *, char **, off_t, int); +extern int ip_mcf_procinfo(char *, char **, off_t, int); /* * Functions provided by ip.c diff -Nru a/include/net/ip6_fib.h b/include/net/ip6_fib.h --- a/include/net/ip6_fib.h Sat Apr 12 14:44:09 2003 +++ b/include/net/ip6_fib.h Sat Apr 12 14:44:09 2003 @@ -72,6 +72,8 @@ struct rt6key rt6i_dst; struct rt6key rt6i_src; + + u8 rt6i_protocol; }; struct fib6_walker_t @@ -160,11 +162,14 @@ extern int fib6_walk_continue(struct fib6_walker_t *w); extern int fib6_add(struct fib6_node *root, - struct rt6_info *rt); + struct rt6_info *rt, + struct nlmsghdr *nlh); -extern int fib6_del(struct rt6_info *rt); +extern int fib6_del(struct rt6_info *rt, + struct nlmsghdr *nlh); -extern void inet6_rt_notify(int event, struct rt6_info *rt); +extern void inet6_rt_notify(int event, struct rt6_info *rt, + struct nlmsghdr *nlh); extern void fib6_run_gc(unsigned long dummy); diff -Nru a/include/net/ip6_route.h b/include/net/ip6_route.h --- a/include/net/ip6_route.h Sat Apr 12 14:44:06 2003 +++ b/include/net/ip6_route.h Sat Apr 12 14:44:06 2003 @@ -37,8 +37,10 @@ extern int ipv6_route_ioctl(unsigned int cmd, void *arg); -extern int ip6_route_add(struct in6_rtmsg *rtmsg); -extern int ip6_del_rt(struct rt6_info *); +extern int ip6_route_add(struct in6_rtmsg *rtmsg, + struct nlmsghdr *); +extern int ip6_del_rt(struct rt6_info *, + struct nlmsghdr *); extern int ip6_rt_addr_add(struct in6_addr *addr, struct net_device *dev); diff -Nru a/include/net/tcp.h b/include/net/tcp.h --- a/include/net/tcp.h Sat Apr 12 14:44:06 2003 +++ b/include/net/tcp.h Sat Apr 12 14:44:06 2003 @@ -31,6 +31,7 @@ #include #include #include +#include #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) #include #endif @@ -639,6 +640,8 @@ #define TCP_INC_STATS_BH(field) SNMP_INC_STATS_BH(tcp_statistics, field) #define TCP_INC_STATS_USER(field) SNMP_INC_STATS_USER(tcp_statistics, field) #define TCP_DEC_STATS(field) SNMP_DEC_STATS(tcp_statistics, field) +#define TCP_ADD_STATS_BH(field, val) SNMP_ADD_STATS_BH(tcp_statistics, field, val) +#define TCP_ADD_STATS_USER(field, val) SNMP_ADD_STATS_USER(tcp_statistics, field, val) extern __inline__ void tcp_put_port(struct sock *sk); extern void tcp_inherit_port(struct sock *sk, struct sock *child); @@ -1398,6 +1401,9 @@ break; case TCP_CLOSE: + if (oldstate == TCP_CLOSE_WAIT || oldstate == TCP_ESTABLISHED) + TCP_INC_STATS(TcpEstabResets); + sk->prot->unhash(sk); if (sk->prev && !(sk->userlocks&SOCK_BINDPORT_LOCK)) tcp_put_port(sk); @@ -1876,6 +1882,15 @@ return (sysctl_tcp_frto && tp->send_head && !after(TCP_SKB_CB(tp->send_head)->end_seq, tp->snd_una + tp->snd_wnd)); +} + +static inline void tcp_mib_init(void) +{ + /* See RFC 2012 */ + TCP_ADD_STATS_USER(TcpRtoAlgorithm, 1); + TCP_ADD_STATS_USER(TcpRtoMin, TCP_RTO_MIN*1000/HZ); + TCP_ADD_STATS_USER(TcpRtoMax, TCP_RTO_MAX*1000/HZ); + TCP_ADD_STATS_USER(TcpMaxConn, -1); } #endif /* _TCP_H */ diff -Nru a/include/net/xfrm.h b/include/net/xfrm.h --- a/include/net/xfrm.h Sat Apr 12 14:44:09 2003 +++ b/include/net/xfrm.h Sat Apr 12 14:44:09 2003 @@ -84,6 +84,7 @@ /* Full description of state of transformer. */ struct xfrm_state { + /* Note: bydst is re-used during gc */ struct list_head bydst; struct list_head byspi; @@ -722,6 +723,12 @@ struct sadb_alg desc; }; +/* XFRM tunnel handlers. */ +struct xfrm_tunnel { + int (*handler)(struct sk_buff *skb); + void (*err_handler)(struct sk_buff *skb, void *info); +}; + extern void xfrm_init(void); extern void xfrm4_init(void); extern void xfrm4_fini(void); @@ -751,6 +758,8 @@ extern int xfrm_check_selectors(struct xfrm_state **x, int n, struct flowi *fl); extern int xfrm4_rcv(struct sk_buff *skb); extern int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type); +extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler); +extern int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler); extern int xfrm6_rcv(struct sk_buff **pskb); extern int xfrm6_clear_mutable_options(struct sk_buff *skb, u16 *nh_offset, int dir); extern int xfrm_user_policy(struct sock *sk, int optname, u8 *optval, int optlen); diff -Nru a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h --- a/include/sound/ac97_codec.h Sat Apr 12 14:44:08 2003 +++ b/include/sound/ac97_codec.h Sat Apr 12 14:44:08 2003 @@ -223,6 +223,13 @@ #define AC97_YMF753_DIT_CTRL2 0x66 /* DIT Control 2 */ #define AC97_YMF753_3D_MODE_SEL 0x68 /* 3D Mode Select */ +/* specific - C-Media */ +#define AC97_CM9738_VENDOR_CTRL 0x5a +#define AC97_CM9739_MULTI_CHAN 0x64 +#define AC97_CM9739_SPDIF_IN_STATUS 0x68 /* 32bit */ +#define AC97_CM9739_SPDIF_CTRL 0x6c + + /* ac97->scaps */ #define AC97_SCAP_AUDIO (1<<0) /* audio AC'97 codec */ #define AC97_SCAP_MODEM (1<<1) /* modem AC'97 codec */ @@ -259,6 +266,9 @@ void (*private_free) (ac97_t *ac97); /* --- */ snd_card_t *card; + struct pci_dev *pci; /* assigned PCI device - used for quirks */ + unsigned short subsystem_vendor; + unsigned short subsystem_device; spinlock_t reg_lock; unsigned short num; /* number of codec: 0 = primary, 1 = secondary */ unsigned short addr; /* physical address of codec [0-3] */ @@ -280,6 +290,7 @@ unsigned short chained[3]; // 0 = C34, 1 = C79, 2 = C69 unsigned short id[3]; // codec IDs (lower 16-bit word) unsigned short pcmreg[3]; // PCM registers + unsigned short codec_cfg[3]; // CODEC_CFG bits struct semaphore mutex; } ad18xx; } spec; @@ -327,6 +338,6 @@ int type; }; -int snd_ac97_tune_hardware(ac97_t *ac97, struct pci_dev *pci, struct ac97_quirk *quirk); +int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk); #endif /* __SOUND_AC97_CODEC_H */ diff -Nru a/include/sound/asound.h b/include/sound/asound.h --- a/include/sound/asound.h Sat Apr 12 14:44:08 2003 +++ b/include/sound/asound.h Sat Apr 12 14:44:08 2003 @@ -681,7 +681,7 @@ * * ****************************************************************************/ -#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 1) +#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 2) struct sndrv_ctl_card_info { int card; /* card number */ @@ -726,7 +726,8 @@ #define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */ #define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */ #define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */ -#define SNDRV_CTL_ELEM_ACCESS_INDIRECT (1<<31) /* indirect access */ +#define SNDRV_CTL_ELEM_ACCESS_DINDIRECT (1<<30) /* indirect access for matrix dimensions in the info structure */ +#define SNDRV_CTL_ELEM_ACCESS_INDIRECT (1<<31) /* indirect access for element value in the value structure */ /* for further details see the ACPI and PCI power management specification */ #define SNDRV_CTL_POWER_D0 0x0000 /* full On */ @@ -778,7 +779,11 @@ } enumerated; unsigned char reserved[128]; } value; - unsigned char reserved[64]; + union { + unsigned short d[4]; /* dimensions */ + unsigned short *d_ptr; /* indirect */ + } dimen; + unsigned char reserved[64-4*sizeof(unsigned short)]; }; struct sndrv_ctl_elem_value { diff -Nru a/include/sound/control.h b/include/sound/control.h --- a/include/sound/control.h Sat Apr 12 14:44:08 2003 +++ b/include/sound/control.h Sat Apr 12 14:44:08 2003 @@ -49,24 +49,30 @@ unsigned char *name; /* ASCII name of item */ unsigned int index; /* index of item */ unsigned int access; /* access rights */ + unsigned int count; /* count of same elements */ snd_kcontrol_info_t *info; snd_kcontrol_get_t *get; snd_kcontrol_put_t *put; unsigned long private_value; } snd_kcontrol_new_t; +typedef struct _snd_kcontrol_volatile { + snd_ctl_file_t *owner; /* locked */ + pid_t owner_pid; + unsigned int access; /* access rights */ +} snd_kcontrol_volatile_t; + struct _snd_kcontrol { struct list_head list; /* list of controls */ snd_ctl_elem_id_t id; - snd_ctl_file_t *owner; /* locked */ - pid_t owner_pid; - unsigned int access; /* access rights */ + unsigned int count; /* count of same elements */ snd_kcontrol_info_t *info; snd_kcontrol_get_t *get; snd_kcontrol_put_t *put; unsigned long private_value; void *private_data; void (*private_free)(snd_kcontrol_t *kcontrol); + snd_kcontrol_volatile_t vd[0]; /* volatile data */ }; #define snd_kcontrol(n) list_entry(n, snd_kcontrol_t, list) @@ -100,7 +106,7 @@ void snd_ctl_notify(snd_card_t * card, unsigned int mask, snd_ctl_elem_id_t * id); -snd_kcontrol_t *snd_ctl_new(snd_kcontrol_t * kcontrol); +snd_kcontrol_t *snd_ctl_new(snd_kcontrol_t * kcontrol, unsigned int access); snd_kcontrol_t *snd_ctl_new1(snd_kcontrol_new_t * kcontrolnew, void * private_data); void snd_ctl_free_one(snd_kcontrol_t * kcontrol); int snd_ctl_add(snd_card_t * card, snd_kcontrol_t * kcontrol); @@ -116,5 +122,34 @@ int snd_ctl_unregister(snd_card_t *card); int snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn); int snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn); + +static inline unsigned int snd_ctl_get_ioffnum(snd_kcontrol_t *kctl, snd_ctl_elem_id_t *id) +{ + return id->numid - kctl->id.numid; +} + +static inline unsigned int snd_ctl_get_ioffidx(snd_kcontrol_t *kctl, snd_ctl_elem_id_t *id) +{ + return id->index - kctl->id.index; +} + +static inline unsigned int snd_ctl_get_ioff(snd_kcontrol_t *kctl, snd_ctl_elem_id_t *id) +{ + if (id->numid) { + return snd_ctl_get_ioffnum(kctl, id); + } else { + return snd_ctl_get_ioffidx(kctl, id); + } +} + +static inline snd_ctl_elem_id_t *snd_ctl_build_ioff(snd_ctl_elem_id_t *dst_id, + snd_kcontrol_t *src_kctl, + unsigned int offset) +{ + *dst_id = src_kctl->id; + dst_id->index += offset; + dst_id->numid += offset; + return dst_id; +} #endif /* __SOUND_CONTROL_H */ diff -Nru a/include/sound/cs46xx.h b/include/sound/cs46xx.h --- a/include/sound/cs46xx.h Sat Apr 12 14:44:07 2003 +++ b/include/sound/cs46xx.h Sat Apr 12 14:44:07 2003 @@ -1730,6 +1730,7 @@ void (*amplifier_ctrl)(cs46xx_t *, int); void (*active_ctrl)(cs46xx_t *, int); void (*mixer_init)(cs46xx_t *); + struct pci_dev *acpi_dev; int acpi_port; snd_kcontrol_t *eapd_switch; /* for amplifier hack */ @@ -1749,6 +1750,7 @@ dsp_spos_instance_t * dsp_spos_instance; snd_pcm_t *pcm_rear; + snd_pcm_t *pcm_center_lfe; snd_pcm_t *pcm_iec958; #else /* for compatibility */ cs46xx_pcm_t *playback_pcm; @@ -1764,6 +1766,7 @@ int snd_cs46xx_pcm(cs46xx_t *chip, int device, snd_pcm_t **rpcm); int snd_cs46xx_pcm_rear(cs46xx_t *chip, int device, snd_pcm_t **rpcm); int snd_cs46xx_pcm_iec958(cs46xx_t *chip, int device, snd_pcm_t **rpcm); +int snd_cs46xx_pcm_center_lfe(cs46xx_t *chip, int device, snd_pcm_t **rpcm); int snd_cs46xx_mixer(cs46xx_t *chip); int snd_cs46xx_midi(cs46xx_t *chip, int device, snd_rawmidi_t **rmidi); int snd_cs46xx_start_dsp(cs46xx_t *chip); diff -Nru a/include/sound/cs46xx_dsp_scb_types.h b/include/sound/cs46xx_dsp_scb_types.h --- a/include/sound/cs46xx_dsp_scb_types.h Sat Apr 12 14:44:08 2003 +++ b/include/sound/cs46xx_dsp_scb_types.h Sat Apr 12 14:44:08 2003 @@ -27,6 +27,18 @@ #ifndef __CS46XX_DSP_SCB_TYPES_H__ #define __CS46XX_DSP_SCB_TYPES_H__ +#include + +#ifndef ___DSP_DUAL_16BIT_ALLOC +#if defined(__LITTLE_ENDIAN) +#define ___DSP_DUAL_16BIT_ALLOC(a,b) u16 a; u16 b; +#elif defined(__BIG_ENDIAN) +#define ___DSP_DUAL_16BIT_ALLOC(a,b) u16 b; u16 a; +#else +#error Not __LITTLE_ENDIAN and not __BIG_ENDIAN, then what ??? +#endif +#endif + /* This structs are used internally by the SP */ typedef struct _basic_dma_req_t { @@ -60,11 +72,14 @@ } scatter_gather_ext_t; typedef struct _volume_control_t { - u16 rightTarg; /* Target volume for left & right channels */ - u16 leftTarg; - - u16 rightVol; /* Current left & right channel volumes */ - u16 leftVol; + ___DSP_DUAL_16BIT_ALLOC( + rightTarg, /* Target volume for left & right channels */ + leftTarg + ) + ___DSP_DUAL_16BIT_ALLOC( + rightVol, /* Current left & right channel volumes */ + leftVol + ) } volume_control_t; /* Generic stream control block (SCB) structure definition */ @@ -95,15 +110,17 @@ /* Sublist pointer & next stream control block (SCB) link. Initialized & modified by the host R/O for the DSP task */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) /* Pointer to this tasks parameter block & stream function pointer Initialized by the host R/O for the DSP task */ - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ - + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) /* rsConfig register for stream buffer (rsDMA reg. is loaded from basicReq.daw for incoming streams, or @@ -176,59 +193,78 @@ This rule does not apply to one off boot time initialisation prior to starting the SP */ - + + ___DSP_DUAL_16BIT_ALLOC( /* First element on the Hyper forground task tree */ - u16 hfg_tree_root_ptr; /* HOST */ + hfg_tree_root_ptr, /* HOST */ /* First 3 dwords are written by the host and read-only on the DSP */ - u16 hfg_stack_base; /* HOST */ + hfg_stack_base /* HOST */ + ) + ___DSP_DUAL_16BIT_ALLOC( /* Point to this data structure to enable easy access */ - u16 spos_cb_ptr; /* SP */ - u16 prev_task_tree_ptr; /* SP && HOST */ - + spos_cb_ptr, /* SP */ + prev_task_tree_ptr /* SP && HOST */ + ) + ___DSP_DUAL_16BIT_ALLOC( /* Currently Unused */ - u16 xxinterval_timer_period; + xxinterval_timer_period, /* Enable extension of SPOS data structure */ - u16 HFGSPB_ptr; + HFGSPB_ptr + ) - u16 xxnum_HFG_ticks_thisInterval; + ___DSP_DUAL_16BIT_ALLOC( + xxnum_HFG_ticks_thisInterval, /* Modified by the DSP */ - u16 xxnum_tntervals; + xxnum_tntervals + ) /* Set by DSP upon encountering a trap (breakpoint) or a spurious interrupt. The host must clear this dword after reading it upon receiving spInt1. */ - u16 spurious_int_flag; /* (Host & SP) Nature of the spurious interrupt */ - u16 trap_flag; /* (Host & SP) Nature of detected Trap */ - - - u16 unused2; - u16 invalid_IP_flag; /* (Host & SP ) Indicate detection of invalid instruction pointer */ - + ___DSP_DUAL_16BIT_ALLOC( + spurious_int_flag, /* (Host & SP) Nature of the spurious interrupt */ + trap_flag /* (Host & SP) Nature of detected Trap */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + unused2, + invalid_IP_flag /* (Host & SP ) Indicate detection of invalid instruction pointer */ + ) + ___DSP_DUAL_16BIT_ALLOC( /* pointer to forground task tree header for use in next task search */ - u16 fg_task_tree_hdr_ptr; /* HOST */ + fg_task_tree_hdr_ptr, /* HOST */ /* Data structure for controlling synchronous link update */ - u16 hfg_sync_update_ptr; /* HOST */ + hfg_sync_update_ptr /* HOST */ + ) - u16 begin_foreground_FCNT; /* SP */ + ___DSP_DUAL_16BIT_ALLOC( + begin_foreground_FCNT, /* SP */ /* Place holder for holding sleep timing */ - u16 last_FCNT_before_sleep; /* SP */ + last_FCNT_before_sleep /* SP */ + ) - u16 unused7; /* SP */ - u16 next_task_treePtr; /* SP */ + ___DSP_DUAL_16BIT_ALLOC( + unused7, /* SP */ + next_task_treePtr /* SP */ + ) - u32 nused5; + u32 unused5; - u16 active_flags; /* SP */ + ___DSP_DUAL_16BIT_ALLOC( + active_flags, /* SP */ /* State flags, used to assist control of execution of Hyper Forground */ - u16 HFG_flags; /* SP */ + HFG_flags /* SP */ + ) - u16 unused9; - u16 unused8; + ___DSP_DUAL_16BIT_ALLOC( + unused9, + unused8 + ) /* Space for saving enough context so that we can set up enough to save some more context. @@ -261,16 +297,21 @@ /* First 12 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ - + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) + ___DSP_DUAL_16BIT_ALLOC( /* Initial values are 0000:xxxx */ - u16 reserved; - u16 extra_sample_accum; + reserved, + extra_sample_accum + ) /* Initial values are xxxx:0000 @@ -281,9 +322,10 @@ resynchronize the FIFO pointer upon start/restart) */ - u16 codec_FIFO_syncd; - u16 codec_FIFO_ptr; - + ___DSP_DUAL_16BIT_ALLOC( + codec_FIFO_syncd, + codec_FIFO_ptr + ) /* Init. 8000:0005 for 44.1k 8000:0001 for 48k @@ -292,8 +334,10 @@ processed in the current group of frames */ - u16 frac_samp_accum_qm1; - u16 TM_frms_left_in_group; + ___DSP_DUAL_16BIT_ALLOC( + frac_samp_accum_qm1, + TM_frms_left_in_group + ) /* Init. 0001:0005 for 44.1k 0000:0001 for 48k @@ -303,8 +347,10 @@ nsamp_per_frm_q15 lo: Number of frames in the group */ - u16 frac_samp_correction_qm1; - u16 TM_frm_group_length; + ___DSP_DUAL_16BIT_ALLOC( + frac_samp_correction_qm1, + TM_frm_group_length + ) /* Init. 44.1k*65536/8k = 0x00058333 for 44.1k 48k*65536/8k = 0x00060000 for 48k @@ -319,13 +365,18 @@ /* First 13 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) u32 strm_rs_config; /* REQUIRED */ + u32 strm_buf_ptr; /* REQUIRED */ /* NOTE: The CODEC output task reads samples from the first task on its @@ -347,8 +398,10 @@ to which the right-channel samples are to be written. */ - u16 left_chan_base_IO_addr; - u16 right_chan_IO_disp; + ___DSP_DUAL_16BIT_ALLOC( + left_chan_base_IO_addr, + right_chan_IO_disp + ) /* Init: 0x0080:0004 for non-AC-97 @@ -359,12 +412,16 @@ 16-bit input sample to obtain the 32-bit output word */ - u16 CO_scale_shift_count; - u16 CO_exp_vol_change_rate; + ___DSP_DUAL_16BIT_ALLOC( + CO_scale_shift_count, + CO_exp_vol_change_rate + ) /* Pointer to SCB at end of input chain */ - u16 reserved; - u16 last_sub_ptr; + ___DSP_DUAL_16BIT_ALLOC( + reserved, + last_sub_ptr + ) } codec_output_scb_t; /* SCB for CODEC input algorithm */ @@ -372,11 +429,15 @@ /* First 13 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) u32 strm_rs_config; /* REQUIRED */ u32 strm_buf_ptr; /* REQUIRED */ @@ -402,17 +463,20 @@ to which the right-channel samples are to be written. */ - u16 rightChanINdisp; - u16 left_chan_base_IN_addr; - + ___DSP_DUAL_16BIT_ALLOC( + rightChanINdisp, + left_chan_base_IN_addr + ) /* Init. ?:fffc lo: Negative shift count to shift the 32-bit input dword to obtain the 16-bit sample msb-aligned (count is negative to shift left) */ - u16 scaleShiftCount; - u16 reserver1; + ___DSP_DUAL_16BIT_ALLOC( + scaleShiftCount, + reserver1 + ) u32 reserved2; } codec_input_scb_t; @@ -422,11 +486,15 @@ /* First 13 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) u32 strm_buf_ptr; /* REQUIRED */ u32 strm_rs_config; /* REQUIRED */ @@ -438,8 +506,10 @@ lo: Flag indicating the link to the CODEC input task is to be initialized */ - u16 init_codec_input_link; - u16 codec_input_buf_scb; + ___DSP_DUAL_16BIT_ALLOC( + init_codec_input_link, + codec_input_buf_scb + ) /* Initialized by the host (host updates target volumes) */ volume_control_t psi_vol_ctrl; @@ -447,36 +517,54 @@ } pcm_serial_input_scb_t; typedef struct _src_task_scb_t { - u16 frames_left_in_gof; - u16 gofs_left_in_sec; - - u16 const2_thirds; - u16 num_extra_tnput_samples; + ___DSP_DUAL_16BIT_ALLOC( + frames_left_in_gof, + gofs_left_in_sec + ) + + ___DSP_DUAL_16BIT_ALLOC( + const2_thirds, + num_extra_tnput_samples + ) + + ___DSP_DUAL_16BIT_ALLOC( + cor_per_gof, + correction_per_sec + ) + + ___DSP_DUAL_16BIT_ALLOC( + output_buf_producer_ptr, + junk_DMA_MID + ) + + ___DSP_DUAL_16BIT_ALLOC( + gof_length, + gofs_per_sec + ) - u16 cor_per_gof; - u16 correction_per_sec; - - u16 output_buf_producer_ptr; - u16 junk_DMA_MID; - - u16 gof_length; - u16 gofs_per_sec; - u32 input_buf_strm_config; - u16 reserved_for_SRC_use; - u16 input_buf_consumer_ptr; + ___DSP_DUAL_16BIT_ALLOC( + reserved_for_SRC_use, + input_buf_consumer_ptr + ) u32 accum_phi; - u16 exp_src_vol_change_rate; - u16 input_buf_producer_ptr; - - u16 src_next_scb; - u16 src_sub_list_ptr; - - u16 src_entry_point; - u16 src_this_sbp; + ___DSP_DUAL_16BIT_ALLOC( + exp_src_vol_change_rate, + input_buf_producer_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + src_next_scb, + src_sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + src_entry_point, + src_this_sbp + ) u32 src_strm_rs_config; u32 src_strm_buf_ptr; @@ -490,26 +578,34 @@ /* decimationFactor = 2, 4, or 8 (larger factors waste too much memory when compared to cascading decimators) */ - u16 dec2_coef_base_ptr; - u16 dec2_coef_increment; + ___DSP_DUAL_16BIT_ALLOC( + dec2_coef_base_ptr, + dec2_coef_increment + ) + /* coefIncrement = 128 / decimationFactor (for our ROM filter) coefBasePtr = 0x8000 (for our ROM filter) */ - - u16 dec2_in_samples_per_out_triplet; - u16 dec2_extra_in_samples; + ___DSP_DUAL_16BIT_ALLOC( + dec2_in_samples_per_out_triplet, + dec2_extra_in_samples + ) /* extraInSamples: # of accumulated, unused input samples (init. to 0) inSamplesPerOutTriplet = 3 * decimationFactor */ - u16 dec2_const2_thirds; - u16 dec2_half_num_taps_mp5; + ___DSP_DUAL_16BIT_ALLOC( + dec2_const2_thirds, + dec2_half_num_taps_mp5 + ) /* halfNumTapsM5: (1/2 number of taps in decimation filter) minus 5 const2thirds: constant 2/3 in 16Q0 format (sign.15) */ - u16 dec2_output_buf_producer_ptr; - u16 dec2_junkdma_mid; + ___DSP_DUAL_16BIT_ALLOC( + dec2_output_buf_producer_ptr, + dec2_junkdma_mid + ) u32 dec2_reserved2; @@ -518,26 +614,34 @@ (buffer size = decimationFactor * 32 dwords) */ - u16 dec2_phi_incr; - u16 dec2_input_buf_consumer_ptr; + ___DSP_DUAL_16BIT_ALLOC( + dec2_phi_incr, + dec2_input_buf_consumer_ptr + ) /* inputBufConsumerPtr: Input buffer read pointer (into SRC filter) phiIncr = decimationFactor * 4 */ u32 dec2_reserved3; - u16 dec2_exp_vol_change_rate; - u16 dec2_input_buf_producer_ptr; + ___DSP_DUAL_16BIT_ALLOC( + dec2_exp_vol_change_rate, + dec2_input_buf_producer_ptr + ) /* inputBufProducerPtr: Input buffer write pointer expVolChangeRate: Exponential volume change rate for possible future mixer on input streams */ - u16 dec2_next_scb; - u16 dec2_sub_list_ptr; - - u16 dec2_entry_point; - u16 dec2_this_spb; + ___DSP_DUAL_16BIT_ALLOC( + dec2_next_scb, + dec2_sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + dec2_entry_point, + dec2_this_spb + ) u32 dec2_strm_rs_config; u32 dec2_strm_buf_ptr; @@ -548,23 +652,32 @@ } decimate_by_pow2_scb_t; typedef struct _vari_decimate_scb_t { - u16 vdec_frames_left_in_gof; - u16 vdec_gofs_left_in_sec; - - u16 vdec_const2_thirds; - u16 vdec_extra_in_samples; + ___DSP_DUAL_16BIT_ALLOC( + vdec_frames_left_in_gof, + vdec_gofs_left_in_sec + ) + + ___DSP_DUAL_16BIT_ALLOC( + vdec_const2_thirds, + vdec_extra_in_samples + ) /* extraInSamples: # of accumulated, unused input samples (init. to 0) const2thirds: constant 2/3 in 16Q0 format (sign.15) */ - u16 vdec_cor_per_gof; - u16 vdec_correction_per_sec; - - u16 vdec_output_buf_producer_ptr; - u16 vdec_input_buf_consumer_ptr; + ___DSP_DUAL_16BIT_ALLOC( + vdec_cor_per_gof, + vdec_correction_per_sec + ) + + ___DSP_DUAL_16BIT_ALLOC( + vdec_output_buf_producer_ptr, + vdec_input_buf_consumer_ptr + ) /* inputBufConsumerPtr: Input buffer read pointer (into SRC filter) */ - - u16 vdec_gof_length; - u16 vdec_gofs_per_sec; + ___DSP_DUAL_16BIT_ALLOC( + vdec_gof_length, + vdec_gofs_per_sec + ) u32 vdec_input_buf_strm_config; /* inputBufStrmConfig: rsConfig for the input buffer to the decimator @@ -575,17 +688,23 @@ u32 vdec_accumphi; /* accumPhi: accumulated fractional phase increment (6.26) */ - u16 vdec_exp_vol_change_rate; - u16 vdec_input_buf_producer_ptr; + ___DSP_DUAL_16BIT_ALLOC( + vdec_exp_vol_change_rate, + vdec_input_buf_producer_ptr + ) /* inputBufProducerPtr: Input buffer write pointer expVolChangeRate: Exponential volume change rate for possible future mixer on input streams */ - u16 vdec_next_scb; - u16 vdec_sub_list_ptr; - - u16 vdec_entry_point; - u16 vdec_this_spb; + ___DSP_DUAL_16BIT_ALLOC( + vdec_next_scb, + vdec_sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + vdec_entry_point, + vdec_this_spb + ) u32 vdec_strm_rs_config; u32 vdec_strm_buf_ptr; @@ -601,11 +720,15 @@ /* First 13 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) u32 strm_rs_config; /* REQUIRED */ u32 strm_buf_ptr; /* REQUIRED */ @@ -617,18 +740,24 @@ processed in the current group of frames */ - u16 frames_left_in_group; - u16 accum_input_triplets; + ___DSP_DUAL_16BIT_ALLOC( + frames_left_in_group, + accum_input_triplets + ) /* hi: Exponential volume change rate for mixer on input streams lo: Number of frames in the group */ - u16 frame_group_length; - u16 exp_vol_change_rate; - - u16 const_FFFF; - u16 const_zero; + ___DSP_DUAL_16BIT_ALLOC( + frame_group_length, + exp_vol_change_rate + ) + + ___DSP_DUAL_16BIT_ALLOC( + const_FFFF, + const_zero + ) } mix2_ostream_scb_t; @@ -637,11 +766,15 @@ /* First 13 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) u32 strm_rs_config; /* REQUIRED */ u32 strm_buf_ptr; /* REQUIRED */ @@ -668,30 +801,40 @@ u32 ostrm_rs_config; u32 ostrm_buf_ptr; - u16 io_sclks_per_lr_clk; - u16 io_io_enable; + ___DSP_DUAL_16BIT_ALLOC( + io_sclks_per_lr_clk, + io_io_enable + ) u32 io_free4; - - u16 io_next_scb; - u16 io_sub_list_ptr; - u16 io_entry_point; - u16 io_this_spb; + ___DSP_DUAL_16BIT_ALLOC( + io_next_scb, + io_sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + io_entry_point, + io_this_spb + ) u32 istrm_rs_config; u32 istrm_buf_ptr; /* Init. 0000:8042: for ASER1 0000:8044: for ASER2 */ - u16 io_stat_reg_addr; - u16 iofifo_pointer; + ___DSP_DUAL_16BIT_ALLOC( + io_stat_reg_addr, + iofifo_pointer + ) /* Init 1 stero:100 ASER1 Init 0 mono:110 ASER2 */ - u16 ififo_base_addr; - u16 ist_mo_format; + ___DSP_DUAL_16BIT_ALLOC( + ififo_base_addr, + ist_mo_format + ) u32 i_free; } async_codec_input_scb_t; @@ -699,43 +842,59 @@ /* SCB for the SP/DIF CODEC input and output */ typedef struct _spdifiscb_t { - u16 status_ptr; - u16 status_start_ptr; - + ___DSP_DUAL_16BIT_ALLOC( + status_ptr, + status_start_ptr + ) + u32 current_total; u32 previous_total; - u16 count; - u16 count_limit; - + ___DSP_DUAL_16BIT_ALLOC( + count, + count_limit + ) + u32 status_data; - - u16 status; - u16 free4; + + ___DSP_DUAL_16BIT_ALLOC( + status, + free4 + ) u32 free3; - - u16 free2; - u16 bit_count; + + ___DSP_DUAL_16BIT_ALLOC( + free2, + bit_count + ) u32 temp_status; - u16 next_SCB; - u16 sub_list_ptr; + ___DSP_DUAL_16BIT_ALLOC( + next_SCB, + sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, + this_spb + ) - u16 entry_point; - u16 this_spb; - u32 strm_rs_config; u32 strm_buf_ptr; - u16 stat_reg_addr; - u16 fifo_pointer; - - u16 fifo_base_addr; - u16 st_mo_format; - - u32 Free1; + ___DSP_DUAL_16BIT_ALLOC( + stat_reg_addr, + fifo_pointer + ) + + ___DSP_DUAL_16BIT_ALLOC( + fifo_base_addr, + st_mo_format + ) + + u32 free1; } spdifiscb_t; @@ -751,93 +910,132 @@ u32 strm_rs_config; u32 strm_buf_ptr; - - u16 status; - u16 free5; + + ___DSP_DUAL_16BIT_ALLOC( + status, + free5 + ) u32 free4; - - u16 next_scb; - u16 sub_list_ptr; - u16 entry_point; - u16 this_spb; - + ___DSP_DUAL_16BIT_ALLOC( + next_scb, + sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, + this_spb + ) + u32 free6[2]; - u16 stat_reg_addr; - u16 fifo_pointer; - - u16 fifo_base_addr; - u16 st_mo_format; - + ___DSP_DUAL_16BIT_ALLOC( + stat_reg_addr, + fifo_pointer + ) + + ___DSP_DUAL_16BIT_ALLOC( + fifo_base_addr, + st_mo_format + ) + u32 free1; } spdifoscb_t; typedef struct _asynch_fg_rx_scb_t { + ___DSP_DUAL_16BIT_ALLOC( + bot_buf_mask, + buf_Mask + ) + + ___DSP_DUAL_16BIT_ALLOC( + max, + min + ) + + ___DSP_DUAL_16BIT_ALLOC( + old_producer_pointer, + hfg_scb_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + delta, + adjust_count + ) - u16 bot_buf_mask; - u16 buf_Mask; - - u16 max; - u16 min; - - u16 old_producer_pointer; - u16 hfg_scb_ptr; - - u16 delta; - u16 adjust_count; - u32 unused2[5]; - - u16 sibling_ptr; - u16 child_ptr; - - u16 code_ptr; - u16 this_ptr; - + + ___DSP_DUAL_16BIT_ALLOC( + sibling_ptr, + child_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + code_ptr, + this_ptr + ) + u32 strm_rs_config; u32 strm_buf_ptr; u32 unused_phi_incr; - u16 righttarg; - u16 left_targ; - - u16 rightVol; - u16 leftVol; + ___DSP_DUAL_16BIT_ALLOC( + right_targ, + left_targ + ) + + ___DSP_DUAL_16BIT_ALLOC( + right_vol, + left_vol + ) } asynch_fg_rx_scb_t; typedef struct _asynch_fg_tx_scb_t { - u16 not_buf_mask; - u16 buf_mask; - - u16 Max; - u16 min; - - u16 unused1; - u16 hfg_scb_ptr; - - u16 delta; - u16 adjust_count; + ___DSP_DUAL_16BIT_ALLOC( + not_buf_mask, + buf_mask + ) + + ___DSP_DUAL_16BIT_ALLOC( + max, + min + ) + + ___DSP_DUAL_16BIT_ALLOC( + unused1, + hfg_scb_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + delta, + adjust_count + ) u32 accum_phi; - u16 unused2; - u16 const_one_third; + ___DSP_DUAL_16BIT_ALLOC( + unused2, + const_one_third + ) u32 unused3[3]; - u16 sibling_ptr; - u16 child_ptr; - - u16 codePtr; - u16 this_ptr; + ___DSP_DUAL_16BIT_ALLOC( + sibling_ptr, + child_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + codePtr, + this_ptr + ) u32 strm_rs_config; @@ -845,11 +1043,15 @@ u32 phi_incr; - u16 unused_right_targ; - u16 unused_left_targ; - - u16 unused_right_vol; - u16 unused_left_vol; + ___DSP_DUAL_16BIT_ALLOC( + unused_right_targ, + unused_left_targ + ) + + ___DSP_DUAL_16BIT_ALLOC( + unused_right_vol, + unused_left_vol + ) } asynch_fg_tx_scb_t; @@ -857,49 +1059,67 @@ /* First 13 dwords from generic_scb_t */ basic_dma_req_t basic_req; /* Optional */ scatter_gather_ext_t sg_ext; /* Optional */ - u16 next_scb; /* REQUIRED */ - u16 sub_list_ptr; /* REQUIRED */ - - u16 entry_point; /* REQUIRED */ - u16 this_spb; /* REQUIRED */ + ___DSP_DUAL_16BIT_ALLOC( + next_scb, /* REQUIRED */ + sub_list_ptr /* REQUIRED */ + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* REQUIRED */ + this_spb /* REQUIRED */ + ) u32 strm_rs_config; /* REQUIRED */ u32 strm_buf_ptr; /* REQUIRED */ - u16 init_snoop_input_link; - u16 snoop_child_input_scb; + ___DSP_DUAL_16BIT_ALLOC( + init_snoop_input_link, + snoop_child_input_scb + ) u32 snoop_input_buf_ptr; - u16 reserved; - u16 input_scb; + ___DSP_DUAL_16BIT_ALLOC( + reserved, + input_scb + ) } output_snoop_scb_t; typedef struct _spio_write_scb_t { - u16 address1; - u16 address2; + ___DSP_DUAL_16BIT_ALLOC( + address1, + address2 + ) u32 data1; u32 data2; - u16 address3; - u16 address4; + ___DSP_DUAL_16BIT_ALLOC( + address3, + address4 + ) u32 data3; u32 data4; - u16 unused1; - u16 data_ptr; + ___DSP_DUAL_16BIT_ALLOC( + unused1, + data_ptr + ) u32 unused2[2]; - u16 sibling_ptr; - u16 child_ptr; - - u16 entry_point; - u16 this_ptr; + ___DSP_DUAL_16BIT_ALLOC( + sibling_ptr, + child_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, + this_ptr + ) u32 unused3[5]; } spio_write_scb_t; @@ -920,11 +1140,15 @@ u32 i7; - u16 next_scb; - u16 sub_list_ptr; - - u16 entry_point; - u16 this_ptr; + ___DSP_DUAL_16BIT_ALLOC( + next_scb, + sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, + this_ptr + ) u32 strm_buf_config; u32 strm_buf_ptr2; @@ -933,4 +1157,60 @@ volume_control_t vdec_vol_ctrl; } magic_snoop_task_t; + + +typedef struct _filter_scb_t { + ___DSP_DUAL_16BIT_ALLOC( + a0_right, /* 0x00 */ + a0_left + ) + ___DSP_DUAL_16BIT_ALLOC( + a1_right, /* 0x01 */ + a1_left + ) + ___DSP_DUAL_16BIT_ALLOC( + a2_right, /* 0x02 */ + a2_left + ) + ___DSP_DUAL_16BIT_ALLOC( + output_buf_ptr, /* 0x03 */ + init + ) + + ___DSP_DUAL_16BIT_ALLOC( + filter_unused3, /* 0x04 */ + filter_unused2 + ) + + u32 prev_sample_output1; /* 0x05 */ + u32 prev_sample_output2; /* 0x06 */ + u32 prev_sample_input1; /* 0x07 */ + u32 prev_sample_input2; /* 0x08 */ + + ___DSP_DUAL_16BIT_ALLOC( + next_scb_ptr, /* 0x09 */ + sub_list_ptr + ) + + ___DSP_DUAL_16BIT_ALLOC( + entry_point, /* 0x0A */ + spb_ptr + ) + + u32 strm_rs_config; /* 0x0B */ + u32 strm_buf_ptr; /* 0x0C */ + + ___DSP_DUAL_16BIT_ALLOC( + b0_right, /* 0x0D */ + b0_left + ) + ___DSP_DUAL_16BIT_ALLOC( + b1_right, /* 0x0E */ + b1_left + ) + ___DSP_DUAL_16BIT_ALLOC( + b2_right, /* 0x0F */ + b2_left + ) +} filter_scb_t; #endif /* __DSP_SCB_TYPES_H__ */ diff -Nru a/include/sound/cs46xx_dsp_spos.h b/include/sound/cs46xx_dsp_spos.h --- a/include/sound/cs46xx_dsp_spos.h Sat Apr 12 14:44:08 2003 +++ b/include/sound/cs46xx_dsp_spos.h Sat Apr 12 14:44:08 2003 @@ -52,17 +52,18 @@ #define DSP_MAX_TASK_DESC 50 #define DSP_MAX_PCM_CHANNELS 32 -#define DSP_MAX_SRC_NR 6 +#define DSP_MAX_SRC_NR 14 -#define DSP_PCM_MAIN_CHANNEL 1 -#define DSP_PCM_REAR_CHANNEL 2 -#define DSP_PCM_CENTER_CHANNEL 3 -#define DSP_PCM_LFE_CHANNEL 4 -#define DSP_IEC958_CHANNEL 5 - -#define DSP_SPDIF_STATUS_OUTPUT_ENABLED 1 -#define DSP_SPDIF_STATUS_PLAYBACK_OPEN 2 -#define DSP_SPDIF_STATUS_HW_ENABLED 4 +#define DSP_PCM_MAIN_CHANNEL 1 +#define DSP_PCM_REAR_CHANNEL 2 +#define DSP_PCM_CENTER_LFE_CHANNEL 3 +#define DSP_PCM_S71_CHANNEL 4 /* surround 7.1 */ +#define DSP_IEC958_CHANNEL 5 + +#define DSP_SPDIF_STATUS_OUTPUT_ENABLED 1 +#define DSP_SPDIF_STATUS_PLAYBACK_OPEN 2 +#define DSP_SPDIF_STATUS_HW_ENABLED 4 +#define DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED 8 struct _dsp_module_desc_t; @@ -157,8 +158,11 @@ u16 dac_volume_right; u16 dac_volume_left; - /* Rear PCM playback mixer */ + /* Rear/surround PCM playback mixer */ dsp_scb_descriptor_t * rear_mix_scb; + + /* Center/LFE mixer */ + dsp_scb_descriptor_t * center_lfe_mix_scb; int npcm_channels; int nsrc_scb; diff -Nru a/include/sound/cs46xx_dsp_task_types.h b/include/sound/cs46xx_dsp_task_types.h --- a/include/sound/cs46xx_dsp_task_types.h Sat Apr 12 14:44:09 2003 +++ b/include/sound/cs46xx_dsp_task_types.h Sat Apr 12 14:44:09 2003 @@ -27,6 +27,8 @@ #ifndef __CS46XX_DSP_TASK_TYPES_H__ #define __CS46XX_DSP_TASK_TYPES_H__ +#include "cs46xx_dsp_scb_types.h" + /********************************************************************************************* Example hierarchy of stream control blocks in the SP @@ -54,7 +56,7 @@ #define HFG_CONTEXT_SWITCH_MODE 0x0002 #define HFG_CONTEXT_SWITCH_MODE_BIT 1 -#define MAX_FG_STACK_SIZE 32 // THESE NEED TO BE COMPUTED PROPERLY +#define MAX_FG_STACK_SIZE 32 /* THESE NEED TO BE COMPUTED PROPERLY */ #define MAX_MG_STACK_SIZE 16 #define MAX_BG_STACK_SIZE 9 #define MAX_HFG_STACK_SIZE 4 @@ -74,64 +76,84 @@ u32 r54_save; u32 r98_save; - u16 status_save; - u16 ind_save; - - u16 rci1_save; - u16 rci0_save; + ___DSP_DUAL_16BIT_ALLOC( + status_save, + ind_save + ) + + ___DSP_DUAL_16BIT_ALLOC( + rci1_save, + rci0_save + ) u32 r32_save; u32 r76_save; u32 rsd2_save; - u16 rsi2_save; /* See TaskTreeParameterBlock for + ___DSP_DUAL_16BIT_ALLOC( + rsi2_save, /* See TaskTreeParameterBlock for remainder of registers */ - u16 rsa2Save; + rsa2Save + ) /* saved as part of HFG context */ } hf_save_area_t; /* Task link data structure */ typedef struct _tree_link_t { + ___DSP_DUAL_16BIT_ALLOC( /* Pointer to sibling task control block */ - u16 next_scb; + next_scb, /* Pointer to child task control block */ - u16 sub_ptr; + sub_ptr + ) + ___DSP_DUAL_16BIT_ALLOC( /* Pointer to code entry point */ - u16 entry_point; + entry_point, /* Pointer to local data */ - u16 this_spb; + this_spb + ) } tree_link_t; typedef struct _task_tree_data_t { + ___DSP_DUAL_16BIT_ALLOC( /* Initial tock count; controls task tree execution rate */ - u16 tock_count_limit; + tock_count_limit, /* Tock down counter */ - u16 tock_count; - + tock_count + ) + /* Add to ActiveCount when TockCountLimit reached: Subtract on task tree termination */ - u16 active_tncrement; + ___DSP_DUAL_16BIT_ALLOC( + active_tncrement, /* Number of pending activations for task tree */ - u16 active_count; + active_count + ) + ___DSP_DUAL_16BIT_ALLOC( /* BitNumber to enable modification of correct bit in ActiveTaskFlags */ - u16 active_bit; + active_bit, /* Pointer to OS location for indicating current activity on task level */ - u16 active_task_flags_ptr; + active_task_flags_ptr + ) /* Data structure for controlling movement of memory blocks:- currently unused */ - u16 mem_upd_ptr; + ___DSP_DUAL_16BIT_ALLOC( + mem_upd_ptr, /* Data structure for controlling synchronous link update */ - u16 link_upd_ptr; + link_upd_ptr + ) + ___DSP_DUAL_16BIT_ALLOC( /* Save area for remainder of full context. */ - u16 save_area; + save_area, /* Address of start of local stack for data storage */ - u16 data_stack_base_ptr; + data_stack_base_ptr + ) } task_tree_data_t; @@ -140,12 +162,16 @@ typedef struct _interval_timer_data_t { /* These data items have the same relative locations to those */ - u16 interval_timer_period; - u16 itd_unused; + ___DSP_DUAL_16BIT_ALLOC( + interval_timer_period, + itd_unused + ) /* used for this data in the SPOS control block for SPOS 1.0 */ - u16 num_FG_ticks_this_interval; - u16 num_intervals; + ___DSP_DUAL_16BIT_ALLOC( + num_FG_ticks_this_interval, + num_intervals + ) } interval_timer_data_t; @@ -155,24 +181,36 @@ /* Up to 10 values are saved onto the stack. 8 for the task tree, 1 for The access to the context switch (call or interrupt), and 1 spare that users should never use. This last may be required by the system */ - u16 stack1; - u16 stack0; - u16 stack3; - u16 stack2; - u16 stack5; - u16 stack4; - u16 stack7; - u16 stack6; - u16 stack9; - u16 stack8; + ___DSP_DUAL_16BIT_ALLOC( + stack1, + stack0 + ) + ___DSP_DUAL_16BIT_ALLOC( + stack3, + stack2 + ) + ___DSP_DUAL_16BIT_ALLOC( + stack5, + stack4 + ) + ___DSP_DUAL_16BIT_ALLOC( + stack7, + stack6 + ) + ___DSP_DUAL_16BIT_ALLOC( + stack9, + stack8 + ) - u32 saverfe; + u32 saverfe; /* Value may be overwriten by stack save algorithm. Retain the size of the stack data saved here if used */ - u16 reserved1; - u16 stack_size; - u32 saverba; /* (HFG) */ + ___DSP_DUAL_16BIT_ALLOC( + reserved1, + stack_size + ) + u32 saverba; /* (HFG) */ u32 saverdc; u32 savers_config_23; /* (HFG) */ u32 savers_DMA23; /* (HFG) */ @@ -205,8 +243,8 @@ typedef struct _task_tree_control_block_t { hf_save_area_t context; - tree_link_t links; - task_tree_data_t data; + tree_link_t links; + task_tree_data_t data; task_tree_context_block_t context_blk; interval_timer_data_t int_timer; } task_tree_control_block_t; diff -Nru a/include/sound/driver.h b/include/sound/driver.h --- a/include/sound/driver.h Sat Apr 12 14:44:07 2003 +++ b/include/sound/driver.h Sat Apr 12 14:44:07 2003 @@ -27,7 +27,6 @@ #endif #include -#include #define SNDRV_CARDS 8 /* number of supported soundcards - don't change - minor numbers */ diff -Nru a/include/sound/emu10k1.h b/include/sound/emu10k1.h --- a/include/sound/emu10k1.h Sat Apr 12 14:44:07 2003 +++ b/include/sound/emu10k1.h Sat Apr 12 14:44:07 2003 @@ -49,8 +49,8 @@ #define NUM_G 64 /* use all channels */ #define NUM_FXSENDS 4 -#define EMU10K1_DMA_MASK 0x1fffffffUL -#define AUDIGY_DMA_MASK 0xffffffffUL +#define EMU10K1_DMA_MASK 0x7fffffffUL /* 31bit */ +#define AUDIGY_DMA_MASK 0xffffffffUL /* 32bit */ #define TMEMSIZE 256*1024 #define TMEMSIZEREG 4 @@ -818,9 +818,6 @@ unsigned char send_routing[3][8]; unsigned char send_volume[3][8]; unsigned short attn[3]; - snd_kcontrol_t *ctl_send_routing; - snd_kcontrol_t *ctl_send_volume; - snd_kcontrol_t *ctl_attn; emu10k1_pcm_t *epcm; } emu10k1_pcm_mixer_t; @@ -980,6 +977,9 @@ emu10k1_voice_t voices[64]; emu10k1_pcm_mixer_t pcm_mixer[32]; + snd_kcontrol_t *ctl_send_routing; + snd_kcontrol_t *ctl_send_volume; + snd_kcontrol_t *ctl_attn; void (*hwvol_interrupt)(emu10k1_t *emu, unsigned int status); void (*capture_interrupt)(emu10k1_t *emu, unsigned int status); diff -Nru a/include/sound/hdsp.h b/include/sound/hdsp.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/include/sound/hdsp.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,92 @@ +#ifndef __SOUND_HDSP_H +#define __SOUND_HDSP_H + +/* + * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org) + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#define HDSP_MATRIX_MIXER_SIZE 2048 + +typedef enum { + Digiface, + Multiface, + Undefined, +} HDSP_IO_Type; + +typedef struct _snd_hdsp_peak_rms hdsp_peak_rms_t; + +struct _snd_hdsp_peak_rms { + unsigned int playback_peaks[26]; + unsigned int input_peaks[26]; + unsigned int output_peaks[28]; + unsigned long long playback_rms[26]; + unsigned long long input_rms[26]; +}; + +#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, hdsp_peak_rms_t) + +typedef struct _snd_hdsp_config_info hdsp_config_info_t; + +struct _snd_hdsp_config_info { + unsigned char pref_sync_ref; + unsigned char wordclock_sync_check; + unsigned char spdif_sync_check; + unsigned char adatsync_sync_check; + unsigned char adat_sync_check[3]; + unsigned char spdif_in; + unsigned char spdif_out; + unsigned char spdif_professional; + unsigned char spdif_emphasis; + unsigned char spdif_nonaudio; + unsigned int spdif_sample_rate; + unsigned int system_sample_rate; + unsigned int autosync_sample_rate; + unsigned char system_clock_mode; + unsigned char clock_source; + unsigned char autosync_ref; + unsigned char line_out; + unsigned char passthru; +}; + +#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, hdsp_config_info_t) + +typedef struct _snd_hdsp_firmware hdsp_firmware_t; + +struct _snd_hdsp_firmware { + unsigned long firmware_data[24413]; +}; + +#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, hdsp_firmware_t) + +typedef struct _snd_hdsp_version hdsp_version_t; + +struct _snd_hdsp_version { + HDSP_IO_Type io_type; + unsigned short firmware_rev; +}; + +#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, hdsp_version_t) + +typedef struct _snd_hdsp_mixer hdsp_mixer_t; + +struct _snd_hdsp_mixer { + unsigned short matrix[HDSP_MATRIX_MIXER_SIZE]; +}; + +#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, hdsp_mixer_t) + +#endif /* __SOUND_HDSP_H */ diff -Nru a/include/sound/initval.h b/include/sound/initval.h --- a/include/sound/initval.h Sat Apr 12 14:44:06 2003 +++ b/include/sound/initval.h Sat Apr 12 14:44:06 2003 @@ -25,7 +25,7 @@ #ifdef MODULE #define MODULE_GENERIC_STRING(name, string) \ static const char __module_generic_string_##name [] \ - __attribute__ ((section(".modstring"))) = #name "=" string; + __attribute__ ((unused, __section__(".modstring"))) = #name "=" string; #else #define MODULE_GENERIC_STRING(name, string) #endif diff -Nru a/include/sound/memalloc.h b/include/sound/memalloc.h --- a/include/sound/memalloc.h Sat Apr 12 14:44:06 2003 +++ b/include/sound/memalloc.h Sat Apr 12 14:44:06 2003 @@ -174,20 +174,4 @@ } #endif /* CONFIG_PCI */ - -/* - * wrappers - */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) -#ifdef CONFIG_PCI -#if defined(__i386__) || defined(__ppc__) || defined(__x86_64__) -#define HACK_PCI_ALLOC_CONSISTENT -/* a hack for 2.4/5 kernels for better allocation of large buffers */ -void *snd_pci_hack_alloc_consistent(struct pci_dev *hwdev, size_t size, - dma_addr_t *dma_handle); -#endif /* arch */ -#endif /* CONFIG_PCI */ -#endif /* LINUX >= 2.4.0 */ - - #endif /* __SOUND_MEMALLOC_H */ diff -Nru a/include/sound/opl3.h b/include/sound/opl3.h --- a/include/sound/opl3.h Sat Apr 12 14:44:06 2003 +++ b/include/sound/opl3.h Sat Apr 12 14:44:06 2003 @@ -230,7 +230,8 @@ #define OPL3_HW_OPL3_FM801 0x0303 /* FM801 */ #define OPL3_HW_OPL3_CS4281 0x0304 /* CS4281 */ #define OPL3_HW_OPL3_PC98 0x0305 /* PC9800 */ -#define OPL3_HW_OPL4 0x0400 +#define OPL3_HW_OPL4 0x0400 /* YMF278B/YMF295 */ +#define OPL3_HW_OPL4_ML 0x0401 /* YMF704/YMF721 */ #define OPL3_HW_MASK 0xff00 #define MAX_OPL2_VOICES 9 diff -Nru a/include/sound/snd_wavefront.h b/include/sound/snd_wavefront.h --- a/include/sound/snd_wavefront.h Sat Apr 12 14:44:06 2003 +++ b/include/sound/snd_wavefront.h Sat Apr 12 14:44:06 2003 @@ -98,12 +98,12 @@ struct _snd_wavefront_card { snd_wavefront_t wavefront; -#ifdef __ISAPNP__ - struct isapnp_dev *wss; - struct isapnp_dev *ctrl; - struct isapnp_dev *mpu; - struct isapnp_dev *synth; -#endif /* CONFIG_ISAPNP */ +#ifdef CONFIG_PNP + struct pnp_dev *wss; + struct pnp_dev *ctrl; + struct pnp_dev *mpu; + struct pnp_dev *synth; +#endif /* CONFIG_PNP */ }; extern void snd_wavefront_internal_interrupt (snd_wavefront_card_t *card); diff -Nru a/include/sound/trident.h b/include/sound/trident.h --- a/include/sound/trident.h Sat Apr 12 14:44:08 2003 +++ b/include/sound/trident.h Sat Apr 12 14:44:08 2003 @@ -403,10 +403,6 @@ unsigned char rvol; /* rear volume */ unsigned char cvol; /* center volume */ unsigned char pad; - snd_kcontrol_t *ctl_vol; /* front volume */ - snd_kcontrol_t *ctl_pan; /* pan */ - snd_kcontrol_t *ctl_rvol; /* rear volume */ - snd_kcontrol_t *ctl_cvol; /* center volume */ }; struct _snd_trident { @@ -458,6 +454,10 @@ unsigned int musicvol_wavevol; snd_trident_pcm_mixer_t pcm_mixer[32]; + snd_kcontrol_t *ctl_vol; /* front volume */ + snd_kcontrol_t *ctl_pan; /* pan */ + snd_kcontrol_t *ctl_rvol; /* rear volume */ + snd_kcontrol_t *ctl_cvol; /* center volume */ spinlock_t reg_lock; diff -Nru a/include/sound/ymfpci.h b/include/sound/ymfpci.h --- a/include/sound/ymfpci.h Sat Apr 12 14:44:07 2003 +++ b/include/sound/ymfpci.h Sat Apr 12 14:44:07 2003 @@ -174,6 +174,28 @@ #define YDSXG_CAPTURE_VOICES 2 #define YDSXG_EFFECT_VOICES 5 +#define YMFPCI_LEGACY_SBEN (1 << 0) /* soundblaster enable */ +#define YMFPCI_LEGACY_FMEN (1 << 1) /* OPL3 enable */ +#define YMFPCI_LEGACY_JPEN (1 << 2) /* joystick enable */ +#define YMFPCI_LEGACY_MEN (1 << 3) /* MPU401 enable */ +#define YMFPCI_LEGACY_MIEN (1 << 4) /* MPU RX irq enable */ +#define YMFPCI_LEGACY_IOBITS (1 << 5) /* i/o bits range, 0 = 16bit, 1 =10bit */ +#define YMFPCI_LEGACY_SDMA (3 << 6) /* SB DMA select */ +#define YMFPCI_LEGACY_SBIRQ (7 << 8) /* SB IRQ select */ +#define YMFPCI_LEGACY_MPUIRQ (7 << 11) /* MPU IRQ select */ +#define YMFPCI_LEGACY_SIEN (1 << 14) /* serialized IRQ */ +#define YMFPCI_LEGACY_LAD (1 << 15) /* legacy audio disable */ + +#define YMFPCI_LEGACY2_FMIO (3 << 0) /* OPL3 i/o address (724/740) */ +#define YMFPCI_LEGACY2_SBIO (3 << 2) /* SB i/o address (724/740) */ +#define YMFPCI_LEGACY2_MPUIO (3 << 4) /* MPU401 i/o address (724/740) */ +#define YMFPCI_LEGACY2_JSIO (3 << 6) /* joystick i/o address (724/740) */ +#define YMFPCI_LEGACY2_MAIM (1 << 8) /* MPU401 ack intr mask */ +#define YMFPCI_LEGACY2_SMOD (3 << 11) /* SB DMA mode */ +#define YMFPCI_LEGACY2_SBVER (3 << 13) /* SB version select */ +#define YMFPCI_LEGACY2_IMOD (1 << 15) /* legacy IRQ mode */ +/* SIEN:IMOD 0:0 = legacy irq, 0:1 = INTA, 1:0 = serialized IRQ */ + /* * */ @@ -283,6 +305,8 @@ unsigned long reg_area_phys; unsigned long reg_area_virt; struct resource *res_reg_area; + struct resource *fm_res; + struct resource *mpu_res; unsigned short old_legacy_ctrl; unsigned int joystick_port; diff -Nru a/init/main.c b/init/main.c --- a/init/main.c Sat Apr 12 14:44:06 2003 +++ b/init/main.c Sat Apr 12 14:44:06 2003 @@ -60,7 +60,7 @@ * To avoid associated bogus bug reports, we flatly refuse to compile * with a gcc that is known to be too old from the very beginning. */ -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 91) +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 95) #error Sorry, your GCC is too old. It builds incorrect kernels. #endif diff -Nru a/kernel/futex.c b/kernel/futex.c --- a/kernel/futex.c Sat Apr 12 14:44:07 2003 +++ b/kernel/futex.c Sat Apr 12 14:44:07 2003 @@ -448,7 +448,7 @@ return ret; } -asmlinkage long sys_futex(u32 *uaddr, int op, int val, struct timespec *utime) +asmlinkage long sys_futex(u32 __user *uaddr, int op, int val, struct timespec __user *utime) { struct timespec t; unsigned long timeout = MAX_SCHEDULE_TIMEOUT; diff -Nru a/kernel/itimer.c b/kernel/itimer.c --- a/kernel/itimer.c Sat Apr 12 14:44:07 2003 +++ b/kernel/itimer.c Sat Apr 12 14:44:07 2003 @@ -48,7 +48,7 @@ } /* SMP: Only we modify our itimer values. */ -asmlinkage long sys_getitimer(int which, struct itimerval *value) +asmlinkage long sys_getitimer(int which, struct itimerval __user *value) { int error = -EFAULT; struct itimerval get_buffer; @@ -120,8 +120,9 @@ /* SMP: Again, only we play with our itimers, and signals are SMP safe * now so that is not an issue at all anymore. */ -asmlinkage long sys_setitimer(int which, struct itimerval *value, - struct itimerval *ovalue) +asmlinkage long sys_setitimer(int which, + struct itimerval __user *value, + struct itimerval __user *ovalue) { struct itimerval set_buffer, get_buffer; int error; diff -Nru a/kernel/module.c b/kernel/module.c --- a/kernel/module.c Sat Apr 12 14:44:09 2003 +++ b/kernel/module.c Sat Apr 12 14:44:09 2003 @@ -462,7 +462,7 @@ EXPORT_SYMBOL(cleanup_module); asmlinkage long -sys_delete_module(const char *name_user, unsigned int flags) +sys_delete_module(const char __user *name_user, unsigned int flags) { struct module *mod; char name[MODULE_NAME_LEN]; @@ -670,7 +670,7 @@ return 0; } -extern int set_obsolete(const char *val, struct kernel_param *kp) +int set_obsolete(const char *val, struct kernel_param *kp) { unsigned int min, max; unsigned int size, maxsize; @@ -1082,9 +1082,9 @@ /* Allocate and load the module: note that size of section 0 is always zero, and we rely on this for optional sections. */ -static struct module *load_module(void *umod, +static struct module *load_module(void __user *umod, unsigned long len, - const char *uargs) + const char __user *uargs) { Elf_Ehdr *hdr; Elf_Shdr *sechdrs; @@ -1360,9 +1360,9 @@ /* This is where the real work happens */ asmlinkage long -sys_init_module(void *umod, +sys_init_module(void __user *umod, unsigned long len, - const char *uargs) + const char __user *uargs) { struct module *mod; int ret; diff -Nru a/kernel/panic.c b/kernel/panic.c --- a/kernel/panic.c Sat Apr 12 14:44:10 2003 +++ b/kernel/panic.c Sat Apr 12 14:44:10 2003 @@ -20,6 +20,8 @@ asmlinkage void sys_sync(void); /* it's really int */ int panic_timeout; +int panic_on_oops; +int tainted; struct notifier_block *panic_notifier_list; @@ -28,7 +30,6 @@ panic_timeout = simple_strtoul(str, NULL, 0); return 1; } - __setup("panic=", panic_setup); /** @@ -51,7 +52,7 @@ bust_spinlocks(1); va_start(args, fmt); - vsprintf(buf, fmt, args); + vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); printk(KERN_EMERG "Kernel panic: %s\n",buf); if (in_interrupt()) @@ -123,5 +124,3 @@ snprintf(buf, sizeof(buf), "Not tainted"); return(buf); } - -int tainted = 0; diff -Nru a/kernel/posix-timers.c b/kernel/posix-timers.c --- a/kernel/posix-timers.c Sat Apr 12 14:44:08 2003 +++ b/kernel/posix-timers.c Sat Apr 12 14:44:08 2003 @@ -341,7 +341,7 @@ * Here we define a mask to get rid of the common bits. The * optimizer should make this costless to all but mips. */ -#if (ARCH == mips) || (ARCH == mips64) +#if defined(ARCH) && ((ARCH == mips) || (ARCH == mips64)) #define MIPS_SIGEV ~(SIGEV_NONE & \ SIGEV_SIGNAL & \ SIGEV_THREAD & \ @@ -402,7 +402,8 @@ asmlinkage long sys_timer_create(clockid_t which_clock, - struct sigevent *timer_event_spec, timer_t * created_timer_id) + struct sigevent __user *timer_event_spec, + timer_t __user * created_timer_id) { int error = 0; struct k_itimer *new_timer = NULL; @@ -623,7 +624,7 @@ /* Get the time remaining on a POSIX.1b interval timer. */ asmlinkage long -sys_timer_gettime(timer_t timer_id, struct itimerspec *setting) +sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting) { struct k_itimer *timr; struct itimerspec cur_setting; @@ -801,8 +802,8 @@ /* Set a POSIX.1b interval timer */ asmlinkage long sys_timer_settime(timer_t timer_id, int flags, - const struct itimerspec *new_setting, - struct itimerspec *old_setting) + const struct itimerspec __user *new_setting, + struct itimerspec __user *old_setting) { struct k_itimer *timr; struct itimerspec new_spec, old_spec; @@ -985,7 +986,7 @@ } asmlinkage long -sys_clock_settime(clockid_t which_clock, const struct timespec *tp) +sys_clock_settime(clockid_t which_clock, const struct timespec __user *tp) { struct timespec new_tp; @@ -1002,7 +1003,7 @@ } asmlinkage long -sys_clock_gettime(clockid_t which_clock, struct timespec *tp) +sys_clock_gettime(clockid_t which_clock, struct timespec __user *tp) { struct timespec rtn_tp; int error = 0; @@ -1021,7 +1022,7 @@ } asmlinkage long -sys_clock_getres(clockid_t which_clock, struct timespec *tp) +sys_clock_getres(clockid_t which_clock, struct timespec __user *tp) { struct timespec rtn_tp; @@ -1074,7 +1075,7 @@ #ifdef FOLD_NANO_SLEEP_INTO_CLOCK_NANO_SLEEP asmlinkage long -sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp) +sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp) { struct timespec t; long ret; @@ -1096,7 +1097,8 @@ asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags, - const struct timespec *rqtp, struct timespec *rmtp) + const struct timespec __user *rqtp, + struct timespec __user *rmtp) { struct timespec t; int ret; @@ -1218,7 +1220,7 @@ int ret = do_clock_nanosleep(restart_block->arg0, 0, &t); if ((ret == -ERESTART_RESTARTBLOCK) && restart_block->arg1 && - copy_to_user((struct timespec *)(restart_block->arg1), &t, + copy_to_user((struct timespec __user *)(restart_block->arg1), &t, sizeof (t))) return -EFAULT; return ret; diff -Nru a/kernel/printk.c b/kernel/printk.c --- a/kernel/printk.c Sat Apr 12 14:44:10 2003 +++ b/kernel/printk.c Sat Apr 12 14:44:10 2003 @@ -155,7 +155,7 @@ * 8 -- Set level of messages printed to console * 9 -- Return number of unread characters in the log buffer */ -int do_syslog(int type, char * buf, int len) +int do_syslog(int type, char __user * buf, int len) { unsigned long i, j, limit, count; int do_clear = 0; @@ -276,7 +276,7 @@ return error; } -asmlinkage long sys_syslog(int type, char * buf, int len) +asmlinkage long sys_syslog(int type, char __user * buf, int len) { return do_syslog(type, buf, len); } diff -Nru a/kernel/ptrace.c b/kernel/ptrace.c --- a/kernel/ptrace.c Sat Apr 12 14:44:10 2003 +++ b/kernel/ptrace.c Sat Apr 12 14:44:10 2003 @@ -200,7 +200,7 @@ return buf - old_buf; } -int ptrace_readdata(struct task_struct *tsk, unsigned long src, char *dst, int len) +int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len) { int copied = 0; @@ -225,7 +225,7 @@ return copied; } -int ptrace_writedata(struct task_struct *tsk, char * src, unsigned long dst, int len) +int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len) { int copied = 0; @@ -278,19 +278,18 @@ return (data & ~PTRACE_O_MASK) ? -EINVAL : 0; } -static int ptrace_getsiginfo(struct task_struct *child, long data) +static int ptrace_getsiginfo(struct task_struct *child, siginfo_t __user * data) { if (child->last_siginfo == NULL) return -EINVAL; - return copy_siginfo_to_user ((siginfo_t *) data, child->last_siginfo); + return copy_siginfo_to_user(data, child->last_siginfo); } -static int ptrace_setsiginfo(struct task_struct *child, long data) +static int ptrace_setsiginfo(struct task_struct *child, siginfo_t __user * data) { if (child->last_siginfo == NULL) return -EINVAL; - if (copy_from_user (child->last_siginfo, (siginfo_t *) data, - sizeof (siginfo_t)) != 0) + if (copy_from_user(child->last_siginfo, data, sizeof (siginfo_t)) != 0) return -EFAULT; return 0; } @@ -308,13 +307,13 @@ ret = ptrace_setoptions(child, data); break; case PTRACE_GETEVENTMSG: - ret = put_user(child->ptrace_message, (unsigned long *) data); + ret = put_user(child->ptrace_message, (unsigned long __user *) data); break; case PTRACE_GETSIGINFO: - ret = ptrace_getsiginfo(child, data); + ret = ptrace_getsiginfo(child, (siginfo_t __user *) data); break; case PTRACE_SETSIGINFO: - ret = ptrace_setsiginfo(child, data); + ret = ptrace_setsiginfo(child, (siginfo_t __user *) data); break; default: break; diff -Nru a/kernel/sched.c b/kernel/sched.c --- a/kernel/sched.c Sat Apr 12 14:44:09 2003 +++ b/kernel/sched.c Sat Apr 12 14:44:09 2003 @@ -1711,7 +1711,7 @@ /* * setscheduler - change the scheduling policy and/or RT priority of a thread. */ -static int setscheduler(pid_t pid, int policy, struct sched_param *param) +static int setscheduler(pid_t pid, int policy, struct sched_param __user *param) { struct sched_param lp; int retval = -EINVAL; @@ -1804,7 +1804,7 @@ * @param: structure containing the new RT priority. */ asmlinkage long sys_sched_setscheduler(pid_t pid, int policy, - struct sched_param *param) + struct sched_param __user *param) { return setscheduler(pid, policy, param); } @@ -1814,7 +1814,7 @@ * @pid: the pid in question. * @param: structure containing the new RT priority. */ -asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param *param) +asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param) { return setscheduler(pid, -1, param); } @@ -1850,7 +1850,7 @@ * @pid: the pid in question. * @param: structure containing the RT priority. */ -asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param *param) +asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param __user *param) { struct sched_param lp; int retval = -EINVAL; @@ -1892,7 +1892,7 @@ * @user_mask_ptr: user-space pointer to the new cpu mask */ asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, - unsigned long *user_mask_ptr) + unsigned long __user *user_mask_ptr) { unsigned long new_mask; int retval; @@ -1944,7 +1944,7 @@ * @user_mask_ptr: user-space pointer to hold the current cpu mask */ asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, - unsigned long *user_mask_ptr) + unsigned long __user *user_mask_ptr) { unsigned int real_len; unsigned long mask; @@ -2110,7 +2110,7 @@ * this syscall writes the default timeslice value of a given process * into the user-space timespec buffer. A value of '0' means infinity. */ -asmlinkage long sys_sched_rr_get_interval(pid_t pid, struct timespec *interval) +asmlinkage long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval) { int retval = -EINVAL; struct timespec t; @@ -2343,7 +2343,8 @@ */ static int migration_thread(void * data) { - struct sched_param param = { .sched_priority = MAX_RT_PRIO-1 }; + /* Marking "param" __user is ok, since we do a set_fs(KERNEL_DS); */ + struct sched_param __user param = { .sched_priority = MAX_RT_PRIO-1 }; int cpu = (long) data; runqueue_t *rq; int ret; diff -Nru a/kernel/signal.c b/kernel/signal.c --- a/kernel/signal.c Sat Apr 12 14:44:07 2003 +++ b/kernel/signal.c Sat Apr 12 14:44:07 2003 @@ -1720,7 +1720,7 @@ } asmlinkage long -sys_rt_sigprocmask(int how, sigset_t *set, sigset_t *oset, size_t sigsetsize) +sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize) { int error = -EINVAL; sigset_t old_set, new_set; @@ -1755,7 +1755,7 @@ return error; } -long do_sigpending(void *set, unsigned long sigsetsize) +long do_sigpending(void __user *set, unsigned long sigsetsize) { long error = -EINVAL; sigset_t pending; @@ -1780,14 +1780,14 @@ } asmlinkage long -sys_rt_sigpending(sigset_t *set, size_t sigsetsize) +sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize) { return do_sigpending(set, sigsetsize); } #ifndef HAVE_ARCH_COPY_SIGINFO_TO_USER -int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from) +int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from) { int err; @@ -1850,8 +1850,10 @@ #endif asmlinkage long -sys_rt_sigtimedwait(const sigset_t *uthese, siginfo_t *uinfo, - const struct timespec *uts, size_t sigsetsize) +sys_rt_sigtimedwait(const sigset_t __user *uthese, + siginfo_t __user *uinfo, + const struct timespec __user *uts, + size_t sigsetsize) { int ret, sig; sigset_t these; @@ -1980,7 +1982,7 @@ } asmlinkage long -sys_rt_sigqueueinfo(int pid, int sig, siginfo_t *uinfo) +sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo) { siginfo_t info; @@ -2069,7 +2071,7 @@ } int -do_sigaltstack (const stack_t *uss, stack_t *uoss, unsigned long sp) +do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long sp) { stack_t oss; int error; @@ -2133,7 +2135,7 @@ } asmlinkage long -sys_sigpending(old_sigset_t *set) +sys_sigpending(old_sigset_t __user *set) { return do_sigpending(set, sizeof(*set)); } @@ -2142,7 +2144,7 @@ /* Alpha has its own versions with special arguments. */ asmlinkage long -sys_sigprocmask(int how, old_sigset_t *set, old_sigset_t *oset) +sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset) { int error; old_sigset_t old_set, new_set; @@ -2192,7 +2194,9 @@ #ifndef __sparc__ asmlinkage long -sys_rt_sigaction(int sig, const struct sigaction *act, struct sigaction *oact, +sys_rt_sigaction(int sig, + const struct sigaction __user *act, + struct sigaction __user *oact, size_t sigsetsize) { struct k_sigaction new_sa, old_sa; diff -Nru a/kernel/softirq.c b/kernel/softirq.c --- a/kernel/softirq.c Sat Apr 12 14:44:06 2003 +++ b/kernel/softirq.c Sat Apr 12 14:44:06 2003 @@ -51,7 +51,7 @@ wake_up_process(tsk); } -asmlinkage void do_softirq() +asmlinkage void do_softirq(void) { __u32 pending; unsigned long flags; @@ -296,7 +296,7 @@ .next = NULL, }; -void __init softirq_init() +void __init softirq_init(void) { open_softirq(TASKLET_SOFTIRQ, tasklet_action, NULL); open_softirq(HI_SOFTIRQ, tasklet_hi_action, NULL); diff -Nru a/kernel/sys.c b/kernel/sys.c --- a/kernel/sys.c Sat Apr 12 14:44:06 2003 +++ b/kernel/sys.c Sat Apr 12 14:44:06 2003 @@ -377,7 +377,7 @@ * * reboot doesn't sync: do that yourself before calling this. */ -asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void * arg) +asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user * arg) { char buffer[256]; @@ -430,7 +430,7 @@ break; case LINUX_REBOOT_CMD_RESTART2: - if (strncpy_from_user(&buffer[0], (char *)arg, sizeof(buffer) - 1) < 0) { + if (strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1) < 0) { unlock_kernel(); return -EFAULT; } @@ -877,7 +877,7 @@ return old_fsgid; } -asmlinkage long sys_times(struct tms * tbuf) +asmlinkage long sys_times(struct tms __user * tbuf) { /* * In the SMP world we might just be unlucky and have one of @@ -1058,7 +1058,7 @@ /* * Supplementary group IDs */ -asmlinkage long sys_getgroups(int gidsetsize, gid_t *grouplist) +asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist) { int i; @@ -1084,7 +1084,7 @@ * without another task interfering. */ -asmlinkage long sys_setgroups(int gidsetsize, gid_t *grouplist) +asmlinkage long sys_setgroups(int gidsetsize, gid_t __user *grouplist) { gid_t groups[NGROUPS]; int retval; @@ -1093,7 +1093,7 @@ return -EPERM; if ((unsigned) gidsetsize > NGROUPS) return -EINVAL; - if(copy_from_user(groups, grouplist, gidsetsize * sizeof(gid_t))) + if (copy_from_user(groups, grouplist, gidsetsize * sizeof(gid_t))) return -EFAULT; retval = security_task_setgroups(gidsetsize, groups); if (retval) @@ -1140,7 +1140,7 @@ DECLARE_RWSEM(uts_sem); -asmlinkage long sys_newuname(struct new_utsname * name) +asmlinkage long sys_newuname(struct new_utsname __user * name) { int errno = 0; @@ -1151,7 +1151,7 @@ return errno; } -asmlinkage long sys_sethostname(char *name, int len) +asmlinkage long sys_sethostname(char __user *name, int len) { int errno; @@ -1169,7 +1169,7 @@ return errno; } -asmlinkage long sys_gethostname(char *name, int len) +asmlinkage long sys_gethostname(char __user *name, int len) { int i, errno; @@ -1190,7 +1190,7 @@ * Only setdomainname; getdomainname can be implemented by calling * uname() */ -asmlinkage long sys_setdomainname(char *name, int len) +asmlinkage long sys_setdomainname(char __user *name, int len) { int errno; @@ -1209,7 +1209,7 @@ return errno; } -asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit *rlim) +asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim) { if (resource >= RLIM_NLIMITS) return -EINVAL; @@ -1224,7 +1224,7 @@ * Back compatibility for getrlimit. Needed for some apps. */ -asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit *rlim) +asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *rlim) { struct rlimit x; if (resource >= RLIM_NLIMITS) @@ -1240,7 +1240,7 @@ #endif -asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit *rlim) +asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim) { struct rlimit new_rlim, *old_rlim; int retval; @@ -1286,7 +1286,7 @@ * * FIXME! Get the fault counts properly! */ -int getrusage(struct task_struct *p, int who, struct rusage *ru) +int getrusage(struct task_struct *p, int who, struct rusage __user *ru) { struct rusage r; @@ -1317,7 +1317,7 @@ return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0; } -asmlinkage long sys_getrusage(int who, struct rusage *ru) +asmlinkage long sys_getrusage(int who, struct rusage __user *ru) { if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN) return -EINVAL; @@ -1350,7 +1350,7 @@ current->pdeath_signal = sig; break; case PR_GET_PDEATHSIG: - error = put_user(current->pdeath_signal, (int *)arg2); + error = put_user(current->pdeath_signal, (int __user *)arg2); break; case PR_GET_DUMPABLE: if (current->mm->dumpable) diff -Nru a/kernel/sysctl.c b/kernel/sysctl.c --- a/kernel/sysctl.c Sat Apr 12 14:44:06 2003 +++ b/kernel/sysctl.c Sat Apr 12 14:44:06 2003 @@ -263,6 +263,8 @@ #endif {KERN_PIDMAX, "pid_max", &pid_max, sizeof (int), 0600, NULL, &proc_dointvec}, + {KERN_PANIC_ON_OOPS,"panic_on_oops", + &panic_on_oops,sizeof(int),0644,NULL,&proc_dointvec}, {0} }; @@ -401,7 +403,7 @@ return -ENOTDIR; } -extern asmlinkage long sys_sysctl(struct __sysctl_args *args) +asmlinkage long sys_sysctl(struct __sysctl_args __user *args) { struct __sysctl_args tmp; int error; @@ -442,8 +444,8 @@ } static int parse_table(int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, ctl_table *table, void **context) { int n; @@ -483,8 +485,8 @@ /* Perform the actual read/write of a sysctl table entry. */ int do_sysctl_strategy (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, void **context) + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, void **context) { int op = 0, rc; size_t len; @@ -785,10 +787,11 @@ * Returns 0 on success. */ int proc_dostring(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { size_t len; - char *p, c; + char __user *p; + char c; if (!table->data || !table->maxlen || !*lenp || (filp->f_pos && !write)) { @@ -838,7 +841,7 @@ */ static int proc_doutsstring(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { int r; @@ -861,7 +864,7 @@ #define OP_MIN 4 static int do_proc_dointvec(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp, int conv, int op) + void __user *buffer, size_t *lenp, int conv, int op) { int *i, vleft, first=1, neg, val; size_t left, len; @@ -883,12 +886,12 @@ if (write) { while (left) { char c; - if(get_user(c,(char *) buffer)) + if (get_user(c,(char __user *) buffer)) return -EFAULT; if (!isspace(c)) break; left--; - ((char *) buffer)++; + buffer++; } if (!left) break; @@ -977,7 +980,7 @@ * Returns 0 on success. */ int proc_dointvec(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { return do_proc_dointvec(table,write,filp,buffer,lenp,1,OP_SET); } @@ -987,7 +990,7 @@ */ int proc_dointvec_bset(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { if (!capable(CAP_SYS_MODULE)) { return -EPERM; @@ -1013,7 +1016,7 @@ * Returns 0 on success. */ int proc_dointvec_minmax(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { int *i, *min, *max, vleft, first=1, neg, val; size_t len, left; @@ -1041,7 +1044,7 @@ if (!isspace(c)) break; left--; - ((char *) buffer)++; + buffer++; } if (!left) break; @@ -1111,7 +1114,7 @@ static int do_proc_doulongvec_minmax(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp, + void __user *buffer, size_t *lenp, unsigned long convmul, unsigned long convdiv) { @@ -1137,12 +1140,12 @@ if (write) { while (left) { char c; - if(get_user(c, (char *) buffer)) + if (get_user(c, (char __user *) buffer)) return -EFAULT; if (!isspace(c)) break; left--; - ((char *) buffer)++; + buffer++; } if (!left) break; @@ -1150,7 +1153,7 @@ len = left; if (len > TMPBUFLEN-1) len = TMPBUFLEN-1; - if(copy_from_user(buf, buffer, len)) + if (copy_from_user(buf, buffer, len)) return -EFAULT; buf[len] = 0; p = buf; @@ -1230,7 +1233,7 @@ * Returns 0 on success. */ int proc_doulongvec_minmax(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { return do_proc_doulongvec_minmax(table, write, filp, buffer, lenp, 1l, 1l); } @@ -1254,7 +1257,7 @@ */ int proc_doulongvec_ms_jiffies_minmax(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { return do_proc_doulongvec_minmax(table, write, filp, buffer, lenp, HZ, 1000l); @@ -1277,7 +1280,7 @@ * Returns 0 on success. */ int proc_dointvec_jiffies(ctl_table *table, int write, struct file *filp, - void *buffer, size_t *lenp) + void __user *buffer, size_t *lenp) { return do_proc_dointvec(table,write,filp,buffer,lenp,HZ,OP_SET); } @@ -1343,8 +1346,8 @@ /* The generic string strategy routine: */ int sysctl_string(ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, void **context) + void __user *oldval, size_t __user *oldlenp, + void __user *newval, size_t newlen, void **context) { size_t l, len; @@ -1451,7 +1454,7 @@ #else /* CONFIG_SYSCTL */ -extern asmlinkage long sys_sysctl(struct __sysctl_args *args) +extern asmlinkage long sys_sysctl(struct __sysctl_args __user *args) { return -ENOSYS; } diff -Nru a/kernel/time.c b/kernel/time.c --- a/kernel/time.c Sat Apr 12 14:44:06 2003 +++ b/kernel/time.c Sat Apr 12 14:44:06 2003 @@ -90,7 +90,7 @@ #endif -asmlinkage long sys_gettimeofday(struct timeval *tv, struct timezone *tz) +asmlinkage long sys_gettimeofday(struct timeval __user *tv, struct timezone __user *tz) { if (likely(tv != NULL)) { struct timeval ktv; @@ -166,7 +166,7 @@ return 0; } -asmlinkage long sys_settimeofday(struct timeval *tv, struct timezone *tz) +asmlinkage long sys_settimeofday(struct timeval __user *tv, struct timezone __user *tz) { struct timeval new_tv; struct timezone new_tz; @@ -387,7 +387,7 @@ return(result); } -asmlinkage long sys_adjtimex(struct timex *txc_p) +asmlinkage long sys_adjtimex(struct timex __user *txc_p) { struct timex txc; /* Local copy of parameter */ int ret; diff -Nru a/kernel/timer.c b/kernel/timer.c --- a/kernel/timer.c Sat Apr 12 14:44:09 2003 +++ b/kernel/timer.c Sat Apr 12 14:44:09 2003 @@ -397,7 +397,8 @@ spin_lock_irq(&base->lock); while (time_after_eq(jiffies, base->timer_jiffies)) { - struct list_head *head; + struct list_head work_list = LIST_HEAD_INIT(work_list); + struct list_head *head = &work_list; int index = base->timer_jiffies & TVR_MASK; /* @@ -409,8 +410,8 @@ !cascade(base, &base->tv4, INDEX(2))) cascade(base, &base->tv5, INDEX(3)); ++base->timer_jiffies; + list_splice_init(base->tv1.vec + index, &work_list); repeat: - head = base->tv1.vec + index; if (!list_empty(head)) { void (*fn)(unsigned long); unsigned long data; @@ -1091,7 +1092,7 @@ /* * sys_sysinfo - fill in sysinfo struct */ -asmlinkage long sys_sysinfo(struct sysinfo *info) +asmlinkage long sys_sysinfo(struct sysinfo __user *info) { struct sysinfo val; u64 uptime; diff -Nru a/kernel/uid16.c b/kernel/uid16.c --- a/kernel/uid16.c Sat Apr 12 14:44:08 2003 +++ b/kernel/uid16.c Sat Apr 12 14:44:08 2003 @@ -107,7 +107,7 @@ return sys_setfsgid((gid_t)gid); } -asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t *grouplist) +asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist) { old_gid_t groups[NGROUPS]; int i,j; @@ -126,7 +126,7 @@ return i; } -asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t *grouplist) +asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist) { old_gid_t groups[NGROUPS]; gid_t new_groups[NGROUPS]; diff -Nru a/lib/kobject.c b/lib/kobject.c --- a/lib/kobject.c Sat Apr 12 14:44:09 2003 +++ b/lib/kobject.c Sat Apr 12 14:44:09 2003 @@ -11,14 +11,6 @@ static spinlock_t kobj_lock = SPIN_LOCK_UNLOCKED; -static inline struct kobj_type * get_ktype(struct kobject * k) -{ - if (k->kset && k->kset->ktype) - return k->kset->ktype; - else - return k->ktype; -} - /** * populate_dir - populate directory with attributes. * @kobj: object we're working on. @@ -67,6 +59,140 @@ } +#ifdef CONFIG_HOTPLUG +static int get_kobj_path_length(struct kset *kset, struct kobject *kobj) +{ + int length = 1; + struct kobject * parent = kobj; + + /* walk up the ancestors until we hit the one pointing to the + * root. + * Add 1 to strlen for leading '/' of each level. + */ + do { + length += strlen (parent->name) + 1; + parent = parent->parent; + } while (parent); + return length; +} + +static void fill_kobj_path(struct kset *kset, struct kobject *kobj, char *path, int length) +{ + struct kobject * parent; + + --length; + for (parent = kobj; parent; parent = parent->parent) { + int cur = strlen (parent->name); + /* back up enough to print this name with '/' */ + length -= cur; + strncpy (path + length, parent->name, cur); + *(path + --length) = '/'; + } + + pr_debug("%s: path = '%s'\n",__FUNCTION__,path); +} + +#define BUFFER_SIZE 1024 /* should be enough memory for the env */ +#define NUM_ENVP 32 /* number of env pointers */ +static void kset_hotplug(const char *action, struct kset *kset, + struct kobject *kobj) +{ + char *argv [3]; + char **envp; + char *buffer; + char *scratch; + int i = 0; + int retval; + int kobj_path_length; + char *kobj_path; + char *name = NULL; + + /* If the kset has a filter operation, call it. If it returns + failure, no hotplug event is required. */ + if (kset->hotplug_ops->filter) { + if (!kset->hotplug_ops->filter(kset, kobj)) + return; + } + + pr_debug ("%s\n", __FUNCTION__); + + if (!hotplug_path[0]) + return; + + envp = (char **)kmalloc(NUM_ENVP * sizeof (char *), GFP_KERNEL); + if (!envp) + return; + memset (envp, 0x00, NUM_ENVP * sizeof (char *)); + + buffer = kmalloc(BUFFER_SIZE, GFP_KERNEL); + if (!buffer) { + kfree(envp); + return; + } + + if (kset->hotplug_ops->name) + name = kset->hotplug_ops->name(kset, kobj); + if (name == NULL) + name = kset->kobj.name; + + argv [0] = hotplug_path; + argv [1] = name; + argv [2] = 0; + + /* minimal command environment */ + envp [i++] = "HOME=/"; + envp [i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; + + scratch = buffer; + + envp [i++] = scratch; + scratch += sprintf(scratch, "ACTION=%s", action) + 1; + + kobj_path_length = get_kobj_path_length (kset, kobj); + kobj_path = kmalloc (kobj_path_length, GFP_KERNEL); + if (!kobj_path) { + kfree (buffer); + kfree (envp); + return; + } + memset (kobj_path, 0x00, kobj_path_length); + fill_kobj_path (kset, kobj, kobj_path, kobj_path_length); + + envp [i++] = scratch; + scratch += sprintf (scratch, "DEVPATH=%s", kobj_path) + 1; + + if (kset->hotplug_ops->hotplug) { + /* have the kset specific function add its stuff */ + retval = kset->hotplug_ops->hotplug (kset, kobj, + &envp[i], NUM_ENVP - i, scratch, + BUFFER_SIZE - (scratch - buffer)); + if (retval) { + pr_debug ("%s - hotplug() returned %d\n", + __FUNCTION__, retval); + goto exit; + } + } + + pr_debug ("%s: %s %s %s %s %s %s\n", __FUNCTION__, argv[0], argv[1], + envp[0], envp[1], envp[2], envp[3]); + retval = call_usermodehelper (argv[0], argv, envp, 0); + if (retval) + pr_debug ("%s - call_usermodehelper returned %d\n", + __FUNCTION__, retval); + +exit: + kfree (kobj_path); + kfree (buffer); + return; +} +#else +static void kset_hotplug(const char *action, struct kset *kset, + struct kobject *kobj) +{ + return 0; +} +#endif /* CONFIG_HOTPLUG */ + /** * kobject_init - initialize object. * @kobj: object in question. @@ -111,6 +237,7 @@ { int error = 0; struct kobject * parent; + struct kobject * top_kobj; if (!(kobj = kobject_get(kobj))) return -ENOENT; @@ -134,6 +261,19 @@ error = create_dir(kobj); if (error) unlink(kobj); + else { + /* If this kobj does not belong to a kset, + try to find a parent that does. */ + top_kobj = kobj; + if (!top_kobj->kset && top_kobj->parent) { + do { + top_kobj = top_kobj->parent; + } while (!top_kobj->kset && top_kobj->parent); + } + + if (top_kobj->kset && top_kobj->kset->hotplug_ops) + kset_hotplug("add", top_kobj->kset, kobj); + } return error; } @@ -162,6 +302,20 @@ void kobject_del(struct kobject * kobj) { + struct kobject * top_kobj; + + /* If this kobj does not belong to a kset, + try to find a parent that does. */ + top_kobj = kobj; + if (!top_kobj->kset && top_kobj->parent) { + do { + top_kobj = top_kobj->parent; + } while (!top_kobj->kset && top_kobj->parent); + } + + if (top_kobj->kset && top_kobj->kset->hotplug_ops) + kset_hotplug("remove", top_kobj->kset, kobj); + sysfs_remove_dir(kobj); unlink(kobj); } diff -Nru a/mm/fadvise.c b/mm/fadvise.c --- a/mm/fadvise.c Sat Apr 12 14:44:07 2003 +++ b/mm/fadvise.c Sat Apr 12 14:44:07 2003 @@ -33,8 +33,10 @@ inode = file->f_dentry->d_inode; mapping = inode->i_mapping; - if (!mapping) - return -EINVAL; + if (!mapping) { + ret = -EINVAL; + goto out; + } bdi = mapping->backing_dev_info; @@ -69,6 +71,7 @@ default: ret = -EINVAL; } +out: fput(file); return ret; } diff -Nru a/mm/filemap.c b/mm/filemap.c --- a/mm/filemap.c Sat Apr 12 14:44:07 2003 +++ b/mm/filemap.c Sat Apr 12 14:44:07 2003 @@ -99,9 +99,9 @@ if (unlikely(!PageLocked(page))) PAGE_BUG(page); - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); __remove_from_page_cache(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); } static inline int sync_page(struct page *page) @@ -133,9 +133,9 @@ if (mapping->backing_dev_info->memory_backed) return 0; - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); list_splice_init(&mapping->dirty_pages, &mapping->io_pages); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); ret = do_writepages(mapping, &wbc); return ret; } @@ -166,7 +166,7 @@ restart: progress = 0; - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); while (!list_empty(&mapping->locked_pages)) { struct page *page; @@ -180,7 +180,7 @@ if (!PageWriteback(page)) { if (++progress > 32) { if (need_resched()) { - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); __cond_resched(); goto restart; } @@ -190,16 +190,16 @@ progress = 0; page_cache_get(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); wait_on_page_writeback(page); if (PageError(page)) ret = -EIO; page_cache_release(page); - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); } - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); return ret; } @@ -227,7 +227,7 @@ if (error == 0) { page_cache_get(page); - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); error = radix_tree_insert(&mapping->page_tree, offset, page); if (!error) { SetPageLocked(page); @@ -235,7 +235,7 @@ } else { page_cache_release(page); } - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); radix_tree_preload_end(); } return error; @@ -364,11 +364,11 @@ * We scan the hash list read-only. Addition to and removal from * the hash-list needs a held write-lock. */ - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); page = radix_tree_lookup(&mapping->page_tree, offset); if (page) page_cache_get(page); - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); return page; } @@ -379,11 +379,11 @@ { struct page *page; - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); page = radix_tree_lookup(&mapping->page_tree, offset); if (page && TestSetPageLocked(page)) page = NULL; - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); return page; } @@ -403,15 +403,15 @@ { struct page *page; - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); repeat: page = radix_tree_lookup(&mapping->page_tree, offset); if (page) { page_cache_get(page); if (TestSetPageLocked(page)) { - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); lock_page(page); - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); /* Has the page been truncated while we slept? */ if (page->mapping != mapping || page->index != offset) { @@ -421,7 +421,7 @@ } } } - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); return page; } @@ -491,12 +491,12 @@ unsigned int i; unsigned int ret; - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); ret = radix_tree_gang_lookup(&mapping->page_tree, (void **)pages, start, nr_pages); for (i = 0; i < ret; i++) page_cache_get(pages[i]); - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); return ret; } diff -Nru a/mm/msync.c b/mm/msync.c --- a/mm/msync.c Sat Apr 12 14:44:07 2003 +++ b/mm/msync.c Sat Apr 12 14:44:07 2003 @@ -125,11 +125,13 @@ /* * MS_SYNC syncs the entire file - including mappings. * - * MS_ASYNC initiates writeout of just the dirty mapped data. - * This provides no guarantee of file integrity - things like indirect - * blocks may not have started writeout. MS_ASYNC is primarily useful - * where the application knows that it has finished with the data and - * wishes to intelligently schedule its own I/O traffic. + * MS_ASYNC does not start I/O (it used to, up to 2.5.67). Instead, it just + * marks the relevant pages dirty. The application may now run fsync() to + * write out the dirty pages and wait on the writeout and check the result. + * Or the application may run fadvise(FADV_DONTNEED) against the fd to start + * async writeout immediately. + * So my _not_ starting I/O in MS_ASYNC we provide complete flexibility to + * applications. */ static int msync_interval(struct vm_area_struct * vma, unsigned long start, unsigned long end, int flags) @@ -143,22 +145,20 @@ if (file && (vma->vm_flags & VM_SHARED)) { ret = filemap_sync(vma, start, end-start, flags); - if (!ret && (flags & (MS_SYNC|MS_ASYNC))) { - struct inode * inode = file->f_dentry->d_inode; + if (!ret && (flags & MS_SYNC)) { + struct inode *inode = file->f_dentry->d_inode; int err; down(&inode->i_sem); ret = filemap_fdatawrite(inode->i_mapping); - if (flags & MS_SYNC) { - if (file->f_op && file->f_op->fsync) { - err = file->f_op->fsync(file, file->f_dentry, 1); - if (err && !ret) - ret = err; - } - err = filemap_fdatawait(inode->i_mapping); - if (!ret) + if (file->f_op && file->f_op->fsync) { + err = file->f_op->fsync(file,file->f_dentry,1); + if (err && !ret) ret = err; } + err = filemap_fdatawait(inode->i_mapping); + if (!ret) + ret = err; up(&inode->i_sem); } } diff -Nru a/mm/page-writeback.c b/mm/page-writeback.c --- a/mm/page-writeback.c Sat Apr 12 14:44:09 2003 +++ b/mm/page-writeback.c Sat Apr 12 14:44:09 2003 @@ -425,12 +425,12 @@ if (wait && PageWriteback(page)) wait_on_page_writeback(page); - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); list_del(&page->list); if (test_clear_page_dirty(page)) { list_add(&page->list, &mapping->locked_pages); page_cache_get(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); ret = mapping->a_ops->writepage(page, &wbc); if (ret == 0 && wait) { wait_on_page_writeback(page); @@ -440,7 +440,7 @@ page_cache_release(page); } else { list_add(&page->list, &mapping->clean_pages); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); unlock_page(page); } return ret; @@ -513,14 +513,14 @@ spin_unlock(&mapping->private_lock); if (!TestSetPageDirty(page)) { - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); if (page->mapping) { /* Race with truncate? */ if (!mapping->backing_dev_info->memory_backed) inc_page_state(nr_dirty); list_del(&page->list); list_add(&page->list, &mapping->dirty_pages); } - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); } @@ -550,7 +550,7 @@ struct address_space *mapping = page->mapping; if (mapping) { - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); if (page->mapping) { /* Race with truncate? */ BUG_ON(page->mapping != mapping); if (!mapping->backing_dev_info->memory_backed) @@ -558,7 +558,7 @@ list_del(&page->list); list_add(&page->list, &mapping->dirty_pages); } - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); } } diff -Nru a/mm/page_alloc.c b/mm/page_alloc.c --- a/mm/page_alloc.c Sat Apr 12 14:44:06 2003 +++ b/mm/page_alloc.c Sat Apr 12 14:44:06 2003 @@ -1432,7 +1432,6 @@ "nr_dirty", "nr_writeback", "nr_page_table_pages", - "nr_reverse_maps", "nr_mapped", "nr_slab", diff -Nru a/mm/readahead.c b/mm/readahead.c --- a/mm/readahead.c Sat Apr 12 14:44:06 2003 +++ b/mm/readahead.c Sat Apr 12 14:44:06 2003 @@ -217,7 +217,7 @@ /* * Preallocate as many pages as we will need. */ - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); for (page_idx = 0; page_idx < nr_to_read; page_idx++) { unsigned long page_offset = offset + page_idx; @@ -228,16 +228,16 @@ if (page) continue; - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); page = page_cache_alloc_cold(mapping); - read_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); if (!page) break; page->index = page_offset; list_add(&page->list, &page_pool); ret++; } - read_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); /* * Now start the IO. We ignore I/O errors - if the page is not diff -Nru a/mm/rmap.c b/mm/rmap.c --- a/mm/rmap.c Sat Apr 12 14:44:10 2003 +++ b/mm/rmap.c Sat Apr 12 14:44:10 2003 @@ -14,8 +14,8 @@ /* * Locking: * - the page->pte.chain is protected by the PG_chainlock bit, - * which nests within the zone->lru_lock, then the - * mm->page_table_lock, and then the page lock. + * which nests within the the mm->page_table_lock, + * which nests within the page lock. * - because swapout locking is opposite to the locking order * in the page fault path, the swapout path uses trylocks * on the mm->page_table_lock @@ -46,15 +46,40 @@ * We use an array of pte pointers in this structure to minimise cache misses * while traversing reverse maps. */ -#define NRPTE ((L1_CACHE_BYTES - sizeof(void *))/sizeof(pte_addr_t)) +#define NRPTE ((L1_CACHE_BYTES - sizeof(unsigned long))/sizeof(pte_addr_t)) +/* + * next_and_idx encodes both the address of the next pte_chain and the + * offset of the highest-index used pte in ptes[]. + */ struct pte_chain { - struct pte_chain *next; + unsigned long next_and_idx; pte_addr_t ptes[NRPTE]; } ____cacheline_aligned; kmem_cache_t *pte_chain_cache; +static inline struct pte_chain *pte_chain_next(struct pte_chain *pte_chain) +{ + return (struct pte_chain *)(pte_chain->next_and_idx & ~NRPTE); +} + +static inline struct pte_chain *pte_chain_ptr(unsigned long pte_chain_addr) +{ + return (struct pte_chain *)(pte_chain_addr & ~NRPTE); +} + +static inline int pte_chain_idx(struct pte_chain *pte_chain) +{ + return pte_chain->next_and_idx & NRPTE; +} + +static inline unsigned long +pte_chain_encode(struct pte_chain *pte_chain, int idx) +{ + return (unsigned long)pte_chain | idx; +} + /* * pte_chain list management policy: * @@ -89,7 +114,7 @@ */ int page_referenced(struct page * page) { - struct pte_chain * pc; + struct pte_chain *pc; int referenced = 0; if (TestClearPageReferenced(page)) @@ -104,7 +129,7 @@ int nr_chains = 0; /* Check all the page tables mapping this page. */ - for (pc = page->pte.chain; pc; pc = pc->next) { + for (pc = page->pte.chain; pc; pc = pte_chain_next(pc)) { int i; for (i = NRPTE-1; i >= 0; i--) { @@ -144,43 +169,11 @@ { pte_addr_t pte_paddr = ptep_to_paddr(ptep); struct pte_chain *cur_pte_chain; - int i; - -#ifdef DEBUG_RMAP - if (!page || !ptep) - BUG(); - if (!pte_present(*ptep)) - BUG(); - if (!ptep_to_mm(ptep)) - BUG(); -#endif - - if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) - return pte_chain; pte_chain_lock(page); -#ifdef DEBUG_RMAP - /* - * This stuff needs help to get up to highmem speed. - */ - { - struct pte_chain * pc; - if (PageDirect(page)) { - if (page->pte.direct == pte_paddr) - BUG(); - } else { - for (pc = page->pte.chain; pc; pc = pc->next) { - for (i = 0; i < NRPTE; i++) { - pte_addr_t p = pc->ptes[i]; - - if (p && p == pte_paddr) - BUG(); - } - } - } - } -#endif + if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) + goto out; if (page->pte.direct == 0) { page->pte.direct = pte_paddr; @@ -194,6 +187,7 @@ ClearPageDirect(page); pte_chain->ptes[NRPTE-1] = page->pte.direct; pte_chain->ptes[NRPTE-2] = pte_paddr; + pte_chain->next_and_idx = pte_chain_encode(NULL, NRPTE-2); page->pte.direct = 0; page->pte.chain = pte_chain; pte_chain = NULL; /* We consumed it */ @@ -202,25 +196,17 @@ cur_pte_chain = page->pte.chain; if (cur_pte_chain->ptes[0]) { /* It's full */ - pte_chain->next = cur_pte_chain; + pte_chain->next_and_idx = pte_chain_encode(cur_pte_chain, + NRPTE - 1); page->pte.chain = pte_chain; pte_chain->ptes[NRPTE-1] = pte_paddr; pte_chain = NULL; /* We consumed it */ goto out; } - - BUG_ON(!cur_pte_chain->ptes[NRPTE-1]); - - for (i = NRPTE-2; i >= 0; i--) { - if (!cur_pte_chain->ptes[i]) { - cur_pte_chain->ptes[i] = pte_paddr; - goto out; - } - } - BUG(); + cur_pte_chain->ptes[pte_chain_idx(cur_pte_chain) - 1] = pte_paddr; + cur_pte_chain->next_and_idx--; out: pte_chain_unlock(page); - inc_page_state(nr_reverse_maps); return pte_chain; } @@ -234,80 +220,61 @@ * the page. * Caller needs to hold the mm->page_table_lock. */ -void page_remove_rmap(struct page * page, pte_t * ptep) +void page_remove_rmap(struct page *page, pte_t *ptep) { pte_addr_t pte_paddr = ptep_to_paddr(ptep); struct pte_chain *pc; - if (!page || !ptep) - BUG(); + pte_chain_lock(page); + if (!pfn_valid(page_to_pfn(page)) || PageReserved(page)) - return; - if (!page_mapped(page)) - return; /* remap_page_range() from a driver? */ + goto out_unlock; - pte_chain_lock(page); + if (!page_mapped(page)) + goto out_unlock; /* remap_page_range() from a driver? */ if (PageDirect(page)) { if (page->pte.direct == pte_paddr) { page->pte.direct = 0; - dec_page_state(nr_reverse_maps); ClearPageDirect(page); goto out; } } else { struct pte_chain *start = page->pte.chain; + struct pte_chain *next; int victim_i = -1; - for (pc = start; pc; pc = pc->next) { + for (pc = start; pc; pc = next) { int i; - if (pc->next) - prefetch(pc->next); - for (i = 0; i < NRPTE; i++) { + next = pte_chain_next(pc); + if (next) + prefetch(next); + for (i = pte_chain_idx(pc); i < NRPTE; i++) { pte_addr_t pa = pc->ptes[i]; - if (!pa) - continue; if (victim_i == -1) victim_i = i; if (pa != pte_paddr) continue; pc->ptes[i] = start->ptes[victim_i]; - dec_page_state(nr_reverse_maps); start->ptes[victim_i] = 0; if (victim_i == NRPTE-1) { /* Emptied a pte_chain */ - page->pte.chain = start->next; + page->pte.chain = pte_chain_next(start); __pte_chain_free(start); } else { - /* Do singleton->PageDirect here */ + start->next_and_idx++; } goto out; } } } -#ifdef DEBUG_RMAP - /* Not found. This should NEVER happen! */ - printk(KERN_ERR "page_remove_rmap: pte_chain %p not present.\n", ptep); - printk(KERN_ERR "page_remove_rmap: only found: "); - if (PageDirect(page)) { - printk("%llx", (u64)page->pte.direct); - } else { - for (pc = page->pte.chain; pc; pc = pc->next) { - int i; - for (i = 0; i < NRPTE; i++) - printk(" %d:%llx", i, (u64)pc->ptes[i]); - } - } - printk("\n"); - printk(KERN_ERR "page_remove_rmap: driver cleared PG_reserved ?\n"); -#endif - out: - pte_chain_unlock(page); if (!page_mapped(page)) dec_page_state(nr_mapped); +out_unlock: + pte_chain_unlock(page); return; } @@ -320,9 +287,8 @@ * table entry mapping a page. Because locking order here is opposite * to the locking order used by the page fault path, we use trylocks. * Locking: - * zone->lru_lock page_launder() - * page lock page_launder(), trylock - * pte_chain_lock page_launder() + * page lock shrink_list(), trylock + * pte_chain_lock shrink_list() * mm->page_table_lock try_to_unmap_one(), trylock */ static int FASTCALL(try_to_unmap_one(struct page *, pte_addr_t)); @@ -409,8 +375,8 @@ * @page: the page to get unmapped * * Tries to remove all the page table entries which are mapping this - * page, used in the pageout path. Caller must hold zone->lru_lock - * and the page lock. Return values are: + * page, used in the pageout path. Caller must hold the page lock + * and its pte chain lock. Return values are: * * SWAP_SUCCESS - we succeeded in removing all mappings * SWAP_AGAIN - we missed a trylock, try again later @@ -435,7 +401,6 @@ ret = try_to_unmap_one(page, page->pte.direct); if (ret == SWAP_SUCCESS) { page->pte.direct = 0; - dec_page_state(nr_reverse_maps); ClearPageDirect(page); } goto out; @@ -445,10 +410,10 @@ for (pc = start; pc; pc = next_pc) { int i; - next_pc = pc->next; + next_pc = pte_chain_next(pc); if (next_pc) prefetch(next_pc); - for (i = 0; i < NRPTE; i++) { + for (i = pte_chain_idx(pc); i < NRPTE; i++) { pte_addr_t pte_paddr = pc->ptes[i]; if (!pte_paddr) @@ -466,13 +431,14 @@ */ pc->ptes[i] = start->ptes[victim_i]; start->ptes[victim_i] = 0; - dec_page_state(nr_reverse_maps); victim_i++; if (victim_i == NRPTE) { - page->pte.chain = start->next; + page->pte.chain = pte_chain_next(start); __pte_chain_free(start); start = page->pte.chain; victim_i = 0; + } else { + start->next_and_idx++; } break; case SWAP_AGAIN: @@ -514,8 +480,8 @@ int cpu = get_cpu(); struct pte_chain **pte_chainp; - if (pte_chain->next) - pte_chain->next = NULL; + if (pte_chain->next_and_idx) + pte_chain->next_and_idx = 0; pte_chainp = &per_cpu(local_pte_chain, cpu); if (*pte_chainp) kmem_cache_free(pte_chain_cache, *pte_chainp); @@ -560,7 +526,7 @@ pte_chain_cache = kmem_cache_create( "pte_chain", sizeof(struct pte_chain), 0, - 0, + SLAB_MUST_HWCACHE_ALIGN, pte_chain_ctor, NULL); diff -Nru a/mm/slab.c b/mm/slab.c --- a/mm/slab.c Sat Apr 12 14:44:09 2003 +++ b/mm/slab.c Sat Apr 12 14:44:09 2003 @@ -387,14 +387,15 @@ }; /* Must match cache_sizes above. Out of line to keep cache footprint low. */ -static struct { - char *name; +static struct { + char *name; char *name_dma; -} cache_names[] = { +} cache_names[] = { #define CACHE(x) { .name = "size-" #x, .name_dma = "size-" #x "(DMA)" }, #include + { 0, } #undef CACHE -}; +}; struct arraycache_init initarray_cache __initdata = { { 0, BOOT_CPUCACHE_ENTRIES, 1, 0} }; struct arraycache_init initarray_generic __initdata = { { 0, BOOT_CPUCACHE_ENTRIES, 1, 0} }; diff -Nru a/mm/swap_state.c b/mm/swap_state.c --- a/mm/swap_state.c Sat Apr 12 14:44:07 2003 +++ b/mm/swap_state.c Sat Apr 12 14:44:07 2003 @@ -34,7 +34,7 @@ struct address_space swapper_space = { .page_tree = RADIX_TREE_INIT(GFP_ATOMIC), - .page_lock = RW_LOCK_UNLOCKED, + .page_lock = SPIN_LOCK_UNLOCKED, .clean_pages = LIST_HEAD_INIT(swapper_space.clean_pages), .dirty_pages = LIST_HEAD_INIT(swapper_space.dirty_pages), .io_pages = LIST_HEAD_INIT(swapper_space.io_pages), @@ -191,9 +191,9 @@ entry.val = page->index; - write_lock(&swapper_space.page_lock); + spin_lock(&swapper_space.page_lock); __delete_from_swap_cache(page); - write_unlock(&swapper_space.page_lock); + spin_unlock(&swapper_space.page_lock); swap_free(entry); page_cache_release(page); @@ -204,8 +204,8 @@ struct address_space *mapping = page->mapping; int err; - write_lock(&swapper_space.page_lock); - write_lock(&mapping->page_lock); + spin_lock(&swapper_space.page_lock); + spin_lock(&mapping->page_lock); err = radix_tree_insert(&swapper_space.page_tree, entry.val, page); if (!err) { @@ -213,8 +213,8 @@ ___add_to_page_cache(page, &swapper_space, entry.val); } - write_unlock(&mapping->page_lock); - write_unlock(&swapper_space.page_lock); + spin_unlock(&mapping->page_lock); + spin_unlock(&swapper_space.page_lock); if (!err) { if (!swap_duplicate(entry)) @@ -240,8 +240,8 @@ entry.val = page->index; - write_lock(&swapper_space.page_lock); - write_lock(&mapping->page_lock); + spin_lock(&swapper_space.page_lock); + spin_lock(&mapping->page_lock); err = radix_tree_insert(&mapping->page_tree, index, page); if (!err) { @@ -249,8 +249,8 @@ ___add_to_page_cache(page, mapping, index); } - write_unlock(&mapping->page_lock); - write_unlock(&swapper_space.page_lock); + spin_unlock(&mapping->page_lock); + spin_unlock(&swapper_space.page_lock); if (!err) { swap_free(entry); diff -Nru a/mm/swapfile.c b/mm/swapfile.c --- a/mm/swapfile.c Sat Apr 12 14:44:06 2003 +++ b/mm/swapfile.c Sat Apr 12 14:44:06 2003 @@ -248,10 +248,10 @@ /* Is the only swap cache user the cache itself? */ if (p->swap_map[swp_offset(entry)] == 1) { /* Recheck the page count with the pagecache lock held.. */ - read_lock(&swapper_space.page_lock); + spin_lock(&swapper_space.page_lock); if (page_count(page) - !!PagePrivate(page) == 2) retval = 1; - read_unlock(&swapper_space.page_lock); + spin_unlock(&swapper_space.page_lock); } swap_info_put(p); } @@ -319,13 +319,13 @@ retval = 0; if (p->swap_map[swp_offset(entry)] == 1) { /* Recheck the page count with the pagecache lock held.. */ - write_lock(&swapper_space.page_lock); + spin_lock(&swapper_space.page_lock); if ((page_count(page) == 2) && !PageWriteback(page)) { __delete_from_swap_cache(page); SetPageDirty(page); retval = 1; } - write_unlock(&swapper_space.page_lock); + spin_unlock(&swapper_space.page_lock); } swap_info_put(p); @@ -377,41 +377,33 @@ * share this swap entry, so be cautious and let do_wp_page work out * what to do if a write is requested later. */ -/* mmlist_lock and vma->vm_mm->page_table_lock are held */ +/* vma->vm_mm->page_table_lock is held */ static void unuse_pte(struct vm_area_struct *vma, unsigned long address, pte_t *dir, swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) { - pte_t pte = *dir; - - if (pte_file(pte)) - return; - if (likely(pte_to_swp_entry(pte).val != entry.val)) - return; - if (unlikely(pte_none(pte) || pte_present(pte))) - return; + vma->vm_mm->rss++; get_page(page); set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot))); *pte_chainp = page_add_rmap(page, dir, *pte_chainp); swap_free(entry); - ++vma->vm_mm->rss; } -/* mmlist_lock and vma->vm_mm->page_table_lock are held */ -static void unuse_pmd(struct vm_area_struct * vma, pmd_t *dir, +/* vma->vm_mm->page_table_lock is held */ +static int unuse_pmd(struct vm_area_struct * vma, pmd_t *dir, unsigned long address, unsigned long size, unsigned long offset, - swp_entry_t entry, struct page* page) + swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) { pte_t * pte; unsigned long end; - struct pte_chain *pte_chain = NULL; + pte_t swp_pte = swp_entry_to_pte(entry); if (pmd_none(*dir)) - return; + return 0; if (pmd_bad(*dir)) { pmd_ERROR(*dir); pmd_clear(dir); - return; + return 0; } pte = pte_offset_map(dir, address); offset += address & PMD_MASK; @@ -421,33 +413,36 @@ end = PMD_SIZE; do { /* - * FIXME: handle pte_chain_alloc() failures + * swapoff spends a _lot_ of time in this loop! + * Test inline before going to call unuse_pte. */ - if (pte_chain == NULL) - pte_chain = pte_chain_alloc(GFP_ATOMIC); - unuse_pte(vma, offset+address-vma->vm_start, - pte, entry, page, &pte_chain); + if (unlikely(pte_same(*pte, swp_pte))) { + unuse_pte(vma, offset + address, pte, + entry, page, pte_chainp); + pte_unmap(pte); + return 1; + } address += PAGE_SIZE; pte++; } while (address && (address < end)); pte_unmap(pte - 1); - pte_chain_free(pte_chain); + return 0; } -/* mmlist_lock and vma->vm_mm->page_table_lock are held */ -static void unuse_pgd(struct vm_area_struct * vma, pgd_t *dir, +/* vma->vm_mm->page_table_lock is held */ +static int unuse_pgd(struct vm_area_struct * vma, pgd_t *dir, unsigned long address, unsigned long size, - swp_entry_t entry, struct page* page) + swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) { pmd_t * pmd; unsigned long offset, end; if (pgd_none(*dir)) - return; + return 0; if (pgd_bad(*dir)) { pgd_ERROR(*dir); pgd_clear(dir); - return; + return 0; } pmd = pmd_offset(dir, address); offset = address & PGDIR_MASK; @@ -458,32 +453,42 @@ if (address >= end) BUG(); do { - unuse_pmd(vma, pmd, address, end - address, offset, entry, - page); + if (unuse_pmd(vma, pmd, address, end - address, + offset, entry, page, pte_chainp)) + return 1; address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address && (address < end)); + return 0; } -/* mmlist_lock and vma->vm_mm->page_table_lock are held */ -static void unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir, - swp_entry_t entry, struct page* page) +/* vma->vm_mm->page_table_lock is held */ +static int unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir, + swp_entry_t entry, struct page *page, struct pte_chain **pte_chainp) { unsigned long start = vma->vm_start, end = vma->vm_end; if (start >= end) BUG(); do { - unuse_pgd(vma, pgdir, start, end - start, entry, page); + if (unuse_pgd(vma, pgdir, start, end - start, + entry, page, pte_chainp)) + return 1; start = (start + PGDIR_SIZE) & PGDIR_MASK; pgdir++; } while (start && (start < end)); + return 0; } -static void unuse_process(struct mm_struct * mm, +static int unuse_process(struct mm_struct * mm, swp_entry_t entry, struct page* page) { struct vm_area_struct* vma; + struct pte_chain *pte_chain; + + pte_chain = pte_chain_alloc(GFP_KERNEL); + if (!pte_chain) + return -ENOMEM; /* * Go through process' page directory. @@ -491,10 +496,12 @@ spin_lock(&mm->page_table_lock); for (vma = mm->mmap; vma; vma = vma->vm_next) { pgd_t * pgd = pgd_offset(mm, vma->vm_start); - unuse_vma(vma, pgd, entry, page); + if (unuse_vma(vma, pgd, entry, page, &pte_chain)) + break; } spin_unlock(&mm->page_table_lock); - return; + pte_chain_free(pte_chain); + return 0; } /* @@ -638,36 +645,54 @@ if (start_mm == &init_mm) shmem = shmem_unuse(entry, page); else - unuse_process(start_mm, entry, page); + retval = unuse_process(start_mm, entry, page); } if (*swap_map > 1) { int set_start_mm = (*swap_map >= swcount); struct list_head *p = &start_mm->mmlist; struct mm_struct *new_start_mm = start_mm; + struct mm_struct *prev_mm = start_mm; struct mm_struct *mm; + atomic_inc(&new_start_mm->mm_users); + atomic_inc(&prev_mm->mm_users); spin_lock(&mmlist_lock); - while (*swap_map > 1 && + while (*swap_map > 1 && !retval && (p = p->next) != &start_mm->mmlist) { mm = list_entry(p, struct mm_struct, mmlist); + atomic_inc(&mm->mm_users); + spin_unlock(&mmlist_lock); + mmput(prev_mm); + prev_mm = mm; + + cond_resched(); + swcount = *swap_map; - if (mm == &init_mm) { + if (swcount <= 1) + ; + else if (mm == &init_mm) { set_start_mm = 1; - spin_unlock(&mmlist_lock); shmem = shmem_unuse(entry, page); - spin_lock(&mmlist_lock); } else - unuse_process(mm, entry, page); + retval = unuse_process(mm, entry, page); if (set_start_mm && *swap_map < swcount) { + mmput(new_start_mm); + atomic_inc(&mm->mm_users); new_start_mm = mm; set_start_mm = 0; } + spin_lock(&mmlist_lock); } - atomic_inc(&new_start_mm->mm_users); spin_unlock(&mmlist_lock); + mmput(prev_mm); mmput(start_mm); start_mm = new_start_mm; } + if (retval) { + unlock_page(page); + page_cache_release(page); + break; + } /* * How could swap count reach 0x7fff when the maximum @@ -691,7 +716,7 @@ /* * If a reference remains (rare), we would like to leave - * the page in the swap cache; but try_to_swap_out could + * the page in the swap cache; but try_to_unmap could * then re-duplicate the entry once we drop page lock, * so we might loop indefinitely; also, that page could * not be swapped out to other storage meanwhile. So: @@ -727,7 +752,7 @@ /* * So we could skip searching mms once swap count went * to 1, we did not mark any present ptes as dirty: must - * mark page dirty so try_to_swap_out will preserve it. + * mark page dirty so shrink_list will preserve it. */ SetPageDirty(page); unlock_page(page); @@ -970,7 +995,7 @@ } #endif -asmlinkage long sys_swapoff(const char * specialfile) +asmlinkage long sys_swapoff(const char __user * specialfile) { struct swap_info_struct * p = NULL; unsigned short *swap_map; @@ -1174,7 +1199,7 @@ * * The swapon system call */ -asmlinkage long sys_swapon(const char * specialfile, int swap_flags) +asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) { struct swap_info_struct * p; char *name = NULL; diff -Nru a/mm/truncate.c b/mm/truncate.c --- a/mm/truncate.c Sat Apr 12 14:44:10 2003 +++ b/mm/truncate.c Sat Apr 12 14:44:10 2003 @@ -73,13 +73,13 @@ if (PagePrivate(page) && !try_to_release_page(page, 0)) return 0; - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); if (PageDirty(page)) { - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); return 0; } __remove_from_page_cache(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); ClearPageUptodate(page); page_cache_release(page); /* pagecache ref */ return 1; diff -Nru a/mm/vmscan.c b/mm/vmscan.c --- a/mm/vmscan.c Sat Apr 12 14:44:06 2003 +++ b/mm/vmscan.c Sat Apr 12 14:44:06 2003 @@ -325,7 +325,7 @@ goto keep_locked; if (!may_write_to_queue(mapping->backing_dev_info)) goto keep_locked; - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); if (test_clear_page_dirty(page)) { int res; struct writeback_control wbc = { @@ -336,7 +336,7 @@ }; list_move(&page->list, &mapping->locked_pages); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); SetPageReclaim(page); res = mapping->a_ops->writepage(page, &wbc); @@ -351,7 +351,7 @@ } goto keep; } - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); } /* @@ -385,7 +385,7 @@ if (!mapping) goto keep_locked; /* truncate got there first */ - write_lock(&mapping->page_lock); + spin_lock(&mapping->page_lock); /* * The non-racy check for busy page. It is critical to check @@ -393,7 +393,7 @@ * not in use by anybody. (pagecache + us == 2) */ if (page_count(page) != 2 || PageDirty(page)) { - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); goto keep_locked; } @@ -401,7 +401,7 @@ if (PageSwapCache(page)) { swp_entry_t swap = { .val = page->index }; __delete_from_swap_cache(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); swap_free(swap); __put_page(page); /* The pagecache ref */ goto free_it; @@ -409,7 +409,7 @@ #endif /* CONFIG_SWAP */ __remove_from_page_cache(page); - write_unlock(&mapping->page_lock); + spin_unlock(&mapping->page_lock); __put_page(page); free_it: diff -Nru a/net/8021q/vlan.c b/net/8021q/vlan.c --- a/net/8021q/vlan.c Sat Apr 12 14:44:09 2003 +++ b/net/8021q/vlan.c Sat Apr 12 14:44:09 2003 @@ -29,7 +29,6 @@ #include #include #include -#include #include #include @@ -68,7 +67,6 @@ .dev =NULL, .func = vlan_skb_recv, /* VLAN receive method */ .data = (void *)(-1), /* Set here '(void *)1' when this code can SHARE SKBs */ - .next = NULL }; /* End of global variables definitions. */ @@ -231,9 +229,8 @@ real_dev->vlan_rx_kill_vid(real_dev, vlan_id); } - br_write_lock(BR_NETPROTO_LOCK); grp->vlan_devices[vlan_id] = NULL; - br_write_unlock(BR_NETPROTO_LOCK); + synchronize_net(); /* Caller unregisters (and if necessary, puts) @@ -266,7 +263,7 @@ ret = 1; } - MOD_DEC_USE_COUNT; + module_put(THIS_MODULE); } } @@ -433,6 +430,7 @@ /* set up method calls */ new_dev->init = vlan_dev_init; new_dev->destructor = vlan_dev_destruct; + new_dev->owner = THIS_MODULE; /* new_dev->ifindex = 0; it will be set when added to * the global list. @@ -503,6 +501,15 @@ real_dev->ifindex); #endif + if (register_netdevice(new_dev)) + goto out_free_newdev_priv; + + /* NOTE: We have a reference to the real device, + * so hold on to the reference. May fail if we are being removed + */ + if (!try_module_get(THIS_MODULE)) + goto out_free_unregister; + /* So, got the sucker initialized, now lets place * it into our local structure. */ @@ -516,7 +523,7 @@ if (!grp) { /* need to add a new group */ grp = kmalloc(sizeof(struct vlan_group), GFP_KERNEL); if (!grp) - goto out_free_newdev_priv; + goto out_free_put; /* printk(KERN_ALERT "VLAN REGISTER: Allocated new group.\n"); */ memset(grp, 0, sizeof(struct vlan_group)); @@ -537,18 +544,18 @@ if (real_dev->features & NETIF_F_HW_VLAN_FILTER) real_dev->vlan_rx_add_vid(real_dev, VLAN_ID); - register_netdevice(new_dev); - rtnl_unlock(); - - /* NOTE: We have a reference to the real device, - * so hold on to the reference. - */ - MOD_INC_USE_COUNT; /* Add was a success!! */ + + #ifdef VLAN_DEBUG printk(VLAN_DBG "Allocated new device successfully, returning.\n"); #endif return new_dev; +out_free_put: + module_put(THIS_MODULE); + +out_free_unregister: + unregister_netdev(new_dev); out_free_newdev_priv: kfree(new_dev->priv); diff -Nru a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c --- a/net/8021q/vlan_dev.c Sat Apr 12 14:44:09 2003 +++ b/net/8021q/vlan_dev.c Sat Apr 12 14:44:09 2003 @@ -31,7 +31,6 @@ #include #include #include -#include #include "vlan.h" #include "vlanproc.h" diff -Nru a/net/bridge/br.c b/net/bridge/br.c --- a/net/bridge/br.c Sat Apr 12 14:44:06 2003 +++ b/net/bridge/br.c Sat Apr 12 14:44:06 2003 @@ -49,8 +49,9 @@ if (br_netfilter_init()) return 1; #endif + brioctl_set(br_ioctl_deviceless_stub); br_handle_frame_hook = br_handle_frame; - br_ioctl_hook = br_ioctl_deviceless_stub; + #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) br_fdb_get_hook = br_fdb_get; br_fdb_put_hook = br_fdb_put; @@ -60,24 +61,18 @@ return 0; } -static void __br_clear_ioctl_hook(void) -{ - br_ioctl_hook = NULL; -} - static void __exit br_deinit(void) { #ifdef CONFIG_NETFILTER br_netfilter_fini(); #endif unregister_netdevice_notifier(&br_device_notifier); - br_call_ioctl_atomic(__br_clear_ioctl_hook); - br_write_lock_bh(BR_NETPROTO_LOCK); + brioctl_set(NULL); br_handle_frame_hook = NULL; - br_write_unlock_bh(BR_NETPROTO_LOCK); #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) + /* FIX ME. move into hook structure with ref count */ br_fdb_get_hook = NULL; br_fdb_put_hook = NULL; #endif diff -Nru a/net/bridge/br_forward.c b/net/bridge/br_forward.c --- a/net/bridge/br_forward.c Sat Apr 12 14:44:07 2003 +++ b/net/bridge/br_forward.c Sat Apr 12 14:44:07 2003 @@ -33,6 +33,7 @@ int br_dev_queue_push_xmit(struct sk_buff *skb) { #ifdef CONFIG_NETFILTER + /* FIXME: skb bas not been linearized: is this valid?? --RR */ if (skb->nf_bridge) memcpy(skb->data - 16, skb->nf_bridge->hh, 16); #endif diff -Nru a/net/bridge/br_if.c b/net/bridge/br_if.c --- a/net/bridge/br_if.c Sat Apr 12 14:44:10 2003 +++ b/net/bridge/br_if.c Sat Apr 12 14:44:10 2003 @@ -23,6 +23,7 @@ #include "br_private.h" static struct net_bridge *bridge_list; +static spinlock_t bridge_lock = SPIN_LOCK_UNLOCKED; static int br_initial_port_cost(struct net_device *dev) { @@ -69,6 +70,7 @@ return 0; } +/* called with bridge_lock */ static struct net_bridge **__find_br(char *name) { struct net_bridge **b; @@ -188,8 +190,10 @@ return -EEXIST; } + spin_lock(&bridge_lock); br->next = bridge_list; bridge_list = br; + spin_unlock(&bridge_lock); br_inc_use_count(); register_netdev(&br->dev); @@ -202,17 +206,22 @@ struct net_bridge **b; struct net_bridge *br; - if ((b = __find_br(name)) == NULL) + spin_lock(&bridge_lock); + if ((b = __find_br(name)) == NULL) { + spin_unlock(&bridge_lock); return -ENXIO; + } br = *b; - - if (br->dev.flags & IFF_UP) + if (br->dev.flags & IFF_UP) { + spin_unlock(&bridge_lock); return -EBUSY; - - del_ifs(br); + } *b = br->next; + spin_unlock(&bridge_lock); + + del_ifs(br); unregister_netdev(&br->dev); kfree(br); @@ -272,6 +281,7 @@ struct net_bridge *br; int i; + spin_lock(&bridge_lock); br = bridge_list; for (i=0;idev.ifindex; br = br->next; } + spin_unlock(&bridge_lock); return i; } @@ -289,9 +300,11 @@ { struct net_bridge_port *p; + read_lock(&br->lock); p = br->port_list; while (p != NULL) { ifindices[p->port_no] = p->dev->ifindex; p = p->next; } + read_unlock(&br->lock); } diff -Nru a/net/bridge/br_ioctl.c b/net/bridge/br_ioctl.c --- a/net/bridge/br_ioctl.c Sat Apr 12 14:44:06 2003 +++ b/net/bridge/br_ioctl.c Sat Apr 12 14:44:06 2003 @@ -53,6 +53,7 @@ { struct __bridge_info b; + read_lock(&br->lock); memset(&b, 0, sizeof(struct __bridge_info)); memcpy(&b.designated_root, &br->designated_root, 8); memcpy(&b.bridge_id, &br->bridge_id, 8); @@ -73,6 +74,7 @@ b.tcn_timer_value = br_timer_get_residue(&br->tcn_timer); b.topology_change_timer_value = br_timer_get_residue(&br->topology_change_timer); b.gc_timer_value = br_timer_get_residue(&br->gc_timer); + read_unlock(&br->lock); if (copy_to_user((void *)arg0, &b, sizeof(b))) return -EFAULT; @@ -82,35 +84,44 @@ case BRCTL_GET_PORT_LIST: { - int i; - int indices[256]; + int *indices; + int ret = 0; - for (i=0;i<256;i++) - indices[i] = 0; + indices = kmalloc(256*sizeof(int), GFP_KERNEL); + if (indices == NULL) + return -ENOMEM; + + memset(indices, 0, 256*sizeof(int)); br_get_port_ifindices(br, indices); if (copy_to_user((void *)arg0, indices, 256*sizeof(int))) - return -EFAULT; - - return 0; + ret = -EFAULT; + kfree(indices); + return ret; } case BRCTL_SET_BRIDGE_FORWARD_DELAY: + write_lock(&br->lock); br->bridge_forward_delay = arg0; if (br_is_root_bridge(br)) br->forward_delay = arg0; + write_unlock(&br->lock); return 0; case BRCTL_SET_BRIDGE_HELLO_TIME: + write_lock(&br->lock); br->bridge_hello_time = arg0; if (br_is_root_bridge(br)) br->hello_time = arg0; + write_unlock(&br->lock); return 0; case BRCTL_SET_BRIDGE_MAX_AGE: + write_lock(&br->lock); br->bridge_max_age = arg0; if (br_is_root_bridge(br)) br->max_age = arg0; + write_unlock(&br->lock); return 0; case BRCTL_SET_AGEING_TIME: @@ -126,6 +137,7 @@ struct __port_info p; struct net_bridge_port *pt; + read_lock(&br->lock); if ((pt = br_get_port(br, arg1)) == NULL) return -EINVAL; @@ -143,6 +155,8 @@ p.forward_delay_timer_value = br_timer_get_residue(&pt->forward_delay_timer); p.hold_timer_value = br_timer_get_residue(&pt->hold_timer); + read_unlock(&br->lock); + if (copy_to_user((void *)arg0, &p, sizeof(p))) return -EFAULT; @@ -154,16 +168,20 @@ return 0; case BRCTL_SET_BRIDGE_PRIORITY: + write_lock(&br->lock); br_stp_set_bridge_priority(br, arg0); + write_unlock(&br->lock); return 0; case BRCTL_SET_PORT_PRIORITY: { struct net_bridge_port *p; + write_lock(&br->lock); if ((p = br_get_port(br, arg0)) == NULL) return -EINVAL; br_stp_set_port_priority(p, arg1); + write_unlock(&br->lock); return 0; } @@ -171,9 +189,11 @@ { struct net_bridge_port *p; + write_lock(&br->lock); if ((p = br_get_port(br, arg0)) == NULL) return -EINVAL; br_stp_set_path_cost(p, arg1); + write_unlock(&br->lock); return 0; } @@ -195,19 +215,24 @@ case BRCTL_GET_BRIDGES: { - int i; - int indices[64]; - - for (i=0;i<64;i++) - indices[i] = 0; + int *indices; + int ret = 0; if (arg1 > 64) arg1 = 64; + + indices = kmalloc(arg1*sizeof(int), GFP_KERNEL); + if (indices == NULL) + return -ENOMEM; + + memset(indices, 0, arg1*sizeof(int)); arg1 = br_get_bridge_ifindices(indices, arg1); - if (copy_to_user((void *)arg0, indices, arg1*sizeof(int))) - return -EFAULT; - return arg1; + ret = copy_to_user((void *)arg0, indices, arg1*sizeof(int)) + ? -EFAULT : arg1; + + kfree(indices); + return ret; } case BRCTL_ADD_BRIDGE: @@ -230,11 +255,9 @@ return -EOPNOTSUPP; } -static DECLARE_MUTEX(ioctl_mutex); int br_ioctl_deviceless_stub(unsigned long arg) { - int err; unsigned long i[3]; if (!capable(CAP_NET_ADMIN)) @@ -243,11 +266,7 @@ if (copy_from_user(i, (void *)arg, 3*sizeof(unsigned long))) return -EFAULT; - down(&ioctl_mutex); - err = br_ioctl_deviceless(i[0], i[1], i[2]); - up(&ioctl_mutex); - - return err; + return br_ioctl_deviceless(i[0], i[1], i[2]); } int br_ioctl(struct net_bridge *br, unsigned int cmd, unsigned long arg0, unsigned long arg1, unsigned long arg2) @@ -257,18 +276,9 @@ if (!capable(CAP_NET_ADMIN)) return -EPERM; - down(&ioctl_mutex); err = br_ioctl_deviceless(cmd, arg0, arg1); if (err == -EOPNOTSUPP) err = br_ioctl_device(br, cmd, arg0, arg1, arg2); - up(&ioctl_mutex); return err; -} - -void br_call_ioctl_atomic(void (*fn)(void)) -{ - down(&ioctl_mutex); - fn(); - up(&ioctl_mutex); } diff -Nru a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c --- a/net/bridge/br_netfilter.c Sat Apr 12 14:44:10 2003 +++ b/net/bridge/br_netfilter.c Sat Apr 12 14:44:10 2003 @@ -467,6 +467,7 @@ struct sk_buff *skb = *pskb; struct nf_bridge_info *nf_bridge = (*pskb)->nf_bridge; + /* FIXME: skb as not been linearized. Is this still true? --RR */ /* Be very paranoid. */ if (skb->mac.raw < skb->head || skb->mac.raw + ETH_HLEN > skb->data) { printk(KERN_CRIT "br_netfilter: Argh!! br_nf_post_routing: " diff -Nru a/net/bridge/br_notify.c b/net/bridge/br_notify.c --- a/net/bridge/br_notify.c Sat Apr 12 14:44:06 2003 +++ b/net/bridge/br_notify.c Sat Apr 12 14:44:06 2003 @@ -21,15 +21,14 @@ struct notifier_block br_device_notifier = { - br_device_event, - NULL, - 0 + .notifier_call = br_device_event }; static int br_device_event(struct notifier_block *unused, unsigned long event, void *ptr) { struct net_device *dev; struct net_bridge_port *p; + struct net_bridge *br; dev = ptr; p = dev->br_port; @@ -37,13 +36,15 @@ if (p == NULL) return NOTIFY_DONE; - switch (event) + br = p->br; + + switch (event) { case NETDEV_CHANGEADDR: - read_lock(&p->br->lock); + write_lock_bh(&br->lock); br_fdb_changeaddr(p, dev->dev_addr); - br_stp_recalculate_bridge_id(p->br); - read_unlock(&p->br->lock); + br_stp_recalculate_bridge_id(br); + write_unlock_bh(&br->lock); break; case NETDEV_GOING_DOWN: @@ -51,23 +52,23 @@ break; case NETDEV_DOWN: - if (p->br->dev.flags & IFF_UP) { - read_lock(&p->br->lock); - br_stp_disable_port(dev->br_port); - read_unlock(&p->br->lock); + if (br->dev.flags & IFF_UP) { + write_lock_bh(&br->lock); + br_stp_disable_port(p); + write_unlock_bh(&br->lock); } break; case NETDEV_UP: - if (p->br->dev.flags & IFF_UP) { - read_lock(&p->br->lock); - br_stp_enable_port(dev->br_port); - read_unlock(&p->br->lock); + if (!(br->dev.flags & IFF_UP)) { + write_lock_bh(&br->lock); + br_stp_enable_port(p); + write_unlock_bh(&br->lock); } break; case NETDEV_UNREGISTER: - br_del_if(dev->br_port->br, dev); + br_del_if(br, dev); break; } diff -Nru a/net/bridge/netfilter/ebtable_broute.c b/net/bridge/netfilter/ebtable_broute.c --- a/net/bridge/netfilter/ebtable_broute.c Sat Apr 12 14:44:05 2003 +++ b/net/bridge/netfilter/ebtable_broute.c Sat Apr 12 14:44:05 2003 @@ -14,7 +14,6 @@ #include #include #include -#include /* EBT_ACCEPT means the frame will be bridged * EBT_DROP means the frame will be routed @@ -70,18 +69,15 @@ ret = ebt_register_table(&broute_table); if (ret < 0) return ret; - br_write_lock_bh(BR_NETPROTO_LOCK); /* see br_input.c */ br_should_route_hook = ebt_broute; - br_write_unlock_bh(BR_NETPROTO_LOCK); return ret; } static void __exit fini(void) { - br_write_lock_bh(BR_NETPROTO_LOCK); br_should_route_hook = NULL; - br_write_unlock_bh(BR_NETPROTO_LOCK); + synchronize_net(); ebt_unregister_table(&broute_table); } diff -Nru a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c --- a/net/bridge/netfilter/ebtables.c Sat Apr 12 14:44:07 2003 +++ b/net/bridge/netfilter/ebtables.c Sat Apr 12 14:44:07 2003 @@ -175,6 +175,10 @@ char *base; struct ebt_table_info *private = table->private; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + read_lock_bh(&table->lock); cb_base = COUNTER_BASE(private->counters, private->nentries, smp_processor_id()); diff -Nru a/net/core/datagram.c b/net/core/datagram.c --- a/net/core/datagram.c Sat Apr 12 14:44:08 2003 +++ b/net/core/datagram.c Sat Apr 12 14:44:08 2003 @@ -220,7 +220,7 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset, struct iovec *to, int len) { - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); int i, copy = start - offset; /* Copy header. */ @@ -295,7 +295,7 @@ int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset, u8 *to, int len, unsigned int *csump) { - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); int pos = 0; int i, copy = start - offset; diff -Nru a/net/core/dev.c b/net/core/dev.c --- a/net/core/dev.c Sat Apr 12 14:44:08 2003 +++ b/net/core/dev.c Sat Apr 12 14:44:08 2003 @@ -1433,9 +1433,8 @@ } } -#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) +#if defined(CONFIG_BRIDGE) || defined (CONFIG_BRIDGE_MODULE) int (*br_handle_frame_hook)(struct sk_buff *skb) = NULL; -#endif static __inline__ int handle_bridge(struct sk_buff *skb, struct packet_type *pt_prev) @@ -1454,6 +1453,7 @@ return ret; } +#endif #ifdef CONFIG_NET_DIVERT static inline int handle_diverter(struct sk_buff *skb) @@ -1510,12 +1510,13 @@ #endif /* CONFIG_NET_DIVERT */ #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) - if (skb->dev->br_port && br_handle_frame_hook) { + if (skb->dev->br_port) { int ret; ret = handle_bridge(skb, pt_prev); - if (br_handle_frame_hook(skb) == 0) + if (br_handle_frame_hook(skb) == 0) return ret; + pt_prev = NULL; } #endif @@ -2815,7 +2816,7 @@ extern void dv_init(void); #endif /* CONFIG_NET_DIVERT */ -static decl_subsys(net,NULL); +static decl_subsys(net,NULL,NULL); /* diff -Nru a/net/core/netfilter.c b/net/core/netfilter.c --- a/net/core/netfilter.c Sat Apr 12 14:44:07 2003 +++ b/net/core/netfilter.c Sat Apr 12 14:44:07 2003 @@ -477,11 +477,6 @@ unsigned int verdict; int ret = 0; - /* This stopgap cannot be removed until all the hooks are audited. */ - if (skb_is_nonlinear(skb) && skb_linearize(skb, GFP_ATOMIC) != 0) { - kfree_skb(skb); - return -ENOMEM; - } if (skb->ip_summed == CHECKSUM_HW) { if (outdev == NULL) { skb->ip_summed = CHECKSUM_NONE; diff -Nru a/net/core/skbuff.c b/net/core/skbuff.c --- a/net/core/skbuff.c Sat Apr 12 14:44:09 2003 +++ b/net/core/skbuff.c Sat Apr 12 14:44:09 2003 @@ -932,7 +932,7 @@ int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len) { int i, copy; - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); if (offset > (int)skb->len - len) goto fault; @@ -1009,7 +1009,7 @@ unsigned int skb_checksum(const struct sk_buff *skb, int offset, int len, unsigned int csum) { - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); int i, copy = start - offset; int pos = 0; @@ -1085,7 +1085,7 @@ unsigned int skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to, int len, unsigned int csum) { - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); int i, copy = start - offset; int pos = 0; @@ -1170,9 +1170,9 @@ if (skb->ip_summed == CHECKSUM_HW) csstart = skb->h.raw - skb->data; else - csstart = skb->len - skb->data_len; + csstart = skb_headlen(skb); - if (csstart > skb->len - skb->data_len) + if (csstart > skb_headlen(skb)) BUG(); memcpy(to, skb->data, csstart); diff -Nru a/net/core/wireless.c b/net/core/wireless.c --- a/net/core/wireless.c Sat Apr 12 14:44:09 2003 +++ b/net/core/wireless.c Sat Apr 12 14:44:09 2003 @@ -54,6 +54,7 @@ #include /* rtnetlink stuff */ #include #include /* Pretty obvious */ +#include /* for __init */ #include /* New driver API */ diff -Nru a/net/ipv4/Kconfig b/net/ipv4/Kconfig --- a/net/ipv4/Kconfig Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/Kconfig Sat Apr 12 14:44:09 2003 @@ -362,5 +362,13 @@ If unsure, say Y. +config INET_IPCOMP + tristate "IP: IPComp transformation" + ---help--- + Support for IP Paylod Compression (RFC3173), typically needed + for IPsec. + + If unsure, say Y. + source "net/ipv4/netfilter/Kconfig" diff -Nru a/net/ipv4/Makefile b/net/ipv4/Makefile --- a/net/ipv4/Makefile Sat Apr 12 14:44:06 2003 +++ b/net/ipv4/Makefile Sat Apr 12 14:44:06 2003 @@ -18,7 +18,8 @@ obj-$(CONFIG_SYN_COOKIES) += syncookies.o obj-$(CONFIG_INET_AH) += ah.o obj-$(CONFIG_INET_ESP) += esp.o +obj-$(CONFIG_INET_IPCOMP) += ipcomp.o obj-$(CONFIG_IP_PNP) += ipconfig.o obj-$(CONFIG_NETFILTER) += netfilter/ -obj-y += xfrm4_policy.o xfrm4_state.o xfrm4_input.o +obj-y += xfrm4_policy.o xfrm4_state.o xfrm4_input.o xfrm4_tunnel.o diff -Nru a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c --- a/net/ipv4/af_inet.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv4/af_inet.c Sat Apr 12 14:44:06 2003 @@ -1108,6 +1108,8 @@ } } + (void) tcp_mib_init(); + return 0; } diff -Nru a/net/ipv4/ah.c b/net/ipv4/ah.c --- a/net/ipv4/ah.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/ah.c Sat Apr 12 14:44:09 2003 @@ -314,12 +314,14 @@ crypto_free_tfm(ahp->tfm); ahp->tfm = NULL; } + kfree(ahp); } static struct xfrm_type ah_type = { .description = "AH4", + .owner = THIS_MODULE, .proto = IPPROTO_AH, .init_state = ah_init_state, .destructor = ah_destroy, @@ -335,7 +337,6 @@ static int __init ah4_init(void) { - SET_MODULE_OWNER(&ah_type); if (xfrm_register_type(&ah_type, AF_INET) < 0) { printk(KERN_INFO "ip ah init: can't add xfrm type\n"); return -EAGAIN; diff -Nru a/net/ipv4/esp.c b/net/ipv4/esp.c --- a/net/ipv4/esp.c Sat Apr 12 14:44:08 2003 +++ b/net/ipv4/esp.c Sat Apr 12 14:44:08 2003 @@ -452,6 +452,7 @@ kfree(esp->auth.work_icv); esp->auth.work_icv = NULL; } + kfree(esp); } int esp_init_state(struct xfrm_state *x, void *args) @@ -552,6 +553,7 @@ static struct xfrm_type esp_type = { .description = "ESP4", + .owner = THIS_MODULE, .proto = IPPROTO_ESP, .init_state = esp_init_state, .destructor = esp_destroy, diff -Nru a/net/ipv4/igmp.c b/net/ipv4/igmp.c --- a/net/ipv4/igmp.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv4/igmp.c Sat Apr 12 14:44:10 2003 @@ -68,6 +68,8 @@ * Alan Cox: Forget to enable FDDI support earlier. * Alexey Kuznetsov: Fixed leaving groups on device down. * Alexey Kuznetsov: Accordance to igmp-v2-06 draft. + * David L Stevens: IGMPv3 support, with help from + * Vinay Kulkarni */ @@ -101,12 +103,10 @@ #define IP_MAX_MEMBERSHIPS 20 -#ifdef CONFIG_IP_MULTICAST - - /* Parameter names and values are taken from igmp-v2-06 draft */ #define IGMP_V1_Router_Present_Timeout (400*HZ) +#define IGMP_V2_Router_Present_Timeout (400*HZ) #define IGMP_Unsolicited_Report_Interval (10*HZ) #define IGMP_Query_Response_Interval (10*HZ) #define IGMP_Unsolicited_Report_Count 2 @@ -121,9 +121,21 @@ * contradict to specs provided this delay is small enough. */ -#define IGMP_V1_SEEN(in_dev) ((in_dev)->mr_v1_seen && (long)(jiffies - (in_dev)->mr_v1_seen) < 0) +#define IGMP_V1_SEEN(in_dev) ((in_dev)->mr_v1_seen && \ + time_before(jiffies, (in_dev)->mr_v1_seen)) +#define IGMP_V2_SEEN(in_dev) ((in_dev)->mr_v2_seen && \ + time_before(jiffies, (in_dev)->mr_v2_seen)) +#ifdef CONFIG_MULTICAST +static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im); #endif +static void igmpv3_del_delrec(struct in_device *in_dev, __u32 multiaddr); +static void igmpv3_clear_delrec(struct in_device *in_dev); +static int sf_setstate(struct ip_mc_list *pmc); +static void sf_markstate(struct ip_mc_list *pmc); +static void ip_mc_clear_src(struct ip_mc_list *pmc); +int ip_mc_add_src(struct in_device *in_dev, __u32 *pmca, int sfmode, + int sfcount, __u32 *psfsrc, int delta); static void ip_ma_put(struct ip_mc_list *im) { @@ -160,6 +172,23 @@ atomic_inc(&im->refcnt); } +static void igmp_gq_start_timer(struct in_device *in_dev) +{ + int tv = net_random() % in_dev->mr_maxdelay; + + in_dev->mr_gq_running = 1; + if (!mod_timer(&in_dev->mr_gq_timer, jiffies+tv+2)) + atomic_inc(&in_dev->refcnt); +} + +static void igmp_ifc_start_timer(struct in_device *in_dev, int delay) +{ + int tv = net_random() % delay; + + if (!mod_timer(&in_dev->mr_ifc_timer, jiffies+tv+2)) + atomic_inc(&in_dev->refcnt); +} + static void igmp_mod_timer(struct ip_mc_list *im, int max_delay) { spin_lock_bh(&im->lock); @@ -184,20 +213,396 @@ #define IGMP_SIZE (sizeof(struct igmphdr)+sizeof(struct iphdr)+4) -static int igmp_send_report(struct net_device *dev, u32 group, int type) + +static int is_in(struct ip_mc_list *pmc, struct ip_sf_list *psf, int type, + int gdeleted, int sdeleted) +{ + switch (type) { + case IGMPV3_MODE_IS_INCLUDE: + case IGMPV3_MODE_IS_EXCLUDE: + if (gdeleted || sdeleted) + return 0; + return !(pmc->gsquery && !psf->sf_gsresp); + case IGMPV3_CHANGE_TO_INCLUDE: + if (gdeleted || sdeleted) + return 0; + return psf->sf_count[MCAST_INCLUDE] != 0; + case IGMPV3_CHANGE_TO_EXCLUDE: + if (gdeleted || sdeleted) + return 0; + if (pmc->sfcount[MCAST_EXCLUDE] == 0 || + psf->sf_count[MCAST_INCLUDE]) + return 0; + return pmc->sfcount[MCAST_EXCLUDE] == + psf->sf_count[MCAST_EXCLUDE]; + case IGMPV3_ALLOW_NEW_SOURCES: + if (gdeleted || !psf->sf_crcount) + return 0; + return (pmc->sfmode == MCAST_INCLUDE) ^ sdeleted; + case IGMPV3_BLOCK_OLD_SOURCES: + if (pmc->sfmode == MCAST_INCLUDE) + return gdeleted || (psf->sf_crcount && sdeleted); + return psf->sf_crcount && !gdeleted && !sdeleted; + } + return 0; +} + +static int +igmp_scount(struct ip_mc_list *pmc, int type, int gdeleted, int sdeleted) +{ + struct ip_sf_list *psf; + int scount = 0; + + for (psf=pmc->sources; psf; psf=psf->sf_next) { + if (!is_in(pmc, psf, type, gdeleted, sdeleted)) + continue; + scount++; + } + return scount; +} + +static struct sk_buff *igmpv3_newpack(struct net_device *dev, int size) +{ + struct sk_buff *skb; + struct rtable *rt; + struct iphdr *pip; + struct igmpv3_report *pig; + + skb = alloc_skb(size + dev->hard_header_len + 15, GFP_ATOMIC); + if (skb == NULL) + return 0; + + { + struct flowi fl = { .oif = dev->ifindex, + .nl_u = { .ip4_u = { + .daddr = IGMPV3_ALL_MCR } }, + .proto = IPPROTO_IGMP }; + if (ip_route_output_key(&rt, &fl)) + return 0; + } + if (rt->rt_src == 0) { + ip_rt_put(rt); + return 0; + } + + skb->dst = &rt->u.dst; + skb->dev = dev; + + skb_reserve(skb, (dev->hard_header_len+15)&~15); + + skb->nh.iph = pip =(struct iphdr *)skb_put(skb, sizeof(struct iphdr)+4); + + pip->version = 4; + pip->ihl = (sizeof(struct iphdr)+4)>>2; + pip->tos = 0xc0; + pip->frag_off = htons(IP_DF); + pip->ttl = 1; + pip->daddr = rt->rt_dst; + pip->saddr = rt->rt_src; + pip->protocol = IPPROTO_IGMP; + pip->tot_len = 0; /* filled in later */ + ip_select_ident(pip, &rt->u.dst, NULL); + ((u8*)&pip[1])[0] = IPOPT_RA; + ((u8*)&pip[1])[1] = 4; + ((u8*)&pip[1])[2] = 0; + ((u8*)&pip[1])[3] = 0; + + pig =(struct igmpv3_report *)skb_put(skb, sizeof(*pig)); + skb->h.igmph = (struct igmphdr *)pig; + pig->type = IGMPV3_HOST_MEMBERSHIP_REPORT; + pig->resv1 = 0; + pig->csum = 0; + pig->resv2 = 0; + pig->ngrec = 0; + return skb; +} + +static int igmpv3_sendpack(struct sk_buff *skb) +{ + struct iphdr *pip = skb->nh.iph; + struct igmphdr *pig = skb->h.igmph; + int iplen, igmplen; + + iplen = skb->tail - (unsigned char *)skb->nh.iph; + pip->tot_len = htons(iplen); + ip_send_check(pip); + + igmplen = skb->tail - (unsigned char *)skb->h.igmph; + pig->csum = ip_compute_csum((void *)skb->h.igmph, igmplen); + + return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dev, + dst_output); +} + +static int grec_size(struct ip_mc_list *pmc, int type, int gdel, int sdel) +{ + return sizeof(struct igmpv3_grec) + 4*igmp_scount(pmc,type,gdel,sdel); +} + +static struct sk_buff *add_grhead(struct sk_buff *skb, struct ip_mc_list *pmc, + int type, struct igmpv3_grec **ppgr) +{ + struct net_device *dev = pmc->interface->dev; + struct igmpv3_report *pih; + struct igmpv3_grec *pgr; + + if (!skb) + skb = igmpv3_newpack(dev, dev->mtu); + if (!skb) + return 0; + pgr = (struct igmpv3_grec *)skb_put(skb, sizeof(struct igmpv3_grec)); + pgr->grec_type = type; + pgr->grec_auxwords = 0; + pgr->grec_nsrcs = 0; + pgr->grec_mca = pmc->multiaddr; + pih = (struct igmpv3_report *)skb->h.igmph; + pih->ngrec = htons(ntohs(pih->ngrec)+1); + *ppgr = pgr; + return skb; +} + +#define AVAILABLE(skb) ((skb) ? ((skb)->dev ? (skb)->dev->mtu - (skb)->len : \ + skb_tailroom(skb)) : 0) + +static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc, + int type, int gdeleted, int sdeleted) +{ + struct net_device *dev = pmc->interface->dev; + struct igmpv3_report *pih; + struct igmpv3_grec *pgr = 0; + struct ip_sf_list *psf, *psf_next, *psf_prev, *psf_list; + int scount, first, isquery, truncate; + + if (pmc->multiaddr == IGMP_ALL_HOSTS) + return skb; + + isquery = type == IGMPV3_MODE_IS_INCLUDE || + type == IGMPV3_MODE_IS_EXCLUDE; + truncate = type == IGMPV3_MODE_IS_EXCLUDE || + type == IGMPV3_CHANGE_TO_EXCLUDE; + + psf_list = sdeleted ? pmc->tomb : pmc->sources; + + if (!psf_list) { + if (type == IGMPV3_ALLOW_NEW_SOURCES || + type == IGMPV3_BLOCK_OLD_SOURCES) + return skb; + if (pmc->crcount || isquery) + skb = add_grhead(skb, pmc, type, &pgr); + return skb; + } + pih = skb ? (struct igmpv3_report *)skb->h.igmph : 0; + + /* EX and TO_EX get a fresh packet, if needed */ + if (truncate) { + if (pih && pih->ngrec && + AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) { + if (skb) + igmpv3_sendpack(skb); + skb = igmpv3_newpack(dev, dev->mtu); + } + } + first = 1; + scount = 0; + psf_prev = 0; + for (psf=psf_list; psf; psf=psf_next) { + u32 *psrc; + + psf_next = psf->sf_next; + + if (!is_in(pmc, psf, type, gdeleted, sdeleted)) { + psf_prev = psf; + continue; + } + + /* clear marks on query responses */ + if (isquery) + psf->sf_gsresp = 0; + + if (AVAILABLE(skb) < sizeof(u32) + + first*sizeof(struct igmpv3_grec)) { + if (truncate && !first) + break; /* truncate these */ + if (pgr) + pgr->grec_nsrcs = htons(scount); + if (skb) + igmpv3_sendpack(skb); + skb = igmpv3_newpack(dev, dev->mtu); + first = 1; + scount = 0; + } + if (first) { + skb = add_grhead(skb, pmc, type, &pgr); + first = 0; + } + psrc = (u32 *)skb_put(skb, sizeof(u32)); + *psrc = psf->sf_inaddr; + scount++; + if ((type == IGMPV3_ALLOW_NEW_SOURCES || + type == IGMPV3_BLOCK_OLD_SOURCES) && psf->sf_crcount) { + psf->sf_crcount--; + if ((sdeleted || gdeleted) && psf->sf_crcount == 0) { + if (psf_prev) + psf_prev->sf_next = psf->sf_next; + else + pmc->tomb = psf->sf_next; + kfree(psf); + continue; + } + } + psf_prev = psf; + } + if (pgr) + pgr->grec_nsrcs = htons(scount); + + if (isquery) + pmc->gsquery = 0; /* clear query state on report */ + return skb; +} + +static int igmpv3_send_report(struct in_device *in_dev, struct ip_mc_list *pmc) +{ + struct sk_buff *skb = 0; + int type; + + if (!pmc) { + read_lock(&in_dev->lock); + for (pmc=in_dev->mc_list; pmc; pmc=pmc->next) { + if (pmc->multiaddr == IGMP_ALL_HOSTS) + continue; + spin_lock_bh(&pmc->lock); + if (pmc->sfcount[MCAST_EXCLUDE]) + type = IGMPV3_MODE_IS_EXCLUDE; + else + type = IGMPV3_MODE_IS_INCLUDE; + skb = add_grec(skb, pmc, type, 0, 0); + spin_unlock_bh(&pmc->lock); + } + read_unlock(&in_dev->lock); + } else { + spin_lock_bh(&pmc->lock); + if (pmc->sfcount[MCAST_EXCLUDE]) + type = IGMPV3_MODE_IS_EXCLUDE; + else + type = IGMPV3_MODE_IS_INCLUDE; + skb = add_grec(skb, pmc, type, 0, 0); + spin_unlock_bh(&pmc->lock); + } + if (!skb) + return 0; + return igmpv3_sendpack(skb); +} + +/* + * remove zero-count source records from a source filter list + */ +static void igmpv3_clear_zeros(struct ip_sf_list **ppsf) +{ + struct ip_sf_list *psf_prev, *psf_next, *psf; + + psf_prev = 0; + for (psf=*ppsf; psf; psf = psf_next) { + psf_next = psf->sf_next; + if (psf->sf_crcount == 0) { + if (psf_prev) + psf_prev->sf_next = psf->sf_next; + else + *ppsf = psf->sf_next; + kfree(psf); + } else + psf_prev = psf; + } +} + +static void igmpv3_send_cr(struct in_device *in_dev) +{ + struct ip_mc_list *pmc, *pmc_prev, *pmc_next; + struct sk_buff *skb = 0; + int type, dtype; + + read_lock(&in_dev->lock); + write_lock_bh(&in_dev->mc_lock); + + /* deleted MCA's */ + pmc_prev = 0; + for (pmc=in_dev->mc_tomb; pmc; pmc=pmc_next) { + pmc_next = pmc->next; + if (pmc->sfmode == MCAST_INCLUDE) { + type = IGMPV3_BLOCK_OLD_SOURCES; + dtype = IGMPV3_BLOCK_OLD_SOURCES; + skb = add_grec(skb, pmc, type, 1, 0); + skb = add_grec(skb, pmc, dtype, 1, 1); + } + if (pmc->crcount) { + pmc->crcount--; + if (pmc->sfmode == MCAST_EXCLUDE) { + type = IGMPV3_CHANGE_TO_INCLUDE; + skb = add_grec(skb, pmc, type, 1, 0); + } + if (pmc->crcount == 0) { + igmpv3_clear_zeros(&pmc->tomb); + igmpv3_clear_zeros(&pmc->sources); + } + } + if (pmc->crcount == 0 && !pmc->tomb && !pmc->sources) { + if (pmc_prev) + pmc_prev->next = pmc_next; + else + in_dev->mc_tomb = pmc_next; + in_dev_put(pmc->interface); + kfree(pmc); + } else + pmc_prev = pmc; + } + write_unlock_bh(&in_dev->mc_lock); + + /* change recs */ + for (pmc=in_dev->mc_list; pmc; pmc=pmc->next) { + spin_lock_bh(&pmc->lock); + if (pmc->sfcount[MCAST_EXCLUDE]) { + type = IGMPV3_BLOCK_OLD_SOURCES; + dtype = IGMPV3_ALLOW_NEW_SOURCES; + } else { + type = IGMPV3_ALLOW_NEW_SOURCES; + dtype = IGMPV3_BLOCK_OLD_SOURCES; + } + skb = add_grec(skb, pmc, type, 0, 0); + skb = add_grec(skb, pmc, dtype, 0, 1); /* deleted sources */ + + /* filter mode changes */ + if (pmc->crcount) { + pmc->crcount--; + if (pmc->sfmode == MCAST_EXCLUDE) + type = IGMPV3_CHANGE_TO_EXCLUDE; + else + type = IGMPV3_CHANGE_TO_INCLUDE; + skb = add_grec(skb, pmc, type, 0, 0); + } + spin_unlock_bh(&pmc->lock); + } + read_unlock(&in_dev->lock); + if (!skb) + return; + (void) igmpv3_sendpack(skb); +} + +static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc, + int type) { struct sk_buff *skb; struct iphdr *iph; struct igmphdr *ih; struct rtable *rt; + struct net_device *dev = in_dev->dev; + u32 group = pmc ? pmc->multiaddr : 0; u32 dst; - /* According to IGMPv2 specs, LEAVE messages are - * sent to all-routers group. - */ - dst = group; - if (type == IGMP_HOST_LEAVE_MESSAGE) + if (type == IGMPV3_HOST_MEMBERSHIP_REPORT) + return igmpv3_send_report(in_dev, pmc); + else if (type == IGMP_HOST_LEAVE_MESSAGE) dst = IGMP_ALL_ROUTER; + else + dst = group; { struct flowi fl = { .oif = dev->ifindex, @@ -225,7 +630,7 @@ iph->version = 4; iph->ihl = (sizeof(struct iphdr)+4)>>2; - iph->tos = 0; + iph->tos = 0xc0; iph->frag_off = htons(IP_DF); iph->ttl = 1; iph->daddr = dst; @@ -250,6 +655,34 @@ dst_output); } +static void igmp_gq_timer_expire(unsigned long data) +{ + struct in_device *in_dev = (struct in_device *)data; + + in_dev->mr_gq_running = 0; + igmpv3_send_report(in_dev, 0); +} + +static void igmp_ifc_timer_expire(unsigned long data) +{ + struct in_device *in_dev = (struct in_device *)data; + + igmpv3_send_cr(in_dev); + if (in_dev->mr_ifc_count) { + in_dev->mr_ifc_count--; + igmp_ifc_start_timer(in_dev, IGMP_Unsolicited_Report_Interval); + } +} + +static void igmp_ifc_event(struct in_device *in_dev) +{ + if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) + return; + in_dev->mr_ifc_count = in_dev->mr_qrv ? in_dev->mr_qrv : + IGMP_Unsolicited_Report_Count; + igmp_ifc_start_timer(in_dev, 1); +} + static void igmp_timer_expire(unsigned long data) { @@ -267,13 +700,33 @@ spin_unlock(&im->lock); if (IGMP_V1_SEEN(in_dev)) - igmp_send_report(in_dev->dev, im->multiaddr, IGMP_HOST_MEMBERSHIP_REPORT); + igmp_send_report(in_dev, im, IGMP_HOST_MEMBERSHIP_REPORT); + else if (IGMP_V2_SEEN(in_dev)) + igmp_send_report(in_dev, im, IGMPV2_HOST_MEMBERSHIP_REPORT); else - igmp_send_report(in_dev->dev, im->multiaddr, IGMP_HOST_NEW_MEMBERSHIP_REPORT); + igmp_send_report(in_dev, im, IGMPV3_HOST_MEMBERSHIP_REPORT); ip_ma_put(im); } +static void igmp_marksources(struct ip_mc_list *pmc, int nsrcs, __u32 *srcs) +{ + struct ip_sf_list *psf; + int i, scount; + + scount = 0; + for (psf=pmc->sources; psf; psf=psf->sf_next) { + if (scount == nsrcs) + break; + for (i=0; isf_inaddr) { + psf->sf_gsresp = 1; + scount++; + break; + } + } +} + static void igmp_heard_report(struct in_device *in_dev, u32 group) { struct ip_mc_list *im; @@ -293,20 +746,46 @@ read_unlock(&in_dev->lock); } -static void igmp_heard_query(struct in_device *in_dev, unsigned char max_resp_time, - u32 group) +static void igmp_heard_query(struct in_device *in_dev, struct igmphdr *ih, + int len) { + struct igmpv3_query *ih3 = (struct igmpv3_query *)ih; struct ip_mc_list *im; + u32 group = ih->group; int max_delay; + int mark = 0; - max_delay = max_resp_time*(HZ/IGMP_TIMER_SCALE); - if (max_resp_time == 0) { - /* Alas, old v1 router presents here. */ - - max_delay = IGMP_Query_Response_Interval; - in_dev->mr_v1_seen = jiffies + IGMP_V1_Router_Present_Timeout; - group = 0; + if (len == 8) { + if (ih->code == 0) { + /* Alas, old v1 router presents here. */ + + max_delay = IGMP_Query_Response_Interval; + in_dev->mr_v1_seen = jiffies + + IGMP_V1_Router_Present_Timeout; + group = 0; + } else { + /* v2 router present */ + max_delay = ih->code*(HZ/IGMP_TIMER_SCALE); + in_dev->mr_v2_seen = jiffies + + IGMP_V2_Router_Present_Timeout; + } + igmpv3_clear_delrec(in_dev); + } else if (len < 12) { + return; /* ignore bogus packet; freed by caller */ + } else { /* v3 */ + max_delay = IGMPV3_MRC(ih3->code)*(HZ/IGMP_TIMER_SCALE); + in_dev->mr_maxdelay = max_delay; + if (ih3->qrv) + in_dev->mr_qrv = ih3->qrv; + if (!group) { /* general query */ + if (ih3->nsrcs) + return; /* no sources allowed */ + igmp_gq_start_timer(in_dev); + return; + } + /* mark sources to include, if group & source-specific */ + mark = ih3->nsrcs != 0; } /* @@ -325,6 +804,14 @@ continue; if (im->multiaddr == IGMP_ALL_HOSTS) continue; + spin_lock_bh(&im->lock); + if (im->tm_running) + im->gsquery = im->gsquery && mark; + else + im->gsquery = mark; + if (im->gsquery) + igmp_marksources(im, ntohs(ih3->nsrcs), ih3->srcs); + spin_unlock_bh(&im->lock); igmp_mod_timer(im, max_delay); } read_unlock(&in_dev->lock); @@ -358,10 +845,11 @@ switch (ih->type) { case IGMP_HOST_MEMBERSHIP_QUERY: - igmp_heard_query(in_dev, ih->code, ih->group); + igmp_heard_query(in_dev, ih, len); break; case IGMP_HOST_MEMBERSHIP_REPORT: - case IGMP_HOST_NEW_MEMBERSHIP_REPORT: + case IGMPV2_HOST_MEMBERSHIP_REPORT: + case IGMPV3_HOST_MEMBERSHIP_REPORT: /* Is it our report looped back? */ if (((struct rtable*)skb->dst)->fl.iif == 0) break; @@ -422,15 +910,105 @@ dev_mc_delete(dev,buf,dev->addr_len,0); } +#ifdef CONFIG_IP_MULTICAST +/* + * deleted ip_mc_list manipulation + */ +static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im) +{ + struct ip_mc_list *pmc; + + /* this is an "ip_mc_list" for convenience; only the fields below + * are actually used. In particular, the refcnt and users are not + * used for management of the delete list. Using the same structure + * for deleted items allows change reports to use common code with + * non-deleted or query-response MCA's. + */ + pmc = (struct ip_mc_list *)kmalloc(sizeof(*pmc), GFP_KERNEL); + if (!pmc) + return; + memset(pmc, 0, sizeof(*pmc)); + spin_lock_bh(&im->lock); + pmc->interface = im->interface; + in_dev_hold(in_dev); + pmc->multiaddr = im->multiaddr; + pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv : + IGMP_Unsolicited_Report_Count; + pmc->sfmode = im->sfmode; + if (pmc->sfmode == MCAST_INCLUDE) { + struct ip_sf_list *psf; + + pmc->tomb = im->tomb; + pmc->sources = im->sources; + im->tomb = im->sources = 0; + for (psf=pmc->sources; psf; psf=psf->sf_next) + psf->sf_crcount = pmc->crcount; + } + spin_unlock_bh(&im->lock); + + write_lock_bh(&in_dev->mc_lock); + pmc->next = in_dev->mc_tomb; + in_dev->mc_tomb = pmc; + write_unlock_bh(&in_dev->mc_lock); +} +#endif + +static void igmpv3_del_delrec(struct in_device *in_dev, __u32 multiaddr) +{ + struct ip_mc_list *pmc, *pmc_prev; + struct ip_sf_list *psf, *psf_next; + + write_lock_bh(&in_dev->mc_lock); + pmc_prev = 0; + for (pmc=in_dev->mc_tomb; pmc; pmc=pmc->next) { + if (pmc->multiaddr == multiaddr) + break; + pmc_prev = pmc; + } + if (pmc) { + if (pmc_prev) + pmc_prev->next = pmc->next; + else + in_dev->mc_tomb = pmc->next; + } + write_unlock_bh(&in_dev->mc_lock); + if (pmc) { + for (psf=pmc->tomb; psf; psf=psf_next) { + psf_next = psf->sf_next; + kfree(psf); + } + in_dev_put(pmc->interface); + kfree(pmc); + } +} + +static void igmpv3_clear_delrec(struct in_device *in_dev) +{ + struct ip_mc_list *pmc, *nextpmc; + + write_lock_bh(&in_dev->mc_lock); + pmc = in_dev->mc_tomb; + in_dev->mc_tomb = 0; + write_unlock_bh(&in_dev->mc_lock); + + for (; pmc; pmc = nextpmc) { + nextpmc = pmc->next; + ip_mc_clear_src(pmc); + in_dev_put(pmc->interface); + kfree(pmc); + } +} + static void igmp_group_dropped(struct ip_mc_list *im) { + struct in_device *in_dev = im->interface; #ifdef CONFIG_IP_MULTICAST int reporter; #endif if (im->loaded) { im->loaded = 0; - ip_mc_filter_del(im->interface, im->multiaddr); + ip_mc_filter_del(in_dev, im->multiaddr); } #ifdef CONFIG_IP_MULTICAST @@ -440,25 +1018,46 @@ reporter = im->reporter; igmp_stop_timer(im); - if (reporter && !IGMP_V1_SEEN(im->interface)) - igmp_send_report(im->interface->dev, im->multiaddr, IGMP_HOST_LEAVE_MESSAGE); + if (IGMP_V1_SEEN(in_dev)) + goto done; + if (IGMP_V2_SEEN(in_dev)) { + if (reporter) + igmp_send_report(in_dev, im, IGMP_HOST_LEAVE_MESSAGE); + goto done; + } + /* IGMPv3 */ + igmpv3_add_delrec(in_dev, im); + + igmp_ifc_event(in_dev); +done: + ip_mc_clear_src(im); #endif } static void igmp_group_added(struct ip_mc_list *im) { + struct in_device *in_dev = im->interface; + if (im->loaded == 0) { im->loaded = 1; - ip_mc_filter_add(im->interface, im->multiaddr); + ip_mc_filter_add(in_dev, im->multiaddr); } #ifdef CONFIG_IP_MULTICAST if (im->multiaddr == IGMP_ALL_HOSTS) return; - spin_lock_bh(&im->lock); - igmp_start_timer(im, IGMP_Initial_Report_Delay); - spin_unlock_bh(&im->lock); + if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) { + spin_lock_bh(&im->lock); + igmp_start_timer(im, IGMP_Initial_Report_Delay); + spin_unlock_bh(&im->lock); + return; + } + /* else, v3 */ + + im->crcount = in_dev->mr_qrv ? in_dev->mr_qrv : + IGMP_Unsolicited_Report_Count; + igmp_ifc_event(in_dev); #endif } @@ -481,6 +1080,7 @@ for (im=in_dev->mc_list; im; im=im->next) { if (im->multiaddr == addr) { im->users++; + ip_mc_add_src(in_dev, &addr, MCAST_EXCLUDE, 0, 0, 0); goto out; } } @@ -493,6 +1093,13 @@ im->interface=in_dev; in_dev_hold(in_dev); im->multiaddr=addr; + /* initial mode is (EX, empty) */ + im->sfmode = MCAST_EXCLUDE; + im->sfcount[MCAST_INCLUDE] = 0; + im->sfcount[MCAST_EXCLUDE] = 1; + im->sources = 0; + im->tomb = 0; + im->crcount = 0; atomic_set(&im->refcnt, 1); spin_lock_init(&im->lock); #ifdef CONFIG_IP_MULTICAST @@ -502,12 +1109,14 @@ im->timer.function=&igmp_timer_expire; im->unsolicit_count = IGMP_Unsolicited_Report_Count; im->reporter = 0; + im->gsquery = 0; #endif im->loaded = 0; write_lock_bh(&in_dev->lock); im->next=in_dev->mc_list; in_dev->mc_list=im; write_unlock_bh(&in_dev->lock); + igmpv3_del_delrec(in_dev, im->multiaddr); igmp_group_added(im); if (in_dev->dev->flags & IFF_UP) ip_rt_multicast_event(in_dev); @@ -552,9 +1161,20 @@ ASSERT_RTNL(); +#ifdef CONFIG_IP_MULTICAST + in_dev->mr_ifc_count = 0; + if (del_timer(&in_dev->mr_ifc_timer)) + atomic_dec(&in_dev->refcnt); + in_dev->mr_gq_running = 0; + if (del_timer(&in_dev->mr_gq_timer)) + atomic_dec(&in_dev->refcnt); +#endif + for (i=in_dev->mc_list; i; i=i->next) igmp_group_dropped(i); + igmpv3_clear_delrec(in_dev); + ip_mc_dec_group(in_dev, IGMP_ALL_HOSTS); } @@ -566,6 +1186,20 @@ ASSERT_RTNL(); +#ifdef CONFIG_IP_MULTICAST + in_dev->mr_gq_running = 0; + init_timer(&in_dev->mr_gq_timer); + in_dev->mr_gq_timer.data=(unsigned long) in_dev; + in_dev->mr_gq_timer.function=&igmp_gq_timer_expire; + in_dev->mc_tomb = 0; + in_dev->mr_ifc_count = 0; + init_timer(&in_dev->mr_ifc_timer); + in_dev->mr_ifc_timer.data=(unsigned long) in_dev; + in_dev->mr_ifc_timer.function=&igmp_ifc_timer_expire; + in_dev->mr_qrv = IGMP_Unsolicited_Report_Count; +#endif + + in_dev->mc_lock = RW_LOCK_UNLOCKED; ip_mc_inc_group(in_dev, IGMP_ALL_HOSTS); for (i=in_dev->mc_list; i; i=i->next) @@ -626,6 +1260,262 @@ */ int sysctl_igmp_max_memberships = IP_MAX_MEMBERSHIPS; + +static int ip_mc_del1_src(struct ip_mc_list *pmc, int sfmode, + __u32 *psfsrc) +{ + struct ip_sf_list *psf, *psf_prev; + int rv = 0; + + psf_prev = 0; + for (psf=pmc->sources; psf; psf=psf->sf_next) { + if (psf->sf_inaddr == *psfsrc) + break; + psf_prev = psf; + } + if (!psf || psf->sf_count[sfmode] == 0) { + /* source filter not found, or count wrong => bug */ + return -ESRCH; + } + psf->sf_count[sfmode]--; + if (psf->sf_count[sfmode] == 0) { + ip_rt_multicast_event(pmc->interface); + } + if (!psf->sf_count[MCAST_INCLUDE] && !psf->sf_count[MCAST_EXCLUDE]) { + struct in_device *in_dev = pmc->interface; + + /* no more filters for this source */ + if (psf_prev) + psf_prev->sf_next = psf->sf_next; + else + pmc->sources = psf->sf_next; + if (psf->sf_oldin && + !IGMP_V1_SEEN(in_dev) && !IGMP_V2_SEEN(in_dev)) { + psf->sf_crcount = in_dev->mr_qrv ? in_dev->mr_qrv : + IGMP_Unsolicited_Report_Count; + psf->sf_next = pmc->tomb; + pmc->tomb = psf; + rv = 1; + } else + kfree(psf); + } + return rv; +} + +#ifndef CONFIG_IP_MULTICAST +#define igmp_ifc_event(x) do { } while (0) +#endif + +int ip_mc_del_src(struct in_device *in_dev, __u32 *pmca, int sfmode, + int sfcount, __u32 *psfsrc, int delta) +{ + struct ip_mc_list *pmc; + int changerec = 0; + int i, err; + + if (!in_dev) + return -ENODEV; + read_lock(&in_dev->lock); + for (pmc=in_dev->mc_list; pmc; pmc=pmc->next) { + if (*pmca == pmc->multiaddr) + break; + } + if (!pmc) { + /* MCA not found?? bug */ + read_unlock(&in_dev->lock); + return -ESRCH; + } + spin_lock_bh(&pmc->lock); + read_unlock(&in_dev->lock); + sf_markstate(pmc); + if (!delta) { + if (!pmc->sfcount[sfmode]) + return -EINVAL; + pmc->sfcount[sfmode]--; + } + err = 0; + for (i=0; i 0; + if (!err && rv < 0) + err = rv; + } + if (pmc->sfmode == MCAST_EXCLUDE && + pmc->sfcount[MCAST_EXCLUDE] == 0 && + pmc->sfcount[MCAST_INCLUDE]) { + struct ip_sf_list *psf; + + /* filter mode change */ + pmc->sfmode = MCAST_INCLUDE; + pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv : + IGMP_Unsolicited_Report_Count; + in_dev->mr_ifc_count = pmc->crcount; + for (psf=pmc->sources; psf; psf = psf->sf_next) + psf->sf_crcount = 0; + igmp_ifc_event(pmc->interface); + } else if (sf_setstate(pmc) || changerec) { + igmp_ifc_event(pmc->interface); + } + spin_unlock_bh(&pmc->lock); + return err; +} + +/* + * Add multicast single-source filter to the interface list + */ +static int ip_mc_add1_src(struct ip_mc_list *pmc, int sfmode, + __u32 *psfsrc, int delta) +{ + struct ip_sf_list *psf, *psf_prev; + + psf_prev = 0; + for (psf=pmc->sources; psf; psf=psf->sf_next) { + if (psf->sf_inaddr == *psfsrc) + break; + psf_prev = psf; + } + if (!psf) { + psf = (struct ip_sf_list *)kmalloc(sizeof(*psf), GFP_ATOMIC); + if (!psf) + return -ENOBUFS; + memset(psf, 0, sizeof(*psf)); + psf->sf_inaddr = *psfsrc; + if (psf_prev) { + psf_prev->sf_next = psf; + } else + pmc->sources = psf; + } + psf->sf_count[sfmode]++; + if (psf->sf_count[sfmode] == 1) { + ip_rt_multicast_event(pmc->interface); + } + return 0; +} + +static void sf_markstate(struct ip_mc_list *pmc) +{ + struct ip_sf_list *psf; + int mca_xcount = pmc->sfcount[MCAST_EXCLUDE]; + + for (psf=pmc->sources; psf; psf=psf->sf_next) + if (pmc->sfcount[MCAST_EXCLUDE]) { + psf->sf_oldin = mca_xcount == + psf->sf_count[MCAST_EXCLUDE] && + !psf->sf_count[MCAST_INCLUDE]; + } else + psf->sf_oldin = psf->sf_count[MCAST_INCLUDE] != 0; +} + +static int sf_setstate(struct ip_mc_list *pmc) +{ + struct ip_sf_list *psf; + int mca_xcount = pmc->sfcount[MCAST_EXCLUDE]; + int qrv = pmc->interface->mr_qrv; + int new_in, rv; + + rv = 0; + for (psf=pmc->sources; psf; psf=psf->sf_next) { + if (pmc->sfcount[MCAST_EXCLUDE]) { + new_in = mca_xcount == psf->sf_count[MCAST_EXCLUDE] && + !psf->sf_count[MCAST_INCLUDE]; + } else + new_in = psf->sf_count[MCAST_INCLUDE] != 0; + if (new_in != psf->sf_oldin) { + psf->sf_crcount = qrv; + rv++; + } + } + return rv; +} + +/* + * Add multicast source filter list to the interface list + */ +int ip_mc_add_src(struct in_device *in_dev, __u32 *pmca, int sfmode, + int sfcount, __u32 *psfsrc, int delta) +{ + struct ip_mc_list *pmc; + int isexclude; + int i, err; + + if (!in_dev) + return -ENODEV; + read_lock(&in_dev->lock); + for (pmc=in_dev->mc_list; pmc; pmc=pmc->next) { + if (*pmca == pmc->multiaddr) + break; + } + if (!pmc) { + /* MCA not found?? bug */ + read_unlock(&in_dev->lock); + return -ESRCH; + } + spin_lock_bh(&pmc->lock); + read_unlock(&in_dev->lock); + + sf_markstate(pmc); + isexclude = pmc->sfmode == MCAST_EXCLUDE; + if (!delta) + pmc->sfcount[sfmode]++; + err = 0; + for (i=0; isfcount[sfmode]--; + for (j=0; jsfcount[MCAST_EXCLUDE] != 0)) { + struct in_device *in_dev = pmc->interface; + struct ip_sf_list *psf; + + /* filter mode change */ + if (pmc->sfcount[MCAST_EXCLUDE]) + pmc->sfmode = MCAST_EXCLUDE; + else if (pmc->sfcount[MCAST_INCLUDE]) + pmc->sfmode = MCAST_INCLUDE; + /* else no filters; keep old mode for reports */ + + pmc->crcount = in_dev->mr_qrv ? in_dev->mr_qrv : + IGMP_Unsolicited_Report_Count; + in_dev->mr_ifc_count = pmc->crcount; + for (psf=pmc->sources; psf; psf = psf->sf_next) + psf->sf_crcount = 0; + igmp_ifc_event(in_dev); + } else if (sf_setstate(pmc)) + igmp_ifc_event(in_dev); + spin_unlock_bh(&pmc->lock); + return err; +} + +static void ip_mc_clear_src(struct ip_mc_list *pmc) +{ + struct ip_sf_list *psf, *nextpsf; + + for (psf=pmc->tomb; psf; psf=nextpsf) { + nextpsf = psf->sf_next; + kfree(psf); + } + pmc->tomb = 0; + for (psf=pmc->sources; psf; psf=nextpsf) { + nextpsf = psf->sf_next; + kfree(psf); + } + pmc->sources = 0; + pmc->sfmode = MCAST_EXCLUDE; + pmc->sfcount[MCAST_EXCLUDE] = 0; + pmc->sfcount[MCAST_EXCLUDE] = 1; +} + + +/* + * Join a multicast group + */ int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr) { int err; @@ -674,6 +1564,8 @@ memcpy(&iml->multi, imr, sizeof(*imr)); iml->next = inet->mc_list; iml->count = 1; + iml->sflist = NULL; + iml->sfmode = MCAST_EXCLUDE; inet->mc_list = iml; ip_mc_inc_group(in_dev, addr); iml = NULL; @@ -686,6 +1578,24 @@ return err; } +int ip_mc_leave_src(struct sock *sk, struct ip_mc_socklist *iml, + struct in_device *in_dev) +{ + int err; + + if (iml->sflist == 0) { + /* any-source empty exclude case */ + return ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, + iml->sfmode, 0, 0, 0); + } + err = ip_mc_del_src(in_dev, &iml->multi.imr_multiaddr.s_addr, + iml->sfmode, iml->sflist->sl_count, + iml->sflist->sl_addr, 0); + sock_kfree_s(sk, iml->sflist, IP_SFLSIZE(iml->sflist->sl_max)); + iml->sflist = 0; + return err; +} + /* * Ask a socket to leave a group. */ @@ -701,14 +1611,19 @@ iml->multi.imr_address.s_addr==imr->imr_address.s_addr && (!imr->imr_ifindex || iml->multi.imr_ifindex==imr->imr_ifindex)) { struct in_device *in_dev; + + in_dev = inetdev_by_index(iml->multi.imr_ifindex); + if (in_dev) + (void) ip_mc_leave_src(sk, iml, in_dev); if (--iml->count) { rtnl_unlock(); + if (in_dev) + in_dev_put(in_dev); return 0; } *imlp = iml->next; - in_dev = inetdev_by_index(iml->multi.imr_ifindex); if (in_dev) { ip_mc_dec_group(in_dev, imr->imr_multiaddr.s_addr); in_dev_put(in_dev); @@ -722,6 +1637,283 @@ return -EADDRNOTAVAIL; } +int ip_mc_source(int add, int omode, struct sock *sk, struct + ip_mreq_source *mreqs) +{ + int err; + struct ip_mreqn imr; + u32 addr = mreqs->imr_multiaddr; + struct ip_mc_socklist *pmc; + struct in_device *in_dev; + struct inet_opt *inet = inet_sk(sk); + struct ip_sf_socklist *psl; + int i, j, rv; + + if (!MULTICAST(addr)) + return -EINVAL; + + rtnl_shlock(); + + imr.imr_multiaddr.s_addr = mreqs->imr_multiaddr; + imr.imr_address.s_addr = mreqs->imr_interface; + imr.imr_ifindex = 0; + in_dev = ip_mc_find_dev(&imr); + + if (!in_dev) { + err = -ENODEV; + goto done; + } + err = -EADDRNOTAVAIL; + + for (pmc=inet->mc_list; pmc; pmc=pmc->next) { + if (memcmp(&pmc->multi, mreqs, 2*sizeof(__u32)) == 0) + break; + } + if (!pmc) /* must have a prior join */ + goto done; + /* if a source filter was set, must be the same mode as before */ + if (pmc->sflist) { + if (pmc->sfmode != omode) + goto done; + } else if (pmc->sfmode != omode) { + /* allow mode switches for empty-set filters */ + ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, pmc->sfmode, 0, + 0, 0); + pmc->sfmode = omode; + ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, pmc->sfmode, 0, + 0, 0); + } + + psl = pmc->sflist; + if (!add) { + if (!psl) + goto done; + rv = !0; + for (i=0; isl_count; i++) { + rv = memcmp(&psl->sl_addr, &mreqs->imr_multiaddr, + sizeof(__u32)); + if (rv >= 0) + break; + } + if (!rv) /* source not found */ + goto done; + + /* update the interface filter */ + ip_mc_del_src(in_dev, &mreqs->imr_multiaddr, omode, 1, + &mreqs->imr_sourceaddr, 1); + + for (j=i+1; jsl_count; j++) + psl->sl_addr[j-1] = psl->sl_addr[j]; + psl->sl_count--; + err = 0; + goto done; + } + /* else, add a new source to the filter */ + + if (!psl || psl->sl_count == psl->sl_max) { + struct ip_sf_socklist *newpsl; + int count = IP_SFBLOCK; + + if (psl) + count += psl->sl_max; + newpsl = (struct ip_sf_socklist *)sock_kmalloc(sk, + IP_SFLSIZE(count), GFP_KERNEL); + if (!newpsl) { + err = -ENOBUFS; + goto done; + } + newpsl->sl_max = count; + newpsl->sl_count = count - IP_SFBLOCK; + if (psl) { + for (i=0; isl_count; i++) + newpsl->sl_addr[i] = psl->sl_addr[i]; + sock_kfree_s(sk, psl, IP_SFLSIZE(psl->sl_max)); + } + pmc->sflist = psl = newpsl; + } + rv = 1; /* > 0 for insert logic below if sl_count is 0 */ + for (i=0; isl_count; i++) { + rv = memcmp(&psl->sl_addr, &mreqs->imr_multiaddr, + sizeof(__u32)); + if (rv >= 0) + break; + } + if (rv == 0) /* address already there is an error */ + goto done; + for (j=psl->sl_count-1; j>=i; j--) + psl->sl_addr[j+1] = psl->sl_addr[j]; + psl->sl_addr[i] = mreqs->imr_sourceaddr; + psl->sl_count++; + err = 0; + /* update the interface list */ + ip_mc_add_src(in_dev, &mreqs->imr_multiaddr, omode, 1, + &mreqs->imr_sourceaddr, 1); +done: + rtnl_shunlock(); + return err; +} + +int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf) +{ + int err; + struct ip_mreqn imr; + u32 addr = msf->imsf_multiaddr; + struct ip_mc_socklist *pmc; + struct in_device *in_dev; + struct inet_opt *inet = inet_sk(sk); + struct ip_sf_socklist *newpsl, *psl; + + if (!MULTICAST(addr)) + return -EINVAL; + if (msf->imsf_fmode != MCAST_INCLUDE && + msf->imsf_fmode != MCAST_EXCLUDE) + return -EINVAL; + + rtnl_shlock(); + + imr.imr_multiaddr.s_addr = msf->imsf_multiaddr; + imr.imr_address.s_addr = msf->imsf_interface; + imr.imr_ifindex = 0; + in_dev = ip_mc_find_dev(&imr); + + if (!in_dev) { + err = -ENODEV; + goto done; + } + err = -EADDRNOTAVAIL; + + for (pmc=inet->mc_list; pmc; pmc=pmc->next) { + if (memcmp(&pmc->multi, &imr, sizeof(imr)) == 0) + break; + } + if (!pmc) /* must have a prior join */ + goto done; + if (msf->imsf_numsrc) { + newpsl = (struct ip_sf_socklist *)sock_kmalloc(sk, + IP_SFLSIZE(msf->imsf_numsrc), GFP_KERNEL); + if (!newpsl) { + err = -ENOBUFS; + goto done; + } + newpsl->sl_max = newpsl->sl_count = msf->imsf_numsrc; + memcpy(newpsl->sl_addr, msf->imsf_slist, + msf->imsf_numsrc * sizeof(msf->imsf_slist[0])); + err = ip_mc_add_src(in_dev, &msf->imsf_multiaddr, + msf->imsf_fmode, newpsl->sl_count, newpsl->sl_addr, 0); + if (err) { + sock_kfree_s(sk, newpsl, IP_SFLSIZE(newpsl->sl_max)); + goto done; + } + } else + newpsl = 0; + psl = pmc->sflist; + if (psl) { + (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode, + psl->sl_count, psl->sl_addr, 0); + sock_kfree_s(sk, psl, IP_SFLSIZE(psl->sl_max)); + } else + (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode, + 0, 0, 0); + pmc->sflist = newpsl; + pmc->sfmode = msf->imsf_fmode; +done: + rtnl_shunlock(); + return err; +} + +int ip_mc_msfget(struct sock *sk, struct ip_msfilter *msf, + struct ip_msfilter *optval, int *optlen) +{ + int err, len, count, copycount; + struct ip_mreqn imr; + u32 addr = msf->imsf_multiaddr; + struct ip_mc_socklist *pmc; + struct in_device *in_dev; + struct inet_opt *inet = inet_sk(sk); + struct ip_sf_socklist *psl; + + if (!MULTICAST(addr)) + return -EINVAL; + if (msf->imsf_fmode != MCAST_INCLUDE && + msf->imsf_fmode != MCAST_EXCLUDE) + return -EINVAL; + + rtnl_shlock(); + + imr.imr_multiaddr.s_addr = msf->imsf_multiaddr; + imr.imr_address.s_addr = msf->imsf_interface; + imr.imr_ifindex = 0; + in_dev = ip_mc_find_dev(&imr); + + if (!in_dev) { + err = -ENODEV; + goto done; + } + err = -EADDRNOTAVAIL; + + for (pmc=inet->mc_list; pmc; pmc=pmc->next) { + if (memcmp(&pmc->multi, &imr, sizeof(imr)) == 0) + break; + } + if (!pmc) /* must have a prior join */ + goto done; + msf->imsf_fmode = pmc->sfmode; + psl = pmc->sflist; + rtnl_shunlock(); + if (!psl) { + len = 0; + count = 0; + } else { + count = psl->sl_count; + } + copycount = count < msf->imsf_numsrc ? count : msf->imsf_numsrc; + len = copycount * sizeof(psl->sl_addr[0]); + msf->imsf_numsrc = count; + if (put_user(IP_MSFILTER_SIZE(copycount), optlen) || + copy_to_user((void *)optval, msf, IP_MSFILTER_SIZE(0))) { + return -EFAULT; + } + if (len && + copy_to_user((void *)&optval->imsf_slist[0], psl->sl_addr, len)) + return -EFAULT; + return 0; +done: + rtnl_shunlock(); + return err; +} + +/* + * check if a multicast source filter allows delivery for a given + */ +int ip_mc_sf_allow(struct sock *sk, u32 loc_addr, u32 rmt_addr, int dif) +{ + struct inet_opt *inet = inet_sk(sk); + struct ip_mc_socklist *pmc; + struct ip_sf_socklist *psl; + int i; + + for (pmc=inet->mc_list; pmc; pmc=pmc->next) { + if (pmc->multi.imr_multiaddr.s_addr == loc_addr && + pmc->multi.imr_ifindex == dif) + break; + } + if (!pmc) + return 0; + psl = pmc->sflist; + if (!psl) + return pmc->sfmode == MCAST_EXCLUDE; + + for (i=0; isl_count; i++) { + if (psl->sl_addr[i] == rmt_addr) + break; + } + if (pmc->sfmode == MCAST_INCLUDE && i < psl->sl_count) + return 1; + if (pmc->sfmode == MCAST_EXCLUDE && i >= psl->sl_count) + return 1; + return 0; +} + /* * A socket is closing. */ @@ -740,6 +1932,7 @@ inet->mc_list = iml->next; if ((in_dev = inetdev_by_index(iml->multi.imr_ifindex)) != NULL) { + (void) ip_mc_leave_src(sk, iml, in_dev); ip_mc_dec_group(in_dev, iml->multi.imr_multiaddr.s_addr); in_dev_put(in_dev); } @@ -749,19 +1942,33 @@ rtnl_unlock(); } -int ip_check_mc(struct in_device *in_dev, u32 mc_addr) +int ip_check_mc(struct in_device *in_dev, u32 mc_addr, u32 src_addr, u16 proto) { struct ip_mc_list *im; + struct ip_sf_list *psf; + int rv = 0; read_lock(&in_dev->lock); for (im=in_dev->mc_list; im; im=im->next) { - if (im->multiaddr == mc_addr) { - read_unlock(&in_dev->lock); - return 1; + if (im->multiaddr == mc_addr) + break; + } + if (im && proto == IPPROTO_IGMP) { + rv = 1; + } else if (im) { + for (psf=im->sources; psf; psf=psf->sf_next) { + if (psf->sf_inaddr == src_addr) + break; } + if (psf) + rv = psf->sf_count[MCAST_INCLUDE] || + psf->sf_count[MCAST_EXCLUDE] != + im->sfcount[MCAST_EXCLUDE]; + else + rv = im->sfcount[MCAST_EXCLUDE] != 0; } read_unlock(&in_dev->lock); - return 0; + return rv; } @@ -822,5 +2029,101 @@ len=0; return len; } + +int ip_mcf_procinfo(char *buffer, char **start, off_t offset, int length) +{ + off_t pos=0, begin=0; + int len=0; + int first = 1; + struct net_device *dev; + + read_lock(&dev_base_lock); + for(dev=dev_base; dev; dev=dev->next) { + struct in_device *in_dev = in_dev_get(dev); + struct ip_mc_list *imc; + + if (in_dev == NULL) + continue; + + read_lock(&in_dev->lock); + + for (imc=in_dev->mc_list; imc; imc=imc->next) { + struct ip_sf_list *psf; + unsigned long icount, xcount; + + spin_lock_bh(&imc->lock); + icount = imc->sfcount[MCAST_INCLUDE]; + xcount = imc->sfcount[MCAST_EXCLUDE]; + for (psf=imc->sources; psf; psf=psf->sf_next) { + if (first) { + len += sprintf(buffer+len, "%3s %6s " + "%10s %10s %6s %6s\n", "Idx", + "Device", "MCA", "SRC", "INC", + "EXC"); + first = 0; + } + len += sprintf(buffer+len, "%3d %6.6s 0x%08x " + "0x%08x %6lu %6lu\n", dev->ifindex, + dev->name, ntohl(imc->multiaddr), + ntohl(psf->sf_inaddr), + psf->sf_count[MCAST_INCLUDE], + psf->sf_count[MCAST_EXCLUDE]); + pos=begin+len; + if(posoffset+length) { + spin_unlock_bh(&imc->lock); + read_unlock(&in_dev->lock); + in_dev_put(in_dev); + goto done; + } + icount -= psf->sf_count[MCAST_INCLUDE]; + xcount -= psf->sf_count[MCAST_EXCLUDE]; + } + if (icount > 0 || xcount > 0) { + if (first) { + len += sprintf(buffer+len, "%3s %6s " + "%10s %10s %6s %6s\n", "Idx", + "Device", "MCA", "SRC", "INC", + "EXC"); + first = 0; + } + len += sprintf(buffer+len, "%3d %6.6s 0x%08x " + "%10s %6lu %6lu\n", dev->ifindex, + dev->name, ntohl(imc->multiaddr), + "NONE", icount, xcount); + pos=begin+len; + if(posoffset+length) { + spin_unlock_bh(&imc->lock); + read_unlock(&in_dev->lock); + in_dev_put(in_dev); + goto done; + } + } + spin_unlock_bh(&imc->lock); + } + read_unlock(&in_dev->lock); + in_dev_put(in_dev); + } +done: + read_unlock(&dev_base_lock); + + *start=buffer+(offset-begin); + len-=(offset-begin); + if(len>length) + len=length; + if(len<0) + len=0; + return len; +} + #endif diff -Nru a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c --- a/net/ipv4/ip_gre.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/ip_gre.c Sat Apr 12 14:44:09 2003 @@ -262,12 +262,10 @@ if (!create) return NULL; - MOD_INC_USE_COUNT; dev = kmalloc(sizeof(*dev) + sizeof(*t), GFP_KERNEL); - if (dev == NULL) { - MOD_DEC_USE_COUNT; + if (dev == NULL) return NULL; - } + memset(dev, 0, sizeof(*dev) + sizeof(*t)); dev->priv = (void*)(dev+1); nt = (struct ip_tunnel*)dev->priv; @@ -287,6 +285,7 @@ goto failed; memcpy(nt->parms.name, dev->name, IFNAMSIZ); } + SET_MODULE_OWNER(dev); if (register_netdevice(dev) < 0) goto failed; @@ -297,16 +296,13 @@ failed: kfree(dev); - MOD_DEC_USE_COUNT; return NULL; } static void ipgre_tunnel_destructor(struct net_device *dev) { - if (dev != &ipgre_fb_tunnel_dev) { + if (dev != &ipgre_fb_tunnel_dev) kfree(dev); - MOD_DEC_USE_COUNT; - } } static void ipgre_tunnel_uninit(struct net_device *dev) @@ -920,8 +916,6 @@ struct ip_tunnel_parm p; struct ip_tunnel *t; - MOD_INC_USE_COUNT; - switch (cmd) { case SIOCGETTUNNEL: t = NULL; @@ -1035,7 +1029,6 @@ } done: - MOD_DEC_USE_COUNT; return err; } @@ -1115,7 +1108,6 @@ { struct ip_tunnel *t = (struct ip_tunnel*)dev->priv; - MOD_INC_USE_COUNT; if (MULTICAST(t->parms.iph.daddr)) { struct flowi fl = { .oif = t->parms.link, .nl_u = { .ip4_u = @@ -1124,16 +1116,12 @@ .tos = RT_TOS(t->parms.iph.tos) } }, .proto = IPPROTO_GRE }; struct rtable *rt; - if (ip_route_output_key(&rt, &fl)) { - MOD_DEC_USE_COUNT; + if (ip_route_output_key(&rt, &fl)) return -EADDRNOTAVAIL; - } dev = rt->u.dst.dev; ip_rt_put(rt); - if (__in_dev_get(dev) == NULL) { - MOD_DEC_USE_COUNT; + if (__in_dev_get(dev) == NULL) return -EADDRNOTAVAIL; - } t->mlink = dev->ifindex; ip_mc_inc_group(__in_dev_get(dev), t->parms.iph.daddr); } @@ -1150,7 +1138,6 @@ in_dev_put(in_dev); } } - MOD_DEC_USE_COUNT; return 0; } @@ -1244,30 +1231,12 @@ return 0; } -#ifdef MODULE -static int ipgre_fb_tunnel_open(struct net_device *dev) -{ - MOD_INC_USE_COUNT; - return 0; -} - -static int ipgre_fb_tunnel_close(struct net_device *dev) -{ - MOD_DEC_USE_COUNT; - return 0; -} -#endif - int __init ipgre_fb_tunnel_init(struct net_device *dev) { struct ip_tunnel *tunnel = (struct ip_tunnel*)dev->priv; struct iphdr *iph; ipgre_tunnel_init_gen(dev); -#ifdef MODULE - dev->open = ipgre_fb_tunnel_open; - dev->stop = ipgre_fb_tunnel_close; -#endif iph = &ipgre_fb_tunnel.parms.iph; iph->version = 4; @@ -1291,11 +1260,7 @@ * And now the modules code and kernel interface. */ -#ifdef MODULE -int init_module(void) -#else int __init ipgre_init(void) -#endif { printk(KERN_INFO "GRE over IPv4 tunneling driver\n"); @@ -1305,13 +1270,12 @@ } ipgre_fb_tunnel_dev.priv = (void*)&ipgre_fb_tunnel; + SET_MODULE_OWNER(&ipgre_fb_tunnel_dev); register_netdev(&ipgre_fb_tunnel_dev); return 0; } -#ifdef MODULE - -void cleanup_module(void) +void ipgre_fini(void) { if (inet_del_protocol(&ipgre_protocol, IPPROTO_GRE) < 0) printk(KERN_INFO "ipgre close: can't remove protocol\n"); @@ -1319,5 +1283,8 @@ unregister_netdev(&ipgre_fb_tunnel_dev); } +#ifdef MODULE +module_init(ipgre_init); #endif +module_exit(ipgre_fini); MODULE_LICENSE("GPL"); diff -Nru a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c --- a/net/ipv4/ip_output.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv4/ip_output.c Sat Apr 12 14:44:10 2003 @@ -1312,5 +1312,6 @@ #ifdef CONFIG_IP_MULTICAST proc_net_create("igmp", 0, ip_mc_procinfo); + proc_net_create("mcfilter", 0, ip_mcf_procinfo); #endif } diff -Nru a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c --- a/net/ipv4/ip_sockglue.c Sat Apr 12 14:44:07 2003 +++ b/net/ipv4/ip_sockglue.c Sat Apr 12 14:44:07 2003 @@ -610,9 +610,67 @@ } if (optname == IP_ADD_MEMBERSHIP) - err = ip_mc_join_group(sk,&mreq); + err = ip_mc_join_group(sk, &mreq); else - err = ip_mc_leave_group(sk,&mreq); + err = ip_mc_leave_group(sk, &mreq); + break; + } + case IP_MSFILTER: + { + struct ip_msfilter *msf; + + if (optlen < IP_MSFILTER_SIZE(0)) + goto e_inval; + msf = (struct ip_msfilter *)kmalloc(optlen, GFP_KERNEL); + if (msf == 0) { + err = -ENOBUFS; + break; + } + err = -EFAULT; + if (copy_from_user(msf, optval, optlen)) { + kfree(msf); + break; + } + err = ip_mc_msfilter(sk, msf); + kfree(msf); + break; + } + case IP_BLOCK_SOURCE: + case IP_UNBLOCK_SOURCE: + case IP_ADD_SOURCE_MEMBERSHIP: + case IP_DROP_SOURCE_MEMBERSHIP: + { + struct ip_mreq_source mreqs; + int omode, add; + + if (optlen != sizeof(struct ip_mreq_source)) + goto e_inval; + if (copy_from_user(&mreqs, optval, sizeof(mreqs))) { + err = -EFAULT; + break; + } + if (optname == IP_BLOCK_SOURCE) { + omode = MCAST_EXCLUDE; + add = 1; + } else if (optname == IP_UNBLOCK_SOURCE) { + omode = MCAST_EXCLUDE; + add = 0; + } else if (optname == IP_ADD_SOURCE_MEMBERSHIP) { + struct ip_mreqn mreq; + + mreq.imr_multiaddr.s_addr = mreqs.imr_multiaddr; + mreq.imr_address.s_addr = mreqs.imr_interface; + mreq.imr_ifindex = 0; + err = ip_mc_join_group(sk, &mreq); + if (err) + break; + omode = MCAST_INCLUDE; + add = 1; + } else /*IP_DROP_SOURCE_MEMBERSHIP */ { + omode = MCAST_INCLUDE; + add = 0; + } + err = ip_mc_source(add, omode, sk, &mreqs); break; } case IP_ROUTER_ALERT: @@ -762,6 +820,20 @@ if(copy_to_user((void *)optval, &addr, len)) return -EFAULT; return 0; + } + case IP_MSFILTER: + { + struct ip_msfilter msf; + int err; + + if (len < IP_MSFILTER_SIZE(0)) + return -EINVAL; + if (copy_from_user(&msf, optval, IP_MSFILTER_SIZE(0))) + return -EFAULT; + err = ip_mc_msfget(sk, &msf, + (struct ip_msfilter *)optval, optlen); + release_sock(sk); + return err; } case IP_PKTOPTIONS: { diff -Nru a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/net/ipv4/ipcomp.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,366 @@ +/* + * IP Payload Compression Protocol (IPComp) - RFC3713. + * + * Copyright (c) 2003 James Morris + * + * 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. + * + * Todo: + * - Tunable compression parameters. + * - Compression stats. + * - Adaptive compression. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define IPCOMP_SCRATCH_SIZE 65400 + +struct ipcomp_hdr { + u8 nexthdr; + u8 flags; + u16 cpi; +}; + +struct ipcomp_data { + u16 threshold; + u8 *scratch; + struct crypto_tfm *tfm; +}; + +static int ipcomp_decompress(struct xfrm_state *x, struct sk_buff *skb) +{ + int err, plen, dlen; + struct iphdr *iph; + struct ipcomp_data *ipcd = x->data; + u8 *start, *scratch = ipcd->scratch; + + plen = skb->len; + dlen = IPCOMP_SCRATCH_SIZE; + start = skb->data; + + err = crypto_comp_decompress(ipcd->tfm, start, plen, scratch, &dlen); + if (err) + goto out; + + if (dlen < (plen + sizeof(struct ipcomp_hdr))) { + err = -EINVAL; + goto out; + } + + err = pskb_expand_head(skb, 0, dlen - plen, GFP_ATOMIC); + if (err) + goto out; + + skb_put(skb, dlen - plen); + memcpy(skb->data, scratch, dlen); + iph = skb->nh.iph; + iph->tot_len = htons(dlen + iph->ihl * 4); +out: + return err; +} + +static int ipcomp_input(struct xfrm_state *x, + struct xfrm_decap_state *decap, struct sk_buff *skb) +{ + u8 nexthdr; + int err = 0; + struct iphdr *iph; + union { + struct iphdr iph; + char buf[60]; + } tmp_iph; + + + if ((skb_is_nonlinear(skb) || skb_cloned(skb)) && + skb_linearize(skb, GFP_ATOMIC) != 0) { + err = -ENOMEM; + goto out; + } + + skb->ip_summed = CHECKSUM_NONE; + + /* Remove ipcomp header and decompress original payload */ + iph = skb->nh.iph; + memcpy(&tmp_iph, iph, iph->ihl * 4); + nexthdr = *(u8 *)skb->data; + skb_pull(skb, sizeof(struct ipcomp_hdr)); + memcpy(skb->nh.raw, &tmp_iph, tmp_iph.iph.ihl * 4); + iph->tot_len = htons(ntohs(iph->tot_len) - sizeof(struct ipcomp_hdr)); + iph->protocol = nexthdr; + skb->h.raw = skb->data; + err = ipcomp_decompress(x, skb); + +out: + return err; +} + +static int ipcomp_compress(struct xfrm_state *x, struct sk_buff *skb) +{ + int err, plen, dlen, ihlen; + struct iphdr *iph = skb->nh.iph; + struct ipcomp_data *ipcd = x->data; + u8 *start, *scratch = ipcd->scratch; + + ihlen = iph->ihl * 4; + plen = skb->len - ihlen; + dlen = IPCOMP_SCRATCH_SIZE; + start = skb->data + ihlen; + + err = crypto_comp_compress(ipcd->tfm, start, plen, scratch, &dlen); + if (err) + goto out; + + if ((dlen + sizeof(struct ipcomp_hdr)) >= plen) { + err = -EMSGSIZE; + goto out; + } + + memcpy(start, scratch, dlen); + pskb_trim(skb, ihlen + dlen); + +out: + return err; +} + +static void ipcomp_tunnel_encap(struct xfrm_state *x, + struct sk_buff *skb, int compress) +{ + struct dst_entry *dst = skb->dst; + struct iphdr *iph, *top_iph; + + iph = skb->nh.iph; + top_iph = (struct iphdr *)skb_push(skb, sizeof(struct iphdr)); + top_iph->ihl = 5; + top_iph->version = 4; + top_iph->tos = iph->tos; + top_iph->tot_len = htons(skb->len); + if (!(iph->frag_off&htons(IP_DF))) + __ip_select_ident(top_iph, dst, 0); + top_iph->ttl = iph->ttl; + top_iph->protocol = compress ? IPPROTO_COMP : IPPROTO_IPIP; + top_iph->check = 0; + top_iph->saddr = x->props.saddr.a4; + top_iph->daddr = x->id.daddr.a4; + top_iph->frag_off = iph->frag_off&~htons(IP_MF|IP_OFFSET); + memset(&(IPCB(skb)->opt), 0, sizeof(struct ip_options)); + skb->nh.raw = skb->data; +} + +static int ipcomp_output(struct sk_buff *skb) +{ + int err; + struct dst_entry *dst = skb->dst; + struct xfrm_state *x = dst->xfrm; + struct iphdr *iph, *top_iph; + struct ipcomp_hdr *ipch; + struct ipcomp_data *ipcd = x->data; + union { + struct iphdr iph; + char buf[60]; + } tmp_iph; + + if (skb->ip_summed == CHECKSUM_HW && skb_checksum_help(skb) == NULL) { + err = -EINVAL; + goto error_nolock; + } + + spin_lock_bh(&x->lock); + + if ((err = xfrm_state_check_expire(x)) != 0) + goto error; + if ((err = xfrm_state_check_space(x, skb)) != 0) + goto error; + + /* Don't bother compressing */ + if (skb->len < ipcd->threshold) { + if (x->props.mode) { + ipcomp_tunnel_encap(x, skb, 0); + iph = skb->nh.iph; + ip_send_check(iph); + } + goto out_ok; + } + + if (x->props.mode) + ipcomp_tunnel_encap(x, skb, 1); + + if ((skb_is_nonlinear(skb) || skb_cloned(skb)) && + skb_linearize(skb, GFP_ATOMIC) != 0) { + err = -ENOMEM; + goto error; + } + + err = ipcomp_compress(x, skb); + if (err) { + if (err == -EMSGSIZE) + goto out_ok; + goto error; + } + + /* Install ipcomp header, convert into ipcomp datagram. */ + iph = skb->nh.iph; + memcpy(&tmp_iph, iph, iph->ihl * 4); + top_iph = (struct iphdr *)skb_push(skb, sizeof(struct ipcomp_hdr)); + memcpy(top_iph, &tmp_iph, iph->ihl * 4); + iph = top_iph; + iph->tot_len = htons(skb->len); + iph->protocol = IPPROTO_COMP; + iph->check = 0; + ipch = (struct ipcomp_hdr *)((char *)iph + iph->ihl * 4); + ipch->nexthdr = x->props.mode ? IPPROTO_IPIP : tmp_iph.iph.protocol; + ipch->flags = 0; + ipch->cpi = htons((u16 )ntohl(x->id.spi)); + ip_send_check(iph); + skb->nh.raw = skb->data; + +out_ok: + x->curlft.bytes += skb->len; + x->curlft.packets++; + spin_unlock_bh(&x->lock); + + if ((skb->dst = dst_pop(dst)) == NULL) { + err = -EHOSTUNREACH; + goto error_nolock; + } + err = NET_XMIT_BYPASS; + +out_exit: + return err; +error: + spin_unlock_bh(&x->lock); +error_nolock: + kfree_skb(skb); + goto out_exit; +} + +static void ipcomp4_err(struct sk_buff *skb, u32 info) +{ + u32 spi; + struct iphdr *iph = (struct iphdr *)skb->data; + struct ipcomp_hdr *ipch = (struct ipcomp_hdr *)(skb->data+(iph->ihl<<2)); + struct xfrm_state *x; + + if (skb->h.icmph->type != ICMP_DEST_UNREACH || + skb->h.icmph->code != ICMP_FRAG_NEEDED) + return; + + spi = ntohl(ntohs(ipch->cpi)); + x = xfrm_state_lookup((xfrm_address_t *)&iph->daddr, + spi, IPPROTO_COMP, AF_INET); + if (!x) + return; + printk(KERN_DEBUG "pmtu discvovery on SA IPCOMP/%08x/%u.%u.%u.%u\n", + spi, NIPQUAD(iph->daddr)); + xfrm_state_put(x); +} + +static void ipcomp_free_data(struct ipcomp_data *ipcd) +{ + if (ipcd->tfm) + crypto_free_tfm(ipcd->tfm); + if (ipcd->scratch) + kfree(ipcd->scratch); +} + +static void ipcomp_destroy(struct xfrm_state *x) +{ + struct ipcomp_data *ipcd = x->data; + ipcomp_free_data(ipcd); + kfree(ipcd); +} + +static int ipcomp_init_state(struct xfrm_state *x, void *args) +{ + int err = -ENOMEM; + struct ipcomp_data *ipcd; + struct xfrm_algo_desc *calg_desc; + + ipcd = kmalloc(sizeof(*ipcd), GFP_KERNEL); + if (!ipcd) + goto error; + + memset(ipcd, 0, sizeof(*ipcd)); + x->props.header_len = sizeof(struct ipcomp_hdr); + if (x->props.mode) + x->props.header_len += sizeof(struct iphdr); + x->data = ipcd; + + ipcd->scratch = kmalloc(IPCOMP_SCRATCH_SIZE, GFP_KERNEL); + if (!ipcd->scratch) + goto error; + + ipcd->tfm = crypto_alloc_tfm(x->calg->alg_name, 0); + if (!ipcd->tfm) + goto error; + + calg_desc = xfrm_calg_get_byname(x->calg->alg_name); + BUG_ON(!calg_desc); + ipcd->threshold = calg_desc->uinfo.comp.threshold; + err = 0; +out: + return err; + +error: + if (ipcd) { + ipcomp_free_data(ipcd); + kfree(ipcd); + } + goto out; +} + +static struct xfrm_type ipcomp_type = +{ + .description = "IPCOMP4", + .proto = IPPROTO_COMP, + .init_state = ipcomp_init_state, + .destructor = ipcomp_destroy, + .input = ipcomp_input, + .output = ipcomp_output +}; + +static struct inet_protocol ipcomp4_protocol = { + .handler = xfrm4_rcv, + .err_handler = ipcomp4_err, + .no_policy = 1, +}; + +static int __init ipcomp4_init(void) +{ + SET_MODULE_OWNER(&ipcomp_type); + if (xfrm_register_type(&ipcomp_type, AF_INET) < 0) { + printk(KERN_INFO "ipcomp init: can't add xfrm type\n"); + return -EAGAIN; + } + if (inet_add_protocol(&ipcomp4_protocol, IPPROTO_COMP) < 0) { + printk(KERN_INFO "ipcomp init: can't add protocol\n"); + xfrm_unregister_type(&ipcomp_type, AF_INET); + return -EAGAIN; + } + return 0; +} + +static void __exit ipcomp4_fini(void) +{ + if (inet_del_protocol(&ipcomp4_protocol, IPPROTO_COMP) < 0) + printk(KERN_INFO "ip ipcomp close: can't remove protocol\n"); + if (xfrm_unregister_type(&ipcomp_type, AF_INET) < 0) + printk(KERN_INFO "ip ipcomp close: can't remove xfrm type\n"); +} + +module_init(ipcomp4_init); +module_exit(ipcomp4_fini); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("IP Payload Compression Protocol (IPComp) - RFC3713"); +MODULE_AUTHOR("James Morris "); + diff -Nru a/net/ipv4/ipip.c b/net/ipv4/ipip.c --- a/net/ipv4/ipip.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv4/ipip.c Sat Apr 12 14:44:10 2003 @@ -115,6 +115,7 @@ #include #include #include +#include #define HASH_SIZE 16 #define HASH(addr) ((addr^(addr>>4))&0xF) @@ -231,12 +232,10 @@ if (!create) return NULL; - MOD_INC_USE_COUNT; dev = kmalloc(sizeof(*dev) + sizeof(*t), GFP_KERNEL); - if (dev == NULL) { - MOD_DEC_USE_COUNT; + if (dev == NULL) return NULL; - } + memset(dev, 0, sizeof(*dev) + sizeof(*t)); dev->priv = (void*)(dev+1); nt = (struct ip_tunnel*)dev->priv; @@ -256,6 +255,7 @@ goto failed; memcpy(nt->parms.name, dev->name, IFNAMSIZ); } + SET_MODULE_OWNER(dev); if (register_netdevice(dev) < 0) goto failed; @@ -266,16 +266,13 @@ failed: kfree(dev); - MOD_DEC_USE_COUNT; return NULL; } static void ipip_tunnel_destructor(struct net_device *dev) { - if (dev != &ipip_fb_tunnel_dev) { + if (dev != &ipip_fb_tunnel_dev) kfree(dev); - MOD_DEC_USE_COUNT; - } } static void ipip_tunnel_uninit(struct net_device *dev) @@ -289,7 +286,7 @@ dev_put(dev); } -void ipip_err(struct sk_buff *skb, u32 info) +void ipip_err(struct sk_buff *skb, void *__unused) { #ifndef I_WISH_WORLD_WERE_PERFECT @@ -472,11 +469,13 @@ #endif } -static inline void ipip_ecn_decapsulate(struct iphdr *iph, struct sk_buff *skb) +static inline void ipip_ecn_decapsulate(struct iphdr *outer_iph, struct sk_buff *skb) { - if (INET_ECN_is_ce(iph->tos) && - INET_ECN_is_not_ce(skb->nh.iph->tos)) - IP_ECN_set_ce(iph); + struct iphdr *inner_iph = skb->nh.iph; + + if (INET_ECN_is_ce(outer_iph->tos) && + INET_ECN_is_not_ce(inner_iph->tos)) + IP_ECN_set_ce(inner_iph); } int ipip_rcv(struct sk_buff *skb) @@ -515,10 +514,8 @@ } read_unlock(&ipip_lock); - icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0); out: - kfree_skb(skb); - return 0; + return -1; } /* @@ -682,8 +679,6 @@ struct ip_tunnel_parm p; struct ip_tunnel *t; - MOD_INC_USE_COUNT; - switch (cmd) { case SIOCGETTUNNEL: t = NULL; @@ -782,7 +777,6 @@ } done: - MOD_DEC_USE_COUNT; return err; } @@ -858,29 +852,11 @@ return 0; } -#ifdef MODULE -static int ipip_fb_tunnel_open(struct net_device *dev) -{ - MOD_INC_USE_COUNT; - return 0; -} - -static int ipip_fb_tunnel_close(struct net_device *dev) -{ - MOD_DEC_USE_COUNT; - return 0; -} -#endif - int __init ipip_fb_tunnel_init(struct net_device *dev) { struct iphdr *iph; ipip_tunnel_init_gen(dev); -#ifdef MODULE - dev->open = ipip_fb_tunnel_open; - dev->stop = ipip_fb_tunnel_close; -#endif iph = &ipip_fb_tunnel.parms.iph; iph->version = 4; @@ -892,7 +868,7 @@ return 0; } -static struct inet_protocol ipip_protocol = { +static struct xfrm_tunnel ipip_handler = { .handler = ipip_rcv, .err_handler = ipip_err, }; @@ -904,20 +880,21 @@ { printk(banner); - if (inet_add_protocol(&ipip_protocol, IPPROTO_IPIP) < 0) { - printk(KERN_INFO "ipip init: can't add protocol\n"); + if (xfrm4_tunnel_register(&ipip_handler) < 0) { + printk(KERN_INFO "ipip init: can't register tunnel\n"); return -EAGAIN; } ipip_fb_tunnel_dev.priv = (void*)&ipip_fb_tunnel; + SET_MODULE_OWNER(&ipip_fb_tunnel_dev); register_netdev(&ipip_fb_tunnel_dev); return 0; } static void __exit ipip_fini(void) { - if (inet_del_protocol(&ipip_protocol, IPPROTO_IPIP) < 0) - printk(KERN_INFO "ipip close: can't remove protocol\n"); + if (xfrm4_tunnel_deregister(&ipip_handler) < 0) + printk(KERN_INFO "ipip close: can't deregister tunnel\n"); unregister_netdev(&ipip_fb_tunnel_dev); } diff -Nru a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c --- a/net/ipv4/netfilter/arp_tables.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/netfilter/arp_tables.c Sat Apr 12 14:44:09 2003 @@ -253,6 +253,10 @@ const char *indev, *outdev; void *table_base; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + indev = in ? in->name : nulldevname; outdev = out ? out->name : nulldevname; diff -Nru a/net/ipv4/netfilter/ip_conntrack_core.c b/net/ipv4/netfilter/ip_conntrack_core.c --- a/net/ipv4/netfilter/ip_conntrack_core.c Sat Apr 12 14:44:05 2003 +++ b/net/ipv4/netfilter/ip_conntrack_core.c Sat Apr 12 14:44:05 2003 @@ -273,6 +273,8 @@ * the un-established ones only */ if (exp->sibling) { DEBUGP("remove_expectations: skipping established %p of %p\n", exp->sibling, ct); + /* Indicate that this expectations parent is dead */ + exp->expectant = NULL; continue; } @@ -324,6 +326,9 @@ ip_conntrack_destroyed(ct); WRITE_LOCK(&ip_conntrack_lock); + /* Delete us from our own list to prevent corruption later */ + list_del(&ct->sibling_list); + /* Delete our master expectation */ if (ct->master) { /* can't call __unexpect_related here, @@ -817,6 +822,10 @@ fragment check. */ if ((*pskb)->nfct) return NF_ACCEPT; + + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; /* Gather fragments. */ if ((*pskb)->nh.iph->frag_off & htons(IP_MF|IP_OFFSET)) { diff -Nru a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c --- a/net/ipv4/netfilter/ip_conntrack_standalone.c Sat Apr 12 14:44:07 2003 +++ b/net/ipv4/netfilter/ip_conntrack_standalone.c Sat Apr 12 14:44:07 2003 @@ -192,6 +192,10 @@ { struct rtable *rt = (struct rtable *)(*pskb)->dst; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* We've seen it coming out the other side: confirm */ if (ip_confirm(hooknum, pskb, in, out, okfn) != NF_ACCEPT) return NF_DROP; @@ -213,6 +217,10 @@ const struct net_device *out, int (*okfn)(struct sk_buff *)) { + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* root is playing with raw sockets. */ if ((*pskb)->len < sizeof(struct iphdr) || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) { diff -Nru a/net/ipv4/netfilter/ip_fw_compat.c b/net/ipv4/netfilter/ip_fw_compat.c --- a/net/ipv4/netfilter/ip_fw_compat.c Sat Apr 12 14:44:07 2003 +++ b/net/ipv4/netfilter/ip_fw_compat.c Sat Apr 12 14:44:07 2003 @@ -75,6 +75,10 @@ int ret = FW_BLOCK; u_int16_t redirpt; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* Assume worse case: any hook could change packet */ (*pskb)->nfcache |= NFC_UNKNOWN | NFC_ALTERED; if ((*pskb)->ip_summed == CHECKSUM_HW) @@ -189,6 +193,10 @@ const struct net_device *out, int (*okfn)(struct sk_buff *)) { + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + return ip_conntrack_confirm(*pskb); } diff -Nru a/net/ipv4/netfilter/ip_nat_standalone.c b/net/ipv4/netfilter/ip_nat_standalone.c --- a/net/ipv4/netfilter/ip_nat_standalone.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/netfilter/ip_nat_standalone.c Sat Apr 12 14:44:09 2003 @@ -71,6 +71,10 @@ /* maniptype == SRC for postrouting. */ enum ip_nat_manip_type maniptype = HOOK2MANIP(hooknum); + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* We never see fragments: conntrack defrags on pre-routing and local-out, and ip_nat_out protects post-routing. */ IP_NF_ASSERT(!((*pskb)->nh.iph->frag_off @@ -170,6 +174,10 @@ const struct net_device *out, int (*okfn)(struct sk_buff *)) { + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* root is playing with raw sockets. */ if ((*pskb)->len < sizeof(struct iphdr) || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) @@ -204,6 +212,10 @@ { u_int32_t saddr, daddr; unsigned int ret; + + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; /* root is playing with raw sockets. */ if ((*pskb)->len < sizeof(struct iphdr) diff -Nru a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c --- a/net/ipv4/netfilter/ip_tables.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv4/netfilter/ip_tables.c Sat Apr 12 14:44:06 2003 @@ -271,6 +271,10 @@ void *table_base; struct ipt_entry *e, *back; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* Initialization */ ip = (*pskb)->nh.iph; protohdr = (u_int32_t *)ip + ip->ihl; diff -Nru a/net/ipv4/netfilter/iptable_filter.c b/net/ipv4/netfilter/iptable_filter.c --- a/net/ipv4/netfilter/iptable_filter.c Sat Apr 12 14:44:07 2003 +++ b/net/ipv4/netfilter/iptable_filter.c Sat Apr 12 14:44:07 2003 @@ -107,6 +107,10 @@ const struct net_device *out, int (*okfn)(struct sk_buff *)) { + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* root is playing with raw sockets. */ if ((*pskb)->len < sizeof(struct iphdr) || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) { diff -Nru a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c --- a/net/ipv4/netfilter/iptable_mangle.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/netfilter/iptable_mangle.c Sat Apr 12 14:44:09 2003 @@ -145,6 +145,10 @@ u_int32_t saddr, daddr; unsigned long nfmark; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* root is playing with raw sockets. */ if ((*pskb)->len < sizeof(struct iphdr) || (*pskb)->nh.iph->ihl * 4 < sizeof(struct iphdr)) { diff -Nru a/net/ipv4/proc.c b/net/ipv4/proc.c --- a/net/ipv4/proc.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv4/proc.c Sat Apr 12 14:44:06 2003 @@ -143,9 +143,15 @@ "InSegs OutSegs RetransSegs InErrs OutRsts\nTcp:"); for (i = 0; - i < offsetof(struct tcp_mib, __pad) / sizeof(unsigned long); i++) - seq_printf(seq, " %lu", - fold_field((void **) tcp_statistics, i)); + i < offsetof(struct tcp_mib, __pad) / sizeof(unsigned long); i++) { + if (i == (offsetof(struct tcp_mib, TcpMaxConn) / sizeof(unsigned long))) + /* MaxConn field is negative, RFC 2012 */ + seq_printf(seq, " %ld", + fold_field((void **) tcp_statistics, i)); + else + seq_printf(seq, " %lu", + fold_field((void **) tcp_statistics, i)); + } seq_printf(seq, "\nUdp: InDatagrams NoPorts InErrors OutDatagrams\n" "Udp:"); diff -Nru a/net/ipv4/route.c b/net/ipv4/route.c --- a/net/ipv4/route.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv4/route.c Sat Apr 12 14:44:10 2003 @@ -1790,7 +1790,8 @@ read_lock(&inetdev_lock); if ((in_dev = __in_dev_get(dev)) != NULL) { - int our = ip_check_mc(in_dev, daddr); + int our = ip_check_mc(in_dev, daddr, saddr, + skb->nh.iph->protocol); if (our #ifdef CONFIG_IP_MROUTE || (!LOCAL_MCAST(daddr) && IN_DEV_MFORWARD(in_dev)) @@ -2020,7 +2021,7 @@ } } else if (res.type == RTN_MULTICAST) { flags |= RTCF_MULTICAST|RTCF_LOCAL; - if (!ip_check_mc(in_dev, oldflp->fl4_dst)) + if (!ip_check_mc(in_dev, oldflp->fl4_dst, oldflp->fl4_src, oldflp->proto)) flags &= ~RTCF_LOCAL; /* If multicast route do not exist use default one, but do not gateway in this case. diff -Nru a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c --- a/net/ipv4/tcp_output.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/tcp_output.c Sat Apr 12 14:44:09 2003 @@ -354,7 +354,7 @@ static void skb_split(struct sk_buff *skb, struct sk_buff *skb1, u32 len) { int i; - int pos = skb->len - skb->data_len; + int pos = skb_headlen(skb); if (len < pos) { /* Split line is inside header. */ diff -Nru a/net/ipv4/udp.c b/net/ipv4/udp.c --- a/net/ipv4/udp.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv4/udp.c Sat Apr 12 14:44:06 2003 @@ -298,6 +298,8 @@ ipv6_only_sock(s) || (s->bound_dev_if && s->bound_dev_if != dif)) continue; + if (!ip_mc_sf_allow(sk, loc_addr, rmt_addr, dif)) + continue; break; } return s; diff -Nru a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c --- a/net/ipv4/xfrm4_input.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv4/xfrm4_input.c Sat Apr 12 14:44:06 2003 @@ -48,6 +48,9 @@ if (x->props.replay_window && xfrm_replay_check(x, seq)) goto drop_unlock; + if (xfrm_state_check_expire(x)) + goto drop_unlock; + xfrm_vec[xfrm_nr].decap.decap_type = encap_type; if (x->type->input(x, &(xfrm_vec[xfrm_nr].decap), skb)) goto drop_unlock; diff -Nru a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c --- a/net/ipv4/xfrm4_policy.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv4/xfrm4_policy.c Sat Apr 12 14:44:09 2003 @@ -201,6 +201,13 @@ } break; + case IPPROTO_COMP: + if (pskb_may_pull(skb, xprth + 4 - skb->data)) { + u16 *ipcomp_hdr = (u16 *)xprth; + + fl->uli_u.spi = ntohl(ntohs(ipcomp_hdr[1])); + } + break; default: fl->uli_u.spi = 0; break; diff -Nru a/net/ipv4/xfrm4_tunnel.c b/net/ipv4/xfrm4_tunnel.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/net/ipv4/xfrm4_tunnel.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,225 @@ +/* xfrm4_tunnel.c: Generic IP tunnel transformer. + * + * Copyright (C) 2003 David S. Miller (davem@redhat.com) + */ + +#include +#include +#include +#include +#include + +static int ipip_output(struct sk_buff *skb) +{ + struct dst_entry *dst = skb->dst; + struct xfrm_state *x = dst->xfrm; + struct iphdr *iph, *top_iph; + int tos; + + iph = skb->nh.iph; + + spin_lock_bh(&x->lock); + + tos = iph->tos; + + top_iph = (struct iphdr *) skb_push(skb, x->props.header_len); + top_iph->ihl = 5; + top_iph->version = 4; + top_iph->tos = INET_ECN_encapsulate(tos, iph->tos); + top_iph->tot_len = htons(skb->len); + top_iph->frag_off = iph->frag_off & ~htons(IP_MF|IP_OFFSET); + if (!(iph->frag_off & htons(IP_DF))) + __ip_select_ident(top_iph, dst, 0); + top_iph->ttl = iph->ttl; + top_iph->protocol = IPPROTO_IPIP; + top_iph->check = 0; + top_iph->saddr = x->props.saddr.a4; + top_iph->daddr = x->id.daddr.a4; + memset(&(IPCB(skb)->opt), 0, sizeof(struct ip_options)); + ip_send_check(top_iph); + + skb->nh.raw = skb->data; + x->curlft.bytes += skb->len; + x->curlft.packets++; + + spin_unlock_bh(&x->lock); + + if ((skb->dst = dst_pop(dst)) == NULL) { + kfree_skb(skb); + return -EHOSTUNREACH; + } + return NET_XMIT_BYPASS; +} + +static inline void ipip_ecn_decapsulate(struct iphdr *outer_iph, struct sk_buff *skb) +{ + struct iphdr *inner_iph = skb->nh.iph; + + if (INET_ECN_is_ce(outer_iph->tos) && + INET_ECN_is_not_ce(inner_iph->tos)) + IP_ECN_set_ce(inner_iph); +} + +static int ipip_xfrm_rcv(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb) +{ + struct iphdr *outer_iph = skb->nh.iph; + + if (!pskb_may_pull(skb, sizeof(struct iphdr))) + return -EINVAL; + skb->mac.raw = skb->nh.raw; + skb->nh.raw = skb->data; + memset(&(IPCB(skb)->opt), 0, sizeof(struct ip_options)); + dst_release(skb->dst); + skb->dst = NULL; + skb->protocol = htons(ETH_P_IP); + skb->pkt_type = PACKET_HOST; + ipip_ecn_decapsulate(outer_iph, skb); + netif_rx(skb); + + return 0; +} + +static struct xfrm_tunnel *ipip_handler; +static DECLARE_MUTEX(xfrm4_tunnel_sem); + +int xfrm4_tunnel_register(struct xfrm_tunnel *handler) +{ + int ret; + + down(&xfrm4_tunnel_sem); + ret = 0; + if (ipip_handler != NULL) + ret = -EINVAL; + if (!ret) + ipip_handler = handler; + up(&xfrm4_tunnel_sem); + + return ret; +} + +int xfrm4_tunnel_deregister(struct xfrm_tunnel *handler) +{ + int ret; + + down(&xfrm4_tunnel_sem); + ret = 0; + if (ipip_handler != handler) + ret = -EINVAL; + if (!ret) + ipip_handler = NULL; + up(&xfrm4_tunnel_sem); + + synchronize_net(); + + return ret; +} + +static int ipip_rcv(struct sk_buff *skb) +{ + struct xfrm_tunnel *handler = ipip_handler; + struct xfrm_state *x = NULL; + int err; + + /* Tunnel devices take precedence. */ + if (handler) { + err = handler->handler(skb); + if (!err) + goto out; + } + + x = xfrm_state_lookup((xfrm_address_t *)&skb->nh.iph->daddr, + skb->nh.iph->saddr, + IPPROTO_IPIP, AF_INET); + + if (x) { + spin_lock(&x->lock); + + if (unlikely(x->km.state != XFRM_STATE_VALID)) + goto drop_unlock; + } + + err = ipip_xfrm_rcv(x, NULL, skb); + if (err) + goto drop_unlock; + + if (x) { + x->curlft.bytes += skb->len; + x->curlft.packets++; + + spin_unlock(&x->lock); + + xfrm_state_put(x); + } + + return 0; + +drop_unlock: + if (x) { + spin_unlock(&x->lock); + xfrm_state_put(x); + } + kfree_skb(skb); +out: + return 0; +} + +void ipip_err(struct sk_buff *skb, u32 info) +{ + struct xfrm_tunnel *handler = ipip_handler; + u32 arg = info; + + if (handler) + handler->err_handler(skb, &arg); +} + +static int ipip_init_state(struct xfrm_state *x, void *args) +{ + x->props.header_len = sizeof(struct iphdr); + + return 0; +} + +static void ipip_destroy(struct xfrm_state *x) +{ +} + +static struct xfrm_type ipip_type = { + .description = "IPIP", + .proto = IPPROTO_IPIP, + .init_state = ipip_init_state, + .destructor = ipip_destroy, + .input = ipip_xfrm_rcv, + .output = ipip_output +}; + +static struct inet_protocol ipip_protocol = { + .handler = ipip_rcv, + .err_handler = ipip_err, +}; + +static int __init ipip_init(void) +{ + SET_MODULE_OWNER(&ipip_type); + if (xfrm_register_type(&ipip_type, AF_INET) < 0) { + printk(KERN_INFO "ipip init: can't add xfrm type\n"); + return -EAGAIN; + } + if (inet_add_protocol(&ipip_protocol, IPPROTO_IPIP) < 0) { + printk(KERN_INFO "ipip init: can't add protocol\n"); + xfrm_unregister_type(&ipip_type, AF_INET); + return -EAGAIN; + } + return 0; +} + +static void __exit ipip_fini(void) +{ + if (inet_del_protocol(&ipip_protocol, IPPROTO_IPIP) < 0) + printk(KERN_INFO "ipip close: can't remove protocol\n"); + if (xfrm_unregister_type(&ipip_type, AF_INET) < 0) + printk(KERN_INFO "ipip close: can't remove xfrm type\n"); +} + +module_init(ipip_init); +module_exit(ipip_fini); +MODULE_LICENSE("GPL"); diff -Nru a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c --- a/net/ipv6/addrconf.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv6/addrconf.c Sat Apr 12 14:44:10 2003 @@ -1202,7 +1202,7 @@ if (dev->type == ARPHRD_SIT && (dev->flags&IFF_POINTOPOINT)) rtmsg.rtmsg_flags |= RTF_NONEXTHOP; - ip6_route_add(&rtmsg); + ip6_route_add(&rtmsg, NULL); } /* Create "default" multicast route to the interface */ @@ -1219,7 +1219,7 @@ rtmsg.rtmsg_ifindex = dev->ifindex; rtmsg.rtmsg_flags = RTF_UP|RTF_ADDRCONF; rtmsg.rtmsg_type = RTMSG_NEWROUTE; - ip6_route_add(&rtmsg); + ip6_route_add(&rtmsg, NULL); } static void sit_route_add(struct net_device *dev) @@ -1236,7 +1236,7 @@ rtmsg.rtmsg_flags = RTF_UP|RTF_NONEXTHOP; rtmsg.rtmsg_ifindex = dev->ifindex; - ip6_route_add(&rtmsg); + ip6_route_add(&rtmsg, NULL); } static void addrconf_add_lroute(struct net_device *dev) @@ -1328,7 +1328,7 @@ if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) { if (rt->rt6i_flags&RTF_EXPIRES) { if (pinfo->onlink == 0 || valid_lft == 0) { - ip6_del_rt(rt); + ip6_del_rt(rt, NULL); rt = NULL; } else { rt->rt6i_expires = rt_expires; @@ -1952,7 +1952,7 @@ rtmsg.rtmsg_ifindex = ifp->idev->dev->ifindex; - ip6_route_add(&rtmsg); + ip6_route_add(&rtmsg, NULL); } out: diff -Nru a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c --- a/net/ipv6/af_inet6.c Sat Apr 12 14:44:08 2003 +++ b/net/ipv6/af_inet6.c Sat Apr 12 14:44:08 2003 @@ -111,7 +111,7 @@ #ifdef INET_REFCNT_DEBUG atomic_dec(&inet6_sock_nr); #endif - MOD_DEC_USE_COUNT; + module_put(THIS_MODULE); } static __inline__ kmem_cache_t *inet6_sk_slab(int protocol) @@ -242,7 +242,10 @@ atomic_inc(&inet6_sock_nr); atomic_inc(&inet_sock_nr); #endif - MOD_INC_USE_COUNT; + if (!try_module_get(THIS_MODULE)) { + inet_sock_release(sk); + return -EBUSY; + } if (inet->num) { /* It assumes that any protocol which allows @@ -255,7 +258,7 @@ if (sk->prot->init) { int err = sk->prot->init(sk); if (err != 0) { - MOD_DEC_USE_COUNT; + module_put(THIS_MODULE); inet_sock_release(sk); return err; } diff -Nru a/net/ipv6/ah6.c b/net/ipv6/ah6.c --- a/net/ipv6/ah6.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv6/ah6.c Sat Apr 12 14:44:09 2003 @@ -313,11 +313,13 @@ crypto_free_tfm(ahp->tfm); ahp->tfm = NULL; } + kfree(ahp); } static struct xfrm_type ah6_type = { .description = "AH6", + .owner = THIS_MODULE, .proto = IPPROTO_AH, .init_state = ah6_init_state, .destructor = ah6_destroy, @@ -333,8 +335,6 @@ int __init ah6_init(void) { - SET_MODULE_OWNER(&ah6_type); - if (xfrm_register_type(&ah6_type, AF_INET6) < 0) { printk(KERN_INFO "ipv6 ah init: can't add xfrm type\n"); return -EAGAIN; diff -Nru a/net/ipv6/esp6.c b/net/ipv6/esp6.c --- a/net/ipv6/esp6.c Sat Apr 12 14:44:08 2003 +++ b/net/ipv6/esp6.c Sat Apr 12 14:44:08 2003 @@ -406,6 +406,7 @@ kfree(esp->auth.work_icv); esp->auth.work_icv = NULL; } + kfree(esp); } int esp6_init_state(struct xfrm_state *x, void *args) @@ -488,6 +489,7 @@ static struct xfrm_type esp6_type = { .description = "ESP6", + .owner = THIS_MODULE, .proto = IPPROTO_ESP, .init_state = esp6_init_state, .destructor = esp6_destroy, @@ -504,7 +506,6 @@ int __init esp6_init(void) { - SET_MODULE_OWNER(&esp6_type); if (xfrm_register_type(&esp6_type, AF_INET6) < 0) { printk(KERN_INFO "ipv6 esp init: can't add xfrm type\n"); return -EAGAIN; diff -Nru a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c --- a/net/ipv6/ip6_fib.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv6/ip6_fib.c Sat Apr 12 14:44:09 2003 @@ -423,7 +423,8 @@ * Insert routing information in a node. */ -static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt) +static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt, + struct nlmsghdr *nlh) { struct rt6_info *iter = NULL; struct rt6_info **ins; @@ -480,7 +481,7 @@ *ins = rt; rt->rt6i_node = fn; atomic_inc(&rt->rt6i_ref); - inet6_rt_notify(RTM_NEWROUTE, rt); + inet6_rt_notify(RTM_NEWROUTE, rt, nlh); rt6_stats.fib_rt_entries++; if ((fn->fn_flags & RTN_RTINFO) == 0) { @@ -504,7 +505,7 @@ * with source addr info in sub-trees */ -int fib6_add(struct fib6_node *root, struct rt6_info *rt) +int fib6_add(struct fib6_node *root, struct rt6_info *rt, struct nlmsghdr *nlh) { struct fib6_node *fn; int err = -ENOMEM; @@ -577,7 +578,7 @@ } #endif - err = fib6_add_rt2node(fn, rt); + err = fib6_add_rt2node(fn, rt, nlh); if (err == 0) { fib6_start_gc(rt); @@ -885,7 +886,8 @@ } } -static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp) +static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp, + struct nlmsghdr *nlh) { struct fib6_walker_t *w; struct rt6_info *rt = *rtp; @@ -940,11 +942,11 @@ if (atomic_read(&rt->rt6i_ref) != 1) BUG(); } - inet6_rt_notify(RTM_DELROUTE, rt); + inet6_rt_notify(RTM_DELROUTE, rt, nlh); rt6_release(rt); } -int fib6_del(struct rt6_info *rt) +int fib6_del(struct rt6_info *rt, struct nlmsghdr *nlh) { struct fib6_node *fn = rt->rt6i_node; struct rt6_info **rtp; @@ -969,7 +971,7 @@ for (rtp = &fn->leaf; *rtp; rtp = &(*rtp)->u.next) { if (*rtp == rt) { - fib6_del_route(fn, rtp); + fib6_del_route(fn, rtp, nlh); return 0; } } @@ -1098,7 +1100,7 @@ res = c->func(rt, c->arg); if (res < 0) { w->leaf = rt; - res = fib6_del(rt); + res = fib6_del(rt, NULL); if (res) { #if RT6_DEBUG >= 2 printk(KERN_DEBUG "fib6_clean_node: del failed: rt=%p@%p err=%d\n", rt, rt->rt6i_node, res); diff -Nru a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c --- a/net/ipv6/ipv6_sockglue.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv6/ipv6_sockglue.c Sat Apr 12 14:44:06 2003 @@ -196,7 +196,7 @@ #ifdef INET_REFCNT_DEBUG atomic_dec(&inet6_sock_nr); #endif - MOD_DEC_USE_COUNT; + module_put(THIS_MODULE); retv = 0; break; } diff -Nru a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c --- a/net/ipv6/ndisc.c Sat Apr 12 14:44:08 2003 +++ b/net/ipv6/ndisc.c Sat Apr 12 14:44:08 2003 @@ -961,7 +961,7 @@ struct rt6_info *rt; rt = rt6_get_dflt_router(saddr, dev); if (rt) - ip6_del_rt(rt); + ip6_del_rt(rt, NULL); } } else { if (msg->icmph.icmp6_router) @@ -1035,7 +1035,7 @@ rt = rt6_get_dflt_router(&skb->nh.ipv6h->saddr, skb->dev); if (rt && lifetime == 0) { - ip6_del_rt(rt); + ip6_del_rt(rt, NULL); rt = NULL; } diff -Nru a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c --- a/net/ipv6/netfilter/ip6_tables.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv6/netfilter/ip6_tables.c Sat Apr 12 14:44:09 2003 @@ -343,6 +343,10 @@ void *table_base; struct ip6t_entry *e, *back; + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* Initialization */ ipv6 = (*pskb)->nh.ipv6h; protohdr = (u_int32_t *)((char *)ipv6 + IPV6_HDR_LEN); diff -Nru a/net/ipv6/netfilter/ip6table_mangle.c b/net/ipv6/netfilter/ip6table_mangle.c --- a/net/ipv6/netfilter/ip6table_mangle.c Sat Apr 12 14:44:07 2003 +++ b/net/ipv6/netfilter/ip6table_mangle.c Sat Apr 12 14:44:07 2003 @@ -154,6 +154,10 @@ } #endif + /* FIXME: Push down to extensions --RR */ + if (skb_is_nonlinear(*pskb) && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + /* save source/dest address, nfmark, hoplimit, flowlabel, priority, */ memcpy(&saddr, &(*pskb)->nh.ipv6h->saddr, sizeof(saddr)); memcpy(&daddr, &(*pskb)->nh.ipv6h->daddr, sizeof(daddr)); diff -Nru a/net/ipv6/route.c b/net/ipv6/route.c --- a/net/ipv6/route.c Sat Apr 12 14:44:09 2003 +++ b/net/ipv6/route.c Sat Apr 12 14:44:09 2003 @@ -318,12 +318,12 @@ be destroyed. */ -static int rt6_ins(struct rt6_info *rt) +static int rt6_ins(struct rt6_info *rt, struct nlmsghdr *nlh) { int err; write_lock_bh(&rt6_lock); - err = fib6_add(&ip6_routing_table, rt); + err = fib6_add(&ip6_routing_table, rt, nlh); write_unlock_bh(&rt6_lock); return err; @@ -366,7 +366,7 @@ dst_hold(&rt->u.dst); - err = rt6_ins(rt); + err = rt6_ins(rt, NULL); if (err == 0) return rt; @@ -522,7 +522,7 @@ if (rt) { if (rt->rt6i_flags & RTF_CACHE) - ip6_del_rt(rt); + ip6_del_rt(rt, NULL); else dst_release(dst); } @@ -625,9 +625,10 @@ * */ -int ip6_route_add(struct in6_rtmsg *rtmsg) +int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh) { int err; + struct rtmsg *r; struct rt6_info *rt; struct net_device *dev = NULL; int addr_type; @@ -648,6 +649,11 @@ rt->u.dst.obsolete = -1; rt->rt6i_expires = rtmsg->rtmsg_info; + if (nlh && (r = NLMSG_DATA(nlh))) { + rt->rt6i_protocol = r->rtm_protocol; + } else { + rt->rt6i_protocol = RTPROT_BOOT; + } addr_type = ipv6_addr_type(&rtmsg->rtmsg_dst); @@ -772,7 +778,7 @@ if (dst_metric(&rt->u.dst, RTAX_ADVMSS) > 65535-20) rt->u.dst.metrics[RTAX_ADVMSS-1] = 65535; rt->u.dst.dev = dev; - return rt6_ins(rt); + return rt6_ins(rt, nlh); out: if (dev) @@ -781,7 +787,7 @@ return err; } -int ip6_del_rt(struct rt6_info *rt) +int ip6_del_rt(struct rt6_info *rt, struct nlmsghdr *nlh) { int err; @@ -793,13 +799,13 @@ dst_release(&rt->u.dst); - err = fib6_del(rt); + err = fib6_del(rt, nlh); write_unlock_bh(&rt6_lock); return err; } -static int ip6_route_del(struct in6_rtmsg *rtmsg) +static int ip6_route_del(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh) { struct fib6_node *fn; struct rt6_info *rt; @@ -826,7 +832,7 @@ dst_hold(&rt->u.dst); read_unlock_bh(&rt6_lock); - return ip6_del_rt(rt); + return ip6_del_rt(rt, nlh); } } read_unlock_bh(&rt6_lock); @@ -928,11 +934,11 @@ nrt->u.dst.metrics[RTAX_ADVMSS-1] = 65535; nrt->rt6i_hoplimit = ipv6_get_hoplimit(neigh->dev); - if (rt6_ins(nrt)) + if (rt6_ins(nrt, NULL)) goto out; if (rt->rt6i_flags&RTF_CACHE) { - ip6_del_rt(rt); + ip6_del_rt(rt, NULL); return; } @@ -1018,7 +1024,7 @@ dst_set_expires(&nrt->u.dst, ip6_rt_mtu_expires); nrt->rt6i_flags |= RTF_DYNAMIC|RTF_CACHE|RTF_EXPIRES; nrt->u.dst.metrics[RTAX_MTU-1] = pmtu; - rt6_ins(nrt); + rt6_ins(nrt, NULL); } out: @@ -1091,7 +1097,7 @@ rtmsg.rtmsg_ifindex = dev->ifindex; - ip6_route_add(&rtmsg); + ip6_route_add(&rtmsg, NULL); return rt6_get_dflt_router(gwaddr, dev); } @@ -1117,7 +1123,7 @@ read_unlock_bh(&rt6_lock); - ip6_del_rt(rt); + ip6_del_rt(rt, NULL); goto restart; } @@ -1143,10 +1149,10 @@ rtnl_lock(); switch (cmd) { case SIOCADDRT: - err = ip6_route_add(&rtmsg); + err = ip6_route_add(&rtmsg, NULL); break; case SIOCDELRT: - err = ip6_route_del(&rtmsg); + err = ip6_route_del(&rtmsg, NULL); break; default: err = -EINVAL; @@ -1203,7 +1209,7 @@ ipv6_addr_copy(&rt->rt6i_dst.addr, addr); rt->rt6i_dst.plen = 128; - rt6_ins(rt); + rt6_ins(rt, NULL); return 0; } @@ -1220,7 +1226,7 @@ rt = rt6_lookup(addr, NULL, loopback_dev.ifindex, 1); if (rt) { if (rt->rt6i_dst.plen == 128) - err = ip6_del_rt(rt); + err = ip6_del_rt(rt, NULL); else dst_release(&rt->u.dst); } @@ -1350,7 +1356,7 @@ if (inet6_rtm_to_rtmsg(r, arg, &rtmsg)) return -EINVAL; - return ip6_route_del(&rtmsg); + return ip6_route_del(&rtmsg, nlh); } int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) @@ -1360,7 +1366,7 @@ if (inet6_rtm_to_rtmsg(r, arg, &rtmsg)) return -EINVAL; - return ip6_route_add(&rtmsg); + return ip6_route_add(&rtmsg, nlh); } struct rt6_rtnl_dump_arg @@ -1373,13 +1379,18 @@ struct in6_addr *dst, struct in6_addr *src, int iif, - int type, u32 pid, u32 seq) + int type, u32 pid, u32 seq, + struct nlmsghdr *in_nlh) { struct rtmsg *rtm; struct nlmsghdr *nlh; unsigned char *b = skb->tail; struct rta_cacheinfo ci; + if (!pid && in_nlh) { + pid = in_nlh->nlmsg_pid; + } + nlh = NLMSG_PUT(skb, pid, seq, type, sizeof(*rtm)); rtm = NLMSG_DATA(nlh); rtm->rtm_family = AF_INET6; @@ -1395,7 +1406,7 @@ rtm->rtm_type = RTN_UNICAST; rtm->rtm_flags = 0; rtm->rtm_scope = RT_SCOPE_UNIVERSE; - rtm->rtm_protocol = RTPROT_BOOT; + rtm->rtm_protocol = rt->rt6i_protocol; if (rt->rt6i_flags&RTF_DYNAMIC) rtm->rtm_protocol = RTPROT_REDIRECT; else if (rt->rt6i_flags&(RTF_ADDRCONF|RTF_ALLONLINK)) @@ -1458,7 +1469,8 @@ struct rt6_rtnl_dump_arg *arg = (struct rt6_rtnl_dump_arg *) p_arg; return rt6_fill_node(arg->skb, rt, NULL, NULL, 0, RTM_NEWROUTE, - NETLINK_CB(arg->cb->skb).pid, arg->cb->nlh->nlmsg_seq); + NETLINK_CB(arg->cb->skb).pid, arg->cb->nlh->nlmsg_seq, + NULL); } static int fib6_dump_node(struct fib6_walker_t *w) @@ -1608,7 +1620,8 @@ fl.nl_u.ip6_u.daddr, fl.nl_u.ip6_u.saddr, iif, - RTM_NEWROUTE, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq); + RTM_NEWROUTE, NETLINK_CB(in_skb).pid, + nlh->nlmsg_seq, nlh); if (err < 0) { err = -EMSGSIZE; goto out_free; @@ -1624,7 +1637,7 @@ goto out; } -void inet6_rt_notify(int event, struct rt6_info *rt) +void inet6_rt_notify(int event, struct rt6_info *rt, struct nlmsghdr *nlh) { struct sk_buff *skb; int size = NLMSG_SPACE(sizeof(struct rtmsg)+256); @@ -1634,7 +1647,7 @@ netlink_set_err(rtnl, 0, RTMGRP_IPV6_ROUTE, ENOBUFS); return; } - if (rt6_fill_node(skb, rt, NULL, NULL, 0, event, 0, 0) < 0) { + if (rt6_fill_node(skb, rt, NULL, NULL, 0, event, 0, 0, nlh) < 0) { kfree_skb(skb); netlink_set_err(rtnl, 0, RTMGRP_IPV6_ROUTE, EINVAL); return; diff -Nru a/net/ipv6/sit.c b/net/ipv6/sit.c --- a/net/ipv6/sit.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv6/sit.c Sat Apr 12 14:44:10 2003 @@ -170,12 +170,10 @@ if (!create) return NULL; - MOD_INC_USE_COUNT; dev = kmalloc(sizeof(*dev) + sizeof(*t), GFP_KERNEL); - if (dev == NULL) { - MOD_DEC_USE_COUNT; + if (dev == NULL) return NULL; - } + memset(dev, 0, sizeof(*dev) + sizeof(*t)); dev->priv = (void*)(dev+1); nt = (struct ip_tunnel*)dev->priv; @@ -195,6 +193,7 @@ goto failed; memcpy(nt->parms.name, dev->name, IFNAMSIZ); } + SET_MODULE_OWNER(dev); if (register_netdevice(dev) < 0) goto failed; @@ -205,16 +204,13 @@ failed: kfree(dev); - MOD_DEC_USE_COUNT; return NULL; } static void ipip6_tunnel_destructor(struct net_device *dev) { - if (dev != &ipip6_fb_tunnel_dev) { + if (dev != &ipip6_fb_tunnel_dev) kfree(dev); - MOD_DEC_USE_COUNT; - } } static void ipip6_tunnel_uninit(struct net_device *dev) @@ -622,8 +618,6 @@ struct ip_tunnel_parm p; struct ip_tunnel *t; - MOD_INC_USE_COUNT; - switch (cmd) { case SIOCGETTUNNEL: t = NULL; @@ -721,7 +715,6 @@ } done: - MOD_DEC_USE_COUNT; return err; } @@ -798,29 +791,11 @@ return 0; } -#ifdef MODULE -static int ipip6_fb_tunnel_open(struct net_device *dev) -{ - MOD_INC_USE_COUNT; - return 0; -} - -static int ipip6_fb_tunnel_close(struct net_device *dev) -{ - MOD_DEC_USE_COUNT; - return 0; -} -#endif - int __init ipip6_fb_tunnel_init(struct net_device *dev) { struct iphdr *iph; ipip6_tunnel_init_gen(dev); -#ifdef MODULE - dev->open = ipip6_fb_tunnel_open; - dev->stop = ipip6_fb_tunnel_close; -#endif iph = &ipip6_fb_tunnel.parms.iph; iph->version = 4; @@ -857,6 +832,7 @@ ipip6_fb_tunnel_dev.priv = (void*)&ipip6_fb_tunnel; strcpy(ipip6_fb_tunnel_dev.name, ipip6_fb_tunnel.parms.name); + SET_MODULE_OWNER(&ipip6_fb_tunnel_dev); register_netdev(&ipip6_fb_tunnel_dev); return 0; } diff -Nru a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c --- a/net/ipv6/xfrm6_input.c Sat Apr 12 14:44:10 2003 +++ b/net/ipv6/xfrm6_input.c Sat Apr 12 14:44:10 2003 @@ -172,6 +172,9 @@ if (x->props.replay_window && xfrm_replay_check(x, seq)) goto drop_unlock; + if (xfrm_state_check_expire(x)) + goto drop_unlock; + nexthdr = x->type->input(x, &(xfrm_vec[xfrm_nr].decap), skb); if (nexthdr <= 0) goto drop_unlock; diff -Nru a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c --- a/net/ipv6/xfrm6_policy.c Sat Apr 12 14:44:06 2003 +++ b/net/ipv6/xfrm6_policy.c Sat Apr 12 14:44:06 2003 @@ -203,6 +203,7 @@ /* XXX Why are there these headers? */ case IPPROTO_AH: case IPPROTO_ESP: + case IPPROTO_COMP: default: fl->uli_u.spi = 0; return; diff -Nru a/net/irda/irlap_event.c b/net/irda/irlap_event.c --- a/net/irda/irlap_event.c Sat Apr 12 14:44:08 2003 +++ b/net/irda/irlap_event.c Sat Apr 12 14:44:08 2003 @@ -1038,7 +1038,7 @@ * we send 2000B packets, we may wait another * 1000B until our turnaround expire. That's * why we need to be proactive in avoiding - * comming here. - Jean II + * coming here. - Jean II */ return -EPROTO; } diff -Nru a/net/irda/irlmp.c b/net/irda/irlmp.c --- a/net/irda/irlmp.c Sat Apr 12 14:44:09 2003 +++ b/net/irda/irlmp.c Sat Apr 12 14:44:09 2003 @@ -925,7 +925,7 @@ * Now, check all discovered devices (if any), and notify client * only about the services that the client is interested in * We also notify only about the new devices unless the caller - * explicity request a dump of the log. Jean II + * explicitly request a dump of the log. Jean II */ discoveries = irlmp_copy_discoveries(log, &number, client->hint_mask.word, diff -Nru a/net/netsyms.c b/net/netsyms.c --- a/net/netsyms.c Sat Apr 12 14:44:07 2003 +++ b/net/netsyms.c Sat Apr 12 14:44:07 2003 @@ -234,8 +234,8 @@ #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) EXPORT_SYMBOL(br_handle_frame_hook); +EXPORT_SYMBOL(brioctl_set); #endif -EXPORT_SYMBOL(br_ioctl_hook); #ifdef CONFIG_NET_DIVERT EXPORT_SYMBOL(alloc_divert_blk); @@ -318,6 +318,8 @@ EXPORT_SYMBOL(xfrm_get_acqseq); EXPORT_SYMBOL(xfrm_parse_spi); EXPORT_SYMBOL(xfrm4_rcv); +EXPORT_SYMBOL(xfrm4_tunnel_register); +EXPORT_SYMBOL(xfrm4_tunnel_deregister); EXPORT_SYMBOL(xfrm_register_type); EXPORT_SYMBOL(xfrm_unregister_type); EXPORT_SYMBOL(xfrm_get_type); diff -Nru a/net/rxrpc/krxtimod.c b/net/rxrpc/krxtimod.c --- a/net/rxrpc/krxtimod.c Sat Apr 12 14:44:06 2003 +++ b/net/rxrpc/krxtimod.c Sat Apr 12 14:44:06 2003 @@ -98,18 +98,18 @@ spin_lock(&krxtimod_lock); if (list_empty(&krxtimod_list)) { timeout = MAX_SCHEDULE_TIMEOUT; - } - else { - timer = list_entry(krxtimod_list.next,rxrpc_timer_t,link); - timeout = timer->timo_jif; + } else { + unsigned long tmo; + + timer = list_entry(krxtimod_list.next, + rxrpc_timer_t, link); + tmo = timer->timo_jif; jif = jiffies; - if (time_before_eq(timeout,jif)) + if (time_before_eq(tmo,jif)) goto immediate; - else { - timeout = (long)timeout - (long)jiffies; - } + timeout = (long)tmo - (long)jiffies; } spin_unlock(&krxtimod_lock); diff -Nru a/net/sched/sch_csz.c b/net/sched/sch_csz.c --- a/net/sched/sch_csz.c Sat Apr 12 14:44:08 2003 +++ b/net/sched/sch_csz.c Sat Apr 12 14:44:08 2003 @@ -749,6 +749,14 @@ static void csz_destroy(struct Qdisc* sch) { + struct csz_sched_data *q = (struct csz_sched_data *)sch->data; + struct tcf_proto *tp; + + while ((tp = q->filter_list) != NULL) { + q->filter_list = tp->next; + tp->ops->destroy(tp); + } + MOD_DEC_USE_COUNT; } diff -Nru a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c --- a/net/sched/sch_dsmark.c Sat Apr 12 14:44:06 2003 +++ b/net/sched/sch_dsmark.c Sat Apr 12 14:44:06 2003 @@ -193,6 +193,7 @@ D2PRINTK("dsmark_enqueue(skb %p,sch %p,[qdisc %p])\n",skb,sch,p); if (p->set_tc_index) { + /* FIXME: Safe with non-linear skbs? --RR */ switch (skb->protocol) { case __constant_htons(ETH_P_IP): skb->tc_index = ipv4_get_dsfield(skb->nh.iph); diff -Nru a/net/sched/sch_htb.c b/net/sched/sch_htb.c --- a/net/sched/sch_htb.c Sat Apr 12 14:44:08 2003 +++ b/net/sched/sch_htb.c Sat Apr 12 14:44:08 2003 @@ -102,7 +102,9 @@ #define HTB_PASSQ q, #define HTB_ARGQ struct htb_sched *q, #define static +#undef __inline__ #define __inline__ +#undef inline #define inline #define HTB_CMAGIC 0xFEFAFEF1 #define htb_safe_rb_erase(N,R) do { BUG_TRAP((N)->rb_color != -1); \ diff -Nru a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c --- a/net/sched/sch_ingress.c Sat Apr 12 14:44:09 2003 +++ b/net/sched/sch_ingress.c Sat Apr 12 14:44:09 2003 @@ -222,6 +222,11 @@ */ if (dev->qdisc_ingress) { + /* FIXME: Push down to ->enqueue functions --RR */ + if (skb_is_nonlinear(*pskb) + && skb_linearize(*pskb, GFP_ATOMIC) != 0) + return NF_DROP; + spin_lock(&dev->queue_lock); if ((q = dev->qdisc_ingress) != NULL) fwres = q->enqueue(skb, q); diff -Nru a/net/sched/sch_prio.c b/net/sched/sch_prio.c --- a/net/sched/sch_prio.c Sat Apr 12 14:44:07 2003 +++ b/net/sched/sch_prio.c Sat Apr 12 14:44:07 2003 @@ -158,6 +158,12 @@ { int prio; struct prio_sched_data *q = (struct prio_sched_data *)sch->data; + struct tcf_proto *tp; + + while ((tp = q->filter_list) != NULL) { + q->filter_list = tp->next; + tp->ops->destroy(tp); + } for (prio=0; priobands; prio++) { qdisc_destroy(q->queues[prio]); diff -Nru a/net/socket.c b/net/socket.c --- a/net/socket.c Sat Apr 12 14:44:07 2003 +++ b/net/socket.c Sat Apr 12 14:44:07 2003 @@ -71,6 +71,7 @@ #include #include #include +#include #include #include #include @@ -712,7 +713,18 @@ file, vector, count, tot_len); } -int (*br_ioctl_hook)(unsigned long arg); + +static DECLARE_MUTEX(br_ioctl_mutex); +static int (*br_ioctl_hook)(unsigned long arg) = NULL; + +void brioctl_set(int (*hook)(unsigned long)) +{ + down(&br_ioctl_mutex); + br_ioctl_hook = hook; + up(&br_ioctl_mutex); +} + + int (*vlan_ioctl_hook)(unsigned long arg); #ifdef CONFIG_DLCI @@ -759,12 +771,16 @@ case SIOCGIFBR: case SIOCSIFBR: err = -ENOPKG; + #ifdef CONFIG_KMOD if (!br_ioctl_hook) request_module("bridge"); #endif - if (br_ioctl_hook) + + down(&br_ioctl_mutex); + if (br_ioctl_hook) err = br_ioctl_hook(arg); + up(&br_ioctl_mutex); break; case SIOCGIFVLAN: case SIOCSIFVLAN: diff -Nru a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c --- a/net/sunrpc/xprt.c Sat Apr 12 14:44:09 2003 +++ b/net/sunrpc/xprt.c Sat Apr 12 14:44:09 2003 @@ -625,7 +625,8 @@ { if (len > desc->count) len = desc->count; - skb_copy_bits(desc->skb, desc->offset, to, len); + if (skb_copy_bits(desc->skb, desc->offset, to, len)) + return 0; desc->count -= len; desc->offset += len; return len; @@ -669,11 +670,15 @@ csum2 = skb_checksum(skb, desc.offset, skb->len - desc.offset, 0); desc.csum = csum_block_add(desc.csum, csum2, desc.offset); } + if (desc.count) + return -1; if ((unsigned short)csum_fold(desc.csum)) return -1; return 0; no_checksum: xdr_partial_copy_from_skb(xdr, 0, &desc, skb_read_bits); + if (desc.count) + return -1; return 0; } @@ -750,7 +755,8 @@ { if (len > desc->count) len = desc->count; - skb_copy_bits(desc->skb, desc->offset, p, len); + if (skb_copy_bits(desc->skb, desc->offset, p, len)) + return 0; desc->offset += len; desc->count -= len; return len; diff -Nru a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c --- a/net/xfrm/xfrm_algo.c Sat Apr 12 14:44:07 2003 +++ b/net/xfrm/xfrm_algo.c Sat Apr 12 14:44:07 2003 @@ -445,7 +445,7 @@ void skb_icv_walk(const struct sk_buff *skb, struct crypto_tfm *tfm, int offset, int len, icv_update_fn_t icv_update) { - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); int i, copy = start - offset; struct scatterlist sg; @@ -521,7 +521,7 @@ int skb_to_sgvec(struct sk_buff *skb, struct scatterlist *sg, int offset, int len) { - int start = skb->len - skb->data_len; + int start = skb_headlen(skb); int i, copy = start - offset; int elt = 0; diff -Nru a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c --- a/net/xfrm/xfrm_policy.c Sat Apr 12 14:44:08 2003 +++ b/net/xfrm/xfrm_policy.c Sat Apr 12 14:44:08 2003 @@ -963,6 +963,8 @@ * are implied between each two transformations. */ for (i = pol->xfrm_nr-1, k = 0; i >= 0; i--) { + if (pol->xfrm_vec[i].optional) + continue; k = xfrm_policy_ok(pol->xfrm_vec+i, sp, k, family); if (k < 0) goto reject; diff -Nru a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c --- a/net/xfrm/xfrm_state.c Sat Apr 12 14:44:09 2003 +++ b/net/xfrm/xfrm_state.c Sat Apr 12 14:44:09 2003 @@ -13,6 +13,7 @@ * */ +#include #include #include #include @@ -41,8 +42,48 @@ static rwlock_t xfrm_state_afinfo_lock = RW_LOCK_UNLOCKED; static struct xfrm_state_afinfo *xfrm_state_afinfo[NPROTO]; +static struct work_struct xfrm_state_gc_work; +static struct list_head xfrm_state_gc_list = LIST_HEAD_INIT(xfrm_state_gc_list); +static spinlock_t xfrm_state_gc_lock = SPIN_LOCK_UNLOCKED; + static void __xfrm_state_delete(struct xfrm_state *x); +static void xfrm_state_gc_destroy(struct xfrm_state *x) +{ + if (del_timer(&x->timer)) + BUG(); + if (x->aalg) + kfree(x->aalg); + if (x->ealg) + kfree(x->ealg); + if (x->calg) + kfree(x->calg); + if (x->encap) + kfree(x->encap); + if (x->type) { + x->type->destructor(x); + xfrm_put_type(x->type); + } + kfree(x); + wake_up(&km_waitq); +} + +static void xfrm_state_gc_task(void *data) +{ + struct xfrm_state *x; + struct list_head *entry, *tmp; + struct list_head gc_list = LIST_HEAD_INIT(gc_list); + + spin_lock_bh(&xfrm_state_gc_lock); + list_splice_init(&xfrm_state_gc_list, &gc_list); + spin_unlock_bh(&xfrm_state_gc_lock); + + list_for_each_safe(entry, tmp, &gc_list) { + x = list_entry(entry, struct xfrm_state, bydst); + xfrm_state_gc_destroy(x); + } +} + static inline unsigned long make_jiffies(long secs) { if (secs >= (MAX_SCHEDULE_TIMEOUT-1)/HZ) @@ -149,28 +190,17 @@ void __xfrm_state_destroy(struct xfrm_state *x) { BUG_TRAP(x->km.state == XFRM_STATE_DEAD); - if (del_timer(&x->timer)) - BUG(); - if (x->aalg) - kfree(x->aalg); - if (x->ealg) - kfree(x->ealg); - if (x->calg) - kfree(x->calg); - if (x->encap) - kfree(x->encap); - if (x->type) - xfrm_put_type(x->type); - kfree(x); + + spin_lock_bh(&xfrm_state_gc_lock); + list_add(&x->bydst, &xfrm_state_gc_list); + spin_unlock_bh(&xfrm_state_gc_lock); + schedule_work(&xfrm_state_gc_work); } static void __xfrm_state_delete(struct xfrm_state *x) { - int kill = 0; - if (x->km.state != XFRM_STATE_DEAD) { x->km.state = XFRM_STATE_DEAD; - kill = 1; spin_lock(&xfrm_state_lock); list_del(&x->bydst); atomic_dec(&x->refcnt); @@ -189,22 +219,17 @@ */ if (atomic_read(&x->refcnt) > 2) xfrm_flush_bundles(x); - } - - /* All xfrm_state objects are created by one of two possible - * paths: - * - * 1) xfrm_state_alloc --> xfrm_state_insert - * 2) xfrm_state_lookup --> xfrm_state_insert - * - * The xfrm_state_lookup or xfrm_state_alloc call gives a - * reference, and that is what we are dropping here. - */ - atomic_dec(&x->refcnt); - if (kill && x->type) - x->type->destructor(x); - wake_up(&km_waitq); + /* All xfrm_state objects are created by one of two possible + * paths: + * + * 2) xfrm_state_lookup --> xfrm_state_insert + * + * The xfrm_state_lookup or xfrm_state_alloc call gives a + * reference, and that is what we are dropping here. + */ + atomic_dec(&x->refcnt); + } } void xfrm_state_delete(struct xfrm_state *x) @@ -773,5 +798,6 @@ INIT_LIST_HEAD(&xfrm_state_bydst[i]); INIT_LIST_HEAD(&xfrm_state_byspi[i]); } + INIT_WORK(&xfrm_state_gc_work, xfrm_state_gc_task, NULL); } diff -Nru a/scripts/per-cpu-check.awk b/scripts/per-cpu-check.awk --- a/scripts/per-cpu-check.awk Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,19 +0,0 @@ -/ __per_cpu_start$$/ { - IN_PER_CPU=1 -} - -/ __per_cpu_end$$/ { - IN_PER_CPU=0 -} - -/__per_cpu$$/ && ! ( / __ksymtab_/ || / __kstrtab_/ || / __kcrctab_/ || / __crc_/ ) { - if (!IN_PER_CPU) { - print $$3 " not in per-cpu section" > "/dev/stderr"; - FOUND=1; - } -} - -END { - exit FOUND; -} - diff -Nru a/sound/core/Makefile b/sound/core/Makefile --- a/sound/core/Makefile Sat Apr 12 14:44:09 2003 +++ b/sound/core/Makefile Sat Apr 12 14:44:09 2003 @@ -17,7 +17,7 @@ snd-page-alloc-objs := memalloc.o ifeq ($(CONFIG_PCI),y) -snd-page-alloc-objs += sgbuf.o memory_wrapper.o +snd-page-alloc-objs += sgbuf.o endif snd-rawmidi-objs := rawmidi.o diff -Nru a/sound/core/control.c b/sound/core/control.c --- a/sound/core/control.c Sat Apr 12 14:44:06 2003 +++ b/sound/core/control.c Sat Apr 12 14:44:06 2003 @@ -106,6 +106,7 @@ snd_card_t *card; snd_ctl_file_t *ctl; snd_kcontrol_t *control; + unsigned int idx; ctl = snd_magic_cast(snd_ctl_file_t, file->private_data, return -ENXIO); fasync_helper(-1, file, 0, &ctl->fasync); @@ -117,8 +118,9 @@ down_write(&card->controls_rwsem); list_for_each(list, &card->controls) { control = snd_kcontrol(list); - if (control->owner == ctl) - control->owner = NULL; + for (idx = 0; idx < control->count; idx++) + if (control->vd[idx].owner == ctl) + control->vd[idx].owner = NULL; } up_write(&card->controls_rwsem); snd_ctl_empty_read_queue(ctl); @@ -163,8 +165,8 @@ } _found: wake_up(&ctl->change_sleep); - kill_fasync(&ctl->fasync, SIGIO, POLL_IN); spin_unlock_irqrestore(&ctl->read_lock, flags); + kill_fasync(&ctl->fasync, SIGIO, POLL_IN); } read_unlock(&card->ctl_files_rwlock); } @@ -172,21 +174,28 @@ /** * snd_ctl_new - create a control instance from the template * @control: the control template + * @access: the default control access * * Allocates a new snd_kcontrol_t instance and copies the given template - * to the new instance. + * to the new instance. It does not copy volatile data (access). * * Returns the pointer of the new instance, or NULL on failure. */ -snd_kcontrol_t *snd_ctl_new(snd_kcontrol_t * control) +snd_kcontrol_t *snd_ctl_new(snd_kcontrol_t * control, unsigned int access) { snd_kcontrol_t *kctl; + unsigned int idx; snd_runtime_check(control != NULL, return NULL); - kctl = (snd_kcontrol_t *)snd_magic_kmalloc(snd_kcontrol_t, 0, GFP_KERNEL); + snd_runtime_check(control->count > 0, return NULL); + kctl = (snd_kcontrol_t *)snd_magic_kcalloc(snd_kcontrol_t, + sizeof(snd_kcontrol_volatile_t) * control->count, + GFP_KERNEL); if (kctl == NULL) return NULL; *kctl = *control; + for (idx = 0; idx < kctl->count; idx++) + kctl->vd[idx].access = access; return kctl; } @@ -197,13 +206,14 @@ * * Allocates a new snd_kcontrol_t instance and initialize from the given * template. When the access field of ncontrol is 0, it's assumed as - * READWRITE access. + * READWRITE access. When the count field is 0, it's assumes as one. * * Returns the pointer of the newly generated instance, or NULL on failure. */ snd_kcontrol_t *snd_ctl_new1(snd_kcontrol_new_t * ncontrol, void *private_data) { snd_kcontrol_t kctl; + unsigned int access; snd_runtime_check(ncontrol != NULL, return NULL); snd_assert(ncontrol->info != NULL, return NULL); @@ -214,14 +224,16 @@ if (ncontrol->name) strncpy(kctl.id.name, ncontrol->name, sizeof(kctl.id.name)-1); kctl.id.index = ncontrol->index; - kctl.access = ncontrol->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE : - (ncontrol->access & (SNDRV_CTL_ELEM_ACCESS_READWRITE|SNDRV_CTL_ELEM_ACCESS_INACTIVE|SNDRV_CTL_ELEM_ACCESS_INDIRECT)); + kctl.count = ncontrol->count ? ncontrol->count : 1; + access = ncontrol->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE : + (ncontrol->access & (SNDRV_CTL_ELEM_ACCESS_READWRITE|SNDRV_CTL_ELEM_ACCESS_INACTIVE| + SNDRV_CTL_ELEM_ACCESS_DINDIRECT|SNDRV_CTL_ELEM_ACCESS_INDIRECT)); kctl.info = ncontrol->info; kctl.get = ncontrol->get; kctl.put = ncontrol->put; kctl.private_value = ncontrol->private_value; kctl.private_data = private_data; - return snd_ctl_new(&kctl); + return snd_ctl_new(&kctl, access); } /** @@ -253,16 +265,20 @@ */ int snd_ctl_add(snd_card_t * card, snd_kcontrol_t * kcontrol) { + snd_ctl_elem_id_t id; + unsigned int idx; + snd_runtime_check(card != NULL && kcontrol != NULL, return -EINVAL); snd_assert(kcontrol->info != NULL, return -EINVAL); - snd_assert(!(kcontrol->access & SNDRV_CTL_ELEM_ACCESS_READ) || kcontrol->get != NULL, return -EINVAL); - snd_assert(!(kcontrol->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || kcontrol->put != NULL, return -EINVAL); down_write(&card->controls_rwsem); list_add_tail(&kcontrol->list, &card->controls); - card->controls_count++; - kcontrol->id.numid = ++card->last_numid; + card->controls_count += kcontrol->count; + kcontrol->id.numid = card->last_numid + 1; + card->last_numid += kcontrol->count; up_write(&card->controls_rwsem); - snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_ADD, &kcontrol->id); + id = kcontrol->id; + for (idx = 0; idx < kcontrol->count; idx++, id.index++, id.numid++) + snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_ADD, &id); return 0; } @@ -278,12 +294,17 @@ */ int snd_ctl_remove(snd_card_t * card, snd_kcontrol_t * kcontrol) { + snd_ctl_elem_id_t id; + unsigned int idx; + snd_runtime_check(card != NULL && kcontrol != NULL, return -EINVAL); down_write(&card->controls_rwsem); list_del(&kcontrol->list); - card->controls_count--; + card->controls_count -= kcontrol->count; up_write(&card->controls_rwsem); - snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_REMOVE, &kcontrol->id); + id = kcontrol->id; + for (idx = 0; idx < kcontrol->count; idx++, id.index++, id.numid++) + snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_REMOVE, &id); snd_ctl_free_one(kcontrol); return 0; } @@ -308,7 +329,8 @@ return snd_ctl_remove(card, kctl); } -static snd_kcontrol_t *_ctl_find_id(snd_card_t * card, snd_ctl_elem_id_t *id); /* w/o lock */ +static snd_kcontrol_t *_ctl_find_id +(snd_card_t * card, snd_ctl_elem_id_t *id); /* w/o lock */ /** * snd_ctl_rename_id - replace the id of a control on the card @@ -332,7 +354,8 @@ return -ENOENT; } kctl->id = *dst_id; - kctl->id.numid = ++card->last_numid; + kctl->id.numid = card->last_numid + 1; + card->last_numid += kctl->count; up_write(&card->controls_rwsem); return 0; } @@ -345,7 +368,7 @@ snd_runtime_check(card != NULL && numid != 0, return NULL); list_for_each(list, &card->controls) { kctl = snd_kcontrol(list); - if (kctl->id.numid == numid) + if (kctl->id.numid <= numid && kctl->id.numid + kctl->count > numid) return kctl; } return NULL; @@ -369,8 +392,14 @@ continue; if (strncmp(kctl->id.name, id->name, sizeof(kctl->id.name))) continue; - if (kctl->id.index != id->index) + if (kctl->id.index > id->index) + continue; + if (kctl->id.index + kctl->count <= id->index) + continue; + if (kctl->id.index != id->index) { + printk("BOOOR: %i, %i, %i\n", kctl->id.index, kctl->count, id->index); continue; + } return kctl; } return NULL; @@ -438,12 +467,13 @@ snd_ctl_elem_list_t list; snd_kcontrol_t *kctl; snd_ctl_elem_id_t *dst, *id; - int offset, space; + unsigned int offset, space, first, jidx; if (copy_from_user(&list, _list, sizeof(list))) return -EFAULT; offset = list.offset; space = list.space; + first = 0; /* try limit maximum space */ if (space > 16384) return -ENOMEM; @@ -455,17 +485,27 @@ down_read(&card->controls_rwsem); list.count = card->controls_count; plist = card->controls.next; - while (offset-- > 0 && plist != &card->controls) + while (plist != &card->controls) { + if (offset == 0) + break; + kctl = snd_kcontrol(plist); + if (offset < kctl->count) + break; + offset -= kctl->count; plist = plist->next; + } list.used = 0; id = dst; while (space > 0 && plist != &card->controls) { kctl = snd_kcontrol(plist); - memcpy(id, &kctl->id, sizeof(snd_ctl_elem_id_t)); - id++; + for (jidx = offset; space > 0 && jidx < kctl->count; jidx++) { + snd_ctl_build_ioff(id, kctl, jidx); + id++; + space--; + list.used++; + } plist = plist->next; - space--; - list.used++; + offset = 0; } up_read(&card->controls_rwsem); if (list.used > 0 && copy_to_user(list.pids, dst, list.used * sizeof(snd_ctl_elem_id_t))) @@ -486,6 +526,8 @@ snd_card_t *card = ctl->card; snd_ctl_elem_info_t info; snd_kcontrol_t *kctl; + snd_kcontrol_volatile_t *vd; + unsigned int index_offset; int result; if (copy_from_user(&info, _info, sizeof(info))) @@ -502,13 +544,15 @@ result = kctl->info(kctl, &info); if (result >= 0) { snd_assert(info.access == 0, ); - info.id = kctl->id; - info.access = kctl->access; - if (kctl->owner) { + index_offset = snd_ctl_get_ioff(kctl, &info.id); + vd = &kctl->vd[index_offset]; + snd_ctl_build_ioff(&info.id, kctl, index_offset); + info.access = vd->access; + if (vd->owner) { info.access |= SNDRV_CTL_ELEM_ACCESS_LOCK; - if (kctl->owner == ctl) + if (vd->owner == ctl) info.access |= SNDRV_CTL_ELEM_ACCESS_OWNER; - info.owner = kctl->owner_pid; + info.owner = vd->owner_pid; } else { info.owner = -1; } @@ -522,8 +566,11 @@ static int snd_ctl_elem_read(snd_card_t *card, snd_ctl_elem_value_t *_control) { + snd_ctl_elem_value_t *control; snd_kcontrol_t *kctl; + snd_kcontrol_volatile_t *vd; + unsigned int index_offset; int result, indirect; control = kmalloc(sizeof(*control), GFP_KERNEL); @@ -536,16 +583,18 @@ if (kctl == NULL) { result = -ENOENT; } else { - indirect = kctl->access & SNDRV_CTL_ELEM_ACCESS_INDIRECT ? 1 : 0; + index_offset = snd_ctl_get_ioff(kctl, &control->id); + vd = &kctl->vd[index_offset]; + indirect = vd->access & SNDRV_CTL_ELEM_ACCESS_INDIRECT ? 1 : 0; if (control->indirect != indirect) { result = -EACCES; } else { - if ((kctl->access & SNDRV_CTL_ELEM_ACCESS_READ) && kctl->get != NULL) { + if ((vd->access & SNDRV_CTL_ELEM_ACCESS_READ) && kctl->get != NULL) { + snd_ctl_build_ioff(&control->id, kctl, index_offset); result = kctl->get(kctl, control); - if (result >= 0) - control->id = kctl->id; - } else + } else { result = -EPERM; + } } } up_read(&card->controls_rwsem); @@ -561,6 +610,8 @@ snd_card_t *card = file->card; snd_ctl_elem_value_t *control; snd_kcontrol_t *kctl; + snd_kcontrol_volatile_t *vd; + unsigned int index_offset; int result, indirect; control = kmalloc(sizeof(*control), GFP_KERNEL); @@ -573,22 +624,23 @@ if (kctl == NULL) { result = -ENOENT; } else { - indirect = kctl->access & SNDRV_CTL_ELEM_ACCESS_INDIRECT ? 1 : 0; + index_offset = snd_ctl_get_ioff(kctl, &control->id); + vd = &kctl->vd[index_offset]; + indirect = vd->access & SNDRV_CTL_ELEM_ACCESS_INDIRECT ? 1 : 0; if (control->indirect != indirect) { result = -EACCES; } else { - if (!(kctl->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || + if (!(vd->access & SNDRV_CTL_ELEM_ACCESS_WRITE) || kctl->put == NULL || - (kctl->owner != NULL && kctl->owner != file)) { + (vd->owner != NULL && vd->owner != file)) { result = -EPERM; } else { + snd_ctl_build_ioff(&control->id, kctl, index_offset); result = kctl->put(kctl, control); - if (result >= 0) - control->id = kctl->id; } if (result > 0) { up_read(&card->controls_rwsem); - snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id); + snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &control->id); result = 0; goto __unlocked; } @@ -608,6 +660,7 @@ snd_card_t *card = file->card; snd_ctl_elem_id_t id; snd_kcontrol_t *kctl; + snd_kcontrol_volatile_t *vd; int result; if (copy_from_user(&id, _id, sizeof(id))) @@ -617,11 +670,12 @@ if (kctl == NULL) { result = -ENOENT; } else { - if (kctl->owner != NULL) + vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; + if (vd->owner != NULL) result = -EBUSY; else { - kctl->owner = file; - kctl->owner_pid = current->pid; + vd->owner = file; + vd->owner_pid = current->pid; result = 0; } } @@ -634,6 +688,7 @@ snd_card_t *card = file->card; snd_ctl_elem_id_t id; snd_kcontrol_t *kctl; + snd_kcontrol_volatile_t *vd; int result; if (copy_from_user(&id, _id, sizeof(id))) @@ -643,13 +698,14 @@ if (kctl == NULL) { result = -ENOENT; } else { - if (kctl->owner == NULL) + vd = &kctl->vd[snd_ctl_get_ioff(kctl, &id)]; + if (vd->owner == NULL) result = -EINVAL; - else if (kctl->owner != file) + else if (vd->owner != file) result = -EPERM; else { - kctl->owner = NULL; - kctl->owner_pid = 0; + vd->owner = NULL; + vd->owner_pid = 0; result = 0; } } diff -Nru a/sound/core/info.c b/sound/core/info.c --- a/sound/core/info.c Sat Apr 12 14:44:10 2003 +++ b/sound/core/info.c Sat Apr 12 14:44:10 2003 @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -1032,6 +1033,7 @@ static inline void snd_info_device_entry_prepare(struct proc_dir_entry *de, snd_info_entry_t *entry) { de->fill_inode = snd_info_device_fill_inode; + de->ops = &snd_info_device_inode_operations; } #else static inline void snd_info_device_entry_prepare(struct proc_dir_entry *de, snd_info_entry_t *entry) @@ -1067,9 +1069,6 @@ p = create_proc_entry(entry->name, entry->mode, snd_proc_dev); if (p) { snd_info_device_entry_prepare(p, entry); -#ifdef LINUX_2_2 - p->ops = &snd_info_device_inode_operations; -#endif } else { up(&info_mutex); snd_info_free_entry(entry); diff -Nru a/sound/core/memalloc.c b/sound/core/memalloc.c --- a/sound/core/memalloc.c Sat Apr 12 14:44:10 2003 +++ b/sound/core/memalloc.c Sat Apr 12 14:44:10 2003 @@ -36,6 +36,20 @@ MODULE_LICENSE("GPL"); +/* so far, pre-defined allocation is only for hammerfall cards... */ +/* #define ENABLE_PREALLOC */ + + +#ifdef ENABLE_PREALLOC +#ifndef SNDRV_CARDS +#define SNDRV_CARDS 8 +#endif +static int enable[8] = {[0 ... (SNDRV_CARDS-1)] = 1}; +MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(enable, "Enable cards to allocate buffers."); +#endif + + /* */ @@ -50,6 +64,8 @@ struct list_head list; }; +/* id for pre-allocated buffers */ +#define SNDRV_DMA_DEVICE_UNUSED (unsigned int)-1 #ifdef CONFIG_SND_DEBUG #define __ASTRING__(x) #x @@ -63,23 +79,74 @@ #define snd_assert(expr, args...) /**/ #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) +#ifdef CONFIG_PCI +#if defined(__i386__) || defined(__ppc__) || defined(__x86_64__) +#define HACK_PCI_ALLOC_CONSISTENT + +/* + * A hack to allocate large buffers via pci_alloc_consistent() + * + * since pci_alloc_consistent always tries GFP_DMA when the requested + * pci memory region is below 32bit, it happens quite often that even + * 2 order of pages cannot be allocated. + * + * so in the following, we allocate at first without dma_mask, so that + * allocation will be done without GFP_DMA. if the area doesn't match + * with the requested region, then realloate with the original dma_mask + * again. + */ + +void *snd_pci_hack_alloc_consistent(struct pci_dev *hwdev, size_t size, + dma_addr_t *dma_handle) +{ + void *ret; + u64 dma_mask; + unsigned long rmask; + + if (hwdev == NULL) + return pci_alloc_consistent(hwdev, size, dma_handle); + dma_mask = hwdev->dma_mask; + rmask = ~((unsigned long)dma_mask); + hwdev->dma_mask = 0xffffffff; /* do without masking */ + ret = pci_alloc_consistent(hwdev, size, dma_handle); + hwdev->dma_mask = dma_mask; /* restore */ + if (ret) { + /* obtained address is out of range? */ + if (((unsigned long)*dma_handle + size - 1) & rmask) { + /* reallocate with the proper mask */ + pci_free_consistent(hwdev, size, ret, *dma_handle); + ret = pci_alloc_consistent(hwdev, size, dma_handle); + } + } else { + /* wish to success now with the proper mask... */ + if (dma_mask != 0xffffffff) + ret = pci_alloc_consistent(hwdev, size, dma_handle); + } + return ret; +} + /* redefine pci_alloc_consistent for some architectures */ -#ifdef HACK_PCI_ALLOC_CONSISTENT #undef pci_alloc_consistent #define pci_alloc_consistent snd_pci_hack_alloc_consistent -#endif + +#endif /* arch */ +#endif /* CONFIG_PCI */ +#endif /* LINUX >= 2.4.0 */ /* * compare the two devices * returns non-zero if matched. */ -static int compare_device(const struct snd_dma_device *a, const struct snd_dma_device *b) +static int compare_device(const struct snd_dma_device *a, const struct snd_dma_device *b, int allow_unused) { if (a->type != b->type) return 0; - if (a->id != b->id) - return 0; + if (a->id != b->id) { + if (! allow_unused || (a->id != SNDRV_DMA_DEVICE_UNUSED && b->id != SNDRV_DMA_DEVICE_UNUSED)) + return 0; + } switch (a->type) { case SNDRV_DMA_TYPE_CONTINUOUS: #ifdef CONFIG_ISA @@ -193,14 +260,14 @@ /* * search for the device */ -static struct snd_mem_list *mem_list_find(const struct snd_dma_device *dev) +static struct snd_mem_list *mem_list_find(const struct snd_dma_device *dev, int allow_unused) { struct list_head *p; struct snd_mem_list *mem; list_for_each(p, &mem_list_head) { mem = list_entry(p, struct snd_mem_list, list); - if (compare_device(&mem->dev, dev)) + if (compare_device(&mem->dev, dev, allow_unused)) return mem; } return NULL; @@ -224,9 +291,10 @@ snd_assert(dev && dmab, return 0); down(&list_mutex); - mem = mem_list_find(dev); + mem = mem_list_find(dev, 1); if (mem) { mem->used = 1; + mem->dev = *dev; *dmab = mem->buffer; up(&list_mutex); return dmab->bytes; @@ -250,7 +318,7 @@ snd_assert(dev, return -EINVAL); down(&list_mutex); - mem = mem_list_find(dev); + mem = mem_list_find(dev, 0); if (mem) mem->used = 0; up(&list_mutex); @@ -277,7 +345,7 @@ snd_assert(dev, return -EINVAL); down(&list_mutex); - mem = mem_list_find(dev); + mem = mem_list_find(dev, 0); if (mem) { snd_dma_free_pages(dev, &mem->buffer); if (! dmab || ! dmab->bytes) { @@ -293,6 +361,10 @@ return 0; } mem = kmalloc(sizeof(*mem), GFP_KERNEL); + if (! mem) { + up(&list_mutex); + return -ENOMEM; + } mem->dev = *dev; list_add(&mem->list, &mem_list_head); } @@ -712,6 +784,85 @@ #endif /* CONFIG_SBUS */ +#ifdef ENABLE_PREALLOC +/* + * allocation of buffers for pre-defined devices + */ + +/* FIXME: for pci only - other bus? */ +struct prealloc_dev { + unsigned short vendor; + unsigned short device; + unsigned long dma_mask; + unsigned int size; + unsigned int buffers; +}; + +#define HAMMERFALL_BUFFER_SIZE (16*1024*4*(26+1)) + +static struct prealloc_dev prealloc_devices[] __initdata = { + { + /* hammerfall */ + .vendor = 0x10ee, + .device = 0x3fc4, + .dma_mask = 0xffffffff, + .size = HAMMERFALL_BUFFER_SIZE, + .buffers = 2 + }, + { + /* HDSP */ + .vendor = 0x10ee, + .device = 0x3fc5, + .dma_mask = 0xffffffff, + .size = HAMMERFALL_BUFFER_SIZE, + .buffers = 2 + }, + { }, /* terminator */ +}; + +static void __init preallocate_cards(void) +{ + struct pci_dev *pci; + int card; + + card = 0; + + pci_for_each_dev(pci) { + struct prealloc_dev *dev; + if (card >= SNDRV_CARDS) + break; + for (dev = prealloc_devices; dev->vendor; dev++) { + unsigned int i; + if (dev->vendor != pci->vendor || dev->device != pci->device) + continue; + if (! enable[card++]) + continue; + + if (pci_set_dma_mask(pci, dev->dma_mask) < 0) { + printk(KERN_ERR "snd-page-alloc: cannot set DMA mask %lx for pci %04x:%04x\n", dev->dma_mask, dev->vendor, dev->device); + continue; + } + + for (i = 0; i < dev->buffers; i++) { + struct snd_dma_device dma; + struct snd_dma_buffer buf; + snd_dma_device_pci(&dma, pci, SNDRV_DMA_DEVICE_UNUSED); + memset(&buf, 0, sizeof(buf)); + snd_dma_alloc_pages(&dma, dev->size, &buf); + if (buf.bytes) { + if (snd_dma_set_reserved(&dma, &buf) < 0) { + printk(KERN_WARNING "snd-page-alloc: cannot reserve buffer\n"); + snd_dma_free_pages(&dma, &buf); + } + } else + printk(KERN_WARNING "snd-page-alloc: cannot allocate buffer pages (size = %d)\n", dev->size); + } + } + } +} +#endif + + #ifdef CONFIG_PROC_FS /* * proc file interface @@ -735,6 +886,9 @@ static int __init snd_mem_init(void) { create_proc_read_entry("driver/snd-page-alloc", 0, 0, snd_mem_proc_read, NULL); +#ifdef ENABLE_PREALLOC + preallocate_cards(); +#endif return 0; } @@ -774,9 +928,6 @@ EXPORT_SYMBOL(snd_free_pci_pages); EXPORT_SYMBOL(snd_malloc_sgbuf_pages); EXPORT_SYMBOL(snd_free_sgbuf_pages); -#ifdef HACK_PCI_ALLOC_CONSISTENT -EXPORT_SYMBOL(snd_pci_hack_alloc_consistent); -#endif #endif #ifdef CONFIG_SBUS EXPORT_SYMBOL(snd_malloc_sbus_pages); diff -Nru a/sound/core/memory_wrapper.c b/sound/core/memory_wrapper.c --- a/sound/core/memory_wrapper.c Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,70 +0,0 @@ -/* - * Copyright (c) by Jaroslav Kysela - * Takashi Iwai - * - * 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 -#include -#include -#include - - -#ifdef HACK_PCI_ALLOC_CONSISTENT -/* - * A dirty hack... when the kernel code is fixed this should be removed. - * - * since pci_alloc_consistent always tries GFP_DMA when the requested - * pci memory region is below 32bit, it happens quite often that even - * 2 order of pages cannot be allocated. - * - * so in the following, we allocate at first without dma_mask, so that - * allocation will be done without GFP_DMA. if the area doesn't match - * with the requested region, then realloate with the original dma_mask - * again. - */ - -void *snd_pci_hack_alloc_consistent(struct pci_dev *hwdev, size_t size, - dma_addr_t *dma_handle) -{ - void *ret; - u64 dma_mask; - unsigned long rmask; - - if (hwdev == NULL) - return pci_alloc_consistent(hwdev, size, dma_handle); - dma_mask = hwdev->dma_mask; - rmask = ~((unsigned long)dma_mask); - hwdev->dma_mask = 0xffffffff; /* do without masking */ - ret = pci_alloc_consistent(hwdev, size, dma_handle); - hwdev->dma_mask = dma_mask; /* restore */ - if (ret) { - /* obtained address is out of range? */ - if (((unsigned long)*dma_handle + size - 1) & rmask) { - /* reallocate with the proper mask */ - pci_free_consistent(hwdev, size, ret, *dma_handle); - ret = pci_alloc_consistent(hwdev, size, dma_handle); - } - } else { - /* wish to success now with the proper mask... */ - if (dma_mask != 0xffffffff) - ret = pci_alloc_consistent(hwdev, size, dma_handle); - } - return ret; -} - -#endif /* HACK_PCI_ALLOC_CONSISTENT */ diff -Nru a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c --- a/sound/core/oss/mixer_oss.c Sat Apr 12 14:44:08 2003 +++ b/sound/core/oss/mixer_oss.c Sat Apr 12 14:44:08 2003 @@ -204,6 +204,8 @@ static int snd_mixer_oss_set_recsrc(snd_mixer_oss_file_t *fmixer, int recsrc) { snd_mixer_oss_t *mixer = fmixer->mixer; + snd_mixer_oss_slot_t *pslot; + int chn, active; int result = 0; if (mixer == NULL) @@ -214,16 +216,15 @@ mixer->put_recsrc(fmixer, ffz(~recsrc)); mixer->get_recsrc(fmixer, &result); result = 1 << result; - } else { - snd_mixer_oss_slot_t *pslot; - int chn, active; - for (chn = 0; chn < 31; chn++) { - pslot = &mixer->slots[chn]; - if (pslot->put_recsrc) { - active = (recsrc & (1 << chn)) ? 1 : 0; - pslot->put_recsrc(fmixer, pslot, active); - } + } + for (chn = 0; chn < 31; chn++) { + pslot = &mixer->slots[chn]; + if (pslot->put_recsrc) { + active = (recsrc & (1 << chn)) ? 1 : 0; + pslot->put_recsrc(fmixer, pslot, active); } + } + if (! result) { for (chn = 0; chn < 31; chn++) { pslot = &mixer->slots[chn]; if (pslot->get_recsrc) { diff -Nru a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c --- a/sound/core/oss/pcm_oss.c Sat Apr 12 14:44:09 2003 +++ b/sound/core/oss/pcm_oss.c Sat Apr 12 14:44:09 2003 @@ -24,6 +24,7 @@ #endif #include +#include #include #include #include @@ -930,8 +931,8 @@ runtime = substream->runtime; if (rate < 1000) rate = 1000; - else if (rate > 48000) - rate = 48000; + else if (rate > 192000) + rate = 192000; if (runtime->oss.rate != rate) { runtime->oss.params = 1; runtime->oss.rate = rate; diff -Nru a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c --- a/sound/core/pcm_lib.c Sat Apr 12 14:44:07 2003 +++ b/sound/core/pcm_lib.c Sat Apr 12 14:44:07 2003 @@ -1711,7 +1711,7 @@ * snd_pcm_hw_param_choose * * Choose one configuration from configuration space defined by PARAMS - * The configuration choosen is that obtained fixing in this order: + * The configuration chosen is that obtained fixing in this order: * first access, first format, first subformat, min channels, * min rate, min period time, max buffer size, min tick time */ @@ -2119,6 +2119,7 @@ spin_lock_irq(&runtime->lock); switch (runtime->status->state) { case SNDRV_PCM_STATE_XRUN: + case SNDRV_PCM_STATE_DRAINING: state = ERROR; goto _end_loop; case SNDRV_PCM_STATE_SUSPENDED: @@ -2377,6 +2378,7 @@ snd_pcm_uframes_t cont; if (runtime->sleep_min == 0 && runtime->status->state == SNDRV_PCM_STATE_RUNNING) snd_pcm_update_hw_ptr(substream); + __draining: avail = snd_pcm_capture_avail(runtime); if (runtime->status->state == SNDRV_PCM_STATE_DRAINING) { if (avail < runtime->xfer_align) { @@ -2418,6 +2420,8 @@ case SNDRV_PCM_STATE_SUSPENDED: state = SUSPENDED; goto _end_loop; + case SNDRV_PCM_STATE_DRAINING: + goto __draining; default: break; } diff -Nru a/sound/core/pcm_native.c b/sound/core/pcm_native.c --- a/sound/core/pcm_native.c Sat Apr 12 14:44:07 2003 +++ b/sound/core/pcm_native.c Sat Apr 12 14:44:07 2003 @@ -20,6 +20,7 @@ */ #include +#include #include #include #include diff -Nru a/sound/core/rtctimer.c b/sound/core/rtctimer.c --- a/sound/core/rtctimer.c Sat Apr 12 14:44:09 2003 +++ b/sound/core/rtctimer.c Sat Apr 12 14:44:09 2003 @@ -31,11 +31,7 @@ #if defined(CONFIG_RTC) || defined(CONFIG_RTC_MODULE) -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 2, 12) /* FIXME: which 2.2.x kernel? */ -#include -#else #include -#endif #define RTC_FREQ 1024 /* default frequency */ #define NANO_SEC 1000000000L /* 10^9 in sec */ diff -Nru a/sound/core/seq/instr/ainstr_iw.c b/sound/core/seq/instr/ainstr_iw.c --- a/sound/core/seq/instr/ainstr_iw.c Sat Apr 12 14:44:08 2003 +++ b/sound/core/seq/instr/ainstr_iw.c Sat Apr 12 14:44:08 2003 @@ -78,7 +78,7 @@ while (1) { if (*len < (long)sizeof(__u32)) return -EINVAL; - if (copy_from_user(&stype, data, sizeof(stype))) + if (copy_from_user(&stype, *data, sizeof(stype))) return -EFAULT; if (stype == IWFFFF_STRU_WAVE) return 0; diff -Nru a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c --- a/sound/core/seq/oss/seq_oss_midi.c Sat Apr 12 14:44:05 2003 +++ b/sound/core/seq/oss/seq_oss_midi.c Sat Apr 12 14:44:05 2003 @@ -593,6 +593,7 @@ break; } + snd_seq_oss_readq_put_timestamp(dp->readq, ev->time.tick, dp->seq_mode); snd_seq_oss_readq_put_event(dp->readq, &ossev); return 0; diff -Nru a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c --- a/sound/core/seq/seq_memory.c Sat Apr 12 14:44:06 2003 +++ b/sound/core/seq/seq_memory.c Sat Apr 12 14:44:06 2003 @@ -235,14 +235,14 @@ while (pool->free == NULL && ! nonblock && ! pool->closing) { spin_unlock(&pool->lock); -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) +#ifdef LINUX_2_2 /* change semaphore to allow other clients to access device file */ if (file) up(&semaphore_of(file)); #endif interruptible_sleep_on(&pool->output_sleep); -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) +#ifdef LINUX_2_2 /* restore semaphore again */ if (file) down(&semaphore_of(file)); diff -Nru a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c --- a/sound/core/seq/seq_midi.c Sat Apr 12 14:44:09 2003 +++ b/sound/core/seq/seq_midi.c Sat Apr 12 14:44:09 2003 @@ -200,6 +200,7 @@ snd_rawmidi_kernel_release(&msynth->input_rfile); return err; } + snd_midi_event_reset_encode(msynth->parser); runtime->event = snd_midi_input_event; runtime->private_data = msynth; snd_rawmidi_kernel_read(msynth->input_rfile.input, NULL, 0); @@ -236,6 +237,7 @@ snd_rawmidi_kernel_release(&msynth->output_rfile); return err; } + snd_midi_event_reset_decode(msynth->parser); return 0; } diff -Nru a/sound/core/seq/seq_midi_emul.c b/sound/core/seq/seq_midi_emul.c --- a/sound/core/seq/seq_midi_emul.c Sat Apr 12 14:44:10 2003 +++ b/sound/core/seq/seq_midi_emul.c Sat Apr 12 14:44:10 2003 @@ -561,7 +561,7 @@ } else if (buf[5] == 0x00 && buf[6] == 0x04) { /* master volume */ - parsed = SNDRV_MIDI_SYSEX_GS_REVERB_MODE; + parsed = SNDRV_MIDI_SYSEX_GS_MASTER_VOLUME; chset->gs_master_volume = buf[7]; } diff -Nru a/sound/core/sound.c b/sound/core/sound.c --- a/sound/core/sound.c Sat Apr 12 14:44:09 2003 +++ b/sound/core/sound.c Sat Apr 12 14:44:09 2003 @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -345,6 +346,8 @@ #ifdef CONFIG_DEVFS_FS #if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) devfs_handle = devfs_mk_dir(NULL, "snd", 3, NULL); +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,5,67) + devfs_handle = devfs_mk_dir(NULL, "snd", NULL); #else devfs_handle = devfs_mk_dir("snd"); #endif diff -Nru a/sound/core/wrappers.c b/sound/core/wrappers.c --- a/sound/core/wrappers.c Sat Apr 12 14:44:06 2003 +++ b/sound/core/wrappers.c Sat Apr 12 14:44:06 2003 @@ -19,7 +19,6 @@ * */ -#include #include #include #include diff -Nru a/sound/drivers/dummy.c b/sound/drivers/dummy.c --- a/sound/drivers/dummy.c Sat Apr 12 14:44:09 2003 +++ b/sound/drivers/dummy.c Sat Apr 12 14:44:09 2003 @@ -19,6 +19,7 @@ */ #include +#include #include #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0) #include diff -Nru a/sound/drivers/opl3/opl3_lib.c b/sound/drivers/opl3/opl3_lib.c --- a/sound/drivers/opl3/opl3_lib.c Sat Apr 12 14:44:06 2003 +++ b/sound/drivers/opl3/opl3_lib.c Sat Apr 12 14:44:06 2003 @@ -470,7 +470,7 @@ case OPL3_HW_OPL4: opl3->max_voices = MAX_OPL3_VOICES; snd_assert(opl3->r_port != 0, snd_opl3_free(opl3); return -ENODEV); - opl3->command(opl3, OPL3_RIGHT | OPL3_REG_MODE, 0x00); /* Enter OPL2 mode */ + opl3->command(opl3, OPL3_RIGHT | OPL3_REG_MODE, OPL3_OPL3_ENABLE); /* Enter OPL3 mode */ } if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, opl3, &ops)) < 0) { snd_opl3_free(opl3); diff -Nru a/sound/drivers/opl3/opl3_seq.c b/sound/drivers/opl3/opl3_seq.c --- a/sound/drivers/opl3/opl3_seq.c Sat Apr 12 14:44:08 2003 +++ b/sound/drivers/opl3/opl3_seq.c Sat Apr 12 14:44:08 2003 @@ -70,8 +70,6 @@ opl3->use_time = 0; opl3->connection_reg = 0x00; if (opl3->hardware >= OPL3_HW_OPL3) { - /* Enter OPL3 mode */ - opl3->command(opl3, OPL3_RIGHT | OPL3_REG_MODE, OPL3_OPL3_ENABLE); /* Clear 4-op connections */ opl3->command(opl3, OPL3_RIGHT | OPL3_REG_CONNECTION_SELECT, opl3->connection_reg); @@ -197,7 +195,7 @@ callbacks.private_data = opl3; opl_ver = (opl3->hardware & OPL3_HW_MASK) >> 8; - sprintf(name, "OPL%i Port", opl_ver); + sprintf(name, "OPL%i FM Port", opl_ver); opl3->chset->client = opl3->seq_client; opl3->chset->port = snd_seq_event_port_attach(opl3->seq_client, &callbacks, diff -Nru a/sound/drivers/opl3/opl3_synth.c b/sound/drivers/opl3/opl3_synth.c --- a/sound/drivers/opl3/opl3_synth.c Sat Apr 12 14:44:06 2003 +++ b/sound/drivers/opl3/opl3_synth.c Sat Apr 12 14:44:06 2003 @@ -220,9 +220,6 @@ opl3->command(opl3, opl3_reg, 0x00); /* Note off */ } - if (opl3->hardware >= OPL3_HW_OPL3) - opl3->command(opl3, OPL3_RIGHT | OPL3_REG_MODE, 0x00); /* Enter OPL2 mode */ - opl3->max_voices = MAX_OPL2_VOICES; opl3->fm_mode = SNDRV_DM_FM_MODE_OPL2; @@ -426,14 +423,9 @@ if ((mode == SNDRV_DM_FM_MODE_OPL3) && (opl3->hardware < OPL3_HW_OPL3)) return -EINVAL; - if (mode == SNDRV_DM_FM_MODE_OPL3) { - opl3->command(opl3, OPL3_RIGHT | OPL3_REG_MODE, OPL3_OPL3_ENABLE); /* Enter OPL3 mode */ - opl3->fm_mode = SNDRV_DM_FM_MODE_OPL3; + opl3->fm_mode = mode; + if (opl3->hardware >= OPL3_HW_OPL3) opl3->command(opl3, OPL3_RIGHT | OPL3_REG_CONNECTION_SELECT, 0x00); /* Clear 4-op connections */ - } else { - opl3->command(opl3, OPL3_RIGHT | OPL3_REG_MODE, 0x00); /* Enter OPL2 mode */ - opl3->fm_mode = SNDRV_DM_FM_MODE_OPL2; - } return 0; } diff -Nru a/sound/i2c/cs8427.c b/sound/i2c/cs8427.c --- a/sound/i2c/cs8427.c Sat Apr 12 14:44:06 2003 +++ b/sound/i2c/cs8427.c Sat Apr 12 14:44:06 2003 @@ -425,7 +425,7 @@ chip = snd_magic_cast(cs8427_t, cs8427->private_data, return -ENXIO); if (active) memcpy(chip->playback.pcm_status, chip->playback.def_status, 24); - chip->playback.pcm_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + chip->playback.pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(cs8427->bus->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &chip->playback.pcm_ctl->id); return 0; diff -Nru a/sound/i2c/l3/uda1341.c b/sound/i2c/l3/uda1341.c --- a/sound/i2c/l3/uda1341.c Sat Apr 12 14:44:08 2003 +++ b/sound/i2c/l3/uda1341.c Sat Apr 12 14:44:08 2003 @@ -17,7 +17,7 @@ * 2002-05-12 Tomas Kasparek another code cleanup */ -/* $Id: uda1341.c,v 1.7 2003/02/13 19:19:19 perex Exp $ */ +/* $Id: uda1341.c,v 1.8 2003/03/20 16:45:59 perex Exp $ */ #include #include diff -Nru a/sound/isa/Kconfig b/sound/isa/Kconfig --- a/sound/isa/Kconfig Sat Apr 12 14:44:09 2003 +++ b/sound/isa/Kconfig Sat Apr 12 14:44:09 2003 @@ -41,9 +41,10 @@ config SND_PC98_CS4232 tristate "NEC PC9800 CS4232 driver" - depends on SND + depends on SND && PC9800 help - Say 'Y' or 'M' to include support for NEC PC-9801/PC-9821 sound cards + Say 'Y' or 'M' to include support for NEC PC-9801/PC-9821 on-board + soundchip based on CS4232. config SND_ES968 tristate "Generic ESS ES968 driver" diff -Nru a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c --- a/sound/isa/ad1816a/ad1816a.c Sat Apr 12 14:44:06 2003 +++ b/sound/isa/ad1816a/ad1816a.c Sat Apr 12 14:44:06 2003 @@ -22,11 +22,7 @@ #include #include #include -#ifndef LINUX_ISAPNP_H -#include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif +#include #include #define SNDRV_GET_ID #include @@ -93,152 +89,111 @@ MODULE_PARM_SYNTAX(dma2, SNDRV_DMA_DESC); struct snd_card_ad1816a { -#ifdef __ISAPNP__ - struct isapnp_dev *dev; - struct isapnp_dev *devmpu; -#endif /* __ISAPNP__ */ + struct pnp_dev *dev; + struct pnp_dev *devmpu; }; -static snd_card_t *snd_ad1816a_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -#ifdef __ISAPNP__ - -static struct isapnp_card *snd_ad1816a_isapnp_cards[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; -static const struct isapnp_card_id *snd_ad1816a_isapnp_id[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; - -#define ISAPNP_AD1816A(_va, _vb, _vc, _device, _fa, _fb, _fc, _audio, _mpu401) \ - { \ - ISAPNP_CARD_ID(_va, _vb, _vc, _device), \ - .devs = { ISAPNP_DEVICE_ID(_fa, _fb, _fc, _audio), \ - ISAPNP_DEVICE_ID(_fa, _fb, _fc, _mpu401), } \ - } - -static struct isapnp_card_id snd_ad1816a_pnpids[] __devinitdata = { - /* Highscreen Sound-Boostar 16 3D */ - ISAPNP_AD1816A('M','D','K',0x1605,'A','D','S',0x7180,0x7181), - /* Highscreen Sound-Boostar 16 3D - added by Stefan Behnel */ - ISAPNP_AD1816A('L','W','C',0x1061,'A','D','S',0x7180,0x7181), +static struct pnp_card_device_id snd_ad1816a_pnpids[] __devinitdata = { /* Analog Devices AD1815 */ - ISAPNP_AD1816A('A','D','S',0x7150,'A','D','S',0x7150,0x7151), + { .id = "ADS7150", .devs = { { .id = "ADS7150" }, { .id = "ADS7151" } } }, /* Analog Devices AD1816A - added by Kenneth Platz */ - ISAPNP_AD1816A('A','D','S',0x7181,'A','D','S',0x7180,0x7181), - /* Analog Devices AD1816A - Terratec Base 64 */ - ISAPNP_AD1816A('T','E','R',0x1411,'A','D','S',0x7180,0x7181), - /* Analog Devices AD1816A - Terratec AudioSystem EWS64S */ - ISAPNP_AD1816A('T','E','R',0x1112,'A','D','S',0x7180,0x7181), + { .id = "ADS7181", .devs = { { .id = "ADS7180" }, { .id = "ADS7181" } } }, /* Analog Devices AD1816A - Aztech/Newcom SC-16 3D */ - ISAPNP_AD1816A('A','Z','T',0x1022,'A','Z','T',0x1018,0x2002), + { .id = "AZT1022", .devs = { { .id = "AZT1018" }, { .id = "AZT2002" } } }, + /* Highscreen Sound-Boostar 16 3D - added by Stefan Behnel */ + { .id = "LWC1061", .devs = { { .id = "ADS7180" }, { .id = "ADS7181" } } }, + /* Highscreen Sound-Boostar 16 3D */ + { .id = "MDK1605", .devs = { { .id = "ADS7180" }, { .id = "ADS7181" } } }, /* Shark Predator ISA - added by Ken Arromdee */ - ISAPNP_AD1816A('S','M','M',0x7180,'A','D','S',0x7180,0x7181), - { ISAPNP_CARD_END, } + { .id = "SMM7180", .devs = { { .id = "ADS7180" }, { .id = "ADS7181" } } }, + /* Analog Devices AD1816A - Terratec AudioSystem EWS64S */ + { .id = "TER1112", .devs = { { .id = "ADS7180" }, { .id = "ADS7181" } } }, + /* Analog Devices AD1816A - Terratec Base 64 */ + { .id = "TER1411", .devs = { { .id = "ADS7180" }, { .id = "ADS7181" } } }, + /* end */ + { .id = "" } }; -ISAPNP_CARD_TABLE(snd_ad1816a_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_ad1816a_pnpids); -#endif /* __ISAPNP__ */ #define DRIVER_NAME "snd-card-ad1816a" -#ifdef __ISAPNP__ -static int __init snd_card_ad1816a_isapnp(int dev, - struct snd_card_ad1816a *acard) +static int __devinit snd_card_ad1816a_pnp(int dev, struct snd_card_ad1816a *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct isapnp_card_id *id = snd_ad1816a_isapnp_id[dev]; - struct isapnp_card *card = snd_ad1816a_isapnp_cards[dev]; - struct isapnp_dev *pdev; - - acard->dev = isapnp_find_dev(card, id->devs[0].vendor, id->devs[0].function, NULL); - if (acard->dev->active) { - acard->dev = NULL; + struct pnp_dev *pdev; + struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); + int err; + + acard->dev = pnp_request_card_device(card, id->devs[0].id, NULL); + if (acard->dev == NULL) { + kfree(cfg); return -EBUSY; } - acard->devmpu = isapnp_find_dev(card, id->devs[1].vendor, id->devs[1].function, NULL); - if (acard->devmpu->active) { - acard->dev = acard->devmpu = NULL; + acard->devmpu = pnp_request_card_device(card, id->devs[1].id, NULL); + if (acard->devmpu == NULL) { + kfree(cfg); return -EBUSY; } pdev = acard->dev; - if (pdev->prepare(pdev) < 0) - return -EAGAIN; + pnp_init_resource_table(cfg); if (port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[2], port[dev], 16); + pnp_resource_change(&cfg->port_resource[2], port[dev], 16); if (fm_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[1], fm_port[dev], 4); + pnp_resource_change(&cfg->port_resource[1], fm_port[dev], 4); if (dma1[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], dma1[dev], - 1); + pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); if (dma2[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], dma2[dev], - 1); + pnp_resource_change(&cfg->dma_resource[1], dma2[dev], 1); if (irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], irq[dev], 1); + pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); - if (pdev->activate(pdev) < 0) { - printk(KERN_ERR PFX "AUDIO isapnp configure failure\n"); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + printk(KERN_ERR PFX "AUDIO PnP configure failure\n"); + kfree(cfg); return -EBUSY; } - port[dev] = pdev->resource[2].start; - fm_port[dev] = pdev->resource[1].start; - dma1[dev] = pdev->dma_resource[0].start; - dma2[dev] = pdev->dma_resource[1].start; - irq[dev] = pdev->irq_resource[0].start; + port[dev] = pnp_port_start(pdev, 2); + fm_port[dev] = pnp_port_start(pdev, 1); + dma1[dev] = pnp_dma(pdev, 0); + dma2[dev] = pnp_dma(pdev, 1); + irq[dev] = pnp_irq(pdev, 0); pdev = acard->devmpu; - if (pdev == NULL || pdev->prepare(pdev) < 0) { - mpu_port[dev] = -1; - acard->devmpu = NULL; - return 0; - } + pnp_init_resource_table(cfg); if (mpu_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], mpu_port[dev], - 2); + pnp_resource_change(&cfg->port_resource[0], mpu_port[dev], 2); if (mpu_irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], mpu_irq[dev], - 1); + pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); - if (pdev->activate(pdev) < 0) { - /* not fatal error */ - printk(KERN_ERR PFX "MPU-401 isapnp configure failure\n"); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + printk(KERN_ERR PFX "MPU401 PnP configure failure\n"); mpu_port[dev] = -1; acard->devmpu = NULL; } else { - mpu_port[dev] = pdev->resource[0].start; - mpu_irq[dev] = pdev->irq_resource[0].start; + mpu_port[dev] = pnp_port_start(pdev, 0); + mpu_irq[dev] = pnp_irq(pdev, 0); } + kfree(cfg); return 0; } -static void snd_card_ad1816a_deactivate(struct snd_card_ad1816a *acard) -{ - if (acard->dev) { - acard->dev->deactivate(acard->dev); - acard->dev = NULL; - } - if (acard->devmpu) { - acard->devmpu->deactivate(acard->devmpu); - acard->devmpu = NULL; - } -} -#endif /* __ISAPNP__ */ - -static void snd_card_ad1816a_free(snd_card_t *card) -{ - struct snd_card_ad1816a *acard = (struct snd_card_ad1816a *)card->private_data; - - if (acard) { -#ifdef __ISAPNP__ - snd_card_ad1816a_deactivate(acard); -#endif /* __ISAPNP__ */ - } -} - -static int __init snd_card_ad1816a_probe(int dev) +static int __devinit snd_card_ad1816a_probe(int dev, struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { int error; snd_card_t *card; @@ -250,17 +205,11 @@ sizeof(struct snd_card_ad1816a))) == NULL) return -ENOMEM; acard = (struct snd_card_ad1816a *)card->private_data; - card->private_free = snd_card_ad1816a_free; -#ifdef __ISAPNP__ - if ((error = snd_card_ad1816a_isapnp(dev, acard))) { + if ((error = snd_card_ad1816a_pnp(dev, acard, pcard, pid))) { snd_card_free(card); return error; } -#else - printk(KERN_ERR PFX "you have to enable ISA PnP support.\n"); - return -ENOSYS; -#endif /* __ISAPNP__ */ if ((error = snd_ad1816a_create(card, port[dev], irq[dev], @@ -314,13 +263,12 @@ snd_card_free(card); return error; } - snd_ad1816a_cards[dev] = card; + pnp_set_card_drvdata(pcard, card); return 0; } -#ifdef __ISAPNP__ -static int __init snd_ad1816a_isapnp_detect(struct isapnp_card *card, - const struct isapnp_card_id *id) +static int __devinit snd_ad1816a_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -328,9 +276,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev]) continue; - snd_ad1816a_isapnp_cards[dev] = card; - snd_ad1816a_isapnp_id[dev] = id; - res = snd_card_ad1816a_probe(dev); + res = snd_card_ad1816a_probe(dev, card, id); if (res < 0) return res; dev++; @@ -338,17 +284,28 @@ } return -ENODEV; } -#endif + +static void __devexit snd_ad1816a_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); +} + +static struct pnp_card_driver ad1816a_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "ad1816a", + .id_table = snd_ad1816a_pnpids, + .probe = snd_ad1816a_pnp_detect, + .remove = __devexit_p(snd_ad1816a_pnp_remove), +}; static int __init alsa_card_ad1816a_init(void) { int cards = 0; -#ifdef __ISAPNP__ - cards += isapnp_probe_cards(snd_ad1816a_pnpids, snd_ad1816a_isapnp_detect); -#else - printk(KERN_ERR PFX "you have to enable ISA PnP support.\n"); -#endif + cards += pnp_register_card_driver(&ad1816a_pnpc_driver); #ifdef MODULE if (!cards) printk(KERN_ERR "no AD1816A based soundcards found.\n"); @@ -358,10 +315,7 @@ static void __exit alsa_card_ad1816a_exit(void) { - int dev; - - for (dev = 0; dev < SNDRV_CARDS; dev++) - snd_card_free(snd_ad1816a_cards[dev]); + pnp_unregister_card_driver(&ad1816a_pnpc_driver); } module_init(alsa_card_ad1816a_init) diff -Nru a/sound/isa/als100.c b/sound/isa/als100.c --- a/sound/isa/als100.c Sat Apr 12 14:44:06 2003 +++ b/sound/isa/als100.c Sat Apr 12 14:44:06 2003 @@ -100,15 +100,15 @@ static struct pnp_card_device_id snd_als100_pnpids[] __devinitdata = { /* ALS100 - PRO16PNP */ - { .id = "ALS0001", .devs = { { "@@@0001" }, { "@X@0001" }, { "@H@0001" }, } }, + { .id = "ALS0001", .devs = { { "@@@0001" }, { "@X@0001" }, { "@H@0001" } } }, /* ALS110 - MF1000 - Digimate 3D Sound */ - { .id = "ALS0110", .devs = { { "@@@1001" }, { "@X@1001" }, { "@H@1001" }, } }, + { .id = "ALS0110", .devs = { { "@@@1001" }, { "@X@1001" }, { "@H@1001" } } }, /* ALS120 */ - { .id = "ALS0120", .devs = { { "@@@2001" }, { "@X@2001" }, { "@H@2001" }, } }, + { .id = "ALS0120", .devs = { { "@@@2001" }, { "@X@2001" }, { "@H@2001" } } }, /* ALS200 */ - { .id = "ALS0200", .devs = { { "@@@0020" }, { "@X@0020" }, { "@H@0001" }, } }, + { .id = "ALS0200", .devs = { { "@@@0020" }, { "@X@0020" }, { "@H@0001" } } }, /* RTL3000 */ - { .id = "RTL3000", .devs = { { "@@@2001" }, { "@X@2001" }, { "@H@2001" }, } }, + { .id = "RTL3000", .devs = { { "@@@2001" }, { "@X@2001" }, { "@H@2001" } } }, { .id = "", } /* end */ }; @@ -116,13 +116,14 @@ #define DRIVER_NAME "snd-card-als100" -static int __devinit snd_card_als100_isapnp(int dev, struct snd_card_als100 *acard, - struct pnp_card_link *card, - const struct pnp_card_device_id *id) +static int __devinit snd_card_als100_pnp(int dev, struct snd_card_als100 *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { struct pnp_dev *pdev; struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); int err; + if (!cfg) return -ENOMEM; acard->dev = pnp_request_card_device(card, id->devs[0].id, NULL); @@ -146,11 +147,11 @@ pnp_resource_change(&cfg->dma_resource[1], dma16[dev], 1); if (irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); - if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) { - printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); + snd_printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); kfree(cfg); return err; } @@ -167,7 +168,7 @@ if (mpu_irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "MPU401 the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "MPU401 the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) goto __mpu_error; @@ -177,7 +178,7 @@ __mpu_error: if (pdev) { pnp_release_card_device(pdev); - printk(KERN_ERR PFX "MPU401 pnp configure failure, skipping\n"); + snd_printk(KERN_ERR PFX "MPU401 pnp configure failure, skipping\n"); } acard->devmpu = NULL; mpu_port[dev] = -1; @@ -189,7 +190,7 @@ if (fm_port[dev] != SNDRV_AUTO_PORT) pnp_resource_change(&cfg->port_resource[0], fm_port[dev], 4); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "OPL3 the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "OPL3 the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) goto __fm_error; @@ -198,7 +199,7 @@ __fm_error: if (pdev) { pnp_release_card_device(pdev); - printk(KERN_ERR PFX "OPL3 pnp configure failure, skipping\n"); + snd_printk(KERN_ERR PFX "OPL3 pnp configure failure, skipping\n"); } acard->devopl = NULL; fm_port[dev] = -1; @@ -223,7 +224,7 @@ return -ENOMEM; acard = (struct snd_card_als100 *)card->private_data; - if ((error = snd_card_als100_isapnp(dev, acard, pcard, pid))) { + if ((error = snd_card_als100_pnp(dev, acard, pcard, pid))) { snd_card_free(card); return error; } @@ -253,15 +254,15 @@ mpu_port[dev], 0, mpu_irq[dev], SA_INTERRUPT, NULL) < 0) - printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]); + snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]); } if (fm_port[dev] > 0) { if (snd_opl3_create(card, fm_port[dev], fm_port[dev] + 2, OPL3_HW_AUTO, 0, &opl3) < 0) { - printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n", - fm_port[dev], fm_port[dev] + 2); + snd_printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n", + fm_port[dev], fm_port[dev] + 2); } else { if ((error = snd_opl3_timer_new(opl3, 0, 1)) < 0) { snd_card_free(card); @@ -328,7 +329,7 @@ cards += pnp_register_card_driver(&als100_pnpc_driver); #ifdef MODULE if (!cards) - printk(KERN_ERR "no ALS100 based soundcards found\n"); + snd_printk(KERN_ERR "no ALS100 based soundcards found\n"); #endif return cards ? 0 : -ENODEV; } diff -Nru a/sound/isa/azt2320.c b/sound/isa/azt2320.c --- a/sound/isa/azt2320.c Sat Apr 12 14:44:10 2003 +++ b/sound/isa/azt2320.c Sat Apr 12 14:44:10 2003 @@ -132,9 +132,9 @@ #define DRIVER_NAME "snd-card-azt2320" -static int __init snd_card_azt2320_isapnp(int dev, struct snd_card_azt2320 *acard, - struct pnp_card_link *card, - const struct pnp_card_device_id *id) +static int __devinit snd_card_azt2320_pnp(int dev, struct snd_card_azt2320 *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { struct pnp_dev *pdev; struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); @@ -168,11 +168,11 @@ if (irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) { - printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); + snd_printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); kfree(cfg); return err; } @@ -191,7 +191,7 @@ if (mpu_irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "MPU401 the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "MPU401 the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) goto __mpu_error; @@ -201,7 +201,7 @@ __mpu_error: if (pdev) { pnp_release_card_device(pdev); - printk(KERN_ERR PFX "MPU401 pnp configure failure, skipping\n"); + snd_printk(KERN_ERR PFX "MPU401 pnp configure failure, skipping\n"); } acard->devmpu = NULL; mpu_port[dev] = -1; @@ -212,13 +212,13 @@ } /* same of snd_sbdsp_command by Jaroslav Kysela */ -static int __init snd_card_azt2320_command(unsigned long port, unsigned char val) +static int __devinit snd_card_azt2320_command(unsigned long port, unsigned char val) { int i; unsigned long limit; limit = jiffies + HZ / 10; - for (i = 50000; i && (limit - jiffies) > 0; i--) + for (i = 50000; i && time_after(limit, jiffies); i--) if (!(inb(port + 0x0c) & 0x80)) { outb(val, port + 0x0c); return 0; @@ -226,7 +226,7 @@ return -EBUSY; } -static int __init snd_card_azt2320_enable_wss(unsigned long port) +static int __devinit snd_card_azt2320_enable_wss(unsigned long port) { int error; @@ -239,9 +239,9 @@ return 0; } -static int __init snd_card_azt2320_probe(int dev, - struct pnp_card_link *pcard, - const struct pnp_card_device_id *pid) +static int __devinit snd_card_azt2320_probe(int dev, + struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { int error; snd_card_t *card; @@ -254,7 +254,7 @@ return -ENOMEM; acard = (struct snd_card_azt2320 *)card->private_data; - if ((error = snd_card_azt2320_isapnp(dev, acard, pcard, pid))) { + if ((error = snd_card_azt2320_pnp(dev, acard, pcard, pid))) { snd_card_free(card); return error; } @@ -291,16 +291,15 @@ mpu_port[dev], 0, mpu_irq[dev], SA_INTERRUPT, NULL) < 0) - printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", - mpu_port[dev]); + snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", mpu_port[dev]); } if (fm_port[dev] > 0) { if (snd_opl3_create(card, fm_port[dev], fm_port[dev] + 2, OPL3_HW_AUTO, 0, &opl3) < 0) { - printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n", - fm_port[dev], fm_port[dev] + 2); + snd_printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n", + fm_port[dev], fm_port[dev] + 2); } else { if ((error = snd_opl3_timer_new(opl3, 1, 2)) < 0) { snd_card_free(card); @@ -326,8 +325,8 @@ return 0; } -static int __init snd_azt2320_pnp_detect(struct pnp_card_link *card, - const struct pnp_card_device_id *id) +static int __devinit snd_azt2320_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -335,7 +334,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev]) continue; - res = snd_card_azt2320_probe(dev,card,id); + res = snd_card_azt2320_probe(dev, card, id); if (res < 0) return res; dev++; @@ -364,15 +363,10 @@ { int cards = 0; -#ifdef __ISAPNP__ - cards += isapnp_probe_cards(snd_azt2320_pnpids, snd_azt2320_isapnp_detect); -#else - printk(KERN_ERR PFX "you have to enable ISA PnP support.\n"); -#endif cards += pnp_register_card_driver(&azt2320_pnpc_driver); #ifdef MODULE if (!cards) - printk(KERN_ERR "no AZT2320 based soundcards found\n"); + snd_printk(KERN_ERR "no AZT2320 based soundcards found\n"); #endif return cards ? 0 : -ENODEV; } diff -Nru a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c --- a/sound/isa/cmi8330.c Sat Apr 12 14:44:06 2003 +++ b/sound/isa/cmi8330.c Sat Apr 12 14:44:06 2003 @@ -46,11 +46,7 @@ #include #include #include -#ifndef LINUX_ISAPNP_H -#include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif +#include #include #include #include @@ -73,7 +69,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_ISAPNP; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP static int isapnp[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; #endif static long sbport[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; @@ -93,9 +89,9 @@ MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(enable, "Enable CMI8330 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); -MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); +MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif @@ -156,9 +152,9 @@ typedef int (*snd_pcm_open_callback_t)(snd_pcm_substream_t *); struct snd_cmi8330 { -#ifdef __ISAPNP__ - struct isapnp_dev *cap; - struct isapnp_dev *play; +#ifdef CONFIG_PNP + struct pnp_dev *cap; + struct pnp_dev *play; #endif snd_card_t *card; ad1848_t *wss; @@ -172,27 +168,16 @@ } streams[2]; }; -static snd_card_t *snd_cmi8330_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -#ifdef __ISAPNP__ +static snd_card_t *snd_cmi8330_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static struct isapnp_card *snd_cmi8330_isapnp_cards[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; -static const struct isapnp_card_id *snd_cmi8330_isapnp_id[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; +#ifdef CONFIG_PNP -#define ISAPNP_CMI8330(_va, _vb, _vc, _device, _audio1, _audio2) \ - { \ - ISAPNP_CARD_ID(_va, _vb, _vc, _device), \ - .devs = { ISAPNP_DEVICE_ID('@', '@', '@', _audio1), \ - ISAPNP_DEVICE_ID('@', 'X', '@', _audio2), } \ - } - -static struct isapnp_card_id snd_cmi8330_pnpids[] __devinitdata = -{ - ISAPNP_CMI8330('C','M','I',0x0001,0x0001,0x0001), - { ISAPNP_CARD_END, } +static struct pnp_card_device_id snd_cmi8330_pnpids[] __devinitdata = { + { .id = "CMI0001", .devs = { { "@@@0001" }, { "@X@0001" } } }, + { .id = "" } }; -ISAPNP_CARD_TABLE(snd_cmi8330_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_cmi8330_pnpids); #endif @@ -258,7 +243,7 @@ }; -static int __init cmi8330_add_sb_mixers(sb_t *chip) +static int __devinit cmi8330_add_sb_mixers(sb_t *chip) { int idx, err; unsigned long flags; @@ -283,7 +268,7 @@ } #endif -static int __init snd_cmi8330_mixer(snd_card_t *card, struct snd_cmi8330 *acard) +static int __devinit snd_cmi8330_mixer(snd_card_t *card, struct snd_cmi8330 *acard) { unsigned int idx; int err; @@ -302,82 +287,78 @@ return 0; } -#ifdef __ISAPNP__ -static int __init snd_cmi8330_isapnp(int dev, struct snd_cmi8330 *acard) +#ifdef CONFIG_PNP +static int __devinit snd_cmi8330_pnp(int dev, struct snd_cmi8330 *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct isapnp_card_id *id = snd_cmi8330_isapnp_id[dev]; - struct isapnp_card *card = snd_cmi8330_isapnp_cards[dev]; - struct isapnp_dev *pdev; - - acard->cap = isapnp_find_dev(card, id->devs[0].vendor, id->devs[0].function, NULL); - if (acard->cap->active) { - acard->cap = NULL; + struct pnp_dev *pdev; + struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table)); + int err; + + acard->cap = pnp_request_card_device(card, id->devs[0].id, NULL); + if (acard->cap == NULL) { + kfree(cfg); return -EBUSY; } - acard->play = isapnp_find_dev(card, id->devs[1].vendor, id->devs[1].function, NULL); - if (acard->play->active) { - acard->cap = acard->play = NULL; + acard->play = pnp_request_card_device(card, id->devs[1].id, NULL); + if (acard->play == NULL) { + kfree(cfg); return -EBUSY; } pdev = acard->cap; - if (pdev->prepare(pdev)<0) - return -EAGAIN; + pnp_init_resource_table(cfg); /* allocate AD1848 resources */ if (wssport[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], wssport[dev], 8); + pnp_resource_change(&cfg->port_resource[0], wssport[dev], 8); if (wssdma[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], wssdma[dev], 1); + pnp_resource_change(&cfg->dma_resource[0], wssdma[dev], 1); if (wssirq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], wssirq[dev], 1); + pnp_resource_change(&cfg->irq_resource[0], wssirq[dev], 1); - if (pdev->activate(pdev)<0) { - snd_printk("(AD1848) PnP configure failure\n"); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR "CMI8330/C3D (AD1848) PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "CMI8330/C3D (AD1848) PnP configure failure\n"); + kfree(cfg); return -EBUSY; } - wssport[dev] = pdev->resource[0].start; - wssdma[dev] = pdev->dma_resource[0].start; - wssirq[dev] = pdev->irq_resource[0].start; + wssport[dev] = pnp_port_start(pdev, 0); + wssdma[dev] = pnp_dma(pdev, 0); + wssirq[dev] = pnp_irq(pdev, 0); /* allocate SB16 resources */ pdev = acard->play; - if (pdev->prepare(pdev)<0) { - acard->cap->deactivate(acard->cap); - return -EAGAIN; - } + pnp_init_resource_table(cfg); if (sbport[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], sbport[dev], 16); + pnp_resource_change(&cfg->port_resource[0], sbport[dev], 16); if (sbdma8[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], sbdma8[dev], 1); + pnp_resource_change(&cfg->dma_resource[0], sbdma8[dev], 1); if (sbdma16[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], sbdma16[dev], 1); + pnp_resource_change(&cfg->dma_resource[1], sbdma16[dev], 1); if (sbirq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], sbirq[dev], 1); + pnp_resource_change(&cfg->irq_resource[0], sbirq[dev], 1); - if (pdev->activate(pdev)<0) { - snd_printk("CMI8330/C3D (SB16) PnP configure failure\n"); - acard->cap->deactivate(acard->cap); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR "CMI8330/C3D (SB16) PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "CMI8330/C3D (SB16) PnP configure failure\n"); + kfree(cfg); return -EBUSY; } - sbport[dev] = pdev->resource[0].start; - sbdma8[dev] = pdev->dma_resource[0].start; - sbdma16[dev] = pdev->dma_resource[1].start; - sbirq[dev] = pdev->irq_resource[0].start; + sbport[dev] = pnp_port_start(pdev, 0); + sbdma8[dev] = pnp_dma(pdev, 0); + sbdma16[dev] = pnp_dma(pdev, 1); + sbirq[dev] = pnp_irq(pdev, 0); + kfree(cfg); return 0; } - -static void snd_cmi8330_deactivate(struct snd_cmi8330 *acard) -{ - if (acard->cap) { - acard->cap->deactivate(acard->cap); - acard->cap = NULL; - } - if (acard->play) { - acard->play->deactivate(acard->play); - acard->play = NULL; - } -} #endif /* @@ -424,7 +405,7 @@ snd_pcm_lib_preallocate_free_for_all(pcm); } -static int __init snd_cmi8330_pcm(snd_card_t *card, struct snd_cmi8330 *chip) +static int __devinit snd_cmi8330_pcm(snd_card_t *card, struct snd_cmi8330 *chip) { snd_pcm_t *pcm; const snd_pcm_ops_t *ops; @@ -467,25 +448,16 @@ /* */ -static void snd_cmi8330_free(snd_card_t *card) -{ - struct snd_cmi8330 *acard = (struct snd_cmi8330 *)card->private_data; - - if (acard) { -#ifdef __ISAPNP__ - snd_cmi8330_deactivate(acard); -#endif - } -} - -static int __init snd_cmi8330_probe(int dev) +static int __devinit snd_cmi8330_probe(int dev, + struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { snd_card_t *card; struct snd_cmi8330 *acard; unsigned long flags; int i, err; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (!isapnp[dev]) { #endif if (wssport[dev] == SNDRV_AUTO_PORT) { @@ -496,7 +468,7 @@ snd_printk("specify sbport\n"); return -EINVAL; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP } #endif card = snd_card_new(index[dev], id[dev], THIS_MODULE, @@ -507,10 +479,9 @@ } acard = (struct snd_cmi8330 *)card->private_data; acard->card = card; - card->private_free = snd_cmi8330_free; -#ifdef __ISAPNP__ - if (isapnp[dev] && (err = snd_cmi8330_isapnp(dev, acard)) < 0) { +#ifdef CONFIG_PNP + if (isapnp[dev] && (err = snd_cmi8330_pnp(dev, acard, pcard, pid)) < 0) { snd_printk("PnP detection failed\n"); snd_card_free(card); return err; @@ -580,21 +551,16 @@ return err; } - snd_cmi8330_cards[dev] = card; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_cmi8330_legacy[dev] = card; return 0; } -static void __exit alsa_card_cmi8330_exit(void) -{ - int i; - - for (i = 0; i < SNDRV_CARDS; i++) - snd_card_free(snd_cmi8330_cards[i]); -} - -#ifdef __ISAPNP__ -static int __init snd_cmi8330_isapnp_detect(struct isapnp_card *card, - const struct isapnp_card_id *id) +#ifdef CONFIG_PNP +static int __devinit snd_cmi8330_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -602,9 +568,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || !isapnp[dev]) continue; - snd_cmi8330_isapnp_cards[dev] = card; - snd_cmi8330_isapnp_id[dev] = id; - res = snd_cmi8330_probe(dev); + res = snd_cmi8330_probe(dev, card, id); if (res < 0) return res; dev++; @@ -612,7 +576,23 @@ } return -ENODEV; } -#endif /* __ISAPNP__ */ + +static void __devexit snd_cmi8330_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); +} + +static struct pnp_card_driver cmi8330_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "cmi8330", + .id_table = snd_cmi8330_pnpids, + .probe = snd_cmi8330_pnp_detect, + .remove = __devexit_p(snd_cmi8330_pnp_remove), +}; +#endif /* CONFIG_PNP */ static int __init alsa_card_cmi8330_init(void) { @@ -621,26 +601,38 @@ for (dev = 0; dev < SNDRV_CARDS; dev++) { if (!enable[dev]) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif - if (snd_cmi8330_probe(dev) >= 0) + if (snd_cmi8330_probe(dev, NULL, NULL) >= 0) cards++; } -#ifdef __ISAPNP__ - cards += isapnp_probe_cards(snd_cmi8330_pnpids, snd_cmi8330_isapnp_detect); +#ifdef CONFIG_PNP + cards += pnp_register_card_driver(&cmi8330_pnpc_driver); #endif if (!cards) { #ifdef MODULE - printk(KERN_ERR "CMI8330 not found or device busy\n"); + snd_printk(KERN_ERR "CMI8330 not found or device busy\n"); #endif return -ENODEV; } return 0; } +static void __exit alsa_card_cmi8330_exit(void) +{ + int i; + +#ifdef CONFIG_PNP + /* PnP cards first */ + pnp_unregister_card_driver(&cmi8330_pnpc_driver); +#endif + for (i = 0; i < SNDRV_CARDS; i++) + snd_card_free(snd_cmi8330_legacy[i]); +} + module_init(alsa_card_cmi8330_init) module_exit(alsa_card_cmi8330_exit) @@ -670,7 +662,7 @@ get_option(&str,(int *)&wssport[nr_dev]) == 2 && get_option(&str,&wssirq[nr_dev]) == 2 && get_option(&str,&wssdma[nr_dev]) == 2); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (pnp != INT_MAX) isapnp[nr_dev] = pnp; #endif diff -Nru a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c --- a/sound/isa/cs423x/cs4236.c Sat Apr 12 14:44:06 2003 +++ b/sound/isa/cs423x/cs4236.c Sat Apr 12 14:44:06 2003 @@ -22,11 +22,7 @@ #include #include #include -#ifndef LINUX_ISAPNP_H -#include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif +#include #include #include #include @@ -87,7 +83,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_ISAPNP; /* Enable this card */ -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP static int isapnp[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; #endif static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* PnP setup */ @@ -109,7 +105,7 @@ MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(enable, "Enable " IDENT " soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); @@ -144,19 +140,16 @@ struct snd_card_cs4236 { struct resource *res_sb_port; -#ifdef __ISAPNP__ - struct isapnp_dev *wss; - struct isapnp_dev *ctrl; - struct isapnp_dev *mpu; +#ifdef CONFIG_PNP + struct pnp_dev *wss; + struct pnp_dev *ctrl; + struct pnp_dev *mpu; #endif }; -static snd_card_t *snd_cs4236_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -#ifdef __ISAPNP__ +static snd_card_t *snd_cs4236_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static struct isapnp_card *snd_cs4236_isapnp_cards[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; -static const struct isapnp_card_id *snd_cs4236_isapnp_id[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; +#ifdef CONFIG_PNP #define ISAPNP_CS4232(_va, _vb, _vc, _device, _wss, _ctrl, _mpu401) \ { \ @@ -181,156 +174,162 @@ #ifdef CS4232 -static struct isapnp_card_id snd_card_pnpids[] __devinitdata = { +static struct pnp_card_device_id snd_cs423x_pnpids[] __devinitdata = { /* Philips PCA70PS */ - ISAPNP_CS4232_1('C','S','C',0x0d32,0x0000,0x0010,0xb006), + { .id = "CSC0d32", .devs = { { "CSC0000" }, { "CSC0010" }, { "PNPb006" } } }, /* TerraTec Maestro 32/96 (CS4232) */ - ISAPNP_CS4232('C','S','C',0x1a32,0x0000,0x0010,0x0003), + { .id = "CSC1a32", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* HP Omnibook 5500 onboard */ - ISAPNP_CS4232('C','S','C',0x4232,0x0000,0x0002,0x0003), + { .id = "CSC4232", .devs = { { "CSC0000" }, { "CSC0002" }, { "CSC0003" } } }, /* Unnamed CS4236 card (Made in Taiwan) */ - ISAPNP_CS4232('C','S','C',0x4236,0x0000,0x0010,0x0003), + { .id = "CSC4236", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Turtle Beach TBS-2000 (CS4232) */ - ISAPNP_CS4232('C','S','C',0x7532,0x0000,0x0010,0xb006), + { .id = "CSC7532", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSCb006" } } }, /* Turtle Beach Tropez Plus (CS4232) */ - ISAPNP_CS4232_1('C','S','C',0x7632,0x0000,0x0010,0xb006), + { .id = "CSC7632", .devs = { { "CSC0000" }, { "CSC0010" }, { "PNPb006" } } }, /* SIC CrystalWave 32 (CS4232) */ - ISAPNP_CS4232('C','S','C',0xf032,0x0000,0x0010,0x0003), + { .id = "CSCf032", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* --- */ - { ISAPNP_CARD_END, } /* end */ + { .id = "" } /* end */ }; #else /* CS4236 */ -static struct isapnp_card_id snd_card_pnpids[] __devinitdata = { +static struct pnp_card_device_id snd_cs423x_pnpids[] __devinitdata = { /* Intel Marlin Spike Motherboard - CS4235 */ - ISAPNP_CS4232('C','S','C',0x0225,0x0000,0x0010,0x0003), + { .id = "CSC0225", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Intel Marlin Spike Motherboard (#2) - CS4235 */ - ISAPNP_CS4232('C','S','C',0x0225,0x0100,0x0110,0x0103), + { .id = "CSC0225", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC0103" } } }, /* Genius Sound Maker 3DJ - CS4237B */ - ISAPNP_CS4232('C','S','C',0x0437,0x0000,0x0010,0x0003), + { .id = "CSC0437", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Digital PC 5000 Onboard - CS4236B */ - ISAPNP_CS4232_WOMPU('C','S','C',0x0735,0x0000,0x0010), + { .id = "CSC0735", .devs = { { "CSC0000" }, { "CSC0010" } } }, /* some uknown CS4236B */ - ISAPNP_CS4232('C','S','C',0x0b35,0x0000,0x0010,0x0003), + { .id = "CSC0b35", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Intel PR440FX Onboard sound */ - ISAPNP_CS4232('C','S','C',0x0b36,0x0000,0x0010,0x0003), + { .id = "CSC0b36", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* CS4235 on mainboard without MPU */ - ISAPNP_CS4232_WOMPU('C','S','C',0x1425,0x0100,0x0110), + { .id = "CSC1425", .devs = { { "CSC0100" }, { "CSC0110" } } }, /* Gateway E1000 Onboard CS4236B */ - ISAPNP_CS4232('C','S','C',0x1335,0x0000,0x0010,0x0003), + { .id = "CSC1335", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* HP 6330 Onboard sound */ - ISAPNP_CS4232('C','S','C',0x1525,0x0100,0x0110,0x0103), + { .id = "CSC1525", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC0103" } } }, /* Crystal Computer TidalWave128 */ - ISAPNP_CS4232('C','S','C',0x1e37,0x0000,0x0010,0x0003), + { .id = "CSC1e37", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* ACER AW37 - CS4235 */ - ISAPNP_CS4232('C','S','C',0x4236,0x0000,0x0010,0x0003), + { .id = "CSC4236", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* build-in soundcard in EliteGroup P5TX-LA motherboard - CS4237B */ - ISAPNP_CS4232('C','S','C',0x4237,0x0000,0x0010,0x0003), + { .id = "CSC4237", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Crystal 3D - CS4237B */ - ISAPNP_CS4232('C','S','C',0x4336,0x0000,0x0010,0x0003), + { .id = "CSC4336", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Typhoon Soundsystem PnP - CS4236B */ - ISAPNP_CS4232('C','S','C',0x4536,0x0000,0x0010,0x0003), + { .id = "CSC4536", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Crystal CX4235-XQ3 EP - CS4235 */ - ISAPNP_CS4232('C','S','C',0x4625,0x0100,0x0110,0x0103), - /* TerraTec AudioSystem EWS64XL - CS4236B */ - ISAPNP_CS4232('C','S','C',0xa836,0xa800,0xa810,0xa803), - /* TerraTec AudioSystem EWS64XL - CS4236B */ - ISAPNP_CS4232_WOMPU('C','S','C',0xa836,0xa800,0xa810), + { .id = "CSC4625", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC0103" } } }, /* Crystal Semiconductors CS4237B */ - ISAPNP_CS4232('C','S','C',0x4637,0x0000,0x0010,0x0003), + { .id = "CSC4637", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* NewClear 3D - CX4237B-XQ3 */ - ISAPNP_CS4232('C','S','C',0x4837,0x0000,0x0010,0x0003), + { .id = "CSC4837", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Dell Optiplex GX1 - CS4236B */ - ISAPNP_CS4232('C','S','C',0x6835,0x0000,0x0010,0x0003), + { .id = "CSC6835", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Dell P410 motherboard - CS4236B */ - ISAPNP_CS4232_WOMPU('C','S','C',0x6835,0x0000,0x0010), + { .id = "CSC6835", .devs = { { "CSC0000" }, { "CSC0010" } } }, /* Dell Workstation 400 Onboard - CS4236B */ - ISAPNP_CS4232('C','S','C',0x6836,0x0000,0x0010,0x0003), + { .id = "CSC6836", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Turtle Beach Malibu - CS4237B */ - ISAPNP_CS4232('C','S','C',0x7537,0x0000,0x0010,0x0003), + { .id = "CSC7537", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* CS4235 - onboard */ - ISAPNP_CS4232('C','S','C',0x8025,0x0100,0x0110,0x0103), - /* IBM PC 300PL Onboard - CS4236B */ - ISAPNP_CS4232_WOMPU('C','S','C',0xe836,0x0000,0x0010), + { .id = "CSC8025", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC0103" } } }, /* IBM Aptiva 2137 E24 Onboard - CS4237B */ - ISAPNP_CS4232('C','S','C',0x8037,0x0000,0x0010,0x0003), + { .id = "CSC8037", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* IBM IntelliStation M Pro motherboard */ - ISAPNP_CS4232_WOMPU('C','S','C',0xc835,0x0000,0x0010), + { .id = "CSCc835", .devs = { { "CSC0000" }, { "CSC0010" } } }, /* Guillemot MaxiSound 16 PnP - CS4236B */ - ISAPNP_CS4232('C','S','C',0x9836,0x0000,0x0010,0x0003), + { .id = "CSC9836", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Gallant SC-70P */ - ISAPNP_CS4232('C','S','C',0x9837,0x0000,0x0010,0x0003), + { .id = "CSC9837", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, + /* TerraTec AudioSystem EWS64XL - CS4236B */ + { .id = "CSCa836", .devs = { { "CSCa800" }, { "CSCa810" }, { "CSCa803" } } }, + /* TerraTec AudioSystem EWS64XL - CS4236B */ + { .id = "CSCa836", .devs = { { "CSCa800" }, { "CSCa810" } } }, /* ACER AW37/Pro - CS4235 */ - ISAPNP_CS4232('C','S','C',0xd925,0x0000,0x0010,0x0003), + { .id = "CSCd925", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* ACER AW35/Pro - CS4237B */ - ISAPNP_CS4232('C','S','C',0xd937,0x0000,0x0010,0x0003), + { .id = "CSCd937", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* CS4235 without MPU401 */ - ISAPNP_CS4232_WOMPU('C','S','C',0xe825,0x0100,0x0110), + { .id = "CSCe825", .devs = { { "CSC0100" }, { "CSC0110" } } }, /* IBM IntelliStation M Pro 6898 11U - CS4236B */ - ISAPNP_CS4232_WOMPU('C','S','C',0xe835,0x0000,0x0010), + { .id = "CSCe835", .devs = { { "CSC0000" }, { "CSC0010" } } }, + /* IBM PC 300PL Onboard - CS4236B */ + { .id = "CSCe836", .devs = { { "CSC0000" }, { "CSC0010" } } }, /* Some noname CS4236 based card */ - ISAPNP_CS4232('C','S','C',0xe936,0x0000,0x0010,0x0003), + { .id = "CSCe936", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* CS4236B */ - ISAPNP_CS4232('C','S','C',0xf235,0x0000,0x0010,0x0003), + { .id = "CSCf235", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* CS4236B */ - ISAPNP_CS4232('C','S','C',0xf238,0x0000,0x0010,0x0003), + { .id = "CSCf238", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* --- */ - { ISAPNP_CARD_END, } /* end */ + { .id = "" } /* end */ }; #endif -ISAPNP_CARD_TABLE(snd_card_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_cs423x_pnpids); -static int __init snd_card_cs4236_isapnp(int dev, struct snd_card_cs4236 *acard) +static int __devinit snd_card_cs4236_pnp(int dev, struct snd_card_cs4236 *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct isapnp_card_id *id = snd_cs4236_isapnp_id[dev]; - struct isapnp_card *card = snd_cs4236_isapnp_cards[dev]; - struct isapnp_dev *pdev; - - acard->wss = isapnp_find_dev(card, id->devs[0].vendor, id->devs[0].function, NULL); - if (acard->wss->active) { - acard->wss = NULL; + struct pnp_dev *pdev; + struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); + int err; + + acard->wss = pnp_request_card_device(card, id->devs[0].id, NULL); + if (acard->wss == NULL) { + kfree(cfg); return -EBUSY; } - acard->ctrl = isapnp_find_dev(card, id->devs[1].vendor, id->devs[1].function, NULL); - if (acard->ctrl->active) { - acard->wss = acard->ctrl = NULL; + acard->ctrl = pnp_request_card_device(card, id->devs[1].id, NULL); + if (acard->ctrl == NULL) { + kfree(cfg); return -EBUSY; } - if (id->devs[2].vendor && id->devs[2].function) { - acard->mpu = isapnp_find_dev(card, id->devs[2].vendor, id->devs[2].function, NULL); - if (acard->mpu->active) { - acard->wss = acard->ctrl = acard->mpu = NULL; + if (id->devs[2].id[0]) { + acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL); + if (acard->mpu == NULL) { + kfree(cfg); return -EBUSY; } } /* WSS initialization */ pdev = acard->wss; - if (pdev->prepare(pdev) < 0) - return -EAGAIN; + pnp_init_resource_table(cfg); if (port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], port[dev], 4); + pnp_resource_change(&cfg->port_resource[0], port[dev], 4); if (fm_port[dev] != SNDRV_AUTO_PORT && fm_port[dev] >= 0) - isapnp_resource_change(&pdev->resource[1], fm_port[dev], 4); + pnp_resource_change(&cfg->port_resource[1], fm_port[dev], 4); if (sb_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[2], sb_port[dev], 16); + pnp_resource_change(&cfg->port_resource[2], sb_port[dev], 16); if (irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], irq[dev], 1); + pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); if (dma1[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], dma1[dev], 1); + pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); if (dma2[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], dma2[dev] < 0 ? 4 : dma2[dev], 1); - if (pdev->activate(pdev)<0) { - printk(KERN_ERR IDENT " isapnp configure failed for WSS (out of resources?)\n"); + pnp_resource_change(&cfg->dma_resource[1], dma2[dev] < 0 ? 4 : dma2[dev], 1); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR IDENT " WSS PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + kfree(cfg); + printk(KERN_ERR IDENT " WSS PnP configure failed for WSS (out of resources?)\n"); return -EBUSY; } - port[dev] = pdev->resource[0].start; + port[dev] = pnp_port_start(pdev, 0); if (fm_port[dev] >= 0) - fm_port[dev] = pdev->resource[1].start; - sb_port[dev] = pdev->resource[2].start; - irq[dev] = pdev->irq_resource[0].start; - dma1[dev] = pdev->dma_resource[0].start; - dma2[dev] = pdev->dma_resource[1].start == 4 ? -1 : (int)pdev->dma_resource[1].start; + fm_port[dev] = pnp_port_start(pdev, 1); + sb_port[dev] = pnp_port_start(pdev, 2); + irq[dev] = pnp_irq(pdev, 0); + dma1[dev] = pnp_dma(pdev, 0); + dma2[dev] = pnp_dma(pdev, 1) == 4 ? -1 : (int)pnp_dma(pdev, 1); snd_printdd("isapnp WSS: wss port=0x%lx, fm port=0x%lx, sb port=0x%lx\n", port[dev], fm_port[dev], sb_port[dev]); snd_printdd("isapnp WSS: irq=%i, dma1=%i, dma2=%i\n", @@ -338,65 +337,51 @@ /* CTRL initialization */ if (acard->ctrl && cport[dev] >= 0) { pdev = acard->ctrl; - if (pdev->prepare(pdev) < 0) { - acard->wss->deactivate(acard->wss); - return -EAGAIN; - } + pnp_init_resource_table(cfg); if (cport[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], cport[dev], 8); - if (pdev->activate(pdev)<0) { - printk(KERN_ERR IDENT " isapnp configure failed for control (out of resources?)\n"); - acard->wss->deactivate(acard->wss); + pnp_resource_change(&cfg->port_resource[0], cport[dev], 8); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR IDENT " CTRL PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + kfree(cfg); + printk(KERN_ERR IDENT " CTRL PnP configure failed for WSS (out of resources?)\n"); return -EBUSY; } - cport[dev] = pdev->resource[0].start; + cport[dev] = pnp_port_start(pdev, 0); snd_printdd("isapnp CTRL: control port=0x%lx\n", cport[dev]); } /* MPU initialization */ if (acard->mpu && mpu_port[dev] >= 0) { pdev = acard->mpu; - if (pdev->prepare(pdev) < 0) { - acard->wss->deactivate(acard->wss); - acard->ctrl->deactivate(acard->ctrl); - return -EAGAIN; - } + pnp_init_resource_table(cfg); if (mpu_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], mpu_port[dev], 2); + pnp_resource_change(&cfg->port_resource[0], mpu_port[dev], 2); if (mpu_irq[dev] != SNDRV_AUTO_IRQ && mpu_irq[dev] >= 0) - isapnp_resource_change(&pdev->irq_resource[0], mpu_irq[dev], 1); - if (pdev->activate(pdev)<0) { + pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR IDENT " MPU401 PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + kfree(cfg); + printk(KERN_ERR IDENT " MPU401 PnP configure failed for WSS (out of resources?)\n"); mpu_port[dev] = SNDRV_AUTO_PORT; mpu_irq[dev] = SNDRV_AUTO_IRQ; - printk(KERN_ERR IDENT " isapnp configure failed for MPU (out of resources?)\n"); } else { - mpu_port[dev] = pdev->resource[0].start; - if ((pdev->irq_resource[0].flags & IORESOURCE_IRQ) && - mpu_irq[dev] >= 0) { - mpu_irq[dev] = pdev->irq_resource[0].start; + mpu_port[dev] = pnp_port_start(pdev, 0); + if (pnp_irq_valid(pdev, 0) && pnp_irq(pdev, 0) >= 0) { + mpu_irq[dev] = pnp_irq(pdev, 0); } else { mpu_irq[dev] = -1; /* disable interrupt */ } } snd_printdd("isapnp MPU: port=0x%lx, irq=%i\n", mpu_port[dev], mpu_irq[dev]); } + kfree(cfg); return 0; } - -static void snd_card_cs4236_deactivate(struct snd_card_cs4236 *acard) -{ - if (acard->wss) { - acard->wss->deactivate(acard->wss); - acard->wss = NULL; - } - if (acard->ctrl) { - acard->ctrl->deactivate(acard->ctrl); - acard->ctrl = NULL; - } - if (acard->mpu) { - acard->mpu->deactivate(acard->mpu); - acard->mpu = NULL; - } -} #endif static void snd_card_cs4236_free(snd_card_t *card) @@ -404,9 +389,6 @@ struct snd_card_cs4236 *acard = (struct snd_card_cs4236 *)card->private_data; if (acard) { -#ifdef __ISAPNP__ - snd_card_cs4236_deactivate(acard); -#endif if (acard->res_sb_port) { release_resource(acard->res_sb_port); kfree_nocheck(acard->res_sb_port); @@ -414,7 +396,8 @@ } } -static int __init snd_card_cs4236_probe(int dev) +static int __devinit snd_card_cs423x_probe(int dev, struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { snd_card_t *card; struct snd_card_cs4236 *acard; @@ -423,7 +406,7 @@ opl3_t *opl3; int err; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (!isapnp[dev]) { #endif if (port[dev] == SNDRV_AUTO_PORT) { @@ -434,7 +417,7 @@ snd_printk("specify cport\n"); return -EINVAL; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP } #endif card = snd_card_new(index[dev], id[dev], THIS_MODULE, @@ -443,8 +426,8 @@ return -ENOMEM; acard = (struct snd_card_cs4236 *)card->private_data; card->private_free = snd_card_cs4236_free; -#ifdef __ISAPNP__ - if (isapnp[dev] && (err = snd_card_cs4236_isapnp(dev, acard))<0) { +#ifdef CONFIG_PNP + if (isapnp[dev] && (err = snd_card_cs4236_pnp(dev, acard, pcard, pid))<0) { printk(KERN_ERR "isapnp detection failed and probing for " IDENT " is not supported\n"); snd_card_free(card); return -ENXIO; @@ -546,13 +529,16 @@ snd_card_free(card); return err; } - snd_cs4236_cards[dev] = card; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_cs4236_legacy[dev] = card; return 0; } -#ifdef __ISAPNP__ -static int __init snd_cs4236_isapnp_detect(struct isapnp_card *card, - const struct isapnp_card_id *id) +#ifdef CONFIG_PNP +static int __devinit snd_cs423x_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -560,9 +546,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev]) continue; - snd_cs4236_isapnp_cards[dev] = card; - snd_cs4236_isapnp_id[dev] = id; - res = snd_card_cs4236_probe(dev); + res = snd_card_cs423x_probe(dev, card, id); if (res < 0) return res; dev++; @@ -570,7 +554,23 @@ } return -ENODEV; } -#endif /* __ISAPNP__ */ + +static void __devexit snd_cs423x_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); +} + +static struct pnp_card_driver cs423x_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "cs423x", + .id_table = snd_cs423x_pnpids, + .probe = snd_cs423x_pnp_detect, + .remove = __devexit_p(snd_cs423x_pnp_remove), +}; +#endif /* CONFIG_PNP */ static int __init alsa_card_cs423x_init(void) { @@ -579,15 +579,15 @@ for (dev = 0; dev < SNDRV_CARDS; dev++) { if (!enable[dev]) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif - if (snd_card_cs4236_probe(dev) >= 0) + if (snd_card_cs423x_probe(dev, NULL, NULL) >= 0) cards++; } -#ifdef __ISAPNP__ - cards += isapnp_probe_cards(snd_card_pnpids, snd_cs4236_isapnp_detect); +#ifdef CONFIG_PNP + cards += pnp_register_card_driver(&cs423x_pnpc_driver); #endif if (!cards) { #ifdef MODULE @@ -602,8 +602,12 @@ { int idx; +#ifdef CONFIG_PNP + /* PnP cards first */ + pnp_unregister_card_driver(&cs423x_pnpc_driver); +#endif for (idx = 0; idx < SNDRV_CARDS; idx++) - snd_card_free(snd_cs4236_cards[idx]); + snd_card_free(snd_cs4236_legacy[idx]); } module_init(alsa_card_cs423x_init) @@ -638,7 +642,7 @@ get_option(&str,&mpu_irq[nr_dev]) == 2 && get_option(&str,&dma1[nr_dev]) == 2 && get_option(&str,&dma2[nr_dev]) == 2); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (pnp != INT_MAX) isapnp[nr_dev] = pnp; #endif diff -Nru a/sound/isa/cs423x/pc98.c b/sound/isa/cs423x/pc98.c --- a/sound/isa/cs423x/pc98.c Sat Apr 12 14:44:07 2003 +++ b/sound/isa/cs423x/pc98.c Sat Apr 12 14:44:07 2003 @@ -3,6 +3,7 @@ * Copyright (c) by Jaroslav Kysela * Osamu Tomita * Takashi Iwai + * Hideaki Okubo * * * This program is free software; you can redistribute it and/or modify @@ -290,8 +291,13 @@ snd_printk(KERN_ERR IDENT ": Bad DMA %d\n", dma2[dev]); return -EINVAL; } - if (dma1[dev] != dma2[dev] && dma2[dev] >= 0) + + outb(dma1[dev], 0x29); /* dma1 boundary 64KB */ + if (dma1[dev] != dma2[dev] && dma2[dev] >= 0) { + outb(0, 0x5f); /* wait */ + outb(dma2[dev], 0x29); /* dma2 boundary 64KB */ intr_bits |= 0x04; + } if (PC9800_SOUND_ID() == PC9800_SOUND_ID_118) { /* Set up CanBe control registers. */ diff -Nru a/sound/isa/dt019x.c b/sound/isa/dt019x.c --- a/sound/isa/dt019x.c Sat Apr 12 14:44:07 2003 +++ b/sound/isa/dt019x.c Sat Apr 12 14:44:07 2003 @@ -102,9 +102,9 @@ #define DRIVER_NAME "snd-card-dt019x" -static int __init snd_card_dt019x_isapnp(int dev, struct snd_card_dt019x *acard, - struct pnp_card_link *card, - const struct pnp_card_device_id *pid) +static int __devinit snd_card_dt019x_pnp(int dev, struct snd_card_dt019x *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *pid) { struct pnp_dev *pdev; struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); @@ -133,10 +133,10 @@ pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "DT-019X AUDIO the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "DT-019X AUDIO the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) { - printk(KERN_ERR PFX "DT-019X AUDIO pnp configure failure\n"); + snd_printk(KERN_ERR PFX "DT-019X AUDIO pnp configure failure\n"); kfree(cfg); return err; } @@ -155,11 +155,11 @@ pnp_resource_change(&cfg->port_resource[0], mpu_port[dev], 2); if (mpu_irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], mpu_irq[dev], 1); - if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "DT-019X MPU401 the requested resources are invalid, using auto config\n"); - err = pnp_activate_dev(pdev); - if (err < 0) - goto __mpu_error; + if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) + snd_printk(KERN_ERR PFX "DT-019X MPU401 the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) + goto __mpu_error; mpu_port[dev] = pnp_port_start(pdev, 0); mpu_irq[dev] = pnp_irq(pdev, 0); snd_printdd("dt019x: found MPU-401: port=0x%lx, irq=0x%lx\n", @@ -168,7 +168,7 @@ __mpu_error: if (pdev) { pnp_release_card_device(pdev); - printk(KERN_ERR PFX "DT-019X MPU401 pnp configure failure, skipping\n"); + snd_printk(KERN_ERR PFX "DT-019X MPU401 pnp configure failure, skipping\n"); } acard->devmpu = NULL; mpu_port[dev] = -1; @@ -180,7 +180,7 @@ if (fm_port[dev] != SNDRV_AUTO_PORT) pnp_resource_change(&cfg->port_resource[0], fm_port[dev], 4); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "DT-019X OPL3 the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "DT-019X OPL3 the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) goto __fm_error; @@ -190,7 +190,7 @@ __fm_error: if (pdev) { pnp_release_card_device(pdev); - printk(KERN_ERR PFX "DT-019X OPL3 pnp configure failure, skipping\n"); + snd_printk(KERN_ERR PFX "DT-019X OPL3 pnp configure failure, skipping\n"); } acard->devopl = NULL; fm_port[dev] = -1; @@ -200,7 +200,7 @@ return 0; } -static int __init snd_card_dt019x_probe(int dev, struct pnp_card_link *pcard, const struct pnp_card_device_id *pid) +static int __devinit snd_card_dt019x_probe(int dev, struct pnp_card_link *pcard, const struct pnp_card_device_id *pid) { int error; sb_t *chip; @@ -213,7 +213,7 @@ return -ENOMEM; acard = (struct snd_card_dt019x *)card->private_data; - if ((error = snd_card_dt019x_isapnp(dev, acard, pcard, pid))) { + if ((error = snd_card_dt019x_pnp(dev, acard, pcard, pid))) { snd_card_free(card); return error; } @@ -246,8 +246,7 @@ mpu_irq[dev], SA_INTERRUPT, NULL) < 0) - printk(KERN_ERR PFX "no MPU-401 device at 0x%lx ?\n", - mpu_port[dev]); + snd_printk(KERN_ERR PFX "no MPU-401 device at 0x%lx ?\n", mpu_port[dev]); } if (fm_port[dev] > 0) { @@ -255,8 +254,8 @@ fm_port[dev], fm_port[dev] + 2, OPL3_HW_AUTO, 0, &opl3) < 0) { - printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx ?\n", - fm_port[dev], fm_port[dev] + 2); + snd_printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx ?\n", + fm_port[dev], fm_port[dev] + 2); } else { if ((error = snd_opl3_timer_new(opl3, 0, 1)) < 0) { snd_card_free(card); @@ -282,8 +281,8 @@ return 0; } -static int __init snd_dt019x_pnp_probe(struct pnp_card_link *card, - const struct pnp_card_device_id *pid) +static int __devinit snd_dt019x_pnp_probe(struct pnp_card_link *card, + const struct pnp_card_device_id *pid) { static int dev; int res; @@ -323,7 +322,7 @@ #ifdef MODULE if (!cards) - printk(KERN_ERR "no DT-019X / ALS-007 based soundcards found\n"); + snd_printk(KERN_ERR "no DT-019X / ALS-007 based soundcards found\n"); #endif return cards ? 0 : -ENODEV; } diff -Nru a/sound/isa/es18xx.c b/sound/isa/es18xx.c --- a/sound/isa/es18xx.c Sat Apr 12 14:44:07 2003 +++ b/sound/isa/es18xx.c Sat Apr 12 14:44:07 2003 @@ -70,11 +70,8 @@ #include #include #include -#ifndef LINUX_ISAPNP_H +#include #include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif #include #include #include @@ -1263,7 +1260,7 @@ }; #if 0 -static int __init snd_es18xx_config_read(es18xx_t *chip, unsigned char reg) +static int __devinit snd_es18xx_config_read(es18xx_t *chip, unsigned char reg) { int data; unsigned long flags; @@ -1275,8 +1272,8 @@ } #endif -static void __init snd_es18xx_config_write(es18xx_t *chip, - unsigned char reg, unsigned char data) +static void __devinit snd_es18xx_config_write(es18xx_t *chip, + unsigned char reg, unsigned char data) { /* No need for spinlocks, this function is used only in otherwise protected init code */ @@ -1287,7 +1284,7 @@ #endif } -static int __init snd_es18xx_initialize(es18xx_t *chip) +static int __devinit snd_es18xx_initialize(es18xx_t *chip) { int mask = 0; @@ -1436,7 +1433,7 @@ return 0; } -static int __init snd_es18xx_identify(es18xx_t *chip) +static int __devinit snd_es18xx_identify(es18xx_t *chip) { int hi,lo; @@ -1500,10 +1497,10 @@ return 0; } -static int __init snd_es18xx_probe(es18xx_t *chip) +static int __devinit snd_es18xx_probe(es18xx_t *chip) { if (snd_es18xx_identify(chip) < 0) { - printk(KERN_ERR PFX "[0x%lx] ESS chip not found\n", chip->port); + snd_printk(KERN_ERR PFX "[0x%lx] ESS chip not found\n", chip->port); return -ENODEV; } @@ -1569,7 +1566,7 @@ snd_pcm_lib_preallocate_free_for_all(pcm); } -int __init snd_es18xx_pcm(es18xx_t *chip, int device, snd_pcm_t ** rpcm) +int __devinit snd_es18xx_pcm(es18xx_t *chip, int device, snd_pcm_t ** rpcm) { snd_pcm_t *pcm; char str[16]; @@ -1714,12 +1711,12 @@ return snd_es18xx_free(chip); } -static int __init snd_es18xx_new_device(snd_card_t * card, - unsigned long port, - unsigned long mpu_port, - unsigned long fm_port, - int irq, int dma1, int dma2, - es18xx_t ** rchip) +static int __devinit snd_es18xx_new_device(snd_card_t * card, + unsigned long port, + unsigned long mpu_port, + unsigned long fm_port, + int irq, int dma1, int dma2, + es18xx_t ** rchip) { es18xx_t *chip; static snd_device_ops_t ops = { @@ -1746,27 +1743,27 @@ if ((chip->res_port = request_region(port, 16, "ES18xx")) == NULL) { snd_es18xx_free(chip); - printk(KERN_ERR PFX "unable to grap ports 0x%lx-0x%lx\n", port, port + 16 - 1); + snd_printk(KERN_ERR PFX "unable to grap ports 0x%lx-0x%lx\n", port, port + 16 - 1); return -EBUSY; } if (request_irq(irq, snd_es18xx_interrupt, SA_INTERRUPT, "ES18xx", (void *) chip)) { snd_es18xx_free(chip); - printk(KERN_ERR PFX "unable to grap IRQ %d\n", irq); + snd_printk(KERN_ERR PFX "unable to grap IRQ %d\n", irq); return -EBUSY; } chip->irq = irq; if (request_dma(dma1, "ES18xx DMA 1")) { snd_es18xx_free(chip); - printk(KERN_ERR PFX "unable to grap DMA1 %d\n", dma1); + snd_printk(KERN_ERR PFX "unable to grap DMA1 %d\n", dma1); return -EBUSY; } chip->dma1 = dma1; if (dma2 != dma1 && request_dma(dma2, "ES18xx DMA 2")) { snd_es18xx_free(chip); - printk(KERN_ERR PFX "unable to grap DMA2 %d\n", dma2); + snd_printk(KERN_ERR PFX "unable to grap DMA2 %d\n", dma2); return -EBUSY; } chip->dma2 = dma2; @@ -1783,7 +1780,7 @@ return 0; } -static int __init snd_es18xx_mixer(es18xx_t *chip) +static int __devinit snd_es18xx_mixer(es18xx_t *chip) { snd_card_t *card; int err; @@ -1886,11 +1883,11 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_ISAPNP; /* Enable this card */ -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP static int isapnp[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; #endif static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* 0x220,0x240,0x260,0x280 */ -#ifndef __ISAPNP__ +#ifndef CONFIG_PNP_ static long mpu_port[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1}; #else static long mpu_port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; @@ -1909,9 +1906,9 @@ MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(enable, "Enable ES18xx soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); -MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); +MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); @@ -1934,138 +1931,115 @@ MODULE_PARM_SYNTAX(dma2, SNDRV_ENABLED ",allows:{{0},{1},{3},{5}},dialog:list,prefers:{0}"); struct snd_audiodrive { -#ifdef __ISAPNP__ - struct isapnp_dev *dev; - struct isapnp_dev *devc; +#ifdef CONFIG_PNP + struct pnp_dev *dev; + struct pnp_dev *devc; #endif }; -static snd_card_t *snd_audiodrive_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -#ifdef __ISAPNP__ +static snd_card_t *snd_audiodrive_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static struct isapnp_card *snd_audiodrive_isapnp_cards[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; -static const struct isapnp_card_id *snd_audiodrive_isapnp_id[SNDRV_CARDS] __devinitdata = SNDRV_DEFAULT_PTR; - -#define ISAPNP_ES18XX(_va, _vb, _vc, _device, _audio, _control) \ - { \ - ISAPNP_CARD_ID(_va, _vb, _vc, _device), \ - .devs = { ISAPNP_DEVICE_ID(_va, _vb, _vc, _audio), \ - ISAPNP_DEVICE_ID(_va, _vb, _vc, _control) } \ - } +#ifdef CONFIG_PNP -static struct isapnp_card_id snd_audiodrive_pnpids[] __devinitdata = { +static struct pnp_card_device_id snd_audiodrive_pnpids[] __devinitdata = { /* ESS 1868 (integrated on Compaq dual P-Pro motherboard and Genius 18PnP 3D) */ - ISAPNP_ES18XX('E','S','S',0x1868,0x1868,0x0000), + { .id = "ESS1868", .devs = { { "ESS1868" }, { "ESS0000" } } }, /* ESS 1868 (integrated on Maxisound Cards) */ - ISAPNP_ES18XX('E','S','S',0x1868,0x8601,0x8600), + { .id = "ESS1868", .devs = { { "ESS8601" }, { "ESS8600" } } }, /* ESS 1868 (integrated on Maxisound Cards) */ - ISAPNP_ES18XX('E','S','S',0x1868,0x8611,0x8610), + { .id = "ESS1868", .devs = { { "ESS8611" }, { "ESS8610" } } }, /* ESS ES1869 Plug and Play AudioDrive */ - ISAPNP_ES18XX('E','S','S',0x0003,0x1869,0x0006), + { .id = "ESS0003", .devs = { { "ESS1869" }, { "ESS0006" } } }, /* ESS 1869 */ - ISAPNP_ES18XX('E','S','S',0x1869,0x1869,0x0006), + { .id = "ESS1869", .devs = { { "ESS1869" }, { "ESS0006" } } }, /* ESS 1878 */ - ISAPNP_ES18XX('E','S','S',0x1878,0x1878,0x0004), + { .id = "ESS1878", .devs = { { "ESS1878" }, { "ESS0004" } } }, /* ESS 1879 */ - ISAPNP_ES18XX('E','S','S',0x1879,0x1879,0x0009), + { .id = "ESS1879", .devs = { { "ESS1879" }, { "ESS0009" } } }, /* --- */ - { ISAPNP_CARD_END, } /* end */ + { .id = "" } /* end */ }; -ISAPNP_CARD_TABLE(snd_audiodrive_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_audiodrive_pnpids); -static int __init snd_audiodrive_isapnp(int dev, struct snd_audiodrive *acard) +static int __devinit snd_audiodrive_pnp(int dev, struct snd_audiodrive *acard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct isapnp_card_id *id = snd_audiodrive_isapnp_id[dev]; - struct isapnp_card *card = snd_audiodrive_isapnp_cards[dev]; - struct isapnp_dev *pdev; + struct pnp_dev *pdev; + struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table)); + int err; - acard->dev = isapnp_find_dev(card, id->devs[0].vendor, id->devs[0].function, NULL); - if (acard->dev->active) { - acard->dev = NULL; + if (!cfg) + return -ENOMEM; + acard->dev = pnp_request_card_device(card, id->devs[0].id, NULL); + if (acard->dev == NULL) { + kfree(cfg); return -EBUSY; } - acard->devc = isapnp_find_dev(card, id->devs[1].vendor, id->devs[1].function, NULL); - if (acard->devc->active) { - acard->dev = acard->devc = NULL; + acard->devc = pnp_request_card_device(card, id->devs[1].id, NULL); + if (acard->devc == NULL) { + kfree(cfg); return -EBUSY; } /* Control port initialization */ - if (acard->devc->prepare(acard->devc)<0) - return -EAGAIN; - if (acard->devc->activate(acard->devc)<0) { - printk(KERN_ERR PFX "isapnp control configure failure (out of resources?)\n"); + err = pnp_activate_dev(acard->devc); + if (err < 0) { + snd_printk(KERN_ERR PFX "PnP control configure failure (out of resources?)\n"); return -EAGAIN; } - snd_printdd("isapnp: port=0x%lx\n", acard->devc->resource[0].start); + snd_printdd("pnp: port=0x%lx\n", pnp_port_start(acard->devc, 0)); /* PnP initialization */ pdev = acard->dev; - if (pdev->prepare(pdev)<0) { - acard->devc->deactivate(acard->devc); - return -EAGAIN; - } + pnp_init_resource_table(cfg); if (port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], port[dev], 16); + pnp_resource_change(&cfg->port_resource[0], port[dev], 16); if (fm_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[1], fm_port[dev], 4); + pnp_resource_change(&cfg->port_resource[1], fm_port[dev], 4); if (mpu_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[2], mpu_port[dev], 2); + pnp_resource_change(&cfg->port_resource[2], mpu_port[dev], 2); if (dma1[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], dma1[dev], 1); + pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); if (dma2[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], dma2[dev], 1); + pnp_resource_change(&cfg->dma_resource[1], dma2[dev], 1); if (irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], irq[dev], 1); - if (pdev->activate(pdev)<0) { - printk(KERN_ERR PFX "isapnp configure failure (out of resources?)\n"); - acard->devc->deactivate(acard->devc); + pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR PFX "PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR PFX "PnP configure failure (out of resources?)\n"); + kfree(cfg); return -EBUSY; } /* ok. hack using Vendor-Defined Card-Level registers */ /* skip csn and logdev initialization - already done in isapnp_configure */ - isapnp_cfg_begin(pdev->bus->number, pdev->devfn); - isapnp_write_byte(0x27, pdev->irq_resource[0].start); /* Hardware Volume IRQ Number */ - if (mpu_port[dev] != SNDRV_AUTO_PORT) - isapnp_write_byte(0x28, pdev->irq); /* MPU-401 IRQ Number */ - isapnp_write_byte(0x72, pdev->irq_resource[0].start); /* second IRQ */ - isapnp_cfg_end(); - port[dev] = pdev->resource[0].start; - fm_port[dev] = pdev->resource[1].start; - mpu_port[dev] = pdev->resource[2].start; - dma1[dev] = pdev->dma_resource[0].start; - dma2[dev] = pdev->dma_resource[1].start; - irq[dev] = pdev->irq_resource[0].start; - snd_printdd("isapnp ES18xx: port=0x%lx, fm port=0x%lx, mpu port=0x%lx\n", port[dev], fm_port[dev], mpu_port[dev]); - snd_printdd("isapnp ES18xx: dma1=%i, dma2=%i, irq=%i\n", dma1[dev], dma2[dev], irq[dev]); - return 0; -} - -static void snd_audiodrive_deactivate(struct snd_audiodrive *acard) -{ - if (acard->devc) { - acard->devc->deactivate(acard->devc); - acard->devc = NULL; - } - if (acard->dev) { - acard->dev->deactivate(acard->dev); - acard->dev = NULL; - } -} -#endif /* __ISAPNP__ */ - -static void snd_audiodrive_free(snd_card_t *card) -{ - struct snd_audiodrive *acard = (struct snd_audiodrive *)card->private_data; - - if (acard) { -#ifdef __ISAPNP__ - snd_audiodrive_deactivate(acard); -#endif + if (pnp_device_is_isapnp(pdev)) { + isapnp_cfg_begin(isapnp_card_number(pdev), isapnp_csn_number(pdev)); + isapnp_write_byte(0x27, pnp_irq(pdev, 0)); /* Hardware Volume IRQ Number */ + if (mpu_port[dev] != SNDRV_AUTO_PORT) + isapnp_write_byte(0x28, pnp_irq(pdev, 0)); /* MPU-401 IRQ Number */ + isapnp_write_byte(0x72, pnp_irq(pdev, 0)); /* second IRQ */ + isapnp_cfg_end(); + } else { + snd_printk(KERN_ERR PFX "unable to install ISA PnP hack, expect malfunction\n"); } + port[dev] = pnp_port_start(pdev, 0); + fm_port[dev] = pnp_port_start(pdev, 1); + mpu_port[dev] = pnp_port_start(pdev, 2); + dma1[dev] = pnp_dma(pdev, 0); + dma2[dev] = pnp_dma(pdev, 1); + irq[dev] = pnp_irq(pdev, 0); + snd_printdd("PnP ES18xx: port=0x%lx, fm port=0x%lx, mpu port=0x%lx\n", port[dev], fm_port[dev], mpu_port[dev]); + snd_printdd("PnP ES18xx: dma1=%i, dma2=%i, irq=%i\n", dma1[dev], dma2[dev], irq[dev]); + kfree(cfg); + return 0; } +#endif /* CONFIG_PNP_ */ -static int __init snd_audiodrive_probe(int dev) +static int __devinit snd_audiodrive_probe(int dev, struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { static int possible_irqs[] = {5, 9, 10, 7, 11, 12, -1}; static int possible_dmas[] = {1, 0, 3, 5, -1}; @@ -2082,9 +2056,8 @@ if (card == NULL) return -ENOMEM; acard = (struct snd_audiodrive *)card->private_data; - card->private_free = snd_audiodrive_free; -#ifdef __ISAPNP__ - if (isapnp[dev] && (err = snd_audiodrive_isapnp(dev, acard)) < 0) { +#ifdef CONFIG_PNP + if (isapnp[dev] && (err = snd_audiodrive_pnp(dev, acard, pcard, pid)) < 0) { snd_card_free(card); return err; } @@ -2135,7 +2108,7 @@ if (fm_port[dev] > 0 && fm_port[dev] != SNDRV_AUTO_PORT) { if (snd_opl3_create(card, chip->fm_port, chip->fm_port + 2, OPL3_HW_OPL3, 0, &opl3) < 0) { - printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->fm_port); + snd_printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->fm_port); } else { if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { snd_card_free(card); @@ -2181,11 +2154,14 @@ snd_card_free(card); return err; } - snd_audiodrive_cards[dev] = card; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_audiodrive_legacy[dev] = card; return 0; } -static int __init snd_audiodrive_probe_legacy_port(unsigned long xport) +static int __devinit snd_audiodrive_probe_legacy_port(unsigned long xport) { static int dev; int res; @@ -2193,12 +2169,12 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || port[dev] != SNDRV_AUTO_PORT) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif port[dev] = xport; - res = snd_audiodrive_probe(dev); + res = snd_audiodrive_probe(dev, NULL, NULL); if (res < 0) port[dev] = SNDRV_AUTO_PORT; return res; @@ -2207,9 +2183,9 @@ } -#ifdef __ISAPNP__ -static int __init snd_audiodrive_isapnp_detect(struct isapnp_card *card, - const struct isapnp_card_id *id) +#ifdef CONFIG_PNP +static int __devinit snd_audiodrive_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -2217,9 +2193,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || !isapnp[dev]) continue; - snd_audiodrive_isapnp_cards[dev] = card; - snd_audiodrive_isapnp_id[dev] = id; - res = snd_audiodrive_probe(dev); + res = snd_audiodrive_probe(dev, card, id); if (res < 0) return res; dev++; @@ -2228,7 +2202,23 @@ return -ENODEV; } -#endif /* __ISAPNP__ */ + +static void __devexit snd_audiodrive_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); +} + +static struct pnp_card_driver es18xx_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "es18xx", + .id_table = snd_audiodrive_pnpids, + .probe = snd_audiodrive_pnp_detect, + .remove = __devexit_p(snd_audiodrive_pnp_remove), +}; +#endif /* CONFIG_PNP */ static int __init alsa_card_es18xx_init(void) { @@ -2239,22 +2229,22 @@ for (dev = 0; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || port[dev] == SNDRV_AUTO_PORT) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif - if (snd_audiodrive_probe(dev) >= 0) + if (snd_audiodrive_probe(dev, NULL, NULL) >= 0) cards++; } /* legacy auto configured cards */ cards += snd_legacy_auto_probe(possible_ports, snd_audiodrive_probe_legacy_port); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP /* ISA PnP cards at last */ - cards += isapnp_probe_cards(snd_audiodrive_pnpids, snd_audiodrive_isapnp_detect); + cards += pnp_register_card_driver(&es18xx_pnpc_driver); #endif if(!cards) { #ifdef MODULE - printk(KERN_ERR "ESS AudioDrive ES18xx soundcard not found or device busy\n"); + snd_printk(KERN_ERR "ESS AudioDrive ES18xx soundcard not found or device busy\n"); #endif return -ENODEV; } @@ -2265,13 +2255,18 @@ { int idx; +#ifdef CONFIG_PNP + /* PnP cards first */ + pnp_unregister_card_driver(&es18xx_pnpc_driver); +#endif for(idx = 0; idx < SNDRV_CARDS; idx++) - snd_card_free(snd_audiodrive_cards[idx]); + snd_card_free(snd_audiodrive_legacy[idx]); } module_init(alsa_card_es18xx_init) module_exit(alsa_card_es18xx_exit) + #ifndef MODULE /* format is: snd-es18xx=enable,index,id,isapnp, @@ -2295,7 +2290,7 @@ get_option(&str,&irq[nr_dev]) == 2 && get_option(&str,&dma1[nr_dev]) == 2 && get_option(&str,&dma2[nr_dev]) == 2); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (pnp != INT_MAX) isapnp[nr_dev] = pnp; #endif diff -Nru a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c --- a/sound/isa/gus/interwave.c Sat Apr 12 14:44:08 2003 +++ b/sound/isa/gus/interwave.c Sat Apr 12 14:44:08 2003 @@ -27,11 +27,7 @@ #include #include #include -#ifndef LINUX_ISAPNP_H -#include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif +#include #include #include #include @@ -62,7 +58,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_ISAPNP; /* Enable this card */ -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP static int isapnp[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1}; #endif static long port[SNDRV_CARDS] = SNDRV_DEFAULT_PORT; /* 0x210,0x220,0x230,0x240,0x250,0x260 */ @@ -130,56 +126,41 @@ #endif unsigned short gus_status_reg; unsigned short pcm_status_reg; -#ifdef __ISAPNP__ - struct isapnp_dev *dev; +#ifdef CONFIG_PNP + struct pnp_dev *dev; #ifdef SNDRV_STB - struct isapnp_dev *devtc; + struct pnp_dev *devtc; #endif #endif }; -static snd_card_t *snd_interwave_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -#ifdef __ISAPNP__ +static snd_card_t *snd_interwave_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static struct isapnp_card *snd_interwave_isapnp_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static const struct isapnp_card_id *snd_interwave_isapnp_id[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; +#ifdef CONFIG_PNP -#define ISAPNP_INTERWAVE(_va, _vb, _vc, _device, _audio) \ - { \ - ISAPNP_CARD_ID(_va, _vb, _vc, _device), \ - .devs = { ISAPNP_DEVICE_ID(_va, _vb, _vc, _audio), } \ - } -#define ISAPNP_INTERWAVE_STB(_va, _vb, _vc, _device, _audio, _tone) \ - { \ - ISAPNP_CARD_ID(_va, _vb, _vc, _device), \ - .devs = { ISAPNP_DEVICE_ID(_va, _vb, _vc, _audio), \ - ISAPNP_DEVICE_ID(_va, _vb, _vc, _tone), } \ - } - -static struct isapnp_card_id snd_interwave_pnpids[] __devinitdata = { +static struct pnp_card_device_id snd_interwave_pnpids[] __devinitdata = { #ifndef SNDRV_STB /* Gravis UltraSound Plug & Play */ - ISAPNP_INTERWAVE('G','R','V',0x0001,0x0000), + { .id = "GRV0001", .devs = { { .id = "GRV0000" } } }, /* STB SoundRage32 */ - ISAPNP_INTERWAVE('S','T','B',0x011a,0x0010), + { .id = "STB011a", .devs = { { .id = "STB0010" } } }, /* MED3210 */ - ISAPNP_INTERWAVE('D','X','P',0x3201,0x0010), + { .id = "DXP3201", .devs = { { .id = "DXP0010" } } }, /* Dynasonic Pro */ /* This device also have CDC1117:DynaSonix Pro Audio Effects Processor */ - ISAPNP_INTERWAVE('C','D','C',0x1111,0x1112), + { .id = "CDC1111", .devs = { { .id = "CDC1112" } } }, /* Panasonic PCA761AW Audio Card */ - ISAPNP_INTERWAVE('A','D','V',0x55ff,0x0010), + { .id = "ADV55ff", .devs = { { .id = "ADV0010" } } }, #else /* InterWave STB with TEA6330T */ - ISAPNP_INTERWAVE_STB('A','D','V',0x550a,0x0010,0x0015), + { .id = "ADV550a", .devs = { { .id = "ADV0010" }, { .id = "ADV0015" } } }, #endif - { ISAPNP_CARD_END, } + { .id = "" } }; -ISAPNP_CARD_TABLE(snd_interwave_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_interwave_pnpids); -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ #ifdef SNDRV_STB @@ -226,9 +207,9 @@ .getdata = snd_interwave_i2c_getdataline, }; -static int __init snd_interwave_detect_stb(struct snd_interwave *iwcard, - snd_gus_card_t * gus, int dev, - snd_i2c_bus_t **rbus) +static int __devinit snd_interwave_detect_stb(struct snd_interwave *iwcard, + snd_gus_card_t * gus, int dev, + snd_i2c_bus_t **rbus) { unsigned long port; snd_i2c_bus_t *bus; @@ -266,13 +247,13 @@ } #endif -static int __init snd_interwave_detect(struct snd_interwave *iwcard, - snd_gus_card_t * gus, - int dev +static int __devinit snd_interwave_detect(struct snd_interwave *iwcard, + snd_gus_card_t * gus, + int dev #ifdef SNDRV_STB - , snd_i2c_bus_t **rbus + , snd_i2c_bus_t **rbus #endif - ) + ) { unsigned long flags; unsigned char rev1, rev2; @@ -349,7 +330,7 @@ } while (loop && --max > 0); } -static void __init snd_interwave_reset(snd_gus_card_t * gus) +static void __devinit snd_interwave_reset(snd_gus_card_t * gus) { snd_gf1_write8(gus, SNDRV_GF1_GB_RESET, 0x00); udelay(160); @@ -357,7 +338,7 @@ udelay(160); } -static void __init snd_interwave_bank_sizes(snd_gus_card_t * gus, int *sizes) +static void __devinit snd_interwave_bank_sizes(snd_gus_card_t * gus, int *sizes) { unsigned int idx; unsigned int local; @@ -406,7 +387,7 @@ /* 511 */ unsigned char csum; }; -static void __init snd_interwave_detect_memory(snd_gus_card_t * gus) +static void __devinit snd_interwave_detect_memory(snd_gus_card_t * gus) { static unsigned int lmc[13] = { @@ -509,7 +490,7 @@ snd_interwave_reset(gus); } -static void __init snd_interwave_init(int dev, snd_gus_card_t * gus) +static void __devinit snd_interwave_init(int dev, snd_gus_card_t * gus) { unsigned long flags; @@ -540,7 +521,7 @@ CS4231_DOUBLE("Mic Playback Volume", 0, CS4231_LEFT_MIC_INPUT, CS4231_RIGHT_MIC_INPUT, 0, 0, 31, 1) }; -static int __init snd_interwave_mixer(cs4231_t *chip) +static int __devinit snd_interwave_mixer(cs4231_t *chip) { snd_card_t *card = chip->card; snd_ctl_elem_id_t id1, id2; @@ -588,98 +569,89 @@ return 0; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP -static int __init snd_interwave_isapnp(int dev, struct snd_interwave *iwcard) +static int __devinit snd_interwave_pnp(int dev, struct snd_interwave *iwcard, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct isapnp_card_id *id = snd_interwave_isapnp_id[dev]; - struct isapnp_card *card = snd_interwave_isapnp_cards[dev]; - struct isapnp_dev *pdev; + struct pnp_dev *pdev; + struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); + int err; - iwcard->dev = isapnp_find_dev(card, id->devs[0].vendor, id->devs[0].function, NULL); - if (iwcard->dev->active) { - iwcard->dev = NULL; + iwcard->dev = pnp_request_card_device(card, id->devs[0].id, NULL); + if (iwcard->dev == NULL) { + kfree(cfg); return -EBUSY; } #ifdef SNDRV_STB - iwcard->devtc = isapnp_find_dev(card, id->devs[1].vendor, id->devs[1].function, NULL); - if (iwcard->devtc->active) { - iwcard->dev = iwcard->devtc = NULL; + iwcard->devtc = pnp_request_card_device(card, id->devs[1].id, NULL); + if (iwcard->devtc == NULL) { + kfree(cfg); return -EBUSY; } #endif /* Synth & Codec initialization */ pdev = iwcard->dev; - if (pdev->prepare(pdev)<0) - return -EAGAIN; + pnp_init_resource_table(cfg); if (port[dev] != SNDRV_AUTO_PORT) { - isapnp_resource_change(&pdev->resource[0], port[dev], 16); - isapnp_resource_change(&pdev->resource[1], port[dev] + 0x100, 12); - isapnp_resource_change(&pdev->resource[2], port[dev] + 0x10c, 4); + pnp_resource_change(&cfg->port_resource[0], port[dev], 16); + pnp_resource_change(&cfg->port_resource[1], port[dev] + 0x100, 12); + pnp_resource_change(&cfg->port_resource[2], port[dev] + 0x10c, 4); } if (dma1[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], dma1[dev], 1); + pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); if (dma2[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], dma2[dev], 1); + pnp_resource_change(&cfg->dma_resource[1], dma2[dev], 1); if (dma2[dev] < 0) - isapnp_resource_change(&pdev->dma_resource[1], 4, 1); + pnp_resource_change(&cfg->dma_resource[1], 4, 1); if (irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], irq[dev], 1); - if (pdev->activate(pdev)<0) { - snd_printk("isapnp configure failure (out of resources?)\n"); - return -EBUSY; + pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "InterWave - Synth - the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + kfree(cfg); + snd_printk(KERN_ERR "InterWave PnP configure failure (out of resources?)\n"); + return err; } - if (pdev->resource[0].start + 0x100 != pdev->resource[1].start || - pdev->resource[0].start + 0x10c != pdev->resource[2].start) { - snd_printk("isapnp configure failure (wrong ports)\n"); - pdev->deactivate(pdev); + if (pnp_port_start(pdev, 0) + 0x100 != pnp_port_start(pdev, 1) || + pnp_port_start(pdev, 0) + 0x10c != pnp_port_start(pdev, 2)) { + kfree(cfg); + snd_printk(KERN_ERR "PnP configure failure (wrong ports)\n"); return -ENOENT; } - port[dev] = pdev->resource[0].start; - dma1[dev] = pdev->dma_resource[0].start; + port[dev] = pnp_port_start(pdev, 0); + dma1[dev] = pnp_dma(pdev, 1); if (dma2[dev] >= 0) - dma2[dev] = pdev->dma_resource[1].start; - irq[dev] = pdev->irq_resource[0].start; + dma2[dev] = pnp_dma(pdev, 1); + irq[dev] = pnp_irq(pdev, 0); snd_printdd("isapnp IW: sb port=0x%lx, gf1 port=0x%lx, codec port=0x%lx\n", - pdev->resource[0].start, - pdev->resource[1].start, - pdev->resource[2].start); + pnp_port_start(pdev, 0), + pnp_port_start(pdev, 1), + pnp_port_start(pdev, 2)); snd_printdd("isapnp IW: dma1=%i, dma2=%i, irq=%i\n", dma1[dev], dma2[dev], irq[dev]); #ifdef SNDRV_STB /* Tone Control initialization */ pdev = iwcard->devtc; - if (pdev->prepare(pdev)<0) { - iwcard->dev->deactivate(iwcard->dev); - return -EAGAIN; - } + pnp_init_resource_table(cfg); if (port_tc[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], port_tc[dev], 1); - if (pdev->activate(pdev)<0) { - snd_printk("Tone Control isapnp configure failure (out of resources?)\n"); - iwcard->dev->deactivate(iwcard->dev); - return -EBUSY; + pnp_resource_change(&cfg->port_resource[0], port_tc[dev], 1); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "InterWave - ToneControl - the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + kfree(cfg); + snd_printk(KERN_ERR "InterWave ToneControl PnP configure failure (out of resources?)\n"); + return err; } - port_tc[dev] = pdev->resource[0].start; + port_tc[dev] = pnp_port_start(pdev, 0); snd_printdd("isapnp IW: tone control port=0x%lx\n", port_tc[dev]); #endif + kfree(cfg); return 0; } - -static void snd_interwave_deactivate(struct snd_interwave *iwcard) -{ - if (iwcard->dev) { - iwcard->dev->deactivate(iwcard->dev); - iwcard->dev = NULL; - } -#ifdef SNDRV_STB - if (iwcard->devtc) { - iwcard->devtc->deactivate(iwcard->devtc); - iwcard->devtc = NULL; - } -#endif -} - -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ static void snd_interwave_free(snd_card_t *card) { @@ -687,9 +659,6 @@ if (iwcard == NULL) return; -#ifdef __ISAPNP__ - snd_interwave_deactivate(iwcard); -#endif #ifdef SNDRV_STB if (iwcard->i2c_res) { release_resource(iwcard->i2c_res); @@ -700,7 +669,8 @@ free_irq(iwcard->irq, (void *)iwcard); } -static int __init snd_interwave_probe(int dev) +static int __devinit snd_interwave_probe(int dev, struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { static int possible_irqs[] = {5, 11, 12, 9, 7, 15, 3, -1}; static int possible_dmas[] = {0, 1, 3, 5, 6, 7, -1}; @@ -724,8 +694,8 @@ iwcard->card = card; iwcard->irq = -1; card->private_free = snd_interwave_free; -#ifdef __ISAPNP__ - if (isapnp[dev] && snd_interwave_isapnp(dev, iwcard)) { +#ifdef CONFIG_PNP + if (isapnp[dev] && snd_interwave_pnp(dev, iwcard, pcard, pid)) { snd_card_free(card); return -ENODEV; } @@ -879,11 +849,14 @@ iwcard->cs4231 = cs4231; iwcard->gus = gus; - snd_interwave_cards[dev++] = card; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_interwave_legacy[dev++] = card; return 0; } -static int __init snd_interwave_probe_legacy_port(unsigned long xport) +static int __devinit snd_interwave_probe_legacy_port(unsigned long xport) { static int dev; int res; @@ -891,12 +864,12 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || port[dev] != SNDRV_AUTO_PORT) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif port[dev] = xport; - res = snd_interwave_probe(dev); + res = snd_interwave_probe(dev, NULL, NULL); if (res < 0) port[dev] = SNDRV_AUTO_PORT; return res; @@ -904,10 +877,10 @@ return -ENODEV; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP -static int __init snd_interwave_isapnp_detect(struct isapnp_card *card, - const struct isapnp_card_id *id) +static int __devinit snd_interwave_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -915,9 +888,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || !isapnp[dev]) continue; - snd_interwave_isapnp_cards[dev] = card; - snd_interwave_isapnp_id[dev] = id; - res = snd_interwave_probe(dev); + res = snd_interwave_probe(dev, card, id); if (res < 0) return res; dev++; @@ -927,7 +898,23 @@ return -ENODEV; } -#endif /* __ISAPNP__ */ +static void __devexit snd_interwave_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); +} + +static struct pnp_card_driver interwave_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "interwave", + .id_table = snd_interwave_pnpids, + .probe = snd_interwave_pnp_detect, + .remove = __devexit_p(snd_interwave_pnp_remove), +}; + +#endif /* CONFIG_PNP */ static int __init alsa_card_interwave_init(void) { @@ -938,11 +925,11 @@ for (dev = 0; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || port[dev] == SNDRV_AUTO_PORT) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif - if (!snd_interwave_probe(dev)) { + if (!snd_interwave_probe(dev, NULL, NULL)) { cards++; continue; } @@ -952,9 +939,9 @@ } /* legacy auto configured cards */ cards += snd_legacy_auto_probe(possible_ports, snd_interwave_probe_legacy_port); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP /* ISA PnP cards */ - cards += isapnp_probe_cards(snd_interwave_pnpids, snd_interwave_isapnp_detect); + cards += pnp_register_card_driver(&interwave_pnpc_driver); #endif if (!cards) { @@ -970,8 +957,12 @@ { int dev; +#ifdef CONFIG_PNP + /* PnP cards first */ + pnp_unregister_card_driver(&interwave_pnpc_driver); +#endif for (dev = 0; dev < SNDRV_CARDS; dev++) - snd_card_free(snd_interwave_cards[dev]); + snd_card_free(snd_interwave_legacy[dev]); } module_init(alsa_card_interwave_init) @@ -1007,7 +998,7 @@ get_option(&str,&midi[nr_dev]) == 2 && get_option(&str,&pcm_channels[nr_dev]) == 2 && get_option(&str,&effect[nr_dev]) == 2); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (pnp != INT_MAX) isapnp[nr_dev] = pnp; #endif diff -Nru a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c --- a/sound/isa/opl3sa2.c Sat Apr 12 14:44:10 2003 +++ b/sound/isa/opl3sa2.c Sat Apr 12 14:44:10 2003 @@ -71,7 +71,7 @@ MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); -MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); +MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); @@ -157,27 +157,24 @@ #endif }; -static snd_card_t *snd_opl3sa2_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; +static snd_card_t *snd_opl3sa2_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; #ifdef CONFIG_PNP -static struct pnp_card *snd_opl3sa2_isapnp_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static const struct pnp_card_id *snd_opl3sa2_isapnp_id[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -static struct pnp_card_id snd_opl3sa2_pnpids[] = { +static struct pnp_card_device_id snd_opl3sa2_pnpids[] __devinitdata = { /* Yamaha YMF719E-S (Genius Sound Maker 3DX) */ - {.id = "YMH0020", .driver_data = 0, devs : { {.id="YMH0021"}, } }, + { .id = "YMH0020", .devs = { { "YMH0021" } } }, /* Yamaha OPL3-SA3 (integrated on Intel's Pentium II AL440LX motherboard) */ - {.id = "YMH0030", .driver_data = 0, devs : { {.id="YMH0021"}, } }, + { .id = "YMH0030", .devs = { { "YMH0021" } } }, /* Yamaha OPL3-SA2 */ - {.id = "YMH0800", .driver_data = 0, devs : { {.id="YMH0021"}, } }, + { .id = "YMH0800", .devs = { { "YMH0021" } } }, /* NeoMagic MagicWave 3DX */ - {.id = "NMX2200", .driver_data = 0, devs : { {.id="NMX2210"}, } }, + { .id = "NMX2200", .devs = { { "YMH2210" } } }, /* --- */ - {.id = "", } /* end */ + { .id = "" } /* end */ }; -/*PNP_CARD_TABLE(snd_opl3sa2_pnpids);*/ +MODULE_DEVICE_TABLE(pnp_card, snd_opl3sa2_pnpids); #endif /* CONFIG_PNP */ @@ -268,7 +265,7 @@ snd_printd("OPL3-SA [0x%lx] detect (1) = 0x%x (0x%x)\n", port, tmp, tmp1); return -ENODEV; } - /* try if the MIC register is accessible */ + /* try if the MIC register is accesible */ tmp = snd_opl3sa2_read(chip, OPL3SA2_MIC); snd_opl3sa2_write(chip, OPL3SA2_MIC, 0x8a); if (((tmp1 = snd_opl3sa2_read(chip, OPL3SA2_MIC)) & 0x9f) != 0x8a) { @@ -496,7 +493,8 @@ snd_card_t *card = chip->card; snd_ctl_elem_id_t id1, id2; snd_kcontrol_t *kctl; - int idx, err; + unsigned int idx; + int err; memset(&id1, 0, sizeof(id1)); memset(&id2, 0, sizeof(id2)); @@ -542,9 +540,8 @@ { snd_card_t *card = chip->card; - snd_power_lock(card); if (card->power_state == SNDRV_CTL_POWER_D3hot) - goto __skip; + return; /* FIXME: is this order ok? */ chip->cs4231_suspend(chip->cs4231); @@ -554,8 +551,6 @@ snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D3); snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); - __skip: - snd_power_unlock(card); } static void snd_opl3sa2_resume(opl3sa2_t *chip) @@ -563,9 +558,8 @@ snd_card_t *card = chip->card; int i; - snd_power_lock(card); if (card->power_state == SNDRV_CTL_POWER_D0) - goto __skip; + return; /* power up */ snd_opl3sa2_write(chip, OPL3SA2_PM_CTRL, OPL3SA2_PM_D0); @@ -583,8 +577,6 @@ chip->cs4231_resume(chip->cs4231); snd_power_change_state(card, SNDRV_CTL_POWER_D0); - __skip: - snd_power_unlock(card); } /* callback for control API */ @@ -625,40 +617,66 @@ #endif /* CONFIG_PM */ #ifdef CONFIG_PNP -static int __init snd_opl3sa2_isapnp(int dev, opl3sa2_t *chip) +static int __init snd_opl3sa2_pnp(int dev, opl3sa2_t *chip, + struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct pnp_card_id *id = snd_opl3sa2_isapnp_id[dev]; - struct pnp_card *card = snd_opl3sa2_isapnp_cards[dev]; struct pnp_dev *pdev; + struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); + int err; - chip->dev = pnp_request_card_device(card, id->devs[0].id, NULL); - pdev = chip->dev; - if (!pdev){ - snd_printdd("isapnp OPL3-SA: a card was found but it did not contain the needed devices\n"); - return -ENODEV; + if (!cfg) + return -ENOMEM; + pdev = chip->dev = pnp_request_card_device(card, id->devs[0].id, NULL); + if (chip->dev == NULL) { + kfree(cfg); + return -EBUSY; } - sb_port[dev] = pdev->resource[0].start; - wss_port[dev] = pdev->resource[1].start; - fm_port[dev] = pdev->resource[2].start; - midi_port[dev] = pdev->resource[3].start; - port[dev] = pdev->resource[4].start; - dma1[dev] = pdev->dma_resource[0].start; - dma2[dev] = pdev->dma_resource[1].start; - irq[dev] = pdev->irq_resource[0].start; - snd_printdd("isapnp OPL3-SA: sb port=0x%lx, wss port=0x%lx, fm port=0x%lx, midi port=0x%lx\n", + /* PnP initialization */ + pnp_init_resource_table(cfg); + if (sb_port[dev] != SNDRV_AUTO_PORT) + pnp_resource_change(&cfg->port_resource[0], sb_port[dev], 16); + pnp_resource_change(&cfg->port_resource[1], wss_port[dev], 8); + if (fm_port[dev] != SNDRV_AUTO_PORT) + pnp_resource_change(&cfg->port_resource[2], fm_port[dev], 4); + if (midi_port[dev] != SNDRV_AUTO_PORT) + pnp_resource_change(&cfg->port_resource[3], midi_port[dev], 2); + if (port[dev] != SNDRV_AUTO_PORT) + pnp_resource_change(&cfg->port_resource[4], port[dev], 2); + if (dma1[dev] != SNDRV_AUTO_DMA) + pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); + if (dma2[dev] != SNDRV_AUTO_DMA) + pnp_resource_change(&cfg->dma_resource[1], dma2[dev], 1); + if (irq[dev] != SNDRV_AUTO_IRQ) + pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); + err = pnp_manual_config_dev(pdev, cfg, 0); + if (err < 0) + snd_printk(KERN_ERR "PnP manual resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + kfree(cfg); + snd_printk(KERN_ERR "PnP configure failure (out of resources?)\n"); + return -EBUSY; + } + sb_port[dev] = pnp_port_start(pdev, 0); + wss_port[dev] = pnp_port_start(pdev, 1); + fm_port[dev] = pnp_port_start(pdev, 2); + midi_port[dev] = pnp_port_start(pdev, 3); + port[dev] = pnp_port_start(pdev, 4); + dma1[dev] = pnp_dma(pdev, 0); + dma2[dev] = pnp_dma(pdev, 1); + irq[dev] = pnp_irq(pdev, 0); + snd_printdd("PnP OPL3-SA: sb port=0x%lx, wss port=0x%lx, fm port=0x%lx, midi port=0x%lx\n", sb_port[dev], wss_port[dev], fm_port[dev], midi_port[dev]); - snd_printdd("isapnp OPL3-SA: control port=0x%lx, dma1=%i, dma2=%i, irq=%i\n", + snd_printdd("PnP OPL3-SA: control port=0x%lx, dma1=%i, dma2=%i, irq=%i\n", port[dev], dma1[dev], dma2[dev], irq[dev]); + kfree(cfg); return 0; } - #endif /* CONFIG_PNP */ static int snd_opl3sa2_free(opl3sa2_t *chip) { -#ifdef CONFIG_PNP - chip->dev = NULL; -#endif #ifdef CONFIG_PM if (chip->pm_dev) pm_unregister(chip->pm_dev); @@ -679,7 +697,9 @@ return snd_opl3sa2_free(chip); } -static int __init snd_opl3sa2_probe(int dev) +static int __devinit snd_opl3sa2_probe(int dev, + struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { int xirq, xdma1, xdma2; snd_card_t *card; @@ -727,7 +747,7 @@ if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) goto __error; #ifdef CONFIG_PNP - if (isapnp[dev] && (err = snd_opl3sa2_isapnp(dev, chip)) < 0) + if (isapnp[dev] && (err = snd_opl3sa2_pnp(dev, chip, pcard, pid)) < 0) goto __error; #endif chip->ymode = opl3sa3_ymode[dev] & 0x03 ; /* initialise this card from supplied (or default) parameter*/ @@ -806,7 +826,10 @@ if ((err = snd_card_register(card)) < 0) goto __error; - snd_opl3sa2_cards[dev] = card; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_opl3sa2_legacy[dev] = card; return 0; __error: @@ -815,18 +838,16 @@ } #ifdef CONFIG_PNP -static int __init snd_opl3sa2_isapnp_detect(struct pnp_card *card, - const struct pnp_card_id *id) +static int __devinit snd_opl3sa2_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; for ( ; dev < SNDRV_CARDS; dev++) { - if (!enable[dev]) + if (!enable[dev] && !isapnp[dev]) continue; - snd_opl3sa2_isapnp_cards[dev] = card; - snd_opl3sa2_isapnp_id[dev] = id; - res = snd_opl3sa2_probe(dev); + res = snd_opl3sa2_probe(dev, card, id); if (res < 0) return res; dev++; @@ -835,18 +856,21 @@ return -ENODEV; } -static void snd_opl3sa2_isapnp_remove(struct pnp_card * card) +static void __devexit snd_opl3sa2_pnp_remove(struct pnp_card_link * pcard) { -/* FIXME */ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); } -static struct pnpc_driver opl3sa2_pnpc_driver = { - .name = "opl3sa2", - .id_table = snd_opl3sa2_pnpids, - .probe = snd_opl3sa2_isapnp_detect, - .remove = snd_opl3sa2_isapnp_remove, +static struct pnp_card_driver opl3sa2_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "opl3sa2", + .id_table = snd_opl3sa2_pnpids, + .probe = snd_opl3sa2_pnp_detect, + .remove = __devexit_p(snd_opl3sa2_pnp_remove), }; - #endif /* CONFIG_PNP */ static int __init alsa_card_opl3sa2_init(void) @@ -860,15 +884,15 @@ if (isapnp[dev]) continue; #endif - if (snd_opl3sa2_probe(dev) >= 0) + if (snd_opl3sa2_probe(dev, NULL, NULL) >= 0) cards++; } #ifdef CONFIG_PNP - cards += pnpc_register_driver(&opl3sa2_pnpc_driver); + cards += pnp_register_card_driver(&opl3sa2_pnpc_driver); #endif if (!cards) { #ifdef MODULE - printk(KERN_ERR "Yamaha OPL3-SA soundcard not found or device busy\n"); + snd_printk(KERN_ERR "Yamaha OPL3-SA soundcard not found or device busy\n"); #endif return -ENODEV; } @@ -879,8 +903,12 @@ { int idx; +#ifdef CONFIG_PNP + /* PnP cards first */ + pnp_unregister_card_driver(&opl3sa2_pnpc_driver); +#endif for (idx = 0; idx < SNDRV_CARDS; idx++) - snd_card_free(snd_opl3sa2_cards[idx]); + snd_card_free(snd_opl3sa2_legacy[idx]); } module_init(alsa_card_opl3sa2_init) diff -Nru a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c --- a/sound/isa/opti9xx/opti92x-ad1848.c Sat Apr 12 14:44:06 2003 +++ b/sound/isa/opti9xx/opti92x-ad1848.c Sat Apr 12 14:44:06 2003 @@ -29,11 +29,7 @@ #include #include #include -#ifndef LINUX_ISAPNP_H -#include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif +#include #include #ifdef CS4231 #include @@ -47,6 +43,11 @@ #endif /* CS4231 */ #include #include +#ifdef USE_OPL4 +#ifndef OPTi93X +#include "opl4.h" /* */ +#endif +#endif #define SNDRV_LEGACY_FIND_FREE_IRQ #define SNDRV_LEGACY_FIND_FREE_DMA #define SNDRV_GET_ID @@ -267,23 +268,16 @@ long mpu_port; int mpu_irq; -#if defined(OPTi93X) - opti93x_t *opti93x; -#elif defined(CS4231) - cs4231_t *cs4231; -#else - ad1848_t *ad1848; -#endif /* AD1848 */ - snd_rawmidi_t *rmidi; -#ifdef __ISAPNP__ - struct isapnp_dev *dev; - struct isapnp_dev *devmpu; -#endif /* __ISAPNP__ */ +#ifdef CONFIG_PNP + struct pnp_dev *dev; + struct pnp_dev *devmpu; +#endif /* CONFIG_PNP */ }; -static snd_card_t *snd_opti9xx_card = SNDRV_DEFAULT_PTR1; +static int snd_opti9xx_first_hit = 1; +static snd_card_t *snd_opti9xx_legacy = SNDRV_DEFAULT_PTR1; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP #define ISAPNP_OPTI9XX(_va, _vb, _vc, _device, _fa, _fb, _fc, _audio, _mpu401) \ { \ @@ -292,22 +286,22 @@ ISAPNP_DEVICE_ID(_fa, _fb, _fc, _mpu401), } \ } -static struct isapnp_card_id snd_card_opti9xx_pnpids[] = { +static struct pnp_card_device_id snd_opti9xx_pnpids[] = { #ifndef OPTi93X /* OPTi 82C924 */ - ISAPNP_OPTI9XX('O','P','T',0x0924,'O','P','T',0x0000,0x0002), + { .id = "OPT0924", .devs = { { "OPT0000" }, { "OPT0002" } }, .driver_data = 0x0924 }, /* OPTi 82C925 */ - ISAPNP_OPTI9XX('O','P','T',0x0925,'O','P','T',0x9250,0x0002), + { .id = "OPT0925", .devs = { { "OPT9250" }, { "OPT0002" } }, .driver_data = 0x0925 }, #else /* OPTi 82C931/3 */ - ISAPNP_OPTI9XX('O','P','T',0x0931,'O','P','T',0x9310,0x0002), + { .id = "OPT0931", .devs = { { "OPT9310" }, { "OPT0002" } }, .driver_data = 0x0931 }, #endif /* OPTi93X */ - { ISAPNP_CARD_END, } + { .id = "" } }; -ISAPNP_CARD_TABLE(snd_card_opti9xx_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_opti9xx_pnpids); -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ #ifdef OPTi93X #define DRIVER_NAME "snd-card-opti93x" @@ -326,14 +320,14 @@ static long snd_legacy_find_free_ioport(long *port_table, long size) { while (*port_table != -1) { - if (request_region(*port_table, size, "opti92x-ad1848")) + if (!check_region(*port_table, size)) return *port_table; port_table++; } - return SNDRV_AUTO_PORT; + return -1; } -static int __init snd_opti9xx_init(opti9xx_t *chip, unsigned short hardware) +static int __devinit snd_opti9xx_init(opti9xx_t *chip, unsigned short hardware) { static int opti9xx_mc_size[] = {7, 7, 10, 10, 2, 2, 2}; @@ -478,7 +472,7 @@ (snd_opti9xx_read(chip, reg) & ~(mask)) | ((value) & (mask))) -static int __init snd_opti9xx_configure(opti9xx_t *chip) +static int __devinit snd_opti9xx_configure(opti9xx_t *chip) { unsigned char wss_base_bits; unsigned char irq_bits; @@ -1669,7 +1663,7 @@ #endif /* OPTi93X */ -static int __init snd_card_opti9xx_detect(snd_card_t *card, opti9xx_t *chip) +static int __devinit snd_card_opti9xx_detect(snd_card_t *card, opti9xx_t *chip) { int i, err; @@ -1715,112 +1709,100 @@ return -ENODEV; } -#ifdef __ISAPNP__ -static int __init snd_card_opti9xx_isapnp(opti9xx_t *chip) +#ifdef CONFIG_PNP +static int __devinit snd_card_opti9xx_pnp(opti9xx_t *chip, struct pnp_card_link *card, + const struct pnp_card_device_id *pid) { - struct isapnp_dev *pdev = NULL; - const struct isapnp_card_id *pid = snd_card_opti9xx_pnpids-1; - static struct isapnp_card *card = NULL; - - __again: - while (1) { - pid++; - if (pid->card_vendor == 0) - return -ENODEV; - if ((card = isapnp_find_card(pid->card_vendor, pid->card_device, card))) - break; - } - if (card == NULL) - return -ENODEV; - - chip->dev = isapnp_find_dev(card, pid->devs[0].vendor, pid->devs[0].function, NULL); - if (chip->dev == NULL) - goto __again; + struct pnp_dev *pdev; + struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); + int err; - chip->devmpu = isapnp_find_dev(card, pid->devs[1].vendor, pid->devs[1].function, NULL); + chip->dev = pnp_request_card_device(card, pid->devs[0].id, NULL); + if (chip->dev == NULL) { + kfree(cfg); + return -EBUSY; + } + chip->devmpu = pnp_request_card_device(card, pid->devs[1].id, NULL); pdev = chip->dev; - if (pdev->prepare(pdev) < 0) - return -EAGAIN; + pnp_init_resource_table(cfg); #ifdef OPTi93X if (port != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], port + 4, 4); + pnp_resource_change(&cfg->port_resource[0], port + 4, 4); #else - if ((pid->card_device != ISAPNP_DEVICE(0x0924)) && (port != SNDRV_AUTO_PORT)) - isapnp_resource_change(&pdev->resource[1], port, 4); + if (pid->driver_data != 0x0924 && port != SNDRV_AUTO_PORT) + pnp_resource_change(&cfg->port_resource[1], port, 4); #endif /* OPTi93X */ if (irq != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], irq, 1); + pnp_resource_change(&cfg->irq_resource[0], irq, 1); if (dma1 != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], dma1, 1); + pnp_resource_change(&cfg->dma_resource[0], dma1, 1); #if defined(CS4231) || defined(OPTi93X) if (dma2 != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], dma2, 1); + pnp_resource_change(&cfg->dma_resource[1], dma2, 1); #endif /* CS4231 || OPTi93X */ if (fm_port != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[1], fm_port, 4); + pnp_resource_change(&cfg->port_resource[1], fm_port, 4); - if (pdev->activate(pdev) < 0) { - snd_printk("AUDIO isapnp configure failure\n"); - return -EBUSY; + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "AUDIO the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "AUDIO pnp configure failure\n"); + kfree(cfg); + return err; } #ifdef OPTi93X - port = pdev->resource[0].start - 4; - fm_port = pdev->resource[1].start; + port = pnp_port_start(pdev, 0) - 4; + fm_port = pnp_port_start(pdev, 1); #else - if (pid->card_device != ISAPNP_DEVICE(0x0924)) - port = pdev->resource[1].start; - fm_port = pdev->resource[2].start; + if (pid->driver_data != 0x0924) + port = pnp_port_start(pdev, 1); + fm_port = pnp_port_start(pdev, 2); #endif /* OPTi93X */ - irq = pdev->irq_resource[0].start; - dma1 = pdev->dma_resource[0].start; + irq = pnp_irq(pdev, 0); + dma1 = pnp_dma(pdev, 0); #if defined(CS4231) || defined(OPTi93X) - dma2 = pdev->dma_resource[1].start; + dma2 = pnp_dma(pdev, 1); #endif /* CS4231 || OPTi93X */ pdev = chip->devmpu; - if (pdev == NULL || pdev->prepare(pdev) < 0) { - mpu_port = -1; - chip->devmpu = NULL; - return pid->card_device; - } - - if (mpu_port != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], mpu_port, 2); - if (mpu_irq != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], mpu_irq, 1); + if (pdev) { + pnp_init_resource_table(cfg); - if (pdev->activate(pdev) < 0) { - snd_printk("MPU-401 isapnp configure failure\n"); - mpu_port = -1; - chip->devmpu = NULL; - } else { - mpu_port = pdev->resource[0].start; - mpu_irq = pdev->irq_resource[0].start; + if (mpu_port != SNDRV_AUTO_PORT) + pnp_resource_change(&cfg->port_resource[0], mpu_port, 2); + if (mpu_irq != SNDRV_AUTO_IRQ) + pnp_resource_change(&cfg->irq_resource[0], mpu_irq, 1); + + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "AUDIO the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "AUDIO pnp configure failure\n"); + mpu_port = -1; + chip->devmpu = NULL; + } else { + mpu_port = pnp_port_start(pdev, 0); + mpu_irq = pnp_irq(pdev, 0); + } } - return pid->card_device; + kfree(cfg); + return pid->driver_data; } - -static void snd_card_opti9xx_deactivate(opti9xx_t *chip) -{ - if (chip->dev) - chip->dev->deactivate(chip->dev); - if (chip->devmpu) - chip->devmpu->deactivate(chip->devmpu); -} -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ #if 0 -static int __init snd_card_opti9xx_resources(struct snd_card_opti9xx *chip, - snd_card_t *card) +static int __devinit snd_card_opti9xx_resources(struct snd_card_opti9xx *chip, + snd_card_t *card) { int error, i, pnp = 0; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP pnp = chip->dev != NULL; -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ #ifndef OPTi93X if (chip->chip->hardware == OPTi9XX_HW_82C928) @@ -1914,13 +1896,6 @@ opti9xx_t *chip = (opti9xx_t *)card->private_data; if (chip) { -#ifdef __ISAPNP__ - snd_card_opti9xx_deactivate(chip); -#endif /* __ISAPNP__ */ - if (chip->wss_base != SNDRV_AUTO_PORT) - release_region(chip->wss_base, 4); - if (chip->mpu_port != SNDRV_AUTO_PORT) - release_region(chip->mpu_port, 2); if (chip->res_mc_base) { release_resource(chip->res_mc_base); kfree_nocheck(chip->res_mc_base); @@ -1928,7 +1903,8 @@ } } -static int __init snd_card_opti9xx_probe(void) +static int __devinit snd_card_opti9xx_probe(struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { static long possible_ports[] = {0x530, 0xe80, 0xf40, 0x604, -1}; static long possible_mpu_ports[] = {0x300, 0x310, 0x320, 0x330, -1}; @@ -1956,36 +1932,28 @@ snd_pcm_t *pcm; snd_rawmidi_t *rmidi; snd_hwdep_t *synth; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP int hw; -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ + if (pcard && !snd_opti9xx_first_hit) + return -EBUSY; if (!(card = snd_card_new(index, id, THIS_MODULE, sizeof(opti9xx_t)))) return -ENOMEM; card->private_free = snd_card_opti9xx_free; chip = (opti9xx_t *)card->private_data; - chip->wss_base = port; - chip->fm_port = fm_port; - chip->mpu_port = mpu_port; - chip->irq = irq; - chip->mpu_irq = mpu_irq; - chip->dma1 = dma1; -#if defined(CS4231) || defined(OPTi93X) - chip->dma2 = dma2; -#endif - -#ifdef __ISAPNP__ - if (isapnp && (hw = snd_card_opti9xx_isapnp(chip)) > 0) { +#ifdef CONFIG_PNP + if (isapnp && (hw = snd_card_opti9xx_pnp(chip, pcard, pid)) > 0) { switch (hw) { - case ISAPNP_DEVICE(0x0924): + case 0x0924: hw = OPTi9XX_HW_82C924; break; - case ISAPNP_DEVICE(0x0925): + case 0x0925: hw = OPTi9XX_HW_82C925; break; - case ISAPNP_DEVICE(0x0931): + case 0x0931: hw = OPTi9XX_HW_82C931; break; default: @@ -2000,32 +1968,42 @@ if (hw <= OPTi9XX_HW_82C930) chip->mc_base -= 0x80; } else { -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ if ((error = snd_card_opti9xx_detect(card, chip)) < 0) { snd_card_free(card); return error; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP } -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL) { snd_card_free(card); return -ENOMEM; } -#ifdef __ISAPNP__ + chip->wss_base = port; + chip->fm_port = fm_port; + chip->mpu_port = mpu_port; + chip->irq = irq; + chip->mpu_irq = mpu_irq; + chip->dma1 = dma1; +#if defined(CS4231) || defined(OPTi93X) + chip->dma2 = dma2; +#endif + +#ifdef CONFIG_PNP if (!isapnp) { #endif if (chip->wss_base == SNDRV_AUTO_PORT) { - if ((chip->wss_base = snd_legacy_find_free_ioport(possible_ports, 4)) == SNDRV_AUTO_PORT) { + if ((chip->wss_base = snd_legacy_find_free_ioport(possible_ports, 4)) < 0) { snd_card_free(card); snd_printk("unable to find a free WSS port\n"); return -EBUSY; } } if (chip->mpu_port == SNDRV_AUTO_PORT) { - if ((chip->mpu_port = snd_legacy_find_free_ioport(possible_mpu_ports, 2)) == SNDRV_AUTO_PORT) { + if ((chip->mpu_port = snd_legacy_find_free_ioport(possible_mpu_ports, 2)) < 0) { snd_card_free(card); snd_printk("unable to find a free MPU401 port\n"); return -EBUSY; @@ -2062,7 +2040,7 @@ } #endif -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP } #endif @@ -2131,14 +2109,35 @@ snd_printk("no MPU-401 device at 0x%lx?\n", chip->mpu_port); if (chip->fm_port > 0) { - opl3_t *opl3; - if (snd_opl3_create(card, - chip->fm_port, - chip->fm_port + 2, - OPL3_HW_AUTO, 0, &opl3) < 0) { + opl3_t *opl3 = NULL; +#ifdef USE_OPL4 +#ifndef OPTi93X + if (chip->hardware == OPTi9XX_HW_82C928 || + chip->hardware == OPTi9XX_HW_82C929 || + chip->hardware == OPTi9XX_HW_82C924) { + opl4_t *opl4; + /* assume we have an OPL4 */ + snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(2), + 0x20, 0x20); + if (snd_opl4_create(card, + chip->fm_port, + chip->fm_port - 8, + 2, &opl3, &opl4) < 0) { + /* no luck, use OPL3 instead */ + snd_opti9xx_write_mask(chip, OPTi9XX_MC_REG(2), + 0x00, 0x20); + } + } +#endif /* !OPTi93X */ +#endif + if (!opl3 && snd_opl3_create(card, + chip->fm_port, + chip->fm_port + 2, + OPL3_HW_AUTO, 0, &opl3) < 0) { snd_printk("no OPL device at 0x%lx-0x%lx\n", - chip->fm_port, chip->fm_port + 4 - 1); - } else { + chip->fm_port, chip->fm_port + 4 - 1); + } + if (opl3) { if ((error = snd_opl3_timer_new(opl3, #ifdef CS4231 1, 2)) < 0) { @@ -2170,15 +2169,39 @@ snd_card_free(card); return error; } - snd_opti9xx_card = card; + snd_opti9xx_first_hit = 0; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_opti9xx_legacy = card; return 0; } +#ifdef CONFIG_PNP +static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); + snd_opti9xx_first_hit = 0; +} + +static struct pnp_card_driver opti9xx_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "opti9xx", + .id_table = snd_opti9xx_pnpids, + .probe = snd_card_opti9xx_probe, + .remove = __devexit_p(snd_opti9xx_pnp_remove), +}; +#endif + static int __init alsa_card_opti9xx_init(void) { - int error; + int cards, error; - if ((error = snd_card_opti9xx_probe())) { + cards = pnp_register_card_driver(&opti9xx_pnpc_driver); + if (cards == 0 && (error = snd_card_opti9xx_probe(NULL, NULL)) < 0) { #ifdef MODULE #ifdef OPTi93X printk(KERN_ERR "no OPTi 82C93x soundcard found\n"); @@ -2193,8 +2216,11 @@ static void __exit alsa_card_opti9xx_exit(void) { - if (snd_opti9xx_card) - snd_card_free(snd_opti9xx_card); +#ifdef CONFIG_PNP + pnp_unregister_card_driver(&opti9xx_pnpc_driver); +#endif + if (snd_opti9xx_legacy) + snd_card_free(snd_opti9xx_legacy); } module_init(alsa_card_opti9xx_init) @@ -2227,7 +2253,7 @@ get_option(&str,&dma2) == 2 #endif ); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (pnp != INT_MAX) isapnp = pnp; #endif diff -Nru a/sound/isa/sb/es968.c b/sound/isa/sb/es968.c --- a/sound/isa/sb/es968.c Sat Apr 12 14:44:08 2003 +++ b/sound/isa/sb/es968.c Sat Apr 12 14:44:08 2003 @@ -90,7 +90,7 @@ } } -static int __devinit snd_card_es968_isapnp(int dev, struct snd_card_es968 *acard, +static int __devinit snd_card_es968_pnp(int dev, struct snd_card_es968 *acard, struct pnp_card_link *card, const struct pnp_card_device_id *id) { @@ -117,10 +117,10 @@ if (irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) { - printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); + snd_printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); return err; } port[dev] = pnp_port_start(pdev, 0); @@ -144,7 +144,7 @@ sizeof(struct snd_card_es968))) == NULL) return -ENOMEM; acard = (struct snd_card_es968 *)card->private_data; - if ((error = snd_card_es968_isapnp(dev, acard, pcard, pid))) { + if ((error = snd_card_es968_pnp(dev, acard, pcard, pid))) { snd_card_free(card); return error; } @@ -223,7 +223,12 @@ static int __init alsa_card_es968_init(void) { - return (pnp_register_card_driver(&es968_pnpc_driver) ? 0 : -ENODEV); + int res = pnp_register_card_driver(&es968_pnpc_driver); +#ifdef MODULE + if (res == 0) + snd_printk(KERN_ERR "no ES968 based soundcards found\n"); +#endif + return res < 0 ? res : 0; } static void __exit alsa_card_es968_exit(void) diff -Nru a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c --- a/sound/isa/sb/sb16.c Sat Apr 12 14:44:09 2003 +++ b/sound/isa/sb/sb16.c Sat Apr 12 14:44:09 2003 @@ -103,9 +103,9 @@ MODULE_PARM_DESC(enable, "Enable SoundBlaster 16 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); #ifdef CONFIG_PNP -MODULE_PARM(pnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); -MODULE_PARM_DESC(pnp, "PnP detection for specified soundcard."); -MODULE_PARM_SYNTAX(pnp, SNDRV_ISAPNP_DESC); +MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); +MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); +MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); #endif MODULE_PARM(port, "1-" __MODULE_STRING(SNDRV_CARDS) "l"); MODULE_PARM_DESC(port, "Port # for SB16 driver."); @@ -261,7 +261,7 @@ const struct pnp_card_device_id *id) { struct pnp_dev *pdev; - struct pnp_resource_table * cfg = kmalloc(GFP_ATOMIC, sizeof(struct pnp_resource_table)); + struct pnp_resource_table * cfg = kmalloc(sizeof(struct pnp_resource_table), GFP_KERNEL); int err; if (!cfg) @@ -293,11 +293,11 @@ pnp_resource_change(&cfg->dma_resource[1], dma16[dev], 1); if (irq[dev] != SNDRV_AUTO_IRQ) pnp_resource_change(&cfg->irq_resource[0], irq[dev], 1); - if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR PFX "AUDIO the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) { - printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); + snd_printk(KERN_ERR PFX "AUDIO pnp configure failure\n"); kfree(cfg); return err; } @@ -325,18 +325,18 @@ pnp_resource_change(&cfg->port_resource[2], awe_port[dev] + 0x800, 4); } if ((pnp_manual_config_dev(pdev, cfg, 0)) < 0) - printk(KERN_ERR PFX "WaveTable the requested resources are invalid, using auto config\n"); + snd_printk(KERN_ERR PFX "WaveTable the requested resources are invalid, using auto config\n"); err = pnp_activate_dev(pdev); if (err < 0) { goto __wt_error; } awe_port[dev] = pnp_port_start(pdev, 0); - snd_printdd("pnp SB16: wavetable port=0x%lx\n", pdev->resource[0].start); + snd_printdd("pnp SB16: wavetable port=0x%lx\n", pnp_port_start(pdev, 0)); } else { __wt_error: if (pdev) { pnp_release_card_device(pdev); - printk(KERN_ERR PFX "WaveTable pnp configure failure\n"); + snd_printk(KERN_ERR PFX "WaveTable pnp configure failure\n"); } acard->devwt = NULL; awe_port[dev] = -1; @@ -386,21 +386,21 @@ if (xirq == SNDRV_AUTO_IRQ) { if ((xirq = snd_legacy_find_free_irq(possible_irqs)) < 0) { snd_card_free(card); - printk(KERN_ERR PFX "unable to find a free IRQ\n"); + snd_printk(KERN_ERR PFX "unable to find a free IRQ\n"); return -EBUSY; } } if (xdma8 == SNDRV_AUTO_DMA) { if ((xdma8 = snd_legacy_find_free_dma(possible_dmas8)) < 0) { snd_card_free(card); - printk(KERN_ERR PFX "unable to find a free 8-bit DMA\n"); + snd_printk(KERN_ERR PFX "unable to find a free 8-bit DMA\n"); return -EBUSY; } } if (xdma16 == SNDRV_AUTO_DMA) { if ((xdma16 = snd_legacy_find_free_dma(possible_dmas16)) < 0) { snd_card_free(card); - printk(KERN_ERR PFX "unable to find a free 16-bit DMA\n"); + snd_printk(KERN_ERR PFX "unable to find a free 16-bit DMA\n"); return -EBUSY; } } @@ -460,7 +460,7 @@ if (snd_opl3_create(card, fm_port[dev], fm_port[dev] + 2, OPL3_HW_OPL3, fm_port[dev] == port[dev], &opl3) < 0) { - printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n", + snd_printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n", fm_port[dev], fm_port[dev] + 2); } else { #ifdef SNDRV_SBAWE_EMU8000 @@ -488,7 +488,7 @@ chip->csp = xcsp->private_data; chip->hardware = SB_HW_16CSP; } else { - printk(KERN_INFO PFX "warning - CSP chip not detected on soundcard #%i\n", dev + 1); + snd_printk(KERN_INFO PFX "warning - CSP chip not detected on soundcard #%i\n", dev + 1); } } #endif @@ -496,7 +496,7 @@ if (awe_port[dev] > 0) { if (snd_emu8000_new(card, 1, awe_port[dev], seq_ports[dev], NULL) < 0) { - printk(KERN_ERR PFX "fatal error - EMU-8000 synthesizer not detected at 0x%lx\n", awe_port[dev]); + snd_printk(KERN_ERR PFX "fatal error - EMU-8000 synthesizer not detected at 0x%lx\n", awe_port[dev]); snd_card_free(card); return -ENXIO; } @@ -578,8 +578,6 @@ return -ENODEV; } -#endif - static void __devexit snd_sb16_pnp_remove(struct pnp_card_link * pcard) { snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); @@ -596,6 +594,8 @@ .remove = __devexit_p(snd_sb16_pnp_remove), }; +#endif /* CONFIG_PNP */ + static int __init alsa_card_sb16_init(void) { int dev, cards = 0; @@ -614,7 +614,7 @@ continue; } #ifdef MODULE - printk(KERN_ERR "Sound Blaster 16+ soundcard #%i not found at 0x%lx or device busy\n", dev, port[dev]); + snd_printk(KERN_ERR "Sound Blaster 16+ soundcard #%i not found at 0x%lx or device busy\n", dev, port[dev]); #endif } /* legacy auto configured cards */ @@ -626,11 +626,11 @@ if (!cards) { #ifdef MODULE - printk(KERN_ERR "Sound Blaster 16 soundcard not found or device busy\n"); + snd_printk(KERN_ERR "Sound Blaster 16 soundcard not found or device busy\n"); #ifdef SNDRV_SBAWE_EMU8000 - printk(KERN_ERR "In case, if you have non-AWE card, try snd-sb16 module\n"); + snd_printk(KERN_ERR "In case, if you have non-AWE card, try snd-sb16 module\n"); #else - printk(KERN_ERR "In case, if you have AWE card, try snd-sbawe module\n"); + snd_printk(KERN_ERR "In case, if you have AWE card, try snd-sbawe module\n"); #endif #endif return -ENODEV; @@ -655,7 +655,7 @@ #ifndef MODULE -/* format is: snd-sb16=enable,index,id,pnp, +/* format is: snd-sb16=enable,index,id,isapnp, port,mpu_port,fm_port, irq,dma8,dma16, mic_agc,csp, diff -Nru a/sound/isa/sb/sb8.c b/sound/isa/sb/sb8.c --- a/sound/isa/sb/sb8.c Sat Apr 12 14:44:08 2003 +++ b/sound/isa/sb/sb8.c Sat Apr 12 14:44:08 2003 @@ -143,13 +143,13 @@ if ((err = snd_opl3_create(card, chip->port + 8, 0, OPL3_HW_AUTO, 1, &opl3)) < 0) { - printk(KERN_ERR "sb8: no OPL device at 0x%lx\n", chip->port + 8); + snd_printk(KERN_ERR "sb8: no OPL device at 0x%lx\n", chip->port + 8); } } else { if ((err = snd_opl3_create(card, chip->port, chip->port + 2, OPL3_HW_AUTO, 1, &opl3)) < 0) { - printk(KERN_ERR "sb8: no OPL device at 0x%lx-0x%lx\n", + snd_printk(KERN_ERR "sb8: no OPL device at 0x%lx-0x%lx\n", chip->port, chip->port + 2); } } @@ -210,7 +210,7 @@ cards += snd_legacy_auto_probe(possible_ports, snd_card_sb8_legacy_auto_probe); if (!cards) { #ifdef MODULE - printk(KERN_ERR "Sound Blaster soundcard not found or device busy\n"); + snd_printk(KERN_ERR "Sound Blaster soundcard not found or device busy\n"); #endif return -ENODEV; } diff -Nru a/sound/isa/sgalaxy.c b/sound/isa/sgalaxy.c --- a/sound/isa/sgalaxy.c Sat Apr 12 14:44:10 2003 +++ b/sound/isa/sgalaxy.c Sat Apr 12 14:44:10 2003 @@ -306,7 +306,7 @@ } if (!cards) { #ifdef MODULE - printk(KERN_ERR "Sound Galaxy soundcard not found or device busy\n"); + snd_printk(KERN_ERR "Sound Galaxy soundcard not found or device busy\n"); #endif return -ENODEV; } diff -Nru a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c --- a/sound/isa/wavefront/wavefront.c Sat Apr 12 14:44:09 2003 +++ b/sound/isa/wavefront/wavefront.c Sat Apr 12 14:44:09 2003 @@ -23,11 +23,7 @@ #include #include #include -#ifndef LINUX_ISAPNP_H -#include -#define isapnp_card pci_bus -#define isapnp_dev pci_dev -#endif +#include #include #define SNDRV_GET_ID #include @@ -66,7 +62,7 @@ MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(enable, "Enable WaveFront soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP MODULE_PARM(isapnp, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(isapnp, "ISA PnP detection for WaveFront soundcards."); MODULE_PARM_SYNTAX(isapnp, SNDRV_ISAPNP_DESC); @@ -102,48 +98,38 @@ MODULE_PARM_DESC(use_cs4232_midi, "Use CS4232 MPU-401 interface (inaccessibly located inside your computer)"); MODULE_PARM_SYNTAX(use_cs4232_midi, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -static snd_card_t *snd_wavefront_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; - -#ifdef __ISAPNP__ +static snd_card_t *snd_wavefront_legacy[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static struct isapnp_card *snd_wavefront_isapnp_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; -static const struct isapnp_card_id *snd_wavefront_isapnp_id[SNDRV_CARDS] = SNDRV_DEFAULT_PTR; +#ifdef CONFIG_PNP -static struct isapnp_card_id snd_wavefront_pnpids[] __devinitdata = { - { - ISAPNP_CARD_ID('C','S','C',0x7532), /* Tropez */ - .devs = { ISAPNP_DEVICE_ID('C','S','C',0x0000), /* WSS */ - ISAPNP_DEVICE_ID('C','S','C',0x0010), /* CTRL */ - ISAPNP_DEVICE_ID('P','n','P',0xb006), /* MPU */ - ISAPNP_DEVICE_ID('C','S','C',000004), }, /* SYNTH */ - }, - { - ISAPNP_CARD_ID('C','S','C',0x7632), /* Tropez+ */ - .devs = { ISAPNP_DEVICE_ID('C','S','C',0x0000), /* WSS */ - ISAPNP_DEVICE_ID('C','S','C',0x0010), /* CTRL */ - ISAPNP_DEVICE_ID('P','n','P',0xb006), /* MPU */ - ISAPNP_DEVICE_ID('C','S','C',000004), }, /* SYNTH */ - }, - { ISAPNP_CARD_END, } +static struct pnp_card_device_id snd_wavefront_pnpids[] __devinitdata = { + /* Tropez */ + { .id = "CSC7532", .devs = { { "CSC0000" }, { "CSC0010" }, { "PnPb006" }, { "CSC0004" } } }, + /* Tropez+ */ + { .id = "CSC7632", .devs = { { "CSC0000" }, { "CSC0010" }, { "PnPb006" }, { "CSC0004" } } }, + { .id = "" } }; -ISAPNP_CARD_TABLE(snd_wavefront_pnpids); +MODULE_DEVICE_TABLE(pnp_card, snd_wavefront_pnpids); -static int __init -snd_wavefront_isapnp (int dev, snd_wavefront_card_t *acard) +static int __devinit +snd_wavefront_pnp (int dev, snd_wavefront_card_t *acard, struct pnp_card_link *card, + const struct pnp_card_device_id *id) { - const struct isapnp_card_id *id = snd_wavefront_isapnp_id[dev]; - struct isapnp_card *card = snd_wavefront_isapnp_cards[dev]; - struct isapnp_dev *pdev; - int tmp; + struct pnp_dev *pdev; + struct pnp_resource_table *cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); + int err; + + if (!cfg) + return -ENOMEM; /* Check for each logical device. */ /* CS4232 chip (aka "windows sound system") is logical device 0 */ - acard->wss = isapnp_find_dev(card, id->devs[0].vendor, id->devs[0].function, NULL); - if (acard->wss->active) { - acard->wss = NULL; + acard->wss = pnp_request_card_device(card, id->devs[0].id, NULL); + if (acard->wss == NULL) { + kfree(cfg); return -EBUSY; } @@ -159,18 +145,18 @@ */ if (use_cs4232_midi[dev]) { - acard->mpu = isapnp_find_dev(card, id->devs[2].vendor, id->devs[2].function, NULL); - if (acard->mpu->active) { - acard->wss = acard->synth = acard->mpu = NULL; + acard->mpu = pnp_request_card_device(card, id->devs[2].id, NULL); + if (acard->mpu == NULL) { + kfree(cfg); return -EBUSY; } } /* The ICS2115 synth is logical device 4 */ - acard->synth = isapnp_find_dev(card, id->devs[3].vendor, id->devs[3].function, NULL); - if (acard->synth->active) { - acard->wss = acard->synth = NULL; + acard->synth = pnp_request_card_device(card, id->devs[3].id, NULL); + if (acard->synth == NULL) { + kfree(cfg); return -EBUSY; } @@ -178,15 +164,7 @@ pdev = acard->wss; - if ((tmp = pdev->prepare (pdev)) < 0) { - if (tmp == -EBUSY) { - snd_printk ("ISA PnP configuration appears to have " - "been done. Restart the isapnp module.\n"); - return 0; - } - snd_printk ("isapnp WSS preparation failed\n"); - return -EAGAIN; - } + pnp_init_resource_table(cfg); /* An interesting note from the Tropez+ FAQ: @@ -201,56 +179,55 @@ */ if (cs4232_pcm_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], cs4232_pcm_port[dev], 4); if (fm_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[1], fm_port[dev], 4); + pnp_resource_change(&cfg->port_resource[1], fm_port[dev], 4); if (dma1[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[0], dma1[dev], 1); + pnp_resource_change(&cfg->dma_resource[0], dma1[dev], 1); if (dma2[dev] != SNDRV_AUTO_DMA) - isapnp_resource_change(&pdev->dma_resource[1], dma2[dev], 1); + pnp_resource_change(&cfg->dma_resource[1], dma2[dev], 1); if (cs4232_pcm_irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->irq_resource[0], cs4232_pcm_irq[dev], 1); + pnp_resource_change(&cfg->irq_resource[0], cs4232_pcm_irq[dev], 1); - if (pdev->activate(pdev)<0) { - snd_printk ("isapnp WSS activation failed\n"); - return -EBUSY; + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "PnP WSS the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "PnP WSS pnp configure failure\n"); + kfree(cfg); + return err; } - cs4232_pcm_port[dev] = pdev->resource[0].start; - fm_port[dev] = pdev->resource[1].start; - dma1[dev] = pdev->dma_resource[0].start; - dma2[dev] = pdev->dma_resource[1].start; - cs4232_pcm_irq[dev] = pdev->irq_resource[0].start; + cs4232_pcm_port[dev] = pnp_port_start(pdev, 0); + fm_port[dev] = pnp_port_start(pdev, 1); + dma1[dev] = pnp_dma(pdev, 0); + dma2[dev] = pnp_dma(pdev, 1); + cs4232_pcm_irq[dev] = pnp_irq(pdev, 0); /* Synth initialization */ pdev = acard->synth; - if ((tmp = pdev->prepare(pdev))<0) { - if (tmp == -EBUSY) { - snd_printk ("ISA PnP configuration appears to have " - "been done. Restart the isapnp module.\n"); - } - acard->wss->deactivate(acard->wss); - snd_printk ("ICS2115 synth preparation failed\n"); - return -EAGAIN; - } + pnp_init_resource_table(cfg); + if (ics2115_port[dev] != SNDRV_AUTO_PORT) { - isapnp_resource_change(&pdev->resource[0], ics2115_port[dev], 16); + pnp_resource_change(&cfg->port_resource[0], ics2115_port[dev], 16); } if (ics2115_port[dev] != SNDRV_AUTO_IRQ) { - isapnp_resource_change(&pdev->irq_resource[0], ics2115_irq[dev], 1); + pnp_resource_change(&cfg->irq_resource[0], ics2115_irq[dev], 1); } - if (pdev->activate(pdev)<0) { - snd_printk("isapnp activation for ICS2115 failed\n"); - acard->wss->deactivate(acard->wss); - return -EBUSY; + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "PnP ICS2115 the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "PnP ICS2115 pnp configure failure\n"); + kfree(cfg); + return err; } - ics2115_port[dev] = pdev->resource[0].start; - ics2115_irq[dev] = pdev->irq_resource[0].start; + ics2115_port[dev] = pnp_port_start(pdev, 0); + ics2115_irq[dev] = pnp_irq(pdev, 0); /* CS4232 MPU initialization. Configure this only if explicitly requested, since its physically inaccessible and @@ -261,25 +238,22 @@ pdev = acard->mpu; - if (pdev->prepare(pdev)<0) { - acard->wss->deactivate(acard->wss); - if (acard->synth) - acard->synth->deactivate(acard->synth); - snd_printk ("CS4232 MPU preparation failed\n"); - return -EAGAIN; - } + pnp_init_resource_table(cfg); if (cs4232_mpu_port[dev] != SNDRV_AUTO_PORT) - isapnp_resource_change(&pdev->resource[0], cs4232_mpu_port[dev], 2); + pnp_resource_change(&cfg->port_resource[0], cs4232_mpu_port[dev], 2); if (cs4232_mpu_irq[dev] != SNDRV_AUTO_IRQ) - isapnp_resource_change(&pdev->resource[0], cs4232_mpu_irq[dev], 1); + pnp_resource_change(&cfg->port_resource[0], cs4232_mpu_irq[dev], 1); - if (pdev->activate(pdev)<0) { - snd_printk("isapnp CS4232 MPU activation failed\n"); + if (pnp_manual_config_dev(pdev, cfg, 0) < 0) + snd_printk(KERN_ERR "PnP MPU401 the requested resources are invalid, using auto config\n"); + err = pnp_activate_dev(pdev); + if (err < 0) { + snd_printk(KERN_ERR "PnP MPU401 pnp configure failure\n"); cs4232_mpu_port[dev] = SNDRV_AUTO_PORT; } else { - cs4232_mpu_port[dev] = pdev->resource[0].start; - cs4232_mpu_irq[dev] = pdev->irq_resource[0].start; + cs4232_mpu_port[dev] = pnp_port_start(pdev, 0); + cs4232_mpu_irq[dev] = pnp_irq(pdev, 0); } snd_printk ("CS4232 MPU: port=0x%lx, irq=%i\n", @@ -296,32 +270,11 @@ ics2115_port[dev], ics2115_irq[dev]); + kfree(cfg); return 0; } -static void -snd_wavefront_deactivate (snd_wavefront_card_t *acard) -{ - snd_printk ("deactivating PnP devices\n"); - if (acard->wss) { - acard->wss->deactivate(acard->wss); - acard->wss = NULL; - } - if (acard->ctrl) { - acard->ctrl->deactivate(acard->ctrl); - acard->ctrl = NULL; - } - if (acard->mpu) { - acard->mpu->deactivate(acard->mpu); - acard->mpu = NULL; - } - if (acard->synth) { - acard->synth->deactivate(acard->synth); - acard->synth = NULL; - } -} - -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ static void snd_wavefront_ics2115_interrupt(int irq, void *dev_id, @@ -341,7 +294,7 @@ } } -snd_hwdep_t * __init +snd_hwdep_t * __devinit snd_wavefront_new_synth (snd_card_t *card, int hw_dev, snd_wavefront_card_t *acard) @@ -367,7 +320,7 @@ return wavefront_synth; } -snd_hwdep_t * __init +snd_hwdep_t * __devinit snd_wavefront_new_fx (snd_card_t *card, int hw_dev, snd_wavefront_card_t *acard, @@ -394,7 +347,7 @@ static snd_wavefront_mpu_id internal_id = internal_mpu; static snd_wavefront_mpu_id external_id = external_mpu; -snd_rawmidi_t * __init +snd_rawmidi_t * __devinit snd_wavefront_new_midi (snd_card_t *card, int midi_dev, snd_wavefront_card_t *acard, @@ -441,9 +394,6 @@ snd_wavefront_card_t *acard = (snd_wavefront_card_t *)card->private_data; if (acard) { -#ifdef __ISAPNP__ - snd_wavefront_deactivate(acard); -#endif if (acard->wavefront.res_base != NULL) { release_resource(acard->wavefront.res_base); kfree_nocheck(acard->wavefront.res_base); @@ -453,8 +403,9 @@ } } -static int __init -snd_wavefront_probe (int dev) +static int __devinit +snd_wavefront_probe (int dev, struct pnp_card_link *pcard, + const struct pnp_card_device_id *pid) { snd_card_t *card; snd_wavefront_card_t *acard; @@ -472,7 +423,7 @@ if (ics2115_port[dev] < 0) ics2115_port[dev] = SNDRV_AUTO_PORT; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (!isapnp[dev]) { #endif if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) { @@ -483,7 +434,7 @@ snd_printk("specify ICS2115 port\n"); return -ENODEV; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP } #endif card = snd_card_new (index[dev], @@ -502,15 +453,15 @@ spin_lock_init(&acard->wavefront.midi.virtual); card->private_free = snd_wavefront_free; -#ifdef __ISAPNP__ - if (isapnp[dev] && snd_wavefront_isapnp (dev, acard) < 0) { +#ifdef CONFIG_PNP + if (isapnp[dev] && snd_wavefront_pnp (dev, acard, pcard, pid) < 0) { if (cs4232_pcm_port[dev] == SNDRV_AUTO_PORT) { snd_printk ("isapnp detection failed\n"); snd_card_free (card); return -ENODEV; } } -#endif /* __ISAPNP__ */ +#endif /* CONFIG_PNP */ /* --------- PCM --------------- */ @@ -694,14 +645,17 @@ snd_card_free(card); return err; } - snd_wavefront_cards[dev] = card; + if (pcard) + pnp_set_card_drvdata(pcard, card); + else + snd_wavefront_legacy[dev] = card; return 0; } -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP -static int __init snd_wavefront_isapnp_detect(struct isapnp_card *card, - const struct isapnp_card_id *id) +static int __devinit snd_wavefront_pnp_detect(struct pnp_card_link *card, + const struct pnp_card_device_id *id) { static int dev; int res; @@ -709,9 +663,7 @@ for ( ; dev < SNDRV_CARDS; dev++) { if (!enable[dev] || !isapnp[dev]) continue; - snd_wavefront_isapnp_cards[dev] = card; - snd_wavefront_isapnp_id[dev] = id; - res = snd_wavefront_probe(dev); + res = snd_wavefront_probe(dev, card, id); if (res < 0) return res; dev++; @@ -721,7 +673,23 @@ return -ENODEV; } -#endif /* __ISAPNP__ */ +static void __devexit snd_wavefront_pnp_remove(struct pnp_card_link * pcard) +{ + snd_card_t *card = (snd_card_t *) pnp_get_card_drvdata(pcard); + + snd_card_disconnect(card); + snd_card_free_in_thread(card); +} + +static struct pnp_card_driver wavefront_pnpc_driver = { + .flags = PNP_DRIVER_RES_DISABLE, + .name = "wavefront", + .id_table = snd_wavefront_pnpids, + .probe = snd_wavefront_pnp_detect, + .remove = __devexit_p(snd_wavefront_pnp_remove), +}; + +#endif /* CONFIG_PNP */ static int __init alsa_card_wavefront_init(void) { @@ -730,15 +698,15 @@ for (dev = 0; dev < SNDRV_CARDS; dev++) { if (!enable[dev]) continue; -#ifdef __ISAPNP__ +#ifdef CONFIG_PNP if (isapnp[dev]) continue; #endif - if (snd_wavefront_probe(dev) >= 0) + if (snd_wavefront_probe(dev, NULL, NULL) >= 0) cards++; } -#ifdef __ISAPNP__ - cards += isapnp_probe_cards(snd_wavefront_pnpids, snd_wavefront_isapnp_detect); +#ifdef CONFIG_PNP + cards += pnp_register_card_driver(&wavefront_pnpc_driver); #endif if (!cards) { #ifdef MODULE @@ -753,8 +721,9 @@ { int idx; + pnp_unregister_card_driver(&wavefront_pnpc_driver); for (idx = 0; idx < SNDRV_CARDS; idx++) - snd_card_free(snd_wavefront_cards[idx]); + snd_card_free(snd_wavefront_legacy[idx]); } module_init(alsa_card_wavefront_init) diff -Nru a/sound/oss/ac97_codec.c b/sound/oss/ac97_codec.c --- a/sound/oss/ac97_codec.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/ac97_codec.c Sat Apr 12 14:44:06 2003 @@ -43,7 +43,6 @@ * Isolated from trident.c to support multiple ac97 codec */ #include -#include #include #include #include diff -Nru a/sound/oss/ad1816.c b/sound/oss/ad1816.c --- a/sound/oss/ad1816.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/ad1816.c Sat Apr 12 14:44:09 2003 @@ -518,20 +518,20 @@ static struct audio_driver ad1816_audio_driver = { - owner: THIS_MODULE, - open: ad1816_open, - close: ad1816_close, - output_block: ad1816_output_block, - start_input: ad1816_start_input, - prepare_for_input: ad1816_prepare_for_input, - prepare_for_output: ad1816_prepare_for_output, - halt_io: ad1816_halt, - halt_input: ad1816_halt_input, - halt_output: ad1816_halt_output, - trigger: ad1816_trigger, - set_speed: ad1816_set_speed, - set_bits: ad1816_set_bits, - set_channels: ad1816_set_channels, + .owner = THIS_MODULE, + .open = ad1816_open, + .close = ad1816_close, + .output_block = ad1816_output_block, + .start_input = ad1816_start_input, + .prepare_for_input = ad1816_prepare_for_input, + .prepare_for_output = ad1816_prepare_for_output, + .halt_io = ad1816_halt, + .halt_input = ad1816_halt_input, + .halt_output = ad1816_halt_output, + .trigger = ad1816_trigger, + .set_speed = ad1816_set_speed, + .set_bits = ad1816_set_bits, + .set_channels = ad1816_set_channels, }; @@ -970,10 +970,10 @@ /* Mixer structure */ static struct mixer_operations ad1816_mixer_operations = { - owner: THIS_MODULE, - id: "AD1816", - name: "AD1816 Mixer", - ioctl: ad1816_mixer_ioctl + .owner = THIS_MODULE, + .id = "AD1816", + .name = "AD1816 Mixer", + .ioctl = ad1816_mixer_ioctl }; diff -Nru a/sound/oss/ad1848.c b/sound/oss/ad1848.c --- a/sound/oss/ad1848.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/ad1848.c Sat Apr 12 14:44:08 2003 @@ -943,28 +943,28 @@ static struct audio_driver ad1848_audio_driver = { - owner: THIS_MODULE, - open: ad1848_open, - close: ad1848_close, - output_block: ad1848_output_block, - start_input: ad1848_start_input, - prepare_for_input: ad1848_prepare_for_input, - prepare_for_output: ad1848_prepare_for_output, - halt_io: ad1848_halt, - halt_input: ad1848_halt_input, - halt_output: ad1848_halt_output, - trigger: ad1848_trigger, - set_speed: ad1848_set_speed, - set_bits: ad1848_set_bits, - set_channels: ad1848_set_channels + .owner = THIS_MODULE, + .open = ad1848_open, + .close = ad1848_close, + .output_block = ad1848_output_block, + .start_input = ad1848_start_input, + .prepare_for_input = ad1848_prepare_for_input, + .prepare_for_output = ad1848_prepare_for_output, + .halt_io = ad1848_halt, + .halt_input = ad1848_halt_input, + .halt_output = ad1848_halt_output, + .trigger = ad1848_trigger, + .set_speed = ad1848_set_speed, + .set_bits = ad1848_set_bits, + .set_channels = ad1848_set_channels }; static struct mixer_operations ad1848_mixer_operations = { - owner: THIS_MODULE, - id: "SOUNDPORT", - name: "AD1848/CS4248/CS4231", - ioctl: ad1848_mixer_ioctl + .owner = THIS_MODULE, + .id = "SOUNDPORT", + .name = "AD1848/CS4248/CS4231", + .ioctl = ad1848_mixer_ioctl }; static int ad1848_open(int dev, int mode) diff -Nru a/sound/oss/awe_wave.c b/sound/oss/awe_wave.c --- a/sound/oss/awe_wave.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/awe_wave.c Sat Apr 12 14:44:07 2003 @@ -493,28 +493,28 @@ static struct synth_operations awe_operations = { - owner: THIS_MODULE, - id: "EMU8K", - info: &awe_info, - midi_dev: 0, - synth_type: SYNTH_TYPE_SAMPLE, - synth_subtype: SAMPLE_TYPE_AWE32, - open: awe_open, - close: awe_close, - ioctl: awe_ioctl, - kill_note: awe_kill_note, - start_note: awe_start_note, - set_instr: awe_set_instr_2, - reset: awe_reset, - hw_control: awe_hw_control, - load_patch: awe_load_patch, - aftertouch: awe_aftertouch, - controller: awe_controller, - panning: awe_panning, - volume_method: awe_volume_method, - bender: awe_bender, - alloc_voice: awe_alloc, - setup_voice: awe_setup_voice + .owner = THIS_MODULE, + .id = "EMU8K", + .info = &awe_info, + .midi_dev = 0, + .synth_type = SYNTH_TYPE_SAMPLE, + .synth_subtype = SAMPLE_TYPE_AWE32, + .open = awe_open, + .close = awe_close, + .ioctl = awe_ioctl, + .kill_note = awe_kill_note, + .start_note = awe_start_note, + .set_instr = awe_set_instr_2, + .reset = awe_reset, + .hw_control = awe_hw_control, + .load_patch = awe_load_patch, + .aftertouch = awe_aftertouch, + .controller = awe_controller, + .panning = awe_panning, + .volume_method = awe_volume_method, + .bender = awe_bender, + .alloc_voice = awe_alloc, + .setup_voice = awe_setup_voice }; @@ -4287,10 +4287,10 @@ static int my_mixerdev = -1; static struct mixer_operations awe_mixer_operations = { - owner: THIS_MODULE, - id: "AWE", - name: "AWE32 Equalizer", - ioctl: awe_mixer_ioctl, + .owner = THIS_MODULE, + .id = "AWE", + .name = "AWE32 Equalizer", + .ioctl = awe_mixer_ioctl, }; static void __init attach_mixer(void) @@ -5232,13 +5232,13 @@ static struct midi_operations awe_midi_operations = { - owner: THIS_MODULE, - info: {"AWE Midi Emu", 0, 0, SNDCARD_SB}, - in_info: {0}, - open: awe_midi_open, /*open*/ - close: awe_midi_close, /*close*/ - ioctl: awe_midi_ioctl, /*ioctl*/ - outputc: awe_midi_outputc, /*outputc*/ + .owner = THIS_MODULE, + .info = {"AWE Midi Emu", 0, 0, SNDCARD_SB}, + .in_info = {0}, + .open = awe_midi_open, /*open*/ + .close = awe_midi_close, /*close*/ + .ioctl = awe_midi_ioctl, /*ioctl*/ + .outputc = awe_midi_outputc, /*outputc*/ }; static int my_mididev = -1; diff -Nru a/sound/oss/btaudio.c b/sound/oss/btaudio.c --- a/sound/oss/btaudio.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/btaudio.c Sat Apr 12 14:44:06 2003 @@ -19,7 +19,6 @@ */ -#include #include #include #include @@ -426,11 +425,11 @@ } static struct file_operations btaudio_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - open: btaudio_mixer_open, - release: btaudio_mixer_release, - ioctl: btaudio_mixer_ioctl, + .owner = THIS_MODULE, + .llseek = no_llseek, + .open = btaudio_mixer_open, + .release = btaudio_mixer_release, + .ioctl = btaudio_mixer_ioctl, }; /* -------------------------------------------------------------- */ @@ -791,25 +790,25 @@ } static struct file_operations btaudio_digital_dsp_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - open: btaudio_dsp_open_digital, - release: btaudio_dsp_release, - read: btaudio_dsp_read, - write: btaudio_dsp_write, - ioctl: btaudio_dsp_ioctl, - poll: btaudio_dsp_poll, + .owner = THIS_MODULE, + .llseek = no_llseek, + .open = btaudio_dsp_open_digital, + .release = btaudio_dsp_release, + .read = btaudio_dsp_read, + .write = btaudio_dsp_write, + .ioctl = btaudio_dsp_ioctl, + .poll = btaudio_dsp_poll, }; static struct file_operations btaudio_analog_dsp_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - open: btaudio_dsp_open_analog, - release: btaudio_dsp_release, - read: btaudio_dsp_read, - write: btaudio_dsp_write, - ioctl: btaudio_dsp_ioctl, - poll: btaudio_dsp_poll, + .owner = THIS_MODULE, + .llseek = no_llseek, + .open = btaudio_dsp_open_analog, + .release = btaudio_dsp_release, + .read = btaudio_dsp_read, + .write = btaudio_dsp_write, + .ioctl = btaudio_dsp_ioctl, + .poll = btaudio_dsp_poll, }; /* -------------------------------------------------------------- */ @@ -882,12 +881,12 @@ static struct cardinfo cards[] = { [0] = { - name: "default", - rate: 32000, + .name = "default", + .rate = 32000, }, [BTA_OSPREY200] = { - name: "Osprey 200", - rate: 44100, + .name = "Osprey 200", + .rate = 44100, }, }; @@ -1062,31 +1061,31 @@ static struct pci_device_id btaudio_pci_tbl[] __devinitdata = { { - vendor: PCI_VENDOR_ID_BROOKTREE, - device: 0x0878, - subvendor: 0x0070, - subdevice: 0xff01, - driver_data: BTA_OSPREY200, + .vendor = PCI_VENDOR_ID_BROOKTREE, + .device = 0x0878, + .subvendor = 0x0070, + .subdevice = 0xff01, + .driver_data = BTA_OSPREY200, },{ - vendor: PCI_VENDOR_ID_BROOKTREE, - device: 0x0878, - subvendor: PCI_ANY_ID, - subdevice: PCI_ANY_ID, + .vendor = PCI_VENDOR_ID_BROOKTREE, + .device = 0x0878, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, },{ - vendor: PCI_VENDOR_ID_BROOKTREE, - device: 0x0878, - subvendor: PCI_ANY_ID, - subdevice: PCI_ANY_ID, + .vendor = PCI_VENDOR_ID_BROOKTREE, + .device = 0x0878, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, },{ /* --- end of list --- */ } }; static struct pci_driver btaudio_pci_driver = { - name: "btaudio", - id_table: btaudio_pci_tbl, - probe: btaudio_probe, - remove: __devexit_p(btaudio_remove), + .name = "btaudio", + .id_table = btaudio_pci_tbl, + .probe = btaudio_probe, + .remove = __devexit_p(btaudio_remove), }; static int btaudio_init_module(void) diff -Nru a/sound/oss/cmpci.c b/sound/oss/cmpci.c --- a/sound/oss/cmpci.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/cmpci.c Sat Apr 12 14:44:08 2003 @@ -87,7 +87,6 @@ */ /*****************************************************************************/ -#include #include #include #include diff -Nru a/sound/oss/cs4232.c b/sound/oss/cs4232.c --- a/sound/oss/cs4232.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/cs4232.c Sat Apr 12 14:44:08 2003 @@ -313,7 +313,7 @@ } } -static void __exit unload_cs4232(struct address_info *hw_config) +static void __devexit unload_cs4232(struct address_info *hw_config) { int base = hw_config->io_base, irq = hw_config->irq; int dma1 = hw_config->dma, dma2 = hw_config->dma2; @@ -428,7 +428,7 @@ return 0; } -static void cs4232_pnp_remove(struct pnp_dev *dev) +static void __devexit cs4232_pnp_remove(struct pnp_dev *dev) { struct address_info *cfg = pnp_get_drvdata(dev); if (cfg) { @@ -441,7 +441,7 @@ .name = "cs4232", .id_table = cs4232_pnp_table, .probe = cs4232_pnp_probe, - .remove = cs4232_pnp_remove, + .remove = __devexit_p(cs4232_pnp_remove), }; static int __init init_cs4232(void) diff -Nru a/sound/oss/cs4281/cs4281m.c b/sound/oss/cs4281/cs4281m.c --- a/sound/oss/cs4281/cs4281m.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/cs4281/cs4281m.c Sat Apr 12 14:44:10 2003 @@ -58,7 +58,6 @@ //#define NOT_CS4281_PM 1 #include -#include #include #include #include diff -Nru a/sound/oss/cs46xx.c b/sound/oss/cs46xx.c --- a/sound/oss/cs46xx.c Sat Apr 12 14:44:05 2003 +++ b/sound/oss/cs46xx.c Sat Apr 12 14:44:06 2003 @@ -77,7 +77,6 @@ #include #include -#include #include #include #include diff -Nru a/sound/oss/dmasound/dmasound_atari.c b/sound/oss/dmasound/dmasound_atari.c --- a/sound/oss/dmasound/dmasound_atari.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/dmasound/dmasound_atari.c Sat Apr 12 14:44:07 2003 @@ -767,39 +767,39 @@ static TRANS transTTNormal = { - ct_ulaw: ata_ct_law, - ct_alaw: ata_ct_law, - ct_s8: ata_ct_s8, - ct_u8: ata_ct_u8, + .ct_ulaw = ata_ct_law, + .ct_alaw = ata_ct_law, + .ct_s8 = ata_ct_s8, + .ct_u8 = ata_ct_u8, }; static TRANS transTTExpanding = { - ct_ulaw: ata_ctx_law, - ct_alaw: ata_ctx_law, - ct_s8: ata_ctx_s8, - ct_u8: ata_ctx_u8, + .ct_ulaw = ata_ctx_law, + .ct_alaw = ata_ctx_law, + .ct_s8 = ata_ctx_s8, + .ct_u8 = ata_ctx_u8, }; static TRANS transFalconNormal = { - ct_ulaw: ata_ct_law, - ct_alaw: ata_ct_law, - ct_s8: ata_ct_s8, - ct_u8: ata_ct_u8, - ct_s16be: ata_ct_s16be, - ct_u16be: ata_ct_u16be, - ct_s16le: ata_ct_s16le, - ct_u16le: ata_ct_u16le + .ct_ulaw = ata_ct_law, + .ct_alaw = ata_ct_law, + .ct_s8 = ata_ct_s8, + .ct_u8 = ata_ct_u8, + .ct_s16be = ata_ct_s16be, + .ct_u16be = ata_ct_u16be, + .ct_s16le = ata_ct_s16le, + .ct_u16le = ata_ct_u16le }; static TRANS transFalconExpanding = { - ct_ulaw: ata_ctx_law, - ct_alaw: ata_ctx_law, - ct_s8: ata_ctx_s8, - ct_u8: ata_ctx_u8, - ct_s16be: ata_ctx_s16be, - ct_u16be: ata_ctx_u16be, - ct_s16le: ata_ctx_s16le, - ct_u16le: ata_ctx_u16le, + .ct_ulaw = ata_ctx_law, + .ct_alaw = ata_ctx_law, + .ct_s8 = ata_ctx_s8, + .ct_u8 = ata_ctx_u8, + .ct_s16be = ata_ctx_s16be, + .ct_u16be = ata_ctx_u16be, + .ct_s16le = ata_ctx_s16le, + .ct_u16le = ata_ctx_u16le, }; @@ -1495,81 +1495,81 @@ /*** Machine definitions *****************************************************/ static SETTINGS def_hard_falcon = { - format: AFMT_S8, - stereo: 0, - size: 8, - speed: 8195 + .format = AFMT_S8, + .stereo = 0, + .size = 8, + .speed = 8195 } ; static SETTINGS def_hard_tt = { - format: AFMT_S8, - stereo: 0, - size: 8, - speed: 12517 + .format = AFMT_S8, + .stereo = 0, + .size = 8, + .speed = 12517 } ; static SETTINGS def_soft = { - format: AFMT_U8, - stereo: 0, - size: 8, - speed: 8000 + .format = AFMT_U8, + .stereo = 0, + .size = 8, + .speed = 8000 } ; static MACHINE machTT = { - name: "Atari", - name2: "TT", - open: AtaOpen, - release: AtaRelease, - dma_alloc: AtaAlloc, - dma_free: AtaFree, - irqinit: AtaIrqInit, + .name = "Atari", + .name2 = "TT", + .open = AtaOpen, + .release = AtaRelease, + .dma_alloc = AtaAlloc, + .dma_free = AtaFree, + .irqinit = AtaIrqInit, #ifdef MODULE - irqcleanup: AtaIrqCleanUp, + .irqcleanup = AtaIrqCleanUp, #endif /* MODULE */ - init: TTInit, - silence: TTSilence, - setFormat: TTSetFormat, - setVolume: TTSetVolume, - setBass: AtaSetBass, - setTreble: AtaSetTreble, - setGain: TTSetGain, - play: AtaPlay, - mixer_init: TTMixerInit, - mixer_ioctl: TTMixerIoctl, - write_sq_setup: AtaWriteSqSetup, - sq_open: AtaSqOpen, - state_info: TTStateInfo, - min_dsp_speed: 6258, - version: ((DMASOUND_ATARI_REVISION<<8) | DMASOUND_ATARI_EDITION), - hardware_afmts: AFMT_S8, /* h'ware-supported formats *only* here */ - capabilities: DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ + .init = TTInit, + .silence = TTSilence, + .setFormat = TTSetFormat, + .setVolume = TTSetVolume, + .setBass = AtaSetBass, + .setTreble = AtaSetTreble, + .setGain = TTSetGain, + .play = AtaPlay, + .mixer_init = TTMixerInit, + .mixer_ioctl = TTMixerIoctl, + .write_sq_setup = AtaWriteSqSetup, + .sq_open = AtaSqOpen, + .state_info = TTStateInfo, + .min_dsp_speed = 6258, + .version = ((DMASOUND_ATARI_REVISION<<8) | DMASOUND_ATARI_EDITION), + .hardware_afmts = AFMT_S8, /* h'ware-supported formats *only* here */ + .capabilities = DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ }; static MACHINE machFalcon = { - name: "Atari", - name2: "FALCON", - dma_alloc: AtaAlloc, - dma_free: AtaFree, - irqinit: AtaIrqInit, + .name = "Atari", + .name2 = "FALCON", + .dma_alloc = AtaAlloc, + .dma_free = AtaFree, + .irqinit = AtaIrqInit, #ifdef MODULE - irqcleanup: AtaIrqCleanUp, + .irqcleanup = AtaIrqCleanUp, #endif /* MODULE */ - init: FalconInit, - silence: FalconSilence, - setFormat: FalconSetFormat, - setVolume: FalconSetVolume, - setBass: AtaSetBass, - setTreble: AtaSetTreble, - play: AtaPlay, - mixer_init: FalconMixerInit, - mixer_ioctl: FalconMixerIoctl, - write_sq_setup: AtaWriteSqSetup, - sq_open: AtaSqOpen, - state_info: FalconStateInfo, - min_dsp_speed: 8195, - version: ((DMASOUND_ATARI_REVISION<<8) | DMASOUND_ATARI_EDITION), - hardware_afmts: (AFMT_S8 | AFMT_S16_BE), /* h'ware-supported formats *only* here */ - capabilities: DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ + .init = FalconInit, + .silence = FalconSilence, + .setFormat = FalconSetFormat, + .setVolume = FalconSetVolume, + .setBass = AtaSetBass, + .setTreble = AtaSetTreble, + .play = AtaPlay, + .mixer_init = FalconMixerInit, + .mixer_ioctl = FalconMixerIoctl, + .write_sq_setup = AtaWriteSqSetup, + .sq_open = AtaSqOpen, + .state_info = FalconStateInfo, + .min_dsp_speed = 8195, + .version = ((DMASOUND_ATARI_REVISION<<8) | DMASOUND_ATARI_EDITION), + .hardware_afmts = (AFMT_S8 | AFMT_S16_BE), /* h'ware-supported formats *only* here */ + .capabilities = DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ }; diff -Nru a/sound/oss/dmasound/dmasound_awacs.c b/sound/oss/dmasound/dmasound_awacs.c --- a/sound/oss/dmasound/dmasound_awacs.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/dmasound/dmasound_awacs.c Sat Apr 12 14:44:07 2003 @@ -2405,45 +2405,45 @@ /*** Machine definitions *****************************************************/ static SETTINGS def_hard = { - format: AFMT_S16_BE, - stereo: 1, - size: 16, - speed: 44100 + .format = AFMT_S16_BE, + .stereo = 1, + .size = 16, + .speed = 44100 } ; static SETTINGS def_soft = { - format: AFMT_S16_BE, - stereo: 1, - size: 16, - speed: 44100 + .format = AFMT_S16_BE, + .stereo = 1, + .size = 16, + .speed = 44100 } ; static MACHINE machPMac = { - name: awacs_name, - name2: "PowerMac Built-in Sound", - open: PMacOpen, - release: PMacRelease, - dma_alloc: PMacAlloc, - dma_free: PMacFree, - irqinit: PMacIrqInit, + .name = awacs_name, + .name2 = "PowerMac Built-in Sound", + .open = PMacOpen, + .release = PMacRelease, + .dma_alloc = PMacAlloc, + .dma_free = PMacFree, + .irqinit = PMacIrqInit, #ifdef MODULE - irqcleanup: PMacIrqCleanup, + .irqcleanup = PMacIrqCleanup, #endif /* MODULE */ - init: PMacInit, - silence: PMacSilence, - setFormat: PMacSetFormat, - setVolume: PMacSetVolume, - play: PMacPlay, - record: NULL, /* default to no record */ - mixer_init: PMacMixerInit, - mixer_ioctl: PMacMixerIoctl, - write_sq_setup: PMacWriteSqSetup, - read_sq_setup: PMacReadSqSetup, - state_info: PMacStateInfo, - abort_read: PMacAbortRead, - min_dsp_speed: 7350, - max_dsp_speed: 44100, - version: ((DMASOUND_AWACS_REVISION<<8) + DMASOUND_AWACS_EDITION) + .init = PMacInit, + .silence = PMacSilence, + .setFormat = PMacSetFormat, + .setVolume = PMacSetVolume, + .play = PMacPlay, + .record = NULL, /* default to no record */ + .mixer_init = PMacMixerInit, + .mixer_ioctl = PMacMixerIoctl, + .write_sq_setup = PMacWriteSqSetup, + .read_sq_setup = PMacReadSqSetup, + .state_info = PMacStateInfo, + .abort_read = PMacAbortRead, + .min_dsp_speed = 7350, + .max_dsp_speed = 44100, + .version = ((DMASOUND_AWACS_REVISION<<8) + DMASOUND_AWACS_EDITION) }; diff -Nru a/sound/oss/dmasound/dmasound_core.c b/sound/oss/dmasound/dmasound_core.c --- a/sound/oss/dmasound/dmasound_core.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/dmasound/dmasound_core.c Sat Apr 12 14:44:06 2003 @@ -367,11 +367,11 @@ static struct file_operations mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: mixer_ioctl, - open: mixer_open, - release: mixer_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = mixer_ioctl, + .open = mixer_open, + .release = mixer_release, }; static void __init mixer_init(void) @@ -1325,15 +1325,15 @@ static struct file_operations sq_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - write: sq_write, - poll: sq_poll, - ioctl: sq_ioctl, - open: sq_open, - release: sq_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .write = sq_write, + .poll = sq_poll, + .ioctl = sq_ioctl, + .open = sq_open, + .release = sq_release, #ifdef HAS_RECORD - read: NULL /* default to no read for compat mode */ + .read = NULL /* default to no read for compat mode */ #endif }; @@ -1548,11 +1548,11 @@ } static struct file_operations state_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: state_read, - open: state_open, - release: state_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = state_read, + .open = state_open, + .release = state_release, }; static int __init state_init(void) diff -Nru a/sound/oss/dmasound/dmasound_paula.c b/sound/oss/dmasound/dmasound_paula.c --- a/sound/oss/dmasound/dmasound_paula.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/dmasound/dmasound_paula.c Sat Apr 12 14:44:06 2003 @@ -298,14 +298,14 @@ static TRANS transAmiga = { - ct_ulaw: ami_ct_ulaw, - ct_alaw: ami_ct_alaw, - ct_s8: ami_ct_s8, - ct_u8: ami_ct_u8, - ct_s16be: ami_ct_s16be, - ct_u16be: ami_ct_u16be, - ct_s16le: ami_ct_s16le, - ct_u16le: ami_ct_u16le, + .ct_ulaw = ami_ct_ulaw, + .ct_alaw = ami_ct_alaw, + .ct_s8 = ami_ct_s8, + .ct_u8 = ami_ct_u8, + .ct_s16be = ami_ct_s16be, + .ct_u16be = ami_ct_u16be, + .ct_s16le = ami_ct_s16le, + .ct_u16le = ami_ct_u16le, }; /*** Low level stuff *********************************************************/ @@ -681,44 +681,44 @@ /*** Machine definitions *****************************************************/ static SETTINGS def_hard = { - format: AFMT_S8, - stereo: 0, - size: 8, - speed: 8000 + .format = AFMT_S8, + .stereo = 0, + .size = 8, + .speed = 8000 } ; static SETTINGS def_soft = { - format: AFMT_U8, - stereo: 0, - size: 8, - speed: 8000 + .format = AFMT_U8, + .stereo = 0, + .size = 8, + .speed = 8000 } ; static MACHINE machAmiga = { - name: "Amiga", - name2: "AMIGA", - open: AmiOpen, - release: AmiRelease, - dma_alloc: AmiAlloc, - dma_free: AmiFree, - irqinit: AmiIrqInit, + .name = "Amiga", + .name2 = "AMIGA", + .open = AmiOpen, + .release = AmiRelease, + .dma_alloc = AmiAlloc, + .dma_free = AmiFree, + .irqinit = AmiIrqInit, #ifdef MODULE - irqcleanup: AmiIrqCleanUp, + .irqcleanup = AmiIrqCleanUp, #endif /* MODULE */ - init: AmiInit, - silence: AmiSilence, - setFormat: AmiSetFormat, - setVolume: AmiSetVolume, - setTreble: AmiSetTreble, - play: AmiPlay, - mixer_init: AmiMixerInit, - mixer_ioctl: AmiMixerIoctl, - write_sq_setup: AmiWriteSqSetup, - state_info: AmiStateInfo, - min_dsp_speed: 8000, - version: ((DMASOUND_PAULA_REVISION<<8) | DMASOUND_PAULA_EDITION), - hardware_afmts: (AFMT_S8 | AFMT_S16_BE), /* h'ware-supported formats *only* here */ - capabilities: DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ + .init = AmiInit, + .silence = AmiSilence, + .setFormat = AmiSetFormat, + .setVolume = AmiSetVolume, + .setTreble = AmiSetTreble, + .play = AmiPlay, + .mixer_init = AmiMixerInit, + .mixer_ioctl = AmiMixerIoctl, + .write_sq_setup = AmiWriteSqSetup, + .state_info = AmiStateInfo, + .min_dsp_speed = 8000, + .version = ((DMASOUND_PAULA_REVISION<<8) | DMASOUND_PAULA_EDITION), + .hardware_afmts = (AFMT_S8 | AFMT_S16_BE), /* h'ware-supported formats *only* here */ + .capabilities = DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ }; diff -Nru a/sound/oss/dmasound/dmasound_q40.c b/sound/oss/dmasound/dmasound_q40.c --- a/sound/oss/dmasound/dmasound_q40.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/dmasound/dmasound_q40.c Sat Apr 12 14:44:06 2003 @@ -584,39 +584,39 @@ /*** Machine definitions *****************************************************/ static SETTINGS def_hard = { - format: AFMT_U8, - stereo: 0, - size: 8, - speed: 10000 + .format = AFMT_U8, + .stereo = 0, + .size = 8, + .speed = 10000 } ; static SETTINGS def_soft = { - format: AFMT_U8, - stereo: 0, - size: 8, - speed: 8000 + .format = AFMT_U8, + .stereo = 0, + .size = 8, + .speed = 8000 } ; static MACHINE machQ40 = { - name: "Q40", - name2: "Q40", - open: Q40Open, - release: Q40Release, - dma_alloc: Q40Alloc, - dma_free: Q40Free, - irqinit: Q40IrqInit, + .name = "Q40", + .name2 = "Q40", + .open = Q40Open, + .release = Q40Release, + .dma_alloc = Q40Alloc, + .dma_free = Q40Free, + .irqinit = Q40IrqInit, #ifdef MODULE - irqcleanup: Q40IrqCleanUp, + .irqcleanup = Q40IrqCleanUp, #endif /* MODULE */ - init: Q40Init, - silence: Q40Silence, - setFormat: Q40SetFormat, - setVolume: Q40SetVolume, - play: Q40Play, - min_dsp_speed: 10000, - version: ((DMASOUND_Q40_REVISION<<8) | DMASOUND_Q40_EDITION), - hardware_afmts: AFMT_U8, /* h'ware-supported formats *only* here */ - capabilities: DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ + .init = Q40Init, + .silence = Q40Silence, + .setFormat = Q40SetFormat, + .setVolume = Q40SetVolume, + .play = Q40Play, + .min_dsp_speed = 10000, + .version = ((DMASOUND_Q40_REVISION<<8) | DMASOUND_Q40_EDITION), + .hardware_afmts = AFMT_U8, /* h'ware-supported formats *only* here */ + .capabilities = DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */ }; diff -Nru a/sound/oss/emu10k1/audio.c b/sound/oss/emu10k1/audio.c --- a/sound/oss/emu10k1/audio.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/emu10k1/audio.c Sat Apr 12 14:44:06 2003 @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -1020,7 +1019,7 @@ } struct vm_operations_struct emu10k1_mm_ops = { - nopage: emu10k1_mm_nopage, + .nopage = emu10k1_mm_nopage, }; static int emu10k1_audio_mmap(struct file *file, struct vm_area_struct *vma) @@ -1558,13 +1557,13 @@ } struct file_operations emu10k1_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: emu10k1_audio_read, - write: emu10k1_audio_write, - poll: emu10k1_audio_poll, - ioctl: emu10k1_audio_ioctl, - mmap: emu10k1_audio_mmap, - open: emu10k1_audio_open, - release: emu10k1_audio_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = emu10k1_audio_read, + .write = emu10k1_audio_write, + .poll = emu10k1_audio_poll, + .ioctl = emu10k1_audio_ioctl, + .mmap = emu10k1_audio_mmap, + .open = emu10k1_audio_open, + .release = emu10k1_audio_release, }; diff -Nru a/sound/oss/emu10k1/main.c b/sound/oss/emu10k1/main.c --- a/sound/oss/emu10k1/main.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/emu10k1/main.c Sat Apr 12 14:44:10 2003 @@ -86,7 +86,6 @@ *********************************************************************/ /* These are only included once per module */ -#include #include #include #include @@ -1144,10 +1143,10 @@ MODULE_LICENSE("GPL"); static struct pci_driver emu10k1_pci_driver = { - name: "emu10k1", - id_table: emu10k1_pci_tbl, - probe: emu10k1_probe, - remove: __devexit_p(emu10k1_remove), + .name = "emu10k1", + .id_table = emu10k1_pci_tbl, + .probe = emu10k1_probe, + .remove = __devexit_p(emu10k1_remove), }; static int __init emu10k1_init_module(void) diff -Nru a/sound/oss/emu10k1/midi.c b/sound/oss/emu10k1/midi.c --- a/sound/oss/emu10k1/midi.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/emu10k1/midi.c Sat Apr 12 14:44:10 2003 @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -465,12 +464,12 @@ /* MIDI file operations */ struct file_operations emu10k1_midi_fops = { - owner: THIS_MODULE, - read: emu10k1_midi_read, - write: emu10k1_midi_write, - poll: emu10k1_midi_poll, - open: emu10k1_midi_open, - release: emu10k1_midi_release, + .owner = THIS_MODULE, + .read = emu10k1_midi_read, + .write = emu10k1_midi_write, + .poll = emu10k1_midi_poll, + .open = emu10k1_midi_open, + .release = emu10k1_midi_release, }; diff -Nru a/sound/oss/emu10k1/mixer.c b/sound/oss/emu10k1/mixer.c --- a/sound/oss/emu10k1/mixer.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/emu10k1/mixer.c Sat Apr 12 14:44:09 2003 @@ -31,7 +31,6 @@ */ #include -#include #include #include @@ -675,9 +674,9 @@ } struct file_operations emu10k1_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: emu10k1_mixer_ioctl, - open: emu10k1_mixer_open, - release: emu10k1_mixer_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = emu10k1_mixer_ioctl, + .open = emu10k1_mixer_open, + .release = emu10k1_mixer_release, }; diff -Nru a/sound/oss/emu10k1/passthrough.c b/sound/oss/emu10k1/passthrough.c --- a/sound/oss/emu10k1/passthrough.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/emu10k1/passthrough.c Sat Apr 12 14:44:07 2003 @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include diff -Nru a/sound/oss/es1370.c b/sound/oss/es1370.c --- a/sound/oss/es1370.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/es1370.c Sat Apr 12 14:44:10 2003 @@ -140,7 +140,6 @@ /*****************************************************************************/ -#include #include #include #include @@ -1054,11 +1053,11 @@ } static /*const*/ struct file_operations es1370_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: es1370_ioctl_mixdev, - open: es1370_open_mixdev, - release: es1370_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = es1370_ioctl_mixdev, + .open = es1370_open_mixdev, + .release = es1370_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -1816,15 +1815,15 @@ } static /*const*/ struct file_operations es1370_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: es1370_read, - write: es1370_write, - poll: es1370_poll, - ioctl: es1370_ioctl, - mmap: es1370_mmap, - open: es1370_open, - release: es1370_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = es1370_read, + .write = es1370_write, + .poll = es1370_poll, + .ioctl = es1370_ioctl, + .mmap = es1370_mmap, + .open = es1370_open, + .release = es1370_release, }; /* --------------------------------------------------------------------- */ @@ -2240,14 +2239,14 @@ } static /*const*/ struct file_operations es1370_dac_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - write: es1370_write_dac, - poll: es1370_poll_dac, - ioctl: es1370_ioctl_dac, - mmap: es1370_mmap_dac, - open: es1370_open_dac, - release: es1370_release_dac, + .owner = THIS_MODULE, + .llseek = no_llseek, + .write = es1370_write_dac, + .poll = es1370_poll_dac, + .ioctl = es1370_ioctl_dac, + .mmap = es1370_mmap_dac, + .open = es1370_open_dac, + .release = es1370_release_dac, }; /* --------------------------------------------------------------------- */ @@ -2513,13 +2512,13 @@ } static /*const*/ struct file_operations es1370_midi_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: es1370_midi_read, - write: es1370_midi_write, - poll: es1370_midi_poll, - open: es1370_midi_open, - release: es1370_midi_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = es1370_midi_read, + .write = es1370_midi_write, + .poll = es1370_midi_poll, + .open = es1370_midi_open, + .release = es1370_midi_release, }; /* --------------------------------------------------------------------- */ diff -Nru a/sound/oss/es1371.c b/sound/oss/es1371.c --- a/sound/oss/es1371.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/es1371.c Sat Apr 12 14:44:09 2003 @@ -109,7 +109,6 @@ /*****************************************************************************/ -#include #include #include #include @@ -1243,11 +1242,11 @@ } static /*const*/ struct file_operations es1371_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: es1371_ioctl_mixdev, - open: es1371_open_mixdev, - release: es1371_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = es1371_ioctl_mixdev, + .open = es1371_open_mixdev, + .release = es1371_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -2004,15 +2003,15 @@ } static /*const*/ struct file_operations es1371_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: es1371_read, - write: es1371_write, - poll: es1371_poll, - ioctl: es1371_ioctl, - mmap: es1371_mmap, - open: es1371_open, - release: es1371_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = es1371_read, + .write = es1371_write, + .poll = es1371_poll, + .ioctl = es1371_ioctl, + .mmap = es1371_mmap, + .open = es1371_open, + .release = es1371_release, }; /* --------------------------------------------------------------------- */ @@ -2418,14 +2417,14 @@ } static /*const*/ struct file_operations es1371_dac_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - write: es1371_write_dac, - poll: es1371_poll_dac, - ioctl: es1371_ioctl_dac, - mmap: es1371_mmap_dac, - open: es1371_open_dac, - release: es1371_release_dac, + .owner = THIS_MODULE, + .llseek = no_llseek, + .write = es1371_write_dac, + .poll = es1371_poll_dac, + .ioctl = es1371_ioctl_dac, + .mmap = es1371_mmap_dac, + .open = es1371_open_dac, + .release = es1371_release_dac, }; /* --------------------------------------------------------------------- */ @@ -2690,13 +2689,13 @@ } static /*const*/ struct file_operations es1371_midi_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: es1371_midi_read, - write: es1371_midi_write, - poll: es1371_midi_poll, - open: es1371_midi_open, - release: es1371_midi_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = es1371_midi_read, + .write = es1371_midi_write, + .poll = es1371_midi_poll, + .open = es1371_midi_open, + .release = es1371_midi_release, }; /* --------------------------------------------------------------------- */ diff -Nru a/sound/oss/esssolo1.c b/sound/oss/esssolo1.c --- a/sound/oss/esssolo1.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/esssolo1.c Sat Apr 12 14:44:06 2003 @@ -87,7 +87,6 @@ /*****************************************************************************/ -#include #include #include #include @@ -951,11 +950,11 @@ } static /*const*/ struct file_operations solo1_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: solo1_ioctl_mixdev, - open: solo1_open_mixdev, - release: solo1_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = solo1_ioctl_mixdev, + .open = solo1_open_mixdev, + .release = solo1_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -1650,15 +1649,15 @@ } static /*const*/ struct file_operations solo1_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: solo1_read, - write: solo1_write, - poll: solo1_poll, - ioctl: solo1_ioctl, - mmap: solo1_mmap, - open: solo1_open, - release: solo1_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = solo1_read, + .write = solo1_write, + .poll = solo1_poll, + .ioctl = solo1_ioctl, + .mmap = solo1_mmap, + .open = solo1_open, + .release = solo1_release, }; /* --------------------------------------------------------------------- */ @@ -2001,13 +2000,13 @@ } static /*const*/ struct file_operations solo1_midi_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: solo1_midi_read, - write: solo1_midi_write, - poll: solo1_midi_poll, - open: solo1_midi_open, - release: solo1_midi_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = solo1_midi_read, + .write = solo1_midi_write, + .poll = solo1_midi_poll, + .open = solo1_midi_open, + .release = solo1_midi_release, }; /* --------------------------------------------------------------------- */ @@ -2189,11 +2188,11 @@ } static /*const*/ struct file_operations solo1_dmfm_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: solo1_dmfm_ioctl, - open: solo1_dmfm_open, - release: solo1_dmfm_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = solo1_dmfm_ioctl, + .open = solo1_dmfm_open, + .release = solo1_dmfm_release, }; /* --------------------------------------------------------------------- */ diff -Nru a/sound/oss/gus_midi.c b/sound/oss/gus_midi.c --- a/sound/oss/gus_midi.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/gus_midi.c Sat Apr 12 14:44:10 2003 @@ -26,7 +26,6 @@ static int my_dev; static int output_used = 0; static volatile unsigned char gus_midi_control; -static spinlock_t lock=SPIN_LOCK_UNLOCKED; static void (*midi_input_intr) (int dev, unsigned char data); static unsigned char tmp_queue[256]; @@ -35,6 +34,7 @@ static volatile unsigned char qhead, qtail; extern int gus_base, gus_irq, gus_dma; extern int *gus_osp; +extern spinlock_t gus_lock; static int GUS_MIDI_STATUS(void) { @@ -76,7 +76,7 @@ output_used = 1; - spin_lock_irqsave(&lock, flags); + spin_lock_irqsave(&gus_lock, flags); if (GUS_MIDI_STATUS() & MIDI_XMIT_EMPTY) { @@ -92,7 +92,7 @@ outb((gus_midi_control), u_MidiControl); } - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return ok; } @@ -113,14 +113,14 @@ /* * Drain the local queue first */ - spin_lock_irqsave(&lock, flags); + spin_lock_irqsave(&gus_lock, flags); while (qlen && dump_to_midi(tmp_queue[qhead])) { qlen--; qhead++; } - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); /* * Output the byte if the local queue is empty. @@ -140,13 +140,13 @@ return 0; /* * Local queue full */ - spin_lock_irqsave(&lock, flags); + spin_lock_irqsave(&gus_lock, flags); tmp_queue[qtail] = midi_byte; qlen++; qtail++; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return 1; } @@ -171,14 +171,14 @@ if (!output_used) return 0; - spin_lock_irqsave(&lock, flags); + spin_lock_irqsave(&gus_lock, flags); if (qlen && dump_to_midi(tmp_queue[qhead])) { qlen--; qhead++; } - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return (qlen > 0) || !(GUS_MIDI_STATUS() & MIDI_XMIT_EMPTY); } @@ -188,17 +188,17 @@ static struct midi_operations gus_midi_operations = { - owner: THIS_MODULE, - info: {"Gravis UltraSound Midi", 0, 0, SNDCARD_GUS}, - converter: &std_midi_synth, - in_info: {0}, - open: gus_midi_open, - close: gus_midi_close, - outputc: gus_midi_out, - start_read: gus_midi_start_read, - end_read: gus_midi_end_read, - kick: gus_midi_kick, - buffer_status: gus_midi_buffer_status, + .owner = THIS_MODULE, + .info = {"Gravis UltraSound Midi", 0, 0, SNDCARD_GUS}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = gus_midi_open, + .close = gus_midi_close, + .outputc = gus_midi_out, + .start_read = gus_midi_start_read, + .end_read = gus_midi_end_read, + .kick = gus_midi_kick, + .buffer_status = gus_midi_buffer_status, }; void __init gus_midi_init(struct address_info *hw_config) @@ -224,7 +224,7 @@ volatile unsigned char stat, data; int timeout = 10; - spin_lock(&lock); + spin_lock(&gus_lock); while (timeout-- > 0 && (stat = GUS_MIDI_STATUS()) & (MIDI_RCV_FULL | MIDI_XMIT_EMPTY)) { @@ -252,5 +252,5 @@ } } } - spin_unlock(&lock); + spin_unlock(&gus_lock); } diff -Nru a/sound/oss/gus_wave.c b/sound/oss/gus_wave.c --- a/sound/oss/gus_wave.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/gus_wave.c Sat Apr 12 14:44:06 2003 @@ -139,7 +139,7 @@ static unsigned long pcm_current_buf; static int pcm_current_count; static int pcm_current_intrflag; -static spinlock_t lock=SPIN_LOCK_UNLOCKED; +spinlock_t gus_lock=SPIN_LOCK_UNLOCKED; extern int *gus_osp; @@ -469,7 +469,7 @@ { unsigned long flags; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_volume(0); gus_voice_off(); @@ -478,7 +478,7 @@ gus_write8(0x0d, 0x03); /* Ramping off */ voice_alloc->map[voice] = 0; voice_alloc->alloc_times[voice] = 0; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } @@ -512,10 +512,10 @@ if (voices[voice].mode & WAVE_SUSTAIN_ON && voices[voice].env_phase == 2) { - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_rampoff(); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return; /* * Sustain phase begins. Continue envelope after receiving note off. @@ -533,7 +533,7 @@ vol = voices[voice].initial_volume * voices[voice].env_offset[phase] / 255; rate = voices[voice].env_rate[phase]; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_volume(prev_vol); @@ -545,7 +545,7 @@ if (((vol - prev_vol) / 64) == 0) /* No significant volume change */ { - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); step_envelope(voice); /* Continue the envelope on the next step */ return; } @@ -564,7 +564,7 @@ gus_rampon(0x60); /* Decreasing volume, with IRQ */ } voices[voice].current_volume = vol; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static void init_envelope(int voice) @@ -595,14 +595,14 @@ int instr_no = sample_map[voice], is16bits; long int flags; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); if (instr_no < 0 || instr_no > MAX_SAMPLE) { gus_write8(0x00, 0x03); /* Hard stop */ voice_alloc->map[voice] = 0; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return; } is16bits = (samples[instr_no].mode & WAVE_16_BITS) ? 1 : 0; /* 8 or 16 bits */ @@ -610,7 +610,7 @@ if (voices[voice].mode & WAVE_ENVELOPES) { start_release(voice); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return; } /* @@ -621,14 +621,14 @@ gus_voice_off(); gus_rampoff(); gus_voice_init(voice); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return; } gus_ramp_range(65, 4030); gus_ramp_rate(2, 4); gus_rampon(0x40 | 0x20); /* Down, once, with IRQ */ voices[voice].volume_irq_mode = VMODE_HALT; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static void gus_reset(void) @@ -660,7 +660,7 @@ 0, 1, 0, 2, 0, 3, 4, 5 }; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_write8(0x4c, 0); /* Reset GF1 */ gus_delay(); gus_delay(); @@ -799,7 +799,7 @@ if (iw_mode) gus_write8(0x19, gus_read8(0x19) | 0x01); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } @@ -1108,16 +1108,16 @@ { unsigned long flags; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); /* voice_alloc->map[voice] = 0xffff; */ if (voices[voice].volume_irq_mode == VMODE_START_NOTE) { voices[voice].kill_pending = 1; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } else { - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); gus_voice_fade(voice); } @@ -1175,7 +1175,7 @@ compute_volume(voice, volume); voices[voice].current_volume = voices[voice].initial_volume; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); /* * CAUTION! Interrupts disabled. Enable them before returning */ @@ -1189,7 +1189,7 @@ { gus_rampoff(); gus_voice_volume(target); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return; } if (ramp_time == FAST_RAMP) @@ -1202,7 +1202,7 @@ { gus_rampoff(); gus_voice_volume(target); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return; } if (target > curr) @@ -1220,7 +1220,7 @@ gus_ramp_range(target, curr); gus_rampon(0x40); /* Ramp down, once, no irq */ } - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static void dynamic_volume_change(int voice) @@ -1228,10 +1228,10 @@ unsigned char status; unsigned long flags; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); status = gus_read8(0x00); /* Get voice status */ - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); if (status & 0x03) return; /* Voice was not running */ @@ -1246,10 +1246,10 @@ * Voice is running and has envelopes. */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); status = gus_read8(0x0d); /* Ramping status */ - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); if (status & 0x03) /* Sustain phase? */ { @@ -1281,10 +1281,10 @@ freq = compute_finetune(voices[voice].orig_freq, value, voices[voice].bender_range, 0); voices[voice].current_freq = freq; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_freq(freq); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } break; @@ -1441,12 +1441,12 @@ ((sample_ptrs[sample] + samples[sample].len) / GUS_BANK_SIZE)) printk(KERN_ERR "GUS: Sample address error\n"); } - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_off(); gus_rampoff(); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); if (voices[voice].mode & WAVE_ENVELOPES) { @@ -1458,7 +1458,7 @@ compute_and_set_volume(voice, volume, 0); } - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); if (samples[sample].mode & WAVE_LOOP_BACK) @@ -1498,7 +1498,7 @@ gus_voice_freq(freq); gus_voice_balance(pan); gus_voice_on(mode); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return 0; } @@ -1515,7 +1515,7 @@ int mode; int ret_val = 0; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); if (note_num == 255) { if (voices[voice].volume_irq_mode == VMODE_START_NOTE) @@ -1541,10 +1541,10 @@ if (voices[voice].sample_pending >= 0) { - spin_unlock_irqrestore(&lock,flags); /* Run temporarily with interrupts enabled */ + spin_unlock_irqrestore(&gus_lock,flags); /* Run temporarily with interrupts enabled */ guswave_set_instr(voices[voice].dev_pending, voice, voices[voice].sample_pending); voices[voice].sample_pending = -1; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); /* Reselect the voice (just to be sure) */ } if ((mode & 0x01) || (int) ((gus_read16(0x09) >> 4) < (unsigned) 2065)) @@ -1564,7 +1564,7 @@ gus_rampon(0x20 | 0x40); /* Ramp down, once, irq */ } } - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); return ret_val; } @@ -1807,7 +1807,7 @@ blk_sz)) return -EFAULT; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_write8(0x41, 0); /* Disable GF1 DMA */ DMAbuf_start_dma(gus_devnum, audio_devs[gus_devnum]->dmap_out->raw_buf_phys, blk_sz, DMA_MODE_WRITE); @@ -1864,7 +1864,7 @@ active_device = GUS_DEV_WAVE; gus_write8(0x41, dma_command); /* Lets go luteet (=bugs) */ - spin_unlock_irqrestore(&lock,flags); /* opens a race */ + spin_unlock_irqrestore(&gus_lock,flags); /* opens a race */ if (!interruptible_sleep_on_timeout(&dram_sleeper, HZ)) printk("GUS: DMA Transfer timed out\n"); } @@ -1905,10 +1905,10 @@ switch (cmd) { case _GUS_NUMVOICES: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_select_max_voices(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICESAMPLE: @@ -1916,18 +1916,18 @@ break; case _GUS_VOICEON: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); p1 &= ~0x20; /* Don't allow interrupts */ gus_voice_on(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICEOFF: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_off(); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICEFADE: @@ -1935,32 +1935,32 @@ break; case _GUS_VOICEMODE: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); p1 &= ~0x20; /* Don't allow interrupts */ gus_voice_mode(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICEBALA: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_balance(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICEFREQ: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_freq(plong); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICEVOL: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_volume(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOICEVOL2: /* Just update the software voice level */ @@ -1970,48 +1970,48 @@ case _GUS_RAMPRANGE: if (voices[voice].mode & WAVE_ENVELOPES) break; /* NO-NO */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_ramp_range(p1, p2); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_RAMPRATE: if (voices[voice].mode & WAVE_ENVELOPES) break; /* NJET-NJET */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_ramp_rate(p1, p2); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_RAMPMODE: if (voices[voice].mode & WAVE_ENVELOPES) break; /* NO-NO */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); p1 &= ~0x20; /* Don't allow interrupts */ gus_ramp_mode(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_RAMPON: if (voices[voice].mode & WAVE_ENVELOPES) break; /* EI-EI */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); p1 &= ~0x20; /* Don't allow interrupts */ gus_rampon(p1); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_RAMPOFF: if (voices[voice].mode & WAVE_ENVELOPES) break; /* NEJ-NEJ */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_rampoff(); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; case _GUS_VOLUME_SCALE: @@ -2020,10 +2020,10 @@ break; case _GUS_VOICE_POS: - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_set_voice_pos(voice, plong); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); break; default: @@ -2214,12 +2214,12 @@ if (pcm_active && pcm_opened) for (voice = 0; voice < gus_audio_channels; voice++) { - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_rampoff(); gus_voice_volume(1530 + (25 * gus_pcm_volume)); gus_ramp_range(65, 1530 + (25 * gus_pcm_volume)); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } } @@ -2267,7 +2267,7 @@ if (chn == 0) ramp_mode[chn] = 0x04; /* Enable rollover bit */ } - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(chn); gus_voice_freq(speed); @@ -2304,17 +2304,17 @@ 0, is16bits); /* Loop end location */ else mode[chn] |= 0x08; /* Enable looping */ - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } for (chn = 0; chn < gus_audio_channels; chn++) { - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(chn); gus_write8(0x0d, ramp_mode[chn]); if (iw_mode) gus_write8(0x15, 0x00); /* Reset voice deactivate bit of SMSI */ gus_voice_on(mode[chn]); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } pcm_active = 1; } @@ -2336,7 +2336,7 @@ unsigned char dma_command; unsigned long address, hold_address; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); count = total_count / gus_audio_channels; @@ -2401,7 +2401,7 @@ active_device = GUS_DEV_PCM_CONTINUE; } - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static void gus_uninterleave8(char *buf, int l) @@ -2463,7 +2463,7 @@ unsigned long flags; unsigned char mode; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); DMAbuf_start_dma(dev, buf, count, DMA_MODE_READ); mode = 0xa0; /* DMA IRQ enabled, invert MSB */ @@ -2475,7 +2475,7 @@ mode |= 0x01; /* DMA enable */ gus_write8(0x49, mode); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static int gus_audio_prepare_for_input(int dev, int bsize, int bcount) @@ -2535,16 +2535,16 @@ static struct audio_driver gus_audio_driver = { - owner: THIS_MODULE, - open: gus_audio_open, - close: gus_audio_close, - output_block: gus_audio_output_block, - start_input: gus_audio_start_input, - ioctl: gus_audio_ioctl, - prepare_for_input: gus_audio_prepare_for_input, - prepare_for_output: gus_audio_prepare_for_output, - halt_io: gus_audio_reset, - local_qlen: gus_local_qlen, + .owner = THIS_MODULE, + .open = gus_audio_open, + .close = gus_audio_close, + .output_block = gus_audio_output_block, + .start_input = gus_audio_start_input, + .ioctl = gus_audio_ioctl, + .prepare_for_input = gus_audio_prepare_for_input, + .prepare_for_output = gus_audio_prepare_for_output, + .halt_io = gus_audio_reset, + .local_qlen = gus_local_qlen, }; static void guswave_setup_voice(int dev, int voice, int chn) @@ -2571,10 +2571,10 @@ freq = compute_finetune(voices[voice].orig_freq, value - 8192, voices[voice].bender_range, 0); voices[voice].current_freq = freq; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); gus_voice_freq(freq); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static int guswave_alloc(int dev, int chn, int note, struct voice_alloc_info *alloc) @@ -2623,28 +2623,28 @@ static struct synth_operations guswave_operations = { - owner: THIS_MODULE, - id: "GUS", - info: &gus_info, - midi_dev: 0, - synth_type: SYNTH_TYPE_SAMPLE, - synth_subtype: SAMPLE_TYPE_GUS, - open: guswave_open, - close: guswave_close, - ioctl: guswave_ioctl, - kill_note: guswave_kill_note, - start_note: guswave_start_note, - set_instr: guswave_set_instr, - reset: guswave_reset, - hw_control: guswave_hw_control, - load_patch: guswave_load_patch, - aftertouch: guswave_aftertouch, - controller: guswave_controller, - panning: guswave_panning, - volume_method: guswave_volume_method, - bender: guswave_bender, - alloc_voice: guswave_alloc, - setup_voice: guswave_setup_voice + .owner = THIS_MODULE, + .id = "GUS", + .info = &gus_info, + .midi_dev = 0, + .synth_type = SYNTH_TYPE_SAMPLE, + .synth_subtype = SAMPLE_TYPE_GUS, + .open = guswave_open, + .close = guswave_close, + .ioctl = guswave_ioctl, + .kill_note = guswave_kill_note, + .start_note = guswave_start_note, + .set_instr = guswave_set_instr, + .reset = guswave_reset, + .hw_control = guswave_hw_control, + .load_patch = guswave_load_patch, + .aftertouch = guswave_aftertouch, + .controller = guswave_controller, + .panning = guswave_panning, + .volume_method = guswave_volume_method, + .bender = guswave_bender, + .alloc_voice = guswave_alloc, + .setup_voice = guswave_setup_voice }; static void set_input_volumes(void) @@ -2655,7 +2655,7 @@ if (have_gus_max) /* Don't disturb GUS MAX */ return; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); /* * Enable channels having vol > 10% @@ -2681,7 +2681,7 @@ mix_image |= mask & 0x07; outb((mix_image), u_Mixer); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } #define MIX_DEVS (SOUND_MASK_MIC|SOUND_MASK_LINE| \ @@ -2815,10 +2815,10 @@ static struct mixer_operations gus_mixer_operations = { - owner: THIS_MODULE, - id: "GUS", - name: "Gravis Ultrasound", - ioctl: gus_default_mixer_ioctl + .owner = THIS_MODULE, + .id = "GUS", + .name = "Gravis Ultrasound", + .ioctl = gus_default_mixer_ioctl }; static int __init gus_default_mixer_init(void) @@ -2890,10 +2890,10 @@ * Versions < 3.6 don't have the digital ASIC. Try to probe it first. */ - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); outb((0x20), gus_base + 0x0f); val = inb(gus_base + 0x0f); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); if (gus_pnp_flag || (val != 0xff && (val & 0x06))) /* Should be 0x02?? */ { @@ -3124,7 +3124,7 @@ unsigned char tmp; int mode, parm; - spin_lock(&lock); + spin_lock(&gus_lock); gus_select_voice(voice); tmp = gus_read8(0x00); @@ -3200,7 +3200,7 @@ default: break; } - spin_unlock(&lock); + spin_unlock(&gus_lock); } static void do_volume_irq(int voice) @@ -3209,7 +3209,7 @@ int mode, parm; unsigned long flags; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&gus_lock,flags); gus_select_voice(voice); tmp = gus_read8(0x0d); @@ -3227,18 +3227,18 @@ case VMODE_HALT: /* Decay phase finished */ if (iw_mode) gus_write8(0x15, 0x02); /* Set voice deactivate bit of SMSI */ - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); gus_voice_init(voice); break; case VMODE_ENVELOPE: gus_rampoff(); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); step_envelope(voice); break; case VMODE_START_NOTE: - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); guswave_start_note2(voices[voice].dev_pending, voice, voices[voice].note_pending, voices[voice].volume_pending); if (voices[voice].kill_pending) @@ -3254,7 +3254,7 @@ break; default: - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } } /* called in irq context */ diff -Nru a/sound/oss/i810_audio.c b/sound/oss/i810_audio.c --- a/sound/oss/i810_audio.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/i810_audio.c Sat Apr 12 14:44:09 2003 @@ -79,7 +79,6 @@ */ #include -#include #include #include #include @@ -2554,15 +2553,15 @@ } static /*const*/ struct file_operations i810_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: i810_read, - write: i810_write, - poll: i810_poll, - ioctl: i810_ioctl, - mmap: i810_mmap, - open: i810_open, - release: i810_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = i810_read, + .write = i810_write, + .poll = i810_poll, + .ioctl = i810_ioctl, + .mmap = i810_mmap, + .open = i810_open, + .release = i810_release, }; /* Write AC97 codec registers */ @@ -2690,10 +2689,10 @@ } static /*const*/ struct file_operations i810_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: i810_ioctl_mixdev, - open: i810_open_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = i810_ioctl_mixdev, + .open = i810_open_mixdev, }; /* AC97 codec initialisation. These small functions exist so we don't @@ -3430,13 +3429,13 @@ #define I810_MODULE_NAME "intel810_audio" static struct pci_driver i810_pci_driver = { - name: I810_MODULE_NAME, - id_table: i810_pci_tbl, - probe: i810_probe, - remove: __devexit_p(i810_remove), + .name = I810_MODULE_NAME, + .id_table = i810_pci_tbl, + .probe = i810_probe, + .remove = __devexit_p(i810_remove), #ifdef CONFIG_PM - suspend: i810_pm_suspend, - resume: i810_pm_resume, + .suspend = i810_pm_suspend, + .resume = i810_pm_resume, #endif /* CONFIG_PM */ }; diff -Nru a/sound/oss/ics2101.c b/sound/oss/ics2101.c --- a/sound/oss/ics2101.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/ics2101.c Sat Apr 12 14:44:06 2003 @@ -29,7 +29,7 @@ extern int *gus_osp; extern int gus_base; -extern spinlock_t lock; +extern spinlock_t gus_lock; static int volumes[ICS_MIXDEVS]; static int left_fix[ICS_MIXDEVS] = {1, 1, 1, 2, 1, 2}; @@ -87,12 +87,12 @@ attn_addr |= 0x03; } - spin_lock_irqsave(&lock, flags); + spin_lock_irqsave(&gus_lock, flags); outb((ctrl_addr), u_MixSelect); outb((selector[dev]), u_MixData); outb((attn_addr), u_MixSelect); outb(((unsigned char) vol), u_MixData); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&gus_lock,flags); } static int set_volumes(int dev, int vol) @@ -209,10 +209,10 @@ static struct mixer_operations ics2101_mixer_operations = { - owner: THIS_MODULE, - id: "ICS2101", - name: "ICS2101 Multimedia Mixer", - ioctl: ics2101_mixer_ioctl + .owner = THIS_MODULE, + .id = "ICS2101", + .name = "ICS2101 Multimedia Mixer", + .ioctl = ics2101_mixer_ioctl }; int __init ics2101_mixer_init(void) diff -Nru a/sound/oss/ite8172.c b/sound/oss/ite8172.c --- a/sound/oss/ite8172.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/ite8172.c Sat Apr 12 14:44:06 2003 @@ -51,7 +51,6 @@ * Revision history * 02.08.2001 0.1 Initial release */ -#include #include #include #include @@ -863,11 +862,11 @@ } static /*const*/ struct file_operations it8172_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: it8172_ioctl_mixdev, - open: it8172_open_mixdev, - release: it8172_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = it8172_ioctl_mixdev, + .open = it8172_open_mixdev, + .release = it8172_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -1630,15 +1629,15 @@ } static /*const*/ struct file_operations it8172_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: it8172_read, - write: it8172_write, - poll: it8172_poll, - ioctl: it8172_ioctl, - mmap: it8172_mmap, - open: it8172_open, - release: it8172_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = it8172_read, + .write = it8172_write, + .poll = it8172_poll, + .ioctl = it8172_ioctl, + .mmap = it8172_mmap, + .open = it8172_open, + .release = it8172_release, }; diff -Nru a/sound/oss/mad16.c b/sound/oss/mad16.c --- a/sound/oss/mad16.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/mad16.c Sat Apr 12 14:44:09 2003 @@ -537,7 +537,7 @@ for (i = 0xf8d; i <= 0xf93; i++) { if (!c924pnp) - DDB(printk("port %03x = %02x\n", i, mad_read(i))) + DDB(printk("port %03x = %02x\n", i, mad_read(i))); else DDB(printk("port %03x = %02x\n", i-0x80, mad_read(i))); } @@ -600,7 +600,7 @@ for (i = 0xf8d; i <= 0xf93; i++) { if (!c924pnp) - DDB(printk("port %03x after init = %02x\n", i, mad_read(i))) + DDB(printk("port %03x after init = %02x\n", i, mad_read(i))); else DDB(printk("port %03x after init = %02x\n", i-0x80, mad_read(i))); } diff -Nru a/sound/oss/maestro.c b/sound/oss/maestro.c --- a/sound/oss/maestro.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/maestro.c Sat Apr 12 14:44:09 2003 @@ -205,7 +205,6 @@ /*****************************************************************************/ -#include #include #include #include @@ -2170,11 +2169,11 @@ } static /*const*/ struct file_operations ess_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: ess_ioctl_mixdev, - open: ess_open_mixdev, - release: ess_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = ess_ioctl_mixdev, + .open = ess_open_mixdev, + .release = ess_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -3106,15 +3105,15 @@ } static struct file_operations ess_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: ess_read, - write: ess_write, - poll: ess_poll, - ioctl: ess_ioctl, - mmap: ess_mmap, - open: ess_open, - release: ess_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = ess_read, + .write = ess_write, + .poll = ess_poll, + .ioctl = ess_ioctl, + .mmap = ess_mmap, + .open = ess_open, + .release = ess_release, }; static int diff -Nru a/sound/oss/midi_synth.h b/sound/oss/midi_synth.h --- a/sound/oss/midi_synth.h Sat Apr 12 14:44:06 2003 +++ b/sound/oss/midi_synth.h Sat Apr 12 14:44:06 2003 @@ -22,26 +22,26 @@ static struct synth_operations std_midi_synth = { - owner: THIS_MODULE, - id: "MIDI", - info: &std_synth_info, - midi_dev: 0, - synth_type: SYNTH_TYPE_MIDI, - synth_subtype: 0, - open: midi_synth_open, - close: midi_synth_close, - ioctl: midi_synth_ioctl, - kill_note: midi_synth_kill_note, - start_note: midi_synth_start_note, - set_instr: midi_synth_set_instr, - reset: midi_synth_reset, - hw_control: midi_synth_hw_control, - load_patch: midi_synth_load_patch, - aftertouch: midi_synth_aftertouch, - controller: midi_synth_controller, - panning: midi_synth_panning, - bender: midi_synth_bender, - setup_voice: midi_synth_setup_voice, - send_sysex: midi_synth_send_sysex + .owner = THIS_MODULE, + .id = "MIDI", + .info = &std_synth_info, + .midi_dev = 0, + .synth_type = SYNTH_TYPE_MIDI, + .synth_subtype = 0, + .open = midi_synth_open, + .close = midi_synth_close, + .ioctl = midi_synth_ioctl, + .kill_note = midi_synth_kill_note, + .start_note = midi_synth_start_note, + .set_instr = midi_synth_set_instr, + .reset = midi_synth_reset, + .hw_control = midi_synth_hw_control, + .load_patch = midi_synth_load_patch, + .aftertouch = midi_synth_aftertouch, + .controller = midi_synth_controller, + .panning = midi_synth_panning, + .bender = midi_synth_bender, + .setup_voice = midi_synth_setup_voice, + .send_sysex = midi_synth_send_sysex }; #endif diff -Nru a/sound/oss/mpu401.c b/sound/oss/mpu401.c --- a/sound/oss/mpu401.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/mpu401.c Sat Apr 12 14:44:10 2003 @@ -888,45 +888,45 @@ static struct synth_operations mpu401_synth_proto = { - owner: THIS_MODULE, - id: "MPU401", - info: NULL, - midi_dev: 0, - synth_type: SYNTH_TYPE_MIDI, - synth_subtype: 0, - open: mpu_synth_open, - close: mpu_synth_close, - ioctl: mpu_synth_ioctl, - kill_note: midi_synth_kill_note, - start_note: midi_synth_start_note, - set_instr: midi_synth_set_instr, - reset: midi_synth_reset, - hw_control: midi_synth_hw_control, - load_patch: midi_synth_load_patch, - aftertouch: midi_synth_aftertouch, - controller: midi_synth_controller, - panning: midi_synth_panning, - bender: midi_synth_bender, - setup_voice: midi_synth_setup_voice, - send_sysex: midi_synth_send_sysex + .owner = THIS_MODULE, + .id = "MPU401", + .info = NULL, + .midi_dev = 0, + .synth_type = SYNTH_TYPE_MIDI, + .synth_subtype = 0, + .open = mpu_synth_open, + .close = mpu_synth_close, + .ioctl = mpu_synth_ioctl, + .kill_note = midi_synth_kill_note, + .start_note = midi_synth_start_note, + .set_instr = midi_synth_set_instr, + .reset = midi_synth_reset, + .hw_control = midi_synth_hw_control, + .load_patch = midi_synth_load_patch, + .aftertouch = midi_synth_aftertouch, + .controller = midi_synth_controller, + .panning = midi_synth_panning, + .bender = midi_synth_bender, + .setup_voice = midi_synth_setup_voice, + .send_sysex = midi_synth_send_sysex }; static struct synth_operations *mpu401_synth_operations[MAX_MIDI_DEV]; static struct midi_operations mpu401_midi_proto = { - owner: THIS_MODULE, - info: {"MPU-401 Midi", 0, MIDI_CAP_MPU401, SNDCARD_MPU401}, - in_info: {0}, - open: mpu401_open, - close: mpu401_close, - ioctl: mpu401_ioctl, - outputc: mpu401_out, - start_read: mpu401_start_read, - end_read: mpu401_end_read, - kick: mpu401_kick, - buffer_status: mpu401_buffer_status, - prefix_cmd: mpu401_prefix_cmd + .owner = THIS_MODULE, + .info = {"MPU-401 Midi", 0, MIDI_CAP_MPU401, SNDCARD_MPU401}, + .in_info = {0}, + .open = mpu401_open, + .close = mpu401_close, + .ioctl = mpu401_ioctl, + .outputc = mpu401_out, + .start_read = mpu401_start_read, + .end_read = mpu401_end_read, + .kick = mpu401_kick, + .buffer_status = mpu401_buffer_status, + .prefix_cmd = mpu401_prefix_cmd }; static struct midi_operations mpu401_midi_operations[MAX_MIDI_DEV]; @@ -1619,16 +1619,16 @@ static struct sound_timer_operations mpu_timer = { - owner: THIS_MODULE, - info: {"MPU-401 Timer", 0}, - priority: 10, /* Priority */ - devlink: 0, /* Local device link */ - open: mpu_timer_open, - close: mpu_timer_close, - event: mpu_timer_event, - get_time: mpu_timer_get_time, - ioctl: mpu_timer_ioctl, - arm_timer: mpu_timer_arm + .owner = THIS_MODULE, + .info = {"MPU-401 Timer", 0}, + .priority = 10, /* Priority */ + .devlink = 0, /* Local device link */ + .open = mpu_timer_open, + .close = mpu_timer_close, + .event = mpu_timer_event, + .get_time = mpu_timer_get_time, + .ioctl = mpu_timer_ioctl, + .arm_timer = mpu_timer_arm }; static void mpu_timer_interrupt(void) diff -Nru a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c --- a/sound/oss/msnd_pinnacle.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/msnd_pinnacle.c Sat Apr 12 14:44:08 2003 @@ -40,7 +40,6 @@ #include #include -#include #include #include #include @@ -1081,12 +1080,12 @@ } static struct file_operations dev_fileops = { - owner: THIS_MODULE, - read: dev_read, - write: dev_write, - ioctl: dev_ioctl, - open: dev_open, - release: dev_release, + .owner = THIS_MODULE, + .read = dev_read, + .write = dev_write, + .ioctl = dev_ioctl, + .open = dev_open, + .release = dev_release, }; static int reset_dsp(void) diff -Nru a/sound/oss/nec_vrc5477.c b/sound/oss/nec_vrc5477.c --- a/sound/oss/nec_vrc5477.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/nec_vrc5477.c Sat Apr 12 14:44:09 2003 @@ -61,7 +61,6 @@ * 02.08.2001 0.1 Initial release */ -#include #include #include #include @@ -896,11 +895,11 @@ } static /*const*/ struct file_operations vrc5477_ac97_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: vrc5477_ac97_ioctl_mixdev, - open: vrc5477_ac97_open_mixdev, - release: vrc5477_ac97_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = vrc5477_ac97_ioctl_mixdev, + .open = vrc5477_ac97_open_mixdev, + .release = vrc5477_ac97_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -1658,15 +1657,15 @@ } static /*const*/ struct file_operations vrc5477_ac97_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: vrc5477_ac97_read, - write: vrc5477_ac97_write, - poll: vrc5477_ac97_poll, - ioctl: vrc5477_ac97_ioctl, - // mmap: vrc5477_ac97_mmap, - open: vrc5477_ac97_open, - release: vrc5477_ac97_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = vrc5477_ac97_read, + .write = vrc5477_ac97_write, + .poll = vrc5477_ac97_poll, + .ioctl = vrc5477_ac97_ioctl, + // .mmap = vrc5477_ac97_mmap, + .open = vrc5477_ac97_open, + .release = vrc5477_ac97_release, }; diff -Nru a/sound/oss/nm256_audio.c b/sound/oss/nm256_audio.c --- a/sound/oss/nm256_audio.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/nm256_audio.c Sat Apr 12 14:44:07 2003 @@ -925,10 +925,10 @@ } static struct mixer_operations nm256_mixer_operations = { - owner: THIS_MODULE, - id: "NeoMagic", - name: "NM256AC97Mixer", - ioctl: nm256_default_mixer_ioctl + .owner = THIS_MODULE, + .id = "NeoMagic", + .name = "NM256AC97Mixer", + .ioctl = nm256_default_mixer_ioctl }; /* @@ -1632,16 +1632,16 @@ static struct audio_driver nm256_audio_driver = { - owner: THIS_MODULE, - open: nm256_audio_open, - close: nm256_audio_close, - output_block: nm256_audio_output_block, - start_input: nm256_audio_start_input, - ioctl: nm256_audio_ioctl, - prepare_for_input: nm256_audio_prepare_for_input, - prepare_for_output:nm256_audio_prepare_for_output, - halt_io: nm256_audio_reset, - local_qlen: nm256_audio_local_qlen, + .owner = THIS_MODULE, + .open = nm256_audio_open, + .close = nm256_audio_close, + .output_block = nm256_audio_output_block, + .start_input = nm256_audio_start_input, + .ioctl = nm256_audio_ioctl, + .prepare_for_input = nm256_audio_prepare_for_input, + .prepare_for_output = nm256_audio_prepare_for_output, + .halt_io = nm256_audio_reset, + .local_qlen = nm256_audio_local_qlen, }; static struct pci_device_id nm256_pci_tbl[] __devinitdata = { diff -Nru a/sound/oss/opl3.c b/sound/oss/opl3.c --- a/sound/oss/opl3.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/opl3.c Sat Apr 12 14:44:08 2003 @@ -1078,28 +1078,28 @@ static struct synth_operations opl3_operations = { - owner: THIS_MODULE, - id: "OPL", - info: NULL, - midi_dev: 0, - synth_type: SYNTH_TYPE_FM, - synth_subtype: FM_TYPE_ADLIB, - open: opl3_open, - close: opl3_close, - ioctl: opl3_ioctl, - kill_note: opl3_kill_note, - start_note: opl3_start_note, - set_instr: opl3_set_instr, - reset: opl3_reset, - hw_control: opl3_hw_control, - load_patch: opl3_load_patch, - aftertouch: opl3_aftertouch, - controller: opl3_controller, - panning: opl3_panning, - volume_method: opl3_volume_method, - bender: opl3_bender, - alloc_voice: opl3_alloc_voice, - setup_voice: opl3_setup_voice + .owner = THIS_MODULE, + .id = "OPL", + .info = NULL, + .midi_dev = 0, + .synth_type = SYNTH_TYPE_FM, + .synth_subtype = FM_TYPE_ADLIB, + .open = opl3_open, + .close = opl3_close, + .ioctl = opl3_ioctl, + .kill_note = opl3_kill_note, + .start_note = opl3_start_note, + .set_instr = opl3_set_instr, + .reset = opl3_reset, + .hw_control = opl3_hw_control, + .load_patch = opl3_load_patch, + .aftertouch = opl3_aftertouch, + .controller = opl3_controller, + .panning = opl3_panning, + .volume_method = opl3_volume_method, + .bender = opl3_bender, + .alloc_voice = opl3_alloc_voice, + .setup_voice = opl3_setup_voice }; int opl3_init(int ioaddr, int *osp, struct module *owner) diff -Nru a/sound/oss/opl3sa2.c b/sound/oss/opl3sa2.c --- a/sound/oss/opl3sa2.c Sat Apr 12 14:44:05 2003 +++ b/sound/oss/opl3sa2.c Sat Apr 12 14:44:05 2003 @@ -58,6 +58,10 @@ * Zwane Mwaikambo Added PM support. (Dec 4 2001) * * Adam Belay Converted driver to new PnP Layer (Oct 12, 2002) + * Zwane Mwaikambo Code, data structure cleanups. (Feb 15 2002) + * Zwane Mwaikambo Free resources during auxiliary device probe + * failures (Apr 29 2002) + * */ #include @@ -71,6 +75,9 @@ #include "ad1848.h" #include "mpu401.h" +#define OPL3SA2_MODULE_NAME "opl3sa2" +#define PFX OPL3SA2_MODULE_NAME ": " + /* Useful control port indexes: */ #define OPL3SA2_PM 0x01 #define OPL3SA2_SYS_CTRL 0x02 @@ -91,9 +98,11 @@ #define DEFAULT_TIMBRE 0 /* Power saving modes */ -#define OPL3SA2_PM_MODE1 0x05 -#define OPL3SA2_PM_MODE2 0x04 -#define OPL3SA2_PM_MODE3 0x03 +#define OPL3SA2_PM_MODE0 0x00 +#define OPL3SA2_PM_MODE1 0x04 /* PSV */ +#define OPL3SA2_PM_MODE2 0x05 /* PSV | PDX */ +#define OPL3SA2_PM_MODE3 0x27 /* ADOWN | PSV | PDN | PDX */ + /* For checking against what the card returns: */ #define VERSION_UNKNOWN 0 @@ -107,6 +116,7 @@ #define CHIPSET_UNKNOWN -1 #define CHIPSET_OPL3SA2 0 #define CHIPSET_OPL3SA3 1 +static const char *CHIPSET_TABLE[] = {"OPL3-SA2", "OPL3-SA3"}; #ifdef CONFIG_PNP #define OPL3SA2_CARDS_MAX 4 @@ -117,40 +127,41 @@ /* This should be pretty obvious */ static int opl3sa2_cards_num; /* = 0 */ -/* What's my version(s)? */ -static int chipset[OPL3SA2_CARDS_MAX] = { CHIPSET_UNKNOWN }; - -/* Oh well, let's just cache the name(s) */ -static char chipset_name[OPL3SA2_CARDS_MAX][12]; - -/* Where's my mixer(s)? */ -static int opl3sa2_mixer[OPL3SA2_CARDS_MAX] = { -1 }; - -/* Bag o' mixer data */ -typedef struct opl3sa2_mixerdata_tag { +typedef struct { + /* device resources */ unsigned short cfg_port; - unsigned short padding; - unsigned char reg; - unsigned int in_suspend; - struct pm_dev *pmdev; - unsigned int card; - unsigned int volume_l; - unsigned int volume_r; - unsigned int mic; - unsigned int bass_l; - unsigned int bass_r; - unsigned int treble_l; - unsigned int treble_r; - unsigned int wide_l; - unsigned int wide_r; -} opl3sa2_mixerdata; -static opl3sa2_mixerdata opl3sa2_data[OPL3SA2_CARDS_MAX]; - -static struct address_info cfg[OPL3SA2_CARDS_MAX]; -static struct address_info cfg_mss[OPL3SA2_CARDS_MAX]; -static struct address_info cfg_mpu[OPL3SA2_CARDS_MAX]; + struct address_info cfg; + struct address_info cfg_mss; + struct address_info cfg_mpu; +#ifdef CONFIG_PNP + /* PnP Stuff */ + struct pnp_dev* pdev; + int activated; /* Whether said devices have been activated */ +#endif +#ifdef CONFIG_PM + unsigned int in_suspend; + struct pm_dev *pmdev; +#endif + unsigned int card; + int chipset; /* What's my version(s)? */ + char *chipset_name; + + /* mixer data */ + int mixer; + unsigned int volume_l; + unsigned int volume_r; + unsigned int mic; + unsigned int bass_l; + unsigned int bass_r; + unsigned int treble_l; + unsigned int treble_r; + unsigned int wide_l; + unsigned int wide_r; +} opl3sa2_state_t; +static opl3sa2_state_t opl3sa2_state[OPL3SA2_CARDS_MAX]; -static spinlock_t lock=SPIN_LOCK_UNLOCKED; +static spinlock_t opl3sa2_lock = SPIN_LOCK_UNLOCKED; + /* Our parameters */ static int __initdata io = -1; @@ -241,7 +252,7 @@ * All of the mixer functions... */ -static void opl3sa2_set_volume(opl3sa2_mixerdata* devc, int left, int right) +static void opl3sa2_set_volume(opl3sa2_state_t* devc, int left, int right) { static unsigned char scale[101] = { 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e, @@ -276,7 +287,7 @@ } -static void opl3sa2_set_mic(opl3sa2_mixerdata* devc, int level) +static void opl3sa2_set_mic(opl3sa2_state_t* devc, int level) { unsigned char vol = 0x1F; @@ -291,7 +302,7 @@ } -static void opl3sa3_set_bass(opl3sa2_mixerdata* devc, int left, int right) +static void opl3sa3_set_bass(opl3sa2_state_t* devc, int left, int right) { unsigned char bass; @@ -302,7 +313,7 @@ } -static void opl3sa3_set_treble(opl3sa2_mixerdata* devc, int left, int right) +static void opl3sa3_set_treble(opl3sa2_state_t* devc, int left, int right) { unsigned char treble; @@ -313,7 +324,7 @@ } -static void opl3sa3_set_wide(opl3sa2_mixerdata* devc, int left, int right) +static void opl3sa3_set_wide(opl3sa2_state_t* devc, int left, int right) { unsigned char wide; @@ -324,16 +335,16 @@ } -static void opl3sa2_mixer_reset(opl3sa2_mixerdata* devc, int card) +static void opl3sa2_mixer_reset(opl3sa2_state_t* devc) { - if(devc) { + if (devc) { opl3sa2_set_volume(devc, DEFAULT_VOLUME, DEFAULT_VOLUME); devc->volume_l = devc->volume_r = DEFAULT_VOLUME; opl3sa2_set_mic(devc, DEFAULT_MIC); devc->mic = DEFAULT_MIC; - if(chipset[card] == CHIPSET_OPL3SA3) { + if (devc->chipset == CHIPSET_OPL3SA3) { opl3sa3_set_bass(devc, DEFAULT_TIMBRE, DEFAULT_TIMBRE); devc->bass_l = devc->bass_r = DEFAULT_TIMBRE; opl3sa3_set_treble(devc, DEFAULT_TIMBRE, DEFAULT_TIMBRE); @@ -343,13 +354,13 @@ } -static void opl3sa2_mixer_restore(opl3sa2_mixerdata* devc, int card) +static void opl3sa2_mixer_restore(opl3sa2_state_t* devc) { if (devc) { opl3sa2_set_volume(devc, devc->volume_l, devc->volume_r); opl3sa2_set_mic(devc, devc->mic); - if (chipset[card] == CHIPSET_OPL3SA3) { + if (devc->chipset == CHIPSET_OPL3SA3) { opl3sa3_set_bass(devc, devc->bass_l, devc->bass_r); opl3sa3_set_treble(devc, devc->treble_l, devc->treble_r); } @@ -391,9 +402,9 @@ { int cmdf = cmd & 0xff; - opl3sa2_mixerdata* devc = (opl3sa2_mixerdata*) mixer_devs[dev]->devc; + opl3sa2_state_t* devc = &opl3sa2_state[dev]; - switch(cmdf) { + switch (cmdf) { case SOUND_MIXER_VOLUME: case SOUND_MIXER_MIC: case SOUND_MIXER_DEVMASK: @@ -407,10 +418,10 @@ return -EINVAL; } - if(((cmd >> 8) & 0xff) != 'M') + if (((cmd >> 8) & 0xff) != 'M') return -EINVAL; - if(_SIOC_DIR (cmd) & _SIOC_WRITE) { + if (_SIOC_DIR (cmd) & _SIOC_WRITE) { switch (cmdf) { case SOUND_MIXER_VOLUME: arg_to_vol_stereo(*(unsigned int*)arg, @@ -474,9 +485,9 @@ { int cmdf = cmd & 0xff; - opl3sa2_mixerdata* devc = (opl3sa2_mixerdata*) mixer_devs[dev]->devc; + opl3sa2_state_t* devc = &opl3sa2_state[dev]; - switch(cmdf) { + switch (cmdf) { case SOUND_MIXER_BASS: case SOUND_MIXER_TREBLE: case SOUND_MIXER_DIGITAL1: @@ -488,10 +499,10 @@ return opl3sa2_mixer_ioctl(dev, cmd, arg); } - if(((cmd >> 8) & 0xff) != 'M') + if (((cmd >> 8) & 0xff) != 'M') return -EINVAL; - if(_SIOC_DIR (cmd) & _SIOC_WRITE) { + if (_SIOC_DIR (cmd) & _SIOC_WRITE) { switch (cmdf) { case SOUND_MIXER_BASS: arg_to_vol_stereo(*(unsigned int*)arg, @@ -557,18 +568,18 @@ static struct mixer_operations opl3sa2_mixer_operations = { - owner: THIS_MODULE, - id: "OPL3-SA2", - name: "Yamaha OPL3-SA2", - ioctl: opl3sa2_mixer_ioctl + .owner = THIS_MODULE, + .id = "OPL3-SA2", + .name = "Yamaha OPL3-SA2", + .ioctl = opl3sa2_mixer_ioctl }; static struct mixer_operations opl3sa3_mixer_operations = { - owner: THIS_MODULE, - id: "OPL3-SA3", - name: "Yamaha OPL3-SA3", - ioctl: opl3sa3_mixer_ioctl + .owner = THIS_MODULE, + .id = "OPL3-SA3", + .name = "Yamaha OPL3-SA3", + .ioctl = opl3sa3_mixer_ioctl }; /* End of mixer-related stuff */ @@ -584,9 +595,9 @@ } -static inline void __init attach_opl3sa2_mpu(struct address_info* hw_config) +static inline int __init attach_opl3sa2_mpu(struct address_info* hw_config) { - attach_mpu401(hw_config, THIS_MODULE); + return attach_mpu401(hw_config, THIS_MODULE); } @@ -608,7 +619,7 @@ initial_mixers = num_mixers; attach_ms_sound(hw_config, THIS_MODULE); /* Slot 0 */ - if(hw_config->slots[0] != -1) { + if (hw_config->slots[0] != -1) { /* Did the MSS driver install? */ if(num_mixers == (initial_mixers + 1)) { /* The MSS mixer is installed, reroute mixers appropiately */ @@ -617,7 +628,7 @@ AD1848_REROUTE(SOUND_MIXER_LINE3, SOUND_MIXER_LINE); } else { - printk(KERN_ERR "opl3sa2: MSS mixer not installed?\n"); + printk(KERN_ERR PFX "MSS mixer not installed?\n"); } } } @@ -634,15 +645,14 @@ unsigned char misc; unsigned char tmp; unsigned char version; - char tag; /* - * Verify that the I/O port range is free. + * Try and allocate our I/O port range. */ - if(check_region(hw_config->io_base, 2)) { - printk(KERN_ERR "opl3sa2: Control I/O port %#x not free\n", + if (!request_region(hw_config->io_base, 2, OPL3SA2_MODULE_NAME)) { + printk(KERN_ERR PFX "Control I/O port %#x not free\n", hw_config->io_base); - return 0; + goto out_nodev; } /* @@ -653,9 +663,9 @@ opl3sa2_write(hw_config->io_base, OPL3SA2_MISC, misc ^ 0x07); opl3sa2_read(hw_config->io_base, OPL3SA2_MISC, &tmp); if(tmp != misc) { - printk(KERN_ERR "opl3sa2: Control I/O port %#x is not a YMF7xx chipset!\n", + printk(KERN_ERR PFX "Control I/O port %#x is not a YMF7xx chipset!\n", hw_config->io_base); - return 0; + goto out_region; } /* @@ -666,9 +676,9 @@ opl3sa2_read(hw_config->io_base, OPL3SA2_MIC, &tmp); if((tmp & 0x9f) != 0x8a) { printk(KERN_ERR - "opl3sa2: Control I/O port %#x is not a YMF7xx chipset!\n", + PFX "Control I/O port %#x is not a YMF7xx chipset!\n", hw_config->io_base); - return 0; + goto out_region; } opl3sa2_write(hw_config->io_base, OPL3SA2_MIC, tmp); @@ -679,57 +689,54 @@ * of the miscellaneous register. */ version = misc & 0x07; - printk(KERN_DEBUG "opl3sa2: chipset version = %#x\n", version); - switch(version) { + printk(KERN_DEBUG PFX "Chipset version = %#x\n", version); + switch (version) { case 0: - chipset[card] = CHIPSET_UNKNOWN; - tag = '?'; /* silence compiler warning */ + opl3sa2_state[card].chipset = CHIPSET_UNKNOWN; printk(KERN_ERR - "opl3sa2: Unknown Yamaha audio controller version\n"); + PFX "Unknown Yamaha audio controller version\n"); break; case VERSION_YMF711: - chipset[card] = CHIPSET_OPL3SA2; - tag = '2'; - printk(KERN_INFO "opl3sa2: Found OPL3-SA2 (YMF711)\n"); + opl3sa2_state[card].chipset = CHIPSET_OPL3SA2; + printk(KERN_INFO PFX "Found OPL3-SA2 (YMF711)\n"); break; case VERSION_YMF715: - chipset[card] = CHIPSET_OPL3SA3; - tag = '3'; + opl3sa2_state[card].chipset = CHIPSET_OPL3SA3; printk(KERN_INFO - "opl3sa2: Found OPL3-SA3 (YMF715 or YMF719)\n"); + PFX "Found OPL3-SA3 (YMF715 or YMF719)\n"); break; case VERSION_YMF715B: - chipset[card] = CHIPSET_OPL3SA3; - tag = '3'; + opl3sa2_state[card].chipset = CHIPSET_OPL3SA3; printk(KERN_INFO - "opl3sa2: Found OPL3-SA3 (YMF715B or YMF719B)\n"); + PFX "Found OPL3-SA3 (YMF715B or YMF719B)\n"); break; case VERSION_YMF715E: default: - chipset[card] = CHIPSET_OPL3SA3; - tag = '3'; + opl3sa2_state[card].chipset = CHIPSET_OPL3SA3; printk(KERN_INFO - "opl3sa2: Found OPL3-SA3 (YMF715E or YMF719E)\n"); + PFX "Found OPL3-SA3 (YMF715E or YMF719E)\n"); break; } - if(chipset[card] != CHIPSET_UNKNOWN) { + if (opl3sa2_state[card].chipset != CHIPSET_UNKNOWN) { /* Generate a pretty name */ - sprintf(chipset_name[card], "OPL3-SA%c", tag); - return 1; + opl3sa2_state[card].chipset_name = (char *)CHIPSET_TABLE[opl3sa2_state[card].chipset]; + return 0; } - return 0; + +out_region: + release_region(hw_config->io_base, 2); +out_nodev: + return -ENODEV; } static void __init attach_opl3sa2(struct address_info* hw_config, int card) { - request_region(hw_config->io_base, 2, chipset_name[card]); - /* Initialize IRQ configuration to IRQ-B: -, IRQ-A: WSS+MPU+OPL3 */ opl3sa2_write(hw_config->io_base, OPL3SA2_IRQ_CONFIG, 0x0d); @@ -748,30 +755,29 @@ static void __init attach_opl3sa2_mixer(struct address_info *hw_config, int card) { struct mixer_operations* mixer_operations; - opl3sa2_mixerdata* devc; + opl3sa2_state_t* devc = &opl3sa2_state[card]; /* Install master mixer */ - if(chipset[card] == CHIPSET_OPL3SA3) { + if (devc->chipset == CHIPSET_OPL3SA3) { mixer_operations = &opl3sa3_mixer_operations; } else { mixer_operations = &opl3sa2_mixer_operations; } - if((devc = &opl3sa2_data[card])) { - devc->cfg_port = hw_config->io_base; + devc->cfg_port = hw_config->io_base; + devc->mixer = sound_install_mixer(MIXER_DRIVER_VERSION, + mixer_operations->name, + mixer_operations, + sizeof(struct mixer_operations), + devc); + if(devc->mixer < 0) { + printk(KERN_ERR PFX "Could not install %s master mixer\n", + mixer_operations->name); + } + else { + opl3sa2_mixer_reset(devc); - opl3sa2_mixer[card] = sound_install_mixer(MIXER_DRIVER_VERSION, - mixer_operations->name, - mixer_operations, - sizeof(struct mixer_operations), - devc); - if(opl3sa2_mixer[card] < 0) { - printk(KERN_ERR "opl3sa2: Could not install %s master mixer\n", - mixer_operations->name); - } - else - opl3sa2_mixer_reset(devc, card); } } @@ -805,7 +811,7 @@ opl3sa2_write(hw_config->io_base, OPL3SA2_SYS_CTRL, sys_ctrl); } else { - printk(KERN_ERR "opl3sa2: not setting ymode, it must be one of 0,1,2,3\n"); + printk(KERN_ERR PFX "not setting ymode, it must be one of 0,1,2,3\n"); } } @@ -820,7 +826,7 @@ opl3sa2_write(hw_config->io_base, OPL3SA2_MISC, misc); } else { - printk(KERN_ERR "opl3sa2: not setting loopback, it must be either 0 or 1\n"); + printk(KERN_ERR PFX "not setting loopback, it must be either 0 or 1\n"); } } @@ -831,8 +837,9 @@ release_region(hw_config->io_base, 2); /* Unload mixer */ - if(opl3sa2_mixer[card] >= 0) - sound_unload_mixerdev(opl3sa2_mixer[card]); + if(opl3sa2_state[card].mixer >= 0) + sound_unload_mixerdev(opl3sa2_state[card].mixer); + } #ifdef CONFIG_PNP @@ -846,35 +853,40 @@ static int opl3sa2_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *dev_id) { int card = opl3sa2_cards_num; + + /* we don't actually want to return an error as the user may have specified + * no multiple card search + */ + if (opl3sa2_cards_num == OPL3SA2_CARDS_MAX) return 0; opl3sa2_activated[card] = 1; /* Our own config: */ - cfg[card].io_base = pnp_port_start(dev, 4); - cfg[card].irq = pnp_irq(dev, 0); - cfg[card].dma = pnp_dma(dev, 0); - cfg[card].dma2 = pnp_dma(dev, 1); + opl3sa2_state[card].cfg.io_base = pnp_port_start(dev, 4); + opl3sa2_state[card].cfg.irq = pnp_irq(dev, 0); + opl3sa2_state[card].cfg.dma = pnp_dma(dev, 0); + opl3sa2_state[card].cfg.dma2 = pnp_dma(dev, 1); /* The MSS config: */ - cfg_mss[card].io_base = pnp_port_start(dev, 1); - cfg_mss[card].irq = pnp_irq(dev, 0); - cfg_mss[card].dma = pnp_dma(dev, 0); - cfg_mss[card].dma2 = pnp_dma(dev, 1); - cfg_mss[card].card_subtype = 1; /* No IRQ or DMA setup */ - - cfg_mpu[card].io_base = pnp_port_start(dev, 3); - cfg_mpu[card].irq = pnp_irq(dev, 0); - cfg_mpu[card].dma = -1; - cfg_mpu[card].dma2 = -1; - cfg_mpu[card].always_detect = 1; /* It's there, so use shared IRQs */ + opl3sa2_state[card].cfg_mss.io_base = pnp_port_start(dev, 1); + opl3sa2_state[card].cfg_mss.irq = pnp_irq(dev, 0); + opl3sa2_state[card].cfg_mss.dma = pnp_dma(dev, 0); + opl3sa2_state[card].cfg_mss.dma2 = pnp_dma(dev, 1); + opl3sa2_state[card].cfg_mss.card_subtype = 1; /* No IRQ or DMA setup */ + + opl3sa2_state[card].cfg_mpu.io_base = pnp_port_start(dev, 3); + opl3sa2_state[card].cfg_mpu.irq = pnp_irq(dev, 0); + opl3sa2_state[card].cfg_mpu.dma = -1; + opl3sa2_state[card].cfg_mpu.dma2 = -1; + opl3sa2_state[card].cfg_mpu.always_detect = 1; /* It's there, so use shared IRQs */ /* Call me paranoid: */ - opl3sa2_clear_slots(&cfg[card]); - opl3sa2_clear_slots(&cfg_mss[card]); - opl3sa2_clear_slots(&cfg_mpu[card]); + opl3sa2_clear_slots(&opl3sa2_state[card].cfg); + opl3sa2_clear_slots(&opl3sa2_state[card].cfg_mss); + opl3sa2_clear_slots(&opl3sa2_state[card].cfg_mpu); - opl3sa2_dev[card] = dev; + opl3sa2_state[card].pdev = dev; opl3sa2_cards_num++; return 0; @@ -890,19 +902,19 @@ /* End of component functions */ +#ifdef CONFIG_PM /* Power Management support functions */ -static int opl3sa2_suspend(struct pm_dev *pdev, unsigned char pm_mode) +static int opl3sa2_suspend(struct pm_dev *pdev, unsigned int pm_mode) { unsigned long flags; - opl3sa2_mixerdata *p; + opl3sa2_state_t *p; if (!pdev) return -EINVAL; - spin_lock_irqsave(&lock,flags); + spin_lock_irqsave(&opl3sa2_lock,flags); - p = (opl3sa2_mixerdata *) pdev->data; - p->in_suspend = 1; + p = (opl3sa2_state_t *) pdev->data; switch (pm_mode) { case 1: pm_mode = OPL3SA2_PM_MODE1; @@ -914,37 +926,42 @@ pm_mode = OPL3SA2_PM_MODE3; break; default: - pm_mode = OPL3SA2_PM_MODE3; - break; + /* we don't know howto handle this... */ + spin_unlock_irqrestore(&opl3sa2_lock, flags); + return -EBUSY; } + p->in_suspend = 1; + /* its supposed to automute before suspending, so we won't bother */ - opl3sa2_read(p->cfg_port, OPL3SA2_PM, &p->reg); - opl3sa2_write(p->cfg_port, OPL3SA2_PM, p->reg | pm_mode); + opl3sa2_write(p->cfg_port, OPL3SA2_PM, pm_mode); + /* wait a while for the clock oscillator to stabilise */ + mdelay(10); - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&opl3sa2_lock,flags); return 0; } static int opl3sa2_resume(struct pm_dev *pdev) { unsigned long flags; - opl3sa2_mixerdata *p; + opl3sa2_state_t *p; - if (!pdev) - return -EINVAL; + if (!pdev) + return -EINVAL; - p = (opl3sa2_mixerdata *) pdev->data; - spin_lock_irqsave(&lock,flags); + p = (opl3sa2_state_t *) pdev->data; + spin_lock_irqsave(&opl3sa2_lock,flags); - /* I don't think this is necessary */ - opl3sa2_write(p->cfg_port, OPL3SA2_PM, p->reg); - opl3sa2_mixer_restore(p, p->card); - p->in_suspend = 0; + /* I don't think this is necessary */ + opl3sa2_write(p->cfg_port, OPL3SA2_PM, OPL3SA2_PM_MODE0); + opl3sa2_mixer_restore(p); + p->in_suspend = 0; - spin_unlock_irqrestore(&lock,flags); + spin_unlock_irqrestore(&opl3sa2_lock,flags); return 0; } +#endif /* CONFIG_PM */ static int opl3sa2_pm_callback(struct pm_dev *pdev, pm_request_t rqst, void *data) { @@ -967,8 +984,7 @@ */ static int __init init_opl3sa2(void) { - int card; - int max; + int card, max; /* Sanitize isapnp and multiple settings */ isapnp = isapnp != 0 ? 1 : 0; @@ -980,64 +996,69 @@ if (isapnp){ pnp_register_driver(&opl3sa2_driver); if(!opl3sa2_cards_num){ - printk(KERN_INFO "opl3sa2: No PnP cards found\n"); + printk(KERN_INFO PFX "No PnP cards found\n"); isapnp = 0; } max = opl3sa2_cards_num; } #endif - for(card = 0; card < max; card++) { + for (card = 0; card < max; card++) { /* If a user wants an I/O then assume they meant it */ - if(!isapnp) { - if(io == -1 || irq == -1 || dma == -1 || - dma2 == -1 || mss_io == -1) { + if (!isapnp) { + if (io == -1 || irq == -1 || dma == -1 || + dma2 == -1 || mss_io == -1) { printk(KERN_ERR - "opl3sa2: io, mss_io, irq, dma, and dma2 must be set\n"); + PFX "io, mss_io, irq, dma, and dma2 must be set\n"); return -EINVAL; - opl3sa2_cards_num++; } + opl3sa2_cards_num++; /* * Our own config: * (NOTE: IRQ and DMA aren't used, so they're set to * give pretty output from conf_printf. :) */ - cfg[card].io_base = io; - cfg[card].irq = irq; - cfg[card].dma = dma; - cfg[card].dma2 = dma2; + opl3sa2_state[card].cfg.io_base = io; + opl3sa2_state[card].cfg.irq = irq; + opl3sa2_state[card].cfg.dma = dma; + opl3sa2_state[card].cfg.dma2 = dma2; /* The MSS config: */ - cfg_mss[card].io_base = mss_io; - cfg_mss[card].irq = irq; - cfg_mss[card].dma = dma; - cfg_mss[card].dma2 = dma2; - cfg_mss[card].card_subtype = 1; /* No IRQ or DMA setup */ - - cfg_mpu[card].io_base = mpu_io; - cfg_mpu[card].irq = irq; - cfg_mpu[card].dma = -1; - cfg_mpu[card].always_detect = 1; /* Use shared IRQs */ + opl3sa2_state[card].cfg_mss.io_base = mss_io; + opl3sa2_state[card].cfg_mss.irq = irq; + opl3sa2_state[card].cfg_mss.dma = dma; + opl3sa2_state[card].cfg_mss.dma2 = dma2; + opl3sa2_state[card].cfg_mss.card_subtype = 1; /* No IRQ or DMA setup */ + + opl3sa2_state[card].cfg_mpu.io_base = mpu_io; + opl3sa2_state[card].cfg_mpu.irq = irq; + opl3sa2_state[card].cfg_mpu.dma = -1; + opl3sa2_state[card].cfg_mpu.always_detect = 1; /* Use shared IRQs */ /* Call me paranoid: */ - opl3sa2_clear_slots(&cfg[card]); - opl3sa2_clear_slots(&cfg_mss[card]); - opl3sa2_clear_slots(&cfg_mpu[card]); + opl3sa2_clear_slots(&opl3sa2_state[card].cfg); + opl3sa2_clear_slots(&opl3sa2_state[card].cfg_mss); + opl3sa2_clear_slots(&opl3sa2_state[card].cfg_mpu); } - if(!probe_opl3sa2(&cfg[card], card) || - !probe_opl3sa2_mss(&cfg_mss[card])) { + if (probe_opl3sa2(&opl3sa2_state[card].cfg, card)) + return -ENODEV; + + + if (!probe_opl3sa2_mss(&opl3sa2_state[card].cfg_mss)) { /* * If one or more cards are already registered, don't * return an error but print a warning. Note, this * should never really happen unless the hardware or * ISA PnP screwed up. */ - if(opl3sa2_cards_num) { + release_region(opl3sa2_state[card].cfg.io_base, 2); + + if (opl3sa2_cards_num) { printk(KERN_WARNING - "opl3sa2: There was a problem probing one " + PFX "There was a problem probing one " " of the ISA PNP cards, continuing\n"); opl3sa2_cards_num--; continue; @@ -1045,47 +1066,53 @@ return -ENODEV; } - attach_opl3sa2(&cfg[card], card); - conf_printf(chipset_name[card], &cfg[card]); - attach_opl3sa2_mss(&cfg_mss[card]); - attach_opl3sa2_mixer(&cfg[card], card); - - opl3sa2_data[card].card = card; + attach_opl3sa2(&opl3sa2_state[card].cfg, card); + conf_printf(opl3sa2_state[card].chipset_name, &opl3sa2_state[card].cfg); + attach_opl3sa2_mixer(&opl3sa2_state[card].cfg, card); + attach_opl3sa2_mss(&opl3sa2_state[card].cfg_mss); + + /* ewww =) */ + opl3sa2_state[card].card = card; +#ifdef CONFIG_PM /* register our power management capabilities */ - opl3sa2_data[card].pmdev = pm_register(PM_ISA_DEV, card, opl3sa2_pm_callback); - if (opl3sa2_data[card].pmdev) - opl3sa2_data[card].pmdev->data = &opl3sa2_data[card]; + opl3sa2_state[card].pmdev = pm_register(PM_ISA_DEV, card, opl3sa2_pm_callback); + if (opl3sa2_state[card].pmdev) + opl3sa2_state[card].pmdev->data = &opl3sa2_state[card]; +#endif /* CONFIG_PM */ /* * Set the Yamaha 3D enhancement mode (aka Ymersion) if asked to and * it's supported. */ - if(ymode != -1) { - if(chipset[card] == CHIPSET_OPL3SA2) { + if (ymode != -1) { + if (opl3sa2_state[card].chipset == CHIPSET_OPL3SA2) { printk(KERN_ERR - "opl3sa2: ymode not supported on OPL3-SA2\n"); + PFX "ymode not supported on OPL3-SA2\n"); } else { - opl3sa2_set_ymode(&cfg[card], ymode); + opl3sa2_set_ymode(&opl3sa2_state[card].cfg, ymode); } } /* Set A/D input to Mono loopback if asked to. */ - if(loopback != -1) { - opl3sa2_set_loopback(&cfg[card], loopback); + if (loopback != -1) { + opl3sa2_set_loopback(&opl3sa2_state[card].cfg, loopback); } - /* Attach MPU if we've been asked to do so */ - if(cfg_mpu[card].io_base != -1) { - if(probe_opl3sa2_mpu(&cfg_mpu[card])) { - attach_opl3sa2_mpu(&cfg_mpu[card]); + /* Attach MPU if we've been asked to do so, failure isn't fatal */ + if (opl3sa2_state[card].cfg_mpu.io_base != -1) { + if (probe_opl3sa2_mpu(&opl3sa2_state[card].cfg_mpu)) { + if (attach_opl3sa2_mpu(&opl3sa2_state[card].cfg_mpu)) { + printk(KERN_ERR PFX "failed to attach MPU401\n"); + opl3sa2_state[card].cfg_mpu.slots[1] = -1; + } } } } - if(isapnp) { - printk(KERN_NOTICE "opl3sa2: %d PnP card(s) found.\n", opl3sa2_cards_num); + if (isapnp) { + printk(KERN_NOTICE PFX "%d PnP card(s) found.\n", opl3sa2_cards_num); } return 0; @@ -1100,15 +1127,14 @@ int card; for(card = 0; card < opl3sa2_cards_num; card++) { - if (opl3sa2_data[card].pmdev) - pm_unregister(opl3sa2_data[card].pmdev); - - if(cfg_mpu[card].slots[1] != -1) { - unload_opl3sa2_mpu(&cfg_mpu[card]); - } - unload_opl3sa2_mss(&cfg_mss[card]); - unload_opl3sa2(&cfg[card], card); + if (opl3sa2_state[card].pmdev) + pm_unregister(opl3sa2_state[card].pmdev); + if(opl3sa2_state[card].cfg_mpu.slots[1] != -1) { + unload_opl3sa2_mpu(&opl3sa2_state[card].cfg_mpu); + } + unload_opl3sa2_mss(&opl3sa2_state[card].cfg_mss); + unload_opl3sa2(&opl3sa2_state[card].cfg, card); #ifdef CONFIG_PNP pnp_unregister_driver(&opl3sa2_driver); #endif diff -Nru a/sound/oss/pas2_midi.c b/sound/oss/pas2_midi.c --- a/sound/oss/pas2_midi.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/pas2_midi.c Sat Apr 12 14:44:09 2003 @@ -194,17 +194,17 @@ static struct midi_operations pas_midi_operations = { - owner: THIS_MODULE, - info: {"Pro Audio Spectrum", 0, 0, SNDCARD_PAS}, - converter: &std_midi_synth, - in_info: {0}, - open: pas_midi_open, - close: pas_midi_close, - outputc: pas_midi_out, - start_read: pas_midi_start_read, - end_read: pas_midi_end_read, - kick: pas_midi_kick, - buffer_status: pas_buffer_status, + .owner = THIS_MODULE, + .info = {"Pro Audio Spectrum", 0, 0, SNDCARD_PAS}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = pas_midi_open, + .close = pas_midi_close, + .outputc = pas_midi_out, + .start_read = pas_midi_start_read, + .end_read = pas_midi_end_read, + .kick = pas_midi_kick, + .buffer_status = pas_buffer_status, }; void __init pas_midi_init(void) diff -Nru a/sound/oss/pas2_mixer.c b/sound/oss/pas2_mixer.c --- a/sound/oss/pas2_mixer.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/pas2_mixer.c Sat Apr 12 14:44:07 2003 @@ -311,10 +311,10 @@ static struct mixer_operations pas_mixer_operations = { - owner: THIS_MODULE, - id: "PAS16", - name: "Pro Audio Spectrum 16", - ioctl: pas_mixer_ioctl + .owner = THIS_MODULE, + .id = "PAS16", + .name = "Pro Audio Spectrum 16", + .ioctl = pas_mixer_ioctl }; int __init diff -Nru a/sound/oss/pas2_pcm.c b/sound/oss/pas2_pcm.c --- a/sound/oss/pas2_pcm.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/pas2_pcm.c Sat Apr 12 14:44:06 2003 @@ -372,16 +372,16 @@ static struct audio_driver pas_audio_driver = { - owner: THIS_MODULE, - open: pas_audio_open, - close: pas_audio_close, - output_block: pas_audio_output_block, - start_input: pas_audio_start_input, - ioctl: pas_audio_ioctl, - prepare_for_input: pas_audio_prepare_for_input, - prepare_for_output: pas_audio_prepare_for_output, - halt_io: pas_audio_reset, - trigger: pas_audio_trigger + .owner = THIS_MODULE, + .open = pas_audio_open, + .close = pas_audio_close, + .output_block = pas_audio_output_block, + .start_input = pas_audio_start_input, + .ioctl = pas_audio_ioctl, + .prepare_for_input = pas_audio_prepare_for_input, + .prepare_for_output = pas_audio_prepare_for_output, + .halt_io = pas_audio_reset, + .trigger = pas_audio_trigger }; void __init pas_pcm_init(struct address_info *hw_config) diff -Nru a/sound/oss/pss.c b/sound/oss/pss.c --- a/sound/oss/pss.c Sat Apr 12 14:44:10 2003 +++ b/sound/oss/pss.c Sat Apr 12 14:44:10 2003 @@ -601,10 +601,10 @@ static struct mixer_operations pss_mixer_operations = { - owner: THIS_MODULE, - id: "SOUNDPORT", - name: "PSS-AD1848", - ioctl: pss_mixer_ioctl + .owner = THIS_MODULE, + .id = "SOUNDPORT", + .name = "PSS-AD1848", + .ioctl = pss_mixer_ioctl }; void disable_all_emulations(void) diff -Nru a/sound/oss/sb_audio.c b/sound/oss/sb_audio.c --- a/sound/oss/sb_audio.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/sb_audio.c Sat Apr 12 14:44:09 2003 @@ -927,100 +927,100 @@ static struct audio_driver sb1_audio_driver = /* SB1.x */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: sb_set_output_parms, - start_input: sb_set_input_parms, - prepare_for_input: sb1_audio_prepare_for_input, - prepare_for_output: sb1_audio_prepare_for_output, - halt_io: sb1_audio_halt_xfer, - trigger: sb1_audio_trigger, - set_speed: sb1_audio_set_speed, - set_bits: sb1_audio_set_bits, - set_channels: sb1_audio_set_channels + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = sb_set_output_parms, + .start_input = sb_set_input_parms, + .prepare_for_input = sb1_audio_prepare_for_input, + .prepare_for_output = sb1_audio_prepare_for_output, + .halt_io = sb1_audio_halt_xfer, + .trigger = sb1_audio_trigger, + .set_speed = sb1_audio_set_speed, + .set_bits = sb1_audio_set_bits, + .set_channels = sb1_audio_set_channels }; static struct audio_driver sb20_audio_driver = /* SB2.0 */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: sb_set_output_parms, - start_input: sb_set_input_parms, - prepare_for_input: sb1_audio_prepare_for_input, - prepare_for_output: sb1_audio_prepare_for_output, - halt_io: sb1_audio_halt_xfer, - trigger: sb20_audio_trigger, - set_speed: sb1_audio_set_speed, - set_bits: sb1_audio_set_bits, - set_channels: sb1_audio_set_channels + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = sb_set_output_parms, + .start_input = sb_set_input_parms, + .prepare_for_input = sb1_audio_prepare_for_input, + .prepare_for_output = sb1_audio_prepare_for_output, + .halt_io = sb1_audio_halt_xfer, + .trigger = sb20_audio_trigger, + .set_speed = sb1_audio_set_speed, + .set_bits = sb1_audio_set_bits, + .set_channels = sb1_audio_set_channels }; static struct audio_driver sb201_audio_driver = /* SB2.01 */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: sb_set_output_parms, - start_input: sb_set_input_parms, - prepare_for_input: sb1_audio_prepare_for_input, - prepare_for_output: sb1_audio_prepare_for_output, - halt_io: sb1_audio_halt_xfer, - trigger: sb20_audio_trigger, - set_speed: sb201_audio_set_speed, - set_bits: sb1_audio_set_bits, - set_channels: sb1_audio_set_channels + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = sb_set_output_parms, + .start_input = sb_set_input_parms, + .prepare_for_input = sb1_audio_prepare_for_input, + .prepare_for_output = sb1_audio_prepare_for_output, + .halt_io = sb1_audio_halt_xfer, + .trigger = sb20_audio_trigger, + .set_speed = sb201_audio_set_speed, + .set_bits = sb1_audio_set_bits, + .set_channels = sb1_audio_set_channels }; static struct audio_driver sbpro_audio_driver = /* SB Pro */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: sb_set_output_parms, - start_input: sb_set_input_parms, - prepare_for_input: sbpro_audio_prepare_for_input, - prepare_for_output: sbpro_audio_prepare_for_output, - halt_io: sb1_audio_halt_xfer, - trigger: sb20_audio_trigger, - set_speed: sbpro_audio_set_speed, - set_bits: sb1_audio_set_bits, - set_channels: sbpro_audio_set_channels + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = sb_set_output_parms, + .start_input = sb_set_input_parms, + .prepare_for_input = sbpro_audio_prepare_for_input, + .prepare_for_output = sbpro_audio_prepare_for_output, + .halt_io = sb1_audio_halt_xfer, + .trigger = sb20_audio_trigger, + .set_speed = sbpro_audio_set_speed, + .set_bits = sb1_audio_set_bits, + .set_channels = sbpro_audio_set_channels }; static struct audio_driver jazz16_audio_driver = /* Jazz16 and SM Wave */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: sb_set_output_parms, - start_input: sb_set_input_parms, - prepare_for_input: sbpro_audio_prepare_for_input, - prepare_for_output: sbpro_audio_prepare_for_output, - halt_io: sb1_audio_halt_xfer, - trigger: sb20_audio_trigger, - set_speed: jazz16_audio_set_speed, - set_bits: sb16_audio_set_bits, - set_channels: sbpro_audio_set_channels + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = sb_set_output_parms, + .start_input = sb_set_input_parms, + .prepare_for_input = sbpro_audio_prepare_for_input, + .prepare_for_output = sbpro_audio_prepare_for_output, + .halt_io = sb1_audio_halt_xfer, + .trigger = sb20_audio_trigger, + .set_speed = jazz16_audio_set_speed, + .set_bits = sb16_audio_set_bits, + .set_channels = sbpro_audio_set_channels }; static struct audio_driver sb16_audio_driver = /* SB16 */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: sb_set_output_parms, - start_input: sb_set_input_parms, - prepare_for_input: sb16_audio_prepare_for_input, - prepare_for_output: sb16_audio_prepare_for_output, - halt_io: sb1_audio_halt_xfer, - copy_user: sb16_copy_from_user, - trigger: sb16_audio_trigger, - set_speed: sb16_audio_set_speed, - set_bits: sb16_audio_set_bits, - set_channels: sbpro_audio_set_channels, - mmap: sb16_audio_mmap + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = sb_set_output_parms, + .start_input = sb_set_input_parms, + .prepare_for_input = sb16_audio_prepare_for_input, + .prepare_for_output = sb16_audio_prepare_for_output, + .halt_io = sb1_audio_halt_xfer, + .copy_user = sb16_copy_from_user, + .trigger = sb16_audio_trigger, + .set_speed = sb16_audio_set_speed, + .set_bits = sb16_audio_set_bits, + .set_channels = sbpro_audio_set_channels, + .mmap = sb16_audio_mmap }; void sb_audio_init(sb_devc * devc, char *name, struct module *owner) diff -Nru a/sound/oss/sb_ess.c b/sound/oss/sb_ess.c --- a/sound/oss/sb_ess.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/sb_ess.c Sat Apr 12 14:44:07 2003 @@ -718,18 +718,18 @@ static struct audio_driver ess_audio_driver = /* ESS ES688/1688 */ { - owner: THIS_MODULE, - open: sb_audio_open, - close: sb_audio_close, - output_block: ess_set_output_parms, - start_input: ess_set_input_parms, - prepare_for_input: ess_audio_prepare_for_input, - prepare_for_output: ess_audio_prepare_for_output, - halt_io: ess_audio_halt_xfer, - trigger: ess_audio_trigger, - set_speed: ess_audio_set_speed, - set_bits: ess_audio_set_bits, - set_channels: ess_audio_set_channels + .owner = THIS_MODULE, + .open = sb_audio_open, + .close = sb_audio_close, + .output_block = ess_set_output_parms, + .start_input = ess_set_input_parms, + .prepare_for_input = ess_audio_prepare_for_input, + .prepare_for_output = ess_audio_prepare_for_output, + .halt_io = ess_audio_halt_xfer, + .trigger = ess_audio_trigger, + .set_speed = ess_audio_set_speed, + .set_bits = ess_audio_set_bits, + .set_channels = ess_audio_set_channels }; /* diff -Nru a/sound/oss/sb_midi.c b/sound/oss/sb_midi.c --- a/sound/oss/sb_midi.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/sb_midi.c Sat Apr 12 14:44:06 2003 @@ -146,16 +146,16 @@ static struct midi_operations sb_midi_operations = { - owner: THIS_MODULE, - info: {"Sound Blaster", 0, 0, SNDCARD_SB}, - converter: &std_midi_synth, - in_info: {0}, - open: sb_midi_open, - close: sb_midi_close, - ioctl: sb_midi_ioctl, - outputc: sb_midi_out, - start_read: sb_midi_start_read, - end_read: sb_midi_end_read, + .owner = THIS_MODULE, + .info = {"Sound Blaster", 0, 0, SNDCARD_SB}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = sb_midi_open, + .close = sb_midi_close, + .ioctl = sb_midi_ioctl, + .outputc = sb_midi_out, + .start_read = sb_midi_start_read, + .end_read = sb_midi_end_read, }; void sb_dsp_midi_init(sb_devc * devc, struct module *owner) diff -Nru a/sound/oss/sb_mixer.c b/sound/oss/sb_mixer.c --- a/sound/oss/sb_mixer.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/sb_mixer.c Sat Apr 12 14:44:06 2003 @@ -626,18 +626,18 @@ static struct mixer_operations sb_mixer_operations = { - owner: THIS_MODULE, - id: "SB", - name: "Sound Blaster", - ioctl: sb_mixer_ioctl + .owner = THIS_MODULE, + .id = "SB", + .name = "Sound Blaster", + .ioctl = sb_mixer_ioctl }; static struct mixer_operations als007_mixer_operations = { - owner: THIS_MODULE, - id: "ALS007", - name: "Avance ALS-007", - ioctl: sb_mixer_ioctl + .owner = THIS_MODULE, + .id = "ALS007", + .name = "Avance ALS-007", + .ioctl = sb_mixer_ioctl }; static void sb_mixer_reset(sb_devc * devc) diff -Nru a/sound/oss/sonicvibes.c b/sound/oss/sonicvibes.c --- a/sound/oss/sonicvibes.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/sonicvibes.c Sat Apr 12 14:44:07 2003 @@ -100,7 +100,6 @@ /*****************************************************************************/ -#include #include #include #include @@ -1267,11 +1266,11 @@ } static /*const*/ struct file_operations sv_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: sv_ioctl_mixdev, - open: sv_open_mixdev, - release: sv_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = sv_ioctl_mixdev, + .open = sv_open_mixdev, + .release = sv_release_mixdev, }; /* --------------------------------------------------------------------- */ @@ -1978,15 +1977,15 @@ } static /*const*/ struct file_operations sv_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: sv_read, - write: sv_write, - poll: sv_poll, - ioctl: sv_ioctl, - mmap: sv_mmap, - open: sv_open, - release: sv_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = sv_read, + .write = sv_write, + .poll = sv_poll, + .ioctl = sv_ioctl, + .mmap = sv_mmap, + .open = sv_open, + .release = sv_release, }; /* --------------------------------------------------------------------- */ @@ -2260,13 +2259,13 @@ } static /*const*/ struct file_operations sv_midi_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: sv_midi_read, - write: sv_midi_write, - poll: sv_midi_poll, - open: sv_midi_open, - release: sv_midi_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = sv_midi_read, + .write = sv_midi_write, + .poll = sv_midi_poll, + .open = sv_midi_open, + .release = sv_midi_release, }; /* --------------------------------------------------------------------- */ @@ -2435,11 +2434,11 @@ } static /*const*/ struct file_operations sv_dmfm_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: sv_dmfm_ioctl, - open: sv_dmfm_open, - release: sv_dmfm_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = sv_dmfm_ioctl, + .open = sv_dmfm_open, + .release = sv_dmfm_release, }; /* --------------------------------------------------------------------- */ diff -Nru a/sound/oss/soundcard.c b/sound/oss/soundcard.c --- a/sound/oss/soundcard.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/soundcard.c Sat Apr 12 14:44:08 2003 @@ -491,15 +491,15 @@ } struct file_operations oss_sound_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: sound_read, - write: sound_write, - poll: sound_poll, - ioctl: sound_ioctl, - mmap: sound_mmap, - open: sound_open, - release: sound_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = sound_read, + .write = sound_write, + .poll = sound_poll, + .ioctl = sound_ioctl, + .mmap = sound_mmap, + .open = sound_open, + .release = sound_release, }; /* diff -Nru a/sound/oss/sys_timer.c b/sound/oss/sys_timer.c --- a/sound/oss/sys_timer.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/sys_timer.c Sat Apr 12 14:44:08 2003 @@ -275,14 +275,14 @@ struct sound_timer_operations default_sound_timer = { - owner: THIS_MODULE, - info: {"System clock", 0}, - priority: 0, /* Priority */ - devlink: 0, /* Local device link */ - open: def_tmr_open, - close: def_tmr_close, - event: def_tmr_event, - get_time: def_tmr_get_time, - ioctl: def_tmr_ioctl, - arm_timer: def_tmr_arm + .owner = THIS_MODULE, + .info = {"System clock", 0}, + .priority = 0, /* Priority */ + .devlink = 0, /* Local device link */ + .open = def_tmr_open, + .close = def_tmr_close, + .event = def_tmr_event, + .get_time = def_tmr_get_time, + .ioctl = def_tmr_ioctl, + .arm_timer = def_tmr_arm }; diff -Nru a/sound/oss/trident.c b/sound/oss/trident.c --- a/sound/oss/trident.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/trident.c Sat Apr 12 14:44:09 2003 @@ -181,7 +181,6 @@ #include #include -#include #include #include #include @@ -2772,15 +2771,15 @@ } static /*const*/ struct file_operations trident_audio_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: trident_read, - write: trident_write, - poll: trident_poll, - ioctl: trident_ioctl, - mmap: trident_mmap, - open: trident_open, - release: trident_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = trident_read, + .write = trident_write, + .poll = trident_poll, + .ioctl = trident_ioctl, + .mmap = trident_mmap, + .open = trident_open, + .release = trident_release, }; /* trident specific AC97 functions */ @@ -3894,10 +3893,10 @@ } static /*const*/ struct file_operations trident_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: trident_ioctl_mixdev, - open: trident_open_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = trident_ioctl_mixdev, + .open = trident_open_mixdev, }; static int ali_reset_5451(struct trident_card *card) @@ -4376,12 +4375,12 @@ #define TRIDENT_MODULE_NAME "trident" static struct pci_driver trident_pci_driver = { - name: TRIDENT_MODULE_NAME, - id_table: trident_pci_tbl, - probe: trident_probe, - remove: __devexit_p(trident_remove), - suspend: trident_suspend, - resume: trident_resume + .name = TRIDENT_MODULE_NAME, + .id_table = trident_pci_tbl, + .probe = trident_probe, + .remove = __devexit_p(trident_remove), + .suspend = trident_suspend, + .resume = trident_resume }; static int __init trident_init_module (void) diff -Nru a/sound/oss/uart401.c b/sound/oss/uart401.c --- a/sound/oss/uart401.c Sat Apr 12 14:44:09 2003 +++ b/sound/oss/uart401.c Sat Apr 12 14:44:09 2003 @@ -204,17 +204,17 @@ static const struct midi_operations uart401_operations = { - owner: THIS_MODULE, - info: {"MPU-401 (UART) MIDI", 0, 0, SNDCARD_MPU401}, - converter: &std_midi_synth, - in_info: {0}, - open: uart401_open, - close: uart401_close, - outputc: uart401_out, - start_read: uart401_start_read, - end_read: uart401_end_read, - kick: uart401_kick, - buffer_status: uart401_buffer_status, + .owner = THIS_MODULE, + .info = {"MPU-401 (UART) MIDI", 0, 0, SNDCARD_MPU401}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = uart401_open, + .close = uart401_close, + .outputc = uart401_out, + .start_read = uart401_start_read, + .end_read = uart401_end_read, + .kick = uart401_kick, + .buffer_status = uart401_buffer_status, }; static void enter_uart_mode(uart401_devc * devc) diff -Nru a/sound/oss/uart6850.c b/sound/oss/uart6850.c --- a/sound/oss/uart6850.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/uart6850.c Sat Apr 12 14:44:08 2003 @@ -231,18 +231,18 @@ static struct midi_operations uart6850_operations = { - owner: THIS_MODULE, - info: {"6850 UART", 0, 0, SNDCARD_UART6850}, - converter: &std_midi_synth, - in_info: {0}, - open: uart6850_open, - close: uart6850_close, - outputc: uart6850_out, - start_read: uart6850_start_read, - end_read: uart6850_end_read, - kick: uart6850_kick, - command: uart6850_command, - buffer_status: uart6850_buffer_status + .owner = THIS_MODULE, + .info = {"6850 UART", 0, 0, SNDCARD_UART6850}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = uart6850_open, + .close = uart6850_close, + .outputc = uart6850_out, + .start_read = uart6850_start_read, + .end_read = uart6850_end_read, + .kick = uart6850_kick, + .command = uart6850_command, + .buffer_status = uart6850_buffer_status }; diff -Nru a/sound/oss/v_midi.c b/sound/oss/v_midi.c --- a/sound/oss/v_midi.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/v_midi.c Sat Apr 12 14:44:06 2003 @@ -133,30 +133,30 @@ static struct midi_operations v_midi_operations = { - owner: THIS_MODULE, - info: {"Loopback MIDI Port 1", 0, 0, SNDCARD_VMIDI}, - converter: &std_midi_synth, - in_info: {0}, - open: v_midi_open, - close: v_midi_close, - ioctl: v_midi_ioctl, - outputc: v_midi_out, - start_read: v_midi_start_read, - end_read: v_midi_end_read, + .owner = THIS_MODULE, + .info = {"Loopback MIDI Port 1", 0, 0, SNDCARD_VMIDI}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = v_midi_open, + .close = v_midi_close, + .ioctl = v_midi_ioctl, + .outputc = v_midi_out, + .start_read = v_midi_start_read, + .end_read = v_midi_end_read, }; static struct midi_operations v_midi_operations2 = { - owner: THIS_MODULE, - info: {"Loopback MIDI Port 2", 0, 0, SNDCARD_VMIDI}, - converter: &std_midi_synth, - in_info: {0}, - open: v_midi_open, - close: v_midi_close, - ioctl: v_midi_ioctl, - outputc: v_midi_out, - start_read: v_midi_start_read, - end_read: v_midi_end_read, + .owner = THIS_MODULE, + .info = {"Loopback MIDI Port 2", 0, 0, SNDCARD_VMIDI}, + .converter = &std_midi_synth, + .in_info = {0}, + .open = v_midi_open, + .close = v_midi_close, + .ioctl = v_midi_ioctl, + .outputc = v_midi_out, + .start_read = v_midi_start_read, + .end_read = v_midi_end_read, }; /* diff -Nru a/sound/oss/via82cxxx_audio.c b/sound/oss/via82cxxx_audio.c --- a/sound/oss/via82cxxx_audio.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/via82cxxx_audio.c Sat Apr 12 14:44:07 2003 @@ -360,10 +360,10 @@ static struct pci_driver via_driver = { - name: VIA_MODULE_NAME, - id_table: via_pci_tbl, - probe: via_init_one, - remove: __devexit_p(via_remove_one), + .name = VIA_MODULE_NAME, + .id_table = via_pci_tbl, + .probe = via_init_one, + .remove = __devexit_p(via_remove_one), }; @@ -1412,10 +1412,10 @@ static struct file_operations via_mixer_fops = { - owner: THIS_MODULE, - open: via_mixer_open, - llseek: no_llseek, - ioctl: via_mixer_ioctl, + .owner = THIS_MODULE, + .open = via_mixer_open, + .llseek = no_llseek, + .ioctl = via_mixer_ioctl, }; @@ -1783,15 +1783,15 @@ */ static struct file_operations via_dsp_fops = { - owner: THIS_MODULE, - open: via_dsp_open, - release: via_dsp_release, - read: via_dsp_read, - write: via_dsp_write, - poll: via_dsp_poll, - llseek: no_llseek, - ioctl: via_dsp_ioctl, - mmap: via_dsp_mmap, + .owner = THIS_MODULE, + .open = via_dsp_open, + .release = via_dsp_release, + .read = via_dsp_read, + .write = via_dsp_write, + .poll = via_dsp_poll, + .llseek = no_llseek, + .ioctl = via_dsp_ioctl, + .mmap = via_dsp_mmap, }; @@ -1902,10 +1902,10 @@ struct vm_operations_struct via_mm_ops = { - nopage: via_mm_nopage, + .nopage = via_mm_nopage, #ifndef VM_RESERVED - swapout: via_mm_swapout, + .swapout = via_mm_swapout, #endif }; diff -Nru a/sound/oss/vidc.c b/sound/oss/vidc.c --- a/sound/oss/vidc.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/vidc.c Sat Apr 12 14:44:06 2003 @@ -366,26 +366,26 @@ static struct audio_driver vidc_audio_driver = { - owner: THIS_MODULE, - open: vidc_audio_open, - close: vidc_audio_close, - output_block: vidc_audio_output_block, - start_input: vidc_audio_start_input, - prepare_for_input: vidc_audio_prepare_for_input, - prepare_for_output: vidc_audio_prepare_for_output, - halt_io: vidc_audio_reset, - local_qlen: vidc_audio_local_qlen, - trigger: vidc_audio_trigger, - set_speed: vidc_audio_set_speed, - set_bits: vidc_audio_set_format, - set_channels: vidc_audio_set_channels + .owner = THIS_MODULE, + .open = vidc_audio_open, + .close = vidc_audio_close, + .output_block = vidc_audio_output_block, + .start_input = vidc_audio_start_input, + .prepare_for_input = vidc_audio_prepare_for_input, + .prepare_for_output = vidc_audio_prepare_for_output, + .halt_io = vidc_audio_reset, + .local_qlen = vidc_audio_local_qlen, + .trigger = vidc_audio_trigger, + .set_speed = vidc_audio_set_speed, + .set_bits = vidc_audio_set_format, + .set_channels = vidc_audio_set_channels }; static struct mixer_operations vidc_mixer_operations = { - owner: THIS_MODULE, - id: "VIDC", - name: "VIDCsound", - ioctl: vidc_mixer_ioctl + .owner = THIS_MODULE, + .id = "VIDC", + .name = "VIDCsound", + .ioctl = vidc_mixer_ioctl }; void vidc_update_filler(int format, int channels) diff -Nru a/sound/oss/waveartist.c b/sound/oss/waveartist.c --- a/sound/oss/waveartist.c Sat Apr 12 14:44:07 2003 +++ b/sound/oss/waveartist.c Sat Apr 12 14:44:07 2003 @@ -815,21 +815,21 @@ } static struct audio_driver waveartist_audio_driver = { - owner: THIS_MODULE, - open: waveartist_open, - close: waveartist_close, - output_block: waveartist_output_block, - start_input: waveartist_start_input, - ioctl: waveartist_ioctl, - prepare_for_input: waveartist_prepare_for_input, - prepare_for_output: waveartist_prepare_for_output, - halt_io: waveartist_halt, - halt_input: waveartist_halt_input, - halt_output: waveartist_halt_output, - trigger: waveartist_trigger, - set_speed: waveartist_set_speed, - set_bits: waveartist_set_bits, - set_channels: waveartist_set_channels + .owner = THIS_MODULE, + .open = waveartist_open, + .close = waveartist_close, + .output_block = waveartist_output_block, + .start_input = waveartist_start_input, + .ioctl = waveartist_ioctl, + .prepare_for_input = waveartist_prepare_for_input, + .prepare_for_output = waveartist_prepare_for_output, + .halt_io = waveartist_halt, + .halt_input = waveartist_halt_input, + .halt_output = waveartist_halt_output, + .trigger = waveartist_trigger, + .set_speed = waveartist_set_speed, + .set_bits = waveartist_set_bits, + .set_channels = waveartist_set_channels }; @@ -1062,15 +1062,15 @@ } static const struct waveartist_mixer_info waveartist_mixer = { - supported_devs: SUPPORTED_MIXER_DEVICES | SOUND_MASK_IGAIN, - recording_devs: SOUND_MASK_LINE | SOUND_MASK_MIC | + .supported_devs = SUPPORTED_MIXER_DEVICES | SOUND_MASK_IGAIN, + .recording_devs = SOUND_MASK_LINE | SOUND_MASK_MIC | SOUND_MASK_LINE1 | SOUND_MASK_LINE2 | SOUND_MASK_IMIX, - stereo_devs: (SUPPORTED_MIXER_DEVICES | SOUND_MASK_IGAIN) & ~ + .stereo_devs = (SUPPORTED_MIXER_DEVICES | SOUND_MASK_IGAIN) & ~ (SOUND_MASK_SPEAKER | SOUND_MASK_IMIX), - select_input: waveartist_select_input, - decode_mixer: waveartist_decode_mixer, - get_mixer: waveartist_get_mixer, + .select_input = waveartist_select_input, + .decode_mixer = waveartist_decode_mixer, + .get_mixer = waveartist_get_mixer, }; static void @@ -1203,10 +1203,10 @@ static struct mixer_operations waveartist_mixer_operations = { - owner: THIS_MODULE, - id: "WaveArtist", - name: "WaveArtist", - ioctl: waveartist_mixer_ioctl + .owner = THIS_MODULE, + .id = "WaveArtist", + .name = "WaveArtist", + .ioctl = waveartist_mixer_ioctl }; static void @@ -1692,24 +1692,24 @@ * Waveartist specific mixer information. */ static const struct waveartist_mixer_info netwinder_mixer = { - supported_devs: SOUND_MASK_VOLUME | SOUND_MASK_SYNTH | + .supported_devs = SOUND_MASK_VOLUME | SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_SPEAKER | SOUND_MASK_LINE | SOUND_MASK_MIC | SOUND_MASK_IMIX | SOUND_MASK_LINE1 | SOUND_MASK_PHONEIN | SOUND_MASK_PHONEOUT| SOUND_MASK_IGAIN, - recording_devs: SOUND_MASK_LINE | SOUND_MASK_MIC | + .recording_devs = SOUND_MASK_LINE | SOUND_MASK_MIC | SOUND_MASK_IMIX | SOUND_MASK_LINE1 | SOUND_MASK_PHONEIN, - stereo_devs: SOUND_MASK_VOLUME | SOUND_MASK_SYNTH | + .stereo_devs = SOUND_MASK_VOLUME | SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_LINE | SOUND_MASK_IMIX | SOUND_MASK_IGAIN, - select_input: netwinder_select_input, - decode_mixer: netwinder_decode_mixer, - get_mixer: netwinder_get_mixer, + .select_input = netwinder_select_input, + .decode_mixer = netwinder_decode_mixer, + .get_mixer = netwinder_get_mixer, }; static void diff -Nru a/sound/oss/wavfront.c b/sound/oss/wavfront.c --- a/sound/oss/wavfront.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/wavfront.c Sat Apr 12 14:44:08 2003 @@ -1961,11 +1961,11 @@ } static /*const*/ struct file_operations wavefront_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: wavefront_ioctl, - open: wavefront_open, - release: wavefront_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = wavefront_ioctl, + .open = wavefront_open, + .release = wavefront_release, }; @@ -2078,25 +2078,25 @@ static struct synth_operations wavefront_operations = { - owner: THIS_MODULE, - id: "WaveFront", - info: &wavefront_info, - midi_dev: 0, - synth_type: SYNTH_TYPE_SAMPLE, - synth_subtype: SAMPLE_TYPE_WAVEFRONT, - open: wavefront_oss_open, - close: wavefront_oss_close, - ioctl: wavefront_oss_ioctl, - kill_note: midi_synth_kill_note, - start_note: midi_synth_start_note, - set_instr: midi_synth_set_instr, - reset: midi_synth_reset, - load_patch: midi_synth_load_patch, - aftertouch: midi_synth_aftertouch, - controller: midi_synth_controller, - panning: midi_synth_panning, - bender: midi_synth_bender, - setup_voice: midi_synth_setup_voice + .owner = THIS_MODULE, + .id = "WaveFront", + .info = &wavefront_info, + .midi_dev = 0, + .synth_type = SYNTH_TYPE_SAMPLE, + .synth_subtype = SAMPLE_TYPE_WAVEFRONT, + .open = wavefront_oss_open, + .close = wavefront_oss_close, + .ioctl = wavefront_oss_ioctl, + .kill_note = midi_synth_kill_note, + .start_note = midi_synth_start_note, + .set_instr = midi_synth_set_instr, + .reset = midi_synth_reset, + .load_patch = midi_synth_load_patch, + .aftertouch = midi_synth_aftertouch, + .controller = midi_synth_controller, + .panning = midi_synth_panning, + .bender = midi_synth_bender, + .setup_voice = midi_synth_setup_voice }; #endif /* OSS_SUPPORT_SEQ */ diff -Nru a/sound/oss/wf_midi.c b/sound/oss/wf_midi.c --- a/sound/oss/wf_midi.c Sat Apr 12 14:44:06 2003 +++ b/sound/oss/wf_midi.c Sat Apr 12 14:44:06 2003 @@ -552,16 +552,16 @@ static struct midi_operations wf_mpu_midi_proto = { - owner: THIS_MODULE, - info: {"WF-MPU MIDI", 0, MIDI_CAP_MPU401, SNDCARD_MPU401}, - in_info: {0}, /* in_info */ - open: wf_mpu_open, - close: wf_mpu_close, - ioctl: wf_mpu_ioctl, - outputc: wf_mpu_out, - start_read: wf_mpu_start_read, - end_read: wf_mpu_end_read, - buffer_status: wf_mpu_buffer_status, + .owner = THIS_MODULE, + .info = {"WF-MPU MIDI", 0, MIDI_CAP_MPU401, SNDCARD_MPU401}, + .in_info = {0}, /* in_info */ + .open = wf_mpu_open, + .close = wf_mpu_close, + .ioctl = wf_mpu_ioctl, + .outputc = wf_mpu_out, + .start_read = wf_mpu_start_read, + .end_read = wf_mpu_end_read, + .buffer_status = wf_mpu_buffer_status, }; static struct synth_info wf_mpu_synth_info_proto = @@ -668,27 +668,27 @@ static struct synth_operations wf_mpu_synth_proto = { - owner: THIS_MODULE, - id: "WaveFront (ICS2115)", - info: NULL, /* info field, filled in during configuration */ - midi_dev: 0, /* MIDI dev XXX should this be -1 ? */ - synth_type: SYNTH_TYPE_MIDI, - synth_subtype: SAMPLE_TYPE_WAVEFRONT, - open: wf_mpu_synth_open, - close: wf_mpu_synth_close, - ioctl: wf_mpu_synth_ioctl, - kill_note: midi_synth_kill_note, - start_note: midi_synth_start_note, - set_instr: midi_synth_set_instr, - reset: midi_synth_reset, - hw_control: midi_synth_hw_control, - load_patch: midi_synth_load_patch, - aftertouch: midi_synth_aftertouch, - controller: midi_synth_controller, - panning: midi_synth_panning, - bender: midi_synth_bender, - setup_voice: midi_synth_setup_voice, - send_sysex: midi_synth_send_sysex + .owner = THIS_MODULE, + .id = "WaveFront (ICS2115)", + .info = NULL, /* info field, filled in during configuration */ + .midi_dev = 0, /* MIDI dev XXX should this be -1 ? */ + .synth_type = SYNTH_TYPE_MIDI, + .synth_subtype = SAMPLE_TYPE_WAVEFRONT, + .open = wf_mpu_synth_open, + .close = wf_mpu_synth_close, + .ioctl = wf_mpu_synth_ioctl, + .kill_note = midi_synth_kill_note, + .start_note = midi_synth_start_note, + .set_instr = midi_synth_set_instr, + .reset = midi_synth_reset, + .hw_control = midi_synth_hw_control, + .load_patch = midi_synth_load_patch, + .aftertouch = midi_synth_aftertouch, + .controller = midi_synth_controller, + .panning = midi_synth_panning, + .bender = midi_synth_bender, + .setup_voice = midi_synth_setup_voice, + .send_sysex = midi_synth_send_sysex }; static int diff -Nru a/sound/oss/ymfpci.c b/sound/oss/ymfpci.c --- a/sound/oss/ymfpci.c Sat Apr 12 14:44:08 2003 +++ b/sound/oss/ymfpci.c Sat Apr 12 14:44:08 2003 @@ -2038,23 +2038,23 @@ } static /*const*/ struct file_operations ymf_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - read: ymf_read, - write: ymf_write, - poll: ymf_poll, - ioctl: ymf_ioctl, - mmap: ymf_mmap, - open: ymf_open, - release: ymf_release, + .owner = THIS_MODULE, + .llseek = no_llseek, + .read = ymf_read, + .write = ymf_write, + .poll = ymf_poll, + .ioctl = ymf_ioctl, + .mmap = ymf_mmap, + .open = ymf_open, + .release = ymf_release, }; static /*const*/ struct file_operations ymf_mixer_fops = { - owner: THIS_MODULE, - llseek: no_llseek, - ioctl: ymf_ioctl_mixdev, - open: ymf_open_mixdev, - release: ymf_release_mixdev, + .owner = THIS_MODULE, + .llseek = no_llseek, + .ioctl = ymf_ioctl_mixdev, + .open = ymf_open_mixdev, + .release = ymf_release_mixdev, }; /* @@ -2650,12 +2650,12 @@ MODULE_LICENSE("GPL"); static struct pci_driver ymfpci_driver = { - name: "ymfpci", - id_table: ymf_id_tbl, - probe: ymf_probe_one, - remove: __devexit_p(ymf_remove_one), - suspend: ymf_suspend, - resume: ymf_resume + .name = "ymfpci", + .id_table = ymf_id_tbl, + .probe = ymf_probe_one, + .remove = __devexit_p(ymf_remove_one), + .suspend = ymf_suspend, + .resume = ymf_resume }; static int __init ymf_init_module(void) diff -Nru a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c --- a/sound/pci/ac97/ac97_codec.c Sat Apr 12 14:44:07 2003 +++ b/sound/pci/ac97/ac97_codec.c Sat Apr 12 14:44:07 2003 @@ -113,7 +113,7 @@ { 0x414c4740, 0xfffffff0, "ALC202", NULL, NULL }, { 0x414c4750, 0xfffffff0, "ALC250", NULL, NULL }, { 0x434d4941, 0xffffffff, "CMI9738", NULL, NULL }, -{ 0x434d4961, 0xffffffff, "CMI9739", NULL, NULL }, +{ 0x434d4961, 0xffffffff, "CMI9739", patch_cm9739, NULL }, { 0x43525900, 0xfffffff8, "CS4297", NULL, NULL }, { 0x43525910, 0xfffffff8, "CS4297A", patch_cirrus_spdif, NULL }, { 0x43525920, 0xfffffff8, "CS4294/4298", NULL, NULL }, @@ -1056,15 +1056,13 @@ return snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 0x0004, val); } -static const snd_kcontrol_new_t snd_ac97_ad1980_spdif_source = - { - iface: SNDRV_CTL_ELEM_IFACE_MIXER, - name: SNDRV_CTL_NAME_IEC958("",PLAYBACK,NONE) "Source", - info: snd_ac97_ad1980_spdif_source_info, - get: snd_ac97_ad1980_spdif_source_get, - put: snd_ac97_ad1980_spdif_source_put, - }; - +static const snd_kcontrol_new_t snd_ac97_ad1980_spdif_source = { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,NONE) "Source", + .info = snd_ac97_ad1980_spdif_source_info, + .get = snd_ac97_ad1980_spdif_source_get, + .put = snd_ac97_ad1980_spdif_source_put, +}; /* * ALC650 @@ -1243,6 +1241,70 @@ AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",NONE,NONE) "Mute", AC97_YMF753_DIT_CTRL2, 2, 1, 1) }; + +/* + * C-Media codecs + */ + +static int snd_ac97_cmedia_spdif_playback_source_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = { "Analog", "Digital" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 2; + if (uinfo->value.enumerated.item > 1) + uinfo->value.enumerated.item = 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_ac97_cmedia_spdif_playback_source_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + unsigned short val; + + val = ac97->regs[AC97_CM9739_SPDIF_CTRL]; + ucontrol->value.enumerated.item[0] = (val >> 1) & 0x01; + return 0; +} + +static int snd_ac97_cmedia_spdif_playback_source_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + ac97_t *ac97 = snd_kcontrol_chip(kcontrol); + + return snd_ac97_update_bits(ac97, AC97_CM9739_SPDIF_CTRL, + 0x01 << 1, + (ucontrol->value.enumerated.item[0] & 0x01) << 1); +} + +static const snd_kcontrol_new_t snd_ac97_cm9739_controls_spdif[] = { + /* BIT 0: SPDI_EN - always true */ + { /* BIT 1: SPDIFS */ + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,NONE) "Source", + .info = snd_ac97_cmedia_spdif_playback_source_info, + .get = snd_ac97_cmedia_spdif_playback_source_get, + .put = snd_ac97_cmedia_spdif_playback_source_put, + }, + /* BIT 2: IG_SPIV */ + AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Valid Switch", AC97_CM9739_SPDIF_CTRL, 2, 1, 0), + /* BIT 3: SPI2F */ + AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,NONE) "Monitor", AC97_CM9739_SPDIF_CTRL, 3, 1, 0), + /* BIT 4: SPI2SDI */ + AC97_SINGLE(SNDRV_CTL_NAME_IEC958("",CAPTURE,SWITCH), AC97_CM9739_SPDIF_CTRL, 4, 1, 0), + /* BIT 8: SPD32 - 32bit SPDIF - not supported yet */ +}; + +static const snd_kcontrol_new_t snd_ac97_cm9739_controls[] = { + AC97_SINGLE("Line-In As Surround", AC97_CM9739_MULTI_CHAN, 10, 1, 0), +}; + +static const snd_kcontrol_new_t snd_ac97_cm9738_controls[] = { + AC97_SINGLE("Line-In As Surround", AC97_CM9738_VENDOR_CTRL, 10, 1, 0), + AC97_SINGLE("Duplicate Front", AC97_CM9738_VENDOR_CTRL, 13, 1, 0), +}; + /* * */ @@ -1572,12 +1634,18 @@ ac97->spec.ad18xx.pcmreg[2] = 0x9f1f; } } else { + /* FIXME: C-Media chips have no PCM volume!! */ + if (/*ac97->id == 0x434d4941 ||*/ + ac97->id == 0x434d4942 || + ac97->id == 0x434d4961) + goto no_pcm; for (idx = 0; idx < 2; idx++) if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_pcm[idx], ac97))) < 0) return err; } snd_ac97_write_cache(ac97, AC97_PCM, 0x9f1f); + no_pcm: /* build Capture controls */ for (idx = 0; idx < 3; idx++) if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_capture[idx], ac97))) < 0) @@ -1721,13 +1789,21 @@ for (idx = 0; idx < 5; idx++) if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_spdif[idx], ac97))) < 0) return err; - if (ac97->id == AC97_ID_YMF753) { + switch (ac97->id) { + case AC97_ID_YMF753: for (idx = 0; idx < 3; idx++) if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_ymf753_controls_spdif[idx], ac97))) < 0) return err; - } else if (ac97->id == AC97_ID_AD1980) { + break; + case AC97_ID_AD1980: if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_ad1980_spdif_source, ac97))) < 0) return err; + break; + case AC97_ID_CM9739: + for (idx = 0; idx < ARRAY_SIZE(snd_ac97_cm9739_controls_spdif); idx++) + if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_cm9739_controls_spdif[idx], ac97))) < 0) + return err; + break; } /* set default PCM S/PDIF params */ /* consumer,PCM audio,no copyright,no preemphasis,PCM coder,original,48000Hz */ @@ -1770,6 +1846,16 @@ if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_controls_vt1616[idx], ac97))) < 0) return err; break; + case AC97_ID_CM9739: + for (idx = 1; idx < ARRAY_SIZE(snd_ac97_cm9739_controls); idx++) + if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_cm9739_controls[idx], ac97))) < 0) + return err; + break; + case AC97_ID_CM9738: + for (idx = 1; idx < ARRAY_SIZE(snd_ac97_cm9738_controls); idx++) + if ((err = snd_ctl_add(card, snd_ac97_cnew(&snd_ac97_cm9738_controls[idx], ac97))) < 0) + return err; + break; default: /* nothing */ break; @@ -2029,7 +2115,12 @@ } if (ac97->ext_id & AC97_EI_SPDIF) { /* codec specific code (patch) should override these values */ - ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000 | + if (ac97->flags & AC97_CS_SPDIF) + ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_44100; + else if (ac97->id == AC97_ID_CM9739) + ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000; + else + ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_32000; } @@ -2149,6 +2240,12 @@ ac97->card = card; spin_lock_init(&ac97->reg_lock); + ac97->pci = _ac97->pci; + if (ac97->pci) { + pci_read_config_word(ac97->pci, PCI_SUBSYSTEM_VENDOR_ID, &ac97->subsystem_vendor); + pci_read_config_word(ac97->pci, PCI_SUBSYSTEM_ID, &ac97->subsystem_device); + } + if (ac97->reset) { ac97->reset(ac97); goto __access_ok; @@ -2537,7 +2634,7 @@ static int set_spdif_rate(ac97_t *ac97, unsigned short rate) { - unsigned short old, bits, reg; + unsigned short old, bits, reg, mask; if (! (ac97->ext_id & AC97_EI_SPDIF)) return -ENODEV; @@ -2551,7 +2648,12 @@ return -EINVAL; } reg = AC97_CSR_SPDIF; + mask = 1 << AC97_SC_SPSR_SHIFT; } else { + if (ac97->id == AC97_ID_CM9739 && rate != 48000) { + snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0); + return -EINVAL; + } switch (rate) { case 44100: bits = AC97_SC_SPSR_44K; break; case 48000: bits = AC97_SC_SPSR_48K; break; @@ -2561,14 +2663,15 @@ return -EINVAL; } reg = AC97_SPDIF; + mask = AC97_SC_SPSR_MASK; } spin_lock(&ac97->reg_lock); - old = ac97->regs[reg] & ~AC97_SC_SPSR_MASK; + old = ac97->regs[reg] & ~mask; spin_unlock(&ac97->reg_lock); if (old != bits) { snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0); - snd_ac97_update_bits(ac97, reg, AC97_SC_SPSR_MASK, bits); + snd_ac97_update_bits(ac97, reg, mask, bits); } snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, AC97_EA_SPDIF); return 0; @@ -2660,7 +2763,7 @@ */ void snd_ac97_resume(ac97_t *ac97) { - int i; + int i, is_ad18xx, codec; if (ac97->reset) { ac97->reset(ac97); @@ -2685,6 +2788,20 @@ if (ac97->init) ac97->init(ac97); + is_ad18xx = (ac97->id & 0xffffff40) == AC97_ID_AD1881; + if (is_ad18xx) { + /* restore the AD18xx codec configurations */ + for (codec = 0; codec < 3; codec++) { + if (! ac97->spec.ad18xx.id[codec]) + continue; + /* select single codec */ + ac97->write(ac97, AC97_AD_SERIAL_CFG, ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]); + ac97->write(ac97, AC97_AD_CODEC_CFG, ac97->spec.ad18xx.codec_cfg[codec]); + } + /* select all codecs */ + ac97->write(ac97, AC97_AD_SERIAL_CFG, 0x7000); + } + /* restore ac97 status */ for (i = 2; i < 0x7c ; i += 2) { if (i == AC97_POWERDOWN || i == AC97_EXTENDED_ID) @@ -2693,8 +2810,42 @@ * some chip (e.g. nm256) may hang up when unsupported registers * are accessed..! */ - if (test_bit(i, ac97->reg_accessed)) + if (test_bit(i, ac97->reg_accessed)) { + if (is_ad18xx) { + /* handle multi codecs for AD18xx */ + if (i == AC97_PCM) { + for (codec = 0; codec < 3; codec++) { + if (! ac97->spec.ad18xx.id[codec]) + continue; + /* select single codec */ + ac97->write(ac97, AC97_AD_SERIAL_CFG, ac97->spec.ad18xx.unchained[codec] | ac97->spec.ad18xx.chained[codec]); + /* update PCM bits */ + ac97->write(ac97, AC97_PCM, ac97->spec.ad18xx.pcmreg[codec]); + } + /* select all codecs */ + ac97->write(ac97, AC97_AD_SERIAL_CFG, 0x7000); + continue; + } else if (i == AC97_AD_TEST || + i == AC97_AD_CODEC_CFG || + i == AC97_AD_SERIAL_CFG) + continue; /* ignore */ + } snd_ac97_write(ac97, i, ac97->regs[i]); + snd_ac97_read(ac97, i); + } + } + + if (ac97->ext_id & AC97_EI_SPDIF) { + if (ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_SPDIF) { + /* reset spdif status */ + snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0); + snd_ac97_write(ac97, AC97_EXTENDED_STATUS, ac97->regs[AC97_EXTENDED_STATUS]); + if (ac97->flags & AC97_CS_SPDIF) + snd_ac97_write(ac97, AC97_CSR_SPDIF, ac97->regs[AC97_CSR_SPDIF]); + else + snd_ac97_write(ac97, AC97_SPDIF, ac97->regs[AC97_SPDIF]); + snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, AC97_EA_SPDIF); /* turn on again */ + } } } #endif @@ -2742,7 +2893,6 @@ /** * snd_ac97_tune_hardware - tune up the hardware * @ac97: the ac97 instance - * @pci: pci device * @quirk: quirk list * * Do some workaround for each pci device, such as renaming of the @@ -2752,18 +2902,13 @@ * Returns zero if successful, or a negative error code on failure. */ -int snd_ac97_tune_hardware(ac97_t *ac97, struct pci_dev *pci, struct ac97_quirk *quirk) +int snd_ac97_tune_hardware(ac97_t *ac97, struct ac97_quirk *quirk) { - unsigned short vendor, device; - snd_assert(quirk, return -EINVAL); - pci_read_config_word(pci, PCI_SUBSYSTEM_VENDOR_ID, &vendor); - pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &device); - for (; quirk->vendor; quirk++) { - if (quirk->vendor == vendor && quirk->device == device) { - snd_printdd("ac97 quirk for %s (%04x:%04x)\n", quirk->name, vendor, device); + if (quirk->vendor == ac97->subsystem_vendor && quirk->device == ac97->subsystem_device) { + snd_printdd("ac97 quirk for %s (%04x:%04x)\n", quirk->name, ac97->subsystem_vendor, ac97->subsystem_device); switch (quirk->type) { case AC97_TUNE_HP_ONLY: return swap_headphone(ac97, 1); diff -Nru a/sound/pci/ac97/ac97_id.h b/sound/pci/ac97/ac97_id.h --- a/sound/pci/ac97/ac97_id.h Sat Apr 12 14:44:10 2003 +++ b/sound/pci/ac97/ac97_id.h Sat Apr 12 14:44:10 2003 @@ -48,3 +48,5 @@ #define AC97_ID_ALC650 0x414c4720 #define AC97_ID_YMF753 0x594d4803 #define AC97_ID_VT1616 0x49434551 +#define AC97_ID_CM9738 0x434d4941 +#define AC97_ID_CM9739 0x434d4961 diff -Nru a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c --- a/sound/pci/ac97/ac97_patch.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/ac97/ac97_patch.c Sat Apr 12 14:44:10 2003 @@ -221,6 +221,7 @@ return 0; ac97->spec.ad18xx.unchained[idx] = mask; ac97->spec.ad18xx.id[idx] = val; + ac97->spec.ad18xx.codec_cfg[idx] = 0x0000; return mask; } @@ -238,6 +239,7 @@ snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, codec_bits); ac97->spec.ad18xx.chained[idx] = cfg_bits[idx]; ac97->spec.ad18xx.id[idx] = val; + ac97->spec.ad18xx.codec_cfg[idx] = codec_bits ? codec_bits : 0x0004; return 1; } @@ -253,6 +255,7 @@ // test for chained codecs snd_ac97_write_cache(ac97, AC97_AD_SERIAL_CFG, ac97->spec.ad18xx.unchained[unchained_idx]); snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0002); // ID1C + ac97->spec.ad18xx.codec_cfg[unchained_idx] = 0x0002; if (cidx1 >= 0) { if (patch_ad1881_chained1(ac97, cidx1, 0x0006)) // SDIE | ID1C patch_ad1881_chained1(ac97, cidx2, 0); @@ -306,6 +309,9 @@ if (num == 1) { /* ok, deselect all ID bits */ snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0000); + ac97->spec.ad18xx.codec_cfg[0] = + ac97->spec.ad18xx.codec_cfg[1] = + ac97->spec.ad18xx.codec_cfg[2] = 0x0000; } /* required for AD1886/AD1885 combination */ ac97->ext_id = snd_ac97_read(ac97, AC97_EXTENDED_ID); @@ -373,3 +379,31 @@ snd_ac97_write_cache(ac97, AC97_ALC650_LFE_DAC_VOL, 0x0808); return 0; } + +int patch_cm9739(ac97_t * ac97) +{ + unsigned short val; + + /* check spdif */ + val = snd_ac97_read(ac97, AC97_EXTENDED_STATUS); + if (val & AC97_EA_SPCV) { + /* enable spdif in */ + snd_ac97_write_cache(ac97, AC97_CM9739_SPDIF_CTRL, + snd_ac97_read(ac97, AC97_CM9739_SPDIF_CTRL) | 0x01); + } else { + ac97->ext_id &= ~AC97_EI_SPDIF; /* disable extended-id */ + } + + /* set-up multi channel */ + /* bit 13: enable internal vref output for mic */ + /* bit 12: enable center/lfe */ + /* bit 14: 0 = SPDIF, 1 = EAPD */ + snd_ac97_write_cache(ac97, AC97_CM9739_MULTI_CHAN, 0x3000); + + /* FIXME: set up GPIO */ + snd_ac97_write_cache(ac97, 0x70, 0x0100); + snd_ac97_write_cache(ac97, 0x72, 0x0020); + + return 0; +} + diff -Nru a/sound/pci/ac97/ac97_patch.h b/sound/pci/ac97/ac97_patch.h --- a/sound/pci/ac97/ac97_patch.h Sat Apr 12 14:44:06 2003 +++ b/sound/pci/ac97/ac97_patch.h Sat Apr 12 14:44:06 2003 @@ -40,3 +40,4 @@ int patch_ad1886(ac97_t * ac97); int patch_ad1980(ac97_t * ac97); int patch_alc650(ac97_t * ac97); +int patch_cm9739(ac97_t * ac97); diff -Nru a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c --- a/sound/pci/ali5451/ali5451.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/ali5451/ali5451.c Sat Apr 12 14:44:10 2003 @@ -375,24 +375,27 @@ unsigned int port, int sched ) { - signed long end_time; + unsigned long end_time; + unsigned int res; end_time = jiffies + 10 * (HZ >> 2); do { - if (!(snd_ali_5451_peek(codec,port) & 0x8000)) + res = snd_ali_5451_peek(codec,port); + if (! (res & 0x8000)) return 0; if (sched) { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); } - } while (end_time - (signed long)jiffies >= 0); - snd_printk("ali_codec_ready: codec is not ready.\n "); + } while (time_after_eq(end_time, jiffies)); + snd_ali_5451_poke(codec, port, res & ~0x8000); + snd_printdd("ali_codec_ready: codec is not ready.\n "); return -EIO; } static int snd_ali_stimer_ready(ali_t *codec, int sched) { - signed long end_time; + unsigned long end_time; unsigned long dwChk1,dwChk2; dwChk1 = snd_ali_5451_peek(codec, ALI_STIMER); @@ -407,7 +410,7 @@ set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); } - } while (end_time - (signed long)jiffies >= 0); + } while (time_after_eq(end_time, jiffies)); snd_printk("ali_stimer_read: stimer is not ready.\n"); return -EIO; } diff -Nru a/sound/pci/cmipci.c b/sound/pci/cmipci.c --- a/sound/pci/cmipci.c Sat Apr 12 14:44:08 2003 +++ b/sound/pci/cmipci.c Sat Apr 12 14:44:08 2003 @@ -1443,7 +1443,7 @@ ctl->put(ctl, &val); /* toggle */ event |= SNDRV_CTL_EVENT_MASK_VALUE; } - ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(cm->card, event, &ctl->id); } } @@ -1466,7 +1466,7 @@ int event; memset(&val, 0, sizeof(val)); - ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; ctl->get(ctl, &val); event = SNDRV_CTL_EVENT_MASK_INFO; if (val.value.integer.value[0] != cm->mixer_res_status[i]) { diff -Nru a/sound/pci/cs4281.c b/sound/pci/cs4281.c --- a/sound/pci/cs4281.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/cs4281.c Sat Apr 12 14:44:10 2003 @@ -534,7 +534,7 @@ { if (delay > 999) { if (can_schedule) { - signed long end_time; + unsigned long end_time; delay = (delay * HZ) / 1000000; if (delay < 1) delay = 1; @@ -542,7 +542,7 @@ do { set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); - } while (end_time - (signed long)jiffies >= 0); + } while (time_after_eq(end_time, jiffies)); } else { delay += 999; delay /= 1000; diff -Nru a/sound/pci/cs46xx/cs46xx.c b/sound/pci/cs46xx/cs46xx.c --- a/sound/pci/cs46xx/cs46xx.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/cs46xx/cs46xx.c Sat Apr 12 14:44:10 2003 @@ -124,6 +124,14 @@ snd_card_free(card); return err; } +#ifdef CONFIG_SND_CS46XX_NEW_DSP + if (chip->nr_ac97_codecs ==2) { + if ((err = snd_cs46xx_pcm_center_lfe(chip,3,NULL)) < 0) { + snd_card_free(card); + return err; + } + } +#endif if ((err = snd_cs46xx_midi(chip, 0, NULL)) < 0) { snd_card_free(card); return err; diff -Nru a/sound/pci/cs46xx/cs46xx_lib.c b/sound/pci/cs46xx/cs46xx_lib.c --- a/sound/pci/cs46xx/cs46xx_lib.c Sat Apr 12 14:44:06 2003 +++ b/sound/pci/cs46xx/cs46xx_lib.c Sat Apr 12 14:44:06 2003 @@ -1014,6 +1014,8 @@ substream->ops = &snd_cs46xx_playback_ops; } else if (cpcm->pcm_channel_id == DSP_PCM_REAR_CHANNEL) { substream->ops = &snd_cs46xx_playback_rear_ops; + } else if (cpcm->pcm_channel_id == DSP_PCM_CENTER_LFE_CHANNEL) { + substream->ops = &snd_cs46xx_playback_clfe_ops; } else if (cpcm->pcm_channel_id == DSP_IEC958_CHANNEL) { substream->ops = &snd_cs46xx_playback_iec958_ops; } else { @@ -1041,6 +1043,8 @@ substream->ops = &snd_cs46xx_playback_indirect_ops; } else if (cpcm->pcm_channel_id == DSP_PCM_REAR_CHANNEL) { substream->ops = &snd_cs46xx_playback_indirect_rear_ops; + } else if (cpcm->pcm_channel_id == DSP_PCM_CENTER_LFE_CHANNEL) { + substream->ops = &snd_cs46xx_playback_indirect_clfe_ops; } else if (cpcm->pcm_channel_id == DSP_IEC958_CHANNEL) { substream->ops = &snd_cs46xx_playback_indirect_iec958_ops; } else { @@ -1423,6 +1427,13 @@ return _cs46xx_playback_open_channel(substream,DSP_PCM_REAR_CHANNEL); } +static int snd_cs46xx_playback_open_clfe(snd_pcm_substream_t * substream) +{ + snd_printdd("open center - LFE channel\n"); + + return _cs46xx_playback_open_channel(substream,DSP_PCM_CENTER_LFE_CHANNEL); +} + static int snd_cs46xx_playback_open_iec958(snd_pcm_substream_t * substream) { cs46xx_t *chip = snd_pcm_substream_chip(substream); @@ -1541,6 +1552,29 @@ .ack = snd_cs46xx_playback_transfer, }; +snd_pcm_ops_t snd_cs46xx_playback_clfe_ops = { + .open = snd_cs46xx_playback_open_clfe, + .close = snd_cs46xx_playback_close, + .ioctl = snd_pcm_lib_ioctl, + .hw_params = snd_cs46xx_playback_hw_params, + .hw_free = snd_cs46xx_playback_hw_free, + .prepare = snd_cs46xx_playback_prepare, + .trigger = snd_cs46xx_playback_trigger, + .pointer = snd_cs46xx_playback_direct_pointer, +}; + +snd_pcm_ops_t snd_cs46xx_playback_indirect_clfe_ops = { + .open = snd_cs46xx_playback_open_clfe, + .close = snd_cs46xx_playback_close, + .ioctl = snd_pcm_lib_ioctl, + .hw_params = snd_cs46xx_playback_hw_params, + .hw_free = snd_cs46xx_playback_hw_free, + .prepare = snd_cs46xx_playback_prepare, + .trigger = snd_cs46xx_playback_trigger, + .pointer = snd_cs46xx_playback_indirect_pointer, + .ack = snd_cs46xx_playback_transfer, +}; + snd_pcm_ops_t snd_cs46xx_playback_iec958_ops = { .open = snd_cs46xx_playback_open_iec958, .close = snd_cs46xx_playback_close_iec958, @@ -1627,6 +1661,13 @@ snd_pcm_lib_preallocate_free_for_all(pcm); } +static void snd_cs46xx_pcm_center_lfe_free(snd_pcm_t *pcm) +{ + cs46xx_t *chip = snd_magic_cast(cs46xx_t, pcm->private_data, return); + chip->pcm_center_lfe = NULL; + snd_pcm_lib_preallocate_free_for_all(pcm); +} + static void snd_cs46xx_pcm_iec958_free(snd_pcm_t *pcm) { cs46xx_t *chip = snd_magic_cast(cs46xx_t, pcm->private_data, return); @@ -1699,6 +1740,35 @@ return 0; } +int __devinit snd_cs46xx_pcm_center_lfe(cs46xx_t *chip, int device, snd_pcm_t ** rpcm) +{ + snd_pcm_t *pcm; + int err; + + if (rpcm) + *rpcm = NULL; + + if ((err = snd_pcm_new(chip->card, "CS46xx - Center LFE", device, MAX_PLAYBACK_CHANNELS, 0, &pcm)) < 0) + return err; + + pcm->private_data = chip; + pcm->private_free = snd_cs46xx_pcm_center_lfe_free; + + snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_cs46xx_playback_clfe_ops); + + /* global setup */ + pcm->info_flags = 0; + strcpy(pcm->name, "CS46xx - Center LFE"); + chip->pcm_center_lfe = pcm; + + snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci, pcm, 64*1024, 256*1024); + + if (rpcm) + *rpcm = pcm; + + return 0; +} + int __devinit snd_cs46xx_pcm_iec958(cs46xx_t *chip, int device, snd_pcm_t ** rpcm) { snd_pcm_t *pcm; @@ -1812,6 +1882,7 @@ return change; } +#if 0 static int snd_cs46xx_vol_iec958_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { cs46xx_t *chip = snd_kcontrol_chip(kcontrol); @@ -1836,6 +1907,7 @@ return change; } +#endif static int snd_mixer_boolean_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) @@ -2234,6 +2306,8 @@ .put = snd_cs46xx_iec958_put, .private_value = CS46XX_MIXER_SPDIF_INPUT_ELEMENT, }, +#if 0 +/* Input IEC958 volume does not work for the moment. (Benny) */ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "IEC958 Input Volume", @@ -2242,6 +2316,7 @@ .put = snd_cs46xx_vol_iec958_put, .private_value = (ASYNCRX_SCB_ADDR + 0xE) << 2, }, +#endif { .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), @@ -2314,16 +2389,25 @@ }; -static void snd_cs46xx_sec_codec_reset (ac97_t * ac97) +static void snd_cs46xx_codec_reset (ac97_t * ac97) { unsigned long end_time; int err; + cs46xx_t * chip = snd_magic_cast(cs46xx_t,ac97->private_data,return /* -ENXIO */); /* reset to defaults */ snd_ac97_write(ac97, AC97_RESET, 0); - /* set codec in extended mode */ - snd_cs46xx_ac97_write(ac97,AC97_CSR_ACMODE,0x3); + /* set the desired CODEC mode */ + if (chip->nr_ac97_codecs == 0) { + snd_printdd("cs46xx: CODOEC1 mode %04x\n",0x0); + snd_cs46xx_ac97_write(ac97,AC97_CSR_ACMODE,0x0); + } else if (chip->nr_ac97_codecs == 1) { + snd_printdd("cs46xx: CODOEC2 mode %04x\n",0x3); + snd_cs46xx_ac97_write(ac97,AC97_CSR_ACMODE,0x3); + } else { + snd_assert(0); /* should never happen ... */ + } udelay(50); @@ -2372,7 +2456,9 @@ ac97.read = snd_cs46xx_ac97_read; ac97.private_data = chip; ac97.private_free = snd_cs46xx_mixer_free_ac97; - +#ifdef CONFIG_SND_CS46XX_NEW_DSP + ac97.reset = snd_cs46xx_codec_reset; +#endif chip->ac97[CS46XX_PRIMARY_CODEC_INDEX] = &ac97; snd_cs46xx_ac97_write(&ac97, AC97_MASTER, 0x8000); @@ -2432,7 +2518,7 @@ /* use custom reset to set secondary codec in extended mode */ - ac97.reset = snd_cs46xx_sec_codec_reset; + ac97.reset = snd_cs46xx_codec_reset; if ((err = snd_ac97_mixer(card, &ac97, &chip->ac97[CS46XX_SECONDARY_CODEC_INDEX])) < 0) return err; @@ -2870,6 +2956,7 @@ kfree(chip->gameport); } #endif + if (chip->amplifier_ctrl) chip->amplifier_ctrl(chip, -chip->amplifier); /* force to off */ @@ -2892,10 +2979,14 @@ if (chip->active_ctrl) chip->active_ctrl(chip, -chip->amplifier); - + #ifdef CONFIG_SND_CS46XX_NEW_DSP - cs46xx_dsp_spos_destroy(chip); + if (chip->dsp_spos_instance) { + cs46xx_dsp_spos_destroy(chip); + chip->dsp_spos_instance = NULL; + } #endif + snd_magic_kfree(chip); return 0; } @@ -3104,8 +3195,21 @@ } } +#ifndef CONFIG_SND_CS46XX_NEW_DSP snd_printk("create - never read ISV3 & ISV4 from AC'97\n"); return -EIO; +#else + /* This may happen on a cold boot with a Terratec SiXPack 5.1. + Reloading the driver may help, if there's other soundcards + with the same problem I would like to know. (Benny) */ + + snd_printk("ERROR: snd-cs46xx: never read ISV3 & ISV4 from AC'97\n"); + snd_printk(" Try reloading the ALSA driver, if you find something\n"); + snd_printk(" broken or not working on your soundcard upon\n"); + snd_printk(" this message please report to alsa-devel@lists.sourceforge.net\n"); + + return -EIO; +#endif ok2: /* @@ -3113,8 +3217,7 @@ * commense the transfer of digital audio data to the AC97 codec. */ - snd_cs46xx_pokeBA0(chip, BA0_ACOSV, ACOSV_SLV3 | ACOSV_SLV4 | - ACOSV_SLV7 | ACOSV_SLV8); + snd_cs46xx_pokeBA0(chip, BA0_ACOSV, ACOSV_SLV3 | ACOSV_SLV4); /* @@ -3224,21 +3327,7 @@ tmp |= 0x00000001; snd_cs46xx_poke(chip, BA1_CIE, tmp); /* capture interrupt enable */ -#ifdef CONFIG_SND_CS46XX_NEW_DSP - /* set the attenuation to 0dB */ - /* snd_cs46xx_poke(chip, (MASTERMIX_SCB_ADDR + 0xE) << 2, 0x80008000); - snd_cs46xx_poke(chip, (VARIDECIMATE_SCB_ADDR + 0xE) << 2, 0x80008000); */ - - /* - * Initialize cs46xx SPDIF controller - */ - - /* time countdown enable */ - cs46xx_poke_via_dsp (chip,SP_ASER_COUNTDOWN, 0x80000000); - - /* SPDIF input MASTER ENABLE */ - cs46xx_poke_via_dsp (chip,SP_SPDIN_CONTROL, 0x800003ff); -#else +#ifndef CONFIG_SND_CS46XX_NEW_DSP /* set the attenuation to 0dB */ snd_cs46xx_poke(chip, BA1_PVOL, 0x80008000); snd_cs46xx_poke(chip, BA1_CVOL, 0x80008000); @@ -3312,7 +3401,8 @@ logic_type = snd_cs46xx_codec_read(chip, AC97_GPIO_POLARITY, CS46XX_SECONDARY_CODEC_INDEX); - logic_type &=0x27F; + logic_type &=0x27F; + snd_cs46xx_codec_write (chip, AC97_GPIO_POLARITY, logic_type, CS46XX_SECONDARY_CODEC_INDEX); @@ -3592,55 +3682,62 @@ .id = 0x3357, .name = "Voyetra", .amp = amp_voyetra, - .mixer_init = voyetra_mixer_init + .mixer_init = voyetra_mixer_init, }, { .vendor = 0x1071, .id = 0x6003, .name = "Mitac MI6020/21", - .amp = amp_voyetra + .amp = amp_voyetra, }, { .vendor = 0x14AF, .id = 0x0050, .name = "Hercules Game Theatre XP", .amp = amp_hercules, - .mixer_init = hercules_mixer_init + .mixer_init = hercules_mixer_init, }, { .vendor = 0x1681, .id = 0x0050, .name = "Hercules Game Theatre XP", .amp = amp_hercules, - .mixer_init = hercules_mixer_init + .mixer_init = hercules_mixer_init, }, { .vendor = 0x1681, .id = 0x0051, .name = "Hercules Game Theatre XP", .amp = amp_hercules, - .mixer_init = hercules_mixer_init + .mixer_init = hercules_mixer_init, + }, { .vendor = 0x1681, .id = 0x0052, .name = "Hercules Game Theatre XP", .amp = amp_hercules, - .mixer_init = hercules_mixer_init + .mixer_init = hercules_mixer_init, }, { .vendor = 0x1681, .id = 0x0053, .name = "Hercules Game Theatre XP", .amp = amp_hercules, - .mixer_init = hercules_mixer_init + .mixer_init = hercules_mixer_init, }, { .vendor = 0x1681, .id = 0x0054, .name = "Hercules Game Theatre XP", .amp = amp_hercules, - .mixer_init = hercules_mixer_init + .mixer_init = hercules_mixer_init, + }, + /* Teratec */ + { + .vendor = 0x153b, + .id = 0x1136, + .name = "Terratec SiXPack 5.1", }, /* Not sure if the 570 needs the clkrun hack */ { @@ -3648,19 +3745,19 @@ .id = 0x0132, .name = "Thinkpad 570", .init = clkrun_init, - .active = clkrun_hack + .active = clkrun_hack, }, { .vendor = PCI_VENDOR_ID_IBM, .id = 0x0153, .name = "Thinkpad 600X/A20/T20", .init = clkrun_init, - .active = clkrun_hack + .active = clkrun_hack, }, { .vendor = PCI_VENDOR_ID_IBM, .id = 0x1010, - .name = "Thinkpad 600E (unsupported)" + .name = "Thinkpad 600E (unsupported)", }, {} /* terminator */ }; @@ -3823,10 +3920,12 @@ for (cp = &cards[0]; cp->name; cp++) { if (cp->vendor == ss_vendor && cp->id == ss_card) { - snd_printd ("hack for %s enabled\n", cp->name); + snd_printdd ("hack for %s enabled\n", cp->name); + chip->amplifier_ctrl = cp->amp; chip->active_ctrl = cp->active; chip->mixer_init = cp->mixer_init; + if (cp->init) cp->init(chip); break; @@ -3867,6 +3966,7 @@ return -ENOMEM; } } + if (request_irq(pci->irq, snd_cs46xx_interrupt, SA_INTERRUPT|SA_SHIRQ, "CS46XX", (void *) chip)) { snd_printk("unable to grab IRQ %d\n", pci->irq); snd_cs46xx_free(chip); diff -Nru a/sound/pci/cs46xx/cs46xx_lib.h b/sound/pci/cs46xx/cs46xx_lib.h --- a/sound/pci/cs46xx/cs46xx_lib.h Sat Apr 12 14:44:06 2003 +++ b/sound/pci/cs46xx/cs46xx_lib.h Sat Apr 12 14:44:06 2003 @@ -63,6 +63,8 @@ extern snd_pcm_ops_t snd_cs46xx_playback_indirect_rear_ops; extern snd_pcm_ops_t snd_cs46xx_playback_iec958_ops; extern snd_pcm_ops_t snd_cs46xx_playback_indirect_iec958_ops; +extern snd_pcm_ops_t snd_cs46xx_playback_clfe_ops; +extern snd_pcm_ops_t snd_cs46xx_playback_indirect_clfe_ops; /* diff -Nru a/sound/pci/cs46xx/dsp_spos.c b/sound/pci/cs46xx/dsp_spos.c --- a/sound/pci/cs46xx/dsp_spos.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/cs46xx/dsp_spos.c Sat Apr 12 14:44:09 2003 @@ -291,11 +291,14 @@ if (ins->code.data) kfree(ins->code.data); + if (ins->symbol_table.symbols) vfree(ins->symbol_table.symbols); + if (ins->modules) kfree(ins->modules); - kfree(ins); + + kfree(ins); up(&chip->spos_mutex); } @@ -630,7 +633,7 @@ snd_iprintf(buffer,"\nSRC_TASK_SCB1:\n"); col = 0; - for (i = 0x2580 ; i < 0x2580 + 0x40 ; i += sizeof(u32),col ++) { + for (i = 0x2480 ; i < 0x2480 + 0x40 ; i += sizeof(u32),col ++) { if (col == 4) { snd_iprintf(buffer,"\n"); col = 0; @@ -1030,7 +1033,6 @@ return desc; } - int cs46xx_dsp_scb_and_task_init (cs46xx_t *chip) { dsp_spos_instance_t * ins = chip->dsp_spos_instance; @@ -1049,8 +1051,11 @@ dsp_scb_descriptor_t * record_mix_scb; dsp_scb_descriptor_t * write_back_scb; dsp_scb_descriptor_t * vari_decimate_scb; - dsp_scb_descriptor_t * sec_codec_out_scb; + dsp_scb_descriptor_t * rear_codec_out_scb; + dsp_scb_descriptor_t * clfe_codec_out_scb; dsp_scb_descriptor_t * magic_snoop_scb; + + int fifo_addr,fifo_span,valid_slots; spos_control_block_t sposcb = { /* 0 */ HFG_TREE_SCB,HFG_STACK, @@ -1335,28 +1340,78 @@ if (!record_mix_scb) goto _fail_end; - /* create secondary CODEC output */ - sec_codec_out_scb = cs46xx_dsp_create_codec_out_scb(chip,"CodecOutSCB_II",0x0010,0x0040, - REAR_MIXER_SCB_ADDR, - SEC_CODECOUT_SCB_ADDR,codec_in_scb, - SCB_ON_PARENT_NEXT_SCB); - if (!sec_codec_out_scb) goto _fail_end; + valid_slots = snd_cs46xx_peekBA0(chip, BA0_ACOSV); + + snd_assert (chip->nr_ac97_codecs == 1 || chip->nr_ac97_codecs == 2); + if (chip->nr_ac97_codecs == 1) { + /* output on slot 5 and 11 + on primary CODEC */ + fifo_addr = 0x20; + fifo_span = 0x60; + /* enable slot 5 and 11 */ + valid_slots |= ACOSV_SLV5 | ACOSV_SLV11; + } else { + /* output on slot 7 and 8 + on secondary CODEC */ + fifo_addr = 0x40; + fifo_span = 0x10; + + /* enable slot 7 and 8 */ + valid_slots |= ACOSV_SLV7 | ACOSV_SLV8; + } + /* create CODEC tasklet for rear speakers output*/ + rear_codec_out_scb = cs46xx_dsp_create_codec_out_scb(chip,"CodecOutSCB_Rear",fifo_span,fifo_addr, + REAR_MIXER_SCB_ADDR, + REAR_CODECOUT_SCB_ADDR,codec_in_scb, + SCB_ON_PARENT_NEXT_SCB); + if (!rear_codec_out_scb) goto _fail_end; + + /* create the rear PCM channel mixer SCB */ rear_mix_scb = cs46xx_dsp_create_mix_only_scb(chip,"RearMixerSCB", MIX_SAMPLE_BUF3, REAR_MIXER_SCB_ADDR, - sec_codec_out_scb, + rear_codec_out_scb, SCB_ON_PARENT_SUBLIST_SCB); ins->rear_mix_scb = rear_mix_scb; if (!rear_mix_scb) goto _fail_end; + + if (chip->nr_ac97_codecs == 2) { + /* create CODEC tasklet for rear Center/LFE output + slot 6 and 9 on seconadry CODEC */ + clfe_codec_out_scb = cs46xx_dsp_create_codec_out_scb(chip,"CodecOutSCB_CLFE",0x0030,0x0030, + CLFE_MIXER_SCB_ADDR, + CLFE_CODEC_SCB_ADDR, + rear_codec_out_scb, + SCB_ON_PARENT_NEXT_SCB); + if (!clfe_codec_out_scb) goto _fail_end; + + + /* create the rear PCM channel mixer SCB */ + ins->center_lfe_mix_scb = cs46xx_dsp_create_mix_only_scb(chip,"CLFEMixerSCB", + MIX_SAMPLE_BUF4, + CLFE_MIXER_SCB_ADDR, + clfe_codec_out_scb, + SCB_ON_PARENT_SUBLIST_SCB); + if (!ins->center_lfe_mix_scb) goto _fail_end; + + /* enable slot 6 and 9 */ + valid_slots |= ACOSV_SLV6 | ACOSV_SLV9; + } else { + clfe_codec_out_scb = rear_codec_out_scb; + ins->center_lfe_mix_scb = rear_mix_scb; + } + + /* enable slots depending on CODEC configuration */ + snd_cs46xx_pokeBA0(chip, BA0_ACOSV, valid_slots); /* the magic snooper */ magic_snoop_scb = cs46xx_dsp_create_magic_snoop_scb (chip,"MagicSnoopSCB_I",OUTPUTSNOOP_SCB_ADDR, OUTPUT_SNOOP_BUFFER, codec_out_scb, - sec_codec_out_scb, + clfe_codec_out_scb, SCB_ON_PARENT_NEXT_SCB); @@ -1375,10 +1430,9 @@ SRC_OUTPUT_BUF1, SRC_DELAY_BUF1,SRCTASK_SCB_ADDR, master_mix_scb, - SCB_ON_PARENT_SUBLIST_SCB,0); + SCB_ON_PARENT_SUBLIST_SCB,1); if (!src_task_scb) goto _fail_end; - cs46xx_src_unlink(chip,src_task_scb); /* NOTE: when we now how to detect the SPDIF input @@ -1453,12 +1507,12 @@ /* 0 */ DSP_SPOS_UULO,DSP_SPOS_UUHI, /* 1 */ 0, /* 2 */ 0, - /* 3 */ 1,4000, - /* 4 */ DSP_SPOS_UUUU, - /* 5 */ DSP_SPOS_UULO,DSP_SPOS_UUHI, - /* 6 */ DSP_SPOS_UUUU, - /* 7 */ DSP_SPOS_UU,DSP_SPOS_DC, - /* 8 */ DSP_SPOS_UUUU, + /* 3 */ 1,4000, /* SPDIFICountLimit SPDIFICount */ + /* 4 */ DSP_SPOS_UUUU, /* SPDIFIStatusData */ + /* 5 */ 0,DSP_SPOS_UUHI, /* StatusData, Free4 */ + /* 6 */ DSP_SPOS_UUUU, /* Free3 */ + /* 7 */ DSP_SPOS_UU,DSP_SPOS_DC, /* Free2 BitCount*/ + /* 8 */ DSP_SPOS_UUUU, /* TempStatus */ /* 9 */ SPDIFO_SCB_INST, NULL_SCB_ADDR, /* A */ spdifi_task->address, SPDIFI_SCB_INST + SPDIFIFIFOPointer, @@ -1470,7 +1524,7 @@ /* C */ (SPDIFI_IP_OUTPUT_BUFFER1 << 0x10) | 0xFFFC, /* D */ 0x8048,0, /* E */ 0x01f0,0x0001, - /* F */ DSP_SPOS_UUUU + /* F */ DSP_SPOS_UUUU /* SPDIN_STATUS monitor */ }; /* 0xBA0 */ @@ -1579,6 +1633,9 @@ /*cs46xx_poke_via_dsp (chip,SP_SPDOUT_CSUV, ins->spdif_csuv_default);*/ cs46xx_poke_via_dsp (chip,SP_SPDOUT_CSUV, 0x0); + /* clear fifo pointer */ + cs46xx_poke_via_dsp (chip,SP_SPDIN_FIFOPTR, 0x0); + /* monitor state */ ins->spdif_status_out &= ~DSP_SPDIF_STATUS_HW_ENABLED; } @@ -1618,6 +1675,20 @@ snd_assert (ins->spdif_in_src != NULL,return -EINVAL); down(&chip->spos_mutex); + + if ( ! (ins->spdif_status_out & DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED) ) { + /* time countdown enable */ + cs46xx_poke_via_dsp (chip,SP_ASER_COUNTDOWN, 0x80000005); + /* NOTE: 80000005 value is just magic. With all values + that I've tested this one seem to give the best result. + Got no explication why. (Benny) */ + + /* SPDIF input MASTER ENABLE */ + cs46xx_poke_via_dsp (chip,SP_SPDIN_CONTROL, 0x800003ff); + + ins->spdif_status_out |= DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED; + } + /* create and start the asynchronous receiver SCB */ ins->asynch_rx_scb = cs46xx_dsp_create_asynch_fg_rx_scb(chip,"AsynchFGRxSCB", ASYNCRX_SCB_ADDR, @@ -1629,11 +1700,11 @@ spin_lock_irq(&chip->reg_lock); /* reset SPDIF input sample buffer pointer */ - snd_cs46xx_poke (chip, (SPDIFI_SCB_INST + 0x0c) << 2, - (SPDIFI_IP_OUTPUT_BUFFER1 << 0x10) | 0xFFFC); + /*snd_cs46xx_poke (chip, (SPDIFI_SCB_INST + 0x0c) << 2, + (SPDIFI_IP_OUTPUT_BUFFER1 << 0x10) | 0xFFFC);*/ /* reset FIFO ptr */ - cs46xx_poke_via_dsp (chip,SP_SPDIN_FIFOPTR, 0x0); + /*cs46xx_poke_via_dsp (chip,SP_SPDIN_FIFOPTR, 0x0);*/ cs46xx_src_link(chip,ins->spdif_in_src); /* unmute SRC volume */ @@ -1657,9 +1728,10 @@ dsp_spos_instance_t * ins = chip->dsp_spos_instance; snd_assert (ins->asynch_rx_scb != NULL, return -EINVAL); - snd_assert (ins->spdif_in_src != NULL,return -EINVAL); + snd_assert (ins->spdif_in_src != NULL,return -EINVAL); down(&chip->spos_mutex); + /* Remove the asynchronous receiver SCB */ cs46xx_dsp_remove_scb (chip,ins->asynch_rx_scb); ins->asynch_rx_scb = NULL; @@ -1727,10 +1799,10 @@ snd_assert (ins->adc_input != NULL,return -EINVAL); - down(&chip->spos_mutex); + down(&chip->spos_mutex); cs46xx_dsp_remove_scb (chip,ins->adc_input); ins->adc_input = NULL; - up(&chip->spos_mutex); + up(&chip->spos_mutex); return 0; } diff -Nru a/sound/pci/cs46xx/dsp_spos.h b/sound/pci/cs46xx/dsp_spos.h --- a/sound/pci/cs46xx/dsp_spos.h Sat Apr 12 14:44:06 2003 +++ b/sound/pci/cs46xx/dsp_spos.h Sat Apr 12 14:44:06 2003 @@ -73,9 +73,9 @@ #define SPDIFI_IP_OUTPUT_BUFFER1 0x0E00 #define SPDIFO_IP_OUTPUT_BUFFER1 0x1000 #define MIX_SAMPLE_BUF1 0x1400 -#define MIX_SAMPLE_BUF2 0x2D00 -#define MIX_SAMPLE_BUF3 0x2E00 -#define MIX_SAMPLE_BUF4 0x2F00 +#define MIX_SAMPLE_BUF2 0x2E80 +#define MIX_SAMPLE_BUF3 0x2F00 +#define MIX_SAMPLE_BUF4 0x2F80 #define MIX_SAMPLE_BUF5 0x3000 /* Task stack address */ @@ -103,12 +103,13 @@ #define OUTPUTSNOOP_SCB_ADDR 0x110 #define PCMSERIALINII_SCB_ADDR 0x120 #define SPIOWRITE_SCB_ADDR 0x130 -#define SEC_CODECOUT_SCB_ADDR 0x140 +#define REAR_CODECOUT_SCB_ADDR 0x140 #define OUTPUTSNOOPII_SCB_ADDR 0x150 #define PCMSERIALIN_PCM_SCB_ADDR 0x160 #define RECORD_MIXER_SCB_ADDR 0x170 #define REAR_MIXER_SCB_ADDR 0x180 -#define SPDIF_MIXER_SCB_ADDR 0x190 +#define CLFE_MIXER_SCB_ADDR 0x190 +#define CLFE_CODEC_SCB_ADDR 0x1A0 /* hyperforground SCB's*/ #define HFG_TREE_SCB 0xBA0 diff -Nru a/sound/pci/cs46xx/dsp_spos_scb_lib.c b/sound/pci/cs46xx/dsp_spos_scb_lib.c --- a/sound/pci/cs46xx/dsp_spos_scb_lib.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/cs46xx/dsp_spos_scb_lib.c Sat Apr 12 14:44:10 2003 @@ -681,6 +681,54 @@ return scb; } +dsp_scb_descriptor_t * +cs46xx_dsp_create_filter_scb(cs46xx_t * chip,char * scb_name, + u16 buffer_addr,u32 dest, + dsp_scb_descriptor_t * parent_scb, + int scb_child_type) { + dsp_scb_descriptor_t * scb; + + filter_scb_t filter_scb = { + .a0_right = 0x41a9, + .a0_left = 0x41a9, + .a1_right = 0xb8e4, + .a1_left = 0xb8e4, + .a2_right = 0x3e55, + .a2_left = 0x3e55, + + .filter_unused3 = 0x0000, + .filter_unused2 = 0x0000, + + .output_buf_ptr = buffer_addr, + .init = 0x000, + + .prev_sample_output1 = 0x00000000, + .prev_sample_output2 = 0x00000000, + + .prev_sample_input1 = 0x00000000, + .prev_sample_input2 = 0x00000000, + + .next_scb_ptr = 0x0000, + .sub_list_ptr = 0x0000, + + .entry_point = 0x0000, + .spb_ptr = 0x0000, + + .b0_right = 0x0e38, + .b0_left = 0x0e38, + .b1_right = 0x1c71, + .b1_left = 0x1c71, + .b2_right = 0x0e38, + .b2_left = 0x0e38, + }; + + + scb = cs46xx_dsp_create_generic_scb(chip,scb_name,(u32 *)&filter_scb, + dest,"FILTERTASK",parent_scb, + scb_child_type); + + return scb; +} dsp_scb_descriptor_t * cs46xx_dsp_create_mix_only_scb(cs46xx_t * chip,char * scb_name, @@ -705,8 +753,8 @@ }, /* 9 */ 0,0, /* A */ 0,0, - /* B */ RSCONFIG_SAMPLE_16STEREO + RSCONFIG_MODULO_64, - /* C */ (mix_buffer_addr + (32 * 4)) << 0x10, + /* B */ RSCONFIG_SAMPLE_16STEREO + RSCONFIG_MODULO_32, + /* C */ (mix_buffer_addr + (16 * 4)) << 0x10, /* D */ 0, { /* E */ 0x8000,0x8000, @@ -768,7 +816,8 @@ scb = cs46xx_dsp_create_generic_scb(chip,scb_name,(u32 *)&mix2_ostream_scb, - dest,"S16_MIX_TO_OSTREAM",parent_scb, + + dest,"S16_MIX_TO_OSTREAM",parent_scb, scb_child_type); return scb; @@ -1120,24 +1169,39 @@ }; static u32 src_output_buffer_addr[DSP_MAX_SRC_NR] = { - 0x2580, - 0x2680, - 0x2780, - 0x2980, - 0x2A80, - 0x2B80, + 0x2B80, + 0x2BA0, + 0x2BC0, + 0x2BE0, + 0x2D00, + 0x2D20, + 0x2D40, + 0x2D60, + 0x2D80, + 0x2DA0, + 0x2DC0, + 0x2DE0, + 0x2E00, + 0x2E20 }; static u32 src_delay_buffer_addr[DSP_MAX_SRC_NR] = { + 0x2480, + 0x2500, + 0x2580, 0x2600, + 0x2680, 0x2700, + 0x2780, 0x2800, + 0x2880, 0x2900, + 0x2980, 0x2A00, - 0x2B00, + 0x2A80, + 0x2B00 }; - pcm_channel_descriptor_t * cs46xx_dsp_create_pcm_channel (cs46xx_t * chip, u32 sample_rate, void * private_data, u32 hw_dma_addr, @@ -1159,11 +1223,10 @@ case DSP_PCM_REAR_CHANNEL: mixer_scb = ins->rear_mix_scb; break; - case DSP_PCM_CENTER_CHANNEL: - /* TODO */ - snd_assert(0); + case DSP_PCM_CENTER_LFE_CHANNEL: + mixer_scb = ins->center_lfe_mix_scb; break; - case DSP_PCM_LFE_CHANNEL: + case DSP_PCM_S71_CHANNEL: /* TODO */ snd_assert(0); break; diff -Nru a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c --- a/sound/pci/emu10k1/emu10k1_main.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/emu10k1/emu10k1_main.c Sat Apr 12 14:44:10 2003 @@ -240,8 +240,13 @@ } if (!emu->APS) { /* enable analog output */ - unsigned int reg = inl(emu->port + HCFG); - outl(reg | HCFG_GPOUT0, emu->port + HCFG); + if (!emu->audigy) { + unsigned int reg = inl(emu->port + HCFG); + outl(reg | HCFG_GPOUT0, emu->port + HCFG); + } else { + unsigned int reg = inl(emu->port + A_IOCFG); + outl(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG); + } } /* diff -Nru a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c --- a/sound/pci/emu10k1/emufx.c Sat Apr 12 14:44:08 2003 +++ b/sound/pci/emu10k1/emufx.c Sat Apr 12 14:44:08 2003 @@ -1271,7 +1271,8 @@ /* Wave Playback */ A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT)); A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT)); - snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Playback Volume", gpr, 100); + snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Playback Volume", gpr, + emu->revision == 4 ? 50 : 100); gpr += 2; /* Wave Surround Playback */ @@ -1502,8 +1503,11 @@ A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS); /* analog speakers */ - //A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); - A_PUT_STEREO_OUTPUT(A_EXTOUT_AC97_L, A_EXTOUT_AC97_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); + if (emu->audigy && emu->revision == 4) { /* audigy2 */ + A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); + } else { + A_PUT_STEREO_OUTPUT(A_EXTOUT_AC97_L, A_EXTOUT_AC97_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); + } A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS); A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS); A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS); diff -Nru a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c --- a/sound/pci/emu10k1/emumixer.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/emu10k1/emumixer.c Sat Apr 12 14:44:09 2003 @@ -45,7 +45,7 @@ snd_ctl_elem_value_t * ucontrol) { emu10k1_t *emu = snd_kcontrol_chip(kcontrol); - int idx = kcontrol->private_value; + unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); unsigned long flags; spin_lock_irqsave(&emu->reg_lock, flags); @@ -71,7 +71,8 @@ snd_ctl_elem_value_t * ucontrol) { emu10k1_t *emu = snd_kcontrol_chip(kcontrol); - int idx = kcontrol->private_value, change; + unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); + int change; unsigned int val; unsigned long flags; @@ -94,6 +95,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READ, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,MASK), + .count = 4, .info = snd_emu10k1_spdif_info, .get = snd_emu10k1_spdif_get_mask }; @@ -102,6 +104,7 @@ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT), + .count = 4, .info = snd_emu10k1_spdif_info, .get = snd_emu10k1_spdif_get, .put = snd_emu10k1_spdif_put @@ -150,8 +153,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int voice, idx; int num_efx = emu->audigy ? 8 : 4; int mask = emu->audigy ? 0x3f : 0x0f; @@ -169,8 +172,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int change = 0, voice, idx, val; int num_efx = emu->audigy ? 8 : 4; int mask = emu->audigy ? 0x3f : 0x0f; @@ -204,6 +207,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "EMU10K1 PCM Send Routing", + .count = 32, .info = snd_emu10k1_send_routing_info, .get = snd_emu10k1_send_routing_get, .put = snd_emu10k1_send_routing_put @@ -223,8 +227,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int idx; int num_efx = emu->audigy ? 8 : 4; @@ -239,8 +243,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int change = 0, idx, val; int num_efx = emu->audigy ? 8 : 4; @@ -272,6 +276,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "EMU10K1 PCM Send Volume", + .count = 32, .info = snd_emu10k1_send_volume_info, .get = snd_emu10k1_send_volume_get, .put = snd_emu10k1_send_volume_put @@ -289,8 +294,8 @@ static int snd_emu10k1_attn_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; unsigned long flags; int idx; @@ -305,8 +310,8 @@ snd_ctl_elem_value_t * ucontrol) { unsigned long flags; - emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value; emu10k1_t *emu = snd_kcontrol_chip(kcontrol); + emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[snd_ctl_get_ioffidx(kcontrol, &ucontrol->id)]; int change = 0, idx, val; spin_lock_irqsave(&emu->reg_lock, flags); @@ -334,6 +339,7 @@ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "EMU10K1 PCM Volume", + .count = 32, .info = snd_emu10k1_attn_info, .get = snd_emu10k1_attn_get, .put = snd_emu10k1_attn_put @@ -420,7 +426,7 @@ int __devinit snd_emu10k1_mixer(emu10k1_t *emu) { ac97_t ac97; - int err, pcm, idx; + int err, pcm; snd_kcontrol_t *kctl; snd_card_t *card = emu->card; @@ -436,6 +442,19 @@ strcpy(emu->card->mixername, "EMU APS"); } + if ((kctl = emu->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + if ((kctl = emu->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + if ((kctl = emu->ctl_attn = snd_ctl_new1(&snd_emu10k1_attn_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + for (pcm = 0; pcm < 32; pcm++) { emu10k1_pcm_mixer_t *mix; int v; @@ -443,50 +462,26 @@ mix = &emu->pcm_mixer[pcm]; mix->epcm = NULL; - if ((kctl = mix->ctl_send_routing = snd_ctl_new1(&snd_emu10k1_send_routing_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = (long)mix; - kctl->id.index = pcm; - if ((err = snd_ctl_add(card, kctl))) - return err; for (v = 0; v < 4; v++) mix->send_routing[0][v] = mix->send_routing[1][v] = mix->send_routing[2][v] = v; - if ((kctl = mix->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = (long)mix; - kctl->id.index = pcm; - if ((err = snd_ctl_add(card, kctl))) - return err; memset(&mix->send_volume, 0, sizeof(mix->send_volume)); mix->send_volume[0][0] = mix->send_volume[0][1] = mix->send_volume[1][0] = mix->send_volume[2][1] = 255; - if ((kctl = mix->ctl_attn = snd_ctl_new1(&snd_emu10k1_attn_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = (long)mix; - kctl->id.index = pcm; - if ((err = snd_ctl_add(card, kctl))) - return err; mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff; } - for (idx = 0; idx < 3; idx++) { - if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = idx; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; - if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL) - return -ENOMEM; - kctl->private_value = idx; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; - } + if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_mask_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; + if ((kctl = snd_ctl_new1(&snd_emu10k1_spdif_control, emu)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, kctl))) + return err; if (emu->audigy) { if ((kctl = snd_ctl_new1(&snd_audigy_shared_spdif, emu)) == NULL) diff -Nru a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c --- a/sound/pci/emu10k1/emupcm.c Sat Apr 12 14:44:06 2003 +++ b/sound/pci/emu10k1/emupcm.c Sat Apr 12 14:44:06 2003 @@ -740,22 +740,25 @@ * */ -static void snd_emu10k1_pcm_mixer_notify1(snd_card_t *card, snd_kcontrol_t *kctl, int activate) +static void snd_emu10k1_pcm_mixer_notify1(emu10k1_t *emu, snd_kcontrol_t *kctl, int idx, int activate) { + snd_ctl_elem_id_t id; + snd_runtime_check(kctl != NULL, return); if (activate) - kctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + kctl->vd[idx].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; else - kctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; - snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE | - SNDRV_CTL_EVENT_MASK_INFO, &kctl->id); + kctl->vd[idx].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE | + SNDRV_CTL_EVENT_MASK_INFO, + snd_ctl_build_ioff(&id, kctl, idx)); } -static void snd_emu10k1_pcm_mixer_notify(snd_card_t *card, emu10k1_pcm_mixer_t *mix, int activate) +static void snd_emu10k1_pcm_mixer_notify(emu10k1_t *emu, int idx, int activate) { - snd_emu10k1_pcm_mixer_notify1(card, mix->ctl_send_routing, activate); - snd_emu10k1_pcm_mixer_notify1(card, mix->ctl_send_volume, activate); - snd_emu10k1_pcm_mixer_notify1(card, mix->ctl_attn, activate); + snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_routing, idx, activate); + snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_send_volume, idx, activate); + snd_emu10k1_pcm_mixer_notify1(emu, emu->ctl_attn, idx, activate); } static void snd_emu10k1_pcm_free_substream(snd_pcm_runtime_t *runtime) @@ -799,7 +802,7 @@ mix->send_volume[1][0] = mix->send_volume[2][1] = 255; mix->attn[0] = mix->attn[1] = mix->attn[2] = 0xffff; mix->epcm = epcm; - snd_emu10k1_pcm_mixer_notify(emu->card, mix, 1); + snd_emu10k1_pcm_mixer_notify(emu, substream->number, 1); return 0; } @@ -809,7 +812,7 @@ emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[substream->number]; mix->epcm = NULL; - snd_emu10k1_pcm_mixer_notify(emu->card, mix, 0); + snd_emu10k1_pcm_mixer_notify(emu, substream->number, 0); return 0; } diff -Nru a/sound/pci/ens1370.c b/sound/pci/ens1370.c --- a/sound/pci/ens1370.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/ens1370.c Sat Apr 12 14:44:09 2003 @@ -551,7 +551,7 @@ { ensoniq_t *ensoniq = snd_magic_cast(ensoniq_t, ak4531->private_data, return); unsigned long flags; - signed long end_time = jiffies + HZ / 10; + unsigned long end_time = jiffies + HZ / 10; #if 0 printk("CODEC WRITE: reg = 0x%x, val = 0x%x (0x%x), creg = 0x%x\n", reg, val, ES_1370_CODEC_WRITE(reg, val), ES_REG(ensoniq, 1370_CODEC)); @@ -568,7 +568,7 @@ set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); #endif - } while ((signed long)(end_time - jiffies) > 0); + } while (time_after(end_time, jiffies)); snd_printk("codec write timeout, status = 0x%x\n", inl(ES_REG(ensoniq, STATUS))); } diff -Nru a/sound/pci/es1938.c b/sound/pci/es1938.c --- a/sound/pci/es1938.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/es1938.c Sat Apr 12 14:44:09 2003 @@ -829,11 +829,14 @@ pos <<= chip->dma1_shift; count <<= chip->dma1_shift; snd_assert(pos + count <= chip->dma1_size, return -EINVAL); - if (pos + count < chip->dma1_size) - memcpy(dst, runtime->dma_area + pos + 1, count); - else { - memcpy(dst, runtime->dma_area + pos + 1, count - 1); - ((unsigned char *)dst)[count - 1] = runtime->dma_area[0]; + if (pos + count < chip->dma1_size) { + if (copy_to_user(dst, runtime->dma_area + pos + 1, count)) + return -EFAULT; + } else { + if (copy_to_user(dst, runtime->dma_area + pos + 1, count - 1)) + return -EFAULT; + if (put_user(runtime->dma_area[0], ((unsigned char *)dst) + count - 1)) + return -EFAULT; } return 0; } diff -Nru a/sound/pci/fm801.c b/sound/pci/fm801.c --- a/sound/pci/fm801.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/fm801.c Sat Apr 12 14:44:09 2003 @@ -921,7 +921,7 @@ fm801_t *chip; unsigned char rev, id; unsigned short cmdw; - signed long timeout; + unsigned long timeout; int err; static snd_device_ops_t ops = { .dev_free = snd_fm801_dev_free, @@ -969,7 +969,7 @@ goto __ac97_secondary; set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); - } while ((timeout - (signed long)jiffies) > 0); + } while (time_after(timeout, jiffies)); snd_printk("Primary AC'97 codec not found\n"); snd_fm801_free(chip); return -EIO; @@ -980,8 +980,7 @@ for (id = 3; id > 0; id--) { /* my card has the secondary codec */ /* at address #3, so the loop is inverted */ - if ((timeout - (signed long)jiffies) < HZ / 20) - timeout = jiffies + HZ / 20; + timeout = jiffies + HZ / 20; outw((1<<7) | (id << FM801_AC97_ADDR_SHIFT) | AC97_VENDOR_ID1, FM801_REG(chip, AC97_CMD)); udelay(5); @@ -996,7 +995,7 @@ } set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); - } while ((timeout - (signed long)jiffies) > 0); + } while (time_after(timeout, jiffies)); } /* the recovery phase, it seems that probing for non-existing codec might */ @@ -1010,7 +1009,7 @@ goto __ac97_ok; set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(1); - } while ((timeout - (signed long)jiffies) > 0); + } while (time_after(timeout, jiffies)); snd_printk("Primary AC'97 codec not responding\n"); snd_fm801_free(chip); return -EIO; diff -Nru a/sound/pci/ice1712/ak4524.c b/sound/pci/ice1712/ak4524.c --- a/sound/pci/ice1712/ak4524.c Sat Apr 12 14:44:08 2003 +++ b/sound/pci/ice1712/ak4524.c Sat Apr 12 14:44:08 2003 @@ -433,8 +433,8 @@ strcpy(ctl.id.name, "DAC Volume"); ctl.id.index = idx + ak->idx_offset * 2; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_akm4xxx_volume_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_akm4xxx_volume_get; ctl.put = snd_ice1712_akm4xxx_volume_put; switch (ak->type) { @@ -459,7 +459,7 @@ return -EINVAL; } ctl.private_data = ak; - if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; } for (idx = 0; idx < ak->num_adcs && ak->type == SND_AK4524; ++idx) { @@ -468,25 +468,25 @@ strcpy(ctl.id.name, "ADC Volume"); ctl.id.index = idx; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_akm4xxx_volume_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_akm4xxx_volume_get; ctl.put = snd_ice1712_akm4xxx_volume_put; ctl.private_value = AK_COMPOSE(idx/2, (idx%2) + 4, 0, 127); /* register 4 & 5 */ ctl.private_data = ak; - if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; memset(&ctl, 0, sizeof(ctl)); strcpy(ctl.id.name, "IPGA Analog Capture Volume"); ctl.id.index = idx; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_akm4xxx_ipga_gain_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_akm4xxx_ipga_gain_get; ctl.put = snd_ice1712_akm4xxx_ipga_gain_put; ctl.private_value = AK_COMPOSE(idx/2, (idx%2) + 4, 0, 0); /* register 4 & 5 */ ctl.private_data = ak; - if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; } for (idx = 0; idx < ak->num_dacs/2; idx++) { @@ -495,8 +495,8 @@ strcpy(ctl.id.name, "Deemphasis"); ctl.id.index = idx + ak->idx_offset; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_akm4xxx_deemphasis_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_akm4xxx_deemphasis_get; ctl.put = snd_ice1712_akm4xxx_deemphasis_put; switch (ak->type) { @@ -517,11 +517,9 @@ break; } ctl.private_data = ak; - if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(ice->card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; } } return 0; } - - diff -Nru a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c --- a/sound/pci/ice1712/ice1712.c Sat Apr 12 14:44:07 2003 +++ b/sound/pci/ice1712/ice1712.c Sat Apr 12 14:44:07 2003 @@ -1373,25 +1373,25 @@ strcpy(ctl.id.name, "Multi Playback Switch"); ctl.id.index = idx; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_pro_mixer_switch_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_pro_mixer_switch_get; ctl.put = snd_ice1712_pro_mixer_switch_put; ctl.private_value = idx; ctl.private_data = ice; - if ((err = snd_ctl_add(card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; memset(&ctl, 0, sizeof(ctl)); strcpy(ctl.id.name, "Multi Playback Volume"); ctl.id.index = idx; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_pro_mixer_volume_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_pro_mixer_volume_get; ctl.put = snd_ice1712_pro_mixer_volume_put; ctl.private_value = idx; ctl.private_data = ice; - if ((err = snd_ctl_add(card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; } @@ -1401,25 +1401,25 @@ strcpy(ctl.id.name, "Multi Capture Switch"); ctl.id.index = idx; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_pro_mixer_switch_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_pro_mixer_switch_get; ctl.put = snd_ice1712_pro_mixer_switch_put; ctl.private_value = idx + 10; ctl.private_data = ice; - if ((err = snd_ctl_add(card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; memset(&ctl, 0, sizeof(ctl)); strcpy(ctl.id.name, "Multi Capture Volume"); ctl.id.index = idx; ctl.id.iface = SNDRV_CTL_ELEM_IFACE_MIXER; + ctl.count = 1; ctl.info = snd_ice1712_pro_mixer_volume_info; - ctl.access = SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE; ctl.get = snd_ice1712_pro_mixer_volume_get; ctl.put = snd_ice1712_pro_mixer_volume_put; ctl.private_value = idx + 10; ctl.private_data = ice; - if ((err = snd_ctl_add(card, snd_ctl_new(&ctl))) < 0) + if ((err = snd_ctl_add(card, snd_ctl_new(&ctl, SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE))) < 0) return err; } diff -Nru a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c --- a/sound/pci/intel8x0.c Sat Apr 12 14:44:08 2003 +++ b/sound/pci/intel8x0.c Sat Apr 12 14:44:08 2003 @@ -199,6 +199,7 @@ #define ICH_SIS_PCM_6 0x00000080 /* 6 channels (SIS7012) */ #define ICH_SIS_PCM_4 0x00000040 /* 4 channels (SIS7012) */ #define ICH_SIS_PCM_2 0x00000000 /* 2 channels (SIS7012) */ +#define ICH_TRIE 0x00000040 /* tertiary resume interrupt enable */ #define ICH_SRIE 0x00000020 /* secondary resume interrupt enable */ #define ICH_PRIE 0x00000010 /* primary resume interrupt enable */ #define ICH_ACLINK 0x00000008 /* AClink shut off */ @@ -1609,10 +1610,11 @@ udelay(1); } } + ac97.pci = chip->pci; if ((err = snd_ac97_mixer(chip->card, &ac97, &x97)) < 0) return err; chip->ac97[0] = x97; - snd_ac97_tune_hardware(chip->ac97[0], chip->pci, ac97_quirks); + snd_ac97_tune_hardware(chip->ac97[0], ac97_quirks); chip->ichd[ICHD_PCMOUT].ac97 = x97; chip->ichd[ICHD_PCMIN].ac97 = x97; if (x97->ext_id & AC97_EI_VRM) diff -Nru a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c --- a/sound/pci/korg1212/korg1212.c Sat Apr 12 14:44:06 2003 +++ b/sound/pci/korg1212/korg1212.c Sat Apr 12 14:44:06 2003 @@ -149,9 +149,9 @@ #define MAILBOX1_OFFSET 0x44 // location of mailbox 1 relative to base address #define MAILBOX2_OFFSET 0x48 // location of mailbox 2 relative to base address #define MAILBOX3_OFFSET 0x4c // location of mailbox 3 relative to base address -#define OUT_DOORBELL_OFFSET 0x60 // location of PCI to local doorbell " -#define IN_DOORBELL_OFFSET 0x64 // location of local to PCI doorbell " -#define STATUS_REG_OFFSET 0x68 // location of interrupt control/status register " +#define OUT_DOORBELL_OFFSET 0x60 // location of PCI to local doorbell +#define IN_DOORBELL_OFFSET 0x64 // location of local to PCI doorbell +#define STATUS_REG_OFFSET 0x68 // location of interrupt control/status register #define PCI_CONTROL_OFFSET 0x6c // location of the EEPROM, PCI, User I/O, init control // register #define SENS_CONTROL_OFFSET 0x6e // location of the input sensitivity setting register. @@ -329,6 +329,10 @@ int irq; spinlock_t lock; + struct semaphore open_mutex; + + struct timer_list timer; /* timer callback for checking ack of stop request */ + int stop_pending_cnt; /* counter for stop pending check */ wait_queue_head_t wait; @@ -602,66 +606,79 @@ return rc; } -static void snd_korg1212_WaitForCardStopAck(korg1212_t *korg1212) +/* spinlock already held */ +static void snd_korg1212_SendStop(korg1212_t *korg1212) { - u32 endtime = jiffies + 2 * HZ; - -#if K1212_DEBUG_LEVEL > 0 - K1212_DEBUG_PRINTK("K1212_DEBUG: WaitForCardStopAck.in [%s] %lu %lu\n", stateName[korg1212->cardState], jiffies, korg1212->inIRQ); -#endif + if (! korg1212->stop_pending_cnt) { + writel(0xffffffff, &korg1212->sharedBufferPtr->cardCommand); + /* program the timer */ + korg1212->stop_pending_cnt = HZ; + korg1212->timer.expires = jiffies + 1; + add_timer(&korg1212->timer); + } +} - if (korg1212->inIRQ) - return; +static void snd_korg1212_SendStopAndWait(korg1212_t *korg1212) +{ + unsigned long flags; + spin_lock_irqsave(&korg1212->lock, flags); + snd_korg1212_SendStop(korg1212); + spin_unlock_irqrestore(&korg1212->lock, flags); + sleep_on_timeout(&korg1212->wait, (HZ * 3) / 2); +} - do { - if (readl(&korg1212->sharedBufferPtr->cardCommand) == 0) { -#if K1212_DEBUG_LEVEL > 0 - K1212_DEBUG_PRINTK("K1212_DEBUG: WaitForCardStopAck.out [%s] %lu %lu\n", stateName[korg1212->cardState], jiffies, korg1212->inIRQ); +/* timer callback for checking the ack of stop request */ +static void snd_korg1212_timer_func(unsigned long data) +{ + korg1212_t *korg1212 = snd_magic_cast(korg1212_t, (void*)data, return); + + spin_lock(&korg1212->lock); + if (readl(&korg1212->sharedBufferPtr->cardCommand) == 0) { + /* ack'ed */ + korg1212->stop_pending_cnt = 0; + wake_up(&korg1212->wait); +#if K1212_DEBUG_LEVEL > 1 + K1212_DEBUG_PRINTK("K1212_DEBUG: Stop ack'ed [%s]\n", stateName[korg1212->cardState]); #endif - return; - } - if (!korg1212->inIRQ) - schedule(); - } while (time_before(jiffies, endtime)); - + } else { + if (--korg1212->stop_pending_cnt > 0) { + /* reprogram timer */ + korg1212->timer.expires = jiffies + 1; + add_timer(&korg1212->timer); + } else { + snd_printd("korg1212_timer_func timeout\n"); + writel(0, &korg1212->sharedBufferPtr->cardCommand); + wake_up(&korg1212->wait); #if K1212_DEBUG_LEVEL > 0 - K1212_DEBUG_PRINTK("K1212_DEBUG: WaitForCardStopAck.out TO [%s] %lu %lu\n", stateName[korg1212->cardState], jiffies, korg1212->inIRQ); + K1212_DEBUG_PRINTK("K1212_DEBUG: Stop timeout [%s]\n", stateName[korg1212->cardState]); #endif - writel(0, &korg1212->sharedBufferPtr->cardCommand); + } + } + spin_unlock(&korg1212->lock); } static void snd_korg1212_TurnOnIdleMonitor(korg1212_t *korg1212) { + unsigned long flags; + udelay(INTERCOMMAND_DELAY); + spin_lock_irqsave(&korg1212->lock, flags); korg1212->idleMonitorOn = 1; rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode, - K1212_MODE_MonitorOn, 0, 0, 0); + K1212_MODE_MonitorOn, 0, 0, 0); + spin_unlock_irqrestore(&korg1212->lock, flags); } static void snd_korg1212_TurnOffIdleMonitor(korg1212_t *korg1212) { if (korg1212->idleMonitorOn) { - writel(0xffffffff, &korg1212->sharedBufferPtr->cardCommand); - snd_korg1212_WaitForCardStopAck(korg1212); + snd_korg1212_SendStopAndWait(korg1212); korg1212->idleMonitorOn = 0; } } -static void snd_korg1212_setCardState(korg1212_t * korg1212, CardState csState) +static inline void snd_korg1212_setCardState(korg1212_t * korg1212, CardState csState) { - switch (csState) { - case K1212_STATE_READY: - snd_korg1212_TurnOnIdleMonitor(korg1212); - break; - - case K1212_STATE_OPEN: - snd_korg1212_TurnOffIdleMonitor(korg1212); - break; - - default: - break; - } - korg1212->cardState = csState; } @@ -670,8 +687,13 @@ #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: OpenCard [%s] %d\n", stateName[korg1212->cardState], korg1212->opencnt); #endif - if (korg1212->opencnt++ == 0) + down(&korg1212->open_mutex); + if (korg1212->opencnt++ == 0) { + snd_korg1212_TurnOffIdleMonitor(korg1212); snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN); + } + + up(&korg1212->open_mutex); return 1; } @@ -681,8 +703,11 @@ K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard [%s] %d\n", stateName[korg1212->cardState], korg1212->opencnt); #endif - if (--(korg1212->opencnt)) + down(&korg1212->open_mutex); + if (--(korg1212->opencnt)) { + up(&korg1212->open_mutex); return 0; + } if (korg1212->cardState == K1212_STATE_SETUP) { rc = snd_korg1212_Send1212Command(korg1212, K1212_DB_SelectPlayMode, @@ -691,19 +716,24 @@ if (rc) K1212_DEBUG_PRINTK("K1212_DEBUG: CloseCard - RC = %d [%s]\n", rc, stateName[korg1212->cardState]); #endif - if (rc != K1212_CMDRET_Success) + if (rc != K1212_CMDRET_Success) { + up(&korg1212->open_mutex); return 0; + } } else if (korg1212->cardState > K1212_STATE_SETUP) { - writel(0xffffffff, &korg1212->sharedBufferPtr->cardCommand); - snd_korg1212_WaitForCardStopAck(korg1212); + snd_korg1212_SendStopAndWait(korg1212); } - if (korg1212->cardState > K1212_STATE_READY) + if (korg1212->cardState > K1212_STATE_READY) { + snd_korg1212_TurnOnIdleMonitor(korg1212); snd_korg1212_setCardState(korg1212, K1212_STATE_READY); + } + up(&korg1212->open_mutex); return 0; } +/* spinlock already held */ static int snd_korg1212_SetupForPlay(korg1212_t * korg1212) { #if K1212_DEBUG_LEVEL > 0 @@ -726,6 +756,7 @@ return 0; } +/* spinlock already held */ static int snd_korg1212_TriggerPlay(korg1212_t * korg1212) { #if K1212_DEBUG_LEVEL > 0 @@ -748,6 +779,7 @@ return 0; } +/* spinlock already held */ static int snd_korg1212_StopPlay(korg1212_t * korg1212) { #if K1212_DEBUG_LEVEL > 0 @@ -759,11 +791,10 @@ korg1212->setcnt = 0; - if (korg1212->cardState != K1212_STATE_ERRORSTOP) { - writel(0xffffffff, &korg1212->sharedBufferPtr->cardCommand); - snd_korg1212_WaitForCardStopAck(korg1212); - } - snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN); + if (korg1212->cardState != K1212_STATE_ERRORSTOP) + snd_korg1212_SendStop(korg1212); + + snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN); return 0; } @@ -789,8 +820,7 @@ if (korg1212->cardState != K1212_STATE_MONITOR) { return 0; } else { - writel(0xffffffff, &korg1212->sharedBufferPtr->cardCommand); - snd_korg1212_WaitForCardStopAck(korg1212); + snd_korg1212_SendStopAndWait(korg1212); snd_korg1212_setCardState(korg1212, K1212_STATE_OPEN); } break; @@ -884,6 +914,7 @@ u16 controlValue; // this keeps the current value to be written to // the card's eeprom control register. u16 count; + unsigned long flags; #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: WriteADCSensivity [%s]\n", stateName[korg1212->cardState]); @@ -900,12 +931,13 @@ // make sure the card is not in monitor mode when we do this update. // ---------------------------------------------------------------------------- if (korg1212->cardState == K1212_STATE_MONITOR || korg1212->idleMonitorOn) { - writel(0xffffffff, &korg1212->sharedBufferPtr->cardCommand); monModeSet = 1; - snd_korg1212_WaitForCardStopAck(korg1212); + snd_korg1212_SendStopAndWait(korg1212); } else monModeSet = 0; + spin_lock_irqsave(&korg1212->lock, flags); + // ---------------------------------------------------------------------------- // we are about to send new values to the card, so clear the new values queued // flag. Also, clear out mailbox 3, so we don't lockup. @@ -1016,6 +1048,8 @@ } + spin_unlock_irqrestore(&korg1212->lock, flags); + return 1; } @@ -1089,13 +1123,14 @@ if (rc) K1212_DEBUG_PRINTK("K1212_DEBUG: Set Clock Source Selector - RC = %d [%s]\n", rc, stateName[korg1212->cardState]); #endif + snd_korg1212_TurnOnIdleMonitor(korg1212); snd_korg1212_setCardState(korg1212, K1212_STATE_READY); #if K1212_DEBUG_LEVEL > 0 if (rc) K1212_DEBUG_PRINTK("K1212_DEBUG: Set Monitor On - RC = %d [%s]\n", rc, stateName[korg1212->cardState]); #endif - wake_up_interruptible(&korg1212->wait); + snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE); } static void snd_korg1212_interrupt(int irq, void *dev_id, struct pt_regs *regs) @@ -1111,6 +1146,8 @@ if (!doorbellValue) return; + spin_lock(&korg1212->lock); + writel(doorbellValue, korg1212->inDoorbellPtr); korg1212->irqcount++; @@ -1123,10 +1160,8 @@ #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: IRQ DNLD count - %ld, %x, [%s].\n", korg1212->irqcount, doorbellValue, stateName[korg1212->cardState]); #endif - if (korg1212->cardState == K1212_STATE_DSP_IN_PROCESS) { - snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE); - snd_korg1212_OnDSPDownloadComplete(korg1212); - } + if (korg1212->cardState == K1212_STATE_DSP_IN_PROCESS) + wake_up(&korg1212->wait); break; // ------------------------------------------------------------------------ @@ -1166,17 +1201,23 @@ break; if (korg1212->capture_substream) { + spin_unlock(&korg1212->lock); snd_pcm_period_elapsed(korg1212->capture_substream); + spin_lock(&korg1212->lock); } if (korg1212->playback_substream) { + spin_unlock(&korg1212->lock); snd_pcm_period_elapsed(korg1212->playback_substream); + spin_lock(&korg1212->lock); } } break; } korg1212->inIRQ--; + + spin_unlock(&korg1212->lock); } static int snd_korg1212_downloadDSPCode(korg1212_t *korg1212) @@ -1205,7 +1246,10 @@ if (rc) K1212_DEBUG_PRINTK("K1212_DEBUG: Start DSP Download RC = %d [%s]\n", rc, stateName[korg1212->cardState]); #endif - interruptible_sleep_on_timeout(&korg1212->wait, HZ * 4); + if (! sleep_on_timeout(&korg1212->wait, HZ * 4)) + return -EBUSY; /* timeout */ + + snd_korg1212_OnDSPDownloadComplete(korg1212); return 0; } @@ -1363,14 +1407,14 @@ snd_pcm_set_sync(substream); // ??? - spin_lock_irqsave(&korg1212->lock, flags); - snd_korg1212_OpenCard(korg1212); runtime->hw = snd_korg1212_playback_info; runtime->dma_area = (char *) korg1212->playDataBufsPtr; runtime->dma_bytes = K1212_BUF_SIZE; + spin_lock_irqsave(&korg1212->lock, flags); + korg1212->playback_substream = substream; korg1212->periodsize = K1212_PERIODS; korg1212->channels = K1212_CHANNELS; @@ -1394,14 +1438,14 @@ snd_pcm_set_sync(substream); // ??? - spin_lock_irqsave(&korg1212->lock, flags); - snd_korg1212_OpenCard(korg1212); runtime->hw = snd_korg1212_capture_info; runtime->dma_area = (char *) korg1212->recordDataBufsPtr; runtime->dma_bytes = K1212_BUF_SIZE; + spin_lock_irqsave(&korg1212->lock, flags); + korg1212->capture_substream = substream; korg1212->periodsize = K1212_PERIODS; korg1212->channels = K1212_CHANNELS; @@ -1428,9 +1472,9 @@ korg1212->playback_substream = NULL; korg1212->periodsize = 0; - snd_korg1212_CloseCard(korg1212); - spin_unlock_irqrestore(&korg1212->lock, flags); + + snd_korg1212_CloseCard(korg1212); return 0; } @@ -1448,9 +1492,9 @@ korg1212->capture_substream = NULL; korg1212->periodsize = 0; - snd_korg1212_CloseCard(korg1212); - spin_unlock_irqrestore(&korg1212->lock, flags); + + snd_korg1212_CloseCard(korg1212); return 0; } @@ -1508,19 +1552,33 @@ static int snd_korg1212_prepare(snd_pcm_substream_t *substream) { korg1212_t *korg1212 = _snd_pcm_substream_chip(substream); - unsigned long flags; int rc; #if K1212_DEBUG_LEVEL > 0 K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare [%s]\n", stateName[korg1212->cardState]); #endif - spin_lock_irqsave(&korg1212->lock, flags); + spin_lock(&korg1212->lock); + + /* FIXME: we should wait for ack! */ + if (korg1212->stop_pending_cnt > 0) { +#if K1212_DEBUG_LEVEL > 0 + K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_prepare - Stop is pending... [%s]\n", stateName[korg1212->cardState]); +#endif + spin_unlock(&korg1212->lock); + return -EAGAIN; + /* + writel(0, &korg1212->sharedBufferPtr->cardCommand); + del_timer(&korg1212->timer); + korg1212->stop_pending_cnt = 0; + */ + } rc = snd_korg1212_SetupForPlay(korg1212); + korg1212->currentBuffer = 0; - spin_unlock_irqrestore(&korg1212->lock, flags); + spin_unlock(&korg1212->lock); return rc ? -EINVAL : 0; } @@ -1535,6 +1593,7 @@ K1212_DEBUG_PRINTK("K1212_DEBUG: snd_korg1212_trigger [%s] cmd=%d\n", stateName[korg1212->cardState], cmd); #endif + spin_lock(&korg1212->lock); switch (cmd) { case SNDRV_PCM_TRIGGER_START: /* @@ -1566,6 +1625,7 @@ rc = 1; break; } + spin_unlock(&korg1212->lock); return rc ? -EINVAL : 0; } @@ -1894,11 +1954,11 @@ change = 1; } + spin_unlock_irqrestore(&korg1212->lock, flags); + if (change) snd_korg1212_WriteADCSensitivity(korg1212); - spin_unlock_irqrestore(&korg1212->lock, flags); - return change; } @@ -2151,6 +2211,10 @@ init_waitqueue_head(&korg1212->wait); spin_lock_init(&korg1212->lock); + init_MUTEX(&korg1212->open_mutex); + init_timer(&korg1212->timer); + korg1212->timer.function = snd_korg1212_timer_func; + korg1212->timer.data = (unsigned long)korg1212; korg1212->irq = -1; korg1212->clkSource = K1212_CLKIDX_Local; diff -Nru a/sound/pci/maestro3.c b/sound/pci/maestro3.c --- a/sound/pci/maestro3.c Sat Apr 12 14:44:08 2003 +++ b/sound/pci/maestro3.c Sat Apr 12 14:44:08 2003 @@ -949,6 +949,13 @@ }, /* FIXME: Inspiron 8100 id should probably be here, too * (8200 irrelevant: has intel8x0 with CS4205) */ + /* NEC LM800J/7 */ + { + .name = "NEC LM800J/7", + .vendor = 0x1033, + .device = 0x80f1, + .amp_gpio = 0x03, + }, /* END */ { 0 } }; diff -Nru a/sound/pci/rme32.c b/sound/pci/rme32.c --- a/sound/pci/rme32.c Sat Apr 12 14:44:10 2003 +++ b/sound/pci/rme32.c Sat Apr 12 14:44:10 2003 @@ -904,7 +904,7 @@ &hw_constraints_period_bytes); rme32->wcreg_spdif_stream = rme32->wcreg_spdif; - rme32->spdif_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + rme32->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &rme32->spdif_ctl->id); return 0; @@ -1037,7 +1037,7 @@ spdif = (rme32->wcreg & RME32_WCR_ADAT) == 0; spin_unlock_irqrestore(&rme32->lock, flags); if (spdif) { - rme32->spdif_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + rme32->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(rme32->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &rme32->spdif_ctl->id); diff -Nru a/sound/pci/rme96.c b/sound/pci/rme96.c --- a/sound/pci/rme96.c Sat Apr 12 14:44:07 2003 +++ b/sound/pci/rme96.c Sat Apr 12 14:44:07 2003 @@ -1226,7 +1226,7 @@ snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, &hw_constraints_period_bytes); rme96->wcreg_spdif_stream = rme96->wcreg_spdif; - rme96->spdif_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + rme96->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id); return 0; @@ -1361,7 +1361,7 @@ spdif = (rme96->wcreg & RME96_WCR_ADAT) == 0; spin_unlock_irqrestore(&rme96->lock, flags); if (spdif) { - rme96->spdif_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + rme96->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(rme96->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &rme96->spdif_ctl->id); } diff -Nru a/sound/pci/rme9652/digiface_firmware.dat b/sound/pci/rme9652/digiface_firmware.dat --- a/sound/pci/rme9652/digiface_firmware.dat Sat Apr 12 14:44:08 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,4072 +0,0 @@ -/* stored in little-endian */ -static u32 digiface_firmware[24413] __devinitdata = { -0xffffffff, 0x66aa9955, 0x8001000c, 0xe0000000, 0x8006800c, 0xb0000000, -0x8004800c, 0xb4fc0100, 0x8003000c, 0x00000000, 0x8001000c, 0x90000000, -0x8004000c, 0x00000000, 0x8001000c, 0x80000000, 0x0002000c, 0x581a000a, -0x00044800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, -0x00000120, 0x00000000, 0x00044800, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x40800000, 0x00000120, 0x00000000, 0x00024001, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000, -0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000100, 0x00000000, 0x00004008, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000900, 0x00000000, 0x0000c008, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000320, 0x00000000, -0x00004801, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000120, 0x00000000, 0x438048f6, 0x78011e00, 0x8005e001, 0x015c001f, -0x11e000f8, 0x9e004f80, 0xe005f801, 0x002f8019, 0x057801be, 0x778005e0, -0xd800fe00, 0xbc0f6002, 0x00000123, 0x00000000, 0x040fb003, 0x03cd803f, -0x3cc40fb2, 0xfc20ff00, 0xc00ff083, 0x20ff083f, 0x0f3003ec, 0xff0837ca, -0xf003fc00, 0x113e820f, 0x0bcc40fb, 0x0fc0c311, 0x00000e00, 0x00000000, -0x00870001, 0x0844a03f, 0x044001f1, 0x74000e08, 0x4201f000, 0x001d0007, -0x01500074, 0x1d100740, 0xd0007400, 0x01854143, 0x0bc40051, 0x0440c1b0, -0x00000c20, 0x00000000, 0x0043a011, 0x0a24000d, 0x304808d0, 0x1420cd20, -0x400cd003, 0x00c10013, 0x0c158314, 0xc5001340, 0xd0033440, 0x04915004, -0x1b060049, 0x44404019, 0x00000e80, 0x00000000, 0x09058803, 0x81643155, -0x04410550, 0x76201d00, 0x4001d900, 0x001d9827, 0x01590034, 0x1c002700, -0xd8007600, 0x00275009, 0x030608c1, 0x0c402414, 0x00000620, 0x00000000, -0x0037a802, 0x0166011d, 0x54d00d90, 0x7c001f02, 0xc201f080, 0x33df0027, -0x0110006c, 0x5f0277c2, 0xf0807428, 0x0026c209, 0x034c52db, 0x02d01910, -0x00000e20, 0x00000000, 0x003d8007, 0x02d4202f, 0x6f8803f2, 0xfc00f720, -0xc00f7003, 0x083f101f, 0x0fb003f8, 0xbf100fc0, 0xf003fc01, 0x0818c006, -0x83fd80ff, 0x1ec093f0, 0x00000602, 0x00000000, 0x00150802, 0x904e8397, -0x17c089b0, 0x7c001f01, 0xc0417020, 0x00db0107, 0x01f0007c, 0x5f0117c8, -0x30007c18, 0x0804c001, 0x034c00d3, 0x08c06bb0, 0x00000420, 0x00000000, -0x0c14a013, 0x0b4c21dd, 0x2740a514, 0x6001d601, 0x803d1003, 0x09152077, -0xbdd10774, 0x9d006748, 0x402b7c42, 0x04fe400f, 0x03c400d1, 0x4c913910, -0x00000200, 0x00000000, 0x00428007, 0x07048085, 0x63403510, 0x0405cd00, -0x421c901b, 0x220120b3, 0x0cd04f34, 0x8920e340, 0x90073443, 0x0972580c, -0x032400c1, 0x1c403410, 0x00000a00, 0x00000000, 0x00488004, 0x24a409ad, -0x5b408a10, 0x94312508, 0x411290a4, 0x91e10249, 0x92d0a4b4, 0x6d0c5b40, -0xd0140425, 0x000a0010, 0x07a400c1, 0x1a409e14, 0x00000200, 0x00000000, -0x00300012, 0x62460097, 0x23c00034, 0x7d00cf00, 0x400cf403, 0x04034417, -0x0cf0433c, 0x8f2043c1, 0xb0673400, 0x0314c004, 0x036c48c3, 0x48c08130, -0x00000040, 0x00000000, 0x003da802, 0x21dc20ff, 0x17c0cf70, 0xec883f00, -0x80037200, 0x00f7a82f, 0x03f2007c, 0x7f203fc2, 0x70807c84, 0x016dc88b, -0x0bdc0cbf, 0x09c08771, 0x00000660, 0x00000000, 0x0027aa15, 0x014c049f, -0x05401530, 0x5c001300, 0xc0113004, 0x00170024, 0x01300044, 0x1f0024d0, -0xf0005c00, 0x0027c0e9, 0x236c00df, 0x54c01f10, 0x00000e00, 0x00000000, -0x10298812, 0x02ec08fd, 0x38600a10, 0x3c00eb28, 0xc40eb303, 0x00eb0012, -0x0fb00384, 0xf90018c0, 0xd103bc00, 0x005b4146, 0x038440ad, 0x48400c12, -0x00000620, 0x00000000, 0x00790003, 0x048400ad, 0x40401283, 0xb4012508, -0x40109004, 0x01210048, 0x12900404, 0x2d004a40, 0xd0048441, 0x024b4052, -0x173401ed, 0x0d411e13, 0x00000402, 0x00000000, 0x04b32012, 0x030449cd, -0x31400c90, 0x3448cd10, 0x452c984b, 0x00c98232, 0x2c900f04, 0xc9203061, -0xd8cb0512, 0x8033601d, 0x031403cd, 0x49403c10, 0x00000c20, 0x00000000, -0x01dda017, 0x09c4827f, 0x14d005b4, 0x5c035702, 0x4865b019, 0x40510054, -0x65903545, 0x5d1016c2, 0xf0195402, 0x0113e055, 0x017c117f, 0x5dd03730, -0x00000620, 0x00000000, 0x20030012, 0x407c301f, 0x8ac80373, 0xdc063b10, -0xc023f208, 0x023e008f, 0x03f008bc, 0x3b000fc0, 0xf000fe02, 0x000fea23, -0x0024001f, 0x4a0061f4, 0x00000c00, 0x00000000, 0x00270010, 0x020c0883, -0x67c04930, 0x7c419300, 0xc0599016, 0x05830161, 0x4830066c, 0x8720a0c0, -0x308a2e41, 0x3824cc59, 0x026d5097, 0x43c01930, 0x00000c20, 0x00000000, -0x38662801, 0x16540091, 0x27644950, 0x5c009500, 0x40499012, 0x839500e7, -0x7952165c, 0x9510e540, 0x520e5403, 0x00244009, 0x02640091, 0x07407950, -0x00000800, 0x00000000, 0x0224a018, 0x12440091, 0x2f400912, 0xe488b902, -0x400bd082, 0x00bd002f, 0x0b1822c4, 0xb1102c40, 0x1002c408, 0x902e002b, -0x0245008d, 0x63444910, 0x00000200, 0x00000000, 0x48202010, 0x0a140281, -0xab402a50, 0x8402ad00, 0x442a910a, 0xc2a528ab, 0x2a528a94, 0xa538b944, -0x520b9402, 0x022a528a, 0x12040089, 0x43408850, 0x00000080, 0x00000000, -0x0506b01d, 0x504e0013, 0x17400030, 0x7c205b20, 0xc001f000, 0x004b2017, -0x0130004e, 0x570004c0, 0x30006c00, 0x0d8ec161, 0x2c6c1e0f, 0x77c16130, -0x00000ac0, 0x00000000, 0x002f9019, 0x02fc42ff, 0xa7c029f1, 0x70029720, -0xc029f00a, 0x029f10b7, 0x29f00a5c, 0x9f00a7c2, 0xf00a7c82, 0x0125c049, -0x267c81b7, 0x67c24bb4, 0x00000e60, 0x00000000, 0x012fa818, 0x0a4c14bf, -0x24c129b0, 0x4c089e05, 0x89693222, 0x149325a4, 0x29321246, 0x93022480, -0xb04a6802, 0x002fc94b, 0x026c009d, 0x67c10bf0, 0x00000e00, 0x00000000, -0x8087081c, 0x006c461d, 0x86c02110, 0x6c421d30, 0xc461b008, 0x42111186, -0x01113844, 0x1b938440, 0x1100ec80, 0x01074060, 0x28440e17, 0x734021e0, -0x00000c22, 0x00000000, 0x00a3a010, 0x1284108d, 0x2b604a50, 0x8606ad84, -0x600ad81a, 0x10a58028, 0x6a584296, 0xad802942, 0x98129446, 0x04a24908, -0x5224108d, 0x434148d0, 0x00000e80, 0x00000000, 0x01a5a018, 0x0224009d, -0x2f440b10, 0xa400bd00, 0x420bd002, 0x60b5182a, 0x0a5103c4, 0xb91c2d40, -0x1002f420, 0x00276409, 0x82640095, 0x63414950, 0x00000620, 0x00000000, -0x00a7a005, 0x064c029d, 0x25c009b4, 0x4c009f00, 0xc009f402, 0x00974024, -0x09540255, 0x9d00a5d0, 0xb0025420, 0x0126c909, 0x026c049f, 0x17c039d0, -0x00000e20, 0x00000000, 0x00258014, 0x0e7c029f, 0x26c099f0, 0x7c008f00, -0xc4093082, 0x009b3827, 0x09b3026c, 0x9b0026c0, 0xf0026c00, 0x0427e809, -0x025c0587, 0x53c019f0, 0x00000600, 0x00000000, 0x00050014, 0x00cc0217, -0x0cc30238, 0xcc103340, 0xc4023000, 0x8037048f, 0x03f280cc, 0x2b0088c0, -0xf000f800, 0x2084c001, 0x80480213, 0x53c021d2, 0x00000420, 0x00000000, -0x0014a814, 0x0145015d, 0x95431558, 0x54025100, 0x44355021, 0x1b570017, -0x85d18970, 0x5d201540, 0xd001f40a, 0x009c4007, 0x01440055, 0x530067d0, -0x00000200, 0x00000000, 0x0032a014, 0x038401dd, 0xba601e12, 0xb628e904, -0x43ae90a3, 0x23fd20bb, 0x0e904fe4, 0xed0c7860, 0xd087d48a, 0x08b3420c, -0x830400c9, 0x53413cd0, 0x00000a00, 0x00000000, 0x10388005, 0x038402ed, -0xfb400c50, 0x3400e900, 0x400ed203, 0x00e5003a, 0x2ed00bb4, 0xed843940, -0xd00ba440, 0x0043421e, 0x138404ed, 0x17400ed0, 0x00000200, 0x00000000, -0x00681015, 0x070c81ff, 0x7ec01e18, 0xbc01cb18, 0xc01eb007, 0x21c7007b, -0x1cf187ac, 0xeb0078c0, 0xf0079c01, 0x007bc01e, 0x178e01fb, 0x57c01af0, -0x00000040, 0x00000000, 0x0035b010, 0x007c00df, 0x05c001f0, 0x5c001710, -0xc0016000, 0x001f0017, 0x01f0005c, 0x1f1007c8, 0xf0007c00, 0x0804c00d, -0x1b7d0ad7, 0x43c003f0, 0x00000660, 0x00000000, 0x007ba000, 0x07c804f3, -0x7c801f30, 0xc801f300, 0xc01fb007, 0x09da0274, 0x1fe007dc, 0xf2027f80, -0xf087f809, 0x005cc09d, 0x4f5403df, 0x0bc097f0, 0x00000e00, 0x00000000, -0x00398815, 0x138410ab, 0x3ac04e10, 0x8444f100, 0x440ef113, 0x27ef0078, -0x0ef023b4, 0xeb10b9c0, 0xd0033408, 0x0408441e, 0x079421fd, 0x57c00ad0, -0x00000620, 0x00000000, 0x00290000, 0x83040081, 0x38400e12, 0xa400e102, -0x400e9843, 0x08ed0138, 0x0ed003b4, 0xe9003b40, 0xd047b400, 0x001a408c, -0x038700ed, 0x236006d0, 0x00000400, 0x00000000, 0x30332804, 0x8c240099, -0xc260a010, 0x340a0120, 0x40315a08, 0x420d1210, 0xe0402834, 0x01428540, -0xd004344e, 0x0040489c, 0x030413dd, 0x194020d0, 0x00000c20, 0x00000000, -0x0035a815, 0x634c01d1, 0xf4c83d10, 0x6d03d349, 0x507d900b, 0x92d90064, -0x3dd00f5e, 0xd900f7c0, 0xd0077c03, 0x00c4c00d, 0x03dd12ff, 0x57400dd0, -0x00000620, 0x00000000, 0x28260001, 0x015c00df, 0xb7c02df0, 0x4c00df00, -0xc02df10b, 0xc2d700a7, 0x2df0037c, 0xdf08b7c4, 0xf2037c42, 0x0497d00c, -0x037400df, 0x27007ff2, 0x00000c00, 0x00000000, 0x006b0880, 0x02a400f3, -0x7ec10c30, 0xfc11ff04, 0xc19ff057, 0x15f7046c, 0x9ff0c3c4, 0xf3043e00, -0x7063cc42, 0x000cc103, 0x03cd00f3, 0x04c01af1, 0x00000c20, 0x00000000, -0x00262081, 0x034400d1, 0x85404110, 0x74041d10, 0x4031d10c, 0x401e2404, -0x51d00874, 0x1110c740, 0x10045401, 0x43514031, 0x034080d5, 0x254059d0, -0x00000802, 0x00000000, 0x02342001, 0x1b5400d1, 0x04404110, 0x74081d06, -0x41015840, 0x201c2204, 0x01d0a044, 0x01020640, 0x500224b0, 0x0024538d, -0x834000d1, 0x044085d0, 0x00000200, 0x00000000, 0x00202010, 0x01140081, -0x01400010, 0x34000c00, 0x5000d800, 0x24090100, 0x00d10036, 0x01400340, -0x10023400, 0x0010410c, 0x030404c1, 0x404004d2, 0x00000080, 0x00000000, -0x00269000, 0x025c0093, 0x00c00110, 0x7c801f08, 0xc8007080, 0x011f0844, -0x01f2004e, 0x120202c2, 0x70826c80, 0x0024c011, 0x17cc01f3, 0x04c001f0, -0x00000ac0, 0x00000000, 0x802fb005, 0x03cc00bf, 0x3fc40fd0, 0xfc00ff10, -0xc00ff103, 0x08f7022f, 0x0ff003fc, 0xff097fc0, 0xf045dc00, 0x001fc403, -0xa3fc08ff, 0x17c003f0, 0x00000e40, 0x00000000, 0x000fa003, 0x23fc00ff, -0x3cc00f31, 0xcc00fd30, 0xc00ff003, 0x40ff002d, 0x0f7803cc, 0xfa003fc4, -0xf081cc80, 0x083fc00f, 0x03cc04f3, 0x0cc06f74, 0x00000e00, 0x00000000, -0x04870801, 0x0274121d, 0x054001b8, 0x6c801f00, 0x4001d200, 0xc0170807, -0x01520044, 0x05280740, 0xd0026c80, 0x00b7400d, 0x03948ae1, 0x04404e10, -0x00000c20, 0x00000000, 0x0303a011, 0x01160ccd, 0x02460090, 0x04800d00, -0x44005800, 0x000d0001, 0x00900005, 0x05200140, 0x50022420, 0x60b14008, -0x033400c9, 0x44406c10, 0x00000e80, 0x00000000, 0x0005a803, 0x0336289d, -0x07428110, 0x6400152c, 0x4241d080, 0x20151207, 0x81504054, 0x15000646, -0xd1826420, 0x0037420d, 0x033400d9, 0x0c400d12, 0x00000620, 0x00000000, -0x0637a802, 0x077c00df, 0x06c82190, 0x4c0b1d08, 0xc131f01c, 0x041f0145, -0x21b3084c, 0x1704c7c4, 0xf0046c49, 0x0237c00d, 0x037c00db, 0x08c00d10, -0x00000e20, 0x00000000, 0x003d8007, 0x0efca07e, 0x3dc80ff2, 0xfc21ff0a, -0xc01ff013, 0x04ff1027, 0x0df023ec, 0xf500bb80, 0xf027fc00, 0x0077400f, -0x03dc60f7, 0x1fc00f80, 0x00000600, 0x00000000, 0x10350802, 0x017c08df, -0x37c02cf0, 0x7c02c300, 0xc00df083, 0x20d70027, 0x2df00b3c, 0xc34236c0, -0xb1034c80, 0x0437c04d, 0x035c00c3, 0x08c00db4, 0x00000420, 0x00000000, -0x0ef4a213, 0x03460bd9, 0x37400dd0, 0x6403d5a0, 0xc10dd007, 0x18d50c24, -0x5de0c364, 0xd0087542, 0x500f4401, 0x00b7043d, 0x03c407f1, 0x4c400f50, -0x00000200, 0x00000000, 0x0022a007, 0x2014230d, 0x034000d0, 0x342501a0, -0x6330d06c, 0x011104d2, 0x00904824, 0x05048141, 0x116c0413, 0x40b7402c, -0x030513c9, 0x1c400d10, 0x00000a00, 0x00000000, 0x00688004, 0x07844129, -0x73401ed1, 0xb499e520, 0x645ed007, 0x01e50178, 0xded007a4, 0xe5027940, -0x53170411, 0x147b415e, 0x27a481e9, 0x10401e50, 0x00000200, 0x00000000, -0x00301012, 0x0b140a1f, 0x33c28cf1, 0x3c02c100, 0xc00cf023, 0x00c70033, -0x6cf0333c, 0xc72035c0, 0x30030d0c, 0x00238008, 0x031c80cb, 0x48c00c32, -0x00000040, 0x00000000, 0x003db802, 0x23dc00bb, 0x3fc20ff0, 0xec20ff00, -0xc24ff0a3, 0x00de0136, 0x4f70a3ec, 0xfb003dc0, 0x73177c28, 0x002fc24f, -0x83dc40f7, 0x0bc00f71, 0x00000660, 0x00000000, 0x0027a015, 0x007c001f, -0x05c201f0, 0x4d001f00, 0xc2013100, 0x001b0054, 0x11f2007c, 0x1b0804c8, -0x30047c00, 0x0834c01d, 0x434485d1, 0x54c13d34, 0x00000e00, 0x00000000, -0x00298812, 0x03b4006c, 0x39c00ed0, 0x8400e320, 0x400e9803, 0x80e12038, -0x0ec803b4, 0xeb083040, 0xb003b400, 0x2038440f, 0x138414fb, 0x49404e50, -0x00000620, 0x00000000, 0x00f90003, 0x07b4012d, 0x79401e50, 0x8401ed00, -0x401e1007, 0x01e10078, 0x1ed007b4, 0xe408f848, 0x50473401, 0x2061401e, -0x27850ce1, 0x0c549c50, 0x00000400, 0x00000000, 0x01b30812, 0x03b600cd, -0xbd407ed0, 0x8407f500, 0x401e904f, 0x8ae100b8, 0x1ed02fb4, 0xed08f844, -0xd003b440, 0x0021501c, 0x030400c9, 0x49400c58, 0x00000c20, 0x00000000, -0x005da817, 0x0174117f, 0xd5c11470, 0x4c115f04, 0xd1953049, 0x015b4094, -0x65f00d7c, 0x570014d0, 0x7001f405, 0x0015c115, 0x014c0053, 0x5cc00550, -0x00000620, 0x00000000, 0x10830012, 0x08fe001f, 0x0dc403f2, 0xfc423304, -0xc022b188, 0x063f210f, 0x63f148f4, 0x3ba08fc4, 0x9008fc02, 0x1006c001, -0x007c821b, 0x4ac001a2, 0x00000c00, 0x00000000, 0x00270810, 0x061c0293, -0x26c00970, 0x4c019300, 0xc019b0a6, 0x059f0024, 0x5930163c, 0x9304a7c0, -0xf0227c99, 0x0223c009, 0x020c0583, 0x43c009b4, 0x00000c20, 0x00000000, -0x00260001, 0x1a4c0091, 0x25c08950, 0x44129520, 0x01b9140e, 0x279d0025, -0x49529e74, 0x9101a748, 0xd00a7403, 0x00e74009, 0x02440495, 0x0740091c, -0x00000800, 0x00000000, 0x8024a018, 0x22540089, 0x2c400f10, 0x8404b120, -0x000b1242, 0x00bd022c, 0x0b1002f4, 0xf0002b46, 0xd082f490, 0x04270089, -0x02444091, 0x63400914, 0x00000200, 0x00000000, 0x42302010, 0x22a40281, -0xa9480a50, 0x8502a500, 0x422a100a, 0x02ad00a9, 0x2a500ab4, 0xa140aa40, -0xd10bb402, 0x05a34028, 0x12040685, 0x43404812, 0x00000080, 0x00000000, -0x0586b01d, 0x085e8013, 0x04c00170, 0x4c000300, 0xc8003000, 0x801f0810, -0x0030807c, 0x120007c0, 0xf000fc00, 0x0107c005, 0x2c0c0113, 0x77c0b134, -0x00000ac0, 0x00000000, 0x012fb819, 0x1a4c02bf, 0xa5c029f0, 0x7c429f00, -0xc429f10a, 0x029f00a7, 0x29f10a7c, 0x9f00a7c0, 0xf20a7c02, 0x002fc00b, -0x267c289d, 0x67c099f0, 0x00000e60, 0x00000000, 0x01afa818, 0x1a6c06b7, -0xa4c04b70, 0x4c869e01, 0x4009b032, 0x109f0027, 0x6930124c, 0x9f2327c0, -0xb0027000, 0x09254489, 0x1a7c8093, 0x63c00932, 0x00000e00, 0x00000000, -0x0183081c, 0x184c8617, 0x84c021d0, 0x5c021b21, 0xc0417008, 0x44170014, -0x05a20144, 0x1f001740, 0x10a8742a, 0x03874000, 0x90740a31, 0x7341e110, -0x00000c20, 0x00000000, 0x00a30010, 0x1a260285, 0xa2502850, 0x8602ad10, -0x412a911a, 0x10ad04ab, 0x2a825a85, 0xad01ab48, 0x1442b494, 0x442b444a, -0x1a3414a1, 0x43400854, 0x00000e80, 0x00000000, 0x01258018, 0x43440295, -0x254109d0, 0xd4009590, 0x630b5022, 0xa0a50a2c, 0x8b102284, 0xb52a2f48, -0x1142f4d0, 0x283b600b, 0x027400b1, 0x63400950, 0x00000620, 0x00000000, -0x0027a005, 0x0e6c0097, 0x64c03970, 0x4c189d01, 0xc039b046, 0x079f2027, -0x0994024c, 0x9d00e7c0, 0xb2027420, 0x1065c209, 0x027c4091, 0x17420970, -0x00000e20, 0x00000000, 0x00258014, 0x135c009f, 0x24c088f0, 0x5c019b32, -0xc08970c2, 0x84970026, 0x09f2426c, 0x9c8027c1, 0xf0267c19, 0x0926c029, -0x027c009b, 0x53c00920, 0x00000600, 0x00000000, 0x00050014, 0x007c000b, -0x87c001f0, 0xcc003b80, 0xc0033000, 0x5033000c, 0x03b000cc, 0x3c000cc0, -0xf108cc02, 0x020ed003, 0x003c003b, 0x50c00130, 0x00000420, 0x00000000, -0x001ca814, 0x6d440071, 0x174005d0, 0x54005f20, 0x4015b019, 0x035b00d5, -0x05f0096c, 0x5d0017c0, 0xd2215413, 0x20144225, 0x01740175, 0x50400500, -0x00000200, 0x00000000, 0x0072a014, 0x031410c1, 0x33400cd0, 0xa400f100, -0x61ae500b, 0x2be103fa, 0x0e102bb4, 0xe9333840, 0xd007e402, 0x8cf842fe, -0x033481e1, 0x50500c00, 0x00000a00, 0x00000000, 0x20f88005, 0x038400c1, -0x72400ed8, 0x3400cd08, 0x6c1cd107, 0x00e9007b, 0x3ed203a4, 0xed203a40, -0xd0439401, 0x0030481e, 0x13b442e5, 0x14405e10, 0x00000200, 0x00000000, -0x40781015, 0x279c01a1, 0xfb401ad0, 0xa401e104, 0xc01e7007, 0x61c30072, -0x1c3407d8, 0xfa1078cc, 0xf1078c81, 0x08788a1e, 0x073c01e3, 0x54c05c36, -0x00000040, 0x00000000, 0x0015b010, 0x134c0097, 0xb7c009d0, 0x5c001901, -0xcc01b000, 0x001f0005, 0x0530006c, 0x1d0807c6, 0xf1007c20, 0x0805c001, -0x2b7c0017, 0x43c0edf1, 0x00000660, 0x00000000, 0x906fa200, 0x07fc0573, -0x7ec01f70, 0xcc01f700, 0x001f3407, 0x41f7427f, 0x1bfa377c, 0xff027cd0, -0x7427fc81, 0x027fc09f, 0x0fcc41f3, 0x03c03f32, 0x00000e00, 0x00000000, -0x003c8815, 0x02bc006b, 0x3de00eb0, 0xd410f12a, 0xc00e7083, 0x20e1033d, -0x6bd817b4, 0xed02b941, 0x100bb400, 0x0b3b44ce, 0x23d440ef, 0x57404eb0, -0x00000620, 0x00000000, 0x00290000, 0x01340621, 0x3a408a90, 0x8400e500, -0x410e1063, 0x08e1003b, 0x0a5203a4, 0xed0a3840, 0x1203b400, 0x803b480e, -0x038401e5, 0x03600e90, 0x00000400, 0x00000000, 0x08132804, 0x08140001, -0x71481811, 0x14010100, 0x4001104c, 0x60010241, 0x00d00034, 0x0d090040, -0x1028340b, 0x00034200, 0x0354600d, 0x13400c80, 0x00000c20, 0x00000000, -0x3015a815, 0x65744091, 0xbec1b914, 0x4c43d522, 0xc2bd1107, 0x53d720b7, -0x2d784b74, 0xdd04f4c0, 0x708f7c8a, 0x0037804d, 0x03cc00d3, 0x57c00f9c, -0x00000620, 0x00000000, 0x08270201, 0x097c015f, 0x37c209f0, 0x3c905f22, -0xc80d7083, 0xd0df21b7, 0x0df0137c, 0xdd00b7c1, 0xf10b7c02, 0x00b7c02d, -0x037c00da, 0x07c00df0, 0x00000c00, 0x00000000, 0x009b0880, 0x0cfc00b3, -0x3fc80bf0, 0xec00bb10, 0xc21fb20f, 0x03ef017c, 0x0ff023cc, 0xee013f48, -0xf047cc00, 0x0074c08f, 0x03f801df, 0x03c00ff8, 0x00000c22, 0x00000000, -0x84c62081, 0x00740051, 0x374019d2, 0x4c40d518, 0x40117094, 0x021d00c5, -0x25d04854, 0x1d204740, 0xd0005426, 0x00454310, 0x03742017, 0x07400d50, -0x00000802, 0x00000000, 0x0804a001, 0x01748191, 0x33484990, 0x7486d900, -0x40615200, 0x501d0885, 0x01d08054, 0x14000640, 0xd0204604, 0x09064001, -0x0374649d, 0x07400dd8, 0x00000200, 0x00000000, 0x00202010, 0x00240141, -0x32400898, 0x04004100, 0x4000d100, 0x40082000, 0x00824014, 0x0d000248, -0xd0001400, 0x00014001, 0x03340085, 0x43400c18, 0x00000080, 0x00000000, -0x4006b000, 0x007c0091, 0x3fc009f0, 0x7c209b00, 0xd0017200, 0x801e0005, -0x01d0945c, 0x1e9007c0, 0xe2000c00, 0x00048401, 0x03fc009f, 0x03c00ff0, -0x00000ac0, 0x00000000, 0x000f9005, 0x00fc407f, 0x3fc40be1, 0xdc20ff00, -0xc40f7083, 0x80fe083f, 0x0bf003fc, 0xff003fc8, 0xf003fc00, 0x003fc20f, -0x03fc0077, 0x17c00ff0, 0x00000e60, 0x00000000, 0x010fa803, 0x03ec04ff, -0x3fc00ff0, 0xfc00ff00, 0xc20ff003, 0x00df0037, 0x0fb003ec, 0xf70037c0, -0xf003fc60, 0x006fc015, 0x236c079f, 0x0cd08fb0, 0x00000e00, 0x00000000, -0x05a70801, 0x0044321d, 0x05c001d2, 0x74000700, 0x4201d000, 0x001d0007, -0x01140044, 0x1d200740, 0xd1007420, 0x0292c085, 0x9b84825d, 0x04486f10, -0x00000c20, 0x00000000, 0x0213a011, 0x82248c0d, 0x134008d1, 0x3400cd00, -0x400cd003, 0x20cd2012, 0x0c100114, 0xcd083344, 0xd0013400, 0x20034004, -0xa304868d, 0x44446c10, 0x00000e80, 0x00000000, 0x3225a003, 0x417400cd, -0x274005d8, 0x74001d00, 0x4001d800, 0x000d0027, 0x01030254, 0x1d040740, -0xd0027422, 0x00354005, 0x0364005d, 0x0c400c14, 0x00000620, 0x00000000, -0x2147a002, 0x036c00df, 0x37c805f0, 0x7412df00, 0xc53df04b, 0x005f2237, -0x0130075d, 0x970277c0, 0xf0077c82, 0x000f400f, 0x036d00bf, 0x00c00db2, -0x00000e20, 0x00000000, 0x006d8007, 0x00c8803d, 0x0d800bd0, 0xfc183702, -0xc083f0a0, 0x08bf044f, 0x0ff010ec, 0x7f204fc0, 0xf220fc00, 0x003ec00f, -0x83dc006e, 0x1fc80ff0, 0x00000602, 0x00000000, 0x40150002, 0x465c2413, -0x17c10170, 0x6c02df08, 0xc12d700b, 0x205f2214, 0x01b0310c, 0x9d0037c0, -0xf3014c10, 0x4406c8cd, 0x034c0093, 0x09c00d70, 0x00000420, 0x00000000, -0x2024a013, 0x014400d1, 0x67425d18, 0x44011d09, 0x4821d088, 0x0b9d00a5, -0x5dd08244, 0x59008746, 0xd0064c01, 0x0034402d, 0x03c40051, 0x4c40af10, -0x00000200, 0x00000000, 0x0202a807, 0x811422c1, 0xa3400c50, 0x04210d04, -0x40a0d030, 0x238c0822, 0x2c900e06, 0x4d048341, 0xd0622400, 0x08404014, -0x03440080, 0x1c409c10, 0x00000a00, 0x00000000, 0x11508004, 0x26840121, -0x5a401290, 0x8611ed01, 0x401ed007, 0x956d015a, 0x92d00586, 0xa9047b40, -0x920584e1, 0x01784c56, 0x07840541, 0x18401c10, 0x00000200, 0x00000000, -0x00101012, 0x201c0013, 0x43c04878, 0x0d000f21, 0x50417200, 0x019f2042, -0x8cb2b00d, 0x5f2343c0, 0xf2002914, 0x8480d055, 0x070d0583, 0x49c28c70, -0x00000040, 0x00000000, 0x011db802, 0x23be00ff, 0x3fc00770, 0xdc00ff00, -0xc00ff223, 0x407f003d, 0x81f0a37c, 0xbb0037c0, 0xf027fcc0, 0x013dc007, -0x23fc097f, 0x0bc00ff4, 0x00000660, 0x00000000, 0x0067a815, 0x814c81d3, -0x65c00570, 0x7c001300, 0xc001f800, 0x001f0027, 0x11f0027c, 0x1f0004c2, -0xf0827c20, 0x2007c00d, 0x0b4b0193, 0x57c0adf0, 0x00000e00, 0x00000000, -0x10398812, 0x02ac0001, 0x18400a10, 0x9c00e100, 0xc20ed803, 0x00ed001b, -0x0ed001b4, 0xe7003840, 0xd001b400, 0x1033480e, 0xcbac006b, 0x4b410ed0, -0x00000620, 0x00000000, 0x00790003, 0x04840121, 0x49401250, 0xb4a12900, -0x4812d884, 0x012d204b, 0x32d084b4, 0x2d20484a, 0xd284b4a1, 0x004b601e, -0x87840081, 0x0f405ed1, 0x00000402, 0x00000000, 0x00332012, 0x032440c1, -0x30402c10, 0x5400c900, 0x400cd003, 0x00cd0037, 0x3cd20336, 0xc5083041, -0xd0033421, 0x2433486c, 0x03040049, 0x4b400cd8, 0x00000c20, 0x00000000, -0x401d8017, 0x01440071, 0x15c02450, 0x7c005b40, 0xc005f001, 0x405f0017, -0x05f0017c, 0x5f0014d0, 0xf081fc04, 0x0017c025, 0x01440073, 0x5fc005f0, -0x00000620, 0x00000000, 0x00c70012, 0x00fc001f, 0x8ec103f8, 0xfc003700, -0xc403f000, 0x063f000d, 0x23f000fe, 0x3f108fc4, 0xf000bc00, 0x000fc420, -0x007c003f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x02670010, 0x021c019f, -0x66c059b1, 0x7c009f00, 0xc0093102, 0xc2930027, 0x19300a7e, 0x9f00e7c0, -0x31027c04, 0x0060c019, 0x020c0083, 0x40c00830, 0x00000c20, 0x00000000, -0x10262001, 0x0274419d, 0xe4401931, 0x74189d20, 0x4009120e, 0x03912027, -0x39110e74, 0x9d002742, 0x142a7403, 0x00e4c039, 0x02442095, 0x04500950, -0x00000800, 0x00000000, 0x0424a818, 0x0674049d, 0x2e400b10, 0xf400bd01, -0x406b501a, 0x00b111af, 0x8b9002b4, 0xbd902f40, 0x108af490, 0x062c40a9, -0x024400b1, 0x60408910, 0x00000200, 0x00000000, 0x02202010, 0x06b4038d, -0xa8400a90, 0xb602ad00, 0x402a500a, 0x02a110ab, 0x2a900bb4, 0xad80bb40, -0x100ab402, 0x00a84028, 0x920400a5, 0x4048d850, 0x00000080, 0x00000000, -0x8d82b01d, 0x007c941f, 0x12c001b4, 0x7c801f00, 0xc8017400, 0x80524007, -0x04b40070, 0x1f0007c2, 0x3000fc00, 0x0004d001, 0x2c4e2033, 0x74c03130, -0x00000ac0, 0x00000000, 0x012fb819, 0x0a3c00bf, 0xb7c82878, 0x7c229f08, -0xc229b20a, 0x029f00a7, 0x29720a7c, 0x9f10a7c0, 0xf08a7c42, 0x00a5c429, -0x267c169f, 0x67c0c9f0, 0x00000e60, 0x00000000, 0x002fa018, 0x02cc20bf, -0x27c24b30, 0x4c089f05, 0xc149f0b2, 0x089f2b24, 0xc9f0c25e, 0x932824c1, -0x00227004, 0x0167c059, 0x124c0591, 0x67c14b30, 0x00000e00, 0x00000000, -0x2487081c, 0x206c901d, 0x07400114, 0x14881f01, 0x4841d000, 0x82172300, -0x21d2585c, 0x01078140, 0x30187484, 0x248dc921, 0x58440211, 0x736141b0, -0x00000c22, 0x00000000, 0x0b23a010, 0x0224008c, 0x2b408810, 0x8480ad05, -0x494ad232, 0x0cad1129, 0x0ad102b4, 0xa1112944, 0x961aa436, 0x00ab426a, -0x32241689, 0x43400810, 0x00000e80, 0x00000000, 0x80258818, 0x0264409d, -0x27600910, 0xd400bd00, 0x400ed002, 0x00b5002d, 0x0bd242f4, 0xb1002d40, -0x1042f400, 0x202d400b, 0x02640099, 0x63600990, 0x00000620, 0x00000000, -0x0a67a805, 0x064c339f, 0x27c00930, 0x4c009f08, 0xd009fa02, 0x009f04a5, -0x09f00a7c, 0x93c025c8, 0xb8026c00, 0x4127c809, 0x026c009a, 0x17400930, -0x00000e20, 0x00000000, 0x14258014, 0x223c058f, 0x27c039f0, 0x7c009700, -0xc009b002, 0x009f0026, 0x09f0025c, 0x9f0827c0, 0xf0023c40, 0x0025c809, -0x025c0097, 0x53c009f0, 0x00000600, 0x00000000, 0x00050814, 0x004c0217, -0x8fc80134, 0xfc803340, 0xc8033400, 0x6c33448f, 0x03f000dc, 0x33240fc2, -0x7088cd04, 0x000dc2c3, 0x003c0003, 0x53c101f0, 0x00000420, 0x00000000, -0x049ca014, 0x85c43177, 0x17408711, 0x74055320, 0x49251201, 0x20541c97, -0x25d03d5c, 0x51105743, 0x100d4401, 0x001f4025, 0x01740051, 0x534037d0, -0x00000200, 0x00000000, 0x00f2a014, 0x030400c5, 0x3b420c12, 0xb407f100, -0x407e9837, 0x03e1003b, 0x7fd08f96, 0xe100ff00, 0x11138441, 0x407d600e, -0x033400c1, 0x53408cd0, 0x00000a00, 0x00000000, 0x08288005, 0x0b040065, -0x7b400a10, 0xb400e120, 0x400e9007, 0x00e9007b, 0x0ed003a4, 0xe9143a44, -0x10438403, 0x043b420e, 0x23b405e5, 0x17480ad0, 0x00000200, 0x00000000, -0x00781015, 0x878c0107, 0x7f4c1e32, 0xbc01e310, 0xc01e3007, 0x81e3007b, -0x1ef1079c, 0xe3407bc8, 0x7407cc81, 0x0871c41e, 0x07bc02e3, 0x57c016f0, -0x00000040, 0x00000000, 0x00359810, 0x017d001f, 0x07c20dd1, 0x7c001700, -0xc4017000, 0x00150007, 0x01f0015c, 0x170807c0, 0xf1007c00, 0x0007c001, -0xcb7c01db, 0x43c003f0, 0x00000660, 0x00000000, 0x005f8800, 0x07cc01b3, -0x7ec09732, 0x4881f300, 0xc09f9007, 0x01f30174, 0x1f3006dc, 0xfb127cc0, -0xf0074c05, 0x093ec09f, 0x07cd01f3, 0x0bc01f30, 0x00000e00, 0x00000000, -0x00899815, 0x03844a21, 0x30400ab0, 0x840aeb02, 0x408eb007, 0x02e90078, -0x0e115694, 0xe30a7840, 0xf0578404, 0x003ac0ae, 0x038400fb, 0x57400a10, -0x00000620, 0x00000000, 0x02290000, 0x23040021, 0x30610410, 0x0410c100, -0x450c1803, 0x18cd0633, 0x0c103284, 0xc1893041, 0xd023a45c, 0x0070440e, -0x039400e9, 0x23400610, 0x00000400, 0x00000000, 0x24e72004, 0x15041801, -0xc0401c18, 0x04200109, 0x4120901c, 0x25098083, 0x60110854, 0x0112c040, -0x51402400, 0x00c04000, 0x031002c1, 0x1b000110, 0x00000c20, 0x00000000, -0x44b5a015, 0x154c01d0, 0xb4c01d11, 0x4c00d104, 0xc02d304b, 0x81d30a77, -0x2d310b4c, 0xd302f4c0, 0xd0036c02, 0x04f4540d, 0x03dd0ff9, 0x77400d34, -0x00000620, 0x00000000, 0x80270001, 0x037d025f, 0x15c021f0, 0x7c04df00, -0xc00d7203, 0x20d210b4, 0x2df2436c, 0xdf0037c8, 0xf00b5c02, 0x0137c00c, -0x036c00cf, 0x87c007f8, 0x00000c00, 0x00000000, 0x80170080, 0x058c2183, -0x28c70a30, 0x8e01eb00, 0xc20e3023, 0x20e30038, 0x2e32035c, 0xeb0078c8, -0x3217cc19, 0x00b8c05f, 0x034c00fb, 0x04c01bf0, 0x00000c20, 0x00000000, -0x00962081, 0x0d440097, 0xf442b110, 0x44031100, 0x4411100c, 0x42150444, -0x11f04968, 0x1108c6c0, 0x10005423, 0x0046c021, 0x034480db, 0x04c021d2, -0x00000802, 0x00000000, 0x0014a001, 0x194508d9, 0xb4402510, 0x44041101, -0x40411040, 0x08112204, 0x01100044, 0x11018441, 0x10401410, 0x10244001, -0x834420d1, 0x0440add0, 0x00000200, 0x00000000, 0x00002010, 0x0304804d, -0x10600010, 0x04400102, 0x40001040, 0x00011100, 0x00140004, 0x01210244, -0x10001440, 0x80224000, 0x230408c9, 0x424008d0, 0x00000080, 0x00000000, -0x0006b000, 0x014c00db, 0x24400132, 0x44001900, 0xc0013014, 0x08130b44, -0x01101454, 0x1320c4c0, 0x34144480, 0x4024c280, 0x03cd00d3, 0x04e005f2, -0x00000ac0, 0x00000000, 0x800fb805, 0x00fc00f7, 0x7fc003f0, 0xec00f701, -0xc00fd203, 0x85ff037f, 0x0ff00a7c, 0xff05f5c0, 0xf00bec00, 0x001fc05f, -0x17fc45ff, 0x15c003f1, 0x00000e60, 0x00000000, 0x040f9003, 0x10fc0433, -0x0fc00ff0, 0xc400f300, 0xc00f3003, 0x00f30036, 0x0b3003cc, 0xfb003cc0, -0xb003cc00, 0x003fc00f, 0x23cc0873, 0x0cc14371, 0x00000e00, 0x00000000, -0x00870001, 0x08740811, 0xb0484fd8, 0x4d009f02, 0x4001b400, 0x00110004, -0x01140044, 0x11400440, 0x10004500, 0x24074001, 0x83c44491, 0x04492110, -0x00000c20, 0x00000000, 0x0523a011, 0x20340001, 0x15410cd0, 0x26004120, -0x40009000, 0x00014000, 0x00d00006, 0x01800258, 0x10002400, 0x01034000, -0x13240089, 0x45404c10, 0x00000e80, 0x00000000, 0x0025a803, 0x01740051, -0x34400dd2, 0x2410c502, 0x40811060, 0x08110000, 0x01d0a806, 0x09000141, -0x10086408, 0x22074001, 0x03640099, 0x0c400d14, 0x00000620, 0x00000000, -0x0047a802, 0x007c4113, 0x81c00dd0, 0x4c83d100, 0xd0319108, 0x13130206, -0x31f1084d, 0x1b0086c0, 0xb4286c04, 0x4107c0f1, 0x036d0019, 0x09c3b130, -0x00000e20, 0x00000000, 0x08cd8007, 0x0efc04ff, 0x1f880ef2, 0xdc09bf00, -0x800ed207, 0x61ee007f, 0x8b3007f8, 0xf7023ec0, 0xf0039c01, 0x007bc01f, -0x035c84e7, 0x1fc012b2, 0x00000600, 0x00000000, 0x00310802, 0x077c8097, -0x97208d32, 0x6c025700, 0xc00d302b, 0x60d302b7, 0x69301b7c, 0xd900b5c0, -0x70035c08, 0x2234c0ad, 0x037c00de, 0x08c02f30, 0x00000420, 0x00000000, -0x02b4a013, 0x03740add, 0x1f601f14, 0x6d02d100, 0x405d1487, 0x05d12077, -0x0915177e, 0xd1017440, 0x14174501, 0x0076d01d, 0x03f480dd, 0x4c41ad14, -0x00000200, 0x00000000, 0x0012a007, 0x00240009, 0xd3410c10, 0x04470111, -0x4070581c, 0x070101c3, 0x35820c34, 0x0181c044, 0x101c0407, 0x01c24070, -0x0374000d, 0x1c403090, 0x00000a00, 0x00000000, 0x20788004, 0x05b4012d, -0x7b405e10, 0xb411e144, 0x401e5007, 0x01e1007b, 0x1c900794, 0xe1287041, -0x10078401, 0x007a401e, 0x37b401ed, 0x10401290, 0x00000200, 0x00000000, -0x00100012, 0x206c0047, 0x13400c39, 0x4c0cd710, 0xc0ac7023, 0x00c30377, -0x0cb12370, 0xd34231d0, 0x70335c08, 0x0232c0cd, 0x133c00cf, 0x48d001b0, -0x00000040, 0x00000000, 0x003da802, 0x01fc007f, 0x3fe04ff0, 0xcc08ff00, -0xc00fb023, 0x00dfc037, 0x8f7003fc, 0xf7003fc0, 0xf023fc00, 0x023dc08f, -0x13fc01fd, 0x0bc00370, 0x00000660, 0x00000000, 0x0007a015, 0x917c045f, -0x30c1adf0, 0x7c801342, 0xc001e000, 0x401f0007, 0x0572007c, 0x170007c2, -0xf0007c00, 0x0007c001, 0x1b4c001f, 0x57c00f30, 0x00000e00, 0x00000000, -0x00298812, 0xa3b408ed, 0x78680ed0, 0xb400e100, 0x480e7203, 0x00ed103b, -0x0ed003bc, 0xed203b40, 0xd203b400, 0x203bc00e, 0x4bac00ed, 0x4b400e10, -0x00000620, 0x00000000, 0x00d90003, 0x07b681ed, 0x7c401ed3, 0xb401e900, -0x411ed007, 0x21ed207b, 0x1ed007b4, 0xe5047b40, 0xd007b401, 0x007b403e, -0x170411ed, 0x0f411e94, 0x00000400, 0x00000000, 0x00772812, 0x1b3400dd, -0xb0440cd0, 0xb400e900, 0x400e500b, 0x12fd013b, 0x0ed10794, 0xed01bb44, -0xd00fb400, 0x08b9404e, 0x032421fd, 0x4b422c90, 0x00000c20, 0x00000000, -0x201da817, 0x117c265d, 0x9cd805d0, 0x7c005b00, 0xc015f041, 0x045f1417, -0x25700170, 0x570857c0, 0xf0617418, 0x01d76625, 0x014cc17f, 0x5fc417b2, -0x00000620, 0x00000000, 0x00070012, 0x807c121f, 0x87c020f2, 0xbc003700, -0xc843f210, 0x003f000f, 0x43f030fc, 0x3f200fc6, 0xf000fc00, 0x098fe003, -0x007c003f, 0x4bc12172, 0x00000c00, 0x00000000, 0x00270810, 0x036c05d3, -0x60f049f0, 0x4c808b44, 0xc0093002, 0x00930060, 0x08b0020c, 0x830020c4, -0xf3024c00, 0x1026c808, 0x825c009f, 0x43c00931, 0x00000c20, 0x00000000, -0x42a62001, 0x02450791, 0x246829d0, 0x44009106, 0x44091002, 0x40911024, -0x0910025d, 0x91102440, 0xd0024400, 0x10a54009, 0x0254009d, 0x07412910, -0x00000800, 0x00000000, 0x0434a018, 0x02440091, 0x340709d0, 0xc4009980, -0x500a1802, 0x00b0023c, 0x0b1002e4, 0xb1803c40, 0xd002c400, 0x102c400b, -0x021400bd, 0x63420918, 0x00000200, 0x00000000, 0x12202010, 0x23040881, -0xa04088d0, 0x8402a101, 0x402a140a, 0x02a150a8, 0x2a140aa4, 0xa100a858, -0xd00a8502, 0x08a8502a, 0x120400ad, 0x43408818, 0x00000080, 0x00000000, -0xa586b01d, 0x584c1613, 0x444020f0, 0x4d001b00, 0xc8013100, 0x40132004, -0x0132006e, 0x534004c0, 0xf0004c80, 0x0016c401, 0x2c5c8a2f, 0x77c16132, -0x00000ac0, 0x00000000, 0x012fb819, 0x127c049f, 0x2fc069f0, 0x7c029f22, -0xc029f00a, 0x029f00a7, 0x2d700a5e, 0x9f80a7c0, 0xf08a7c02, 0x00a7e429, -0x267c039f, 0x67c04bf4, 0x00000e60, 0x00000000, 0x012fa018, 0x32fc06bf, -0xa4c429c0, 0x7c049f04, 0xc0093022, 0x009b0027, 0x29f00a6c, 0x9f0227c0, -0x30027c02, 0x05a4c029, 0x5a7c009f, 0x63c00bb5, 0x00000e00, 0x00000000, -0x0503081c, 0x08344657, 0x84aa61d0, 0x74001d00, 0x404112a8, 0x041d2107, -0x00d0804e, 0x17128740, 0x10107400, 0x11ccc001, 0x8864141d, 0x73404110, -0x00000c20, 0x00000000, 0x0323a010, 0x1a34028d, 0x284888d0, 0xb016ad20, -0x452a9412, 0x12ad04ab, 0x2ad00ab4, 0xad012b40, 0x544ab402, 0x002a402a, -0x1234028d, 0x43413890, 0x00000e80, 0x00000000, 0x0025a818, 0x42740895, -0x264809d1, 0xe486bd08, 0x40af910a, 0x30bd0c2f, 0x0bd002f4, 0xb50c2e00, -0x5002b400, 0x002e522a, 0x0274069d, 0x63400910, 0x00000620, 0x00000000, -0x04a78805, 0x0a7c029f, 0x245009f2, 0x7c419f28, 0xc2099026, 0x039b00e7, -0x19d04676, 0x9f00e784, 0x706e7c0e, 0x26e6c099, 0x027c009f, 0x174219b0, -0x00000e20, 0x00000000, 0x01658014, 0x927c0097, 0x25cc0cf0, 0x3c019f01, -0xc0197206, 0x089e3227, 0x89f01248, 0x9f2227c8, 0xb0067800, 0x2065c019, -0x026c009f, 0x53c159f0, 0x00000600, 0x00000000, 0x01850814, 0x0c7c1013, -0x0fc20134, 0xcc023f20, 0xc423f108, 0x4037000d, 0x033000ec, 0x37000dc0, -0x3008cc00, 0x008cc023, 0x000c0013, 0x52c00131, 0x00000420, 0x00000000, -0x00dca014, 0x91f40371, 0x17e01510, 0x44805d00, 0x4005d001, 0x00510014, -0x0510095c, 0x5d101550, 0x10015400, 0x08154405, 0x01440055, 0x50501714, -0x00000200, 0x00000000, 0x80f2a014, 0x073403c1, 0x33440c90, 0x0620cd00, -0x480c9803, 0x24c90030, 0x0c101b04, 0xcd003062, 0x10030400, 0x0030600c, -0x030400c0, 0x50401c10, 0x00000a00, 0x00000000, 0x80d88005, 0x06b41061, -0x09410e10, 0x86012d00, 0x4012d000, 0x01210048, 0x121284a4, 0x2d100860, -0x10009401, 0x01480002, 0x23040de1, 0x14411e10, 0x00000200, 0x00000000, -0x40681015, 0x85bc81e3, 0x4b401e30, 0x8d01cf00, 0xd01cb187, 0x01c74061, -0x1e34070d, 0x470078c0, 0x34070d01, 0x40d0d01c, 0x878d0dc3, 0x54c01c32, -0x00000040, 0x00000000, 0x1005b810, 0x007c00df, 0x37c501e1, 0x7c201f00, -0xc401d800, 0x001f1017, 0x01f0005c, 0x9f0007c0, 0xb0006c00, 0x0067c001, -0x0b7c04df, 0x41c007f0, 0x00000660, 0x00000000, 0x007fa000, 0xa7cc29ff, -0x7fc49ff8, 0xfc81f362, 0xc21ff087, 0x697f827e, 0x1ff005dc, 0xf3007ec0, -0xf007fc01, 0x013fc01f, 0x0fcc01f3, 0x00c01330, 0x00000e00, 0x00000000, -0x00398815, 0x32ac006d, 0x0f428e70, 0xb4002b00, 0x4803d080, 0x0cad1308, -0x02d02286, 0x21048f40, 0xf000b400, 0x040fc102, 0x039400f1, 0x54400610, -0x00000620, 0x00000000, 0x00190000, 0x01a4800d, 0x0b400ed0, 0xb400e108, -0x400ed063, 0x606d2429, 0x0ed00184, 0x61003b41, 0xd003b418, 0x005b400e, -0x238400e1, 0x00400a10, 0x00000400, 0x00000000, 0x00932804, 0xb804040d, -0xb7420050, 0x300b094a, 0x52a0d00c, 0x088d01d0, 0x30d08a04, 0x8140c244, -0x506c3401, 0x00e54030, 0x031426c1, 0x10400411, 0x00000c20, 0x00000000, -0x0035a815, 0x0f65049e, 0x77c205f0, 0x70401320, 0xc231d004, 0x0b9f2096, -0x21f00244, 0x93008780, 0xd2047c83, 0x40ef40a1, 0x03cc06f3, 0x54d00d34, -0x00000620, 0x00000000, 0x0c170001, 0x033c001f, 0x07c20570, 0x7c42d708, -0xc00df04b, 0x405f00a7, 0x6df0e169, 0x5f0137c0, 0xf0037010, 0x0417c02d, -0x033c00df, 0x07c00bf3, 0x00000c00, 0x00000000, 0x006b0880, 0x13dc05f3, -0x0fc00731, 0xec303304, 0xc323f208, 0x02bf000f, 0x23f006fc, 0x3f004fc0, -0xf088fc02, 0x004fc023, 0x035c00f3, 0x03c00f70, 0x00000c22, 0x00000000, -0x10062081, 0x134401d1, 0x3744b151, 0x7400d740, 0x401dd007, 0x01590037, -0x3dd02574, 0xdd02f6e0, 0x920f7401, 0x027f421d, 0x037c00d5, 0x07420150, -0x00000802, 0x00000000, 0x02248001, 0x00548081, 0x37482190, 0x74181900, -0x4001d040, 0x001d0417, 0x21d00064, 0x9d000740, 0xd0887400, 0x28274101, -0x034400c9, 0x07421150, 0x00000200, 0x00000000, 0x40202010, 0x00040001, -0x03440011, 0x2600c100, 0x440c9103, 0x00c92823, 0x0cd20334, 0x4d183144, -0x90033400, 0x0013400c, 0x032000cd, 0x43400010, 0x00000080, 0x00000000, -0x0006b000, 0x005c2013, 0x07c00134, 0x74001b40, 0xc001f000, 0x000f0287, -0x01f1007c, 0x1f000740, 0xf0007800, 0x0007c001, 0x03dc00fb, 0x03c00870, -0x00000ac0, 0x00000000, 0x000fb805, 0x00fc403f, 0x3fc003f0, 0xfc00ff00, -0xc00ff203, 0x00fb007f, 0x0ff003fc, 0xff003ec0, 0xf203fc00, 0x003fc00f, -0x03fc00f7, 0x17c003f0, 0x00000e60, 0x00000000, 0x203fa003, 0x03fc00f1, -0x3ec80fb2, 0xdc00dd00, 0x880ff203, 0x80dd0035, 0x0ff203f8, 0xff203f40, -0x9001fc80, 0x001cc04b, 0x00cc003f, 0x0cc007b4, 0x00000e00, 0x00000000, -0x00050801, 0x00740017, 0x07400170, 0x76801d00, 0x00019000, 0x001c0007, -0x01d10074, 0x0d200740, 0x10017454, 0x801442e9, 0x137d00dd, 0x04510510, -0x00000c20, 0x00000000, 0x00332011, 0x0714008d, 0x73481c50, 0x2601cd20, -0x481c9007, 0x41cd1071, 0x1cd00134, 0xcd207148, 0x50003601, 0x00115908, -0x4014800d, 0x445684d0, 0x00000e80, 0x00000000, 0x0805a807, 0x8074005d, -0x07420152, 0x70001d00, 0x4001d000, 0x201d0807, 0x01d00674, 0x1d200740, -0x10817400, 0x00154019, 0x835440dd, 0x0c4005d0, 0x00000620, 0x00000000, -0x00a7a802, 0x027c005b, 0x26c009f0, 0x7e009f00, 0xc009d002, 0x009f0025, -0x09f0037c, 0x9f0025c2, 0x308d7c20, 0x183dc119, 0x00d4003d, 0x08c425f0, -0x00000e20, 0x00000000, 0x201d8003, 0x01fc80b3, 0x1fc007f0, 0xfc007f04, -0xc807b001, 0x007f841f, 0x07f000fc, 0x7f001fc0, 0xf4156000, 0x003ec008, -0x03bc00ef, 0x1fc00630, 0x00000600, 0x00000000, 0x80250802, 0x425c101f, -0x27c28970, 0x7c049f00, 0xc009b002, 0x009f0025, 0x09f0017c, 0x9b8427c0, -0xf0014d00, 0x0134c04d, 0x005c001f, 0x08c10374, 0x00000420, 0x00000000, -0x00948013, 0x197412dd, 0x1640a570, 0x74045d01, 0x4005f105, 0x015d1097, -0xa5d02e74, 0x5d04d740, 0xb003442a, 0x00f4553d, 0x836c40dd, 0x4c413530, -0x00000200, 0x00000000, 0x0412a007, 0x093403c9, 0x13402450, 0x34004d80, -0x4044d035, 0x0d4d0013, 0x24988224, 0x4d009340, 0x10016400, 0x1291480c, -0x0014200d, 0x1c500450, 0x00000a00, 0x00000000, 0x02688004, 0x06b4012d, -0x6a401a50, 0xb401ad00, 0x411ad006, 0x01ad006b, 0x9ad065b4, 0xad106b01, -0x9005a401, 0x025a601e, 0x072409cd, 0x10409411, 0x00000200, 0x00000000, -0x04101012, 0x011c008d, 0x13c00470, 0x3c014f10, 0xc004b011, 0x094d0751, -0x04b0143c, 0x49001340, 0x30192c20, 0x0210c484, 0x001c080f, 0x48c02470, -0x00000040, 0x00000000, 0x282cb802, 0x02fc007f, 0x2e400bf8, 0x7c08bf00, -0xc00b7002, 0x089f0027, 0x0be103fc, 0xbf1027c2, 0xf001dc09, 0x8a1dc08d, -0x037c08df, 0x0bc00770, 0x00000660, 0x00000000, 0x4007a815, 0x007c8053, -0x44d00124, 0x4d001340, 0x9001f200, 0x801f0004, 0x0124066c, 0x1f0004d0, -0xb0017c00, 0x0037c001, 0x044d0011, 0x54c00570, 0x00000e00, 0x00000000, -0x003d9812, 0x03de00a3, 0x3c400f38, 0x8400fb00, 0xc00fd003, 0x80ed0038, -0x0f1001f6, 0xed203840, 0x1003b400, 0x503b4802, 0x038400c1, 0x484806d0, -0x00000620, 0x00000000, 0x00490003, 0x04b4412d, 0x4b4012d0, 0xb4012900, -0x44121004, 0x012d0049, 0x129004b4, 0x25804848, 0x9805f481, 0x807b401e, -0x00840121, 0x0d401850, 0x00000400, 0x00000000, 0x0a730012, 0x031402c1, -0x30600c50, 0x1400c100, 0x400cd003, 0x00cd0031, 0x0c900334, 0xcd203040, -0x10233400, 0x89b3400c, 0x034400c1, 0x495014d0, 0x00000c20, 0x00000000, -0x0055a017, 0x01760253, 0x14c00570, 0x5c205900, 0xc0057001, 0x205f2815, -0x05b00164, 0x7f0014c0, 0xb009bc20, 0x0097ec17, 0x014c0053, 0x5dc07770, -0x00000620, 0x00000000, 0x008b0012, 0x00dc1037, 0x8fc02332, 0xe0003f00, -0xc002f008, 0x022e200c, 0x037200fc, 0x3f900fc8, 0xf0047c00, 0x0003e081, -0x00fc003f, 0x4ac101f2, 0x00000c00, 0x00000000, 0x00270010, 0x022c0083, -0x64c00830, 0x0c018f00, 0xc0197082, 0x009f0026, 0x08f02648, 0x9b0024c0, -0x70827c85, 0x2025c928, 0x024c0493, 0x40c018f0, 0x00000c20, 0x00000000, -0x50a60005, 0x025d0091, 0x66d52914, 0x45009d02, 0x5009144a, 0x029d0024, -0x29d00245, 0x9c10a450, 0x10827401, 0x01678109, 0x02540081, 0x04101914, -0x00000800, 0x00000000, 0x0034a01c, 0x02c400b1, 0x2d400b10, 0xc408bd00, -0x408b9002, 0x10bd002c, 0x0bda02c4, 0xbd00ac42, 0x50027420, 0x02264409, -0x02c410b0, 0x60408910, 0x00000200, 0x00000000, 0x00b80010, 0x0aa402a1, -0xab402a18, 0x8482ad28, 0x422a500a, 0x02ad20a8, 0x2ad80a94, 0xad90a840, -0x125a7408, 0x112341c8, 0x329404a1, 0x40509810, 0x00000080, 0x00000000, -0x00063019, 0x004c2013, 0x15c00130, 0x4c001f00, 0xc0017000, 0x401f0006, -0x05f00042, 0x3b0004c0, 0x70107c02, 0x4045c061, 0x0ccc0113, 0x74d16170, -0x00000ac0, 0x00000000, 0x00a7b819, 0x0a5c029f, 0xa4c029f0, 0x7c029f00, -0xc029300a, 0x029f00a7, 0x29f08a6c, 0x9f00a7c0, 0xf202bc06, 0x2221c04f, -0x327c089f, 0x67c04b70, 0x00000e60, 0x00000000, 0x04a7a818, 0x034c049b, -0xb5c14df0, 0x5404d324, 0x408df213, 0x20d32434, 0x0d30426c, 0xf32437c0, -0x301a4412, 0x016cc00b, 0x260c01b9, 0x63c06b30, 0x00000e00, 0x00000000, -0x41871818, 0x384c0615, 0x076061d0, 0x74021140, 0x50a11008, 0x0a114084, -0xa1b41845, 0x15008f44, 0x50284526, 0x02844861, 0x086c4211, 0x71ca6010, -0x00000c20, 0x00000000, 0x802ba010, 0x428512a5, 0x29490ad0, 0x8412a110, -0x644a144a, 0x54a12d28, 0x4a924294, 0x8d052b61, 0x10120404, 0x08214928, -0x1a040289, 0x4340c858, 0x00000e80, 0x00000000, 0x0025a018, 0x02c600fd, -0x2f600bd2, 0xf680f100, 0x600f1a02, 0x00b1802c, 0x0b1003d4, 0xdd002f48, -0x54024400, 0x00254019, 0x02640091, 0x61402950, 0x00000620, 0x00000000, -0x00278005, 0x024e0893, 0x25c009f0, 0x5c409100, 0x40095002, 0x00931024, -0x09901a4c, 0x9f1027c0, 0x34424c00, 0x00255038, 0x024c009b, 0x17c8197c, -0x00000e20, 0x00000000, 0x00218010, 0x027c8093, 0x23e209f0, 0x7c409f00, -0xe4087002, 0x008f0823, 0x09f0020c, 0x836027ca, 0xf4227c00, 0x0026c009, -0x027c009f, 0x53c059bc, 0x00000600, 0x00000000, 0x100d0014, 0x00dc0837, -0x0fcc03f0, 0xfe003f08, 0x8003e000, 0x8037080f, 0x03f200cc, 0x132a0fc8, -0x30007c00, 0x0241c021, 0x001c101f, 0x50c18130, 0x00000420, 0x00000000, -0x0014a014, 0x017c005d, 0x15c115d1, 0x74005d00, 0x4005d101, 0x80511017, -0x05d00144, 0x71405dc0, 0xb0817420, 0x009c4027, 0x01d4836d, 0x50503715, -0x00000200, 0x00000000, 0x80328014, 0x4b3401dd, 0x32400cd0, 0x7480cd88, -0x400c9103, 0x00c9d4b1, 0x0cd80311, 0xc5003720, 0x90037400, 0x087060fc, -0x031508cd, 0x50401cd0, 0x00000a00, 0x00000000, 0x08088005, 0x08b4002d, -0x0b400290, 0xb4002d00, 0x40029200, 0x8029200a, 0x02d00094, 0xec200100, -0x9033b400, 0x0838104c, 0x139400cd, 0x14481e98, 0x00000200, 0x00000000, -0x00581015, 0x879c81ef, 0x4bc416f0, 0xb401af00, 0xc01af085, 0x0179007f, -0x16f3068c, 0xe7005bc0, 0xb017fc21, 0x0079c43a, 0x0f9c012f, 0x44c612b0, -0x00000040, 0x00000000, 0x9024b810, 0x005c401f, 0x35c009f0, 0x7c005f20, -0xc005f102, 0x80930807, 0x09f20164, 0xd3002780, 0x74837c00, 0x0035c01d, -0x036c001f, 0x43c00373, 0x00000660, 0x00000000, 0x013fa000, 0x24ce49bf, -0x7cc01b30, 0xfc89f300, 0x409f2027, 0x01fb225f, 0x1d3027f8, 0xff206dc0, -0x3007c801, 0x0a7cca9f, 0x0fcc817f, 0x00c09f20, 0x00000e00, 0x00000000, -0x02098815, 0x238c0867, 0x08040670, 0x84082100, 0xc28270b4, 0x102b146b, -0x5230a00c, 0xe1061840, 0xb043ec00, 0x021ac0ce, 0x2384906d, 0x5440ce10, -0x00000600, 0x00000000, 0x02190000, 0x0004808d, 0x03400051, 0x04488100, -0x400adb21, 0x08611113, 0x44922234, 0xc1004260, 0x91838408, 0x8038460a, -0x038400cd, 0x01402210, 0x00000420, 0x00000000, 0x00a30804, 0x0b050a4d, -0xb2502c54, 0x05624148, 0x0024142a, 0x238140e1, 0x28140904, 0xd550b350, -0x10034511, 0x0032512d, 0x070405cd, 0x00420114, 0x00000c20, 0x00000000, -0x03e58815, 0x3f4e0a5f, 0xf6c0fd00, 0x4c0f5303, 0x44f5902a, 0x819122e7, -0xf9823d7c, 0xdf02f7c0, 0x8c03c404, 0x0034c00f, 0x1bc403dd, 0x45400d34, -0x00000620, 0x00000000, 0x10170001, 0x005c0297, 0x05c00130, 0x7c029f08, -0xc029e081, 0x105f0017, 0x05700a70, 0x530004c0, 0xf0037c00, 0x00b5c00d, -0x137c82df, 0x07c817f0, 0x00000c00, 0x00000000, 0x008f0880, 0x03cc4073, -0x0fc00730, 0xce003300, 0xc003f200, 0x833b00ec, 0x033000cc, 0xb3801cca, -0x2443cc02, 0x007d0219, 0x03fc00bf, 0x00c00d30, 0x00000c22, 0x00000000, -0x00362081, 0x007c0291, 0x35400970, 0x4602d100, 0x422d3003, 0x01d10055, -0x0d100b44, 0x119025c2, 0x10035c00, 0x00a440cd, 0x0334129d, 0x15400110, -0x00000802, 0x00000000, 0x0020a001, 0x80040009, 0x30400810, 0x04004100, -0x40041222, 0x00858000, 0x88100134, 0xd5082240, 0x50034420, 0x06354009, -0x037400d9, 0x04401d10, 0x00000200, 0x00000000, 0x00102010, 0x032480c9, -0x00400490, 0x04408100, 0x44085081, 0x00450330, 0x44110215, 0x40201008, -0x58030480, 0x00316804, 0x033000c9, 0x51401c10, 0x00000080, 0x00000000, -0x4006b000, 0x004d0019, 0x05d00134, 0x450a1340, 0x50017404, 0x02174044, -0x1134004c, 0x924004d0, 0x70034d00, 0x0035c00d, 0x03be40db, 0x00c00130, -0x00000a80, 0x00000000, 0x203fb805, 0x03dc00f7, 0x3fc00f70, 0x7c81ff00, -0xc20f3023, 0x95fb2277, 0x8ff957ec, 0x37003dc8, 0xb803dc80, 0x003ec00f, -0x03fc00ff, 0x17c003f0, 0x00000e20, 0x00000000, 0x823fa003, 0x20ec002f, -0x3bc08fd2, 0xf000ff00, 0xc20ff203, 0x80f9003f, 0x0fc0038c, 0xf7003fc0, -0xf023fc00, 0x003fc00f, 0x13cc00e3, 0x0cc54b90, 0x00000e00, 0x00000000, -0x90b30801, 0x10440017, 0x074041d0, 0x74001308, 0x4001d000, 0x80113007, -0x01d10074, 0x17200740, 0xd0107440, 0x40374001, 0x2bd444f1, 0x054069b0, -0x00000c20, 0x00000000, 0x0233a011, 0x1026214d, 0x314040d0, 0x3600cd00, -0x400cd003, 0x00c91031, 0x0cd00316, 0x4d803340, 0xd0033600, 0x0032400c, -0x030410c1, 0x44410890, 0x00000e80, 0x00000000, 0x0035a803, 0x0044011d, -0x07400dd0, 0x64001500, 0x4001d000, 0x00110007, 0x01d90874, 0x9d800640, -0xd0006600, 0x00374001, 0x035400d1, 0x0d400990, 0x00000620, 0x00000000, -0x0837a802, 0x446c808d, 0x27c00df0, 0x7c001f01, 0xc009f001, 0xa09b0021, -0x49f00a5c, 0x9f0007c0, 0xd0127c00, 0x0037c049, 0x034c40d3, 0x08c089a1, -0x00000e20, 0x00000000, 0x043d8007, 0x25fc00b5, 0x1fc003e0, 0xfc00f300, -0xc207f00a, 0x407f141f, 0x07f001fc, 0x76003fc0, 0xf001f800, 0x003fc007, -0x03fc20ff, 0x1ec00bf1, 0x00000600, 0x00000000, 0x00350802, 0x0a4c805b, -0x27c011f0, 0x7c101700, 0xc009f001, 0x00971026, 0x0930425c, 0x1b0307c0, -0xf0025c00, 0x0837c609, 0x034c40df, 0x0bc019f1, 0x00000420, 0x00000000, -0x003ca013, 0x07441011, 0x17400dd0, 0x7012d100, 0x4205d006, 0x035d1897, -0x05b01974, 0xd810f740, 0xd0017400, 0x007f4405, 0x03c420fd, 0x4f400992, -0x00000200, 0x00000000, 0x0032a007, 0x03050101, 0x13400c90, 0x3403c504, -0x4004d006, 0x0c450213, 0x04900934, 0xc800f360, 0xd0011400, 0x84344004, -0x034481dd, 0x1f400958, 0x00000a00, 0x00000000, 0x24788004, 0x56840131, -0x6b4012d1, 0xb4012188, 0x401ad045, 0x01ad016b, 0x9a9006b4, 0x29104b44, -0xd006b421, 0x047b401a, 0x030401ed, 0x13403a18, 0x00000200, 0x00000000, -0x00301012, 0x030cc003, 0x13c080b8, 0x3c00c500, 0xc044f002, 0x84470013, -0x04b1213e, 0x4b1033e8, 0xf0011c00, 0x1033a804, 0x230c10cf, 0x4bc008f1, -0x00000040, 0x00000000, 0x043db802, 0x92d00877, 0x2fc20ff0, 0xfc003f00, -0xe80bf201, 0x00bf012f, 0x0974027c, 0xbf000fc2, 0xf002fc00, 0x203ec01b, -0x13fc80ff, 0x0bc00bf0, 0x00000660, 0x00000000, 0x3077a015, 0x054e001b, -0x05c00db0, 0x7c011f00, 0xc0017000, 0x00130047, 0x00f0005c, 0x931004c4, -0x31007c00, 0x3274c001, 0x1b7e44d3, 0x54c01bf0, 0x00000e00, 0x00000000, -0x21798812, 0x01840020, 0x39c00210, 0xb420ed00, 0xc00eb003, 0x00eb0033, -0x0ed0038c, 0x6b003940, 0xb0033600, 0x103ec00c, 0x33b4aaeb, 0x4ac00af0, -0x00000620, 0x00000000, 0x08710003, 0x878601b8, 0xc9401210, 0x34002500, -0x40321004, 0xc12510cb, 0x32d904b4, 0x2580c840, 0x100cb403, 0x017a4032, -0x279485ed, 0x0c401cd1, 0x00000400, 0x00000000, 0x00332812, 0x0b0404c1, -0x31000c10, 0x3401cd00, 0x400cd01b, 0x01cd0033, 0x0cd00704, 0xd981b140, -0x90037400, 0x0032420c, 0x033600cd, 0x4a5008d0, 0x00000c20, 0x00000000, -0x0015a817, 0x15cd007b, 0x55c005b4, 0x34035f10, 0xc0153009, 0x05570057, -0x14f0415c, 0x5700d0c0, 0x30057c01, 0x0014c017, 0x017c005f, 0x5cc005f0, -0x00000620, 0x00000000, 0x00870012, 0x187c021f, 0x8fc003f0, 0xf8183f00, -0xc0039208, 0x0039000d, 0x03f000dc, 0x3e200fc0, 0xf000fc00, 0x0087c003, -0x007c021a, 0x49c00170, 0x00000c00, 0x00000000, 0x00270810, 0x166c039f, -0x67c059f0, 0x4c009f80, 0xc809b006, 0x208f0067, 0x99f0064c, 0x9f0064c0, -0x30027c00, 0x00e4c009, 0x027c009f, 0x43c00934, 0x00000c20, 0x00000000, -0x01262001, 0x0e443299, 0xe74a09d0, 0x44809d06, 0x40a9300e, 0x419d2027, -0x19700e54, 0x95102548, 0x51025400, 0x20654009, 0x0274009d, 0x07400951, -0x00000800, 0x00000000, 0x1024a018, 0x0a64008d, 0x2e4009d0, 0xc400a900, -0x430f9022, 0x04fd023f, 0x0bd052c4, 0xb1292c40, 0x1012c400, 0x0024400a, -0x0234009d, 0x63400990, 0x00000200, 0x00000000, 0x07202210, 0x2204088d, -0x2a408ad0, 0x8428ad00, 0x620a1083, 0x00ad082b, 0x0a500294, 0xa5002940, -0x50029402, 0x0021402a, 0x1234088d, 0x434088d0, 0x00000080, 0x00000000, -0x1186b01d, 0x582c021d, 0x07c021f1, 0x4c021d00, 0xc001b000, 0x001f0007, -0x01f2004c, 0x1f0004c0, 0x30005c00, 0x0514c803, 0x2c7c025f, 0x77c161b0, -0x00000ac0, 0x00000000, 0x2127b819, 0x12fc04ab, 0xa7c069f0, 0x7c069f00, -0xc029f00a, 0x028d00a7, 0x29700a74, 0x9f00a3c0, 0xf05a7c02, 0x0527c029, -0x267e269f, 0x67c04b70, 0x00000e60, 0x00000000, 0x01ada018, 0x326c02a3, -0x2cc44bf0, 0xc410b300, 0xc14b3002, 0x34bf052c, 0x0b3002cc, 0x93002bc0, -0x3062fcc2, 0x04afe049, 0x224c02bf, 0x63c14f30, 0x00000e00, 0x00000000, -0x0007081c, 0x30440411, 0x06c301d0, 0x6c061b00, 0xc021b028, 0x021d1086, -0x01b2806c, 0x1b0a8740, 0xb0907c24, 0x0085c0e1, 0x1844041d, 0x73406114, -0x00000c20, 0x00000000, 0x02332010, 0x12040481, 0xa34868d0, 0x04508020, -0x40081002, 0x808d0020, 0x28590a04, 0x8d202340, 0x18122646, 0x00234108, -0x0a240685, 0x43410810, 0x00000e80, 0x00000000, 0x8025a818, 0x02440091, -0x264009d2, 0x64809920, 0x48098003, 0x009d0826, 0x09900264, 0x9d002740, -0x90825402, 0x00254009, 0x022620dd, 0x63420910, 0x00000620, 0x00000000, -0x40278805, 0x124c1193, 0x2744e9e0, 0x4c009300, 0xc4092202, 0xa09f1024, -0x09700244, 0x970027c0, 0x30026420, 0x20274009, 0x026d009f, 0x17c01930, -0x00000e20, 0x00000000, 0x04218014, 0x035c089f, 0x274009f0, 0x7c009f10, -0xc009d002, 0x409d0027, 0x09e0027c, 0x9b0027c0, 0xf0023c20, 0x0027c009, -0x025c008f, 0x53c039f0, 0x00000600, 0x00000000, 0x00040814, 0x284c001f, -0x01c80030, 0x3c000281, 0xc000f080, 0x100f2044, 0x01f02030, 0x170041c0, -0x30007c00, 0x0007c001, 0x004c041f, 0x53c01130, 0x00000420, 0x00000000, -0x089ca014, 0x2d55007d, 0xdce41511, 0xf4107594, 0x42a7d009, 0x607d909d, -0x157001f4, 0x51109d45, 0xb0015480, 0x0a1dc205, 0x01540079, 0x53400750, -0x00000200, 0x00000000, 0x80b2a014, 0x0304125d, 0xf3441c58, 0x3440c110, -0x603cd04b, 0x02cd0000, 0x1cd09334, 0xc8002040, 0x90030400, 0x00f3420c, -0x032408cd, 0x53400c90, 0x00000a00, 0x00000000, 0x00388005, 0x0714033d, -0x32402ed0, 0xb6002500, 0x610cd003, 0x00ed0019, 0x1e5003a0, 0xe9003940, -0x90039401, 0x00ab400e, 0x33b400e9, 0x17402ed0, 0x00000200, 0x00000000, -0x00781015, 0x058d08af, 0x7bc01f74, 0xbc01e100, 0xc016f007, 0x01ed0058, -0x1cf007b4, 0xcf0039c0, 0xb006dc15, 0x006bc83e, 0x172c03ef, 0x57c01eb0, -0x00000040, 0x00000000, 0x0015b810, 0x097c009f, 0x35c00d30, 0x7c001f10, -0x4205f102, 0x009f1017, 0x0df0017c, 0xd70037c0, 0xf0025c06, 0x2024c14d, -0x0b5c40cf, 0x43c00f70, 0x00000660, 0x00000000, 0x024fa000, 0x8fc901a3, -0x7bc01fb0, 0xcc09bb80, 0xc69a7007, 0x09e30068, 0x1f3007bc, 0xff006fc0, -0x3027d411, 0x027c429f, 0x2ffc05f3, 0x03c01730, 0x00000e00, 0x00000000, -0x023d8815, 0x128412a1, 0x1b408a10, 0xac08318a, 0xc0cab023, 0x086b2a1a, -0x0eb023ac, 0xef209b42, 0x1033ec00, 0x008ac80f, 0x33dc00ab, 0x5749aa10, -0x00000620, 0x00000000, 0x88090000, 0x010408b1, 0x0b400e18, 0x8400a900, -0x600ed001, 0x08e10038, 0x8e100296, 0xed023b40, 0x53028408, 0x083a440e, -0x03b404e1, 0x03400618, 0x00000400, 0x00000000, 0x00132804, 0x00042081, -0x43401810, 0x24010100, 0x401c1000, 0x01090052, 0x1c900c14, 0xc5005340, -0x58062401, 0x002641ac, 0x03140089, 0x13080810, 0x00000c20, 0x00000000, -0x4035a815, 0x134c0183, 0xb7483d30, 0x44435b04, 0xc031d048, 0x031300c4, -0x3d300754, 0xfd00f7c0, 0x740e4c03, 0x0006c03f, 0x03fc00f3, 0x57801914, -0x00000620, 0x00000000, 0x00270001, 0x0b7c029f, 0x37c0cd70, 0x7c0c1f09, -0xc0e1f011, 0x0cdf0307, 0xcdf02a64, 0xdf03b700, 0xa0327c0c, 0x0027c00d, -0x035c02cf, 0x07c807f0, 0x00000c00, 0x00000000, 0x013f0880, 0x04cc00bf, -0x7cc00af1, 0xcc006f01, 0xc0037002, 0x00330108, 0x1e3147bc, 0xe310f8c0, -0xf006cc80, 0x0024c00e, 0x038c00f1, 0x00c08b30, 0x00000c22, 0x00000000, -0x00462081, 0x0c54009d, 0x354089d0, 0x5c001d00, 0x4130d006, 0x10950005, -0x8d500064, 0xd500b540, 0xd02654a0, 0x08ed500d, 0x035402d5, 0x044025b0, -0x00000802, 0x00000000, 0x1004a001, 0x51440895, 0x26400dd8, 0x44101d00, -0x4041d990, 0x041100a4, 0x0d102974, 0xd5003440, 0xd0024400, 0x0054480d, -0x034400d5, 0x04400010, 0x00000200, 0x00000000, 0x00202210, 0x8014009d, -0x01400890, 0x34000908, 0x4000d801, 0x00450021, 0x0c508026, 0xc5003140, -0x90021440, 0x4000400c, 0x03040081, 0x40500090, 0x00000080, 0x00000000, -0x0006b000, 0x004c00b7, 0x06c009f0, 0x4c001f00, 0xc401fb80, 0x00130024, -0x0930007c, 0xe50034c0, 0xf1024c00, 0x2034c00f, 0x03cd0057, 0x00c60130, -0x00000ac0, 0x00000000, 0x080f9805, 0x00fc00bf, 0x0fc00bf0, 0x9c003f00, -0xc003d000, 0x003f002f, 0x0bf003fc, 0xf7003fc0, 0xf002fc00, 0x002fc00f, -0x03fc003f, 0x17c003f0, 0x00000e60, 0x00000000, 0x003fa003, 0x03cc00f3, -0x37c00ff0, 0xfc00f700, 0xc02df003, 0x00fb20bf, 0x2df023ec, 0xff003fc0, -0xe003b842, 0x023fc94f, 0x00ec10f3, 0x0cd08ff0, 0x00000e00, 0x00000000, -0x04050801, 0x4044101b, 0x07400150, 0x74001120, 0x4000d000, 0x14150004, -0x01d00044, 0x1d810744, 0x91004444, 0x213f4021, 0x0a4422d3, 0x0c4029d0, -0x00000c20, 0x00000000, 0x01012011, 0x133404c1, 0x21400052, 0x1400c500, -0x40485001, 0x00c10131, 0x4c120114, 0xcd051144, 0x50031404, 0x0131400c, -0x0b2481c9, 0x4c40ccd1, 0x00000e80, 0x00000000, 0x0837a803, 0x00250009, -0x17420d10, 0x74001100, 0x4005d002, 0x00058004, 0x01d08245, 0x1d002740, -0xd0004060, 0x10374001, 0x036400d1, 0x0c4009d0, 0x00000620, 0x00000000, -0x1836a882, 0x017c0051, 0x37c00df0, 0x78001401, 0xc005f003, 0x201b0123, -0x01f0027c, 0x9d0827c0, 0xf0927c04, 0x4037e429, 0x016c01db, 0x08c808d2, -0x00000e22, 0x00000000, 0x00018007, 0x0ecc83bf, 0x0fc001f0, 0x7c00ff00, -0xc40af010, 0x00df081f, 0x0ff001ec, 0x6f101fc0, 0xb281fc00, 0x003fc805, -0x03dc04ef, 0x1fc80db0, 0x00000600, 0x00000000, 0x00050802, 0x017c0053, -0x24c041f0, 0x7c081700, 0xc0c1b001, 0x00130025, 0x0130004c, 0x9d4007c0, -0x70027c00, 0x8033c029, 0x034c31db, 0x29c119d0, 0x00000420, 0x00000000, -0x0234a013, 0x82640095, 0x15413d50, 0x7400d900, 0xc00d5006, 0x00db0416, -0x0db40b54, 0x5702f660, 0x1001443a, 0x007c4077, 0x136c03db, 0x4d422dd1, -0x00000200, 0x00000000, 0x0032a007, 0x42340089, 0x14603c10, 0x2400c904, -0x402c1006, 0x00c90050, 0x0c501324, 0x41803340, 0x10010500, 0x06314044, -0x94040005, 0x5f420cd0, 0x00000a00, 0x00000000, 0x02488004, 0x05240165, -0x29401258, 0xb4012d11, 0x40125045, 0x4529022b, 0xd202a494, 0xa9254a40, -0x10069401, 0x0278401a, 0x06a449ad, 0x37401ad1, 0x00000200, 0x00000000, -0x00001012, 0x0234408b, 0x44c00052, 0x3c00c40b, 0xc0181000, 0x0dc30351, -0x5c40014c, 0x578a5740, 0x70011c08, 0x02358224, 0x230c00d7, 0x4bc20cf0, -0x00000040, 0x00000000, 0x083db802, 0x01fc0077, 0x3fc00f70, 0x7c001303, -0xc4077003, 0x201f0122, 0x83f002dc, 0xb7002ec0, 0xf4024c00, 0x02bd401b, -0x03fc00fb, 0x08c00bf0, 0x00000660, 0x00000000, 0x00752014, 0x005c0013, -0x10c40c62, 0x74001100, 0xe005f006, 0x001d0007, 0x01908274, 0x1d002642, -0x14004400, 0x2137c001, 0x016c4093, 0x54c009e0, 0x00000e00, 0x00000000, -0x0009091a, 0x038400fb, 0x2ac002d0, 0xb420e100, 0x420a2081, 0x00ed003b, -0x0e5001f4, 0xe9201840, 0x1003b400, 0x20bb601e, 0x038400bf, 0x4c500e91, -0x00000624, 0x00000000, 0x00410000, 0x04b50121, 0x484002d0, 0xb4012900, -0x40125084, 0x012d004b, 0x129004b4, 0x2d004840, 0x10048401, 0x817b4092, -0x87a6a1e1, 0x064018d0, 0x00000400, 0x00000000, 0x08312812, 0x034480c9, -0x30480cd0, 0x340dc180, 0x602c9883, 0x02dd8a73, 0xdc180334, 0xcd003050, -0x10033480, 0xa033400c, 0x030680d5, 0x4a400cd1, 0x00000c20, 0x00000000, -0x0015a837, 0x017c0052, 0x144005f0, 0x7c005b00, 0x40055001, 0x045d0017, -0x05b01174, 0x5d0116c0, 0x00114804, 0x001b2045, 0x45ec0271, 0x5e4107d0, -0x00000620, 0x00000000, 0x108f0012, 0x00fc022f, 0x0fc002f0, 0xfc003f48, -0xc1037000, 0x903f208f, 0x037208fc, 0x3b000fc0, 0xf000fc00, 0x00074003, -0x807c011f, 0x49c801b1, 0x00000400, 0x00000000, 0x02670830, 0x424c129f, -0x61e089b0, 0x4c008911, 0xc029f002, 0x00970261, 0x08300e0c, 0x970024c0, -0x30027c00, 0x4126c009, 0x025c0193, 0x41c008f0, 0x00000c20, 0x00000000, -0x04262001, 0x0254119d, 0x25400910, 0x54009d00, 0x44399042, 0x099d0027, -0x29d0166c, 0x95402540, 0x10020580, 0x01244808, 0x0244a999, 0x054029d0, -0x00000080, 0x00000000, 0x0024a018, 0x02c400bd, 0x2c400b94, 0xc404b500, -0x400bd002, 0x00b1042f, 0x0b1202f4, 0xad002845, 0x1002d400, 0x0024608b, -0x0654009d, 0x614029d8, 0x00000200, 0x00000000, 0x02282010, 0x229408ad, -0xa9480a10, 0x9600a500, 0x488ed002, 0x08a5022b, 0x0ad222a4, 0xa1802940, -0x100a8400, 0x8020408a, 0x26040489, 0x414088d8, 0x00000080, 0x00000000, -0x0086b01d, 0x084c021f, 0x054401b0, 0x4c801f10, 0xc021f100, 0x02172087, -0xa030087e, 0x1e0284c0, 0x32003c0a, 0x8502d167, 0x585c0b15, 0x75c161f0, -0x00000ac0, 0x00000000, 0x01a7b911, 0x1a7c269f, 0xa7c429f4, 0x3c029f00, -0xc069b10a, 0x069f01a7, 0x39701a4f, 0x9f00e7c0, 0xf40a6c03, 0x05278849, -0x12fc09b7, 0x66e04bf8, 0x00000e64, 0x00000000, 0x012fa018, 0x02cc00b7, -0x2f400a20, 0xf810b300, 0x4309e042, 0x80bf042c, 0x2930d2e8, 0x9320a680, -0x70527014, 0x012ec14b, 0x1afc0cb3, 0x60c06bf0, 0x00000e00, 0x00000000, -0x0097081c, 0xa86c2a01, 0x05c001b0, 0x74001b01, 0xc041d001, 0x0a100186, -0xf010895c, 0x3a02d740, 0xb0186c17, 0x46854031, 0x04740e11, 0x71484190, -0x00000c20, 0x00000000, 0x00a3a012, 0x02040085, 0xa3402858, 0x34008104, -0x4108d002, 0x00852420, 0x08500200, 0xa5012b44, 0x10422400, 0x10204148, -0x2234008d, 0x484868d2, 0x00000e80, 0x00000000, 0x0021a818, 0x02640091, -0x25610dd0, 0x76009900, 0x6089d002, 0x00810036, 0x09548214, 0xb9802f40, -0xd0024600, 0x00256001, 0x44740094, 0x61400990, 0x00000620, 0x00000000, -0x02e7a805, 0x824c6097, 0x67462971, 0x74009100, 0x4019d00a, 0x009f0024, -0x09500a44, 0x9500a7c4, 0x48026400, 0x00240a01, 0x0c7c079f, 0x14c009f1, -0x00000e20, 0x00000000, 0x00658016, 0x023c108f, 0x65c049b0, 0x7c209f06, -0xc01df102, 0x009f1027, 0x09b0027c, 0x9f0023c0, 0xb0022c00, 0x0021a100, -0x007c099b, 0x5bc809f2, 0x00000600, 0x00000000, 0x00050814, 0x2064001b, -0x02ca2170, 0x6c001f00, 0xc000f008, 0x001f0c07, 0x01f0087c, 0x3f008dc0, -0x31007c00, 0x0005c401, 0x08481013, 0x50d01130, 0x00000420, 0x00000000, -0x001ca014, 0x25d40071, 0x9c4027d0, 0xc6005d00, 0x41b51019, 0x3b7d009f, -0x05d005f4, 0x510014e0, 0x3001c400, 0x001f4003, 0x6cec0178, 0x50482710, -0x00000200, 0x00000000, 0x00322014, 0x0b2402c9, 0x72411c50, 0x0601cd80, -0x480c1143, 0x00c90007, 0x0c100704, 0xc5103344, 0x54031400, 0x0831403c, -0x033480c4, 0x51400d90, 0x00000a00, 0x00000000, 0x201a0005, 0x01a400e1, -0xb8411ed0, 0x8411ed01, 0x400e1006, 0x80ed010b, 0x1ed041a4, 0x21280840, -0x50238601, 0x411f410e, 0x273411e5, 0x14000390, 0x00000200, 0x00000000, -0x00421015, 0x07ac012b, 0xeac01e70, 0x8481ef01, 0xc8166207, 0x01ad804b, -0x167004bc, 0xf7007f42, 0x7047dc01, 0x00f9c09e, 0x07bc01f7, 0x55c016b0, -0x00000040, 0x00000000, 0x0025b810, 0x015c001f, 0x24c00df0, 0x1c008f08, -0xc1255002, 0x209f8247, 0x05d0027c, 0x37100ec0, 0x321b5c00, 0x0853c0cd, -0x436d40d9, 0x43c00870, 0x00000660, 0x00000000, 0x007fa000, 0x24dc017f, -0x7f009f72, 0xfc09bf12, 0xc41ff025, 0x013b024f, 0x1d30064c, 0xff0a7fc0, -0xf007d809, 0x0276409e, 0x275c0dd3, 0x02c01f30, 0x00000e00, 0x00000000, -0x061d8815, 0x02848061, 0x1a40c610, 0xbc01e116, 0xc382f00d, 0x101d0d43, -0x9eb06494, 0x2f030342, 0xd003841c, 0x015c408e, 0x07848dbf, 0x54408210, -0x00000620, 0x00000000, 0x00090000, 0x009400a5, 0x39600e52, 0xb400a500, -0x4006d003, 0x0869020b, 0x06110184, 0xcc003b48, 0xd003b600, 0x2138638e, -0x0b0400e5, 0x02500610, 0x00000400, 0x00000000, 0x00a72804, 0x4e041381, -0x92493410, 0x14938124, 0x4020504f, 0x024d0c81, 0x34104b14, 0x05068341, -0xd00b2412, 0x0010002c, 0x03040094, 0x10401852, 0x00000c20, 0x00000000, -0x1a67a815, 0x4a5c1297, 0xddc12570, 0x7412df00, 0x409dd14b, 0x095900ff, -0x2d120f44, 0xdd20f7c5, 0xf01ff403, 0x483e5aad, 0x0b4402d1, 0x56c01034, -0x00000620, 0x00000000, 0x30058001, 0x007c0097, 0xb6c025f4, 0x3c00cf08, -0xc00de00a, 0x004f0023, 0x0ef1813c, 0x3f000bc2, 0xf0131c00, 0x0011c00d, -0x0b6d0458, 0x07c0a1b2, 0x00000c00, 0x00000000, 0x025d0880, 0x02fc0273, -0x4fc007f0, 0xc400fd02, 0x80037009, 0x403300bf, 0x07b080cc, 0xf3003c80, -0x3003fc00, 0x011fc00f, 0x03dc20fb, 0x01d001f0, 0x00000c22, 0x00000000, -0x00760081, 0x24748051, 0xa5c8b5d0, 0x54009d04, 0x40115084, 0x001500f7, -0x07508254, 0x35000d40, 0x50037400, 0x0027440d, 0x1b440351, 0x054041f1, -0x00000800, 0x00000000, 0x0024a001, 0x01740011, 0x07000dd0, 0x54409d00, -0x448d1100, 0x02910017, 0x0d100264, 0xd1003540, 0x90037400, 0x00b7401d, -0x13541155, 0x054019d0, 0x00000200, 0x00000000, 0x80002010, 0x03248001, -0x01440490, 0x1404c900, 0x40004010, 0x00850002, 0x4c501014, 0x05900142, -0xd0833600, 0x0113621c, 0x13040481, 0x414000d1, 0x00000080, 0x00000000, -0x0016b000, 0x013c00c3, 0x87c00df0, 0x5c019f02, 0xc0a16014, 0x8ad323f7, -0x1531052c, 0xd10235c0, 0xb003fc00, 0x8557e00d, 0x075c1517, 0x01c001f2, -0x00000ac0, 0x00000000, 0x003fb825, 0x03fc00fd, 0x49c003f0, 0x7c089f01, -0xc013e320, 0x45ff8277, 0x977023fc, 0x3f014fc1, 0x7183fe00, 0x802fc00f, -0x0bfc00b7, 0x16c00b70, 0x00000e60, 0x00000000, 0x030fa003, 0x02ec00fb, -0x0cc043b0, 0xfc202300, 0xc00fb013, 0x00ff303f, 0x0ff103cc, 0xff002fc0, -0xf003ed80, 0x400ec80f, 0x238c0021, 0x0cc00731, 0x00000e00, 0x00000000, -0x01970801, 0x80c500f5, 0x26502510, 0xc4009140, 0x40057003, 0x401d3037, -0x0dd10344, 0xfd002f40, 0xd0034400, 0x0007400f, 0x03ec8a93, 0x04490512, -0x00000c20, 0x00000000, 0x2083a011, 0x023540c1, 0x32408499, 0x2400d100, -0x400cd18b, 0x001d0033, 0x0cd00334, 0xcd002140, 0xd0030400, 0x0023400c, -0x131555d1, 0x56408410, 0x00000e80, 0x00000000, 0x0031a803, 0x446400d5, -0x36402d10, 0x6400d000, 0x400d5003, 0x045d0037, 0x0dd00364, 0xdd002744, -0xd0134400, 0x0427400d, 0x037500d1, 0x1e418500, 0x00000620, 0x00000000, -0x4087a802, 0x077c40d3, 0x14c001b0, 0x7c011300, 0xc009b003, 0x331f0037, -0x0df0076c, 0xdf0027c2, 0xf0064c00, 0x4087c00d, 0x035c80d3, 0x02d03d34, -0x00000e20, 0x00000000, 0x20dd8007, 0x038c20f3, 0x3dc00f70, 0xdc98bf00, -0xc007f003, 0x00bf04ff, 0x9ff08bcd, 0xef082fc8, 0xd186fc00, 0x008f420f, -0x43e800f3, 0x0dc01de0, 0x00000602, 0x00000000, 0x00050802, 0x0f6c00d3, -0x34c025f0, 0x5c08df28, 0xc06d3023, 0x32df2034, 0x0d30037c, 0xd30026c0, -0x30026c00, 0x0230d00d, 0x23cc80df, 0x09d02f34, 0x00000420, 0x00000000, -0x84f4a013, 0x056407f1, 0xb4408fd0, 0xc402c104, 0x402db003, 0x01cd00f4, -0x0d102370, 0xff00ac40, 0x100e4450, 0x026c440f, 0x0b8400cb, 0x4c400d30, -0x00000200, 0x00000000, 0x2162a007, 0x020450d1, 0x044011d0, 0x14014511, -0x448c914b, 0x890d1032, 0xc890ab34, 0xc511a044, 0x916f0447, 0x40c0444c, -0x8f04a68d, 0x1d4005d0, 0x00000a00, 0x00000000, 0x20208004, 0x848400e1, -0x6c50d6d0, 0x8401f900, 0x505e1417, 0x09ed006a, 0x1a9407b4, 0xe4426810, -0x94878501, 0x600a001e, 0x078409b9, 0x18601e50, 0x00000200, 0x00000000, -0x02001012, 0x222c08d1, 0x30c14df0, 0x5c00c708, 0xc00d9003, 0x088f0432, -0x8d90137c, 0xd40424c0, 0xb0034c00, 0x0004810d, 0x030c08cf, 0x49c000f8, -0x00000040, 0x00000000, 0x012cb802, 0x00fc14ff, 0x3bc24ff0, 0xfc00f702, -0xc44ff013, 0x28ff003d, 0x8f70037c, 0xfb082dc0, 0x79237408, 0x00adc00f, -0x23fc28ff, 0x0bc087b0, 0x00000660, 0x00000000, 0x3037a015, 0x926c16df, -0x14c159f0, 0x4d005f00, 0xd0193477, 0x01534034, 0x09500749, 0xd30927c0, -0x38075c17, 0x000700cd, 0x33cc40cb, 0x44c01d30, 0x00000e00, 0x00000000, -0x00398812, 0xc08c04ed, 0x38402ed0, 0x8620ff00, 0x400e1013, 0x00e10038, -0x0a100bac, 0xe5832340, 0x10038486, 0x400b408e, 0x438400e1, 0x48400e10, -0x00000620, 0x00000000, 0x00590003, 0x07b401e5, 0x7a0c1e50, 0x8401ed04, -0x403e5017, 0x01f18078, 0x1e1057a4, 0xe1036b4a, 0x10078441, 0x025b401e, -0x078491f1, 0x0c400818, 0x00000402, 0x00000000, 0x22332812, 0x095400cd, -0x72700cd0, 0x0400c500, 0x400c1003, 0x01c10234, 0x0c140704, 0xc5002340, -0x14230500, 0x0233400c, 0x030440c1, 0x48400c10, 0x00000c20, 0x00000000, -0x005da817, 0x65fc0057, 0x5ec22570, 0x4c007d00, 0xc0071001, 0x03730014, -0x05300064, 0x538017c0, 0x10054400, 0x0057c005, 0x014c0273, 0x5cd02734, -0x00000620, 0x00000000, 0x00070012, 0x004c001f, 0x05c301d0, 0x7c001f00, -0xc021f008, 0x1a1f0087, 0x01f0886c, 0x1fc807c6, 0xf0087c02, 0x0007c001, -0x003d0317, 0x4bc100f0, 0x00000c00, 0x00000000, 0x00270810, 0x166c0097, -0x27c00d70, 0x4c009f11, 0xc439f186, 0x429300e7, 0x39f0147c, 0x930024c0, -0xf0867481, 0x0130d009, 0x024c8181, 0x40c00934, 0x00000c20, 0x00000000, -0x00a62001, 0x0274009d, 0x27404910, 0x45009d19, 0x40099002, 0x03914027, -0x39d21274, 0x90402458, 0xd0027400, 0x08a40039, 0x0a540895, 0x04401930, -0x00000800, 0x00000000, 0x00b4a018, 0x0244108d, 0x27408950, 0x44068d10, -0x400d5022, 0x00910027, 0x08d00274, 0x990a2041, 0xd0225408, 0x00244088, -0x0a44029d, 0x60401910, 0x00000200, 0x00000000, 0x02202010, 0x2214088d, -0xa3402810, 0x04028d00, 0x402cd21b, 0x028100b3, 0x28d20a34, 0x8900b040, -0xd00a3416, 0x80b06428, 0x0214048d, 0x40408810, 0x00000080, 0x00000000, -0x3586b01d, 0x586c160f, 0x07c14070, 0x0c001f00, 0xc000f004, 0x20530003, -0x01f0503c, 0x480004c0, 0xf0011c04, 0x0004c405, 0xa84c0b1f, 0x74c36130, -0x00000ac0, 0x00000000, 0x012fb819, 0x13fc049f, 0x2fc809f2, 0x7c00bf00, -0xc00b9822, 0x80af002f, 0x0bf200fc, 0x9700afc0, 0xf802fc00, 0x00b3c029, -0x0e3c09b7, 0x67c04b70, 0x00000e60, 0x00000000, 0x00afa018, 0x1acc02bb, -0x27c189f0, 0x7c829b00, 0xc2090032, 0x029f2022, 0x29308674, 0x9701a3c0, -0xf00a7c00, 0x012cc089, 0x62cc06a1, 0x67440b30, 0x00000e00, 0x00000000, -0x4007081c, 0x10450411, 0x070821d0, 0x74801321, 0xc9457208, 0x800d2105, -0x01305064, 0x11208748, 0xd2107484, 0x0582c043, 0x08548015, 0x73404154, -0x00000c22, 0x00000000, 0x00a3a010, 0x1a140681, 0x2f004ad0, 0xb400a904, -0x400a5032, 0x00ad042b, 0x0a9082f4, 0xa5022b40, 0xd002a410, 0x4220402a, -0x12042681, 0x43612c90, 0x00000e80, 0x00000000, 0x00a5a818, 0x12748091, -0x2f4909d0, 0xf480b104, 0x488b5082, 0x42bd002d, 0x4b1202e4, 0xb5002f40, -0xd002f400, 0x8036400b, 0x02540295, 0x634009d8, 0x00000620, 0x00000000, -0x00a7a805, 0x865d0093, 0xe3c039f0, 0x7c1b9b00, 0xc0393802, 0x029f8027, -0x09b0023c, 0x95002744, 0xf0027c00, 0x02a4c009, 0x024c0292, 0x17c059b2, -0x00000e20, 0x00000000, 0x00258014, 0x024c1097, 0x27c089f0, 0x7c019b05, -0xc009f002, 0x049f00e5, 0x0970266c, 0x9b0023c0, 0xf0027c00, 0x10630009, -0x0238049f, 0x53c03930, 0x00000600, 0x00000000, 0x01850814, 0x006c0007, -0x8cc20331, 0xfc023d00, 0x60032000, 0x0033410f, 0x03f080cc, 0x3a040fc8, -0xf000fc08, 0x0004c002, 0x904c0913, 0x53c00130, 0x00000420, 0x00000000, -0x015ca014, 0x0545227d, 0xd4500550, 0x74065d00, 0xc015502d, 0x00510817, -0x75f08140, 0x51001740, 0xd0094c0b, 0x001d4007, 0x0dc4027f, 0x53400510, -0x00000200, 0x00000000, 0x0076a014, 0x03040245, 0x78480e10, 0xb404ed80, -0x404e9003, 0x52e1027b, 0x3ed13794, 0xe000bb4b, 0xd06bb402, 0x0132400e, -0x0704001d, 0x53400c90, 0x00000a00, 0x00000000, 0x10388005, 0x0f840a6d, -0x38401ed0, 0x3400e904, 0x410e500f, 0x01e1007c, 0x0e500795, 0xe1043f40, -0xd0038400, 0x002b610c, 0x6384002d, 0x17400e90, 0x00000200, 0x00000000, -0x00581015, 0x06c601c7, 0x78c01f30, 0xbc41ed00, 0x401eb007, 0x01e3007b, -0x1ed0039c, 0xea407bc8, 0xf007bc41, 0xa07ac01e, 0x17cc816f, 0x57c81eb0, -0x00000040, 0x00000000, 0xa015b810, 0x825400df, 0x07c00172, 0x7c001f08, -0xc001c000, 0x005f0007, 0x01f0006c, 0x170007c0, 0xe0006c00, 0x882d4201, -0x017d005f, 0x43c00f74, 0x00000660, 0x00000000, 0x027fa000, 0x26c8417f, -0x7ec0df30, 0xdc01f302, 0xc09eb007, 0x29fe027c, 0x1ff007cc, 0xf3007fc0, -0xf027dc81, 0x03dda49f, 0x07cc01f3, 0x08d01b30, 0x00000e00, 0x00000000, -0x00098815, 0xb384046d, 0x38418eb2, 0xb488e102, 0xc28e7123, 0x0cff0b3a, -0x0ef20384, 0xe1823b40, 0x7023ac08, 0x022b40ce, 0x119d00fb, 0x56c00a10, -0x00000620, 0x00000000, 0x10390200, 0x828480ed, 0x38484e50, 0x9400e100, -0x480fd003, 0x00ed203a, 0x8ed043a6, 0xc1003f40, 0xd203b400, 0x0139481e, -0x832408e9, 0x60410f50, 0x00000400, 0x00000000, 0x00c32804, 0x020400cd, -0x824010d0, 0x34000170, 0x40b05000, 0x83450202, 0x00500024, 0x01800340, -0x50000480, 0x00274200, 0x831400c9, 0x18413c5c, 0x00000c20, 0x00000000, -0x0425a815, 0x8b4c00ef, 0x34c0bc50, 0x5c00d200, 0xc03d9003, 0x069d0034, -0x0dd20768, 0xd34037c0, 0xf0037400, 0x0275c00d, 0x02ec0a0b, 0x54481d74, -0x00000620, 0x00000000, 0x04370001, 0x133c005f, 0xb5c825a0, 0x3c90df00, -0xc84d700b, 0x909f2037, 0x2df20b5d, 0xdf20b7c8, 0xf20b7c80, 0x80e7c80d, -0x037c001f, 0x27c00d90, 0x00000c00, 0x00000000, 0x000b0880, 0x024c22d3, -0x3cc01930, 0xfc05ff0d, 0xc00fb007, 0x00bf013e, 0x1ff007fc, 0xf3007cc8, -0xb003fc00, 0x402fc00f, 0x229c0075, 0x07c21a30, 0x00000c20, 0x00000000, -0x00162081, 0x02540251, 0x05400d50, 0x74041d00, 0x40405000, 0x031d0105, -0xc0d0605c, 0x11060140, 0x50283401, 0x40e74081, 0x016c0055, 0x04401934, -0x00000802, 0x00000000, 0x0064a001, 0x02441099, 0x04406d90, 0x74001504, -0x40411160, 0x141d0006, 0x01500070, 0x11000448, 0x90085438, 0x00764409, -0x035480d5, 0x05404990, 0x00000200, 0x00000000, 0x40002010, 0x031400c1, -0x01600550, 0x34000d30, 0x40015800, 0x000d0003, 0x01900016, 0x00600540, -0x10006400, 0x80034008, 0x002401c5, 0x40400813, 0x00000080, 0x00000000, -0x0026b000, 0x024c0093, 0x00400930, 0x7c001700, 0xc0013000, 0x001f0006, -0x01f1007c, 0x10400448, 0xb0007c00, 0x002bc009, 0x035c00d7, 0x05c009b0, -0x00000ac0, 0x00000000, 0x200fb805, 0x02fc00ff, 0x3fc00ff0, 0xfc00ff00, -0xc00f7003, 0x20bf003c, 0x0ff003dc, 0xff003bc0, 0xd003fc00, 0x502fc007, -0x02fc007f, 0x15c00af0, 0x00000e60, 0x00000000, 0x001fb003, 0x01dc20f7, -0xbe408f70, 0xdc083301, 0xc08ff003, 0x4cfb0d3e, 0x0d30904c, 0xf60837c0, -0xf202ec48, 0x1104e04f, 0x011c0c4f, 0x0cd08f70, 0x00000e00, 0x00000000, -0x20a70001, 0x00c40201, 0x3c404f30, 0x6c041b40, 0x400dd1b3, 0x06510081, -0xcf112850, 0xfd013dc1, 0x54124c04, 0x2985c08f, 0x0154025d, 0x04406810, -0x00000c20, 0x00000000, 0x0217a211, 0x01140245, 0xb1400c14, 0x34004101, -0x404c9041, 0x88414000, 0x0c185004, 0xcd043340, 0x10432404, 0x0710400c, -0x0104228d, 0x45406810, 0x00000e80, 0x00000000, 0x0005a803, 0x09540095, -0x35480d10, 0x44021100, 0x400dd041, 0x04c10035, 0x0d118010, 0xdd003540, -0x50036400, 0x0c15400d, 0xc15000dd, 0x0d400910, 0x00000620, 0x00000000, -0x0256a802, 0x055c0097, 0x35d00d30, 0x74029100, 0xc00dd002, 0x019a0036, -0x0d340f4c, 0xcf0037c0, 0x30026c00, 0x0804c00d, 0x0c08124f, 0x09c00d34, -0x00000e20, 0x00000000, 0x102d8007, 0x086c007a, 0x3ec00fb1, 0xfc207f20, -0xc50ef026, 0x213f500b, 0x0ff00ffc, 0xff003fc2, 0xf0039c40, 0x0087c40f, -0xc8fc147f, 0x9ec08ab0, 0x00000600, 0x00000000, 0x00350802, 0x091c081f, -0x32c08cb0, 0x7c00df01, 0xe20d7408, 0x001f0107, 0x0df04f5c, 0xd30435c0, -0xf0035c10, 0x2014c20c, 0x214c0097, 0x08c08930, 0x00000420, 0x00000000, -0x03a0a013, 0x45440bd1, 0x7f402f90, 0x74105d01, 0x412f112c, 0x0a9111b7, -0x1fd00b6c, 0xf1003ec0, 0xd0077d03, 0x0094402f, 0x09ec02f1, 0x4c40a910, -0x00000200, 0x00000000, 0x0042a007, 0x113400d5, 0xb3490c90, 0x34d01900, -0x401c4000, 0x088d0032, 0x8cd00004, 0xc1023261, 0x90060520, 0x118042dc, -0x0d3000cd, 0x0c501890, 0x00000a00, 0x00000000, 0x00788004, 0x21a40921, -0x7b401e94, 0x2401ad11, 0x401e1054, 0x8521024b, 0x5ed804a4, 0xc1003a40, -0xd046b419, 0x11584c1f, 0x05f40df9, 0x00401e9c, 0x00000200, 0x00000000, -0x00000012, 0x213c0047, 0x33400cb1, 0x34084e02, 0x440c7096, 0x001f0143, -0x1df1271c, 0xc30b7664, 0xb0171d00, 0x0140c80c, 0x853c0dcf, 0x58d04cb0, -0x00000040, 0x00000000, 0x2019a802, 0x11cc00bf, 0x37c00f70, 0xfc08be03, -0xc00df022, 0x04bb203f, 0x0df0036c, 0xff3f3ec0, 0xf1137c00, 0x2025c00e, -0xb1ec20f7, 0x0bc00f70, 0x00000660, 0x00000000, 0x0007a015, 0x434c009b, -0x35c00df0, 0x5c00930c, 0xc00d3001, 0x00db0037, 0x4df0004c, 0xd32d37c8, -0x72024c9d, 0x1006c12d, 0xa50d00df, 0x57c00938, 0x00000e08, 0x00000000, -0x08398812, 0x03852041, 0x38412ed0, 0xb400e101, 0x400e1201, 0x004b000f, -0xaed000ac, 0xf3313b40, 0x51038444, 0x1019424e, 0x03ac43fd, 0x4b400eb0, -0x00000620, 0x00000000, 0x006d0003, 0x05844129, 0x7b405ed0, 0xb403e902, -0x429e1407, 0x0161904b, 0x5ed007a0, 0xe9107b48, 0xd0873484, 0x0048449c, -0x15c401ed, 0x0f441e14, 0x00000400, 0x00000000, 0x00332812, 0x030600c1, -0x34400cd0, 0x3601c940, 0x680c1103, 0x01c92037, 0x0cd00744, 0xc1103344, -0xd0073500, 0x0231440c, 0x0f0400dd, 0x5b400c90, 0x00000c20, 0x00000000, -0x189da817, 0x01cc017b, 0x17c005f0, 0xfc037b00, 0xc4051041, 0x1073001f, -0x05f01de1, 0x4b0013c0, 0xf0117c00, 0x005e0207, 0x21c0807f, 0x5fc40530, -0x00000620, 0x00000000, 0x20070012, 0x007c0a1f, 0x07c601f0, 0x7c041700, -0xc001f008, 0x001f0007, 0x01f1487c, 0x1f0007e0, 0x32084400, 0x0005e001, -0x207c001f, 0x4bc02130, 0x00000c00, 0x00000000, 0x04230810, 0x460c008b, -0x25c00834, 0x3c229310, 0xc0091022, 0x008f0024, 0x0932024c, 0x9b0127c4, -0x30064c00, 0x3026c009, 0x82688197, 0x40c409f2, 0x00000c20, 0x00000000, -0x40262001, 0x26458091, 0x24400910, 0x74409100, 0x4089144e, 0x00951025, -0x09100a45, 0x91106740, 0x514e0440, 0x10254028, 0x02540197, 0x055129d0, -0x00000800, 0x00000000, 0x0064a018, 0x02440091, 0x25400990, 0x54409100, -0x4008d002, 0x10990024, 0x09100364, 0x91802540, 0x98226402, 0x20e44009, -0x02740495, 0x604008d8, 0x00000200, 0x00000000, 0x00202010, 0x02240281, -0x20400890, 0x34088902, 0x40085022, 0x088500a1, 0x08107300, 0x8d422360, -0xd8226400, 0x1221448c, 0x42040885, 0x414088d9, 0x00000080, 0x00000000, -0x0502b01d, 0x504c1453, 0x81c000b0, 0x1c001305, 0xc08172d8, 0x161f0504, -0xe114186e, 0x1b0587c1, 0xb2586c9c, 0x0586e161, 0x047c9017, 0x74c161f2, -0x00000ac0, 0x00000000, 0x002fb819, 0x02dc00b7, 0x27c92970, 0xfc04b769, -0xc069b013, 0x04bb002f, 0x19f012fc, 0x93012380, 0x7012dc04, 0x012ff049, -0x02fc00bf, 0x66c04bf0, 0x00000e60, 0x00000000, 0x002fa018, 0x025c009f, -0x27c00970, 0x5c009f05, 0xcb69b00a, 0x009d0227, 0x69f04274, 0xbb132d44, -0x3042dc06, 0x142cc04b, 0x12ec12bb, 0x63c009f0, 0x00000e00, 0x00000000, -0x0007081c, 0x00440017, 0x87c06110, 0x44041d01, 0x40019000, 0xa0110107, -0x43700874, 0x11000440, 0x50582c84, 0x4187c001, 0x006c065f, 0x734040d1, -0x00000c20, 0x00000000, 0x002ba010, 0x0e9410ad, 0x2b418a50, 0x9410b904, -0x400ad002, 0x00a9912a, 0x6ad052b0, 0x8101a140, 0x58023586, 0x24604568, -0x0a040481, 0x414528d1, 0x00000e80, 0x00000000, 0x0425a818, 0x06c602b5, -0x2f440f10, 0xc400bd10, 0x400bd002, 0x80b10c2f, 0x0b5002f6, 0x91002400, -0x50926420, 0x40676809, 0x2264089d, 0x634019d0, 0x00000620, 0x00000000, -0x00a78805, 0x025c029d, 0x27400970, 0x5c098f00, 0xc009f002, 0x109f40a7, -0x09f19274, 0x914025c0, 0x70027c00, 0x20e44008, 0x064c0093, 0x15c209f0, -0x00000e20, 0x00000000, 0x00248014, 0x027c0097, 0x25c009f0, 0x3c019f00, -0xc2093002, 0x009f10e7, 0x0970267c, 0x970027c4, 0xf2067c00, 0x0027c009, -0x027e008f, 0x53c00df8, 0x00000600, 0x00000000, 0x008d0814, 0x008c0223, -0x0ce00330, 0xcc103f08, 0xc0033000, 0x403f000a, 0x027008f4, 0x072c0340, -0x10005c88, 0x00464801, 0xe04c881b, 0x50c01130, 0x00000420, 0x00000000, -0x0854a014, 0x01440051, 0x57e00550, 0x44005d00, 0x40051001, 0x01592017, -0x0510014c, 0x7d201c40, 0x10a9fc00, 0x08984007, 0x05c40175, 0x50400510, -0x00000200, 0x00000000, 0x4252a014, 0x00340901, 0x004a0012, 0x14000d08, -0x40001800, 0x00055803, 0x10180014, 0x4d003240, 0xd0834430, 0x0030400c, -0x070431cd, 0x50500c90, 0x00000a00, 0x00000000, 0x20708205, 0x033404c1, -0x39401e50, 0x9408fd0c, 0x408e1203, 0x07c1013b, 0x4c405704, 0x4d213841, -0xd003a100, 0x03185006, 0x068420f1, 0x14411290, 0x00000200, 0x00000000, -0x00581015, 0x05bd01a3, 0x48405330, 0xdc056f0d, 0x48963047, 0x33ae144e, -0x3234169c, 0x67217a80, 0xf1079c27, 0x014cc41f, 0x078800af, 0x54d016b4, -0x00000040, 0x00000000, 0x0035b810, 0x024c2a5f, 0xb7c02df0, 0x6d468f22, -0xc869f430, 0x065b0337, 0x1db0417c, 0x5e0827c8, 0x30827400, 0x0045c145, -0x823c498f, 0x43c02970, 0x00000660, 0x00000000, 0x005fa000, 0x049c037f, -0x5dc13330, 0x5c03bf00, 0xc213f104, 0x855a1046, 0x17d245fc, 0xfba67ec0, -0xb227cd8d, 0x1078c81d, 0x244c01d3, 0x00c03b30, 0x00000e20, 0x00000000, -0x01398815, 0x93ac20ad, 0xa9c04e10, 0x04046f00, 0x002fd017, 0x09ab0070, -0x7bd0028c, 0xa3001842, 0xf0073c0c, 0x0fdbc076, 0x1eac0d6d, 0x54408610, -0x00000660, 0x00000000, 0x00190200, 0x09d400ed, 0x1b40021a, 0xb410ed02, -0x50065093, 0x00c90008, 0x56d003a6, 0x61003144, 0xd041844c, 0x010e404e, -0x10e400a9, 0x00400210, 0x00000400, 0x00000000, 0x02b32804, 0x0204120d, -0x23600d1c, 0x24000500, 0x4009d800, 0x120904f0, 0x08d00004, 0x01000040, -0x42003440, 0x00c14005, 0x0224010d, 0x10420c10, 0x00000c00, 0x00000000, -0x00b5a815, 0x0254113f, 0x2fc00f10, 0xfc003d00, 0xc00b7000, 0x823a217e, -0x0bf080ec, 0xf3000dd4, 0xd0834c00, 0x002e4205, 0x016c81e3, 0x54f00d30, -0x00000600, 0x00000000, 0x21170001, 0x0d7c00cf, 0x95c001f0, 0x5c00df00, -0xc005f003, 0x80d70887, 0x05f2032c, 0x971035c4, 0xf1037d00, 0x0027c021, -0x007d08d7, 0x07c011f5, 0x00000c00, 0x00000000, 0x023b08a0, 0x038c0093, -0x28d29fb0, 0xfc307300, 0xc00ff003, 0x80b5007e, 0x0b3102ec, 0x43000bc0, -0xa003ac00, 0x54dcd04f, 0x419000d3, 0x00c00530, 0x00000c02, 0x00000000, -0x00162081, 0x10444051, 0x94403150, 0x74009500, 0x4421d100, 0x00550185, -0x05108174, 0x1b006740, 0x50024438, 0x00d04021, 0x2c5410d5, 0x045009f0, -0x00000802, 0x00000000, 0x00b4a001, 0x02440051, 0x34400d94, 0x74009500, -0x4009d000, 0x80510231, 0x0d900174, 0xd122876c, 0x54836400, 0x00045205, -0x015688d1, 0x06400892, 0x00000200, 0x00000000, 0x40102010, 0x01042081, -0x00480011, 0x24004100, 0x4004d013, 0x04850001, 0x40950234, 0x01001240, -0x50430500, 0x11004040, 0x600618c1, 0x42401c92, 0x00000080, 0x00000000, -0x0036b000, 0x034d00f3, 0x3cc00fb4, 0xfc40e700, 0xc40fd037, 0x05f701f8, -0xfdb023fc, 0x510207c5, 0x703d6c00, 0x2754c15e, 0x15582593, 0x02c401b0, -0x00000ac0, 0x00000000, 0x100fb805, 0x00fc003f, 0x0fc003f0, 0xfc003f00, -0xc003f0a4, 0x0837074d, 0x113004fc, 0x3f894fc0, 0xf0947840, 0x0057c003, -0x14bc05bf, 0x15c00ff0, 0x00000e60, 0x00000000, 0x003f8003, 0x02f4003f, -0x3cc00f50, 0xfc00ff00, 0xc80f3803, 0x00b1403f, 0x0f3003fc, 0xfd103fc0, -0xb123fc00, 0x018acc27, 0x51fc90a2, 0x0cc02f34, 0x00000e00, 0x00000000, -0x103f0801, 0x02748011, 0x05400911, 0x3c001d00, 0x48011200, 0x00110007, -0x01520074, 0x1d000740, 0x10147400, 0x2364c858, 0x49740095, 0x04500f10, -0x00000c20, 0x00000000, 0x0033a011, 0x02140001, 0x00600451, 0x36000d20, -0x40001400, 0x40090003, 0x00940024, 0x0d000340, 0xd0101480, 0x80324008, -0x11140009, 0x44404c90, 0x00000e80, 0x00000000, 0x0035a803, 0x02740211, -0x05400d18, 0x74101d00, 0x40811020, 0x90190007, 0x01902034, 0x1d820740, -0xd0083424, 0x10244049, 0x4174009d, 0x0c400d10, 0x00000620, 0x00000000, -0x4037a802, 0x027c2313, 0x04cc2850, 0x78021f10, 0xc001100c, 0xa05b0047, -0x21b0146c, 0x1f04c7c0, 0xf0245c41, 0x0806c011, 0x213c249b, 0x08c20d32, -0x00000e20, 0x00000000, 0x08398007, 0x02bc4573, 0xffc00ff2, 0xdc09ff08, -0xc01ff107, 0x80f700bf, 0x3f7007fc, 0xff007fc0, 0x3003fc00, 0x120dc00f, -0x057c00f7, 0x1fc00fc0, 0x00000600, 0x00000000, 0x00350806, 0x437c021f, -0xb5d505f0, 0x7c02db00, 0xc22d3083, 0x00d340b4, 0x2df21b7c, 0xdf00b7e8, -0xf00b7c02, 0x0035828d, 0x094c00d3, 0x0bc08d30, 0x00000420, 0x00000000, -0x013ca013, 0x8374005d, 0x35490d10, 0x4c0add01, 0x41ad100f, 0x0fd122f5, -0x0dd00b74, 0xd1103740, 0xd0037400, 0x012c44ad, 0x0d6c00fb, 0x4f420f10, -0x00000200, 0x00000000, 0x0072a003, 0x8e24010d, 0x835c3410, 0x74000d09, -0x50001440, 0x00010004, 0x00d82034, 0x05000340, 0xd0002480, 0x04954011, -0x41040089, 0x1f410d14, 0x00000a00, 0x00000000, 0x20788000, 0xb6b411ad, -0x7b409a14, 0x8401ed00, 0x421e1107, 0x05a00c7a, 0x1ed087b4, 0xe9007b40, -0x9027b421, 0x213c401e, 0x04a400b9, 0x13401e10, 0x00000200, 0x00000000, -0x18301016, 0x527c000f, 0xb3ca8c74, 0x3c00cf20, 0xc82d3043, 0x008320b4, -0x0cd3933e, 0xcf023744, 0xf0032c22, 0x1a31c00c, 0x510c088b, 0x4bc20c3a, -0x00000040, 0x00000000, 0x04bdb802, 0x92fc00bd, 0x3dc08e70, 0xdc08ff00, -0xc08f7003, 0x049f0035, 0x0ff803fc, 0xf7383fc0, 0xf003fc00, 0x003fc01f, -0x00fc08bf, 0x0bc10ff8, 0x00000660, 0x00000000, 0x00b7a015, 0x827c2113, -0x04c81130, 0x7c001700, 0xc001b000, 0x40532007, 0x01300440, 0x1f0007c0, -0x30047c00, 0x2a57c001, 0x074c088b, 0x57c16d30, 0x00000e00, 0x00000000, -0x00318812, 0x02bc402b, 0x38400eb0, 0xb400ed00, 0x400e1403, 0x00f1403f, -0x0e9003c4, 0xed103b40, 0x1003b400, 0x011b400e, 0x02ec01e1, 0x4b484e11, -0x00000620, 0x00000000, 0x80790003, 0x0f340061, 0x78411e10, 0xb411ed04, -0x401e1007, 0x21e1007b, 0x1e908786, 0xed007b41, 0x1107b6d1, 0x003b401e, -0x079407f9, 0x0f401e90, 0x00000400, 0x00000000, 0xa0332812, 0x035481c9, -0x78401e98, 0xf403ed00, 0x442e1007, 0x12e1007b, 0x0e900386, 0xed80bb40, -0x1407b402, 0x04b3600e, 0x023413d1, 0x4b400c90, 0x00000c20, 0x00000000, -0x0015a817, 0x05740473, 0x94d00530, 0x74005700, 0xc9051045, 0x115316d7, -0x8534094d, 0x5d22d7c8, 0x30417c81, 0x001fc057, 0x21dc017b, 0x5fc005b4, -0x00000620, 0x00000000, 0x00030012, 0x087c101f, 0x0fc403f0, 0xfc003f00, -0xc1037280, 0x003f000f, 0x037260ec, 0x3f020fc0, 0xf010fc02, 0x0007e003, -0x806c801f, 0x4bc02172, 0x00000c00, 0x00000000, 0x01270810, 0x224c0083, -0x23e00932, 0x6c109b04, 0xc4093042, 0x00930024, 0x09f0026c, 0x9f0067c0, -0xf0024c12, 0x1022c009, 0x024d809b, 0x43c009f0, 0x00000c20, 0x00000000, -0x20262001, 0x42442091, 0x27680910, 0x45009340, 0x50091102, 0x00914024, -0x09d0024d, 0x8d226740, 0xd00a4c01, 0x10245009, 0x02440091, 0x074129d0, -0x00000800, 0x00000000, 0x00248018, 0x82442191, 0x2f4e0d10, 0xc400a100, -0x400a1c03, 0x20a10028, 0x0fd802c4, 0xb5802f42, 0xd042c400, 0x0024602a, -0x02640091, 0x634009d8, 0x00000200, 0x00000000, 0x02202010, 0x22040081, -0x2b400a10, 0x8408a100, 0x508a1022, 0x08a10228, 0x0ad82284, 0xed0a2b40, -0xd00a8400, 0x10a0402a, 0x0a240081, 0x434008d8, 0x00000080, 0x00000000, -0x0586b01d, 0x584e1413, 0x17400134, 0x0c021300, 0x48213008, 0x02130084, -0x01f0084c, 0x170087c0, 0xf0000d00, 0x0500c003, 0x006c1e13, 0x77c3e1f0, -0x00000ac0, 0x00000000, 0x4127b819, 0x12fe00ff, 0xa7c228f0, 0x5c069f20, -0xc069b21a, 0x269f11a7, 0x29f01b5c, 0xdf01b7c0, 0xf00b5c02, 0x002fc029, -0x0adc01b7, 0x67c019f0, 0x00000e60, 0x00000000, 0x022fa018, 0x1acc049f, -0x24404a32, 0x4c309300, 0xc0693002, 0x009309a6, 0x4b30124c, 0xa3022c80, -0x30124c04, 0x1927c089, 0x12cc0291, 0x60c16bf8, 0x00000e00, 0x00000000, -0x0087081c, 0x90440a1d, 0x04500112, 0x05050140, 0x5071143c, 0x030140c0, -0x01101cc5, 0x11428450, 0x14c44502, 0x054f40b1, 0x50440445, 0x72c001d0, -0x00000c20, 0x00000000, 0x01a3a010, 0x9a24008d, 0xa0488810, 0x84108108, -0x40ca5042, 0x16a50229, 0x28146284, 0x81012040, 0x110a0408, 0x01ab400a, -0x32240681, 0x406008d8, 0x00000e80, 0x00000000, 0x0025a818, 0x8264809d, -0x24410914, 0xc4109104, 0x406b5002, 0x82b501ad, 0x291022c6, 0x91002440, -0x10224400, 0x042f426b, 0x02640095, 0x624009d2, 0x00000620, 0x00000000, -0x0027a805, 0x266c029f, 0xe4cc3930, 0x4c029300, 0xc029706e, 0x619780e5, -0x0930864c, 0x930024c0, 0x30024c00, 0x40e7c239, 0x026d0293, 0x14d009d0, -0x00000e20, 0x00000000, 0x00258014, 0x025c49df, 0x77c049f0, 0x7c099f02, -0xc019b006, 0x059b2066, 0x29f0067c, 0x9f00a7c0, 0xe0067c02, 0x00a7c009, -0x425c089b, 0x53c109f2, 0x00000600, 0x00000000, 0x2a050814, 0x207c800f, -0x80c03080, 0x8c020f02, 0xc0223008, 0x4023008b, 0x00f0008c, 0x0f0000c0, -0xf0080c00, 0x000cc443, 0x005c8013, 0x50c000b4, 0x00000420, 0x00000000, -0x0014a014, 0x2df4205d, 0xd4412750, 0x44005d90, 0x00053001, 0x20550017, -0x05700155, 0x7d001540, 0xd0014400, 0x001c5005, 0x09c48051, 0x52c01711, -0x00000200, 0x00000000, 0x0072a014, 0x0374004d, 0x324c1890, 0x0500cd04, -0x400c8403, 0x40c02033, 0x1cd00324, 0x4d027040, 0xd0030400, 0x0014422c, -0x2e1400d1, 0x52403c10, 0x00000a00, 0x00000000, 0x20288005, 0x0334032d, -0x3a400e10, 0x84006d10, 0x44021000, 0x0025100b, 0x2e5000a4, 0x6d003942, -0xd0038400, 0x302a4010, 0x050404e1, 0x1641ce10, 0x00000200, 0x00000000, -0x00681015, 0x26bc002d, 0x7ad21ab0, 0x8c41ed10, 0xc01eb107, 0x81e3407b, -0x1ef007ac, 0x6f0078c0, 0xf0058501, 0x405cc81e, 0x069c05e3, 0x56c01630, -0x00000040, 0x00000000, 0x0025b810, 0x037c061f, 0x95c00df0, 0x7c405f00, -0xc401f000, 0x001b1007, 0x0cf0005c, 0x5f0037c0, 0xf2017020, 0x0025c001, -0x017c42df, 0x43c00470, 0x00000660, 0x00000000, 0x007fa000, 0x07fc2372, -0xfcc0df34, 0xc801f322, 0xc09f3007, 0x41f3207c, 0x1b3007d8, 0x73027cc0, -0x3027cc01, 0x0058c01f, 0x85cc93f3, 0x00c01f34, 0x00000e00, 0x00000000, -0x02398815, 0x23f4002b, 0x284186b0, 0x94846b00, 0x41821010, 0x04210108, -0x8a100084, 0x61003840, 0xb0238490, 0x202ac042, 0x11c410fb, 0x56c00210, -0x00000620, 0x00000000, 0x00210000, 0x00b40221, 0x3a0a4e50, 0xb410e124, -0x480e9803, 0x40e1243a, 0x0a900386, 0x610c2840, 0x11018400, 0x005c610c, -0x819402e1, 0x00400650, 0x00000400, 0x00000000, 0x00272804, 0x82340909, -0x02561490, 0x37034900, 0x58119604, 0x03114002, 0x88940447, 0x41642050, -0x14450513, 0x01a05001, 0x210401c9, 0x12400050, 0x00000c20, 0x00000000, -0x0035a815, 0x027c0250, 0xb6c01d70, 0x6401d100, 0xc03db06b, 0x84d102b6, -0x29a06b5c, 0x4300e4c0, 0x101f4c80, 0x04d4401d, 0x061d01f3, 0x54c00b70, -0x00000620, 0x00000000, 0x00270001, 0x0278001f, 0x35c00df2, 0x4c045f04, -0xc0417080, 0x001f0005, 0x4970006c, 0x5f0827c0, 0xf0037c20, 0x0027c101, -0x017c00df, 0x07c009a0, 0x00000c00, 0x00000000, 0x806f0880, 0x02fc0833, -0x3ce15db0, 0x4500df10, 0xc00df003, 0x10df0036, 0x5930034d, 0x9f0037c0, -0xf0014c00, 0x001cc00f, 0x02cc00e3, 0x00c00230, 0x00000c22, 0x00000000, -0x80662081, 0x46740015, 0x146a0c10, 0xc4007d01, 0x40037100, 0x003d000c, -0x19f000c8, 0x9d027744, 0xd001c403, 0x502d5043, 0x015400d1, 0x05409114, -0x00000802, 0x00000000, 0x2124a001, 0x06340011, 0x14480d90, 0x5680cd00, -0x600dd103, 0x00dd0034, 0x09900340, 0x5d002740, 0x90034006, 0x0010400d, -0x014400d1, 0x04400910, 0x00000200, 0x00000000, 0x08202010, 0x82348005, -0x00600410, 0x14004d30, 0x50005900, 0x40090000, 0x08980004, 0x4d002340, -0xd0030520, 0x40204000, 0x015440c1, 0x41400010, 0x00000080, 0x00000000, -0x0026b000, 0x02fc0011, 0x14500db2, 0x5e00dd20, 0xc00df203, 0x00df0034, -0x09b0034c, 0x9f0027c0, 0xb0014c00, 0x0014c005, 0x014c20f3, 0x00c40130, -0x00000ac0, 0x00000000, 0x002fb805, 0x02fc003f, 0x0bc007f0, 0xec007f80, -0xc0034200, 0x003f000f, 0x0bf000dc, 0xbf102fc0, 0xf001fc00, 0x002fc40b, -0x01fc40ff, 0x17c002f2, 0x00000e60, 0x00000000, 0x010f8003, 0x70ec08ff, -0x3dc18330, 0x5c043f00, 0xc0cfb04b, 0x84d7a006, 0x0f3011dc, 0x270236c0, -0xb000dc00, 0x003fc009, 0x034c301f, 0x0cc00ff0, 0x00000e00, 0x00000000, -0x1aa30801, 0x080c06fd, 0xbf426190, 0xc40e5f02, 0x04eea003, 0x10f12597, -0x4fd02155, 0x15103440, 0x1201140a, 0x0034400b, 0x8bd4021d, 0x04402fb0, -0x00000c20, 0x00000000, 0x8503a011, 0x902608cd, 0x31484094, 0x16108d05, -0x120c9893, 0x02c50080, 0x0c500104, 0x01013261, 0x90221400, 0x00334004, -0x232420cd, 0x444028d8, 0x00000e80, 0x00000000, 0x28258803, 0x126400cd, -0x37418198, 0x4400d500, 0x440d9003, 0x00d10014, 0x0d500154, 0x01487440, -0x10025002, 0x0034511d, 0x037400dc, 0x0c4009c0, 0x00000620, 0x00000000, -0x02478802, 0x006c00df, 0x35c23110, 0x541b1d00, 0xd00db103, 0x00d526c6, -0x0d74444c, 0x57007280, 0xb2085421, 0x8877c83d, 0x036c009f, 0x08c41de0, -0x00000e20, 0x00000000, 0x042d8007, 0x85dc00df, 0x3fc01772, 0x7c005f00, -0xc00e3043, 0x00f7005b, 0x0fe017bc, 0x3f003fc0, 0xf001bc85, 0x027dc00c, -0x03dc09af, 0x1fc09e30, 0x00000600, 0x00000000, 0x00950802, 0x106c00d7, -0x34d02930, 0x4c088301, 0xd00db003, 0x84d70885, 0x0d72007c, 0x534077c0, -0x70034c02, 0x4036c0ad, 0x037c00d3, 0x08c00920, 0x00000420, 0x00000000, -0x01f4a013, 0x0b443bf1, 0xbcc00d92, 0xdc00df01, 0x800fb103, 0x03e1001e, -0x5f3203fc, 0x1b0036c4, 0x1003ec03, 0x12f440bd, 0x1bdc0ed1, 0x4c41a9b0, -0x00000200, 0x00000000, 0x1092a007, 0x034403cd, 0x70400c18, 0x64840100, -0x400c180b, 0x01c51020, 0x1d500326, 0x0581b141, 0x10001453, 0x0032400c, -0x1324004d, 0x1c4218c8, 0x00000a00, 0x00000000, 0x80588204, 0x048701e9, -0x7e401e91, 0x86012502, 0x409e1037, 0x1de5007c, 0x1e5007f6, 0x69407800, -0x1037b631, 0x057940ce, 0x0794096d, 0x104018d1, 0x00000200, 0x00000000, -0x00b01012, 0x830408cd, 0x70404d38, 0x05080101, 0x429c1027, 0x45c7a160, -0x4c70073c, 0x01037148, 0x300c1800, 0x0176c0dc, 0x077c85cf, 0xc8c04cb4, -0x00000040, 0x00000000, 0x003db002, 0x02de30f7, 0xb9c00f72, 0xfe003c25, -0xc02fb023, 0x20eb222b, 0x0cb823bc, 0x7f4032c0, 0xf482ec80, 0x0236d08f, -0x037c80d3, 0x0bc01f30, 0x00000660, 0x00000000, 0x0007a015, 0x837c04df, -0xb6c00134, 0x7c00d340, 0xc02db813, 0x34db0046, 0x7db0067c, 0x5b0836c0, -0x30004c00, 0x2034c16d, 0x974c00d3, 0x54c04970, 0x00000e00, 0x00000000, -0x18098012, 0x01b408ed, 0x3c400610, 0x3400e909, 0x404c524b, 0x02c1101c, -0x4c100fc4, 0x2d813941, 0x10138480, 0x0038500f, 0x231400c1, 0x48410a50, -0x00000620, 0x00000000, 0x04790003, 0x479405ed, 0x79441a10, 0xb481e900, -0x429e1017, 0x85e10208, 0x9e925394, 0xc9027800, 0x10358481, 0x0479411e, -0xa79401e5, 0x0d401c18, 0x00000400, 0x00000000, 0x00332812, 0x073400cd, -0x31013c14, 0x3402c900, 0x500d5803, 0x00c90490, 0x0c100304, 0xdd003140, -0x14070401, 0x0061413c, 0x031400c5, 0x49400c5a, 0x00000c20, 0x00000000, -0x001da817, 0x01dc005f, 0x1f503730, 0xbc117100, 0xe0053681, 0x005b001c, -0x05b025dc, 0x79804c80, 0x1045cc03, 0x4815d027, 0x015c0075, 0x5dd00530, -0x00000620, 0x00000000, 0x00070012, 0x007c020f, 0x00c081f0, 0x7c101700, -0xc001b000, 0x00170205, 0x2178004c, 0x1f0205c2, 0xf0007d8c, 0x0006c001, -0x0074101b, 0x4ac001f0, 0x00000c00, 0x00000000, 0x00270810, 0x026c009f, -0x26c00870, 0x4c029308, 0xc009b202, 0x01870025, 0x5930024d, 0x9f0007c0, -0xb0020d00, 0x0025c009, 0x024c0093, 0x41c009b0, 0x00000c20, 0x00000000, -0x00a60001, 0x0a54029d, 0x26c00914, 0x74009500, 0x50091406, 0x09910020, -0x29120204, 0x99208740, 0x720a4400, 0x40245009, 0x02450091, 0x045009d0, -0x00000800, 0x00000000, 0x80a4a018, 0x43050095, 0x64400950, 0x54009900, -0x40090012, 0x00910026, 0x09180254, 0x99006742, 0x10424500, 0x00234808, -0x02640081, 0x614008d0, 0x00000200, 0x00000000, 0x02202810, 0x7204028d, -0x2251c890, 0x7414c100, 0x40681023, 0x80810224, 0x8c101a54, 0x8d026348, -0x50220408, 0x02224c88, 0x32240881, 0x404088d0, 0x00000080, 0x00000000, -0x3586a01d, 0x180c1457, 0x04cc6070, 0x5c041b05, 0xe041b0d8, 0x7e110187, -0x2130105c, 0x5f0507c0, 0x30d80c16, 0x00838161, 0x0c6c9613, 0x75c161b1, -0x00000ac0, 0x00000000, 0x012fa819, 0x12fc009f, 0x24c04b70, 0x7c14bf45, -0xc069f012, 0x219f032f, 0x69f00aec, 0xfb012fc0, 0xf012fd04, 0x012dc24b, -0x325c04bf, 0x67c24bf0, 0x00000e60, 0x00000000, 0x812fa818, 0x0aec00b3, -0x2fc229b0, 0xfc30bf00, 0xc029f00a, 0x06af0126, 0x2af0824c, 0xa301eec2, -0xf05a1c02, 0x00a6c489, 0x1a44829f, 0x60c029b2, 0x00000e00, 0x00000000, -0x4507081c, 0xb9442413, 0x07420152, 0x74000f09, 0x44217010, 0x401d1581, -0xa1f0083c, 0x1b418442, 0xd01c4400, 0x01455075, 0x0444051d, 0x7040f310, -0x00000c20, 0x00000000, 0x0323a010, 0x1206168d, 0xa3402850, 0x34108d14, -0x4268d28a, 0x068d0220, 0x08d04a16, 0x8921a240, 0x50022402, 0x012b502a, -0x1aa406ad, 0x40404a10, 0x00000e80, 0x00000000, 0x0025a018, 0x02460095, -0x27422954, 0x74029508, 0x54085002, 0x009d1025, 0x09510274, 0x94023440, -0xd0026400, 0x012d420b, 0x02e400bd, 0x60408b10, 0x00000620, 0x00000000, -0x01652005, 0x0a440095, 0x27440930, 0x74009d00, 0x4009d102, 0x009d2224, -0x09d0864d, 0x890826c0, 0xf04a7c03, 0x0027c039, 0x026d1b9e, 0x14d01934, -0x00000e20, 0x00000000, 0x01258014, 0x025c009b, 0x27c00930, 0x7c009f00, -0xc0097802, 0x509f0024, 0x09f1267c, 0x9b0067c1, 0xf00e5d03, 0x0067c039, -0x025c009f, 0x53c019f0, 0x00000600, 0x00000000, 0x00850014, 0x083c0013, -0x07c00134, 0x4c101101, 0xe801f000, 0x00130004, 0x80b0006d, 0x13004580, -0x30086c06, 0x200ec002, 0x00cd023f, 0x50d00230, 0x00000420, 0x00000000, -0x201ca814, 0x05f40771, 0x5f480500, 0xc4007404, 0x64079085, 0x0265201c, -0x3750017c, 0x71109c48, 0x12017c23, 0x00144205, 0x0144005d, 0x50400554, -0x00000200, 0x00000000, 0x0236a014, 0x063404d9, 0x73440c10, 0x0402c100, -0x480cd887, 0x42c12030, 0x2c500334, 0xcc103540, 0x10032402, 0xa832640c, -0x036420dd, 0x52400c50, 0x00000a00, 0x00000000, 0x00308005, 0xc03401e1, -0x62440e10, 0x8401e140, 0x408e9043, 0x02250078, 0x4e1027b4, 0x65a90844, -0x1007f442, 0x00095002, 0x00240029, 0x16400258, 0x00000200, 0x00000000, -0x40581015, 0x06bc006b, 0x7b407e32, 0x8d01e300, 0x501cf005, 0x01e32578, -0x1e7017ad, 0xeb416dc6, 0x3005ad01, 0x007ac01c, 0x07ac01ff, 0x56c01c30, -0x00000040, 0x00000000, 0x9015b010, 0x027c0057, 0x27e56df0, 0x7c201f08, -0xc02db101, 0x895b01b7, 0x9d77137c, 0xd90277c8, 0xf1817c06, 0x0004c201, -0x005c001f, 0x41c201f0, 0x00000660, 0x00000000, 0x007f8000, 0x37e4293f, -0x7d801f70, 0x4d295f00, 0xc03fb007, 0x01db0674, 0x9fb02fec, 0x73087ac0, -0x30a73503, 0x007ed01f, 0x07fc09f3, 0x00c21f32, 0x00000e00, 0x00000000, -0x01298835, 0x21fc00e7, 0x13c00eb1, 0x84017d01, 0xc04cf017, 0x8531047a, -0xca1a9710, 0x29034948, 0x11472c08, 0x02054042, 0x34b40121, 0x545003b0, -0x00000620, 0x00000000, 0x20190000, 0x13b4402d, 0x29410c11, 0xa414ed80, -0x420ed010, 0x08a10038, 0x069053a4, 0x61090e40, 0x1201f400, 0x0438400c, -0x033404e1, 0x00400e90, 0x00000400, 0x00000000, 0x01832804, 0x435680c5, -0x01401c10, 0x24010c00, 0x440dd100, 0x00011070, 0x00900345, 0x05001300, -0x10052401, 0x00010060, 0x00340001, 0x10400190, 0x00000c20, 0x00000000, -0x00a58815, 0x0f74009d, 0x15401f14, 0x6c009f00, 0x440f9202, 0x00e3807c, -0x0fb003ee, 0xc3005ed2, 0x310f7c31, 0x4034e22d, 0x037c00d1, 0x54c20d92, -0x00000620, 0x00000000, 0x98810001, 0x217c009f, 0x26c00df8, 0x5c009f00, -0xc80d7088, 0x009f0037, 0x0470035c, 0x5b0204c4, 0xfc037d00, 0x0005c001, -0x007c001f, 0x07c001f1, 0x00000c00, 0x00000000, 0x002f0880, 0x03fc293b, -0x1fc80ff0, 0xfc89f320, 0xd20ff023, 0x00ff003c, 0x19b0c3ec, 0xf3000fc0, -0xf041cc00, 0x003ec00e, 0x03cc00f0, 0x01c00f35, 0x00000c22, 0x00000000, -0x12442081, 0x07740113, 0xa7400df0, 0x74801100, 0xc40d1199, 0x22dd0036, -0x31100344, 0xd1001041, 0xd001ec80, 0x08084803, 0x80c42031, 0x044003b0, -0x00000802, 0x00000000, 0x8434a001, 0x13740011, 0x91680d50, 0x34001500, -0x400d1002, 0xd0550034, 0x4d150356, 0x55081440, 0xd0034400, 0x0035400d, -0x030400c5, 0x05480d10, 0x00000200, 0x00000000, 0x00002010, 0x012400c9, -0x12400c90, 0x34000142, 0x462c5600, 0xa4090430, 0x00101304, 0x11100448, -0xd0432720, 0x40057020, 0x40051005, 0x40400098, 0x00000080, 0x00000000, -0x4036b000, 0x0374201b, 0x05c00f70, 0x7c01d700, 0x482f301e, 0x091e21fc, -0x01300fbd, 0x616345d0, 0xf02d4c00, 0x22b5c22d, 0x0f4c0bd7, 0x01800d39, -0x00000ac0, 0x00000000, 0x800fb005, 0x03fc00f7, 0x4fc00f70, 0xfc083f01, -0xc05e9074, 0x8d3e257b, 0x0ff0774c, 0x3d00d5c0, 0xf015dc00, 0x014ec013, -0x547c851b, 0x97c003f0, 0x00000e60, 0x00000000, 0x050f8003, 0x02dc0033, -0x1b800bf0, 0xac007300, 0xc0029100, 0x0073400c, 0x0e3023fc, 0xe3030fc0, -0x3002ec08, 0x000cc007, 0x02fc006b, 0x0ed00a37, 0x00000680, 0x00000000, -0x20070801, 0x036c6013, 0x17420b34, 0x54004101, 0x400d1003, 0x00d50084, -0x0db083e4, 0xd9030740, 0x5002ec00, 0x04346105, 0x43741091, 0x04400d30, -0x00000c20, 0x00000000, 0x0003a011, 0x021600c9, 0x13440855, 0x04004104, -0x40009000, 0x00412203, 0x0c511334, 0xc9010342, 0x18020484, 0x11054044, -0x12140401, 0x44400950, 0x00000c80, 0x00000000, 0x0031a803, 0x0b6448d9, -0x164019d1, 0x50004410, 0x200d1003, 0x24d10405, 0x0d920374, 0xd9006740, -0x520e6403, 0x08354004, 0x027430d1, 0x0c408d51, 0x00000620, 0x00000000, -0x0a07a802, 0x015d031b, 0x07c01975, 0xcc047240, 0xc003b000, 0x001102b1, -0x0d70837c, 0xd34067c0, 0x300f4c00, 0x00054005, 0x061c005b, 0x0ac13170, -0x00000e20, 0x00000000, 0x002d8007, 0x83bd0067, 0x5fc40b30, 0xfc407b02, -0xf00f7203, 0x01bf045e, 0x2ff003ac, 0xe3102bc4, 0xf003bc00, 0x483ef807, -0x267c00bf, 0x1fc81730, 0x00000600, 0x00000000, 0x00550802, 0x196c009f, -0x17040934, 0x5c305301, 0xc1007014, 0x001b40a4, 0x8d30235c, 0xdf2224c9, -0xf00a6c00, 0x4004d005, 0x024c0213, 0x08c02130, 0x00000420, 0x00000000, -0x0034a013, 0x0b4413dd, 0xd7442900, 0x6c025100, 0x405d1083, 0x139b04ce, -0x0d5107f4, 0xfc02a440, 0xd0024400, 0x02704005, 0x224512d1, 0x4c401450, -0x00000200, 0x00000000, 0x0002a007, 0x0a24138d, 0x97430000, 0x5400c508, -0x40301008, 0x07c52001, 0x08100714, 0x0d004040, 0xd04a3400, 0x8083000c, -0x020411c5, 0x1c409cd0, 0x00000a00, 0x00000000, 0x18588004, 0x27a4098d, -0x5b401a19, 0xa401e501, 0x401e1087, 0x81ec0069, 0x1e502734, 0xfd024840, -0xd0068401, 0x0479401f, 0x2784ad31, 0x10400fd2, 0x00000200, 0x00000000, -0x00001012, 0x226c08cf, 0x13c08816, 0x1c00c70c, 0xc0007000, 0x00c74015, -0x4c31031c, 0x0f0210c0, 0xd0033c04, 0x0307e04c, 0x230c0c83, 0x48c084a0, -0x00000040, 0x00000000, 0x00bdb802, 0x23dc88fe, 0x1fc00bb0, 0xec08fb41, -0xc08ff003, 0x40dba636, 0x0ff003fc, 0xff023fd4, 0xf003fc00, 0x023ec00e, -0x23fc2d7f, 0x0bc04730, 0x00000660, 0x00000000, 0x0097a815, 0x034c009f, -0x17481970, 0x6c00d605, 0xc811f004, 0x00d71034, 0x6d701b48, 0xd70025c0, -0xb0130c01, 0x0004d00d, 0x034c00df, 0x57c40530, 0x00000e00, 0x00000000, -0x00399812, 0x032c00ad, 0x1f488e10, 0x8400e100, 0x840fd003, 0x00bb417e, -0x8eb04b2c, 0xf6002b40, 0x1143ac04, 0x0038400e, 0x0385002d, 0x4b480612, -0x00000620, 0x00000000, 0x00d90003, 0x078401ed, 0xda400ed8, 0x8601e510, -0x4012d000, 0x41e5107a, 0x1e121784, 0xec00e949, 0x9007d408, 0x0048401e, -0x070641ad, 0x0f401610, 0x00000400, 0x00000000, 0x00f32012, 0x032400dd, -0x5344cc14, 0x0400c500, 0x480cd003, 0x81890336, 0x0c900364, 0xc1007340, -0x10452400, 0x0030400c, 0x0705004d, 0x4b400410, 0x00000c20, 0x00000000, -0x0015a017, 0x61cc007d, 0x52c027f4, 0x6d005700, 0xc005f001, 0x0177005e, -0x15720144, 0x6f009dc8, 0xb041dc00, 0x0014c005, 0x014d005f, 0x5fc02734, -0x00000620, 0x00000000, 0x20070012, 0x087c0a1f, 0x07c001f4, 0xfc001a00, -0xc023f800, 0x081f0007, 0x01f0007c, 0x140407c0, 0x70087801, 0x000fc001, -0x287c003f, 0x4bc011b0, 0x00000c00, 0x00000000, 0x04370010, 0x260c4197, -0x74c00830, 0x14049361, 0xc8096002, 0x059b00e7, 0x4d30026c, 0x93202348, -0x30020000, 0x5024d409, 0x020c0093, 0x43c00930, 0x00000c20, 0x00000000, -0x00a62001, 0x4644029d, 0xe4400915, 0x54809180, 0x412910a6, 0x008141e7, -0x79b00244, 0x95002760, 0x100a4400, 0x20204009, 0x0a6c0081, 0x07408910, -0x00000800, 0x00000000, 0x00a4a018, 0x02450add, 0x24410d14, 0xd400810c, -0x480b1002, 0x40d91027, 0x09120264, 0x91822760, 0x10024400, 0x002d400c, -0xa24400b1, 0x63400910, 0x00000200, 0x00000000, 0x02202010, 0x2204088d, -0x24400810, 0x94088102, 0x402a1022, 0x02901523, 0x08902204, 0x95192340, -0x10821400, 0x00ad4028, 0x0a2402b1, 0x43480810, 0x00000080, 0x00000000, -0x0586b01d, 0x584c160f, 0x84c94130, 0x5c164100, 0xc1433258, 0x001a0107, -0x0130086c, 0x130ac340, 0x34514c0a, 0x0005c000, 0x014c8023, 0x77c00134, -0x00000ac0, 0x00000000, 0x2137b819, 0x12fc44bf, 0x27c80bf4, 0x7c049f21, -0xc009b012, 0x00bf052f, 0x09d01a58, 0xbf027fc2, 0xf102ec23, 0x20268809, -0x0add209f, 0x67c00bf0, 0x00000e60, 0x00000000, 0x012fa818, 0x32cc0cb3, -0x2f404930, 0xcc03bf00, 0xc019300e, 0x00bb222f, 0x0b30dac4, 0xdf01a4c0, -0x7012c806, 0x4026c029, 0x52cd0093, 0x60c00b70, 0x00000e00, 0x00000000, -0x4507081c, 0x38040e1b, 0x0742a114, 0x440a0d05, 0x48015038, 0x14110287, -0x01b0086c, 0x13008444, 0x11086806, 0x01474011, 0x18440121, 0x71000170, -0x00000c20, 0x00000000, 0x0323a010, 0x02240081, 0x23480811, 0x20048d00, -0x01289002, 0x00890123, 0x08109204, 0x8d01a144, 0x500e1082, 0x042f4048, -0xc20494a1, 0x404009d0, 0x00000e80, 0x00000000, 0x0225a818, 0x02655091, -0x67600914, 0x64009d00, 0x40091202, 0x00910027, 0x09900264, 0x91012450, -0x10026400, 0x802f4009, 0x024400b1, 0x61400950, 0x00000620, 0x00000000, -0x00e78005, 0x02640191, 0x674b0930, 0x6d009f08, 0xc0093002, 0x009b4067, -0x0830024c, 0x9f0065c0, 0x720a1c00, 0x0023c009, 0x264c4193, 0x14c04878, -0x00000e20, 0x00000000, 0x04258014, 0x025c149f, 0x27c14df0, 0x1c409f00, -0xc50df602, 0x109f0163, 0x89f0022c, 0x852077c2, 0xf00e7c00, 0x0027c009, -0x067c049f, 0x53c00970, 0x00000600, 0x00000000, 0x00010014, 0x404c2217, -0x07c021f4, 0x4c0c0f02, 0xc401f040, 0x001f0004, 0x4171004c, 0x1b0084c0, -0x70807c00, 0x480fc001, 0x804c8033, 0x53c02130, 0x00000420, 0x00000000, -0x089ca014, 0x01c4037d, 0x5dc00510, 0xd4007d10, 0x4005d019, 0xa171041d, -0x1711056c, 0x51005400, 0x1005f400, 0x10174205, 0x05d40051, 0x53400510, -0x00000200, 0x00000000, 0x02f2a014, 0x0744099d, 0x63022cd4, 0x0400cd00, -0x502cd003, 0x83d51060, 0x38508204, 0xc8007000, 0x50253440, 0x0031400c, -0x4f1400d9, 0x53400c54, 0x00000a00, 0x00000000, 0x18388005, 0x0984006d, -0x39400e10, 0x94816d02, 0x409cd801, 0x0a711039, 0x2b100ba4, 0xe100d060, -0x1001b40c, 0x100b480e, 0x47940029, 0x17400a10, 0x00000200, 0x00000000, -0x00781015, 0x878c018f, 0x7b4016f0, 0x8c206f10, 0xc71ef007, 0x05ef007c, -0x1a7006cc, 0xeb0078c0, 0x70053c15, 0x007dc01e, 0x04dd01eb, 0x57c01a70, -0x00000040, 0x00000000, 0x0035b010, 0x1b7d127f, 0x574145f5, 0x7c105f00, -0xc045d001, 0x004f0016, 0x0cd0837c, 0xdf0197d4, 0xf0036c06, 0x100fc00d, -0x006c0037, 0x43c009f0, 0x00000660, 0x00000000, 0x004fa800, 0x2fde01b3, -0x7ec4cfb1, 0xdc017f00, 0xc01f3007, 0x0163006d, 0x1af006e8, 0xff00fcc0, -0x3005dc01, 0x427f401f, 0x07cc8df3, 0x00c01f30, 0x00000e00, 0x00000000, -0x028d8015, 0x3384006b, 0x38400eb0, 0x94826900, 0xd10eb043, 0x006b0028, -0x8af00394, 0xeb191844, 0xb0018400, 0x470b600e, 0x03c55c31, 0x56c00a30, -0x00000620, 0x00000000, 0x00090000, 0x43340021, 0x38400412, 0x34082d00, -0x408e9023, 0x0821002e, 0x0ad00284, 0xe50c3b41, 0x10019400, 0x2039400e, -0x41840ce9, 0x00400b90, 0x00000400, 0x00000000, 0x00c30804, 0x0f240001, -0x10404494, 0x34001980, 0x4234980b, 0x05090080, 0x1c428314, 0xc000d240, -0x900b0403, 0x2483400c, 0x05041219, 0x12401818, 0x00000c20, 0x00000000, -0x44358015, 0x0f580091, 0x38803110, 0x7c001f04, 0xc4bfb007, 0x45f302a3, -0x09d00344, 0xf502f7c8, 0x34091c06, 0x00f5c005, 0x034c03db, 0x54c04cb4, -0x00000620, 0x00000000, 0x04270001, 0x035c280f, 0x15c019f0, 0x1c021b00, -0xc828f0c2, 0x001f0037, 0x09f0031c, 0xdf1005d0, 0xf0037c10, 0x080fc007, -0x037c0037, 0x07c009f0, 0x00000c00, 0x00000000, 0x001f0080, 0x42ec00bf, -0x7ed01330, 0xcc003300, 0xc81d3103, 0x03f2103c, 0x1b318bec, 0xe3006fc0, -0x344d4e80, 0x003fc207, 0x058c00f3, 0x00c00b30, 0x00000c22, 0x00000000, -0x00c62081, 0x460c111d, 0x1444003b, 0x6c031b04, 0x4001b00f, 0x010f0014, -0x45b00744, 0xdb400700, 0xb40b5480, 0x000e4027, 0x85440031, 0x07c009b0, -0x00000802, 0x00000000, 0x12348001, 0x0744219d, 0x34404910, 0x44411521, -0x40651047, 0x00550024, 0x49500364, 0xd1023300, 0x50086480, 0x08314425, -0x1b4400d5, 0x04400d10, 0x00000200, 0x00000000, 0x00202010, 0x0306000d, -0x12401892, 0x24000d00, 0x40001c03, 0x00051024, 0x08910204, 0xc1000340, -0xd0023400, 0x60024004, 0x01050001, 0x43400890, 0x00000080, 0x00000000, -0x0016a000, 0x03cc00ad, 0x34c00114, 0x4c002540, 0xd0051003, 0x00151024, -0x0970036c, 0xe10033c0, 0x74006400, 0x0033c205, 0x014c00d7, 0x00c00930, -0x00000ac0, 0x00000000, 0x000f9805, 0x03e0003f, 0x1dd20350, 0xfc003b00, -0xc003e103, 0x003f000b, 0x0bf802fc, 0xff101fc0, 0xb102dc00, 0x000fc007, -0x81fc803f, 0x15c00af0, 0x00000e60, 0x00000000, 0x048fa803, 0x30ec00b2, -0x3dc08370, 0x7c601300, 0xc00ef053, 0x04df083c, 0x43600bfc, 0x2c301fc0, -0x74135e44, 0x013cc02f, 0x00cc14f3, 0x0e820f30, 0x00000e00, 0x00000000, -0x00971005, 0x084c029b, 0x36484118, 0xf4001100, 0x400dd00b, 0x02f12c34, -0x6d110bc5, 0x1d141749, 0x1023dc02, 0x20bd406f, 0x200102f3, 0x0c410ff0, -0x00000c20, 0x00000000, 0x9103a011, 0x08240215, 0x22480510, 0x14544500, -0x481d9003, 0x08c52075, 0x20501b04, 0x01311340, 0x10032002, 0x0232402c, -0x503400c5, 0x4f400c50, 0x00000e80, 0x00000000, 0x81958007, 0x04540015, -0x36400554, 0x74001500, 0x401dd003, 0x00d12075, 0x0d110344, 0x99005740, -0x50835404, 0x0035400d, 0x107040d1, 0x0c400d50, 0x00000620, 0x00000000, -0x4027a800, 0x406cc095, 0xb4d00911, 0x58a41444, 0xc00d8003, 0x00df0035, -0x09710368, 0x9a0917c4, 0x71034c40, 0x4034800d, 0x187d00d7, 0x0ac00d50, -0x00000e22, 0x00000000, 0x103d8087, 0x01cc09bb, 0x3dc40bb0, 0xf8141b01, -0xd00fd803, 0x10ff003e, 0x4ff0037c, 0xef003f84, 0xb003bc21, 0x0037c80f, -0x808c00f7, 0x3fc00ff0, 0x00000600, 0x00000000, 0x00210802, 0x085c401b, -0x37c089f1, 0x7c021300, 0xc90d3043, 0x00db4036, 0x09f1033c, 0x1f0097c0, -0x32137c40, 0x0036c80c, 0x495c20d3, 0x0bc80d34, 0x00000420, 0x00000000, -0x0134a013, 0x03c411a1, 0x64400ed0, 0xc4027320, 0x420c1017, 0x03ef2030, -0x0d1003d4, 0xfd003740, 0x104bc40a, 0x00ba420f, 0x014400f1, 0x6f408f90, -0x00000200, 0x00000000, 0x0002a007, 0x01562088, 0x77405090, 0x14030502, -0x40bcd50f, 0x20c10032, 0x04900314, 0x4921b340, 0x92072700, 0x24f3420c, -0x2d0000d1, 0x1f600d90, 0x00000a00, 0x00000000, 0x02488804, 0x058441a1, -0x7a4012d1, 0x940d2d42, 0x401e1087, 0x19e9287a, 0x1e900794, 0x6d005b40, -0x9017c541, 0x057b429e, 0x058429e9, 0x37441e91, 0x00000200, 0x00000000, -0x00240012, 0x011c000b, 0x27c005d0, 0x1c1d4700, 0xc00cf017, 0x2dd32036, -0x14f0233c, 0x4f0373e0, 0xb4172c00, 0x0073c00c, 0x050d05d2, 0x4bc00c20, -0x00000040, 0x00000000, 0x002da802, 0x01fc0027, 0xadd007f0, 0x0c307308, -0xc90f3863, 0xc8f7023d, 0x0f300bcc, 0xfe0017c0, 0x70638c08, 0x063cc00c, -0x016c28d7, 0x0bc10f70, 0x00000660, 0x00000000, 0x1017a011, 0x017c009b, -0xb64081f0, 0x5c920f00, 0xec5c0103, 0x93df01b5, 0x1df00b60, 0xbf2035c0, -0x34cb1000, 0x2136c0ad, 0x006c04d9, 0x57402df2, 0x00000e00, 0x00000000, -0x801d8812, 0x05bc02a0, 0x30404a10, 0xa8a42b00, 0x0cce3033, 0x42ec9538, -0x0e701384, 0xed813942, 0x50139601, 0x0238408f, 0x00840ec1, 0xcf414ed0, -0x00000624, 0x00000000, 0x00790083, 0x25240121, 0x6b501250, 0x04256120, -0x421e1017, 0xa5c90379, 0x1c90a784, 0x3d077a40, 0x1407c403, 0x4979405e, -0x069481e1, 0x07481ed0, 0x00000400, 0x00000000, 0xd2372812, 0x055440c1, -0x85413c10, 0x0406c90c, 0x41ac9203, 0x00c904f0, 0x2c500314, 0xdd04b340, -0x50031410, 0x0031400c, 0x173400c1, 0x4b400cd0, 0x00000c20, 0x00000000, -0x00dda817, 0x0de05373, 0xd7c07770, 0xc5075101, 0x44231001, 0x005900cd, -0x0790014c, 0x7f00ce42, 0x31019403, 0x2015c806, 0x11dc005b, 0x5fc004f0, -0x00000620, 0x00000000, 0x01070012, 0x247c0117, 0x04d00174, 0x3e001f00, -0xe0213080, 0x001f0207, 0x01f1804c, 0x1f8005c1, 0xb0007c80, 0x20845021, -0x00488017, 0x4bc001f0, 0x00000c00, 0x00000000, 0x00270810, 0x027c059b, -0x34c00930, 0x5000d100, 0x4011b002, 0x209d0007, 0x09f0027e, 0x9d300744, -0x90225405, 0x1025c099, 0x224c0091, 0x40c009f0, 0x00000c20, 0x00000000, -0x00260005, 0x82740091, 0x24c0a910, 0x7c009100, 0x44015102, 0x00910002, -0x09d20274, 0x9d080744, 0x100a4f00, 0x01a6c009, 0x46440091, 0x07c02970, -0x00000800, 0x00000000, 0x4024a01c, 0x02540091, 0x24400c14, 0x44008540, -0x4061901a, 0x00990007, 0x09d00274, 0x99002740, 0x50025440, 0x00224009, -0x02448085, 0x604009d1, 0x00000200, 0x00000000, 0x00202010, 0x1a240081, -0x20600810, 0x34148502, 0x428810a2, 0x02c110a7, 0x88d12234, 0x8d022340, -0x54227408, 0x02224008, 0x22060285, 0x43508c50, 0x00000080, 0x00000000, -0x0706b019, 0x105e1413, 0x04c0a430, 0x4c041724, 0x4961b058, 0x541f1507, -0x61f05874, 0x1d0d87e1, 0xf0595456, 0x0503c1c5, 0x584d1417, 0x74d161f0, -0x00000ac0, 0x00000000, 0x013f9019, 0x1afc20bf, 0x66106bf0, 0x5c909b00, -0xc84b7012, 0x209b112e, 0x4bf0127c, 0xaf012fc0, 0xb0124c04, 0x4927c049, -0x12fc449b, 0x67c049f0, 0x00000e64, 0x00000000, 0x29afa818, 0x627654b3, -0x2cc14af0, 0xbc02b300, 0xc01bf012, 0x06bf0067, 0x29f01a4c, 0xa7116fc0, -0x30128c07, 0x052cc02a, 0x12ec0c93, 0x60c04af0, 0x00000e00, 0x00000000, -0x01870898, 0x10740011, 0x00c32110, 0x74045144, 0x4051d014, 0x041d0503, -0x81d0103c, 0x110d8740, 0x10744482, 0x04844071, 0x5054020b, 0x72c001f0, -0x00000c20, 0x00000000, 0x0323a010, 0x123400c1, 0x20644851, 0x34048102, -0x4328d04a, 0x068d00a3, 0x48d21a14, 0x95232500, 0x10020446, 0x68234029, -0x1a052881, 0x486028d0, 0x00000e80, 0x00000000, 0x0025a018, 0x02748091, -0xa0420d10, 0x70019100, 0x4001d000, 0x009d1027, 0x09d00274, 0x91002740, -0x12004402, 0x00234009, 0x02540091, 0x62400950, 0x00000620, 0x00000000, -0x40a70005, 0x4a741193, 0x645019f0, 0x74039320, 0x45b1d000, 0x009f06a7, -0x09f0024c, 0x850063c0, 0x34004500, 0x0025b009, 0x326c0091, 0x14f009d0, -0x00000e20, 0x00000000, 0x00250010, 0x027c039f, 0xa5c049f0, 0x7c009f00, -0xc411f000, 0x009f0027, 0x09f0026c, 0x9f026740, 0xf0407810, 0x0024e009, -0x066c008f, 0x59e009f0, 0x00000600, 0x00000000, 0x00850014, 0x085c0213, -0x06e04170, 0x4c001300, 0x40613010, 0x20130085, 0x01f0004c, 0x130004c0, -0x30002408, 0x0006c401, 0x084d0017, 0x50c01070, 0x00000420, 0x00000000, -0x40540814, 0x01748051, 0x16e037b0, 0xc4027108, 0x40333100, 0x82610017, -0x0510014c, 0x7d405c40, 0x1004d480, 0x001c45b6, 0x01c40055, 0x50403750, -0x00000200, 0x00000000, 0x0236a014, 0x03540081, 0x30461910, 0x1606c1a0, -0x603c1403, 0x04c90031, 0x0c980304, 0xc1027040, 0x112f2602, 0x0031600c, -0x030600c1, 0x52401c18, 0x00000a00, 0x00000000, 0x80288004, 0x03f400a1, -0x28410791, 0x94013900, 0x40ae988f, 0x00a9007b, 0xde100784, 0x6d083c40, -0x90139540, 0x2229400e, 0x07c404e1, 0x16414658, 0x00000200, 0x00000000, -0x007c1034, 0x179c01a1, 0x78501670, 0x9e41e342, 0xc89e3017, 0x254b4079, -0x1ff0178c, 0xe30078c0, 0x340fac81, 0x0173c00e, 0x878c8be7, 0x56d01670, -0x00000040, 0x00000000, 0x0025b010, 0x073c209f, 0xa7c009f1, 0x6f000701, -0xc26d706b, 0x081700b7, 0x2df0437c, 0x570033e0, 0x70c35e86, 0x0006c01f, -0x803c04df, 0x41c085f0, 0x00000660, 0x00000000, 0x007fa002, 0x47f801bf, -0x77d01f38, 0xfc01ff00, 0xc29df007, 0x0df784ff, 0xbdf0477c, 0xf7017dc0, -0x71076c03, 0x1276c01f, 0x07cc01f6, 0x00c21b30, 0x00000e00, 0x00000000, -0x00298815, 0x039c00af, 0x68444f18, 0x9c14a900, 0x001e7023, 0x01a1023f, -0x1cd007b4, 0x6100f040, 0x1017ac82, 0x0067489e, 0x474405c3, 0x56c00210, -0x00000620, 0x00000000, 0x02390000, 0x23b400ad, 0x38400e10, 0xa440ed20, -0x41ce9003, 0x2069043b, 0x0e9083a4, 0xa10b3841, 0x12132408, 0x0038400e, -0x338404ed, 0x00400210, 0x00000400, 0x00000000, 0x00632806, 0x07541285, -0xe0458c10, 0x14038900, 0x400c5103, 0x00090032, 0x0cd00364, 0x01007440, -0x14033400, 0x8003400c, 0x000400c1, 0x12000010, 0x00000c20, 0x00000000, -0x0075a815, 0x1bfc009d, 0xa4501930, 0x2c001f82, 0xc02d9a83, 0x803840bf, -0x3f9203ec, 0x4126b448, 0x32032c98, 0x002ec00e, 0x074d00ff, 0xd4500b30, -0x00000620, 0x00000000, 0x02270001, 0x135c019f, 0x34c00df4, 0x5c021b22, -0xc44df083, 0x02172137, 0x0cf0037c, 0x5f0097d0, 0xf0034c00, 0x00b5c02d, -0x037c00df, 0x04e020f0, 0x00000c00, 0x00000000, 0x007b0880, 0x036c40ab, -0x2cc00eb0, 0xfe103302, 0xc00f7007, 0x013d003e, 0x0f3103d4, 0x72207c41, -0x1113f420, 0x00cc4215, 0x03d400f7, 0x000089f0, 0x00000c22, 0x00000000, -0x00262081, 0x83440095, 0x35402910, 0x74721110, 0x400cb0a7, 0x120d0035, -0x0d10036c, 0x5b08d6c0, 0x100f5400, 0x21b44185, 0x004440d7, 0x044201d1, -0x00000800, 0x00000000, 0x0224a001, 0x03640191, 0x20400d90, 0x76081140, -0x401d1043, 0x28192034, 0x0d108364, 0xdd022540, 0x508b6600, 0x00214c05, -0x8344e0c1, 0x054025d0, 0x00000200, 0x00000000, 0x00300010, 0x03040085, -0x31400410, 0x76000141, 0x405d16a3, 0x000d2031, 0x4c141324, 0x5d130340, -0x500b1620, 0x11316105, 0x0b1410c1, 0x415004d0, 0x00000080, 0x00000000, -0x00263000, 0x036c0091, 0x6c4805b0, 0x740a1301, 0xc41d180b, 0x471f003e, -0x1e1087ec, 0xaf0861e2, 0x741f6c80, 0x0345d051, 0x0f5c0fe7, 0x01e005f2, -0x00000ac0, 0x00000000, 0x203fb805, 0x03f000f7, 0x3fc00ff0, 0xfc05380a, -0xc08ff007, 0x9d9f003f, 0x9fc1a3ec, 0x3b01c6c1, 0xb10ffc00, 0x4b7ec001, -0x346c05d6, 0x16c407f0, 0x00000e60, 0x00000000, 0x020fa003, 0x03bc003b, -0x2cc083f0, 0xfc003700, 0xc647f803, 0x00fb003f, 0xcf300bcd, 0xb7000ed2, -0xf0008e00, 0x000fc00b, 0x00ccc033, 0x0fc06f30, 0x00000e00, 0x00000000, -0x80071801, 0x53740811, 0x90404570, 0x74801300, 0x0025d083, 0x62d103b3, -0xed900b44, 0x81002c40, 0xd0285400, 0x30344009, 0x81c420d1, 0x0f402d30, -0x00000c20, 0x00000000, 0x2023a011, 0x83140001, 0x224800d0, 0x34000902, -0x40245082, 0x22090433, 0x4c921804, 0x85202660, 0x50810600, 0x20354008, -0x02248005, 0x4f40cc90, 0x00000e80, 0x00000000, 0x08b5a003, 0x03740211, -0x16402450, 0x74061900, 0x4025d003, 0x00191437, 0x8d900144, 0xd1082460, -0xd0015481, 0x0034400d, 0x476500d5, 0x1f421d10, 0x00000620, 0x00000000, -0x40c7a886, 0x037c0011, 0xe6d029f0, 0x7c021b02, 0xc021f001, 0x10db8887, -0x0d300b4d, 0x970246c8, 0xf0094401, 0x0435801d, 0x056c00d7, 0x23e009a4, -0x00000e22, 0x00000000, 0x81498007, 0x03fc0077, 0x1dc00bf0, 0xfc003340, -0x8007f003, 0x00e7400f, 0x0f6003bc, 0xef002fc0, 0xf001fc00, 0x083dc02f, -0x01d800eb, 0x0fc20bf0, 0x00000602, 0x00000000, 0x01250802, 0x027c0a5f, -0x23c08d30, 0x7c001700, 0xc025f003, 0x42570091, 0x0c34085c, 0x9f0425c0, -0x308b6c02, 0x0136c009, 0x0b7c80df, 0x2bc00934, 0x00000420, 0x00000000, -0x0034a013, 0x02764057, 0x17400d12, 0x74001502, 0xc727d007, 0x00510456, -0x0d104144, 0xdf0020d0, 0x1483cc0b, 0x0130405c, 0x2f7402dd, 0x4f000914, -0x00000200, 0x00000000, 0x00922003, 0x2724000d, 0xa3420092, 0x34100408, -0x4054d003, 0xa0c1c031, 0x00101717, 0x8d028241, 0x10002408, 0x08c34018, -0x27740e0c, 0x1f420858, 0x00000a00, 0x00000000, 0x004a0800, 0x07f40125, -0x6b401690, 0xb4012504, 0x4016d007, 0x21c18178, 0x94100704, 0xad006842, -0x1000e481, 0x1059441a, 0x27b4a9e9, 0x3f403a50, 0x00000200, 0x00000000, -0x02121016, 0x0334080f, 0xa3c00834, 0x34880700, 0x6404d0c2, 0x00871031, -0x20300a1c, 0xcf0021d0, 0x34292c02, 0x0013c00c, 0x017c080f, 0x4bc00870, -0x00000040, 0x00000000, 0x101d8802, 0x23fc2837, 0x3fc80f70, 0xfc203f00, -0xc006f003, 0x00bf013f, 0x35f0237c, 0xf7022fc0, 0xf011dc40, 0x001ec00e, -0x01fc08ff, 0x1bc00bb0, 0x00000660, 0x00000000, 0x0037a010, 0x075c021f, -0x27c00130, 0x7c809720, 0xc001b885, 0x00d30027, 0x2935036c, 0xd70110c0, -0x3405cc00, 0x0017c01d, 0xcb4c00df, 0x47c40d34, 0x00000e00, 0x00000000, -0x00299912, 0x039c10ed, 0x0f480210, 0xf400a100, 0x40461003, 0x00e11023, -0x0c100384, 0xf1043850, 0x1019ec00, 0x001b400e, 0x038400ed, 0x4f400ef0, -0x00000624, 0x00000000, 0x00790004, 0x06b483ed, 0x6b403e58, 0xb401ad00, -0x40969007, 0x01c1007b, 0x1a900624, 0x64007c50, 0x12078601, 0x005b400e, -0x070400ed, 0x07401e90, 0x00000402, 0x00000000, 0x00330012, 0x021450cd, -0x33400c50, 0x3400c901, 0x448c1007, 0x08d100f3, 0x2c820304, 0x41003040, -0x10812407, 0x0053400c, 0x03041acd, 0x4b400cd4, 0x00000c20, 0x00000000, -0x009f8817, 0x155c015f, 0x1fc03756, 0xfc077f00, 0xc036b16d, 0x01514617, -0x04b0016c, 0x77011cc0, 0x3049cc05, 0x00dfc115, 0xc98c037f, 0x5fc005b8, -0x00000620, 0x00000000, 0x24058012, 0x005c020f, 0x87c901b0, 0x7c831700, -0xc011f000, 0x001f2007, 0x0170003d, 0x1f0007c9, 0xf2847c00, 0x0247c001, -0x407c000f, 0x4bc021f0, 0x00000c00, 0x00000000, 0x00e50810, 0x065c89d3, -0x20c018f0, 0x7c019300, 0xe049f002, 0x00930260, 0x5935024c, 0x8b0021d0, -0xf0024c04, 0x00e44008, 0x0a4c429f, 0x40c018b8, 0x00000c20, 0x00000000, -0x00262001, 0x266c1391, 0x24400970, 0x74329501, 0xc009d006, 0x00910026, -0x19500a54, 0x91002540, 0xd0027c72, 0x00246009, 0x0244009d, 0x06c42912, -0x00000800, 0x00000000, 0x0020a01c, 0x02440099, 0x244089c0, 0x74089180, -0x4009d006, 0x00b10025, 0x0b1006c4, 0x99002748, 0xd0024400, 0x20274009, -0x0244029d, 0x60446990, 0x00000200, 0x00000000, 0x42302814, 0x22254089, -0x205088d0, 0x342085c2, 0x4149d022, 0x16a1472b, 0xce105394, 0x89002341, -0xd00a1408, 0x20a04008, 0x0a45028d, 0x42408804, 0x00000080, 0x00000000, -0x0586b01d, 0x0814141b, 0x84c161f0, 0x7c001305, 0x4041f108, 0x04130185, -0x6322104c, 0x1b2817c0, 0xf0d04416, 0x2805c001, 0x004c800f, 0x74c161b5, -0x00000ac0, 0x00000000, 0x112fa919, 0x12dc0097, 0x2fc04b70, 0xfc00bf09, -0xc00bf012, 0x809f0126, 0x49f0527c, 0xb700adc4, 0xf002fc24, 0x002ec02b, -0x0afc22bf, 0x67c04bf4, 0x00000e64, 0x00000000, 0x062fa818, 0x227c00b7, -0xa7c809f0, 0xfc00b305, 0xc00af00a, 0x18970227, 0x4b3052cc, 0xbb002ce1, -0x7012e810, 0x0820c34b, 0x12cc00af, 0x64c06f30, 0x00000e00, 0x00000000, -0x8087081c, 0x00740a11, 0x8741e1d0, 0x74001b01, 0x40a5d010, 0x82050387, -0x21301854, 0x1b028464, 0x10086c00, 0x10044021, 0x08044017, 0x72c00110, -0x00000c22, 0x00000000, 0x01210012, 0x1236018d, 0x234008d0, 0x34008981, -0x4008d002, 0x848d0023, 0x0814c214, 0x81002061, 0x508a0410, 0x0d214008, -0x0a24148d, 0x48422810, 0x00000e80, 0x00000000, 0x00e52818, 0x02760199, -0x270229d0, 0x74019901, 0x4009d022, 0x008d4127, 0x09110254, 0xd8002442, -0x10426402, 0x0d255a09, 0x02240095, 0x62400d10, 0x00000620, 0x00000000, -0x0027a005, 0x2274039d, 0xa7c019f0, 0x74019b01, 0xc029f01a, 0x1b9d0027, -0x08326e5c, 0x9304a010, 0x700a4c23, 0x0065c009, 0x1269009f, 0x14c00934, -0x00000e20, 0x00000000, 0x00258012, 0x037c0097, 0x37c05df1, 0x7c009f00, -0xc099f002, 0x00970037, 0x0970027c, 0x8f0027c0, 0xf0963c04, 0x0076c039, -0x025c109f, 0x5bc208f8, 0x00000600, 0x00000000, 0x0e010010, 0x207c0417, -0x01c001f0, 0x7c001308, 0xc441f008, 0x20130000, 0x1130004c, 0x130006c8, -0x30a04c00, 0x2004c001, 0x084c0003, 0x50c01130, 0x00000420, 0x00000000, -0x001ca014, 0x0174127d, 0x154815d0, 0x74117502, 0x60079015, 0x00510414, -0x271001d4, 0x77001d40, 0x10016c22, 0x04140314, 0x15ec0275, 0x51402710, -0x00000200, 0x00000000, 0x0032a014, 0x0724018d, 0xb14004d0, 0x3411c900, -0x482cd203, 0x00c14050, 0x18140746, 0x85207150, 0x10070485, 0x2030401c, -0x07150241, 0x50480c10, 0x00000a00, 0x00000000, 0x00388001, 0x03b480ad, -0x184436d0, 0xb440ed04, 0x401e9203, 0x0ce10010, 0x68110994, 0x65041940, -0x1a03a402, 0x004c140e, 0x83b51065, 0x15400410, 0x00000200, 0x00000000, -0x00781011, 0x07bc81af, 0x5dc114f2, 0xbc01eb42, 0x401ed207, 0x21e30058, -0x7e34040c, 0xb7007140, 0x3807cc49, 0x2268801e, 0x079d11e3, 0x54c01234, -0x00000040, 0x00000000, 0x0035b810, 0x4a7c409f, 0x17c065f0, 0x7800d711, -0xd009b003, 0x14df0187, 0x0df0007c, 0x9f0035c0, 0xf4037c84, 0x0007c00c, -0x036d04df, 0x43c001f0, 0x00000660, 0x00000000, 0x027da800, 0x27cc09b3, -0x6fc01730, 0x8c09e324, 0xc61f3027, 0x01f300dd, 0x1f3007cc, 0xf7007ec0, -0x30078c01, 0x007dc0de, 0x12cc04ff, 0x08c41f30, 0x00000e00, 0x00000000, -0x041d1815, 0x03ac08a3, 0x0f4006b0, 0x84406704, 0x41063003, 0x28f1001a, -0x0f1800ac, 0xfb081941, 0x10139400, 0x001840ce, 0x828404bd, 0x554007b0, -0x00000620, 0x00000000, 0x10290000, 0x03843029, 0x0b400218, 0xc480f100, -0x402e1103, 0x00e9421b, 0x0e1400a4, 0xe5003340, 0x1203e410, 0x002960ce, -0x021442ed, 0x21408a90, 0x00000400, 0x00000000, 0x00412004, 0x03240109, -0xc3448091, 0x0600c504, 0x4010103b, 0x00c91002, 0x1c022424, 0x89003140, -0x90032420, 0x2491400c, 0x0214008d, 0x19400010, 0x00000c20, 0x00000000, -0x00752015, 0x024c0191, 0xbfc0053a, 0x4d01d300, 0xc41d300f, 0x00f90015, -0x17120364, 0x550032c0, 0x34a36c01, 0x0035c00d, 0x025c035f, 0x75c00190, -0x00000620, 0x00000000, 0x00b70001, 0x027c0697, 0x87c001f0, 0x7c01d700, -0xc00d7083, 0x00c70011, 0x05f0837c, 0x5f0107c0, 0x70035c02, 0x10564219, -0x856c81dd, 0x074029f0, 0x00000c00, 0x00000000, 0x801d0084, 0x23fc03bf, -0xdfc05730, 0xfc00ff08, 0xc00df803, 0x20f34017, 0x5e40000c, 0x63009dd0, -0xe00bcc00, 0x082dc01f, 0x078c00a3, 0x04d00380, 0x00000c20, 0x00000000, -0x04960085, 0x8264859d, 0x85c01140, 0x5e08dd00, 0x44097002, 0x00d90006, -0x0df00444, 0x1b0447c0, 0xd0074401, 0x1a164419, 0x0444419b, 0x24402054, -0x00000800, 0x00000000, 0x0034a001, 0x0224009d, 0x87400500, 0x6400dd28, -0x400dd007, 0x00d90107, 0x05500e45, 0xd1002741, 0xd0024401, 0x0033484d, -0x1a6403d1, 0x04408158, 0x00000200, 0x00000000, 0x88102810, 0x0224408d, -0x00420014, 0x14804900, 0x40045003, 0x00c90003, 0x04140204, 0xc9000250, -0xd0020400, 0x2002400c, 0x01258089, 0x40400854, 0x00000080, 0x00000000, -0x0006b000, 0x032c00dd, 0x07c00131, 0x74009d00, 0xc00dd003, 0x00f31007, -0x0552004c, 0xf38005c8, 0xf0024c00, 0x2025c00d, 0x036c80f3, 0x04c00174, -0x00000ac0, 0x00000000, 0x000f8805, 0x03ec00af, 0x0dc403f0, 0xfc00bf10, -0xc0037003, 0x00f3100e, 0x0ff880fe, 0xbf000dc0, 0xf002fc00, 0x000fc00f, -0x00dc00bf, 0x17c80b70, 0x00000e60, 0x00000000, 0x023f8003, 0x03ac00ff, -0x34c40fb0, 0xfc08f300, 0xc00c300b, 0x42eb003c, 0x0f700b7c, 0xf3003ed0, -0xf0237000, 0x00bfc02f, 0x73cc00fb, 0x0cd003b0, 0x00000e00, 0x00000000, -0x00071801, 0x004c201d, 0x06c80112, 0x34001b01, 0x44415000, 0x00150105, -0x01700074, 0x1520044c, 0xd0007484, 0x01074201, 0x0bc40011, 0x04420110, -0x00000c60, 0x00000000, 0x1133a011, 0x030414cd, 0x30420410, 0x3404c504, -0x430c1013, 0x04410411, 0x04509334, 0x41083040, 0xd0012410, 0x00334044, -0x13241441, 0x444005d0, 0x00000e80, 0x00000000, 0x00858007, 0x8064201d, -0x04428910, 0x74241541, 0x42215000, 0x00958025, 0x09d01874, 0x95080442, -0xd0027400, 0x00034049, 0x03250498, 0x0c428154, 0x00000600, 0x00000000, -0x00afa882, 0x21cc287f, 0x5c501f34, 0xfcd1f500, 0xc02b3021, 0x88f3402d, -0x0a720ffc, 0xb30a1cc0, 0xf002ec00, 0x24bf401f, 0x834c01fb, 0x08e001f0, -0x00000e22, 0x00000000, 0x001d8007, 0x869d01ae, 0x27c802f0, 0xb8003b00, -0xc006c006, 0x0137081f, 0x077284fc, 0x7f106fc0, 0xf001fc00, 0x420f4803, -0x03dc2037, 0x1fc001a0, 0x00000600, 0x00000000, 0x00a50802, 0x314c0053, -0x154005f0, 0x4c0ad300, 0xc0093001, 0x00530004, 0x41f0034c, 0x1f0016c0, -0x30805c00, 0x01b6c005, 0x035c185f, 0x09c481f1, 0x00000420, 0x00000000, -0x0014a013, 0x0e440191, 0x20600911, 0x6c001b00, 0x40051582, 0x609b0175, -0x2dc0806d, 0xdd202440, 0xf00b7405, 0x00044209, 0x07c5018d, 0x4c42b620, -0x00000200, 0x00000000, 0x40122003, 0x8e140085, 0x21440851, 0x24810900, -0x40045802, 0x80890036, 0x1cd00024, 0xcd002640, 0x104b1401, 0x00006208, -0x67040389, 0x0d403050, 0x00000800, 0x00000000, 0x0a620804, 0x05840141, -0x58445412, 0xa609c902, 0x405a1105, 0x2169104a, 0x12d007a4, 0x2d825841, -0x9014b401, 0x00784016, 0x0784896d, 0x10401214, 0x00000820, 0x00000000, -0x00121012, 0x021c1087, 0x61500050, 0x2c080301, 0xc4143006, 0x08094016, -0x45f2140c, 0x4d0062c0, 0x32955c00, 0x0700d051, 0x175c091f, 0x49c00470, -0x00000840, 0x00000000, 0x002da002, 0x01fc007f, 0x1fc04f70, 0x7428df20, -0xc00bf011, 0x00df122d, 0x0bf023cc, 0xbf021dc0, 0xf0027c00, 0x023de08f, -0x23fc01ff, 0x0bc007f0, 0x00000620, 0x00000000, 0x0047a014, 0x004d8117, -0x06c01934, 0x4c001340, 0xd001b000, 0x209f0024, 0x0932007c, 0x9f0007c0, -0xd2026d80, 0x00044a19, 0x4b49019f, 0x43404130, 0x00000e00, 0x00000000, -0x20399932, 0x030400f1, 0x30400610, 0x8400f108, 0x400c1003, 0xc061001c, -0x061003f0, 0x41003f40, 0xd0018400, 0x00384606, 0x1b84006f, 0x4b40e218, -0x00000664, 0x00000000, 0x40090000, 0x04a40125, 0x48401010, 0xa4812900, -0x40121c04, 0x0125004a, 0x12d00496, 0x25104b40, 0xd2848401, 0x20484012, -0x1704410d, 0x13481650, 0x00000400, 0x00000000, 0x08732036, 0x0b2490c1, -0xb0420c12, 0x2400d924, 0x401d9203, 0x40c50072, 0x1cd88334, 0xd1003340, -0xd0070401, 0x0030400c, 0x030420c5, 0x5b400c50, 0x00000c00, 0x00000000, -0x0017a817, 0x01648057, 0x14d00530, 0x65005b00, 0x4005b009, 0x00570016, -0x05f0017c, 0x550217c0, 0xf1014ca0, 0x0014c005, 0x0146007d, 0x5fc10570, -0x00000e20, 0x00000000, 0x220d8012, 0x40dc823f, 0x8dc003f2, 0xdc403700, -0xc0837a10, 0x0033120d, 0xa31200fc, 0x37000fc4, 0xf020dc08, 0x200ee003, -0x087c803f, 0x4bc021a0, 0x00000600, 0x00000000, 0x00210810, 0x023c0093, -0x27e00930, 0x6c019300, 0xc0093202, 0x00830a24, 0x0830020c, 0x930022c0, -0x30025c00, 0x0867c009, 0x827c009f, 0xc3c10d31, 0x00000420, 0x00000000, -0x00262001, 0x82748291, 0xe7000910, 0x140f9303, 0xc4091702, 0x009b9025, -0x2950025c, 0x9d082540, 0xa0024400, 0x00674009, 0x0a740097, 0x05c08900, -0x00000800, 0x00000000, 0x4024801c, 0x02f402b1, 0x2b400b10, 0xe600b100, -0x400b1882, 0x20b10028, 0xab1002c4, 0xb9102d40, 0x11029400, 0x022f400b, -0x421400bd, 0x73440d14, 0x00000200, 0x00000000, 0x00282814, 0x02b408a9, -0x2b402a10, 0x9408a100, 0x400a1802, 0x88a92229, 0x2a522294, 0xad002940, -0x80228480, 0x023b408a, 0x0a3409a1, 0x51414c14, 0x000000a0, 0x00000000, -0x0802b01d, 0x00740213, 0x07400114, 0x2c001342, 0xc2813080, 0x82114004, -0x0110084e, 0x131007c0, 0x3008540a, 0x0087c020, 0xd07c803f, 0x77c0e120, -0x00000ac0, 0x00000000, 0x04a7a119, 0x0a7c0697, 0xa7c069f0, 0x7c069f11, -0xc469f04a, 0x069f00a7, 0x29f01a5c, 0x9784e7c0, 0xf01a7c06, 0x11a7c069, -0x127c069f, 0x67c049f0, 0x00000e24, 0x00000000, 0x41efa018, 0x16ec05b3, -0x6dc63930, 0x4c01b301, 0xc0d9301e, 0x0393056c, 0x5900064c, 0xb30167c0, -0x3016cc05, 0x036cc079, 0x5aec03b3, 0x63c029f1, 0x00000e00, 0x00000000, -0x0087101c, 0x80440401, 0x05c0e1b0, 0x54821f00, 0x40005008, 0x001b0584, -0xa110503e, 0x15078740, 0x10004c14, 0x00044001, 0x184c0011, 0x734041f8, -0x00000c60, 0x00000000, 0x02210812, 0x0a051681, 0xa0400814, 0x05168105, -0x40681022, 0x86850020, 0x081e0a05, 0x81102340, 0x144a1702, 0x01a07068, -0x02050681, 0x4b4008d0, 0x00000400, 0x00000000, 0x2025a018, 0x02440091, -0x264a0990, 0x54009500, 0x40091002, 0x20990024, 0x09100254, 0x95002740, -0x10025400, 0x00244009, 0x02660091, 0x63401950, 0x00000400, 0x00000000, -0x00278805, 0x02440093, 0x24c30930, 0x4c009100, 0xc0093002, 0x129504a4, -0x29300244, 0x930027c1, 0x104a5c12, 0x00244129, 0x024c1293, 0x17c449d2, -0x00000e20, 0x00000000, 0x40258032, 0x021c008f, 0x25d00970, 0x3c108f00, -0xd008f402, 0x209f4023, 0x0df2023c, 0x8f0027c1, 0xf0020c00, 0x4023c008, -0x425c409b, 0x4bc00db0, 0x00000600, 0x00000000, 0x02010810, 0x004c2013, -0x00c00030, 0x4c001324, 0xc0017000, 0x02030084, 0xa138004e, 0x130000c4, -0x30084d02, 0x0007c421, 0x007c0603, 0x43c06134, 0x00000420, 0x00000000, -0x00548014, 0x05c50271, 0xdcc00530, 0xc40071a0, 0x60075001, 0x007f0014, -0x353801ec, 0x51301c40, 0xb16dec01, 0x201dc005, 0x05f41073, 0x53410530, -0x00000200, 0x00000000, 0x4032a014, 0x1d0486c9, 0x32500c90, 0x0409414a, -0x500cde03, 0xc0c14030, 0x3c900304, 0xc1c03050, 0x50032600, 0x0033680c, -0x0a3400c9, 0x53403090, 0x00000a00, 0x00000000, 0x40308001, 0x408420e9, -0x30400c12, 0x84006100, 0x408ed033, 0x04e51028, 0x54102380, 0xe1093048, -0xd2032630, 0x0039408e, 0x47b404e1, 0x07400a12, 0x00000620, 0x00000000, -0x00780011, 0x058c01eb, 0x4a405e94, 0x0d017100, 0x405ef117, 0x07f10060, -0x56901784, 0xf10178c4, 0x7207ac81, 0x007fc0de, 0x04fc03eb, 0x47c09e32, -0x00000040, 0x00000000, 0x08b5a810, 0x003800d3, 0x06c12d60, 0x78005f00, -0xc02d30db, 0x50df00b7, 0xc1f4137c, 0xdf0237c1, 0xb0037480, 0x0007402d, -0x036c005f, 0x43c42df5, 0x00000620, 0x00000000, 0x00eda000, 0x04fc01f3, -0x6cc11f30, 0xcc017f00, 0xc03f3007, 0x09f300fe, 0x11b00fec, 0xbb0275c4, -0x3113cc25, 0x0374c09f, 0x11cc01bf, 0x03c09b31, 0x00000600, 0x00000000, -0x06291815, 0x009c00e1, 0x28418f30, 0x144b6004, 0x490f1143, 0x01e50629, -0x52111394, 0xab067141, 0xb0159404, 0x0479420c, 0x2304000d, 0x57400e10, -0x00000460, 0x00000000, 0x40690000, 0x00340861, 0x28400e10, 0xa4806502, -0x408e5803, 0x60e50068, 0x405083a4, 0x81013a40, 0x1213264c, 0x103a480e, -0x230400ad, 0x03420e90, 0x00000408, 0x00000000, 0x00652004, 0x28148a40, -0x60401c90, 0x640a4119, 0x404c140b, 0x09c500b0, 0x30102b04, 0x8180f348, -0x1029300c, 0x008340ac, 0x0346008d, 0x93400c94, 0x00000400, 0x00000000, -0x40e5a815, 0x007c4a53, 0xd4c03f14, 0xed405500, 0xd03f100f, 0x20f340f4, -0xb77003ec, 0xd1107ec2, 0x10036c02, 0x0076400f, 0x034d45bd, 0x57c029b1, -0x00000620, 0x00000000, 0x21270001, 0x403c000f, 0x15c24d70, 0x5c104720, -0xc00cf013, 0x10db2125, 0x0410433c, 0x9f0431c0, 0xf8431c00, 0x0c31c10c, -0x826c109f, 0x07c13d70, 0x00000c00, 0x00000000, 0x402f0884, 0x00cc02fb, -0x6ec00fb0, 0xcc007300, 0x400f3003, 0x00eb402c, 0x133003cc, 0xeb003cc0, -0x3217ec01, 0x003cc00d, 0x03cc01b3, 0x10c00f30, 0x00000c22, 0x00000000, -0x02662085, 0x08440391, 0x66420d10, 0x54025b00, 0xc00d9403, 0x00db0037, -0x85b00344, 0x91003440, 0x90076c01, 0x0006c00d, 0x00450013, 0x15404d10, -0x00000802, 0x00000000, 0x40348001, 0x18640259, 0x30440c10, 0x46085102, -0x400d9003, 0x00d90031, 0x21900344, 0x91803440, 0xd0024408, 0x0034600d, -0x07442481, 0x04481894, 0x00000200, 0x00000000, 0x00302810, 0x02340001, -0x71500c14, 0x05444102, 0x400c9203, 0x04c91021, 0x40950b05, 0xc1413164, -0x97402620, 0xd132500c, 0x05042249, 0x41400898, 0x000000a0, 0x00000000, -0x403ab000, 0x0065005b, 0xa2c00f10, 0xcc01d100, 0x42af300b, 0x01eb0028, -0x11900bc4, 0x9312f4d0, 0x723e4c00, 0x9174c22f, 0x234c0083, 0x00c00db0, -0x00000ac0, 0x00000000, 0x003fa025, 0x02cc003f, 0x6ec00f38, 0xbc028f80, -0xc05f70d7, 0x02df003f, 0x23f087ac, 0xff00fac0, 0x60147c00, 0x020de15f, -0x07fc05f7, 0x17c20f70, 0x00000e20, 0x00000000, 0x020fb003, 0x59cc08af, -0x0ec04bf0, 0xec00b343, 0xc402b003, 0x00a7023e, 0x0b300acc, 0xff000ec1, -0x3002fc04, 0x4008c2cf, 0x33cc0cf3, 0x0cc00b30, 0x00000e00, 0x00000000, -0x00070003, 0x1344009c, 0x84494930, 0x95025302, 0x420df200, 0x2491203d, -0x25120344, 0x9d010448, 0x10024440, 0x000440cd, 0x331406c3, 0x0c400950, -0x00000c20, 0x00000000, 0x0033a013, 0x135444cd, 0x00546c5c, 0x4482dd10, -0x40005803, 0x30950132, 0x08101304, 0xcd040050, 0x50032482, 0x0003400c, -0x020408c1, 0x4c501110, 0x00000e80, 0x00000000, 0x0805a803, 0x075400dd, -0x05500c54, 0x4400d912, 0x420c5240, 0x00d10030, 0x04140344, 0x9d021740, -0x11037440, 0x0637401d, 0x025400d1, 0x0c401959, 0x00000620, 0x00000000, -0x0107a880, 0x045d019f, 0x04d09d70, 0x48c2cb00, 0x80055003, 0x00971036, -0x2d31074c, 0x5f0046c9, 0x54036c06, 0x00a6c00c, 0x23480093, 0x00c00830, -0x00000e22, 0x00000000, 0x001d8087, 0x02ec05bf, 0x5ec00fb0, 0xdc407300, -0xc00ff04b, 0x50bf0037, 0x0ff013fc, 0xef804c00, 0xe00bcc05, 0x006cc00f, -0x07fc40e7, 0x1fc009f0, 0x00000602, 0x00000000, 0x2035080a, 0x035d00df, -0x15c44ff0, 0x5c02d3c0, 0xc025340b, 0xa0930035, 0x0d20035c, 0x570836c0, -0xb4037c00, 0x0095c409, 0x034c0093, 0x28c80170, 0x00000420, 0x00000000, -0x0014a013, 0x030440dd, 0x94402d90, 0x0700f182, 0xc8bdb04b, 0x01c5003e, -0xafb00d04, 0xf10246c2, 0x10814480, 0x0074404d, 0x034400d5, 0x4ec00b10, -0x00000200, 0x00000000, 0x0002a007, 0x03240099, 0x456008d0, 0x04008102, -0x4808d403, 0x02810830, 0x08902714, 0xc5004340, 0x10924700, 0x4017410c, -0x037400c1, 0x1c4008d0, 0x00000a00, 0x00000000, 0x0468801d, 0x07b441bd, -0x58419e90, 0x8409f10a, 0x419ed027, 0x01a4007a, 0x1f920f80, 0xe1004a4a, -0x00278401, 0x005a421e, 0x27b400e5, 0x7e401a93, 0x00000200, 0x00000000, -0x00300012, 0x0b34088d, 0x15c089f0, 0x0402c102, 0xc008f203, 0x90830130, -0x0834035c, 0xd70406c0, 0x20435408, 0x2d23c00d, 0x023c88c3, 0x48c048f1, -0x00000040, 0x00000000, 0x302da802, 0x03cc00bf, 0x1e408fb0, 0xec90ef02, -0xc20fb28b, 0x00ff003e, 0x0ef0037c, 0xfa001ec0, 0x58035c52, 0x003d400f, -0x02cc04ff, 0x0bc00b70, 0x00000660, 0x00000000, 0x0007a015, 0x025c00df, -0x04c14904, 0x5d80c300, 0xc00c709f, 0x21832330, 0x0db0034c, 0xdf0484c4, -0x32067c00, 0x2034c00d, 0x03cc009b, 0x54c08830, 0x00000e00, 0x00000000, -0x00398913, 0x02b400e7, 0x1c440c30, 0xc405e102, 0x400e1003, 0x20a10538, -0x2e1003ec, 0xec000840, 0x1003dc04, 0x003ec00f, 0x03d400e5, 0x4c400e50, -0x00000624, 0x00000000, 0x00790081, 0x069661ed, 0x5a4d1a90, 0xa605e900, -0x523f5803, 0x01a1007a, 0x6f900785, 0xec207840, 0x9007b405, 0x1078400e, -0x06841189, 0x04405b10, 0x00000402, 0x00000000, 0x00332812, 0x033688cd, -0x12401c10, 0x0540c100, 0x400d183b, 0x00c12034, 0x1d508104, 0xcd005047, -0x9415340c, 0x00b0401c, 0x061401c5, 0x48408c53, 0x00000c20, 0x00000000, -0x001da817, 0x41dc015f, 0x16c005b0, 0xdc846b41, 0xc007700d, 0x00730014, -0x27b005c4, 0x4f00d4c0, 0x9001f400, 0x04580105, 0x4544405b, 0x5cd41610, -0x00000620, 0x00000000, 0x20070012, 0x007c8017, 0x05d00072, 0x1c001740, -0xe401f000, 0x401f5807, 0x01b0307c, 0x1f2607c0, 0x70205c00, 0x0107c401, -0x007d001f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x01270810, 0x027c0093, -0x34c80d70, 0x4c009700, 0xc0193026, 0x00931024, 0x19b0027a, 0xdf0034e0, -0xf0024c00, 0x1124c009, 0x023c0083, 0x40d00930, 0x00000c20, 0x00000000, -0x01e62001, 0x02740091, 0x24400918, 0x4d009b40, 0x5019300e, 0x089b0024, -0x19100236, 0x9d002454, 0xd1064400, 0x40a5c068, 0x027c0091, 0x04400911, -0x00000800, 0x00000000, 0x00208018, 0x02140091, 0x20600950, 0x64c095c0, -0x40ad1002, 0xc0952024, 0x49100274, 0x9d862450, 0xd0064400, 0x44244019, -0x02440091, 0x60440910, 0x00000200, 0x00000000, 0x62202010, 0x22360081, -0x20608850, 0x04148982, 0x40881023, 0x088d0120, 0x88100664, 0x9d022040, -0xd0230434, 0x40a34089, 0x02348081, 0x40408910, 0x00000080, 0x00000000, -0x0587b01d, 0x581c0011, 0x84d16150, 0x4c841705, 0xc0213058, 0x221702c4, -0x61342874, 0x1f208441, 0xf2584c8e, 0x0004e961, 0xf85c1e13, 0x74c02130, -0x00000ac0, 0x00000000, 0x012f9919, 0x12fc14bf, 0x27c049b1, 0xfc00bf41, -0x644b7012, 0x04bb0267, 0x4a7006fc, 0x9f0127d0, 0xd012f901, 0x00ade04b, -0x06fc01bf, 0x67c06bfe, 0x00000e64, 0x00000000, 0x2037a018, 0x0a7c8893, -0xa6816950, 0xd490b701, 0xe08b7092, 0x02a3132c, 0x0a300aec, 0x93002cc1, -0x7042cc00, 0x04ace06b, 0x524c1293, 0x64c06930, 0x00000e00, 0x00000000, -0x0287089c, 0x3d344010, 0xccc03110, 0x04025500, 0x40017000, 0x44114904, -0x2130805c, 0x01080540, 0x10814420, 0x00856461, 0x58542411, 0x72900458, -0x00000c22, 0x00000000, 0x0523a012, 0x02340481, 0x2a400a11, 0x5400850a, -0x6048905a, 0x00c100a0, 0x49901334, 0x88252041, 0x50422516, 0x00704028, -0x02340489, 0x48402810, 0x00000e80, 0x00000000, 0x21258818, 0x02340891, -0x2c400a10, 0x44089500, 0x02095202, 0x84912024, 0x09101270, 0x88042540, -0x10822400, 0x00654009, 0x82740099, 0x62480850, 0x00000620, 0x00000000, -0x44a52805, 0x2a7c0093, 0x66c08934, 0x5c039502, 0x5009b202, 0x81924024, -0x09b41e74, 0x9b00e0c4, 0x702a6420, 0x08e44009, 0x027c409b, 0x14e42911, -0x00000e20, 0x00000000, 0x20310016, 0x067e619f, 0x25c019f0, 0x7c008f00, -0xc0097042, 0x019f2023, 0x09f2065c, 0x970667c0, 0xf0065c00, 0x0027c039, -0x165c0087, 0x59c009f0, 0x00000600, 0x00000000, 0x88850814, 0x087c001f, -0x0cd00334, 0x5c001320, 0xc88170a0, 0x011f0007, 0x41f20c52, 0x1f208448, -0xf0406c00, 0x0004c001, 0x005c001f, 0x50c001b0, 0x00000420, 0x00000000, -0x81942014, 0x017c005d, 0x15400510, 0x84005300, 0xc217b201, 0x027d0015, -0x06d009cc, 0x5d005d40, 0xd209c400, 0x001fc116, 0x0144005d, 0x50400510, -0x00000200, 0x00000000, 0x14328014, 0x032440cd, 0x34600c11, 0x1488c180, -0x401d580f, 0x00c90823, 0x0cd00354, 0xcd008044, 0xd0072400, 0x0836420c, -0x035020cd, 0x50400c1a, 0x00000a00, 0x00000000, 0x00388004, 0x039604ed, -0x09600210, 0x8480c9c0, 0x44029080, 0x09ec212b, 0x06d010a4, 0xed80d848, -0xd0438400, 0x107b040e, 0x031408ed, 0x14404e10, 0x00000200, 0x00000000, -0x04581014, 0x07a443ed, 0x7c501f32, 0x9c81e300, 0xc0167405, 0x81ea056b, -0x1ef01594, 0xef0028c1, 0xf026ac01, 0x083a901e, 0x2f9c35ff, 0x54d15e34, -0x00000040, 0x00000000, 0x0095b810, 0x037c01df, 0x07d401f1, 0x6c00d740, -0xc921f001, 0x20df0225, 0x45f1205c, 0xde0037da, 0xd0137c0a, 0x0027c00c, -0x036c06db, 0x43c0ad70, 0x00000660, 0x00000000, 0x007fa002, 0x07cc21ff, -0x7fc01f30, 0xfc81bb00, 0xc01f300e, 0x01f7226c, 0x167006ec, 0xfb024cc0, -0x7004cc03, 0x013ec01e, 0x07cc01f3, 0x08c01ff0, 0x00000e00, 0x00000000, -0x04298815, 0x038840fc, 0x0b484210, 0x9c04a001, 0x4402f020, 0x00710029, -0x465000fc, 0xfd040940, 0xb002a408, 0x043ad00e, 0x839408f1, 0x54400fd0, -0x00000620, 0x00000000, 0x00190000, 0x038408ed, 0x33000e10, 0xb410a924, -0x40061001, 0x00ed9022, 0x27500084, 0xed001a42, 0x90222510, 0x0030400e, -0x038400e1, 0x60400ed0, 0x00000400, 0x00000000, 0x00c32806, 0x9f0440cd, -0x43409010, 0x14008100, 0x48a0d429, 0x01490823, 0x04500014, 0xcd00d340, -0x824a2427, 0x04a0040c, 0x031408c1, 0x1840bcd0, 0x00000c20, 0x00000000, -0x0075a815, 0x4d4d00ff, 0x77c00d34, 0x34839b10, 0xc03d3407, 0x10fe002e, -0x05740ac4, 0xff1012c0, 0x30024d01, 0x0024501d, 0x83cc01f2, 0x74c21fd8, -0x00000620, 0x00000000, 0x00330001, 0x017c00df, 0x07c000f0, 0x7c009f00, -0xc041f410, 0xc0d70021, 0x15f00c7c, 0xdf0415e0, 0xb0055c40, 0x0027ca3d, -0x037c00df, 0x07c90df1, 0x00000c00, 0x00000000, 0x044f0880, 0x01bc00fb, -0x3cc00f30, 0x7c14a300, 0xd097b000, 0x80fb002c, 0x023040dc, 0xfb100cc4, -0xf002fc00, 0x0008000e, 0x039c00f3, 0x04c00f30, 0x00000c20, 0x00000000, -0x03062001, 0x09f400d5, 0x0c500351, 0x54019700, 0x40005004, 0x40cb0024, -0xb1b22415, 0xd1463441, 0xd00f7400, 0x00c6c015, 0x035480db, 0x04440d50, -0x00000800, 0x00000000, 0x00168001, 0x097400d1, 0x30400d10, 0x64009140, -0x400d100e, 0x21d9a024, 0x05104044, 0xd1000750, 0xd20c7400, 0x00f5403d, -0x035400c9, 0x04420c11, 0x00000200, 0x00000000, 0x00000010, 0x013400c5, -0x00520050, 0x44008140, 0x40015002, 0x00590020, 0x04100104, 0xc1800748, -0xd0003400, 0x00334008, 0x031440c8, 0x40400c40, 0x00000080, 0x00000000, -0x00061000, 0x013c00d3, 0x34c80d14, 0xfc009140, 0xc403b000, 0x00db002c, -0x03100054, 0xfb0017c0, 0xe002fc00, 0x0015c00d, 0x03dc00fb, 0x04c00f38, -0x00000ac0, 0x00000000, 0x000fb805, 0x81fc40ff, 0x0fc003f0, 0xfc40be08, -0xc002f000, 0x003e202f, 0x03f001fc, 0xff001cd2, 0xf202fc00, 0x000ec007, -0x03fc00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x402f8003, 0x43fc00bb, -0x3cd08f30, 0xec80f200, 0xc02b9003, 0x20e7213f, 0x0d30038c, 0xff003bc4, -0xf003dc20, 0x013dc08f, 0x004c081b, 0x0dc80fb0, 0x00000e00, 0x00000000, -0x04a70001, 0x0bc400db, 0xb4440db0, 0x7420d141, 0x400d0203, 0x00d1023f, -0x0d900344, 0xfd0d3640, 0xd073ed20, 0x06b4446f, 0x00440411, 0x04410f10, -0x00000c20, 0x00000000, 0x01b7a011, 0x031400c5, 0xb2505cdc, 0x4400c10c, -0x4044da07, 0x20d10032, 0x0c508754, 0xcd007140, 0xd0031402, 0x0831482c, -0x00140089, 0x46404851, 0x00000e80, 0x00000000, 0x0405a803, 0x834401d1, -0x76401d14, 0x7020d100, 0x491d5007, 0x06d04037, 0xadc00744, 0xd9007742, -0xd18364a0, 0x0224400d, 0x00550891, 0x0e400910, 0x00000620, 0x00000000, -0x00a3a802, 0x033c1151, 0x76c001d0, 0x2c02d308, 0xc01db883, 0x82c72033, -0x1d74031c, 0xdf0037c0, 0xf1035c00, 0x0075ca0d, 0x1154011a, 0x02c009e4, -0x00000e20, 0x00000000, 0x002d8007, 0x03dc00ef, 0x3dd001f0, 0xfc05ff00, -0xc00f3003, 0x01ff003f, 0x1f3003cd, 0xff083ec0, 0xf003fc00, 0x0063c00f, -0x81ac019f, 0x1dd00bf0, 0x00000602, 0x00000000, 0x00f50802, 0x137c04df, -0x14c008b0, 0x5c12d310, 0xc02df4c3, 0x06d34337, 0x0db0435c, 0xd34037c9, -0x30035ca8, 0x4034c00d, 0x214d0093, 0x08c00df0, 0x00000420, 0x00000000, -0x0014a013, 0x43f683d1, 0x75441b14, 0x4c23d100, 0xc20d000f, 0x83d100fe, -0x0d10034c, 0xe30837c0, 0xb283c400, 0x0826c00f, 0x015c0091, 0x4c420c30, -0x00000200, 0x00000000, 0x1022a007, 0x0f3400c9, 0x34500098, 0x040bcd10, -0x420c18af, 0x03cd00b3, 0x8c54a326, 0xc9003360, 0x10033410, 0x0030420d, -0x16240055, 0x1c404c11, 0x00000a00, 0x00000000, 0x02c88004, 0xa73401e1, -0xe840b210, 0xc705fd00, 0x401f1117, 0x05e90072, 0x5e502795, 0xe1007900, -0x8027a429, 0x006a401c, 0x26940965, 0x18409c51, 0x00000200, 0x00000000, -0x02340012, 0x033410cf, 0x244108b0, 0x0487cf06, 0xc04c5017, 0x11cd0133, -0x1c70a314, 0xd8013340, 0x30037c00, 0x0030c00c, 0x164c05c7, 0x48c00870, -0x00000040, 0x00000000, 0x0a2db802, 0x03fc00ff, 0x37c20b70, 0xae10e308, -0xc00c500b, 0x00f3003d, 0x0d306b6c, 0xff24bfc1, 0xf0435c00, 0x0037c00f, -0x02fd28fa, 0x0bc02bb0, 0x00000660, 0x00000000, 0x0027a815, 0x137c00d3, -0x24448d30, 0x3c12dc10, 0xc40db027, 0x03cb41f2, 0x2d301b0c, 0xdb0037c5, -0x70534c46, 0x2035a41d, 0x4f4c4053, 0x54c069b0, 0x00000e00, 0x00000000, -0x10018812, 0x53f400e1, 0x38400c90, 0x9e04ef00, 0x400f0213, 0x10e112b8, -0x4e100384, 0xe5013f40, 0x10138412, 0x1838414e, 0x03c420e1, 0x4ac00a10, -0x00000620, 0x00000000, 0x00790003, 0x37b401e1, 0x48505e95, 0xb485ed00, -0x401e5507, 0x79e1017d, 0x7ed40fa5, 0xc508fb62, 0x58070585, 0x0879409e, -0x07a401e9, 0x0c521cdc, 0x00000402, 0x00000000, 0x20372012, 0x03740fc1, -0x34400d90, 0x3400c511, 0x40bc5003, 0x00c10031, 0x3cd10f16, 0xc5007340, -0x10030400, 0x0030400c, 0x232410c9, 0x4a401c50, 0x00000c20, 0x00000000, -0x445da017, 0x01740271, 0x1cc00711, 0xfc1b3d20, 0x5017706c, 0x0333201d, -0x03f200ac, 0x5b008fc0, 0x70014c00, 0x0455c005, 0x056c005b, 0x5cc055f0, -0x00000620, 0x00000000, 0x40070012, 0x087c001f, 0x07c01170, 0x5c001f00, -0x4441b200, 0x00171004, 0x41209060, 0x1f000740, 0xf0007c00, 0x4007c001, -0x005c2007, 0x49e020a0, 0x00000c00, 0x00000000, 0x00270010, 0x227c029f, -0x25c00934, 0x5c021b00, 0xd009b208, 0x14170926, 0x8132206c, 0x960404c0, -0x30026c00, 0x0022c009, 0x024c0097, 0x41c019d0, 0x00000c20, 0x00000000, -0x40262801, 0x8e740391, 0xa4400910, 0x5c031102, 0x4009d00c, 0x071701e4, -0x20100874, 0x89000040, 0x10024401, 0x00274e09, 0x4a540091, 0x144189d0, -0x00000800, 0x00000000, 0x0064a018, 0x02740091, 0xa4508910, 0x54001900, -0x4008d008, 0x80150824, 0x01184074, 0x99200441, 0x10022488, 0x00264009, -0x22e40095, 0x70400992, 0x00000200, 0x00000000, 0x02602010, 0x122410c1, -0x2040d811, 0x1408c144, 0x6048d022, 0x08850a20, 0x88102274, 0xcd022050, -0x14220406, 0x85224088, 0x32a50ca1, 0xc05068d2, 0x00000080, 0x00000000, -0x0c06b01d, 0x317c0017, 0x05d14111, 0x5c161b00, 0xc041b058, 0x96170584, -0x6134586c, 0x174584c1, 0x10586c04, 0x0102c340, 0x50ec4607, 0x65d051f0, -0x000008c0, 0x00000000, 0x002f9019, 0x327c00b7, 0x2fc24bf4, 0xfc04bf04, -0xc12bf012, 0x04bf0127, 0x4ff012fc, 0x93012fc0, 0xf0127c02, 0x042fc009, -0x125c2c9f, 0x67c46bf0, 0x00000ce0, 0x00000000, 0x00afa818, 0x229c00bb, -0xbc450fb0, 0xdc0da704, 0xc509d036, 0x13bd00af, 0x1bd046ec, 0xb32c60c1, -0xf0325c04, 0x00a6c409, 0x129c009f, 0x64e06b30, 0x00000e00, 0x00000000, -0x4087081c, 0x00440211, 0x94404010, 0x440f5840, 0xc821d13d, 0x871d03c5, -0x11900444, 0x150d1400, 0xd0004402, 0x02845040, 0x086c0e19, 0x604061b0, -0x00000c22, 0x00000000, 0x40e3a030, 0x1a340395, 0x23450811, 0x14008d01, -0x41485a02, 0x409d0022, 0x49c24224, 0x85082045, 0xd01a161c, 0x00204128, -0x5a04108d, 0x41406894, 0x00000e80, 0x00000000, 0x1025a018, 0x02640099, -0x264a0910, 0x44a81909, 0x0009d980, 0x461d8005, 0x01900044, 0xd5222070, -0xd0024440, 0x02244009, 0x02450298, 0x60400990, 0x00000620, 0x00000000, -0x00278005, 0x0274029b, 0x24c10934, 0x5c030700, 0xc139f004, 0x231e0007, -0x00c21c6c, 0x9600e4c2, 0xf0025c80, 0x0066c009, 0x0244009f, 0x055099b4, -0x00000e20, 0x00000000, 0x12658014, 0x021c0397, 0x21d80970, 0x7c011740, -0xc849f020, 0x411f0005, 0x31b0506c, 0x9b4067c0, 0xf0027c40, 0x0027c009, -0x027c008f, 0x43c018f0, 0x00000600, 0x00000000, 0x00050014, 0x407e801f, -0x84c02174, 0x4c421301, 0x4021f898, 0x221f0205, 0x21f0007c, 0x170887c4, -0x30804c08, 0x0005c001, 0x902c0013, 0x53c10130, 0x00000420, 0x00000000, -0x029ca814, 0x1df4016d, 0x1cc00651, 0xc6423104, 0xc0056214, 0x1b2d200c, -0x73700cf4, 0x60201fc0, 0x10014401, 0x00144005, 0x09cc0071, 0x53400710, -0x00000200, 0x00000000, 0x0016a014, 0x013405c9, 0xe0601c50, 0x0412c900, -0x440c1003, 0xc0cd04f3, 0x7cd00320, 0xc9203340, 0x90032541, 0x0830480d, -0x050440c5, 0xd3440c10, 0x00000a00, 0x00000000, 0x04188005, 0x03b402ed, -0x28414a10, 0x8410f900, 0x009c1213, 0x00ed0239, 0x0ed043b4, 0xed013d40, -0x9407a484, 0x4178408e, 0x098400e5, 0x17400615, 0x00000200, 0x00000000, -0x00581011, 0x05b401ed, 0x7cd05e71, 0x8427e940, 0xc81e7107, 0x05ef037b, -0xfef007bc, 0x4f417b40, 0xb0272c05, 0x41fdc15e, 0x058d8dc7, 0x57801a30, -0x00000040, 0x00000000, 0x0015b010, 0x017c60df, 0x36d489f4, 0x7d34d300, -0x410d512b, 0x60db00b6, 0x2d703b74, 0x9322b7c0, 0x700b5c48, 0x05b7f20d, -0x007c06da, 0x43c009f0, 0x00000660, 0x00000000, 0x005fa800, 0x05f041ff, -0x6ec0cb41, 0x7c21fb20, 0xc05fb0af, 0x1bf3027c, 0x1ef10ffc, 0xa300f1c0, -0xf067df01, 0x407cc01f, 0x13cc11f3, 0x08c89734, 0x00000e00, 0x00000000, -0x10198811, 0x19b400ef, 0x68c24a10, 0x3400c917, 0xc1dfd097, 0x08c1003a, -0x5e6087b8, 0xeb017840, 0xd0078c04, 0x0079400e, 0x018404e3, 0x56c00614, -0x00000620, 0x00000000, 0x00990000, 0x01b400ed, 0x99440b50, 0xb408e181, -0x6c0ed003, 0x58e9303a, 0x4fd003a4, 0x25023d40, 0xd013b600, 0x2038400e, -0x018420ed, 0x00420290, 0x00000400, 0x00000000, 0x00332800, 0x017613c5, -0x30400c10, 0x3444c920, 0x503cd1c3, 0x00c90030, 0x3c500714, 0x8d80f102, -0xd2030420, 0x0031400c, 0x010420c0, 0x1a460090, 0x00000c20, 0x00000000, -0x0055a031, 0x017401dd, 0xf0c40f50, 0x7c84c308, 0x002f9003, 0x03d96032, -0x1cd01b74, 0xf74e3dc1, 0xd103f400, 0x003c400f, 0x014c08ff, 0x74a009b1, -0x00000620, 0x00000000, 0x00530001, 0x087c0a9f, 0x27c001f0, 0x7c02d700, -0xc04df02b, 0x20d70037, 0x0de08374, 0x51003681, 0xf0037c80, 0x0237c00d, -0x897c00cf, 0x07e00170, 0x00000c00, 0x00000000, 0x001f0080, 0x254c00f3, -0x3dc006b4, 0xec00fb40, 0xc80ff003, 0x10f34034, 0x0ff3c3fc, 0x7f003cd0, -0xe003ec00, 0x003de00d, 0x258c00ff, 0x04d82a32, 0x00000c20, 0x00000000, -0x00162085, 0x014410c1, 0x76402990, 0x0403d108, 0xc80d904b, 0x00d10034, -0x0dd10374, 0x0d003448, 0xd0035c20, 0x0037440d, 0x055420dd, 0x84400954, -0x00000802, 0x00000000, 0x0054a001, 0x014404d9, 0x66522910, 0x74b4d900, -0x480c9223, 0x21d18874, 0x1d580754, 0x99003640, 0xd1036580, 0x0035400d, -0x094500dd, 0x04480194, 0x00000200, 0x00000000, 0x00102014, 0x810400c1, -0x26400010, 0x1408c189, 0x430cd0c3, 0x41c10070, 0x5cd89734, 0x4d013244, -0xd0031400, 0x0033000c, 0x011402cd, 0x400000d0, 0x00000080, 0x00000000, -0x0016b000, 0x014500d3, 0x55c001b0, 0x7c02db04, 0x501ff21f, 0x02d31034, -0xddf0175c, 0x1e207ec0, 0xf117ee00, 0x1179c00f, 0x214c02ff, 0x04c000b0, -0x00000ac0, 0x00000000, 0x002fb805, 0x01fc007f, 0x31c00ef4, 0xec41ff40, -0xc00d3057, 0x15ff803d, 0x3df0a37c, 0x3f123dc0, 0xf0235c00, 0x00b7c00f, -0x85bc45ef, 0x17c00373, 0x00000e60, 0x00000000, 0x000fa003, 0x00fc103b, -0x1f440330, 0xcd043300, 0xc0c33220, 0x00fb4438, 0x8f3703dc, 0xfb003fc0, -0x35a3cd00, 0x001cc083, 0x22c804f7, 0x0cc16f30, 0x00000e00, 0x00000000, -0x00070801, 0x02740013, 0x97400d10, 0x4408d102, 0x40c1541b, 0x00d100bd, -0x41100144, 0xd5002744, 0x30004400, 0x2b946009, 0x125408d1, 0x04402d52, -0x00000c20, 0x00000000, 0x4203a011, 0x00301001, 0x11400410, 0x14800108, -0x40405120, 0x00558000, 0x4c100214, 0x05101340, 0x12030400, 0x44125800, -0x822400c9, 0x44604c52, 0x00000e80, 0x00000000, 0x28158803, 0x1a7400d9, -0x17404d10, 0x5400d104, 0x66155003, 0x00558405, 0x05100244, 0x10041640, -0x10020400, 0x08026000, 0x027600d9, 0x0c410550, 0x00000620, 0x00000000, -0x0c478802, 0x017c0013, 0x9fc01d34, 0xdc003340, 0xc0017000, 0x454f0264, -0x2130425c, 0x9b1087c1, 0x301f4c00, 0x00164801, 0x026c40f9, 0x08d0a971, -0x00000e20, 0x00000000, 0x017d8007, 0x03bc03b7, 0x1fc01ff0, 0xac00ff08, -0x8003f003, 0x095b006b, 0x03f0203c, 0xa7000bc0, 0x70117c88, 0x101dc003, -0x0a9c00c3, 0x1fc01bf0, 0x00000600, 0x00000000, 0x01810802, 0x017c005f, -0x90c00df0, 0x4d000720, 0xc4041020, 0x015f4007, 0xa5302244, 0x970094c4, -0x70434c02, 0x4114c081, 0x025c00db, 0x0bc020f1, 0x00000420, 0x00000000, -0x20b48013, 0x037405dd, 0x16c02d70, 0x4000db04, 0x4a05502b, 0x40710027, -0x05b02a6c, 0x91005442, 0x100344a5, 0x00ec5001, 0x126c40f3, 0x4f4011d0, -0x00000200, 0x00000000, 0x0002a007, 0x1836120d, 0x70506cd0, 0x340f0500, -0x4090c500, 0x00800033, 0x1c100904, 0x41007040, 0x10080400, 0x00134130, -0x023412c0, 0x1f441098, 0x00000a00, 0x00000000, 0x02488004, 0x05b4016d, -0x78401f50, 0xa409c100, 0x40169027, 0x09e1207b, 0x181005a4, 0x41066850, -0x10248409, 0x04594052, 0x87a401e1, 0x134012d2, 0x00000200, 0x00000000, -0x00101012, 0x003c000f, 0x34482cf0, 0x3c000500, 0xc080f020, 0x08830023, -0x0c13030c, 0x43023040, 0x34220d08, 0x0017c201, 0x023c00c3, 0x4bc108e9, -0x00000040, 0x00000000, 0x009db802, 0x01fc00ff, 0x3e800ef0, 0x9c00ff02, -0xc08771a3, 0x08d70047, 0x0ff623fc, 0x7b023bc0, 0xf0a2fc28, 0x040cc063, -0x03dc10ff, 0x0bc08bf0, 0x00000660, 0x00000000, 0x40f7a015, 0x027c0453, -0x37c00d30, 0x4d001300, 0xc0453480, 0x099f0137, 0x09f0014c, 0xd30024c8, -0x30194c01, 0x00169021, 0x02ee01d3, 0x54c05530, 0x00000e00, 0x00000000, -0x803d8812, 0x03b408e1, 0x33400e10, 0x2c00c180, 0x40861003, 0x00cd043b, -0x08d00184, 0xe5002050, 0x1021c480, 0x015a4203, 0x02c605e1, 0x48410412, -0x00000620, 0x00000000, 0x00f90003, 0x06f40169, 0x79411e14, 0x94012100, -0x44169004, 0x05ad007b, 0x1ed007a6, 0xe900f860, 0x98879411, 0x00104012, -0x868401e1, 0x0c401e94, 0x00000400, 0x00000000, 0x00732812, 0x07340dc9, -0x37401c12, 0x2400c100, 0x40849003, 0x04cd00b3, 0x3cd02726, 0xcd007040, -0x9c275402, 0x01244020, 0x224500c1, 0x4840ac12, 0x00000c20, 0x00000000, -0x0055a817, 0x4dfc035b, 0x17c02630, 0x5c005348, 0xc405b001, 0x005f045f, -0x45f00165, 0x5b409442, 0xb0015d00, 0x209ec424, 0x056c0053, 0x5cd01530, -0x00000620, 0x00000000, 0x20070012, 0x403cc217, 0x87c011f3, 0xf4002f00, -0xc0017008, 0x001f0183, 0x01f0001e, 0x136007c1, 0x70006490, 0x0007c101, -0x007c001f, 0x4bc101f0, 0x00000c00, 0x00000000, 0x04370810, 0x027c01df, -0x25c09934, 0x4c019302, 0xc21db202, 0x00930227, 0x0830927c, 0x9b0420c0, -0x32867c05, 0x0264c22d, 0x027c0093, 0x43c00d30, 0x00000c20, 0x00000000, -0x00260001, 0x02740c9d, 0xa7e02910, 0x04099504, 0x4019104a, 0x009110e7, -0x09120e4c, 0x91002440, 0x10227401, 0x00244009, 0x02740291, 0x07400951, -0x00000800, 0x00000000, 0x8124a018, 0x0274409d, 0x24510912, 0xc400b120, -0x40899006, 0x019140a7, 0x0b1442d4, 0xf1022e40, 0x1c0af400, 0x4024400d, -0x02740391, 0x63400914, 0x00000200, 0x00000000, 0x82202010, 0x0234088d, -0x20400910, 0x8500e502, 0x40881922, 0x08810523, 0x0a1402a4, 0xa1c02850, -0x1422b400, 0x02204489, 0x22344081, 0x43408810, 0x00000080, 0x00000000, -0x0586b01d, 0x503c161f, 0x85440130, 0xcc141335, 0xc161b058, 0x16130107, -0x4130505c, 0x1b0506e1, 0x3058fc14, 0x0584d021, 0x587c0013, 0x77c16130, -0x00000ac0, 0x00000000, 0x0127b819, 0x02fc049f, 0x27c00bd0, 0x7c809f01, -0xc049f012, 0x04bf052f, 0x49f0024e, 0x8f2027c1, 0xf2127c00, 0x012fc049, -0x12fc028f, 0x67c049f0, 0x00000e60, 0x00000000, 0x022fa018, 0x027c1c9f, -0x2dc809f0, 0xcc009302, 0xc029315a, 0x0033052f, 0xcb70c2bc, 0x9c202cd0, -0x11527c14, 0x0124d029, 0x52cc01bb, 0x60c06b30, 0x00000e00, 0x00000000, -0x0287081c, 0x2874800d, 0x04c003d0, 0x44003101, 0x40605018, 0x01110187, -0xe110086c, 0x5d028440, 0x11197e82, 0x019cc040, 0x18040211, 0x70400110, -0x00000c20, 0x00000000, 0x0123a010, 0x02b6448d, 0xa9400bd0, 0x2402a100, -0x40281012, 0x02c50423, 0x08100214, 0x8d102048, 0x5442b400, 0x462a401a, -0x420402c1, 0x40422810, 0x00000e80, 0x00000000, 0x2025a818, 0x0374809d, -0x36400bd0, 0x6400b100, 0x40494802, 0x40950427, 0x49500a44, 0x9c012440, -0x50021400, 0x2028400a, 0x02040091, 0x60400910, 0x00000620, 0x00000000, -0x00678805, 0x027c1a9f, 0x25c088d0, 0x6d009320, 0xc4190402, 0x06974067, -0x09340255, 0x9d0124c0, 0x700a7402, 0x0066c809, 0x024d009b, 0x14d0693c, -0x00000e20, 0x00000000, 0x22658014, 0x027c00df, 0x25c019f0, 0x5c208f40, -0xc00df002, 0xe01b0167, 0x08b0123c, 0xdf0027c0, 0xb0027c04, 0x0265c109, -0x027c008f, 0x53c009f8, 0x00000600, 0x00000000, 0x00050814, 0x004c0a1f, -0x03c101f1, 0x3c041302, 0xc001b000, 0x02030980, 0x0110007c, 0x170004c0, -0x34087c02, 0x0484d001, 0x00480113, 0x50840130, 0x00000420, 0x00000000, -0x11dca014, 0x0146015d, 0x54c125c0, 0xf4115500, 0xc005b009, 0x001b00de, -0x551035f4, 0x5d015440, 0x10017401, 0x00145025, 0x01440071, 0x50400510, -0x00000200, 0x00000000, 0x01f2a014, 0x012481cd, 0x536010d0, 0x36000100, -0x4004543f, 0x00c90230, 0x1c100634, 0xcd007044, 0x10473409, 0x0230600c, -0x03040041, 0x50401d90, 0x00000a00, 0x00000000, 0x00388005, 0x03a401ed, -0x08400ad0, 0x3400e500, 0x4036d021, 0x00e9003e, 0x081001a4, 0xed003840, -0x1041a400, 0x000c600e, 0x0284a061, 0x14402e94, 0x00000200, 0x00000000, -0x00781015, 0x05a501ed, 0x73c81ed0, 0xbc81e344, 0xc0967417, 0x05eb0058, -0x1e3106bc, 0xaf0078c0, 0x30073c01, 0x4078c81a, 0x078c0123, 0x54d01fb4, -0x00000040, 0x00000000, 0x0035b810, 0x035c021f, 0x26440df1, 0x7c009f40, -0x0821b005, 0x00df1013, 0x09f4837c, 0xdf0837d0, 0xf0037c02, 0x0093c40d, -0x5a7d000f, 0x43c00d70, 0x00000660, 0x00000000, 0x027fa000, 0xa5fc0bff, -0x5dc09ef0, 0xdc81f301, 0xc0173107, 0x99e3006f, 0x1b1206cc, 0xff006cc0, -0x3206cc03, 0x02fcc417, 0x07fc0133, 0x00c01b30, 0x00000e00, 0x00000000, -0x02198815, 0x63b40ced, 0x18800ed0, 0xac006141, 0x4006b041, 0x30e1412b, -0x4e1403bc, 0xef003850, 0x10128400, 0x0338404f, 0x22b408a1, 0x54400ab0, -0x00000620, 0x00000000, 0x22290000, 0x01b600ed, 0x270807d3, 0x0400e103, -0x40061003, 0x00e1201b, 0x08100224, 0xed003844, 0x91030408, 0x003e6402, -0x07b400a1, 0x00400810, 0x00000400, 0x00000000, 0x10c22804, 0x0b34060d, -0x20413cd0, 0x640dc110, 0x40101015, 0x00c10417, 0x2d100b12, 0xc5023040, -0x906f0400, 0x01f2404d, 0x06740081, 0x10502890, 0x00000c20, 0x00000000, -0x0345a815, 0x077c025f, 0x37482df0, 0xdc82d320, 0xc455160f, 0x00c30037, -0x6d300324, 0xdd003440, 0xb4074d00, 0x41f2c02d, 0x167c0053, 0x54c0ad30, -0x00000620, 0x00000000, 0x00070001, 0x017c084f, 0xa5c085f0, 0x7c00df00, -0xc005f009, 0x40df00b7, 0x0df0037c, 0xcf0037c0, 0x70017c00, 0x00a5c42d, -0x037c005f, 0x07c00874, 0x00000c00, 0x00000000, 0x30cf0880, 0x43cc0873, -0x5fc04ff0, 0xcc804300, 0xc097a003, 0x00f70067, 0x8f3043ec, 0xdf007cc1, -0x30038d01, 0x003cc05f, 0x22fc0033, 0x00c00f30, 0x00000c22, 0x00000000, -0x00c62081, 0x01442311, 0xc7411dd0, 0x440fd500, 0x4011b029, 0x01d10027, -0x1d100e55, 0xdd007452, 0x50034401, 0x41b5424d, 0x03740115, 0x05400910, -0x00000802, 0x00000000, 0x00b0a001, 0x03441011, 0x334009d0, 0x44009122, -0x4001d00b, 0x84d52627, 0x0d106344, 0xd5293640, 0x18234428, 0x0034420d, -0x02740851, 0x04404910, 0x00000200, 0x00000000, 0x00102010, 0x01050001, -0x33400890, 0x0500c500, 0x4000d001, 0x00c50023, 0x0c100304, 0xcd803000, -0x19030400, 0x0034400c, 0x032400c1, 0x41400c14, 0x00000080, 0x00000000, -0x0026b000, 0x034c0011, 0x1fc00df0, 0x4d00d300, 0xc001f001, 0x40d70007, -0x0d30034c, 0xdf003680, 0x34034c00, 0x0034c00d, 0x02bc0093, 0x00c00930, -0x00000ac0, 0x00000000, 0x000fb805, 0x01fc003f, 0x1fc007f0, 0xfc003f00, -0xc203a000, 0x00fb000f, 0x0ff003fc, 0xff003fc0, 0xf003fc00, 0x003bc00f, -0x03fc00bf, 0x17c00ff0, 0x00000e60, 0x00000000, 0x113ba003, 0xa3ac0023, -0x3ec08fb0, 0x7c003f00, 0xc04ff080, 0x44f9203e, 0x0f9013ec, 0xbf011fc0, -0xf012ec00, 0x013ec04f, 0x03cc00ff, 0x0cc00fb0, 0x00000e00, 0x00000000, -0x03370801, 0x1bf40411, 0x30c0ef10, 0x44004d00, 0x402e1080, 0x0af1203c, -0x2f500bcc, 0x41021040, 0x10090402, 0x25bc40af, 0x035400dd, 0x04400c10, -0x00000c20, 0x00000000, 0x0433a031, 0x0b341001, 0x32400cd0, 0x24400500, -0x408c9001, 0x00c92032, 0x2cd10b24, 0x09103240, 0x920a2488, 0x08b2480c, -0x034401cd, 0x44414d90, 0x00000e80, 0x00000000, 0x0075a803, 0x03760011, -0x74400d10, 0x44905d10, 0x400d12c1, 0x00d18835, 0x0d500344, 0xd1003442, -0x10014400, 0x8036400d, 0x035401dd, 0x0c401d11, 0x00000620, 0x00000000, -0x0147a802, 0x037c0111, 0x36c00df0, 0x68021700, 0xc40db008, 0x80db0036, -0x0db1036c, 0x3b101ec8, 0xb002ec02, 0x1036c20d, 0x070c00dd, 0x08d01db0, -0x00000e20, 0x00000000, 0x00098007, 0x03fc05bf, 0x2fc00db0, 0x4c00ff00, -0xe00fb080, 0x40ff043e, 0x0fb043fc, 0xfb001ec4, 0xb001fc00, 0x083dc00f, -0x4bfc70ff, 0x1fc00ff0, 0x00000600, 0x00000000, 0x00250802, 0x137d001f, -0x24c00d70, 0x5c821703, 0xc90d3049, 0x00d30235, 0x0d30036c, 0x1d0036c0, -0x70127c00, 0x1334c00d, 0x035c00db, 0x09c20d72, 0x00000420, 0x00000000, -0xc0b4a013, 0x83d409d1, 0xe5400e12, 0x4401d120, 0x682fb009, 0x85f120bc, -0x1f101be4, 0xd500b442, 0x10494c03, 0x00fc50bf, 0x1f4403c8, 0x4c400c92, -0x00000200, 0x00000000, 0x2232a007, 0xa7742305, 0xb0400c50, 0x54109580, -0x443d110a, 0x93d10035, 0x2d100b44, 0x15015445, 0x400a5410, 0x00b0400d, -0x031403c1, 0x1d400cd0, 0x00000a00, 0x00000000, 0x2af88004, 0x07a40131, -0x79401e12, 0x942de111, 0x405e91c6, 0x01f1007c, 0x5f1027c4, 0xe1105862, -0x10058421, 0x0038421c, 0x27c43df1, 0x10401e90, 0x00000200, 0x00000000, -0x02301012, 0x033d1005, 0x30c20c70, 0x1c1c8700, 0x435c3017, 0x00c32831, -0x1c30a72e, 0x070630c1, 0x70021c10, 0x0374c1cc, 0x0b1c0ccb, 0x49c00c70, -0x00000040, 0x00000000, 0x4a3db802, 0x03dc0037, 0x3fc10ff0, 0xec0cfd21, -0xc00ff013, 0x18e7063b, 0x0ef203bc, 0xf70035c0, 0xe025fc80, 0x13b7c18f, -0x033c2ecf, 0x0bc80f70, 0x00000660, 0x00000000, 0x10272015, 0x135c0013, -0x31426d70, 0x4c009300, 0x80cd1212, 0xc4db0132, 0xed70436c, 0x1b2016c0, -0x33024d01, 0x00f7c44d, 0x2f0c08d3, 0x57040d32, 0x00000e00, 0x00000000, -0x00290812, 0x4bb400a0, 0x2ac14c10, 0x1420c100, 0x410ce042, 0x14c51438, -0x0e100b8d, 0xc9001849, 0xb0010c20, 0x1933414e, 0x538504eb, 0x4a402e50, -0x00000620, 0x00000000, 0x28610003, 0x07343120, 0x7f401ed0, 0xa441a908, -0x445e9087, 0x85e1217e, 0x5ed10704, 0x2d007b44, 0xd806a401, 0x0279405e, -0x578491e9, 0x0f401e12, 0x00000400, 0x00000000, 0x10632812, 0x03340181, -0x20400c90, 0x3412c900, 0x400c1003, 0x00c50030, 0x0c910304, 0xcd003240, -0xd0010400, 0x0033400c, 0x030400c9, 0x4a401d50, 0x00000c20, 0x00000000, -0x415d8817, 0x017c0361, 0x5f4005f0, 0x6d025b84, 0xc0058401, 0x4073001e, -0x06f201c8, 0x5f0017c0, 0xf001ec02, 0x801dc007, 0x00cc0039, 0x5fc50330, -0x00000620, 0x00000000, 0x00470012, 0x083c011f, 0x87c80170, 0x5c000740, -0xc820f000, 0x40170885, 0x2172085c, 0x3b0085c8, 0xb100fe24, 0x1087c800, -0x887c4217, 0x4ac801f0, 0x00000c00, 0x00000000, 0x00230810, 0x066c0193, -0x65c01930, 0x0c009351, 0xc2395002, 0x248710e2, 0x0936020c, 0x9f0064c2, -0x12023c00, 0x20249809, 0x405c101f, 0x40c001f0, 0x00000c20, 0x00000000, -0x08262001, 0x46440a91, 0x2040a834, 0x6c1b9300, 0x4019706e, 0x07914024, -0x0930424c, 0x9d1626d0, 0x30027600, 0x14244809, 0x6c4c1307, 0x06c00170, -0x00000800, 0x00000000, 0x00648018, 0x12642291, 0x25400919, 0xd4009984, -0x40099002, 0x00958026, 0x49101254, 0xfd202440, 0xd01af406, 0x01244269, -0x0054041d, 0x604409d2, 0x00000200, 0x00000000, 0x08202010, 0x42040891, -0xa444c818, 0xb606a100, 0x406c150a, 0x228000b0, 0x6d100a05, 0xa900a040, -0x540ab442, 0x02204228, 0x2204089d, 0x42408843, 0x00000080, 0x00000000, -0x4386b01d, 0x286c0211, 0x05404530, 0xd4241900, 0xc1413010, 0x10150006, -0x4010404c, 0x1d000440, 0xf000f480, 0x0504c841, 0x585c161e, 0x74c161e0, -0x00000ac0, 0x00000000, 0x432f9819, 0x127c04bf, 0x2f8889d0, 0x64029f08, -0xc409f222, 0x009f20a7, 0x89700270, 0x9f00a7c0, 0xb00a7c02, 0x11278289, -0x12dc04a6, 0x67c04bf0, 0x00000e60, 0x00000000, 0x01afa018, 0x42ec02b3, -0x27c14b30, 0x4c009f00, 0xc0c97132, 0x169b0424, 0x49709a4c, 0x9c2165c8, -0x301e5c07, 0x08a4c089, 0x1ebc01b3, 0x62c199e0, 0x00000e00, 0x00000000, -0x0117081c, 0x08450411, 0x04406111, 0x140c1709, 0x44215000, 0x46010100, -0xe1301804, 0x19039450, 0xb0287e0a, 0x014c4000, 0x14741515, 0x704021d0, -0x00000c20, 0x00000000, 0x01a3a010, 0x52040085, 0x29030850, 0x8490ad04, -0x40ca1832, 0x04a96428, 0x0a503284, 0xad042851, 0x12028400, 0x81af486a, -0x1a34028d, 0x424049d0, 0x00000e80, 0x00000000, 0x0025a818, 0x03440091, -0x24400952, 0xd420fd00, 0x400b5012, 0x40b1002c, 0x0b9103d4, 0xb9102c40, -0x9002f450, 0xc02f400b, 0x0074801d, 0x604009d0, 0x00000620, 0x00000000, -0x42a7a805, 0x02440093, 0x65400944, 0x4c809d02, 0x50097002, 0x009b0024, -0x09700245, 0x9d00a4c0, 0x10024402, 0x2027d009, 0x6c7c041b, 0x16c018f0, -0x00000e20, 0x00000000, 0x00618014, 0x021c059f, 0x25c009b0, 0x7c208700, -0xc008f002, 0x408f8027, 0x0930826c, 0x9b0826ce, 0xf4022c80, 0x2824c008, -0x007c4413, 0x53c089f0, 0x00000600, 0x00000000, 0x40840814, 0x04741013, -0x0ce441b1, 0xbc003300, 0xc0037010, 0x0037290b, 0x427a00b8, 0x23418cc0, -0x3000fc18, 0x000dc083, 0xc87c0013, 0x52c00130, 0x00000420, 0x00000000, -0x221ca014, 0x09f41171, 0x16512713, 0x74095110, 0x45855041, 0x095100d7, -0x0510094c, 0x5100d551, 0x12057402, 0x005008a5, 0x44f40a33, 0x50420510, -0x00000200, 0x00000000, 0x0072a014, 0x013402d1, 0x3b401dd0, 0xb422e100, -0x403ed00f, 0x43e500fb, 0x3e504b94, 0xe1007a48, 0x144bb621, 0x0039401e, -0x0334c1cd, 0x50400c90, 0x00000a00, 0x00000000, 0x00988005, 0x13b400e1, -0x7f4c8c50, 0xb422e140, 0x400ed203, 0x70e1043b, 0x0c1003b4, 0xe1047a40, -0x1243b600, 0x00b0400e, 0x17b406e5, 0x14488f90, 0x00000200, 0x00000000, -0x407c1015, 0x0d3c0163, 0x78405ef0, 0xbe41e300, 0xc01ef107, 0x01e7007b, -0x1e52079c, 0xe20072c0, 0x34073c01, 0x3079c01e, 0x5fbc13ee, 0x54905eb0, -0x00000040, 0x00000000, 0x0805b810, 0x057c009f, 0x00000d20, 0x7c001f10, -0xc0012000, 0x001f0007, 0x01f00140, 0x1f0805c0, 0xf0007c00, 0x004fc001, -0x837cc6db, 0x41c46c77, 0x00000660, 0x00000000, 0x026ba000, 0x05fc01b3, -0x7fc01730, 0xcc09fb00, 0xc21f3207, 0x05db007f, 0x1eb007bc, 0xf3007cc0, -0x3027d401, 0x0278c0de, 0x27fc81f3, 0x00c03ef0, 0x00000e00, 0x00000000, -0x37298835, 0x01f40020, 0x3f408610, 0x9408e102, 0x400c5023, 0xa5ed013b, -0x1c109334, 0xeb0938c8, 0xb073ac82, 0x2870408e, 0x0fb405e1, 0x54404ed0, -0x00000620, 0x00000000, 0x082d0000, 0x01b41060, 0x3a400e10, 0x0600e900, -0x408e9003, 0x24e9203b, 0x0f1303e4, 0xe1103240, 0x13030400, 0x007c444f, -0x53b414ed, 0x00680fd3, 0x00000400, 0x00000000, 0x10372804, 0x01340301, -0x03400c10, 0x14010102, 0x4000d000, 0x800d0003, 0x00100134, 0x09000040, -0x90082405, 0xa8004000, 0x0f3423cd, 0x10420cd0, 0x00000c20, 0x00000000, -0x0075a815, 0x01fc22d3, 0x76c00f34, 0x4419db00, 0x420d9203, 0x00db0037, -0x0d10027c, 0xd10036c0, 0x320f4c13, 0x0038c40d, 0x037c80dd, 0x54d31ff0, -0x00000620, 0x00000000, 0x10b70001, 0x887c00df, 0x17c02cf0, 0x7c42df00, -0xc02d700b, 0x00cf08b7, 0x0d720274, 0xdf0037c8, 0xf2137c00, 0x0037c00d, -0x0b7c00d3, 0x07c00df1, 0x00000c00, 0x00000000, 0x803f0880, 0x04cc1073, -0x2dc03ff0, 0x8e01c300, 0xc09e7023, 0x09ff203e, 0x0ef202c8, 0xcc08bc18, -0x3007ac01, 0x093cc00e, 0x57fc31f1, 0x03c00ff0, 0x00000c22, 0x00000000, -0x04f62081, 0x24440091, 0x30405dd0, 0x44021106, 0x4061b1c0, 0x061d0245, -0x01d02444, 0x1d000442, 0xb0404401, 0x004450e1, 0x0b7442d1, 0x07400dd0, -0x00000802, 0x00000000, 0x4074a001, 0x01448089, 0x376409d0, 0x64081108, -0x40011080, 0x001d0406, 0x61d28054, 0x1d088540, 0x12104404, 0x68264801, -0x037406d5, 0x07440dd0, 0x00000200, 0x00000000, 0x00302010, 0x80040009, -0x166008d0, 0x04000140, 0x4000da08, 0x000d0001, 0x00d32015, 0x0d000141, -0x90000420, 0x80264000, 0x033400c5, 0xc3480cd0, 0x00000080, 0x00000000, -0x0036b000, 0x004c0059, 0x25c00df0, 0x6d001300, 0xc8817008, 0x011d0006, -0xf1f80858, 0x1f0005c0, 0x30006d00, 0x02668001, 0x877c01d7, 0x03c00ff0, -0x00000ac0, 0x00000000, 0x003fb805, 0x00fc0037, 0x3dc00fd0, 0xfc00ff00, -0xe81fb817, 0x08ff083e, 0x1df006ec, 0xff803ec2, 0xf003fc00, 0x0255c80f, -0x237c08db, 0x17c20ff0, 0x00000e60, 0x00000000, 0x000f8003, 0x03ec20f3, -0x3cc00eb0, 0xfc043300, 0xc002f002, 0x0433023e, 0x0f3203cc, 0xff0038c0, -0xf000ec08, 0x007cc01f, 0x17cc01e3, 0x0cc00f30, 0x00000e00, 0x00000000, -0x00070001, 0x03c400e1, 0x34400d90, 0x748a1100, 0x4061d003, 0x0011023c, -0x0f10eb45, 0xfd003441, 0xd0084506, 0x009440a9, 0x21440211, 0x04482f10, -0x00000c20, 0x00000000, 0x0003a011, 0x031400c9, 0x32400016, 0x34000d00, -0x4120d103, 0x08052021, 0x4c910314, 0xcd002160, 0xd0080408, 0x02304208, -0x060408c1, 0x44502c10, 0x00000e80, 0x00000000, 0x0005a803, 0x475500c9, -0x36400590, 0x74015d00, 0x4009d007, 0x00150025, 0x0d900254, 0xdd00a540, -0xd0084600, 0x44045105, 0x04440251, 0x0c400d90, 0x00000620, 0x00000000, -0x04c7a802, 0x0f7c20db, 0x36c12db0, 0x7c201f40, 0xc101f003, 0x0517007d, -0x0db4035c, 0xdf0255d0, 0xf0006c40, 0x0024d005, 0x034c09d3, 0x08c40d30, -0x00000e20, 0x00000000, 0x10c58007, 0x024c10f7, 0x7dc85f70, 0xf4007301, -0xd20bf383, 0x054b9278, 0x0e7027ec, 0xef003ed0, 0xf011fc00, 0x027bc249, -0x02bd21ef, 0x1f000d76, 0x00000600, 0x00000000, 0x00b10802, 0x0b6d00d3, -0x24c089b0, 0x4d001f00, 0xc125f003, 0x08d30024, 0x0df0024c, 0xd301e4c0, -0x300a6c08, 0x0084c040, 0x014c0053, 0x08c00df0, 0x00000420, 0x00000000, -0x0034a013, 0x2f4402f1, 0xb440ad10, 0x6c2b5d0b, 0x002cd013, 0x01d00424, -0x1fd02a40, 0xfb006444, 0x1003450a, 0x02844055, 0x28441111, 0x4c400fd0, -0x00000200, 0x00000000, 0x0032a007, 0x034488c9, 0x34401d91, 0x04000d00, -0x4800d013, 0x01090060, 0xbcd00744, 0xc100a241, 0x90040401, 0x08b04008, -0x030401c1, 0x1c400dd2, 0x00000a00, 0x00000000, 0x00788804, 0x078401e9, -0x78405f18, 0xa4112d00, 0x5012d027, 0x01691060, 0x1cd10784, 0xc9086a40, -0x92008409, 0x0070501a, 0x068401a1, 0x10400ed1, 0x00000200, 0x00000000, -0x40000012, 0x410c04cb, 0x30c00cb0, 0x0d005f20, 0xc048d003, 0x00cb0830, -0x0cf2720d, 0xc30032c0, 0xb0624e20, 0x0000c000, 0x010c0003, 0x48c08cf0, -0x00000040, 0x00000000, 0x000da802, 0x2bde00f7, 0x3fc04ff0, 0xfe027f00, -0xc00bf00b, 0x00d70277, 0x8ff022fc, 0xff001dc1, 0x7012dc02, 0x401fc08b, -0x00fc003f, 0x0bc04ff0, 0x00000660, 0x00000000, 0x0077a015, 0x137c04d7, -0x34c00c30, 0x3c005f00, 0xc0083003, 0x01130124, 0x0df0034c, 0xdf0024c0, -0x30004d0a, 0x0034c009, 0x437c0092, 0x57c04df0, 0x00000e00, 0x00000000, -0x20398812, 0x038412f1, 0x38400e90, 0xb4006720, 0x400ab003, 0x00214428, -0xced003ac, 0xcd002844, 0xb001ec24, 0x40084002, 0x01b44021, 0x4b410ed0, -0x00000620, 0x00000000, 0x00790003, 0x059405e5, 0x78401f90, 0xb4016d00, -0x481e1807, 0x01818070, 0x5cd00684, 0xed007940, 0x900f8461, 0x00684012, -0x06b401e1, 0x0f409ed0, 0x00000400, 0x00000000, 0x02b32812, 0x071400c1, -0x30400c90, 0x3401450a, 0x409c9003, 0x0b810030, 0x0dd02766, 0xcd019540, -0x90072500, 0x01c84002, 0x00b40321, 0x4b400cd0, 0x00000c20, 0x00000000, -0x001da817, 0x41fd0057, 0x54d02734, 0x7c005f00, 0xd0373001, 0x00734014, -0x05f0014c, 0x5f009dd0, 0xb00dcc00, 0x0154d025, 0x017e1253, 0x5fc005f0, -0x00000620, 0x00000000, 0x24070012, 0x006c001f, 0x07c00170, 0x7c081f08, -0xc011f008, 0x041f0003, 0x21f0087c, 0x1f008680, 0xf2047c00, 0x0007c101, -0x047c101f, 0x4bc801f0, 0x00000c00, 0x00000000, 0x00270810, 0x024c009f, -0x244109f0, 0x4c00d100, 0xc0083413, 0x00934024, 0x8932027c, 0x834026c0, -0x70060c00, 0x0020d009, 0x023c0093, 0x43c00930, 0x00000c20, 0x00000000, -0x08262001, 0x0244009d, 0x24500915, 0x05009140, 0xc0b91002, 0x08910025, -0x29120a74, 0x9100e445, 0x10064508, 0x00a44108, 0x0a740091, 0x07400914, -0x00000800, 0x00000000, 0x0024a018, 0x0204008d, 0x21400812, 0x44208500, -0x40091002, 0x00910026, 0x09900274, 0x91006640, 0xd0124400, 0x00ac4009, -0x0af408b1, 0x63400910, 0x00000200, 0x00000000, 0x02202010, 0x2204088d, -0x21408898, 0x06088502, 0x40881003, 0x00816221, 0x88957234, 0x8100a040, -0x9022040c, 0x0028400a, 0x02b400a1, 0x43404810, 0x00000080, 0x00000000, -0x0582301d, 0x5804021f, 0x85c22170, 0x4c161700, 0xc1653000, 0x14130586, -0x61b0197c, 0x130016c1, 0xf2584c03, 0x4004c401, 0x80fc0013, 0x77c0b130, -0x00000ac0, 0x00000000, 0x012db819, 0x92fd069f, 0x2ec04b70, 0x7c049b01, -0xc04bf202, 0x80bf012f, 0x497012fc, 0x9f002fc0, 0x7212fc0c, 0x00a3c028, -0x0a7c029f, 0x67c099f0, 0x00000e60, 0x00000000, 0x0027a018, 0x527c109f, -0x20c209b0, 0xfc049b0a, 0xc10bb003, 0x04b300ef, 0x6b7042cc, 0xbf002cc0, -0xf002fc04, 0x0024c00b, 0x034c0093, 0x60c0c930, 0x00000e00, 0x00000000, -0x22c7081c, 0x0d64431d, 0x44411012, 0x741f3100, 0x40211000, 0x001100c7, -0x01100844, 0x070006c0, 0xd0007440, 0x40044001, 0x00448011, 0x70400114, -0x00000c20, 0x00000000, 0x0423a010, 0x42d650ad, 0x2b420a10, 0x3404a100, -0x41489002, 0x038101a3, 0x28d05224, 0x8d056048, 0xd04a3402, 0x00204008, -0x82058081, 0x42406810, 0x00000e80, 0x00000000, 0x08258818, 0x02f600bd, -0x2f426a14, 0x7600b101, 0x40099202, 0x40910127, 0x09960264, 0x95006640, -0xd0027400, 0x04244009, 0x02441091, 0x62400810, 0x00000620, 0x00000000, -0x01e7a805, 0x0e5c209f, 0x27c00930, 0x3c099340, 0xc1a9b006, 0x83934027, -0x08f4262c, 0x9f0024c0, 0xd0127c00, 0x02e4d139, 0x464c0a93, 0x16500930, -0x00000e20, 0x00000000, 0x3d650014, 0x0a4c009f, 0x64d00971, 0x7c019f00, -0xc0097026, 0x059f0027, 0x0970025c, 0x9f0027c0, 0xf00e7c00, 0x0477c088, -0x137c00cf, 0x51c009f0, 0x00000600, 0x00000000, 0x30850814, 0x08fc002f, -0x0cc82334, 0x4c003340, 0xc0813000, 0x00030003, 0x1130004d, 0x1f0a44d0, -0xb0284c10, 0x4000c021, 0x100c0013, 0x50c00130, 0x00000420, 0x00000000, -0x00942014, 0x0134005d, 0x14100518, 0xc4005300, 0x40075001, 0x01730017, -0x271001c4, 0x7d009c50, 0x30054600, 0x08944427, 0x09440051, 0x50c00510, -0x00000200, 0x00000000, 0x00b2a014, 0x031480cd, 0x34400c12, 0x2400c500, -0x401c1005, 0x00890073, 0x0c104e04, 0xcd003248, 0x90061401, 0x00304938, -0x00060081, 0x50400c14, 0x00000a00, 0x00000000, 0x00388005, 0x00b4402d, -0x0c400210, 0xa4012108, 0x40065009, 0x11e100bb, 0x4e100e84, 0xad023a40, -0x9006c403, 0x00304028, 0x028402e0, 0x16404e10, 0x00000200, 0x00000000, -0x00781015, 0x07dc41ef, 0x78c01e10, 0xad01c720, 0xc0163006, 0x00c94073, -0x3c3402cc, 0xef007ad0, 0xb1069501, 0x0078c012, 0x060c01c3, 0x54d05f30, -0x00000040, 0x00000000, 0x0035b810, 0x807c001f, 0x07c001f0, 0x1ca01700, -0xc005f000, 0x20df0036, 0x1df0027c, 0xdb1035c0, 0x70023c00, 0x01b7d009, -0x1a7d06df, 0x41c16df0, 0x00000660, 0x00000000, 0x005fa000, 0x87dc01f3, -0x7cc01f70, 0x8c81f300, 0xc09f7004, 0x01f3007c, 0x1f3007cc, 0x3f007cc0, -0xf007cc01, 0x21bcc01b, 0x0ccc03f7, 0x00c11ff0, 0x00000e00, 0x00000000, -0x02198815, 0x40840021, 0x08400334, 0x84002100, 0x40273011, 0x10a34128, -0x2fb141c4, 0xed000840, 0xd022ac04, 0x02b8420a, 0x628408ed, 0x56c00ed0, -0x00000620, 0x00000000, 0x00190000, 0x231400c1, 0x38418e50, 0xb400e906, -0x48025002, 0x00a18038, 0x06d00184, 0x2d003940, 0xd002a400, 0x04384008, -0x028400e5, 0x00400cd0, 0x00000400, 0x00000000, 0x88132804, 0x1c140001, -0x00480110, 0x34410900, 0x41001020, 0x00892024, 0x04d20504, 0x8d008140, -0xd8262480, 0x00f04208, 0x0a040acd, 0x12400cd0, 0x00000c20, 0x00000000, -0x4035a815, 0x0b5c80d3, 0x74d00d70, 0x3d10db40, 0xe2247005, 0x00938824, -0x0ff2024c, 0xcf003dd0, 0xf0070c00, 0x0074c1b0, 0x0c4d00d7, 0x54c00ff0, -0x00000620, 0x00000000, 0x00370001, 0x006c001f, 0x07c40170, 0x4c001720, -0xe0057001, 0x20d78027, 0x2ca0037c, 0x1f00b640, 0xf0037c00, 0x24b3d025, -0x107c30cf, 0x07c00df0, 0x00000c00, 0x00000000, 0x003f0880, 0x038c00e3, -0x3cc00fb0, 0xf400ff00, 0xc8333306, 0x00f34224, 0x5f30028c, 0xbf040ec0, -0x300fec00, 0x003cc083, 0x00cc00db, 0x00c00e30, 0x00000c22, 0x00000000, -0x003e2081, 0x00d40031, 0x0c500310, 0x74003900, 0x500110a0, 0x80c1002c, -0x29500744, 0x1d000440, 0x50075c00, 0x00b54135, 0x080009d0, 0x06c00d10, -0x00000802, 0x00000000, 0x4010a001, 0x036400d1, 0x34400d90, 0x7400dd90, -0x40051001, 0x00d90024, 0x0d120754, 0x1d00f440, 0x10034406, 0x00344005, -0x084400d1, 0x04400d10, 0x00000200, 0x00000000, 0x00102010, 0x00340001, -0x00480010, 0x74000980, 0x40051101, 0x00894030, 0x04500104, 0x4d000050, -0x5a035400, 0x40314004, 0x020500c1, 0x42400c14, 0x00000080, 0x00000000, -0x0012b000, 0x034c00d3, 0x30c00db0, 0x7c00cf00, 0x40013002, 0x009b0024, -0x0532015c, 0x5f0004d0, 0x30034400, 0x2034c005, 0x024c00d3, 0x00c00f30, -0x00000ac0, 0x00000000, 0x001fb805, 0x00dc203f, 0x0fc203f0, 0xfc003f00, -0xc203f100, 0x00a7203f, 0x0bf001fc, 0x6f000fc0, 0xf003fc00, 0x001fc007, -0x02fc00f7, 0x17c00ff0, 0x00000e60, 0x00000000, 0x003f8003, 0x5bcc1033, -0x2cc04f70, 0xdc003701, 0xc203f013, 0x40eb023e, 0x0e7183c4, 0x331038c0, -0x9023ec08, 0x083ce40f, 0x03dc00ef, 0x0fc00ff1, 0x00000e00, 0x00000000, -0x00330001, 0x0bc40601, 0xb4416e10, 0xe8001b02, 0x4001d00b, 0x0a510134, -0x0d100344, 0x1109bd48, 0xd09b9404, 0x2034500d, 0x034422fd, 0x07414c10, -0x00000c20, 0x00000000, 0x0537a011, 0x120410c5, 0x10408c51, 0x04000500, -0x4000d223, 0x80490133, 0x1cd20704, 0x8904b042, 0xd00b0400, 0x0871401c, -0x036408dd, 0x47401c90, 0x00000e80, 0x00000000, 0x0065a803, 0x02041815, -0x34400d10, 0x45801500, 0x4081d003, 0x08512034, 0x1d980744, 0x99203542, -0xd0035408, 0x0075401d, 0x036100dd, 0x0f401d12, 0x00000620, 0x00000000, -0x0033a802, 0x074d0317, 0x44d00d50, 0x44039502, 0xc731f003, 0x115b2037, -0x0cf0034d, 0x5b403444, 0xf0034442, 0x0035400c, 0x6f2e00df, 0x03c00db2, -0x00000e20, 0x00000000, 0x402d8027, 0x27fc013b, 0x5bc00ef0, 0xec09bb00, -0xc406f083, 0x11bf003f, 0x0f7003fc, 0x77203bc8, 0xf003dc01, 0x003ec00f, -0x03cca0ff, 0x1fc00fb0, 0x00000602, 0x00000000, 0x02350802, 0x024d02c7, -0xb4d00d34, 0x5c085f00, 0xc1013023, 0x0a5f0034, 0x8d71235c, 0xd3103644, -0x32035c02, 0x0037c8cd, 0xc34c00d3, 0x08c40d70, 0x00000420, 0x00000000, -0x0064a013, 0x02440a11, 0x3c400f10, 0xfc0a7108, 0xc05b102b, 0x021d013e, -0xad102b04, 0xb1003c40, 0x1003ec00, 0x00f7463d, 0x0f4507e1, 0x4ec20d10, -0x00000200, 0x00000000, 0x0072a007, 0x82240005, 0x22400c90, 0x04015500, -0x401c1007, 0x039d21f4, 0x1cd00714, 0x11003248, 0x10031460, 0x4433442c, -0x231404c9, 0x1c400c50, 0x00000a00, 0x00000000, 0x00788004, 0x262401e1, -0x7e481e12, 0xe6057188, 0x54181027, 0x013d0078, 0x1fd007c4, 0x31027842, -0x14079401, 0x127f401e, 0x078409e9, 0x1a401e10, 0x00000200, 0x00000000, -0x02300012, 0x232400c7, 0x92c04cb0, 0x0c028700, 0x400c3203, 0x008e0030, -0xcce0031c, 0x034032c0, 0x30031002, 0x0573c00c, 0x231c00ca, 0x48c00c71, -0x00000040, 0x00000000, 0x002db802, 0x27cc08ff, 0xb9c02ff0, 0x3c24a700, -0xc187f4c3, 0x00bf003e, 0xaf2023bc, 0xaf38b7c0, 0xf003ec08, 0x003bc02d, -0x433c00d7, 0x0bc0aff0, 0x00000660, 0x00000000, 0x0037a015, 0x126c001f, -0x75c03d70, 0x481cd300, 0x450db113, 0x00572034, 0x6d70137c, 0x1328b7c4, -0x32136c00, 0x0977c88d, 0x134c10c3, 0x54c0adf0, 0x00000e00, 0x00000000, -0x00398812, 0x220400ed, 0x78404f10, 0x0404f101, 0x404e1233, 0x00a100bd, -0x4e1133bc, 0x23013f40, 0x505ba440, 0x04bb404e, 0x238502e3, 0x48400fd0, -0x00000600, 0x00000000, 0x00790003, 0x078401cd, 0x79409e50, 0xa505e903, -0x021e9007, 0x03e51178, 0xbe5077a4, 0xb9427b40, 0x50179418, 0x407e411e, -0x17a401f1, 0x0e405ed0, 0x00000402, 0x00000000, 0x00632812, 0x030400dd, -0x31400c10, 0x2482c970, 0x409d9003, 0x01810030, 0x0c900314, 0x81003340, -0x50031401, 0x0033403c, 0x032440c1, 0x4a401cd0, 0x00000c20, 0x00000000, -0x0015a817, 0x014dc07f, 0x55c40575, 0xec015b03, 0xd885b001, 0x0275101c, -0x037000f4, 0x790817c0, 0x70017c03, 0x060fc033, 0x60e00073, 0x5ed183d2, -0x00000620, 0x00000000, 0x12070012, 0x005c001f, 0x06c001f4, 0x5c0c1780, -0xc0017200, 0x411f0087, 0x4173007c, 0x170007c8, 0xf2006c01, 0x0087c021, -0x005c0017, 0x49d001f0, 0x00000400, 0x00000000, 0x40a70810, 0x020c0093, -0x35c40930, 0x4c00df00, 0xc00db002, 0x05970164, 0x8172607c, 0x93402742, -0x70020c00, 0x0007c111, 0x084d008e, 0x40d00150, 0x00000c20, 0x00000000, -0x00a20001, 0x02450091, 0xa5c00914, 0x45009d00, 0xc0090402, 0x029511e0, -0x31100c34, 0x95002744, 0x30026c00, 0x00c5c231, 0x0004039d, 0x04480011, -0x00000080, 0x00000000, 0x00a42018, 0x02440191, 0x25400914, 0x14008d04, -0x40095002, 0x82950026, 0x01504076, 0x8d002341, 0xd0025400, 0x010760a1, -0x0065069d, 0x62400150, 0x00000200, 0x00000000, 0x0a242010, 0x32040881, -0x21406894, 0x16048d00, 0x406850a2, 0x088120a0, 0x88102274, 0x81012342, -0x10a2340c, 0x02214088, 0x2304088c, 0x42480952, 0x00000080, 0x00000000, -0x0086901d, 0x10441613, 0x01c44130, 0x5c481f04, 0x40407050, 0x30148946, -0x61705876, 0x1f8307c5, 0x70501c15, 0x0597c161, 0x586c121d, 0x76c3c170, -0x00000a80, 0x00000000, 0x012fb819, 0x0afc04bf, 0x27c26972, 0x6c2c9d04, -0xd069b092, 0x80bf0327, 0x4b5112be, 0xafb32740, 0xf0126c04, 0x012bc24b, -0x92fc049f, 0x65c04bb0, 0x00000e60, 0x00000000, 0x802fa018, 0x227c10bf, -0x25c08938, 0x7c109702, 0xc8893012, 0x00bf152c, 0x5bf216dc, 0x9301a4c1, -0xf0a25c86, 0x256cc11b, 0x46cc00bf, 0x64c099b0, 0x00000e00, 0x00000000, -0x0007081c, 0xa874021d, 0x8440a110, 0x74221108, 0x48a39400, 0x041d0d84, -0x51d05445, 0x19010140, 0x90285604, 0x01c46031, 0x1d448b1d, 0x70400110, -0x00000c22, 0x00000000, 0x0423a010, 0x1234148d, 0xa1404810, 0xf034a501, -0x404a104a, 0x12cc2021, 0x48d03204, 0x8901a241, 0xd1122406, 0x0c225149, -0x4244149d, 0xc04068d0, 0x00000e80, 0x00000000, 0x0025a818, 0x1234009d, -0x20600910, 0xf400b124, 0x400b9002, 0x009d0824, 0x25d00044, 0x89082742, -0x90027400, 0x28064001, 0x0047001c, 0x60418850, 0x00000620, 0x00000000, -0x0227a805, 0x027c129d, 0xe5420930, 0x7c1b9720, 0x90592002, 0x869f8025, -0x01d1105c, 0x934026c8, 0xf202740c, 0x11066241, 0x0444001d, 0x14d029f1, -0x00000e20, 0x00000000, 0x00258014, 0x027c099f, 0x27c00974, 0x7c019f02, -0xc0997002, 0xc08f2427, 0x41f0107c, 0x970021c8, 0xb1025c01, 0x0145c541, -0x247c001f, 0x53c019b0, 0x00000600, 0x00000000, 0x01050814, 0x007c0413, -0x06ca00b0, 0xcc023f08, 0xc002f000, 0x00170205, 0x01f0107c, 0x130007c1, -0x30005220, 0x2387c801, 0x006c841b, 0x50c001f0, 0x00000420, 0x00000000, -0x001ca014, 0x01740271, 0x14400510, 0x04005d00, 0x4005d001, 0x0071001c, -0x52d100f4, 0x51001f42, 0x10014c00, 0x00cf4922, 0x64840121, 0x52c007d0, -0x00000200, 0x00000000, 0x00b2a014, 0x033401c1, 0x32400c90, 0x0400cd00, -0x420cd003, 0x00cd2070, 0x1cd80f14, 0xc5003340, 0x10033400, 0x0033403c, -0x0b0503cd, 0x40600cd0, 0x00000a00, 0x00000000, 0x00688005, 0x23b41061, -0x38400c10, 0x84000d00, 0x5000d000, 0x40690270, 0x8ed00bb4, 0xc5233a40, -0x10078404, 0x007b408e, 0x038410e5, 0x06404fd0, 0x00000200, 0x00000000, -0x407c1035, 0x07fc01a3, 0x5ac85eb4, 0x8c00ef10, 0x401ef087, 0x21ef0178, -0x5ef00fbc, 0xe7007bc3, 0x30171007, 0x157b815e, 0x1f8c01cf, 0x44c4fef0, -0x00000040, 0x00000000, 0x0025b810, 0x5b7cc01f, 0x15c0ad70, 0x7c001f00, -0xc401f000, 0x00d70076, 0x4de0537c, 0xdb4437c0, 0xf02b7c62, 0x11b3c06d, -0x035d06db, 0x43c00cf0, 0x00000660, 0x00000000, 0x005fa000, 0x17fca1f3, -0x7cc03f30, 0xfc01f700, 0xc09fb007, 0x01f3007a, 0x9ff207cc, 0xf3007ec0, -0x322f4c03, 0x2474c21f, 0x2fcc1bef, 0x08c01ff2, 0x00000e20, 0x00000000, -0x10898815, 0x13bc88e1, 0x3ac00f10, 0xb4002b00, 0x40c21020, 0x086b0198, -0x8ed00384, 0xf1003f4a, 0xb007c400, 0x0570400e, 0x03840ce1, 0x54400ed0, -0x00000660, 0x00000000, 0x001d0000, 0x333400a9, 0x18400e50, 0xb400e500, -0x440c9003, 0x10e1082e, 0x0ed00384, 0xe9003b42, 0x98038408, 0x0138500f, -0x03a480f5, 0x00400ed0, 0x00000400, 0x00000000, 0x00432804, 0x03141389, -0xd0400c10, 0x74801102, 0x4280d000, 0x91c10000, 0xacd16b05, 0xc9403340, -0x10034400, 0x20f0423c, 0x6f2400c1, 0x48400cd0, 0x00000c00, 0x00000000, -0x0435a815, 0x03f400db, 0x34500f60, 0x7840d510, 0xc00db003, 0x0180003a, -0x3cf00744, 0xf9003fc0, 0x9603c502, 0x00f4401c, 0x0b6600c7, 0x44c1bfe1, -0x00000600, 0x00000000, 0x50b70001, 0x037c0857, 0x37c80df4, 0x7c001f01, -0xc1003000, 0x00df80a7, 0x2df2037c, 0xd70033c0, 0xf0837c0c, 0x1137c0cd, -0x035d20d7, 0x27c00df0, 0x00000c00, 0x00000000, 0x004f0880, 0x03bc01ff, -0x1ec00fb0, 0x4c00ff00, 0x800f3003, 0x40bf005c, 0x1fb003e0, 0xe3403ec1, -0x9003cc00, 0x203ec80f, 0x07cc00ff, 0x94400ff0, 0x00000c00, 0x00000000, -0x20060081, 0x0374205d, 0x14c00d10, 0x45001d00, 0x40011400, 0x01910245, -0x9dd00354, 0xd1003540, 0x10036c00, 0x0034400d, 0x4b5500dd, 0x14400cd0, -0x00000802, 0x00000000, 0x8234a001, 0x0374181d, 0x36400c90, 0x5400dd08, -0x400d1003, 0x03950035, 0x0dd00754, 0xd1003640, 0xd0036400, 0x0074401d, -0x134621dd, 0x05400dd0, 0x00000200, 0x00000000, 0x80302010, 0x0334000d, -0x32400c10, 0x04000908, 0x40001000, 0x00910001, 0x0dd80714, 0xc1003040, -0x10132420, 0x2570501c, 0x0304a1c9, 0x51400cda, 0x00000080, 0x00000000, -0x0006b000, 0x03fc001f, 0x12c40fb1, 0x5c00df10, 0x400d3003, 0x40970005, -0x0db0037e, 0xf3403ec8, 0xf007ec00, 0x0976c80d, 0x034c00df, 0x05c00ff0, -0x00000ac0, 0x00000000, 0x000bb805, 0x03fc003f, 0x1de00ff0, 0xfc003f00, -0xc003f000, 0x20a7003f, 0x0ff003dc, 0xff003fc0, 0xf20bfc00, 0x057be00e, -0x03fc00ff, 0x06c80ef0, 0x00000e40, 0x00000000, 0x000fa003, 0x10fc243f, -0x1fc00330, 0xcc003301, 0xc46f2070, 0x0033023c, 0x033000cc, 0xb3583cc4, -0xb010cc40, 0x052fc00b, 0x03cc067f, 0x0cc08f30, 0x00000e00, 0x00000000, -0x00070803, 0x28742a1d, 0x174005b0, 0x445ad102, 0x4089b01b, 0x40114231, -0x0c100244, 0x91003040, 0x10281400, 0x04a74029, 0x13d4065d, 0x05404e10, -0x00000c20, 0x00000000, 0x0003a013, 0x0210000d, 0x11600810, 0x05040148, -0x404c1100, 0x00c12030, 0x0c100314, 0x85001140, 0x18001400, 0x09314028, -0x4324024d, 0x44404c50, 0x00000e80, 0x00000000, 0x0115a803, 0x0574301d, -0x17608d90, 0x4500d100, 0x640d9803, 0x00d100b5, 0x00100154, 0x85003550, -0x10034404, 0x0037401d, 0x0374635d, 0x0d400c50, 0x00000620, 0x00000000, -0x28a78882, 0x043c031f, 0x1dc12130, 0xcc003301, 0xe20d3400, 0x00932094, -0x0534235c, 0x9704b5c0, 0xb04d5e00, 0x0227c009, 0x032c015f, 0x08c00d74, -0x00000e20, 0x00000000, 0x0025800f, 0x01fc02ff, 0x1fc407d0, 0xbc00ff00, -0xe00af043, 0x05af003f, 0x0ff0076c, 0xbb38bec0, 0xf421fd01, 0x042fc00b, -0x03dc00ff, 0x1fc00fb1, 0x00000600, 0x00000000, 0x40850802, 0x005c00d3, -0x13c009f0, 0x7c000700, 0xc40d7000, 0x02d34030, 0xad34023c, 0x970634c1, -0xb4017c98, 0x4077c109, 0x035c43d3, 0x09c00d30, 0x00000420, 0x00000000, -0x2014a01b, 0x097600d0, 0x95c05dd0, 0x7404d112, 0x405db003, 0x00f12036, -0x05106274, 0x91c02440, 0x30817400, 0x00b74049, 0x6bc401d1, 0x4c400fb0, -0x00000200, 0x00000000, 0x8212a007, 0x40241001, 0x730010d2, 0x34200980, -0x401cd220, 0x06c10131, 0x18170d34, 0x81207700, 0x10126402, 0x0022442c, -0x07140051, 0x1d480c16, 0x00000a00, 0x00000000, 0x0048800d, 0x04b409e1, -0x714012d0, 0xb409e910, 0x401a9227, 0x21e1087b, 0x1e1007b4, 0xa1127a40, -0x9006b401, 0x006b401e, 0x878409e1, 0x10401e95, 0x00000200, 0x00000000, -0x01b01012, 0x011c00c1, 0x33c044f0, 0x3c000f44, 0xc08cf020, 0x02810031, -0x4c31833c, 0x850233c2, 0x30123c00, 0x0027c00c, 0x031c00d3, 0x49c00c30, -0x00000040, 0x00000000, 0x203db802, 0x01fc20ff, 0x3fc807f0, 0xbc00f702, -0xc00ff023, 0x00bf023e, 0x09f0017c, 0xbf123dd0, 0x3002fe00, 0x002ec00f, -0x03be20ff, 0x0bc10ff4, 0x00000660, 0x00000000, 0x1077a015, 0x016e0013, -0x37c40970, 0x4c001f00, 0xc00d3000, 0x01532137, 0x6d300358, 0x9b8034c0, -0x32034c01, 0x0030180d, 0x136c001b, 0x57c10d34, 0x00000e00, 0x00000000, -0x08218913, 0x01ad00e1, 0x33000a10, 0x2c20c110, 0x400ab003, 0x0261023b, -0x0e100384, 0xa3403c41, 0x1003c500, 0x5039400e, 0x330420a1, 0x4b424e10, -0x00000620, 0x00000000, 0x00790001, 0x058481e1, 0x7b401e50, 0xa4012580, -0x401e1004, 0x0589007b, 0x1c104784, 0xe1007a50, 0x18078401, 0x08fa4a1e, -0x37b60181, 0x0f401e10, 0x00000400, 0x00000000, 0x00b32812, 0x81260ac1, -0x37446c50, 0x6400c500, 0x400c9003, 0x028101b3, 0x0c1c0706, 0xc900f240, -0x101b0501, 0x0077401c, 0x03540589, 0x4b400c14, 0x00000c20, 0x00000000, -0x401da817, 0x11cc0b73, 0x17c82770, 0x6c005f00, 0xc0053001, 0x0a5b4097, -0x05300d4c, 0x53005ec8, 0x3419cc21, 0x0016c005, 0x017c077b, 0x5fc00530, -0x00000620, 0x00000000, 0x00870012, 0x487c021f, 0x07c40180, 0xfc002a00, -0xc001f008, 0x001f0003, 0xa1f0406d, 0x170205c0, 0xf0087c08, 0x0005c081, -0x006c0017, 0x4bc001f4, 0x00000c00, 0x00000000, 0x04270810, 0x024c008f, -0x24c00830, 0x44009311, 0x80093002, 0x00930037, 0x0930027c, 0x924424d8, -0x30263c00, 0x0024c008, 0x025c0083, 0x40d00830, 0x00000c20, 0x00000000, -0x89262001, 0x0a04029d, 0xe4441950, 0x44009141, 0x4499b002, 0x109b2427, -0x29120a76, 0x91a02440, 0xb0027403, 0x40a6c209, 0x02448091, 0x044009b4, -0x00000800, 0x00000000, 0x2064a018, 0x4344109d, 0x24404910, 0xd608b100, -0x40091002, 0x00912027, 0x0e1442b4, 0x95202040, 0x10025418, 0x00644009, -0x02540091, 0x60400910, 0x00000200, 0x00000000, 0x02202010, 0x8204008d, -0x20408850, 0x9408a102, 0x40889022, 0x08800223, 0x8e1022b4, 0x85223040, -0x90223408, 0x82224088, 0x0a040281, 0x40404890, 0x00000080, 0x00000000, -0x0586b01d, 0x504d141d, 0x84d16110, 0xdd161325, 0xc1613059, 0x16114583, -0x63315834, 0x050084c1, 0x30d95c02, 0x0594c160, 0x005c8013, 0x74c0b134, -0x00000ac0, 0x00000000, 0x012fb119, 0x03bc20af, 0x27c84bf0, 0x6c849f01, -0xc44be012, 0x04bf0127, 0x49f2137c, 0xb9012fc0, 0xf012fc86, 0x012fc04b, -0x0a7c02bf, 0x67c099f0, 0x00000e60, 0x00000000, 0x062fa018, 0x127c049b, -0x6cc12b30, 0x8c059301, 0xc1493006, 0x209b01a7, 0x893212c8, 0x92002040, -0x111a4c02, 0x01acc029, 0x02fc10bf, 0x60c00930, 0x00000e00, 0x00000000, -0x4087081c, 0x08740211, 0x85006111, 0x44161141, 0x41411058, 0x14510183, -0x01105044, 0x11050440, 0x1030440a, 0x01044063, 0x0074021d, 0x7041e172, -0x00000c20, 0x00000000, 0x0123a012, 0x22340881, 0xa0604c12, 0x14028104, -0x4008541a, 0x02950363, 0x3a920a14, 0xa1012c44, 0x90128400, 0x01a040ca, -0xc234348d, 0x40500810, 0x00000e80, 0x00000000, 0x0860a818, 0x027434d1, -0x24400910, 0x54809100, 0x44095002, 0xc4950023, 0x1b901245, 0xb1042c48, -0x900a8404, 0x2064400b, 0x0274e29d, 0x60400950, 0x00000620, 0x00000000, -0x01a7a805, 0x027c8293, 0x24d12934, 0x5d009340, 0xc0097002, 0x03874027, -0x09b20e5c, 0x9302a4d0, 0xb4024d00, 0x9064f019, 0x027c829f, 0x14c00932, -0x00000e20, 0x00000000, 0x04258016, 0x0f3c20d7, 0x27c099f0, 0x6d00df00, -0xc09db002, 0x21d30037, 0x0870026c, 0x9f4066c1, 0x700e7c00, 0x0027c049, -0x0274009f, 0x53c00970, 0x00000600, 0x00000000, 0x08850814, 0x007c041f, -0x03c20034, 0x0c000f04, 0xc0017084, 0x02134407, 0x01b0084d, 0x134184c0, -0x34484c40, 0x0045c101, 0x041c021f, 0x50c00034, 0x00000420, 0x00000000, -0x01dca014, 0x0170825d, 0x9e400555, 0xc5005d00, 0x41155049, 0x08500097, -0x3510615c, 0x5100d040, 0x100d4400, 0x149f4135, 0x0dc4415d, 0x50400530, -0x00000200, 0x00000000, 0x00f2a014, 0x133402cd, 0xb3400c50, 0x05804d02, -0x40140006, 0x00c10003, 0x3c900e44, 0xd100f040, 0x100b2401, 0x0031603d, -0x8314018d, 0x50400c90, 0x00000a00, 0x00000000, 0x00288005, 0x03f400ed, -0x0b400e50, 0x90104d00, 0x40065013, 0x00e1200b, 0x0a102794, 0xe100ac41, -0x1041a402, 0x002b400a, 0x600411ad, 0x14404e10, 0x00000200, 0x00000000, -0x00781015, 0x07bc91ef, 0x7b401e74, 0x8d016f20, 0xc116300e, 0x01c3022b, -0x14b2108c, 0x710058d0, 0x3007ed01, 0x0059c01e, 0x179c01bf, 0x54d03cb0, -0x00000040, 0x00000000, 0x0025b810, 0x133c06dc, 0x36c00df0, 0x6c021f00, -0xc041f003, 0x02de0127, 0x09f1032c, 0xdf0027d0, 0xf0015c40, 0x20374009, -0x847c009f, 0x43c16df0, 0x00000660, 0x00000000, 0x005fa000, 0x8ffc01f3, -0x7fc01ff1, 0xcc037302, 0x80173007, 0x03f3004f, 0x1f3006cc, 0xbb037cc0, -0x3006cc01, 0x007fc03f, 0x04ec01f3, 0x00c01f30, 0x00000e00, 0x00000000, -0x201d8815, 0x0bb408e3, 0x08400fd0, 0xac106b00, 0x4006100b, 0x00ef000b, -0x4bd002c4, 0xf1422840, 0x70528400, 0x000bc00e, 0x818444b5, 0x54400e54, -0x00000600, 0x00000000, 0x00290000, 0x03940061, 0x01400ed0, 0x34086980, -0x41061023, 0x00c900ab, 0x26900094, 0x21051958, 0x18030400, 0x001b400e, -0x203422e1, 0x00400e10, 0x00000400, 0x00000000, 0x20232804, 0x0b3446c1, -0x00441cd0, 0x34010900, 0x40001007, 0x00c91023, 0x01d04814, 0x81000540, -0x50450400, 0x0013400d, 0x01340085, 0x10400d50, 0x00000c20, 0x00000000, -0x4075a815, 0x0b5c03d3, 0x35c00df0, 0xfc035b00, 0xc0153047, 0x00dbc817, -0x0d3102dd, 0xd30075c8, 0x300f4d00, 0x0017c915, 0x03fc00d3, 0x54d00f34, -0x00000620, 0x00000000, 0x02270001, 0x2b7c03c7, 0x05c08df0, 0x6c045f00, -0xc405f043, 0x00d70013, 0x1d70036c, 0xd70136e0, 0xf0017c00, 0x0095c401, -0x004c80df, 0x07c00df0, 0x00000c00, 0x00000000, 0x001f0880, 0x43cc00f3, -0x3fc00fb0, 0xac405300, 0xe4173203, 0x00f3023c, 0x573000ec, 0x63015dc0, -0x7003cc00, 0x0154c007, 0x039c01e3, 0x01c00d30, 0x00000c22, 0x00000000, -0x01862001, 0x030400d5, 0x37400d10, 0x44001100, 0xc091b023, 0x06d500b6, -0x0d160344, 0x51403454, 0x10016c50, 0x54114021, 0x806c09d1, 0x04400db0, -0x00000802, 0x00000000, 0x0010a001, 0x034400d1, 0x33401d90, 0x46880180, -0x40005103, 0x00c10094, 0x0d100224, 0x91003540, 0x90220480, 0x201440ad, -0x005460d1, 0x05400d10, 0x00000200, 0x00000000, 0x00102010, 0x030520c5, -0x03600810, 0x04000100, 0x4000d001, 0x00c54032, 0x08508204, 0xc1002040, -0x15022400, 0x00016000, 0x012400c1, 0x40400c90, 0x00000080, 0x00000000, -0x0006b000, 0x014400d1, 0x07c00db0, 0x4d001340, 0x40017403, 0x00d34030, -0x0530006c, 0x11001148, 0x71024c00, 0x0814c80d, 0x005c20d3, 0x01c00f30, -0x00000a80, 0x00000000, 0x000fb805, 0x03fc00ff, 0x0fc00ff0, 0xf4203f00, -0x8003b003, 0x007f003f, 0x03b200fc, 0x3f000fc4, 0xf000fc80, 0x181f8203, -0x01fc40ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x003ba003, 0x02cc08fb, -0x0ec04fb4, 0xfc003f00, 0xc00eb000, 0x08392039, 0x0fb2539c, 0xe3083fc0, -0x700bcc00, 0x013cc04f, 0x01e81cf3, 0x0cc08f30, 0x00000e00, 0x00000000, -0x00370801, 0x6a4502d1, 0x07448d11, 0x44044f10, 0x400d1b00, 0x0e110034, -0x0d120bd4, 0xf702bf41, 0x1020c500, 0x25bd406f, 0xab4c02f5, 0x04404d52, -0x00000c20, 0x00000000, 0x0037a011, 0x126486c1, 0x02440810, 0x15100d00, -0x440c5000, 0x24090073, 0x4800d325, 0xc100324a, 0x50134580, 0x0230418c, -0x036424c9, 0xc4401c50, 0x00000e80, 0x00000000, 0x4135a803, 0x006401d5, -0x07400910, 0x4402d500, 0x440d5400, 0x80510076, 0x0d100344, 0xd9003741, -0x00114400, 0x0035400d, 0x234400dd, 0x0c401c50, 0x00000620, 0x00000000, -0x0033a802, 0x032407d3, 0x46ca19b0, 0x5c021d20, 0xc53dd422, 0x125b3037, -0x3d34037c, 0xd30037c0, 0x60044d80, 0x0034c20d, 0x0f2c00db, 0x08d00d50, -0x00000e20, 0x00000000, 0x003d8007, 0x82dd00d3, 0x4fc19b70, 0x7d107f01, -0xc08f30c6, 0x00a7043d, 0x3ff083fc, 0xf74037c2, 0xf001dc00, 0x003fc00f, -0x07fc00e7, 0x1fc00ff0, 0x00000600, 0x00000000, 0x00350802, 0x076c02d3, -0x07c08930, 0x3d001340, 0xc42d2082, 0x025b0036, 0x8930033c, 0xc74033c0, -0xf0014c04, 0x0034c00d, 0x0b4c00d3, 0x09c00df0, 0x00000420, 0x00000000, -0x0034a013, 0x014400d1, 0x84402912, 0x5403d101, 0x441c500e, 0x06f100b4, -0x391003c4, 0xf5203f40, 0xd0010482, 0x003c400f, 0x07c440f1, 0x4c420d10, -0x00000200, 0x00000000, 0x0032a007, 0x020405d1, 0xc2603892, 0x14009101, -0x419c5401, 0x138d1076, 0x0c100314, 0xc1003361, 0xd0030401, 0x0034400d, -0x030400c1, 0x1d400c50, 0x00000a00, 0x00000000, 0x406c8004, 0x0c0519a9, -0x4840da10, 0x8401e100, 0x409e50c5, 0x0135207c, 0x9e102784, 0xe1907b00, -0xd1058511, 0x907c041f, 0xc7d401f1, 0x10401f10, 0x00000200, 0x00000000, -0x00301032, 0x220d0803, 0x02e04d30, 0x1c908300, 0xc00c7401, 0x008f0432, -0x0c32033c, 0xc74033c0, 0xf2090c00, 0x0130c00c, 0x1a0c00c3, 0x49c00c70, -0x00000040, 0x00000000, 0x203db802, 0x82dc08b7, 0x0ac44f74, 0x5c88ff02, -0xc00fa021, 0x006b143f, 0x0bb043fc, 0xff043fc2, 0xf0215c08, 0x003bc08e, -0x43ac02ef, 0x0bc02e72, 0x00000660, 0x00000000, 0x0027a015, 0x034c009f, -0x24c00df0, 0x5d009f00, 0xc99db04b, 0x04db00b7, 0x7c32176c, 0xd78936c8, -0xf0114c13, 0x0934844d, 0x030808d3, 0x54c0ddb0, 0x00000e00, 0x00000000, -0x00298812, 0x008400ed, 0x38400ed0, 0x0400ed00, 0x044e1003, 0x11a1053f, -0x8e1033c4, 0xff023040, 0x10413402, 0x0531414c, 0x179c04f5, 0x48400f50, -0x00000620, 0x00000000, 0x00690003, 0x47a6016d, 0x69401cd0, 0xb4018d0c, -0x401f0007, 0x09e90179, 0x3a1407a4, 0xe8497a40, 0xd005b425, 0x037840de, -0xc78401e1, 0x0f705ed2, 0x00000400, 0x00000000, 0x00632812, 0x076409dd, -0x61401cd1, 0x2400cd00, 0x410c9003, 0x83c10032, 0x30180304, 0xc9003048, -0x10397480, 0x4031480c, 0x031400c5, 0x4b400c50, 0x00000c20, 0x00000000, -0x0115a817, 0x01ed007f, 0x99d905f0, 0x7c805f00, 0xc433b409, 0x124b06c9, -0x8530016c, 0x570016c0, 0xe005dc00, 0x001c8007, 0x01cc0073, 0x5fc003f0, -0x00000620, 0x00000000, 0x00070012, 0x805c001f, 0x46c001f0, 0x5c021f00, -0xc8813048, 0x00170085, 0x21f0005c, 0x17a007c2, 0xf0005400, 0x2007c001, -0x005c001f, 0x488011f0, 0x00000c00, 0x00000000, 0x00270810, 0x024c019f, -0x24d05830, 0x6c858300, 0xc021b002, 0x11d90046, 0x1db0025c, 0x930026c0, -0x30027c20, 0x08248408, 0x42480093, 0x43c00171, 0x00000c20, 0x00000000, -0x00262001, 0x0254119d, 0xa4401912, 0x04079314, 0x4031150e, 0x05930307, -0x09d00254, 0x91182740, 0x10027408, 0x0026c009, 0x86040093, 0x07400110, -0x00000800, 0x00000000, 0x00248018, 0x0745089d, 0x34440914, 0xe6009161, -0x40015012, 0x44950007, 0x89d28254, 0x95502342, 0x10027400, 0x00234009, -0x12540081, 0x63400150, 0x00000200, 0x00000000, 0x00a02010, 0x3604048d, -0x26406814, 0x8508a100, 0x408c1062, 0x00858227, 0x88d00204, 0x81842340, -0x10323004, 0x202340c8, 0x02140881, 0x43408810, 0x00000080, 0x00000000, -0x0006b01d, 0x504c8c1f, 0x04c04514, 0xec101300, 0xc9617009, 0x0e171507, -0x05d1b854, 0x131007c1, 0x34507c2c, 0x4387c061, 0x505d1413, 0x77c16170, -0x00000ac0, 0x00000000, 0x002fb819, 0x12fc0caf, 0x2dcc6bf0, 0x7c209e00, -0xc04af012, 0x0c8b412f, 0x09b0327d, 0x9d0467c0, 0xf212fc8c, 0x03260469, -0x02eca09f, 0x67c04bf0, 0x00000e60, 0x00000000, 0x0027a818, 0x72cc08bf, -0x2fd14bf0, 0xcc12b700, 0xc07bb882, 0x54aa236d, 0x0bf91a4c, 0xb7032ec2, -0xb00a6c04, 0x00a5c029, 0x42ec0093, 0x63c05c30, 0x00000e00, 0x00000000, -0x0407081c, 0x09440a1d, 0x04406110, 0x6c000da0, 0x4015187c, 0x26150017, -0x61d80046, 0x11800141, 0x103c4404, 0x0886c821, 0x084c0201, 0x734001b1, -0x00000c20, 0x00000000, 0x0923a210, 0x1224848d, 0x25510840, 0x04049d00, -0x40681402, 0x508121a1, 0x28d29a14, 0x8141a042, 0x10022412, 0x01a24068, -0x02261681, 0x43417898, 0x00000e80, 0x00000000, 0x0025a018, 0x0264009d, -0x34400910, 0x6000dd40, 0x60815100, 0x209d1227, 0x18d00255, 0x85002540, -0x11224400, 0x00264009, 0x43440091, 0x63401998, 0x00000620, 0x00000000, -0x0067a005, 0x0e6d119d, 0x23c00870, 0x4c069500, 0xe0311000, 0x01832021, -0x59d00254, 0x910024c0, 0x34126c00, 0x4026d009, 0x0e6c0093, 0x17c009bc, -0x00000e20, 0x00000000, 0x00a58034, 0x265c048f, 0x64c03970, 0x7c009702, -0xc3113000, 0x24970067, 0x09f2026c, 0x9b9027e4, 0xf0023c00, 0x0020c008, -0x263c009f, 0x53c00978, 0x00000600, 0x00000000, 0x00050014, 0x084c501f, -0x07c08134, 0x6c8e1f00, 0xc0213410, 0x00130887, 0x01320054, 0x174007c1, -0x30087400, 0x0007c801, 0x8c7c8004, 0x51c20130, 0x00000420, 0x00000000, -0x0014a814, 0x11c5137f, 0x1f408710, 0x84007d00, 0x41131048, 0x007b205f, -0x273081c4, 0x71101744, 0xb2017400, 0x10174005, 0x09c40051, 0x50400750, -0x00000200, 0x00000000, 0x0032a014, 0x0544028d, 0xf3401c12, 0x34019d01, -0x401cd10b, 0x00c10453, 0x2c100335, 0xcc0a7540, 0x18033400, 0x0033600c, -0x221400c5, 0x51400c90, 0x00000a00, 0x00000000, 0x09388005, 0x01a500ad, -0x3b400e10, 0x96006d04, 0x604e1003, 0x04e9041b, 0x02801714, 0x61003b4c, -0x9a033420, 0x003340ce, 0x020408e1, 0x14405f90, 0x00000200, 0x00000000, -0x00f81015, 0x050c81ff, 0x7bc01e10, 0x2c81ed00, 0xc29e7457, 0x4321085f, -0x1a240798, 0xef247bc0, 0x3007be11, 0x28fbc15e, 0x029c21e7, 0x55c03eb0, -0x00000040, 0x00000000, 0x01b59010, 0x01504057, 0x27c00df0, 0x6c00df10, -0xc06d3103, 0x011f0017, 0x0173736c, 0x1f0037c4, 0xf007fc00, 0x2437c86d, -0x025c02df, 0x43c12d70, 0x00000660, 0x00000000, 0x00ffa200, 0x05fc41b3, -0x7dc09f30, 0xfc017b00, 0xc19e7047, 0x01fb007d, 0x97b087ec, 0xfb406ec8, -0xf087d401, 0x037cc01f, 0x05c40bf3, 0x00c01fc0, 0x00000e00, 0x00000000, -0x02398815, 0x19b600ab, 0x38400e10, 0x8404ed00, 0x488e3003, 0x02fd001c, -0x021013ed, 0x61012948, 0xd053ac08, 0x023dc00e, 0x50840cf3, 0x54404ef0, -0x00000620, 0x00000000, 0x00390000, 0x013412e9, 0x3a640e10, 0x10008502, -0x008f1023, 0x0821021b, 0x081903a4, 0xe5802840, 0xd0838400, 0xa13a408c, -0x00a400e9, 0x00410ed0, 0x00000400, 0x00000000, 0x20772804, 0x093080c1, -0x72000c10, 0x0402cc00, 0x644c1183, 0x07042112, 0x30100324, 0x05002545, -0xd2071440, 0xc031400c, 0x082400c1, 0x90403c50, 0x00000c20, 0x00000000, -0x417ca815, 0x057003c9, 0x76500d14, 0x5d879701, 0x484d1c03, 0x07eb0117, -0x5db083ed, 0x5f0024c0, 0xf82bc500, 0x003ec00f, 0x086d00fb, 0x54c03fd0, -0x00000620, 0x00000000, 0x00370001, 0x4d3c809f, 0xb4c80df0, 0x5c00cf20, -0xc00db003, 0x021f1085, 0x01f4035c, 0x930025c2, 0xf9036c00, 0x0035c00d, -0x005c00df, 0x07c00df0, 0x00000c00, 0x00000000, 0x003f0880, 0x15cc00f3, -0x7cc00c30, 0xad10f300, 0xc80f3a0f, 0x01fa021f, 0x0b7083dd, 0x67206ec0, -0xf003cc08, 0x083cca0f, 0x44bc00f6, 0x00c30f30, 0x00000c22, 0x00000000, -0x40360081, 0x0b450151, 0x70d01d10, 0x44025100, 0x400d300f, 0x03110112, -0x01300364, 0xd3006740, 0xd0034412, 0x0036c40d, 0x047400d1, 0x04420cb0, -0x00000802, 0x00000000, 0x8034a001, 0x81550191, 0x36483d91, 0x6780d102, -0x481d5443, 0x28dd0017, 0x05d28335, 0x550a3762, 0x50036500, 0x0030400c, -0x107600d5, 0x04400d10, 0x00000200, 0x00000000, 0x20302010, 0x01140091, -0x32400412, 0x0400c040, 0x601c9403, 0x00058012, 0x00500324, 0x89003340, -0xd0030100, 0x0032400c, 0x003480c5, 0x40400c90, 0x00000080, 0x00000000, -0x883ab000, 0x015c00d1, 0x36c00db4, 0x6d001100, 0xc00d1003, 0x00df0017, -0x097003d4, 0x65403ac0, 0xf0036d00, 0x083cc00f, 0x007c00f7, 0x00c00f30, -0x00000ac0, 0x00000000, 0x803fb805, 0x02ed00ff, 0x1de00b70, 0xf800ff00, -0xc20f7403, 0x003b001f, 0x033003dd, 0xf5003fc4, 0xf083fc00, 0x003fc00f, -0x00fc00fb, 0x17c00ef0, 0x00000e60, 0x00000000, 0x023fa003, 0x53cfc0ff, -0x3b400ff3, 0xecc03300, 0xc483d200, 0x483b233c, 0x8370a0c5, 0x37020cc0, -0x31008d48, 0x003cc003, 0x00cd8423, 0x0cd40b35, 0x00000e00, 0x00000000, -0x01370801, 0x934410fd, 0x374005d0, 0x44009100, 0x400d9003, 0x061302bc, -0x01100044, 0x11002444, 0x10004400, 0x003ec541, 0x01444855, 0x04400910, -0x00000c20, 0x00000000, 0x2033a011, 0x532404c4, 0x67460cd0, 0x14004500, -0x4008d202, 0x08c50130, 0x44500344, 0x85613048, 0x50000444, 0x00324008, -0x01140001, 0x44400c50, 0x00000e80, 0x00000000, 0x8035a803, 0x036400dd, -0x17400dd0, 0x7520c500, 0x502d9003, 0x00d40034, 0x45100244, 0x11083041, -0x50504404, 0x88364009, 0x03140045, 0x0c400c10, 0x00000620, 0x00000000, -0x0037a802, 0x036400cf, 0x77c81df0, 0x6c62d700, 0xc094f069, 0x0217006c, -0x3d70480c, 0xd70014d0, 0x740f4d01, 0x0034d105, 0x015c0553, 0x08c01d70, -0x00000e20, 0x00000000, 0x043d8007, 0x83dc00ff, 0x3fc027f0, 0x4500fb42, -0xc40fb006, 0x2333026b, 0x14f000fc, 0xef080fc0, 0xb007fc21, 0x0031c046, -0xa3ec027d, 0x1fc09f92, 0x00000600, 0x00000000, 0x00350802, 0x037c00df, -0x37c00df1, 0x4d029b00, 0xc12d3003, 0x00db4164, 0x2db01f6c, 0xd74134c0, -0x30293c10, 0x0036d029, 0x014c10d3, 0x08c10d34, 0x00000420, 0x00000000, -0x0074a013, 0x43f400fd, 0xba404fd0, 0x4400b100, 0xc02d1002, 0x00e100a6, -0xa5100244, 0xd100f6c0, 0x10857411, 0x003c4019, 0x2f7c00f1, 0x4c404d10, -0x00000200, 0x00000000, 0x00b2a007, 0x073408cd, 0x13400cd0, 0x04008909, -0x400c161b, 0x00050020, 0x08900a24, 0x4d000050, 0x14073400, 0x0031400c, -0x01040249, 0x1c402c10, 0x00000a00, 0x00000000, 0x00788004, 0x07b409ed, -0x5a4032d0, 0x85012100, 0x60121105, 0x01f50062, 0x1a100404, 0x292c6840, -0x1806b605, 0x0079411e, 0x45b41979, 0x10401e10, 0x00000200, 0x00000000, -0x06301012, 0x033488cf, 0x13c088f8, 0x0502db00, 0xc00c3003, 0x02c74120, -0x48b1032c, 0xcf003440, 0x30033c00, 0x4131c80d, 0x014c004a, 0x48d00d30, -0x00000040, 0x00000000, 0x003db802, 0x43fc3aff, 0x3ec80bf0, 0xfe007f00, -0xc00afa03, 0x00e3106f, 0x0bf0027c, 0x37203fc0, 0xf0227484, 0x003c808f, -0x03fc0077, 0x0bc08ff0, 0x00000660, 0x00000000, 0x0037a015, 0x034c02df, -0x77c08d30, 0x6c00d700, 0xc92d3403, 0x00130137, 0x0df0024c, 0xdb0014c0, -0x38036c40, 0x23b4c005, 0x014c01d3, 0x54c01d30, 0x00000e00, 0x00000000, -0x00398812, 0x138404ef, 0x3b400618, 0x2400f101, 0x40061001, 0x07e1023b, -0x0cd000ac, 0xe1200840, 0x1a030400, 0x24384104, 0x038402e1, 0x48400e10, -0x00000620, 0x00000000, 0x00790003, 0x170401cd, 0x7b405e10, 0x8409a503, -0x481e9007, 0x05f11873, 0x1ed20786, 0xe9007870, 0x1007a441, 0x0078441e, -0x058605e1, 0x0c401e10, 0x00000400, 0x00000000, 0x10332812, 0x034440c5, -0x33408c14, 0x24098100, 0x409c9007, 0x00d10273, 0xacd00226, 0xd9007441, -0x11172408, 0x4830401c, 0x070704c1, 0x48409c14, 0x00000c20, 0x00000000, -0x0015a817, 0x0145004d, 0x9fc01732, 0x6c025701, 0xc015b215, 0x00734017, -0x15f0014c, 0x5b0614d0, 0x35156d43, 0x0014d025, 0x1dcc1173, 0x5cd00530, -0x00000620, 0x00000000, 0x20070012, 0x007c001f, 0xc7c001f0, 0x1d001f00, -0xc0007000, 0x001f0003, 0x01f0003c, 0x170087c0, 0xf0005c00, 0x0003e0e1, -0x047d001f, 0x4bc801f0, 0x00000c00, 0x00000000, 0x00670810, 0x024c009f, -0x24e09930, 0x4c109f00, 0x80493002, 0x05934024, 0x0938026d, 0x970024c0, -0x30060c10, 0x5024c019, 0x027c0093, 0x43c00930, 0x00000c20, 0x00000000, -0x0a260001, 0x0244029d, 0xa6e03810, 0x44008d00, 0x4009100a, 0x809b0124, -0x0910024c, 0x9100a450, 0x11064100, 0x00a55098, 0x0274009b, 0x07400914, -0x00000800, 0x00000000, 0x8024a018, 0x0245029d, 0xa4440910, 0xc7009d08, -0x400b180a, 0x00910065, 0x0a100244, 0xb520ac40, 0x1012c400, 0x0424400b, -0x02340091, 0x63400910, 0x00000200, 0x00000000, 0x82302010, 0x2204088d, -0x20401810, 0x84089d00, 0x508a1c22, 0x00890221, 0x2a142204, 0xa190a840, -0x10028722, 0x00a1408a, 0x0a340289, 0x43402810, 0x00000080, 0x00000000, -0x0086b01d, 0x584c961f, 0x04414114, 0x4c561f05, 0xc1633058, 0x14130585, -0x4112584c, 0x070500c1, 0x34504c14, 0x4500c967, 0x003c0003, 0x77c00030, -0x00000ac0, 0x00000000, 0x0127b819, 0x127e049f, 0x2bd00bf0, 0x7c24bf00, -0xc049f092, 0x14a7012e, 0x09f012dc, 0x9f0827c0, 0xf0027c00, 0x0026c049, -0x02fc02ff, 0x67c00bf0, 0x00000e60, 0x00000000, 0x022fa818, 0x52cc10bf, -0x25c14bf0, 0x4c1c9345, 0xd00b3022, 0x04bb4368, 0x295022dc, 0x9314a6c0, -0xb0426c30, 0x0024c02b, 0x0a4c0697, 0x60c02930, 0x00000e00, 0x00000000, -0x0107081c, 0x186d021f, 0x05c021d0, 0x44061100, 0x40211428, 0x06110004, -0x50100044, 0x3100c440, 0xd0014437, 0x05c040a5, 0x04440911, 0x70401211, -0x00000c20, 0x00000000, 0x0023a010, 0x4204148d, 0x214008d0, 0x04048100, -0x41689212, 0x199101a0, 0x28501a14, 0xa9012a40, 0xd0022400, 0x00a04048, -0x12a404b5, 0x40424a14, 0x00000e80, 0x00000000, 0x1825a018, 0x82440095, -0x254289d8, 0x45009106, 0x402d920a, 0x01911024, 0x88100a44, 0xb8812c42, -0xd0026400, 0x80204009, 0x52e000b1, 0x60000b11, 0x00000620, 0x00000000, -0x0027a005, 0x0245009d, 0xa1c049f0, 0x4c019300, 0xc009b002, 0x008b0024, -0x0970065c, 0x9b0126c0, 0xb1026830, 0x0024d0b9, 0x026c0297, 0x14d01938, -0x00000e20, 0x00000000, 0x00258014, 0x027c109f, 0x75c219f0, 0x3c049f00, -0xc1087003, 0x309e0027, 0x19d0227c, 0x975467c2, 0xf0035c00, 0x0027c018, -0x065c009f, 0x53c059f8, 0x00000600, 0x00000000, 0x03050014, 0x004c000f, -0x87c031f0, 0x4c001304, 0xc001f040, 0x00130040, 0x0130000c, 0x332889c0, -0xf0086c00, 0x0004d021, 0x08cc0233, 0x50d003f0, 0x00000420, 0x00000000, -0x005ca014, 0x0144027d, 0x974027d2, 0x45005100, 0x41177009, 0x0271009c, -0x05b001c4, 0x71001540, 0xd0114500, 0x00144197, 0x01440043, 0x504005d0, -0x00000200, 0x00000000, 0x0072a814, 0x030403cd, 0xb3400cd0, 0x0400d100, -0x400cd00b, 0x00c10030, 0x0c100624, 0x5540b140, 0xd0071400, 0x00304228, -0x035400c9, 0x51400dd0, 0x00000a00, 0x00000000, 0x00388005, 0x038402ad, -0x33420ad0, 0x8404e100, 0x60065003, 0x04e10028, 0x061009a4, 0xa9000940, -0xd0039400, 0x0038400e, 0x00940121, 0x154002d0, 0x00000200, 0x00000000, -0x00781015, 0x078d014d, 0x7bc01ef0, 0x8c23c124, 0xd01cf007, 0x05b34068, -0x1e1406ed, 0x474071c2, 0xf0079c01, 0x4058c01c, 0x079d00fb, 0x55c01ef8, -0x00000040, 0x00000000, 0x0015b810, 0x037c801f, 0x37c80df0, 0x7d86df40, -0xc005f01b, 0x099f0027, 0x05f001dc, 0x970006c0, 0xb00b4d00, 0x0017c009, -0x006d001f, 0x42c001f0, 0x00000660, 0x00000000, 0x407fb000, 0x27cc0133, -0x7cc09ef0, 0xdc03f700, 0xc017f02f, 0x0177007c, 0x1f3207dc, 0x73007c80, -0x300fec01, 0x407cc017, 0x07cd01f3, 0x03c01f30, 0x00000e00, 0x00000000, -0x00ad8015, 0x0380006b, 0x3840aaf0, 0x8408e101, 0x4087d043, 0x0061022d, -0x06a040fc, 0xab208850, 0x10038400, 0x00384003, 0x00c40025, 0x57400210, -0x00000620, 0x00000000, 0x00390000, 0x038400a1, 0x38700fd2, 0x9400e500, -0x4102d103, 0x0025000a, 0x8c1003a4, 0x61423840, 0x1003a401, 0x0010400e, -0x0b8418e1, 0x03400e10, 0x00000400, 0x00000000, 0x00032804, 0x030420d1, -0xb0403c52, 0x0402c104, 0x4030d00f, 0x00050003, 0x24904c34, 0x8900c043, -0x10072403, 0x50104408, 0x2004000d, 0x13400010, 0x00000c20, 0x00000000, -0x0035a815, 0x02450051, 0xf4c12dd0, 0x5c00f704, 0xc015f20b, 0x0c370036, -0x2d300e6c, 0x536274c0, 0x34466d2b, 0x0834c009, 0x070d00d3, 0x57c00d34, -0x00000620, 0x00000000, 0x00b70001, 0x037c801f, 0xb7c00df0, 0x7c10df00, -0xc045f203, 0x001b0005, 0x05f00a5c, 0x970287c0, 0xf1035c08, 0x0037c409, -0x007c0017, 0x07c001f0, 0x00000c00, 0x00000000, 0x006f0880, 0x0acc0053, -0x3ec13ef0, 0xcd20db00, 0x8032b043, 0x00234028, 0x0e3c02cc, 0x714030c0, -0xf0076c00, 0x001bc00b, 0x03cc40c3, 0x00c00f30, 0x00000c22, 0x00000000, -0x20062081, 0x03541011, 0x90401dd0, 0x4400d100, 0x4031100b, 0x0e110404, -0x07540614, 0xb1208c40, 0xd0074400, 0x001f4419, 0x00c5003b, 0x04400214, -0x00000802, 0x00000000, 0x0210a001, 0x02440011, 0xb6400dd0, 0x0500c900, -0x6005900b, 0x00150035, 0x0d104644, 0x45103550, 0xd0136400, 0x00374811, -0x034400d1, 0x04400d50, 0x00000200, 0x00000000, 0x00002010, 0x03140041, -0x31400cd0, 0x0500c100, 0x40041203, 0x00050001, 0x04500214, 0x81000140, -0xd0030600, 0x40334400, 0x00440009, 0x40400110, 0x00000080, 0x00000000, -0x0006a000, 0x024c8013, 0x36c005f8, 0x4c20fb00, 0xd001b003, 0x00170005, -0x0d10024c, 0x470015c0, 0xf0036c80, 0x4017c009, 0x034c00d3, 0x00d00d30, -0x00000ac0, 0x00000000, 0x800fa805, 0x03fe207f, 0x3ac00ff0, 0xfc00ff00, -0xc003f001, 0x002b000e, 0x07f002fc, 0xbf002ec0, 0xf003f820, 0x001fc00b, -0x00fc003f, 0x17c003f0, 0x00000e60, 0x00000000, 0x003fa003, 0x03dc4073, -0x0dc8c370, 0xcc183d03, 0xc982b040, 0x0033030c, 0x0f3003ec, 0xfd002ec9, -0x3083ec98, 0x023cd003, 0x23cc00f3, 0x0cc00ff9, 0x00000e00, 0x00000000, -0x803f0801, 0x03c400d1, 0x2440c910, 0x64069d03, 0x4061101b, 0x46911384, -0x2f0103c4, 0xf1002440, 0x100bf406, 0x01b44041, 0x030410f1, 0x04404dd0, -0x00000c20, 0x00000000, 0x4033a011, 0x032480c5, 0x10404050, 0x24000d01, -0x40409040, 0x12492101, 0x0c105326, 0xc9002240, 0x548a3404, 0x30b24100, -0x130404c1, 0x44415cd2, 0x00000e80, 0x00000000, 0x7035a807, 0x036400c1, -0x345a0910, 0x64009d04, 0x41040000, 0x10910000, 0x0d008306, 0xd1042440, -0x50227400, 0x02164108, 0x934480d5, 0x0c401dd2, 0x00000620, 0x00000000, -0x0037a800, 0x036106d5, 0xc4803570, 0x4d0a5e00, 0xd029b000, 0x801340b5, -0x0c30036c, 0xdb00a6c8, 0x70033400, 0x40768835, 0x034d00d1, 0x00c00cd0, -0x00000e20, 0x00000000, 0x083c8083, 0x039c00ff, 0x8fc092f0, 0x9c00ef20, -0xc24bf013, 0x00ff10bf, 0x0ff703fc, 0xff012bc4, 0xb003fe00, 0x4055e83f, -0x07fc20fb, 0x1fc00ff2, 0x00000602, 0x00000000, 0x40310802, 0x036c02d3, -0x94d025f0, 0x5c421f20, 0xc0217000, 0x024f80a6, 0x0d70035c, 0xd70025c0, -0x70227c20, 0x4130c801, 0x074c04c7, 0x08c40d39, 0x00000420, 0x00000000, -0x03bca013, 0x3bc404d1, 0x9440b110, 0x44009d03, 0x42051000, 0x00dd0024, -0x4f1003dc, 0xf1402440, 0xb0027400, 0x01b44009, 0x074411f1, 0x4ec00db1, -0x00000200, 0x00000000, 0x0032a007, 0x0b3400c1, 0xc34010d0, 0x14400d00, -0x4004d080, 0x000d0000, 0x7c500316, 0xc5811140, 0x40023400, 0x00b14000, -0x030402c5, 0x1c400c90, 0x00000a00, 0x00000000, 0x02788004, 0x071401c1, -0x7b421e10, 0x94010d01, 0x00165807, 0x012d0048, 0x1c100714, 0xe1215044, -0x92063401, 0x0269501b, 0x878509f5, 0x1a081f90, 0x00000200, 0x00000000, -0x00341012, 0x033c00c3, 0x034161f2, 0x5c004f00, 0xe0087013, 0xa0cd0832, -0x0c71031c, 0xc50011c0, 0x72033400, 0x2231c000, 0x030c08c7, 0x48c00cb0, -0x00000040, 0x00000000, 0x003db002, 0x43ce80ff, 0x34e80ff8, 0xec007f01, -0xc08db003, 0x00bf003f, 0x8fb82bfc, 0xff011fc0, 0xf007fc00, 0x020ec00a, -0x43fd08eb, 0x0bc18ef0, 0x00000660, 0x00000000, 0x0137a015, 0x1b7c12db, -0x24c01d34, 0x7c00d300, 0xc00da800, 0x00130016, 0xccf0037c, 0xd40024c3, -0x301a4d05, 0x20340805, 0x1b6c06db, 0x54c12df0, 0x00000e00, 0x00000000, -0x02398812, 0x23b400e1, 0x3c600c10, 0xb420eb08, 0x400e1003, 0x00601010, -0x0ed003b0, 0xe1402840, 0x5022840e, 0x0001400e, 0x338412f1, 0x48404ed0, -0x00000620, 0x00000000, 0x02710083, 0x17b401e1, 0x68401e12, 0xb401e900, -0x40181007, 0x81e81078, 0x1fd227b6, 0xed807a42, 0x9007a481, 0x287a4014, -0x07a425e9, 0x0c405ed0, 0x00000402, 0x00000000, 0x40332832, 0x0370e0d9, -0xb0406c11, 0x3001d100, 0x080c1003, 0x01d10074, 0x0cd00336, 0xc1003650, -0x50030600, 0x802340bd, 0x0f0400c1, 0x48400dd0, 0x00000c20, 0x00000000, -0x0015a817, 0x0170025b, 0x1cd04730, 0xf4877940, 0x90271401, 0x057b01de, -0x06d0017c, 0x5f019ec0, 0x30016c00, 0x009ee6a7, 0x04ec606b, 0x5cd403f0, -0x00000620, 0x00000000, 0x40070012, 0x087c1217, 0x07c401f3, 0x7c101f01, -0xc9007000, 0x001f4407, 0x01f0007c, 0x132485c0, 0xf0007c00, 0x0405e001, -0x287c021f, 0x4bc011f0, 0x00000c00, 0x00000000, 0x00270810, 0x164c05db, -0x23e03930, 0x4c009301, 0xc0093402, 0x00930024, 0x59f2026c, 0x9f0024c8, -0x70023c00, 0x30e25009, 0x404c4193, 0x40d001f0, 0x00000c20, 0x00000000, -0x40a60001, 0x1e440791, 0x27e03910, 0x04009100, 0x40091002, 0x00918024, -0x39d0024c, 0x9b202440, 0xb0127400, 0x00e44009, 0x00440091, 0x044001d0, -0x00000800, 0x00000000, 0xc420a018, 0x02640091, 0xa74a0990, 0x4400d1c0, -0x50091003, 0x00910834, 0x09d00244, 0x91802441, 0x50127400, 0x00a46009, -0x41450891, 0x604001d8, 0x00000200, 0x00000000, 0x02202010, 0x22050881, -0x21488c15, 0x061c8182, 0x41c81822, 0x1c810720, 0x89d02207, 0x89852040, -0x90523488, 0x052143c8, 0x22040891, 0x404888d8, 0x00000080, 0x00000000, -0x0586b01d, 0x082c9613, 0x87436130, 0x0d061305, 0xc0611058, 0x06114184, -0x61f0084c, 0x030114d1, 0x70107c16, 0x4106c861, 0x584c1653, 0x74d161f0, -0x00000ac0, 0x00000000, 0x0127b819, 0x1a7e0497, 0x2fc04bf0, 0xfe84bf01, -0xc04bf812, 0x04bf012f, 0x49f01a58, 0x9c052bc4, 0xf002bc04, 0x052ec44f, -0x13fd049f, 0x67c04af0, 0x00000e60, 0x00000000, 0x022fa018, 0x324c0293, -0x2f8d0bb0, 0x7c189f21, 0xc049721a, 0x0c9f2324, 0x2bf05a7e, 0x93022f88, -0x3012ac00, 0x012cc069, 0x36ac04b3, 0x67c65df8, 0x00000e00, 0x00000000, -0x0285089c, 0x08c40211, 0x07654110, 0x74001d05, 0x40e59018, 0x025d0394, -0x71d00874, 0x190a8740, 0x51204404, 0x438442e1, 0x08444401, 0x736040d0, -0x00000c22, 0x00000000, 0x21232010, 0x328486a5, 0xa3480818, 0x14008d08, -0x4148101a, 0x2c8c1020, 0x6cd01236, 0x89012040, 0x14022416, 0x04204048, -0x32241281, 0x434138d0, 0x00000e80, 0x00000000, 0x0025a818, 0x02c402b5, -0x27480912, 0x74009d02, 0x40099082, 0x049d0224, 0x01d80274, 0x99202740, -0x50026440, 0x00344009, 0x12644091, 0x634019d0, 0x00000620, 0x00000000, -0x40252805, 0x024d0097, 0x674009b4, 0x5c409f20, 0xd0193412, 0x029f00a4, -0x01f00274, 0x930026c8, 0x20226c20, 0x0124f009, 0x0a6c0091, 0x174009d0, -0x00000e20, 0x00000000, 0x00210014, 0x027c009b, 0x27c809f0, 0x7c489f00, -0xcc393016, 0x209f0027, 0x01f1027c, 0x970527c0, 0xf0065c00, 0x0027c038, -0x025c009f, 0x53c009f2, 0x00000600, 0x00000000, 0x00050814, 0x007c0413, -0x07c801f0, 0x3c001f01, 0xc001f008, 0x0213c087, 0x1172004d, 0x038205c2, -0xb4047800, 0x0885c021, 0x005c0007, 0x50c00172, 0x00000420, 0x00000000, -0x00142014, 0x01740251, 0xdf402710, 0xf4005d00, 0x4007d001, 0x005b8017, -0x0310014c, 0x51c09d40, 0xb44d8400, 0x029c4005, 0x01c40071, 0x50500730, -0x00000200, 0x00000000, 0x0022a014, 0x037400d1, 0x73412c58, 0x3600cd00, -0x4c0dc803, 0x40c11033, 0x0cd40304, 0xc1803560, 0xd0001400, 0x0035400c, -0x031600c5, 0xd0440c50, 0x00000a00, 0x00000000, 0x01188004, 0x02b400a1, -0x1b400e10, 0xb440ed14, 0x400ed213, 0x01c10173, 0x1e900704, 0xc1005140, -0xd0018404, 0x00304c4f, 0x07c400e1, 0x14405e10, 0x00000200, 0x00000000, -0x00e81014, 0x073c01e3, 0x7b401e50, 0xbc89ef00, 0xc81ef037, 0x17e1017b, -0x5ef0478c, 0xe10839c0, 0xf0079c53, 0x4049c75e, 0x079c41e7, 0x54d05e70, -0x00000040, 0x00000000, 0x4031b010, 0x1b7c00df, 0x07c00170, 0x7c04df00, -0xc02df003, 0x00df05b7, 0xac70137c, 0xdf001641, 0xb0035c04, 0x1017c02c, -0x037c001f, 0x43c18d70, 0x00000660, 0x00000000, 0x006fa002, 0x0fce8173, -0x6fc01730, 0xec91f300, 0x813fb047, 0x01f7147c, 0x1f3047fc, 0xff206cc8, -0x3005cda1, 0x911ec11f, 0x07cc01e3, 0x08c01f30, 0x00000e00, 0x00000000, -0x00198011, 0x92860021, 0x39c20600, 0xb400e102, 0x500ed003, 0x00ec0838, -0x0e1007f4, 0xfd000852, 0x50018400, 0x003c400e, 0xcbc404e3, 0x54400e51, -0x00000620, 0x00000000, 0x00210000, 0x83a400e1, 0x0b410e90, 0xa400e100, -0x400e9063, 0x08ed0038, 0x0e1033b4, 0xed022a40, 0x10019400, 0x042e408e, -0x23a400f9, 0x40410f10, 0x00000400, 0x00000000, 0x00332806, 0x032500c1, -0xc1403010, 0x3402c002, 0x401cd203, 0x0bc90030, 0x0d100334, 0xc9200240, -0x54010400, 0x1034400c, 0x0f240005, 0x18403c50, 0x00000c20, 0x00000000, -0x103da815, 0x016402d1, 0xb7c019b4, 0xe40af242, 0xc00f9023, 0x01ff003c, -0x0d3003fc, 0xff0036c0, 0x38815400, 0x0836c00f, 0x0f6c00d9, 0x74500f30, -0x00000620, 0x00000000, 0x40230201, 0x035c00df, 0x11c00d70, 0x7c00df00, -0xc08df103, 0x10df0037, 0x0df0033e, 0xdf1095c0, 0xf0017c00, 0x00a7e00d, -0x1a5d00db, 0x07c00df0, 0x00000c00, 0x00000000, 0x023f0a80, 0x23fc15f3, -0x3cc10b70, 0xcc00f300, 0xc80fb103, 0x00fb003f, 0x0d3203ec, 0xff201cc8, -0xb021dc00, 0x142fc70d, 0x05dc00ec, 0x04c10ff0, 0x00000c20, 0x00000000, -0x0c862081, 0x08741291, 0x044491d0, 0x6c80d308, 0x400dd083, 0x80dd0037, -0x0d100344, 0xdd0456c0, 0x101d3440, 0x2067480d, 0x2c442011, 0x04480cd0, -0x00000802, 0x00000000, 0x40368001, 0x097480d1, 0x264000d0, 0x4440c900, -0x400dd003, 0x00c50037, 0x1d100344, 0xdd207440, 0x10017400, 0x0077480d, -0x035400d5, 0x04400dd0, 0x00000200, 0x00000000, 0x40200030, 0x033600c1, -0x304004d0, 0x0600c160, 0x400cd003, 0x00cd0033, 0x1d121315, 0xcd001240, -0x10013440, 0x4023400c, 0x020600c5, 0x40500cd0, 0x00000080, 0x00000000, -0x40360000, 0x033c0043, 0x00d00979, 0xc500fb00, 0xc00ff803, 0x00fb003f, -0x0d3417ec, 0xff203480, 0xb4017e00, 0x2027c00f, 0x015c00d7, 0x04c00ff1, -0x00000ac0, 0x00000000, 0xc00f9825, 0x00fe003f, 0x0fc203f0, 0xf480ff00, -0xc40ef003, 0x00ff003f, 0x0ff0a36c, 0xff001f80, 0xf001b400, 0x002fc00f, -0x00fc0033, 0x17c00ef0, 0x00000e60, 0x00000000, 0x003f8003, 0x13de003f, -0x3ec20f30, 0xcc00fb40, 0xc08bf002, 0x08f3033c, 0x0bf102cc, 0x7f202fc0, -0x7000ec08, 0x401cc003, 0x038c2073, 0x0cd00330, 0x00000e00, 0x00000000, -0x88371801, 0x03442a9f, 0x344c0510, 0x040e9122, 0x408ad003, 0x84d50230, -0x0dd82244, 0x5d003740, 0x10034c44, 0x1214400d, 0x83440041, 0x04502110, -0x00000c20, 0x00000000, 0x0033a211, 0xa234408d, 0x30548880, 0x0450c140, -0x4008d003, 0x04c90136, 0x0cd00304, 0x4d003140, 0x510004c0, 0x08044400, -0x83040909, 0x44402010, 0x00000e80, 0x00000000, 0x2035a003, 0x03660195, -0x34480d94, 0x44c1d902, 0x4408d100, 0x00dd0036, 0x4dd00344, 0x5d003740, -0x10036620, 0x0a145a0d, 0x03200049, 0x0c400110, 0x00000620, 0x00000000, -0x0037a882, 0x0174118d, 0xf4c00db0, 0x4c05da00, 0xc01df002, 0x00db02b6, -0x09d0024d, 0xdf0137c0, 0x70004d00, 0x0054c201, 0x074c805b, 0x08c0b531, -0x00000e20, 0x00000000, 0x043d8007, 0x01d410ff, 0x31c00671, 0xfc802510, -0xc23ff00a, 0x00f7107d, 0x0ff0027c, 0xff003e84, 0xf203dc00, 0x007fc80e, -0x17dd0077, 0x1fc017f0, 0x00000600, 0x00000000, 0x00350802, 0x82ad229f, -0x3cf04b30, 0x4c10d341, 0xc60d3003, 0x00d740b4, 0x0d30024c, 0xcf04b7c0, -0xb0004c04, 0x0004c101, 0x234c1013, 0x08c00530, 0x00000420, 0x00000000, -0x04f4a013, 0x434400dd, 0xb4403d10, 0x6c12d100, 0x440d1001, 0x00f140b4, -0x2d10026c, 0xdda83740, 0x100b0403, 0x02b0431d, 0x07440055, 0x4ec1a732, -0x00000200, 0x00000000, 0x00f22003, 0x4b0400cd, 0x00400c94, 0x0403c502, -0x42081003, 0x00d144a4, 0x4c100204, 0x4d20e240, 0x90c82449, 0x00004020, -0x83140241, 0x1c422990, 0x00000a00, 0x00000000, 0x007a0a04, 0x070401fd, -0x58419490, 0xa409a500, 0x401e1437, 0x41f12248, 0x1e1006a4, 0x6d017b40, -0x1027a509, 0x0448489c, 0x07d60165, 0x12401b10, 0x00000200, 0x00000000, -0x08321012, 0x820e18cf, 0xa04408b0, 0x0c08c701, 0xc08c3013, 0x00d38280, -0x8c34030c, 0x4d0c33c0, 0xb8806400, 0x0004c080, 0x031c0003, 0x48c028b0, -0x00000040, 0x00000000, 0x003da802, 0x03dc60ef, 0x3fc00f70, 0xfc08eb10, -0xc08bf011, 0x00df0207, 0x0ff023fc, 0x6f011fc2, 0xf003dc00, 0x401fc08f, -0x03ed08fb, 0x0bc00af0, 0x00000660, 0x00000000, 0x0077a010, 0x81fe00db, -0x0dc00d70, 0x4c01d340, 0xc04d3003, 0x00d34407, 0x0d7082fc, 0xd30037c0, -0x30004c00, 0x0014d001, 0x034c20d7, 0x54c001f0, 0x00000e00, 0x00000000, -0x00399912, 0x01b400e1, 0x104004b2, 0x8400e140, 0x410a1003, 0x06eb0003, -0x0e1002f4, 0xf1003b40, 0x14038000, 0x0038500e, 0x028400e1, 0x494032d0, -0x00000620, 0x00000000, 0x00790004, 0x063401e9, 0x69401a50, 0xc401e100, -0x401a1007, 0x05e1004b, 0x1e5006b4, 0xe1047b40, 0x54040400, 0x04484010, -0x0784010d, 0x0c4018d0, 0x00000400, 0x00000000, 0x20332016, 0x0b3409c1, -0x30400c51, 0x4412c100, 0x480c1005, 0x00c90083, 0x0c102674, 0xc1007346, -0x50030400, 0x0c70400d, 0x074400c9, 0x494088d0, 0x00000c20, 0x00000000, -0x0017a817, 0x09f4037b, 0x1dc00750, 0xcd847348, 0xc2053401, 0x00530017, -0x0571017c, 0x53409fc0, 0x70014c02, 0x005cc605, 0x054d227f, 0x5cc037f0, -0x00000620, 0x00000000, 0x00058012, 0x407c001f, 0x03c001b0, 0x7ca01f00, -0xc401f220, 0x001f2003, 0x01f0007c, 0x0f0047c0, 0xb000bc10, 0x0007d003, -0x287c0317, 0x4bc101f0, 0x00000c00, 0x00000000, 0x00250810, 0x023c109f, -0x24c00830, 0x70029340, 0xc8090402, 0x05830434, 0x5930824c, 0x930027c0, -0x34067c05, 0x0026c229, 0x064c0093, 0x40800934, 0x00000c20, 0x00000000, -0x38262001, 0x0270209d, 0x24440911, 0x74009100, 0x42091002, 0xa1911024, -0x29500254, 0x910a2340, 0x10064400, 0x50245009, 0x6a440391, 0x04408910, -0x00000800, 0x00000000, 0x0464a01c, 0x0274009d, 0x24540910, 0x74009160, -0x40085202, 0x00910024, 0x09100244, 0x91002740, 0x1022e400, 0x8022400b, -0x02441881, 0x61400818, 0x00000200, 0x00000000, 0x00202814, 0x5234008d, -0x20414810, 0x34148105, 0x51485002, 0x28814230, 0x18500a14, 0x81203740, -0x10228408, 0x0220408e, 0x22050881, 0x41508810, 0x00000080, 0x00000000, -0x0006b01d, 0x107e141f, 0x04c24130, 0x7c040301, 0xc0417028, 0x02130584, -0x0130504c, 0x134007c0, 0x30586c16, 0x0d82c163, 0x084c1613, 0x75c16130, -0x00000ac0, 0x00000000, 0x0023a919, 0x82fc00ff, 0x2fd40bf4, 0xbc14ff30, -0xc54bb007, 0x869f0127, 0x0bf002fc, 0x9f002bc0, 0xf1126c04, 0x012fc249, -0x12fc04bb, 0x66c04bf0, 0x00000e60, 0x00000000, 0x802fa018, 0x027c049f, -0x25c14930, 0x4c00b300, 0xcb2d3022, 0x00b31024, 0x0af0027c, 0xa3002cc2, -0x3002cc00, 0x0526c089, 0x024c409f, 0x60c00970, 0x00000e00, 0x00000000, -0x0007181c, 0x087c021f, 0x0c482110, 0x5d161108, 0x44411000, 0x1f130280, -0x01d00074, 0x111016d0, 0x10000404, 0x01844000, 0x0045001d, 0x7140a2d0, -0x00000c20, 0x00000000, 0x00210012, 0x0eb402ad, 0xeb401a94, 0x04428900, -0x40089212, 0x04890462, 0x08d05a34, 0x81002442, 0x10420430, 0x0428404a, -0x52a416ad, 0x40414a50, 0x00000e80, 0x00000000, 0x00252018, 0x02d40095, -0x2e408b90, 0x14048948, 0x44499082, 0x80910026, 0x49d01274, 0x91002440, -0x18034400, 0x083c400b, 0x12e400bd, 0x61400bd0, 0x00000620, 0x00000000, -0x0027a805, 0x0a74029d, 0xa7c029b0, 0x4c029b00, 0xd009a002, 0x009b4026, -0x18f0067c, 0x9340a440, 0x30024c20, 0x0064c009, 0x066c0d9f, 0x14c12970, -0x00000e20, 0x00000000, 0x00258012, 0x0e78009f, 0x25c01872, 0x5c209748, -0xc0087412, 0x009f0035, 0x09f1067c, 0x9f1227c0, 0xf4023d00, 0x00a5d009, -0x065c108f, 0x53c008f0, 0x00000600, 0x00000000, 0x00450810, 0x00bc423f, -0x08c00338, 0x4c001300, 0xc0013000, 0x00134040, 0x11f0004c, 0x034044c0, -0xb0004c00, 0x0306c000, 0x804c8013, 0x50c061f2, 0x00000420, 0x00000000, -0x009ca014, 0x0174005d, 0x15500510, 0x44847100, 0x40051001, 0x005b0014, -0x67d10144, 0x71109846, 0x142d4604, 0x00944205, 0x2d449051, 0x52c005d2, -0x00000200, 0x00000000, 0x0032a014, 0x033400cd, 0x30500c10, 0x0484c950, -0x400c5403, 0x21c10830, 0x1cd00304, 0xc1083042, 0x942f0580, 0x40f2420c, -0x070403c1, 0x52402cd8, 0x00000a00, 0x00000000, 0x04388801, 0x00b4002d, -0x41500210, 0x84002940, 0x404ed003, 0x03e91038, 0x0ed10384, 0xe1103840, -0x90038408, 0x0058480a, 0xc38600f1, 0x16400ed0, 0x00000200, 0x00000000, -0x00781011, 0x073c01ef, 0x38c01c10, 0xcd01eb00, 0xd03f741f, 0x01f30878, -0x1ef0178d, 0xa30078d0, 0xb00f8405, 0x007ec01e, 0x078d01e3, 0x56d01af0, -0x00000040, 0x00000000, 0x0015a810, 0x007c001f, 0x07d001c4, 0x7c000700, -0xc16d305b, 0x00df00b7, 0x05f0237c, 0xdf0033c0, 0x70037c20, 0x0017c20d, -0x037c00cd, 0x43c029f0, 0x00000660, 0x00000000, 0x005d2000, 0x87cc01ef, -0x7cc21f30, 0x8d21f328, 0xc01fb007, 0x01b300fc, 0x1f3007cc, 0xff005fc0, -0x7507fc01, 0x007ec01f, 0x86cc8177, 0x00c03730, 0x00000e00, 0x00000000, -0x00191815, 0x0084082f, 0x08408208, 0x8400a100, 0x400e9003, 0x00af0238, -0x06b103ac, 0xef003b44, 0x1063840a, 0x021e508a, 0x02d510e1, 0x544006b0, -0x00000620, 0x00000000, 0x00090000, 0x030510ed, 0x3a400c10, 0xc400a102, -0x410c1063, 0x00a10030, 0x0a1003a4, 0xcd043b40, 0x50031400, 0x0038500c, -0x63a4087d, 0x00400310, 0x00000400, 0x00000000, 0x00112004, 0x00040205, -0x02422014, 0x04018100, 0x401c140f, 0x009d0130, 0x10100324, 0xc501f340, -0x10030400, 0x0112400c, 0x06340259, 0x10400090, 0x00000c20, 0x00000000, -0x0025a815, 0x074402dd, 0x76c09d30, 0xcd32c330, 0xd01fb083, 0x00d340b4, -0x551003ec, 0x7d0077c0, 0x700ddc00, 0x00a4c075, 0x856c099f, 0x54d00d34, -0x00000620, 0x00000000, 0x00370001, 0x047c101f, 0x45c011f0, 0x7c101f00, -0xc80df043, 0x00df0037, 0x25f1037c, 0xcf2037c4, 0xf0415c82, 0x02b5d041, -0x015c0097, 0x07c02d70, 0x00000c00, 0x00000000, 0x022f0884, 0x038c00eb, -0x32c00e30, 0xcc00f300, 0xc00fb403, 0x0193003f, 0x4338030c, 0x7f003fc0, -0xb0008e01, 0x00a8c02f, 0x01c908b2, 0x00801e30, 0x00000c22, 0x00000000, -0x20122085, 0x00440011, 0x05480154, 0x41001500, 0x420d1003, 0x01b10037, -0x31500344, 0xdd08e640, 0x10004401, 0x00b44131, 0x0144009b, 0x06c01910, -0x00000802, 0x00000000, 0x0014a201, 0x034000d9, 0x36580d11, 0x04a0d110, -0x400d1883, 0x04910833, 0x25100344, 0x550d3748, 0x90934444, 0x00244204, -0x42170055, 0x05406d10, 0x00000200, 0x00000000, 0x00102810, 0x00044001, -0x01400050, 0x04208500, 0x400c1803, 0x00810053, 0x04500305, 0xcd003340, -0x10010400, 0x00004000, 0x021500cd, 0x43400416, 0x00000080, 0x00000000, -0x0006b000, 0x034d00db, 0x36c00d30, 0xcd008320, 0xc00fb003, 0x00d30037, -0x0110034c, 0x5f8037c8, 0xb0034400, 0x0824d00d, 0x015c0017, 0x01c00d30, -0x00000ac0, 0x00000000, 0x001fa805, 0x00fc003f, 0x0fc003f4, 0xfc00bf60, -0xc00ff003, 0x00ff003f, 0x03f003fc, 0xff002ec0, 0xf401fd00, 0x000fc203, -0x00ec002b, 0x16c002f0, 0x00000e60, 0x00000000, 0x003fa003, 0x33dc0cf7, -0x0ce80330, 0xf450f301, 0xc02ff040, 0xb4ef010f, 0x4f3010dc, 0xf3060cc0, -0x3000fc10, 0x013ac003, 0x03844cfb, 0x0cc00f30, 0x00000e00, 0x00000000, -0x203f0801, 0x3a4c0e41, 0x8440a110, 0x7416e180, 0x4a2fd149, 0x82fd2182, -0xef100844, 0xf1098441, 0x10387412, 0x02bc40e1, 0x03440ee1, 0x04402f50, -0x00000c20, 0x00000000, 0x0033a011, 0x030500c5, 0x20414014, 0x3400c107, -0x406cd010, 0x00cd0603, 0x0d100814, 0xc1002040, 0x10c03404, 0x00304104, -0x036400c9, 0x44402d10, 0x00000e80, 0x00000000, 0x08358803, 0x4244a051, -0x25410010, 0x7600d105, 0x400dd000, 0x00dd0017, 0x0d130044, 0xd0000542, -0x10013400, 0x18344904, 0xa36400d1, 0x0c400d50, 0x00000620, 0x00000000, -0x0037a802, 0x2c44a017, 0x14500d30, 0x7c00d040, 0xc00df20a, 0x00df1137, -0x0d10015c, 0xd34094e2, 0x340b7c00, 0x0034d009, 0x036d00db, 0x08d00d30, -0x00000e20, 0x00000000, 0x00358007, 0x42fe082f, 0x5ac09ff1, 0x7c00ff00, -0xc80ff017, 0x00ff303e, 0x0ff4657c, 0xff0096c0, 0xf1007c00, 0x143fe00f, -0x03d800ff, 0x1fc00df2, 0x00000600, 0x00000000, 0x00350802, 0x080c1097, -0xa4c02df1, 0x5c04db10, 0x840d3408, 0x08d30007, 0x4d30036c, 0xd740a4c0, -0x340b7c00, 0x0037c029, 0x035c20c7, 0x08c00df1, 0x00000420, 0x00000000, -0x003ca013, 0x0a4c0091, 0x24400dd2, 0x4423f300, 0x400f1014, 0x02e10817, -0x2e108304, 0xf1000441, 0x1281740a, 0x04bb480d, 0x630400f1, 0x4c507e30, -0x00000200, 0x00000000, 0x00368007, 0x01060285, 0x014000d1, 0x1400c500, -0x440c501c, 0x10c10003, 0x1c100224, 0xc1000440, 0x10003400, 0x00724000, -0x0f1400c5, 0x9c404c50, 0x00000a00, 0x00000000, 0x00788004, 0x45a51161, -0x49541cd0, 0xa409e500, 0x461e1105, 0x21e1004b, 0x1f100684, 0xe1106840, -0x1006b401, 0x017b4012, 0x07842de1, 0x10405e12, 0x00000200, 0x00000000, -0x00301012, 0x010e0487, 0x15c000f0, 0x1c10c740, 0xc00c300b, 0x00c34023, -0x0c34612c, 0xc100b0c0, 0x30083c00, 0x0032c08c, 0x031c04c7, 0x48c00c70, -0x00000040, 0x00000000, 0x043db802, 0x21dc007d, 0x1ec00ff0, 0xdc00fa02, -0xc48ff003, 0x00fd103f, 0x0ef001fc, 0xfb003fc1, 0xf003fc00, 0x013fc40f, -0x23fe24df, 0x0bc14f70, 0x00000660, 0x00000000, 0x0d37a015, 0x004c0117, -0x37c00134, 0x4d13df08, 0xc18d7002, 0x10de0036, 0x4df0024c, 0xd10814c8, -0xf0037c14, 0x0d33c001, 0x434c12d3, 0x54c10d72, 0x00000e00, 0x00000000, -0x01398812, 0x03c40071, 0x3b400e10, 0x8406fd00, 0x400ed003, 0x80e9003b, -0x4fd00284, 0xe1003041, 0xd002b482, 0x003b4006, 0x939402f1, 0x48404ed0, -0x00000620, 0x00000000, 0x00710003, 0x048401a5, 0x7b401210, 0x8401ed00, -0x405ed007, 0x09cd206b, 0x5ed00786, 0xe1007840, 0xd007b445, 0xc27f403a, -0x278405e1, 0x0e401ed0, 0x00000400, 0x00000000, 0x10332812, 0x070521c1, -0x73401d10, 0x0420cd02, 0x400dd00b, 0x00c900f7, 0x0cd00f04, 0xd1023050, -0xd0077400, 0x0033401d, 0x171400c0, 0x4a420cd0, 0x00000c20, 0x00000000, -0x0015a837, 0x1dcc0777, 0x9fc07730, 0xcc005f00, 0xc4057001, 0x005f015f, -0x07f015cc, 0x53005cc0, 0xf01dfc00, 0x001fc037, 0x488c0061, 0x5ed006f8, -0x00000620, 0x00000000, 0x00070012, 0x407c101f, 0x07c101f0, 0x7c801f04, -0xc001f000, 0x000b0407, 0x01f0405d, 0x1f4007c0, 0xf0407c00, 0x0007c101, -0x007c001f, 0x49c001f0, 0x00000c00, 0x00000000, 0x00270810, 0x8e3c409b, -0x24c00930, 0x7e009f10, 0xc2093042, 0x00930024, 0x39d0024c, 0x9b0024c0, -0x70024c05, 0x2020c009, 0x004c0093, 0x40c009f2, 0x00000c20, 0x00000000, -0x00262001, 0x0e740091, 0x24480910, 0x74829d00, 0x4009100a, 0x00910024, -0x39d28264, 0x910026c0, 0x10024503, 0x10a44009, 0x046c8091, 0x04400910, -0x00000800, 0x00000000, 0x0020a018, 0x42740099, 0x24440910, 0x34029d00, -0x4009100a, 0x00910024, 0x08d00365, 0x91002051, 0x108244c2, 0x41244009, -0x19450099, 0x60601950, 0x00000200, 0x00000000, 0x00a02010, 0x0a340281, -0x2141c810, 0x34808d17, 0x50881052, 0x00818720, 0x08d05224, 0x81672040, -0x18720400, 0x022051c8, 0x22240891, 0x40489810, 0x00000080, 0x00000000, -0x0006b01d, 0x007cc01b, 0x84d06130, 0x74141f11, 0xc1613410, 0x14134184, -0x41f0104c, 0x13018441, 0x34184c14, 0x9594c061, 0x584c5613, 0x74d16172, -0x00000ac0, 0x00000000, 0x00a7b819, 0x8afc62bf, 0x2ec84bf4, 0xf4149f01, -0xc0497152, 0x009f012f, 0x49f002dc, 0x9f092fc3, 0xf012fc14, 0x2127c84b, -0x12dd849f, 0x67c04870, 0x00000e60, 0x00000000, 0x01a7a018, 0x4afc06b3, -0x27c029f0, 0xdc10bf85, 0xc1293042, 0x04932127, 0x2bf0123c, 0xbf08270e, -0x30424c86, 0x01afc009, 0x168c109b, 0x60c12bf0, 0x00000e00, 0x00000000, -0x0107081c, 0x10342659, 0x8344a1d8, 0x55001d11, 0x40605408, 0x42110597, -0x019100e6, 0x19038640, 0x12004504, 0x004740a5, 0x544c0217, 0x704071d0, -0x00000c20, 0x00000000, 0x0322a010, 0x02340889, 0x230048d0, 0x04108d04, -0x40485052, 0x08a90223, 0x28c00ab4, 0x8d042340, 0x90420402, 0x91b74108, -0x0a243481, 0x40404cd0, 0x00000e80, 0x00000000, 0x0025a818, 0x02748099, -0x274009d0, 0x44209900, 0x4409102a, 0xa0990227, 0x09d046f4, 0x9d01a740, -0x94064400, 0x20074049, 0x50440095, 0x604801d0, 0x00000620, 0x00000000, -0x40278805, 0x027c0293, 0x274809d2, 0x5c209d01, 0xc0097002, 0x00994027, -0x09f88274, 0x9f0827e0, 0xb0024400, 0x0007c029, 0x00640093, 0x14d001d0, -0x00000e20, 0x00000000, 0x00258014, 0x027c0097, 0x67c209f0, 0x7c009f02, -0xc009f042, 0x00971023, 0x09b0026c, 0x9b1066c0, 0x70027c00, 0x8007c009, -0x007d009f, 0x53c001f0, 0x00000600, 0x00000000, 0x20010814, 0x907c0212, -0x87a00130, 0x7c400300, 0xc001f288, 0x00330004, 0x813108fc, 0x0f1007c0, -0xf0003c00, 0x0044d021, 0x88440013, 0x50c01072, 0x00000420, 0x00000000, -0x0014a014, 0x89f43071, 0x17e2051d, 0xf6007100, 0x4005d00d, 0x40530014, -0x1710015c, 0x7d0017c0, 0xd0817401, 0x000c4005, 0x08ec0051, 0x50400330, -0x00000208, 0x00000000, 0x8032a014, 0x833412c1, 0x33420c50, 0x7409c908, -0x400cc80f, 0x00c50030, 0x0c140334, 0xcd003340, 0xd8033401, 0x0034620c, -0x170400d9, 0x50400c51, 0x00000a00, 0x00000000, 0x00308005, 0x04b40021, -0x79444e52, 0xb480e111, 0x481ed043, 0x802d2338, 0x0e9004b4, 0x6d003908, -0xd003b410, 0x013040dc, 0x77e580c9, 0x14404e90, 0x00000200, 0x00000000, -0x01781015, 0x07bc01e3, 0x7b409e50, 0xb441eb45, 0xd11ef005, 0x81e74570, -0x163007bc, 0xad127b40, 0xf027bc01, 0x4378c05e, 0x278d01eb, 0x54d03c70, -0x00000040, 0x00000000, 0x1135b810, 0x0274001f, 0x37808da1, 0x7c005f00, -0xc0adf001, 0x00130837, 0x0d70005c, 0x1f02b7c0, 0xf0837c00, 0x13b7c10d, -0x1b5c5ed7, 0x43c16d70, 0x00000660, 0x00000000, 0x04bfa000, 0x85fe09bf, -0x7fc2cff0, 0xe981ff24, 0xc81ff007, 0x01ff107d, 0x1f7007fc, 0xfb087cc8, -0xe067cc21, 0x007cc01f, 0x07c409f9, 0x00c01ff0, 0x00000e00, 0x00000000, -0x02398815, 0x109c00ad, 0x3b440ec0, 0x8400ad10, 0x400ec000, 0x00292038, -0x0e1000b4, 0x65003c10, 0xd0238482, 0x0038424e, 0x5b868ce1, 0x54408ed2, -0x00000620, 0x00000000, 0x02390000, 0x01b600ad, 0x3b608ed1, 0x8400e900, -0x400ed043, 0x00ed0438, 0x06500324, 0xa1003c40, 0xda0b8400, 0x4232450c, -0x038400e1, 0x02400ed0, 0x00000400, 0x00000000, 0x00332804, 0x1a10018d, -0x33402cc0, 0x00000d80, 0x480cd000, 0x400d9830, 0x08100034, 0x05043042, -0xd1030400, 0x0032401c, 0x0f4500c1, 0x12440cd0, 0x00000c20, 0x00000000, -0x003da815, 0x0a74005f, 0x3fc0afd0, 0x4c001b00, 0xd00ff006, 0x00df007c, -0x0d70036c, 0xd1003c80, 0xc003cd00, 0x4032e01f, 0x8f4c00f3, 0x56900cf0, -0x00000620, 0x00000000, 0x20370001, 0x205c180f, 0x33c41df0, 0x1c00df00, -0xc00cf002, 0x001b0037, 0x04f0007c, 0xd70836c0, 0xf2077c00, 0x0035c00d, -0x1b6c00cf, 0x05c00df0, 0x00000c00, 0x00000000, 0x803f0880, 0x03ec097f, -0x3ec00ef0, 0xfc251330, 0xc00d3020, 0x40ff003c, 0x45f003fc, 0x5f003cc0, -0xf003cc02, 0x203fc00f, 0x07cc00f3, 0x00c00d30, 0x00000c22, 0x00000000, -0x00362081, 0x2744531d, 0x34600dd0, 0x74025108, 0x440db000, 0x20170034, -0x15d00074, 0x5f003440, 0xd0034403, 0x0035c00d, 0x034400d1, 0x04400db0, -0x00000802, 0x00000000, 0x0034a001, 0x0064005d, 0x34400dd2, 0x74021150, -0x400d5803, 0x00dd0035, 0x0dd00374, 0x8d003441, 0xd0035480, 0x0077400d, -0x234500d9, 0x04601d10, 0x00000200, 0x00000000, 0x00302010, 0x800480cd, -0x32400cd1, 0x36008180, 0x500c1400, 0x00050031, 0x04c00034, 0x85003050, -0xd0031000, 0x0075000c, 0x034400c0, 0x40501d90, 0x00000080, 0x00000000, -0x003eb000, 0x016e005d, 0x3cd00fd0, 0x7c601300, 0xc00f1003, 0x40df203d, -0x05f00374, 0x1d003cc4, 0xf003dc00, 0x0037c00f, 0x034c00eb, 0x00d00d30, -0x00000ac0, 0x00000000, 0x003fb805, 0x03fc00ff, 0x3dc00ff8, 0xfc403f00, -0xc00ff000, 0x0036003e, 0x07f000fc, 0x3f803fc4, 0xf003ec00, 0x503fc00f, -0x03fc00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x102fa203, 0x83bc0873, -0x1fc14f30, 0xce003328, 0xc06b3088, 0x02f70a3f, 0x0ff003cc, 0xf7080fc6, -0x7080ee04, 0x081fc02f, 0x03cc003f, 0x0cc043f0, 0x00000e00, 0x00000000, -0x06b70801, 0x03f42081, 0xaf482d14, 0x44520100, 0x406bb000, 0x24f1003f, -0x01d003c5, 0xd9422300, 0xb2007000, 0x0837424d, 0xc344401d, 0x0440a5d0, -0x00000c20, 0x00000000, 0x2123a011, 0x03344481, 0x93400c10, 0x040c0100, -0x4028d013, 0x04c51133, 0x1cd00304, 0xcd604340, 0x18d20402, 0x2013404c, -0x8334005d, 0x455014d0, 0x00000e80, 0x00000000, 0x0135a803, 0x03761091, -0x67601d11, 0x44205508, 0x4009d083, 0x00d10037, 0x11d18344, 0xdd206744, -0x90023400, 0x0017624d, 0x0160625c, 0x0c4005d0, 0x00000620, 0x00000000, -0x0027a802, 0x037c40d3, 0x53c01d30, 0xc5011301, 0xc089f0c3, 0x00d72037, -0x05f0034c, 0xd70847c0, 0x7006ec00, 0x2017812d, 0x0f7c005f, 0x09c48cf0, -0x00000e20, 0x00000000, 0x40398007, 0x83f403ff, 0x2fc805f0, 0x3c453b00, -0xc009b00f, 0x00ff0037, 0x0bf003f4, 0xf1002fc2, 0xf00f7800, 0x801e821f, -0x8bdd007f, 0x1fc20fe0, 0x00000600, 0x00000000, 0x00250802, 0x034c81df, -0x14d00d34, 0x4c014b00, 0xd0093083, 0x00d3c030, 0x0db0037c, 0xdb4007c0, -0xb0834c00, 0x0094c01d, 0x0f4c0a53, 0x08c10df0, 0x00000420, 0x00000000, -0x0034a013, 0x1b80019d, 0x24400d10, 0xc4005000, 0x01094003, 0x00f1003c, -0x1b5003fc, 0xf1002704, 0xb10fe88a, 0x0044881d, 0x876c6041, 0x4e803fd0, -0x00000200, 0x00000000, 0x0022a007, 0x932500cd, 0x72498810, 0x04200900, -0x033c1003, 0x00d10031, 0x1c180334, 0xc8101702, 0x9044048a, 0x01d3612c, -0x02140185, 0x1c4294d2, 0x00000a00, 0x00000000, 0x00788004, 0x27a409ad, -0x62401e10, 0x84016120, 0x401e5807, 0x21e10279, 0x1a402794, 0xe1c05b41, -0x91458401, 0x4459401f, 0x0fb50925, 0x124016d1, 0x00000200, 0x00000000, -0x00301012, 0x032c00cf, 0x12402832, 0x0c000b04, 0x42083083, 0x00c12031, -0x8cb00374, 0xcb400340, 0xb0010424, 0x0093c00c, 0x0b1c4057, 0x48c08cf0, -0x00000040, 0x00000000, 0x003db802, 0x0bdc00bf, 0x2dc08ff0, 0xfd407f80, -0xc80bf003, 0x00df0c36, 0x0bf04bfc, 0xee023fc0, 0xe003fd00, 0x221ad80e, -0x03ec007b, 0x0bc20ef0, 0x00000660, 0x00000000, 0x0827a015, 0x072d80cf, -0xb4c20b32, 0x4c035384, 0xc0593203, 0x38d32134, 0x05300b4d, 0xd7000fc0, -0xb0007c00, 0x2014c05d, 0x066c005f, 0x57c00d30, 0x00000e00, 0x00000000, -0x00398812, 0x1b8400ed, 0x39080e15, 0xc6306110, 0x408b1003, 0x04f10338, -0x4e1013fc, 0xe9003f08, 0xb503dc04, 0x801ac54f, 0x03ac007d, 0x4b406e32, -0x00000620, 0x00000000, 0x00790003, 0x97e401fd, 0x78001812, 0xa4416188, -0x401e14c3, 0x05e14870, 0xbe100384, 0xed084b0a, 0x10059409, 0x805840de, -0x0796016d, 0x0f401e94, 0x00000400, 0x00000000, 0x08332812, 0x030608cd, -0x30400c12, 0x24414148, 0x581c110f, 0x00d18030, 0x2c100374, 0xc9003744, -0x94071400, 0x2882433c, 0x0324014d, 0x4b401c10, 0x00000c20, 0x00000000, -0x0015a817, 0x01ec007f, 0xdcc02630, 0xac455324, 0xc055300d, 0x00530014, -0x3730014c, 0x57411fc0, 0x300ddc80, 0x805ce635, 0x09dc097f, 0x5fc437b0, -0x00000620, 0x00000000, 0x10070012, 0x007c921f, 0x87d001f1, 0x5d001f04, -0xc201f000, 0x801f1007, 0x01f0007c, 0x170047c4, 0xf02c7c00, 0x1207e081, -0x407d081f, 0x4bc091f1, 0x00000c00, 0x00000000, 0x00270810, 0x024d009f, -0x64c109f8, 0x7c01d300, 0xc0093042, 0x00930027, 0x49b0026c, 0x930027c1, -0x34227c00, 0x14274005, 0x024c019f, 0x43c059f0, 0x00000c20, 0x00000000, -0x00262001, 0x0264228d, 0xe05009d9, 0x74219111, 0x40291082, 0x809b0027, -0x29100255, 0x91502740, 0x100e7402, 0x00274001, 0x064c018d, 0x074019d0, -0x00000800, 0x00000000, 0x0024a018, 0x0264809d, 0x244009d0, 0x76049112, -0x41891002, 0x00912023, 0x09900264, 0x91c02740, 0x18033490, 0x022540a1, -0x06402895, 0x634009d8, 0x00000200, 0x00000000, 0x02202010, 0x0224089d, -0x205149d0, 0x76158105, 0x41481782, 0x08890123, 0x18102215, 0x81c22340, -0x10233400, 0x00234088, 0x2624288d, 0x436008d9, 0x00000080, 0x00000000, -0x0586b01d, 0x004e025f, 0x04d441d0, 0x7c040301, 0xc0413278, 0x021302c7, -0x41b0586c, 0x13058741, 0x30587e34, 0x2017c169, 0x084d165f, 0x77c141f2, -0x00000ac0, 0x00000000, 0x012fb819, 0x0a5e04be, 0x2bd00bf2, 0xfc149f40, -0xc34be006, 0x269f0267, 0x0bf0127c, 0x9f512fc4, 0xd012fc00, 0x003ec449, -0x129c04bf, 0x67c20ff0, 0x00000e60, 0x00000000, 0x0127a018, 0x424d22bf, -0x2cc109b0, 0x0c909304, 0xc90b3036, 0x149301a7, 0x4b300adc, 0xb30326c0, -0x3056ce04, 0x002ec01a, 0x02cc00bf, 0x63c04b30, 0x00000e00, 0x00000000, -0x0107081c, 0x0044841d, 0x04520310, 0x44001b20, 0xc0011100, 0x02111107, -0x21109078, 0x11008440, 0x10014c42, 0x2007c001, 0x8054951d, 0x734021b2, -0x00000c20, 0x00000000, 0x04a3a010, 0x0284048d, 0x20400a12, 0x3510c100, -0x4908d032, 0x208120a3, 0x28101a11, 0x8901a040, 0x10422442, 0x00204418, -0x0614018d, 0x43408810, 0x00000e80, 0x00000000, 0x0825a818, 0x0244409d, -0x24450b10, 0x24848900, 0x4819d002, 0x20910027, 0x29120274, 0xd940a450, -0x14020580, 0x00274019, 0x0654019d, 0x63404990, 0x00000620, 0x00000000, -0x0227a805, 0x824c059f, 0x24c00930, 0x6c009301, 0xc809f016, 0x00930027, -0x0834025c, 0x8b02e4c2, 0x32026400, 0x00a4c009, 0x025c239f, 0x17c20930, -0x00000e20, 0x00000000, 0x00658014, 0x027c049f, 0x27c40870, 0x5c00df34, -0xc0093526, 0x009f4025, 0x09f00265, 0x970065c0, 0xf0527c40, 0x0227c009, -0x0274009f, 0x53c009f0, 0x00000600, 0x00000000, 0x00050814, 0x00bc0813, -0x00d023f2, 0x7c001300, 0xc0113400, 0x00131003, 0x31f0000c, 0x134004d0, -0x30007c00, 0x0484c011, 0x244c0113, 0x50c021f0, 0x00000420, 0x00000000, -0x0014a014, 0x01744071, 0x9c4405d0, 0x74005100, 0xc0171201, 0x00513815, -0x27d0056c, 0x75001440, 0x5001dc02, 0x081ec427, 0x8dc5037b, 0x504007d0, -0x00000200, 0x00000000, 0x0032a014, 0x033410d1, 0x10480cd0, 0x3400c120, -0x400c0003, 0x00d54833, 0x0cd00704, 0x45003440, 0x100c3484, 0x02304281, -0x034000d1, 0x50400cd0, 0x00000a00, 0x00000000, 0x01788005, 0x04b400e1, -0x104002d0, 0xf400a100, 0x402a1023, 0x08e50031, 0x2fd84394, 0xa5033104, -0x5043f400, 0x004e04c2, 0x938442c9, 0x144014d0, 0x00000200, 0x00000000, -0x417c1015, 0x03b401e3, 0x78401ef0, 0xbc016300, 0x40123037, 0x01f7007b, -0x16d00785, 0x670338c0, 0x3007bc81, 0x0048c056, 0x8d8c4123, 0x54c41af0, -0x00000040, 0x00000000, 0x0275b810, 0x007c00df, 0x37c000f0, 0x7c661f40, -0xc005d20b, 0x01db10b5, 0x04f0036c, 0x9f0136c0, 0xb5011e00, 0x2003c411, -0x877c001f, 0x43c005f2, 0x00000660, 0x00000000, 0x007fa000, 0x87fc01ff, -0x7cc01f70, 0xcc03f700, 0xc897f027, 0x0df70cfc, 0x13b006cc, 0xf7607fc0, -0x3004dc29, 0x024cc8d3, 0x07cc0d73, 0x00c48e30, 0x00000e00, 0x00000000, -0x02398815, 0x00b600ad, 0x380c4212, 0xac00a146, 0x500ad033, 0x08e1023d, -0x021002bc, 0xa1103b40, 0x1002d400, 0x0b09c4c3, 0x0ac48c71, 0x5440c6b0, -0x00000620, 0x00000000, 0x00390000, 0x03b4086d, 0x38050e50, 0x84006500, -0x000cd003, 0x04cd0038, 0x86100280, 0xed443b40, 0x5043b020, 0x008e40e2, -0x21960ca1, 0x01448b10, 0x00000400, 0x00000000, 0x00772804, 0x0036800d, -0xf0407010, 0x24200100, 0x4000d003, 0x00c92030, 0x40100224, 0x8940b340, -0x5a0d0480, 0x00014001, 0x06544281, 0x10401490, 0x00000c20, 0x00000000, -0x013da815, 0x037c11df, 0xb0d01d70, 0xcc015700, 0xc001f003, 0x00ff003c, -0x3134024c, 0x9f00bfe1, 0x70045e40, 0x01c6c003, 0x8bdc28a3, 0x55d04534, -0x00000620, 0x00000000, 0x20370001, 0x007c44df, 0xa7c001f2, 0x7c885f40, -0xc00df203, 0x00d70033, 0x2170023c, 0xd7083740, 0xa4017e00, 0x4087c011, -0x6b6900df, 0x078205f2, 0x00000c00, 0x00000000, 0x003f0880, 0x037c01f3, -0x3cc00ef2, 0xce003306, 0xc00f3003, 0x00e3003d, 0x5630024c, 0x83143cc0, -0x32c18c02, 0x080c4803, 0x00cc003f, 0x03c00330, 0x00000c22, 0x00000000, -0x08362081, 0x007403d1, 0x344001d0, 0x44181100, 0x40015083, 0x00d50034, -0x31102650, 0xd1603781, 0x50015483, 0x0007c029, 0x8a402939, 0x074125b0, -0x00000802, 0x00000000, 0x0034a001, 0x83740a11, 0x34500dd0, 0x10000104, -0x411c1203, 0x20d10036, 0x01138344, 0x91503142, 0x10084480, 0x21854031, -0x0544005d, 0x07400510, 0x00000200, 0x00000000, 0x00302010, 0x00340001, -0x204000d2, 0x04200100, 0x40085003, 0x00c50032, 0x001a0314, 0x41803340, -0x50021420, 0x08034000, 0x80054049, 0x43400492, 0x00000088, 0x00000000, -0x0036b000, 0x037c0013, 0x34c00df0, 0xd4800340, 0xc0053083, 0x00d3003c, -0x05340344, 0x910039c0, 0x30034e80, 0x0005c401, 0x004c009f, 0x03c00132, -0x00000ac0, 0x00000000, 0x003fb805, 0x00fc003f, 0x3bd002f0, 0xfd203b00, -0xc403c003, 0x00ff003d, 0x03e203fc, 0xff003dc0, 0xf001fc00, 0x000bc003, -0x00fc00bf, 0x17c007f0, 0x00000e60, 0x00000000, 0x003fa003, 0x23fc4cff, -0x3ec043b8, 0xf884f301, 0xc44ff003, 0x2c730b0f, 0x0f3011fc, 0xf3260fc9, -0x3102fc00, 0x023cc48b, 0x038c0c33, 0x0cc08fb0, 0x00000e00, 0x00000000, -0x003b0801, 0x20740ed1, 0xbc41c9b0, 0x84bcf124, 0x49cf1203, 0x06450183, -0x6f104930, 0xf1088741, 0x10387408, 0x423d48ad, 0x0bc40201, 0x1c406f10, -0x00000c20, 0x00000000, 0x0032a011, 0x13140005, 0x30440414, 0x0400c983, -0x420c5203, 0x0c410303, 0x0c901934, 0xc1000140, 0x10c23414, 0x41344848, -0x23040801, 0x4c402d90, 0x00000e80, 0x00000000, 0x08358803, 0x2074b811, -0x3040ad10, 0x0400c900, 0x420d1003, 0x02552087, 0x0d908174, 0xd1201340, -0x10067480, 0x0035404c, 0x03460011, 0x1c4a0d90, 0x00000620, 0x00000000, -0x0037a800, 0x855c2095, 0x34c00110, 0x4d00db40, 0xc40d7203, 0x01d30237, -0x0db0097c, 0xd340b5c2, 0x30077440, 0x0834c009, 0x034d0253, 0x00c00db1, -0x00000e22, 0x00000000, 0x083d8087, 0x84fc0097, 0x3dd80bf0, 0xfc20f720, -0xc10f7003, 0x08ff007f, 0x0d7089fc, 0xff1007c0, 0xf101bc20, 0x0c3fc70b, -0x03fc093f, 0x1fc00f70, 0x00000602, 0x00000000, 0x00310802, 0x030c0017, -0x34c821f8, 0x7c40d322, 0xd00d3103, 0x22d380b0, 0x0d340b0c, 0xd340b4d0, -0xb4037c40, 0x0037c019, 0x034d02d3, 0x28c00d70, 0x00000420, 0x00000000, -0x003ca013, 0x22444011, 0x7c4409d2, 0xf441f340, 0x403f1003, 0x00db8034, -0x1f108344, 0xf3081440, 0xf2037412, 0x00fb4029, 0x33840091, 0x4c400e10, -0x00000200, 0x00000000, 0x0032a003, 0x0a042f45, 0x724001d0, 0x3648c900, -0x481c5003, 0x00052800, 0x0c100204, 0xc9080064, 0x94023411, 0x00f34828, -0x0b260091, 0x1c400c50, 0x00000a00, 0x00000000, 0x08788000, 0x048481e1, -0x7f4010d2, 0xb601e100, 0x411c1303, 0x21650058, 0x1e100784, 0xe1306861, -0xd407f401, 0x047f421e, 0x07a629e1, 0x74401f10, 0x00000200, 0x00000000, -0x00301016, 0x030c0007, 0x32c08cd0, 0x3800cb02, 0xc00c1023, 0x00c54020, -0x0c302b0d, 0xcb008080, 0xb4223c80, 0x0133c008, 0x032c0a83, 0x48c00c70, -0x00000040, 0x00000000, 0x0435b800, 0x017d009f, 0x30c08df0, 0x7810d704, -0xc18df073, 0x00db0037, 0x0df0836c, 0xdf0037c0, 0xf4033c18, 0x00b3c00d, -0x035c28df, 0x0bc0acf0, 0x00000660, 0x00000000, 0x0037a015, 0x00644057, -0xb6c4053a, 0x4d13cf04, 0xc95d304b, 0x005f0006, 0xedf0017c, 0xd71037c0, -0xf0024c91, 0x2034d21c, 0x734c0053, 0x44c00d30, 0x00000e00, 0x00000000, -0x133d8810, 0x80ac00c1, 0x3b400630, 0xc400ed01, 0x4a4e3093, 0x006d0018, -0x4ed001b4, 0xcd002bc3, 0x70038404, 0x00b0400e, 0x83840061, 0x4c404c10, -0x00000624, 0x00000000, 0x017900a3, 0x07040165, 0x7b401e91, 0x8401fd00, -0x445e9303, 0x01ed0068, 0x1e1007b4, 0xed007b40, 0xd006a401, 0x4178401f, -0x070401e1, 0x0440de14, 0x00000402, 0x00000000, 0x20332812, 0x436028c1, -0x33400c94, 0x0400cd08, 0x420c9003, 0x0bcd00f4, 0x0cd00734, 0xcd207740, -0x50072480, 0x0032401c, 0x03040ac1, 0xc84c0d10, 0x00000c20, 0x00000000, -0x0015a816, 0x01cc4177, 0x1fc44730, 0x44207d00, 0xd0053001, 0x017f095c, -0x063045fc, 0x7701dfc0, 0xf015ec80, 0x001cc017, 0x01cc0973, 0x5c500730, -0x00000620, 0x00000000, 0x00070012, 0x007c001f, 0x87c00170, 0x7c821f00, -0xc8217000, 0x101f0407, 0x21f0407c, 0x1f0405c0, 0xf0005d00, 0xa005c081, -0x083d001f, 0x4bd001f0, 0x00000c00, 0x00000000, 0x00270810, 0x024c089f, -0x66c20830, 0x7c009f02, 0xc049a102, 0x00830027, 0x0930020c, 0x930024c0, -0xf0026c20, 0x1027c009, 0x264c0093, 0x41c00934, 0x00000c20, 0x00000000, -0x18262000, 0x0e440091, 0xe4400915, 0x74129d00, 0x42399082, 0x00910827, -0x29120244, 0x911826d1, 0xd0027400, 0x10a74209, 0x1a4c0081, 0x04400931, -0x00000800, 0x00000000, 0x0020a018, 0x2244008d, 0x24400910, 0x34009d04, -0x4109d802, 0x00910027, 0x09900244, 0x94002440, 0xd0036401, 0x00234089, -0x02440099, 0x614009d0, 0x00000200, 0x00000000, 0x10a02010, 0x8a040281, -0x215bc818, 0x34408d00, 0x4208d00a, 0x3c812723, 0x09147205, 0x81072040, -0xd0723400, 0x00234148, 0x22041c89, 0x40408810, 0x00000080, 0x00000000, -0x0004301c, 0x014d001f, 0x04c26130, 0x74141f95, 0xc140b000, 0x06134187, -0x4130184c, 0x11418441, 0xf0186c14, 0x4517c041, 0x584c061b, 0x75c161b0, -0x00000ac0, 0x00000000, 0x08a7b039, 0x0bfc22bf, 0x26c04bf0, 0x7c949f05, -0xc149320a, 0x04bf012f, 0x497092fc, 0x9f112fc1, 0xf012fc34, 0x2527c54b, -0x125d04a7, 0x67c049f0, 0x00000e64, 0x00000000, 0x01a7a218, 0x42cc06bf, -0xafc029f2, 0x7412bf01, 0xc06bf01a, 0x049f0127, 0x2bf0127c, 0xbf0424c1, -0xf01a4c02, 0x04afc04b, 0x5acc269f, 0x63c02914, 0x00000e00, 0x00000000, -0x0186089c, 0x00440651, 0x874421d0, 0x1c461d21, 0x44411098, 0x021d0517, -0x00700074, 0x1d018444, 0xd0014504, 0x01874161, 0x1c44005d, 0x73400010, -0x00000c22, 0x00000000, 0x00a1a010, 0xc205228d, 0xa34068d0, 0x36008920, -0x4468d00a, 0x188d00a3, 0x09905a34, 0x99042054, 0xd01a0406, 0x01214088, -0x1244028d, 0x4b402810, 0x00000e80, 0x00000000, 0x00252818, 0x226468d1, -0x274429d0, 0x74209d00, 0x40091102, 0x429d0027, 0x09500a74, 0xdd082540, -0xd0024440, 0x00276409, 0x0045009d, 0x63400918, 0x00000620, 0x00000000, -0x0027a801, 0x0a4c009f, 0x27c019f0, 0x7c009f00, 0x4009f002, 0x019f10a7, -0x09f0067c, 0x9f2024c0, 0xf0024800, 0x8825e409, 0x0044028f, 0x17c00912, -0x00000c20, 0x00000000, 0x00218014, 0x065c4197, 0x27c049f0, 0x5c109f14, -0xc0097802, 0x099f0027, 0x09f2227c, 0x9f0266c9, 0xf0027c10, 0x1027c109, -0x407c409f, 0x5bc009f4, 0x00000400, 0x00000000, 0x00050814, 0x207c0a17, -0x04c001e0, 0x4c801308, 0xc4015100, 0x00134084, 0x0170006d, 0x1b0804c0, -0x30884d00, 0x0006d001, 0x006d0213, 0x50d201b0, 0x00000420, 0x00000000, -0x1014a014, 0x05f48075, 0x9f4405d0, 0x44027100, 0x40071801, 0x00510014, -0x36d20144, 0x6b0016e0, 0x10014412, 0x081c4027, 0x048c0071, 0x50400510, -0x00000000, 0x00000000, 0x1032a014, 0x033413dd, 0xf0420cd0, 0x6403c100, -0x401c5003, 0x00c19031, 0xbcd00304, 0xc5103040, 0x50033400, 0x0070402c, -0x0f0400c1, 0x50400c10, 0x00000a00, 0x00000000, 0x02788205, 0x01b64025, -0xe3404ed2, 0xa4038000, 0x443c1803, 0x05e10071, 0x0ec01394, 0xe9027e42, -0x5417b400, 0x00f14818, 0x430404c1, 0x10405e10, 0x00000200, 0x00000000, -0x033c1015, 0x84bc41a7, 0x78c37ef0, 0xa501e340, 0xd01a502f, 0x87c30179, -0x1e709fac, 0xb3007c40, 0x710ffc01, 0x4078c01e, 0x178897e3, 0x50c43e30, -0x00000040, 0x00000000, 0x0035b010, 0x007c001f, 0x37c40df2, 0x5c009f00, -0xc005f11b, 0x02df20b6, 0x0df00b6c, 0x9f05b7c0, 0xb0034c00, 0x0014c40d, -0x337c86df, 0x43c06d74, 0x00000660, 0x00000000, 0x007fa002, 0x06fc01f7, -0x7fc09f36, 0xec01f703, 0x021ff007, 0x87ff24ff, 0xdbf23bfe, 0x7f007cc2, -0xf08fcc81, 0x013cc017, 0x3f8c81ff, 0x08c03f30, 0x00000e00, 0x00000000, -0x00388815, 0x209c006b, 0x29e08e30, 0xa448a122, 0x404a9003, 0x40ed013b, -0x8a7103be, 0x2d013848, 0xd0038400, 0x0328400b, 0x238480ed, 0x44400e10, -0x00000620, 0x00000000, 0x00390008, 0x40b400a5, 0x03448e90, 0x04004111, -0x440a5023, 0x04ed083b, 0x409223b4, 0x6d0c3848, 0xd0238408, 0x823a4006, -0x13c400cd, 0x00400e15, 0x00000400, 0x00000000, 0x80332816, 0x0c141241, -0x05402c10, 0x04201100, 0x40011003, 0x09dd1073, 0x01502754, 0x0d203060, -0xd0070600, 0x8006401c, 0x034400dd, 0x18400c18, 0x00000c20, 0x00000000, -0x003da815, 0x0f7c0255, 0x1740afb0, 0xed805740, 0x4005f083, 0x20ffa17f, -0x05d103f4, 0xdd003cd2, 0xf01fc400, 0x0006d11d, 0x034d01fd, 0x54500f34, -0x00000620, 0x00000000, 0x28370009, 0x097c001f, 0x07c80df0, 0x7c005f00, -0xc005f083, 0x00df0037, 0x0171037c, 0x5f0033c0, 0xf0937d02, 0x0035cc21, -0x0b7c08df, 0x07c00df0, 0x00000c00, 0x00000000, 0x10370801, 0x47fc0037, -0x3cc00f70, 0x8c08f300, 0x880b3803, 0x80ff003c, 0x8f3003cc, 0x930c3cc0, -0x3003ccc0, 0x004fc00b, 0x0fcc00f3, 0x00c00e30, 0x00000c22, 0x00000000, -0x08362081, 0x0374021d, 0xb4600dd0, 0x7c73d30c, 0x41255003, 0x80dd2034, -0x3990036c, 0x1b0836c1, 0x10834400, 0x0cd5c241, 0x076c20d9, 0x04400db2, -0x00000802, 0x00000000, 0x00348000, 0x9a7400dd, 0x14440cd0, 0x44801900, -0x40055103, 0x00dd0035, 0x05900354, 0xcd003442, 0x14031400, 0x22074445, -0x0b4400d9, 0x04400d10, 0x00000a00, 0x00000000, 0x00302010, 0x003480cd, -0x01400cd0, 0x14000110, 0x44005003, 0xa0cd0031, 0x00960315, 0x01003040, -0x10031400, 0x00214000, 0x036400d9, 0x40400c90, 0x00000080, 0x00000000, -0x003eb000, 0x033c009f, 0x04500f70, 0xc5001b40, 0xd0091083, 0x80ff003d, -0x053803d4, 0xd1403c50, 0x3203dd00, 0x4007c001, 0x034c00f2, 0x00d00e30, -0x00000044, 0x00000000, 0x083f9004, 0x83fc00ff, 0x0ec00ff0, 0xec003f00, -0xc003f103, 0x00ff103e, 0x037803ec, 0x3f003fc4, 0xf083ec00, 0x000dc203, -0x03fc00f7, 0x17e80ff0, 0x00000e60, 0x00000000, 0x003fa003, 0x00fc1433, -0x1ac00f30, 0xfc08ff00, 0xc84f7123, 0x04f100bd, 0x4b70d0ec, 0x3b053d80, -0xf241dc80, 0x040ad40b, 0x03cc00f3, 0x0fc5c734, 0x00000e00, 0x00000000, -0x20330801, 0x10748651, 0x25480f11, 0x7400dd00, 0x44edd013, 0x1af103bc, -0xc8100855, 0x1100b450, 0xd0594424, 0x0094c00b, 0x030402eb, 0x07402511, -0x00000c20, 0x00000000, 0xa033a011, 0x60341001, 0x20040c12, 0x3604cd00, -0x410cd003, 0x00c19031, 0x04500004, 0x81003441, 0xd0010410, 0x05306888, -0x830402c1, 0x47404414, 0x00000e80, 0x00000000, 0x20358803, 0x80740851, -0x34580d10, 0x7400dd10, 0x400dd003, 0x00d18034, 0x09108514, 0x9540b440, -0xd1074400, 0x00364009, 0x034400d9, 0x0f408512, 0x00000620, 0x00000000, -0x4077a800, 0x03340093, 0x34c80c34, 0x7cb0df00, 0xc009f047, 0x00d34035, -0x19700c4c, 0x1b2030c0, 0xf0075d09, 0x9034c808, 0x034d00d3, 0x0bc23530, -0x00000e20, 0x00000000, 0x027d8087, 0x007c80ff, 0xadc80ff0, 0xf8a0fd20, -0xc00ed08b, 0x40ee003b, 0x2bf082dc, 0x3b027fc4, 0xd0037c01, 0x003dc00b, -0x83f800ff, 0x1fc015e0, 0x00000600, 0x00000000, 0x00350802, 0x236d0893, -0x27c00d34, 0x7e01d320, 0xc0093003, 0x00d31034, 0x45b0024c, 0x930cb4c0, -0x30127c01, 0x0033c009, 0x034d00d3, 0x08c06130, 0x00000420, 0x00000000, -0x21f4a013, 0x8dc401d1, 0xa6480f10, 0x7401db03, 0x420d1082, 0x00fb003c, -0x29108355, 0x910836c0, 0xb087742b, 0x0037424b, 0x03ee00f1, 0x4c502151, -0x00000200, 0x00000000, 0x01e6a007, 0x84040109, 0x13400c10, 0x3400c100, -0x500c1049, 0x00c90030, 0x09d00004, 0x11001060, 0x500d3482, 0x42234008, -0x036400d5, 0x1c422c10, 0x00000a00, 0x00000000, 0x02688006, 0x1c844149, -0x7b409e10, 0xf6016912, 0x491f1005, 0x4dc92278, 0x1a520694, 0x61427040, -0xd055b401, 0x027b409a, 0x07a001e5, 0x10009e40, 0x00000200, 0x00000000, -0x42201012, 0x800c060b, 0x23e80c10, 0x3400c320, 0xc88c3403, 0x04c98034, -0x2cf0034c, 0xc3023040, 0x70013c00, 0x0233c008, 0x030c04c6, 0x48c00430, -0x00000040, 0x00000000, 0x0a2db802, 0x90dc00b6, 0x3ec10ff0, 0xbc407f20, -0xc00eb003, 0x05ff003f, 0x89b0237c, 0xff023fd8, 0xb013fc08, 0x023fc20b, -0x63dc00fb, 0x0bc00ff4, 0x00000660, 0x00000000, 0x0037a015, 0x077c0093, -0x34ed2d30, 0x7c84d300, 0xc009f001, 0x18db00b7, 0x0d30804c, 0x532005c4, -0x30037c12, 0x2034c019, 0x034c04d3, 0x54c0093c, 0x00000e00, 0x00000000, -0x00398812, 0x14b400e1, 0x38400f12, 0xb490e100, 0x400ed003, 0x01c1053b, -0x0c1002ec, 0x61003bc4, 0x1003b400, 0x2038512a, 0x83d48af1, 0x48400e14, -0x00000620, 0x00000000, 0x00790083, 0x27f40361, 0x68404e10, 0xb401e120, -0x401ad007, 0x00e1427b, 0x1e100784, 0xe58c6d40, 0x90473401, 0x00f8404a, -0x178405e1, 0x0c451210, 0x00000400, 0x00000000, 0x0a372812, 0x893440c1, -0x74400c00, 0x34424140, 0x421cd187, 0x00c10033, 0x9c114324, 0xc5007240, -0x90073401, 0x00704008, 0x031400c9, 0x48506010, 0x00000c20, 0x00000000, -0x4055a817, 0x4dfc8173, 0x9cc00536, 0xfc485321, 0xc047f00d, 0x00530017, -0x073409cc, 0x570859f0, 0xa52dfc05, 0x40dcc805, 0x014c0053, 0x5cc03734, -0x00000620, 0x00000000, 0x00070012, 0x407c901f, 0x47c801f2, 0x7c001f08, -0xc001f22c, 0x00170807, 0x01f0807d, 0x1a4007c0, 0x70007c02, 0x0007c000, -0x007c0017, 0x4bc001f2, 0x00000c00, 0x00000000, 0x02270810, 0x067c4993, -0x24c009f0, 0x7c01db00, 0xc059f012, 0x80830023, 0x0938024d, 0xd30064c8, -0x20023c80, 0x0520d009, 0x020c8093, 0x40c00930, 0x00000c20, 0x00000000, -0x00a62001, 0x22742091, 0xa50009d8, 0x76019140, 0x4809d012, 0x009b0027, -0x2850026d, 0x93002474, 0x10027400, 0x00644019, 0x026c009b, 0x04402950, -0x00000800, 0x00000000, 0x00a4a018, 0x02748091, 0x244008d0, 0x56089904, -0x4009d802, 0x80910027, 0xa9120304, 0x91412440, 0x5482540a, 0x00344049, -0x02440081, 0x6040ac10, 0x00000200, 0x00000000, 0x4a202010, 0x22340881, -0x214828d0, 0x34008102, 0x61ccd002, 0x00890123, 0x89500224, 0x81003042, -0x50233408, 0x022040c8, 0xa2240489, 0x40508850, 0x00000080, 0x00000000, -0x0082b01d, 0x597c1613, 0x804001d0, 0x5c801b00, 0xc061d100, 0x1e1312c7, -0x6110784d, 0x13450441, 0x70585c02, 0x0580c031, 0x084c0b13, 0x74d16030, -0x00000ac0, 0x00000000, 0x212fb819, 0x92bc04ff, 0x2fc029f0, 0xfc149f01, -0xc04bf052, 0x019d0263, 0x4bf006fc, 0x97003bc0, 0xb012fc04, 0x112fc0ca, -0x1a7c099f, 0x67c04bf0, 0x00000e60, 0x00000000, 0x002fa019, 0x22bc6cb3, -0xacc10870, 0x7c029700, 0xc14bf002, 0x029301a4, 0x8bb00a4d, 0xb3012cc0, -0xf032fc00, 0x002cc183, 0x324c0c93, 0x60c14b30, 0x00000e00, 0x00000000, -0x4107089c, 0x18740e11, 0x06400130, 0x74001511, 0x40217250, 0x80111180, -0x8550006c, 0x13000450, 0xd0301c04, 0x14045071, 0x08144a11, 0x70506514, -0x00000c20, 0x00000000, 0x0423a010, 0x0a340081, 0x62610850, 0x34208501, -0x4149d012, 0x008180a0, 0x08100a44, 0x89022440, 0xd0123414, 0x02224008, -0x1a240089, 0x40410814, 0x00000e80, 0x00000000, 0x0021a818, 0x82760091, -0x22480991, 0x74009100, 0x08095062, 0x00810024, 0x89501264, 0x91002540, -0xd00b5614, 0x04264009, 0x02342099, 0x60404814, 0x00000620, 0x00000000, -0x0027a805, 0x227c0393, 0x64c00872, 0x7c049740, 0xc009f002, 0x80934024, -0x0930164c, 0x9b40a0c8, 0xe0a27c01, 0x0062d008, 0x026c809b, 0x14c02934, -0x00000e20, 0x00000000, 0x00258014, 0x823c029f, 0x65d00970, 0x7c00df11, -0xd0097003, 0x009f1027, 0x09f0027c, 0x970026c0, 0xf0065c80, 0xc165c001, -0x025c0097, 0x53c009f0, 0x00000600, 0x00000000, 0x00050814, 0x104c001f, -0x04c20132, 0x7c001308, 0xc8113000, 0x00131003, 0x01b0086c, 0x1b0244c0, -0x30004c10, 0x1006c401, 0x004c4003, 0x50d06130, 0x00000420, 0x00000000, -0x801ca014, 0x05c4805d, 0x1c400712, 0x74055100, 0x6076b00d, 0x0051401f, -0x375001fc, 0x7100dcc2, 0xb001dc83, 0x115c4013, 0x017c0051, 0x51501714, -0x00000200, 0x00000000, 0x0062a014, 0x072501cd, 0x12520c10, 0x34004100, -0x401c1048, 0x00c90033, 0xad900364, 0xc9807269, 0x50072601, 0x0870601c, -0x030400c1, 0x50403012, 0x00000a00, 0x00000000, 0x0c288005, 0x43e403ed, -0x2e404e12, 0xb4006100, 0x400a900e, 0x00e9023b, 0x0e542334, 0xa1001840, -0xdb0e9603, 0x5020554c, 0x13b001c1, 0x15490210, 0x00000200, 0x00000000, -0x00481015, 0x06ac81bd, 0x7a413e34, 0xf4016300, 0x48163017, 0x01c8417b, -0x1cb417ac, 0xfb207250, 0x7407ad01, 0x007ac00e, 0x178c04e3, 0x54d01f34, -0x00000040, 0x00000000, 0x202db810, 0x005800df, 0x21c00df0, 0x7c065f44, -0xc007f0af, 0x00d70137, 0x0df00b6c, 0x9f0017d0, 0xa0026c00, 0x00a7c81d, -0x2b6c02df, 0x42c00df4, 0x00000660, 0x00000000, 0x027fa002, 0x06fc41f3, -0x5dc01fb0, 0xcc037300, 0xc097300d, 0x13f320fd, 0x1fb00fec, 0xf3206dc0, -0xf006fc01, 0x03fec11f, 0x0fcc13f3, 0x00c01f30, 0x00000e00, 0x00000000, -0x02398815, 0x01f404e1, 0x28c48e11, 0xc4806110, 0x41873089, 0x00f1013c, -0x4e1013ed, 0xab002ac0, 0xd002b480, 0x022a400e, 0x03c440f1, 0x54400f52, -0x00000620, 0x00000000, 0x200d0208, 0x42b400e1, 0x79400c90, 0xa4006900, -0x4a86902b, 0x08e10839, 0x06128384, 0xa1003d44, 0xd002a400, 0x8120400f, -0x038400e1, 0x004006d0, 0x00000400, 0x00000000, 0x00372806, 0x0c3421c1, -0x24400c10, 0x04124940, 0x40041003, 0x00c10030, 0x7c102324, 0x8900f242, -0xd00e3408, 0x0224420c, 0x030400c1, 0x1040a4d4, 0x00000c20, 0x00000000, -0x0005a81d, 0x8f7c0fd3, 0x05c00fb0, 0xec005b00, 0xc009b01d, 0x00f3403d, -0x4d3403cc, 0xd304f5c0, 0xf00a3c01, 0x6076f00c, 0x03cd40f3, 0x54d010f8, -0x00000620, 0x00000000, 0x60070001, 0x037c809f, 0x35c00df2, 0x5c401702, -0xc00df409, 0x00df0033, 0x0c70137c, 0x9f0417cc, 0xf22a7c00, 0x2027c80d, -0x037c00df, 0x07c02364, 0x00000c00, 0x00000000, 0x002f0801, 0x428c03a3, -0x2ec20e30, 0xcc007306, 0xc857f003, 0x00e3003c, 0x2f3c03ec, 0xf3001cc0, -0x304efc00, 0x017ec00f, 0x03cc00e3, 0x00c10330, 0x00000c22, 0x00000000, -0x18262089, 0x1e446091, 0x34400d50, 0x44005110, 0xd004d02f, 0x00da0036, -0x1d100315, 0x9b025144, 0x50005c43, 0x0065401d, 0x035440df, 0x04509914, -0x00000802, 0x00000000, 0x0414a001, 0x07450091, 0x06400d10, 0x44040180, -0x4005d081, 0x00d10034, 0x0d580366, 0x1920b440, 0x50027423, 0x0034401d, -0x030400d5, 0x0440251b, 0x00000200, 0x00000000, 0x40102010, 0x03048081, -0x30400c50, 0x06000140, 0x4004d101, 0x00c90030, 0x0c520315, 0x89003140, -0x52021400, 0x28214a0c, 0x031420cd, 0x40480d1a, 0x00000080, 0x00000000, -0x0026b001, 0x02440093, 0x2ac20f12, 0x4c804300, 0x4005d002, 0x00f3003c, -0x005003ec, 0x930014c0, 0x71027c00, 0x003ec00d, 0x03cc00f7, 0x00c00534, -0x00000ac0, 0x00000000, 0x003bb805, 0x80fc80bf, 0x3fc00ff8, 0xfc607f08, -0xc007f002, 0x00ff083f, 0x0bb003fc, 0xb7001bc0, 0xf080dc00, 0x082f800e, -0x03fc40ff, 0x17c007f0, 0x00000e60, 0x00000000, 0xc080a300, 0x0833020e, -0x839820e8, 0x3b038ec0, 0xb020ec08, 0x820ec083, 0x20ec0838, 0x0ec083b0, -0xa8083b02, 0xc083b228, 0x083b020e, 0x03b020ec, 0x0000008c, 0x00000000, -0xa022a200, 0x0232808e, 0x23a808ea, 0x3a808ea0, 0xa808ea02, 0x008ea023, -0x08ea023a, 0x8ea023a8, 0xea023a80, 0xa023a808, 0x023a808e, 0x03a808ea, -0x00000a88, 0x00000000, 0x80420100, 0x04120104, 0x41201048, 0x12010480, -0x20104804, 0x01048041, 0x10480412, 0x04804120, 0x48051201, 0x80412018, -0x04120104, 0x01201048, 0x00000004, 0x00000000, 0x80002100, 0x401a0006, -0x01a2006a, 0x18108600, 0xa0006800, 0x80068001, 0x0068001a, 0x068001a0, -0x6a401a00, 0x8001a110, 0x001a0006, 0x01a00068, 0x00000004, 0x00000000, -0xa0128200, 0x013a884e, 0x138004e2, 0x3a884e20, 0xa804ea01, 0x004ea013, -0x04ea013a, 0x4e2013a8, 0xea203a80, 0xa013a804, 0x0138804e, 0x03a804ea, -0x00000a8c, 0x00000000, 0x0000a300, 0x00180006, 0x01800060, 0x18080602, -0x80006080, 0x00060001, 0x00600018, 0x06000180, 0x60001800, 0x00018080, -0x00180806, 0x01800060, 0x0000008c, 0x00000000, 0x2012a300, 0x00108044, -0x11000442, 0x10804420, 0x08044201, 0x00442011, 0x04420110, 0x44201108, -0x42001080, 0x20110804, 0x01108044, 0x01080442, 0x0000008c, 0x00000000, -0xa052a200, 0x04088142, 0x50881420, 0x0a8342a0, 0x88142a05, 0x0142a050, -0x1422050a, 0x42a050a8, 0x28070a81, 0xa050a814, 0x050a8142, 0x00a8142a, -0x00000a8c, 0x00000000, 0x80300100, 0x032800ca, 0x3aa00ca8, 0x2200ea80, -0xa00ca803, 0x00ca8032, 0x0ca8032a, 0xca8032a0, 0xa8032a00, 0x8032a00e, -0x030200ea, 0x02a00ca8, 0x00000004, 0x00000000, 0x00000100, 0x01080002, -0x00800020, 0x20000200, 0x80002080, 0x00020000, 0x00200008, 0x02080080, -0x20070800, 0x00008000, 0x00080002, 0x80800020, 0x00000004, 0x00000000, -0x4006a200, 0x40410010, 0x04100104, 0x61101040, 0x10010400, 0x00104004, -0x01040040, 0x10400410, 0x04404100, 0x40041101, 0x00410010, 0x80100104, -0x00000a8c, 0x00000000, 0xa002a300, 0x001a8006, 0x09a00066, 0x1a8026a0, -0xa8006a00, 0x8006a001, 0x006a001b, 0x06a001a8, 0x6e801a80, 0xa001a802, -0x001a8026, 0x01a8006a, 0x0000008c, 0x00000000, 0xc002a300, 0x01190006, -0x01b80060, 0x1b0006c0, 0xb0006000, 0x0006c001, 0x006c001b, 0x06c00190, -0x60001b00, 0xc001b000, 0x001b0006, 0x01b0006c, 0x0000008c, 0x00000000, -0x2842a300, 0x0430910c, 0x431810c2, 0x30910c20, 0x0810c004, 0xa10c2043, -0x10c20430, 0x0c004308, 0xc2443081, 0x20430a10, 0x0430810c, 0x030810c2, -0x00000a88, 0x00000000, 0x00000100, 0x0030000c, 0x030000c0, 0x30080c02, -0x00008000, 0x000c0003, 0x00c00030, 0x0c000300, 0xc0003000, 0x00030080, -0x0030080c, 0x030000c0, 0x00000208, 0x00000000, 0x80400100, 0x0c32010c, -0x432010ca, 0x32010c80, 0x2010c804, 0x010c8043, 0x10c80432, 0x0c804320, -0xca0c3201, 0x80432010, 0x0432010c, 0x032010c8, 0x00000004, 0x00000000, -0x2042a300, 0x0c1a8106, 0x4180106a, 0x1a810620, 0x88106204, 0x8106a041, -0x106a041a, 0x06a041a8, 0x6a0c1a81, 0xa041a810, 0x041a8106, 0x01a8106a, -0x00000a8c, 0x00000000, 0x0042a300, 0x04100104, 0x410010c0, 0x10010400, -0x00104084, 0x01040041, 0x10400410, 0x04004100, 0xc0041001, 0x00410210, -0x04100104, 0x01001040, 0x0000008c, 0x00000000, 0x2042a200, 0x04188126, -0x418010c2, 0x18812620, 0x88106204, 0x81062041, 0x10620418, 0x06204188, -0xc2049881, 0x20418810, 0x04188106, 0x01881062, 0x00000088, 0x00000000, -0xa006a200, 0x006a801a, 0x06800180, 0x6a801aa0, 0xa801a200, 0x801aa006, -0x01aa006a, 0x1a2006a8, 0x88006a80, 0xa006a801, 0x0068801a, 0x02a801aa, -0x00000a8c, 0x00000000, 0x80600000, 0x060a0182, 0x60a01828, 0x0a018280, -0xa0182806, 0x01828060, 0x18280608, 0x820060a0, 0x28060a01, 0x0060a018, -0x060a0182, 0x00a01828, 0x00000004, 0x00000000, 0x80400000, 0x04020120, -0x40201008, 0x02012080, 0x20100804, 0x01008040, 0x10080402, 0x00804020, -0x08048201, 0x80402010, 0x04020100, 0x00201008, 0x00000004, 0x00000000, -0xc062a300, 0x262b018a, 0x62b018ac, 0x2b098ac0, 0xb018a806, 0x018ac062, -0x18ac062b, 0x888062b0, 0xac262b01, 0xc062b098, 0x062b018a, 0x02b018ac, -0x00000a88, 0x00000000, 0xa062a300, 0x063a918e, 0x638818ee, 0x3a918ea0, -0xa818e706, 0x818ea063, 0x18ea0638, 0x8ca063a8, 0xe6463881, 0x2063a818, -0x063a818e, 0x03a818ea, 0x0000008c, 0x00000000, 0xc062a200, 0x063b018a, -0x63b018e8, 0x33818e40, 0xb018ec06, 0x018ec063, 0x18e40632, 0x8ee063b8, -0xe2863901, 0xc063b018, 0x063b018e, 0x03b018ec, 0x00000088, 0x00000000, -0xa062a200, 0x063a818e, 0x63a818e2, 0x32898ea2, 0xa818ea06, 0x018ea863, -0x18e20632, 0x8ea863a8, 0xca063a81, 0x2063a098, 0x863a898e, 0x03a818ea, -0x00000a88, 0x00000000, 0x80400000, 0x04120104, 0x412010c8, 0x12010480, -0x20104804, 0x01048041, 0x10480412, 0x04804120, 0x68041201, 0x80412010, -0x04120104, 0x01201048, 0x00000800, 0x00000000, 0x80622000, 0x061a0186, -0x61a0186a, 0x1a818680, 0xa0186886, 0x01868861, 0x1848061a, 0x86a061a8, -0x6a061a01, 0x8061a018, 0x061a0184, 0x01a01868, 0x00000008, 0x00000000, -0xa002a200, 0x003a800e, 0x038800ea, 0x38800ea0, 0xa800ea00, 0x800ea003, -0x00ea003a, 0x0e8003a0, 0xe8001280, 0xa0038800, 0x0038800e, 0x03a800e2, -0x00000a80, 0x00000000, 0x0042a200, 0x04180106, 0x41801060, 0x18010600, -0x80102004, 0x01060041, 0x10600418, 0x06004180, 0x60041801, 0x00418010, -0x04180106, 0x01801060, 0x00000280, 0x00000000, 0x2040a000, 0x04108104, -0x41081042, 0x10810420, 0x08100204, 0x81042041, 0x10420410, 0x04004100, -0x40041081, 0x20410810, 0x04108104, 0x01081042, 0x00000088, 0x00000000, -0xa042a200, 0x040a8102, 0x40a81020, 0x0a0102a0, 0xa8102a04, 0x8102a040, -0x102a040a, 0x02804080, 0x28040a81, 0xa040aa10, 0x040a8102, 0x00a8102a, -0x00000a88, 0x00000000, 0x80c28000, 0x0c2a030a, 0xc2a030a8, 0x2a010a80, -0xa030a80c, 0x030a80c2, 0x30a80c2a, 0x0a80c2a0, 0xa80c2a03, 0x00c2a030, -0x0c28030a, 0x02a030a8, 0x00000000, 0x00000000, 0x0012a200, 0x01080042, -0x10800420, 0x08004200, 0x80042001, 0x00420010, 0x04200108, 0x42081080, -0x20010800, 0x00108004, 0x01080042, 0x00800420, 0x00000000, 0x00000000, -0x4042a200, 0x04010100, 0x40101004, 0x01010040, 0x10100404, 0x01004040, -0x10040400, 0x00404010, 0x04040101, 0x40400010, 0x04010100, 0x00101004, -0x00000a88, 0x00000000, 0xa0022200, 0x001a8006, 0x01a8006e, 0x180006a0, -0xa8006800, 0xc0068001, 0x0062001b, 0x06a001a8, 0x6e001a80, 0xa001ac00, -0x001aa006, 0x01a8006a, 0x00000088, 0x00000000, 0x4002a300, 0x00190006, -0x019000e2, 0x0b000680, 0xb0002c00, 0xa006c001, 0x00640019, 0x068001b0, -0xe8001b00, 0xc001b000, 0x001b0006, 0x01b0006c, 0x00000000, 0x00000000, -0x20000000, 0x0030800c, 0x03080062, 0x30800c00, 0x0800c280, 0x800c2003, -0x00c20030, 0x0c000308, 0x62003080, 0x20030a00, 0x0010800c, 0x030800c2, -0x00000000, 0x00000000, 0x00000000, 0x00b0000c, 0x23000040, 0x30002c00, -0x0000c000, 0x000c0003, 0x00c00030, 0x0c000300, 0x4000b000, 0x0003001a, -0x0030000c, 0x030000c0, 0x00000000, 0x00000000, 0x80a00000, 0x0a30028c, -0xa32028c8, 0x32008c80, 0x2028c80a, 0x828c80a3, 0x28c80a32, 0x8c80a320, -0xca0a3202, 0x80a32028, 0x8a12028c, 0x032028c8, 0x00000000, 0x00000000, -0xa0c40000, 0x0c588316, 0xe5883168, 0x5a8316a0, 0xa8316a0c, 0x0316a0c5, -0x316a0c5a, 0x16a0c5a8, 0x6a0c5a83, 0x20c5a839, 0x0c5a8316, 0x01a8316a, -0x00000000, 0x00000000, 0x00000000, 0x00900004, 0x81000040, 0x10002400, -0x00004000, 0x00040001, 0x00400010, 0x04000100, 0x40009000, 0x00010002, -0x00100004, 0x01000040, 0x00000000, 0x00000000, 0x22100000, 0x21188846, -0x11888460, 0x18804626, 0x88846221, 0x08462211, 0x84622118, 0x46221188, -0x62211888, 0x22118804, 0x21188046, 0x01888462, 0x00000000, 0x00000000, -0x22000000, 0xa028800a, 0x02a880a8, 0x2a880aa2, 0xa880a220, 0x080aa202, -0x80a22028, 0x0a220288, 0xa8002888, 0x22028880, 0x202a880a, 0x02a880a2, -0x00000000, 0x00000000, 0x84100000, 0x41081042, 0x1081042a, 0x0a104204, -0xa1042841, 0x10420410, 0x0428410a, 0x428410a1, 0x20410a10, 0x8410a004, -0x410a1042, 0x00a10428, 0x00000000, 0x00000000, 0x80500000, 0x05020140, -0x50201408, 0x021940a0, 0x20140885, 0x01408050, 0x14080502, 0x40805020, -0x08050201, 0x80502014, 0x05020140, 0x00201408, 0x00000000, 0x00000000, -0xc0300000, 0x032b00ca, 0x32b00cac, 0x2b08ca80, 0xb00cac03, 0x00cac032, -0x0cac032b, 0xca8032b0, 0xac032b00, 0xc032b00c, 0x032b00ca, 0x02b00cac, -0x00000000, 0x00000000, 0xa0100000, 0x013a804e, 0x13a004ee, 0x3a804ea8, -0xaa04ea01, 0x804ea013, 0x04ea013a, 0x4e601388, 0xe6013880, 0xa013a804, -0x013a804e, 0x03a804e8, 0x00000000, 0x00000000, 0x18c40000, 0x8c484312, -0xc0863120, 0x48030218, 0x8631218c, 0x631218c4, 0x31218c48, 0x1218c486, -0x200c4863, 0x18c48230, 0x8c486302, 0x00863121, 0x00000000, 0x00000000, -0xfffc0000, 0xffcbfff2, 0xfcbfff2f, 0xcbfff2ff, 0xbfff2fff, 0xfff2fffc, -0xff2fffcb, 0xf2fffcbf, 0x2fffcbff, 0xfffcbfff, 0xffcbfff2, 0x00bfff2f, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xdb340000, 0xb3437ed0, -0x7c36cd0d, 0x4bedf0db, 0x36cd0db3, 0x6cd0db34, 0xcd0db343, 0xd0db3436, -0x0dfb436c, 0xdb34bedf, 0xb3436df0, 0x0036cd0d, 0x00000000, 0x00000000, -0x3ccc0000, 0xccc8ff32, 0xfc8f3323, 0xcbf3f23c, 0x8f3323cc, 0xf3323ccc, -0x3323ccc8, 0x323ccc8f, 0x23fcc8f3, 0x3cccbf3f, 0xccc8f3f2, 0x008f3323, -0x00000000, 0x00000000, 0x7edc0000, 0xedc9fb72, 0xdc9fb721, 0xc9e3727e, -0x9fb727ed, 0xfb727edc, 0xb727edc9, 0x727edc9f, 0x21edc9fb, 0x7edc9fb7, -0xedc9fb72, 0x009fb727, 0x00000000, 0x00000000, 0x40800000, 0x0839020e, -0x839020e4, 0x39020e40, 0x9020e608, 0x020e4083, 0x20e40839, 0x0e608390, -0xe0083902, 0x40839028, 0x0839020e, 0x038020e6, 0x00000000, 0x00000000, -0xa0200000, 0x023a808e, 0x23a808ea, 0x3a808ea0, 0xa808ea02, 0x808ea023, -0x08ea023a, 0x8ea023a8, 0xee023a80, 0xa023a808, 0x023a808e, 0x03a808ee, -0x00000000, 0x00000000, 0x80400000, 0x04120104, 0x41201048, 0x12010480, -0x20104804, 0x01048041, 0x00480412, 0x04804120, 0x48051201, 0x80412018, -0x04120104, 0x01201048, 0x00000000, 0x00000000, 0x08000000, 0x00180006, -0x01800060, 0x18118600, 0x80006000, 0x00060001, 0x10600018, 0x06000181, -0x60401800, 0x00018100, 0x00180006, 0x01890060, 0x00000000, 0x00000000, -0x22100000, 0x0138884e, 0x138804e2, 0x38884e20, 0x8804e001, 0x804e2013, -0x04e20138, 0x4e001388, 0xe2203880, 0x20138814, 0x2138804e, 0x038884e0, -0x00000000, 0x00000000, 0x00000000, 0x00180006, 0x01800060, 0x18080602, -0x80006000, 0x00060201, 0x80608018, 0x06000180, 0x60281800, 0x00018000, -0x00180006, 0x01800060, 0x00000000, 0x00000000, 0x20100000, 0x01108044, -0x11080442, 0x10806420, 0x08044001, 0x80442011, 0x06420110, 0x44001108, -0x42009080, 0x20110806, 0x03108044, 0x01080240, 0x00000000, 0x00000000, -0x20140000, 0x05488152, 0x54881522, 0x48815220, 0x88152205, 0x81522054, -0x15220548, 0x52205488, 0x20054881, 0x20548815, 0x05488152, 0x00801920, -0x00000000, 0x00000000, 0x00700310, 0x032800ca, 0x32800ca0, 0x0200ca00, -0x800ca003, 0x00ca0032, 0x0ca00328, 0xca003280, 0x80032800, 0x0032800c, -0x072800ca, 0x02801ca0, 0x00000000, 0x00000000, 0x00200310, 0x00000002, -0x00800020, 0x08002200, 0x80002000, 0x00020000, 0x02200008, 0x02000080, -0x82008800, 0x00008002, 0x02080002, 0x00800620, 0x0000000c, 0x00000000, -0x40020310, 0x00010000, 0x00100004, 0x01100040, 0x10000400, 0x00004000, -0x00040001, 0x00400011, 0x84400100, 0x40001100, 0x00010000, 0x00110004, -0x0000000c, 0x00000000, 0x00020310, 0x00128006, 0x01880062, 0x18800620, -0x88006000, 0x80062001, 0x00620018, 0x06000188, 0x62801880, 0x20018800, -0x00188006, 0x01980062, 0x0000000c, 0x00000000, 0x40028008, 0x00180006, -0x019a0064, 0x19000640, 0x90006400, 0x80064001, 0x00640019, 0x06400190, -0x60001900, 0x40019800, 0x00190006, 0x41800464, 0x00000000, 0x00000000, -0x2442a202, 0x0430110c, 0x430810c2, 0x30910c20, 0x0810c204, 0x810c2043, -0x10c20430, 0x0c204308, 0xc6443081, 0x20431810, 0x4430810c, 0x030910c2, -0x00000a88, 0x00000000, 0x00008002, 0x0030000c, 0x030000c0, 0x30080c02, -0x0000c000, 0x000c0203, 0x80c00030, 0x0c000300, 0xc0203000, 0x00030000, -0x0030000c, 0x030000c0, 0x00000000, 0x00000000, 0x00402002, 0x0430010c, -0x430010c0, 0x30010c00, 0x0010c004, 0x010c0043, 0x10c00430, 0x0c004300, -0xc00d3001, 0x00430010, 0x0430010c, 0x030830c0, 0x00000000, 0x00000000, -0x2042a202, 0x04188106, 0x41801062, 0x18810620, 0x88106204, 0x01062041, -0x10620418, 0x06204188, 0xe20c1881, 0x20418010, 0x04188106, 0x01883062, -0x00000a88, 0x00000000, 0x00408002, 0x04100104, 0x41001040, 0x10010400, -0x00104004, 0x01040041, 0x10400410, 0x04004100, 0x60041001, 0x00410010, -0x04100104, 0x03001040, 0x00000000, 0x00000000, 0x2042800a, 0x04188106, -0x41801062, 0x18810620, 0x88106204, 0x01062041, 0x10620418, 0x06204188, -0x42041881, 0x20418010, 0x04188106, 0x03081062, 0x00000000, 0x00000000, -0x2002a202, 0x8028800a, 0x028800a2, 0x28800a20, 0x8800a200, 0x800a2002, -0x00a20028, 0x0a200288, 0x80002880, 0x20028000, 0x0028800a, 0x420000a2, -0x00000a88, 0x00000000, 0x00600012, 0x06080182, 0x60801820, 0x08018200, -0x80182006, 0x01820060, 0x18200608, 0x82006080, 0x20060801, 0x00608018, -0x06080182, 0x00801820, 0x00000000, 0x00000000, 0x80408212, 0x04028100, -0x40201008, 0x02010088, 0x20100804, 0x01008040, 0x10080402, 0x00804020, -0x0a040201, 0x80402010, 0x04020100, 0x00201008, 0x00000000, 0x00000000, -0xc062a202, 0x062a018a, 0x62b018ac, 0x2b098ac0, 0xb018ac06, 0x018ac062, -0x98ac062b, 0x8ac062b0, 0xac262b01, 0xc062b098, 0x062b018a, 0x02b098ac, -0x00000a88, 0x00000000, 0x24628200, 0x0638918e, 0x638018e2, 0x38918e20, -0x8818e206, 0x018e2063, 0x18e20638, 0x8e206388, 0xe2463881, 0x20638818, -0x4638818e, 0x039918e2, 0x00000000, 0x00000000, 0x40628002, 0x0639018e, -0x639018e4, 0x39018e60, 0x9018e406, 0x018e4063, 0x18e40639, 0x8e406390, -0xe8063901, 0x40639018, 0x0638018e, 0x03a018e4, 0x00000000, 0x00000000, -0xa062a20a, 0x063a818e, 0x63a818ea, 0x3a898ee2, 0xa818ea06, 0x818ea263, -0x98ea063a, 0x8ea063a8, 0xe6263a81, 0xa063a818, 0x063a018e, 0x438818ea, -0x00000a88, 0x00000000, 0x80480002, 0x04120124, 0x41201048, 0x12012480, -0x20104804, 0x01048041, 0x10480412, 0x04804120, 0x48049201, 0x80412010, -0x04920104, 0x03201248, 0x00000000, 0x00000000, 0x00608002, 0x06180186, -0x61801860, 0x18018600, 0x80186006, 0x01860061, 0x18600618, 0x86006180, -0x40061801, 0x00618018, 0x06180186, 0x01881860, 0x00000000, 0x00000000, -0x2006a000, 0x0078801e, 0x078801e2, 0x78801e00, 0x8801e200, 0x801e2007, -0x01e20078, 0x1e200788, 0xe2007880, 0x20078801, 0x0078801e, 0x038801e2, -0x00000a88, 0x00000000, 0x004a8002, 0x04180126, 0x41801060, 0x18012600, -0x80106004, 0x21060841, 0x10600418, 0x06004180, 0x60049801, 0x00418010, -0x04980106, 0x01801260, 0x00000000, 0x00000000, 0x20428002, 0x04108104, -0x41081042, 0x10810400, 0x08104204, 0x81042041, 0x10420410, 0x04204108, -0x42041081, 0x20410810, 0x04108104, 0x01081042, 0x00000000, 0x00000000, -0x2042a202, 0x04088102, 0x40881022, 0x08810200, 0x88102204, 0x81022040, -0x10220408, 0x02204088, 0x20040881, 0x20408810, 0x04088102, 0x00801022, -0x00000a88, 0x00000000, 0x00c00002, 0x0c28030a, 0xc28030a0, 0x28030a00, -0x8030a00c, 0x030a00c2, 0x30a00c28, 0x0a00c280, 0xa0040203, 0x00c28030, -0x0c28030a, 0x028030a0, 0x00000000, 0x00000000, 0x00100002, 0x01082042, -0x10800420, 0x08004200, 0x80042001, 0x00420010, 0x04200108, 0x42001080, -0x22010800, 0x00108004, 0x01088042, 0x00800420, 0x00000000, 0x00000000, -0x4042a202, 0x04010100, 0x40101004, 0x01010040, 0x10100404, 0x01004040, -0x10040401, 0x00404010, 0x04040101, 0x40401010, 0x04000100, 0x00101004, -0x00000a88, 0x00000000, 0x20028002, 0x00188006, 0x01880062, 0x18800620, -0x88006200, 0x80062001, 0x00620018, 0x06200188, 0x62001880, 0x20018800, -0x0018c006, 0x01980062, 0x00000000, 0x00000000, 0x40008002, 0x80198006, -0x09900066, 0x19002640, 0x90006400, 0x00064009, 0x02640019, 0x06400190, -0x40009900, 0x40019000, 0x00190006, 0x03800064, 0x00000000, 0x00000000, -0x2006a202, 0x0070801c, 0x070801c2, 0x70801c20, 0x0801c200, 0x801c2007, -0x01c20070, 0x1c200708, 0x46007080, 0x20070801, 0x0070801c, 0x018801c2, -0x00000a88, 0x00000000, 0x0080200a, 0x0830020c, 0x830020c0, 0x30028c00, -0x0020c008, 0x020c00e3, 0x28c00830, 0x0c008300, 0x400a3002, 0x00830020, -0x0830020c, 0x010020c0, 0x00000000, 0x00000000, 0x00a00002, 0x0a30828c, -0xab0028c2, 0x3003ac00, 0x0028c00a, 0x028c00ab, 0x2ac00a30, 0x8c00a300, -0x4006b002, 0x00a30028, 0x0a30028c, 0x430828c0, 0x00000200, 0x00000000, -0x20c2a002, 0x0c120306, 0xc1883060, 0x18838620, 0x8830620c, 0x830620c1, -0x38620c18, 0x0620c188, 0x620e1883, 0x20c18830, 0x0c188306, 0x01883062, -0x00000a88, 0x00000000, 0x00020002, 0x00100004, 0x01000040, 0x10000400, -0x00004000, 0x00040021, 0x00400010, 0x04000100, 0x40001000, 0x00010000, -0x00100004, 0x01000040, 0x00000000, 0x00000000, 0x22128002, 0x21100846, -0x11888460, 0x18804620, 0x88846221, 0x88462011, 0x04622118, 0x46221188, -0x62011888, 0x22118884, 0x21188846, 0x01888462, 0x00000000, 0x00000000, -0x2002a202, 0x2028200a, 0x028880a0, 0x28800a22, 0x8880a220, 0x880a2202, -0xa0a22028, 0x0a220288, 0xa0202888, 0x22028880, 0x0028880a, 0x028000a2, -0x00000a88, 0x00000000, 0x04100002, 0x41081042, 0x10810420, 0x08004204, -0x81042041, 0x10420410, 0x04204108, 0x42041080, 0x20410810, 0x04108004, -0x41081042, 0x00810420, 0x00000008, 0x00000000, 0x80508000, 0x05020140, -0x50201408, 0x02014080, 0x20140805, 0x01408050, 0x14080502, 0x40805020, -0x0a050201, 0x80502014, 0x05020140, 0x00201408, 0x00000000, 0x00000000, -0xc0b2a002, 0x0b2b02ca, 0xb2b02cac, 0x2b02cac0, 0xb02cac0b, 0x02cac0b2, -0x2cac0b2b, 0xcac0b2b0, 0xac0b2b02, 0xc0b2b02c, 0x0b2b02ca, 0x02b02cac, -0x00000a88, 0x00000000, 0x20120002, 0x0138804e, 0x138804e2, 0x38804e20, -0x8804e201, 0x804e2013, 0x04e20038, 0x4e20138a, 0xe2003880, 0x20138804, -0x0138804e, 0x039804e2, 0x00000000, 0x00000000, 0x10c40000, 0x8c484312, -0xc0863121, 0x48030218, 0x8631218c, 0x631218c0, 0x30218c48, 0x1218c482, -0x200c0863, 0x18c48231, 0x0c486312, 0x00803121, 0x00000000, 0x00000000, -0xfffc0000, 0xffcbfff2, 0xfcbfff2f, 0xcbfff2ff, 0xbfff2fff, 0xfff2fffc, -0xff2fffcb, 0xf2fffcbf, 0x2fffcbff, 0xfffcbfff, 0xffcbfff2, 0x00bfff2f, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xdfb40000, 0xb3437ed0, -0x7c36cd0d, 0x4bfff0db, 0x36cd0db3, 0x6cd0db7c, 0xdf0db343, 0xd0db34be, -0x0db7c36c, 0xdb34becd, 0xfb436cd0, 0x0037ed0d, 0x00000000, 0x00000000, -0x3fcc0000, 0xccc8ff32, 0xfc8f3323, 0xcbfff23c, 0x8f3323cc, 0xf3323cfc, -0x3f23ccc8, 0x323cccbf, 0x23cfc8f3, 0x3cccbf33, 0xfcc8f332, 0x008ff323, -0x00000000, 0x00000000, 0x7edc0000, 0xedc9fb72, 0xdc9fb727, 0xc9fb727e, -0x9fb727ed, 0xfb727edc, 0xb727edc9, 0x727edc9f, 0x218dc9fb, 0x7edc9fb7, -0xedc9fb72, 0x0087b727, 0x00000000, 0x00000000, 0x21c00000, 0x24d18020, -0x42100002, 0x02850061, 0x0a004034, 0x85002140, 0x51060433, 0x08c34208, -0x82143395, 0xc14008d0, 0x14218508, 0x00085002, 0x00000000, 0x00000000, -0xa0004000, 0x00528820, 0x0828900a, 0x410060a0, 0x08004804, 0x802c2001, -0x000a0040, 0x20208118, 0x44005080, 0x20000002, 0x00128020, 0x00080202, -0x00000120, 0x00000000, 0x61000000, 0x40109504, 0x1138940e, 0x128c5061, -0x08c6ce31, 0x845c2312, 0xc4061180, 0x54231828, 0x46118084, 0x23180044, -0x10b08454, 0x00284002, 0x00000000, 0x00000000, 0x20900800, 0x01308144, -0x1038340e, 0xd0006060, 0x08960e01, 0x8068201e, 0x04060133, 0x64201828, -0x0201b380, 0x20100006, 0x01318064, 0x00280602, 0x00000000, 0x00000000, -0x01124000, 0x25131454, 0x13004048, 0x10044401, 0x00e44031, 0x04400110, -0x84003133, 0x40031000, 0x00110004, 0x410020c4, 0x10800400, 0x00004000, -0x00000900, 0x00000000, 0x04400010, 0x20300100, 0x4020000c, 0x20010c00, -0x00108400, 0x01000042, 0x10000400, 0x00004000, 0x80040201, 0x80402010, -0x04000108, 0x00001000, 0x00000000, 0x00000000, 0x81110010, 0x11900474, -0x1832044c, 0x102c7c01, 0x00c44831, 0x04600319, 0xc4001100, 0x50031002, -0x40118104, 0x43103044, 0x11800454, 0x40004540, 0x00000800, 0x00000000, -0x80100000, 0x05130244, 0x1030844c, 0x80004000, 0x00a60801, 0x00400018, -0x040001b3, 0x40001000, 0x00018000, 0x00103004, 0x01800054, 0x40000540, -0x00000000, 0x00000000, 0x2a102010, 0x11e2844c, 0x53088486, 0x00855821, -0x08048281, 0x85702b53, 0xd7ceb533, 0x4823580a, 0x02153185, 0x615a08d7, -0x15008540, 0x40085402, 0x00000080, 0x00000000, 0xa2100010, 0x01028064, -0x5538844a, 0x90806c20, 0x18064201, 0x80602053, 0x04020190, 0x6420d818, -0x42019280, 0xa05b0804, 0x01808064, 0x00080642, 0x00000000, 0x00000000, -0xc1000010, 0x2411841c, 0x0620804c, 0xa08c0c21, 0x28d28a20, 0x84002305, -0xc04210a0, 0x28230828, 0x0210708c, 0x630b0840, 0x10408408, 0x40084002, -0x00000000, 0x00000000, 0xa0080800, 0x20a3801c, 0x021883c2, 0x13801c22, -0x08018a04, 0x80102803, 0x01ce0033, 0x14e00b38, 0x82002380, 0xa0020800, -0x0033801c, 0x43380082, 0x00000020, 0x00000000, 0x61000010, 0x14d08000, -0x0028408e, 0x63840ca1, 0x08c00610, 0x8400234b, 0xc00e3053, 0x0c234108, -0x8e1063a4, 0x210028c2, 0x10608400, 0x40084282, 0x00000000, 0x00000000, -0x80480000, 0x00200908, 0x0030118a, 0xb2831ca0, 0x00808800, 0x81040003, -0x10460410, 0x0c000100, 0x02040081, 0x00011010, 0x04120100, 0x00001040, -0x00000000, 0x00000000, 0x41480000, 0x14122004, 0x0d304042, 0x838c0421, -0x20c24410, 0x8408030b, 0x02c40040, 0x0c000f00, 0x4210508c, 0x030c2042, -0x10410400, 0x00004280, 0x00000000, 0x00000000, 0x40070800, 0x00120824, -0x093000cc, 0x13800806, 0x20110004, 0x00280809, 0x01402020, 0x28000500, -0x8c002300, 0x000a2001, 0x00200020, 0x00000100, 0x00000420, 0x00000000, -0x0808000c, 0x00000001, 0x0b000000, 0x02000008, 0x00000004, 0x0000080b, -0x00000000, 0x000c0b00, 0x00000000, 0x080b0000, 0x00000000, 0x33000000, -0x00000000, 0x00000000, 0x0308040c, 0x00000501, 0x09090c0a, 0x00010107, -0x08000800, 0x01010709, 0x00080402, 0x010b0908, 0x08040201, 0x03090800, -0x04020103, 0x31080008, 0x00000010, 0x00000000, 0x385be000, 0xc4030910, -0xffe52fe7, 0x01019a03, 0x980c0264, 0x00020001, 0x90019003, 0x01000001, -0x00000300, 0x00000004, 0x0c030001, 0x00019c00, 0x00000f80, 0x00000000, -0x70c80000, 0x6401322e, 0x00774532, 0x00000000, 0x00000208, 0x00000000, -0x00000001, 0x01000002, 0x00080000, 0x00000008, 0x00010000, 0x00000800, -0x00000000, 0x00000000, 0x42280000, 0x29138111, 0x02802a14, 0x44000000, -0x01000000, 0x00000000, 0x00010044, 0x00000000, 0x01004400, 0x00000100, -0x00440000, 0x00010001, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0xfc000000, 0x03ff7eff, 0x00000000, 0xf76cff7c, 0x00000002, 0xeefffc00, -0x000003fd, 0x7cfc0000, 0x00037ff6, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0x7c000000, 0x03e77beb, 0x00000000, 0xfef7fffc, -0x00000003, 0xf7fef400, 0x000003ff, 0x7efc0000, 0x0003fffe, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xf8000000, 0x03f3fbf3, -0x00000000, 0xedf2fdf8, 0x00000003, 0xf6f9f400, 0x000002ff, 0xfcfc0000, -0x0002fef7, 0x00000000, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0x3c000000, 0x03df7fcf, 0x00000000, 0xfffddefc, 0x00000003, 0xfffefc00, -0x000003ff, 0xfffc0000, 0x0003ffff, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0xfc000000, 0x03dfdeff, 0x00000000, 0xffff7ffc, -0x00000003, 0xfe7f3c00, 0x000003ff, 0xfffc0000, 0x0003ffff, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xdc000000, 0x03ffffff, -0x00000000, 0xffffffbc, 0x00000003, 0x7ffebc00, 0x000003ff, 0xbf7c0000, -0x0003feff, 0x00000000, 0x00000000, 0x00000000, 0xa3400000, 0x14528804, -0x41085006, 0xc0840421, 0x08514214, 0x85002140, 0x514234a2, 0x00210108, -0x06148085, 0xe14328d0, 0x14e08528, 0x00085002, 0x00000000, 0x00000000, -0xe2400000, 0x84028000, 0x4228000e, 0x40800820, 0x00004201, 0x80402011, -0x00828102, 0x60200208, 0x8a004080, 0x20091804, 0x00708060, 0x00080402, -0x00000000, 0x00000000, 0xa0000000, 0x5953a824, 0x1918440e, 0x00854423, -0x00444211, 0x8440211a, 0x44420191, 0x00234908, 0x42101084, 0x23032840, -0x10108404, 0x00084002, 0x00000000, 0x00000000, 0x62100000, 0x41838164, -0x1808040a, 0x80807420, 0x0004c201, 0x80702018, 0x040221a2, 0x40205908, -0x06015080, 0xe01b0807, 0x01208048, 0x00080702, 0x00000000, 0x00000000, -0x42400000, 0x55102060, 0x41004400, 0x10042801, 0x00408810, 0x04640102, -0x44083180, 0x68c11000, 0x00100004, 0x011020c4, 0x11100450, 0x01004440, -0x00000000, 0x00000000, 0x80000010, 0x00132108, 0x02301088, 0x20010400, -0x10100804, 0x01080041, 0x10000410, 0x00004000, 0x00040001, 0x80401010, -0x04200100, 0x40001080, 0x00000000, 0x00000000, 0xc0100010, 0x19d20164, -0x11306440, 0x90046c03, 0x20464411, 0x04640112, 0x864811b0, 0x64031100, -0x40115004, 0x43192046, 0x11100464, 0x41004540, 0x00000000, 0x00000000, -0x80100010, 0x01130060, 0x18000444, 0x00005c00, 0x00048801, 0x0050001a, -0x84480190, 0x68c01900, 0x40011000, 0x001d2004, 0x01800044, 0x41000400, -0x00000000, 0x00000000, 0xe0100010, 0x55418944, 0x50284442, 0x10856021, -0x08548615, 0x85606153, 0x54821500, 0x5c215108, 0x42152385, 0x615008d4, -0x15208560, 0x40085442, 0x00000000, 0x00000000, 0xe0100010, 0x01a28248, -0x111804ca, 0x50804420, 0x08054a01, 0x8040a013, 0x05422100, 0x6c201308, -0xca019080, 0x60100805, 0x01b08064, 0x400806c2, 0x00000000, 0x00000000, -0xa3000010, 0x08108014, 0x0628e0ce, 0x508c0021, 0x08428610, 0x84046107, -0x41821040, 0x0c230b28, 0x46107084, 0x83000841, 0x18708424, 0x400842c2, -0x00000000, 0x00000000, 0xe0480810, 0x0001a008, 0x0b1810ca, 0xa0801820, -0x38024e00, 0x8014600a, 0x020280b3, 0x04e00d28, 0x86000380, 0xa00b3800, -0x00138038, 0x4338000e, 0x00000020, 0x00000000, 0x20000010, 0x08928814, -0x0528414a, 0xb0840c21, 0x28400210, 0x84002108, 0x420e1081, 0x24210108, -0x02100084, 0x410128c0, 0x10b08404, 0x40084042, 0x00000000, 0x00000000, -0x08400000, 0x04030928, 0x4a303004, 0x70011400, 0x3010c004, 0x01000044, -0x104a2443, 0x0c004600, 0x8004a001, 0xa04d1013, 0x04100114, 0x00001000, -0x00000000, 0x00000000, 0x02040000, 0x10930404, 0x0130d348, 0x100c2c01, -0x30434010, 0x04200100, 0x42c62002, 0x04000100, 0x40109004, 0x43092040, -0x10300404, 0x01004140, 0x00000000, 0x00000000, 0x02090800, 0x00402000, -0x01002048, 0x30000000, 0x00028000, 0x00100000, 0x01002001, 0x28000100, -0x40004000, 0x20032000, 0x00b0000c, 0x01000140, 0x00000420, 0x00000000, -0x08080000, 0x04000401, 0x0b000801, 0x00040008, 0x00000004, 0x0802000b, -0x00010801, 0x02000b00, 0x01080108, 0x000b0000, 0x08010802, 0x03000001, -0x00000000, 0x00000000, 0x03083c3c, 0x00000901, 0x09090809, 0x00010107, -0x08000800, 0x01010309, 0x00080000, 0x01030908, 0x08000001, 0x03090800, -0x00000101, 0xf1080008, 0x000000f0, 0x00000000, 0xa1240000, 0x1402b696, -0x02482655, 0x02019a98, 0x00000000, 0x00030000, 0x08019c03, 0x02000000, -0x00000200, 0x00000190, 0x0c000000, 0x00000c00, 0x00000000, 0x00000000, -0x1a980000, 0x00017333, 0x0229620b, 0x00000100, 0x00880008, 0x00000000, -0x08000001, 0x00000002, 0x00080000, 0x00000000, 0x08010001, 0x00000800, -0x00000000, 0x00000000, 0x84100000, 0x41132183, 0x00218040, 0x44000000, -0x00000100, 0x00000000, 0x00020044, 0x00000000, 0x01004400, 0x00000100, -0x00440000, 0x00010003, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0xfc000000, 0x03ffffff, 0x00000000, 0x7fff7ffc, 0x00000003, 0xf7fefc00, -0x000003ff, 0xdefc0000, 0x0001fff7, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0xfc000000, 0x03ffffff, 0x00000000, 0x7fff7ffc, -0x00000001, 0xfffffc00, 0x0000007f, 0xfffc0000, 0x0002fffe, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xfc000000, 0x03ffffff, -0x00000000, 0xfffdfefc, 0x00000003, 0xfdfffc00, 0x000003ff, 0xfffc0000, -0x0003ffff, 0x00000000, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0xfc000000, 0x03ef7f7f, 0x00000000, 0x9ffffffc, 0x00000003, 0xfffffc00, -0x000003fc, 0xfffc0000, 0x0003ffff, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0xfc000000, 0x03ffffff, 0x00000000, 0xfdddfdfc, -0x00000003, 0xffff7c00, 0x000003fd, 0xfffc0000, 0x0003ffff, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xfc000000, 0x03ffbfff, -0x00000000, 0xfffefffc, 0x00000003, 0x7ffffc00, 0x000003ff, 0xff7c0000, -0x0003feff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x8004000c, 0x00000040, 0x71c2000c, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x8004000c, 0x00004040, 0x01c2000c, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x8000000c, 0xefcf0000, 0x8001000c, 0xc0000000, 0x7002000c, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x8001000c, 0xa0000000, 0x8005000c, 0x00000000, 0x8000000c, -0xe9d60000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -}; diff -Nru a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c --- a/sound/pci/rme9652/hdsp.c Sat Apr 12 14:44:07 2003 +++ b/sound/pci/rme9652/hdsp.c Sat Apr 12 14:44:07 2003 @@ -3,6 +3,7 @@ * * Copyright (c) 2002 Paul Davis * Marcus Andersson + * Thomas Charbonnel * * 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 @@ -23,7 +24,6 @@ #include #include #include -#include #include #include @@ -33,22 +33,20 @@ #include #include #include +#include #define SNDRV_GET_ID #include +#include #include #include #include -#include "multiface_firmware.dat" -#include "digiface_firmware.dat" - static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ static int precise_ptr[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0 }; /* Enable precise pointer */ static int line_outs_monitor[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0}; /* Send all inputs/playback to line outs */ -static int force_firmware[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 0}; /* Force firmware reload */ MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(index, "Index value for RME Hammerfall DSP interface."); @@ -65,19 +63,12 @@ MODULE_PARM(line_outs_monitor,"1-" __MODULE_STRING(SNDRV_CARDS) "i"); MODULE_PARM_DESC(line_outs_monitor, "Send all input and playback streams to line outs by default."); MODULE_PARM_SYNTAX(line_outs_monitor, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_PARM(force_firmware,"1-" __MODULE_STRING(SNDRV_CARDS) "i"); -MODULE_PARM_DESC(force_firmware, "Force a reload of the I/O box firmware"); -MODULE_PARM_SYNTAX(force_firmware, SNDRV_ENABLED "," SNDRV_BOOLEAN_FALSE_DESC); -MODULE_AUTHOR("Paul Davis "); +MODULE_AUTHOR("Paul Davis , Marcus Andersson, Thomas Charbonnel "); MODULE_DESCRIPTION("RME Hammerfall DSP"); MODULE_LICENSE("GPL"); MODULE_CLASSES("{sound}"); -MODULE_DEVICES("{{RME,Hammerfall-DSP}}"); - -typedef enum { - Digiface, - Multiface -} HDSP_Type; +MODULE_DEVICES("{{RME Hammerfall-DSP}," + "{RME HDSP-9652}}"); #define HDSP_MAX_CHANNELS 26 #define DIGIFACE_SS_CHANNELS 26 @@ -123,9 +114,9 @@ #define HDSP_playbackPeakLevel 4096 /* 26 * 32 bit values */ #define HDSP_inputPeakLevel 4224 /* 26 * 32 bit values */ -#define HDSP_outputPeakLevel 4100 /* 26 * 32 bit values */ +#define HDSP_outputPeakLevel 4352 /* (26+2) * 32 bit values */ #define HDSP_playbackRmsLevel 4612 /* 26 * 64 bit values */ -#define HDSP_inputRmsLevel 4884 /* 26 * 64 bit values */ +#define HDSP_inputRmsLevel 4868 /* 26 * 64 bit values */ #define HDSP_IO_EXTENT 5192 @@ -148,19 +139,19 @@ /* Control Register bits */ -#define HDSP_Start (1<<0) // start engine -#define HDSP_Latency0 (1<<1) // buffer size = 2^n where n is defined by Latency{2,1,0} -#define HDSP_Latency1 (1<<2) // [ see above ] -#define HDSP_Latency2 (1<<3) // ] see above ] -#define HDSP_ClockModeMaster (1<<4) // 1=Master, 0=Slave/Autosync -#define HDSP_AudioInterruptEnable (1<<5) // what do you think ? -#define HDSP_Frequency0 (1<<6) // 0=44.1kHz/88.2kHz 1=48kHz/96kHz -#define HDSP_Frequency1 (1<<7) // 0=32kHz/64kHz -#define HDSP_DoubleSpeed (1<<8) // 0=normal speed, 1=double speed -#define HDSP_SPDIFProfessional (1<<9) // 0=consumer, 1=professional -#define HDSP_SPDIFEmphasis (1<<10) // 0=none, 1=on -#define HDSP_SPDIFNonAudio (1<<11) // 0=off, 1=on -#define HDSP_SPDIFOpticalOut (1<<12) // 1=use 1st ADAT connector for SPDIF, 0=do not +#define HDSP_Start (1<<0) /* start engine */ +#define HDSP_Latency0 (1<<1) /* buffer size = 2^n where n is defined by Latency{2,1,0} */ +#define HDSP_Latency1 (1<<2) /* [ see above ] */ +#define HDSP_Latency2 (1<<3) /* ] see above ] */ +#define HDSP_ClockModeMaster (1<<4) /* 1=Master, 0=Slave/Autosync */ +#define HDSP_AudioInterruptEnable (1<<5) /* what do you think ? */ +#define HDSP_Frequency0 (1<<6) /* 0=44.1kHz/88.2kHz 1=48kHz/96kHz */ +#define HDSP_Frequency1 (1<<7) /* 0=32kHz/64kHz */ +#define HDSP_DoubleSpeed (1<<8) /* 0=normal speed, 1=double speed */ +#define HDSP_SPDIFProfessional (1<<9) /* 0=consumer, 1=professional */ +#define HDSP_SPDIFEmphasis (1<<10) /* 0=none, 1=on */ +#define HDSP_SPDIFNonAudio (1<<11) /* 0=off, 1=on */ +#define HDSP_SPDIFOpticalOut (1<<12) /* 1=use 1st ADAT connector for SPDIF, 0=do not */ #define HDSP_SyncRef2 (1<<13) #define HDSP_SPDIFInputSelect0 (1<<14) #define HDSP_SPDIFInputSelect1 (1<<15) @@ -186,15 +177,40 @@ #define HDSP_SyncRef_WORD (HDSP_SyncRef2) #define HDSP_SyncRef_ADAT_SYNC (HDSP_SyncRef0|HDSP_SyncRef2) -/* Preferred sync source choices - used by "sync_pref" control switch */ +/* Sample Clock Sources */ -#define HDSP_SYNC_FROM_SELF 0 -#define HDSP_SYNC_FROM_WORD 1 -#define HDSP_SYNC_FROM_ADAT_SYNC 2 -#define HDSP_SYNC_FROM_SPDIF 3 -#define HDSP_SYNC_FROM_ADAT1 4 -#define HDSP_SYNC_FROM_ADAT2 5 -#define HDSP_SYNC_FROM_ADAT3 6 +#define HDSP_CLOCK_SOURCE_AUTOSYNC 0 +#define HDSP_CLOCK_SOURCE_INTERNAL_32KHZ 1 +#define HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ 2 +#define HDSP_CLOCK_SOURCE_INTERNAL_48KHZ 3 +#define HDSP_CLOCK_SOURCE_INTERNAL_64KHZ 4 +#define HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ 5 +#define HDSP_CLOCK_SOURCE_INTERNAL_96KHZ 6 + +/* Preferred sync reference choices - used by "pref_sync_ref" control switch */ + +#define HDSP_SYNC_FROM_WORD 0 +#define HDSP_SYNC_FROM_ADAT_SYNC 1 +#define HDSP_SYNC_FROM_SPDIF 2 +#define HDSP_SYNC_FROM_ADAT1 3 +#define HDSP_SYNC_FROM_ADAT2 4 +#define HDSP_SYNC_FROM_ADAT3 5 + +/* SyncCheck status */ + +#define HDSP_SYNC_CHECK_NO_LOCK 0 +#define HDSP_SYNC_CHECK_LOCK 1 +#define HDSP_SYNC_CHECK_SYNC 2 + +/* AutoSync references - used by "autosync_ref" control switch */ + +#define HDSP_AUTOSYNC_FROM_WORD 0 +#define HDSP_AUTOSYNC_FROM_ADAT_SYNC 1 +#define HDSP_AUTOSYNC_FROM_SPDIF 2 +#define HDSP_AUTOSYNC_FROM_NONE 3 +#define HDSP_AUTOSYNC_FROM_ADAT1 4 +#define HDSP_AUTOSYNC_FROM_ADAT2 5 +#define HDSP_AUTOSYNC_FROM_ADAT3 6 /* Possible sources of S/PDIF input */ @@ -242,13 +258,13 @@ #define HDSP_spdifFrequencyMask (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2) -#define HDSP_spdifFrequency32KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency1|HDSP_spdifFrequency2) -#define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency2|HDSP_spdifFrequency1) -#define HDSP_spdifFrequency48KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2) - -#define HDSP_spdifFrequency64KHz 0 -#define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency2) -#define HDSP_spdifFrequency96KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency1) +#define HDSP_spdifFrequency32KHz (HDSP_spdifFrequency0) +#define HDSP_spdifFrequency44_1KHz (HDSP_spdifFrequency1) +#define HDSP_spdifFrequency48KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency1) + +#define HDSP_spdifFrequency64KHz (HDSP_spdifFrequency2) +#define HDSP_spdifFrequency88_2KHz (HDSP_spdifFrequency0|HDSP_spdifFrequency2) +#define HDSP_spdifFrequency96KHz (HDSP_spdifFrequency2|HDSP_spdifFrequency1) /* Status2 Register bits */ @@ -282,15 +298,17 @@ #define HDSP_SelSyncRef_WORD (HDSP_SelSyncRef2) #define HDSP_SelSyncRef_ADAT_SYNC (HDSP_SelSyncRef0|HDSP_SelSyncRef2) -/* FIFO wait times, defined in terms of loops on readl() */ +/* Card state flags */ -#define HDSP_LONG_WAIT 40000 -#define HDSP_SHORT_WAIT 100 +#define HDSP_InitializationComplete (1<<0) +#define HDSP_FirmwareLoaded (1<<1) +#define HDSP_FirmwareCached (1<<2) -/* Computing addresses for adjusting gains */ +/* FIFO wait times, defined in terms of 1/10ths of msecs */ + +#define HDSP_LONG_WAIT 5000 +#define HDSP_SHORT_WAIT 30 -#define INPUT_TO_OUTPUT_KEY(in,out) ((64 * (out)) + (in)) -#define PLAYBACK_TO_OUTPUT_KEY(chn,out) ((64 * (out)) + 32 + (chn)) #define UNITY_GAIN 32768 #define MINUS_INFINITY_GAIN 0 @@ -318,10 +336,8 @@ #define HDSP_DMA_AREA_BYTES ((HDSP_MAX_CHANNELS+1) * HDSP_CHANNEL_BUFFER_BYTES) #define HDSP_DMA_AREA_KILOBYTES (HDSP_DMA_AREA_BYTES/1024) -#define HDSP_MATRIX_MIXER_SIZE 2048 - -typedef struct _hdsp hdsp_t; -typedef struct _hdsp_midi hdsp_midi_t; +typedef struct _hdsp hdsp_t; +typedef struct _hdsp_midi hdsp_midi_t; struct _hdsp_midi { hdsp_t *hdsp; @@ -332,45 +348,54 @@ char istimer; /* timer in use */ struct timer_list timer; spinlock_t lock; + int pending; }; struct _hdsp { - spinlock_t lock; - snd_pcm_substream_t *capture_substream; - snd_pcm_substream_t *playback_substream; - hdsp_midi_t midi[2]; - int precise_ptr; - u32 control_register; /* cached value */ - u32 creg_spdif; - u32 creg_spdif_stream; - char *card_name; /* digiface/multiface */ - HDSP_Type type; /* ditto, but for code use */ - size_t period_bytes; /* guess what this is */ - unsigned char ds_channels; - unsigned char ss_channels; /* different for multiface/digiface */ - void *capture_buffer_unaligned; /* original buffer addresses */ - void *playback_buffer_unaligned; /* original buffer addresses */ - unsigned char *capture_buffer; /* suitably aligned address */ - unsigned char *playback_buffer; /* suitably aligned address */ - dma_addr_t capture_buffer_addr; - dma_addr_t playback_buffer_addr; - pid_t capture_pid; - pid_t playback_pid; - int running; - int passthru; /* non-zero if doing pass-thru */ - int last_spdif_sample_rate; /* so that we can catch externally ... */ - int last_adat_sample_rate; /* ... induced rate changes */ - char *channel_map; - int dev; - int irq; - unsigned long port; - struct resource *res_port; - unsigned long iobase; - snd_card_t *card; - snd_pcm_t *pcm; - struct pci_dev *pci; - snd_kcontrol_t *spdif_ctl; - unsigned short mixer_matrix[HDSP_MATRIX_MIXER_SIZE]; + spinlock_t lock; + snd_pcm_substream_t *capture_substream; + snd_pcm_substream_t *playback_substream; + hdsp_midi_t midi[2]; + struct tasklet_struct midi_tasklet; + int precise_ptr; + u32 control_register; /* cached value */ + u32 creg_spdif; + u32 creg_spdif_stream; + char *card_name; /* digiface/multiface */ + HDSP_IO_Type io_type; /* ditto, but for code use */ + unsigned short firmware_rev; + unsigned short state; /* stores state bits */ + u32 firmware_cache[24413]; /* this helps recover from accidental iobox power failure */ + size_t period_bytes; /* guess what this is */ + unsigned char ds_channels; + unsigned char ss_channels; /* different for multiface/digiface */ + void *capture_buffer_unaligned; /* original buffer addresses */ + void *playback_buffer_unaligned; /* original buffer addresses */ + unsigned char *capture_buffer; /* suitably aligned address */ + unsigned char *playback_buffer; /* suitably aligned address */ + dma_addr_t capture_buffer_addr; + dma_addr_t playback_buffer_addr; + pid_t capture_pid; + pid_t playback_pid; + int running; + int passthru; /* non-zero if doing pass-thru */ + int last_spdif_sample_rate;/* for information reporting */ + int last_external_sample_rate; + int last_internal_sample_rate; + int system_sample_rate; + char *channel_map; + int dev; + int irq; + unsigned long port; + struct resource *res_port; + unsigned long iobase; + snd_card_t *card; + snd_pcm_t *pcm; + snd_hwdep_t *hwdep; + struct pci_dev *pci; + snd_kcontrol_t *spdif_ctl; + snd_kcontrol_t *playback_mixer_ctls[HDSP_MAX_CHANNELS]; + unsigned short mixer_matrix[HDSP_MATRIX_MIXER_SIZE]; }; /* These tables map the ALSA channels 1..N to the channels that we @@ -387,7 +412,7 @@ }; static char channel_map_mf_ss[HDSP_MAX_CHANNELS] = { /* Multiface */ - /* ADAT 0 */ + /* Analog */ 0, 1, 2, 3, 4, 5, 6, 7, /* ADAT 2 */ 16, 17, 18, 19, 20, 21, 22, 23, @@ -414,8 +439,8 @@ static struct pci_device_id snd_hdsp_ids[] __devinitdata = { { - .vendor = PCI_VENDOR_ID_XILINX, - .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP, + .vendor = PCI_VENDOR_ID_XILINX, + .device = PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP, .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, }, /* RME Hammerfall-DSP */ @@ -424,6 +449,49 @@ MODULE_DEVICE_TABLE(pci, snd_hdsp_ids); +/* prototypes */ +static int __devinit snd_hdsp_create_alsa_devices(snd_card_t *card, hdsp_t *hdsp); +static int __devinit snd_hdsp_create_pcm(snd_card_t *card, hdsp_t *hdsp); +static inline int snd_hdsp_initialize_input_enable (hdsp_t *hdsp); +static inline void snd_hdsp_initialize_midi_flush (hdsp_t *hdsp); +static inline void snd_hdsp_initialize_channels (hdsp_t *hdsp); +static inline int hdsp_fifo_wait(hdsp_t *hdsp, int count, int timeout); +static int hdsp_update_simple_mixer_controls(hdsp_t *hdsp); +static int hdsp_autosync_ref(hdsp_t *hdsp); +static int snd_hdsp_set_defaults(hdsp_t *hdsp); + +static inline int hdsp_is_9652 (hdsp_t *hdsp) +{ + switch (hdsp->firmware_rev) { + case 0x64: + case 0x65: + case 0x68: + return 1; + default: + return 0; + } +} + +static inline int hdsp_playback_to_output_key (hdsp_t *hdsp, int in, int out) +{ + switch (hdsp->firmware_rev) { + case 0xa: + return (64 * out) + (32 + (in)); + default: + return (52 * out) + (26 + (in)); + } +} + +static inline int hdsp_input_to_output_key (hdsp_t *hdsp, int in, int out) +{ + switch (hdsp->firmware_rev) { + case 0xa: + return (64 * out) + in; + default: + return (52 * out) + in; + } +} + static inline void hdsp_write(hdsp_t *hdsp, int reg, int val) { writel(val, hdsp->iobase + reg); @@ -434,24 +502,124 @@ return readl (hdsp->iobase + reg); } -static inline unsigned long long hdsp_read64 (hdsp_t *hdsp, int reg) +static inline int hdsp_check_for_iobox (hdsp_t *hdsp) { - unsigned long long val; - val = hdsp_read(hdsp, reg); - val = (val<<32)|hdsp_read(hdsp, reg + 4); + if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_ConfigError) { + snd_printk ("Hammerfall-DSP: no Digiface or Multiface connected!\n"); + hdsp->state &= ~HDSP_FirmwareLoaded; + return -EIO; + } + return 0; +} - return val; +static int snd_hdsp_load_firmware_from_cache(hdsp_t *hdsp) { + + int i; + unsigned long flags; + + if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { + + snd_printk ("loading firmware\n"); + + hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_PROGRAM); + hdsp_write (hdsp, HDSP_fifoData, 0); + + if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { + snd_printk ("timeout waiting for download preparation\n"); + return -EIO; + } + + hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_LOAD); + + for (i = 0; i < 24413; ++i) { + hdsp_write(hdsp, HDSP_fifoData, hdsp->firmware_cache[i]); + if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) { + snd_printk ("timeout during firmware loading\n"); + return -EIO; + } + } + + if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { + snd_printk ("timeout at end of firmware loading\n"); + return -EIO; + } + + hdsp_write (hdsp, HDSP_jtagReg, 0); + snd_printk ("finished firmware loading\n"); + + if ((1000 / HZ) < 3000) { + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout((3000 * HZ + 999) / 1000); + } else { + mdelay(3000); + } + } + if (hdsp->state & HDSP_InitializationComplete) { + snd_printk("firmware loaded from cache, restoring defaults\n"); + spin_lock_irqsave(&hdsp->lock, flags); + snd_hdsp_set_defaults(hdsp); + spin_unlock_irqrestore(&hdsp->lock, flags); + } + + hdsp->state |= HDSP_FirmwareLoaded; + + return 0; } -static inline int hdsp_check_for_iobox (hdsp_t *hdsp) +static inline int hdsp_get_iobox_version (hdsp_t *hdsp) { - if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_ConfigError) { - snd_printk ("Hammerfall-DSP: no Digiface or Multiface connected!\n"); + int err; + + if (hdsp_check_for_iobox (hdsp)) { + return -EIO; + } + + if ((err = snd_hdsp_initialize_input_enable(hdsp)) < 0) { + return err; + } + + if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { + + hdsp_write (hdsp, HDSP_jtagReg, HDSP_PROGRAM); + hdsp_write (hdsp, HDSP_fifoData, 0); + if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT) < 0) { + return -EIO; + } + + hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_LOAD); + hdsp_write (hdsp, HDSP_fifoData, 0); + + if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT)) { + hdsp->io_type = Multiface; + hdsp_write (hdsp, HDSP_jtagReg, HDSP_VERSION_BIT); + hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_LOAD); + hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT); + } else { + hdsp->io_type = Digiface; + } + } else { + /* firmware was already loaded, get iobox type */ + if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) { + hdsp->io_type = Multiface; + } else { + hdsp->io_type = Digiface; + } + } + return 0; +} + + +static inline int hdsp_check_for_firmware (hdsp_t *hdsp) +{ + if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { + snd_printk("firmware not present.\n"); + hdsp->state &= ~HDSP_FirmwareLoaded; return -EIO; } return 0; } + static inline int hdsp_fifo_wait(hdsp_t *hdsp, int count, int timeout) { int i; @@ -460,10 +628,18 @@ are available in the command FIFO. */ - for (i = 0; i < timeout; i++) + for (i = 0; i < timeout; i++) { + if ((int)(hdsp_read (hdsp, HDSP_fifoStatus) & 0xff) <= count) return 0; + /* not very friendly, but we only do this during a firmware + load and changing the mixer, so we just put up with it. + */ + + udelay (100); + } + snd_printk ("wait for FIFO status <= %d failed after %d iterations\n", count, timeout); return -1; @@ -481,16 +657,46 @@ { unsigned int ad; - if (addr >= HDSP_MATRIX_MIXER_SIZE) - return -1; + if (hdsp_is_9652 (hdsp)) { - ad = data + addr * 65536; + if ((ad = addr/2) < 676) { + + /* from martin björnsen: + + "You can only write dwords to the + mixer memory which contain two + mixer values in the low and high + word. So if you want to change + value 0 you have to read value 1 + from the cache and write both to + the first dword in the mixer + memory." + */ + + hdsp->mixer_matrix[addr] = data; + hdsp_write (hdsp, 1024 + ad, + (hdsp->mixer_matrix[(addr&0x7fe)+1] << 16) + + hdsp->mixer_matrix[addr&0x7fe]); + return 0; + } else { + return -1; + } + + + } else { + if (addr >= HDSP_MATRIX_MIXER_SIZE) + return -1; + + ad = (addr << 16) + data; + + if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT)) { + return -1; + } + + hdsp_write (hdsp, HDSP_fifoData, ad); + hdsp->mixer_matrix[addr] = data; - if (hdsp_fifo_wait(hdsp, 127, HDSP_LONG_WAIT)) { - return -1; } - hdsp_write (hdsp, HDSP_fifoData, ad); - hdsp->mixer_matrix[addr] = data; return 0; } @@ -509,7 +715,7 @@ return ret; } -static inline int hdsp_system_sample_rate (hdsp_t *hdsp) +static inline int hdsp_external_sample_rate (hdsp_t *hdsp) { unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register); unsigned int rate_bits = status2 & HDSP_systemFrequencyMask; @@ -521,7 +727,8 @@ case HDSP_systemFrequency64: return 64000; case HDSP_systemFrequency88_2: return 88200; case HDSP_systemFrequency96: return 96000; - default: return 0; + default: + return 0; } } @@ -533,7 +740,7 @@ if (status & HDSP_SPDIFErrorFlag) { return 0; } - + switch (rate_bits) { case HDSP_spdifFrequency32KHz: return 32000; case HDSP_spdifFrequency44_1KHz: return 44100; @@ -542,7 +749,7 @@ case HDSP_spdifFrequency88_2KHz: return 88200; case HDSP_spdifFrequency96KHz: return 96000; default: - snd_printk ("unknown frequency status; bits = 0x%x, status = 0x%x", rate_bits, status); + snd_printk ("unknown spdif frequency status; bits = 0x%x, status = 0x%x\n", rate_bits, status); return 0; } } @@ -571,17 +778,7 @@ static inline void hdsp_reset_hw_pointer(hdsp_t *hdsp) { -#if 0 - /* reset the hw pointer to zero. We do this by writing to 8 - registers, each of which is a 32bit wide register, and set - them all to zero. - */ - - for (i = 0; i < 8; ++i) { - hdsp_write(hdsp, i, 0); - udelay(10); - } -#endif + hdsp_write (hdsp, HDSP_resetPointer, 0); } static inline void hdsp_start_audio(hdsp_t *s) @@ -626,16 +823,33 @@ return 0; } -static int hdsp_set_rate(hdsp_t *hdsp, int rate) +static int hdsp_set_rate(hdsp_t *hdsp, int rate, int called_internally) { int reject_if_open = 0; int current_rate; + int rate_bits; - if (!(hdsp->control_register & HDSP_ClockModeMaster)) { - snd_printk ("device is not running as a clock master: cannot set sample rate.\n"); - return -1; + if (!(hdsp->control_register & HDSP_ClockModeMaster)) { + if (called_internally) { + /* request from ctl or card initialization */ + snd_printk("device is not running as a clock master: cannot set sample rate.\n"); + return -1; + } else { + /* hw_param request while in AutoSync mode */ + int external_freq = hdsp_external_sample_rate(hdsp); + int spdif_freq = hdsp_spdif_sample_rate(hdsp); + + if ((spdif_freq == external_freq*2) && (hdsp_autosync_ref(hdsp) >= HDSP_AUTOSYNC_FROM_ADAT1)) { + snd_printk("Detected ADAT in double speed mode\n"); + } else if (rate != external_freq) { + snd_printk("No AutoSync source for requested rate\n"); + return -1; + } + } } + current_rate = hdsp->system_sample_rate; + /* Changing from a "single speed" to a "double speed" rate is not allowed if any substreams are open. This is because such a change causes a shift in the location of @@ -644,48 +858,46 @@ Note that a similar but essentially insoluble problem exists for externally-driven rate changes. All we can do - is to flag rate changes in the read/write routines. - */ + is to flag rate changes in the read/write routines. */ spin_lock_irq(&hdsp->lock); - current_rate = hdsp_system_sample_rate(hdsp); switch (rate) { case 32000: if (current_rate > 48000) { reject_if_open = 1; } - rate = HDSP_Frequency32KHz; + rate_bits = HDSP_Frequency32KHz; break; case 44100: if (current_rate > 48000) { reject_if_open = 1; } - rate = HDSP_Frequency44_1KHz; + rate_bits = HDSP_Frequency44_1KHz; break; case 48000: if (current_rate > 48000) { reject_if_open = 1; } - rate = HDSP_Frequency48KHz; + rate_bits = HDSP_Frequency48KHz; break; case 64000: - if (current_rate < 48000) { + if (current_rate <= 48000) { reject_if_open = 1; } - rate = HDSP_Frequency64KHz; + rate_bits = HDSP_Frequency64KHz; break; case 88200: - if (current_rate < 48000) { + if (current_rate <= 48000) { reject_if_open = 1; } - rate = HDSP_Frequency88_2KHz; + rate_bits = HDSP_Frequency88_2KHz; break; case 96000: - if (current_rate < 48000) { + if (current_rate <= 48000) { reject_if_open = 1; } - rate = HDSP_Frequency96KHz; + rate_bits = HDSP_Frequency96KHz; break; default: spin_unlock_irq(&hdsp->lock); @@ -701,21 +913,30 @@ } hdsp->control_register &= ~HDSP_FrequencyMask; - hdsp->control_register |= rate; + hdsp->control_register |= rate_bits; hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); if (rate > 48000) { hdsp->channel_map = channel_map_ds; } else { - switch (hdsp->type) { + switch (hdsp->io_type) { case Multiface: hdsp->channel_map = channel_map_mf_ss; break; case Digiface: hdsp->channel_map = channel_map_df_ss; break; + default: + /* should never happen */ + break; } } + + hdsp->system_sample_rate = rate; + + if (reject_if_open) { + hdsp_update_simple_mixer_controls (hdsp); + } spin_unlock_irq(&hdsp->lock); return 0; @@ -734,11 +955,11 @@ if (enable) { for (i = 0; i < 26; i++) { - hdsp_write_gain (hdsp, INPUT_TO_OUTPUT_KEY(i,i), UNITY_GAIN); + hdsp_write_gain (hdsp, hdsp_input_to_output_key(hdsp,i,i), UNITY_GAIN); } } else { for (i = 0; i < 26; i++) { - hdsp_write_gain (hdsp, INPUT_TO_OUTPUT_KEY(i,i), MINUS_INFINITY_GAIN); + hdsp_write_gain (hdsp, hdsp_input_to_output_key(hdsp,i,i), MINUS_INFINITY_GAIN); } } @@ -752,9 +973,9 @@ snd_assert(mapped_channel > -1, return); if (enable) { - hdsp_write_gain (hdsp, INPUT_TO_OUTPUT_KEY(mapped_channel,mapped_channel), UNITY_GAIN); + hdsp_write_gain (hdsp, hdsp_input_to_output_key(hdsp,mapped_channel,mapped_channel), UNITY_GAIN); } else { - hdsp_write_gain (hdsp, INPUT_TO_OUTPUT_KEY(mapped_channel,mapped_channel), MINUS_INFINITY_GAIN); + hdsp_write_gain (hdsp, hdsp_input_to_output_key(hdsp,mapped_channel,mapped_channel), MINUS_INFINITY_GAIN); } } } @@ -851,7 +1072,6 @@ /* Output is not interrupt driven */ spin_lock_irqsave (&hmidi->lock, flags); - if (hmidi->output) { if (!snd_rawmidi_transmit_empty (hmidi->output)) { if ((n_pending = snd_hdsp_midi_output_possible (hmidi->hdsp, hmidi->id)) > 0) { @@ -865,7 +1085,6 @@ } } } - spin_unlock_irqrestore (&hmidi->lock, flags); return 0; } @@ -878,7 +1097,6 @@ int i; spin_lock_irqsave (&hmidi->lock, flags); - if ((n_pending = snd_hdsp_midi_input_available (hmidi->hdsp, hmidi->id)) > 0) { if (hmidi->input) { if (n_pending > (int)sizeof (buf)) { @@ -896,7 +1114,14 @@ snd_hdsp_midi_read_byte (hmidi->hdsp, hmidi->id); } } - } + } + hmidi->pending = 0; + if (hmidi->id) { + hmidi->hdsp->control_register |= HDSP_Midi1InterruptEnable; + } else { + hmidi->hdsp->control_register |= HDSP_Midi0InterruptEnable; + } + hdsp_write(hmidi->hdsp, HDSP_controlRegister, hmidi->hdsp->control_register); spin_unlock_irqrestore (&hmidi->lock, flags); return snd_hdsp_midi_output_write (hmidi); } @@ -1056,6 +1281,7 @@ hdsp->midi[id].output = NULL; hdsp->midi[id].hdsp = hdsp; hdsp->midi[id].istimer = 0; + hdsp->midi[id].pending = 0; spin_lock_init (&hdsp->midi[id].lock); sprintf (buf, "%s MIDI %d", card->shortname, id+1); @@ -1178,9 +1404,12 @@ } #define HDSP_SPDIF_IN(xname, xindex) \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = xname, .index = xindex, \ +{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ + .name = xname, \ + .index = xindex, \ .info = snd_hdsp_info_spdif_in, \ - .get = snd_hdsp_get_spdif_in, .put = snd_hdsp_put_spdif_in } + .get = snd_hdsp_get_spdif_in, \ + .put = snd_hdsp_put_spdif_in } static unsigned int hdsp_spdif_in(hdsp_t *hdsp) { @@ -1211,11 +1440,8 @@ static int snd_hdsp_get_spdif_in(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - unsigned long flags; - spin_lock_irqsave(&hdsp->lock, flags); ucontrol->value.enumerated.item[0] = hdsp_spdif_in(hdsp); - spin_unlock_irqrestore(&hdsp->lock, flags); return 0; } @@ -1238,8 +1464,8 @@ } #define HDSP_SPDIF_OUT(xname, xindex) \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = xname, .index = xindex, \ - .info = snd_hdsp_info_spdif_out, \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, .name = xname, .index = xindex, \ + .info = snd_hdsp_info_spdif_bits, \ .get = snd_hdsp_get_spdif_out, .put = snd_hdsp_put_spdif_out } static int hdsp_spdif_out(hdsp_t *hdsp) @@ -1258,7 +1484,7 @@ return 0; } -static int snd_hdsp_info_spdif_out(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_hdsp_info_spdif_bits(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; uinfo->count = 1; @@ -1270,11 +1496,8 @@ static int snd_hdsp_get_spdif_out(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - unsigned long flags; - spin_lock_irqsave(&hdsp->lock, flags); ucontrol->value.integer.value[0] = hdsp_spdif_out(hdsp); - spin_unlock_irqrestore(&hdsp->lock, flags); return 0; } @@ -1295,20 +1518,436 @@ return change; } -#define HDSP_SYNC_PREF(xname, xindex) \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = xname, .index = xindex, \ - .info = snd_hdsp_info_sync_pref, \ - .get = snd_hdsp_get_sync_pref, .put = snd_hdsp_put_sync_pref } +#define HDSP_SPDIF_PROFESSIONAL(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, .name = xname, .index = xindex, \ + .info = snd_hdsp_info_spdif_bits, \ + .get = snd_hdsp_get_spdif_professional, .put = snd_hdsp_put_spdif_professional } -static int hdsp_sync_pref(hdsp_t *hdsp) +static int hdsp_spdif_professional(hdsp_t *hdsp) { - /* Notice that this looks at the requested sync source, - not the one actually in use. - */ + return (hdsp->control_register & HDSP_SPDIFProfessional) ? 1 : 0; +} + +static int hdsp_set_spdif_professional(hdsp_t *hdsp, int val) +{ + if (val) { + hdsp->control_register |= HDSP_SPDIFProfessional; + } else { + hdsp->control_register &= ~HDSP_SPDIFProfessional; + } + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + return 0; +} + +static int snd_hdsp_get_spdif_professional(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = hdsp_spdif_professional(hdsp); + return 0; +} + +static int snd_hdsp_put_spdif_professional(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + unsigned long flags; + int change; + unsigned int val; + + if (!snd_hdsp_use_is_exclusive(hdsp)) + return -EBUSY; + val = ucontrol->value.integer.value[0] & 1; + spin_lock_irqsave(&hdsp->lock, flags); + change = (int)val != hdsp_spdif_professional(hdsp); + hdsp_set_spdif_professional(hdsp, val); + spin_unlock_irqrestore(&hdsp->lock, flags); + return change; +} + +#define HDSP_SPDIF_EMPHASIS(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, .name = xname, .index = xindex, \ + .info = snd_hdsp_info_spdif_bits, \ + .get = snd_hdsp_get_spdif_emphasis, .put = snd_hdsp_put_spdif_emphasis } + +static int hdsp_spdif_emphasis(hdsp_t *hdsp) +{ + return (hdsp->control_register & HDSP_SPDIFEmphasis) ? 1 : 0; +} + +static int hdsp_set_spdif_emphasis(hdsp_t *hdsp, int val) +{ + if (val) { + hdsp->control_register |= HDSP_SPDIFEmphasis; + } else { + hdsp->control_register &= ~HDSP_SPDIFEmphasis; + } + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + return 0; +} + +static int snd_hdsp_get_spdif_emphasis(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = hdsp_spdif_emphasis(hdsp); + return 0; +} + +static int snd_hdsp_put_spdif_emphasis(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + unsigned long flags; + int change; + unsigned int val; + + if (!snd_hdsp_use_is_exclusive(hdsp)) + return -EBUSY; + val = ucontrol->value.integer.value[0] & 1; + spin_lock_irqsave(&hdsp->lock, flags); + change = (int)val != hdsp_spdif_emphasis(hdsp); + hdsp_set_spdif_emphasis(hdsp, val); + spin_unlock_irqrestore(&hdsp->lock, flags); + return change; +} + +#define HDSP_SPDIF_NON_AUDIO(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, .name = xname, .index = xindex, \ + .info = snd_hdsp_info_spdif_bits, \ + .get = snd_hdsp_get_spdif_nonaudio, .put = snd_hdsp_put_spdif_nonaudio } + +static int hdsp_spdif_nonaudio(hdsp_t *hdsp) +{ + return (hdsp->control_register & HDSP_SPDIFNonAudio) ? 1 : 0; +} + +static int hdsp_set_spdif_nonaudio(hdsp_t *hdsp, int val) +{ + if (val) { + hdsp->control_register |= HDSP_SPDIFNonAudio; + } else { + hdsp->control_register &= ~HDSP_SPDIFNonAudio; + } + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + return 0; +} + +static int snd_hdsp_get_spdif_nonaudio(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.integer.value[0] = hdsp_spdif_nonaudio(hdsp); + return 0; +} + +static int snd_hdsp_put_spdif_nonaudio(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + unsigned long flags; + int change; + unsigned int val; + + if (!snd_hdsp_use_is_exclusive(hdsp)) + return -EBUSY; + val = ucontrol->value.integer.value[0] & 1; + spin_lock_irqsave(&hdsp->lock, flags); + change = (int)val != hdsp_spdif_nonaudio(hdsp); + hdsp_set_spdif_nonaudio(hdsp, val); + spin_unlock_irqrestore(&hdsp->lock, flags); + return change; +} + +#define HDSP_SPDIF_SAMPLE_RATE(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ + .access = SNDRV_CTL_ELEM_ACCESS_READ, \ + .info = snd_hdsp_info_spdif_sample_rate, \ + .get = snd_hdsp_get_spdif_sample_rate \ +} + +static int snd_hdsp_info_spdif_sample_rate(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None"}; + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 7 ; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_hdsp_get_spdif_sample_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + switch (hdsp_spdif_sample_rate(hdsp)) { + case 32000: + ucontrol->value.enumerated.item[0] = 0; + break; + case 44100: + ucontrol->value.enumerated.item[0] = 1; + break; + case 48000: + ucontrol->value.enumerated.item[0] = 2; + break; + case 64000: + ucontrol->value.enumerated.item[0] = 3; + break; + case 88200: + ucontrol->value.enumerated.item[0] = 4; + break; + case 96000: + ucontrol->value.enumerated.item[0] = 5; + break; + default: + ucontrol->value.enumerated.item[0] = 6; + } + return 0; +} + +#define HDSP_SYSTEM_SAMPLE_RATE(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ + .access = SNDRV_CTL_ELEM_ACCESS_READ, \ + .info = snd_hdsp_info_system_sample_rate, \ + .get = snd_hdsp_get_system_sample_rate \ +} + +static int snd_hdsp_info_system_sample_rate(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; + uinfo->count = 1; + return 0; +} + +static int snd_hdsp_get_system_sample_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.enumerated.item[0] = hdsp->system_sample_rate; + return 0; +} + +#define HDSP_AUTOSYNC_SAMPLE_RATE(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ + .name = xname, \ + .index = xindex, \ + .access = SNDRV_CTL_ELEM_ACCESS_READ, \ + .info = snd_hdsp_info_autosync_sample_rate, \ + .get = snd_hdsp_get_autosync_sample_rate \ +} + +static int snd_hdsp_info_autosync_sample_rate(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = {"32000", "44100", "48000", "64000", "88200", "96000", "None"}; + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 7 ; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_hdsp_get_autosync_sample_rate(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + switch (hdsp_external_sample_rate(hdsp)) { + case 32000: + ucontrol->value.enumerated.item[0] = 0; + break; + case 44100: + ucontrol->value.enumerated.item[0] = 1; + break; + case 48000: + ucontrol->value.enumerated.item[0] = 2; + break; + case 64000: + ucontrol->value.enumerated.item[0] = 3; + break; + case 88200: + ucontrol->value.enumerated.item[0] = 4; + break; + case 96000: + ucontrol->value.enumerated.item[0] = 5; + break; + default: + ucontrol->value.enumerated.item[0] = 6; + } + return 0; +} + +#define HDSP_SYSTEM_CLOCK_MODE(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ + .access = SNDRV_CTL_ELEM_ACCESS_READ, \ + .info = snd_hdsp_info_system_clock_mode, \ + .get = snd_hdsp_get_system_clock_mode \ +} + +static int hdsp_system_clock_mode(hdsp_t *hdsp) +{ + if (hdsp->control_register & HDSP_ClockModeMaster) { + return 0; + } else if (hdsp_external_sample_rate(hdsp) != hdsp->system_sample_rate) { + return 0; + } + return 1; +} + +static int snd_hdsp_info_system_clock_mode(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = {"Master", "Slave" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 2; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_hdsp_get_system_clock_mode(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.enumerated.item[0] = hdsp_system_clock_mode(hdsp); + return 0; +} + +#define HDSP_CLOCK_SOURCE(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ + .name = xname, \ + .index = xindex, \ + .info = snd_hdsp_info_clock_source, \ + .get = snd_hdsp_get_clock_source, \ + .put = snd_hdsp_put_clock_source \ +} + +static int hdsp_clock_source(hdsp_t *hdsp) +{ if (hdsp->control_register & HDSP_ClockModeMaster) { - return HDSP_SYNC_FROM_SELF; + switch (hdsp->system_sample_rate) { + case 32000: + return 1; + case 44100: + return 2; + case 48000: + return 3; + case 64000: + return 4; + case 88200: + return 5; + case 96000: + return 6; + default: + return 3; + } + } else { + return 0; + } +} + +static int hdsp_set_clock_source(hdsp_t *hdsp, int mode) +{ + int rate; + switch (mode) { + case HDSP_CLOCK_SOURCE_AUTOSYNC: + if (hdsp_external_sample_rate(hdsp) != 0) { + hdsp->control_register &= ~HDSP_ClockModeMaster; + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + return 0; + } + return -1; + case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ: + rate = 32000; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ: + rate = 44100; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ: + rate = 48000; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ: + rate = 64000; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ: + rate = 88200; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ: + rate = 96000; + break; + default: + rate = 48000; + } + hdsp->control_register |= HDSP_ClockModeMaster; + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + hdsp_set_rate(hdsp, rate, 1); + return 0; +} + +static int snd_hdsp_info_clock_source(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = {"AutoSync", "Internal 32.0 kHz", "Internal 44.1 kHz", "Internal 48.0 kHz", "Internal 64.0 kHz", "Internal 88.2 kHz", "Internal 96.0 kHz" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 7; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_hdsp_get_clock_source(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.enumerated.item[0] = hdsp_clock_source(hdsp); + return 0; +} + +static int snd_hdsp_put_clock_source(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + unsigned long flags; + int change; + int val; + + if (!snd_hdsp_use_is_exclusive(hdsp)) + return -EBUSY; + val = ucontrol->value.enumerated.item[0]; + if (val < 0) val = 0; + if (val > 6) val = 6; + spin_lock_irqsave(&hdsp->lock, flags); + if (val != hdsp_clock_source(hdsp)) { + change = (hdsp_set_clock_source(hdsp, val) == 0) ? 1 : 0; + } else { + change = 0; } + spin_unlock_irqrestore(&hdsp->lock, flags); + return change; +} + +#define HDSP_PREF_SYNC_REF(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ + .info = snd_hdsp_info_pref_sync_ref, \ + .get = snd_hdsp_get_pref_sync_ref, \ + .put = snd_hdsp_put_pref_sync_ref \ +} + +static int hdsp_pref_sync_ref(hdsp_t *hdsp) +{ + /* Notice that this looks at the requested sync source, + not the one actually in use. + */ switch (hdsp->control_register & HDSP_SyncRefMask) { case HDSP_SyncRef_ADAT1: @@ -1324,42 +1963,33 @@ case HDSP_SyncRef_ADAT_SYNC: return HDSP_SYNC_FROM_ADAT_SYNC; default: - return HDSP_SYNC_FROM_SELF; + return HDSP_SYNC_FROM_WORD; } return 0; } -static int hdsp_set_sync_pref(hdsp_t *hdsp, int pref) +static int hdsp_set_pref_sync_ref(hdsp_t *hdsp, int pref) { hdsp->control_register &= ~HDSP_SyncRefMask; switch (pref) { case HDSP_SYNC_FROM_ADAT1: - hdsp->control_register &= ~HDSP_ClockModeMaster; hdsp->control_register &= ~HDSP_SyncRefMask; /* clear SyncRef bits */ break; case HDSP_SYNC_FROM_ADAT2: - hdsp->control_register &= ~HDSP_ClockModeMaster; hdsp->control_register |= HDSP_SyncRef_ADAT2; break; case HDSP_SYNC_FROM_ADAT3: - hdsp->control_register &= ~HDSP_ClockModeMaster; hdsp->control_register |= HDSP_SyncRef_ADAT3; break; case HDSP_SYNC_FROM_SPDIF: - hdsp->control_register &= ~HDSP_ClockModeMaster; hdsp->control_register |= HDSP_SyncRef_SPDIF; break; case HDSP_SYNC_FROM_WORD: - hdsp->control_register &= ~HDSP_ClockModeMaster; hdsp->control_register |= HDSP_SyncRef_WORD; break; case HDSP_SYNC_FROM_ADAT_SYNC: - hdsp->control_register &= ~HDSP_ClockModeMaster; hdsp->control_register |= HDSP_SyncRef_ADAT_SYNC; break; - case HDSP_SYNC_FROM_SELF: - hdsp->control_register |= HDSP_ClockModeMaster; - break; default: return -1; } @@ -1367,32 +1997,29 @@ return 0; } -static int snd_hdsp_info_sync_pref(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int snd_hdsp_info_pref_sync_ref(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { - static char *texts[] = {"Internal", "Word", "ADAT Sync", "IEC958", "ADAT1", "ADAT2", "ADAT3" }; + static char *texts[] = {"Word", "ADAT Sync", "IEC958", "ADAT1", "ADAT2", "ADAT3" }; hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; uinfo->count = 1; - uinfo->value.enumerated.items = (hdsp->type == Digiface) ? 7 : 6; + uinfo->value.enumerated.items = (hdsp->io_type == Digiface) ? 6 : 4; if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; } -static int snd_hdsp_get_sync_pref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_get_pref_sync_ref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - unsigned long flags; - spin_lock_irqsave(&hdsp->lock, flags); - ucontrol->value.enumerated.item[0] = hdsp_sync_pref(hdsp); - spin_unlock_irqrestore(&hdsp->lock, flags); + ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp); return 0; } -static int snd_hdsp_put_sync_pref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_put_pref_sync_ref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); unsigned long flags; @@ -1401,20 +2028,79 @@ if (!snd_hdsp_use_is_exclusive(hdsp)) return -EBUSY; - max = hdsp->ss_channels == (hdsp->type == Digiface) ? 7 : 6; + max = (hdsp->io_type == Digiface) ? 6 : 4; val = ucontrol->value.enumerated.item[0] % max; spin_lock_irqsave(&hdsp->lock, flags); - change = (int)val != hdsp_sync_pref(hdsp); - hdsp_set_sync_pref(hdsp, val); + change = (int)val != hdsp_pref_sync_ref(hdsp); + hdsp_set_pref_sync_ref(hdsp, val); spin_unlock_irqrestore(&hdsp->lock, flags); return change; } +#define HDSP_AUTOSYNC_REF(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ + .access = SNDRV_CTL_ELEM_ACCESS_READ, \ + .info = snd_hdsp_info_autosync_ref, \ + .get = snd_hdsp_get_autosync_ref, \ +} + +static int hdsp_autosync_ref(hdsp_t *hdsp) +{ + /* This looks at the autosync selected sync reference */ + unsigned int status2 = hdsp_read(hdsp, HDSP_status2Register); + + switch (status2 & HDSP_SelSyncRefMask) { + case HDSP_SelSyncRef_WORD: + return HDSP_AUTOSYNC_FROM_WORD; + case HDSP_SelSyncRef_ADAT_SYNC: + return HDSP_AUTOSYNC_FROM_ADAT_SYNC; + case HDSP_SelSyncRef_SPDIF: + return HDSP_AUTOSYNC_FROM_SPDIF; + case HDSP_SelSyncRefMask: + return HDSP_AUTOSYNC_FROM_NONE; + case HDSP_SelSyncRef_ADAT1: + return HDSP_AUTOSYNC_FROM_ADAT1; + case HDSP_SelSyncRef_ADAT2: + return HDSP_AUTOSYNC_FROM_ADAT2; + case HDSP_SelSyncRef_ADAT3: + return HDSP_AUTOSYNC_FROM_ADAT3; + default: + return HDSP_AUTOSYNC_FROM_WORD; + } + return 0; +} + +static int snd_hdsp_info_autosync_ref(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +{ + static char *texts[] = {"Word", "ADAT Sync", "IEC958", "None", "ADAT1", "ADAT2", "ADAT3" }; + + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 7; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); + return 0; +} + +static int snd_hdsp_get_autosync_ref(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +{ + hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); + + ucontrol->value.enumerated.item[0] = hdsp_pref_sync_ref(hdsp); + return 0; +} + #define HDSP_PASSTHRU(xname, xindex) \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = xname, .index = xindex, \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ .info = snd_hdsp_info_passthru, \ .put = snd_hdsp_put_passthru, \ - .get = snd_hdsp_get_passthru } + .get = snd_hdsp_get_passthru \ +} static int snd_hdsp_info_passthru(snd_kcontrol_t * kcontrol, snd_ctl_elem_info_t * uinfo) { @@ -1457,9 +2143,13 @@ } #define HDSP_LINE_OUT(xname, xindex) \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = xname, .index = xindex, \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ .info = snd_hdsp_info_line_out, \ - .get = snd_hdsp_get_line_out, .put = snd_hdsp_put_line_out } + .get = snd_hdsp_get_line_out, \ + .put = snd_hdsp_put_line_out \ +} static int hdsp_line_out(hdsp_t *hdsp) { @@ -1515,9 +2205,15 @@ } #define HDSP_MIXER(xname, xindex) \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, .name = xname, .index = xindex, \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ + .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \ + SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ .info = snd_hdsp_info_mixer, \ - .get = snd_hdsp_get_mixer, .put = snd_hdsp_put_mixer } + .get = snd_hdsp_get_mixer, \ + .put = snd_hdsp_put_mixer \ +} static int snd_hdsp_info_mixer(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { @@ -1541,13 +2237,13 @@ destination = ucontrol->value.integer.value[1]; if (source > 25) { - addr = PLAYBACK_TO_OUTPUT_KEY(source-26,destination); + addr = hdsp_playback_to_output_key(hdsp,source-26,destination); } else { - addr = INPUT_TO_OUTPUT_KEY(source, destination); + addr = hdsp_input_to_output_key(hdsp,source, destination); } spin_lock_irqsave(&hdsp->lock, flags); - ucontrol->value.integer.value[0] = hdsp_read_gain (hdsp, addr); + ucontrol->value.integer.value[2] = hdsp_read_gain (hdsp, addr); spin_unlock_irqrestore(&hdsp->lock, flags); return 0; } @@ -1569,9 +2265,9 @@ destination = ucontrol->value.integer.value[1]; if (source > 25) { - addr = PLAYBACK_TO_OUTPUT_KEY(source-26, destination); + addr = hdsp_playback_to_output_key(hdsp,source-26, destination); } else { - addr = INPUT_TO_OUTPUT_KEY(source, destination); + addr = hdsp_input_to_output_key(hdsp,source, destination); } gain = ucontrol->value.integer.value[2]; @@ -1594,7 +2290,9 @@ .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_WRITE | \ SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ .info = snd_hdsp_info_playback_mixer, \ - .get = snd_hdsp_get_playback_mixer, .put = snd_hdsp_put_playback_mixer } + .get = snd_hdsp_get_playback_mixer, \ + .put = snd_hdsp_put_playback_mixer \ +} static int snd_hdsp_info_playback_mixer(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { @@ -1622,7 +2320,7 @@ return -EINVAL; } - addr = PLAYBACK_TO_OUTPUT_KEY(mapped_channel, mapped_channel); + addr = hdsp_playback_to_output_key(hdsp,mapped_channel, mapped_channel); spin_lock_irqsave(&hdsp->lock, flags); ucontrol->value.integer.value[0] = hdsp_read_gain (hdsp, addr); @@ -1651,7 +2349,7 @@ return -EINVAL; } - addr = PLAYBACK_TO_OUTPUT_KEY(mapped_channel, mapped_channel); + addr = hdsp_playback_to_output_key(hdsp,mapped_channel, mapped_channel); gain = ucontrol->value.integer.value[0]; @@ -1663,114 +2361,143 @@ return change; } -#define HDSP_PEAK_PLAYBACK \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ +#define HDSP_WC_SYNC_CHECK(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ - .info = snd_hdsp_info_peak_playback, \ - .get = snd_hdsp_get_peak_playback \ -} - -static int snd_hdsp_info_peak_playback(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) -{ - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; - uinfo->count = 2; - return 0; + .info = snd_hdsp_info_sync_check, \ + .get = snd_hdsp_get_wc_sync_check \ } -static int snd_hdsp_get_peak_playback(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_info_sync_check(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) { - hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - unsigned int peakval = hdsp_read (hdsp, HDSP_playbackPeakLevel + (4 * (ucontrol->id.index-1))); - ucontrol->value.integer.value[0] = peakval & 0xffffff00; /* peak */ - ucontrol->value.integer.value[1] = peakval & 0xf; /* overs */ + static char *texts[] = {"No Lock", "Lock", "Sync" }; + uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED; + uinfo->count = 1; + uinfo->value.enumerated.items = 3; + if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items) + uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1; + strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]); return 0; } -#define HDSP_PEAK_INPUT \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ - .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ - .info = snd_hdsp_info_peak_input, \ - .get = snd_hdsp_get_peak_input \ -} - -static int snd_hdsp_info_peak_input(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int hdsp_wc_sync_check(hdsp_t *hdsp) { - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; - uinfo->count = 2; + int status2 = hdsp_read(hdsp, HDSP_status2Register); + if (status2 & HDSP_wc_lock) { + if (status2 & HDSP_wc_sync) { + return 2; + } else { + return 1; + } + } else { + return 0; + } return 0; } -static int snd_hdsp_get_peak_input(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_get_wc_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - unsigned int peakval = hdsp_read (hdsp, HDSP_inputPeakLevel + (4 * (ucontrol->id.index-1))); - ucontrol->value.integer.value[0] = peakval & 0xffffff00; /* peak */ - ucontrol->value.integer.value[1] = peakval & 0xf; /* overs */ + + ucontrol->value.enumerated.item[0] = hdsp_wc_sync_check(hdsp); return 0; } -#define HDSP_PEAK_OUTPUT \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ +#define HDSP_SPDIF_SYNC_CHECK(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ - .info = snd_hdsp_info_peak_output, \ - .get = snd_hdsp_get_peak_output \ + .info = snd_hdsp_info_sync_check, \ + .get = snd_hdsp_get_spdif_sync_check \ } -static int snd_hdsp_info_peak_output(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int hdsp_spdif_sync_check(hdsp_t *hdsp) { - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; - uinfo->count = 2; + int status = hdsp_read(hdsp, HDSP_statusRegister); + if (status & HDSP_SPDIFErrorFlag) { + return 0; + } else { + if (status & HDSP_SPDIFSync) { + return 2; + } else { + return 1; + } + } return 0; } -static int snd_hdsp_get_peak_output(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_get_spdif_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - unsigned int peakval = hdsp_read (hdsp, HDSP_outputPeakLevel + (4 * (ucontrol->id.index-1))); - ucontrol->value.integer.value[0] = peakval & 0xffffff00; /* peak */ - ucontrol->value.integer.value[1] = peakval & 0xf; /* overs */ + + ucontrol->value.enumerated.item[0] = hdsp_spdif_sync_check(hdsp); return 0; } -#define HDSP_RMS_INPUT \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ +#define HDSP_ADATSYNC_SYNC_CHECK(xname, xindex) \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ + .name = xname, \ + .index = xindex, \ .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ - .info = snd_hdsp_info_rms_input, \ - .get = snd_hdsp_get_rms_input \ + .info = snd_hdsp_info_sync_check, \ + .get = snd_hdsp_get_adatsync_sync_check \ } -static int snd_hdsp_info_rms_input(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) +static int hdsp_adatsync_sync_check(hdsp_t *hdsp) { - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER64; - uinfo->count = 1; - return 0; -} + int status = hdsp_read(hdsp, HDSP_statusRegister); + if (status & HDSP_TimecodeLock) { + if (status & HDSP_TimecodeSync) { + return 2; + } else { + return 1; + } + } else { + return 0; + } +} -static int snd_hdsp_get_rms_input(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_get_adatsync_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - ucontrol->value.integer64.value[0] = hdsp_read64 (hdsp, HDSP_inputRmsLevel + (8 * (ucontrol->id.index-1))); + + ucontrol->value.enumerated.item[0] = hdsp_adatsync_sync_check(hdsp); return 0; } -#define HDSP_RMS_PLAYBACK \ -{ .iface = SNDRV_CTL_ELEM_IFACE_PCM, \ +#define HDSP_ADAT_SYNC_CHECK \ +{ .iface = SNDRV_CTL_ELEM_IFACE_HWDEP, \ .access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ - .info = snd_hdsp_info_rms_playback, \ - .get = snd_hdsp_get_rms_playback \ + .info = snd_hdsp_info_sync_check, \ + .get = snd_hdsp_get_adat_sync_check \ } -static int snd_hdsp_info_rms_playback(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo) -{ - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER64; - uinfo->count = 1; - return 0; -} +static int hdsp_adat_sync_check(hdsp_t *hdsp, int idx) +{ + int status = hdsp_read(hdsp, HDSP_statusRegister); + + if (status & (HDSP_Lock0>>idx)) { + if (status & (HDSP_Sync0>>idx)) { + return 2; + } else { + return 1; + } + } else { + return 0; + } +} -static int snd_hdsp_get_rms_playback(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) +static int snd_hdsp_get_adat_sync_check(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { + int offset; hdsp_t *hdsp = _snd_kcontrol_chip(kcontrol); - ucontrol->value.integer64.value[0] = hdsp_read64 (hdsp, HDSP_playbackRmsLevel + (8 * (ucontrol->id.index-1))); + + offset = ucontrol->id.index - 1; + snd_assert(offset >= 0 || offset < ((hdsp->io_type == Digiface) ? 3 : 1), return -EINVAL); + ucontrol->value.enumerated.item[0] = hdsp_adat_sync_check(hdsp, offset); return 0; } @@ -1797,8 +2524,8 @@ .info = snd_hdsp_control_spdif_mask_info, .get = snd_hdsp_control_spdif_mask_get, .private_value = IEC958_AES0_NONAUDIO | - IEC958_AES0_PROFESSIONAL | - IEC958_AES0_CON_EMPHASIS, + IEC958_AES0_PROFESSIONAL | + IEC958_AES0_CON_EMPHASIS, }, { .access = SNDRV_CTL_ELEM_ACCESS_READ, @@ -1807,13 +2534,27 @@ .info = snd_hdsp_control_spdif_mask_info, .get = snd_hdsp_control_spdif_mask_get, .private_value = IEC958_AES0_NONAUDIO | - IEC958_AES0_PROFESSIONAL | - IEC958_AES0_PRO_EMPHASIS, + IEC958_AES0_PROFESSIONAL | + IEC958_AES0_PRO_EMPHASIS, }, HDSP_MIXER("Mixer", 0), HDSP_SPDIF_IN("IEC958 Input Connector", 0), HDSP_SPDIF_OUT("IEC958 Output also on ADAT1", 0), -HDSP_SYNC_PREF("Preferred Sync Source", 0), +HDSP_SPDIF_PROFESSIONAL("IEC958 Professional Bit", 0), +HDSP_SPDIF_EMPHASIS("IEC958 Emphasis Bit", 0), +HDSP_SPDIF_NON_AUDIO("IEC958 Non-audio Bit", 0), +/* 'Sample Clock Source' complies with the alsa control naming scheme */ +HDSP_CLOCK_SOURCE("Sample Clock Source", 0), +HDSP_SYSTEM_CLOCK_MODE("System Clock Mode", 0), +HDSP_PREF_SYNC_REF("Preferred Sync Reference", 0), +HDSP_AUTOSYNC_REF("AutoSync Reference", 0), +HDSP_SPDIF_SAMPLE_RATE("SPDIF Sample Rate", 0), +HDSP_SYSTEM_SAMPLE_RATE("System Sample Rate", 0), +/* 'External Rate' complies with the alsa control naming scheme */ +HDSP_AUTOSYNC_SAMPLE_RATE("External Rate", 0), +HDSP_WC_SYNC_CHECK("Word Clock Lock Status", 0), +HDSP_SPDIF_SYNC_CHECK("SPDIF Lock Status", 0), +HDSP_ADATSYNC_SYNC_CHECK("ADAT Sync Lock Status", 0), HDSP_PASSTHRU("Passthru", 0), HDSP_LINE_OUT("Line Out", 0), }; @@ -1821,11 +2562,29 @@ #define HDSP_CONTROLS (sizeof(snd_hdsp_controls)/sizeof(snd_kcontrol_new_t)) static snd_kcontrol_new_t snd_hdsp_playback_mixer = HDSP_PLAYBACK_MIXER; -static snd_kcontrol_new_t snd_hdsp_input_peak = HDSP_PEAK_INPUT; -static snd_kcontrol_new_t snd_hdsp_output_peak = HDSP_PEAK_OUTPUT; -static snd_kcontrol_new_t snd_hdsp_playback_peak = HDSP_PEAK_PLAYBACK; -static snd_kcontrol_new_t snd_hdsp_input_rms = HDSP_RMS_INPUT; -static snd_kcontrol_new_t snd_hdsp_playback_rms = HDSP_RMS_PLAYBACK; +static snd_kcontrol_new_t snd_hdsp_adat_sync_check = HDSP_ADAT_SYNC_CHECK; + + +static int hdsp_update_simple_mixer_controls(hdsp_t *hdsp) +{ + int i; + + for (i = hdsp->ds_channels; i < hdsp->ss_channels; ++i) { + if (hdsp->system_sample_rate > 48000) { + hdsp->playback_mixer_ctls[i]->vd[0].access = SNDRV_CTL_ELEM_ACCESS_INACTIVE | + SNDRV_CTL_ELEM_ACCESS_READ | + SNDRV_CTL_ELEM_ACCESS_VOLATILE; + } else { + hdsp->playback_mixer_ctls[i]->vd[0].access = SNDRV_CTL_ELEM_ACCESS_READWRITE | + SNDRV_CTL_ELEM_ACCESS_VOLATILE; + } + snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | + SNDRV_CTL_EVENT_MASK_INFO, &hdsp->playback_mixer_ctls[i]->id); + } + + return 0; +} + int snd_hdsp_create_controls(snd_card_t *card, hdsp_t *hdsp) { @@ -1840,49 +2599,40 @@ hdsp->spdif_ctl = kctl; } - if (hdsp->type == Digiface) { + snd_hdsp_playback_mixer.name = "Chn"; + snd_hdsp_adat_sync_check.name = "ADAT Lock Status"; + + if (hdsp->io_type == Digiface) { limit = DIGIFACE_SS_CHANNELS; } else { limit = MULTIFACE_SS_CHANNELS; } - + /* The index values are one greater than the channel ID so that alsamixer will display them correctly. We want to use the index for fast lookup of the relevant channel, but if we use it at all, most ALSA software does the wrong thing with it ... */ - snd_hdsp_playback_mixer.name = "Chn"; - snd_hdsp_input_peak.name = "Input Peak"; - snd_hdsp_output_peak.name = "Output Peak"; - snd_hdsp_playback_peak.name = "Playback Peak"; - snd_hdsp_playback_rms.name = "Playback RMS"; - snd_hdsp_input_rms.name = "Input RMS"; - for (idx = 0; idx < limit; ++idx) { snd_hdsp_playback_mixer.index = idx+1; if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_playback_mixer, hdsp)))) { return err; } - snd_hdsp_input_peak.index = idx+1; - if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_input_peak, hdsp)))) { - return err; - } - snd_hdsp_output_peak.index = idx+1; - if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_output_peak, hdsp)))) { - return err; - } - snd_hdsp_playback_peak.index = idx+1; - if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_playback_peak, hdsp)))) { - return err; - } - snd_hdsp_playback_rms.index = idx+1; - if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_playback_rms, hdsp)))) { - return err; - } - snd_hdsp_input_rms.index = idx+1; - if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_input_rms, hdsp)))) { - return err; + hdsp->playback_mixer_ctls[idx] = kctl; + } + + /* ADAT SyncCheck status */ + snd_hdsp_adat_sync_check.index = 1; + if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp)))) { + return err; + } + if (hdsp->io_type == Digiface) { + for (idx = 1; idx < 3; ++idx) { + snd_hdsp_adat_sync_check.index = idx+1; + if ((err = snd_ctl_add (card, kctl = snd_ctl_new1(&snd_hdsp_adat_sync_check, hdsp)))) { + return err; + } } } @@ -1899,13 +2649,29 @@ hdsp_t *hdsp = (hdsp_t *) entry->private_data; unsigned int status; unsigned int status2; - char *requested_sync_ref; + char *pref_sync_ref; + char *autosync_ref; + char *system_clock_mode; + char *clock_source; int x; if (hdsp_check_for_iobox (hdsp)) { + snd_iprintf(buffer, "No I/O box connected.\nPlease connect one and upload firmware.\n"); return; } + if (hdsp_check_for_firmware(hdsp)) { + if (hdsp->state & HDSP_FirmwareCached) { + if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { + snd_iprintf(buffer, "Firmware loading from cache failed, please upload manually.\n"); + return; + } + } else { + snd_iprintf(buffer, "No firmware loaded nor cached, please upload firmware.\n"); + return; + } + } + status = hdsp_read(hdsp, HDSP_statusRegister); status2 = hdsp_read(hdsp, HDSP_status2Register); @@ -1928,69 +2694,108 @@ x = 1 << (6 + hdsp_decode_latency(hdsp->control_register & HDSP_LatencyMask)); - snd_iprintf(buffer, "Latency: %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes); + snd_iprintf(buffer, "Buffer Size (Latency): %d samples (2 periods of %lu bytes)\n", x, (unsigned long) hdsp->period_bytes); snd_iprintf(buffer, "Hardware pointer (frames): %ld\n", hdsp_hw_pointer(hdsp)); snd_iprintf(buffer, "Passthru: %s\n", hdsp->passthru ? "yes" : "no"); snd_iprintf(buffer, "Line out: %s\n", (hdsp->control_register & HDSP_LineOut) ? "on" : "off"); snd_iprintf(buffer, "Firmware version: %d\n", (status2&HDSP_version0)|(status2&HDSP_version1)<<1|(status2&HDSP_version2)<<2); - switch (hdsp_sync_pref (hdsp)) { + snd_iprintf(buffer, "\n"); + + + switch (hdsp_clock_source(hdsp)) { + case HDSP_CLOCK_SOURCE_AUTOSYNC: + clock_source = "AutoSync"; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_32KHZ: + clock_source = "Internal 32 kHz"; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_44_1KHZ: + clock_source = "Internal 44.1 kHz"; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_48KHZ: + clock_source = "Internal 48 kHz"; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_64KHZ: + clock_source = "Internal 64 kHz"; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_88_2KHZ: + clock_source = "Internal 88.2 kHz"; + break; + case HDSP_CLOCK_SOURCE_INTERNAL_96KHZ: + clock_source = "Internal 96 kHz"; + break; + default: + clock_source = "Error"; + } + snd_iprintf (buffer, "Sample Clock Source: %s\n", clock_source); + + if (hdsp_system_clock_mode(hdsp)) { + system_clock_mode = "Slave"; + } else { + system_clock_mode = "Master"; + } + + switch (hdsp_pref_sync_ref (hdsp)) { case HDSP_SYNC_FROM_WORD: - requested_sync_ref = "Word"; + pref_sync_ref = "Word Clock"; break; case HDSP_SYNC_FROM_ADAT_SYNC: - requested_sync_ref = "ADAT Sync"; + pref_sync_ref = "ADAT Sync"; break; case HDSP_SYNC_FROM_SPDIF: - requested_sync_ref = "SPDIF"; + pref_sync_ref = "SPDIF"; break; case HDSP_SYNC_FROM_ADAT1: - requested_sync_ref = "ADAT1"; + pref_sync_ref = "ADAT1"; break; case HDSP_SYNC_FROM_ADAT2: - requested_sync_ref = "ADAT2"; + pref_sync_ref = "ADAT2"; break; case HDSP_SYNC_FROM_ADAT3: - requested_sync_ref = "ADAT3"; + pref_sync_ref = "ADAT3"; break; - case HDSP_SYNC_FROM_SELF: default: - requested_sync_ref = "Master"; + pref_sync_ref = "Word Clock"; break; } - - if ((hdsp->control_register & HDSP_ClockModeMaster)) { - snd_iprintf (buffer, "Sync reference: %s/Master (chosen)\n", requested_sync_ref); - } else if (hdsp_system_sample_rate(hdsp) == 0) { - snd_iprintf (buffer, "Sync reference: %s/Master (forced)\n", requested_sync_ref); - } else { - switch (status2 & HDSP_SelSyncRefMask) { - case HDSP_SelSyncRef_ADAT1: - snd_iprintf (buffer, "Sync reference: %s/ADAT1\n", requested_sync_ref); - break; - case HDSP_SelSyncRef_ADAT2: - snd_iprintf (buffer, "Sync reference: %s/ADAT2\n", requested_sync_ref); - break; - case HDSP_SelSyncRef_ADAT3: - snd_iprintf (buffer, "Sync reference: %s/ADAT3\n", requested_sync_ref); - break; - case HDSP_SelSyncRef_SPDIF: - snd_iprintf (buffer, "Sync reference: %s/SPDIF\n", requested_sync_ref); - break; - case HDSP_SelSyncRef_WORD: - snd_iprintf (buffer, "Sync reference: %s/WORD\n", requested_sync_ref); - break; - case HDSP_SelSyncRef_ADAT_SYNC: - snd_iprintf (buffer, "Sync reference: %s/ADAT Sync\n", requested_sync_ref); - break; - default: - snd_iprintf (buffer, "Sync reference: %s/Master (fallback)\n", requested_sync_ref); - break; - } + snd_iprintf (buffer, "Preferred Sync Reference: %s\n", pref_sync_ref); + + switch (hdsp_autosync_ref (hdsp)) { + case HDSP_AUTOSYNC_FROM_WORD: + autosync_ref = "Word Clock"; + break; + case HDSP_AUTOSYNC_FROM_ADAT_SYNC: + autosync_ref = "ADAT Sync"; + break; + case HDSP_AUTOSYNC_FROM_SPDIF: + autosync_ref = "SPDIF"; + break; + case HDSP_AUTOSYNC_FROM_NONE: + autosync_ref = "None"; + break; + case HDSP_AUTOSYNC_FROM_ADAT1: + autosync_ref = "ADAT1"; + break; + case HDSP_AUTOSYNC_FROM_ADAT2: + autosync_ref = "ADAT2"; + break; + case HDSP_AUTOSYNC_FROM_ADAT3: + autosync_ref = "ADAT3"; + break; + default: + autosync_ref = "---"; + break; } - snd_iprintf (buffer, "Sample rate: %d\n", hdsp_system_sample_rate(hdsp)); + snd_iprintf (buffer, "AutoSync Reference: %s\n", autosync_ref); + + snd_iprintf (buffer, "AutoSync Frequency: %d\n", hdsp_external_sample_rate(hdsp)); + + snd_iprintf (buffer, "System Clock Mode: %s\n", system_clock_mode); + snd_iprintf (buffer, "System Clock Frequency: %d\n", hdsp->system_sample_rate); + snd_iprintf(buffer, "\n"); switch ((hdsp->control_register & HDSP_SPDIFInputMask) >> 14) { @@ -2031,9 +2836,6 @@ } else { snd_iprintf(buffer, "IEC958 NonAudio: off\n"); } - - snd_iprintf(buffer, "\n"); - if ((x = hdsp_spdif_sample_rate (hdsp)) != 0) { snd_iprintf (buffer, "IEC958 sample rate: %d\n", x); } else { @@ -2050,20 +2852,44 @@ snd_iprintf(buffer, "ADAT1: No Lock\n"); } - x = status & HDSP_Sync1; - if (status & HDSP_Lock1) { - snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock"); - } else { - snd_iprintf(buffer, "ADAT2: No Lock\n"); - } - - if (hdsp->type == Digiface) { + switch (hdsp->io_type) { + case Digiface: + x = status & HDSP_Sync1; + if (status & HDSP_Lock1) { + snd_iprintf(buffer, "ADAT2: %s\n", x ? "Sync" : "Lock"); + } else { + snd_iprintf(buffer, "ADAT2: No Lock\n"); + } x = status & HDSP_Sync2; if (status & HDSP_Lock2) { snd_iprintf(buffer, "ADAT3: %s\n", x ? "Sync" : "Lock"); } else { snd_iprintf(buffer, "ADAT3: No Lock\n"); } + default: + /* relax */ + break; + } + + x = status & HDSP_SPDIFSync; + if (status & HDSP_SPDIFErrorFlag) { + snd_iprintf (buffer, "SPDIF: No Lock\n"); + } else { + snd_iprintf (buffer, "SPDIF: %s\n", x ? "Sync" : "Lock"); + } + + x = status2 & HDSP_wc_sync; + if (status2 & HDSP_wc_lock) { + snd_iprintf (buffer, "Word Clock: %s\n", x ? "Sync" : "Lock"); + } else { + snd_iprintf (buffer, "Word Clock: No Lock\n"); + } + + x = status & HDSP_TimecodeSync; + if (status & HDSP_TimecodeLock) { + snd_iprintf(buffer, "ADAT Sync: %s\n", x ? "Sync" : "Lock"); + } else { + snd_iprintf(buffer, "ADAT Sync: No Lock\n"); } snd_iprintf(buffer, "\n"); @@ -2166,7 +2992,7 @@ return 0; } -static void snd_hdsp_set_defaults(hdsp_t *hdsp) +static int snd_hdsp_set_defaults(hdsp_t *hdsp) { unsigned int i; @@ -2199,10 +3025,13 @@ hdsp->mixer_matrix[i] = MINUS_INFINITY_GAIN; } - for (i = 0; i < 2048; i++) - hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN); - - if (line_outs_monitor[hdsp->dev]) { + for (i = 0; i < (hdsp_is_9652(hdsp) ? 1352 : HDSP_MATRIX_MIXER_SIZE); i++) { + if (hdsp_write_gain (hdsp, i, MINUS_INFINITY_GAIN)) { + return -EIO; + } + } + + if (!hdsp_is_9652(hdsp) && line_outs_monitor[hdsp->dev]) { snd_printk ("sending all inputs and playback streams to line outs.\n"); @@ -2212,11 +3041,15 @@ for (i = 0; i < HDSP_MAX_CHANNELS; i++) { if (i & 1) { - hdsp_write_gain (hdsp, INPUT_TO_OUTPUT_KEY (i, 26), UNITY_GAIN); - hdsp_write_gain (hdsp, PLAYBACK_TO_OUTPUT_KEY (i, 26), UNITY_GAIN); + if (hdsp_write_gain (hdsp, hdsp_input_to_output_key (hdsp, i, 26), UNITY_GAIN) || + hdsp_write_gain (hdsp, hdsp_playback_to_output_key (hdsp, i, 26), UNITY_GAIN)) { + return -EIO; + } } else { - hdsp_write_gain (hdsp, INPUT_TO_OUTPUT_KEY (i, 27), UNITY_GAIN); - hdsp_write_gain (hdsp, PLAYBACK_TO_OUTPUT_KEY (i, 27), UNITY_GAIN); + if (hdsp_write_gain (hdsp, hdsp_input_to_output_key (hdsp, i, 27), UNITY_GAIN) || + hdsp_write_gain (hdsp, hdsp_playback_to_output_key (hdsp, i, 27), UNITY_GAIN)) { + return -EIO; + } } } } @@ -2226,9 +3059,23 @@ /* set a default rate so that the channel map is set up. */ - hdsp_set_rate(hdsp, 48000); + hdsp_set_rate(hdsp, 48000, 1); + + return 0; } +void hdsp_midi_tasklet(unsigned long arg) +{ + hdsp_t *hdsp = (hdsp_t *)arg; + + if (hdsp->midi[0].pending) { + snd_hdsp_midi_input_read (&hdsp->midi[0]); + } + if (hdsp->midi[1].pending) { + snd_hdsp_midi_input_read (&hdsp->midi[1]); + } +} + void snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs) { hdsp_t *hdsp = (hdsp_t *) dev_id; @@ -2238,7 +3085,8 @@ int midi1; unsigned int midi0status; unsigned int midi1status; - + int schedule = 0; + status = hdsp_read(hdsp, HDSP_statusRegister); audio = status & HDSP_audioIRQPending; @@ -2253,7 +3101,7 @@ midi0status = hdsp_read (hdsp, HDSP_midiStatusIn0) & 0xff; midi1status = hdsp_read (hdsp, HDSP_midiStatusIn1) & 0xff; - + if (audio) { if (hdsp->capture_substream) { snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream); @@ -2263,15 +3111,23 @@ snd_pcm_period_elapsed(hdsp->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream); } } - - /* note: snd_hdsp_midi_input_read() calls output_write() because - output is not interrupt-driven ... - */ - - if (midi0status) - snd_hdsp_midi_input_read (&hdsp->midi[0]); - if (midi1status) - snd_hdsp_midi_input_read (&hdsp->midi[1]); + + if (midi0 && midi0status) { + /* we disable interrupts for this input until processing is done */ + hdsp->control_register &= ~HDSP_Midi0InterruptEnable; + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + hdsp->midi[0].pending = 1; + schedule = 1; + } + if (midi1 && midi1status) { + /* we disable interrupts for this input until processing is done */ + hdsp->control_register &= ~HDSP_Midi1InterruptEnable; + hdsp_write(hdsp, HDSP_controlRegister, hdsp->control_register); + hdsp->midi[1].pending = 1; + schedule = 1; + } + if (schedule) + tasklet_hi_schedule(&hdsp->midi_tasklet); } static snd_pcm_uframes_t snd_hdsp_hw_pointer(snd_pcm_substream_t *substream) @@ -2310,8 +3166,7 @@ channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); snd_assert(channel_buf != NULL, return -EIO); - if (copy_from_user(channel_buf + pos * 4, src, count * 4)) - return -EFAULT; + copy_from_user(channel_buf + pos * 4, src, count * 4); return count; } @@ -2325,8 +3180,7 @@ channel_buf = hdsp_channel_buffer_location (hdsp, substream->pstr->stream, channel); snd_assert(channel_buf != NULL, return -EIO); - if (copy_to_user(dst, channel_buf + pos * 4, count * 4)) - return -EFAULT; + copy_to_user(dst, channel_buf + pos * 4, count * 4); return count; } @@ -2381,6 +3235,17 @@ return -EIO; } + if (hdsp_check_for_firmware(hdsp)) { + if (hdsp->state & HDSP_FirmwareCached) { + if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { + snd_printk("Firmware loading from cache failed, please upload manually.\n"); + } + } else { + snd_printk("No firmware loaded nor cached, please upload firmware.\n"); + } + return -EIO; + } + spin_lock_irq(&hdsp->lock); if (substream->pstr->stream == SNDRV_PCM_STREAM_PLAYBACK) { @@ -2400,7 +3265,7 @@ that matter are the same. */ - if ((int)params_rate(params) != hdsp_system_sample_rate(hdsp)) { + if (params_rate(params) != hdsp->system_sample_rate) { spin_unlock_irq(&hdsp->lock); _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); return -EBUSY; @@ -2424,7 +3289,7 @@ /* how to make sure that the rate matches an externally-set one ? */ - if ((err = hdsp_set_rate(hdsp, params_rate(params))) < 0) { + if ((err = hdsp_set_rate(hdsp, params_rate(params), 0)) < 0) { _snd_pcm_hw_param_setempty(params, SNDRV_PCM_HW_PARAM_RATE); return err; } @@ -2485,6 +3350,17 @@ return -EIO; } + if (hdsp_check_for_firmware(hdsp)) { + if (hdsp->state & HDSP_FirmwareCached) { + if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { + snd_printk("Firmware loading from cache failed, please upload manually.\n"); + } + } else { + snd_printk("No firmware loaded nor cached, please upload firmware.\n"); + } + return -EIO; + } + spin_lock(&hdsp->lock); running = hdsp->running; switch (cmd) { @@ -2551,6 +3427,17 @@ return -EIO; } + if (hdsp_check_for_firmware(hdsp)) { + if (hdsp->state & HDSP_FirmwareCached) { + if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { + snd_printk("Firmware loading from cache failed, please upload manually.\n"); + } + } else { + snd_printk("No firmware loaded nor cached, please upload firmware.\n"); + } + return -EIO; + } + spin_lock_irq(&hdsp->lock); if (!hdsp->running) hdsp_reset_hw_pointer(hdsp); @@ -2577,11 +3464,11 @@ .channels_min = 14, .channels_max = HDSP_MAX_CHANNELS, .buffer_bytes_max = HDSP_CHANNEL_BUFFER_BYTES * HDSP_MAX_CHANNELS, - .period_bytes_min = (64 * 4) *10, + .period_bytes_min = (64 * 4) * 10, .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS, .periods_min = 2, .periods_max = 2, - .fifo_size = 0, + .fifo_size = 0 }; static snd_pcm_hardware_t snd_hdsp_capture_subinfo = @@ -2606,7 +3493,7 @@ .period_bytes_max = (8192 * 4) * HDSP_MAX_CHANNELS, .periods_min = 2, .periods_max = 2, - .fifo_size = 0, + .fifo_size = 0 }; static unsigned int period_sizes[] = { 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; @@ -2638,7 +3525,7 @@ snd_interval_t t = { .min = hdsp->ds_channels, .max = hdsp->ds_channels, - .integer = 1, + integer: 1, }; return snd_interval_refine(c, &t); } else if (r->max < 64000) { @@ -2662,7 +3549,7 @@ snd_interval_t t = { .min = 32000, .max = 48000, - .integer = 1, + integer: 1, }; return snd_interval_refine(r, &t); } else if (c->max <= hdsp->ds_channels) { @@ -2686,6 +3573,17 @@ return -EIO; } + if (hdsp_check_for_firmware(hdsp)) { + if (hdsp->state & HDSP_FirmwareCached) { + if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { + snd_printk("Firmware loading from cache failed, please upload manually.\n"); + } + } else { + snd_printk("No firmware loaded nor cached, please upload firmware.\n"); + } + return -EIO; + } + spin_lock_irqsave(&hdsp->lock, flags); snd_pcm_set_sync(substream); @@ -2717,7 +3615,7 @@ SNDRV_PCM_HW_PARAM_CHANNELS, -1); hdsp->creg_spdif_stream = hdsp->creg_spdif; - hdsp->spdif_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + hdsp->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id); return 0; @@ -2735,7 +3633,7 @@ spin_unlock_irqrestore(&hdsp->lock, flags); - hdsp->spdif_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + hdsp->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(hdsp->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &hdsp->spdif_ctl->id); return 0; @@ -2752,6 +3650,17 @@ return -EIO; } + if (hdsp_check_for_firmware(hdsp)) { + if (hdsp->state & HDSP_FirmwareCached) { + if (snd_hdsp_load_firmware_from_cache(hdsp) != 0) { + snd_printk("Firmware loading from cache failed, please upload manually.\n"); + } + } else { + snd_printk("No firmware loaded nor cached, please upload firmware.\n"); + } + return -EIO; + } + spin_lock_irqsave(&hdsp->lock, flags); snd_pcm_set_sync(substream); @@ -2798,6 +3707,136 @@ return 0; } +static int snd_hdsp_hwdep_dummy_op(snd_hwdep_t *hw, struct file *file) +{ + /* we have nothing to initialize but the call is required */ + return 0; +} + + +static int snd_hdsp_hwdep_ioctl(snd_hwdep_t *hw, struct file *file, unsigned int cmd, unsigned long arg) +{ + hdsp_t *hdsp = (hdsp_t *)hw->private_data; + hdsp_peak_rms_t *peak_rms; + hdsp_firmware_t *firmware; + hdsp_mixer_t *mixer; + hdsp_config_info_t info; + hdsp_version_t hdsp_version; + int i; + int err; + unsigned long flags; + + switch (cmd) { + case SNDRV_HDSP_IOCTL_GET_PEAK_RMS: + if (!(hdsp->state & HDSP_FirmwareLoaded)) { + snd_printk("firmware needs to be uploaded to the card.\n"); + return -EINVAL; + } + peak_rms = (hdsp_peak_rms_t *)arg; + if (copy_to_user_fromio((void *)peak_rms->playback_peaks, hdsp->iobase+HDSP_playbackPeakLevel, 26*4) != 0) { + return -EFAULT; + } + if (copy_to_user_fromio((void *)peak_rms->input_peaks, hdsp->iobase+HDSP_inputPeakLevel, 26*4) != 0) { + return -EFAULT; + } + if (copy_to_user_fromio((void *)peak_rms->output_peaks, hdsp->iobase+HDSP_outputPeakLevel, 28*4) != 0) { + return -EFAULT; + } + if (copy_to_user_fromio((void *)peak_rms->playback_rms, hdsp->iobase+HDSP_playbackRmsLevel, 26*8) != 0) { + return -EFAULT; + } + if (copy_to_user_fromio((void *)peak_rms->input_rms, hdsp->iobase+HDSP_inputRmsLevel, 26*8) != 0) { + return -EFAULT; + } + break; + case SNDRV_HDSP_IOCTL_GET_CONFIG_INFO: + if (!(hdsp->state & HDSP_FirmwareLoaded)) { + snd_printk("Firmware needs to be uploaded to the card.\n"); + return -EINVAL; + } + spin_lock_irqsave(&hdsp->lock, flags); + info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp); + info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp); + info.adatsync_sync_check = (unsigned char)hdsp_adatsync_sync_check(hdsp); + info.spdif_sync_check = (unsigned char)hdsp_spdif_sync_check(hdsp); + for (i = 0; i < ((hdsp->io_type != Multiface) ? 3 : 1); ++i) { + info.adat_sync_check[i] = (unsigned char)hdsp_adat_sync_check(hdsp, i); + } + info.spdif_in = (unsigned char)hdsp_spdif_in(hdsp); + info.spdif_out = (unsigned char)hdsp_spdif_out(hdsp); + info.spdif_professional = (unsigned char)hdsp_spdif_professional(hdsp); + info.spdif_emphasis = (unsigned char)hdsp_spdif_emphasis(hdsp); + info.spdif_nonaudio = (unsigned char)hdsp_spdif_nonaudio(hdsp); + info.spdif_sample_rate = hdsp_spdif_sample_rate(hdsp); + info.system_sample_rate = hdsp->system_sample_rate; + info.autosync_sample_rate = hdsp_external_sample_rate(hdsp); + info.system_clock_mode = (unsigned char)hdsp_system_clock_mode(hdsp); + info.clock_source = (unsigned char)hdsp_clock_source(hdsp); + info.autosync_ref = (unsigned char)hdsp_autosync_ref(hdsp); + info.line_out = (unsigned char)hdsp_line_out(hdsp); + info.passthru = (unsigned char)hdsp->passthru; + spin_unlock_irqrestore(&hdsp->lock, flags); + if (copy_to_user((void *)arg, &info, sizeof(info))) + return -EFAULT; + break; + case SNDRV_HDSP_IOCTL_GET_VERSION: + if (hdsp_is_9652(hdsp)) return -EINVAL; + if (hdsp->io_type == Undefined) { + if ((err = hdsp_get_iobox_version(hdsp)) < 0) { + return err; + } + } + hdsp_version.io_type = hdsp->io_type; + hdsp_version.firmware_rev = hdsp->firmware_rev; + if ((err = copy_to_user((void *)arg, &hdsp_version, sizeof(hdsp_version)))) { + return -EFAULT; + } + break; + case SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE: + if (hdsp_is_9652(hdsp)) return -EINVAL; + /* SNDRV_HDSP_IOCTL_GET_VERSION must have been called */ + if (hdsp->io_type == Undefined) return -EINVAL; + + snd_printk("initializing firmware upload\n"); + firmware = (hdsp_firmware_t *)arg; + + if (hdsp_check_for_iobox (hdsp)) { + return -EIO; + } + + if (copy_from_user(hdsp->firmware_cache, firmware->firmware_data, sizeof(unsigned long)*24413) != 0) { + return -EFAULT; + } + + hdsp->state |= HDSP_FirmwareCached; + + if ((err = snd_hdsp_load_firmware_from_cache(hdsp)) < 0) { + return err; + } + + + if (!(hdsp->state & HDSP_InitializationComplete)) { + snd_hdsp_initialize_channels(hdsp); + + snd_hdsp_initialize_midi_flush(hdsp); + + if ((err = snd_hdsp_create_alsa_devices(hdsp->card, hdsp)) < 0) { + snd_printk("error creating alsa devices\n"); + return err; + } + } + break; + case SNDRV_HDSP_IOCTL_GET_MIXER: + mixer = (hdsp_mixer_t *)arg; + if (copy_to_user(mixer->matrix, hdsp->mixer_matrix, sizeof(unsigned short)*HDSP_MATRIX_MIXER_SIZE)) + return -EFAULT; + break; + default: + return -EINVAL; + } + return 0; +} + static snd_pcm_ops_t snd_hdsp_playback_ops = { .open = snd_hdsp_playback_open, .close = snd_hdsp_playback_release, @@ -2821,6 +3860,26 @@ .copy = snd_hdsp_capture_copy, }; +static int __devinit snd_hdsp_create_hwdep(snd_card_t *card, + hdsp_t *hdsp) +{ + snd_hwdep_t *hw; + int err; + + if ((err = snd_hwdep_new(card, "HDSP hwdep", 0, &hw)) < 0) + return err; + + hdsp->hwdep = hw; + hw->private_data = hdsp; + strcpy(hw->name, "HDSP hwdep interface"); + + hw->ops.open = snd_hdsp_hwdep_dummy_op; + hw->ops.ioctl = snd_hdsp_hwdep_ioctl; + hw->ops.release = snd_hdsp_hwdep_dummy_op; + + return 0; +} + static int __devinit snd_hdsp_create_pcm(snd_card_t *card, hdsp_t *hdsp) { @@ -2842,114 +3901,93 @@ return 0; } -static int __devinit snd_hdsp_initialize_firmware (hdsp_t *hdsp) +static inline int snd_hdsp_initialize_input_enable (hdsp_t *hdsp) { int i; - u32 *firmware_ptr; - - if (hdsp_check_for_iobox (hdsp)) { - return -EIO; - } - + if (hdsp_fifo_wait (hdsp, 0, 100)) { return -EIO; } - /* enable all channels */ - for (i = 0; i < HDSP_MAX_CHANNELS; ++i) { hdsp_write (hdsp, HDSP_inputEnable + (4 * i), 1); hdsp_write (hdsp, HDSP_outputEnable + (4 * i), 1); } + + return 0; +} - if (force_firmware[hdsp->dev] || (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { - - snd_printk ("loading firmware\n"); - - hdsp_write (hdsp, HDSP_jtagReg, HDSP_PROGRAM); - hdsp_write (hdsp, HDSP_fifoData, 0); - if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT) < 0) { - snd_printk ("timeout waiting for firmware setup\n"); - return -EIO; - } - - hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_LOAD); - hdsp_write (hdsp, HDSP_fifoData, 0); - - if (hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT)) { - hdsp->type = Multiface; - hdsp_write (hdsp, HDSP_jtagReg, HDSP_VERSION_BIT); - hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_LOAD); - hdsp_fifo_wait (hdsp, 0, HDSP_SHORT_WAIT); - } else { - hdsp->type = Digiface; - } - - hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_PROGRAM); - hdsp_write (hdsp, HDSP_fifoData, 0); - - if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { - snd_printk ("timeout waiting for download preparation\n"); - return -EIO; - } - - hdsp_write (hdsp, HDSP_jtagReg, HDSP_S_LOAD); - - if (hdsp->type == Digiface) { - firmware_ptr = (u32 *) digiface_firmware; - } else { - firmware_ptr = (u32 *) multiface_firmware; - } - - for (i = 0; i < 24413; ++i) { - hdsp_write(hdsp, HDSP_fifoData, firmware_ptr[i]); - if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) { - snd_printk ("timeout during firmware loading\n"); - return -EIO; - } - } - - if (hdsp_fifo_wait (hdsp, 0, HDSP_LONG_WAIT)) { - snd_printk ("timeout at end of firmware loading\n"); - return -EIO; - } - - hdsp_write (hdsp, HDSP_jtagReg, 0); - snd_printk ("finished firmware loading\n"); - mdelay(3000); - - } else { - - /* firmware already loaded, but we need to know what type - of I/O box is connected. - */ - - if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) { - hdsp->type = Multiface; - } else { - hdsp->type = Digiface; - } - } - - if (hdsp->type == Digiface) { - snd_printk ("I/O Box is a Digiface\n"); - hdsp->card_name = "RME Hammerfall DSP (Digiface)"; +static inline void snd_hdsp_initialize_channels(hdsp_t *hdsp) +{ + if (hdsp->io_type == Digiface) { + hdsp->card_name = "RME Hammerfall DSP + Digiface"; hdsp->ss_channels = DIGIFACE_SS_CHANNELS; hdsp->ds_channels = DIGIFACE_DS_CHANNELS; } else { - snd_printk ("I/O Box is a Multiface\n"); - hdsp->card_name = "RME Hammerfall DSP (Multiface)"; + hdsp->card_name = "RME Hammerfall DSP + Multiface"; hdsp->ss_channels = MULTIFACE_SS_CHANNELS; hdsp->ds_channels = MULTIFACE_DS_CHANNELS; } - +} + +static inline void snd_hdsp_initialize_midi_flush (hdsp_t *hdsp) +{ snd_hdsp_flush_midi_input (hdsp, 0); snd_hdsp_flush_midi_input (hdsp, 1); #ifdef SNDRV_BIG_ENDIAN hdsp_write(hdsp, HDSP_jtagReg, HDSP_BIGENDIAN_MODE); #endif +} + +static int __devinit snd_hdsp_create_alsa_devices(snd_card_t *card, hdsp_t *hdsp) +{ + int err; + + if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) { + return err; + } + + if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) { + return err; + } + if ((err = snd_hdsp_create_midi(card, hdsp, 1)) < 0) { + return err; + } + + if ((err = snd_hdsp_create_controls(card, hdsp)) < 0) { + return err; + } + + snd_hdsp_proc_init(hdsp); + + hdsp->last_spdif_sample_rate = -1; + hdsp->system_sample_rate = -1; + hdsp->last_external_sample_rate = -1; + hdsp->last_internal_sample_rate = -1; + hdsp->playback_pid = -1; + hdsp->capture_pid = -1; + hdsp->capture_substream = NULL; + hdsp->playback_substream = NULL; + + if ((err = snd_hdsp_set_defaults(hdsp)) < 0) { + return err; + } + + hdsp_update_simple_mixer_controls(hdsp); + + if (!(hdsp->state & HDSP_InitializationComplete)) { + sprintf(card->longname, "%s at 0x%lx, irq %d", hdsp->card_name, + hdsp->port, hdsp->irq); + + if ((err = snd_card_register(card)) < 0) { + snd_printk("error registering card\n"); + return err; + } + hdsp->state |= HDSP_InitializationComplete; + } + return 0; } @@ -2959,9 +3997,10 @@ { struct pci_dev *pci = hdsp->pci; int err; - unsigned short rev; + int i; hdsp->irq = -1; + hdsp->state = 0; hdsp->midi[0].rmidi = 0; hdsp->midi[1].rmidi = 0; hdsp->midi[0].input = 0; @@ -2972,23 +4011,30 @@ spin_lock_init(&hdsp->midi[1].lock); hdsp->iobase = 0; hdsp->res_port = 0; + hdsp->io_type = Undefined; + for (i = 0; i < HDSP_MAX_CHANNELS; ++i) + hdsp->playback_mixer_ctls[i] = 0; hdsp->card = card; spin_lock_init(&hdsp->lock); - pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &rev); + tasklet_init(&hdsp->midi_tasklet, hdsp_midi_tasklet, (unsigned long)hdsp); + + pci_read_config_word(hdsp->pci, PCI_CLASS_REVISION, &hdsp->firmware_rev); strcpy(card->driver, "H-DSP"); strcpy(card->mixername, "Xilinx FPGA"); - switch (rev & 0xff) { + switch (hdsp->firmware_rev & 0xff) { case 0xa: case 0xb: - case 0x64: - /* hdsp_initialize_firmware() will reset this */ hdsp->card_name = "RME Hammerfall DSP"; break; - + case 0x64: + case 0x65: + case 0x68: + hdsp->card_name = "RME HDSP 9652"; + break; default: return -ENODEV; } @@ -3021,39 +4067,72 @@ if ((err = snd_hdsp_initialize_memory(hdsp)) < 0) { return err; } + + if (hdsp_is_9652(hdsp)) { + + if ((err = snd_hdsp_initialize_input_enable(hdsp)) != 0) { + return err; + } - if ((err = snd_hdsp_initialize_firmware(hdsp)) < 0) { - return err; - } + hdsp->io_type = Digiface; + + hdsp->ss_channels = DIGIFACE_SS_CHANNELS; + hdsp->ds_channels = DIGIFACE_DS_CHANNELS; + + snd_hdsp_initialize_midi_flush(hdsp); + + if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) { + return err; + } - if ((err = snd_hdsp_create_pcm(card, hdsp)) < 0) { - return err; - } + } else { + + if (hdsp_check_for_iobox (hdsp)) { + /* no iobox connected, we defer initialization */ + snd_printk("card initialization pending : waiting for firmware\n"); + if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) { + return err; + } + return 0; + } - if ((err = snd_hdsp_create_midi(card, hdsp, 0)) < 0) { - return err; - } + if ((err = snd_hdsp_initialize_input_enable(hdsp)) != 0) { + return err; + } + + if ((hdsp_read (hdsp, HDSP_statusRegister) & HDSP_DllError) != 0) { + snd_printk("card initialization pending : waiting for firmware\n"); + if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) { + return err; + } + return 0; + } + + snd_printk("Firmware already loaded, initializing card.\n"); - if ((err = snd_hdsp_create_midi(card, hdsp, 1)) < 0) { - return err; + if (hdsp_read(hdsp, HDSP_status2Register) & HDSP_version1) { + hdsp->io_type = Multiface; + } else { + hdsp->io_type = Digiface; + } + + if ((err = snd_hdsp_create_hwdep(card, hdsp)) < 0) { + return err; + } + + snd_hdsp_initialize_channels(hdsp); + + snd_hdsp_initialize_midi_flush(hdsp); + } - - if ((err = snd_hdsp_create_controls(card, hdsp)) < 0) { + + hdsp->state |= HDSP_FirmwareLoaded; + + if ((err = snd_hdsp_create_alsa_devices(card, hdsp)) < 0) { return err; } - - snd_hdsp_proc_init(hdsp); - - hdsp->last_spdif_sample_rate = -1; - hdsp->last_adat_sample_rate = -1; - hdsp->playback_pid = -1; - hdsp->capture_pid = -1; - hdsp->capture_substream = NULL; - hdsp->playback_substream = NULL; - - snd_hdsp_set_defaults(hdsp); - - return 0; + + return 0; } static int snd_hdsp_free(hdsp_t *hdsp) @@ -3136,10 +4215,10 @@ } static struct pci_driver driver = { - .name = "RME Hammerfall DSP", + .name = "RME Hammerfall DSP", .id_table = snd_hdsp_ids, - .probe = snd_hdsp_probe, - .remove = __devexit_p(snd_hdsp_remove), + .probe = snd_hdsp_probe, + .remove = __devexit_p(snd_hdsp_remove), }; static int __init alsa_card_hdsp_init(void) diff -Nru a/sound/pci/rme9652/multiface_firmware.dat b/sound/pci/rme9652/multiface_firmware.dat --- a/sound/pci/rme9652/multiface_firmware.dat Sat Apr 12 14:44:07 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,4072 +0,0 @@ -/* stored in little-endian */ -static u32 multiface_firmware[24413] __devinitdata = { -0xffffffff, 0x66aa9955, 0x8001000c, 0xe0000000, 0x8006800c, 0xb0000000, -0x8004800c, 0xb4fc0100, 0x8003000c, 0x00000000, 0x8001000c, 0x90000000, -0x8004000c, 0x00000000, 0x8001000c, 0x80000000, 0x0002000c, 0x581a000a, -0x00044800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00800000, -0x00000120, 0x00000000, 0x00044800, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x04800000, 0x00000120, 0x00000000, 0x00024001, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000, -0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000100, 0x00000000, 0x00004004, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000900, 0x00000000, 0x0000c004, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000320, 0x00000000, -0x00004801, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000120, 0x00000000, 0x038048fa, 0x38000e00, 0x8014e001, 0x012e0053, -0x15c00538, 0x9e006f80, 0xe0027800, 0x00078001, 0x0070009e, 0x6f0001c0, -0x70009e00, 0xf811c000, 0x00000123, 0x00000000, 0x023fa003, 0x0bfe08ff, -0x0fe003b0, 0xfc403723, 0xc00f3008, 0x00ff0034, 0x0f3003fc, 0xbf003e80, -0xf003cc00, 0x003ec00f, 0x03fc20ff, 0x0fc407b0, 0x00000e00, 0x00000000, -0x00370801, 0x9b74021d, 0x87440510, 0x2c4099a1, 0x40091400, 0x801d0804, -0x01108074, 0x1d000448, 0xd0004400, 0x20064001, 0x0074001d, 0x07400910, -0x00000c20, 0x00000000, 0x0033a011, 0x0834260d, 0x83440091, 0x34004d29, -0x40041011, 0x000d2000, 0x00108034, 0x05080042, 0xd1002400, 0x00034000, -0x0014000d, 0x47400800, 0x00000e80, 0x00000000, 0x0035a803, 0x0174001d, -0x37400591, 0x0420d900, 0x440d1001, 0xc81d0004, 0x80170074, 0x1d310450, -0xd0006400, 0x08074001, 0x1874001d, 0x0f400900, 0x00000620, 0x00000000, -0x0037a802, 0x127400df, 0x474011b0, 0x748b1f02, 0xc0013062, 0x011f0484, -0x1132307c, 0x5f00c6c0, 0xf00c6c22, 0x00c7c031, 0x0c7c031f, 0x0b4011a0, -0x00000e20, 0x00000000, 0x003d8007, 0x02f8043f, 0x2fc09370, 0xfc80bf00, -0xc00ff006, 0x11fe013f, 0x0fe003f4, 0xff003fc0, 0xf00f5500, 0x20fec83f, -0x87fc03ff, 0x1fc02df4, 0x00000600, 0x00000000, 0x00750802, 0x805c021f, -0x170029f0, 0x4c005f08, 0xc00d300b, 0x00df2037, 0x6df0034c, 0xdf0837c0, -0x008b7c02, 0x00b7c0ad, 0x0b7c04df, 0x0ac00df1, 0x00000420, 0x00000000, -0x02b4a013, 0x1144001d, 0x7740a9d0, 0x4500dd00, 0x447db083, 0x13dd0077, -0x4dd02f44, 0xd9113740, 0x50477405, 0x0137400d, 0x037403dd, 0x4d404d90, -0x00000200, 0x00000000, 0x0032a007, 0x115490cd, 0x43000890, 0x0400c900, -0x431d1080, 0x210d1143, 0x20d08c45, 0x1d0c8242, 0x10903413, 0x0cc34320, -0xc8742b0d, 0x1c4320d0, 0x00000a00, 0x00000000, 0x00788004, 0x2584010d, -0x5a605ed0, 0x8401ed08, 0x409a9007, 0x09ed057b, 0x9ed01794, 0xa9027a40, -0x5007b401, 0x007b401e, 0x57b401ed, 0x11401e90, 0x00000200, 0x00000000, -0x02301012, 0x001c10cd, 0x03e208f0, 0x0c0ecf04, 0xc0043800, 0xe0df8173, -0x2cf0670c, 0x8f00b3c0, 0x33233c00, 0x0033c00c, 0x033c00cf, 0x48cc0cf0, -0x00000040, 0x00000000, 0x003db802, 0x01f600ff, 0x3fe84fe0, 0xfc08ef00, -0xc00ff183, 0x80ff023f, 0x0ff113ec, 0xb80037c2, 0xf083fc00, 0x003fc80f, -0x93fc00ff, 0x09c01ff0, 0x00000660, 0x00000000, 0x0037a015, 0x827c01df, -0x14c005b0, 0x5c20df01, 0xc401b000, 0x00130004, 0x0132044c, 0x53280448, -0xb0807c00, 0x0004c001, 0x004c0013, 0x57c00130, 0x00000e00, 0x00000000, -0x08398012, 0x02b4002d, 0x38400600, 0xb400ed04, 0xce0e1903, 0x40eb503e, -0x0eb103ac, 0xeb003ac4, 0xb103b440, 0x103ac40e, 0x03ac40eb, 0x4b000eb1, -0x00000620, 0x00000000, 0x00790003, 0x02b4a0ed, 0x5a403e11, 0x9601ed00, -0x401c9004, 0x01c50478, 0x1c910704, 0xe1087040, 0xd0479601, 0x1070401c, -0x470461c5, 0x0f021e18, 0x00000400, 0x00000000, 0x00372812, 0x833600cd, -0xb2403d10, 0x7440cd00, 0x484f1003, 0x80e0007a, 0x6f902ba4, 0xe980ba08, -0x5013b64d, 0x013a400e, 0x13a400ed, 0x4b401e99, 0x00000c20, 0x00000000, -0x0015a817, 0x15fce07f, 0x96d807b3, 0xdc007f03, 0xc045b029, 0x98542a14, -0x45b02d4c, 0x5301d480, 0xd20d7c00, 0x0094c455, 0x014c4b57, 0x5fc11730, -0x00000620, 0x00000000, 0x10070012, 0x407c201f, 0x85c061f0, 0x7c001f00, -0xc803f280, 0x403f008f, 0x23f008fc, 0x3f248fc0, 0xb008fc02, 0x128fcc03, -0x08fc8a3b, 0x4bc003f0, 0x00000c00, 0x00000000, 0x00a70810, 0x020c0083, -0x74c05978, 0x4c819f01, 0xd0093082, 0x01934164, 0x19f08e4d, 0x934065c0, -0x34164d09, 0x4064d129, 0x26510593, 0x43c01935, 0x00000c20, 0x00000000, -0x50262001, 0x06440090, 0xa4504918, 0x45028d00, 0xe229b002, 0xa2970926, -0x09d00e44, 0x91002446, 0x101e6c40, 0x00e44039, 0x1244e091, 0x06403910, -0x00000800, 0x00000000, 0x0024a018, 0x524480d0, 0xa4600d50, 0x44089d00, -0x00891002, 0x18e11028, 0x8bd082c4, 0xe10a2844, 0x10838410, 0x0238400e, -0x028420e1, 0x63418b10, 0x00000200, 0x00000000, 0x02302810, 0x0a040281, -0x20408810, 0x04008d82, 0x402e9422, 0x42a920a8, 0x2ad00b84, 0xa100a840, -0x100aa402, 0x00a8402e, 0x0a8402a1, 0x43400a10, 0x00000080, 0x00000000, -0x0886a01d, 0x00042011, 0x84c16050, 0x0c005f05, 0x40013008, 0x00130004, -0x05f0004c, 0x130015c0, 0x30004c00, 0x0014c001, 0x005c0053, 0x77c00330, -0x00000ac0, 0x00000000, 0x0127a819, 0x0afc02ff, 0x27c04bf0, 0xfe00bf01, -0xc029f092, 0x829700a7, 0x29f00a7c, 0xdf00a790, 0xf08b5c02, 0x00a7c02d, -0x0a7c829f, 0x66c029f0, 0x00000e60, 0x00000000, 0x00afa018, 0x32fc0cbf, -0x27c00bb0, 0xfc00bf02, 0xc009b002, 0x049f0024, 0x49341a7c, 0x9f01a7e4, -0x059a7c0c, 0x41a4d069, 0x0a7c8493, 0x63c009d0, 0x00000e00, 0x00000000, -0x2007081c, 0x3874ae0d, 0x07490130, 0x74001d02, 0x44011000, 0xa01d2204, -0x45120074, 0x1d2297e4, 0x10987404, 0x00844821, 0x08748e51, 0x734027d2, -0x00000c20, 0x00000000, 0x0023a010, 0x0236808d, 0x23408810, 0x34008d00, -0x41ca9002, 0x1cad0d28, 0x2a180a94, 0xad002b41, 0x111ab682, 0x11a8406a, -0x0ab430a5, 0x43402ad1, 0x00000e80, 0x00000000, 0x8025a818, 0x0274009d, -0x27400998, 0x74209d00, 0x4aa81292, 0x90fd242c, 0x0f101bb4, 0xfd0a2d42, -0x1002f620, 0x01ac400b, 0x82f400b5, 0x63408bd9, 0x00000620, 0x00000000, -0x0027a805, 0x127c009f, 0x27c24938, 0x74009f11, 0xc029b802, 0x009f2024, -0x1932067c, 0x9f002740, 0x31027c00, 0x00244409, 0x627c0897, 0x17c039f0, -0x00000e20, 0x00000000, 0x00258014, 0x0e7c039f, 0x77c00970, 0x7c099f21, -0xd809f002, 0x089b0267, 0x49f0466c, 0x9f0827c0, 0xf00a7802, 0x0427c039, -0x027c019b, 0x53c019f2, 0x00000600, 0x00000000, 0x00050814, 0x48140617, -0x84c02170, 0x7c001f02, 0xc8233000, 0x0432238f, 0x03e028fc, 0x33100fc0, -0xf000fc10, 0x000fc723, 0x00cc123f, 0x53c023f0, 0x00000420, 0x00000000, -0x005c8014, 0x09c4077d, 0x14401770, 0xf6207d08, 0xc0051061, 0x025500d5, -0x15d0015c, 0x530095c5, 0xd0817420, 0x00974005, 0x8144805d, 0x534005d0, -0x00000200, 0x00000000, 0x0072a014, 0x033401cd, 0xb0689c50, 0x7600cd21, -0x410e100f, 0x03e1003b, 0x4ed003b4, 0xe94c7a40, 0x9033f400, 0x08ff401f, -0x638500ed, 0x53421ed0, 0x00000a00, 0x00000000, 0x04088005, 0x04a4012d, -0x38401450, 0xf400ed80, 0x400e1803, 0x02e51079, 0x0ed003b4, 0xe100f940, -0x9003b440, 0x00bb402e, 0x838411ed, 0x17402ed0, 0x00000200, 0x00000000, -0x00781015, 0x01b421e7, 0x78501e70, 0xb401ef02, 0xc81e1007, 0x01e38073, -0x1ef007bc, 0xeb187fe4, 0xf007bc01, 0x187bc61e, 0x878c01ff, 0x57ce1ef0, -0x00000040, 0x00000000, 0x0035b810, 0x015c201f, 0xa7c80df1, 0x3400df01, -0xc201e503, 0x001f0807, 0x01f0805c, 0x5f0807c0, 0xf0007c20, 0x0007c201, -0x807c001f, 0x43c001f1, 0x00000660, 0x00000000, 0x807fb000, 0x27fc09f3, -0x5cc05ff1, 0xcc01f308, 0xc41f3804, 0x29f3007c, 0x1f3007cc, 0xf5007cc0, -0x30a7cc01, 0x027c089f, 0x27c08df3, 0x00c09f30, 0x00000e00, 0x00000000, -0x02098015, 0x02b40ea1, 0xd840f6d1, 0xac00e120, 0xc0d61004, 0x01eb02ba, -0x8eb2232c, 0xeb223ac5, 0xb003ac2d, 0x223ac48e, 0x63ac8ceb, 0x56c08eb1, -0x00000620, 0x00000000, 0x00290000, 0x41b480e1, 0x106008d1, 0xc400f900, -0x404c1010, 0x0cc9003a, 0x0c104304, 0xc1003240, 0x124304ac, 0x1030408c, -0x83061cc1, 0x00411c13, 0x00000400, 0x00000000, 0x00232804, 0x07345b91, -0xc05808d0, 0x2402c903, 0x40d8120c, 0x020d2802, 0x10904c24, 0x49004242, -0x98082413, 0x12022010, 0x00264209, 0x12400098, 0x00000c20, 0x00000000, -0x00358815, 0x067c0113, 0x74c019f0, 0x4c00cb40, 0xc83d10a0, 0x01d90876, -0x1d310f4c, 0x9308b682, 0x300b4c10, 0x00f4c02d, 0x0f4c03d3, 0x54c02d30, -0x00000620, 0x00000000, 0x00870001, 0x007c001f, 0x37c0a1f0, 0x7c06d700, -0xc00df228, 0x0cdb03b7, 0x2df0037c, 0x9f1337c1, 0xf0037c02, 0x0137c4ed, -0x437c80df, 0x07c04df0, 0x00000c00, 0x00000000, 0x081f0880, 0x00dc003f, -0x5fc057f0, 0xec253300, 0xc05bf004, 0x05ff0135, 0x9ff00bfc, 0xaf017fc0, -0xf0c7cc01, 0x013f009f, 0x23fc14ff, 0x03c08ff0, 0x00000c22, 0x00000000, -0x24962081, 0x05440b1d, 0x474025b0, 0x55841100, 0x4405d148, 0x001d0047, -0x31f10074, 0x1d110748, 0xd1005401, 0x04874821, 0x1874521d, 0x074001d2, -0x00000802, 0x00000000, 0x0034a001, 0x1274005d, 0x034009d0, 0x4400d182, -0x400dd023, 0x20150007, 0x01d80074, 0x1d000740, 0xd0184428, 0x20074821, -0x0074001d, 0x074009d1, 0x00000200, 0x00000000, 0x00002010, 0x820400cd, -0x034040d0, 0x0420d190, 0x4444d013, 0x240d1003, 0x00d80834, 0x0d000340, -0xd0001400, 0x00024000, 0x0034000d, 0x434408c0, 0x00000080, 0x00000000, -0x0002a000, 0x005c005f, 0x47c051f0, 0x4c001140, 0xc359f857, 0x55170805, -0x01f0007c, 0x1f1007c2, 0xf0004c25, 0x2007c201, 0x807c001f, 0x03c409e0, -0x00000ac0, 0x00000000, 0x000fa805, 0x03fc00ff, 0x07c08130, 0x3c002f02, -0xc00df003, 0x40df057f, 0x0f7007fc, 0x9f003fc0, 0xf003fc02, 0x003fc80f, -0x03fc80ff, 0x17c007f0, 0x00000e60, 0x00000000, 0x820f8003, 0x20fc00ff, -0x04e00dd0, 0x5c04ff00, 0xc00d3000, 0x00df0034, 0x0f3003cc, 0xd30034c0, -0x3003dc00, 0x003cc00f, 0x03cc00f3, 0x0cc00f30, 0x00000e00, 0x00000000, -0x02070801, 0x187400dd, 0x8444add0, 0x4508dd00, 0x40017010, 0x401d0004, -0x01100044, 0x11000440, 0x10007440, 0x20044001, 0x00440011, 0x04400111, -0x00000c20, 0x00000000, 0x0023a011, 0x183400cd, 0x834000d0, 0x2400cd00, -0x50001842, 0x00cd0030, 0x08940315, 0x81401050, 0x57031400, 0x4032500c, -0x020500c1, 0x44500c14, 0x00000e80, 0x00000000, 0x8525a803, 0x237440dd, -0x875001d0, 0x2408dd00, 0x600d5202, 0x040d0004, 0x04920034, 0x51002040, -0x58003400, 0x00024000, 0x01440001, 0x0c400090, 0x00000620, 0x00000000, -0x10878802, 0x0c7480dd, 0xc74201f0, 0x64611f00, 0xc00d3061, 0x205f3924, -0x05b1015c, 0x530234c0, 0x70005c00, 0x08064801, 0x01440013, 0x08c00130, -0x00000e20, 0x00000000, 0x040d8007, 0x45fc80fd, 0x1c4000f0, 0xcc113f31, -0xc901f205, 0x41bf201f, 0x0b7026cc, 0xbf000fc0, 0xb003fc00, 0x003dc00f, -0x02fc00fe, 0x1fc00f60, 0x00000600, 0x00000000, 0x00950802, 0x087c20d7, -0x96c00df0, 0x7c420f20, 0xc481b00b, 0x185f0024, 0x01f0214c, 0x1f0017c3, -0x70407c00, 0x0205c081, 0x207c081f, 0x0bc081f0, 0x00000420, 0x00000000, -0x00d4a013, 0x0f7404dc, 0x56c01dd1, 0x5c831d04, 0x402d1403, 0x439d01d4, -0x1dd00645, 0xdd04a744, 0xd04b7407, 0x0274509d, 0x277409dd, 0x4f409dd0, -0x00000200, 0x00000000, 0x00d2a007, 0x003446cc, 0x42490cda, 0x30010d20, -0x422d1000, 0x008d0c12, 0xacd04204, 0xcd046340, 0x40873410, 0x00b0402c, -0x0b7402cd, 0x1f402cd0, 0x00000a00, 0x00000000, 0x8c588004, 0x44b441ed, -0x5a609ed1, 0xb4092d00, 0x44121824, 0x414d116a, 0x12d11584, 0x2d115b42, -0xd114b441, 0x10484410, 0x04b6412d, 0x124012d1, 0x00000200, 0x00000000, -0x90301012, 0x3b3c08cf, 0x72c150f0, 0x3c170f01, 0xd0103905, 0xa98f2952, -0xd8f0160c, 0x8f0243c0, 0x70033c01, 0x0031c08c, 0x223c60cf, 0x4bc00cf0, -0x00000040, 0x00000000, 0x023db802, 0x23fc80ff, 0x3f8083f0, 0x9c003f02, -0xc00f7021, 0x007f022d, 0x05f121fc, 0x5f2037c0, 0xf1107c40, 0x000fc003, -0x01fc403f, 0x0bc013f0, 0x00000660, 0x00000000, 0x2027a015, 0x097c80db, -0x60c011f0, 0x2c20d101, 0xc00d2006, 0x001f0004, 0x05f0007c, 0x5f002700, -0x30047c00, 0x0007c001, 0x017c001f, 0x57c001f0, 0x00000e00, 0x00000000, -0x98298812, 0x41bc00e1, 0x38c00270, 0x8500e104, 0x44021202, 0x00ed1038, -0x0ad003b4, 0xad001b40, 0x10032400, 0x003b400e, 0x02b400ed, 0x4b400ed0, -0x00000620, 0x00000000, 0x04700003, 0x87b401e5, 0x7b601ed8, 0x8431c900, -0x40109007, 0x012d004a, 0x12d084b4, 0x2d104b64, 0x1204b601, 0x004b6012, -0x84b4012d, 0x0f4012d0, 0x00000400, 0x00000000, 0xa0f30812, 0x2714a0c5, -0xb1407c5a, 0x2440c902, 0x700c9547, 0x92cd0874, 0x6cd04b34, 0xcd003340, -0x146b3412, 0x0cf3413c, 0x4b3413cd, 0x4b41acd0, 0x00000c20, 0x00000000, -0x40dda817, 0x0174c057, 0x554017d1, 0xcc007b20, 0xc0059805, 0xc25d0054, -0x25f1897c, 0x5f0017c0, 0x300d7402, 0x01d7c075, 0x097c075f, 0x5fc035f0, -0x00000620, 0x00000000, 0x10070012, 0x087e001b, 0x04c08170, 0x5c000701, -0xc0037020, 0x023f228f, 0x22f008fc, 0x3f100f40, 0xf000ec02, 0x008fc023, -0x08fc023f, 0x4bc023f0, 0x00000c00, 0x00000000, 0x04e70810, 0x077c009b, -0x37c08960, 0x4d109f00, 0xc008f002, 0x00930024, 0x0970027c, 0x9f0824c0, -0xf0027c80, 0x0027c009, 0x027c009f, 0x43c009f0, 0x00000c20, 0x00000000, -0x00662001, 0x0e5c0891, 0x274439d0, 0x44489d00, 0x5409d002, 0x029140a4, -0x29d10a74, 0x9d0024d0, 0xd1027402, 0x10a5c429, 0x0a74a29d, 0x074029d0, -0x00000800, 0x00000000, 0x0020a018, 0x1a548090, 0x256009d0, 0x46009d80, -0x4019d802, 0x00b8802c, 0x0bd002f4, 0xbd802c60, 0xd002f600, 0x002f400b, -0x02f400bd, 0x63400bd0, 0x00000200, 0x00000000, 0x42202010, 0x22344881, -0x23420cd0, 0x06008d80, 0x403ad022, 0x02e180b8, 0x2ed00bb4, 0xed80a860, -0xd00ab402, 0x00b9402e, 0x0bb402ed, 0x43402ed0, 0x00000080, 0x00000000, -0x0586b01d, 0x585c8213, 0x05c141f8, 0x44141f05, 0xc001f008, 0x80132004, -0x01700074, 0x1f0014c0, 0xf0007c00, 0x0007c001, 0x007c001f, 0x77c003f0, -0x00000ac0, 0x00000000, 0x012fb819, 0x125c849f, 0x37c00af0, 0xfc00bf00, -0xc029f112, 0x029f10a7, 0x29d00a7c, 0x9f00b5c0, 0xf00a7c82, 0x00a5c029, -0x0a7c029f, 0x67c009f0, 0x00000e60, 0x00000000, 0x01afa818, 0x826c08bf, -0x2fc00bf8, 0x8c20af00, 0xc149700a, 0x28930024, 0xc9320a4c, 0x9300a705, -0x30326c06, 0x00254089, 0x0a4c0093, 0x60c02930, 0x00000e00, 0x00000000, -0x1187081c, 0x2836800d, 0x044001d0, 0x6c001d00, 0x4461b000, 0x04154104, -0x61140045, 0x11008640, 0x1028444e, 0x00874021, 0x00451611, 0x70400310, -0x00000c20, 0x00000000, 0x0323a010, 0x5224048d, 0xa16008d2, 0x66008d20, -0x411ad202, 0x02ad04a8, 0x0a109a84, 0xa9c1a940, 0x14128500, 0x45a9406a, -0x0a8422a1, 0x40504a14, 0x00000e80, 0x00000000, 0x0525a818, 0x4274009d, -0x244109d0, 0x44009c00, 0x42191302, 0x20b1082c, 0x0b1002c4, 0xb1002e04, -0x5802e480, 0x002f400b, 0x02c400b1, 0x60400b10, 0x00000620, 0x00000000, -0x00278005, 0x0e64009f, 0xa54009d0, 0x44009e10, 0xd409c012, 0x00938024, -0x1930024c, 0x9300a780, 0x30824c00, 0x0025c209, 0x024c0093, 0x14c00930, -0x00000e20, 0x00000000, 0x00258014, 0x277c009f, 0xe5c099f0, 0x7d308f00, -0xc009f00e, 0x408f1023, 0x39f1027c, 0x8f1026c0, 0xb0c21c04, 0x0027c009, -0x123c408f, 0x53c009f0, 0x00000600, 0x00000000, 0x00850014, 0x884c101f, -0x86c46070, 0x6c00131a, 0xc0023000, 0x0033000c, 0x033000cc, 0x33108fc0, -0x3000cc00, 0x080cc003, 0x00fc003f, 0x53c003f0, 0x00000420, 0x00000000, -0x021ca014, 0x0140807d, 0x14c01750, 0x04827140, 0x50051001, 0x00514814, -0x05140145, 0x51e01744, 0x16094500, 0x00145005, 0x0174005d, 0x534007d0, -0x00000200, 0x00000000, 0x80b2a014, 0x470402cd, 0x30403c90, 0x260ac500, -0x400cd002, 0x00c10230, 0x0c900354, 0xc1123740, 0x10230420, 0x0034400c, -0x033608cd, 0x53400dd0, 0x00000a00, 0x00000000, 0x00388005, 0x478401ed, -0x78410e10, 0xc4006500, 0x40005012, 0x20218008, 0x02108094, 0x21000340, -0x91008400, 0x00084210, 0x80b4a02d, 0x174002d0, 0x00000200, 0x00000000, -0x90781015, 0x478c21af, 0x70d01474, 0xac81e700, 0xc012f136, 0x41733050, -0x1630051e, 0x42005bc0, 0x3007cc01, 0x0058c016, 0x05bc016f, 0x57c016f0, -0x00000040, 0x00000000, 0x2025b810, 0x007da0df, 0x37e20d70, 0x4c805b20, -0xc80db01a, 0x009d0027, 0x09f0026c, 0x970027c8, 0x72007c80, 0x2027c009, -0x027c009f, 0x43c009f0, 0x00000660, 0x00000000, 0x007fa000, 0x05cd0d73, -0x64c01f71, 0xce01df00, 0xd01f7066, 0x01d24b64, 0x1f3427fc, 0xf3426ed0, -0xf104dd89, 0x407c909f, 0x07cd09b3, 0x03c01f34, 0x00000e00, 0x00000000, -0x02198815, 0x11840871, 0x6a805610, 0xc60d4d05, 0x40821006, 0x892b0358, -0x91102424, 0x31005841, 0x90178409, 0x020840c3, 0x20840861, 0x57408210, -0x00000620, 0x00000000, 0x00310000, 0x01060421, 0x28404410, 0x8404ed03, -0x40025582, 0x40610008, 0x061011b4, 0x61010060, 0xd0108404, 0x00104406, -0x01841001, 0x03401610, 0x00000400, 0x00000000, 0x00072804, 0x00040041, -0x60400010, 0x04004d80, 0x401c1002, 0x13810070, 0x28100e24, 0x8104f040, -0x9a4f0402, 0x04e04138, 0x4e0413d1, 0x13413810, 0x00000c20, 0x00000000, -0x00058815, 0x6344c0d1, 0x34520c1d, 0xc500cf10, 0xc03d7002, 0xb29110f4, -0x99324a7c, 0x9104b6c2, 0xf04b4411, 0x04a4c129, 0x4a4c43d3, 0x57c12930, -0x00000620, 0x00000000, 0x00370001, 0x037c001f, 0x27c00d30, 0x7c02df00, -0xc0c1f102, 0x005f0307, 0x05f2016c, 0x5f0007c0, 0xb0006c80, 0x0017c005, -0x013c001f, 0x07c005f0, 0x00000c00, 0x00000000, 0x00cf0880, 0x23fc01b3, -0xfcc007f0, 0xcc03df00, 0xc002f002, 0x403f001c, 0x12f04474, 0x3f001cc0, -0xf003cc11, 0x004bc013, 0x04cc0073, 0x03c01330, 0x00000c22, 0x00000000, -0x04e62081, 0x00740315, 0x65400d71, 0x7c13dd00, 0x400dd002, 0x89dd2024, -0x1dd00774, 0xdd002450, 0xd0004580, 0x1077400d, 0x07440091, 0x07401d14, -0x00000802, 0x00000000, 0x0804a001, 0x00740ad0, 0x34400dd1, 0x44005d00, -0x400dd002, 0x009c0024, 0x49d01274, 0x8d002440, 0xd1004404, 0x41274049, -0x12440091, 0x07404910, 0x00000200, 0x00000000, 0x00102210, 0x00240001, -0x214044d0, 0x24064900, 0x5220d002, 0x004d0110, 0x04d00134, 0x4d111040, -0xd0030400, 0x00134004, 0x01040041, 0x43400410, 0x00000080, 0x00000000, -0x4006b000, 0x007c8093, 0x74c235f8, 0xcc375f21, 0xc020f03e, 0x0b1f0340, -0xf1f23c7c, 0x1f02c4c0, 0xf0144c07, 0x0007c001, 0x000d0013, 0x03c00130, -0x00000ac0, 0x00000000, 0x000f9805, 0x00fc003f, 0xefc1d178, 0x7e053f04, -0xc01ff00e, 0x09ff0b7f, 0x9df0377c, 0xdf027740, 0xf0237c17, 0x003fc00f, -0x03fc20ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x000fa003, 0x20e804ff, -0x0fc083f0, 0xec263c08, 0xc20fb053, 0x00f3003e, 0x0f3003cc, 0xb3003fc0, -0x3003ec80, 0x083ec00f, 0x83ec20ff, 0x0cc007f0, 0x00000e00, 0x00000000, -0x02070801, 0x2844369d, 0x274a81d0, 0x44c61d00, 0x4009100b, 0x00110004, -0x01140045, 0x11000740, 0x10004400, 0x00044601, 0x0045001d, 0x07c809d1, -0x00000c20, 0x00000000, 0x0013a011, 0x122408cd, 0x01604451, 0x04020d00, -0x50049003, 0x00014800, 0x00808014, 0x01480340, 0x16000500, 0x20005800, -0x0004800d, 0x446408d1, 0x00000e80, 0x00000000, 0x0055a803, 0x0466408d, -0x07400dd0, 0x44201d21, 0x440c1013, 0x08110004, 0x41902014, 0x01000340, -0x10004410, 0x00044081, 0x0064101d, 0x0f4009d1, 0x00000620, 0x00000000, -0x0007a802, 0x0c6c095f, 0x07c041f0, 0x6d001f00, 0xc04db007, 0x231304c6, -0x01b0145c, 0x530307c0, 0x30186c00, 0x0006c051, 0x086c001f, 0x00c401f3, -0x00000e20, 0x00000000, 0x000d8007, 0x005c003f, 0x67c007f0, 0xbc057f08, -0xc05bf107, 0x01ff027f, 0x1f6007e4, 0xff103fc0, 0xf227fc00, 0x017fc00f, -0x27dc05fb, 0x1e403ef0, 0x00000602, 0x00000000, 0x00a50802, 0x0a7c00df, -0x35c00170, 0x7c104300, 0xc125f063, 0x40df2834, 0x2df08b7c, 0xdf00b7c0, -0xf00b7c02, 0x00b7c02d, 0x0b7c1ac3, 0x0bc20df0, 0x00000420, 0x00000000, -0x1464a013, 0x1044009d, 0xf7400d10, 0x74025101, 0x445db007, 0x26dd01f4, -0x2dd00b74, 0xdd02b741, 0xd20b7487, 0x60b7492d, 0x4b7481d1, 0x4f41add0, -0x00000200, 0x00000000, 0x0022a007, 0x0214060d, 0xd2680810, 0x24030104, -0x4030100b, 0x111d1404, 0x10d06434, 0x0d22c245, 0x90646410, 0x06434111, -0x44240209, 0x1f4810d0, 0x00000a00, 0x00000000, 0x00688004, 0x0684212d, -0x7b409214, 0xb4116100, 0x501c9807, 0x81ed0878, 0x9ed087b4, 0xad007b42, -0x9007b421, 0x0073401e, 0x07b421e9, 0x1b401ed0, 0x00000200, 0x00000000, -0x82301012, 0x221c0a5d, 0x43e08c70, 0x7c8c4340, 0xe88c7403, 0x02cf3230, -0x0cf0033c, 0x8f0133c0, 0xf0233c00, 0x0233c00c, 0x233c00cb, 0x4bc08cf0, -0x00000040, 0x00000000, 0x083db802, 0x23dc007f, 0x0fce8ff0, 0xfc0a7f00, -0xc60ff003, 0x00ff023f, 0x0ff803fe, 0xbf803fc2, 0xf283fc00, 0x003fc40f, -0x83fc00f5, 0x0bc01ff0, 0x00000660, 0x00000000, 0x0017a015, 0x027c811f, -0x56c209f2, 0x7c001300, 0xe0013423, 0x801f0007, 0x01f2007c, 0x531044c0, -0xf2807e80, 0x0007c801, 0x805c001f, 0x57c001f0, 0x00000e00, 0x00000000, -0x00198812, 0x03b4002d, 0x384004d0, 0xf4006b00, 0x600e5013, 0x00ed003b, -0x0ed003b4, 0xe1183042, 0xd003b400, 0x003b400e, 0x839c00ed, 0x4b4a0ed1, -0x00000600, 0x00000000, 0x00f90003, 0x46b400e5, 0x7a411ad0, 0xb6236100, -0x4a1e100f, 0x11ed2079, 0x1ed107b4, 0xe5007a40, 0xd18fb401, 0x087b4a1e, -0x0f9403ed, 0x0f401ed0, 0x00000402, 0x00000000, 0x10f32812, 0x033402cd, -0xb0400dd2, 0x34015912, 0x420e5403, 0x40ed03fb, 0x3ed10bb4, 0xe5043a50, -0xd04bb412, 0x00bb402e, 0x4b9401ed, 0x4b000ed0, 0x00000c20, 0x00000000, -0x00dda817, 0x05fc007f, 0x5ec007f0, 0xbc015300, 0xc0051004, 0x035f0017, -0x55f0117c, 0x570496c0, 0xf1017c01, 0x0417c525, 0x015c005f, 0x5fc107f8, -0x00000620, 0x00000000, 0x01070012, 0x007c101f, 0x07c801d0, 0x7c021f04, -0xc003f000, 0x403b200f, 0x03f148fc, 0x3a408dc1, 0xf000bc08, 0x118fc003, -0x00fc043f, 0x4bc823f0, 0x00000c00, 0x00000000, 0x02270810, 0x064c088f, -0x24c209f1, 0x4c41df20, 0xc0093404, 0x109f0027, 0x08f0024c, 0x9f0064c0, -0xf0027c00, 0x0027c109, 0x027c009f, 0x43c009f0, 0x00000c20, 0x00000000, -0x00262001, 0x2a44019d, 0xa44009d0, 0x44209d00, 0x40091082, 0x809d0027, -0x09d00245, 0x9c03e458, 0x10827420, 0x00274009, 0x0274809d, 0x074129f0, -0x00000800, 0x00000000, 0x0034a018, 0x4344009d, 0xa44009d0, 0x44089d00, -0x40091022, 0x00a5082f, 0x0fd082c4, 0xbd002c48, 0x1402f000, 0x003e640b, -0x03f600b9, 0x63400bd0, 0x00000200, 0x00000000, 0x00202010, 0x2204028d, -0x2051c8d0, 0x4508cd02, 0x422a100a, 0x02ad00ab, 0x2ad00a84, 0xad00a84c, -0x100ab442, 0x00ab482a, 0x02b602ad, 0x43400ad0, 0x00000080, 0x00000000, -0x0506b01d, 0x584c001f, 0x80c061f0, 0x4c161f05, 0xc0013850, 0x00170007, -0x00f0014c, 0x1d0004c4, 0xf0007c40, 0x0017c001, 0x007c801f, 0x77c203f0, -0x00000a80, 0x00000000, 0x002fb819, 0x13fc02ff, 0x2f804bf0, 0xf8249f01, -0xca29f000, 0x029f00a7, 0x29f00a7c, 0x9f00a7cc, 0xf00a7c22, 0x00a7c029, -0x0a7c029f, 0x67c02970, 0x00000e60, 0x00000000, 0x002fa018, 0xc2cc04bb, -0xacc06930, 0x4c06b301, 0xc1093016, 0x04930227, 0x09300a4c, 0x930427c0, -0x301a4c04, 0x00a4c069, 0x024c009b, 0x67c00930, 0x00000e00, 0x00000000, -0x0297081c, 0x0044341d, 0x84424510, 0x6e861141, 0x40611018, 0x16110287, -0xe1140145, 0x51408748, 0x10104114, 0x03944045, 0x00440411, 0x72400714, -0x00000c22, 0x00000000, 0x0023a010, 0x4224428d, 0xa0486810, 0x84028100, -0x410a5c4a, 0x48a1492b, 0x0a100a84, 0xa1052b41, 0x141a8402, 0x4128506a, -0x0aa532a1, 0x43402a10, 0x00000e80, 0x00000000, 0x0125a818, 0x0264089d, -0x25444814, 0x2400c100, 0x430b5082, 0x10b1042b, 0x6b1002c4, 0xb108af4a, -0x101a8400, 0x0028404e, 0x42e426a1, 0x63408b12, 0x00000620, 0x00000000, -0x08e7a805, 0x0a6c0299, 0x24902930, 0x44009301, 0xc0297002, 0x00930027, -0x3930064c, 0x930027c0, 0x300e4c01, 0x00e4c019, 0x026c009b, 0x17c03930, -0x00000e20, 0x00000000, 0x00258014, 0x0e5c409c, 0x26c209f1, 0x7c189f01, -0x8129b00e, 0x088f0167, 0x19f00e7c, 0x9f0127c4, 0xf2027803, 0x0127c019, -0x221c009f, 0x52c009f0, 0x00000600, 0x00000000, 0x40850814, 0x187c0003, -0x04d021f0, 0xfc001f20, 0xc4237100, 0x1033000c, 0x23f000fc, 0x33000cc1, -0x3048cc00, 0x000cc003, 0x80cca23f, 0x530003f2, 0x00000420, 0x00000000, -0x1154a014, 0x49f44271, 0x1d4005d0, 0x76927d21, 0x5405d001, 0x00514014, -0x05d00174, 0x514016d2, 0x16014580, 0x00145005, 0x014d005d, 0x534005d2, -0x00000200, 0x00000000, 0x0072a014, 0x07740cc1, 0x35400cd0, 0x3441cd01, -0x420c4283, 0x00c10230, 0x0cd00374, 0xd1003440, 0x10030408, 0x0230400c, -0x032400cd, 0x53440cd0, 0x00000a00, 0x00000000, 0x00608005, 0x03b481e1, -0x38400cd0, 0xb400ed00, 0x4010d000, 0x20210800, 0x12d000b6, 0x01000042, -0x10000420, 0x18084000, 0x0084200d, 0x174402d0, 0x00000200, 0x00000000, -0x00781015, 0x85bc20a3, 0x59c33ef0, 0xb481ef20, 0xc01e7206, 0x01e30078, -0x1cf085bc, 0xe3004846, 0x31078c01, 0x0058c01e, 0x07ac01ef, 0x57c016f0, -0x00000040, 0x00000000, 0x0825b810, 0x007c0098, 0x17c40df0, 0x7c009f00, -0xc801f001, 0x001f2007, 0x01f2027c, 0x1f2037c0, 0xf0007c80, 0x0027c801, -0x007c001e, 0x43c209f8, 0x00000660, 0x00000000, 0x007bb000, 0x06fc8973, -0x7f041ff1, 0xfc01ff02, 0xc0973027, 0x097f026c, 0x973007cc, 0xbf107cc0, -0xf125cd09, 0x026cd01f, 0x07c801f3, 0x0bc01f30, 0x00000e00, 0x00000000, -0x02398015, 0x82b408eb, 0x03400ed0, 0xf4006d00, 0x42cb1008, 0x08ad0318, -0xcb102084, 0x6d020840, 0xd0b2840c, 0x021c4182, 0x60844831, 0x57480210, -0x00000620, 0x00000000, 0x00290000, 0x60b63821, 0x3b408ed0, 0xb418ed10, -0x44065082, 0x084d0028, 0x06100104, 0x8d000840, 0xd0018400, 0x0208400c, -0x030400e1, 0x63401610, 0x00000400, 0x00000000, 0x10232804, 0x08360089, -0x83400cd1, 0x34010c00, 0x54984081, 0x108d0010, 0x98102204, 0x4d02b050, -0xd00e0483, 0x42f04030, 0x08050a01, 0x1b403810, 0x00000c20, 0x00000000, -0x0035a815, 0x067c2113, 0xa7c82ff0, 0x3c21df00, 0xc0996401, 0x019f1414, -0x19102a4c, 0x5f0074c0, 0xf04a4c10, 0x00744201, 0x0c4c0313, 0x77c10910, -0x00000620, 0x00000000, 0x10230001, 0x4a70021f, 0x23011df0, 0x7c22df00, -0xc005b006, 0x085f0023, 0x05f4017d, 0x9f1407c1, 0xf0117c12, 0x0407c90d, -0x1b7c02df, 0x07c104f4, 0x00000c00, 0x00000000, 0x003f0880, 0x82fc0833, -0x0fc20ff8, 0xfc857304, 0xc21a3000, 0x01b3041c, 0x5b3084bc, 0x7f000fc0, -0xf006fc00, 0x001bc013, 0x04fc1033, 0x04c013f0, 0x00000c20, 0x00000000, -0x00262081, 0x06740111, 0x47400dd0, 0x74231102, 0x40951003, 0x015b4024, -0x05140774, 0x9d083740, 0xd0017424, 0x0827420d, 0x177404d1, 0x05460dd0, -0x00000802, 0x00000000, 0x0034a001, 0x0e749051, 0x37400dd0, 0x74809100, -0x04011001, 0x04110084, 0x01101274, 0x1d183740, 0x90107000, 0x08274241, -0x10744811, 0x044249d0, 0x00000200, 0x00000000, 0x00302010, 0x023400c1, -0x02400cd0, 0x74000108, 0x400c1002, 0x00c90030, 0x0c128134, 0xcd080340, -0xd0033420, 0x0813400c, 0x032420c1, 0x41400490, 0x00000080, 0x00000000, -0x0026a000, 0x007c0053, 0xb7c00fd0, 0x7c001340, 0xc0013000, 0x60130004, -0x0131007c, 0x1f0007c4, 0xf0007c00, 0x0007c001, 0x007c0013, 0x04c401f0, -0x00000ac0, 0x00000000, 0x002fa805, 0x00fc80ff, 0x4fc80ff0, 0xfc003f15, -0xc00ff103, 0x40f7003f, 0x0ff003fc, 0xff003fc0, 0xf003fc00, 0x583fc00f, -0x03fc00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x030f8003, 0x03cc0833, -0x3fc08114, 0x4c00f308, 0xc00f381b, 0x00ff003f, 0x0df0837c, 0x9f0034c0, -0xf0037c00, 0x003f400f, 0x03fc00ff, 0x0cc007f0, 0x00000e80, 0x00000000, -0x00970801, 0x2a442e01, 0xb8400110, 0xc402f194, 0x40091023, 0x401d2807, -0x01900074, 0x1d000450, 0xd0007400, 0x00074201, 0x0074a019, 0x06c009d1, -0x00000420, 0x00000000, 0x21a3a011, 0x03142081, 0x30604852, 0x3402c163, -0x48045213, 0x800d1002, 0x00d00014, 0x0d000140, 0xd0003620, 0x00034000, -0x0034a00d, 0x444008d0, 0x00000c80, 0x00000000, 0x0025a803, 0x02442011, -0x34748950, 0x5540d010, 0x690d5083, 0x201d2007, 0x01d00074, 0x1d080540, -0xd2007400, 0x06074a81, 0x8074b01d, 0x0e4089d2, 0x00000620, 0x00000000, -0x4007a802, 0x215c8153, 0x36c03570, 0x5c20d110, 0xc00d5403, 0x041f2887, -0x81e0087c, 0x5f0605c1, 0xf00c7c10, 0x00c7c011, 0x007c011f, 0x08c211f0, -0x00000e20, 0x00000000, 0x001d8007, 0x00ad09af, 0x3ac307b0, 0xac40ff00, -0xc08bb203, 0x08ff30bf, 0x1fb013ec, 0xff007ec0, 0xf117fc20, 0x047fc11f, -0x0ffc09fb, 0x1fc11ef0, 0x00000600, 0x00000000, 0x00b10802, 0x094c04d3, -0x35e02530, 0x6c80d700, 0xc045f203, 0x18d304b4, 0xec714b4c, 0xd301b7c0, -0x30237c08, 0x12b4c68d, 0x034c0cd3, 0x0bc40d30, 0x00000420, 0x00000000, -0x0834a013, 0x14540091, 0x3f420510, 0xec0ae100, 0x420d1003, 0x03d51c74, -0x2d104b44, 0xd104f7c8, 0x10877002, 0x00b4402d, 0x2f4400d1, 0x4f402d10, -0x00000200, 0x00000000, 0x0222a007, 0x8024a001, 0x30480192, 0x0482c108, -0x40301003, 0x43011082, 0x20110c04, 0x0100c344, 0x00103446, 0x10424410, -0x08244301, 0x1f441011, 0x00000a00, 0x00000000, 0x20788004, 0x05340961, -0x7b419290, 0x248dc501, 0x511c1007, 0x01c14072, 0x1e141705, 0xa1507342, -0x14073401, 0x4872501c, 0xc72701c1, 0x13401e14, 0x00000200, 0x00000000, -0x01a41012, 0x102c1883, 0x71ca5cb0, 0x0409c342, 0xc01c3817, 0x09c333f2, -0x9c300f0c, 0x830373c0, 0x10273c01, 0x8132c02c, 0x032c00c3, 0x4bc10c30, -0x00000040, 0x00000000, 0x402db802, 0x01dc087f, 0x3fc00f70, 0xdc48db00, -0xc00f742b, 0x28ff003d, 0x0db2037c, 0xbf003dc2, 0xf083f808, 0x003dc08f, -0x03dc08ff, 0x0bc01ff0, 0x00000660, 0x00000000, 0x0067a015, 0x024c0053, -0x36900936, 0x5c04df00, 0xc201302b, 0x001f1807, 0x0130007c, 0x5fa007e0, -0xf0004c01, 0x0007c001, 0x004c011f, 0x57c001f0, 0x00000e00, 0x00000000, -0x30398812, 0x030400c1, 0x38400a10, 0xc490ed0b, 0x400e1203, 0x80e7003b, -0x0e1203b4, 0xcd203b40, 0xd00384a0, 0x203b480e, 0x038480fd, 0x4b480ed2, -0x00000620, 0x00000000, 0x00790003, 0x068403e1, 0x78401e10, 0xb409ed02, -0x621e1097, 0x03ed007b, 0x1e1047b4, 0xed007b48, 0xd2078441, 0x00fb421e, -0x078621ed, 0x0f401ed0, 0x00000400, 0x00000000, 0x02332812, 0x0b0413d1, -0x30401c10, 0x4440cd00, 0x640e1003, 0x00f5023b, 0x2e148ff4, 0xed0c3f40, -0xd003c421, 0x00bf483f, 0x23c742ed, 0x4b409fd2, 0x00000c20, 0x00000000, -0x405da817, 0x09c50373, 0x16c07730, 0x7c805f08, 0xc2053001, 0x095f02d7, -0x9530097c, 0x5f0897c6, 0xf0494d12, 0x0057c0a5, 0x8d4c045f, 0x5fc007f0, -0x00000620, 0x00000000, 0x00870012, 0x487c821f, 0x07c841f2, 0x5c001f00, -0xc023f000, 0x8037808f, 0xa3f048fc, 0x3f028fc8, 0xd290fc86, 0x008fc8a3, -0x08fc063f, 0x4bc023f0, 0x00000c00, 0x00000000, 0x00270810, 0x024c019f, -0x24c009b1, 0x4c818300, 0xc0493202, 0x809f0167, 0x9932064c, 0x931264c0, -0x31027c41, 0x2c24c219, 0x427c0493, 0x40c01930, 0x00000c20, 0x00000000, -0x00a62001, 0x0204069d, 0x24400910, 0x440a9130, 0x40091482, 0x039d21e7, -0x09146e45, 0x9140a458, 0x140e74a0, 0x406451b9, 0x02700391, 0x0451a914, -0x00000800, 0x00000000, 0x0024a018, 0x4344049d, 0x20500c90, 0x44109140, -0x47091002, 0x18bd002f, 0x0a1182c4, 0xb1002c49, 0x1123f408, 0x062c400b, -0x13f400b1, 0x60400b10, 0x00000200, 0x00000000, 0x02202010, 0x0204088d, -0x20488812, 0x05808102, 0x422a1122, 0x02ad00ab, 0x2a100a84, 0xa100b848, -0x100ab402, 0x20a8402a, 0x0ab442e1, 0x40402a10, 0x00000080, 0x00000000, -0x0592b01d, 0x504d161f, 0x84d020b0, 0x4c941325, 0xc0013058, 0x801f0807, -0x0130000c, 0x53200482, 0x30817c00, 0x0004c001, 0x017c0013, 0x74c00330, -0x00000ac0, 0x00000000, 0x012fb819, 0x02fc04ff, 0x27c04bf0, 0x7c008f11, -0xc229f012, 0x229f00a7, 0x29f08a7c, 0x9f00a7c8, 0xf00a7c02, 0x00a7c829, -0x0a7c029f, 0x67c229f0, 0x00000e60, 0x00000000, 0x00afa018, 0x02fc02bf, -0x24c00a70, 0x4c00b310, 0x4049321a, 0x82930524, 0x29300a4c, 0x930024c1, -0x30a24c12, 0x9024c889, 0x024c049f, 0x63c06930, 0x00000e00, 0x00000000, -0x1087081c, 0x0074021d, 0x04400510, 0x04001101, 0x50615008, 0x00114184, -0x01142845, 0x11010450, 0x102944c0, 0xa78450a1, 0x584d141d, 0x73686314, -0x00000c20, 0x00000000, 0x01a3a010, 0x0234068d, 0xa0400850, 0x0402c154, -0x418a140a, 0x02a10428, 0x0a100284, 0xa144a842, 0x14128500, 0x0028404a, -0x0aa402ad, 0x4340ca10, 0x00000e80, 0x00000000, 0xa425a818, 0x8274009d, -0x24500910, 0x04009100, 0x41885002, 0x82b91028, 0x0b1002c4, 0xa1002c41, -0x1103c490, 0x043c410b, 0x42c410fd, 0x63400b10, 0x00000620, 0x00000000, -0x0027a805, 0x027c029f, 0x24c00970, 0x4d009300, 0xc0293002, 0x83930464, -0x3930e244, 0x9306e4c0, 0x10064c0a, 0x00a4c039, 0x0e6c029d, 0x17404930, -0x00000e20, 0x00000000, 0x02658014, 0x027c009f, 0x27c289f0, 0x7c008f00, -0xc009b202, 0x85872967, 0x89f0023c, 0x9f0c63c0, 0xf0a63c20, 0x0567c298, -0x263c058f, 0x53c059f0, 0x00000600, 0x00000000, 0x04850814, 0xa07c801f, -0x02c021f0, 0x4c001300, 0xc1033000, 0x003f010c, 0x03f0c0fc, 0x3f008cc0, -0xd100cc02, 0x008fc823, 0x88fcb23b, 0x50c023f0, 0x00000420, 0x00000000, -0x00dca014, 0x2db4007d, 0x144007d1, 0x44207100, 0x50351001, 0x4b5d0414, -0xa5d00574, 0x5d001450, 0xd0094502, 0x44d74075, 0x2d740351, 0x514017d0, -0x00000200, 0x00000000, 0x02f2a014, 0x073410cd, 0x32400dd0, 0x3400c100, -0x42be1003, 0x02ed1838, 0x0fd00394, 0xeda07840, 0xd0478490, 0x003b404e, -0x07b401e1, 0x50421ed2, 0x00000a00, 0x00000000, 0x00288005, 0x03b400ed, -0x384203d0, 0xb400e10b, 0x400c1413, 0x10ed0038, 0x0cd00bb4, 0xcd10b841, -0xd00b84a0, 0x0073400e, 0x43b410e1, 0x15411ed0, 0x00000200, 0x00000000, -0x00781015, 0x05bc012f, 0x7ec01ef3, 0xbc010341, 0xc01e303f, 0x41ee2078, -0x1ef007be, 0xef0078c0, 0xf0878c41, 0x207bc41e, 0x07bc01e3, 0x54c01cf0, -0x00000040, 0x00000000, 0x0025b810, 0x017c00df, 0xb74001f0, 0x4d201f05, -0xc801f803, 0x001f2007, 0x01f0007c, 0x5f0007c0, 0xf0007c80, 0x0007c001, -0x807c0017, 0x43c001f0, 0x00000660, 0x00000000, 0x007fa000, 0x06fc01ff, -0x75c89cf0, 0x7c49f32a, 0xc01d3007, 0x81d30074, 0x1ff207fc, 0xd31877c4, -0x30277c45, 0x007c409f, 0x27cc09f3, 0x00c21f30, 0x00000e00, 0x00000000, -0x00398815, 0x02b4006d, 0x704092d0, 0xb481c102, 0x40555007, 0x0fc10074, -0x5ed03784, 0xe106fb42, 0x1227b415, 0x203849ae, 0x2b8480e1, 0x54488e12, -0x00000620, 0x00000000, 0x00190000, 0x02b4002d, 0x31404fd0, 0xb4042140, -0x404a1013, 0x2ce1043a, 0x4e922384, 0xe9123b44, 0x5233b484, 0x203a608e, -0x238400e1, 0x00401e18, 0x00000400, 0x00000000, 0x00132804, 0x0234034d, -0x304201d2, 0x34000100, 0x561c9003, 0x06015482, 0x30d06c05, 0x59640344, -0x16043491, 0x46427100, 0x04050901, 0x1051101c, 0x00000c20, 0x00000000, -0x0155a815, 0x03708edf, 0x3dc001f0, 0xfc40d330, 0xc00d3003, 0x80d300b6, -0x2db00b5e, 0x9b8077c0, 0x504b7c41, 0x0836c01d, 0x4f4c01d3, 0x54c10d30, -0x00000620, 0x00000000, 0x00070001, 0x227c009f, 0x37c02df0, 0x3c025f00, -0xc08d7203, 0x08df0035, 0xadfb0b5e, 0x930037c0, 0xb04b7c02, 0x0835e00d, -0x1b7c00df, 0x07c00df0, 0x00000c00, 0x00000000, 0x001b0880, 0x15bc0933, -0x38d01334, 0x7c01fb00, 0xc90e7003, 0x00f30038, 0x9ff117fc, 0xbd217fc9, -0xf107c881, 0x003fc80f, 0x03f093ff, 0x03c00ff2, 0x00000c22, 0x00000000, -0x04c62081, 0x88740191, 0x35009d12, 0x74185500, 0x40010003, 0x09115684, -0x01d00074, 0x1d10074c, 0xd00c449a, 0x0ac74681, 0x2864621d, 0x074091d1, -0x00000802, 0x00000000, 0x0224a001, 0x097400d1, 0x36002110, 0x74009900, -0x420dc003, 0x00110004, 0x01d08854, 0x15000741, 0xd0105500, 0x08074001, -0x0074201d, 0x074209d0, 0x00000200, 0x00000000, 0x08202010, 0x00240001, -0x30444c10, 0x34000101, 0x40441ac3, 0x10010880, 0x80d01836, 0x0d950342, -0xd0201440, 0x00034000, 0x0024000d, 0x434008d0, 0x00000080, 0x00000000, -0x4006b000, 0x017e2013, 0xfcc0b130, 0xfc059b02, 0xc0f97007, 0x21030844, -0x71f0147c, 0x1f0043c1, 0xf01c1c1b, 0x0003c000, 0x003c000f, 0x03c008f0, -0x00000ac0, 0x00000000, 0x080fb805, 0x00fe003f, 0x7f40dff0, 0xfc131f02, -0xc89fb147, 0x15ff00ff, 0x5df01f74, 0xbf047fc0, 0xf237ec05, 0x003fc00f, -0x03fc40ff, 0x17c007f0, 0x00000e60, 0x00000000, 0x0b0f8003, 0x33cc8c3f, -0x2bc003f0, 0xfc063342, 0xc00fb033, 0x00ff003f, 0x0ff003cc, 0xbf003cc0, -0x3003fc00, 0x003dc00f, 0x03cc00f3, 0x0cc007f0, 0x00000e00, 0x00000000, -0x03070801, 0x324c0e5d, 0xaf40e1d0, 0x74061100, 0x4809100b, 0x800d0007, -0x01d28064, 0x1d000450, 0x14007420, 0x00045001, 0x00440011, 0x044009d0, -0x00000c20, 0x00000000, 0x0123a011, 0x1124000d, 0xa1490050, 0x34820521, -0x4004908b, 0x800d2001, 0x00d20025, 0x0d000160, 0x92003480, 0x60004200, -0x00270009, 0x445008d0, 0x00000e80, 0x00000000, 0x0005a807, 0x0044041d, -0x276001d0, 0x74005100, 0x000d1003, 0x021d0507, 0x61d80064, 0x1d000440, -0x90007620, 0x00844001, 0x00640819, 0x0c0009d0, 0x00000620, 0x00000000, -0x00c7a802, 0x326d031d, 0x27c0d5f0, 0x7c801700, 0x847db003, 0x081f00c7, -0x01f0144c, 0x1f0105c0, 0x90687c02, 0x0084c051, 0x386c011b, 0x08c281f2, -0x00000e20, 0x00000000, 0x02158003, 0x02fc016f, 0x2ec01ff0, 0xa0083f00, -0xc049f00b, 0x01ff0077, 0x1df00f5c, 0x9f0277c0, 0x70077c08, 0x0936c09d, -0x075c00d3, 0x1fc01dd0, 0x00000600, 0x00000000, 0x44a50802, 0x004c089f, -0x23c40530, 0x7c005304, 0xd005b807, 0x0ec340b4, 0x2d34035c, 0x934034d0, -0x740b4d00, 0x4034d00d, 0x034d02d3, 0x08d00d34, 0x00000420, 0x00000000, -0x00d48017, 0x10450890, 0x2c400db0, 0x5c055108, 0x42bd1807, 0x02d10af4, -0xbd102f45, 0x9b0af400, 0x10af442b, 0x02f442bd, 0xaf440bd0, 0x4c40bd10, -0x00000200, 0x00000000, 0x0212a007, 0x11040381, 0xa0400811, 0x24000100, -0x40001083, 0x81010001, 0x01920004, 0x41000200, 0x10006400, 0x08044001, -0x00240010, 0x1d400110, 0x00000a00, 0x00000000, 0x00688004, 0x058401e1, -0x6c481898, 0xd4016100, 0x410e1007, 0x81e11479, 0x1e904786, 0xe9047a41, -0x1047a411, 0x0478411e, 0xc7a431e1, 0x11419e10, 0x00000200, 0x00000000, -0x80b01012, 0x214c4c53, 0x21c24c30, 0x3c080300, 0xe80c1003, 0x88c32031, -0x4cb0031c, 0xc30132c0, 0x70132c02, 0x0230c00c, 0x132c02c3, 0x49c00c30, -0x00000040, 0x00000000, 0x002db802, 0x01fc0874, 0xadc00fe0, 0xbc205f44, -0xe00f7043, 0x08fe023e, 0x0d70037c, 0xf7003de0, 0xf003dc08, 0x203fc08f, -0x03dc00ff, 0x0ac21ff8, 0x00000660, 0x00000000, 0x4017b011, 0x027c009b, -0xa7ca01f0, 0x3c945b00, 0xd0013407, 0x00130804, 0x0134007c, 0x534007c0, -0xf2804d80, 0x0007c001, 0x007c001f, 0x54d001f0, 0x00000e00, 0x00000000, -0x803d8012, 0x03b420e3, 0x2f440ad0, 0x9c006101, 0x400f1013, 0x20e1003c, -0x0e1003b4, 0xf1803b40, 0x70038400, 0x003b420e, 0x03a400ed, 0x48400ed0, -0x00000620, 0x00000000, 0x00790003, 0x0eb401e5, 0x6b4016d0, 0xf4016100, -0x401e1007, 0x01e5007a, 0x1e5887b4, 0xe9887b40, 0xd0078621, 0x007b401e, -0x07b401ed, 0x0c401ed0, 0x00000400, 0x00000000, 0x80332812, 0x1f3640c5, -0x23401dd8, 0x14004940, 0x400e1003, 0x1be544b8, 0x1e103bb4, 0xe900bb40, -0x500b8012, 0x243b404e, 0x0ba40bed, 0x48400ed0, 0x00000c20, 0x00000000, -0x081da817, 0x0df40277, 0x1740d7d0, 0xf4855b00, 0xe0053000, 0x025701d4, -0xc570017c, 0x5b041740, 0xf0154400, 0x24174125, 0x1d7c005f, 0x5cc107f0, -0x00000620, 0x00000000, 0x00070012, 0x007c9010, 0x07c001b0, 0x5c001700, -0xe002f200, 0x003b008b, 0x22d008bc, 0x27210bca, 0x7010bc80, 0x000bc002, -0xc0b0102f, 0x4bc022f2, 0x00000c00, 0x00000000, 0x02270810, 0x021c2593, -0x25c20970, 0x7c00d300, 0xc009f000, 0x20932026, 0x0930027c, 0x932165ca, -0x31026c00, 0x0024c009, 0x824c0093, 0x40c00938, 0x00000c20, 0x00000000, -0x00662001, 0x0a744195, 0xe0480910, 0x5c499100, 0x5009d802, 0x209140a4, -0x29144a74, 0x9b406459, 0x14024580, 0x4024d809, 0x02450491, 0x045d2904, -0x00000800, 0x00000000, 0x0820a018, 0x427400d9, 0x24600958, 0x74009145, -0x4219d0a2, 0x00b1002c, 0x0b1002f6, 0xb1882c40, 0x1002c400, 0x802e400b, -0x02c400b1, 0x62400b90, 0x00000200, 0x00000000, 0x02202210, 0x0a3408c5, -0x2441c810, 0x34088100, 0x403ad022, 0x02a100b8, 0x2a100ab4, 0xa980a840, -0x100a8402, 0x00aa402a, 0x0a8482a1, 0x42402a18, 0x00000080, 0x00000000, -0xa586a01d, 0x005c161b, 0x05d06170, 0x7c561305, 0xc001d0d8, 0x00130004, -0x01300034, 0x130001c0, 0x32004c00, 0x0006e001, 0x814c0013, 0x76c20230, -0x00000ac0, 0x00000000, 0x212f8819, 0x0afc04bf, 0x2fc04bf1, 0xdc049f0d, -0x4029f010, 0x029f00a5, 0x29f20a7c, 0xd720a7c0, 0xe20a7c02, 0x00b5c02d, -0x0a7c029f, 0x65c029f0, 0x00000e60, 0x00000000, 0x133faa18, 0x0afc10bf, -0xa8c06978, 0xdc029301, 0xc049301d, 0x629f0224, 0x69f0027c, 0x9f8627c1, -0xf0327c0c, 0x2827ca49, 0x0a7c209f, 0x63c009f0, 0x00000e00, 0x00000000, -0x0307001c, 0x0874001d, 0x046441d0, 0x64001140, 0x5061101c, 0x421d0294, -0x21d29874, 0x1d218748, 0xd0917484, 0x00074141, 0x0834021d, 0x734143d0, -0x00000c20, 0x00000000, 0xa123a010, 0x1a34908d, 0xa2406850, 0x14068100, -0x418a108a, 0x06ad0128, 0x4ad04ab4, 0xa5002b60, 0xd00ab402, 0x05ab402a, -0x0ab416ad, 0x43402ad0, 0x00000e80, 0x00000000, 0xa425a818, 0x8274009d, -0x264208d0, 0x64409110, 0x42491102, 0x00bd002c, 0x0bd802f4, 0xbd212f6b, -0xd012f600, 0x002f440b, 0x8af410bd, 0x63404bd0, 0x00000620, 0x00000000, -0x0027a005, 0x127cb09f, 0x26500970, 0x5c009300, 0xc1293402, 0x1b9f02e4, -0x39f06e7c, 0x9f0127c4, 0xd08e7c03, 0x0267c899, 0x027c039d, 0x17c049f0, -0x00000e20, 0x00000000, 0x00258014, 0x027c459f, 0x21c099f0, 0x6c08df00, -0xc009f020, 0x009f0067, 0x99f0027c, 0x9f0067c8, 0xf0027c02, 0x0827c309, -0x167c229f, 0x53c009f0, 0x00000600, 0x00000000, 0x00850014, 0x007c801f, -0x07c80172, 0x6d001300, 0xd003f200, 0x0037000c, 0x233000cc, 0x33048fc0, -0xf000fc00, 0x200fc003, 0x08fc023f, 0x53c02330, 0x00000420, 0x00000000, -0x001ca014, 0x41dc007d, 0x1f400510, 0x44405106, 0x4005d084, 0x005c0814, -0x05148145, 0x55401748, 0xd1817400, 0x08170605, 0x0174605d, 0x53400714, -0x00000200, 0x00000000, 0x01328014, 0x032408cd, 0xf3400c50, 0x44894100, -0x400dd007, 0x08c50230, 0x0c900324, 0xc1003364, 0xd023341a, 0x0233408c, -0x233400cd, 0x53400c10, 0x00000a00, 0x00000000, 0x00388805, 0x049440ad, -0x3f404e10, 0x84016140, 0x4002d073, 0x212d0008, 0x029004a4, 0x21004b62, -0x9000b400, 0x000b4002, 0x84b4002d, 0x17400210, 0x00000200, 0x00000000, -0x00780015, 0x073c016f, 0x5bc01e7a, 0x8c894300, 0xc013f207, 0x01f70058, -0x16b005ec, 0xe3006fc0, 0xf007bc01, 0x007bc01e, 0x05bc016f, 0x57c01632, -0x00000040, 0x00000000, 0x2025a810, 0x025c001f, 0x17e16de0, 0x5c005f00, -0xc80df003, 0x801f2027, 0x0970025c, 0x1f2017c8, 0xf2007c80, 0x0007c801, -0x027c809f, 0x43c009f0, 0x00000660, 0x00000000, 0x027fa000, 0x06ca49ff, -0x7fc11ff0, 0xbc017f00, 0xc01f3007, 0x09bb426c, 0x9ff017fc, 0x3f025fc0, -0xf026fc09, 0x026fc093, 0x36cd09ff, 0x03c01f34, 0x00000e00, 0x00000000, -0x00198015, 0x188620ed, 0x1bc00ed8, 0xb4802d02, 0x40031003, 0x0c610018, -0x829000b4, 0xed232a40, 0xd101b408, 0x001b440e, 0x31ec002d, 0x574802b0, -0x00000620, 0x00000000, 0x08390200, 0xc284002d, 0x2b400ed0, 0xf4086d00, -0x41021003, 0x00a10008, 0x86d811b4, 0x2d000960, 0x5002b408, 0x042b4102, -0x3096006d, 0x034016d0, 0x00000400, 0x00000000, 0x24032804, 0x0604210d, -0x01402cd0, 0x34000c00, 0x402c1003, 0x004500f0, 0xb8902234, 0xcd023260, -0xd00d3403, 0x00d3403c, 0x0f160d8d, 0x13403850, 0x00000c20, 0x00000000, -0x2805a815, 0x054405dd, 0x27400fd0, 0x7c055c00, 0xd09d3d17, 0x81530274, -0x19f02a7c, 0xdf02f5c0, 0xf0497410, 0x0057401d, 0x4f54009f, 0x57c0a9d0, -0x00000620, 0x00000000, 0x22330001, 0x017c020d, 0x27c10df2, 0x7c005f10, -0xc801f003, 0x08930207, 0x05c0017c, 0x1f200748, 0xf01a7404, 0x28a7c001, -0x0064805f, 0x07808580, 0x00000c00, 0x00000000, 0x020f0880, 0x05ec20fb, -0x0cc40e72, 0xcc003300, 0xc003f003, 0x106f101c, 0x03f004cc, 0xff002c43, -0x3281fc00, 0x041cc30f, 0x41fc0033, 0x03c213f0, 0x00000c22, 0x00000000, -0x00a62081, 0x0f450411, 0x04400d10, 0x4d091110, 0x500dd003, 0x129d2024, -0x9dd20745, 0x1d0014d0, 0x16124580, 0x4124d001, 0x025c48d5, 0x07401dd1, -0x00000802, 0x00000000, 0x0084a001, 0x100400d1, 0x30400d50, 0x44804102, -0x400cd293, 0x001d0024, 0x08d01244, 0x0d801540, 0x10000400, 0x00024000, -0x02740091, 0x074049d0, 0x00000200, 0x00000000, 0x40102010, 0x01040041, -0x10500c10, 0x04000100, 0x4000d003, 0x20cd8810, 0x04d00104, 0xcd902140, -0x18030420, 0x0032420c, 0x81042041, 0x43400498, 0x00000080, 0x00000000, -0x0006a000, 0x004c2083, 0x24c00f70, 0x44001340, 0xc001f003, 0x001f0000, -0x01f00044, 0x1f000540, 0x32005c00, 0x0006e001, 0x007c0003, 0x03c001f0, -0x00000ac0, 0x00000000, 0x800f9805, 0x03dc803f, 0x0fc00ff8, 0xdc003f00, -0x400ff103, 0x00fc003f, 0x0ff003fc, 0xff003cc2, 0xf003de00, 0x003dc00f, -0x03dc00ff, 0x17c00ff1, 0x00000e40, 0x00000000, 0x000fa003, 0x00fc083f, -0x8fe003f0, 0xed801300, 0xc003f000, 0x003f000c, 0x01f0007c, 0xff203f80, -0xf100f400, 0x006cc057, 0x03cc01bb, 0x0cc403f3, 0x00000e00, 0x00000000, -0x00370801, 0x037400dd, 0x37410df0, 0x4400d500, 0x080dd003, 0x20cd0030, -0x0dd00374, 0xdd003640, 0xd0002400, 0x20154005, 0x03540a55, 0x054005d0, -0x00000c20, 0x00000000, 0x0013a011, 0x0234000d, 0x134048d0, 0x24000501, -0x5200d003, 0x004d0012, 0x04d20034, 0xcd303360, 0x92003420, 0x02004284, -0x0304808d, 0x446001d8, 0x00000e80, 0x00000000, 0x0035a803, 0x017400dd, -0x27400550, 0x4402d518, 0x422cd000, 0x009d0826, 0x09908b64, 0xdd803641, -0xd2a06480, 0x00354005, 0x83500055, 0x0d4101da, 0x00000620, 0x00000000, -0x0077a802, 0x017c00df, 0x274605d0, 0x6c005718, 0xc401f800, 0x041f0026, -0x01f0017c, 0xdf003740, 0xb3407c89, 0x008cc047, 0x024c00bf, 0x08802cf0, -0x00000e20, 0x00000000, 0x00dd8007, 0x02fc003f, 0x1fc80bf0, 0xfc20bf00, -0xc02ff803, 0x00ff101d, 0x0ff082fc, 0xff143fc4, 0xf000ec31, 0x003bc907, -0x02fc204f, 0x1f810ff0, 0x00000600, 0x00000000, 0x00350802, 0x037c00db, -0x36c04df0, 0x7c025b20, 0xc0e1f003, 0x12530437, 0xe5f0694c, 0xdf1036c0, -0x31097c00, 0x0307c084, 0x034d0c97, 0x0bc00df0, 0x00000420, 0x00000000, -0x0014a013, 0x80742d11, 0x874021d0, 0x74009c08, 0x401dd000, 0x82914047, -0x29d00a45, 0xdd00fd52, 0x14057660, 0x00b74025, 0x43440251, 0x4dc23d71, -0x00000200, 0x00000000, 0x0212a007, 0x1c240009, 0x076000d0, 0x34009d01, -0x402cd000, 0x4a812083, 0x28d00604, 0xcd023140, 0x111434c0, 0x8043441c, -0x1f340181, 0x1f4018d0, 0x00000a00, 0x00000000, 0x20788004, 0x47b401e1, -0x7b405ed0, 0xb4016d04, 0x4212d01f, 0x0d61007b, 0x56d02584, 0xed107940, -0x1034b409, 0x0833481e, 0x87a44161, 0x114c1e50, 0x00000200, 0x00000000, -0x01141012, 0x023c000b, 0x53c058f0, 0x3c018f03, 0xc0dcf017, 0x0dc30653, -0xddf0160c, 0xcd0371c0, 0x30573419, 0x0203c00c, 0x033c0083, 0x4bc300f8, -0x00000040, 0x00000000, 0x403db802, 0x01f400ff, 0x27c087f0, 0xfc005f10, -0xc003f000, 0x001e1027, 0x93f801fc, 0xff053cc8, 0xf123fc40, 0x013fc08f, -0x23dc017f, 0x0be403f0, 0x00000660, 0x00000000, 0x1037a015, 0x017c80d3, -0x27c005f0, 0x5c00d700, 0xc00df000, 0x019c0027, 0x0934034d, 0xd3407784, -0x32064f21, 0x6044d21d, 0x86490093, 0x54901d3c, 0x00000e08, 0x00000000, -0x00118812, 0x02b40021, 0x1b420ad0, 0xac003d08, 0x0402d283, 0x207d201b, -0x061000c4, 0xe10139c0, 0x10828600, 0x003c400f, 0x02c40071, 0x48600f38, -0x00000620, 0x00000000, 0x047d0003, 0x07b401e1, 0x7b403ed0, 0xb611ed00, -0x401ed007, 0x01e9007b, 0x1e910784, 0xe1007b48, 0x1207c411, 0x0048401e, -0x079401ad, 0x0c4c1e10, 0x00000400, 0x00000000, 0x04d72812, 0x24341201, -0x874001d0, 0x24001d01, 0x4001d800, 0x200d0003, 0x00902004, 0x81003140, -0x102f0601, 0x09b0420c, 0x27040049, 0x48408c12, 0x00000c20, 0x00000000, -0x4095a817, 0x057c1053, 0x97c015f0, 0x7c005700, 0xc005fa01, 0x605b1017, -0x05b0854c, 0x530017c4, 0x0001cc00, 0x00944005, 0x015c207b, 0x5c403730, -0x00000620, 0x00000000, 0x000f0012, 0x00fc403f, 0x0fc403f1, 0xfc003f00, -0xc023f808, 0x003f000f, 0x237108fc, 0x1f108740, 0xf5486c80, 0x100fcc21, -0x08604227, 0x4bc10170, 0x00000c00, 0x00000000, 0x02670810, 0x027c009b, -0x24c019f0, 0x6c209b00, 0xc219f00e, 0x039f04e4, 0x1930267c, 0x9f00e70a, -0xf0027c22, 0x0027c259, 0x164c059f, 0x42c009f0, 0x00000c20, 0x00000000, -0x00262001, 0x02741091, 0xa44aa9d8, 0x44009300, 0x5479d04a, 0x039f00e4, -0x09140274, 0x9d10e64a, 0x70367c00, 0x00e74049, 0x1244849d, 0x05c039d0, -0x00000800, 0x00000000, 0x00248018, 0x12f400b9, 0xac402bd3, 0xe640b100, -0x404bd002, 0x22bd042c, 0x8b1042b4, 0x9d102762, 0xd0827480, 0xb1bf4809, -0x024400bd, 0x624069d0, 0x00000200, 0x00000000, 0x02282010, 0x02b408a1, -0x28608ad0, 0x8428a102, 0x422ad002, 0x02a588a8, 0x2a120ab4, 0xcd00b248, -0x500a1422, 0x00ab4028, 0x8a0402ad, 0x434028d0, 0x00000080, 0x00000000, -0x0086b01d, 0x017c221b, 0x84d021d0, 0x6c021300, 0x4201f000, 0x001d0804, -0x0730007c, 0x0f000380, 0xe0807480, 0x2007c001, 0x004d003f, 0x76e001f2, -0x00000ac0, 0x00000000, 0x012fb819, 0x027c049f, 0x27c049f0, 0x7c049f41, -0xc409f002, 0x009f2027, 0x09e0027c, 0xbf00a7c0, 0x6082bc20, 0x00a7c029, -0x82fc829f, 0x65c00bf0, 0x00000e60, 0x00000000, 0x002fa018, 0x02bc02b3, -0x2cc00b70, 0xec089310, 0xc0093002, 0x809608a7, 0x29c0027c, 0x8f11a748, -0xf0823c00, 0x00e4c499, 0x024c0793, 0x638029f0, 0x00000e00, 0x00000000, -0x0107081c, 0x00740011, 0x00400170, 0x44001500, 0xc1411001, 0x40100105, -0x41920074, 0x17000740, 0x92117640, 0x03044001, 0x50440411, 0x720047d2, -0x00000c20, 0x00000000, 0x0423a010, 0x03348081, 0x205008d1, 0x25048100, -0x440a1102, 0x14a1692b, 0x4ad052b4, 0xad222b64, 0x9042b490, 0x0128406a, -0x02a4ccad, 0x43404ad0, 0x00000e80, 0x00000000, 0x4025a818, 0x82740091, -0x244008d0, 0x46009500, 0x48091c02, 0x04f1002f, 0x0b9102f4, 0xb5003f02, -0x9003f408, 0x082c400b, 0x12f440f9, 0x62448bd0, 0x00000620, 0x00000000, -0x0027a805, 0x427c0093, 0x64c109f0, 0x2c809328, 0xc0093006, 0x00930067, -0x19f0827c, 0x9f0827c0, 0xb0067400, 0x0424d009, 0x026c009b, 0x178009f0, -0x00000e20, 0x00000000, 0x00e58014, 0x027c009f, 0x27c00970, 0x7c009f02, -0xc009f212, 0x409f1125, 0x89b0027c, 0x970027c0, 0xb0ca7c40, 0x0027c009, -0x424c0097, 0x52c009f0, 0x00000600, 0x00000000, 0x00050814, 0x005c5013, -0x04c001b0, 0x6c001300, 0xc003f008, 0x843f100f, 0x43f000fc, 0x33000fc4, -0xa180cc00, 0x248bc0c2, 0x00c00823, 0x53c003f2, 0x00000420, 0x00000000, -0x0014a014, 0x21c41071, 0x1c4c0711, 0xc4005100, 0x4005d04d, 0xc25d0057, -0x05d00974, 0x51509740, 0x50095413, 0x00d5c005, 0x09440b51, 0x534217d0, -0x00000200, 0x00000000, 0x0036a014, 0x8b1483c1, 0x74500c90, 0x0480d100, -0x420ed04f, 0x0be5013f, 0x3ed063b4, 0xe1863b22, 0x90878410, 0x403b402e, -0x079501e1, 0x53400ed0, 0x00000a00, 0x00000000, 0x40288005, 0x078401a1, -0x08440610, 0x8400e144, 0x420ed003, 0x00ed043b, 0x2ed003b4, 0xf1207b44, -0x000fd481, 0x0479400e, 0x0b9401e1, 0x17410ed0, 0x00000200, 0x00000000, -0x006c1015, 0x079c0173, 0x58d013b0, 0x8d05f300, 0xc01ef004, 0xe1ef007b, -0x1ef907b4, 0xe3007fc0, 0xb1078e81, 0x1033c81e, 0x879c00c3, 0x57c01ef2, -0x00000040, 0x00000000, 0x0025b810, 0x0174001f, 0x27c009f0, 0x5c60df08, -0x4401f000, 0x001f0007, 0x01f8007c, 0x5f000780, 0xe0007c00, 0x0807c001, -0x806c201d, 0x43c001b8, 0x00000660, 0x00000000, 0x407fa000, 0x05fc01f3, -0x6fc01df0, 0x4c59ff00, 0xc09ff027, 0x29f3227f, 0x1df1a77c, 0x97107704, -0xb6277c09, 0x407cd21f, 0x07cd01f3, 0x00d01f34, 0x00000e00, 0x00000000, -0x022d8015, 0x21bc0021, 0x538054d0, 0x2c81fd01, 0x40dcd105, 0x0dc727f2, -0x1ed02fa6, 0x81017341, 0xb0177c19, 0x003ac00e, 0x23ac00e3, 0x54400eb0, -0x00000620, 0x00000000, 0x00290800, 0x03b400e1, 0x0b40c2d0, 0x8404ed02, -0x424ed853, 0x24e5823b, 0x0ed933b4, 0xa5013b44, 0x1023b404, 0x0038400e, -0x038400e9, 0x00401e10, 0x00000400, 0x00000000, 0x00632804, 0x19101101, -0x3140a8d0, 0x2504dd10, 0x4020d001, 0x03050083, 0x10d22c24, 0x11000340, -0x10001401, 0x02c00000, 0x00000b01, 0x10401010, 0x00000c20, 0x00000000, -0x01f5a815, 0x033001d3, 0xb74a29f0, 0x0c83ff00, 0xc02df103, 0x53d70277, -0xbdf0a37c, 0xd71837c0, 0x10033401, 0x00b4020d, 0x034002da, 0x54c04c10, -0x00000620, 0x00000000, 0x01270001, 0x077c08df, 0x07c441f0, 0x7d08df06, -0xc1a5f213, 0x22df00b6, 0x2df0836c, 0xdf8037e0, 0xf00b7c42, 0x01b7c02d, -0x0b7c44df, 0x07c00df0, 0x00000c00, 0x00000000, 0x802f0880, 0x03cd0273, -0x1cc04730, 0xfc80f320, 0xc05bb200, 0x11ff00bf, 0x0ff017fc, 0xf310b242, -0x300fcd40, 0x083bc05f, 0x07cc01e3, 0x00c00f30, 0x00000c22, 0x00000000, -0x20222081, 0x01440155, 0x24400d50, 0x4400db00, 0x487d3000, 0x0a1d2047, -0x11d00874, 0x55200450, 0x50004410, 0x03c74471, 0x40144211, 0x06c29151, -0x00000802, 0x00000000, 0x00348001, 0x05464081, 0x20400810, 0x7400d108, -0x400d9012, 0x001d8007, 0xa0d00074, 0x11000542, 0x18004400, 0x00074001, -0x10440411, 0x04400911, 0x00000200, 0x00000000, 0x00242010, 0x01060005, -0x10506050, 0x0480c901, 0x49041110, 0x040d1803, 0x00d02034, 0x05030140, -0x50584464, 0x40024000, 0x00450001, 0x42400950, 0x00000080, 0x00000000, -0x0026a000, 0x034e0091, 0xc4c07530, 0x7c07d300, 0xc0f9b0ae, 0x091f03c7, -0x31f00c7c, 0x130047c0, 0x301c440b, 0x1003c000, 0x800c0003, 0x00c00830, -0x00000ac0, 0x00000000, 0x002fa805, 0x00fc003f, 0xf7c89ff0, 0xfc97dd05, -0xc01d721c, 0x0ddf2277, 0x9ff137fc, 0xbf08fec1, 0xf987fc07, 0x003fe40f, -0x03fe00ff, 0x17c007f8, 0x00000e60, 0x00000000, 0x003fa003, 0x03cc08f3, -0x3f440f70, 0xcc00ff00, 0xc00ff183, 0xc0ff303f, 0x0fb103c4, 0xf6183c80, -0x3003fc40, 0x003cc00f, 0x03bcc0f3, 0x0ed40f81, 0x00000e00, 0x00000000, -0x10070801, 0x00450411, 0x070001b0, 0x54001d00, 0xc001d000, 0x001d0005, -0x00500054, 0x15080548, 0x12007400, 0x00044801, 0x03f40011, 0x04410f50, -0x00000c20, 0x00000000, 0x40210015, 0x001080c1, 0x32480810, 0x0480cd20, -0x0008d203, 0x80cd2023, 0x0c520314, 0xc1202148, 0x10033080, 0x0030400c, -0x033400c9, 0x45404c50, 0x00000e80, 0x00000000, 0x2017a807, 0x83540011, -0x07600510, 0x54041d00, 0x40059000, 0x001d0014, 0x41500054, 0x15101540, -0x14106400, 0x40045001, 0x83742019, 0x0c400d50, 0x00000620, 0x00000000, -0x001fa882, 0x03dc82b3, 0x1ec00714, 0xcc007f08, 0xc007e000, 0x003f001f, -0x077000dc, 0x37001dc0, 0x3001fc40, 0x025cc097, 0x037c897b, 0x0bc00cb4, -0x00000e20, 0x00000000, 0x00298007, 0x006c006f, 0xafc00bb3, 0xfc41bf00, -0xc00bf003, 0x00ff102f, 0x1af003fc, 0xff002fc4, 0xf006fc00, 0x002fc009, -0x03fc00b7, 0x1fc00fb1, 0x00000600, 0x00000000, 0x00050802, 0x101c4593, -0x17c04130, 0x4c044301, 0xc041f010, 0x04030104, 0x45b0100c, 0x131100c0, -0x30114c04, 0x0214c045, 0x233c0c5f, 0x0bc40db0, 0x00000420, 0x00000000, -0x0174a013, 0x07440051, 0x67401d90, 0x44039100, 0xc01dd007, 0x01d10076, -0x19100744, 0xd0007440, 0x10064401, 0x08e44019, 0x03f4209d, 0x4f400fa0, -0x00000200, 0x00000000, 0x0072a007, 0x0b240041, 0xa2402c90, 0x34028500, -0x402cd08b, 0x02c900b0, 0x28100b04, 0xc800b240, 0x100a4402, 0x01e44029, -0x4334038d, 0x1e424c10, 0x00000a00, 0x00000000, 0x00408004, 0x24a401a1, -0x5b401294, 0xa4016140, 0x4210d004, 0x0929004a, 0x161c0484, 0x29024a40, -0x10010501, 0x00584006, 0x07a4016d, 0x13401e90, 0x00000200, 0x00000000, -0x40201012, 0x40348453, 0x26c14834, 0x3c109704, 0xc108f043, 0x18db0424, -0x0830434c, 0xd90626c1, 0x30720c10, 0x0020c188, 0x033c008f, 0x4bc04c30, -0x00000040, 0x00000000, 0x001db802, 0x83dd00bf, 0x1fc00750, 0xdd807f00, -0xc807f000, 0x2837421f, 0x057000fd, 0x174215d0, 0xf0117c08, 0x001fc047, -0x03fc417e, 0x0bc12ff0, 0x00000660, 0x00000000, 0x40512810, 0x034d0013, -0x44c00530, 0x4c001300, 0xc0053800, 0x00100014, 0x0130004c, 0x130015d0, -0x32006c00, 0x2844c811, 0x0b740013, 0x56801df0, 0x00000e00, 0x00000000, -0x0029091a, 0x008400c1, 0x38480a11, 0x8440e100, 0x480a0003, 0x00e3002a, -0x0e120384, 0xe1202842, 0x10038480, 0x0038400e, 0x33b400e1, 0x48404fd0, -0x00000600, 0x00000000, 0x00490000, 0x04a4112d, 0x4a401290, 0xa4612900, -0x4012d204, 0xa1298049, 0x109084a4, 0x2d004a40, 0x10049401, 0x00484012, -0xb7b4a121, 0x0e405ed0, 0x00000400, 0x00000000, 0x00b12812, 0x030401cd, -0xb2406d90, 0x6406c901, 0x406dd01f, 0x07c101b1, 0x6d901f24, 0xc104b240, -0x101b1407, 0x01b0406c, 0x033406c1, 0x48400cd0, 0x00000c20, 0x00000000, -0x00158017, 0x016d005f, 0x96e025b8, 0x64425b00, 0xc025f00d, 0x035b0095, -0x25b00d6c, 0x5f009640, 0x30095c43, 0x0094c025, 0x017c0273, 0x5ec005d0, -0x00000620, 0x00000000, 0x200f0812, 0x80dc0233, 0x8dd42376, 0xdd023750, -0x50232420, 0x083f600e, 0x037420dd, 0x3c608cc0, 0xf400e10a, 0x400fd003, -0x087c003f, 0x4bc001d0, 0x00000c00, 0x00000000, 0x06270810, 0x020c058f, -0x64c29930, 0x4e008f00, 0xc0093002, 0x40870860, 0x0930020c, 0x832020c0, -0x31060c00, 0x0027c019, 0x063c009f, 0x43c00930, 0x00000c20, 0x00000000, -0x00260001, 0x0244049d, 0x64e0293c, 0x6e009f02, 0xc129b002, 0x009b0266, -0x09b0026c, 0x9b04a4c0, 0xb0266c12, 0x00274099, 0x2274009d, 0x07400910, -0x00000800, 0x00000000, 0x00248018, 0x82c600fd, 0x2e500b90, 0xc450bd20, -0x400b1002, 0x00b5002c, 0x0b1002c4, 0xb1002c40, 0x9002c400, 0x002f400b, -0x027480b9, 0x63400910, 0x00000200, 0x00000000, 0x00282010, 0x0a8508ad, -0xa8402e18, 0xa422a500, 0x402a100a, 0x02a100a8, 0x2a900aa4, 0xa920aa44, -0x900aa402, 0x00ab482a, 0x023480ad, 0x43482814, 0x000000a0, 0x00000000, -0x0006b01d, 0x0004021d, 0x12400090, 0x04000d00, 0x40001000, 0x00050000, -0x0130000c, 0x030000c0, 0xb0000c00, 0x0003c000, 0x017c003f, 0x77c20130, -0x00000a80, 0x00000000, 0x00a79911, 0x0a7c269f, 0xa7c029f0, 0x7c029f00, -0xd029f40a, 0x029f10a7, 0x29f00a78, 0x9f10a5d4, 0xf00a7e02, 0x00a7c029, -0x0a7c029f, 0x67c029f8, 0x00000e20, 0x00000000, 0x016fa018, 0x1e4c0db7, -0x64c05930, 0x7c079301, 0xc059301e, 0x05930167, 0x79f0164c, 0x9f8167c0, -0xf0164c05, 0x0167c059, 0x02cc0593, 0x60d06b78, 0x00000e00, 0x00000000, -0x1287081c, 0x28400e1d, 0x8540a100, 0x5c0a1502, 0x40a15028, 0x0a152287, -0xa1d02844, 0x1d028448, 0xd0005e0a, 0x00074001, 0x08440031, 0x704041d8, -0x00000c20, 0x00000000, 0x0023a012, 0x12a5048d, 0x28410a14, 0xb404a144, -0x410a1012, 0x10a5042b, 0x4a504295, 0xad042a40, 0x904a9410, 0x04ab412a, -0x0a0502a1, 0x40406850, 0x00000e80, 0x00000000, 0x0025a818, 0x0a44009d, -0x2d440b18, 0xf400b500, 0x404b5002, 0x00b5012e, 0x0bd202d4, 0xbd012c40, -0xd002d400, 0x002f400b, 0x824000b1, 0x604009d8, 0x00000620, 0x00000000, -0x00278805, 0x026c809f, 0x24c40914, 0x7c009300, 0x40093002, 0x00970027, -0x0970025c, 0x9d0026c0, 0xb0025c00, 0x0027c009, 0x024c0093, 0x14c00970, -0x00000e20, 0x00000000, 0x02658016, 0x167c808f, 0x23c058f2, 0x58009f00, -0xc009f002, 0x009f0027, 0x09f0026c, 0x9f0026c1, 0xf0027c00, 0x6027c009, -0x427c008f, 0x53c008f0, 0x00000600, 0x00000000, 0x00050814, 0x088c0013, -0x0cc00338, 0x8c083340, 0xc0033000, 0x00230008, 0x023010fc, 0x23200fc8, -0x2380ec00, 0x0008c203, 0x007c003f, 0x50c601f0, 0x00000420, 0x00000000, -0x01148014, 0x11440071, 0x16c00530, 0x44015100, 0x40051001, 0x00510014, -0x05100174, 0x51001740, 0x10015400, 0x00144005, 0x11e4005d, 0x504027d0, -0x00000200, 0x00000000, 0xc0622014, 0x4f0400c1, 0x30500c90, 0x0500c120, -0x500c144b, 0x80c954b0, 0x0c1e0334, 0xc1403340, 0x174b0580, 0x04b0512c, -0x073412c9, 0x504138d0, 0x00000a00, 0x00000000, 0x08620005, 0x00848021, -0x0a400010, 0x86012100, 0x40121240, 0x02291008, 0x02180434, 0x21104b40, -0x11048400, 0x00084012, 0x03a4002d, 0x144022d0, 0x00000200, 0x00000000, -0x006a1015, 0x07cd01c3, 0x40c012b6, 0x0c014320, 0xc2143007, 0x01eb0060, -0x1e3007bc, 0x430053c0, 0x30860e81, 0x0078ca18, 0x87bc01ef, 0x54d01bf1, -0x00000040, 0x00000000, 0x0025b810, 0x007400dd, 0x37400df1, 0x7c609f08, -0xc009f080, 0x20171015, 0x01f0807c, 0x9f0827c0, 0xf0015c00, 0x0007c805, -0x807c001f, 0x43c001f0, 0x00000660, 0x00000000, 0x006fa000, 0x04fc01f3, -0x7cc09f30, 0xfe09bf00, 0xc01f3004, 0x49bf005c, 0x17f005fc, 0xff007fc0, -0xf005f801, 0x025f0417, 0x07fc017f, 0x00c017f0, 0x00000e00, 0x00000000, -0x06298815, 0x03fc0020, 0x0905c210, 0xb40c6d02, 0xc0825213, 0x486d222b, -0x8ad062b0, 0x2d220b40, 0xd022b408, 0x0a2a448a, 0x23b480af, 0x56d006d2, -0x00000620, 0x00000000, 0x00290000, 0x00b400e9, 0x08000010, 0xa6402d00, -0x40065000, 0x00ad0008, 0x06d00190, 0x6d001b40, 0xd000b400, 0x181b4002, -0x03b4016d, 0x004004d0, 0x00000400, 0x00000000, 0x50e32804, 0x03540cc9, -0xb1443c10, 0x3403cd82, 0x4038510f, 0x014d02f3, 0x28d00e24, 0x8d02e340, -0xc0af340b, 0x026208bc, 0x00308a85, 0x124204d0, 0x00000c20, 0x00000000, -0x02e7a815, 0x177422db, 0x34401d34, 0x6413df00, 0xc139704f, 0x115d00b4, -0xf9f0067c, 0x9f00a7c0, 0xd00b7402, 0x00a7002d, 0x0330009d, 0x54c00dd0, -0x00000620, 0x00000000, 0x00218001, 0x407c0217, 0x03c100f0, 0x7c041f14, -0xc045e010, 0x129f0105, 0x04f0413c, 0x5f0117c0, 0xf0107c04, 0x0116c041, -0x037c104f, 0x05c005f0, 0x00000c00, 0x00000000, 0x00e50880, 0x03ec0133, -0x0cc00330, 0x0c006300, 0xc0003003, 0x00630028, 0x0b300ecc, 0x2380c8c0, -0x30028c03, 0x0028c00a, 0x03cc00b3, 0x03c00f30, 0x00000c22, 0x00000000, -0x00260081, 0x00440b14, 0x36c20d40, 0x44009100, 0x420d0000, 0x12990014, -0x05100564, 0xd1007442, 0x10814421, 0x08144205, 0x60448051, 0x074015f2, -0x00000802, 0x00000000, 0x0024a001, 0x006482c0, 0x34400d10, 0x44209100, -0x40891000, 0x001d0014, 0x81100064, 0x91002440, 0x10016400, 0x02044005, -0x00640811, 0x07404510, 0x00000200, 0x00000000, 0x80202010, 0x03146001, -0x02500014, 0x04604140, 0x40041003, 0x00c94020, 0x0c140324, 0x41401040, -0x14020500, 0x40305008, 0x000500c1, 0x43400490, 0x00000080, 0x00000000, -0x4026b000, 0x006c8013, 0x04c00134, 0x4d001300, 0xd0013400, 0x00170004, -0x0130004d, 0x110004d0, 0x38806c00, 0x0004e201, 0x004e8013, 0x03c40530, -0x00000ac0, 0x00000000, 0x003fb805, 0x03ee003e, 0x3fc00ff0, 0xfc00ff00, -0xc00fc003, 0x00f7003f, 0x0ff003dc, 0xfc003fc0, 0xf803fe00, 0x003fe00f, -0x03fe00ff, 0x17c007f8, 0x00000e60, 0x00000000, 0x050da003, 0x60bc20ff, -0x36c103b0, 0xfc881307, 0xc801f273, 0x18d30337, 0x0f700bcc, 0xf3023fc0, -0x3003c400, 0x003dc00f, 0x02cc00f3, 0x0c400bf0, 0x00000e00, 0x00000000, -0x00870801, 0x1b7400c7, 0xbf402110, 0x74041108, 0x4005d11b, 0x02f52307, -0x4f100bc4, 0x11003f40, 0xf0034000, 0x02bc420f, 0x83450055, 0x054009d0, -0x00000c20, 0x00000000, 0x00032011, 0x003414cd, 0x31614012, 0x34040500, -0x40005013, 0x00c10103, 0x0c949b14, 0x11413349, 0x91030500, 0x0030400c, -0x03260041, 0x465608d0, 0x00000e80, 0x00000000, 0x8085a803, 0x537400d5, -0x33606190, 0x760a9100, 0x4805d807, 0x00c11037, 0x0d908347, 0x91003744, -0xd1034674, 0x0034600d, 0x136400d5, 0x0f4009d9, 0x00000620, 0x00000000, -0x00e78802, 0x007c40df, 0x36c23db4, 0x7c031510, 0x81b97103, 0x00d14037, -0x0df20346, 0x030037c0, 0xb0034801, 0x0030d40c, 0x076c1a93, 0x02c009f0, -0x00000e20, 0x00000000, 0x013d8007, 0x06bc00ff, 0x36401f72, 0x6c013f40, -0xc80ff083, 0x00ff000f, 0x0f7003bc, 0x7f0037c0, 0xb003ae81, 0x003ec20f, -0x03dc003f, 0x1dc008f0, 0x00000602, 0x00000000, 0x00250802, 0x104c00d7, -0x35c12db0, 0x5d005300, 0xc089b103, 0x00da0007, 0x0db0037c, 0xd74032c0, -0x34037c02, 0x0234c00d, 0x034c008f, 0x08d019f0, 0x00000420, 0x00000000, -0x0034a013, 0x0a440add, 0x3dc03d10, 0x4400d100, 0x401d1903, 0x00fd0037, -0x0f1203f4, 0xdb003c42, 0x1003f400, 0x007c19af, 0x3f4481dd, 0x4c400bd0, -0x00000200, 0x00000000, 0x8012a007, 0x000409c1, 0x33608098, 0x2600c100, -0x42701603, 0x80cd1035, 0x0cd08324, 0x05003240, 0x18033625, 0x0832180c, -0x0f2401cd, 0x0c4008d0, 0x00000a00, 0x00000000, 0x80488004, 0x05a501ed, -0x79405a10, 0xa401e100, 0x401a5807, 0x41ed034b, 0xdc002734, 0xed527840, -0x1137b415, 0x007a009c, 0x07a401cd, 0x08409ad0, 0x00000200, 0x00000000, -0x01301012, 0x000c00c3, 0x71c614b0, 0x2c251340, 0xc0501007, 0x45cf0843, -0x5ce1173c, 0x470372c0, 0x32177c0d, 0x0032d00c, 0x232c104f, 0x58d008f0, -0x00000040, 0x00000000, 0x002db802, 0x01dc80fe, 0x37e00db2, 0x5c08bf02, -0xc0893023, 0x08df0037, 0x0fd023fc, 0xdb0a37c0, 0xf0037c00, 0x00bdc02f, -0x03dc02fd, 0x0bc00bf0, 0x00000660, 0x00000000, 0x8017a015, 0x037c20df, -0xb7c001f0, 0x4c01cb01, 0xe0057003, 0x40d22034, 0x2d00234c, 0x9305b4c3, -0x74037800, 0x0334c04d, 0x4b4c00db, 0x54c099f0, 0x00000e00, 0x00000000, -0x00198812, 0x039c80ed, 0x39c00a70, 0xce80ed04, 0x040e100b, 0x0ce00808, -0x2e102384, 0xe1003fc0, 0x500bcc00, 0x0132c04c, 0x038500f1, 0x59400ad0, -0x00000620, 0x00000000, 0x00790003, 0x479441ed, 0x796016d8, 0x84017502, -0x60165007, 0x09c91040, 0x5c101724, 0xe10a7844, 0x1017b041, 0x007a409e, -0x0f8541a9, 0x0c4048d0, 0x00000402, 0x00000000, 0x00b32812, 0x075400dd, -0x3148fc5a, 0x4408cd00, 0x603c1003, 0x40c9c034, 0x0c100324, 0xc1203740, -0x51030413, 0x0032420c, 0x030400d9, 0x494008d1, 0x00000c20, 0x00000000, -0x009da817, 0x09dc005f, 0x15c007d0, 0xcc017e08, 0xc0467000, 0x005b001c, -0x053001ec, 0x62001462, 0x10017c07, 0x0016c005, 0x054c0c5b, 0x5ce204f0, -0x00000620, 0x00000000, 0x10070012, 0x405c001f, 0x05c00170, 0x5c021f00, -0xc001f800, 0x00170007, 0x01f0801c, 0x1f0006e8, 0xf0006c00, 0x0007c001, -0x087d0217, 0x4bc001f0, 0x00000c00, 0x00000000, 0x14230810, 0x024c009f, -0x25c04970, 0x6c219f00, 0x0109b004, 0x009300a5, 0x08700244, 0x9b1024c0, -0x30026c08, 0x0220c008, 0x074800d3, 0x40c009f0, 0x00000c20, 0x00000000, -0x00262201, 0x0a450091, 0x24482910, 0x74039d00, 0xc0495026, 0x80915066, -0x09100244, 0x91482540, 0x14025403, 0x20645009, 0x1a441a9b, 0x044019d0, -0x00000800, 0x00000000, 0x0024a018, 0x0a448191, 0x24402810, 0x54049d10, -0x40091002, 0x00810424, 0x09500254, 0x91002440, 0x10020402, 0x40244089, -0x12550091, 0x604419d2, 0x00000200, 0x00000000, 0x40202010, 0x22040881, -0x20508814, 0x34088982, 0x40095022, 0x28810222, 0x88122215, 0x81022140, -0x100a1400, 0x2320600c, 0x02140889, 0x404088d0, 0x00000080, 0x00000000, -0x2506b01d, 0x58442217, 0x85c16170, 0x5c025f05, 0xc0013058, 0x16130584, -0x2142585c, 0x1b0584e0, 0x32004c80, 0x00c4d001, 0x005d1613, 0x74c021f0, -0x00000ac0, 0x00000000, 0x002fb819, 0x92fc049f, 0x27c04bf8, 0xfc04bf11, -0xc20af110, 0x049f012e, 0x69e0126c, 0xbf012780, 0xfc0a7c00, 0x4327c029, -0x026c0496, 0x67c06bf0, 0x00000e60, 0x00000000, 0x80379018, 0x02fc02bf, -0x24418b30, 0xcc00bf00, 0xc80b10c7, 0x0293002d, 0x8990326c, 0xbb0124c1, -0x30e27400, 0x40a0c04b, 0x028d06b3, 0x64c143f0, 0x00000e00, 0x00000000, -0x1007001c, 0x0874001d, 0x04d02114, 0x04000d11, 0x08015008, 0x0a114000, -0x01140804, 0x55008540, 0xb4006440, 0x03854021, 0x00440653, 0x704031d0, -0x00000c22, 0x00000000, 0x00a3a010, 0x0a34008d, 0xa24048d0, 0x46009d24, -0x40090202, 0x80918021, 0x48101a64, 0x89872040, 0x91123620, 0x10204888, -0x02240289, 0x405008d0, 0x00000e80, 0x00000000, 0x20a5a818, 0x0274009d, -0x244049d2, 0x44009d00, 0x46091802, 0x80910020, 0x08100264, 0x95002564, -0x94826400, 0x20254009, 0x12640491, 0x604209d0, 0x00000620, 0x00000000, -0x0027a805, 0x027c809d, 0x26c009f4, 0x45188d00, 0xe0081206, 0x00919125, -0x0920026e, 0x9b2024e0, 0xb2027c03, 0x0024d009, 0x026c029b, 0x14c009f0, -0x00000e20, 0x00000000, 0x00258014, 0x027c009f, 0x27c00930, 0x5c019f00, -0xc009f512, 0x009f0127, 0x0970025e, 0x9f5023c0, 0xf0022c44, 0x0033c109, -0x425c009f, 0x53c000f0, 0x00000600, 0x00000000, 0x00050814, 0x005c041f, -0x04c04170, 0x6c821220, 0xc001b000, 0x001b1007, 0x0132005c, 0x1f000480, -0x32004c86, 0x0004d000, 0x004c0213, 0x50c00130, 0x00000420, 0x00000000, -0x0014a014, 0x05f4117d, 0x144067d0, 0x8c807110, 0x40171209, 0x0051011f, -0x05100104, 0x75001546, 0xf0014540, 0x04555007, 0x09c48871, 0x52c00110, -0x00000200, 0x00000000, 0x0032a014, 0x077401cd, 0x30502d10, 0x2409c180, -0x420cd81b, 0x00d10133, 0x0c510306, 0xc5103260, 0x10032402, 0x806242bc, -0x0b040a91, 0x50400c10, 0x00000a00, 0x00000000, 0x00388005, 0x41b4006d, -0x7a400cd8, 0xa400e101, 0x402e1103, 0x04e1003b, 0x8e508384, 0xf1013340, -0x9013a411, 0x002b400c, 0x838400a1, 0x1640ac10, 0x00000200, 0x00000000, -0x00780015, 0x079c21af, 0x7ce41672, 0xac812340, 0xc416f106, 0x09f1404b, -0x5c72078c, 0xe723fac1, 0x3017e401, 0x407ac81e, 0x038d01f3, 0x54c05e30, -0x00000040, 0x00000000, 0x0035a810, 0x817c405f, 0xb56209f8, 0x5c801f07, -0xc0057202, 0x0ed50007, 0x6d900b78, 0xc50035c0, 0xf45b5c00, 0x24b5c00d, -0x037d009f, 0x43c00df0, 0x00000660, 0x00000000, 0x007fa000, 0x26fa81f3, -0x7cc09b32, 0xdc019202, 0xc09e3015, 0xc9f3004d, 0x1d306f4c, 0xf3007dc8, -0xb067cc01, 0x007cd01f, 0x078c01ff, 0x0bc81f30, 0x00000e20, 0x00000000, -0x00398815, 0x209c022b, 0x7ac054b0, 0x0441bb02, 0x40da116d, 0x41f00048, -0x1d502744, 0x81027040, 0x50172c01, 0x003ac006, 0x2bac04fd, 0x57408eb0, -0x00000620, 0x00000000, 0x00310000, 0x423408a1, 0x3a400010, 0x94006c20, -0x49c61000, 0x00e1043b, 0x0e9003a5, 0x61813948, 0x10138430, 0x0038400a, -0x43c4006d, 0x23400e10, 0x00000400, 0x00000000, 0xa0732804, 0x00144009, -0x32402091, 0x04024000, 0x40001100, 0x00c10072, 0x0cc20324, 0x01403060, -0xd2032600, 0x20325200, 0x0724100d, 0x1b400c90, 0x00000c00, 0x00000000, -0x0435a815, 0x0a7c00d1, 0x3cc02d30, 0x54885c40, 0x40193104, 0x40f34077, -0x0fbd03ec, 0xd1103d40, 0xb003cc00, 0x0024c00c, 0x870401df, 0x57800d30, -0x00000600, 0x00000000, 0x00370001, 0x1a5c00df, 0x33c24df0, 0x7cc05f10, -0xc041f808, 0x00cf2031, 0x0d70035c, 0x5f0033c2, 0x72037c86, 0x0037c029, -0x037c01df, 0x27c00df0, 0x00000c00, 0x00000000, 0x003f0880, 0x20fc00b7, -0x3fc007f0, 0xcd00b300, 0x821bf801, 0x00f70406, 0x0ef003cc, 0xb7003ec0, -0x2003fc03, 0x003cc055, 0x07cd00f3, 0x04c03e30, 0x00000c00, 0x00000000, -0x08362081, 0x0c7400dd, 0x374009d0, 0x44469500, 0x4031d889, 0x80d14007, -0x0dd20354, 0x1b403448, 0x50037006, 0x00354021, 0x0e540185, 0x84501d50, -0x00000802, 0x00000000, 0x0034a001, 0x4354005d, 0x37420990, 0x44200980, -0x414dd012, 0x00d10004, 0x0dd00346, 0xd5003648, 0x50032400, 0x0230402d, -0x1345c1d1, 0x04400d10, 0x00000220, 0x00000000, 0x00302010, 0x0334000d, -0x3340c4d0, 0x04040143, 0x4880d012, 0x2cc56803, 0x0cd81b16, 0x0908b002, -0x59133010, 0x00314000, 0x011400c5, 0x40400c50, 0x00000080, 0x00000000, -0x0036b000, 0x015c0017, 0x7bc051f0, 0x0c07db00, 0xc11dd02f, 0x01f302f6, -0xdff217cc, 0x1781fac9, 0x703fbc2f, 0x0034c001, 0x034c0053, 0x04c00d30, -0x00000ac0, 0x00000000, 0x003fb805, 0x01fc403f, 0x77c0d1f0, 0x7c1dff8b, -0xc051f19f, 0x0ddb08f7, 0x1ff01ffc, 0xcf09f7c0, 0xf0277c05, 0x003fc00f, -0x02fc803f, 0x17c00ff0, 0x00000e60, 0x00000000, 0x002f8003, 0x18ec00ff, -0x0fc14330, 0xfc08ff00, 0xc00fb003, 0x00f3203c, 0x0f3003ec, 0xf3003fc0, -0x7003cc00, 0x183cc00f, 0x03dc00fb, 0x0cc00f30, 0x00000e00, 0x00000000, -0x08270801, 0x314450dd, 0x34402110, 0x74041d00, 0x40011100, 0x00114004, -0x01140045, 0x11400744, 0x11804500, 0x00045001, 0x00450011, 0x04400f10, -0x00000c20, 0x00000000, 0x0023a011, 0x002004cd, 0x02400050, 0x34044d00, -0x400cd000, 0x00890021, 0x08500214, 0xc1002340, 0x14021400, 0x40304a08, -0x012400c5, 0x45640c14, 0x00000e80, 0x00000000, 0x2425a803, 0x084400dd, -0x14400154, 0x74009d00, 0x60015303, 0x22490010, 0x05504114, 0x01341340, -0x52011420, 0x00004804, 0x8224a005, 0x0d400c12, 0x00000620, 0x00000000, -0x0067a802, 0x006c00df, 0x46c8dd70, 0x7c01df11, 0xd015f003, 0x22db0cb5, -0x05700b7c, 0x5310b7c8, 0x30015c01, 0x0004c005, 0x276c129f, 0x09500d30, -0x00000e20, 0x00000000, 0x016d8007, 0x237c20cf, 0x7ec00bb0, 0x7c081f12, -0xc489b000, 0x00172007, 0x09b00064, 0x9f1007c9, 0xb0426c08, 0x0437c509, -0x044c005b, 0x1ec10ff0, 0x00000600, 0x00000000, 0x00650802, 0x000c40df, -0x07c00530, 0x4c005304, 0xc0453000, 0x129304a4, 0x0130127c, 0x530124c2, -0x30004c00, 0x0804c481, 0x014c0293, 0x0ac08d30, 0x00000420, 0x00000000, -0x10a4a013, 0x464404fd, 0x17400110, 0x6c119140, 0xc109b003, 0x025b0456, -0x3db0156c, 0x9b0496c1, 0xb0136c09, 0x04f6c02d, 0x066c045b, 0x4c422fb0, -0x00000200, 0x00000000, 0x0102a007, 0x020407cd, 0x02400191, 0x64008102, -0x04391003, 0x0a490092, 0x0c900904, 0x8900d040, 0x10032401, 0x0072400c, -0x4a341141, 0x1c400c10, 0x00000a00, 0x00000000, 0x00488004, 0x058501ed, -0x6b621698, 0xa6016180, 0x60169824, 0x21a9806a, 0x1298a6a6, 0x69826a60, -0x9804a609, 0x024a6092, 0xc5a409a9, 0x10401c90, 0x00000200, 0x00000000, -0x00001012, 0x230420cd, 0x27400894, 0x24000102, 0x40081020, 0x04091002, -0x08900014, 0x89000040, 0x30022c10, 0x0032c008, 0x103c0043, 0x48d08c30, -0x00000040, 0x00000000, 0x000db802, 0x01fd00ff, 0x2fc00f70, 0xfc00ff02, -0xc087f023, 0x00ff023f, 0x07f003fc, 0x7f0037c0, 0xf001fc00, 0x000fc007, -0x07fc00bf, 0x09c08ff0, 0x00000660, 0x00000000, 0x0007a015, 0x824d00df, -0x16c01df1, 0x6c019f20, 0xc0013007, 0x015b0014, 0x1530054c, 0x1b0856c0, -0x30054c41, 0x0044c015, 0x064c0113, 0x57c04d30, 0x00000e00, 0x00000000, -0x20098812, 0x038402ed, 0x38500fd0, 0x14004d00, 0x400c5000, 0x008d0029, -0x08500214, 0xc5002140, 0x50021400, 0x00314008, 0x011400c5, 0x4b092e50, -0x00000620, 0x00000000, 0x00690003, 0x078405ed, 0x79401ed0, 0x84012d80, -0x60125004, 0x012d0048, 0x12500484, 0x25004840, 0x10049401, 0x00494012, -0x04840125, 0x0f025e10, 0x00000400, 0x00000000, 0x00332812, 0x0b4400dd, -0x31402cd0, 0x1400cd00, 0x640c5003, 0x00cd0031, 0x0c500314, 0xc5083140, -0x50031400, 0x1071400c, 0x031601c5, 0x4b400c50, 0x00000c20, 0x00000000, -0x009da817, 0x81cc005f, 0x1fc137f0, 0x6c005f01, 0xc8857001, 0x005d0014, -0x8570014c, 0x5f0816c0, 0x30215c08, 0x0615c085, 0x01cc1057, 0x5fc60530, -0x00000620, 0x00000000, 0x20c70012, 0x407c021f, 0x064101f0, 0xdc003f00, -0xc003d000, 0x003f000b, 0x03e000fc, 0x3f008fc0, 0xf008fc80, 0x000fc003, -0x00fc023f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x00270810, 0x064c009f, -0x27c00970, 0x7c019f00, 0xc049f102, 0x00932024, 0x19f0027c, 0x9f0067c0, -0xf0267c00, 0x00a7c029, 0x1674089f, 0x43c409f2, 0x00000c20, 0x00000000, -0x04a62001, 0x0644079d, 0x27400910, 0x74089d00, 0x5129d002, 0x1b9b06e4, -0x19d06e74, 0x9d00a641, 0xd0027402, 0x00274009, 0x0a74249d, 0x0740a9d0, -0x00000800, 0x00000000, 0x0024a018, 0x9244889d, 0x27400950, 0xf6009d00, -0x400ad002, 0x00b1002c, 0x4bd002f4, 0xb901af40, 0xd042f418, 0x002f400b, -0x42e400bd, 0x634029d0, 0x00000200, 0x00000000, 0x00202010, 0x2204488d, -0x33408812, 0xb488ad02, 0x402ad0a2, 0x42a900a8, 0x2ad00ab4, 0xad30aa40, -0xd00ab402, 0x00bb402e, 0x0ab402ad, 0x434028d0, 0x00000080, 0x00000000, -0x0006b01d, 0x584d020f, 0x87c56150, 0x7c021f05, 0xc001f008, 0x00130004, -0x01f0007c, 0x1f0007c0, 0xf0007c00, 0x0007c001, 0x00fc001f, 0x77c001f0, -0x00000ac0, 0x00000000, 0x002fb819, 0x12fc069f, 0x2f404bd0, 0x7c869d01, -0x4429d01a, 0x029d00a7, 0x29d00a74, 0x9d00a740, 0xd00a7402, 0x00a74029, -0x0a7c829f, 0x67c029f0, 0x00000e60, 0x00000000, 0x003fa018, 0x52cc04ba, -0x2c0589f2, 0xfc049302, 0xc069f012, 0x849f1024, 0x29f0125c, 0x9f01a4c0, -0xf01a7c06, 0x0427c029, 0x027c549f, 0x60c049f0, 0x00000e00, 0x00000000, -0x0007081c, 0x0844061d, 0x844001d0, 0x74001102, 0x4061d118, 0x161d2584, -0x61d05074, 0x1d018440, 0xd0187406, 0x00074061, 0x5874161d, 0x704143d0, -0x00000c20, 0x00000000, 0x0063a010, 0xc2041289, 0x204048d1, 0x36568101, -0x402a5062, 0x08ad00a9, 0x6ad00ab4, 0xad032850, 0xd00ab408, 0x042b402a, -0x0ab400ad, 0x40402ad0, 0x00000e80, 0x00000000, 0x0025a818, 0x0245009d, -0x240609d0, 0x74009100, 0x4009d002, 0xa0bd002d, 0x0ed002f4, 0xbd002c40, -0xd002f480, 0x002f400b, 0x03f400fd, 0x60400bd0, 0x00000620, 0x00000000, -0x02e7a805, 0x024c009b, 0x249049f0, 0x7c109341, 0xd009706a, 0x289f2025, -0x19f0225c, 0x9f1224c0, 0xf0067ca0, 0x0027c019, 0x4274009f, 0x14d009f0, -0x00000e20, 0x00000000, 0x00658014, 0x127c008f, 0x23c208f0, 0x7c00df00, -0xc009f002, 0x009f10e6, 0x49f0027c, 0x9f0427c2, 0xf0127c00, 0x0027c049, -0x027c809f, 0x53c009f0, 0x00000600, 0x00000000, 0x03050814, 0x104c201f, -0x06c001f0, 0x7c201f00, 0xc0037008, 0x003f000f, 0x83f000fc, 0x3f020fc2, -0xf000fc00, 0x010fc003, 0x00fc183f, 0x505003f0, 0x00000420, 0x00000000, -0x005ca014, 0x09c5007d, 0x5c4005d0, 0x74015d04, 0x00151001, 0x035d0117, -0x05d00574, 0x5d001740, 0xd0097403, 0x001740a5, 0x1d74035d, 0x504007d0, -0x00000200, 0x00000000, 0x0012a014, 0x030510cd, 0x33400cd0, 0x34004d00, -0x401f5002, 0x0ded04bb, 0x2ed013b4, 0xed007b41, 0xd063b413, 0x02bb408e, -0x1bb401ed, 0x50409fd0, 0x00000a00, 0x00000000, 0x00088005, 0x038400cd, -0x39404ed1, 0xb4426d00, 0x442e1206, 0x00ed003b, 0x0ed043b4, 0xed203b40, -0xd003b430, 0x003b400e, 0x03b400ed, 0x14400cd0, 0x00000200, 0x00000000, -0x00581015, 0x078c012f, 0x5bc01ff1, 0xfc016f00, 0xc01e601e, 0x01ef007b, -0x1ef007bc, 0xef007bc0, 0xf007bc01, 0x207bc01e, 0x07bc81ef, 0x54c01ef0, -0x00000040, 0x00000000, 0x0005b810, 0x027c00df, 0x36c08df0, 0x7c121f00, -0xc001f002, 0x001f0007, 0x01f0007c, 0x5f0007c0, 0xf0007c00, 0x0007c801, -0x007c001f, 0x43c601f0, 0x00000660, 0x00000000, 0x004ba000, 0x07ec01f3, -0x7cc21f30, 0x8c097340, 0xc01f3206, 0x01ff207f, 0x1ff007fc, 0xbf007fc0, -0xf227fc01, 0x027fc09f, 0x07fc01ff, 0x03401ff0, 0x00000e00, 0x00000000, -0x22098815, 0x83844061, 0x28420eb0, 0x84006100, 0x400e1402, 0x00ed023b, -0x8ed003b4, 0xad003b41, 0xd003b408, 0x083b402e, 0x23a400ed, 0x57400ed0, -0x00000620, 0x00000000, 0x040d0000, 0x03a40021, 0x18400c10, 0x80406100, -0x400a1002, 0x00ed003b, 0x0ed003b4, 0xad003b40, 0xd103b400, 0x103b480e, -0x43b400ed, 0x03401ed0, 0x00000400, 0x00000000, 0x00232804, 0x32042041, -0x60421d90, 0x44070110, 0x40f51066, 0x111d03c7, 0x01d04474, 0x1d01c641, -0xd0087411, 0x01874071, 0x18641b1d, 0x134000d0, 0x00000c20, 0x00000000, -0x0005a815, 0x036800d3, 0xe4c05f30, 0xcd005200, 0xc01d300e, 0x40df2077, -0x0df10b7c, 0xdf0037c4, 0xf1037c02, 0x0137c00d, 0x0b7801df, 0x57c00df0, -0x00000620, 0x00000000, 0x00070001, 0x037c009f, 0x13c00df0, 0x7c085f02, -0xc005f002, 0x0adf00b7, 0x2df02b7c, 0xdf0237c0, 0xf0bb7c0a, 0x00b7c08d, -0x0b6cc0df, 0x07c00df0, 0x00000c00, 0x00000000, 0x00cf0880, 0x03dd0903, -0x0dc00ff0, 0xfc007304, 0xc00f7002, 0x05f3013c, 0x4f3027cc, 0xf3003cc0, -0x3007cc00, 0x003cc00f, 0x23cc03f3, 0x03c00f30, 0x00000c22, 0x00000000, -0x00422081, 0x02440191, 0x55400dd0, 0x74081102, 0x40691002, 0x031100c4, -0x21101c44, 0x5100c440, 0x10044446, 0x02044011, 0x88442211, 0x07409111, -0x00000802, 0x00000000, 0x0004a001, 0x895400d1, 0x25420dd0, 0x74001100, -0x400d5002, 0x02110c04, 0x01100044, 0x11028440, 0x12504400, 0x04044881, -0x00440011, 0x07400910, 0x00000200, 0x00000000, 0x20002010, 0x01040001, -0x40500cd0, 0x34000100, 0x42041002, 0x00010000, 0x00100004, 0x01000048, -0x10000400, 0x00004000, 0x00040001, 0x43400810, 0x00000080, 0x00000000, -0x0006b000, 0x011c0013, 0x01c00df0, 0x7c000340, 0xc0097002, 0x00130004, -0x0131004c, 0x130004c0, 0x32004c00, 0x0004c401, 0x004c0013, 0x03c00930, -0x00000ac0, 0x00000000, 0x002fb805, 0x00fc003f, 0x0fc00ff0, 0xfc003f00, -0xc00ff002, 0x00ff003f, 0x0ff003fc, 0xbf203fc0, 0xf003fc00, 0x003fc00f, -0x03fc00ff, 0x17c007f0, 0x00000e60, 0x00000000, 0x000fa003, 0x10fcc433, -0x35c001b0, 0x7c5cff07, 0xc04d7272, 0x00d32337, 0xc33070cc, 0xdb40b4c1, -0xf0137c08, 0x003dc003, 0x01c8003f, 0x0cc00bf0, 0x00000e00, 0x00000000, -0x43170801, 0x5b741201, 0x3c448510, 0xf406fd10, 0x41ec041a, 0x06f103b7, -0x21500a44, 0xd5103d40, 0xd0237462, 0x00334809, 0x0144005d, 0x045009d0, -0x00000c20, 0x00000000, 0x0423a011, 0x20140c81, 0x30400810, 0x5444cc20, -0x400c0082, 0x12c10137, 0x4c100004, 0xc1113144, 0xd0833406, 0x08334000, -0x0324000d, 0x444209d0, 0x00000e80, 0x00000000, 0x0035a803, 0x0b341891, -0x34480512, 0x7400dd18, 0x400d1402, 0x00d10077, 0x8d500244, 0xd5003548, -0xd0037400, 0x00374009, 0x2b64039d, 0x0c4009d0, 0x00000620, 0x00000000, -0x0287a802, 0x047c0353, 0x34d011b4, 0x3c80df00, 0xc09d3002, 0x00d30037, -0x1930074d, 0xd35034c0, 0xf0037c20, 0x0035c015, 0x0c6d035f, 0x08c008f0, -0x00000e20, 0x00000000, 0x0c458007, 0x17fc117f, 0x3ec08af2, 0x7c00ff00, -0xc00fb102, 0x00cf083f, 0x0bf027bc, 0xff003bc0, 0xf003fc50, 0x003fe05f, -0x44dc006f, 0x1fc00bf0, 0x00000600, 0x00000000, 0x40850802, 0x405d0313, -0x35f00970, 0x5d00df18, 0xc00d7c02, 0x00d30035, 0x0cf0034c, 0xd34037c0, -0x30037c00, 0x0234c005, 0x025d0213, 0x08c009f0, 0x00000420, 0x00000000, -0x0044a013, 0x1b440011, 0xbc400950, 0xe480fd02, 0x400db802, 0x0af10030, -0x0dd00344, 0xfb103f4a, 0x5003f400, 0x02fd400d, 0x4644651b, 0x4ec00bd0, -0x00000200, 0x00000000, 0x0006a007, 0x0c040201, 0x30400010, 0x24c0cd00, -0x400c9082, 0x80c10031, 0x04d10104, 0xc1003348, 0x50033480, 0x80704000, -0x05042081, 0x1c4008d1, 0x00000a00, 0x00000000, 0x00588004, 0x24040921, -0x7a60d650, 0xa409ed00, 0x405e1036, 0x15e10278, 0x16d007a6, 0xe90a7340, -0x5087b429, 0x0079401a, 0x05810069, 0x12401ad0, 0x00000200, 0x00000000, -0x06a01012, 0x021c08c1, 0x71e09970, 0x1c45df03, 0xc01cd006, 0x01c30371, -0x5cd0150c, 0xc34373c0, 0x70077405, 0x0030e041, 0x021e08d3, 0x48c009f0, -0x00000040, 0x00000000, 0x103db802, 0x02fc28ff, 0x3dcc05f0, 0x5c00ff00, -0xc50ff8a2, 0x8afe0c3b, 0xcdf02358, 0xdf0237c0, 0xf0037c28, 0x003fc00f, -0x02fd60ff, 0x0bc00bf0, 0x00000660, 0x00000000, 0x0037a015, 0x014c00df, -0x34ca0530, 0x4c04df05, 0xc00d3012, 0x02d33037, 0x0d30076d, 0xd30534c2, -0x31034c41, 0x2037c005, 0x004c41df, 0x57c009f0, 0x00000e00, 0x00000000, -0x00398812, 0x01c480ed, 0xb8600f10, 0xc516ed00, 0x400eb02a, 0x06c1213b, -0x0f108314, 0xe1013848, 0x101bc424, 0x103b410e, 0x0084006d, 0x4b402ad0, -0x00000620, 0x00000000, 0x00f90003, 0x078601c5, 0x78411e10, 0x8405cd01, -0x405e1096, 0x81e1187b, 0x1e904784, 0xe1027840, 0x9007840d, 0x027b4012, -0x0c8400cd, 0x0f401ad0, 0x00000400, 0x00000000, 0x00f32812, 0x230402dd, -0x34400d15, 0x0400cd20, 0x400c9002, 0x00c10033, 0x0c104304, 0xc1003040, -0x91030400, 0x2033420c, 0x1004014d, 0x4b4008d0, 0x00000c20, 0x00000000, -0x00dda817, 0x05cd057f, 0x14d42732, 0xcc005f00, 0xc0013001, 0x4053400f, -0x87b301cc, 0x534014c2, 0xb0014c00, 0x1017c805, 0x05cc027f, 0x5fc005f0, -0x00000620, 0x00000000, 0x01070012, 0x807c001f, 0x07c101f0, 0x3c201f00, -0xc001f000, 0x001f0007, 0x01f0005c, 0x1f0003c0, 0x75007c02, 0x0006c081, -0x087c8c1f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x00270810, 0x0a0c109f, -0x64d00930, 0x4c009302, 0xc000b002, 0x00934000, 0x09f0024c, 0x930026ca, -0x71023c02, 0x0267c00d, 0x024c088f, 0x40c008f0, 0x00000c20, 0x00000000, -0x04262001, 0x0a44019d, 0xa5400912, 0x44409150, 0x40091002, 0x00912024, -0x09d00244, 0x91002448, 0x10027403, 0x20274009, 0x1a44419d, 0x054009d0, -0x00000800, 0x00000000, 0x0024a018, 0x42440a9d, 0xa5400910, 0x64408120, -0x40099202, 0x00812024, 0x08d00244, 0x91002640, 0x10027400, 0x20a74209, -0x2264009c, 0x604009d0, 0x00000200, 0x00000000, 0x02202010, 0x2205288d, -0x2151c814, 0x25888100, 0x50881022, 0x08810820, 0x88d02207, 0x81022040, -0x18a23408, 0x15234028, 0x0225088d, 0x414008d0, 0x00000080, 0x00000000, -0x2586b01d, 0x584c361f, 0x05d06131, 0x6c361305, 0xc361b0d8, 0x16130500, -0x61f0584c, 0x434582c1, 0x74587c16, 0x0107c941, 0x006c161f, 0x74c001f0, -0x00000ac0, 0x00000000, 0x012fb819, 0x12fc04bf, 0x27c04bf2, 0xdc049f05, -0xc843f012, 0x849f050f, 0x4bf012fc, 0x9f0127c0, 0xf3127c04, 0x0527c009, -0x02dc04bf, 0x67c16bf0, 0x00000e60, 0x00000000, 0x00af2018, 0x02fc02b3, -0xaec049f0, 0x4c849301, 0x403f3202, 0x02b3007c, 0x69f0024c, 0xb31627c9, -0xf012cc0c, 0x40a6c129, 0x024c12b3, 0x60c14930, 0x00000e00, 0x00000000, -0x0007081c, 0x1874001b, 0x044000d2, 0x6c061141, 0x50201050, 0x04110084, -0x60d2a854, 0x15008740, 0xd008540e, 0x00044061, 0x00440211, 0x70502114, -0x00000c20, 0x00000000, 0x00a32010, 0x4a340281, 0xa24968d0, 0x04988121, -0x4428000a, 0x468124a0, 0x48d04204, 0x81412340, 0xd8720400, 0x80224048, -0x026500c1, 0x40400910, 0x00000e80, 0x00000000, 0x0025a818, 0x8a740299, -0x244029d0, 0x64409100, 0x40191482, 0x00d18064, 0x09d00254, 0x9500274b, -0xd0025400, 0x00244009, 0x02640491, 0x60400910, 0x00000620, 0x00000000, -0x04a7a805, 0x027c0093, 0x26c029f0, 0x4d009300, 0xc0191002, 0x00934064, -0x39f0024c, 0x93002742, 0xd0024c00, 0x0026c009, 0x162c0593, 0x14c00830, -0x00000e20, 0x00000000, 0x00258014, 0x027c199f, 0x27c009f0, 0x5c008f00, -0xc009f002, 0x009f0027, 0x99f0027c, 0x8f4023c0, 0xf0027c80, 0x0033c099, -0x0f5c018f, 0x53c009f0, 0x00000600, 0x00000000, 0x00810814, 0x007c021f, -0x01c220f0, 0x0c001f04, 0xc0013100, 0x001f0004, 0x2130005c, 0x130004c0, -0xb2804400, 0x2407c800, 0x084c021d, 0x50c001f0, 0x00000420, 0x00000000, -0x015ca014, 0x41f4017d, 0x5d4805d0, 0x44005d00, 0xc0051001, 0x057d2017, -0x0510014c, 0x71001440, 0x10014411, 0x04174605, 0x4544005d, 0x514005d0, -0x00000200, 0x00000000, 0x0032a014, 0x1b340bcd, 0x71500cd0, 0x0400cd90, -0x40095803, 0x00dd0024, 0x0c100324, 0xc1003042, 0x10a20400, 0x00b3400c, -0x040400cd, 0x52400cd0, 0x00000a00, 0x00000000, 0x10388005, 0x02b400ad, -0x19404ed0, 0xc400ed04, 0x444a1033, 0x20ed002b, 0x5e100784, 0xc1093848, -0x10060400, 0x001b400e, 0x008480cd, 0x17400cd1, 0x00000200, 0x00000000, -0x00581015, 0x85b421ef, 0x6942bef0, 0x8c81cf20, 0xc05a7207, 0x01cf00e8, -0x7e3407ed, 0xe340fcc0, 0x30068c21, 0x926bc01e, 0x048cc1ef, 0x56c01ef0, -0x00000040, 0x00000000, 0x2035b810, 0x007c001f, 0x07c06df0, 0x3c02df00, -0xc029d483, 0x00df0526, 0x2de07b78, 0x5f05b7c0, 0x73827c20, 0x0137c08d, -0x187d00df, 0x41c08df0, 0x00000660, 0x00000000, 0x006fb000, 0x07f80977, -0x74081ff0, 0xcc1bd302, 0xc1b93007, 0x01df1065, 0xbf4027fc, 0xf3427cc4, -0xa027cc49, 0x405cc09f, 0x0c8c01f3, 0x00c21f30, 0x00000e00, 0x00000000, -0x00298015, 0x01b4086d, 0x78545fd0, 0x8401d102, 0x401b1007, 0x0dad0b68, -0x1d380734, 0xf5007840, 0xd0279449, 0x009ac00f, 0x018400e1, 0x54400e30, -0x00000620, 0x00000000, 0x00090000, 0x22a600a5, 0x0850ced0, 0xc4c0e103, -0x404a9003, 0x04ed0028, 0x0e5023b4, 0xa1023040, 0xd8038400, 0x003a400e, -0x00c40aa1, 0x00400f90, 0x00000400, 0x00000000, 0x00632804, 0x0034400d, -0x00400cd0, 0x0400c100, 0x4088d003, 0x008d1060, 0x0c128334, 0x05503040, -0xd0031400, 0x1032419d, 0x00040091, 0x10400c10, 0x00000c20, 0x00000000, -0x0035a815, 0x0b6c00d7, 0x34c02ff0, 0x8d40f340, 0xd01b8003, 0x00df3469, -0x0f500bfc, 0xd3003cd0, 0xb1034420, 0x1036c80f, 0x014d0092, 0x54c00fb4, -0x00000620, 0x00000000, 0x02070001, 0x327c408f, 0x17c18df0, 0x7c00cf00, -0xc0093003, 0x825f0027, 0x0d70437c, 0xdf0033c0, 0xf0037c20, 0x0097c00d, -0x0a7c01df, 0x07c00df0, 0x00000c00, 0x00000000, 0x005f0880, 0x01cc00f3, -0x74d40ff0, 0xcf00f300, 0xc00b3003, 0x00f3002f, 0x0e1403f4, 0xfb003cc0, -0xf007f420, 0x0076c00f, 0x04c4019f, 0x03c00f30, 0x00000c22, 0x00000000, -0x06060081, 0x00444011, 0x57d00dd1, 0x4480d500, 0x42095003, 0x02510027, -0x0d100374, 0x550036c0, 0xd0037400, 0x00bd400d, 0x101401dd, 0x07400d50, -0x00000802, 0x00000000, 0x8030a001, 0x03440051, 0x22400cd2, 0x4400d501, -0x40095003, 0x40d13027, 0x0d500334, 0xd9403640, 0xc1237400, 0x0236440d, -0x215508dd, 0x07400d10, 0x00000200, 0x00000000, 0x00002010, 0x01040041, -0xa2506cd0, 0x4408c511, 0x00481813, 0x120100a7, 0xcc101334, 0xc5033240, -0xd0033090, 0x0011400c, 0x031500cd, 0x43400c50, 0x00000080, 0x00000000, -0x0016a000, 0x024c0093, 0xc4d07ff2, 0x4401f700, 0x85fb7877, 0x87d340ef, -0x3f7097bc, 0x9b057ec1, 0xf00f784f, 0x2036c00d, 0x005d009f, 0x03c00d30, -0x00000ac0, 0x00000000, 0x200fa805, 0x00fc003f, 0xcfc29df0, 0x3c0dff00, -0xc05bf097, 0x053f026f, 0x1de0e774, 0x1f2177c8, 0xf05f7c25, 0x003fc00f, -0x00fc00bf, 0x17c00ef0, 0x00000e60, 0x00000000, 0x802fa803, 0x23fc08f3, -0x8fc143f0, 0xdc003f00, 0xc00ff053, 0x00f7003c, 0x0fb003cc, 0xf7003ec0, -0x30c5fc00, 0x046cc01b, 0x11ec00f3, 0x0fc00f30, 0x00000e00, 0x00000000, -0x00270801, 0x0a748251, 0x324825d0, 0xa4021700, 0x400fd00b, 0x22e10038, -0x0f108394, 0xc1003042, 0x10894400, 0x009040a5, 0x094400c1, 0x07480f10, -0x00000c20, 0x00000000, 0x0023a011, 0x193486c1, 0x314540d0, 0x14020d01, -0x400cd003, 0x48c50030, 0x0c900314, 0xc5103248, 0x50013400, 0x00224400, -0x212400c1, 0x47400c50, 0x00000e80, 0x00000000, 0x4065a003, 0x01760051, -0x376011d0, 0x64845d00, 0x480dd003, 0x00d12034, 0x0d110354, 0xd1203400, -0x50016420, 0x2016480c, 0x414400d1, 0x0f400d50, 0x00000620, 0x00000000, -0x0037a002, 0x077c0213, 0x05c029f2, 0x5c001f10, 0xd00dd006, 0x00d70034, -0x0db2035c, 0xd71036c8, 0x7403fc00, 0x402ed003, 0x0d6c00d3, 0x0bc00d70, -0x00000e20, 0x00000000, 0x003d8007, 0x22fc0237, 0x3ec005f0, 0xfc007700, -0xc00ff04e, 0x00ff003b, 0x0ef003bc, 0xef203bc0, 0xb003dcc0, 0x0019c00f, -0x253c00ef, 0x1fc00fb6, 0x00000600, 0x00000000, 0x00750002, 0x214c2017, -0x36d02930, 0x4c001300, 0xe10c3402, 0x00c34035, 0x0d30034d, 0xd30037c0, -0xf0030d00, 0x4025c001, 0x094d00d3, 0x0bc00d70, 0x00000420, 0x00000000, -0x00b4a013, 0x09540011, 0x74400150, 0x450f5100, 0x400f1002, 0x11f1047f, -0x1f1047c4, 0xf1117c41, 0xd0474401, 0x0454411d, 0x054411f1, 0x4f420f10, -0x00000200, 0x00000000, 0x0426a807, 0x1024808d, 0x41400090, 0x00000120, -0x400c1006, 0x12c104b1, 0x2c104b04, 0xc104b141, 0xd0490412, 0x04a04120, -0x490412c1, 0x1f400cd1, 0x00000a00, 0x00000000, 0x40788004, 0x043403c1, -0x78401ed0, 0x84012100, 0x411e1026, 0x01e1107b, 0x9c182784, 0xe1027940, -0xd0858401, 0x0259401e, 0x058401e5, 0x12401e90, 0x00000200, 0x00000000, -0x00241012, 0x202c828f, 0x31c6a4b1, 0x0c085304, 0xc00c3042, 0x08c30031, -0x8c34030c, 0xc34031c0, 0xf0010c10, 0x0221d0a1, 0x520c08c3, 0x4bc00cf0, -0x00000040, 0x00000000, 0x003db802, 0x81dc00f5, 0x3dc00f58, 0xfc007f02, -0xc08fb006, 0x00ff003f, 0x8ff8c3fc, 0xff003cc1, 0xf001fc80, 0x0a5ec80f, -0x02fc80fb, 0x0bc02f71, 0x00000660, 0x00000000, 0x0037a015, 0x027c0017, -0x07c009f0, 0x7c125f00, 0xc10d3083, 0x06d701b7, 0x4cb0537c, 0xdb0a74d0, -0xf0036c01, 0x4027c801, 0x017c00d3, 0x57c08df8, 0x00000e00, 0x00000000, -0x00398812, 0x02b480ed, 0x3b400ed0, 0x34006d08, 0x402e7023, 0x16e105b3, -0xce1013b4, 0xe1213840, 0xd0038482, 0x0013400e, 0x01b422e1, 0x4b404ed0, -0x00000620, 0x00000000, 0x00790003, 0x06b40121, 0x7b401ed0, 0xb4016d00, -0x405e900f, 0x01ed007b, 0x1f900734, 0xc9007140, 0xd807a401, 0x106b4012, -0x06b401e1, 0x0f441ed8, 0x00000400, 0x00000000, 0x80732812, 0x0b3400cd, -0x33400cd8, 0x34094d00, 0x400c5007, 0x80c90033, 0x0c100334, 0xc1003148, -0xd2032400, 0x0013402c, 0x023400c1, 0x4b400cd0, 0x00000c20, 0x00000000, -0x0115a817, 0x29f48073, 0x1b4027d0, 0x7c015f00, 0xc005b005, 0x005f0017, -0x07b1017c, 0x5b001dc0, 0xf0096c00, 0x401fc085, 0x01fc0053, 0x5fc005f0, -0x00000620, 0x00000000, 0x00070012, 0x087c011f, 0x07e101f0, 0x7c800f00, -0xc001f080, 0x00170003, 0x01f0803c, 0x1f0006c0, 0xf0485c20, 0x008bc002, -0x087c001f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x00230810, 0x020c0097, -0x67800930, 0x2c00d301, 0xc4093002, 0x00870024, 0x0970024c, 0x9f002480, -0x30027c00, 0x0024c009, 0x025c0083, 0x43c009f0, 0x00000c20, 0x00000000, -0x10660005, 0x0a540291, 0x26c00952, 0x45809100, 0x40095102, 0x00910024, -0x0910027c, 0x9c002440, 0x104a7400, 0x04a54009, 0x4a448095, 0x074009d0, -0x00000800, 0x00000000, 0xc224a01c, 0x03448185, 0x27400910, 0x44009140, -0x40181002, 0x01950064, 0x18d00640, 0x9d006540, 0x10063401, 0x006c401b, -0x06540191, 0x634009d0, 0x00000200, 0x00000000, 0x80e02010, 0x0b140281, -0x26440850, 0x0408c102, 0x5028505a, 0x868180a0, 0x28100a34, 0x8d00a150, -0x140a3602, 0x00a9402a, 0x0a040285, 0x434028d0, 0x00000080, 0x00000000, -0x0006b019, 0x004c0057, 0x87614130, 0x4c161310, 0xc0013110, 0x01170004, -0x0170004c, 0x1f0005c0, 0x30007c00, 0x000cc001, 0x005c0013, 0x77c001f0, -0x00000ac0, 0x00000000, 0x40afb019, 0x0afc02bf, 0x2cc54bf0, 0xfc049f01, -0xc029f002, 0x089f00a7, 0x29f30a6c, 0x9f00a6c0, 0xf00a7c02, 0x08a7c02d, -0x0afc829f, 0x67c029f0, 0x00000e60, 0x00000000, 0x052fa018, 0x32fc02fb, -0xa5c149f0, 0x7c40bf00, 0xc029f05a, 0x069b01a4, 0xc9b0327c, 0x9701a6c0, -0x301e6c14, 0x0164c079, 0x0a4c1293, 0x60d489f2, 0x00000e00, 0x00000000, -0x01870818, 0x385c0011, 0x164021d0, 0x760a1d00, 0x4001d818, 0x04110385, -0xe1103874, 0x11038440, 0xb0184402, 0x15054041, 0x80840411, 0x704821d0, -0x00000c20, 0x00000000, 0x0423a010, 0x02300289, 0x236008d2, 0xb4148d00, -0x406ad012, 0x02a92028, 0x0a900294, 0xa5092a40, 0x1022a410, 0x40aa502a, -0x1e8400a1, 0x404068d0, 0x00000e80, 0x00000000, 0x0025a818, 0x82542099, -0x266009d8, 0x74809d02, 0x400bd003, 0x00b1002d, 0x0b1802f6, 0xb1002c40, -0x9002e400, 0x002f400b, 0x02c400b1, 0x604009d2, 0x00000620, 0x00000000, -0x1027a805, 0x467c009b, 0xe7c689f0, 0x74099f10, 0xc009d002, 0x009b0024, -0x09b0025c, 0x970026c0, 0x30026c00, 0x0026c029, 0x064c2093, 0x14c409f0, -0x00000e20, 0x00000000, 0x00218210, 0x567c1097, 0x35c009f0, 0x7c019f00, -0xe009f002, 0x009f0023, 0x0970023c, 0x8f0023c0, 0xf0025c00, 0x0021c008, -0x927d209f, 0x53c009f0, 0x00000600, 0x00000000, 0x02050814, 0x004c0813, -0x07c001f0, 0xfc201f00, 0xc0023100, 0x0437010f, 0x02b010fc, 0x33010cc0, -0x30008c04, 0x000cc043, 0x00fc0433, 0x50c40130, 0x00000420, 0x00000000, -0x201ca014, 0x01d48171, 0x174805d2, 0x74117d04, 0x48051001, 0x00512017, -0x05108164, 0x57001444, 0x10014400, 0x00144005, 0x01f40051, 0x50400510, -0x00000200, 0x00000000, 0x0072a014, 0x2b0402c9, 0x53600d90, 0x3400cd20, -0x400c5003, 0x00c54033, 0x2c100334, 0xc9403041, 0x10030400, 0x0030500c, -0x033400d1, 0x50440d90, 0x00000a00, 0x00000000, 0x40308005, 0x00b401c1, -0x1b608e90, 0xb400ed00, 0x4802520c, 0x0021000b, 0x021000b4, 0x25000840, -0x10008400, 0x00094002, 0x04b48021, 0x14400e90, 0x00000200, 0x00000000, -0x00681015, 0x078e4163, 0x5bc41ef2, 0xfc016f10, 0xc01a5407, 0x01a70063, -0x1b3406fe, 0xbb806cd0, 0x3404cd01, 0x404cc018, 0x04bc01a3, 0x54d01cb4, -0x00000040, 0x00000000, 0x4025b010, 0x005c805f, 0x87c00df0, 0x7c005f00, -0xc005b000, 0x005f8817, 0x0570016c, 0x5b0017c0, 0xf0037c00, 0x0036c205, -0x037c005f, 0x43c1ed70, 0x00000660, 0x00000000, 0x007fa000, 0x25cc81bb, -0xdcc01fb0, 0xfc01f310, 0xc41f7006, 0x0173105c, 0x17b005cc, 0x73005ac0, -0x3007fc01, 0x007cc217, 0x07ec8173, 0x00c01f31, 0x00000e20, 0x00000000, -0x00298815, 0x00ec9431, 0x1ac20eb0, 0xb000a100, 0x40031001, 0x00bf002c, -0x0a100294, 0xab002940, 0x5000b640, 0x0009c00a, 0x80c420ab, 0x54488e10, -0x00000620, 0x00000000, 0x00290000, 0x038640a1, 0x1e408c10, 0x14006100, -0x400a5022, 0x0029020a, 0x02900024, 0x21000e40, 0x90003400, 0x00084000, -0x04a40821, 0x00400e10, 0x00000400, 0x00000000, 0x00272804, 0x22200301, -0x80601c90, 0x30810000, 0x40041001, 0x80c11032, 0x0c920324, 0xc9203044, -0xd0033480, 0x033148ac, 0x030480c9, 0x10500c10, 0x00000c00, 0x00000000, -0x0075a815, 0x06480093, 0x96423f30, 0x7c049341, 0xd0057001, 0x00d94036, -0x0db1036d, 0xd30036c0, 0xb0037c00, 0x00b4c02d, 0x032c00d3, 0x54c00f34, -0x00000600, 0x00000000, 0x40570001, 0x007c409f, 0x17c0cdf2, 0x7c805f00, -0xc029f00a, 0x401f0001, 0x0170005c, 0x170007c0, 0x70003e00, 0x0005c441, -0x006c001f, 0x07c00df0, 0x00000c00, 0x00000000, 0x00070880, 0x02fc107f, -0x5fc00fb0, 0x8e05bf05, 0xc002b001, 0x00b7002e, 0x087002bc, 0xaf002dc0, -0x3100dc00, 0x0000c00a, 0x00dc0083, 0x00c00d34, 0x00000c02, 0x00000000, -0x04462081, 0xa4740955, 0x06420d53, 0x44005d00, 0x412d100a, 0x00510014, -0x05b20174, 0x5d2016c0, 0x50034400, 0x00354005, 0x034c805b, 0x04400d10, -0x00000822, 0x00000000, 0x0064a001, 0x01340095, 0x07600d11, 0x44028d00, -0x40059000, 0x80550016, 0x05500170, 0x5c001540, 0x10035400, 0x00344805, -0x03540051, 0x05400c51, 0x00000200, 0x00000000, 0x08002010, 0x01340001, -0x03440c50, 0x06000d08, 0x40081003, 0x00810020, 0x08100234, 0x8d102040, -0x50000400, 0x00014008, 0x00440089, 0x40400c10, 0x00000080, 0x00000000, -0x0006b000, 0x037c80d7, 0x07c40d30, 0x44009d00, 0xc001b000, 0x00170006, -0x0150007c, 0x1f200548, 0x30005c20, 0x0004c001, 0x005c0013, 0x00d00f32, -0x00000ac0, 0x00000000, 0x000fb005, 0x03fc007f, 0x0ac00ff0, 0xec003f00, -0xc80ff203, 0x00ff203f, 0x0ff003fc, 0xff003fc0, 0xf003fc00, 0x083fc00f, -0x03dc80ff, 0x17c00ff0, 0x00000e40, 0x00000000, 0x840fa003, 0x10cd943f, -0xbfe44190, 0x7c3c3301, 0xe34ff28b, 0x14ff092c, 0x2df0234c, 0xd300b6c6, -0x30034c04, 0x003cc04f, 0x02cc00e7, 0x0ce00f30, 0x00000e00, 0x00000000, -0x00b70801, 0x5a6c021d, 0x3de16110, 0xde061102, 0x416fd10b, 0x16f11624, -0x0fd01bd4, 0xe140bc40, 0x542bc502, 0x403d502c, 0x02440051, 0x06c00c14, -0x00000c20, 0x00000000, 0x0003a011, 0x2114144d, 0x33048010, 0x14044501, -0x400cd01b, 0x00cd0920, 0x4cd08b04, 0xc101b170, 0x10830508, 0x0030408c, -0x030480d5, 0x44400c10, 0x00000e80, 0x00000000, 0x0235a803, 0x8314048d, -0x35400590, 0x74015560, 0x500cd003, 0x00d10024, 0x0dd00345, 0xd1083540, -0x50034400, 0x4035400d, 0x034408d5, 0x0e000d10, 0x00000620, 0x00000000, -0x0047a802, 0x2854019d, 0x37402db4, 0x5c121700, 0x480df003, 0x80df4024, -0x0dd0834c, 0xd30035c0, 0x34034c00, 0x4034c80d, 0x134c02d5, 0x08000d30, -0x00000e20, 0x00000000, 0x104d8007, 0x806c813f, 0x3dc40572, 0xdc001b00, -0xc00df103, 0x00d70023, 0x0df2037c, 0xef003ec0, 0xf0033c80, 0x003bc00e, -0x0bfd11fb, 0x1fc00ef4, 0x00000600, 0x00000000, 0x40250802, 0x1d7c40d3, -0x32d029fc, 0x6c809f10, 0xd00d7083, 0x80c7a064, 0x0c32034c, 0xd70032c0, -0x74234c00, 0x1034c00d, 0x034c00db, 0x08c80d30, 0x00000420, 0x00000000, -0x00248013, 0x01740091, 0x3c40a5b8, 0xc4019d00, 0x400f1083, 0x20fb806c, -0x0f1103c4, 0xf1003d40, 0xf007d500, 0x403c412f, 0x2f4413c3, 0x4c40ef10, -0x00000200, 0x00000000, 0x0002a007, 0x08248f09, 0x31440010, 0x04288d00, -0x480c1003, 0x00c50020, 0x0c108305, 0xc1003148, 0x521f0480, 0x5030413c, -0x0f4583c9, 0x1d600c10, 0x00000a00, 0x00000000, 0x00708004, 0x06b40161, -0x79605a92, 0x8605ad00, 0x401e10b7, 0x09e10368, 0xde101784, 0xe1017940, -0xd4079609, 0x5270501e, 0x478449f9, 0x11601e11, 0x00000200, 0x00000000, -0x00001012, 0x083c084b, 0x71c0f050, 0x4d014f00, 0xc05c3027, 0x05c50960, -0x5c10070c, 0xc30075c4, 0x60070c05, 0x4230c80c, 0x034e80cb, 0x49d08c30, -0x00000040, 0x00000000, 0x003db802, 0x02fc00ff, 0x3cc00f70, 0xdc005f06, -0xc08fe023, 0x08ff122f, 0x8df0237c, 0xff023d03, 0xb00ffc08, 0x023fc00f, -0x01fe20f7, 0x0ac20ff0, 0x00000660, 0x00000000, 0x2017b015, 0x037c409f, -0x37c00d70, 0x7c80d325, 0xc44d30b3, 0x16df8224, 0x4df0634c, 0xd30334d0, -0xf60b4c08, 0x4334da8d, 0x034c01d3, 0x57800df2, 0x00000e00, 0x00000000, -0x08198012, 0x03b4606d, 0x3b420ed0, 0xb420e148, 0x44cc11c3, 0x06f64168, -0xced08384, 0xc10c3840, 0xf4170408, 0x0338401e, 0x038400a1, 0x4b404ed0, -0x00000620, 0x00000000, 0x00790003, 0x07b401ed, 0x7b401ad0, 0xb403e101, -0x40de1017, 0x01ed0160, 0x5ed197a4, 0xe9017240, 0x90278405, 0x0170405e, -0x078501e1, 0x0f029ed0, 0x00000400, 0x00000000, 0x00732812, 0x237412cd, -0x33403d90, 0x3402c100, 0x400c1003, 0x00c90020, 0x0cd00324, 0xc9003240, -0xd0030400, 0x0030400c, 0x030453c1, 0x4b400cd2, 0x00000c20, 0x00000000, -0x009da817, 0x05fc007f, 0x17c1a7f0, 0x7c007300, 0x10073001, 0x005f001c, -0x05f0016c, 0x5b0016c0, 0xf0014c00, 0x4014c005, 0x49cc8373, 0x5fc005f0, -0x00000620, 0x00000000, 0x02070012, 0x487c001f, 0x07c001f0, 0x3c100f00, -0xc001f400, 0x00170007, 0x01f0004c, 0x175005c2, 0xf0007c00, 0x0007c201, -0x0c7c881f, 0x4bc021f0, 0x00000c00, 0x00000000, 0x04270810, 0x067c029f, -0x20c03970, 0x4c809300, 0xc009b202, 0x00974020, 0x0934020e, 0x930024c0, -0x30020c00, 0x4024c008, 0x02680093, 0x40c009f0, 0x00000c20, 0x00000000, -0x00262001, 0x3e74009d, 0x24501911, 0x44009110, 0x40091002, 0x00950064, -0x09100244, 0x91002440, 0x30025400, 0x0a24dc09, 0x2a60c291, 0x045129d0, -0x00000800, 0x00000000, 0x0024a018, 0x0274009d, 0x24400910, 0x44019100, -0x40089202, 0x00850064, 0x08100244, 0x81002050, 0x14824480, 0x48204a29, -0x026400d1, 0x604008d0, 0x00000200, 0x00000000, 0x00202010, 0x2234088d, -0x20008810, 0x045c8102, 0x50881022, 0x28850220, 0x88102206, 0x814a2060, -0x04221402, 0x02304088, 0x22240881, 0x414088d0, 0x00000080, 0x00000000, -0x0506a01d, 0x587c161f, 0x80c16174, 0x0d061305, 0xc561b058, 0x16152584, -0x20305845, 0x130584c0, 0x20584c54, 0x0584c160, 0x096c0243, 0x74c021f2, -0x00000ac0, 0x00000000, 0x002fa819, 0x92fc04bf, 0x27c04bf8, 0x7804bf41, -0xc049e012, 0x049f012f, 0x69f0127c, 0x9f012700, 0x70927c40, 0x0125c049, -0x12fc04bf, 0x66c069f0, 0x00000e60, 0x00000000, 0x0127a018, 0x02fc06b3, -0x2cc00bf0, 0x4c043313, 0xc0693052, 0x0093008d, 0x0970224c, 0x931524e0, -0x710acc90, 0x01a6c209, 0x0a4c0093, 0x60c16936, 0x00000e00, 0x00000000, -0x0007001c, 0x18748011, 0x045141d2, 0x0c151140, 0x40411050, 0x10111044, -0xc1142014, 0x112102c1, 0x12105506, 0x0007c041, 0x00054451, 0x70400310, -0x00000c20, 0x00000000, 0x00a3a010, 0x4a348681, 0xa04028d8, 0x06028120, -0x40681002, 0x48810131, 0x48500204, 0x81052040, 0x50122414, 0x00aa510a, -0x82c490a1, 0x40400a10, 0x00000e80, 0x00000000, 0x0425a818, 0x82740091, -0x244008d0, 0x44349100, 0x40091002, 0x00910024, 0x09100244, 0x91002646, -0x10027080, 0x402f400b, 0x42c408a1, 0x60400b10, 0x00000620, 0x00000000, -0x0027a805, 0x267c0493, 0x244409f2, 0x4c009300, 0xc0093402, 0x00934025, -0x0970024d, 0x93402440, 0x71026c00, 0x0026c009, 0x06480393, 0x14d00930, -0x00000e20, 0x00000000, 0x48218014, 0x067c049f, 0x27c089f0, 0x1d201f00, -0xc008f402, 0x009f2007, 0x09f0027c, 0x9f0023c0, 0xd1025c00, 0x0027c008, -0x127d209f, 0x53d009f0, 0x00000600, 0x00000000, 0x00850814, 0x005c061f, -0x07c001f0, 0x5c021300, 0xc0013000, 0x00038004, 0x0030000c, 0x130004c0, -0x34404c80, 0x0106c001, 0x084d0213, 0x50408130, 0x00000420, 0x00000000, -0x2014a014, 0x01d4807d, 0x174017d0, 0x74013100, 0x40051401, 0x005f0004, -0x05100144, 0x51001542, 0xf0092c40, 0x00d6c045, 0x01040151, 0x51403514, -0x00000200, 0x00000000, 0x0032a014, 0x4b0000cd, 0x27451cd2, 0x1401d100, -0x400c1083, 0x20c10034, 0x0c500304, 0xd1003060, 0x100a3400, 0x00f6401c, -0x031401c1, 0x50413d10, 0x00000a00, 0x00000000, 0x00388805, 0x0284818d, -0x2b4106d2, 0xb498e100, 0x480e1003, 0x04c58230, 0x8e191384, 0xe1013960, -0xd0023404, 0x04324008, 0x039410e1, 0x15400011, 0x00000200, 0x00000000, -0x00780015, 0x859d01ef, 0xefc81ed2, 0x9c05e315, 0x503f3007, 0x01e10178, -0x5c701784, 0xc301f8c0, 0x3406b891, 0x407ac81e, 0x049c0173, 0x54c11e34, -0x00000040, 0x00000000, 0x0035a810, 0x027c009f, 0x27c005f0, 0x7c00df00, -0xc96de10b, 0x4adf0037, 0x0db18b7c, 0xde00b7c5, 0xf0026c08, 0x4037c009, -0x016c00df, 0x43c009f0, 0x00000660, 0x00000000, 0x007fb000, 0x07c881ff, -0x64c099f0, 0x4c01f303, 0xc01d304f, 0x0bdb1874, 0x1f306fcc, 0xd302f448, -0xb1064c01, 0x004dc01f, 0x07cc81b3, 0x03801f30, 0x00000e00, 0x00000000, -0x02398015, 0x0084302d, 0x604052d0, 0xc409c100, 0x401d3037, 0x01d21071, -0x1f5007c4, 0xf1027c40, 0x54368401, 0x000c500b, 0x038400b1, 0x57408210, -0x00000620, 0x00000000, 0x00390000, 0x218408cd, 0x2840a8d0, 0x9408e022, -0x400e9003, 0x00e1003c, 0x4e108384, 0xe1003a44, 0x94120440, 0x0029400e, -0x00a41821, 0x03400e10, 0x00000400, 0x00000000, 0x04b32804, 0x0804021d, -0x204090d0, 0x1400c100, 0x400c1003, 0x00c90031, 0x0c500304, 0xc1203250, -0x54020500, 0x00204008, 0x09241291, 0x13400010, 0x00000c20, 0x00000000, -0x04f5a815, 0x234c005f, 0x28500df0, 0xd500d348, 0xc00eb503, 0x00f10030, -0x0f3403cd, 0xf3403ec0, 0xb0014c00, 0x4035c005, 0x0b6d83d1, 0x57c00d34, -0x00000620, 0x00000000, 0x10370001, 0x033c105f, 0x27c00df0, 0x2c00df00, -0xc00df003, 0x00d70037, 0x0df0837c, 0xdf0031c0, 0xf0007c00, 0x2033c005, -0x0b5c02df, 0x07c805f0, 0x00000c00, 0x00000000, 0x003f0880, 0x20dc003f, -0x2dc00b31, 0xdc05f300, 0xc00f3003, 0x00fb003c, 0x0ef003cc, 0xf3003cc4, -0xb00dfc00, 0x003cc03e, 0x46cc0873, 0x00c08f20, 0x00000c22, 0x00000000, -0x00360081, 0x0644e01d, 0x25c00910, 0x7420d100, 0x400d1503, 0x00d10034, -0x0dd08354, 0xd1083540, 0x10007440, 0x02f54025, 0x14058251, 0x04401d10, -0x00000802, 0x00000000, 0x8034a001, 0x03440add, 0x27401510, 0x7400d158, -0x400d1003, 0x00c10074, 0x0dd00344, 0xd1003448, 0x90433400, 0x40944025, -0x134602d1, 0x04400c50, 0x00000200, 0x00000000, 0x80302010, 0x0104004d, -0xa3489410, 0x2404c100, 0x400d1043, 0x04c18234, 0x0cd03314, 0xc1403141, -0x14303480, 0x40114000, 0x03460081, 0x40400050, 0x00000080, 0x00000000, -0x0036a000, 0x005d009f, 0xebcc5130, 0xfc4bd301, 0xc0df30b7, 0x49f32174, -0x1ff01fcc, 0xf3237cc0, 0xb0877c2f, 0x4004c80d, 0x020c0053, 0x00d00d74, -0x00000ac0, 0x00000000, 0x083fa805, 0x00fc803f, 0x6de2d3f4, 0xfc0dce02, -0xc2dff017, 0x07ff037b, 0x5df2277c, 0xff037fc1, 0xf01cfc09, 0x400fc003, -0x00fc003f, 0x17c003b0, 0x00000e40, 0x00000000, 0x003fa003, 0x70fc0437, -0x0fc1c3f0, 0xde023f02, 0xc00f70a0, 0x0cfb083e, 0x0fb003fc, 0xf7003ac0, -0x3000cc04, 0x000cc00b, 0x00e440f3, 0x0cc40fb0, 0x00000e20, 0x00000000, -0x00370801, 0x096c0a01, 0x874469d1, 0x44441d02, 0x400fd008, 0x88e5033c, -0x0d009234, 0xfd003440, 0x50015408, 0x0034400d, 0x034402f5, 0x0d400d50, -0x00000c20, 0x00000000, 0x0033a011, 0x82340015, 0x21404450, 0x04c04d09, -0x614cd030, 0x20c92432, 0x0c904330, 0xcd007240, 0x11000400, 0x0031420c, -0x002402c1, 0x4d440c94, 0x00000e80, 0x00000000, 0x0035a803, 0x03751111, -0x270009d8, 0x44600c00, 0x400dd091, 0x00d90034, 0x0d109274, 0xdd007441, -0x500454a0, 0x0035440d, 0x074440d5, 0x0d400d40, 0x00000620, 0x00000000, -0x0133a802, 0x087c03d7, 0x15c021f0, 0x45049e06, 0xc00d7818, 0x00db0036, -0x3cb0037c, 0xdf0036c0, 0x30874c00, 0x0005d008, 0x076c00d3, 0x89c00da0, -0x00000e02, 0x00000000, 0x003d8007, 0xa16d007f, 0x57c021f0, 0xec007d08, -0xc00ef006, 0x00f7103b, 0x8fe007fc, 0xff003fc0, 0xf003bc00, 0x003ac00f, -0x81bc00ef, 0x1fd80ef2, 0x00000600, 0x00000000, 0x00b50802, 0x485c025b, -0xb45035b4, 0x7e30d700, 0xc00df001, 0x80d70037, 0x0d710354, 0xd78837c0, -0x11225e00, 0x2237c00d, 0x036d0cd3, 0x09400d92, 0x00000400, 0x00000000, -0x02b4a013, 0x09440441, 0x3540a190, 0x72035102, 0x420fd203, 0x00f1203f, -0xbd180344, 0xfa06f4c0, 0x10064480, 0x02b740ad, 0x034400fb, 0x6ec00fb2, -0x00000200, 0x00000000, 0x0032a007, 0x00140449, 0x01400050, 0x348b0100, -0x420cd000, 0x20c50833, 0x8c500354, 0xd1003140, 0x10061400, 0x30434008, -0x010403c1, 0x1e420c10, 0x00000a00, 0x00000000, 0x007c8004, 0x04840161, -0x48401e50, 0xb401a500, 0x001ed105, 0x09e10073, 0x1e108786, 0xc9007c40, -0x10038401, 0x0073401e, 0x278441e9, 0x36409e94, 0x00000200, 0x00000000, -0x00301012, 0x1b1c044b, 0x11c024f2, 0x34084740, 0x804cd000, 0x28c70033, -0x0c50031c, 0xc10031c0, 0x30225400, 0x0033c08c, 0x014c08c3, 0x4bc00d30, -0x00000040, 0x00000000, 0x1039b802, 0x03fc007f, 0x1fc20fb0, 0xfc009b00, -0xc02ff209, 0x28ff003f, 0x0cd1237c, 0xfc103fcc, 0xf013fc00, 0x003f800f, -0x03de38ee, 0x0bc00ff1, 0x00000660, 0x00000000, 0x0497a015, 0x067c005f, -0x24c009b0, 0x7c009f00, 0xc8ed7013, 0x42df0037, 0x4df8035c, 0xdb2033c8, -0xf0034c08, 0x0007c009, 0x037c12df, 0x54c00d38, 0x00000e00, 0x00000000, -0x00398812, 0x02b4006d, 0x28680cb0, 0xb400ed00, 0x424ed003, 0x14cf043b, -0x2ed003ac, 0xe42539c1, 0xf0039088, 0x003b400e, 0x019c00ed, 0x4d404e50, -0x00000624, 0x00000000, 0x00790003, 0x07b6016d, 0x78401e90, 0xb4a1ed00, -0x601e5007, 0x09ed037b, 0x5ed00784, 0xe1267b41, 0xd0078605, 0x007b401e, -0x07b405ed, 0x04409c10, 0x00000400, 0x00000000, 0x08b32812, 0x0334424d, -0xf1402d92, 0x3400dd00, 0x400cd033, 0x40c51033, 0x0cd02734, 0xc5083140, -0xd02b1640, 0x0033400c, 0x071400cd, 0x49000d50, 0x00000c20, 0x00000000, -0x22918817, 0x21fc1a7f, 0x5cd087b2, 0x7c027f01, 0x40057001, 0x405d0017, -0x03d001c4, 0x51100b40, 0xd005cc00, 0x001f4405, 0x05f4005d, 0x5cc00510, -0x00000620, 0x00000000, 0x10070012, 0x0870c01d, 0x06c02170, 0x7c101f04, -0xc000f100, 0x001f0807, 0x01f00068, 0x170007c0, 0x70005c00, 0x8007c001, -0xa07c020f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x00370810, 0x067c0097, -0x64c019f8, 0x4c089300, 0xc409b003, 0x408f8025, 0x41b1024e, 0x930505c1, -0x30426c00, 0x0020c008, 0x425c4393, 0x40c00970, 0x00000c20, 0x00000000, -0x04262001, 0x62740291, 0xa4585978, 0x44419112, 0x4009d002, 0x809fa024, -0x7012022c, 0x9101c448, 0x36060c40, 0x6026d809, 0x02448091, 0x04400910, -0x00000800, 0x00000000, 0x0024a018, 0x02748295, 0xa04089d1, 0x44009100, -0x4809d002, 0x009d3025, 0x01900244, 0x85400540, 0x94077400, 0x00244009, -0x02160091, 0x60400950, 0x00000200, 0x00000000, 0x00242010, 0x22342881, -0x20408850, 0x07088142, 0x4008d002, 0x0c8d0220, 0x89182264, 0x81022464, -0x900a4640, 0x90224008, 0x0a0604c1, 0x40542812, 0x00000080, 0x00000000, -0x0006b01d, 0x583c1617, 0x844161d0, 0x4c961305, 0x4801b350, 0x031d8585, -0x61b80846, 0x078585e1, 0xb8007c9e, 0x8004e001, 0x001e0113, 0x74c00178, -0x00000ac0, 0x00000000, 0x0037b819, 0x12fc04fe, 0x2fc04bf0, 0x7c04bf01, -0xe169e252, 0x8c970127, 0x4be012f8, 0x9f012fc0, 0x780adc01, 0x00afc02b, -0x0afc089d, 0x67c029f0, 0x00000e64, 0x00000000, 0x0027a018, 0x42cc88b7, -0x2dc10bb8, 0x4c08f305, 0xc049f00a, 0x149b0126, 0x1b30222c, 0x93206fc1, -0x3132dc80, 0x0023c009, 0x0a482093, 0x60c329b0, 0x00000e00, 0x00000000, -0x1007081c, 0x48450a11, 0x84482110, 0x440a1141, 0x40a1d000, 0x14130504, -0x31109044, 0x1502c740, 0x10384404, 0x00074401, 0x08440a31, 0x70402150, -0x00000c20, 0x00000000, 0x0027a010, 0x12240485, 0x21414810, 0x16248504, -0x4008d022, 0x008d0322, 0x48101264, 0x810d2341, 0x54021412, 0x006b4008, -0x1e05c0a5, 0x48404890, 0x00000e80, 0x00000000, 0x0825a818, 0x0b648091, -0x24480812, 0x56049501, 0x4809d8a2, 0x00990020, 0x01140244, 0x95040701, -0x10024480, 0x002f4009, 0x024400b5, 0x60400950, 0x00000620, 0x00000000, -0x00a7a805, 0x066c0297, 0x25801918, 0x5d009704, 0xc009e102, 0x009f0026, -0x0130026c, 0x93000340, 0x70065c00, 0xc0a7c019, 0x024c0096, 0x14c009b0, -0x00000e20, 0x00000000, 0x28358014, 0x0a5c009f, 0x27804974, 0x6c008b08, -0xc009f086, 0x00970027, 0x81f0027c, 0x9f0107c0, 0xf00e1c40, 0x8927c459, -0x023c009b, 0x5bd008f0, 0x00000600, 0x00000000, 0x01050814, 0x084c0013, -0x87c881f2, 0x5c001f02, 0xc0007000, 0x40060006, 0x01b0005c, 0x1f0005cc, -0x60007c20, 0x000fc001, 0x807c0033, 0x50c00132, 0x00000420, 0x00000000, -0x80908014, 0x11c40075, 0x1f400770, 0x74107c20, 0x4005b001, 0x00510014, -0xa3100104, 0x5d028c44, 0x14154000, 0x40134005, 0x01740041, 0x50400514, -0x00000200, 0x00000000, 0x20b2a014, 0x034401d1, 0x37401cd0, 0x1401cd00, -0x400c9003, 0x00c50032, 0x8c900314, 0xdd223140, 0x50071040, 0x0033400c, -0x03340045, 0x50500c10, 0x00000a00, 0x00000000, 0x003c8005, 0x038442c5, -0x3b4c02d0, 0xb400ed00, 0x400c8117, 0x08e10038, 0x5f1823c4, 0xcd013944, -0x1003c400, 0x000b4006, 0x133400a5, 0x14400c10, 0x00000200, 0x00000000, -0x00781015, 0x078d0161, 0x4bc41ef3, 0x1c01ef00, 0xc41eaa07, 0x8df705fe, -0x9eb1379c, 0xef0079c0, 0x70079c01, 0x087bc01e, 0x37bc01a7, 0x54c01e30, -0x00000040, 0x00000000, 0x0131b810, 0x017c00df, 0x27c00d70, 0x7ea09f00, -0xc00db023, 0x22df10b7, 0xecc08b74, 0xdf31b64e, 0xf0031c0a, 0x00070005, -0x237c005b, 0x43c00df1, 0x00000660, 0x00000000, 0x00ffa000, 0x27f401f9, -0x7fc01fe0, 0xfc01ff00, 0xc11fb01f, 0x01fe007c, 0x1ff007cc, 0xff06ffc0, -0xf007cc03, 0x007fc01f, 0x07fc017f, 0x00c19f30, 0x00000e00, 0x00000000, -0x00398015, 0x23b604a1, 0x3b4082d0, 0xb480ed00, 0xc04f1053, 0x04ed003a, -0x4ed003ac, 0xf9103b44, 0xd0038404, 0x000b4006, 0x13b400ad, 0x5550cf54, -0x00000620, 0x00000000, 0x00390000, 0x82b4406d, 0x1b400ad0, 0xb408e500, -0x640ed133, 0x00ed0038, 0x0ed00386, 0xed203b4c, 0xd0028600, 0x023b400e, -0x4bb401ad, 0x00700e12, 0x00000400, 0x00000000, 0x00132804, 0x04361085, -0x334038c0, 0x70108d00, 0x400c5003, 0x00cd0032, 0x0cd00726, 0xc9003340, -0xd0020400, 0x00030004, 0x0734404d, 0x11400d50, 0x00000c20, 0x00000000, -0x2235a815, 0x407c809f, 0x37c13df0, 0xf443df00, 0x400ff80f, 0x00fd003c, -0x8dd01384, 0xfd063741, 0xd2074500, 0x0077041d, 0x07b4005d, 0x54400f14, -0x00000620, 0x00000000, 0x00b70001, 0x083c005b, 0x93c061e0, 0x7c484f20, -0xc00cb813, 0x00df0037, 0x2df0037c, 0xdf0037c0, 0xf0227c00, 0x0443c815, -0x037c209f, 0x07c00df0, 0x00000c00, 0x00000000, 0x003f0880, 0x03fc003b, -0x8fc00730, 0xcc01f300, 0xd00f3603, 0x00df003c, 0x1f3003fc, 0xff003fc0, -0xf007fc00, 0x003fc00f, 0x035e80b3, 0x00d00f30, 0x00000c22, 0x00000000, -0x01322081, 0x2d740051, 0x87402552, 0x44111100, 0x420d1083, 0x80dd2034, -0x4d120374, 0xdd203748, 0xd2037480, 0x60074805, 0x03748051, 0x04400df2, -0x00000800, 0x00000000, 0x0034a001, 0x00740399, 0xa7410d10, 0x44089100, -0x400d5103, 0x00dd0034, 0x4d140374, 0xdd007740, 0xd0237400, 0x0037440d, -0x03740051, 0x04400d12, 0x00000200, 0x00000000, 0x00302810, 0x00340001, -0x03400010, 0x04000108, 0x400c1003, 0x00cd0030, 0x0c100374, 0xcd007340, -0xd0023420, 0x00026004, 0x03740081, 0x40500cd0, 0x00000080, 0x00000000, -0x0036a000, 0x027c001b, 0x07c00134, 0x8c009300, 0xe20d3003, 0x00ff883c, -0x0d3803fe, 0xfd8037e0, 0xf8027e00, 0x8037e00d, 0x03de0093, 0x00e00d38, -0x00000ac0, 0x00000000, 0x003ba825, 0x00fc803f, 0x0fc003f0, 0xfc003f00, -0xc00ff003, 0x00ff003f, 0x0ff003f8, 0xff003fc0, 0xf002fc00, 0x100f8007, -0x03fc007d, 0x17c00ff0, 0x00000e60, 0x00000000, 0x003fa003, 0x40fc002b, -0x3fc423b8, 0xcec09522, 0xc24fb033, 0x0c33133f, 0xc1704b7c, 0xf300bcc1, -0x2093fca0, 0x411cc08f, 0x00fc08b3, 0x0ce06f30, 0x00000e00, 0x00000000, -0x08331801, 0x091c8013, 0xbdc26514, 0xcc16b100, 0x40cf1033, 0x02c101bf, -0x6c100bc4, 0xf100bc40, 0x100b7410, 0x0494c04d, 0x005c44d1, 0x0c40ad10, -0x00000c20, 0x00000000, 0x0023a011, 0x52340045, 0x33606012, 0x14888102, -0x410c5113, 0x06d58333, 0x40100326, 0xc521b048, 0x10237444, 0x0306440c, -0x007400c1, 0x4c404c10, 0x00000e80, 0x00000000, 0x0225a007, 0x23541015, -0x31628510, 0x54009180, 0x400dda83, 0x00d50037, 0x1d140306, 0xd5003440, -0x10037400, 0x0014408d, 0x095408d1, 0x0c440d10, 0x00000620, 0x00000000, -0x0077a882, 0x147c0917, 0x37c00910, 0x5c409300, 0xc00d7403, 0x00154037, -0x0878036c, 0xd74034c0, 0x30037860, 0x0056c030, 0x097c0093, 0x00400d30, -0x00000e22, 0x00000000, 0x607d8007, 0x04fc813b, 0x3fc40f73, 0x2d00af20, -0xc00f3003, 0x20fb383b, 0x0ff3036c, 0xfb003bd0, 0xf4037c00, 0x015fc01b, -0x01dc01ff, 0x1fc80df4, 0x00000602, 0x00000000, 0x40250802, 0x0a6c0253, -0x37c809b4, 0x4c009700, 0xc80db083, 0x08db2037, 0x0934036d, 0xd30034c0, -0xb0134c00, 0x0025c021, 0x097c00df, 0x08c04d30, 0x00000420, 0x00000000, -0x2024a013, 0x02441110, 0xff413d10, 0xc50bbd02, 0x41af1003, 0x00d302bf, -0x0d1083e8, 0xf0003c40, 0x10039400, 0x0112c009, 0x133400dd, 0x0d402f10, -0x00000200, 0x00000000, 0x00262003, 0x00641189, 0x33613012, 0x04088502, -0x401c1003, 0x801110b3, 0x04000304, 0xc1003040, 0x90031400, 0x00114808, -0x483400cd, 0x1c400d10, 0x00000a00, 0x00000000, 0x006a0804, 0x058509b1, -0x7b401210, 0x8601bd00, 0x405e1017, 0x05e92173, 0x9e000784, 0xc1017040, -0x10079401, 0x105a4496, 0x04f401ed, 0x7d409e14, 0x00000200, 0x00000000, -0x00321012, 0x802c2003, 0x33423813, 0x0e018721, 0xc01c3827, 0x01c30173, -0x54201704, 0xc30070c0, 0xb0071c05, 0x0011c629, 0x023c68cf, 0x48c08c30, -0x00000040, 0x00000000, 0x003da802, 0x01fc207f, 0x37c08b72, 0xfc148f00, -0x880d70ab, 0x00d740b7, 0x8ff263fc, 0xff02bfd2, 0xf143fc04, 0x003fc007, -0x23bc40ff, 0x0bc18ff0, 0x00000660, 0x00000000, 0x00278014, 0x074c000f, -0x37e00530, 0x4c029f04, 0xd04df02b, 0x401f12b4, 0x0d70937c, 0xdf12b4c4, -0xf0034e06, 0x00149003, 0x017c80df, 0x54c00df0, 0x00000e00, 0x00000000, -0x00299912, 0x03ac002d, 0x39c80630, 0x84148d21, 0x432c7003, 0x00ef0038, -0x0f103334, 0xed003844, 0xd3079c08, 0x00184208, 0x01b400ed, 0x4c504ed0, -0x00000624, 0x00000000, 0x00790000, 0x072401ad, 0x7b601e55, 0xb401ad12, -0x405ed017, 0x01ed017a, 0x1e1017b4, 0xcd017844, 0xd107a409, 0x08ea4832, -0x87b401ed, 0x06501ed0, 0x00000402, 0x00000000, 0x10332016, 0x432640cd, -0x35400c50, 0x35409d00, 0x400d5003, 0x00cd0032, 0x0c100334, 0xcd003040, -0xd0031400, 0x00724008, 0x233400dd, 0x4a4c0cd0, 0x00000c20, 0x00000000, -0x80178817, 0x11c4027d, 0x17400750, 0x7c807f00, 0x4805f001, 0x007f0016, -0x0712017c, 0x5f8014c8, 0xf001ec00, 0x009ec037, 0x0df4005f, 0x5ed005d0, -0x00000620, 0x00000000, 0x00058012, 0x007c101f, 0x05c04138, 0x0c001f80, -0xc0217000, 0x02170005, 0x11a0007c, 0x1f8007c0, 0xf0005c00, 0x0045c001, -0x047c001f, 0x49c001f0, 0x00000c00, 0x00000000, 0x00210810, 0x024d009b, -0x27ca0970, 0x4c029308, 0xc009b002, 0x00930260, 0x0830023c, 0x8f2024c0, -0x30820c20, 0x0024d108, 0x224c009f, 0x40c018f2, 0x00000c20, 0x00000000, -0x00260001, 0x42448083, 0xa7c02971, 0x45039b40, 0x51291202, 0x02950164, -0x09b10274, 0x9d002440, 0x500e5400, 0x00644009, 0x0644009d, 0x06c019d0, -0x00000800, 0x00000000, 0x0024801c, 0x02440099, 0xa74029d0, 0x46109100, -0x48091402, 0x00910024, 0x09920276, 0x95002440, 0x10224400, 0x00746009, -0x02440095, 0x604089d0, 0x00000200, 0x00000000, 0x82202814, 0x22040089, -0x234088d0, 0x04808108, 0x40081022, 0x08c50220, 0x88902234, 0x8d022050, -0x50021408, 0x82206428, 0x0205088d, 0x424088d0, 0x00000080, 0x00000000, -0x1586b01d, 0x584c001b, 0x07c161f9, 0x4c141105, 0xe141b058, 0x56130584, -0x61b0587c, 0x1f0584c5, 0x32514402, 0x2584c941, 0x814e021f, 0x74c161f8, -0x00000ac0, 0x00000000, 0x012fa919, 0x12fc00b7, 0x25c04b70, 0x7c34bf05, -0xc149f412, 0x04bf0127, 0x4bb0127c, 0x9f0127c8, 0xf0027c06, 0x013fc00b, -0x03fca4bf, 0x67c048f2, 0x00000e64, 0x00000000, 0x00a7a018, 0x0adc00bf, -0x2cc02ff0, 0x7c4cb701, 0xc90b320a, 0x00bf00af, 0x69f0127c, 0x9314a4c9, -0x3012cc10, 0x01acc049, 0x02cc0093, 0x64c02bf0, 0x00000e00, 0x00000000, -0x2003181c, 0x086d001d, 0x84d00078, 0x5c0e1147, 0x4021b008, 0x001d0187, -0x20d01064, 0x11008442, 0x18287406, 0x01044271, 0x00445411, 0x704821d0, -0x00000c22, 0x00000000, 0x00a10012, 0x1a34009d, 0x200828d0, 0x36008100, -0x4548509a, 0x168d81a3, 0x08d04a34, 0x85812040, 0x10026410, 0x01a24188, -0x02040091, 0x484068d0, 0x00000e80, 0x00000000, 0x00252018, 0x0364009d, -0x344029d0, 0x1420d008, 0x40095d02, 0x109d1027, 0x09d00264, 0x85102042, -0x10027480, 0x00664209, 0x12450891, 0x604009d0, 0x00000620, 0x00000000, -0x0067a805, 0x127c1b9f, 0x24c009d0, 0x7c809300, 0x40095902, 0x219f3027, -0x08f80274, 0x974024c0, 0x10024c00, 0x00a6c009, 0x0e4c0083, 0x14d009f0, -0x00000e20, 0x00000000, 0x01258012, 0x027d009f, 0x27c00970, 0x5c009f28, -0xc009b002, 0x049f0027, 0x09f0027c, 0x9b4027d0, 0xf4025c00, 0x4025c009, -0x027c009f, 0x5bc009f0, 0x00000600, 0x00000000, 0x00050810, 0x084c0213, -0x00e0a170, 0x7c001300, 0xc001b000, 0x12130007, 0x01f0006c, 0x131004c0, -0x31004c00, 0x4084c000, 0x044c0013, 0x50c001f0, 0x00000420, 0x00000000, -0x0014a014, 0x01c43361, 0x5d4007d0, 0x74007d30, 0x40174081, 0x0371001f, -0x07920168, 0x51001448, 0x10019400, 0x00545007, 0x09c40051, 0x505007d0, -0x00000200, 0x00000000, 0x0032a014, 0x630406c9, 0x70451d93, 0x3400c108, -0x601c1003, 0x0bc90033, 0x0c500304, 0xc8083040, 0x10030600, 0x4034440c, -0x030400c1, 0x504189d0, 0x00000a00, 0x00000000, 0x01788801, 0x03858029, -0x19600e90, 0xb4426d04, 0x41025013, 0x41e9005b, 0x8e9203a4, 0xe9083040, -0x14019404, 0x0420405e, 0x838404e1, 0x144002d0, 0x00000200, 0x00000000, -0x43781011, 0x858c81e3, 0x786216f0, 0xfc41a300, 0xc01e341f, 0x01cb0073, -0x5ee0078c, 0xcb0278c0, 0x32048c07, 0x0078e02c, 0x078d05f3, 0x54c01ff0, -0x00000040, 0x00000000, 0x0235a810, 0x017d0007, 0x17c00df0, 0x7c005f00, -0xc009305b, 0x80d70037, 0x2db02b7c, 0xd713b7c4, 0xf0003c50, 0x0027c01d, -0x037c09df, 0x43c007f2, 0x00000660, 0x00000000, 0x007d2000, 0x27fe0137, -0x7cc05df2, 0x4c09f902, 0xc01f7027, 0x01f3027c, 0xfd320f4c, 0xd30374c0, -0x30170c01, 0x007dc01f, 0x05bc01f3, 0x08c89f30, 0x00000e00, 0x00000000, -0x02391815, 0x238c0863, 0x4ac01030, 0x0c0d2102, 0x40105207, 0x018f0054, -0x9f1007c4, 0xcb007441, 0x50250c61, 0x423c408f, 0x23b400e1, 0x5440ce10, -0x00000620, 0x00000000, 0x00390000, 0xa114003d, 0x38438610, 0xa448a101, -0x600ed003, 0x0c601039, 0x0e121384, 0xe5c23860, 0x9000b424, 0x0028400e, -0x03b410e1, 0x20400a10, 0x00000400, 0x00000000, 0x80312004, 0x01040041, -0x00400091, 0x04000100, 0x40089003, 0x01150031, 0x3c100304, 0xd9003040, -0xd4801440, 0x00a0402c, 0x0b3400c1, 0x18500810, 0x00000c20, 0x00000000, -0x003d8815, 0x435c1117, 0x24500938, 0xec00d340, 0xd00df003, 0x06d10025, -0x0f3403cc, 0xf7203cd0, 0xb0037c80, 0x00b4d05f, 0x0f7c01f3, 0x54c00934, -0x00000620, 0x00000000, 0x00370001, 0x035c8297, 0xb7c00c30, 0x7c02d708, -0x40057003, 0x04df2006, 0x4cf0037c, 0xdc1033c0, 0x70014c40, 0x0167c10d, -0x077c00df, 0x27c001f0, 0x00000c00, 0x00000000, 0x80330884, 0x23cd0933, -0x04c001f0, 0xcc003e00, 0xc055f103, 0x00d3187c, 0x0f3003c4, 0xf3203ce0, -0x3401cc00, 0x003cc00e, 0x43fc00f3, 0x07c009e0, 0x00000c20, 0x00000000, -0x00360085, 0x0f558485, 0x96c09d70, 0x44024900, 0xc225f003, 0x40db0036, -0x0d15036c, 0xd1103440, 0x10010500, 0x0020400f, 0x065c00db, 0x874011d0, -0x00000800, 0x00000000, 0x0034a001, 0x80440011, 0x254009d0, 0x4440dd82, -0x4028d003, 0x00d10120, 0x0d100314, 0xd1003440, 0x10074600, 0x0034400d, -0x237400d1, 0x074019d0, 0x00000200, 0x00000000, 0x88302810, 0x00140005, -0x236060d0, 0x04109901, 0x4100d883, 0x10890202, 0x6c10c334, 0xc1043040, -0x10410410, 0x0034500c, 0x071400c9, 0x434008d0, 0x00000080, 0x00000000, -0x003eb000, 0x00440011, 0x455031d9, 0x8c0b0f00, 0xc091f137, 0x41532174, -0x3f10a7dc, 0xe301fc50, 0x303d4c8f, 0x0024c00d, 0x037c00d3, 0x07c009f0, -0x00000ac0, 0x00000000, 0x003fa805, 0x00fd002f, 0x84023370, 0xec011f00, -0xc0517037, 0x111f0377, 0x3ff017ec, 0xff457fc8, 0xf015fd05, 0x002fc00f, -0x02dc00ff, 0x17c00bf0, 0x00000e60, 0x00000000, 0x002fa003, 0x00fc003b, -0x0fc00fb0, 0xfcc43302, 0xc08ff030, 0x003b001e, 0x0fb010ec, 0xfb003bc0, -0x3002fc04, 0x003ec003, 0x00ec00f3, 0x0cc00f30, 0x00000e00, 0x00000000, -0x20270801, 0x00748081, 0x84480f10, 0x74c81102, 0x404fd020, 0x12d11194, -0x0d502354, 0xf10435c0, 0x34023408, 0x02bd4601, 0x024400d5, 0x05400f10, -0x00000c60, 0x00000000, 0x0023a011, 0x82348889, 0x32500c90, 0x14a04109, -0x404cd010, 0x060d0492, 0x0c100024, 0xc9013340, 0x10001400, 0x00304208, -0x022400c1, 0x44440c10, 0x00000e80, 0x00000000, 0x0025a803, 0x43740391, -0x34440d10, 0x7406d102, 0x400dd013, 0x00c10010, 0x0d510344, 0xd1083740, -0x900664a0, 0x0035430d, 0x036400d5, 0x0d400d10, 0x00000600, 0x00000000, -0x00278802, 0x087c839b, 0xc6c00db2, 0x7c201300, 0xc80df084, 0x803b011e, -0xad3400ec, 0xdb02b7c0, 0x300e7c40, 0x0036c025, 0x256c00d3, 0x08400d30, -0x00000e22, 0x00000000, 0x01298007, 0x15fc00bf, 0x4e400ef0, 0xf401bf44, -0xc00ef083, 0x00fd001f, 0x1ff003fc, 0xdf107cc8, 0x7003bc00, 0x0037c03e, -0x079c00ef, 0x1fc00ef2, 0x00000600, 0x00000000, 0x00250802, 0x0a0c00df, -0xb4c00d70, 0x4c025f08, 0xc00df100, 0x003f001e, 0x0db020bc, 0xd340b6c0, -0x700a5c40, 0x2030c101, 0x025d00d7, 0x08d00d30, 0x00000420, 0x00000000, -0x0024a013, 0x034400dd, 0xf6c02f10, 0x4507dd00, 0x400fd003, 0x00dd0017, -0x7d100340, 0xf1003740, 0x10136c00, 0x083c481d, 0x034400f1, 0x4c400f1a, -0x00000200, 0x00000000, 0x0022a007, 0x000405cd, 0x05411c50, 0x14074d10, -0x420c9000, 0x000d2033, 0x7cd04010, 0xc5403640, 0x10060400, 0x003044a0, -0x011400cd, 0x0d400c10, 0x00000a80, 0x00000000, 0x00788004, 0x048401ed, -0x4b509c10, 0x84096d04, 0x401ed004, 0x41ed007b, 0x1e103784, 0xe5007b40, -0x1003a601, 0x00780000, 0x270481e9, 0x10401c10, 0x00000820, 0x00000000, -0x02201012, 0x004c10cf, 0x81c18c70, 0x1c00df00, 0x480cf00b, 0x041f8033, -0x0cf0101c, 0xc700b2c0, 0x702a1c20, 0x0030c08c, 0x221c00df, 0x48c08c10, -0x00000040, 0x00000000, 0x002db802, 0x20fc08ff, 0x0ec08ff0, 0xfc00ff00, -0x410ff003, 0xc0ff003f, 0xadf0139c, 0xdb0037c0, 0xf0136c02, 0x023fc04f, -0xa3fc00f7, 0x0bc00ff2, 0x00000620, 0x00000000, 0x0027a015, 0x044d00d3, -0x35c08d30, 0x4d00df00, 0xc07df013, 0x00330036, 0x4c3400cd, 0xd30230c0, -0xf002fc02, 0x01b4c00d, 0x847c00d3, 0x43c04d32, 0x00000e00, 0x00000000, -0x00398812, 0x000400f7, 0x38c08c10, 0x8400cd08, 0x40ccd043, 0x00c10830, -0x4e100304, 0xf5023840, 0xd0038404, 0x033c500e, 0x02b440e5, 0x4b414e50, -0x00000664, 0x00000000, 0x00f90003, 0x048401e5, 0x7b405e10, 0x8481ed00, -0x405ed08f, 0x0121007a, 0x9f100484, 0xe5017c40, 0xd004b409, 0x0278401e, -0x06340de1, 0x13429e10, 0x00000400, 0x00000000, 0x20772812, 0x00042ac5, -0xb1400c10, 0x0404cd01, 0x400cd003, 0x00c14034, 0x2c100305, 0xd5203040, -0xd0070400, 0x0030406d, 0x033400c5, 0x5b400c50, 0x00000c00, 0x00000000, -0x005d8817, 0x45cc0173, 0x9fc00534, 0x4c007d10, 0xc005f005, 0x00530016, -0x0231014c, 0x57160cd1, 0xf045fc00, 0x0014c077, 0x41f40053, 0x5fc00534, -0x00000e20, 0x00000000, 0x00070012, 0x007c921d, 0x868420f0, 0x7ca01f00, -0xc001f240, 0x203f0007, 0x21f008fc, 0x1f0007c0, 0xf0407c00, 0x0007c021, -0x007c001f, 0x4bc801f0, 0x00000600, 0x00000000, 0x00270810, 0x024c008b, -0x20e409f0, 0x4c009300, 0xc009b003, 0x40870027, 0x01360e4c, 0x970004c1, -0x74021c00, 0x0825c059, 0x024c0097, 0x43c009f0, 0x00000420, 0x00000000, -0x00260001, 0x06540091, 0xa4e0c970, 0x54009100, 0x4409d002, 0x00910027, -0x91100a2c, 0x91000440, 0x52064400, 0x00244019, 0x82440091, 0x174009d0, -0x00000800, 0x00000000, 0x0024a018, 0x06440098, 0x265409d0, 0x44018100, -0x40099202, 0x00b50027, 0x055202c4, 0x95080040, 0xd0225400, 0x10234809, -0x02440085, 0x734009d0, 0x00000200, 0x00000000, 0x12202010, 0x721408c1, -0x21400850, 0x1408c102, 0x4008d202, 0x2ca10323, 0x8c1032a4, 0x81022050, -0xd00a0402, 0x0122402c, 0x0a040085, 0x534028d0, 0x000000a0, 0x00000000, -0x0586b01d, 0x184c161b, 0x964141f0, 0x4c161345, 0xc001a050, 0x031700c7, -0x61700dcc, 0x170584c1, 0xf0005c14, 0x02c7c001, 0x004d1e17, 0x67c001f0, -0x00000ac0, 0x00000000, 0x092fb819, 0x12fc04bf, 0x3ec009f2, 0x7c04bf01, -0xc169f052, 0x0c9f0327, 0x4bf03278, 0x9f012fc0, 0x740afc00, 0x0265442a, -0x0afc819b, 0x67c029f0, 0x00000e24, 0x00000000, 0x0227a018, 0x42fc08bf, -0x3cc14930, 0x7c10bf00, 0xc109f042, 0x01930067, 0x5a3016cc, 0x930663c1, -0xf0324c20, 0x0424c34a, 0x027c049b, 0x60c049b0, 0x00000e00, 0x00000000, -0x0387081c, 0x00740a1d, 0x805021b0, 0x5c021d0a, 0x4021d000, 0x1e114087, -0x7150146c, 0x15008740, 0xd039453e, 0x00854061, 0x00740211, 0x60414110, -0x00000c60, 0x00000000, 0x0023a010, 0x5234048d, 0x20400810, 0x34148d14, -0x4008d002, 0x008105a3, 0x08904a04, 0x81012741, 0xd0020400, 0x05204518, -0x52341c89, 0x48402890, 0x00000400, 0x00000000, 0x0825a818, 0x0274009d, -0x24400990, 0x54109d01, 0x4009d282, 0x00910027, 0x01d00064, 0x95042740, -0xd2824440, 0x00254009, 0x2a742095, 0x60400910, 0x00000600, 0x00000000, -0x3067a805, 0x1e7c139f, 0xa4c00930, 0x74289f00, 0xc409f24e, 0x00934027, -0x41b0004c, 0x830023c0, 0xf08a4c00, 0x0024c009, 0x0a7c009b, 0x149009b0, -0x00000e20, 0x00000000, 0x00a58014, 0x127c049c, 0x27c00df0, 0x5c019f00, -0xc009f026, 0x009f0027, 0x9170007c, 0x9f1227c8, 0xf2437c00, 0x0827c139, -0x067c009b, 0x4bc009f0, 0x00000600, 0x00000000, 0x00050814, 0x807c021f, -0x860240f0, 0x7c201301, 0xc001f008, 0x40030801, 0x2132100c, 0x131004d0, -0x30085c00, 0x0006c801, 0x887c2013, 0x43c001f0, 0x00000420, 0x00000000, -0x0014a014, 0x4574007d, 0x5d4815d0, 0x74007101, 0x4005d001, 0x005b0014, -0xa3100cc5, 0x75001c41, 0x160d4400, 0x00144017, 0x01748051, 0x534005d0, -0x00000200, 0x00000000, 0x0032a014, 0x037401c9, 0x32400cd0, 0x3480c110, -0x400cd883, 0x00c10031, 0x1c100305, 0xc1003040, 0x10071400, 0x08365425, -0x037400c1, 0x53400dd8, 0x00000a00, 0x00000000, 0x08388005, 0x03b442ad, -0x79502ed0, 0xb400e100, 0x405cd013, 0x04c90138, 0x1f122b14, 0xe5023848, -0x1446c488, 0x1038502e, 0x23b400e1, 0x07404ed8, 0x00000220, 0x00000000, -0x00781015, 0x06bc01ef, 0x7ac01cd0, 0xbc012300, 0xc01ef01f, 0x01e32071, -0x1e34478d, 0xf34378c1, 0x30a79c05, 0x417ed016, 0x07bc01e3, 0x47c0bef0, -0x00000040, 0x00000000, 0x0235b810, 0x827c001f, 0x17c269f0, 0x7c80df40, -0x408df003, 0x84df0137, 0xcdf29364, 0xdb00b7c0, 0xf2033c00, 0x07b7c00d, -0x037c22df, 0x43c02df0, 0x00000620, 0x00000000, 0x007ba800, 0x26cc01f3, -0x5fc03ff2, 0xfc81ff00, 0xc01f7027, 0x13f304fd, 0x1f3007cc, 0xf3007fc0, -0x3004cc01, 0x087fc09f, 0x87cc93f3, 0x00c01f30, 0x00000400, 0x00000000, -0x08399015, 0x828408ab, 0x2840aed0, 0xf400ed02, 0x400f10c3, 0x10e10038, -0x4e501384, 0xe1213b40, 0x10008404, 0x013b40ce, 0x038c00fb, 0x54680e14, -0x00000460, 0x00000000, 0x063d0000, 0x428400e1, 0x184006d8, 0xb4002d00, -0x400e5003, 0x00e10031, 0x0e110384, 0xe1203b40, 0x9020a420, 0x083b440a, -0x03a400e1, 0x00400e10, 0x00000400, 0x00000000, 0x10332004, 0x02040201, -0x004000d0, 0x3406cd00, 0x440c1007, 0x45c14030, 0x3c521704, 0xc100f340, -0x92012540, 0x00334208, 0x0b0000c9, 0x10400c11, 0x00000400, 0x00000000, -0x0079a035, 0x074d0041, 0x24d00df0, 0xfc00df00, 0xc00f7003, 0x03f3003d, -0x8d344f4d, 0xf3063fc1, 0xb0036c00, 0x003fc235, 0x1fed00f3, 0x54d00f20, -0x00000620, 0x00000000, 0x00370001, 0x037c00df, 0x31c024f0, 0x3c001f00, -0xc40cf003, 0x20cf0037, 0x0df0037c, 0xcf0037c0, 0x72475c00, 0x0037c059, -0x031c00df, 0x07c00df0, 0x00000c00, 0x00000000, 0x803f0080, 0x02cc1173, -0x2cc03ff0, 0xcc002300, 0xc00f0043, 0x00df003d, 0x0f38030c, 0xff003cc0, -0xf2131c00, 0x0037c00f, 0x434c00f3, 0x13c00f30, 0x00000c22, 0x00000000, -0x00362081, 0x02540351, 0x554011d0, 0x440b1102, 0x400db003, 0x00dd0834, -0x0c100344, 0xdd083440, 0x10024400, 0x0037411d, 0x036c80db, 0x17400d10, -0x00000802, 0x00000000, 0x0034a001, 0x07440611, 0x044009d0, 0x4402d110, -0x400d5003, 0x00dd2035, 0x1d520774, 0xdd083440, 0x90005600, 0x0033401d, -0x034400c1, 0x07400d10, 0x00000200, 0x00000000, 0x00342810, 0x03140091, -0x204000d0, 0x04200500, 0x400cd003, 0x00cd0030, 0x1c100735, 0xcd003052, -0x10010400, 0x00334008, 0x032600c9, 0x43400c10, 0x000000a0, 0x00000000, -0x0036a000, 0x024c0001, 0x04c001f0, 0x4d001340, 0xc00d7003, 0x00ff003d, -0x0d54037c, 0xdf083c40, 0xf0005c00, 0x003fc009, 0x034c40f3, 0x03c00e34, -0x00000ac0, 0x00000000, 0x003fa805, 0x02fc003f, 0x0fd002f0, 0xfc003b00, -0x800fb003, 0x40ff103f, 0x0ff003cc, 0xef003bc0, 0xf100fc00, 0x003fc00b, -0x03fc00ff, 0x17c00ff0, 0x00000e20, 0x00000000, 0x023fa003, 0x50ed003f, -0x37c083f0, 0xfc04d300, 0xc2cdb002, 0x06df01bf, 0x0f3019fc, 0xf3003cc0, -0xf023dc04, 0x023cd08e, 0x12fc04ff, 0x0cc04b31, 0x00000e00, 0x00000000, -0x01370801, 0x1845021d, 0xbb4081d2, 0x7402fb22, 0x40cf7032, 0x8edd00bf, -0x0d100874, 0xf106b440, 0xd003441e, 0x0130404d, 0x227402dd, 0x0c402d10, -0x00000c20, 0x00000000, 0x0033a011, 0x4134020d, 0x334000d0, 0x3416c10d, -0x400cd140, 0x00cd0333, 0x1c101914, 0xc1813444, 0xd0131404, 0x0030600c, -0x023408cd, 0x4c428c12, 0x00000e80, 0x00000000, 0x0035a803, 0x0154081d, -0x374401d0, 0x7440d910, 0x400dd006, 0x40dd0037, 0x1d100174, 0xd1003442, -0xd0034400, 0x0035410d, 0x027400dd, 0x0c404d11, 0x00000620, 0x00000000, -0x0037a802, 0x0b7d101f, 0x37c03df0, 0x7c00d300, 0xc00db047, 0x00dd0037, -0x0c310938, 0xd30034d0, 0xf0035c00, 0x0034d08c, 0x027c00df, 0x08c00934, -0x00000e22, 0x00000000, 0x203d8007, 0x036c817f, 0x3fc09df2, 0xfc00ff00, -0xc20d5203, 0x80ff003f, 0x0ff000fc, 0xdf003fc0, 0xf00bfc00, 0x003ec01f, -0x163c00df, 0x1fc21ef8, 0x00000600, 0x00000000, 0x02350802, 0x096c009f, -0x31d02134, 0x7c80d308, 0xd00d3401, 0x00d70034, 0x4db0095c, 0xd70037c0, -0xf0435c00, 0x4034c80d, 0x024c00d3, 0x08d00d30, 0x00000420, 0x00000000, -0x087ca013, 0x294500dd, 0x3c40a110, 0x7400f100, 0x000f1003, 0x00f5003c, -0x0d100144, 0xfd103b40, 0xd1034491, 0x003c500d, 0x025400f1, 0x6c40ad10, -0x00000200, 0x00000000, 0x0072a007, 0x000440dd, 0x30400090, 0x3400c100, -0x409c1002, 0x20c50030, 0x2c908104, 0xd5003340, 0xd00b1401, 0x0032500c, -0x830080c5, 0x1c402c10, 0x00000a00, 0x00000000, 0x00788004, 0x048409cd, -0xf8409290, 0xf409e102, 0x409e1037, 0x8de51070, 0x5e1024c4, 0xec007b41, -0xd2878405, 0x007a429e, 0x279421e5, 0x74001e14, 0x00000200, 0x00000000, -0x00301012, 0x2b0c00cf, 0x71c0fcb0, 0x3c85c301, 0xc05c3406, 0x01d70030, -0x9cb0290c, 0xc70173c0, 0xf21f1c01, 0x2832c88c, 0x030c00c7, 0x48c00830, -0x00000040, 0x00000000, 0x003db802, 0x03dc00ff, 0x37e00d70, 0x3c0aff42, -0xc08df083, 0x38df00b7, 0x0ff0a3ae, 0xde0237c0, 0xf0237c10, 0x023dc08f, -0x03fc10fb, 0x0bc00af0, 0x00000660, 0x00000000, 0x0037a015, 0x034c001f, -0x36c00df0, 0x6c08d301, 0xc04d3082, 0x00df033c, 0x2db0034c, 0xd30237c0, -0x311b4c06, 0x0034c04c, 0x02fc01d3, 0x57c00d30, 0x00000e00, 0x00000000, -0x00b98812, 0x03ac006d, 0xb8000ed0, 0x8404c105, 0x42cc1003, 0x04ed1138, -0x0e100094, 0xc1013f41, 0x1053c40c, 0x00bd40ce, 0x02b405e1, 0x4f400e10, -0x00000624, 0x00000000, 0x00790003, 0x0f8503ad, 0x71401ed0, 0x0401e100, -0x40de1046, 0x05ed007a, 0x9e1007c4, 0xe1007b40, 0x5037a401, 0x007a40ff, -0x063400e1, 0x07401a10, 0x00000400, 0x00000000, 0x00332812, 0x436400cd, -0x31400dd0, 0x0400c100, 0x400c1403, 0x00cd0036, 0x4c100314, 0xc1003340, -0x50132440, 0x1037445d, 0x223400c1, 0x4b400810, 0x00000c20, 0x00000000, -0x0015a817, 0x01cc007f, 0x17d0f7f0, 0xac005300, 0xc0053005, 0x005f0016, -0x333409cc, 0x63001fc1, 0x704ced00, 0x40168033, 0x053c0053, 0x5fc00538, -0x00000620, 0x00000000, 0x00070012, 0x007c041f, 0x02c001f0, 0x7c801f00, -0xc001f000, 0x401f0005, 0x2170047c, 0x1f0007c4, 0x90005e00, 0x0005c001, -0x007c001f, 0x4bc021f4, 0x00000c00, 0x00000000, 0x00230810, 0x0a4c0083, -0x24c00930, 0x4c008300, 0xc0283402, 0x00930026, 0x31b0020c, 0x9b2023c0, -0x30804c05, 0x0024c401, 0x024c0083, 0x40d00870, 0x00000c20, 0x00000000, -0x40a62001, 0x0a440091, 0x24540914, 0x44009110, 0x40091002, 0x80910024, -0x01300244, 0x91002744, 0x10004400, 0x00244001, 0x0a440091, 0x04407910, -0x00000800, 0x00000000, 0x00a4a018, 0x0a440091, 0x64401910, 0x44489100, -0x68091002, 0x00810026, 0x01900244, 0x99002740, 0x10040500, 0x00244001, -0x22440091, 0x60404950, 0x00000200, 0x00000000, 0x02202010, 0x22058881, -0x20408810, 0x44048100, 0x40881072, 0x88816320, 0x0c102204, 0x91022340, -0x14220608, 0x02204088, 0x02040081, 0x40400810, 0x00000080, 0x00000000, -0x2586b01d, 0x584c5603, 0x04cb6030, 0x4d011105, 0xc1613018, 0x160320c6, -0x41b0584d, 0x1b0587c1, 0x32584c16, 0x4084d161, 0x514c1413, 0x74c14170, -0x00000ac0, 0x00000000, 0x0927b819, 0x12fc04bf, 0x27c04ff0, 0xfc1c9f45, -0xc249f012, 0xa49f0327, 0x0b7012bc, 0x9e0127c8, 0xf012fc04, 0x01a7c04b, -0x02fc009f, 0x67c00bf0, 0x00000e64, 0x00000000, 0x00afa018, 0x8acdc29f, -0x2fc04bf0, 0x6c3cb308, 0xc86b321a, 0x849f00a7, 0x1bf2224c, 0xa320afc1, -0x301ec014, 0x00a4c879, 0x02fc00b0, 0x63c00b30, 0x00000e00, 0x00000000, -0x0807081c, 0x0844020d, 0x874161d0, 0x04461115, 0x40211000, 0x841d0283, -0x01d0102c, 0x11010340, 0xb0184402, 0x11845000, 0x08740a1b, 0x71c02114, -0x00000c20, 0x00000000, 0x01a3a010, 0x9a04028d, 0xb34088d0, 0x64008100, -0x40685c1a, 0x128d0123, 0x18d00a14, 0x8100a760, 0x5a364414, 0x01a04078, -0x0a340081, 0x4b402c10, 0x00000e80, 0x00000000, 0x0025a818, 0x4245028d, -0x274009d0, 0x44209100, 0x4009500a, 0x009d0027, 0x19d00a74, 0x91202760, -0x99064420, 0x00244019, 0x02740099, 0x61401910, 0x00000620, 0x00000000, -0x0027a805, 0x064d009f, 0x27c039f0, 0x6c809340, 0xc0097402, 0x009f0027, -0x09f0065c, 0x930027c0, 0x70020f00, 0x0024c808, 0x023c0093, 0x17c00930, -0x00000e20, 0x00000000, 0x00258014, 0x167d009f, 0x23c039f0, 0x7c009f10, -0xc009b002, 0x008f0027, 0x09f0266c, 0x9f4027c0, 0xf0427c00, 0x0023c009, -0x427c009f, 0x59c009f0, 0x00000600, 0x00000000, 0x01050814, 0x006c001f, -0x07c06130, 0x7c000704, 0xc0013008, 0x00130006, 0x4130007c, 0x030005c0, -0xf0006c04, 0x0004d001, 0x006c801b, 0x53c01130, 0x00000420, 0x00000000, -0x005ca014, 0x01c4005d, 0x1f403711, 0x34015100, 0x40050401, 0x00510015, -0x071081f0, 0x71019840, 0x7009c402, 0x00144007, 0x09f41151, 0x53400714, -0x00000200, 0x00000000, 0x0072a014, 0x072500cd, 0xb3000c12, 0x3409c580, -0x400c9003, 0x00c10030, 0x28100334, 0xc1013340, 0xd0032408, 0x8032400c, -0x212401c9, 0x53400410, 0x00000a00, 0x00000000, 0x0c388005, 0x0d8404ed, -0x3f402610, 0xb440e100, 0x401a9003, 0x04e10079, 0x161837b4, 0xa1003a60, -0x10038400, 0x0132404e, 0x013400e1, 0x17400610, 0x00000200, 0x00000000, -0x00581015, 0x072c05ef, 0x7fc01a34, 0xbc01a710, 0xc41cb017, 0x07e1007a, -0x1a3007bc, 0xe3007bc0, 0xf007ac01, 0x04fac03e, 0x04ac01eb, 0x57c01e30, -0x00000040, 0x00000000, 0x2015b810, 0x017d38df, 0x37c001f0, 0x7c009f00, -0xc00d714b, 0x02df42b7, 0x00f00b7c, 0xdf0035c0, 0xf0037c00, 0x01b5c04d, -0x007c00df, 0x43c005f0, 0x00000660, 0x00000000, 0x006fa000, 0x86ec4df3, -0x4fc01f30, 0xac81d340, 0xc01f2c47, 0x03f302fc, 0x91202f4c, 0x7f237cc0, -0xf007c801, 0x007cc03f, 0x04fc09b1, 0x03c01ff0, 0x00000e00, 0x00000000, -0x20b98015, 0x80ad08f1, 0x0f400c11, 0x0409e101, 0x484b5003, 0x00f1007d, -0x144007c4, 0x0d007043, 0xf0150404, 0x1038410e, 0x10b400a1, 0x574006d0, -0x00000620, 0x00000000, 0x02090000, 0x02a454e9, 0x0b408e90, 0xe408a020, -0x440e5003, 0x08e10038, 0x4b1803a4, 0x6d203a40, 0xd0638600, 0x0038400e, -0x02b480a1, 0x03400ad0, 0x00000400, 0x00000000, 0x80172804, 0x002500c9, -0x03400c90, 0x44009100, 0x400c582f, 0x00c10031, 0x20582b24, 0x4d003240, -0xd0850400, 0x0030402c, 0x02340081, 0x134000d0, 0x00000c20, 0x00000000, -0x4035a815, 0x036d21fb, 0x37c00db4, 0xec00d300, 0xc00d700b, 0x00f3403c, -0x28342fed, 0x5d0036c0, 0xf0070d00, 0x403cd02f, 0x017c0083, 0x57c005f0, -0x00000620, 0x00000000, 0x28a70001, 0x037c00d7, 0x17e00470, 0x7c00df00, -0xc009e403, 0x00df0837, 0x05f0035c, 0x1f0035c0, 0x70137c00, 0x0037c00d, -0x017c009b, 0x07c085f0, 0x00000c00, 0x00000000, 0x003f0880, 0x08cd00f3, -0xecc01bf0, 0xcc43df30, 0xc00f3043, 0x00fb003b, 0x0b3003bc, 0x132038c1, -0x3012fc01, 0x0038c10f, 0x088d00b3, 0x00d05b30, 0x00000c22, 0x00000000, -0x00e60081, 0x005400d1, 0x86c421d0, 0x6c00d909, 0x400d1083, 0x00d10037, -0x01120374, 0x1b013440, 0x50027403, 0x0036c00c, 0x88440095, 0x04402010, -0x00000800, 0x00000000, 0x4204a001, 0x0b4400c1, 0x344141d0, 0x44009d00, -0x400d1003, 0x40d91037, 0x01100374, 0x51820440, 0x10037434, 0x0034400d, -0x0b440491, 0x04402d14, 0x00000200, 0x00000000, 0x00002010, 0x031580c1, -0x124000d0, 0x24508900, 0x40081003, 0x00c10433, 0x45504334, 0x09030040, -0x50117400, 0x0032400d, 0x03040085, 0x40400410, 0x00000080, 0x00000000, -0x0002a000, 0x000c00f3, 0xa4c001f0, 0xcc0b9f02, 0xc40d1403, 0x00fb007f, -0xd93407f4, 0x538544c9, 0x30367c08, 0x0038c00e, 0x024c0093, 0x00c00130, -0x00000ac0, 0x00000000, 0x000f9805, 0x00fc00ff, 0x4cc113f0, 0xdd41bb01, -0xc11ff047, 0x11ff0037, 0x52b003fc, 0x7f0147c4, 0xf0347c05, 0x003fc00f, -0x02fc00bf, 0x17c003f0, 0x00000e60, 0x00000000, 0x000fa803, 0x02bc00ff, -0x2fc00bb0, 0xfc006300, 0xc04f32a0, 0x20bf022d, 0x02f003cc, 0xef003ec0, -0x7011fc00, 0x010cc003, 0x03cd0473, 0x0fc00fb0, 0x00000e00, 0x00000000, -0x00270801, 0x004400fd, 0x36400810, 0x7400d108, 0x408d1403, 0x009d2033, -0x491013c5, 0xdd003440, 0xd2097400, 0x00b5422d, 0x03540251, 0x07400d10, -0x00000c20, 0x00000000, 0x0803a211, 0x021400c5, 0x314208d2, 0x34800100, -0x400c1013, 0x008d0023, 0x04504304, 0xcd007363, 0x50093401, 0x02015080, -0x03240841, 0x47400c90, 0x00000e80, 0x00000000, 0x0045a803, 0x104400dd, -0x364049d0, 0x74009142, 0x420d1011, 0x00dd0037, 0x45500344, 0xdd887540, -0xd0017021, 0x0035400d, 0x03740811, 0x0f400d90, 0x00000620, 0x00000000, -0x00c78002, 0x1a5400d7, 0x33c409f0, 0x7c21d200, 0xc00d3003, 0x408f0015, -0x0d74034c, 0xdf0037c0, 0x7003fc00, 0x400dc203, 0x036c0253, 0x0bc00db0, -0x00000e20, 0x00000000, 0x000d8007, 0x069800df, 0x7fc00b20, 0xf8037f00, -0xc00df007, 0x02bf101f, 0x1f3083fc, 0xff203cc2, 0xf003fc20, 0x003bc00e, -0x038c015f, 0x1fc00f72, 0x00000600, 0x00000000, 0x00450002, 0x2a6c84d3, -0x75c049b1, 0x5c00df00, 0xd00d300a, 0x00930054, 0x2530039c, 0xdf1136c0, -0x7047cc00, 0x000fc103, 0x034c225f, 0x08c00d70, 0x00000420, 0x00000000, -0x4014a013, 0x064440f1, 0x76c06d50, 0x450e5d00, 0x400fb003, 0x20d14854, -0x050003c4, 0xdd003400, 0x100b441b, 0x0037405d, 0x03ec001d, 0x4c410fb0, -0x00000200, 0x00000000, 0x0012a007, 0x072402d1, 0xb0602800, 0x44400d01, -0x409c1003, 0x52810000, 0x0d100314, 0xcd00f050, 0x90091700, 0x04034020, -0x0304095d, 0x1c401c10, 0x00000a00, 0x00000000, 0x0a788004, 0x068401e1, -0x7a401a51, 0x8401ed10, 0x401e9006, 0x81e10258, 0x1e9007e4, 0xed807840, -0x18059481, 0x007b421e, 0x07a609ed, 0x10400e90, 0x00000200, 0x00000000, -0x00801012, 0x212c10c1, 0x31c0c830, 0x5c080f00, 0xc00c301b, 0x00830080, -0x0430031c, 0xcd043040, 0xb0011c00, 0x0003c000, 0x034c02cf, 0x48c08d70, -0x00000040, 0x00000000, 0x0029b802, 0x20fc00fe, 0x3fe08f70, 0xfc00ff00, -0xc00ff003, 0x00ef401f, 0x0772039c, 0xfd0035c0, 0xf001ac42, 0x003fc00f, -0x43fc00ff, 0x0bc04ff0, 0x00000660, 0x00000000, 0x0053a015, 0x035c88d3, -0xb38009f1, 0x7c009300, 0xc00df801, 0x00934053, 0x1db013fc, 0xc70037c0, -0x30034c0a, 0x600fc003, 0x834c00d3, 0x57c00df2, 0x00000e00, 0x00000000, -0x00398012, 0x03840cfb, 0x3b400ad0, 0xb4406102, 0x405ed003, 0x00e1081b, -0x0e814bf4, 0xed03bb40, 0x50030400, 0x003b400e, 0x138480e5, 0x4b402ed0, -0x00000620, 0x00000000, 0x04490003, 0x059625e1, 0x7b403a50, 0xb401a100, -0x449ed007, 0x01a1005f, 0x061013b4, 0xed007b60, 0x10079507, 0x00434012, -0x078401c1, 0x0f401e50, 0x00000400, 0x00000000, 0x00332812, 0x091420d9, -0x73441cd0, 0x74124942, 0x4a0cd010, 0x00c10413, 0x14100374, 0xcd003340, -0x501b1400, 0x0037400c, 0x030402d5, 0x4b400cd0, 0x00000c20, 0x00000000, -0x001da817, 0x0ddc0051, 0x13c01572, 0x74135300, 0xc005f80d, 0x005330df, -0x27b001fc, 0x2f040bc0, 0x10095c00, 0x0017c005, 0x014c0273, 0x5fc00570, -0x00000620, 0x00000000, 0x01070012, 0x3024001f, 0x87c021d0, 0x7c401700, -0xc001f020, 0x001f1207, 0x91f0007c, 0x1f0007c0, 0xf0002804, 0x000fc002, -0x007d101f, 0x4bc801f0, 0x00000c00, 0x00000000, 0x00270810, 0x024c0097, -0x75c08870, 0x4c008300, 0xc0293102, 0x019f0227, 0x0930026c, 0x134405c0, -0x30064c00, 0x0064d019, 0x024d0093, 0x43c00970, 0x00000c20, 0x00000000, -0x00262001, 0x2254029d, 0xe4405910, 0x6c0191c0, 0xc0191002, 0x818d0025, -0x09b00245, 0x1106c444, 0x10066c20, 0x02644019, 0x02440195, 0x074009b0, -0x00000800, 0x00000000, 0x0064a018, 0x0245109d, 0x256809d0, 0xc6049502, -0x40091002, 0x089d0027, 0x0c180244, 0x11800440, 0x10224406, 0x002c408b, -0x02040491, 0x63404950, 0x00000200, 0x00000000, 0x02202010, 0x0314088d, -0x30408810, 0xa400a100, 0x41481422, 0x008d0021, 0x88902204, 0x91022040, -0x10062488, 0x00a8402a, 0x0a040285, 0x43408890, 0x00000080, 0x00000000, -0x0586a01d, 0x5044021f, 0x05c161f1, 0xcc141510, 0x40413008, 0x005f0287, -0x2130084c, 0x110585c0, 0x34004c16, 0x000cc001, 0x804c0013, 0x77c02170, -0x00000ac0, 0x00000000, 0x092f9819, 0x02fc869f, 0x27c04bf2, 0x7c00bf00, -0xc009f012, 0x00bf006f, 0x4bf01a7c, 0xbf012f40, 0xf00a7c04, 0x00a7c029, -0x0a7c02bf, 0x67c069f0, 0x00000e60, 0x00000000, 0x050ba018, 0x02ec18ab, -0x2cc14b30, 0x4c14bf00, 0xc9083022, 0x00a30027, 0x2830025c, 0xa200ecc0, -0xf016fc15, 0x04e8c059, 0x1a4c44b3, 0x63c0cbb0, 0x00000e00, 0x00000000, -0x00c7081c, 0x00444211, 0x06c06110, 0x44021d00, 0x40211000, 0x00112103, -0x01101044, 0x11004440, 0xd1087407, 0x01854160, 0x00440015, 0x73400110, -0x00000c20, 0x00000000, 0x4023a010, 0x0f240481, 0x20410850, 0x24009d00, -0x40081416, 0x20814c23, 0x48024a14, 0x8900a540, 0xd10a3410, 0x01205028, -0x1a241689, 0x43406890, 0x00000e80, 0x00000000, 0x2125a818, 0x02440091, -0x26621954, 0x64009d10, 0x40091a02, 0x01910023, 0x09920244, 0x51040553, -0xd0827604, 0x10254009, 0x0264009d, 0x63400998, 0x00000620, 0x00000000, -0x0467a805, 0x0a6c0093, 0x24c01976, 0x6c819f08, 0xe2093102, 0x00930027, -0xa834025c, 0x1b4001c0, 0xf8027c12, 0x0024c209, 0x026c049b, 0x17c009b2, -0x00000e20, 0x00000000, 0x00458014, 0x025c0097, 0x27c00830, 0x5d438f02, -0xcc0df092, 0x109f0037, 0x1970025c, 0x1f0206ca, 0xf0027c01, 0x4027d00d, -0x025c0597, 0x53c00970, 0x00000600, 0x00000000, 0x40850814, 0x047c0003, -0x47c081f0, 0x4d011f00, 0xc001f000, 0x001b0004, 0x21b0006c, 0x194106c4, -0x30004c32, 0x4400c180, 0x004c0013, 0x53c001f0, 0x00000420, 0x00000000, -0x0048a014, 0x09840571, 0x1f4027d0, 0x44067d00, 0x4105d001, 0x05615054, -0x07100144, 0x31080c00, 0x5001ec80, 0x041c5015, 0x01441151, 0x534005d0, -0x00000200, 0x00000000, 0x0032a014, 0x013440c1, 0x33412cd0, 0x4401cd00, -0x401cd003, 0x03c90070, 0x0c980344, 0xc500f240, 0x9403240b, 0x0030400c, -0x034400d1, 0x534008d0, 0x00000a00, 0x00000000, 0x15388005, 0x018400e1, -0x3b420ed0, 0x8400ed24, 0x401ed203, 0x00f95438, 0x0f121304, 0xf501bc40, -0x9806a601, 0x00380006, 0x23840181, 0x17400ad0, 0x00000200, 0x00000000, -0x01f81011, 0x05bd01e3, 0x7bc01ef0, 0x8d01ef00, 0x409ef017, 0x01eb0078, -0x3eb10f8d, 0xe7157ac1, 0xb0072c41, 0x1068c01a, 0x078d00e3, 0x57e01ef2, -0x00000040, 0x00000000, 0x0035b010, 0x815c00df, 0x37c005f1, 0x7c00cf20, -0xd26df003, 0x00d701b7, 0x2d70075c, 0xd21133c0, 0x72017808, 0x0027d921, -0x037c009f, 0x43c00bf0, 0x00000660, 0x00000000, 0x007ba000, 0x07fd01fc, -0x7fc097b0, 0xcc09ff20, 0xc01f7047, 0x217300ff, 0x1f3007fc, 0xff0c7cc0, -0xb007fc0b, 0x226dc0db, 0x0fcc01ff, 0x03c01bf0, 0x00000e00, 0x00000000, -0x04398815, 0x03ac06fb, 0x3b4086b0, 0xc41ced10, 0x400e4003, 0x00e1022b, -0x4e1003f4, 0xe9243840, 0x1002b44c, 0x0308408e, 0x039400bd, 0x57400a7a, -0x00000620, 0x00000000, 0x00390000, 0x019400e1, 0x3b600610, 0x8600ed00, -0x400e100b, 0x00e1003b, 0x0e5003b4, 0xed003800, 0x1003b400, 0x0028414a, -0x038400ed, 0x03400ed0, 0x00000400, 0x00000000, 0x10732820, 0x092400d9, -0x53420090, 0x0402cd00, 0x42085007, 0x40c10263, 0x2c500334, 0xcd8c7040, -0x90013402, 0x00006008, 0x031442cd, 0x13400840, 0x00000c20, 0x00000000, -0x00f5a811, 0x2f5c00d3, 0x17400531, 0xcd01df00, 0xc00d7003, 0x00534057, -0x2e7403fc, 0xdf00f4c0, 0xb0037c18, 0x01f4c011, 0x03c41bcf, 0x57c009d0, -0x00000620, 0x00000000, 0x04370001, 0x0f3d025f, 0x17c035f0, 0x7c02df02, -0xc00de023, 0x085f2007, 0x0d92033c, 0xdb0037d0, 0x740b7c22, 0x0137d101, -0x037c809f, 0x07c00970, 0x00000c00, 0x00000000, 0x003b0880, 0x074d01f3, -0x1c800f30, 0xcc50fd00, 0xc00ef003, 0x0073001c, 0x0fb003c4, 0xf3407ec3, -0x3015fc20, 0x002fc053, 0x03cd01f3, 0x00d00af0, 0x00000c22, 0x00000000, -0x00362085, 0x036501d5, 0x95481550, 0x4402cd14, 0x400dd003, 0x02411091, -0x0d100344, 0xd104b040, 0x10023402, 0x00234121, 0x03440195, 0x04401990, -0x00000802, 0x00000000, 0x0074a001, 0x62650491, 0x5540a410, 0x4403dd80, -0x408dd003, 0x065100d4, 0x0d900354, 0xd1013640, 0x1c0b6408, 0x00274801, -0x034404d1, 0x044089d0, 0x00000200, 0x00000000, 0x00302014, 0x03240045, -0x11400450, 0x04204d20, 0x400cc003, 0x00510005, 0x0d100314, 0xc1083040, -0x10033640, 0x40034000, 0x03040091, 0x40400890, 0x00000088, 0x00000000, -0x0036b000, 0x036c0093, 0x15c00531, 0x4d00df00, 0xc00df003, 0x00130010, -0x0fb0035d, 0xd30036c0, 0x30017c00, 0x2027c000, 0x03cc0093, 0x00c009f9, -0x00000ac0, 0x00000000, 0x003fb805, 0x03dc00ff, 0x0f8007f0, 0xfc002f00, -0xc00ff003, 0x003f001f, 0x0ef003ec, 0xff003fc0, 0xf002bc00, 0x000fc603, -0x83fe00bf, 0x97c00bf0, 0x00000e60, 0x00000000, 0x003da003, 0x20cc002b, -0x3ec08330, 0xfc08f310, 0xc40f7053, 0x00f7023c, 0x8e3053cc, 0xf3023cc0, -0xf0034c08, 0x333cc00f, 0x73fc08fb, 0x0cd003b0, 0x00000e00, 0x00000000, -0x20330801, 0x18040011, 0xbcc88530, 0xf424f105, 0x48cd10cb, 0x56f1013c, -0x0d100bc4, 0xf10037c0, 0x92535424, 0x11bc480d, 0x0b7484d5, 0x04410110, -0x00000c20, 0x00000000, 0x40332011, 0x091414c1, 0x33620050, 0x1600c122, -0x410c1413, 0x08c42032, 0x5d110305, 0xc5113048, 0xd0072404, 0xd1b0401d, -0x033404c1, 0x44404190, 0x00000e80, 0x00000000, 0xa035a803, 0x00550011, -0x364465d0, 0x7600d120, 0x430d1003, 0x00d51036, 0x1d180344, 0xd508b740, -0x90077400, 0x0034401d, 0x037400dd, 0x0c400910, 0x00000620, 0x00000000, -0x00378802, 0x4e5c8013, 0x36403170, 0x5e40d340, 0xd03d3003, 0x60d70036, -0x0c34034c, 0xd74074c0, 0xf0036c00, 0x0034d00c, 0x037c00db, 0x08c011b0, -0x00000e20, 0x00000000, 0x003d8007, 0x24ac103f, 0x3dc01730, 0x7c00ff04, -0xc886b303, 0x00fb0035, 0x0ff003fc, 0xfb0a3ec0, 0xf003dd00, 0x0037c00f, -0x03bc00f2, 0x1fc033f0, 0x00000600, 0x00000000, 0x00350802, 0x035c0017, -0x37c00930, 0x2c01df20, 0xc02d3413, 0x00c34030, 0x0d30435c, 0xd300b5c0, -0xb0237c00, 0x4037c80d, 0x037c00db, 0x0bc001f0, 0x00000420, 0x00000000, -0x00348013, 0x004406d9, 0xfe80bd71, 0xc500fd00, 0x4005000f, 0x08f3403c, -0x0d108b84, 0xfb083440, 0xd0877420, 0x003f40dd, 0x03f400f1, 0x4f4008d0, -0x00000200, 0x00000000, 0x0036a007, 0x40250019, 0xf404a890, 0x1400c900, -0x400c1003, 0x00c90033, 0x0c900716, 0xd1003640, 0xd0873400, 0x0037400c, -0x033400c1, 0x1f4000d0, 0x00000a00, 0x00000000, 0x02788004, 0x07a50139, -0x7a441b50, 0x8409cd24, 0x401c5247, 0x05c1027a, 0x1e9067c4, 0xe9027f50, -0xc087b401, 0x027b421e, 0x07b401e1, 0x134012d0, 0x00000200, 0x00000000, -0x00301012, 0x013d00c3, 0x31c28990, 0x1e00cf00, 0xd00c1023, 0x40cb0033, -0x0cb0031c, 0xc30232c0, 0xb0073c00, 0x0033c20c, 0x033c00c3, 0x4bc004f0, -0x00000040, 0x00000000, 0x483db802, 0x23dc8837, 0x3fc889f0, 0x5c00ff06, -0xc08fb043, 0x24ff003d, 0x0d70033c, 0xdf0230c8, 0xf00b7808, 0x003fc00f, -0x23fc10f7, 0x0bc08ff0, 0x00000660, 0x00000000, 0x0037a015, 0x064c0003, -0x77c20530, 0x4d04db04, 0xc001f01b, 0x12db0134, 0x4d30730c, 0xd20134c0, -0x320f4c04, 0x0034807d, 0x034c00d3, 0x54c001f0, 0x00000e00, 0x00000000, -0x003d8812, 0x03050021, 0x3b020610, 0x8412f100, 0x500ad053, 0x04e103bc, -0x2e100394, 0xe144b841, 0xb01b8510, 0x0332c0ce, 0x039400e1, 0x4bc003d0, -0x00000620, 0x00000000, 0x00790003, 0x87840131, 0x7b421e58, 0xa405e101, -0x6400d007, 0x09e98878, 0x5e9407e4, 0xc1297b40, 0x9887c4ad, 0x0378409e, -0x27b405c1, 0x0c4016d0, 0x00000400, 0x00000000, 0x10332812, 0x030433c1, -0x33412c58, 0x2400c110, 0x4109d203, 0x00cd8030, 0x0d900334, 0xc101b340, -0x98030400, 0x0032400c, 0x033400c1, 0x4b400dd0, 0x00000c20, 0x00000000, -0x0015a817, 0xa9cd0763, 0x17407774, 0x6c005b40, 0xd237d001, 0x007b0014, -0x03b001ec, 0x6301cfc0, 0xb000cd00, 0x0014c003, 0x017c4053, 0x5cc007f0, -0x00000620, 0x00000000, 0x60070012, 0x007c001f, 0x87c001b3, 0x5c000f00, -0xc881f000, 0x00111003, 0x1170001c, 0x1f000450, 0xf0847e00, 0x4003c011, -0x0050001f, 0x4ac001f0, 0x00000c00, 0x00000000, 0x00270810, 0x064d0193, -0x27c809f0, 0x6c009f00, 0xc009f006, 0x43830026, 0x0134024c, 0x931007c0, -0xf0004c20, 0x0027c001, 0x824c0083, 0x40c409f3, 0x00000c20, 0x00000000, -0x00262001, 0x06444191, 0xa74009d0, 0x44029d00, 0x4009d026, 0x01918024, -0x01102e54, 0x9b000040, 0x30004400, 0x00274001, 0x02540091, 0x050009d0, -0x00000800, 0x00000000, 0x0020a018, 0x12454499, 0xa7420950, 0x66109d00, -0x4009d002, 0x00916026, 0x01100244, 0x99080660, 0x50005400, 0x00274011, -0x02460091, 0x604009d0, 0x00000200, 0x00000000, 0x02202010, 0x22040899, -0x234088d0, 0x040c8d02, 0x41c8d002, 0x0c818120, 0x88102216, 0x99022440, -0x18220404, 0x02234098, 0x32140881, 0x414088d0, 0x00000080, 0x00000000, -0x0086b01d, 0xd84c021b, 0x83c36172, 0x6c031f05, 0xc061d050, 0x030102c6, -0x6130594c, 0x1b0586c5, 0x60585c0b, 0x4587c161, 0x0c4c0213, 0x74c021f0, -0x00000ac0, 0x00000000, 0x6127b819, 0x12fc04b7, 0x27c04bf0, 0x7c0c9f01, -0xc04bf052, 0x2c9f0a67, 0x4af0127c, 0x9f012ad0, 0x3012bd09, 0x0127c04a, -0x327c069f, 0x67c04bf0, 0x00000e60, 0x00000000, 0x00a7a018, 0x0acc02a3, -0x2cc04bf0, 0xcc5cbf03, 0xc0c9f00a, 0x0cb70326, 0x9d3012e8, 0x9101e4c1, -0x3117cc14, 0x01a4c07f, 0x524c0893, 0x634008f0, 0x00000680, 0x00000000, -0x4003001c, 0x08448011, 0x0451e1d0, 0x04420d01, 0x4060d088, 0x46110184, -0x20100c44, 0x11010440, 0x50004c06, 0x01004051, 0x10440811, 0x734041d0, -0x00000c20, 0x00000000, 0x0123a010, 0x1a1444c1, 0xa04008d0, 0x04048d00, -0x5088d01a, 0x028500a0, 0x48105b24, 0x8100e040, 0x105a2410, 0x41a0407d, -0x42040481, 0x434118d0, 0x00000c80, 0x00000000, 0x4021a818, 0x02540181, -0x246008d0, 0x44009d00, 0x4009d002, 0x20910024, 0x28100044, 0x91006040, -0x501a0400, 0x00244011, 0x02440091, 0x634009d0, 0x00000620, 0x00000000, -0x0027a805, 0x065d0693, 0x24c049f0, 0x4d009f00, 0xd009f002, 0x00970024, -0x0934002c, 0x93402490, 0x30026d00, 0x0024d001, 0x02450093, 0x17c019f0, -0x00000e20, 0x00000000, 0x00258014, 0x226c009f, 0x27c009f0, 0x7c008f08, -0xc009f042, 0x008f0021, 0x99f0007c, 0x8f0027c4, 0xf0027c20, 0x0023c001, -0x827c009f, 0x53c039f1, 0x00000600, 0x00000000, 0x00050814, 0x104c0313, -0x04c121f0, 0x4c041f02, 0xc0003000, 0x081f0004, 0x2132044c, 0x1f0004c0, -0xf1104c00, 0x4005c011, 0x004c0013, 0x50c001f0, 0x00000420, 0x00000000, -0x4014a014, 0x19c40071, 0x5c4007d0, 0xc4007d00, 0x4005100d, 0x03790015, -0x071000c4, 0x5d001c40, 0xd201c500, 0x00174002, 0x01540051, 0x504005d0, -0x00000200, 0x00000000, 0x0032a014, 0x070500c1, 0x32402cd0, 0x0400cd00, -0x400c100f, 0x10cd0030, 0x0c100304, 0xcd003340, 0xd00b0500, 0x0031400c, -0x030400d1, 0x50400cd0, 0x00000a00, 0x00000000, 0x21388805, 0x038480b1, -0x3a400cd0, 0x8402ad00, 0x401e100f, 0x00fd0139, 0x4e101304, 0xed013b40, -0x90038400, 0x013b404e, 0x039404c1, 0x14409fd0, 0x00000200, 0x00000000, -0x45780015, 0x078c01e3, 0x5ad01ef0, 0x8d01ef10, 0xc04e3007, 0x01ef08f8, -0x5e34178c, 0xcf02fbd0, 0xd0078c05, 0x00f9c01e, 0x178c05e3, 0x54d05ef0, -0x00000040, 0x00000000, 0x03b5a810, 0x837d009f, 0x35c00df0, 0x7c009f00, -0xc02df483, 0x00cb0037, 0xedf42b7d, 0xdf0034c0, 0xf0037c68, 0x0037c14d, -0x277c08df, 0x43c01df0, 0x00000660, 0x00000000, 0x407fa000, 0x04cc01e3, -0x6cd01730, 0xdc01f300, 0xc5bd3005, 0x01e3007c, 0x3f300fcc, 0xf3007cc0, -0x3027dc01, 0x00ffc11f, 0x13fc01f3, 0x03c01f30, 0x00000e00, 0x00000000, -0x003d8815, 0x00ecca61, 0x38c18710, 0xc400e100, 0x401f1001, 0x00610238, -0x0e100384, 0xf1063850, 0xf023ec00, 0x023bc10e, 0x03fc00e1, 0x57400eb0, -0x00000620, 0x00000000, 0x00390000, 0x009410b1, 0x02400610, 0x94086100, -0x400e9001, 0x00b10030, 0x0e100304, 0xe1003a40, 0x1803b400, 0x003b400e, -0x03b400e1, 0x03400e10, 0x00000400, 0x00000000, 0x40372804, 0x0c340301, -0x30400414, 0x24004120, 0x400c9001, 0x00110034, 0x8c100304, 0xc100b240, -0x500f2480, 0x8035403c, 0x031400d1, 0x13412d10, 0x00000c20, 0x00000000, -0x003da815, 0x475c0153, 0x36400d30, 0x5c005300, 0xd00fb403, 0x00d3403c, -0x0e34030c, 0xf3407ed0, 0x10273c00, 0x403f402c, 0x03f400f3, 0x57c02f10, -0x00000620, 0x00000000, 0x00370001, 0x096c121f, 0x07c020f0, 0x5c001f20, -0xc10d7081, 0x00df0037, 0x0df0037d, 0xcf0435c3, 0xf0227c00, 0x0037c00d, -0x037c00df, 0x07c80df0, 0x00000c00, 0x00000000, 0x003f0880, 0x46cc0073, -0x58c00ff0, 0xcc004300, 0xc00ef007, 0x00f6003c, 0x0f3407cc, 0xf3003cc0, -0x300fcd00, 0x003cc10f, 0x03cc00f3, 0x00c00ff0, 0x00000c22, 0x00000000, -0x00362081, 0x60556001, 0xc44191d2, 0x450a1102, 0x420d7024, 0x00db8834, -0x0d104f6c, 0xd1083140, 0x311e4420, 0x0035400d, 0x035400db, 0x05400dd0, -0x00000802, 0x00000000, 0x0034a001, 0x034440d1, 0x24400dd0, 0x40029104, -0x400dd003, 0x00d12034, 0x0d161344, 0xd1003444, 0x10014620, 0x0034401d, -0x034400d5, 0x04400dd0, 0x00000200, 0x00000000, 0x00302010, 0x01140051, -0x004000d0, 0x04408120, 0x510c5085, 0x00490030, 0x0d100364, 0xc1003160, -0x10804400, 0x0030401c, 0x030400c9, 0x41000cd0, 0x00000080, 0x00000000, -0x003eb000, 0x024c0091, 0x04400dd0, 0x4c001300, 0xc05ff003, 0x00910034, -0x0f10034c, 0xd34038c0, 0x31294c00, 0x2038d00d, 0x034d00d7, 0x00c40df0, -0x00000ac0, 0x00000000, 0x403fb805, 0x00fc003f, 0x0fc003f0, 0xfc003f00, -0xc20ff081, 0x003b003f, 0x0ef003fc, 0xff003f80, 0x7004fc00, 0x003fc00f, -0x03fc00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x030b8003, 0x10cc0433, -0x1fc00a38, 0xfc043301, 0xc00f3030, 0x0473000b, 0x0f3000cc, 0x33400ec0, -0x3003bc80, 0x001fc28f, 0x02ec007f, 0x0ec00fb0, 0x00000e00, 0x00000000, -0x02870801, 0xab6c0ad1, 0x97400d18, 0x34b8d104, 0x400d501b, 0x02d10087, -0xad100144, 0x91243440, 0x1003f400, 0x0017404f, 0x024428dd, 0x04400c10, -0x00000c20, 0x00000000, 0x8103a011, 0x00040001, 0x12400810, 0x34040103, -0x400c1020, 0x08c10203, 0x0c500204, 0x45001640, 0x50033400, 0x0013404c, -0x0224c01d, 0x47400c90, 0x00000e80, 0x00000000, 0x0005a803, 0x036400d1, -0x17420d10, 0x7400d500, 0x000d5003, 0x00d14047, 0x0d514304, 0x95003440, -0x50037428, 0x0117400d, 0x0644301d, 0x0d400d90, 0x00000620, 0x00000000, -0x402fa802, 0x008c0033, 0x1ec09510, 0xfc003301, 0x400d3400, 0x0b530147, -0x0d740e4c, 0x170086c0, 0x74037c03, 0x0407c00d, 0x4e6c014f, 0x0bc00db0, -0x00000e20, 0x00000000, 0x002d8007, 0x03fc10ff, 0x1fc10ff0, 0xfc00fb28, -0xc00ff003, 0x004f000b, 0x0cb017fc, 0xbb083fc0, 0xb043fc00, 0x043fc00f, -0x02bc087f, 0x1ec00e70, 0x00000600, 0x00000000, 0x01610802, 0x005c0013, -0x10c61d32, 0x1c001300, 0xc00d3020, 0x00530024, 0x0d340a4c, 0x570014d0, -0x30030c08, 0x0007c00d, 0x0865005f, 0x09c00d34, 0x00000420, 0x00000000, -0x00a4a013, 0x474420d1, 0x14403d12, 0x6c0ad100, 0x400f100b, 0x005104a4, -0x2f112f44, 0x91017041, 0xb003c001, 0x0037400f, 0x2c540bdd, 0x4c40af10, -0x00000200, 0x00000000, 0x0002a007, 0x48340019, 0x30402c99, 0x06000000, -0x409c5044, 0x20c10121, 0x1c100305, 0x0449c041, 0x000b0406, 0x0213400c, -0x0204004d, 0x0d408c10, 0x00000a00, 0x00000000, 0x024c8004, 0x87a401e9, -0x70481e14, 0xa611c100, 0x401e1007, 0x21a10269, 0x1e107784, 0x61005c40, -0x90878405, 0x025b401e, 0x468419ed, 0x00401e10, 0x00000200, 0x00000000, -0x00001012, 0x003c041b, 0x30c00cb1, 0x1c000300, 0xc00c7000, 0x00c10021, -0x4c30334c, 0x471810c0, 0x30030c00, 0x1213e80c, 0x024c001f, 0x59c00c30, -0x00000040, 0x00000000, 0x080db802, 0x239c00f7, 0x3f800f72, 0xfc80ff00, -0xd10ef003, 0x00bf082e, 0x0ff033fc, 0x6f021bc0, 0xf003fd04, 0x021fc10f, -0x02dc20bf, 0x0bc18ff0, 0x00000660, 0x00000000, 0x1027aa15, 0x006d0013, -0x37c405b4, 0x4c001300, 0xc00db000, 0x005f4037, 0x0d32034c, 0x930004c0, -0xf0136c01, 0x0024c07d, 0x024d2013, 0x54c00d34, 0x00000e00, 0x00000000, -0x002d8812, 0x038400e1, 0x3b420e14, 0x9500e100, 0x400e5403, 0x80210038, -0x5e1003c4, 0xe1003850, 0xd04b8540, 0x002ec14f, 0x038400a1, 0x48404f10, -0x00000620, 0x00000000, 0x40690003, 0x04250101, 0x7b601e14, 0x84012100, -0x405c9104, 0x01650061, 0xde900784, 0xf1005862, 0xd017a401, 0x00f8401e, -0x05040101, 0x8e401e10, 0x00000400, 0x00000000, 0x00232812, 0x030600c1, -0x33681c14, 0x1400c140, 0x400c5403, 0x200104b0, 0x0d900305, 0xc1003460, -0xd0032400, 0x0072400c, 0x07040081, 0x4a420c10, 0x00000c20, 0x00000000, -0x0095a017, 0x816c8053, 0x17c02734, 0x4c405300, 0xc005b001, 0x0275009d, -0x05b409cc, 0x73001cd0, 0xf0016e28, 0x40d8c005, 0x49cc0373, 0x5ed00530, -0x00000620, 0x00000000, 0x04030012, 0x00bc002f, 0x03c18174, 0xfc003f00, -0xc001f000, 0x01170087, 0x0170407c, 0x1f4107c0, 0xe0005c00, 0x0047c001, -0x407c091f, 0x49c801f0, 0x00000400, 0x00000000, 0x00270010, 0x0e5c8997, -0x27c00930, 0x2d009340, 0xc0083002, 0x00930062, 0x0930025d, 0x932824c0, -0xf0027c41, 0x0027c009, 0x024c0097, 0x40c00930, 0x00000c20, 0x00000000, -0x50662001, 0x06440791, 0xa740a910, 0x45009120, 0x4019b002, 0x828142e4, -0x09140244, 0x9100a440, 0xd00274c1, 0x00274009, 0x02450091, 0x04500914, -0x00000080, 0x00000000, 0x0224a018, 0x42d400b5, 0x27600910, 0xc420a144, -0x40891002, 0x10d18426, 0x09500214, 0xd101b540, 0xd0027448, 0x00274009, -0x02040085, 0x60400810, 0x00000200, 0x00000000, 0x12202010, 0x028408a1, -0x23601810, 0x8408a102, 0x40089022, 0x04910120, 0x08d00204, 0xc1022150, -0xc0023008, 0x00274028, 0x42040881, 0x40404810, 0x00000080, 0x00000000, -0x0584301d, 0x50dc9615, 0x83c40130, 0xac960305, 0xc1413058, 0x0b030046, -0xe070285c, 0x134585c1, 0xf0517c02, 0x0287c541, 0x004c5015, 0x74c0d130, -0x00000ac0, 0x00000000, 0x212fb019, 0x027c849f, 0x27400be4, 0x7c049f41, -0xc009f012, 0x09bf822f, 0x193106fc, 0xaf212ac0, 0xf0027e04, 0x012fc009, -0x42fc00bf, 0x67c0c9f0, 0x00000e60, 0x00000000, 0x056f8018, 0x06cc09af, -0x27c00b30, 0x4e029306, 0xc04bb41a, 0x0093053f, 0x69300a4c, 0xb3052fc0, -0xf052fc02, 0x0224c129, 0x0a7c069f, 0x63c02930, 0x00000e00, 0x00000000, -0x0487001c, 0x8044201d, 0x43400130, 0xfd0b1100, 0x4081100c, 0x15010084, -0x52140444, 0x11410740, 0xd0087401, 0x01004071, 0x08740e1d, 0x7340a3b1, -0x00000c20, 0x00000000, 0x0023a010, 0x0a0502cd, 0x23400810, 0x8500a101, -0x400814a2, 0x08810061, 0xca1002c4, 0x85452340, 0xd0023600, 0x00284048, -0x1ab404ad, 0x43404a10, 0x00000e80, 0x00000000, 0x1025a818, 0x024480dd, -0x27402910, 0xf580b100, 0x40091002, 0x20818824, 0x0b1042c5, 0x95002748, -0xd2827480, 0x02244009, 0x0af408bd, 0x63400b90, 0x00000620, 0x00000000, -0x0827a805, 0x024d009f, 0x27c80934, 0x44009340, 0xc009b002, 0xa49340e5, -0x0930820c, 0x170027c0, 0xf1027640, 0x0024d009, 0x2e7c139f, 0x17c00930, -0x00000e20, 0x00000000, 0x00258214, 0x027c009f, 0x27c20970, 0x1d008f00, -0xc008f402, 0x809f0121, 0x09f0027c, 0x1b08a3c8, 0xf0027c02, 0x0027c009, -0x063c009f, 0x53c409f0, 0x00000600, 0x00000000, 0x01050814, 0x002c8003, -0x03c01134, 0xfc003700, 0xc001b000, 0x02130306, 0x033408cc, 0x132004c0, -0x74047c98, 0x000cc000, 0x00fc0237, 0x53c003f0, 0x00000420, 0x00000000, -0x0c1ca014, 0x01c50871, 0x17002710, 0x4d005100, 0x40271001, 0x0053205c, -0x05100144, 0x30201c40, 0x100dd501, 0x00144005, 0x01740051, 0x534005d0, -0x00000200, 0x00000000, 0x00f2a034, 0x212400c1, 0x33001c1a, 0x1580c500, -0x41081483, 0x00c100a2, 0x0c500304, 0xc1027040, 0x50071420, 0x0030400c, -0x033400c5, 0x53400cd0, 0x00000a00, 0x00000000, 0x00788005, 0x03840061, -0x3b402218, 0xa4002180, 0x400c1000, 0x00e10020, 0x125000c4, 0xf1000c40, -0x10c58005, 0x0048404e, 0x00b42021, 0x174002d0, 0x00000200, 0x00000000, -0x40600015, 0x072c81e3, 0x5bc01614, 0x1d01f720, 0xc01a3007, 0x0163086a, -0x1e72078d, 0xe32058d0, 0x74079c81, 0x0078d05f, 0x07bc01e7, 0x57c01ef2, -0x00000040, 0x00000000, 0x0035b810, 0x027c005f, 0x17c001e1, 0x5d001f00, -0xc2097000, 0x005f4827, 0x01b0003c, 0x4f6013c0, 0xf0011c40, 0x4007c09d, -0x007c001f, 0x43c001f0, 0x00000660, 0x00000000, 0x406fa000, 0x05cc01b3, -0x7fc49772, 0xec01f300, 0xc01b3007, 0x21ff006c, 0x1f3007cc, 0x73406cc0, -0x3026ec91, 0x087c881f, 0x07fc01ff, 0x03c01fe0, 0x00000e00, 0x00000000, -0x003d8815, 0x1b848821, 0x3b402210, 0x84082141, 0x400e1220, 0x00ed0029, -0x031000c4, 0xe1000850, 0x10308404, 0x0008400e, 0x40b4082d, 0x574002d0, -0x00000620, 0x00000000, 0x00290000, 0x028400a1, 0x1b480612, 0xa400e180, -0x400a1003, 0x106d0228, 0x0e904384, 0x61001a40, 0x1080a500, 0x0038400c, -0x03b400ed, 0x03400ed0, 0x00000400, 0x00000000, 0x10332804, 0x0a040001, -0x1348201a, 0x450a0160, 0x40081028, 0x474d0021, 0x01900424, 0x41205248, -0x10000405, 0x03c4400c, 0x4c34100d, 0x134000c0, 0x00000c20, 0x00000000, -0x0035a815, 0x17452553, 0x37c04130, 0x6c00d300, 0x400d308b, 0x03cf0064, -0x0db0074d, 0xc30152c0, 0x34006c07, 0x0034c00f, 0x0b7c80cd, 0x57400de0, -0x00000620, 0x00000000, 0x00370001, 0x433c324f, 0x37c021f0, 0x7c100f00, -0xc00df010, 0x00df00e7, 0x0170005c, 0xdf0415c0, 0xf0083c80, 0x0007c00d, -0x007c801f, 0x07c001f0, 0x00000c00, 0x00000000, 0x403f0880, 0x03cc0097, -0x1fc10370, 0x4400f310, 0xc09f7003, 0x005b003b, 0x0f3003cd, 0xf70144c0, -0xb0024c00, 0x003cc00e, 0x038c00fb, 0x83c00f30, 0x00000c22, 0x00000000, -0x41f22081, 0x0a442311, 0x1f40b112, 0xc4003160, 0x411d1480, 0x007100b7, -0x031000c4, 0x5b21c448, 0x112c4c01, 0x0004440f, 0x00548011, 0x07400110, -0x00000802, 0x00000000, 0x4064a001, 0x03440195, 0x33400550, 0x5500d900, -0x40055103, 0x20d10627, 0x0d180304, 0x55000440, 0x10094408, 0x4834400d, -0x034400d1, 0x07400d10, 0x00000200, 0x00000000, 0x00102010, 0x03040001, -0x33400014, 0x15000900, 0x40041000, 0x00d00003, 0x00100004, 0xc9000440, -0x10012500, 0x0000400c, 0x00160011, 0x43400010, 0x00000080, 0x00000000, -0x0026b000, 0x024c0097, 0x13c00170, 0x5c80cb00, 0x40055403, 0x00530037, -0x0d30034c, 0x574004d0, 0xb4014e20, 0x8034c80d, 0x034c00d3, 0x03e00d32, -0x00000ac0, 0x00000000, 0x101fb805, 0x82bc003f, 0x1fc003f0, 0xed003608, -0xc006f000, 0x007f602f, 0x03f000fc, 0x6f000fc0, 0xf001dc00, 0x000fc00f, -0x00fc0037, 0x17c003f0, 0x00000e60, 0x00000000, 0x023fa003, 0x20ec023b, -0x3bc023f0, 0x8c0c3700, 0xc00f3022, 0x0073012f, 0x4fd000cd, 0xf3401fc0, -0xb003ec0c, 0x083cc88f, 0x02cc0073, 0x0cc00ff0, 0x00000e00, 0x00000000, -0x21370801, 0x1844025d, 0x3748a5d0, 0x444edb00, 0x480d5009, 0x121b04a7, -0x8fd0024c, 0xd100b440, 0x50abc488, 0x2475405e, 0x564515d1, 0x04400cd0, -0x00000c20, 0x00000000, 0x1033a011, 0x1804460c, 0x17404850, 0x24000500, -0x414c1009, 0x26458323, 0x0cd02330, 0xc1021344, 0x90032484, 0x0131504c, -0x022400c9, 0x44400cd0, 0x00000e80, 0x00000000, 0x0835a803, 0x0044104d, -0x174005d0, 0x6400c901, 0x402d5081, 0x00190063, 0x0dd10344, 0xc0011448, -0xd0034400, 0x0131400d, 0x426480c9, 0x0c400dd2, 0x00000620, 0x00000000, -0x0037a802, 0x164c029b, 0x478025f0, 0x6d071700, 0x80a93001, 0x88c30047, -0x0df1016c, 0xd30153c2, 0xb0036c00, 0x4035c40d, 0x086404db, 0x08d00df0, -0x00000e20, 0x00000000, 0x003d8007, 0x09dd40bf, 0x4fc005f0, 0xdc04df00, -0xc01fd003, 0x411f400f, 0x0eb103d0, 0xdf080fc0, 0x7003fc00, 0x007fc10f, -0x02dc00f7, 0x1fc00ef0, 0x00000600, 0x00000000, 0x00350802, 0x025c025f, -0x24d0adb0, 0x5c0c1300, 0xc00d3003, 0x06ff0027, 0x0df0a34c, 0xd300d4c9, -0x70030c20, 0x0034c00c, 0x084c00df, 0x08800d32, 0x00000420, 0x00000000, -0x0134a013, 0x0174025d, 0x2040a511, 0x4401d500, 0x444d1083, 0x059903a7, -0x5fd08f4c, 0xfb2806c0, 0x1003ec00, 0x0134405f, 0x3a4400dd, 0x4c400f10, -0x00000200, 0x00000000, 0x0072a007, 0x0134500d, 0x21401012, 0x64010180, -0x400c9102, 0x02cd2822, 0x2cd04c34, 0xc5040140, 0x50030400, 0x04f0401c, -0x060407cd, 0x1e400c10, 0x00000a00, 0x00000000, 0x00788004, 0x07b4056d, -0x6d401e10, 0xe4012500, 0x401e9005, 0x496d007b, 0x9cc00684, 0xed206f40, -0x1107a401, 0x0078101e, 0x06c411ed, 0x12401e11, 0x00000200, 0x00000000, -0x02301012, 0x015c008f, 0x0140a832, 0x35000310, 0x40048401, 0x22cf0022, -0x0cf0233c, 0xc70001c0, 0x70034c0c, 0x0030c00c, 0x100d00df, 0x4ac04c30, -0x00000040, 0x00000000, 0x003db802, 0x23fc24ff, 0x0ee20f70, 0xdc003f00, -0xc00f7301, 0x00fb003f, 0x0ff003fc, 0xfa000ac0, 0xf003fc38, 0x003fd00f, -0x00bc00ff, 0x09c00ff0, 0x00000660, 0x00000000, 0x0037a015, 0x064c219f, -0x15c00530, 0x4c00df00, 0xc00df201, 0x00530005, 0x0de0014d, 0xdf2014c0, -0xb0337c40, 0x64b7c14d, 0x487c12db, 0x54c00d30, 0x00000e00, 0x00000000, -0x00398812, 0x030640ad, 0x1b400e30, 0xb400ed00, 0x400ed003, 0x0001001f, -0x6ed00384, 0xed003ac1, 0xb043b404, 0x803f400e, 0x02b400e1, 0x48403e10, -0x00000620, 0x00000000, 0x80790003, 0x068401cd, 0x7b681e98, 0xb401e510, -0x601ed007, 0x0161407b, 0x1ed00785, 0xed005840, 0x90073405, 0x007b409e, -0x04b641e1, 0x0c405e90, 0x00000400, 0x00000000, 0x00332812, 0x130610cd, -0x33609c10, 0x348acd00, 0x401dd00b, 0x07011023, 0x0cd02704, 0xcd008240, -0x90037400, 0x0227400d, 0x083412c9, 0x48400c90, 0x00000c20, 0x00000000, -0x0015a817, 0x05cd057f, 0x1bc007b4, 0xec017f00, 0xc067f005, 0x1373001f, -0x07d005cc, 0x5f0098c0, 0xb0017c00, 0x2057c007, 0x017c0253, 0x5cd005b4, -0x00000620, 0x00000000, 0x00070012, 0x207c001f, 0x47c00170, 0x7c901f00, -0xc011f020, 0x000f0287, 0x00f0007c, 0x1f0407c8, 0xf0007c00, 0x0087c001, -0x187c0217, 0x4bc00170, 0x00000c00, 0x00000000, 0x01270810, 0x067c029f, -0x27c009f0, 0x7c009300, 0xc0893442, 0x019304e4, 0x09b0020c, 0x9300e5c0, -0x34027c00, 0x0036c009, 0x074c08d3, 0x40c00930, 0x00000c20, 0x00000000, -0x00a62001, 0x3274039d, 0x274029d2, 0x3c029500, 0x40191002, 0x01914024, -0x0910026c, 0x95006440, 0x10827400, 0x01654029, 0x26440091, 0x06c00914, -0x00000800, 0x00000000, 0x0424a018, 0x02540299, 0x26402990, 0x74029180, -0x40091002, 0x08910020, 0x19901a44, 0x91002540, 0x10027400, 0x91265009, -0x02050081, 0x60400818, 0x00000200, 0x00000000, 0x02202010, 0x2234088d, -0x274088d8, 0x74088580, 0x50081052, 0x08c50230, 0xd8102224, 0x85006440, -0x10123604, 0x80a1502c, 0x0a040281, 0x42416810, 0x00000080, 0x00000000, -0x0086b01d, 0x585c161f, 0x074161f0, 0x7c161300, 0xc0013010, 0x16130584, -0x31b0584d, 0x130505c0, 0x302c740b, 0x0006c141, 0x010c0053, 0x74d00032, -0x00000ac0, 0x00000000, 0x01279819, 0x12fc04bf, 0x2fc04ff0, 0xdc24bf00, -0xc14bf053, 0x04bb012f, 0xc8f012dc, 0x9f282fc0, 0xf0267c09, 0x4026c009, -0x027c009f, 0x67c009f0, 0x00000e60, 0x00000000, 0x822fa018, 0x8afc02b3, -0x30c00b30, 0x4c22b300, 0xc00bf01a, 0x00b300ac, 0x0bd032dc, 0x9f0834c0, -0x300a6c02, 0x0024c049, 0x024c0093, 0x60d049f0, 0x00000e00, 0x00000000, -0x0107081c, 0x08740e1b, 0x06514110, 0x490e1b00, 0x4141f008, 0x0e1b2084, -0xb1d02c44, 0x1d108540, 0x12084402, 0x40004001, 0x01c40011, 0x714000d0, -0x00000c20, 0x00000000, 0x0023a010, 0x1a340481, 0x266028d2, 0x24008528, -0x601cd932, 0x108121a0, 0x48d01216, 0x8d00a241, 0x901a2406, 0x0828502a, -0x02a400a1, 0x424028d0, 0x00000e80, 0x00000000, 0x0021a818, 0x02740299, -0x264009d1, 0x44009d00, 0x4049d012, 0x00990034, 0x01d00444, 0x9d002740, -0x90020400, 0x002c4008, 0x02e402b1, 0x634009d0, 0x00000620, 0x00000000, -0x0027a805, 0x027c0393, 0xa6c029f4, 0x64009701, 0xd009f90e, 0x109344e4, -0x01f0445c, 0x9f0466c0, 0xb4026c20, 0x0024c009, 0x0a6d0093, 0x16d009f2, -0x00000e20, 0x00000000, 0x00258014, 0x023c449f, 0x25c00930, 0x7c009b00, -0xc0097006, 0x009f0127, 0x00f0007c, 0x9f00b5c0, 0x70027c40, 0x0267c109, -0x025c109f, 0x51c009f0, 0x00000600, 0x00000000, 0x01050814, 0x844c8217, -0x07c121f0, 0x7c001300, 0xc0013008, 0x12130004, 0x01f0c04e, 0x130884c9, -0x30007c00, 0x1004c001, 0x084c0013, 0x50c00134, 0x00000420, 0x00000000, -0x085ca014, 0x01c4047d, 0x134037d1, 0x74407400, 0x40051001, 0x107106dc, -0x13d00ccd, 0x5f011540, 0xf081f400, 0x0296c005, 0x01449251, 0x50400510, -0x00000200, 0x00000000, 0x0232a014, 0x230401cd, 0x33600d90, 0x3400d010, -0x400d9003, 0x021140c6, 0x3cd02726, 0xd5001040, 0x91033480, 0x000c4012, -0x3c840331, 0x50400d10, 0x00000a00, 0x00000000, 0x08288005, 0x038441ed, -0x3f430ad0, 0xb400e500, 0x400b9817, 0x0061083a, 0x4ed01384, 0xedc05d49, -0x9007b408, 0x042a4900, 0x06840031, 0x14404e10, 0x00000200, 0x00000000, -0x00781015, 0x078d01c7, 0x7b4016f1, 0xfc016300, 0xd01e9417, 0x0141004e, -0xdef05fa4, 0xe70268c0, 0xb403fc0d, 0x0058c012, 0x24cc2163, 0x54d0be32, -0x00000040, 0x00000000, 0x0025b810, 0x037c005f, 0x37c009f0, 0x7c00df00, -0xc00c7027, 0x005f0035, 0x0cf1037c, 0xdb0003c0, 0x705b7c02, 0x4017c001, -0x1b7d008c, 0x43c00df0, 0x00000660, 0x00000000, 0x007fa000, 0x25fc01bf, -0x78c01ff2, 0xce01f720, 0xc01f7007, 0x01b7205c, 0x1ec007c9, 0xf30048c1, -0xb047cc01, 0x0848c016, 0x85cc01b3, 0x00c01f34, 0x00000e00, 0x00000000, -0x02398815, 0x01b440a7, 0x384086d0, 0x8c0aeb00, 0xc00b0013, 0x04ed0218, -0x4ed00384, 0xff001ac0, 0x12239400, 0x0098400a, 0x00cc0861, 0x54400e10, -0x00000620, 0x00000000, 0x00090000, 0x40b400ad, 0x3c4006d8, 0x24004d00, -0x400e5143, 0x202d000a, 0x0fd00b84, 0xe1002c40, 0x50038400, 0x400c400f, -0x038400e1, 0x00400e10, 0x00000400, 0x00000000, 0x00072804, 0x10360815, -0x304004d8, 0x0408c940, 0x402d1043, 0x2b4d0070, 0x0cd00304, 0xcd04c040, -0x10031420, 0x00304000, 0x0b0400d1, 0x10400c10, 0x00000c20, 0x00000000, -0x0015a815, 0x0e7c015f, 0x34d07df0, 0xcc01df00, 0xd02d7007, 0x009f2466, -0x0cf08b4c, 0xf3449450, 0x7203cc80, 0x0144c008, 0x08450213, 0x54d00f30, -0x00000620, 0x00000000, 0x00070001, 0x027c0057, 0x37c108f0, 0x5c461f00, -0xc019f003, 0x045f0017, 0x0df0033c, 0xdb4007c0, 0xf2037c00, 0x0037c021, -0x005c101f, 0x07c00df0, 0x00000c00, 0x00000000, 0x003f0880, 0x01cc00b3, -0x3cc037f0, 0xfc017300, 0x010ff003, 0x05430029, 0x0f3003cd, 0xf31088c0, -0x3003dc00, 0x006cc053, 0x53c804b3, 0x00c00ef0, 0x00000c22, 0x00000000, -0x00262081, 0x25442111, 0x30501910, 0x74001500, 0xc60dd003, 0x03510016, -0x0db00345, 0xd1408440, 0x10032c00, 0x40354039, 0x1e440751, 0x05400dd0, -0x00000802, 0x00000000, 0x0414a001, 0x0a041851, 0x34400910, 0x7404d100, -0x4019d003, 0x02910014, 0x1d100754, 0xc0041440, 0x50034400, 0x02204109, -0x00540051, 0x04400dd0, 0x00000200, 0x00000000, 0x40102010, 0x02050041, -0x34400010, 0x36000580, 0x520cd003, 0x00c10010, 0x1d900715, 0xc1200050, -0x11032400, 0x0021400d, 0x03140081, 0x41400cd0, 0x00000080, 0x00000000, -0x00043000, 0x00440093, 0x34c00074, 0x7c005100, 0x400df003, 0x00534024, -0x0d30035c, 0xf30004d0, 0x3003dc40, 0x0014c009, 0x015d00c3, 0x00c00ef0, -0x00000ac0, 0x00000000, 0x000fb005, 0x00fc003f, 0x3fc003f0, 0xfc003f00, -0xc00ff003, 0x007f001e, 0x0fb003ec, 0xff000fc0, 0xf003bc00, 0x003ec00f, -0x03ec00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x133fa003, 0x02cc00bf, -0x0cc00ff0, 0xcc607f00, 0xc0cff081, 0x00f3023c, 0x0ff003ec, 0x63003fc0, -0x30028c04, 0x223cc00b, 0x53cc08fb, 0x0fc0cf30, 0x00000e00, 0x00000000, -0x03270801, 0x004400dd, 0x054004d0, 0x44205d08, 0x406dd103, 0x00d100b4, -0x0dd00944, 0x5b053f41, 0x10094412, 0x03b6c024, 0x0b6c04c1, 0x0740c914, -0x00000c20, 0x00000000, 0x0033a011, 0x060400cd, 0x01400cd0, 0x1400dd00, -0x408cd007, 0x00cd01a0, 0x0cd00f24, 0x41013364, 0x5e201402, 0x20304088, -0x830484c9, 0x47440c10, 0x00000e80, 0x00000000, 0x0035a803, 0x024400dd, -0x054005d0, 0x5400dd00, 0x4005d103, 0x00dd0024, 0x0dd00344, 0x59003760, -0x50035480, 0x30364005, 0x036420d1, 0x0f408d10, 0x00000620, 0x00000000, -0x0067a802, 0x034c12cf, 0x64d04df1, 0x5c00df01, 0xd069f002, 0x00ff006c, -0x0df0026c, 0xf30037c0, 0x7208dd00, 0x0034e20b, 0x034c00db, 0x03c00d30, -0x00000e20, 0x00000000, 0x026d8007, 0x03fc80ff, 0x6ec08ff0, 0xed00ff01, -0xc003f001, 0x00e34267, 0x0ff002fc, 0xff0037c0, 0xb003ac00, 0x0033c407, -0x033c00ff, 0x1fc01bf1, 0x00000602, 0x00000000, 0x02250802, 0x037c03df, -0x07c0acf0, 0x7c084f00, 0xd028f003, 0x04d34034, 0x0df0077c, 0xc34034d0, -0x30084c00, 0xc034c018, 0x134800db, 0x0bc00d34, 0x00000420, 0x00000000, -0x0024a013, 0x037409dd, 0x44400fd0, 0x74005d02, 0x4401d022, 0x06f10134, -0x0fd00344, 0xd1603c40, 0x10036c0a, 0x003c4005, 0x1bec00f1, 0x4f400d10, -0x00000200, 0x00000000, 0x0032a007, 0x0234200d, 0x01400cd0, 0x34014d00, -0x406cd00b, 0x03c90024, 0x0cd00334, 0x41003640, 0x90002402, 0x00324008, -0x0b0400d1, 0x1f400c10, 0x00000a00, 0x00000000, 0x00688004, 0x06b401ed, -0x48441ed0, 0xb4016d10, 0x4014d007, 0x01e90068, 0x1ed02785, 0x61827a40, -0x9007a401, 0x087a4026, 0x07a400e1, 0x1b409a10, 0x00000200, 0x00000000, -0x01301012, 0xa23c084f, 0x01c20cf0, 0x3c00cf14, 0x504cf021, 0x00db4120, -0x8df0233c, 0x43003240, 0xb4082c00, 0x0232c088, 0x030c08c3, 0x4bc00c30, -0x00000040, 0x00000000, 0x00bdb802, 0x0afc08ff, 0x0fc08ff0, 0xfc48df02, -0xc007f003, 0x00f7202f, 0x0df0a37c, 0x7f003dc0, 0x7003fc80, 0x083dc0d7, -0x03fc80ff, 0x0bc00bf0, 0x00000660, 0x00000000, 0x0037a015, 0x0b7c00d3, -0x60c009f0, 0x5800d300, 0xc049f002, 0x00d30034, 0x0d30020c, 0xdb0135c0, -0x26004c00, 0x2034c009, 0x034ca0df, 0x54c01ff2, 0x00000e00, 0x00000000, -0x10318812, 0x03b400e1, 0x285028d0, 0xbc00e100, 0x4502d003, 0x00f10038, -0x4e100285, 0xc302b9c0, 0xb0032c00, 0x017ac006, 0x17ac04fd, 0x48400bd0, -0x00000620, 0x00000000, 0x00790003, 0x47b401e5, 0x6e415ad0, 0xb4016100, -0x401ad007, 0x01e10078, 0x9e100785, 0xe9017b40, 0xd204a401, 0x027a6018, -0xa7840ded, 0x0d521ed2, 0x00000402, 0x00000000, 0x00332812, 0x033400c5, -0x706008da, 0x34004100, 0x4090d120, 0x00c10274, 0x0c100704, 0xc1003740, -0xd00b2480, 0x00324004, 0x032420cd, 0x494008d0, 0x00000c20, 0x00000000, -0x4015a817, 0x0d7c1077, 0xded027f0, 0x1c024341, 0xd435f005, 0x00534014, -0x05349dcc, 0x5b0017c0, 0xf0016c02, 0x8816c007, 0x014c005f, 0x5dc005f0, -0x000004a0, 0x00000000, 0x00030012, 0x107c0119, 0x47c041f0, 0x5c521f00, -0xc101f004, 0x001f0007, 0x01f0047c, 0x1f0005c8, 0x9000bc10, 0x0007c002, -0x007c001f, 0x4a4001f0, 0x00000c00, 0x00000000, 0x00370810, 0x037c0097, -0x27c008f0, 0x6c259f00, 0xc00d3022, 0x00830024, 0x09b0020c, 0x970025c0, -0x30424c01, 0x0024c009, 0x025c008f, 0x43c009f0, 0x00000420, 0x00000000, -0x20262001, 0x1a740191, 0x264019d1, 0x4c009d00, 0x44291116, 0x04912024, -0x09100244, 0x81202740, 0xb002540a, 0x0026c009, 0x2244009d, 0x07400970, -0x00000800, 0x00000000, 0x0064a018, 0x02740195, 0x25408950, 0xc4029d01, -0x40281002, 0x04910024, 0x09900645, 0x95002540, 0x1202c410, 0x0026601b, -0x0274009d, 0x634009d0, 0x00000200, 0x00000000, 0x02202010, 0x023400c1, -0x224088d0, 0x8700ad00, 0x40881902, 0x00814a20, 0x08101204, 0x81012340, -0x90229400, 0x0322509a, 0x2624208d, 0x43408850, 0x00000080, 0x00000000, -0x0d86b01d, 0x007c4017, 0x15c16170, 0xcc801f20, 0xd1603400, 0x9e110580, -0xe1b00444, 0x1522c1c1, 0x30084c0a, 0x0186c023, 0xc0740e1f, 0x77c161f0, -0x00000ac0, 0x00000000, 0x21279819, 0x027c00bf, 0x3dc04bf0, 0x7c00df00, -0xc049f103, 0x019f012f, 0x19f022fc, 0x9f0267c0, 0xf01a7c03, 0x01a7c069, -0x025c099f, 0x67c04b70, 0x00000e60, 0x00000000, 0x40b7a018, 0x82fca0b3, -0x2cc029f0, 0xbc80bf00, 0xd069f002, 0x01bb00ec, 0x89f042dc, 0xb30024c1, -0x30164c07, 0x01a4c05b, 0x1afc049f, 0x67c0c930, 0x00000e00, 0x00000000, -0x0083081c, 0x00740011, 0x044040d0, 0x74001d00, 0x5060d000, 0x02130044, -0x01d0094c, 0x1b150440, 0x1038440a, 0x01844000, 0x1074240d, 0x73400110, -0x00000c22, 0x00000000, 0x20a3a010, 0x86348085, 0x205029d0, 0x36008d00, -0x4028d002, 0x168120a0, 0x48d00216, 0x8100a150, 0x14420400, 0x03204168, -0x1a34128d, 0x43406810, 0x00000e80, 0x00000000, 0x0021a818, 0x027404d5, -0x646009d0, 0x74409d00, 0x4108d102, 0x80992020, 0x09d00264, 0x99002040, -0x128a4400, 0x00244009, 0x0276009d, 0x63400910, 0x00000620, 0x00000000, -0x0227a805, 0x8a7c0197, 0xe4c008f0, 0x7c009f00, 0xc809f006, 0x00934064, -0x09f0065c, 0x830025c0, 0x30024d00, 0x9024c009, 0x827c009f, 0x17c01930, -0x00000e20, 0x00000000, 0x00358034, 0x027c009b, 0x27c00df0, 0x7c009f10, -0xd00df066, 0x00870127, 0x08f0265c, 0x9f0027c0, 0xf0023c00, 0x0027d109, -0x027c009f, 0x53c099f4, 0x00000600, 0x00000000, 0x80050814, 0x107c0113, -0x04c001f0, 0x7c021f00, 0xd0213208, 0x00130004, 0x01b0084c, 0x130007c0, -0x30804c01, 0x0004c000, 0x004c0017, 0x50c001f0, 0x00000420, 0x00000000, -0x4414a014, 0x19f40370, 0x1d6805d0, 0xf4007d14, 0x4885b011, 0x0c712014, -0x0510014c, 0x71001740, 0x1001c402, 0x00154017, 0x45d40051, 0x505005d0, -0x00000200, 0x00000000, 0x0072a014, 0x063409c1, 0x724084d0, 0x3408cd00, -0x400c100b, 0x03c10070, 0x0c900325, 0xc5003340, 0x54030400, 0x0030401c, -0x076400c5, 0x50500cd0, 0x00000a00, 0x00000000, 0x00388005, 0x02b40021, -0x3b4006d0, 0xb420ed10, 0x480e9007, 0x00e100a8, 0x4e100704, 0xe5013b40, -0x50038400, 0x0179002a, 0x03b009e1, 0x14401cd0, 0x00000200, 0x00000000, -0x04781015, 0x06bc01a1, 0x7a4016f0, 0xbc016f00, 0xc01e3007, 0x01f3407c, -0x3eb086ac, 0xf740f3c0, 0x701fcc01, 0x00fcc01a, 0x05ac0de7, 0x54c07ef0, -0x00000040, 0x00000000, 0x01b5b810, 0x027c801f, 0x35c045f0, 0x7c801f00, -0xc22df001, 0x001f2427, 0x1df0037c, 0xdb05b7c0, 0xb0037d00, 0x0077c80d, -0x035c02df, 0x43c00ff0, 0x00000660, 0x00000000, 0x007fa000, 0x27bc0133, -0x7c003730, 0xcc09fd02, 0xc03ff007, 0x01f3006c, 0x1ff017dc, 0xf3007cc0, -0x3207cc01, 0x007dc01f, 0x07fc01ff, 0x0bc01ff0, 0x00000e00, 0x00000000, -0x28398815, 0x03b41021, 0x38504210, 0x8408ed00, 0x402e7011, 0x04710038, -0x0fd00390, 0xe1023ac2, 0xb0039400, 0x0139400f, 0x23b404ed, 0xd7414ed0, -0x00000620, 0x00000000, 0x04310000, 0x01f40021, 0x38400412, 0x84086d00, -0x408cd002, 0x80e90068, 0x0ed01294, 0xc9003840, 0x50038400, 0x1038408e, -0x01b640ed, 0x43600ed0, 0x00000400, 0x00000000, 0x00632804, 0x41341001, -0x20400010, 0x04000d00, 0x400c5020, 0x00894030, 0x0cd00b04, 0x49003240, -0xd0331400, 0x0031409c, 0x033400cd, 0x1b401cd0, 0x00000c20, 0x00000000, -0x0065a815, 0x0b7c0293, 0x74d02510, 0x4c005f00, 0xd02df02f, 0x00db4034, -0x0ff0231c, 0xdb403cd0, 0x700bcc00, 0x003dc02d, 0x027c00ff, 0x77c01ff0, -0x00000620, 0x00000000, 0x002f0001, 0x837c029f, 0xf7c105f4, 0x7d025f00, -0xc06df003, 0x00d70027, 0x0df0037c, 0xd70031c0, 0xb0033c82, 0x0037c04d, -0x027c80df, 0x07c00df0, 0x00000c00, 0x00000000, 0x023f0880, 0x03fc0033, -0x1fc00330, 0xfc017f00, 0xc00ff202, 0x00f30038, 0x0f3002fc, 0xb30037c0, -0x30034c05, 0x003cc01e, 0x02cc00ef, 0x07c00f10, 0x00000c20, 0x00000000, -0x08362081, 0x07340011, 0x37409110, 0x74411d08, 0x402dd004, 0x0111002c, -0x0d10037c, 0x850035c0, 0x50035401, 0x0037c07d, 0x060400dd, 0x07440d14, -0x00000802, 0x00000000, 0x0020a001, 0x23740411, 0xb7480510, 0x74941d00, -0x400cd0a3, 0x01d11024, 0x0d900374, 0xd5003740, 0x10034410, 0x0034404d, -0x476400dd, 0x07400d50, 0x00000200, 0x00000000, 0x40202010, 0x03340001, -0x33400010, 0x34000d00, 0x4004d001, 0x00012031, 0x0c940354, 0xc5003140, -0x50031400, 0x00335004, 0x022400cd, 0x43400c10, 0x00000080, 0x00000000, -0x0036b000, 0x017c0013, 0x17400134, 0x74001f00, 0xc00df002, 0x00d34028, -0x0db00274, 0x97003fc0, 0x30034c00, 0x0034c005, 0x026c00ff, 0x07c00d70, -0x00000ac0, 0x00000000, 0x002fb805, 0x01fc003f, 0x2fc003f2, 0xfc402f00, -0xc00fd000, 0x00bf003e, 0x0f7003fc, 0xbf003fc0, 0xf003fc00, 0x003fc40f, -0x02dd00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x003f8003, 0x33fc1c33, -0x3fc08ff0, 0xad00f300, 0xc00f3001, 0x0033200f, 0x0fb083c4, 0x7f053cc1, -0x3212fc00, 0x133cc84b, 0x33c40c73, 0x0cc00ff0, 0x00000e00, 0x00000000, -0x12b70801, 0x33740251, 0x3740edd0, 0x4400d140, 0x400d1201, 0x00510007, -0x2f900344, 0x5d00b440, 0x5021744a, 0x00b54085, 0x0b440291, 0x04400dd0, -0x00000c00, 0x00000000, 0x0833a011, 0x03140481, 0x33420c50, 0x4400c100, -0x480c1501, 0x0045c007, 0x0c108305, 0x4d103048, 0x10003440, 0x0b344008, -0x0a240c11, 0x44400cd0, 0x00000e80, 0x00000000, 0x2835a803, 0x03760091, -0x37400dd0, 0x4401d100, 0x400d1001, 0x00450c07, 0x0d901304, 0x5d003440, -0x50037410, 0x00354005, 0x03640ad1, 0x0c400dd0, 0x00000620, 0x00000000, -0x4037a802, 0x037c2213, 0x37c00df0, 0x2c019300, 0xc01d3001, 0x03d700e7, -0x0d34134c, 0x7f0034d0, 0x3018fc02, 0x0034c00b, 0x036c0043, 0x08d00cf0, -0x00000e20, 0x00000000, 0x00318007, 0x03fc247f, 0x3fc00ff2, 0xfc108f00, -0xc49ff063, 0x42fb015f, 0x0d7007fc, 0x7f003fc0, 0xf003bc00, 0x003fc004, -0x03dd01ff, 0x1fc00ff0, 0x00000600, 0x00000000, 0x00350802, 0x037c409b, -0x37c00df0, 0x5c029300, 0xc00d7401, 0x46d340b4, 0x0c30034c, 0x534035c0, -0xb0085c02, 0x0035d009, 0x124d8213, 0x0bc00d72, 0x00000420, 0x00000000, -0x203ca013, 0x13f40091, 0x3f400fd0, 0x6c009140, 0x400d1001, 0x02d10070, -0x0f164344, 0x5b007c48, 0xb0176c00, 0x20384205, 0x8a440091, 0x4f400f10, -0x00000200, 0x00000000, 0x0032a007, 0x07240009, 0x36600c90, 0x04094100, -0x480c1101, 0x004c0020, 0x6c100614, 0xc1a1b140, 0x90001100, 0x00314008, -0x0b040041, 0x1f400c54, 0x00000a00, 0x00000000, 0x00788004, 0x87b405e1, -0x7b401ed8, 0xa401e108, 0x401e1005, 0x01e90458, 0x1e1027a7, 0xc906784c, -0x90072429, 0x007c4016, 0x0784c131, 0x13401e10, 0x00000200, 0x00000000, -0x00301012, 0x033c884b, 0x37c08cfa, 0x1c04c302, 0x404c5021, 0x025d0034, -0x0c30005c, 0xc30035c0, 0xb0001c08, 0x0031c008, 0x024c8083, 0x4bc00c74, -0x00000000, 0x00000000, 0x003db802, 0x43fc0cff, 0x37c20ffa, 0xfc00df00, -0xd00cf001, 0x08f70237, 0x8ff203dc, 0xff0c3fc0, 0xf003fc08, 0x003bc017, -0x23fc08ef, 0x0bc00ff0, 0x00000660, 0x00000000, 0x0037a015, 0x036c011f, -0x36c08df0, 0x4c20df22, 0xc01df001, 0x01c30064, 0x2dbc036c, 0xd30034c0, -0xa4004c00, 0x3074d009, 0x034c0013, 0x54c00db2, 0x00000e00, 0x00000000, -0x00f98812, 0x038400fd, 0x3b404ed0, 0x8400ed00, 0x400ad083, 0x00e10018, -0xae500384, 0xc1013840, 0x10030400, 0x11fc4006, 0x03c40031, 0x48504f14, -0x00000620, 0x00000000, 0x01790003, 0x17840165, 0x7b4c1ed0, 0x8401cd21, -0x401ed005, 0x01f90078, 0x5e100f84, 0xe1007850, 0x90048501, 0x01784018, -0x068400e1, 0x0c409ed4, 0x00000400, 0x00000000, 0x20332812, 0x030480cd, -0x33400dd2, 0x0400cd00, 0x501cd104, 0x01c14070, 0x0cd00704, 0xd1403040, -0x10030400, 0x20304004, 0x020401c1, 0x48400c50, 0x00000c20, 0x00000000, -0x0015a817, 0x014d007f, 0x16c005f0, 0x8d046f00, 0xd005f049, 0x127b00dc, -0x07b10d8d, 0x530014c0, 0xb0090d00, 0x001cc007, 0x054c0173, 0x5cc005f0, -0x00000620, 0x00000000, 0x08070012, 0x087c401f, 0x07c201f0, 0x7c101f08, -0xc081f00c, 0x811f0247, 0x0070485c, 0x1f0007c0, 0xf040fc00, 0x4007c802, -0x287c080f, 0x4bc021a0, 0x00000c00, 0x00000000, 0x00270810, 0x063c009f, -0x24c00970, 0x4d009f00, 0xc0893816, 0x019f2027, 0x0930027c, 0x930024c6, -0x70064c00, 0x0025c009, 0x020ca09f, 0x40c00871, 0x00000c20, 0x00000000, -0x10262001, 0x9674409d, 0x24400910, 0x44429d00, 0x40291002, 0x809d00a7, -0x29101274, 0x9b08a458, 0x04266c40, 0x00244009, 0x0a44009d, 0x04512910, -0x00000800, 0x00000000, 0x0024a018, 0x927400dd, 0x26500950, 0x4402dd20, -0x43091002, 0x869d0427, 0x49100274, 0x91052040, 0x1002c400, 0x0025400b, -0x0244009d, 0x60400950, 0x00000200, 0x00000000, 0x07202010, 0x7234008d, -0x20400810, 0x05149d02, 0x40885802, 0x288d0223, 0x881c2274, 0x89222040, -0x1002a408, 0x0220508a, 0x0a05088d, 0x40402810, 0x00000080, 0x00000000, -0x0186b01d, 0x987c941f, 0x84c14170, 0x4c041f05, 0x40201081, 0x021f0083, -0x6430083c, 0x131580c1, 0x74004c02, 0x0585c023, 0x014c561f, 0x74c00170, -0x00000ac0, 0x00000000, 0x2127b819, 0x127c14bf, 0x27c149f0, 0xfc00bf21, -0x404bb402, 0x04bf012f, 0x49f012fc, 0x9f0927c0, 0xf00a7c06, 0x0127c069, -0x8afc24bf, 0x67c029f0, 0x00000e60, 0x00000000, 0x0527a018, 0x0acc0093, -0xa7c049f0, 0x8c048f01, 0xc00b3002, 0x08930024, 0xc9308a7c, 0x9f0324c1, -0x3006cc0d, 0x042ec119, 0x12f40093, 0x60d02ab0, 0x00000e00, 0x00000000, -0x2187081c, 0x08440411, 0x834941d0, 0x45021d01, 0x0340b000, 0x00110d04, -0x21000074, 0x0d0008c0, 0xb1285402, 0x08844141, 0x90749515, 0x71404110, -0x00000c20, 0x00000000, 0x4423a010, 0x0a041281, 0x234028d0, 0x44088d03, -0x40091002, 0x04a10028, 0x4a0102b4, 0x8d01a950, 0x1402040c, 0x05224008, -0x4a344081, 0x40484890, 0x00000e80, 0x00000000, 0x0025a818, 0x02640291, -0x274009d0, 0x44209d00, 0x58099042, 0x00b1402c, 0x0b108af4, 0x8d082d40, -0x92025400, 0x00244009, 0x02744495, 0x61500910, 0x00000620, 0x00000000, -0x0027a805, 0x024d0193, 0x27c009f0, 0x0c129f00, 0xc008302e, 0x40932124, -0x0934027c, 0x9f1825c0, 0x30424c00, 0x4026c809, 0x267c8493, 0x14d009b4, -0x00000e20, 0x00000000, 0x00258014, 0x025c099f, 0x27c009f0, 0x7d00cf00, -0xc099f042, 0xe89f0667, 0x08f0027c, 0x9f0024c0, 0xf0027c00, 0x0027c009, -0x463c009f, 0x53d009f4, 0x00000600, 0x00000000, 0x00050814, 0x104c0003, -0x07c00134, 0x4c001300, 0xc1013c00, 0x001f0084, 0x01f0084c, 0x130004c0, -0x30084c00, 0x0004c800, 0x007c0213, 0x50c011f0, 0x00000420, 0x00000000, -0x0014a014, 0x05c40051, 0x17400510, 0xc4085100, 0x40051041, 0x535d0094, -0x05d04144, 0x5b081400, 0xb0010400, 0x10544005, 0x4df40055, 0x504076d1, -0x00000200, 0x00000000, 0x0036a014, 0x0f0500c1, 0x33400c10, 0x25000100, -0x403c1007, 0x13cd0234, 0x1cd04744, 0xc1003060, 0x10030400, 0x2074540c, -0x023000c1, 0x50400cd0, 0x00000a00, 0x00000000, 0x01308005, 0x478404e1, -0x7b408e10, 0xa4006101, 0x442e1003, 0x016d1028, 0x2ed00284, 0xe9206860, -0x94028404, 0x0438404e, 0x02b440e5, 0x14400ed1, 0x00000200, 0x00000000, -0x41781015, 0x07cc03f3, 0x7bc25e31, 0xac11a341, 0xd0161006, 0x01fd0058, -0x17f2078c, 0xe32458d0, 0x30078d05, 0x007ce47c, 0x06bc41e3, 0x54d016f0, -0x00000040, 0x00000000, 0x0235b810, 0x027c00df, 0xb7c00df0, 0x5c06df02, -0xc005f002, 0x00df0007, 0x0dd0027d, 0xdf0037c0, 0xf002241c, 0x0037c00d, -0x007c01fe, 0x43c005f0, 0x00000660, 0x00000000, 0x007fb000, 0x06cc0dff, -0xffc01f30, 0x9c012300, 0xc81f2007, 0x21fa027f, 0x1b3007cd, 0xf2007cc0, -0x34078c01, 0x006fc21f, 0x07fc01f3, 0x03801332, 0x00000e00, 0x00000000, -0x00398015, 0x028418ed, 0x3b400e10, 0x950a6100, 0x044eb0a3, 0x0061002b, -0x2a3402c4, 0xf100a840, 0x5002bc00, 0x002b400e, 0x23b400e1, 0x56408210, -0x00000620, 0x00000000, 0x02390000, 0x018604ed, 0x3b408e90, 0xd400b100, -0x09021003, 0x12e1043b, 0x06904384, 0xe1001a40, 0x1003a400, 0x002b400e, -0x03b418e1, 0x03400214, 0x00000400, 0x00000000, 0x00332804, 0x000606cd, -0x33400c90, 0x1406c100, 0x44109023, 0x015100e3, 0x0c100204, 0xc1003040, -0x54363400, 0x0027402d, 0x017406c1, 0x12400010, 0x00000c20, 0x00000000, -0x003da815, 0x014d03ff, 0x3fc00fb4, 0x1d021340, 0xc00d300f, 0x41934077, -0x0cb00d4c, 0xf30034f0, 0x300b6d00, 0x4037c07f, 0x077c01f3, 0x57c00930, -0x00000620, 0x00000000, 0x00370001, 0x017c00df, 0x37c20d70, 0x7c005f00, -0xc00df41b, 0x80170037, 0x2df0417c, 0xdf20a7c0, 0xf0037c00, 0x1037c04d, -0x077c00df, 0x06c009f0, 0x00000c00, 0x00000000, 0x003f0880, 0x01fc00df, -0x34c00ef0, 0xcd00a300, 0xe01f3002, 0x08b6061f, 0x173201cc, 0xf32050c0, -0x70028c00, 0x0134c00f, 0x037c00f3, 0x03c00371, 0x00000c22, 0x00000000, -0x00362081, 0x007400dd, 0x35400dd0, 0x6c02d100, 0x601d5108, 0x00910017, -0x35100904, 0xd108c440, 0x10027c00, 0x0034400d, 0x057400df, 0x07400110, -0x00000802, 0x00000000, 0x0034a001, 0x027400dd, 0x30400dd8, 0x64009120, -0x498d1043, 0x00d100b3, 0x89192b44, 0xc1223440, 0x50234400, 0x0034400d, -0x057420d1, 0x07401550, 0x00000200, 0x00000000, 0x00302010, 0x063400cd, -0x31400cd0, 0x65004100, 0x400c5003, 0x00410823, 0x09180245, 0xc1002040, -0x14033700, 0x0030400c, 0x053400cd, 0x43400410, 0x00000080, 0x00000000, -0x0036a000, 0x013c00df, 0x3cc00df0, 0x4c009300, 0x40053003, 0x80834013, -0x0014014c, 0xf30014c0, 0x72024c00, 0x0034d00d, 0x017c00d3, 0x03c00570, -0x00000ac0, 0x00000000, 0x003f8805, 0x00fc00ff, 0x3fc00fd0, 0xfc00ff20, -0xc007f003, 0x003b000f, 0x039000fc, 0xff000f80, 0xf002fc00, 0x083fc00f, -0x01fc20fc, 0x17c007f0, 0x00000e60, 0x00000000, 0x002f8003, 0x008c4033, -0x0fc003d2, 0xfc20ff02, 0xc00f3410, 0x80f3043d, 0x8fb013ec, 0x3b053ec0, -0x7000dc28, 0x403fc007, 0x83cc0073, 0x0fc08ff2, 0x00000e00, 0x00000000, -0x24170801, 0x80440051, 0x174105d0, 0x7418df00, 0x400d1148, 0x10f500b4, -0x6e103bc4, 0x11013c40, 0x10004404, 0x0437400d, 0x13c40051, 0x07404dd0, -0x00000c20, 0x00000000, 0x0103a011, 0x00340009, 0x13400050, 0x7404cd00, -0x400c9030, 0x48c50031, 0x2c104324, 0x8d053240, 0x50003400, 0x4137480c, -0x43140051, 0x47404cd0, 0x00000e80, 0x00000000, 0x0875a803, 0x04750019, -0x974005d0, 0x7400d510, 0x400d9042, 0x00c50034, 0x0d900364, 0x95003040, -0x14006400, 0x0117400d, 0x03561050, 0x0f400dd0, 0x00000620, 0x00000000, -0x44b7a802, 0x447c058b, 0x07c8c1f0, 0x7c009d10, 0xc08db000, 0x00d70035, -0x0da4036c, 0x1f0036c0, 0x700c7c01, 0x0037c09d, 0x03590052, 0x0bc20df2, -0x00000e20, 0x00000000, 0x201d8007, 0x00cc0277, 0x3fc007f2, 0x7c00bf10, -0xc00f7000, 0x80ff103f, 0x0f70031c, 0x9b0037c0, 0xf0249c09, 0x087fc80b, -0x03ec023f, 0x1fc00ff2, 0x00000600, 0x00000000, 0x00b50802, 0x007c009f, -0xb5c08970, 0x4d00df00, 0xc01db04b, 0x00df1037, 0x0d70434c, 0x8b4035c0, -0x34284c00, 0x0035c00d, 0x034c025f, 0x0b400d30, 0x00000420, 0x00000000, -0x02b4a013, 0x28740a1d, 0x34400d50, 0x0800dd00, 0x400c500b, 0x00fd043f, -0x0f100fc4, 0x90003ec0, 0x10804400, 0x03b0400d, 0x03ec00cd, 0x4f440f10, -0x00000200, 0x00000000, 0x0026a007, 0x0834000d, 0x03413840, 0x2400cd08, -0x48089000, 0x00cc0077, 0x0d502704, 0x41003140, 0x10070400, 0x00a1400c, -0x0334094d, 0x1f400c10, 0x00000a00, 0x00000000, 0x00788004, 0x04a481ed, -0x7a481812, 0x8421ed00, 0x40be1006, 0x49cd007b, 0x9e502784, 0x61027844, -0x10070401, 0x0068601e, 0x2734017d, 0x13401e10, 0x00000200, 0x00000000, -0x00101032, 0x003c084f, 0x33c00c70, 0x2400df02, 0xc00cb000, 0x00cf0033, -0x0c70030c, 0xcb003140, 0x301b0c00, 0x0091c00d, 0x033c004f, 0x4bc08c34, -0x00000040, 0x00000000, 0x003db002, 0x03fc20ff, 0x3dc00ffa, 0xf400ff02, -0xc00ff002, 0x10ff003f, 0x0db04bfd, 0xff0437c3, 0xf0037d08, 0x021fc08f, -0x03ec006f, 0x0bc30ff0, 0x00000660, 0x00000000, 0x0037a015, 0x0074409f, -0x07c001f0, 0x7c009e05, 0xc00cf002, 0x04d3403c, 0x0d700f6c, 0x530936c1, -0x32135c00, 0x4037c00d, 0x334c0041, 0x57c00db0, 0x00000e20, 0x00000000, -0x84398812, 0x00b420ed, 0x3b4402d0, 0xb400ad00, 0x480ef002, 0x10f1007c, -0x4e011304, 0xe5033040, 0x10438400, 0x003b440e, 0x43c40065, 0x4b404e10, -0x00000620, 0x00000000, 0x94790003, 0x469401ed, 0x7b401ed0, 0xb401ed00, -0x401ed007, 0x05e10078, 0x1c4103a4, 0xc1017b40, 0x90071401, 0x005b401e, -0x13a58169, 0x0f401e51, 0x00000400, 0x00000000, 0x80732812, 0x963404cd, -0xb3402cd0, 0x3401cd04, 0x528c40a7, 0x00c10034, 0x0c100304, 0xc5003140, -0x90030412, 0x1057407c, 0x0324424d, 0x4b400c50, 0x00000c20, 0x00000000, -0x00d5a817, 0x05bc027f, 0x97c007f0, 0xfc105f00, 0xc014d00d, 0x40533014, -0x0570016c, 0x530017c0, 0xb6015d00, 0x51dfc037, 0x016c106b, 0x5fc005f0, -0x00000600, 0x00000000, 0x04870012, 0x007c400f, 0x07c041f0, 0x7c001f00, -0xc001f20c, 0x000f0007, 0x01f0007c, 0x1f0000c8, 0x74003c00, 0x00c7c081, -0x005c3017, 0x4bc001a0, 0x00000c00, 0x00000000, 0x00770810, 0x025c0893, -0x34c01870, 0x7c009f08, 0xc009f006, 0x00930024, 0x08300a5c, 0x870024f0, -0x30026c00, 0x0024c809, 0x020c0591, 0x43c00930, 0x00000c00, 0x00000000, -0x43262001, 0x22540391, 0x24405950, 0x74209d00, 0x4009d00a, 0x00935024, -0x09101a04, 0x91002444, 0x10024400, 0x01654008, 0x026c4095, 0x07400910, -0x00000800, 0x00000000, 0x0020a018, 0x02541091, 0x24408950, 0x74009d00, -0x5019d062, 0x00910024, 0x09100254, 0x95002440, 0x1002e500, 0x0064500d, -0x02440095, 0x63400910, 0x00000200, 0x00000000, 0x02202010, 0x02040081, -0x20508810, 0x34088d02, 0x4018d022, 0x08810020, 0x48104204, 0xa1032040, -0x10029406, 0x90204089, 0x32260491, 0x43400814, 0x00000080, 0x00000000, -0x0086b01d, 0x505c1413, 0x84c16153, 0x7c561f00, 0xc141f058, 0x10130384, -0xc130005c, 0x17050440, 0x1010ec04, 0x4004c001, 0x0c4c0417, 0x77c1e130, -0x000008c0, 0x00000000, 0x0137b819, 0x02fc00bf, 0x27c24bf0, 0xfc04bf01, -0xc00bf012, 0x009f0327, 0xc9f04274, 0x9f0127c0, 0xf4226426, 0x042bc01b, -0x327c08bf, 0x67c019f0, 0x00000ce0, 0x00000000, 0x18afa018, 0x02cc009f, -0xa6c92bf0, 0xcc029f10, 0xd60bf01a, 0x009b0368, 0x49b052cc, 0x9b00a4c1, -0x3042ec00, 0x082bc809, 0x027c14b3, 0x60c2c9b0, 0x00000e00, 0x00000000, -0x0007081c, 0x00442a1d, 0x044021d0, 0x44021d01, 0x4021d001, 0x04050184, -0x61501844, 0x51208040, 0x10084406, 0x01174441, 0x00740251, 0x70406150, -0x00000c20, 0x00000000, 0x0123a010, 0x0a24008d, 0x204008d0, 0x24228d00, -0x4028501a, 0x128140b0, 0x08904234, 0x8820a041, 0x50022532, 0x04234108, -0x0a340081, 0x40402810, 0x00000e80, 0x00000000, 0x0125a818, 0x5264209d, -0x264028d2, 0x64009d14, 0x4009d002, 0x00950024, 0x08100244, 0x81002440, -0x50024400, 0x00274069, 0x02742895, 0x60400950, 0x00000620, 0x00000000, -0x00a7a805, 0x8265009f, 0xe6d019f1, 0x6d089f20, 0xc088f00e, 0x00930024, -0x09b1025d, 0x9b0024d0, 0x54026c02, 0x40e7c009, 0x027c0193, 0x14d009b4, -0x00000e20, 0x00000000, 0x00658014, 0x025c08cf, 0x25c029f0, 0x5c008f22, -0xc019f012, 0x008f2027, 0x09f0027c, 0x9f0023c0, 0xb0025c00, 0x0167c009, -0x023c009b, 0x53c009f1, 0x00000600, 0x00000000, 0x44850814, 0x047c1013, -0x04c10150, 0x4d001f00, 0xc0013020, 0x00130044, 0x01f0404c, 0x170005e0, -0x31006d02, 0x0087cc01, 0x004c0013, 0x50c00130, 0x00000420, 0x00000000, -0x105ca014, 0x09f40051, 0x14423750, 0xc4005d10, 0x40071029, 0x0051001c, -0x05900dd4, 0x51c01442, 0x00110400, 0x24df4005, 0x016c1051, 0x504005b0, -0x00000200, 0x00000000, 0x0032a014, 0x243400c1, 0x32402c50, 0x2400cd00, -0x50041007, 0x80c10034, 0x0cd00144, 0xc1003148, 0x90072400, 0x0487480c, -0x030401c1, 0xd2400d10, 0x00000a00, 0x00000000, 0x04588005, 0x04240061, -0x38402e50, 0x8400ed22, 0x490c1005, 0x08e10038, 0x4ed00984, 0xe1013840, -0x14028404, 0x801f40ce, 0x13a401f1, 0x16404e90, 0x00000200, 0x00000000, -0x005c1015, 0x05bc1123, 0x78d01c72, 0x8c85ff00, 0xc0163405, 0x05e30078, -0x7cf0058c, 0xc1017940, 0xb0072c07, 0x505bc01e, 0x0fcc01a3, 0x56d05f30, -0x00000040, 0x00000000, 0x0815b810, 0x817c061f, 0x35e20df0, 0x3408df00, -0xe005f001, 0x10df4036, 0x2db1097d, 0xdf0637d0, 0xf0027d02, 0x0817c00d, -0x077c00cf, 0x41c29df0, 0x00000660, 0x00000000, 0x006fa000, 0x07fc09fb, -0x7bc01fb0, 0xcc01f300, 0xc0133005, 0x01f3005f, 0x3f320dcc, 0xf3207ec0, -0xf206ec03, 0x006fc01f, 0x07fc01f3, 0x00c01f30, 0x00000e00, 0x00000000, -0x01298811, 0x09bc00e1, 0x3b4006f0, 0xa400f100, 0x408e1001, 0x00f1480b, -0x4f1001c4, 0xf1003c40, 0x10028400, 0x001f400e, 0x03f400eb, 0x55400e10, -0x00000620, 0x00000000, 0x90b90000, 0x03b60021, 0xbf400ad0, 0x8400e100, -0x40061001, 0x00e9001b, 0x0e900184, 0xe1023842, 0x50021400, 0x008b400e, -0x03b410a1, 0x00400e10, 0x00000400, 0x00000000, 0x00332804, 0x49140301, -0x37409150, 0x6400c100, 0x40041011, 0x00c90003, 0x0c900005, 0xd1403448, -0x10021502, 0x0017408c, 0x033403c1, 0x11400c10, 0x00000c20, 0x00000000, -0x4021a815, 0x11740613, 0x3f400dd0, 0x4d00f340, 0xc0003403, 0x00f90017, -0x0fb4014c, 0xf1003cd2, 0x70037d02, 0x0087403e, 0x03fc03d1, 0x54c00f34, -0x00000620, 0x00000000, 0x00670001, 0x097c021f, 0x77c009f0, 0x5c00df00, -0xc019f001, 0x00d70007, 0x0d70097c, 0xdf0035c0, 0x70026c90, 0x0017c10d, -0x033c30df, 0x07c40df0, 0x00000c00, 0x00000000, 0x00cf0880, 0x01fc1933, -0x3cc84770, 0xfa00f300, 0xe02370a4, 0x00e70014, 0x0f7001dc, 0xf7003fc0, -0xb0038c00, 0x000cc00f, 0x03c000e3, 0x03c00d30, 0x00000c22, 0x00000000, -0x00062081, 0x0d740311, 0x354131d1, 0x7400d100, 0x50011000, 0x00dd8004, -0x0d100144, 0xd10037c0, 0x50026c00, 0x0054400d, 0x036c00d1, 0x07480d10, -0x00000802, 0x00000000, 0x0c24a001, 0x11741011, 0x34400dd0, 0x7440d100, -0x40015000, 0x00dd2074, 0x0d545114, 0xd5003740, 0x90024400, 0x00c4400d, -0x03540891, 0x07400d10, 0x00000200, 0x00000000, 0x00242010, 0x01340001, -0x30500090, 0x2400c100, 0x40081000, 0x00cd8070, 0x0c100304, 0xd1003140, -0x90022400, 0x0010400d, 0x033600c1, 0x43400c14, 0x00000080, 0x00000000, -0x0022b000, 0x017c0013, 0x34c00170, 0x7400d340, 0x48017200, 0x20ff2034, -0x0f7002dc, 0xf7003f40, 0xb0024c00, 0x0004c00d, 0x035c0093, 0x03c00d30, -0x00000ac0, 0x00000000, 0x002fb805, 0x01fc003f, 0x3fc003f0, 0xbc00ff10, -0xc003f000, 0x00ff003f, 0x0ff003fc, 0xff003fc0, 0x7002fc00, 0x001fc00f, -0x03ec00fd, 0x17c00ff0, 0x00000e48, 0x00000000, 0x001fa003, 0x23fc00f3, -0x3cc40f70, 0xbc08ff02, 0xc007b003, 0x003f000d, 0x033000fc, 0xf3400cc0, -0x3013fc00, 0x003cc402, 0x02ed0033, 0x0cc04f30, 0x00000e00, 0x00000000, -0x00170801, 0x035c0adb, 0x36c00fd8, 0x7684dd00, 0xc40dd203, 0x001d2806, -0x01300074, 0xd1083442, 0x100b7410, 0x00344001, 0x0304005b, 0x06c20c10, -0x00000c00, 0x00000000, 0x4033a011, 0x103400c5, 0x31480cd3, 0x14444d01, -0x4000d003, 0x00451011, 0x08100234, 0xc1100142, 0x540b3408, 0x00304005, -0x03448041, 0x44502c10, 0x00000e80, 0x00000000, 0x0035a803, 0x427400d5, -0xa5600dd1, 0x7400dd00, 0x410dc082, 0x085d0415, 0x09900270, 0xd1063540, -0x50077400, 0x40704105, 0x03440051, 0x0c400d10, 0x00000620, 0x00000000, -0x20b38802, 0x0a7c20d5, 0xf4500d78, 0x7c01df10, 0x402db007, 0x059f00f5, -0xad340b38, 0xd31045d0, 0x70037c40, 0x0074d095, 0x260c0151, 0x084c0d34, -0x00000e20, 0x00000000, 0x003d8007, 0x8edc00db, 0x3e880ff1, 0xfc04ff09, -0xc10fe122, 0x819d023e, 0x0d7057fc, 0xfe0046c0, 0xb003bc00, 0x003fc007, -0x03fc09ff, 0x1fc00ef2, 0x00000608, 0x00000000, 0x00750802, 0x025d00db, -0x36c80cf0, 0x7c01df08, 0xc0093403, 0x08970094, 0xac300b4d, 0xd74100c0, -0x70027c00, 0x0034c00d, 0x036c005b, 0x08c00d30, 0x00000420, 0x00000000, -0x20748013, 0x8a4400f1, 0xb4c00ff0, 0x7402dd00, 0x400c1082, 0x01910054, -0x0d100b44, 0xf1000440, 0xe2037400, 0x02b6c20c, 0x2b440ad1, 0x4c40af10, -0x00000200, 0x00000000, 0xc192a007, 0x120400c1, 0x20404c90, 0x3406cd02, -0x40345023, 0x27c50060, 0x14500914, 0xc100b062, 0xd0033400, 0x0030400c, -0x23260951, 0x1c408c90, 0x00000a00, 0x00000000, 0x00788004, 0x268401e1, -0xea489cd0, 0xf481ed20, 0x511c5005, 0x81e1066c, 0x16502511, 0xe102786c, -0xd00fb401, 0x007a401f, 0x0784a1f1, 0x10401e90, 0x00000200, 0x00000000, -0x00b01012, 0x621c00c3, 0x20d00cf0, 0x3c084f20, 0xc2007003, 0x6445aa34, -0x00700014, 0xc70030d0, 0x70033800, 0x4030c00c, 0x032c0243, 0x48d00cb4, -0x00000000, 0x00000000, 0x00b9b802, 0x22fc08f7, 0x1dc00d71, 0x7e28ff02, -0xc80db221, 0x007f8a37, 0x03b480ec, 0xdf203fe0, 0x72037c00, 0x043bc00f, -0x23fc08e7, 0x0bc08f70, 0x00000660, 0x00000000, 0x00f7b015, 0x027c00d3, -0x71c32d38, 0x3c809b00, 0xc005a003, 0x00d30824, 0x0d30035c, 0xd34037c0, -0xf0037c81, 0x0034c00d, 0x034c005f, 0x54c00d31, 0x00000e00, 0x00000000, -0x00398012, 0x02f405e1, 0x38402f1a, 0xb400a100, 0xc00e1003, 0x00c10822, -0x0e108380, 0xe1043f40, 0xd803b402, 0x0079400f, 0x03c400ed, 0x48485f10, -0x00000620, 0x00000000, 0x00790003, 0x079409e1, 0x7d425e14, 0xb481e900, -0x48129847, 0x03e18078, 0x1e100705, 0xe900fb40, 0x5007b480, 0x0178401e, -0x0784116d, 0x0c40de10, 0x00000400, 0x00000000, 0x00322812, 0x073420d1, -0x10600c10, 0x340fd100, 0x410c114f, 0x10c10432, 0x9c140704, 0xc900f740, -0xd0033420, 0x0a71404d, 0x830441cd, 0x48400c11, 0x00000c20, 0x00000000, -0x0095a817, 0x09dc0051, 0x1dc00532, 0xfc827b04, 0xc025b005, 0x415350d0, -0x25301d5d, 0x5b30d7c0, 0xf0117c40, 0x000cc107, 0x014d027f, 0x5cd00534, -0x00000620, 0x00000000, 0x41070012, 0x247c001f, 0x07c001f0, 0x7c001f00, -0xc021f200, 0x020f0207, 0x01f0007c, 0x170187c9, 0xf0087c00, 0x2007c401, -0x007c011f, 0x4bc001f2, 0x00000c00, 0x00000000, 0x00370810, 0x8e4c809f, -0x24c08850, 0x5cc09f00, 0xc009300e, 0x01930064, 0x0930420c, 0x800027c0, -0x30024c00, 0x0004c019, 0x024c0093, 0x40c00930, 0x00000c20, 0x00000000, -0x02662001, 0x0604409d, 0x64400910, 0x04019d20, 0x42281002, 0x05930065, -0x09120a44, 0x91412700, 0x111a0480, 0x4027c889, 0x02450091, 0x04540914, -0x00000800, 0x00000000, 0x0024a018, 0x0245009d, 0xe4400910, 0x56019d00, -0x40095003, 0x04b0022c, 0x8f1043c4, 0x95002f00, 0x10024400, 0x00204009, -0x02040081, 0x60400810, 0x00000200, 0x00000000, 0x00202010, 0x03441c8d, -0x20508c54, 0x04018d08, 0x400c5402, 0x00a10029, 0x0a100284, 0x81822b40, -0x10024408, 0x40a34088, 0x0a040281, 0x40402810, 0x00000080, 0x00000000, -0x0006a01d, 0x804c261f, 0x04c16152, 0x5c001f00, 0xc1417001, 0x14130d04, -0x41345044, 0x17058fc5, 0x30504c16, 0x0504c021, 0x004c0003, 0x74c00130, -0x00000ac0, 0x00000000, 0x0823a819, 0x52fc049f, 0x2fc849b0, 0xfc14bf0d, -0xc00ab002, 0x00d74027, 0x09f0027d, 0x9a0127c0, 0xfc02fc04, 0x000fc04b, -0x02fc00bf, 0x67c029f0, 0x00000e60, 0x00000000, 0x002fa018, 0x0abc149f, -0x2cc02bf0, 0xfc40bb02, 0xc04bd002, 0x04a3012c, 0x083212fc, 0x9300afc0, -0x30520c00, 0x006cc02b, 0x224c009f, 0x63c40932, 0x00000e00, 0x00000000, -0x8017081c, 0x0074861d, 0x06e021d0, 0x74941101, 0x40a1d200, 0x02110005, -0xa1102870, 0x110187c0, 0x10085400, 0x00454001, 0x0445011d, 0x73487312, -0x00000c20, 0x00000000, 0x0023a010, 0x1234108d, 0x244028d0, 0x34008900, -0x4208d002, 0x088900a0, 0x08100234, 0x8101a340, 0x10024400, 0x05a04408, -0x128614ad, 0x43412a10, 0x00000e80, 0x00000000, 0x2025a818, 0x4274009d, -0x244009d0, 0x74049100, 0x4049d002, 0x00990524, 0x09100274, 0x91002540, -0x10025400, 0x10654029, 0x02c400bd, 0x63400b11, 0x00000620, 0x00000000, -0x0027a805, 0x0a7c009d, 0xa45009d0, 0x7c059b01, 0xc009f002, 0x439b4024, -0xd934167c, 0x93402740, 0x30060c00, 0x0024c009, 0x024c009f, 0x17c00934, -0x00000e20, 0x00000000, 0x00258014, 0x4e7c809f, 0xe7c109f0, 0x7c809f08, -0xd019f012, 0x45970063, 0x0df0527c, 0x9f0027c0, 0xfc277c00, 0x0027c059, -0x267c059f, 0x53c009f0, 0x00000600, 0x00000000, 0x00850814, 0x007c801f, -0x04c00034, 0x7c021700, 0xc040f020, 0x03130005, 0x0130004c, 0x1f0200c0, -0x30007c00, 0x2004c081, 0x00cc003f, 0x50d00330, 0x00000420, 0x00000000, -0x001ca014, 0x45e4005d, 0xd8400710, 0xf4387100, 0x4037d10d, 0x02714114, -0x05140585, 0x59001c43, 0x10297400, 0x2016c005, 0x0144005d, 0x51400510, -0x00000200, 0x00000000, 0x01b2a014, 0x0b2400cd, 0xf0403c10, 0x3442c526, -0x4038d04f, 0x01c90071, 0x0c100d24, 0xdd807040, 0x10003400, 0x0020401d, -0x036400dd, 0x50400c10, 0x00000a00, 0x00000000, 0x00288005, 0x06f40ced, -0x384a2410, 0xb480e100, 0x4027d003, 0x11e10020, 0x1e1041b4, 0xe9881840, -0x1600f400, 0x200a400e, 0x00a4402d, 0x15401010, 0x00000200, 0x00000000, -0x00781015, 0x07bc85ef, 0x7cd01234, 0xbc01e720, 0xc013f007, 0x01e30079, -0x1a320724, 0xef0058d0, 0x3044bc15, 0x0068e01f, 0x07ed01ff, 0x54d01e34, -0x00000040, 0x00000000, 0x0035b810, 0x036c00df, 0x37c001f0, 0x7c00df20, -0xc005f003, 0x009f0037, 0x2df0034c, 0xdb0017c0, 0xf0187c8e, 0x0007e00d, -0x005c001f, 0x42c001f0, 0x00000660, 0x00000000, 0x007fb000, 0x068c01f3, -0x78c213f0, 0xfc49f320, 0xc0dbc004, 0x01f3007c, 0x3f3006cc, 0xf3007cc0, -0xf024dc81, 0x006cc01e, 0x07fc01f3, 0x00c21ff2, 0x00000e20, 0x00000000, -0x00a98015, 0x228408e1, 0x1ac28a10, 0x9c88e106, 0x418ad041, 0x00630038, -0x0e100284, 0xe1021c40, 0xd0308400, 0x0008400e, 0x00b4102b, 0x544083d0, -0x00000620, 0x00000000, 0x02390000, 0x03d500e1, 0x0c400650, 0xb600e940, -0x4040d020, 0x00e10238, 0x0e900284, 0xe1001a40, 0xd000b400, 0x002c400a, -0x63b400e1, 0x00400ed0, 0x00000400, 0x00000000, 0x40332804, 0x410400c1, -0x90700410, 0x16848900, 0x4000d004, 0x00010030, 0x0c900204, 0xc1421242, -0xd2002400, 0x00004009, 0x80344409, 0x104000d1, 0x00000c20, 0x00000000, -0x00a5a815, 0x824480f1, 0x64400c70, 0x3c008b02, 0xd029f00c, 0x80535034, -0x0db4024d, 0xf30016d0, 0xf0447c00, 0x0024c00d, 0x077c00d3, 0x54d00df0, -0x00000600, 0x00000000, 0x00070001, 0x027c00df, 0xa7c005f2, 0x7c009700, -0xc045f040, 0x00572033, 0x0c70027c, 0xdf0415c0, 0xf1085c00, 0x2047d00d, -0x007c001f, 0x07c001f0, 0x00000c00, 0x00000000, 0x04ff0880, 0x0ffc20d3, -0x2cc003b0, 0xcc00bb00, 0xc0033003, 0x04d30074, 0x4df0164c, 0xd3005cc0, -0x7000cc00, 0x002cc00b, 0x03cc00f3, 0x00c00f30, 0x00000c02, 0x00000000, -0x00d22081, 0x073400d1, 0x64500110, 0x44059d04, 0xc004100b, 0x03811876, -0x1dd00244, 0xd142d050, 0x10082c00, 0x00084009, 0x00c5003b, 0x04400310, -0x00000802, 0x00000000, 0x0024a001, 0x027440d1, 0x64400190, 0x54819900, -0x5009102a, 0x90194234, 0x0dd04344, 0xc1008460, 0x50084400, 0x0024404d, -0x030400c5, 0x04400c10, 0x00000200, 0x00000000, 0x00202010, 0x033400c1, -0x20400810, 0x44009d00, 0x40091402, 0x00010030, 0x0cd00304, 0xc1000040, -0x10022400, 0x0004500c, 0x0004000d, 0x40400014, 0x00000080, 0x00000000, -0x0036a000, 0x037400d3, 0x04c005b0, 0x5d009b00, 0x40013001, 0x00930034, -0x0dd0014d, 0xf30004c0, 0x70804c00, 0x1024c009, 0x034c00d7, 0x00d00d30, -0x00000ac0, 0x00000000, 0xc03ba805, 0x81fe00ff, 0x0fc006f0, 0xfc003f08, -0xc003f081, 0x003f403f, 0x0ff003fc, 0xff000fc0, 0xf000fc00, 0x000bc00b, -0x00fc003b, 0x17c003f1, 0x00000e60, 0x00000000, 0x401fa003, 0x008c003b, -0x2cd00bb0, 0xfc00f300, 0xc00f1103, 0x80f7003c, 0x0f3093fc, 0x33309cc0, -0x3000cc48, 0x1038d02b, 0x03e4c8f3, 0x0cc40ff2, 0x00000e00, 0x00000000, -0x08170801, 0x034640d1, 0x2c440911, 0x7402c140, 0x440d1000, 0x00d0103c, -0x8f512bf0, 0xc1001050, 0x50432c04, 0x40b44024, 0x03440a81, 0x04420fd0, -0x00000c20, 0x00000000, 0x0013a011, 0x00240009, 0x20420cd2, 0x7402c140, -0x480c1203, 0x40c12030, 0x0c100330, 0x01011040, 0x10002400, 0x60b540c4, -0x03040481, 0x44400cd0, 0x00000e80, 0x00000000, 0x0415a803, 0x036420d1, -0x64500d90, 0x7000d100, 0x40181042, 0x00d12834, 0x0d500374, 0xd1001440, -0x50036400, 0x44754005, 0x03440081, 0x0c400dd0, 0x00000620, 0x00000000, -0x009aa802, 0x80e1003b, 0x64c809f0, 0x3800d340, 0xd03d300f, 0x21d72034, -0x0d30037c, 0x13403484, 0x30006c00, 0x20f5c01d, 0x036d0093, 0x00d00de0, -0x00000e20, 0x00000000, 0x401d8007, 0x03df00ef, 0x3bc08b70, 0xfc80ff00, -0xc00ff411, 0x89ff103b, 0x0ef2037c, 0xff003fc4, 0xf003fc00, 0x003ec857, -0x03fd00ff, 0x1fc00ff0, 0x0000060a, 0x00000000, 0x00950802, 0x006c0013, -0xa4404d21, 0x4c00d704, 0xc005300b, 0x48d30034, 0x0d72234c, 0x074033c8, -0x70001c00, 0x2234c015, 0x034d00d3, 0x09c00c10, 0x00000420, 0x00000000, -0x0114a013, 0x0b4c00d1, 0xf4402d10, 0x4400f104, 0x40a5106b, 0x0ad106bc, -0x0f102bc4, 0xd1003740, 0x10834420, 0x00704014, 0x03c400db, 0x4c400f10, -0x00000200, 0x00000000, 0x00728007, 0x48540001, 0x60408d14, 0x1440c540, -0x480c1007, 0x01c14870, 0x0c500744, 0x05001348, 0x50001400, 0x08724804, -0x030400c1, 0x1d400c54, 0x00000a00, 0x00000000, 0x00708004, 0x87b401e1, -0x78409e11, 0xd401e100, 0x431f1007, 0x05e01070, 0x1e102784, 0xe1025b40, -0x1007860d, 0x00ca4016, 0x278401a9, 0x18401e50, 0x00000200, 0x00000000, -0x00301012, 0x001c0003, 0xa4c88d30, 0x1c00c740, 0xc00c3603, 0x00d20030, -0x0c50030d, 0x070013c0, 0x70001c04, 0x4022c064, 0x034c0083, 0x49c00d70, -0x00000040, 0x00000000, 0x023db802, 0x03cd80ef, 0x3fd08ff0, 0xad00ff02, -0x000ef023, 0x24ff003f, 0x0ff083fc, 0xfe281f40, 0xf023fc04, 0x001dd007, -0xc3fc00bf, 0x0bc00fb0, 0x00000648, 0x00000000, 0x0037a015, 0x044c0013, -0x22c00d30, 0x4c00d304, 0xc20d3003, 0x409323b4, 0x0db0134c, 0x130037e1, -0x34004c00, 0x0024c005, 0x834c009f, 0x57c12db6, 0x00000e00, 0x00000000, -0x00318832, 0x03c500c1, 0x38500e12, 0x8401e100, 0x520e1083, 0x00e1253c, -0x2e135304, 0xe10033c0, 0x10030400, 0x00285006, 0x03c400ed, 0x4b402e10, -0x00000620, 0x00000000, 0x08790203, 0x04840121, 0x4e401c11, 0xa409e100, -0x501c9007, 0x01e14178, 0x1e9027a4, 0x29087b40, 0x90048421, 0x00784116, -0x178401cd, 0x0f405e10, 0x00000402, 0x00000000, 0x00372812, 0x032400c1, -0xb2500c16, 0x2520c100, 0x409c9007, 0x09c10030, 0x0c100324, 0xc9403540, -0x90834400, 0x00304414, 0x030500dd, 0x4b480c90, 0x00000c20, 0x00000000, -0x4015a817, 0x014c0043, 0x5ec00510, 0xec805353, 0xc027b585, 0x00510014, -0x05b00165, 0x5b009740, 0x98014d00, 0x221cc017, 0x0144415f, 0x5fc005b0, -0x00000620, 0x00000000, 0x00870012, 0x80dc203f, 0x05c021f0, 0x5c001f00, -0xc5017020, 0x001f0007, 0x0070005c, 0x270407c0, 0x7a00fc40, 0x0007c021, -0x007c081f, 0x4bc00170, 0x00000c00, 0x00000000, 0x00270810, 0x024c0093, -0x24d888f0, 0x4c009340, 0xc0093002, 0x00930024, 0x0930024c, 0x930024c0, -0x73024c00, 0x0164d009, 0x020c009f, 0x43c00930, 0x00000c20, 0x00000000, -0x40262001, 0x8a448091, 0x244239d0, 0x44029b00, 0x5809b402, 0x00934024, -0x0915024d, 0x9b002440, 0x10026c40, 0x10244429, 0x0244009d, 0x07400910, -0x00000800, 0x00000000, 0x00648018, 0x1ac600b1, 0x205009d2, 0x04308140, -0x400c1202, 0x00890820, 0x09100204, 0xb1102660, 0x5902c400, 0x20244018, -0x0244009d, 0x63400914, 0x00000080, 0x00000000, 0x02202010, 0x228400a1, -0x205888d0, 0x06188902, 0x40881022, 0x08890320, 0xc8182204, 0xa9002460, -0x180aa408, 0x1220400c, 0x2205108d, 0x43402810, 0x00000080, 0x00000000, -0x0596b01d, 0x58cd1411, 0x945165d2, 0x0c020305, 0x41611008, 0x020b4184, -0x3132484c, 0x030706e8, 0x7850cc14, 0x241448e0, 0x084e001f, 0x77c00130, -0x00000a40, 0x00000000, 0x0127b819, 0x127c009f, 0x2fc84bf8, 0xfd049f41, -0xc04bf012, 0x04b781a7, 0xc9f0927e, 0x9f0127f0, 0xf0127c24, 0x002fc0cf, -0x1a7e30bf, 0x67c029f0, 0x00000e60, 0x00000000, 0x016f8018, 0x16cc01b3, -0x2cc14bb0, 0x6c069302, 0xc0c9f00a, 0x088b8324, 0x29300a7c, 0x9300a4c0, -0x30226800, 0x003cc00b, 0x0a4c00b3, 0x67c029f0, 0x00000e00, 0x00000000, -0x0307081c, 0x00448013, 0x14444190, 0x440f1103, 0x40351014, 0x011392c4, -0xa01104f4, 0x11000440, 0x50004404, 0x01044041, 0x1c440411, 0x734060d0, -0x00000c22, 0x00000000, 0x0523a010, 0x4b050281, 0x20414810, 0x84008101, -0x40ca5102, 0x04a10128, 0x48101ab4, 0x81002050, 0x10122410, 0x44a04128, -0x0a051281, 0x434068d0, 0x00000e80, 0x00000000, 0x00258818, 0x02448099, -0x24504910, 0xc5009100, 0x404b1042, 0x00b9202c, 0x081082f0, 0x91002442, -0x50024460, 0x0924520c, 0x02442091, 0x634009d0, 0x00000620, 0x00000000, -0x0023a805, 0x024c8093, 0x24c019b4, 0x6c009340, 0xc829f002, 0x21914024, -0x0934027c, 0x934024c8, 0x30026c00, 0x2024c089, 0x024d0193, 0x17c009f0, -0x00000e20, 0x00000000, 0x44258014, 0x027c0087, 0x23c009f6, 0x7c008f40, -0xd008f002, 0x05970027, 0x09f0023c, 0x9f0027c0, 0xf4023c00, 0x0463c019, -0x027c049f, 0x53c009f0, 0x00000600, 0x00000000, 0x08050814, 0x040c001e, -0x05d1813a, 0xfc001300, 0xd023f008, 0x0033000c, 0x013000cc, 0x170000c0, -0x30004c00, 0x2004cd01, 0x004d0013, 0x50c00130, 0x00000420, 0x00000000, -0x049c8014, 0x01ec005d, 0xdc402738, 0x5c005b04, 0x4005d001, 0x00530814, -0x05100144, 0x51001440, 0xb0016c00, 0x005c4137, 0x01440051, 0x50400510, -0x00000200, 0x00000000, 0x00f28014, 0x8004c8cd, 0x3140319a, 0x7600c141, -0x400cd003, 0x00c14034, 0x0c1c8314, 0xd5003060, 0x10030500, 0x4270403c, -0x030409d1, 0x50400c94, 0x00000a00, 0x00000000, 0x00388005, 0x022600ed, -0x38440810, 0x9600e900, 0x4002d000, 0x01390000, 0x4e180094, 0xe1003840, -0x90132404, 0x0030400c, 0x078400c1, 0x14405e90, 0x00000200, 0x00000000, -0x00581015, 0x078c81ef, 0x71d01a94, 0xbc016300, 0x401ff007, 0x01e12078, -0x5e30071d, 0xc70bfcd1, 0x30478c05, 0x0078c812, 0x07cc01e3, 0x54d05eb0, -0x00000040, 0x00000000, 0x2015b810, 0x037c40cf, 0x37c00bf0, 0x7c005f00, -0xd001f000, 0x00170007, 0xedf0006c, 0xdf01b740, 0xf0337c02, 0x0037d001, -0x037c10df, 0x43c8ad70, 0x00000660, 0x00000000, 0x004fa000, 0x26fc09b3, -0x7cc01bb0, 0xcc01fb00, 0xc01f3007, 0x01fb007c, 0x1f3007fc, 0xf3007cd0, -0x3007cc13, 0x087cc01b, 0x07cd01b3, 0x08c03ff0, 0x00000e00, 0x00000000, -0x020d8815, 0x32b40ca1, 0x28402a12, 0xc400e102, 0x40821400, 0x4020400c, -0x0f1000b4, 0xf1003c40, 0x50438400, 0x0038400e, 0x039400a1, 0x54400ed0, -0x00000620, 0x00000000, 0x00090000, 0x829400a5, 0x30400a90, 0x84006940, -0x400e1003, 0x10e10038, 0x0e9003b4, 0xe1423a40, 0x90230400, 0x0438508a, -0x038401a1, 0x00400ed0, 0x00000400, 0x00000000, 0x08072804, 0x06340a81, -0xa4500812, 0x05204102, 0x40001004, 0x00110000, 0x0c900074, 0xc1003240, -0xd213040b, 0x00f44018, 0x03550891, 0x18400cd0, 0x00000c20, 0x00000000, -0x4035a815, 0x4e7c0097, 0xf4c00db0, 0x4c20db40, 0x500d3047, 0x01d30034, -0x0fb40374, 0xf3003ec0, 0xb00fcd02, 0x40749055, 0x03cc0093, 0x54d00ff0, -0x00000620, 0x00000000, 0x00370001, 0x127c108f, 0x37c02df0, 0x7c00df00, -0xc081f010, 0x001f0007, 0x0d72807c, 0xdf0031c0, 0x70037c04, 0x01b7c265, -0x037c009f, 0xa7c00df1, 0x00000c00, 0x00000000, 0x011f0880, 0x038c05b3, -0x1c800930, 0xcc004346, 0xd00c3003, 0x00f3803c, 0x0f3003cc, 0xe3003cc0, -0x32038c00, 0x0034c008, 0x03cc08b3, 0x07c00d30, 0x00000c20, 0x00000000, -0x10462081, 0x03440091, 0xf4403810, 0xc4007100, 0x40031000, 0x0031000c, -0x0d1500c5, 0xdb003440, 0xb2036c00, 0x00f44029, 0x83ec0091, 0x07400d14, -0x00000802, 0x00000000, 0x4004a001, 0x02440091, 0xb7401d10, 0x0400d100, -0x420d1203, 0x00d10030, 0x0c100344, 0xd1003444, 0x10034400, 0x04765009, -0x034400d1, 0x07400d10, 0x00000200, 0x00000000, 0x00002010, 0x06050081, -0x33500810, 0x0400c110, 0x40000200, 0x00012000, 0x0c180006, 0xc9003040, -0x98032500, 0x4012400c, 0x032500c1, 0x43400c10, 0x00000080, 0x00000000, -0x0006b000, 0x024c2093, 0x37c00934, 0x4c005340, 0x480d1403, 0x40d14034, -0x0f30030e, 0xf3403c48, 0x3003cc00, 0x1036d009, 0x034d00e3, 0x07c00f30, -0x00000ac0, 0x00000000, 0x000fb805, 0x02bc00bf, 0x3cc00bf0, 0xfce07f00, -0xe203f200, 0x003f000f, 0x0ff000fc, 0xff003fc0, 0xd003fc80, 0x002dc00b, -0x03fc00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x000f8003, 0x0bcc20b3, -0x3cc40fb4, 0xec00f300, 0xc00f7081, 0x04b3412d, 0x0331538c, 0x37100fc0, -0x30218c00, 0x010fc14e, 0x00fc00a3, 0x0cc00bf0, 0x00000e00, 0x00000000, -0x00071801, 0x2b441019, 0xb4496d30, 0x4402d020, 0x440d1203, 0x0a9b00a4, -0x09500bc4, 0x91251740, 0x100b6430, 0x0007402d, 0x00740091, 0x06c009d0, -0x00000c20, 0x00000000, 0x0013a011, 0x13240409, 0xb2488c10, 0x2442c100, -0x440cd001, 0x01810221, 0x08910374, 0x41016346, 0x54226420, 0x0203400c, -0x02340981, 0x444008d0, 0x00000e80, 0x00000000, 0x0115a007, 0x01640019, -0x36400914, 0x54005104, 0x401d9007, 0x01590225, 0x29d00374, 0xd1407740, -0x50076480, 0x0087400d, 0x037401d1, 0x0c4009d0, 0x00000620, 0x00000000, -0x01538882, 0x476c0193, 0xb6d03d32, 0x2c01d340, 0xc02cf01d, 0x01934025, -0x25b0037c, 0xd72037c0, 0x70070d02, 0x80c7800d, 0x247c2193, 0x084009f0, -0x00000e20, 0x00000000, 0x245d8007, 0x0f5c0237, 0x59c09ff1, 0x4c09ff01, -0xc00f7003, 0x000f006e, 0x8f7003cc, 0xef003fc4, 0xb003dd04, 0x214b880f, -0x00fc00bf, 0x1fd00bf0, 0x00000600, 0x00000000, 0x00950802, 0x033c881f, -0xb4d024b2, 0x4c018b00, 0xc01d3029, 0x059f8024, 0x2db0034c, 0xd32437c0, -0x34034d00, 0x0284c10d, 0x034c081f, 0x08c009f0, 0x00000420, 0x00000000, -0x0834a013, 0x0174421d, 0x56d11110, 0x68009104, 0x40ad1003, 0x02dd0024, -0x2d502bc0, 0xd1403740, 0xb43f4402, 0x0056c04f, 0x174480dd, 0x4ec00dd0, -0x00000200, 0x00000000, 0x80122003, 0x0334139d, 0x70401c18, 0x0400c920, -0x04041000, 0x42cd24a4, 0x2c500750, 0xc10a3745, 0x80852410, 0x8001423c, -0x8024908d, 0x1c4009d0, 0x00000a00, 0x00000000, 0x085a0804, 0x06b4016d, -0x6a42dc18, 0xa42bc100, 0x40971024, 0x01ad0268, 0x16506794, 0x410a7b62, -0x9437e009, 0x006b401e, 0x04a441ad, 0x12401ad0, 0x00000200, 0x00000000, -0x00121012, 0x033c000f, 0x34d06c34, 0x0c08cb00, 0xc08c3020, 0x00cd1230, -0x8cf00315, 0xc3023780, 0xb0332502, 0x0011c04c, 0x932c208f, 0x48c009f0, -0x00000040, 0x00000000, 0x001da802, 0x02fc007f, 0x2fc04f72, 0x7c887f02, -0xc08ef822, 0x00ff223f, 0x0ff04b6c, 0x7f023fc0, 0xf033dc20, 0x003ec10f, -0x03dc00ff, 0x0bc08bf0, 0x00000660, 0x00000000, 0x0013a014, 0x037c8493, -0x34c01df1, 0x0c04d300, 0xc00d7101, 0x00d30024, 0x0934030d, 0x934007c0, -0x33034c12, 0x2024c81c, 0x484c009f, 0x54c019f2, 0x00000e00, 0x00000000, -0x00399912, 0x839c4863, 0x30c20ef1, 0x9410e520, 0xc40a1403, 0x0021102e, -0x02309384, 0xa1001b40, 0x12038500, 0x0028404e, 0x00ad00ad, 0x49400b70, -0x00000620, 0x00000000, 0x40d90000, 0x07b40125, 0x79441cd0, 0xc621c100, -0x601f5105, 0x01c50078, 0x1a1017c4, 0xe1006340, 0x1007c403, 0x0078401e, -0x078403cd, 0x0c401ad0, 0x00000400, 0x00000000, 0x00332016, 0xa7140105, -0xb0404c51, 0x1686c502, 0x78081013, 0x04c50032, 0x88100304, 0xd1003340, -0x123b0422, 0x1230400c, 0x030400cd, 0x49400c50, 0x00000c20, 0x00000000, -0x009ba817, 0x017c0057, 0x55d025d0, 0xcd075340, 0xd0267009, 0x00776014, -0x0530018c, 0x532017c2, 0x348dcc01, 0x009cd005, 0x8144036f, 0x5cd055f0, -0x00000620, 0x00000000, 0x00c58012, 0x001c0813, 0x05c001f1, 0x7c000f21, -0xc011f100, 0x001b0007, 0x0170007c, 0x1f00c380, 0xf4007c10, 0x0047c001, -0x007c101f, 0x4bc00170, 0x00000c00, 0x00000000, 0x40650810, 0x024d00d3, -0x63c00930, 0x4c089300, 0xc0093602, 0x08830060, 0x09300244, 0x930024c0, -0x30024c09, 0x00a7c089, 0x034c009f, 0x43c00932, 0x00000c20, 0x00000000, -0x01262001, 0x02440081, 0x67400914, 0x04019108, 0x40291002, 0x40910ae4, -0x08500244, 0x9100e440, 0x140a4512, 0x00e74209, 0x0a040e9d, 0x07400910, -0x00000800, 0x00000000, 0x0124a01c, 0x02440091, 0x2f480b10, 0x4400b102, -0x581d1002, 0x009100a4, 0x29100654, 0xb1012c50, 0x10020400, 0x0c274809, -0x0a45809d, 0x63400910, 0x00000200, 0x00000000, 0x20202814, 0x52840080, -0x2b414a10, 0x0415a145, 0x40191053, 0x15814520, 0x89502615, 0xa1422840, -0x10220408, 0x00234018, 0x0204008d, 0x43408814, 0x00000080, 0x00000000, -0x0006b01d, 0x104c0012, 0x07c04130, 0x4d043301, 0xc0013010, 0x04130104, -0x6130585c, 0x230594c5, 0x34594c16, 0x0507c541, 0x004c141f, 0x77c02130, -0x00000ac0, 0x00000000, 0x002fa919, 0x5374149d, 0x27c149d0, 0xfc409f05, -0xc00ef003, 0x00bf052f, 0x4bf0126c, 0x9f0127c8, 0xf012bd84, 0x002fc009, -0x027c80bd, 0x67c06bf2, 0x00000e60, 0x00000000, 0x002f8018, 0x8a4c22a3, -0x2dc06b70, 0xcc04b303, 0xc00f3013, 0x00b700ac, 0x29300acc, 0x930137c0, -0x50124c84, 0x012cc04a, 0x03fc04bf, 0x60c669f0, 0x00000e00, 0x00000000, -0x1007181c, 0x18460411, 0x044021b1, 0x54221121, 0xc0013108, 0x02114186, -0x25100c6c, 0x014d8340, 0xb100c400, 0x00044001, 0x0074001d, 0x704041d0, -0x00000c20, 0x00000000, 0x00250012, 0x1a240499, 0xa340c8d0, 0x24028100, -0x40099022, 0x028108a0, 0x68140a44, 0xa1022b40, 0x515aa416, 0x08a24228, -0x0634228d, 0x404028d0, 0x00000e80, 0x00000000, 0x00e50018, 0x02640499, -0x26482951, 0x74029100, 0x50091402, 0x03910026, 0x09100064, 0xa100b740, -0x1613e500, 0x00665c09, 0x067000dd, 0x604019d2, 0x00000620, 0x00000000, -0x00e78805, 0x0a65129b, 0x274839d0, 0x6c429340, 0xc829a10a, 0x01974024, -0x2930004c, 0x930027c0, 0x50126c01, 0x0066c009, 0x0e78069f, 0x14c009f0, -0x00000e20, 0x00000000, 0x40258012, 0x025c2097, 0x21c059a0, 0x1c189f00, -0xc2097002, 0x008f0127, 0x0df0007c, 0x9f0827c0, 0xf0021c04, 0x0025c008, -0x027c499f, 0x53d009f0, 0x00000600, 0x00000000, 0x02450810, 0x084c021f, -0x04d021b2, 0x4c020310, 0xc2113000, 0x00130004, 0x2130107c, 0x130004d0, -0x31284c80, 0x0204c801, 0x204c0b13, 0x50d001f0, 0x00000420, 0x00000000, -0x0898a014, 0x0144056d, 0x16d01550, 0xec907b00, 0x40261045, 0x0a71011c, -0x855404b4, 0x51601440, 0x10854523, 0x005c4087, 0x05c40371, 0x505005d0, -0x00000200, 0x00000000, 0x0072a014, 0x0346514d, 0x32421d98, 0x3401c100, -0x400c5005, 0x0ac12134, 0x0c100734, 0xc1003540, 0x10032491, 0x00304228, -0x971500c1, 0x50400dd0, 0x00000a00, 0x00000000, 0x80388801, 0x138600ad, -0x2a41085c, 0x3600e910, 0x50075001, 0x00e10010, 0x1e5053b4, 0x61403940, -0x1101a402, 0x107c4006, 0x029401c1, 0x14404ed0, 0x00000200, 0x00000000, -0x00781011, 0x0fcd016e, 0x72d01eb2, 0xbc014300, 0xc8167005, 0x01a34068, -0x1c30373c, 0xe30049c0, 0x2407ec01, 0x0878d016, 0x079c01a3, 0x54c03ff0, -0x00000040, 0x00000000, 0x0035a810, 0x077c009f, 0x37c009d0, 0x6c00df20, -0xc004b401, 0x009f2007, 0x2df0037c, 0xdf0036c0, 0xf0135c00, 0x4023c005, -0x026c005f, 0x43c00df0, 0x00000660, 0x00000000, 0x005d2000, 0x07fc01bf, -0x7cc01b30, 0x8c21e300, 0xc0167005, 0x0973004c, 0x3f30478c, 0xf3007cc0, -0x302fbc01, 0x007bc013, 0x07fc01f3, 0x00c01ff0, 0x00000e00, 0x00000000, -0x02391815, 0x03b400ed, 0x28c00b10, 0x8406e502, 0x08061000, 0x00230008, -0x2e100394, 0xe1023840, 0x1131a400, 0x02bb4006, 0x4bb418e1, 0x54408ed0, -0x00000620, 0x00000000, 0x00b90000, 0x233400ad, 0x38400a54, 0xc440e100, -0x41075001, 0x10290008, 0x8c1003c4, 0xe1000840, 0x58c3f400, 0x003f4006, -0x03b400e9, 0x00400ed0, 0x00000400, 0x00000000, 0x20312004, 0x2f3407dd, -0xb0400850, 0x0410c500, 0x40141118, 0x03410000, 0x0c100314, 0xd1003042, -0x500f6402, 0x46334004, 0x07340149, 0x10400dd0, 0x00000c20, 0x00000000, -0x00b5a815, 0x0ffc03df, 0xf4d01d74, 0x0c02d300, 0xc01c700a, 0x08db4034, -0x2d34034c, 0x935174d0, 0x70867c02, 0x00b7c009, 0x033c005b, 0x54d05ff0, -0x00000620, 0x00000000, 0x00370001, 0x437c0adf, 0x27c08ca0, 0x7c02df06, -0xd005f20a, 0x00df0017, 0x6df0037c, 0x1f00b3c0, 0xb00b7c00, 0x0037c005, -0x027c0257, 0x07c40df0, 0x00000c00, 0x00000000, 0x003f0884, 0x038c00ff, -0x20c05f30, 0xcc05b302, 0xc81f3004, 0x01d34014, 0x0f302788, 0xf30034c0, -0x3042cc10, 0x001cc006, 0x07fc1033, 0x00c00d30, 0x00000c22, 0x00000000, -0x01360085, 0x034507dd, 0x26c00d10, 0x4400cb08, 0x4071b040, 0x0b410250, -0x2d508f54, 0xd102b6c0, 0x122f4409, 0x00804e05, 0x0a740251, 0x06c00d12, -0x00000802, 0x00000000, 0x82348001, 0x034601dd, 0x34480914, 0x4400d100, -0x404d1113, 0x42510404, 0x0c100b54, 0xd1003440, 0x11034400, 0xe0344001, -0x217420d1, 0x04400d10, 0x00000200, 0x00000000, 0x00302810, 0x030620cd, -0x22400c12, 0x0400c908, 0x40049002, 0x80410000, 0x0c500314, 0xc1403242, -0x10030400, 0x00304004, 0x007420c1, 0x42400c10, 0x00000080, 0x00000000, -0x0026b000, 0x034c00dd, 0x24c00930, 0x4400d300, 0xc00d3001, 0x00530004, -0x0d30035c, 0xd30034c0, 0x34034500, 0x0014c405, 0x037c00d3, 0x00d00d34, -0x00000ac0, 0x00000000, 0x002fa805, 0x03f000ff, 0x2fc00ff4, 0xfc00ff00, -0xd003e100, 0x007f000f, 0x07d003fc, 0xff003fc0, 0xf003fd00, 0x001fd007, -0x02fc007f, 0x17c00ff0, 0x00000e60, 0x00000000, 0x492fa003, 0x02cd0033, -0x3cc00730, 0xcc203301, 0xc00ff000, 0x003f023c, 0x07f001fc, 0x3f000cc0, -0xf020ec00, 0x000ec083, 0x0bcc02f3, 0x0fc04730, 0x00000e08, 0x00000000, -0x02270801, 0x02840a91, 0xb4480512, 0x44281500, 0x400fd000, 0x001140b0, -0x05d20174, 0xdd203549, 0xd0034480, 0x1034444d, 0x03d400f5, 0x07402550, -0x00000c20, 0x00000000, 0x0023a011, 0x022494c1, 0xb0400011, 0x24000100, -0x4008c100, 0x80cd01b0, 0x44d08134, 0x0d000000, 0xd0102400, 0x00024000, -0x932484c1, 0x47408410, 0x00000e80, 0x00000000, 0x0025a803, 0x226440d1, -0x34400114, 0x44041500, 0x5249d010, 0x40516434, 0x05d00174, 0xd9003502, -0xd0034400, 0x0034600d, 0x037400d5, 0x1f408550, 0x00000620, 0x00000000, -0x0067a802, 0x036c0053, 0x34d12534, 0x6d009300, 0xc80cf001, 0x121f40b4, -0x27f0017c, 0x3f000c40, 0xd000ec00, 0x200ec003, 0x036c00d3, 0x0bc01538, -0x00000e20, 0x00000000, 0x00a58007, 0x039c80ef, 0x37c00ef0, 0xfc813f20, -0xc01df005, 0x053f013f, 0x07f021fc, 0xef003fc8, 0xf203fc00, 0x8037c80e, -0x035c00ff, 0x0fc017f0, 0x00000600, 0x00000000, 0x00350802, 0x027c00d3, -0x35800132, 0x4c009309, 0xd009b200, 0x025742b4, 0x35b0a14c, 0x130004d0, -0x70005404, 0x4007c001, 0x034c00d3, 0x08d00534, 0x00000420, 0x00000000, -0x4034a013, 0x1b7400d1, 0x78451d10, 0x45018104, 0x4029d80d, 0x2b5142f4, -0x05110144, 0xdb003440, 0x10834483, 0x0073400d, 0x03cd00f1, 0x4c400110, -0x00000200, 0x00000000, 0x0036a007, 0x1e340001, 0xf1432410, 0x14090108, -0x4138d21c, 0x00454014, 0x0d900305, 0x01000140, 0x5800140a, 0x20034000, -0x036480d1, 0x1c400410, 0x00000a00, 0x00000000, 0x02788004, 0x26b401a1, -0x78405614, 0x84090160, 0x411ad044, 0x11712058, 0x9c1005c4, 0xc9007840, -0x1007040d, 0x047b401e, 0x078429e1, 0x90401610, 0x00000200, 0x00000000, -0x00301012, 0x023c08c3, 0x31c00030, 0x1c000308, 0xc80cd228, 0x08474020, -0x2cb0010c, 0x03100540, 0x70101c04, 0x1003c800, 0x032c00d3, 0x48c00531, -0x00000040, 0x00000000, 0x003db802, 0x02f400ff, 0x3fc24af0, 0xfc003f10, -0xc08ff000, 0x006d403f, 0x0ff000b4, 0xff003ec4, 0xd003f804, 0x003f400f, -0x03fc10ff, 0x0bc003f2, 0x00000660, 0x00000000, 0x0037a015, 0x127c0057, -0x34ca04b0, 0x4c00d300, 0xc069f018, 0x80530034, 0x0df0817c, 0x134846c0, -0x30004401, 0x4046c001, 0x374c14d3, 0x47c00fb2, 0x00000e00, 0x00000000, -0x003d8812, 0x433400e1, 0x78440e14, 0x84006501, 0x0508d021, 0x80610038, -0x0fd001b4, 0xf1003940, 0x10039400, 0x0030420f, 0x239400f1, 0x4b400e10, -0x00000620, 0x00000000, 0x00790003, 0x0eb401e5, 0x78401390, 0x8601f102, -0x081ed005, 0x01690062, 0x1ed005b4, 0x21804040, 0x11842401, 0x004a4012, -0x178405e9, 0x0f421e90, 0x00000400, 0x00000000, 0x00372812, 0x833000d1, -0x30448c10, 0x0400c500, 0x400cd007, 0x02490136, 0x0cd00834, 0xc1003060, -0x18037640, 0x0030400c, 0x031600c9, 0x4b400c90, 0x00000c20, 0x00000000, -0x0055a817, 0x017c1175, 0x145027b0, 0x4c407300, 0xd005f01d, 0x007b401e, -0x05f029fc, 0x532014c2, 0x35816c00, 0x0016c005, 0x014c005b, 0x5fc077b0, -0x00000620, 0x00000000, 0x02070012, 0x087c001f, 0x07c101f6, 0x7d011f20, -0xc001f240, 0x00175805, 0x00f0007c, 0x3f000dd0, 0xf000dd40, 0x200fc802, -0x007c0007, 0x4be01170, 0x00000c00, 0x00000000, 0x00270830, 0x024c0197, -0x20800834, 0x4f009300, 0xe008f017, 0x12930024, 0x0930024c, 0x9f0024c0, -0x70027c40, 0x0026c009, 0x024c009f, 0x41c008f0, 0x00000c20, 0x00000000, -0x00262001, 0x0a440291, 0x24400912, 0x44028100, 0x4009d006, 0x02814224, -0x09340604, 0x9d0024c0, 0x30025c02, 0x00244009, 0x0244009d, 0x044009d0, -0x00000800, 0x00000000, 0x00242018, 0x0a040a95, 0x25400910, 0x44819100, -0x4829d042, 0x00910024, 0x19100745, 0xbd002c50, 0x5202d410, 0x002c400b, -0x0245009d, 0x61400dd0, 0x00000200, 0x00000000, 0x02202010, 0x22040881, -0x21500810, 0x04008108, 0x4048d002, 0x0081c230, 0x88110204, 0xad202860, -0x10229408, 0x0028502a, 0x9204048d, 0x404008d8, 0x00000080, 0x00000000, -0x0586901d, 0x584d5617, 0x05c14130, 0x44105101, 0x5051f000, 0x94514504, -0x6131004c, 0x1f3504c1, 0x70505c56, 0x050cc141, 0x2c0c0b1f, 0x75c1e1f0, -0x00000ac0, 0x00000000, 0x812fb819, 0x12f404bf, 0x22c00bf2, 0x7c00af42, -0xc08bf042, 0x00be012f, 0x49f002fc, 0x9f0425c0, 0x70125c04, 0x0027c249, -0x267c099f, 0x67c40bf0, 0x00000e60, 0x00000000, 0x01a7a018, 0x1acc02b7, -0x26c10830, 0x7c10f301, 0xc04bf002, 0x00b7042c, 0x5bf002cc, 0xb304e4c1, -0x30264c19, 0x016c0419, 0x42441493, 0x63c04930, 0x00000e00, 0x00000000, -0x0187081c, 0x18440611, 0x0c400118, 0x74021100, 0x4021d050, 0x00110584, -0x01d10044, 0x11018440, 0x10004402, 0x080442c1, 0x08440611, 0x73414110, -0x00000c20, 0x00000000, 0x00a3a010, 0x0b240285, 0xaa400b10, 0x34008100, -0x4088d002, 0x0185c060, 0x48d00604, 0x81092049, 0x141a0404, 0x42204108, -0x52051081, 0x43402814, 0x00000e80, 0x00000000, 0x0125a818, 0x86640091, -0x2c484910, 0x74009148, 0x408dd00a, 0x60912064, 0x09d00345, 0x91402400, -0x10824400, 0x08244209, 0x0264a081, 0x63401910, 0x00000620, 0x00000000, -0x00678805, 0x026c0797, 0x26806914, 0x74109300, 0xd019f006, 0x02974024, -0x09f10a44, 0x930024d0, 0x30024c00, 0x2024c009, 0x024c2093, 0x17c00930, -0x00000e20, 0x00000000, 0x00658014, 0x025d049f, 0x22c009f6, 0x7c009f00, -0xc118f00b, 0x098f0023, 0x09f00a7c, 0x8f0023c0, 0xf1023d00, 0x1023d008, -0x025c009f, 0x53c009f0, 0x00000600, 0x00000000, 0x00050814, 0x047c0407, -0x0c400330, 0x7c2a1310, 0xd0013000, 0x00132004, 0x01f0a47c, 0x112004c2, -0xf0006d00, 0x1007c001, 0x004c001f, 0x53c00130, 0x00000420, 0x00000000, -0x0014a014, 0x01f40371, 0x16c00410, 0x74097100, 0x4507102d, 0x0971001c, -0x05d109dc, 0x71001452, 0xd0016d11, 0x00574005, 0x0144005d, 0x53400510, -0x00000200, 0x00000000, 0x8036a014, 0x037400c5, 0x31400c10, 0x3442c120, -0x400c1824, 0x41c904a0, 0x0dd80334, 0xc1403140, 0xd0032406, 0x0073600c, -0x034400cd, 0x53400c10, 0x00000a00, 0x00000000, 0x02388005, 0x03b482e1, -0x03480214, 0xf480a100, 0x400a1006, 0x1029401c, 0x0ad00394, 0xe9103940, -0xd003a440, 0x043b40ce, 0x13044ced, 0x17408e10, 0x00000200, 0x00000000, -0x007c1015, 0x073c81e7, 0x79421e30, 0xbc016308, 0x40143407, 0x012b1858, -0x1bf006bc, 0xf301f1c4, 0xf007ac01, 0x007bc05e, 0x178d05cf, 0x57c05e34, -0x00000040, 0x00000000, 0x0035b810, 0x037c00dd, 0x06c201f0, 0x3c405f40, -0xd001f003, 0x00170033, 0x0df1037c, 0xd70036d0, 0xf1277d00, 0x0037c00d, -0x2b7c16df, 0x43c00df0, 0x00000660, 0x00000000, 0x007fa000, 0x07cd01f3, -0x7cc2df32, 0xfc013300, 0xc012f00e, 0x01330869, 0x1ff005fc, 0xfd107cc0, -0x1007e809, 0x007f849f, 0x0fcc01f3, 0x02c01f20, 0x00000e00, 0x00000000, -0xa03d8815, 0x03c40aeb, 0x08418214, 0xb4002100, 0x4002d013, 0x02212038, -0x4bd001a0, 0xfd013848, 0x1003c41c, 0x002a418e, 0x038400e1, 0x44400e10, -0x00000620, 0x00000000, 0x40390000, 0x23840021, 0x38044e10, 0xb4002102, -0x4002d843, 0x0029023c, 0x0ad061b4, 0xe9303a60, 0x90038400, 0x0033408e, -0x032500e1, 0x02400e10, 0x00000400, 0x00000000, 0x00332804, 0x05000401, -0x01403010, 0x34020100, 0x4000d003, 0x00094030, 0x0dd00134, 0xcd00b242, -0x942b0402, 0x0322402c, 0x032400c1, 0x10400c10, 0x00000c20, 0x00000000, -0x003da815, 0x474802d1, 0x34900d30, 0x7c02d300, 0xd00cf006, 0x0a1b0034, -0x0de00c3c, 0xdb21fec2, 0xb003cc4b, 0x40b7c0bf, 0x03e400f1, 0x56c00e34, -0x00000620, 0x00000000, 0x00370001, 0x837c20df, 0x06c801f0, 0x7c429f40, -0xc029f002, 0x42170227, 0x09f0106c, 0xcf0131c0, 0x70431d02, 0x0036c00c, -0x035d00df, 0x07c01df0, 0x00000c00, 0x00000000, 0x003f0880, 0x07bc40ff, -0x34c10c30, 0xfe30ff20, 0xc0073057, 0x44338038, 0x0b1084fc, 0xfb003ce2, -0xb003cc00, 0x017c800f, 0x03cc00df, 0x00d00df0, 0x00000c22, 0x00000000, -0x00362081, 0x077422dd, 0x04400114, 0x7402dd08, 0x4001104f, 0x031b0634, -0x0d100874, 0xd10036c0, 0x30034441, 0x0034420d, 0x036c80d7, 0x04400dd0, -0x00000802, 0x00000000, 0x0034a001, 0x2374211d, 0x34400d14, 0x34021d00, -0x40011003, 0x00111034, 0x0d501274, 0xd9103450, 0x50034403, 0x0035400d, -0x034400cd, 0x04400dd0, 0x00000200, 0x00000000, 0x00302010, 0x0234000d, -0x00400010, 0x36000d00, 0x40001402, 0x80012000, 0x08560234, 0x01003040, -0x1c030600, 0x0031640c, 0x032600cd, 0x40400dd0, 0x00000080, 0x00000000, -0x1036b000, 0x037c000f, 0x34c00d14, 0x74801f00, 0xd0013003, 0x00110014, -0x0954027c, 0xdb003440, 0x30034d00, 0x0035d00d, 0x03cc00ff, 0x00c00df0, -0x00000ac0, 0x00000000, 0x203fb205, 0x00fc003c, 0x0fc403f1, 0xfc003f00, -0xc20bf003, 0x003f203f, 0x0fb102fc, 0xbf003fd0, 0x7003fc00, 0x003ec00f, -0x03fc00f7, 0x17c00ff0, 0x00000e60, 0x00000000, 0x000ba003, 0x03cc82e3, -0x3fc00f34, 0x8c04f308, 0xc0033000, 0x34b320bf, 0x4f3203cc, 0x33003fc0, -0x3073ec04, 0x030cc023, 0x73cc083f, 0x0fc28f30, 0x00000e00, 0x00000000, -0x20070801, 0x0b442051, 0x97400d10, 0x452ad11a, 0x420d1103, 0x029b003f, -0x4d143b44, 0x11203349, 0x100bf428, 0x03a54c01, 0x1b54449d, 0x07484d14, -0x00000c20, 0x00000000, 0x4203a011, 0x23148491, 0x33480c58, 0x0400c100, -0x40001000, 0x808d0133, 0xcc104351, 0x01403340, 0x10132400, 0x00214049, -0x0304004d, 0x47400c55, 0x00000e80, 0x00000000, 0x1045a803, 0x03560611, -0x37423d5c, 0x5600d100, 0x400d5003, 0x03dc0037, 0x0d100344, 0x51003344, -0x10037424, 0x10254029, 0x0354081d, 0x0f400d50, 0x00000620, 0x00000000, -0x0047a802, 0x071d0113, 0x27c62d70, 0x4d005300, 0xc4013000, 0x019f0037, -0x0d30035c, 0x130037c0, 0x32036c05, 0x2025d020, 0x014c201f, 0x0bc00d74, -0x00000e20, 0x00000000, 0x082d8007, 0x936c01bf, 0x17880fb2, 0xec894f08, -0xc30fb003, 0x008a203f, 0x0ff083fc, 0x3f083fc0, 0xf003fc00, 0x212fcb33, -0x0bfe01bf, 0x1fc00fb2, 0x00000600, 0x00000000, 0x00050802, 0x234d0013, -0x28c05d30, 0x4c00f302, 0xc01131a0, 0x069b0037, 0x0d30035c, 0xd34036c0, -0x32034c02, 0x0024d02d, 0x034d0153, 0x0bc00d30, 0x00000420, 0x00000000, -0x20308013, 0xaf400081, 0xb4002d24, 0x050ad102, 0x403d1007, 0x0250403f, -0x0f340390, 0xd1003c42, 0x1003c5a0, 0x0064001d, 0x03542391, 0x4f400d00, -0x00000200, 0x00000000, 0x0022a007, 0x0e240001, 0x70422c10, 0x22088100, -0x48200080, 0x00c50037, 0x0c900304, 0x01003200, 0x10034448, 0x03804004, -0x13448415, 0x1f400c00, 0x00000a00, 0x00000000, 0x60488004, 0x27a441b1, -0x58401614, 0xa485e100, 0x601e120f, 0x0165427b, 0x9e108794, 0x40407840, -0x10070405, 0x02604016, 0x261481a5, 0x13001e10, 0x00000200, 0x00000000, -0x02a01012, 0x022c20c3, 0x30c00c30, 0x2c008100, 0xc0003020, 0x208f4037, -0x0db0234c, 0x830032c0, 0x32030c00, 0x0220d14d, 0x230c8257, 0x4bc04c34, -0x00000040, 0x00000000, 0x200db802, 0x03dc00ff, 0x3fc80af0, 0xdc04ff40, -0xc80fd083, 0x407b00bf, 0x0ff003fc, 0xbf203fc1, 0xd003fc84, 0x223fc00f, -0xa3fc80bb, 0x0bc00ff4, 0x00000660, 0x00000000, 0x0027a015, 0x025c01df, -0x2dc20d70, 0x4c201340, 0xd011f000, 0x21d30af5, 0x1df0034c, 0x530037c0, -0xf3134c01, 0x0024c80c, 0x014c0013, 0x57c20d30, 0x00000e00, 0x00000000, -0x00298812, 0x038400fd, 0x18600e14, 0x86004108, 0x400e9103, 0x00e1003c, -0x0ed00384, 0x4101bc40, 0xd0c38400, 0x102c400e, 0x02c480b1, 0x4b400e50, -0x00000620, 0x00000000, 0x00790003, 0x0694816d, 0x61401f51, 0x8401a120, -0x4012d004, 0x8181813a, 0x5cd83784, 0xa1007940, 0xd8278451, 0x006b401f, -0x07848321, 0x0f401e58, 0x00000400, 0x00000000, 0x88332812, 0x030682cd, -0x30400850, 0x0424c100, 0x420c9003, 0x10c18032, 0x0cd10305, 0x81403040, -0xd0030423, 0x0037413c, 0x13450191, 0x4b400c50, 0x00000c20, 0x00000000, -0x015da817, 0x015c047f, 0x1dc02670, 0x4dc07301, 0xc005f081, 0x02730017, -0x05f001cc, 0x730015c0, 0xf0014d00, 0x001fd106, 0x01cc0273, 0x5fc00570, -0x00000620, 0x00000000, 0x00470012, 0x007c041f, 0x07c011a0, 0xfc001f10, -0xc203f000, 0x021f5005, 0x01f0007c, 0x1f0005c0, 0xf0007c00, 0x44044421, -0x007c011f, 0x4bc001d0, 0x00000c00, 0x00000000, 0x00670810, 0x023c009f, -0x20c00934, 0x44008300, 0xc009e002, 0x00930223, 0x8900023c, 0x930027e0, -0x20023c10, 0x08a4c009, 0x024c029b, 0x43c20931, 0x00000c20, 0x00000000, -0x22662001, 0x0274009d, 0x24400910, 0x45009140, 0x4029d002, 0x06918827, -0x09340274, 0x91002740, 0xf0027400, 0x08e55849, 0x0a6c0391, 0x074009b0, -0x00000800, 0x00000000, 0x0024a018, 0x2a74009d, 0x24400914, 0x54009548, -0x600bd002, 0x00910027, 0x09500274, 0x91002340, 0x50027440, 0x04246009, -0x06448099, 0x63600910, 0x00000200, 0x00000000, 0x25202010, 0x5234208d, -0x20400910, 0x95148505, 0x621ad002, 0x14810023, 0x48502234, 0x81022341, -0x90123400, 0x02216089, 0x26244981, 0x43402890, 0x00000080, 0x00000000, -0x0106b01d, 0x107c401f, 0x04c00131, 0x5c041501, 0xc002f000, 0x04110007, -0x4170587c, 0x11058740, 0x70047c14, 0x0584c021, 0xd84c821b, 0x77c20130, -0x00000ac0, 0x00000000, 0x082fb819, 0x02bc14bf, 0x2f500af4, 0x6c00bb20, -0xc149f002, 0x00bf05a7, 0x4930127c, 0xbf4127c1, 0xf1727c20, 0x492f404b, -0x12fc84bf, 0x67c009f2, 0x00000e60, 0x00000000, 0x012da018, 0x02fc029f, -0x25c00870, 0x4c049301, 0xc02bf082, 0x04bf01af, 0x6b304a7c, 0xb30127c0, -0xf0124c04, 0x00a8c00b, 0x4acc00b3, 0x63c62930, 0x00000e00, 0x00000000, -0x0087081c, 0x0874045d, 0x84420112, 0xc4021118, 0x4001d000, 0x001d0107, -0x41100874, 0x11158744, 0xd2104402, 0x21044041, 0x8854b411, 0x73400110, -0x00000c20, 0x00000000, 0x02332010, 0x0a36008d, 0x69400b50, 0x8409a112, -0x4048d002, 0x038d00a3, 0x28141234, 0x81422340, 0xd04a0509, 0x21e07108, -0x12248081, 0x4340081c, 0x00000e80, 0x00000000, 0x2225a818, 0x0274019d, -0x2c586910, 0xc000b120, 0x4009d002, 0x049d0027, 0x09100274, 0x91002740, -0xd0824420, 0x00644209, 0x0a741891, 0x63400918, 0x00000620, 0x00000000, -0x0027a805, 0x023c029f, 0xa5c02870, 0x4d029340, 0xc009e002, 0x009f0027, -0x0930027c, 0x934027c0, 0xf1024c2a, 0x4024c109, 0x066c0093, 0x17c20930, -0x00000e20, 0x00000000, 0x00258014, 0x027c009f, 0x27c009f0, 0x7c409e00, -0xc009f002, 0x009f0027, 0x09f0027c, 0x8f0027c0, 0xf0027c01, 0x0427c039, -0x0a5c819f, 0x53c009f0, 0x00000600, 0x00000000, 0x00050814, 0x404c821b, -0x08c00331, 0xcd002340, 0xc001f000, 0x00130004, 0x01f2004c, 0x130007c2, -0xf0007c00, 0x0000d001, 0x404cba13, 0x53c00130, 0x00000420, 0x00000000, -0x229ca014, 0x01c42051, 0x14420510, 0x45005100, 0x4007d001, 0x00714014, -0x05d0016c, 0x51001740, 0xd2017401, 0x301cc017, 0x05d4c271, 0x53400510, -0x00000200, 0x00000000, 0x00b2a014, 0x032400c9, 0x30600c14, 0x1400c100, -0x500cd003, 0x01c10020, 0x0cd00344, 0x81003740, 0xd0033401, 0x00724129, -0x0f4402d1, 0x53400c90, 0x00000a00, 0x00000000, 0x00788005, 0x032405e1, -0x08420318, 0x94002100, 0x411ad800, 0x03410068, 0x0ed01384, 0xe1803340, -0xd013b410, 0x443c410a, 0x43940021, 0x17408e91, 0x00000200, 0x00000000, -0x00781015, 0x07ad05fb, 0x70501e30, 0x9c01c300, 0xc017f007, 0x0163007c, -0x1ef10f85, 0xa3407bc0, 0xf00fbc01, 0x087ac01b, 0x06cc81f3, 0x57c01eb4, -0x00000040, 0x00000000, 0x0031b810, 0x005c89df, 0x07c001f0, 0x6e001f00, -0xc009f000, 0x00df2037, 0x0df0037c, 0xdf07b7c0, 0x90077c00, 0x0017c001, -0x027c003f, 0x43c00d70, 0x00000660, 0x00000000, 0x007fb000, 0x17fc01ff, -0x7cc01f70, 0x8c01f340, 0xc01b3007, 0x01f7006c, 0x1f3007cc, 0xf3007fc0, -0x3007cc01, 0x087cc01f, 0x07cd01ff, 0x03c21f34, 0x00000e00, 0x00000000, -0x00398015, 0x11b480ed, 0x08418210, 0x86082102, 0x480b1000, 0x84610028, -0x0e100390, 0xa3003b48, 0x1003c400, 0x00395006, 0x4bc4002d, 0x57400e10, -0x00000620, 0x00000000, 0x00290000, 0x73b400ed, 0x30400e50, 0xc500c100, -0x40021003, 0x20650030, 0x0e100380, 0xe9003b40, 0xd0238400, 0x0618400f, -0x008408fd, 0x03400e50, 0x00000400, 0x00000000, 0x04e32804, 0x003400cd, -0x00400012, 0x04000100, 0x40281000, 0x40c10034, 0x0c100314, 0x81403742, -0xd0030421, 0x00914404, 0x0c04025d, 0x13400d50, 0x00000c20, 0x00000000, -0x00b5a815, 0x073c00ff, 0xf4d0ac70, 0x4c01d300, 0xc07d310b, 0x09870034, -0x0934038c, 0xdb003fc0, 0xf403cd24, 0x00b4c009, 0x0b4f909f, 0x57c00f70, -0x00000620, 0x00000000, 0x02370001, 0x027c10df, 0x43c001f0, 0x7c011f04, -0xc04df404, 0x039f0037, 0x09f0037c, 0x9f0037c4, 0x10037c00, 0x2027c00d, -0x017c001f, 0x07c00d80, 0x00000c00, 0x00000000, 0x003b0880, 0x037c80f3, -0x3cc00f31, 0xc500e300, 0xc8073043, 0x0593107c, 0x0f30034e, 0xc3003fc0, -0xf003cd03, 0x043cc00b, 0x42cc903f, 0x00c20f30, 0x00000c22, 0x00000000, -0x04b60081, 0x047440d1, 0x06c00110, 0x04001170, 0x400d1000, 0x90950234, -0x1d120344, 0x91003744, 0xd1034400, 0x0057d414, 0x0c04411d, 0x05400d10, -0x00000802, 0x00000000, 0x8014a001, 0x237400d1, 0x34420d11, 0x5500d100, -0x40181003, 0x40d14034, 0x89100344, 0xd1803540, 0xd2034400, 0x0074401d, -0x0644019d, 0x04400d10, 0x00000200, 0x00000000, 0x00102010, 0x003400c1, -0x02400110, 0x54000100, 0x40081000, 0x00c50030, 0x08100344, 0x81103340, -0xd0030400, 0x08335004, 0x0044410d, 0x41400c10, 0x00000080, 0x00000000, -0x4006a000, 0x037c00d3, 0x34c00d34, 0x5c00d300, 0xc8013003, 0x00d31034, -0x0d320344, 0xd34039c4, 0xf0034c00, 0x2014d00d, 0x004d009f, 0x00c00d34, -0x00000ac0, 0x00000000, 0x200fa805, 0x00fc00ff, 0x0fc002f0, 0xec003f00, -0xc00bb080, 0x00ff003f, 0x0ff083fc, 0xb9003fc0, 0xf203fc00, 0x001fc006, -0x00fc002f, 0x17c00ff2, 0x00000e60, 0x00000000, 0x002ba003, 0x0084807b, -0x2ec00f21, 0xec00f348, 0xc00f1501, 0x003300bf, 0x0b3410cc, 0x33040cd0, -0x3023cc00, 0x00bcc02f, 0x03cc06f3, 0x0cc10f30, 0x00000e00, 0x00000000, -0x04a70821, 0x034490dd, 0x24420b10, 0x5400d104, 0x400d1008, 0x140102a3, -0x29100844, 0x1105b4c0, 0x50134416, 0x203d480f, 0x43c402f1, 0x04402d50, -0x00000c20, 0x00000000, 0x0323a011, 0x0025048d, 0x26400c90, 0x6400c101, -0x400c1023, 0x80010923, 0x61902020, 0x41400041, 0x90030408, 0x4930404c, -0x03250cc9, 0x44400c90, 0x00000e80, 0x00000000, 0x0125a803, 0x236400dd, -0x27401d91, 0x7400d180, 0x480d1000, 0x14011033, 0x05900064, 0x41063640, -0xd0034400, 0x0035400c, 0x036400d9, 0x0c400cd0, 0x00000220, 0x00000000, -0x0037a800, 0x4c6c019f, 0x22900db1, 0x6c40d300, 0xc00d3000, 0x00930027, -0x21b83c2d, 0x1300c0c1, 0xb003cd02, 0x0030c00d, 0x034c00db, 0x08c00db0, -0x00000e20, 0x00000000, 0x003d8087, 0x07dc15ff, 0x6cc40a70, 0xdc00ff02, -0xc00fe001, 0x003f002f, 0x0b7000dc, 0x7f080dc8, 0x70033c09, 0x003fc00d, -0x03d800f7, 0x1fc10f72, 0x00000600, 0x00000000, 0x00350802, 0x405cc093, -0x25c08d70, 0x5c00d300, 0xd00d3000, 0x001b2034, 0x3130a04c, 0xbb008ec0, -0xb0034d02, 0x0034d00d, 0x031c00cf, 0x08d00d70, 0x00000420, 0x00000000, -0x0874a013, 0x03444791, 0x24481d10, 0x0400f100, 0x400f1003, 0x301100b4, -0x04100044, 0x5d003440, 0x1083c402, 0x003eca0f, 0x03c400fd, 0x4c402f10, -0x00000200, 0x00000000, 0x11e2a003, 0x045403d1, 0x21400cd1, 0x1400d140, -0x400c1101, 0x000d04b0, 0x00904005, 0x8d800240, 0x90030418, 0x2030400c, -0x031400cd, 0x1c400c50, 0x00000a00, 0x00000000, 0x46688000, 0x548401f1, -0x6940bc90, 0x8401e900, 0x401e1004, 0x01212368, 0xb29404c4, 0xad0a7864, -0x12078401, 0x007a401e, 0x078429ed, 0x10501e10, 0x00000200, 0x00000000, -0x00201016, 0x001c0a83, 0x25c48cf2, 0x5c08d300, 0xc00d3403, 0x080f0120, -0x09b00005, 0xdf0202c0, 0xb0130c0e, 0x0030c04c, 0x035c00df, 0x48c00d70, -0x00000040, 0x00000000, 0x4835b200, 0x117c60cd, 0x26c2ad60, 0x7c30d700, -0xc08df200, 0x001f4137, 0x0d70223c, 0xdf023780, 0xf0037c28, 0x0037c00d, -0x237c60df, 0x0bc18dd0, 0x00000660, 0x00000000, 0x0077a015, 0x007400d3, -0x34d02c21, 0x7c00df00, 0xc00db000, 0x80134023, 0x013000fc, 0x33007ec2, -0xf0037c00, 0x033484cd, 0x334d1cd1, 0x54c00df2, 0x00000e00, 0x00000000, -0x00298810, 0x00f480e1, 0x38400e10, 0xb424ed00, 0x4c4e1001, 0x0061002b, -0x025000b4, 0xa1003d00, 0xd083b400, 0x043c42cf, 0x539400e5, 0x48405ed0, -0x00000620, 0x00000000, 0x00710083, 0x04b401a1, 0x78401f10, 0xf041ed00, -0x449e9904, 0x0121047f, 0x131005b4, 0xe1004840, 0xd007b401, 0x0138401e, -0x078485c1, 0x0c501ed0, 0x00000400, 0x00000000, 0x40732812, 0x813400c1, -0x34420c10, 0x7400cd02, 0x400c103f, 0x21010073, 0x0c100634, 0xc101f040, -0xd0033407, 0x0030420c, 0x031400c5, 0x48400cd0, 0x00000c20, 0x00000000, -0x045da816, 0x01fc1171, 0x54c00634, 0xfc007f00, 0xc005b009, 0x9373201f, -0x273485fc, 0x7341dcc0, 0xf0817c07, 0x0014d005, 0x014c0053, 0x5cc005f0, -0x00000620, 0x00000000, 0x00070012, 0x007c921f, 0x07c021f2, 0x7c001f00, -0xc001f000, 0x011f0007, 0x11f0287c, 0x0f0005d0, 0xf1007c02, 0x0007c000, -0x003e001f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x02260810, 0x067c009f, -0x24c40920, 0x7c009340, 0xc8093002, 0x009b0027, 0x1830027c, 0x9f0026c0, -0xf2024c01, 0x0020c009, 0x024c0093, 0x40d09872, 0x00000c20, 0x00000000, -0x01a62000, 0x2634009d, 0x24420910, 0x74009b08, 0x40091002, 0x80910027, -0xb9b06e34, 0x9d082442, 0xd0024451, 0x08244009, 0x82440091, 0x04403910, -0x00000800, 0x00000000, 0x00248018, 0x0274189d, 0x24401951, 0x74009100, -0x40091002, 0x80990063, 0x09100274, 0x9d002760, 0xd0024404, 0x40245409, -0x02440081, 0x60400950, 0x00000200, 0x00000000, 0x02202010, 0x2676088d, -0x20400850, 0x34088102, 0x44881022, 0x08812263, 0x98902234, 0x8d002048, -0xd0020548, 0x01204048, 0x32040481, 0x40408812, 0x00000080, 0x00000000, -0x0586b01c, 0x087c821f, 0x84d14574, 0x7c161100, 0xc1613458, 0x221b0587, -0x6134587c, 0x1f3787c1, 0xf2784c36, 0x22c4c8b1, 0x0c4d0b13, 0x74c16470, -0x00000ac0, 0x00000000, 0x012fb839, 0x12fc04bf, 0x2fc00bb0, 0xbc049f01, -0x8849f113, 0x84bf412f, 0x4a7012bc, 0xbf106fc0, 0xf0867c24, 0x0267c099, -0x327c099f, 0x67c049f0, 0x00000e60, 0x00000000, 0x01afa018, 0x02c402b3, -0xa4c04b20, 0x0c269348, 0x40693012, 0x02b30227, 0x2be0123c, 0xb111a7c0, -0xf1367c04, 0x0023c009, 0x4a4c1493, 0x60c06a30, 0x00000e00, 0x00000000, -0x0987089c, 0x00440451, 0x0460a112, 0x44261109, 0x40611058, 0x00114283, -0x24710e64, 0x11018700, 0xd0207414, 0x038748a1, 0x18540601, 0x70404110, -0x00000c20, 0x00000000, 0x40a7a010, 0x42240099, 0x22520990, 0x25029100, -0x4028100a, 0x80811127, 0x68d02234, 0x81032340, 0xd0123402, 0x04234148, -0x12241081, 0x40406890, 0x00000e80, 0x00000000, 0x0935a818, 0x02648899, -0x26400994, 0x64009100, 0x40091002, 0x20910827, 0x09512864, 0x91562240, -0xd2027494, 0x08274009, 0x0274a091, 0x62400990, 0x00000620, 0x00000000, -0x0027a801, 0x866d039b, 0x264019b1, 0x6c009300, 0xc0093402, 0x18930067, -0x09f0007c, 0x9300a7c2, 0xf0027c00, 0x4027c809, 0x026c0093, 0x14d009b4, -0x00000e20, 0x00000000, 0x10658014, 0x0a5d0097, 0x25c44970, 0x1c009f10, -0xc009f102, 0x009f0237, 0x39f0056c, 0x9f0067c0, 0xf2027c20, 0x2023c009, -0x021c009f, 0x51d00870, 0x00000600, 0x00000000, 0x04050814, 0x107c821f, -0x06c40131, 0x7c001f00, 0xd0013008, 0x02130404, 0x6130406c, 0x134084c0, -0x60007c2a, 0x0004c001, 0x004c0003, 0x50c00130, 0x00000420, 0x00000000, -0x0498a014, 0x01f4236d, 0x14500610, 0xf6004d00, 0x44051401, 0x00512090, -0x07101d44, 0x71001ec0, 0x10017400, 0x401c4005, 0x816c2051, 0x504207b0, -0x00000200, 0x00000000, 0x00b2a014, 0x03749bcd, 0x34400c11, 0x3400cd20, -0x400c9003, 0x00c100f2, 0x1c140324, 0xc1003040, 0x50033407, 0x0030400c, -0x030400c1, 0x50440492, 0x00000a00, 0x00000000, 0x00288005, 0x02f400ed, -0x38410f10, 0xb404ed11, 0x401c9203, 0x01b100ba, 0x3e102784, 0xe1013040, -0x10073400, 0x0138601e, 0x032501e1, 0x14400e90, 0x00000200, 0x00000000, -0x00781015, 0x07bc81ef, 0x78c41634, 0xb403ef00, 0xc01eb017, 0x01e3404a, -0x1e3027ac, 0x21027850, 0x7017bc01, 0x00f8c15c, 0x1f8c02e3, 0x54c09ab0, -0x00000040, 0x00000000, 0x1005b810, 0x003c001f, 0x35c000f1, 0x7c00df02, -0xc88d5023, 0x028e0885, 0x0ff01b7c, 0x3f0b37c8, 0xf0237c00, 0x01b7d0ed, -0x075c14df, 0x43d069f0, 0x00000660, 0x00000000, 0x406fa202, 0x37cc0973, -0x7f401f21, 0xc801f302, 0xc01ff007, 0x03f300ec, 0x1b7027cc, 0xf3207cc0, -0x100fcc21, 0x40fcc0df, 0x07cc01f3, 0x00c017f0, 0x00000e00, 0x00000000, -0x000d8815, 0xb0848aa1, 0x3f444e10, 0x9400e000, 0x400ed003, 0x84a10128, -0x07507384, 0xe1013941, 0x10038400, 0x0138488e, 0x039400f5, 0x54408ed0, -0x00000620, 0x00000000, 0x00390018, 0x33c60861, 0x3a41061a, 0x8400e150, -0x400ed003, 0xc1e0441a, 0x0b400384, 0x61003840, 0x10038410, 0x9038444e, -0x038400e1, 0x00501ad0, 0x00000400, 0x00000000, 0x00032806, 0x04050101, -0x33401410, 0x0400c100, 0x000cd007, 0x12910012, 0x38100b44, 0x01427140, -0xd0034413, 0x0830400c, 0x031500c4, 0x104008c0, 0x00000c20, 0x00000000, -0x1875a81d, 0x4a448591, 0x3ec01d05, 0xcd00f300, 0xd20ff01f, 0x93934016, -0x15700f4d, 0xd300bcc2, 0x3403cd03, 0x003cd00f, 0x03cc00f3, 0x54c001d0, -0x00000620, 0x00000000, 0x00670001, 0x027c229f, 0x37c42df1, 0x7ca0df00, -0xc00df003, 0x00df0015, 0x2ff0837c, 0xff0033c1, 0x30037c02, 0x2033c20c, -0x032c00df, 0x07c009f0, 0x00000c00, 0x00000000, 0x103f0801, 0x43cc187f, -0x3cd40330, 0xbc00df00, 0xc00c3043, 0x08b30024, 0x2730434c, 0x93043fc0, -0x3003f801, 0x003cc80d, 0x03cc00f3, 0x00c08f30, 0x00000c22, 0x00000000, -0x00e62081, 0x0404030d, 0x34409812, 0x7420dda0, 0x400d1003, 0x00d104a4, -0x65b0e344, 0x11003742, 0x10837405, 0x0034400d, 0x036c00d1, 0x04400d10, -0x00000802, 0x00000000, 0x0074a000, 0x064420dd, 0x34422d10, 0x7480dd00, -0x400d5203, 0x00910800, 0x01100344, 0x11003740, 0x10036408, 0x1034400d, -0x8344a0c1, 0x04400010, 0x00000200, 0x00000000, 0x00202010, 0x0044009d, -0x30400c10, 0x3480cd00, 0x400c5103, 0x00c10820, 0x00900341, 0xc1483340, -0x12033480, 0x0030400c, 0x032480c1, 0x40500810, 0x00000080, 0x00000000, -0x0836b000, 0x034d004f, 0x34c00534, 0x7c80dd00, 0xd00d7403, 0x00a34034, -0x0130034d, 0x13003f40, 0x3403ac00, 0x4038d00f, 0x034c00f3, 0x00c00e34, -0x00000ac0, 0x00000000, 0x000fb804, 0x80bc003f, 0x3fc20fd8, 0xfc20ff00, -0xc20fb003, 0x00ff083f, 0x03f083fc, 0x3f003bc2, 0xe003fc00, 0x403fc00f, -0x03fc00ff, 0x17c00ff0, 0x00000e60, 0x00000000, 0x000ba003, 0x98cc02bf, -0x3cc20ff0, 0xcc88bf20, 0xc00f3032, 0x00f7103c, 0x033003fc, 0xfb203dc0, -0xf002ccc0, 0x012fc00f, 0x03cc04b3, 0x0cc4cbf0, 0x00000e00, 0x00000000, -0x08350801, 0x004482ed, 0x36c825c0, 0x54469d10, 0x400d5033, 0x40c10039, -0x01110274, 0xe9003048, 0xd0024480, 0x02974a0d, 0x01444a91, 0x0440cbd0, -0x00000c20, 0x00000000, 0x00332011, 0x1811068d, 0x21482c58, 0x16868d20, -0x400c1002, 0x80c58832, 0x01100374, 0xc9003140, 0xd0023400, 0x0033400c, -0x03070081, 0x444008d0, 0x00000e88, 0x00000000, 0x00b5a803, 0x085440dd, -0x36401dd0, 0x16018d00, 0x400d5046, 0x00d11037, 0x0d160274, 0xd9003400, -0xd2036440, 0x0037440d, 0x014620d0, 0x0c4089d0, 0x00000620, 0x00000000, -0x0057a800, 0x045c009f, 0x74c01c70, 0x4c879f00, 0xc00f310f, 0xa0d70036, -0xb130007c, 0xdb0035c0, 0xe0227d00, 0x1033c00f, 0x014c0853, 0x08d01df1, -0x00000e20, 0x00000000, 0x00fd8087, 0x15e404ee, 0x7fc40ff0, 0xf8009e21, -0x800ee003, 0x02ff003d, 0x0ff203f8, 0xff10bf44, 0xf002dc40, 0x401fc00f, -0x17fc00ff, 0x1fc01bf0, 0x00000600, 0x00000000, 0x00350802, 0x014c00db, -0x14c10df1, 0x4c021f01, 0xc04d700a, 0x40d34037, 0x61f0024c, 0xd32034c8, -0xf0824c04, 0x20b7c00d, 0x034d00c3, 0x08d00cf0, 0x00000420, 0x00000000, -0x23b4a013, 0x2dc00091, 0x34501dc0, 0x44019d00, 0x423f1082, 0x4491007b, -0x3cd00304, 0xf00aa440, 0xd0034400, 0x0037400f, 0x034401d1, 0x4c420dd0, -0x00000200, 0x00000000, 0x0032a007, 0x22048089, 0xb24008d0, 0x04418d08, -0x443c1041, 0x13cd0033, 0x00d04b04, 0xd0003148, 0xd0830402, 0x0023400c, -0x0224488d, 0x1e4008d0, 0x00000a00, 0x00000000, 0x407c8006, 0x058409e9, -0x7a4097d1, 0xe501ad00, 0x411e1127, 0x09ed067b, 0x12d00680, 0xe1027900, -0xd0068419, 0x6273401e, 0x06a4098d, 0x12409ad0, 0x00000208, 0x00000000, -0x02301012, 0x010c00ca, 0x32c188f0, 0x0c3c8f00, 0xc0cc3420, 0x00cf2233, -0x0df0030c, 0xc34231d1, 0xf0030d00, 0x02b3c48c, 0x222c088f, 0x4ac289ea, -0x00000040, 0x00000000, 0xa03db802, 0x43fd00b7, 0x35408ec0, 0x9e089f12, -0xc28db1a2, 0x20f30237, 0x0ff120f1, 0xff023ec0, 0xf103fc00, 0x023fc00f, -0xa2dc68f3, 0x09c08bf0, 0x00000660, 0x00000000, 0x0037a015, 0x024c009f, -0xb4c81bf0, 0x5c009301, 0xc00d3403, 0x20d36437, 0x0d30024c, 0xd30130d0, -0xf0034c03, 0x0037c00f, 0x044c0013, 0x54c04df2, 0x00000e00, 0x00000000, -0x00398812, 0x118488ed, 0x3ac40ed1, 0xb480e584, 0x486eb003, 0x00e1003b, -0x0e1083c4, 0xe1043840, 0xd002840c, 0x0033405e, 0x03840085, 0x48450ed0, -0x00000620, 0x00000000, 0x00790083, 0x05a421ad, 0xda4018d0, 0xb401a100, -0x405e1806, 0x11f1027b, 0x1e100684, 0xe1007e44, 0xd0078408, 0x007b429e, -0x02a403a1, 0x0c401cd1, 0x00000400, 0x00000000, 0x00730812, 0x074421cd, -0x32406cd2, 0x74028524, 0x480c900a, 0x00c90033, 0x1c144504, 0xc1027240, -0xd8030520, 0x0073400c, 0x472503c5, 0x48408cd0, 0x00000c20, 0x00000000, -0x015da817, 0x05cc015f, 0x96d007e2, 0xfc067300, 0xc0073411, 0x0172001f, -0x77340dcc, 0x534016c0, 0xf0014c00, 0x015fc005, 0x1de58373, 0x5cd015f0, -0x00000620, 0x00000000, 0x00870012, 0x287d081f, 0x07c001e0, 0x78041f00, -0xc021f810, 0x00170087, 0x31f0207d, 0x1f0005c0, 0xf0007c00, 0x5003c001, -0x005c040f, 0x4bc001f0, 0x00000c00, 0x00000000, 0x00a70810, 0x164c009f, -0x37c01930, 0x4c499b08, 0xc8493002, 0x009b0827, 0x3930064c, 0x8300b4c0, -0xf0024c01, 0x2024d009, 0x024c0193, 0x40c02930, 0x00000c20, 0x00000000, -0x01262001, 0x164c009d, 0x23403914, 0x6c839100, 0x40495002, 0x009108a7, -0x09100644, 0x914026c8, 0x70024083, 0x40244008, 0x024c0a91, 0x04502910, -0x00000800, 0x00000000, 0x0024a018, 0x02440085, 0x27498910, 0x44828100, -0x60091002, 0x00814023, 0x0c102305, 0x91002050, 0x50024414, 0x40244009, -0x03060091, 0x60410810, 0x00000200, 0x00000000, 0x00202010, 0xd204148d, -0x23414818, 0x24148140, 0x60085552, 0x08810223, 0x8c142204, 0x81022060, -0x500a0408, 0x02204028, 0x0a270181, 0x40408810, 0x00000080, 0x00000000, -0x2006b01d, 0x104c4407, 0x17c84130, 0x06041340, 0xc1413110, 0x02110093, -0x2032084c, 0x03108440, 0x71004c02, 0x1584c141, 0x004c9413, 0x74c16130, -0x00000ac0, 0x00000000, 0x082f9819, 0x52d914bf, 0x33c60bf0, 0xfc14bf20, -0xc009f452, 0x04a701a7, 0x4ff012fc, 0x9f0127c0, 0x7002f806, 0x012fc409, -0x03dc40bf, 0x67c04bf0, 0x00000e60, 0x00000000, 0x002f8019, 0x1acc0c93, -0x25c04b31, 0xcc069300, 0xd059300a, 0x029301ac, 0x29300a6c, 0x9300a4c0, -0xf0020c80, 0x0324c018, 0x0a4c00b3, 0x60c0cb30, 0x00000e00, 0x00000000, -0x0007089c, 0xa8400e11, 0x0452a110, 0x044a0120, 0x40011008, 0x04110384, -0x01100044, 0x31000440, 0xd1104416, 0x43844061, 0x106d0a15, 0x7040e110, -0x00000c20, 0x00000000, 0x0067a010, 0x12144085, 0x25401910, 0x24219580, -0x4029101a, 0x04a50127, 0x4a101285, 0xa1012840, 0xd0422422, 0x20204128, -0x12644089, 0x40400810, 0x00000e80, 0x00000000, 0x6065a818, 0x0a540481, -0x24400918, 0x44209551, 0x40090002, 0x00a10026, 0x0b100a84, 0xb1002c40, -0xd0066400, 0x04245409, 0x0264009d, 0x60404810, 0x00000620, 0x00000000, -0x00e7a805, 0x0a5d0197, 0xe5802934, 0x6d009720, 0xc0092402, 0x01970027, -0x2934026c, 0x93402490, 0xf0026c00, 0x4024c809, 0x0a2c069b, 0x14d01934, -0x00000e20, 0x00000000, 0x00258214, 0x666c209f, 0x37c009f1, 0x3c09db00, -0xc10df026, 0x429f4025, 0x59f0027c, 0x9f0e67c0, 0xf0825c00, 0x0227c008, -0x027c0997, 0x53c009f0, 0x00000600, 0x00000000, 0x24050814, 0x080c001f, -0xc4c00118, 0x4c881f00, 0xc0013404, 0x10130004, 0x0130004c, 0x0f0004d0, -0x30007c04, 0x4000c001, 0x007c0303, 0x50c101f0, 0x00000420, 0x00000000, -0x09d88214, 0x81c4005d, 0x14505630, 0xec415c00, 0x4004f015, 0x055b00d0, -0x15140545, 0x5d209440, 0x50017402, 0x401c4007, 0x01740671, 0x505077d0, -0x00000200, 0x00000000, 0x00b2a014, 0x0f0000cd, 0x37604c98, 0x0441dd00, -0x50205007, 0x03c106f0, 0x0d103704, 0xcd02f740, 0x10033400, 0x0030500c, -0x033401c1, 0x50400cd0, 0x00000a00, 0x00000000, 0x08388005, 0x080404ed, -0x3b400c10, 0xa400ed00, 0x4103d003, 0x00e9003c, 0x0e100384, 0xed001b41, -0x4007f401, 0x0038424e, 0x13b480e1, 0x14400cd0, 0x00000200, 0x00000000, -0x00781015, 0x048d03fd, 0x7bc01e94, 0x8c116f10, 0xc0127007, 0x01f3007c, -0x1f3106cc, 0x2f007bc0, 0x3047bc90, 0x007cc13e, 0x1fbc0123, 0x54c01ef0, -0x00000040, 0x00000000, 0x0015b010, 0x837c16df, 0xb4d80970, 0xfc205f01, -0xc068f403, 0x00df0037, 0x0df0027c, 0x1f0014c0, 0xb0137404, 0x0237c00d, -0x0b7c205f, 0x43c00df0, 0x00000660, 0x00000000, 0x1a7fa002, 0x04cc41ff, -0xfcc01730, 0xfc01f302, 0xc0333005, 0x01e7006f, 0x1b3007cc, 0xf3426fc0, -0x7243fc01, 0x207cc41f, 0x0fcc817b, 0x03c01f30, 0x00000e00, 0x00000000, -0x12398815, 0x1b8404ed, 0x3ac00e10, 0xf482a102, 0x48221003, 0x50e1003b, -0x0a104384, 0xe1000f48, 0xb023f400, 0x403ac00f, 0x03cc0061, 0x57400eb0, -0x00000620, 0x00000000, 0x2a190008, 0x038490cd, 0xba400e18, 0xb4002510, -0x40021001, 0x00f50223, 0x0a1402c5, 0x21142b40, 0x5023b400, 0x0038408e, -0x03a40001, 0x03400e10, 0x00000400, 0x00000000, 0x04032816, 0x0c0400cd, -0x32490c10, 0x74010500, 0x4000100b, 0x00d10033, 0x2c120204, 0x91200342, -0xc0033400, 0x0032400c, 0x0b042001, 0x13409d90, 0x00000c20, 0x00000000, -0x0075a805, 0x034d01ff, 0x32c00c34, 0x7c611740, 0xc601300a, 0x00170017, -0x1430014c, 0xd31037c9, 0x7003f800, 0x003cc20f, 0x1fad0513, 0x57c01d30, -0x00000620, 0x00000000, 0x02b70001, 0xb97c80df, 0x77c01df0, 0xfc081a00, -0xc001f022, 0x021f0017, 0x45f0017c, 0xdf0097c0, 0x22077c00, 0x0477c00d, -0x437c105f, 0x07c00df0, 0x00000c00, 0x00000000, 0x003f0801, 0x07cc00f3, -0x3cc80db0, 0xfc143300, 0xc0833042, 0x283b0018, 0x073040cc, 0x3f027cc0, -0xb003cc02, 0x2038c00f, 0x03cd0033, 0x00c09f30, 0x00000c22, 0x00000000, -0x00122081, 0x0d0400d1, 0x34500d10, 0x74031100, 0x4028f002, 0x02110094, -0x2d104844, 0x5d001440, 0x10034481, 0x4035400d, 0x03440641, 0x04402d10, -0x00000802, 0x00000000, 0x0c34a001, 0x224500c1, 0x34608593, 0x76005110, -0x40011005, 0x10190084, 0x21101104, 0xdd142540, 0x90030400, 0x0034400c, -0x03542119, 0x04610d10, 0x00000200, 0x00000000, 0x20102210, 0x004400c1, -0x54620d90, 0x34000100, 0x4800d203, 0x00c12010, 0x01120305, 0xcd002140, -0x91030440, 0x0031480c, 0x03440001, 0x40400c10, 0x00000080, 0x00000000, -0x0016b001, 0x020c80f1, 0x34c80db1, 0x7c001340, 0xd0013201, 0x001b0024, -0x0134014d, 0x1f0035c4, 0xb103cd00, 0x0034c00f, 0x03dc0013, 0x00d00132, -0x00000ac0, 0x00000000, 0x002fb805, 0x00fc00ff, 0x3bd00f70, 0xfc003f00, -0xc00ff483, 0x20ff103f, 0x0ff083bc, 0xff003ed4, 0x7183fc00, 0x403bc40f, -0x03fc803f, 0x17c003f0, 0x00000e60, 0x00000000, 0x8080a300, 0x0839020e, -0x83b820ec, 0x3b038ec0, 0xb020ec08, 0x820e80e3, 0x20ec083a, 0x0ec083a0, -0xec0a3b02, 0xc083a828, 0x083b020e, 0x03b020ec, 0x0000008c, 0x00000000, -0x8022a200, 0x023a808e, 0x23b808ea, 0x2a808ea0, 0xa808ea82, 0x808e8023, -0x08ea023a, 0x8ea023a8, 0xea023a80, 0xa0232808, 0x023a808e, 0x03a808ea, -0x00000a88, 0x00000000, 0x80402100, 0x04120104, 0x41201048, 0x12018480, -0x20104804, 0x01048061, 0x10480412, 0x04804120, 0x48041201, 0x80410018, -0x04120104, 0x01201048, 0x0000020c, 0x00000000, 0x80008100, 0x001a0006, -0x01a00068, 0x1a100680, 0xa0006800, 0x10068401, 0x0068001a, 0x060001a9, -0x68461a00, 0x80018900, 0x00180006, 0x01a00068, 0x00000004, 0x00000000, -0xa012a300, 0x013a804e, 0x13a004e2, 0x3a884e20, 0xa804ea01, 0x004ea013, -0x04e2013a, 0x4ea013a8, 0xea293a80, 0xa013a014, 0x013a804e, 0x03a804ea, -0x00000a88, 0x00000000, 0x0002a100, 0x00180006, 0x01800060, 0x18080600, -0x80006000, 0x00060201, 0x80602018, 0x06020180, 0x60a01800, 0x00018080, -0x00180006, 0x01800060, 0x0000008c, 0x00000000, 0x2012a300, 0x01108044, -0x11000442, 0x10804420, 0x08044201, 0x00042011, 0x00420110, 0x44201108, -0x42011080, 0x20110004, 0x01108044, 0x01080442, 0x0000008c, 0x00000000, -0xa052a300, 0x050a8142, 0x50a0142a, 0x0a8342a0, 0xa8142a05, 0x8102a050, -0x102a050a, 0x42a050a0, 0x2a070881, 0xa050a014, 0x05088142, 0x00a8142a, -0x00000a8c, 0x00000000, 0x80300100, 0x032a00ca, 0x32a00ca8, 0x2200ea80, -0xa00ca803, 0x00ca803a, 0x0ea80baa, 0xca802aa0, 0xa803aa00, 0x8032a00e, -0x032a00ca, 0x02a00ca8, 0x00000804, 0x00000000, 0x28000100, 0x00080002, -0x00820020, 0x20000200, 0x80002000, 0x00422000, 0x04200008, 0x02000082, -0x20020800, 0x00008800, 0x00080002, 0x80800020, 0x00000004, 0x00000000, -0x0006a200, 0x00410010, 0x04100104, 0x61101040, 0x10010400, 0x10100404, -0x01040841, 0x10401411, 0x04404100, 0x40041101, 0x00410010, 0x80100104, -0x00000a8c, 0x00000000, 0xa002a300, 0x001a8006, 0x01a0006a, 0x1a8026a0, -0xa8006a00, 0x4006a009, 0x026a009b, 0x06a8099a, 0x6a009a80, 0xa001a802, -0x001a8006, 0x01a8006a, 0x0000008c, 0x00000000, 0x8002a300, 0x001b0006, -0x01b0006c, 0x1b0006c0, 0xb0006c00, 0x0046c001, 0x046c001a, 0x06c001a0, -0x6c001b00, 0xc001b000, 0x001b0006, 0x01b0006e, 0x0000008c, 0x00000000, -0x0042a300, 0x0430810c, 0x430810c2, 0x30910c20, 0x0810c204, 0x810c2043, -0x10c20430, 0x0c204308, 0xc2443081, 0x20430810, 0x0430810c, 0x030810c2, -0x00000a8c, 0x00000000, 0x20000100, 0x0030000c, 0x030000c0, 0x30080c00, -0x0000c000, 0x000c0203, 0x80c02030, 0x0c020300, 0xc0203000, 0x00030080, -0x0030000c, 0x030000c0, 0x00000004, 0x00000000, 0x80400100, 0x0432010c, -0x432010c8, 0x32010c80, 0x2010c804, 0x830c8043, 0x30c80432, 0x0c804328, -0xc8043201, 0x80432010, 0x0432010c, 0x032010ca, 0x00000204, 0x00000000, -0xa042a200, 0x041a8106, 0x41a8106a, 0x1a8106a0, 0xa8106a04, 0x8306a041, -0x306a041a, 0x06a04188, 0x6a041a81, 0xa041a810, 0x041a8106, 0x01a81060, -0x00000a88, 0x00000000, 0x0042a300, 0x04100104, 0x41001040, 0x10210400, -0x00104004, 0x01040041, 0x10400430, 0x04004300, 0x40041001, 0x00410010, -0x04100104, 0x01001040, 0x00000084, 0x00000000, 0x2042a200, 0x04188106, -0x41881062, 0x18812620, 0x88106204, 0x81062041, 0x10620430, 0x06204308, -0x62049881, 0x20418810, 0x04188106, 0x01881060, 0x00000088, 0x00000000, -0x2006a300, 0x0068801a, 0x06a801aa, 0x6a801aa0, 0xa801a200, 0x001aa006, -0x01aa0062, 0x1aa00620, 0xaa006a80, 0xa006a801, 0x006a801a, 0x02a801a0, -0x00000a88, 0x00000000, 0x80600100, 0x060a0182, 0x60a01828, 0x08018280, -0xa0182806, 0x01828060, 0x1828060a, 0x82006080, 0x20060801, 0x80608018, -0x06080182, 0x00a01828, 0x00000004, 0x00000000, 0x80400000, 0x04020100, -0x40221008, 0x02012080, 0x20100804, 0x01008040, 0x10080402, 0x00804020, -0x08048201, 0x80402210, 0x04020100, 0x00201008, 0x00000004, 0x00000000, -0x8062a300, 0x062b018a, 0x62b018ac, 0x2b098ac0, 0xb018ac06, 0x098ac262, -0x98ac062b, 0x8ac062b0, 0xac262b01, 0xc062b098, 0x062b018a, 0x02b018ac, -0x00000a8c, 0x00000000, 0xa062a200, 0x063a818e, 0x63a818ea, 0x3a918ea0, -0xa818ea06, 0x818ea063, 0x18ea063b, 0x8e8063b8, 0xea463a81, 0xa0638818, -0x063a818e, 0x03a818ea, 0x00000088, 0x00000000, 0xc062a200, 0x063b018e, -0x63b018e4, 0x39018ec0, 0xb0186c06, 0x018ec063, 0x18ec063a, 0x8ec063a8, -0xec063b81, 0xc063b018, 0x063b018e, 0x03b018e4, 0x00000088, 0x00000000, -0xa062a200, 0x063a818e, 0x63a818ea, 0x3a898ea0, 0xa818ca06, 0x818ea263, -0x98eaa630, 0x8ea26308, 0xea263b81, 0xa063a898, 0x063a818e, 0x03a818ea, -0x00000a88, 0x00000000, 0x80400000, 0x04120104, 0x41201048, 0x12010480, -0x20104804, 0x01048041, 0x1048043a, 0x048043a0, 0x48041201, 0x80412010, -0x04120104, 0x01201048, 0x00000000, 0x00000000, 0x80600000, 0x061a0186, -0x61a01868, 0x1a018680, 0xa0186806, 0x81860061, 0x18680618, 0x860061a0, -0x68061a01, 0x8061a018, 0x061a0186, 0x01a01868, 0x00000000, 0x00000000, -0xa002a200, 0x003a800e, 0x038800ea, 0x3a800ea0, 0x8800e200, 0x800ca003, -0x00ca003a, 0x0ea003a8, 0xea003a00, 0xa0032800, 0x003a800e, 0x03a800e2, -0x00000a88, 0x00000000, 0x0042a200, 0x04180106, 0x41801060, 0x18010600, -0x80106004, 0x010400c1, 0x10400418, 0x06004180, 0x60041801, 0x00410010, -0x04180106, 0x01801060, 0x00000088, 0x00000000, 0x2042a200, 0x04108104, -0x41081042, 0x10810420, 0x08104204, 0x81062041, 0x10620410, 0x04204108, -0x42041001, 0x20418810, 0x04108104, 0x01081042, 0x00000088, 0x00000000, -0x2042a200, 0x040a8102, 0x4088102a, 0x088102a0, 0xa8102204, 0x010a2040, -0x10aa0c0a, 0x02a040a8, 0x2a040a01, 0xa042a830, 0x040a8102, 0x00a8102a, -0x00000a88, 0x00000000, 0x80c00000, 0x0c2a030a, 0xc2a030a8, 0x2a010a80, -0xa030a80c, 0x030a80c2, 0x30a80c2a, 0x0a80c2a0, 0xa80c2a03, 0x80c2a030, -0x0c2a030a, 0x02a030a8, 0x00000000, 0x00000000, 0x00120000, 0x01080042, -0x10800420, 0x08004200, 0x80042001, 0x00420000, 0x04208008, 0x42001080, -0x20010800, 0x00108000, 0x01080042, 0x00800420, 0x00000000, 0x00000000, -0x4042a200, 0x04010100, 0x40101004, 0x01010040, 0x10100404, 0x01004050, -0x10040501, 0x00404010, 0x04040101, 0x40401014, 0x04010100, 0x00101004, -0x00000a88, 0x00000000, 0xa000a200, 0x001a8006, 0x01a8006a, 0x1a0006a0, -0xa0006a00, 0x8006a001, 0x0062001b, 0x06a001b8, 0x6a001a80, 0xa001a800, -0x001a8006, 0x01a8006a, 0x00000088, 0x00000000, 0xc002a300, 0x001b0006, -0x01b0006c, 0x1b8006c0, 0xb0006c00, 0x8006c001, 0x006c003a, 0x06c003a0, -0x6c001b00, 0xc001b000, 0x00130006, 0x01b0006c, 0x00000000, 0x00000000, -0x20000000, 0x0030800c, 0x030800c2, 0x30800c20, 0x0800c200, 0x800c2003, -0x00c20018, 0x0c200188, 0xc2003080, 0x20030800, 0x0030800c, 0x030800c2, -0x00000000, 0x00000000, 0x00000000, 0x0030000c, 0x030000c0, 0x30002c00, -0x0000c000, 0x002c000b, 0x0ac00010, 0x0c002100, 0xc002b000, 0x00030002, -0x0010000c, 0x030000c0, 0x00000000, 0x00000000, 0x00a00000, 0x0a32028c, -0xa32028c8, 0x32808c80, 0x2028c80a, 0x028c80a3, 0x38c80a32, 0x8c80a328, -0xc80a3202, 0x80a32028, 0x0a32028c, 0x032028c8, 0x00000000, 0x00000000, -0xa0c40000, 0x0c588316, 0xc5a8316a, 0x5a8316a0, 0xa8316a0c, 0x8316a0c5, -0x316a0c5a, 0x16a0c5a8, 0x6a0c5a83, 0xa0c5a831, 0x0c5a8316, 0x01a8316a, -0x00000000, 0x00000000, 0x00000000, 0x00100004, 0x01000040, 0x10002400, -0x00004000, 0x00240019, 0x0a400110, 0x04002100, 0x40029000, 0x00010006, -0x00100004, 0x01000040, 0x00000000, 0x00000000, 0x22100000, 0x21188846, -0x11888462, 0x18804622, 0x88846221, 0x88462201, 0x04622018, 0x46201188, -0x62011888, 0x22118880, 0x21188846, 0x01888462, 0x00000000, 0x00000000, -0xa2000000, 0x2028880a, 0x028880a2, 0x28080aa2, 0xa880aa20, 0x880aa202, -0x80aa202a, 0x0aa222a0, 0xaa022888, 0x2202a880, 0x202a880a, 0x02a880aa, -0x00000000, 0x00000000, 0x84100000, 0x410a1042, 0x10a10428, 0x0a184284, -0xa1042041, 0x104a8010, 0x04a8410a, 0x42841081, 0x20010a10, 0x8412a004, -0x410a1042, 0x00a10428, 0x00000000, 0x00000000, 0x80500000, 0x05020140, -0x50201408, 0x02014080, 0x20140805, 0x01400050, 0x14000502, 0x40805020, -0x08050201, 0x80500014, 0x05020140, 0x00201408, 0x00000000, 0x00000000, -0xc0300000, 0x032b00ca, 0x32b00cac, 0x2b00cac0, 0xb00cac03, 0x00c84032, -0x0c84032b, 0xcac032b0, 0xac032b00, 0xc032100c, 0x032b00ca, 0x02b00cac, -0x00000000, 0x00000000, 0xa0100000, 0x013a804e, 0x13a004ea, 0x3a804ea0, -0xa804ea01, 0x804ea013, 0x04ea013b, 0x4ea013b8, 0xea013a80, 0xa013a804, -0x013a804e, 0x03a804ea, 0x00000000, 0x00000000, 0x18c40000, 0x8c486312, -0xc4863121, 0x48030218, 0x8631218c, 0x231208c0, 0x30218c08, 0x1218c082, -0x200c0863, 0x18c48230, 0x8c486312, 0x00863121, 0x00000000, 0x00000000, -0xfffc0000, 0xffcbfff2, 0xfcbfff2f, 0xcbfff2ff, 0xbfff2fff, 0xfff2fffc, -0xff2fffcb, 0xf2fffcbf, 0x2fffcbff, 0xfffcbfff, 0xffcbfff2, 0x00bfff2f, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xdb340000, 0xb3436cd0, -0x3436cd0d, 0x4bedf0db, 0x36cd0db3, 0x6cd2fb34, 0xdf0db343, 0xd0db7c36, -0x2fffc36c, 0xdb34becd, 0xb3436cd0, 0x0036cd0d, 0x00000000, 0x00000000, -0x3ccc0000, 0xccc8f332, 0xcc8f3323, 0xcbf3f23c, 0x8f3323cc, 0xf332fccc, -0x3f23ccc8, 0x323cfc8f, 0x2fffc8f3, 0x3cccbf33, 0xccc8f332, 0x008f3323, -0x00000000, 0x00000000, 0x7edc0000, 0xedc9fb72, 0xdc9fb727, 0xc9e3727e, -0x9fb727ed, 0x7b727ec4, 0xb727ec48, 0x727edc87, 0x27edc9fb, 0x7edc9fb1, -0xedc9fb72, 0x009fb727, 0x00000000, 0x00000000, 0x40800000, 0x0839020e, -0xa39020e4, 0x39020e60, 0x9028e408, 0x020e40a3, 0x20e60839, 0x0e408380, -0xe4083902, 0x60839028, 0x0833020e, 0x038020e4, 0x00000000, 0x00000000, -0xa0200000, 0x023aa08e, 0x63a808ea, 0x3a808ea0, 0xa808ea02, 0x808ea063, -0x08ea023a, 0x8ea023a0, 0xea823a80, 0xa023a808, 0x0232808e, 0x03a808ea, -0x00000000, 0x00000000, 0x80400000, 0x00120104, 0x61201048, 0x12010480, -0x20104804, 0x01048041, 0x10480412, 0x44804120, 0x48041201, 0x80412018, -0x04120104, 0x01201048, 0x00000000, 0x00000000, 0x00000000, 0x44180006, -0x01800060, 0x18100604, 0x81086000, 0x10060421, 0x00620018, 0x06000180, -0x60001800, 0x20018110, 0x80180006, 0x01890060, 0x00000000, 0x00000000, -0x22100000, 0x0138884e, 0x138804e2, 0x38804e00, 0x8814e201, 0x804e2013, -0x04e00138, 0x0e201388, 0xe2213880, 0x00138804, 0x2938804e, 0x038884e2, -0x00000000, 0x00000000, 0x00000000, 0x00180086, 0x01800060, 0x18080600, -0x80006080, 0x00060201, 0x80600018, 0x06020180, 0x60001800, 0x00018080, -0x00180806, 0x01800060, 0x00000000, 0x00000000, 0x20300000, 0x01908044, -0x19080442, 0x10806400, 0x08064201, 0x80642019, 0x04400110, 0x44201108, -0x42011080, 0x00110806, 0x03108044, 0x01080242, 0x00000000, 0x00000000, -0x20540000, 0x054881d2, 0x54881522, 0x48815220, 0x88152205, 0x81522054, -0x15200548, 0x52205488, 0x220d4881, 0x00548815, 0x05488152, 0x00801922, -0x00000000, 0x00000000, 0x00300310, 0x032800ca, 0x32800ca0, 0x2800ca00, -0x800ca003, 0x00ca00b2, 0x0ca00328, 0xca003280, 0x80032800, 0x0032800c, -0x032800ca, 0x02800ca0, 0x00000000, 0x00000000, 0x00600310, 0x00880082, -0x08800020, 0x08002200, 0x80022000, 0x00220008, 0x00200008, 0x02000080, -0x80000800, 0x00008002, 0x02080002, 0x01801620, 0x0000000c, 0x00000000, -0x40020310, 0x40010000, 0x00100004, 0x01100044, 0x11000400, 0x10004480, -0x00040001, 0x00400000, 0x84000100, 0x40001100, 0x00010000, 0x00110004, -0x0000000c, 0x00000000, 0x20020310, 0x00188006, 0x018a0062, 0x18800600, -0x88006200, 0x80062001, 0x00610018, 0x06200198, 0x628018a0, 0x20018800, -0x00188006, 0x01980060, 0x0000000c, 0x00000000, 0x40028008, 0x00190006, -0x01900064, 0x19800600, 0x98006400, 0x00064001, 0x00640019, 0x06400190, -0x60001900, 0x40019000, 0x00130006, 0x41800464, 0x00000000, 0x00000000, -0x2442a202, 0x0430910c, 0x430810c2, 0x30810c00, 0x0810c204, 0x810c2043, -0x10c20430, 0x0c204308, 0xc0443081, 0x20430810, 0x4430810c, 0x030910c2, -0x00000a88, 0x00000000, 0x00000002, 0x0030000c, 0x030000c0, 0x30080c00, -0x0000c000, 0x000c0203, 0x80c00030, 0x0c020300, 0xc0003000, 0x00030080, -0x0010080c, 0x030000c0, 0x00000000, 0x00000000, 0x00400002, 0x0430210c, -0x430010c0, 0x30810c00, 0x0010c004, 0x010c0043, 0x10c00430, 0x0c004300, -0xc0043001, 0x00430010, 0x0430010c, 0x030830c0, 0x00000000, 0x00000000, -0x2042a202, 0x04188106, 0x41881062, 0x18010620, 0x80106204, 0x81062041, -0x10620418, 0x06204188, 0x62041881, 0x20418810, 0x04188106, 0x01883062, -0x00000a88, 0x00000000, 0x00428002, 0x04100104, 0x41001040, 0x10010400, -0x00104004, 0x01040041, 0x10400410, 0x04004100, 0x40041001, 0x00410010, -0x04100104, 0x03001040, 0x00000000, 0x00000000, 0x2040800a, 0x04188106, -0x41881062, 0x18010620, 0x80106204, 0x81062041, 0x10620418, 0x06204188, -0x62041881, 0x20418810, 0x04188106, 0x03081062, 0x00000200, 0x00000000, -0x2002a202, 0x0028800a, 0x028800a2, 0x28000a20, 0x8000a200, 0x800a2002, -0x00a20028, 0x0a200288, 0xa2002880, 0x20028800, 0x0028800a, 0x420000a2, -0x00000a88, 0x00000000, 0x00602012, 0x06080182, 0x60801820, 0x08018200, -0x88182006, 0x01820060, 0x18200608, 0x82006080, 0x20060801, 0x00608018, -0x06080182, 0x00801820, 0x00000008, 0x00000000, 0x80400012, 0x84020100, -0x40201008, 0x02010080, 0x20100804, 0x01008040, 0x10080402, 0x00804020, -0x08040201, 0x80402010, 0x04022100, 0x00201008, 0x00000000, 0x00000000, -0xc062a202, 0x262b018a, 0x62b018ac, 0x2b098a82, 0xb098ac06, 0x098ac262, -0x188c062b, 0x8ac062b0, 0xa8062b01, 0xc062b098, 0x062b018a, 0x02b098ac, -0x00000a88, 0x00000000, 0x24628000, 0x0638118e, 0x638818e2, 0x38818e70, -0x8818e286, 0x818e2063, 0x18ca0638, 0x8e206388, 0xe6463881, 0x20638818, -0x4638818e, 0x039918e2, 0x00000000, 0x00000000, 0x40628002, 0x0639018e, -0x639018e4, 0x3b818e40, 0x9018e406, 0x018e6063, 0x18e40639, 0x8e406398, -0xe4063901, 0x40639018, 0x0639818e, 0x038018e4, 0x00000000, 0x00000000, -0xa062a20a, 0x063a818e, 0x63a818ea, 0x13898ea0, 0xa818ea06, 0x818ea263, -0x98ea063a, 0x8ea263a8, 0xea063a81, 0xa063a898, 0x063a898e, 0x430818ea, -0x00000a88, 0x00000000, 0x80480002, 0x04120124, 0x41201048, 0x12010480, -0x20104804, 0x01048041, 0x10480412, 0x04804120, 0x48049201, 0x80412010, -0x04920104, 0x03a01248, 0x00000200, 0x00000000, 0x00608002, 0x06180186, -0x61801860, 0x18018600, 0x80186006, 0x01862061, 0x18600618, 0x86006180, -0x60061801, 0x00618018, 0x06188186, 0x01881860, 0x00000080, 0x00000000, -0x20068200, 0x0078801e, 0x0788014a, 0x78001e20, 0x8801e200, 0x801c0007, -0x01e20078, 0x1e200700, 0xe2007880, 0x20078801, 0x0078001e, 0x038801e2, -0x00000a08, 0x00000000, 0x00488002, 0x04180126, 0x41801060, 0x18010600, -0x80106004, 0x01040041, 0x10600418, 0x06004100, 0x60049801, 0x00418010, -0x04980106, 0x01801260, 0x00000000, 0x00000000, 0x20428002, 0x04108104, -0x41081042, 0x10010420, 0x08104204, 0x81060041, 0x10420410, 0x04204180, -0x42041081, 0x20410810, 0x04100104, 0x01081042, 0x00000000, 0x00000000, -0x2042a202, 0x04088102, 0x40881022, 0x08010220, 0x88102204, 0x810a00c0, -0x30220408, 0x02204288, 0x22040881, 0x20408810, 0x04080102, 0x00801022, -0x00000a88, 0x00000000, 0x00c00002, 0x0c28030a, 0xc28030a0, 0x28030a00, -0x8030a00c, 0x030a00c2, 0x30a00c28, 0x0a00c280, 0xa0042803, 0x00c28030, -0x0c28030a, 0x028030a0, 0x00000000, 0x00000000, 0x00100202, 0x01080042, -0x10800420, 0x08204200, 0x80042001, 0x00420000, 0x00200108, 0x42001080, -0x60010800, 0x00108004, 0x01080042, 0x00800420, 0x00000000, 0x00000000, -0x4042a202, 0x04010100, 0x40101004, 0x01010040, 0x10100404, 0x01004050, -0x14040401, 0x00404010, 0x04040101, 0x40401010, 0x04010100, 0x00101004, -0x00000a88, 0x00000000, 0x20028202, 0x00188006, 0x01880060, 0x18000620, -0x88006200, 0x80062001, 0x00620018, 0x06200180, 0x62001880, 0x20018800, -0x00188006, 0x01980062, 0x00000000, 0x00000000, 0x48028002, 0x00190006, -0x01900066, 0x19002640, 0x90006400, 0x00060009, 0x02640019, 0x06400998, -0x64001900, 0x40019002, 0x00198026, 0x03800064, 0x00000000, 0x00000000, -0x2006a202, 0x0070801c, 0x070801c2, 0x70801c20, 0x0801c200, 0x801c0807, -0x01c20070, 0x1c200708, 0xc2007080, 0x20070801, 0x0070801c, 0x018801c2, -0x00000a88, 0x00000000, 0x0080000a, 0x0830020c, 0x830020c0, 0x30020c00, -0x0020c008, 0x020c0083, 0x20c00830, 0x0c00a300, 0xc0083002, 0x00830038, -0x0830028c, 0x010020c0, 0x00000000, 0x00000000, 0x00a0a002, 0x0a30028c, -0xa30028c2, 0x3002ac00, 0x0028c00a, 0x028c00ab, 0x2ac00a30, 0x8c00ab00, -0xc0023002, 0x00a3002a, 0x0a3082ac, 0x430828c0, 0x00000000, 0x00000000, -0x20c2a202, 0x0c188306, 0xc1883060, 0x18830620, 0x8830620c, 0x830620c1, -0x30620c18, 0x0620e180, 0x620c1883, 0x20c18830, 0x0c180386, 0x01883062, -0x00000a88, 0x00000000, 0x00028002, 0x00100004, 0x01000040, 0x10008400, -0x02004000, 0x00040011, 0x04400010, 0x04000100, 0x40001000, 0x00010008, -0x00100004, 0x01000040, 0x00000000, 0x00000000, 0x2210a002, 0x21188846, -0x11888460, 0x1880c622, 0x88846221, 0x88462201, 0x80622118, 0x46201180, -0x62211888, 0x22118804, 0x211800c6, 0x01888462, 0x00000000, 0x00000000, -0x2002a202, 0xa028800a, 0x028880a0, 0x28880a2a, 0x8880a220, 0x880a2202, -0x80a22028, 0x0a228288, 0xa2a02888, 0x22028880, 0x0028080a, 0x028000a2, -0x00000a88, 0x00000000, 0x04120002, 0x01081042, 0x10810420, 0x08004200, -0x80042040, 0x004a0010, 0x04204108, 0x42041281, 0x20410810, 0x04108004, -0x41081042, 0x00810420, 0x00000000, 0x00000000, 0x80508200, 0x05020140, -0x50201408, 0x02014080, 0x20140805, 0x01400050, 0x14080502, 0x40805020, -0x08050201, 0x80502014, 0x05020140, 0x00201408, 0x00000000, 0x00000000, -0xc0b2a202, 0x0b2b02ca, 0xb2b02cac, 0x2b02cac0, 0xb02cac0b, 0x02c800b2, -0x2cac0b2b, 0xcac0b290, 0xac0b2b02, 0xc0b2b02c, 0x0b2302ca, 0x02b02cac, -0x00000a88, 0x00000000, 0x20120002, 0x0138804e, 0x138800e2, 0x38404e20, -0x8804e200, 0x804e6013, 0x04e20138, 0x0e2013a0, 0xe2003880, 0x20138804, -0x0132804e, 0x039804e2, 0x00000000, 0x00000000, 0x10c40000, 0x8c484312, -0xc4863120, 0x48230208, 0x8231218c, 0x231208c0, 0x30218c48, 0x1218c086, -0x210c4863, 0x18c48230, 0x0c486302, 0x00803121, 0x00000000, 0x00000000, -0xfffc0000, 0xffcbfff2, 0xfcbfff2f, 0xcbfff2ff, 0xbfff2fff, 0xfff2fffc, -0xff2fffcb, 0xf2fffcbf, 0x2fffcbff, 0xfffcbfff, 0xffcbfff2, 0x00bfff2f, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xdfb40000, 0xb3437ed0, -0x3436cd2f, 0x4bedf2fb, 0xbecd0db3, 0xecd2fb34, 0xcd0db34b, 0xd0db7c36, -0x0db3436c, 0xdb34bedf, 0xfb436df0, 0x0037ed0d, 0x00000000, 0x00000000, -0x3fcc0000, 0xccc8ff32, 0xcc8f332f, 0xcbf3f2fc, 0xbf3323cc, 0xf332fccc, -0x3323cccb, 0x323cfc8f, 0x23ccc8f3, 0x3cccbf3f, 0xfcc8f3f2, 0x008ff323, -0x00000000, 0x00000000, 0x7edc0000, 0xedc9fb72, 0xdc9fb727, 0xc9fb727e, -0x9fb727ed, 0xfb727ec4, 0xb127edc9, 0x727edc9f, 0x278dc9fb, 0x7edc9fb7, -0xedc9fb72, 0x0087b727, 0x00000000, 0x00000000, 0x65000000, 0x10508c20, -0x422ac04a, 0x00843021, 0x08504a14, 0x84202140, 0x50821010, 0x00214018, -0x02100185, 0x61423850, 0x14508120, 0x00085002, 0x00000000, 0x00000000, -0xa0024000, 0x00618818, 0x0108208e, 0x00800820, 0x08008220, 0x80482011, -0x04420162, 0x58201228, 0x02012280, 0xa0100804, 0x05308848, 0x00080682, -0x00000920, 0x00000000, 0xe3000000, 0x20128c24, 0x032ac04a, 0x908d1423, -0x08c64a10, 0x8d342302, 0x42422011, 0x24230118, 0x4234518c, 0x21010842, -0x30708c34, 0x00084042, 0x00000000, 0x00000000, 0xe0100800, 0x21128060, -0x1f28040e, 0x90814420, 0x08040a01, 0x8140201c, 0x06c22150, 0x64201d18, -0x4205c180, 0x601e3806, 0x01b08004, 0x00080642, 0x00000000, 0x00000000, -0x01004000, 0x14202c40, 0x00200008, 0x40080401, 0x0040c400, 0x04080100, -0x40001100, 0x40010100, 0x40110004, 0x01113044, 0x15000444, 0x01004400, -0x00000900, 0x00000000, 0x40400010, 0x40032900, 0x423010c4, 0x02010000, -0x00104804, 0x01048040, 0x10800400, 0x00804000, 0x80040001, 0x00430010, -0x00000108, 0x00001000, 0x00000000, 0x00000000, 0x83100010, 0x19920d44, -0x112014c8, 0x010c6403, 0x0005c421, 0x0c784318, 0x44401580, 0x40031100, -0x4031800c, 0x01130046, 0x21d00c64, 0x41004640, 0x00000000, 0x00000000, -0x80100000, 0x41830044, 0x18300480, 0x41004400, 0x0005c021, 0x00480014, -0x06000140, 0x60401800, 0x40010000, 0x00183004, 0x21100060, 0x41000440, -0x00000000, 0x00000000, 0x21102010, 0x1501854c, 0x50085442, 0xa0854021, -0x08540615, 0x85402151, 0x54021511, 0x40615008, 0x4215d085, 0x61510854, -0x25238540, 0x40085482, 0x00000080, 0x00000000, 0xa0100010, 0x2183a05c, -0x1b2a048a, 0x92807420, 0x0806ca01, 0x80402015, 0x040201f2, 0x60a01008, -0x82010080, 0xa0130805, 0x0130804c, 0x020805c2, 0x00000000, 0x00000000, -0x62400010, 0x5043881c, 0x09184042, 0x118c2021, 0x2840c210, 0x84242103, -0x41421011, 0x20610908, 0x42101084, 0x61090842, 0x00708424, 0x410842c2, -0x00000000, 0x00000000, 0xe2040800, 0x00b28004, 0x0a180246, 0xb1800820, -0x28034e00, 0x80042001, 0x03420030, 0x2ca00908, 0x8e003388, 0x200b0802, -0x00938008, 0x433800ce, 0x00000020, 0x00000000, 0xa1000010, 0x5802a000, -0x0918408e, 0x63841821, 0x08400e10, 0x84206108, 0x40821010, 0x00210e08, -0x04108084, 0x210f0840, 0x10608418, 0x4008408e, 0x00000000, 0x00000000, -0x80440000, 0x24e02100, 0x4430108e, 0x90810c00, 0x00104204, 0x01188042, -0x10400490, 0x00004300, 0x0a042201, 0x00410010, 0x0410012c, 0x0000128a, -0x00000000, 0x00000000, 0xc1400000, 0x10120410, 0x0132834a, 0x30801401, -0x0040c210, 0x04044101, 0x40801010, 0x10010300, 0x46101008, 0x81030043, -0x30700404, 0x00004246, 0x00000000, 0x00000000, 0x80030800, 0x00122010, -0x0130018c, 0x10000800, 0x00024000, 0x00044009, 0x02000070, 0x20000300, -0x42009100, 0x80030002, 0x00300008, 0x000002c8, 0x00000420, 0x00000000, -0x0808000c, 0x04020002, 0x0b000800, 0x02080200, 0x00000104, 0x0801000b, -0x00010000, 0x00040b00, 0x01000008, 0x000b0000, 0x00000800, 0x33000001, -0x00000000, 0x00000000, 0x0308040c, 0x00000101, 0x09080808, 0x0001010b, -0x08000800, 0x05010b09, 0x000a0000, 0x01030908, 0x0a000005, 0x03090800, -0x00000503, 0x3108000a, 0x00000010, 0x00000000, 0xced7e000, 0xf8014f19, -0x9a481a7f, 0x02000201, 0x00080194, 0x00030000, 0x0c000c03, 0x03000000, -0x000c0300, 0x9800000c, 0x0c020000, 0x00000c00, 0x00000f80, 0x00000000, -0x0da00000, 0x280303b1, 0x01402208, 0x00000100, 0x02000000, 0x00000000, -0x08000800, 0x00000000, 0x00000100, 0x00000088, 0x00010000, 0x00000000, -0x00000000, 0x00000000, 0x82280000, 0x11118713, 0x01414081, 0x44000000, -0x00000100, 0x00000000, 0x00030044, 0x00000002, 0x01004400, 0x00000000, -0x00440000, 0x00020002, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0xf4000000, 0x03ffffff, 0x00000000, 0xfffffffc, 0x00000001, 0xfbfffc00, -0x000000ff, 0xfffc0000, 0x0000fffe, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0xf4000000, 0x03efffff, 0x00000000, 0xfef7fbfc, -0x00000003, 0xfffffc00, 0x000001fe, 0xfffc0000, 0x0003fdff, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xf8000000, 0x03fbfffb, -0x00000000, 0xfbfffffc, 0x00000003, 0xfffffc00, 0x000003f3, 0xf7fc0000, -0x0003f3ff, 0x00000000, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0xfc000000, 0x03bfdfef, 0x00000000, 0xefe7fffc, 0x00000003, 0xf7fffc00, -0x000003df, 0xfffc0000, 0x0003fcf7, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0xfc000000, 0x03ffffbf, 0x00000000, 0xfffdfffc, -0x00000003, 0xfffffc00, 0x000003ff, 0xfffc0000, 0x00037fff, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xfc000000, 0x03ffffff, -0x00000000, 0xfffffffc, 0x00000003, 0xfffffc00, 0x000003ff, 0xfffc0000, -0x00037fff, 0x00000000, 0x00000000, 0x00000000, 0x62000000, 0x14308420, -0x4138800e, 0x238c3021, 0x08104234, 0x8534e341, 0xd182b410, 0x10214408, -0x0614808d, 0x20440850, 0x14530518, 0x00089002, 0x00000000, 0x00000000, -0xe2000000, 0x00a28000, 0x0038000a, 0xb3805020, 0x18028200, 0x80542012, -0x04420020, 0x40200208, 0x0a01a080, 0x22000802, 0x01708004, 0x00080202, -0x00000000, 0x00000000, 0xa1100000, 0x11538464, 0x1928544e, 0x308d4421, -0x28c44211, 0x84402319, 0x44823010, 0x00210108, 0x4631508c, 0x230008c0, -0x10108400, 0x00080002, 0x00000000, 0x00000000, 0x60100000, 0x01a08164, -0x1928144a, 0x33884422, 0x08044201, 0x8844e019, 0x06820140, 0x40201908, -0x460110a0, 0x20180806, 0x01808040, 0x00080602, 0x00000000, 0x00000000, -0x02000000, 0x10100428, 0x01008040, 0x500c0401, 0x00c04030, 0x04000310, -0x80003041, 0x50010100, 0x0811010c, 0x41112044, 0x11100454, 0x00004400, -0x00000000, 0x00000000, 0x82400010, 0x04230104, 0x4210904c, 0x01010840, -0x00108004, 0x01048040, 0x90000402, 0x00004200, 0x00040201, 0x80421010, -0x04000108, 0x40001000, 0x00000000, 0x00000000, 0x41500010, 0x2112014c, -0x11209444, 0x920d7481, 0x20c74011, 0x06704318, 0x47003181, 0x70011900, -0x4821800c, 0x431122c7, 0x11900474, 0x4100c700, 0x00000000, 0x00000000, -0x00100010, 0x21830044, 0x1020844c, 0x12085002, 0x20040001, 0x08580010, -0x04000180, 0x50001000, 0x40210000, 0x00102004, 0x01000054, 0x41000400, -0x00000000, 0x00000000, 0x20100010, 0x11028448, 0x5608440a, 0x028c4c21, -0x08d44631, 0x8444e153, 0x55023520, 0x44235238, 0x0e55d084, 0x21580855, -0x15e38d48, 0x41085502, 0x00000000, 0x00000000, 0x62100010, 0x05018174, -0x1d28144e, 0x72816c00, 0x0804ca21, 0x80642017, 0x04420112, 0x6c201708, -0x4201a081, 0x20180884, 0x01a08064, 0x42080602, 0x00000000, 0x00000000, -0xa1000010, 0x24828510, 0x0118508a, 0x500d0c23, 0x0ac24230, 0x8d082307, -0xc0021071, 0x0c230b08, 0xc030108d, 0x21080a40, 0x10100000, 0x41084002, -0x00000000, 0x00000000, 0xe0480810, 0x20b3812c, 0x0b08128e, 0xa08808c0, -0x38008600, 0x8104e00a, 0x00820010, 0x10e00038, 0xc2003380, 0xe0033800, -0x0000a014, 0x423800ce, 0x00000020, 0x00000000, 0x22000010, 0x14028024, -0x04380006, 0x118d1c21, 0x08c00630, 0x84002102, 0x42023072, 0x00230508, -0x02108185, 0x61040842, 0x10008c10, 0x40084242, 0x00000000, 0x00000000, -0xc2400000, 0x00210000, 0x4a20008c, 0x73802c00, 0x12120820, 0x81300041, -0x10000402, 0x1000c900, 0x000c0200, 0x80481080, 0x04020104, 0x00001180, -0x00000000, 0x00000000, 0x81440000, 0x14520424, 0x0920434c, 0x508c0c03, -0x20c04430, 0x8c040305, 0xc24010c0, 0x00030300, 0x4030000c, 0x01012042, -0x10410c00, 0x00004240, 0x00000000, 0x00000000, 0x40050800, 0x04900114, -0x01200244, 0x13890800, 0x00014004, 0x00040007, 0x01400032, 0x00000300, -0x40008000, 0x40010011, 0x00810008, 0x00000000, 0x00000420, 0x00000000, -0x08080000, 0x00000802, 0x0b000401, 0x00000000, 0x00000000, 0x0800000b, -0x00010000, 0x00000b00, 0x01000008, 0x000b0000, 0x00000800, 0x03000001, -0x00000000, 0x00000000, 0x03083c3c, 0x00000501, 0x0908080a, 0x00050303, -0x08000a00, 0x05030309, 0x000a0000, 0x010f0908, 0x0a000005, 0x0b090800, -0x00000503, 0xf108000a, 0x000000f0, 0x00000000, 0x7b1c0000, 0xdc00fb8d, -0x01f35c9c, 0x03980300, 0x01900000, 0x00030000, 0x0c000403, 0x03000000, -0x00000300, 0x00000000, 0x0c030001, 0x00000c00, 0x00000000, 0x00000000, -0x82e80000, 0x5002a165, 0x0030cc35, 0x01000000, 0x00800008, 0x00010000, -0x08000001, 0x01000000, 0x02080100, 0x00000008, 0x08010001, 0x00008800, -0x00000000, 0x00000000, 0x24180000, 0x15101b22, 0x01142921, 0x44000000, -0x00000100, 0x00000000, 0x00010044, 0x00000001, 0x00004400, 0x00000200, -0x00440000, 0x00000001, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0x78000000, 0x03ef7be7, 0x00000000, 0x7ffffff8, 0x00000003, 0x677e7c00, -0x0000026f, 0x6bfc0000, 0x0002fff5, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0x78000000, 0x03eb7fef, 0x00000000, 0xe7e66e7c, -0x00000003, 0x777ffc00, 0x000003fd, 0x5cfc0000, 0x0003fefe, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xf8000000, 0x03fbfbf7, -0x00000000, 0xf3f1f9f4, 0x00000003, 0xfdf3f800, 0x000003f2, 0xfdf80000, -0x0003fefd, 0x00000000, 0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, -0xfc000000, 0x035fffff, 0x00000000, 0xfffffffc, 0x00000003, 0xfffffc00, -0x000003ff, 0xfffc0000, 0x0000fff7, 0x00000000, 0x00000000, 0x00000000, -0xfffc0000, 0x0003ffff, 0x9c000000, 0x03bfffdf, 0x00000000, 0xfffffffc, -0x00000001, 0xffbffc00, 0x000003ff, 0xfffc0000, 0x0003ffff, 0x00000000, -0x00000000, 0x00000000, 0xfffc0000, 0x0003ffff, 0xfc000000, 0x03bfffff, -0x00000000, 0xffffbffc, 0x00000003, 0xfffffc00, 0x000003ff, 0xfffc0000, -0x0003ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x8004000c, 0x00000040, 0x71c2000c, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x8004000c, 0x00004040, 0x01c2000c, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x8000000c, 0x18c80000, 0x8001000c, 0xc0000000, 0x7002000c, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x8001000c, 0xa0000000, 0x8005000c, 0x00000000, 0x8000000c, -0xe9d60000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, -}; diff -Nru a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c --- a/sound/pci/rme9652/rme9652.c Sat Apr 12 14:44:07 2003 +++ b/sound/pci/rme9652/rme9652.c Sat Apr 12 14:44:07 2003 @@ -2403,7 +2403,7 @@ SNDRV_PCM_HW_PARAM_CHANNELS, -1); rme9652->creg_spdif_stream = rme9652->creg_spdif; - rme9652->spdif_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + rme9652->spdif_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(rme9652->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &rme9652->spdif_ctl->id); return 0; @@ -2421,7 +2421,7 @@ spin_unlock_irqrestore(&rme9652->lock, flags); - rme9652->spdif_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + rme9652->spdif_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(rme9652->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &rme9652->spdif_ctl->id); return 0; diff -Nru a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c --- a/sound/pci/trident/trident_main.c Sat Apr 12 14:44:08 2003 +++ b/sound/pci/trident/trident_main.c Sat Apr 12 14:44:08 2003 @@ -1881,7 +1881,7 @@ runtime->hw = snd_trident_spdif_7018; } - trident->spdif_pcm_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + trident->spdif_pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &trident->spdif_pcm_ctl->id); @@ -1920,7 +1920,7 @@ outl(temp, TRID_REG(trident, SI_SERIAL_INTF_CTRL)); } spin_unlock_irq(&trident->reg_lock); - trident->spdif_pcm_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + trident->spdif_pcm_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(trident->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &trident->spdif_pcm_ctl->id); return 0; @@ -2677,7 +2677,7 @@ snd_ctl_elem_value_t * ucontrol) { trident_t *trident = snd_kcontrol_chip(kcontrol); - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; if (trident->device == TRIDENT_DEVICE_ID_SI7018) { ucontrol->value.integer.value[0] = 1023 - mix->vol; @@ -2692,7 +2692,7 @@ { unsigned long flags; trident_t *trident = snd_kcontrol_chip(kcontrol); - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; unsigned int val; int change = 0; @@ -2715,6 +2715,7 @@ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "PCM Front Playback Volume", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, + .count = 32, .info = snd_trident_pcm_vol_control_info, .get = snd_trident_pcm_vol_control_get, .put = snd_trident_pcm_vol_control_put, @@ -2738,7 +2739,8 @@ static int snd_trident_pcm_pan_control_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + trident_t *trident = snd_kcontrol_chip(kcontrol); + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; ucontrol->value.integer.value[0] = mix->pan; if (ucontrol->value.integer.value[0] & 0x40) { @@ -2754,7 +2756,7 @@ { unsigned long flags; trident_t *trident = snd_kcontrol_chip(kcontrol); - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; unsigned char val; int change = 0; @@ -2776,6 +2778,7 @@ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "PCM Pan Playback Control", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, + .count = 32, .info = snd_trident_pcm_pan_control_info, .get = snd_trident_pcm_pan_control_get, .put = snd_trident_pcm_pan_control_put, @@ -2799,7 +2802,8 @@ static int snd_trident_pcm_rvol_control_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + trident_t *trident = snd_kcontrol_chip(kcontrol); + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; ucontrol->value.integer.value[0] = 127 - mix->rvol; return 0; @@ -2810,7 +2814,7 @@ { unsigned long flags; trident_t *trident = snd_kcontrol_chip(kcontrol); - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; unsigned short val; int change = 0; @@ -2829,6 +2833,7 @@ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "PCM Reverb Playback Volume", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, + .count = 32, .info = snd_trident_pcm_rvol_control_info, .get = snd_trident_pcm_rvol_control_get, .put = snd_trident_pcm_rvol_control_put, @@ -2852,7 +2857,8 @@ static int snd_trident_pcm_cvol_control_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) { - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + trident_t *trident = snd_kcontrol_chip(kcontrol); + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; ucontrol->value.integer.value[0] = 127 - mix->cvol; return 0; @@ -2863,7 +2869,7 @@ { unsigned long flags; trident_t *trident = snd_kcontrol_chip(kcontrol); - snd_trident_pcm_mixer_t *mix = (snd_trident_pcm_mixer_t *)kcontrol->private_value; + snd_trident_pcm_mixer_t *mix = &trident->pcm_mixer[snd_ctl_get_ioffnum(kcontrol, &ucontrol->id)]; unsigned short val; int change = 0; @@ -2882,28 +2888,32 @@ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "PCM Chorus Playback Volume", .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_INACTIVE, + .count = 32, .info = snd_trident_pcm_cvol_control_info, .get = snd_trident_pcm_cvol_control_get, .put = snd_trident_pcm_cvol_control_put, }; -static void snd_trident_notify_pcm_change1(snd_card_t * card, snd_kcontrol_t *kctl, int activate) +static void snd_trident_notify_pcm_change1(snd_card_t * card, snd_kcontrol_t *kctl, int num, int activate) { + snd_ctl_elem_id_t id; + snd_runtime_check(kctl != NULL, return); if (activate) - kctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + kctl->vd[num].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; else - kctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + kctl->vd[num].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE | - SNDRV_CTL_EVENT_MASK_INFO, &kctl->id); + SNDRV_CTL_EVENT_MASK_INFO, + snd_ctl_build_ioff(&id, kctl, num)); } -static void snd_trident_notify_pcm_change(snd_card_t * card, snd_trident_pcm_mixer_t * tmix, int activate) +static void snd_trident_notify_pcm_change(trident_t *trident, snd_trident_pcm_mixer_t *tmix, int num, int activate) { - snd_trident_notify_pcm_change1(card, tmix->ctl_vol, activate); - snd_trident_notify_pcm_change1(card, tmix->ctl_pan, activate); - snd_trident_notify_pcm_change1(card, tmix->ctl_rvol, activate); - snd_trident_notify_pcm_change1(card, tmix->ctl_cvol, activate); + snd_trident_notify_pcm_change1(trident->card, trident->ctl_vol, num, activate); + snd_trident_notify_pcm_change1(trident->card, trident->ctl_pan, num, activate); + snd_trident_notify_pcm_change1(trident->card, trident->ctl_rvol, num, activate); + snd_trident_notify_pcm_change1(trident->card, trident->ctl_cvol, num, activate); } static int snd_trident_pcm_mixer_build(trident_t *trident, snd_trident_voice_t *voice, snd_pcm_substream_t *substream) @@ -2917,7 +2927,7 @@ tmix->pan = T4D_DEFAULT_PCM_PAN; tmix->rvol = T4D_DEFAULT_PCM_RVOL; tmix->cvol = T4D_DEFAULT_PCM_CVOL; - snd_trident_notify_pcm_change(trident->card, tmix, 1); + snd_trident_notify_pcm_change(trident, tmix, substream->number, 1); return 0; } @@ -2928,7 +2938,7 @@ snd_assert(trident != NULL && substream != NULL, return -EINVAL); tmix = &trident->pcm_mixer[substream->number]; tmix->voice = NULL; - snd_trident_notify_pcm_change(trident->card, tmix, 0); + snd_trident_notify_pcm_change(trident, tmix, substream->number, 0); return 0; } @@ -3007,34 +3017,26 @@ tmix = &trident->pcm_mixer[idx]; tmix->voice = NULL; - if ((kctl = tmix->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control, trident)) == NULL) - return -ENOMEM; - kctl->private_value = (long)tmix; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; + } + if ((trident->ctl_vol = snd_ctl_new1(&snd_trident_pcm_vol_control, trident)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, trident->ctl_vol))) + return err; - if ((kctl = tmix->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control, trident)) == NULL) - return -ENOMEM; - kctl->private_value = (long)tmix; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; + if ((trident->ctl_pan = snd_ctl_new1(&snd_trident_pcm_pan_control, trident)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, trident->ctl_pan))) + return err; - if ((kctl = tmix->ctl_rvol = snd_ctl_new1(&snd_trident_pcm_rvol_control, trident)) == NULL) - return -ENOMEM; - kctl->private_value = (long)tmix; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; + if ((trident->ctl_rvol = snd_ctl_new1(&snd_trident_pcm_rvol_control, trident)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, trident->ctl_rvol))) + return err; - if ((kctl = tmix->ctl_cvol = snd_ctl_new1(&snd_trident_pcm_cvol_control, trident)) == NULL) - return -ENOMEM; - kctl->private_value = (long)tmix; - kctl->id.index = idx; - if ((err = snd_ctl_add(card, kctl))) - return err; - } + if ((trident->ctl_cvol = snd_ctl_new1(&snd_trident_pcm_cvol_control, trident)) == NULL) + return -ENOMEM; + if ((err = snd_ctl_add(card, trident->ctl_cvol))) + return err; if (trident->device == TRIDENT_DEVICE_ID_NX) { if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_trident_ac97_rear_control, trident))) < 0) @@ -3187,7 +3189,7 @@ static int snd_trident_sis_reset(trident_t *trident) { - signed long end_time; + unsigned long end_time; unsigned int i; int r; @@ -3364,7 +3366,7 @@ static int snd_trident_4d_dx_init(trident_t *trident) { struct pci_dev *pci = trident->pci; - signed long end_time; + unsigned long end_time; /* reset the legacy configuration and whole audio/wavetable block */ pci_write_config_dword(pci, 0x40, 0); /* DDMA */ @@ -3404,7 +3406,7 @@ static int snd_trident_4d_nx_init(trident_t *trident) { struct pci_dev *pci = trident->pci; - signed long end_time; + unsigned long end_time; /* reset the legacy configuration and whole audio/wavetable block */ pci_write_config_dword(pci, 0x40, 0); /* DDMA */ diff -Nru a/sound/pci/via82xx.c b/sound/pci/via82xx.c --- a/sound/pci/via82xx.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/via82xx.c Sat Apr 12 14:44:09 2003 @@ -208,13 +208,11 @@ #define VIA8233_REG_SGD_STAT_EOL (1<<1) #define VIA8233_REG_SGD_STAT_STOP (1<<2) #define VIA8233_REG_SGD_STAT_ACTIVE (1<<3) -#define VIA8233_REG_SGD_SDX0_SHIFT 0 -#define VIA8233_REG_SGD_SDX1_SHIFT 4 -#define VIA8233_REG_SGD_SDX2_SHIFT 8 -#define VIA8233_REG_SGD_SDX3_SHIFT 12 -#define VIA8233_REG_SGD_MCHAN_SHIFT 16 -#define VIA8233_REG_SGD_REC0_SHIFT 24 -#define VIA8233_REG_SGD_REC1_SHIFT 28 +#define VIA8233_INTR_MASK(chan) ((VIA8233_REG_SGD_STAT_FLAG|VIA8233_REG_SGD_STAT_EOL) << ((chan) * 4)) +#define VIA8233_REG_SGD_CHAN_SDX 0 +#define VIA8233_REG_SGD_CHAN_MULTI 4 +#define VIA8233_REG_SGD_CHAN_REC 6 +#define VIA8233_REG_SGD_CHAN_REC1 7 #define VIA_REG_GPI_STATUS 0x88 #define VIA_REG_GPI_INTR 0x8c @@ -230,7 +228,7 @@ #define VIA_REG_MULTPLAY_FMT_8BIT 0x00 #define VIA_REG_MULTPLAY_FMT_16BIT 0x80 #define VIA_REG_MULTPLAY_FMT_CH_MASK 0x70 /* # channels << 4 (valid = 1,2,4,6) */ -#define VIA_REG_OFS_CAPTURE_FIFO 0x62 /* byte - bit 6 = fifo enable */ +#define VIA_REG_OFS_CAPTURE_FIFO 0x02 /* byte - bit 6 = fifo enable */ #define VIA_REG_CAPTURE_FIFO_ENABLE 0x40 #define VIA_REG_CAPTURE_CHANNEL 0x63 /* byte - input select */ @@ -419,13 +417,14 @@ unsigned long port; struct resource *res_port; + struct resource *mpu_res; int chip_type; unsigned char revision; unsigned char old_legacy; unsigned char old_legacy_cfg; - unsigned char playback_volume[2]; /* for VIA8233/C/8235; default = 0 */ + unsigned char playback_volume[4][2]; /* for VIA8233/C/8235; default = 0 */ unsigned int intr_mask; /* SGD_SHADOW mask to check interrupts */ @@ -582,6 +581,11 @@ unsigned int i; spin_lock(&chip->reg_lock); +#if 0 + /* FIXME: does it work on via823x? */ + if (chip->chip_type != TYPE_VIA686) + goto _skip_sgd; +#endif status = inl(VIAREG(chip, SGD_SHADOW)); if (! (status & chip->intr_mask)) { spin_unlock(&chip->reg_lock); @@ -590,20 +594,21 @@ snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs); return; } +// _skip_sgd: /* check status for each stream */ for (i = 0; i < chip->num_devs; i++) { viadev_t *viadev = &chip->devs[i]; - unsigned char status = inb(VIADEV_REG(viadev, OFFSET_STATUS)); - status &= (VIA_REG_STAT_EOL|VIA_REG_STAT_FLAG); - if (! status) + unsigned char c_status = inb(VIADEV_REG(viadev, OFFSET_STATUS)); + c_status &= (VIA_REG_STAT_EOL|VIA_REG_STAT_FLAG|VIA_REG_STAT_STOPPED); + if (! c_status) continue; if (viadev->substream && viadev->running) { spin_unlock(&chip->reg_lock); snd_pcm_period_elapsed(viadev->substream); spin_lock(&chip->reg_lock); } - outb(status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */ + outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */ } spin_unlock(&chip->reg_lock); } @@ -843,12 +848,11 @@ int changed = 0; spin_lock(&rec->lock); - if (rec->rate) { - if (rec->rate != rate && rec->used > 1) { + if (rec->rate != rate) { + if (rec->rate && rec->used > 1) { /* already set */ spin_unlock(&rec->lock); return -EINVAL; } - } else { rec->rate = rate; changed = 1; } @@ -873,12 +877,15 @@ snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate); snd_ac97_set_rate(chip->ac97, AC97_SPDIF, runtime->rate); } - rbits = (0xfffff / 48000) * runtime->rate + ((0xfffff % 48000) * runtime->rate) / 48000; + if (chip->chip_type == TYPE_VIA8233A) + rbits = 0; + else + rbits = (0xfffff / 48000) * runtime->rate + ((0xfffff % 48000) * runtime->rate) / 48000; snd_assert((rbits & ~0xfffff) == 0, return -EINVAL); snd_via82xx_channel_reset(chip, viadev); snd_via82xx_set_table_ptr(chip, viadev); - outb(chip->playback_volume[0], VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_L)); - outb(chip->playback_volume[1], VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_R)); + outb(chip->playback_volume[viadev->reg_offset / 0x10][0], VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_L)); + outb(chip->playback_volume[viadev->reg_offset / 0x10][1], VIADEV_REG(viadev, OFS_PLAYBACK_VOLUME_R)); outl((runtime->format == SNDRV_PCM_FORMAT_S16_LE ? VIA8233_REG_TYPE_16BIT : 0) | /* format */ (runtime->channels > 1 ? VIA8233_REG_TYPE_STEREO : 0) | /* stereo */ rbits | /* rate */ @@ -912,16 +919,20 @@ fmt = (runtime->format == SNDRV_PCM_FORMAT_S16_LE) ? VIA_REG_MULTPLAY_FMT_16BIT : VIA_REG_MULTPLAY_FMT_8BIT; fmt |= runtime->channels << 4; outb(fmt, VIADEV_REG(viadev, OFS_MULTPLAY_FORMAT)); - /* set sample number to slot 3, 4, 7, 8, 6, 9 (for VIA8233/C,8235) */ - /* corresponding to FL, FR, RL, RR, C, LFE ?? */ - switch (runtime->channels) { - case 1: slots = (1<<0) | (1<<4); break; - case 2: slots = (1<<0) | (2<<4); break; - case 3: slots = (1<<0) | (2<<4) | (5<<8); break; - case 4: slots = (1<<0) | (2<<4) | (3<<8) | (4<<12); break; - case 5: slots = (1<<0) | (2<<4) | (3<<8) | (4<<12) | (5<<16); break; - case 6: slots = (1<<0) | (2<<4) | (3<<8) | (4<<12) | (5<<16) | (6<<20); break; - default: slots = 0; break; + if (chip->chip_type == TYPE_VIA8233A) + slots = 0; + else { + /* set sample number to slot 3, 4, 7, 8, 6, 9 (for VIA8233/C,8235) */ + /* corresponding to FL, FR, RL, RR, C, LFE ?? */ + switch (runtime->channels) { + case 1: slots = (1<<0) | (1<<4); break; + case 2: slots = (1<<0) | (2<<4); break; + case 3: slots = (1<<0) | (2<<4) | (5<<8); break; + case 4: slots = (1<<0) | (2<<4) | (3<<8) | (4<<12); break; + case 5: slots = (1<<0) | (2<<4) | (3<<8) | (4<<12) | (5<<16); break; + case 6: slots = (1<<0) | (2<<4) | (3<<8) | (4<<12) | (5<<16) | (6<<20); break; + default: slots = 0; break; + } } /* STOP index is never reached */ outl(0xff000000 | slots, VIADEV_REG(viadev, OFFSET_STOP_IDX)); @@ -1398,31 +1409,39 @@ static int snd_via8233_dxs_volume_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) { via82xx_t *chip = snd_kcontrol_chip(kcontrol); - ucontrol->value.integer.value[0] = 0xff - chip->playback_volume[0]; - ucontrol->value.integer.value[1] = 0xff - chip->playback_volume[1]; + unsigned int idx = snd_ctl_get_ioff(kcontrol, &ucontrol->id); + ucontrol->value.integer.value[0] = 0xff - chip->playback_volume[idx][0]; + ucontrol->value.integer.value[1] = 0xff - chip->playback_volume[idx][1]; return 0; } static int snd_via8233_dxs_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) { via82xx_t *chip = snd_kcontrol_chip(kcontrol); + unsigned int idx = snd_ctl_get_ioff(kcontrol, &ucontrol->id); + unsigned long port = chip->port + 0x10 * idx; unsigned char val; int change; val = 0xff - ucontrol->value.integer.value[0]; - change = val != chip->playback_volume[0]; - if (val) - chip->playback_volume[0] = val; + change = val != chip->playback_volume[idx][0]; + if (change) { + chip->playback_volume[idx][0] = val; + outb(val, port + VIA_REG_OFS_PLAYBACK_VOLUME_L); + } val = 0xff - ucontrol->value.integer.value[1]; - change |= val != chip->playback_volume[1]; - if (val) - chip->playback_volume[1] = val; + change |= val != chip->playback_volume[idx][1]; + if (change) { + chip->playback_volume[idx][1] = val; + outb(val, port + VIA_REG_OFS_PLAYBACK_VOLUME_R); + } return change; } static snd_kcontrol_new_t snd_via8233_dxs_volume_control __devinitdata = { .name = "VIA DXS Playback Volume", .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .count = 4, .info = snd_via8233_dxs_volume_info, .get = snd_via8233_dxs_volume_get, .put = snd_via8233_dxs_volume_put, @@ -1454,10 +1473,11 @@ ac97.private_data = chip; ac97.private_free = snd_via82xx_mixer_free_ac97; ac97.clock = chip->ac97_clock; + ac97.pci = chip->pci; if ((err = snd_ac97_mixer(chip->card, &ac97, &chip->ac97)) < 0) return err; - snd_ac97_tune_hardware(chip->ac97, chip->pci, ac97_quirks); + snd_ac97_tune_hardware(chip->ac97, ac97_quirks); if (chip->chip_type != TYPE_VIA686) { /* use slot 10/11 */ @@ -1533,9 +1553,11 @@ err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs3_spdif_control, chip)); if (err < 0) return err; - err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs_volume_control, chip)); - if (err < 0) - return err; + if (chip->chip_type != TYPE_VIA8233A) { + err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_via8233_dxs_volume_control, chip)); + if (err < 0) + return err; + } /* select spdif data slot 10/11 */ pci_read_config_byte(chip->pci, VIA8233_SPDIF_CTRL, &val); @@ -1556,25 +1578,20 @@ legacy &= ~VIA_FUNC_ENABLE_GAME; /* disable joystick */ if (chip->revision >= VIA_REV_686_H) { rev_h = 1; - if (check_region(pci_resource_start(chip->pci, 2), 4)) - legacy &= ~VIA_FUNC_MIDI_PNP; /* disable PCI I/O 2 */ - else - legacy |= VIA_FUNC_MIDI_PNP; /* enable PCI I/O 2 */ - } - pci_write_config_byte(chip->pci, VIA_FUNC_ENABLE, legacy); - pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg); - if (rev_h) { if (mpu_port[dev] >= 0x200) { /* force MIDI */ - pci_write_config_dword(chip->pci, 0x18, (mpu_port[dev] & 0xfffc) | 0x01); - } else if (legacy & VIA_FUNC_MIDI_PNP) { + mpu_port[dev] &= 0xfffc; + pci_write_config_dword(chip->pci, 0x18, mpu_port[dev] | 0x01); + } else { mpu_port[dev] = pci_resource_start(chip->pci, 2); - if (mpu_port[dev] < 0x200) /* bad value */ - legacy &= ~VIA_FUNC_ENABLE_MIDI; /* disable MIDI */ } - if (mpu_port[dev] >= 0x200) + if (mpu_port[dev] >= 0x200 && + (chip->mpu_res = request_region(pci_resource_start(chip->pci, 2), 2, + "VIA82xx MPU401")) != NULL) { legacy |= VIA_FUNC_ENABLE_MIDI; - else + } else { + mpu_port[dev] = -1; legacy &= ~VIA_FUNC_ENABLE_MIDI; + } } else { switch (mpu_port[dev]) { /* force MIDI */ case 0x300: @@ -1583,7 +1600,6 @@ case 0x330: legacy_cfg &= ~(3 << 2); legacy_cfg |= (mpu_port[dev] & 0x0030) >> 2; - legacy |= VIA_FUNC_ENABLE_MIDI; break; default: /* no, use BIOS settings */ if (legacy & VIA_FUNC_ENABLE_MIDI) @@ -1591,22 +1607,28 @@ break; } } - if (legacy & VIA_FUNC_ENABLE_MIDI) { - if (check_region(mpu_port[dev], 2)) { - printk(KERN_WARNING "unable to get MPU-401 port at 0x%lx, skipping\n", mpu_port[dev]); - legacy &= ~VIA_FUNC_ENABLE_MIDI; - } else if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A, - mpu_port[dev], 0, - chip->irq, 0, - &chip->rmidi) < 0) { - printk(KERN_WARNING "unable to initialize MPU-401 at 0x%lx, skipping\n", mpu_port[dev]); - legacy &= ~VIA_FUNC_ENABLE_MIDI; - } + if (mpu_port[dev] >= 0x200 && + (chip->mpu_res = request_region(mpu_port[dev], 2, "VIA82xx MPU401")) != NULL) { + if (rev_h) + legacy |= VIA_FUNC_MIDI_PNP; /* enable PCI I/O 2 */ + legacy |= VIA_FUNC_ENABLE_MIDI; + } else { + if (rev_h) + legacy &= ~VIA_FUNC_MIDI_PNP; /* disable PCI I/O 2 */ + legacy &= ~VIA_FUNC_ENABLE_MIDI; + mpu_port[dev] = -1; } pci_write_config_byte(chip->pci, VIA_FUNC_ENABLE, legacy); pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg); - if (legacy & VIA_FUNC_ENABLE_MIDI) { - legacy &= ~VIA_FUNC_MIDI_IRQMASK; /* enable MIDI interrupt */ + if (chip->mpu_res) { + if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A, + mpu_port[dev], 1, + chip->irq, 0, &chip->rmidi) < 0) { + printk(KERN_WARNING "unable to initialize MPU-401 at 0x%lx, skipping\n", mpu_port[dev]); + legacy &= ~VIA_FUNC_ENABLE_MIDI; + } else { + legacy &= ~VIA_FUNC_MIDI_IRQMASK; /* enable MIDI interrupt */ + } pci_write_config_byte(chip->pci, VIA_FUNC_ENABLE, legacy); } @@ -1727,6 +1749,10 @@ snd_via82xx_channel_reset(chip, &chip->devs[i]); synchronize_irq(chip->irq); __end_hw: + if (chip->mpu_res) { + release_resource(chip->mpu_res); + kfree_nocheck(chip->mpu_res); + } if (chip->res_port) { release_resource(chip->res_port); kfree_nocheck(chip->res_port); diff -Nru a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c --- a/sound/pci/ymfpci/ymfpci.c Sat Apr 12 14:44:07 2003 +++ b/sound/pci/ymfpci/ymfpci.c Sat Apr 12 14:44:07 2003 @@ -112,25 +112,30 @@ } legacy_ctrl = 0; - legacy_ctrl2 = 0x0800; /* SMOD = 01 */ + legacy_ctrl2 = 0x0800; /* SBEN = 0, SMOD = 01, LAD = 0 */ if (pci_id->device >= 0x0010) { /* YMF 744/754 */ - if (fm_port[dev] < 0) - fm_port[dev] = pci_resource_start(pci, 1); - else if (check_region(fm_port[dev], 4)) - fm_port[dev] = -1; - if (fm_port[dev] >= 0) { - legacy_ctrl |= 2; + if (fm_port[dev] < 0) { + // fm_port[dev] = pci_resource_start(pci, 1); + u16 addr; + pci_read_config_word(pci, PCIR_DSXG_FMBASE, &addr); + fm_port[dev] = addr; + } + if (fm_port[dev] >= 0 && + (chip->fm_res = request_region(fm_port[dev], 4, "YMFPCI OPL3")) != NULL) { + legacy_ctrl |= YMFPCI_LEGACY_FMEN; pci_write_config_word(pci, PCIR_DSXG_FMBASE, fm_port[dev]); } - if (mpu_port[dev] < 0) - mpu_port[dev] = pci_resource_start(pci, 1) + 0x20; - else if (check_region(mpu_port[dev], 2)) - mpu_port[dev] = -1; - if (mpu_port[dev] >= 0) { - legacy_ctrl |= 8; + if (mpu_port[dev] < 0) { + // mpu_port[dev] = pci_resource_start(pci, 1) + 0x20; + u16 addr; + pci_read_config_word(pci, PCIR_DSXG_MPU401BASE, &addr); + mpu_port[dev] = addr; + } + if (mpu_port[dev] >= 0 && + (chip->mpu_res = request_region(mpu_port[dev], 2, "YMFPCI MPU401")) != NULL) { + legacy_ctrl |= YMFPCI_LEGACY_MEN; pci_write_config_word(pci, PCIR_DSXG_MPU401BASE, mpu_port[dev]); - //snd_printd("MPU401 supported on 0x%lx\n", mpu_port[dev]); } } else { switch (fm_port[dev]) { @@ -140,10 +145,11 @@ case 0x3a8: legacy_ctrl2 |= 3; break; default: fm_port[dev] = -1; break; } - if (fm_port[dev] > 0 && check_region(fm_port[dev], 4) == 0) - legacy_ctrl |= 2; - else { - legacy_ctrl2 &= ~3; + if (fm_port[dev] > 0 && + (chip->fm_res = request_region(fm_port[dev], 4, "YMFPCI OPL3")) != NULL) { + legacy_ctrl |= YMFPCI_LEGACY_FMEN; + } else { + legacy_ctrl2 &= ~YMFPCI_LEGACY2_FMIO; fm_port[dev] = -1; } switch (mpu_port[dev]) { @@ -153,23 +159,20 @@ case 0x334: legacy_ctrl2 |= 3 << 4; break; default: mpu_port[dev] = -1; break; } - if (mpu_port[dev] > 0 && check_region(mpu_port[dev], 2) == 0) { - //snd_printd("MPU401 supported on 0x%lx\n", mpu_port[dev]); - legacy_ctrl |= 8; + if (mpu_port[dev] > 0 && + (chip->mpu_res = request_region(mpu_port[dev], 2, "YMFPCI MPU401")) != NULL) { + legacy_ctrl |= YMFPCI_LEGACY_MEN; } else { - legacy_ctrl2 &= ~(3 << 4); + legacy_ctrl2 &= ~YMFPCI_LEGACY2_MPUIO; mpu_port[dev] = -1; } } - if (mpu_port[dev] > 0) { - // this bit is for legacy mpu irqs - // legacy_ctrl |= 0x10; /* MPU401 irq enable */ - legacy_ctrl2 |= 1 << 15; /* IMOD */ + if (chip->mpu_res) { + legacy_ctrl |= YMFPCI_LEGACY_MIEN; /* FIXME: do we need this? */ + legacy_ctrl2 |= YMFPCI_LEGACY2_IMOD; } pci_read_config_word(pci, PCIR_DSXG_LEGACY, &old_legacy_ctrl); - //snd_printdd("legacy_ctrl = 0x%x\n", legacy_ctrl); pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); - //snd_printdd("legacy_ctrl2 = 0x%x\n", legacy_ctrl2); pci_write_config_word(pci, PCIR_DSXG_ELEGACY, legacy_ctrl2); if ((err = snd_ymfpci_create(card, pci, old_legacy_ctrl, @@ -197,25 +200,22 @@ snd_card_free(card); return err; } - if (mpu_port[dev] > 0) { + if (chip->mpu_res) { if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI, - mpu_port[dev], 0, + mpu_port[dev], 1, pci->irq, 0, &chip->rawmidi)) < 0) { printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", mpu_port[dev]); - mpu_port[dev] = 0; - // only for legacy mpu irqs - // legacy_ctrl &= ~0x10; /* disable MPU401 irq */ - // pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); + legacy_ctrl &= ~YMFPCI_LEGACY_MIEN; /* disable MPU401 irq */ + pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); } } - if (fm_port[dev] > 0) { + if (chip->fm_res) { if ((err = snd_opl3_create(card, fm_port[dev], fm_port[dev] + 2, - OPL3_HW_OPL3, 0, &opl3)) < 0) { + OPL3_HW_OPL3, 1, &opl3)) < 0) { printk(KERN_WARNING "ymfpci: cannot initialize FM OPL3 at 0x%lx, skipping...\n", fm_port[dev]); - fm_port[dev] = 0; - legacy_ctrl &= ~2; + legacy_ctrl &= ~YMFPCI_LEGACY_FMEN; pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl); } else if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) { snd_card_free(card); diff -Nru a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c --- a/sound/pci/ymfpci/ymfpci_main.c Sat Apr 12 14:44:09 2003 +++ b/sound/pci/ymfpci/ymfpci_main.c Sat Apr 12 14:44:09 2003 @@ -930,7 +930,7 @@ chip->spdif_opened++; spin_unlock_irqrestore(&chip->reg_lock, flags); - chip->spdif_pcm_ctl->access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; + chip->spdif_pcm_ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &chip->spdif_pcm_ctl->id); return 0; @@ -1022,7 +1022,7 @@ snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) & ~2); snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTSTATUS, chip->spdif_bits); spin_unlock_irqrestore(&chip->reg_lock, flags); - chip->spdif_pcm_ctl->access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; + chip->spdif_pcm_ctl->vd[0].access |= SNDRV_CTL_ELEM_ACCESS_INACTIVE; snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE | SNDRV_CTL_EVENT_MASK_INFO, &chip->spdif_pcm_ctl->id); return snd_ymfpci_playback_close_1(substream); @@ -2058,6 +2058,14 @@ if (chip->saved_regs) vfree(chip->saved_regs); #endif + if (chip->mpu_res) { + release_resource(chip->mpu_res); + kfree_nocheck(chip->mpu_res); + } + if (chip->fm_res) { + release_resource(chip->fm_res); + kfree_nocheck(chip->fm_res); + } if (chip->reg_area_virt) iounmap((void *)chip->reg_area_virt); if (chip->work_ptr) diff -Nru a/sound/ppc/awacs.c b/sound/ppc/awacs.c --- a/sound/ppc/awacs.c Sat Apr 12 14:44:08 2003 +++ b/sound/ppc/awacs.c Sat Apr 12 14:44:08 2003 @@ -52,6 +52,18 @@ #endif /* PMAC_AMP_AVAIL */ +static void snd_pmac_screamer_wait(pmac_t *chip) +{ + long timeout = 2000; + while (!(in_le32(&chip->awacs->codec_stat) & MASK_VALID)) { + mdelay(1); + if (! --timeout) { + snd_printd("snd_pmac_screamer_wait timeout\n"); + break; + } + } +} + /* * write AWACS register */ @@ -60,13 +72,15 @@ { long timeout = 5000000; + if (chip->model == PMAC_SCREAMER) + snd_pmac_screamer_wait(chip); + out_le32(&chip->awacs->codec_ctrl, val | (chip->subframe << 22)); while (in_le32(&chip->awacs->codec_ctrl) & MASK_NEWECMD) { if (! --timeout) { snd_printd("snd_pmac_awacs_write timeout\n"); break; } } - out_le32(&chip->awacs->codec_ctrl, val | (chip->subframe << 22)); } static void @@ -101,11 +115,14 @@ /* Sorry for the horrible delays... I hope to get that improved * by making the whole PM process asynchronous in a future version */ - do_mdelay(750, can_schedule); + snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1]); + if (chip->manufacturer == 0x1) + /* delay for broken crystal part */ + do_mdelay(750, can_schedule); snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1] | MASK_RECALIBRATE | MASK_CMUTE | MASK_AMUTE); - do_mdelay(1000, can_schedule); snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1]); + snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]); } #else @@ -626,12 +643,8 @@ snd_pmac_awacs_write_noreg(chip, 4, chip->awacs_reg[4]); if (chip->model == PMAC_SCREAMER) { snd_pmac_awacs_write_noreg(chip, 5, chip->awacs_reg[5]); - do_mdelay(100, can_schedule); snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]); - mdelay(2); - snd_pmac_awacs_write_noreg(chip, 1, chip->awacs_reg[1]); snd_pmac_awacs_write_noreg(chip, 7, chip->awacs_reg[7]); - snd_pmac_awacs_write_noreg(chip, 0, chip->awacs_reg[0]); } } @@ -639,6 +652,11 @@ static void snd_pmac_awacs_resume(pmac_t *chip) { awacs_restore_all_regs(chip, 0); + if (chip->model == PMAC_SCREAMER) { + /* reset power bits in reg 6 */ + mdelay(5); + snd_pmac_awacs_write_noreg(chip, 6, chip->awacs_reg[6]); + } screamer_recalibrate(chip, 0); #ifdef PMAC_AMP_AVAIL if (chip->mixer_data) { @@ -748,6 +766,7 @@ } awacs_restore_all_regs(chip, 1); + chip->manufacturer = (in_le32(&chip->awacs->codec_stat) >> 8) & 0xf; screamer_recalibrate(chip, 1); chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf; diff -Nru a/sound/ppc/pmac.c b/sound/ppc/pmac.c --- a/sound/ppc/pmac.c Sat Apr 12 14:44:10 2003 +++ b/sound/ppc/pmac.c Sat Apr 12 14:44:10 2003 @@ -269,21 +269,6 @@ /* - * stop beep if running (no spinlock!) - */ -static void snd_pmac_beep_stop(pmac_t *chip) -{ - pmac_beep_t *beep = chip->beep; - - if (beep && beep->running) { - beep->running = 0; - del_timer(&beep->timer); - snd_pmac_dma_stop(&chip->playback); - st_le16(&chip->extra_dma.cmds->command, DBDMA_STOP); - } -} - -/* * PCM trigger/stop */ static int snd_pmac_pcm_trigger(pmac_t *chip, pmac_stream_t *rec, @@ -696,245 +681,6 @@ } -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) - -/* - * beep stuff - */ - -/* - * Stuff for outputting a beep. The values range from -327 to +327 - * so we can multiply by an amplitude in the range 0..100 to get a - * signed short value to put in the output buffer. - */ -static short beep_wform[256] = { - 0, 40, 79, 117, 153, 187, 218, 245, - 269, 288, 304, 316, 323, 327, 327, 324, - 318, 310, 299, 288, 275, 262, 249, 236, - 224, 213, 204, 196, 190, 186, 183, 182, - 182, 183, 186, 189, 192, 196, 200, 203, - 206, 208, 209, 209, 209, 207, 204, 201, - 197, 193, 188, 183, 179, 174, 170, 166, - 163, 161, 160, 159, 159, 160, 161, 162, - 164, 166, 168, 169, 171, 171, 171, 170, - 169, 167, 163, 159, 155, 150, 144, 139, - 133, 128, 122, 117, 113, 110, 107, 105, - 103, 103, 103, 103, 104, 104, 105, 105, - 105, 103, 101, 97, 92, 86, 78, 68, - 58, 45, 32, 18, 3, -11, -26, -41, - -55, -68, -79, -88, -95, -100, -102, -102, - -99, -93, -85, -75, -62, -48, -33, -16, - 0, 16, 33, 48, 62, 75, 85, 93, - 99, 102, 102, 100, 95, 88, 79, 68, - 55, 41, 26, 11, -3, -18, -32, -45, - -58, -68, -78, -86, -92, -97, -101, -103, - -105, -105, -105, -104, -104, -103, -103, -103, - -103, -105, -107, -110, -113, -117, -122, -128, - -133, -139, -144, -150, -155, -159, -163, -167, - -169, -170, -171, -171, -171, -169, -168, -166, - -164, -162, -161, -160, -159, -159, -160, -161, - -163, -166, -170, -174, -179, -183, -188, -193, - -197, -201, -204, -207, -209, -209, -209, -208, - -206, -203, -200, -196, -192, -189, -186, -183, - -182, -182, -183, -186, -190, -196, -204, -213, - -224, -236, -249, -262, -275, -288, -299, -310, - -318, -324, -327, -327, -323, -316, -304, -288, - -269, -245, -218, -187, -153, -117, -79, -40, -}; - -#define BEEP_SRATE 22050 /* 22050 Hz sample rate */ -#define BEEP_BUFLEN 512 -#define BEEP_VOLUME 15 /* 0 - 100 */ - -static void snd_pmac_beep_stop_callback(unsigned long data) -{ - pmac_t *chip = snd_magic_cast(pmac_t, (void*)data,); - - spin_lock(&chip->reg_lock); - snd_pmac_beep_stop(chip); - snd_pmac_pcm_set_format(chip); - spin_unlock(&chip->reg_lock); -} - -/* because mksound callback takes no private argument, we must keep - the chip pointer here as static variable. - This means that only one chip can beep. Well, it's ok - - anyway we don't like hearing loud beeps from every chip - at the same time :) -*/ - -static pmac_t *beeping_chip = NULL; - -static void snd_pmac_mksound(unsigned int hz, unsigned int ticks) -{ - pmac_t *chip; - pmac_stream_t *rec; - pmac_beep_t *beep; - unsigned long flags; - int beep_speed = 0; - int srate; - int period, ncycles, nsamples; - int i, j, f; - short *p; - - if ((chip = beeping_chip) == NULL || (beep = chip->beep) == NULL) - return; - rec = &chip->playback; - - beep_speed = snd_pmac_rate_index(chip, rec, BEEP_SRATE); - srate = chip->freq_table[beep_speed]; - - if (hz <= srate / BEEP_BUFLEN || hz > srate / 2) { - /* this is a hack for broken X server code */ - hz = 750; - ticks = 12; - } - - spin_lock_irqsave(&chip->reg_lock, flags); - if (chip->playback.running || chip->capture.running || beep->running) { - spin_unlock_irqrestore(&chip->reg_lock, flags); - return; - } - beep->running = 1; - spin_unlock_irqrestore(&chip->reg_lock, flags); - - if (hz == beep->hz && beep->volume == beep->volume_play) { - nsamples = beep->nsamples; - } else { - period = srate * 256 / hz; /* fixed point */ - ncycles = BEEP_BUFLEN * 256 / period; - nsamples = (period * ncycles) >> 8; - f = ncycles * 65536 / nsamples; - j = 0; - p = beep->buf; - for (i = 0; i < nsamples; ++i, p += 2) { - p[0] = p[1] = beep_wform[j >> 8] * beep->volume; - j = (j + f) & 0xffff; - } - beep->hz = hz; - beep->volume_play = beep->volume; - beep->nsamples = nsamples; - } - - spin_lock_irqsave(&chip->reg_lock, flags); - if (beep->running) { - if (ticks <= 0) - ticks = 1; - del_timer(&beep->timer); - beep->timer.expires = jiffies + ticks; - beep->timer.function = snd_pmac_beep_stop_callback; - beep->timer.data = (unsigned long)chip; - add_timer(&beep->timer); - snd_pmac_dma_stop(rec); - st_le16(&chip->extra_dma.cmds->req_count, nsamples * 4); - st_le16(&chip->extra_dma.cmds->xfer_status, 0); - st_le32(&chip->extra_dma.cmds->cmd_dep, chip->extra_dma.addr); - st_le32(&chip->extra_dma.cmds->phy_addr, beep->addr); - st_le16(&chip->extra_dma.cmds->command, OUTPUT_MORE + BR_ALWAYS); - out_le32(&chip->awacs->control, - (in_le32(&chip->awacs->control) & ~0x1f00) - | (beep_speed << 8)); - out_le32(&chip->awacs->byteswap, 0); - snd_pmac_dma_set_command(rec, &chip->extra_dma); - snd_pmac_dma_run(rec, RUN); - } - spin_unlock_irqrestore(&chip->reg_lock, flags); -} - -/* - * beep volume mixer - */ -static int snd_pmac_info_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) -{ - uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; - uinfo->count = 1; - uinfo->value.integer.min = 0; - uinfo->value.integer.max = 100; - return 0; -} - -static int snd_pmac_get_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - pmac_t *chip = snd_kcontrol_chip(kcontrol); - snd_runtime_check(chip->beep, return -ENXIO); - ucontrol->value.integer.value[0] = chip->beep->volume; - return 0; -} - -static int snd_pmac_put_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) -{ - pmac_t *chip = snd_kcontrol_chip(kcontrol); - int oval; - snd_runtime_check(chip->beep, return -ENXIO); - oval = chip->beep->volume; - chip->beep->volume = ucontrol->value.integer.value[0]; - return oval != chip->beep->volume; -} - -static snd_kcontrol_new_t snd_pmac_beep_mixer = { - .iface = SNDRV_CTL_ELEM_IFACE_MIXER, - .name = "Beep Playback Volume", - .index = 0, - .info = snd_pmac_info_beep, - .get = snd_pmac_get_beep, - .put = snd_pmac_put_beep, -}; - -static void snd_pmac_beep_free(snd_kcontrol_t *control) -{ - pmac_t *chip = snd_magic_cast(pmac_t, _snd_kcontrol_chip(control),); - if (chip->beep) { - /* restore */ - kd_mksound = chip->beep->orig_mksound; - kfree(chip->beep->buf); - kfree(chip->beep); - chip->beep = NULL; - } -} - -/* Initialize beep stuff */ -int __init snd_pmac_attach_beep(pmac_t *chip) -{ - pmac_beep_t *beep; - int err; - - beep = kmalloc(sizeof(*beep), GFP_KERNEL); - if (! beep) - return -ENOMEM; - - beep->buf = (short *) kmalloc(BEEP_BUFLEN * 4, GFP_KERNEL); - if (! beep->buf) { - kfree(beep); - return -ENOMEM; - } - beep->addr = virt_to_bus(beep->buf); - init_timer(&beep->timer); - beep->timer.function = snd_pmac_beep_stop_callback; - beep->timer.data = (unsigned long) chip; - beep->orig_mksound = kd_mksound; - beep->volume = BEEP_VOLUME; - beep->running = 0; - beep->control = snd_ctl_new1(&snd_pmac_beep_mixer, chip); - if (beep->control == NULL) { - kfree(beep); - return -ENOMEM; - } - beep->control->private_free = snd_pmac_beep_free; - if ((err = snd_ctl_add(chip->card, beep->control)) < 0) { - kfree(beep); - return err; - } - - /* hook */ - beeping_chip = chip; - chip->beep = beep; - kd_mksound = snd_pmac_mksound; - - return 0; -} - -#endif /* beep stuff */ - static void snd_pmac_dbdma_reset(pmac_t *chip) { out_le32(&chip->playback.dma->control, (RUN|PAUSE|FLUSH|WAKE|DEAD) << 16); @@ -1471,8 +1217,7 @@ chip->suspend(chip); snd_pcm_suspend_all(chip->pcm); spin_lock_irqsave(&chip->reg_lock, flags); - if (chip->beep && chip->beep->running) - snd_pmac_beep_stop(chip); + snd_pmac_beep_stop(chip); spin_unlock_irqrestore(&chip->reg_lock, flags); disable_irq(chip->irq); disable_irq(chip->tx_irq); diff -Nru a/sound/ppc/pmac.h b/sound/ppc/pmac.h --- a/sound/ppc/pmac.h Sat Apr 12 14:44:08 2003 +++ b/sound/ppc/pmac.h Sat Apr 12 14:44:08 2003 @@ -22,6 +22,7 @@ #ifndef __PMAC_H #define __PMAC_H +#include #include #include #include "awacs.h" @@ -95,24 +96,6 @@ /* - * beep using pcm - */ -struct snd_pmac_beep { - int running; /* boolean */ - int volume; /* mixer volume: 0-100 */ - int volume_play; /* currently playing volume */ - int hz; - int nsamples; - short *buf; /* allocated wave buffer */ - unsigned long addr; /* physical address of buffer */ - struct timer_list timer; /* timer list for stopping beep */ - void (*orig_mksound)(unsigned int, unsigned int); - /* pointer to restore */ - snd_kcontrol_t *control; /* mixer element */ -}; - - -/* */ enum snd_pmac_model { @@ -125,6 +108,7 @@ /* h/w info */ struct device_node *node; unsigned int revision; + unsigned int manufacturer; unsigned int subframe; unsigned int device_id; enum snd_pmac_model model; @@ -222,5 +206,10 @@ int snd_pmac_boolean_mono_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo); int snd_pmac_add_automute(pmac_t *chip); + +#ifndef PMAC_SUPPORT_PCM_BEEP +#define snd_pmac_attach_beep(chip) 0 +#define snd_pmac_beep_stop(chip) /**/ +#endif #endif /* __PMAC_H */ diff -Nru a/sound/ppc/powermac.c b/sound/ppc/powermac.c --- a/sound/ppc/powermac.c Sat Apr 12 14:44:10 2003 +++ b/sound/ppc/powermac.c Sat Apr 12 14:44:10 2003 @@ -37,7 +37,9 @@ static int index = SNDRV_DEFAULT_IDX1; /* Index 0-MAX */ static char *id = SNDRV_DEFAULT_STR1; /* ID for this card */ static int enable = 1; +#ifdef PMAC_SUPPORT_PCM_BEEP static int enable_beep = 1; +#endif MODULE_PARM(index, "i"); MODULE_PARM_DESC(index, "Index value for " CHIP_NAME " soundchip."); @@ -48,9 +50,11 @@ MODULE_PARM(enable, "i"); MODULE_PARM_DESC(enable, "Enable this soundchip."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); +#ifdef PMAC_SUPPORT_PCM_BEEP MODULE_PARM(enable_beep, "i"); MODULE_PARM_DESC(enable_beep, "Enable beep using PCM."); MODULE_PARM_SYNTAX(enable_beep, SNDRV_ENABLED "," SNDRV_BOOLEAN_TRUE_DESC); +#endif /* @@ -129,7 +133,7 @@ goto __error; chip->initialized = 1; -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +#ifdef PMAC_SUPPORT_PCM_BEEP if (enable_beep) snd_pmac_attach_beep(chip); #endif @@ -181,8 +185,10 @@ { (void)(get_option(&str,&enable) == 2 && get_option(&str,&index) == 2 && - get_id(&str,&id) == 2 && - get_option(&str,&enable_beep) == 2 + get_id(&str,&id) == 2 +#ifdef PMAC_SUPPORT_PCM_BEEP + && get_option(&str,&enable_beep) == 2 +#endif ); return 1; } diff -Nru a/sound/usb/usbquirks.h b/sound/usb/usbquirks.h --- a/sound/usb/usbquirks.h Sat Apr 12 14:44:07 2003 +++ b/sound/usb/usbquirks.h Sat Apr 12 14:44:07 2003 @@ -717,7 +717,7 @@ .driver_info = (unsigned long) & (const snd_usb_audio_quirk_t) { .vendor_name = "M-Audio", .product_name = "AudioPhile", - .ifnum = 9, + .ifnum = 6, .type = QUIRK_MIDI_MIDIMAN, .data = & (const snd_usb_midi_endpoint_info_t) { .out_cables = 0x0001,