summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2009-03-19 20:08:29 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2009-03-19 20:08:29 +0000
commitd8562c778088ff6ab3383df5ceead41eff4bf124 (patch)
tree43e394ae225fd7183018c2ae08d3fb1e5bcb12cb
parentb6b3226735f5e3b3fb000fa92daa7a574265c817 (diff)
xpp: a massive backport from DAHDI. From Xorcom branch-rel-6839-r6908 .
Sun Mar 1 2009 Oron Peled <oron@actcom.co.il> - xpp.r6795 * Fix cases where the command_queue overflowed during initialization. - Also add a 'command_queue_length' parameter to xpp.ko * More migrations to sysfs: - Add a 'transport' attribute to our astribank devices which points to the usb device we use. E.g: /sys/bus/astribanks/devices/xbus-00/transport is symlinked to ../../../../../../devices/pci0000:00/0000:00:10.4/usb5/5-4 - Move /proc/xpp/XBUS-??/XPD-??/span to /sys/bus/xpds/devices/??:?:?/span - Migrate from /proc/xpp/sync to: /sys/bus/astribanks/drivers/xppdrv/sync - New 'offhook' attribute in: /sys/bus/xpds/devices/??:?:?/offhook * PRI: change the "timing" priority to match the convention used by other PRI cards -- I.e: lower numbers (not 0) have higher priority. * FXO: - Power denial: create two module parameters instead of hard-coded constants (power_denial_safezone, power_denial_minlen). For sites that get non-standard power-denial signals from central office on offhook. - Don't hangup on power-denial, just notify Dahdi and wait for - Fix caller-id detection for the case central office sends it before first ring without any indication before. Asterisk's desicion. Mon, Dec 8 2008 Oron Peled <oron@actcom.co.il> - xpp.r6430 * PRI: - Match our span clocking priorities (in system.conf) to Digium -- this is a reversal of the previous state. Now lower numbers (greater than 0) are better. - Synchronization fixes for PRI ports other than 0. - Fix T1 CRC for some countries (e.g: China). * FXS: fix bug in VMWI detection if using old asterisk which does not provide ZT_VMWI ioctl(). * FXO: - Improve caller_id_style module parameter. This provide a workaround for countries that send this information without any notification (reverse polarity, ring, etc.) - Don't force on-hook upon power-denial. So, loopstart devices would ignore these as expected. * Implement a flow-control to prevent user space (init_card_* scripts) from pressuring our command queue. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@4631 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--kernel/xpp/.version2
-rw-r--r--kernel/xpp/Changelog_xpp81
-rw-r--r--kernel/xpp/Kbuild3
-rw-r--r--kernel/xpp/README.Astribank1008
-rw-r--r--kernel/xpp/XppConfig.pm38
-rw-r--r--kernel/xpp/card_bri.c52
-rw-r--r--kernel/xpp/card_fxo.c176
-rw-r--r--kernel/xpp/card_fxs.c48
-rw-r--r--kernel/xpp/card_global.c98
-rw-r--r--kernel/xpp/card_global.h6
-rw-r--r--kernel/xpp/card_pri.c536
-rw-r--r--kernel/xpp/firmwares/FPGA_1141.hex1261
-rw-r--r--kernel/xpp/firmwares/FPGA_1151.hex1362
-rw-r--r--kernel/xpp/firmwares/FPGA_FXS.hex1280
-rw-r--r--kernel/xpp/firmwares/USB_FW.hex377
-rwxr-xr-xkernel/xpp/init_card_1_3067
-rwxr-xr-xkernel/xpp/init_card_2_3073
-rwxr-xr-xkernel/xpp/init_card_3_3039
-rwxr-xr-xkernel/xpp/init_card_4_30141
-rw-r--r--kernel/xpp/utils/Makefile38
-rwxr-xr-xkernel/xpp/utils/astribank_hook61
-rw-r--r--kernel/xpp/utils/genconf_parameters114
-rwxr-xr-xkernel/xpp/utils/genzaptelconf11
-rwxr-xr-xkernel/xpp/utils/migrate_xpp102
-rw-r--r--kernel/xpp/utils/print_modes.c22
-rw-r--r--kernel/xpp/utils/test_parse.c22
-rwxr-xr-xkernel/xpp/utils/waitfor_xpds54
-rwxr-xr-xkernel/xpp/utils/xpp_sync26
-rwxr-xr-xkernel/xpp/utils/zapconf667
-rwxr-xr-xkernel/xpp/utils/zaptel_drivers151
-rw-r--r--kernel/xpp/utils/zconf/Zaptel.pm2
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Chans.pm10
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm12
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Gen.pm212
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Gen/Unicall.pm70
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Gen/Users.pm177
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zapata.pm213
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zaptel.pm158
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Config/Params.pm149
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Hardware/PCI.pm7
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Span.pm71
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Xpp.pm125
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Xpp/Line.pm68
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm148
-rw-r--r--kernel/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm244
-rwxr-xr-xkernel/xpp/utils/zt_registration69
-rw-r--r--kernel/xpp/xbus-core.c833
-rw-r--r--kernel/xpp/xbus-core.h92
-rw-r--r--kernel/xpp/xbus-pcm.c351
-rw-r--r--kernel/xpp/xbus-pcm.h11
-rw-r--r--kernel/xpp/xbus-sysfs.c798
-rw-r--r--kernel/xpp/xdefs.h23
-rw-r--r--kernel/xpp/xframe_queue.c31
-rw-r--r--kernel/xpp/xframe_queue.h3
-rw-r--r--kernel/xpp/xpd.h29
-rw-r--r--kernel/xpp/xpp.conf30
-rw-r--r--kernel/xpp/xpp_usb.c42
-rw-r--r--kernel/xpp/xpp_zap.c314
-rw-r--r--kernel/xpp/xpp_zap.h7
-rw-r--r--kernel/xpp/xproto.c16
-rw-r--r--kernel/xpp/xproto.h7
-rw-r--r--kernel/xpp/zap_debug.h2
62 files changed, 7670 insertions, 4570 deletions
diff --git a/kernel/xpp/.version b/kernel/xpp/.version
index 1e3ee87..c1d4f47 100644
--- a/kernel/xpp/.version
+++ b/kernel/xpp/.version
@@ -1 +1 @@
-branch-rel-6171-r6408
+branch-rel-6839-r6908
diff --git a/kernel/xpp/Changelog_xpp b/kernel/xpp/Changelog_xpp
index 125eb9f..7ca130d 100644
--- a/kernel/xpp/Changelog_xpp
+++ b/kernel/xpp/Changelog_xpp
@@ -1,3 +1,84 @@
+Sun Mar 1 2009 Oron Peled <oron@actcom.co.il> - xpp.r6795
+ * Fix cases where the command_queue overflowed during initialization.
+ - Also add a 'command_queue_length' parameter to xpp.ko
+ * More migrations to sysfs:
+ - Add a 'transport' attribute to our astribank devices which
+ points to the usb device we use. E.g:
+ /sys/bus/astribanks/devices/xbus-00/transport is symlinked to
+ ../../../../../../devices/pci0000:00/0000:00:10.4/usb5/5-4
+ - Move /proc/xpp/XBUS-??/XPD-??/span to
+ /sys/bus/xpds/devices/??:?:?/span
+ - Migrate from /proc/xpp/sync to:
+ /sys/bus/astribanks/drivers/xppdrv/sync
+ - New 'offhook' attribute in:
+ /sys/bus/xpds/devices/??:?:?/offhook
+ * PRI: change the "timing" priority to match the convention used by
+ other PRI cards -- I.e: lower numbers (not 0) have higher
+ priority.
+ * FXO:
+ - Power denial: create two module parameters instead of hard-coded
+ constants (power_denial_safezone, power_denial_minlen).
+ For sites that get non-standard power-denial signals from central
+ office on offhook.
+ - Don't hangup on power-denial, just notify Dahdi and wait for
+ - Fix caller-id detection for the case central office sends it before
+ first ring without any indication before.
+ Asterisk's desicion.
+ * New USB_FW.hex (xpp.r6885): handles some firmware rewriting races.
+
+Mon, Dec 8 2008 Oron Peled <oron@actcom.co.il> - xpp.r6430
+ * PRI:
+ - Match our span clocking priorities (in system.conf)
+ to Digium -- this is a reversal of the previous state.
+ Now lower numbers (greater than 0) are better.
+ - Synchronization fixes for PRI ports other than 0.
+ - Fix T1 CRC for some countries (e.g: China).
+ * FXS: fix bug in VMWI detection if using old asterisk
+ which does not provide ZT_VMWI ioctl().
+ * FXO:
+ - Improve caller_id_style module parameter. This provide a workaround
+ for countries that send this information without any notification
+ (reverse polarity, ring, etc.)
+ - Don't force on-hook upon power-denial. So, loopstart devices
+ would ignore these as expected.
+ * Implement a flow-control to prevent user space (init_card_* scripts)
+ from pressuring our command queue.
+
+Thu, Oct 30 2008 Oron Peled <oron@actcom.co.il> - xpp.r6279
+ * Major changes in hotplug architecture (backported from our DAHDI
+ drivers). It entails migration to proper sysfs representation.
+ and implementing a proper state machine for Astribanks.
+ * Astribanks are now represented in /sys/bus/astribanks/devices/*
+ * XPD's are now represented in /sys/bus/xpds/devices/*
+ * Old /proc interfaces:
+ - Some debugging info was left there (not affecting device functioning
+ and does not fit sysfs model).
+ - All the rest can be compiled in by -DOLD_PROC in Kbuild.
+ - The perl scripts and their zconf/ modules abstract this change
+ and fallback to /proc if no /sys interface is found (with a warning).
+ * Astribank state:
+ - May be read from /sys/bus/astribanks/devices/xbus-*/xbus_state
+ - Writing stop/start into these file, initiate a logical
+ disconnect/connect event (without physical access to AB).
+ * Kill the race conditions that were inherent during AB initialization
+ in the old method (at least those known to us). Using the /proc
+ interface is racy by definition.
+ * Send two new udev events (apart from add/remove):
+ - "online" - when the Astribank is initialized and ready.
+ - "offline" - when the Astribank start going down.
+ - They can be used in the example astribank_hook udev script.
+
+Thu, Oct 30 2008 Oron Peled <oron@actcom.co.il> - xpp.r6276
+ * Important firmware change:
+ - The protocol version of FPGA_*.hex firmwares is still 30,
+ so old firmwares still work. However, the firmware loading is modified.
+ This add some functionality to fpga_load and affect how xpp_fxloader calls it.
+ - New USB_FW.hex fixes problems observed during boot with some BIOS'es.
+ - libhexfile now read the version info (if available in the hex
+ comments) and fpga_load displays it.
+ - PRI: fix some scenarious where firmware would send bogus CAS updates
+ when no CAS is used.
+
Thu, Aug 14 2008 Oron Peled <oron@actcom.co.il> - xpp.r6055
* Added E1 CAS support. Uses new firmware.
* New firmware also solve DTMF problems with some phones (double digits).
diff --git a/kernel/xpp/Kbuild b/kernel/xpp/Kbuild
index 3be5c71..54ec975 100644
--- a/kernel/xpp/Kbuild
+++ b/kernel/xpp/Kbuild
@@ -8,10 +8,9 @@ EXTRA_CFLAGS = $(XPP_LOCAL_CFLAGS) \
-I$(ZAP_KERNEL) \
-DDEBUG \
-DPOLL_DIGITAL_INPUTS \
- -DWITH_ECHO_SUPPRESSION \
-DDEBUG_PCMTX \
-DPROTOCOL_DEBUG \
- -g
+ -g # -DOLD_PROC
#
ifneq (,$(shell grep -w echo_can_state_t $(ZAP_KERNEL)/zaptel.h))
diff --git a/kernel/xpp/README.Astribank b/kernel/xpp/README.Astribank
index af43eb1..6fd0deb 100644
--- a/kernel/xpp/README.Astribank
+++ b/kernel/xpp/README.Astribank
@@ -7,18 +7,43 @@ This file documents the Zaptel drivers for the Xorcom Channel Bank.
The drivers reside in a separate subdirectory, kernel/xpp/ .
It is generally a more technical document than the
-http://www.xorcom.com/documentation/manuals/[Astribank User Manual]
+http://www.xorcom.com/product-manuals/product-manuals.html[Astribank
+User Manual]
An HTML version of the latest version of this document could be found at
-http://zaptel.tzafrir.org.il/README.Astribank.html[]
+http://docs.tzafrir.org.il/README.Astribank.html[]
+
+Introduction
+------------
+The Xorcom Astribank is a USB-connected channel-bank. An Astribank may
+have up to 4 modules:
+
+PRI::
+ 1, 2 or 4 ports of E1 or T1. Can only be the first (left-most) module
+ of the Astribank. Note that each port has physically a pair of ports,
+ where the top one has crossed wiring.
+
+BRI::
+ 2, 4 or 8 ports of BRI. Can only be used as the first (left-most)
+ module of the Astribank.
+
+FXO::
+ 8 ports of FXO (connector to an analog PSTN line).
+
+FXS::
+ 8 ports of FXS (connector to an analog phone). If used as the first
+ (left-most) module, it will also have 2 output lines and 4 input lines
+ that will appear on Zaptel like standard Zaptel ports. The input and
+ output ports are connected from the two RJ-45 connectors on the right
+ side of the module.
+
+There is also a 6FXS-2FXO module that is essentially an FXS module with
+six lines instead of 8 (but still with the input and output ports) and
+an FXO module of two ports.
+
Building and Installation
-------------------------
-Building and installation is basically like the normal procedure of
-installing Zaptel with some additions.
-
-Building drivers
-~~~~~~~~~~~~~~~~
Apart from the standard Zaptel build requirements, you also need libusb
development headers to build the fpga_load firmware loader. This is
typically the package libusb-dev on Debian (and derivatives like Ubuntu)
@@ -29,16 +54,96 @@ user space utilities, apart from the standard 'make; make install':
make -C xpp/utils install
-Though this should be done automatically on Zaptel >= 1.4.1 .
+
+Patch for BRI
+~~~~~~~~~~~~~
+In order for the BRI module (xpd_bri.ko) to build, you still need an
+external patch:
+
+http://updates.xorcom.com/astribank/bristuff/1.4/bristuff-current/patches/zaptel/bri_dchan[]
+
+You need to apply it to the zaptel tarball before building:
+
+ wget
+ http://updates.xorcom.com/astribank/bristuff/1.4/bristuff-current/patches/zaptel/bri_dchan
+ patch -p1 <http://updates.xorcom.com/astribank/bristuff/1.4/bristuff-current/patches/zaptel/bri_dchan
+
+Note, however, that you would still need a bristuffed Asterisk.
+Therefore chances are that you will still need the full BriSTUFF
+distribution from http://updates.xorcom.com/astribank/bristuff/1.4[] .
+
+
+Installation Scenarios
+~~~~~~~~~~~~~~~~~~~~~~
+Below are some commented sequences of commands that can be used at some
+common scenarios. Those scenarios begin only after you installed the
+software (Zaptel, asterisk, etc.).
+
+New Installation Scenario
+^^^^^^^^^^^^^^^^^^^^^^^^^
+Installing Astribank on a system where there's no existing Astribank.
+You install the driver when the Astribank was already connected:
+
+--------------------------------------------
+# If you had the hardware already connected: Load just the USB firmware
+/usr/share/zaptel/xpp_fxloader usb
+# (you could use 'load' instead of 'usb' but this is also a good test
+# that automatic load through firmware is also in place)
+zaptel_hardware -v
+# wait until the Astribank has a product ID of 11x2
+sleep 5 # Just wait a little bit
+zaptel_hardware -v # now that you see that all's well:
+/etc/init.d/zaptel start
+# generate configuration:
+zapconf
+# Apply it:
+ztcfg
+# edit /etc/asterisk/zapata.conf to #include zaptel-channels.conf or
+# copy its content to the end of zapata.conf
+#
+# This stops existing Zaptel calls, if any, but does no other harm:
+asterisk -rx 'zap restart'
+--------------------------------------------
+
+
+Upgrade Scenario
+^^^^^^^^^^^^^^^^
+Upgrading is roughly the same as a new installation. But in many cases
+you begin with resetting the firmware.
+
+I also assume here that the configuration is valid, and hence I don't
+generate it.
+
+Also be sure to use latest /etc/init.d/zaptel from zaptel.init in the
+source tree. Specifically one that uses the script
+/usr/share/zaptel/waitfor_xpds rather than directly looking at
+waitfor_xpds under /proc which no longer works.
+
+--------------------------------------------
+# If you need to reset the firmware:
+/usr/share/zaptel/xpp_fxloader reset
+# (you could use 'load' instead of 'usb' but this is also a good test
+# that automatic load through firmware is also in place)
+zaptel_hardware -v
+# wait until the Astribank has a product ID of 11x2
+sleep 5 # Just wait a little bit
+zaptel_hardware -v # now that you see that all's well:
+/etc/init.d/zaptel start
+#
+# This stops existing Zaptel calls, if any, but does no other harm:
+asterisk -rx 'zap restart'
+--------------------------------------------
Sample Configurations
---------------------
We generally recommend to generate the configuration by using utility
-genzaptelconf or zapconf which are included with Zaptel. Nevertheless,
-the following can serve as reference configurations for a system where
-Astribank devices are used.
+zapconf or genzaptelconf (obsolete and non-optimal) which are included
+with Zaptel. Nevertheless, the following can serve as reference
+configurations for a system where Astribank devices are used.
+Also refer to the general README for documentation of the other Zaptel
+configuration files.
Zaptel Init Configuration File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -50,19 +155,6 @@ that may be defined there:
-----------------------------------------------------------
# Lines beginning with '#' are considered comments and ignored.
-# A two-letter country code. genzaptelconf uses it to better guess
-# the configuration it generates. E.g: the signalling of E1 spans, and
-# a few other country-specific settings.
-#lc_country=us
-
-# See genzaptelconf(8) and the script itself for a longer list of
-# variables.
-
-# Equivalent to the parameter opermode to the module wctdm: country-specific
-# settings to the FXO lines. For a complete list of possible values, see
-# /usr/share/zaptel/init_fxo_mode .
-#opermode=FRANCE
-
# xpp_sync runs with the value of 'XPP_SYNC' as its parameter to set the
# synchronization source. The default is 'auto' that selects the best
# Astribank. 'ZAPTEL' gets synchronization from the Zaptel sync master
@@ -73,18 +165,49 @@ that may be defined there:
#XPP_HOTPLUG_DISABLED=yes
#
+# genzaptelconf also reads a number of extra parameters from here. Refer
+# to the script itself (/usr/sbin/genzaptelconf). However it is
+# generally recommended to use zapconf (which reads configuration from
+# /etc/genconf_parameters).
+
# Disables udev hook called when an Astribank is added and ready
-# or removed.
+# or removed. Though it is disabled by default with recent configuration
+# anyway.
#ASTRIBANK_HOOK_DISABLED=yes
+-----------------------------------------------------------
-# Setup for the Astribank PRI module:
-# All the ports in the unit connected to the USB port 0000:00:1d.7-1
-# will be NT and E1. Ports no. 1 and 3 of all the other Astribanks will
-# be NT and E1 (and thus ports 0 and 2 will be TE and E1).
-#XPP_PRI_SETUP='
-# CONNECTOR/usb-0000:00:1d.7-1/XPD-01=NT,E1
-# NUM/*/XPD-0[13]=NT,E1
-# '
+
+xpp.conf: Astribank Initialization
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+/etc/xpp.conf is read by the initialization scripts of Astribank
+modules:
+-----------------------------------------------------------
+# /etc/xpp.conf
+#
+# This file is used to configure the operation
+# of init_card_* initialization scripts.
+#
+
+# Adds many more tracing messages that are sent to syslog:
+#debug 1
+
+# xpd_pri: E1 or T1. The default is E1 for all the ports.
+# Setting T1 instead:
+#pri_protocol T1
+#
+# Or if you actually want to mix E1 and T1:
+#pri_protocol/xbus-00/xpd-02 T1
+#pri_protocol/connector:usb-0000:00:1d.7-7/xpd-03 T1
+#pri_protocol/label:usb:0000183/xpd-03 T1
+# If several definitions can refer to a port, the last wins.
+# If none applies, the default of E1 holds.
+
+# FXO: country to adjust settings to:
+#opermode FRANCE
+
+# Don't run power calibration on the FXS units. This can save time
+# but can also get you unit randomly disconnect, if badly used:
+#fxs_skip_calib 1
-----------------------------------------------------------
/etc/zaptel.conf
@@ -308,10 +431,10 @@ Sample dialplan (extensions.conf) for all the above:
-----------------------------------------------------------
[phones-zap]
; 6001 will dial to channel 1, 6020, to Zaptel channel 20, etc.
-exten => _6XXX,1,Dial(ZAP/${EXTEN:1})
+exten => _6XXX,1,Dial(Zap/${EXTEN:1})
; Useful for debugging trunks. Will potentially allow users to
; bypass context limitations.
-;exten => _6XXX.,1,Dial(ZAP/${EXTEN:1:3}/${EXTEN:4})
+;exten => _6XXX.,1,Dial(Zap/${EXTEN:1:3}/${EXTEN:4})
[trunk]
; A number that begins with 9: dial it through a trunk
@@ -375,8 +498,6 @@ exten => s,n,NoOp(Got signal from Zaptel Channel ${ZAP_CHAN})
-----------------------------------------------------------
-
-
Troubleshooting
---------------
The following commands provide useful information for debugging:
@@ -410,7 +531,7 @@ Check USB level status. You can use one of the following utilities for it:
Zaptel Registration
~~~~~~~~~~~~~~~~~~~
-Check if the Astribank spans are registered in Zaptel
+Check if the Astribank spans are registered with Zaptel
zt_registration
@@ -423,9 +544,6 @@ Check if the Astribank spans are registered in Zaptel
- Registration is normally done as part of `/etc/init.d/zaptel start`.
If you want to register the spans manually, then run command:
`zt_registration on` .
-- Disabling of the automatic Astribank spans registration give you full
- control on the order of Zaptel spans. See the module parameter
- **zap_autoreg** for the further details.
Zaptel Level Information
@@ -448,7 +566,7 @@ following commands:
42 FXS
-- When a channel has been configured with *ztcfg* (that applies
+- When *ztcfg* has applied the configuration of the channel (from
/etc/zaptel.conf), you will see an extra column for the signalling
type of the channel. The same channel after it has been configured:
@@ -597,7 +715,7 @@ The firmware fails to load. Manually running xpp_fxloader gives:
Alternatively: an initialization script fails and gives the error
- An '/etc/default/zaptel' collides with 'etc/sysconfig/zaptel'
+ An '/etc/default/zaptel' collides with '/etc/sysconfig/zaptel'
.Cause:
/etc/default/<service name> is the place used in Debian-based
@@ -616,6 +734,31 @@ Remove one of those two. There should be no reason to have both on the
same system.
+Astribank in lsusb but not in zaptel_hardware
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.Symptoms:
+You fail to find an Astribank device in the output of lsusb . But you
+see it in `lsusb | grep e4e4`
+
+.Cause:
+The perl module Zaptel::Hardware currently relies on
+/proc/bus/usb/devices (from usbfs) whereas lsusb can use either that or
+/dev/bus/usb .
+
+.Fix:
+Usbfs is generally deprecated and some distributions (OpenSUSE, Ubuntu) no
+longer mount it by default. Try:
+
+ mount /proc/bus/usb
+
+and if that doesn't work:
+
+ mount -t usbfs usbfs /proc/bus/usbfs
+
+However this is generally a cosmetic issue that only affects the listing
+in zaptel_hardware.
+
+
Astribank not initialized: Premature packet end
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.Symptoms:
@@ -692,125 +835,49 @@ use any of them regardless of any configuration parameters (Both
connectors are live. And connecting both of them with a flat 8-wire
ethernet cable is a simple way to do a loop test for the port).
+Each port in the PRI module can be configured either as E1 or T1.
+The default is E1, but it can be changed in xpp.conf (See the section
+above).
-For each port there are two optional parameters that define its
-behavior:
+In addition to that, a port defaults to consider itself a CPE, or
+rather, to accept timing from the remote party. To override that you
+need to set the timing value to 0 (second parameter in the 'span=' line
+in zaptel.conf).
-Each port in the PRI module can be configured either as E1 or T1. The
-port type defaults to E1 and can be changed to T1 in the Zaptel Init
-Configuration File.
+Thus the following in zaptel.conf will also set an ornage LED:
-The Astribank xpp driver uses that information for correct hardware
-initialization that is performed before the Zaptel span registration
-process takes place. Because of that, xpp driver can't use the
-information from file zaptel.conf.
+ span=2,0,3,ccs,hdb3,crc4
-Another parameter that also can be defined in the Zaptel Init
-Configuration File is the function group TE (CPE) or NT (Network). This
-parameter is used for (a) building correct Zaptel & Asterisk
-configuration by genzaptelconf and (b) control RJ-45 sockets LEDs for
-better visual port control:
-
-A port in the PRI module can be either E1 (default) or T1. It can also be
-either "TE" (default) or "NT".
-
-TE::
- Green LED of the lower socket will light. Hint that this is a TE
- (CPE) port. This is the default.
-
-NT::
- Orange LED of the upper socket will light. Hint that this is an
- NT (network) port.
-
-To set them to a non-default value, you should use the variable
-XPP_PRI_SETUP in the
-xref:_zaptel_init_configuration_file[Zaptel Init Configuration File]
-(/etc/sysconfig/zaptel on Redhats, /etc/default/zaptel on Debians).
-This value is a whitespace-separated list of conditions. When a port is
-initialized it checks those conditions and uses the first one that
-matches.
-
-Match expressions may be:
-- CONNECTOR/usb..../XPD-nn To identify by physical connector
-- NUM/XBUS-mm/XPD-nn To identify by bus number
-
-Match expressions may contain "wildcards":
-
-- * matches zero or more characters.
-- ? matches one charater
-- [xyz] - any of 'x', 'y', or 'z'.
-
-For each line you should define both if it is E1 or T1 and if it is NT
-or TE.
-
-The list implicitly contains an 'NUM/*=TE,E1' catch all default, appended
-to its end.
-
-A number of useful examples. Note that you should use just one of them.
----------------------------------------------
-# All ports are E1 and CPE
-#XPP_PRI_SETUP= #no need to set it
-
-# All ports are T1 and CPE:
-XPP_PRI_SETUP='NUM/*=T1,TE'
-
-# Now you want to test a loop between ports 1 and 2 and between
-# port 3 and 4. So let's make ports 2 and 4 network:
-XPP_PRI_SETUP='NUM/*/XPD-0[24]=E1,NT'
-
-# The same with T1. In this case we also need to set the default of all
-# the others to T1. Note that we can use more than one item and the
-# first one that matches counts:
-XPP_PRI_SETUP='
- NUM/*/XPD-0[24]=T1,NT
- NUM/*=T1,TE
-'
-
-# Actually, there is an implicit 'NUM/*=E1,TE' added to the end of the
-# value and set as the value if there is none. This is how the default
-# is set.
-
-# If you have more than one Astribank and you wish to configure
-# different Astribanks differently, you can use the CONNECTOR option:
-# e.g: set one specific Astribank as E1 network. The others default to
-# E1 CPE:
-XPP_PRI_SETUP='CONNECTOR/usb-0000:00:10.4-4/*=E1,NT'
-
-# Theoretically you could use: XPP_PRI_SETUP='NUM/XBUS-01/*=E1,NT'
-# but the XBUS number depends on the specific load order and is thus
-# might differ in a manual load and a system boot.
----------------------------------------------
-
-This is currently implemented by writing a value to the
-xref:_proc_xpp_xbus_nn_xpd_mm_pri_info[pri_info file in procfs], but
-that may change in future versions.
+Note that as this is only applied when ztcfg is run, the port will have
+the default green LED lit at the bottom until it is configured.
Device Startup
~~~~~~~~~~~~~~
This section describes in great depth the initialization of the Xorcom
Astribank. Normally it would not be really needed, as the standard
-installation of Zaptel should put everything in place.
+installation of Zaptel should put everything in place. This is generally
+some documentation to read when things fail.
Terminology
^^^^^^^^^^^
There are some technical terms that are used in this document and in the
driver / zaptel.
-span:
-Zaptel breaks the channels it knows about to logical units called
-"spans". A port in a E1/T1/ISDN card is usually a span. An whole
-analog card is also a "span". You can see the list of spans as the list
-of files under /proc/zaptel directory or in output of the zttool
-utility.
+span::
+ Dahdi breaks the channels it knows about to logical units called
+ "spans". A port in a E1/T1/ISDN card is usually a span. An whole
+ analog card is also a "span". You can see the list of spans as the list
+ of files under /proc/zaptel directory or in output of the dahdi_tool
+ utility.
-XBUS:
-A funny way to call an Astribank device.
+XBUS::
+ A funny way to call an Astribank device.
-XPD:
-Basically this is a logical unit of the Astribank. It will be registered in
-Zaptel as a single span. This can be either an analog (FXS or FXO)
-module or a single port in case of a BRI module.
+XPD::
+ Basically this is a logical unit of the Astribank. It will be
+ registered in Dahdi as a single span. This can be either an analog
+ (FXS or FXO) module or a single port in case of a BRI module.
Loading Firmware
@@ -824,15 +891,16 @@ First and foremost: the simplest and most useful tool to debug problems
is lsusb. The output of lsusb should show you if the device is connected
if its firmware is loaded.
-The firmware files are named *.hex. They are presented in the text
-hexadecimal format The files are copied from xpp/utils to /usr/share/zaptel
-folder during the Zaptel installation.
+The firmware files are named *.hex. They are presented in the Intel hex
+format. The files are copied from xpp/utils to /usr/share/zaptel folder
+during the Zaptel installation.
The Astribank needs a firmware loaded into it. Without the firmware,
-the device will appear in lsusb with Vendor ID e4e4 and Product ID 1130.
-The firmware loading process consists of two stages. In the first stage the
-"USB" firmware is loaded by using program fxload. When the first stage is
-completed the Vendor ID is e4e4 and the Product ID is 1131.
+the device will appear in lsusb with Vendor ID e4e4 and Product ID 11x0
+(1130, 1140 or 1150). The firmware loading process consists of two stages.
+In the first stage the "USB" firmware is loaded by using program fxload.
+When the first stage is completed the Vendor ID is e4e4 and the Product ID
+is 11x1. (e.g. 1151 if it were 1150 previously).
You can use the following command in order to load the "USB" firmware
manually:
@@ -871,68 +939,67 @@ with another Product ID number. So you need to run lsusb again and get
the new NNN value. Usually, the new value is equal to the old value
incremented by 1.
+On newer systems usbfs (/prob/bus/usb) is replaced by basically the same
+structure under /dev/bus/usb . Note, however, that zaptel_hardware still
+relies on some data from usbfs that is not found in /dev/usb .
-Firmware Loading with Hotplug
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-The Hotplug framework was popular for hot-plugging different devices and
-usually also for automatic device drivers loading. If Hotplug is used in
-your system, you'll see many files in folder /etc/hotplug. Hotplug will
-automatically load the most relevant USB and PCI kernel modules according
-to the USB and PCI IDs provided by devices. Please note, that if the
-Hotplug framework is in place and the correct configuration files are
-located in the right place, then the firmware should be loaded automatically.
-
-In order to get the Hotplug framework to load the firmware into the
-Astribank automatically, the configuration file xpp_fxloader.usermap and
-the script xpp_fxloader should be copied into /etc/hotplug/usb/ . This is
-done by 'make -C xpp/utils install'.
-
-File xpp_fxloader.usermap includes a map of USB IDs and the command to run
-when such devices are encountered. It instructs the Hotplug to run the script
-xpp_fxloader from that directory. This is also done by 'make -C
-xpp/utils install' .
-
-When xpp_fxloader is run without any parameters it assumes that it was
-run by the hotplug scripts. Then it will check if the "add" event was
-accepted and if so, xpp_fxloader will install the required firmware file.
-The xpp_fxloader will be called twice, as after the load of the USB
-firmware the device will re-enumerate itself and thus "unplug" and
-"replug" in order to load the FPGA firmware.
-
-
-Firmware Loading with UDEV
+
+Automatic Firmware Loading
^^^^^^^^^^^^^^^^^^^^^^^^^^
-The UDEV framework has replaced Hotplug in most recent systems. If you
-have a recent 2.6 system without Hotplug and with many files in folder
-/etc/udev, then there are good chances that are you using udev.
-As in case of Hotplug, if your udev framework is configured properly
-then the firmware should be loaded automatically.
-
-In order to get udev to automatically load the firmware into the Astribank,
-the configuration file xpp.rules should be copied into folder /etc/udev/rules.d
-and the script xpp_fxloader should be copied into folder /etc/hotplug/usb/ .
-This is done by 'make -C xpp/utils install' during Zaptel installation.
-
-File xpp.rules instructs the udevd daemon to run xpp_fxloader script with
-the option "udev" and with the Astribank USB ID obtained from the
-device when it is plugged in.
-Please note, that exactly like in case of Hotplug, the xpp_fxloader will be
-called twice by the udevd. First time for the USB firmware loading and the
-second time for FPGA firmware loading.
-
-
-Firmware Resetting
-^^^^^^^^^^^^^^^^^^
-Newer versions of the USB firmware can now be reset using 'fpga_load -r'.
+Udev is a framework for dynamic device nodes, which is supported in
+kernel 2.6. if your udev rules are properly configured then the
+firmware should be loaded automatically and you will see product ID 11x2
+(e.g.: 1152).
+
+Udev is mostly configured by files under /etc/udev/rules.d . The
+installer of dahdi-linux installs drivers/dahdi/xpp/xpp.rules into that
+directory.
+
+This file instructs udev to run /usr/share/dahdi/xpp_fxloader for each
+time an Astribank connects and needs firmware. When the Astribank loads
+firmware or when it resets its firmware it "reenumerates" - disconnects
+and reconnects as a new device.
+
+Below are kernel log messages of an Astribank loading firmware. It firs
+connects without any firmware (device no. 44). Udev tells it to load the
+USB firmware. It disconnects and reconnects (45). This Udev gets the
+FPGA firmware loaded into it. It disconnects again, and when it
+reconnects it is now ready to talk with the driver. The last message is
+from the driver.
+-------------------------------------
+usb 7-1: configuration #1 chosen from 1 choice
+usb 7-1: New USB device found, idVendor=e4e4, idProduct=1150
+usb 7-1: New USB device strings: Mfr=0, Product=0, SerialNumber =0
+usb 7-1: USB disconnect, address 44
+usb 7-1: new high speed USB device using ehci_hcd and address 45
+usb 7-1: configuration #1 chosen from 1 choice
+usb 7-1: New USB device found, idVendor=e4e4, idProduct=1151
+usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
+usb 7-1: Product: Astribank
+usb 7-1: Manufacturer: Xorcom LTD
+usb 7-1: SerialNumber: 00000123
+usb 7-1: USB disconnect, address 45
+usb 7-1: new high speed USB device using ehci_hcd and address 46
+usb 7-1: configuration #1 chosen from 1 choice
+usb 7-1: reset high speed USB device using ehci_hcd and address 46
+INFO-xpp_usb: XUSB: Xorcom LTD -- Astribank -- FPGA
+-------------------------------------
-Also you can try the following:
- /usr/share/zaptel/xpp_fxloader reset
- # if asterisk was running: you may need to stop/restart it now.
- # if there are some "disconnected" spans in /proc/xpp/xbuses
- # wait a while, until you see the 1152 IDs again, and then:
- /etc/init.d/zaptel start
- # and start/restart asterisk.
+Firmware Loading with Hotplug
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Hotplug is an obsolete framework for doing some of the things done by
+udev today. Specifically, handling kernel hotplug events. It is used in
+systems with kernel < 2.6.13 (e.g. RHEL4 / Centos4 and Debian 3.1). As
+such Zaptel still installs support for those. However if you package
+Zaptel for a more recent distribution, you should probably avoid
+including those obsolete config files.
+
+The relevant files installed under /etc/hotplug/usb and are
+xpp/xpp_fxloader.usermap and xpp_fxloader (which is a symlink to
+/usr/share/dahdi/xpp_fxloader). the usermap file has the same format as
+modules.usbmap in the main kernel modules directory: it is intended to
+identify a (hotplugged) device.
Loading The Modules
@@ -953,18 +1020,23 @@ Now to the ugly details:
The driver of the Astribank is composed of several modules:
-* xpp - the basic module, that communicates with Zaptel and provides
- some common services to other modules.
-* xpd_fxs - the module for controlling FXS modules.
-* xpd_fxo - the module for controlling FXO modules.
-* xpd_bri - the module for controlling BRI modules.
-* xpd_pri - the module for controlling E1/T1 modules.
-* xpd_usb - the module that holds the functionality needed to connect to the
- USB bus.
+xpp::
+ The basic module, that communicates with Dahdi and provides some
+ common services to other modules.
+xpd_fxs::
+ FXS modules (analog phones). Module type 1.
+xpd_fxo::
+ FXO modules (Analog PSTN lines). Module type 2.
+xpd_bri::
+ BRI ("ISDN") modules. Module type 3.
+xpd_pri::
+ The module for controlling E1/T1 modules. Module type 4.
+xpp_usb::
+ The functionality needed to connect to the USB bus.
All modules depend on xpp, and modprobing them will install xpp as well.
-However the xpd_* modules are installed on-demand: no need to install
-the xpd_fxo if you have only Astribank FXS.
+However the xpd_* modules are installed on-demand: no need to load
+xpd_fxo if you have only Astribank FXS.
Once an Astribank device connected and the firmware is loaded, the
Vendor-ID/Product-ID of the device will be e4e4/1132 . The handler for that
@@ -984,6 +1056,27 @@ At this point the xpp driver "asks" the box about its software
to the answers it receives, the xpp driver will "modprobe" the required
xpd_* modules.
+When an Astribank connects, it tells the driver what ports it has. For
+instance, a system with 8BRI (=type 3) ports and 3 modules of 8FXS
+(=type 1) ports:
+----------------------------------------------
+INFO-xpp: XBUS-00: DESCRIPTOR: 4 cards, protocol revision 30
+INFO-xpp: XBUS-00: CARD 0 type=3.0 ports=8 (2x4), port-dir=0xCC
+INFO-xpp: XBUS-00: CARD 1 type=1.0 ports=8 (8x1), port-dir=0xFF
+INFO-xpp: XBUS-00: CARD 2 type=1.0 ports=8 (8x1), port-dir=0xFF
+INFO-xpp: XBUS-00: CARD 3 type=1.0 ports=8 (8x1), port-dir=0xFF
+----------------------------------------------
+
+If zaptel, xpp or xpp_usb is missing or defective, you'll get relatively
+clear error messages. However if an xpd_* module fails to load (e.g.:
+because it is missing), the error is less intuitive:
+--------------------------------------------------
+NOTICE-xpp: xproto_get: Failed to load module for type=3. exit status=256.
+NOTICE-xpp: XBUS-00: CARD 0: missing protocol table for type 3. Ignored.
+--------------------------------------------------
+In this case it was because I maliciously removed the module xpd_bri
+(type 3) from the system.
+
Device Initializations Scripts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -991,20 +1084,21 @@ The chips in the device need to be initialized. This requires sending a
bunch of values to certain registers in those chips. We decided that
hardwiring those values in the driver code is not a good idea.
Before registering a XPD as a span in Zaptel, we run an initialization
-script: /usr/share/zaptel/init_card_N_MM (
-where,
+script: /usr/share/zaptel/init_card_N_MM where,
-* N - is 3 for an FXS span and 4 for an FXO span, and 6 or 7 for BRI.
-* MM - is a version number. Currently it equals 26
+* N is telephony module type: 1 for an FXS span and 2 for an FXO span,
+ 3 for BRI and 4 for PRI.
+* MM - is a version number. Currently it equals 30.
-Those scripts must be executable. Funny things happen if such a script
-exists but is not executable.
+Those scripts must be executable. If they are not, the initiallization
+will do nothing but will give no error, and the device will work in an
+unexpected way, if at all.
-If because of some reasons this fails (the script is not in the place, or the
-file doesn't have the executable permissions), then you will get an error
-message in the logs and the XPD will then be removed (you won't see directory
-for that XPD under the corresponding /proc/xpp/XBUS-* directory) and will not
-be registered in Zaptel.
+If because of some reasons this fails (the script is not in the place,
+or the running it produced an error), then you will get an error message
+in the logs and the XPD will then be removed (you won't see directory
+for that XPD under the corresponding /proc/xpp/XBUS-* directory) and
+will not be registered with Zaptel.
As the XPD is initialized, you'll see the green LEDs of the ports steadily
turn on and later off ("a train of lights"). This is a bit slower than the
@@ -1012,6 +1106,18 @@ faster "blinking" when the XPDs register as Zaptel spans. The initialization
of an FXS XPD may take a few seconds.
+Connect / Disconnect Hook
+^^^^^^^^^^^^^^^^^^^^^^^^^
+When the Astribank has finished initialization it also notifies
+userspace applications. This can be used to run a custom command when an
+Astribank is connected (after it has finished initialization) or when it
+has disconnected.
+
+To use that you need to comment-out the last line in the udev rules file
+xpp.rules. A sample hook script is included in
+kernel/xpp/utils/astribank_hook.sample .
+
+
Registering in Zaptel
^^^^^^^^^^^^^^^^^^^^^
The XPDs will not automatically register as Zaptel spans. This is
@@ -1019,7 +1125,7 @@ intended to allow you to set the registration order (and hence the order
of Zaptel spans and channels) among multiple Astribank devices,
or between an Astribank and a different Zaptel device.
-When the XPD registers to Zaptel, all the green LEDs will be lit for a
+When the XPD registers with Zaptel, all the green LEDs will be lit for a
short while.
Spans are normally registered with the utility zt_registration. Simply
@@ -1030,23 +1136,50 @@ they are registered. To register:
For a system with several spans you'll see a "fast train of lights".
-If you have multiple Astribank devices, zt_registration will register
+"If you have multiple Astribank devices, zt_registration will
+register them by the ascending order of the USB connector ID. This
+means that as long as the same Astribank is connected to the same
+port, the order of plugging is not important.
+
+You can see the USB connector ID in the verbose output of the
+dahdi_hardware utility when xpp drivers are loaded. See CONNECTOR value
+in the example below:
+
+------------------------------------------------------
+# dahdi_hardware -v
+usb:004/006 xpp_usb+ e4e4:1152 Astribank-multi FPGA-firmware
+ LABEL=[usb:0000148] CONNECTOR=usb-0000:00:03.3-2
+ XBUS-00/XPD-00: E1_TE Span 1 Zaptel-SYNC
+ XBUS-00/XPD-10: FXS Span 2
+ XBUS-00/XPD-20: FXS Span 3
+usb:004/007 xpp_usb+ e4e4:1152 Astribank-multi FPGA-firmware
+ LABEL=[usb:0000150] CONNECTOR=usb-0000:00:03.3-6
+ XBUS-01/XPD-00: FXS Span 4
+ XBUS-01/XPD-10: FXO Span 5
+------------------------------------------------------
+
+If you have multiple Astribank devices, dahdi_registration will register
them by the order of the "connector" field. This means that as long as
the same Astribank is connected to the same port, the order of plugging
-is not important..
+is not important.
+
+The registration is performed through the sysfs interface. See below
+<<_sys_devices_xpp_xbus_nn_nn_m_p_span,the span attribute>>. Also note
+that dahdi_registration also allows you to unregister spans, which will
+work for all spans that are not in use (That is: none of their channels
+is in use).
-zt_registration checks if a span is registered or tries to register a
-span using the file /proc/xpp/XBUS-nn/XPD-mm/zt_registration . Reading
-from that file returns 0 if the span is unregisters or 1 if it is
-registered. You can register a span or ask to unregister it by writing 1
-(register) or 0 (unregister) to that file. Registration should
-generally always succeed. Unregistration may fail if a span is in use.
+By default, the Astribank drivers don't perform automatic span
+registration on Zaptel. It is in contrast to the all known drivers of
+PCI boards. Because of that, Zaptel channels related to the PCI board
+spans will get lower numbers than the channels related to Astribank
+devices.
-You may choose to register the XPDs in Zaptel automatically. This may
+You may choose to register the XPDs with Zaptel automatically. This may
make the startup sequence a bit simpler, but is generally not
recommended on a system with more than one Astribank or an Astribank and
-a different Zaptel device. This behavior may be defined by setting
-parameter zap_autoreg in the modprobe configuration file (A file under
+a different Zaptel device. This behavior may be defined by setting
+parameter <<_zap_autoreg>> in the modprobe configuration file (A file under
/etc/modprobe.d or /etc/modprobe.conf):
options xpp zap_autoreg=1
@@ -1054,27 +1187,21 @@ parameter zap_autoreg in the modprobe configuration file (A file under
Zaptel And Above
^^^^^^^^^^^^^^^^
-From here you get a standard Zaptel span. It still needs to be
-configured by ztcfg and used by a program such as Asterisk like any
-other Zaptel device. In order for you to get a dial-tone in a phone
-connected to the FXS port or a fully synchronized BRI port (layer 2
-activated, as signalled by a more steady blink) you will actually need
-both the span configured by Zaptel and the channels configured in
-Asterisk.
-
-You should generally refer to the general Zaptel documentation on how to
-configure those levels. e.g, the README file in the top-level directory,
-and
+From here you get a standard Zaptel span. The next step is to configure
+the span by running the ztcfg utility. You would also need to
+configure the channels in the Asterisk zapata.conf file. Only after
+that you will be able to make calls through the telephony ports.
- http://voip-info.org/wiki/view/Asterisk+config+zapata.conf[]
+You can use zapconf, which is included with dahdi-tools, to
+generate a Zaptel and Asterisk configuration for your system.
+For analog channels it works quite well, and likewise for BRI. For E1/T1
+it will probably take some tuning.
+Please refer to the general Zaptel documentation for more deatils about
+Zaptel and Asterisk configuration. E.g, the README file in the
+top-level directory, and
-Zaptel now includes a utility called genzaptelconf (written as a big
-ugly shell script) to configure Zaptel automatically as good as
-possible. For analog channels it works quite well (because, IMHO, the
-"configuration" level on Zaptel should be optional there - there are
-already sane defaults). For digital spans - BRI and PRI , it may take
-some tuning.
+ http://voip-info.org/wiki/view/Asterisk+config+zapata.conf[]
Alternatively, write you own configuration, based on the sample from the
"Sample Configurations" section.
@@ -1088,8 +1215,8 @@ are many other debugging details that are exposed through the procfs
interface.
Also note that those details are subject to changes. Generally the
-recommended stable interface are the Zaptel-perl utilities from the
-xpp/utils directory.
+recommended stable interface are the Zaptel-perl modules and utilities
+from the xpp/utils/ directory.
/proc/xpp/xbuses
@@ -1127,6 +1254,10 @@ module (span in the terms of Zaptel) there is folder /proc/XBUS-nn/XPD-mm.
/proc/xpp/XBUS-nn/waitfor_xpds
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+(Not present in current drivers. See
+<<_sys_bus_astribanks_devices_xbus_mm_waitfor_xpds,the SysFS attirbute
+waitfor_xpds>> and generally use the script waitfor_xpds)
+
Reading from this file only returns when the Astribank has finished
initialization of the XPDs or in case of a timeout. It prints the number
of XPDs to initialize, and the number initialize. Unless something went
@@ -1138,6 +1269,12 @@ reading from this file returns immediately:
/proc/xpp/XBUS-nn/XPD-mm/zt_registration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+(Not present in current drivers. See
+<<_sys_bus_astribanks_devices_xbus_mm_waitfor_xpds,the SysFS attirbute
+<<_sys_bus_astribanks_devices_xbus-nn_nn_m_p_spanthe SysFS attirbute span>>
+and generally use the script zt_registration)
+
+
is a read/write file. Reading from it gives 0 if the span is
unregistered, or the span number if it is registered.
@@ -1164,18 +1301,6 @@ in order to monitor the port statuses in the real time:
watch -n1 cat /proc/xpp/XBUS-00/XPD-00/summary
-/proc/xpp/XBUS-nn/XPD-mm/slics
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Provides direct read/write interface to the registers of each chip.
-Reading from the file shows the result of the last read request. To make
-either a read request or a write request you need to write to that file.
-
-It is mainly used by the initialization scripts (card_init_*).
-
-Incorrect usage of this file is one possible way of damaging the
-Astribank.
-
-
/proc/xpp/XBUS-nn/XPD-mm/fxo_info
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Only for FXO modules. Apart from showing the status of the LEDs, it also
@@ -1256,36 +1381,149 @@ There are a bunch of other status files under /proc/xpp/.
/sys Interface
-~~~~~~~~~~~~~~~
-When an Astribank device loads it generates a device node in the bus
-'astribanks' in sysfs. You can see a directory for each device under
-/sys/bus/astribanks/devices/ and under it there are several attributes
-for each Astribank (such as its connector string).
+~~~~~~~~~~~~~~
+Astribanks on the system and the xpds themselves are also represented
+in SysFS. SysFS is a virtual file system mounted under /sys and provides
+information in a more structured way than ProcFS. In sysfs objects are
+represented as directories, simple attributes are shown as files in
+the directory of the object and more complex objects are subdirectories
+or symbolic links to other directories.
+
+As with the procfs interface, we only document some interesting
+attribuets. Some attributes are writable and hence writing to them
+without knowing what you do is not exactly wise.
+
+Like the procfs interface, this interface is subject to changes and
+should not be considered a stable interface. Please use the Zaptel-perl
+modules and utilities.
+
+
+Astribanks in SysFS
+^^^^^^^^^^^^^^^^^^^
+Each astribank is represented as a device under
+/sys/bus/astribanks/devices , with the name xbus-NN, where NN is its
+two-digit number (e.g.: 00, 01).
+
+===== /sys/bus/astribanks/devices/xbus-NN/cls
+CLear Statistics: writing to this file clear the procfs statistics for
+this Astribank.
+
+===== /sys/bus/astribanks/devices/xbus-NN/connector
+Connector string for the device. The place to which the Astribank is
+connected. e.g: usb-0000:00:03.3-2
+
+===== /sys/bus/astribanks/devices/xbus-NN/label
+The label string of the Astribank unit. E.g: usb:00000135
+
+===== /sys/bus/astribanks/devices/xbus-NN/status
+'connected' (normal operation) or 'disconnected' (has been disconnected,
+some channels are still open).
+
+===== /sys/bus/astribanks/devices/xbus-NN/timing
+Provides some statistics in case the Astribank is not the sync source.
+The format of this file is subject to future changes.
+
+===== /sys/bus/astribanks/devices/xbus-NN/waitfor_xpds
+Reading from this file only returns when the Astribank has finished
+initialization of the XPDs or in case of a timeout. It prints the number
+of XPDs to initialize, and the number initialize. Unless something went
+wrong, those two numbers are the same. Once the span was initialized,
+reading from this file returns immediately:
+
+ XPDS_READY: XBUS-00: 3/3
+
+===== /sys/bus/astribanks/devices/xbus-NN/xbus_state
+Reading from it prints the name and number of the state of the
+Astribank. This file is also writable: you can write either 'stop' to
+disconnect the specific Astribank, or 'start' to reconnect it.
+
+===== /sys/bus/astribanks/drivers/xppdrv/sync
+(An attribute of the generic Astribanks driver)
+
+The synchronization source. Normally the number of the astribank that is
+the synchronization master, or 'SYNC=ZAPTEL' if Astribanks are
+synchronized from a different Zaptel device. Normally you should just use
+xpp_sync, though.
+
+
+XPDs in SysFS
+^^^^^^^^^^^^^
+Under the Astribank you'll find a subdirectory for each of its XPDs
+("spans"). The name of the directory is composed of three numbers:
+
+<astribank>:<module>:<subunit>
+
+astribank::
+ Two-digit name of the Astribank in which this XPD is in. If it is
+ xbus-03, you will see there '03'.
+
+module::
+ The number of the Astribank module: from 0 (left-most) to 3
+ (right-most).
+
+subunit::
+ In a module that has several spans: the number of the span. In
+ practice this is only for BRI and PRI and hence the module number will
+ always be 0 in this case.
+
+The two-digit number of the XPD in the procfs interface is in fact
+<module><subunit>.
+
+Under this you see several attributes.
+
+===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/blink
+You can write here a number which will be considered to be a bitmask
+of the ports that should blink (0 - no blinking). Reading from here
+shows that bitmask. If you think that this is complicated, just use
+xpp_blink.
+
+===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/chipregs
+Provides direct read/write interface to the registers of each chip.
+Reading from the file shows the result of the last read request. To make
+either a read request or a write request you need to write to that file.
+
+It is mainly used by the initialization scripts (init_card_*).
+
+Incorrect usage of this file is one possible way of damaging the
+Astribank.
-On each time an Astribank is initialized or destroyed a udev event is
-generated. The rules from our sample udev rules file (xpp/utils/xpp.rules)
-make that event run the script /usr/share/zaptel/astribank_hook with the
-parameter 'add' or 'remove', if such script exists. An example script
-that just adjusts the Astribank sync settings is included in xpp/utils.
+===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/fxo_battery
+(Only on FXO) - shows ports that have (+) or don't have (-) battery
+current. That is: which ones are connected to an active FXS on the
+other side.
-cls::
- CLear Statistics: writing to this file clear the procfs statistics for
- this bus.
+current. That is: which ones are connected to an active FXS on the
+other side.
-connector::
- Connector string for the device. The place to which the Astribank is
- connected. e.g: usb-0000:00:03.3-2
+===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/offhook
+Shows ports that are (1) or are not (0) off-hook. When a channel is
+not off-hook. For BRI and E1/T1 the value is 1 if the span is in use.
+This value can also be used to get the number of lines (channels) in
+this XPD: the count of items in this list.
-label::
- The label string of the Astribank unit. E.g: usb:00000135
+===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/span
+is a read/write file. Reading from it gives 0 if the span is
+unregistered, or the span number if it is registered.
-status::
- 'connected' (normal operation) or 'disconnected' (has been disconnected,
- some channels are still open).
+Writing to it allows manual registration / unregistration from Zaptel:
+writing 1 registers a span (if it wasn't already registered) and writing
+0 attempts to unregister it (if it is registered. Span unregistration
+will fail if some channels from the span are used (e.g: by Asterisk).
-timing::
- Provides some statistics in case the Astribank is not the sync source.
- The format of this file is subject to future changes.
+A more convenient interface to this is the command zt_registration that
+registers or unregisters all the spans at once with a predefined order,
+and this is what you should normally use.
+
+Alternatively you can use the parameter zap_autoreg to register spans
+automatically. But this is only recommended on a system with a single
+Astribank and no other Zaptel device.
+
+===== /sys/bus/astribanks/devices/xbus-NN/NN:M:P/driver
+This is a standard sysfs feature: from the directory of the device you
+have a link called "driver" to the directory of the driver that
+handles it. One specific interesting thing is that this allows you to
+easily see all the XPDs of the same type, as they are linked again
+from the driver's directory.
Useful Module Parameters
@@ -1293,78 +1531,108 @@ Useful Module Parameters
Compilation-time defaults for the all modules can be shown as part of the
description line for the parameter in the "modinfo" command output.
-zap_autoreg (xpp)::
- Register spans automatically (1) or not (0). Default: 0.
- Setting it simplifies operations with a single Astribank and no other
- Zaptel hardware. However if you have such systems, automatic
- registration can cause the order of spans to be unpredictable.
- The standard startup scripts use 'zt_registration on' instead of this.
-
-initdir (xpp)::
- This is the directory containing the initialization scripts.
- The default is /usr/share/zaptel .
- Setting this value could be useful if that location is inconvenient for you.
-
-rx_tasklet (xpp)::
- Enable (1) or disable (0) doing most of the packets processing in
- separate tasklets. This should probably help on higher-end systems with
- multiple Astribanks.
-
-debug (all modules)::
- It will make the driver to print tons of debugging messages. You can
- set/unset the parameter at run-time. The parameter value is a bitmask
- of several values. The different bits meaning as it defined in
- xpp/zap_debug.h:
-
- * 0 - Disable debug messages
- * 1 - GENERAL - General debug comments.
- * 2 - PCM - PCM-related messages. Tends to flood logs.
- * 4 - LEDS - Anything related to the LEDs status control. The driver
- produces a lot of messages when the option is enabled.
- * 8 - SYNC - Synchronization related messages.
- * 16 - SIGNAL - Zaptel signalling related messages.
- * 32 - PROC - Messages related to the procfs interface.
- * 64 - REGS - Reading and writing to chip registers. Tends to flood
- logs.
- * 128 - DEVICES - Device instantiation, destruction and such.
- * 256 - COMMANDS - Protocol commands. Tends to flood logs.
-
- For example,
-
- echo 33 >/sys/modules/xpp/parameters/debug
-
- forces module xpp to print general debugging messages (1) and procfs
- debugging messages (32).
-
-vmwineon (xpd_fxs)::
- Enable (1) or disable (0) sending the voicemail message waiting indication
- signal to phones equipped with the Message Waiting neon lamp. It is
- disabled by default because the feature requires extra work of the driver
- even when such a phone is not used and also may cause some unusual
- side effects with some phone models.
-
-usb1 (xpp_usb)::
- Enable (1) or disable (0) support of USB1 devices. Disabled by default.
-
- USB1 devices are not well-tested. It seems that they don't work at all
- for Astribank BRI. Generally they should work with the current code, but
- we expect the voice quality issues. Hence we would like to make it
- very clear that you if you have a USB1 port (rather than a USB2 one, as
- recommended) you will have to take an action to enable the device.
-
-poll intervals (various)::
- There are various values which the driver occasionally polls the device
- for. For instance, the parameter poll_battery_interval for xpd_fxo
- to poll the battery, in order to know if the telco line is actually
- connected.
-
- The value of those parameters is typically a number in milliseconds.
- 0 is used to disable polling. Under normal operation there should be
- no reason to play with those parameters.
-
-dtmf_detection (xpd_fxs)::
- Enable (1) or disable (0) support of hardware DTMF detection by the
- Astribank.
+==== zap_autoreg
+(xpp)
+
+Register spans automatically (1) or not (0). Default: 0.
+Setting it simplifies operations with a single Astribank and no other
+Zaptel hardware. However if you have such systems, automatic
+registration can cause the order of spans to be unpredictable.
+The standard startup scripts use 'zt_registration on' instead of this.
+
+==== initdir
+(xpp)
+
+This is the directory containing the initialization scripts.
+The default is /usr/share/zaptel .
+Setting this value could be useful if that location is inconvenient for you.
+
+==== rx_tasklet
+(xpp)
+
+Enable (1) or disable (0) doing most of the packets processing in
+separate tasklets. This should probably help on higher-end systems with
+multiple Astribanks.
+
+==== debug
+(all modules)
+
+It will make the driver to print tons of debugging messages. You can
+set/unset the parameter at run-time. The parameter value is a bitmask
+of several values. The different bits meaning as it defined in
+xpp/zap_debug.h:
+
+* 0 - Disable debug messages
+* 1 - GENERAL - General debug comments.
+* 2 - PCM - PCM-related messages. Tends to flood logs.
+* 4 - LEDS - Anything related to the LEDs status control. The driver
+ produces a lot of messages when the option is enabled.
+* 8 - SYNC - Synchronization related messages.
+* 16 - SIGNAL - Zaptel signalling related messages.
+* 32 - PROC - Messages related to the procfs interface.
+* 64 - REGS - Reading and writing to chip registers. Tends to flood
+ logs.
+* 128 - DEVICES - Device instantiation, destruction and such.
+* 256 - COMMANDS - Protocol commands. Tends to flood logs.
+
+For example,
+
+ echo 33 >/sys/modules/xpp/parameters/debug
+
+forces module xpp to print general debugging messages (1) and procfs
+debugging messages (32).
+
+==== vmwineon
+(xpd_fxs)
+
+Enable (1) or disable (0) sending the voicemail message waiting indication
+signal to phones equipped with the Message Waiting neon lamp. It is
+disabled by default because the feature requires extra work of the driver
+even when such a phone is not used and also may cause some unusual
+side effects with some phone models.
+
+==== usb1
+(xpp_usb)
+
+Enable (1) or disable (0) support of USB1 devices. Disabled by default.
+
+USB1 devices are not well-tested. It seems that they don't work at all
+for Astribank BRI. Generally they should work with the current code, but
+we expect the voice quality issues. Hence we would like to make it
+very clear that you if you have a USB1 port (rather than a USB2 one, as
+recommended) you will have to take an action to enable the device.
+
+==== poll intervals
+(various)
+
+There are various values which the driver occasionally polls the
+device for. For instance, the parameter poll_battery_interval for
+xpd_fxo to poll the battery, in order to know if the telco line is
+actually connected.
+
+The value of those parameters is typically a number in milliseconds.
+0 is used to disable polling. Under normal operation there should be
+no reason to play with those parameters.
+
+==== dtmf_detection
+(xpd_fxs)
+
+Enable (1) or disable (0) support of hardware DTMF detection by the
+Astribank.
+
+==== caller_id_style
+(fxo)
+
+Various types of caller ID signalling styles require knowing the PCM
+even when the line is on-hook (which is usually a waste of CPU and
+bandwidth). This parameter allows fine-tuning the behaviour here:
+
+* 0 (default) - Don't pass extra PCM when on-hook.
+* 1 ETSI-FSK: Wait for polarity reversal to come before a ring and
+ then start passing PCM until the caller ID has been passed.
+* 2 Always: Always pass PCM.
+
+This parameter is read-only. It cannot be changed at run-time.
NOTE: XPP here does not stand for X Printing Panel, XML Pull Parser,
diff --git a/kernel/xpp/XppConfig.pm b/kernel/xpp/XppConfig.pm
new file mode 100644
index 0000000..3c7f293
--- /dev/null
+++ b/kernel/xpp/XppConfig.pm
@@ -0,0 +1,38 @@
+package XppConfig;
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2008, Xorcom
+# This program is free software; you can redistribute and/or
+# modify it under the same terms as Perl itself.
+#
+# $Id$
+#
+use strict;
+
+my $conf_file = "/etc/xpp.conf";
+
+sub import {
+ my $pack = shift || die "Import without package?";
+ my $init_dir = shift || die "$pack::import -- missing init_dir parameter";
+ my $local_conf = "$init_dir/xpp.conf";
+ $conf_file = $local_conf if -r $local_conf;
+}
+
+sub read_config($) {
+ my $opts = shift || die;
+
+ open(F, $conf_file) || return ();
+ while(<F>) {
+ chomp;
+ s/#.*//; # strip comments
+ next unless /\S/;
+ s/\s*$//; # Trim trailing whitespace
+ my ($key, $value) = split(/\s+/, $_, 2);
+ $opts->{$key} = $value;
+ }
+ close F;
+ $opts->{'xppconf'} = $conf_file;
+ return %{$opts};
+}
+
+1;
diff --git a/kernel/xpp/card_bri.c b/kernel/xpp/card_bri.c
index fb6be03..1e3ec8b 100644
--- a/kernel/xpp/card_bri.c
+++ b/kernel/xpp/card_bri.c
@@ -560,6 +560,7 @@ static int tx_dchan(xpd_t *xpd)
priv->txframe_begin = 1;
else
priv->txframe_begin = 0;
+ XPD_DBG(COMMANDS, xpd, "eoframe=%d len=%d\n", eoframe, len);
ret = send_multibyte_request(xpd->xbus, xpd->addr.unit, xpd->addr.subunit,
eoframe, priv->dchan_tbuf, len);
if(ret < 0)
@@ -615,13 +616,11 @@ static xpd_t *BRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
int channels = min(3, CHANNELS_PERXPD);
XBUS_DBG(GENERAL, xbus, "\n");
- xpd = xpd_alloc(sizeof(struct BRI_priv_data), proto_table, channels);
+ xpd = xpd_alloc(xbus, unit, subunit, subtype, subunits, sizeof(struct BRI_priv_data), proto_table, channels);
if(!xpd)
return NULL;
xpd->direction = (to_phone) ? TO_PHONE : TO_PSTN;
xpd->type_name = (to_phone) ? "BRI_NT" : "BRI_TE";
- if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
- goto err;
if(bri_proc_create(xbus, xpd) < 0)
goto err;
return xpd;
@@ -898,7 +897,7 @@ static int BRI_card_tick(xbus_t *xbus, xpd_t *xpd)
static int BRI_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long arg)
{
BUG_ON(!xpd);
- if(!TRANSPORT_RUNNING(xpd->xbus))
+ if(!XBUS_IS(xpd->xbus, READY))
return -ENODEV;
switch (cmd) {
case ZT_TONEDETECT:
@@ -1018,7 +1017,7 @@ static int bri_startup(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!TRANSPORT_RUNNING(xpd->xbus)) {
+ if(!XBUS_IS(xpd->xbus, READY)) {
XPD_DBG(GENERAL, xpd, "Startup called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -1051,7 +1050,7 @@ static int bri_shutdown(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!TRANSPORT_RUNNING(xpd->xbus)) {
+ if(!XBUS_IS(xpd->xbus, READY)) {
XPD_DBG(GENERAL, xpd, "Shutdown called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -1540,10 +1539,48 @@ static int proc_bri_info_read(char *page, char **start, off_t off, int count, in
return len;
}
+static int bri_xpd_probe(struct device *dev)
+{
+ xpd_t *xpd;
+
+ xpd = dev_to_xpd(dev);
+ /* Is it our device? */
+ if(xpd->type != XPD_TYPE_BRI) {
+ XPD_ERR(xpd, "drop suggestion for %s (%d)\n",
+ dev->bus_id, xpd->type);
+ return -EINVAL;
+ }
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ return 0;
+}
+
+static int bri_xpd_remove(struct device *dev)
+{
+ xpd_t *xpd;
+
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ return 0;
+}
+
+static struct xpd_driver bri_driver = {
+ .type = XPD_TYPE_BRI,
+ .driver = {
+ .name = "bri",
+#ifndef OLD_HOTPLUG_SUPPORT
+ .owner = THIS_MODULE,
+#endif
+ .probe = bri_xpd_probe,
+ .remove = bri_xpd_remove
+ }
+};
+
static int __init card_bri_startup(void)
{
- DBG(GENERAL, "\n");
+ int ret;
+ if((ret = xpd_driver_register(&bri_driver.driver)) < 0)
+ return ret;
INFO("revision %s\n", XPP_VERSION);
xproto_register(&PROTO_TABLE(BRI));
return 0;
@@ -1553,6 +1590,7 @@ static void __exit card_bri_cleanup(void)
{
DBG(GENERAL, "\n");
xproto_unregister(&PROTO_TABLE(BRI));
+ xpd_driver_unregister(&bri_driver.driver);
}
MODULE_DESCRIPTION("XPP BRI Card Driver");
diff --git a/kernel/xpp/card_fxo.c b/kernel/xpp/card_fxo.c
index 2090773..bddfa0c 100644
--- a/kernel/xpp/card_fxo.c
+++ b/kernel/xpp/card_fxo.c
@@ -40,6 +40,8 @@ static DEF_PARM(uint, poll_metering_interval, 500, 0644, "Poll metering interval
#endif
static DEF_PARM(int, ring_debounce, 50, 0644, "Number of ticks to debounce a false RING indication");
static DEF_PARM(int, caller_id_style, 0, 0444, "Caller-Id detection style: 0 - [BELL], 1 - [ETSI_FSK], 2 - [ETSI_DTMF]");
+static DEF_PARM(int, power_denial_safezone, 650, 0644, "msec after offhook to ignore power-denial ( (0 - disable power-denial)");
+static DEF_PARM(int, power_denial_minlen, 80, 0644, "Minimal detected power-denial length (msec) (0 - disable power-denial)");
/* Backward compatibility plug */
#ifndef ZT_GET_PARAMS_V1
@@ -77,8 +79,6 @@ enum fxo_leds {
#define BAT_THRESHOLD 3
#define BAT_DEBOUNCE 1000 /* compensate for battery voltage fluctuation (in ticks) */
#define POWER_DENIAL_CURRENT 3
-#define POWER_DENIAL_TIME 80 /* ticks */
-#define POWER_DENIAL_SAFEZONE 100 /* ticks */
#define POWER_DENIAL_DELAY 2500 /* ticks */
/* Shortcuts */
@@ -144,10 +144,8 @@ struct FXO_priv_data {
enum polarity_state polarity[CHANNELS_PERXPD];
ushort polarity_debounce[CHANNELS_PERXPD];
enum power_state power[CHANNELS_PERXPD];
- xpp_line_t maybe_power_denial;
- ushort power_denial_debounce[CHANNELS_PERXPD];
ushort power_denial_delay[CHANNELS_PERXPD];
- ushort power_denial_minimum[CHANNELS_PERXPD];
+ ushort power_denial_length[CHANNELS_PERXPD];
ushort power_denial_safezone[CHANNELS_PERXPD];
xpp_line_t cidfound; /* 0 - OFF, 1 - ON */
unsigned int cidtimer[CHANNELS_PERXPD];
@@ -201,9 +199,8 @@ static void reset_battery_readings(xpd_t *xpd, lineno_t pos)
struct FXO_priv_data *priv = xpd->priv;
priv->nobattery_debounce[pos] = 0;
- priv->power_denial_debounce[pos] = 0;
priv->power_denial_delay[pos] = 0;
- BIT_CLR(priv->maybe_power_denial, pos);
+ power_change(xpd, pos, POWER_UNKNOWN);
}
static const int led_register_mask[] = { BIT(7), BIT(6), BIT(5) };
@@ -364,9 +361,12 @@ static int do_sethook(xpd_t *xpd, int pos, bool to_offhook)
DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, DAA_REG_METERING, 0x2D);
#endif
reset_battery_readings(xpd, pos); /* unstable during hook changes */
- priv->power_denial_safezone[pos] = (to_offhook) ? POWER_DENIAL_SAFEZONE : 0;
- if(!to_offhook)
- power_change(xpd, pos, POWER_UNKNOWN);
+ if(to_offhook) {
+ priv->power_denial_safezone[pos] = power_denial_safezone;
+ } else {
+ priv->power_denial_length[pos] = 0;
+ priv->power_denial_safezone[pos] = 0;
+ }
priv->cidtimer[pos] = xpd->timer_count;
spin_unlock_irqrestore(&xpd->lock, flags);
return ret;
@@ -443,13 +443,11 @@ static xpd_t *FXO_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
channels = min(2, CHANNELS_PERXPD);
else
channels = min(8, CHANNELS_PERXPD);
- xpd = xpd_alloc(sizeof(struct FXO_priv_data), proto_table, channels);
+ xpd = xpd_alloc(xbus, unit, subunit, subtype, subunits, sizeof(struct FXO_priv_data), proto_table, channels);
if(!xpd)
return NULL;
xpd->direction = TO_PSTN;
xpd->type_name = "FXO";
- if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
- goto err;
if(fxo_proc_create(xbus, xpd) < 0)
goto err;
return xpd;
@@ -574,7 +572,6 @@ static int FXO_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
/* XXX Enable hooksig for FXO XXX */
switch(txsig) {
case ZT_TXSIG_START:
- break;
case ZT_TXSIG_OFFHOOK:
ret = do_sethook(xpd, pos, 1);
break;
@@ -666,48 +663,51 @@ static void handle_fxo_power_denial(xpd_t *xpd)
struct FXO_priv_data *priv;
int i;
+ if(!power_denial_safezone)
+ return; /* Ignore power denials */
priv = xpd->priv;
for_each_line(xpd, i) {
- if(priv->power_denial_minimum[i] > 0) {
- priv->power_denial_minimum[i]--;
- if(priv->power_denial_minimum[i] <= 0) {
- /*
- * But maybe the FXS started to ring (and the firmware haven't
- * detected it yet). This would cause false power denials.
- * So we just flag it and schedule more ticks to wait.
- */
- LINE_DBG(SIGNAL, xpd, i, "Possible Power Denial Hangup\n");
- priv->power_denial_debounce[i] = 0;
- BIT_SET(priv->maybe_power_denial, i);
- }
+ if(xpd->ringing[i] || !IS_OFFHOOK(xpd, i)) {
+ priv->power_denial_delay[i] = 0;
+ continue;
}
if(priv->power_denial_safezone[i] > 0) {
- if(--priv->power_denial_safezone[i]) {
+ if(--priv->power_denial_safezone[i] == 0) {
/*
* Poll current, previous answers are meaningless
*/
DAA_DIRECT_REQUEST(xpd->xbus, xpd, i, DAA_READ, DAA_REG_CURRENT, 0);
}
+ continue;
}
- if(IS_SET(priv->maybe_power_denial, i) && !xpd->ringing[i] && IS_OFFHOOK(xpd, i)) {
+ if(priv->power_denial_length[i] > 0) {
+ priv->power_denial_length[i]--;
+ if(priv->power_denial_length[i] <= 0) {
+ /*
+ * But maybe the FXS started to ring (and the firmware haven't
+ * detected it yet). This would cause false power denials.
+ * So we just flag it and schedule more ticks to wait.
+ */
+ LINE_DBG(SIGNAL, xpd, i, "Possible Power Denial Hangup\n");
+ priv->power_denial_delay[i] = POWER_DENIAL_DELAY;
+ }
+ continue;
+ }
+ if (priv->power_denial_delay[i] > 0) {
/*
* Ring detection by the firmware takes some time.
* Therefore we delay our decision until we are
* sure that no ring has started during this time.
*/
- priv->power_denial_delay[i]++;
- if (priv->power_denial_delay[i] >= POWER_DENIAL_DELAY) {
+ priv->power_denial_delay[i]--;
+ if (priv->power_denial_delay[i] <= 0) {
LINE_DBG(SIGNAL, xpd, i, "Power Denial Hangup\n");
priv->power_denial_delay[i] = 0;
- BIT_CLR(priv->maybe_power_denial, i);
/*
* Let Asterisk decide what to do
*/
notify_rxsig(xpd, i, ZT_RXSIG_ONHOOK);
}
- } else {
- priv->power_denial_delay[i] = 0;
- BIT_CLR(priv->maybe_power_denial, i);
}
}
}
@@ -784,7 +784,6 @@ static int FXO_card_tick(xbus_t *xbus, xpd_t *xpd)
return 0;
}
-/* FIXME: based on data from from wctdm.h */
#include <wctdm.h>
/*
* The first register is the ACIM, the other are coefficient registers.
@@ -799,7 +798,7 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
unsigned char echotune_data[ARRAY_SIZE(echotune_regs)];
BUG_ON(!xpd);
- if(!TRANSPORT_RUNNING(xpd->xbus))
+ if(!XBUS_IS(xpd->xbus, READY))
return -ENODEV;
switch (cmd) {
case WCTDM_SET_ECHOTUNE:
@@ -921,8 +920,7 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, xportno_t portno)
if(milliseconds > BAT_DEBOUNCE) {
LINE_DBG(SIGNAL, xpd, portno, "BATTERY OFF voltage=%d\n", volts);
priv->battery[portno] = BATTERY_OFF;
- if(SPAN_REGISTERED(xpd))
- zap_report_battery(xpd, portno);
+ zap_report_battery(xpd, portno);
/* What's the polarity ? */
priv->polarity[portno] = POL_UNKNOWN;
priv->polarity_debounce[portno] = 0;
@@ -940,8 +938,7 @@ static void update_battery_voltage(xpd_t *xpd, byte data_low, xportno_t portno)
if(priv->battery[portno] != BATTERY_ON) {
LINE_DBG(SIGNAL, xpd, portno, "BATTERY ON voltage=%d\n", volts);
priv->battery[portno] = BATTERY_ON;
- if(SPAN_REGISTERED(xpd))
- zap_report_battery(xpd, portno);
+ zap_report_battery(xpd, portno);
}
}
#if 0
@@ -1039,20 +1036,19 @@ static void update_battery_current(xpd_t *xpd, byte data_low, xportno_t portno)
if(data_low < POWER_DENIAL_CURRENT) {
if(priv->power[portno] == POWER_ON) {
power_change(xpd, portno, POWER_OFF);
- priv->power_denial_minimum[portno] = POWER_DENIAL_TIME;
+ priv->power_denial_length[portno] = power_denial_minlen;
}
} else {
if(priv->power[portno] != POWER_ON) {
power_change(xpd, portno, POWER_ON);
- priv->power_denial_minimum[portno] = 0;
+ priv->power_denial_length[portno] = 0;
/* We are now OFFHOOK */
hookstate_changed(xpd, portno, 1);
}
}
return;
ignore_it:
- BIT_CLR(priv->maybe_power_denial, portno);
- priv->power_denial_debounce[portno] = 0;
+ priv->power_denial_delay[portno] = 0;
}
#ifdef WITH_METERING
@@ -1256,14 +1252,6 @@ static int proc_fxo_info_read(char *page, char **start, off_t off, int count, in
curr = ".";
len += sprintf(page + len, "%4s ", curr);
}
- len += sprintf(page + len, "\n\t%-17s: ", "maybe");
- for_each_line(xpd, i) {
- len += sprintf(page + len, "%4d ", IS_SET(priv->maybe_power_denial, i));
- }
- len += sprintf(page + len, "\n\t%-17s: ", "debounce");
- for_each_line(xpd, i) {
- len += sprintf(page + len, "%4d ", priv->power_denial_debounce[i]);
- }
len += sprintf(page + len, "\n\t%-17s: ", "safezone");
for_each_line(xpd, i) {
len += sprintf(page + len, "%4d ", priv->power_denial_safezone[i]);
@@ -1327,12 +1315,95 @@ static int proc_xpd_metering_read(char *page, char **start, off_t off, int count
}
#endif
+static DEVICE_ATTR_READER(fxo_battery_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct FXO_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+ int i;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ for_each_line(xpd, i) {
+ char bat;
+
+ if(priv->battery[i] == BATTERY_ON)
+ bat = '+';
+ else if(priv->battery[i] == BATTERY_OFF)
+ bat = '-';
+ else
+ bat = '.';
+ len += sprintf(buf + len, "%c ", bat);
+ }
+ len += sprintf(buf + len, "\n");
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(fxo_battery, S_IRUGO, fxo_battery_show, NULL);
+
+
+static int fxo_xpd_probe(struct device *dev)
+{
+ xpd_t *xpd;
+ int ret;
+
+ xpd = dev_to_xpd(dev);
+ /* Is it our device? */
+ if(xpd->type != XPD_TYPE_FXO) {
+ XPD_ERR(xpd, "drop suggestion for %s (%d)\n",
+ dev->bus_id, xpd->type);
+ return -EINVAL;
+ }
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ ret = device_create_file(dev, &dev_attr_fxo_battery);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(fxo_battery) failed: %d\n", __FUNCTION__, ret);
+ goto fail_fxo_battery;
+ }
+ return 0;
+fail_fxo_battery:
+ return ret;
+}
+
+static int fxo_xpd_remove(struct device *dev)
+{
+ xpd_t *xpd;
+
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ device_remove_file(dev, &dev_attr_fxo_battery);
+ return 0;
+}
+
+static struct xpd_driver fxo_driver = {
+ .type = XPD_TYPE_FXO,
+ .driver = {
+ .name = "fxo",
+#ifndef OLD_HOTPLUG_SUPPORT
+ .owner = THIS_MODULE,
+#endif
+ .probe = fxo_xpd_probe,
+ .remove = fxo_xpd_remove
+ }
+};
+
static int __init card_fxo_startup(void)
{
+ int ret;
+
if(ring_debounce <= 0) {
ERR("ring_debounce=%d. Must be positive number of ticks\n", ring_debounce);
return -EINVAL;
}
+ if((ret = xpd_driver_register(&fxo_driver.driver)) < 0)
+ return ret;
INFO("revision %s\n", XPP_VERSION);
#ifdef WITH_METERING
INFO("FEATURE: WITH METERING Detection\n");
@@ -1346,6 +1417,7 @@ static int __init card_fxo_startup(void)
static void __exit card_fxo_cleanup(void)
{
xproto_unregister(&PROTO_TABLE(FXO));
+ xpd_driver_unregister(&fxo_driver.driver);
}
MODULE_DESCRIPTION("XPP FXO Card Driver");
diff --git a/kernel/xpp/card_fxs.c b/kernel/xpp/card_fxs.c
index 7068bf7..47688ef 100644
--- a/kernel/xpp/card_fxs.c
+++ b/kernel/xpp/card_fxs.c
@@ -397,7 +397,7 @@ static xpd_t *FXS_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
channels = regular_channels;
if(unit == 0)
channels += 6; /* 2 DIGITAL OUTPUTS, 4 DIGITAL INPUTS */
- xpd = xpd_alloc(sizeof(struct FXS_priv_data), proto_table, channels);
+ xpd = xpd_alloc(xbus, unit, subunit, subtype, subunits, sizeof(struct FXS_priv_data), proto_table, channels);
if(!xpd)
return NULL;
if(unit == 0) {
@@ -407,8 +407,6 @@ static xpd_t *FXS_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
}
xpd->direction = TO_PHONE;
xpd->type_name = "FXS";
- if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
- goto err;
if(fxs_proc_create(xbus, xpd) < 0)
goto err;
priv = xpd->priv;
@@ -778,7 +776,7 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
BUG_ON(!priv);
xbus = xpd->xbus;
BUG_ON(!xbus);
- if(!TRANSPORT_RUNNING(xbus))
+ if(!XBUS_IS(xbus, READY))
return -ENODEV;
if (pos < 0 || pos >= xpd->channels) {
XPD_NOTICE(xpd, "Bad channel number %d in %s(), cmd=%u\n",
@@ -1486,8 +1484,49 @@ static int proc_xpd_metering_write(struct file *file, const char __user *buffer,
}
#endif
+static int fxs_xpd_probe(struct device *dev)
+{
+ xpd_t *xpd;
+
+ xpd = dev_to_xpd(dev);
+ /* Is it our device? */
+ if(xpd->type != XPD_TYPE_FXS) {
+ XPD_ERR(xpd, "drop suggestion for %s (%d)\n",
+ dev->bus_id, xpd->type);
+ return -EINVAL;
+ }
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ return 0;
+}
+
+static int fxs_xpd_remove(struct device *dev)
+{
+ xpd_t *xpd;
+
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ return 0;
+}
+
+static struct xpd_driver fxs_driver = {
+ .type = XPD_TYPE_FXS,
+ .driver = {
+ .name = "fxs",
+#ifndef OLD_HOTPLUG_SUPPORT
+ .owner = THIS_MODULE,
+#endif
+ .probe = fxs_xpd_probe,
+ .remove = fxs_xpd_remove
+ }
+};
+
static int __init card_fxs_startup(void)
{
+ int ret;
+
+ if((ret = xpd_driver_register(&fxs_driver.driver)) < 0)
+ return ret;
+
INFO("revision %s\n", XPP_VERSION);
#ifdef POLL_DIGITAL_INPUTS
INFO("FEATURE: with DIGITAL INPUTS support (polled every %d msec)\n",
@@ -1512,6 +1551,7 @@ static int __init card_fxs_startup(void)
static void __exit card_fxs_cleanup(void)
{
xproto_unregister(&PROTO_TABLE(FXS));
+ xpd_driver_unregister(&fxs_driver.driver);
}
MODULE_DESCRIPTION("XPP FXS Card Driver");
diff --git a/kernel/xpp/card_global.c b/kernel/xpp/card_global.c
index d3a7a66..88b9f60 100644
--- a/kernel/xpp/card_global.c
+++ b/kernel/xpp/card_global.c
@@ -40,6 +40,7 @@ extern int debug;
/*---------------- GLOBAL PROC handling -----------------------------------*/
+#ifdef OLD_PROC
static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
@@ -51,6 +52,8 @@ static int proc_xpd_register_read(char *page, char **start, off_t off, int count
if(!xpd)
return -ENODEV;
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] read from /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
spin_lock_irqsave(&xpd->lock, flags);
info = &xpd->last_reply;
len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
@@ -88,6 +91,7 @@ static int proc_xpd_register_read(char *page, char **start, off_t off, int count
len = 0;
return len;
}
+#endif
static int parse_hexbyte(const char *buf)
{
@@ -289,7 +293,7 @@ out:
return ret;
}
-static int parse_chip_command(xpd_t *xpd, char *cmdline)
+int parse_chip_command(xpd_t *xpd, char *cmdline)
{
xbus_t *xbus;
int ret = -EBADR;
@@ -303,8 +307,9 @@ static int parse_chip_command(xpd_t *xpd, char *cmdline)
BUG_ON(!xpd);
xbus = xpd->xbus;
- if(!XBUS_GET(xbus)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
+ if(XBUS_IS(xbus, DISCONNECTED)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped packet. In state %s.\n",
+ xbus_statename(XBUS_STATE(xbus)));
return -EBUSY;
}
strlcpy(buf, cmdline, MAX_PROC_WRITE); /* Save a copy */
@@ -335,11 +340,10 @@ static int parse_chip_command(xpd_t *xpd, char *cmdline)
else
ret = 0; /* empty command - no op */
out:
- XBUS_PUT(xbus);
return ret;
}
-
+#ifdef OLD_PROC
static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
{
xpd_t *xpd = data;
@@ -350,6 +354,8 @@ static int proc_xpd_register_write(struct file *file, const char __user *buffer,
if(!xpd)
return -ENODEV;
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] wrote to /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
for(i = 0; i < count; /* noop */) {
for(p = buf; p < buf + MAX_PROC_WRITE; p++) { /* read a line */
if(i >= count)
@@ -368,7 +374,9 @@ static int proc_xpd_register_write(struct file *file, const char __user *buffer,
XPD_NOTICE(xpd, "Failed writing command: '%s'\n", buf);
return ret;
}
- msleep(1); /* don't overflow command queue */
+ /* Don't flood command_queue */
+ if(xframe_queue_count(&xpd->xbus->command_queue) > 5)
+ msleep(6);
}
return count;
}
@@ -405,6 +413,7 @@ err:
chip_proc_remove(xbus, xpd);
return -EINVAL;
}
+#endif
/*---------------- GLOBAL Protocol Commands -------------------------------*/
@@ -415,7 +424,7 @@ static void global_packet_dump(const char *msg, xpacket_t *pack);
/* 0x07 */ HOSTCMD(GLOBAL, AB_REQUEST)
{
- int ret = 0;
+ int ret = -ENODEV;
xframe_t *xframe;
xpacket_t *pack;
@@ -427,7 +436,8 @@ static void global_packet_dump(const char *msg, xpacket_t *pack);
RPACKET_FIELD(pack, GLOBAL, AB_REQUEST, rev) = XPP_PROTOCOL_VERSION;
RPACKET_FIELD(pack, GLOBAL, AB_REQUEST, reserved) = 0;
XBUS_DBG(DEVICES, xbus, "Protocol Version %d\n", XPP_PROTOCOL_VERSION);
- ret = send_cmd_frame(xbus, xframe);
+ if(xbus_setstate(xbus, XBUS_STATE_SENT_REQUEST))
+ ret = send_cmd_frame(xbus, xframe);
return ret;
}
@@ -474,6 +484,12 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno,
dump_reg_cmd("REG_REQ", 1, xbus, xpd->addr.unit, reg_cmd->portnum, reg_cmd);
dump_packet("REG_REQ", pack, 1);
}
+ if(!xframe->usec_towait) { /* default processing time of SPI */
+ if(subreg)
+ xframe->usec_towait = 2000;
+ else
+ xframe->usec_towait = 1000;
+ }
ret = send_cmd_frame(xbus, xframe);
return ret;
}
@@ -590,6 +606,10 @@ HANDLER_DEF(GLOBAL, AB_DESCRIPTION) /* 0x08 */
ret = -EPROTO;
goto proto_err;
}
+ if(!xbus_setstate(xbus, XBUS_STATE_RECVD_DESC)) {
+ ret = -EPROTO;
+ goto proto_err;
+ }
XBUS_INFO(xbus, "DESCRIPTOR: %d cards, protocol revision %d\n", count_units, rev);
xbus->revision = rev;
if(!worker) {
@@ -631,19 +651,8 @@ HANDLER_DEF(GLOBAL, AB_DESCRIPTION) /* 0x08 */
list_add_tail(&card_desc->card_list, &worker->card_list);
spin_unlock_irqrestore(&worker->worker_lock, flags);
}
- /* Initialize the work. (adapt to kernel API changes). */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
- INIT_WORK(&worker->xpds_init_work, xbus_populate);
-#else
- INIT_WORK(&worker->xpds_init_work, xbus_populate, worker);
-#endif
- xbus = get_xbus(xbus->num); /* released in xbus_populate() */
- BUG_ON(!xbus);
- /* Now send it */
- if(!queue_work(worker->wq, &worker->xpds_init_work)) {
- XBUS_ERR(xbus, "Failed to queue xpd initialization work\n");
+ if(!xbus_process_worker(xbus))
return -ENODEV;
- }
return 0;
proto_err:
dump_packet("AB_DESCRIPTION", pack, DBG_ANY);
@@ -690,34 +699,24 @@ HANDLER_DEF(GLOBAL, SYNC_REPLY)
HANDLER_DEF(GLOBAL, ERROR_CODE)
{
- byte errorcode;
char tmp_name[TMP_NAME_LEN];
static long rate_limit;
- const char *msg;
- const static char *fw_messages[] = {
- [1] = "Packet too short",
- [2] = "Len field is too small",
- [3] = "Premature packet end",
- [4] = "Invalid op code",
- [5] = "Invalid packet len",
- [6] = "SPI fifo full",
- };
+ byte category_code;
+ byte errorbits;
BUG_ON(!xbus);
if((rate_limit++ % 5003) > 200)
return 0;
- errorcode = RPACKET_FIELD(pack, GLOBAL, ERROR_CODE, errorcode);
- msg = (errorcode < ARRAY_SIZE(fw_messages))
- ? fw_messages[errorcode]
- : "UNKNOWN CODE";
+ category_code = RPACKET_FIELD(pack, GLOBAL, ERROR_CODE, category_code);
+ errorbits = RPACKET_FIELD(pack, GLOBAL, ERROR_CODE, errorbits);
if(!xpd) {
snprintf(tmp_name, TMP_NAME_LEN, "%s(%1d%1d)", xbus->busname,
XPACKET_ADDR_UNIT(pack), XPACKET_ADDR_SUBUNIT(pack));
} else {
snprintf(tmp_name, TMP_NAME_LEN, "%s/%s", xbus->busname, xpd->xpdname);
}
- NOTICE("%s: FIRMWARE: %s CODE = 0x%X (%s) (rate_limit=%ld)\n",
- tmp_name, cmd->name, errorcode, msg, rate_limit);
+ NOTICE("%s: FIRMWARE %s: category=%d errorbits=0x%02X (rate_limit=%ld)\n",
+ tmp_name, cmd->name, category_code, errorbits, rate_limit);
dump_packet("FIRMWARE: ", pack, 1);
/*
* FIXME: Should implement an error recovery plan
@@ -755,19 +754,21 @@ static void global_packet_dump(const char *msg, xpacket_t *pack)
}
#define MAX_ENV_STR 40
-#define MAX_PATH_STR 60
+#define MAX_PATH_STR 128
int run_initialize_registers(xpd_t *xpd)
{
int ret;
xbus_t *xbus;
char busstr[MAX_ENV_STR];
+ char busnumstr[MAX_ENV_STR];
char unitstr[MAX_ENV_STR];
char subunitsstr[MAX_ENV_STR];
char typestr[MAX_ENV_STR];
char directionstr[MAX_ENV_STR];
char revstr[MAX_ENV_STR];
char connectorstr[MAX_ENV_STR];
+ char xbuslabel[MAX_ENV_STR];
char init_card[MAX_PATH_STR];
byte direction_mask;
int i;
@@ -777,12 +778,14 @@ int run_initialize_registers(xpd_t *xpd)
};
char *envp[] = {
busstr,
+ busnumstr,
unitstr,
subunitsstr,
typestr,
directionstr,
revstr,
connectorstr,
+ xbuslabel,
NULL
};
@@ -792,6 +795,10 @@ int run_initialize_registers(xpd_t *xpd)
XPD_NOTICE(xpd, "Missing initdir parameter\n");
return -EINVAL;
}
+ if(!xpd_setstate(xpd, XPD_STATE_INIT_REGS)) {
+ ret = -EINVAL;
+ goto err;
+ }
direction_mask = 0;
for(i = 0; i < xpd->subunits; i++) {
xpd_t *su = xpd_byaddr(xbus, xpd->addr.unit, i);
@@ -805,20 +812,25 @@ int run_initialize_registers(xpd_t *xpd)
direction_mask |= (su->direction == TO_PHONE) ? BIT(i) : 0;
}
snprintf(busstr, MAX_ENV_STR, "XBUS_NAME=%s", xbus->busname);
+ snprintf(busnumstr, MAX_ENV_STR, "XBUS_NUMBER=%d", xbus->num);
snprintf(unitstr, MAX_ENV_STR, "UNIT_NUMBER=%d", xpd->addr.unit);
snprintf(typestr, MAX_ENV_STR, "UNIT_TYPE=%d", xpd->type);
snprintf(subunitsstr, MAX_ENV_STR, "UNIT_SUBUNITS=%d", xpd->subunits);
snprintf(directionstr, MAX_ENV_STR, "UNIT_SUBUNITS_DIR=%d", direction_mask);
snprintf(revstr, MAX_ENV_STR, "XBUS_REVISION=%d", xbus->revision);
- snprintf(connectorstr, MAX_ENV_STR, "XBUS_CONNECTOR=%s", xbus->location);
+ snprintf(connectorstr, MAX_ENV_STR, "XBUS_CONNECTOR=%s", xbus->connector);
+ snprintf(xbuslabel, MAX_ENV_STR, "XBUS_LABEL=%s", xbus->label);
if(snprintf(init_card, MAX_PATH_STR, "%s/init_card_%d_%d",
initdir, xpd->type, xbus->revision) > MAX_PATH_STR) {
XPD_NOTICE(xpd, "Cannot initialize. pathname is longer than %d characters.\n", MAX_PATH_STR);
- return -E2BIG;
+ ret = -E2BIG;
+ goto err;
}
- if(!XBUS_GET(xbus)) {
- XBUS_ERR(xbus, "Skipped register initialization. XBUS is going down\n");
- return -ENODEV;
+ if(!XBUS_IS(xbus, RECVD_DESC)) {
+ XBUS_ERR(xbus, "Skipped register initialization. In state %s.\n",
+ xbus_statename(XBUS_STATE(xbus)));
+ ret = -ENODEV;
+ goto err;
}
XPD_DBG(DEVICES, xpd, "running '%s' for type=%d revision=%d\n",
init_card, xpd->type, xbus->revision);
@@ -841,7 +853,7 @@ int run_initialize_registers(xpd_t *xpd)
}
ret = -EINVAL;
}
- XBUS_PUT(xbus);
+err:
return ret;
}
diff --git a/kernel/xpp/card_global.h b/kernel/xpp/card_global.h
index c71f74d..7c2c9e7 100644
--- a/kernel/xpp/card_global.h
+++ b/kernel/xpp/card_global.h
@@ -91,7 +91,8 @@ DEF_RPACKET_DATA(GLOBAL, RESET_SYNC_COUNTERS,
byte mask;
);
DEF_RPACKET_DATA(GLOBAL, ERROR_CODE,
- byte errorcode;
+ byte category_code;
+ byte errorbits;
byte bad_packet[0];
);
@@ -99,8 +100,10 @@ DEF_RPACKET_DATA(GLOBAL, ERROR_CODE,
/* 0x19 */ DECLARE_CMD(GLOBAL, SYNC_SOURCE, enum sync_mode mode, int drift);
/* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SYNC_COUNTERS);
+#ifdef OLD_PROC
void chip_proc_remove(xbus_t *xbus, xpd_t *xpd);
int chip_proc_create(xbus_t *xbus, xpd_t *xpd);
+#endif
int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno,
bool writing, byte regnum, bool do_subreg, byte subreg,
byte data_low, bool do_datah, byte data_high, bool should_reply);
@@ -108,6 +111,7 @@ int send_multibyte_request(xbus_t *xbus, unsigned unit, xportno_t portno,
bool eoftx, byte *buf, unsigned len);
extern xproto_table_t PROTO_TABLE(GLOBAL);
int run_initialize_registers(xpd_t *xpd);
+int parse_chip_command(xpd_t *xpd, char *cmdline);
extern charp initdir;
#endif /* CARD_GLOBAL_H */
diff --git a/kernel/xpp/card_pri.c b/kernel/xpp/card_pri.c
index 78d2025..a8eef64 100644
--- a/kernel/xpp/card_pri.c
+++ b/kernel/xpp/card_pri.c
@@ -62,15 +62,19 @@ static DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in
static bool pri_packet_is_valid(xpacket_t *pack);
static void pri_packet_dump(const char *msg, xpacket_t *pack);
+#ifdef OLD_PROC
static int proc_pri_info_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_pri_info_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
+#endif
static int pri_startup(struct zt_span *span);
static int pri_shutdown(struct zt_span *span);
static int pri_rbsbits(struct zt_chan *chan, int bits);
static int pri_lineconfig(xpd_t *xpd, int lineconfig);
#define PROC_REGISTER_FNAME "slics"
+#ifdef OLD_PROC
#define PROC_PRI_INFO_FNAME "pri_info"
+#endif
enum pri_protocol {
PRI_PROTO_0 = 0,
@@ -101,25 +105,16 @@ static int pri_num_channels(enum pri_protocol pri_protocol)
return num_channels[pri_protocol];
}
-static const char *type_name(enum pri_protocol pri_protocol, bool is_nt)
+static const char *type_name(enum pri_protocol pri_protocol)
{
- static const char *names[2][4] = {
- /* TE */ [0] = {
- [PRI_PROTO_0] = "Unknown_TE",
- [PRI_PROTO_E1] = "E1_TE",
- [PRI_PROTO_T1] = "T1_TE",
- [PRI_PROTO_J1] = "J1_TE"
- },
- /* NT */ [1] = {
- [PRI_PROTO_0] = "Unknown_NT",
- [PRI_PROTO_E1] = "E1_NT",
- [PRI_PROTO_T1] = "T1_NT",
- [PRI_PROTO_J1] = "J1_NT"
- }
- };
- int term = (is_nt) ? 1 : 0;
+ static const char *names[4] = {
+ [PRI_PROTO_0] = "PRI-Unknown",
+ [PRI_PROTO_E1] = "E1",
+ [PRI_PROTO_T1] = "T1",
+ [PRI_PROTO_J1] = "J1"
+ };
- return names[term][pri_protocol];
+ return names[pri_protocol];
}
static int pri_linecompat(enum pri_protocol pri_protocol)
@@ -159,10 +154,10 @@ enum pri_led_state {
};
enum pri_led_selectors {
- TE_RED_LED = 0,
- TE_GREEN_LED = 1,
- NT_RED_LED = 2,
- NT_GREEN_LED = 3,
+ BOTTOM_RED_LED = 0,
+ BOTTOM_GREEN_LED = 1,
+ TOP_RED_LED = 2,
+ TOP_GREEN_LED = 3,
};
#define NUM_LEDS 4
@@ -294,9 +289,10 @@ struct pri_leds {
#define NUM_CAS_RS (REG_RS16_E - REG_RS2_E + 1)
struct PRI_priv_data {
- bool is_nt;
bool clock_source;
+#ifdef OLD_PROC
struct proc_dir_entry *pri_info;
+#endif
enum pri_protocol pri_protocol;
int deflaw;
unsigned int dchan_num;
@@ -393,6 +389,7 @@ static int pri_write_reg(xpd_t *xpd, int regnum, byte val)
);
}
+#ifdef OLD_PROC
static void pri_proc_remove(xbus_t *xbus, xpd_t *xpd)
{
struct PRI_priv_data *priv;
@@ -407,7 +404,9 @@ static void pri_proc_remove(xbus_t *xbus, xpd_t *xpd)
}
#endif
}
+#endif
+#ifdef OLD_PROC
static int pri_proc_create(xbus_t *xbus, xpd_t *xpd)
{
struct PRI_priv_data *priv;
@@ -432,6 +431,7 @@ err:
pri_proc_remove(xbus, xpd);
return -EINVAL;
}
+#endif
static bool valid_pri_modes(const xpd_t *xpd)
{
@@ -524,7 +524,7 @@ static int set_pri_proto(xpd_t *xpd, enum pri_protocol set_proto)
priv->deflaw = deflaw;
priv->dchan_num = dchan_num;
priv->local_loopback = 0;
- xpd->type_name = type_name(priv->pri_protocol, priv->is_nt);
+ xpd->type_name = type_name(priv->pri_protocol);
XPD_DBG(GENERAL, xpd, "%s, channels=%d, dchan_num=%d, deflaw=%d\n",
pri_protocol_name(set_proto),
xpd->channels,
@@ -557,7 +557,7 @@ static void zap_update_syncsrc(xpd_t *xpd)
if(!subxpd)
continue;
priv = subxpd->priv;
- if(priv->clock_source) {
+ if(priv->clock_source && priv->alarms == 0) {
if(best_spanno)
XPD_ERR(xpd, "Duplicate XPD's with clock_source=1\n");
best_spanno = subxpd->span.spanno;
@@ -578,7 +578,7 @@ static void zap_update_syncsrc(xpd_t *xpd)
/*
* Called from:
* - set_master_mode() --
- * As a result of ztcfg or writing to /proc/xpp/XBUS-??/XPD-/??/pri_info
+ * As a result of ztcfg
* - layer1_state() --
* As a result of an alarm.
*/
@@ -587,10 +587,10 @@ static void set_clocking(xpd_t *xpd)
xbus_t *xbus;
xpd_t *best_xpd = NULL;
int best_subunit = -1; /* invalid */
- int best_subunit_prio = 0;
+ unsigned int best_subunit_prio = INT_MAX;
int i;
- xbus = get_xbus(xpd->xbus->num);
+ xbus = xpd->xbus;
/* Find subunit with best timing priority */
for(i = 0; i < MAX_SLAVES; i++) {
struct PRI_priv_data *priv;
@@ -602,7 +602,7 @@ static void set_clocking(xpd_t *xpd)
priv = subxpd->priv;
if(priv->alarms != 0)
continue;
- if(subxpd->timing_priority > best_subunit_prio) {
+ if(subxpd->timing_priority > 0 && subxpd->timing_priority < best_subunit_prio) {
best_xpd = subxpd;
best_subunit = i;
best_subunit_prio = subxpd->timing_priority;
@@ -635,7 +635,6 @@ static void set_clocking(xpd_t *xpd)
}
}
zap_update_syncsrc(xpd);
- put_xbus(xbus);
}
static void set_reg_lim0(const char *msg, xpd_t *xpd)
@@ -665,10 +664,8 @@ static void set_reg_lim0(const char *msg, xpd_t *xpd)
* Normally set by the timing parameter in zaptel.conf
* If this is called by ztcfg, than it's too late to change
* zaptel sync priority (we are already registered)
- * There are two workarounds to mitigate this problem:
- * 1. So we set *our* sync master at least.
- * 2. And we try to call it with a sane default from set_nt()
- * which is called before zaptel registration.
+ *
+ * Also called from set_localloop()
*/
static int set_master_mode(const char *msg, xpd_t *xpd)
{
@@ -682,43 +679,20 @@ static int set_master_mode(const char *msg, xpd_t *xpd)
return 0;
}
-static int set_nt(const char *msg, xpd_t *xpd, bool is_nt)
+static int set_localloop(xpd_t *xpd, bool localloop)
{
struct PRI_priv_data *priv;
- const char *tname;
BUG_ON(!xpd);
priv = xpd->priv;
- tname = type_name(priv->pri_protocol, is_nt);
- XPD_DBG(SIGNAL, xpd, "%s(%s): %s %s\n", __FUNCTION__, msg, tname, (is_nt) ? "NT" : "TE");
if(SPAN_REGISTERED(xpd)) {
- XPD_NOTICE(xpd, "Registered as span %d. Cannot do %s(%s)\n",
- xpd->span.spanno, __FUNCTION__, msg);
- return -EBUSY;
- }
- priv->is_nt = is_nt;
- xpd->type_name = tname;
- xpd->direction = (is_nt) ? TO_PHONE : TO_PSTN;
- if(xpd->timing_priority == 0 && !is_nt) /* by default set timing priority from NT/TE */
- xpd->timing_priority = 1;
- set_master_mode(msg, xpd);
- return 0;
-}
-
-static int set_localloop(const char *msg, xpd_t *xpd, bool localloop)
-{
- struct PRI_priv_data *priv;
-
- BUG_ON(!xpd);
- priv = xpd->priv;
- XPD_DBG(SIGNAL, xpd, "(%s): %s\n", msg, (localloop)?"YES":"NO");
- if(SPAN_REGISTERED(xpd)) {
- XPD_NOTICE(xpd, "Registered as span %d. Cannot do %s(%s)\n",
- xpd->span.spanno, __FUNCTION__, msg);
+ XPD_NOTICE(xpd, "Registered as span %d. Cannot do %s\n",
+ xpd->span.spanno, __FUNCTION__);
return -EBUSY;
}
priv->local_loopback = localloop;
- set_reg_lim0(__FUNCTION__, xpd);
+ XPD_DBG(SIGNAL, xpd, "%s: %s\n", __FUNCTION__, (localloop) ? "LOCALLOOP" : "NO");
+ set_master_mode(__FUNCTION__, xpd);
return 0;
}
@@ -855,7 +829,7 @@ static int pri_lineconfig(xpd_t *xpd, int lineconfig)
fmr3 |= REG_FMR3_EXTIW;
}
XPD_DBG(GENERAL, xpd, "[%s] lineconfig=%s/%s/%s %s (0x%X)\n",
- (priv->is_nt)?"NT":"TE",
+ (priv->clock_source)?"MASTER":"SLAVE",
framingstr, codingstr, crcstr,
(lineconfig & ZT_CONFIG_NOTOPEN)?"YELLOW":"",
lineconfig);
@@ -910,7 +884,7 @@ static int pri_spanconfig(struct zt_span *span, struct zt_lineconfig *lc)
* We currently ignore it also.
*/
XPD_DBG(GENERAL, xpd, "[%s] lbo=%d lineconfig=0x%X sync=%d\n",
- (priv->is_nt)?"NT":"TE", lc->lbo, lc->lineconfig, lc->sync);
+ (priv->clock_source)?"MASTER":"SLAVE", lc->lbo, lc->lineconfig, lc->sync);
ret = pri_lineconfig(xpd, lc->lineconfig);
if(!ret) {
span->lineconfig = lc->lineconfig;
@@ -942,22 +916,20 @@ static xpd_t *PRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
int channels = min(31, CHANNELS_PERXPD); /* worst case */
XBUS_DBG(GENERAL, xbus, "\n");
- xpd = xpd_alloc(sizeof(struct PRI_priv_data), proto_table, channels);
+ xpd = xpd_alloc(xbus, unit, subunit, subtype, subunits, sizeof(struct PRI_priv_data), proto_table, channels);
if(!xpd)
return NULL;
priv = xpd->priv;
- priv->pri_protocol = PRI_PROTO_0; /* Default, changes in set_pri_proto() */
+ priv->pri_protocol = PRI_PROTO_0; /* Default, changes in set_pri_proto() */
priv->deflaw = ZT_LAW_DEFAULT; /* Default, changes in set_pri_proto() */
- xpd->type_name =
- type_name(priv->pri_protocol, 0); /* Default, changes in set_nt() */
- if(xpd_common_init(xbus, xpd, unit, subunit, subtype, subunits) < 0)
- goto err;
- if(pri_proc_create(xbus, xpd) < 0)
- goto err;
+ xpd->type_name = type_name(priv->pri_protocol);
+#ifdef OLD_PROC
+ if(pri_proc_create(xbus, xpd) < 0) {
+ xpd_free(xpd);
+ return NULL;
+ }
+#endif
return xpd;
-err:
- xpd_free(xpd);
- return NULL;
}
static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
@@ -988,6 +960,11 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
XPD_NOTICE(xpd, "PRI protocol not set\n");
goto err;
}
+ xpd->type_name = type_name(priv->pri_protocol);
+ xpd->direction = TO_PSTN;
+ XPD_DBG(DEVICES, xpd, "%s\n", xpd->type_name);
+ xpd->timing_priority = 1; /* SLAVE */
+ set_master_mode(__FUNCTION__, xpd);
for(ret = 0; ret < NUM_LEDS; ret++) {
DO_LED(xpd, ret, PRI_LED_ON);
msleep(20);
@@ -996,7 +973,9 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
priv->initialized = 1;
return 0;
err:
+#ifdef OLD_PROC
pri_proc_remove(xbus, xpd);
+#endif
XPD_ERR(xpd, "Failed initializing registers (%d)\n", ret);
return ret;
}
@@ -1008,7 +987,9 @@ static int PRI_card_remove(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
XPD_DBG(GENERAL, xpd, "\n");
+#ifdef OLD_PROC
pri_proc_remove(xbus, xpd);
+#endif
return 0;
}
@@ -1117,7 +1098,7 @@ static void dchan_state(xpd_t *xpd, bool up)
/*
* LED managment is done by the driver now:
- * - Turn constant ON RED/GREEN led to indicate NT/TE port
+ * - Turn constant ON RED/GREEN led to indicate MASTER/SLAVE port
* - Very fast "Double Blink" to indicate Layer1 alive (without D-Channel)
* - Constant blink (1/2 sec cycle) to indicate D-Channel alive.
*/
@@ -1133,12 +1114,12 @@ static void handle_leds(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(priv->is_nt) {
- which_led = NT_RED_LED;
- other_led = TE_GREEN_LED;
+ if(xpd->timing_priority == 0) {
+ which_led = TOP_RED_LED;
+ other_led = BOTTOM_GREEN_LED;
} else {
- which_led = TE_GREEN_LED;
- other_led = NT_RED_LED;
+ which_led = BOTTOM_GREEN_LED;
+ other_led = TOP_RED_LED;
}
ledstate = priv->ledstate[which_led];
timer_count = xpd->timer_count;
@@ -1214,7 +1195,7 @@ static int PRI_card_tick(xbus_t *xbus, xpd_t *xpd)
static int PRI_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long arg)
{
BUG_ON(!xpd);
- if(!TRANSPORT_RUNNING(xpd->xbus))
+ if(!XBUS_IS(xpd->xbus, READY))
return -ENODEV;
switch (cmd) {
case ZT_TONEDETECT:
@@ -1249,7 +1230,7 @@ static int pri_startup(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!TRANSPORT_RUNNING(xpd->xbus)) {
+ if(!XBUS_IS(xpd->xbus, READY)) {
XPD_DBG(GENERAL, xpd, "Startup called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -1270,7 +1251,7 @@ static int pri_shutdown(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!TRANSPORT_RUNNING(xpd->xbus)) {
+ if(!XBUS_IS(xpd->xbus, READY)) {
XPD_DBG(GENERAL, xpd, "Shutdown called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -1671,11 +1652,10 @@ static xproto_table_t PROTO_TABLE(PRI) = {
static bool pri_packet_is_valid(xpacket_t *pack)
{
- const xproto_entry_t *xe_nt = NULL;
- const xproto_entry_t *xe_te = NULL;
+ const xproto_entry_t *xe = NULL;
// DBG(GENERAL, "\n");
- xe_nt = xproto_card_entry(&PROTO_TABLE(PRI), XPACKET_OP(pack));
- return xe_nt != NULL || xe_te != NULL;
+ xe = xproto_card_entry(&PROTO_TABLE(PRI), XPACKET_OP(pack));
+ return xe != NULL;
}
static void pri_packet_dump(const char *msg, xpacket_t *pack)
@@ -1683,6 +1663,7 @@ static void pri_packet_dump(const char *msg, xpacket_t *pack)
DBG(GENERAL, "%s\n", msg);
}
/*------------------------- REGISTER Handling --------------------------*/
+#ifdef OLD_PROC
static int proc_pri_info_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
{
xpd_t *xpd = data;
@@ -1690,18 +1671,17 @@ static int proc_pri_info_write(struct file *file, const char __user *buffer, uns
char buf[MAX_PROC_WRITE];
char *p;
char *tok;
- static const char *msg = "PROC"; /* for logs */
int ret = 0;
bool got_localloop = 0;
bool got_nolocalloop = 0;
- bool got_te = 0;
- bool got_nt = 0;
bool got_e1 = 0;
bool got_t1 = 0;
bool got_j1 = 0;
if(!xpd)
return -ENODEV;
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] write to /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
priv = xpd->priv;
if(count >= MAX_PROC_WRITE) { /* leave room for null */
XPD_ERR(xpd, "write too long (%ld)\n", count);
@@ -1725,10 +1705,6 @@ static int proc_pri_info_write(struct file *file, const char __user *buffer, uns
got_localloop = 1;
else if(strnicmp(tok, "NOLOCALLOOP", 8) == 0)
got_nolocalloop = 1;
- else if(strnicmp(tok, "NT", 2) == 0)
- got_nt = 1;
- else if(strnicmp(tok, "TE", 2) == 0)
- got_te = 1;
else if(strnicmp(tok, "E1", 2) == 0)
got_e1 = 1;
else if(strnicmp(tok, "T1", 2) == 0)
@@ -1752,13 +1728,9 @@ static int proc_pri_info_write(struct file *file, const char __user *buffer, uns
return -EINVAL;
}
if(got_localloop)
- ret = set_localloop(msg, xpd, 1);
+ ret = set_localloop(xpd, 1);
if(got_nolocalloop)
- ret = set_localloop(msg, xpd, 0);
- if(got_nt)
- ret = set_nt(msg, xpd, 1);
- if(got_te)
- ret = set_nt(msg, xpd, 0);
+ ret = set_localloop(xpd, 0);
return (ret) ? ret : count;
}
@@ -1774,11 +1746,13 @@ static int proc_pri_info_read(char *page, char **start, off_t off, int count, in
DBG(PROC, "\n");
if(!xpd)
return -ENODEV;
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] read from /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
spin_lock_irqsave(&xpd->lock, flags);
priv = xpd->priv;
BUG_ON(!priv);
len += sprintf(page + len, "PRI: %s %s%s (deflaw=%d, dchan=%d)\n",
- (priv->is_nt) ? "NT" : "TE",
+ (priv->clock_source) ? "MASTER" : "SLAVE",
pri_protocol_name(priv->pri_protocol),
(priv->local_loopback) ? " LOCALLOOP" : "",
priv->deflaw, priv->dchan_num);
@@ -1836,11 +1810,368 @@ static int proc_pri_info_read(char *page, char **start, off_t off, int count, in
len = 0;
return len;
}
+#endif
+
+/*------------------------- sysfs stuff --------------------------------*/
+static DEVICE_ATTR_READER(pri_protocol_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ len += sprintf(buf, "%s\n", pri_protocol_name(priv->pri_protocol));
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR_WRITER(pri_protocol_store, dev, buf, count)
+{
+ xpd_t *xpd;
+ enum pri_protocol new_protocol = PRI_PROTO_0;
+ int i;
+ int ret;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(GENERAL, xpd, "%s\n", buf);
+ if(!xpd)
+ return -ENODEV;
+ if((i = strcspn(buf, " \r\n")) != 2) {
+ XPD_NOTICE(xpd,
+ "Protocol name '%s' has %d characters (should be 2). Ignored.\n",
+ buf, i);
+ return -EINVAL;
+ }
+ if(strnicmp(buf, "E1", 2) == 0)
+ new_protocol = PRI_PROTO_E1;
+ else if(strnicmp(buf, "T1", 2) == 0)
+ new_protocol = PRI_PROTO_T1;
+ else if(strnicmp(buf, "J1", 2) == 0)
+ new_protocol = PRI_PROTO_J1;
+ else {
+ XPD_NOTICE(xpd,
+ "Unknown PRI protocol '%s' (should be E1|T1|J1). Ignored.\n",
+ buf);
+ return -EINVAL;
+ }
+ ret = set_pri_proto(xpd, new_protocol);
+ return (ret < 0) ? ret : count;
+}
+
+static DEVICE_ATTR(pri_protocol, S_IRUGO | S_IWUSR, pri_protocol_show, pri_protocol_store);
+
+static DEVICE_ATTR_READER(pri_localloop_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ len += sprintf(buf, "%c\n",
+ (priv->local_loopback) ? 'Y' : 'N');
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR_WRITER(pri_localloop_store, dev, buf, count)
+{
+ xpd_t *xpd;
+ bool ll = 0;
+ int i;
+ int ret;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(GENERAL, xpd, "%s\n", buf);
+ if(!xpd)
+ return -ENODEV;
+ if((i = strcspn(buf, " \r\n")) != 1) {
+ XPD_NOTICE(xpd,
+ "Value '%s' has %d characters (should be 1). Ignored.\n",
+ buf, i);
+ return -EINVAL;
+ }
+ if(strchr("1Yy", buf[0]) != NULL)
+ ll = 1;
+ else if(strchr("0Nn", buf[0]) != NULL)
+ ll = 0;
+ else {
+ XPD_NOTICE(xpd,
+ "Unknown value '%s' (should be [1Yy]|[0Nn]). Ignored.\n",
+ buf);
+ return -EINVAL;
+ }
+ ret = set_localloop(xpd, ll);
+ return (ret < 0) ? ret : count;
+}
+
+static DEVICE_ATTR(pri_localloop, S_IRUGO | S_IWUSR, pri_localloop_show, pri_localloop_store);
+
+static DEVICE_ATTR_READER(pri_layer1_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ if(priv->poll_noreplies > 1)
+ len += sprintf(buf + len, "Unknown[%d]", priv->poll_noreplies);
+ else
+ len += sprintf(buf + len, "%-10s", ((priv->layer1_up) ? "UP" : "DOWN"));
+ len += sprintf(buf + len, "%d\n", priv->layer1_replies);
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(pri_layer1, S_IRUGO, pri_layer1_show, NULL);
+
+static DEVICE_ATTR_READER(pri_alarms_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+ const static struct {
+ byte bits;
+ const char *name;
+ } alarm_types[] = {
+ { REG_FRS0_LOS, "RED" },
+ { REG_FRS0_AIS, "BLUE" },
+ { REG_FRS0_RRA, "YELLOW" },
+ };
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ if(priv->poll_noreplies > 1)
+ len += sprintf(buf + len, "Unknown[%d]", priv->poll_noreplies);
+ else {
+ int i;
+
+ for(i = 0; i < ARRAY_SIZE(alarm_types); i++) {
+ if(priv->reg_frs0 & alarm_types[i].bits)
+ len += sprintf(buf + len, "%s ", alarm_types[i].name);
+ }
+ }
+ len += sprintf(buf + len, "\n");
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(pri_alarms, S_IRUGO, pri_alarms_show, NULL);
+
+static DEVICE_ATTR_READER(pri_cas_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ if(priv->is_cas) {
+ int i;
+
+ len += sprintf(buf + len,
+ "CAS: replies=%d\n", priv->cas_replies);
+ len += sprintf(buf + len, " CAS-TS: ");
+ for(i = 0; i < NUM_CAS_RS; i++) {
+ len += sprintf(buf + len, " %02X", priv->cas_ts_e[i]);
+ }
+ len += sprintf(buf + len, "\n");
+ len += sprintf(buf + len, " CAS-RS: ");
+ for(i = 0; i < NUM_CAS_RS; i++) {
+ len += sprintf(buf + len, " %02X", priv->cas_rs_e[i]);
+ }
+ len += sprintf(buf + len, "\n");
+ }
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(pri_cas, S_IRUGO, pri_cas_show, NULL);
+
+static DEVICE_ATTR_READER(pri_dchan_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ len += sprintf(buf + len, "D-Channel: TX=[%5d] (0x%02X) RX=[%5d] (0x%02X) ",
+ priv->dchan_tx_counter, priv->dchan_tx_sample,
+ priv->dchan_rx_counter, priv->dchan_rx_sample);
+ if(priv->dchan_alive) {
+ len += sprintf(buf + len, "(alive %d K-ticks)\n",
+ priv->dchan_alive_ticks/1000);
+ } else {
+ len += sprintf(buf + len, "(dead)\n");
+ }
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(pri_dchan, S_IRUGO, pri_dchan_show, NULL);
+
+static DEVICE_ATTR_READER(pri_clocking_show, dev, buf)
+{
+ xpd_t *xpd;
+ struct PRI_priv_data *priv;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ priv = xpd->priv;
+ BUG_ON(!priv);
+ spin_lock_irqsave(&xpd->lock, flags);
+ len += sprintf(buf + len, "%s\n", (priv->clock_source) ? "MASTER" : "SLAVE");
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR(pri_clocking, S_IRUGO, pri_clocking_show, NULL);
+
+
+static int pri_xpd_probe(struct device *dev)
+{
+ xpd_t *xpd;
+ int ret = 0;
+
+ xpd = dev_to_xpd(dev);
+ /* Is it our device? */
+ if(xpd->type != XPD_TYPE_PRI) {
+ XPD_ERR(xpd, "drop suggestion for %s (%d)\n",
+ dev->bus_id, xpd->type);
+ return -EINVAL;
+ }
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ ret = device_create_file(dev, &dev_attr_pri_protocol);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_protocol) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_protocol;
+ }
+ ret = device_create_file(dev, &dev_attr_pri_localloop);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_localloop) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_localloop;
+ }
+ ret = device_create_file(dev, &dev_attr_pri_layer1);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_layer1) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_layer1;
+ }
+ ret = device_create_file(dev, &dev_attr_pri_alarms);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_alarms) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_alarms;
+ }
+ ret = device_create_file(dev, &dev_attr_pri_cas);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_cas) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_cas;
+ }
+ ret = device_create_file(dev, &dev_attr_pri_dchan);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_dchan) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_dchan;
+ }
+ ret = device_create_file(dev, &dev_attr_pri_clocking);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_create_file(pri_clocking) failed: %d\n", __FUNCTION__, ret);
+ goto fail_pri_clocking;
+ }
+ return 0;
+fail_pri_clocking:
+ device_remove_file(dev, &dev_attr_pri_dchan);
+fail_pri_dchan:
+ device_remove_file(dev, &dev_attr_pri_cas);
+fail_pri_cas:
+ device_remove_file(dev, &dev_attr_pri_alarms);
+fail_pri_alarms:
+ device_remove_file(dev, &dev_attr_pri_layer1);
+fail_pri_layer1:
+ device_remove_file(dev, &dev_attr_pri_localloop);
+fail_pri_localloop:
+ device_remove_file(dev, &dev_attr_pri_protocol);
+fail_pri_protocol:
+ return ret;
+}
+
+static int pri_xpd_remove(struct device *dev)
+{
+ xpd_t *xpd;
+
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ device_remove_file(dev, &dev_attr_pri_clocking);
+ device_remove_file(dev, &dev_attr_pri_dchan);
+ device_remove_file(dev, &dev_attr_pri_cas);
+ device_remove_file(dev, &dev_attr_pri_alarms);
+ device_remove_file(dev, &dev_attr_pri_layer1);
+ device_remove_file(dev, &dev_attr_pri_localloop);
+ device_remove_file(dev, &dev_attr_pri_protocol);
+ return 0;
+}
+
+static struct xpd_driver pri_driver = {
+ .type = XPD_TYPE_PRI,
+ .driver = {
+ .name = "pri",
+#ifndef OLD_HOTPLUG_SUPPORT
+ .owner = THIS_MODULE,
+#endif
+ .probe = pri_xpd_probe,
+ .remove = pri_xpd_remove
+ }
+};
static int __init card_pri_startup(void)
{
- DBG(GENERAL, "\n");
+ int ret;
+ if((ret = xpd_driver_register(&pri_driver.driver)) < 0)
+ return ret;
INFO("revision %s\n", XPP_VERSION);
xproto_register(&PROTO_TABLE(PRI));
return 0;
@@ -1850,6 +2181,7 @@ static void __exit card_pri_cleanup(void)
{
DBG(GENERAL, "\n");
xproto_unregister(&PROTO_TABLE(PRI));
+ xpd_driver_unregister(&pri_driver.driver);
}
MODULE_DESCRIPTION("XPP PRI Card Driver");
diff --git a/kernel/xpp/firmwares/FPGA_1141.hex b/kernel/xpp/firmwares/FPGA_1141.hex
index 3ad4349..98a157e 100644
--- a/kernel/xpp/firmwares/FPGA_1141.hex
+++ b/kernel/xpp/firmwares/FPGA_1141.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1141.hex 5959 2008-07-24 16:42:49Z dima $
+# $Id: FPGA_1141.hex 6799 2009-03-01 18:57:05Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000380E0A006AD6FF4000380E0A006AD6FF4000380E0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111DE
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000A81A0A006AD6FF4000A81A0A006AD6FF4000A81A0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B51111551111551111551116A
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200001AA1111AA111001AA11100001AA1111AA11100001AA1111AA1111AA113
:80010000110000002552222552222F21F112122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F1121200002F21F112122F21F112121AA100
:80018000110025522225522200000000002552220000000025522225522200000000002552220000FFF9F99F9F7F78F8878700000000000000000000000000000000000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004F44D4
@@ -19,632 +19,635 @@
:8007000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F33333EAAEEE7F75F55757000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F44F444447F75F557573F31F11313000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444443F31F1131300CFC8F88C8CDFDBFBBDBD1F13F33105
:80078000310000DFDBFBBDBDDFDBFBBDBDDFDBFBBDBD000000004F44F444445F54F445451551110000008F8CFCC8C88F8FFFF8F83AA3334F44F444441F11F11111008F8CFCC8C88F8EFEE8E82AA22200008F8EFEE8E88F8EFEE8E88F8EFEE8E8000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCDFDEFEEDED1F12F221F8
:80080000214F44F444441F13F3313100CFCCFCCCCCDFDEFEEDED1F12F221210000DFDEFEEDEDDFDEFEEDEDDFDEFEEDED000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCCFCFFFFCFC3AA3334F44F444441F13F3313100CFCCFCCCCCCFCFFFFCFC3AA3330000CFCFFFFCFCCFCFFFFCFCCFCFFFFCFC0000000000000000AF
-:8008800000000000000000000000EFEAFAAEAE3F39F9939300004818000000000000000000000000000014000000000000000000000000D05E0A0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00808401000000000052
-:8009000000000000000000004001000000000000000000000000EDA5000000000000000000000000000000000000000000000000000000000000FFE40F28000014000048400128004840012800000028004800001082040000800400002148000010F2BA5E000000000000000000000000000000000000000000000000000000000000FF08
-:80098000E40F0000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024001002100140000001480020040818802880080880200003F6D07008084010000200100000000000000120000400100000000000014000000000050358084410128004840818102214860118002211ADD
-:800A000001148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400100240010000400128000014882800008088020000CFE40B0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000010020000800180010000000000BD
-:800A80000000000000000000F0A2E800002002000000100200000000004002000000004001280000208802000082280000F0B6FF000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000008001000000000000000000000000000000EFA50300000000000000000000000000009A
-:800B0000000000000000000000000000000000F04FFE00000000000000000000000000002100120000000000000080020000000000F056750000000000000000000024000000000000000010010000008200000088000000EFEE0E000000000000000000000000000000000000000000000000000020020000EF1C0400002200000000212A
-:800B80000000000000000000000000008002000000000000000000BF5E07000000000000000000000000000000000012000000000000000000000000DBA900001200004240020000000000004002000000100290210028000000000000002024088F180B0000000000000000000000000000000000180000000000000000000000008FC988
-:800C00000600200100200424000000000000002400000000210026012002000000000000004288F07E7800000000001A01000012002004008008A01100110000000000000000000000000022F0BC93000000000000000028000000000000000000000000000000000000000000E03B0F0000000000000000000000000000008002000000F7
-:800C800000000000000000000000AFB10426010014402121012041010024000000201481022400000022000020028004000080020000005E320000000020010000000000000040014002200200000000002004000000000000F07E1A601200400114120020410100240000002004280000000022000020020000000028000000F04CAA2008
-:800D000002002A01000000000020082004000000000080012200901248180000822400000048000067D110011601118022240200142124602248B04208808208002100248248200420020088004022040025218804200228E0F50122C011C021004228000040022400480022000021000048120000002008001002001488000000F02AC198
-:800D8000400100182002000011210028C82482420088000000248800422220422221840100200C2124004820240222D0F109004280840100106126C042480042122482420012200828800C0029220C28C842802202220020022800224002001B5500202402A042222521012029020021002414001A028200480018220022214800820000A0
-:800E00000022001400422400428F860418001C0100800440018820A2410080820800142002220000000028004002000042205812000000F01FF12001A012481862281C04C043122C2484E2242184412292410022118082228604182221C222A08248808A02000042A02800000080F413860000110000211214288882000000888200000076
-:800E80000082008002302200001082020000100228480000BB610012402184010025010042422728A028282422000000A02120043022288800003288006242220088202202880024F0A6DC1400112840012480444122111202182480048848002220820800200880022C88082C020020140210028602100220F89B9F80A42428008084213B
-:800F00000400000000182828480042000000420000004200006220086800228220040010F26453001113011424121C024622142114410320240448009012A08200008082020048A024002A08902240024A123222A0826A08882188FF1B0948140048D02284621500002082440200006024A02448A22004424A022084021280044848200C8B
-:800F800048C2218AA64800002222F0F57F00000021281100142480988288881A0A248088082490822006C28282828622080088200840020000001421800A20F4655180820200100150224A88A4852986C41258A016290442480080082C2808004248C082488848212A0424C2208C088A042482C8110021F0C3E10080820214100214185658
-:801000000182180029C482200400428A8122082091A248200200002460262C220200884002218026021C02ADCF1422801441022824140010C121141A04160222825022A018214A8884840840018002484820080088105222282008002121822908FFDE4681A2122062243480110146B151C491273C144A016AA6A44AB46202482984C4426D
-:801080002A0482C81AA4C4282AA642482E2280B442A8184602460224A0E48823A48A2396A22C98E188883C9A42FB6920D611E411922148211B6523D212459243144A94C14AA5892391823E522F2282ACCC0027242B1A4AA2622482422328B28288A28882A0856821AA82A8422DE28AEA24582282AEC229E2282AB8E264262B22822641F263
-:80110000DF9B808432211411197122D23162243F1484497212023F22D822E424E9291102004A488288028AA8F62028A24C6028220082826229A8662922BE42A4423042602440028220028AB8EE42010014000012000020089A842209008242204422C482422C082C082E8242260288C0824002220000808204008220083E9EF041611F13EA
-:80118000E313A3222CF813131AB112F1424327243F2DFD53523F3DFC42433F3DB592A1112BD52F25F762622BAA42C22B44CE822F2434222E222F2EFE82C22F25A1C42B462F24BC42EE26F6A2A225A2992BEE2AA24C4A84A4CE2F2CBCC2A888B0C2FCC2C22BCCEAAEEA2F186428AA22BAC2B445051F12F271713AF321212CF813133F3153E5
-:80120000332553333F2DFD53523F3FFE42423F35F712121E122F25F352522F26F6E2A223042B542F2CF842D2216AA2AA8E822F25F5414123F642432F22B262A6EA249AFDC2C22B444A2444E226F662622BEE28A044EEE22BCE2F2CBC821C22B822A22A2B448F4546F161611F13E713F321211F3454331F1444B252F542423F1DED25F4D38A
-:80128000E33F2CFCD3D22B99DAED2DFDF2D26E622BEE2BCC8AAC54CAA8E62E422B62EAEE28ACDD2F1CEE2EAEEC8EA22BEEAA4CA2992BEEEEE22BCC2F24B462A4CEEABEE2BE820A2BCC2BAA2F2EEC22E226F6C2E22B882BAAAAE82C7CDC4DF161611F12F6212117121F34F413131F17F711133F35F543433F1D69213F1DFE83C23F27F91288
-:80130000922BCDFE122F2DF842622BEE2BCC4EC24AA4CC7AE622B642E626FEC2C2DAFDC261EEA21F2EB6E2A6EEAE8225A2952BEEEEE22BC42F24F262622F26B662BEE21EA2444ABCE2BE62FCA2A22F26FE62E32B882AEA2AEA2CFC8ED4002002008044814402248A44214922098022080021108212229482422908290800218008228A045B
-:8013800082248A44022C0280048022F8F4F64081C21111462261324002100150224800281082040022008008226022602200828006682440820248800422248002007FF10B1CB411021B2146B111324219B24291212B9419B24219B14229F34291322F142BD212A9421CE922C4812E4216E12264192ED296C1429AE222B491E222B4914296
-:80140000B291A2841B292B141B282B8619B24298212B84112B84222BA4222B842229A842882E42FD7180B41186B41122A42123B41122A4212991614A32912BB4B22F14A9491CA9422D112B4A1CE92245E12269152E8256A11296C1D19E212EC213A9C21B61241B614AB191A294192216918219B2429A212B84A22B24A223249A822B4A8865
-:8014800026923F00824800000000120080010000100200000000140000480000000000008008000014147D7500400116812202188024862104800440820612420000481A042082242282015022242C64242C8202202404884002108202227F6E0F1334B100481031821414000029840228880028802A820200282242272120012A98128AC3
-:80150000019A022220A8244800904222A2882028641CF03B4C30411B1E119051281912821101682A01298482848208258282A169288A020078221944022828F260299022482D62282928046200212890827082A2248681F2713D000000008814200480040000A024000000200440A22148120029012019028022820448A048200A00200467
-:801580005FFE0D14281411144003000000240000128822000000004221422A01224002242800248A32220000802208800228B0CD050012221837261220B1124421641160144820022004420042250280022821290424242200422C81042014020021242042028088F8FD3E0080810221291182110242004821000082000050220028422CD5
-:80160000022B2560222400A042184022B22214020040822802230200FF380A112811111CB14142012045011C01114280021848224200480000248004008012420224428008004002280000A028888FA3014280045821E01402421400801401002542020023012C23C42212682081922248208104282220042824008A2226280428244A0283
-:80168000F0BFC100208501148061352028042240820412400280882423840180084800100248008246028024A648224888008A04252208242EF3200100004002809421200400920012420000000000000080022811100226820800240000428800F0B6E380011212181420222564182601424211211A8811222104888022820521E8800158
-:80170000210000221428214826A2824E220082290C200829880E244FD70A48006024001B41250342480000420010024022045221281840611422282C042A01808288140242A0842024828824A44200005B7C00800100C0112480011111400240021800000000000010820222210000212A28CC2200210000002120F88B963021141160229F
-:8017800013052084014823160200000000002034422002C0212890421800101202200448882100A8C268486280023FD641810100004880814401124814000000000012000030211411282280228202244002200C21C28A32424A62280080022E780030111C1121044824114225018004281041029022420029020000000021208484460166
-:8018000048C8250120080025022A188208A8EF190842008A0440212144212422042400002C0100008004220048A04210028092422248008002882002882488242800212F6C0F141400400140010013012110021821004082210440024042410220C24240422202212044220421208208428002F07CD50080822115224222622100108204C2
-:8018800000000048482424704202282D221124002490420000800621002810924280020048226FDA44212108140046C14118482419011C440100800100290100200100261201200480021002282A280880A82824000040032FC20C20810413290100C01110824202002880833442C03280088004281480028004214822223C0280022810E7
-:80190000022848238A883882149F960A60191501112B44281A11314115731291131714242421C0122901484880A2412A840420828442122222E42212E222A22222241C34C23188461282C4A2222B484E822B842394821CB822F86452B0212108429613D11124B412F212512394211E63480000118002622301242512022E422411C02122C7
-:80198000242D12A0222934421902242E828AAE2C828882236A242E822B628E6220C86128FF1B44E11114A1311F11A1161E11421D414E52A0512C2414F2434121228062212B11004E4224214246622328E03262223B422CB24282024622C442272429B2628226E6229482242F22082BE84A2228A2A2222662289F5A014A8281026824283434
-:801A00001A428206123400222422202324022302224221100221002002800411269241A04824000048A048A048288A043F3E0D171A367111E1127221E327E534F463616E721F12062AB2419542212F2656222D222B312F22F222122AA2222E2226E226F66222242B336AE622F262622E224E4327222CB212E12151224682A446257342C1A9
-:801A8000E23F3CBC42ACCE8E822B8829F8C2822DE28AE82A76E2A28C222BEE5B6730312AA4233AA7127AE126F663314AD511E131F122223F265721242F26F622222D222F21F33232272221B02233222F2C5C222F26BA12A1442AF261612B222F34762252222F25F512122592221D211F14543225F183A12F24BC42E42C5E222BA826B282DF
-:801B000088C2422E222B2E2B844E416EC2C90F1B641AF43121121F15F653513F17F741432B553F25B56252332B752F24F443432F24B422023E12272229B342042E122D224EC22D4225B232E326B622E236F622226E4227222D222D622552222552133F16143223A6F2C3C32F28BEC2EE28A8888AE828B88288A88C2BC82BAAEAEC28F8A656
-:801B80002AB0C1F6111117111F17F341733F35B153F571733F37D733F1723135F3537315F243432F2616023E122F23B112A3442E222E4229F242C22F22F2A2622F21F162622F22F262432B222F267622D222D2227622522227242D622B4625B263F2A1E32F2CF442422F2CBC82E82A58222F2CD822F642222CB882ACA2AEA14EC2DF830438
-:801C00001C01001C011C0114483448144800002001000020040000200200230226824402228A6422000082284828800200E7FD20122102223062E0122121061811460228800229024A0228242880220280420224400200002400482C082C0824C082484200489F5E0B481B21B01122B41132421B212F1491212B941B612B94112F1429F248
-:801C8000429113F24291322D912AC4912E421CE82264152E4296E12264192CA4292CB4D1C2421B29241B29421B6927241B2823B481F6428219B64218B142A8422B84AAB442A84229A842882E422EC520B211A4521361221B416632116612A1941B612F248BB242092F343B114EB1122DB129D412CB521CDB22E811EA2264192B1296D13285
-:801D0000A4292D421B292CB481C4121B69429A32428223A4282998214A1A91A2222B84A22B84A223348242A6F27CF90082000000000080020000001002008800000000000000000000800200000040017F420D8A641119212124010016213112424601888008484200200212004880220280420240A2212100224E22288220084290E20097
-:801D80002860122F6107208882482286462101B0210C6014401201A0210048100211002827241823820128141301008034C3880040E12C22A228602842C041826FE80848D23601486AA142149011181B92623041000042160220018212004230610012284A129211C02200482F14A242212A0888460224E8242C24C24188BFA10310019228
-:801E0000240080012448904120483281004A028084120211002825A22123020014402201008288280014A24A220A820020F259C700111001200262282A11411101198402288022011180048002100218000000C01250228200000024820000005F6E03198291211219B222859543123B411C84018008901318802424024220020029A221BA
-:801E8000228016022303122880442124A8843042822C248884348248A042424F660719C21119128192121E2211382D114A1301118084122202624222200422200220022014022A01208281448384280421200429088248A024487FA50500801181268424A4241418112048011981012001148004003022232182210210021840022182808D
-:801F0000084888248848482100005BF6140042190100184220C42160128001002436220420418122860148212094516026002084048621A2482A0822488823028800004AF2891D20034280810126031200A0424813420280022002221220488204421211284200484228501220044200280000502288008F5A080000480000211800242024
-:801F800084840100008848C01100120010022C0110010080040090C2004800004888B0950D1A0220A114126012272480C521C043482A0100222842228210B12101162204481829E41482D5220214482A24041CA842880042488842200821C288B0750D0010010012200100001964241200291102A024002A04184221001200000024114230
-:8020000020A46824820029020000E022F472C1000012200216410122238281012122C0221002521800802201000020220390222C02802406000080084210A2422A04FFEC0310010031182902334211A1424001200120022302150224502118002490111424002084A22421100248000042002008F0E1D22004004824682411244002184043
-:8020800002289043124200231211821402002100182904281C040014828220084042022C88042022B8F3411101902180818121014200111200E01124022A012A0448008064120046021111400220060090212114C8626210020088F0CB9E0040011440410100211480312248002C0328124848108104100242002800216200428084082482
-:80210000422220240280280448CFF14D0180260246022440A2141121200421141C02222052122142234111424101214222101301002904100219180121100220984210025EB5802204408241022821110011148003001C0142400290221D3218001002482440418204008014228442018004002A2804CF6F06111290412002281001002498
-:8021800000C023A041A01420428181042826A112A0610000114880028A828408101121840688214A2A14423122AF6A0E4826810646611442A0252220428102002044011012A15214881100804401160122485021002511135222242C88C6812128214A1802308286F16B63141CB21112511115F153623952333B12267243922135816121A1
-:802200002223022F12E21161131A24F74162236434272146D212E3236112242D4210C34231003F240468283724292C1843125223282F2AC44223FCC242A0848EC12F22A4B9206414A0224214523A41110127121A36113F14118241A1452722216A8145B1218601152143012025C4311D21104122E22614622448242092C31964186AA424EC
-:80228000622C24B2422C48A1884F130719042A82C5422AC152285E222D212E51244001244AB23152211B6438282CA212343964142B621532431B214828292421E33257321B421C922266B2A14421FE42823C681C46A1C62430828888242AA626B07B0342000000141280040012280012301142120010210428002084012250122002268150
-:80230000048280048A8402A0483482288242BFC206481F13F321211F12E22AF2222225F223223F26F422223B57255222311F2434222F25F533311F17A3262B666AA6222F27F623632F24F412122F327A12D313F211332F24F472722F34F422222F2674435313706272427262F2C2822B442B4C2BC415F14341CABCC1AE462B242F2EAACCE9
-:802380006AAECCCA84BAE2F2B45D14F051511F12A222EE233F36F223232F22F262632F22B27315F323233D115E5225F252523F13F371731F26F372722B666AF652722F32F6C3C22F21F122A22F22F223211F31F143432F27F742433F22F243423F36541360146662242F2EF842414AF442423F18F8E3E1CEC21BEC4A3442EEA28AF8622186
-:802400004E422B64A022EFFE4951113AF721211F12A2441F32A2223B661F27F721217E723F24D62392125AB522F252723B231F17F662713F17B722A2356AF763614EC31F15E122D21162121F33F142417A37421F12F241611D431553331962242F24F281833B442F24B44254313F1CFAC1C14AA44442AEA22B4C6EE22BCC2B442AE426F686
-:8024800033E81419F411511F127221A1441F13F221216E616E711F12F271733F14D633D213F151512F22F272723F11F271613F16F373512B226E721F16E712F641C11F15F1A1211F12F221211F31F142417AB741F431314AD41146533337144E2227241F3CDA13F4C2422BC415B3C3FEC1C31F1624A624EEA223FCE2A22BCC23AEC4EE62C5
-:802500005F3E0C002601142022210226834401240012281A0400110000100100001C0114200226022448204803002C0224200428F0631160120000484E111100420011180013412322248102008044911100420022111440020080D422084E81132804218088048220F879C180B411021B214AB11132421B212F1491212B941B612B941B56
-:80258000412B94222F1429F34291322F14A9431CE922C4812E4256E122641D2E4296C142DAC2421B292E521B292E121B29621B2923B68132621B682B8619B242B881B442A84A2BA4A22F24A84229A84AA8AE424FAE04581B6190616E12137142827242B211B22239112F249B214A28D2322AE21438212938222F14C8524EA13F22AD812DFA
-:8026000012DE2129E41DD232E519B222318125B291D622A16927141B692384F62281112B861994A211292232422A14228AB822A4842CF4B143008200002001000028000000002100800800001400000000000000000000000014F04399000080042905164141A2421E41120010F112221280848208243021181903000020728201212C0264
-:8026800022221100144214882C022422202404879D203181881A020012002913411201B02204424622222281262404803242214A0242489091208124811401888280044A0848B0820614C02162CFA40C18130C284880841111A1214E212E1118400234F04212260232BA048A142202561132612004E01412612148182964129081001B426F
-:80270000A0488046A248294283E41204CF460E008212002901185022602411004A024A03A042004200111A322200004220998200280022800880442148022800002AF49FCF60120040012412A0612041A2411811181341222124011100108212020000245012000048224001468144024200008A0424CF5F0D2082032A61171B144813113A
-:80278000C221C6022420842288022084042400121A2401184878482816011823222202A042282B8690821482288A24D422A2242848885F810A1382020019B11134121421224A115222181384611822180040014022E122240120A424404213C11222222842002611724182482288A2484890624A082CF8CC9500200319230648121A162174
-:80280000081A04202201214252420021001800182081848201000080A224A06820140142408202224850B9002064191A0248110020022601800C20322200282B8213B192860228A01200290242882004482581024A0882A0282100008028021FFA0100582842001214808884242681810100162244210852824221421C858414C31168003D
-:80288000480082002840822484A28690418A22460280FC9C8980012008002E4200000048222128128004004200200200120024001C02002211426012200880440324880022BFE50E1880C1114A02481D62142028061C24012389226122724280A88434786821281621815122198116222802A0841C322162422683AC48A02448242A2814BF
-:8029000002282AF8FC190000281800120000422024230400001426828204808224A4424280020011424002008800C08282800422888280F4A318000022801442224181612424C012003C042002800800282480824222C82222211E2228222722182142008A240C200800008282F045771432142081C321004A228284011C088A0190818A89
-:8029800002882642014220A1411200285240C1220090111430821C8A82120111A02442002042021FFD05111021045813344140021302241130421800292122422248020028236222C022808881212101104281988282252284241A0225A2288800F056D48082021113160200210000F0228120848148018240414142034215022450216894
-:802A00001041A224208402201421022908886242102288A442DFCF08121A0200181A1402100229348223243212282918820811222D822CC11100244002244224200834528A4481322280044001100248808428F4F58B144214182041011C1102195C12381C02601225011631221E418084012088828501003860224818482226210210C325
-:802A80002288002C220221288800F0AE8F008004C02220C221005A6A181820212848A12480021C8921022CA1483111C828581413244102001200E024021440028A0442800222B0E10120081111801102211400A08360228848141880010000111C022118800448C04182240010036024482384046028112322C221228B9A100119246124AC
-:802B0000108195111C0221111A124121049012111421D02141C1822E412A010014220011192492131C844292216018250119022124004A083042F0B9DEA0138A0211382B6518582A51214AAC522CA8982B812E314E114888467222E11A273281256112F032412F31A1533D2123085A3C313F14B2617331D221B372C2318AF52222481CA8FA
-:802B800048221442C2AAAAC2A04413A2822A6C12287F42021C36B114421B461722271533F112632D21233153271635E234A1892BE2271435F2A2A11A0A183EC217282721A038F042233642A2222E324E21AE4216921223C35237252602242B283F26C8613DE22CC44270C2B242D422C88282828E8126F2AE5D14111413E11361311CD1213B
-:802C0000E434122152313C9A111691213542F2A192D6B1119111118E2125813841273115A26E11A0622721212D42106218481D812AF45321113F127A21C2213F2C281C53132D42282C022B6C2982A2642B441FD90A2002002A81040020220100130948208812010019819211CA028218C220E81221C811822282140082A0481448800440D5
-:802C8000012028E4E54FF171411F11F311111B411BC6171417141F32561315B2A1FAB1A31F1DFD81833F1464315AE536E614541225E11EA439EEE28E822E212B114E53CAAC763B33CABCD2ED1CF533718ABCF29A119A92D13F2CBE42B4C2F621A22F28F242C23F28B263F442432F247462D22258222F2C682423A84C422E423F2C47A14493
-:802D00005A45F111411F35753252231F32523125F2A1A33F3AFA61731F28E824FC2282CED22F27E32191828E932B5D9AF1F2F18E832BA227212F24ACDC6AF6B3B23F14F4D2E22F1EF6B3F239F6C2C22F28F882222BA21F3CEC3CFCC2622EA23D223F34D623B2E3E624F4424227262F285A222F2CF8E322272A2B66AAB222F24B23141F1484
-:802D8000F411511F1111F1D171173135E1221253211BAA9E82DEF11F38F843411E831F1DED26F641C12F11F992912F1CFC91911F2E7F81E312FA13114E513F14F6F2C12F11E114B4528FBB3283F4A3E11F2AF823211B4C3F2CBEE37E8391811521F421A22CF643433B446A3462A08C242B222BE64072A8057AA57130411F15B5127242E264
-:802E000022C6122D221F3EFA92825E728E824ED23F33FAD1D33F36F641433BD71F19F9F3D11F39BBE1FF81833F12F213133F3CF553433F1CF813132F1CFC52F239FB33733F18FE33633F32F131231F1AF371621F26F6A3231F127881F261E11F12E234FE41433F14A446EA4EA28C2F2632222B466E822AF6FD68A01200E012012021022052
-:802E8000089200A0413011200813080000982002220020022A012A81048214823400004022880242F04E1B000040A3414200208204008032812002221882004082B2210488800C2E81800929084E81808802284220044A0A20082288F03D5AA0421B21221B21621B212F2491612F24B111F6629319F24292112F2429F24293222F3429D2CF
-:802F000012A9421CEB22E414F8224216F12242DE212E529E212D42DAD222B491F222421B292D121B296E121B2927241B2823B481B642B881B242B881B442A8422B842AB4422A9282AAA4842E42DF950F141AC6111B4142282F3481E234A1284E93124EA3E0343BB14622E234A94A4E113B422989E114B8238DD8232109D6D112E418921289
-:802F80001B2D2B429A54329A66361B4946A2284693614E821986AA282523C282224AAA4229B8229482AAF4826F0082000014000000000000001002008800004001000000000000000000000050127084011921010080043216820212802108800512288882222240C2123812212A01321818002100190220280A800400800428008EA72011
-:80300000240A1981C412B0119242111B48192118218852221922D8220448122CC2412C04A082004225221282825A12212A240B00282120048842234CA1422400142AB41F041B14E2901148168294114870E241210B922C02288A4482A124182349211A022C89023374320223015A4A42A2422A0114C02282A22A048246021162248042B11C
-:8030800022D4160E20010000282B1213011210018224112C81048068224A8204242818120022282A01250120082800000042A084004800001FE30D0022C01140020042400124484A31212813098200282AA424A024214288800800141221282E82282248420040022008484200F0FAB910819111002C110114211D22C824421CA528248098
-:803100008404A021A8230CB042021D22268202272416A22C2A21028A0211196428A02822142B842B4800688A3482824A8828F89A5D408191311001312110120111212420D1128286048232802626B222A4242622260A2B4825A248181418230A1318622AA02440817C420220AC482B4882888888AD39000020810110014E22C8803451E217
-:8031800042001B1800A08229084840424102001222282200282219064282222480082002802404F0D82400800428A0421922010000280048111324A8281C0142192288020068222800230600A048808284A8248280328200880000829EE2800646E112218401A0242A2168149280E22228088062210026828A318200423400111B124242AA
-:803200008224800110420200A248224082042400244F4504180000001001000012181002004220041001222122800800006022888042018018120290424A0866228C08429F720D1A041413A32418681992512A21182109183288230419024A0A4E22A83C122102234423240A13211402242682880420042C622800272A424229A82421001A
-:8032800046F2DFA6200200000022004800201802144898C01120040028802202222880820820818872220129A8482028042028044A2808821F8E0320444181631229264281246838C041293A229021AA042128A21F28843C4122908124000020C8418820424201304242488200244A882262288800601990410018003012200212C8802405
-:80330000A182881142141423051423010014802688848125C121824200200221001100002304229042247F2D0B2811802204224631423448000086021082A2820011421122A60242202202A8248800142814602468A0424641820424002002824AF2D193002820148135114001118A12811201488820214111812162228001308124C01206
-:8033800048804222822288249222008221213022002223860448F022850000002110821202002180022123948280288246114243E122042C04246824242470210211C222002811002200A08400425012CFF90518181021141102502182112113384221294801908248C82B18C0A28810D2212C682840222882C81200238A032122231C2253
-:8034000082128234822821100288245FDE0714282E411818200480490280014228B091C261111216018800001001A8821212181C08821821210020022813880842008008F019D900002214221124488214288E4188114082028082020048C0616A18022004003C0282142022240800825021482C240423220820F2F1EA8011810410021132
-:803480002C820221902288484800332121110221C082408149A21434882C220648242C0C90824220928235C22148820080048A1222F4CE65F01121111C8243A2142813B121C681197822E22888888CB2427A81D322A5821CAA112E831B964AC4412F1232A31932818E4129342229B8829DE22F3A2539833F16F883821B43214AA8462A98CE
-:80350000211D41259341884602426A24884421F2BA7414181E6111111AF121222F31346246D122F182411B89421572C281E82AB422AA881D423B111F12BA4161382672A30248AEC24E42314E12E029025E1219D233088A266224AE2222214E2266E2221821A42C2123E4220E2BE2E024A8448E9520240276F161412531613425B2A146C2D9
-:80358000213D412F18D521F27242001F16F25231A2489AA6413F18A834241E2327142D912CA82ACEA24AE42322A281222EA2241AF28221482D622C92422BC823082F32D822A4C82E62212F2802AAA8482CF2B67D00000018481848188081848184A148184820088200421112208128210288200226011C08224822400100208802200820CF
-:80360000F4D97414117E31F0212117321F33F371711F26B752E535B332FB21311F35F551931F15BFE2BF72E725F5C342DED23F11A3FE1AE326F281822AF532322F27E729A1493F24B582B982F8D2D32B5D2B99331C11B2C2A4112BC82F28BA426824CAB8A2B2A258211F28F8C2822BCC24CEC22F24BCE2AC66E026B459031B237E711B2279
-:803680002E2126E223F352521F24E535E53CF821A12F2AFBD2F22724CEE1CEF2FEF25EF21F2EEE3DED3BBBF3FFB1F12F37BE63AA873B223F16F491D32F11F4C2D13F3EBFB2FB42C12B7F2BDD3F3CB48258322F2CEC3AB882BE82CAE22D22CEE22F12E22A5A231F2CAC8CCEC227248AEC26EC2AB862062B46CDA3141B321F130715F12123B9
-:803700001F37F771711F27B643E534F682823F13FAC1F31F3CFC81C12B232B324EC32F3DED27A7232F17E713A7721F18D8115C122F36E63BA25C3B442F15B482BEB2BFF2B752B482AE1139F263613B773F14F4E2A22B844E22EABAE3F283A134CEC227282BCC2CE42CFCC2E22BCE2B66882E42CF39061B331F13B721A2232E222E224E639A
-:803780001F21F24153DEF31F18F832A22F3CED25A5CE2F25F4A2B21F36FEB1F31F37F7B1B13B771F3BEF3AFFE3E33F16F423212B571F3FFCC3D13F1CFC72612BFB3BC82B7F2B753F39FF93913D213F16F6E3E13F16B6E2EA24FE4222CEE23F1EF681A335B3C1AC88CEC22F26A4CCEAAE8A2B66246AE492041840012248224822200200245B
-:803800008A0448B091843291421142001110012A0888A092800100982082240200148A0400800200CFAB0600A02142A0144081440280848804400120030021004200208488021122822428428A0220048800002A048220081C948FC0411B21B01122B411F242121B612F24B111F642911B612B941B412B94BAF442933AF44291AAD412A955
-:803880004A1CE922E414E82264112E5296F1225296E122AD292CB591E222BC917222B29122B491F262821B28272619F6428219F2428219B44228FA42A2222BA4A229A8424AE82AF4A3E260121B41181A663428341942A22846A1682D23281C28D8322AC823A24E9123DA12E928E51492914A9A421CB2226C1C2DC18691421B2D29BC1194A4
-:80390000C29227149AF642831348B281E42488C2A31B484EA2224E22824E822A2434222BA42A74D10200000000000000000000002180010000001400000000000000000000000021F087C910B1210120C41116828496414240110248801621081220040000000000602228B0222422884A01882420282402224A8298826820F46F13141236
-:80398000001212100121222388244822C8231022CC22A2132422D21282041D22C82AA48280082581388124008248144282601648308182C2202822021C024F2E02192104800412272460248A04A603231811028E41A622B84181F2324211C26022884210012414E03408258284889CA11C04824E212B42C0C18848282AAC822AA842222D21
-:803A000042EF2507B0110212181341016219024800A042242A0480020028001142228A02820088282220820200820020082288001002005F6F09260114121800139112128004001A248484022B2400130223020000228088228202282C082400820042D02208428022A22400222F2409183818281CC2311E63C0222A849C931391422C0421
-:803A800082218829641880032150121226E229826228322F21221153213823382272282E42346288AA3483008A22882828084828483FCF0119A312141820E11641313242D0120429044A01200823082828242221186021282A8831A225424183B2829282629062244888888A048882008088828482F2AD3C008081B2113221301224324A03
-:803B000028C9112014E224282492424E21204111021480B22208242218382222126022122810830A4A12032123A284882A28220420F4C9E3003041182601201111B281A4425826A241244280486228C216018A0432922821002482381AB4220148802804A024882A842C8AA4A400680000884FE308004211C0616034A014181221800220A2
-:803B800002424822502220248802421480148104808887019062000021225022402288040024CFA80D00320000220028140000206411000080021904001A882608200A00208202190200802408A084004800F08EF114003816611246014E331423A1421E62408201232496914882621810021B12122C22B411A82448213AE4210688281845
-:803C00002AA82462192202100286220842280000F08189004001800200481C19A11420040000232448014A8A24240200208808881A02120024004888684AA848422A1422B84288240420E8A34601C220041662218006002602241A02881E41D022011400310014290110C2121221C0128021A2215012002008A0828882000028F0917E2074
-:803C800002108181C2211180110211581811141901250110C28160288800102209824001284602134183021123E21432221021140229042100825FC60DA02820D1211311512290811E231982552311272826021003A23021272C114A41A2213B42481200003214243448212146912210024011022110026800AF75082211208804001800A1
-:803D00002C1881024681E521248201421E8220020042828E122028651C13011AA421001A048034818A84A42821C8422882482008501214002822421222A01212424800008002422880480228224A1A0229088800224820210428008088020000882820842462147F2A0811001200A01435020080A414100242000022003411001A221822D8
-:803D80009822004811221C02002200211502222982020022C8F0313F800411002818804401181816012810012442192106000014180042213C88042C0218241C4482024A021129240482000000E0E704202A424142816412A04219C23348100322241C8286226A164226819422A024130A422C0112282211281C120228268244128108A835
-:803E00000080C442C82004A79B3081111C0480148204301248802A0211481840311123014A2128152121E4141242818404198104A0411081445112603428102206230A2018023F6644B121F2812170110116E121D13104141AF111114643C3326E22129661272511B242A8381511728243C2424817382F26E82981E82DE414842433113E66
-:803E80001217131E12171390233366244EA24EE3881BA4888888E8242988CC21E084031CA44A2E21481B74192196327AF112E2336622182B1D23D4127823612419622216A1211F27EC2AE23684F8526113F831235AE219147292028A792391212E233984F242612C772182C4231B882501150227266AF42222222B4448EAA284822FE50AF0
-:803F000000113816F222623D21423996111CB242BE13964117111381B623D512B541A5621F1A4181A4281B422A61122B142BD238C84829F913221AA21418282F2431212394226683F422211B4233384225A3682B2882230C42A0422C3453200420020022A082488880888408A8801A0100114A12A12400110000422601268104400180040F
-:803F8000821448200882002028F4692FB08124021D211F34B8B3B243B44224E428F892B325B38238831B382B468AEC2AF4C341DAA9DDCAAC8A2BC62CE82A14E222F492932F2BF182822F2CB8D2ED3CF4E3A21B441AA11120D43232226E4220A4CC2BCCCABCC2ACCCEAE424F442C22B8C242BC82A0E48FF2B4891616A56111F1272C1F191C4
-:80400000112D223F33A7351F32F313732BEECEB2372817383F3EFCA1C1AE723F1DB5B3FBB2922BAA1F1AB831DF22FEA37229F421632F39F533929AF9D1C3DED2DE43AEA24AA6513E133E3246F363233B222B6625D333B2C2FCC3813B642F24F4C2C12B222F2CB442ACCC242F28BC22AE822F24F46DCB14681D6119F211211F14B463B643DE
-:80408000B662A6751F17E613E328F843213B851AB1E2DF31F722D22F37F572733F17F563E1AE91EEF11F38EA16FC31116AF4A3D32F39F5B3B32F3DF8D2D22F2CF4A3E34AF411511F2151333B6439B241F4634337241F1CF8C1C129D213F2C1C33F2CBC227C22F242C22B8C242B882BE2E82C9C3C148AD611B621F221216AB671F711322F4E
-:8041000022E625F7F3F33F17F761633F3DF953821F35F46273EEF33F16EF17F721233F16F463F12E911F1AFFC3E33F37FE73732F26F6B3733F33FFB1B3DE432F2DFD93823F3FFF63611D111F33F333311F37F673623B643F16F643213BAC3F2CFE83A33B441F34F4C3C32F26F622A22F26F6E28225B2C2B862EE26EE24DC150B00003C01C4
-:804180008044A1412400121411241301124213080000181002292184012A01002A01224824483482244824008A44024280024BFF401101001B210018118811988028810A4A2891821AA424820012601C2A210482211311022E1200F0421110820619220420D2222822040040F122B580B411021B21421B21272419B24291212B9419F24249
-:8042000092112F2429F24291222F1429D212A9421CE922C4812F2264112E4296E12264192CA4292CB491E222BC9162221B29421B2923B481324219B242B881B24218B14228BA4228BA422892822A84E822F469E120B21124B21126B411726292212F2691216A19D1229B612F2429F24291222F143B2129BB22D412D921A5B43BC25AFA2248
-:80428000429E211F2224C9C39E212C34512E829AC6439246B19136428A724291212998612BA4D012AA422B84222B842229B8A23442AE425B230082000020080000280000000021800188008100140000480000400200000000004810029F830712001812360181241212250211111842181822422842248A42128104238108236421001059
-:80430000218122012154B989048004260228800182008FD201448E34194221582824190B86228872112289E8A2282214828502802284428CB27228D42281C128482E92281B8210823422221303002AA484812C2811842488220885C5622B2600CE241C32111236028830922B1829F2221116018D9220045800482333828A521C6E829842C5
-:8043800029592184482D92284EA11421482A81321344398924220610022882382C0820F27FF790141200881548F21128000024821C28A224122921A22422004A4202A024290129A124182800206122002814848084C8488832258404008285C442DEDD10042100405281472400198401211002A10020A44A005023834102181024C812125B
-:8044000080020040C248200140022450220000828FF2011C212182C235A9822191312C21E9224153811289D94162944125E111048B21C042100849A4248CB2226481322622063614F244B2A41F21F2112854807E420216282884B2C83348524E241800BF1405111828224B122031114305003484C018414653242001382A0C0031424222A6
-:804480002A2191142C8236123228435B821238112784C622048188422486C84A904412002F970F4C410240312A24841332122B812E531211292198238184141C04830442218124C381129A42842282124014224462329441206221204102225E22A0142800888FC40544F04814311F8412C218301A162411147224018312961812444955A8
-:80450000844994228AC41213281502480044118120A2411200808121C82245A894891608008463414812F8B22E1019224404661434214E2150224924A112CB1C82482881182008254284A1482842833114E024182192484088364282482213820256981480C222B048282826285428826B6D808511024C01100827828417814248008B211E
-:80458000426022262804408842044442221E24412E184002214130242001301800001094142A8121044428DFB30B1D124058161D184816C4231E416722166811581C644888A9A525186CB324F148844124C9041C24314656480443B4289121482183C232524922A4121983A381832381416822C088322E186BC184818AF25DEC90441269CD
-:804600000147264C124838281648C2482143B14861824C42180883044222882642A442005AB224211806002144200800108814AA484284444B418848804444F858B6C012412100150811BC02841440080040429451441E4883524830482D884124266828008410B888C128261818D4220141121621E4158832122016F28224008C84F427D9
-:8046800078D04312912424202521054604181091824200213022210013646422419481202186521412302160442982048119622400288884480048291102F071D3200140048410048001321826080018840000411210A21448102A648C2C828283A881E08114C21438248128A150823084400C844440E2820941902848830481241B218595
-:80470000912240988412422A41248241C44827824258845A186142162106122440CA4540348150842890424C02168122C1442991941A98522A240A69F259CB3413884288221454431951844E82884044BD48518146731C01848B1215880170211889422A98131EAA224588A18426C42811C124912185418454824942181806302249128257
-:80478000332847155F570D26488204E0112221365269012E180043A81244C019172280534110084C2321C1488440A861002112CB815012229912B428311238E041223218248009412021F26E59804444410240180A40015022401402416111444245894104004024041077144151366823024830121059418964181F48018002898851841D
-:8048000044E0CE0400143181211944147428210767810027814F819222E118004C12012C45E464C1219A22342249A118621748184124424C048168314CC24A14C04142408404432609F0526940D8128404004481204141041A42440187112211601421211941815881464201401944424882041138191214C15814208102244E14239128AA
-:80488000188448259488EBFAE0413183AD2B428184D0EC521B9B111AB818021E98844E1881255C323D1A5D116D1114CF147241B84C71686B834588F112218E2AF0184A6F15F2128447B21F42E9A161C21F43119811B9F132462F52E531B4646131CF8288052383F214828D342FC9C11926F46D15144F12C2244392242F24F411619FD4F134
-:80490000414176FA426713C2116D1485E527E813C42136D34431242E288FC6D48457838D413E4969D231B819F6AAC185B41AFD22644F4E7121B685C364CF19B289D227C2425F2654E23E221CD284F223281F91A4183C512627684D866F22A87863B7245C4C4F85D2FB46D2237444135121848D1463B112D144D384F84239F0182875F28E81
-:8049800014D16F67911D8F8372183552118747504415E641D54EE5767151EAA624F25818A8843CB41351A24F46F8C841AF84D2D2B23C62D4DF8471599218A1D9BCD17258BC5485F7D81827C68C8462268E42FFFD0A200223024100A082602200C02611281128B0481241044A12A124A02C59211C248C21085012501448341A044082044857
-:804A00002448801428B1480889F8A7E6345F69D46552ADDD29CFCCF4F62EBFC5F4792F3F55B4C1F84D4BA5C81C55FFD6DCCFB5A155453516C7C255F75C19457816A8444F16F5141ECFC1DDD6FCC4459E88CDEC4FE9F9BA39CF2BEE46FE342489B8A8BA59F57272FF85574EBF84D375B25EF639222F437415F45D3C65D442F4B6A44F4CF88E
-:804A800034BC3E128CE88878C676424AF317776D66CD2AFD294FC4FCF62EAFC4F47D7D9F45B761F6D1F62B228FC1F38D89CFCDFD6C7E7E5A4F637336782E7F26B572F33858CD5D1F14E426FD321ACFE7FFFEDFEFE7AE5BDFD8F6A426EFB1F8B7595F6EF634F7AF18F28AA48FEDFF567EEFC5F52426CFC5D77DF24E4893F11A6813F15D5CA1
-:804B000085A2414F4AF86444C7C94B48EFCCF428BC4F6DF1D9263477757F7246F3292B4FC4F4726AEFC5F47D27BF55B769F2C8ED8F82C3385FF9F9DFDFCF97F375536F72F23F1BEFC2F21444EF97F77515DF84B145F464E37FB1F5377D2FC7F578E957DB8FBDF6961EAF83FBB46F4F7FF61745DF43FABFBDBFED7D4FFF5F7CFF54F54F1C31
-:804B8000EFC4F2496C8F37F35A694F5DF8DC8CE7C42B444F46F2642E4FC7EB83F5E66CCCFC64FE6FC842F3F7373F72E232F22B2B6FC4F4727AAFE4F57F7FFF55F7EBE2AF85F63838CFA1F1978FFFFDFD7D7D5FF7F537377FD3F12B2BFFD2F679791F17F54C4D5FD4F4792BBFB7F6FF7FFFF7FDFB6BDFF7F558FBEFE2F28F6E7F73F777F62E
-:804C00005F73FBBF3CDFDBFBFBFFFFF6F67F7DFFF7F77F5DFF76F64B6EBF17F25B491F1DF8DD5CAF24B442A426CFC6F6EC6CCFCAF46CEC8FC2F76CFE9F6702250145415824C011484541088400E0810440068100100844114421008021342610062C81941448221214481440056412640080028784004421C48119140E49A141252111380D
-:804C8000114C098112A5341542414614012C240183C412811098464644012E11444AA821241658248487241A1288C496844E1643C1B23244432144F18C85C0421F4152281F4132481F41324A1D24AB141D24AB9419F24A9151AB9443F24A9143F242914782AF14F924481CF9244A4EA14FA264114FA2641D4FA264592E4ADE24ACF49124AC
-:804D00002CF4912485F2912483F49124A7241F49B64AD141F24A9219F24A9259F44A9243BA4AB924B442793498924F8284F9244AEF45022E1A1F41F628421E2487161741A72615B468F18124AF6689F64AB75B288F243121ABB45B422BB44782AF143B37A9CB5A4EA15FA2B958FA244ADE211FA2A82C2ECBDE212E8A17C8ACFC91648DC2F1
-:804D80009E2CA7149E2CA7329E44A7141D64AF6499218DB659F64A924B4AA9B924B442B9B434426B4AA9F1A452DF17052008008220010044000000000021800188000040018004000000004004280000000000CF250C4432001954815128844D21B082811458C287618741163628281B212883442402228344453A4C46784A12888201006E
-:804E00008C2412DC48C4488C82F1221A8C41D4626481424D4890429A2204846F43083083181644F88412225D8219029668848A41218888482878482458488284864A1C0A8C081C034C81F1128424A88C9194C098881901412120C4188241278121822084FA1421443FCE0E241B1C12419C34854447321342758488214E128C388245EA8809
-:804E8000D248622841833814A6328C28425D88846D199572141AF83A84124A68811E8448A886E8840130141E22484D124BA483C118A74424E021A4824323F182D110840212608127128881282CE1888451818847818D141280C4312628441848124808A02448421840820210688141153448CC5222848941481234428088848A0445D811F1
-:804F00000C29614150414901611143020029214916410544124A1164442242241445C8242D18122292A0242911511816044002701138221348C248242E48294248240220048FD444C12519D2412293234D488E22328CC1521B21235C818123D128A1818333182519A15283420189344428A024AB826DC2812B832148182CC1A28E321B69DB
-:804F800019A4A132290429C241124384C14828AC2481A48218411F81032813C1211D2241CC247A229124421CB18294128C584225818852842791424E242A64124842428422582B2848299912290290114D32823B414829897112022146C1584423324281842848881A04CF2F427311C424444961135042188C6121225018181816DA143135
-:805000001818C01112C4008135942445C2288D12A61428CA424A6111A488322A488182724188E218420242893528284686012810F453FDA034252444584884B028E181226181411227811A524A181C024422414425014D118A0483032E14302283711412481488264484842101221421239864E088A45200844062419FCB0181B048C1114A
-:805080004A02445141153C8149439884A82A21041242484E181C55424818866442212848560431318F4324842221012664A4426218184931148942145441809126C012F036331440322441100410714202212148817084421685514100814D282800A0411018440400161404809124114319430820812241C94C42008483FC7CB6141652A3
-:8051000024874247118F44124C341C1781B724112CC3186DC883F82214526932124CB521C4141494499224498492123AC4148394244459B1241484B2242144A46146D412B59492122C2111D4843424C3B12484843122807188F45F27A04A8041080019322416D42809208141C884115440C4484E14418314014189024AD224012D1A9012F6
-:80518000901C8001411E2880641215482289014A6881858454481088F4986A80834244012141000085211408C7219130282CF2812891C2D11314DAA16383255848151898288430426284811C71224E581889C148251858187483C218E08102582800D027031110C1241698115602282D288016115224302444411034242012040051222F6B
-:805200004364419022230A8628B14152420042A02880820900812021C2882D5881488F2E0896A6418110D1240241418015220124281003400800211082280185426125808592141884891202441064212C6114604422403462A4260C1845E21E0410818401C018A3C218412144214934420022214D18002B141442221064424442122002FF
-:80528000C4914823410490282594428200CA8238442112200443823C283F420F10D88451481AA2211D241AA21243E18208401C44880244222E4449C4244828921A34289B48006222898403108282A41426223422811A22F4162891A021200420951828818FC54321C4141302842506008458129B83288C12446441A800C01241006F2288B3
-:805300000132226051001AE41102901128A012A021408894225884A8223038800222AFC74D4249430244134808840087142D421840411158A214145082901445414801254141548241412508131211120C1514614870210460183014818C84880864F0E9C31024A8211C8204284582840329020026628422428130282883223A21482432BE
-:805380008395128501001A02844128882E1AC018248421A01C8443044484212384E41284B46443425822484AF12384001608806241412C0780184812240461211981C48142422141214641344284612B422319C8424984B1441222EE41042D2C31306C482A388110D44241F48A45144F31B491F43425C12B1A41CC1168A1282CB158D2318E
-:80540000A8112524D298E8D2D3285884C67528F8D446B5A9641B222AF228776AF21E1C4D5DAD2D4E1C2E222F41CD644DBC956A1B2FC582F66C3A9B33EF61F244DAAFA2B92A16F54C825F18336C2AE862E5266482878E3E54E6B12CF2E5DC243B128F1A51AA2E24DF45E243791E9224AF44723882EE12B12AD42684C4222A123622AD26477A
-:80548000824CA6324F42467112D28C0167A9287AF215128B23E5E42432628F32B422C222152212C24462AE248A022F84D582B44ACC424B1428888DF329F64E284D674E429F2608442596111F1145DB33B221F6321C2AD1C431783D4A5E1487C4C722E7D1774485F2442C2E11991645087F42F88C413F357492D859E532542B482CC4482241
-:805500001E1213A111BD5CCF1271DE0E67B41D18A1521FA571B8739145E8C1D3C8725CF81828D249098B11C41FFD4201471200004002C048148C04841880118101421142200442A02420142614042110840448800448144024081A04402409006F98035A55848FA1F33D2EFFC4F63D3DC5DEEEF24A688F83B3CCAF378F4FFD4412AB311F64
-:8055800013F2D8C2FF52F2D5D77F33F3331B5FC2F235146F73F6AA8EEFE27726F62E2E5FDBFA2129844D481E188D498F43C6422FA3F31A12AF3BBF3AB2A2FB3C36FF51F37315EF62FA9A928F22F22A4D1F24FDDDFC8F46B6A8FB24244F6AFE21AA2F28ED85E483F776663F53084E533FB1F43B3ADFE3F35F5CDFD3F32F3FCFE2F26868CF23
-:80560000C3F2E8A49F17F7D9F6EF21941ECF43F2DCE6BF73F3FFF7EFA2D29FF46F6C9FC3F72E7BBFBAFE2FFD3FB3F56E4EEFC9FC79699F92F24D4A2F83F36A484FC7F644441FB3F63A2AAF9BFB7B786F6EFB7E7EFFF5F17B1BEFAEF8EEECBFB6F24B6D9FBCF59CDC8B568F8CFD64244F6EEE2EB3CAFF7A587E784F6777D741E147F53455E4
-:805680008FF1E371F34676FFF3F33F2FED2CCFC4F73A38AFECFF22618F9CFA4656AFC1A1328F8EFE3416EFCEFC2D2D9FD2F476794F53F164543F5AF846C6FD57AFC6F7A9ED1F96D499F4246D4F43F7187E3E2E4E423F33F71B31FFFBFB7A78EEBEEF67F74B3FBFF7F5BEBEAF6DFF5B2BBF84F6CED4EF45BD68F6F8F84FC6E22AFEA3EA2FF6
-:8057000081FD72784F83F72C7E7BF2344F77753FF53F3EDFF3F37776FFB3F33F33EFE2F3467CEFC3F38AFA9F96F78DCAEFE5D4CEF12C3CEBEE1732FFFFFD3D3FDFD3F77C7D4F77F56C6C3F5EFE7667AFB2F76F6DFFD8FE696B9FD7F64C4BAFA7F77E7E4F43F25464FF73F31A28FFDBFB5B784F6EFB7E7EBFF7F37A7EEFEEFEEAEEBFB6F28E
-:805780004F4BBF3CFDDF5D8F87F5F8F84F46F3E8DAEFEFFFBE7CCF87F57478CFE6F7AEE70010023484002400488004404218084400114431104294122800004901004D11D02401450224009A4481045048828100D0C603A60114C4AB12441CC12CC921011225012D165118418D1247811C02440041D08141312512218922022061121225ED
-:805800000210C111E022281118344240244102408841F8376EE032F4112485F3112483F49124A3D441B64AD141B24A9961AF149945AB944B42AF1439242F1479A4D812F9A5481CF9244A1CF8244A16F1244A96E1A2E459C24A9E24ACF491242CFC91248D821F4932481F49324A1F48B24AD141B24AB981B24A3985AF643924AF2439242BC8
-:8058800094478A29F9A448984FA2F4948CF024131D48CF32F5112483F41164A3D441B62AF18164AF46F98164AF1493658F44B9A4F44A315B4A29FBA448AF54F9B7484AF3A6524E214BD25EA14FA2F45821ACFCD8259CE41CC2481F8DA2821FC1D628FC91288B861FC9B66AF8814CAB161FC1F44A848E68AF54B381F24A9247888F24F3A489
-:80590000482D32AE488BB42F88B442E38AF5FDD840080000000040040000000010021800000040014008480000000000280000000014F0A72E142238100159E314024418221C212184D841028482844210284281C448897212542184302C81182833820821128062118CE22184A114205448258231488C0800285F180D18374810C4618882
-:805980008CE1426481154499AA485C410416944444453218261C044782284362452246C8146B428004121841188308215082258222021002845420C6982E58569148EDB8142C324510A52443723138444D181D1449921A6212821C82112448C21A44841A3224C28D248F42B424D138D4A4D141C22C8934182AB16381C812894802283D18AC
-:805A000025BA3434322A0148102A8134A8AC618716B158F21C8280A12100141329840250181B281859441444C448444528648244501822422C01004800001004200100280042105284245181488820044D364002142814132114011230118D81401104848501851544244204400221400A00182002244481009018124210128421190A4A93
-:805A8000220248EFFD064C2131241841CC42194AD41442A184124CE14134385911A2814492420028484100269221D02832584C0129C118241818189B212C8A819482241E489A2481822435111A981888813F470F1092212A419438B415082A419141190114497314434811F48411430430240000222712004044028C416221804188084661
-:805B00002261248D123014A014211C012038488BC430141844101125044115041A988816B4444108309810084122204444022150288D224E18181212220049113831282391188820840D38888B41A0871E28005F7A08200152CC820434844552284D31864838624028924481004518088E1830484018040084A0142508CC043281211AA29D
-:805B800012688C2882242281E1820140CC12522F3B4892389048276248234218442121914C50428D24144B1844262813A2145042488E111E440043964A2084E8E28521C6244B1260148C44C52840981421608286B48C0443644623215428A4FFC50E4014462111048100112400908A60810010280328444002205142224400002001802195
-:805C0000410800811818214604208408F014DC30124C119C32766A4281D13568211419C5888514561A8358488CB22811223414816845381481C02CAF4154426286D424062C83B214C244488B42C5711228C1282C4518A8416CEB8821A416469412433C1885F2E51B2002211514860400448D128C52223048824C216344001698284110217C
-:805C8000C442800400208101C19018111812228C8281820881604443514822428480F4635C1014181484112C01481C61118484181283C884C08840022C8101282220810180A1219022821280028328480889820184A12011281368821800CFB807178211B1126782124215644161001181430281C4412184182644C81489413484453848D2
-:805D0000105484800128A0A4200228A889028C02290110A241212A34428184248F990440441181110140111812081504411822400C2628120420115884208801842328024044788802422652281224228424818460A4000089E2F2011200841110194802C1150418158801200261490480711432285288245246021289223414C91488816F
-:805D80000141121604D028C1241604201224012118F079BF20180816152421014002008428004C1298822001444C184812882841424842883212898222022C82C22800C02A84108841688300221288127F6E4D41040010489411842008460147848628118881B11202C44260241842C0824948024223280420210220080000B0120221207B
-:805E00000129011229F2979C5012C024800422442288842200829088801484480884890400484C243184C14C4224C8844014C884894964C949A48348824B252004A0424841C04481C7B420050040410412550800141444002022E4422401400421180023012118000018801108164208000000841A82480870380540840440448101821284
-:805E800054C3C824128004288441304290189088124888424AE81401E08188916430442981024122504280624ACC810982840021F0A2DF8071844928314216D91547D524F1168C2F9101811E151B35818B81418F8841344A4F4665864449C41A4CA1848B111E12C08ACF81F1383E9E229AA8398C93484F2283F28218CB28AA58E82F83B34C
-:805F000028425A46854CAA118F83F318A816BA68C3184B81124FDF4EF221415056457415144D9C118952298115784115712C58844AC12C4A92984B82D044115A88C52443E8487C4884F9444442F022846A524443E24112F828848B23C48B314A0384AB215E186B13182148184A91822381C5222FAA457114544819D219E182C11412C3B1C9
-:805F80001164184CD818C288C5C8858E94863C28267626CA14AF81A2214D584CA861AD2AAF417544A8C82F6DB492516229C41829B52848B42468859E12886A58C463D32868258885823A5E8D88244B46AB624181857228F8CE1734282428412880028C128442010044400420784804815048000000220000841884422004422006460242CA
-:806000004110143814814914787F4AA1653FD6F227275F52F64B699F93F32928DFD2D25DF127355F1B0B8FCCFC1D1D1BDD1AB1D44DE4A7F7A6AA2B51CF46F46C6CAF81B4C4CC1ACFA5F51C984B554F6CF51416CFE3F374764F41B558DD44E189F984941AF15C5CAFC1F95654DAF7D47445B6D2BD52F5DAD8EF81F1D4DA6F64B5CAD84CF4F6
-:80608000C4CE6F74F4CA9ACFC1F5D4D4EF45B4A448B343F66B6CF5FE1D5DBF54F63D35955DC8DF52F2AD37BFDB5B11CEE157915F1DAF194F8D4DE427F7B6BE2F23B76AF4585CCD5CCBCCEEDACFA7F51C984F85E5A5F59496DFF3FB7C7ECFF1F774FE4F41A9FB4F488BF76C7CAFC9F91E1C9AF3DC7CCF46F79CBCAF83F3DAFC6FC5F59E9E2E
-:80610000ED16AB9C2AE62FFC6E7EEFCEFB1A589AF93C248FFD49F376441D63557315F57E5C9D299791D5FD393D7F51F199941B229F8CFE1D1D1F1DFD94944BCC47424FA7F7A4AA5E5CAF87F56C5CCD5CCEC84DAEEFA5E685B558F1DC566F61F11A1F4FE5F53E7E2FADFD66644F49FF34343AF31C3C8FEEFF2E2CCFC1718CF87C7EAF4B7B7D
-:8061800018B29AFA5E5ECF29F91A12EF4C9848EEEAA786CFCFB91AE589F9283A9FA945F16544DD67DFF2725DFD7B5DDFD1F335255555F9FFFBF39B981F12E29CFC151DDF5FFD94944BDD4F42F27C72CFEBFBF2FCAF87F5685C4D448F8CFC74EEEFA7F7DE5CCFC5F5D85A6F68F99CDF6FE5D5EFF7F6F44F4FFF94B4CFC1F1683C4F41F3F8AE
-:80620000FE6FC2F2F47CCFECF42E36AFC9EB27F6DEC8EFE1F19E86AB55CFCDE982F6E4C6FFE7F7DA988B514FCDFC2C3EAF270261100229011C214121080040618944001228000040843148181004002B92A08284C048221E484148E0810448441A041A4484D4480244F0FD446018501411C1100C1415140A8501441281404458424F83840C
-:8062800042584880528400521881220010088722003028122722D02881E42461818584F4483200841826F8BD58C0431F41522C1FC132481F49324A1D64EB141D64AB9419F24A9151AB9443F24A9543FB42954782AF14F924488D954FA2D418F8244A16F5244A96E1A26459ACE449C24A1F49C2421F4952281FC9B248F8912CA3F48124ABE8
-:80630000141D24AB9619F24A9251AB9443F24A9243B24A7924989A4F8294984FA2F44232C0431FC1D624F4112887141F41364E1D64EB141B61AF54C924AF14B315D44AA142AF54A9492F54FA2448AF14B122F4489567238F14A1825675246A114F827418C141875D4D1A1F8D52A41B694D521F8892941D68E99161AB141FC8F26A941F4802
-:80638000F24AB253B84829FA4A96A28F4439A4A9B9A6949A4F2AB52D03840000000000002800000000218001000000140000000000004004000000004001DFD30D001C321100108891841C21088E118212D06801268811886232004100188912E82214882302008250A1428F131C82038F280120D228482421840100FFA80E2664382012F1
-:806400001862C24183428138224038528506908482C42241A02844B02E44942421320088200284608320028A01228048A4941AC4825028204211F82F9810649431161118524845084918B42228D218884C1C62C18283D2A41138241323E8484164C4C0122618C142848928220481822215A2429699924322E2820941B88AC182C04A24281D
-:8064800014F0D985200222280022B02811C1910012292101504282200224280023423424E08281021A0228006081812006184022084887244118800140F81CE7000000442A012A0181841410628244841004800281841441282582421A18840280082210020040080040648229211308812AF43E3C9024E041129832A14D81E54366811E7D
-:80650000232C682444A01416429614186D2887411508244972120683C4341827416C9318482358412782812F4401411A426841301248254CC2AA121281C3B414A62180F8CBE7C02480022B21814952431A12B82801114160816C51244190284181004125038916A62169A121252C0214A942B826046118810020140A2318B21812721488C3
-:8065800085018AF6B5E900C0148450428E11A44582512187284225024A02841247214183312140CA284311041E224058C2182C24182408180028C01424890144C0281604162876242842088F264C5248E0829C2242818368811A2274889114C08422254284D1A488048844443A08261408902444848608832565C1294884021A024922B143
-:8066000024014428009044844B4149C116F0D46B1018944241150C10444404C90A4AB12C81A84980E46122E284A121A14321C81228874A848065441244852284824318A258246824818D44A0148B246044801162828A4462289E488011E2419811231184984211811A020080014118400800A954844014B2440120023222000081C430943C
-:80668000482888828118AC41A8242E88008184F065335024442867122D48C48143D51462C41783890258497112223D142CC424A18B144941F46688444371223C8247854448660843A14329218143982246C8224B6168388B8488C96484ACD184A4244B842588315C4186F2B5CDB08201E921D1140124841880280943182848048D941A842A
-:80670000228842088428D04802284941C4982800C7228241844929814814AA212081010089038F44229818F055C900295414411044022E4420840321284472C400410000A400C012448D42260241482481C90500431848384828450898219622C21212882284126FF10C841982022140742804C188408801188628A828299282484331149A
-:806780004D2812288E24848CC4281280C4821E224908002082A23444108801404404203248C44614F27875200C20110284211200A04121290421842D42608184411088C4128D4282008011322221228024842304C02800294442488204828421A018C1D7AF5084418C146244324A82110AA100518C911210024391642624C248580080058F
-:806800001210C42C1AE481220428896284440080B94881180618C44A3142422A012504CD2600C02820A1411644D82892C4800E8C5984482604284C042E18128444608160C100436188124C0228C922018228A02192412830884B2181308820C2442041B933470285028C0510480481D049B11808884008219082400828242800A5342A8661
-:8068800008000000441AA218120042444C41420216028C92168118A9043BCD00904100828022044A0800484508504881604440040081208198224002430C21284A01848444442A088112824400C210524200D7B94032A820624949A2213012266242844034142863C124441A6283C0A828C028842B2121281826C2283818109824801888D1
-:80690000C12484288922411218481268222884324E1820F497A224841129344A480018101248048F2802A30821C88220110218468418044244497814412CD8A4188464488B12414C0841181244C03444844883C118100421F0B9172423B4A8D22BD2224144F4283A2D222F8352242F84AC218B8143F81E88AB18AFA244644C96B814BC1C76
-:80698000F11494B02CC41A18CB844F2144D424F188881E1463F224C21EC4457422F834244CA4154F49D8447B2884B1A8F4481A4B4945E42249B844A5352F897354EA2183711C096F350964471845B854A2494BB61E444CD12CE4C432284A0127C14A67274C71ACD222B266F22A2CCC3428C7864C22F238282F42931A6E5A2F81E241738A79
-:806A0000C82E2F41A33828CD244E588BB32E2C2A12A861885AAB23A4AD88E789E1A7C989A8442B22EE48CF81E44C94482F7503D0A364128D486B141241C7834A918A43F82988ACD5384956C44B2925F824C86CA1186AC2284C41B84C5422A48C3818874A47264F22B258217866F222CA206884839858224D18CFC35284D048E12141C416F7
-:806A80002427A28F229818E5C424182D1C9F68025014B024818408414843820400484C02284844200428A02440044A92842012282204A082482A082220A24822008280C4228AC422304820F4256D24AA52838D2A23A1E750EC6F62F14E7EEFE8B8E2FEA1B18E848B98AF8C9F144D3489A8C48FC8FBA48C4F84E68B6BC145FC445487818F11
-:806B0000A37A1AF8544C476123F1989A85FEBAA25E466144CF41F2CC448F816A41CD2C85BC28A29889F13814A5F29EB865F64E4C83B1DAFD2C3CCD16CD1CC5741EF84119242F22D22354988D124F42E241F13C3EEF62D1EEF18E8EEFCAFA2939BAFB1C9AEFC9FB161CCD1CCD828DAAAFEAFB929EEFC2F3B8BC6D1CCD2CCFE8F81A2AAF83AF
-:806B8000FA1C14C7616F69FB13B3AF8BDBF47296EE62D2E446F438248F89F318A88F81DACCD2CCB21CF15C7C8F82D2A8D22AF11E3EE5F61E1E2AF32A18EFE1F17E18AF81F15818CD1CFF9444F222223F32D6E8F2322C7ABE34F23C28E5FE4A6E6F62F24A649F1AFA98BAAF68F8CAD8CF63BB16BB2AB262FC9AB8EDAC6FC7E7CBFB2C3CC727
-:806C0000C2CFE6FE321ACFE2B23AA27747434F3BFB8E8AA5FCB4BCDABD24F6282CCF49F3FC5C8F8A6B4ACFC2524C8B238FCFFF48588FA1731EFE9E9AEFE1F14E4C85F2EAFACFE2F2145CEFC4F51C5CCFC4F58766246F6AF227278FF2F23A3E4F47F6F474CFE2F22E26AF46F7EEE6AFC4F661618FA9DBEEF8FEDCEFC7FF3CBC8F22F268E88F
-:806C80008FAFFF7AFCEFC6F7B8BECFC2F26C68CFE6FE3A3AEFEAF27E76EF67F7B6B66FF9FBBEAAFD2E6F6FF7E262ED26E5FCBC348F8DF7D8F8CFC9DACCF21C3CCF8BFBD8F88F83F3181AEF69F9BE9EEF21F15A5A8FAEFFEAD8EFE6F67E58CF85F55C5CCFC4F49BF1100661B024012C01418260882048020024000000001828410030263041
-:806D0000241044180449212102002440260100800200FF2F08504126422C821484428226840250428CC42641284D488B241285342442260245AA242A01630284461402214C92184C16C82441928006960884E08A149A44218C344845F1CC5BD024F41124C5F391248B141F41364E1D64EB141D64AB9419B64A9945AF14B924F44A954F8225
-:806D8000F442914F82F442954F82E414F9244A4E814FA264154FA2645D4FA26C5D2E4A8F4DE2A2F4D1242CF491248F22F8912483F69164A3F68164AB961F48F66A921B68AB945B48AB9443FA4A924B4A2F24FBA448A9FBA448B84FAAF46BBC7024AA41C593218B141F49522E1F8132441D28AF44F91124ADA15781AF1421D35A7124F842F8
-:806E0000113658526F88D412F1241A8D112ECA1665A287512EC287112E138D252E9217C1ACF5116487221F4132681F41322A1D24AB9215FC2A961F81922859B24A3924AF6421F348A24781A9B216D44AF3245AFBEF40280800000000002800000041100218000000400122880000000000000000000000F0AC4C106442839324811E28193E
-:806E8000C4441646C818881843084225188A18A8211828A4444424CCF2122C184C5222890244211A022D2C3124882246C8848180018110C8884E1889C8148120E4440B6E12823116A8524552241618C144822781812D119664898A33848524314C494414946826784284014D8A812A819C24482E12902CB028E582B8446381322A816881AB
-:806F000081216496CC242E14441AA2822AF82845478A9F930C64478E8D1122842E1C31699415257C9418A2121741824E8289182248F8244241224381F484284227624393186411C8704C42A2148932264689985280E1415A84A012218469588489B948E182C892882AE4C2F899AAA052302216AC16304416084860898522C814168873840D
-:806F800058481289A14144A48D2424448C11D82498282E12893224A0122841842B128CB224E88132688068818140648128434224C124265848481F6505400480014200842A0100000021901A4800800420840400224200A0218002842248C0488886184828242204880084EFCA02805124492142E84281044121A4184602268C1484418460
-:80700000048E1890484508852421C1148287426041420082892D01806488BA8418029844818524888231281E84419FCE0EC014D0422143C81448400684400222502410440886088C5484108404490189828204002A9988008022A8284E8A1088191C982C0040C884845FDC07004142006200841E24242A810485240412241A848421018A38
-:807080000484181A04824490148924042025038442836445A082828120044A28A28128124C71CC0C19022A0125048D12168403821028110842104858144A0822494488848124C6288384444884049C91848C81880484422004840042528C04CB414144846F480343210249E28422820442411112007082341442438201384449841204449E
-:8071000010AC811286880120028024B4883214CA2222880198400C20C8548086027F570F0041000000528C420800818C8802006084408222811424012634228A8204008082220112204208410041414903228024F29B91E011024902258C9248638161458DA18C41280185741884021658414AC14C4CC2268C82E54441B468B118C84C2347
-:80718000EA88422404184458488C1CE48D22266A84E0C108C144184B4A582E1449C4448167B4108482C1246280016200005028824A88D44802200A484241004241282A314818428052188283A2282A210100120000424994184183248222F25CC34002812840042004000018A08400100881410000812688422808001048A8848608002098
-:807200000642000041400884006D8A804106008001B028A918484248481840644280240C8C846442128CA44248124816A482200110243144C189BD44314884839488814281488364456A614280062FC2041006421084014228180020212108448024088504430890686238468801901842108861448442488C8426648C8100704498147660
-:80728000281208D031088D188B44AB44280000B088D144D844B424A6626280448402852244A8151AA5A98A99481008114CA8288548B848944843843C88448B811604455CC44B222AA2428148800445022AA4112F830B4100004100000000200820016084400842000044C0240000001004800112004220080043040084FF660B84268884F2
-:80730000040080011644C42428280000608827229012898181C8880040311114104C2884044008008664444C86A3248448200450229012CFAB0784424A04002002204884A922880000844810021A0588004800145048846248000028005044182883880481128188891482745A07800400002004460428000010081002588008000014889B
-:807380006082A0442800008014480C890A008400002180F1E9C9002002000000008001000000400820220448420022008001000000404828080000800200D08D04818304420080218118143C2422220000812C484232148323293488003021131811088B44200400100841414322222204004042622443F1A25A60818448480081008049D9
-:80740000C484284A02000089046121188B9488C8100441541422848588AC44220000832845C44C28890280043088831412F283DB001841200200008048082001490800814820040010180400001004000020812808003048844846880441F01CBB0000000000120020040010088004420000008004228001800800121200008160812048C6
-:80748000080080F4B9EE00000010081A84A84881890800908440884418280422100842403424802221212808402882048E88848F8438188258488CA8456270481814F456E8000000410000802828011800878130C88B644848488C84C448424C14048800206242801204B018C188188882D08864881048984848008B44F7E2301432260453
-:8075000028002A8181A1912021242C0800818C0841C187864242008444688E342843120400008001893158481A84048374482804C48E884848D079082F22F212222CB11221B112012C5122881E131F11B188E998F848888F18F4484842151981548985B844E444742494244F4222E24202284554442E242F22B21282B192A1812B99822C49
-:807580005122881E1B1F11A1D88E898D888B484E48428C04488558884F84F49869F026226D222E123A213112002592829CB11191D19E888F81F888418B4C4246591148C48588F6484C45B444B6242222024054444CF326224DA22AA1131AB8922828582229C8111B1119E989F818888B48CA240400C485C8688F9C0F000000000000000051
-:80760000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000AC
-:807680000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000002C
-:8077000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000AB
-:80778000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F2B
-:807800000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF9D
-:80788000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000029
-:8079000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000A9
-:80798000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000029
-:807A00000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000A8
-:807A800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000028
-:807B0000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000A7
-:807B80000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000027
-:807C000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000A6
-:807C8000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000026
-:807D00000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000A5
-:807D800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000025
-:807E0000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000A4
-:807E80000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000024
-:807F000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000A3
-:807F8000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0023
-:808000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FA0
-:80808000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000000061
-:80810000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000A1
-:808180000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000021
-:8082000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000A0
-:80828000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000020
-:808300000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000009F
-:8083800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000001F
-:80840000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000009E
-:808480000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000001E
-:8085000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000009D
-:80858000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000001D
-:808600000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F4212C0484D4841222222BA34244064884C88021A2221286981128A248C0500884A3128008142001004E081B4241C342422204884020092812038149FC80E2283140821897454C85C55
-:80868000464424A18332412285C424C443A26168828C9C18A082188AB18833188B288AA548C9AC24222A14C848D6D884946C4302E21888C34A2436444CB264E14122A22D96C818896C89001200A504264804582048448802222E1822A0841280042A8C210180A842400422008449113C488D144C08008288A042B02401C018818156FC29D6
-:80870000538036480010A44118808881A1218288C342044381849188834428048028C28828180022A0420086880420624A1882C9022A440442160442889288FF7B020084803448418B42490200004400009222200800008220110883084800800426840442000044604200182800F01DC200008C04008064424C8202440010042800128AB0
-:808780008128016081188924882CC448008148008082044C2202440000282A888801F0F53300002800000000000000000000000000000000000000420000000000000080F2BC280010182221C228200189882288250818284508800284208221220288831404002881414698148C04848041281404448444904A00818CF283B724422912FF
-:8088000002A95684401CC8142C4202418141465C1490211249018018A442184021011A1A085282148E124068121E24D08432C1128230842220A23826240888706A0B2440088B528D2484C416C814282223888408584C020043020020812242A11889C414842081126841A9C4149B24431348641981104444143824B22922088368829FFA55
-:808880000A2984522210022200D02808301481418514514813822101848843A2241800008A0280244821088400C02842124A08882200D0840400F0A26D00100485821288A212848B14008440981840229128430148800450482D428129041828228A92948C02844184224011C1121240C8124100008902EF790B1981C3186C914464122182
-:80890000642AC1231608D02C0100258802134458214D2AC4463C52121213C1248BA44902730429024D7244485848A1482D281CB488B41494A68B4283A1427024A84220F2382720A112808104182011A221230184442001A41AC2281E458450824C64E45084218421C841224482188362258143142816384114488324B4885228C321064CEE
-:80898000821428F2A5994001C95124E42656282849C2384619086081251808210000199424A1A04118582D114C962838241B4226E24208261404582400A9C21123391425A4160040888202B79DD022C2228C32484C125C24851258C18A42418198211C8801834828B1480920C12428821012082211113044860820A2482004121605200247
-:808A00001221818184182C23BBFC058141441314220240215114180028008011542200482B41211C24584218185981E4830883A424C0154014A82100401422D28224934490A4281A924240F83E5F004022110881438102188421114301854408128D2420811214084212468822D2620828223024282400214112B04802234104B04411A255
-:808A8000140044D0F94F0221CC321A814C427C165281121B29131111418468C1608916C8348B411226C244A902482D165289D224D224C61813A2244382D2144232244A2883041842212351421856646487424E28184A6142704306224C1212312684402852C1401822C81111400841A1828004414E2100841218822A0800C928015028107D
-:808B000024011F810230482224128812890218A6F84E6280012448160812542244001081020020011614281402A3210810A82825A82C188A8221E8423181811B28444A028002002246846142008302F0697E001681415C41255A81181C2108102108512048012148184048C4224450482448182504B0448212480A003082901A30824425CB
-:808B800008821022041644F8B4B2142C11943218A21249235162902683311224260184404A6881264118084628C24825C24445A228264228623220120A2248228143028142E0C441341C2C22C22C1810084FDB0C22904810C14482002281100181B011121202C018206118802881C182100882801CB18845A1862C018844218B14901441B5
-:808C000011200242180020F2935D008400184001313018804102C3514284448901221291812519CC8825141848544A1244C023844044C8222082C12818800184844100006081DFD14F42C81448482582110240040000508114219012842800428813140825648418622004142C0400408802212C4594186148228D4270184408F0D32D507F
-:808C800085111C440400281200882411841C88016018107484814831141C18621100801214114484742164112F613281201828C1841111A0822484418C220841688BAA0027269011902110462601150850211044180400C081E02811240121009018220015020044214018022581110221842D1850860045724B0E35081C240241819C042F
-:808D00004825E262012902125042BC42D118421146E22841A181148418104401185518924646121881C1A24C1824D2410228111832214084229112F02A2910121881F411314B211CE1515172274918182D113541F114151A51842584B9188132241F9819E124A12123BD12C114C12D2CA72347431E1426F6215347312FA6F59B242B134F8A
-:808D80001A85F2AA424788ACA6124593144D464FC2B22434362D7669E2441A0826F2335260314F65E191F14716D06361412CA2134B4285FC19AA1522F82A2291F54653359589723DD45849C28A5F99D4F6D1115D9CC784C449CC1C8C9D214F18DE46B2888AC2839D221938A6412A931A1DA83B443749A791A1272428C3C41CE3810249F43A
-:808E00001AAD341D343D2129E28152A446D8ABD2851445D22202122415886892A3D888721252924E19163848A718A53428854E72825222872E28AB2C2213043782D5C548C42D2288CC5A4A32A3A11190111AF8183C87A82638288C61814FC1F118284F8B0520427824416816200622E012081C088822882288118811004A1221142118212F
-:808E80001C245C14D2201924581400C082C0831AC483122CA8414C88C4824885A448D04F4F11612145FE362F2F84F424298CF42E7E23F6A446AD9A8FBABA82D813F88B8ABAFB9C8ACDAE3F18EA8AA8A82E281BBA2D833F38A85E3E122F247D117A11D393F8C3CA9AB944F414914F2CFE93BB7F41D324F89C948B2B4BA84BA88F88EA69F378
-:808F00009C182CA2DF86B798E323B1D87DBEB2D2E583E3EDF9D49CCFC9E926F4DAFE145F52F2144667C147C14E484F85C558AD4A6F67F1A6466D9E8FA1D122D313F88BAB8F83F33838DDA9FF98BA33E1A1F3362CCBBABFB8F98B89CFC4FD13186FE5F5968C5F797887F56167CFEAFAC8E9CF8BE324F483E9FF58F8BC3A45A4A34D214BA835
-:808F8000EF48FA98344F4BB1A8EB5FBF84B19CF3BC94CFEF7FB6F6D2542E224F6DF9DA989AF97276CF114AF111114F43D788F12D3D8D1CFFD77618FA6E3E2F47F3A264AD9EBFB2B2127383D3BBF81C1CCFA3738DFF21812F82D119F38A885FD3F3819B3F3CFC6DC9DFD7F54C5E7F79F88A984F44F44A6D4FCDE6CFFC654D5E723F38F68FF3
-:80900000AD6F42F21A185F48B191A98A8AF83496AFC1F391B23B755F75FD1E184FAAFA46526F65FE5E7A2FAFFD3654EFC1F144542E128FC345F121215F43F23828DFD3F3595FFFD3F32D3FFFE6F272362F6AF62ABEBFBBDB337183F32B8BCFCBFB1C1F57B8DF92F8AB891F91F3B7ADDF33F3898B3FBCFC766A7F77F74F5FF7F1AD1EAFC4FB
-:80908000F4CCCD4F47FF5D7C5FD6F6F1D3BF32FA1F17FFE3F3AEAC9F92FB13312AFA8AAAEFE2FA1A3EBD337F3DFF47D3FF33F12E26AFACFD7EEEEF87F7F8DA6F43F51E184F24E562F3934180011C0118800145230112244002241558481200850481504821446100812302430222842502222002228400004480220100F0EFB25034284538
-:80910000C22824C4C02C1828C0282111851244414802200113082B42124880012B428005495441614001490169280180A14144A034108A5448805194EFC1022CF41124C5F2112C83F4112CA3D441B26AD141B24A9921AB9451AF143924AF1439242F147924F842914F82E414F9244A4E814FA264154FA2641D2E4AD6C54ADE24ACF4D124F5
-:809180002CF59124CD121F49B248F19164A3F48164AB141D64AB941B61AB945B41AB944B43AB944B422B944F82949A4F8284FB244AEF760A2CF41144453211467111744A53418B1415F44A9415F44AB141AF143934AF1438242F147925D81A19D7127924CA915DCA16F1254A8711172287413CE451C24A1FC1C24B1F41562C1B212217C1E6
-:80920000A5F181242D121D2CAD9619F24AA359D2327824B8427834F842924598BA6B4229F3245A6FCC03004812000000002100000000100218800800001400840000820000000000000000006F5504412214635224C1400235021184402104631308251481440844B964E21828814588181444C23484A8614D8284288941A81420012184C7
-:809280001241460412264818F892E600210021186014C4498C4112C1848C348145011817C213ED4264198664C44012C141106222437222A824471250143122222EC18122AA04142551841249828212E82244144411F4728F0023042841690114A5748493141426816894461171328441647C26E4113C8845A818D042321222841528028D69
-:8093000064446B168431444C7A8248381846981411230318C90228C426C21287428187418B2E1084424314420848244800A14120480481178229914110245424871415681424702462486782601250148A3222601628228A220414451802384142484400F086C40040011CC12C24162834111884890910410181A220614486C2243B4228FB
-:809380001944E42224C58890442814C012001A324448818C7442011C08290842490410388488E0BF0B40748612DC2406198584B14E282299418591C1644658814914B884248C3844402814F622491C011A92222662442368411742413F88843411492B09B04248E28C817442B48491328C841804005F8F050045119E5525B841315A121F60
-:80940000882482C18811195841B1403C88C84AC1444E824127124825D5C1C411528B3850243083411544F482411A14E5442A6924192454215820C4824C628450844908F0486E00412908224902209416188C681581428014898442242818849248224823A2422124222AE4440212322181284A2111480823887888821C365452800880084F
-:80948000AF8D06831251142364432C084432301846052062488B812A044C46A218412243312456A1688063A25460843181424008288CC4846608706628210244A02848884152001FAD421308184A423822491288084181D048312121502488811502382C280160E8001816311244188332448230482C68412140A4125C014F26012E120005
-:8095000050822141269648FF1E0A50228400430880E84368181A62886081244110018A01844C042100904841001241200300852588B18321041002C400C418200212F0B7C500148D17284558224441124B828E18848C181431864548C6814D281681311C8E26604256914CC0688C1122F1441865014B1200424D219E46441D28441E228C63
-:8095800031124D4284261492282C847822842541F2BA2670220221A0124C2242282241B1110616981890922A0448888228484421602280C1244D120012228048186888A1922B944890612041240143884108414CC2483F1D0622922400142111251461812011912841801154254115081D828024A218204581884681021C42C121144C725A
-:80960000C28182D8424281C24130422244A284A0424112F08AF450218111811D421634214818294812188114F188421C6C682C88849422290230288C0C4B4280241322D4422512022921B24201A30881212181C230C610228803008AF2A72B008200840012412C02122120011A021A12E1137841641135C485445981C43480818444046066
-:809680004119011115C8811410411151144C0C88129018422001822FE60F1450184001608210522189C289241728814184240090241A62822129588425415142E0481132812DC882213042822489311848162201A35124C0224148241800448F24024A4182628490648004111A08181924A1C15898122CC51C1818421308131322614512F6
-:809700009684118141440818901220A84112230888412328210812008044F194F6008011820448A01290221908004100001998448028D4145882430810041442001248430441502410114404A01424A0818826044440F2B86424004824830883932139A485008127A14091839082850422812280023C4142728148022C43D1A1014D22C0AD
-:8097800014B02C0126584A422614080018304425E242084122CF3B442231818434200810C8149428C218464801444218260815442C668188894202704108123015468461148F41C4811A141184210125128802004181121243086BC7409812581034111818262122E64118F28228821284100880314A901819D4249841144D2181C0814093
-:80980000C4481598C400A4414001D041218142240149D12202002941F4F73240B1924153238734114611B84CF111143F26A9B8341B191B142CF814818F696862ACF1478D5E3411AA7A657884B142B121B14162131744FAB116A8112B854F51B517D944B812E141F115454F65C391A12541C2114129F546621ACC164B88C338226B2445D490
-:809880001485F8168424397481FA113830834AA8216E113762E21A3219BB8CA3A4A88744B30EAB19133538FB428FD5D2C594689F84D415E2C5C81647248F18D1E12CFC41231C612A94172114DD422F88D81A748AF85429C7A46F1538138D9BC58C58422B812D145E5E283AA811442AF288A5E023018187844D484F71B328F111621E212D78
-:80990000A3857922EA81C14BA7917F998595144AD856A438144F22C1112F38E8627338FE8E4367133D546781E022C5445762137468C6311F6664168F22B1817821C4921F4391112A9243CE824CA138221A92A247A518A0814768572B144A521228142829C8482112432248A141C0486082A0428120048100A024304819B848028A42A12CAA
-:809980001828C0688042820628241A049A44264A06814880049FF24AD222B212F228222AD622F8696F1B222E422F22F369FBBFA7F72AA8ABD81F18F999FAEFF2FA62F26F41F19CD26F7AFA8DB38F16F27131CF57F6AD8F2FE454915E89C793C794BEA37F6CFAB6F43E615F7BBBD3FAB1233F62FA37373FC1F6B3BBFF8BFAE1654F4DF5EF1D
-:809A0000EF7B6615F1898425BA12B724B224F2A4848ABA31F394F44D444F4CFC56442D25242F31F3D27AA5F922624E439FF7F739288FA2F27672BFB6F7676F8FAAFBA8B59F38F98BA3EFF3FA47D7EFCAF3BC325F78FAAD9FFFD6F275355F77F78B89CFE4E8A1F1448FE791C7843E2BEF54F2E4A41A54A13F15F2B17B7D877D473FB1F6A741
-:809A8000ABBFD9F8D957CFEBF3AFAF7F76F711119F3AFE824A2D624358244F4AB888FB35349EF26B414F48F8F6746FE34CF372423F31741AF82323CF86F6CF5D9FB6B372E742F3EDFD9FF5FFB9A98F8CFFC1919FBDF56E3EFFF4FDD6D6EFCFFF773D5F58FE63759F16F2ED7DDF78F866ED4F12B67CF425615E572F7AFEF6D76F45A7CD5F9F
-:809B0000F1F576455F79F613955F71F17F4F3FFDF3DFCB3F4DFD7D76FFBDFD53551F32F3CBB36FE4F8D2D44F64F996944F23F8566C8F87F7C4B465F484846EF64FFA4BF173419F39F5333B1714FF9EF65F5D9FB7F66B684F47F7ED5D9FF7FFB9BBDF9CFFC9DB9F9FF55CDEFFF6FF5E5EEFEDFD557FDFDBFD4F7DDF17F3657FFF58F86D6D3C
-:809B80001F93F5FD597F11F75556FFFBFFFA581E326F6FFE16573F5FFC9D355F72FA1717BFF7F4DBBBBFFFFEDBD6FFE5F5BFBB3F74F53333BF3CFFCEC66F6FFDD6966F6BFBB682AF8DFF3C1C2B9C6F41F1D4D6AEB64F220E1810421802141226022662894008124492241210810281112818281890140010060065018884141200004400F1
-:809C00000012284004CFAF07290424001E44421902C0816024828734116C88644447881C9844891105418129449547812D42442C544148135122444613314CD0280814118582A4844381381410142201F0B196C0421F41522A1F417248F21124A7241F41B26AD141B24AB911B24A19B54A7924F84A9143F2429147822F14F924481CF9247E
-:809C80004A1CF8264A56F1244AD6F1214AD6E5A2E449E2A2FCD1242EC31F49F228921F4932681F49366A1F48B26AD141B26A9921AB9459B44AB924F44AB443F242B4478229F92448984FA2E4690A2E414CF4281316643617C146D241322C1F89D44AC164AF143A15AF247984F84231412F141BD412BB26F442914B1A467126EA11F8244A3E
-:809D000096C14A1E242EC39E242E5B9E2C2E521F487628F291246AF19124AF26F19124C3F28164AF62B181B6489A25AF6428F248B243D248F384482BB4678A2B144F82F1A88A0082480000000044000000000021008008000000400800000048000028000000002501DF5E062800A11008163418111E811A64281286B148781401444C74D0
-:809D80004194481413089112C01481499452A829696188122A2871822251343024244653389314C192246081424034842882EF840E23244A082426944193924450288448CCC84C798284924A888A8132182843C424C022224311D124122C12314414100C4521479142138982014C01128E2141499818A01416E144F2E79F20244C1802C355
-:809E0000924147128C0457A183A14AA9D129EC94EA1184C24849E83C817211F8328148C982C1A24B214CD141B4432122114C3441284522381656542146E411386587311CD4418112823818C88341B244691143DD6C0E2382028424001698141188483084444144504248448C04401401008470247288B4223811292C8168811061322002A1
-:809E800025028180299123414440042822771E002008880080080000000000000000000000000000000000000000110010011400775EA0441239D144049714242825D484A4116AC2814482451882F42111186C2A21D681E41828C226508812843B488B181AE842423242114F410195C1864A1246083A4741D24458821A2524D244D1286A13
-:809F000081224AF452C380A421314D548D887048C528438434323814D022E8843624218E9218548D283213C8C166D42402848B45B0930144C3842E93134F4884B86842054156B822845318842F240A4B53216441888062892FF9040082008800880000000000000000000000000000000000000000100100114001702907411A4221014880
-:809F80002428C0488140012C9141244888908890181512182434224A12022E1283A842467422211102002502452208804188012C48981A4844124448CF91429211254652B418701451846901C691221E8230C416B41414558719A443593444702482D6C22114E81241064116021847188E156C721C7311B824B448212422B842C141206484
-:80A00000C4224C887492C8488C3428F09DF124111811651982C4116D284146A848002149D4426145272489184168448B1434EC32642D1E4848135324002442194122016D11B5E242F4124841221022440841226D8A80344852001F290B4721472220210141241250A1281B18803941101525A4961141008024322821807382AC3444296265
-:80A08000594D8126148801602488825216014AC14888B048919A4481C382F46B652004421603810044C01884152286040083C832306600884C628848A40045612A400165C83C830149085820822434141D84A012124C0400290481DF7209102884A2141800009046813E88891112849214E05832821488C18C11C2A20054140028528C21CD
-:80A10000082818122012B221791112C4184C024304432802611824CF8E0F2CD124611121841054241E4185840C21008004110040042A0419127414012400C4800A4023014538281961411028048400181284218440F4482E20751222D11262844014541284D88431A9A91410247281889226431A81F86884CC72229964650A14412A18C8E3
-:80A18000212C4F8473112843644142116993F19C31128D81C122524E148A61A2C04818A4BFA10840442191121608B044415428488148850242C014121C8844040000160144211006A041C98C142219E881A212004842430112444004100441DF9D078051842112701241498841C911182414408458414734158441065028123B41148442D8
-:80A2000084221E22A02120C124211C3118E0A3048C22022CCC1248A4622C0222122843F1193B2002283028184782223088604270922821382880086632812E188E2249024334888054121A64C4425111448CC411184188801881348242604488908442A048221EC2F0F66FC062114311011140361155228171217811042C64198A3122821D
-:80A280008AF1881514448651414002121860818023A4411E624884882127222C88A2212301204882042B12A412A51414FA5DA30044194414C44444292122268214221498164C3245128C312490A24619847424E91982B321081E222416081A0849044988242208846144634104238A214844042022E254074B4812404411C41190144100FE
-:80A300008506008C01251841082C241409006086528C041344081224342430112218128068218890287024582886E884189888142FE70B16022005845084250214250884154834822018024482A0186024100C455832548C4254814410A8211908438126048120344C56C482428841221A08416BCA00C06224818082023018A81044240839
-:80A3800081490100A18A32222902ACE4214404200400484044C124882C08141341064321084906A012414148A8BF8F0245114418483119A41185942321B110C13281401848941A40C114901A35088515D28282A21211140029A4438543484148E84269186068181224162811E628C414281288FFC9038C0148134404803421204214C32217
-:80A400004110614128278114842B14948941859A244AC2142488148822A4C0E8814118A582048425E841228412024068851880584285F25C5DE0517496742444DE1851181F32D11E911B2F1A52398F127113DB9CF119334D1469B354E1619118EF5C82F1C171A7256187948F72F31D41711A31118B758D322A71217171028F61B91171857A
-:80A48000AF2185E1C2F12828CAA2511AF146C256F498C48B16A7A5C7641E5CAE145E244B13463B82AF250E6642512971457C15E6417221E62272118CF153A24932C345CC8217188FD868883F51B831B11168E31CB889B22591444E1A6E78642724378247C48F95DC4AA2185E4426B844361819F8833A2F28E8297433FB22282F2868418E07
-:80A50000422F24C14249F812A8ED824FA1B482E888AAC24F22F93DF99034181E285E4113E284518C8C76147D44F232288481161672C2F8388C24FBA24D4A84E7D889F8A56C2E8F257643B8A27A18F7EE698D7C2CB83294214941911429722A9F326FFCA181682B948D149D878B22186919B486AA52AAA426A9F82458A5F494348D2CFE6E34
-:80A58000801282D21281220442A084A084A08484422246220A1B4B30811081021021088241C21482432218064643A882120020080092208882848244F4F75B243F31F227259FF2F222155E785FD5F6696ADF17F371723F16FEC9F8BF9AFBC9DC3F74FC43D2DF18FAF4F27F3EFEFF934D6ACFB2E75AB5B1FBA6EDBF9AB82AF266634F16FE14
-:80A60000BBB1FF98F8F5957F6AF232A26FD5BAB9AA236F67FA168C2721AFECFCFAF46FEEFAA2E2ABDF5758DFACFC7262274425B2965864CF45F12622EB368F85FBB432DAEF44FF42823E8E243F35F6367485DE72B712F31D2D9F76F669271F33F321A7DFFEFF7B799F53D35FF845D3DF7EDCA8F8AEA26F2EF8245B8D59BF58FEC1C11FAB9E
-:80A68000FBAF29FD8F27A1DFF7FE2A65EFC4F4AC8CEF7BF232A2EFC1FA89A81BAA6F62DF82FA93E3B5FA9B957FCEE228FCCAC8DFDAF3C9DF2F2CF472626D424BE58FACF46C2EE7AEEFA4F1583A4F4DF7FEFC4F49FB98DA6F9C011F73F11777B5FB1E12AB12D7139FF6F23F777F71F3BB233FD3FB636BBD2BB7F8BFB8F1DAD23F19F9AC1A20
-:80A700002F2CFB1746AFD5F1E79DDF9BFBA5F72F1AFA2EA46F16F66562BF17F63E226F6FD5927A18FAC2681F81F3B4956F63349AAF13F2828F2F7AFBEEADABEAAF23F9BF3D3F5BB9B2B81213B494FC24A4CF6DFD3E9EAF8EFDA8AAAF8DFE96F4CFCADBA8F37E3CF071437F73F12B2DCF75F16A585F57F4792FBFF3F537359F5FF671F7BF50
-:80A78000BBFB1F39DFFDF5CF5BEF69F9BFBDDF7DFFD3B53F78FDEABDCFDDFBDDD8DFFEFFAFA8FFF2F22B49DFFAF43B7CFFFFFFBF1D8FA1FE3232AF88F391B85F53F13616AF89F2DFAF7FE1F1D3D5FFCCF8B8F2AFADFDEF6FBF9B79A8BAD2BA44F1F4D2AFAFFBFEFEEFEFFDCEDC8FAAF3BAB8CFCEFBE4F48FAAFBEA6A1004414001452261AF
-:80A8000022842642081224124450681285147148044C12411463444183842184011C0118842E11841420A241228608482448441AC4228A44244104FE74F0861312850381448D11284D111285013C51814486C81216885881888039815082422E18812D1228244E2461124014C2242144AF2269892C618834C0124309B28D16C0848418A270
-:80A880008941F1125FD022F41124A5F21124A7341F41324A1D24AB141D24AB9419B24A19F54A944782AF3439A42F1479B5D812F9A5481CF9254A4E814FA264115FA264192E4A96D5A4E44DC24A1F4DD236F49124C5F29124A7241F49726AF1912CAB941D24AB9419B24A19B54A3934AB9443B242792498924F8284FB244A3F4303841F4145
-:80A900001448B448711134481D24EB1419F24A941D24ABB4112F445985AF1439852F14718438426F8884F1245A884FA268114FA224F9214A96C54B8B29266BC9263A9189B49132489E6423F6114CAB841D24AD9419B24A9325AB144783A334242B144598BA61B82E1AFF580D00480000008240042800000000000000000000000000000096
-:80A9800000000000000000D0654CC1221410E881626190183B21244603121485813418411884C2860483440915B824C411918CEC82146428B024C412281112442AE491F228828A42A28487181C85C8882CC124AB1823E24A942884F022DF009224541427924F14410447118C811178884254241F48C489812611D318429481218440F88AC2
-:80AA000022881D12442F839418221542911127A18936313042189C41D818022938182143988800C0841C14F885E3003305911E288D12128D123841198471288458832CE484494C78217842F22C81205D9283486142378A359891913E48869A281F22F441122673188145819218B6F88118419B2826D812E988918A88A5E42188C2628881E3
-:80AA800016F229B920022444341D244714441413D12A011815481444358118C08140548100818C248138486F22448401418001A3E24162241946825228481C8804C014A2A1C08447824284773BC0411A5212C01240130120042400C082121C084624428404801221B1230100488001210017484572810400104888080021800200FF960A69
-:80AB000023525286D4223124448A61212225143A188E188361183D886058188711221CA4121538813412612E84CD42228449582249B88152415D386C7815A8219C014FA128F8C821154812142461814C186443427078E442F4E56A241D6236522516E261028A010089048F21C81813188B9812888D112866818264183424548E2217C32178
-:80AB800081866424868452341443D842A1184437488E12B048081088088C4144242102561874350E10250840542117212C420689010082908513014604434109A021604142220021E018018743501853D21801C18219521885421424012C084382044322F6D6F740489443C4412118454101D0240288CCA882821C43B114541C2D444480C4
-:80AC0000882148F421822227181C11246812A28490410082221321014612448102226081442F8112C21446B2260F1D18C04222214115342A235412284110048158A0180021112C88A41292004822548F2244741442440E6724901116D482014484144B41808611140200218289F2493B00218111111128182021011F882191416D4184A5CB
-:80AC80004204821A280410549270421818240200182391112843C12422608880810188818429316448004A6282F094441411254492216441323D2A3C24A112289311E4C8B464688D2CA21818114E14412C08301B411DE82AB427A8218C44F42112446D12144732411D14B6848341041860188C44B214926612412D384847894AF2D4DDA0F4
-:80AD000018501AC4251151141604110029284953812417815449D448286814A084430224508210C4242948A492C01280814242D81828911819B442016081008304208242F8D9FC00802292211901839111C01486221101180013129411E0111204211221004032140020019A12242201400110641128812121100400211FCB418222021839
-:80AD8000404816011319023082B02408AA91482A4C8412681C8A018561189014414E148481B021812A0822888089A8280025884218C2480089D228131414F44BC62008105282828481800A888008881C812801101128022612289231A238822068410010215126B0212151228002800180618120944842482F4C0150435041F028441524FA
-:80AE000012121401002130444121482144633881140088001061226C91282608402C2281084038214441282100882908002504FFA9042922024415142102311880010049A241231502339136154222C22220034A11810150228E11810080014100240018400421000050822F49020021402812888212430210061228513223212218220235
-:80AE8000192142038061221001001288530818101184440649C222908200101404F0228C901425C82242A2434802438122010000112014440823038C082094184C1212489868988C84A82800412A6418E21160428B8291818C11C828682283022942E4250F128244364304215400113018141870244851241A420845028400400920223226
-:80AF00001341218524031A08226012501480018009241885044226012FAB0F84904200182848244D425062C0220025224201E01C3182B02131412E812022188468112E84118C9811481C11D182988284182125428C84220112828A4221C4282384F6A39F6062E39A2638C9F8183869E2F232117F6868412D821E1229088A5A7B1D83AF6174
-:80AF8000267113011D241738F01142205A81AE1614471A122B5A6D18983218D071C1824A621260684542F82C1418108C84688A4521144813F2121C80230857112E214D819516C9373E411D11001718E04111F4543417166F287128B881FAAC126E249F18E8127221C161811AE24161A18F22D1B43AA11B638CA1824B184BA96B182B131EDA
-:80B00000181F3A3A2A2825E28418E9236389AD8AAE1229F3282845E844E4547244F8CD9E2423C12326726256C3174626B812148253228A115A242931247A37A2186E646CF134551E8929E88212D28AF313823E31493C244ADB867219646127189F48A8299F132862C38AF881845A511137142A12721453882D1218A15A48B4387626B82461
-:80B08000E442D4410C001022280442908480082C0888804888084415088440088482452808808802288581562C288581D23888820800002018084440E45743D26453E6455466CB444F61D153F415567F65F185472F1981F88A8A77783F39D157F89C9A6F4AF2EA76DF16FA2ABACED98F5AF91A833F18FA6A48A5F26A411F3BF8CA4EFFD165
-:80B10000F821A48FCBF268CB9EA41BEC5F5A7BA8C8311FECF6F6FCAF8EFC8DA59FACFEAD2FFF2E56A2AFCDDD4451B9CF68A8818F8BABFF5F42F22C26CFC2B224D2CEF2EE76246F61D3E67626F62767BF8EF4755FFFD2F437563F15F1B1737F51B912F9AAA857783F31FB27B5CFEC7C87F77AD6FF369E82ABDD8F1BF9919BBF9AFA4BF9AF30
-:80B1800021F352F99FB9F8EE6EF7D93E858FC3FB4CFA7FF3B263F4F5D58F89FAB9F95FF7FCE2CCAF8DFEBDB41F3F7DA5F6CB472FA2F2DAF8CD1C9FB1F18C9E8FA1F9B89AAF8FFF2524CF42926E4F42D68CF34ECCD066F326466F62F21612A9F26D67BFD1F37D3D5F67F226E62D1482AF81DB77F81212674ADFD3FB74E55FF6F7C44EB79832
-:80B200006FD6FE949D1F3AF98BA92FB6FC131B2B5797BB6FA6FE3725CFFAF3BE2EAFC6ECC9BAE1FCA5D58AFA89995F12F8BE94ABEC5FD8E81FFD2587AF54E48AFA5A78D5FD181ACFE8F81A888F83ABFFCFC2B268F66E6C6E64CFC4E7E44FF21232AF227226F477339F14F62D27FF51F37D3517154F63DF42A119AF89D375F832126F4AF12A
-:80B28000FD7D4F57FE755F6FEFF79311DF4FFFB5BD1F3AF9A3A1AF37F6333B3F1FF73193EF667E17F5BC3EEFE1FB4CF45F5BBBC1F695D58F8BE81DFB15A6EB19ABCF4DBD1F3CDFFCF86B612F88F85A58D5FD181AEFE8F91A9AAFAAF8FAF8CD2CCFC2D2C8F624648FC4F68398302230269016844B1216683200120034122811241228922048
-:80B300008812819212281828228121800188D0140818120014001260882089028B246044F09643004410312411244440C41340021441272443034118411C42424122414211261184120425012001908213480224008424404218588400007F5E0E2D421F4152381F41324A1F41324A1D24EB141D24AB9419F24A9251AB9443F24A9143F21B
-:80B38000429147822D915F82E454F9244A5CF8244A16F1244A96F1244AD6C54A9E242E5A1F49E222F49124CF22F19124CF36F19124A3F68124AF36D141F26A9119F24A9251AB9443B24AB9A4B44A793498924F82C4944FA2F45EF2C05A1E648D421F4132481F4136481D64EB1419F64A941D24ABB45F81F2488453F2489147822D915F8205
-:80B40000F442912B424E944F22E554F924C256F12442D6E122644D3CE44DE2B2F5512C2E429E648F22A5298B121F49366A8E64AB168E648F46B991B64A9B65AF1429B34AB8A4B44AB13494926D4889DBA475AD0720080000000000280010080000800188000000008400000000002280020000400414F08D88006B21612121142CC222812B
-:80B480009F28423888A51142433811110044B0110244811612D48154180012498801411C224321211274124301871585427681424224011048942881BDB8008601C318644210C8124880022C31481504B0A841022601281044582816044711282122105112400110D11888129811001440482152822682924114485BE840624F25424A9482
-:80B50000242823921A2F8458842C2A82314145111161815062222E1122418E188351269D141416752122C1A489116144223814122631892E111449D1184548C42181712880722232449C2275DE081011C484100184902121848503A5428801A800110010048442840000401241110100442542480124112D820012A1101801842EDE0000E1
-:80B58000120000180000414200400100000000000000002800000000000000002100004827AB004184130211420020010000182001142818002C0441218314044331424C0214100680040000844400160810880140F8C44C0044A02140810412200100422001180020016024002140044C1142041140048004000081440089410284120054
-:80B6000083F4A3C4004018010000000044000011108102000044304800202402222400000000000000000000F0E31D0040030018004008400240548142004800000000440048000000114081282108004212126048808202F0B222001042122102002400800188800440010000008110022200004421001042088440180200210000009FDF
-:80B68000C50A000018001008200121102201000000000034000000860400238162488001480011000020048002DF280D003160112218004008801112021C840411000000404A120428481004442412288614112811088411428011C284422280021FB80A0024100200811022410220C8148400800400004001000080082400112480094A6C
-:80B700000824001200002002F0DD54000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B50000000000000000000000000097
-:80B780000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000EB
-:80B8000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000006A
-:80B88000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000200800000000000000000000000000000000000000000000F077B6000022000000101A01008200C02820020044400800240000282212842210012885020018800800E9
-:80B9000080041FA54902301100004210022C048C0C001068114111841440014242800480028240044DA1803118288C0112001400402811048482C71F00808102000000A13100800881C0281189120140844408424022028880824244280211122885020018804808004288CF85082140010080440280048E4800003011440000110042003B
-:80B9800000000041E0120918162842081200140000124410086F2705224C0220023011A0410021001160881448460128204488024C0281884222111800165422111816486289811319389100460289012812004F740B10D224014156C218844CC2888E2116B8815181D04814945116C8A4263C218C641295C441B7441634423C1101881200
-:80BA00002096141723841B1426421204421C021440319A80AC681618A8828C342CD7510050241004161811E4893481184008150893094684C421839421C4833424122B2414210018A0244413128834222447816089141008C088248258898102C024DF7E022CC2241220C2523018288012989311304441489C217A240922C04134994444CC
-:80BA8000845118888A84422181612149D112512112002364821B18141B8114232124B42808818AC348846F390369542C442341148802164802578293818802481814608188221B21CA12642CC08C42402982028227E1866242688D122E5840280211828718CC8211262408164804C6F8C8D10081601400AC21624441184180120800980079
-:80BB00002518042021280284144501188114424180010000902480220142848301408803AF7905181028628400001C011240840182422222820088854408420000820058106821008230839011810000832B012C0188009FBF0C27415022164118982829528474188D31144400C88089421868422AF8A448C448224D888304C188223091C7
-:80BB800018412D12188CC14870882162118581185148186F86981883480287481A22F491D88044148C324480014A21019018828903A0411C029882100100290440012818C04244A9CC2462B022092100286088188081842191180086D853064412C48345B41852C20044200400004C922518184D28282444AC51840084141800003820120E
-:80BC0000C849002092188A13283198AC1BE821282133481280F2BBA70010816221530448C082C18692588632814562542418609288A3816412444226F42218001C82149152848284214880B818029B842885240810022004184142B0470242491201830442A0148140011504C02440648248181C5448800184542A2181844488840400802C
-:80BC8000222CA1418048A32500211A088818B0883448487F1F082131504212403448C58268218E28246025222C21A4840048242890421684A48221001C92411C3222914011821168148180064001008C0820089885F6C55430811008848B241C02808412210480248881140C1430C4C813041001222A0100200414228A424821C2B8242C00
-:80BD000011C481882C21088A1484182CC881DF260C1E282244812D440044832412881248314544114712A042112A942DF0251841840011C28116088242106181131C984150811C2464D28E418B411911382825028AC4581A82013F81054C542400401188028008C0488002B021088C28082800484601891408862114418148280813048165
-:80BD80000081C800428A0218120000223FBC01134381322422411B124034484A41480116840416010040041008190220830400112200141280E41104188041480122278200200C587B331484800480018150242264884FA40215224482314142153CC299814191812788211312099C123812841448218908110060584C54182881200460D7
-:80BE0000880021883FFA4F32341F785348CF42C51E1741604416DCE452C82E22871517241B442C94C476A3628321A44E5DA6662832414E141F54D81681C44814AAB24134524E418B1411A303BE58C6A146F04848C332A24B884E184AC122A323A14C4D888951448E593AFA1315F041652157822D284B43C7164D4D81C3A4885AF181C848A7
-:80BE8000544C1161451D345B911B4689D649E385F41D248C9A4C8D492AB22938188D214E288D48811F1A1451118538814E68819D489D18682AE99CF248381F91B41948989A86EA88A111DAA1C18B13F048445F1A43813124142483C47A9B328C86B44AB4225A1A2D88EF887496F16624371261275C4D281F91D894782881DC77E4D111D682
-:80BF0000AAC4221F92B2B1A15352B42C81A2AA24349F18F841218816F159191F18A2D11F31BC4A43F19983B6A8A4AF22988228C6E88CAC8586D2984F02241004230240088220088244481001008240024014010000008880082E8100482200001280048220011281CBFEE027F62222AF42F22C4627447F44B37631488F227282F2DA923FC2
-:80BF80001CF628426F78F8D6F41F26F6838325F3B7855F54B5A1F94C444F1AF8642F7F78788A4AD97654772F94E4187821A8538ECBBF391DE388E828F89313A5F9519117841D119D1819F829819724AF847511C1298F844CA8EE2B548F81F84C4C8F8282ED2BF28881242F16F265615F62F2264447C47D3CAF93B128F26828C5FE5636BF4C
-:80C00000BCF6A262EFFCF8D2F23F24F4C3C737124F1FFC45551F2AF97E5C5F53F5CEDD1F1CFCC1C346F963CA3F31F172789F9AEA94A4558FACFCDBDB3F14F4C1C98FA8F8135329F471B89551199F14B439F71D95172D3F1B7319F181912F27F4BAAA8BFF2BDC8F81D864F53A688D98EFEDF5F5D4342B771CF42C2D4F62726EF67537CF87EE
-:80C08000A1158FA7F7C24AAF6FF9D3F2BF25D727F857927F77F3D7D77F6CFFEF9D5F56F1A199FDE5CFDAFC25595F1AF848CA1E59FFF3F72E258F96E41DEC95F438388ECA3FB9F923219AFD19199FB9F96B291F17EB94F441519F96F361A19F55FD19918F8DFF91918E8A8FA4ED86E522BA12F118184FCCFCE6FC8AFDA4361FB64AE116F4F1
-:80C100002547FFE2F27E2CCFE7F4357F8F97A5778FA773CAFEFABEBFADFFDBF8DFB4F873D37F73F3F7F77F3BFBFF985F56F1E1D9FFD3FF35D7DF9AFEA9ABFFF4ECD1F5B75FFF63F37B799F99EA86A6378F8CFCD19B3F14F499D19FB1F1D393AF84E49FFBC9C99F94F459599F9AF6D9DF3FB5FDDBF99F15F58999AFAFFFFAFA8F22BAD2FD55
-:80C18000D8D84F4CFDB6BC4E52EED26F4F0D18702441B824812482044822008254111081823448F0482470480483149128B0488231482044011484148C44C148A0482286089A4463892886089A54489244F0A62470A40180021658184441842724153848D02298414E26C014221411302114114445083120022420224812210242F028115B
-:80C20000112419941860144002180048836418BEC6D022F41124ED121F41726AF21124A3D441B24AF1112CAB9419B24A3995AB9443F24A955B422F147934D812F934481CF9244A1CF8264A16F1274A96E5A26D59ACE449E2A2F491242CF591248F22F8912483F69124AF16F18124AB161D64AB9419B24A3915AB9443B24A79A4B842793420
-:80C2800098B24F8394984FA2B491092D481F41961E1B21A72617C183F411242B161FC1724AF41124AB345B29AB84B2AD154B4AAB94435B526F8314F2A4581CF926C816F1225A46E4A26941BCEC49E2B2DDC1C2DA1F49F628D21F41B26849B46AF18124AB121F41F44A944CB24ABB15B24A3834AB944F82B44A733498A26F8394AA2E523F06
-:80C300005B080000211008000000000000403412281884000000004008000000004004000000001082729A095024844008226014191428B481142C088419248612C421105414222001184028220444802112217328011CD21834421218420041244A93480084F01D5C90148260422F42E45132184A63A120446221705942042A010030886B
-:80C380004284C01A40314819A1184C514812622C511818C88541C48881E02861124A18216884A46048184D884091281FAF0A4446548226D44296118C8121C54141482B52444A111438512A24421421784244AC188D121214569811199814898461444E182118C814260D1362B48816E14304888944448202A4406883DFDC0D180010C824DD
-:80C400002268850383043C48D83808200200228140210200008C81120422D0188142E181028618084E12288819045028E044E981C48400F0AA862002A02122282270242111021440011054484011440181554215011502000000C0241819021181D018018521189844240050484144F0934C408441114251614501304242811818496454E5
-:80C480004B42A72913D28285CC418426D12784E4A2C51E1628140D121A763231B24B1219C1192D24121B41484AE28834828242255127008C52288CAA424E28814E24C7F5C024121112266112330244582904168161144521D48651164A611846051972427146D324711C638146430918182F21022E1414CD224B121B211142008A8178498E
-:80C5000052211528042782E08208629044EF77040090221044041D220081004142432278284288048501C170680100440062118A03121901A0141183B648581A0088412504400A4F8452844528F229B72084911129014121212601194101471C328884902512C0824411808181C81824C04164C0122AC42228292181810284A484550227E7
-:80C58000820040220A984E2A2A6482CF3245D2415248608490139028D04822224488020028814440C211502852C084888745C02162C41124841A14212406224916827244889121429820518483144212C882AF540900221418812A0484002A318285022582384C8887244B188C02484850C12306604180298422018002A501C38421048030
-:80C60000280868124304442200F02A28D016C2142C1181711BC642282601381F2681D82D0423D882F844281362412D94885C41512842842742921E4A16A42442E944A31223C2221C23F122517024D88466A4228522788A81A424C0124F88D224A4384262ACFA864880042E411608204218C82C1410288801008D848C0426084842605148AB
-:80C680008141009E24A02148905220442882C41210984118009218490484608281F013F2008594218004312448241180044834816094446044833848145214441C011222001142211542A1421502841135184148581800220084C04448423FA80C1248484C81C224441094114800400410140247849841444678284248124888E42814F8FB
-:80C70000C12848828084318884A622028A02158404A3C4888C1CC8C84008008F79045880C44110111184018001241004284D88AC82124842024CC1148B8100618218121240618148124413446112308248114C08244140582249485824125F360930118082110200250421212D541012D1120182822284828B180042804C13582482802852
-:80C780000180881488984A428150424288430C48212002888CF25652A048192402111400001304004454480081C0242210543242481884443400818034818484214E2A488C9422004861480000448880CC413F380844100140460442190120046212C446E414C2144184791801C1403844152444481111C22880020018811098488484817F
-:80C800004180888842CA4810024FE407803114471162422041841402C022805412880081800418228C11014894C0142014238114414122A828884001002100A048001048F8EC8200404412912280022D449052216905290529054A01806118411450414044824442081400D0411182012140441215129C4446485224C241CB288482DF445D
-:80C880000CC441182382019014180044800210643A43286A289022442F18015C2C591411A90114121D124618B1182C011D14111488112114C02100604C00268214027F74054F44F4941136F425112D6327544450242F41A1442951226941764256376F22F864882E4447844B2C41C774276847541E4813341670117262C21227B2899462FC
-:80C900002188811F28049E312B881F2C68281113F44A47A44AC4824AB68464426D482FA248E894A8443F4B071AE144D41561419025114D364C612425410246044D11448E1427484B88876285C4ED8246F821328D148B188954896D4C895C4A9B945E121F1828D588F311118C59E4BF825C388D28AB22C55918D04C788848788C48B8CA54EB
-:80C9800028CB488B44C398285F5F0150812CA2241B17265216125AD41554211AA4441E426B461B4187841F15D619F4183A8A68838F2A9181DD81878177144FD1DC51F1C4478F1471813814921521D41171913142C713371546F261282D411794234C5A85371465F4C444884E82AC28C824474A2CE488F194720018400126020024C012C0D5
-:80CA000012C012C012808184A148814800008239A128218A82A128A028148AC212400180440124002220022004281FAC0F4D444F55F114135B314F43514765F424344267512F1461212B156D14237516F45E186F46FBDFC94FCFBAD4F964185F91F854C84B8C8F367216F746C8149F71F1159F1F28FA94A687121BA2DABDD1F8A8281F1294
-:80CA8000FA91AD5F4CF6E9E81FA2FA8B88BF12BA4A5C199742D5F5472D4F42EA24F64E4AA3FC6E6C6DA8CFC2B248BC48E499041AF4591D4F31F175745F45F5654435A1325E145D156F5581F1623447412B355D14FFC4F5B4A4FFDFFFECB84BBE6FC6F175C14F4CFDC581CF365B762D888E81DF7DFD95158FB4F684A48F2AF8A9683AF7E1BB
-:80CB0000E187981F1BF6516D7DA6BF86F7E1EAAF8CDC39D88E5889DFD6565F7FD4F224244F68FE6EEAAF86FA4C6C4FC6FC666CCF44FC78485F630B4F41F514554D135F53E325577765F424342CF157472F74F142522D326F6554266F74F54F1F6F7FFAEEEDCFCEFFACF8674B5FDEFD859D4F98CCCAFFD1D515E58DFDDDDF6FF5F572536F3F
-:80CB8000EDF5CAF83E181F13B39195911F13733DFDEF47AF8EFEE9EABF88A8E69FC45C31AD21CFE4549FCF44FE6C44CF24FCEAE8CFEEFA46E8EFCEFE4CC48F8EFF4CEAE041F419555F31F165351F15D57552424F42F344545F74F552152B456B644F64F576444F75F44F4D5F7AFBFFEDCFCFFEAC6CC7CBDF9AF9CDCFEF98FC1D4FFFD5F503
-:80CC0000DD5D5FD1F15D5FFFD1F5B8DA6FC5FD587A1F97F5D1D11F11FD39B98795DFDFFC3F97BF97F7E3C3AFBEFE6BEBBFC45CB8FFB4F6CECEFFDEFCCCE4CF4ED82CF84ACAEFECFA6ECCCFCADA4CFCE8D86F1C0741009014100420011A04488044A2414C22D9482251480030481088210410020000148422008414408244E18804848182C5
-:80CC8000818220F83CDCA0181371240247342814B044115122001225341521130884209828828515E35112428564112528413A11481341618124118724F0488128A512114208602441AD82200481144F9E042CF511248D121F417268F31124A7241D24AF24D141F24A9219F24A9251AF243924AF347924F8429347822F14F9A4488F14F992
-:80CD0000244A4E814FA264114FA264193FA264596D5A9E242D4A1F49C2521F49522A1F49724AF39164A3F48124AF14F18124AB9419F24A9351AF243924AB9443B2427924B842F92448984FA2F46955C05A1F41D628E5417248F3112487241D24AF24D141F248961D248F241BF548B243E2347924E834F924482F14F9A648AF14F124524E76
-:80CD8000814FA26C116FA264192F8264196F92E44D7222FB912C2E4A1F49762AF29124A7261B68A18E24AB141F48D26A81F64AB21B288F2421F24AB24382EB82B442FB22482BB44D1A6FEA0E8480040000004004000000000000000000000000480000800840040000000000F0B5A40025911585041C1298211480441141044B4242411CEE
-:80CE000014480441C4457A2964114562428A0422888B52282455821133212448141140111938C4212229120AC428484942B2A74E22240811414440066D1220018531111280389249F84118841424112084A481441887281E22441F41A82422830270139838414083442298188C0487442C0824C01414421F930A4642681119044541382400
-:80CE8000403446196112C5012A04601984EC0441C3512DC7181C714492A48E44189129326A8DA44215342A2D411C321B8902113442912FC2E884394A2822850285C622412846D2CC01211141C441281051321200001C31144243384243C81184142420220412002A289914136122281800B04251410014004100A7648200A04144F086816B
-:80CF0000501211004732100824000040060024221045015082444508002081012110224141488202601400502884002400221884BD3A60412495141C024581C41441142342E2A831115C41D4813885248074240841502B1B34453812228849024113641116CC8290124906864408304148121A0227282608481CE18228765E0D494151C3C4
-:80CF8000702104C4401402219018181C011D88342820440941A44599464508288880411211110A25518243143284841904198414280188250848288C81F431221003405C22102124414421422258724144C084101265420021E0910223016043402484C1141A0818282200000016C2282480120216A1288CE2510E2D141D148915218112C8
-:80D0000058241229348317849022102248864122E82801108481A484212418565184184819384210026042308243015115A824004481828486582840F65E3D00C0214210C244104444D22401491248022028417848629624884CC11288260B4543612A4126182224119122494208C1243843041C02C484244424221622013F760A0000007A
-:80D0800018181400000000234104482812004011284104802102224542041211128411890224004100123222006604AF1A0A16D41491390023325447211664442562252441502282160424A094164982082C2534192415042E1C63A2243DA244642042C1188415C8282214A51141144464218A618284844341F41F62100210810181400327
-:80D100001C5881008140022D94128B8426A824401444418A1226915282184008291191124C322490861694124880048481844C02292AA12424CF544A92111051634410042C021450A22441444011420686840140010044894818480C8843094400241684112401004144411042984C8034286E3960244143021068228421C190C91419C445
-:80D1800081248110AC282811CDA14004891261112CDA24024C18A14848118824A08100883728241821182B282081C1824B3821203884E769001113018485035191290200411420412491111200241424484C140412A012100121211601212121213024284024410283820189D44804F0529210242202403428101471828814048984410105
-:80D200008681488112021044418228846424406244002C42982368121240084812C6488214180460298041F2A77E7092114108A124441391321C021114874841861B044150241695143400444011444237284100142C18011004211820130444405C228041041E4827268EEA004302C1241C02218441004A181108161802440021442445D1
-:80D28000014501404C48C31140011200450200002022010000A1889800A76400002302481184C08819D8421802886984781498826088222840082028B4C812028840A9488608420080C89200218220391C208D180480D848F853FD10041881008001882110085018458322011901140050412001604112002484212614312244410019019C
-:80D3000000242C018400C018007D7B408881044014994411488425048B282CA448800114617082021C1182289884202444D182918494127818E081088C041D5222C4234104E02108122C222114023FCF0E27411748CB224D292143A42257212E165C12D91218F888841FB8F8CA8B1D835311EC1841A5282E356140D544F28181484D8889CE
-:80D38000084BBBC5B94294C1A788A22556214C18624829F882122F32419812CD8286B448E14168241612DE4821C1524D283F254B5211471218A516DC6252C8AD1C15B984B482E824F4438A488B445163E142A19815F2169A5D15C349517211397444B493E84AE244764F58A23F41D15D28AC111A9B352D218E32642D1882DD411E242B366E
-:80D400004928F4148216D22CF1181C23688A4F84FC42D88A68429FAE45B144B112721103849559371C942ABFA2487B815814555B444CD5C8512A37414DA4192292812415185618D054E124D4A6C156812048D33558228715707238144F21E42121011622E3418153462598A2981E3623594856F888C21F294721A4123022200466024240AB
-:80D48000A148002088428872810815487482884228C41828618121102404B02A018B14B04C088B84B0480887446044402248044260443FD30F4F4677157421DCC8F44444CF46F669489B165F41F72E648B481B8CAEC6CD8A1BCC4F1555151B999B33CB334F12F22C29DF13F188868E84DD3CDF44F649419AF9E86A8AFDC5DA4F81E198F808
-:80D50000C9811F3C7CC2F2A92B1F13F711186FC9D98A945AAF85F448889F8DBDCAFD4A488F88A9FDAF84B592A9DC8F89F9AB3C29A4DD8F88FDC8CADF294CF166245FC47419DECA54C6DFD2F24844FFF5F1377CEFEAFECEC63D432FE2F68D861F24FEDE57BF91F19D9ABB33CF43F3B9B9FFC3F339319F79F98A8CDDBCDF44F64DC15E51CF05
-:80D58000A6FEC4DECEDB2B114B88DFCCEC2CF4825ABFB2F23B581F85F5D4DCAF81F51A562BDD2B85BFC9B98ABA62F5C4C48FCBFA1614AFCD7D1AF29A98AFCAD242B552A588CFE9F31997F077645F53F6112AAFC212FE2424DFC4D2E7F73F344F66D2CAF4C1883FACDE3FD89FF4DCD9EFB1F1A6B36F99F9B592EF9BF9B7314F93C316D5BFFA
-:80D600002578215915CF9DFDF452EF45F4584BBEA2CF88F8C5CD1F3CFC93432F29F11D1F1B44EF4DBD9AF9D21C2F2DF99143BF42EBA3A3A94F44E449F81E1C2F49F97A7A2BBACFCBBB92F852188F89FDCCDEE75A147F52F639649FA3F26A2CE5F8656F3FD6F23F7EFFC3F3E1AAAFECDCB3FCC7EBFF78F86FCF7FFDF59F9D6F1BFB96995F73
-:80D6800063F93795DFDBF3353C1D1775773FF965495F1CF4DCD94F2FF55E4EAFA5F4BABAEF88F9C5C5CEC2BF39F19A1A7F755313EF4BBB9AF9C21C2F2DF8994BBBB22FA7B6D2FF8C9C8FCBF95656AFCDFDBAB22F2BFABCAFEFC9FD58588F8DFC6CDEFF2B051C01148445C2482484148424841482141B484048248122080060441144208448
-:80D7000001214200616022C08212002492204902200112832401F05CF2A04A442400441444181514424852812554842D12842C19153225184011032019A42125C8248C5141241249285112909244301123020044431108294858421210D4A20E2F32F41124A5F21124A7141F41724AD241B24AD141B24A9921AF1419B54A3924AF143924BB
-:80D780002F147925D812FB25481CF9244A1CF8264A56F1264A96F1265A8F59D2A2E449D2A6F4D1246D421F4952281F49B24AF19124EB141F48B24ED141B24A9921AF2419F54A9443F24A9643FA429447822F44FB24484CF9A44A9FE90C27921F41B42A3511A7161F41726AD241B46AD141F44A1468AF7493658B9443F24A11512F347BA45D
-:80D8000088D38694B22E581CD9A6EC1572266A1C6D1A8F11D212EC41D2B6F451286D821F41F62C411749EB141F49B64E9161EB141F48F64A941D64AF249B61AF44A94AAF64B1A4E44433A42F447BA6F84A94AAF1C8464008000000004004000000000028008800000000000020082800008002009028004001BF890A6441501800E42280CF
-:80D88000C112818480413181411C011122986C0870381154822C5124244A21220519014711444D11690888A042128031128301882122B0281864443F1A492163388445227122054C648245028E4170841279841A48088D626241844041128421318836212252284722412220888244825182C712121B821282448E221684722462E12A657E
-:80D9000044163988AFB145D12463548414182742E4228C1234169126089115D6811844D128522180211923584A437112688147121D222A71283248614A031939245463184238244B4313031849C2B243819A26ECE222447C14A1815F210A0021C42111C0442041A2483084296188408881A42443928841001E21002C281122041E241001B7
-:80D9800044A0412091821508821882294108402281A14A814D48F30E410050141008850214400140081302410085010014000088282A0C29410400152444081200100410024C618288161808EFD80B39321125951C256AB11D84C0446A08AB4124A44246048141585142284245584325062484BD168D241841200427182419022242708216
-:80DA0000A814400924112482245220082E846E1CC0241114001C61C840864AC15810185248D01812C4541442141018516200846C712428A1488005194802112246088CA914000011804804828C08884F374442C11241CC516BA4113048481052218084040040048C824414160124509282284342024421902144420021009144245022C011
-:80DA8000128307188449F2771E00407446424203250244114B1621A82518186624008C412211444258424C1851820049022480C364301225E58814C335281311C428254204800428224E828124EFC90C440013042241142800C11143024018662210522840820848882150851008282445D8827424011800108898252840C214218465487D
-:80DB000012642118F0DDFD804114038911CC484001004800120020019021144810218481041200480012822210642270820200004240841118184804AF380E415032418542D5C20429120462391444C81A506222301A81146488A5424594132954947024084824442B124F12B812D214918C1D221674A82299215022416C04464A2C129AF5
-:80DB8000484901EFBB098C41141491128C4212410114160882215048482412003819A1142084048480018012A221C14002460226031410082412108441C82492812CF1D212805414850246591212148344012044A624418584012481301400141088110C2982420426244202282840168428010000E2008694944908F0FDC724165C281812
-:80DC0000113244100281104291881C1112420A63A2844D41C0428424844160114481800224244C8632411011014433021031244C1218582600126D22F0CC8314244200801452249044A301C18C041C0425250110495649901C00000040584840044C14012508188220D18215741208400C8220483294DF674A0224404C02241001119121FF
-:80DC80003902008244812008000000348541164484D24108BD44D048984519028419D281820289130461238201230229014DE120588216344211111824448224206848648210682813082029081048D11401E0824144023821101442941A1851218388224854124180220840644A6CF17E3A004140314444460160618E481041924984009F
-:80DD00001210141C1A0885010044241008000084382144848819020000842220120212003F2D0E4311C12160818163022221182E81001044C41425888202A0411841444918180800280080020082222281218165182221021221384100F0799AC04100410085046C240882483084148B481B28461C242808452128414412481244048110FB
-:80DD8000031421442110411106181072880147214140042114F03EC640081904610015141111711866812902860A2150382410228801888E28449018189C0849C11841898C9518184931122D188440AC148F11021028A121111200F0C9D650343F184414D94511D14D135656618714A9D8265162CB24A542F81884447712837448E9C17135
-:80DE0000DD049518FA88814B111556432F82618222411D22413CF81C441F39741471821DD922D25B4241F2481A5D143D19811884265441414B11344D143F9E4C925285FE12122714A715E5714212D12112F1111217918354142566C885F4241947A54427224D84249C14E841414C52588445321882CD2426F4941544774223A62226F21C50
-:80DE80001247111D1445BA3288A3C12721CD84E0A8F23A1229E2286141701425F125BF145614D49152442E4A462641E784E4FCD982E828D291FCC8881F11FC45816F247883929A8DAA4B88139884882958144147C284CD1187814D24E5446A81237222D28842D2CC714294212C739CA98A9D2887836185A9214F62F22C444D241E926B8213
-:80DF0000AE128E842ADA22F84FF520112411E48902282428A02824824482348214823448148A4421488151180018008A82B18112B28182A128A028000022000084444024432402BE75A0555F54F13D3DCD5DDFD7F53115DF95B525F262681F92F2CD491F13F352449B19FF85D79DF84B48DF12B251F5ADADBF8C7845F91D18DFD45CDD55BE
-:80DF8000F911194FA3F312185D1515ED83732CECEAFAA1A73F72F3618DDF92EA1AFA21236F7EFC9A991F13F2AFBF3F53FBBB918D32AFE9F91313BF9858CC8F21F32C224F6AF817926B914DA44BAA1A72BB0A5AF514553F11F13131DFD7F5794DFFD7F725273F94F4515C2F45F5BB39AFC5F65955DF95F7474DBFB4F4AF2FBF95F5AFADFF50
-:80E00000DE7AC7F91511DFD555DC5D9D1E19DFF3BB12D1FD51579F13F32C2CAEAF9FE8FAA3B31F62FE29A91F18FFE1E37F72F31B199F99F83F3FFFFBFB9B9D8FA1F19ABC35F39BB94D248FA1B12CF3A4A46B886BBB4F4BFAB4A62BBB2741E045D551F4353775F751733F75F57F7975F44B43BF34FCFBF51F31F9DAE89F1CF4CFCDDFB4FC90
-:80E08000CECCDFD3FAD2C85F72F2AEECBF91F9D8D89D99CFD8D89D58DC5FB2F2161CDFC1F11D1C8F92F2AC888FE2F2113E3F7BDB43F4A9291E311F3BFB4F4BBFF3F3393F7F78F82FA72FD8E821F1DAFA3731BFF858EAAB57CFC7F6B4A66F29B9B6FB16944F4BEB28D9E1016F45D554F11C1FBFB2F355F73F75F45E5A7F72F26B63BF2CFCCB
-:80E10000F3FBBFB9F9DEC99F5CFCEFCF7FFCFCCFCEFFFAFBC3DA7F7AFAAFECDFD9F9D9D89F98F98C8CD7D1C5FCAD2F7F51F11D1F5F51F13821CFCAFA212A9E9E3F737222F6AB2BBF9DF87171FFF2F19F9FCFFBFB3727FF7AFAA3891E32EFADDDB3F1BA9BE7E2AF85F57C7C4F6BFAB7B22BBB4F48FBA4B68EB23FBA04211002415024102493
-:80E1800041023484000044828504850481001088111812081004618421842E121648012041824444482241062800F037F61014512640538100141749218029C18541A9688921265842922048141418441144111458A4104204444532112542543A15148A120825254244181294124150247FCB014D421F41522C1F4132481FC1724AD241F5
-:80E20000B24AD141F24A9219B24A19F54A9643F24A9143F2429347822F14F924484E914FA2C4816FA27418F1264A96E1A264592E4A9E242FA2F491242E421F49722AF2912483F69164A3F48124AB141D24AF269921AB9451AB9443BA4A7924F8429447832D944F82C4944FA2F4FB93D024B411F624421B2183F6116C27221D642B161D64C8
-:80E280002F62D141B64893652F64B124D41891442D334F82E414F926482F14F1245A146FA27C18D126E519F2224A86E5B2E459F222481FC8F222481F49F62A421F4832681F49364A1F48B26A7191F46A961F48B248B385724A32A4218E482F44638B2D946F8AD442F8A45ADF2805200800000000002800C0880000001880080020440100F7
-:80E3000080040000000000000000405412141F7A0242400216018448118A249281C0433084D0282C644832862823480418C421244841482422163214402108CB2143024068882088084CE881248114440488BFF6431264281D2824501410C41841814A41189A488F24110955081414404C48C442F02841008A2292181C0426411CC4482623
-:80E380000514A351941AB221115838172190118885421838181E4170A60748C28C1262110049741198C443E211648219344247813187245141368388E3C118242855C227122448532852288714122752845C246412CB214D21835158CB211F8228428319B28161841618180456B112F87A1410062501211514080081822484818A14283850
-:80E400004882508100814100830420228481021241908844002100128186480144922448814781003FE50B414C4201004601A021424023C112004820089028150800002140028002440041112502002482148240880125120400F04ECB8002872244C446C22A8944126811130314205922912812AA01E0425482457214D84112D6A4B15C96
-:80E48000B294322C8D2463912629A212612B81E37388E18A219822822C0285C5852D142E488D842289A424444CC1845F4E01C024284185843441842412180031800842202802D0141248426C5244612D242A28D2684226322422214B1821822309298288481165584146988C2C022A041888C7D6902450290024872248302813B42111214C
-:80E50000C1121642528122181A0826C848214412106281837514420C3845021264F01924A5C128820029123288248C8143024D48101414F4C72E804674121824250210449131C334124AB114C2828841822C230400A3081904CC42444241220448CC8364284489C12C84C01462412270589294A01800AB812CA838F0496B401448A1422156
-:80E58000A1401509901448C58102460813014B18AC69528128496921830181364833248762A018842A0400881400D08494220010C42210145428A0C26F2F010010021426880281882280888422410840088C01426821100249080026125422AC182401D02264942001885C1844022028066044F0664620145483672258A7126012508198E9
-:80E600004AA2144F149154A82F815448922AA1488991218183C6642F11542A81814DA2244CD2E28432C62963A841608181258B1484462218F5144A4C09AA21283682844B216AF85D897024081800302844C501266181218608800814D04A21D84841820980C1244183012002184423229816B02488541812188C048200250421418D1482FA
-:80E680004A084F660B70281184C424411046D614421112C44114801A06893811444014241801128400C0484C011001A416522845028361228642460288250A2344088082F4992300C04119219423A014180080141E48018820C444888812AC21822C8314A158921C4802228A2489684282130900212628C8188D81008C38142B81230143D1
-:80E7000008AB41004420562481482841182022011844208A2502A3052886941216628484460242128200128418110021001184834208844028028221003BC720054004008148421C5148833842432262844282256488804148112842220214A4450186420A2441244142401856284C5824004CA82C102801899828CCF8E31E24A24214298A
-:80E78000220260454844491292A800A100F041AA14490841224091812480615B294C44140486144244226841446082182D8845421C52A410A484443084B0110140C144111011041082E448018923812896121C228115018884111A54281B41184840711A216881410021008484440013A228108409235142284121417FA5014128221248FC
-:80E80000421002006810C44190888181C0244098291410088882111088068818381E48406841221481C0240088242009002190186F31042AC414000022001628A1184211814782304496584183E881F415880022A41B42228934882AC41C3D868572116228504881861848480221000000418424608800FBE3C01CA042C12023842231412B
-:80E880004084A128868204262884810221128A11A882822051244001128481898408184424A0288244805224842212AA044BA1108AB8CB4CC25443CA22426604242B365E56114D11B28F21D5D2355545A4C44F42A3894F17B126C8818E91284F28C8A91AF1AB83BC81E11868482F61F19DC8CF4141E18868C8D656C58E8A27988D22848F2B
-:80E900002852A838B76212814592284781A391882147888D2843F88873A0261744144F12D424F232214E441A1474429921A94B38C8349B6285EA84E496B483EEC8A14C16782879293C3826E884A52B9B4D3F41F141D28E881C92822B1B4CF112928941921A1E9250226131AFA2F88428A5D242F888842D9A8D928C7284A2AB89A88288965B
-:80E980000243E1917225F4113C48D324524CF034545622E44E18F528982D88AAB28A981885FC5961EFC151484F414911F24963282B44848B44AB23C974426628642B418D216D88833214CD446D1C9564C12A2A88D88478845B824B4A23F864D62B154D1621474887C51F7C0B100481100AA1100A2302250425215112100281804202001008
-:80EA00000828A02490219021902190211811181588518118841826082A04222013F8C6822429F51511D55A4ED5FB5E5A9FB6F46666467A535F27AFA7F74A8EEF7CF85E9EBF2FFF7E5FAF23F367E59FE7F44BC8DF5DFC85814FAA5AEEAF82F25252BF967769F9C8D94F54FCC1A26F6AF256559F73F2B7963F8AF884877F53E34AF8A186C7F3
-:80EA8000185F53F312126F6AFB19993F31F93A9C7F68F99E9F6F63F18AAA4F4BF2765A6FAAF99CBC4F43BB34F9248CAFF6015E441FD5D7FDF22E245F74F45656FFF6F46E6E2FE47413FD5B4E2B5CAFACFE9F9D7FE5F97B78EFF7F1FAB87FD5FDF4C8DF37FC9ED4D79817F195FFBABA3F37F56313AFBEFDC2D14F5CFCE4C76FEBF93EBC7F9F
-:80EB0000D27227F6A7548FBAFA3F35DFDAF8AF96EF78F82D2775F7A7B7AFC1593BBFDAD86FF1BE9BEF63FB2E8EEF69FB96BE6FEBFBBE9E4F41F39CBC4F43F3BD34242D545F51D77DF2363C45F617355F76F66E6C56F65B1435F65A58AFA5FBDF9DFFF5F9EEEDEFECFC3F3D6F67FF7F7E7F84FCD7C55F59F8889E9FF8F82BA93F37F77B7B6F
-:80EB80003F16F4D8DA5FFCFDE4CFCFEBF13E3E6FF9F896B78EC2DFCAFA9D9DDFF8FA8E8EFFEA5AF775F7B6A6AD9CBD89BDA9F7C1EFF859EEEFEBF99E3E6FA1F3169ACFCBD9CEDA8CFA249CFB82242F45F41975DD276FC3F34446FFF7F76D6F6F66E265F51B159FB5B5C2F5C8DABF99F95D9FEFDEFEECAEFFDFFB7CFCCFABFF77F16F4DFD2E
-:80EC00009D9D8FC8F9898FAF23FA7B53BF37F7F2F1DED25FFDFDC4EC4FC9F91E9E6F7BFA96B74F69F98D8EEF6BFB8EAEEF69F9AFAEEFE1516E6F6BDABBF91A32EFA87A1FF68E9BEF62F81CBEEF69F9B6966F6BF99CBCE5FCAC8C4F42F3F7320060128449C148228C146481E081048280444498281AC424928514410481209493838408009C
-:80EC8000490929088884981224960816089648648124864822490481D0C206824C424104286041D04124028B84411C41C8A11AC48782830430852884282E528111D022294D18512613512811109182151812018CD212588121842D8284C0482564818886F1D83BD024F5112485F2112487141F41724AD141B26AD141B66AB981B24A994519
-:80ED0000AF443924AF14B9A4F44291578AAD914F82C4914FA2C4A14FA264114FA27498E1A264592E4ADE242ECA1F49E222F4912487221F49B268F19124A3F68164AB141D24AB941F88B24A5985AF2479A4B84AFB24482BB44F8294B24F8AB448FBA44A8F2A034D121B618D121E2CA7141E2CAF14D1C1B22AD1C1F26A94159C3A19F24A946F
-:80ED800043D31A39242F147125981A7B422D914FA2C5B15FA26C115FA234984B4296F1224B56E1A27491E8A2F491448F2234818B1613392A1B49AB161B21AF44F91128AB345F81F24A9216B848E381D422DB8494B22D48AB24ACF1DF5740084800000000000000000010021880080000140000000000004004280000000021F017A10023B2
-:80EE000042051C64441D284622B2A981182288D441386CB8836244833818444241281322113C182C919488244D828002849012A3018C110883612888844648288211E48842B8A811048F1C086624885134182C827118214142889A418E12582C8174C2E2296225A2221B8182679C41A12A511666588167A149015042232138148D443C2CB4
-:80EE8000D224AC82111114128683C8428424836824C248A681F83F84E0642256415CD412744422C35921172247888AA2C24E125B411E2AAE4246B214BCC861AB445E814CF8A2448E142D181E84278126FA84198E1C2C6138812624648816F4421C3490188C4811CC83B28533488394282C718448F288428C3AA4126F340100188081521842
-:80EF0000A0129648021482884984618A2C02212200853121608254585022444150221200249E48228E4423021C012088082100AE48A04120F814E8003022400121004003141AC4848022410428121482100418102204001044041A0200442C418821480134824602408801009F3D042A61425D124CC14C8D111722282661181A62288C4CE9
-:80EF8000619185642414841B49844F980414248D41222505C129E38234741827422F12216222141E81819C282C4C0434242041162804258414C444F0FFE40030132514C9183121001423189211004214858414E88418C18124532442042422905424282A41042D211B18811998848844121308405142422304E118414604AF6B052A912462
-:80F000004C22C1441128281392812A01998CD45859482829011C297211040081241901E11AB42824221114878222014028A414A1002503182C4808004800D0DA0C48184434128CA2412428222B58C044438C229288D0942422C182182018086042166822812222461861441C2202831202CC03151829126241222382AA848146412282F8C1
-:80F08000BBDE001122218001267118032042044B2487215032001DC445C22160241A0800422D115410282241A848180042450B2E4449A2282D18288A044884C014E9C18690488FC1016042800230244260842662B1821200B0482118044290882142C420418408582741A0420051218A2128440188004484004004146884229FBC09424DDD
-:80F1000021458282E18261464217A18F24622F99A3844C9C448B21814AF182454CB29194442AD128887442180841C42F3219082742621E21411C7A1114E222A94855F816284B242A78A88351428C248292A846648127444884AAE4550320211211021819322200102201D022588181402448018840041A8205415AC2188004800284804403
-:80F1800001850181C094304280189418438AC218FFD20200221820041081428102338802002826031B8198142022410111C0C8888A0100404402212400002200244A880280882204EF1C0460338092211A0220812801005A0812454148E82401106484804868888CA81A24848488804386199828444311D8C102122314041210040012168A
-:80F2000022F12FDF6022842D228003422848138844010082A028421400200284228061212082022A0121002001130200260100210080024220F4F7A800008434114041426848184CC1A81021089200184001000022206881860200100148002450480019180220344224181221F0A849A0412341220112202122312119324112192821086F
-:80F280009822400821882A480885423882181222281381921426A41219C2155100A6D981220844002034224A2226022F27021568421114422813041B14A01480A2244B14807151288439241908881082D91629015601268381412895412711100621800888408208899C8200888882883F890F8400004012012210020081000000480014B8
-:80F3000080044183C248008200000021008C110290120000432111021242C78C148E21821400141400448A0214441123282448C2142A088A0110058A01224131294848581250124831181542121101105341150224472649182404142AF1F6FC4058181A84824828C118281901C49031414D11E02102846901218001A88038148C244141C2
-:80F3800002160A1A8428011248858204C49022602200701328111402AF2804F088282433621E292334214E4113A2862558319B844E218B88E05FB2C2FC19884235A8894C1A68127098D188C88287449B488E1A858A311128344D41843612625185F22C81881CC8224188248BCC4F24FA44D21C81A88126A1D54F9F072A749123222161117F
-:80F400001CE481B131F21A941E612843A21147691F11A1891818D04681C142E02418E4839391184F4381AB152BA29AB92ACA11181B113D141AD143B2112152822955838F2382D811480224004B229AA1461C49F2D263F011232F42D113933819F22148195112188E211F48F12111524718191DA41499F818224F32A3A39E811815019B281A
-:80F48000244964299D282F9BD4A23A18289225327265A4A92D234E1845D7274451818D2415D812D46251162313F22244257412BA6294345223F2D184000081100AA1100AA112A1501AD0120234481448142C44C142144011022302211121501220044E11C011C0128001188001000042FD54141F147417F528299F92F268C89F36F2534B16
-:80F500003F91F159795F61F9525A3F91F159597F69F1DFDFDFD1B153DCB9B2D37525F7F59797941D913F14F4C983F776B5F94D4D17B82FC9B893A9CDAAF32821BF1BFAA1A12F17F211112F53F3C8D8F7C12D422D532B151AE52BFB2A31BAF914156F49A9328FA9F956126BCCFFE7F782D24F41A1992724BFD3061F35F55F44111B739FAC30
-:80F58000744BF352491D1BBFA5F53EBE2FCCFD313BBF95F7DFCF7F3DFD9515BF9DFD41E33F1CFCA5834F5EF9DB895ED11F3DFDCA81DF7EFB1A2BFFF5759AF9988C7F4BF9D1D996FA9A88BF8BFAA1B13F17F715116F13F3D8D8DFD6D736D516B55AA1C87FFAFAAAB1BAFB84876F68F82232AFADFD94962F2CFC7E7E2BBB6F4DADBB2F2DF884
-:80F60000EE7B141F14F417471E311D23AF27F5733B3F15F459511F35F77EFE3F47F769611F34F69D9F5F4DFD57555ED2BD19CE58FFF4F696D5BF91E115DD11F188C9DFF2F8725375E538719BF69B938F39B19AF138223FABFB21232F31F511133F7BBBB9FB5F44257657B743D199F48886BF33B2835B757F48B8B2FAC8DA27242F2FFFBE12
-:80F68000BF2BFB6F43A3992CF1455AF071537F73F611119FA5B37BF571391F35F45B519F95F575F41F2DFF5B718FB5F5D5D65BDDFFDDF5D9DA3F15FDD1D8FFBFFFA6D49F99A9911F1CFD88CAFFD3F87848DFF1B19271B9F6BFD78FB97D9AF2BAA22FABFB21333F31F515177F7BBBF9FF3F352F717157B74BF199D9BFFAFABBA33BB81F393E
-:80F70000F98786BEA2AFACFD86866F6FFFBEBE2BEF4F4FEE2BEB28795C0D147022012200002022412148050024C0240010088118818890828121909210062948D814012440021440058044A44100009EEA8084C21280A14125820419D6228824042F14082B84222B94842909982488260224121722442E4A922400282150181912028511F2
-:80F78000D128388110D12208882288A084324A28F283F1C0421F4152281FC132481FC1326A1D2CAB141FC8B24AF91128AB9455B84A79A4F84A91478A2F747B24D812F9A4481CF9244A5CFA244A16F1244A96E1A264592FA2E449D2A2FC91242D421F49522A1F49724AF19124A3F69124EF16F11124AF34B911B24AB915B44A3934AB944306
-:80F80000B342792498924F82A4944FA2F42E94D024B411C6521F41E214F111242F1671117446B1117242F411242BA45B212B8443734225F242374782AD9163D212F1241A5CFB248A1675246A592E4A86F5225916F5224A1FC9F2224A1F48F62A128E24EF12B191722AE248722E81F26A871D248BA459B64A3824AF247A24F84A82222DB459
-:80F880002F82F442B44FA2F1A7FC70822888040000000000000000000000880020010040080000000000000000000014E0C34282011C13C1344880442488811271889284708421A8122F8854828442A8222262248CCA34286218885A822832A1822100A120088190412489A228102408B0446248CFD90F43F482224542DA38AC8239751111
-:80F90000E812018AD483E1210C118CA64122392CE318A6C21A324C8DC1211D148B1212709598186654E241121998124D11188B422538152D82132498811D424427881224CC7C8821A1284E248718688F910B4674C26211248B61221B411B144381984439E113441881B2148CF8926246D82B9C482AB118EE82A828588BA18A8333A493C791
-:80F980001486BE4C0366213995205282F188C24318E112645486982A2A5848578882866244AE493AF41B569012284722157884831C42681280C9282C28D842C848142214B228A242414611C2252481418711A02421802978220129C14820512211608824102241A248208122423484890800812082020030428A04004004442A140200006B
-:80FA0000284011042089A128400480480400100AA182880082002012081F490A441742241602426024844240A18446C98841160882890142450840026829A2244C421234424C8105302200400282402804C1888110922890841282AFAC0E441481202202100A23240C178440941C10A44321428100242810B1442242120486841404211083
-:80FA800004106228401822182C08860281209818E0590EC024B04211820448804414218C62880020480824440012E0222C02416029528B2118482082080000C4B0480288100880024D22A018AF16021121214425140AC058AC0128101294825042C0186084C0284860414022D424012908828A0400008338221AC2120000842781C6842287
-:80FB00008961888222F061FA242200A041422C3214200880844408202419C211604200422033811820426422800216022312245214204608001A0400604860444241ED4D001113012818124200901888828092441018040000104A042210A85282003244498144A341A442888008440022128C22028C02B03B0B134201A061462892164A41
-:80FB8000C1123038824A5884A842488D82491141982400504A4411234766A2434622A828282C6141681489DC9632426612084014981A4A22C1B84C81F8442862414FD60325022D114465228181146888004602244016844188810426288424A112822001922A084812411042B422012A210982004A014C2802A28182005FCF0C00A0210091
-:80FC00006248420000000084C0484A088004004881214400801204000020088A8201209888100842008A04F0B7CEC0120021181A4428018A31421A243C488984118808C024124222414485044181E81200422800442820832581048289081288248286082608824B822F6A0C12006A01122818428004C0480000400880A4244141C44A5842
-:80FC8000248442180020024004000000888928C8981088688400C8C0246FA40F85BA4884344212428324041E8245F414444B2E2A326818848608424F2AD42251221AA1119A88284808431A01D088568C8B444A242402381A2C217E1454444B222A22224802887028522227281AF9DCE3000000000000009882800440080081208404000062
-:80FD0000221044040010040000121A28088800002004F0EB2B5084844248100460844064444C8282028004002502298181218808001C14416182842E48484800000044444C82820200005022B042F195B950882268000020011844582A82040012004221488C218808100850140084800420082818885044A02188008009002548D8FA06F1
-:80FD800080040000220044800A00004242D08202188008004044810884800400000060498002002008C4100A186FB70780010000001400200448824400888400000000129024000028004008828028880800000000008F1B09818304420000111034444322A242120048C04225422621234928080013129121A189314842420000421841AB
-:80FE00004143A24A22000040D2224422F1353D40C848484A0400182081D4487848848222040089043042211818888A8804001425018484484800000040448482020081288884235442EF3F081240042800200188000080040080044C04280010044400228011042880882101128181A0488A01000010043F6D0F00000000001200000048A4
-:80FE8000000000000000440000000000002008880000888018C84800424FEB06123226040080311118A0848B411A044A2484A444008384040042801408444542B2240212260400001888008328091820A889878284859848427F630841000000228C1581098282CA84813C441283048C04202246084024A1242EA428000080028388A18519
-:80FF0000A0818301208C880884800C41F08BFD000080120400209548420000008C848C12B44C1408000045040030142200908420028AA1188AA8814A8828080044A044904CFE5FF022222F21C2122B11122B11C0122592832F31F111119BD81F9858888D418F8424D4911481548985F844484E444F4294244F4222E24202284554642E247F
-:80FF80002F22F212A22CB112A1812B99822C592229F812131F11B188E998784898488F8424E48404488558884F84F4FBBDF026226D222E123A21311240512229C81B1F1191919E8887818F18BC4824445111405C888CF64844CD444B244B262222002554444CF326226D222AA1131AB8922808259282BCB11191D19E8887818BC88B4442BD
+:8008800000000000000000000000EFEAFAAEAE3F39F99393000048000000000000000000000000000040010000000000000000000000004EAE001800000000000000000000000000000000000000000000000000000000F0E5D1000000000000000000000000000000000000000000000000000000000000FFE40F80014800000000000034
+:8009000000000000000000004001000000000000000000000000AF1E080000000000000000000000000000000000000000000000000000000000F04FFE8002004001008004148002800414800200008002800400002148000000480000108204000021AFEB050000000000000000000000000000000000000000000000000000000000F030
+:800980004FFE000000000000000000000000000000000000000000000000000000000000FFE40F48180028000000002100000021001400100240010000400128000014882800008088020000CFE40B008084010000200100000000000000120000400100000000000014000000000050358084410128004840818102214860118002211AEF
+:800A000001148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400100240010000400128000014882800008088020000CFE40B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000021001800000000280070
+:800A80000000280000000000009F7A08000022000000400200000021000000120000000010010000008800000082220000F0814B000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000082000000EFEC0B000000000000000000000000008043
+:800B000001800100000080020000000000000000002F8908000000000000000000400200004002000000000000000000000000000000F0CF9F00000000000040020000000000000000000000000000002008000000280000F0781F00000000000000000000000000000000000000140000000022000000000000630A0000280000000000EB
+:800B8000000000000000000000000000000000000000000000003F8D0E000000000000000000000000100100000000000022000000000000000000F0F3242002000080040000000024000000000000002121000000000000000000002800002DAE000000004200000000000000000000000000000000000000000000002200004FF2032802
+:800C000000000000000000002400000040010000502200000028000000000000000000D0980D000000002001000000200100008800800111000018120000000000000000002002708C4D01000000000000000000000000001100280000220000000000000000000000F0EC8500000000000000000000000000000000000000000000002032
+:800C8000020000000000F0644100000000400200000000004218180000000000802102000000800400000000800800DD580000000000000000000080840100000000008001000000004280020000008008009F160100000000240000000000008001000000000020020000000000000000000000EFDD050000000020010000000082000002
+:800D0000000000000000000000000000000000008002AF2E070000000000A0840080010012121200000000000000000000000000000000000030240000000000008A04000000181218000000000000000000000000000000000000E09B0C00000000200100001800800800000000000000000000000000000000000022F027562081012273
+:800D80000020010000000000002021018001000000200200000000288002800280420200222F140280040000000000222004004002001888000000180000000022000080020000002400F016580000000024001200180000120000000080081800A012000000000080020000000000428E6280012002001602200100800400008001000065
+:800E000082008001382200002002002822000000282400006FE50520010000000000120000180000002001001200000000000000000020020000002AF48E6600180018200220210100000000901200800100008082012002003022200222280000000000006FDE0A222062122400222C41012A41424101000018800200A012200118120071
+:800E80000080221102000000000022002828009F9109000000002001000000000020010024408202008002000000220000002002002200004F3B0B40210220224241010012000012002800281002128001002800001822004002240040022200008082B21D0C4800602120814202000000000000008001000000000000008082020000006D
+:800F000040010000F0ADCD0080240800800100000000808121911200800882000012200222402208000000280000000000BF9907111C61112A011A42110328123982114103248043020022200228322228A01200123220220122218082220200400260224A0248E0CA0C200480044221420000000000400200248200000000002002000027
+:800F8000000022000080020014F054FD1412C0411440016012140014280028001800218001B8212821384001182280A41860220000002428222228001120922228CF2C0F48E01102242B2113B121B24181032A220111212818002E12181222200328283222202201120018288A022B229022282200000060122A022E212AF251D420621132
+:80100000113A2224221442531212130114001022820112180023888261222903181A822203282228182428000028240029A222212828001C042FC10C19B1412152111A11E1224221331118213C11410100181223118282428261212323091A021818A0223228B216123222A022201222022822800290422A0224ADCF800280012110022106
+:80108000100221122132213221220040022C0118800100188001000000230221100221100221488004DF7A0A1F14F611311F13A3621F1FF712123F35B511F163612D323F12D231F112131F21B111E121F312322F2313E223B332A2131A42A22227222F22E222ABAA29A122182AA2232AA211283AA3B93E222B882429E222F222222B222E9E
+:80110000222542022C52222D22296232214AA6446AF4A25A141F14B641F621212AF2E16315F351513F31F163631E321F33D233F132331F31F111332F21B312A3222A62212721222CC3122F22A29A2B222F22F2A282222AD211A1321E11A0226AA633BAEF21B1A20A2612022E222F22F2222224242D222B222828242F24B442A62227227796
+:8011800036F061511F13F531111F13F361733E321F1555131F37D731F221333F13E3115313151222023E32211823A3212AE322A2822B332F23A2BB23A1333E213A021AA1221AA7229AE923B382E822922280E222B2228212423222A0222E222D216A3622A0221F234FF161511F12F431311F13F371713F12F251531D213F17F713211F1333
+:80120000F331332F11531317122427222B331E1229A1322B12382E222AB232E823E323F3B2B23AA3333E213AB321A3333AA3732AA2BF1E122BAA2B2226F222222B222AC22229120226F222222B222E222B222AB262E426E622D2640F18C01100A012400120014001288002288002000028002A0100000018602240022440022400800242B8
+:8012800000F043EF200218280000200100000000800228000000000018002002000000800200C022001002282AF44ABB80B411021B2146B211724292212F2491212F2499212F2419F14292222F3429F24293222D912AC4912E421CF8224216F1224296F1224296C1429AC2421B292CB49142B29122B49132421B282394212B8419B2421821
+:80130000B14228B24228B2422892822A84E822F4C6FE60121B41481A62321A4493612E12486E93E034BB11E22428E23429E33428C2912B422D91581C9AC21CBA2245D122ED18C2539E212C34812CB581C4521B214E8213A1841B282394212B8419B2421AB14228F24282224E8280B822B44228FAEE240082480000180000800200000010CB
+:80138000021880080000140000480000000000280000000025018FA805180000211840020023044622410224800100000022180020828211820224002002280000240028002220F4BFF160128288004001200800002842241224420082000023111222322218210080182102000030810011204201002681F26E5C9021C2884002120000D4
+:80140000242A04422983542218254202A0812008B01212129221282821162204881423028002226012001180120124282681F2B33A800100001440220800000000A0140000000018400218280022000000008008002180020080F41473000020028044820400400224402288020000008008230288000000A082006880020000000000E0E5
+:801480005D02228081014218000021200800001200228004104282020022181002200800000000202802000080F8EEFF20021212288021042304210010022100222002424002A0823022001200008220082002280080280200002098DC0000004200000020080040A281000000002400008A0224000080022004000000000000F01969004E
+:8015000058000048002220822204220000100200882302000000002E420000002022288402202208200400F0D79A8084242222050000002002180000250242108228A1248200008001482800200800402202008002000021DFDF0200200112004818402108004818000000000020022008400200220000002088040021802208003FA20575
+:8015800048208223240100388082088002120021200421303248822200820050222820028800228248230820C28222200600B04A01200180014220041001482021040000808101200200002001280000000000800400008008001B41000060223A04000088100200004622840490820000002800000021888088080082008008000000B039
+:80160000420C004800004081041C44011002002002800100002200000000400200660200240000880020C4C2A81FC60D200458122100240082000000422A2402000080820200220000002A28020080240882200882000020F869436014804401111214121400000000000000000040020018008001008200420088200888228822108284F5
+:80168000F4595280043011800100A211008822908210028004008800008002100200002200420000800800880000289746008084022824480010420200200200000029810882005022000028000000288200000022000020E4A60B000028141410011041A1248004422C8412020018008A0200000022288002002128002100244002408209
+:801700008404701206200C00004012012800822828000000002121240082000042218008880020240482000000800814F0EE3400C041429240D1120288100228000000002112292181082200601A2084012A0400000000800A80082022140214CFAE094A240C5AE122681216031421001512A2820010022324042C318292200A28212C225F
+:8017800002800112282C0888A0624842008230828222004821CE4123F43814008A041D61B013062113C1A1118E61A08420122222F4624280044042022C220220A2281622C4220021822210622442C88882888A88082B8820E224884481F82D44100114A03118111F1442B281449283144022842A8484A22200129012008A0282400280847C
+:80180000A22282288A2288082830822C080088288A88122204AAF6B4F9100100A01630423042B042082B84304200C022000000800200001220052002230221B02208211002211002210020F4BAED14171C1344A1726E123F31F553523F327243F323E32F24F463A3373A2F2CAC642B22AAE82616E22694624A0421E02811E222B8820A8A8E
+:80188000088A4A92126E322B261AA188AAF2A2A2272825B242F442422F2CFCC2C22372827282F2828221AE2227282B228A08422F2AD6A1064A1441A1264E123F12F453533F167643F3A3612F2CF4E3213F3E5E222BEC2B66EAEC22324246D222B442042B11C09221242B88A08815B3B2EB3191126E322B55A0E88AF8A2A22B88A0442F24D4
+:80190000B2C2ACC42A5A222BA8882CF822222F28B822E22808342AF22D58A0151944A1331F31F353133F35F5626135B362DA22F4A3613D2221CEC22B662B8A6E6225F242422B442B4480012C1842B282088A48A1BB1E1229E427B622A633AAEA2AA2AA23086E62CA1EA2CC2C2238828A48B2A2A22A2E222BAA2B888AA82AFFDC0E1F1D1521
+:8019800041A1331F31F153313F31F1232115F3E3218E423F12FE81232F2C6C222B222BCE2E22272423A6642B44242C01242126B2820A8A48B3A25A2129E427B61285A2ACAEA2AAFA8282216E62CA5E222BC42C0A2F2A9882882E222BAA2E222BAA2BC8CE812AF628220000E012011440011448008004008002000000280022100200000079
+:801A00008800480000000028800242F086E4000020148181240410210424224240028004002100000000200220082800008848000000004200222FA5081CB41142B11122B611B242B111B24291212B9419B24219B14229F24291222F34A9422DB12AC491AE421CE82264112E429E212E429E212D429AC2421B292CB49142B2917262B291C8
+:801A80007242B281F2428219F242821B282F2438812F2428FA4282A22F242892822AA484AE42AF8E0DA061481B214219B242B111B242B181B26231812B3413B84223FA4293C0B32AE41439222D91AE521CE822EC11B82264192BC296D132EC1882BCC192421B682F22B49132621B29421B286A98214AB881A2241B2842A242A242A2882B4C
+:801B00004A882B4AAF5F02208804000000000000000000000000000014122200480000000000000000005012F0A1A220080048002448002800480080C2C242420000008800001842222002C2002800218A0482008822A0420060186D84008222204A823411242CE4142801A018284888822282208868282A148201902200242820080000F8
+:801B80000021822286018222422008A24081E4D704200C484824421D1240420122808402882AA8242F288424286928CA1202821012012C812622048004005022826A280A004220A8248602144AF8DDA5002002A2006024484AA82100982004200800000018002800002028028800280000148288228822002800F04A8B000000002002203F
+:801C000008409241204822088228002210012C08888008000000000020080000000000B0560D1880013012AA0420084880088876122124048004480000001200002810C281100182420080288808A82004008857EF0020012418480000888008396C2588482304A02400000082200882000021140020880482800800A8800400824F7B04B4
+:801C8000120000A08280820842000028112008880042224001242001002002200814000000808808000000D06D022022044842482602004220064222288240022007880021800412820048881C0842102308006248000000482C0842BFAA010042180022A0420028280020084260280086828808200800A02480014200220014001422006E
+:801D00008002004002F0C935200400000000402288082C21040021002002112200984200880000000040021002100200802802E0670B422820014842284A02A02429082095E228828008C0C22A08112821A08542200C008219082A04114002152224042002008200488E360000200422100200A0480000421002A012000082002021228842
+:801D800001000024C08100004002000042A2003FBB0142000023140200248823082C22248C04180088482814482C44621121238404240000821001000010818404000000887FB40410811401111003339282130121232401212B8234428860222C011180012002243081250240032148272830231413A4A4400220040040F2C18A000048BD
+:801E0000004820044220844882448108601842140088002048012A843421400114108184040082008002280000004FEF06142848200414002134482004001CC241424214001CF11223168248611210020027181003001111111420024813024AA2840020042AF4758B0000402284241422088008821001110010219281001A948100200825
+:801E8000216014201401102104001100824200000088EF3B0C00000000008008298244212404004240010028B0224401001448A048118820088882140028420000000048EFB602008002280080011081012C022301151281622100201481810100482824A0410011100280021001484002800480E2C708002004004200002888100114003C
+:801F0000108148015816410182000000180042A0841001482004110000820034F08FD680041C041C0420C24124882C0228210080840210021880180200402108008E41000000860126818202004828202414427188440126011C86C4414041E11218E1383881805812421C0722142651211551122119A44325B2135411228AA484214815B5
+:801F800053111561282440D2114832218822146A840C10024240A1286F470342004063241B44684218822B252F2228C4422A541137241F1C7651B18234C182001B414621043824004828371823B492280415F141412F146428881C52111D41481124484A84240842142B84BF410B1904144242294222D42254222DC280F482922B2413F5A0
+:80200000824288403241481CA9261DA21CFB121237181F19E11A183242622417322C2801F04181A08811421718422A2234C1144A22868A024848A0426E9B1001113081211121114612A11480012C013880014A012824402244028002CA0282200882218A1402218088848884A84288C081A084002FD84BA14414141F12F641423F36F641AC
+:80208000411F36F241421F19F9C1C37AF6B1812F24BCD2FB72622F25E42EAEFF7AA6456AEE19E922F2A2822F3C7442F332B32F39B9F2F6232329A22E2EE219F8C2421F2D899881CE428E821B848E422F24CC82EAA488AA88BC81A8EAEAEA22B4822AA84CCAAC882F24F49843141D411C44F121611F24F462622B441F36B641E428A8113FC0
+:8021000013E22FFE92922B991B231F35F4F3F33F1FEF17E615B463BE91F922321F3AF842D2242F26F291932F3FFF22223D21AAE212BA81E824FCD1521B191B881F247C81632835F3C24286E31C4CE112D611A8C800AE822BA813E82CB4C2AC882F24F489AAF0414148111B2246B362E624F4616225B152052E321F38FA52D22BCC2F36F720
+:8021800042432F3DFFC2E11F26F743412BFF8E811F32F3A1A32F24DC31F422229E922B7F357322812AE812E234FC91538611E1147C8371817283F141C13D813B4C159121171C1D82272421AE822982A8442B444AA4EEEE62144810B161E234FC62621F34F4616225A1443F11F161712F2CF682822F29F923323F34D422F653711F22F343D3
+:80220000411F1FFB81832E21AEA33F1554313F12F691932F3F5F3327124AFA81421F12FAC3433F21B51199811F1C54134AD821B4C37483B1C3FC81811B2417184E822F28B862E222B4828AA84423E424E426FE77798001000024482440020010011124111001111001119081000050125012400114400100001400000000F07E43000000E6
+:80228000004820088028084880840A42802802200480012004008001008004C0811982888488848884084A0888F029B5E012B41142B11162341B21271419F2621319F6429119F6429119B44229FA4291222F142BFA42912AE414E922C4A12F22E415F2224296F12242D6F12242DAE222B491C2421B29241B2946B2917242B281764292219A
+:802300002B8419B24298412B842AB442AA422BA42AB442A842882E427FB80326B111C6411361321B612714112F36B111F662911B612F34BB11E4242BE93429C191BAF442B123D312EB28C5912F22CCA12F22E51D7222E219F2224316E1223C112CBC11C6821B614E821B212F2498212F2498212B8219B6429A212F24084EA280AA4229383E
+:80238000222B84AE422FA10320880400000000000000000000180000004001008001000010020028000000002501FF9907000040A24200C81E8248204142C24248324811802804001882428021081220880142000000601480042488004A08009FDE04428218A0416200461101804882AC811322612820280110813443902121198204184B
+:8024000080420111402142011482144081088A12A14800E014084F8E0B42C280A4414829024219A88142A2182B48272819364220C483005211C6122191811031410020621C1280440114400114481428002182800814218FB40B001800284240814402002001122C0B208108004280924228188218120010012002008840014A08A8862137
+:802480000442A084F03218000012804202800248000028000011800400002004422200400226022681068220480200A0420000005FBD0D1400002002188288122001184A88840100112A38428004884823012001001C2112220C4082A484482008422224A0C2684800CF26081400002002120042000022480000142E82488004201402488D
+:802500000000C0222C0222422482C200230842602480842404F07663000012804202808A28011280A14880014001420000882005200300161102C811282004C200002822208A02004FB708801431810022402202102222812202100100A082881110021C0C128220A44200428E2200118242A024002C224402B0422802F04C118082050039
+:802580004248400182283888001022048002210032888280011140012084080000000042282008000080F8234A14140092280020822411010020043290223011460280840400000012212001200848000000200262280000BEBBC021189011002A0426B122248822812881E22204421522021C81140256612400190C1882111A94220048AD
+:80260000822308462128044200282B68242A042B84002CD8710600142082040080111102000038002280810B2820081200000020092800000080040000222002F0364D201401140000210040010012800829480100000080880800C24880045828000046022004236424000022F079F610210420D4120412B0120223032B188821C0111278
+:80268000208181284142C1421C65241C438241A21824188041A212101142021121114811008242420020F4EEBD0012144001400100112214420011100148120022002001482085C8812022828262210040024848002400004240F253410020010023820210022110C2212110A2214001246031C0136024602182860216022C011324944318
+:802700006211282384029083482088281202005F740B1400002821C06123021991422119022D21124228228041032C28C4C2141D42400240022211242002114800421512210480040000485F1E030020044031120000008200211221422A11810248880000000040021C02800628C0E12842100220020000827F7C0900202234428002188E
+:80278000252202A82D424A222102000000212C0846024622881C92820024E0218401221012020010022038420028F0ADF1008A0111004211312004101101C82111B013042014011400308120041411341100828014631240B182922222800829842228C281D01F0E4213B2110410111102000028C041281072120148211681218128022275
+:802800004842144840022A041131218200280028D02284045012211062289E55A0448E111246D121F442422354134042D23151121663242C325227118225212904342125D222D423F442432F347442F28242293C8223B811C8621391621E414E22422B422422D022D4210882807822A2483D62204421F48CAC14118AD6118122C421142A7D
+:802880000338212982022F1254121C8A61153AE214F511511440531140011B228EC15A682C12192818C12213322123792393211B2415D2333641481B443D2246B242A4CC88422928C22186F2ED9C4031111001111D2216F2432323232463243B881B881B462E1217222D121D122322A2191B53A07946A11FA01180014ED2242F3411F222F1
+:8029000011242F24B321A561C22591226AA822271625E214944200272422002A88FCC98B20040048002A012A012A01188A84321110811201130111102115A12119288128C18112141226816412400114408144012848A0480000423F5D0513A4271AF121611F34FC62222B662F23F352422F22F272723F33F372422F38F9C2F32F27F3F214
+:80298000F22B333F25E523B313A133E02756232F2CF412122F26D622F172723F23D322F882122F31F992132D822F36E323D122B772E129BF32A3A82B66348AC823EE822994222AA2AA2EE22B883CB4A22AA2884AFC4F31144AA46313F1212117342F26B663F622222F26F732322F27F723232F26F783923F3CFD33722F2FBF22F242423E4F
+:802A0000322F23B333A3112F2657223F2CFD52523F277712F262622F23FB1313272125F312122F21F1726224272125A1992E21AAEA1454222B882CF2A2A225D232E222A2EAAEA2291CE12ABA22A2A82F2CEC34081B441F1346F121211F3CF421616E6325F262633AA37635B141A689DE837E711F1CFE32313F15E533F333312F13F3111127
+:802A80006E7135E1147C11E31757134E431F13E239017011F111123F3216D311F111121F3898231F18BA4354133BAA1D233F285A333125B282E82EF2828246B2823822CAACCCEFB1427141F1312117111F1282F461611F16E623B362A6227AF611111F24B691F891411F17F7E1E33F32F343433F33F223213F137611F3616115F151C11DC8
+:802B0000511F16D611F451511F1AC341821BD11F38D131F821631F13F1112317363F38FE63211F1AFA414135F1C3833D233F3CDA33746351222F2CF8A2A2272C25B282B822E22CEE247C2B030018400124002002144021C122402221040000000042200400100224482C8164226022488004482448800400F0DFC1C04113012004261321BD
+:802B80000200148242122800222180010080042A24088028082002220028800240022400D022288202284867AB80B411021B21421B612396212B1619B26299212B9413B842A9432F142BFA4291A22DB1BAC4912E421CE822E415E22264192E429E212CAC292CBCD1C2C21B2926B29122B69136421B282394212B8419B242B881B44228B24F
+:802C000042A84A2B842AB442A8424AE82AF46ABAA0421B612AB41162261B61B011F442121B414E921B412CBB91E424B38124B48114924129B92394A21B42B83BC25AB223A9293925D912E51992529AF222539AE612A1692F16A1292714282F14A82827148A726221784221B84228BA422A3A422B4A21A6F27999008200000000002008002F
+:802C800000001002000000001400000000000000000000000025017DC48001204222024042E1230C002522012819820288182004400148182001484001881220114121820421A048280068286200B07D4B21E21803001651211121002621444101721280C8212A0442224814C08182E024084820040048464263222C0800E028042480440C
+:802D000061380014F0494814601F80022D21111012A3A420460129A14322268158218A822101C211308100172C1820246414005824404321824422C282882C0210C122244001CFB2022A010020411201C01219025012001220828204484A021001C812004800008280C413282C080080240480A42486A12400F0763400800114602240A2FA
+:802D800041200882002111288021020000290129019892200100C0112800244002200840020020A22422EF14042210011A8284C17136012E412D1398181442242A8168141C46218434C3231402002602221A6222360123418202284021884242018621088AE4222C24840482EF390F28301100483829E5128165122931128A0110F21221E7
+:802E0000A214136212001B4821252201122622A18312168201122413210200001002860180888E2424A442882FD50C00002E11001942024819280811420020A4412024148204400220082828260121200228502182282114882008234402200222BF1A014A6212181C048004232426042902138418021C210228428A03004A180200200404
+:802E8000004240810840A18400214800008260284220F6E8C7141120842244810200A22228002200008290112724003288880040021922A54288226812C02200004A0A20828C82022D4200F06DB200188001000000144081014A180200008008140080210482002100002084044214005022200428002A048FBA4C91611B1218198244211D
+:802F00000448A042224021E522A848210082281CE12408A02146220800201C211422283241820021884214880023324228A23082424822B603002001200221688811214001001C210220A4128840010012481082828102202201684681043042680088482022042848EFE60A13C41120314114601413522312204421A88213C22248680098
+:802F8000A02428001421190482184001003419420129024E2113821A01A2002148222F2422283882DF760C180080822232221820942129818801A01C121012C1210032398808241224682A244182222A031223083B48308290C2460100480000006F7B4481013041C042488086030024A0842F284401110012341111004882140022001323
+:80300000311200281001409281100228212A2828084228288F4107801201240010021082082C4421018631428E11288288C8428860114022C24224281482A6022482288222422200483914820C2180A28221882F1209282021924182292482849882193213882902824829C4221446B141214221321186621162250123C182D022864122EE
+:803080001A42411231C10000002008424882602814FF1F0480020036012116031E2148246800141811200200290222002521010028004842688200244001148602884002002A04622F1404148024A121B0113241904100881982283132008A8181A228482C087042010048001482821C041130818A1262124822480000298412021042F24B
+:80310000853300120024000012244217222031431001112840022415021800000010E314128201222302242018C28240118284A282210000CDCF80061A4401800121624A02A02448321002230190421C88012A38222C042460324212A2B0114441021E41008221142392A100218220140221F056C8A037121B111661227E23297542E32113
+:80318000763232522437292C38D23BC317131334823BC2234831A12BE41D231714242E922D4237381E13242E1266B211D12118E228AA1415B2A3A92629B8C37442726252212B88343512222CF8628228882B4C1448DF240A111C03F051612117261B423B16199C513F1446F183412A6C388AD912D2314493112AC4811123A8121551131DDD
+:80320000111092C229B68244D212A6823AE121A22228141D221CBA81A22829521148808ABC62A6282142206828CFA342C14122B04103111A8242E114E3222AA2D2422CA1342D629E52525AE31392215A673A2ADC22B232A248526A14812285F22221A21F3D5313371A2714343F28691A242E411D81AE816E423B8C8E612425C282484EC26E
+:803280002B222AEA22B8227AC10A601200A012200222400114800200A8800828200400822028220C000000408204004800800480024200BB4B141F11D3117111B12122F243433F36F153532B132CA2263F3FBB72F152123F15A3D5DAEB3DE131F992922F19A9551B882CA8EC4AD421E116FE8281BEB23F39F9D2522F2EBAF2FFB3B1FE522B
+:803300003F26B281B233B7D1BFB1A15DAA6A281B881BC42CF8E1C21F349422AEA22F2EEE24BC82EA2AFA6262EAAEAA2BE62FB9061F11A3751AB131B751F563411F34F473522F21F51353FAFBF2B11F13B312F151513BED3F3DFDD2531E931AE131F152518E813F31EB14EC249D136AFE43432B731F19F9F1716E225E313F2BB373FFE163F8
+:80338000AAF233323F2FFFB3315E511F3AFAA3A33BAA3F26FEA3A13BEE4EC22DA2AABA62A6442722AAB8E2BCC2ACAA6AF649CCA0311F11F711111F13E314F652523F15F641431B55244AF2E3E32BB93F38F893939E932F1FED2CF541923F21B113F3D2D11F15A5DC3F1EFC42C13CA1662B113E332F29F142C32F25B172B7B2EB2EF6B272E3
+:80340000BAB333A3EE3F2BB2F374A321EC12AAC61D214AB6C1BC83E828B842E424B642E42EBE62B6E2A2AAEAFE58B1141F11D2117711B171B341F453711F15F541611F27F51272DAFAC2A19EB13F18F851D31F2FFDD3D32F3DF511911F19F811112F1FED31F5E1D32F38F813233D133F1EF6D3D32F1FFF91112F14AC151BFD3F39F163E126
+:803480001F3AF5B1313F33F3C2E1372B3B6D3F28FAC3C23F32FA63C23F18BA82FEC1C33F1AA88823E426B442A4AE2BEEEAAAAA4E627FFA0F18C011A012200226A149148A44A14124138812011B41301110211401119011200222A012E012012E81200226814401148214400228008022F8BE4C200220419141421100A02814408184081833
+:803500002A04222002212821802881A82488281C08220011250222822722824210022148882223240A86F3EC5CA0421B21141B2166B211326219F2621219F2429219F24293112F1429F242B3A22F142BDA12AB4A1CE922E414EA2264112E4296F1224296E122A42D2CB491D222B49152221B2923B4917242B281324219B64298212B84198A
+:80358000B442A8422B842AB44228B242AA42882E42BF3C06481A041B6146B21162241B214E1219E224A9214EB213A934322D83AAE43429E814B9B2F44291AE521CE122E815A852D6B12265192F12611929B19192121B6129B89196121B212B9419968219B2429861291AB142889422222B848A94A22382E822F4A337008004000000000065
+:8036000000000000214218800800001400000000000000000000000000BFF40C00404101231431429A02288816210846A2482502292208622094222D110021241221A041C02140018242290A2932822004A2A082288A240880F42B3A20860318482A912112341C0446018248482A2192A130C10024130A1190812813012260167022211999
+:80368000013C14810A271820364286022424244200282E818E22F7D920A4168091412A819211421E21C061221CA148A0212B4282212B4A88B012B2814272218299812C921115C23260125266A11A14141429A8828214A0C22B4210C282408226C48228A24AF2D4112002100170420125A348008882802424D8120214002C044810010000A4
+:8037000020440214004814482722822722008A042224A220080086F2AA320040212102800660124021010048A04888801101212002988A822988088002C013409241230400004200008A24248282F4436AE014230111302228183082A0922948C142196A142CE112C421114A2222982122293212282D21002212143348C1A32221421282CA
+:8037800024E23022244A888884440222828848243FC147818511011022820123488119112134811964254AA24A828003222821001220892A09821CC22121233142122338428A0629022B484A2824048004A242F0A215C021001921820268002828238801230210114121061C481122B2228192A38A020015420188281100134402000000CD
+:803800000021A2C88082F476AC002A2422021400462122018A0200004022282884018800002848000048144002822111002428203842000025028288FF470C800420042200428280A28480188204221C02182D928028018280241211222281048800100188860188822882008842246200AF67064800180000002414103111800819018027
+:80388000120128102182048800420000110000230C008004248A1422220880048FDD0142228023440160142AC4921482199C119082481381228AEA14C182001681220C88002324024041410240621490811022287882221422AA48212882886F5207822002002200000000820000250100280000A0242A0400180082002C188128088088D9
+:8039000004488800004842E0440600400148141341B18111821122352223022C021901001D224082C48214150200244001162364290011000014C0224082088622088074B101800400112582024880080080024A324221008021080000320020220530211211002521225222800800100200246F8F098A64121C2282160212214A0A190828
+:8039800014C08211002142A800100218200196222428612800880040022100002224C042200400F0EE2B0080210C2834208221041B42420028142826011440011488001480440248112419841141522142422C2222542128350228888240022BA470170E000020020010A1164882241886A2181182132101A68282248484A482000096014F
+:803A000016A181148AC1418880C882601A4814400221820082C0C15F210A4826010080013100001800110048A2E01108822214118800001880012008008800002824008200800424F0681A1411804421C5410046621225022542F142811C04A08422210000121042110221800221C0225022882012011948028A8208002488002170D409B7
+:803A80002008002142460180888408113E83602100284A08C228001848C882E028A448488A440220242574421122122104002024242484844422F89FB6B081011904260121002113140329022074220188481611021C41835823701242718242612170128288C4120000866118460288304100242824A81002CF930F1921781141E13356E5
+:803B00001337341312B11158121C9F4316D123E21238411F2282B4C2AE461A0B1B82281B81483B51113B1814272A212B881127382127319AC9133F24012D2313683A246E824E82242221887082E228B88208142B888FD80B46A1483021422C023CE124E21AD1213C812C1AA1843F28A3A2160136D3127A81C1112CD212E8326414248E4144
+:803B80002C2CA8858E422CA6192ADD2185013B85821714C22593A11F1488722311F2438124235422B0428492C226C242EE1E14481F128222046A24B11254122F2426745222F442D214522593922F361A818184E818642250221C78426213258221A4112F243411921B283D42A21A642819841CB222924190818E226022CAACA4A044A048F4
+:803C0000424FFD0252221220A182C011482E1182188218802388934118132834912813081152885219A821884AC2814A4281428146818608A04814821440A242242A04A22022F495B6B0E1B771031B511BB31F22B252F551112F31F113523F21F933333F35FD53123BED3AF372F13AB3B2EA29BC122981E81EAEA2EE722D122F21FD9312DB
+:803C80002F3BFF82122B31BAF332732F2BF313722F2FFB31322F23F752222F2BBB627281F1A2A227282B26AAAACCB042F422222BAE2BAA2B868E222CA226F082A26FE10A1B761F17A7331B221BE61F13FB43431F35D122F512522F28F932322F2EFFD3D23B992BB32F16BFB3BBB27F11F212D23BC4882B772AFA61F22F21F512533F39F4FB
+:803D000032722F29F913332F2BFE12532F29F592722F2BFF92922F21F15233FEB2EEA1171C2B2286F3E2216AE23414F2E2E1242F2CA8AEEACC222B682BEEAAEA28EABC063E2119F431311F12F221221F24B252F553112F14B1539D911F13DB11EB11E12CBC31F3E3F23E113F1AFAC2813F11FC42511F19E91EFF21A16EE115E1157592E147
+:803D80001F7F81E13BE129B3D2F591913B573F19BF11F111113F2FF593B33F24E42AF2A1A21F1ABA61FEA3A11BEC1F38B84354222BCC23B242E22438222B8CEA0E8F99091B2B1F11A5221F12F271721F37B343B453B142F4F1F1CEC2BAFFC1E13F1DFD91823F1BF9E3E33F1BFBF3A11F3AF813C13F1DFD91931F1EFF21833F17F641512FCC
+:803E000015E51CF4F1F13F18E93BF9D2E23BFF1F1DFDE1D33F39FAB3B11F11F1F1D33F3DFFC3C33F3EB6A3FAA1A33BCE3F16F6C1C11F38F8E3C125F2E2E2EEC2CEE22F24B422ACEE8AC8822F7C0822006022400300001448141984022400008012020000002180012901240040010020080082000042821FED022601260166110119241279
+:803E8000011904E0240824A242800200000014000000008882002C0810512228002908250224A0848068186F750F2AB51182B111A2161B212B1619F2621119F2429119B24219B14229F242B1222F14AB422D912AC4B12E421CEA2264112E4296E122641D2E429AE222B491E222B49162221B29621B292B161B282394612B8419B24218F1E1
+:803F00004282222F242AB2422A9AA22AA4A4AE423F550DB011041B6142133162282F24B181E42439814EB2114A2BF84291112B94133B423B492B841F28A11419A8852B425691C3D22D83DE21C8DAD232AC691CA4282F14A1692F1491612B821B482B84682DA1482D812AB442A8424AA84229B8228468228D81008200000020080000000014
+:803F800000100218800800001400000000000000800200000000B0590418260119022A65121C4671913842222491884A6222D222238202001028A424139212292C230448824129084A43C8821A48821422888C24092221A248801884F86EEF20260889184482A4181AA4423691411AA48150281B418C6249162289A2494AB26238634C01D7
+:8040000089912419218CC1441850123C211A22A8421044611422908848182100212324641C46B2FA084A31C16092E022C5611334511E89133121229C0983B213B6422ACB12B682A241422F22A85A18682E13183B1C1387C5444AC18246058E222AC1888A36922414A082AAC488482C6122801AC2422028FC55552082028241001A0A682313
+:8040800086E4240188486081642200882242156844103824800800002D9320040041482714004898000048218A6444241FF7082601001C0124208202480021840034000000211C12428104000043022113890922191424282408161802004C8A840220F825CE142132293828A0612B41142C413BA1254111622486311329E2C421B8188483
+:80410000343828C6612481502249F26213268474220621282614E84264931345C841871390122088446222242081A416E2F061973419C21282841118211128A5C1212541118254831321C24280048323621C48260A24443C3224482424281032884B4126A86148A018422908A40025022302225880D86A0E800228184A62252081928242B6
+:804180004002864202DC213818480010521250124E224A0124490244222634112A3811111538459302182029042890845242224A0A8B4410E181143824241C6121184222C4002E8148244B14002800484A02884823324100508586944D9024469C282D28C381624486145C83C60241CE224443C2148038846844241F370EA0421114002009
+:804200005212D04138414A42981828C02287182422811829B122A48226054322021001702688048824201881024C681248802221088054229058122FAA0B6821004088028004281002008200581884004604488860944268838402232808004C242204128192A1188142B0AC011A0430488F330F11291131212487112418142A948140D201
+:804280001838482821282D88A0128C81813422426C041F4A24724188D484668C1F6284D24292888D228484C226E5441234928B288A051A5C826A189498B09284528446F86FECA042288144002A8132421098614280014E1482142223048324A21443C2212A04000041102418246822163424488884859141255284301444124CA24844485F
+:804300004A41F2CD1CA02421701822012642886422A4882420240440820488A082212181250223182208004F211218B222348220C8248447152002200162208804C242414F18420112004021611329011B123E4318142C219118AAB44231381333413152224233B52138182003166244421031288044824482011954224A2894C12302293E
+:8043800024D2248829921412AF730821D08381528112A312441205882C4264884614525224000014184C5848C44095247026484214810284114372850813C62A8C01814512098847228002C180F268C10013421201440000004042420120682882811612281281A81830281111C018146044584484144001204801A1244121214A81082095
+:8044000088DC9A0C8281E08411084351224394482681948441814342048314088928C8882C081064C2824D838225163181285414207881085342882181A16880118482A8821068818A64547FB90A2C2403008400407148022008A4428904622F881241080050228200464801401A28022141584A81048D2244142841360210442421420459
+:80448000DE48C02980042123C44146488121C82414184601884968411CE111249641421384E4140842A92404CE214CC442411042E421A62424884522F242819308124842304446A242A6248823F2F83500141814489312DA41064421158A148118484E59820000260118218C944444100124C982041113581884A1122353494426CA12132F
+:80450000018418880021438142B26C0125091D482352214814501823024414E8271200601813C848F01248901219828882D221C34A2A41015092A8C954824522442354142388C2148591242D884A810425064C0221F0BB36A0468B391D18AB2539911CC44B215E447F22725B7362F81682442B41AF543454C788CF2525BEC9817849E228E4
+:80458000C8222F12D138F12326CB126F1ABA6FF38141AE14117451878267218F827496E81A34413E7153F21228228D81214C54AC29B5A2F282245EC4A847C8CB9816C524BFDF46134131182E1B46FA41291F32F34347B5C11422173913D431D891688289D853D482F819F384A6C8891581D86158868AFC4226E48E45ACD9A6721C14CD46CC
+:804600003D228B2255D211D8ABD2C27887D242F32C149B91318ED8BB111F1138244A85D82672229292324B626E521F63052D233722341185D122345A87822487148C8ACE216B588F2C721452E24EA28651822F13FE49411AF568782F12A4441B44C7818E4899453222482F24B4C2F622314F58549127488F247644F4984346F4584B1F383B
+:80468000F4C66B3E3A973645B2C2E5E542F24442A24F4CA4234E2CCA9984EF1D0B4222200280A4128081A4128218481819843181288220883281442095815A82280112200416F8248112490880342484001484800448002028F4E6EA243F1CE495A1331B73DFD5FCFC3E3F917514F55D4FEFE2F29E91AF11F4F1452B8CDFD9FB396B7F3D5B
+:80470000EC2CE88DFD9A998F8CFDF8789F95F5786A2F2CE41EE625F145C41FA4F5415B3FA1F17F6CCFCDFF585B3F5FFA61711FBADA21F212767E723F44F451933F1A7B297928FFAAA81B749F87A5884E426F65F4747463E62ABC36A3228F82AAF64F4FBE3D4852333D433F12F33171F7DDCFE7F35B59C741FFF5F43736BF79FD1A421F77B9
+:80478000F6D292DFD9FD3B29BF19B889F8D4DEAFBDF999DBAF87F75959BF87B742A4F63F31F1775C3FA2F543DB3FB1F13FECEFCCFE4C4A7FDFFA61713F3BBF3BF322246EE33F777741F3A7B59FD2F32927EFEABA73F7797A6F49F856576F45F574146F6EF6A2E26F61F728AAAF89AAFE6BFFAF8C42F253532F13F739311B11AF85F57A395E
+:804800009FB5D5AAF14B49CFC1F1C8A42BDC1F1CF65694DFD8F86C384BCC8F3DF9C1C9AF8DFDD9D9AF1FA7CC8F36F7E3C34F56DEF5E4D7F588CF1F99FC918D8F9EFFECECCFA4F4F5EC1F16E76BEF23F3A7A71FAEFEE7E59FB7FFA2A39794CFD2F8EAED2F36F7DABA5F7CB9C9A9674F47F7A4666F6AFE36744F4BFB22A47AF76474EFA74652
+:80488000F393133D33BF92F35111BF15F17AAABFB5F62E3CBFB4F44143BF3DFFC2F25F3CFEC687DFFDF92B33BF1CFCDDD5DFFCF4FABA9F9FF5FAF91F3CFC21713F18A8673FB5F5664D6FFAF4B3CB3F99F82AFB6F4EFE14125F7BFE63553F7ABA2BF2AFA51F37FFF7B59FBEFAA3B1DFF4F12DAFBFDFFEFBD3BFADFBDF8FFF7DFD72526F43DD
+:80490000F5E4666F6AFE3634CFCBFB9AA8DEF24F46F3B45B0060125012008424402108820024108884328181820000908181692814026302260188B024082602348234964802648A8422019244F0D9A13022302284205126284384322A0082644954289088E01449888184924485014C42CA25485082164411511C10D841246481871417E6
+:804980004146C12890444245481444B4149418008E41EF940B2E421F417228F2112483F41124A3F61124AB141F41F26A921B21AF243915AB944B43AF1439B42F347BA4D812FB24481CF9244A1CFA264A16F5275A96F1225A9E25ACE549C25A1F49C2421F49722EF2912CE3F49124A3F48124EB161D64AB941D28AB9451AB94478AAB944B4A
+:804A0000432B944F82B442F9A4484AF9A44A1F9A0E3CF1114C8D121F41A4121A521A16744AF1112CA5A6498DA743C1A143932A1B432F3452841CF1A6482DB15F88C5916F82EC54F22698C22D9A86E5B2CD242E5B17C5F0116CEB521789EF36B991F248921D24CB1619F442141D24ABA459F2429143B24AB234F442924F8AA4B46F82943245
+:804A80004F82F146EC00820020080000480040020000100218000000400100000000000000000000001002879D24444125621214184150128D1181219051741880829441828024421448A841441213221454284138244793A6588281A0431140582186584842233228435B2220118829F4824860142B288942B4281822114408337868C24C
+:804B0000884423E862688411D3481AE112194C34822121AD23888651624CFA42A28044928410541426D584581846D81E7391B218781142E18841644990144C91482A44C124DF3F4AD22434C48332258F380210548112C3982A233251512F6228243289933483B6411466688B18856293296831111F2CC284259A48182B84BD24876244D4DE
+:804B800083D818D129341DCD918E13134AE52944342CA6062D1456322812522F9F01142825022091141052812581948841292811186144003048260224804484C824614A02442244188285811284062824848D1284812298124C0181488843F2ED15501400E022C12861602240220120240200130B22801408002898001AD22424C4821942
+:804C000032229082688384146481818648210884289A440281A024484E252032216391282034111842CE11C0411F21C8C843E98864D12D463644E285028386D82144C84829D42DC44887324B2825286842630415942A59521E6D814D2B8AC641112E128C98122D871A92C481A6E42A31848110F8B13FC02120C128128B2444182418F042F9
+:804C8000111888418B841129147281926822284211844829B424E48528426281499842443912155224C14651814819114948C182901A608126A41ACC0842818EED10641261C022D01201621B840019384A4A89D28411B424A1211830488283141208B450186B8228426CA28490228CB223F84122CCC866A66484A02927882371818492E41A
+:804D00004AC88224402822F4361960C248122D114AD218D14242134801111902248034244110AD18848544E2969841B084C42AC022118113CA48415AD2160226032344782432188CC22825028D84418943180A28C9314A4FD94422E1B2C4288504008126457481C8268A928419C4A4224210B8421228F11241A28812A12210114114321803
+:804D80008044884818A8A4C159048218306881185244684E16424B94B022F8D3BE0025146122412614B8120212005012301885442929828122044110B224044189180428488E12D04168814CD44251482282A94911214884058608412845188804AF6641624225D428128CB221D182B22291255486C122155214901ECB24C49289B241B1A1
+:804E000018A2149534842D2A1B41C382DC84728AD1244214B261A914211E824F82618426877C6638812B821F88C118826456A8181ECC49C2688B1623F414A8CB418B84AF7B078A91212D111B2163441C5481A1128111888246210A1B4244D04A22188884934190424C020060828048742C3181456281C302C364C1211952288C0445081628
+:804E8000481654484820F245AF2414100880164218827442016880F24182E0488424D88218A1824501A914840880420C60884734431488840219D12241D82C8435189889688163781824A2A4A0822149A948FEA84002002450281CD23802C06211421C21C131C0132A1414D41224921641204268422508A94402824012081E218184140000
+:804F0000288021024883014308122284CFEE0A828C634221802104248938884618084A3881882A58224604912C82A8582235C44848112A88E8C2281C81C28282418302141749008882818008D042848108430849F1FC2F00158461221518C122004C42410145411104462142984128B0114408890813484805248444411160221CC4845210
+:804F8000604550298C1111098C110221262224722222F8F3DB001111001489744118081042A248293422290245A9A14C28282846061082482244221464482502284241812481982E82824A0223612800800229024844CF8E47C242458244744C62821034254C845221406448D06808888042042082810800A4C441003024C444A08145688B
+:805000004429B646311830184994344B84436181186290144781424F19042684021120240110518210D18101800412241068444071448842D184324414403141204411018129840C118448801481048A84121C420821B0D90128821052411624819242282A94288744811042D225E28214242208818B422A1858A44129028A240227122171
+:805080001016D323B42114C68182310017285042814054266089848E41F0398A402CB42D0429C888390241812444804A14544110C418198116129412241C3A22196698C6144251C2C028B0218402848850481214860528812C5128C28C180D82A1A11EE8242E44172887A22554968F2147D822C2212D622D682F3456828F1C1CF621432737
+:80510000446AF4281466BA8DFDA1812E422E55ED223E42842E839FCAD4A2F627254F68744EE284C42C5CD415541D7F4236212F15E47CB14398118FC1F3481883F1C888C3F97822A7884744CF28F484465F6CBA8841F484A18F48F52B6AD032F2AA244F511231C96E882F1474687428E4C2681613225484DEC370B4B1827A57D944DC12D2E5
+:805180004C94244BA42A74489C2EAB244D818D842C58882E6C17685D834F26C22627EA247CF624A8B78187694FDCFA43C21B891B241F31B141F1868446D4AAF942143E982698A26B215E1D4D88BE5610F4441111264256538F23539177A4D3748952889D653D141D246F49D8295A752CBE9A63428CB2C158A1C6BD86722157844A7225F182
+:80520000C8482988183E822998822846784AB88991C44D19AF2114D412F4A29850928CF114921AE483922A212E488E988F2234427F1A4F21840145811404418C440180048238481813180842821001400428200400004001242002146032164802208822D818028B24005F7C43F141411B154F21D326B662F62367BF84F442622F46F4A3B3
+:80528000C4BF1CFE63613766BF31F143626B8DDF9BD854F457593F1DFD93952E282AF2786A3B2647C85F34F445CB3F98F8A2C3FFB8FC89CA2F2AEEACEC5AAAEEEEA2DFE8D8CD7644F4F4B56F6BF2A7A73F98ADEE8FA8F822AA2F82718DF99682A72821CAF89A88EF42F894964FCAF82C1CA7A9EFCA487125F773754F23F325273F42F223DA
+:8053000027BF86F64A6A25FEA386FFECFE23299FF6F2CF855F75FDD681DF99F8C5477FB5F58B973F79F962E9AEC1AFCBFFE2A4EFC6FD616B7FB6F6E7E1BF9AFCA98B9F98ECAAEABCFCA8AFCAFE2362F55EBDCF46F6B6B56F7FFFE1F7BF9EFFE9E1FFCCFDB9B91FC8FAD74DEF29FAD8D22B544B9C8F8CFD6C654FC9F9A4BCCFCADBA2F156CC
+:805380007CF041623F31F73F3B7F32B24BF42765BF16F646442FC6F6A3C7BFCC7C4BF94B6BBFB9F943C37BDEDF9EFC97D53F9CFCD39BAB99FFC6FEA5A48FFCFFE3A95FF25A35D7F23F9AF8A363FFF8FCA8E3AF26E6A4F4E36D1F2EEE2AFE848EF5FC45245F7DFBD6D6FF78F8DBDBBFB6F6ABAC9F9EDE81F3858B7FB9798AB292A9BC8F8D0B
+:80540000F5E8C84F4BF93EACCFC2F3881AAEDEF065467F72F62F2F7F72F24F46FF77F77B63F5F6424C7F76F46B6FB5F94D6BFF9CFC55D77F1EFD6BCB7F7FFD47C9BFF8FB9A14FFD6FEA1E39FDAFFEBADFFF7F42F2BFFF2F2CECCBF9AF629EBCF9AFEE8EA1FACFCE36B3F6CFEA3A37FF858FF3F34F693B3FF7DFD5FD7BFAFFFEBFFBFEEFF1E
+:80548000FBFB7FA9F9D7DFFFBBF9DED2ABDC4BBECF8CB568F6FCFC8FCFFFECBECFA8F81CAE10022D11842420C2482220C24834841041028D241B4889124104891251482183148282180890827022012150248CC48282229A0482608120018228924604BF9408A240C22881121411A502882014C186199482512C18C4118228414C0A2821C5
+:805500008E2151814322182474242108C4411D2C88174124CC96181098452C99448532242C9844200284AFD1072CF411248D121F4132481F49324A1D24AB141D2CAF249921AB945B49AB9443F34A9153F34A9147822D914F8AE414F9244A4E816FA264114FA264192E4A9E252D4A9E242D4A1F49C2421F4952281F4932481F49364A1F48AE
+:80558000B24AD141F26A921B21AB9455B84A3924AB944B4A2BB4478229FB2448B84FA2D4770ABCB411D628A42183B411364A19B24AD181F64A9719D248BB95B44A23F342915F8BB44A39242F1479A6F84A115F82E514F926CA5E81266A198CE45D5292DE242D4B1FC9C24A1F49D628F4912483F481648B161748AB141D24AF64F911242B87
+:80560000A455B8483BA4AB944B4A2B144393826B42986FAA959C000000000000440000000000218001000000000080040000004004000000005012F03689A0415021D0C2224685135A21190284181C14012130126324267228544246140242F04824C024414A3842284D88214E1419225428AC18B44881428241887248C2484612082816C8
+:8056800028F8F94660228226A8181114A3585841288E481B82864134822A4929226CC2135841882028025E2A884E2829F84212801443728421E112581245C218192AD1212248C1514427284116912463834C011C38681E356025423C023D282A1479350824CF1826628A4C9141A21502C2A7411F48C464F0122C63E868011E6829E822E425
+:80570000E23C41803448421B2C8999C3294515081859328E116243318229C218E394322F8448038D11D29F510B2210A88141116308E119021348012938118122201212810AA042004284C0124C52241358224441284581B242F18128AD82A014283C0181414621624400228826E83A0C00241508201611C2484A18810814118D1348145005
+:80578000188446010010E44492444240342200004424112C28098A42022411240000002280F42CE290231C12A12193F328117C011E442114211324C1C42F219684872183712A1102899845A9542B4722282CE12162224982C81E4E84412632A48E2A4442852444C218288643E1487192A4844938768F42B41956488A618A812F57061CC23B
+:805800002114A18372289114217042988121138431C129D12668852400C04844AD4230242122682F22440426924441284186542220280189213281B013084A98846934648B42800AF024932400B0219111186611F11244204481084119D61841D281D12952188186C14140199224437512042847284D1882002B828912C44185A64890A28E
+:80588000502211641E8600388419418CB128C8487F1B0A19C148C0182441482827424E2860682858A3511821409828D048124514581852420084421F480444508446248861112011592C431142388229C21852814781813288C486F4B3CB24CC64414661124284162CC119441444284149B4228441220AA302D0327224C292416721172422
+:80590000244B121041742892453048274246584843015223C2AC80B148311888259A842A0848460829F2B3E614004441000048B082031002004117411001163848481008001C4414120220A82112252212682280C141260845012912240118002242CFC64BB1134404D142E18116E2D162C4392A086D4287612A8441D41213382B9019ACF9
+:805980003444257942522411B0374494422594243D444416A28227A48711168C72527928E218D682C21827911678323854413289A142831464489BA6102451141A02B04481228482012112421518028D8422702448342589038741584221814886040082C36241184C02122416941880B2841422582A96D84808188289A2427FC40C002045
+:805A00004442127426CA442100850426119828265A491005130213241403514864188382240514278242224F114262541844A9641400184A9152478812100448445FD90551800125088140681A42124A31882381122108672220024128A11A8404242224405142152291443D220042001849C92889912488002462409814001F584901457F
+:805A8000184882044811141038182121ACC4112915AC41809114C0224880441204248446861221442621219542122C61A44811248A44826648A04280A51880012FA10548182C3511261402214450221100400821004148898144247A249214C0881E611C420180188824844842140814800119110882812E84440084F04C8B20484105850F
+:805B0000611425113112812D412419514963041810129812444318082C0424122C048582438266244341029412201434282E48428883044E3E2400A0814312044F27437142098003CB28C0488912C318484118915012148D2214601268864158188034283B12144C141804314219548525041502111143D8A10282D614420C2901249082A9
+:805B8000181F1505222A012120C124410028A8001AA282221644A45A220041222120821418881104400C410020088C890988B40000128181492485954CDFD54F024045C144C019204444428814021CC142221984158154211A368126142141184104422D64130114838163144D618741BC2104119664542B41C922289C644A98440000AFEE
+:805C0000FC0E26582A484128484AA24211287041148843028112124128D08245D248014F23084225C458A814895824C4801C08A5221444B64CB8124224C1A610820141124850C2F0ED78243B62478835C642E18556814F22F44858274A8419F24612B5C8283B221A712C7219F362D41D11421F1463821DAFCB423D152721C1711E7AAF9273
+:805C8000F2484225F111225C741997882C7488F157538F285433AD442B554D418EAAAF919452A324B284E88EC6B45E5845C2144B911AE4270546B31812F41315E442ED728F14524385D22AF142989321B877D1989148942D584D2327411C978C275583E634B244045E468723D716243E284F66FE425567284257613B2327658C3213CD1CC9
+:805D000017A54D2F3FC538111F64F954834FC3B718B948C1147A041EC44361C4A47F6C4B1194111E19281B663B616655C34D231D211B648F31C44C4F21D138E421F8632B2F49736464814B2247423E484DE269D482E823E2467523E89C54421ED4654418344169F122188FD4B12164424F44A1454B189B888B3A8F16257888E428F8C64689
+:805D80002B41E5728658448B1C2A94484574FD07A0123024302484004948880888848880289188C08412004480028A92118230882008824521088200001400124484000083048744AF3C024B4677B42F53F23272AF87F771679B441F37F541433F55FDC5C93F1FFEE1D55F74FCC4E5EEE19F1AF825A34B8C5F7EFBA5855F56F6A5ADDFBDCC
+:805E00005C57571635F114C6CFCBFBBCD96F49BD91B122FE54F5FF5A7A45F4578DDDADEF8AFE59729FBEFACBC397748FACFDEBA9FFA6FBEA2A3F2AF58486DEC26E22AB4C4AF24848C7D44D548AF868782D42ADEAB044D427F426243F33F752563F67F64142BFB5F54143EFC5FDE1EDBF36F64A7EBF35FCDDFFBF37F72B33FF71F8C58BFF43
+:805E8000F6F335333F16F4B5F57F39FF84C25F5EFF43636F23F67C7AED496F79FDD6456FE2FA7EFCFFFAFEC7C57FF1FD17ADFFAAFACFE69FB3F25A189F7CF8595B3F9EFB6FFFAFBEF2B3724F68F5DA28CFC6F3D85A2D22EF857514F414162B982A9754AFF341B262F4234327513F73F36B695F77B649F471579FF4F4B2348FC4FC7173BD59
+:805F000039DF7CF54CDDBF12F27B795F7AD2D5784CFE45557F5FFD343C9F9CDF11F265A97F11F12466EFC5F57C597F89F518996FC6F4DC7C7FD3F3C1813F51F4BD3DEFD2F2F9F29FB7F74943FF75F18B93BF1AFA797D9FAFF4C3724F68F8DAD84F66F3DE56AF2FF7EAE8CF84F584DC2F8CFC3C7CCF6CED2C4DF14141357216F67737EFE42C
+:805F8000F27F6E97E6BFF7F54C4FFFD9F16BE99F3ADFBFF1DB43DFD7FDB9B3BFB6F7AF3F5FF6FADF9F5F54F5E7C55F73F781F33F38FC76E47F75F53676EFC7F7ECE17F3BB752FD666EEF8FF7B7FF3F14F41A127F5BF2BFBBBF27F77B6BBF9DFDC9C3BF35F5F3B73FD7FFF92B3F2DFFCC5EEF8FFD6C7E8FADFDFE58CF8FBD41E5CCFDD2D880
+:806000008F47F7CCC23F3705411002254138248C6432842661818044B61104484CA2412880128102008141001004418041981484456181490814122412648220019200008F5C0A2358411880311100A04825B281521843C811865818925C3185463194144055832818423928C1C84488C081C08115988413D13288C48184A99161A908C04F
+:80608000486C01288444C01486F2983CD022F411248D121FC17248F21124A7241D2CAB141D24AB941D28AF2419B54A7924F84A9343F3429347822D914F83E454F9244A4E814FA264157FA264191FA264592D5A9E242D4A1F4DD222F49124A5F29124A7141F49324A1F48B24AD141B24A9921AF143915AF143924AF4439242B94478229F909
+:806100002448984FA2F45977C0421D4CCD121F817648B2117448F2112C89B191F24A141F88F64A3643E8143384AF3431B44673A4C8112F83F44A814F2AE114E182E81578274AD481CD242F92ED55D286FD412C29F9116CE9EC41F24A811F41B64AF88124AB161F48B44E9921AF14BB95F44A91B04ABB24F442144F8294926398322E52BEF7
+:80618000D400800400000000800200410000210080080000004008480000000020080000000025014F2207C0112D128094194C031146D1828164111C141128749114A4810081130446E4440112111242412ED8224E1249032004482D444611889142524692CC1E4241426E140000824FB24C01236882508441B12CE3A20180110260612666
+:806200005C2818208364414482D02AB24D12F24814B02821012F44210287223251174341A42AB822B84378211201142881412100CBC28551849FE10F30518303488331172C923846114EB221C141C01CA3C61E1684280316F8124482867432648223D194843141C0A88B252C86912829D64164424C344A13F4822843B94372620183AC256C
+:80628000C146347240B22C4C7194FA2DEB40022502C1153428123480A14100144034812001484411803448790418E08261412C4584C12420011301442B82704201184825052140040081F0417C001902202251280013011B481448301124C02416C824824A881408122642712262482C28C482001002260229A84883042100004398228EC6
+:80630000484C028100D05E051F421164413114797434812582CC292991828D8179D142CCA41A28C1411166D484032C24D2271431EC4A28E4828132186CB48442312865A2181CE434123481A384D22A8298824642C8942514B8C222A4A462227BCD90242812112671539415298182092B8425D18158412F412892824911581449C81C800432
+:806380002F517422D12CA2A4418E2868967846624A151258229235229E4486394824C08280D44898846B84224A92482AA84222D7156011454106008C820419D481921188468231418624819251284AA2C242A4224032C1248A2411020020428422442388143222260A8250221A4258A4828004F0BD457022C844A0285016784341454CE10A
+:80640000C6012B82412A0846361400248146E185D842A841A48041081538884A124128A6122C3898488581492268628C49016C12082788308288897542F2A935C04CE0140242812422002D1411201251222684B321082D14464E448EC28222128B1846624444190811488C72C91234644100484813422424148E68282044840450C2F7289C
+:806480000040A48116040023240424D08481048C0842C08940210814856646001166982222122A014440282238128504003082803114C3113448288180F2A58890424151301445E1248112744482D11811721AD425A4822E88384EB13087460C1DCA265A146E1A8CE2888134474E282D2883B221C5412893D242F2648A8F498294131ECCB8
+:806500002C240A9A948225D824E328C1164B4887648A1488C1629F580B430A221A62248422167442414881068200259444250489018595144A4842D424051881418288A012908412008884001428A992614482854418082882835484AFA7092213041E45411614C125122488281902808121922222812084A1420030211292204298488823
+:806580008100002120028066881C8428440228282828C0226F2303C02428001100211584419484F0631400002052181422291186F82441982422893488826082004624028308429022200631002A0842008823711C0E825084808402008840112844C844214400182E454CD18484A84380082A04008A8488140612830400182243042128D7
+:806600008F14C282424425A284844880F44D5820012828242400422240145614A012C10049280288212A21082002221200121698884C0400C222210044180000608484218421849FF40F5C440840219241484694211E41AA2414A18686E42194444984A4582858282CC42443149144184A21829C412A040012144E8610014B4827284A0833
+:8066800048884242CA229C24214E848C6A1CAFC7418112021CE4427144913467122CA3142854401404001382419C922143480490448C215684488521C292C210025280322A23962200422D2823146828008122103228FF230600004218211840328424342C61112188829800488D214618188812022100002120880A850220880889C228B4
+:806700008CA828810000C04280043F7F04A028413291211248268401C2825A48024488441A263414864442A41430284830880000211141142C210420A8842C8198248280082490828CB8282804DB2CC01D4448449AA2844D2224E04884524280022C642266024958428C982AB08861284946D285582A2CD481E11462826081212F284406C7
+:806780008426180A214285062D292284801408425082888F29091AF484644F42B251D14838135F54F22221225BB84B2413FA45292F64C4322F65ED44DA44EA567914B448F8518487428BD6C368854A52511E815AB5989212EAA28616A885C58AC8442F84E5C8A488172823098BF22A7482D432D891E488EC2464482DA84B8C6828148E2267
+:80680000BFF80B2E12830A47524E114EA5321F4434462711132324F894114B85282F81A14661CA33268B124F3C5A446EA2676A484FAEA42A2E222F46BD58D688B481A238AE428A6828511225D222A2224AF6E2E625B682EA2774C88808882BC289D4AA7228F22CC8E28DC8FF6744D155424188F635624F22D522D124E141E766F482923C15
+:80688000DE4218F1234D4145728282A2C21E7E4F98F61158ACD2C2847F2486F24D5E25485881888D4A4EC22911D346A2119722428F82548A2E82207448DA889A41AB2E8724E02462242AF44288C28DC82B162F4B4721044001884800804481040048A048240011008121100300000080022888800860880014802208822008003E74E02859
+:80690000F6462C281F41F658EC3AE244F223211F51F161B55F1CBBA2FAE184984F18EB4E29B7367B61B326FA949AEEEC9B996FCF7E24F4EC7C48CFC6FEA9D88FA2F7B6CE1F85A5C88EA18F29AACF1FBCEA22FA33739F14F2462C8D883F38B242F464246F85F96A282F4E7C42B24ABE28A2A64E222D8847668FA2FC6C6C8AFC5A6AAE46F038
+:8069800015436F42E642E243F2592F4F67EB54F427275F75F7C2B41F5CBDA3FAC1A27F54F8D5D16F6EB9F6FD36161F76F4B6B4BEF8EFDBFEBCF9CFEAFF24666F4AE722F62E6D8F7AFA684A6FEBFC38698F8AFEC8CA2FABAECB3FB8EE28F812569F15F6862C8FAA5A3B27244F44F2D2F4A86EA23F3CF84B888BA66EE22CF2C8C8CFE6DE88F9
+:806A0000FE6EEC89FC68F8AF1C0F4F64D74696245F42F3C84C2F27F672342B2675F565A73F5EFBE2A33BEC4D866F78F8E6A44B276BB77F1EFA64A4CFCDFFEEECDF8FFD647EEF44F46CE44F66F46E6CDFE5F47A7ACFEEFC4859EAAEECCEEAEED21F38EE28F813139F16F46ECC85FA8B2B2BCC4F66FE5ADC2B442F2CFE4243AF14AC44CAEC6A
+:806A800026FE62CAE7C48F88F84E4C8F88F8487ACF9E45F1C5576F42D244F235359FD7F676762F46F676767F75F757A73F1FFFE3E33F2CF457D76F4DFDE6A66BFF6F6FFFE7E54F4EFFFCFCDFDFFFFD59CFAEFEECEEEFC7BE64F46D6DDF57F67A7ACFEFFE58488F8EE6ACFC72E2FED2BF38EA2AFA52129F17F5EECEAFAAF2ABAB2F2EFEC422
+:806B0000E6AFAFFF6AE88F24FEC3C3BF84ACCCCEC22F2EFEEACAEFEEFECAE8CF46FE68E88FACFEE1B280010018C0114021018220412281022008828182104204810021200298908210426822000040024048022C022880029BE5400140641219141291121100141188418850422014A5244142C024601D20014A02420040541A482502804F
+:806B800032224821150848800448428442145F5B012E431F4152381FC9724CF11124E3D441B26AD141B64A9921AF145985AB944F82F44A9147822F147924D812F925481CF9244A1CF8244A87115FA264192E4A96C5CA9E24ACF491244D421F4952281F4932481F49324A1F49B64AD141B24AB991B24A3985AF343924AB9443F2429447827D
+:806C000029F9A448984FA2F4961CF0244B1AF42E4317C147141F89326E19F62E121B488F66C1644EB31D684CF92448AF54F9A5482F74EA81D45ABB37D442F9944A8D314F22FC58813D429E246D4A5E21BCFC1825C89F49D2A6A4498D431749CB141391821FC9F64E911B692F44F9912CAB245B48AF3431A4ABB443FA4A9443DA42F9A64869
+:806C8000AD144F2AF52EAF00824822000000400428180000001002188088020010022284000000000000280000000000FFA24862442031254CB242822421811282024C1858484638144849BA85F1214419190483442442146581D042024622C6812912C12485C222240028200C4A48AA2480DC22548480B328F4AF5640319261962848147C
+:806D0000D481D21472C3142165144A71D124854171194428A4188744191438228724601C2B854258426381D8142851258648811DF411C8744D4282AC46D228044B438D8448856441C0488D8524AFB14C82A418181B424962462061412772412844CE141C7F488481A1142E885D824F12D4143914848318B42238841D448419D4220283F839
+:806D800062844E9826432122912227384444698AA282904222E90A8A7442522C81A876F263F550341066C9860243D48162128A44A141460185243148518515A41492839441B0223448601429298561444921441111668845E18814E4814483048C7442C248884F81248454484301488D14846FFB0A18102601100C250225121102201902CD
+:806E000025221242280440624424461442842144081011048004102201400100814880840100FF1809100425011612110118C240887458120417488A412C81448882244208105422642C02218228A9D8122221221404222968261A08114624112428020028EF4A01400623012C011180A1842180542849084182419048890448224490444E
+:806E800021444C21420820421601624841212A21A84214004664814324280600F0BA9E2001441100D4502210521425081A841162182D1289921200290216B288440245022591422542884833C8281200001052248A0114000020110238EDAA0090184440180881890200290824181E2186041141400614246048418444E08124242C121112
+:806F000022B72288784228C81200405A24404402004200EFF14E42414101CC12B124754904481A022140948C00408221022884A14004284362289210542500400410E41102818502881088028180C48C818187DD002422251281012140122865811041C184A522121C2821441144168124012002234882A1184449184208404818018400C8
+:806F8000922400840048F0E5CE4041B32911528185D1849545818522038C0140156432431A1C830311A54246C1444C1914C4A42B181248869132112D824B1689C282C33481122181848C18F4821841248181428489045FDB0C21004463226122848016A84125224865882D92160890184142434254811002228902D0824C9456824144243B
+:8070000082008B128485012110022C0200B0840484977800000000448111002400113C214102006028404A01542C0400290400811082040020048140110412211200001FAE0B2424441552E1850281212C3888104352298018181288248D04814605438404C124589042652248223145C0428909890446830458212594484D42420010F81A
+:807080006C7E002141146184400C11002440033C5128004892422502153881C0414821D02284841482280425018001844842A1602410827142240400F0D5955088872400B424401268284D8C457624411218218801A1242354229AB118F194C28A684441508415D11151218558C8AB448CB4426144422CC48820544455B4240413414494AA
+:80710000489012242552221E182F2B0C0000240000C012000082001C118804100848000041204822480200400190420021000000400400F0F15240C848424800000044444C332228000020480A2B145818882C884402145414842548289442100480416241444CA34228000000212129F16CDD40084800440000234884C822880000005003
+:80718000828021E81808608440521100C4424810022100004D1480220423041881101802DF2F0180040010428201448022011001003429248441880800001400C480040000004004681800004242100289F1FD7B40040000850224001002000000400144004800C01600000024000010024242000000004008F0F64D103848424200001090
+:807200001216342C222302804808A42145A2411292200C0031111181818385240C212418111014B4243422221820045028244522F13AD3404888C4410021400140CC8428281140018014CA4221181888883044204441018484A0442150828005404C8482020048001012D22D0E00000050221820110200401104818200110000400200006B
+:807280002121860400006011181008484242008400001F160D00410000001C882808001602100120040060840000444110224102000000004200000084420010F41538100400502425522219918292812D82124041C18100C618994881830411004445829482805824254214124202B04211E12531184248481820847448480800DF660714
+:80730000000000001215C282293888100210140119CC484314046084008B44121044522423216128002140321118200412424682048448508841418F820B004411241008250229011224828A110316598820044E4120848434422425544244100200860245119A12482480B4181402200452440010F8A669702252222E122B119012C01288
+:807380002592831E111F11B189F981898D888F18F44848D09154111C548885F844484E444594244F42024C02286554442E24272227212AB192A1812B99822C512239F812111F11B1897D8159888B488F8424C44880548885F844488FC80F6F2252262C2121110214259282BCF1131119F991888F81B88834C8421415C141155C898CF448F8
+:8074000044C5B44436242200284445C4346F22D22688A1111AA8898286512229D8B2F1111319F99188878189B448240480445C888CF47493000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000057
+:8074800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000002E
+:80750000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000AD
+:807580000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000002D
+:8076000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000AC
+:80768000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE002C
+:807700000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FA9
+:80778000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000000006A
+:80780000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000AA
+:807880000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000002A
+:8079000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000A9
+:80798000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000029
+:807A00000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000A8
+:807A800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000028
+:807B0000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000A7
+:807B80000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000027
+:807C000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000A6
+:807C8000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000026
+:807D00000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000A5
+:807D800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000025
+:807E0000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000A4
+:807E80000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0024
+:807F000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE4B2
+:807F80000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000000006
+:80800000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000A2
+:808080000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000022
+:8081000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000A1
+:80818000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000021
+:808200000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000A0
+:8082800000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000020
+:80830000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000009F
+:808380000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000001F
+:8084000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00009410041210014064485097
+:8084800021400412C62209633842195142399111C1B0483948834401940000849046901600404648021220210116F8F98E341494A541523C8185544864433814889601865784443D1216768182019A2461482B8416C1828D8213B9C911614886439C4148165918EF14D14834444E1CB04701125341141154424781257412022118219EC50E
+:808500005012100121001604214120C88414005512443152183014804847221828314141480010512810146844643012120014100620018041F8C1CF00240034818410348112821C014C18592420812118228CB8462804C01844106888241504204171559848C01AB01104C0110081C01849110200F0AD4314001011140484000041006192
+:8085800080410200003011218890138B84181019281419080000104404104412044400241224187FDD07104948180844004100004002008880C8120021121C11811881282408144800004C044200100444002121241800D0E6090000000000000000000000000000000080010000000000000000000000001F394A0241214058216014250F
+:80860000414818184101C184441068188142844062848D421552185628044D481D14125911186284000030181A0400B04491442C4124C2141A5424CF6E0141140000C01C1841136824504823882161A182473441928A2154184412618C083B8285829112C2418814302413F144884C64468128D021E551143886291232229042818484BBDB
+:80868000E61425441402840057A4161178880131412112184482442D8486A8488C5481E021C448BD8285E391CC4216321C1B8143B11448084E2CD048044184892125945424881E247032123462168415F48AE60011001011220144C04850818845186881211D4814121800451218048042084846041134001381C8446220023C11111874DD
+:8087000042924400401848F83A4D4001290126811284820114112100114C4208414C1804110042419014812004C28882148049188494184829C14842004844482140548444481F5D0F2D34284D2211A11CE511429244482044C912514622711483C2429C34589E48C044142713F022481C3422AF230810C21423112C532147225E29184427
+:80878000898282082DC88562231800E3E48884A14149F83355E01281626111A5A1144F12012504111414501214274118236244293C1C828044825424484A1168284824488622418112417A4421648183048842860829C414422004C1424B849F260E61242820922180A2414280548212444822D400D4428C4541449131302845237232086E
+:80880000209814828524612949B21822412432328C0429142813022552488E4C1249013FDB031544682460A4144181511893E814518226584221881400144C4214CA94288E4425CC24480015024A4188314414100128128183486388114082080083C14450823F2C0240282462424C42982250841A02142635188515042391242260812587
+:80888000C4324886011548146681111824AC91248B9483714C6248165281638602C01256048001284141301829F42575002554C11C311284409318241028210116820141188216081C2414088029D181022D84444531210000102C117112268101818481424B2100211E284664222F964951214445CA324F82712C411C3916C18B12A41865
+:80890000D341C61A8E1415C2142819B21CD2487148E568A4426C14ECC982D543827184C2145C64114C9384602445413C292711256289118D128D118110322410941CC187442E487F1908414011612440825218122D811B418501A911050043810800288414401114480A20712202897111182CC8121243E6C10212299A6440A89412281001
+:80898000A24318F09C11249068004A02212062146014321CA42447327028A43481001216018420820235040000112400F02844218CC2822820AA4188C04C8038522B48C48883F841FA400A4C125414230C421823C8111038960030922188438708884F26180486038C62222A41026422128A84A44248189E228A9441A082902268480021F9
+:808A000088414A682418AFA6054344444401468174618444046219046142588C8472C402C9064D62412C1414C42100100642244100D048411684488498824819B8124228988484C99814883044AF8A0B8484788C024C021821269842100200810022000026011A288C810C46A1414683A1848148430D39388240842254219024C141698348
+:808A8000B4148411086942F29EA22400100214174641141126018981012A21410484224D284D9200000020248131148120084008260122282511011812258411422234924288426F2B04284100C0221880A2251811304422148304201108294208002E1115EC1422420848418C1491148088042810820211488088040048412588F8A3A92B
+:808B0000105123002301000023840AB0118458417054084488485D8200C8203114791114C622184311B4818228A481184842888AA14228200C0012008004F7256084002C042042810400190420012A04C01A00238228210484846044604180A1141E44448854194404251541C281648562882129181844184224716849C11D2C8294244232
+:808B8000C4543638111624420C1D224591444012E4438408690218C0914D58414711428846C18842450848182C1138828E4200424C84A428418088844E8842981AC4EF770A3C53CA27611CF21443681F12B231F42122572C3E216E2A95227441F1515546122464444F85A8AA45F2A1827958424F14E48645FC58164F12726684F15358121A
+:808C000063741EF581944AD828A5981A6429CC2422BAC1A2888869D462F852182B844F2125B84E25F84C8C2BCCAFD348C344592272240247364AF4441E5E118F510219EC14F295464904CF81F158462D4847238F22734CA4616F14A32483B41241353F4F1236411CB156C4A2EF44A54A8243B116A1849B44479E6AF442821F18CC111CBC4B
+:808C8000617284B3D8F884484D448E468F8CE825E8299A8C2224A7AE30472E4249D2483462157C16C421482AB54345E181C5112F42F324A21CE48AF234348F884F44E842496C4A18B095CA3117882F41E4A14C5444E041B14181E248247A16DF63DB46AA2A6D263BE427222D435E542E3E81AE8280D2CE45ECC4A458CFC1B15B4B2101125C
+:808D0000852151285018128D828028C18280082C280182A049904200102118A328218A12828288022824C012A01240032400222002222002AF7548F361711F97732CB834E7C5F5414A8FC5F75C759F95D7ECBAD8FB91B81BCEDFA5BDD1AFBA1BDD7ED67AF954B45E248B73EAF4FCEC2F488E7411F16C481F8BA8AA3B989F89F732B48F930B
+:808D8000BE2EA6E83EAC3E243AF75C7EBF3CFE83466F41BA127443F113D23F2AFAA28265F2CED82EA22BB76AAA978F89EA29EF4AAE992FADFEC3EC341F76F73B7FCFA3712E7C42FC111B8FC2F63C341F14F525A7DF4FFE71781F44F649CFCED46E61DF55F57CF2CF87FF74747E3CEB7343F299BC3F488EFC1151CF926C93C7532F5BF99C2D
+:808E00007D2BB38DCC2FC8DC44F6317117519AFD5CFE9FBC7E53F352822BE97F5EF2D7973F26F2E3662F2CB9C2FF8C862B9D2BAA2F8FF916262F89F36E684F8FF7C4EE6F674EF174615F72F63614DFC2F24144BF64F65B517E791F15F78323BF55ED93F75878EFADB552A9369F87F3FA762B5EBEB48F45FB3EF49E94CFF2FBC2A74F44F8EF
+:808E8000151587925FD3E3B6F6C7178FB7F9523687AD6FA1A1CB1F592F7914F47C5EFF5AFC33456D362BAE5F7FFB81C73F3AFA82A16F64DC8ABD56F956966766EFE9FBCECAEFCAFD86C4CBFB4FECED5C42F15543FF73F32C2A7F42F25354BF71F76F614F87A355BFBEF37BF41F9FFF5D58F7FC7F54FDF4F5DFD7F7FE76EFCEF5FC7CCFC5E3
+:808F0000FBBCF4FEF4DFFAFBE7A7421F14F5EC6D4FD3F3FCDF2F7FF57CDE6F65F7FC7E6F6CF864445F59FBB4A44F4DF8FCDEFFFEFC77672F2EBFC2FAF7B73F7EBC63BEC5FCD696EFEBFD5E926F4FBFA2FCD2F86F25FCB69CCF86FE9CD84FE4FC58563024007024014100120014164824C12412448281402408001921142184218401490154
+:808F80000049094F12014988440314001A4484544848850485046FD507211006251201284D1360161200258154383048124432881144214441D0A401490161122934914100842D115026682A08252259484825224822012044F3E93BC0431F4152281F417248F31124A7241F41F26A131D24AF24B911F24A9251AF243924AF3439342F3411
+:809000007924F842914F83E414F9244A8F14F8264A16F1274A96F1234A9E252D4A9E242D4A1F49D222F49124A5F29124A7241F49724AF2812CAB161D2CAF249921AF3419F54A9143B24A7934B8427924B842F92448984FA2F416F6C05B1E648F3265C18D111FC1D61AE1C1F668111D6CAF54D9C1B2489A65AB9443F248914B422F145A84A3
+:809080001CF3264885D1A4D518BA257C1831259AF2214A8F49E232F498252E4A1FC9E282F411248B421F417228F2116485F2912C4A7111DC6AF981248D1359F2489343BA4A7B24F842A2478A2B346F8A94224F8AF4149140084882000000400428002400000000800800000000800400800400440000000000004F264F221151684511C299
+:809100002451265218CD1116184211064A0243B441010044119048448742128121812AD124911416048C12E26164424444224C848194481A044D82128D44211688420CCCF82BA41446822202421418450122488601149A7481D832C5288244494281C1282D224128004004004228124321013C0822278111830C86426678802201441E8431
+:80918000421C02DFFE4A61241F84D28412227424116412A15F8271444A4142A47883B211D482E619042646018731608C6082188161911A42961C4B21E0A2A1414B412D24419038463484428B4A4F24318469088D1421182CC24CD048E8320A2901504121C011441480214811011B4821411004C0142228614C12040000184220110430811E
+:80920000214C1212B1480124400129830445C89480028F9608105116122A21011022411191824125810422B025A41419D448CA4881411014880441428850224422901684459241A02121482384140827448424BA84588400DE8B3448608A273286C1221E2C8D212AE1F284E88224611141941F415428CB41248118182821682287244E2474
+:8092800044258415BA16F252844C0144A1905583469A4427883022818721B01A6A8282C6449A2498C228FF9F4B2204F11E22A818A913A121133182898219544193644128AD1446858115480A4840C844444164C0821849014410C441623169F4922821234428512A8CE1C40246B69832A29840F2FE9A00142A18931122418912B24C429184
+:80930000412116110219142824724248E14AA142814322C24689C2428035486B21435C224422253812C351848C040022236484C0A2908888424145888CF2651C40A142150283B4228936289C61122504B02281D49678124C224224321841211829E288145218564208C039895D42444724402832881C0887285487218F2148C114D0826815
+:809380008221169288002781FEDB9012186E1C414011D1254104548181141A02B041C1848512011121389482A0214170184444118898324A9118428D1124806641868602499528A9480100007012F2AAC94004002288184002841A028904200412120020924450141E6850821200001A049C9824440016083018008602181E41184880A490
+:809400008120F4F1E29015186C11A4242393113C61F126121858284E1124824C45B18251482D218C5141226C42D92C343819636418854494288A654149D394C92443F4281189B88B8162C9812782924F35C812A483C43A0089280146FA53563082288712101821C62C1041A12140A8145518AA414C2201002024428114D88211880118D0C7
+:80948000220C241618080042D01229512A504892982024314282002F1D4F818242792242441822443148198202AC84016021198294124110948141008464418100822C1444088150128121501889511290427E8821882226084A082E881FBF031001001280038210116218224225B4C10244281C82E2310484006081002811480024812414
+:8095000028008128801AC8881441438411862832281622F45CADE028820180621218A42285820600462112888401248410688222250412004812142902000000844642061841418400260421472420028FC90900201108114E11186601108C22029018469829198444A882421918C94A17841A5C814592481E2860182210088185A1242019
+:809580006434812481908889810846068821F0B6510013460421842800904262409142C12111904CA11122A14004004502A4400244400B850121404118A248C0818440042012028214CDE3B01114C2631C85241488628400812AA4248311B1410212002084048301844111462402848B2426182402102282538498EA0198124C098B424ABE
+:809600003124928B928904C28FBA0644448C116848864454414426045C088C024A082219021C0354145C8814C1811881800448002841424C2262644148414014414631722489324800324E18F028571443212981C618521B2584121481849418C02884408801C9421A042884884140084F8221134444084B16901C47825263B13298282CB3
+:8096800002121032128123F91248004826F884A140082A548410410422004C04280010889421CC249446D0841191C417441934411984681488E082041C042601104241084614882214E4221844088324D182025FB60A242F4AE31242A8A49F422971493D18874C83E4862204728C260215E926F21111D78645B44DF121841B21557C48718B
+:8097000012684485518823B129F14824302685042AD22A62521E6C544B111D818D129D191E8447242D9446F816A2C9F1929A4688FD78318CF88572142E5413BC19F14152A5EC95746DE421E15223E21294C9C782978C99662287948F1386558989D242F4682B4C7E82F12C851448CD158F917545EC44061CBA22F8A464CC829248850F3D40
+:80978000282E12C784ECB862F782C888FFA8D192ED81E421B348419848293912B0CAF4F59FB0156211E4AF439214241CA362421D6B294243E1319412CF1458421FACB178F214452FC6C4214825D98CC448A3F485881B44572829C4828FC6E7A184344150B12FC51261C3C724A3D423B5EA52887A120691CF2EF22EC4A6FC62A66E24CB62DE
+:809800008F8EC2C82E227BC714424110A44847128C54148CD43448C881482C68816C888408241210B1480242002018328861422111508161199484191434113091249648230982249A44240982F04B2AE06BF3432E2F22F323718F44F1189D5E1C15F541318E227B2A66F1C88497B83F9CF221237F1EEA1AE21D55747F94D4C4B244F4CC0F
+:80988000CD5F94F4252555F541495F1DFC44477F54FC41CA2B3B2EABEF46E646E652F228237F51B141F6F4F5BFDEFA2B299FC6F66A6D9F17BA61D2395866FF51BA72B76AFF22242EA8CFF6F674668F86E682FE2A68FFA60D5F36F7175A2F33F32333CF86F72D285B145F14F245254FEEF2E764EE898FCE7E893BC2EEE2FF9CF8F811DE110C
+:809900005F7452177F46F6644C4F4AFFA5ACDFC25A555FD4F48D899FBCDC57FC6CEF2B3F1E9BFFD8FCC1C159F4282B3F13F7696A5FCFFF8AAC9FB7F26B6CBFC2F2E686AF95FC28A6ED86FF54FE3EF6EBB14F23FA2EA88FA6BCE2FE6AE88F86FE58D8EFE148E167F717741D327F53F368BCCFD7F3787C4F52F2797B7DA7BFC2F2E1819FA49C
+:80998000F25B8BB7B47F7AFA6B692AEBB4FD1F2F7F54F22F2C5F46F4EDFC5F5EFE6DED9F12F649415F95F5C5CFFFF4F4E26BAF2FF63AA27FFCFEE3E52E649F22F21F1EA5F11E14AFC6F26B288F55F52AAA8F47FF6122BFB95BA3FF5DFD727CFEFC2FC2F3E8B8EFE6FEB4FC2F86F6A8A88FA6FFD754145F3FF71F34DF73F33737EF86F7FD46
+:809A00007DDF95F54C6DDFF6F66FEFBF86F66929DFACFC5BCBB7B4EFE6F6EBE98F15FD589BFFF5D2DFF46D6D4FD6F4EDEC5F5AFA6D699F92F64D4D5BC89FF4F44347EFEEF6FE3EBFA7FFE6EE2F4CFE2424DFE2F27637E5FF161CF7F4EF75F15A5DAFEBFBFBFBAFBFFF9EB2FF59F9FDD5EFEBFFFCFAEFEFFFFEDCEFF7FFFEFC8F8EFEA89882
+:809A80008FA6FFB893800129012A01180000000000121091289028138812E144124114110842228008228400228426422802248424008424902820041B730011248C021E2826011C91212111508129012D2117828112274411463424812A148834184D428034182522ACC2442440C22824480046424802813A6464C02484462403A43FF10E
+:809B0000023CF4112485F2112487261F41724AD341F24A131D24AF349961AF343915AF24B924F44A9343F242934F83D412F924488F14F9244A1CFA264A16F1264A96F1224A87592D4A9E242D4A1F49D222F49124A5F2912CA3F49124A3F48124AB141D24AF249921AF245985AB9443F24A9243B2427924D842F92448984FA2F47192F024CF
+:809B80004B1F41D628A421C7141E4C6714CCF64611CCE652C968AF14BB15C4912E488F14B92494923E481CF826488B944D1A1CF9248A16F1244A96E18264592E419245F891282CF49164B081B248B111921A1B29E11F49F24A861B294EA29AB24838A4AF2439B488B698826F8A94924F8AB5E403842388040000004004000000000014009A
+:809C0000880000400100000000000000280000000014B09C06001128361111528118801409291143180810180CC02228804201431262244247824A0130884008C180C442460884124B84C0566844A0242200CF2B416115B22C11D48234342422814B42808144E181F44124A021812D22828181C5012604228512983189311812411C4385C1
+:809C800022034D2240849214008240484A481448A218428661426F4E4121A51A344B4256311521271283316449541866C21289C5252042C82286120843332286041C028D2419128941BC480146658228702452842032444784200A478C244D48691644C24262141E248F8607148001A382028400200111148C1428414258481058812082F6
+:809D000002812522C15283A412442E11802811084024241102811240880181800B88F072E4002008880080080000000000000000000000000000000000000000110010011400775E001A92174485081C229626E4221D518341C88467214A8431212D8387488CA1218A4881F5212616088591412B1C4847618B26290853E148D188083C2296
+:809D80001656C126A17100AD8845868124C3822748882896F86F8E10A22119814434CC2E2524286528F281518B81C44267214829E122A8185412285548A5488D1216A82448B0830187C14B242BC22419614148CB241C28028465A1511F2268882189B224816421882748841A3B8C1F190D0082008800880000000000000000000000000021
+:809E000000000000000000100100114001702907341120014824442C0100252201484E86538828484118081445082518588281988048841151222062414A18110229181122110800814120A1A482BF780229E322615245C221A5866124144FA498492F121151348225AE12241F82C11ACB4326450426AA24257144D141012F2291446D9282
+:809E800066B81238E4418CC89280C221499A2844894128914220C32244E088212F0841EF1D0E1D3219514316942221122116A184933412C0133046495216137288B21C742449048C125C22448D128160282008A6448208224B1282191A082194122915082602301832984A42E4E7480228281071480649145286211912534288812B8588EC
+:809F0000A929C1211008142946C1494541E282D142E548D12A6649585185E228013061642241890921002A01448486840C88826FD343C2224612912200801202130298184888002042F814821130841C88D14261212C0114104A49944250844400282884228444422840C828222092A850425F2102801488010014114088422442288208B4
+:809F800015D82C01248424322948482208518D1100841A84448802A1444941844288624381C022008444214430122FCF0848124081011B124246081200C240031601A01842A08200130494848223840D2860411E828820082180110282451138149212828482405428490A90128129210114D082048C8122A98481A6918211944D32184AA5
+:80A0000059182E824C58121354248E18AC81981A8E42841CC25427418E1A4DA8908AB02641C418278222D05804472189C138A8E4A8261844FC5C73B02204259121002A91611460120012420012409888410028301829411142852401000010044120820284981028820881004308249EB92480022890121A22912146220112121238232339
+:80A08000282321313C1664123021841484288003383844236228444C0118224400820021908889321C2122608A2CF447C200902114261154B642414341A28326010024404274424421423448242226CC24842225882304190411E284828B28008A928146828808631422842814828244F4C7CD24C041240023C2214A32428B210061830158
+:80A100005222232132322212502810048281860250828D12114C0395341818C46CC118818244291BC498800849584218C8C8007F1208480041211142511800994981384288A0822544C884192892818215682115223541CE184244007014A14846318478214123486411488420881404800210A2288F160A130A2800814830584200928040
+:80A18000111801841068825421A942220200C0282200C06881888008224C012822824304008524088582A14A4E215F250B2041C838844416440821160881212D48354218284508202152214C1241D825421881F1841262CE171125834453182C91281494940000122741008024223212F0C582141A141404442485C21244111722260660F6
+:80A20000482048224802448A04829084588093226148148084A8410080880849618944008348024A4182280810541D400110088901004D2A1481488430681889014438829082004118238809001400806141828120811848222191188003001E84804102FFCC041618914441441170210C204204A8221C48048128830821858411A8814973
+:80A2800022253458472485418AC218122C441812022D421924214246D82206D084C192122458C821827F120A1C728105CF6312A41226E242857178DA2232281C7398B842E831D23248D2247838AC1ECB292C09AF1298288517F54861286ED1214D488542D51134A91D818A58418F8AB882B2B813BD3541F21232D024AC884E848A31C4B0F8
+:80A3000016A1184A45A1862F9E4DB15204874284857211EE45334256D546B729F182B9D129992CAF8699188DB88D184913CA9868FB82466A824963426FA8A1CF85FA7C6C2F6B63133F217254D22471887E583814121642B2C2F1888C8F12A28E2F88F998188D126F21518E8D984F6969282E62BAAAB62F68B2EE4192113AD41452122655E0
+:80A380001EFD49DFB1B22E14611116B25248A2511B483E2423B97252224FC17A217534E5F822587523F3987B36D4B8B112C212811F84A75A4CF352211AF12757AFA8F944128FC29947DC081F4989542C42212A44E46116AAE42F84088B4849E4C94561441484148424008C4442088648F2844824578824822448811B48904381190439082C
+:80A40000101802219086840046024D81124601429246236924966824842896089648F47481F061615FD7F3252D4F43C72E4D2737356F22F247649F76D7A35132CE55CD8627846CDAE3F222B26F66F7A6AE6D44CF4EF66564EFF6F6A6E44FF6F766662DA72F84EE24FC1341BF26F6E6EC85FB9F854F65F4272D82C7615F54F4C4464F6EFA45
+:80A48000267667D84F4CFCC9CA29B122DC75F4596B6F62D2CEA4448F24F84ED62F28DC88B658FCCEE6EF1E45F153415FD5F525254F43C3267D277F35F266321B711F12D375F113133F57D544F164741E141E166F62F16A52EF6ADBC6F76E742E34EFCBFB8CC44FEEFF76722D948FC7FF69DB3FB6F44E454FCEFC58695FDFEE45F4317CCDA5
+:80A5000017FF58D95D7184F6F88A2E62E5FC44C4CFE6F642E22F86DAF5F4496B2F6FFECA844D84CDC6CF6AF8AAC8AF86BC48FCDCF6BC43F145441F11D5ADF23736BD2A3D333F76F13767FFC7F66973BD1E3D93BF9CFF1892EFCDE932FEBF9B2EB26F6EFFB6B86F4FF9BE7DDFDBF9AC3F3F96FA24EF77726FF7F7EFE97EF23F35F77A7F2F06
+:80A580004FFF78527FDFFC54477F58FC951FF779DF58F81E166F6FFBA7F63F9DF589859FCCF8E272AF817B4EF65A1AEEE2EFC969682FA4F8C6F4AF8DBFA2E683FDE4F62FF34A7155F51951DFC2F23D3CDD2EFFF1F37F367F77F77B7ABF37D3FBF18BBBFFBCFF8E86AFAFFDABFBFFBAF9BEBEAFAEFFAAAA6FCFFBADEDDFFFFF2DBFBFB6FAF5
+:80A6000037ED5F73F3D75FFFFDFDFBBB3FB5F75A7E2FEFFF5B7A7F7FFE7676FF6BFB9F9EFF59F199952F6DFDFEBEFFFAFFDFDD9F58F8A9FF2F28FB1AB8EFE5F13ADA2F2BBB9AF9CCCE6DDA6F6ABBF2FFF8F85EF84F6EFF3F4510044140012E111628022001124412008D24122812448002812961441981022002228001188445420816488B
+:80A6800002200882245048B048028922F86717E01A912126424442046827141D242522480129B8A454529082222564881C62885465DA180214354AE1A244C44AC042159488865432862C42CC81442E8382405822504892002988A48445F1EF9FD032F4112485F3112487361F41324A1D24AF24D141B64A9921AF2419F54A924B42AF34390B
+:80A70000242F347924D81AF924481CF9244A8D816FA264114FA264192FA27498C5CA9E242D4A1F49D226F49124A7221FC97268F29124E3F48124AB161D24AB941B28AF243985AF2439A4AF247924B8427BA498B24F8A84F9A44A2FCD0225DB41C6531D2C6E13178183942129F1116C2F4648F842B15D6829E982F4429247834E834F8AD407
+:80A7800018B12684E9A295984FA22CC14A9AE2A27488C5D34CD2A4CD2C4DDA1B6987221FC972687281B44EA129A342D44AF99128AD225B29A57694D82A5284293BB42D246B4B21AE5A3B9E400800000000400428000000000018000000501200004800000000000000000000F0FC971012A1129C8264221C61818D1283A284160830434685
+:80A800008AC124E3644132E088121848C478422548C8521E8844C982014CC2824311D4843228C9C228421A9A128247A11E84162291843094C818830627EC2024082012880242C60182993491162459C184302881A64144D24122120115865642A048298188A118838148082148E0210283921A1484428DA412C92222624614F0B5A6244809
+:80A88000422883829428004E1A13123418871490318189312846F41824162A7224688111A6B431043588C45293D12458488B813064882D9481902243C2286AF1962284278A1D1641184D884CC12C49622A1AB22824C1B10011181122F0221116088E484A2808137942A4492515140A28138848D2480281484427A24488422A0118928901D1
+:80A9000041CC12C84800A021188489899432822029944400CFF1010041008CB222214102834448028180284222084181404502184E21452A4922044C52248E242058121100A1001A0610022938142100414A08CFA1022B242E14B0286112671160F458AC082D112F8811349224C0828C41763124E448628425027244238162A2818CC8242B
+:80A9800046824121FA2218D022EC11D4849911428C1388C11C4F28514830428329A41CA02184FFAB4E8214441498212731181142866884312B8125E28801888281411249C48C2C5425006CE114D384A2288481222229E15882B8825221422324581848812850486B8161882724832184084A4AF8A98720A221A021D08482325C2311126298
+:80AA00008184410021222D12822752801208242A0540921825224CC4444121228C1162181971142A01328C25810185024381081A1424018FFC0718608421255812E4260800660422002588024116484204128C08485028404514C4182D121811444CC131224382849214008C02800121002E94B0227133433249241744002200844214410A
+:80AA80002912D848518282422442C02210C1981C0822874CC018343212844C829484211028819128AC518512B0420A21848921684212278440F26FFC20B22201281241804101830120011C01C0148301002244002013022288A6482404843883048B842100A2814608881849088C2231244098483759241F24A2125129024D2145E281523C
+:80AB00008190182C02814D1816218822B14C6181284113D284581820B4AC44CA1849226B424C714284918D2352488D319E4A499348289B1A8321B448880812248668412E148B21844E2AEF92038A01A1D02A018100481448204142188A44060000002022110224448C092E120016A414200222161802850224128D84168822024B48001FDF
+:80AB8000A5028082025022813688038942488881C21260225048212002002280412241222211CA220010048284420000488112202441042A2482F4ED9B802284042212180010022904002482101108811763894202478AB0229188882088081028C2281AA824A8892811C828100800824AA821A89082F05116A028188CA124840050822807
+:80AC00008082414208842082122882C18890286210420884411118281224922C92258418182812181A0480B218040089041A04AF3304004812B083C211190111148901412C0118400840084800888A04888448964188828802008112428800102C8401200442288122709C0480C2288110088428822822441222C301830A003822A904835B
+:80AC800012180889C324208821018418C4441222841818840018C0188C9428404A84459248CFB10D00804208222D22D04202008812222B212130222221214002008D12602448188200412840180400004480824204122C042C0121F06A5C0000801214482481118288954880084D1120088665842247821584A84111248243591884003244
+:80AD00008088A8828C280884100889420800B084022282F075530082C018C0280040A814400881848480438842A81461001240081A42684214004028622114421A84143814126220812251841220146C15F089194098142C9544888823028714928496048E282088321860282019022921C1C8188088C4149420C888888A95188881212659
+:80AD80004408404488038120012D41801102BFA60B2A6249B028E622F82A1289E1C37148A11B1B14878B8C618C32E368A18F21A9328A382A4B3B5AB5281542B132A451842EB283E141C118881E982883B118238B5112AEA82688E8834188B124941880A1442AA44D2F43AC4889E13804EF7407A0188FA161C58D28DC7823D812C218254F59
+:80AE0000C892C3E5414868A3A9521284B1A48948D886D8A4C218818FC45238842FE4B784EC429A1123A2822F4843C8ACA6FC9114818F483858B018313852488F82F12C288B114381D114227234E817091BBD002AA6221880A22185B23282BA2A8282D4289138982AF1A428E0E28242F928221F643228CB224E288AB812319AAA7848389E4A
+:80AE8000879982822288A9D12CFA2CA82B455AE788151844588856282141F8C8182446F8463A4A86E284F4E2A700188021E822114132112C088880082C48C882D038081C088DA5218501142110022280012280012E1120020000208102002C08890AF0FDC6A0224FC4E222F326248B31CF4332124D172F12F3FCE63F1BA366AE88CABC887E
+:80AF0000D14CB198F8A515BA53A93B88CFCAFAB1695F617627FC24141F93F319DB9E1A8E926F48FCA96C9E9C9E9983A8B94F4AAAA24F48FC8834AF6AB8DAFBF4B49E98B014117828043845B428F2A4241AFCADBEEEC24F42A6CE8D488FAF0F2AF2246C8D2AEFC2F638B85F71F31B11CD351CF37D758F41BBF8FFC8FC8B458DAA6F4BF88865
+:80AF800098EF4BF333B11B889F88F82F2D1F92F8F1F85FCAFA25AD1F92F351D91A58884FC8EC9AFE949C9E898E88BAFBD4F48F83FBACEC8F6AFBA2A62BAA4F49BB9899188D148B118B778D188B11CF41B178F7E47C5AF96D3C6E62EFC7A5FF8F85B552082AF224648FA2F2262487A27F53F33B394FE2B22BF37C66BFD3E38EBE48BE48F5B1
+:80B0000018184F69D8AAF927BF2B338FB8D882F8372D3E284FFAFBA6AC5FD2EA87E7A17591EB29F89E9C8F99AD998B918E88AAF8A4E48D884F49B8A8FAAFA3ABCE4F4BEB88A9448F4191188F84A7458F8151448B15CF4EA3D48FA6F36A68EFCEAE758F84F5E1D1A022CF42F22832EF46B228F22C16AFA2F3362EBF23F3FFF7AF83E387B717
+:80B08000DCB5C8FC2812EF62719AF83EB4BFB3732A7B8AF8ACAC1F96F6447F27A26FC2F221398FADF51B8BA7A3EFEDF9CEDC4FC9F999988AA8AA4F4BBD38FAFCA48FE8FA379FAF8EFEFC5C8F89F948488B1189F148384AB118711CB458F4AC3C4E92EFEEFB6664EFCCAF768F84F562C7200222008460810040084840088400890281100827
+:80B100008110088B244918082002883024842A410800001A0484C048004A024A02BFBD01A021811A021A12823222163822008418222921912A84211228458202282C012C01181A028218A0829608131802881618280184208122014331481280F47945C0421F41D228F111248F26F11124AF34F11124AF34D141F24A9319F24A9251AF6456
+:80B180003924AF347924F84A9347822D954F82D418F9244A8DA56FA264116FA2E459F2224A96F5224A9E242FA2F491242F22F59124A5F29124AB161F49F26A111F48B26AD141B26A9921AB9453B14A3924ABB443BA4279A4989A4F8A84FB244A3F67044D4A1B21CD4219324E28C7141AF24C11688F54F91164ABB451AF443B244E9584AF10
+:80B20000543B245CF822488F54E982D158E8A26C55478296F5244896C14B16C44A1FC8D2A4F49164CD521F4832488E24E5B191961A1D64AF44D941B24A3B15AB84F04A9443D26AF12448A9B122D44AF1245AEF5903208804000000120082000028000000800800000000C0480000000044000000000025016E4F006082100621004F8182B5
+:80B2800001124042C88886A8A116E844A118438484028744A4494328E182292103182426888111384850228383E1818434114CF412282881C1228744160444EF44076018124349E8827198E48118089BA44A018B14602142102804482AC82424840020420290484C084144C02816A1128B16285028404818286491D2124214842E15C83F6F
+:80B30000F205308189C14461812D9C8E18848D344DB91222582418A31838288C7514A241AAB43424328A8904328C029982A15287481842A902128CA1252826A212C582A14281EC84C6218B814D184AC244C9D11433D2AF790A002292811A0200208484410884428298202448040044A4442091924008401424312811811E482184188C1462
+:80B3800038116081898104100910F417AB001280020028810000410081004001408802800400604100244002800200200400000000508400EF620C30241004241024814238211240582400393128124014348226024912C248408208181288844C12088008228110088100808482810245F8CE4D00360443021032248C011081110444817D
+:80B40000D01221420144908222604480042444002C2148C22484222008228C04000000422818C440F46C3700000000002284220084240040280150482210821242088009180084000000004008810000002810F8CFF90000001002281100008229012824008A010022002800000020080084401C0400000084008400006F44020000818C11
+:80B4800081426141220012140000848901408842810480C12220112A82010021842041010012000026C4122256644112001F240C004008204108420084002001001420040000811044AC14120012008001802321021821100420088448009B5D0000408811521832620083012C282121420A2001408106B02801214D1A838482018A410248
+:80B50000848C21118C82212281110241834222785448AC41007F2208004008842A014111001001000016482138482200002042041218000000001149010000004412288001005F11070000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000B9
+:80B58000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000A6
+:80B600000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000006C
+:80B6800000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000004002000000000000000000AA
+:80B7000000440000000000000000000000000000B0530A4424008084110A0016084001823024000000000018844480414201288002288480010000200800800188ED45800144814008101468120089451208128081224108C904801148A44200283034411E842608811220022283449182200184818A01880087E440444204904818A140F3
+:80B7800008160889415182004100100848000018280018D016418483824228410818009082000080019820F838A380014008001004260180048028812281220150480018814183140422200249480820022220C248140012888481820000BF750500211E28830200E088342840210848884118001118000041008122818844002001009268
+:80B800008042424802850200240080028FBF0329C2341D32002A41258122B182A186181668119D96E08824A21C23024A0244C01A90156AA1254781588001A8384008186145588283811188A184848D2245088B184AA2811AC8883F9F0B21223921412812818162A98322621116881101830C240038400440842197488D34818800282A2156
+:80B8800001201114441808008F281428120298488828D04E07224C612283828211042084A9848048E1E88548A4125A28428104008D12100532A014C01420081008248A51282818A341981200848544428822A11883E8390A6662828D42122E1280051C06811460C2188130130046220180011100448C028223114184141488942880222ABF
+:80B90000820321A8121286482848042B21A0244FA107408824024004186243E12204224111848418008410828268448481810000450880044004101204C0942881002800482110F88337200121804498282A011082413841004A0880022800859418814142301189C224842C024041912212814814008440081012A452400800CFFA072A14
+:80B980003122212B123E428445A82113652489B111568246C814D0287C18218122648300CC02C5118454841C332844A1155442405529221A422804805328401888D18268429A421488038B425FA80F481008006A012228001005150800000018402844180881A0281828000042C480F222814C02802988014028044200F0EE692044884354
+:80BA0000691644D041028C2321C141100C188C22912418221A024181006081100422A0822001478460222422490140028908824469092844CE242CF87E62400181408806588D12241354C11A0222200214250840280820416283221E2486088110818128012301504181A4839181604100222038141A08F0E8DD0019060040341846948475
+:80BA80001140042A648242848460820026044302840000360C8014054014140243113882850244C0282781844124488A4488F6EB69C02A502422289048105218852452818982018400008544182828014C02440000118288896448888184154408908189835226412288224388081849F85A33A04839922229544285C421A02480324842E2
+:80BB000050814A923411471161400884228C227218220249021849180C5014C32221321469014C88A21286811148744A04841825C41440B1490814C01847921100421212B031688182448008004004264404124028182801260826684458C88420426A12120046220800002189324229026FC54612040048482C04114601004A2204842A8D
+:80BB80002188021084981844444416140284001024890C242C09008001902429220123014488C084F08CC900181112448351811D24A042484290483142104448B82829210822124D28103424180020021342280440281AB82238888642688816A221302612281688024D42AF310D250C484281144912688230384490311889416411801115
+:80BC00000229018A01881A0281205118125084C041185A0812841810524118388A42081662A218002D18F05ABE407282C122AD258C24F6284426E183E484C1649C331C17814B4283D54867823C78149C224149328460C24B118C93124F4AC21489793CD848014AE84168114F45D74891368C514E8486328A16E28CEAE8F89C12457C783858
+:80BC8000224F217186F4949A1294687EA7344A722162C117A71457C15714DFE1D649A1221419DC1182D843628245A831112AB218C124812EA48428442654C4842081C12885D54492159D8CE0A82CD94A62387B214D142482A513C6ACA7236592A82E242CB822D444AC8AC6F2EBD5D057E481F6281148DF4692488CB242E124F21DC39F8757
+:80BD000031784E588B448F9581A683D5F11C18A12E8887811E9885F8A4A4CB118B22C7218F2392184F835284208A621ACE218AB18838548562238CF328178F81CAB89DB91B111A312238824F61718AA8138D24EAF15C344D84EFDA0C460444800400482E8248884888498408002C2201001008008230882088014088480800122009860855
+:80BD8000824048628860886088F012F4F034726F77F21B11CD44CF95F748615AE584E221F1E382BF8CDA11E112F1C187BFDCBF6CE2C8C9111F9ADBECF2A8988D388F88FB8E848E84C5781CF8248AEFC37128FCA4944F42FA3C2C2AF2B5B55F53FB75A51F19F8A4F4CF8AFAD6C2EF623222BEB62E268A5891377ACF64BD925B444F42A2CC43
+:80BE0000AE8C8F4BFBA8928F47EFCAB628F62E56F031362FF3F7373D289F15F749614FE5F5627AFF74F35F37FF4BFBC9C18EF1D7F4EF9CF96C4C4F8A59559F9BFB2C24AEB2A9F388B8EF8BEB48F8ACB88F81C19AEFA9F9AEAC4F49F935A54F4BFAA4A5DFD3F9B5155F5AFE8585CFCBFBB4A46F6DFD2E36FFF2F2ABAF8FE15ACC9F92DA535B
+:80BE8000BACCAC91EF41F114148FEDFDA8B4EFCBEBAAFABAA8CF4BFCA8F8ED18246CF43367FF53D318F258198F14F478748F84D688F66339BFDCFB88B88F847359F3DFD9CF8BFE18149F12F28189EFE3F2BAB8A782CFCBB9A8ABAACFC2BA24F3242E67E1EFCBF8348486F5181CAAFBA4AD4F52FAB4F4DFD8F8B4A4CFCFFE8694EFC2722E1B
+:80BF0000FCB4B6CFA2F39A961D8BBFB9FBCC56EF49A932CFC2E34CFC88944F4BEB8AB9F2BFB8AB54DF6C43B265F63933BFB3D35FF279799F96F65C5C9FD7F75D7D7FDCFA7B7C9F97F658599F7DF81A5DCFCFFE3C38DFD3F3999BEFE1F2B298A7828F2BB9A829BA34B834F1B42EEFE3F23E2C4F43FB881D1E1C5F42F3248D475A5BBBDFD9A5
+:80BF8000F93CBCCFEFFF9E9EEFC3F23F3CBFEBEBA1FB929E8FB2DBBFF9DCD2EB19EF42F32E3C8FE5D5C2F1BEB4AB7FEF47FFB41CCF2CFCD4A36012C01184471284456181141608121412144828848524014024C824D048024C820149014100009094D02441583420424862892440264926882209F0D1EB3084286302230480469261428C4C
+:80C0000032485048C0141118228190184044280170261808832102148AD21C41582884221285A228221B2940484498388072143848228F446118C3072CF4112485F2112483F41164A3D441F26E121D64AB9419B64A9945AB944B42AF14B924F4429147832DB54F82C4914FA2D418F8244A16F1244A96E1A27498C54A9E24ACF4D1242CF413
+:80C08000912485F2912C8B841FC9324A1F49B24AF18124AB941B28AB945788AB9443FA4A92478A2B94478A29F9A448984FAAF4236ED0A2F4116485F2116483D441724AD241D22C31818F44F18124AF2433858933A4AF1431A42F3463882D156F8AD412F3245A8D814F22EC11F8244A16E1A27C18C5C316C5CA1D2C4D9A1B692417C14AF895
+:80C10000116CAB841F41B24AF91124AF64D841923255B84A31242D1247824A792498926F8294122E5A4FE5010018000000004400000000000000000000140080080000000044800200000000F0B18E8025C112118912C1221184002B148C448244A448112092181884CB4244402E471408A10044008886D182038449542243180A105484C4
+:80C180008081B24418221E1424FC87DC142813982847211E42C3A2413A0426893128504B1698111889F1154844221FC88202818902C44A8232214B248AC1A62CF114218A618300CD2228E042E111868A29C818C01CA3246982AC11B818649A814F684EA11413D428D314E1847126896612842648B238E442545840A4589CE14461428722EB
+:80C200008E34848F4512EC88524827414302111F4224E828921869A18589CB8384CC8282C4147B84C322A8824C518412AB41A8EC4E6AA6C9348C5AB88E0522120023022CA1411081018502AB14130150188051812800002E4842268852821241442601002A01A14423A22129280184508420011288122884AFF90D2E120040C3281440826C
+:80C280009418C011101841140111004A31258D24E04442485422160420220840812202221A04826AA14800248220D8288114084A22F2A37C60444CE252C1181A3214CC9149148486218444C81589B41218984C457AC4382817C8814284A15E248921C42838D2891132114CC11882A43A941C24124C1368A29E4A8E18848355284E12288AAC
+:80C30000C1D4A812C48F3104642244121425684114244293085601871183341440141D6482824D29428483C254856424411A22C13800108958281AC62818188883A3C28B1489189818809512524C8D8816F44978A025442E1181324953818C14118881048444112958814608AB48F01C41702804693428160289038A44229811432181828E
+:80C3800002492114323442812D8212244A482A78288218882231287FE70A4C64931A94181724800212144122303C122E18836414848413C122C0244C068489011284528C134A9821481668421280145921414308A0A1422C81D8822416885C2840F27FD324408406228024D11426445814205284412210810285E284220188004B4189342A
+:80C40000118D218053814C044C064220812101499221882881A24785002426480232EF3B0D2A01C022903818251C2802AC010000414410280181818426041425044140342410021290282024A421298189914449110840AC14800189F4AE6F147213A12189C2223878A53421228484211849B1288154145426188803C18D248144814C7501
+:80C48000489411C96481437321E4121482B31422258295511E412D349AC231185249A59229288462A1821840E84209614C021227148420B14C9141B0110245181894284881C011848B24224A018982419112812A8152821004C100844008102288388481848F6441784884B44842082A64E24081034D282C433812844661826222418400EE
+:80C5000022841314880222904140314412489142421A02424481005022121860241220812882A58124288A242928F8FD2D805441C3024230685A723802125634581324314183042813820435C248388428800668A021C0519019441880C111424B2488884E829825A35248828384314824484A014A091880C14887114B1270424855940031
+:80C58000403824681184C044D5B2142201800400221222811222002004488C22123A212033492301001A2822F54238818126E87F489123A0422381521222142210524141492204224E118B21149048AF22044AB212A2418942119844A1499448100229518583C42142430447888D1417C44044082568A64A08442A2104FFCE0D828B14804E
+:80C60000031602142122822115022400213400111C210411C044661881230428B362146154400850231684A1348282196414211A043022180025E9FB03004800C3361849020013C248288042084024942400850184220000004048085110888401D021082386EA42994821200888868828F893D10055C24110422104A0148014C22119519F
+:80C68000411141238182020000220010180400410030111435146822100200008A22020048004F690B382884464109244068444200A042C042224842741A4468424008C0111C04200944001148118420324148004C0120820242242250282CF4ADB4C048C0522004004644014419D2244241021C01852211098C91182E451B81A1902A1418
+:80C70000837228118A51941CC2482848465484C1844D21154844E86C425D4284D0420184D042018F954B92514F287218F84912167A317448F878617D48D7222A34424619E812D414528BBD119CE442D211D24CC24AA18B44CF84E412B548C44985F1196883B678B17AA22143942D16D84CE295C4191F8496226AF289541F81F24A131BCF4C
+:80C780001827A18B428E584A2B63228A98888FF981F23587144E218F159134689B52AD122B61217C8281F81121A954144982E41426337247146F86D412D511326426897211E84232512B426E134CA24818975611E4441D41111B422CF12456279145E128A84AECF1C58713CC2229A2484E562B4467838C83D4A89CB120732174217236E81D
+:80C8000014F244292E12153C784E6D522A7435D4C3B45331632672449831BD486C7171B838E181D42172318152862AF34128418CD48442CA127CC411D5A114818764E57559D84CB522FA4A551A18BA12F42CF563B4787838BA8298388B742B4D4A38828F5F4E0200140040021880012C8144022440024200244002244224001022112201A1
+:80C880008400800400840010044904414243082F954AB312F15426A5FC384E2B134F43F21B59D7C38D18FFD3F193933D319F97F51D1F7F54F23437BF93F12E2C1AF32D2B7F13F14D4C1B64DFD7F669694F54F44341FFF6FC1313DFF77727F7165E4FCEBE62F67D351B661F95F1393D15F5797BFFF7B752C541B7B435F77EF81F13F7F3D705
+:80C90000FFA5F19D3B2F29F92E666F65B576FFA4864FC2F674BC4F8BF774EC8FA549F171526FC1F7183EAFE3F25A49CF47F65979FFD7D2DAF72B6D3F78F84373BFD5F71D1D5F54F435359F97F76E7C8F83F72D6D8F91F75C4C9FA3F37F7FBFB4F6EEDDB792FFF6FE1B7BDFD7F72D6D5FF1F5C4ECAF94F5753F3F56D675F42B29DFD1F561CE
+:80C9800023FFF7F37A7F8F32F75B1BAFCBF1DC9A9FB1F1D7F7BFA5F99B9AAFABFB2E66EFE5B1D6FDD2922B66EFCFBFF4FF6AFA1FE144A1545F73F71B3D8F43F3787ADFF2F25B7BFF67F24A7CBF56F2E2E63B259F947349F357154F73F77B7BFF53F35979D7F6BF97F36F6D1F12F2253F2FA6F667E59FB5F76D4F8F87F16B681F82C64B8AC0
+:80CA0000FC22627FD6F675737D418F9252881F85751DFF72213E31FFF5F53BDBAFD7FF29F9BFB1DBFFF91D99E7E2AF2ABCAEF778FC8FA2A4FFEF8CED49FD4878DFA74CF37352FF53F3183C9FD3F3797BFF73F35B79DFF7F24A7DBFD7F3E2E23F35F24F1BA7B43F35F53677BFB7F73E3EAFB7F64F2FBF97F76D6D1FB6F6657D4E68CFD7FAFC
+:80CA8000597BDFFEF67878BF86F6216B6D4FCFCCFC5B7A7F74F6737775F73F3DDFC5B149741DFF5A4BCFB2F75F5FEFCBFDF8FA8FABFFDEDABFB5F9599BEFE2F2AAE2EB7B8FCFFF7A7A6F4BFF5C98DE568FA6E6AC0618002082440141481400001290412819A424122811811110210428001810044501243024503482260114486448002834
+:80CB0000484A028182BFE607A2118B12C0128CB248816212848056385944B211C421168812344213F2481122A042422A014846E18221E4A23141002150181A744821118286A8412D82843C2991288A9412482186A814347F820D6D431F41522E1F41324C1F41324A1F41F24A131F41B24AB911B24A3915AB944B42AF1439242F147924F8E2
+:80CB800042914F82C4954FA2C4814FA264114FA2645D2E4A96C54A9E24ACF491242CF591248D121F49B248F1912CA7241F48B24AD141F64A9219B24A5985AB9443F24A9443F242964F82F442944F8AC4944FA2F4CED1D094F41164C11E44C7141F41123E118F147191F448161F41F248B253D1282BF24897228F747934F848814F82D452DC
+:80CC0000E9A2C5952FA2FC18856D4A875C2FA265192D4B1E216DC89E282D511F49D42AF1912C4B141749A7241F48921A1FC1F24A161D282B3451AB94A6B84A29F24A92BA94923618E2A2F5C9964008000000004004802104000010021880080000140000000000004004282001000010026F740A4400188D16CC71443211112301818954B7
+:80CC80001845F241844CA1824C25A1165588E282643242562452480043034384E2444211C8181418229F2142C1215E288061112D8846A8821A324C80014AD228F223E130225B28212681641218263228942466422221D528410A14876611421031C489124194416271822B211014022249189C4912C04C4D4A889722001C3422490529E145
+:80CD00002184886118449F324381E274021E214D48A7535624C328160883F2224C1249417B1498224F14E182B1224429D2927481E288B7118452812E4251172B1244CD22492624B21C58C1182AF12118E153B24473283132904323A2492847814E1224A028AB215E9C1006001840125132112448241568244B49200849C4114904224E24A2
+:80CD80004014644400412848001181001D480046C148A908301189C8484C22314280292114D4280C43E24112022D131229C1480014404308110044480042114430482228514222122A01211022018424124B821648A24140683410A2413836486488003F4A49C211C01923C22483C62523E292E182C1328A0118772147244F81E28479A8FD
+:80CE0000624A3E884E1483682489D4410412422351688745409C5449B282D24183D2C242C5344224A28718A648A21860822E128144C2802221E4B246E242E121C218211AE28432144A1289C2121811812D1146941E4228628B92904860449048126269C144892191284CD424A22831328352814391124948C888294162884651821A62858A
+:80CE800049A2E1448218486C0E144414287123912325A812166812823012451281E281D8489886E04481C841A11744200211812F420449C112004B12104624222432B2118B86200126420212846082009F9E087026C8443051410081427028417421089014601B87461042C142601126312400484016C822822B428CC118C08218141012AE
+:80CF00001168414A0281704284442683C118C11F910A8180642128834168122914022364412B1299643280017091C82200228D8420812285921422C0194CC444312842488481299418487652487C528426223428922322481AC4429FB30F0084288414128410042C01481818428504242281814481002C04441528842403111822B0166293
+:80CF800011008442181928688918200181800448F05F7F4042448C41C81D8341096304B381C14189611212C9A1818D221B181019942A941CB224150219B214E4226482144D412B122392386B255643082142428F331878544328024AC258212B188C6141C5B2C90C8002282F160180324A006825628146217142041C92448962828005411A
+:80D0000000284935484084A1212948D4180120885181872416C811489886C814842F2451848843A2243048481FB60D20321431408842022A4428C521311144414D22522288881741004A1184220555B224C144001C0181504810023D1246A834422470828124E288B2288964824C0C43F88CF7C0214E15104845941348481129038180016C
+:80D0800082702C0129C5418C44F9244280643888B88824842FA158218C0C4098114A28D14104184031231B1430241824100281004F58016821B04C42896184411E2840026915382834154411981840042C044420012116182283343490141044B114024E2893342281A08148428D1281448C048908122B244D16400481C044830428C014F1
+:80D10000421C92812D12C8400800BC34314A1244C8287B148C9441AC04CC08962488C12124133242199448008D8688859448418901888130281288004FA9088241150429A221B04421912248180020440A2814188483214611628119E48148A5822A01682511941815140845112861844CC281D018088C21882221842804442E44EF760E6A
+:80D180006021121C01111D2A0046382281C80010F24418167148044C880862841140410870C4028A04822D1819422419022991411E26174C4AB116A82424002E1446E222A12129049F810E2120124248A44110051D1846311228938842014304001048E474028420DB42012648288102224810821842040000411088081A021002BC4601E5
+:80D20000295282200225C429214501A342482363841A64862162250100890824221054188C94124962444724530227482484801104481EA8418260815216041880A48125F815E224C41119B64402212412669C1A8244B088632445612A11822911A84125418641A1821210210214806282B027453248801401882548048D2222288823D230
+:80D2800042388882163442F01CCD2445A22915717E8CE441921146D449B153F529BABF12F391198F81F1E2882C744AE54266844F17F741513F18D11825D642D221F117443E482B4147923C03857494F4419123F6B124BF42714871487C56B7C251266F61B1A8BA41F58AAA4CF28213AB3D8D16AF2FF284289E5C2ED82BD1EEC45A7844FE92
+:80D30000515EC0214F72D46AD2319628C3E4B2D4A2B2267428B11224157E82F219414786A485F83E658416B8546A875D488F32746CAD14B92BF889B2BB89CF89A5772F82B1328247F114221F4892451D58848B45844F45548E17111F8524F424483648F8181230D8872889D1249562FFF605274639F134187025DFA1B15EB235E5A5D2E40B
+:80D3800022C44A4EE215C13215B585FB47131D9285328ACCD44158684F8498629C62141FB4694547C22F627286FA48E24F48F41487CD129467A22D13AA98481F12F1494135AAAB4AF488934FC14C818EE942F86EA2282E284301A2BDA10040180600240048000028000000824200200400800821420018480000A0412008128004100885BE
+:80D4000004F0F437241F57F3613DDF12F22161CF65F56646AF54F629271F16F322243F1DFEE9828F8AF8C8D99D41F5F13D75D5F1D5F16F68B8E2FE45499F18F83D698E838F22F631331DC11BEF1F1EF631355E4A8F43FA48263F79FE92C2CE8D1CF281F55FB6F3B2B22BAA1F12F27931DD81BF9FDC11F1A8511D833F15EE26B72AF3446419
+:80D480004AF9636A2F8AEA84A4E38FABF65B2CF071337FD3F72D2997528F21F33727BF56F66A66FFD6F72735BFDFFBE3F3AF5AF9D8D19F17724FF575755F76F2C5E56F68F8AAEA7F92F779F1DFF7E5BEF8A9FA1F37F649CB3F23F61F4BBF79F9DFEBEF83FB4ADFBFF9FBC2A29EFFEF32F2AFF75FB6F77672AFAAFA2222BF77F78886BFF335
+:80D50000FA62B3ADF15D97FFD4FD6862AF8BFBE46C8BDC2FBEFFF2F22BDC2AFFBC7EDF6A42F215775D47FF92F2252B6FA17124FA6A291F53F369298FA4F7E8FC9F23F7DAFA2F38F88B497D26FFEB5F333FBFFB67273F12F3D75C1F5CF861712F38F849E7BF97F3696BBFAFFEEB7B7F52F2766B4F6AFAE8627FAEFEC4469EC18FD1F3BAAD04
+:80D58000FFB5F49BC72BCD9F94F569695F1BF3FBC7BF34F4DA318FB4F1525B2FAEF85A5A8FA1B946FC5A5A2F84FE42584F43FB48DAFF2347F21777CF73F32F29DF52F25D7EDFF7F67B2B2F67F37F75FF77F79BF91F36F4DEF1BF39F9FB597F64F6FFFDBFF7F3F2FB6FE7F63B397FDEF7F9F5DFF6F5E68FDFF5FE73619FBFF7F3E3FFBFF7D8
+:80D60000BE95EFB7F6B4A29FEFFEB7BE4F6DF3BDA7AFF3F3F3A7DFB5F4DFC78F8DD8A9F17F7FCFEBFBBB2BBFBEFADAD1EFFCFDCADBAF2EFBEAFACFEBBBDEFD6AFA2F87FFC2D86AFF4CDEDF730E2E1110026184450245E38144618960898044F21148441B41285048A024214429819212B026012B12426D91E0120165C1483C41282241810B
+:80D6800044A348348E4828924412890244E0190D8A711114D481021992121A0620845212112145581A22242E484216685448542A6414E0142242058148448002C44210B21174487281048C928A484E1412608223648821489849F46F6AC0421F41522C1FC1324A1F41724AD241B24AD141B24A9961AF1419B54A3924AF1439242F1479242E
+:80D70000D812F924484EB14FA2D418F8244A56F1244A96E1A27498C54A9E24ACF4D1242D421F4952281F4932481F49364E1F48F24A121F41B24AB981B64A3915AB9443F24A9443B24A7924989A4F82C4944FA2F48667C04A1F4156241D6CA3F41164A7241D2C8B161F48D24AC124ABB459B44A3B34AF1431242D11A6D85A91462F14F3A42B
+:80D780005A8D114F227C58F1244287112E428755341E258CF4512C2D4A1F41D62ADC41B248F91164637481BC4AF111248F44F811642B345781AB8422AD944B42AB944782A9F922488D944F2AF562830000000000000028000000000018448842000014008400000000000028000000002521F2AE7D80911120117828441184342691218571
+:80D80000110843D82811887425385284430426362442EF2552185245012A2112C2E250814C3849498264A18335868A4418A9414B48835382904427828A11048D465F480965E248421881014CC1282118CA81024301814232158841E143C41868864802002870484254844D2116244866121A2A51A64413C22818172488004446C438834867
+:80D8800011286411F09C3634125E21811311584816C12248614F3C8142991428CC384883628417831E424C945432C72A8E2429343EB16A4194412D2426C425AAF54288846DA11C459648A12F94D34A9894871427824A21AC212964838427828E126011AB414FC101454204808112440C1A12084008C01212144125618381480080044041DD
+:80D9000028410A415014B028A8214116042842C08140548485044E8411814904419F7C01230221C012841C012200000011204A1184121408A0425084168104001840022C0120C9111528E2810240028506850228008400AF92425114655114413044888D12C088825602A54468C121471129B41158188C2B4355482444808251844B344C72
+:80D98000C824211B1422918149032E4618002521C1818F3144C1114974144A94DA4B429048222F5203412141006019830182881224848181212A69141228A6382811C12A441408128443051221182293012A014AD21221420812105AB418242C8162884C024608FF264171225125144418AD44408242082C044130151015D2141899141867
+:80DA0000414002411E214241284C68427041022484449253110832250119E8111442D148145C2452428420F2EC52241F24012C820584137128420A548901E30281162844644182C11781211A22284139112518341C121247821A28922123025722200580048B1221251452812840CC48AD1448E06B460146544828814126021242884120DB
+:80DA800092183A0840024118504A43C5A51120284402467888412802AB14142606122121454AA414A018280012842810921842ADCD001002121028410112148214002502814001400120422226A112424423821441C48481126088281E6123B11122028091984551848A21210230285FD506150281234118CC2A1668A1E01138198265C948
+:80DB0000183E8A84234418644849311985A14253A221941B5AA31514CA4E8698441C88928EA51164328E18221AC4163AA41624182049E88122F928148483117868F2A37BD0824534262818C0112825810400008001641214841044041424001A9254122A81A212442E11282E1244241A74224348018921D86241481414084A12A41418EFDE
+:80DB8000DE021012420C32814483518187211008128414901842546048400100288181160180418492241604001A62828041021289316484812A012A648110FA17AE404C341828161A880124008448100885622242200418201408833251A821C021118A025483480328001810B81182110C188A8486A41682484921F41ECFC02811123141
+:80DC0000211508000010110545880811328141101804511143081644584884440082402859828D15211506219410031014121C7222247214F215240089021211481001841012028280110441181032848261124308908123021052822BC115322817414C040028800414429012488218181022F2C99B308440941A80C1128B2120010089F2
+:80DC8000018281242004124418828184221E281C51853024131AC4145226A482002332242449028C01142013DC48B318222294444034D430112822222618250200811008004414CE118008128043416181828412200128282848450222141139C21218404818042821508485242304FF8F46021800000081681008298C1162111880C23131
+:80DD00001499141108D80086246449C26482C282A91182C2144488441C488808C048C628C5824934412A2848046FED0629412552242022422823218192421121442128504828C1244C0244815C51184D11284508C9228153281111178214450841001411443941E44822410C4311E81C82F2EEA81484904880028148D041041524E881327C
+:80DD80008813A88416011884103A8819418118022282A89412148659431AC418802882B481A141504818684308202828180229016FA14812F384218D2C8FD2D12942E9818262831F947218D88852814E19A55884A3E861D218F814444644F11411C751224544D9CCE1915ACC9D4F4F5A6842576286C4241F427484C62D4CE221FA262417C9
+:80DE0000614F4141B612511B1B11CD42C9A8944F8BF43E286741172A56E4C1FA1455CF22F1EBAA14457421E4227114C2189D342AD11CD1288185012B44811AB181F844131D1140F839B9CC816482C29529F1B121111D812887818F8946F913824147213E896F2A711B39818528D211D21247E8265918142751C7618B942CF548A81E7C2F75
+:80DE800082BB4AE51488F26662A031A3311229322272812D48701844522389F813848A584A1F8128B253A536107488BC82D8B508D915B2ECA13B6B9938418B384B32BED32F9C9B3B9321F2641411CF18F722885B838116487811FC41582AC624CE84AA354C4B4843A2222744CFDB4E0129011882230623042302240040020080041A042CD3
+:80DF0000044880052904C8905200800142A084A084A0848008002400008228BE1B2465F6272FA1324E487F72F22A622F22B442F47F15BF9353332F88F841432D32BF11E114F433333F1BFA31294BAF1FD5E141F15DCF7F76F2C7171F91F176DCC75CC76C6F7BF1F27C4F44F5F4F2EF52F265437F2ADBCCF394B58F85F79496FFD9FD1D5B0D
+:80DF80007F7FF5C3859F9DBD41A49D5F68FD1E3CCFCAFA3C3C4F4AF9A4848F78B912A973DA79745433246F63F3677FE5F639691F94F46747AF82E6827648F83F55FFD35333BFFAFA9B93AD389F19F9C4C53F33F3B3B11F93F3FCA8B7D49F94F476741F16F2C5875FD5F567CCDF5E71CDF4F55D5FD7D744F394966FD8F1E1E37FBFFB9A9B5A
+:80E00000FF7DF959785F7DFF9FDDDFF1F5E76557545F71F18383AFDFFB8DD7EFD1D38CF21C184F48F994944F6AB916FD3A784B464F47F7F78E241F72F325679792C7438F21F16D65BF1333688FA5F775378F4253138BEC9F3DFD9B91CF71F15A5B3F33F3D2C15FD5F2B5F17FD1F15454CD9C5F52D6FDF85554EFC2F318794F2BF1FE57EFE6
+:80E08000DAD2CCF1BCBC4FDFF7B5977F6AFE1ABCAF59FB12322F2EFC3F3FFFFCF1E7177F72576A3F28F94222FFA1F59A98CFCAFAB8A2EB8ACFEBF18A9EAFCEBB62A7BC4F46B3F643F23636DF73F73D3FCF67F258DADFD3F23B33AB268FA4F235778F4353BBFF3CFEDBD3BF3BF91E97EFFDFD33233F1DFC555DDF9BFF1D1D95FB64FCDFF2BC
+:80E10000D6FFF81D1DFFCEF7B575576BF7FBEFDFF6E4FCCFE9FBF6751F39F8BFF7AFB9F98BA71F25F7A7A7FFF3F3C7367F7EF3A7F7AFE1F14353EFBDFB1F53EFDFB9A4FAF898CFCAF8DC9EAFFBF9FAFCCF86B7E4FB64342D5A8001218429410800122484200815483211811301101811180190289028228122B02409881044C88116089227
+:80E1800014160882A041288A04920028F08ADC001D244302263111830289011450121781608144128B34128D2443511880028301141921D1823118241110F12412841CC12829C128273240120184259544813227244782D084A414243FC2013CF51124A5F211248B161F41324E1D24AF14D141F24A9219B24A19F54A9443F24A9143F24217
+:80E200009547822F14F9B4484E914FA2E414F8244A56F1254AD6F1215AD6D5A2E44DC24A1F4DD222F5912485F391248F14F19164A3F48164AB141D6CAB9619F64A9159F44A9343F24A9243B242792498924F8294984FA2E425052D591F41D62ED541F26C121F41764EC264EF369141AF6651418F2493658F6439245CF1A4482F5479A4F850
+:80E280004215678B2F14F1241A4E156FA2685567A246F424188355365A52841F8CD282E149D62AC42489F19164E119961E1D68AF42E94896BA4B612F2479A4F8429226F842944782A9F9A648A9C958AEF6402888040000000000800400000000000000400100800400000000000000000014148FAF4B12042A9128901C267914411482216F
+:80E3000088410140CC8C863111288444442810011111890129021130331141153824267821781882C2381961810060424188448C812426F235B21424A6118C114531148110151802000080312C1C6141164828483148224142901864812902242E1C114023C1861CD8148188064C4142048921C12222864C29F47E7C24601E8D3483034367
+:80E3800061D216115412458A2813015084C9A88151158291184781A2824822511481935124853129E0146313151459341678A1FC811A51478A1CB22861410028C3012666A246C46956F22E7150240050141588410C4418000000406183384548041051180048122428244002E100282210A221181A04401244049880618820F29C1910028C
+:80E40000B01172227111382C2821190410021C0180C4A1C021483800220010C124D048024A12021411244460C1C0482D11120014124243C114A0244181F05EA990111E213B212524013911AC2190218CC41991841B8517839C41A8C252418E491F82D438644494421D3C43941A89024229B125C115418193D73821D222D8C198328E223466
+:80E48000848D11A5867214D828CC229A44345840FE77622413E131621325D412C3124342840213028485D118E111983883A482226A015E8884871400601115F2142884CC02232532115484B48341929CC7182125110181511285E46481A19449628540D4294A01001B2110C9198932121904897412012014911115A8841449C4212E41F0E8
+:80E5000022448581942C4C0422808432174410A116458302212E58AA3112A1164398224A9188260642448481DF424F81628510892481C11C2842304412628440644429344260225488D01658128C0190128D1429424441914221A1818C021CB21222F48A2114A9314C28224F8854228C913821448A23F23FC6001F842201001002260C53EA
+:80E58000422842440460884C918485064A229288A441430884104801285885044144103C49850418C0134E2856028304218AC2828142DF290E120024136242200221281081011D184800810084904400281185044034184313129411A021148400C0522282820090248880414814F46758806113501833624324C903A7422826711108816E
+:80E600005144448E4A893184478245281E54C2212D2C1748812D1816184AFC1522154236188136C8298441AB43418E62322B814E15A3A4214B488D242F8198222B3849B888D324F2833520021820041820820448A041441628841492440014184A135118181004414C8201221245034144D08142C148AD111181860848A5820416088444AB
+:80E68000488FB804482E1124400800271422259822812114224844217044C14C81835684422426024649121164861506CE2244248184508248188140C891830567812FC2012212424129F283850000874144992201308554950486014304008C14280280414824382422944019014154404104611C4484088110120140428851222822821B
+:80E700001FC904244061122D412002110046224492488421282828212008C024218328421422C4283022422194211484859224114A428228948415126824A0780000982FEB0C84000041211C120840841154418001144D4144211145428411C1441419481C08208108444B24421D44408291842195A28110469484008140B42C14E8170F57
+:80E78000A23C41581C872216483823902283D28202210030434800142822813782B411460245820240022682424A041CD221082A8182D71848011082C24400681222D79C2001280000204628844155484A022E142285454808441222A0426285012A240419021A2488184412011244241011C21812001824C0444002154491418001D02521
+:80E800008224041180082820840C0000A45012104404830441624411471241892442084189221311012480880184901810948284BF150A1827821429840228291412922211C31119D8180229342222E01224868464142A44C242442A149444C9941428103141144427829021E0A22C8411744C62844A61442A01230820F47D51C028241A76
+:80E8800044120114508441C04439841202174214850411812758118A43928894842C022E88142C28421AE12A4408211914844484E1411881021664883086632204A304FB1F807692C111117011F248213F22D482728A52B2214D5321481582D232521364142F44F441AF8D42EF1418D8E47442734B031F24766E21342C47213F42C4233593
+:80E900004852221571259A114B458E364E189F31B493D828D1918CB518F82A6896028869D288C1481FE10A13B72112F1264E5D2927922414D5D31432481F845FC3867962C9682E12137468D498128C328817422CE2E352189BA2CCF42E2F41C42E241FB4D841622D437288F22C488D44657C42F1A249445B84899A828D4377184D12E57EE4
+:80E9800082C814CBE66163C444E88B3A4F85062CC11AAF21D218B12AD44CB222A1244A7421E44272283358D5167D68F454C52E444D286A74417C2939245A62C21F14B463F2844C2AB2C1742A8CDE8CC4642F1291243F48FC24A53F54529587248D24CD263F12237323E28CC3181E848745124F647514D242F1383A1A247664D622D8BB0337
+:80EA00002002002C81048488488880188418044904411004618001200882188222000000482001820020088220880200426FD1061F3637119FA2B229D68DB22DF2592B3F26F642423F32FA8AE3BF3BFBC3C39D826F48FA9DD45F34543735F525655F92F664681F4AFC65654F9AFE64622F73F757DF7F7EFCE9EA9F6ABCCAF474F8CFE7FD7C
+:80EA800072563F38F883A2AF48FA266635522BBD491F2A5A626F65FE5BF99F36FA8383D5FA5968CF6CB8CEBCC6F8C8C2EF64B4E2FEC4C44B11487BB1141F36F751738FA3F3296B4B225B229F93F223232F36F623A3AFFAFE23237E7BFD872F9CFAF9F4177675F727488FC2F6216DEFD6F6A5E11F57E75AFC65F65F37F75FDF6FF2F4626213
+:80EB0000EFEEFECB4DCF85FF5CFABFDFFD33333FFEFA8C877FF4F44346FF54D49BF4ABA56F76F63727FFD7F47B793F7A7A97F65B68EFCCF9DED46F2CF8CEC2EF64F5A6F66F4CFC14148EF26FD20F1F37B313F6392AFF42F22D2AFF43F3792A3F26B662F6EB6FAFE2FE2B2BBF35F7CF46A9FC29641F7F5D33F5F168641FD4F4EAE85F8EFEE3
+:80EB8000617DEEE76F26FE6A477FF4F46B4FBFF6F6EB6FEF16FE2C688FEEF4725E2F2DDF23F68E2E6F62526B75F76B699F6BFB46644F65FEDBFD9FB6F3D3F1DF8DF4DD48CFE5F5CEC4EF46F4C8C2EFE2B2E2FEE6C44F43A15EEF5C48F171733F31F71A1AF7F4EF82F23D3C9FA7F263632F36F6E367AFA6FEE3E3BFB5F5CB43EFD6BC69F60F
+:80EC0000F5D175F3434D8F86F64549CF9EFEE9ED9F96F7E4E15F67F66F63FFFCF4436F7F7EFEEF6FEFD6FE6C688FACF6D3FF3F77F7ABE7EFF8FA672FBF64F44F47BF94F68BA56F56F67567BFDFFC6A797F3DFFDFCEEFC7FC4E5CEFCDFD7E4EEF6FFD3E3C6F4FFFE6E44F47E5A6F62FFDC0113026104248014140414841081508112811890C
+:80EC80000281118100101814280220541630265024844541782402264148638160884486C82648441028F83EE3202A51181180722202148425021C012714124E22100830812800254241C8213582424864824684815238111071221281614180D21A3185002D121242222D144128143F71072E421F4152381F41F248131F41364A1D24AF90
+:80ED000014D1C1B24A9921AB9451AF743924AF5439242F747924D852F925485CF9244A5CF8274A16F5244A96E1A26459ACE449E2A2F491242CF4912485F3912487141F49764AF29124AF14D141F24A9219B24A19F54A9243FA4A9243BA42792498B24F8284F9244A9B93E0A2E44156281E24CF24B111B642C12C29D1C1F44A941594BA49A9
+:80ED8000F44A9643F24895412F747924D8527926D842D984C1156D8A442E1A9665A29645EB49E2A2F1912CACE44156289E2483F49164A3E441B648D941D64AD941B2489B65A939A48931A48B144398B2678B184FA2F18B7E000000000000440000000000004C0188000040014008480000000044000000000021F06469002A5121180014CB
+:80EE00009C12581848002116B1384C7821982186024228C110112486022022062C8244B2111A528281895421C4248B141192544F28048D924301414443C324412FF64763148661C22440D1220423962681834238846C0414608487121486D8848462B88022C1C545784184885868445DA21D2484514CEC644221C2414CCB21184812C02202
+:80EE80004CC442384E228A254881F2CA2924424E314539122170426192A4288C342887624156F11248149166618235022E4483338933188437A4504111A8C533282663522FA89241A7442C72416812B11EA47B2514621695842C7214DA2481C1624F24E841487416F222D24001220011243062150C008244A281228113088E48814100283C
+:80EF000060144528A482424094C6C0114488CC0430441028810946024A88841284218222F2C8E3000000153428001624B481D2226181241508154824484188226214002C15880C98C28800804814984181442119D4389141253181A50240081022022AF4EBEA14432282CA111D1A8D124042C3825082C08115A8812792481D181818C244EE
+:80EF80008571225429514443641123344884B026B481C1872E12A41D225032148E114789821608C48085C561833548684971285448EFF5054982228261911D1422501288428C2AD19248C89894811818148B4826041C14116244444848822028B48161281260923502511B811A981189115341212142118489B44222C22828AFB74A0180E3
+:80F000001841421A08244351221121121431293241D482120017A2494248C51289E431088B41834CC22450418E22851482141912D285348839048918A841188CA641004C11D484E46E021226C944100111421849116482200181210020E82488411384082001AC784804234298511A042244008223C148C168308229833C1744418122A1CD
+:80F080002A21F2E4F70046182962441624428112584821212732112A118856291041163428838968B184A260126081544531284C64994508458124022141840028B02844981A12903200DE912072121412226122126952422100151844286824452882028400504800250221902200004434893132281885C19436E218014A0141142120DF
+:80F10000244104441EE8C0321B12550A17444B121147124C21411852832D15812E828C742A1489621841449C92824183012B18F0228B83943A6312952144C4CC524A1A82C6A216984CA400C68291C4AD42C1A99118328F412232241FB70A40148282012F22817422420C8C0250121608482C02E08884018D1484142588120241008025C16B
+:80F1800091112C5141204123A9121F89462201C03440840480013FE543414445480145013C0114811440412458810090824D21D04A46123424100192114281C0221484844032481E44250152104A0920582212241280013F57038081C42885448852C24598229028230218002658847024084D8111250831AA35444D482684441547044CD9
+:80F2000095548626F118241088F118252128414121438111648447812A842102DF9A013022540081222A61534113928884403821002828561538186058421031148052288182120014152814032004001944480181000000429FDE06282450420081818088019082C082D01498118C81C251431441C229184D182018331292469241130C86
+:80F280008A85318848921B48911219082A816241002828405C842185D4C90E440059B41832114C14044921014021485412C0118181499421E4288304C01B8112C0428425011518884408854448782124641189110100162804301280B4FA01188122001002272120681292D04202E02241440300002485018002A412190242001C12220826
+:80F3000082282304421002210018009042F03E81001283111802100281A100380085140826040000282E468180C181460418D042410220114581B1440921001082B1188842C85158701448F847FF20A8484438008128000084448428501482B041C128804654410022009028183A0822B0120448221322021C8124047228239248C0682145
+:80F380004956182D222753D0829626291322281204B01888C284B0182A51182E8498221880F1C2381238807824318A928412862164241789821B48821C2CB18414348448C014143811424C044C02002D4444CE3140642C87611782C5588CCB22AD141D128189419A8849D1482118F8141C8921D31DE5C5A2453D299149F426311E2A82CDDA
+:80F40000185B181CB544745278458315542847142F14F4D64D6E485784183F8325A8119125A41116E42861421A63511812CD1924BF2A0B2723EB1B1B12652408A436C8246F49A8A31B28183B8863B224D854EA18B8319A3823F12D11C9312823782A51618F46F91813EA681356F498B2DD21481F1BD829E488E929678911DF4988FCF5ADEF
+:80F480004E223F1135215E64152A84B5488253C887846B44584E2187446F574891645CD286F258231AF2112127444D2367812E1935F828818C62911E881D2B35B829525645EBCE82F4A1AD4F65F424261FE4C24855F1452C12ADA2855A828E522B3927442F187315D18998982E12F09837895454424E429C7118D11732222FC1D8A8A4461F
+:80F500002E521E2AC7421E446F82F422E10000180000402208864862882009820000100218804C94424440A482442A49144284082212241240481284321430148D21B0480228BF2A41B372F7222485FA3B15CF63FB1F158B46448D1885FCA838171A8F815119CF89F338BBFFB1F322389F18732DE982F1A4E98F9AF82F28FFA2F228394FE2
+:80F5800055F531B23F367962FE3E2EEFEDFCBEFEAFEAFA25B76F66F27797BFF1F1BDFED7D19F91F979715B9B9F8FFB2D394B151D118F92F1151D5F75F356744BFFAF45F15A1C8FA1F33E7C8D2C7AF374623D64346B757FF6F2292BBFD6F61C1E7F51F14C4875FD3F31BF73F23D3D1F12F2381EFD15CD38DFF3F31F3BEFD2F32C31DFD372E1
+:80F6000071F7FAE49FDFFB7F79D792CFCADBFDF16FFBF7178FE7F22E3EBFBCFCBAEA8FE77617FE73223FB3741AFDBDBEDFFCF85B5B2FC7F3B5998FCDF3397C5F45F141118D3C9F91F151126F65F7FEF82F45F14244CFE1F73A38ED284F87F74C5AB73D343F77F72365D7D29792DF33F31F119F56F63B359FD2F329BD9F5AFBA9A19F99FB54
+:80F680001999DFB9F92BA3FFBAFA2AAC9FDBFA2C2A2F82F72679AEF9CF82F72628AF96EE56F52D3F3FFA7FA6F8F9E58FB9F8A2AAEFAEFE83DF2B6A1F197E9DFBA9369FA5FC878FAB7F5F49FAF1FAFF9BEB4DDD11F4586BBD191F35B176F5F8FEA7246FA5F1621A6F43F762446E68CFE4F52AA4347F77F73F67DFF2F27F3FFFB9F11F199F4A
+:80F7000056F63B35FFF3F3ABBFBFDAFB29A9DFB9FB8F8FFFBAF8AFA7FFBAFAAEBDCF9BFB3D3F3FD7F77E6CDFFFFB6D7D5F92F27CEC1F53F3FD7F3FDBFFB4BABF7FFF9E8FAFABFBFEFA3F6FFFF7F6BF39FB9F9BBFEA73C9FAD7DFAFCFFBDDFD4FCFFFBDFC1F4DFD4151CF85D599F155176F27F5FAEE27266F24F4775EAF87F77C4C4FC7F681
+:80F780006C6E4605411006411004432201004012C124124C32118524694411424014D148828182011880012501184845C148410012A041141A048400004604DF7A0B109118191218011588F18128E0885218538168883417884028041C588450A2141D12C082148482A41308118939818190929287121311924181501230422229E18114D9
+:80F800002A2154241F7D032E421F4152281F4132481F41326A1D24AB141D24AF249921AB9455B84A7924F84A9153F24291478A2D915F82C4914FAAC4817FA264154FA2651D4FA2645D6D4A9E244D4A1F49D234F49124CD121F49326C1F49724AF29124AF34F11124AF369921AF245985AF4439B4AF443934AF447924D84AF92448984FA248
+:80F88000F474F6C01A1F4194481D24EF243111AD121D44AF24D141F24A961F41B2425A81AF447934F84A9143F2429247882D916D48984F88C5112DCA87444F22611D47A256F5268BDE246FA264CD4FA2F48144CF22F59124E3F69124A72696F44A129E64AF66D141F248B25D288F443994AF443B34AF445984AF445B86A9FB8452DF780B79
+:80F90000828248000020040080020000000000000000400100800400000040040000000040018F7A4D01121850418902212098128941181472824482B121014024244241419114A084902418C3044C024C28228202158828210100C018002224848446042F440B366418444D89224354484521430514124E111628F212296614D848F25113
+:80F98000288984314C684C8211F852A1444D1183A4841AD2240143419814482CC5482C8204842621D469C44830141A2414385446C41183F27563C0148621D11414C54C1026C18743D118313846D582B12238192D341E29897218934442CB214661581887611CA84849D149825158CD122216748498542A642346C82B48181698216644470D
+:80FA0000282181211268A146C45583F39DB8202211C4882228C111220000121094224810A424841848282214A025411448C22A054100288004800800C048428444484270424408241FA50B10C11228141014014002818C04412D9241001CA84210442102480012A4400841C012282400007048022412240000430200F07952100114124164
+:80FA800064145023172282811351611F88011488191484414C04214450183122004F22081C12B1250990481949133C112611428204522C22D16241C61232811243F2653B40011440440640028284114914081691841C0416C148001441508114204162429021111E210070124141C81119120A10028011423414388418443F870110C11287
+:80FB00001A1201541542C12165028361922F1118948221408468424465023A082C0428501882A110F484482C8132488250420046062B24121E422221495122282121A012C7ED14242E1400C014209222440080011416449118843018C0228C443119810046044522042800008511D812A32118C01100211241000022003F780340124C48B3
+:80FB80002132140021841C01008321480212480081002C0420041226188406228C820236240114801612C811412042CE42104404F0CDFB0000514B2110124811088419494201000081404841420820441818140200411145A88210046084400810483412288118180086F811BA004722411414263412282502403811102111440284481816
+:80FC000081B424141E49206484CCD424312423840622288C226AD3CC211261812C46081653844D121E2489D2822481810286784102241281C44B1212418426411C38118812211588199118128184203248845082000081412042541844002413A112483011810000412440140424F72E005014444511410110C1818008149098C08400106A
+:80FC8000085084160185440200240000100400002100121C014200220000DF590C1241A0218121001C81091A489211188901408808400124100421004C0200418614A2831E22222AB8811134132450221052A60046020040F2C9C700004001001C6119889882211C4138886048820084004C48048400140021414C180224282814411C1143
+:80FD000042022411851402240021008F64098D188744453134E4141100504545B424E213222221018140522235A2111E129E889E81244410D2154211518885B848A444DAB21402821A08214556444F22A2233602428024421252221E12BFAE0100004004111200200820088001000000000044A018200828005022100200201101000044F6
+:80FD800000007FC80B45C8484248000040728144C5343219023100818221212981818188080010414148C84842480000230144444C8282020000400229F1981340084814004002145044142888000041401842A811828A0800001C0244C5084814400540081165051A1202001284248121816FC804800400100214604180420100000021E8
+:80FE00008001880010081441608280040000220027418012120100001002183F3709800100501814002C01000000008200100800000026440200280000002100000000004008446A0E818364444210012081185484CBA22222180000A42424123292148240441401118912B84825A4842824002110147C2468222200008424506212FF9432
+:80FE800005164888C4412450122100824C488492210000001121258481C18888004041D21102848448480024001840448482420200004012F2B938000000001602130140410111801819088141002800210049020012004002202101180042420040881208001D5F0000000000104101210000000000000000000000604800000025424292
+:80FF000011028001000000E0DF060000400231168101881611521110011444828441412042081018C424498202430144142425032342884111321246128201002644080067760012400110C31290811F21411101828280088488008181002400442042A22220210A105422242D12B012511985621142000085088508411FF905430144118F
+:80FF8000105718142941E31818B9887811013C016081818485012002140044006C094908222088028021512224004001216081001014F8DC9CF022222F21E222B11221B112013C512229F812111F11B189E998D888F888418F84041D491581548885F844484E444F42B444F22424222E2480524445E642F222222F21C2122B191AB89229C4
:020000040001F9
-:800000004200C485C8687FFD0100001411000000000000000000000000000000000000000000000000502200F0B8DB1011110100000000000040420224502225522200404202000000000000000000000000250200F7FC1001110000000000210021240024210000242100240000000000000000400225020050225022F039C80000101115
-:800080000100000024002421002100002421004002000000000000000025020000104212026FA80400001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D000014110000000000000000000000000000000000000037
-:800100000000000000502200F0B8DB0000001400000050222121004002000010522210020000000000000000000000000040F2C3AE00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB000040110100000000000B
-:80018000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8B8
-:80020000DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D0000141100000000000000000000000000000000000024
-:80028000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000008A
-:800300000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D2E
-:8003800000001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000007
-:8004000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F068160000401101000000000000000008
-:80048000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F068160000DA
-:800500004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000E7
-:80058000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001400000000000000004042420287
-:800600000000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001400CC
-:8006800000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D110010010000004002400200401212120240420200000000000000000000240000254202F0D77D141110015011000000000040120224000040121202240078
-:80070000000000000000005022400200400224F022C700100111000000002400242100210000242100000000000000000000502200000021242170BE0200001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000A3
-:800780001411000000000000000000000000000000000000000000000000502200F0B8DB00000011000000101212024002240000241002212400000000000000000024211012020010F2D45B00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000028
-:8008000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681600004011010000000000000000000000000000000000000000000000002502008FBB0D0000141100000000000004
-:80088000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00000000000000000024242424212121002400000000000000000000000000100240F2A498000040110100000000000000000000000000000000000000000000000025020023
-:800900008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F068160000401101000000000000000000000000000000002A
-:8009800000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001011010000101212024002000040121202000000000000000000002400000000F0AC6300004011010000001A
-:800A00000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F0681610011011010000000000401202240000401202400200000000000000002502240000245022F0FB420000001100000040024012021002004012020024000000000000BE
-:800A800000005022000000212421F0CFFD00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00111041010000000000000000242424000024000000000000000000000000502200F045B114000010010000000008
-:800B00000021251242120200242121104202000000000000000040020000100221CFB60E00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660111101101110000001002104202401202004012024002000000008D
-:800B800000000000245022000025022502EFAA090000110000000024002421002100002421000000000000000000005022000000212421F0187800004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004001000C
-:800C0000000040424202004002000040420224000000000000000000004042022100D06C0100001001000000000010120200002410120224000000000000000000210000401202212F9B0D1100400100000050222121240000000000240024000000000000000000400200242440029B9E00000000000000000050220000000025020000C4
-:800C8000000000000000004002210000215022F036521400001411000000000040120240020050220025020000000000000000502240024002002502FF92481111111111511111000000242424242100000040022124242400000000000000005022000000404202FF8A0511111111151111010000000000000000400240424202000000D8
-:800D0000000000000000000050224002AD6E1411000000000000251212420200000000502250222502000000000000000000240040022140F26AC1000000141100000000002425425222240000255222255222210000000000000000002512020000214072180E0000001100000024244012121212020040022502250200000000000000C3
-:800D80000000250200000010B29C0C0000140000000000000000404242020000000000000000000000000000502200F06816000000000000002100210000210000502200210000000000000000001002002124100217AE14001400000000000000250250220000502200000000000000000000502210020050225022F0414600000014114D
-:800E0000000000004002210024250224210000000000000000000000000000241012029FE70500001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001400000000242424000000000040022424000000000000B8
-:800E80000000000000002100F0DA6D00001001000000100210022440120200241002212502000000000000000000210000400221FFB80F00001411000000000000000000000000000000000000000000000000502200F0B8DB1001001411110000002424240000002400240000240000000000000000000000002100F0E8A110010014111C
-:800F000000000000004012022400004002002400000000000000005022400200400224E061030000111100000040024012021002004012020000000000000000000025020000104212028FCF0C00001411000000000000000000000000000000000000000000000000502200F0B8DB000040110100000000000000000000000000000000B4
-:800F800000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F66411101400114000000101212024042021002100224241002000000000000000000240040024002AFCC4E1101002D
-:801000004001000000210000242400000050222502000000000000000000244002211012124202FFEF4611010011000000000000242121240000401212020000000000000000002502250200400225022F1809000000000000400240120210020040120200000000000000000000250200001042124262ED00004011010000000000000076
-:8010800000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB001011410100000000000000002424240000000000000000000000000000002502009FAB080000100100000021002140022421004002211042020000000000000000002502004018
-:801100000210F2DBB800004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000401101000000210000001002000000000000000000000000000000002421004A0800001400000000000000004042420200000000F8
-:8011800000000000000000000000502200F06816000040010000000000400224000000244002000000000000000000002400002100F0C49310010014110000001002002440420200002400240000000000000000000024210021212100DFD5090000140000000000002502000000104202210000000000000000005022210000210025E26E
-:80120000AA0A000015011100000024002425022121502200002410420200000000000000000000000000F07D594021C519844D498443D284044841228901A880021E249028301892232808184C9896891A8408832404404898444884A04841124C418802408422A82100412F7A052A6492211384914489E522B12474B48122F884214348A1
-:80128000946C413E44A0D2D8984AD84264241227412D828341A8146E9846BC8806E0821428945481AE1C4B344BC21E2422288E284149E8C294243216AC43C88989FD8212BFD90A1C82C1181111206161481B92201819A428208204488028A584106221244D1244224B2110080081899414A0C160488624229288848604200258C08880F81A
-:8013000081698024124228014422284C1484A2388244461C0418B0C80381439142826140088C247484A8288024020010E482051220810190489014848842A05865F271A80010212404428C042002440022301441000020880182202119084884000048C184414A820490244428282820012A2101F07D4F004609107C44982840040000002B
-:801380008082220B182C0800808138882088044860840081482200224100004144C024228800124F630D004001000000000000000000000000000000000000000000000000200200F0386214421A8242042840180889888448043880A414838219048C2A8814048CC12410C29C2122120044818181C1983088832A810141818AC212207145
-:8014000044084F88F2299A2428115023446CA1425AC21120441181489944124486240400422110722218F2824A2A6881D024242124012CC1441005442644828408428823048348EC84081608BF830748182C1211C422421E2800862884388481498231444B84228241C0E8230821D08281748242389C2934325218301487448195142CC980
-:801480002480AA18124888A1A88D829098C18CF18822F60E2392214014624122488D1120144101141A0480C14818000048442782F02688281810040000210010048D828C04004142805184424810F451210010C4244B122800A11371420120091A140214604443088444478244211084C292524502181A1202981D241811C5024A28C181CC
-:801500008008889088802A022AE4C14E62446F220125214432241601C32AF288639C447884D148D285E44884A5182014A1288C02311E4535C432442624A8824B42C2115C81127642422124A914503812529CB184343412128945D884A129F083B6904223125412430200218581C2814889180415C8444A2101420044284410D4246342419F
-:8015800018498884A81211282C281431411082C411204138C449824128058C83083B1810C416C0244AC1224C3211819E2433C468A581C181CB612744821488433484148CCA28454A73544301E023886C224CA24134490127411D2618E0C8A11488813989E41108988019E88248A4122AD466068C6441384668462721189012848249122841
-:80160000C82C98820018144218888CD41417246422C1842613048C8404226041890C49C54C43084129128448A442580022004AE27A0884403841124D21596414812A01450A841A1618A814D2444224684180A9149094D02348A1212361819044181988848211280A825180CA4222812001821E2228E0DA072410810200127046923116019A
-:801680004120042122B03248489C216B28212502802101828245E228233181288444434A421182040018AC0820A824250418F02A1C002D148912E121C217484E128CF1443A1C0225481834888D82185AC814D2D048F724828A92442F4124644B18A9C9221A3A921E442B5A29816B124E184AB2843118D4214001444AD1C2386842924E229F
-:801700002A288222F6D2D780041CC1284384D214114102981F810243B848A1418084022D218C041187443302215086142144004044211864C8224CB46268484A082182882221120044121870DE052022618200800316041303808142012011860288418212E81228822C883182008E244D82424A02412C260180421848180C50A2604122FB
-:801780004E1826E8B14A41D21411784144C724504121890A444681E914D8341814988425AC4A49442112322442102201324118C2282921024368412400244125840448502844410084006F640700008110021A04CC082318219288967888321482001843049041004816A41C42424100862404D02204484901004D1822A42C049E448464C6
-:8018000049149844FF42070048A114140085158B412401A5023014302213010082231422681882001C68218462001742111B68153484002C44060021284260640000EB52244922942CC064D01482A321882B68508424002244604242122E158CA882123644B8214464420020242424C18421122002002622122444244101811014541CBF60
-:80188000750E16081E42454248044184160128182830248F4804821249E1441842A4148504222002545C61481244284812288228400C384841481810141418A4481222F0672F407129426112601210112222E111382114198101008082022880820840821882082890882E4228886D2288248642140242240000250222A01416F2DF21304C
-:80190000511815040085051144444C4804868891112A8115D13218718482811411140182200424008001A511521841822381084B18528A020000C02888F02F3560C225A442200242604260224423880285C222822182809122483842191A827B42A4212125113184CC38164800A0288262222A64442400C0848042822235264AF2556B34C7
-:801980001AF714354F61D2C7D225F2212345556599B2889326501A16F12211242E8D86CE9473723472657424F57644EEC45F46F866148213C35436B2E118661C96B824F44A34AE8247152942F1846664C81E122C33426AB85881512A6C6544CC546650884F12053F4208576215F221188974680D89621127C369E86E7921F3A194172895E1
-:801A0000F81C344F24B23821F488A43D151A816A882962811D611F84EA18FE42224CF312129E841AB942EE24382449D262F228C12F6C7A2BA1C2A39D222F44A8226C51844A4C4C18145A881ABE24B218F8746ABFAE0614A3561826034534412AD31475316D819ABB14049AFCA388BB19497896E221A1ECE81B11A82468122392124B8A4B57
-:801A8000884C84556245C4249AE841A14A57284B13886B282656442AC4426D484CF42228414B8225F294224267422F45E5C452486F8A0600003022302240011440210111002800002440021800288002000040022400000040224222022004421F1446F171773F57D25DF221658FA6F6282EDFD6F62527BFD2F228A27F1EFFA1A1BFD368DD
-:801B000038A7B127528B768F4AFAC2D227222F13FA24644F1AFA6C6E6BC2CFC2F64764BFB6F6C1F12F6EFEA4823F2E2C4BF3F634CE826F69F982A27F33F349CB7F7E7C49FBE6A2AFACFE26366BBD2F24F2DA9ECFC5F18A9AAFE6F692966D226D286B22EF8AF86C484F4EDC6EF4BB54243F35B733F63527FFD2F26C6ACFE2F2686C5F72F2CC
-:801B80003B1EEF63FA63D11F1AFB1FAD1728B7A1EFD2B274F724246F25F522262F77F3E6F44F59FBEC7E6F2AFAEEE87F42F62B6B1F1AFBE2E62F63FB72534F4FFD44D66FCFE36EFA62666F2AFAB3B3BFBCFEE7E7B7F46F6EFACEEE4F43F3D2F429F2DAD2CF41F1B2B84FC6E62FFF46662FA4F66E46AFA8FA3E1C4F4FFD485A1F114DF161F0
-:801C0000714F53F72D367F72F26B692F42F24C4F7F53F331315F7AFAF3F7AEA3BFB1F38382BF18F8A837BFBEE76AFBC2D27F62F337A17F43F7E5E5CFC6F724E6EFD2FE25679FA3F7A1A12F6EEE6FFED6E74F6DF472626FEDF5C6666F4BEE6BFA3637ADAF2F7AFA9A3B4DA2AF84FE66762F4DF96222AFADFB5818EFECFD4E4A6BFF6F24F4EE
-:801C800066484F86B6A6F82E2C4FCCFD4872DFE547F377777F73F33F3FFFD2F26D686742CFF6F627351FB2F337AF3F37FFA1B3FFA1F983832F38F8B637FFBFFF3C3E6F25FD27365F17FBE7F45F5FFFEC6E6F4AFA6CED5F72F6397A1F12FAE2E62F6FFF42624F6DFC72E26F6DF1C2662F4BF7B4B63F7BFBCBEF1F7EFE3B3F6F6AFA4AE86FC6
-:801D000067F7F2F22F22F2DADA8F81F1FEDEEFE6F6D2D26F64F4624AEFE6B482FA2E2C4FCEFF6C6E3D1A501240011484204122019234406288608820099200008021140400189086B022098848184826A241006081648C4484542848008744F08793A0182869D1810228141D24F08128221022C181C031D022011C82E454228298441C821F
-:801D800084E22229C4924288422A042430249082282908627042022440022410888443B115082CF4112485F21124C7261F41726AD241B24AD141F64A911D28AF14B915F44A915B42AF543924AF547924F842B14F82C4914FAAE414F8264A16F1264A96F1225A96E5A2E449E2A2FC91242CF4912485F2912487241F49724EF29124AB141DDA
-:801E000024AB9419B64A9945AF243924AF247BB4F842B447832F44FB24484AF9244ACF570CA41F41D628F41124A7261F417628D2C196184CD61AC96C2DB14F81F64A915B42AF149944AF14FB24482DB16782AD912AD558F1268887117F8224F8225A96D5B4E451D2A4F481284D5A1F49562C9E248F34E1C97264739138441F88D24AF191E5
-:801E800024A93A85AF2431B44E96B6E844688B2F447186B842FBA45A5F8C070000000000400400000000100200880000000000488004000040042800000000007F9B0110041184110029018224981188A92411C481228222288A4448844784021A048B812C240100608182000028220044801554242200001F670F48130A49117124021597
-:801F000014184481184884C412819012472440844128BA48528220382831435442C0A5422B8190121084852A482104891428C1128281D281184071C8F4CE9880B44402471111450330184119887832544142A51218D4126922824CA2122B81A67884F822584C284AD8127541524848AF112A34C2B012244184A12882144A826246C01490C3
-:801F8000123044212C0160C14DB8001100812850412100908880A84118004904008C042A040022102409442001102828040000818420A1844588698200A048EF340322501270220261480000001C8804418511D44818240460824008414604522005104244228108410013480100608844002A1418F4FF5B30414014924526A1C2221F863D
-:8020000081EE18248C651448802184E42C820489614221453244F01628813282678241224212411045391842865A84865122819F21044FA1E4844112788844081283F4E3FC90611044625619B2C48232284AA284C242114681241164844BC2230C4800222914C82C41488014A4414200446493212824081C68181410F24814236188251489
-:80208000046284489FC90B4042031012829451881480818408804401C4448CD124024518448241E84261284D3820021225041460815048E124109A590046088183180812C48FED4C8152282281002170142304515043A881C21004842484803818422C4208484410024CC4280042604260890043048032488E484B822120D8282128688D0F
-:80210000C0448941944156541842118B4241C2492221B81262430010884C8204415028200861148A61464828CC840224866188182842C841484C189484002224402202EFF40F00602210143448000088488014344482424048042A0444000083018124821200282248489084404A088100508488424884446F860B4B4220D2186244144CE2
-:8021800044F8294444C22882C694926A814C8488B4880444804228048648427418843848482D244B1200601A8E4818844B848A64848914445C848E482C382430C28C44C884CF960A20110629411C92412C8104112C1101454884444408848384E14408857422022004126302C8200266024382A49200902282288A044312280812A8245FEC
-:802200002B0A2410A82442100114001008100418184242448481490242810046088800104C2444088684041042084084044004248810F8311850420044244684042CE41881094C14A5822C42221404889044210000822200004C2424280844211098444240C482435482401408210021F09AA2205141904114130600189021430842821056
-:8022800004281384A485491208424800C694C840E8182408308244497842C2426414430821214A984621411014125424243E55200411004014011084082824804C2274460288208418022222002144002502602448308882814481444800B0881252420088299884BFA7492128044440459341400460144738804412242458416081400425
-:802300004028148412440844244A180480180486281414420400444C04440089D814F2A7C6C044444C062860842644252402814A120443A42449082290824C8408008200400181488004810082004084AC488008818288414121842F120F1480042002008661154823088E4124221002404404224008A08481200400418A8428081028040E
-:802380002142000088000000F0D3D160118082020042008828A0481443922400444129098302122022223284863984C1148200008100508187241044024358280060685028881FDA0C8431481120012024742491812228240088242C024821A0148394882914788A84C244853142880048448A14344A25D4224824C8442149E28C02236417
-:80240000282890225042F0413FF05312C28428242E61114E6446E111B1F189E8882C88E822A828A2244D626416A4914D484BA2848487822AC8AC41150C25D8280447C486A48C4F249484C748822744216D8CF0448225D2482228548280483682142C781C4641147521B441841211081D468844133648197CC632462F24544449044F1634DA
-:802480004486E4466284A0444A8232A2EEE2C28398488E84242B88D0224448DC82E424D42474411A7842684842C82B442D884642046902C378A6F84C15D0145452284752197454E4545413F0C1444D218E21774247541D614C7224F452422F45F8628433A8C8CF84146A68588129B4889444859CCC4DCC415714CA0C4948F4888486E2242A
-:80250000D8CAF888884D45C6C24229D4447CC2D86478AC768CD4265A64884D84EC58485F6C010000822302611022114208000012280000248124400224400200000000000000002002220000286FD74AD26655D71D2155F541413F36F65B1B3F227247F453937F3CFCC3C11F7C784754646F6CFCC6866F6FFBD2563F7AFEC7C54BCD8AF83E
-:8025800086CA6F6CDC22F442424AB642FCC6CEEF4CFCCCCC6F4CFCC6CD55D733F4868C4F48F884848FE4F4CA42EFC4F44E4CC7E4FFF8F88F8BA9F4E2846F48F8C4E6AFA4FC4AC8CFE8CAA267626F28FA84844F8858662EF3346D477FD4D411722171417143F35F1D1B665F54F417973F35FDA3A15F7C5E574F74F4E6E66F2EFCB6B66F6DEC
-:80260000F5C7C77F7CFCD2C4CE844F4FFFECCC8ED22FA4E484BEA2F8E6EEEFEEFCCBCD6FCCFC868EF7541F34F4C6CC8E866F68F8CACAEF64F44A4CCFC4F4C8CEFFF8FCCBCFAF24B4E2DE66F4C6E6EFE2F6EEECEFECDE22FAA6866BA82F48E898F89C9E5FDC49F2144669D411D24472417345F55B195F527245F7C1913F5EEE2CFECBAB33BC
-:8026800054646F68F8E6A66F6EFBC6566F6CFCC7C56BCC8F88F88CD44F46D6A8EC84B462E62CFCC4CCCFE6F6CE4D4F64F4C8CC57F829D4445C646F68F84ACEE7C86FC4F44C4CE7E475FF8A8EAFA8BCC25A46CFACFC6EEC8F86FE88824F2238226F48BA86F884884F62F3E9D7344F71D55FD411F225251F347844F55F1F7F56F645474F5840
-:80270000F9E3F11DA3FFBC7C87F5C4C74F66F666466F6AFBC4566F447447F5C6C4474C4F4EFF6C4EAFA1EC84F4E228AE82EEEEEFCEF48C4DCFE4F4888E77DCCAF48CC4646F68F8CACAE7C82F4474CCFCCCCE7D4F8FACFCCACA2BEC6D46EFAEFC4E4AEF8CFCCECE6F22F8A6846F489A844F98F8ACBEEF320D00430222480041004800A0487E
-:802780002482A0482882004A02004A1284821898840000108484C84820088A0482C048448A44042048044F850241004440E41401149E44262138484308412BA492002149044D488800489084444844492C4C022C0888402278440200230442828100C08400437833023CF41124A5F2112C87261F41724AD241F64A121F41F64A9219B24AF3
-:80280000D985F44A9143F24A914B432F147924D812FB24484E914FA2C4816FA264116FA264192FA27498D5A2E449D2A2F4D1246D421F4952281F4932481F49324A1F48B24AD141B64A9921AF249945AB9443FA4A9243B242792498924F8294984FAAF4E148C0181F4146F3112C873617412652818D121F41F248921D248DB34D28AB9443B6
-:80288000D21A29F342B517822DB46F83D412F824188D916BC28F11F8264887192F8264592D419E252D489E2C25B391562C1F4962241F49324E1F48921ACCF242911D24A99B258F6419B44A13E4245B8429FB244829F924586D3220288804000000400400000000100A008800004001400848000000004480020000005012F0F4DA141241CC
-:80290000241842006014430400002912342488858441082482410000884304202104841A0810021021044A08854204632414841884C885BF8A054886415425121C81311444250326011448114821442490A4906489A424C0284B8110054C084C084908C0441A084CC81825D2286882913082244022482204148127B71458C641F2114448C7
-:8029800012901424460526614214482D214D424C825828C02CB01696828E64C0281A085C384188301848C644A85846A481214C48084E88229F4A04A542062724C84522486418AB81CF4E0A40140429118101471410020000004441188200830400440041446048000000002C115122840088004100420041DF560522004480022014212467
-:802A00004893410028131112C48448814100C04280644188808C020082260226024A010042800842434802008902AFB20E174410D512C233588E1741412534812F8224C88282002368482C0C83081481428144405482A1167832D42221524144872113085C0141650829088C0C2145382A4C742412142C51483F5C024C04113932212374F6
-:802A8000940142711B84AB82141908602280C8824400410040144234148C18A84826024004271810142251C200208C185224A6C84244414481F0BF51C0211044848103254404808498422308F0118241498498C8841484488448C04281211867231822450183C922303160440023284408304841442C02811A52846FB20F9016142B244059
-:802B0000C44480120441003A28225836224415C88220284A91144052288C01454218A44827814840185148901285024008504810048544C142837248D49601400143040042112098244848221200001A48E64201214508892828021C018002844F88248214080000414265823262902240C2844502F03AC4200130111A041048842101210F
-:802B80004D810080A141840048000000002002182902400100232236264884200424000014604422EFAB092CC111C03148414C34484C8221C822485CA48132D022A14245A88190742450941820D8280240167814A22C18811C628491842829D3248214C84A4D422422D0420285848834248D248D19004434441800404184012008801885CC
-:802C000001853184A018B84044082183818102282490840050246024840080024D4821005042418384F48328104224420414001143712211022413848404250481180081400284824088281224112432141A0240481204850284264424584A10420400DF4C045D22224140146264160500962698154B8212418A11111164884F88F414828B
-:802C8000492C91488084820425210828888830C4844A0284102804242044088180185284843D370011211190264110132112015041641C888808C180018D547048111858288A2402B0130800319091D0C288528127622A04450890221002230281413FBE052852192503100330228222412800100444314119463821AC810288442C0244B6
-:802D00004450411248C28146544A40040081004241004508207262D2D5072120024440420143D8210814820014418820883114180010C28210280800288149C2141280728482180284004484408C02811044BA54011C0440424101522812E0310816542232411662448604895828881C4918C21821989014148A03202188A828218100197A
-:802D80000228810021002488C28100CFEA0400C0241A8282C4228002282220084001204111022C0141A042308480488161218004C3C488880000004100811014148424041FC501822718400100004004452348022904002144C04400110061A028442C21180264141125C1820040084120442A4282022648C422F0D5734088C24242284111
-:802E00002501C08100880044882800289082842991444CA841C07A288D51144044684848489014230488244264222825188408000023E444B2610469642843E14262214C024351127F48E822A2A2156161286D428EC18E8673D444588B8B91456E6127A8122B42812EC88E844426BC82B8214AA423448263E827B91E612881231855422EBC
-:802E8000225028A51434A810584684E0223228AFF6031D214B78284D525157324D462F2492212843789163624978876742574416C18415826BC81B1289F42C858495457A88F22E282E4A1B38418E121C5922814CF85195CF1842B72AD2C24848D1883248A5440885C82A85F626222C78A4D482D48CF44262AFEE4963223712172215E14270
-:802F0000127243D111013E131D8129B186E81881AC11214B1282504445B1D8FC84981B44CD5247A42B51421E522BAC8BC1441634961D144B994F2282C44C1F8CE8C43C846CDA2A22D482648245B444F242466958841098E8414654C4EEDF200112200848188001188001188021C211221422871423624422523058415A0228182880022805
-:802F8000182880028C040048A0422002A200F0D9FFF046467F71F3171775F713377F61F172763D176F43F394844B892EB22B995F59F8D7874F66F357533F39F8F2E23BAA1F4BB9B8FABDB97F5EFA84844F22F32B3118AF877314DCA8F92EBC4F42F3A4B64F4BF9B4B44F6EFA26A23BF38FCBFBFF77EFCFF7A8AAEFCAFA2D2D2E222187C276
-:80300000C5DE62D666F2EEEE6F64F6222A7D2EEFAEDECCF22864EFC2F61415247F64D6F756575F7353776F63F337375D154F71F197876F18F1A3B33F5BF995847F6EFB66367F75F592823F7EFFA7A4DF63F11791DF99F9B7BF6F6EFA8682B7B52EB22F217118A4855F52FB14244F62FBBDAD5F5BEAA8FE26A67F41FFF8EEFFFDFFFEF4EFD9
-:80308000E8FA8A88BFB2F2262AAFA2F62A2CC5DEEEF2262EEF6EFE66666FE2F2262EEF46F666648F82F23C3E4646F373572F42F625272D267F71F315166F637315F525373F38F982A51F29F883B35F78F9C7C37F77F6C7D73F1EAFCCBE918BA8BF51F99CDC4F4CFDADE14F64DC82A445AF8FF6C454CFC2FC7CED4D344F6ADBD7F1B7B54FB7
-:8031000068FE32322F21FBFAFAFF7CF6FFFDCFECFE86847F72F263672F26D22A52EE6F64F4C684CFCA5AEE6FC252D6EFC6D6CEF2286CCFE4F5A62F342F65D77BF237351F71F327A77F73F3373757514F73F283932F78FAB3A37F39D875F9E7C77F77F6D7C72BFE1F14FCB4954D246F41F9FDFFCFEEFFC7454F64FC66662F2FF682528FC401
-:80318000F7CCCC4F572EE12AFB27157F5BFB8C866F63FBD696EFEFFFCFC7FFDFFFCE4EEFC858FFBFF6F66A6AED2AE5FE6E4E2FACFEAEA4ED266FE2D2E6F26E644F46F62828CD1E6FA60B430223022200402348012048328120482418088524481411088180928410044D8180016D83C011484502144002404804440020044F6504450161DA
-:803200001022E11441141401198208274460441002008849042D4842209842D0842448428421582450288A3442865C2A304A28A141424188843084810045F89BEEC0521F41D228F111248B141F41324A1D64AB141D24AB9419B24A19B54A3924AF1439252F147B25D812FB25488DB15FA2C4A16FA2E411F2244A8F19E2A26459ACE449D273
-:80328000A2F491242CF5912485F2912483F49124AB141F48B24AD141B24AD981B24A19B54A3924AB9443B24A79A498924F82C4944FA2D45104ACF511648D521F41B248F1112483D441344815F44A841B288B2441AB8443F24AA15129D88584F8174889D9A581D886C881457A8831248641EB58D2A2F4912CACF59164A5F291248B141F49DB
-:80330000B24AF18124AB1615D442D981B24A9B25A93924AB9443B24839A4182782984FAAF59B6D4028080000000044800200000000008008000014000048000000004480020000005012F07BC80000160110120414820041004410011849024182104282014022114844820850821C020045012A0800100200400C287FA701201911041531
-:803380000420C1821826013081004CEA234802A081840000828429018A022302288180042984884482044890424C024D228002281444EE4900D2400515024120A881266142441C08414CB211486221A08116282808B0820118301285312AA08481248CC42129248854244984AA42809624D0240240C22C141AF2826F004021014400181193
-:8034000021000000822C02302410042400400AA02840448202000000110000211002200200413F450F204101A5012200120024000012200141448480040018800180022821004800A10080080000008110089F4605105242001817411861A49011821815C2140000880044250421100223012622911400002823422202210000104402006B
-:803480001001815FAE0A24504224111813811182011981880118800118884144108404242001122212124002002344028121000010040040484108DF4F072041018160421044180224401106000000C502240040820110922480028082022C020020080024000000844FCD0710080000001850240028184034142200430412002C021200CB
-:8035000018411860210000002100100428100440042400ADF1004141452301801441044130841E2A1004401844021602200100120000004C0410028002004182280081440085426C614ECE0024112110440400102101400100000044224002400440083012200100001008248004100282100212F0B31800455214652301001144402211B9
-:8035800044181244844108904445820212212120018C012418100210029022001082041012284804814341F2C7ED00000044414820011120883111004422440000002290140010240112490100004008008200444004211018F434BE00004100410000100144004400004004000000800228800228804382020000002302228122302430F1
-:803600002A2E43008144502119911150210021447721502441C0124141400400000020030000120010022332222722002800210021401842B2870F100111001004001110020021210090140000000000000000000000000021005082A18100F088FE0018804101D111814518C824C3628187230022002100002110042011020021231122EE
-:80368000448204211012E4221404808412025022D022027F7C0C000000000028000020212102000000000080010028000000000000400240024002004FF201110000001004001C0163110490128001212200182244200118000048122800000024000000000021F01B51001100124C21311220011604103118214342225142438101440018
-:80370000188001003880016880011822282226C22440821204000010083BF620388284140000120000110010020000210000180000000000000000000040020000C01124FDF6D081818194144B1840381444438171310C4C52211220416441241221441880D842012901409112128CB14291428081012C04484004680024805258891218F6
-:8037800012F8AC51141D1282003C295194188418ACD281C32B8554948D123022322D142921415446001212411220022361211A4212021218122D228022A22221482147242410581424C011A5F884EB001318EC111141F1181467113C31186011417721274347412566211843119414004100490129E121812181032C315218523812002BED
-:80380000222CC42646124402212140129A282126015FBA03141E19504543C114114445544418221D141CD1211182D14453622464B0142142027022240120210222A0122822706242A2422423022100268222D222D282C22A848D2CA42CE25B0C00001002A1100AA302814004281200440024400224C012282428800228802284220442205C
-:803880000442002220022220023FDF081D123F11F118181F41E1497113F31F1F3D13F57D1AFA1E1A9F23F2181FFFA1F11613E7E12B116F42D34221A1114B111AF126262552222F21F124346F41D122B112A1132B1329E123F322322F23B212A1736AA7665AA5262F22F622626F24F622222F42C442214F4616D222D2AAF2272EA7A22AA287
-:8039000033A7822FDB4ED131F153598F81F111549E143F21F11F1C5551552F21F11A1E9F31F111377F21F11F1A6F61B112D14651424F41F114162B111AF13434E028F912124F43FB16142F21F112123F13B132F13233AF83E321F1524A2B333AE321F112122F25B562B222B622F666662F26F622642CF442626F42B2229222AD2AEFE27271
-:803980002A18A2118F83F1AAC7D021D113F41D1D5CE171F111117F51D189516516F41A1427812F21F316126F21711EFA161265147212B216B116B114A132C0821AF126344F6181E121F112211E122AE3A1D122F112522B331A81A1117AC3422F22F262222F62F26262296224214F64F4222225722A782EDC8A12A2112E121F250B1D12BDE6
-:803A000041DFD1F151151F71F111117F7151CF55F61C1CAB113F91F11713CFA1711EFE16124B116554226F61F1161463B114F1243445F612821AF1B6341E121E122B111E311E121F21F132383AF31A522B113AE327F752522B372C7422F262222F66E622922246B262F42426255222A7A2E7F2AD28818F83F3281ABF5601149014C01100C1
-:803A80004001204122410700204104000080410400800118100200182002240040020081100800AF7A060014800118122001190200403624181002184100008021010000800100000000000000210000845F23072CF5112485F2112487241F41724AD2C1F24A121D2CAF26D981B24A5985AB944782AF5439342F147B24D812F924481CF95A
-:803B0000244A1CF8264A16F1264A96F1224A96F5225A9E242FA2F491242F22F4912487221F497268F29124A7261F48B24AD141B24A9921AF2419B54A3924ABB443B2427B2498B24F82C4B44FA2F4B7E9C05A1B612CF4112C87241B2187341FC1F248121FC1F268961F81B248DB85B24A6983AF1429F142A147832D912F82D412F924581CAA
-:803B8000FB26C81E816D589E212F8265582F9265592F827591FC225A1F4974287291B4287191B4287181D428D141F22A941992BA599298F04AB4412F244BD842FB144829DAA4F54C584028880400000000000000000021008008000014008480040000000080020000005012F047BA000000001100001004004400000000004082014022AA
-:803C000002002100210000000000000000487F410E20884881480100140000810000000000000000000000000000210000000000104241014F9909608C82111001141011042244000000003012200800101201100A42240010020041008002000021401172910E000088000000001008100400000000002001002800000000210000000043
-:803C80000000118074D4050000004008000000000000000000002440020000200800000000000000002200CF8407400418C01240321141121002000016040000410000C0120000800228400228400800240010042400003FB3034004122011129812441824000000180000400400402211120200282002108202000010021004102202D0F6
-:803D0000C60C00000000110000000010040000000000000000008800001008000000000000F0DB9F00280021000000120020018004800400440010040000000000400100100820C11800220000EE980010090000000023081002180000000020010000000000121800000000400200400418D09F0A00004002000000000010440200000004
-:803D80000000880020010000001200000000000000F0F1730022910000000024000000412420040044200100000012000018100100400800290120028001DD6600001002210000128840220112420000000000418008000000180080010000201108004400D0F20C0000E011018400001400000000000000000000000000008800200300F6
-:803E00004008000080016F680E000000000020010000000000000000000000000000000000000000000000DF880C0000000000000000000000000000000000000000000000000000000000F04FFE000000000000120000000000000000000000000000000000000000000000F08DC80000000000000000000000000000000000000000006C
-:803E8000000000000000000000FFE40F00140040080000000000002100000000000000200100000000000000000000D0D70900000000400400000000000000400280018200000000000000000000A0210000F0BCFE000000000000000000000000000000000000000000000000000000000000FFE40F004008000000000040040000000010
-:803F00000000000021000040080000000000000000F09514000000000000000000000000410000000000000000000000000000000000F0BD32000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE004001000040040000006B
-:803F80000000004100240000001002180040080000000000A0120000F0AB8E0000840084000000004004002100000000188008000000000000000000000000005F310E0000000000000000000000000000000000000000000000000000000000F04FFE00400100004005008004440010024004002180018828100218800884000080420831
-:804000000000280000F0B236004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A21140C435000000000080041400000000000000000000002800008008000000288400000000BF6F0B0014000000540000484084041002400400218001882810021880088400840028D5
-:80408000840000800200008FEF030000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00210000008004002810020080020000800280040000800444800221484004002148400400214FCF06000000000000000000000000BA
-:804100000000000000000000000000000000000000F04FFE000000000000400100000000000000000028000000008800000080420800000070820E0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000008002000000000000000000000000F07F4D00000000000040018B
-:494180000000000000000000000000000080080000002884000000002FDBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB
+:80000000C8132592821E111F11B189699887848B488F8424E48404488558884F84F4CE61F0262265E222A1111212002592822D1B1F3191919E888F81F88841832C44511148155D888CF64844C5B444B2242202002554444CF326226DA22E123AA1812B898282259282BCF1131119ED89781898488B44420048C485C868FF2F0D0000000034
+:80008000000000000000000000000000008024040000004842000000000000F0F131000000000022222082A2222A2202002222000000000000802404004242420000000000000000EF840D00002800282002A0220000A02200200200002084240400484248422004420000000000000000DFE90800002002A02200280000A0220000220074
+:8001000000802404000048A0440000004242000000000000F04DFA00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300C6
+:8001800000282A82020020020000282822280000000000000000004200008004000000000000EF6E0200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000E9
+:80020000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000A2
+:800280000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F037A
+:8003000000000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008062
+:8003800024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F131000000000000002022220200001D
+:8004000000000000000080240400000048000000000000004FE20200002800282002A0220000A02200000000004248420080248424044220242404000000000000F0E3A400000022002A02800200002A0200000000802404000048A0440000004242000000000000B066010000000000000000000000000000000000802404000000484285
+:80048000000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200002828280020A222222222002228282820020000004842800400428024040000420000000000006F690B0000000080A2222AA22200002228282800000000484A2404008004484800004AA444000000000000FA
+:80050000F0FCE400000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000222222000000000000000000484291
+:800580000000008004000000000000F0242E00000000000000000000000000000000000048420000008024040000000000001F1F03000028282800222222A0222A82022200002200000000420000424280840448424220040000000000F04DB80000800280022002220000282AA2222228000000004A0400004800484200802424040000E9
+:80060000000000F016D700000000002822282220028082820200000000484200000000484200A04400000000000000CD4E00000000000000000000000000000000000048420000008024040000000000001F1F030000000000000022222200000000000000000048420000008004000000000000F0242E00008002800222002A0200002AA9
+:8006800002002200000042484200802484240442002004000000000000F0F74E00000022002A02800200002A0200200200004842000080044A0400002004420000000000006F4A0400000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040C
+:800700000000000000001F1F0300002828002022220222008082A222A022000000004AA444480000004A04000048000000000000F02E9C00008002002022228202008082A2222002000000A0444200808404A04400008004000000000000ABB100000000000000000000000000000000000048420000008024040000000000001F1F030057
+:80078000002002200200A022282800202202000000002004004842420042002004000000000000F0D93100000000002A02200200002A820220020000484220040020044248422004A044000000000000F0C9A200000022002A02800200002A0200000000802404000048A0440000422004000000000000B0C2050000000000000000000043
+:80080000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100008082820200222002002082022820020000004A04484800004800000042000000005D
+:800880000000F0A72800000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000222222000000000000000000A9
+:8009000048420000008004000000000000F0242E00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000000000022222297
+:800980002A8282020022000000000000008004004200000000000000000070970700000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000000000000000000000000000000000080240400000048420000000000E8
+:800A000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000000000802480
+:800A8000040000004842000000000000F0F13100008082820200220000002A82020000000000420000000000000042420000000000001FFC0100000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE20200000000A0B1
+:800B00002200220000A02200200200004842200400208424044200424200000000000000CDF100000022002A02800200002A0200200200004842000080044A0400000042000000000000F03DFA00000000000000000000000000000000000048420000008024040000000000001F1F03000000000000000000000000000000000080240451
+:800B80000000004842000000000000F0F13100000000000000202222020020020000000000004842000042208404000000000000F095A1000000008082A222A02200002A820228200200000042000080044848000020040000000000003F7C0200000000000000000000000000000000008024040000004842000000000000F0F13100003C
+:800C0000000000000020222202000000000000000080240400000048000000000000004FE20200002800282002A0220000A02200200200002084240400484248422004424220040000000000006DCE00000022002A02800200002A0200000000802404000048A04400000042000000000000008B9D000000000000000000000000000000B2
+:800C800000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000002222220000220000002222200200000000202484040000008004000000000000F0718F000000000028280000002228280022000000480000004A044800000042000000000000F01B
+:800D00007E26000080A22228200200000000200220020000002004004242200442008004000000000000F04B3400000000002822000000802202000000004248000048802404000000000000000000F063B500000000002A02002200802202282200000048422004200480248404008024040000000000001F190A0000202222A222000040
+:800D80000000222820222202000048420000002024842424242424A444420000000000005F6A0E000000000000000020022022220200000000008024044220242424A4444242000000000000D7AF000080A222282002000000002822282A22020000002004004248004A24040000000000000000F0BFD200000000002A22A2222222008089
+:800E0000A2222AA2222A02000000484A04000048004200008024040000000000B0120B00002022022A82828202000022282228220000008024040000004800000020040000000000F0C77F0000000000000020222202000000000000000080240400000048000000000000004FE20200002800280000280000802202280000000048008074
+:800E800004424800000000000000000000F021180000000080220228220000282200000000802484040080248424840480040000000000000070DB0D00000000222800A02222A0220000000000000000004248480000008024040000000000F0D52600000000000000000000000000000000000048420000008024040000000000001F1F62
+:800F00000300000000000000000000000000000000008024040000004842000000000000F0F131000000222222000000000020022222000000000000480000000048000000000000004FAF0E00002800280022A022000022288082220200000048000000424800002004000000000000F02A2C0000000000000000000000000000000000E2
+:800F80000048420000008024040000000000001F1F030000202222020000200220020020020000000000800400200400484242000000000000BF860800000000A0220022000020020022000080240442000042200442008024040000000000005F9D0300002002A02200280000A02200000000004842000080044A0400002024040000001E
+:801000000000006B1600000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000000000000002222220000000000000000005F
+:8010800048420000008004000000000000F0242E000080828202002222800280022022820200000000420020042084240480044800000000000070F5080000280000202202000080A222220000000042208404484848208424040080040000000000005EA800000000002A8202220000A02228000000004842484200004248424842002073
+:8011000004000000000000F0E5EB00000022002A02800200002A0200000000802404000048A0442004000000000000000000AFBA0B00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000202222020000000026
+:80118000002222200200000000202484040020040048000000000000008F970B0000000080228222020020820228200200008004420000428004000020040000000000009F290500000000000000000000000000000000008024040000004842000000000000F0F131000000000000000000000000000000000000484200000080240400F7
+:8012000000000000001F1F03000028000000800200000000000000000000004A040000004842000000000000D061010000000000000022222200000000000000000048420000008004000000000000F0242E000000000022200200002002220000000000420080040000008004000000000000F09D1E00008002002002222200002002201C
+:8012800002000000004A04808484040042008024040000000000002F48010000000028220000008002222800000000484A04008004802404008004000000000000F0E3D900000022002A228282022822000022282002000000000000000000004A0442000000000000AB2D10C22984944502003094610082644C424228B1919228007082CB
+:801300003482258411199118439288106812142088445824F02242008041444488C226242C021618086F4A0D1424114059844781C144141C21788448A48215624249D3A7427291B2889198278D421CD121613847291E881CD88109CF38322121A499C149DD8243E483E4C2C48476C5341A9224A0242D246592183624D1280716C2125F4932
+:8013800009218100240040B4142881388888821144182E1526124888C842488800001832101843116111195824A01227244328A1210040020024288336121270BE0A70211208008301105143004464008C42B88131A121842D9844C0141C512416181944D814C222288425088840146826174420A1214442C95242814C22018484182F1EF5
+:801400000D0014504841400C000000C022412480812101400225420882882008000014491438248042040041404202004002BFF6424101501811814400004004224D220021008800882711148219C9815081881008008964848142000022442002224B2112901200B0440200000000000000000000000000000000000000004008000000E4
+:8014800000000000006FF2030081430181A1458101811118C011812170124102362164A228C0114542021248616041124008400422A0249042584421E0810232836C824400DF330D0026124832311008153882004183D84132B860822628422818044410A88146D848082A0D1C02458171164141815114406114149018C022442821248081
+:8015000002447F590C0026584A248F11125A1C12118214184111C7322A091F82012372112894281084418C889484486BA1D014214145480514185C026641621448491122923426A212866882260441D788000012000040180A00890981106282208258242840412251828301428002C01212144400004601188400A100482100F0765700DB
+:801580002820414104442602811944410800C0215382186154488141142C0440844404100249A12847224424288304801408E08144022922211404F09C9D144C428103322D23264B41488B43481241C11C13F32844818189862212140162C04C2819048C46A8814CD321C188608146433844182785A129113212564862451EC47028429CC8
+:80160000381A046C0E4332212A011111283150812A31481184402862C210212A32214904A0243044284904830410423112223265113222122130428421421A042B41218361C42004EF6842010012382742A51194282125180131144931114826D9846284114904851144C142844081C424818AE14281D14828182C14C84489945825682166
+:8016800080618184699584282C02CB1212F0449ED022C418194262212283410211505A702842046941C488708208263422A382B848819422407818C128414C94254817E289C228C112D41A92142004421A82184C28C8148C31422249F427D240C4284826C84100222244214302228C8182120140C1428114121C48028044655446846182CC
+:8017000080840148002142484081C1186883414284922230821824FFB802000022814041142A0188542412848022020081442120431448022014010000148011422281C2881C483842008C11280684F0EBEE1094222883F24232228426125484902B50254721126941A1822817884210382C80B542312610754A3428424916054783A9C2F2
+:801780002811244981A71412428CB11964842D988125E8A992348B41422648F6D8BF90421214404188116122112901888481228912140821D048722102318122C04881184694141122400142C4181518421492218882184844414088228881F46DD280C11110088440A9421400224062124D12112820120121281C68210090522210A412E0
+:801800002120026322240232402822012782C0288063412728181648E8AE01008F11C4248502002C6188008522F848142481105A291816081904242886014E1460441E2410469C222D442504C01C4444381200860141424B1282109444282AF427E1208202890126480828800318412484118449018082110A8130281A1248444C88048037
+:80188000112485A42120411884246184A0412A044A01202102F0D7AB4002150241803238812891282001414143023641A241466452422E412E8414A09222194241081C48C4482884441C81021814A028A028200848220021F0B81220514A40521840418131284228001C91141024021821800122128A048302124AA24160410028445024B7
+:80190000284E22408A0240429814842242141242144FD40760214814001044081889C124158802212302004821842A0142162854244C0441344E2284415024200450866C0400004C01441AC81C44444148EF6B0E0018487022042140459882814441141CC911291114C229184C14848448248154216011418124812118121220248102884E
+:8019800011193111882222460438268822F2A2C80026121882A441228004288C84C128281A040000000085021A022041081D1812009042000020884D420889C412832444048A024A11F22E294088847424121441880342C01480432842281184C1443042224E1444C8200485A2C1871488411E48521C18E814412C64C1144260C448281199
+:801A0000461844082A044261F06B8F802112714354A62FC244E892B158A1289384A6114D1C4FA3A17117A15313D834E14133212447134D644D291AC4792246B812F438412E188F257116B41234242E8A10D244E44661412717DA3141221B2D188922F54A545AB184E28281BA42E452025BFE60218F6552A8A442122821A426EC82F328987A
+:801A80004B221398281732ED142D214B331932428F85A4558B2462912B36AB835A556C872643F4182419C82247482554445E765E1D3A7115E884D2CC93642DC88CDE88641817894D6C45F8244C2E944B454CF134341823F6D28580D212F11211CB3295942993F219242AD619243112853A181D44E5C4818D16253418242D31413D4CE02672
+:801B00001C3485A07B4D152DBC4B444D4D8B521D128F25511267824B4246086B127022B41891122115E216959AAA92285AC426434BB85C94682FE101404108104418022D81122928918280280184148648051440854101860182228230811811811181111001110088800888000012816E8AA0334FC3E221F12727EFC4F47F3FA5FA3F3F05
+:801B8000A781EFE9F3CA622F26B3A2F88715EFCDE215F19B999D3B85F1A9963B9ACFC6F2154595BC21F42C3F7F54F46D6C1BEB8FC3F235B5CBF3BAFBBC346F69F9D6D6677CCFB3FB39215FC5F2456D9F14F6212BBFC3F525A73F99EC2BFB7B5917189F98F63C5E2F4BF9A4A44B23CFC6B114F16C6C8FC6F42868BF11082AF3747C8F21F1CF
+:801C000027277F34F47131B559DD8F83F1BE36AFCCA68D9EB47F58F1DB1DFF95F18B996F22B32BF1B9862F1BF97D3D5F71F43B782E418DCB7F57F42D6CFEE1CFEEFA27B7AF17ED8BFBBC7EFFF5F457576778AFB3FB79635FC4F2546CCF25F7636BFFE7F726B66FE9FD2323AFCCBE91F1D953EFEEFFF6BC4F4AFB3454CFC4F51414EFC6D602
+:801C8000CCF128385BCFA0336F51F514173F12F246447F77332A57539FB1F35CBCBFD5A5AE8F21F31197CFE5F5DDDFFFD3F337176FF3F11217AF81F56765CFD4F46C3D4F44F465A6CFD4F44C4D8F83F7BDFF6FE5F5B8798F8BF33CEC5FF3F355576F69F53BB23F83F17635CB338B551FA1F13E7DCFE2FBFAFC8F2FFB5B799D891F91F5BC2F
+:801D0000BEEF47F334344F4FFBECAC4F42F26E6C4FC2E286B3BE063E32EF43F71C1E3F32F2434F5F57F32B2B7F53F3193BCFC5FB5A5A2B37CFA8F91597DFF4F5DFDFFFD3F336167FE3F11217AF81A5669F84F46C7D4F44F465669F87F42C7D8F8FFF7D7F6FE7F7F8788F8BF33CFA7E7ADED66F69F13BB23FA7F17635CF47F759533FA4F504
+:801D80006E7FEFE2FBFBFFBF37F3DED89F91F95153EFE6F3FEBC4F43F3F4F4CFCEFF3434CFC6F6343C2E283FB20A004901218C2462818024E2810412441E4840C8221242100889028B241810042A012A011830221084248214E48924A2416081A041281220091244F05F5620381121841440018511810181116455C8224781004C2201003B
+:801E000000205184286D4889A2424469241184B22221E12241F424124042085018412B34458832242072486412FFD9052CF4112487321FC1F268121F41724AD2C1F26A121F41F24A931B21AF2419B54A3934AF143924AF147924D81AF924481CFB244A1CF8244A16F1245A96E1A264592E4A9E24ACF491242E421F49D228F1912C83F491EE
+:801E80002CA3F4812CAB141D24AB941B28AF24B985B44A39A4AB9443FA429247822B944F8394984FA2F4BA7FF0244A1B618D4315BC4C11B146D181B24E21F14A851F41B24A9825AB9443F34A8143F24A9143D21A91424E952E5A4E952EC8542FA2E55DE2A26459BCE449C24A9E2C2E4A8E442CE5C922E4C932428E2CAB144CF24A948E244A
+:801F0000AD325B48AB1443BA4A31A4AF24F12448893936A9F924525EE900800400000000800200000010020088000040014008480000000044001800000000F0633200100400001228128184C04440688120412402488CC262004C8246382C18414100C381210129450C844A11224808484A4104004B348314F824D400AA9128418126446B
+:801F80002A0288841224104802288A61421819850440181104211AC4422800211C0220648140211814488861414E18108821058481162174C20F80922849148842282221123C1881F0442824808161424D125A82248122084143A22489744986034450811684252121545810D48414A2834C2181A414498101241A628156F8F6A200124124
+:802000000044240082184002008126882801118014E8A24401102221024110821208428429018884188440384810084210D8842404EF570E23020022001A621400114008005018C0214011454118489A280022000040012A01611781C0288501401898442D34411014282A24F2DEBA14C01143D2185214AD23283588D232012225C2154083
+:80208000E93172D8A14B1E828698211A8662CC244A02174419B1286425C1201215B1241104183827222E8243B982E41811622D1B14848183F922488B8426A41400EFD20B210010548121144A220110521C40C1112D9158889B82A016D01C54288B243024A0242244801214C131A012124391312942180280F941186042163C2282418A829A
+:80210000049F374A813211497221681223C2221E2811312113428201842846F828812C01264171248108406A941311A841A1001410440470221288B82639C91F21088914D284D48221C848C364825220F2BE4E80C11858203222221210882142A412803144C01984882C0A1C7254A88222408834143484488C1484741118688289A1418126
+:802180002901111C6241814B2543C2844C42282295C246582C8FB10C64844881441028D212C241404264121823424804221A42C2312081082200278214888147A2422AC4246D1160226445014484A1448828244289044222A50442BF630D00816112411121A4008381914A842028440484448148284424A01481148386840218002810044F
+:80220000C0488382840114811222122200184C21D8254771140284A136664224282821182638129B1481224E88491481A2292644298616C42222588C34228C46384826B2148402E9C2284C8114FC124843423822C0814D486C811E4808124E1C8F416444BF6E0620814104702821511A1D482041022C2141048D1484818238118524021088
+:8022800008875124C2224604F02C1113018CD2261101844671118841882142B43484A2424A220886F8221C4044446C144A0183254264144002F04418C0684582841244712402F01148A01C0040684448002813A124424061242024882444D284888CA484844258228921F215AC0020010060C4A3644828222034228643442168188C961893
+:80230000481C2A0684811E438748222C24532193622800F08114200882891864821D188152220080222841023E93904410A4248449210241830210D8844894413819825141C42644D4810428185D224846D4480246180814181C1244C134C03187434B2118841C18088C9118CC3188201408707B05A0216041284210099038818022B82407
+:802380002128088C28AC488E19E08211C4A180828AC11400A0840052889042484811811094A44180084889014A39828CF48CA32038491800222082841264224915014C6271004021024C030022830144200222304889713148E49422C2282014222285010062214A020016F1FB89C02A12AC86410889042C8221E444011694388522EC84C8
+:802400007158314824842F2691484911381886081242AA14244B011482901820054E815D888B821C11CA242AA1844A48242488A2242DD8A44FF109522840244168214221434402244A128248082141A21D4419288898212F146824D083C211245032F04222904244008601812846A184822889040000182002DEA680022226081F8401000A
+:8024800020211188014A0126482802400884800426480184128100282820941484181B1210018001D08281018C29988242F0F88F401884042A0424902885425241248B288A444822280A2018021C01880042805B182BA45082122D840000112081C3142828A28C03814B18302210A24AFF2F0768430CDC8416BC48E4A4C648AF8CD484634E
+:8025000026E0A4E486FD2884AB5846EC88A72C26FBACC519B88E2AE2247341A8448B722D48432232162E492142AB214F11F8785482C9A34C99E385F1D9848F8BA15167828D12C6A4F882CAE144F848889AAB864E1185FA795C60254487A31A31684AE7A15116F0242426922AACB18A21E92D57E4836A11C7C280E2B8E682F4442997922A1F
+:80258000348827245F52CA7C8CC21E394ABA82FE6112A312F14CD46499081DA44B322922A4C84F41F838E81608222B1892228B68AABC52F6A36C7024B439D344B364E2817111883228EF46C21123B511314E5F41D84E52957EA13DB3AB841D81CF4C7E51F87C1417158948F418112EBF1781836D118F6DBD6876D8F2212115021B384972A9
+:802600001131711E217E438F1AC4491F54F829A89F1541981483F65AD8CFC1D488A4722F24A4118781A2CF2205100441204208844D82122484444014413211441144123081800129211821882108821482471282148200C048141214842884441028011281BEB4144E667FD652E8ED448F87FE39111E522D422F64F64E848FA5DDBBB36A40
+:80268000D17FFCCEEA2F22F8FBDAAF2EFEBBB8CFCAFA45AACFC8B984AE6D5F48E42257135E421EF22F9EAEFDDE526F61FD62E22B8A3F14F462A2BD888F99A8771F17FFE1E1FAB3F1FF64B63BB32E72AF9EFD4949DF5CEE25B1F2E727F7D2188FA6F4A2226A6688AFB2F289E2147E723F1356A8AB338F8DF539198F25F16A28AF24B44ADE77
+:80270000C8FA4B6BAF25F78383AF2CFEA6A2AFAFFFAAAAAF8AFAE8E88F88FAABB91F1EF8C63C4F48F621EA3B661F35FCC3432F86A6FFBE112F2CF462EB3FBAFAE3E32F2FF33A989AFDF8F8EAF668681F17EF17F7E163BFD2E8A6F6CAF89F54F489CD96B27AE727B3C2E526BEE2BB72FFE8F88FA6F77158143E767F53F7181EEFC3F1387892
+:802780009F91F37862AFA2F26266EFCEE66DF52333AFA4F38FCFEF88FCA8CBBFBFFDE8EBBF9FFDECE5DF9EFECEDC4BD9EE715F58FC21E33F93F711633F35F767655F4FE735FD56562F2EF6E36B3F3EFE3363F7889F99F1F5E45F11F161611F1FF7F8F14F66FF7AFC1FA3F75B79C5FC4C548F27BBFAEF27FFD2DC8FA6B6E2B772F7A8788FD6
+:80280000A2FF1868143E767F53F3181EEFC1F378789F91F37872AFA2F26A6EEFEFF7BA3ABFB6F65A5A7F78B8EEFDEDF3FFBFFDFBFBBF9FF5ADADDF9EFCCC5D5F1DFDE5E55F5AEE22F673711F3DF653736F9FFF64F5CFE5FD5656BFAFF763E33F36F63373FF99F17181DFD7F655559F8FFF41D15E715F76FF7BF91FBEFEDBD9CD1CCFCCFDA3
+:80288000F8BAABF77EF22FCCFD68EA2BBE7AFFA8B88FB6FEEF9980012200002082041A048A0486084881828922B148028514B148921128192104422A0100222082840120081280048C041A04200481F03352206241408C21118812AE2126C22840D84211C5331381D884447134C88143C22110C81246D184A1214D48282D1A4A62121311E0
+:8029000042DC1CA141D08132284CB428318187144118228149A41426882182A14A7F1C084D421F41522C1F41724CF11124E3D4C1F24E111FC1F24A9319B24A5985AF443924AF7439342F547924D852F934485CF9244A4E814FA264514FA265592FA26559ACE449C25A1F49C2421F49722CF2912487241F49724AF28124AB141D24AB941F3C
+:8029800081F24A9251AB944782ABB44782AF4479B4989A4F8B94984FA2F44778D0B4F41164ED411F4152161E48E7141D68EF34E1C1F24895CCF24AB145D87AA9424E9436F8429447822D946F83C4842E5A4E142E88542FA265592E5A96C44B9E24ACF5912CACE44956249E2C46E2C962241FC9724AC2242F64E9C1F648B253F848924789B9
+:802A00002F246A888F647BB4981A6B4BA9F1245A6DA6202888040000000080020000000000800800001400004800000000000000000040019F1F07A021890200845332482860820042A0212604A02110C448284C240444412341A88220021880018481941A4C9112828880041884424302860886E15504206821C3E18A94222120311456F7
+:802A80000A897118149C24178842992132418C468872412482212261844462129014204238281800228482862832184425982A8C04161808221448C74700AAC128AF41648428252862844147A489E2827114588449D2816A4411281F212416343813624E1228431138121906302C80429868120083C2481C98862A3828418423B2184498B8
+:802B000058402242A1C17F14080018E022085041181A82010042802192188042188864442004904444849A02122001124018188109890198304284007024088608D04C0C10017022021850181281000040220180120430480022144D1890C480883222112901240028A3A24920B14201211008A1800881848DE7144C02C4188CF548235066
+:802B800018214E88701211C2492CF1442899C2681B424924242102401414C4442823D122934416A414C2100C8348B22831188A44A2252283E884082C09AB841A34442B1683A841F0A8A28012011852378218150898813D12100927C426B122E1126444484301001014D414E4413212AE14462489B4A244120882302A83B2C82295421A12CE
+:802C0000C2882112A188278144298C381885F28ADD1004C4302A4221106B840080248112984800282002461804224008291442A421103114400A122C018238B04889048824468824244328041F6504466482504A222001400224442B4216080000400200628C8602C42E88A0419AC24A422AC4142A09898A05424212401C88C6484F8284A1
+:802C80002304B042BA4411F8C15300461888324400472210043844C302228D14460810428211A8618C2851288B48204161227081888124084628011426688381288E14259428008003142120F4583D001001121884800611848501400144812242400100C044004004000000164421383C00901840011200824AE118C418005FAD05432406
+:802D000012D84A22844158242A44068B2181C90422C4851408428041A8424E2852C37482483418441AA4281B4820422462C51EA148C391686216C8388C51168489712488A12C12C889B11434489FAB090014B024011828001450329018111848201202140090282242848A0228290129059892408899216081008884424842221848A04AD2
+:802D800000FFF30E00248002004004428C02858462424200001827424C044446040040A4616A8111240260422248C22220324881005828B24781830183A821AF3A021218895148124608101C080028221514821138412200138102482200102412411204814226028324C122828100108843420200A22A14F291272064421902305422409E
+:802E00004408008D4441104404103414482441C14181222D58E0824412182201108282A181281688A1431022888108004018688184FDC3C011002889C22885C124282B24856142C02222102822722628628222842026022002202142C44112206388208221AA84202481814AD228084200424848FFDC038051288C01D0A451484014040046
+:802E8000844A82C24200001822482800C8008014446842C11A4222A121808204428242421820A8863044102288E861078C06D02402004880032D448002C100810000442230482B1220362827411C22214208608640084884800140224808843818419012307D002200161802180022121558220040014C0414801402100800814C0146847C
+:802F000004100200211048C212410010082120B4180C16F88E4D202A28420240B64852A242250225C448200140121822220440127842022532682D2250221288188816184808008C01228280C28860814290141800CF5B02848004342C81011460822664224C03834428029014422180418408280013CC41824028C24800440012422416C4
+:802F800084A1A5842C0280084810022F2B07A0388D22243841699158ED254435A8463524352C9D284D28222722B02692185AE46211542C4B466C42C2222E22564AC2816A37124D142E281A7228AA222E484AE1892186A2242B814AB92AA82825AA229A95144F81D588C148289F61016843AA12CC723AF128181D2A6E2CA42B222C824252DC
+:80300000E6B05424C22585B84D062A24922823A624A423863262846F42A25225321E4D5489D2287848229818B0325628885E5A2B934364881E1887238BC885B242226444CAA6158B147FA9061B171215383EA42B45874161F04C58C392128F8292482D2C2656485A0425CC145C8291474C664285F41848AAB418344899FC54248F4743B48B
+:80308000412A21F122581A7214AC29A0E68F8905248CA5418AC288122F85A882874185A2818BA82F8178DD0A111081112114F14412114F2411E124014E14E054014E11D07801141246154214321821922183382282418249618829618829211842988280084008840000818281FFBA44A1311D21D5DDDDF6B9789F97F7397DFF54F4397C19
+:803100003F97F76161AF86F639598FC5D4A8F76B5ABF83F5786A3F96F769681B334AF461213F4212E142E3A6F278D89E926AE6AAFE58D8DE124F6FA3AA1D814F4DF1A8288BDB8FAA7A28A266FEF2AF24FCD8D2DED22F25F5F2D62BDD8FA9FBBAB2AFAFFF5A422BFD1B555AB5F8ACDEAF26B6ED42F151516AF62C2CDFD1F6D9788F85F76E33
+:803180006CDFD7F75D5C8F86E647F379798F85F758448F64F56F5EBFC7F7796B3F34F16D481F23F173711F12F233141F42E44AEEC5E586ACBB3AE38BFD41E9BAF3B4365FDAAAE24F48B488F288C2A7228F2AE82FFF72F2AF2FF7F8FA1E962F25F552762BDD8F29FBBAB2AF2FFF7A622B774AF55852ABDF8BDB8F23B675061F15A6618FA100
+:80320000D1EFF23A398F87F73C3CFFC7F73A3DAFC6F662242B77BF91F34C5C85F87C6D8FC3F261732F86F67E792B223F16A6774F76F742414F66EEA6F6684A1E12FEF26EEACFFFF734364F63F924AE37184F41D588B8987928F83E14EEC22BEF8F85BBDAFF52D6DED2AF2DBEDAFD888AABAB8FA9F81A322BFD4F54E545F5FAF87AFFE8D894
+:803280005FF641A1553AF63933FFC5F33A718F87F62F6FFFE6F62E6FEFE7F723233F36D48AF44C5CED4CCFD7F6386C6E72BFB6F27E7B2B222B771F33F764576F52F424E6EFE6F6FA5A2F26F6E2E2AFA7FFEE6F2F62F336B65F73BAA2E241F1189AAFA5F1BA98EFC3A1733EE2AF8FF7FAF82F25F47272EF2CBCDA79B8FABAA88FADF4FAFABF
+:80330000FAFF1414CFC5F5FAB88F8FFF687A7FDF07189014008441844008008400000020010020040030242002000018808104122001964822482289220112008F9E0748502C4002811240A412126081256483441260814400419046C018422A014D18124522816441858292181624A42183022C8192881281B0482308124644886A88EF35
+:80338000B4084F32F4112487321F41724CF1112CE7141D24EF14D141F24A911D28AF1419F54A9443F24A954782AF547924D85AF934488D954FA2D458FA264A87514FA2F498252E4A87592E4A8F49D2A4F491244D421F49D228F1912CAF24F1912CAF24F1812CAF24D1C1B24AD981B24A19B54A7924B84A7924B84A7924989A4F8A94984F81
+:80340000A2D44C034D4B1E44CD431247161E2CE71628CF1681E254C92C8F149921AF6439242F647924F84AB447828F443B368DA42CD148B922FC18A54D4887512A7C18C58987414D821E284DCA19D428D9C1F24E9215EC24D9C1D228D9C1E244D9C1D6227B15B84A5984AB944782AB944D48A9B9A6B44AB124F535634028080000000000E8
+:803480002800000000000088000040010080040000000000000000002501BFF90B420054008986220584806484818011145242000040022081947210143426303200A38411684220840812608400284B942212830245F827290096328828891202C0281022124804432204222820018914B24482C1248189024210080024180022120058D9
+:80350000008028068100204421D4570242D2A9C82481C02828585084224847848932244244902224122011F2A4421249028CB62235415048C3026A4162218C04811220B4840422C0482280122402834431524FAA030010612220048302211008001890224100C048000083010044244002002021C22400188001884840A89480210245F84C
+:803580007789000000444120022200401214228322531800000058A012800500224440080010084A010018002004004614F46E6C00201384222298125018806181588418008C4464446084890284898262824840482802182082018B421A041240888418884488688410A84128005F820C0018440047281828158882118811981680A14260
+:8036000049C145008140482823220752842800442212A024008C01120080118828840458224C14F462FC0080022226040000208104102212284208892402808244081008002A0110088452006084488881420084100800F0D25C000000002002101432121A180224182260841008811064824229840440828284322289254328C82842003F
+:8036800089048914A8414A1228820420F425D100261C01701285410110110426012441000024C012002E4800008424831804488420028A1202242A280321800884266141284880FA581200002200282810081212008484000028002218A04244C440040082400410822401004200100440018008817FBF0840040069A1120084002981210D
+:803700004818061800460885824248185484478421464402009028211E282AC1489881A0284008848584C528C024628A048CF89FDA40884281021190212240214112C11210082122200200A0242A84024284C088442B8210846224E022082248211A662420240848892201002AF4BA8A000000000020820220020000800200842001002ACA
+:80378000116881200100004028440881000000420000123F9C0F200240024C022C8201502400222140088448A92242084180240181801442224402002800002094480000220048006F92088C020000811008819028100800890200008428400884810040028002320000200240088100000000DFDC050080022880024D2840048400201286
+:8038000022420400442504682026120228000000811008000020048181000080F494AB00000000002002000000000042830462801448081820014A011200A04148428C048100424800000048D0A4040022001084012021020028100221225022220026688180012004800230480000220000000000200400FF220800208208100200210085
+:803880001088420230484828800244222A041008000025020000000000008400004840F825ECA02886088022024B122002000021222890220048A04280048092480024484002460A8021048024040048220042001442BF340784282A040084101404C4808241460244242428250418C488211002481427844018A241201108004240848467
+:8039000002810042140021F04D68008A0228242A42A422223A8241481488B228022B2223B2224208442E28C7824D6CC442A026812E18812D182428481227841A1328044A044284508848818C026814A044144E48BF220822860822A2702C781254A4C126A822844048B222424204C3A24662484A02628F8323F41A184622014A34422C14EA
+:80398000C2324840288184D288044848488014084248484081F1B8778022A222000018408412C222C012412450A8D02284D2280624831294422E4860828984F41822A01124218121A0128784208412280442460881000048F03A970000201802E901A901A1100A1004450845084508244022412241A221A021A021A021811A1288128812B4
+:803A0000881208810022001400007F6D01002AA2222E222E228F82E223F33A2ECFE27218F82822A5FA181A28C54EE262F22A2CCF62F228288FC6E646F64A4267444F46B616F11A5A2F22F3383AAFA6F37A5A1AB352A5377E725E122F81F12A783E388F81F158788F86F6686885F848488D488F8454888D488F8276287828A824A044A044EA
+:803A80008F85D4590E226E682AA262AE222E228FA2F232362F63F3242687E1AF22F222261E1285782466222E26AFC2F22E2EEFE2F2626C6E24CF677562F2E6F46F43F23AFA2F23F738788F87F3795B1AF27273AF87E225F5326AAF83F33A388F81F138288B758F8236488F86F26C648F82F6686485B848F62828878287824A02242B444AD8
+:803B0000F45A585FBE0128682AA2222A92222E22AF81F324246F41F238162D28282B1121AFA2D2665222EF8242F22C2C2F82B26CF66878CFE4F26EEC4F67E227A7262B158F86F2587B16F83A387E2A2B551AF43232AFA2A2118F81B178F568488B4485F868648F82B6487248D888D488D6887228A8641904214AD488F1163F20B228A622D3
+:803B8000622A92224F42F21C3E6F43F21E2C8B112E2A69F21A18A5F822226D242E22EF82F22E26AF86B642B66CF26C7E2F84F27CECCFE6F2F87A8F86F77A788FA6F35A734E48BFA57542FA7272A5F2121AAD1A3E3887817AF528486A7248E844D488B4447248B868D488D28822A2644810E224F44858FBED00200200004100004002002407
+:803C000000800200819028100800000000000000000000000000F0841F200200000020012800242200211082042608260826088C142822E4A204805222288002288022024200902822008004F057F2C0421F4152281F417248F21124A7241D2CAF24D1C1F24A921D28AF245985AB944782AF1439242F147924D812F924481CF9244A1CF8ED
+:803C8000264A16F1264A96F1224A96D5A2E449D2A2F491242CF4912485F2912483F49124A3F48124AB141D64AB9419B24A19B54AB924B44A39242B94478229F92448984FA2F47425C04A1F41D628F4112487241741C72415E82451C14E961D2C4EB257814A7824F84A95412F5459842D956F82F442954F82E154F922C85E856F8264192D20
+:803D000048D6D592E459D2A2F4D12CACF491648D421F4932481F4912FA8164A9D141F64A941D64ABB459929A4B42AB9443B242F9244829F92648A9F92412BBB640288804000000400428000000002180018800004001400848000000004480020000005012F0D3E800001280022216080018002021821108488004008100008004800121DF
+:803D80002001000000200484000000F01A27008280080000800100000020028041082200200485028180040081004008000000202201B0216492F0E73C00C6088880022218100422000080210248182F81048240080015028481484082041800811004228004842001244814F0D3CB000012000081800118008021028400002002004840A5
+:803E00000848001200810000000000002200302189028F71040000004008000000000022000000000000000080014004800100000000001800F06A8B002200400200200100840000000042000010088121400400000000000000400800001078D40E80020010120880010000008002004800001008A4004400180044000000000000001250
+:803E800000849BBD00000000000000400800000000000000000000000000800100000081000000F029FC000000444A418201280000008400800400000000800844008100000000000000000080018BAD0000124400002400800110082800008421000042002200000000008942080000108802440000DFCD030000008001000021100200A7
+:803F0000001820020000100480021200212100000000001200000000BE170000008004000080012181000052C022000000002A881224015022000081000000188128100400F0FAD7000012414418122901230224000084280000840000804404000010080000228400000000000018F03C8F00000012508800001100000000000000000031
+:803F80002002000000288812850800000000120000F0121600000000000010010000000000000000000000000000000000000000848400E0A301000040020000840000000000000000000000000000000000000000000000D0C80100000000000011000000000000000000000000000000000000000010180800EF650500000021000084EB
+:804000000000000000000000000000000000000000000000000000E0D90B00000084004400000041000000410024000000000000000000000000000000006F7F030000000000000000004002000000000088400280010081000000000000280000F071B4000000000000000000000000000000000000000000000000000000000000FFE4EF
+:804080000F000000000000000000000000000000000000000000000000000080010000BFE103000000000000000000000000000020010000000000000000000000000000AFE50F0000000000000000000000000000000000000000000000000000000000F04FFE004011080000000000000000000000000000000000000000000000000033
+:804100000000BFB506000000004004000010040000000024001220081002000084000000000000280000B0BF0D001484008400000000000010024004000000000080010000000000000080010000DFDE050000000000000000000000000000000000000000000000000000000000F04FFE004001000040050080044400100240040021801D
+:8041800001882810021880088400008042080000280000F0B236004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A21140C435000000000080041400000000000000000000002800008008000000288400000000BF6F0B001400000054000048408404100240040021B6
+:804200008001882810021880088400840028840000800200008FEF030000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00210000008004002810020080020000800280040000800444800221484004002148400400214FFA
+:80428000CF060000000000000000000000000000000000000000000000000000000000F04FFE000000000000400100000000000000000028000000008800000080420800000070820E0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000800200000000000000000032
+:57430000000000F07F4D00000000000040010000000000000000000000000080080000002884000000002FDBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E
:00000001FF
diff --git a/kernel/xpp/firmwares/FPGA_1151.hex b/kernel/xpp/firmwares/FPGA_1151.hex
index 2f0da26..0fb86b3 100644
--- a/kernel/xpp/firmwares/FPGA_1151.hex
+++ b/kernel/xpp/firmwares/FPGA_1151.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1151.hex 6152 2008-09-17 13:54:12Z dima $
+# $Id: FPGA_1151.hex 6799 2009-03-01 18:57:05Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400038DB0A006AD6FF400038DB0A006AD6FF400038DB0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511177
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400058E20A006AD6FF400058E20A006AD6FF400058E20A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511102
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200001AA1111AA111001AA11100001AA1111AA11100001AA1111AA1111AA113
:80010000110000002552222552222F21F112122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F112121AA111002F21F112122F21F11212EF
:800180001AA11100255222255222000000000025522200000000255222255222000000000025522200001F1BFBB1B1755777000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000066
@@ -19,683 +19,685 @@
:800700004F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F48F884846F68F88686255222000000CFC4F44C4CFFF7F77F7F3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337375F59F9959585588800655666455444FFFFFFFFFFFFFFFFFFFFFFC6
:80078000FFFFFFFF000000004F44F444447F75F557573F31F11313000000CFC8F88C8CCFCBFBBCBC3AA3334F44F444443F31F1131300CFC8F88C8CCFCBFBBCBC3AA3330000CFCBFBBCBCCFCBFBBCBCCFCBFBBCBC000000004F44F444445F54F445451551110000008F8CFCC8C88F8FFFF8F83AA3334F44F444441F15F551514AA4448F88ED
:80080000F888888F8EFEE8E86AA6664AA4444AA4448F8EFEE8E88F8EFEE8E88F8EFEE8E8000000004F44F444444F47F774743AA333000000CFCCFCCCCCDFDEFEEDED1F12F221214F44F444441F17F771714AA444CFC8F88C8CCFCEFEECEC6AA6664AA4444AA444CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774740C
-:800880003AA3330000008F8CFCC8C89F9FFFF9F91F13F331314F44F444441F17F771714AA4448F88F888888F8FFFF8F87AA7774AA4444AA4448F8FFFF8F88F8FFFF8F88F8FFFF8F80000000000000000000000000000000000008F8FFFF8F88F8DFDD8D8000080010000000000000000000000000000000000000000000000000000D05174
-:800900000F48000000000000000000000014000000140000000000000000000000000000BF14030000000000000000000000000000000000000000000000000000000000F04FFE80040018000000000000000000140000001400000000000000000000000000005D3A0000000000000000000000000000000000000000000000000000008A
-:80098000000000FFE40F2800001400004840012800484001280000002800480000108204140000484001002148000010F26B52000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE8084018002000000100200001002400181
-:800A00000021001400000000280000808802000088280000F04EFE0000481800000012000000000000001412000040010000400100004001000000000087328084410128004840818102214860118002211A01148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400104E
-:800A800002400100000080020000882800008088020000EFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000210000000000008001000000000000000000000080080000E0820D000028000000000000002400000010022001000000200200008228000000220000F054890000000085
-:800B00000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000018001800000000000000000000000000001F9A04000000000000240000000000000000000000000022000000280000000000006F1864
-:800B80000E000000000000000000000000002400000000000000000000000020880200004D1E000020020000000000000000000000000000000000000000000000000000F05997000000000000000000002400000000000000000000000020080000000000001FED0B00000000000000000000000000000000000000000000000000000049
-:800C00000000F04FFE00001280924200000000000000000040020000210000000000008200000000220022F089FC000000282904000000000000000000240000000000000000008200000000220028F0AFC4000012000000000000000000000000000021000000000000000000000000003FC60C000000002001180000001A010000821160
-:800C800040810100200100800100000000000000008222E0C801000000000000001001000000000000000000000000002200000000000000F05FD20000000000000000000014001200400200000000100100000000000000000000BD7A00002083148134210012244002884A0880A618280000000000A812000000008800882008400200C6
-:800D0000428242F0C4340000200311902100000080880880868903000000002008001400000000000000000088001F250F00008004480020410224004810010000002100002022010000008008200882002400200442D0710C00000000A04100001001000082202804000042188001000088000000000000820000007F1E0C000000152249
-:800D80008402344A4811024880094A01120000002001A2004800185022802904822CA24820088A042304826018008BDD00000000004820080000004880018242000012800212000040028A21048824428008429042200814006F9E0B000000112924225121481121304120091880080000008024092004204182080000288200200888001F
-:800E00002008B0AF0C001B241001001248182C024A2821288821021229824481C98116021DC2188860218829A443481981088068124810410200424200108218027FF706004200120021008028022448224A81110123014A810800202442810490428280040010812888A8A40000000021E0E20B221810810520A2240011200142000022B7
-:800E800088000000212021840C8048021901124022220800000028200200D0480A228002130400184840812821219482001216818214820C18243C242184842998424A031A2881248188A224130882A048004228002100D02F042041118121012823061828218A048242324A0328821811100121822029229442C08250121308001121C072
-:800F000081908228800400222008144FAB0E1800002314418225252104142B1880011220014280A448222021C71200181200002081080080088288008800282008AF650E221400222041011123A812800211800111A0C210A1122880A22800902210022400802411021446C12134000029042004002FB5024A018004164101348094111BB2
-:800F8000860000000000368208184200882820042004888008000080084280048888288840F17D7600001142240000222129813141802E240820888984210188C012100120480180240446612842800242008882884280082124573D144820482144810123143142804421828401602800828221008044021422000080A181A081218800B4
-:801000004A0A820000880000F017DE4021840414248001181424124842002490120052482C86820821481E620023094A018288400242400220040082000000883FA80B10810280642211A04A124850225022D0128808181C22828218011362222811002442212424001220081111311148240000240048F09A78400100142004100288884A
-:80108000981988880C1288C80082208124A818828AA4288A25286829C28A24642800502242484820A48682002084886818F0BDC90080040024521621681A264182C212422482288082942280612C9848420048214812001C041C818824641C00A028282004200400212D21DFA5437111110115D111A4144E211A018E812931A38A23EC3227
-:80110000B181840420B842017A622823EA16A124CAA8D4886E822BA22384081E82B082A84992882C81C4811C041C24222814220848C8E288142CF8DE2FA016460160243CD42111F252122F24F6D1C12CF652C22B112B8923F4C28227118A9983A84A88A8B64EA2A860128E227A2248226B282B5818C224423CA9511B4C8886021714EADA21
-:801180001124842C88A8888A0828C04122DF5508488022241231121D431D411B112AE2151151311B44A013CAB8128221E11AA6581984E429A4112C26C3522F11D511C4225AE52198412C44818824B81278C2B24214916231CE82C88A82CC4248429082828A18F2714F804281026814288006481400402342234203144001144011420100A5
-:8012000000112111291141120100008221902210229822488084E29D42F1F1512215A1226671237341F223233F26F382822BAF1F1BAB5D1F38F9C1711BBF17282F28FA83A11B9B1B3D4AF411911B631F2ABEC2F571133F36FE23E32BC91F15F9F2F22BB6CAFD51C1DAFC42818E833F3874C3F2D18115F383822F14D42254323F12F241835F
-:801280008E82CAE826F6622246E214FC21622BAEC28AE834F6281A141F16A4421F12A2226237371F27F233233F37B782B8F3FBF1B32F2FF7C2D22F1CB5F1FFE3621F18FA81A33B9B1F2DFBC3C11F1199F31BA21F14FD71132B662EA22BEB1F15BDF1AD9E1F2DFD53C11F19F882C12F38F893133724DAE12C71C1F2C2412D422B441F36FA8D
-:8013000063A38E82CEA22F2EFE62A24E821BC48EC22B8C2B8CCAFCC2C23F614DF141611D411F12024AD622F161321D133F34F1F2A22BEFBAABFD8AF8D1C1CE81FEF23F3DBCB2E91BA96C3F16A6D72E332F2AFE23A17E522F26F6F2F23F1AAEBF2F3EBE62ADDCCAFDC1C32DC21B881F29F9D2812F2DF852423F2CFC42412F24F4424237147E
-:801380001F18BAC2EC2CBCC2AC8C23E42CBC42A6E823A8CC26F25955141F1D571115A1224AF653531F25F123313F34B5F2BFF2F7F1D32F2CFFC2D22F3DFDE2A32BDD2F2DFCB3132F3BB9D2BFE2FE71F36EE32F22BA72F671533F34B6F2FBB1F1DAED1EAEDEDED23F1DED29F882823B881F29795271D2F2D34337282F1CF442422B66EEA39D
-:801400003F1CBEC2AC4ECEC22B8C2B8CCEC22F1EAEEA8AE828E81EFEF8D44001144001240012260200144820010000A02400A02418800129011800800818480080044800000000002F7A0C10016024114A8144A24814481C91411812A0482081212204002800242822009042000000101221A248148028088220088028F84441A0421B2154
-:8014800026B11162261B6127161B212F2691612F2499612F1499412B9413F242B113F242B113D212BBB1C4911F2AC4811F2264111F2265191F2264192D429AD222B491D232B49142B39162141B692F14B881F2428119B242B881B24218B14228B242A84A2B84A22B84AAA484AE42BD49A0421AE412341126A2416681F4621319C4928AE6E8
-:8015000034BB81E62439814EB2114EB213A8B43B4229B12184B123A4853B42923BC2D22DC1DE2129AC292DC39AD212AC282D131A621428273419E624B881F24222112F24A8422DA2A227248AB44238A22364284F8D0B20080000000000280000120000800188240000140000480000000000280000800440017FA6058200160121C0421CDA
-:80158000071E611448482D4100124A0118CA822888080022121A880412002182291902A084C8884A02002C04882C42028282C0425F2305192418011924911226012C0400008E421AE42804482A888182344248424842A22222129042183800182CA88450214220286428822084286818204481FA46D714201C814102304131A01614429057
-:801600002224189052C0222A8DA884238801C82828AAB141021229642128F082420021881CB44228026230C221C22C8A58122C2844A14A8FF7081C04106114122981A2164825018064148A24A449808409282084240442980012002081288121A884488820240882000020088200FFF30700001800004800210082184824820000004220D0
-:80168000840C222002881200181A24024220A248002480A848200800F0F4CC00008066261AA4149082208C1101428088090042C88A04200160228004460200800888202A8C08C282207422022842228A0288AFEA0D0000002B4118B042088823110120818818020042420012000048402288018001004A0A284A080080882802282820F804
-:801700001C9F0000A0614A0242008004004A0842128200428888800448C2262202224800008252A8004A88084A284822742222044A0888001F8F051A04421800245242420052480042120000213082A8100242002222222C840480848208400222100230C2002A348224A0247F4B0A202284022A81022722280088A24E126A218882082854
-:8017800090122A8881383242138AA3826810028094111A0882481C222C2268246820A44200004002F042BD80222101004828002C08210024202403A08448460100100242A04882181A080014142200C20082460100C2A2828004F0E19EA04132A012A0126622E12422C2822488C24622B28224270A28C218C22170322234814A238AE628EB
-:8018000026A812122118884661186820248EC822424621A442C84A2828968248A0247F1B012280010080168204A01480A1410018002034218822408202420022800C141280829821881082C48228002180220800F0AC5300488081241402684AC88224888886428284280842888A040000808802290400008228004828000088820048286B
-:80188000420014F0A815141322014002222218800118111386840118820000182412BA2468224A8108284A812821880142009082882304212121100221130482885F290A1C04200480042008822A040000488210424282A84842008088044AC2410028200222000021238804482C28240A0014F087D5001400A0141C012162262102821845
-:80190000482842008A012882004082848402187082028858002C41220800008820282208E28800222F3D4A010000004800182248002009824200000020088820222418E1120888002028042B842800000000240020FA5DF7A0418021A141286880048800008800005220048A01880000000000008246028008204602822100002288882116
-:801980009FD50A002800219022232202108301108208180088122C24652240022C248C18828824088812290880020000008200008004EF25092008000042120088000048200488400248888084280429021A0411202224081223888804200880240280028214F09D9220C1111C44810818400122A0181AA24188808423850221822C83822F
-:801A00009A222A14A21840111292328004241822008008224A028220282828082114CF3A4E11A14914524682A453245E31AAB431C9A21B2198382C2421A481CA250948824A829C128AA84800A84E422542A11A20AB181AF21212A0C82A2A8CA264242728884A8402A2A0848A4881FA7A23A052171810A1482C93212A9442E02822B8426527
-:801A800019568318A2C8208126E826381282F2222A32422BE8233DE2A02A2B5C19A898808CA844AE2242822188A088428282222B4828C223081C642A9FAB025681A12118122324B44222A2A420A288A048C26A0DCA87A8942182882DC2212CB642C5A2422EF2482B184AD521D81206A8602A82291142826C282522824C92828E824AC88287
-:801B00002A2E028E82F0D2918082810219921211211110014081042A0422A042A042400224402244A221A021A025A02180228422843242282304230423243A4282218A8482049F5B4DA11217121B111F13A3663F35F573733F12B651F7A1E11F3BFBA2223F1DF551511F35E32AB292A9A85AA77FFAA5662AEE2AACA82F26F672627EE2CA63
-:801B8000FC42C22F21ED22AEBA2F2AFBB3933BAF3AA333AAAEF72F27F5A2F2EAFEE262EEE22BC82F24E424E424ACE82F24E626EE24B622FE4342426AA2226AF6375CA0531F1BB521F221216E624E526AF761633B776AEE23FBA3232BFF1F15FD51D3AEA22BBF8AAAF5FAA6572984E82BF982A2682B232F27F68282AAB6F2FFE3E32F2CEF70
-:801C000036F7B3B23F1BA2642AA2F96EA22F27B762F7C2E22BAE2BEC2F26EE24B462F2C2C22F2CEE26BE62BA62BE62FE63E2CAB862A2662B669F7E4C81F311511F13A3111F34E423A7771F23F772716AEE2AFAB2121F1DBF9171D1E22DA1BB9AA95FFAADFD2B48CAACDE8EA26ABE72B772E52EACCE2B462F33ABAC2F2BFAD3432F1EA3E8FA
-:801C8000AA82EA27FB52522F2BABEC2BAE2BEC2F2AAA44CABAC2EC28A844EABA42F6A2E26ABEA21EA2442AF28537A0711F19F111113AF351512B671F37B673E517A7E61F32FAB333DABF91F9D1D2FEF2DAAD99BAADDFDA2FA8EAAED28AB242E623E327A5CA2BCAAEC2BEF32F2CBC7176B2F3E3F18AA8BBDAE922FA72522B732F2CFCA2A211
-:801D0000CAACE22F26E628EA2CACCA2F2CEE2AAAEEEEE26ABE820C2CA866FFA90814400118482212A049221220482101008A04822008A024188028840800888008001880080000002008800200AF990C18802101C84A01620000484A014A084AA94120088A04484280A2C2280024421C08000024C082E022082C082C28480224228882204B
-:801D8000F88379E012B511A2121B2166B211F2421219B64291212B9419B24219F142912AF442B12AF442B1222DB12AC4B1AE421CFA224256F12242D6F1224296D122A5292DD21B292CB591C2121B294AB191B242B88132421B282F2498212F2418B14228BA4228BA4228BA42A8424AE82AF42EA5E01291412A35116613D13291612F14917E
-:801E0000212F3499214E31682F3489E4148BF442B1D0129B422DB18E521CFB228256F12242D6F1224286D132E518D222B981C2121B682C91214E121B294AB88132421B2827241B284E2219A284A22B84A22B84A22334222BA482AF26022008000022000080020000001002188008000014400100200200000021000040410140012F8C025A
-:801E80008A44C111A02520044E222AA8184242B0418804422A2408488220082024C4220042C82D12982E82188800200CC082802488242424A4820000822945018A011C0118AA21011C642220880424821280842A28223421238486114231814A2882A1821414003A248C14C1624E2248602800281128C06220CA81F0CA9F1448CA21C1116B
-:801F00004A81A14312242E8182488A044E212480852424A884222394A1CA21269442282338412A24BD2218E11C32128858C848822C6624006A1882A4241C8486C222244081F8753A0011142002882086E422018084888408288228800810021810418108209192002002904180E22408200800808804A288F082BB00808142022C01214020
-:801F80008244028004802229042088880419A4218810028819020082244846020020E8242848022480022820046F5F08282222804192211A241182A18111C602218842304188428E21200480822804882C8185642C22821002102138C210022482828248B04228880AF03B362082A2122824108205002318814C0220240220248A28042029
-:8020000022224C02128A94618A0460288084142398429082888282290821248A0400F0BE4C000020013C032D1220214502214882001B944A081120880419A48100823012002982082400008800422121808824022AA88242F085B43011A024802202406122190229210288008824A222212A498108A012124222002C06488028042825024F
-:8020800042008A924220042C0248428004DF2D09005222421868244212200222C0428218424816820858C8C819A242B0428208821C321142481200188002221081220800488A02211002CFBC0B00110000280088A0484280230422221100000024002280A1842009881A02800820082800828882008A028800AF3705190128284A228324A2
-:802100001223B122082B4142A0E129042A84128108821388044223A2248222988AB611A44180A89248208812A24A00A08482802882A2242904002FF606001C0100222084428182080088128848292B022A24041C222291124A020028290818001226020090212C08A04880948282202844D141094826010028200413A2848A220A82242816
-:8021800080888802002828188828001488308242482442282C022A04A8828A0288C220822848024240F2FFD90040010014121C9282211A44B1C27222B3310488100120B8218804003082981810018238800A400228C022704201002400820080B8490318001452800480084848400200000042008242100240428284240A00A0810060283D
-:80220000002A28142234428820240A40E1E40E001122100119820610111281068830422A8828032C884802328E1282148001402188068260118221C021251141110188304282102288F888E980020028C021481582C2E21318924180C2828229288208C022D0220123021282284A612800000080022842E02802A06882C814880080028FE1
-:80228000660710810400230448240014241180022242802203A820428202228643018220088200822182001420082424000080045FDA480100198224840190510080018A041601206318820011203841141258800120810823820100000014000000232408F0E563A024421200141001201282084002000080022022019832008024820431
-:8023000024008823420222824842102108422B428084489142C77D002248002800800428422848822022044812218001880014132268181800288E41288621248868182400882C020010112128B482046FF8022226C1111521B421E21124E7346216AAA8AE2F349841141F26828291C24A8282A81AAE224AC2A3581E22282AD811F891C174
-:80238000D882A8A03A8E82AE222A082F2898428E81281F28E818B4833A813B42C08229681813A8444A48B182F4DF74141A1411016014D01124F283122D421F11B481661C212B8823C8818211EAA11268202802822F199D12182C32825E53484A280140C18213E128B822E22688928246E11448E128A86424E842222368122CF89F1CA024CD
-:802400004A022AA261B043021984AE2425022CF1E1621AA482272A62AA88E8118298812F22287132A282267291A12B18160223B88186CC2129AC28BAA522222038221F228244A28C4223A84823C4822B8848CA0C6F18041220011A040080011880011C011C011C8144A14114481448144880841282021324122112211621142104800448B3
-:80248000200222200A22F0381F146AF27121181F1367282B667AF371616E321F1DEB2FFBC3F32B9F1F15ADD52F1AFB31133F13FBF1F1AE811F1FFB115115E13EFEE3A11F38F423232B461F1FEF1BFB31B17EE22F29B952F4A1A33F14F451111D822D432F34FC53915AEB38FE62E1AE2237161F3ABEE36C383B64AE222B8EE6D212E236B6A6
-:80250000C2A844EAEE2ED6DF46A1131B67181F13E325BD52A5441F15A4321F1EEA2EFAE3B17AFD41C12EE22F1AFBB1B32F2ABAC2EC1EFE71B32B736AF6E2733F3EFA22722B776EE23F1AFB53F11F13BB51E523B353E52ABA22F211511BAA3CF842E33F15FB51113CF462611F36B662F2A1E13DA1157383E12ABAE268263B646E622F2EBE4F
-:8025800062E618E42ED61E48A1331F1226F131315E523F16A6771B676AF361A1EABED3BAC2BF41FC42C23BA3AEB32F2ABAE2BEB1EB1A3E127AF4E1F22F3AFC22A22F26F663612BBB1F1BFBF1F19E932F29F9323227282B441BF31E932F22B2A3EC2BFD83A1CABA63EE267663F1A1E33F1C5E313F1CE428BAC20E23E236B6E2B642A4CC6E39
-:8026000062EDDE142AF2216116F121216E623B776AF671616E311F1FABAC3F1DFA42711F15FD62C33BA32F3AFBB3B32BCC1BFFAEE13F13E329FBA1A22F3AFE33232F23F3A3232F2EFF93B1FEF13E332BDDFEF22F2CFC63611BBBBEB32F2ABAA3FEB1F32F23E32EBA23DA31F262221F3AFEC2C14E433B4CCEE22F2C4EB262E424B4C2BC42F1
-:80268000E41AEE24F44E5100400100268144030034400300280082000000002818420000184002260220482208821440A24810012004DF2B0F181A0212221A06486200682B8400488822A04280848204481A82A4213B42822CA424248A82A42826222884A284A0848A22061C8824248AA84A4222882AA48482177FC0411B21221B2146B1C4
-:8027000011364219F2421219F2429119F2429213F8429213F2429113F242911B422D911B421CF921421CF8214216F1215296F1225296C1429AD222B4D1E232B49162321B2927161B2927141B28273419F2628119F2428219F442822AB44228F24282AA94822A84E822F43616C0411B612A2461341B61421B212F24A1292F34B991E2243371
-:80278000912F2421F34292B298BA94922B4329A85A982BC2882F2225F822D296C1438AD222AD2D2E429AE6222439628AB242A1282724286A18F142A219C6822AA484222D82AA84B82294822AF43AE1008200000000008002240000000000880000400118000000000000000000000025012F730C0000226A218482C6432CA818808D140185
-:802800004822242820682882002921381118200821212214248082046A88A24860182004882C0420822426F8EF96142AE51821C2111F2164181992412132C041231C029AA429148E4248C81AA4421122624222237282021228232421941220E222642814A225E3181432A2482F2824F881221140E21822A8281C0837DE1428CE11C0111BF8
-:802880006186C1413CA2422E1121212C24A92414402144E2242A84EE11B88222C6421AA8281C911219014602424200682522642A424EA38223B2611832422C2228149221A84AC2412978ED02582002241A26820448881B492988049A848BC4A2482001000026022908A028211225A2211428218A42012E832024088A84388114402208826D
-:80290000A8D0140D4860120060124862E036080021800828001382084220B42224044A024002001440012582840890414A88744202244002888280F4A72B0028001CB5329452290246014A92411AE4180412212C84A428C22820081091A3C0926024A0E118B227281B818800883C82E428060080AC82626888002A8CFA951C808402C043C0
-:802980002C33414A2282A4424820B4410800460260140048001F24A24820044225A22118AA11121201801801244842502288224846028820AC829F790400190218421E228014C181293241160280192222A4282AA8828008482126011EA200A084001CB88121082522642A42AA1481882424C482282888202882F451CDA01420240A208129
-:802A00001211229422202634C1808124022850121C894842021B1200883C681419C141112C48210C002214A02C42C0422A0813A2482A3822207251440120044A42A2428086B481014A6B28181880244842022228E013282614219481204121012A842102183022212C081129228884280442284002F0397A8002121E8118120000C0412489
-:802A800000000020841C210C4021220200222B2180040028208A840C20020021801841024800CF88031800192164214A22C261481C38438888421B49A0418828212A4CA12C80A24228221B2186011AE8226915131481216A128A2162244AA882311982A44890422B2C20E422AC286860227F1E092A0418282A011840024A81E2248194120D
-:802B0000002004428012C18111142D4214480028218081420121482C880200908220240882280000146FAB0F280014142004311002002B2130124812000080042024248441A212A0128AA2129052201212822808D022042400212482200AF09112904112112004121428901120220412001110228281E41811011348110120944140011169
-:802B8000102288142124928128401122824802100220F42D751480021A021231001E614002200814428A04480088004224C2108284041C88948130C1008842402214810842304282A082288840F12BD9001180041112200488002082A28414801281A8683460152131408184022C8314018A819222008A521214200828820028A89081908F
-:802C000042F095461001138131111A020086022C042486022440022C024002220020082128318A020000282C82822A8842022121A04200230220026EB2001868001CC44219240214008A04802208101131122124004211420080042A080010621400144611A24814B08204000080A8481F880F00002C022140021602822901131441A28195
-:802C8000108225080021308224C0420000402168111B488008804841010090220000005FE809A02C22808444012994B288A042290A28682908A84A8A6124C82C2844020080022821C06110A22C292488442214120280222848A228112062342AF81F1E8004482824002304136424002842C621484123048231141C011C0A80C811211C98A2
-:802D00008211188810110140A14200A811A84A2812821841220821F0BFE460149213A22734567111023C7253F1D1124662224A081F1A44F241812C81C6618AE621784351212641022541012992224ADA11B681E1146821485EA11B2486B28328121142F2434315B142BA222A847822D3229A822AE814A4482F4A4C81E41843C1111B641582
-:802D800062142D432B468EB22180F8824229DA2222368229242A62114E518EC2C223952219B441883C12422A7413332242A211234A622219E81426A8CA4E438AAA88258224A4C8A0A8142240A18247313021621A021229975213042AC481212B2418F2521F198EF4918125F2438298A2D012D821C4412F34A848172C3CE522E42CA1428A72
-:802E0000E9129A3186F1419333B282AC6426F241E2341BA83712206828867222F2A222202AA8282A3842FFB70113841181012C81040040020018800124000011001002211221122521918212881002230221202208800200288002F05C78141F12F2113115F111311F32FA52423355232B223D333D128E8223F252122F2C7892B2B2A8C859
-:802E80003F29ED22FC81831F1BAE6A2CF4834227222B223F14FCC1C33F38FC12132F24E623B5F2E72FFFF2C23F35B113D132F831532F28F883833F36F663212F1EFAC1C36AE6365C112CAA22CAEC26F622211308AA026E22DF99021F16966117121B221F36F27361237541A2661F3EFED1D32F28A8644E82DAE91FE23BF881833BD92BE2E4
-:802F00003F1CBAF2FF61711B5D3B483F2AF9222229E82CFCC2432F31F162432D222F1AE23FFDD2E23F28FA83832F25FD42423F1CFAC2822B8C2BAC3F1CEA1CBC43FC41E135E124BE42ACCCEEE23BAA112A12C2412F267EB8071F16B63157111F11F3A1632F25F45352112AF221A31F28B88298225E92CAC811AAA8192F2CFC63C12B883FE1
-:802F800018A51CCED22F28FC62C22F2656232F3CFCC3C125F332132D622F2EF6B2222B9A1F185C213F38F833732B8A3F34FCA3A12F2EB6A2BAC3EC32E21C4EF2C1C3AE22CAEC22B222A222B0A2026EA22D88F061613AF331111B331F37F761633F34B543B462F2F3F33F3DFD82822B442F24F8D2922F36F3A2829E922F2CFC61E32BAC6AB8
-:80300000F76131CED22BC81F27FC62623F2CF4C2C32F3CFC42435E722F26F4F3722F2FBEE2BFA1FA11112F3DE936F4C381EEA23F1EEA2C9C832BEE1F1AFAC3C1F0E3C32F2ABAE2DE22BAA2AA222B222AE232A6E67FCD0A001820828401140040A2489041240082002800114A1221948310020026010014004001260234008228000000F04C
-:80308000AE570012A02146024601B011364248230442482CBA81E424084A82A414114AC84242241411202234229082C08382628A0419061996822888C082222C280A222928A284823FF40C1CB411E212B111E234B111F2421119F6421119F2429319B24239112B94322F142BF34293222DB12AC4911F22C4812E4216E12264192F22641984
-:803100002D529AD222B591D232B591E232B991E224B9917262B281724292212B861B282B8419F44282222BA4222F142892A22AA4A4AE422B51E012B111E61235114E1319F24211684E11282D131B682B941B212B84124E21322D83482DB12B421CB12185E9226C112E4296F1224256D132A5252D52DAD212A5612E531B294E921B2927269D
-:8031800019764292216AB88196A219F642822AB442AA422B842229BA22B4426A28EB8F008200000000140028000000000018000000000000482002000000000000000014F0148C20059011126246012882421A8444013D1242124A1891210015021012019022180029D82211B122D81258122C824B8204480014002328082220088A722ECD
-:803200004901963121224218293341904135C22121123180C281E0212E84410182284AA142421322E8242A8884068A838181884801A6D122CE21234C41C241A2465122481CA842288E41483FAB0F48CE111180E125B2111221C2821C64346215C22112A018482A7C62031434828E12182240A2821B3C88428E42182F18D322EB18042419B8
-:803280000929F4C2229042222448A24AD8228884C842C0418AF25D868001221B21422084041944A221204112B14212813811200100224219243421400224280020D112A82822E012086621481141012501601228A2882CF4F53D208202800100A0412A81860129289192A0242A0480034222424842210042C8C224121C01182084268422D2
-:80330000048004C0828008882024F86ECA8004381190522331524AA382293882A0482C94C14AA2851E821622A594200220823123901138382A21234A223A924E81282922682842212C8C1C82A486228036822288A8F0AA1AA02400002B14B01284E224012B2C18884A98C129A9819AA41442422A01422268466222402181242E6F2816A232
-:803380008121C222484A48C24242C888802406211002822A24F85858002838111224182025AA1A00482582A1424822272218982002001846011222321880021382C9112422228A24023042290488A8A04A822A0882E0AC0A4A21223421420022808201122A284551224E2214381A88082581898881A6212A012021947219A54218001CA8E0
-:803400002813220811422848488002A8C60210C2226FD40A004A02808101111880866812A0820024106224001CA584424002182815022088842AC8218004800280022086140280488204AFB50C00200100802284042004A08616212144016820C221349041800A488A024012811102904220842402002522880880A24A20F464B2A0148052
-:803480002223842121025212621A8884A5822AF412221721709221A442B0A1342112281D42381A8822A12C2A315124AA8159121CA8421B242026240248482D422C8228CA8282E2482CF6EB5700281001006012284200130811299841A04320081180641429A42180024225228488420122C082800814480020A28400482800F0B8AF0000D5
-:8035000020021880A128C242208104202184021440016880848804210090811022288224012424241D421C18A18221212123028A04003F710C60142840828202241280180188224A2102588822182242111E81345226C241802C612124124822A028118821288002212501200400808874F404120028420022100119948110A2182009880E
-:80358000180011132201111488A043294102582800468194411C268484084220044A28281402A042F03A174081C241200146014280016642E112418208298801800818318800A081001A860482481220512200008200000088822142004F3D012002002812A0424A81080046C24112148811482AC8424214008A81991382002B8428481264
-:803600008A21268408221C182214111141012242488002C0816FA90F002A018024A241200819810C18A0248082848195228A02288800D022422244A2812952224800388A4202A882428A34828282002220A8483042BFAE0B280080021032111001218A010029840122008021C84100008800006280A1388021880222210024C042009042C0
-:8036800020089F7D0B1200484A8184842102002424244E822E822E42002488160282181A8218328314CA02003800C282801C9141112282A04880AC2882A048288200F7BAA042A041281400681422162121C12186A112006222281823022A018823412123021C0842001B418001291282820828802204008200B022043F670F221419012459
-:8037000062584AE114A6929292CA5A332B911C94C22B5429ADE592889E12111712E681623C14C24E22822CE824A31C6E412E828681B651A5457840F283828AD211A28488C229E826E424A48688298A4C83F87F6AA0412AA621285E21481B242B611F23E114928119C551981F18E42621EB33A22A001B432AE612AC24199311198861333BD0
-:803780008A239242822D6227212B1421628AAA1AD67121B1A122C682CEC2157283C322248ABA82286828C2C24A84F4F7BB903120A2422A85222302921C6514352261262BA94E3288422E112E728A0329C282121E412B113F2D98B31CE125AE1C1A2481AB211AA199222CFA23822F2CFA4241286223E21884D411AC48006829A442A0AA42F0
-:803800003FA90A130113011B4121193422100225A141001440214101140024904180048012820211102112110200002182218221A221A221A2200ADF6144A1111D111F11F111111B113F31F113333F32B243D433F8438333EC14DC31F143511F37F3B31116B252F4F1E11F1DEF1BEB1AF832233F3EF8A3731F17F453C11D533F32FEF253D3
-:803880002B77AACD513F23BBF3F7F3832F19A8185E723F19E93BFAA2A33F24F4C2621F3EFE63433F3C7443F3C1622F24FA22222F22A2664E622B2A28AAE62CEE674CF151511AA51317111B552F23B672B361E614F4D3723F2DB5D2E424EE38F8D3D37EF23F1BFB11133F18AC551F15F5E261AE213F1EFFE1A11F327F317113F191521F3B8C
-:80390000FEE1E33F36BE72E331F513923F2FF73163271117191F3DFE92911BFF3F32F242422F2CFEE3E33F16F2E3E3373C3F3CB6E2FA622227262B6E6AA6AA2B2AEAF6E2E28FE5011F1183A61113E135A5512B371F17F6414219B1C3E924B1D2FF41433F1CFC62223F3BF291932B757AF651713BAB1BAB1F12F3E1A11F32FE2131357151B4
-:80398000F163A33F3FF732719ED22F23F732F22F3BE23ABF81A83B1F11F3D1932F3BF3E2E335F2C2E21F3EFEE3613F3C56131F3C9C822F26BE62E426F682422B6A29A4EECADCF54AA155381F1311E135A5613F37B363E634B461B6D3FD51522F3DFD53533F3DFD63F32F2FFB82822BD91F1FAFFD1BEE1BAA1F1EFEE1A33F33B6717713F119
-:803A0000D1111F3EFBF3F32F33FFB2D23F29FD32F22F3FF7B2B33B89BAA3DFDE933BFF3F3EFCC2E22F2CFEE3E32F1EFAC1E33F38F8E1C32BA8EEE225A2EE8EE22BAA8AEE2EEE2CFEACCE00601200000012200848141200289228124A1281020080012901229092100218E0220820280200000020082004C5092A0480228224A241620048BD
-:803A800034A09422212A94221A04480088E0115221001E212098C242200128224829B88134228242C08182148280C4822004888671C104481B2126B11122B411366219B64291612B9419F6429119B442A94A2F1429F242913AD412A9421CF921424E811F2264151F22641D2EC296C1C29AD222B491C2421B2926B291E224B8917242B281E5
-:803B0000726293212F24B881F2428313F84283A22F2428FA4282A229A84A882E422BA140A1612E411A42A16127124827148AF642911B612DA119B642B9A1B44231A129B83194823B4A181F22A5841F22A8851722522E8256C1C19E212D429AC2439AE432AC214E838A62348A6236482F34A8282F34A2482F34A84A2F2428FA4282AA042B77
-:803B80004A29A84A9FBD0C0000000000000000482001000000880000000000482448000000000000000000F02AB980A4121114241426C242262224C452C88A8408421AAC141A888286D121280C122118258208216A082321123182428E62122C62168028288804C2824848688842008F210E1C022A8191415A0222582AA1212B8220A141CD
-:803C0000C6B121013382364180A4242682661246A1424A92113212C0312AE418A1121C2231124A621C88390A3400882448802A28A2821C2C72440319A62426311119B4228532222936622E426E822AA441601819A68419A6921D424A025AA84A2213C3C16A813282199312481E21481E8122AE412CE4280686B14152124031A24882884224
-:803C800048C84AC2822A282CD2B5062081011001481812181288824A89842191124828A014172290421002296411002A082B12283C0118126A8196828A8228080048290828822848003FC907480000E012813442286E1280081448B8008012E114220200154201280024401101100221190668425012822324082A04008068288F6F02382E
-:803D0000282220E3228484A1211421141CC1425A2802484AC262422A05144AA2421C12223382980088002A51211C83A414D82328C88280C88248112D42222C286828426248F0298220218202184E222E41524A410240C1421B18808BA4242848324A02224A4242218228084002142A41C332202114024A288418811423044280282486C849
-:803D8000829FA60C62008002129022136227111A08486800C042221344611242C021241D12A01200880011108124B412B8212C281202239882422998228E2288100242F04D1C800452226220018002226028108282022820229433484A8AA124240010011490421800808202802484222424A8282C8614028A1442F28E3E802222042480DD
-:803E000092114212821428218024C411001921C822C012882224A82A812A328180A6484822A0241448004260182882100200882908212AF8529420010000A0422004200111380011000080482184014824A0428280820212008225A184241121100200002A0400421F420A3800224280220612881C8201212323A6218082A1284813022DAA
-:803E8000416A81B482B262A18221C88266E12886A221184220DC1282482204248224888046A24A2928042CF8EDAC808482012602181321840640224881041114400128A08422A012002082020000201221024248341B48802404A830420082A0428F860E19220822001305422139064A8281081031420014A820A2242008222200282A01A3
-:803F000000002800110000200882200C258222028FCF0D00002004160211400200132481021324220822002248008200001800182E120040A28480C882282282800800004AB85F0C68DA82028022220222000029A44200008002A02400000020080012002420212894218A24240200000088C8008F510814001242212501002006881220C9
-:803F800016228322021200121C084001601200A0240080012211C2C021002002A2214A82042984F2BFCAA0141813212481046822282946112101008004200222800810018A22829221800200002228CA028A220AC88028DA22222A822A0426F1EA9500001001001140822224A42480240200200214112908282100100200200400001001C4
-:804000004081080080180220F46C290000A0248001001C011829829111121118198441810180D4214402121118141840011CA3121C0114214001211420420240020020F8EED720210818800210020021290C2128468202002C840411426224260128821908804202001982082800428820420200620021CF3E0582E0120414182A246416B8
-:80408000122005282B821821003200290818803813000025012819022E414081811101806614138802002034422092C2F05857601482132233412C24A4433C043B321B272D124AB42211311229A4122AA412A01168281F1512B1410415A122001A0880C1224216321210B141F481817081A12488A2308286B24214A2CC421CB482F8535760
-:80410000A013BA84021CA22217123042A044A0242348E214A7141CA261171530812A28621286C2612B823412143E222EA21F1282B321A12211181581B121B3226A284A32612AC6811388A28A242A28A8262B222AA4A42A361390611816A1141A34521AE724B221E23342D12294411E92DA2EA1621722238482E212A22C21484846C2122247
-:804180002B228A088220C2214836A1212A216211821CA2428ABE427881228488A28229E222C8C290A220F4F127304110011984914118000048001440814401148214002112211211128812301110011121D012082182218221102208820000F0894860171F13B121B231E33AF213933F2393332E333F35F743111F13A154DAA98C3E313F28
-:8042000017B771B121E413F121111F11B161BE1256111F1EE612D321FD3131221B11BAE92BB322E212E112F161211B111E432F11F313222F13F221233D432E22EAE43252221F3888EA22FA82822F2232C22F2ABAA2AE422AE226F6C9CC141B77BE711E311F11B3F1E71AE735D113F121323F25B743F771711F16E72DBD42EC17F573511BF3
-:80428000374E413E311D132B336EE12B721F16F461F13F12F363721F13A33328AEA32F2BF332311B322E311F1317F111322F31E331E333F1A2A22F26E22EE22EF6A3233F3EFC8183AAEA22F222222F22F2E2A22F26B2A2A846AEE22F22F6BDA3B051E111E511A3311F25D532F462233F21F252413F35F543133F13A174DED2CA38312F177E
-:80430000E537B132B531E512B192A9D71D71F061C33F16B413F423213F13B181E81AEA2AB2B2AB221B231B621E111E123F21F311323E233F12F2E1E13F16F2E1A32B2E8AFA83812CB822EA2AFAA2222F2EF6A2E22BEA2B622AA26E5DDEE017A73B1B311B317E732F23F663223F31B273F653733F14F771711F14E72DBD42BD71B573E51711
-:80438000A3551B7719F1B3917ED21F12A6461F377423F173623F33B322F281A1BEB22F2BB3A3AA221B233E31141E323B312F11E313F3A1A33BAE3F1EAAEE1F3EF6C3E13F18E82AB822AAAA2F2AFAE2A22F26B2A2AA66AEE2AEE21F540C22002002240040028004122880022820041081921190118001188001188001000014000000000027
-:8044000080025FE40B180028C23082684A8112926100884824484200A280A4240013022A012A082A0800220012228220282428240882008880AA48E018F4EEF1C0411B21141B2146B111764291612F1491212B9619B642B981B442A9422F14A9422F14AB422DB1AAC4912E424EA12E4216E12264192E429E212CA4292CBC91C2521B292CAF
-:80448000B19162261B2927241B282F24B881F242821B282F2438812F2428BA4228BA4228BA42A8424AE82AF4F2764091611C94211419D612B1117642A1612F14B811F442A21B492D822AF442911AD412A8412D812B4B142CE514E922E814E82265192D42923CA4292CBC9182B591C4521B2927261B292724282F24A8482F2428F842228298
-:804500002734822F24286824AA8438A229682A1F430F488200000000182280021488000030220000000022140000004008180000800240020000216077C01149434462412230222E4429033A04A1B0213144890D8A022248824598295100A6C1718642C814213696242B1A828082E21482B8418168334886B882B18804898182292888A24E
-:80458000841F8F0B6213F82291C042D6226284318B4868AC081ACCC642A833E2A4C8118F1822D484A242A6027012712224012743008E422018459A844E182321F126428C7821E2842878124123B1228C38C26243866414F0F57CC051435C147016A2D2B0227446B12221B4D872221298242AE544B818E2881461B8C04CDAB288A228243C49
-:804600004184A9423F4851824CE12428F14682828918A2412982634C5661188F352AC49939D2822C2E98822A696280A2843F390C221B212B1A2004234228E2882402A0494E82112CB28144228BA2422840548354803221162102243024284F120149C82818197422628826022C0898122116A824484AA84842F03FCD001002411924B211DB
-:804680003422201241011411249A044828C02113084810C121119094009084110000308147241308822D81402438428E4885042002F09884B022018051228B2133C4281935E82F14A1784A21A1819E4A128D2317881B295B4113818C32A22C2223A518684E28E081B242A95846011979A8C1541F21A4811E428283D3212447E288C4528C3D
-:804700004684A148A86AA81883AC825F770D2800244168424E38602C1925C211A018D608CA328A1B87441C6112148A02211E4119C1412A242811223881C0818918E411143241482A99411ADC222844C2C8448A614822688A9188F04C452418248041D23891211439C728289E414218141582711249012E5120EC22086232208A129814898F
-:80478000A249584C4421312152A08196328425492212318856C42242469848888828422AB867012944A816141B2423D26185F1116C22C7184E288822D04AA65262B289412448083888C423142884081D184A134D8404824924A828838412088E14846D184C72886246899128252441E48192821F2444219216238481112482024904C011C2
-:804800002A1108211613912285B224C14142882B812345C4A11883964C17482D828724522A84121AB22164811439B814C2214F1284232C1402284848290C442B25CC0C4410440C00002C810481A9CC14860110088A42A8128B28424E211183C214211381211224E118021A88A221450823112428044A488221919840841228067026092DE2
-:804880002216B42641AC4226744582C36D2C24382885915816B8A1A41212AF38B128B184C288608AC229C61747821F88B312B46939444B126DD24F11E45582A21A272A411FC29CB81B41193284192666258F480588C38EC3682594D86644E428F6D3F190440013C113A01280E141724885C49282644538421B4228103834AF14838452213A
-:8049000083844404C018832802290840A816404298861E28309189082F646181294148A442219038B0ED079022A502484C123211218E448CA8182304A902A1904222200424148F2482E22469488E221D481632444562984E865028901C455324901246212824041E815880089082484078F30B16541416416221004241854161442E82C5FB
-:80498000410148828D8182291892428289081B81305812121B428301442214136181224E182222464A62A41826C29800235882AC482812A24388AFDF0D20048185511842166882A04389C1180026E1110832811A24B2121A881461842A01428281B048014C3114408C0481410010311A6014100861414901C0428F7D0348809121A0188181
-:804A00004AB244810B190A281A24082601182058212210028111860825A448881A142208C681288802822220829881245218411220022982F8FC76148A31251558228CB4441208101131211D4419D481051068281CE412414119014814821440011004149908114421DC01105212C0414872881A842808800185F1966B8002214AC22400F7
-:804A80001C8281828D24A81888288B522A85712882288211A812832241219A188B5AC81654184309C0941821A4241827842E8846D84158821C0241808181B112048C91422EEE00002041611121100C21504824461841C24100000000C118002A0128004682064A611CC024108182010010522242880021E0670C0040490562100184811852
-:804B000082C049800429240484388898832402221084482184144C84189112181E4882189284224222A8266441448B818252A4F0935E70410A68004A81116884184044880318881C01004A918219E414013042100284142B411194128246044419842823382526B4118862288088020010028FA644B154B384A2112E2A1FB1D364B219E4DD
-:804B8000A1D388D44862814E428D18872C1A7323FAF849AE223E41AE612BC42A34B9AAB42324B24BA4512F4228B17BFC2C21297412D5226441AF64C19CA3C942CAEC64E3A935682AB444DA11ED11F111416E824AF95294444D9483A8E823F4182185F83C6980D43254A9B3344C99E582511B4F15F2141193E813B945CA9597848F11089F37
-:804C000015758A42621A2BA1348932888D21142EA19F18B1424263CCC3BC8DB344E916B49568195FC4E41CF115186127422F891CE2AA65821FAE4468118E4286E8A868288C28816122249D2F407321742241D1426417426AC4141F8AEC14FF8B289E4257811CAC6419091B94AF84A11146E1847911E934E88CE58173CE28F5A8988E181A71
-:804C8000E541E98474919D859449C29347C3A5773999242CF199A3B5E12192AACAB88137362CB236315A1E166B121AE484B1C2FC346F2005120025811402610050421002210012103148245021441502244082428242834281028008240040224842482242240222B0424911F525359FB1F33A294F4DF576B6AF21F22332FF31F1EFBB3F89
-:804D0000B9F93B299FBBF84CD6CFC9FB382BBFB9F93AA91F9DF968A8BFB8FC88988F81F538AA2FBCFC6A3A2FA3E5C3FA92D8AFA3FED3D11FC5F6F6FCAFF7F7BBB41F2CFEA2AAFF43F3BCF6BF2DFEDBE3AFE5F63A7EAF89FF3131CF8FFE3931BFC5F54B41297934F414185E582E2AEFC7F796965AF77838AFA6F67475145B774FDBD633F204
-:804D80002939DFCEF6F676AB759B37DF73F37EB7EFCBFBB93BAFEDF7CDCEDFFDF9FAEA3F2BFB3BB91F9FFB6BA9BFBBFB8B998BFBABB31F9EFEE97B2FA3F1B1BD2F8BFF3A7A3F3FFFFBD92F8DFF9ACA7FF9FD93F54F4EFA898EEFCDFDDDFABFBCFE6B6BAFA2F6886ABF93F3FFED9F12F35A5DBF14FC63D14F47F114185ED8AEAAEFC7F7F640
-:804E0000F42B5756F878FA6F8141F151567F72D6B9F23A2A2F65F57474AF85B771F31D1DDFDFFBD99FBF93F299A9AF85FDD49EAF9FFFD9999FBBFBDB998FAFFB8B89AF89F999D98F1EFFC8C98FA6FE3919EFC3F399DB9F93F7D193AFDDFFBCBE8FC9F9919E2B5F1F187E9DFC9D9FBFE7F5FFCCAFA7F6BEF6AF8FFB79788FCBFE6938BD7BCF
-:804E80008FA4E41CFD7454CF81F178F88E8AAF87B5B2BB52F558188FA6FD9981141F66F6AE26BF31F3293BFFF6F67575AFA5F77B38DFD3F3F8B88FCFFFB9ABEF8DFDDBD9DFDDF9F8FB3F1FFBF9BBBFBFFFFBBBBF9BFB9B999F3BFFE9F99FBEFE6BEB1F93F1BF3D9FBBFF397B3F1FFFFCDCCFEDFFB8FA7F5DED4FF585E7BFEAF3DF9DDFEB50
-:804F0000F9BFCEFFE6F6AEE68FAEF37BFABFCBFE6819BFBCFDC9CBCED14F47F11E98CF87FF869EEFC5FED6D45AF578388FA4FF3955000084218C848144026081400815088480041210010000004100C0818049480226A14120482148A14824822400120020F868546032118042912185B111726C42E816018F1418E14401383AC48190B8C1
-:804F8000122826882802260822812081449454100442444D128C44A261A06129B11124240296584843384212C041BF71012E431F417228F2112487261FC1726AD3C1F66E111D64AF269921AF349945AF643924AF347B24F842B147832DB15F82D418FB244A1CFA274A1E217FA2E41DF2224A9E252FA2E449F2264A1F49F226421F49722E05
-:80500000F39124A7161F49F24A821F48F24A121D24AF249921AB9453F94A9243F24A924782AF247924F842944F82A4944FAAE4230547B21D448F22D441726CE2817228C34CCF3691618F6641D432DB81F64A1643F24A3345F84AB35783A875F842314B128DA17D881E2177828F55F223481E2425F918256D481F8992461B69E5B111724A96
-:80508000F1912CAF24D841B248D9C1F24A961D2C8BB45789AF2439346C98448F24D984E44459868B944B18FBE900820000200100000000800200214200880044104201008004000000830180028008000020E21844824164A215E2127141EE2261149362826E81467141629890A244528E628906F22AA44228800289B38282B426C11224C7
-:80510000804C4438942764C5A124466C614B4140C1914D5817814A394285A4948C6C824852F0346630448E31539828C4888441414F14381824207144714831598C7218A1818E218441548E4526542483041CB4112244ACA5661124A881119B812CF11C82884E283CC2998840F384428186028952248A4174A481F6586EF01244F28D25AD18
-:80518000231F8192891E284D4181D3F29528197462B11A58241D684E158B411FA2AD2C13C2D849F413245B8428418C2CF2C221139242412E1389024368811C945B81DE28C17067B21488E812683153B91A880C2EC8C672B8029A24F5411F00158408414C54227024A1484200114621182802168828828284128412321820B5243118293C9C
-:8052000041490C8896D424781154268AB46C21511811184D48838454224588518490444C225274001741100117411021825218124603644341229228844C22025018450A002D1212200811184C92121B2126A14800292981A8482C388142A08416C82282422200BF2C055C024C8191682AB484E3827111725982D222266145195D815C64CC
-:80528000111E421B52271419E5813628299C611F82E45154C12E416648A2418F44F382546661112E8D82B018E213E44CA1422F28A43436B241E16481F84A938C92E227884D51224B848A94A4DFD2042812121126280380D39254832B615263951437411524C3121B124396516A61822364D6A5815114392646A29447811B48221F42C1B11D
-:80530000132AE28831514A888CA1B42AE121F48154253291628A912A1EC1428A8264428FBD0E45411584817444B134E89211A121222414601C814825B148C2482521420887188076414428D18201C06249611524858411A142284931322B4821C6C281206CA486EA84C2824128468488F875522412B049226146824B41214C82B288D228AB
-:80538000019AC4444C31121C8609260A4991282D12B426A44284857228021938144286924438221283A248424865388A8882877582A460121028A441B0C2F2425B202471444288912815088C5168001A12868138488331211C21249948488C818A7412A429275119285181C03C69E1234468488C224118349C5818248D14218902C18E48A0
-:80540000866822AA41A4122721FF940528004511329130184248112AA48481912264444578682228423181A8441D1840A1241283B426A1282006341248272438279222001D28001862621381C214809848F03B168024C1285D1A497218714C9218478566C4A88326351C56D824FB144A8972A1D428A342B8188F28C22837C22E114E34938E
-:805480007A46F18A1283B11EC824182F4C7216C229639A7827273E4A17C4CE2C4D428C68A289D961B418A8246B424A6B8AE4F21A98384E225F3A012B1A5034A014281C0122842565412D828A4405B015941819948821875419844872481422E182C1214828984E248C818221018488282C61811813486281401848083290444286F1FF1B10
-:80550000001285210224284C224122CA42003C412881612130281061262638463028132A912610341441304522515014269C442841CA21012748D042A88425A481A0E12AA421F03F45400A2552282022840122D04211048818468812C21148101A088CA8813C044501601881884C8412B828482826149212212200202205422C0440E448AC
-:8055800024F2D8CF20280218001D14241141438562152428214582414802004411282541044A621416023CC42A8480024800201411888214012C0A20E22802005CF4F2A9200148108801E0841218584245088744242850148CE243C86843038400202181C1481428001A084888108202622C4222014A18888142410400F068CF240018226B
-:8056000040829216E0220422428125C818481BA4921912923110716344512213E142C421A932214884002A4111D2380686D12294288B811C212531412A1402A1812384048668449FC9088483D1241288010042418C2614B842C21100601223014678110A10381484B14212C0224221484014014E21890218218C046828003608200282461D
-:80568000C232EF9B0926861222D122180C40224124012820121A0840081004211F8432840011251C28210680014184802154241008AC4AC152A041141227C24112D0EE0118828C22048B18569C2247824001212D18484042824218911122268104C724620080D63211018211138122121202A043004588E19801C2803E41888A4401DF27C9
-:8057000007C4C04470112A02839412898549A4124AB2240849E1941804490869C4484C916488188F484118088D81224884800C118698411290891728260E284122442A58C286440C25082D7C24128A62812D78897128F426244961811E64AFB4D422726C62841F12352287A51F82F121818F825288328B3685BE667244FA2851A7485B22CB
-:805780005F23D5144318DCB3B4241CF434411E884D28877857862E49612F26B164755AF92822AB4486746B616C8B154E1417211BA24B45441E694B466F860349F2A81245672286C99A9B443E26CB444F22E141239142A5721A2631222D831E2A3D1367174E5145F9212115FA2A6177243E231E1946311B7E649E8A182F8402281D176E8119
-:8058000011AD2153EC2785B68BF881522D183654112CB11AE22838222EC44F28F1AA284BCC8F78E841E23E0B6C3112AB22837112B212E221D182B423734AB8A4A8561FC1A1414F8CDAA8D144B5D8D64621E148DA897211B644D458C48416FC4558AF48CC282E4A959262CB27244A9C912A12E186E628D42A0283E1D1A2A2522CB158E8486B
-:80588000AED22F42B488F6CA282F44C484284A41F2313A5041504150411001111001119044100441301542304800004004441886048604861C4204444044020024430841248418841884F0EB9B142E2277F46F71F11772BF82F32F2F7FD3F23C3C4B111D21CFB8FA1A1A2D12DD5D8F99F9585ECF47F73C543F11D1CAF1AFDC8752CD4D4FE1
-:8059000042F267654F26F73E3AAF97F7B8B36B574FA1F12B2AEFC1F2EEEBEBEAAE645F54D8CCF82D6FAF8CDCDFF26C48CF86A5355FD1F17A72AFA3F35A58DFD1F95EC88FC3FBF8FCCF837149FE5F566F65F5CCEC8FC97F2A72C647F326367F72F622233F61F72B38FFD3F3362EFFF3F377399F91F2D8AFBFB3F323374FD4F59D9CCFA7F75E
-:805980007878DFE3F5BF3EEFA3F2BACAE7829F92F63F3CFFE6F6E5F7BFB1F53A789FBFFD7F5BFFB2F24E6FCFC4F7CCCBEFAAFAE2644DCD8DA99FA8FA6F4CDFC2F2CDC8CF84F55878CFD7F75C57AF27F76A6C5F55BD56F878BC8FEDB964E265F766EEEFC4F8CEEC9EF52FA7F7232E50752F71F5111A2D22E5FF232B6FC5F62C6E15F392B1CB
-:805A00001F68FA181A3D61DF98FDDCDDAF85F53A32C7A2F5FF9B9BAF9BFD6A4D4FD1F564567F16E626FE1313AF77F7EEE73F4EEC91F12C2FAF8DFF4A6E2F88B624FE21758F28F12B21CFECF849292E648F87F754743F95F55A7EAFA5F75A78EF95F5DACD8F83F34C58CF8BE16CFC4246EFCCFC767C4F42AE12EFC7021F32F33633FFE3E338
-:805A800025D3FEF13A3A7F97F62E6EAFA6F39ABB3F2DFA7A3A6F24F7C8DF3FADFD7A7AEFC7F6395EBFAAF3A9ABFFDAFC6E481FB2F7657EFFE6F674AE1F35F46A6ABFBFFFEBDE2F93F3486AEFCDFF434C8E2A6BA28F53F38C37BBA89F86F4656C1F6EFE6878CFE5F77A7BAF75FC5A72CF84B7D7FDD3C4AF87FFCCCA6F2EF6DAFD7F67F5C6B9
-:805B0000C4CF47F7ACEF6AF793ABA01280412822E822C148E0880484E08804842C2249220112008314932829818239482A11280222A0126022842C6881221A041E4820416288281CC422200428F016D920082302AD923028166422E02281C412E0240189818422A284844A52842870481524742278481112D8220448008481484228E089B5
-:805B8000642284833481A04181A084F042A4E04418F4CF6CC0521F417228F2112483F41124AB141D24AB161D64AB9619B24A3915AB944B42AF1439252F147B34F842B15F82F448B15FA2C4814FA264115FA264194FA2E45DD2A4E449D2A6FC91246DC21F49F22C831FC9F26C811F49724EF18124EB161D24AF149921AB9453F84A9443F2FE
-:805C00004A9443F342B4478329F934484AF9244A7F75096D4B1E64CD4316744CC124A7144CF24A1148AF1449F44AB143D15AB924F44A9541AF547915F8428465F84A954F22C5914FA2EC11F8244A96D1A4641D4D4A1E216DDA1F81D2A6BC1196C41781EB8413794EB281F24E12118F44D941F24AB213F84A1422AF6429F14A844783A9F838
-:805C80003648A9C818AF7506842001000000400428000000000000880000821400001400002200400428840000240025013F230344141E242A9112814724221686D128C542818C7444E241A6421F6482D4419942C446813844288741191432823FA24422412411E2118868111CB35DE25CA252C591416800C8122B4183246348A8A88367E1
-:805D0000C3222F9E4621B7844141712134133B21D981B6441A42E114F1128427198157219889A12499611C2AC829271244118D24624E2520DC48823563DA92221D2C2D224DC24052692CCD228287128A55A6D3CC22642CC42285925860184E84EFE648217551E811C22216C71B51478243B2C4D28644A3428C88FF52244B348E7389B45488
-:805D8000CA5B4E8513B41128C22447818F7468224E2535682C264CF118625E8213479D234CE715E248C44C8DC413A42C222E846F2894A42F24724C6226F088224EB2589CE142FC2BA3302444411321026E1213E12421C112488D134B412545481384111142886AA24605142242884A1222D124152122A882122D83C426B311D23281125207
-:805E0000814A41F848111220C1A61068824C0A4EA3C0412826311143C24426A12180621200112D151658428E485C22010020840441008311644530112212A021CD1210821288021301122D161281826448A9A24842222E11242684711276249A41160AC5F16A121EC88D421F2234498B498266C43112C88E62CF13A84985A48293022F913B
-:805E80002644C834628F28014E2643C214536242946883F1E41257A84728981E824A88984660CA45B248C22849E141341C842CFCF851244C82C32424441219C2182931381D282B423558A14368424521FC84612A9C8592842219267422481468438CC284234474139414114C521846D628B18474841AB4128A59125026472150842B4247B9
-:805F0000A2D082048C24E83B4631417012F319241C66C4211D2466B842881421A4581CE18431321608182F8221148418081E4148004A911843218682C23480B3280136C2218308A01C8852F024983088E044E141F2984420F6FC96D012857262211214288461A28CC228C412850184202438244144121C8A819A24189E4481AE18121328A4
-:805F800098184984664288800918448CC25243518229321488884A22282108122F21FCD7A240C4114E18C42128286011A08426C1A40013028C21028F28E48102443819CC488CC42810167811225128924818AD12702432244284472489581844890A184E2400E48941A4282B214FBD0E24002184408C3244462581052B4885857832482296
-:80600000A1142381840688841828214A016443022524C214198802811091A21880040042291134344A3A244884F0FF562459511223111E4C4828E281D414B2D8A252129348492AC21A2AA8618BC1CB613AB4818232411883F4823446F82A84814328498627D214181A92982D2458CCB81CD4287C1142824824C8A42A84E9C6F12A144C84FC
-:80608000E82274AF0C481A722881128232641247328C0415C8824844139A18481841250421418826F848242A314818124D121A5222124968412AA129C0241031222829C1488184181AB44211C42482889038826FCF0F21122A4194281048A414228486B11868988C41348463C922450886A8182A6C8241816081406848D0851444A4288430
-:80610000248314784812B842081830CA812B14904A444284808811F4FE2CC021118422466341421145222511C842009908422334A123C4241085044A9134223A04848412286041124C83A1282100288C8806C0824B12002022298248E8660700304122901122264881020013288104328289A8840088810082811A886448A21A28012288C7
-:806180002216849284222CA8428331144422A0A1818E14800228241F470D482814816012001024A44210084A98182322188201488818216084004C14E313047042058E424022044A0242002044A28420162214022924E4160EA2422D280040088014814231518C088884811218800A8848003084B6085041424800822928C882AC3284160F
-:80620000049018C0941024212201C60881CDC760A4A041148C64456883C1111301188C81824388A11C4264421810B42814B428E88C41280586240338281A489422CCA1214901182D229AB48222388A200280282A2C32928E14A9434341C44450419490624181522501A8424D22401144388425012141A25901410048142088C82200401AB9
-:806280008808408814022124888825088041085B7300289028802292182E48902118884A41812136282B1812228CE121A44240084442868424A1488984048444484324A4254246220D2781422324A4844674E2E844B34A81218194429E564048C141443048121314312C814462282240184428462834228021811822588222841429021EA8
-:8063000088F08861800A44182880C284A02841B028210186E222042382F891833435634E9F11618287229F14F148384F93D1D113D488E314B229B118B1285941AD92CD58AFA5BA18B818E448ED21BC848C388885A9448B24CF8CBAC4C44DC9F426482E824B19A6AA82AA38647638764F85A21666F668DAA782AF2579CA7866E26DD228E70D
-:806380002CBD42A8351AAA714ABB46F8DE4D8096314CD25CF241452E6CB04BF444427AB461A41142CEC9D6F154181E447695545F6AD6A669852823F224282614D48C931429C4AACB9C8ACA115AA464497188D62294928F28F988148958422B9123E82C3984649E14886D848F41E2A2D128A84C848E489E428E5B2046638213C42843B131F6
-:806400008432389D3D1671A3E8A91CD181B2A8E88CF282A2A22D18CAD218A21E1F44F2C8424D587A7192E488E841B138017AF1C9244B381D841ADA9493348FC99666ACF6A2428EE28AA6211AC648C8C82B42F668824F49E68AF42212AA2853C84F724E011440012110022150129225A441252141234123412141414241021D12442C41C492
-:8064800092442415044440C41244400400004124494412410200F04E27341F347657FF172D5D45DFF4F454763A7169F36657CFE2B541F56943BD9B4D865F58F96463FF58FB4D455F56F544455F71F749E11F1CFF76477FD8FCE56DEFC2F64FEFFFFCFE4C6E6F2CFB76766F6EFE742EFF7FFF7775572C6F5BBAB4FB747E6F6EFF5E546F2E0C
-:80650000F676666F66FCF6F22F2FFAF25E4E466F65FDE6F66F6EFE4A46EFE5F46BEA2F26F928288F89FB9CCF5F4142D313F275773F91F32D259FB6F25D773E7ABF36F74F5FDFF6F54576BF36F72BBFDF64F98D9DCF3EFF8FB74F66FAFAD8EFF4F4D3EB2F84ADDC6F7EFDE3E3FFD6DF8AF44F6FBF3CFFECFCCFCEFFF4F72F66F6744C8FCFC4
-:80658000F7F4367FCAFEB4A76F6BFFFCFEAF6EFDCEFC4FCCE627F664F66FEDFFF2EAAFEDFF4EC66F65FFE6F2EFEEF26E766F72FDFBEA2B67AF8EAFFFCFE1D5434CF342637F71F41F2D55754DFD5F759F35717BF17475EF42F64156BF1FF4D9F923F1D1D3FFC7FEDCF5EF4DF5EC56DFCEFAB4F5AB67FAFF65D44F78FC66E4DFF7F76C76CF86
-:806600004FF7DE1CCEC8CFFDF4F8FC6FC7E6C7F774641F29F5BEADAEB26FEEF7E2E6EF4DFC22E22F27FEE6F6AF47F7E2A22FACFA52526F6DFDE6D26F6EFE485EEFE5F568EA2BB6AF8AFB38B8CFE8FDA2B3343F14F23577EFD1F32C25DFD6F25F758F85F47973FF55F56F711D349F3FF7DEF8BF8DF9999BFF47FFDCBF7FF7FBFED6FFE6FAEF
-:806680007EFD9F9FEF2FFF25C6EFDEFE7C6CDFF5F57C7ECF4EFFEEBC4FAEFEDE4E8F8FFFF6ECFEFA7F7FBBBFFBBCAF6F2FF9BC7EABEECFCCFEC4E8FEE2AEF2AFAFFFFAEAEFADFDDAD66F4FFDE2B2EFEEFE6CFEEFE6FDF8FA2BFF8F8EFF78F8CD5F7F8A020027125014008C04009648A14860894CE28194288A142889225848C02430488866
-:80670000818842880020020098128800008A041AC422965828202418083FF5038AA42114C4A28CA412D018C16426A14114178120412248A2438024044A12044F82042A25818482A12948282E9282468272288264241AB248A821A110221AA242213E48292883C242DF31062E431F41F228131F417268F11124E3D441F24A111D64AF16F977
-:806780009128AF143915AF143934AF3439342F347B34F842914F83C4954FA2C4A14FA264114FA264194FA265594D5A9E244DDA1F4DF224521F49D22CF89124C7241FC9F26E121FC8F24A121D24AB9419B64A5985AF643934AF64B924F442B6478229F924484AF9244AEF94096D4B4CD43CE141744C7111744E81D21AE141F6428596FC4AB4
-:806800003112AF543934AF7439144E9747834E8567835CD9A4C5954FA2CC814FA265484FA265594D5B8F41D2A4FDC12C4FA2F591444DC21FC8F24C121FC9F26C121FC8F24C1219D248F9816CABB45F81F24A9643D368B924E4647B2498986B42A9E982F1EE8400002800000000804208000000220000210000140084000000800400000052
-:8068800000000014E036041724415C23E112D185551637854711328926B448B813D429C4122E42284318B8242161441417221C22C11146B62165224518E48221AC412DB499A9814B14424CE248224108881F8418A8486C78C89448409A348026F2877F9024135A28348D44288B21222A7482C182266311888E141784981334181D628668CE
-:806900008883C2A8438834612B241A9A848F4188A9E170220420D2A43289CF28E115E884318844AB1442124CD8626184142D873E846BA48E4846645183F41F25B0217462B41C022F44D1A164C22796518E11CF24EA12F4E2181B184DA98B14AA24C4944E222E8A8CC12C936B6ACE211993324F2639612E9413B12418F86284484F84E91262
-:80698000F828145F8568C44E342ABD1848B446816C16C3A8146B8486D829A4292F82744222743421F55C7C101441331187121E241C21E12681024083E42411D12231218115C814824240014219044919D88628A512C0122889211822D912480C84819098D04248784336844443D8481B2464829FCE059021258342212182041E481C11F18D
-:806A00004A83400438118F242202E0140310053B425082822934988C6149250110B1286189188041188884881462812D122E4820418484A242AF1943B3218111981823EC82341BE15227422F2CA278405D28BCCE88A903C6E3D3744491889C62EA681786207254B24842F6244249CA4149661141874969F826438D454F85E8F4B284C5C2EB
-:806A80008E28AD119969148A34246C79C4F244821AA81AC244AF69011410C1324885D229514846A21496B2217D4158432486C1A82D11C0618B121C3498148AD21284C22160248F2204523688E152044117C836F42A1123B5186C334E8C83A48285718891421E8843735A7442E44C1186A64226F2F45E24321C5382A186A1252248184D2A9E
-:806B00001B24908281C1662A31288726863245414E2126183C249D424828AD14824974A27C82F48144211901122788434C4DD4482481784AA2181A448114A2288221988A8138444E5260246064308446D448542E444123185181131A414A74219288C08887429F2231288E11463C81251C417482648213A221837282826782A4C483248872
-:806B8000741112C84849D128429818562468684309818E243012A7B650C21A324886A1248B12181220D281532818C722C19868844341A2421225E448012492624B1489345845B28161849D144B2448968288C4214C14B342E84281332C8A844A041E2C1281812B21521E2863F8DBA8801284D384D82109001E6158A04142290446C1888044
-:806C0000B224551482484849220240A821A041C12398421054414B21326489921422C08114D04114024222281684044324F292EE80A42185545243F448348954264F13F464121788AC6584EF1458D2468348B338E842B581B418D2C1A4A4284FA46221CB4243E5C491564F82718864A419964229F11885EB1227C64FA4E2C49A455A5A844F
-:806C80008B9280D8A544447458E422B1343814A3A1831E2443FA726E702642A412842E1390141608E04251411C0160898F44628244D04A32843845C8854001852132882CA4212B9216B424C82422821811241225A32146F1112887248289A141A8431848A824493448F0362800C2206511002281228481122121A722302200C041484722DB
-:806D0000406832A28B2144614A41420E2122301826145242C01880052488164D1804413084825042BF7607213018442483043012875815541290888988880888809884881C88A8414002402A4204101112B8A4246D4C821B12423800802114B4225828930800A2F0385F80230A284249D228341426446A142E120000426460A81008144124
-:806D80004542142894421C420E1A36414A624100101218048286D82A224854226084123880423414E05F0448144C15418491128324048880884206004222200289A414228024E88228099244868488F82142302822221A08105241898182083861424C8881952248CF9C030040512144C024424123424102404A3A21818C04C048261C48BB
-:806E0000841422219446218C1413C144250481304C8430284248E224108211448424341400C6F15E72244228288B2828814A02214A0229C2118B282968182A08233A228C24AC82822E829722F021422033188304804228E24134826D81825968881692189180B54468428289240412488229047FF20A401581818101404281944849080002
-:806E8000E08448045014112400848800001400148602000042820018C0386024809812008440F46CD400829484478CA22140984240C22890284081D83484641826180845194209341911112481754418044C9111502142158CF2412212244419A468490112884301484C21F8BB94C018904441008D1289810145E8441184022684344460C7
-:806F0000382210828481A484840042882D4D8C088CF211422EC92616688222224E828988E8519C88892291821A888882CCA2499182F0A5B6241AF381215FD112E814FE12C4AF21F31226242F3C92214AF32112212C7824F22283A9621AAE2A86D958E4169C218FC2EC32D432F4E2411CB779E1A2F428141E163D348D25244E245F11F1A7B0
-:806F80006A2B221FE854C1C712221F2A5C881B8C421FA9D4F6E14878485C84A3A69D3E544B589E51424F8D012B448614B811D46CD12CE384F424185E685F42245838AB888B8825A8888B444B842F84344828AA08CFCE5C12CD388F84C28225C24257144F2454884BC469F8E6255F28F9228A83F185C6E3B684F841A88FADBF4AB191C973B5
-:807000002F819816FABA549192218E1449C4A2466C426B489FF803A042184FD23311260883D44A5188EFF4F433484741A4CB28AD2982AE474D86399CC25F847288487384724214D588B218B886F21A942D886BC487811B441934328D244CD98881BA6AE249011E282B44A3F388168F448854A24B6BDE961A4E34841A98A44CF8B8D72001F5
-:8070800000488004C081C081400210011181111001118304103188A028418348014712D012414801404801141214160822642608264824024748F0C4541F17F211112E681B483ABB1AF12C36E744DF56FACF893F1A7A3BF388884F48FAACA68F8CF82624CAFC682926F269E94F58FCE4E7CF48F8A5371F92F42161A722AF4EFE9CDD8FA922
-:80710000E6C8E612FE8C854BC8DAFA88A26F6ABED2FEE8EE8FC6FEA9AD5AE2A4BA76F2C1833F14F444963FACDEE6FA6676EF22326A8BBC6CF36C68185AEE2845F266741F92F725295FD3F229664F43B37AF72434EF46F669E13F7EFAA9E33F71F38C8E2B88FF72FAEAAAFFF2F66AE8AF96F2E2422BEECFCAFAA6B6EB6ECF627B27FD62A80A
-:80718000AB9B8F62F3B6BF7FBDB296F37AED9FD6F625626F39FFA8AF2F6AFAFFA52F6EFAEBE1DF5EBEF8FFE2A87F57F2998BBF55F74EC87FADFF72DE6F64F5EE62AB4ACB8A5E72AFC6EF4EFF74D47F7F427214E413F619118F82B345B5F6F35E54CF66F61E565F7AF2C94C3F12F39BA3AF88D8CCF8A4A69F9CBCA6FA8583AFB2F26341BFB0
-:807200009EFE84CDDFFAFF8C8F7F76FE254D9F12763BFB7A6E6F51FD3ADB2E5CAAF7868D6F1EFE33E5AF2AFABFBF2B6F9FFEFEE8EC1F5AFAD1991FB6FA7A2C1F16FB48785F74F15B58ED8EEFE5F56EC26FCCAA8487C26BCF3AB344F5CA9DF0F4248B329F92F23939DF66FF7634EFE7F6363CEF63F7AB23BF9EF629716F29F98E8EAF88F86B
-:80728000AFAFBFBEFE2FEF3F12FA686BBF96F4EBE94FFAFAACAFEFDEFE786A7FD2F4EA68BF93F1A8BE6F53FF76DFEFC7F5FB6C3FD6F667637F73FBA8AD3F7BFBFFE5BFFEFEEBE15F56FC59993F9CF87B7BBFBBBE5EF5CFC9FFA7F5CACEEFC7F74CE26FCDBED4F978584F44FFC4D44F4CF54D4900104448414842582448341648032400000A
-:807300008A2404420021100221008161008008403824A0829E482282148A4422482201820020F89FB5002845A121C3C4282B144CA21284146885018886E8342242658225B124A4844782884F8254181B42422E1A46D58421E122247424213122967C62738114A841244083C41245F8481312444B4818484C91444A59149F9A012E421F412F
-:807380007228F2112487161F41366A1D64EB161F48F26A911B28AF3419F54A9243F24AB343F24AB147822DB14F82C4B54FA2F448A15FA2E411F2264A8F1DF227CA9E254DCA8F49D2A6FC91244F32FC9124CD121F49F24E121FC9324E1F48F24A121FC8B24AB911F24A9353F14A944F82F44A9643F2429447822F44F924484E944FA2F46A5E
-:8074000071E0A2B411F62842174187161F41362A1D44AB168AF26A9186F44AB359F2489622AF347BA4F84A3143D21AFB22482DB14D5A8BB45DC21EA16D4A8F1DD227E859D2B4BC98F226C217C94FB2BC91D42CF581246F24F1912CE3E449F242131FC8F24A941E2CAF343A152D844F82F44A9626F848944782AF44F922482F44F9241A7FBD
-:80748000C4024882000000000000004100000042008908000000000010020000000000000000006F4A0F4347625139E28461418C84746C61414E28848314513438272ECC4963828846188884E2C4C238257842A21418644CE18265646450324962896CC1114227241185E13271184234188F447842C43C2C042249A4488676780614374A7E
-:80750000C01834172241A32231EA6023F0C2142781933C142C7644E81598224F184155182714244238C3D21CCA468C89C484E01295844B2916F1244131CBC28F41629A8B14C28B8442142DC1128E2A824CE161C69889C2154AF236DE141A76C152142F12C15832422B4247B143932422AB4243D586F182182F47D84A734492282F22E85154
-:807580004CF111481C942C2F2491A8A44AC344178823C468C38464648635218F6144A124628A34425B841DEA6658431F88C48A43664116B244D322B22484BDD4F232E950344C8241485341E184628E48836481241348B121048A541A1B4940584824284889C2124E245D881269614149096F3221E82261412E8116D41E69C1A712178181C8
-:80760000121890124B418D82A6684490988444F085C420029021811004A98122828208002D8243A22441211548210210081A022800488258449882000042F0421180181112048021A2842648E482F478E840440112303123342126419442948C84A49489E21144E21881C239E04A112482468496838952412C4414FA1421E03249D11281AE
-:80768000D42148982412228378226281524789F0188443B282544820941841FF2904100119022C92441CB223C1264211001A082C38242912D483021303A042842622628226C142C0481D24585CD23269114811214118228F181402112748F084182682982C4846486C824FC10D4C02421284160110084CC2284E882A2464A21B41B051283B
-:807700008251834C6843288841428E11400451218E18A058200882812242241664228CA9418B214110A414808822D142D546074902444481444C742671181438881A14881194138941E382A142818884142414231344484A0829946441006C11484C2252C11356228CE81402207996A82430281E88184B298AB148B2CB4821810284123879
-:807780004088121211022B481608A01486041D143850848490441280C1857038842174213422842E121289852444941448001881C01818404624C42844EF8145021216885142102204260122182414895224008C81023A841804853248214C021820C812800149082296881128120150828004B08404488448882FE54431341A92182C61B0
-:80780000C1386126DC2CD3187289A25289B152781EB11B022F2421EA84E341229158864C5A2145985825582851188D2436B41464321881C9321C46921856DC1882B28214418261882F41A81612C9CE942D444E148A37E89F330B2110440C44469241000000008D14118D145018A2281144A02561B02431882452C81086D2242119E281A238
-:8078800086114724165418684088C14881008418A61818F498D1200200800210840211100422608200208842082410C221801204244C0200288012028148180000418112244004C048DF6E0C60112992210089923120A41218104842821134241817822200282226C421481342622489220290122441181C4191C82D4200901347241B411B
-:8079000024408814B4182604415EFB800229820222282601222A2101222012422C02830200222042210410362B10041A4422021311618425820400601441818301A0524810F6B6F350888F14A544460140881124544455B424D24822122281428441F322822D228B111AA18B2F6828CA2126217241511128A78285B84A843444182821822F
-:8079800046084D1445B437E266224302602441E42512E285F1B1520000110000121002000000180084282228601220020026042800000021262204250212000000004240F897B740CC4842482222400240644144222800004011139212182A2988082E42414041414C482884044400830144444C828242020081002129F5CEDF4088A24299
-:807A000000450200205142182840024011082421848C818408002240015088282A440100002061444838000018001002CF4A0F224800000000448022011001800221800188200284400140488404000000400428000000002508183FAB05800200001002000000140000002800008002484400000000210000180000400489840442F02FF4
-:807A80004C10B848344442801208201114342C20921100814042422221A189828200100115121838484328642200103211414538242222001028C242602416F4C44B40C818482A440224181100444C82A6220010018012524218186A880A415014264101848C85A4440000001844C4282800802404251812F2B94A80012214002180118173
-:807B00001108214800441008810020428924023800808201308100204101001002240000004148DFEA03280000002200000000400140084C12010000100410020000001082010000200100402804F03A1E1024030024212C0311120042C011144551818D283028F02C2180B2218402604200102401A214001082D12121219148124002400D
-:807B80008864848304C9F49DA800A02211224902211AC1120083311240120114404888022042A842288B2623C14440022002825022E022A1410048120010122441084848F0BD1BA02328441C0223120831C012830120040012101131249028421C02224449024F62022A122441148112140235082C110821800120346848844324F4AFAF39
-:807C0000F0222227212CB11221B112012C512239F812111F11B189E988F848888F18F44848421F9454111C548985F844684E444594244F4222C22480524445E642F222222F21C2122B191AB89229E828592239F812131F11B189ED88D888B888F44848428C04488558884F84F47C84F0262265E222A311121240512229D8B2F1111319FD6D
-:807C8000918887818F18B448244451111C54C195C8488F44544C4B644B222200504245C4346F22D226EA22A1131AB8922848512229D8B2F1111319F9918887818B488B44420048C485C868EF7A0C48420000008024040000000000000000000000000000000000000000000000F093598024040020240400000000000020082088A8888A73
-:807D00002808202828080000000000000000200800008DC88024044A24042004000000008800880088828A08008008200882000000000000000020280800E07C0948A044480000202404000000820082008800002008002008000000000000008088280800F058A28024040000004842000000000000000000000000000000000000000021
-:807D8000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990500480042000048000000888A8808008200000088828008000000000000000000000000EFC10248420000008024040000000000001D
-:807E00000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F2206484200B0
-:807E800000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000079
-:807F000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404000000480000000000000000202837
-:807F8000280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240400000017
-:808000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000008A
-:808080000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000086
-:8081000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F99054842000000802409
-:80818000040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F093598024040000004842000000000000000000000000000000000000000000000090
-:80820000003F990548420000008024040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F09359802404000000484200000000000000000000000004
-:808280000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420084
-:8083000000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F021
-:80838000935980242404000020040000002008200820088A888808202828080000000000000000000000007C08200442420042004A04000000008008202808008088882808820000000000000000A088820000FF380948A0444800200442000000008200820088000020080000000000000000000088888200002F44064842000000802488
-:80840000040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935900008004000042000000888888008288200800A088008820080000000000000097
-:808480000000828888F0F4CF80240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905484200000080040000000000000000827B
-:8085000082820000000000000000000000000000F0236280240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F99054800004200CC
-:8085800000000000000000828220A8888888008200000000000000000000000000E0D30448420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F99054842000000802404000000000000000000000000000000000000008F
-:8086000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F99054842000000802404000000000000000000
-:80868000000000000000000000000000000000F09359008004000000424200008088880820080000008A080000000000000000000000200800BF2B0448420000008024040000000000000000000000000000000000000000000000F093598024040000004800000000000000002028280800000000000000000000000000003F220620042D
-:808700004A2404004242000000000080082028080080082008820000000000000000A0888200008F120A48A044480000004200000020082008800800008200008200000000000000008888820000AF920F48420000008024040000000000000000000000000000000000000000000000F093598024040000004842000000000000000000F0
-:808780000000000000000000000000000000003F990548420000422084040000000000000000828282000082000000000000000000000000FB5B00484880040000420000000000888A08A08800008A0888882008000000000000008008200800AFF20D48420000008024040000000000000000000000000000000000000000000000F09355
-:80880000598024040000004800000000000000002028280800000000000000000000000000003F22064842A0444200424220040000800880088028A888000088008220080000000000000000828200002F7E0548A0444800002004000000200820088008000082000000000000000000008088280800F028CF802404000000484200000065
-:808880000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598004000000800400000020282808002008000082820082000000000000000000002028F8FD9F004A04800400004200000000008888000000A08888002008000000000000000087
-:80890000800800F077642024042004008004000000888A8808820082000000822008820000000000000000000000F0C5EC80048024040000000000000080288808000080280800000000000000000000200800F0487F0080A44442000048420000000000880082200800008888820000000000000000008A280800827E9200200442202460
-:808980002424A4444200000082828282000000008A088A28282808000000000000008088280800B0BE0848420042202424A444424200000000000000000082202828280800000000000000000000008F1B0F42480020040000000000888A88088200820000802888A8888A280800000000000000000000005F9A0E808424044200004842CB
-:808A0000000000008028A8888882820080A88882888A08000000000000000020882808005F990B000048000000420000008282A08888800800008A2808888200000000000000008008888200F0B39E8024040000004800000000000000002028280800000000000000000000000000003F22062004480000000000008008800880088800B3
-:808A80000088820088000000000000000000000080F8D7D8802484A444420048000000000000008088280800008008000000000000000000888A280800F0438220840448000000484200000000A08800008A28088A0800000000000000000000000000001F830F48420000008024040000000000000000000000000000000000000000009B
-:808B00000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905480000000048000000008282820000000000820082820000000000000000000000F0E46500200448000042000000800880088288A08800008A088088280800000000000000000000001F6709484200000080240400000000BA
-:808B800000000000000000000000000000000000000000F09359800400000080242404000020282808000020082008200882000000000000000000000070B90920044242000048420000000000880082820000002008820000000000000000A088820000DFA80848A044480000202404000000820082008800002008000000000000000094
-:808C000000008888820000FF460548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404000000480000000000000000FD
-:808C80002028280800000000000000000000000000003F220642002004004880040000808888082028280888008820A8888288000000000000000000000000CF1D0D48480042000080040000800800202828080000888AA888820000000000000000000082800888FFAA0120044A240400200400000000008888888282000088888882002A
-:808D00000000000000000000A0888200009FE50948A0444820040000000000200820088008000082000000000000000000008088280800F036AC80240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598024040000FB
-:808D80004242480000000000000000202828080000000000000000000000000000CF220920048004000042000000880088208828A88800008A088008820000000000000000000000F063FF80240400000048420000000000000000000000000000000000000000000000003F9905484200000080240400000000000000000000000000000C
-:808E0000000000000000000000F09359004A040000004842000000880000008008000000000000000000000000000000008F47044842000000800400000000000000008282820000000000000000000000000000F02362800420040000480000000000002028080000008200000000000000000000820000F0DCBB8084044200008024048E
-:808E8000000080080000828282000000202808000000000000000020088800889F39094880044842008004000000000000880000002008880000000000000000008882888200F03CE800000000004A04420000008200828880088882002008882008000000000000008028080000BFA10600218421414D18809444142200C0264C1211C80E
-:808F0000224220C54821130229C184718901428154144648018C81846482412A6412824C017440646112A0242094423F5E494261928591418D4546A8244E2C69F212213624F8241885D414529224CF22F1211439B111921230126C6421596118AD118C99E11FC499881B48A72462267112E89874415448CB3869B44232842D142A71211880
-:808F80002462C229B22AC426782391128961A19FFF0B210042114889314424C01188C18420126422DD1228130248AC448282810844384319682400958291884A015E8866022021410511233222472441381A048984F4DF5600264218180A288163D614012001155481229110C152003044345416C116201808904C2382020040142AA28465
-:8090000071823608504830282448230240E8D30B11001448850400224C02100425044C011002180018103282131181844818210481111568C4224448430228004410043800185022EFE30750811440044C840248202202221012822201189012000085C188834421C48140811421440400418002402402241800108281E1A30C4200000006
-:80908000000000000000280084000048000000800200000023040000000012000090D1F01122902112930166048029542819014E8141837248624249598484412681724242622145820418168C810B402A1832114110C82489312299014290182288002628A2243F6D4901511211219B21157823584245484341421CE21498162E14306298
-:809100003B4253C28849588190598C3611D0210248ACC6442D34641742188A7222688443D714568213F44812421E8413F1E812418F48D4847114384218478CF02313701152411C92113568938716AC42C41434113911C48153BC22B1647122A4832D245D288638A11D282934112B43139142111845E886B1423B1224D11223D21292445A2D
-:809180004298248D512B21A991845866981A4D288909428B122AE822B45A01228001185024116088428424842304854448924487144014042483444A042821524034244426228868818144473684C0484621412149A448444781217048043FC90C2502450141151898412B14848B121B4120011AD41A518489212904200880020087454824
-:80920000424811241120110883141156812219448214A2412D26842CA2410000AFAE488162122F223128B9E542E4753214BC2296C2223CC8492F98D1C2EA24C2622CD214C2215F8DD218D4E132E88F34B219F411642E544F2C22729A961827892BC14E84B01432884F22F8144A4F2192D41EC26AB18A6421C88CF18442CCC88846E2845173
-:8092800084D24B1652E6FC291510C22128224D484CC65119F46813892624C28114212F42E484E242C42243A3246E19818CE28422722238614443923A49048B812359244034186445C222C84B85273120018C34C4236C6820B514248486845EF92052224D13A41C11D948D22601248BA11C4562858F11F888121951A28391811449C841591B
-:80930000388299345143A1258A64442D98AF21846414C8113282896A85CB145C113268CE281C74C22211D22C912846D88252828AC1141845FA38CE14182D43847C82632140A41291A44684B1246444358861124B8224A0822C64842C41394A8B61A24CD12862829DC44B34E921EE22146841848A224291857086A84880D8489282608149E7
-:80938000A621828B1489D442F81F1660121A8452824C14C41A1145692214871184228428424A812121485C2841386A68414112284412131138282381845282491191C22846182C119428443018A04889612442224CB232F4D797C044604140382A60823046182248298861288284348346A441141C98C46022602446385146342280449187
-:80940000141948413244D026041AA424818A944848422C471402C08412E0B30D5355218D26157628F4261216782C31191742A711AF12715812D484D5813A1299E511E8A43384CB61914D8144B3F422142744DAB244B14DF1344A89BE68B114D412A512872A4541FE44212F247A6532891E48AB694E888E484A5884A3A8162728CB251A36F4
-:80948000C24CE9C2F12442DF720B262281C1284A41480247228C4484048A44024A28C2260082428CA4A42283E4820127822821165424282A48541216882108304444005084421A044F8104002E4842827B6C141228142961C1388321321860141E22B4002143A1242C0182004828840020A128688B214004D0186242422E481440A14222DD
-:809500008440D81A48E88184B22281B328E4CC228EB2920E1124D02162240020845122442A8828D281088C2892811E284D88411180288182C44420081B488244188642180963289858122128294114149422238108004441EF7D0E50221008446611081C414808822249328424C852801228021880246182C912C884832222A4281184104B
-:8095800085D4481111C1484846384B483822800410721402DF220512429944221321110128181384912189094608B02808429884442B42000052211C24A141271195846211A018113912C2449A02001721004C2812B2E2012242EF150D2128C0614014048C81E412D41209842318C4226242841A84616680440881E0C4028A0141C0242257
-:8096000024D0486112801682D182841148E181840446A448C80058184508A4400247888916584128831202811611C128211042028A820881288B864887441888D34491414140456421144784E942C1428A426182C0145084448C0180618410F4E1C51422E082241121011821404842860200856182212A48018012111401504122262D086B
-:80968000882C61814A220218440010020040282221122802221BFF201201832412A142184651122A61841880018B16002A8114E484118A8468833018A041441A482481159814158485218635181328282484918262A084E024880880F4A1DE24848006488344842202E04882881308008C28045223A2428C21849CA210422861142528EC7F
-:80970000882288044D228081084116C11429810690D2850241901421F0AD4324282A0219742C568199028B319F15F35A6823F498291971133A218D6C21A7A58F82B6229724AE2A902C76B96CA4828394288E5C41412B498E96CA522C45DB88F129255D442A91C69C611DA1A311FA511C8B144933288CB95228E18411C41646F44161B0123F
-:8097800091412F12E2A7F113588B555E5C9F41312226D21161A34D128B898B9887886B188F36A6A81335988B931E54AD6884811E384E618C7436F87422AE248B5D5784124F42F191A82E244F13A2458DA99D84931DEA42E286A7321E18453391A3D684F66C242AB3E2BAB2F6A2644B272AF2FC4B1426532295DA1AA2244F5232242E214E48
-:809800004B60229F189F8225A1224D247286A8422B984AE85CB44C38616E428A0E25B814E144D518F859D82EAC8DA54B461BC12E159B9137644D1A7E126F15E672B351D427FD91814E4A4A944A2DCDECF452929E428AD424948887858AF41442C758000000218461840040480234400114704801144562144552182C414122440226220415
-:80988000000084E0811484448104001A0400122001AF4644A11133D4A9F2327A6F61F515174B111732AF83F243414D611DC32F42F881938BB11F29F1C9288E881F18187199F848481F1AF5494A3782CF44F4672D3F35F9372F5E7A3F71D8227486E623F732767F53F6413733F23162B7D13F94F843815F5DFC6525DFD3BBDDFB297917F4A3
-:80990000BF5DB899FDC8C88B44CF63ABB72EB26F62BE3422B764F64642342F21F323618D2A3F137357FF153F1AF1293B2B743F14F61D3FBF32FC12B49F98B918F99936DFC8F2A9AB3F3EFA29CABF8BFE4FFD1FDEF9673E7D4E3F1EF563416F6DF522328D285FDD7C84FF9EFECFC3FFB1FD4F6FFE277D9FF2F23F6FB7D1EFD6FA57D7FFFC9D
-:80998000F82727FFFFFFDFD7BD5B3FD7F6D9851F39FEF6B6EFC6F47436FAE226F386ACEF87F634244B73DEF8141B123F22D4A9F21313AFC5F55E548FE1F267449F83F273733D779FA1F789BA8E82A9F8929BAFAFFBABA98DA82E19EE387F97B4A4F54C5D47E6BF16EEA7F3787A4D4C7F91F748CC8FB365CEAF85E5CCFCA1611F38FF2FA9A2
-:809A00005F12F3496D1FB9F8C3811F7DFDDB99DFFFFED3F52E72AF24F3D7C5DF11F58CEEAF85F736E66F47AA364FC3F73EAC7AFB64725F1745F313323F32D2A8F23331EFC5F57F75DFF1F37F7C9F85F75B7BBD3D9F2BFF8F9A9F99591BEFFBFBFEFEAFAEDEBBEAB3F9F2F84FC7FFE1D78FB6F662688F87FC7D5FDFF7A755FF96F6F4D6EF46
-:809A8000EBE14BFF3EF41F7EFEF272BF1BFB39A7FF77F35B6DDFFFFEDFFD8FFFFF9B99DFFFFFFBDD8FA2B55EF7DDDDDF93F5BCFEAB57EF6777F6F662326FCFFF7CEC4F47FB6472AFF80B223022844148228C242261221A041608922882811A84228102890228188141801128024B12D01408002E811A24A24122124048E181446481802468
-:809B00000400577D20025081A30283088D128C44C1488884AD8241812E4800A148858404484220252244A82149248884921813312C482931814941F842818423A4482921B9422219229918824CD134F46E9DD022F4112485F21124A3F41124A3D4C1B24AD1C1B64A9961AB9455B84A3924AF1439342F1479A4F84A914F8AC4914FA2E41498
-:809B8000F8244A56F1244A87192E5AD6C5CA9E244FA2FDD1242E421F4952281F49324C1FC9324A1F49B24ED1C1B64A9961AF249945AB944783AB944B4A2B94478329F93448984FA2F4A62FD0A2F5114485F11124AB141F41F246111D2C2D111D2CAD941D242F145B858F143B248F3439344E81478A8F14B1A6C4112E5A4E952ECA8F5568ED
-:809C000022CE252E1A56D5B4EC41F224DA1F8DE222F491448B421F4912BC917646F29124639461AF44C964AF249B654E944783AF44A8422F646B833DA46F8394A22E5ADFBD0F0080010040021444902800000000210080080028400500000010084200000000000000F0DE9E0012253A2516881149031D58421964811D4846D8824868429E
-:809C80001E842141904448C41462628D944862418458AA51410044C126CC6826BD12C4C828229C31989C052E88C3B1587214A88143E44492849F9D4BE124621247128144A7221632388B212742133138422088E3414412E8C13238833B118D23C6B244420214AD2418A95542884458128F1211C1521C110126D824F1C81286A848518264B4
-:809D000018222162A9846119421F5F4D81B6637124CA2943C122113B1223F248345B1476316899B448B8125A484722967C2AD42482FB44115E28C84D61482B8286EC44C262135486CAF1A814592454181185F41A246698291AB41CF4562A8B28F618A849248B382A218777DA62454B824B81FF4E0A0025415428169818848D1211408801F0
-:809D800040A8140012894108155248212848165182124D18008021A112444A114141342A828840319585110445185A84004A81F44187109421141301501613113281AB821AC2911242124E244B41257284C82180110448E082444492282185844CD4221921C22461161808E1C0128088948845684441448281A210F4F339142F36413424A0
-:809E000069D2B282A11AD024E68132114A98489D84E711211568881D682256D448E2C4227C8742786244E481F6229898CB3818A9A39266B42441348A899A252F48B661E11368512B2C5622F5128E4F3104325E8A2AF42E128A62444E848AF2561F6053264434222D2129B115321129D6A218A9861628F84A141817848B8530284B25E0C614
-:809E800041161442C424468688B2286941297824C2921604478845B821F12244148E143C818121D4829888414C1198244B92806A444CD84F4E314231267111140823084413A392121B844D1934302445E2B2948414260CC88661A44A924883B328F112882514E8812699641C62422D22A28594882A952B44AA744282E94174531628E644F8
-:809F00009942A1A93A4482222F4B0F2C044F842138222C5148114418399122828B1A47218289293458D014628B248392421E885068C22AC41847811335982931484CD5481B0221E04284E84164844344DA8402268881F48618163218884127859F2A06121C21342A4508D02272180241E08241041E240014288998444F2102842F4188256A
-:809F800022D2284114232226F488154814907A8CA14A25121828128D87E1A4092312080012C863F1B43D00412008305185048384324142241484D024413448181088988442914A515860124200902225028BA1902544841E63A800200442C1A60443322481C022EE45144A51411614DA4AC2129C55C1AD142F2134312D21C24D1217614B97
-:80A00000181E88905B8B2486EDC3343489586247841236BC8AD628D741F24814528CEC2174B4D12471A4918829C515499C668E138BA48384C45A488B944622C3C4922E1636949849AC24EF7909241281280045820284C0448961886082B0144404388281228B847048814405831182E222012C048D121A7228C2282284A3664122150847DD
-:80A08000812426584826584A100850843EBD40B384818204C0222C0200008CA83828134198284D18860440081810048018D88258284860489D242436C8A28341141C2228588743110820015084A0122722BF480D2815020089848424C46268188C48C2422C2822C141C88C04D8A0C21C8CE582E18144B42564480086010094426044190277
-:80A10000422B14146018432B34888243F84438A0188624F8A5EF80E488021322844554141859C4244CCA41871422209E488828C0242631B210180840033014288C416482822D140010382440A81898422124244911082B8122A048772E2444C02444855461001932121816911269429554845B1212114F12D4819144414D4322294C8264E3
-:80A18000828B414210C444842543056044828642810285042120140412428352842144BF1D4A4102248C028C2282028424400800252818A818201418088082044636A400002288D048D54201121218801182341466741202200541902414CFE60E2249F41248D0180211444781118024840111888003848B822081013018261808828E54FA
-:80A20000006042AC0226C22C904224488C2404840000C01C218820F13649C04814103142232114023043282128204A02230400212C244A024D2215844131228488608C25012024D841220216141141019088848169B282828882C824CFF94282A1294064225C5816144F12544224A0182C0460212A0843A283419698A490223210B41202F1
-:80A2800021224C68624481204284D182148A864102822CC41260416912082200F06C5B40041A14D8430840028B21125C1C8482294104448421926912911483C488883211848346C14827188C62214846512885017C4DC121218D44A18D21814D181088220845984242676EC024EAF2223417128F52F28119284CF23B252D153B361E91ABEF
-:80A30000818D5A19E121B12AD298932A9E94CB828DDCD3CA6E1F4ED82857821EBAC3518D46C3E82DC48CB281C14421913D446B3799F21A1C812D28118781865241BF15F5F63465728CB218F1AA14EF63E389024EA14E221FA2467146E16911984C6B4867246F4254344B14DB4716B2A3A654422F21A688AC2CEF4BD588F2C37416E1C4BE49
-:80A3800021994433A46726E456B722F1A984237498586C4E494B2A1BA2AE244B1489644543ECFEFF45112766372CAB948F1C682885BA48D58211E484E2841C723868486B8AEA46E222551F16C22E17A48F417641B323C442ACC2444672817C82B5A4E856F291142D8417844F1244B8A4E221319C2CE2829818C954821E676D78C39A348A33
-:80A40000DC465A22C7F965FB182BE46FAAD821361726A671581D492781450C1E884427CA4321F82C844F483A341E442F8A4401148421822A01266281000030941044011412460146114201460142002A21A4824200228001A04141004880C4841AC4A2190400006FEB4263751FB5F1151D81C7C4EFFCF652731F77F3222DBF13F367532F78
-:80A4800026F67B1FA5B252FD51758FE1F93FB33FF7F8221C1772DF95F1F53DAF9158759F8E7321F87492B5BB63F331166B1545F4D856AF41F53131AEABBF13B314F13131EEE49FD6F7A9B557319AF98791C2A7AAAFECF51BD1AF48B9D2ACD62F21FD3683AF23B284A15A6F3BFCE2D2144F75F2F17B57D1D57649FC4E4D2F27F5753735FA93
-:80A500003B736F65D533F25BBDDFF5F557F57EE49FF2FAACBA2FEEF9238D9D83EFC3F8AC88AF93FBE1C7BF827E217824FA1F1BFF23F3F75F7F9F55448FFBF3929C1F53F383E7BF7BFB165E5F97F6E5C71F9CFCEDFD5F13F2B5F37FFDB9DAF9983E6FCDF51DB16CB15AB454FD3A93FF43FB38BE6F4AEB4AFFB2C63F714FF345776B737FD162
-:80A58000D34CF2686CEF75FF76731F74F6442DDF15F363572F27F65B3BFFF9F917953F3AF27EDAEFACFDC2CE7F5BF3B4ECEF86FE74FCDFE2F7EACB8DCB2F81F54D57AD4A1F86F5AB87EF92FA848C8FA4F425695F5EFEA5E3BF1BFB1D311F77E76FFE3979BF3AFF97E63AF75B15CE88AF2CF2D753BF95FD4A1C23F1B2142F6FF5E28EAF829A
-:80A60000B216B194F1E4D2DF7142F345378B7BD7F1ED2EFFE6FA7E7E6F37F76747F7C4DFF5F773152F27F24F899FB9F963C12F2FFE2FABDFBAFBE2DEEFCBF3D9D9DFD7FC6CCEDFE6F7EACBAFB2F67258DFF6F77E6EDFA7F6EFC7EF96FCE4E49FEEFEE5E55F5EFE87A3BF7BFB7F3F1F77F6F1D75FFDFDBFBF7F5FFB7577BFB5F14B8AEF246F
-:80A68000F4D7559FD7FDD4D6EFE1F1BE1EEFEFF5FEFE6B994BB34F2BFBE4C74FCD0741702201458144816412482041023091B08184B28194281309134814110889120288908410041C4808844382641282C0481440440800C0249242F04E5D108292144441482F226141141604688B84124A382150814A5184422658482A14A84242595190
-:80A70000484B52D084A1242E18822E528041941A4CF62A828266A22124D0282861241038148B24908841602ABFAB073CF411248D131F417248F2112CAF26F11124AF14F11124AB941B28AF243995AF443925AF5439252F547925D812F925488D915FA2C4814FA264114FA264194FA264594D4A9E242D5A1F49E222FC9124E5F2912CAB16B3
-:80A780001F49B26AF8812CAF24D1C1B24A9921AF243985AF2439A4AB9443FA4294478329F92448984FA2F47B3AC0421E6489F5112C2356418F24C16487141E2C8F44E948B24833848F4432258F5439254E9757821C7927C89157821CF825C81A782528792568484569188486EC12F88164456249AF16E149F262811F49D22A81D258B91110
-:80A80000D22A3A84AD11B28B14828D144382D88684F924586FC90684824904004001844004000000000000A0220000000010820400000000000044000040018FB904182713122A914C1933211E29C4105818217113312424283266D8848172A84404221D4891833822C42AE1459218824C0481837822260822211E8411229321014A2161A3
-:80A880006848A912924420F448E5244143D841122251A6CC58223228522A0885C288428382984864884C0162C16394121A3216838471C218A224272218984941658116D224B11C1C441208908981ACC22CA712114149011E214D22AF184E02274816817548D41CD22FE2B251482247852E832656E10028A88CC66ECD8249C32C4B2581CE34
-:80A9000024A931382568861213DD42E485B28862444A1144116C28128744C094C5817238B18801622D144728107E120626E123F4F4FA90141B214722282C2181082A014008D018B9245428800118800844214611614921857422A821249012828961C82F222151249A12062100118116D8286292462102498411F472A4002008880080083E
-:80A980000000000000000000000000000000000000000000110010011400775E141912A211451CA82214422942BA34D11144449A82C1181B483E8124A54488329249C8561487814AC2433143C81487A11439A82450442A91281C28447414D812813421244958C23A9162C08287488C8832D4EF390680B2174154118B282246D86632192E2E
-:80AA0000114840B242C8484B11822A58225C41A821AB88345D442A7218A81448B08361C1C14A9482AC12D14C2181E25228D42642A8121F11048489086B114826D422918412288E88BD2F002008200880080000000000000000000000000000000000000000110010011400FFF40245912145A221180048462141012D128464488334811808
-:80AA800026088012249441284114841624624118284722501C2042282678441381110141AD821048082242418184AFBD4C622444A71285F422458C7124D92AE242D192B42264118924085C117438D2C1F217421D2C4F84411C912F25D881E1A1F4442A2E5491478488672230412E133223D22B685216EC861128C121218B412F8498448D6D
-:80AB0000842E442B814F88B342219368434664C8106242157434C21183612283F426113D5228122991825052813C8351279458102596413816DA21A621CD11484C911650411C721883C22328128C4A09322112493C828C58A41AE888B21286C4488912B845064D4131A722814B245085224881461191488444584694884D298CC724C14715
-:80AB800082503E84859144C48D447028848892222C267122443288D18F44226564131111D12844784814A6248149012A31244614748B051843419C6128184C41342C813B12841748222C655EA7182E1829021196465861244F92D1855324A0432AE44482D21CBA1944A2422959222648244D82E222442214F428464B412800525082E4439C
-:80AC0000B474F8A297C044281334123375220616612500624C12442801484A41184C5214848C82816481C144188061117012882422211408A9A114128CC813C1234A3882299844208928612218EF690421204108818121214440427813180448004B142184388800009641D894084918624213028111163492441417882180020049D1844E
-:80AC8000210287420012D0F60429C53481211F26B12C117A12F314482131897288524845E249968A42233344448F41D818C2882658C25F837414988C8D24432EF4842247881F64135122ACCA11478569897C11DA81E72166282E5281486935A4AD844926B48C938287414B418AF4B92D10044D111F81120249412442AC12482531118B1412
-:80AD0000114661834216581AC0145502130224168175183124122A012A8182012342D824012C088111244788852281011810082863F222614051721321C1421C018995164E862AD418031C041615C8424A0A8E2186014018819236941825842B614B384AC1341188AC028584498682888288518484784142A5E24462424CC8424FB40F44D5
-:80AD80000042444219120211812954121698228246E142083A28041548786261414341281C029026C0C2822126420212122501114C8101812882404204804118840B59071741104884659420A281C01885E4238482688532232452188A1101814902228C2A087082324488005C825224244B212149118199122524194438488225A44AD88A
-:80AE000038841FB40FA0218D428D2480129C244E288890884E811ACA881C282148614812882422982C027012043220082444C28A66219694E182A0182424488128212A948226014A12088428BFEE0882471424431101241C518116C1323084241C219194281100408882A81212181218969214601212188C18E4140813088D81222A081029
-:80AE8000921821128C443688261A044146FDD687002CB2288492284E2128C0444A22E81411024A48880221418544842AE1B25184842824430228C0166084450241912574390444310082284B8284442368468280A448D0AE4802009054811424103A424C229461800471808109298488014884882084781221348810C141008C01400128C2
-:80AF000022418A42C282AA0100828180F8C2BB34321226440A128C84024414888110512C2E4211E022048981C28D0000294262424422302126343292224B182008B22CB12129181882C124416E888382088268282E2B60A4801421516818411E2381814418A8846280215912552892139012249C48159584004D81214484D026A414203278
-:80AF8000224C16C1C424442A91E4A4121002434498242921F84412142D24DE326D184B71ED425D313B628F41B712F12F2A9AC6318BC84AE588549A3B214F2B64182F4B73C1782DE1AA22BAA8F8111885518C1D84C38224F284845F69A29A4B862AD854F3861117839BA8CFE298174564281E932A7236D84874847454F884466E2826984C5F
-:80B0000083A2248F53F448A88F4E085F357423F53125B3E284336887413782DF34E25CD582F173CA7F85D189B86AB8C1ABD22D911E4241474190C91EA23714C11E2827434B311EA2B247292F2192C25F657612F491343B8816D222C3173896F521B37F437D2364248E926D882BA2ABA28B278DC2AF24FAE2826968C2CEB84762BF794CA2B1
-:80B08000124185427C11E4C1E4B47144E3C284F86883834861791F11F3344447AC9F44B223BB41FC2AB19E881E11D5C92A2E266F42D52173EAF382146DB64CAB122A11EA28D52E64221F46FE8C846337938F222EC9218AB29219E829F1181A8E162D9867484F48C42CCE6C4BD9418AF4DEC9200400400241122200001224483011244828D8
-:80B100000019041904488148A0520040012A016A01660146014220440800802201006E91141F65F4112337116F41B768B22BF34D4CDFE4B556F579F19F85F54B6817667F51F1453F7F75F273913F37F467545F34F51B5A8D784F45FD12827FC4F868381F42F15F55C7D58FA7B312B151A4474F69F19F153AF731335D333F12F358481F7D25
-:80B18000F7D567EFA7F117415F48BE56BF92FBB2D44DD449B24CFC48188FCEF8E882EFA7F3BED2CFCBFDB494AD4E9F1649E365D4E6575BAF41F27D697F47F75D6EDFE1F74753BF11F7CFCE3F1BFBC8F6FFD1F5D5AD5F47FB7DFC9F95FF94D45F13FF9FFEAB584F49F1627AFFFEFAEEAC1FC7F77FFDCFDFFBD89E6F6FFDD3714F4F7D94F730
-:80B2000071BF4F26FFB6F67F3AF9B5B39F93713EFE7F7FCFEFF395555F6AFEC2F5DABF98DF64FD5CDECF62FA78DE6F88F2848AEF83F138BAAFCFF1AC94EFA5FD4387141F66E631F43B2BE53C446F57F27E6C1FB7F65A581F17FFF19C2FA4F2CAAA3F38F99B93FF7FF2FBF9FFFFF5B7565F3BF5FB19BF96F37DDD8FB2D3C7F428A91F56F70F
-:80B280003F197FFBFC363A6BD54F71F8A2B46F67F7977D3E763F79F7A7333F59FB9C985F79FB6D3FFFABFFB7915F44F21314FE522F29FB468669F84252AF82FBAE8EEFAEFC2E28EBE8EFCBFDD4DC8FE2FFA7A4342F67F73F37AFE3F23234DF97F77F6DFFE5F47D7FEFE7F61B7BBFEEF873B3FF35FD1B8BBF87F95DBEFFC7FD7FEF7F7EF92E
-:80B3000075B3FFDDFBE9B1CFFBFBE8CBFFDAFC2CAD1F53F3FF7F7FF9F5B23E6F6BF9D675BEB45F66F791F74F2AFF97B67F32F3A5179F9BF2EEFEFFFDFBBDDF5F53F175363F14B7A2BB9AF94696EFE5FD3CBEEFC7FD6E6AEF86F44C6AEFC2F67AFC8FA9FB6CFE8F6A0C14D01241382250341E4845A148608824960886C8224800200882819C
-:80B38000210028490888B024094B8290868049C882C08212229224922486C822822CA248204804CBC5A05A442216246EC12244A1284E131B2142704211C11417884A3384892311081C129428292161A2B024012412481A0219322A16742A534122864401A14034144A42584841284B424245DB290A4D431F41522E1F4132481F41724EF212
-:80B400001124AB161F41F64A9119B24A3915AB9453F34A955B432F147924D85AF934481CF9254A8D816FA264516FA27598E1A265592FA2E549D2A4F591242D521F49F228121F49F26E131FC9F26E131F48F24E131D24AF149921AB9455F84A944782AB9443B2427924D842FB24484CF9A44A3D6250B41F41D62EE4417248F1112487241D54
-:80B48000288B141D648F549921ABB411ABB413D218A9422F5469828D9125C8B11F8295885FA2CC856F827498A14296D592E449D284F4912C2D4B1F4816E849523E9E2CE53391ED1228AD951F4192BA55D8425B84AB9443B24269832D842F83D442F9845AAED640180400000010082100180000000040840800000022004800004800110067
-:80B50000000088000000AF4D06808141044D31004A31298E410024812B298E19542671921A7824B81142144616684712181A021A0222441CD13A01363A415012253111A972410A4427494782E361A21883E188B44401A4ABC1F044328651843D182608DD429F41922C4334181632D8A18A344548833B184D618A83614819A22889C25594E0
-:80B58000252BE644C8344AD828E24124860A2E948AC48A1CB32C58484C12312282114842284E14CB244A72226482871166F4EE1E144E221B14701114C8114826A5344E28578DF0E218842F887472E11845D581D2626C2822B6E14132A64F28C258CC61812AE4425941E88CF24A344B241BA42D1A1AA8491DC829F22388A554414D282E491D
-:80B600002B8241693568E9B128F4164866F8824A838521F79AAB9014D02C4128C224C56381C115041224004318688B18178389731448140184541F22449112422A21010012144C7228021C4144A121250310811884321428124C32248145F88A7D6022114F2281921C1518082A413842B042210100844CB11444018122893222814842001D
-:80B680002A05184A3226442302439461221B4100AB128481802893221038140080F47DF42061412D888587C2164C731B54A345C1289C466A5483313A4363461952234B61C3B5210471812F4492177B126F24B1445A26E63424215813F219842CD2817A14D2C15D8659A69446A252C8D658C243C4945626D328F424181F44337C8C923BA0E6
-:80B70000122D14A8A5D48453813676188112281458221C911829A121664C31444CC2584E21407922322429F52253422A2463422270321435152CB2C872217422C81566E124282622BC183C82D042886582492412C17483F479860034CC912121472181412D1971A392618B144C048942044F2261112D51448426C2248446584141166668A0
-:80B780006CA4486C2126C422890A54581DD68C4424D12861858110EC4582139412897112EC461128F22B2D2442C1907848460467133C6221874885028B164C75122891344B824E1411304C2B28681941861421B41852241AC2133028293414457854CA142954184A322486D13C1CB1A894442216C2328890A82480F41DD110352883924422
-:80B8000041A51108274140A5418C2142C821411440F8AA1423848214D8822368822D8828252461888E412C6294682A388221284B2849563C901A41896412244C51848C2422048764268CB23507182C410584268202848922230200864228941222A0211851106486A04327C182837444020044311B12228CC81812824A011A221914084AC5
-:80B8800092844C3128481A82055F250D1584C124CC6384BD668CC2371D281E28B9E88463818B1449713893141D76414992814AE341B645628235B424C442871CA3F52A148D548F449292243C66422C98916D22CB1A4E945F84B384E241629176711261C445CA246C658C2918A842281E6428975C90524C521A100424D024012A0121704841
-:80B90000221808B81E48AD3410282864828127821A32248224922C8402F02611CCB24801A3028734482968888B84132824912843C3342A94884F8114C8419F2F0A122348A224004184902249016C018128002146621100421180210280820242258C144C2422641141008812A0844AA8214C0244B244C2C018128F440A21168841942B12B1
-:80B9800039044681394129784881C851128488858228849924AC4838282C9244248E18F0884430A248860482E0280186C124C60622282C11440441291114820190C43DB1243084811240142C921A4481A8250240512241424D211054188E24401658821AB422FC42122C684720C186322D82161491281220C824881220918442482A944467
-:80BA00008126E4824462189FEE022E4922128112290225042C48C1444149181284651212002229418191411C420212440082228483041784824410C8148C0189088428181240A18224008CF2666AC0141E42CC1284A2162884128128221A182891282A61881A823A341908D0A344148422428811241982282218448624A82842C044280085
-:80BA80004212A820A8C28024C448422FF7090048221115668119521235341211271259421114382450421044B44483C12A50A4E02264428D22501446C24280226241414220021844800220C31821478221C449029FCA014263424222081384848202250400120020043828A0121200101408143249C21880012812903280082128885028E6
-:80BB00002400218011028FD60241822160254222414481A81048821A0915B8435821A644C19925288C1184A44A60A4484846068012F28148318CA2128C081E2844A6A81C8C014D982A6C8C20A882324E1189F235546082C065142028018B4200449068812CE412944222408114022C8384081241826052121236C8142A35124902C0144A9B
-:80BB80002184C8149024C800433211110021416736F024564B1B6782E5D613F9238276D12F52165F42E211D923C8841D481E88875187942D888BC64D611DA12ABC14FB224419DC2212F44A4618EF81E1E61252223B622FABD124F29E1C3AF2C2318E621635D44F493294A6242988B49821F848242F66F166A42777193282CB34942AF8E303
-:80BC0000B8242B252FC8E221A12226EA44D68842B451F49A82ACA42E9F12748416B125C652DF688472A336448E21D4CFBDF22829569D1247825A861CD68CE843C2964E445A89D224E961E45799349823C2F28996348BB2BA28F474248AA92192F8AF8AB824F83248C7168D581FFF071146D25892515AB214D14765868FA243F82324F01696
-:80BC80001AA9D81AC71A2B232E212F31A1842F43F1151493827842B22CF5212E28272AEE268B59EE664B5C439D24AE442E422748D78271878A2E218F8461444F85A98227814E124DCC984783C88D584358445A061E524F4C72A10211186012702401262161168266214925C92611441789289228828D248228C024888982092A0888A082FA
-:80BD0000B02808AB82B02A08A1302A100AA140028D22304820F4B327343F11F7653887F12F72B142F754442F84E444F651784BA24E725A7D69F81CDC1D6A7F61F47242FF65FD434A1F917963B324BF74F416A43F12C43C7E526F41F9281A86F248484FE9F76434CE613AF294424FC4E189F33C7C87C82F34F6962FEFE6F6CE1C2F22F3863C
-:80BD8000BAAFA3F13A982F6CF886AEEF84FC4CC4CFC255549F86DC44FC2C3C4F427634FA64AD242F43F775748FB3F33E3E2B774F67F3665D8F44F6785A6B222E373E322FA6F21E5C2D4AEF62B67AF75E562FA2F2363D7F16F236547AF62F373FB2F6A5AF5F37F73CBE8F86A7468FE6F6777F4E762F36F632284F65F6247487225F637328EC
-:80BE0000FC5A7FEF56F614248FC7F3AA7AEF4BABAB8FC5F75A9EEF6DBC96FA54EE4F4EF4B532CFC6F6C446EFC6F678794F8CFF1F5D242F27B737F7183D3F52F347767F57F61B2A3F75F73338FF34FE83B41F12FAC1A85DCFFFCCFC656777F6FF66FEEFC59F12FEE3816BF24F88FA64FCFF5AFA69EFBFB2F26666EFEBFDB87ACEC84FFEE4AB
-:80BE80006FFEF2666FEEFFB2766F69FDA2262F49FBDA669FD97BB3F5E4F4CF6EF3E8B82F4AAB338F21FB581C6F49F964F6EF47FD6EFEEFCDFD2A8AEDECEFC6D744E486F528D8243F77F725748F93F237377F57F77527FFD7F65977BF93F3EFC33F1AFBE1E33FBCFA8FCDFFDCFC7C77FFD7F3EEE6FF5EFCEEE57F1EFA94F4AEABDFFCFEEFAD
-:80BF0000CFDFF47E2DFBEC6ECFEAFAFADA6F6EFEE6EFFED67F6FFFA6A44F4DFEB6B62F2AFAAF8C2FEFFE91B53F7EFEBE8C4FEFAA7E2F69FBBA88DEDA4F44F8D6C4CFEAFB76DE6F66FEDEDEEFF2FACEECEFC7F778794F84F6EC6100B0220126024116286281221224124088A2412081229128A02490288012066B12100418302290163024F3
-:80BF800012438204122001824C22088242E04422F8A716B02404C3321141686E111169311123129112166874C03726E86431341440456254154A245248588B2148B0260569A42149112122012024290288488812284B43A141AB243283A442EF970E4D521F41F22C121F41B26CF1112CE3F6112CEB161F41B66AF91168AB945F81F44A967D
-:80C0000043F24AB743F3429757832DB54F82D458FB254A5CFA264A1E256FA2F498252E4A9E252E5A9E24ACF491242F22F4912487221F497268F19124A3F68124AB141F41B26AB911B24A9945AB9443B24A3934AB944783AF44FB24488B944FA2F43F3BD0A284F62A4219326A1FC132421518BA81F42A141F8896225F88F44A2243F248B36E
-:80C080004B482734178A4AF282482F14F18552142D885E816FA2E411C2C254BC6C41ACFC112C2DC21F41D428E841F448811E648F14D84194981F41F248941F4192A8118F44BB24B44839342B844F81F442946F82A49458DF630B82824800000000000000000000008008001002000000420000000000002002002501A9021812C159D148AE
-:80C1000091584C41C81B92A132524341C42C2D2513E145D848322289E14AC4482F6214846244212E428D552EC21A9214234292248D821278228C94B12E8419E388C242841840E884893558448DB449B74819D8BA01288A028902439A484B12282250288918384A60844316921289B4240428E022D4842443166422124442412B6982442608
-:80C180004DE44811041395884A2182F541841B94625C524843B221098414225F7F012AA11C844F9344AC2C87418CC11AB86138A39F14678443B22FE444B294D4A663A436A42C8353264B2C6D68684592642FC2B443B12481712AB492E44648F2182443E641CA4419BA849491CB4B2C227384A11426F8241143E581B23468E85654181AF22A
-:80C200008BD20028418061C1424C6212104808844008131102288C4484A424004D120016E1220849042602C918810181122E118C024883A4411C88B448486844113826A89484BFE50580020011A111100184000089016082148444404102844008849200800228811301A0142800002304002092124150A46F6D0D5043814301186042AB82
-:80C2800041452221224183C42648220080048428481331448260498022842184413A8442A2482C48088B85848C151498241822524160844C017FD10530224004164228B24251611828181502901A2890281183046012466211890481001A0A00288482841381041E4822CE1860854522240228581082644145F292A2001514880114501426
-:80C3000084008100484C820400004181004024088E148120842184016382A482602800100810482401902412C410F82A65100234418112241008824022088341048218480084944002008400C800808188218108008E21124819014800A041814822417D448022220314838204C01180446881103228872241C9742128CC28442C641400A4
-:80C3800012204204C0122042148602901881428C0481604483216122228584836184E0530300441004281812420000601812120020810480C22841411220618232C0211200446200303800400888418800482880B294452202430215C8184A02121905403A18608836DC2892848D541CA48589048D4127122C4284816182128CA24A6012C0
-:80C400002A113484414A8228011A7248018C74186144CA311488214483818722F229FB00283C4114844222110888482048321120019028805284801408440041802111022C012A210184818CA4821200400822281E484A028314F48D48000000000000000000000000000000000000000000000000000000000000FFE40F00000000000031
-:80C480000000000000000000000000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B5000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F09B
-:80C500004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000004D
-:80C5800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000DD
-:80C60000000000F04FFE00100800001004000000000084000000000082002100000028000000000000824400AF44031845022432000018301830484188A2302C00000040880482484982440444204808802241840889010018418128D22A8401E0F60221100441214721811088420218D0824104204128011C1814C1441CC14811002412F3
-:80C68000481014428211389146C881A10080198404588110086688F8F8E2241844412002400818228311C218411A88028504841820484491481028084902214844008423012283D5250800200142444A9128922A8401F02E5C0010026D12D024014008004824844C0828120010014094514211422094140044290840C891008608160882C5
-:80C70000441240084881B04822F8555C20127126D281521813112A210421111001922147822081381142412845624420442851A485C452400240044841901811A11124484248F0844818322092284D485F29051F44A1219416441498354914CC98281E8816D828414888098F48D614EA44D1482839284354925048614926A2A42A084A61D1
-:80C78000441F48D2B42968198D22997C78E438361C4661892091824B21AE18F0442847884E141292226FB30D4B142814174245C818A0414100830184002991246849B284318810C442C4442064447024120848A0284D112908C081181988914881C01282441E284442924C048144EF490A26D121C12E161841F1132C4489E4A18832818352
-:80C800003111A11E88828447881B81424711D226C8243448E4448C22B388E442C852126C44C588449661A6463C6C4E3A85551296012984A461888B844D388D241238B289F622571008D381E22214CC24498461841604884B4249A4821E241E4489D4422182022524AC854A62441884A3C2458A341859658448102272148948C66818431930
-:80C880000888481614086341682212D0A4F41E7190184C2154181222488C5114495248808208105881C04888428127894C322486214121A2841490E2C0184C54848743182112161801C1A068424128902440662489A421E0420300004430184002221E4A1638118311C8822022629460412224701836288412128C91240023228248018819
-:80C900004828406C121881608146881482881124088AF2EA7920213111224393246E14436411EB422AC1188C71816444889E2C799568A7421B482A64C1A26C3E6485811661822B124D484189DE21A5524C522C471316929D48CCD21A068D81188B84C8CCE4C295484127414D1A6664882247AAFF920840145C8146421868814110889482C2
-:80C980001A9418260884A04189025084005E246D18838131C818CA9212440088842280290116AC1284001840228208A0411848BF19034902121416480412001E242A41291181064094144784709804892A2242088422281219A13C1A08388A9421C01241806414800112A0123068200280F1C7F48041C22185C423111913C8238741104833
-:80CA000002811021C8221D4288182632891C14C84451D31231128648348854414621581A2B8560482C01444CC2142125018602811622082F84A152419FCC02105621008481008088288D2964C1C0448E2852584140042044216B42158404C248A0818884822018282124C1C160814820A285001880C288AF150F941CB2180243851142755C
-:80CA80001A845892842511741281B82A81925281811E48812C12D8262461248480A42800C041418923C1225921C48146322110281CD64238844E8241224D8AA6144482F2C93A6028642081024E24E08122011447840090498B81924C486448281A8824142838441018081180A8121091544622654288C0812221000090C222802ACC27FFDC
-:80CB0000CA4382521844244244E09401468C2A2418B144014100A02160499014184322C41182261404C188228854424031241A14842822314400121230182C61818341086F460A1628024518898511120190321246449245123400501820822B92118182178525817152F1225218672115121814214133813982810413C8811B14AD4200E4
-:80CB80003042C24821F0491E1032181012220441441928814824088E11221048288208000020941489C15441444110048285A242284217484579126214112C08223072100800F0BB62D081048CC4219028844A22A4241784460468892882F8443848A223A84221858411C888230229EA28048E21221D221D6885C2431A1234841420B72291
-:80CC0000098624A1348623614C88445842882D1489EC8107128E241F825281AF32A241228FD57425F499481AF8D8485EC9DAC1D12B8A5AF82848AEE25AA1E4CD541E2CA7824A3A385485E584E211A7591AE828F4A8851F249E654F99F2881597481AE448B447EA29EB2CA8DC1F16A2F94F14B48998118F26A1429AF15A182F25A5418B1B26
-:80CC80006E858F88F2DA5A2471A5E27151221E5C8F64A1346D128D1346D291F1211259D1655C8587345F92637CAD1457A827CA82C9D944722FE884B616618CBF4BF1268646F5EA7E4B314AB384F1321619F5232A2F14F42DA16D219A3441547D282F21354833D822F592C1122B3D2BC62EE6AE884F8E82C87849B833082E735793A1CF5168
-:80CD000032414D2987D119E285D244FBE824297A880683F51574814BB156F828C4CB117E89A21B898E42448F86B623D4147C89F82F2841445FA16453CE816CA8811EB82F6CB151E172D15EB43767534C58311E92167544F282846C480C8594922FC464212E569FB14C21A412844B1270268134224827124827128425658825A44821C021AC
-:80CD8000121C0254245CC21228808228A48200200222F02882302850288283028512942843C122438812942882835499D067C22616D255F4532B17B41F9452F53D2F57741AFA41A23F26DCEDF1C9384764BFB1F14715CB148F95D99FF449CDCFC3597EB718D71A6F86F456D3C792FFDAF42F894D26EFE5FC1E1B874D1F213161CD2C9FB1D8
-:80CE0000F1196C4D96BFB4F47F8EE785EF45DDAAF1394ABFADD413F94BFBAD8EADD46D5CEF26FC4E4E474ACF81E241D4E8F85F42D075F262648D2A2D4B777497B4D5D777D17FD16DF119B6BF33F372F29D1B4E322734A7B86F41F19D99CFD1F1C3FBEFC4F58D9DAF31D933F823A123F21EDF4F59F9BB293B1357D1CFE5F51E1FBFDDF953A4
-:80CE8000123FC9DD8BF9991BDFF9D874F115576F64F84F1DCF65F146161F34FC6AFAFD8D7F55CF148F6AD9C6F144422FA5EC2198961E14187F6A0D7F66F63277AF33F23F37BF95D2CFF2412A7FD5F7516D7F5CF3E87E3F86FA49A8FD9C9FADF986948BDC5F7DF8CECABF83F9EFC8AFC6F4AC8CDD9C9FACB82EFA757BCFA7F5AC99FFF2F7E1
-:80CF0000AFAF4F7DF7F6F2AFEDF5D5D95EF61B6B4FF9F2ABAB5D25DFFBFBC3633F4FF2DC446FC5FD82A63F33FAD3E1DFD5F154D62F27B63EF3A6E8AF67FD2AFABAF9AEA88EC48DDE1EE6145F74F63377EFF1F2573FFFD7F63F6CDFC6F6747FFFD7F6EFFD9F9CFFF16BBF9DFBCFCDDFDFFC3DDFFF5DFD7CCEFFB4FC7F7CFFCEFE7F7DCFEBF5
-:80CF8000FB2D967D844F42F27517DFEFF7B5B57FF3F2BF9F4FDDFAB4B6BFEDFDD7FD2F65F7BBB4BDBBBFBAF295B7FFFBFB83A7BFFFFADDD77FFDFF93B6BFB7FE5BFB3F1DF1B392AF8EFDAE926FABFBF2D62FA6FF3E9CEF82FFF8FC8FEEFCAD6A90124001218C44618114160886081A04198462898100128190282094111034481008400106
-:80D000004D91844D91901416681284148C44E3884401C0482448421200ABD77084821244581A1604444521282211088514842172483694F014486088444984528456E4A268112C24A142465422440061CC642484884CC4118218167848229182126088188481144F66094F22F41124C5F2112CC7241F41724ED341F24E121D24AF269921D1
-:80D08000AF245985AF647924F84A9753F2429557832D955F82C4955FA2C4857FA2E451F2265A96F5224A8F5DC24A9E24ACF491242CF4912485F2912483F49124A3F48124AB141D24AB9419F24A9251AF443934AF443924AF447924D84AF924488D944FA2F43A1B602219F6285215F468121741873219F42812488F6289F648B24B284E127F
-:80D10000478A8D131B424E9315D812FA83482DB15F82C5817F82CCA12D489E212FA2F458256F3268412DDB1FC9F222D21F49742AF29144A366418B861748EB141F48F2681415F448B219F24A94F04AB4824E34D042FB82484E344F8AB1D3034880040060214004000028000082100200880000400100000000140012448002180000000027
-:80D18000F79B2441E04142785285D134B1444206863832184508211F6631184B4112B0818348D14144D4849212522B381CAC4846B82821846C221B21A01412444E2245418CD4228938481981AC16CBA15A8A18981443AF427E7280A129811E2489922C8C6211124F1884C48340D141A81C86A824137848A11690388A14382B1149528148D4
-:80D200008911A4184E848E142800A6C68A8F28E2B2C8992CE8318241C1481E872C9C1841248467242AC4888511F84B9724124A321C16DA58A521C963164C6154CD42AE11324568182B1419B35892851D1822A88B923B41C5E298D268E242F11148421C2CEC81781CF1C814AA24561243C858255A818F1CD152689247259227CEDF21B841A8
-:80D280008864428D128BD22DC22CE481B814AC41CFD90D4112224C22424C634124828810124124F84886A014484A31112068144114002B92831124A4C200A0122829A8294F2288426241211180C41296A814430A418912942826F85EAE901244C1121C6181414C02192604298154121782440082812648212A04905680A8244DC28261122B
-:80D30000411100A1167C44431824B84A014601644142168802284B41893824DFA5074E24281285C2246F3294398711C14D88222E98884799C9B486B128F838C64D888D45CA6249288545CC25A32592542A149E2826648F274266B126B81CCA88597B21A229C81B6968A66282A48B1823FD8832497A4612DC2C68C58CA82182BFB8430249BA
-:80D3800032188C7111944467119D34841DA4222221960969E882E84461881C28982826C1858744152624216424488B682E84A74269E22244C438244F1892182B28A92C6E24DA1248FA88128A94926312186E4843A6858144BF360549074424283F81628240C448428B189846D45A9439448B82257448C4688E14608220721892641624DAC2
-:80D40000845224A049124591A14CC88883C1254E15D041A12885823241901447824E821E4428A489118C2BFA426A30492213D424C21C234403AD122E12CC352116E11184648A285638122449D148180222CC6329844800430487121189BD2294818B188C866163419CA8428312D42892484319988483216622248091883FD60F8741218BD9
-:80D480003421482AB16C214154484489E428328884C01814008918B22481E4848835892634A61E228AC2118B82182D12844883410145A1844A8213145124484B122426844206E0A8A4484462EFE7042244441C1111044448E0120884244442884CE212E4C562142A6114860E8024D42961448C05658284044123121432A8C012428C29A1C0
-:80D500008212248964281E482A88092887424608BF94022E5626D448B122B11C24B569616141AB12BBC34E2887299B854038B84B24E0C2954CCCF344118CB48876247841D268F2843123E48619D4A6024E13D22D248E18CD93284F9AC1724B128F14F9A84499813A5A2D5CC7282E8C4A92385A0889DA482AC588EECF400126514125C324BC
-:80D5800045028B1444104101A744AA0417812F14032D91822847288034184883F424128025E8A205002712304890844823222102002B14D04A3984292232424885A442DF7A0F487021C2461322815512814AA884184141E021288628384110A8822B48281826482402411820C88130884B1844432962182881C09128144844244C21A2218A
-:80D600002AA4C18110F8F9A90095249128840018440046015611011491650842901140081031891B482281100140448804E4164821C8A3004784800489C898428C48423414A897672082011072420645A24210C82881424658148948214464194D8140648889C41114001C41312448121119066082190886141142088851A33124400844BA
-:80D68000A01240F2357E1012C848178128902821121504219212B2522249C211810026022241228C2402824882812282008A23A14140024091C129011388146424889044209244CF970B821212281122307820068011288402C358488A7411C22493A1288886014B2841AD64CB84228820B124058B821D8450814C6382C012839228888C62
-:80D7000004888AA281008190841CF45CE400112615C2189117C140348111AA4468484D8186BC84242254144118304441224948681C868281384888006041424948948121A96A8843411415564221214443BAC2312260218AF2C8BB604500C044200480A169184428400218B8228184618100A4001321122E8102C0411418949884889021F7
-:80D78000821941880112816084200810F4FAC60022605112122712D12F8144C8298439141118110922848C82280860241448241842499248A46AA82143828292212829420DA9812291421885822223D622B1243124A62442F21445F0162844890441CC044228004C8898281289847142422188C81141C01155A8817012041522CC251A1683
-:80D800007182AC8111810080342148708824D118AA18432904818483E1811442F88D72B056339185D3181754871A21D48CB781CC587AF1469C9D989B844BD8B5E2C8A8631F882CC4882CFA848C8E28472828C50C2B824EA64EF8C3EAAC0C4B712E281B8843B88988F8A881172A23DA1978A2A91ACF55ED843492DE94E7CA1EDA8B2288A7F3
-:80D880004C23D914A8C67F19044CD4DC73115C479F4341F66A44DFA151424AA2ACAF987C88F144414B4316FC84294B722F98784C6121537B8425D4147849BD1581F48C845C6513C71A8C7C28A1332E8419F434151BC7474347C33F81C1A485F9B278896B1537885F49D1CC9C241A334C6F88FC983C4F83CB481E328FA8F2762A3422A03287
-:80D9000036FA42298B751D2B2D65724D199712281216E4987169A3D695F34D1426F48DB98D151F83B12234282A75287BE1F3316317AD5F8855425E24381F1C38834F5DD888C23C9CF3C9334CD29ED4214A32159DAA503A1D1227224AA82A5E126B4648CF42634245F4927C00229014484342382484432249824444C824964824C124484C06
-:80D98000028D24C024212839912861A01210022A416812A0862044384412000028001228B04802812F844CF1544457C4225F537615F474162FA5F52717AF44E141F958989B449F497115A4A84DE72DD22FA1F912943E191ED14F41FDF4D45F55EE847C84FE73594BD75E5A8A01DFC9F6A4EC1EF9BF12EE44F6B42CCF48F214F4DFDCFED9E5
-:80DA000076FFEFF6E2226F48F6AFE6AF8BFA687AAFC85864EF88F2A426CB8F4F6EFAEAEACFCEF8BCCCCF8AE84EF4E2E2EB89144F42D5C554899F13F6151F6FE1F11A53B5B17AC1416ECE3B549F4AD311F448699D432FA1FD171ABFDCF478985FF1FD9CDC4F6DFD53518BCC9D933F95F55C584FACAC6CCFC8F8DB6D4FC8FAB8B8BF98FE4560
-:80DA8000654FC1FB2C344F4DFFA1A55F78B24AF6E8A2EFE2F6AFFFAFCEFFA133AF3E7F1FF7DE7CEEC48BDFCF6FFAF67C8FCEF8B4BCEF8BE84FF6E4F22721347F55F725642E22FFF3F35D6FEF67F2527A7F73F35B7D3EBC8FC7FF69E11F947E45AC88CFF6FF7AD23FD5F91BD5CFDAE61DF966A45F4AF96DFD8BC6CFE6FE32194F46E67DFF86
-:80DB00007C6CCFCFFB1C6DCFCAFB78CA3FB2AE6CBAF79C24CFC3FA8DAFFF6BF3FF2EAFBAF6AA28BF2EFA32A73F2EFFDBA8DFF4FD8E98CFE2F37C82EF6EFBAABACFCAFBBCCCEFCEEF4FF5AC9E1FEF47F17571DF43F22D2CDF57F3597FEF67F75E7FFFF2F27F7D4FDAF6F8DABF3DFDDFF9DFDCFCECCDDF7FF7FEDE7FC7F9DBDDDFD6FA5D9DC7
-:80DB8000FFCEFAAD8ADFD6F7E4CCDFF7F6371FEFB6F6D6F3AFA7F7FE9FAFD7F6E4FC8FAFFEA3CB5F5FF6BCB58F4BF2FDACDFFBFBFFFFBF17FBA8E3AFB2F2FBBBAF3FFF8BB3AF3DFB5FC7EFCFFDE8FC8F2FFFFEA6EFCFFDE8BCCFC3FFECFC4F4FF78CAA7E538001229014008C048460886081D0810484852409110083044218800888812283
-:80DC0000424F12084B828001002001921448441608128004824E2482DB52B082544145628125518165A2414B14116A0818538811E14438314E81118524E144084C18141844914583054E2488121419028C92849A42F3812C859221888C0245D83239A4E088D448328429638A1894CF270D2CF41124C5F31124CB141F41324E1D2CEB141F3D
-:80DC8000C8F24A9119B24A19F54A97578AAF547934F8429547822D954F8AC4954FAAC4854FA27418F5254A96F1244A96F5244A9E24ACFC91242E431F497228F2912C8B861F49F24E821F48F24A921FC1B24A9921AF2419F54A964B42AF443B342B944782ADB44F8294B84FA2F465F8E032D441D438D541F22C111B412B16C4AF16F18144CA
-:80DD0000AF5481D21A9B45AF343B852F1463832F54D884F442912F88C4B54F2885DAA4BC18DAA4A429489E252E4316C48B1FC9E2327491E42264C96E821F41E424F881642F24F91168AF6698614EB259D22A19F44AB243A2B445B84A1B96BA4B525FA906004800840021000028400200001002000000220000004800008004000000000050
-:80DD80000084D0970B2C425416871153711811F811285355388B18388591128411CC382944658821C1444932258CE44291294C9422809514246011294214E789B44852141B428CB388958A622B81C918242C997460861876A44289F249B42025B918D2225228414B166082A684C6411AF8488486458C92848B48581D84149678C871421820
-:80DE00004138162883D861AC82223ECCA63524C028B6D841526188C94894245825384912CE186B218B2425B8366441228C48CD449F9D08624374297238921127C11E4C26D948F7812EC32E632A893989C5119C284F8874126C5918C8AF6708871C328D254123D814BC43C3249E2A8D8517212885F298611E4CEC02436E43CE246F8875285D
-:80DE8000B2B96489C3F4422489F8422C684126624D2AB438F4DC17C012126911111C212241011819D418914444803A858004118D14118F54028594124A6282802891442843024342E41298414D81151868812448108429A934122D143E4818265848414F8103101184021D2441152C64414E11A0840013E2143121D084C494414008494497
-:80DF00008474481122B92408419224E03228C1824843544188481860148240C8849088499428B21884BFFD0627616CE182711AE4C611FA224946421C38A89C9E1949E458748498ACC3F91428608278174DC853C62119F6112C4B92C191A72149E487D861A4254D138CD15898384F912872C8D284D142FA42228F1668888C7457F884423803
-:80DF80002D6A3A94A8433C4CE822D78840524181E392287D28B374445142848369889611948126F444B82E81414924CB444321CC2560142E146C4248438CB488B18115021E831319B819644251A741282B349CB888C4821F44C14C6B1227822AFC648849C844AA15F8E7D430162CE14281C1546042848334141B241B248384C4449348D1D7
-:80E0000048E181125884324E8184424D6143D218F488514183A983614B24443E4253912A45A8296328C4C886624C9062118344288888941A90688C0B22FF1605CD424713235485605411431254241246F81164C440C8843823014130221E8282288A133821C02814268CA141F012482488A9C4948B611CF1481448882483E1352881E148B5
-:80E0800021044486E24409812304A1603460418C238101328D24287032C11219140888A0184C1C7648C4141427684C21083B848D411A144222812491182289121482C2188B1243821A4CC882848D2482A22E1222C4F034B100400C260841A11A22041881484C041A5448C1812E492A311114244088064A82E1421132E84426142412C414F4
-:80E1000014100821C0180043EC848206293118818468F082A470429422454A352C6655418D3443C1268CA12183F11E414893D4485148E941E8D3B8E47134D1281C942222E3166124AE5947822FE2B4B8C4164B124C81D32AE9C4E3D2D18416F844184AA1121E2A8CD1B4F594482AE988762C028D348B92C3461C5848001741254188618129
-:80E180002C01221A24C24846016C014A2883084200518815721884A128228025014648024004822C311126429888448882C0482D1448988220A924F0E83D904241408D86A425421E249B481001C3889B48224C812128810442430C2AC54886818C140449851404CB821E8419044263883951223042420020744294CA4CC42844A2DE8E007F
-:80E2000020011400182444198104109114888142196452108A02414422816018C0841C028C060020094229429281105512C8801888C2140084F0A67F1410411C489818A9C219818CE888B22864818146994883E38462584488250C6988642100188388C14822284904252C88328822190289044CC1141A888181AF418741181AA2181812EA
-:80E28000842E5E0000181421002306294434C24A012113040020D282111884D48118C448284460118483C9288A01811224F022112860842181820081CA22082161861AF487F7B0E4A142002AC12148222026210241C82C1344148182024844C04249B3480244800510C291161422022E81490482604C800800008283F244218C02F0382375
-:80E3000040091E41428004485C04141C18240888802882DC48E4C6014211A084439121841364884213482504281485E2A184582185D2A19C212E44C0422C0424C0424A084C0889F4D75A008511088304812181188144A3048951141308421631116042112048121164150014121002184001814880018819511A149012228C0318B082818A
-:80E38000F84947E041C214544D111018120141AA14C884128048883A14608C881223222802184A3B248604418328C211ADA1278188461238144CA8148382412104A0C188128144800816E24E0F848004181214811818C084C06140C114A08285041C91C7811845D83888488401E0188724C98880440C4819820382E04C11C8282422484D7E
-:80E400008240C288582143F2CAB2B022F1C125167D59C54889D5927149E284F6485E9E1887268C7458E481515DA67928E8417621F14D18197258F12A49144F815474CF11D51CF724591B18439D8445E868F8C4913DA443D38432118F83D414B1112255896F4DB1416D311CF512422B111E482BB827416F4CB712B8BEE341F81466AF9F0640
-:80E480001E24831191142E31212AD4827324A6A94E211DC85217888E612B86DD644F4588E14CEC1BF6224426A8844B4C249B672A68469E844984E445E71891341A741892A22E9486B2C2BBE8E236ADD827152E88289FC478423841A2C283B6E87238F8E8444887888D886F2B4AB14514941C8493F5512A8B241E419B1145B129EC18F28E5F
-:80E500008449BD49E889B512A9285F1ED884C184CF8DD164DD44C284E6D482F1422C1F89B848E2545888A29F27FE51481F22F284188F8831898F9454213D466748AF82E228DF117692A2589928A8E429F9144EACCD8249C18C2C21DAAD05422A0180248224022712482148148AC422488084020000281008814110044B82F02481844501C8
-:80E5800014D014082260128224922486480414604450483F9F4321E184028F41F518489F1577199A3A9D1B8F6DFBFCE89F33FFFADCDF55F51C3EFF66F98F989F13FBF8F87AFD91981ED9DE984FCFFAA9A94F2A55B1CF82FA8DC92EA85F5BFBB9F84BBB8FB9F39F522F21F3448A8F82B2BDB9F9BB2AF3C281BFD5BB58D318F119B98F88F97C
-:80E60000999915D111A2328B958D141B152D986D8A2E7C7AFF32AE7F6948F155152E64874195F44862BF35F75B289FB4F74B7F8FE1FBFCF49F3FFFFAF4CF51FDDCB5DF4FF9AD989F9BFBF8F84BFF8FA9F91ED9FAFFA5B1DF9EEA26F96B4BFFD6F685CDEEEC4F4FFB78394BFF8FBDFD97581F19F544CA8F8AF2BCF89F9FFBEAB12F1CFC1DFC
-:80E680009D8B599D4BFFF9F98B9BBF9E7B43D322A2F68F84FD189E2F9DF9121B6FA8F4227CEEF18FE2BB524CF314745F41A711C5FC48489F97F75952AB329D11FF4FFBF9FEBF9EFAC9A9DFDDF4985AEFAEFB9F999AF9D8A84BCE1F8FFD1299DAFDCCDC9F9AFA25E315F966644BBA4EC8DF9BFB98DDCFCBFBC8FE7FE9FF52B65F7BEE42F207
-:80E700003D349F2FFF8AC27F18F8999D9F15F3A9B33F71FBB3323F1DFF5B533F15E52FF372B26F68DD26F146D629F9D6DC4BF74FE23B71344F47F73124D7C1D5FD68689FB7F37B388FA6F77F7DFFD7FFF9DBBF9EFECDE9DFD5FDF9D9CFEFFBFEFCCF8DFDF8E84BFF1F8FFF7CFD8F8BFA8D89DF96F675677F53F625655F98EACCFCEDE98F77
-:80E78000CCFCBCFC9FEBFFA7741F7DF7ADE7AE245F5EFAE9ABBF9CF8C5C1DFDDFDD9699FB6F7D3B73F3BFBDBF9BF38F8E3C32F2FFB72FA6FE3FDDEDAEFE5FDF6F46FC5F5FCF9CFE2FA424F1004414001004192140012B08144B41144142124018200441941948542184288800188800124C0821A4402E08804001028880228F0B922B082E1
-:80E800000514A014A0142024A186824A11840980C4A48AC414125C782488C842E08234982A348841284D1811D816342C82889A3666C011921490821242A2C0484EA641284189087F520D2D421F4152281F4132481F41764AD241F64A121F48F24A931B61AB945B48AB944B42AF14B924F442914F82D412F924481CF9244A5CF8244A8711DF
-:80E880004FA27498F124CA96D5A4E449D2A4F491244DC21F49D22CF8912C83F49124E7241F48F24A911D24AB941B28AB9453B94A39A4AB9447822F44792498924F8AD448F9A44A6FFA0DA41D648D521FC152281FC1562A1E6C8F24F1816C8D161F81D648FA8148ADB24F83D41AF9244829B924D41AD986F442914FA2C1944F22EC11F82418
-:80E9000042D6F124C296C4CB9AE2B234992FA2AC412DC29A32481E6C2B8468AB9615FC22949AF44A324B29A7244B4B2B14BAB442793499922B4B89B1A2E1DB03000000840000002800000000210000000000000048000010028002280000000014F0CB5EB022042847818724442E556849A4212A4423453414488A9624CC52248A21C3D48D
-:80E98000482B484459857432084C14443444922A94225183B14428B4C8C254C9819188F213344485D48425A22422A6E88264C2431C78B4032068412C422402121671441AB828457848B188044D18C88AF151284578C4212252482C249225414A32A8C81A8A6364924CE88853411292409841684E23A4828C210D4A68481D58421748189445
-:80EA0000821F62468226A421C552482D2416811265426B4216227249B48405784B84AE1CCF25C2985CA9492B61278CC269C12636886688174C2E944CF688148AF14224A61DA185488E4889D114A1144F8C823FE14E18CCD584A5C249742881F6A44B44471C12AF380800411A220443A6414AE18114D881B6480181488D84221041A4424CA7
-:80EA80000244414E211944044E240018422B428218161C2429C244838442431812840820AA148608361868883FDA01414081028C16E8C102842601A1405485184881C02482814800874120A48280A82C4812801284B24A28E81238118830681B2918C0811210142A011608A29D9B145E212E1149331C2E44644E84428B254C6D286AE11804
-:80EB0000F15A849CE42C322487192EC49BD290459081419F22A4241E4D94DB1433A412844B3830E1981D9889D821E312B41CD448D821F388151121141A84B582A2821F81AE282B684B43449A16E8F5065C86122122726874C298288CB2584881D612B88C6544831C36C881A843420440F441288C4419698D29A42926A88118C23011862232
-:80EB8000BE2134E81D143E818614818981E415989288BE48A5A2491E44185A4ABAB20E181631348D144604411E441A44C4A21283115281532263118E648F11041B84841B4840E242614542264501C84C0619A2A18D8483D2A121685183083D184E2A26112101222815242A82420CA8BFDA4F12182714A842224838134418532492830814F4
-:80EC000048481C41084DD32E411AC2212B2486C84422222A64118CF1C23C4924A842142847842C142834882518C411A821A014875A5A8A41A848504821DFCB0748B05972213419181C421848614A83826614212A318C80A4244058821645084B4860884C04B400182688B414621140C813841AA214C3BB288822B442091068287022222BA8
-:80EC8000E12BF4C1BF2002641841652811022921315185420424121E268A42641E0000C4122242AC8181240228490588212886A12838190421201108223901224E34451828026722242E4241E48B2149F422181966828D432C816A2385624880F248942CE21946BC217C55F848212826334889914442478329B548E1A2B14CC14443064C00
-:80ED00007A229124142FA19A6819D7A2A5281D9892838489B21298C8967238F442A42885E428F4D14500112E1115F42811442C210115C8111D484AD981143211214B41A04220085181436244228B28482824A0821AC298281C2131488E48141289088981420223A4418D243228488196882372EC0A601284541814C0111214621B1CA081DD
-:80ED800028869138C0184684E1884142C8218216984100200848A081111217881621911424423C021D8AA6048C422288A8121602421E2121BF6D03483011100113833221CC121902A01CA1A024C8842E48A06800192604261274221126140449164C01438884120229C88829859142102222042DC8244C08F0D75D10044483136C8245910A
-:80EE0000188504A883914842C119CC248444D014C8414119430454557284C14890882A19A8848C9118208198214228004A8101A01C844E18AB128C0283294A09DFA50E190216022C0483052384848186192422C2C1408108412D1142D8A084844021894581F8241828A06144421082245184E082384850423021412B480030A281BE2B1425
-:80EE8000C2211123941111624511B112B29104824100144CC918420011481444181285029951142A01288200414B1220D222A1A123231AC2AAD0825442814B844829298825EC81DE370D8493D482048449064232860482142D188812838892211B128A624820E288D2819228244ACA28A826489121232824C441421984C3414441881361CD
-:80EF00004216311820416422164488054C011F620620810229022122100800A800C04148904889C5C888200442A0842502144441449044001C048044C14C4848800882001C148202F01C8320C22444114812008514011382C4484143241181F88815511445480518118251118C2484E88882041CC32814260214984C4804241412E0848AE2
-:80EF80004468C800C35194F07B45400C297638644289546883048281853419284A81934410040029C18849014B8247834882205214132151824148DA4218048C86821143058818182D14291181C24810025F76081D42874BAD142B148922819111853C2EBE3A1B8E4287894384B1A19C9C56B98DF93489C754CF8926C8814681F244814FC5
-:80F00000BAF486421F8AF899642E14CD354CA245C31151158E87269645484F4AA1821F8CF12889B584A1E84B112F442EDC94671B296448479AA7A13FEE0E4962144D29D7914F92F4626DEF94F638474F12E3D4F8488189F19918611EC6DAE6D4031F4AE817E448D481F941154F92FEA12C19E446F4395A1D841B86A384287421AA51674AE1
-:80F080004E1989E181AC441F1547E2E1E2217A18F61E431F25E42C9B425E128F22E481F11EB6AF64F848528B114BB78D31F0C79660461D2217232E261F45117931E684B211B48193411E691CEC44ED8AF32589C3F16161C945BC49A24988BB1449F424B8DF9141B44252981E3367869AAA8C4F8E88DB41E253E24CB33D036E312B1E2B4476
-:80F100007F1883BA82E3937498528E2788C72A2E48B22D88CE882D481EC42AFCD48820941610A4484D12108414A641218225A441250444114C22480444824614C324884C0290144221422E118422501C108804402108C0248220D81822192891282FF14DE1257555F9292F7D4FBF96F6346AB5734D597375F7DFD1AFA4FE4A96EFE5BD968C
-:80F18000FA63A5BF97F6E8EDEAFA441C4D13575ADF9BF4118D15E16EF62B3B6F71794E7A8D5B373B684AE21DF288B423F85125F094FC9F8FB3737243FA961A2F21F35A6E6F23F333723F27F15AD8CF6CFFF2D62BD8326FB9FD4A8A2F26B24CE68CF6EAEBCB76141F15F5114187E3BFD1F178789F97F6594B9F93711AFC89A5CFCCF41B4BD8
-:80F20000BFC7FFDCC84BE93F16F37B79DED1BEB1DF9AFB64D37F16F53C193F84F581818DAAAFB7F7767B7F3AF82F2B7F33D116A6ACDAF288BC6BD85FC3F614245FD1FAF9387B6727844FACF78AA84F65F7B7B4BEB3AFA7F95EDE8BDD8F2FFDFAD8ABB37FC1E5A1B962FB76F4EE78AEBADF7C4EE124F41755BFF2D2FFF16B6BEFD753B9D7F0
-:80F28000D6B55D5D9FFFFB79E9BF85FF5C8CCF2DF87C379F97F72C6D1F8FFF242C4F1AF8F785DF93D455F941414F46FE7979CF77F36E4ABFFEF663472FD1F55474CFADF6D6BADE241F5157CCCF4BFB9536BFE7F36362EF2BF37276AFEDFD72F63F23F7DBFAAFADFD9E9E6F6FFBDE58CF67F5F6DAAFA2BAD2F12E284F8DFFE8FA7F13415119
-:80F30000757F71F33E3FFFF1F16EEFFFF7F55F5FDFD7F54E4FFF55F5F87F9F9FF6DFFAEFCDFCFCC6DF77F35D7D4F5EFEFDFDDFDFFF34DDDFDFFDFCDFDFCEFCC5C5DFD6F67C3DCFF7F3AFCFBFEEFE725C6FC1F7D4F4CFEDF6D696FEF49F43F33D3DDF53F3F536FFF7F76263CF2AF3FEFE4F6FFF7BFF9F3DFD5BEAEFEDFD9A9ACFEFFBFE7E00
-:80F38000EF63FBFEFE9FA3FBCA98CFC7FFCCFC8FBAFAED6E2002002B124002249E48262248032486088A9428820042002004813938482909490100410048413024001A048C048C048E48284842604482250E00834224C4286216A81244814885B184A41426C8211789A0418754118D84133A48131218449142C62122E482281C244121687C
-:80F4000012E012A149411B488B12121C282984C49212852409924E2486F8A199C0421F41522C1F4132481F41764AD241B24EF1116CAB941B68AB9453F94A944B42AF147925F84291578A2D955F82C4B55FAAE414F8254A16F1254A96F524CA96C54ADE24ACFDD1242CFC91248D131F497248F19124A7141F48B24AD141B64AB981F24A9130
-:80F4800051AF4439A4AB9443BA4A79B498B24F8394984FAAF45FFD50B41F41D63EB411523C1F41764CD341D63EF111688D871F49F648B2928DA74B434E95478A2F44E188D452F912482D954FAAC5154F82EC41D8A265514DCA96D1B4E448C2D91FC1D222E948C6129E2CCF24E1497248F28124AD121D24AF64F98124AF2413F14AB643FAC9
-:80F500004A1443FA4A124319FA3648A9B88475450B2008000040020048890200000000008001000000400800244100004004280000000025011FCD074421911841457854E121445181128884881E4C8B284D28166C413DC8874844452186446841E9B442C2141309813E841748B211236B888C01457814491621246D28C622A418322A14CB
-:80F5800002524F82714864882FFE4282369412248B612F114258498F4493442CB821A1948381A81419A124850119F141988245B124D8413441184D11A826E881A22CA0244D414B92456932E6B15188A28694819215B84811D18498428183A8851F236888601A49F272759062C6C4182CF128449B12857444316446D824E1132822E948E7DB
-:80F6000084C2244E381781237481C24C53B811B244B288F445124D184CE242B131F82118898ABBA8B415EA549B18945EA81C69823E414425B1C4B111FCB84442633812228CA8843AE8A538344F18A429DF520D452241012C41E4146181AD111584088B948481928D11414417888D141309498418052C641588812014544148F026818A5267
-:80F68000124841865C18844048328183A44889A14229411142982845F81A58205241800212421922243148909882144013C114514E14206488281110364845282132D8589243021C0800C342081D28872250328A9488490410328400008F3205468403248B418D628D11A3752CB12A54124E91B041D128BCA5D1489ED88B488991284C9C76
-:80F70000AD2E4147A4426D581935B313C362836C22244E24296C124351821FCAF449961B496734D849E91885AC1CC361248BA14E886A29BE48C3284B52A694ACBF320E285180324A48A5F1421119923846B841011A24A41215C4518B943014828D248CC844461348B3E8C115582A9818484F2A45C42113114A6511793A448AE1D1CA2121FD
-:80F78000199884A04386A834E0C11EA83488444DA6C0441A02803138528972442A1423E881681817883748E6388A44C7118336448E411B248312F244124945912822A3249E12214A0A43088E68C9ECA1149942B098A48427258B418CDC4A8884B8820628414CC2A8AB6530181833C43C12189427444A4194284384D248C141CE142E442895
-:80F800004260B310A14124A02826681245E22862764A48A84160816E8429018D4446086951223024AC822188384868121E821E22C92482E22306A926325814422712C0134022C1211A8268411782C01411442542A85281303C8252292844C41122127092D4C214C8841E481A028903227849B112D221C8146132248428423848A5F4E5AA0E
-:80F8800040014450484468C0282288004881508240A8524A884C8C2804B90512841184244368126222161141641818219C0A83F841888848843888004634888282B0750B2F118441541C8395369CD614D18227D2823B21B014ECD134A5663C2446C1441B41485D188C08837272688133522C1C52A22EC2C13CE24482624A4958848F51324F
-:80F900005829B33438228BA12A39822F117C88A4286E8826026E968B258B34C283924C2082D21AA121411124484044848441081E4821128132A96A884A82241446A142924886B4240598522C69418D1313A1148A0484A50123D4819418D02231141848890188438812F46D41242002114541181812318A260848A08180244488182D046204
-:80F98000412227440042601427281C081A0819A3412AC48829829C28488024AC48422388E284B24281AD288280F48D27D0412134181248684614514810C22CB0182C84181C8824818498448846C1C8122AC54247818A64429054130211448648B46201AD124A112114129418C02218828688028118825F3B0C411024120C418CD214812273
-:80FA000008381A448C88215241221664814E1412850444837192E4226821001C818884B3190280C488142022812821942842904281881230A8704244A143B0110440141322348813045128133244881042A984D01A48880884881412488C22C128C028824128C91221342810B28852282638828E14A18B4A0021CC240232AFDE0182808272
-:80FA8000125118504120829C11844008411912CA2881141811222E424E2117A28B42A99288808824611911C0A8918E282D19421328CA494004488A12A221214681E2820443F85671108341480D63041840638281D08408899278634491149288284984941512411400169454614E8CC44148432431174469F21824C98418924238121210A3
-:80FB0000282822282144FA497D008501A021180068422004280000484222008308842400A01240988814008200200610014889C22A86080040288108F0F617A024D04162848C3222B18B42844914011905592221981244194431488813820840210AA18C6C822262A0A48C081908602830822521A8182130582021116284B098021F2E0A17
-:80FB8000844C822421054AC21212002E14C021D2468412A11220C2342519D28163118DA248C3A14826024601D0853418481901D0141831C481124C012800C60E4644021825A4248D54144E21AA44E853E6849422812E144E31AAB86A8411F8449892CF42CC8A4FA45248C9B279E484B4C8B44658484F93E986B444E3EEB454B3E2F14EC8CD
-:80FC00002FEC7815BC81E611CC245F92E8CCD4BCD851FE424B8FCAB8B4CCE58E538B494283FD12C2A9B218F88872A028AF88978896E4A4F3549A245F4211D14CC2188B225F6474269648CD4E1F244298216813F84CF892CB251F13F447382E184F58AB8A5D14971A4BEA89D46CF2BB4245E1AAC4EA2278AF167C78F545141F8E1198884C26
-:80FC8000B46A5149272527C483365B2D82BE148C7528E881A82E36F8884C7E884B83AE488F82A148FF1B0B2B418F41F23111915F717138F841493F9132138D4C1F187A78F855118B41175242AE54211CF4D14184CF11E193C87817941F24F2121194BBB1A938181E2583A138888AE211E849B331B33162A94BAB1D619D3237888C2AD4AE0A
-:80FD00009E824B1CEE522D4E23F452922924A431E84B824F4342014D111084C41184450245814401548A048E48641944044482441348044421440043024D11908410044503450245236822403284508430848532842058481FB642B2227164F9283C1F82A6462FF6F47A38CF24B731F3AEA3EF8CEC14F5685885F9CC784BF38F84A5224FBC
-:80FD800016F121215F32FB61353AF312484F12AA58ED488F23FD2C684FABFAB6B25F2E6AA9DCB4A9EC4AF77138849F81D511B881FA8A2CBAFBC3D51F25F57CB88F86F23AD44F68F8C8A82FC7E3C3FBC48C4BAACD964F64B55CCD1C6761AFD34EF161713AF538389F82E2A7F7624AAF87A3748B77AF26FACECC8F87F5587C89F948D84F47C8
-:80FE0000FF689C2F22F26B119F12F631F1BF94FDF9B92F96F6A8A98FB6FF12583E6B9F3AF6B4EAEFAAFECACB27A92F8FFEA1A81BAA1BEBD71895F125A3BFBBFBE2EABFBFF3CBF19B7F9FE7FF6262AFC7FDD414CFCCED42F3E8F4EFCDB9F6AF944E926BD59E142F24FF73563427525F53F5392C5FD3F17843BFF3F56B6CDF66D7E3F5AFEF15
-:80FE8000BF4CFC49599F81734DBDD5B574FBD85A7FD2F26C79DFD2F36DF97FDEF7E571DFCEF525E94DCC4F85F535774F86F6F2EEAFEFF7E6E76F6BD74AF4959DDEC55F41ED41F91D1495FF8D8EBFFFFFF5B73F5FFB676FAFFDFDC89AA9F7929A6F41F9B2B86F23B9D6F8D25CAFA6FAD278EF85EDC4FDCCDEDF3749F361555F53F1393C5F12
-:80FF0000D3F3784ABFB7F56B6EFFF7F77B7FFFFEFA8B849F94F55D58DF5DF9DDD8CFC7FFF8986FE6F66F795F53F75DF85FD5FDF5F3CFDEF6E4E1CFF7F6765A6FF7F675732FEFFEFA56AF6DFFD67EEFCDFDD5D45F4FFF9584DF59F11D355FF5F1D79F6FEFFFF7B7FFDFFFEF6EBFAFFFE2B2EF8CFFD69EAFADFD7272EBFFEF8DF8D25CAFA6CF
-:80FF8000FAD69CEF87EDECFD4CEE4FE5040000140040210884800492441008002018082821890281988121A082204288C84818842200822041C248248002818242F0A26DE01A042212438234428442108206124A68838D121904488D91111C5A814A0285C1128601826522A85246C48117487011B4242858161B68E1928521116281884841
+:800880003AA3330000008F8CFCC8C89F9FFFF9F91F13F331314F44F444441F17F771714AA4448F88F888888F8FFFF8F87AA7774AA4444AA4448F8FFFF8F88F8FFFF8F88F8FFFF8F80000000000000000000000000000000000008F8FFFF8F88F8DFDD8D8000000000000000000000000000000000000000000000000000000000000FFE433
+:800900000F48180000000000000000000040010000400100000000000000000000000000F0E11E000000000000000000000000000000000000000000000000000000000000FFE40F48180000000000000000000040010000400100000000000000000000000000F0E11E0000000000000000000000000000000000000000000000000000D4
+:8009800000000000FFE40F2800001400004840012800484001280000002800480000108204140000484001002148000010F26B52000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024082
+:800A0000010021001400000000280000808802000088280000F04EFE0000481800000012000000000000001412000040010000400100004001000000000087328084410128004840818102214860118002211A01148002211A041400B01281041480028004148828108204808802214800CF5506481800280000000021000000210014005D
+:800A80001002400100000080020000882800008088020000EFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000010020000000000000000800200008800000088000000CB27000020020000002400000000000040820180010000000000000022000000220000B09F0200000093
+:800B0000000000000000000000002400000000000000000000000000000000EFE2090000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000020080000F0CEBE000000000000000000000000000000000000000000000000000000000000FFE40FA4
+:800B8000000022000000000000000000000000000000000000000000000000220000F0D82800000000000000000000100200000000120000000000000000000000000000FFF7010000000000002400000000000000180000000000800200008228000000000000ABB500000000000000009012000000000000000000000000000020080014
+:800C000000000000E044010000400200220020010080040000000000000020220200000022000000000000001F22060000000020020000100200000000000000002082020000002280080000000000F024990000002400000020012001420000000000000000000000000000000000000000EF4B0D00000000A011000020180112408101BD
+:800C8000000020010080018001000000800800000000A02A003FA505000000000000008002000000000000000000000000002100000000000000F0B1EB00000021000028000018008008200200212002241200200812200100000020140100000000DF4905110028224200200D2BC1000060190042C041C042802401200230221002401235
+:800D0000012420A28428000000881002A04288FF420711008082040058800800122009824220044830421200220000880024190100A084000000800821002282E7530000282400008226A2410000100100C02100210028002901230221800100242002220048140000002004BE49008001184822000048241224800200282004002800008E
+:800D800021208202800122481800004824000000820042829E21601280021D2240B142C122C022181440A1842448222904180042C042122480A683202104002400200423CC22888008C68192C22C22041308F0F9D88002001421260200280040011002480000484082012166020028000029022004822482100286012130828008828F1C9B
+:800E00000D148003324811582221244A11311290C22842260222124200800600A029A0124200180042184022242204822084A28422424081043F3D064822132601208221450200231262281A0210A241402241928120442201248A0128802184086A8144816422112829744222B242082068222C0C2A04BF7D03182044A134C0421419023A
+:800E80000014AA041986C442284820C4121242882921012A04284800004A094860220000800822C04224002422C082DFA20400182820032221D0210823110140122189012828138A0200001800212C0121A0212502822C0242820000248820840400289FCE41A1142218132182237611E21344825822122D8380341225B13208122A84922B
+:800F0000A1241412582084014E9280012981A81825226526144222190888429082231832C22A948228488AF2C6DA006012284A012428001440810413AA2448241A240418A0242400B0220126028012021828422888282148212827241082240400428042E1760B48130280043041C01242622B14342024A112A021626AC1524842004880B9
+:800F8000044AE1220412902200A04812290625022482290424424A22240800E09C0A28001420120313040020040000000024002001000000120020942200420021002200002200882CE49D0C28000025A1242A84511212258112E2130400182021612240622C18A01412182229A414224824800216A28410A242880010028682244882888F
+:801000002442F1147100484800008811888818008021A414002A042180840140020012800418244022044200002A2404C20023820822005F6D0311000042141C03189A44021A848104808281011242005892200412222818328022322232226022243082004A02488A822482860C86F2EA43000042222C02002C14A124141002200222904B
+:8010800022290418240000240080028084042C888102880000008850214210328248DF3602004800000080020000000020140220040000000020040080040000000000000042216F150F110028422D4142A01439CC2139C11127111B24124A8184010000241280240418004870420225C2420082004A8288388200425022882D4288A82643
+:801100009182CFAF0748224848280018000042280000220090222C81018882120028160148282868800628B042820820841282082002229042143FCC477121C14180A4222312F1412148271D2D41271315113361A0411A0222A0644A44522200884E5252244A92122B21382227260029A481294882B4C26A28242BE424624E4290C22B4825
+:801180008E6229A4821C24F86985A0442A02A0441F34B6422222D521B5E1D821A64446C1114A24A4442AA2316AA4132CA1454AE42485A4151248123AA12742622B25382E222F26E626E22CA57B6AF62222908223084A8482E82C68226EA221AA2AEC38EA24FCC1858002E01442021CA4511D13881E324AF112321E522B611A81A1121A01F2
+:801200001E32A02321B012B812A14800188084A4412C0521002B224602422E42806828102288A424A086246862216F6C0F20028064324814482460224002800400A0241210224402244002260200230222482A8124022482A0480000288022088242BF594EE11424062A063B242B22181B113F14B1D3F543313B571F14B151A7141AA1169A
+:801280001AA1323E122A81F55242248AE521F152C22B515AE5217112F232527E723A73523242242F2204272925C2222B466A1A12B222082B64C8CAFCC2A22F1C7C43D222A8222AD832FCC2FB144AA668A02266F242236E217E711B151F15F9F3D11F15F753731F35F553515AA5157AA1333AA3372B665AE42425A4845E522F25F552522FB7
+:8013000025B512F111332F27E534A4732F2787C62227222F26F4B2F22F26EC22F462622B668A68282BE4482B44CAEC2CFCC2E22F2EFCE26229BAE2A6A68EC24F9449F141612A062A82B641A2661B321B513F15F1D3713F14F353713F15F553514AA5516AA1113AA3532B526AE72445C2C22B555E522F25B542A4111E112B732F27A7332F49
+:8013800025B12246F222222B242F2DF242122F24B262A4A621212BAC424A84EC2CFCE2E22F2CFC62C22B822B22AAEC28FC9D9CF041618A022AE226F643231F16F271711F25F551933F3FFF51733F35F551533F15A5555AA5173AA3337AA3765AE524B442F442422B555AA5555AE521F112312B773F27A7732F27C7222D222F22F262422F48
+:801400002BFF62F22F22F662622F2EBE8268282BCC484AA4CCCEC22F2EFE63423F2E9EA2AAA2EE8EC3DFAA07140000000000488044810400000000001800800118000010020000002400482448004200F0577340810260224826A161148AF4221119D422210112A0412880A3414A42224422044229012B12422D124AE222012220062B9269
+:801480004827248A02822304218A44012CAA48288AA424822F870C2AB41142B11162361B6127141B612F34B181F662921B612F2419B14229F342913AF442B1222F14AB431CEB22E414F8224216F1224296E122641D2E42DAD222B4D1E222B491F222121B2966B291B662B9817662B281F642821B282B8419F44282A22B84222BA4A229AA2B
+:801500004A4AEA22F44EBE80A441B0116624122394212B141B284A11E1241AB1422BF24291F04291222D9123C2912B521CA8D216E1226C182E4296C1438E2125B29182B49144B291061318B28132421142198212A1A4222324B2420821290427222F1C08200800008004200100000000000000000040010000124800000000000000004006
+:80158000016F85098E41120012282B141248A0781B420030122C25818B13A234122A044A2205232982A116B22921D72204190123A42814224002214A088288212D22282332C2A2C042CBA2803181209141C0212132334501182F142865222AA8482CB44128468114214822721241622822882110C2111A02231161214A41A2242AA42C2869
+:80160000259142146262882004428E61881F38483141D280A11426E21493124AB342A1126621B24368252A612E4AA1344E1246828225078AB42245B112B8823222172D8A828136412B16342CC14126E2118482E622248C32E22188422D622A9822628E42284E818A64B980110140010010E1140818009012822C38A1281B41108128022930
+:8016800001202122512212290118009200216022408144210A4002218A8402A73BC011002820014821482100122F14280948288022A224824231008001250248522200C012302200408254220082002922082024F82C29209221190A2E1110A121223B12112D121C083042A2188223299C111814004E21122225818C02322114D01243126E
+:8017000021612120B64292212260284829860224422B24A2A828FF930A196212112214121152E026110188244218884222802482044200182221C02280842502290235228102B02244012188424A026022424A82A882889FDF0512800A2A01C022264201272111121D82C822182C28A98216A11213484261160013E12408602340011C01DB
+:80178000183012214A0226820625022988022182212842222DE2B0110242101182140242281912B2A224212A22052400341A6A281B86182422E0240150234682532252821083421281042200222AA442008A420280F2971700B0413221422C011125A3121338421A2802009011208342621168884E2218C85211622AB5D1822188226412E4
+:8018000020832584864841229442228860261052228822F039481448001838268182A24124002001482121A22A044848001082C212000020820411122A0182298228A228148288109282A04848AA8406424F6F0E62002242368382C24126224883B8C281E122C422422E8168124A42C1A1AE4266D12266231622314148184EA222CA3322D1
+:80188000B0A1A11232F22F24C2E1E8A69121210029BCA22432C23022C8C042AE2FC011601213E132014612D122A1412683860120081218902220040012A02C481223A224292115022D114012010000E024A84820024824AAA484222822EF9A0B8014A143480028001823C212D2213A981220282204482C22748102304280242422346213AD
+:8019000091127052218865222448228084042CCA424800002A4443F2458700111001208604110000001488238481A14A1214001A84C41222004828002C02800120840200142420420288222D4200F0D5BD001800C0411448382322D221048089852285C252002850214001602524828023A14820A8421411298482CA41282642024282A0E7
+:80198000282180021C94A23F680C1B42281A04138102000090212800302219418162188024B4210416012521816111001124194422942219714211012B84908110118218223282880048DF860B129021E2000012001818122E8290111002345886021148289042C041008224388023A11224AA24428258224A88243482428004A0842008D2
+:801A00007BDF2024031301224A2303221422242081289821142902282B141E2118981C041220030000424819021301113021142821280028308210210222CDE6008004CA120180842101A028400182C8800C20A8828011928110822604120048000000A0848092812A84328200008822242FD90F14821A0224581391122214138201243049
+:801A8000232831282522011C3242207222220480122221D12282341218253241003042231411022908824262282C8282CC4188AFC108281148B01102008001118082022118124E81221C1182A81200160176011AC2211314816212190428221301140011826811208248020023C241FF6A092A2289E213E42268123AA452281F11031F346B
+:801B00001221A1111E131CE22328E431C421264192A11D22F022222552321E212B172B44781CA7361B5813A4312D324AF912632B2B624E626ADA3288FA21C12354228AE22424B42288A8A24226F162829FCC011F14F4A1711F1281B141A32519A2247A011732181AB282ED28B8A2B23229D423B661A2151B415EF12F1264141F1FBE517192
+:801B800011A14D3F22019252D235F242212F2353111396422A51312D6123581113F4614223F481421F1ABE423CA22F228ED222A2448AE614AC282FA3432101121B241E4119E434210123A231322C41B222B24158213F18E31BB982F122C2CA2B22BD224CC2414A85A1443CA63222262261237082E211F43121114A552117122D428A16622C
+:801C000028884226822A68282223B822C82248CFDD41012240813422482302230423044602462208482C3281421388328142290111C21921282248217822215812822A21084081440114482C22482248022800DBE6149AF5711119B121A5153F237152A23229E336F642621F327361B182ADFC2B182B126AAE8E2B391F21A53A1B1E2B6DE1
+:801C80001D422B1836E224F81342BABCC13D418AEA19FEF2A23B44EE819AE8296C3C3F2BF993E32F22B2C2BEA1AAAECE823BCA4E414A22B4C2A4222BA28EA12F282C8238421F1F0C1B751F13D511F231215AF373132F2585F322323F37F673621F36F741318ED22BDC6E612F16F5B2A1FEA12B2D2B532B6AAAC2732F12F4A1632F12E524F1
+:801D000055222BAE9AEB1CA8333E632F2FFAD2F21E7227211F3BFAC1333D333F37B6E3BA63F6A1A22F1EEA2AFA82A22324B422BA62EC22BA22FAA1A22BCA2B6E8AEC2EF6AD67141B511F12B711B121F151531F237751B162E626F722332B773F16B712B2C2A8CD3BD42B9A1BFE2BFF2F23FF91D12B261F1FEB16FF81C32F14683346F29386
+:801D8000D32AD611E31FAC247AF273323F2CFC23411227295E811F33F123633F22F2E3E33B623BAE1B263BAC37342F24E824FAC2E22B6A2F2A98222BC82382EA265233B0D1F731311F11F331215E321F37A3772B217AF721311B333F12F313132F2CF912921F3BFAF3D13F1AFBF3B13F37FAB3D11F1FFFB1B1AEE32F1AEC36FE32533F359F
+:801E0000F593D33F37F791B17AA4771F2FFEF3B33F36F631333F397893E327FB23333F3EBEE3FA23223BEA3F3EFEA3E13F1C78C3F3C3C12BE22B822EE22BA2AEA22BCAEAA6E8EE62AF780700000020010012A041241B412419840220810210010098420022100200186012408344028004828004008200CF9E062611A112126E11F06211BB
+:801E800030221A7422914125230880222924B14202C0421CE22224C41242244AB22229C592522A28B12219B12288D4328994828AE212A8684E8282242A44228862182BA42242A237B6E012B41162121B216E111B612396612B1419F2429319F24292112F2429F242B1A22F34A9432F14AB424E911F22E414FA22425E212F22651D2F226448
+:801F0000192E529AC2521B2D2F22B491D222B1917262B191F642121B682394212F1498612B84112F24A84A2F242AFA4282222BA42AA4A4AE423B6B80A4619041421B212314B14281B24299214A1BA1B4822F1429FA4211139B82338AF1A3521C89E811B82125F92142823CE51982A5293CA4493CB19164141388B18122942125012F1402AF
+:801F80002DA1222324B2422812B222843822CEED008280020000004200008800000000800800000000000000000000000000004001C7442048C111124836D11204D012AA248691132531431423C1124A3212002280D8212211230458482334122901A01221668146A2421428B08142420124202A28A22C4860222FBB01428A012812483813
+:8020000019D21201232823882898228E229011882B851B3C1C8134214811282D834E2113A2821A28C4A11B162F126118382113B182D42148C2412B24481B488024860C312908C041483F4C0A421B1C168181B421B1114431118A32A21722B6C38113DC22A21227211725982F24A8942A2135218E2213D122C2826213B741928246A2921BA0
+:802080002423E419C2222AA41648390A4691221CA842214842290886A1822C8C64142CF286AF00002818482382522211429200211188800218134201881904114611018852291181B1114222411191824825832284C681112022245A22800280F4AE9EE0122401281868261251221A142261241220018220A124921C02422C84820433227C
+:80210000A1928008201182C212C082209421248A84A848245022800A28A024F059B8202162118042B141812406704201424E8248282325D223041482221001112A092611A22C4A63338A33211B1227281B6836611386A228481C225232C04182E82821A8481C2828F8DDD61081C3112828221A86642642305324808C042B4800221CC881CC
+:802180002242152232412662121C329262C217228AC1221991223B6814B223A82C6890422C081C9482299C22292888C681005F42044A03001213441311221102421A0429218221F212434212280042001A081222821A22213211228816A221111012C121A642810C20022222006A88F89C1414423041806222902114804C22F962122CC157
+:802200001120C4423012484E239280382216220228001982C19222421A8846C182C081002221142220C82280480288425F8701282024022042824691310022A08242241222481216222196811A24822464284A829181111984210E21922A042522BC8106C888A22C0C806422860280E87E0D1981018044B111041221902230811C04122151
+:802280008220024001408104121901282122284021022C024601220040022822208884842E02CF4A0A1C2101222AC4212F12C4221B251419071A7881C2132A21052F28041A04181142143B4362001F228886A3281B121CBC22212218C2334A5A121CB822B8C10229C88129A824282823C8428868884AD869052A041400801141022C885212
+:80230000221A2434812448182229A2414E218228002CA12458120021A012C0811A22260848214880220420988220242A248842F38166001A02190211004242210021481C260452280012291101B021289812481200C0321B429022224622410200A028000028820000F0F87600481142111021042100002A0121864141C151181C4481047A
+:8023800014E0126412888026820210019082302211332414023B8422422304200400D02B0140410142602422008A148205223091688248E214C602C2222130522C01144226010040021C023180348228001C88040068A822821CF2C5FBA041A021000042210038212C0200200280110220280222603120082001002001000010120223882F
+:8024000028080000F03EB1001901281148264102482304231402582B21262101200448209442131E7241A2242A052084061312024242C041822848884242802CA4828280A2828AF2568A00002004808294828AA248889A82382242184212241002141A42021A3882190188C282889042284821B88E432C48012A1802290A2082048210027A
+:802480003F8E0A22004200000000802294810011132A2118132118010020880800C08188008214006018001C08001001240021FFD90562800220C42200802289A349258231214A013021141200E022048022828202582428002160124A8248C261484240012148222822821C02BFE604122858111021040024288022010022180021804194
+:80250000C181100190821420222884260419938200888008288008883081002182DEB6A06213912119046026284846A2849AA8152989E52413D111A462984E221A8584A1441BE223B421E21F62116E439A288EA4469E822C042D22421F122EF3414133A8C48683E82CC281336A28828266E114AC82C0838AF839F720C4111E112681F441BA
+:8025800041144821882E624E222A4CF25282212F1AA7329E11141B4A19E838C1411348A36286D322B582B2119352E81B2A924833F2A1222224DAE1343A822C388339EE2496822364142B844A842E2802AA621A222F28031AA162224A72410119766262242934822B1225A2492AF231C152D213B471E211413151311C285131299C811F223F
+:80260000B582E8120280A232CE2114482352223B182E22464123260A1B48A848292886AA288E22808272E208420026010024480022001A8402A88028A184A084A024214A12A224200442200430224818488004828004480080048200286F1A0EB041A131481BC44621247442B282B842A48A2B828AA8A52F3AD813A52A1B7C28DE828AB988
+:80268000D13812CAC83227141DA31714AE91CE911328E21EAA3F9E822F3C1A82A4421F12B313F981231F18984129F8C2A22B8A3F3894232CBCC2A8868EC12E81248AAA882D81DFF8015AF411511E112E211B4817141B442372427242F24262299AA2984E9237363F1DEF1EF6D1511BFEAAD912D11191118AB82178217321F331133E121F4F
+:8027000019EB19AA222AA229BE323F3CFAA2822F2262221F33F233213F287682D331F842812F2ED222FA83833F38F882822B8CEAAAA82E218ABA82AAA82AF2C1CAA0551D511F11B3213241466124422F24B482BC82A88A29AA9C5AFDA3F33D51984AA7B81F15B152A5558A7D41E124FE42416E631F1FF9F2F1CED18EC1EAACAEFAE729BCB5
+:80278000828EC2222B661F16F653411F3CF6C1C11B482F28FAC2E22BEC3F3C7443F3C2C22BCCEAA8C86AAC8829A888888B7CA0451F11F311111F12127141F141622B2227242F2CF8E2E22BE629A9942F24F973333F19EB17FF51511F16F7E1D1DED11F15F5C1C11F14E426F623631F36F4F1C32F2FFFD1F32BEDEAAEEEDAE62FF783E33FD5
+:802800003AF822226E221F37F673213F2CF6C2431F34FC62E22F2EF642C237343F3CFCC2C22BCCEABEC1AE668A8AA8882E217F550B0022002002008004000048000000001001311002002280082200400124004022088228800200175BA04212146014118074420242282B14B042215312124E2111381214406122141322B121210928A093
+:80288000212A0125830219D222992130812322483281002002800AA822275A80B511A2121B2146B111724293612F2491612F2699212B9413F14292AAF442B1A22F14AB4B2DB1AAC491AE421CE822E411F222429E213F22E419E222A5292E421B292E421B2926B2917242B291F262121B2827341B282B841B682B84112B84222B842AB44228
+:802900002A9AA22A84E82AF4B4CC001A66121B6146A121271419B242B181F2421213A83413F94222824E91A22DB1922D812B4B1CF9A2521C89EC11F822421E211DC2823C65112CBC11C2D21B69241B4946B291E22411F1428319B24298212B24112BA4222988B44208212B42212E42DF330120080000000000001200800400008008480023
+:8029800082000080040012000000002200000014F066C320440114567121021946C2421B412A0812482DA12113812194123232288092421D2292C8002D5224242C052551122138882222802828086022A0680088A02846F2C81580A138008A226526304228281A1462248818C24213B422C8414240C2421C842241C13211002A947190218A
+:802A0000223858A05210B341C22128243C2888880E8E2128281CC641225FAB4321A42D002A8532422716422984E5222582D42234312112242EC21F24A1163236226428C08212A221112B142522652517261572118224A1492214139681A82A888888BA22240C282CA82426A1429F4D0218111061181B41221082722221081288824A984183
+:802A80004E110000003B424AB22161185814002A9421212082828122022302224012110288221C0A28144A086F410614004001141222400129914121112492188214128084081002000024280021100222001002001400822724220020F2BB2C001C6112225833223261B08233228AE53488C142A8214866E214B11232811B258601144E6F
+:802B0000214AB21156125A92923A84C9426A3122882813738162152362142A8432224E8121422388922282242088061FB808141661129041111156019225A18123052502A09476A249121C813181006681E635122187A8259682747282820833021B4328114800101221082B822C24028820E2FC0B008082912222222C22828264182715A4
+:802B8000481B82212150211982B84122244841020024120022400222183C4802482C8232221B84201482428208218006BF14071A06522042F15222121CC2125E811B241223A24152223C91418029C2121E21A8C822302221AA818239831B4168B041220113E1284691C122211942810242461102CA4202008FF24241116116110040D1224F
+:802C000064140088260230422282222322C84212481C58214820512148502120094221280042103281248288260220840C24C248F0DB240018A01218000000101241018A0118C0414822860224582842224820846222242C814103212022822422880480BA830200290222F0BB4A1011C1212828346682C14146B381E1129482312F11645D
+:802C8000211815C2D1E011A868182691A23CA4252902321B5223E42C81C25123CA122C4101144A021BC22924C823C681082268428AA4862008245F8A012A2581311118801171222221041800484A2A03222B24A024824240C1424A122228022C88C2526012122722122C9861807222210840A2482D82009022484A02EFAC0E181A0200139C
+:802D00000440C2123462002A8168281502002641820415028A041EC1E24818881CE9188122B122814801004800145032002088820214F0ECBE001118133111211821211C88C191001344012028828188412102728014021EA1402182140100202A220C100223082221881B240000F066D6200100114E1224122828C082281400B0414121F2
+:802D8000240414200414181822143062001400408254122C0450226827141414C88014022240014F5248110178000080914230424A8112621E2B1229820180944280A8412032222412408184C42218481928862214018A22148128A48420942280D822A4C2624AF2BCF5A0421311212404202495114E81121908230A4260141800A81220E7
+:802E00002844622888B0423182188021420221822186833C22291A210424800860148880084F110400001E22141E41002C28024A8138512111208262281C5F12481989C483424826E1110A24C81A22249462111B14E024081148420029A2842024B842020024826F2205004800000000002B252001A282A0120014221123021816822428FB
+:802E800001118820A128820000008A02822012022426012860225FBB0B20081B41002631412084C32111134122B182E12421A1814A22A1142842283012001022A412425032822CC11319448164228828481011824CA2428288804881F8131610011C0400211221002424688002822842002902188029820200260388209941482002234278
+:802F0000012038A2280000150223843422424FB642D1116718181E411B242334211F2424F573C34ADB22BA124D81E63D31622F1C28A47F321BC4D829041F24B411F46212AA7142B211C9C223FBD2511AD4216F2A2129E41DA5283BCEA22BC62EA22BC482137C81A34C8E824EC28829F4222329AC4A1C48F2446520A11A171111D011612592
+:802F80001AC1227021F3B11117142F21F142132B221E132AF19131806E1A22522EC160221ADE22A2996E412B172CA5828E21D21F14A2B19EB235326324236438482AF242812C0C1D822B26F04222192AA426423C82BC1F043011284AE131C1422D112129A11823A1442CB241BC3198818AF811622B82E024A1311F157221A12CB6F14231FD
+:80300000A0451F12F2822286A124B06149B11241732181CA43141D6311234CF2216227122B84258114A24AE6A28890A22AA42E7F3108421828186814688046A248248200A0412448200182001021840811422A09000026012A082E8348228222008022883281208822A8243F42031B331B151AB131B7B1F311521AF721332AB3A296232BB6
+:803080007B2F2615A3316EE11F12D312D412A1637EE21F1894412F17F66141CE521AC3A22B722F2A7731F1D18229E41CA4481B6AEE3119F113D32BE73B666AEE32F643C1C6A2663BEE1B4EB083B6E2A6666E622BE6867362A26E6AF662634FF5051AF131713E311B731B193B322D313F32D322D122B121A2333F147711F3D2D13F17FE239B
+:80310000311E121CA1114AFF53511F17F561711F16E63EFE7371687E726E723EA32F35ED25A54582EE222F38D523F112133F17F763626AB663964127246AF663E26E621F34B4C3F462622F26E62EB6E3F6414223B462A666EE628F3D021B771B511B333E315AF153523B573F1635423F1CBC62FAE3E13DE21B542F21F1C2C33F1FBB42F60A
+:8031800043116AA6E63F1C9CC16E711F1EFC41832CB362A6F32F2AFF33715E132BF4EAFD31F11F2BFFB3711D112F29B1F2FEA3612F1EEE2EB4C3EC28BA62FA63E12F24FEC2C22BCCCEC22F267E62B262AE882BC42BEE6AEE2EFCB8FF141E511B321B111F14B171B743F563113F16B562F7E3F11F3EFFF1F33F29FD11112F1DFDF1633F1FD3
+:80320000F752523F14AD776AFFD1D11F1CFD61611F1EEE36FE73712CF6F2F21F3EFFB2F1DED2DEF2FAFC31711F2FF691131F31F1B2333F1FFFC3C32BEE3F2EBC83FC82A22BEE3F34FE42E23F3CBC43E42CBCE2FEE2E22F2EBEC2BCC2A8EE8AEA3EFE29D10040013C012C012041011448241B480028123011100100298112012901002A0938
+:803280002140032240022400482400000000F01531C0111A0228181982A121803222D02221E1142181329129023819A424201421045221CA025A12021C042E13926260341180068A46236814E02402A82A142222041F9B022AB51182B111A2141B212F1491212F2691212F2499212B94112F14A9432F3429F34291322D911B424E912E4230
+:803300001CF8214256E122641D1F22641D2E429AD222B591E222B49162221B292F16B1917262B281726291612B8619B24218B14228B2422ABA42AA4229A8424AEA22F4A5A4809161181986B111D21281F22213112D9219B2423B112F1422D1322AC391122D313B422F14C9521CD321EC15E222681D1F22246D1296F1225213E922A4612E59
+:8033800041822F1631912726136812193462112F249A214A082F24022BA42A3443212B24247F9C0B200800000000008210210800000000880000000000000000000010020000100114F076FE801381810120C3412B21282113C183100118182B28282113A41448282E424E221C82A1182221182A35121021C121EE1200A214804251125085
+:803400002166022D2210822204F0128514A018A82641E232142143C2811A8822E51811324113C6812C85B531A8121C0217281112184223222486021CA4922B1227121A48613E1952222CC2234822881728002A88B881C2224681CA2128DFDC4421A11C3AC831241932111C83C32112142ED12D13808482B1D2A2611EA246C141521D82E230
+:8034800016A2121218B0418283C141246E1318AAA12C134281484101172226410228236A22882CC242C81C82F2C8A82012010048238254228229A821204811E114318124501232388052214A1221B422A82421E02224A1926012113CA1482722282722282306881348834422C823902122001FCD02100180810448421922022512810138B4
+:8035000019D412011C034E218A24542180A421115288008210418182011021924123063C185122802A08822882008FAC4321221281B2214481225132C22D12136F15182D428A478161229E424AA818823081282C8432C3323928D12286A1431F21829132601A1B86132A168222A868218813E82846A2242922042822AAF44CA52032211137
+:80358000601148225012231CE2243211245682C4315621E321EC13081326249C2129A424D880CC122A14021CC21314281814134881E234828612918313A842A2231C82880222F01F9614008082160152422621B38361241901B840421182A418888211404232213663118280A12D2C012A011B28CA82C2620082C6224842C28280822204AD
+:803600002A088AF66545C0419041804282228192312428426248100200E25021130BC8800416721162144002A012C23824882821142022064A82188228848C040088EB9A14808224410120A24121111C242132132AAD8611AE5200482C2585848A42822A82045233B221C141B04112838482048E22281082642822803622602224C248423D
+:80368000DF2F022A01102114A14100423820880814242A01421488282042E31184C14220028820048001230220062048221802228008A04828008641C1312240C161112B42221E2219662326A1812CB411F421422CCE11F2484621B411C2C14A429331582B422219038E4222336114281F2A8112222294421922222AD222682C88282223AE
+:80370000AC846682280E4227728004141200181242121448428220092224802A2824022A2404822D12422924014A0212301166222882C2824082240424A0842200422024F8FCDD802102280020D6210412482C09128AA14113822424A22C2084961110012110A2A1429021281C0214238618022024288808288A228828082088E2FD031965
+:8037800002200100005A021811304242804401232401004816A1482025818484A228121400001324188102421130410000428002884FFC0F00184848181304180082242008828021220978224822001880080018A81820A984308148880000408104284222884220E8F80F192501901100181124489021001001601840C182142A11018698
+:8038000012410300001301C02130822823A224211332221924881822868892420000AF8501200226018280820180210186812921A112808604002005B0122425082AA124001420A584001100880088820080088240F1895C8092411C04304128112823450182124813044023918288252184A1821C68110020A358821848115811260140D8
+:8038800002268204482B24002394222110822222D23201000080810100008088021426010021000000480000420068A0240020020042000000002200F0FAA82004260114421C072A54214E110017211C01006211181CA281111480428241C28118203841881220882282042C48111162224227244082E42204428042F2E598008024A114D0
+:803900000012009081800A114A28012B831430621A8221848835411448AA6412188200581892112932C14A022219129221A0840080028A14022F720415A126152166144A6111281F1694413D411B88191AF1928111141C7341A2AB1E8119C2811B65148083643523641829A437AABE21ADE12A12E116C362296A2E29B8229C222D632B4237
+:803980004E428A38C32BA446028E622A04421482EFC10E1A05321B311819A45213E121E22281A14196D222B161A1C519B41184D632B562E313A43226A1621F1A051F2C994216B342A917A0155A32A112362169121B441D811B228E211113348114334421B882B4A22EA288212A2AE822FA8A14A0261901B01124B141A25218232585C1116B
+:803A00009A88E418A19D223E11118E42CAE82D04424AF2114116911119A5418AAAC820C8111F148191811B9DA229A64C172422224A3AA3482C8CA42230422B24E28AA422F0EEEB14E012011440011440234101340080120113011128111001111001206412C01160124003260326836432402348022C82C422800228EFAE0E1AA1351B3113
+:803A80003AB351A5551B514A85C6621B51122225B243A6155ACC3146F162A23F23ADBA1B992F11A622AE3126E1357C13C1432F29BCF1AB2216A1511BD51B15111B591B6CCE212AE212AA44146AE212022F18A8AC2AAAE62B266AB622A6666A8CB8A2F2B9EDE015A7711AA3335AA5511AA5442E213E222B511AE111D322A8CC5AA4D51F12AC
+:803B0000E136F162222BFE2B9A9AA112221F12EE16E434F412132D522F2DF571713AE715A4DDFABE217611B111F84163CAEE26AEAECEC2E026A6A22AAA88CEC2A84AAE2EEAA26AEE622BC62AB8A2FADE79141B131F13B711F331311B541F15B521F741511B363F36B651F551111B3117393B4DDA29E514F241412F32F233512F1FFF91D120
+:803B80001C7521E112FE716116F3534125F393D12F1BAD2E421F11B751FF1151197291B1D1F6C3232B663F36BA42F443433B263F3AB682F2838323FC62222B662F26BE62FE22A22BE62B62E02AF2878D141F11D711D211F231311F15F551511F13F551511F17F373633F147451F191111F31F8C1C1DAEC1DF971311F37F7B2B33F1EEF1B1C
+:803C0000F99191267121F121611F17F751533F35E534F5D3D12F1FAF731B451F1DBDF1FE31311F11F291811F3DF4C3E33F36FEE3833F3CFC43633F26F6A3C33F3CFEC3833F3CFCC2E22F2CFEC2E22F2EFAA2A22BCC2BEAAEA22CFA4FD8800100188001220012002008400242200442800200901200420000882082044822004880848204C1
+:803C80000000E0F40F221280A214A01612429012822C29A184121C313100B83288800246D12121C142422A2D8CA12922132112A1124888A08220040088002242484A220286714D0F2AB511A2121B21421B212394612F24B111B24299212F2419B142A9432F1439212F342BD312AB421CEB22C4A11F2264111F2264192E5296C142DAE22260
+:803D0000B491E222BD91E232B19162161B692B861B282B8619B26298612B8413B84228B2422AB242AA4229AA42A82E42DFBE052E51682E511A62141A5212682F34A1214E91682F348BC2913AF4428119F442B31B41299A4329FB2152B81F226C151B8286F12352D225E31DE22224E932B591E432359126A341660366036E838AE434AA28C9
+:803D80004623EA242AE824AA48A82B48298AF47CAC00000020080000100212000000601400000000000021000000800800000082000021F0635180820118004880C2114A9221238105223021981904522210A14210E11308182228220024198882420122148882139441882482A8824AA2282982086AF8F6C820052211722A458282855606
+:803E0000211ACC4282C67182E12324159222F2132889185212422341621E2A288599522119BA2101882196E21E31824E824A62142C0820A824422922882428E41806DFBC066252004238422268C0412E832A84819422184E212426E121A414B29612218864111F2883A6831B61981E42C0215AD212A882C081259182C621B48144E11204E3
+:803E8000822B86AA24A24A42A6A2488A24FEECE480012213A112482480B11166221AC4128AC48113E82422919248A81308003B42100219088032228018013022126A8942A228A0482182002482201A0228F027B700201221041C8146814491412008009229183142130A0048142005822C0580220224111848801202250234484601002868
+:803F0000802282A8486F8C446115111B812819C171481820AB1C2A71821181A51C281CB411A44880B1118C2E024A31411439F843128021BD122C84A128383F2298A18819AC681CB281E21438422C8898E2A22A88946248C84A22F213388041B1812362151A36114A03204C511288184A018E521B418A84242A810448181113748283A14107
+:803F800020212B82C12218239922881922C22186C1C3C0821D8248222228226888888AF28754C041001110210411CAC3113A8448218428428158219011132C8A02468124018E4330122C8C24048813C2211B48E024280C291262142924A42888882C24042AA44246F272F8802521041E62112521012219522219641242221A0AA223A45258
+:8040000018241A0C2714288258603B221061158A22F241120012000048469142112A2402202A048A2424F41C651428A04222140014A0140092E210436216602214822E132829C1A21A042A6824003081221E42A08620661224220021228028120248002E8200F019D90028800118382448200800214622241101822A0480048051222848D5
+:80408000422ACC2200002230824242822A1801822904802E28841202888AF2B226141AA2212890512CA1211C016A2118D2129C412532419E223E41822139A478126E8290412B612CC122223B7828482CC261CA03B820B62149220228484AE224C88148214A2A2CEC24222A2424F6F892A048001A6222111430426012802128243242C02126
+:804100002A840B1C02422302208D0429A4288812242834282420848428581211214820028002208828F886AE800412003042480021B092040021B012180188112D41884868E02148A2242CAA82280018806712182622642280180100A2202892220080F42F5C2001202184241182A141111021A8821C4A91411C020068822C0125014AC2E9
+:80418000810020888A4822480282469181204481242804802802C22088086FAE01868102C01118142446011C0C142426012219012C2A082221208A1402481411E022681420A2A1211840022440823421C08248206828A082008AB2220F181220028001908230428004314A1862241400230819228148028AC28240021682682848C21328FD
+:804200001621228212210A8A12010020082A04F04CE3001C6411134402200226A1841888008280882104809C414825011CA228002818200823088AA342808B2408824002422822422A440200147FBA06004800004A015800221B1880014880B1818709280020113111AAA4858A2445E1116212114042214441611822261142018810022015
+:80428000A42828F029EE0028008084128207288A82140200200821112521082C260246020000122084440322200A62004200202882280480044DDC40A1181412142562141651122C88C1521825A25826C2112C41A11E2081018E41C0131319A21233012113011C216133E0216821921081C84240432202242480828424A848DFC2048A04A3
+:8043000048221A34112200203281201581A1A4824220E614120229138188848104182E4124800400200C90C29022828228863142232604200A2966223F180AB0C16211285611E312B642C1611B816E415A22B6D2ACA41D81149216E13AD412AC4817181DC11C582216C1C12EB31F13E212C4A1427023E119F831A233F341321F2C93C11B33
+:804380001188C691813533813C12F341818A46A268228A9222688E2168DD4EE014A1192055215A95112CB441E124A1382CAD812CB182E12881F14182CAA4B1E21AE9244DF241221F15F242421A21BD423812922BEABED18AD421A218A82BC127112B1E2CA8461DA2826AB862B28308822A38E2628682A844886266F2B9F3B0112492111BFD
+:8044000012582427251B2123B182968333F883531117122B233BEE2D51393B433817122A32E2AAA4C21B22372229E428F5C1A22E5216C2221E9258428E13A22AA8212F1EF6832123B262A6281C2C84DC223242A829B842BA62A48AE2C88AF8764414421C0114482E83601248262161128A44210992288230914A329128230818281908989D
+:80448000422A298428D412081C884403244834482448348A44A2482CA248248220089EDBA0445213A1111BF77AF651621F24F742522BDCCEC22F24BF72F542522F24FEA2B23F2EBC42F741E32736272D98682F231C61283D332EA22F27E635F4C3833F29DA22F322211F137211A2151E222F31A7233AB1D3B44132816813F8634113A2C83B
+:804500003BA88AA8888AB882A8CAEAAC88AABE82FCBBDDE014A45820A1662F27FF421225F242522F2CFCC2814E622F3DFCC2C22F34F6A2A33F1EEE15EB359E82822988FC32728E82AEB32F32F643622F2DF663633F38FAA3A3272A27223F1F5431AE229E832F2C15A29AEEE21F1C6E28AAA24A1F1ED411A2C88E828AA88AAAEA28AAAAEE37
+:80458000C22B88C82BCE9EFC141B671F1134111F13F351523F15F571723F26F673733F3EFFC3F23F34FF53723F34F543D22BBAEAA75EEEC32F36F2B2F12BF6AAE1327D23E122FA32332F32F272332F3EFE93E32F3DBC12E526F633333F28B8B3FF11223F31F152423B153B4D3F26B6E2F6432233F8E3633F24B6C3B8C37CC2F2C2C22B8E8F
+:804600002BCE2F2EBAE2BEA2ACEAEEC26FAB44F161711F197111F131311F1CF413433F35F123233F35F1F3F33F37FBE3E33F3DFC93D33F3FFDB2B33F1FEF17ED37FC13911F1DADF7FEB3EEF33F3AFA32632F33F773733F3DF3E3A11F3DF7F2F32F27F572523F1FF5C1C33F3AF293833F34F143433F3CFDE3E33F3CFCE2623F3CF4E3633FBA
+:8046800036F6434337343F3CFCC2C22F2EFEE2E22F2CF6E2E22B4E2BCC8EC2EE423FC902180000802141820400483081002088220811421128209412280088800188000040012200008022088242A024828F9101228021612412805422E0242818022D828221482D814821408184488202C0C2142F22082E82E0120824282A2808682A2895
+:80470000081308822088220A22200A86F1A16D80B411A2121B2146B291364219B642B181B642B991B642B981B44229FA4291B22F34A94A2D911B4A1CE92AC4812E4216E12264191F226C192EC2DAE222BC91C2C31B292CB991A2941B692B941B282B841B282B8419F2428113B842A84A2B84AAB4422A9A82AA84E82AF4DB5C4081C651123D
+:80478000341A5612482D119AD412A1492D219AD412A3492F14217B42B3B1D4123192182B581CE122EC11D82161112EC2122E931AE2322D8198613C99614E931B284E9319C2821B2834282CBA816234A24622CA2282282B4A21AAF4A575008200000000811480020041400100C0140000000000004800000000000000840000214285022288
+:8048000000C04789041AC24289E82224E8141872148258321AC4412A54D2A6E18CC26230614C14126514561862AC42CA911113514233F82253198828C48186011916B189C1828230482400A28C28F8D9E3341AA418548AA221124D43481621C38184128389EC84A2A5248D842719DA024321C828901222884929E2262182982249644A11F5
+:8048800032445A82323A28AB25AA242118F216418F2192848E22A222E6081C84F2793D341A264D24BA41925A4624A7142B824A92821BC289C11423A64946F2448129F1924F146A2914E228C7142886E154787892412FA802299551CE3250125B249681724288C2E14ABA4162123C187522D842E8A28432228D4288C2889FD80D00149014FF
+:8049000040031416C881842C21A88486D8322211B8A184225A48A2891221144284012A2184AC28411554149AD2228186A8213C688120C18216A89492208808A82281229F6C02001880012302188C24824493412D8480EA83E424A241A81228A2468434181352182908488122441011062A98614322E124886422828800844622614422886B
+:80498000AA048AF4DB4414339211211A92442F42F41542942CC412C82F320889C8512B61276186E11841D1C2A58493083B82254182A42449A282B82AE14488BCC5237221A282312F88E128E484D8524298C112908A46D1229D248DE2A88A7128048B82F03837302234004626B44241E8242134422F1802884C21B22421E524CA41A9A248C7
+:804A000022A83B84111632212AB484A22848384922A4381722153482339A4262833D442119B812082D88484E8243F412C8C2882AA848284AF814914021812123C1245722113018A22C147143DA218C3582A71A1921B154287188014C924284429121201B886C4853042222F018A18646B281924862200814A92122922632C1288648B23D51
+:804A80000327C44B124885430C495416E022A1282038B40047A8708238422112242CB214420C1888502616C984263C412F1628915881D6144102144321981C1A1A042D1243418258249E4A1AE44481F8C98F40189241184E212C0384135484144D1B1426016D81219B162A012A9C287C818881686330184D3838904839844114C841004F9B
+:804B00008281AC428904AB414142822624221C841448420C46FCF79D14002606108F82F2122800C018811568816841548B128088048290434624324248802109002D843621C2821A72148A28021B28801128242235382AC1248002CF7145C242267424C3128C742AC564374232CD228A5221941B181429F982683D7A8E1A1E2262A2128683
+:804B800082483C4349B1287842EA626481926B4A1E416BA4D01CC919B6F4188529BC16D6826442CAB1288895844423A629422D48CCA281C149D168F89C55102401157824211142784A21416181984518588544415CC24888166854224C021E242924B124210187448C011412212842282A41C88112A1138128112871423414B812AF44A2FC
+:804C0000414A82F4FCCA1429A121514311992810784258A22A3C48148981621A2B4384128566C14A0384830A3117812C2A0489822298228830144CF9A14824851208E48424184588240224824562442288F07A110044004624B162614213228241148A88D18424581446C8418845815134509612660224CCE4656889207124A881AD4228D2
+:804C8000303CC244A989028912292841020084281688E1C8E28D47022112222410084D12482280D142648414842D416125D14144F1C5282E41241CE58214E622011E42414914084A421684841A883248444282421724898408468866414AA21C80027F3F0E409141114004144054188AA384146308142813A882C0880013024011011C2878
+:804D0000418824482682441183081C9A4120442588016B1898C3A84260624905423F5704967218638248418036421C82210441182722166292161829C12818200681141A449811004112C212141A1288112431261A94283A0848A02126A241440020789442F18DBD401C84B41482514925741C81052C38489B941D881CE84A344480688269
+:804D800082842358C2478844694878842178118828485A24861198C91742C12728C71C11891844D1581288924985942840B82868A8818481FDE710014C448824140881AC4808800200A22A444402808884044C82240400A8260100006220012319A48182202824188238120029042FF2480181238294182200441A8471A20341161122D92E
+:804E00002264412CB811021E2510028C0163318888252AE1442191112F46C9A2D861138181C8241D82849012240041AC624496066624A2164D9D50944AA241150848412B25214C0A448092441844494982014B282D48821F4421C886201441041C848264849041811E42481C225123121C624949B24352218A44227418028301874441CFFE
+:804E80008B0F4D112F187218744C7D4CB445F24A782D192FA417928A1D9A6D8187581DA21CD2415C2547184DCF8D8845B164F8C1C88FC4F8C24BB126FCE4D55E49CE1C82ED8C848A7481644883FAE348AF643CE8B7423F1B7188A3113F18FF1893AF14FD825C2F28F5C8528F2EB52CDC62E54ADB6A83FB2461472C8F610B23F144123B227E
+:804F00001B539C945A43F2152257424F68FBF178AB4A87853F21E911D461F5722A8BB21E8C1B383AF6799817518F42922197417CB55A1722B8137424A81B16F251944B2139EBC1D17CAB236F41EF9DE824D88279CC3C2CC296182992261A483448C3A4CCC7468F44F938242FA44F536197C34D11281A61E2648F467418F17848244AB28166
+:804F80007544F8E61C6F8FF88C112FDDF46B52A3F387178E248FA857346F3A14743458351FA19283CD83AF65A944CBFE2F22E2367D7CD2372AF1851915CA72CD2C5F47F423A2841F82722126F459812E8425FC422A4F8B78127A34F8124896CA483F5E0B422100C0810040414821088E4830812413483281308130831021840820A482C043
+:8050000081D0120888C08148224826214801340092A049444004F047BD345F78F4672CAF42F22D655F4EF63961DF55F465555E775F7DFFB1A12F22FA62423F25D587F814BD6D1C4F43F347888FA1D127F834185F44FE5E667D8C4D4E55F67CF23F29F944466FE9FD337E6F4EF76C576F32F3C6722BBC1FA1F3A273CFC5F3CCB43FA4C5133F
+:805080005E6A2F61F3BF32AF3AF26A4C8BDD9F855F8CA46F61F16E6AEFAAF8EA6A8F8CFD9C88EFA7F8B2F4145F21F433718F13F33D295F4EF675E3BF11B474F5587ECF29F61C66AF26FA7A759FA9D987F2133DBFB8FAD7155F94F811957F54FC7FF9DDAD9F36DB99FCA1F3BFB2F33C36AFE5F5D654EFC1F1A737EFCEF76CF7EF8AFB44541A
+:805100006E4A9E3EAFA8B252FDCC542FA1F3AA282FA9DAA8F3F2F6BFBFDE13B6CAEC25FD7C7A6E2AEFE7F726266F2BFBE2E64F44B498EC26FDE44F145F77F23564BD14DD255F56F611514FC5F5654D2FF5F7D4EEBE2E3F32FA5B7AFFE5F51A88CFF35BDFCF53FB479D8FB9F377E96F9FF565E1CF7CD7D7FA44CF55F778733F39D966F49248
+:80518000DA2FF3F5E656EF6FF7E7FB3F2CF783E11FA1F3A323BFEDF1A9B71F84F7A1A11FA7F71313BF6DFD4B619FA4F6DBD3BF85F93E3E6FE1F11616EFA7F78E8AEF8AFEEAE8CF8FF9EC1ADF2643F1F1231B2399F11D195F56F65153AF83F779598FB5F55D63BFFBF22BA3FF1DFF9D9FEFFEF8BBBBBFBAFAB7B37FB6FAB3B5FFD6FEFDFD28
+:80520000DFD3FAA9A79FB6FE73E3BFF6F67C57FFFBFD9656AFBDFDE657EFEAF5EFF67FBAFF1372BF3AFA913ABFB8F2F3F6BF7AF3C3FAFFDEF6F3FABFB4F5F3D2BF965611BF3DBD53F97E3E6FE5FD7C7E6F4FFFFEE2EF4EFE66644F4FEF2EE4E60E0022200218501448248A0440C24880440428C024200410E144029096100422A0827022EC
+:805280008304E012082602A041A048284828822021048FCC0421133122848D11682354812D118C96821E48241F884434A181112F24BAA1142848B1218418032532885921712222A84290C244214488867424024D128218821C2148721408222D96224E14824C62321F68092CF41124E5F2112487241F41364A1D64AB141D24AF14F99128AE
+:80530000AF24B985B44AF9A548AF3439A5AF34F9A5482D955F8AD418F9A54A8D817FA2F458216FA264192EDA875D4FA2F59824ACFC91242CFC9124AF22F8912C8B841FC9B26AF8816CAB161FC8B64AD981F24A915788AF4439B4AB94478B2F44FB24482D944F8AC4944FA2F4FC1A90441B61E5B211522C1A169E61AB141E24AF467891D4E1
+:805380003AB39584B2B1744A37B5A5B3B16454778BA5B1A1D558F123C28F54F8265216E1A27DD8F524538585CD2C2DDB4CF622D31D2C4AC92C2F16F9814C2B16CCD452D9C1F642B34F88F24A15433A424788AF44A342AF4439A28D146F22F58DF8008212000000004480420888810000000000420020880125084800210000000000200847
+:80540000001002BFED08126721852403248D412414A0483F8162284954841110A14233B81AB2885218558A4484113458224E152B1A4C934243613188299186828D24437264C1798624043C648C937C1894182E882EC28A5682A8C9A528EFE20A66E118E213C8881AC438D042863218838294121229F4B44283BA22C1142E4819C8143A840D
+:8054800068122D4A17848D1319C218A942181A7C438228231AD923839148272145621717288B8686489512242C684418123ABC1CE41228F43BF46025471C256481482242213312E884981A263446A9761481C81146E2147881EA82F14118C3B12174C47A114831538962B41F29628125D86341E1812AB8833421C126E431E492C4954F141B
+:8055000038A893EE4438C26416E842E421A2164682A41C3AF8EAA660121AF228918A826181A5C16420219261292941A44AAD22224C63822933842817281022D48491282CE14142C8244924C492B02241DC22A92187244CD2248146824452818D1116C88286A88482A97BB4D84882C43B9052286F220118488119522C1B4100A04185E48144
+:80558000644490281308004004146181C8282183240222B0228872224228D28126228828081B48A50425062912C4248C1428FA1FAD702114414122741AB1550239972846233F8225C8138829B9CBC34262AF422439B81BC227A4142FC2B4193454AF426185CB834B83882F27B8459181448628C8824D5888A48D22302219118AD18285D296
+:8056000048CACAEE1B8384384444FF3C48C211199221A04117854A4141B94272412286981A4D124E981229934839182888AA282D4E341C8224E1C1468AEACD42E221B411622849E2A22838884E2891263AA821881651288D141822874A2B2845D84282DC4864489FCF076644C2162410322D2CE24532192019221449B24498C928663264A8
+:8056800012899141008D447781463C824A731408A2A84344810826423214E2008823022DC17042181662A41BA5461808227F6D4F6156446898901252449C53141922C18A16B41444456A241F422812E441C8162062813A8842C948481C0242128911E4137422E1C6289884C08483A83443962264C0182A817142582A24428D34F0ACDC40DD
+:80570000088D543189840236614442CC0810881202CC02CC919B62244662C5421B8423044D229C68A16C348520382883A41812222441285024818982A4812C3284518866642844E084FA77B124122D13604813536826450AA9021118191428B8B624311821228484282C184458282A98124034A88143D412162208301E125A32114A1298A2
+:80578000118821C14C48183114E081349842448E37D062D3251118D481E64192417CD185C664A21884BF41944C3D847638646FA8C12C318B968CC1222626C45827861B28C7238F1814386AAF4468412B16218B282719867894788492641DA4CE288F21C24910D2C2992436042F48F5422ED6B884B418E2C4F8A76BC041F0241213C1128455
+:805800006B128CC212155818119880012D8616C821128DB44144488B8445C821248129044B128604421CC8241C81F264122818121820A421A998446089A93814810016684426D3FB4A2172842312746AB61C24024AE328828834428288138AB282873815124388924829DC21B418C24B281384C82210081C04884A714AD1489412896A12C4
+:805880008814481058122001412388012243FAB7174006188711142081116844164108D141424919412844081988686244418004308224481D4284C3082308128427418B182582B21962344046048654822486048321B1F603201A2832122A9412833A2118221A628983941286C3262489D181028C666428818C22C4241E48911846C8B851
+:8059000090161A9221812424002413A218A200428124853288100643061CD44C0B12122450419115C815104158811182B4C446588411420022443400602826624280048A422481C424111B281048C2241325311A1A222112A421122E188183918881EF470F2247232E11891438268444304841230E4094644828424B82A02416082D244394
+:80598000982888288A4248082574822208162838284332942D12502883B1828242042941084180054694E89F2C0250120062C02260C43C0215C4822842109841282CA1141082C84146D12448D94148A4482742824A8A2434981D46844CB44141814884821498932894C412D018219222212912E4840E42100400444224828A044081088068
+:805A00001814121C111109000000001015810418C08880022028141448242888B282328144866428F0839F301182841744C082C04144812C21F84B324602105224400841CC44C18826D822E44812CE4884482145882251411813322450874412143081C142228E1A288122411048019F6D4141084C84A11860648592114183C214902499A5
+:805A800011CA11815F29827884538129B84482011E814216024F1116F41469A212C4224D41C188801211941450424819A3182241491161812EC8226304FF910B43F2B12127832F62F1A914E37E2478727C28C4F627997E993BC455F5CA193D246E3A2F85FCA1165B252F619421DF32FA81C8C5FA21215E38DD285E251D4D872166FCF834AC
+:805B00008FACC494821F8141F422542E819C561EED3E1FD2F311A4567131F818C149F419B34B29182FCB721EDB94A11E6EA84F51C2988F4A45E131F48614DD2483F54463AC314A9D513D38279C6A914196F182425D824D43A535851CEA92511842CCF568242F18FEC64465E54E9816816F1283C6C24DA41D626B454F4E7219F31D885FC467
+:805B8000F4FD942E121348B2A6F12172ADC31FA2512140DC4298882AF38AA6AFA116649E4F68F2BBFA804382D1957412C8651F6113F45441D3D22CFA8A228FA2F1488816F4E8884B498F72725EF88AC44D98CFDA245C34174685FA28422D438FAABCE2E2CCDC2E58822372F6D151D318D884E928922A257291AC836B8185B28AA83C6744B8
+:805C00008F8551C4AF22F91C284D124C28D344D848D128BC68F4676600210084458144410840434883041124483011001001311003111002001440013440013440214803249220480200A098347F72F677231F11F21675BD2BAD3EA9F31D26BF16F365251F15F749731DD54F15F54B29CF43F969CCEF45F414442F81F1F5F68F83E94AFAEC
+:805C800022A9AE814FEAF2292CCFF3ABAA3E1ADFEEFC5D5E4F4AF2585BCF41A7511F1F7A8DD666F49A36FF697B1FFCAEB76F42F334B6CFAFFF69733BC64F55F498B2E762EF42F13C16ED9F7FC1F11A524F4AFE88CC2FBAFE2F5C347F75F636623F33F237633F71F2327E8B33BF97F36F7D5F73FBF7B5BF1CFF6BF35F15FDCBC94F69F9C814
+:805D0000C48F25FE9EA82FA1F932BC2F83BBA8FE111DAEC54FE2FB284CEFE77728FC3654CFCEFE595F4F4EF6F6DFEFC9AF511F9D7D8C56DE9E36BF25F3171D6F4ADACEF18ABE8F7FFF2B53AFC4F65C54CFA97926F6BE96EF61F31F366F62F15E58EFC7F71C5C8FAFFD3D3F145F62F63763F5FF1D17D5DBEED18A711DFF6B36FF56F8D9FCB5
+:805D80009FB6D711FF55D3BF9DF97A3CBFD7F52ECC4F4DF86A785F5FFF1214AEE4CFD2FBAD878F62FA31777E731F3BFB343EDFFFFD5CB74F6BF7587A4F84B7D4FDB1E1DFE3F294961F79F39393FFC1F39FB3CFC3FBADBFAFEEFF79F33BF5FFD4F492926F62FB2A962F6AF98E9C3FA1B192FDB6F4CFCDEFAEFF14CD145F65F436227F73F268
+:805E0000752317613F73F37975BFD7F76F7BFFB3FBFBBEBF3EFF4BEA1F35FDDBD87FFFFFDFD7EFA6FED6E1BFB7FF3FBD8F83F3A8E1DF9AFBEDCDDFF3F215576FF7F79D9FFFFBFFFFBFAFF7FBFC7E7FEFFF87AC4F4FFFB9B1DFF3F391951F79F3D3F15FD9FB87A5DFD1F98F9FBF3FFFEBD3FF99D95FF59F99EFEBFBBE9E6FE2F33E3E2FA396
+:805E8000B392F5BCF44F43F7E8D3EF1D0F49014941C8131004002440434805241904824C12410485048314129882008314066901004722B0242821022400480044842882285048F0EF4D7082534140784A72111418F146129E28141618B89444568481435928437348143448152214048C654530482128488E242E4112266381A988446131
+:805F0000412342D822E18146F1144821269812412941D852618318F0596CD024F51124A5F31124CF24F111ACAF14F11124AF14F1116CAF24B981F24A935D48AF143924AF3439242F147934F842914F82C4915FA2C4814FA264116FA2641D2FA264592E4A9E242DCA1F49D222F4912487321F49F248121F49724AF1812CAF24D141F26A92A9
+:805F800019F24A9351AF243934ABB443F24292478229F92448B84FA2F41721F024191B41A73217414F2EF111C8AF16F111442D111E6CAF727981D432FB15288F14B995F44A32412DB157812BB46F89D412F3855A1CDBA5ACA17D58DAD2A3E541E292ED59D282FD912C2D421FC1F628C386F448131F49D212C16CAF34C924AF763181AF743D
+:806000009324AF343134AB2443F2421247822B9465B842D384F1C7E500301400000000002800002800000080080000004008002400220000000000000014F0D86230421391122CE251C26527461682F4916482AE4A12C0D34D2846FC81288CD883364249247C11841247583886DE14C362182E482A7122A21255521C1D248F14D82951147C
+:8060800083612236E7A825B811649D2F34E848A42C424D22682F446886891AFCBBDE40B284D2149814482991187964C125322825D118EC6844C8412D112502928E288D812886B88214B842A121188469C1E82D14C14E151938122632881E2649E2846946278486082E1127A8C01826C21243B2887184C1284B184F1421F294A424467261B6
+:806100001264625867374B2153F1164A5BB4659822A34B7618322517813FA288F8412885F28C416247312A7483945A884D928D152B1293947687421D5425E19451611D8C4F8AD5825185CCF3482255385E2979E248F912C82129C6648D964E254D8A43722C313C87850016E41821712401872448002AF8814846A1484E818C744204852219
+:80618000B9420A88868848081FA2112862442B92812C81E22249342A28141D242B9448219A8298213CA149144B4A2C0928822B249E484A093FF20226117122032448214C3222501830488C44964414122190288442A4804404128C844202230245614121C082822B12153824A012118850328608869882802201D06C064A514216582C1D6D
+:806200001893E11134411173CA423C45E358B141518125C2484D882D443741197A21E858B48414711A82F44C2243D122E446C81C85E418B38231A32E124F2AA1431B4246D442F351828F2A012B1E1CD44B4CE424E3A3A8254F25F211A68741AAF498642CF8845D145642532824144829342414A661843B14A119D12561D4118CC18AF02218
+:806280001C1426F848864C0421F044288741C0C4C460181931A712274123631866943F3C313818271C88ADC1109A82299542493A14384902DA0319129431C483D11A61113C6422441160344F88240425622444491431A81C4421681447A1481227244AD222C212C3227382C41222A8C8293612E04C2238222AC1414425A5C38B2183FA84CE
+:806300003217218CA2488B1C88EFD10B16581458124828A304267448A3244193353415E2E834243943A1347160A52661244628221802438C41C1D417449B4816A2848F2248C4448A128A8891884331122248450824124E24168A0183F6ADC2143D448C924C85548229411154816902D72260B24822468804A5B4282C542141284968418950
+:80638000B22C79464A424218215168288354124211612C21A1242C128CC8184D288A674A4098182D22301841DF340E282411330220523A42908100214C1101C592888081094E886308341880012688912A222B124100288A61812A8802181902241225222444044A0800CFBC45F261146483711264842B21A71455CA44AD44141D221324F2
+:806400007112F2A1442D443D66142D5C3F4122A541C6EF24CA4412322F21626549648290DE6AD1124312988B621574B29C2A2B814228258281D1C2F428C42D4420E1C2B49282014D621F2709902145D18112022602871219B26248D828518546459828169888228B848285A1124C41C8252578884428D82231182215D424EC41828812A696
+:80648000492029A22189F9112888842C21818A544A1283048941F8B97BC0212C83020000111C4134CA60A42C44A285A028222E41824800842883116CA84308824E884D42828E2421448361284283B118141238D8A368140020422285C56888F0BD3F8001C7212412A143240181C8133122311A18140870468171126192E024311410622821
+:80650000426048EC02002078280221824220A414801114666245822803850400FF484221045014812185722502499228904461A028A01623143242A02599E1A88149622440048354A2205C422542328127424782413E448221824A0A48228820884CC2888860826D46C0282D45411A22B4459222101812C2289908C42122458821684A43EF
+:806580008268482D154E229014460620082C88028934A800204802240044897211828448143A684810CA448F5E0E1B48252591111CC324488394280027288481114E28438838962038848C011141284008108A48028228902D1084140443482262988049021A0200A06186F48DF30083129B4444155841C04124191401468131112420C47F
+:8066000029404902D021828408114828482604841004142942111824B422911923015048A8252296122B212B1421489F160F2D1C80440210381444388908C0124A1834184184208115842484C4884280DD84E8640118414A9184189018828B12288901004829130CC1464804201264A27FD30E211214815782D021C263281111225B844420
+:80668000812C31248C0210024C488F11185148294845024216C4280032484AD218D443C182A018260215448332221004874A88888526F82384401C88942200218141430844801331C946B182118848815212128949810842891181D314926888CC014800201282CC284E8844D0C203209218160822CC3122F0BC8EC04497595F42F1411807
+:80670000A5579127549FF5742951531F44FA83484F187A13928A47626F81F1E6886D221DC823FD87244FCEB819F8C1824B4634C7CC2F44648845344427A28E24CEA429D52482E38254423D6829B124A2D89ABA22A881CF6CF119426CB164E26AB86ABA547472B2282198444F8AF66495147F36D1A2471BE28153465F82B626B146E2A1D13D
+:806780002AE42152E8CFD47555FB11718BE2389E9827121C4A51394D15A5B912F822482D5287881F55E4B8FCB2D2474C2FA15C2C47418F48E84BD8633211CB8A8F5F2C5D4A25BC98F28A5A25D1C4312821A1648F22F18C784E82482AD26AF84F13241A3224A3F134275B428F26522828C44B2A86F928813B44A058AF8C687C87618B448E26
+:80680000265B523ED81AC74A49D4F98322D124989E218D2C89BE6CB122A4882B4225D81CF8683A645D228D5E56EA24E4A4B561F2118827147BA18D8649F294182F88022FC9F67CB88FC821F4E9DC140080814401188081C411400710810244928B241242214C1223011211122112200512204143E822080026A14124844212004412441019
+:80688000F87DAD343F12F274349F61B132B354F64667ED2E7D372FB5F59236E7A5EEFB2FC87513F1D3EB2F77F33AB81E184F47F53E3CEFE3E34BB8B4FD96864FE8E8A6F44654CFC5ED81F514422F38F9CAFA4F67F77467CF6ACB12DE9A4FE9F885BFCF4AFF8496EF68D966F86EBCCD1CCF86A1AF8F4AF8D5858F84F474544F4BFB4CE65F86
+:806900004438132F6CE84555446F24F44BBA347D355FD6D668F136278FF6F66B6FE7E25F32F1577F3F48F2491F2F3EFFE3781715FFEDFC7AA8AFA7FF16166FC7F5323AAF93B7B2F89C914D164FC8F8E1DA4F41A2449E1E87A12F25FCE7F74F41F5786F4FE98EA1DD8FA1FA9BABFF5AFFBCAC7F66F94686EFC7DBAAF54A1C2BB7BF49FB9767
+:80698000873F51F33636EFC7D54EF85E8C8F11F7D8DC2F47FD3C85CF24F5862D342F32F237739FA1F2173D5FA5F46E6F77E2BFB3F24B5AFFF2F24A461F3DBC98F69F85FFEDFC3233BF19FB36366F47F97F3F7F56B6F6BDB4FDC4D68E82CF72FE4645CFE47412F24B5A1F3CFCD8CBCFE5F4647E4FEEFED4C2BEE2CFEAF92F2FFFD1F684970F
+:806A00006FFCFD1ECE4FE6DFCEF17836BEB32FBDFFC78D15F32C2E4F4AFA5E56AF85E563FB72FCEFCFFFA4A44D1EEF5A4BF32361DF72D6A8F2172F7FE3F3272F7FE4F2352BBFB7F63F3C9FB6F6F3E3BFADFEDD9FFFFDFCF2F1BF9FFF76666FCFF977BF7F58BEF4FFC4614F64F4C6CDFFF3FE4D6FEFE5F5C2D2BFA4F5CBCBAFFDFCCE5C7F83
+:806A8000E6F786E6DE422F2AFFAEBEBFB2F21F6F3F13FA47F72F69FC74FCAD5AAF27FF39FBFF9DFDDFDF7F57F5E6E2AF8EFE8E94EFFDFD3AFE2FC7FF78FCCF55FC484A7FE40361B02241582440410884A04800400816482409824470480442504820B422280410044B8250348CD424A84141122486081214400485040081F0E9B1A01A44E8
+:806B000014C48F16016215742A7281344828271455B842388421AA54224B4314221C41CA8147224022C4828644024F820821502228148A62224C52281AA4821A140825215A22B22CA1418B8480EB28F4DF78C0431F4152281F41B248F19164A7341D24AF34D141F24A9119F64A9359F44A9743F24A9143F242B1478B2D955F83C4B14FAA89
+:806B8000C4816FA2E451F2264A96E1A26459ACE449F2224A1F49C2421F4952281F497248F29124A7261F48B24AD141B26AB991F24A9251AB944B42AB944B422B94478329F9244889F9244ACFFC073CF4116485D341F248119E24A7341E24AF34E141F24A951AF24AB349F6488353B24A1AF44AB143F24A217D482F14FAA4481CD983BC18C9
+:806C0000F226D296F1215A87492D519E252D5A1FC5E2A2F591442CF5112C8F24E149F2681315FC48121D24AF4629F84A2759D428F924482D924F82F442928429FA224829B924B5BF060000210000000000000048001301000042000000A48004000000400400180000001601BFF80A5E24248061128F11B42245A242230A172219944389AE
+:806C800024C2162E44121686C23C30A421260A60628A9288495622808114021931448968221827628226A84B29E889642128888342220183B248A228EFC34F018E211312FA14422815B84112D829248284788814E139A42413A9482F18C6C94A68D191CE28218F42F12448295838572481B84DA24E231CC13437A2903827224E814B844EC6
+:806D000098D7239612611541948F2154842DD283F8AC438DE4CE141E8589F4A451144B6146513216F841329B432D611CA2242E89411332E35D888964126246642C43FC82633E4447814B83AB4A83BA12628629F888215D889B242C6B68873213B442538158C322289AD64F887686F98C221F22215E841D18872747A88F22C1882FE473E46D
+:806D8000B214F214297E882FB30580220241901848A5823422482448149AD46231B11813136888141508218514C4242522542620228541742212E124C128271490121A92128AC4119A4402A0483081818E484A088F5F0147120084228446912183A241145012822008304211148CF44824801844019041424004822F2258412342C411001C
+:806E0000118928118202828D8100222502422242F0F29E1448264161228F41641112847194C0118C7C4BC4C51C7425E214DA78F248246F843125828281286226BC4EC8261E852F85F212422E8C6306A216E218E184B215F49621AF4885E2D49A312D4129994B48CF23BC149246433A6489384C478B4477A13021141189D248D18121146851
+:806E8000C21B14111813142CC881282F121854161CA142828888807428D448D4147246C1184A61224C8462381682B111C41123F9528928EE173419A2812F84B881F414481E264B2427484942C8488306BF7C07468402B0420216D121421108112D88397C44811465241F8462A6C9541CCC06844932219082428E122C46948E8E2286C22477
+:806F00002886952846742114348881382C0414812E82002223A48443B2145824AFE909AF4651428924088F6811D42181E314318863041C0325B22401114C150C466244C22B832D488524C32218871212861211222394848929AC69631416341843848902214842257814423A8880F4673D10094B4167824B4214167A24189124263124B062
+:806F800048B84582B34888111C084C4882323C492892522D4183C18521A5142104A145D1818244111289A421702419E2A4128C42644358222C6A442247888E810010E11108238804420016D982110600418224188C561888501820522444C014A2252463182002228B1220E398612824002F48A114412301442001C470474B62154485F4ED
+:8070000013246269D148C51E5847111D28A9C71837855944E288117484D14895124A7248E144F848A647B22E422E4E1169938726FE388682372690325352148B818F32AC418D621B584D92AC511823B18C941467221664615226A621866C42823FF50A472AC011844115582219621268881121434822E34422110885748408220081185EA4
+:80708000248412290141129C88048E2862122E821741C12880C68212A304422A544812898814D884F474C2101114912111421240020011156434488184412CC24117414D1230818A240248814820048E51411C22B23848784348884888280840642849129442002002C6F87A832428214423A1612901432152144D4252800C323C22D69256
+:80710000A448882608A68811120483B822D882824218024E28612958224932844DA246948226123882A18045028308122CC1C4C1F0F997148A224204904B548418239211AF14C251214C1184052C914C18124044D24822F5244816025289C2168B242C44289428849022232224041422204828F43448A049A08200F0A9F79044131163C8A9
+:807180006149021C3242848888C0280021590840082D892449642180011081241234284182209424802412514242914991182188E022014F821112B88221F253C4008321D14324822302610000008E2581288752A681E8180267122800435848684142458804148511430284513688628200113089249828624CE888E4C4084714FBE95021
+:80720000825100134102198646224823C8A2002261402814B8841348484144314215484A98428429A28210382185C1C1A31111184188C11A114A3128896444212218802172B60E1D1829822402144210E14A052242199181A1218B41C2303110021988820AA241193A8482408124821824082482412418860444204112D8480825044218C8
+:807280008FA30352821889819C88504830C8148308C1688521681823421518541846F1224811278417865100800118909419B142E9148813C11C148486411861A11481208112081224841F4A495184244810466442504114484426821204190424242248290249D148C48120D24111D242C1214912549221490400482410045C239C22444E
+:807300004B5828C01C884D6830C2F04B37141D6217281D1447665D458E652B168F2312625C276442297488B446F82C444E884D11FF227848E81EA6332E122F42F4C4AA9C9648C5B7C47E28DCD9728A768CFC2C6E2E7866F582E18D123F8E52CA2F14763AFAC1C49578811AB221C182353443CBC78F827226B8B2F62C244B4329E81438DC3F
+:80738000BF170941275B45F11221BA31251117444F53961C17119F1966271DC11E222DA38F33F482225E29AEC52F81D1D94CF8882BA5716286A3648D153DE22F26A5122A021D812C562C19D848F8C522A25BA42E284C98228D5A8F39F81D18CD121E128E3E6F24F1D8424D881E982B988FCCA21984FFE942F27215C97312D289F14222AFC6
+:8074000085D144529417243F82AEC82F82D811D886D151741198239FC6CC447D229918F49DA5511F42B41D786675B168A24D11824F84E625354256368717436F9AE221E512F81D8A5CF41E122D61C7421F18C82846E181F888CDE0418CF3481486F2482C4B418D442F22F672A514400183028583B42881F42812488F3221D8282188914108
+:807480001813C814114A12011110211523150429086142144081D43488C413C0138234821448002440022048F4F7D1A06923F12D2E7F71F452D99F9CF55D7957713F977469FD3D791B4176F849488B5D8FA3F4D1822F22F2139BEFE153ABC712CF84D44658C54FBAF23A726F52FC8414CF4A61815F88EB82F25C394B264F65F75627AFE1EF
+:80750000F31E7477C265F5545A2F6FFBD3CA2F2EBEDFFDD8C98E84EFCCFCDDF2CF26F2CE48EF4CBCD4ADBA8E924BCCC788AF83F41A59143B613B55DFC2F21F4DBF1EF46373FFD1F31D2FEF17F47737FFD3F79A4BAF17F2D3D32F9DF5B1E31F3DFA7B7A1FB9F9B717BF96F4F7D19F9FFD379DD7D24F6AFB5A326F65F7CE7E8B7E8F81F22559
+:80758000336FA2F25453AFAAFAD4D67FF3FE9397CF43F76468FF97F7577FAFCEFEE2FAAFAEFED2D49F9DFD313DCFE5F5D6F2CFA6BEF6FCFEA64F4EFDA8BCAE946B4CC78C8FE3F5B8E5342F11F53261DF63F23F3D3F14D673FF7F77FFE27167F57716BF56F62BFA2BE43F25B5CBFC2E5FBFBEF85AD33FB6FC4E6FFFD5F526619F9CFEA4B502
+:807600005FDAFA24AB7F12F234177F7CFC3C444FC3E4BCFFB2BA8FE5F7B2BE4F69FF97E7BFE9FB8F2677C67F7CFC955E5F627287FEB3323F4AFA8B893BA8FFECFC8F86CF27F3EE78EF4EBE76ED27F7B2F46B98CF489C54DF2743F3B3743F13F7373E3F77F27341AFA6F7577F7F74F76745FFF6F473FD3F3EFFC3C1FFACFCD3D85F7AFDEBE8
+:807680008BFF3EFEF19B7F76F67D7D5F1FFDF9CB1F7AFB8D8D4F77FA57354F36F6EFEF8F677438FD24336FABFB75767FEBEB4FFD3FA73F79F9EF277FDEF6FFFF7FF9F33F3F7FFAF2BF3D1F1AFA8B997F11FBDDCF7F7BF938BA6BDFEF6FFE66DC8FEFF6A2C44F8CF5CCC44F22F74E94A012B0240123024502000014400444484C2248044428
+:80770000C0244014C224000000000000430200221220014024813211425048827F92094591212119827111241231441B2842281061245128842533211081532446014A12242862182B42560419D224A4292621D822F8812442442128291811022F2421B94202272426C824A09494C73DC0431F417228F3112483F41124AF16F11124AB16EF
+:807780001F41B66AB911F64A9153B14AB935F44A935B43AF1479B5D852F925481CFB254A8D814FA2E455F2245A87192E5A87592E5A8F49C24A1F4DC2421F497228F3912CC7261FC9F26A831FC8F66A121FC8F24A9219F24A9151AF24F92448AF247934F84292478229F9A448B84FAAF4DE6DC0431E64341741424CC2111F4114F211444CC1
+:8078000068491C3A154E815B43AF34B8B5D41A3831AF5498478D917F22D118F121C28D245F8239C82E5287182E518759581F89C21A1F4DE23265896E131F89E432C12C26C328741D287CC3282D9347824E9247834E16478289D1869432AE58EF810430840000002100000028000000001800000000008400200211800C40010000000000A9
+:80788000F07F33241062421E212D4499F1421C53524B8E2868C8A01816322513986328278A27185B6860888C08602212A2287044084AC21429C23990AE818C5842260489A884AB85F043888976C6A83462A9082E482283F8AA6B144B528E271225EC92082C628526925491257843724156419628D248F98B444CC16C8C716835644C326338
+:8079000083C41C2C7254D128644F1AE2814A922110D6822265426B341F81226D8E68360823C914121A328A4C782492248AE11884F6F52CD04234C34D324D12C9CC192F44F2462175989C4F8422E412D4413C122F5248B128C12869D16BF824C946815A28AE5142C3D2224121F6A1548B529628D62362849B212C624B28BE482992B4893253
+:80798000EC8E627E8818B921F642881E68A8255826846AE8A5B8EF092AC124211D282601896181268246638825224165812CBA85F44285A6A824128D244D484C0A8118284BD28121442290142865423848C46117C1428A04164822E84468816C236844438AA24B20F2FF150050144C220440144884012C1141052502888011C4142C044902
+:807A000044018F4882012081240811100112830400002110020020028002DB42142A14473812F024134964121C35282538681C2891D260C222274585748209822688D88232342E4413B128D4415882288544E4642182B9A6417821046C2222A29419E284014AB12468A4493282644BC14F823488481FE2042811C42922343129443449281C
+:807A800023C12824122F54088362224C5CA48B81449624C6822E4854E04992184C082A6184433844141879022AC14841290280324210C284846932824123289428D01E04464294414C0141411322414C9844B6112101250612401102842149213364914A12110A4484122982A8818445012880E24914E1820152284200284C752628C85229
+:807B00004F7A092128444420814401122521245584402904248D5440146812A4284381A221228A22B2227444981488182341B824218344147414422221019012494102328844169824CF7E0D1E224119130845088443028C22110891212E1CAD1222408893248848819014144121448180742284821242522180210A8285024C118422A2F2
+:807B80002190824AB11802819F940A1424C0121A424108151804002314642120948CC024004441502810284162814426021140942484848B284008320081409288C116487824084C44F2614E1416D12482931CD04111187921C8169C227518724854A119B13654A28B28AD44268852481D842C648241281E212AB12248E842E4E2B444F196
+:807C000022852C825382CF2261834ACA148216E62178188201412F21D284DA28C218A3236A828925527370220245012B12844210040042404418A84144124443812252483018691118046F2211080012414C0211A1302C200270140880311420F8481443415484BFCB0949410490120000481011184414A414004138000045E84132240066
+:807C80000000C0121082020010082110080000008504007E9B0000490144411C541222112011480884C4C304200144442480711814022C02000081250280312E416021002081880882811A4C88026FB40D444448901200118006518141C1008481000040443834121200000018212002204114081840080000004E1821005F150C8D188BFB
+:807D0000444A941410148454125045444B232E2822414E18444C14E421721252224B111A31942143524821D0210250888578484218120224891244524465B424A22232828280186868A592221AF1D737000014400220044A0180010000004400000000004400000000800220010088820010088184843F9202C484498404000000414C831E
+:807D80008242020084101292168C81298808104211414168828C24840400004046C4241A82420210088810B242F15E664028A4464400002941024480020000002421841841884440086012C024852882064014028C41225844982800001244241002BF3E0E80060000220045148202001024111454828001880044404401400848000040E4
+:807E00000240042800000010984280F13811000000100218001008000000000060424100800141204224010000240020010000000000F0E8C4103848601400000047413024622200004056A424121292862808001111118181832424C422000010143424222218000024402AB13A0F478184484C240200804144584428280010088110127B
+:807E8000A212184988084120425112404888840400002058484428280000008121211F36038001001008211400242024010047820010440400001004260200000025021812188886084002828422814014FC57BE000040120423410100000000000000004004400422001210040020018800240000008482482074FE0C430122558102816A
+:807F00002C3113A011301821420040382C44002022024144701604450228432103004121212381E928188808200820614284878484F0B92500000025022382C412480000180012008508004514440485044CE242C2220060420024A01240A2111A2828012421508885A888106884AFA80E44324144401402181124812005244004C4455843
+:807F800044504CC1400C00000043220200282140C2180030182182188008108814944C3F8C0B2F22F212222CB11221B112012C512239F812111F11B189698887848F18F448484215198154C985E884644447424B242E24222E2480524445E642F222222F21C2122B111AB892092C592229F812131F11B188E998D888B888F44848C04880A0
+:80800000548885B844F46CC2F026262D222E123A212101142592822D1B1F3191D11F897818D818B44824641415814458888CF64844C594242A222202504245C4346F22D226E222A1131A389282502229D8B2F1111219E989F818888B48832C4408405C88686FB3090000000000000000000000000000000000000000000000000000000026
+:8080800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000022
+:80810000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000A1
+:808180000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000021
+:8082000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000A0
+:80828000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000020
+:808300000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000009F
+:8083800000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000001F
+:80840000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000009E
+:808480000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000001E
+:8085000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000009D
+:80858000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000001D
+:808600000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000009C
+:8086800000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00001C
+:80870000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F9B
+:808780000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF0E
+:80880000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000099
+:8088800000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000001A
+:80890000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000099
+:808980000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000019
+:808A000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000098
+:808A8000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000018
+:808B00000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000097
+:808B800000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000017
+:808C0000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000096
+:808C80000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000016
+:808D000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000095
+:808D8000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000015
+:808E00000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000094
+:808E800000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000014
+:808F0000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0093
+:808F80000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F11
+:80900000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000D1
+:80908000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F4049012C84A442322A34146F1201834244464244420283210145080080810189116822005082502484844341221222426448246444C02620291128D9464D62143E421668B455181CDC84443463809214812A94242CF224182E1C322D9C
+:8091000022608123117212E222C1128C5286838142443C2821898141381A444B1289C224439824204A684A2228AD36188E3268A928D92EE4C509319C0420140E834382B1150284840028262C0126088100001824128422C1242400125082A11A2211042822860486141274122A0242890183F4B61580847312C8424400007420323480442E
+:80918000440484002301851402229022C100302426082C018001002486020086084C0228182622088398847F1C0D00148180942841800400606228241828238101002424122184001800004018084441CC22024400008002441224207112F2232600001415084C846446280010041042422412021229011800182011088400840041100874
+:8092000030240028412824100429A82188007FC50F001081040080080000000020080000008001000000001008000022100400000000F0F9C50045115C1A0084814CD62463824281148121228E614C823228A04147AA442120638229628136028CC822174830812213E184C18210C1140081101822B84C5828A8C0188D146CF2A55DA0421A
+:80928000212333348D6127D41AF645128C210813612481129621D8825182CE1129352983429148156484275448516332828122004B212614280816E94491A84A7AA8412838DA96B188832233B246BA44A12C4289FCAD7F00157638922D8D42D42E48C163E548312A1C1558818CB182A1828E7B4D28A2A3C3288CF38C224784257448C2448A
+:809300008423921832802AD241684347128912E181F418824B411F82E848318881AC884CB822A8826E868E122CCE148961C1472A1FC3062E421024611248181B418382026024001124001B414211421110011B124A52254CD2221848082180089840018066120016C89116081698288442AA24C4481FED0E291111A2216284B01124026A45
+:80938000E181A284481081229132323011890228842811E0A20420088001AD81842A68884008281C111118D4182108009200006FB14921961222A127211B4112C95218FB2589F8428189410A2F85C8D84C628443A8858D24431C714A12714A624185C2151EA42F6126A4782972C622981429995722DCE125E8856284206D11814364853A81
+:80940000EC8235A48B4222422E4489F2EEFCB0425212212332128C01DC7521521826A8618C88042711D8411A34B4D285644211A952182C120426E84228A3848A42028281905122188C618480B1813118415381AC2983256A8D222042F811FE1418182883C16219248142B834E425788128451832C88322332A0036E184084225C248165152
+:80948000281D56182D46E02481C2D6241D94A9B986628845E92488E3844221144198488C8124128402424684F2CFDAD012A14119D21823142244A2148C24F21422121E2C81C90216D24161851681D52896192E42C8122502184B49268225E22112249244292183F22488281A3228AB21114CB19A1664822094228039464126F69C43100CB0
+:80950000CC1402004D28842C821844889A14301C118942942844742652848B83918C02269221C5016180B118241A01850484A400894494210021E0842162842328036B2A40C2221241407814280123D138C148808424A184428222298488E1488408414C6481418051488414661244C8884221208104881008839184484518140883628449
+:809580008B483F6A497111A4121F21921C4642C81C4B12A96525344E18278187484144492591AB89E395A214C44F94924A25582D6636184393516C526826C4114B52184FA8C2812C5484A6EC821178223AB89C7418F24811459824297448747814C8888B424D684AF86BED5022109E21004284248CB22889021AB44861838998414C914462
+:809600002143E81423C8A42A244108248E248C21458852A24C0216A81228006A0100208861880021224A31841847825B1A902410342824101402A9410247248122932114C1212C01842641C8C846488C422C443812418E281B124445511218454124115C81891211281131640020A182890281886F6F0200241B148042890220A2180016F9
+:80968000412202601800804243121118112228ACC2428A34A2121048221119412208402208008A81941418122822EFA208008146C823001200808801C028704882849841208908118384618428208104C4A60C4041C42100C011818D210040044E24004C0482826FF7084D41C0418612881414088912C84441B04828482942E882418CC6E5
+:809700004842C4882446231848552884122152828D424C321881802213E811C24442452801180098A8382721F01C27A0124149021284216942B812C888293142001991481C314260224628022442442817422572610824220024114120A18115280918181641041AA241B044038901C9032FEA038442480012280000008941883421302160
+:809780001942119112B1824041085B344582C281481E858C64114962131328585840010044121D543024842084082074430E002B412A010040012D2144918E4210123282904220388222400210820824288624542122882C882202290113022D844041D2480816022D24A02421F04A3F200485420226482801002880258848A2418682342D
+:8098000048148304100D2989180D1D448487518C12C18C2004151CC4242021224221448115B4441204410032BFAA0F16BA118215353811289914B2A104152498254222866482443082A235643419014A685420A1428414106281B02454228BA580A8C1884881161584038002223042C9988225F8C17E20455448AD3A27A11254851CB2185C
+:80988000522318AF652474487822B268E287F26122AD913F84E496CC2D4845F8414261D73357924F5335412F84F24AAA2CBE18ADE6F0222E1E21E45B18178986F181398B3B382A5211D141E143A1411AA3164F8EAC224D1888BF24026CA221181E419B328C92222B13112F82EC82B2D218F418982B691F84C34BBDC3253D1145318866F2B6
+:80990000282B8E828D8195A1E4A97C8BDA9CB41184348877C81B111DA286F187128F13A22289F1333816C24813F149894D448E415E65322AE142F2264467481AF194489AB28276A5075B5217245FA1726104B3762C9A6185B281918819928159C4818F19D8438881EC2EF6288219B299BD41784951864E4E2D1886A6242EA6CD9243FA74F3
+:809980001D6E2167784FD911E5C2B4C77918DD54D84C84581187922B111E121E1419C1D44E24CB1C421ADA4A82F1288236F82B8A006F1201416034F04413E03621E832A1483C118431841849843184100421446041209182120088302280082B84B042086B84B04208A908A90829082470482418F886A9F03121ACF21A125F12F351417AD7
+:809A0000F74B487AB13AA7F36B315AF5129C1AF19FACCF41F91D1ABEB72F49F83624AFB9F4C8CD6E4C2FAEFE8CCD8FA4C5565E5E4AE5A7F584954FADFD2672AFB3F7BEB23F286C869D248F53F3E8668F29B339E768F47E7ECFF6BAD9FDC1E22F2ED971FCD9D8CFA8FCA2C2EDA8884BE62A3B686ABD28FA77BB144B158CF4191B9D19AB2244
+:809A8000AB337B642B17BF12B7BAFFC3552B99BFD6AF15FFC5F71CB4DFBEFB1217BFCFFDDF9FEFE9F18A8C9FD6F47C3EBF98FCC9DBAF25F579798B778FE9FB99F7DFB9FD1E1AAFE7F7FBAF2F24F4C5C69B22CF72FEF9EEDFBBFB38FA3FF8FD46DE5FF6FA999F3FB3F26A3EDDDA5F3CFF3656AFA7B546EB65BF76664B23F664D42F23FBA452
+:809B000089F031777F71F61A165F73F319399FB3736BF43D57A9F171B32F42FB597B2F88FF1557314F17FF8994BEB3EF98FC2A68EFD8FCFAF95F9CFCE1FBCFFAFE4CCB5F74F4747D5F14F4757F6F58F2D45F6F62F7BAFA6F8BF3A7662F52F43D3CDFDBF3A82CBF5FF7BD363F1EF2E929BF9AD67999339F94F38F4D4F349C562E54CFAB33B8
+:809B8000A64F66FE22B8EFCFE18EFE28B82F8C4AF174767F51F31D1FDFF3D3AAF37373FFE6F23F5FB5F3FBB33F3CFE9BBBFF9CFE55173F87F454FBBF7EFA7A3BFF9FFCFFAF3F99F8BAB85F96FEECFE3FBAFE5ECFFF74F57C7DDF54F51C3EFF78F79E5D4FEBF3FEFE77DF7F75F52327FFC3F3FDBD9FCBFAFFE5CFCBFBF5BEBF8DF9BA799DEF
+:809C0000981FBFBF46F396515F17FDACCEAFC7F5C4326F6DF776F6AFCFFFFC5CCFEFFD28BA1F28011800D01241284208844008822415C82217888111288200000080A82488B022084B82E0124878248114042661812001482041042882281220F87EE2404254184C221201442611011181481448422246024213A2941190454275828244F6
+:809C800015A4246522C4111245021811181A241621061451184828484E141225548488941FD3052CF5112485F2112C87141F41324A1D24AB161D24AB941B21AB945B41AB9443F24A9143F242934F82F442914F82C4914FA2E414F8244A87116FA274D8E1A274D8C5CADE242E4A1F4DC2C21F497228F2912483F49124A3F4812CAB161D2405
+:809D0000AB961D28AB9459B44AB924B44A39242B944F8294B24F8A84F9244AEF93048C8546E2817288E141921A28AB1244AD1412AB3443B14A3924AF1431242F3479347848B12694986D528F14A3C283F12242871D2E42874D3C7CD8E432F4D12CACFC91448F22F41124E0C136221D6CAB121D442F42D181B64AD385B44AF12448AB1447FB
+:809D8000822B144F82849B424AF9241239072200800400004004000000200800002004180046014008000000004004810000000000BFA60C7012C214E04234489028874489C128400829B12814A1812A98C1871653334C82811518098942112CE24498641F42C4445331148144CC61821E253691282AE5A6C151462C952243B424B8541214
+:809E0000881104C27F454D828272210291328B41412B212EC21A882399D2832831188CB41804828486C12925014B12481B147E8813B244E8228188A9288815084A0A88C8C91C31818621088186E481124858424B2C2A7CB47124727202214E2245011F44A22156C82EC36182EB83608A2482181621252B74E16AD14F9874B1427988F1282B
+:809E800011E092C55117821D444CC3644B94224F84C91C8446D44861821D948F55C8214F17D8383271874418699A644D884785A1EE1249E642F9D4227EC16022122E1210C84800629A041AC2129A94182E488186384813082240084084042E88442A289C821992C41114A08280882642089A840883048921821244240890A60050121218F1
+:809F0000481848A048230442848857824A18041342548544848324023944518446D422248448B4221441012E821142F0428228980013581280A34A388428478B85045F550E23742681196E164F22C16147121F41322783EA12F4831846D122C4D293E11CF22212CCB48AA6432AF1A4413348F42A41C4C6D823A22126F894222C2293852769
+:809F800023C978A6724588BE99A296184B189CE69AD1B27C1864882B298425E828A4A42111B88B241F220830218E118991112A249241241CFEA248A08195A28437E21E884C1492482A64C1288D478C48C26925613889F2122420F32282242E422E118129D2A42ABE51A2A4B024A9128E294E821568182B282C8228B5829422260DF0F65172
+:80A00000D0224406252466614E114C723441041726178448A09413E418E2229125A7484E214CA182193424C04C464885B42AF44284B014C2852459C88427141489C812D2219C8C511A472981188C61862AC828A018CB928C762F072D54229F21444842618615E6847112045190432D6451430113BA240532218B8447885A982B302932873F
+:80A08000288D41214E284880E251022322A881244E11D08142D42A42018CE5888201200642129F51060048114489012D28C0428B28478112289012236222818021480223B21208128846424121311217212E88586048422608A1444230249860260022898441EE482232587F5F0113C2148082022112118411248400B08834484410021DCA
+:80A100002C22402C8406C1E04291C844224724002212188C8663822D245A084848121002124E2492462821F8E73DD014E24142C82926C41348DD121C64848E288541C24163D442914C853281681822E0A47AA854C23386F2812847832D814E3CA9F5124813F742A42132825AA2818B2CACC13D29B2184492D82324F44A128A0289C1345EB5
+:80A180008C4E282AC188CF4F0229053C0124848722288D1216541212A9011091B22AD448321421928D250048815880141822382440A8214D414C12C2282C8122C4442E81281081018132424828432884F4A893142A259928181A0442452201A7618116021652141652411611440100208405588031826A119218219220CAA11C6228360134
+:80A20000221D922200602A462274582202684E38187F750384241450288F4124B1180419AC2C00498418280C84212B2817811245C252109143A25C844C0480C66CD04151288944860190162019032025420446480441888FB5073084004C22120280084284100885817A849848424C12011308409443882505446248CC32272E44460910D0
+:80A28000813812142211854491A8308822104232148A12E8E60C1B2119C2215C02108812C8241C922286511248278210AA422216088262224B1A23A2122022B242C28318473820449214118A8112C42110C24488A4424400238298C28448681FFA02428903C942921824282C42048C338484A211A211246018A048A24213924188306311E1
+:80A300008242139481148825012F243AC8E02118244142018242CE224228800282E018F4C62C24001E4210212231488489028082024A2104100817842621842804192402C0421C82180481201818044818696218861241651821A662D482A08220088F54070050218981844422C45200421905108822858122830135029022004841454148
+:80A380000424438111410410028602442C881114182411C442124444F0DBB5344187484D1883211414121754128E4111418504472615C4828665422548844424420464C0828A02B02138226032852202130628411C880245220800242A14C8628B3C1289F2D64C5081468124D412C88184008481442589724A011028A241121002181129D0
+:80A40000081C981290318611049C05684B14242CB141128406184C022C4655420044000044DF770A1D3197CC9F81A1531C9457AD422B4525F287442E862F8261B23D4C27B22F527488FA2381BB322F47F223612E188AC48266F112C73B462E262CF483234F283C4147246DC445B2437117D26BD36474A2BEC396114D1649217112D221D240
+:80A480004398496778CF447444F222566F44DA22A82247483E518F2AF1BE6B1469F4B4214F22D25DF2892C2E8618CFC2B25CF228992F95A22453551C8B454F84F3314587C8D65CAC8B11CD651F17B12482B825C21357183B386AB821F1A2B478FE231D554CE6522633A3995E782F12EA14E227F284A51F18EA1F48D13498812CAAE84324E7
+:80A5000061822B9CAF82BE4CF84468BF374422875112A42F25F15828565821844E229B4891AF48A8148A18B94288D2348CE5883811884E443F2826042B456E8149F542214D42AE8411EEA847328B9845F158B946B13469242B8B35F423122A117284BA82E18634B2278289F228428B646CA4158E2488FF1C08100661D034084D13D02401F9
+:80A580003C016C016C016C1141064604444004161422112211221102618425011448004220048901890118D048018150481D7DB0A2F675383AF3357A2B84AF25F17B31FF75F47B61EF26B67BF73B398F9FF94E459F1DFB7A34BEB82BEEBE917FF7F3DADA4FD1E119FD3765AADA54E417F764E72F34F5E4766F4FBB71F6F4727E759F2BFAAD
+:80A6000024766FEDEB21F297BF1B7F4F53D347FBC7E51F16B7B1B243F65141EE145D449FC5FD782A2BBE8FACFA32792F1BABAACFC3E48EF442461F2B071D715B771F23F33562EF47F638E23F17F75F4DBF15F47FB1AF4FFF69698F88FE545D9F1DFF28241F98E85CFCF8DD5FF7F7BABAEFC2E31BFBB7B5EAF824F47AF774762F1EFFE5F77B
+:80A680007F5FFB72E14F4EE24CF6B9EC1F62F7F5FE1F23F397D49FBFFB31317F52F9A4A66F47F5B5B62F48FA33A1AFC4FB99DE2F45F776E4CFC4F7F4B22F87F372332F28FEACEC9CA4F5AF9B47F232665F63F7183DCFF2F24249FFF7F77E34FF76F762646F67F74B64BF3AFACBA8FFFDFDCF8DFFFEFAA7A97F2BFBE7C1EFEFFB978DFFDF6B
+:80A70000FF95954F46F7A5A54F46FE65655F77F547474F3FF6F6836E536F6EF664667FBFFAE4F77F7BFFB9BBFF7AEA1FF715373F17FDB6B44F2AFBF7753F73F31382AFACFB1F5D3F55ED26F7E6A4AFCFEF83F7ACAAEF8BFB3A7CFE788FEEE76543F393675F61F7192FFFF1F3DF57FF73F67E7EFFF6F76A667F76FADBF1BFBDFF8BC97F7C1F
+:80A78000FCDFDD6F7BFBAEA96F7BFB66C7EFEFFDFFDDEFCFFFD5D74F6EFDE5855F77F675754F62F4E7E76F2FF8F7C32F26FFE6664F6FF7F7AE5F6EFFBFB7AFE9F9CE8F3F3FFB74773F25FFC7E77F5BFB75772BBB1F25FC47933F58FCE2C4EFE6FFCEEC6F6EFE6368CFA6F6BEF8EFC9ED99FDA8FABA03140040C148228C044001005081806D
+:80A8000004120000421100100400492854144001498154245024822622482248824486448624248822F841C980554140E42241E4224124C44C2B842054814448874419C4864D48897111E844224854269044142DC24681082A08002322782261812F12280113881881184401A81008888C0486F81DECD024F41124C5F21124C7241F41F2A6
+:80A880004E131F41F64E121F49B24AB911B64A3915AF44B934F44A9553F3429747822D954F82C4954FAAC4854FA264514FA265592FA26D592DDA9E24ACFD91244D521F49522A1F49F24A811F49F24A811F48B24AD141B24AB911B24A7915B84A7934B84A7B34B84A79B4B84AF9244889F9244ACBD8A0421D682AB1117248A221AF32E141FB
+:80A90000766AB391F222869AF648235B2985A24B8F3422EB247AA5F84231678A2D115FAAC5B14FA2CCA14FA2E518F222DA8E252F922DFC229915FC26DA1F41D422E989B24AE849928A1D64AF165941AF44B811F24AB45F81B24A7934B84A7B14B8422BB9427322B842E822F549274028180400000000000041000020011800000000124034
+:80A980000848008C0800001002000000002581F25282302112AD3283F21248441A1241F484485292E084A141AE44C6E144084881414B24841122714AC2A4272430328088441432A2882B81488883C98946A1143E41812F14B14191241AAC122143E8822989342CEB9480B48242A118441CC4C47658213028421B8454834861C283F1422163
+:80AA000016B541AA61825B422F88140511130419289428581C681C228CC128428D818D5166A125892A0A1210B81888A2848CB528C5449CF22419426FFC021D62E6D812F21A228F4114A1281C17D1489C44921BC256C8584A92AC4E8C1326D4A13C6443FE24411B484B38452172818694831945A8188B4847244E2A8281888DC1188D21AEEB
+:80AA800041139CB419F2281246A1418B9212AA054B78ACAA124E3526F8812300128981084CB444415824B02881045188536814122153812201A481150219A4240023828214C181B028A1282B14F048819A94188C22A441205118414A0AAB14844E14861998442F74070082800800880000000000000000000000000000000000000000100D
+:80AB0000010011400170E7052E422538118D14904446851244B82281661185D8220849A253886078A0313548A35A4CE28138482B481612911CC4CAEA125481296141C581B4496A82616CA2124816054D822588A34B88C02618328E485B1920043D188741418A625242411E482B141F12C282708AA86543824182F88215878128196C1842C6
+:80AB8000643EB8818A6484318B1122444A0E314CB594B8684201C4C39112AAC683902245AC5643410629085AC3C83FCC0C0082008200880000000000000000000000000000000000000000100100114001F04F2F602212214C125441902180122819088094A822292A82220219A424241451142782E082284128A54215342884142014A140
+:80AC000082842B1448988608482092821048084F82E4DC0A4944C5326087722932548C94C18AC1481AD84195141F417214E15871416C4143C45443CC2C8748228995184E2413D1842261262A2DC281A81E83828CB3389C314E1883E11AC421221114888B28233A441618888672A488F8829AC0221601D084B114246217424E218AC1581872
+:80AC80004541B444B2345824546042384C14DC846C2290181D642943A828328E2842C84C92898C3819A21922A51A86A11280D18108222B8249A4818462F08824442FA3044354241E224C8266324044884888388858181351812E918C3E34484984C86122E0911405944992182C24A5212691812A118292584A1149F828424621968120B804
+:80AD000088042C4208818C024EA87FE60438267C4488614115082548883492636482AD9141B22348A42185A438A9A4412A282295A4850449A13885E1240119F14AA4A818684AC198828345218282028C16483818248422A22042F4B261100256312228102801447024A181A02121845E2249981215341600811B1846018E14C0431C1684E0
+:80AD80002802424C4203224E2844824AB1126851802A84C124281A12944424483AD84F0842182120D422A12130411008804401448420C44882549084848CE124810481128022240115388889428421B2484208468808884A8A2C24A441902810F8821A20A6124D18386415C228184699448E121B2489B94291142331864334346598344A44
+:80AE000081254844F8314C1E446399149B2C27844634A21332142AE8C1D229E884D148E18136748D412E48288B12608881E24E1848582A819428484DA8BFE80729415432A01616C8128400A100178814A2813698821AF4488147885422899A41402804122A210156B8220C1428228A8248A8821229994188484A68814C2A922A49C4A48009
+:80AE8000029F8E052840A621430441508444818800496C114C02A0144A82A42141226044431884011281112004E01281480400428C0488448AC244282282100885421C080048402293181425C2212712B042086028241782501454D04224121194281219021A048A04128400828D424E219AB251E224822241642112001A381C42478452B1
+:80AF00004786C8F0A9D8409444C044844120228404508444814C6A16408962224922021081A441628A1411810191A01232841AA218484001908128114828280022818820F2435550128148001111441C0270A104422446487E44226284C01835C24843382234281602D082C42A8C04253983819081B0180889028052182887538883142870
+:80AF8000414214321870EF068A41042022840120430400222044041548081D580068284112184689810442188C1481489C48402834280084811028AC48304842838168122FE9088042044812800141604148001488004142C9028742A80000143284E0188541088C04006014004AC24C44808406224A022800F08C68000000260DA1101990
+:80B00000411542280881178880081904148441E014028120A881400110020013120242442D11121C422281414242420280F44E4E901412D042042002A048888190446268118A4525022951221424144021AC84244230182C82C1191426189114178426180128C60840A818848A9428008200CF860584C06189621242D014621600261484A2
+:80B08000434A022CE28884D881C8812D884259011C1812312386A8281C1292488C14B2123E11729C0A103818814C8398281048046C2823226541F0427224228A449614ACE4158461120084260183D18874BBF22B236B82B088EC4276D8AC33BD241DA42E451D411B211374B189B148E88938122CE224A4918C028D2A4E8D9CF811299D68B4
+:80B1000028C3C4C885088D4829A123856821257A289AA8869D48BF820E164434242D441CB2285181AD163CF641324D812CE1CC7444E446E254E28478D168521D2846F9236117B44794416922E416ED4891126E4B2F98A5248F9CF4595933714AD31AE191E243B434B529B44264268B413AD419B3817B19B1F1B2289C883E64AF44C2446B3E
+:80B1800065258491224F6A0259B11C42E18632645D244393255786CF5A34211F881A86E42888DC44D478F64B8847579D8249D148AC42A61BF1282665E433A6C49329F3285219011817821B839B9A1F1CB989A23D834261868C32F24721C441DE2CCE5CCAA8CA8B27E08DB5586842CDAE10011181100EC901E901A90118C01482188AC414E0
+:80B20000134824088642440AAC88D22108240000001002290121100221412141214110044183F4AC67346F43F2543545DDC1F648496B66AD1AFD299FB4F2B5321F91F321AB2BC687858FC1F7A2B33FBCFD568F3F59E91ADBB5F168384D98CF95F28F8B2F6CF51A139DD12F58F84ACB3F83F6F9982BBBA5FB39332F21F5D31BBB199F13FC10
+:80B2800058AB9FAEFD99C91D32AFA4F318328F81F118AABFF9F99D87DFDDF81C16EFADB316E245FC365EAF81F54CC88EC46761B7C4141F53F2147DD45D6C8794EF8656134F31F35B5BDFB8F4113D1FBBFB9AF8128FE5F76BBFBFF2FF37AFBF55F5A9F94F12FB6B295F13FF7D3F1F1AFAE9FEBF36F358C31E55BFB1F5B323AFBEE88BDA8A3C
+:80B30000F463791F35F5C353BF99F1B8A99FBDFF49DB9FB7F34B3BAFB4E127F77C3EBFB5F39B3B1F39F8D88A6F63FBDEBAEB2FFEC66FE7F53E5ECB448F68F41812CFD54AF227254F41F72526BD244E47CFE7E663F317351F54F2AF2D1F71B31AABE48F8CF9184E7F3BFAC7EB7FF6FB9B85DFCF7C9DF96E3CDF98FBCDF9DF98F844C64F9103
+:80B38000F123719FF8FB41C39FB3F6FAD98FA757A81FB7F353533F19FD9BB99F13F9D8A9FFC6F7194ABB218F85D28AF3485EBF91FB99B9BF91F1591BAFC1F1D87C8FA1F756D26FE2F54E7CAF84FC84C84FC2F7CE73143E34CF41F32126FF44F2484F5F75F63125DD2FBFD4F6B7751D23ABA88F88AC988FE7F47FAFFFFAFE2FBF9F5DFCFD93
+:80B40000CDDF8BFC6C6DCF9BFFEDFD1F3AFA7FEC7F96F1D3419FF9ED13FEBBA88F8EECAFDF88F473711F35F593D3BF99FBB8B19F1DFF4BF89F87F75963A795AF86E7C6F7193BBF99F11F1DDFD5F528FEAFCDFFF8726F2FFD625AAF82B74AF48C588FA2C6122002401842C81184266188266188148450812411100120040042111001224285
+:80B480000000149014C08148002216084021014082842201F0FBC9A0184C22420444224441008410C48240044441B0150413C284411441145852A021305120312211811B682A011C81061A4401142A04482884A14840F9EA5AD036F41124C5F31124CF14F1112CE7241D2CEF24D1C1F66A921F88B24AD985F44A944F82F44A954B422F54AA
+:80B500007925D852F934485CF9A44A5CFA254A56F5244AD6F5214A96E5A2E549C24A1F4DE222F5912485F291248F34F19164AF26F18124AF36D141F66A921B28AF2419F54A9643FA4AB643FA4AB44F82D44AF9A4488DB44FA2F4DBDBD0A2A4212CE48152281FC114FA116C8B141FC1F2481417818BB41781AB9447832F1463812D114F83A8
+:80B58000D412F334482D31ACF548116DC287152DD283D52264512D5B16D4B2F4D1242D1A1D648D521D248B149E648B141F4932481F41F448841D248BB4137948048F4429E344A8432D842B424CF922181F190D0048000000001221000000001002000020010040420880040048004004000000401118026F45062A24032624C1586227413B
+:80B6000017442B618D6226082B144AC14D8B9211443A6888118B418E442817829C8121A4484A9218284123F12212168131812E952F531468125082421AC8418C24618C8684C24483BAC80266047FD34D4264488741128D42414321849284184A11C284205A613E848B4325B445A194228D214531422285B5242192132AA418891C344444E2
+:80B68000223240A8248B814E185E21884E212CE818C1823229C4482C8845A442856182DF3D03614311C854893148686961466B1649963A232225754834245B12CC817AD4C9111E282F817C21227C18D1C1E14422BE11B461213B8C85A2413325E119321166B42834A14E188D41881C7FE134188283B28494684B488B16C6AA2449A621CF1C
+:80B70000E5062A849214284662414981442198184824430813DA3829E8243214A0484253427421880212242884C0421634244422F0248217816081241A2204241B482CA149214022C8241048B8BF062C0429417824534122442612A1121118D0221121048972140845C881115C028153324829088442ACE1441206A73284414C14089021F4
+:80B7800018684A0846C448189028868808C048DFC94A93151E258145E18184F512441F82E1D4C18483B4189A481E49C9E4C154288F5831562E814E2D1B49CB144CBC4238212933183D1413D778ED2461212AAC814E312E95A0122AE5A1F2D42149A3858D122EC11631195699931A38E81AE248E153D448E282E58816F48C7F241D424C8246
+:80B80000013E41422951414792218B148A21C15A43714E61A48E178C44B824C48C8B941F24E81408181156CA21FC18A81430162D54A6D6388221C4124719432329A11813810C53288D8E328C5C2462828348F4DB1C90141D1284154C7C12C5648B215253283229464861841810E84132B5911E41544126641227824783718AA5411A542207
+:80B880008B3CE2199211C0284B2166BC48024899D212A64299F118431A143818122AE18AC18C522A64A49B4790224A411268C422488881441024584849922A42453214124C9896841221221502284624C82510B461213424268264C28CCA148B1246442854141AD4852234228923888463114AB324B916FAD4D4200152282611182C024E4A
+:80B9000028124B342C021888890A15889222298664144B1694C8428614088D412282800167888D812416B14802A84C12614283880388248B252D9841CC32834216F8997B00412581014C81D11EE92582A128842568288110A425408441482548426481CC13C83251121822308200184AC144001528B5882201236C8112494404421358185C
+:80B9800080F4348430221218A9932147824CB417E28432248AF368128C58844518F244886275C8141AE284DB1424FC2442439219C3972C4395838B412A614826A34149E2E8D218C128CF18F544382E184DE9C3B5C8028B1C6F81744882AA432FE98228E1889158CE244AF8D3AC80415412304C128941C8121E4800248229618A2843812101
+:80BA0000D242181458215081422182264834242062858C881422F8441228008042B111021388215148488B144B424C228A7124F89C52802298288B14102482028228C0160090841E88001B82004848D14885B4A1042A84624813813111A01282C80018284213E18281B44881A1141829818184C4288621F4D9EFA01485042011024C341600
+:80BA8000002721008544414131222100563194262102160144208884F421448E48884850214A3241114E1644811424C041A024893A48440000FFB40430981064241846022A246228B08814B48274248242C49100228283C288A0411904425C3C6422118816B425011C0288416BA1C021828498948918E8880288821E88601581AFBC08167F
+:80BB00008982942883824201414416810A422230182074248891442180B212142122618250921428100211428691110084841902810000412281414881224F93014994144301448923810282430186622824C08C5AF84884883021862545E41468C2184788818029253848888021AA24A081C0211A8498824A91818084341480028968284D
+:80BB8000F0BD92400810840144438124054483447848611A141C22324129A4852E1825A858411C48C4411584018A02121143881A11384142424CAC82009C28B521684AB04868444E11881218227F7B03260822202834423012200231402401842480022344112102808288824431144450A10000C08181140080C24260C81018A116282868
+:80BC00008B184F8F072028018742842418C014828270C4C882E4624412C19A6418244D2180810110C1848144C28800451124A282824A02442A8102401818845241EC016094487DD24088D218A421144E84184021044C0228A084904294134E3114230218C0A827868741234E4944312611CC24810420C12444199188815C48818A81882103
+:80BC8000840944C8272288DF5E0F48A60C47C28A46E824B424C4411A9885BE829F61B88898482C72517868B2A1FE822C1F11E11EE2B4BA46C78149E482B24892181F1462498688B222F885129E81BE96B25CF221428A21B822EC8CF6694D1F19D981FA98188B811718AF86F498248781471E4D85B6A8942E61884DA6A032C3F928388B51DE
+:80BD000016B5183B23184B154CA13B30824D422FCA58576B221D4C87845D412AD245B1A1658913EC1393485D551B2269F82DE24F12BC84F454548F52BC4454111D31628EA13A68145F49D13481E18272AAA1448E188F8131142CA9188F41E183B14435A88D81211F9C0B1745381685F22C1A6F46E441F112262D244B4E2429E28474427CC7
+:80BD800045E28AFD88874F19F914138B862BCC1A3C1497524FA276C9F4551127834FDDFCA84C46F158247E841F1822D541111CB48138481F14F634C44E2197434BA881121D831F14A4C68AF864484F46CEC88B442D848CE6ADF1F8682F620311411141114552814111431201114440144194416411444044424442542142150226124802BA
+:80BE0000146012100214842501211225012110022501818289F2164D141F13F6753D9F82F22C258F94F25115C7C4CFF4F166755F5ABBA4F9B3B33F13F1CE84FFDCF8563A7F25716ED7B2E8B2F231934F5EFE185967518F94FC2C4C2B532FB3FD32368F34F6B7B77F2CFEEE6A8FB4F5CAC26F4CFC94977F43E342B241F4FAF93F7DF9663518
+:80BE80005F61D178F8119815F363521F38B991EB61F25ADACFE5F4C8D9CFA9B9E2AE468F83FD2A2BFF62023AF631719F83F238798FB5F37D3D979587942F57F765E55F73EB2BFBFAB877D4EFACFA72BBBFAFFD2A823F26FF61A21F13FBE2B18F98FD22323F36FEA3E12B416FB3F7B7FE5FDEE65BF79473EFEBFF58589F88F5C5467FD5F51D
+:80BF000035358EE51B6CAF997587F5B5B73F35F1B1B3DFF3FB2323BF74F7D193DEB36F6BFA5EDE4FA4DC8CF82C3AEFC6B6F2F7B878AF8EFF8FD2A0425F43F73839CFC1D36DE261F155754D167F44F584941F5AEB2AFB887A6FCCF8CF8F2FE6FCEF8FCF77F198DBDFF2F6A2A16F4CEC1BF5A4B6AD8AEFD2FC391B4F37F7B4B9BF8FF7B5B595
+:80BF8000CF3CFE84642B5E1FDBFDD5D55F38FD37351F4AFAA1629FBBFFC1C77F58FBD5D5BF54FC11BFBF11F3C1F13B911F35F552F48F85DDCEF1F9AAEF95F1A4E4AF86F638D88F8EDF6F025F53F63534CFD3F27C2C9F25F67F756F4546F277345F5EEA63EB2AFBCBD977DCEFEEF872DFFFFFFDBC97DFFFFFE7AF3BEE5F4EFBADDFDFDEFC1C
+:80C0000065C54F52FE1D5FCFB3F7B5F97FDBF3B172EF29FFB4F42BFF5FFBF7D6C6EF59FDB5B41F5EFAC1629FB9F5C5C54F7DBF53F11EB59FC1F93933FD912F1DF9F9914F63F3DE9C6B264FAEFEEEF8CFC7F7F8F8BEDA8F9EFEB9FB0000008001224824120024124C82041B4142114282288002874449014142184214C09120024712484FF7
+:80C0800012A849400840214824C9248A049242F0287A8045941844418C364628296141008314344819847885982A430841384558185924548181193858808228014443021C88C41290181359221B284A618129C8482F244118381429429838F05747D024F51124C5F21124C3F61124E3F41124EB161F41B24A9921AB9451AF447925F84AA7
+:80C100009553F242955F82F442954F83C4954FA2D458F8244A1E255FA2645D1FA2645D2E4A9E24ACF491242E421F497228F3912487141F49324E1F49F24A111FC1F24A911B21AB9455F84A9143B24A39242F447924989A4F8B94984FA2E48F0D2E521B418F2214B168B11132441F41326C1749A74613B84AB385F2481443F24A94222B94DB
+:80C180004D484EB42F8B44E1A2D418E922EC11DAA4E44D42EA55E2B2F898244D4B1781ACEC49F428429624F4112CEB848E242B141D2C8F4659412BB445B8481BB44839242F447924B84239A689F1245A1FF10F82862441220800000010080000001002188008000080012200000000004810080000005012D0CF0C2223818282F2244843D5
+:80C20000247518C48400984D48B028F819C619F1855243C83116AD838CC249551A1894854A3858422021E824CA85328A42CB388C88C8921B282F2221D232E444C18B2E4A422120A24A892323B46A031AF48422848F4831181283D242821248B848414891484921326C836231428AC4498625820616E981E48291822A012D4C1B2121288613
+:80C28000DC58217A84B141C1218962841934181AD81838128A7128C4E4CB144C41C4444561828FE6042CA62CA9721418386C6258448918CC48AAC148A0838E6166C15C69E931F4C4118F11FE14A88B24CA111278DCE1ADA2481B25248CD129E122B445B88C52411D281FC2213581837A4AF354212D322E514F84E198E1851A3E6656BC2430
+:80C30000F184624B211E2576F8932F806141A0282A21512C4CB22841041281518354848D1647811C1A9122841041712518981500830190448A828882E189C282828D8128188A02842C388125024A2208008C04F052670028000000180000009018000000481C42020084802489042011880220048002844A18012200302488228848BF5DD9
+:80C380000418164488022A4108902481948270422832812CA21426CA118C825184E0C22481341266F214818121842922D412823886841A48884241B288018901278D4140221528814484D2770A00800228001843425881882446089C48224498120042144E2A182C04833681872498460A24188998248192462812219288848E58248B5884
+:80C400000020C128983084F0119780B1244108204108000000802281828112912812858442048001274100202264122482000040820140014C0224484480064AF2AB34100140041840041A0200144304C9A1420081441008251118042C0449018622012031824183A1415289481208004C4888A252C04C4A0184841F540C20E221028341D9
+:80C480006944214C0226082048020084444B410028842AC442701528A12828290348800800280032830C181215280444E08608844A21022BF90012448444001885024812008001831104221A240444800222448410880223A221288013214A083828403812A0188321081822884288EF6306209324254C54184C14462AB24822011948027B
+:80C500004162C4B028344440588419C64861536344A9AA218B21A82B1422AAC11290349B125AAA418B298C3F2A10381A4CC41887425AA8844B412E184A499888CFA209148001892101124322010060441289618110C4141242221082028118502400100222820040080012181188821822894228044A02DFA2080000000000000000000068
+:80C5800000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE00004B
+:80C6000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE5C
+:80C68000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F029
+:80C700004FFE000000000000000000000000000000000000000000000000000000000000FFE40F000048000000000000000000000000000080010080240800002200200281810000D0930A004C11981142191248140298B0480112498228028120846882110026CA11228014424204008E2400100160A120341189015084004008AF534376
+:80C78000820221222820814501118180088328884528A5421843024C04268885844808C0148002118912018AC2480028C280582448A018A0482E441A1884E8A10328244991281901288111211484905820C1A418801188A124824782112628E484D212010021100440E818022846180122160A90112D488041A44828184488DF710421003C
+:80C800002082C4111A14042009826088A0488982A42440044200188098282094143022408112048800008A048A442401828160448281F0E37E80014140C344181A02004880C4121783181508114450184800702148211208122A25A1829012501E169818128113581880184121010080E289A48448CF6A0F33E242D12232284D588C1278BE
+:80C8800044D818D1148C497912C81843944483847134F882588C719C91149312712C931812CB341D48482E828424905116C1882F18E22628621283E421E281A6383E8195F28812967284E8C9E288F3186283B88C25022E883FDB052601902200209519438C61A410F814423E4D4240344185348191004D288489E144A12440022A810118C2
+:80C90000882B284F282251181836A2388E282284821883E1814A488828A84B20F62CCD90126C93248197652E4C89912C10811831181A043018997138929818478116F4412814341813722158818924CA1842211B2D348C11914B26A82146487841981113398137812D812748448A8317FA5824844A98883F2105484618EC5182444188444C
+:80C98000E84592285D1822984F81B482A2244111248B1289781468689893728401A1123826210719E168522C4C8819D88212688118381E281A32842F9229A59246E244A3144288211E44E04F0A0042608228421A0290126162404112081241F024421470288434C8221844701241022392182052411A028A048501424249420480C2884120
+:80CA000016881482E289F279AE702262411A424A0212814644180127881D480043088C227684210189224424128802142488A242481290281064424129021358381248849082248424201188F497FC8062414F82C12E2CC22156A812466C238D128129EC810C237A48042669261E246E1CC711CCEA48F641249742C028121AA22116E2229E
+:80CA8000C81116849186C96B8326648E87411621A1948B14926D4189C492688F64EAC144AA841246E486F8EC3FD0220430118304C048C04C26311181118F5401291A8411D41828082C11482864A212411425A22CA0242EC24CA44211248441302A2887121912628918222C28011A049038B0DE0F00160C00130121871827811A8411181243
+:80CB0000FA122112311028833328411542291242421162218F21AA1238628C22C4112618B11288929824832A1828C89A84182A082282004F320CB02821124852416784491104822642412511044160422B148220A8142820613C45812828081188882984880A12241B8121890A3D228A71261A2444084522A4142BC1F072DE20040080019F
+:80CB80002A81470840088688228481C811114011048C4102901843A1828C2202860134132292111400223211181AC81428921E2442289800F071BC6092112213336828101188220642882210044901248658842414C0243014002414A0484835842451184810115821A0488151904841859214814B24812126FABC13200960846441404878
+:80CC000011A2411A14381981814882122062411C022E88849025188117284012C8A2384129B22245942818C01489C11C28121508200218288021D812F4B639C044001242815E25422F84615584866414291631542141230841008844411480422141621A1542C14C8B48008D1240E2183329291841CA83C0822AA8844AE824A8948C8808B2
+:80CC80008E28AFAD0C30244C2132181C44480182882782824C2241B12188D629028B1884488490218904893822AB2412144200204802104218022D8200100AA120022301002FFE0612006542E48413C224112C44948827422CC1411B124123146488490220120A61142508301900182511420844418440D414426111814400414B2490C884
+:80CD0000608225084DBD6082188D41C0312062842061224418688242121078320222AB18411B12C0A283681212814011914845888214116211C04880041084860126C282411824422B1223B837064CE489F22C221A23F4486B8F17F2243F46783815F248E81C7C4198821FF224C21486B922F343342B221AE228C2A1C7A3844F22BA8C53CD
+:80CD8000146D58A82A22B249F49283895C82F031858742BD1387212D8D9EAEC782971A1D269D452D825EA42B284F8398442CB89664888E112B621DBAA012C01487849CA712C49B45CB414A752C7892F2781C4C5C8828C862136139CF813894CD51C57462081D24112F22F81112BE812789A41D611A3165277283B262963A1609112E123F89
+:80CE000012B492E384589845789464AA4F8588B722FBD83C4EAA3AA52488AF3E44B151E252619126753E76179457D013F3838ADEF22A11F31E131F3FB15CF157374F21FC2E96C4228D981F82E882584D1D21EF32D4927151792A58291D122B98AD9A2F3ACA744B2C1F28F2119345B84323F182F9DB2189D131F812222B992F29D98813FA61
+:80CE80002846876CD6B422A4128B848F217888F8B3443041411141488004302448148A04488004502848448A44A448805548C88014985200004001464268146014824282428220088A1428088242B9062AE497E132B217535AB551393F21F27F672BBA9DD9A578485AB3F7756FF8587775F7B6B4CD8C6FC9FDE9D94EC8BFD7F6884EAFE643
+:80CF0000E6B6F766DC3F28FDE2E62F75F47BEA2BBB2F15FF9B823B675FFCFA89A99D399FC4F7556FAF86F6C182EFA8FC3F7AEF26FF18338B412D46FF91FA5E56EFE9FB5A128F895D64EFC88DEF81751AF8D851145F53E49264B37B53AFF4F67737BF35F34A62EF64F18A9AFD572F2DF96A3EBD495F69FAA7B67F76F56727EFC2F325B7FF6E
+:80CF8000FAFD7B79CFC3F3BD3DAE4EFFEEFF2A33AF32FBBBFBAFEEFE3B2D2F33F29292AFA5FDA3BB2F4CEDE4F688AABF91D7D4F2352C1B66BF9CF886FE3FF1B7FEFD78F3CFCBDE44FD5DDDCFC3F13CDEEFA7F37CEE6F62F22EBCADE88E48AFA3F917FE141F13A7739723F5781AF15E46FF75F61731DFF7F7B3A7BFD5DD8BF85BAAFFFCF968
+:80D00000C79FFF5DF816156F24F4B7BDBFD3FAFB8DEFCADE99FA28BEBFFEDAFAFE122BC7F3FEBBBFE3D6F2F12AABAFAFFE12A22FABB332F684E68F88B8B1F3B93D5D2C9FA7F38BC2FFB8F2CF9ABF71FBD97A9B29F77CEFC1F84A5EAFECFB3E3EEFEDFD6A2AAF889CF28F81FDE87A5FDC0C4F42F43C24D7E3FFC7F17A6B6F77F34F27EF44C8
+:80D08000F66C3EBFFEFE4B57BFBDFB5BB9DFF5F5D7977F1FFA77746F67F2BFBF7FF3FBFF9DEFCBFE7DFDCFEAFBEF8FFFF3FE5A63EFFBF2F2BBBFE2F67B7D3E2AAFAFFE1A8A3F3FF3F7675F78FA89AB2F3DF38D2F7FE7B77BF38BD9EFE8F37137AF4FFD39B1DFB9FAC797EFE5FDAEBEEFE6FFFEDAEFE7FCAE8EEFC6F948F88FA9FDE8E8CF30
+:80D100004C0B18006022E0228144A341248C440234122C020028122890281110922829092B128123021820022A4188011C082200122089224926B8482209F0783D20082C4198161D48811281281C0889A141A5126144126C3211400845082110011128889220742241145281214001472217881817892186584284A5A442F014480028861B
+:80D18000F9ABE6C0431F4152381F417248F1116CA3D4C1B66AF18124AB9419B64A9945AB9443F24A914B422F347924D812F934481CF9244A5CF8244A16F1244A96F124CA96C5CA9E242FA2FD91242E421F4952281FC9F248111F49324A1F48F24A111F48F24A911F89B24A3995AB9443BA4A39B4AB944F8A949A4F8A84F9A44A8F420F2672
+:80D20000FA11448F22F41124811FC1364E1D68EB1628AF5281F64AB11B48AD944B4AAF14B125F44A1243EA14F137482F44F9215A4E14ACFC48254F2265554FA27CD8C1C15E242D5B17C12E4A1E248D431FC1F24C121F4966241FC134481F48F64A141FC9F64AB24B498F34B1A4B44839B42C79B498884B4A29F1A45A2FAE0200002480019E
+:80D28000000000000080014001000000000000000000480011440084202818080021D0230B12128961C16F1681021142682800C0D41A62842B28F01864434218D4484294242664828019E244E244A1825898401138128B248217681A5248834A88911483C884CC21B9484208181E884AF8A61820B282722204812CF14821812E1C652A8471
+:80D30000C1C1251268141130712419C1D40026021D58312B1885B441129A224C4161441504135A2519711682127CD2012947C8C9423228834224FC44A8CC44018FAE022256E24291183F43246314911E246D424B2412A642F288442E411D48A219D124E3727118041A32242748561CB982D1847823D261A2521E248F11B4443144F0812881
+:80D380007062B1866112282F9439282F81E642D158E184988490288C66846C961C182B851EC6C01228814481302A30488C026014802141024AC248A048444508221C32228021C4484488801841016D1116486248E9418408818A04328D3492448289889488F08937E02264412061321180044489A1412C41C8128011D122034280028121FC
+:80D400008D211562111D8883B12618A842C270112442D8383111002A0818482D81C011484C221922012260881F2C0F290136C82689C16E2E1849C2482C847682091425F8618C1D288B43C08126C4D95B841D287028A714228B28636242182362814CF2422482AD8434AA64829F28F2112A47248C11B8123258A5C24CA729126049824B8225
+:80D48000C3A1294B24CFAA4742420464228C12C8244844466818100A6B24944E23382D814C649C100947125826D318595883C1828181C69224412190629B121952182B28164882F2419881AF4104632178822461421E2CA886FCDE65A0161836A82117A15394324881482D328B411834897181A81289018082E15688425882AD212032A25F
+:80D50000437232848237244296F12488918E1B7088223344218C81552240B1CA21228181880812689F240242334667424C1104A5542444B04D6282A919B62238445A12068C75820483288832442D182D181A5218A362424384A2488126748241E25284382323082542013B2486D4228111084136F4428444C3F13B9C30315212124287143D
+:80D58000842A012283D82481641483042B128001131A12D1240185C4814400401582F81142C126945A830288814C31298D8486C848639288109824A01A22882382AAA59EA210048952288001241884382001D0849188C0285604891428B444022E1830254141001E224114210083C6182A055862123A08301828E04442984820B118044F25
+:80D60000C1031745136231EC018344D848931689B28853182995C22D44AF61B88424C21C4E149B944C4C78C886C6285F82D522518141114722284D127CD5249824C363988D62CF12ECA12CD183CAA4A3E1A2092328C83823B144C2B88CB42431749AB44CF8D796602212C382B244711144022444A061897211182892381A942280424801F2
+:80D680004C190445E841A212855482442A8CC241D022840212221D244AC1482C9841D081D468014C4208438228D84822F2B41F901110411141511A871235A8821058811414002908A8148912A1248322E424611658899258869418339812284C2188215814008C12612424246412284578820A80880470C90AD04262218148C110427211A8
+:80D7000084A54164A8A081118140021422824E1124491814021C8212044400899421848892A418A941D84178410811882382843322498442087FC848828291289028298122A1244A214A01418C322488611F820C8221228A919A4019C881C2434AA228212A2838882843183638181B4A22222120094444122840144684B444F2341E404402
+:80D78000024D22202214644124812C022486243422222184284924180C4508184D2844429D649018119021861422082D284441468421465481803844448602108849F87C5E2058861821841002509485814888284803146084B04768485512C4142245011121A04282471263E248643189A621883318E431742C6113831881612164A0A479
+:80D800009024484984F284294FEC0380021411149D1214190418841114930488C0811135082122182D21200A50582C1818841101844C481822244908843D228AD4233841A092A72122881A024148BF1B098C110184C01C4400889023441820081A88948212281C148A12082522048230840012282904111224848800004820040024002CFD
+:80D8800048F2AE17246812201222A2412A941A484C4884089021221912E21482122811631821148188C7141008C1881C9111671219311619C22925116224544028118442080024184B24F0B4B240489264414A1232244122838242042880440DC430881A18228151218C0893820B581446026D88214881135248411A6658809248188DA4E0
+:80D90000884848441A8898A88902F01349E0417782124263125485EC12753265C5881C58845CA8828E862D823D1D178E8589DA47DA24DB7EA2AA57D1278293B8AC7681E2842CD88288F4A5318E22197899F8488813F9929B4FADE29AB418F82A2B19C6EA603D43B444741AE62266292B222BBA684F3BB628F2762640F12D3445F129288D08
+:80D9800022DF82F1766235E224F22483578317A39D8517288324B628A2A2A5B421D8B17188F8A1414A31498356182F467241F1486C874A4FA2F18824965C423B817E172F42E26B732A742DF42B11C7216FE2B145342C81AF1D981C3F41F982824F823EC4297384524C41F044C61F8F4F722222E1A353463F84F412221D114D2C9D589B789E
+:80DA00008B78A946827185F91161175886C2C12F2C36AA7E41F0B188655B221F647114DB82F924915D318F54FE2452ED831E824F52B18CD23458174DB928883F44FBC12116F4121B371E5D5A3D8C142E244AD1CAA9824CE8247478FC488484AF870A2002000000C048218429914418458891411800118004481A1221011220044221000031
+:80DA800048800400001A842208820000429BF1245E435FD4E231F126229F9484F16D7DEFF6F24B6BCF44F25AD2BF35F6AB9D2B113F15F9281C1F69F91E9B2FE7FB424A3F85FD74551BD66F43E234F86E26CF81F534DF3FB97176F4AD1FAFCCF5E26CEFD9F1EC641B442F8652C6FD14BF227382D2ABF69FBEAFE5F54D66B7243F1779A8D208
+:80DB000036D144F83414CF63F71E749E129E922BCE8F8F7E14F828286F7146F256455FD7F71819CF92F669498F83F35D5FEFE5F14F6FDFD4F7F3F59F1DFEA9BD6F48D857FE889C1F6BFB2EAABFD2FE282A3F8FFDDFDD5D955F6FF5E78EFF7CD8ACF42DEF6FF971FEFCA51F3F9CF79C1CE7A86FFEF6C1463F9CF4B615BFD8F5BA3E7FFAF2D5
+:80DB80008BABFFE9FBBBBEFD2EED6A3FB1F7EC66EFDCF485E66F6FF9DA52EF4DE723F392B26F4AF8F8C84F81F4DAD8AF5D4DF266677D676F715262BF96F66475FFB4F6462EFFF6F6CD7DAF45F979219FB85BECDFD47C38DB96F92E2BAFE2FAD25B2F12FA7F7D5F54DDCCD954FC2EAF77D477E67F5DFE6CDC6EAFAFD5F64AECAF85F5958CC0
+:80DC000019BA93FF1FBEAF6BFB1AB81F18F1495ABFE9F7525FBFE7F75B2E3BBF8FADDF57F114944762EF67FBF674BAB136F164C8ABFF8F85F52838EF1E0D6F55F53D65CF51F268249FB4F47E76FFF4F4763EFFF5F7CD7DAF2DB9FAFA8DBA8FB9F969C99FBBFA27BBFFBBF3EBEFBFBBF3A381CFDFFF25B4DFF6FF27EFED8FFFF5F1FF3F7FC3
+:80DC800049F6A95D4FFAF8DE6DCFCBFBCC4A77793F6BF2BBF7EF73FBFBBDFFF1FB87251FBEF9B364BFFDFD7F3FAFF5B2D3F3DDFBFFDDF5F5D44F2EFCFEBA6FE767226F2BFB26C8CF4FFD3C7E8F8EFFEDA28001223024202201922621480124C022828D22824A02281388121208816918B822189882A082F024918418844F220134844048C2
+:80DD0000C14864484C82C422400444F0D28EB082A421254244C2482C811488344811810040011419344217814008A41426621440112454841B216110041CD84112E28124721124A24842112C0981822C21BA48280B8E419FF8022E431F4152381F4132481F41324A1D64AF24D141F24A921D68AF247985F84A9443F24A9553F24A954F82FB
+:80DD8000D412F9A5484E914FA2E414F8244A87155FA2E519E2A26559ACE549C25A1F49C2421F4952281F4932481F49F24A821F48B24AD141B24A9921AB9453B14A3924ABB443FA4294478A2B944F8AA4944FA2F46BF9F024431F81C4431E2487141E2465C168EF169121A9E9C1F642A14F89521A4F8B74423134A9F834482D81AE482F4494
+:80DE0000E1A2F548952EC28F55CA5A9E242E5A9E25BCE149C21B1FCD42F89164A19E24A3F41124AD821D24A9D941F26A961F41F248B25B218938942F24638A4E94478A2BA46F8AB44AFB2412F78500000000480040042001000000218001880000200400C04800002400400480018200280025083FD90E4C21414144681216D86182849117
+:80DE80001288C6410123022AD816E43274143161822C22D4213441458241C444802464254C41B1845212C3AC82811AC21434908110582489323A8A628850429AA25286F4C3A4B04232813608691658121E48456158944611325863D92898613D18881A88C41845388974288901944A73119254834842642C4C028682721D6263174826B884
+:80DF00009426EA82D121F144814A119484412D14438274447884A142EF4B074624B429018D64AC7211F8281427448E1787111CF861849CD542F882281C7418C1C54A7A12F5285183D83A4AB162C1112CD81831341E46118442AD54276C49C2861D42CB481D842F8281983459BB8232291F42314548A7228B3849D2843924648D944B697E38
+:80DF8000846FBB082B12130144211190411400482180012D22A2211321044460441532484180449154C20018112282221E2845F211248148204962884C114424180223A44200FE58302644181285C1488541288204111C21813114218489E18244141408468424410A004182A028612888168851418722A014A09482888019A494C0A44376
+:80E0000058481220FADE5D20C5228D268129C2314CE231F41842168425CB48E44D4823CA288AD341E628B118EA86A92146D43832244E2549B42CB42CE81294B81E268F48150617414D1845F188427698568F6291A4268C9258488E1A64872585C43889A524E2C9F29844F0441E244C34242125322817821C528126220482914C418A4808AF
+:80E080001B21A84B124B5A30449C04124602C0412624C38429084C01178124DB416227412B288CA242C8402A4138C8E0818A9C4445C884881FA2071A02C36381115885E42164851624E512A114846B143634222E98C964852D8881890326D442F62144C487468F4822329849F842186C12C421CB18448CCD228D1489925444981688AC1811
+:80E100004D824F2491142E184634242E88324E18224F750C814C618515C8480062481280A21281008024022229A2428488188D8421888F22A1A1A4263C4228448116E8C2A4418848117088042449921443747864852C2603A0822242DB68504A2C324110B312A242125D28D022954C8449684111444531924A81941241442D488981942449
+:80E180004588C4444442124542514A2523481664A1282341E241C6388B29404842143C88442D4923455828B7FBD02104902249512C8911054392281901196184221A0440341242800468323012001A847128228422C3A4248C1249146488230200AB841800008B12A611A881D08A0E65C1148951827B412D121E68414E214F22817228816F
+:80E2000081E88104414C1462241A24C52447A48E4862AC857214C8384C7118B22875424AC22569D22438ACC3D3C1984C53721268227883938A2F882561426F81F448242F8992342F88C4C89A62A42FDA0E2C8452121912C82CB011160C8F24A1418972154834214A11813B14282242008CC8244522C842CA9244442AE144021AF42A1170CD
+:80E2800042022C012C68C800184187441E48004088221308A30B245140084538611860711E2884444288A012C36282428449241418A42442209158206444800443021212633C48232B3818428A2191824D4282488F44216984200160980010084C0481441142241A188822028B8488128C6942881A624482214948A24225243482822508F0
+:80E3000027485042822932184002281881000021230222618840F49181800215C22291282881A012D081028130242484A01A122A1928028061C64964428C73840A80614400814628024183114238284D4841C911148428041A62C24A41F27A2F002C825249100929C22342196A241E821B24114A28828D68442A082E82882342A4826082A0
+:80E380002371C224018E4282101A58429281233142429829C28421882198182C04690818C048DF930B1B480041A04191141810049113812242084508CC312848481058246218814028018001C18A012181182F4251840012231108303810242148048E4D24841E24242862004024B882919280880910642126044904288E4A002C084824F4
+:80E400004848412C416822402222262CA248002B1446C86412233448259198382189528283F42A9D1410180410429414488044A141C04429E14104480040141844C4480040445284251824880144401444044282648A122808828022748804009FCA42C2211592211724112302291214110114214421442150822021012848A44C18881268
+:80E4800008841820410489029241002B2C238244C41842248068461A0861001FDA03A4904C104811165822A8814E22884C5A124E842928918690C2D062C884296522988144309260184C74824818823442834C22281C0889D542024E2222521841A12518082DD44CF1AC84243D42673A1F12924217B42712344F8291316F24D215FB51827D
+:80E5000015E21841A2562E3ACC7818B27865C32032282B822AE2A3B446F424628F427362644885D6423152969426453C822E2216C28E8AC342ADA283B4AA7812EAA198241E868B41AB828743A86D164F82688146F6C8A3E012524845F228216932597D2850761B4287298F82759219B58398A42B84C9B28283B286F244289E56ACFA8424D1
+:80E58000651A648A4E1C67248DD82D4A12C7AC4C78426242A5F2186C2F88D14E99422F64F81A182E588C84F42C14EB1CAFC101241AA548CF8C15D848314485F86D3814B01152CA559E484D288F42F41B24429E9127862F18F24894ABC44F567382F49C442B1D4FC4F8868C8B94BED44F84FAC6444E4A4E448F44D1683A1A1E4847298B857F
+:80E600006F8C8CF48812497918024D928BC5EE68C3BD34E44C6A4D2F23EBA5A3C44CE424BCC2B546F9C42E2FA47B32E683A8294CBD14E4A60500004002241A44A241A041244824C022482400000021908200100461A01200901420022282200882200800824A2208FE47F04446ACF2181AFD6FBFD454DB9FC5B54356647F7CF812933F3D49
+:80E68000F3BB896B919AB9B6ADDDAF4CB49838E6CFA8FDF8149E946F2AF846C28F8CF51C128FE7F9969E6FEBFBA6AEED8C4F45E16DFCC8C22F267E42FA3A3EEF48FCEECE2FAFFBAE6C4F4CF9A47C4FCAFF5C522F21FB52126D86AD3A6D86EF64B1B2FA7392FFA2FA46584F85AC33E781EFEC46F244461B668F21D39AF6292D9F52F2595DB1
+:80E70000DF867611F5A3B7FFA8F9B3B3FFD9FB84C44F49FBA484CFCFFD84944F48F9A4A4CF89FDF6944B8BEFEBFFCECAEFC6BF1CF57CDE6F6EFDAAFAEFEFFFCFCD9AEDBDF8C2DA2F2EFE4242AFE3F39ECEEFEFFFAAAAEFCAFA8494CF4AFF1858AFE5F3123A2F66F34616AD186761ED148F2EFEE3A2EF46F676766FC5F53879CF84D5CF0F53
+:80E780004F64D666F61A1AFFB2F2494DBFD2F21B3D3D246F65F5F7B7BFFDFFDAB9BF9DBF57B1D2FD36F4EFCDBD8ABBD2BFE6F9EEDCAF4FFFD89C4F6EF9E6C6EFE6EE21E16652C22FC6F6BABEEFD9FD94949E862FE8FC82C22B51AFA2F28A9AEFEEF7F4BEEF84F4CC4A4F4FF2A4B48F67FD12B2ABBD6DC2EFA9F94ADAAF2CB9F6FAEAAAEFFD
+:80E80000B2FAB2B86F89B894F54456BF7F48F366666F42F63832BFB6F24B4FBF72F23B3FFF62F257577F7EFFEBF7AF2FFFDFDBEFECFCF6D66F6FFFFEFE6F68FBC6F66F6FFFFEFC4BFFCFAFFAECFEEFAEFA7E6EAF21F5EE6E6F67D7AAF4BEBEAFB8EC89F9918E2F68FD86C22F21F52A2EEFEDF8FEFEEFEBFBDED88FCCFDFCF48F83FF78B8FC
+:80E880002FACFFCEBA6F6DFDDE9EEFEDF9CED6EF2EFAEAAAEFECBCBAFB1E9CCFD1FD4C4E4F740B4501650126C148411004348400444004443048604410182204469414890200001002218C14446822128004482484448A1488142808F0F37D200A87220050182866329162133948E054211A28B84823E84463884C73848882C424261A0896
+:80E9000083D42609AC0C984C02C44D921A22C428AB1644E0819288412B9445D82879348822C384328744413F460F2CF4112485F2112CC3F4112CA3D4C1F24A121F41B24AB911B24A5985AB9443F24A9143F34AB147832D914F83D418F9244A1CF8244A56F1244A87192FA264594D5A9E24ACF491242F22F5912485F2912CCB141FC9B66A8A
+:80E98000F18124AB161F41B24AF91128AB9451AB9443B24A39342B944F8294924F8384FB244A9F1603A41D64241FC132441D28E0C1F648111F41F24A841F41B24AFA95288B8443F3489143F348A143C3916F83D418F824521CF924C85E814FA27518E1A26C58BC6559ACF5C128ACF181442C7581BC48F1816CAB941748AB961F41F242964B
+:80EA00001F81B2481BB54A3924AB9443F342824F82A494678129F9A45ADFB247028084020000004400100100000000C48800004214000000820000210000000022005012F0BEE5E02284E312410822548D622625293388128A818498949E2418C3D8843A4889E488C228902C471229B2C83234E886E8C836341ABA24688941472446C4885E
+:80EA80004E848D41492184B119442C5184260C42C902CCA4848F48B258428261688167335B214634281181454191513F283449C721133648A3B42CA42112B24901481326C518897112411808230124504212279A16A21416781222BC8A012CA88117842B941269D22821B51418E11221F42399C06256D412C33827432614FD28418D244D5A
+:80EB000091288D831F427C48D148E51238C42F45B22C644247AA56D848E58388A44843651316689C4332C9848F4832189A32E496C814CC944227854E861C9544CBC1181F8AC5848CF15A842E16418C91688E125CC451CB494FFC0A29815228154481240225011CA1412C21498294188688618918A2008932218952A4282B128321229852CC
+:80EB80004C420261F0228116846881852219022416681410286224434144882AF2498F00122501C30600811224C0118C1402248CE42401101408904444492451218124802448012B12828042C22885428841582A451828412208A0B41242827FD8062F2442C4188D241603792803A9423138241C51C1A113E35172AA14983E9B169028A784
+:80EC000048815E2127A24F9892426E138744A485D44231661D2445D96A72441BFC166924490A8338131621E461744428E1457214384E848E498C48F8D93B24C0141649944121374810C828112381512911E021E26462838449C2444018243464AF24524133F418234D4881424D824F12D441D218E2C8724451A494848D24A1301330468D10
+:80EC80001612F022148911C418196C8C89F83AB9A02425028CD2480380432201895221528546187111E8644862819C4388928A453811418B3824422424458A0124431152A2224F21662282608984AD1184488744184A48344A4A3A1800BF4247C126CC2114548427125E248742163922226011295C4123D182E14244C444844C18416C2115
+:80ED000054A31782045E241E61218F42344A591442151A422C22318222884E3880A3812E1832908820D4820370D10B94601493010010344414C1702CE1849121281888872318A9122464418342A5851F8821918194221881A8415A0245582248425A820190842742C1505A841AA21461633824423FD50B42602124228450224290182E1122
+:80ED8000841200508218601C121886110210088140B484240818104881E212412C12091D38112528C842C081321044088321F218A470419412248D13221428245D186B428D2117828CD11E51C139D3A2316C4B188F64F348114518C14F001FC1A4419E48812EC5469C84CA83D4414EC4298125F8271ACC84D418038363B18D824CE9E138AB
+:80EE000018278389E181E844914A4C63812AF42C8E2042C41144C5C2284F24C12C42802141A1684A0128120088B24C214874278A5A821418122E124A52A4C012D02415312420A2212B841AC281680042224C2882024486C82434CFC8054849410825E44211F4221931182CA8411E8218881524B2210490892E4849D84194841D48849D469B
+:80EE80009A34138212A3B8242448A11AA9318242A21442360225CC42848081829142008CC348418AE6880D4C024301304181448C678A00893484BB41897444C118D8C800426014C0854028648128465422422C042824904245981470C1A8348830C4B05838288AE186A1840042242DC5008100A4001840011A06130138A9011312114424C5
+:80EF00004202496282212C021400704108914800D50211212110018CC428002C121484248244F19C9324121D22125502482301C04C2F84410248111128454858482941010018A028148D861068228C12C4A4424426820A0081492282921128209144C128260A9014883B86209821501481184114208102854101A952183C3411408802D04C
+:80EF80001854181D441C82C411108614190118304830421184C03A2044024481428A014302182424DDE5C02AD01C84952581304299118101109C144002410040064C11043014818381410510924448144141201285089018881821814071439A18C01843F262E350C1426828121392298C2204812E8A52802484E148A1484628241842A3AB
+:80F000001821404808C0282243145681A04220048664418381C44A890A28806E224C162108200ACF610F1C14641200442241212148144008214840125141C304128142214222001121208284125884C4222914314200B44261626400230460841489E1F20A8480041721408144C466402C8256C22C0128C46442D012428821E82448564182
+:80F08000504169488108250A2C0C1114811095141642048C12160230142521A4212382F4F66D241AE63CA121176575F423331A52B51D428E33463A513F81C41C4F85C1218B444744F73515C2482E484112D7A41E448742AD444D36161C8252249B22B41F4422C284E48E24BB22474C127F12F1E66AA7252E2111486B212F84B62CB446688E
+:80F10000316CDE82827674F544283751706195215581C222C741348B3527944741218CAC16172815D1A3B423B313EC88F18449B745CF144857814C7449DA1434618F92941115F8331C2D448845E418F44A258F823149E73442942C26E511E842D4237852E2CC68C6121E2887612F44521250881CEC21F8ECC71445722CF4281C45F1181989
+:80F180004A742DFC2244CB139F86B498F728328728CF15F48A468F4761D18F92E3427C487484C124EA62742F18F8842117A44FB8B25378CAF11897CD828BA66FE4B4435E221ADD22B22288D4741CDB5D51E88D148CF3C8488D18E12CB1AC7942A27ACB52C78E8B557AC13AAAF4F39E002712842961884220021C082C2881083011100180E9
+:80F200000888311003118251C22048211824182448010088E022A84188124C2A81088928C18440E4DC48F243462FA5F21326BFE2F21F4D6F45F54E2CDF53F7787CAFEDF2F373BFB6F7D8DEFF6CF4CF64AFE47333F584C48FDCFCDA5A6B954FC8FCCC8C67455F7CFCE6786E614F26F6BFC6EF61F55CD78FA4FF8A868FC8F2E9A54F68FCF6C9
+:80F28000AC6FC8F285A58FD8F82324AFAAFECA888F3CFF68F88F8CFED3D9BFFEF412D6ABCCCF4CFD86148FC5EC1FFCF4F5878ACFC3F2B4F4EFC7FA9436247F51F755723B33EFC2725AFE3F3FBFD3F72D64BFD6F6DA76FFFDF5D2928FEEFFCF4AFFACF67A773F57F761233F1CFDDF5FFFB5F9264CDF94F25716FF7CF8AFE9DF96F223E1BFBD
+:80F30000BBFB9F9FBF35FD5EFFAF6CF8AA6CDFD6F225662BEFE7C895F1682DBFDAFE2363AF9CF898F26EFAEFCAFB1313ADAA6F41B9CABE18F534945EC4DEC26F67F76288AFC2F7D8FDAF8FBFAF46F273762F61F713333F23D3FFF11F1F7F67F32F77AFA7F75FEBBF75F5FBE9AF81F757C6FF85FD7F7EFF53F3ADEC9F7EFEC6462F84FC2651
+:80F380002CCFC2F684D775D5ED58D3CFB2F23F6F7F69FD1F1F2F3BF2CE468FE4FE612D4F76F2B6666F42FA27258FD6F66765AFBAFECA8AAF3FBFEAC7943D49BD23276CEF44FC5C546F45E148B438FC2624CFC6F6FEEC4F47F7EC7E6752145F75F317755F73F335374F61F97F7FFFE3F72F67BFB6F65FFBBFF5B57AF3DEE8FFB5FD7FDAFF28
+:80F40000F4F77F4DDFBEFB8FD36F7CF443896FCADCFDF685D37734FFF2FE672FFFDAF6F3F33F35F517176F6971CEF62AEC1FD2F6A1E36F6BD68A58DDCFDEFAAFEF3F32F6CA8FAF2BFFE276AFECF5C383AFA4F4C64CEFCEF49CCC8FA57494F6CB424F7EFA6E2CCF8AFF1C7BCFEEEBDB0E000045016081142002341648044C82D4480281C099
+:80F48000241008008F4412020000002A4118044184414824001224482412281287441283046FEB0A26417424413828112244A3D241A4141E282314514A1B41A532114A1A051548113548678285C1421611014D184A52A21544028B1211A5834423C81116189A212C6181A5249128844416182202829F440C2E421F4152381FC132681FC1A0
+:80F50000326A1D24AB161F49F24A931B69AB9453F84A9253F34A915B422F1479A4D812F9A4481CF9A54A1CF8274A16F1254A96F123DA96C5CA8F49D2A2FC91243CFC91248D931F49B248F89124AF14F8812CAF14D141F26A931B21AF143915AB9443B34A3B24ABB4478329F93448B84FA2F49C7BB022F511442D111D2423F211248B1215B5
+:80F58000B46AE148F248971F48B648BB85F24A9253B248B925B44279A44871A788B1A541F127C81AF8254886F127C8929CE859F222C29E2C4F32B891D61CA8298F16E849F22A831748AF16D141F22A1715F44A2151A304AD2441A9332429F212482D342E5A5FBF0F2008000000000000000000000080080000000080044800000044424039
+:80F60000080020014114F05DAB80C12125721188626248289059283E881118541241151421C21819231164222C042744418A34542362812400148117411648632244C48C31122824859147A48B8245C234808284083F9E4A018A4104212D19937249E46291A425512170C8816122C26E8218250881109845842AF4182219D56A32218D4219
+:80F68000103C611512642126C24222819D42184714284008A02418A311C81A5318541C4197D714E02D12548225922CAD4149E241521C63B22869124E9817412682582430288D128581311415C24A2AE466391583B2377429321885942811275484162254128532494D18563F242826181264222E1885F4221C242E824454124F980E18113C
+:80F700003011221321D28144A269141121112061441B4A3C012003844E2400252894C69042403241002CD141921828234214021800157842C1482C2801165841488918747B0B1C84420143441404002D9228E088542216D84A0164204408604445088C214932482921011E241001150C15C41248C56241309188901212608144A220D848DC
+:80F78000322447282418372147A3D9D12391281E2B2A944C2D1985C1191582E151342446C2118CE414F1241818465414339222471227446394144143F2822A490369E768D194C112DCC2228332348A25FE12A98CF4481289488468C1299C98E9B43428A21C84CF46073304174185D432942416A9244616A1818C522186724502A944C14403
+:80F800007028842114752254844164484311E262B1184824A26182C418653825AB1210C4629889E8A488C8141AC818A97C84B8422881EA8419DC54082CC133269813164438242184AC419913E08481313C6C81512813A514814160342213B21AE44108C314C222386C117415621195C42140E24631D86B1893C2511284214084817128E4FC
+:80F8800042084922D223468122714432211253B2486113599224825548C82246A8842982923225082FC4B129815C2A14C92102C08116914485C221AF110C49440186E54885824402301423C424100E1AC812812518041F754E8234221784814E28838112628190184724C0212CE1C291482505457281982248479141C830189962A412A5CB
+:80F9000083D14201812A1482331A56185814328B12111096142C86C4124F2679283428F04214284AF8B5B35041B01282011014444248210227C14414008718428008801644C3442D52444326242A3644701204812C44022512148417081400288120840112415FF34E3241182F12313A56D81CC1444B125D12289639282558628D546C28F2
+:80F9800016F3833A468ED848D418E34448DE1414984C1B12F02295A724472A4E1253F252816311669146F244134F8954426962631A422A911545C2424782E9DC8699288C711834344B845D9370248A121C2182F228121183420C19041781241F831438240085212B54A14A0216F5221283D486248421752428042880921A860819A214848B
+:80FA00004601244842802183A2412148C0126F650C344932121813A12123A4240023821152185C712804C442761882250441882186151851861684C5234E284C32432823912823C2329028238242B21C2288512846144854242E188410F43FD640240146068412103A8C8168489A8402418A1104C081241E818294892426A312162142023E
+:80FA8000304228441F4482114488A818434402A021F11818181812414042F235B25084111012384444482414461401418150491215B4141411C14159C22119E212444291492C14EC4214C2452001204461246691433483412144014128160283128482E1827135070019B441021150144C02185883912829042191294181C19823AB48444E
+:80FB000030182D1880084E22145212884181428883111224084004C902224518CE4140883442421F8144211C060084421200268212044962C1406424D0240400A0841446514883440440041C06102211244516C49411001813012094524126821208EF9F43922126120428239221237218D14812491893121391228312024912A842212A6B
+:80FB8000444282082D21418112414042D4223111812D244854803142D04248182222B842C18145820818630ADFF30B004840042100001938484B2448192C0183113882C0888522042082240110C8280080064608A283486822818C44216484A904408881C444004FB10F23C111414C11981215D412118241011131A11951122225024400DE
+:80FC00004081C122404434424860241D14401238110030414C440117221611032D242C120427221284688D241DC94048C84121415304441742142B14858481428244125181111945983BE02A1188188C013CC18816B1140894541BC141456191548411184B1444428C92220042818142122321F4FAB4143447484D146E119CD18191141E8E
+:80FC80001299623956E581672117814F12F1544485D3EC4118EA81887829E122D871F88288B14D291E1497B1EFF1A127611A31461D212A94858573C8ECA2E1EC77A9F148194E4447A71978486CC88B1747A42312A414385E5AA0B185D28C4752451FB353121644F2722515F46665278225947B3B82DF84F58613BFE4F42A387D1423731F6F
+:80FD0000E7E6D613F181589AFAC32C43DA2161A23D42E5B144014D1C5E1C6EE21D122F4EF41713A7822F42F43462575143C2447BC22F329B12A7142935432D2B2E8456D268391226FE2A244AB644F466285FAF0E2917522169D44ED22CF44263114D15DD2826784853128F44A4211D83267881A1545F11F1444687174E581C85D618E61457
+:80FD8000F778841F82E648B64194CA2E4265EDD35424441E335B151C314817116FA468695311C9221F31F2181315B41AD2C4F75248CD4EEB8141CF8361824CB5214401400840434882E41288C481C083C082C0828008288002812128200883088A12A22825A128148A022824282C48C882C082C084C0A2C082800883F4DF2EE0667615F321
+:80FE00003938BFD3F675792FC3F65A588FA6F65A422F2EB5D6E525F5E2C44F6CB4CEF668622F4B7A8CF6F67C6FC7F7A6F44EC19F98D699FEE8C98F92F1294B9F92F6DDF98FA3F23CF38BC2AF88FAF6576F4AEA3DFFE19A13FAA5A5CF58FA74448F8FF979BD9F983274CF81A3EE2F48F84CCC4D954F4DFCD8F8EFC6E6C6F6AC8CAEF84FC64C
+:80FE8000A7BE4D448F4F41F364633FD3F63D3CFFD3F61959DFC7F27A7C8FC6F65A581F2CF5DA5EBF2CBDC2FEC555EFDCB3ECBEB27B88F4F674EFC7F7EAF83F1DFC9989DF3FFEEDE99FBFF7393B8F1FF7FCDC9FAFFE35B58F75FFAEEEEFF9D6CCE663F5F5F49F88F21527EF17F4FCEC4F65F791B7EFD8BAE4F8C2E46E62AF8CFC4CCCEFC6F0
+:80FF0000FF5C66EBFDEF4EFFFEFCC782EF8CFF7E5CCFCFFF5C5AEF714AF174733E761E127F61F17D7A3F63F776766F66F63E2E7F63FB5A5C9F2FFD52727F74FC4E43BF7EFE3627FD877F52F7CFC97F16F6FBE99F9BFFADFD5F5EFE29899F32D47FF63F39CF68F81C5BCF9BF49E386F65FF163E6F67F587563F41DA51722D555F3FBCFAC5F8
+:80FF8000AFAF8FFD9DADAFC1F36361BF193B9C63F1745C8F6FFFCEC44F847418F8D8C86FCEAF76CFE6F5828E342F77F73F337F61F157169F83F775362B377F46F63A381F61FB1A5ABF26B78AFD47C5EF96F56B69BFD9D94FF87775FFADFD6F791F177EB9F9CDF75F5EF479EBBFB3F37E57EFCFFF5D5E5FD1F1D86EEFEBF63FCE4FA1E56949
:020000040001F9
-:80000000A884888A84A3426012FFCA033CF4112485F21124C3F41164AB141D2CAB141D24AB9419B64A3985AB944B4AAF34F935482F14F9A4482D914F8AC4915FAAC4814FA264114FA264192FA26459ACE449C2CA1F49C2431F49D238F8912487241F49724AF38124AB141F48F24A931D28AB945B48AB9443BA4AF9A4482B94478A29F9A41A
-:8000800048984FA2F4B65AD0B4D441D63CF5112CC11D68EF36F1116CCB1415DC5AF91164AF147B85D85ABBA4D432D984D452F884482F5479B6F842144FAA41F524DA5E8447A2D6D5A2615DB41AC2CB1F8CC24A1AD628AD2987241B2987249AD228B181F622161D488DB25B48AB344B4BA9F1B448AF2471A498126F8B941A2E58BFDD0A00F3
-:80010000000000002022880200440000001800000000000048000000804104280000000000EFC50F438602124B1270646211111E287A88A881430125784258211694819394418E64B0452294186081C12822B2CCB2116621124D318263A483CF1182149421481C4AC111486AA8342B1441A328BA48AB8448AFC708193184811502E324112F
-:8001800088521225A8428470128C521483B2883248418544D848062742463218821A92138914A2C1211B685B288425E481C84242297962F81AC289985846388827A14048A8412E4258609386F8E2436055461498113847842A74122162114F8225E2824196182D288D4126F1221C8374487748E4C264452E424B2C8C1538888B2127139928
-:8002000032B28E1CA9E619F232858CD242D482E52A11A51466ECBC31849B822E4815C8182B822E4A834572E8C2328E1832128D782082025026901484348C92828A8428410425448838811081688254002921110448A0421381044D11824988F4681282258232481A442139424818E044014AA8428B848E484E1850144421160484218C025A
-:80028000138128412111588538C01448406814208444F42218403A48189044528042022AA1488542344848834638488430342C024C09282004EFB54821A4129D1484AB614CB141915416942C19648A8154174832C9F818444AE8C1F884484A4AA44A4126D912046331145CD124B2649138281F4C91874B12499A81272260844B1223C91288
-:80030000728AA1584F28A184C19828AF2812EC11E8811AFCBE4C141444164586D44831438302141B848C18D94141953C4CE241B4847444B884243A412241139444A33216C4D904288985E1117421E422B1846232280052234CAA249E48812CE84B84A2816C892AE211688944675B30442C4398181E2880C15416E4C1022A01C088118E18F5
-:80038000841298814618848CC42A1112602118366645432266688841A081C6426AC4268CA1168901CAC114401C22425A482046F8EA419048383285F412283B1218218C41044188A24E1210480344209832841C2104241820CA2142828081C681144481C0424C185114482042C2242742328AF518A516C2CC40DAF8088F125126958444345B
-:80040000444661D51156D88214AC214D18C426819822588307451882B284F1298456481C083941A918A0212B4A8C84018D521E8488448B412E18829024892191818446188A44228205AFE10E00501210982820042C29014880058F44618260CA4A42C8446225422224420448698222044126820326C22438224483E2114278C11614211CE2
-:80048000244221084922F2973C6011437318521CAF227161B4287553E894C1521EC21628B884F418442B3481EF3681E38432A8422E188B244F147A2D3218A5C418442949D842AF284E124A22623B196365CCCB8445B2343C2C87181E41F0895449F1228283F618268E188E1C928998142678FC032E427026014116484104C48180618110E8
-:80050000810883341444478A10042924C44228C0212A0480824904100823A26181132182120821414C88A4242A044B424A42F2B4670014434141210410A448141A8451142041018628394412822088CC18C0444C81859944881818438191142C81A8128C88F12488281242C44847842984384243048816016FA30E48212A644281412A3441
-:80058000144E1257827283F288428189A8284A2A88E354C2284C68814C18148436140084482812448888A0A45110E24473820229116828901628AA8101A72228188B86627F4E0844874253420213531822260C60840043044C91214C840140820228438424A1424C08181142608200181820042901C022800840240888454851481F9206D6
-:80060000200123612424121220A128440013921483124411E1180123022901206828002B812C88A4282D640011D041220200884A9316A8002002002225084FCB084A420256AC245449428444C4418A8201488E4148442E49424598444F81E4825884264828426C81AE18142628280982818B2C41A3DC49111812F8488281A18924189C4A40
-:8006800083C828E0180282843E6B5082212C0144488004888216044C0440E1850888828C3B8241C82744228015C44489F684418564421A44240125584190868B288220288443AA1C4992242DC64694444958424B818F1303D04102198281133A22A0241221104122422222612200212002881282A2102481038426224234A10040142402AB
-:800700000000244A011C09422822DF684B6249860224C9119844001181B0882431AC832479412848C8130060849014C914082042B8240422807811088C32428063221822921258128E1481548D8244281C01EFC3012628914884A60211839418184444444A825114800141006D2242293112290890C2260214212445C8124C44A284185169
-:800780002100D04228B2C43222290829C4381858216123F86B5DD046719AA2222B21266E34FF4484947C1F81EF13FC18D85AC4484FC8F4368819F3142197912AF848B84DC88DDA29E2C2AC44CD3C924E5868C7842F85E78CF6324C1E122B454721218F14918A8B1424A37988D6483872A7894F2DBF8C7118F4C8442B8FAF48B8897642E2A7
-:8008000048A4414E2922BFDE4A42F2A134A761D744CF19F13134842FC662E1C6A528428E9C57454AF881414F8B388A4BFA4F1C7494034B2B4934C6292382F414842F4E68614CB83498954F4AF624848EB48B8159B415F212861F16C2862B224D2289E2241AE8219C626B91C5B424F2649A4F58B54673A4743455C6AD45A0664591152E1BA6
-:800880002B646D483E214B114243B24DB1225228149B324E344E411FC62DF4113C35E44B41E4EA58284FE2A8454FC67188F21418AA3FA18D16CA8288332849E3EBEA7CF1A529EF41F164481AF9A2188E922A312227C4CE92ACC2725E5A25F418A82E8289BA88B9D8FA1736004100821400104218022524180221101AB148028304854492FA
-:8009000028248942124812C882404248C14840088C048C4442088424842400200440034E241FD1D244F219379FA4D733D6B2B422F748429724CF8EEEA6D362F5CDD3CB35CF74F892C26F6232BB4F3AFAABC34B2AEA7E1EF28282ED42EB414F413C92AF22F21E241B41EF41D9723412A22FEBF8828247F12F25F4B2AF37B42F48B9C2F44618
-:80098000EC618E282B1E25BCC47294B892F8648A1B945FC2E82EF96414EE286F17F29DDA2423F45573FD2DDF71F749BE3D272FC1E566F72A269F6EFBA1972F26F292E2DF38FD1D37FF64FD8FF5CF56F535154F37B6B33C369AF884122F28F8E6F22B7345E649FC62F62F2BF692C34F49FD82E6AFE3F2A622BECCAAFB37654F29F8B3A77F50
-:800A000012F3A2B42BEE4F6FFF9216CAF6D2942F6CF9C612FE16BE142B176F4EE1A7B926B1A6A92EEAFBE313E065F213675F73F23F35DFF5F7517EEFF1F52A64CFC575D3F4F8FE2F86D388F78FD9DF3D794FFD9DC5CF4A7A3DFE2EB8DFD9FDEEF8CFCFFF2C3EAFE2FE2EC8CFA4F46E6C8FA9F5E86ACFE3FA4A498FA9F8586E4FAAFBE2F4BE
-:800A8000BEF487E88FFAFBEB6CAFFBFBCBAFAFE9FB18388F89FBEAEC8FAAF3CA78CFC1F1CC4CCF89F3DA68CFA2FA48D3CD8E2BDC6F47E38FF764586FD34DF252267F71F71D1FFF77F34B5F3FE5F71A5C8F61F71A1C3F4FF2B9B86E3AAF81F58BD99F5BF95D5FFF73FFEEF55FFBF92EF85F89FD6CF8CF8DFDE46CAFACFC76EC3E7EEFC3F72D
-:800B0000985EEE7C6FCFFFCCFC4FEDFD587C6FCFFFF4F48F6BFB8A1CBF5FFBDD4EBF7FFF8FB7AFE9FB3EBCCF6BFBDADA8F2DF7DE58EF6DFDCE5EEF6FF7FE7EEF67FFE6F4CFF7BF66B7B4F9FC7CCFDEFC37FF90127026012501221222122009009244924C22812201801222840149888201490849092A094D12D0248104820000244004441F
-:800B8000002004FF190B41901840C144A5411478810428309520425581421368444328348442408464452084A8242A2104008246012D832888704222418244A442241A94A84B42291104846F98024D421F4152281F4132481F41724AF11124AB141D64AB9419B64A3985AF44B924F44A915B432F147925D812F924481CF9244A1CF8244AC9
-:800C000016F5244A96E5A2E459C24A9E24ACF591242CFC912485F2912487141F49724AF18124AB161D24AF249921AB9453F84A9243F24A9243B24279A4989A4F8A84F9A44AAF120345FA11448D421F41A21416DC1AF11164A11D64AD941D6C29DB85D442F32548A9B935F44291539292611CF924121C896C514964592AE459D214E4188201
-:800C8000F5112C2AF4916C419A62121F497242F191246336112F62F881244AB395724236B4272443A294478AA931B629F2A45A2F1B0886288804000042404802000000001002000000004241400848000000004480020000004001CFFA0B1A8443691183944446DF854466488CA148A44538996816A2481CCC8846B18421AD422C12C124F1
-:800D0000C38101126A8851244004981849C1153E82482714422D820030424E1C4CF488228024A829C36282AFCC0E4C728641264834281A88B118066214521939445085CB21124B1443C14826441844C41A50244373240226A4424323110563A22483421428F291288984028D141A1822486488446185C491446F42014B413F484199414CEF
-:800D8000E444D281F41649874769B81C16217712FC418C622CA1161B1C4CFC154289B184A7412C32814B12C4182D344B12138ED124922C4361442C19B4446151822D42F04891478C2922C21C8E42168868422D88D022E841F8843116B8A206222845A2818184490900A048811388018575840816084B48608244418129410410C224481223
-:800E000010011A22C2284B1284668112020029914446648890444426183824FE110000000044614426024241184181000041422044024508848184422C0458502228A0210081808104481800901848884144F07BBC209115842816342CA489820184841091841A8259421784A5044A123448272846D81424E5242286E1252212885924382D
-:800E8000224C91585CCC4849A441448C64215815D68494281A248414A4418304813F7D0B40012818002D28120084424024A11840110C62002F28140884222D28D028A142848245823122008E11812041148835124D41218021C41842824800BF3D09184C110844CC12485442448D2600518A93248512C44A006143C458C0425CB4142484CE
-:800F0000341868C0421688A542244B21833564424C3448E0440142B04C332842804484454CC4187F75011902542125544220810294002121004D2200490122844914014C54848562C8C18180854214042628813923B04822052412448C14884408848D444C046F9805212820118803811264001280C11184259138360C4B8444000040820F
-:800F8000042726E0810821008412282E481238182E81004684644850822289058042E47F04802111CC21100130328003161414C21418483028004048542818324C2102424C022438324144850184C200814889A88140848311840180F2BA1A00381931181C8202812CB11412880116867112C11C1692288322813C2481891445E841447AA2
-:801000005866E28952828DA4122125E44102436391CE321B211AB228A44B8146B28C91448D84D082A312CB41167848944443F2A41D7022014542542E16442121022581C21240042453A21443D1481204400410E24102824924842124A221401C881248A884121400489848858414080028F02BCC000000444100000010084440246144006A
-:80108000484448448C5448200112000000800212800448180000418912042698287089097012424404289028441042024160C130188CD1480283C4444448430225F422428044848486240200441820068C018004201484242484044246FC4662001210044942044150421002C018C018184588840443842406C0688005A0424828480020C1
-:8011000002689048202401204414242404608249F41A2150A8835442000026085044444B222E24261844048524532425DA26A4114B114349D62C441402514A018558888B44484241128001184554444B262A220220C428442C9428481E18AF9C010028000000008001001004819048100440046084000028000000800200008004000020AC
-:801180004488D4830B848C24840400222100414C8282020018C0446123B442C11498824908104411414148CC284A820444000016C4444C82820200005022D082F12A3A50882848000090185024448002000000242184899144880010022601448442480000000044582820240410481818028F660C800444002100D0460128124002000022
-:801200002180818408000014444008480000004A01448002000052481002185F3A0E4410041004240000000000000000C024004820010000000000000000520000840000709607818B14424224000050448443222282010044A4242C2461419A2428080051151231288183054200000041493424226212488004A4242443F596A8404888F4
-:801280009444009012004054C428280000220021638483E184C884000014142184844CA4442240088001444428284240042800A914F2A54F40040028000080010000000041478400008004414422410018000000200158848400001008100881AFFF0B1200002400181200100200401888040042001084044222280000000012000000009F
-:80130000800481484241F0F2CB6041100410024008008123012C010041A044D044044644480448258422420212000000181A8581B1480448424A0142124018D88444F832C2102401002440A211C0122001004004E0C4544C4A04C914C4444924442401004312240300100800001A2481044A048C24024230441FF10A202252442844212BCA
-:8013800012212C2111080000608187824184304866A44200418314C4444D2628280026042841200220058100481034488D4889C4488189F4C6B9F022222F21C2122B11122B11C0122592822F11F111118B988659888F18F44848D091148154C985E884E444742494242E24222E2480524445E642F222222F21C2122B111AB892092C5922C4
-:80140000881E131F11B1886D9885B888F44848428C04488558884B445F5D066F62D222E222A1131212002592822D1B1F2191919E8887818D418324445111488485C8688F44544C4B642A222202504245C4346F22D226E222A1131A389282502229C8191B1119E989781898488B44428400C48588D6160D00000000000000000000000000D4
-:8014800000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000008E
-:80150000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000D
-:801580000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000008D
-:8016000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000C
-:80168000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000008C
-:801700000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000B
-:8017800000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE49A
-:801800000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000ED
-:80188000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000008A
-:801900000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000009
-:8019800000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000089
-:801A0000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000008
-:801A80000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000088
-:801B000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000007
-:801B8000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000087
-:801C00000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000006
-:801C800000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000086
-:801D0000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000005
-:801D80000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000085
-:801E000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000004
-:801E8000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000084
-:801F00000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000003
-:801F800000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE83
-:80200000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F
-:802080004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000072
-:8021000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000001
-:80218000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000081
-:802200000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000
-:8022800000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000080
-:80230000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000FF
-:802380000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000007F
-:8024000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000FE
-:80248000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F002150A641226022302200C024448022215128301884002D14109A1800400221422180C448455884412A1424C2140068C0241AA241421242123FF5042189C21884128147A18D2425C4244321B3BF
-:8025000024414C622249D2E27124C2222A658146D22441341224184F2211C4586E188D448D64C44A32388484C341A4521A86C6141A228112C464C426245548288B21901845F8FDA20040088911024002803124442829028D12008314682400C0144014082A0141442392280044803148208101002880C214C44881C04883F16B6B24D02864
-:802580008201216021108232322812814044342480321240981C6100C0384C41285448AC064852218001411840041212803448A0421A82220410F4B26600008444814C3224400400008002121890120010420200480010080084304822224A8244044441302400002A01008F7A0F000040141838241004004424249024212280012011C2E8
-:802600001224204128040010088C44944841442828222240044100128021018F62070080020000100100000000000044000000000000000084180000100800000000F0D7DE00251411981483052889818301904845088111490144444C0180242122C222C04800481460A912A021228961514B288384091811384048440820C428FF5B09C0
-:802680001C8283120223429E182504212B181118D041022484429041148C42322165D8C191141D1C4480220129072541F84138C1C480921A101A219C1889A82818384391148CC424F0575930212684021829012263C1222482B0184424021100604412830246C21C207314088C04806412308883A1248B1226042671B22CB48211A1848D59
-:80270000118B298289C114188034442257CE4022414318C468C56281811218121410181508AD14484411540033025F82417421420428189052D032018D1144811698141048081200288052844C418842F8266C0040419414168C01620050288A149244642214321C220260442A0422442508241022A11250144C722441742291218502404C
-:80278000D81A090081414A210884008F8B47C134172143C32A24506857A14CD194B4A9A1C250414119417889C4248D454E14C6D484F14824A4C445714235114E211AE68473A4B86811B14498238943F8824217818D42CB851B438B588D7116812495542DE83E4686C82AC9332A1A98388742D76E100425912829D186D12C4122425918A255
-:80280000842D82D01444441804A04844492494464562149068C048844813C1F41C124C2A741833612A28B542E1842191484846E28872483284488982C2888942F47927142A61114C43440460D14E144C848B0417444418816F123821CF12E55334248C6182C4834261425C51124AA3122F62B8280124903143F281264185D249C5298968C3
-:8028800012913B18181684B4144238382D9681181826E87A0C1061A4183184242428A121471289C21250498CA82122841F22881838182FC2C8211E2284B04682C5418C82C244381E4C69022011645284214B342BA1282368611AD242138694484E828CE58124F1DE2690224C625268AC144434144B1449E321381428234C82915442215268
-:802900004662441C01E0214841548484112D1342890425C44840E14154848C41C8158461848A034841C0322C6121A44024F191D6144C0450144400408864828488C18C0150488951244568810050848162294142881244144211C288A342888A24B1428261981181AC4408C6088C22A2120084AF7A4561424D21223B1287644410F6463288
-:80298000CB5287299181AD528437C14B48C7248B2145B82BC4CC134162C88D211D1ACCD284E1C4D22A85E382A44267244581D1A2DA18E2C4F198248F41B411725468819BA425C81A89D4869412ABC3322B413E488A91588344B8C9022904C54154128441128130221A82388418901832A0414C281148885224282C0421142C445484E0222A
-:802A000041140400407C220329B191822888312464418D22B04A024C016F230743C11449E111343454B41E24296143893848821C384A1225548489988413998487492881CD22114B121429C28144128C856128828418282844C9E88852224812419820880247812481C0381AF4A6A4002811008942C44811893C411821A081469188881856
-:802A800014428062994180084021823E8815A2481902132818283521290148431112D882948221304260844971820822DF59044C41490118A0161631481E41122011044B41136622428331241E41460184004AF922C24880422448A1121422B06411688A25A23422222417242051241845E24408A882C8814F58022A04E0446294400444BB
-:802B000040842384022601A354844E818058863CC481481A044114581181001904118160485220180825A41886282432442BC2B044092A6482F086D4004212502481348944184818B81428485C484441120000884844144811421486C48414468248092C14A8188189042C0192281836228988C222895218816012BFFF08604222514082B5
-:802B800054142AC48482224815E215889848888E42003012446114285D22800820038E21842C68882308304422122800003044222018248D219982EFC60348160128484A0250122846A148200500222822482B24282220120420822181E48104208284A284486061008824400224C0128C04444800CFF508004818112D441628B214028087
-:802C0000082B4141AB82142121C13949C5818CD421D8289444212A28288C84246A21248428162A2822281861814E1182001B84184604122002B088F4B4CA6082800481192102100144C02422B08221942423140421211814883044001814248146488204448504428120E244E288052262184C298239423221F0D326A01247124961432AE0
-:802C80009121274437146F44E258E8C12C8FD151F987E447788F82F8EC826D88A7141F2881F4A435CFB2FA86C95F525212486F72E416BA81B214D948F248821F1CF8A32287A81F288AB2C4A89B1CDA28F828798D222E742D621A9C82321E224CE8253E348F8498368F84E1930EEFDF0C448B15144A734DEDC1E413F3285E36A95686818C45
-:802D0000A84952F837248CE26CB284A9865F1EC9888A55418D481B164729130C14EAB694E919D428A485391A68898FC1F44C644D4E2F4DE3298871428379E1528846B326E12682D1C8EF63E546B8B28CA11A9F88094B651D241B215D411E42E716DD4A4B2199F51D2893D4A8F3D44247248D1A97874F58D542B438F5214C6F5144B41934B9
-:802D8000438127244D442F5683BA83A4D5544E481F82B112C3411427928F24B9224238F84D48213E481A28D9CAE129B582EF4CBC1675A634C263F898482887288F84FE11C300001480012400004004281548022811280011440021421120022501260122001143120113285281002048048D2400002FFA074AF4511D1F43F325248B24EFF6
-:802E000076F2637B1F57F779781F5FFEFDE88BB6FE943F7CF1C6EC6FF3FA727D4BDF8BFF6F6DF5B2334B7BBAF3262F6F2CF42C323D535F32E328EE1EE412D841F1141CFE399BD35ED23FACF88B8AAF29FD9838CF5979C8F9C3D339FCA3FA6F1CFC43832F42FD13922F14F3C6C26F4CF9D2822B994F88F88CBE8BC8DABD32BA7B0D415F51BC
-:802E8000F531355F42C6273F66F66F6BFF77F76F751F5EFEA9A58B279AF3C753FF9CF286CEEFDFF7DEDE2F6FFFC7C27B5D6F48F4B8B4DFFBFBC747CFBEFE62675F76FE21C56AE416F8A481CD9CFEBA2FB3ED14F883C2AFA8F81AD2AFC4E6557D48D77FB813FD83D22F7C7C43F383533D122F3EFBE6266F2EF5F6E6EBCE4FADFD8ACCAF8A12
-:802F0000BFA8F948F83F2A034AF411555F51F125258F87F37237BF33F279359F93F351159FD7B748E92D7BC3F3DF5BEFF3FA323F6B2A8B336F28F4B2316B6EBAF3243FEF2EF66EE27F33F737331F3AEA1EE414EC54F4347CBE783F8BFD42E23F22D623F2B2B28F88F68D84DFADF36EBB2F34FCE2CA3F65F373A33F35FE13922F34F1B6A235
-:802F80006F63F862362FE2F42628CF8AB1AAA6578F847DF709415F51D3557145F5283FBFE7F73B31FF51F33B359FD1FB39318B158E127F3DF5FF1BFFEAFAB775ED2E2F237387F3B7314F4CF6F871DFEAFBEF6EEFB6FE76777F7BF723C13B461DC1AEE4CFC7EFAFFF33931F16FA2323AFB2FA7AB2AFC4F451949FE7F37EBF2F35FDD2D23F17
-:8030000027F372B2AF2DFD83922F3EF9F6B66F23FDA676EFA7F5763AAF83F328382AF148C85FC40D1820021820422842282201408304100800427048044221282004422242004028021848262201122048A141804422210442F0A38A30A411490114C425415412441484002D154782853724244568144185414851825445621460114185F1
-:80308000C4124013114218D6814452C18B14842D811B482116D8222842247342445848221894EF82094D421F4152281F417248F11164A7341D24AB141D24AF24F98168AB9459F44A9453FA4AB74782AF147925D812F924488D915FAAC4815FA264514FA2641D3FA26C59ACFC9824ACFC91242F32F49124A7321F49B24CF8912CEB861F48FE
-:80310000B24AD1C1B26A9921AB945781AB9443F24A9443F24A944782AD944F8384F9A44A5EC350A41F45D228E4417228D141523A174189F1912425F6812C893385AF4423597A478BAD115789216F8954125F2885C1CA5CF8245856D1A26C514FB23C18BCCC2C2DD31FC1D62AD841B644B911B24ED8C192921F48F24A941D24293B15ABB430
-:80318000A2AF443924AF4411D44AF1364829F1245AFDE800A04100008004000000000000001880080000000000000000410090240010080000F09C8910443128C9416811812D2887241D148129A484248D828844CC054D488C914889986450942185D414E41902212D226CE11832411181860482C0211A28A24821D28E48888F48F2128C89
-:8032000049A2258584028C21F2A31230428A5142A014253624430130232C084213D1294301A7118813C8345344A928224711128B184417C48CB14C084A61426D322CD2185181174228A394285691218F120D418304105284182998282E8188DB1324422484896485275185B42241D8245134882AC4421F88E1924835582931CC1D8A5A4226
-:803280006D47824543C48C1B182E81157C13E2626C218D9113B441C1286D91114D21229B248B381CB144FA2288B2C934882E84C729411E6C8CF122822698B892790D4113312416043022C4461231284829082412214185011845A88415886282168171489414428481414A7224C22421848182240068141B41428242842122100400225FBA
-:80330000B1074110C428A7124C62228C041688A1481482002083B111941884F0854890418952815229082A8CC282122100286E12442F2408218E4862828581D418092182188489312444F081FF9023262162114CC14917456416E63C022921911867114C7D2498C84712E4445B1881F08164286468F11744C99116ECB424944453584219F4
-:80338000318827181416F958244CC8111B1842482F814832788905488A0189648584CFE20B174228431251421922C44A9051A081C0887198A082124E1DC18645B84D284E51848D4189D412D4A4A12826B6840486179411A62A4A36888C6448114E91884688C18A2823018068812E48004D622440018B129CC34C17634143F12288272148AA
-:803400001C81819144C9925853022931180015A4422C6222471186044B4183C422561402001E43111F24713402CE182842348B48169158832488C51840B44C41F85256001842206161412539188D1619B244A3214321210B4A629887422E1A83048E218AB41892114420F62211261194284CA1288428A284262101428B344983C22821848A
-:80348000E1274485E2824162224A29B818FCD977E04104566582632464812E146542C11845282402444351A441482C088D14412CB21408708208818714228210D2843149B130C846081588588416A2611B144888868808F05482C4163814AF690A1461401108002800118CC8888437248C68118041C1A4222484704422F221142504102AAE
-:80350000816424241818642443323A92200882AC882122831134BA842800DF5E0A4CD54231158456CC16169834A37312C2281E298E48188CD161DC84F8452213986C13B8CC82C1842C42542526B48FA124A5512826A41A5682741282D2824B6E3E47851219AC94A83221BF2134584C3A688A913CAF2138D88B2483D148F86AD94001902192
-:8035800021484552814115CC11481847882432181658481289038D2417228B8426280528611AA2428184442A48D41811018426C22889C12889018B948224842D948421224C329488481FCD091242215123149242152C01888A6121302A888AC1111A82F111C45CA48154421219522C491437844314C8614A3844D0222228A248CC22981C35
-:8036000012984241001024012100188247BC00811301228914882434828092884288414621D21434A62200421C4808282024019E4212008281E088140142482A44110240280421638234444E282684F4888A144542180200001483444122C4844C25024CE1485221608144984081025368421484442B2880012359184440414852414C0497
-:803680001618A481404A984889213114818371280926D84162523887421D24222885C48529840928C09140011841144689A2242A04481008240041241111203844C2214480A2124289818482058A21120221F03CD8143B18142C2154121C144A8141230841250800C0982C581888C04181228551148532818F18C4142280624C41416C78D4
-:80370000219289412E14C81B1220A624422A5426442241C1858222591C9D6D802402436221811566422441242684196488A4452214D1C282082712266C48184212883250224E89144B84842A9848C01841468894384811818C4804488392C422293C26442322F486E5408801C0484C82C1488C0420C448482C84E412242A248434422C0897
-:80378000200442484222CA0243442812894281248282088292008662481A2865218280881CA4286F84494243041C31151847240040034188166451604881806148838418152144122878420444830822467881460A811C981822860C8C21911816A238224E88812832835828F0B6A8C02C906400100125C5482E4444C03A30424B282314F2
-:80380000424138282B12C038818CB8881241C82A934A11048C18820445010082904844A0842604828005841823047EF4142E23EFA9F4242347116FB4F11C41A956518C91C1822E924F68B444E8A1BB49EA6BACCE4E892B984E89CC29F125C18CD889C7698FB4F2C9861F55F2815D9FA9F886744B4C684F2E7482788AD21838D95DA883B88D
-:803880004862C67F566A34688746897C46BAF481B6C4F4A4C42F26D54CB218E611F26488FF210B1260414C7131F46122469B425D47275C77362B258C7888788EE41854176D151F23F15524EF21F744412CE24871CC651583E441C8488F8A5C2C6AA6843F52FACC84444E821F125A622F82F648441F86EEC9A5788213098C012E14A8A7A729
-:803900002F82B818D38CF2328A493868AD522FFC44D247F5212539F161228956C25741CF86325AC58A2CB858F112464AF416144AB211F28E64267B8134A9DF9EED84B2212632214B426551266A5A4685CA18A0A19D2547C117884D852718459582CB811E588DF48F87A1C14FCDA1E929D444F9181227A4884AE1CED1C429F8193F2084012C
-:8039800061844F2241C811844501608124001128114C222114E144024A025A0252202522252275262131248C2442382610A241218E48214024C12612448242C024B763242E222FA5B322F23555AF66FA2224BB37BF23734A52756BEE29FA6A844F68F95C78AD8A6D816F73F37E7B6FD2F2626ACFD6F638796F8BFAA1298D393E788FE2F2EE
-:803A000036BEEFFBFBB67EDD4EEFE8F1AEBD8F43BB64F411189E9C8EC25E52EF4E3E4DFE32EF64F22F3CCB8CAF29F96256AF41E1453F228FCEF868382FC6F3383A2FEDFF6474AEE8AF97F6799BF024226F61E74232311B2EBFD6F2632A6F67734BF78A433F7AF292A2AB31EF4CFD56B6EFABFA77636F67FAAFBCAF93F2FFF9EFCDFBBDFCE1
-:803A80008FDAFF282D8F9AFE3939CFA7FF2D2BAFFAFE9B3FAFF5F1643CEF8EEFC9E129F543C38E823F21F94CC85F76DE2BFC921AAF4BFB6DFEFFD5F49292AFA1B1C2F914342F26FB3AB28E8A8FA7F438182B552BF68F83FD68F81F4341F223323E722E327F73F37A361F53F76F61BD42AF257146FEC2E62DB2ABB44FE8F95C5CBFB1F912E9
-:803B0000916F7FFF7E7F6FFAFBC8F8EFD6FE38F94F8EFB29298F92FA28689FB5F5272BAFFAFA2E6E8FF9FF2A6EAFCBEECAFAD4743F42F6AFAD5F7AEA23F5EEE4DF66F2FEB6AFC6F2293C8F6CF978725AF718122BD56F43F1CCCCCFC2FBEABEEFEEFE727C2FC6F3ECCCCFCEFF2CA5147F23F315363E367763DF87F27D5DFFF7F36F27BF7574
-:803B8000F1CE4F3F3CF6D2E2AF25F5CEDE6F67F1FEDE7F77F556A7FFFEFF7EEFFF95FF5C7DDFDBFFECEDCD2D8F92FA3939CFACF42D2BAFFBFB9BDFAFECEEC6F2FAE8DE744F6AF62767CFA9FB1FBECF86FE69EBBF44FEDCBC8FE6F76BFC9FFFEF23F35858CFEDF9F6D46F66FB5ED26FE6FDFEDEEFE3F17E5C8FC6FB7CDCCFFEF6693F4001B8
-:803C000022008C44C3488004004890412419546882308181100828001181880042001410048004860884A048244820098022C124D0C603415014114B1250121F41121C5122C012848D14431122817A11D84AA2424CC1485C82F418214D428F11F22142422C31586049205122178187241181922F22F11148811A542A1244128304A7241213
-:803C800023648181846D8BD024F41124C5F21124C7361FC1324A1FC1F24E111FC8F24A911B29AF247915B84A79A5F84A9153F342B157832F54FB35484E955FA2E454FA254A5E214FA2F4D8213FA2645DACE54DD2A2F5D1242CF49124A5F39124AB841FC9F64A811FC8B24AF11124AF149961AB945D48AB944783AF247B34B8427924B84252
-:803D0000F93448984FA2F41C1CA0421F81D628A42166D34162161D24AF14A128AF52B181F64A265B288334A4AF14332429AB422BA467822B84AE1A4E214D9A5EA147A25E212FA2A82D94422D8B17CD241FC1D42A7C1194821E642B8417482B1419D24AB881D4429B45ABB443F84A12412F2478A4A8946F8A34424FAAF5BC5F202888040064
-:803D800000000000000000000044800800000000000000000044800200000040091F2B034121901284AC026011709882D181183644708418842191824781400680044B1613420C448342054901C3287111B819A4121820618280C4484E8489648123791A028B416234CD553042869729419241457812C648C591431418182F88E1249241EA
-:803E00002119442825742498488658241848114364218B255668242662222641494268244CA28449E232D481CA418C91916120C1448130884962518237F6344674C4C122166481CC426C411E4845D19415733863416D884AD21A5C421AD4286128895184CB41A3582412881B211116B463C11489722A87726344486A811B1447864AE241C9
-:803E800062324F82C12126988141444A711CC2881827A84E344F11A681FFA90324501A80082502254198821288A014400414A01449840200424846B42414483848480012148604842D119280C4818C84A141A3A44881482C41088400BFE60A0024901C6840742C420800404408414A22922843A124005D42813904458262828344228404B8
-:803F00002502268126624185A249830220C8919032846C211928290437ABB014D272E142C11C2DE189B14CE18411F244128E112361214E1B15D22491248561E111599428165C144582A2424C914C99D1856141435A48431257141F81C2A22C042D428C6C5744112CB8116495248C072B4A8B48442B1E461818FC4997C0321546D42471917B
-:803F800094281E448C4134421800165972814144669C224F9294245214412E418B24118D446011448E6CA42E4246042E132826914229C2941B254A992120A54986D18204278CC42388AE4910646B1024E12241B8482245C8442782CCD13228C11248901429428911018CD14812042546925470147B24E8820141441451A188238422D482CC
-:804000005484251428184389A1212B12281A3C142781848344E8C44DC325122871400125C1648128F912426341424648921160218321524826648124802441E3520181242C65828314282121116491361254223890546146C81612812C28341412A74C2001442E484C068410D22661114991284B18D01A1312111C582A4448193418596A1E
-:80408000944182417048E3C134145301844632314121822D134EA4814D3818CA9212A0824301144B14269A182883F1D415002183816181268424830181002181441A4808493261281D1C2C48024983F22118818303222008644400848F42046044C0688004122A18388D884888844AF88BEE7014024B2163724864524216C25689D12A321A
-:8041000028816729A4445A18791894241F83742874183581255A141B16F09168C3311985D484025C2855628574380125C84C4D129BA14B52382E5A925849B522E981C212869C988B684A392C83FC2A37702221117811A8125028192242C411131112C1141F83140A25411822A1244D484C628285342600282F2225D584211182420249212A
-:80418000E12219314484A502460210E4445884184904841824CF664B815222118C94222E112212CC44182A44048163B11162C24825021283928500A1C712124603C9A4214493130754406A341D224A91441AA42129416C8117412125741A72186421124084A2AC20A4212A210200A11800901821214E212D421C0118484302E082BC44A1D7
-:80420000825228504828102304811088450444188890411430424222208238240043F8133E8042911864834524C4218022062B2460250012122212524C668C8481A01811113C428404213744190616041232324414002F45084F8218B21C18988400424D9883F4CBDA00240022100821150428440010084008158881A2122812212B422666
-:804280002801E08144248191581C02899248108AE88488121101584222484D28C22A0121CF3B0D4663938514581881842377289648A711A502A121486B5228443A0444815024261868442443173838494185047021344119426324111582B181919318CC99198C888281E524A3182003EE5740081522C34413861438411A021694484A01EF
-:80430000118427A487261181422142409444148501414652182926A3428181A041121146088C24263488B082442298828B280049B882C4882F684D03204201C01100148084012001002006168202800212200500001A820441424144222400D0120422480088224220F11ADB202848144445089032462474220818302C4149D48411481844
-:8043800018044130148962C4850223C1488D2254121524C11484C18483E282544B14284848504889614224CC04128426F47F8650828148004E14196114158291244C018B248B141001222C849322272445CA92241DC22424182E41112681018C02686253229214901122C08490A2229880180290A22926F4951D20F4A1185D1E9B626B4770
-:80440000C7464E582D1229F22D442E28AD48EF84F44A124AF133112F42D64961C23E113E4A66D1C82778A87442FA4A4F5FCCF2424937216F96F266144E181F63B451D314F539211561525F2281E472F7484257468F14B183E224E318D8A8F58186C3F3DAB4C9F9C48CCE5EAAB644FC8CB48FA2C4AB40B29AF238214489E29137118785C7BE
-:80448000C22B3127247AA111488D424D4A9D1B6A321EA932488B6126F24FE44D224D144126D129F328741D162C7218922A477223048B135F8467959F877214D8C1C15B8E287AF532815D584AA8372BC42E4AAE2A8B138B821E12AAE385A4AC1FB241B323461372145AD11187321F12F65153469B5D2CC226167812E84432546F81E424E74E
-:80450000A494324D1C4365A24E888B223AF31A523664948B419F81E442F644192D481F43C25C4D2C128D644D17B3B436B218F213C4BCB88174587697D19EE4A81134122D624B212D8412267214F45C89002302694178240126016081241648026C024C0214E054028D21C025B0481221143148414245211404414814488034244860816473
-:804580008CC42440845418604410F8A47A146E223E298F83F2193D3B2E4F16F628223B77FFE4F63D294B678B3625B44AB55AB764F628787F21F15A4B855ABB97D51E186FD3FA2FAF95DDA2F4264CE791CFC2F624275FA5F21A2A26F929171B775F97B328A3628F81F12F166FC6F63B19A781FF2DBB57F1C3A1B7569F29D969B782F99A3EA1
-:80460000AB982F41F136BA2F2BA89ABE54AF67F6F1A3141F36F27361DF83F229659F52F2686D9FA2F27273FF72F73F6FBFD3B622F33A3A2F25B518F12672AFE2F77F7AAFF3F52B4BBD59EF85F15551CF7AFF2F277FB8D926F16FA6E7B1BFA7F6267F1E4BA7A3AFA3F5271F2AB531D549D244F34858F7E6EFB2F27F3ABFA4F79BBB27693F05
-:8046800029F9423D1F39FD9A72AF2DF9181AAFA9BB5AF576BA2B332B9B7E58EEFE6F114AF373333E61AFA2F21F3DBF82F265618F22F47272EFE7F72F2BBFF7F77832AF85B35AF552526F46B728F73736AFB7543BB5F9525C3E185FC6FF2FEE8DCC3D5B6FE2747DF32E7CDF73F27C2BEFE7772CE8F3F375745F13B724F22521C5FA7F57AF2A
-:80470000A7F73B1BE7C1FFAFFB73B63F3EFA5B71FF69F9595C6FCAFB7A5EEF49FB925E7FA3BFB2FBA6947E54CF66673B343F37F33351FFA2F37F37FF52FA7D4D97A22F37F73F7FDFF3F71B792B33AF81B352A5116F64F72A77FF67F73A5FAFA2F52A58DFD5F5545CDFE8FE2F626FE3DCF7F5EF6EFFB7F27F5E7FF7F7544EEFE7F52E6A6FA3
-:8047800077F734745F43D141F22524DFA6F67B1BEFF7F77F3EFFE6F7FFFF2BDD3B99EF9CF59FD7EF67F5FEB6EFE7F79EBEEFE5F576BA2B774F4BF95C5C8FAEFE49BD60120040012E12122602002001190412280020044C028992122819012A012921941200844D1100402168120012240080020000AF3D01241B21814C32241D28221518F4
-:80480000D841522A281816384217812D374558181129F3354850818912661441142FA274480442844C42B111128C6224166832CCB44821B14228511A197442428841F842121648A4434245F8DD74E022F41124E7321FC1326C1FC1726AD1C1F24E111D64AF26F91168AF245985AF243924AF54BB34F442B54F82F442914F82D458FBA44AB3
-:804880008DA14FA2F458257FA2E45DF2214A875D2D4ADE244D4A1F4DD232F49124C5F3912483F4916CA7161F49B64AD141F64A911F81F64A9355F84A914F83F44A924782AB944F8AF442944F8394984FAA74E60326F2114C8F121431281B4127124CD41AF111642F42B911D4629A654A19D41ABB14D412FB24482F1459821CBB86C5312D04
-:80490000C25EA141DA72226A4DB4DA42FBD12C341F8946F39164819E44A3F28164A981D46AA9682F6433818D318AF44A12A2184B482B14278A214FA8F5E3DD0082480000000000000000000000800841000040020000000000000000000040016FCC0A00A440488122324193214C021260824E18416981425184202436462D22ACE258E1EE
-:80498000847253180A4821461201131142C8211321C44683698285A14183088926024118850442CD9E40B3845342361461432548741668422321921815924864118972485162186A21115412281D184400002E14125351423250844813324AA816086835225158C022124F28E1444328A2241C41FC42B750219644C854842684C22248871F
-:804A0000424B8126A2121D12837428B44A71287455184263C612472524499211499A86421B41914CA114B1496415D0348134219B248E114845F214E83D283783D48688F222584BA12A41642283C61116F4934700286582423111A144CD1113314210080014103224292101E014C2428952821661A2812128604125820284401882921848BD
-:804A800000A04100002744841841C0482FA70C498142C224E981021A021002400813D12221820218005018200442AC01203424422C51416901421946E241041A8601141082842A921812814B4881F0BE6E9022C03C8581423818E4435282838321114296288514188841AC1430412D44222FC2C128251CB4681116C812E04422A12813D1A3
-:804B00008212E842119874458812C11A4E111673A44244A2428F448286A114445FDD4D820249D258A22184814C22028C81810160838741A12218438101244D4830282632442C91582594484D12484B4267114319B128A4244469B544B24C010048B062D84228A221CB1648433848448BA3C01428AC41428C22618165429822404248542319
-:804B80002012088142C0411426B2141418482C02800212302212218581438821821391192D1133112402A304268885013F77074A625113742441448472228211A421598112084441C111414502002E48123024124F84A2128F113428812A0484422228A9B1181488E4683124B012124204288931144495022812CF650414B044018C0183C6
-:804C000011491402C9B21132124487321668144512D82182C11C46094311622441405814616D9213614245786512355822A2441810848142157822C2588002276243812571644583414282012A014941092124844458000026022042429428172460A20021004142002444008092288C018024311800301816E184528487445F6F4DB141D9
-:804C80004164214713842AC1384953D224288F1192112D14412665814604C72222181614588684212F4294164E248C2161A287495B424A1294254CD28225C2E8C12A4492281823D11684911A2E4889A12141278346CC74C45FBC0A233211650149414452812C418401A1844A41584215480754902819A42443621490282588D2A64444228B
-:804D0000110424114722168801189E2C18005048222901441648241388F4B9EF24223742212692292A41420428811844442E129485014114411289014118212C0416044E2443724A65422D34C01489044162D0844504818C015B212143354A4216944440D828F463BB200484008181D0820140A82181398494124118521C0422842012491C
-:804D8000284108C018C0480040A4418181843088424844A309432422484888826424419FA7090014154405282648521439018D421099124400181242B0224508812302290485022158B04C921C486082E084034A3218A4442148288427428CA12489038301BFCC4512814402C04C1280024C82121201280048414C84722218A414838401B7
-:804E00004240CC141C4406460CA0218C023800185042425912221186312212411821823F5202006426081284214145197818021016181B08202181352428464231288183C4442C4484C21210040042843018418321014B141890424314128C0112F0C84B401EA8424800442823218194224813811285B41442043042218C14C429800120A5
-:804E80000114400428818CC218360440044446A443283123821248042484214C71D608808204250820012021142464844222A04119042221000048301480025860832002004200004C08C0444A8801428200C2422F27078624C82C8514044418C4A721114018921418440000200410410227A1401809122200604110024A0212422911282D
-:804F000004128438436116811A4441F8BF7E60848D44488008388D44800444124B212022618110440121214A031A88810642E014430A8C6481686044421823012440148202410022001022B8D80823F4CC28266A423712842841ECF1241187C14AF3123C5E13B712DB2387451A817445E164043E5AE564C49F24F71211262254848D44C3D5
-:804F8000117E54C8344B411AB42C6381C9A3241A829418864802474767844E764E24ECF25C4AAFC2D141FD1816601147419F8248F32442AE45F9724E718408C3D1E2932EBF21941387828954C24F4544D88211B844C11419A14389E284276212959A588D4A2934141FE4E266D5487232E244F2242C16386846781CEC84F158184D4C43F307
-:8050000052188FA1C81A8E1615D122B564C5144B64878743E281D4986D848F3509151442C42A85B47CE1E2B1382441EC147212724412C53A2F34752571246C411A7414A13442224946082F85B212F3581446A8421AD232F544482B1281444D741E422AF428422A22E144914C2B54A9E41134164B83A3B1A22291244E284A21B48AFC9FBF54
-:805080001021024302626024302484224045C8221D484C0210012004288002281842430241424B1210C4482981140229C84888C082124C8884088DA412887048D4C748F364626FC6F22B23EF22F66E684B22CD6CEF42F66A28CFA2B74EE521F13A1C1D1FAB24EF47F738351AB1747741F4415358386FC1F644448FB6F73A388FA19212CF19
-:8051000042F22C6C9B11AFE1F31A1BAF66E644E4C4C21489E722A722AB76AFA7F71A1AA7C8CB4CF0B8DCDFECB4C7B744F4D2984B1B23D994F1ECE28F88EC84F4D6C2CF234AF165277F5EF22A2EBF66F26F64CF46F62C64CF62E646F32A7C3F62F33A3AAF81F317186F84F477764F5353CC6AF645444591328D38CFC6F6484C9FBAFF393BE9
-:805180008FA14BFA2C2CCF42F26C4BEFA1F31E1A6FA4B442E442C62C8D3C8FA76384AF82F66A7AEFA1F19E1C87C98AF988F8DFD9F58747CED6AFECF9FC32EF4DF1A4B88F8DFE9AD85AF4CCDA3FD346F365676F62F42B2BEFB2722CB974F41C28EFC6B27AF33D72AF44E422D3AAF3535FAB55EF44F47B653AB244E544F5415129B458D4CCB3
-:80520000F744448FB4FC33398FA59732CD54CF81F548432FE253AA2FE6E646E441E741B21CF36874AB378FA7F6787ACFC1D16CF84A548F88F81878CDC76F54B5C4FC72584BD323F38C99CB54AD48CED84F28FDBC93F066667F7AF42626F7F2FF56743CF42C2CEFE7F24E1CFD44BFA1F13A3AAFA4F5475EFFD5F56F76FFD7F72C2C4F44F4C1
-:8052800044444581F11818CFC6F64C4C9FB5FC393B8FADC73AC5FC1C14CFE7F5363EED4E6F65B536F434341E3CCFC1F3783C2F85F1787A8FA6F54C5CCF65FD5A184AF18A9AFF55FD17174F64F5EEBECF27FB3E34CFC2F3D8FC8F81F5D8D8CFCCFC5D8D10042284271200162842081A041A44A4412812B0110410084410089014420021801F
-:8053000001001848221618648100C04880044828202421044F890C3C94214004162C4A54224CE2326181851241528589226144136144B0480389F22142142E12815881E045F22418B0224514C824C1282724104418E281D42A31152443C212844CE181F44824304841CFDE0B2F32F41124C7321F41326C1FC1766AD241F66E121D64AF2688
-:80538000D981B24A5985AF747925F84AB147822F547925F842954F82E414F9244A8DA14FA2E411F2265A8F1DF2224A875D4FA2E449F2244A1F4DF226421F49522C1FC932681FC9364A1F48B66AF18124AB941F89F64A9253F94A9243FB4A964F8BF44A94478B2F44FBA4488B944FA254C5E012E4C17428B311243211A72215B42811F16AB3
-:8054000096114EB6118F141BB54A3B242F147925F8429167824E916D1A1CDB25ACA14D5ADE2126625C2E1396E5A2F4D12C26F281682CB19126F28144A9F18164AB1615D44A9161AF649225AF34312485B2242464822B3467822B142E12EE7D008248000000000000000000008001884004000000000000000000000084000014F083A960A2
-:80548000281285418474210426341A4522C2214005411548341341188C1488140214CC12C22A49314841481224226042842E16464892184116085844258AD2822422D1281468C6D028E6DD03308110110883180190182184100810082608221841302423212121042C285128414850281248001842114810084845098024820116011F91BF
-:805500004301C2845148448358412145923C263128440081C431264422C4185614B28462114D3823E1828471C912445A48201688220446480241C3048342247428314A206524A42E441CA1219ED6403211141098218092184002101118440118841826080024004042041248122C04241614E8411222B1481181014A01A5120422608218A7
-:8055800084C0482F980B1800001008890181108A0440011841004008221420C1420000122440028144001810088004410018848822007F450A2454241285047021024440285124824912083124112240342224C0482100814963244C2214042014C1481002008C414208893424480046885184376A80514124128440C821160884901A4885
-:80560000236842912412411428409C2222252134124840A8212C8481042410486584901240088C8154822034244A1188888641F864BF40020041002440048410040010410200000081002110044C02610042000000000044810000841074380714122830282001181821204842041004C4204108008418004484004C042800001200C08131
-:80568000000082411048080041AEA6002800400515481882824118024D19830143024782422281814012C85442008C61418092124421834109604183410884298111C81822C6C214604484817F8D05404204302200000080115822D018D38281018044010060828C91C23222002100C14400A18100184002400269018382A142F0F1620026
-:805700002422C0287322511870128282612812E1AD17841F4261831608428904815028844F8221F182448B2126484482224254844411122558488C0112D0228121D88481D284D8869128128C44FCB9ED40A12141000090180010080018842514D44822815281008021C448001218464422410289410880018D8110084048022B14004984D3
-:80578000021FF3010000000084001001000000000000000000228008000022000000004008A0110000F071BB00000000000000180000000000002400000000000000000088000000000000D0A3020000000000000000000000000000000000000000000020020000000000001EBE00000000000000180000000000001002000000000000BD
-:80580000000028000000000000E0BE080000000000000000000000000000000000000000000080080000000000003F1B08000000004004002004000021000000001800000018004008000000000080010000CF4A0F00100840080000000044000000000000008200210000000000000000000000003F4408000000000000000000000040B4
-:80588000040000000000000000000000000000000000F7D5000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000002100000000000000000000000020020000FBE40000000000000000000087
-:805900000000000000000000000000000000000000000000FFE40F0010084008400400200441001002100400001200002180010084000000000000180000F024B700000000000000000000000000002100800800000000000000000000280000F037CA000000000000000000000000000000000000000000000000000000000000FFE40F37
-:8059800000000000400500800444001002400400218001882810021880088400008042080000280000B014010014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C03000040010080041400000000000000000000002800008008000000288400000000BF74050F
-:805A000000000000400500800444001002400400218001882890828001884008400880420800002800007022020000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0021001400004800800221000028000000280048000059
-:805A800000484004281082044400108204440010F2448D000000000000000000000000000000000000000000000000000000000000FFE40F000000000000140000000000000000008002000000800800000028840000000027E8000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000AE
-:695B0000000000000000002800000000000000000000000000FFD70400000000000014000000000000000000000000000088000000804208000000F0B2BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4
+:80000000FFB7548FC37811F7CFE5FF5FFC72535D87EFDFF55D6D3F35F7EBEABF15B5DCF57E58CFCFFF7E7EEFE5F15E5CEFC9F95E5CCFCEFE7C3CCFE2F581DB100445012342482301001E488044618144848524C12412004A02008B2411009014C0111006188CC41212141648820440E58144864404890242F023A5F086122818D034211123
+:80008000946170117C221211082F4431212514F1421211441F8814D824C48115B84852271215285582D082344121164441583215344A829041A3028F142151521698229018B042214144FB95CAC0431F4152281F41724CF21124A7341D24AF24F18124AF34B981F64A9353F84A9343FA4A9343FA4291478A2D914F82E414F9244A8DA14FEB
+:80010000A2E415F2275A9E211FA27CD8F522CADE242FA2FCD1242F22FC9124AF32F8912CAF16F89124AF26F88164AF26D141F24A921D28AF2419B54A3924AF643924AF24F9244829F924488B944FA2F4257240FB1164241FC1523C1A7648D3C1F2481244AD174CF64A33418F3431248F3411E4147124D812D186D412D9A4D118B9244CD127
+:80018000A761117D4A871167321E2127821FC17222C864AF32E1C1726AF31124C7221B28EF26B181E664F1812CAF24B385B24831A4AF647184D82A638A2D146F88943A4B1ABF4502844004000000000000000000001880080000000080040000008400280000380000F0C2B7002CC114645D18564301818D24602889012117422554681CDA
+:8002000011314A44C91521322926584387111144832625237222342237434B2121143B8251230721111AC4184651284B12909884818189D428F68E7D6072864518A3424426983D2C41D128641290864321B1A8A1848C5284181B5A2A6844A7546354414843C4568186D62462446711C2541063AC4D48242E4886D2942DD52815E854A8184C
+:80028000295B286E1643C6C64AB9146A1144EF2B47D1617241D4A241D4418155821F82C1186792C3643A2E186998144D116781C3341B8563214B1A2E88463229CB78244819E11144B441F834424A311C4E224F14E231E222251492A2D7248AD214B8144431584E15F8A6783264424785AC58288DB4521E244F710C201114316A1564124487
+:800300000024001022822A8812344819E444116544318D25518744451278240A472219928610564189D8C14483E224E18114E281146288341285A241299A444A09818CF49E95A0121100269121006116746221412101C0848C1422521212308114224651245E21C8A092C088A08210CC288886849141268214082C21011A344241188002D9
+:800380004A61224F710E45117232D1A6C11C8532191D2C8F1154828CC12129F9814869C1442638A4288D948A9368CE2C268E8684B34882D8481334448F61E242D44118D441A212541D5AA44E863E844C0C8A921221ECC49CC12C91582DCC631572191444F4563CC014212121493221A9119942163C4126A1181FA40140448A7288D41222AE
+:80040000744834A8660112841C841B24E4C2C1484141118514ED18149E4213A1840012182CB48861442582B1860430114C7124E2C30F1C1261138D16164948312417E1241E282C1121C81449C4A84B2C20A3811E282A5814214AB221D42426CB4CB0A4012DA486219A241A823218824D924B2C439242831A12721A4434185247848CF1426A
+:8004800016284528043F29074143451132611021C124492258341628018961612848CC1132621132A822282311044B2122C8221E268B412D24D9341A27214CA3432392222622A82569813A128351846C9211895884211285F21D9750214A12883214C04411E084E18112EE185281A3718214429281D085F1128443721804804CD28181D247
+:8005000022C8416382818418880E4003444648D8181618D41C622426222194486C83348A8CA2A18FFE0400215941C21512697212012001441126618883C12828AA04121C384CDC94144E2482460884248200200142828460414301409842814A281412812462418242EF4E0E142D24B1546C721461544373117418A4383781895914B9F152
+:8005800012241E8287218DA149328E4ACA151F42C8E893C2721AB41368A498466A6A924C0429E2C2381A2D426CA24261CB14EC9228872516D816A414272B478563D48295442D4447898AC1A22F7D0C452841A2214E11C01211238216082561817081584A224216E8143314288444494434248524C224232224A221294DC41180319189810E
+:800600003222124E81286088A18C0422608B890289C249B79310C11241848C02116011C082101881810212A48268C2282548528440084C14B4189822AA44242C038D14400120C124C01A6024B0222141A42122604110F8A4B54002902110088C13DC4312011981225221802211358212C11B42C0428922A148001944012C420800922443C2
+:800680004CD14A4211087012017028020043814428F1BF87141014626540159A1C21841822828338A2418AE14891A4814185B4842408182C41028F61C88812821DA25A7812825868828B41294B988220D8228561C120012984F2224883098E2818148FC24A42145128008303190421211D443100482210322218221225C2822280B4148451
+:800700008241C4181608D481821400824162400142496116822C0240041082F4895E4003121222535212441C0112228844418C2298241226C22841004354244C41C2182CE22A4118C242388A02902440584819E164981D8946C81291A725811628028423528249B228F8CADB007021D41A8201321C6242A81CC281C41A92811A0880A8C13E
+:80078000A041B82A848B8404809444C28A04802488253C21C6826184184218462204E04411A4141223249C6421F07DAC002800511285029011884C41022C012741271440041C0840180159021081A2214488002902231881C224800200824128004141C1128B84B0950F8AE11821C144161C2204214C392886282251861A180469221104AA
+:80080000201904244824122C0246141844E242C5A213A124C0138E121412142810440149C814423136084D2345F2186B242E48448C4682083890288502444991E12441262208841A481812B422819284E048C28884264469416081818D5550382A2116988821272A44812849183842102782042B41124E5B24153184A46F81C5988F2273CE
+:8008800019C91ADD134F28B112E338B118F119524B2A5F25C1B24AF118121E3A2B845E8838451266126443F656144FC1F1162A8FF1B81AD288E741E64DB84231982F847978B332B312F9152BAF81DE11B158381AC72135F112128C7A742AB231D24252442AF314B12E124E9314257681B331F329262F437211AC26FB263AF232AC15F161A5
+:80090000A84D8565B119B9A838142EA72BA87F48E84AC3748F21A46EAADE46B616C5418AAAE22E444B688E441F237826827688FE24281F39F28128938CF642144F6831781D684E2A4AA4519B445AD148B85281F54C114E7A4FC5C44DEB842F99082AF51234E56414D55214296151255C198F2A08178A8A58622D24274A637924346847819D
+:80098000C7184F4AB81B487E589228AD128C74CAF288912B166E98474C8AD923A1A37C5944D83C78ECBF8868166DA62F3281D182D16CF82485E72229D7647246EE82B83A98888366814F3D0E424501008004160820044621611416681440214101142548D182418561140020941211188001180020220800824C220800822018F84EBF344A
+:800A00003F32F2173DAFE2F3273F8FC9F12E24DF43F224262FC2F32727FD9A1D2B9D4EFD5F6BD4ED1FFF96F54F4F7FF2F96477FFB8FD5D69DF59FB766FFFBAFA6F5F7FF2F372DA3F737A297B12F2424A6F29F912599F71F2E1633F2FDB1EF235633F14F492A32F87F635BE4B547F31F2D7E32F22F36A5EC7945F9CFD3616AFC5F53E1AFFF5
+:800A800085D5EFF2C6AACFC4F4CCECEFE6B48E44F323214F41F73C3E7F72F78D2DEF41F21C267F66F72F3EFF73F3EBFF1FB5F7B9FF6F68FD5E5EEFF6F7BF9FEFE2FA76DA6F72F13F5DEFC7FF7CF46FF6F767E72F6EFC647E3FB7FDBB7BDFFEF4E2EA3FB6F4B67E6F81F5F4F8EE627FEBFE3E277F7BFAF363AFBDFF7E4CDFEFFFEE5A7F27B0
+:800B0000F57276AFA6F74A7C37559FBDFFCAF2AFA4F76A6EBFA5F56E6EEF84F44E4CCFD3F7BCDA8B34343F32D257F63A3CFFD2F21F1F6F43E227F636263FE3F1AFA7BFF5FDC3EBBF99FB5D1F6B91DFEDFDB6976F69F1269EFFE7FF16D5EFC5F51C145FE6F7A6834F667C2EF67F47EFEFFEFA5CBF39F8D2DB6B9D8F87E7C9AA551F23F79A87
+:800B800033FFB3F3CADB3F33F3F3721FFAF2E445FFD2F2DBEFAF22F25A6AEF84F1C5D86F42F2D2F4EF82F16E78AFA3F3EEE8EFC4E6C8FE2C5CDE48347F76D677D2FFF26727FD2FEF41F279627F67F73E3EFF73F3BBBB3DABFFB1FBC797FFFDFD2FBE6F73F9F7F76FE7FDAF9EEFDBFDFDFDCF6FFFE5EEEFF6FE63C7EF66F4FE46FFBBF7FE0E
+:800C00005ABFBEF6F27BEFCEF7FCFC4F6FFF7173FF6BFABA27FFFBFBFB7BBFBFFFFF46BFFFF7EE5FFFBEFCFAFBAF26F75C58DFDCF9EDDBEF6CFEC6F6EFE6F66672EFFFFFDED8CFCEFEACFDCFAAFD99C9B022012F12012D1284471260121224860882148648224102004C2288024C1202189096B0220949014B8240021C284101262241024D
+:800C800020011698280000F0F511C01115342C122601A581D626C128881A522A1234221890A8A24CA141882C84C242A052C26302AC44C44286B42424512A9287141A724A21784AF181242B148442537148222A14344A22984B42984D4A5F6F054D421F41523C1F4132681F41324A1F41B24ED1C1B26A9921AB945781AF143935AF143B2555
+:800D00002F147B35F842B15F82F448915FA2F448817FA27458F5275AD6F1255ADE25ACE44DC24A1F4DD232F591248D131F49B248F19164AB141F48B66AD141B64A9961AB9459B44AB924B44ABB24B442F9244829F9244889F9244A7FC50E45EA41563C1F41324811A9F1112463F48128AF5411F142B116F84A9113B14A7981B84A3195ABAD
+:800D8000147B4A8B141F82B148F9218A8F44F8211A83D4252DEDB274D845E2C4C29B9E643CD5C182F9916C6B161D4C2B961D6CAD141D642BB45D6829E182F442344F82F442924F82D442B126941A4F22F5A4472028880400000000800200000000008008000014008480010000002081080000000014F0F1E700266552A9416811997141A2
+:800E0000BA28F1114822404B1DF82A44C01A2899684416C83122678491423D4449D8212245C838A4209414121E24441CC23168AD85BC84218991D41682311880C386411818F098C3142E1192278845C3374C9224296A644DA293D91A2BC8828E4415D22812749885E4887344F188445784A8237418C418126395AC6AD842F852244CAB127B
+:800E8000A82F28C28A2E528F6198448C68238268842C44E24854842D6247A2850478CD819447885F2A4B0153DD345229C92222E19CB24CD169F2852A8F18629AE5E2A4E21214D82AB181C1C18D5256B59164F54DCA862161144176B1226D8CADB487143E84F044888AD22269444F21B821843A894E894926A8528694D225B61864E249C327
+:800F00008425B21468914B81AD86E01281328A16C4131741C7327022A249181230814C58842912D44842C8A4848D2422288C7448D4862119564822F02612A0521A9212CCE222D18192148CF4261290121648A2414416C82210084E349440F86BF20000284244401428084818820081A084008288C081A481484224C2488024044400814429
+:800F800062488B82684A01108101214846A443213218482FA548C13243415812842611C8614234188D2129944123C86212A622C2842B49604145984242182229818861282C6428444A2101CF1182B1210149321241A968A48844296CC28A1424524812464454484FD7072A810131422280061C18C222182C042A14A2284AC884292428413A
+:801000009E418112481224484223044CA4411604D31148054E2483293482425061C28028A4244E2C21281846FCCE314032448128844541183548C014178468868108890129021A18C28480C9428C682242829288B0825482004828123262242843E2C45128828073289442414118186B14442CF194FB602228442524122435211A921110BE
+:801080003248298414227842218221A542224002212214282230C290440041164404412384D4220200650A212AC5420084421E44F03EAC9011188C024416014C615426A428204818C2844116821868824C499CA889186481C9514816948483242322B28122B11102811482864128D4810884B08804821A88046041001FAE0300112418816D
+:80110000004018B3288401A0416608C0440048002828482824100481211280182A64821A8421228181028841508443A22842783028A8AFBB081B212840C2244D19581B1256742461282628C142B046219611A24C25A59249A62886922426382C5D284721499A4C1A3E28639431122E812D18441416F442914A62230060E84460852E862ACE
+:801180000C78528B2422DA0A2412C732441800442661812712488F24482824D86888144298284914481848228105224002808208494134488CA2845028488D912885028F24084CAA41801418C41482BF5306002400901480018800820088D04808428608224A420800008C0C22C24084012A280892004200000000124400418FE10D321031
+:801200004804282221C088121D921A4888880A4C081281484D484884484964C44C24AC188024448488814A24212402001A2884212CA8244280344448B04C08EF7B032842240022160212848213A918000060C82094488C84E48284C4C46044884088048604128A14A428428001A0184818C220860430444100F022B57018B84894484304F3
+:80128000604200884D1445B624E282AA82A28243081885D22258261AA3118B8988C30C4898130C4AD288D488B84CA4524212882288004D4445B424A222A2008084C1422572CEE241F1BCD4000000002001120000008018082A24048448003048440000800880880822001200208C04000084008DFC4068824248100400824C48E441A2215E
+:80130000A8000000250229A11418828800401141C12C8484424800004A014644C4242828002001502290527F810F848004002022044286042A8204802801002181188008000026016088226800418008004D44526800424888C3041042F8B5BC00480000000044802A080000484825084A01880000409184C08880048200000044800200CF
+:801380000048002904189F9F02411222000000000000008008800400802424040000224100008288A081880081120000800200F0BDE81038482004102881819844414782A22212880070C85222452221213948828004111952238189384820240200004B48C143222202201408242D42472456F463A140C848444A0400008051484C8882E0
+:801400000200000021212A81098A08414921444101848C044A24088188001246448482220400100821214FEF0718000000403111828800880044840000438484020000414128001844000012821220880442180010884408F0C61E00002002000080040088001008844200480000200220880180080000000000200448488200D02D0241EF
+:8014800022228002812A8111018394888848800812A0444841812A240220B448042849082A1A04228A08491828A28982884283848404004AD488442804C3F47B460012000000488AA14D200188982088984840289444424A64840040C4442800822244A08880A88880A115202121248484648162884880F4C476200144004100138188A97C
+:801500008882928200418648C8888B2448428180840444430126C62243A8811A0880220818588094C8482088252424488454884904BF8E0E2F22F212222CB11221B112012C512239F812131F11B189FD818985D818F44848421D4911489558884F84E444742494244F4222E24202284554642E242F22F212A22CB112A1812B99822C5922B5
+:8015800029F812131F11B188ED98588889F44848428C04488558884F84F4D5BBF026226D222E123A21311240512229C81B1F1191919E8887818F18BC482444511148C485C8688F44544C4B644B222222002554444CF326226D222AA1131AB8922808259282BCB11191919E8887818BC88B444200405C888CF6A8FA0000000000000000000F
+:801600000050220000000025020000000000000000000000000000DF764611010011110000000000000025020024242400000000000000000000000040420224502225F22C970050111001110000002400000025022502002400000000000000000000100210420225421202F05BCC001501001001000050220000002124210000404202E7
+:80168000000000000000000040024012021002009FDE0C00000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D67001414111400BE
+:801700000000000024000000400200001002000000000000000025121202000000B0D80B00000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000029
+:8017800000000000F06D67100100000000000000000025020000001002000000000000000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF7606000000000000000000002502000000507B
+:80180000220000000000000000000000000000F06D67100100000000000000000025020000001002000000000000000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000004F
+:801880000000000000250200000050220000000000000000000000000000F06D67100100000000000000000025020000001002000000000000000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000B3
+:80190000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D67100100000000000000000025020000001002000000000000000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D6710010000000000000000002502000000100226
+:80198000000000000000000000000000002424EF5E030015011100000000240000002502250200242424000000000000000000100210420225421202F05D7C001501000000000025020000104212020000242400000000000000000024002421002100F0957C00000000000000000000502200000000250200000000000000000000000091
+:801A00000000DF76061100000000000000000050220000000021000000000000000000000000004042F2EE3500111414150111000000002400210024002100004002000000000000000021212100242552222424F0FEBE00111414140000000050222502000021101202002425120200000000000000000000502225522221007F8C0900C8
+:801A8000000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D671001000000000000000000250200000010020000000000000000EE
+:801B000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D6714100114001100000000240000242400100225420224000000000000000010121202242424405222212FD40B405111151141010000004002000010025022000025420200000000000000002100214012420200770E
+:801B80002200141414110000000050220000000010020024210000000000000000000000502250224002FFDD0C00000000000000000000250200000050220000000000000000000000000000F06D67100100000000000000000025020000001002000000000000000000000000002424EF5E03001501111001000040020000502250220002
+:801C00000040020000000000000000002100212450222421003FDC06501100001100000025020000104212020000244002000000000000000024002421002100F037490000000000000000000050220000000025020000000000000000000000000000DF7606000000000000000000002502000000502200000000000000000000000000F8
+:801C800000F06D67001414150115010000004042121202000024210000100200000000000000002121002424250224002FFB0A4041511110010000004042020010120224210000100200000000000000002100404252221002F0B4590000000000000000000050220000000025020000000000000000000000000000DF7646010011110054
+:801D000000000000000050222400240040020000000000000000002400240024401212F23D8C0050111411100100005022000000244002214002401202000000000000000000002421242400F072BF001501000000000025020000104212020024400200000000000000000024002421002100F0541E0000000000000000000050220000A1
+:801D8000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF7606104101141001000000240021210000210000400200000000000000001012120240124202005FA5
+:801E0000840B00000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D671001000000000000000000250200000010020000000000DB
+:801E800000000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D6714001001000000000024000053
+:801F00002100240000000000000000000000000000400224242121CF520E00000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06DDA
+:801F800067100100000000000000000025020000001002000000000000000000000000002424EF5E0300000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000AE
+:80200000000000000000000000F06D670015410100000000002400000000000000242400000000000000001012120240020000FFD10500000000000000000000250200000050220000000000000000000000000000F06D67100100000000000000000025020000001002000000000000000000000000002424EF5E03001501111001000015
+:8020800050220000002450220000242400000000000000000000004012424202009F8B07501100001100000025020000104212020000400200000000000000004002401202100200160C00000000000000000000250200000050220000000000000000000000000000F06D6700000000000000000000502200000000250200000000000086
+:802100000000000000000000DF7606110000110000000000000025020040022410020000000000000000000000000024244F9A0F5011141414100100000024210000100221000040020000000000000000000010522240120270F80D00000000000000000000250200000050220000000000000000000000000000F06D67100100000000E0
+:80218000000000000025020000001002000000000000000000000000002424EF5E0300150111100100004002000050225022004042022400000000000000000021002124502224210087E70015010000000000250200001042120200002400000000000000000040024012021002005FE3070000000000000000000025020000005022002C
+:8022000000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF76060010011001000000004042022100400200100200000000000000004042420200400200C7460011140010010000002121000024211012020040020000000000000000000000210000F0912200008F
+:8022800011111001000000000040420224000000210000000000000000002512124202400200D0790C001411000000004002000010022502000000000000000000000000000050222100001F3B0B40114141110100000025020040020025020000502200000000000000000000002421244002F07B41001114141111110000002502000055
+:80230000002424404242424242522200000000000000004042424212020000B0980C100110111101000000000000250224404242424252222400000000000000000000000000006F9B0C0014155111151101000000000040022140020000000000000000000000502221212400240000BF8602405111111415010000005022240000100205
+:802380002425020000250200000000000000000000242512522224008F690C10411141110100000050222100000010020000400200000000000000002424401212022100F0CA47100100000000000000000025020000001002000000000000000000000000002424EF5E030014114001000000000000212410020000000000000000000069
+:80240000000021002100211002F04DFF00141114000000005022000000250225020010020000000000000000000000502210522200F09DA3501100000000000000000024101202000000250200000000000000000040022100242502EFCE0C00000000000000000000250200000050220000000000000000000000000000F06D67000000D6
+:802480000000000000000050220000000025020000000000000000000000000000DF7606001001111100000000000010020000001002000000000000000040424202000000F05EFE00111440411101000000000000400221000024000000000000000000100210022421242100AF5B070000000000000000000025020000005022000000E8
+:802500000000000000000000000000F06D670011001110010000000000002100000000254202000000000000000024242400000024D0C5010011100111000000250200004002240000002502000000000000000000004012424202004FF6095011000000000050220000002124210000404202000000000000000040024012021002005FE3
+:80258000C90700000000000000000000250200000050220000000000000000000000000000F06D670000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D67100100000000000000000025020000001002000000000013
+:8026000000000000000000002424EF5E031400151141010000000024004002400224001002210000000000000000101212024042021002DFF9030014151101000000400224100221212124502200001002000000000000000021000024240000FF320500154111010000005022100200400225022100400200000000000000000000002467
+:8026800021254202007F53065011000000000050220000002124212400000000000000000000000024002421002100F044C60000000000000000000050220000000025020000000000000000000000000000DF760600000000000000000000250200000050220000000000000000000000000000F06D67000011111001000000004042028F
+:8027000021004002001002000000000000000040424202000000D03607104101141001000000210000400210020000240000000000000000000000502224250200BF8C0700000000000000000000250200000050220000000000000000000000000000F06D67000000000000000000005022000000002502000000000000000000000000FC
+:802780000000DF76060000000000000000000024210000005022000000000000000000210000001002F035BE100100000000000000000025020000001002000000000000000000000000002424EF5E030011000000000000240000210040020010020000000000000000000040022400006F930D00111011010000000024210021212100D5
+:802800000000502200000000000000000021004002242400F068F70014104101000000002502000021002502000021000000000000000000000025022100008FF709001041011100000000210000000000002421240000000000000000400240522200215022F0F5441446618594486149C458E022348443025C49888202442021089212BD
+:8028800023981221901A188908888304608400848C94440020226242C0244C0444A029128260814FD60BC021218591498143F25428442C07A22841C654844CC2781E2C2A68878A4158C2806C2118886D88528B3C8D448E24CCA44210D828B45418F488225E2C4CBE64684130184908284CA2521E2C42A883E1813CC21F3F074211142442C6
+:80290000444438648822281D9484880089840148102841A2410082C4802118448442480823C4444A88238CB424018C01432244048084C29889A8416F7F076083A11C0481384624C4146188004A3228284028C218008584480218160216C82844A2480090481A48285242284C0A20820800488400A01486F86977141148400890488122227A
+:8029800000004004C0241A08882C0821800120A18448424800004008414618040041008082312412820021FD55000050584800800480121404442E14008A22210180484242280888818181484200441008002002419024C024182A2801002F150E00000000000020080000000000000000000000008200004008000000000000AFFE4921EE
+:802A00000421C1488B121422424A924A208404430A13B6140890244426885812416658A2008CB428C92844122C928112818901896241B88289A8148410889184888584180441FF5B01232102230131422F4461C210611739E1A81198181A1E0E4D1A2A0C4E182044A414144815688144421E44DA12461444CA42441A26C441444852842963
+:802A8000D4A484842CD22AE122044218845FB70948105248422913D142322C6217842C41E1811CD284A21E5B244B818C2168424CC1285016441D42AC048C31448B18CCE66269416C02812D488D14588CD441E44281849158254804D84582C824108441F69EB790122824125081421A24042119A6141028494208412B243048A084206582E4
+:802B0000508140A8241842004D8112242082822188E888044887248C04A28D128C94824840F8E24A00281810C22480F44211199418828014022982D42831244445384815084D4246941280A4242F22245124424342144488C1244B144883240886185A812148448C14020020F2A84C3017D0129222472234514094828A345223D942D1240A
+:802B800061439E446B211F4482E188A5348E244364AC6082F018C4186D888E14CB821A062D4216638B2DB24CC6C284A11EA445A868148A61444D98C5A221448742C3668283D84883F418D500A0122072251221644113BC48A914290816664147284A31781AD2846D44891EE124084A82F194482CB5C83222868886B44282B1267982B82274
+:802C0000E148648423A4C3C328C48940CC944222463E244428813228CF520F2D152C42632264400433140229C812561422927226445542B02811D48444D82454482100414F28B514C216405443841AC24426C21484C4200AA99941A1C46901814E2884888584D466051C2644C41125721401B01222A4184541C232124C3812124781282795
+:802C800086297A149185A0142E824B218A045D88F084129608AF2A8491612A09436448E08C42C24812C119011881C4450890821618F4F4E61444004E2447848122260D844841848A42322881C42241112384A2432904882418C3042D4121220085C4C884C13220032211D026249218A60A66822246D4820516F817BB242C119421811822CE
+:802D00004818153224262181014904C24282008481D02C52142311081AB212A41228424A63112011028CB82874440A4260848847842014248104294204883B71B0270151CD224E141D3848CB121E216B241B1C128CB1825142ADA6D845C8B8F022418CD294B2217C2638472562611A582CDB81624B298AC4328A53428F21185848CBA56618
+:802D8000BC24916A4E228D4146F8824A8944E8A148443C6A4A024B841286F288A1C042442213512844221121842211004A01811A443424818A841124041A6282422A25D422012F8221C4411226A12900888C840820015381A142813A44042D24161858847FF3022818411819C114D02811C45498001A48012012D8840444002508816A1182
+:802E0000120E890124A048652A1A644816343484228382028400C4E0889244588C2208487FDD0B601417822800890284844C524119813486134A148C142128B828B181248292248688C8421684488502200129C42114194891888611410A8612840150828628883182F0D72C004128805122282A011394424A11A214811858460242128471
+:802E8000261806A4844178004581B31DA41200A28B41B6088392242244A183020081848884B0448208C372C20D1582024454481084051982081C8881782248882111AC82E0820849A48182248644A24800509490481C028A04309225081E452011C84282A08222808414F2A2A71443C24444314062412441181825C21444D5424412C484BB
+:802F0000C0C243B114448474429446C4C170420848242C4482899182309216180210240284612410280481844548F546E3002490442100C4426C0214282800009082230121831408221A04008C5122482218424C34148160488D242149024415021110144282020089F227AB80011E4140981190428125B848089308880016110860128025
+:802F8000624219C28219228111810222888280047184301112141CD221081181004244888800F01E18246012122C4392244D120021A04244242460219054850412490810022125882458428C11084305180019422248048502150C11100482400284F09E3A406A2184404448880614112D8CC02922248E48522118C189140269099820E237
+:803000008168814826412441088D41BC0285061A14F8124240048906308832294212044D82F0769FB0237224277364761A731164632F4431548B142F11E63CBD1288F18E8A1B98AFA274448CB944C982AED84D26AEACE55412612BF46DAA4F48E488F482811A6141B21E44841E241D2123FB8D346F19D218F286A2937B2C68A285C552D4DA
+:803080008725842B84874AA2E7428CE8B83844DF24044419D2AA932149518638454AFE12219B962D2847425D881B214D22983CD1867413E4C154443AF54C422E6826E443741CB318C198E15E7A4D429F86C662822B11822E18542F91C81613BB18D1E656214E81118788F1C4A57428E284AA418E88D04854AA4F6A0916B25255551A51416A
+:803100004E32E5B838964A5D4E8616D119E13D44156245AB6187458D48EB188F11D28818C182CF24D6A863CA2A745AE231514C8B224592125F2439C4AFB2F9DE46DDA8428F82D8E66582142D2199538231004B889E286994AA2C261DE442F246620000146024400200A0482484748234400114821423C821211440958244888584584188F2
+:80318000448820044A084A084A094A19A41441184118411800BFC7095F72F277267F33F22D2CCFC6F6524C9F96F66E3CCF46F39D95DF857523F87B9D4FE4D947FBA225BF13F3FFF97F17435511DF95F79531CF36F6A1231F16F5353F4FE5F555D77F55DDE4F8444E6F6BFBC6EFFF79FA474775D218F3157555FDA4A4DF68FD1FE53F35F6CD
+:803200005DA3BF1CFFDBF3BF1DFD4184CFC5ED65F4968E2F66F55EDEEFE5F8DECC8FC4F544D4EF86F6749A145F72F2733B7F72F27F3CEFC37316FC7B3DAFC3F77E3CFFDDF95F5D2FA3F33BB95FB9F117953E35BF93F3F8F86FC6F2CC8B7F55F47E7C7E784FB7F76D69CFA6FF74429F36FEB7B7FFFDEDE5F5454F2F4FFFD4DE2FC7F7445698
+:803280007D4E8D819F13F15CF7EF4CFEADC6FF73F45B4B7F37F883953F32F26B637F55F91CBD47616FEDFC2EB6EFC5FFFCAAEFEDFE44DC4FE4FD767AD774F027277F72F62F2FDFD3F32C2E6FC1F1696B6FC6F36C7C9F79FDDB9D278EBFBDF3C79EFFE8F9A7A6EFB3FF9ECAEB449944F156F84F89FB6DFA6FB8FA42E84FE3F3575FCFEDFDD1
+:80330000C6DC1F78F8CE47AF61F14E4E2FE9F8D6C63F28FC8C2D5FF9FBC54D1F5E7E85FED6A63F7DF29F67BD9F25F343291F89758CF48892EFE8F8F242EF6EFDEE92EFCEFCDA4C4F4DFC4C5C2D27147F53F33F57FFF1713FFD3F2F6FE5F56B2FAFE3F57E7CDFFDFDDBCD2FAFFFDBFB7FB5F59F9D5F69F9DED9DFFDFC464CDFE4F44E4D5F9E
+:80338000DFEF8DFEE5FA6F9EFE756B6FA4F6EE4EFFF9F9D6DE3FBDFCEEEFAB77CFE7F7F2627F7DF48F828F38FABDB7DFF9FB8FADDFEAFAFEA2BFFDFBBE6FBFB2FBFAFABFA4F28B4FEFDBF1C8DEEFECFCBA84CFCEFDE8BAEFC8FA968C4FE9F8243E230F2501450169012E1284608122400214008481928524010010088B2418811820020096
+:803400002A0140F824118447121668321608160892208922A9241242F02E77603AA012286130221628042724122009842BB412258244A4424A48AAA4224225022C2CC8428384219142822562C82E1144348241001114501AC01284464208824245F13A26C0421F4152281F417248F21164E7241F41B64AD141F24A921B21AF243915AF24E9
+:803480007935F84A9353F2429157822D915F82E454F9254A4E817FA2E455F2274AD6F1274AD6D5A6F4D824ACF5D1244D431F49523E1F49B248F19124A3F48124AB141F48B24AF98128AB9453F84A924782AF4439242B944F8294924F8294984FA2D48A0C4D5A1B61241E2C2417C1C5A3218B144CF242169E282F24F311484E9657838F6400
+:8035000031814E16578229F923482F44F121188F44B12368443FA2614D7782426FB271D8D5A2E1C552B41E64E5B311B248F111248B841F41324A1D244E141D2CAB3459F2421226F84A944392924F8394886B4389D824E5FE0600480000000044000000000000428008000014000018000000100880820100008210029FB2021686611243A5
+:803580000185844421B444522220682844448514C444004B124651412193444414522187418447A1484A911251212A011C51189084905881800181466E4212A4A04210F8DD3300432891222D221454241288122412A524018A11321245A8219143C12826C8242913D88457844822288592A4418845DA2CB888A284214B8462639122254106
+:803600004852182744A880C2744D288D145444EE537014E24481722682128114315247241221274B4D824C01CC582444856421157811243122CE2C4B1245381E1504702CC2418F210E5F245828492AC88135B8446844616B21A12218B1AD448D442D2470645A842E44701AF4DB6800C0111224C44501A02800248410C412A01480323442E2
+:803680005782811502A024A487452628414A9414106481A3A241002A283148118100800A381228164804CFB2072480912185321147161D248B12828901345058D0282201411C113148484280C24214A02126220C8A7222022144C72216044C3642482C011400482C010042418B24A29F2D054A92312D29A4688C0421248F222436224024A8
+:80370000994E174115D8227129624441824127A846D182D41262464A22644436C8165243DC4191242A81C44241182C3218828F1491828721962CB82CF8441A49E488A421892911F4F99980023289E22224E11442351827881A0424411532448F52C1112143321344484160244824538424C164581642C2E41D1222128332564448224888F2
+:80378000B904188988142464444E88B0149848281D8E60241E21A51151821784458222A224A7222814D0844948122851924914C188422DCA148CF2224122222A4432A8418A47121434244C44024B1223941A18166218812741888B92AD1421A016812A9184BF274CC232842604429028AD224F124151224D12261892182A18621213982859
+:8038000022698524C414804C34188C342280652C5888434128881282C42440242136241EC54CD82A228182048618A252849799C044454251121A322417414D114818902D32158444845224604449114261422AC18A114813084031244C213219681C5214180087144A08143086C02843618486A41832212948A841A50600814942DC18016B
+:8038800000228100C870122114182401A884608410C422411614241402D042041E84A3D38264328E141813220418005210242412880280F831B1F06216416D2251266C92CC91141F41643284B353A21744ACE15188147584B1648161421384120849A44227188D44612443822132D3228E1ECF21C26A34928B1619169411428856F1845814
+:803900002C63C449AAE1893382888C9488DF4D06008581A2141664321D28232201802128249222261842C8249A1498444E24A414418741182848524DC252411664121388813244158488041A123284244588810490288083F4A9E500254548081C51A2282883424402101104488400204258822B214A029046C445420421701242922817AB
+:80398000812445E1D214182402214127C80048424CA11800F0DDEE20A32124158432484212211338212345388822122088542881222120528488242881288100A0242884800483212114B34411412A04400400830423C28ACF290900280028108104810000228904100225280222144481468202422E428C9424210010515811A1119081AB
+:803A00003819148841E28241342228A1228328F48B6524482444249B2442201418A8844E2588118811888D428880188118862984EC1621C882A2004C014C180415C484121A04233122A144121414414304492104C9A4122E84CFAD06139816400421142211228C820281242861002800401102A082224542C12228222508464242C6424834
+:803A80004420A4412200821008428091642B425032FFAE0D185028264168112D2285828244012400002810010016480A22818140124101422E4863C1445230242262883C289821C0418400C112821C31982185F45E2400111181004800194182081901886021849283246885224308502240480881001122688181308A1008304280612817
+:803B00001885024002904428378240014581012114111304400A1012544880240483061084CC82208456245024894202002C44822152162128124AD1843114307800A082418088F4C971D0840458E01421428814682442544902001009A52202A56244302C29A8488118B048C9C9484CC618C0C92860844220E245484824C4281E41A025AC
+:803B80008442438498942FA401EE5B241B15273B1D196D261D611D1142873121AE21AD64351942814251829D18482D830089722201A143C2428B4666C42225F2222C2D46CF44F443342E262D86637283C7571F1C374393E4257611F8211317841DC41D192D4A4F448524A4814F2254CC857342F8AA3460321D144972117128E223C6293B7A
+:803C00004413B24865B83A2C78822838248F48E4227482C21887888DA9A6C24AA6FEA41F4AB24A92822CC4818CB7C4F4182825622A49D118E274C658AF8572127A18E8A174A3B18AA9218B41CF3531881A01E7E41243E6C1A8AD4787CB481FBA429144418556884E182784BD422AF248691538614E22269C1925F112A441C287848B4229C0
+:803C8000B622C458C741E9AA642CE49BC82AEF88732EBC4D5828622A8234528487818314742CF4246723DA44E942B642C416845E8487428F83024B528E76AB1C2AA5F82EA64F25061004188240880198849880095C091C091C091C091C0885117218019601122292411308822E1182456188148414164801219022842D2410020081FFDDA6
+:803D0000024E611D258F92F22D319F27F7636A2F22E233F2182ABBE64BFFAF2DFEBB858D823F29F9B3A14BEB3CFCBBF9BF1DFFF2FA8F82F2F9F9DFBCFC426A81DFD3D531F88AB8CFAEFDD35BAF85BC16F5989B7F7BA8365FE1FB2AA9BBAA9FA6F3979EBF89FB5D2B6F69FE3F1F6F23F41B598FE1F1D9971F95F7387A2F23F362222B378EF0
+:803D8000966F29F5C4C4DAFAC48D1F410C5E723FD4F62D2BFD599F3FF36369A7A4AFA7F23A2ABF97FF91D5AF25743BFB1A9A3BBB4F43F235291E93BF1BFF4A683FB6F6E9E99FBFFFA6AE3F76F63FBFBF93F772F29F92F72C7EBF7DF57BE9CF82F6C8CABFB9FCE3F11F27FF2EADCF48F8E8FAAFA1F55A54CFEDF85666EFE7F152D48FA4F596
+:803E00007A6A1F7DF9D9FBEFA1B45EA7264F47E36FFFDE5A6FCCFC8888BE184F6145F155637D67BFE2F33F27BF37F5737A25E132D3B8B4DBF561EFBFB6D79BF2991B3D822D144B661F2DB563FE4A682B66BF99F94949CFE4E56CFE49C9DFD2F6383A8F82F2594B67A9AFD6FFA4E48FA2F2372F3F1CFB15748F9BF3151C9FAFDAEFF11F3A92
+:803E8000FFB7F39AFADFF3F11A9EBF91F11838FF55F1455BEFC3F73434CF47E327B382A95DAF8DADB9CFECF96664347F35D75FF62D3FF7D59F37F7737BA7B42F22F36A6BBF9EF671F99FBEDFBB728BBB33F985954B661F2CF47BF89FBDFF6268AF87F7C8EADFF2F2EAEE6FE7F63A7ABFBEF628681FFB7E9EEED6FF84CCCFE7F7B6EE6F4687
+:803F0000F71574AF9BF3BDBDDFF7D6FFF4DDDDFFFDFB5B7BFFF7F15BD99FB4F55B69EF5DF9FDD9CFA3F77E526F45F154166F4FFFDCDC6FCDFD9C1C4FFAFB96BA90143024602248184081444148013440445828A0241008460400891212080000100214842603148226C1481412A04100200800828F390B3011272215189A41A58256181988
+:803F800062228C56284011912819041B4250814A1291287312B821849241809428492444C12485C1244642F448121283668121B048518188456844844C8194384B4A4A7184F8CC5BF024521F41D228F1112C83F4112CAB141FC1B24AF1912CAB941F89B24A3995AB9443FB4A9743FB4291478B2D914F8BC4914FAAD418F8244A87554FA230
+:80400000651D2EDA96E5A2ED4DD2A4F5D1242E521F497228F29124C7141F49766AF1816CAF16F1116CAF36F91128AF349945AF247924F84A924F82F442964F8394B24F8294B84FA2F48529F0245A1F41C4521FC1A2141FC1B242F1112CAF24F1112C4E141FC1B24AB315B24A21F34A1743E3147334D812F136481CF1245A8D112E428F517A
+:80408000F8241216D1A4E151F2245B96F5249A1F89E2A2F981648F22E948F22C91926F12E8C8F226911E2C2F76E8C1D2389B254E9647822C6B826C7B14E8447A2698B84FA2F5B2C82028880400000000800200000010828201880000000000480000000000000000240025012FEA031604214118801251826014264A481112581824141DC7
+:80410000222044C142282D41202412181CE842E4220412218444264201B02A249222A92E4434488446346418A8124182145F930E6019E0183142273395840257228190412741411506281608592452844942843224AC4128055022F02442481D24112113C42648C32411840490436147211816124482B46841E144F2E3AD20613DD0346991
+:804180002526C129288443924E87221334174C521C21281689525210B51612F24221C0CA22890491272268812B411356814C041C3242812F81362443B2226826448D448169E12422211A926C8631521F3B034100001261112111141008215018101221A44281484C024C82118851486044244E24244424603644C0440023C4489041214311
+:8042000021341444A0141230247FC304004501490121488734199212C0918008A81782814100422290415021420065280550121A5212F0281248808221110AA9388118844443820100422A54B51012F3122819312A511E8167A2224E84831A4AC241126D311652243AE414624689B2AC11318328D1E9E2223111412443D2E2C44449021E0C
+:804280002C1C53432653148A4424AC8483081658146724B048914C9E4E762404B0CB0A2542A121172141B01238422B242F2C82182211012685C1212B1214802244021C424229410145D822D2A4C4461D241AB217C231C06125A528438159828C1892110021492164452D748024F2E6F40024150C2E185414CC528115C438841D82482C89B7
+:80430000A182253C48433664848F4239211C28447D24E224821114E244010010087FA102800442C8C0888C9815AD44418B24CCC1882004488F490F4213129546818582543A201112F5186241428684044144308220884194888316494262423048448308801808850420341270A44204C0242088012148129506360281193441448422446F
+:80438000668C326622191472220817422084118AD224C298800C2522C4A5C05C441E61A16B42180066E429A41483140A19F2244811248924150800AB848CE8A1F81CE10000322126311420049410420890825226312825A1141584C44294514443922848C082004810112111028992224440085A888188684149A4244F85024B12F0A3694E
+:80440000404211D9147143D869626128484F2631292823354A2974A2BC426855602416A11426E42462A8411D4C4435F448225C9A24AC45D461279822141C688163B698F46218624582C129481C2531828A54484B48185E2889B84CC882DF26032A85522428008354816184241914180500225C722408864831844215082E4889122214627C
+:80448000488C04484458001004A5C248008D8243088CC43412A04244483884CF360B480040286181904AD0A224C242414814418983410110546241B441401408C90444682501814034282514A41246C1538812428D949800A04949288421D8520F28CCC244C04420C421281A2841018601C18932822044D882246214308430828486416812
+:804500002A6882602A46C44444224188C084A0822688883241224929880C0021483B8B00000000405248002504841C321418242622028002287088220480084502608270421208846E1A4E21384424428A11068504168414CC1841F039B724C4003614644640041E211C822401214829D424241614148404001D884E341CC2C21428E088CB
+:8045800041B4418A01284E24884C8C88089332124119029828002E882904882E88CFD90232145312311150414143622820014C012504C44100484444446C42524940DC220444304800104201112164C28C08884641089821848422818304CFFF0384644826542A85149822844C124806219C81022121141045826224124982448A44098457
+:804600001042085341844808B012C42412899852281A1A0889248101B01248F83A3600488005901281001098810088181120CA488308B08912918124410030422800E088120882200A8084022004218A9182282B812190229D332486E12802249011442512446842182041421218D1240229C221804442080021704208810041163148B11E
+:8046800041AC240112002292281088012024C144703D098480062022448114024C02682180A4421841002944B22821A48240C1144818852146C4582B942A8C880C332214811842148412D28284064784218054221E42EC48E254622C224B1125346E6D565712CD6A4B3A3F22A4111B414F41C54837B64CE245F514342E828495E56472648A
+:80470000D2CA52A41B228B8491FDCE1B442E8829C4C8422DD14B411748459A4826F649886F24F65591A21B112E82C215B1140389A21843ED26E28C18E829BD2AF222D920728518D22192441921C122622512F468226968188D124CF24852AF828294226B628C888442E14156D42D632608A5FBC41287C23E2261E6B2E8F1341B2E445C288A
+:80478000687A828AE41422B28883E4247828B1881C96884CC54825E484544442CFA10C23E142D245624697811E249784A554428FD1F818281424251293846781573827225D45816B46413D444F22FC2B81257294DC76A41C906A42C7488F4294212594A8A3FCE728CD8869B438F922242F41FDCAEF25F836949AF5C2CE1E38FE9C23D5AA97
+:80480000B898F924521A61849ECACF1742022400820010A18413A184114216C88116C881125C0A1C081C08008B216049E049029A02190219021D28D08102000000415084301485111418043FE246B3537147FF26267F71F15A5C5F77F72A2C4F6656FFFFF6F4EEE81F1BFA13452F28D55FF8DBD5DF48F827E55F5FFFE1C31F3E7E25FD853B
+:80488000842F1CA8465F52F227216AF625B34FFCFD94995E226F87FBB49EDF39F285F77FDF7BB1F182255FDCEE7E7EE7F195B13F1FF9D1C6FBDDABCC2F4DFDD1D7EFCDED6AFD54E44F647456ECC2F3F4764F4DFD94D4CFEFF6EDD5347F63F3474737725F71F15F5FFFF7F72F2DEFC656F9FFFDFDDBDD8F8DBD32F79153EF44FE1F17F5FD14
+:8049000037BD4F5FFF6747EF56F6EFCD1F58FCC4D34F66F46DFD5F53F37C7EFF5EF74C5FEFD9FDF3C3EF8EF44C6F5FE7FE25577F4FFD99BFBF7AFAEDCDDF7EFCEFCF5F69FFD7F36F6DFDDAD88FADFDD2F45F7CFDDEDCCFEAFF2C9CCF8CFDD494CFD7F77476EF8DFDDCDCCFA6F72B383477425D476F625277EFC2F23D3FEFC4F46D6F6FE612
+:80498000F4AE8EBFD2FA7A782BB96F6CF11F9DFF57F51C16FF7AF226F15D47947FDA58445F74F1EECF7FF2FA3D3F6F65F54E42CFE57491F9EC9B6746CD2E57C91F3AFDB7D41F997386FCE5CFEF6AF8C3A3BFBBF8D3D11F6FFDDBDE2F29F9D2F23F2DFD5FD48F2AF95C6C4F24F5568CACF17C7C6BDDCFC5F54C5A5B3E347F42D277F42727C3
+:804A00005F71F16FEFFFF7F75F4DFFF6F64A4EFD1F8F8EF53A383F19FBD717EFC7FDBF97FFC1F1953F6F42FFA7C76FC6F6654D5F48FC6543EFDEFC556FFFE2F26F6FFF56F6DCCEFF91FC4E7B6F44F4FDDE4F45DE31F796D4DFFBF98EA7DFFCFE8E87FFFCFE3FDE7F3DFDD7F7BFB5FD92B26F29F5D3D6FF4DFDA8B6CFC2F9C8D8CF4DF9785C
+:804A80007ECFC3F39AD8CFC4F5686A9F930D450100002440422802244044C822800242007048149228118131811008001004248C8448E822A849141E48249A44E28804842482429220F84AB50019021D2483D4419212CC16A4218502001094184B42182A44548446342514264235241411426044414221828182402804186012A084111C74
+:804B0000081848AB9480411888F4DE1CC0421F4152281F4132481F41324A1D24EF14F11164AF149961AF149945AF34F93448AF147934F8429347822DB54F82E414F9244A1CF8244A87154FA2E419E2A2645D2FA2E449F2224A1F4DE222F49124A7221F49326E1FC9326E1FC8B64AD141B24A9921AB9451AB9443B34A7B34B84AF92448A999
+:804B8000F92448984FA2F44235C05A1F41D628D441B248F11124A3C424ED111A565A1E64AD214B61AD834F83F448814F83F4428347825CDB86D412FB241A1CF924CA87114FA2E115E28265512FB2E151F2225A1FC1F2241A1F48B62AF1912423F6912823F28128EB141D24AF449921ABB459B24A3934ABA44783A91894BA6F8284D9A4B5EA
+:804C00004B032088040000000000000000002100800800004601008004000000400428000000002501ED4B00140081188120811208003024141041024242624445014022112164280021110090148354285211881448100A1880B9280800904F00235821442C54611116064583C1128164122450240012260810C242506886D128049026D5
+:804C80008161901284274181831222022C2804C085484C03442A44C681C41CD148F274B10023084C648444816C01459114302264124D2211241190128C843452256438508434AC1411512681E5022F144198528136C44887224A413184144815F442284C8241A4962E8E1485C4112F41F2E6AE00113440321125011828A11281000041002F
+:804D0000200222904440228801488A020000444018022038420082200100800840F873DB8081C211122011FC1124428246012400410020130800810048C0521218800423024004C4411AA284282400004100108402203294100184B017041C011AC211D0920514442410382A4486C48440022544A82140F84489A48A6228A0146CE24132C9
+:804D80002A4C0262858492148A128808828450496B1A301A8C2812FCBEA9802142819111301822908111B3411201640025189484414042180418A041CF1964812824241AC62638A5C424814984A1241882000000D42B124426085084EFCB0E119018704224117511A43412424800410081281A1288084002816850280029A884001084029B
+:804E000044284D28824CC2228488805848004C0829C18822281FBB079012221993281042042032241A021210923112181223041800884821200180028723602C40220821810010044A1342488408304A10F882A90060441004104224141185420180084123042140935844882215220480D848018358244324021C4198282290C12863C232
+:804E800011406211C0482810021AF4DCBF80030040041812A112168A4826044142286082301410042220010046448202200184814100842001008A162124020044281F1F071829614238260C10C61421118C2149A74180681443335281604150C24428483D12420049481C02214110D88158488312481881134281A1A42961448C2C028338
+:804F00004494681FD40726081001442112C0482A9121210050423200384810210420022001422A81A292442D922824122420024A082061241008280000F0F4A1243011D11015110410018200002021A1180000004C03268408000020120888801824080044210000A12280021AD244092285060050122B2122821812F08112604121822382
+:804F8000082304222442246029240040028C8A092C28C63216022120181208822122200860241042D81D0F8400450149411104002C8121311100001212589042D04804CC048421C42902211082721822056223225442454842141208288092180024F04A554004009042831212C82E8150488C12888103802828B882832808A8004C48824F
+:8050000002CC8101188282808629388228000000E1280025487822088FEB0E8061811812182301218212212008101202212800C02285424202248048824A8241428202002042422802002100000044E0BB04004C8444054400430244282400000021212524C11810948845088C02818021028C2164422C02004C420200C4008445081881E0
+:8050800040F8B33D2001190400002614128248024181881A48044C0829058890C820020000828289088888211004208208008C080015028084D25205828E4140055440141401214011140410064110140241100481228902002218009084A0282220020024608224C02841222511F28725404884048260822A448244444C1224121214A4D8
+:80510000284128433882868203884088418849C1B82484241A2401183848800425062840022002260221F082E72061982564548644544227432D225F6A125682228F31B1141218B292311421EA88C1122B81AC127C24FA84824352A22C62C2242FC2C3122A5B281E322E5292228E228A886228258A124412C42222818426F84234854881BB
+:80518000F27A6260424F4D7111311416F1141397A1497224DC1864811A588482155C2440624816D26682E8436C282B86442185DC8A42548818A0812A38822281A3C92229A2112D24822B428F42928225328285188AC222418D11A4214FB2B42AF17C641012518C115133F424214890822CE12861217958221E143E844998A24B981243BC56
+:8052000084222468A44CA714448B9823B2887A2238882789122B192F88A8A42ED4DE162BC24F22A4C24D24404A042488E528B82AC222A02240F8D9B8242841800142B04801C9098908890998221822182A84A142A042812A24A14296049E24D0480228882818A084200488842A08884188438218044B41814914F89721242C82F21714458A
+:80528000F4454635F41C5E6D54AFA5F3BF7BE7A8AF21F19A9EFFF97197F33E3C6F2BFB36B66F2BF936B66F27F9E4844BB92F26FEE28267666D36EFE6F7BC9EA7A36DBEEFE2FBA2122F23FABA922F2AFBB2BAAF89E821F446566F61F1B2526F68F4E6262F2A368EF0A2822728E7C84F62F2AAAA2F2AF2AE2CC7F26F21A5444F44F456446F46
+:805300003E44D264F2C46D7554145F65F54746ED4E6D562F67F3B777AD8EAF29F982927F79F13FBF6F41B186F9B4B66F4AF994366F44F3E6A44F4EEC2DBFC2FA6CAEAFC6F54CFECFE9FBBEAEEFEAF12BBB6F63FB2EBF6FEBFBB2B22F21F73A3AAFA8FC42C26F64F712524F6AF4E4A62F2A748AB282FAA2A66768AFA8F2AC8E6F6A7AAEFEA7
+:80538000AA28C7E2ED48EFC4F42828CFC3F313167022F23554FFC1514555F656567F71715EFC62367F32FE1A162FA9F912B27F715937EFE9D966F1B6966F28FB96B66BF86F49B974ED28FB8AEAED8EEFE6F41E2E6FEDF6EEDCCD2EAFBBF28A1A6F63FA969E2F2AFB92F2AFAB5AAA65F6D6562F297BC6F6E6266DE6A5F4888A2D222D82A519
+:80540000F8AC8CEFE2B222FA28A83E1E2744AD48D0C8F11E797026F6BD55FFC1F115155F65F517177F71F15E2A2F66F32FEF8B112F81F18212FFF1793CFE96966F62F2B6966F68FA96966F42FCA4844F49EB2CFDA2C2E7E2ED2EEFEDF47ACEAFA6772AFABE2F8FA3F929BA3E92BEB29E928FABF3FAAA2F2CFD96361E926F6CF2E6244F622D
+:80548000BE2AF2282A6BA829782E5E882F2AFA2A88CFC2FA381FAFC5D188F46C6C8FC2F3B35C005014501430A400000000008220482448240850485048100800800900001820020000248400008100705C0B24440010014062410010140244410020011008800140044484441812832281A8282128801208100441508421478230247024AD
+:80550000F8374CF024521F4152281F4132481F41324A1D2CEB141FC1F24A911F81B24A7915B84A7934F84AB143F342B147832F14FB34484EB14FA2F448A14FA2E415F2245A9E212E4A9E252E4A8F49E2A2F491242E521F49F228121F49B268F19164E3F48164AB141D64AF24D981B24A19B54A3924ABB447822F247B24B84AFB24488BB4D6
+:805580004FA2F4414BF0245A19D628D1C192181D2489F1112C4B1216F842941FC1B242FA15282F147834F848A143E3147A34E814FA36484EB14F82F548B14BC25E214F82E51DE2A2E159E2B27598E5A2F5912C2E5A1F41B6285541CB161F41764E9261EF24D141F66A1415FC483259B24A11B44253842B3447818BA44D48ABB44FA2F581F8
+:80560000324028880400000000800200000010020088000040010080040000880044000000000025011F1F0C864241021001282122302140140200128002001004200112000020020098210066022200602290248002002CF23C4B0092821220014008000020040000004440022200400284280010122812283248440000100430124100FA
+:8056800014F069721424CE182C084001282122411322420400004002301430840012805121401808222448818880126866206242004D22402411044091222FE60E10011220011008000021480018800200400222000000280000A021A120040000002012220200F069AD001301001048081100000000108401400822000000000000000069
+:80570000000000008008200322003F850C120010082100268201008444102201000040020010420820023A081248418028040082004184000084009F38081812008450828180921200004100184418008420020024000028A029004004824200800840948800182002F04E5B0014000000400100400824000000001002004008000020819C
+:805780000400000000000080028400DDCD00000014001800000040080000440060810022160800000021211004000080010020214108005FEF0128008100000000120018A04210228204001024410280018001220089020040880A88000000004200FB42001200008001214002820044180088200210080000002820020080010018800403
+:80580000002002000000AF930F2818100811002400108208006A01218242410084C112008C21012818000084180060818A822428012002008100F0A7E5000000001218008001205148008002280020013022000020824202230241000000000080210148007F18080000601110080010011008000000000000000020080000220084A0212C
+:8058800000000080010000BFF90A00000000002400000000000000000000200200000000000000000000810000AFA409000000000000000000000000000000000000000000000000000000100800EF8405000000000024000000000000000000000000000000000000000000400800F01FA400000000000000000000000000000000800211
+:8059000000000000000000000000100800EFB70E0040080000410000004100000000000000880021000000000000000000220000F0A8FE000000000000002004000000400440028001000020010081000000000000000000CFDD03000000810000000000002400000000000000000000000000000000000000F04274000000000000000069
+:8059800000000000000000000000000000000000000000180000F01B3E000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F004008400895
+:805A00000000000041001002000024001280082400180010080000000000200200001FA70E00000000400400800400000040040000000000000000000000000000180000F02711000000000000000000000000000000000000000000000000000000000000FFE40F00000000400500800444001002400400218001882810021880088400A2
+:805A8000008042080000280000B014010014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C03000040010080041400000000000000000000002800008008000000288400000000BF740500000000400500800444001002400400218001882890828001884008E1
+:805B0000000028840000800200003F6A0C0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0021001400004800800221000028000000280048000000484004281082044400108204440010F2448D00000000000000000020
+:805B8000000000000000000000000000000000000000000000FFE40F000000000000140000000000000000008002000000800800000028840000000027E8000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000002800000000000000000000000000FFD70400000000E6
+:4D5C0000000014000000000000000000000000000088000000804208000000F0B2BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1
:00000001FF
diff --git a/kernel/xpp/firmwares/FPGA_FXS.hex b/kernel/xpp/firmwares/FPGA_FXS.hex
index bc6ef71..3f7c1c4 100644
--- a/kernel/xpp/firmwares/FPGA_FXS.hex
+++ b/kernel/xpp/firmwares/FPGA_FXS.hex
@@ -1,644 +1,650 @@
#
-# $Id: FPGA_1131.hex 5959 2008-07-24 16:42:49Z dima $
+# $Id: FPGA_1131.hex 6799 2009-03-01 18:57:05Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000B8F609006AD6FF4000B8F609006AD6FF4000B8F6090000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111A9
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000200F0A006AD6FF4000200F0A006AD6FF4000200F0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511123
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200000000001AA1110000000000000000000000002552222552222F21F11211
:80010000122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F112121AA111002F21F112122F21F112121AA111002552222552220000000087
-:800180000025522200001AA1111AA111255222255222000000000025522200005F51F115151F1AFAA1A1000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004F44F444444F08
-:8002000044F44444000000004F44F444445F55F555551F11F111114F44F4444400004F44F444444F44F444440000004F44F444446F64F446466F64F44646000000004554446F61F116162F21F11212000000CAACCC2F2DFDD2D22F21F112124F48F884846F61F116164554444AA4446F65F556566F61F116166F61F116164554446F65F5DC
-:8002800056566F65F556566F65F5565600000000002F21F112122F21F112120000004F4CFCC4C46F6DFDD6D62F21F112128AA8882F21F11212004F44F444446F65F556562F21F112122F21F11212006F65F556566F6CFCC6C6BFB8F88B8B006F65F556566F65F55656000000008F8CFCC8C8AFACFCCACA255222000000CFCCFCCCCCCFCCEC
-:80030000FCCCCC008F8CFCC8C825522200CFCCFCCCCCCFCCFCCCCC000000CFCCFCCCCCCFCCFCCCCCCFCCFCCCCC00000000CFC4F44C4CCFC4F44C4C000000008F8CFCC8C8AFACFCCACA255222CFCCFCCCCCC55CCCC55CCC4AA444EFE4F44E4EE55EEEC55CCCC55CCCEFE4F44E4EEFE4F44E4EEFE4F44E4E00000000CFC8F88C8CCFC8F88CC1
-:800380008C000000008F8CFCC8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE00000000CFC8F88C8CCFC8F88C8C000000008F8CFCC8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCA8
-:80040000CECEEFECFCCECE00000000CFC8F88C8CCFCBFBBCBC3AA3330000008F8CFCC8C8AFADFDDADA2F21F11212CFC8F88C8CCFC3F33C3CC55CCCCAACCCEFEDFDDEDEEFE1F11E1ECFC1F11C1CC55CCC6F69F996964F4BFBB4B400EFEDFDDEDEEFEDFDDEDEEFEDFDDEDE000000008AA8889AA9991AA111000000CFCCFCCCCCEFEEFEEEEE84
-:800480002F22F222228AA8883AA33300CFCCFCCCCCEFECFCCECE2552220000EFECFCCECEEFECFCCECEEFECFCCECE000000004AA4441F14F44141155111000000CFCCFCCCCCFFFFFFFFFF3F33F333334AA44415511100CFCCFCCCCCFFFFFFFFFF3F33F3333315511100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000008F84F448489F95F50A
-:8005000059591F11F11111000000CFCCFCCCCCFFFEFEEFEF3F32F223238F84F448489F91F119198558884F4CFCC4C4FFFEFEEFEFBFB2F22B2B955999855888FFFEFEEFEFFFFEFEEFEFFFFEFEEFEF00000000CFC4F44C4CFFF4F44F4F3553330000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CF55FFFC55CCCCAACCCFFFFFFFFFF7E
-:80058000FFF3F33F3FF55FFFC55CCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004554444F42F224242AA2220000008F8CFCC8C8BFBFFFFBFB3F33F333334554444F42F224244554448F8CFCC8C8FFFFFFFFFF7F73F337374554444AA44435533300455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004AA4446AA6662AA222000044
-:8006000000CFCCFCCCCCFFFFFFFFFF3F33F333334AA4442AA22200CFCCFCCCCCFFFFFFFFFF3F33F333332AA22200FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000CFC4F44C4CCFC6F66C6C2AA2220000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CCFC2F22C2CC55CCCCAACCCFFFFFFFFFFFFF3F33F3FCFC2F22C2CC55CCCFFFFEF
-:80068000FFFFFFFFFFFFFFFFFFFFFFFFFF000000004F48F884846F68F886862552220000008F8CFCC8C8BFBFFFFBFB3F33F333334F48F88484255222008F8CFCC8C8BFBFFFFBFB3F33F333330000BFBFFFFBFBBFBFFFFBFBBFBFFFFBFB000000008AA8882F28F88282255222000000CFCCFCCCCCDFDFFFFDFD1F13F331314F48F8848425DA
-:800700005222008F8CFCC8C89F9FFFF9F91F13F3313100009F9FFFF9F99F9FFFF9F99F9FFFF9F9000000004F48F884846F68F88686255222000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337374F4FFFF4F4BFB2F22B2B00455444455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8
-:80078000000000004F44F444447F74F44747355333000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444447F71F117174554448F88F88888DFDAFAADAD5F52F22525455444455444DFDAFAADADDFDAFAADADDFDAFAADAD000000004F44F444445F54F44545155111000000CFCCFCCCCCEFEFFFFEFE2F23F332324F44F444441F11F111BF
-:800800001100CFCCFCCCCCCFCEFEECEC2AA2220000CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774743AA333000000CFCCFCCCCCFFFCFCCFCF3553334F44F444441F17F771714AA444CFC8F88C8CCFCCFCCCCC4AA4444AA4444AA444CFCCFCCCCCCFCCFCCCCCCFCCFCCCCC000000004F44F444444F47F774743AA3C1
-:8008800033000000CFCCFCCCCCDFDDFDDDDD1F11F111114F44F444441F17F771714AA444CFC8F88C8CCFCDFDDCDC5AA5555AA5554AA444CFCDFDDCDCCFCDFDDCDCCFCDFDDCDC000000000000000000000000000000000000BFB7F77B7BCFC1F11C1C00008001000000000000000000000000004001000000000000000000000000DF8D077A
-:80090000480000000000000000000000000000000000000000000080020000000000F01B24000000000000000000000000000000000000000000000000000000000000FFE40F48008001000000000000000000000000004001000000000080020000000000F089A200000000000000000000000000000000000000000000000000000000E5
-:800980000000FFE40F2800001400004840012800484001280000002800480000108204140000484001002148000010F26B52000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE808401800200000010020000100240010081
-:800A000021001400000000280000808802000088280000F04EFE000048180000001200000000000000200100001400000014000000148002000000002F49054818148002800414182810820416012810A21140012810A2414001002B11484001280048408188022148008828108204F05C6580840180020000001002000010024001002165
-:800A8000001400000000280000808802000088280000F04EFE000000000000000000000000000000000000000000000000000000000000FFE40F0000280000000000000010024001002100180000000000000000000000280000F0C1670000000000004002000000000000200100000000002800008008000020080000F0E66C0000000061
-:800B00000000400200000000000020010000000000000000000000000000008F2A090000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000240000000000180000000000000088000000000000F0ADF3000000000000000000000000000000000000000000000000000000000000FFE4DC
-:800B80000F000000000000000000000000002400000000000000000000000020080000F0AFDE000000000000000000000000000000000000000000000000000000220000F0CE4100002002000000000000000010010000000000000028000000000000000000F057C50000000000000000000000000024000000000020022200000000002D
-:800C000000000000F0DEAB0000000000000000001400000000000000000040020000000000000000008A041F7D0B00000000000000001001000000240000000000000000000000000000002004CF320500000000000000000000000000000000000060228002000000000000000088E0CC0A80010000000000000000000020080000110015
-:800C80000000000000282008000000000000FFA1030000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000082F0663E000000000000122004000000200100218001000000008008000000000000000000FFE10C000000000000200400001D
-:800D0000002001400280010000000000000000000000000000F09C6C00000000000012000000000000000000000000008008000000000000000088F045E400000000004800000020088200000000000000420000880000482008000000820020F8BA880000000048200952000000004820060000002420240200000000200800820082008D
-:800D800000A024F0984A0000000048A04800000080088242000000000021004200000000A0482008008008000022B02A0F0000000020011A040000000080060000000042220000800800000020080000880042824FB50F42200442000000228222182242002001100218800C000022281200480000000020022200000020B29B0F18A014B2
-:800E00000000000000220000000010021880080000230400A042000020044220820848000000F01DFA00003800408204000000000000000000008084082004880000420000000000800200F0DCF480011232420080040082202122040018000000000000290458202802004280044200822800800200225F91074800000010028002000078
-:800E8000000000000048008024288202000000000000002004000000AFAF010000422004240000802808008200008001222006200800008008802804482200822820080000F02DA20000420080012C011800202302000020A412001AA84221422301800400000042000000002002002200BF6B0D0000008002002004202828A284820082CC
-:800F000022204402004842282008200288008008288008000082220000FFCF0200485200211221002582582238F04212800129298401188888580000A0140028588A022800000080220600008800F031E90000220080022400000020884882142206004220048082048A0410828282024220042088080028220000143FD50F00480042000B
-:800F8000000012A824200242420021122212802202002008C88004004A218804800A280080088800002F1207004800244002211824282C012622284122014812212100420000244824002038120000000028824200888008001FE607200400480048000088002410128284228484010020044AA228820080022800008002282004002200D2
-:8010000000F056D10080042C042C02000080020000488230222818800800184001808184840400000082802202880088002114EFE30620044A0242243A03121816220280228A714282F4424242A252221A81A45422211238484A2884051AC2221A0242A04400A800AA0C88A88088884201EFF30A00002CC4422944120221212B48272823F6
-:801080004BF21282A0C12D121A282241024A081AA2444A2224E4282A21082622A2CA220082002A262882282404A2AA020000ADEB000058422002465222001898B0B28896A282CA2888E424A7622840A2822848482B42228AC4C28242008AA822124A2C2804228A08282800888A2208007FE9090000480020011220018023C8124818821847
-:80110000A02424C012282C21C41242262241224122A18212220000202208008022088200F01E150042A062C612D222B222F2424260212136B212C1222B833E82249AE925F912D22AA6132B4226728212A2C62B532F25D52241F2C2422F2CB482ED24F5521221BE522B19A055CAA8CC00A822A0A8A0882008820050CD0048A022C632422D41
-:80118000222B232B4520011AA2889E9227232F23EA29A9DD2F28B8C2B422A6372A45D222D922B162B512F552122D521F16A6FD9E932F2CBDC2AD511E122B2A223AA3444AA4CC4A042AA2A8A0CC4AA4882AAA82882C180221DF690880042AA24429B422B222B34285E121D122F112322F2199822AA9829E922F28F842822BC42B77226E5294
-:80120000238268212363224E425A7512A1FFDAE528BCD28CA431A6B28282A255CAA8CC4A2482AAA8A044A088A88A8AA8882100FF8D0300A0224223B422B232B35285E121D122F112122D822F21F982122F28FA82822BDD2F259D427AA7266E622962212B557AC72246A2512F17E62CFEC3422BCCDAEC21D122B2A2AA933AA344CAACCC4A5C
-:8012800024A2228AA888CA0C8AA8A22A8888184202AF870A000000220000000000822420044A02102204102214022190820010028084880400004800200800B0A10B00008004122412001882208802248A240400282094124A02A012C288420023222802008820220882002088020040F1447580B411021B214AB111364219B64291212BCB
-:80130000941B282B941B412B94B22F14AB432F14AB4B2D91BAE414E922E414EA2264112E42DE212E42DE212E429AC2421B292E421B2926B291A2861B2923B481324219B262B881B64218B14228B2422ABA422A9AA22A84EA22F47EC380B41126B21164241B2125B21132421B212F24B891F242A219F24282A22F3422C2A1A227142B4A2F51
-:801380001448E214EB22C8812CE51C6222CE213C65192CBD91C2521B692C35114A39912B141B282394212B8419B64212B1420A2B8422232412924229E822F465110082000000000000000000002180010000001400000000000000000000000021F0FAF4800200001812002001000024800600002082012002824A0988008008002800000F
-:8014000000800820220AC041CF1905A018A8202404224232488A048A21282124012C8888044200002162888800224622228888A44A28802C082248A08488622800804281F2623700D22A08202481822482242182210848004EA2240042A018201182A6821182C22034428288C82A8802AA8408222A04C2888A8402C0822880F244162002B9
-:801480000042001220018A0482200112218088040080020080081828882800800400000000800220820280F4738B0000A012004818001200244022018220012004108282011880280490120020028800828800800228A0244800FBB8200200301218123022480088800C802205800400488004A028423222288002B82898008A04428008DC
-:80150000008880042026D284032800A021298121012120018890821082A284004220042C042A04800382804282033822188088084A0888002288202482A4422867DB0000000042122842000042800112200100000012208824A324000088A08200480082000020024200F033FC00224200808391422A85042022044A0828602100208881A4
-:8015800081082818A04820040048488004480000AA24280280084800228F8307004A01420022000020222102200121429042221822882842001821224821A042800820088002220000222200002F73071200120000001820880C00004A02200100000000002001000020020000004800008848009F710512221820041828A04258004852C7
-:801600002242A0216821421848828003222800004AA2410022008022088002C280042002824800AF820F00200120223142120088820088008001002800004812201D022400202428044200008028028028220420F278DB80010020010080210880288488A21420A121824282181200800C00203812002128008004A248486280044248A85B
-:801680004882F097E1002880020018208A0C8008800180C18280210800000088428002428002800200000000800800A200AFDF06421280040020220820018008000012220000800518121A028200800820848284020020020082000022BEC40080040012A04142208482222484A481882221C84800884002322226022800C0222CA4481290
-:80170000184280040042A082A200222200F0CA33004200000020232501880080840400808104421800181022810280810200282002420042688820280800824FF102481A8205200100000000202522482204208481210121220028214002308248800420280480020082A0248004E07307288004800452120082420000008A0180088200C7
-:801780008200800800000020040000200482000020248808EF8B022282200480014A2204128220080024A081C8000020018008881200A012002021840428422200800248004021F2B6D8008004820000180018284A8208822248002B12800188400228121C91228248122904881200220028800248200214C81002BF9905228A0200421A71
-:801800002185A2C3CAA59C1A89A88482CA84EA21022B488A8A22A8C81A8161214823A28D9AF942221AA3288823F112322B228A24A145800442826A046A84A8C22200AA82EC18082F66034A240E22821A01185AA414208102A0442082E821AD814A840C8088042921A1322031222A08182246A28462184A2482260280044A0282C26E414889
-:801880004A42A1226F620D381A21A14400002AA128122024A868881AA11CCA8482B112A11B5A0420A11880022CA21A002C84048A188221A222426A086A0642A82AA42888C8A84A2808888F9306200220A814004820010048002008122009005880848205582002002A080080840888488880028084024200BF8F074AA53580A44420A15413
-:801900005A21A2454AACDE824AA2914AACB37E1229B192A9563AB9D2ACCC8A81E124EC25B512A1DACE422F2E3B52AAEA2C6425242F22BEC20CA022A0AE4AA484EAA88C288AA88A2A0248EA8C042AF29EE4A0121A07A0C45AA5441AA177AAAADD9AA1EC8AA88CDAA9882AE22EB812F182922BF72AAB988AA8C45AE42544B262A6D91F1CF4D6
-:80198000F2B22F15A388CE422CE421B38218A255122A82A426CAACC48AAE88A0228AA8A24AA4662C9442B022E2DC0D5A8706A0445A25A1555AA3F65AACC4CAAF88CAACC8DAADA2EABA52B412B1B2A2BBCAADC4885AE5254402EAE935F892D22B51AAEA2CEC2154222F22BA42A4445AA3244AA2244A24AE2C428AA8AAAAA822A062EA9842CD
-:801A0000A0224F2A0A7AA7311A01A0114AA4117AA7B25AAD5DDA2DA88CCAA8DD7AA7BF2BDD2BCD2BF77AAECC884A2461215E523AA3BFFE232F2ABF13A6AACEC21E122F21F3A2A22B445AA565284AA6AC4AA44ECA24A48CAAAA882AAA8CEAAA8829C482AAFAA3FF0000004818008A044800A048A048289A2424A92400001800009012800889
-:801A80001800808104828004008A8422088AA4240082DF1C0F1828180000482A81A214800988000000008AA48420044222C22A01482800218A220422200622824282A0480042008A0414AFDF082AB41122B21122B411B24291212B141B612B9419B24219B142A9422F1429FA4291322DB1BAC4912E421CE82264112E5296E122E419C252B5
-:801B00009AE222B591C2421B2926B291A2861B2923B481324219B64298212B8419B44228B242AA422B842AB442AA42A82E42FFBF0C2AB41124B2112694212394212B161992821B282B3419B24229F34291B22F3421C2A12B4A2D812E521CE822CD812A64192D528E213CCC212CBCD1C2421B692CB49192821B6923B481324219B64218B138
-:801B8000429A412BA410A2422988B4421892822E426DCF008200000000000000000000210000000040010000000000001002000000002170B10E001812421220028029818C04001A0228800422005200001888800810A218200800200220282808484282882840F1ED7C202229220848A212320000A0412004121212A0214800808121A4D3
-:801C00001821208283840110A2126222008226622C2004888022120114F0A25900CA0198488028012028A14A4248800412222C81242101821A041848881182A01A484E126028A01A42220028222EC28088880820622800F0631A20022A01A04122282A011800800120031200282A0400180012290122000012002200800821824200484A6B
-:801C800022482102F05E610080010042480000000080042004000000008021010080218808004228228200004A0820028200E74A002828800418184AA214144A0118203412126880A2810000221602181242222C21A242008084822162288028044A8884280282820022281F730B80820100184242421442000012122A04000000280012EB
-:801D0000202102008021882882018828A8C8802884A8A400008828222F490F002820044218221820011820142204A0241A0800002C0120812421912262008004806224000048000088A20000BE8E0020641120840100000080084880420280081812880058006682242A0222004800004288A22004C84824882014F2241120014200182846
-:801D800000200188221200200186A28412001848A8008002004210012088020080022242002800800829F24D4714002A01000000000000002800000000242004423288221282A8182800242004102284480200880000EFAA02002A012084010018800812880038800812880012222142124AA2216E82489A266218182008108204262228D5
-:801E0000AC8424808404298828C4223DBB8001301120210200000000800422A0480000420020040028202882220262000048008004A2200800F0B65600110048140048800100428218000080818104008081210A2021232202326A0100222200204202000000245F250D00221324021904121100001400183818289042800A2800A068003B
-:801E80002800128002000042240000004200460200DFEF09144222004826110142260118601182888024222184220C42284A014A014A2804224220012A042A0448242CC4222C04290648288A04826842F0559400284820820228000030118001222302222124282A011282122220A12148202108121882212800820000000022481002E787
-:801F0000EA00002004808604000080848901524242422004482044222C024A82A42418220042A0242084260442244820A4C2488820027F110720024220020022800120014880040000A08188800100000000000000000028400288000000FF620A2280240200122A0148221200002C822182810280810200800200122002228002000000D5
-:801F8000000000004820F4A2D6000000208404422001184258000048006888481AA448482A84812404480000422084240420242C242424240242003C029F550A1C02480011208112611200190200000090228218128818002061120000581200000020722282120200C081002344525D142AE212A622284A26022AA722A025280014A08851
-:802000002026A512622A22A482F23252A034826A81A522186AA4812A83A34288482A82042A042C84A4422C84A4826A3C81C823E41284F4C5CB00001C24820242521414121218585AA5151A91322228292484A22C18428A2964212AAB216A2224A1312A02A0317880042662242422002180042842E01412F2BC4C501100427041F1416116BF
-:8020800081B54136211818171113A588E022A241385A041E42AA8D848487A4512AA4458A0C486A041812324266A22442424AA4282B662B8427242B244223A424824A248806245DA5140020021448806412202241A141200812208102208882011880092280012A012A012200006022400200000000425D19142AA2262848A815A1262AA382
-:802100005117124A8621D111B15103CAEC22B132A1123E424AA4425AA4C2CAA5525AAC515AE42ABC52A4426AA6624AA413122AA144426A26A444424A64242BCE46B24226A444EAAAEE1B8C8A8C8444F22F7AA0222A0680BA21A2225AA55113A4441AA133121AA3544AED23B142A5575E524AE424B442ADC44AAC555AA5457AE72FF543619F
-:802180004AE614A6754AA775381AA7646AA6666AA6444AA4646AB6C2AE442B444AA444EAAECC1BCC8AB8222442F2D3FB141D212A86A22250111F16A2115AF521211F14A6331AF311111B141AA1DD3E222B553AA3552B666AA47EEAACE67AA5555AA554DED22F15A4466AA6675AA4431AA1127AA4466AA6664AA4446E422F26F4C2E22F24E4
-:80220000B442A4444AA466EAAEC48AB862A6624E42CFF2051B222A82A222281B661B667AA7771B261B642AA3211F11B171A4CC5AED23B352A4325AB462E626A4E66AAC666AA5454AA577FE522F1EAE661B667AA7762AA7337AA3656AA6666AA6444AA4642B662BCC2B442B444E422B44EAAEEE4AAC886AA4424E42EF5D072200208224027D
-:8022800000200112140012288002002800001828880000000000000000000082202804004F43071428004240A161804401004212882004184842A08420054220818482A42148282A014A8122840248468262246024002AA4A4820028F0E4EFC0411B21141B2146B111724291612F14B111F642911B212B9413F14291AAF44293322F142973
-:80230000D312A9431CE92AC4812E4216E12265192E5296E122AD292CB591E222B591E222B991E226B191B242B9817262B281F2628219F24282112B84222B84222B842229AA42882E428F96021CB41166121B41141A724291212F16012F1219B1429B212F1429D23221E21429D21298422DB12E521CC8D21CE2226C192E42142D4396C142F0
-:8023800013C84219C4421368241B29421B28272419F2428219E22412A1A4222B8430422229B822B44228F22FC90082000000000080020000001002000000001400004800000000000000000040016FB40F42001200142011816221482120418202800120022081242125011820020098188848880024B04308420022A028004224AFE4062E
-:80240000200814002482422400190918882021952200000042128002C8244A8181A41218002602C0822220028214297241025023824081E4F90F42C200001182121123C2121BC280A1183022162282013012208821250118196421421A0242128212A28008227022E21A0442290222D022C882C041B08B0700301100242004002C010020F7
-:8024800021040020022004A05280081880A42120013042C082000082146034002601002CF459DE000000408104482212008004481C21A3A4000011422001429880A4250022281840012440216824004002002882008F110418400118422B12182CA41819244482A14118004021A1181800222B1218420080058888202108238482AA2448BC
-:80250000424882004888A88220880488CF820A1840011824324A01239421522418002044A112C280018032221842008024A4248820A128242082480242882C0400822A0880280CC042000000481120242904004A81058011A121980010A141200148921220098002124811284A821421840820042188200280F8285F2004421C1101002084
-:8025800004708201218242002424822048C111803C22E0120458A21400C042400148822400200E484623020000297272020042200400000000620028184082B4310480A14188000040014221212A040000804203220000208A880A25F2FDAAA01280810200242601121400180000A0410042001100221200808201404122280811004A02AE
-:8026000021001CA8840000003BD1A01280913146010023822441022442882022412281B421211C011A6424203211800126C142100224862128440122348004422C2C0482A028C022BF2D0448000000400110C181800142002024280410410128A02420A48280019021210080082168248200200A228800F0A32200004200160200292C0115
-:802680001341029288212823018810228181A41430C24220CC8118211210021882800400150228C26829840400F08B2300000000132424040020141102141834181411100219082A44210100002601321214111384324111001B8288808808800826B26E0514001400468214820411002C81018008800452C06200004A81A184208124A1DD
-:80270000219062A0412428142B28C22B84824621382282002028084F3A0510014210018011210118100211808101A0411419011C48120120A82100C0212CA421184E21212028148102280000002100F06292004200404261111286021421180060111A082A242128044820814421039818A048004A828403248022842204200648C04200EE
-:8027800024F0C52A140048001C210540010000000030111348024213A1830080384114808101480040A384140024142B248A022C44C282001002CD7300000000001211121800154281080020011888108121010088C290411984012004002400280000400100F027960082000014800416010012120014222922440111221C221121C3219B
-:80280000004220083041800811485022112C220842860248280014F05627400148000016021882002800181301801C11025811880013044081C141208114021944022214224AC8814E212304284002249082F016DB14148220041140A3441D11395111213420011F38482181B813C1511C84341125E115A8111F14F2A28182888A681182F4
-:8028800039A1324AA6245E21423F18A86A1D2329B223D2125821AA2AA24224297822410214245B1A0082C04160112F1434131A61219E4118001A94131A21B191E122A2474A74911261142B5E1B111146A1431B451AA1194AB141A5552217311522632A1E134652124A643ECE41CE422D414E4142CE824A2488140286019DE41061140000BD
-:802900001F21A154214A8C28A1111AC1123437181888183D311C88A814311CA22218398481B341A4421AA4888856012B132995511904132492412C3821CA18E3288EB282EA246424A0882C88F27CC61400004081448344010000240082281100002811004A024288C0810030222002344826012622482188A248248A440220087F2D0E2027
-:802980000448E021B143D111B152011B881D133711183810F291111F38F923232BD81B441F197911C3431F1E77118118F121611B991AA44C4E519AF441415216F21161F081A1141F38F883C33D233F14F443816E41421F1C26A68421C82F32120288F0BA1D108104001F21B113F513512B518AFC91911F31F13331A0313B113F11F111114D
-:802A00001F39F933332BFC3F1CBCD1FD41524E421F16FE11211E111F11F171611F19FBD1D1DAA5D5DAF4C1411D412E231F31A1261F1DF941511F1CFC226327343F16F643613F1CFE41C14AAC4CEE6223A8486E21308282F014CD004800E021F143111F31F153111F29B993F911132B31001D133D1186D111F821233F1FFDC3D18E814E52C9
-:802A80002F24F463E13E11157141F131711F1FE919ADDD5AF5C1D11F14FD115115F313215AF191A11F35F483833F1CDC31F243433BE6CEE11F14FCC2C16AA48429B442FC2222212188F0EE6F100100F011133F35F553533F15F5C1D33F18D931B112A2113E1235F313111F11F111911F32F2F3F11F1CFD91914E422F24F463611F135311FB
-:802B00001F15F171611F1FEB1DADDD1AF9D1511F1DF511111F33F333332B261F1BFB41513B883F1EFE61233F26F643633BCC1F24FC43C1EAEE2EFE82C22BCC2F2612A2888A48F25A35000000004021090000001100309100100100118029044214000080818488440114000048800400F05AB860180000C0111A744202141341012C11815C
-:802B800021C81213B1420242114223220146A112C220852C8C013C81829161248A448302682D821984A84A0029082182007F6A091CB51142B11162141B21273419F6421119F6429119F64292112F34A94A2F3429FA429113D212AB421CE922C4811F22E415F22242D6F12242DE212F22A4292CBC91E232BC917222B2917262B2917242B29A
-:802C0000817262B181F662831B282B8413F84283A22F24AA4A2F24AA4229A84A882E42EF120D1CA461141B6146A32134282D1319F24293284EB3284E83A22F3421EA343181A82B422D912E521C98D1A82362192D429E212D4316C1C29AC2C11B4925A26927341B292F24A82834284E83114A0A2F342A724202252292822B42212CE481027F
-:802C8000000000000000000000000000180000000000000000000000000000000014F0ECAE2008005818182416015A08141434120011203451424820868101180012001890112190122C0100488E414800808484080020E4C34C018A021134242812200419218901242C012389B182212801231842110242982C01523A28948100194C22AD
-:802D000002E0180424242C0848400224881414B0D6092006115824321812A094141B831C1111921225A218122CAD85121E4282AA94111220255821184A2128B4410821194402211021641C62860280042124861241C1425776000040230150124820010012001410122104100221001218001A82011C012C28A112008A0450220048808457
-:802D80000800006FF80A00181100200182200880215122224602004A01A042001A82210400820021122C088004280042D032082422200200F03AE51400221214259141281831139112182349023A2821A829D21A0810120229C1414022A12118522220512218882C0217222C8818422208248024E82824048A82F896BE0000111022840169
-:802E00002D8113911210C212B0129822C8924A014800290229E111062C84210192282412212B18004214239882C042C083240000002A88F87F731400381211111122120088128A01182818242882981224200400120022124200804182C82280224202602800B02284283E4200F099EA0020442164241A0400164141011810820140020050
-:802E800080911288001C1142224A0121800C22400124000022002810024210B22D0E0020040024482100A04200904200258228410218800842480014800411582304822304424A42026602420080028052228D4820018001120014000014000020023021000042002800200680020080820400200829924220080000FF470412001981E4B7
-:802F0000212444324121164141C141181022011022681124001848003C022430214821111A2804822A24642422246028C06248C082280040F2A69C0000008001000000002448200280024002004852002A280420022128241100420048240022008084025F4E0700001111C0420021240014180080311248121242182122183042314200F4
-:802F80004898000080140240029023108202282008F07AE7000012180020611100112410014012011C1121848204151201C042302140022622240100002200000000820024F0864D001140110142304148194181011800208841222128A24860110028002004001232A02158881002800820EA22084280088822CE7A14001100001100805D
-:803000000111002921321200401231218820810819051A0623422184040014420014290A1C2202002188211002ABCB800100001582041816023400408202252208182C021824682AA8422602002125022522B422A5284800000021200200100260124D6A601214001831800120420217242085A18123A884180088248004A018888A22A1D5
-:803080001200208868284002238418821482582210022622048221886F720C4800002011011140210418001468809441112068241CC1811214000000822A040022800222308128824220040020022B3B14001112001364211324148101000098280020840C1442208231228A061828802189220821211002290A311082288292622A18827D
-:8031000008DFA30A1C228214011823118201282382B1428224042118C248100219012C281111C111C0214224002D4112250128221CA28282004A0A8224240080322288AF5B46218112011C113112D012E114446131122427111D12E021890210228D6F184A7442A17A1BA11C31A1C2587E2120A488AA21B8923122486014B023421281F468
-:8031800022A18A4202C04221821429F213D9B02106C011111661342D5342123E22312513A214122C7182F152121B112B411CC112C6B2413A111A5111181F2332428823876122211E522BA12F24C1A18233C462258202822415032CB822682468EAC882222A088F1404141541311112211935511B411D121981B341F14141A044122AA28AE4
-:803200002F2CAC941B451561122E422CD9213412271A8AE431F72261282C9422151242A36342383E222B842AB282C8822BA62B882B88242326B822722292228A82A828AE823D9A202402001840031460221A44824401348A44030020281402002142201412B12218111201192412213681422024280424820028002FA70942135611201158
-:80328000914115B151551119A1121AB51191611111A81F119D813B881CF111111F17DA11A858111F15F881811F15F48181BAAD331C56112E22EE218E231F18BCC1FCB1B11F355133311F14F4C3632CF8418139B4C2F622222B88EAEE28FA22222BAA20A822FF53091AF1414115A1411215B24275437343F151111D112F21B122F3131239DC
-:80330000B21191113F3A7AA3F181823B993F11F111111F36F143812CBC11F551411F19F9D1C33F2CF871B17AC24235F321232F13EF31F393B11B6EAEA22F22D43334232B442F24F641632BAC39F442622F26BE62AEAA2B8C2F26BA229A828AAA225F8E035AF521611501B01111D133F1431115F111112F23B25257332B55141AD133B94276
-:80338000FD12912F19F913111F11F561D11F12E834FC111117141F19F9C1C33F39E91AAE334E622D2215E3297491F29192FEF1AA2AF423222F14A4222F2CFC42423DA133F4C3C32F26B622AA662E622F2294A22B22A0229FC947B171F7216115B151A1111F21B153F553133F157141F131313F23B352F643432B575E51182F23FB73532F49
-:803400003CFD82911F11F511511F3EB4E2E834F411511F16B491F9E1C33F3DED16AE277E723F3242F292923F2AF2B3A22F1FE62BFB73733F26F662612BAA3F3AFA21232B881B8C3F3AF822A22BE623F262622F269CA22AAAAAAEA22F13010014C0120048141A44030014120028920042114A122294119091422A082A010022C092004800C4
-:80348000262208008224008A84220870AF051C0114111051321200003C01144022C182201481418258218081028AB22208481022D8222128022502425022488074422112A2424602290240F1213580B411021B21421B21272419F2421319F242931B212F2419F1429213F2429313FA429313D212A94A1CE92AE414E82264112F2264192FD8
-:8035000022641D2D42DAD222B4D1D232B491D232B8917242B1917242B181F6428119F2428119F24281112B84222F2428B2422892822A84E822F43A27A0421B41481B214692212F2481E23481F26293114EA21B614E921B422F2439A14E121B42982B4A2D91AE52142F22C9812B4296712262192D519E21219A52329AD632A86925A3212F02
-:803580001629F86281822F1488F242A113B84228F24282A2232492822994A2AE42C10080040000000080020000000000000000400100000000000000280000000000CF7C081001001CA114424A410240818138124819014829258411010000298108122280041C02008A048048034200422100482084C2229F270E1222601248229011151A
-:80360000B221041C21612442193211200128004A02481868624A2205200123012CC193182E1218244813822402501280140220824221F49774206116C021422E11121E411364162130211AF482421C9251181846422284A1252088A1242823A49480C1118024847212118233D2002E81193422622411904221002CA224224AF2B583000077
-:803680000020042C0130111800121001A0340011800420A41200200229011C2188010023040000800400480040523600400100260218001242C012C012130182000080A4248002802821A221225012113C0100210082002008502280A84280F4A6F68063113822142722111890133223422399434E8322E021A23428381822888021015E0A
-:803700002166222434422411A0812D122AC81288C0818A8432428682A848002140220262286F3F01281931210025121102140014251271C28352122252001220083220B2116226823042166212241311D3234A8208114A08230C2908002110022220F2EA6F20011228112822182C81E122812324A91420818131A2282A01228084240148DA
-:8037800080A441222800881212180023082880084A880810022B82484A82F4E4740090511440012A11021142002210828201248021A4822A01882268002026823422114880880800200200C8826840028810F24F4990411842120048902148182D21126280224C01223100272880016E820038284001188082244482022902403182660118
-:803800000000008092422FA6070028000060242002001800008008400100000042280040021220012148000000002422288828005F6A0D19248141011420E232840468008002268121328280E12884280268214A22A124282A2422352200482C2918220220824801C8882C2482228822021E360060121200421221E03211818184012B84BD
-:80388000004001108102002880020000702221012002230410118204002200218280F45B6DA0421329022211341322022987041120810300200280022C0438482246C3922288502210028200428823622888822482290800292224043F7B0A111001420000008288201501001302001904260200281200480012C022601160188214C8462D
-:803900004101216024000000F0E84E142882281138246021385830811200208282010000220030228004A012211A280400800923022242002004422880028A067D95001001201111121101282014010028121A082A010012C80026012820C121008E122821190211400110A1842B82002918021082723A09001220842424241592215A226B
-:8039800004C862521A24040000000030128001502210622142C012601820888848823842A08428002C2C8C48F175E11446C121C021111200400210010000124A081821298281C1824E12601440C22200C03220A118A84825C2C220040082222400822012029EBA20210100A02100114800181212400180432184819181221001112A040043
-:803A00000022280000002111191801242282002100A84F74022008181901221F24034A2111A181134401208622E62822A26148208222A21429820518A01A00802401A22922922220024001408292A2488012D26D0E8A0158001C0640830218800348002001182180418289011220413111B032082E5182261181016014142542820248A0FD
-:803A800048820082218AE4760516B181C211114AD421B711A2132D1216B143A7178A2104132521A411429AA9215A21018621F1A242122E711F1181A3832F23A18138122D222F29A8213119813243342C88A8881C289422C8882100221CE828F8C47C141B248A9121121962114652211F14F24312328213B51191812AA4161C21943126021A
-:803B00002E426222122F24A1142F36315242142C6214A0822C26A234141E3142218EC233388234151233822E4222222C98822BA44A84B422F679BEA0521621C3213E114226F142613268D0118EC8415E5118282AA6223A8CE212819241282E222A2281022AE6259412282F28739392121E112AB4A2A1882F2BFA81832A82FE61611B6C2574
-:803B800061283CAC8C272C2F2CA42AA6E222A488EA02BF230620022AA14822482248221A24A24980C421481C82C421C021124E21C02129C1211880219412A0921121110088200226A2482282A048A048288022882228F44EEE1413784151111D411B455A89A42248181A7521A1D31D111F193B4119A4221F11B521B391A9221F11B11314F7
-:803C0000E12AF351111F15AC554AA4112CA433141F1BC1226E2116B191CC233F32F2D2623F1898223D833F3C7823738353233B2C2AE228384223222288A88A24AF544A7121F1414117121D411B4E1F19F131112A7222017AF7F1E13A7311F1D1F11B5519F231311F11B3B1BB81FB33211F11B71117F121A31F35F251535AF741511F11F590
-:803C800021733E32181F11F1A1B33E73141B89BEA1BEB22F2CBC82788252333F3CF8C3833F3AFA83823F2CFEA2222F2E5E22250210A28C24CDD81415F12161111F13A3457AE325F722222B441F12A3756AA3F51F11F1C1D16E315AF531317AE51BAA9B3F12A3171CA5221F32BA72E526F713532B451F15E137B632A321BAF311232B6213BE
-:803D0000B191E938FB23232F2DF683A18EA23F36FAC3E33F32FE81A33D832B8C6AAEEE2F2632222AA2A82BA2AAE824F41FBF141F1AF631611F12F271311F17B671F771732F26B662F771713F17F7F1F11F1DFF51511BCF6E717AA7771F17E71FAFAB3AF371712E712AE222F263732F27F733732B571F11E533F732322F21F3B1B1BEB22F47
-:803D800023F313121BA9BEA11F33FB73F33F3AFA83232F3EFAC3A32F3EFA81A13F38F8E2C22BAA2F2EFE22222B82AAAAA8AAAECE6E422F290A1840214801001412000014001220081200001022840118901280012280082400004002000024200400FFCC01141118118219E422011C11B142A12914A01412003832200348202281043B52A0
-:803E00001248282C012C8982213122122D83824E818A7442031C084E81222F24280810028886F1698980B411021B2146B211366219B242B111B262B991B64219B142B921F4429113F242B113D212BB31E414FB21421CF821421E213F2265192E52D6C152DAD222BD91C2D31B2925B39162141B292B841B2827241B282B841B682B8413B88E
-:803E800042A84A2B842AB442289282AA84E822F44647A0421B412A14E126B1112492612B121B412B961B6929BB81B642914129BA2194B21B4229BB3394B21D52A81F228D5A239AE22261193CE511F22292923CAD6825A36846B381B26218F1228213A88613B842BA81B242289A82B0422A98222B482BA426F2FC7B008200280000000000AB
-:803F0000001001008100000000400100000000240000800200000000F06B4B004118184420821242420146012901008728800412260242182818111200408201801182511600484E812382048840028224842028D48E4F018A021C38422A9812163111150822182598812496542218901228852104193242004285222C41822182280213CA
-:803F80009228C0224A08216018241C44822488028A824429F2BCC614A02C129244A2298231131420F221523091301621A729502260113221CA22016014898108141818C24012311851A048422984A2C290438014824862A8428328F6454300441031428091214058120084218008004A21128804152224220190421224302220222182128B
-:804000008212023C08148008218228800200EE631004181124282B12110014921400122D148011812201111419441461141901220012000018908220846424400300448425220200F0BA962044810AC018541815A412212031916100148D241A72144101308800524CE324321896223256688218122C82427811C21286C2221328127288CE
-:80408000C3428288528011283448482F9E0A440011E08172220145C11211881886514200144C2281C11100911460114E241E6123812932163882121230328413283182421B84211184248200242800008F160D4811B800214CC1118002181112602143018CC1215C024081884484341110C822802404002200272160242602264262182949
-:80410000044968A52011883448485FEA074A014648114281012021D121041924012449D218632111121362164438A0841311683383018140C11889F13144802811324212328004120010120C0029F8A1DF402821041261482002848C01836284298281248464226041004C01882001001CC119001992422418001352284049746102508277
-:80418000A02818800865F2B1E400211302403828334201192402100100008200008100222821481841000024268802001001251802800880220412B0BE054829D18152211652942A9422281289E12403848F21240249966924881849C161444D2800190139B118044D1819118181B12211AA1A408234181A52288D421C8401A348226AC1DF
-:8042000048806168EFCB0C18000090181114601415081944012C01181AC421C021000048282E1828211200008712156422C012601250121100210000222008F0DEDD10954114B41041544884801109510044141001124785806881155884F28C8448A8844A02128A4123018213042110026480A4414248C082488400DFBA04284481630450
-:8042800080921111808801009124850200002082288114181628415A248221231204121A02811324384112200190188AA3388021890A67AE302430218042248281C21128200183018D34442A0128203244284961423021122220122881821401405284841C1164111092138C0121A5023628242244FAB5C410021008488504184C18C842C4
-:804300000041494442016418414814141480D8840416012B4180028148420018419012411113227882A414824210420C18882D62308181D02102006041113301200136011602111011A4C281418904188A0440682890112200190120410418210058258824321280812652126FA70F425141401809508122800284140010840532001901DF
-:80438000118D1410C11138822A240180A1128412150200C011121542088200822200489E5540C842104431125092400881400181608412444C01114781240031828450E22C0350C2124810124408400480088008982A6822800184BF13040081108112298202994A112191194489E34122820220028222362416E112080000C60118421154
-:8044000024504218290121250110981221808148A8142CE868088428491282120C48C0484056284D6A242C0110C41226042321981884881601202242C188A28421482121206121411006848A222848044481285042F06B1924418E4755934193D2124298219753D9F82A881E21A14D492921942A76BA14C2152544F414218EC819D818D8E3
-:8044800071F228488EA1479A1B9184AF2978826A292CB93254215815E162D85341B2127496F21547146C11E281B188A84C1A21A8382324E17241F8E196141D65C384922C2932111CD29E81C3788A734948D34151113E144F63D155E142711132241E116E54728F12E241B13CF1D4148F87A4C583E263A36449847B1111A8111692181AC189
-:8045000042ED1C5D120035D212FA11122B8C2FA455222B4E2D842E8A4B428F8286C682EFD707221972285CF214C7C4C7421A4448711141223118C7A1D549181A32641A23125854867A24C848159115B13C12E882B1683A222D64B845B142321270182841C51429A111918E81C924E1C1D928AA33A3E181AB18D28B483F694A2224022284B6
-:80458000230623062306622024E114024E21C021121C028B2486824282C2824E2440A482462452412215041504111081088812344904498412843284424142EFE64F73C371445A82FD4B4EC15FF7FD46467774B9E5A1F7D2F237111E42FD457FF556533B44DF54F521123F543511188F82F494462F28F88E1A2F86F444ECEFD9F51F79D7E5
-:80460000B1A7A145F6BE3AFF3AFAE3615FF67217F12563B79157713731FF7151534D851F38F89383B5F994948FACFADA9EAFEDF96EBE6BBACFC2F22C2ECD8C4959EE2F5B47712177437D2D7B4F5B337F79F16E4CDF55D15DF484CEEFEDFD5B418FE3D65FF54E7E7F15F51F3955F145433F51F1113775F11C187F54F189A9CD8EBFB1F15EE5
-:804680005DE7D8FFBDD19F51FD6F6CFA7E7BFFABF9F7755FE357375F22731BF91516F57D1D7617F115877F39F98283EFB2F29686EFE9FC929EAFE9FDACAE6BBB8FA2FB6A38ED8C4B94AFA1F18DE3F041654F62D6EAF22F2BFD27FFC3E344F2296D1F32F3DBB99EB7BFA6D722F34F143FA1F16F756B129F12E223F173776B137F52F33C5CE0
-:80470000CF4A7725F525A95F77F4766D8FBBFD39F597B3E7712F29FDA26E1FABFBC7C73F237713F53122F7F13552DF7554578E151D972F11F18BB91D81CFECF8DA984F2DF8E6A2AFEAFABA28BAF77E588D4C8FA4F5AB19343F7EF62B64DFD2F22F2BDFD8F27D7EEFE6F23F759FB3F3D3B19FFDFF2B32ED3AFF44F16E5EFF12F23F38DFD7AD
-:80478000F777563F72F337247F52F23D5FCF46F6A5AF6FE2F27351CFD6F6BC5F9FFFF73A198731EFEDF9634E2FABF8F3E3EF6353732F23731FFF1212BF91F114147F517195F113972F31F19BBB7F59F9DADAAFADF95EDAEFADFBBABEAFABF8FEFCCF87F5785E8FACFDF28F1004002410445824924008008464164804004411443144294122
-:804800001403291118022B820080016081200100922492608920019281F023D80011C542181401901E12141181C0158001004C21615413988850184887112DC2408882AC21200100126190161012011123242104890A89022814AF9F052D421F41522A1F4132481F41364A1D64AB141D64AB9419B64AB915B44AB924F44A914B422F14F9C3
-:8048800034482D914F82E414F9A44A1CF8244A16F1244AD6F124CA96F524CADE244FA2FC91244F22F49124CD821F49326C1F49B24AF88164AB141F48B64AB981F64A9251AF54B924F44A944B422F447B24D842FB24484CF9244A6F33022E411FC17428F21144265141AF2251418F3251418F627911D4289B258D82418DB1412DB345C8A175
-:804900006D482DB14F28C1214DDA1EA14D4A9E21ACE819E2B26C112EDA17892AF49148AB821B49A37611B84AF88124AB141D24AD1619F24A228CC29126D82A092F246B882BB427822B94AE1AAFE80E84824800100100400428000000002100000000210040080000000040040000000000F09BA1002644440C003C01810088403822810034
-:804980008490214444001822200422120020034048121913422A012C01402E01126849C248007FC10E29611800845CC928899418867188B241688454203881441943148184A12415245441251811183148426B24262146116851424B81481280CC811342480320440200288F1142F4296F2430C444C184148CD281815118C7288AE48A049B
-:804A000081239A891011488284317411821D128C126184111B242CA5248712424E31604146D82411391360886331212A110390122412422C92283216F4AEC480912100E0410848A182100151001084134431214440844404004008412002811120280421481C0881105284420022444881F0589B00122D115014601284412880040084000D
-:804A8000004A1281024248442A44840445022A0C24282112E501412843242804424006640030482242F0B6EC2428144C223382284CA5241442333982A04813B142688828115813A8148E45134C419112612A44C5421A22C6162813069022A85225F24182A2468A384229F882128A0429A24986A82880A128881E63242816B2148272812422
-:804B0000926140C5621B188A048A9411828400A0421C6142481C94412D1443864285E46281E2489622660290224C0844884B82814A38423082250443B2124428482882069E5B0011111602604183060021007042888812A1411C28C4C11308002146840421421240811282D192E221042F1294428A1442A284184E8210228828222421284E
-:804B8000782D051820140222100240A4242318829482124712008488001280B22208482180014800282A64C18118C58104304186182A81E8823418844C048812218F420184188F14014815080041268401494421C2484881AC015084212A282191C8230812002F9401830190424800008524484A342443C4421A88048123882212F282F9FE
-:804C0000400280014460222004800140082411201128120440082C0180140C22119011182028A242392204001C0822002A81624400B0FA0D90129D1200DC0222108482239846482A38181D4431812301284188C0228D228E12422321D428812466112091224F84812862641C468CD838441867442CEE8B84C418269CC62800EF5F0A8A016D
-:804C8000202104241082044829013484422281128186584880028381040040C418006012124088D18102480088868801608128482088036F860A8014832401228031822034848888A422886A090041184440042C4234249084422602001948541428281C6845AC28180660480088004144685F57052B1411418D31314A5381212634484918
-:804D000012881408414289028342088068A29825A882805282448C02002422C9822814921822A123A412888E1400281068481A028341F483EE20A812D0228445E114014244200A84A043820082814182808241188402814B128140624241C018C80042428012011311240A414822242200FF2B07001C04262828A224C02182461684441430
-:804D800081C11210832802471289312488008192200112888902460212427C1891210022828424282CA22182484800DF7F0921284008148502188C8218A84821100E9C9212818815088342D4A3028C42542A001002A04241148C2414C811C332D9841825484418428892544CC614C818824F7B0B289400842321044C924728002021F814FB
-:804E0000A2428002822E8463880149420188484814808844E29224123123C02C2121E04A4442034C012121001092247B8260C1A042106588508420484204208802B028082210028A0130428618C422102421528100164404498208282184008226488401182E88298106AF61062048B8112264A2E02264842446C822842562A44884002550
-:804E8000823224892211022861AD14A842351802212821F08242D0A231454252B03544F911828413011E82160812421ACA8142C7A6E082148206A8214008406248A024C01246863448C200214818418800D01421C13383226188C044301141004449886844807244C2182594844B82131444B44222F83E2BE022E718551140F618981F82EF
-:804F00007662A833478290422F2898422C41F152E42CE4A503A29C928445C18A2B32B022C42643F272B625F824862386B381042A22F146C42D164F54745594693F6AD614A64654122571A63A224F41B268EC11B124F854A414CEE42F8C0B529B2A21AB523B2819764A51486D448F1876A2E28E42748898826FC61FF48828A3F222292D882D
-:804F80002AD828E2E1EB42E2F1E842C22AC37B88DA9464218C43622824C145F6AD1185D19534282EE34F46F85811A35698AB287D1C8506CD262E1A6B114F46E4E537A28F5601BFE9425242B02CF2512B8F97752261216887243F44F848A48D82CB4442C37C18F2A8122F16A1C88BC8895244A6A44AC141E5DA5448D8421AD8453718162841
-:80500000F322A46E22B14EEE1F28A12529F288182D134D888E9A1F29CB928E814F84F918B49823E848A2A880A5E143F2D9384004C418442C41444248C2486088248C44414805348285011421850185114201812B128163123122842B82404128628126A14114121492289228846088608828FF1D4542F2442D65F134781F35F4551D5F54DA
-:80508000F422284F25F5442C1F3848E824CCC84F49F99FA54F69F8468CFF597DA1B1A8F88484DF98F877CD4B82676AF7325F54EC89F18A2E3F34F54854CF42F226255F53F3C6644FE6F225255FD2F78B1F2FB3F362267FD7FAA1A76FBAFFAAA88F11BA886811CF4CF6AC2EEFA2F2AEB6CB3B99A159CF82B53CF348C4DF194A7226F6252DED
-:805100007D235F34F65D6CDFD6F24D6D8D287AE54EF681A72D222BEE4F44EC29FB36163F3AF825A5FFFBFD28281F38F8A785D7926FC6F58D815F527827F364645FDBBB28D273F4555545F42424DFDBFBC1411F92F424244F5AF949592FD7F366267F12FAA5A52EE36FCEF6A8E18BAA14AF44F4342EEFE2F2AEB6AF4FB66DF11C4ACF82B694
-:805180003CF35C54BF294FD266C661A5F419195F77F653593F34F4161ECF25F7CFEDBF7EFCE8A88F24FECAC86FCDFDDEA8CB8DBF9CFACBE3272CA1BF9AFA89A96EDA8FA2F82B8B95F36C4ABE1A7FF8F26E58CF74F52C26A7A21FB2F2D7756F62F62F2B5FFBFB8F4D5FB2F67F7C5FDFFFE9F97FD7FFDBA49F1DBB8BFB1195DF4CFD1CB6EFF5
-:80520000EBFBAE224FCB8FFD8C986DD4BEA84F42FD2FA5244E62DD25AFC2F279399F25F67E77BFB7F77636EFA5F74FEFBF9EFC686AAFACFECECEAFAFFDEDEBCF8FFFF8F82F2FFD6B29AF8AFAAEACCFA8FA616FAF68FA2A2C8D2EDFB6F6969A7F12F23E5CCFF6F63A3EA7A22FAAFAD676FF72F22A2ABFFBFB4F495FD6F27F7CCFDBF9BD9918
-:805280009FD1FDF3F49F1BBF9BFB1195FF6DFDB4B4EFEAFB8A264FCFAE944B8CEFCCEC8FEE489DE5200222601248262121022282A0482482A048A04828824C22880228218D24414A02009084009094844712200214843484144062894C2221044624F8F84FA018112490181A3448304480082148005C2BF24211841C088D8147881441144C
-:8053000040C1821681E44102190219021B2181CC14B2812434812B8428A94848668285064A3824208211F4DDEEC0521F41D228F111248B141F41F24A111D24AB141D24AF14B981B64A19B54AB924F44A9143F24291478A2D914F82C4914FA2C4814FA264114FA264192E4A96E5A2EC4DE2A2FD91242E421F497228F291248B841F49726A5B
-:80538000F38124AB161D24AF149961AF1419F54A9143B24A3B242BB4478229F9A448984FA2B4EA07581D6C2CD141B648C1248F14D141A2148E244E951B282BB45B214A39242F1429F24291478A1CB126C49167831CF824C21E814362192E5A96E5126C512A798128F2914C221B418B8686746273812406AD8528AF14BA84724A3184AF24C1
-:8054000012B4427BA498126F8294924D5A8FA5048480042008000044800200000010020000000000400800008400004400000000002501CFB80D0084C0411818142311A41480044223024D12680083060000002426341424120018210046414803488213748112E8A104209448292224048332DD1074A23111212273928118242E18250185
-:805480001038811844308160484486C4291592614E114415241411028C14B441129228198841C24143024F2201281844001F23C424512481F018A1F0FB840027141781216673340110624269042A14784122022C81082C2822F81128118E61521061245D2219418214E834A214A99281C0411C742411323469C841AE11C4460816C164DCAF
-:80550000446224E0136881CF510C412800008E1113C11216C8110080284114E41402444D484400211441440041C01844000018100A80042824C012E02402242281488122BBBA00200261484F34111112111891880000C0842210D118110100430288508220021411141A820826012A088840225818506290A2304800F0981B402471116481
-:80558000122001581D4A8423844872C168192364111172411C0280022A4414825843414242200290242419828201804541518181C02CA024819094824A82F2B4E540847111C421444A71512411422814018E41150211114B424312011800424123224801890428284081A221290A1C028A82C48114908291435226A082C0188822225F377F
-:805600000800282400241C744813112A988825A881421220092214941302284004274864200440015440812201200110490881A042A1E0440842F06B3EE0840142898224810494235441000083011440582200931202298108502480447121084488820041890441821C614814228CA9280025020025E2C50915886285113041204504444F
-:80568000143024800212414002944888181188820028241C0240084C0448482846A18410483424302200810000211FCB4342022110861211210480639842482482219381041844102842083140010042222125C421244118244008240084248400180000BF2B0D16912225782992444641011D4C231421439844482A1132129489148241C8
-:8057000039298968228D1130834094221092212C0269D81402E041642642C9285881214541EA8279A208A4000024DFBF01290418001A22B4110400111C08408818C1140040C4420000001420242204442048C244404881041288000000122100F0668E000016110831110000006018880000271866828408498438411924422284A44200F4
-:8057800020B85108842084048638444820022442482B4800F063A62441142821293214204108281944B142A9811227414628426144708245028814504224C014004111412444D0241404418821001225044141853482812A180EEF25092230282022648220924113861888148884622828426880021B24808284024A020048146012508107
-:8058000030110092608838869414822D12C818824E12A01463F8C167C042000011114121412129B44308212501411A4822C1412502502488200414411004420038A0141004418144231801504840341640148271B40A8A1418411C22028352182618187144088488C04100144C880890240000004294100440B284410884806489701106CB
-:8058800022200112482D92C21A22F4D87200544813C31820010048890221404412082100005018401401244286020000220048381122398434822C230123028284418410F49BFE50C2002144912180543418441889213518478844189014484B1489142264442C14D42201002A212211842161244121488301C01484208801388440884196
-:80590000085F6406284A120118418C4302008502850487222223022646221282221491232220344481A042200426010014481384118175210283828186210480D3220CFF9107A49048108101311922156141882C8228A414142B842122122541E112012C681122234203651314548480D462488AC11841100625044C0A2B82822DC6100414
-:80598000302286F86143E06232C31D2A85E4C362342C7211D18832119D6189026D42237885B17472497B3222B42472A2F124E1482A46E11684F426222AA4622568281D484B244D41441381988A2741C79418D384AA8486EA18F81214AF41AA222E8A2F4468E445FC52484CEA8214F24844244A9428143B211889D1184112F348446031EF3B
-:805A0000BCB818F14818AF25542A26A48825621560283724C046357425D2112454536C81B47402131564126B2A4E42CD5219F14824584E16BD1918AF21B78428A2986B312AB51235C24D922F82E1653984390A615483C213A5F115243783C962164D232B163F849C51C6A8812E988E9469AC3453D262B555FC41142678C3F1258849B2424E
-:805A800069443721469244274425E44244042CE261F1911D42239144344B49248BC557423CD4246121467494928C2C3D889A9428CCFD7355004302224822A0124822200280C4258E481C82C425C0248228114A021E24111A1221152401130111881190413011F09148004482448A4424180883243848AF810A2F247446085D55CFF4F453EF
-:805B00004235D2BBD157F51112AD123F31F1CAD6CFE1F89A7ABF71B913F9551D5F4CAC111D461F51D911DDAA9443D7F83D532DD63F21D55684D5CDB1D4FD4A4D3E511F1155915F51E11AF4991BB7B537511F17F34D4B7EE3B5FB5193BFB7F14614EFA9F334166F49B534F352C2CF74F496968F43E841711EB4DE082D422F867428FA151504
-:805B8000E7F37F71F12A1ABD1BFFC2F11113EF76F19B9ABFCEFB1C9EAF89F3999B3F39F395B77F78E82191213F15D511FF185A39D2FDD93297723F21F516572CD398B192FD58799F927245F1515C5D271F32FE51537F65F11B1D9F82F24D4B1F3656F31D12BFF5F15212AFA3E123D322E323B352F556572B952F43E1435744FFAC022E667D
-:805C00007D67BD2A7F72D377F237249D283F33F25765DFE3F34A741F3FFFCAB8CFEDF9DADAFFF3FB6EDAFF5FA9BB7F27F737557F57FF25918FB6F32341DFF67E237774F727236F77F32341AF95E44CFC5C5C4F82D455D445F41113674AFFFDF51F1E3F15B461F25D5F6F66FFDBDF3F35F9DBF92F25F59A9A2F63F1D2D4FAFBD25AEFE5FD5B
-:805C800016DCEF87FDD4988F84FDC146246F62F62F67BFB2F23535FFF3F23F3D8F82F33B2BFFD7F67D7FAF76F7FBFAFFACFBDC9EAFAFFD7FFFFFE7F7FDFF3BBB7F63F337355F5FF7A5F48FB6F76361DFF7F623634F77F637776F76F66361EFC5F4D6D4BF84E692F655518F41D531F2F6A53F3DF51E1E9F95A577DFF5F5F6B7BFBDFD53D2FC
-:805D0000FF9DBDD2FD9A9A6F6BFBD6F67E72AFA5F51EDEEFC5FDFCD8CF8FFF4CCC8FF80C21004002000000A049204122480200420020840129012921941680011810064100482048020000A0494400825DEC6028154402400C1598183048D028088918840844414611850814401144814501800448442018E84114420C4C04842C81C4140E
-:805D800080018F440121841884CF1E052CF4112485F211248B141F41F24E111D24AF24D141F24A9119F24A9151AB9443FA4A9143F2429147822D914F8AC4915FAAC4816FA264115FA264191FA26459ACE449E2A2F491242CF4912487221F49B248F89124A3F48124AB141D24AB941D28AB9453F14A9543F24AB247822F44792498924F8202
-:805E000084FB244A2F690B2E421FC1E42234118F12E141F46E121741E3A6418F6628B14ABA85F24A964B482F14F314482DA14F81D412FA9448AD215B588F14DB24C8A17D5A9E215D4A8F1D42F318212EC21FC9C24A1F49F628421F48B248F99124A3F29144272617C8AD861D682BB49E282F74698A29EB88E4447324B84279A4B842FB2444
-:805E80001AFF260E8480040000248100800200002008218001000000000080040000008004280000000025013FB40E28446011687014015081241886011221008840C44822141CC4224423068005400848224C0200140090122315018882D244814221890484BFCB4801864118045D42485081C08994C0493944D2A164129D4230419220B6
-:805F000002009061C0284AB1828253124011623288344644236516501818A4814D22602828218363111E818AF28D58207244113815684592415081115958181342F11342904B221B84904142283303A261282E4130481D428A92288581E41412C4214073444183641469F1124111248E286CA248702298422B2185E1187112F867ED000066
-:805F8000001994140084852281C84800241185024496086014002904A02118C0120030229082008081028418842088318400811A04A6F2ACC7400234800126020010114858282064814C02381944212204448042022246A442400200002911110283062480218928281484E188A4848AF4B14AB01142614249618227841249E2B844A82148
-:806000002328041C9421211B424880242216840262181022364200222211282982A1242218260816E121A4588E462C442442028C92483024844F77093C025449B11842A8212952218422194848384139028CB22404221C641628289024122221226244286022112829026822118C024A211132862995940010BC1864842A84F4789C204165
-:806080008112022304448B84201122048430421E41001A84024442800400272420242402002001238111029382842D04212A6828422880684883F87AF2E0C40342106218139148144664C8850290424642384112502220829242184C022094284824802641E841C8C240A248412110843212143A14024E1482202802217F3705843048C376
-:8061000001002284124428002A21220111281D22430481228A012825010000404488A24242004246886448848C24242242021224A08490827EA20012110088489042100120091A280487429014000028000049012902002504114440942814181A24440180010022528008DD61A0121281C1211456A12411168498286029122E128C11515C
-:80618000582C822384822222C2241021D48422D422022A54244126C4A1489042C18C8485C12A1AC4411832102289B2128C8E28F84498B0840414120040384A4885012120A448424838401504A44200260220414101800198100649885612A0844885014602B014040000F0A588001904130389068428441008484008261802302228132225
-:806200000221602228000020110842202206128602800A000048220000FF950A00004C1484248194212D621303121A142324311829041820041210120280C22120020020810142004341060088A042811880612289F45154A0492A410A1048688227820089141249082548482214022814111A4282D2210242480000212008001E221082FA
-:806280000856818C282241021AA482281222E34A2112080018230200504220514222181220C2148882C04448800100241242421598281542A8484606004E8848008C0221A2128008482223D1430B24150411104191131522324150411184211001289012884800502120031A220112206122701221012A04121324481412A2282110120233
-:8063000020C4217BCC40048907184C8544D44214011302801418020042221002202602482211482822763824128A27021601002D128088A14880418882220C82F0543E4089145484490A8901848C6182448180213128A01218292224012848610000246015400800502642441E41002C2101301880A4418061818189F1716C30248A9124E9
-:80638000898232A2630245721C02404402800628C041882582022222181420022890482004B082040000002028A2146249022120B21884E46C49C141281B414AB111041391621148116C14C128112A644166C2442001250458A084424218A0411428C0282100284E28188421182CC81C42298611229812A2C823664421F01CCAF014221760
-:806400001F1E2C1B135AF8114653F3117825F818441F14A242153111242AA724163968221CB422E1484211C4124158233412681B212B411B253AC6422B22288E421A624118442334821741846932C82B2489B912F81472AF26BC32A894381653A25F7D44C1458F48D518C1643C93B41C7328F429277931281B25E1ACF4121981488D621E62
-:80648000162B24619AEE22B162B221A4424A14F221212A22A2561822A02287811592823BDC6A9243AC9411838489E82C8DCD8221CE326238CAB4227614E882AB518FEE0213863224A5F924448786AFA454224B442E2B2D42A54BD418B14C54A3AFC3A11229C2527E128098414AA2252F22E233428205242A8234481B114624B15822D2A66A
-:8065000025A736121E922F2CF412121311A218BA26120838826AB448B468F2DD8E00411044880818804188C14810441144D184441124341410041112B01802008031411811891911185128195428118150184881486089608120081743141F34F656299FD1E211F451C356F35B6D4F55F61D49EF74F4521817215E4AEFD4F551713E551FB4
-:8065800057F575176F83D1C6F455174F41B8D4FC66454F52D431F2555546D28AF12878324E7229A2754AD331F247258F81F1B8E8B7BCFF56E6A1F3666C9FB1F113914FACFC424ABFB67443F3193BAD4A2E32EFEAFC6842AF26FC2292CFC3E183F17A2A7F694AF151532F1FF319211E311F3DF671733FF5F47767FFD2F57C7D7E3F37211F8E
-:80660000E7F65E5D5F75F73A77BF55F57C367F95F5525A3F13F3B6844BCF6E714E415F7EFF13111F13FB192B8F82A5561F34B762E614F621292CF227251F12F2A1F38FACFE7F773D3B7FD6F6181ABFBDFDC7DB3FBCFC4E6EBFB5F513132F28FC3A1A6F6AFA7852ABD62BBAEFC6B538F37A6A9B45141F74F41755DFF1F33B1F7FF7F5F24FF7
-:80668000BFD5F54615FFD4F65F7F2D7C1FB2F7423ABFB5F15755BF84B457F15C1AAF45F579332B516BEFBEB44AA5442CFA74462F277123A1637AE436B752A7778CE727D777F61311BEB2AF2AFA373F3F35F34E6625F29B9B3F7C5D2A3F34F64A4A5E522F27EB2FFF6E3E2FAFFF62E2AF8FFD6674BED88FACF9E2E2145F77F7B775DF31F2C3
-:806700003B37FFF5F67F7FBFD7F76537FFD6F46F6FBF95F6697BFFB4F35F1F3F17F5797A7B37DFB7F37A649F37F776744BFF9E941F16F665654F67BE22E12AD233A2636AE736B772B771A7771F36F636362B338F8FFBC9E36FE7D722F34E66BFB5F5D2D22F6CFD8B83CFACFD52522F25FD7A9AAFAFFD66762FABBD32FBBAF84F42E72BEF3A
-:806780008E7F660A14200200472A8447226032482412241608122812004A1281024A12831222044200000018802101122448000000A04842128304FF880C4B428041A416444B144C344800112420044E2140214201881100100122002032112632112612A18211231451221308119882200A808284021814ED2CC0421F4152281FC1324824
-:806800001F49324A1D24AB141D24AB9419B24A19B54A3924AF3439242F347924D812F924481CF9244A1CF8244A16F1244AD6E1A2E459C24A9E242D4A1F49C2421F4952281F49B24CF89124A7241F48F24A121D24AB9419B24A19B54A3934AB9443BA42792498924F8284F9244AFF9B052CF51168A5B211764AB211324A1D24AB141D24AFBA
-:80688000449921A99B65AB9443F24A9143C2914F82C49147822D814FA2C5815FA2EC11F8244A9641E259E292E458C24A1FC852241F4856281D64CB841B29E72617488D121D248F44D94192BA49D21A3934A938A42F44712498926F82C4B44D5AEF220E8482480000000044001800000010021800240000140084800400000060428002006B
-:80690000000000F02BFA90441C42612285148C8212C12483243113407422028CC38421258444454314118612A8418D114240220824118448242CDC84844AA94248429609229024816088205828BF2A0B36A318CC61911F228D514A16287492C2129450291941D8244252181AA4241C1188A224239248583B2425C82222274623E2128401A3
-:8069800082822E1260121652213E428137A12CC8424B14122CC2CAA043282AC12922FF9C0D1E46F2C57138634C4781C32292412F28F1144A16333195D224211262A31D8242484E11113313E22862442A54924A31381724442483084642318842241314661A1D1250122F4244331400C54228440A828B21BF5C03261181018F320121160883
-:806A00004C02840014846C028524D1420285044E243181184A52821423A22423B241820188E022012AE88154228C36681E482CE8892424C322AA0432A8328942B29C0700008B1210042144182004000000000000850442240060220020922100000000210041290228800228F0E747B0245441165C144004491311010024504823614242C7
-:806A800040014884E04244011110582848290438820068518424182C012283542110C84800240082F0CEA18012311430184094242154182004401C024810014800424120045028482C022882281922420110221102811450488C042230228008FF340D43441458412244204101442002218091240024008301494209112484402204124618
-:806B0000082014140812002823442202290200002229D1240D18181420814206702211E882011004108A084B618A0100142180128C18880244001A32128C11820881248200800181242004621628F2D16E0000C381024001800418000028224281002042084800220000200210048112200100897882A2218001008004AFBD0122604110DF
-:806B80002101200211000012841200C06800410040820212201282014428400223220285011002810000002830AE20011615288101142822408801411860822094341EC8004312098052848281282261001E261A9214248CB82291282C9181002D8A86A21281122148202482F21EEB202201166412284502241187141A0200502812A83049
-:806C00004822004002483022281800808102502800001008001884000020B24801AEBF0000121812001800004100301418124448000000448442222002002212200120040021000016A8248022012E483FA1011800410083110428C01200128C4108004836048742412222800600002828222428AC02800384222004488333580080044287
-:806C8000F04ACB800100126081442042240141004004124334143024418002448024022828408812C2220080040021201248882102221840F85DD8508883044301120012504445A6222A22931884181840726252221E181AA129002A44081100857828A8644A244728012A018149026A822226234528042C54222D425AF368C700200200F5
-:806D00000083011800000080010020040000002228002002001008890100000000400800222FCC0B8CC168421A0441200200444C8282020000D022022981812988088140114101848C8486040000C04441442228002001704A82D282F177D850C880040000004024A12200400484C04821818C01880000421410D888024A042200000044B2
-:806D800018280000200210029F1D0E80050012180040042800000000218001C800004001C0288004002800004C0128000000002180F576F300000000000000180000001008008004000020020000000000008118000040084820F278B3103848524A01009011124130242222180000242D422412129A2228080013522111811283242404BA
-:806E0000008001414538242002000024AD222412DE4E40C8184848224100104144544828280044004290422D441818888810084041018484684800000018444C82A222000040082129F493550000001220010000000010480800800200482001602220A22100200218800100202401000080048B5E0010041800008041080000004008411F
-:806E8000001008000022200200000028000020040040084820027E86102401001818001112200100008400890248000000002222283AA2232A022200200158810042004048088F82A4228B441F810F80218201430180810100120040245188844E4841C12024044884126A8242220200002884388C01122021050000284842A0221FF30FAF
-:806F000018221624A12144A0121781801118088001410048802434282284008100242800000022008001100880012011480848F06E6DF026222982B112219112C0122592832F31F111119B98179885F888418F84041D4911489558884F84F448444F4294242A22E24202284554242AF2262227212CB112A1812B99C0922592822F31F11192
-:806F8000118B98867948B888A444424E4880548885E884B6390B6F22D224A2123A21110214259282BCF1111119E9897818D818344842941501C485C8688F44D44CB444B2642262428052424584F3222225A2321AA181232908259282BCB11191D19E88878189B448246484008485C848D7A2000040110100000000000000000000000000FE
-:8070000000000000000000000000002502008FBB0D1111110000000000000024244002255222250200242400000000000000000000000050220070CF0F00110000000000210021245022242100002421244002000000000000000024000000250225023F9E0C00001111000000400240120210020040120200240000000000000000502225
-:80708000000000212421F0864A00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00004001000000251212020000000024
-:8071000010522210020000000000000000004002000000243FF80C00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000CC
-:80718000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000B6
-:80720000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D000014110000000000000000000040
-:807280000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D000014D1
-:8073000011000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB000040110100000000000000000000000000000000000000000000D1
-:8073800000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000BF
-:80740000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB00004011013E
-:807480000000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F66010000141100000000000000000000000000000000000000000000000005
-:80750000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000003D
-:807580000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F6601000014110000BD
-:8076000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002559
-:8076800002008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB100100110000000024002400244012121202404202000000000000000000000000502224007FC94101100150110000000000401242420200002421250224000000000000000050220000002440028F69030011100100000040BF
-:8077000002401202100200401202000000000000000000002502000010421202E72B00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB000040110100000000000000000000000000000000000000000000000072
-:807780002502008FBB0D000010010000002121210024212400002410022124000000000000000000240021210000214FBB0A00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000141100000000000000000009
-:80780000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D00005F
-:807880001411000000000000000000000000000000000000000000000000502200F0B8DB00000000000000000040022424212121002400000000000000000000002400002100244F9E0F00001411000000000000000000000000000000000000000000000000502200F0B8DB0000401101000000000000000000000000000000000000008C
-:8079000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F660100001411000000000000000000000000000000000000000000000000502200F0B8DB0000401101000000000000000039
-:80798000000000000000000000000000000000002502008FBB0D00001411000000000000000000000000000000000000000000000000502200F0B8DB0000001111000000212121002400000024212100000000000000000000400200000000CF3A0600001411000000000000000000000000000000000000000000000000502200F0B8DB75
-:807A00000000400100000000000000002424240000000000000000000000000000002502008F6601001011010000000000401242420200002421244002000000000000000025020000400225021F340B000010010000002400242100210000242100400200000000000000002502000010421202FFDC0F00001411000000000000000000EB
-:807A8000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D100111140000000000000000404242020040020000000000000000000000002502005F140B000010010000000000212502242100401212121242020000000000000000401202000020
-:807B00002110F21C5800004011010000000000000000000000000000000000000000000000002502008FBB0D0000140000000000000000404242020000000000000000000000000000502200F06816001011011100000010021042022542120200401242022400000000000000004002000050225022F0749B00001001000000400240124C
-:807B8000021002004012020000000000000000000025020000104212028F810700001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D110040010000004042420200400200004002400200000000000000000000248D
-:807C0000241002006F6F4801000011000000000000210000002410024002000000000000000010120200401202212FAC060000140000000025121242024002000000242440020000000000000000000000242440023F1506000000000000000000251202000000250200000000000000000040020000100225026F250A0000141100000094
-:807C8000000040124202240000250221250200000000000000005022000024005022F07FAB1011111111511111000000242424242100000040022125424202000000000000000025020000002424F0BF1B10111111511111110000000000000000002400242424000000000000000000000000250224D0EA06000000000000502221212440
-:807D0000002400000050222552222502000000000000000000000024100224CE731411000014110000000000242512522224000025522250222100000000000000000025420200002140F2D24C0000001001000040420224212110020040022502250200000000000000000025120200000021CB3F00004001000000000000000024242421
-:807D80000000000000000000000000000000002502008F660100000000000010021002100221000050220021000000000000000000000010420221F081FA00400100000000000050221052220000502210020000000000000000002502000050225022F031F5000000141100000000400221002425022421000000000000000000000000A8
-:807E00000000241012029FE70500001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D000014000000002424240000000000400224240000000000000000000000002100F0DA6D000010010000001002100224212445
-:807E80002100400221105222000000000000000000000000400221F7BE00004011010000000000000000000000000000000000000000000000002502008FBB0D00001411110000002424240000002400240024400200000000000000000000001002002F1103000014110000000000401242420200002440022400000000000000005022F4
-:807F0000000000244002AF7A0C0000111100000040024012021002004012020000000000000000000025020000104212028FCF0C00001411000000000000000000000000000000000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D000014110000000000000042
-:807F80000000000000000000000000000000000000502200F0B8DB0000400100000000000000002424240000000000000000000000000000002502008F66011100144001000000212121002424002100214052221002000000000000000000240040024002AFFD4A11010040010000002100002424000000502225020000000000000000B6
-:8080000000244002211012124202FFEF4601001001000000000040125222240000401252220000000000000000005022100200400225028B63000000000000002400242100210000242100000000000000000000502200000021242124D60E00001411000000000000000000000000000000000000000000000000502200F0B8DB00004027
-:8080800011010000000000000000000000000000000000000000000000002502008FBB0D001111140000000000000000404242020000000000000000000000000000502200F0B98A00000011000000100210022425421202002410022124000000000000000000000000240021BF9F02000014110000000000000000000000000000000036
-:808100000000000000000000502200F0B8DB00004011010000000000000000000000000000000000000000000000002502008FBB0D0000141100000010020000002100000000000000000000000000000000401202A0840000400100000000000000002424240000000000000000000000000000002502008F66011100400100000000004E
-:80818000400224000000240000000000000000000000400200100200E7330000401101000000210040022424000040022424000000000000000000002421002121210077DA000040010000000000502210020000104202210000000000000000005022000010025022CE5A000050111001000040024052220021502200002410420200003C
-:80820000000000000000002100000000DF914A010014140016084143024004C428281A025A2201231182810121184210283448A02418488C05848480040000001E28281A12088341F85E6F107111781811981C45982C26644228183849423824284187414438008915644425322429E18152828B218B414881201448484A6284622AA42421
-:808280002A01228C43088B2422428921A452124622F55EED001781841440148801006042812222400C202401444224442CC122811688812404200242848022020040080010488802901885F2FACA100112301484000012384044148822021A029048214418322100220081201488416221814618288207804108830472209448184248BF7B
-:80830000640C00144008418D248042040000001A02228081512200C018204408400848400842208404000080820222122A0190128F760D0010480122C024442200004444184420010000002001428420044008420000002228000020010000190C0000000000000000480000000000000000000000000000000000000000008FB1094002E8
-:808380001280021400814A126844008C811214842432144120024100200523CA3258388424808184B138840221188400460210028982014D748011619111A456321C4982119A111C199288B042222A01BD42228A8414180621A571169A1921E94268414214A028125826481142254121C8481294254264A4409844C822287D652051214015
-:808400000176C21C1742164258181DC2814E8430422E9828455248222A9C1424412221955482A1259248814B1A384AA1218E2820A4214823E1842351212045484852242C04844889AA21225EC700D018215128000080A12140082220011934422054840010624119014B121022541200122941480145810282811234204448024448004F43
-:80848000A50F001480C148102104802484440124C0214180042280541837A29016810026A2244100004426C1486A21382A120000832499288002001EC3145B163012A312416211588711284282818443D18224F124C9C28CA42581427041289242604290626963264A4184C2231D221C817A61D88444C188CB41342C24C413644843D28451
-:8085000064448CC844A222889DA92002231122C14816018304484A6884901184248C220800200228902849C2128384022C33442890212981322D288C24C24A8C828544421412A4812A14288222022FEE4F315510C1281424C0511921020046483442184F14C86146AC344628048714482D4B15421284921662292412742102118842C714DE
-:80858000118B854B1814212116014866984C852498448820F842EE00A024182426221455484951484A8241A8164800823048432844458421846C22588E48204109528416C4411E442018C421C724C12450482229C44848486023A05244CF840B81204404142628012244800822282A812212642822144886882181080029417412230184E5
-:8086000086880490122842124D811422802802442C81C8444890629F320912211480044446B241124241081881A084405422518021021C420B2180810422282121200249028305804128C841180024A0420000CF9B0C001CC2144662328C6444153614E0828419A841228A028E224552494CAA412E458748D018258422F49842522C61A328
-:80868000366224E0C1681252222328C2414D18929150498AA1428146E621842A212485F2E48EC0120000302413316A288501201188A4142244A08440013021502290120044001800104484E1C12482541A90824824200480E444022849B4B70B1524021052298084D28102214098856628226882430A2A2816842884028488006083A08438
-:8087000041C024002DA48018181281B45888B4880100C088A8584D222F1D0600E9041E22807412C81880712802881E4880180124411694825A98321816C88425048A042318344549010028821031422641484242121444088B24498401A504A7F1204112912168381F81C22EC0420098341124898501114B14002034342E4113A28226345E
-:80878000354228422B28142BA41C02281C02285C011C2404465114228220A112614A8884F44A622400488D1281001100874410284104148972132AC428881741288C11D28288C14B2C45486181211828111662211841814901C988818111287118A214AE1200220023E8E50B2C2462228A87C138846828434218284218C26226890A2E8400
-:80880000181CA642DC04221422208A84259271A6012604191431248A3222B212521100004A4BA4258A2288E24188F4C8CF0014842028040050225048A8000088801818224811881808814489028140042D4822C114C443C8482821881604824A0A2A044218212128A7A3400441904841104404186448C01818441CF411241810B2811142C7
-:80888000844814541420011820216814480020140149245842404102401208841283023F3E0F18486848808413116114488081810812842487254609008C08003842158A51240024A422214082019051008244422082052127461840F4112E40081C44088004460CE042046842144686C5441128155442144E145CC48421C8412222254154
-:80890000028C8281941435A48190122D2488C0149384321840089084C0442382B8DF45622142118D692C472C67A3542E4A8C447A384823D1A136D187914AC823AF25EC41C6C21B1446B51192221CF288414F41D24485F222A4172533D6417163B229D26472143521645F3B91411EC41BD124871513B141FC42328BA94A311878238E85AA74
-:80898000A4F642111451F85285F838619D785D6147845CF248168B6243B888DC5125961E2A7535BC11D494F125811B188E286D284F4E65822A78242C722AA9168CE182E111FAA422DC4232218B224D226D3829B25EF3C832841691C4CF34D444B128E886B414F4227A2E84CD2C4B8ECFE7E548F452E1C0552E226B222E1223E7244172488B
-:808A0000B43832412311B242E181F1CE88182E6F1F2CDA38F3E69C2E2486F874254DC58F284CD85D7516FC53A2CEC81BA52FB16421E9B684A1844BC123B15211E359B8E848E44A782539423B942C61888361C9182EA242472C1E921A0243F2EF9D6044271244214421808194140000411004488130480024812483D4211908810049081C6F
-:808A8000010088484008822284254418022184404844081EFF243B227744CB226B622AF65E74EF42F252216F87F22523AF81F1222229F454D62F89C946BFC7B7C6FCC2848F7BF9A6B94F44F9C5D5DFF8FE87AF7F7AF5676E4F67FDA72F272E6E3C3D12EFE5F646477F54F7D4463F95D38AF21775B5F98113F7D87F16F642C46E6A2F26FED2
-:808B00006271EE8E173C16F844466F65756EBC48B52AB684D488FCC8C48F22F43E7B247F46D6C6942CAF42F638387F57F22F252F93F276285F36F21E1C2F22F22A68CFEDFD86BC4F24F47374AF4FF7A3A76F61FB83B36F48F9C5D5DDFC5F1CFA65F77F27F764644F42FA64264F477632F37E6EEFE4F44FFD1F7DF4422EA5FA1717AF91F1E0
-:808B800021B3B5FB72722B541F34F4F6F4EEF32F6F6B2C5E666F66F746D6EFCFBDE8FCA22C8FE9F5AAFC8F4FEDA7FF43DC347F57F723658FC2F23339DFF7F67872CF66F66F37FFA6F61F173F56B228F2187A6F2DFD9E9C9D21DFB7F7E7D32FFFF9DADF2FD8FFCEDC4F59F8ADFD5FDAFE2DEF5FD2F23E3C5FDBF3EC2E1FD6F24A7BEFE4F6EA
-:808C00003A3E3FF9F5A7677D47E5FC3735DFB3F38737EFECD49FF25EF6FFF5FF53D73F14F4D9B9BF18F15C5EAB668F86F66C6E2F84F77256E5FC52D84FCEFE64D61FC548F16163FF32F22A26BF37F37F2F7E22CF63F72F3FFFE6F65F77BFD6F22A22AF21F7DAD7AF99F97971DFB7F7AB77AFDDFD5EFCFFDDFFEFD94F5DFCADECDFFAFE3F44
-:808C80006FDFD7F76B6DDFFBFBBE3EDFD7F75A6ACFE5F73A3E3FFBFFA367BF73F73F3F7F73F33C3F7F78FBEE6EFFF1F36F7FFFFEFB82941F3CFCDFF9FFD8F5795D8FA7F57A58CFEFFDF2D86F6FF1B634EF4EFFF4DC6EF23FF802250140088CD414414802141648E288448304842C22482449040044001100424B127022010067224021C122
-:808D0000821220018A442481A24120C8241200FFA60F22002880128456126022488004482C81C48186C81116681443A824842845C8214F826C14AC11883411D815142201118F227881344840819488118324086024824A0142147C0E2E421F4152281F417248F21124A3F41124AB141F41B24AB981B24A19B54A39A4AF1439242F1479244B
-:808D8000D812F924481CF9244A1CF8264A16F1275A96F122CA96D5A2EC49D2A4FC91242CFC91248D831F4932481F49B24AF88164AB141D24AF24D981F24A9251AF243924AF2439A42B94478229F92448984FA2F49DE2E0A2B151D238B411F248131B2183D441B222D1C1F44A941B28AB341B212B841788AB34222D8147822F14FB2648AD42
-:808E0000B15F8284F927C81A782768182F826D516FB2EC19D2A4FC91282CDC41F624938E684E111FC8928A1F48B26AF18124AF6641F848B35B218F2428E26479A4E844332429B92694B24F2AF5E3684008480040010040040024000000218001000000000080051002000000280000000021F0FB4F8036118423311645914848818485125B
-:808E8000011C341A159A48488E241CE1840142848054820061449046250280A2121024212462148B2C4223CA114860441604182748208221D86A081624028511E982852112D11421A44217818321840760118D265C8222823E21B041C2212681064218D0149D8417281081C42424198153348C48C8884048A2C2618A82C1D8422621F49570
-:808F00003D30241344E8B14424A3144291CD1149D412B2217148C2588F129148424DB18D361C8182F282281CA21C33042CC22444190424CF111CB461B8121291444922A42116F144A34784AB2836088446942661AA31928E48621AB252F847CA80A52124D018D1C1148802108814381180140210F14824208404902813428104245614023A
-:808F8000880000122411628488C08148004A09108401006B7600100241280026A24800407848044E2443430142134221A82441302220428401880011211189B111C281842468AD12120000A0482018E888A424E05C0C4E341117422E11121C55126F3144CC13182B1C4A98433419187182A142A83210344125962148817386D1322184A2F9
-:80900000144C22C8241941C42141842F2661421CE81CC2411C4513C4C42F886212ACC1125A028628F2E5EDC024157221C4314CA112241D4428D62121048D41C72419784483082003C08241224226C2442C62214828D2418226931144182882624C7281A28210012188A822A41A782248E88408EB38200500D0211421111E52221A682C10A7
-:8090800001282E151CA682422651141CC46215444268121815840120024110D118321585711218B222945933A5411441465482C68101588A2482F2F55D00917082682226CE62A6F128114220A4188722190427816E1447241632814428545226B121E541F812424004466234228A66A1260546A4846B4870822131C4A0812021022F268176
-:8091000014880910F2C58E14188923140560881A242451691C032032222410011E228E4111842210822808160222941D181810C85100004A02611C12028088041244480023F4721624450128AA210188826120010018200CA2840000004468002246180442102209120023850132809444400200006218F018DB14438142F211281E22CD0F
-:80918000228133344112123B21502818228BC144471A2538911D44288504B043B24433826041846246D812C1F2F09924114B41244C741292412CA12C282B414C248132421A924284586280F411D450121321420420A621EB124885818409460325A243421229224891114A32211604522128294414A224201122018A8488A4928011818AA3
-:809200000282244818418880017D39008221C021000045682220611400284440134401684848A08119043100214304182288224141880020C1121244C2100212801418F2BA810018208204D421815012A0C22821250129511818E042444485013446024712821814308110492201002B141133021938A211130700208C0120F8C43B002FAE
-:80928000188222052850242484101121044844107214C186141D125012206492124901484420A521A1801224B144D121464122A424801222042223044004243F9E081304111489411A3421188021128222C2211E812681A128190588001682192488A414248E11001D48282815383122390248860800C460422B4844803C82C0A448AFC9FB
-:809300000890282031611831112781301221A6063184126264006014D01204182C8405181C8845018248100121308212230113D842044A0221128130128840F1131230244004408482419454228E43008081129421288880022C621A88128A822228613812822117214824601648801411022E82881308C02220618400F033D44048A24100
-:809380008553281344280411114C2301812200C042224311C624444200206842004A48441842024A086041A0427844806141C348849834004190C2CF7D0960181820298A02422880013922022100430818120055621299428118C18248241823263212964221818302482823041906308441422524242408FB9C141F8423D18196221022D5
-:80940000B44411B44221644C11285964854364146F260146A1422922C414800C222C240226B581018441482850A2408ABA148868C2C0A2103248C88828828821418F85044A73828193317AB8C1D28AB23515EA817322C141473B313531517F41F35565B37717F252414E74AE4353566266B21351292AF121C42F130D5A49E23C41523B2976
-:80948000C1119644F213142F2DC343EEE52F24679547218D122F1399A865F4A4824D424B158E184E448718887FA208449B392526572123736562244FE5F147465AF1219229E4347428C669C6622274CABA81382744244714511CB242BBC2E82522B841A168821EC423E1468262213332474F2662926A781982F881422B8A3F58D44484842B
-:809500008CB422E82A94428A38246F24F4D4EF141F126422971385D3985768545410D821B2D292B1A0248B122290342E15474216B115C3641B429E414AE4D3F4116143D841E22958663F111DB4E1E6816122BBAA4E233E38484C9C132921A2A24AA2811F2472C476C8C2344E18885A18C482828F790E44400CC41448414826810482F0142C
-:809580004880048C0482000000800849288408410010088382542C1A14A8498110A84800608914260826085F9D4BF181113711E5DCDDF5C96BDFDD774DFD1515BFD3F7357C6AD312F261957F15F117396F62F262264F62F13F118D156F527B64F445557F74D477B4A2D755F222823F3EB442E418F821224F4CD474F4D7D71F387E177F1B53
-:80960000FB12524D2F7FF5F44A4E8F2DF6D848DFD6F449C99F15F53B5FCFE5D47654AEE7842F25F54AC88F86F616164F4AFEACA4EFE7F446A8144F72F1776E37236F42A567DFC7774CFC5515FFF3F33F3F6F67A3A65ED67F35F57F79AF767266F34517EF67F5BE367F717924F564557F7757571F16FB45652F32F2D2536F4DE758E232F2FE
-:80968000C4444F64FCD7DF3F14F6756DB7B1BFA8FAC7CD6FE5F44F4F873CDE435F76F95DFD9F1FF793776F74FCCEEE65F24A886F67FF46848F86F64E5CEFC4FC8C84EFE7F573DF144D363F31F62B39DFD1F34D4FBFBFF76F4FFFF2F13E765F65F573762F3BF242F11F34F44A45FF67F373766F73F1361D6FD3FB36B56F43F215255F26F776
-:8097000027652EE36F71F77A7A3F1BB745FC95936F53F3D6549E526FECACCC5F53F73222AFAADA32F24B43AF65F5C7BC1F25F767358F6FFD73C92F21F647C27F187C4EFE4E4E2F24F4F2F2AF81F57E3C6F44FC848CCF66F5BDEB14AE52BF33F63F3F3F15F3BC2FBFA7F76F6EFFB7F73E36FF75F573772F2FFE56D23F34F46B4DBFF6F377E8
-:80978000736F75F7767F6FEFFF37B52F53F174575F66D757E437F61677AFB7F6D2515F4CFEF5776F6FFED454DEC27F7DFDD3D1DF53F73A2A3F28FA4767EF65F57F755FDFFF5173FFFFFFD8F63F9FFA96C2BFB4FCEBC86764AFA4F4F6F6AFAEBE43F566F44F44ECAAFA6C561F740D26012F1201184841841412241214400224124C22081214
-:809800004C024221428092124A820888422A012A0145022683248244A248241A4406002C220882008F760800222883840210CA24232228144121C21200224A2182B224442442C118A0C2282D12D024258808203962284A212804230218121CA148803442808104829F16022CF4112485F2112483F4112CE3D441B24AD141B24AB981B24ADB
-:8098800019B54A39A4AF1439242F1479A5D812F9A5481CF9244A1CF8244A16F1274A96E5A26C5DACEC49D2A4FC91242CF4912485F2912487161F49724AF28164AB141D64AB9419B64A19B54AB924B44A3B242B94478229F924484AF9244ADFD80A69B51116BC1136441D28C33211AB121E24AD941B28AB961B218D8413DA4A31352979A1E4
-:80990000C8117F8AC4915F82C5911DC81EA41FA264591FA22CD5B468114DCA9E281CAC698D431B2987141749A18AD61CC164AD1568AF149924AD11482B9426B84A21D24ABB2294B82E12BF8C0F20880400000000800200000010228401000000140084000000000020081200000040016F3602302120614116E8436461C0482233158101C3
-:8099800040A3412E912A68174A911441C0261429913880022118808801232164111C9443211F28A642A722588AE42824280820A2436A08C6F2F61C20B182819221244830481584314181821D821D445921522C842C0422428E21271213A4346846B4243453628CA1842B8146C2A28A127184228458488A051142822502418C443C688886BC
-:809A00000814222FBA072C218E92211694125287641564844F24F2184113682949561426F14612871326F221425A32143221C6E414A141812E443B12688156B18A61284ADA22028829217C42985219BA4482F222122C6C2C3088C18C04872BA2141AFC336A00130112C0484322011214001114124088A848182034851C72218232225E24BB
-:809A8000204422810848128813314419445141884825C3484A0830844280222A840426F249B8002008880080080000000000000000000000000000000000000000110010011400775E40322211CD4C184234282598494F12232489088461482A21C2A71A018C04C285478822013B48CFC101222DA2525941843888144E222115F82421481A
-:809B000018858888B4460132226C8A21E188BCC90E2962811911084C42210645BC22A251148429F8186243A41A4C4852161688B38C7C4125C222001F8164112F8C11484294A26219614122C18DA14648341527127800AF84C8424B2229E1210886B4286B8543F85C3A0020088800800800000000000000000000000000000000000000006B
-:809B8000110010011400775E4011D11CB1118201C0246D12682049028140528114824C01422281243021280048901492218051413412458144020014481400920042846022AF1D4EE2462101611F427412DD144788321162272281C213E89221E22CC2282D35228F58A282541F42B428D441B64CD161D41477722422A28448222CD2344294
-:809C0000528422BAD423E342A4432F21643E181C91424B242AD528B28814EC8AA1148B2C8E4C1DBF242AC11185151281A152A0122714422A198A184829C2A91C52121E241482406CA44E211E45246E154168224A0121222F1211132FA3691334242724242031112146A4141E2282814A430889E84E43C14580F111244357C315D48412A60D
-:809C800021222124481CA81224464238B4E0C2287624E114824264824F12442207C084D2284044440215943229A421521BA42581944122288698484489A8148BC24B427FFF0384008C84648224A02126025E282338284994312688925142A0245018881B14230E4722502440462412A8168245215421E04102898441A1814A9242830412E1
-:809D00004130142C8844F2884900418982044381428204286041AA043082612092918668122D422849613830824051689294128F2122C43C29010010410283D242848192844508240024C17088086C011819011088421B84084084112861A1400210248884126446184A22220160244002504A438C0448121C24058812288A4408A882812E
-:809D8000C0448F7E0441618B211D184847828127229B436129E2A182B14C68411D288B926D2A1CC142188C4EC4CBA81912C6648E12424D211642148832322CC3986731848A8464418095431783211829E442784438184429A2818140D2950718000012220028884888202411222124C281C0212094444E2125C22422508692615224302431
-:809E0000304415148262148418484AA948188C840820482478489454BFBA0B425C21021A92212B21447022B288017085C2942E428E2C83242204122C02A2424B41101381B284F4241222C23B84C312B414942446E42108591134310094002220A22400872484FFD90F160880441402BD22208404484A9148884001148841484042222241BA
-:809E80003264C230884724124400241A84180A008813CA48486212800486C88412C042AF6E040080C21818181881487028B2188804B04491154A5A41004B85682083E4410260118800221522A8812022062213241E020088A0A4282800A082446FD902C0281CE454214444081825048800224B48266282188C82F52241502C2C1144638400
-:809F00008724904844218B286041128D642D2281C0428A5442304180889212272A8143840560821828DE7C30828041011A4461444218286284183400444888C01483421123D214C141221AC42383465428204214E24142081C08844426081392121305822A0890B81A82C489DFDC071C06284342142812CA214928C112984C82480442C1A9
-:809F800062882A04685041890A45212228D1182C211A2288041512A42432234A0814844E21884E382311148406891808CF55051211487068022518119221C608004E1C91420049614200416E148728708422411806284144204209448C31128001200CA48400818B48C1448048F6C52F00269418841001422A2131229C29542120A218280E
-:80A0000018B044031514A18440024C0212368104E02221F5238210811A8105288836020020040028C228A26F9D061D2818481230241CA4121100463421894241198811EE880181A9C1884CA114896882880060114A8141081A044825880228259842445AB8120246186888A1240021486F9843E112665A112887848B2656F311692F31B3CA
-:80A0800022FC58B866D8828174DE59518F4BFC15413AA753BAE155621522B09437744B145752424EBADEC48B38624A7842F414328D142AC122CF68F683831ADA73E4842218C1124AA14C782BC88B4A8B420048AEA94F2AF81A36100138184F2255138F821152811F2532221AE9167851C1D4EFA88CB26A32C4DF14C2C46D182E142F54F23D
-:80A1000042A427123D25A7719E2823E218B425B152F412728E365F23B182F8852A29F423192F818885B13CD328F81AC1283F8AD433B4132BE3844194244F84B482AB92528CF299DF245AB11D33385FD7E441F2141639F26C16624D148AF489628B494FE831216AF24418CC51CA8E8C4B242AF48C68DFA8F4A44346DEA8E58AD622F4156AA0
-:80A1800017438CF2248CC7C823C3A166FC32814F61F24C44627E282F26247824B461E21FB848781818F84A8A8B224F84FA52888B2A47C28F899248AF44C4E2001484228C04004840282208C021841C02148246012820044E243048888100304149180119941419041F810448A041344800000000448F334AF353515FD5A3314D4C97913F8A
-:80A2000037B753F46525FFD1F54D6D8D388F31F273855BC89F18FA31B1DBCCDD2B3F85F431391F11F9682C84AF91F842C1CFECF52E4CEFE2FCDEDE7F176553CFCAF2766C2FDDFEB4B71F7BFBF22FBFF2F22F79FF54F3E8B11F39F5B2A3FFB9FB96BFBFB7F773616E461F1CFC82A2AB336AE427F7F6966BF7AEA48F84A798EFEAFA85181411
-:80A280001F17F5357D1AF2345C9FF1F35B7FBF94F6577DEFF3F7CFEFEFC8F9983B3F54FE85C1DFBDF8B79FBFBCFC1F3BFFD7F5B1192EC3D7964F82F46AFA3F36FC6FFFE7E2EFE1F7CFEF7F17E573F8D7756FCFFED6EEDFDAFB81B13FBBF73FBBBFE2D31FF5ADB11F3FFDA1A33F3BFBB7B3FFFDBF72E664E6A8FDC8888F8EFF48588FA3F7D8
-:80A3000052D26F47FFA88AAF84A688AFAFFFB386347F55F31474CFC1F31C348F85F55557DF55754DF743517F76F68AAEAF31FA53E95F7CF49B93FF7ABACEFC2D27AF85F11D991E91FFD7B674D734F1E2E3ADC81F93F7354BBFBDFD55711F5DF4BC6F6F6FFAD2CC4FC3FFB5F16F6BF7AF2B3F62F37B33FAFBB1F32F26D2BBF1262B9FFEFE93
-:80A3800063715E321F1DBD52B53823F664666F6EFEF6B88FCAFA6A58EED84FECFF72ED347F45F71D35CFC1F37C343E327F77F77F7F7FF7F753117F76F2EA96AF3AFA47C95F7CF4DF87FF7EFCEBAAFF73F37B58DFDBABF2FF96F4254BCFE6F6E3C3BFF7F67B3B6FE7F6EBEBFF93F3F1C7EFBBF6F6EE6FCEFE24FD5F1BFFBE37BFFBFB2612CF
-:80A40000FF57F7ECB51F3FFFE2A3BFFFFF636B9FFAFA63715FB5FDC1D9BF95F1E8F88BFECFE6F662E2EFCFFFA8A8AF87FFB8FA8FAAFF1E1D50142002418445425814602240A349608864504892008D24001144114C828192948028949430268449018810840400826089000081A024F0BC66E018B1110244803622008A324216A884842FDC
-:80A4800044289132261812A42432144F22C4812E425641488164512CA4292C44A4828224448014A2412CA84842198288D4128104484654842812897284F19814D022F4112487321F4132481FC9364A1D24AB141D24AB961F88B24A19B54A3924AF147BA4F842B1478A2F14F9A4481CF9244A4EA14FA264154FA2E45DF2224A96C5CA9E2433
-:80A50000ACF4D1244D421F49D228F89124C3F49164A3F4916CAB141D64AB9419F64A9259F44A914B42AB9443B242792498924F8284F9244A7FE20725FA11648732CCA412CC921A1D242B141D2C2F567881BC4A9324AB94412DB147882DB1478A4E3163EA14D9A4E514FA24925E8184DE252A68593CEC51E2227CD15C241B618DC21F4932BB
-:80A58000241B4823F2914483F21144AD861FC1D6229B64AD9149E4243B144E22478323742688E3A2F566CA00000000008200100800000010021800000000000000000000008002000000812870D90C31222D24181F842213828401D0821521212192184695521C628118482A54284521041C9161A9051A642DCA2222028321A812241A729B
-:80A600001184052212C082100258004888485FAF0642430841445C7414F826128145918A2418C33C48126F1A2472A8C44246813484442A0415268448C484582C18CC13C091285C28521240216C381B58C631C114484890228328444C6811841F634F32414604304D1743182F4483016788A33133C39458287B5847364F8A4562B51A9484F9
-:80A680003E44AC621851481E811D264DD819A481A3FC4A81285E812819A9281C031C11C19169C4211B82148221008B18502884A0413B3E00286362412248E1105A41800492209128001B420042201424140248802194141A128202C4244082B24489C4918AA4142084542222424844489884DF310B142800454134421942A24826114182F7
-:80A70000044185E282D47801281349A1480081604126880244D8442A0141E0229941C04826827442118128314884A8920042A281227F6E46D142C1121D146C81E7957218F1421445D14822A9C18915FC46830019A92C1DE49D444AB2382472C184C666D0A2867112A2436A18A483257414C2338E324C3438221A92C4A286288CC5C11CB8D2
-:80A78000129814A9D22CC244874A526883F8CD9210821241B452723C024215C2E8111B4910384261848B86AE44222AE414DB81024B4848CC46923421302226E448E44822C214142B822B1A4E18C04845E228B44138C11A981183AC186CC188C442C4A28CE4A2D89F044D1116C214121564148F1491374444B860852D448605901399F1833A
-:80A8000044850552AA4481022189B428B12281A54812122741F012241847241982A2212A8C420848C211A1A82A8152424AAA4128F0628280024AC233811400897448B421D112443412682125E41411193821C9684263023D161F280421121A4291142422A53142406144848442424724128C5242A3E8A4E222887114021A22314880F897F7
-:80A8800034002631482142C4841321812248E244488102302418004A0221A183210AE2402124DC1214C5148344383228200188218E41144C448402882B248290422C9B24288DCD0041184022C24428374229018C0187481882831502241A8431411C2C860200100284004044050048222501008800008178448800811F1F0D40B5188272C3
-:80A90000487221344836D314B62CE128314129FC128D12701A66128D118522C1946257282C96253C042B2C182381D484092D215C41543C224912A84126823442237D28A248AD8489D422AA81CF22A14A6CA2418C972489D24A04A688423211218441D0288164121608602482424B41004E212E48542A14488A02001C024229445422001356
-:80A98000210481481C4844110100408284218128088AF177AE80A412901462D4842250481343781874816883184889A1618C42184AD8A244CA212C842252C185B424848802618AC181414C782894B81A742802109A222944D82214C82288256288423287244FBF08008032114212A02411422014441214042094421C24442102400C721C2D
-:80AA000048221281420229220112489042A4A868841E245847812C1404481094824B826FBE0FA215D82402228CA11615444268224E2324604C50412694A216A1252840314482544A98A22C211102212128448129724204211021110842843524840246D248481228048B7A6021411011A8242502A126120841891242921810414409214956
-:80AA8000521847248411130184C1438104800282122B4819D1428231285889848102A302842006282229F95A6C1044460154184061441860111830A81F8186F782178842111008402C4214042924812402807832924822898148420E2A0834100A4988B28C44F284281064447F59062412C0241220544823821457482188241088048444CA
-:80AB00002E4840883312242C420811428AE26854214422C80028688B42624C42C694814C8116048A249224426B8184283FB40F2784C0181341022501008100280014101802200411111C24C441844428608141004420481404124800290518C0421200120081AF440617428A9221101C2582123432121A02441741542262472126270222BC
-:80AB80004A43044342381C2001614901284965818C2A414202442C34512A214838818A028CD882328820E21804DF2A052558184905C6A22894813041464264A419324248241113044150124129A5422918014242A3E114118262A4904441B9225884418019C884806A4224453844109124899C1416723F054B2286062F42E228F143A51B2A
-:80AC000025459A466F24B45AD612E185544336B434C4122FA1F762DA4F94F53961114837C43CA4C23D4295F126554AF1484ACB544F64E429D441C2422F22718C6D24C71918C3F52A42466E29CAF81242B9AA419F94DC887226F4C4126BA81DE82AB222D454FE2C46EF514292425B2B9D11115F43F42C4229F4212566FC392126F87928E5C5
-:80AC8000B48CA84417348D245F16C8248B2243B46296284F32D48AE234E252E28CD281D22C7213E5A1B2224318A2224CC292E9C1A45E2C3FA2BD54321A2B763AF188B81E4AEB183E34234CA8C28B4247624F88E98C699CCE288F824D6175AD194F43F214118F94E281F12819A12CC2185D13242C41FB8EBBAD145F974474915163255C88E8
-:80AD000046B918726574177C44F826468B811F81949427429AF866352652464B8D2B23AEAC2B52EF2AE84842B42557C8ED6B624A415E264F63F448C2AD2C463ACAAD46CD243E121AE98D0700100400410040022482000020314811102214012014022100118811699841881914140119041904004818800100F02C2BF041663F93F31828EE
-:80AD80005F11E6297243F2162E6F4656511E254B752B673FD7F54241BFB9F32617AD113F58FBC1811F12F26F438F14C6483FB3F441491F3E7523F72FAB7F37F57277DF72F34D5A4F62F288CB7F72F244445FF5EA31F335729F21F32B251D216F227218FE27276F14F468F26E443F5CF4CAA9CFABFA64B43AF1BE9457269AF12CA88AFC6A89
-:80AE00006A6F884BD261F6737FAFC1F21175CFE3F37B22FFF1F26E66FF74F46F753FC5F562623F94F64E47BFF9FB2262FB313F5AFB91939F92B267F44A69841FF6D7F1F469EB5F16F265233FB6F47A7F7F72F345636F6AFA88ED9D2F2F26F697ED8FF1F397BA9FE9F3B3B7AFE5FF6723DFF5F66D2FEFD4F3CBE3BF1DFFC245BB9DAF6FFAEE
-:80AE80006ABEEF46F2E6E43762AFE7F77CD8CFABFD5C5EDF6B0B2F64F41757B5FD35155FFAF2633F8F27F76767B7B6AFB3F33A3EBFB7F71B3B7F35FD97136772A5D1BDF2DBF97F57F77B39AF967621F925376D695F66FC2767FFB6F46F41DF74F51F57EFB3F1E6E6AFAAFA262E1F76F612E7DF29F33EA2AF71F8AB27E788EFA6F73B17EF3D
-:80AF000077FF7B7C2EF21FB1F7DF5BEF9DE969ECC6FF246E6FCCFC741AAAFA26A8CF85F5E8FE7FEF4AE265F73376BFC1F37134DFE3F37B77BF35F76767FF34F47F71BF87F76B63B5F95FD7BFFBF93C3FDF35F3AFABBFAFFF6F6D7F56F468691F96F46D6F7FB4F46F6FFFF2F66F6B7FC6D4FDD17FF56C6B6F2EFFE9EE2FE2F26363EF59FA32
-:80AF8000BD2E6FABFBF87F2F6FFF7FEF6F26F37E76EF77FA7B7C2F2EFE9AD8CFFCF5CF942F6FFE6ABEEF67F3E6646F63F1AEAC6F86FCBCD8CFEEFF851DD01201650114842484144002344874844C328144400489028131813181292114261402219014846D12844D821241160884241244C0244004204904DFA60F6924011A225441630458
-:80B0000065C24889A1412364814A088D11824E141658184842418044A4428744593418219A824114244822086829C14846A228A041888E484644082E4829D884844808D06D082CF41124C5F21124A3F41124E3D441B24AD141F24A9319F24A9253B84A3924AF1439242F147934F84A914F82C4914FA2E414F8274A16F1244AD6E1A26C598F
-:80B080002DCA9E242D4A1F49C2421F49D22CF89124AB841F49B64EF88164AB141D24AF249961AB9459F44A9243B24AB924F44292478229F92448B84FA2F4EE19E022F411648D421F81326A1F41B26A9121AB164CF26A9719F24AB253B84A3324AD934B4B8F343B348F143A2729F9245A4AFB278A5EA14FA2641DAC68512DCB8F49F222CA98
-:80B100001FCD62921F41F42EC31B29AD811F41F626811F88F44A111D64AF72D941C6B15D68AF3439A489B824F442824D48A865B84AFB245ACF44424128884402002200004828000000000000000000000000000000002280020000005012F0766290142604121285012531121C1208E0114488B2424184048591484284237A241258489DA3
-:80B1800014268A311429E28862411218159822121594412984621A48AF3812684C828C9142282AC84449CA24A0245FCD074213C989316048208618B44253121A081842282722F06883182843B3244408242282414D616048482486041A122104A3D11C2A85A4281213C8112311D2185184C18913CA188641F8599CC0145B1E869111124528
-:80B20000093D4288244F8215A312188C21226742421B4A2D1B8449B73C948A8602285358482D715721448B2CC562414AD128422114F54218378EE0143A249B183598942F2853289951484DA84E186F88B21C42B112F6E67F80048502800828181D24008819044825022184A042002843125886832142048A021288C01128184041A416E088
-:80B2800024888298412021240243028048F82363004C02000000008008001044012042042800400100442008001E24422004182800000020020022005F5202301100200243924A28A3648281481880089289A2814111002880228812112841C2243012850281548422408288628413A48490882054841242188B24AF7B0E701401002890D1
-:80B30000244224838482081800441C88822142012002400114C014244348028422423048281222292822C44100822850481248C0482F850220020000102A02818442008220418818440428002888221008200218244911581400000084200C848004802281F2D56800400100241400130800708208800200260820424488028C08224F28F7
-:80B3800004880021807444022024088100820082128004F09D21104402412564A14260418189021290421180914820228424021148444821244C81211244041C01009211008081140144848120240100AFD209004400000000000018200444200220042902414222000000008002C012402104188044240481480070A708445014412189F5
-:80B40000814441049B82007042D281084A21442482C22822481D224B42412248A63814184BC24186042C0180E4694401299481188113014E844442884A818504F0DBC300100241502280410880012001902800484200008446140221282400400180028001802404008184400800F0A2AC0000000000000000000000000000000000000074
-:80B480000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B5000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000A9
-:80B5000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000006D
-:80B58000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000ED
-:80B600000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000180000004400AFD70F00002044321800228114421288802802400180020028400820020088004211101408001824888242000080F84B9C1004410020218432888004002F844104C1424840084645
-:80B68000044C0410240200901140041318222101482852308A4142440082898409B06D03440000422483012012482124110260420014819024800428C028002240014C088622041014882244824986882804001280F837DC0010040018482286084800E0894424188824040042400410040000180040011C21014820018480440420384850
-:80B70000820097BC00800100904181001A54328430146081001001009028221200A028222800108181144C488284381130814098329098A20080F4A3D2109214C1D0C38236384149E1118434A881124248278248C9EC4855C2478142C0244A524153914D8A92744B161638562981B4142292126215EC288184E418E123C44216524865B135
-:80B780008201234214C828228145F8D2DA0040082525C41848181A0412A483210480E4488418260110042816744804421E2481612142122229A1146021808425A24124AC48862811028328224228F4D83510C2144C018982225241C111428C1E03305427828311B8144458854220A2424569121381BA1422A4384AA321C024108172486523
-:80B80000C8830433E824199112154431182982D24889120810FC6386604411424014F9482480031E48184442298261A5004A2168242E484A68422038222A112443015024588D142328421C898216022B418882691A84A282D8128116C4123A84F9E472141220924110442242C114206248441E228008182221A414002A21C948821608143C
-:80B8800080013048002021048A254101258484020000882441582FA143021614A11248284018042200818181444604002A08144844110024144644140800C40041818002282628010021444824908881F08E5D90140016813421CC16C831183AA4218849142AE14904181888A8224E81464444B248A2121823014484411818CC08844D1178
-:80B90000682842185E21221844442C22BA440830168E1847812CFC9E3890421741268112444C821244140840C81284859244A042218C744801282216018245C8214904189042442128418481482B921062882D828A0400124A4188084A02CF58081A94184503280012811883A181206C864C06121024E888C64A4018E842246181E082242D
-:80B9800041C43290418062884078410219041B2C10411824B228E8C428C48C004301CF2A0522392283025028441081020044190142C0114D411341D42844E212042A0444118E4884271868004064886822432482981242001B844442004281269842689D662440041E44104184044A0166E1284142C2138B184C8813484284B524184806DF
-:80BA0000450822C4241EA24644044C18813241812368228E188A82A282428D141242292322A2C24723008CF15F9280411818B128C42466C2227826440189442408622C222C22011788A0288816081193240194848A4401818180D8188208421425322814801874422208424C2418F457E3200C85D4840141311229040093E1C8810A104425
-:80BA800094442F8834848840421414090022441782006083282440C84866010000612250484628126A82811CB46403100121CD1126112892194C18E841020041811A041B211118262284041149A11843088A2181156888004141244502C181A014C0814E1218A0824480A1844522F27A3280823232004800402826A848467214A848235844
-:80BB00002A1410541851C429480128839658004E818844808908200482101242B2C121140118C0824100A849F82C4750244311824405450114896248404121948212A012004812402484A1844C2481316400284D222800241074280483220C848644D224C1CC90288428D02842F83ACA24848064121820426142468261542428C0284E2281
-:80BB80008E28C684C418282922884588183121111318D81246844818E4182468144CAA8490824321E142081A262A04400249181422B8D2092CF48B2D4732E7429D2817448D62272189D284BC298AA914F5F684841F96592A2A95261A51131F82A598212672441CF224B183F1D464D1184E44DA0C1034812E8417C423B26A58649FC5D2C2DC
-:80BC000038812C91A1C6B151D9461E7AAC768462822D588147194678DC4D12A41189E211A44322716A31628F54E185E11AF698C24AF86A1227299AFECAAC9E519D254FC1FC58818F35C688874C685E1493F1213415A81D1E88EFA9F92325ADC446E248BA28728CC8814E841B68AB8E82B072A52C1893F182652AF1B4884AF4284863B43C7E
-:80BC8000F8622487226B82EF9F082B3747222FC1B141D354D11462D259F215593A12365115A9588CD644E6867114E246B864B4C8F1862457C2CF6CD682DC1BD894E2C4E49CD418C129CF2EA622CD184B2E571A121E89282CF4886A45CF682F12FCF8221CBA22FC4A494DDC4562254E742DA84AFA88E44CD284ECC4FA8874DF590D00104410
-:80BD0000088424008C24022484744001000028214C120180820821001110011528120111301120088228820024928100CFB845E26171117F1DFC196BBF87F561433F44F64A7E8F96F18C8A6B9E9F9AFAC9C9BFBDFD9AB8BF29FAFDCC67A43F16E43EFF23724D611F16F5662A6F26F6C16A7F25F756D15F1AFA11291F11E7C1FC86AEEEC448
-:80BD80001F5BEB61F3B2B54F5BF92181DF4E7A4EF743473D27E5FC44773F35FF3372BFD47811F312716D12EFACF96A8A2F82E882F47AD85AE781F176485B64E061F231779F81D371F66B595F76F64363AFA4F52A185D1B7F5EFBF9391F35FFCFCBEFE1FB8B22EFF57DCEF673514F6EFA2F69FF91F8B9954FAFF724627FECFF5B7AFF97F7F6
-:80BE00007D311F94F219718F71F5D636AF96FAB9BD1F79FBF374CD851F12FCE9A2F764AF64DE73F243C37F64FF56D62F16FE68EC9F71FD53576F25F75E18CFC2E886FC644C2F6FED83F1341C6F86F5C2C9241AF33565DD2FBFB1F27F4D9FF6F443672F65F73A3DCFEBFAF2F41F12F2597AFFFDFD929AEFF2722EFEBFBB6F4DFDE1E27F497C
-:80BE8000F92F395F16F1CC9EABCCBBE65F17F71D5D1F1AFC7D6D5F5BEFFFF5725EAFC7F7313C1F31F33674DFC3F3ADAC4F7EFAA6A6AFAAF88BEAFF7EFE56562F6DFE5352BF9CFA5D9F7F357522F2EAD26F64F886A44F21FB5ED8EFC4B684BC24F53F51F042227F53D3FDF25B2FF7D397F27D256F61D2C8D2FDF3E3F51F16D799F54FCB6FD2
-:80BF0000C7FD7E3FCFE5F5EFFF2BFE5F7FFF97995F9AF9AD95CFCEFFEAEAFFD7FE7575DFD3F639519FD7F7B9FC8FCFFF7266DF87F6F4BDDEB26F43574DCFDEF8E8A3EF6EFEEBEB6FF8EA2EFEF6F63F7DFCE2E3EF8CFA5D9F7F35F5A6A6AFAFFDE68E2F2EFEFEBE2F4FFDE6EC4F2AFE2C4CCF310100471230224826827424012049C14824FB
-:80BF80008AC422122813992813A9248012724814B148928483342481292984082A488808248C342400001214482C82C424488F440246044D5FB082C5242D1184C9811648A4129E488B82004B4921848F4411A42441A04844848524024112115E244846041E24604141302C48412846E288A41690128E484443918882254488211B48F13B1C
-:80C00000A6C0421F41522C1F4132481FC1724AD2C1B24AD141F26A911D28AF2419F54A924782AF543924AF147924D812F924481CF9244A1CFA264A1E254FA264192E4A9E25ACE449D2A2F491242D421F4952281F4932681FC9324A1F49B24AF11124AB9419B24A3985AB9443BA4A3B242B944783A9F92448984FA2F4FB3790441F41562E3B
-:80C080001A26E44132464CB24AD141F2229515B44A1BF5429122AF543924AF147124D812F926481CF9245A4E152E88444FA26D592E4A86C55B9E242E481FC9F2244A1B698D421F492274113C4C19B24AD141F24A841D24AF243385AB94828F443924AB844782816B4289F9245A8F2805000000002440010000000010480118800800001418
-:80C10000000048000000004400000000002128FFE2048061A1542991254D1A263C29C69188008C2424328E45C134A302814428100C433221282644B8642122272471829A84C24AB184C44823C422802A014848301244128022E8A2F81A93D024768102D018741222C452582442222C185428432C018118BE45448B2183B4A224B44262841E
-:80C18000299C48299444818991828002504A8742B449929C428B84242CC48125A82148C3F41228A684894901BF6745D1246414AD12412C44D3247418C6511B84CB48202A1498448C482193384F325D8485B418B282E2C82496482F149A682D4415C8448B12AB86484A318A21E9E444624C49246924412AA842D0822442E244B12EC11482A4
-:80C20000807892F8E48620220111AD111E248981362810824252844622DA4211546800808324440243028092448B212001286048881658388C324E288B84D0223181A0414284208A210B224F710F00C1444184428C84014A91412450121022082A44E1886414844A02000000800118112018044E112818A0140082888444844484A816C8FE
-:80C2800024F0892FB036F424112502A9D426C519641FA214CC892E8A845E8CE495B44D52585B5285A21422C11F4418E4423424444AF28C621F41DC48B2A415B222C4844351418F1271115814222F34C1448F628DC8814A418C919283A2E1324E161A841AC8881DBC244422A16424AC41D148E431129811A8C0C8106494141C1688A582C4C0
-:80C30000478C284A8202E022CC8122AA84B142423411541B188514B5113443428B922B412005901241838883A5388A1128F8FDC4A01617414502466C444E18D0824434C893542A43511E353826C3C8144A52128C64141449441444A442453854C44C11021A480489621180A22169C144821308C9A8818968823A44449C4226C824849F62BB
-:80C380000B11001C4498462800228484302C243212642A11B811D22802708222010080094D8882241088A1184817815018484C22611425D41A9468481608C024521848ACA9242004812925048D428126420114446E1112E0420C1358248846428804122C22E242C42822001C119111811C88C424821866820282C084418A928880A11A1826
-:80C40000882C488CF7CBE7604210818203D041621181252125088440982880024144800214489452604458232482081001228210C8121008801112E42802424008F0B59D14430681284E28418B242D251643511283014E151823B31CC626B285B4119A68C1482C0A2C22944483A718D0A4A18426611860181C187488215829C032121784EE
-:80C480008865C94823C418A62269441A9C98CC94686FEF09144033112C810484228C12984188848180484821121204240014228D21809244C2189012802121A62118688346840821489886482481220300826F36031622D1228241AC1441283481212110E244025179C14441430C86086C5824112489B21138842C84282482EA4224A82414
-:80C50000484B21852282A1241628CA41908282302464288820EA22C41A808404200112901890341908C221200111838881044826A8424AA1211EC1222289A2218E248A140426180184284214416814181584222406814222814904DFB4052002463234904414416288221810CC252F848812821452182887114009008E11C08441105441B5
-:80C58000882664888514016C4804218400478441166821224512C42418416BC14018342954902581C4285181884235840880011442434231A44621014384344846810281114A12014420B8133441890400A382021082A4C18489819848816DACA02884168801288B1612B01808484A0180A41288263414604218212841A02118412800AA21
-:80C60000B138280860188C06439624488822188282108402A02868427084F3C1DFC0191512143141441148191472AA2291218B69914B81448934482844128744488591424C0185018001008CC124111001823508230425241112311218214B812384012D84F04EAF24C44B122C4408422422001A0484448E42222082C8822E888C9882808E
-:80C680000829042912328C212B4144442186211812C25C20E818624118C8144D119210A482301482898112382F24661462116411291101A9E1140B4AD24308111B184E888C3811811813C4469502930284F028461D184668C817A16014408CE26832812791844C322264842129582416384627416288472422A0436F110B151888C4284051
-:80C70000D12262D5224440051C220114431438511782922531A458908543240890124E2148142D1890418111624424881E8283DC4127E421122112682860218143381A827FBF4BF124166B1B2AC22955722471417A58F83112476D83E314F471428F48D849B662DAC8E442B64C7924ED15C7E89D542F8CB8A1C42E482CF43811CF8DBC2118
-:80C780007EC29A3C1CCD244BA44D858FA83A281D898BC79F45D416EA9C36724AF19A88522B991F88E68261846F4492582F49E88C91148F1433D85FEF4892626C52F1412F95C1248D514F42F34A281F927542A69A2D81697444E978E12F7844EA12F45192874AC75E414F72D6187A76B112F1143C3B8C2E334339282F427838227C8194415C
-:80C8000013D294D42CF2852F2B1A1FC454258E268F22C8623D8A45C1862CF41E76A6A2884B461EE48EA84D884D6A2B417051D189B41AF15B164CB251F536243D4154A9EA889B238D141F34A19853D115B19959C18B486D881B11EE8B9961E499744525C66A1554F81E74DAF4C42CDF33F83251AA52541F28EA4684D1B472A8F2328449FD6B
-:80C8800016681F16C17115D616719624A2916F67D228732EF22844BE442E841DA10000224800240084241260810021902A112011180200109812424312981200100400006088204882842208000012F0B66B242257C5D7F14F72C7415F57F73B3E9FD2F351533F3EFD5A583F16B431F9CF8D3F34FE3B398FB4FDC8CFDFD6FB25B32F23FB34
-:80C90000A5A15F9FFFF5615FDCF426633F32D2FFF292E89E91DFD9FB88884F6BFB3EE15F1FBFE17C8145F7236EFF64F65D359D453F4CFC85646F63F366B21F8AFBE1D17F79F89FFFCD488F827322F262C84FCFFFF4B48FCEE24DFD7C6C57A4347E625F57F719136F42F324615F57F73B3DDF57F559737F79FF5E781F1CFA25A57F5DB9D39E
-:80C98000FD7DFFFFF7FFFCEF5F5FFF9497EF67FD7FB91DC17F1FFF85C55F7AFE7777FFF2FB82E27F59FD2D2DBF97E72FFFBEF5DFDEFEF3511F14E43AF223215FF6F6B5A59F1774ADF5C5A76F66FF76B41F16F241E37F79F19FDDCD488FA3F126222F86F6E6FC4F6FFF763C4F4BFD2C3E3FE6054CB113751FFF26362B441F15F52B6FBF5349
-:80CA0000F35F7DFFFFF75B5FBFB6F411B19F9CF8D5D37F57F7CD913F5CFC69BF7F9FFBB5B96F58F9D5DDDFFC7DA4DFDFFC2163FFF4F617EFBFF3FDDBF7AFB5F496BEAFA9F9F7FB3F5BEC58D4F8F22B2FBF5CF279359BC89F9AFE85226F21F3DA9C9F9AFFC1F37F3DFCD7D97EE88FA7FF2A2E2FCEFCF4B84B9DAFCFEB8DFF6474ABEE242F3E
-:80CA800061F71755F7F36F63B332F77171BFF2F77B7FFF65F797F7BFF7F7FBBB7F35FFD7977F1DFDC5D7FF5EFFFFE55FFDFDF6DDDFDBF9BFBDDFF4FDEDEFFFFADCDFFC2567FFFEF77F6FBFF7FDF9E76F77F7F6FEBFAFFDF5EF7F5BFDA5E5DD2FFFD2F2C868DF5BFBFDD5DF5AFA65A62F2FFFFA9C9F96F6D1D37F7DFDD3D84FC6FC389AEFBF
-:80CB0000E3F2725C4FCFF7D8F86FCFEB8EFE6C6E2F9F0C22501484004302228A4421088E48141348E489044844504813D848024E24318F4492154AA282908242004D81D012888489D4148804004840088E48002028042FF50A27181741211123C2242714844E1317C9811AD21818140A4A1B85628889A14A85C1484E8111D02571885481CF
-:80CB8000422668444D18824014C428472215C882C425C224181F81744232158148AD16324449B442E182C414A6A92EC0421F4152281F4132481FC1324A1D24AB141D24AB941F81B24A19F54A924782AF343924AF347924D812F924488D914FA2C4814FA264114FA27498E1A2645D4FA2F49824ACF491242CF49124C5F2912483F49124A3C4
-:80CC0000F49124AB141D2CAB941D28AF245985AB944B42AB9443B24A792498924F8384F9244A4F91082CF41164A5F211448B141F41B24AD141B24AD141D242F91124ABA453D1223B248F3439248F343925986F83D418F924521CF924CA8F11F8244A87192E4296F5241B83E922E4C9F2245A1F49562C1B2983F49124A3F68124AB141D2CF2
-:80CC80002F46D9C1F24AB25D288911B44A3B24AF44392429F3264829F8245ABFDB08004800000000448002000000100200884800001400001100000020010000000000004F61072B2125424A628414A49C3448152468818144CB842CC45248448595188A046240180846086B85E0A288941241A028C1A18C918A844486483898488E4818DE
-:80CD00004598141E44C48C24B24C1274ACF274F320A4280060C4236242412326218C01C02180220D4C4474142878C4D84202814C2118888494186C1AB132581A98111B82B024887824338113B219088128468822ED4812286118F0C5B2E026A12484805461D058566862824A61C244CB484A22049E44414781493C14235128830A844D18BB
-:80CD80006088118B2C83F12894345A18D86849E12269884F82C8845DA2478819E91A8518982483C47447894AC222CC92844F21F858C110022502A18C74280242158461881800112D122A0415280481AAE444181408422C684548D0220461282F12088115080084148C12C84818844C01424788811A042698C70028181234481800101A4110
-:80CE000041C891842480B881A4144508400142150245080088A092112184618220A18200112486288444022C22882811083F8649922411A3D2389228C5522D8D1215E282A4484E8860184D4869A552453828456282C0488144C02A4C32292994AA493AAC9014711226B624E18B742CC318E8741B968E1BA81788184729891AF814881A14F0
-:80CE8000F81448498882F869B9244419C218859228461A3118342E484E884611C1888734C9A42100C634381018480189D45212984E81448C02411B82197122D448D1488402D824CA2108198889698284214A22E8C1C41420F834DF204282E2125121444D182121109288409194184225BC88423142458804448042C221248A823A848216A6
-:80CF000032140023B29272846B81221F48C22116BB814258824D428A048F48612181888889024FA4098C14448204468134489C942C82464104283A2808111A16C388D022081304282822224288271861834802704428815818C0821024D8388832A26021A0281698881881CFDA05150883248302842622811112482C840250842281228069
-:80CF80001202128E24A01850121E24189440144A84041098128844128362422321014362861A1248D12401883F9309A0211145424C041800930127381148856144218244820091418423314C4004902400001F881102230849921A00248441C1848800E01802009F49081984436A4384464578286294248213542248488B8243483881499C
-:80D00000121108178844116B1289A61250123AC41684805822960A478420D878A3814180928A8D112D142B2849CA282A91888E188D141282BFE60B4044016302421A84E1C1D21841D818180113612441281E48292A8842028C044182438212A4282C481404450124928502818229414832848184A0412122288240F8424B201501840020C0
-:80D0800006222308444618226288245282302A1A48081041126182111676141844A4288691A85CC822282D28142D84282D2184818E1428C44782182420F28A1440F2F7A11004208104411602002C622250241354411E441112A0489141C2612314845212437C82082B181C4102612C1188058F4C0118C830424A32824218288222A9818410
-:80D10000C4886F2F0F8006830418418481850482828189542A3032303433840822244018C882D221822424886062142414C718C2481C7414018D21E0919448526181292191882021F4F4931044249224814374623944008501844CA28244524068841A4A142254424A022B16003042B0C80146814182820680923890282112282A21A242D3
-:80D18000801428022CA812AFA204C2189100241840028221482908008A9482841240A88482872411172628116024814784200440843C81224014021B4186029338828A140242424480F8B4DC0022211846B824012183A4428C72680450586C0449C2143120E144822224A88484CC04426044204446616360C14C44453D92460480041028C7
-:80D20000C1568B128682A8844B8485F2B619201244426422848441C0948091814926889314C02128414182812828410049820210011A088814008001A814C0113C0800404208812528B4FE044011C1221848D08212A2842A04211002460845023384825122201108884D4222111460414931348921B384219284224229F85282A22682A288
-:80D28000142B29212922880B00F06E7CC02825A2421428A14A013424648504283A24212898484665425233269811A082218D41897884015E81344A482898418618911891829922044646C8281141818924868405250C5FC40218A644F244244A741488717266942AF48382AF26512145E4E2F37514E14F641FF86C3B144F42D418F8822ADD
-:80D3000045B1A2513E3689748E7722D62F18F29A93418E1235F582BC3F12B88C73AC54859F5A81E265C361AD4A2ECA95F2A2384A79324CEA2C7798BA2238C847848AF982CF146E22249F12B211E182D32A7451C46825F24E964F84022942B2429C6A1E1C23F924D51D446B68C21366442F2A68648C724276A8A3A21C287C443E4423BD44CE
-:80D38000E8217A1CE161E371F411A28E254EE2E7F1211D821B2613F552C89DC3EFC2D424BD26B632B822A81147C18F2908BF1E064D445F11167228582A4E34ED6AC1818A32288CEACCF84AC8D348B2C12C72533A921F47B11AFB94788BC24AC4681B4489F647A81F85B4C586B598D5C1C4D51F43B4A471217284F863884E598BC247811BB5
-:80D40000DE4F1AFCE2188E11A9E15821E529B248B25841A8748F8C96C24CF4486A1F7706424018124192412A11A1121118138821C8238234502882200843084112211A92821002002110028800008200000000200192F05235141E565F7551D66F4253755F71F118546F55F4786B7F76B6FEF5DBD19F1FBD8CFCDDB9DFCDFDEDFEAFADFD0D
-:80D48000D7DD8FD9FFD3954F45F754543F12A2EEDFF2F15D571F16F875559F95F55541184B5DCF59F15C5417757FF9F9BA211F133119BFDDFDFAF11F77F5DBBADFE5FB91B81D89AF8EDC11FC43E24D224FABF3FCDE8F8858898B528FC1A555EEAA5FFC44E167F536724D246D34DD2FDFF1F11B11EFF7F63A6BFFF7F737352F2EFECAE8DFAD
-:80D50000FCFC9C98FFEDFDBFFEAF8EFEF56D1FFFFFC7972B73CFC5F57D3F6F6EFEA99BBF15F53537BD438D6F3F75E634F1D652CF51F15D5D47415FDCFCAFA73F32F625A97F1FFFFFF1DFBFFFCBD99FB7FFEDFD9F93FFDBBD1D993F14FE2C224F83F3F4D68F8AEA27F63A726FC1BDD4F9F8BA9FEA49F141571F7357BAFF516121CF61F13B74
-:80D5800035EF26F74B4AAFA7F74B452F2CFCCAEAEF89FDC583EFBFBF76F7E9E94FACFCFB7D7F5DB162F771715D1F6F6EDEBBF8484A9FB1F1874FBFB6F457432D136F6CF5DA122FC45C555F59FFB9AB3FF3F313433FFDFFABEBBFFBF7F3B3FFF7F79BBD9F94FAD9F99F19F811932F62F6AA326F67F5CAC887967AD18EF98C98CEFA2F5C4BD0
-:80D60000F161773F33F3282BFFD3F3186ADF75B43AF36E72BD4ABFB6E641F3F2F2BFB4F4DFDBCF84F4FEFF6F27F7EBE9CFEEF6FB7F7F1AA2F31F15F5213B2F26FE598B6FE5F5272FAFAAF6FD7F7F75E628F1D65EDFA1F1575D4F41F19DF5FFFBFB733FDFF3F3FFF7FFF6FEEFFF3F5CF979FF3FDEFF61E9FF9DFD1999BF17FD2C26EB73CF5B
-:80D68000E7F4EAE88F86B232DF86BD84F9C8FA1F5F02185014B0240141008C2422091648648164848524A824114C120111901183840118901430229084104488C14880048E48E08144A24864001A14285148F03375E01A443424304844A981D62E8186E98854228264AAE444014ABB149422824C41885A2289021E213F2248948450829299
-:80D700002D12860496582AC082961C684921161802296881818049B842688842F0CA49C0421F4152281F417248F21124A3D641B66AD141B24AB981B24A3985AF2439A5AF343B25AF3479A4D81AF9A4481CF9A44A5CF8244A16F5244A96F5224A8F59D2A2EC49D2A2F491243CF49124A5F29124A3F49124AB841F48B24AF18124AB9419B2F1
-:80D780004A19F54A9443B24A39242BB4478329F9B448984FAAF42B1E40D841965A1E2CA7241E24A14C364A44AF44E848B24AB384F44A1243FA481343F24893539A186F8AF44211AE1A87542E8A5E852668582D4887552D885E252D8A1FCC42E848D61AE448521A4CF64A818E24AF14E148F24A154CF24A9149F24A9543929A2AF44A9447B4
-:80D800008329F8B648F0A45ADF9B05000000400100440000000000001800000040010080040000000080020000005012F0D1FCA0413029D02AC442C048488DC2008A042C4822044841D186088C023022281B256869C1228825E845384292258261846441428D81442121830415144218A44143C1C818C242CDEA102508160181813C134948
-:80D8800001A60157285D48C02C42434838C2114348A44822429100288046026C02413083608898624A4831619842F01482448C48682C444C4205DF9C0F5625C42816934829041D588D41178461266142415784306C424884EC8468481E24C28A82849221244C82225418ADD4422B1450221C4C168C8D221897618B41D0248218C28C83E4E1
-:80D9000064D1288CF14481122FAB0900140084A128218220A88413D8220821C084412D8115088440825281522A2441A2282130268261128180088F14C8442480884431148504188244430248ED3C00106481000020081100856488882229A34A4A02836482A042541981120449281422880440044002421A140A4216880144491422123868
-:80D980009483C4481728344A4263114127348D462E114E117034C1482365184A28FC4126CCF241881D4891121D348242C71C442E422A945C1AD6418F32844B496B12635A2384211ADC4ABC42D821DD2438A1C22E9234002CE18A94184788AB18482220EA1E0729066711856424460811B09122A41488884147162D881B282B426E88183845
-:80DA00008828CD81224D227074A84218A6849492922C0485021827482B482D124682818C7342120818884628888AC4348C24F6D512141001164251241B1258405428141448899C88436284161921561489C448424C6414130716F444A160484666422DA4150244C88304196C48E6118A48218101E376145248A34128088CF8A133502844C6
-:80DA80002524C128418125A8422028813818120048C0141188B082271881843269C08448483C081D846342D44254481C814848841153122684911410249254004A02F0E83840081901422C8144D412714224716AE3C411824201442E48A304CC5484252212287848348241941044012142194821044041018281C4280018A0280029284497
-:80DB0000F2462E20042280312228002200144B488190861440828D0210040040181206844501245028504830148A150816824801165C82412128294A9814608B2044F42211182E486F22B148522A1E612742988CA258A91D4841645446F84E1219C12CE028021588B428F48269C46D8941805834174827224C588742852198145C24718151
-:80DB8000C21823C811446CC11C4D2232242A98E84C44B2C7032410041800448044B211541A498201290828A0848A5448584C0A100400296444A4004414106E4150819884211181804108E044280280012D8A80040048472481472112818A9248423CC48880A849930120242264884054822E144141D0280A002902008E1CC0728998C844CA
-:80DC0000422887248240182469422068248E48DFF20D22F0291481103224212C1421341282216021623062696412844543EA12552228488662818100484129A44824918A044C6848444481248A8488D42A2199888416A281283824EF730A10444254292200142606272A8480841C344482A5024C0282848C042362424829A18400230210AA
-:80DC80004298848400188D11114281881A426424860848224224F0BA7E003601268342C844138202894201414128141C022882A048282C94341445C241201848442C88120186143841684248424A09185304C2414229148A3414C8413F710F8A9412941441480021118120822408802141424758184414C6142144995852848AC29100198E
-:80DD00008218334290141E288482212908818C0812200D88852428E48A0F4C022C4208806244808448324181008882431811984122133484A0822051411418460CC882888504141CA848515C014A084041D2842114440C458A3816F086BD108212840214A02150821120880128224D2283C22822414428222283440888854204503214408D
-:80DD800001244001100281834112048118C0280021829FAD4C021400260548141F82840414141146A4842904453184828A22280810422224882888C145C04241448244490530421048220841860225125424A01414F0B53C14D441484562844C422124C1A4214C1AD8241218062004850448A44911891835881427646E16149648649280B9
-:80DE0000744412483238104104AF41289424462194844A012D413E4C286558847F360B4334817C51A2FF14F24424424CB158F2C4283B281F98726138456C4C32444F21911D4F8824F8A848A6D4AA784C56AB1D48D5FA3128CF51FD94456FC8E44BD8D25D65282EC564308E4D41EF45B22555418D4D842D88AF8DDAF47C62D184F1D64C43E4
-:80DE8000E1A17522F32E4C1EA44F5553E65D8E142D454F52528C9B22105BA43E2139D1510416D23A48714EA8A22B826EA12F9EF428278792457544E11A6692FA42E244C481C28F24298632CD8833DE2112D425DCC1BC11A8D26CB25E959423FDD842181147418B8889D8AA6D4447C55EB243C2C18AF8B3DA242E221AB12152542E4E2E4285
-:80DF00002E655F24E432742AF228CA2BC28AD46825B8D4B481E648E4611AD267AA241DE843B483DE44F4222529F2CE54355A828F21D98C64212B4A3C348293788A2DF4CA1C13B858C88923DC690C4883FC88C22F65C412C6B48E986882CE5887288B444F380200100200000000188218000000000000004190160000100400490841001282
-:80DF800000444004441228003FBD0A5F32F2263CDB335F42F246A45F42F221211F56F727358F2CFECB618F85F441545F15F59A98B86F42FB44763F11DB51FE8DA78B6C9FD8FC1D6F4F24FE66735F72E234FE5D799FB5F581CB1F8B7E2AFC48D38E846AF4252585FE8BC93FBCFC1B196AF2EDAFAF3DF9D3915F1DADDD2F675437BB64A789B3
-:80E000008F65F44242ED181FC5B272E3C6F7287445F2C1422437323F94F51D165D456F56FA2F2C35E157F5173D9FBCFEEF67BFB7F66374DF94F4CAA8B82BF44F65FF36B6FDE7EF68FAE96D9FFAF81FBF5DAFEFBC5D75CFF4749DF9594E5FF8F8FC69AFCAF8C8C3B5FC62627FD6F6898B7FD8F882CABFF9F53B1D5F7EFE9B97FF7DFDDFDF17
-:80E08000AF8DFDBA6ABD43FFC8FC1E4AAFE5D4EEF4CACA6F13F23632AFC6B638E725F55B55F025266F43F7353C7FC2F24E2E7D227F76F261673F12B7E8FE8AEC1E48BFA4FFC5C3FFF8F898AA6F45F25577ABB9FF18FACDEDBFD6F689CD5D355F9EFE69EBDFF252B93F1DF54F4D3F98E8BBFA3E3E4F69E8A8E82AF8A7C7B5DDDFF8C7C3F7CD
-:80E10000915F77F26FAFEFF4F9D3911F59A9CDAF85573DBF14741AEC65F45252EF84FD441C6BFF2FC6D648F24C5AEFEA45D223F41B51DFE3714FFD6E2FFFE452331F74F4133BBF9EFE8BEF1FB3DEAFFFDDDBBFBEFC182A2BED5F3DFF9FB3FF78FAEDEDBFD6F68187DFF8FB85AFBFB1FE4F4DDFF4F49319BD4EFFFDFDFCEAEFEFFFDDD65F52
-:80E18000E4E42EFEAFE59FB8F8878F7FB8FC9F5FBFFBF167C7BFF1F9CE4EAFE8F8D288AF81D57DFC8FCDEFE1F552446F65F5DEDEEF82B3B6FF7E7CCBB1CFE4F57E214001407826825434603284348C44224805449264304890282004442183941783941481000021842C48A81216583492C0482400846482801428794804BFBA0D2117418E
-:80E2000050418110A241E0481498618B8450288A044846436854494491414A588681604488861182C2821584082C484C41C482448D8140A14921864824784A224164832F44082882EF9E0D2CF4112485F31124A7141F41324A1D2CAB141D24AB9419F24A9153B84A3925AF3439242F147924D812F924481CF9244A1CF8244A16F1244A96B6
-:80E28000F1244A96D5A4E449E2A2F491242CF49124C5F2912483F49164E3F48164EB941D64AF24B911B24AB915F44A924B42AF4439242F647934D842F92448B84FA2F4D364E082E441F42A4216344A1F41326215BC4AD141F24A941E24ABA45B29A33415AF341AE4147B84D812F3A6482D11ACC5B54DCA5A7A24AA294FA264194FB2644DB4
-:80E300002FA2F1D12C47A29AD42CB49132489E64E3B411B64E9861AF44F911248BA44B61AB944B438F4428F2429416C8A46D48B84FA2F5E4F7008248000000001504280000000021800100000010048480040000000048002400000025018F28022C042831168444028186911148144135082830448BC21641F44421422244D024644E22B0
-:80E38000CE2446026028302194844714487048462424A84886024AA84112622A818881848DB43D4C12214808A984F12248135C212C851621BC41A84842444D5A8C82B18AC24882248A24A441A541824431A28C3248214724884C1201899822218B8354A904236441004FA438184A58234213C821646F6846D221244C48438CD422844499F4
-:80E4000093471314136E543B8442224F247144B8287823085B8427258A24A841C7144B4A284A38E1263848A378461231291D4813C4CA228CF4823C17444D884A38624482488B182E483A788342C2C116F112461788006022A01412833281803442482018084484281A84D9848402284904250229C425250200A02841100424440023042C15
-:80E4800028212461641242A014A0A4705E054D110011241100211904194423480388C0264828110030241081D28408002482200880897428821268481800822394442C0888A084869888F06C7880522128254429C442488F2164288E592D88423486F84192008E48F08844A012882C2414440460A4493242211D54139A1425154413C4814A
-:80E5000018112191C88481996888842EC42D1681A024C0844FE40C1C1121524214480018A0851D8880082D910030424C4C0180B442021524C284464226045B488E2124418098422E882941C18411C88110914C8CD826461408A28841CF1F052644021185422194422D4A172C158A744142D11A889482E0C40A26082A2108414100848428D3
-:80E580001092126049144416411421522860810087288B4888208819826C8484889F8C4D9248C0228C22C112D042C11110048908422840083081401432844441830150434A210A30422598182C048308146189611110A8182224414A194458C2206222CF9D0481220013440480A42420C444002F38612442134288C284112F240216688AAF
-:80E600006C24088800141C4464C482A6618400184842442D114085021A441C524248258824F8A3DC1051721215023041228450223011830400182094423048871800803264850428414A0800100820488841042008C0148200802802F054A83417243432258385C1424152264202D248428E214883312181AE418215ECA80284221E4EAE94
-:80E6800044857482252482CC43404498A927848182193144421C911386F8841190142B84460625BE8C34282882DFE808C024C028144425A121858104488D218C42225122488014122494414C1954482200A0128605D02404980082409812160C4400004C618944002024F27972004008946084218C81E48401150A3548420C002004E02869
-:80E7000094811684421401A028304100800880041E413014884800428684022C829C228308EFBD4C628224112422122816C142882414634801200C424A08203C24205283611488414E84204C824884544120446441A50430412B812800212004006341F82AEA40022420141102000000C0410000204241924142819148428D818414814493
-:80E780000000484B848410F1814C48441414292424042C180441D024F833DF20461141392320021184432838618419368619021C82B481268824444491444A011448144C44A248428800821130C300882130441A18022506200528F09FB1205C1840012C612148208488142208400290821414804201109821A91484722884280849044DC7
-:80E8000081C08181C11005C232141A082098824C24014225F4F788240000422501002C2804421D42006084100180288902400244888482854241044C84046048400600422822000088821014B8DC03142428004001221118228002C110010022102908000080084420088810145212138848A21814801802824C3444124180014F370E101E
-:80E8800082120200159221001428E02816914248408134414081E24403A6A4241009840020490148414229848CC4412180841402424481448848211E8240094800250884484061C4800E8AE43218F12241242850128A84011C9C415024422C641448444618810C441001A188604125E3411A012395A2121A88022928B8B848532193582263
-:80E900001427141D1116229142C850912F6212A9A2E75415238402E016E214ECCC92441C934D1D2A1D444D419D488F88FAE444841944B48168484E81F046449FE8F4148115B4487482029E421543A244884EE44F4CE981A28428CB81E0560A6A06502128B02152831A32C92F550146E13CD82264282239F42241171C3F169241F011413F16
-:80E980001698C64E192E846E22644B882CD488F84846C22B444001C62448F18A422F8C48E1547D425212492C5D222B4C8682E424A861822AD188F89A3D501225F32129A11FA27412DA82641417B6E0A8EC24FE814848179419FCC2EC85314129AC488813A8828A326125F45E41141F8468544714288AD856A888474588574849D411384654
-:80EA00001744CF11F48784121F19BC61614D2F120D6C3126216F48F1841425E46C748674890D288012881288D22881921828815028102842220A8002004421288800814100000000804188010000440022A04280045FF643F1234117A295F8292A9782A3D2B1F2332ABF83F2A3823FBDF5E3E98F88F8C3829F84FA2DAE1F46FCC9E91F1C61
-:80EA8000DA11C221EAAAAABF937423F1672335F337DD1F52DE997885F7834225C44A82489E1915D155D4711442F2C3913F31B596F181C235D263F147157D4625F612142B222B118F89ABAC5AB138FB484A2FD244F263421FB4E622F221638782BD233FB1F3332B8781BFA8FAD7DB3F86F66D2CBFBCA8CC7F52F2EB8C3F3EFCC1E11F32F834
-:80EB000042E22B26EAFE1F9D7F5EFCE3B32F257167F763E59FD4F8C94BB5F3E264B4CDCCC84FDD7581F181811D476F74D4AAF44B5BBFF9F5D2567F68F441C33F72FF47557F68F442462F45F564266F25FDDEFE6F2DBB32B758FD5C5AFF4F4DD223D623B421D223B249E6A131229913F11B1A3F56F6CBC12F28FEC9CA1B847F6EF8C7E49FD7
-:80EB80009464161F14C22137141B228FA85D227F7458715FD3F7A465979857F86FBA56464D46379C6F44E419DD11A8885D472B8885FED687ED5FF7C81F69FD93923F18FB47153F31F586826B112F44FC72F6EFE9F8A6C46F49F1ECECCDDE9FBB4EF24362BD4324B7B68B641FB1F173519F16F56A683F25F16325BBCCFFACFEC1C3CAFC4F28
-:80EC00006DFFF4D233F463411F36F4426137141F36F64CDE6F7CFC5787CFF5F54D6F6F4C76C9FDCDCEEF36FEEE6CDFECF487CD2BC88F197585F584845D477F7CFC8ACA7F7DFC8E5F7F6CFC93D63F3DFD87F17F54F593D34F2CBC56F544866F27FF1E8E6BDB2F4BF3888CCFECF9CF7A501210020014482048A14800308100200813880210C2
-:80EC80008112011142490849084180083C0845034D83823482244002804424482449045EAE20184102141A344211428221D0129841299844211944924120A82411A825022E484424442608AC2488444441048654281008001C3194204802889092807884F93CCCC0421F4152381FC17248F1112CA3F4112CAF14F1112CAB941D28AF3459EF
-:80ED000085AF147924F84A9147822F147924F842914F82C4B14FA2E454F8244A16F1265ADE212E4A87594D4A9E24ACF491242CF4912485F2912483F49164A3F49164AB141FC1B64A9961AB9459B44AB924F44A9243B2427B2498B24F8284FB244A6F1702ACE441C442162C7411FC421216AC1417C12F4449FC42B245A89445F8429345F8B3
-:80ED8000421145F842916F82D41AEBA2E554F924CA16F526DA8F15F2224287594F32E419D2A2E4C9C24B1F48D628F5912483F49164A3F4916423F4116CAF44F81164ABB45B61AF14B934F44A944391B84B41297B1688FB241A87174008480000000044000000280044001880080000140000482800000000800200000010026E65200112CC
-:80EE00006011244641028CC94185012C084E128813941131890242998218C224502C902A2126043A440114829C42819448441305A1145621D44814B81498A4004828F081DE803484430290484B122791172414A0127041B881158342A8687082F148814528D414C2688C44C3E12E14488724104A31421181112D424B8244200A1A24E48846
-:80EE8000542886C192C82442C622048609AF7F041A64C44C0218841695132D41AF1188342126E438B44178420146E1314CF1238284C9745851258B3C4B24152248E482D4298412B82865141099412D494332448C843A4149354A1F887448A2248E468E4864A22424308821FFAA090018408134628400141608841812294A8802811B48203F
-:80EF0000820A81F048252F220121442111211120682213081024010013C18116089246A448424828F05F5E001200102112A11248228442006044488D24001008288444221062584846440200250224842400004800981E4824228100844A08EF7A035A024F8102A84285957C251D34C21484424561C418845847258F4422A4488188002504
-:80EF8000CC2C81480021101384517888263142C9BC31E888321281204881B82274882222984C8281A8FF280D4A0228A028114D284D482D35244A1A210445216441422E1443944C90C881820069D22402868124144212011642454228D482ACA1004820A8184A28C288A1C044888904FFA50112184D18004211131368441048880485241443
-:80F0000098482C8122048042181418486844404402401412388217224044E1A288410840311829942228828484882AF831B9148C41238101001C21440443618880918821814C0400411A448408404146733844024503C46480024082C52200D0489132001880C11128007FBA0E2944088D61429344082140581422AB1420420824302281F7
-:80F08000903222DC082002882C94814122518125880C842C18C4888C281825C1818C028B84002825941228F0C77E001008161D04254818882B02101421010082490A3082302140982800400846A2125024A084222E19152601810030881200C0418880F85EDC2448112D189362844C44781B42083AA82182231134A129012C04239A84417D
-:80F100006229581428C02987228663A58825342117444722812D8429A2488835D6B4EC820194C09D18B0C8810124488A23C282EF2A061800124D11150820441C1811C8681884818444002608C0248414004130244048542212410084221E28188229488401A1860800324C01003F2D0D48289584120146952489942289082181812823722F
-:80F1800028052241224368224A48062CA28210022388114202811058813081190189011811888C849912188E18808481F21283403241161231188712109124119021100114502214D0210C4811004088146444481E44288260485966481444424C34421C44443148C914123442412D88412312247644B82A088001800581006442804CC208
-:80F200004141864521882404424024042924044284422A014002133221822382044842850448ACC488810023A2212840F275B1104214442C12141208844018088884812044044304430422414348628482316084199242140080021A0216022721824024015248C084166828F07C6E6044002004404194819083804CC24180CA45004004F6
-:80F280004602289014828440087081028415682881113081004212894988348882C048160282F01ACE80210228211CD4488484024004850400C180022A042A0448880048C04818488344088014482204422348C8828304C200818328088821885F78054022218118124104208AC282004111218845114401001322148108114400C0441445
-:80F300001C8218440159021100110080042003F0224887242FA90DB634842244002220248214C828004A5248C024804284524229728842F4C22844A1004088041042288414012186021A441411028084C141428414F03FAC4088C14884222726A02484C4C3427444A224278C84002113141111026C018C4E0640181118A3828480244202DD
-:80F38000221A2861419E4287581C882AA3811694884C04881A7E1AA6823F5C4123F18662D04A629E15FA414855A422D50485B8E858261B48A91451174054154E44444E466D44C6B944D46252446B444D888D494B91AB44A642521421C35CE9C938424929B482093F14B14A51C98CE4C431888FC5091F48018D544E4D2E446F6C0C4A25FB8D
-:80F400001C154383E116564C228D44224996226CF4484883E454D23CD2E852155F16624828B024022E2426D294E428528887244460921C1241F22129192AA44217128E6539C1422D56897481AD48B8A3A8D48AE444F822E84F296B86AE318F88F847947024C4152648EB21167622F1486147A4BCFAE8881F3248C8812D8857A286AC822FB8
-:80F480004C8EA46477124B6C31CE222D42AD248B8E2BC5822D4113F44A481AB34AEC4C9483C126E91852B36817279E4117558F85E8A9A8C14E93E3EC216CE1248F89755822A6A98F21F84222FA4A0224008400002008822008008A04004001144081585824442C41A4820044884422442A08000010044508411C12044170A947F121433F41
-:80F5000023F32B189FA3F7BB688F827229FC29298FA6D679F2E4E23F36F6828445F4888AE7A2BF12F22A248EA11F12E214F664251B647B2239F6686A9D69DFB6F4FDF944DFD454446F44F426745F7ADA575413DB224B8A1B44DD4D6F42E22DFF13537F55B594E114988ADFF4F48EA44F419594A7C42F48F864A47AF2F8FCFEF44FE6F6A429
-:80F580003A343F12F4757C9FE3F13F349F87FF6969BFC6F4692D8FA6F62D2FCFE6F66B6BAFC67645FD4B6BE7F6AF12F226245F14F265251F74F627241F14F635763D649FB2FB2B69E7A2EF877742F6474F33B442F52736FFD6F241437F74F42D215F92F64546FD447F42F271733F11F155D54FE8BDD2FD32B41F3DF5CAE26FE1B596FDDA92
-:80F60000542F69FDE7F66F6EFB5AFCFEF4CFE7FB916B346F47F63175DF93F33D3BBF37F668221F42F62D69DFF6F66F6FBF5CFE29211F3C7E47F5C9C9CF86F22925BF52E25EFE25615F16F622215B664F12F36662DF96FE2668AF86F6FAF8F5FB4A4EA5E924E483E1AADE46D413F42B259F1AFA4D4C9D492F22F6F6F63D137F75F59B159B07
-:80F680009CBF38FB4BCBBF3CFC5ED2AFE1F94A8A6F29F9628A6F4FBE62F7FCF84E5A7FA948F174649F73F73B3FFFD3F379739F36F46B6CDFD6F26D6FFFFEFEEBEF3F3AFACBEBFFDCF8EBCBFF76F22B25BF7AFAE3E55F52F661657F42F265614F32F36662CFC7F6276DFFD2F2FAF8FF98E8C454D44E5A3E3A3F9AFE81C17D45BF52F2E9A939
-:80F700009F2EFE2F653F32F2F7F63F29F957D7BFF9FDCBC1FF31FFDBDBFF7EFCDEDAAF69FDCAD26FA8FDF6FE2BFF2BF74BFFCFEEFF9EF170240141601284438264324082440124114C12C124484C0244E0440244214C1202004100501240C148003440010080041608304820041F3E0948C01112461201001F48142868248246012413082F
-:80F78000110000104244088C088412844CC2C1008CE2349861261281088928D11A3881A9012928184298B2228826F89329D022F41124A5F21124E3F4112CA7141D24AB141F48B24AB981B24A3985AB9443FA4A9143FA42914F8AD412F9A5481CF9A54A1CF8254A56F1254A87195FA26C596DCA9E242FA2FD91246DC21F49D22CF89124CFC0
-:80F8000026F89124EB861F48B24AD941F24A9219B64A19F54A9443F24A944F82F442944F82D442FB24484CF9244A5F45052F82F411442B4217C163E481326A15BC42D1C1F26A9419B24ADB85B2425984AF1453842DB14D482F1453862B344D1A89F324CA5A52A48B2D4B125265A9246F827191D8A6F41164CD421F49326C1741C3F291440B
-:80F88000E11B61AD841D64899B41AF4429D342E882D442C9482F447B32C8842E5AFD8D2028080000000000280000000021200400000014000048000000004480080000005012F02FBB6044188742542905148722428148284250249088804888428842548411C5814404100418428A12541400704482440242828881200816E228810122F4
-:80F9000083062FE44EB12261181228446F38B444C15126C1478968858487789445984146421464144491482F24429442C142A410384242108178824843F8824A83C1829E488E512368118CE438A441A483B18154488334F486C8918CF844FC3442D6C1281D264B413419C56131F4492C34286C180D1364241038218564126B41257C838418
-:80F98000644400101DA2418394A1436888190425BA185422872D3C8114614A86AA1424162871823A481E8689F22891A3F93B69B024014901244C1C64816248811E28421548528489084C18240481A0242485456844A4004200006501A18A14A448A04888928394416088B081C414124A222804FF260F4044624181101801704221293481E3
-:80FA00001490828001001C081C880421442C08604124001120080011002140020025022100841870BF4F312114400113724221724202508111484328C841C8112CBA810220065442D0185C4A19288208499811444021312D46130442C226E38104218C44A81880220188F01B43142211301400A9044224428C292468582414C814241C028F
-:80FA80002006174442704174820800244411143081D0484203808414811102488188001280015F6B0411CC441211C82111265122404191251304884A08188A8218C281E011884802834866182896443188184C048041211405248624D2826422105822122122408A087FA3060010010020E1416218AF14124148813C12688381448808A890
-:80FB0000894807814E1280C8244322084B291884690822445428164288128808D04881222201444C01FF1B03803212105448404A81244122184288A1481288904540484D0214100825225482430320023284210041848233A118004518028748842F4108828D447B2C001C0124260826088C048324018800842122222A01110028842A2414
-:80FB8000080082000033081A4228781802801128048888408C1486942800DE6600381215C22C4181F012413AF489524E38131848A994D638522628C25C002E842CC824159828C821214936AA16044B182223B8344838226021418502AD11830D82448741C48B28C3B194C42888C9F4F55F0011210084228481441051228200212298481CEA
-:80FC000022581815185821803418201842A48220225138A012844958C122128989028260882122460621414C015F8B0E8042012428000046011490880000430200004120020088C0421261822240220812A50229018840221802C048004424CDFB4042911211141C11C118111C8849612819681482888886688141434828028712611CC404
-:80FC8000482621A8212B4880682AA0816928B8113221888A224882A84142406C21A4262E01A810F84896400239013400008811001CB84908821088024400F024894011681288AE128214188E2421246028822071828288010050242490262904864204DDA71485F868414A3441601314834141F1944455F4A5222A2222088288C941D622E6
-:80FD000058A21AA3119A9886E2420015611413D48A588A8B4C7ABC44081C631288260865D644B8F4A2622227881284811648922225E281F14C4900000000400100136811000082008100140000400488100428228200001820110200820000824810F8F87B40CC48481904002622612844444C829221008812C41012921218188288100880
-:80FD8000421342C12886C84848489084212840C284446C829221000000248129F19F2240082A0400100125215944A022800800002221818C81840C0010410540084814007082220840A5811B3282002011082221F0C1D3006800105412005041198803882400003042E014018A080000140084A048000000004480420200000025084A718D
-:80FE0000960800005021841002100282000088000048000000180000412008248800460282100248004100100846F4EE27103858424200004214414938A42A280200003C54282C2421A1A984820010011392A881832524042100121865328D43222202000085022412EFD60584844C840440020018D41594221C2E0840080021211898192B
-:80FE8000A88800001415018CC188484828008290824044C422281800108834422516F247B7200100280012A0811C088119041882008188424144220024004490242502000088402A1102180040012140080048F019670000400211141200000000001018010000800480020000440024822008008C28040082000000AF92022062421450B9
-:80FF000022603246B181B1111138913B848A68280016089CAC44101429062400444224B08432141222C022230824CA81C91214232134C3180084818608C924F4492600120028501B112721348886C1819651119888828A480894A0440046014820012AC22222000080288848022B81B12C480182210084C02890441FF90E430100100529A1
-:80FF800081816838191808420000850489924491224008101884D2440880A88A4CC8818245522A2B1A2B81252288388816420190841280B4480481EF830B2F22F212222CB11221B112013C512229F812111F11B189E9987848D818F44848421F945411488558884F84E444F4244449F22424222E2480524445E642F222222F21CA122B115D
+:800180000025522200001AA1111AA111255222255222000000000025522200005F51F115151F1AFAA1A1000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004AA4444AA44402
+:80020000000000004F44F444445F55F555551F11F111114F44F4444400004AA4444AA4440000004AA4442F24F442422F24F44242000000004554446F61F116162F21F11212000000CAACCC2F2DFDD2D22F21F112124F48F884846F61F116164554444AA4446F65F556566F61F116166F61F116164554446F65F556566F65F556566F65F559
+:800280005656000000008AA8882F29F992922F21F112120000004F4CFCC4C46F6DFDD6D62F21F112128AA8882F21F11212004F4CFCC4C46F6DFDD6D62F21F112122F21F11212006F6DFDD6D64F45F554548F86F66868006F6DFDD6D66F6DFDD6D600000000CAACCC2F2CFCC2C2255222000000CFCCFCCCCCCFCCFCCCCC008F8CFCC8C825AD
+:800300005222004F4CFCC4C44F4CFCC4C40000004F4CFCC4C44F4CFCC4C44F4CFCC4C400000000CFCCFCCCCCCFCCFCCCCC000000008F8CFCC8C8AFACFCCACA255222CFCCFCCCCCC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE00000000CFC8F88C8CCFC8F88C8C000000008F8CFCC8C8CE
+:80038000AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE00000000CFC8F88C8CCFC8F88C8C000000008F8CFCC8C8AFACFCCACA255222CFC8F88C8CC55CCCC55CCCCAACCCEFECFCCECEE55EEEC55CCCC55CCCEFECFCCECEEFECFCCECEEFECFCCECE000000CC
+:8004000000CFC8F88C8CCFCBFBBCBC3AA3330000008F8CFCC8C8AFADFDDADA2F21F11212CFC8F88C8CCFC3F33C3CC55CCCCAACCCEFEDFDDEDEEFE1F11E1ECFC1F11C1CC55CCCEFE1F11E1EFFFAFAAFAF00EFEDFDDEDEEFEDFDDEDEEFEDFDDEDE000000008AA8889AA9991AA111000000CFCCFCCCCCEFEEFEEEEE2F22F222228AA8883AA321
+:800480003300CFCCFCCCCCEFECFCCECE2552220000EFECFCCECEEFECFCCECEEFECFCCECE000000004AA4441F14F44141155111000000CFCCFCCCCCFFFFFFFFFF3F33F333334AA44415511100CFCCFCCCCCFFFFFFFFFF3F33F3333315511100FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000008F84F448489F95F559591F11F1111100000033
+:80050000CFCCFCCCCCFFFEFEEFEF3F32F223238F84F448489F91F119198558884F4CFCC4C4FFFEFEEFEFBFB2F22B2B955999855888FFFEFEEFEFFFFEFEEFEFFFFEFEEFEF00000000CFC4F44C4CFFF4F44F4F3553330000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CF55FFFC55CCCCAACCCFFFFFFFFFFFFF3F33F3FF55FFFC55C9C
+:80058000CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004554444F42F224242AA2220000008F8CFCC8C8BFBFFFFBFB3F33F333334554444F42F224244554448F8CFCC8C8FFFFFFFFFF7F73F337374554444AA44435533300455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004AA4446AA6662AA222000000CFCCFCCCCCFFFFFFFFF0
+:80060000FF3F33F333334AA4442AA22200CFCCFCCCCCFFFFFFFFFF3F33F333332AA22200FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000CFC4F44C4CCFC6F66C6C2AA2220000008F8CFCC8C8BFBFFFFBFB3F33F33333CFC4F44C4CCFC2F22C2CC55CCCCAACCCFFFFFFFFFFFFF3F33F3FCFC2F22C2CC55CCCFFFFFFFFFFFFFFFFFFFFFFFF24
+:80068000FFFFFF000000004F48F884846F68F886862552220000008F8CFCC8C8BFBFFFFBFB3F33F333334F48F88484255222008F8CFCC8C8BFBFFFFBFB3F33F333330000BFBFFFFBFBBFBFFFFBFBBFBFFFFBFB000000008AA8882F28F88282255222000000CFCCFCCCCCDFDFFFFDFD1F13F331314F48F88484255222008F8CFCC8C89F9F77
+:80070000FFF9F91F13F3313100009F9FFFF9F99F9FFFF9F99F9FFFF9F9000000004F48F884846F68F88686255222000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337374F4FFFF4F4BFB2F22B2B00455444455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F44F444447F73
+:8007800074F44747355333000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444447F71F117174554448F88F88888DFDAFAADAD5F52F22525455444455444DFDAFAADADDFDAFAADADDFDAFAADAD000000004F44F444445F54F44545155111000000CFCCFCCCCCEFEFFFFEFE2F23F332324F44F444441F11F1111100CFCCFCCCCCCFCEFE72
+:80080000ECEC2AA2220000CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774743AA333000000CFCCFCCCCCFFFCFCCFCF3553334F44F444441F17F771714AA444CFC8F88C8CCFCCFCCCCC4AA4444AA4444AA444CFCCFCCCCCCFCCFCCCCCCFCCFCCCCC000000004F44F444444F47F774743AA333000000CFCCFCCCCCDF5B
+:80088000DDFDDDDD1F11F111114F44F444441F17F771714AA444CFC8F88C8CCFCDFDDCDC5AA5555AA5554AA444CFCDFDDCDCCFCDFDDCDCCFCDFDDCDC000000000000000000000000000000000000BFB7F77B7BCFC1F11C1C000080010000000000000000000000000000000000000000000000000000D0510F4800000000000000000000F7
+:8009000000000000400100000000000000280000000000004F72060000000000000000000000000000000000000000000000000000000000F04FFE8004001800000000000000000000000040010000000000000028000000000000AFC6060000000000000000000000000000000000000000000000000000000000F04FFE8002004001008A
+:80098000800414800280041480020000800280040000214840010080041400108204000021BF26050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F481800280000000021000000210014001002400100000080020000F8
+:800A0000882800008088020000EFE40F008084010000200100000000000000120000400100004001000040012800000000F092548084410128004840818102214860118002211A01148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400100240010000008002000088D3
+:800A80002800008088020000EFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000021000000000000800180010000000000008008000080880200008F48010000220000000000000010021001400200000000008002000000000000000000574300000000000000000000000000000075
+:800B0000000000000000000000000000000000FFE40F000000000000000000000000002001000000000000000000000000000000BF240F0000000000000000000000000000000000000000000020080000000000003EBF00000000000000000000000011000000000000008002000000000080080000F0BE6D000080020000000000000093
+:800B80002100000000000000000000000000000000000000DE4900000000000040020000000000000000120000000000000000000000000000FFE90D000000000000000000000000001002000000000000000000000000220000B04F0E0000000024000000000000000000000000000000000000000000000000001F560A0020010000005F
+:800C0000002120052024020000000010022002000000140000000000000000F08BAD0000000000210000000042000000000010020000000040010000000000000000EFAA0B0020010000004002A04100200200000000000028000000000000000000000000F0B1550018000000000000001100000000000000000080010000800A820000E4
+:800C800000000082001FC6060000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0018000000001210022001000000100100000000000000000000000000000028F0DF3B000000000000002100120000000011000000000074
+:800D00000000000000000000000000F07A2D00800100000020010000000000000000000000000000000000000000000028F0EAE800000000000000000000000000000000000000000000002282000000002800309B000000000000000000800400000000002002002800000000000082000090810022D063070000000000000000004800B4
+:800D80000000000000220000000000000082000000002880029F4A060000000000000000000000000000000000800200000000220082000030810000DF6503200420040000000000420000001800000000002001008001000020220800000000F0B6340042180000000000480000000080010000400220020048220080020020020000009B
+:800E000000005E770040010000000000000000000000000000002200000000008002000000288200F077AE00C01120040000008004200400000000000024002222002002120000200282000080820800DF3B06000000000000000000000000000000000080010000800200000000000000D0560F48800100000000802484040000000000C5
+:800E80000000000022202202000022000000A028280000F07ABA000042000020010000000000000000000000000000000000222800220000002200AF870F80210148000000200400001200200100180000000028800200200200000080082A080088F05F360000420000420080010042000000800100000000181822000000000080220276
+:800F0000000000001F2D010000420000000000202401001200008001000000000020020080820200000028002214FFA70520840420040000122004522004000000000000008001000000000000280080080000F0D3B1001800000000004A014880011800800100120012122081010020220112000000280000820000F021460000000000CB
+:800F8000800100000000000000000000000028000000000028000000002800BF3D0A0048004842000012802221014800002180818108180018140018808401181800000028008002001042F179E5005A812184040000008084A14118000000000020018001122002220028182200280080022088020014F09C332004124842008024011201
+:801000001A0448A044581A0180A11100A0111220010080812382A223200100222022020082222A080022E04B090000A04442008081A11442424A014200000080010020011220218102200112002082022002802A28022A2208EFCD058001800400001280041A041A04002004000000800100002220021800002002000028820000F04196CD
+:80108000005212484A0C4A04800120A4155A21A4441A01A0445A0500A0111A0180A1111A011AA13128281A032AA311000028228002A0822AE81202A022F08EAF001A048028A444001820A1261AA171A0141A01E024B4520529018AA9111AA91180F11111E011A1111AA14680062A8301002A0228000028822A42B222A22221DEE9001A24A6
+:80110000014A044A048081A1115AA315424AA1541A01002B11800188A011001AC1111A011A818386A231A033180000282800002AA8822A022B222A02EF810CA01118A044424A048081A1115AA7516AA4144AA1551A01B012E12101A0811AA1191A011AC111B01121A1312A26A226A0331A01002AA2220000A0A2AAB821022B222E22F08F42
+:80118000DD0000000000000000000000000000001800800118008001000000000000000028E0AC072001004800000080044880040000000000000020210222000000200200002088022002F0DFFE80B41182B11122B411364219B24291612B9419B24299412B942AF442912AF44291222D912AC4912E421CE82264112E4296E12264192C02
+:80120000A4292CB491E222B49162221B29421B2923B681326219B26298212B84112B84A22B84A22BA42229A84A88AE42BF93019061B01126B4111292212B141B212B841B2129BA11B24228D31228F34291222F1439322D912E521CE922EC11E82265192E4286C1539E212CB491C2421B692C34914213B842B181324219B24298212BA411D9
+:801280002BA4222B84222B8490822914E222F496310082000000210000280000000021800188000040010080040000000000000000002501FD17000080122201480000800100000000008001000000280000000080022024080000202282F2FB2D0082800260248800482C044224400200222001001821008001A021801202208202200260
+:801300000000002828828840017FB50C200C00800448800422200100002602121220882101001901200242000028002822208284088002602840016F610400806222C0128200801482440224000000000021000000122228210028000000000000288220822272E50100002400001002420011800400000000290100210000002002002280
+:801380002002000000280000F02872008001001823040000002354228032112200002014011C210200800228008001200242208818028810810242B04C0C000024C012000000403241202422810200002001182C020080022800800120820280C882008822008004EDE80080010080041002420010120211000000461201110000000080A4
+:801400000200280048000000108102001F5E0C124214140000001001221800120010022C010000001116021212002A0400114200302200220000822140F27937202404200420020024200600000090121800800400312088040019050010024021020000001002F0351200000000244820010000421081024820043041208445014800249B
+:801480004001000000200220044200A60200704F4AA11440112104C0224880411102004812112280842114021324044A51212094824A8101142800002904902100004800282100F045C4000000000000004818000000000000200400120024001301001100002120240200828800F067F60080012C81042114002180042302290400002ABF
+:80150000410124220012001414400214C0214081048092412002A08200888220F8CB9A0012000031114220C4620040021114258244010012182418250140021002C01212002800220042002014020088243F74061846812184010020220248008001488004140000002814A0120024000025221602208288222C02422304008220D28601B4
+:8015800048802461241924542211002100282148272400E0120400502258340048211812E021861102181810820211000000000010F2E6D11400000040622200400200134201000040110200143062240031140010010088481001000021288200F0A76500000010012002006800003502200313120200802184C12160123880420240218D
+:8016000002001C04000000001082F8A27740218184010000240000200200004800000000100114002880242101240000002008008200006FAC03200842481002260222C01220042B240010022601222502240014250210024082020000004800002128000014226FFC081B1480048200800142222B242C0200002220311211188028011867
+:8016800021181412C013A0430025E2121102002848280048212214103282F0519414E018014AA4D42F34140219312242A05229042A021D413C342223240626513118214E223D121E22241E621825D121F213123836622423F131121D11108228F42121114880088E4210C1828214A27F470211921812002425C262C0222F22420227262105
+:801700001E432304243011288052222C91121081941229E221C1111CE22294321C02213A942200A0C44E21882A024821212282E038C882AFB30C5E5148121816021D41142712282B4248232404242B26243180C4711D111D320020012D111D1113642211003190122C41D122623248222A0248420027246A8282088880F22A6D144218805C
+:80178000A1480024602260224824C022482411004200311022011221122051121221120034602200E01288840888482C08002088F2F68914A014A04142151251233B13244225B27241A2642552132552122E222CE4127621B122722341D222C1122B11167113B161B73263113E222CF15313122B631835912221218AA86413A48ECA8842B2
+:80180000B2C228BEA2E212E2280830224F1B071B441A242121DD33541335F133312AA2242B222B75A0442B223F16744311A222243F16F221112F1323E22868211E822CD111F151517E6118181B3317311F3287A331165223E02202A0CCEAFE81E1A0888E822F28EC2EA42A2AA28829A8882EA2AFC548A1151A25A1114A55111551333F1376
+:8018800041322227222B352CB442F412323F11D72254122E2229F423611F12E222F323212C78126221181D133F14E437B622C3121F32E223F223732CB13282511329B22212A2884AB6E1AAAC42E028B8C2A8A62BA22A02232828FA6E11141F14242121A1453D433553333F31D322D222F222222F25D522F442422F23F37353373435F3228E
+:801900002229F463611F32E332F323232D822D122F28417211F353432F26F7222227213F23D233F123232F21F2123223311315F1222221A0CC1F16F64141CA082425F262A22BA21BAA8A88A8882EA2DFC90D1800C0124001140048000000240011288002001023041002000021800100800400402208820020F8C19F4001180048002302E3
+:80198000621082049022191402428011012400002082026032200224603200822282148A0482A04228802808F04997C0511B211CB111A2141B61272419B66291612F2699212B9419F44292222F34BB21F442912AF442912AC4911F22C4812E4256F123529E212E529E212CA5292CB591C2531B292D121B296E131B2927361B68271619B679
+:801A00006298212F1498412B84222F24A8422B842229A84A88AE42CB72C0411946B111061B2125B211E22211F122921B214EB219F24292324EB2221C092F14BB22D412E922C5912BC24E812D128AE222E518D232A5283CA52829A5682D521B284E129A62241B482119B44218B1429A412F242AC282482B842229B82294822AF4BB1D0082C3
+:801A8000000000000000000000000018800800000000000000000000000000004001FE4B0018208111012014028004008032210000100111241880022222400213621128200242822228000000802208003FC70B601814828E4122461301122C240224482827141223042001406212100221142D121827241002211001241C022CA24848FE
+:801B0000130880020034A0248601BDE400D6011A88641248141082242202298412011C06240050218A01301220D22121821402421C921119022831422CA86828130A8002003486A2241C088F7B050014E01801342024410242003042322100120030211421104211223122502210020080022880040000002200009F2101002001400221AE
+:801B80000040020042190411000000420021460128100100408144820200821400004824224A2208E0A90540810200130182522014022C8484822212820411141502D022850225820229840428112210123141204201908280282A8864240080F8DE5D00140000189082424002000046210248404111014821001428109241801201101205
+:801C0000B14302008811888088A8842C8484820888EFFA0600281200150280014210229442622224110000100256622224482128420000281142008012011002800260224200F0513E902142100100601428221821221800132122A22130121002124829031392112001128A41C1511A02210042002125821402001D22822120F4F64A00C6
+:801C80004200428002214083026220020000100212400180011162104302800400304100004A020000101102247B5B800413011302000012001100489011240014800200000024200800220000302288280000882042110100AB3F4001004A0200468162322840812122249111B012021301221081A421182681612618312018A1210021CB
+:801D0000C04123061042C2422008208208C0429F240C2A041C1141012210021812214800108122020024001224000000822C2101112A010000882824480000281002006F4B0D124812205722C0120046410200200422000024004220041480C221211240022C024A810280081C0842002008224880F4421B00102114210200001811181281
+:801D8000203111238404002904232251211C21012800000019040000109221109281210042240030221F6F08481922C11128802481140118800122222211901122112111004824480024001821002011022902420024008200800428F0A3B720210120018002282119A21421422121582822291212024002128041C2320028001A0480A2FC
+:801E000021208486821811112112A282216230A22B84F04B24802412312100114A820118C0114218421D1211581B1418380024282D211924112141022212211301241C02100200250210828C02A8800288888F2D0400224248291412021210828422040014212100800412004214141410028004201102002004002100000000FFAB0F1049
+:801E8000010014482410B222041091211220024001290100502200001001200414000021212180888848022004800448FFEA0C22000022152204290122245032284825023100281002004002234102000028250128E02204A2142008882880122188C821F0528D0012681200280014282734282880912248802122110258422C8841130194
+:801F0000C021C022002C05800228A02C482B2490214862822220062221A2CFF105221116C151241B2623A6315814903218422B166AA1142D2126D111A121122842001E12373127211E131124211922B11211033D21111622012B242C8408141582B8822408AACC414829E81AB482F2446920E41386A2256821242F261412E316662172396C
+:801F80006131243E41181B645AB222B122420233F4224246A1144AB142440328C022001224258313C222244A32C21C3E838A58112E82296822426602621CA8863F96061A85B12111E11741D21104243E122D121F12D4332491412B212D221F27D422D1225411181951222C84322248151121B133632227322302522C81A422222A37222ABD
+:8020000034A22E6233C682142F2CA4242A828A82A2A28A8682F4462B20040020824402206132008002241B411001120000100319010000184001008004000048248280040082E033043AF6713113F111711F15FC232129F622221A51133B642F33E336F542433F14A66615C11226A1171F22A1223A5222E024F513514E412D424E43213DFA
+:80208000222AC2233AA3111714122E61282F2393222E222B642EE24AFE23213B883513A3222AA8AAAABC21E22AA8666ABC62F6CE4FA0771B731B331F11F35171313F24F26232297113F143423F23F353731F34F543516E523F14F162221F14F632312F13B322A2221E12482F28FD31634EC23F31F4524235F322332B222E223E2229D111DB
+:8021000044B223B221F232222B222AE226B222BE62FA61233F1A5A333F14F662A22BA22AA2AE6AA2EE2B6E6AAE661F380E3AF731511B111F11B311F121236E622F26B212D131F141332F27F152722F31F143532F2352131F32F362736E333F12B322A1332C41A2E61F15E435F443432F347513F132232AF222222B331AF1114116F2232341
+:802180003F22F232222B232E222F26F622222BEE3F16D63352333D43AE62AAAAAAAAEE12A2EE2BA26AAEAA2FAD037AF731111F13F311311BF53F26B663F26232183F31F153113F27F151531F34F543512B573F17F732323F37E733F232312AA1332CC1422F23FE73632B4D3F35E525F513132F23B322F222222B23181F11E121F121221F33
+:8022000022F232222F23F222222F26F222222BEE1F3EFE83A335F363C12F26BA22AAAAEAAE66EAAEEE6AAE665FEB070022408124824402141234122412800448288002004A82218401210080010025022C01244824821440230800202408F0F5B2A0121B21301146932100290142282D124846A1422413C222111880024225021502150298
+:802280002602241A0200408142824282A286C08282232402A24222A0424282FFF809481B21B01122B611724292612B1619F6629219F24291112B94222F343B212F14B921D412B921E414F921421CE82264111F2264193F2264192CA4292CB491C2421B2925B29162141B2923B481364219B64298212B84112F24A84A2F2428F242822A94DA
+:8023000082AA84E82AE47B0D481A46B11126B6111292212B1213B16298211C9B212B94F042B1322DA12229B932E414F82252982AEC11E82224E92224C8539AC2431B292CB481E6222529B49112B281764292618819B6429A212F24A8422F2428C2822AB4423822212E429FE10B2008000000000000000000008001880000000000000000C6
+:802380000000800200000040017F9D020000001C04004828154201801121D221022240021012531219464102180000213438002460240000218002800820F6E1B92065188041623160321D12D02281A1412448241CC4421502142004100220011022011941020000004681028048820800822C086012F074352034C1004061143C120148B1
+:80240000322E5125834492413C9421342420642160284093111410931200304210128102002322042260280020486228C021289F2E02180012241221C012D022010000184022422102002110022A440180311100002412004601248008210022200800483F2E0200000000000024400224400200502100100221100200100140010000004D
+:8024800000200880022002223F890F4A0214A0422301211022218461143924441181021A0222A02821211140820216420221000000002728288848000088822A282204F021E98006004823010000001C6414421002211220428312522240426222001002140000001032220000008888006820F24325004001224002242081642150221049
+:802500001181022200200810010020114202004001008008884800880022A22200F0C8DF1021042842002210020022400200301210821102800200110011001400404201002002240000401102607F802604192102002100802416210212002034221800110040922120010080021001802488A282000000002180F2C6320000001431002C
+:802580002042420200001190212800220024422C440110020000008042210200000000221442003F66024A0220824201220022904210C12220110139034082028082241492223012140014220034288002280024000000428072310F140013210425012502002448000000A042280040410240010000000000111448888008000020020046
+:80260000F0842E001C010000210029029041C042808402210040420224002400250121001B21120000220000002018420200822FBC0348000029122201008002290214250100002200001124001810020000000080122142210200000000EFFA0C001001C0413562140080044222624002000021408122120210022224000014001021824B
+:802680000200000029220848705E02004800110080021082020021230110010021D012011302001800004081022800008800222180080080F46D7C00681A022428100121284002140020424102142603000022142424190211902180020000001100203222000000CF51012880840420040025022004330446010010021100004002002451
+:8027000040020000100140010080880800109282FF3202481848001400001880042128C012001100216011001400204102400111302114001111009021220088002120F49E612022A8122A2402112C024022021124141128142400002850122503258202200224302230211041110111281111002810420140012F6F030048120021423470
+:802780000010922248B0222421312110512211181188282219011814601214C0412200000000801201005022002904CF7C0460181212502113F411221110123242106112221C9122130215011902271124282691212552222991232434111CF22111381B222002112A120110212202241502C041F0D2EF80A219224A4422D22214D232748E
+:8028000022C212242C12E32454222542A2113425011434254212623235523214181642B223120131001400112601141308288018B28298222440A1441F3B0A6AA424381C22D21242C141002A8282E43494221B641F14B673641221244032221C1251113381A21228003601212522827221011511410115A1221C521126C12228AE82002380
+:802880000846A2889FE70F42180040013C011840824482848244021001111001A0212011012170220114A012200200000000280082340020B44703287AA2213A87E232F243413B6712B012A32222359322173226F123321F13E1225223002B2233021A61221F22A132321D122F21C1212D232414281E311AC3215011154181F2212126019D
+:802900002822AAE82292822424809442DF620E6AA6722AA233283B223B443F17761242B232F322222F24D613F443413CE634F433733F33F322222131E02263221F38F912113E922CF1213236C2132B112F31712212B24214F211711AD11102111415A1221F12D2110214228E822F2A3282251112A2448AF49BA180A6631AA2332AA2221B2A
+:80298000443F2653112B112D222E224E2217343714371637363F27F333132F3252132541E112F323213C48F3321217123E232F13D232E121F112323D2335D21194211AA22128501115012AF221211D21111122AE822F22928224108284FCBE1DA0663AA3233AE322F223223B443F3613B212B122F222222F24D433F441433F22F663413FED
+:802A000033F731332F3252131551112E233F32F212831E133F3AD213F233233F1392122F21B113F3232315D23334231F177231F1212115114151111F12F2212115511115A1228EA22F2AFA82822512024282A757200200220040020000140040020000100111100221800100001C01144001260114400124000000D073098A042A011011C2
+:802A800092412502227042024612E134021C0221002428002128800230221002230222001100001400800288100242F08EB980B411C2111B2146B111724293212F1691612F2499212F2499412B942AF442B32AF44291222D912AC4912E421CE82264112E429E212E4296C1429AF222421B292D421B2926B291A2161B2923B681326219B23D
+:802B000042B881B24218F14282222BA4A22F24289AA22AA484AE427FDA0BB01146A16146B111726231116E1113B1429921299B212929C2B1324E811392B23B42983F2285E922EC11C8529E211F2225C9539AC2419AC2439AC64313A8141339421B282314B14298212B24112F240A4A28F2428280B822B442E822B4EA0C0000000000000018
+:802B8000000000000000880000400100800400000000000000000014F05873204801802442024815025021400280021722221140018002C0220000251102001411400110020000400229020028AF5909200814143440311329C442484012C1121582149142110050222460220042232202281002142123226224004002002820024001266C
+:802C000021F84FC700460114421C0214150227246012251231128012013502701142221802212490214062123042400133227241022400220028C0222422344081F2F51E0000400125022B141904480000258344B221841201008022022242212800210050120000001002000000002882D60300204112014001220040023011240060148B
+:802C800000002128242082A2120010A2212140022228880000480000282242F016E60011121412C04324242450222C0140022122100222101243011821624230822C4422C121141D2212280000220080220229220C00F0BCCA0011124002464102212130124002241C61221002420040032E12A0244A228242022CC121122D212381022236
+:802D000000000048408282840248F0181D000013811101211120120221400200006012245012004002002B18422400190240028022880200222800822002F0EA69A0142014010050212C414201221224001410032114230122000019042220048004400200601623622400282002302248F021FD1430214222000000C022200226012581F0
+:802D80002102283118A0282014031111001C0212111C4402902100002200228002002100AFD4090000000021000000000000000040210140022C24080000800200800840410200800200F0D487200420020024150225C222001826111292112612011100001A1401112304236212800111002002206812214641220222008002247FD90FC1
+:802E0000181902110000200111000010010022502120C2212400004288800414408242120100480021800228220042F072CA80218221042413011100210022000011004829442204482100001421261201240022214200002002200220022870420D0000304300482B6821A0528A141282348248212123E81922E8182403312C45C1414044
+:802E8000021111221113041100A02CA08431130888200888100223F258F68081812205400125010021214825024011220240C2428602904142214221212821002200242221138404000000004822001609420013024824110048488002001C1482621800800114008840010088422D428008228002311100212200008014027F170D220005
+:802F0000111180416222001818100210020020420322291241011C04211001190230211001202212012400288002280014DF970A4800C01200002004000000601223089042002C083042242800182603111602002888310090220000420020022F870580220110014848422C8128242481A814241A840CA888888842181042034810010033
+:802F800010021282202428846812822888200882A04282285506002222800100106221000010410122000088000030220000240028220040228202002800282800007B9C001381248141022D41122280042800258104481210021C01A800808168122C0821801C0111408202140028002002800421484F820E4218281E611642D333117282
+:803000004133A22CA114214829458204A0E6AA0317231C64142E723117342714241D4326431212011591811332A111172829A2422B48503113120200288088061448BFC80B28222213861102243868212F21A841272C24212724241B14250222CA5A221F28A8842A12522131A044211968222F38924225C34160116022212E232F1484481B
+:8030800061282A82022200B022A68270B6051AB511A21118111B45121F14944246A244484A0328881CF1C3412D431591832B88A08C293482160258CE412395A22834271113E2220227212982A222A02C1B841B228A061C18A28A228AA826A26242282B22EF1D02800122601440018880288108888008280000200410211C21088225217807
+:80310000222118220882268284081C088880088880084A0A283F7306F03121F011711AB441B553D121B451B562BED2B9C2EC2EFC42822BB98AF8D3D14EC13F15ED1EEA31A328223F39AC882E623A41A2C88E832F29B9C1B622CA832F2959212F24D821F893D31F12F291B11F1898222BA81F32BAE3ACEE13CA822BA88A28A882EAAE8A8652
+:8031800082A6882BCCAB1A20F11141181F13F7511116B312D523F453514EC2DAFD42522B754EC22F2949F251531F14FC53D33F36F613112B222AF281D33F1CE82EE3217181F342414E433F2DFDE2632BA22CF892913F28FA21E23D821F39B9A2FA313115A1AA2F26F623E33F1EEE16D621DA22B8820888A8EA2EA2E22B42AAA8EECF4B0FA4
+:803200004AF531712AA2311F3191113B1539B453B5E2B652ED25F542622F2CB412093F11F5C1433F1DF541433F119322621F3CFD81832F22AE1325D21154322F3DD112FE222286F211123F2AF8224137283F11F1A3A11F11732191222F2EFAE3233F16BC21D621728292822A02A26A2C22B4C20ECAFE3AECA0671F1383F171311F31F15147
+:80328000433B5129F432712F2EB652ED2CFD52522F2CF412922F28F853531F3CF4D3513F16F613112AA2261F3CFCC3417EE23E32357342F1C2833F3DF562E22F2222F8939339F2232333F893933F12F23131AE82AEA22F26F6A3633F1EF6A1E115728232828A08AAA26EAAA862AAAE22EADEBE0322200218006022004082440210410228A5
+:80330000A0240080020000100200216012006022400124000080022800827FFA05581A021124112C11210646022C01216024704221482188728162142250234215024828002712401151122826012148422814002228222082828442F1CC4A80B511A2121B21421B21271419F242111B282B941B292B9413B842A94A2F1429FA4291222DB4
+:80338000B11B431CE922E414F8214256F12142D6F121D296C1C29AE222BC91F222C31B292F32B891B242B891F262821B282B8419F6428219F24281112F1428B24228B24228B242A842A82E42CF590F486826B11162141B2127141B2127141B2923B491B242B39112227B42217B4221D112BA1284BA22E514E922ACA42E52422ED246C19301
+:803400001AC2C31982AD612C9C214A19F14292198298612F2418A1A4B0420A2B842229A8422B8429B44268229FF605000000000000000000000000008800000000000000000000000000000000EF620200002460244821C01200404212810500004228108242912320042522081002807282C1218008220020022800200848F73200148017
+:80348000013400242C2484521282218001250180041002901221242C0422100140022B42140062248240420200002280C221286F570D304180013542622480848532221002111612012400560286022811142934432221004250224A621229880282292822022122800228242A28A2243FC6020000004240022502148224901248008004D7
+:803500008002D0220123020024130810020014116200400200000000002FBB01000000242800002041114102106114000031100320142201C0124021012002002048110140022882208822F2F8C700180011131122A1212821272850222412230135028023022110022992412321022382D5120A21006E11181124C82592418008A8800873
+:8035800068222848F07F2200001041012B21122C02212100111642021111220024104203200410022C0231004A824301295822881188A0822488282A0C2A28041FFF072001002C018002804882511229110211214218281012012128197412222221A2413B1800129011008004460111000000288022F259230018420011801212014200BC
+:803600002822008002282921240A8008001982020080C84100820000000048000000005FF40A1301421142A02100202812822624142241410288211C9B42E011C4820088112038318A8144810800140014002012124202101202F0DCBC0000220000144222002400202408000000008014010000212820020048428826010000000000F05D
+:803680001C844021011442141226424121682420044E2200130821A812882B4A30110042190828303118211918810200484220024082140221240000AF5B068A0180022002802482023042001A042200B021042044020022800888202208801801C08111000000000000EFF44D01800100138111C1121118315890111083911314109181E7
+:803700001140820112292406000011821A14021052121428231402222820120200F0E5771001111120110200008642918382201102122220020024266112008018A182112031211110028228312008250223180200001F45068200002150222C0220410218400100230216020018822818280080011220048004424200000000000000DF82
+:80378000E90814111482188214281228001800A0182941210618002A4802121A081944621200004814001121001400000022000000EF130A00904100400188200800828868209881230A0040029601200614118282208888018288001100002100008042B1EC020000481631224A41A134142944013413040023021002008014C283184075
+:803800002108000015024042022860222C020040820200F0B243201401100160220040811121288141A112150280430180092002142E812888008A066024224820428218029082101222182208245F1107200842142002008E1230822418100231821818822800C021001400001111A0414A182104C8001001280028000000AF330E8A0113
+:80388000484002248042010028001120282422D822021C43820800406211140080140148800417242002282002000010026B9914201891414215C22221112B211150211A1472D2D1227122F13113321621B121225811002229E222032420A8180014421829B4422614328250212A14022682120229084001FF1A0C1113084211A0121B3326
+:803900001AE224C1823F24B91259231381A8891A91822F1C782382EB2128A22A241AF19212BA3911171342C0A1112282D011E818089042CAE81416A2822182282912C22229028008247FCF0F1C45C1111416B3125113467222B121C811128641E1189911157141021D62B8A2183D21002592411561182B441B622B2B11148E811D118AA2B9
+:80398000591F267451512186C242111F32D2124203258248224A22120222F0DB1F200112004E836014124601460142824211421130912008111082020042880028882880468202283480082C088880082C28822882F892B8148AE1112191415ADD22B142F452512F23F182832BDCCEC1CAF8C2832F2CBF42A4198AE815A4E22F3A8BA2AAA9
+:803A00002BA22EA1006A4CF222211F37B743E421F1A2211D811F12786151111F1BBEA1F831134E42EE622BEE1F2C84F881831F18C8828AA88AAAE822A8888E82AAAA228AB8A2F83AF114181F1125F111514EC38E122F1464232B455AA5DC2B992F2FFBC2822BFC3CF1C3D12BDC3F12E726F2233129A2B33AF921A18E922F21A1C49E923F20
+:803A80001BFB71732F14E42131821F12FAA1811F12F4A1A11F1BFEA1811F13E126F6E2E22BEE1F1C84F821233F1282E8282822E222B882082E222BAAAAFAA282DF71095A848511E121B153B553741131111F1CFCC1D21F38F813323F31F5C2D2337881F2C1D22F35B531FFA2B12B19BABBA1EB1A8AB812F1727239F321333F15E534B412DB
+:803B0000A12A1D8119DA11B4217291F191B12F21F162222F2CB4C2FCE3622D811D2119728292822E2221AA82FA2222212BAA2A02BFE242F1D1411D111D111F1541F2535317313F35F513123F31F183921F3CFD83B23F31F5A391DED33F39F981923F32F7D1B23F1AAB188AB9A1FBA1A11E822721FE623BBB1F32F2737146B292AB881F127B
+:803B8000BA81FA81811B881F1FFAD1B13F31F143432F2EBE82FCE3632D833F389A2327282D822F2A5A222F2A92A22F2A1A12E22848F215EE40011440032A0122922001121440022412281200280000114200008800C0114003884826020024C02280020000FFB60920011200248001002190821301130111200211402211011828800240A9
+:803C0000011482904124480014110000000028226012BBBB80B411021B2146B29132421B212B1419B24299212B9413B84239212F1439212F1439312D911B421CF921421CE82264112F2264192E42D6C1429AC2421B292CB591C2121B29421B6923B481324219F2428119B24298412B84222B84222B842229A842882E423F8804481B61B033
+:803C800011021A46A1612583D61289D612B381D622A1422D118AD412A34325B12284F1A2521CA1C216E122A4212F2264142D138AD23225C852482CB191642413A814112724114A88F242A2114A28B24228F2428222882B4229E822F46914008248000000820080020000000000000000000000000000000080020000001002CF1C01100483
+:803D0000206122340082001218430120214922A852002C423211C0192484230222C0822426C6212E8210C22390111C0448000088480000825FA70A42820010A28289A8122886D1221141C2822692418219B28214014A02330C002180032C0123190280013044C0C124B0120412004B4223011622224101EFAC0842430C80C1221592881854
+:803D8000220027122CC114224218112542A23420F183228223011824361841022D922446C2242B1210423421133C1139042A040046948240420280F8EEA8000040022A0822823C2881012C08252188AB481C084A02424041521800232221028800112A0823042140A241200180222124812201F0FDFD20020000002400008001B081942256
+:803E000012420024104241021828248224000000400200201802002440220882009E1D10423124248228271884324E22150210582214350245CA2125011126011110B2218132122148400134301310012890C22448112B81244E828038842842228304EF4E010044002692818091621121406221141542332C14314061121043021C2381C5
+:803E80000200315021100214302290829082158208290C88B02228A48284F014EE2422112224880081221002400810A284242A210400214041022C6221B0420800001901000048201422011012328400200467B75048414291400122401C042180426441614100B012441608802A02488200C09148848141112081022002230626020081EB
+:803F00000010B2C506891132480080845161424442803B88402804422210168802428863082124B08101D082040080442A1884142428022054284002278240F4D5CD001005818011922210180100250228142400404102401808000018294204132212041302A440424806008002430A84F01BAD404454419481141A942245421408008308
+:803F800058228D14491241026041954402482886082124002C81114448C92444481E22828506908261C022002312E8488202445FC5072C018100001227128C041914220941244844482820C412890340CA2420840898E03208800211508122208412881402428400218481F03821200420021D429044E04204294482448414848404002097
+:80400000412A0282210000440040015424008001400182860282240020043FD80A441144241180211121081211821112B082120C24835228803118812844A9124804810028448004A0214C428822018820F3244821806488308C244F4B0900000040420220342821244048082400904221106248009046902228612141125129041849064B
+:8040800028283124448122C04640240488A7BA002418844149012668421100213022110061220021899214C081891191821481224A01301170410828002111211904284608800210024B2483F5B363248E4241246414660813447144324814144246A5244686064044144444C21115A4424226454442444424C424224440E44142044414A3
+:80410000A8299446824958A4493C88418141D014F11732408162121142241C044214149042100200212820044280021004202428342210018055212C04502320012440824C021002005D4F100441281612210180C1222A081880081604339942112B4936C229899488151C2284044800001A44012E18C0284A88451228C8982428303848F5
+:8041800052009668A47D432400144800142821211400511016420841442841105424412140542360244042061A22410247214082240C244006004548184408F0C87DC011342A4458244D1850822222400428221018012183042304B880181189A1842A712801428C632148228084622800244C04288C46088904280021F03A753469E16856
+:8042000032112E4E43D135F113128B212722174A2D221D224E28312E264E41446E32812E83A92492442B632712B4814DC21542C641A9845642D0263511121364152C5242A72123022D226A6414304A286BC689714824348A43F4CC855E1A8F410714154181522389621415FA41246D11142B81153284516145124A92364394244E86C9D1E5
+:80428000C8323E612748C5B524622C4F62612E1642022B322E2450612AE421A2122CF2131813B21ADB21B888D8A45CA2B02254862FA251C4842E4881FF5E011F64046F621269542FC5044B46144A36494A54124E5227143A784AF885486D4440D41A941846D2248857D19F939242AF1855494285B44CE6466242546D118F519344B7454B42
+:80430000168E244F4CE474A48434216F24E148B2BCD8E8F2C4A82C9C440018496CF120511612E581D41888C411481C89C493487C89C494487C49C897C095401542041221124112411243221404CB12502CD02C01CF2281B428016C81C416826C23D84821D2482142F455E4A04D2F13B338D182F49858AF33B31AF4322A6F417487F79A18F2
+:804380001AE4497C82A4193F77B29AF8A8253F9DF5737FAFA9FDA8A8DF15F55B41EF28FA686EBFB1F168EAAFA4F5E8FAFF39FD1862EFABFB581A6F27E226F337138D28DD488F84F46533AF86F62C3A8F83753DF3AAB89F8AFBD1D48FE8B8DAFD5866AF8B52C8BAE7E3E321B1A8BA34F3B2A4CFC90E4B459F16F62D298B73B43FB3F31B1994
+:80440000AF237212F3B717EFD9F1B2A22F59FA92139E122F2BFA9B8B2F1BF7D15BEEEABF9CFCEBE99F15F55953AFA8F86AFABFB1F178FAAF88F96A7ABF3DFD1B63AFAA5ABAAFA7F262323FB7A5221B518FA4F4793B2F27F6B2A2AFA5D439F1B6F41B639FEDEE25FDDAFA8FA7F63A2A8F81A1772A42B282A8152B27776B244E563F72F62141
+:8044800022F7725E5A3FB7F35B523FB6F366447F77FB4B4E3F1CFD4868EFC5F947417F7EBB46F475B4B5F2AEA46D487F93F38DC9CD5AFFB8F86EEEE5F27A7A4E4A2FEFFEDECE8FF6F7A6AE467E56EE66F527463F41F224241E14FD1F2F46F43626AF45D6E6F3C2E49AA8EDEFE9F9CEC8EF62BBE6FE74F6EBEEE5FE6668EFCDBD84F8E4946C
+:804500008F954AF2C6567F72F63F377FF7F343C3BF7FF75B5BBF36F767677F76FE5B5D3F36F3CFC9FFF4FC57536F66F7CFCBFFE6FE1F16FF73F3C4C84FC7F7CCCCCD4CFFF8F87D6FFFB1F1EE682FB8F8776FFFFDFC6E7F6FEAFA571E6FE7F26656FF62F53734DFD7F35C5E7F75F17666EFEAFB6E667FF3F2E3F59F92F7CFCB6F6CFCFEDE57
+:80458000EFEAFBEEA66F6EFEFEF4EFE1F1666CEFCDFDE4A64FEEFD8ECE000010042410042200400224400242009028118120142324020021501240C1484008841486484108840028003048F01187C04111224092412448411956224880148254128C44518100142C4441024045020025822202A9212142981250222022182218A24821821E
+:8046000000210014AFEA0F2CF4112485F3112C83F4112CE7161D2CAB141D24AF349921AF2419B54A3924AF3439242F347B24D812FB24481CFB244A1CF8264A1E214FA2E419F2224A9E25ACE449E2A2F491242CF4912485F291248F24F19124A7241F49F24A121F41B26AB911F24A9253F14A924B43AB9443B3427BB498924F8384F9244A5A
+:80468000FF47016F82B511D616E181F262111D2C6F1661C1AF14F11124AF54E9C1F248B11E28AF5429F34AB512ADB51AD45ABB12D458BB22C415ACE851D2A4F198214D528F11D234FD18214F227991D8A4B19176247281784CA229E73213712E3291AF467811D42ABA11D66AA8412DA616D8482AFB4AA42B4B2D242E5ADFFE09848200207F
+:804700000800000028000000000000880000400160840000000000440000000000007FA841839622251C41E24294144C44821CA242188E421429140A1C810400422541042290284002002410428411418884022182C24381A148985042AC22628820F8D85A008A01002C018146B81422480325041A88E28BD422428212A421498802291242
+:80478000C228411E21634AA4848A8188C282009082814E818608830248290841B018084A81E31548F4E8426022CA5284147044C21443C4484634861B242931463CE22408896211242444124F2104431802814C62113F4812068B816024100614214638418D82412AA8C241924AB8844172944842A2821A6829B7729042122140A2214048C9
+:80480000A2290020182291289AD42282840228821C02282382428802800C2C888208189088A0820084A04121000026A834162814F4973F000040111122410220080000502212892101002100408812042091820090144C120600852249012505008822188200EFEC48624200242821262204D8142D52A08586012014C843117091A8282111
+:804880001121112D221E22128B122CC814C02400128011014886324126028B81C882448826D42A011A02F0EAB924004002212142A0811188A08114000021871112898808145021A021C0247012048E240040A421448084D81294B2141A98C4100420218109D0BF052604001C426122183042241A148284082054825611021981522210023B
+:804900002825383216880812210018184125010081101258128880B824982A212800AF2A0844254864344646494A43025122800822254803248038129301008800202142180425084A0222418100006082443081890824124C8211F2EB279049A0244302200144424341110212C08452144A31841042064444888281514014028D14902430
+:804980004611641800275824404218C4424880B2940241231848F4AEA9104212014002C0411880918842488004494104400182220043043200442419028116241108B0280140810818501200A0280042AFD20737442582722421541812254227846112A38824C122CB48172559412208118523382400828141124D2281441B2150845322E5
+:804A000071881114F8912C2410318A85C4542934822AA821A0214C1A88F43C1B200845016502A11142121412288A220400B014442488911400446044E01102100465022212412800210080020040C884D0420818418F984D012502002225022C01128A82011315010020C14811488064218C24A241418B4269421414D4A42118664CF04458
+:804A800081F041843051A846321411121823180400C2445FD30C130228C0216014D39243501244424E2200121B81C0191724001442240042004152C2136428E0110440121812B2148808138882998200898424249218D082018601241C8202800419011829A2342824114814122100A4115018901314200120011460314457814415440850
+:804B0000001021D22408411843084100DF7E074006001180212282881818C4844901593912414445417214C1841301140014826048604C6048208824088695819041318004C8806881294108845FE20300341904239221283121134802400100401208811002301221128426C2344024110119381880115A2A432191A2244014C212101406
+:804B800002222824BF1A04002824404108C04124604228408141E2A46114000014211840015144004A01821D12412440010040222811612144002441824C18F44A4A24408464431444422501431882A2182146028E22A0288022880E8A0268C02244B842C82384984129118214A18180084001400100C2484664854442E0734402271811AF
+:804C00000021281281481622011621131203A446C89994178284301226D881484281224102111901C032195141A35149503210034502418358248888438848015FD70A84800423682880A4432A0144468212226166481D2480022506381139081844818648014048C444400280048C844804681E4490444824110063026F480E25718412E3
+:804C8000D2226222A6B349021F13741235818A29C5449AC1142D929E965E184C24F44A85C417444B28421C33411227541D218F4E84E34824F5C54617D88657734F4814F19653F11F487481C1D229D211EC1164212741CB158634C8B5E444F98C241C52288FD44E31218219625233982126F175782CB1618C6923496E211F160616F1414138
+:804D00003D848FA4F114A1843CD48AB142582135D2BA888161C849A14E8886C4112B116B9128A9799893888653AC2DD416A186213D144F18A1184C94C243F1C4D22508CF1208CF71494252432633511C52422D4225B34AC232273129F2221A3B14657213F36124218F327213F12B18119BA23417322F11F13848123F363215C3E3A17A169A
+:804D800036465D511A5824114B1D17316F4451C1CCD4127814388317388612F463444D822F2838442DC6B014A482DE4445F4ED52144C42012A01344001141222821441B024044B4AB024044B43A042A042A042800C988008888048A884E02408460246022440022484249E48C04870D74ED245E284A2226F42A2137F72326917169F87F609
+:804E0000A5A51F23E322FA52544F6CF8C6F46D246BE8AE272E57CD272F3CFAF8B43E15AF25F6C6A76E323E118F24EE14E314F21C2D8FAFF454529A9548CE521F8548F222A24A55DD8E587D47AFCCF4C98C1BCC3F24BC6298441B446F25FCCAC84F44E484F4CACBEFA9FD6CC8EE88E7A46FCC085D272FA4D632D266E623F32727A7223F2691
+:804E8000F57B385F7AF8A6B62F23F27274DAE81DFC24165F18FB22243752CFE3F1DEB4BF4FFBF9D4CF66F5C2A33F3EFB72518F86EC357372F5183D9F56F456544F55F55D5D5F65F5574C1F61F133773F45F559598CD5D7F44A48BF9CF884948E823F76DA15B444B646F4DACA4F4CEC8CFC4C4E6F21B56676C4FC1E5EFF31417121F22546CC
+:804F00001F22F234162E227F72F26F445F77F57B7A7F5AFAB3B41E922BB939B443F547413F5BFDE242EF2CDF2AF4B7D5AF8AF844619FB8F9A6C62F22F84963B5A3431AF2D8E987FBFED6CAF4D4DC1F3CF495D767786F7B7B8AF9DCDC97882F6C78C3FA1CDE9E943F22BA42DA1754432F24F58ECC6B44AB446FEDBDD2F9A6648BC8ACF135F4
+:804F8000B3343732FF52F421235F67A1227F72F26D257F57F17B7B7F59F9A3B72F29F9D6F23F35F157556F34F5E2D53F19FBDFB9DD5FBF9AFD89A9DF98FACDCF3F3AFC12A2BF91F3D95B3F337437F4DDFD8FF8F8F2D61F4CFCD1DD1F6CFC9BD41F28F8F7B73F4CFC9D9DFFE8F8CB8F7FECF89FDF3F79F963E37F34DA37F426166F64F4CE98
+:80500000DE6F24FCCEC66FF1FDCA886F4EF288C24D1EFF520A002100001E48241226220112241100301110011100100139011810064D11D0140165014D11402148011440A141448A44840482006FEC0427186022112411241162118882272400484A11B14A09A10086083512880141C088DE2420482208C092826088E112801222410421A6
+:805080004824D042214204CF4B0E4D431F417228F2112487241F49724AD141F24A111F41F26A9119B24A5985AF443924AF5439242F547924F842954F82E454F9244A4E854FA264154FA2641D2E4AD6C54A9E24ACF591242CF4912485F2912483F49164A7241F48B64AD141F64A9219B64AB985F44A9243B24A3934AF247934989A4F8394E3
+:80510000984FA2945CD0B4E441742CD341B26CB111726CD141D216F11128AF56D941B24A7B84F84A1543D85A19D4527984F8429567884655A64E954D885651A4D6416A5DB49E25ACF5D12C2CF4916C8F22F49124811F49562A1F48D62AD141D668D941D62AB385F6489243F24212478387244783A16783A9F8241ACF860300001004000009
+:805180004400000000000000880000400122848004800800004480020000004001FF71042001210014B038A4180048002984C548348721D2832882021D284581022480082800111D8892299811221D2284118C62188186012410080020044E2E1430A2222C2844028F3A011485E1120C312995282129819121E014028482200340B824618D
+:80520000A240F224122C224112942143022073C468112811248D828931212594288E22B2411621F4B1C11430522827284240E132B128450126E142541227254E282C95181CD1A262258D61281282871A3228401836A120B21C522219D128F89442A2532232212B21C37434883A211D8283C81821A544C82296021621F1441D0028000021B6
+:8052800086089285A14800002148301188826082005400A021A4400222400114120081134811110824C021802288122484E49903210028002430224427249092001120120228824E840024441883014221C284A01200901248268214A44120190840084820012024F857938041125432244C434125210400211C04259812408AD4412412A8
+:80530000C441A04244299423224381922210544281602238181840C12142868101988A2218C4424F8BA4834442DFE10418408402411121296244101212420125383221812B42482A0448F02244D0282582042A54820021002F21220652E01401C2881800224A182495562280D4DF0E2150221542A21210250123041A0842110000D041C8F1
+:805380008441140047211021D2428128024B1244810018360244C0211891008989080089AA184C84F86FEF1048018724451228D132A1141415081B41132112062228004421584122F018824800118400E082118888044432142562422482885048108802222140F679971048324100241004361214111208220040029013882C886141A8F2
+:8054000040D22431411812184E1284E04401910044450847821849C2182228C01810548243018EB9202441041A842202810000001C1142528128006012280041101801D0480240042001008C04181100408264218240A88200FF3B0D481601814B41262232142B41404893118711F02212C02213820230111CC8A228128D144285721411CD
+:80548000C21881A01463113894501820C34C45082CA21841184CA2248D123A0843828241E4F3020065012542C81211811B2125014A02100510082141A042444064220080044B12128082044A014140032B1215088A124818028110688844242F9A070025084688816484304423840620461C852424442142544219041548224484042021F1
+:80550000048002400112121A2881088800881A4AB4147212829284285F484F02002414001214841481318C02009414840000002048420A8044044444001B2189C123004234838191324D128AC11224008029018F740D48001A1402000022008120028091212441004100831808A40084008044012141481011880100008180C1848441D043
+:80558000AD0A000030412034424800203112426A41014222503222228088C1410040812101582011512800208408890888C88008004988029FDD446218142722848400804442224201220089410842114811421018542244414445488408841014844431146449481148C28849421444D4248894122110F4B7A800818432160116C12214B2
+:80560000C414482170421214848421111104410048840042C0418149A42190348082C8228042C262E8891244822108210012001FB9430100008484210012858104888142800418100311800800100928000080812101804108C012880042120080016F7C0524209244400121001002002682885118322811902100001058A2410018221888
+:80568000441351845C4484144401481008101408004400EB7FC01980440942141440A14244E01122A141180081489042E04201C800188041C92160818004241042C22200644828C0228C822234444C02005F8407293188D048B21A5418A06123D428A442272421184A2E3114178485E112B4611453211126018C341417A4848165084922D8
+:805700000120127118B18941212131C128CA6425CB88446243E8AC3242288E14892388F2525624154352AA4E1894197118424841C4332E6815618123136E448D514A041C5344469124530491872850626CD441C14C87538E1418895444441742276545E24444C45485FB18888423F1348249C1A643D144F912466B2147414742D0610942E6
+:80578000112AF21142114AD4117443924157843314295429186E6C3BD2121F81F15838C0214C7422C56420C48829941C278430488CA1444B234B111AE211D124C3493F4392126F22F21281339D32A3CA1823B892381A8B82B04441B282A81145F2F2C11450121002008D12901850185018100800800419041B48803418481249249144907A
+:805800004428412849817244813244284D136818844E16E044014C2102322042E45B4F8371417129F92D6787948F85A115BF36F3571FAF81E196F268292FA4F41A181FBD794AF8F4B887941D5197111F35A5444AB4C6B8C4AC145E58CFC5AD558F85F44C589F84B54465578BFC4F467464AC315F12F629489BDF5E726F27F732425BD71EAF
+:80588000922F23FF7ADCCF21E12DF572D4AF83FA48CC2F2FFE766126A2A32A3B22BFBC08181D49B5D9DDF459599F94E434F46972FFF5F51A58CFC6F2282AAFE6F61A189F9D5FECEF8D59991D198F82F2717139F441415BFF5F5EAED44AD4CCFC58588F81F44258AD598F85F54878AEF84D644FC626F21171DFB5F6F8FA1F37E125F75272C0
+:805900002F2FFFAFBFAFA9F9E8FC1AE928FB3212AF8FBF88F8F2E27F667232F684848E842AF1727A341D123D4387A2FFF2F248491B559F25F57B693F1455A82F77F76B693B649FB1F1D2C2AD18CED89F95F5515117151F15D512E454D414F14441884E48CD4C8F85D4E8F54E4E8FD1F4445487C34FC9EE41E641E543D155F2193DFF6D7D3C
+:8059800062F656762F41F6D7D6AFEEFFD292AF88FB5E526D166F43F1AEAACFE7FED6D26F2695266B884B884F62F1C711343D12B553AAF7F4BF94F459598F35F57B6A1F9455A82FC7D7B9F247689FB1F1F2D8CD1EEFCC7D19F959499F94F67171111F54B445F36561528F84F49C1E8F85D4ECF1464EC7C14FC5F5443C4F4BEB43F138544F62
+:805A000041F35515DFD3F4FFDF7F71F354566F67F5F7D7BF7CFCFAF2CF88FADEDE6F6AF87656EFEFFEBCA66F6D7D6692366F49E84A7B24F6E9CB0000C011404108120020014034110000002800180081000018004003180000000000164882044004DF2D098200194201241143146124280042124448E0824411055100400A00214088322D
+:805A8000240028181A623220123128100A88D0220A002D148001A7E3C0521F4152281F4132481F41724AD241B24AD141B24A9921AB9451AF143925AF1439242F147924D812F925481CFB254A1CF8254A87115FA264192E4A96C54A9E24ACF491244D421F4952281F49B248F19124A7141F49B24AF11124AF14B911B24A7915B84A3934AB23
+:805B00009443B2427BB498BA4F8284FBA44A5F110B2D191E6465F1112823D4C1B64AF111648F24D141F24A941D248DB34B48AF343185AB3443F24291578329F92748987FA285F925CA87111F227498F5245A96D1B4E519D2A4F551284D8A1F49D62CB581B24CF11128EF14B891F24E121B298D951F49F642B21F81F64A943AF44A94AAF489
+:805B800042B44783A9B3A694B2AE5A2F320A000000800184000000000000000088000000000048000000000028000000002501BF8507001420D44104184904102801188A41850517420048840020861228016024926642014C32410010081668128094884288801864488288887F8A05A028128CA21224CD128722228228230A8A448106DA
+:805C00003046461228813221831A326455084825784A6442C91114C484861AB128496482601A4F88D11238CA1A482441182251812C8431682641F443FC004A1221A2615354482F22E14402493222323011B81584147245428221E681622A82412A84D22854281D482856B81AE862A4848728548F1104818058244788998669448E2830820B
+:805C8000708148F4861289E8126849CF620A00188400294108826088A048800412462412081011084A5285001241444144504180A2824422702861893C210880C148200148A042006DED10024128004038241221800114114480210100604420015022282200122250245024004400003448441228101804800117B190156012290126CA89
+:805D00001624180024C012412504128D429024268162128622127242645381901642B024188191111612011941622420322210918244A021488C228C766844F4173CC0144025028722006B121221001602414130482126641240C146208174114468222242301400111001130121212C0240328420A22148C302B02405DF5C4F42012829CB
+:805D80000130142508009012401701181818002822822C4212245222C01400A819227114C21245024024042042914390140081A0846284416F2A0D24848B242C0A288CE3814491184180C2181E442118301585129122128B81862844A584422814112D4CC12E128B1226C488818418A012222C81332488822A69424278458814082F42145C
+:805E0000F8EDC680911C174440440880489224841846C1280045210228212601233214C0845110120128595428882001800221221141208214120880C2222001BF7E0A4400881114108408402124082220048084410C10210200184002800822223297227042811108112311012400000084F08FF3201132292815C4298C130C8410A91475
+:805E80009CED4401601419119861381C62282678414444C444282D11502CC11C276A42269818322E137022A321366A122492118A9124A9A452412289024B12F08499308416140421001A442131220050282218414C0221D0484188081C82440140222442D42221888C124828A24100181902824602008148008344F85A772001D0494401E0
+:805F00008100104211080040185484C058E082048C44E381048C44618441278482624318088F14024A127162042724428B1430526428248F245828844818442FC701001601415180018A0118A0181941123886812CC111D0180100892168111212206141403811125230141044684880018E2C832241082244221880745B0D82428418AC59
+:805F8000014008C01A0014841824124100144086142294124261100221198211181201882821181143211102001602A0141881E022F1DD24241854484E284448C0128183018C341110924418C01100004001200888400464124480D1A202408848020022462812120418004901817FD703452141361415182821025082282512487926026C
+:806000008001008800200100208243B114521228001C84724298294784286D213018184668228422863822280085F174530061180044B100232221011418000044181240128102140018402502224C0460428011A4120022410043810228100848415F860B00190480082129018008008C0881241486081226C128001018314C18428120E7
+:8060800004444B2820412411C218A4CC086542440881442444266882F0B67F2444A244A0182782100881508324850216981C222100190619844802241117421542061073124642164104001411181082019014412118414181486F62022618813421221961324881292442341968108212444252149023C032803A212C4382E212488108AB
+:8061000015084824508449311A2443110190224311022548148C21B46261228F634332261B688CF118298F83186AA2A18CF19A128F82B11213C3438D1947442D3CE742995124885E111B214E4211621F2132411E6A46D3217654447244F4139457468734241B485F4284F11A4C23F1464157483F5184E1A174448C14781644F88242855466
+:80618000C62AE4116524AFF649A1119655411F46D145F111851711A4248C36129B841E193789357228027014741A54C28B4289F928252EC3A148871819312C1E1993A261AD922E2334B8454C7342C8A44D221DA34CF1182128A99C3C8A71443632AC322E8F81FA34188341D488D288F1AD7450614147314944F34428A11A170A24948512A6
+:8062000028F1129887218E182542F111111114112D282489F13292143F4841D422DA44D181022B7145B412F12A341C7214A816CD1C8FA3D222D12CE12112721AF23A384D168B1224474227242AF35C18624F42F6B4C300290121E024084216A884E024084E8180082C488848081588528150825083827528F8224890443022100C2220026D
+:806280002A0888800828C0248022992820D4D749B2B2E1A2F233222D123F4FF563648F87E58682F4B8686B4E3B239EC23F38B483E146A6B98F6AE28951CCCFA8F978789EB88F85F68A898F82D282F228A9AF89FA38285EF7DD8ECFCDE476FE33237F4476547E18F8A9AD9B641E1E2B5755F447617D91DF8CF8E8BA8F49D928A8D42D14E799
+:8063000042A5F8A2882F89A9888B544F44B54476424CF223154F72F6272E6D1FBB1B1B339F87E586F218428FABF7EC441BEE8F6BFE8143BF3CE76BEA89BBAC728458CC5F38F962711F98FB5A5A3F1CACF65E688F87FED1E1FAFE19B9CFD67CBCEC22FA2B2B7F54F4544C123F1AFE4F4147A12FC5F4111A3F14D4FFF8F7B1AF86F372584FD9
+:8063800064FC6CF865F41E14A5BCC2FCFEDEEFAAF95A584FC5F7567CAFED41F332167F43F73922FF42F331187FE2F272112A46F878A827C32FBFFF123B3FB5F813196FEEBF1EF32AA6AB111F99B854B563B6D9FF41582F3CEC26FE5A726E6B2F25F7E5E2EFF476A4B7B6D3EAF9776D7D272F6256247F7AFA49617E7EAFA6F66D75FFD5F7BD
+:80640000E777BFD4FC686A8B64AB4D6F4DF46C7CE742CFAAFAE4CC7E7E2FC152CE4F41F56C7ECF444DF3A3177F53F3393EBFD3F23D1CFFE7FF7B198F83F71A1AAFA7FB7A5CBFB2F29FBB3FB5F87B59EFE3F39EB8EF63FB1E141F99F85F592F16F6C9F31FA4F7CBCB7E62AF25F6F16BBFBDFF65667F71F3FC5E6F4FF72EBE7FF7F73737EF5A
+:8064800063F71416FFFEFA6D654FE7F64A6EDF76F77B79FFFFF773F7AFAFFF5A7AEF6DF5FE5ACFE7F73E346F6AFAE6EC4FE7F71E38EFC2F27476CFE6F73425400145011C41484148420884148460816081444014018012021800100400180050145024100424164862812440062412811285043F33040089012244801222012818112C31F5
+:806500002400002F542121041C8204484691119014C01228141E2424001A1698614AD1C1B222810449044D488923A8244528044247129FEF0E2CF41124A5F2912483F41124A3D441B24AD1C1B24A9921AB9451AF143924AF143925AF147924D81AF925488D915FA2D458FA254A87115FA27498F1214A875DACF4D824ACF4D1242CFC91246B
+:806580008F32F8912C8B141FC9B24AF88124AB941D24AB9419B24A19B54A3924AB9443B3427934989A4F82A4944FA2D46A034F82B41136281F417268F29124A3F611242356C1AF66D941F24AB24B218F1429F24AB751ABB443D31AB9A7D41AF381528D355F22BC18F227428B297F22F5D8252D538F5D92561FC5D2A2EC41F626D31D2C4EFA
+:80660000921FC1B24AD841F24A911D2CAF44D981F24AB451AB944782AB9447832F447934B84AD286B442F9241A360E208804000000000000000000210000280000004008480000000044800200000000F084CC4034219150424C84E322C11C1E48124825F8884114821504E068F448811483014078288174A8D281E861021218620016410E
+:80668000068C0443B42201328280046A88A8522822903C5A82B4454FC15243D82648C93A15124C897285B228E891082D1686741108C6D248341A2849C5458B24214F34C24483521646048F2621D6246821EE112912E488A352344C6C83486C817C1188D121886581E947D84AE121A4218285D1847826438174E2648825D12C622416C81155
+:80670000E9D129D1846138266821864111453248A374827311E491347821874E27848B246DA8E71C2E1697241A62212C23746228E128867448C244412A646149472191812B61288B488B2120C21287431AF694481E14901411654198121534248C22E248A4821E48245F88446489A0484443B94882440410C1254001A012424928E4120939
+:806780004561C12A1181E881961280688980049E482D3448AD341A94228281F05B570040814201C10028000000001422000000202204424181000020014880040012211118102248040000E772A0122D2400302810914818801442830929218124618822C0446E81234255221C01298134462021C8220046684150142521826884180048A4
+:80680000814A82218432448D84F06219E022210228804218011A024840830812C0412AC18828C0443C0E602213412285C44400602220218401410040082021042A0400497488045F2B0181444601148444304800412302181082010000211828459182480074846081884200844C0417241128821A74123421002588981442222400BF3F91
+:8068800003411032184293944846391848182848144314448811A221112A083C021450428C8482480444202C018D84A5A481244180182215A8484308180049084C014FA2F8A513003019408812040084248110092A04C1701248440849562822421012018A04402202211A1442A48416342C848014181854842C712804228800FF6D0F14A1
+:80690000110028808231423100881E422084081480082004001021044244812244908114200422482001400400858491284E884281F0CC4340512116698183E284B24CF248112D5839042481172117444183221185319140A8244B24852232468D4162604443482CE228242168B8CB142311B444AA142218528934C4430887414427C28B7F
+:80698000828E689281C3FAFFB6100400421100008981A2844881484A08A122A1430A15021100106218200410844243048A440241861C0A4018180416881104490424CBDE40110100110021112A0100C048806444C02184442E4A142904208444146448221E2410110842120025014248001024044200226082CF290C80011C128811088120
+:806A00001A388800422002411411484B48424140044420E221A25889E42821048290251C229648390481828CD11804460229984440C88800244FF90C20213421841181508290382002904860444C44213284444D488004884248366449C1868202C28414262141484201881A440900214410480880F2BED21485B949A444001800E018D165
+:806A80004458444B22682228001470417242DA22A4313B116B898A4804282417141DC119F3184C85F84841484386A4422C344110784454C44B262AE22244248C840486722252228B11CEFE000000240048800412008214008411892402000000440020128402000010420248888004200487440000C7C94048888404410084404444248314
+:806B000002211001882129B442C1182A81882A0440C181148C6882844A8204142100C01425E445A2242882000082212129F1ED935088424A040000402249A4822888002021022421812AA1488E81004602D051025088424800003018805844A0228242488001902821F0AA970048000000290144800200000010022A2184880440081400BB
+:806B8000C480040041208204448082012400420021C018FFB701411210010020012400004001008A94490000002044042200000000001814124008000000820044BF3E05893148200400001C1814342428220010018542427211A44192200C8091215111818183944442000080984441433222221200002C542824122BDF40688248480053
+:806C0000212411A081444C082A62116048408804274421181889880800421425011648084A2412022CC14100C4442828200484001016F26AC70040040090220040084800404128022022044800100444803222208188084002200182C200004A88C4480020F45D5800004002000020480A4800000000008004000000000000240000884866
+:806C800000484800008100F0DC2A108402006100842C28088928052C0188148942588149B248964828800200C084802A0220084511223211184622A44412822442484884888C02813F6B0B204104401282A211E02191889220040020B281BC48041442428C04D0481482C4222C32244112001002256284158289289842484A81A4842024CD
+:806D00001808411FDE071200110050223914810C1022681815511417818442A046412848138424247414C42443022021624A8042021829852899488B8120A4480056D848C4481084F436A7F0222227212CB11221B112012C512239F812111F11B189F981898F84F888418F8424549115C1418558884F84E644544449F22424224C022845FA
+:806D800054642E242F22F212222CB192A1812B99822C512239F812111F11B189FD81898D888B488F8424C44880548885F84448C71FF0262265E222A311121240512229D8B2F1111319FD91888F81B888B4C824641415C141155C898CF44844C5B444B6242202002554444CF326226DA22E123AA1819A2868182592822D1B1F3191911F8932
+:806E0000F818888B488B4C420048C485C8685F8C080000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000006E
+:806E800000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000034
+:806F0000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000B3
+:806F80000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000033
+:8070000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000B2
+:80708000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000032
+:807100000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000B1
+:8071800000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE31
+:80720000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F0FD
+:807280004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000020
+:8073000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000AF
+:80738000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000002F
+:807400000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000AE
+:8074800000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000002E
+:80750000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000AD
+:807580000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000002D
+:8076000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000AC
+:80768000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000002C
+:807700000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000AB
+:8077800000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000002B
+:80780000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000AA
+:807880000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000002A
+:8079000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000A9
+:80798000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F29
+:807A00000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF9B
+:807A8000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000027
+:807B000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000A7
+:807B8000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000027
+:807C00000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000A6
+:807C800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000026
+:807D0000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000A5
+:807D80000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000025
+:807E000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE44F31421641089C548426C848412022C914823CC822C0448B218E42162308128290212901518B3490881CE814120225C9AB
+:807E800041251A84782408480014444E24242C42D468829628821221EFE6042661841CD1811434425634244E221F65CA142213426442C994243D326413A3828CB118DC4A5C261F2A614113F8AE131E8819F8CC314964C42538611F842241B8159C48CF2324B4447222F41124324B128286D284122493128E128A911A89C898EFC507211273
+:807F000010C8424004426F1235124011246A822826C128149088124E8A4422321C28C1848243465494221C8252828582186264442446C41100800864328C82B412081618F84ACDA024148301514852844C22088A818148810448904235028C341486621144D04A52183286284462A4482061148C011A2A4604803111826C44084112A28190
+:807F8000A901F04FC11420142144188822064084021004244180230324008224121728121784148248140011008C048082026042442841400212002C081F730E14814001448141002860424042146621492188882108404201002011280870480170414414188804498202002829026420820898DF820E00000000000000000000000000C2
+:808000000000000000000010082008000000000000B0AE0D2A011216A44117246A0184182B848889914821811784182245C881841B2147A446812484B411622482200688422884C3024821118419B648A968002991C418C868E08618B44441F628E7002062221502B02BB124618285C241308417A44D823AB848428482A26182284428801E
+:8080800002C9724164248C69464614018A225881364121BD419184241689A88181160226C414461402A282BFB50100D024A241A034B9C21890C8194C98C48531882BB44E3843828288E313F84428398424A424148CD612C842688098412883DA4812A8141113C849663488138C88188238124384032DE8444BC143B8CB042A012A214193DD
+:8081000041211243E2815222804178421254180045C8218C04402402A02141460483B92464440020489121211A8431814E121E282091184B41206A4449048042F299E3400240041006800400008244820010242408004100424004802818022400480085210811002100121004827FD30B4414102AA41484410081848374811844048452CB
+:808180009E245410114435224C1451C33D9450421AB81208212810B52188845441A93D984001181C6449248E1A81C845880845D26F07501210021014044008421908409488488E2444441C0414214841444988041A981280281812D52182044661899894141021C4842041A8498008644F970741008524E4214408800481848441490820C7
+:8082000081410190844422411552182D112441448824800220084245221408822041C112248D820045180488378A902114428044314847321002A0422D4C1480092644981A2D24818902400A1D48284811418502E12884842A511A4812128812498901828CC49840988812218289B8ED0D5082C0418342841248C41241211392811281286C
+:80828000301880944246411288411108415081245A28324880042128A842464828364CA028A4162202589084A1007FBE0B4944544210411A015048142048420441410082890148860423022F21185828204844C12241000050222C08841123280588C0148810088428FFDF05473244611166581C467925088C51233081178C10A81A301CA6
+:80830000812DC84B618714422D8C50A28413D98412183A84AB1C259164254448E82231212CE221D4281938288F2528A88124566288B0181C68C981848B829F5D088C1401400123026542046024412D15401484021884608218C021248314220410841282021042A8842024A814111848896888384301820088705E058044A114102C1111A4
+:808380004A189819872884418C981280888148A884608C00424AD88408424A98C1205548821240081E81988B188333112A3118293552581218238181213114BF540962444C04221814422213A212222321B12864444E81808138588021014324819118C05C87428C019B5826B41188D1816882828440080088488860884200230424F0A6CE
+:80840000DD248C02C044CE2810428464488048325843880841C088414124411800418C7412021E8184120042008200002440020010028485A4488100AD6940149114805182830C208108484114212812100490244284812824444C64284005420081001904248881822E48894448188862644840088A025FCA084044411404148181112CBD
+:8084800042018822100900001448484840268104418044348400480082808191248043A2142984011841188A018748278A00140000120042814088628115840410044C88648818441001824A024881400182880014242088494481048288248018048A011FF9061904281301190413C224274213B928C18111488418815688110823014027
+:8085000058841822818608E0480212907816089C28124A6822241302230810928A8221004821BF8104418002104414044A5121883B124B84502126C414418081C18486348412541188214C014C19246918C200126018134811025092212282100489088004DE81148C01489018188424422C88C4444228271880C8288884496A88211238AD
+:8085800080C948450124C64801148C941400815028488044CA444820088D4280068DA4861882E8B3021917253141788596185D24444EE11F15AAB2AF11B897A9D43CB4C2D14C21B98C2114E4297414F4882846A8123CF522DC16941643CB9852145B899C89292158111BA82186D828F18E3A2E6137A22D488283145242ACF88A8CCB448889
+:80860000D044F1468E24434674218434181F85B11444F32248174921BF99F4614883D49812F21125124E8C128B31874126A4544CD844451D042BCC1E4CA93C184BE81E882A75145488CE998C2148FA888116A2E97042B29842F252A22D821E8A815A54249E241E186A7D82F29E9240C4414D214F4161C2611599488B246F82F1A81A248E1F
+:8086800012CC74A7F48D8C8BC22688C18C4FC8E888F844918E884A14381417C5C73DC5F8E88246FDC444D41F4C6554CAA4298183F2488885F11142AD91843A38194E518B858CA5498B5E4F259C32128C398896C288CEFF141A028C42814281021200001412100122A04281222002222002412890281428C0288062142842284240010020F1
+:808700004224022A042A047FD141A15266F11919CFC3F371411F16755DFD7537BF97F76CBE2F24FE3272AD12A7242CF1A2C5FEF1CF4ABBC4ACA91EF24B62DF94F5D6E48E2C2AD699F17573FF8BFB98DA4F23FB5DB44F4BFBB4F51F4BFB84F44F4AABBB8B338F84F7E8E8EEE22F37FB1AC82EE82DF22F26F352548B8D8F85F138B88F83AFB5
+:80878000BB7AF594B4CEB66E3898EFE4F6235E246B565FD5F7292D8FC3F37D5FAF25F757155F77F37B7BEFE6F66E7CAF22F65B66E764B5F888E49F8DFDACA44BDC4BA94D686B629F9EFF96F48E244FCEFE3D29DFF4FCD3D1BEFE6F21FD56F58F4BFBDCD4CFDCF8C4F14F470A5AE188FBA1A14EC32F35B912BC28F6EEFEBD7B2F97F5D8CAAF
+:808800002B9F5AE52DFDF2B22F2FFD9CBE4FCCFBA2F86AFFDE7CBDAA243F51C6441F13A3311E3A7FF1F17B7F6F64F46B698F27FF72EE2FABFF8AA26F6DF1D54F6FDFFD6461CF4DFD7464CFC9F8648463F53D394F4CFDEC4C8DC49FD6F65153BFA9F9D8DAEFE3FF7ED1CFC5F79CDC1FC8FCA4D44F48AE99878187829D281724BFB1FDB1B2AE
+:808880005E8AAFE3FCF3B2BBFD5AA5551AF948D8CFCFF95A6A6F6DB5BE5D8A7ADECCF5FB3B246B65DF5155554F42F15C7EEF74F57B6FEFE4F46F6FFF67F47AFEBF2AF6DFDA6FADF1DEDBEF7DFF4FC9CF4DFC74744F49A8974F47F2199F4F48FDECC4CFC6FE5D59DFFCF47FFF2FEEFE96D66F46FCC46CCFCFFF55DD5F5EFD94F42AA289AE0D
+:80890000881F94E636F293D3BFABFB5812AFCFFFB1D38FBDEFADFDD8D88F85F5E2F26F6FF9DAEAEFEDFDB6DCAEB81E92CFCCD1D80F411004C0488044A148248E486088448E488014284824490400850444290198001004888498C08280280184248A4402248648A648811200CF730621400118442901811A62121082141215220912812015
+:80898000242844280414490C2D4844D8441C0D00814041C8138283022D1184188A941848184588210886F1DBB7C0521F41D228F1112483F41124A3D441B24AD141B24A9921AB9459B44A3925AF1439242F147924F84A914F82C4914FA2C4814FA264114FA264194FA264592E4A9E242E4A1F49E232F4912487321FC97268F19164A7161F8E
+:808A000048B66AF18164AB9419F64A9151AB9443BA4A3B242F447B2498B24F8A84FBA44A7F6D0425DB4156281FC1724CA12163D481724C9221AF44C924A91AF54A9153F24281842F54D984D41A59878D912D5A5CD8A5CC814D4896D1246419BC6459AC7491CC438E448563C9856149A57181845141AD148E24AF141BB54219B44A01AF447F
+:808A80001994926D4889D126F579754008480000000044800200000010021880080000000080040000008002280000000021F0FD9C208141419414221935188149A48460141A0445A22C821261432404202422044C9368821AD8A42884B12128D141D22218311228532984048158004C68818C2544E4440242C6FCDC71143554211822275C
+:808B000024142502219301AD818840B141D121119448C61802484398294D42C312048217448012E444324223084160482D1383B29462322C8344A281448542024C4182C88486056F5E45614117241468168632528911DAC1B4447882B121A414114731AA94848C3546652284A4811B428AC444903489928513614842811B4A4AD814421440
+:808B8000C114284F83A8A12E434B12423A2411C48E188B1440C2E24C88BC1CF891F55012121844231441032001848800483C016088420041814722891204C842888912E64552221224822522D83211314440424822085028E0441144044448DF7B0422112601220017818014280100120090412514C5212034244413020025084988020004
+:808C0000443C21480222842612D1186881854408124C823448106882BFA30C2D11284D92459814B01622941816018C0416C41845812325A2281926DC4844D88492488B2412CC711592485E264A81A341531BC29183DA848291118A6648C6D21885048A6421484B248344A828438208F09E35D012217211064124121E4816088112008CC101
+:808C8000151880A248274248830428262822C1141C714AA22518A228282119C88819223811298C8AA82421199898AC8184222122188808F032D32042A1288524034C120119054608160480A214C0211C7484712411D88464444D4813124804C4239414524F1108124CD2A48101284183D41A3141814844814CC44845A8244B241038288F73
+:808D0000DC0F1346048A32138722486245487482F8482484824AC2A149B18202258448341C138122062046841343622922374847A3C15D888344A84222402A14A483484502C082282E868E11160CF097DE0010D8431508001A0C1902260400468881044829021A82486112208812911921811140A8C1184004A5632249A83851C028E04293
+:808D80005C84A04840140216FA645860610082483D44848D1286312212192108811860848C81028C192184044C9144848028142404185021002281428C04C08281448C014A420410818431C4A7FA145B1610783522E4A2344889325D6CF2813876C9882084984C8C8A3422608B4413863A612A21E48826E2313A4864C61251434D3243F84E
+:808E00008E118449825218ACD268A88514A3C94C47A14BC24CC482224D22184325B14CF81B95404A44028D1315041A54220000828113C3121A9418414A18D418014240150441C012C0182898D0180142848724682304228200008912A484824C4808F09A13008A04004064441021C82138882C6842821902001148471400D0484108630494
+:808E800088252828A81228114286A8287088A121C400008C0428468406822602FFCF03C428A93442850428135258400200C01114100C82222012285481601C848186984428B04171822418123151641688012318988241182048E68811C4148041F43AEE00C30844302184424B416024800C89414842D58124099968281854150800C88833
+:808F0000904246B42201428E2144008661481411124A18042004401468486E8848848FD10B442150814094428901CE24A9A118A14E2421822B52428883E61201264102288301290120848118341414A0215084A394292D44492184810126C81258004A384241822CF4766D1042142284825621414A021944B14D018004124A9828001B18B8
+:808F8000E016082051614A212408A0842224412C85889D24218C9864110030840020448818B884D218F1EBD81448400341244190114D11882E48502883E8228128420400100443944259C418413534182F182112C2882110642145311242251268888024042150262443221204F03FEF601210042F3844C4281425483A2844249274404C5E
+:809000000A44463444274400216400608171C4318D121480446944400800122512E841B81244041222120016C884D739803291401492811D428B2130823284290868868C05160121002C2A0611154224818805CC6D2470A152B44A9218000084118A810800290C28C048624784482FB208252BD2146412288C04004A12C184111F4463114A
+:8090800048152604528D14835842421825E1416882504A40440159E2840248895862001F42E84264244244188E284588612128822C280221F0D2D110B184425E621FC2E81ED691F461213F44544817242AA1C41594918314F14B744F849488821B881F38FC81244EC24D411E59165448CAF154C146FC461468BF41B451F881311B228B22C4
+:809100004B18C6F893685E8293EDB4E68139C263E14491826784884D1483DD84A2ABC74A8791845ED8244742A76B1449B44252254F22F21A1C1CF185938F83D72AF28A114F2929F5A4B21E54148A6181CF421464442E522712B9427624F9459845041B981E48CF8A682822418F18F8D355129DD68536221CDC445118A09443784488A51C2C
+:809180002E222EC48B1642684F46B61AEC754FD1329641719F141254C2A74449F41C2A6AF682811F9CF81528AB44EFB8F2134CEF3E28D25BB864B713D198B6243144D96224D19D522731AFA1748AFE1C428E823F64B164FB82772F225C6645FA4A4767114B82DFD872263C3A3F4CE4A139888CF8381416F212422169F282C6ED444E888AC3
+:809200007944D6DB0E4001818200240000400128C02240022800101811180141800100450143429814E01201450200640040048D14C03440F4FB89243CE252F2181BDFD2F248627F9AD661E224F35858CF8EEE29F9C9C1DED41F14A48DAF2FFFD392EFF9F9E7E54F8EEE8CFCE1E1FEB17F6CD8B9F8484A25FB66684F1CFC84CC1F58F9C100
+:80928000C8CE44DEE33F6B9EE21B2249F21C154FCDF9D4949F18BA22FB49B6BFB6F28F83AF24F4FACCCB198F85F34C448AF9F4F4AFA2B4BFEF8B4DACFD2FA9FC6F47145F14F6E46E2F31F12525BF34F4232D9F94F654348FC1F5E9E9DFC8F8A9818FCCDE44A59DEF6CF8DF1ADFBDFDFDF1CFCEEAA8F847455F1DFDD7D69DCBEFE8FC5741DC
+:80930000CF87FEC1C94FE8FC9FD7EF18FCC8CCFEC2FFFBFA62C11B66D5FCBCB5CEC65F78F8ADAD3F52FB48FEFF82F2999489F958F8CF4DFDD8BAE7449AB9E4FE78788F2EFCE6EE2FC2BA74FFD6DECF454BD271D241F611122E268F64F627EFBD2FAFA7F35C5EFFDDFDDBDF1F3CFC58FAAF95F55811AF1EFFC193FFFBFB67654F24F5425809
+:80938000BF9EFEB1B11F3CF9218B1FB4FC1213FFB6F69CCB2FC8FC85972FB4FCD6D4EFAFFE83EE2F22F683632F78721FF7DB8CDF5DF9E9E37FD7FE79AEBFF7F3DBDF2F24F5CAF8C728AFC5F15C5CCED26F6FFFAAEAEFB2BA82FE161C8BECCF6CFDD772141F76F6AB677F71F1292FFF3EF6272DDF76F67F34CFE5F5F775BFFDFDF1F3DFAD8A
+:80940000FD5757FFD5F9EEA7FFFCF9FFFFDFD7F7ECEE2F88F96F6D5F33FBE5D77FF2DCE6FC5751CFEEF6135F6D5EFFF1DD8EFCDCDCCFAFFAB78F4F76FEA744FFE2F2BDA7FFECFC1D9DDFDBFBB3AD8FE7FE2F3FBFBCBD42FD48D8CF6DFDFA9EE7E42BDD4BEECFCFFF9CBE6F4EFE76BCCFA4FCCCDE2FD80E450121503448418447228A248269
+:80948000448244A2414C3211441A34481308114C12634431874488838429A4929094D012081810C44849E8814481048E48C0482088024A0246042F82052A244142041932221A4451812C698983244944E814688A8314841A84A2484641082D188049142659A2174C4B82001D2C4F2438112E9150321D288182293114206124704A348421DF
+:80950000A28145D25D032D421F4152281FC132481FC1324A1D64AB141D24AB9419B24A19B54A3924AF14BB24F442B157822D914F82C4B14FA2F448815FA2F418215FA264194FA2645DACE449C25A1F4DD224F49124CF32F19124C3F49164AB161F49F24E131F48B64AB981B24A19F54A9443BA4A3934AF447934D842F9B4484CFB244A9F87
+:8095800053032D4A1E6487221FC1324A1FC112DA41B248D141F24A9428AF449B24AB9441ADB1414EB157821CF916481CFB275A89F925828F11BA25E419F2254A92B48E254D5A1FC952A41B69CF12B19112FC8128AB1696D41E81F248151D24AB3419F24894228F4421F34A8436D842B832C4242FA2F59634402888040000000000000000D3
+:8096000000210080080000000080040000100410020000000014F023CC0028116D1812816AF11568D4198425C9982574121264188C0E84A84C62811B2420628129428101431412BA228C09B0234142682A934F32C48436C1888521C4882116E84462888D248B2142C4FF530F449212501A2E14848014648A15021CB18194114A21B188C47B
+:8096800016871588A2F08241455812412C54486AC8282A8144C46459414488C88141244F84522948A04150424A7148C4848C8801C81E814AF8ED7540E48C43F11A46124CE281E24255C14447891C783A3214167214E111BC48C188472117AB448A611123688AA523C24116843A41251238CCAE541F44011E619083A29F2639282764478438
+:8097000026211F39421E882558488C0EAC92181E814DC83E690080018561814215289441621288112F1408202A4428249A282A641441124150824247821AC2422800454288485824304417882011084448462449648944AA2404D7E6002008880080080000000000000000000000000000000000000000110010011400775E40521340A4DF
+:8097800012C18D214668445B412F1281028A58C687214AA61214D0612AA3146D48641718223887814A043B1950884CC2822316C5149AD81834412C3244258C27D3184838822C14A4261827224C8AE185B888F4681120C4287185A41228144245584829A141260329E8859414822E8250528CB1188268184D549542A825483083812E184C93
+:80980000F64282D085413418E0122A14D4C1722281C412D08A08419AE5220825A4212AC188DEC1002008880080080000000000000000000000000000000000000000110010011400775E0028002490188C2482048A541810281922D2687121A81441818250845082449860824604C082108A921A82980080214122014125A6424C6881607A
+:809880008218482F574D82C31318E5A212844223D2426183D082E128C1861384E281AC81A88662C28B1C5266E4246224481E251A3446162E3CB883A1214CA2291614B48562522362124F8421066882C9581CCAC3C88321674C568489CEAC6FBE4D228102255822E08114322432D0823518499841E081A88286C689836241186E843042F048
+:809900002B14184654248B848B1A892141263B18248E1117228A1331182A8401248A014CD184741288961C4E14922A11F8BFD220621129418443088C96128C0488195822842E9242188B1226E244E1849848A024C423044CB412C81828460428A824444CD2486248803244003A84481CAD8629289694C26082C24BC27FEA0E841E62C022F9
+:809980004CA12170180444192184021C214928C29870140881192114042181121A242432122698314100811482B012E2222916648288902484684508A04150481F6409C0448100C048F04211C028812902200218422624C28A188C1108922C664881412605811E482CA82143358448C28B212F1284480441224D428190428082C18845223A
+:809A000021FC3496C0120014000081202482C88481814604224021014AEA4238482240C246860241408204881244430220041A18881808481A2828880A8142B0750E12382528C2141A223418191424E422244844B888734824239524166C888C91A84E2442322972886624499D244392121A765231244999848D44E63138284AC1362A1CB6
+:809A8000688841214F24E28588E848822A6841188C6CAC40420411211048941AF02815C420C8110090A8C021129041895884C042D08401290484E02228011240C48219B422288801E0881408A0428112818C2494149DC6004420855142A11722190116B882C2268400180081B084440A80146848428148008D4189A21800126C958100216C
+:809B000082252E1C144AC828701844142428C218E0AA44D2A144C2112219845621004140260112110010818191425184802A3312433296618B86412169A281D0364861416C2416082200407582F44882482618428401C3F8366440E4A1025082120041C0858D144C088123028C8218948281922229448C41782418028D2416883294424315
+:809B8000024AD28222824204419229820C232111041A04C04880F687DC9031142A1412110AE911D81802140044502880210AB830486022002004461104C01123140816048186C8151C014CB82871444102184AC3826688421408EFB40E824464006C05119134822488242A014A2238184392248B244D5A801834168188C17698126483087A
+:809C00004860830047880084822508D608844348084EA88212444227187EE21022121829041B214082C1584CC84218808381D12218988A008CC81446882C082A81C8888244412001848C08A7411A8442095608808454221022914200241F140848111621A22114808263426440014088482102402182528211269A1158100120A1414982ED
+:809C800092423948434123B84288840224C47184822608106C846312F8C1D5200141C44088C41242008B21148881408ACE4A828C110449644282244D42449A042A052B9440120489841828541C2A311C1483011AA48118438208892C822248F4F76B60A2122A2471288432388126144A4185A1218283C824C0248002692A81818228922805
+:809D000024874286B112024A4268285C9634481AC2213886A424D86C021C02225880B124A184702224F2932A10B29E43D14292484D2229F1321917C48413A99B1F1DA1188978A1E8219882214FC2E282D24CBC48D8C41A4AD9283534E6B82832C85F97FAD4BACF119924E82D146782CF25FC5BA42F4AF32822567EE4B449B842B92AB38292
+:809D80007844C6813E288E94A321BA78F884984E6C167B68F493CDE076645273B129F431293B141F9292218F233223CF6459AB4576128811A8368D21FEB497282B88722E3287218C72A8B434D292DD6EF3441A4FA3B18251482D2C7E5C6762AE822426D18481D817949419C3159A22FC485A489F61B148D98AE444F252766FC8F64244C3A9
+:809E000062422C78C64BB21153218F62E3A1F144128FC37458522C6D11CD3525C921290A67832953C8AA55A829B81CE198F3944C3B464DC44F2456828F68A2411EC42DE58D4622CA94821B154B618F11F2833C8E43D79156BCABF61A884FA97628EF81EC41721B79467886F45422AE588D88182A2291EC4F88F2B1B61420022501142042FA
+:809E80004802228424411C92443C028D211285214101141885011441100243123124844170240241842048628840C826846440220840744E4592424FC5F33436FF63F31E1EBF63F242481D399F14B5ACEAACFCA1A33FDC6C888AEB5A7889FDC5811F5CFC18915F5AFA41491D952F19FCE1EB373237128B545F13FFA5A76F6BF2327CEEE2AC
+:809F00006F78FC8F173F78F693B8CF52F2958715F9C5C531FAFBB85635B32EBB22F562C49F14F585994B542BD68BCEEEC84E486B92CFC7F7B4B467614BB8243D424FE3F62E2EFF23F65F76BFE5F353583F12E2D4F49696EFCCFC21333FDEFE861E6FE8F9BAB7B7D86B3FEECC8F1BF9A9A3ABEF8F86FD96D5DFB6F6EEEE2F25F44B7D5F11A7
+:809F8000FFEDEBEF6DFE33DA4F6FF7BFFEE7E92F29F6F7F44FD2F295AD1FD3FADBD1FFD7F5F8B43FBFFF173F2FCCED84FF7AFA7F74F5CFD96BD4EF87FCB2922F8FFD766C2F2BB956F7B4BC6FE1F96816142F27B612F73436FF73F35E52FF77F362781D29DF55F5AEA62FE7F7BBB3BF1D7F9EF68E941F8AF8FC7B6F2EFAFAF49B11CF5BFBB1
+:80A000006A683EBC9F88FF84AD2E826FC2F14D51CF83FEA4AC3FFAF2226DCFEAFC96C86FCAF382243BE8EFF2F2B59B1F8CFDF5FF3D23EFEFFBBA5E7FC8D9E8F8A24A2BBDCF74F49199CF67F7E284EF26FAF6F8CE8A69FD2E7CAEB4CD162FDF47F37767DF63F23E3CD737FF16F67F37BF97F73931DFD7F5BE96BFE7F73A33BF15FD9A12AFDA
+:80A08000A8F9BBBAEF9FF7FFBBAFCFFDBDB6CF5BFBFBE14FE7FD8DFC4F14F66DEF6FC7F74E5EFF91FCF4FEFFFFFF22CBEFEBFDB6FC6FCBF3B7755F4BFF343F5FBBFAF1EFFFFFFF6F6FAF6FFBF36B7FC8EB8FEFACFEDAF8DFF4F4DBDBEF2EFFFE88EFA2FBE6DAEFEDFCDEDCEFC4F5E4DECFEEFF65A1100465016901205114820020098240FB
+:80A10000088281128324F84824604429714884384818812290123022846D114845C1481CE88844E18844820448A048819A04A024F01DE230A21226427C24C248AF22018332118D829AC281001698A89289225342824C4282489228A02129C82469A8242A69446128188624D28182819216282B928289311570B408848D34A668444508A694
+:80A18000B9DA042F22F4112485F21124A3F41124E3D641B24AD1C1B26A9921AB9451AF243925AF143B25AF147B35F84AB15F8BE414F9254A1CF8254A87115FA2651D5FA2645DACEC49F2244A1F49F224C31F49D23CF8912CC3F69124EB841F48B64AF1812CAB941B28AB9455B84A7924F84AB447822F4479A498924F8284F9244A7FC30FBA
+:80A200002FA2F4114489E441324A1E24E3D641B44AF1116C8F469941ABB41D688B94128DB21AB448FB3448A97A36086FA281F924CA814F222579242A41E949F2244B16F8244A1AD62CF19128C33611C9B181B24EF1812CAF44F981244AFB85282F4441E8446B824E94478A986F8B042F82F56B3110020000000000000000000021008088DB
+:80A28000040021140000480000000000000000200421F01FCC002283C2242F826187C43021BE4222663858609424882C89B22838924841422972648812E841628E3042A0A4922F1218D4488A32424D18E1B01C44D82202562264644B42267244A8494D48282A8508CFB7084E24332801487032C1128C1182888158521863A241214B1C54B6
+:80A3000028289AC228822450422304A9E222E8A17A1814061A2891944F818298118DB42398268188008D818E124588722264288E14843E412EC88FA60D4123C62826B648C1281D24C0382F2291242E483648247522B48291122F42C8A8272830842727828F4A24C28463E28CD2A29221A592CC89C8215E848D244F22945860D18896542E78
+:80A38000478223A85242414F236C8283941246CCA28B141AEC81F214D7A042111820A241A92151128A8428E1241851182024A81451382A844388420225280580AC292E1216948280293924961CE2C1324A280024F048834036244EA4822D1422288AF424EC4002142002180082181B481C01815142822126A8244B434A0214414C024AF253
+:80A400002648282011A421A0287091F42881960816A41216AC148223042145480481414A2102F0817FB044532543582816E4B4934537848F6344994A239242AB412F1C014F914861C17B481E85709824E248E484127846988C148C88E44422D622E8149114A7482992546F22C44417A24D886223D882058B148E451AE888D542A9813E8205
+:80A4800086B44428698ABDFD8042C28524169421174519344C2968842DA213944A231CF441888643BA8CE6426D428428511018229E2780242272B22221C9841F41F2A411E31B32188D144C84F81248211865919849388689082925082A786D0B4E14650184225658228432912361141818871111490143114181B5340C4AC86C49D248547E
+:80A500008489E4880243C54490414D22842338484246C4252B82893352884289A48441832581B18463484CA68181BF5801216024818CC188CC4482C2124419B21252188450844C2481262AAA5281121021A292400160D1168AA242882542D41825F3A451484502C11214A66882C03B1A2422158801CF5F0A6CD42834181A224421618112D9
+:80A5800089440828181143822231816C814416C151284528084483911226C112824D4880342485C15226022482E0813624102C02361864886CA4824E828126F2191B001001442D84001944B48181418804A3A9C1818C028440280200412C044816E442041C825422303422100891290890822118272888114188C12028F47D7A90469018C1
+:80A60000A96144C5B11C4462164971824123C14970B2B818644136C1366E888E241931614048215224813B414CA352811904296248BD2276623726F821C61465A22189B282514B96982227811E2A8CC4E42FC5C8C88368264FDF0D86022581D228016081188CD448A12181128511C4A48C948848008B2484284110A42D18004469E941B2B8
+:80A680002204236241418418128B84828304006088A8414C09288001DFC406420028208502222084480224881460344BE114C049461406902261222D41424C7464C8344421708154411430412D1128881126F148844048088D44466445A180E16F4D91222184441018C9248D124A92218597884840C1848941488108102118C888822214C2
+:80A700008C18C4294002508225820242C9483888308A4A08C56148800922C044186E849FF906860141911001A46880A128560118A24A312118821819028C4205162148011220C1220011211A64911A0220044A01251911122208A18429242188F87491001E24247048A1283111D058110A449921D21211A814214E1941A01810280827C1D3
+:80A78000121E4949628188130148490824106C813811855428448088092C31242C89880840F8537D90128062125012268401148021441404410084C01C81601884144814204801200213181C2202491412C682442412B31152284285C21424412068843BD90022A1103244421038462A8482581284812F14286811442D81E0145884C042C8
+:80A8000010440E8714456294218445888294214422841B48A400152CC444762438148098444008214F8B0A49120430A80025426428198924218C81D22861228D82228922A22114C0213211188E28160412D022082114608812400C8088083081490144404888984AF0A3C6142028428C221874340132811301128812285428D0489341D0D3
+:80A88000220480D228235826228B14E084010044204C861142048C014C08811282001180D4189424AEE3F015482D124F214442632281A14B410064918E2A10082004002302185188118008605810C488469441450835482521C114401488035024602400982901FF6D48F215272729C9D221F228831F62744D3E114636316A6711AF24BC74
+:80A9000053D82A21D31319F248433D283F929A148F1E157A84F425428B212B98288F81F8D9658D167AA434CF4A526428641F64D222B23CD2E4F1715D2FD1548C8DDA1D88A5F4424C5F1D68C827A18AD2E6F541686321F4185B8FEAF47C4E142B4482214599222D91148D1969F64227912E3817899422AD288F48F21523195B4C8B189411C5
+:80A980005D6135C9881571257C17BB259286418D8EDD4A18884515CD9117C9151D2218B4322849B3C1D1113828E9F884948522C4828AF41884CE8149F2FAB2A0124F42E3E2712AD481E484B222F226268F8391DC2F91F8C1824D11CB584B811F18F954486E982781FED147411B621EA8468E58182E128F31E64871C2E382F151484B1832FD
+:80AA00002532423F2C589265F86C81188F15D42E98198614368A9CFE9C122D1C1A217416B498584E46FC8258A094CF9B0210024120020000006440060085020042002100284142214241009014848004100480048200805448828110F8F5FCF05146AC536C1F62D2C584F644465D2FBF92F3B4A48F23F1A2822F4EF99191CFC1F9B8B43FD2
+:80AA8000EFFDE2E27F47B5C4BC93B968F69594A5F68387AFA6F63535CF27F797336F68FA97941E189A7914F5AC268AF8E5AC95FE32F7AF25FD13128F61F18A87255662EF215832AF43F185814A562C2B5523F89E88FFC8F8CECC4AD188F4A248EEEE2425F66474641F42F6654D1F16E4E4F6173FBF95F3B4B4DF7FFFF3F2AFCDFB5B9B2FF3
+:80AB000081FBB1A33FAFFDF3F3FF4FFDB99B7FE3FB6B495FC9FD565E3F38F8EADA7F53F378621F39F38F2F7F4BFD5D5FAFC9FD545CCFC8A2881F5A5EA82F73F37F773FA3E385F5C2933D1B2D8C8FE1C8839F3DFFD79F2F2DDDAEF14ADEE7E82F8DFCCE8EEFECF84A188D98CF81F312ADE027F714768D221D26DFC6B469F669473FF3B27235
+:80AB8000F191959FE3F1B2A88B7D7F79F91B99EB3BFFAFFFAAB27FC6F3C6983B98AB665F4CFC4C566F58E826FE3437CFF7F7AA28CFE8FADFF22F94F5D4D44F45F5A4288E824F4A5E68AF7AFACAC6FF63F35943EF7DFD1A1EAD16AF69D9B2F8DAF85F24FD4E5CC5F64A48EFC8F9D6D87FC4F442442B5416F8E47C4FA345F242426F43F72AEB
+:80AC00002EBFD6F26F4D9B46BFF6F6373FEFC7F1999DBFEFFDB2B8CBDDFF74FD379F7F7BFBFFFEBF1EFEEDE6FFFAFAA7ACBF96F69DDEDFF4F58E8D9FB7FC3637EFF7F7B535DFF8F2BFF2EFF5F59ADEEFC7F784284F48F8A1A5D5F1BCB5BF7DFF1F3EDFF5F5CE87FFB1F18E948FA9C98BBFBDFD478EBFB5FD1E9EAFC5FD8E9E2FADFDCE8EEA
+:80AC80006F4CFC4AD85ED8CF8CF717CED01601227022426812844712822486088A0486C8229E48892249240100218111898289121408800845012C4948425824960882608160816088000020D8C30BA602C901805424D028914122488D1111002400484038481185141158245024830442264A44424442682244C0442901254248924588E8
+:80AD000082A514B448018F44088B94F02856C0421F41522E1F4132681F41B24AD141B24AD141B24A9921AB9451AB9453F24A9153F24A9157822D915F8AE414F9A44A1CFA244A16F1244AD6F1254ADE252ECADE244DCA1F4DC2521F49D22CF891248F14F1912CA3F68164EF16D941B64A9961AF14B985B44A3924AB9443B24AFBB448ADB4C7
+:80AD80004F82D448F9244A9F58058CF41164ED421A326C1B21A9D141B64AF11124AF44D941B24ABB15F2489453F3489513F24A95514EB135E854D3A6F148318CE855F2245AD6F1254A5E212E5956D5A4F1C1282E1A1F41F62C4217894F14E1C9F62E111D44EF169141AD941F41F64AA15B68AB944B42A9B924F448B4BAD448BA22D448F926
+:80AE000026523F430800000000000040080000001092210088000040010000200800008004000000005012225E4C141B4A11F941E52471149114C712422222212F31048183D225022C1C28182D92281C12B11464842186C814222226C4412812A1263826114122671199C192888B849044004E882744482884524CF43E462420082413425C
+:80AE800018088D24A9981319C1888998144604C1211C14A124004822113243325426086321018028021830414E94800A002CA88121850422848818268DF888E39021137412159531CD118D148712462CDA14437278018489D2414294823784344822321366181E44AC8F924C49C322381CD31884A21CA3D228E241426144A216B5A93114C7
+:80AF00008822905421418B844183642A124D514F29F4CF1D90421008272400442642582213C18286C81449444228048857824008221440841908444100000040E14114022C088B8482290881B04202409828F01CE80000000010020000001410120441000000120040040000440000000021001008200200224FEF0924004C8294218394A1
+:80AF800024831421448811214484084A0821460826C8214818100269012909442C214122C148418122818044888514081890D2C48848C04A1FF80C000042284618141281044021449481B08214044C04C021481890125042248A0180810100000080042325041048229C2C88427028B2C10F10024C02118032480081120000002410088999
+:80B000000200008001411044022443C148418122840081008120011200004878001042041A22023800100800008200001302110089110400008800301442508188000082100800200481F06E4C000000000021484240022092220000284008844420D1840C0018001641184201208181068C140288400A448442003FCC01410081410084F2
+:80B0800020440840011200004888480000C0420018001001002800000000000040080022F0A4F8100410482422122832428304811420410288008868194248013018297184080018130811A44C1301911820024821C088400280244408AFAC09002144200180018004100228220042000010182414248401000018004800881242102808BF
+:80B1000000848141818002AFB50F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B000000000000000000000000000060
+:80B18000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000F1
+:80B200000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000070
+:80B2800000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000010044002000000008004000081000000800100000000000000000000AFE20814640018100180111102004210098800004302404114028280021180480A0010A1140000106882
+:80B30000228100221841E0FE0A29021A0231214301002014116221184423182801400424400A485C5828448100224400004C181294881429410280210830524C042288AD29404122021C011901804111420318422411800800604200214C5412308284281011844808101412E1841911420230182E828190424A829124888FC902234284E2
+:80B380000125024100004800241244861828014004101218014918180400220010028810042001000000124400F071AC00901812830200008522018244008418A0845189020050211400228085822811042440A1288928412161244904400400441028F24D1524281E216D219129C46842A3D48466141C4462214D18149F215841174487E4
+:80B400002A1AC828CE38002588D2415284382F143A3286A6242212648821A28F42A9924901432448622813682156260E8B582E828C2A31481282CEC110A212AD1500892424C46848111825D248584111411D481688B1282449080028159C22868162422B426212490821A845021C01805821923994144D424084AD82A9482444082F960EB2
+:80B4800022142299B14A82421218147148021818B0181843A4822988786C81022528524130112F222421081228241A18041EA89A12A428C68C0180384229A1C21008221884182AB8230E42608144800322142C4124A1212984440874223024828974120110A14314200182B491271560988928E242A81890411614721432281D18A0482BE3
+:80B500008210C4124338228C41F227A800490622412422122844448982422421914240012308142321C284180024D1871241102848041602214002605126082A245182482883810285028CE4920C201144014118800412008491288280382214800140082008003082434202800284901882000041000000A01400DFC50E4841CC611244FF
+:80B58000442323E21234141826084199E481324211172A284B82881785112860111A16011741267884928817628E5121111E2826D284021827184416B128416811122DC8292E321890848905A4BD6240A82140041A02120021122CC14818801814022501005084008224810024004489281822884928241102214D4800004432212289814D
+:80B60000F5B93B404201118128302828800800448644B41412A8211232128C0822242886421461488C1102881CC182001241406422128182C423021024012C0C44F01EF6241902116C72113248B15022831487142AA442E0140814233448811445D2184491488F1104142B61211C4C6448A028128912614421B7448A7242048E1411A88141
+:80B68000418829C1C6C19088259888174F14800221C04510312146154881420150C220014E814C21882228844102444C0844141440044422103C88C3321840B22414B1244442642120C244460444CF330848442021142814344822128922943481262162914608B082041C9818E7211C04662386D4A2C4481A94124240588142824230C351
+:80B7000080584912818820058018028848CE4570C6312222211222540012142344814C812494825285240124421041341100221B812312041224008611B4922408882C019C088E12C082C224202838A427188F820940125121224412832405C0224F8104203211241182998A22289111241142192142457484C388514437C24C4101290827
+:80B78000746042811E4510054905908441004843F2196C8012414444211158434426648244108828084314D41205D16316B44441B828110A9724800420C4819089002285021002822C241421C848228324142892188CD4B90B4481803248A02128858481481831189994428E28E042889A22103122438231242622081800122B811F41A4E2
+:80B80000814511A258180020211442041121412001444100FF6E0E84412D441228114C244411215641881DA41245014E210030412745148AC1248820068212162128441888644926081A28D28161882D8444272168418A31124914D2280E83942216F284F5241C74869826166427CF837428DD4CE4C4C37887544099CCDCA2CCCB1A4F42BF
+:80B88000F848846B532D4167461331844E247E16A7A489672846E5187212928445FC11859E8459F9888BC3B2E8FA8464DE88ADE883B882F14A82424DC615F925175AE864E444A5492F8CAAC825C8892AF4926FD0618252212691494E261B153724972276F2B1A889B647A3159DD247721DE18D513F91A58C9B1689CC5716D1135C895F11E0
+:80B9000075337A71F1224A33B3CCD8EAB582B9C6F54153831955131CF112826117187DD88D82D09BE11DF388442861126361E48F2274427C8CB42C2478834F31661772547D322D391591442E294D41550537B6897C812D942146BC53D224C2299EA81F91B3E4F82BE4C7A84D212E244691E259F244D61D54DA725102412E2F1E14969C41F2
+:80B98000188D5645E672F2346C4B199E82B167248EC88E16EB982E82695944416AEC68F35C8E7EF100402802290121104208008244005028902880022810080000810040880822844008160884000000004A02D0F146D13554A495FA1F5DDFE5F4481A1F96F7317ABFA4D428F44D414E62BF9D8DF45D4BFFFBF1A7A37F33F36371AB9B4F11
+:80BA0000E9F98CD8CD58DF99FCA1EBFFD27535FD694B3F31F58A8D9F9BFD9AD84F43FA1C919F18FDE1E63FB8F88318DF59F97D6F2B644E547FFEFED39DEF6FF956D235FB41C53F98FC979265744CFAA6E48F88F83E3CEF81F92CA85EF86F46FE2368247D476F94F4292FAFB1F5565E8FB4F56D7FBFB3F74E4E8F63F47D272FA4F6DBFDC883
+:80BA8000DFBDF53E5AEF8EFE74727F4FAF9FDFFCF523798F83F3C9DAEFCAFEA9ED9FD3F241CB3F35F5AEADCFCBF999DD7EF44BD54FC8F9A1344FECFC9B9C9FD1FD5D4F2F2CFCD6544F6EFEFCBCCFECEA64FDD3D11F17F1C6C47F6FFFD6D68FA5B9F6FFCC984F4FF79C9EEFC4E8C1F974F49F85057F34F4246215F237353B552B771FF6F347
+:80BB0000163485781EFCFBEF2F36F69BB1C57415F39D1FDFBEFA7F7BFFF5F79B9BCF4DFD9ED95F19FDA5D19FBEFE4ECCDF63F4284B2F29FDEAAD5F53FBC4D5CFC3FF1CDE3F98FDE5767F7AFEBFBEFFCBFB7C6E6F65F342547F7EF2BBBDEFE1F35ADEA5F848F9DFD4FCD5D26F4CFC4CDA6F62F698D8CFE3FB1E98EF82BAD4FF6CFC9F6A4E55
+:80BB8000D277F62E651F72F276372B752B779FD7F71D7FFFD4F47A6DBFFFFA626ABF9DFDC4C55F39F9BC3EDFCEFA7472EFEDFFF3DBFFDDFD9AD15F1BFBE446EFCAFE2CEC8FC3B2F8F4D2D2EFDEFAB4B44F7DFDFCFC4FE5FDC6945F4EF3ACE67FEBFBFEB4CFEFF6D6B62F45F5E4AEBEBDCF69FA58DAABCC8FACFF4EC67F6FFDC6C4CFA4BD95
+:80BC0000B6FFC4D2EFEFBF96F96EE8CF85FF6CFCEFFB0B004302494138248C64128E48008044424844C824928B241146048744304880024A82219494908210428881848184C84880048A048A44A449248242828324F84BF1200A2230640044C112228421844E14822D261A24041843812A8822221122D8220488102285A8281850261008C5
+:80BC8000889A0212888230144410889418450886F92CB6C0421F41722AF3112487341F41724AD241F24A121D24AB941D28AB9451AB9443F24A9543F242914782AD914F82C4B14FA2C4A16FA2F418214FA264191FA26459ACE449C24A1F49C2431F4952381FC932481F49724AF2812CAF24F1112CAB9419B24A19F54A914782AB9443F24289
+:80BD00009447822BB44F8284F9244AAF49036D591B612F1274117C4AF3112487341D248F24D141D258F98168AF54B285F24A1153F24A8553FA42115392926B421CDB85C5A13DCA1EA55F2264195F2264196FB2E419C2421FC9D234B411F624C313E1147811F4668213F946131B212F64D941F242B313E17439242F24092F446B822F44FBC3
+:80BD800016482D94ACE58A0C00480000008112000000002008218001A800004001008004000000400428940000001002EF96091D421225241294581054416686142241584A12C0249093001128451824912224C149149488242243C11145A118518270285448969482818243798114381821442C48946C4A1AF422D34034A42C11D1814543
+:80BE000081816282211E888F1291888213F8842242291182A21841CB12481B82130245E28284323A004844244922424252782C840891121905B1424223942C2DA8830440019E677041F4422630239F41C4591222157462968423B22811C88C4D12B01252221CAA81441CB232C484A645C2228C52482B3444811487426C31511C221152D26C
+:80BE800023942E414D8B43791841C68C4B2489141A7482E88814922C2827411F580920911400004483028B141781888225212A140412008D14D0180212414223524820C842004C122458148220182801488813C181E02461824C0244484A08CE9A4082023028122C0161488581D422A141448AE4648A440254C02113423124120060412A0A
+:80BF0000942824901682218424482484201808815068406488008901608247C8D042426242C54243962149C14A821A322A150893351133C12427464E24C243E4C441A42CD08242D98235842B8627C84E1249C281C015186D11B7422A9864A85E226631318D821C91881B494C228164C8832422B21482F4DB78242606101439121B21414D9E
+:80BF80004A8217A22648084D114AF834814AD2628234814048850E1A52A14288497462CC582186021605715C02288218822E118830881D1C28128C58844836081A02BF3305C0224C5228226424182148124833B11234481721464284942443C4444F162142712412088941262B8872241261418682911825AA684666826692618485D21891
+:80C00000014E82414448888120429468FB3BC0412E4112393244281D22702441419C438C42034130111C9322212CC81983424A68A24229C1482528A1948F515884E022C42880245226E011444401244722831444C8341AC2243841424AF2E824C0284B4193022848001A44644828B8C88439BA1248083014242214801A250228111C4402F2
+:80C0800099A41C48184728100214A50282D923022088084881842908245F670D0041121230121C11828102408C84811402448240A4844C420430442008C42081028814225348480840082588048931422444800C44884EEB90414712C59331444239911116C5158DA24E2189D1489C4A1F222831111E212CA2818814895EA4814342924426
+:80C1000083968360A5881F41A434228CDB3408734A42D99211426831842484167482E841B22294288B964144C6726C0F2628A112A01628260223060088112443E12448481244048D341981332485B1222401815886D4840188100262100E42441CC828244924648842C01441202824F27C51E0210424200229C2224C22028A8104342422F7
+:80C18000200A40042123521E3332828034428311F22248811D225021504113C42242B0820482881004446144418F440848A237DA0051C12611B811121C1138148305911481228714405184448814C01522448185112838414A51212420711874C408A28447A11815A4149341D88134424301002C08861852483EB100282200000015021C94
+:80C200009213882305AA6122482A04D024B42881318120A2582241001045615413012400280029582200D0228458224C2242344443085F350F4C0260841544A42480440888A8C4199882101404A3E886D8824824885528480056034612840A8A924411834434423183441808424189880828C82100E021F431D3601844007022041002177B
+:80C280002168985280827884E21201E6210448231A04E0127881941444C0284928860800C0254F12483181484A0813044420048480D228D418F8DFA6249012B021014224442811101112114221C429821150122114418422148180C89880CC413014882D2A8880CC48259442B54414C38E974490822A1802A1416022FF4C0E1815121524A6
+:80C300004273442174443354484014269848245028841098828400144844210016284112441102150C0084801188941288402431881AAC84C81A089E3E244C062D2190414001144215024694521846511214800A4541E1124801488712F0A842E028244A1462482281860586420D53889281311D8A10812424D82824048441F094514018F7
+:80C38000C842404248E292042602CC04A8488224884CD421A44210168481C6884423121101541840188A0421150480440444800A2100000025E841F47335241E24271821174126661437441C7444D433F1425217814B4993C4128B6A2F3838824D41375827C88C44EFA8748695A514AF26FC843385928285072D482CC8872F7254B15DA341
+:80C4000085E562FC264A72AF44BCC97C823AC927887D828E444918A29C27CE46D842A84A1CF8C8364F5E0E4A51E54D284E2115D94672245AE13F82F22C44842E632DA94F59FD53C827344E2845F562B86AE232FE84254B88542ADA4AD422C22183F241E41F68A1152F25F3E8136B48115781CF49518213088AF2832A16D364B21DE5A1B859
+:80C4800041C44C1D8846A2842E2685F282768548F8484645F8F57F147F22247321372A4AF2211A1CB662C2415A7211B1C2F8411625621819B831F429A217488D4A429B8419B42F13619797C655D8816C9A4F15E488ECC8F4142417D26B628A0B8F48D48674877149D55C548525E11458128D838F1C714EF31244476821498CB8C4F44C84D2
+:80C500004F88A1C35FAD0F00100C81302C302812818281504848008504008190281844001008000084000018800100188418800389014C0142CF75047F73F2743885FA1A7BAFA4542A27C46E6ACFC4F464241F97E2927A6A78C4F588AAFFFEFA47E49FFEFED3B48FDACAC79D481BCCB7EB9FACFC62638FE1F539F27FE9F9FAF3EFFADA465C
+:80C58000F8AEAEEFD898885BCC4F87F38D8C3F32F68382BFA8F8C6C41FAAF9D556EFD3FB48418FB1F8681DCF91E11DDFECF554544F67F7FCFC8FA8F818184F4BDBCCF838CC5EAFF023633B731F62F21673FFF4F46F663D2A1FA2F24D6C8FA2F2632D2E69BFD6724EFFC3C37F62F84FCC7F6EFEDFBC8FEAFE2BADBF9CF4C9C8DFEFF5E9CAAC
+:80C600003F3EFF335E3F93F7F9F22FAFFFBEEE3F38FCEEAEEFC4F448C95F3AFA3675D5FFA2A72F6858EB7FECFAEA9ACFEDF176B5CD8FAFB1F868B9AD492F3CFE4E5E4F6D5D62CE866F65F11C9EEF87774CFC7EFCEFDC44F343231F7147E133F34A427D2F4756FF36F66247AFE6F67377A5C132EFD4F484863F26BA41FE2DAC9FEFF9EE8FDE
+:80C68000EFD8788BF8C9C8DFEAF9A3826F76DEE6F26342FF6CFCE2EA3F1CFCC4C76F6AFEAECC4F8AF8C5E66F2A5E677FFAFACB881F3CF8CEC51F3BFAC4566F5AFAD85D8F39F8C17BCD8B7F54EC65F444546EE28F82FA9C9ECF48F8AEE45E9C8FECBD834FF277777F73F32625CFF7F34F477FF6F66267BF72F26E6F7F62F26363ADC3FF9401
+:80C70000F7C6477F7CFDEBEABF84FEA5A4DFEFFBE6E6FFDEFE4D489F8CFCE5D73F2AF877E77FE2F2676C5FE6FEEFE77F78F8C2C3EFEFFA4E4C4FDCFC87A76F73721FFFA2AFAFECF8C7867F6CFEF3EFDFFCF5EEE9BFFDFDDACB8FBCFF98DB6F7EFCD6C64F6CFD96964FEEFE4A4E1E946F46F6DC9ECFCEFF5E1D00100663820448411A6422BB
+:80C780009220010048890220180842009028614A92144200006908698824024D830000844482004482448281E0B2056718194282724412712412011B212168002F44082C2AC8264B4A8100432A44A82484874439A8288483D124E84C1284D22801F08148E304888C144808B04A1804800A90448364121B41C0421F4152281FC17248F1114B
+:80C800002CAB161D2CAB161FC1B24AF98128AF145985AF147934F84A914F82F44A9147822D954F82D418FB244A8D815FA2E411F2244A96E1A27498C54A9E24ACF491243CF4912485F3912C87161F49724AF29124AB141F41F24A9219B24A19F54A924782AF2439242F247B2498B24F82E444F9244ADFC80B2CD441D628E581F248111FC1DA
+:80C88000B26A5181AB1617C1AF44C828AF14D384F64A9157838D815F83F4428113F242943F82E454FB27121C99C31E211FA265182E5896E512E459C24A1FC9C2431F49F628431FC972687191744AF291248B161F49D27AF981648F149A652F3438242C98444EA24B4289BA22F442A44FAAF1BA6440080000000020114208000000102204D1
+:80C900000000004001008004000000002008008002002508DF840E123015114A3244482846D12282344142111A18928142482D224E18288B820060442823321816C44244414416C4814CD121224688A282421E2C8225117811887C12289A148A24C128C1874241EF434441B48203222D128D116313A121D981288299881384BA1604778939
+:80C980004C18914C528E6488242A014E1443948329A2834AC8812B246B12909E1D84AE14181D44418631222E1819CC8640022A24428C2C621884EFAF4B31142787C02123C11244145671153A442AA452841B142B2896857496D8425A2245286B4788826925D242C3543D92422B831C948956B4E261215F2269462E18182E85428F51B884E8
+:80CA0000323B1786EC81542AA249A348C1842694A425FC212600D0140166D2C1A41628268282188138818830426014F048112A3448820028204448244294844423524141841C684822484128218038818812808422A1A48481F0F59400501415140222446041A51291825042412C4288022394448815421104219012008001880082A582A9
+:80CA80000411008901106144842484E08274482422045FC801541D22122136B41A8281B21286CC618648A281141358841AC4C6C591258D811FC601AE4A1122F0411445F135424392C8C14716414723412922B914D284FA4C12AC68141D42118D1121244D2226AC583E888041CCAC84CFED0410111642B412A22190424CE1845212889215E2
+:80CB000004459A486285D414041C48D3290422406241471600445C0422B082921A4383122848C1410020542C448321C848182248817FA80F1524C2111594328460422AA18425918821212153282271844283D285BC5C02A85110C255111692248CCC182849C81425042C88D448D841552A4889117319124134228CB242B81882324CC1C337
+:80CB80000AEFCD0B148501481D1425812201245416E22842210100C5C1324A182881C38488291258122C8204001D1A11482840D261C48264206358621A14043890182B42282A0449053F1E4712D4282181044018024044912841B0233484E1101A11922441484CA84160888417824249E1D49828484904D16281C0181044C4122698129073
+:80CC0000442A048889850140F2CE58402262421302A4445012411A04000000B2466481881448228C52844848101428280282212482800822108214810882828C48440881848848EFAE0B5413A3121C3214154A6E2150241415928845612113C2846183F96A14CE1889C8214A6246222B218934C18D22469D4849E8C2889141254492894EB4
+:80CC800022CDC22C78280436848CE12805824CC588F0C2282A6582814369246F320725026140032240014A2141028004845C0225014C91148845784844120828208194212908224410011225021419163A1420AA24478140A81420043EC46042C9025C021A023C028A021001405423923021450222A4411582224334286044202424A8247A
+:80CD0000F044211AC4421C4221088CC4214934828D2124844C544222488902E24D36000000424412109412424C011813044222428AD181C9418880088A046044A44C446241001E445041108858418214B0A38124E8489644A01441228210F4D22BC04200124C02210086C182A65112252718622843481164124318348214CB244511D41407
+:80CD80000A11212C4838A9C0882982081B4848222596212501C45121808208801404F0889114841100245C1411040048880048201212486416C0240040028E4288001870425241480041444442417082088243440822828628084B2816F8891B24AA44024C4108180018381C81C1928A91A145092D84185880088C28448A622884114843AE
+:80CE00004A385416C2A1434861486382440114812E41818480522E44284422C048F0A24A40418422022631242F14E11132411308825B2491181AC81136D3381698141A44C15347112AE1114411811484841CD1419214124E1252181B81438488044023140100492484E1480446F8B2E8100411481824400241210000242262848288831242
+:80CE80001AB8261108414848818908222942089425486888A4848C66820000892C0800C0888088F8F659200122482C01242684221121692212456241281484128501501418211425239221222210859811002A181281A88240A442801405C48A8602A1614088F2372450811D221904190285811481962428800600414123A84248F11A9675
+:80CF00003836928481182514A8181422248C06394604259812212722A424C62EC82A49114262288A221E18984224DF3548D245748492221E2416E112D6282262124981B82265482DD4825EC21B8ACADC68BAAAB728F29DC11DC61EA84D84EF2158422E542F4838431D4A82CEA41CF4C28C124D84DB2A4B86A358228D1426C466E76846FA60
+:80CF800043224328E46C95442C4AF664A24B888F8218B4C49848CFCE4F61142F124281E1625321543385F371E19AE21D227355E34128D224F327253D181E8C3F1D44B84CF32941BD426257131F949A452A32486E5441C3D914F543178F2156421F79E224F555298ECA7F1CA28E8427128E49BD6ABD47218F4AF826486B4A23F8284C274CAC
+:80D00000848362C6178FA032153C214F1614B84631174D773186F627111D821D93D02BD157511A1E12471217144D9C2F46437984E692D2D1C72A67213E23CF98D416DA8CD822E4A6F231222A7EA3E131914847518F487C73D128581E1F1692498B825E854F88D89DCA2A8744A81E444A82F788E48CE428EB4E060000200442124602460265
+:80D0800042A02412421228001200800130182112108808188001188400880000008608000020F4171D144B665D2D474228CFE3F766649F867641F521636F61F552D22F21F1A2D45F79FDDDFB8AF889EB3F2EFEEFABFFBFBDB7F9CCA4DFDCFCF5E89F8EFE2D3DAFC6F62186BFABF986A77F7EFBE6B6EFE8FE9696CF717793F3E3ABBFA8F826
+:80D100008ACFBF9A7A4CFA4B691728A5D85898861F98FEC2C5CAF859918F6EBA42F22CE8AF8AFEA3A22B994E888AEC23F4F311342F72D677F627243AF678182F13F37D7D7F57F261236F63B7F6AE774F67FB95D7DFBCBDD3FCEDAE3F63FAADEEFFFBFAB4D6AF85EE8CFC3DDC5F6EFEE5E76F46F62132BFAFFFC6E54F4AFBE5F7EFE9FFC676
+:80D18000E5CFD1E73DF386E63F2AFB8E8DBFDAFB8E86FDBDB5FACEE8EFD6FE4385BF9CFEE3C56F7CFCF3B14F6EBA66F2AEC8EF8CFCE3822FABFDE2E84F4AFEE656573B347F65D575F424255F42F2393A3F22F26F2A6F72D713F354B62F67FBD2722BB91F35F1DB994F46F789BB3F2AFBE7B67F7FFDB6B4AFDEFBECDDDFDEFFE9ECDF56FE8D
+:80D200005D485F67F683A36F37F7AF63EFFBF6C2A66F63E1FBF796573F39FC192EBFFBFA7B6BCFA9F49B2BDFFEF46B698778A7C89FBAFEC3E12F2CFCDBD1AF6ABA62FEA4A6AF8AFE8E8A2B99EFCCE88CFC84DEFF8D4AF337777F72F227255F47F339383F16F62F6F7F73F713315F6DFBB2F63F2BF317B32F2DF99BD95F4BFBBDBE3F25FF41
+:80D28000B7FE7F7BFBB474BF97FFF9D9DFC2FFE5E45F54FE54541F27F781A26F3FFFAEAAEFDFFED4B45F6CEEF9F7F6776F6BFB97B6FFDBFBFBFFEF7DFD57F7FFFEFCCFEBEFFA72CBFBEBEBFF1CF6C6C6FF9FFDA6A66F2EFEA686EFCEFCEE2AAF8BFFEEEC4FEEFE44C6A7AD901620024D11400114821412001400C026828902443048214C37
+:80D3000002282181006180012284C048228048682200860840229828C024824282DF8B0F869221143024165426282428188A52321129115422004303D018322450264058482F2264488042AA284D422824C42501EB84503A68D081829844218C344A412482814885C4422FBD0C2CF4112485F2112483F41124A3D441F24E121D24AF2499FC
+:80D3800021AB9451AB9453F24A9143F2429147822F14FB24481CF9244A1CF8244A16F1244A87191FA264592D4A8F49C24A1F49C2C21F4952381F49324C1F49324A1FC8B24ED141F24A911B61AB9451AB9443F24A9447832B944F8294924F82A4B44FA2F47613C04A1F41562C1F4132481FC1324A1FC1B24E91218F44D941B2489B21AF4482
+:80D400007135B8427335B84A5185ABB467834E1157A2F025CA525FA2051B42C6D4B4E454C2429E2C4DC31AD638F51124CB1696F446111B28EB144CD25AF91164ABA44B21AF1418F442344393924F8394822D482F44FB241A1F3D050048000000004400802208000000180000004001008004000010024480020000005012D0C14832145128
+:80D48000459324128CD22452812C652215222808502A2CE182289115604A41641C08C914588125C8896D828982822A6132C562821C1218424A9441141F82848804C0241E648426181A0885F4413660228A124251121B4133818292C14A312960B81D1443644841C12286440183021C962243B2869234215AC2848D44444714445041834CCF
+:80D5000041644C8D21E91202204138263508472241424C762CC1225F3D0D1247161427422391387B128712222846F122892E848145D32C14B422489C2547285C1AA42133283A24229566E3BC68432D8C8F14922C524C42DA85B6614849348C17423744F041284C28C52A4722D3C234C145C84A66581C16FE12A37026026111141944024E46
+:80D58000121B4829013081290198458821010045081D428354A48A02808C12245814116110082148A18C5212000000482C2212128422F2359510061011466822481848348088C414004129210811302100421812005048414001200148401C8204111480184482C42248425048F0C7366014245449024712471157A389140AC2143CC88342
+:80D60000461414C2428384941413B5880411C41F8432258F38024B1A1A88FD421644194143F2452210914178C9B8111228D4288421D484184948E8880210F8254D20044531214426A51237462014B142C8813C88684441614242D01441619A10914C8C8552A19084124846144241C1120014911AC2881C528140A8814C542C858132484ACE
+:80D6800008005E77100721442181459118AD52810020D434010029918A48A0144200902147118A021AD284686912452141025D6248606448498401132414028842A43028104CE8CD02169D4245115828814B34611D28141C38248213592487284CD86AC48A64800241D02848A1428C88B241494C0884484838318364422813C22430881C5B
+:80D7000074484251A218C042844C18180885F2C78F40C814C04413644110484222511630428082054B2116883242122C82C2841821128002865218408D3488449049C480014430228001C639281810126281445FDA0D0040210221904220821152241146019041601816480C8800241008486048201204280082248C748482C238001048AA
+:80D7800001002888A084FF55044D1163111169868D142314C44925611A1F2162281C59268F2AE44885F415E28D1626B148634145A2284121681698281C6F4487284C085C048953428CF4214886042D7847282A58A110D3229118818D6220382A818CA184CFCF0100414434F024128423022D1200494411415284A18008812A8141681125BB
+:80D8000022084008842042849821403428191204811A36482881A084901841200845FA87E78012850236022210C422881220682841412912E22402838804502CD18C96112911044538861A9284382E1449A214455128414125495821224181412518F42248448C1804B08809441038444411212514DA42082200412E1189918845381249E0
+:80D88000352419411291421E821C188492632D444842001400008AE4241228163648481C12461804418A04286782222FC70428A1442711442902284140022B8154295122C0411741D381C4414C12A81282814442478848612D524D221447214447211845C1B24512A18461420028184864401248042E8C44FFF9058083C428284410835270
+:80D900009228822008422E816186A88480083A2408881378828884182148388421822008203888140000124B42A3AA28892A08218C8444F85381248E121424E011041544058817411260118081081642988127C2898812C8484E128486C2120082A028A0288A42A3182C03861264842489A4822D42006022C0424200215D364049621134EA
+:80D9800040140214104284086D81144464130243221162183082216042144482C4C045464254128644C28481542244422442449144405484C1864814D284F46EEF1024912800001088012200001898002301528423082015020018122100100830112881221508140080089081008822DF4602234184311811100121C1868184A1411849FB
+:80DA00001A22021302402104118822831109860281181410A121145041C041901114A0141225028442107462C84118EFEA0284839243222113122434211B16224C084C12012691118249081B41678286911149C1C1434141348142143870226811AC0441315284221C115242143146A14885226828800421244A0739F1BF281D242B726700
+:80DA800011144554213F42C2C62718AAA3181F48D141B124F1248915B886C8116F24A9424B9699044B48244EC192474D497A42B5D4F174243B6847534B2A5C723C7291F426223F44FC854B4D695B258F44754271427143521423B882F828A2CF245248C18B4685E362E2B44C7224C21127A3C3C1323F4252116342B224A2222522D1342C3E
+:80DB00007953C2144768877137815C54D51D4C8E281FBAF8411C1C5462C5D73AF1C341D0A2D4A8E83391C23F31312D39C31119798CB3287288F42A4910C8C249F46A54CF844E1CC4CC34A445F824C584CF530E1E24648D11157B61542427225C549CBF9991951A8C28D136E858F293222F17FB2118CF6E2EB3D8FB18216E9321AD82BFC51B
+:80DB8000F1BD383F82DD8142F684C28D8429D14448C2849E128E844D4296E581D14278634256B31D4A1B221E1517A164C72227C823F8C6C82F4CCC24CE28CB415F8A050084412004466281460242200442844602242004000000800100144200210000002002200100008220081F6A4AD322F2632BAD2ABFB3F7C6467F62F262425F33B523
+:80DC00005AF378B81BE51AE7457945F343C37F7EFF96955BBB5BEFEF5BFFBAF89F8AAE881FAAFEEAE85F3CD47FF13AFB6FBBFBB79E4F63F55654CFECF8C486FF2BFB86A44BA84F78F996D67F5FFF55D6FF41F1CD866F4898669FB2F32223CE854F51F15A53CF6CB882F8A6A62F8CFE86876FCCF8C4C48782E761DE54343F72F33567AFB378
+:80DC8000F2397B7F767C23F663467F73F57E3CDFFFFBD5D4BAAFB75F3CF846E73F7AFBF3F75F3FFFA3FBFFFFFB3BFFEFCBFB14BCFEFAAF8EFE4DDBFFF5F17C796FBFFFF6DCBED45F55FDD4DC4F6DFDFFDE6F49FBD4FEEFEBF997D45F6FFFD5D6FF49F1CF876F4AFA6F47FFF2F363233F1EF84416EF77F7EEE6EFCAFAA4AE6FCCFECCCE6F36
+:80DD0000ECFCEEECCFC6F42C7A37A6346F23F23773AFA3F33B3A77617F76E662F66327AF82F23C7E1F43AE372CDA77F443C33F3ADBF1FBF5FA6F8DFDA6EDEF8AFFB7E15F1DFBA9FBBF9AFA4ECFEF61F53A7E6F33F2B7BF5F7A7284F5D81E4F6DF8B53D4F4FDF55F6B4972F68F8B7B51F62FB5E163F76F2AF8DE7C48D172F24F4C2E17F51E2
+:80DD8000F15357EF6CFC8284EF68F8C2C4EFACF846C4EFCEFE888CCFE2F12355343F72F33737FFF2F27F377F72F267673F72F66327BFC2F2397F1F6BFFE2B22DB27F78FC23911F3FFF33BF4FFBFBB27D7FFFFB1FDD6F5BFE59B98FBE7F8BF95C4F6F61F51F5F6FBBFAB6AD5F7AFE44C7EFCDF1D4865FFDF5F4F4DF59FFBD9D5F4DF83526B8
+:80DE00007F6BFBDF15FF7EFA8FADFF72D2EAD123F4C3E27F65F57F56EF6EFEAE2EEFE8F8C646EFFCFCC6C4EFCEFECCCCCFE2F6BCDDC01180012E122002452209122412002412641189125148114A1202F048243921142224022210022E11A012481448148C440120088228200428F03BE350224C322815742202144425C2282C81024124B2
+:80DE8000C03517882D2245A83426A814824A52815674224821624841F0261A132162414581322619120421CC8201A041A583048429E288544A8242848F5E0B2CF41124C5F2112C83F41124A7241D24AF24D1C1F24A911B28AB9453B84A3924AF347924F8429347822F14F924481CF9244A1CF8244A16F1244A96E1A26459ACE449C24A1F1E
+:80DF000049C2431F4952281F49324A1F49B24AF88124AF24D141B24A9921AB9453B14A3924ABB443B24279A498924F8A84F9244AEF280E2CE441D63CB41112FC1164A5E24156384CD658D941963A49D61AB1A4D432F924483CF9A4484E916F8AD412F9245A1CF9244A1E814FA264192ECA96C55B9E25ACECCDC28B1F4986FC912CAD821FE5
+:80DF80004136481FC8F24A921D248F66F981248BB419F24A9484AF442BF24294478A29F1A248AD944FA2F5BFFC00820000000000482800000000001880080000004008000000004004280000000025017FC34D021423532440116826248A21480144124354212E84298B922841F0214A221110C81841485082C942512215D4245238C124AC
+:80E000002C0846480284C0935319BC8484014A08A2C443F87BFB0092442343C29C108174457A18028212154A92888120B452880644412534144488343C11842BB4442284581218585B1615F4A11260584214108CE42408F02244A446486C1446F22C512430C11AC226301260365072478920C214890137882DAC22F03A4244F0582450146C
+:80E080004149A818B04211939A8746854532C4222D1A524F1265181B2846481506B0849172C39CC4182B2483C8482E841C7492F4C1B2001265220117C88120E4894412810834490490922A84A84250214C1222411818451184024A9242116511110C6522112228548150815C08214084144258482CF4BAAC000013011A0228241246220120
+:80E1000082004E8711252103820042485440918614581004108108308149111114210210941260440082814800EF890F2F42D1411114B41E527215C61216D821989813145A124B851F6148886E2F8826B144B1110474499242448A63822D568818181C3C462A1136B26D582364184928A82980048859A858A8C2874C81E22A2838483FED93
+:80E180004B22C2117011D44232112501A3410221254A81DC4119CC81BA34829094005C0461A08225C445C21243C1410041212F61A448C08120080043D8432961460089688C4282488FE309164414048CD142429432F01281D6E81401824941E214986225819321481E410027461C14C4118CDA22810180D842B4119282B881115319348465
+:80E200001B12284200A04882C88DC420820A849FBC46B245D2488602284361229042A018412983044921880187224DA12642A418269884B012240214891484488881C6229014004410E412082280C1888448222C08294488F8ABC300AB4100219114002B1617446289CA125820324A22616024684A83B8416842413728898245824452819C
+:80E2800019C24413682862C30234482C48C4282A04A042100C422E48214C41F8CEFA00006302002041060000A388842229A441418C010016014800602A282410220180044200102198CB10820400908848426FBC0E255442244582621126418264214E8128AB8152F082182A94282AD886729221362C2A98A8444D124B412B4A2256618475
+:80E30000472A2C4891332742D02228B72404592444B481C2218AD483042A2CD448248254824843B148F8ED1CE012A4212228404C022CC1641848002B14412CA84118484E24414A810419C42140518240222402002E911044081022184208822C41180820A824863848B01A01284122800244502988212A4421A44928895C22412CA88120C2
+:80E3800065818A42082D2882244DC21642061F480210820848124830441120289821414014826888C88246F2143840124826120840012684180112292244012E814114D0581804F02881501240018183012E4AC3031B14221E2410012008004260888440084110B8DD0600284C0446B1420229012C012A71420174181826C21110812412BA
+:80E400004431321C2845A41218C800C0811222163181400434100148440022400400449F320546C92240024C024E24149842882308002247124A01484140423124C8002200182484848110042400910020541488420000488400BD71A04842002C048D421210042219082842236424002922011148400288181B4841124A481944F22481DC
+:80E4800000C825054488C08214111480284824024224F0895150824410064551424129450252001A2408296844001006229086001421401264482D813200434204422C21144404800C448091448748414C28B1B1064C121114810280426612460123B111221866412212463414448844A42218122522C21224C01818520098802109211092
+:80E50000018048028110D8820888A184AFC30A3121A02400221901E01182490290818219013B41241321112114C1441303512841604823728619621143420547185018712460144440426448294412044148CB1A50842C4241022B2110028048042C420354441C8862545012F0861169C881881E41400486054078C1C42411181124154481
+:80E5800044225841242C12344480328C00101AF49EE3345F52F281244467222F86F24425C74255D5F111B442B882B51361142B996B2C1E8A6F74D164F442554245A11849718552544E36882D823447241642F2868223E128D8322188BA15A1854448BD124652131C8824D8116444C0A26B148CF8888C8748874885FC19D2A0442425F341DC
+:80E60000442425D222D42213F282A21F1864258E221965161D83274A1B83125572B27211B44C1CE94674AB827489A14413F39114218F48E841F52C8A46F59C8C4F52B3A4655247181C594445DD1574840246D311E8481A3482A658C8874E69A4844D8843F19838502267864B222830314A2227F521143AE112CA8127212CC6445F1485F278
+:80E68000E3B1B25D551817517CD2928A723FF132321F19D144F222E14D146B5185F881257B431B2633711185F2215677291714D042881831834744639442CD8C458418064944A244FF560640018004004001244820010012241A0448D082048C04290448800400220084660242004002244002288A542800009F4749F361632F9462121D9D
+:80E70000434F64F67777FFF4F676765AF524261BC61B371F4FB553B5D3DD22F453554F6EFF63414AFD41C14B159F1D7D76FCE9CA9FBEF762483FB5B8F2EF66F6F2D45E149E968F25F512122F67F7E285214F4BF8294FAF9FE56DE564F413516F74B482E838E848D846A8EC4F24F48E8A6768AF8565A8AF8EFE48C8CB88CFA5F4417F343FBB
+:80E7800036F6222125D377F426267F77F76B6B2F67B742B4B2F3F7D63F17F6B1451D423BEF7BC47F45FDA1A63BEE5F46FE45C27B559F4DFC717B7F3EEE12EE97E795E41FEF63F7E5E65F74F49296CD1157E81F5FF7F5851F53F2F5E4DFE7F6FFFD1F75F145467B557F6CFC878415F361616F5CFC84E14B44CFE85866EF81F18C8EAF6EFED3
+:80E800008E84CFC8F84E5A9F6348F361677F72567475E726F67577EFE6F677773F15F524261F47FFF1F33F3CFED3D22BDD3F7FF7F3F57F5EFFF1B15F54FD55D17F11F1DDD14FEAFBE3E35F32FE6B61BF32F2F3F15F73F7E2E72D17EFEDFD76FA6FF9F976F63F591FF695855F79FB57776F65F14147BFF1F5C4C58E841F38B8C2FE87853F39
+:80E880004CFCC4C66F88F8ACA6AFCDFD8C8EAFCEFECECCCFCCFCCCDEAF3B4CF267667F72527237742F26F63737AFA2F263736F74F5A7273F7FFF73F37F34FAC3922F2FFDD7577F5DFDF7F73F1FFF77F55F15FD5711DF5DFDE4BEFFBEFE2123BF17F77B333F3FFF37377F7FFF5617EFE9F9F7F85F78F877F77F59FEB6A45F5FFAB5E77F7E10
+:80E90000FF96965F74F45F5D7F7CFC83851F38B8C2FE87857F6AFC86C66FC8F82CA6EFEDFDCECEAFCEFECCCCCFECFCCCCEBD621004411004414841009A04009264484412204104004429811202002908989082004001400882148A44012400200442F08CD2B08204230200149012F06212402388012D21481C39242D11403185102311424E
+:80E98000512416018749481165B2111236112CA821411145128108888A6444C084459828A08484881CF49B21C0421F4152281F4132481FC1324A1D24AB161FC8F24A9219B24A3915AB944B42AF147934F84293478B2D914F8AD418F9244A8D816FA27418F1244A96F122CA96C5CA9E24ACF4D1242E421F4952281F497268F29124AB841F48
+:80EA000048B24AD141B24A9921AB9451AB9443B24A3924ABB4478229F92448984FA2F4A8AFC04A1F4156181F41724AD3C1F64A121D2C2F12E1C8F44A164CB248BB15D41A3824AF147934D83278B4C8816F8AD412B924C5916F22EC11B82464192FA26D59BCEC59F2244A136DA21F49D428F49124C37691F848821F49324A1D24AF44D94107
+:80EA8000B2481BB54839248B9443B34AA3424CFB22488D944F82F5A45F00800400000000800200200200000088000040014008480000000044000000000081D0EE042C1211063981012412848E4286480180BC1412B214A84286B8A10122282110B42298164D484844414C11443112812938924188472144D2212318E444A1414A82C82447
+:80EB0000C90CA024887FBC071186A42180542812221424F0211290128E4130838AB128A41831428B9211274C42AF44011B148394121242AF24621423B4126242821D444D431B812E1C271414E08A011C388A4C02AD4483082E884286011FDE0219724314041C250190122443D4831393124A8A6823122E4C1A7283AA4388322F280229C1DF
+:80EB800084196BE54F84B1111464846D11422FB28192C84F3864314C91A44E1645F1144226224AB58E9424686D882E88478C24424AA881BFD105002B121042981228148488820014482D8582988A041398381146847448442214022034264261901410E248C4811658128068892088A141804404890A28F095970028180000288111218009
+:80EC000001002C214312641440A14230244A120227222022011004211214848800130100C0118418102842341480F4FB5EB04412C5842D24615CD441344A444B8440088E48C8134898449F4288F292284B288C02CC021D1815C414188503EBC24B81154662525183D84254621CD2493154A38CA61818895824488E4E54188D448BD2818A20
+:80EC80005484EF8A094254122D24251451418906190884188440C118488C52224A91848422C4E0B2144166212022A418244046358845433C82C44C7182081A08881160E140C8482A0C42C15FAC09498292840046642450484D4200202C8C086B128635242E89221C82246242124112229542F23884414541C6216021483021192194514AB1
+:80ED00000212844C7142A88451124C321C47818848AF830D11893431502422461188062D242440043084684072210415C4118419084122228341C4821484412C8412E2823446308A282442466882291194188CC9420022A74843013F730EB02C042852C4221460821728418A72C2116428622420844802C92388084A61A80050848541083F
+:80ED800029448822C1211081116C42204A0400846082101208CF4D0E1E22000020114222012200004084068181848810241212022712008200101101004114C012116084163882308483040010F8ED459011A012A01447821C118274228ACA22884718002847244846624850814DA98C4805696488212342C48E881004A582C2121D2490C8
+:80EE00008D38C11A147288F2184444128C61484228405C4884BFEC0326C22414284502621528224103244844822F442882028D2184440080C2122822871100844002261131684824400123D28104D0286188888C144A88228801DD595024442142214841000042212188820082148044848414145212644513E84284121511342465724827
+:80EE800012C48843044251421212841B8460C48285548448424429F1E8EA1414282428899428212902282D2421414122134232211122192802472288A241A21304A60142103221B38404144114100511141512014122602824008848679920028004849046212092223042613C4404288D114244D908914281464422468412384120440219
+:80EF0000414C0411C440081E48804488A4284C042004002E31C04848584400460500140020042446522CD0A24189450190111829018C0127582244218148951298481001288A02178428222E88002840189422F0122F108482224208A1430240881A081042284281044BA422858204148614041081821424C22160442440A8847022842132
+:80EF80002221880100464208438828F44D4D00454204482384014890448014446148484100008240A61430220044442541844205D480021E64D04801008E420044C961828032A44865027F8F4CC14180042309002125023081200882142181920082141188484024C8881C188A448201C0482810A282881002894282826828454802812121
+:80F0000082BFEC0F8A62882C42C422800228480000806242602E6822822E481962822D3226082100428C0110021421244C4112EC2412E8A4521884C22C0E428488418429C841A068C01A1448408102481428002128672424114044125981318051814A4818A1161984511424114648A44100860122C081824C081C024210041B8444102230
+:80F08000B8F248D121718664414D643E882B6422476425D1221615127B42B4827242117242F381AC1589FA6A849F14EA44F8C9228C7448F6212641221D81C6784C44DA117423916899714A7142B448BA41C4298F12D597E8126D89D0138414EA884F3CA4514AB444E4189882FF8E016E448E222F226224AD415065292402212CCE844188F5
+:80F100002AC821134222D49254914F426412414E962993422F7491264D181F4223DB5556644D4427436555A4C53A11C55642476C4C62281B248B558F84682A4746C744835442865E2E8678646528230C4D211F820423622487A2AB412A2224F26826224642F245465F28F24C86497266F12A729B194B6896D8A1D292F4332115F9D48811F1
+:80F180001F44F5CA244D422DAA4229E22452B5244CC46167C81E21C38C32A88B24AD111D8B824EB9E8224B8A8FA4B82AE4C2C884244AF575D320011301130911904124194492412440A44864400210111813183218218301812181230229415812204278224118423822822182219022C021828122F08526141D315F9783F236758FB5F36B
+:80F200006B2BAF85E336D232F66363ED681F36F6CBCD4E463F5CFE21219FB6F46263AFAAF872322F8EEC9E6612EF5AFAA485CF6EF62645AB628FA2F729791B8B1F2CFD8AE62F71554B15F2423FB5DABA543ABBAA3FA4F4A2A75E796E662FA5F5C3D38F4DF58B822F2DFD2622CF8DFD484A2BC8EF2EFEC2424B4449F452621FB541F12133BF
+:80F280007F53F732322E238FB4FE737BDFF4F662632D633F36F62F692F2EFEAEA87F74F4C2E41F16FE288B2F26F6ABABAFA7F7F3D32F8EFEE4E41F3EBFA1F8E4776F73F532F2EFE2F72B7DDF4BE83EFDA6C62F23F7434F5F26F4267A7552766F14F4DDDB5B444F18F8D2D72F66F476541F1DFDDA34BF2CF85AF88FCAFADAD8CFE4F4A6EA9F
+:80F300006FACBC86B466A6624E727F2842F131274F22F631316F42F2692AAFA6F67B792B663F26F26262BFF6F26262AFA8FAC6C67F5CFC65E5FFBAFAE6E7EFAAFA6B2A3F9FFF72793E79CFD2F7242CDFA6FA36398FB757225F17F63D694F78FD8AACDEDE3FC2F242623F6157EBB5FF4B4FFFCAFA8B889F5AFA7D5BEF42F27B5C9BDF8F35A5
+:80F38000FF8989BF9DFDECC8CF2DFD6A6C8EC6EF6EFE42CCEF86B664E624F54D12141F73F636347F72F22626BFA7F77B7BEFA6F662623B261F36F66A2C2F2EFECBE97F7CFCE6C45F76FEEEEF7F7EFEADAFBFB7F7B1B92F8FFFB9FDDFDAFEADACDFB7FE2E2BAFBE56623F57F6BDE58FAAFFAEAEEFAFFF27277F64F61F34F5585DBF56F6BDEF
+:80F40000B7DFEEFEAFAD9FDFFD282E9FE7FF9BB8CF25F9C9839FBFF9EEACCFADFDAE2CCFAAFEEFEAEF86FE4C4C4EC44AF42FF51004610048410000000011244092418111448200104214012290165014501410429814202208402108844400004024F89B1D000030487042022440224822686400E01448480150858875082E481429148801
+:80F4800018E8221C8184121221368183028D8111811A021189688288A2809422488824EEDEC0421F4152281F4132481F41324A1D24AF24D141F24A9219F24A9251AB9443F24A9743F24297478A2D915F82C4915FA2C4816FA264116FA265192FA265592D5A9E242D4A1F49D222F49124A5F29124A7141F49324A1F48F24A111D24AB94191B
+:80F50000B24AB985B44A3924AB9443B2427924989A4F8284F9244A6F6702ACE441146841A36441A344DC2AC1448D968CC4B64D488B94D032C9484E9347894631162F1498544A998616B12665196D58D6D116A5292974919C421F4896529E24E3349123F4914463B411D642F9814429B315948A4B412989F44A9486D842B12684F9241A7F55
+:80F58000CA02862808000000004480020000000080018800000000848004000000408484020000005012F0A12C240044166424422D11454213482348914286D328449414A048008C34411382420825344229E4421818082214240019022C421484180244841A04502480A8242884E7472036A628258842A4841226C424A88C818CF1124454
+:80F60000441CA2C283BC14C2411B1654413044143828C1C723308464498201124588974416022298188CA248145885C4714C08166CC485D49445F4BC7B2448274E286381148401414C328598A62371821218E14462844356211B1489D41444B12455812A487644B8147481548485142812612149847424212142849114A042111668451A64
+:80F68000C48445427C84E2C4D2586341EF5708221044682248271C1674224368228442484E1549D4422289282924420528002C81429228232248C2241800842A8144022362482CC828884142841C022031482044F8D3C21012011902121031480000110021223024142214221426024814840012459221224488282411424C0240022502F6
+:80F70000253214002B841229688240F295E3202402501222001126C88830124116014082847188644410286244441A02411AD868442404415024138841628286E311542412A0414E14CC88C24A100444428514F87B1C3042002420022044080040012180847388211421424102121181828C0410C224414119C812158272216411801122D8
+:80F78000F112442C2842188208824618043F4807902190211412105118288C082D3415240160221014644240A8214B42412A0441124562414CC421C04888290230488823445442B04202E1432104632451422342C81AEF614F012A51416041811A82018437280014840049518200821228450818148C65848CC4242A8104008480014008E1
+:80F800002C61824A0261B02231188001290441F0FECC50220031221200114048418808401C01450883C4241100001110020022002C1208448820490816180A488822422006412242FB1F901114400422000000100A810022100884008924120420016100A24440022681562200118001002181812002001D372411271211258431381218A2
+:80F8800014A4AC18011C0884844D131004C2C91241648440658146E28144128424824244120826A1C225224852188365812504272284006223024362248F73051812411143022200400185421808449028848184182281A02160148430241A0280088302294104841816288212024292388C9418201404F0E2650011002521010000000094
+:80F900008444000000004800104414A421410010A421800210022480011054424144400440F8E7260018504300941414601181189194000041418481C4400C2E140000412240C41400C016C01450A200212CC148842424100400F0DD490012241111188501001C410881110000400450849044001014041A1204411244004C0218004421E2
+:80F98000181840181246044121007F44058538494006001414504445B424E3123228844100412484811AA11183091E2400104524528885B84CA4445A022C014121255846644B222E22661814042141242125E281F19F2800250200444001301100000000008100000000002241009024000020012440022100000000F0B48640CC48422C93
+:80FA00000400004044C4242E11280000002502A9818129880800141114C4848C24840400240012411E24282800000024D082F17DB5400848110000121140C51128140000001002188008404804540084284800102202106441800200204148022144FF260E80042100140040042800008041082180018800400414008C1284044100004068
+:80FA80004204280000410024650818EFB8410218000000004001000000000010880200004004410000240010120200120000004100B0330A81832434430040011241414F9232212200101848424222212129280800159421518312B84824240400001054484322A2421002814012522212EF124C42488A840400004051484428281800007F
+:80FB0000811012828181880841184061125084844848008041022150446828000010184812F2C67180114204001528018001000040040081102402840010840200121210845222A400002484001800800241006FEB020000100120010000000000004400000000000040040041001818122100210044101C04006FD5085022443501118110
+:80FB800011801101811414004008000022400810544400204224014002811823C11224122112421821400845140844BF2C05211225020080214121115111001800508884814141812200504800414145244104458452422124182118218721240010242142584410F8FA8824472100101254111418C0118521311100102401400881000001
+:80FC000000124CE242C2242841224302400223420223110842210044508C400870530F2F22F212222AB11221B112013C5122881E131F11B189699885F888418F84041D4911489558884F84E444F424444B244F4222E24202284554442AF222222B21182B111AB892092C592229E811F111118B98867948B888F44848424E488054C885E821
+:80FC800084F4C657F0262265A2121A213112002592829CF1111119E9897818D818344842141581445C888CF64844C5B444B224224204405444386F62C2222AA1131A389282502229C81B3B1119ED89781898488B444200488485C8681F6D0F00000000000000000000000000000000008024040000004842000000000000F0F131000000D1
+:80FD00000000220022282AA2222200222222000000200400004842000042420000000000000000AEDD0000800280028022A222000028002220020000202404008024044A2404200400000000000000F0CE990000002200220028000020020020020000484842000048A0444800002024040000000000004FBF0500000000000000000000E0
+:80FD8000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F131000080A222280020020000802202280000000000000000480042000048000000000000DC
+:80FE0000F0E8F800000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000222222000000000000000000484298
+:80FE80000000008004000000000000F0242E00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000222222AC
+:80FF000000000000000000000048420000008004000000000000F0242E00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0A
+:80FF8000030000000000000022222200000000000000000048420000008004000000000000F0242E00000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F131000000000000000000000000000000000000484200000007
:020000040001F9
-:800000001AB89229C8932592821E111F11B189E998F8488889F44848424E4880548885F84448AF52096F22D226E222A1131212002592822D1B1F3191D19E8887818F18BC482464141501155D888CF64844CD444B244B262222002554444CF326226D222E123AA1812B8982502221BCF1131119ED89F818888B488B4C424200C485C8683FB3
-:80008000D40C0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000000B4
-:8001000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000021
-:80018000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000A1
-:800200000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000020
-:8002800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000A0
-:80030000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000001F
-:800380000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000009F
-:8004000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000001E
-:80048000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000009E
-:800500000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000001D
-:8005800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000009D
-:80060000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000001C
-:800680000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000009C
-:8007000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000001B
-:80078000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE009B
-:800800000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F18
-:80088000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000D9
-:80090000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000019
-:800980000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000099
-:800A000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000018
-:800A8000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000098
-:800B00000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000017
-:800B800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000097
-:800C0000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000016
-:800C80000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000096
-:800D000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000015
-:800D8000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000095
-:800E00000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000014
-:800E800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000094
-:800F0000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000013
-:800F80000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0093
-:8010000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE421
-:801080000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F424E288C41084143D2843424412082014642C622248F1132112484D08424081981D1499189B048092483242444410849648249A44230226012442C88C22623
-:8011000024448A22093016CB3A142712113119F417488964A53846F221524C22C12545B8846282411D7441272EBE419883799262241CDD427283A22827415EA91742C6F888415425D181D38231C1FB14844BC12D3A4CB8154E243314814352A4D08463832D522AB48291D886F8DC6210322118248C012A440C291204160549544280C41964
-:80118000E0148848384A002682081688A224422451C01911901183E4A8A321232841849111008441C012CA0288248AF1B31C142824008034182B1449E4348122018188842234411B6829410841488E514112CD2186C4485C088348026223A184290420045C180243122C082281A16026184658487F34081C3448148442C480820200222087
-:801200004242943410022118828825621180098200001400818141465448682082026042612428281800001F54090084195414100440042210042210228281822128110240032591118961881CC448421018110400444A0200002C021644042B188009CC0D000000110000000000000000000028000000000000000000000000000000F005
-:801280001287C04414113621C4241131944AB28814820181411841488444438424042914E44224CB48882C24824224C481860A2154842841112082018D824242482965A28441C92172554B83020010128A02112180081304462A31841692C119B21168424E21441C012D4930120020080086258842042D484C0280C8829014818D248200AB
-:8013000000483FC80A42111419C2422614982294137648028240119418908484671813E218A42419141641E29A7148220980C284481938881D86821C42C822411D24200250220049A641222518341C481FB1066302200150121100290818304860244321242194441841284816B4242404C04228000024004441304800802998884B4183BE
-:80138000449882840060225F55011444141225C22881482450120000100244118811441146448242084186C44880A42865238808888224129820041C19D142084642081283248808FF7609413502224951141724241F416416C66213D01264183B491788256B28CC248434814322283245145A481112E2212E8884429324272819F2641173
-:8014000047938D8342693419272A849A4442E282E86438388D86A200445FCE054551121110429141298454218AB4210111882D91860270418484C48411412014814123182A2CA4C2254132A4822B8246912123293C42142328A181864222328A22308A82009F760F40148263412D2C812453916214219042142C548194695882881414494C
-:80148000822C722344A8484144482C83084722130821118E348741159812444E182632891D4244608C43941A47892A0482412FA30C8144004004244800122A7111D281E48192821048688840311965988800242240082721119018272141A381682122168A8121F1821412002B41824218228262F026AA1098224230343F2102841F8261CA
-:80150000948E112843D242081CCC42599141415912C62420E1240883244412281421A8212B488312C1E12C04822442442918494462821E2881204814D6820446F287A5800553012508111C0441C041259848002604822C22B44802281045051184004444F021124004002021188812429848822304002B424A8821015D4820D14262412481
-:801580001E2C4711218D429B414784137821C21ACF3184F418622ADC43215C2C1F4AD448048C42DC61444518D1821228044721223B25282555142724002B121E4847A1A82569818F2184B862711228C8824D624E848B141A44F2596880041440824211211281A14120581813480485211228C2251502848024440284442938112C28C11200
-:801600008A92188298D0220818122908818442202481228882F4BD62200400490481423011888B2446034A08421440089381C111108174123481CC04A44662214311022521021214E217442842A018905A8256882805431722089FBA0280A242181152412301232A22014A12A14354472688274220324322212221268124728201008581A8
-:801680006442481768422B28008146014E8181190120E22621424CA8C280FC9CF7004508006024002934486028102844021F4234424861860419488CC24848444119622846A982D0A2081088344225014E84882334458882A8824A088882817082F8CFA160211260126044606242902281603410842804B02688048C0448598801001AA4EB
-:8017000024184048D1280210110929028110820441102288020028EF870F144C72140185218181410121250140190B544284214E1C42250982C0C8641E48311044224401811A34282C22049F2441241401442428422E126022C4224A42B19D4F41286122485012411142828400005082821143088220D8214191C24188884A022302B06237
-:8017800028418182180566152622E142182281440244828008004F750B0080921424196464281921840618291654141240E111180120041918220200142882A4008642022200C0214002214222802184821802E733204521311448280080040000001082042032124800886160644880A224228428140022210010621C860148822170C846
-:8018000004C18247838D2B40084814224122222228144423C4214068263084C044708285A438488800188043314140C92148214248002882634A044AA21800201402502290599011E9F221141F1762134564A37B413974127282B8496434218E48453CCB7D16435C322338141D82918A76481671CCF22144814BC423E24498436E32302813
-:8018800013622C6837142E422722D423F4A11A3F24785199141E98274A2322CC62474429D28C68124BA12F7F0F9011241815A415442E224E22EA79483132C04113D41A54341C4CE384E814E18468482F95FC4283144F34D4C344E28D54431E522AE215F182483F2CB613DA88D2137AC8E262FA42291F44B649A6224BE41C92442F149C424B
-:801900004AAA646B2223B42848AC22702ADA710C5A64431A42B44C94637B444E14221D612AC6282B481F24712AA1254CA6243F42DC4CF624C4BD754F158613B18136221ABBC4D86463128F14D222F428224D812651B4253334258815C1816B124F581CA2482B881729C2489E8A1ED29AE988B6FC38C28EC2C2EFAD0A280000001880218823
-:801980000118802182219A18A281A281A22032182A3818200180084088480800840000000000800448B0E245A1445FD3F224263B229FE6F673151F57F353252F26F761B2BF15FB69333F47B553F513181D33AF85F771733F19F96F2B2BFBCF86B7A1F9492B3F38BA22E215F53A2A6F4FFE4C1A7F537712F214262B343F1858133F83538A82
-:801A00001F19FB28687F527241F34747EF91F145477F31FB42C23F6CFC4785122632824F44FC6AD82F2698424FC6AECCCFE5FC2C27141D115F57F625277F52F6383A7F77F172341F74F333733F23F27F27BF36F373741F34F44A6AED32EF85F767617F72F64F4F3F71F17E395F17F5592B3D637F47FE6775AD1A6F25F53A2A3D513D514F94
-:801A800041A7453F82B641F4535187B21F13D588F467673D237F56F63F3B7F74FE13B73F36FE23627F78F892722F2AFE82426F44F43A982F2EFA8A42EFC6AE22CDBE7BBE147AD611F524363B339FA6F673111F12F623352F24F673A23FC3FE3123393343BB44DF75F42B1D5D47BFBAFA5F1BEF88FC6E589FC8FB49191F1EA8848FB6D7EF32
-:801B0000F5CFCCD7B17F52E736F314462D723FADF953323F21578A9F99FB2969FFD3F331337F74F41B198FAEF692F62BC43BEC5F54F9514166B2A2F274E4AF86FD6A8A27866FC2AEAA4F62BB754FF131211F11F535377F55F33C3E7F77B176F775273F32F7A3B2BFEEFE7B2379F31113A726F775BFD2F1B7B1EFF8FCDFDBFF9AFAFE89DF0C
-:801B8000DDFEC99B3F2AFC6362BFB4741FFAFFEAFFBADB57E437F634762F23B6B3FFF1F23F13F7282BBF9FFBA9E9EFF7F713337F76F63F7BFFF4FE13B33F36DE23F687973F3FF5E2A22F2AF2F664AF8BF9EEAE6F8EF226EC6AF624A61F390649014F12012E1250344834404348022411641164110044111042140371422302226012302278
-:801C000040012602226032402241022800501800F043D46018001D244004288082884401871400D028285848121C48A884501841828400D022240C40638840581211A56348100160140082AD32410040F1995EE022F41124A5F2112487141F41764AF2112CAB141F49B64AB991F24A9253F94A9143FB4AB343FB4AB14F8BF44AB15F8AF463
-:801C800048B14FAAD418FA254A8F11F2245A8F19E2A2FD9825ACFD98244DDA1F49D224FC9124CD831FC9F248821FC9B64AF8812CAB941D2CAB941F89F24A915F88B44A79B4F84A9647822B944F8BB442F9A4484AF9A44A4FD10D27821F41D42AE44112D2C1B64AF1112C811F41F66A841F41922A4B618334142D214F81C4A14F81F442A149
-:801D000065A8B44D1A8DB14DC24AD2A4E11CC21A8D254D5389D224F591284D521AD62CF59124CB121F4194141F81961A1F41D642E9C996225F88F64214478B25C4484CFB94482B3427888F44F3A4123F5C04004800840000400428000000002180010000001400004818000000008002000000100256082212901448241C44644430C21644
-:801D800021419214121841528C0210942822490410081448244840C2122441854258484CA214200C88204424A512296242008166742D0D248212105812603318121400141518145B28131814818458244110422208408202304413021146C1244823082302801503288352864210021486F8F7418002124C9448250117422745244D411122
-:801E00005021DB211049B211588424484127A122430C308A40D121C422461138442D229043D082724864424E1290442016816442846B1262502240F83288FBE44022011200271412208128810130142951844222148038244424000000000013014487144424828082082C09004A431832240090445F91082211614001102122591860146C
-:801E80001002288022C2214302005180C4214800808482081450288604820025D181C41140012D128618020042F08C8190412813128252254D1141256112C818821C61185041155249544B1814AE441D484C0422C5F142841333246100190C19082B1888241D1425042968A8800825121888A448AD628C648481F04EFD80C421131232217F
-:801F0000245414311C394118113C0120122112E412C8214302494421C2492322612244203461881114928210110223D8380813012481812724882782898484043FB70F1942420440854124829288A084C08150415096193214414AC8491004414F1468164100200888245028866641430824D0818448124182C188422C048484F0238F0042
-:801F80001252941821421CD8820128482604421601414551841918444C818808281304004881815022850220A84828148800819284A3A848429012C062009F540E8444422428130100450819624A5418481042288294121420C1881028024D3821215485C444504114449944048C18189114601240644125988450822160628D1E2448246C
-:8020000011004522E1484121C211008480C288850140081281226042480000008012840840628180C2220021CC84082182004200484F110F216C0185A221341264914CE211E2122458581AA43489584815D848F2814818874185A1282082A424A0121042042E4424531842A4482DC4281B828DA2C012F018458668488AD1828898122904AD
-:80208000E024F295EE80041C1141624142138141080000112411440041140084442648018514224448444214180115981810081444818224842744484410A8421074550113223421002B2411329021002001128214111041048442484981210AC60800861181C11129991221162288928880088880582240080024F03D610011444641444E
-:80210000844115C114980043885814100418411849081B82103884301420A34143852402C114220044811C62822400008183080082212CF8BB7D4004444224008001004308004342080040E24481024150411100880011001031111214400614220000128424A440023F440623148411148105001618840415081A14D112B12238148C487B
-:80218000B82104408484A44148114880A1411E481388512820688446222404224668144624A424A7245283C444812B28F04BF420481441214201601200A880084480480880080041221C08820000A04840088284860213B2880281118C1802842400102244D1DF0E28002604902512442023011041010048134241818444C18112190800E3
-:802200000011404141410240451C46421112111102881012022184AF9E0219440220812201184001C011101821641800B08A511815080089021B4144428902448032821241812240D14B82C824008821801128882828B86D06410000450245014128004400444428858452412A04A08428460413044220040000408144C24200C044C043B9
-:80228000800448008004FFC9058C014810818186026811CC218816012212410081211118801901004001888C41884458818D824440011427C234004024C124218C165842F06249242A633812285F2112F1213416C1341A61111E28B09915F14D114D21A7258E8584137811AC2817841B4C48285AD581B84444A112484813E414117118D151
-:8023000029E1117181B442D454FA424C456512A5F14664884A048FA4F4181A8B5521C8C0852F88F857E3145D444C544415042B42239121118B421B384A88C881860113C281114CE112C2816E52890586B12444A14213B859EC44044B25C81B4A8C58211483D81A78883A4219622E6D228E8A1722C65111C612A284256E844F84528262F04A
-:802380005D4E60144117124F1444F1543446F1241416D154624218435844604186D445E1823254C4C11D8D542E2947448F51F185844F18C311004AC9188E1116C4114D382F887823C2184B11157228D38B5A891B2294916592822634822885522A8B888E42F061DE241A021A024002423048128714828B14828B14224E12A289219218A247
-:80240000200226088C4844E84142E84182E841021E2429E8C182C828418008888018847824883824884B42B024046BD6342F57E677F132151F42E64FF376747E715F5382F514454F96F411199FD9FD15D59F95FE1D3D5F77F77E7EEF8BFB55755F13F32D3D4BEA9F92F629295F12F26D61DF44F6E1E1CF84D41DB528F42414CF81B1A4ABC3
-:80248000135F52F11D19DFABFB3312DF7BF95355BF96F6636BDFFE7CAD59191F68F8C7C53F1CE446F6C8CCCFC8F3D672EFE6F6E6C4CFCEBEE4FE6CED5F894AF171672FC266421F43D351F435355F577725F42D6CDD4D1FD5F451599F92F71D5D5E717E71DFF2F336166B765F53F32533FFD2F12D28BF97F16161DF92B86CF66D65DFD2F223
-:802500004D48DD11DF56F43414CF97F734785F53F5755DCFB3F33F6A3F13713DFF53559FB6F66A6ABFB6D4FDF8898B1F7EFC47447F52F8E2E48FEEFEDE7C6F25FF6A6A2BCEEFC8BCC4FCB8FAFF6C076AD775541357424F47F376746F53F36565C5FC4C1C26B458A5B9CFC5D944E845F52535CFC3F1A5B4DFD5F524347F53F1ACFC9F82F584
-:8025800029695F56FC61694F44F6FDED1F55F411194D358F84E443E78CFC54741D419F53F3998BDFF1F39892BFD3F34F4DBFA6F46D4E95FD89899FB4FE4B497F54A4CCCF86BE5CFD725E2FAAF842686F88EC4CFCA8D87B1E343F76772BF511151F43F1A5657F52F337355F47D6457145F541518B998F88FBD4944F4FFC1C38DFF2F2D7D758
-:80260000FFDEFE1D3D4F42F29F9DDFFAFF49591F12F64D494F87F625255F5FFED9CD1F95E514F74C5C1F41B5A1FBD1F1DD559FF1F1E9ABDFD9FB988ABFDFFF4D4FEFE4F48F8FB55BB97F3CF6C7C53F14B462F6CE42EBD52F67F5EACA4F44F68C88EE648FBAE9BC041400000000400100441100100111422014010019210400400114400251
-:802680001484260300244003000000002F3D01415014112211181982C128188C8258814C5884348618021417818D81110046941142881418802488042413182228447426914126125118484210C848A981142A08829F720D2CF511248D121F41F248111F41324A1D24AF14F19124AB941B28AB9453B84A39A4AF3439A42F1479A4D81AF921
-:80270000A4481CF9A44A5CF8244A16F1244A96E1A26C592ECA9E242EDA1F49E222FD91248F22F99124AB961F49F26E921FC8B24AD941B24A9921AB9451AB9443F24AB247822BB4478229FB2448B84FA2F43419C05A1D648F2241F44C111F4112CC246F12F1112C25D4C1D212DB8592924782AD1353D2483924AD156B425CE9A2D558F124E1
-:80278000CA87114FA27498E5A27418E5B254582E5A17C82E5A1D442A7581BC627181FC661215A8141D2C2F44C928AF149B25AB94412F245B844A5B8429DB8494BA4D52AFC20386288804000000008002000000000000000040010080040000000080020000005012E0DA0E805224194221014C140100112008400440110810220222102806
-:8028000081010000402142020083480186012C045022812481001C747342018210144883A1124822880000104108418828800283C414C4002184100810012424132204A821200224C012200881C24011B8ED4C01E26443022412438224120413020014C10015220232218E6818220070110881813041401132220080182432212448242427
-:802880002484812FA8041423D18F0C0010511813011A440188008008001084480800405484402A0100000020123142E02248480188402201820000C048EF7D0E0000906180766813B148182114414208401141011400245400202802401422890824842502248229210812211012D44201A88220E8B80B4C1111011342221103CD121C01E6
-:802900001B81A3843C143DD8814B48814004888284D04111092112301A1CC122808298364411C92898143012148842409882855268002248D734401411012217242C01467819A684009188857451084E849110048240186451850182123018142C2281021E24250A258C6841238148C18200908244A082882288AFDC0E18001081024E2131
-:802980001312D21811E11499422C64218284144001148008250140022210C2162028682810148108230823011242101A941AE50200485FFB0CA1144249411804888419214121420285024002218200121C18584800C0144001400800008100108402124A02204C34118441F03D8510482404002014C1241018942420042149141851844912
-:802A0000D11A01881A04200400142041081460825021224092248A522848400810082180F23E490000302118C0820080110813011A44011004000021240086080041203212284400282004001440A28126044A3B810060BC005480C12818204468421210582418845012448150841881002F8154682084080044802261124400260142242D
-:802A8000281011C262844CA24844128441282FD30E2100441444002531117011084081B442014602252548140111000081490100181002C028403822008048A8148009E08B8408007F7F0D4304411C414882840488142110420C41004400504210828128084482408122480260A820284A4882480200430282812181231228793701141404
-:802B000020E2618401219994521810248C9412308428460241200800282100230288250222400280022002A810A2828800001880087F460C0084004110458144012400000000008210044400002288002301000000004002210022842602502828EF4F060022816012004445835421121502144C4241C24140C12434283C02881C021C02DF
-:802B800021202102282221282501212958142748281001214100005024BFBA0614181C81841284512520883412A110040000000040083288260800002485021800242002880070220218860288818288F0E8A880518190141280A424242E114004111229011003444042066416080011400844160800002826820100000086022C11040087
-:802C0000881FC4084480146154124421008028042188484841869412B082014423621221290118272A1826C1228828002C0A2308C02222241988280829028A02284829029F6F0C8A24588184144004430588C011001110411451211144118811401C3181822048E8888141048222A61438822488262242144111120840820822247FFA0BB7
-:802C80008C012A2402660100644C410428422419314416428812140119038818002140012184142A342214180014004481A800228002288225022FF94CC1141718814AC34E57324F447444C1184E72673518441D418CB41111B44154125DC82C514150232E211562134D32261171342322424342722854222CA228261622C2118819A28893
-:802D000099F281821CE268022118242381C48823F868C6D01134981F127219B954A351902127541D81111CB81221784612E244014522D412024F12A888455244243E849222C022A0282B3192250232341AF2A9222D22F0A22286D42242022F2A183228822692222EA828A22CFA4F2630547014684215C12416D242D4257496845D22873477
-:802D800025C2141C78227184C534251754146C515429F822292D18869883AC38812B8827891D88874A299B312A22F822882388A8882D2AF02282222D84211190B24CDA8A9A84812B888D224CF1F3E7400444000024008A041A8418C4821B42881B428813823821308110018092822888288800112918811801111001821400A2608AE08201
-:802E0000042608BF9C074B5457D49FD2F23D391F5BB772F753535F36F651113F2EA3112F2DFD1A18777C3F59B174F693963B289AF32E2E5F4BA9AA1B334F623A23EFCAF239384D841F3BF3ABAB2F1181E223B3A2524C2E326FE2F223213F13F321227F73712BFB83833F23F3212357382D82B5CF832F28F82282AFA1FBA2A22F8BF9AF8441
-:802E8000ABEC8F82E28AB83878D4045E445E559FD2F23D595F51B572F743435F76F655551F67F715172F25F5AAA8771C7F19F3F4F46F2BFB82649AF7AEEC6F6BA9881E122F23D122F22EBC3AD3CCF89113BF98E811E112E823519A4FC2E322FA66643F12F231711F22FA3636AD8A3F38F833322F2AEA68D831D8A8522227282F22FA3A98E8
-:802F00002CB21AF32C2E2FAEDC82B288FAA8B8BE65141F54D551F42D299FD3F355553F17F753534F76F653137F2BFFD2D63F2DFD4B686B847F35F5D4C31F73D717FC3417AF9AF8153565F591912EB33F3AF82EAD9FB1F127273F3BFBABAB3F3979A2F3B29227284FEAFAB2227F72F622223BBB2F1AF2B4B487A83F28F8B2B32E22642D82D5
-:802F8000BD2B37383B88888FABF982A2ABB96F58F8A2882F8496A8AE926FDE0B4B451F11F52D219FD6F3D4553F56F647437F76F257575F63FBD3D73F25F5DBF82B843F77F577777F3DF947C55F77F56F4F7F595B171F3BFBA1933F38FA3F2D1F13F3BD2F3F3BFBABAB1F39E928FA9292BFAAFA96862F28F827672F22B2F1F9A2A14F4BFB6B
-:803000008B8B1F28F8B2B32F28F8A3831F38F88A8A37383F18A882AF89CB822F8B792CB68ABA42E48AF8A8A2AEE100A01290145014483440021440850480024440044480120219080021A0123022400226022440020000002038480082BF320C504150C100004714132824010060541164400154C081111284140088D0A228084022082830
-:803080008882880028205812100225628888828124CFA3032D521F4152281F417248F2112CA3D441B24AD1C1F24A911B61AB9451AB944782AF1439242F147924D812F924481CF9244A1CF8244A16F5244A96F5244A96E5A2E449E2A2F491242CF491248D121F4932481FC9324A1F48B24AD1C1B24A9921AB9451AB9443F24AB443F242B6AD
-:80310000478329FB2448B84FA2F4A979D0A2F5116485F2112426D2C1B2687111346816DC4AF1112429FA15288F247834F848B2439388478329FA3648A84F8295382F226C412E488F58F224581CE2B2C5244F82F511284D4A1F4896581D244B141D28AB141FC9326A15FC4A941D242B344D28AB9443F3423447832F447B34C8A46F8284EB7F
-:80318000A2B5BE0B2008000000004480020084000021008008000014000048000000000028000000002501ADF800001100001001200100000040080000848220010040A28100000022248114830800290140220AC022EF890E2CB18102006448245024005061424440046418200123480400100428008002000022002002003880828802DB
-:80320000289C18F8F1FC1424130C11408244024503604315064440046400122331828604848800110081244A090000222824456812818082128282C8222682C28123F1A5348081020044000000004200008041080000006041800200280000000000880012180080088126785C042011044014041400120000250444000040010000002045
-:8032800022480240040011A11022080000004100003F9A065041A41488204103148E1842005048001142440049081085028048420200200228192814288A0814841484002061A186482111D8EA094011448118341411108128050041250445010090841440810220081022080041228250188B282C081C18180100205184290840F853E5EF
-:803300000043512800002411901800008400204404000041000010820210820240214402000040080020411881015F9B0BC01244002031442428412410011004002002A90144214002008410028502000000002200000000100112930C844CB248110200004C014241181048020025044129418808000040020081160800001289088052A2
-:8033800018001222000000BBD78002000040020000481134100841000000000000001002440000000000000000401809F0B47620C224A5040000604240021C1401100244612210480821400200002100830100001288200285012021020000B0360220C1120080C14425220148200115584284000044004100000081211002610000008488
-:8034000000000000008184003FF50320040040020000001004002400006048189800000081100800280000000000000000003FBF041604124002181224413012450230124004210024502200000000000000181818002002000000001008E04B090000000000000000000000000000000000000000000000000000000022008FE40910042C
-:8034800000292114022141214121100200400221001800001002002100180000002002000000000028DF23010000800148000010040000000061000000000000000000000000000000008410F8AC620000002004008400004110040000000000000000008011028002002200200200890200D0210218181240148401800100180040C212EE
-:803500002400278150822514041800000028260222121A1208222822000000000000223F170482828400004904410000000040040081000000000000000000000000000022400140012F920D848054484908000040042800000012100A18812D8400211840110284800400100840584880420800000021F0ED920043184844822164410083
-:80358000850245040050442C110250A841A42118181200002124400280018100002200812200608200148C726709129200433812582944921244230121246504101294122118244048840821240040088C02200118280089820200000014D0884201CFA50A4981A411844444162204450440921420010024005082214F611804001200008B
-:8036000028001E32A033408882224208000022000020D2920780410800100229012901290129012100000082812C0124400224400224200240082002000000000020014FC50316C4141E184564287042725486F11616AFA1C1121AF116162F21D1648151642B1165B612011AF184862F2858222F41A1912B1125B2120121251242F2222207
-:803680002B223E3223A133128F82A2222AB228F228280085A822A022F02928F018181A7128F813EB60414E5C8CD14444E26161244745295166A58EB13253662D224D142951642F2151662B11218F81F1849EAFA8F882922B111AB11251222F215113212553AA214E482E222B731AA133128F82A222702CF428282E24D088A222A022F028FE
-:803700002824AF81A111AF83F1673BE041E1419518C54C022167452C5144A53C122C53442167411652461E1265B61211A2114D162592821632121E12E021511224401AA2622AE221B132A3118B118F82A2222AF2282487822850882A022A028F8202A5088F82F183E460418F41B51851CC2CE861217556C4124F61518823C1324F612172D0
-:8037800016642165E42151662B11F01818455CAAAF81682123E12141B2124141522125082CF422222B153AA3118B118F82022AF228248F8292247028A822A022F02829508A248F82F17E960000000000000000000000000000180000002002002280010022000000000000B0DC0C0000411200000000000000210024100400000000000035
-:8038000000000080020000000000F0A7E3D024F4112485F2112483F41124A3D441B24ED141B24A9921AB9451AB9443F24A9543F2429547822D914F82C4914FA2C4814FA264114FA265192E4A96C54A9E24ACF491242CF4912485F2912483F49124A3F48124AB141D24AB9419B24A19B54A3924AB9443B2427924989A4F8284FB244AFF3C0C
-:80388000024D5A19D624F5112C83F41124E11F41B64EB111F24A941FC1B24ABB15F24A9432AF5429F3428547832D856F83D418F824525CF124C8144F8265182E5886C5599E258CF4912C481F49B6287481B448F19124237681BC6A51412F44D9C1B24A9B252B9445B84A1BB44A5B84A9BB1694BA4D5A3EA8402888040000004004280000C3
-:80390000000021008008000014008480040000004004000000005012D0A6010000100400000000000000000000008400000000000000002800000000608290282D74008210042048040000000024000000000000000000000000000000000000004001BFEB02200C44008244000026040000002400122008000011008120040000001024AF
-:80398000220200000024264831382F130100004004000000000010020000000040080000000000000000000000000000BF45010000000000000000001004414008000024000000000000000084000000000000676100000041420000000041210000000000001004240010022100000000120000000000F0771F0000004448000000000041
-:803A000000000084000040020021400224000000008412000000000050430000000000000000450200411004000000100400000000000000000000000000F0E59C0000002200280000000000004440080085068400000000008028020000001200000000EFBC0780120800000084810000000021000000000000001200000000000000008A
-:803A800012000018F041650000000000000000240040040000000010080000000000000000000010028001F0723D002881002800284008004002004410048400401C1248080080010000822200000020012C01001818F02C91000000000000840000000021000000000000000000000000000000000000008FE603000000100800100100A1
-:803B00001004000000100400002220080000005088A03100002200000000EDC7000000000000120000000000000000000000000000000000000000000000F08DC8000000000000000000000000000000000000000000000000000000000000FFE40F000000000020010000000000000000000000000000000000000000000000DF880C0077
-:803B800000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000212001001002000084000000000000380000E0410600100840080000000000002100000000000000800100000000000000000000D0870C00000000000000000000000000000000000000000000000000000000EC
-:803C000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000E6
-:803C8000000000F04FFE0000840000000000000040020000002180010000000040080000000000800200001F8D0700000084000000000000000000000000001002180000000000000000180000F039E1000000000000000000000000000000000000000000000000000000000000FFE40F0000000040050000400400210044001002188048
-:803D00008802218001884008000028840000800200004FB1070014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C0300004001008004540000484004000040040000008002000088000000804208000000F046990000000000540000004400100240040021806E
-:803D800001882810021880088400840028840000800200005FF90B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F002100140000480080022148008002000080028004000080044480022148400400214840040021FFE4
-:803E000018040000000000000000000000000000000000000000000000000000000000F04FFE000000000000400500440000000040040000280000000088000028004008000000B0F2040000000000000000000000000000000000000000000000000000000000F04FFE00000000000000004004000000000000002800000000000080022B
-:593E80000000000000E0580C00000000000054000000000000400400000000000080080000004008000000F03D7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4
+:800000008024040000000000001F1F030000000000000022222200000000000000000048420000008004000000000000F0242E00000000000000000000000000000000000048420000008024040000000000001F1F030000000000000022222200000000000000000048420000008004000000000000F0242E0000800280028022A222004E
+:800080000028002200000000424200004842A044420042424200000000000000BEB300000022002200280000200200000000808424040080044A840400004242000000000000F0DFB100000000000000000000000000000000000048420000008024040000000000001F1F03000000000000002222220000000000000000004842000000D4
+:800100008004000000000000F0242E00008082820220A2222A22222202A02228282A022200000000004800200400000020040000000000F079390000000080A2222AA2222A0200A02228282800000000802404008004800400A0444A040000000000008F8A0600000000000000000000000000000000008024040000004842000000000060
+:8001800000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE2020000000000000000000000000000000000802409
+:80020000040000004842000000000000F0F131000080828202202222022AA222282002280022000000420000004242004880242404420000000000006FA8010000280028208202220000282AA2222228000000002004008084240400004842420000000000006FC206000000002822802202220028282822000000008024040000480000D9
+:80028000004A04000000000000F0B8A600000000000000000000000000000000000048420000008024040000000000001F1F030000000000000022222200000000000000000048420000008004000000000000F0242E0000800280028022A222000028002220020000202404008024044A2404002004000000000000F0A4590000002200CE
+:80030000220028000020020020020000484842000048A044480000200442000000000000FF510E00000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000028280020A22222200200282A82022A0200000042A0448E
+:80038000480000480042000048000000000000F0EF64000080020020A22222280000282A82022200000020044200808484042004008004000000000000BF8D0400000000000000000000000000000000008024040000004842000000000000F0F1310000002200220022A022282800222222000000000000004842420000004200000000DE
+:800400000000008F3B06000000002800222200002828282220020000A044420000200442420042004A04000000000000472700000022002200280000200200000000808424040080044A840400422004000000000000F07BF100000000000000000000000000000000000048420000008024040000000000001F1F03000000000000000073
+:800480000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000282828002228200200A022002820020000002084840400004800002004000000000000DF720300000000000000000000000000000000008024040000004842000037
+:8005000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE2020000000000000000000000000000000029
+:80058000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000222220A222282800220000000000000000480000420000000000000000008F1B0E00000024
+:8006000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000029
+:8006800000000000004FE20200000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100008082820220020000002A0200000000F8
+:80070000000042000080040000004242000000000000DF9C0100000000000000000000000000000000008024040000004842000000000000F0F1310000000000000020222202000000000000000080240400000048000000000000004FE2020000000028002222000028002220020000A04442000020044A240400424200000000000000CE
+:80078000CFA40A00002002200280020000220000220000808424040080044A8404000020040000000000004FB80500000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000000000000002222220000220000000081
+:8008000000008024040020044248000000000000005F190A00000000282A02A02200002A02282820020000480042000048488004000042000000000000F0196200000000000000000000000000000000000048420000008024040000000000001F1F030000000000000022222200000000000000000048420000008004000000000000F0CA
+:80088000242E0000800280028022A222000028002220020000202404008024044A240420240442000000000000F055D900000022002200280000200200000000808424040080044A8404000042000000000000001F160300000000000000000000000000000000008024040000004842000000000000F0F1310000000000000000000000F8
+:800900000000000000000048420000008024040000000000001F1F0300002022220200200200002222002200000000004242480000000048000000000000001FA50F000000002828000000A02228002002000000480000A044004800002004000000000000BF7B0F0000282A820222002200000022200222000000000000424200420000AC
+:800980004800000000000000EFE50E000000002822280000002822000000000020040080048024040000000000000000009BD50000000080022002220000808222020000004A2404004200484A2404008024040000000000009FAB0E00002022222202000000A022A022222222000080842404000020044220242424A4444200000000003D
+:800A0000005FE102000000000000000020022222222200000000000048420042202424A44442420000000000006F6A0B0000282A82022200220000802282A2222A2202000000000020840400420000000000000000007E81000000008022A2222822220080A22222282A0200000042484200004848422004008024040000000000F0C9918D
+:800A80000000002222A02228800200002A220228220000004880240400000048000000420000000000004EA20000000000000020222202000000000000000080240400000048000000000000004FE20200002800280028800200802202800200000000008004428004000000000000000000F058A2000000000080822202000080020000BF
+:800B00000080A4444200004842484A2404800400000000000000F062FF00000000A02200002A22022A0200000000000000002084044800000048420000000000004EDC00000000000000000000000000000000000048420000008024040000000000001F1F030000000000000000000000000000000000802404000000484200000000002D
+:800B800000F0F131000000222222000000000022002222000000000000480000000048000000000000003F3E0400002800282082022A0200A022002828220000000000000042800400200400000000000070850D00000000000000000000000000000000008024040000004842000000000000F0F1310000002222220000002200220022B6
+:800C0000200200000000008004000000802424040000000000F044BC0000000080022022020000002220020000A0444200002004424200004842000000000000F0699D00000022002200280000200200000000808424040080044A840400004242000000000000F0DFB1000000000000000000000000000000000000484200000080240474
+:800C80000000000000001F1F0300000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F030000000000000022222200000000000000000048420000008004000000000000F0242E0000808282022022220228002820A248
+:800D00002222280000000000002004004200800448000000000000F09F920000800200202222020000282AA2222200000000200448808484042004000048000000000000F0D5AA00000000808282222202008082822202000000A04442000020044A2404002004000000000000F0DE8C00000022002200280000200200000000808424045B
+:800D80000080044A8404420000000000000000006F510100000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F0300002022220200000000202222022200000000004242480000000048000000000000007F870F0000CC
+:800E000000002822A0222200002A0280022200000080040000420048000020040000000000005FCB0500000000000000000000000000000000008024040000004842000000000000F0F13100000000000000000000000000000000000048420000008024040000000000001F1F03000028000000800200000000000000000000004A040064
+:800E800000004842000000000000D061010000000000000022222200000000000000000048420000008004000000000000F0242E000000000020220200000022000000002004000048004200008004000000000000F04666000080020000222222000000202202000000428004808484044200008024040000000000001F44080000000079
+:800F000000280000002002280000008024842404004880044842008004000000000000F0ADE3000000220022288002282200200228200200004842000000000000004A0442000000000000CF3C038042018C11441804114D111200C0244C4268412021018400181008181820120828C048418C64222E48200380014004A485041E2220015E
+:800F8000BD8E50129481914541C81489411404D0415184471284E042618238222021011A4484E141C21883C22CC181414018088345C44C16A424433424228942D424227626B224E521A212A1188C741AF28BD5141422818011981800604112444111449014000012810044901C12104434288400815084420080012212412012922881001B
+:80100000128542E87E0521000000124011011C1198248141843608180012800580022226084004220018C1A418806242100824422843554223C2282024F1F76A00941111514410084400002082022002000080010012100800818084044966C420040020420480032C0112F0A9420000848410144404000000201284812201000012401804
+:8010800028010000400800224A42042002414006C01200001FFD0B0080024001100400820000000000000000000020028400000000000000000000F068130013C12C26541C4180121981A282850190148AC184414100000084008441702492484664451008441844224212242024148A4202431206414B21F0AA6424282502803211814103
+:801100001242182C01141125110428820093011084416C8144248D841244282001902866548152282F4298124A180A1284812642C8824905842CF4259C40022D2C28D1448144114681831B012021C1844902008D1100411618041054844D228334441E4400504843148862249A8201214289214238228D242D846915F414282CF46C213095
+:801180002213014422130128890100A11134514C08308400000040381845082928118402128120A22145A141224425A2488304218400210000F02FF810428441E4220130112400C082D012082522D848914581004021421544C112000080012541A4121008248C541213D12211418104822028A44244F0299614D01212742211531848A783
+:801200002413E11421C841211681B584574193B522C4124228874641864897481032624129B92CB1C8D2164494141E84382B84C5C295C7245C7A84818848E868B484C49E2A483C4485664216AC428748FF4E414332256C51212211305214392118412291111A5821122B421F4104224F821434882642484422423412C44244002D914C82E0
+:80128000086719467C82143C81823084614B48239284103444414914D41A0700C0243C112844391242C0428834C86614E694981C2446080014514D412414582182322E8A199414161424B1525248819021331C3211A991431B8483214898448C38228B61288CF87FA2608422402131224A110818233824214DC218A938821009A6348248EA
+:80130000118149B824B4128601498834828E218CA248492491A28B24439488484311C841108811889114129818102A04FDBD10C94411442AC41520134259814D4838148002A08110C22614412981981145285228168121C4418421482644311420122202444E312B5A4014823C28818430824C086E1EC03240A4218400254121842101217A
+:8013800085442404000083818E02400200400C80332289280128105881432248086110080066A28240E884F848B1303122411B126E1847132CB42841518123A812235112A7416B828A0413414294A41E49572A89021F4374723C22847321958C42242A69421A8AB314B244C2288C641143822C61881845C8184BC1188B814E2210C8C88BB2
+:80140000842FD5022C44444144021811211AD418C148B0840484219088800A8004410012204822A482282C04C5328183042C08C34248D181F64212412400260816882A48048EAD3042990264304800A41184421242482E4842158C112181548189D4124841120847A45A0246188802400118B441949964C24A41C21885D1814508874812C5
+:801480004908D8005F920250221D2860843140981120E881322484391814491238228480A4282240544123968385614290821E841B16448D844AA2481E24932418344230521992A225944643084E842341241204CF39074002188031424421182901504110911610141218CC1241502A14429280A8495844144100434108124CD442324106
+:80150000841400490821AC124C9A84207814E2964142140C191234244419C22449221491888818422413B48156E1150400604644221D48226C14F882251D4281841E21451121214404825012C081411932488D141A08901844A18B42AF7F0A22220042A4606224224188002AC8AA1C1318C8C28061118D8241842825448191225420048206
+:801580002088110420082844000082828094244252411E814E3A608180061843041200C0668229344823013602442289B426244248143281231302501612881219C448C0811001814142C48928280800A820825822C9F2355B204454842032222829C41885249818C028444183180412104418A1A42288308426591860B82CC24615228825
+:8016000091E9814591282601890114D01884210180618100292CD4420C4140341632B0642191448C25051E428622216144E04582E821284114441492484881582CA18518911C05890100621846240284004483840826342842839C2246027F5102AC2384C428C100292442424844A821241124003E48542821488D11422A688241204848E9
+:80168000C114D0864CA44125E454A2816280044084A4243014832101205184A981F8521FF0144427266D2947438FE112FA44444F81D574B218B7427538C82887489E11AFC17E48324A3B149E5B47B23AD5A9F5A8A1C7B2A7824F46E284E22EE422F5BB5847E6EFA3F4598227D739247181A1428F14F4515B9B325FA87C24FE482CC72515EF
+:801700007319FAC94C47E58FA5A581872A4F62D124751CE4C4D998C584CF2343B34252482644B962C1482A61562E1826F488884AFA48842F357C4AB264D1857C24B88492A88D84C7444366C4884A12B98CB41DFA152143B48341D454B685FDE4814744CD8EC7544FC318D4C4C4248B684D518CA441CE814938A84D84841AE8897AA8A8DEBF
+:80178000437944B646F3DDB1E022D19452283849F464372D222D22A355B643C1512F2941B8245C312F53D171F1384E77463B118416D524F483645D46257223D7D2F14A883CBA18AC9C2D18241E161F9AA1111B391B18AE24566114466122118128341DD182CF48D1C4B3486441A42AA6888F8B74CB074001004048010000348A0400000080
+:80180000000019219482001082521228808208002041033C81C4128424008A440281003F1D4FF252665D2E1FA2E2A3725EFA6A3A2FE6F3632EFFA6F3EAEA6BDCAEB22F41B541D12BF26A2265A5AA4FECFA62B22F67FF28285F54F5E7C95F5A58A1BFE1F172BE2F2AF6C6464F4DFDB5CAEF69FEEA6BBF6FFE83A33FCEF2A1262F497451E8D8
+:801880004DFE544C4F41A7113F15F543412BC9AFC1D487F4DF982B55EB114F42FA3C786F49B91EBD24BE1CF9F4C44FC448F266667F44F6252E36FE5E2EAFA6F3627A7FA6F25B3AAF2EFEC6948F22F37A52BF84FDCBAA2F3CD91EE19BFBC4896E387FDF1FF24D1D9F97E7C6F4C3DAFFE1F173BF2F2FF6D74F4FECF4E6CFEFEDFEDE4A7FED11
+:80190000FC87B63F4BF73126E7C15F85F4C4F44FD4F654749E982D4CEFC5B593FC7B68FD4DFF85FD4E4CED183EB48F83BEA6BB56BD26DFCCFDE4D4EFF60E4F67F62767BFB2F23436E7C54F47F37E14DF57F26F3DCFC7F7EAE48F2EBE9AFFC99BBF18B979F67C7D8F82F2466EFF66FA77F5BF97F655411FBEFDE3C3FD8F5D656E6D3F3FF7AB
+:801980004257BF5DFFF4CDEF6DFECEDE7FE57477F78764CFF9F1B325CFCCF4DDDD9F95F58CACD5FA17533D47AFB8FD8AEA7FE9FDCEC66F64D44EF8BCBC4FA6F5C6966F8DFD4ECCCF81FDECDC2F9C076F67F62767FFF2E263F37E74EF47B37AF77F61FF57F37E74AFCFEB2FFBDAF2FFFCFDEFDD3F3FFE7A757E785E5CFFD5F5F7FD9F95F5BF
+:801A000051551FB6F7EB6BFFF5DC75F4E44D5F7FF74A5FBFFCFCF6DEEF6DFEFEFC7F65F476D67F49731CFEBFBDDFDCFDCDDCDF84F68CACDFA8D8F7F61B5FBFB8FDCBEA7FFDFDCFCAEFE4DCCEF8B4B4CF2FFFE6B6EFCDFD4CDCCFC8FD6CCCBFEB0318302484188CB424211124216288A04960814C32118594418B241361441378480481D010
+:801A8000489214421842888001148422C011482E8148C0481440210996982882429228F076852088428312222104C716828096181914A24285811402981984021013C8428E21495418652251241160494112464104282460148221F04282164804A0422901448E412FC70F3CF4112485F3112487141F41724AD141F24A111D24AF149921E5
+:801B0000AF343985AF14B924F44A9143F242B147822D914F82C4914FA2C4815FA264154FA264192FA26C592E4A9E242FA2F491242F32F4912487221F497248F29124A7241F48F24A121F41F24A931B21AF343915AF247924F84A9243FA42924F8294924F8284F9244A5FB5032D481E64AD421F41724832112724CCD22AD141F64A1619F298
+:801B800048B6418D124B42AF1431842F3469822D916F82D41AD1A4C591AC2CF4265896D1A66C112E4987492F8274117C22F89144A37211344A1FC9B24EF89128E3D481F248944C92B81D284E9447828B94A22F44E182C4946F8284E923D4DB098400000048006041C028000000000018000000000000000080020044800200000000F0D327
+:801C00004580321124C144142100284230814511924C1A0CD0182882880110042444128082024C281641B81218A881484410048A120810280150481200C44FB4064882E022012220C41847141682220492825028C6128451840011244844222117814841AC28022981410254008AD1129C1881882D44C21842209542828C768C019FCE0DDC
+:801C80002846091E26441C120283D1149214281B42542B18C6AC1820D484483288121214822314148431111912443AAC6662148D121284198944E4285114C3C1A82C18840218A01423C4822E484308A71C8024414208004880642480080042842D8211384100100424282181482888001220184204008A041088A4841628045084181058DC
+:801D0000847F71092210D44142012130248C04481CE88884084C08A14842400144844C4288522444002061221141C0111245022522182849A248002C221822121884AA48CF8E4642E4319218244CC24113631412A21B4A2129044D482D42224C9425649B28288A92C8B3481118344C29C25A4CA2528E2467149624E182D816B884D21208AF
+:801D80004991A4C721B22484648E488616147828860882C1C19FC908631261413023103141444AD2210833840842230227424D42460826C14A4411284016D4840442A21514341128153484231154428225B822A1812490484169528241294AC884C4C1F7CB001A12DA4142344129032A91884A2284C8488F64084C384485011B822288885C
+:801E00009C485884C166C8221692241A52241AA49221863C821393812091264B188308A18E4429280882A302008AA2844F794F628449C42C111A0481864441825824A82D9C90AA2038888CC2883048184E84880000294848C6293B2183084CF12288282018748241D48262129018490120218882111288F627B450281A84312290131012F9
+:801E8000061247968C22B41484811C0480C4A2382C092A487268E2821158A428601490494049421421712221A1121958A48A5442812009008A94C28285E237024400188440840A000000004602424004282C521842001E240020081225348200419018002001008C5242C1008100F04A9D304429C11C29C35812C4431241A218AC42881401
+:801F000084094E86863868828E241628DA22424192282D188CD38698286084141B1441AF519828494284312BC0269942889C1649C12A924C2128B2188864882CF4D92F1042241241124102610019C48247894E1226A884003048A024E0446882424828411042F422821AC282402218128168412D9112881B2129C228814044082024082635
+:801F8000F8EB810014601223822302224D812218002256082C018443180482A8244D214064A845D2844228CA244C88189184002288000049028028884428DA4248285C844D5F00001220048C022088688A8200608A49280484C88410088018A181821A081225522420014421222142860118814B12124100443222642CD8C10D4810584201
+:80200000A1D14654A1429829440224C82662846014101642845814284110285A18888441D016C221A221828E41811243B811C21812B04C1222C91236C6181008814AF2B98300414820243418004A12982290284085084100106122244042020030223D1829480814288381411188C284219082D08408211480012082D83C01CA413523128D
+:802080008D421083554121888A143812102C8236212C11C825164196812411604811644423382888D04148864889188C2A1142B18222180221441082841148D418F1B86C1022C4441962421148544815444444048D444842807442810420921880484802302822404C082138102C8214C824821088282824C8842223081012F44D6B5014B3
+:8021000021001400218424464104109282512511281841286A11501800001440012028025464405214104148082051482002C086162401CE6B241184831212110821418B248168828314342245022821101104800B4C4878220240141481128A024C1103A1288222C62A5124812400222941886182F086111441244C6444641E24CC815688
+:802180002240412494264031225D4284C501902211C911870821818B124001228C01490C39C8124C69215988311244800A00181A58682092822AB43A4C41738491224F43D412762B35581D484E4447C84ABC120430882E284F16F422284E2E8B848651CE8E151F2142DA28115324822ADAA851EA2F6891AD4B123B122D21235241DD12456A
+:80220000C332976689F224621E9989AC218F44F89AA84381B824E223F1848883F81C1885F5EC4C87495042467C2418732CA8742D4C74F041A3866926CF8CFA84524CF244478E225B413718186964125928D215185254846D8C37987F41AA228B8216F88A224CFA848A1F78BA86EAC9E84DD98AA8886F4AE9583821ACE24841088827412CDE
+:80228000C4A82D126DBE228E982D82AF6E46B255542195C633176447815F22B16A732FB222352F8A4A528A6F24B41B58C2C6B32CD4B7441CA126CF18F88A245F9AC22288855228144B888C62421D8447281742413A5112B157422F8143B113318A2B18A97886D244F1CA1243F81294A15E2412284B261AF22AB1205412408144817424C195
+:80230000482E13E022014C019819C494486C994198484C024C021002211261122501214001427044216124824602462268648246028522482421F47A2E145F5454F185FE1D3D5F7DF513176F21F133136B441F13F19D9B2F2AF9FA9CCFC9F118B4CF5AFBB4914F51F8B18B2F38F8DADD5F53F185C52F19FE81851D214551ECEF68F8AEAD15
+:802380001F13512DAFA9F91A118F49A8988E89AEA33F2AFACFDE7F79F9B692BF2CFEEB781F36B2CBF818F22F4E5C2CAD284E522F44F5E4A48F23E367743AFE38388F43F1782A2FBD0E1F51C54CC5FE1F1D5F75F31E3E5E4227266B151712D5FFA292AF8D7B88DC48F821345F27F337871FBFF8131ABFA1F17B7D5F5AFE91F395F189A11474
+:8024000085FE8686FFD2F2B1991FB8F882A2A5E5C9E822FBE2E24F6AFAA6F76F1CFDD7D7BFBFFF89AABF8FFF7135DF54B818FFE8ECCF44F448E8184ED26F4EEA2F7D32F2329AAF83F32829CFA7F2D2FE145F35D57354629FF3F34147BF75F556747F77B34AF669E9ADAFAFA3FAC2B247488D86CF13F26D31DF58F1258BEF715157FFDAF890
+:8024800055155F5EFBA58DDFF27A2656EEEF68F8A7AD5FDAF2981F6768A7885FDBEA28FB86C34F1AF2A7B3FFECFDD7D77F7AF1AFB7BF8AFFA1F73FD8E925B342F65C526145D646F4A4E6E7E3EFA7F63EACEFC3F3BCFC8FAEBF9742F31153B55573BFF373E2F75B3F9F75F76727FF15F379399FD4F2B8A8CAF99C148F44B8B1FA6D33FF7892
+:80250000F1638BFFECF85D59EFDAFA74345F7E7BA5FB2DAF2752857E86F4A72D5FFAF2941C4F6AF29F1C7F59FAA7936F2AFEA4A53F3CFB8E1FFFF9F9A33F7FFFFFBBFA3F73DDFBF84AA2EFA8FA1E96EFE2F84EDE6DD26F6AFEF6FEEFA3F33EBCEFC3F3ACF9CFA6FFEC880020022D128418004824000040849428481041048111008594844D
+:802580002012988600501690148426430800960884608120C924122880027F78031C544181601419B22AA14127121749272692811A34421221122521314A3246041C1A8242024B828758292848A228E04842A228248C84A8486217482148A314D42289C4828A44A2488524A82445F85D5AC0421F4152381F417248F11164A7161D64AF3685
+:80260000D141F66A9319B24A3985AB9443FA4A914F8AF442934F8AD412F9A4488D914FA2C4A14FA2E411F2244A96F1224A96D5A2E549D2A2F591242D521F49522A1F4932481F49324A1F48F24A121F48F24A9219F24A9253F84A9243FA4A9243F24292478A29F924484AF9A44A4F9D0B581E6C8D421B2187141A366A4CF422121D446E97F9
+:80268000118DB45B68AB1453FA4231AAD432F1A5481CF1A648AD114F28C5B14DC88F11FA264896F1224886D592A5282D588E2C2D581F49D62AF4912487149E24AB141B28A7141FC8726814F148B45B288B14A28B1443EA2479A498122F8A24F4A41ABF4E0486280800000000440000000000001880080000140000480000000044800200C2
+:80270000000040019F6C0B0028121445A2421E26168862A48629B4842404C100451814044382982C0025552445129864218890222144AC24022A042A210812450286A284008281424CC943BFFB01462669611148990320542488229215928C241361221F21043B412011184312D14202899211308281260414840045618119490815C84244
+:80278000812181228C014B4289A248C342D184F256751446265D24169141162684A24145B28CF42281624E8782241741241B41811F211424313833D84803A8418D243D12153886818124664348C448254568148412452834226484F0C218403428867A4468114F81F6117D00A012001D282216148A02849870480481222441250410042450
+:802800001465420144A024218E2400008082A12980C281D02801200AA0248242224C089F5308604100002228832241010014413014244301200400830410028844241072818471810420421488028400A50180C48216280442F09EAAB02414024128172443D81881D41A28CA11F0C316C0D349A48425E828E442249821867444426442A967
+:802880000144422721228908822901C088A48A41224C22A18424418246425828E0444254488481FFDD024914064422348E241B1268AB81821890D4B08111C45690122B4280C4844420824112242409240031209888241A18C488281842104421548246187242C84480047F690A22120020048481111C12411251124994428884434C8468AF
+:80290000122014964CA10024D0423288248896245141102802290421860821A90800824303451818F866A824C1481642418C0228454102C5026C9C1486064243081012215424981008128046022014021A08682420145842C048580018830440182221F48E19408804001D14422124432491649A429141225048809282ECC8142CA88298BD
+:802980004121860C8424C08111812088222481931883019624A18382882C64440028212B92422CF2C4A680040000840000008008822413111808800283020044290812422400400182821001400120110844808C184808A7EA400400841D3448221125042C2621846162888D4423782802C41D14E6C28240044788D08228941242110088F5
+:802A00001A2AA4B48A9112931128098CA15888244E1448C0C282B848249FE40229042C1111048502414829418838852F542808C015908882004C628250829014200229082D420011002284421032114A08188C04450822818489A1429DE880140511496482000024200188802808003048808C08F0412280C218301130C2122486182A8875
+:802A800008294288288488142224A84100103228F05B658091121223411982812215213281403244110025B88451828244244460418644280222C8C12329024388211201838408149C12C22842200498122128D87045080040C422C0441542D422624428C814448014840C88202408C024211821250200002D820000A0488230264249016E
+:802B0000409214608489811908F05BE5400D2508211D1421C150841A7A180220013223282101A0811CC14280681223081C01A991424211111214201402304140BC21A4141E8480221CA648C44425C826BF6E016248411B2489052A14A44247281110010012404C914240281168812160444F8182042009C82048082968182508B182304868
+:802B80008638682F8421048220880124CF2A0C3014480041258202C0144444A8928886044A01288823412882A884850482228984040012818886080081000000241200804464218B283F7F4F62214092186084A014E01104152431126021301528C1C116C124400415889228118418444E28181644912112495129478200495818440000E7
+:802C00008183214408839222F026BC60488308410041244321828882564821860C40044E1425088288442091824908202128682181172100420080044024C11440048D14421604001F730384D0C24418A2243052A0844004280040220800214421E0A11C5114119424871800848229448119485121142C08174214A882008988828802250F
+:802C8000C684FF65488272C6D584F15E381632284CE13541A48227292C215D842B9153A88165B47AD81431A8F054484F3178C452248D184742E72827938F82E122F488188388A48496E13938824CD89984CA8AF041422F1832684B484A84A9541AF148C85E48468884A112D0460B5F216588854624D4647446F2246443F44C774939284920
+:802D0000C5928E449863CA114F4844FA425E8AE14AC118CCE889E821C4212EA8491823F152864F85B392B9225582811AB982612CA758488B8A8AD841887249B488799814E84464288F48E829D9C45B42ECF2842CAF584B61441E122115D39EF6423968A12B7133F821641F18322125114488E528C8189614C48981822B427064D5A3F941D0
+:802D8000551F48C2638D18481C0C17691D9279539987832918314B2551DA811D4B1E2116BA645422E3AA1149934892CF8232D82F22788D43A1248042A148803428488712503850484021422152383A54582A54582A449542805448484C128212C224C02CC02446C22C46C32C4662884008478824478230A4A0488014F87933246F23D766EC
+:802E000051EEAFA27249F456162B157AF2581EFFFFF31E1A3F397182FE929AABB91FABFB97944F29F9F7F11F1FFFD9D75ED49F57FFF3633F7CFCCA183F97F67E2CDF4EEE2EFA3F3EEF67F5F28A6FBCF472767F77F5B59F3F79F8A4ACDFDAFD6D473D414FF6F626441F36FC43C14E494AE4C4FDD4F4CFE616C2AC4DBCDF83F954F44F42B27C
+:802E80002CF674E42F1F4BD273F5227AA5FE3A3E3FE7F7763EEFA5F14E4C2F6575C6F61E1AA7A82FAAF2828AEF41F1A5AE7F63FBA7A7FF1DFDE4E44F6EFEA3E11F1DED2AFEEAE8CFC6F65B49FF87F675F44F5FFF3D2DD7F3AFAFFDF6FBBFF7F7F2D23FBFFDB3364F4AF6E9C99F96F465654F56FE64C41F96FCE1A56E612E614BD55AFD64D4
+:802F0000644F4793A48F89FB399C9AFB7E7C4B624F4E7F9441F154522F21F53E2EBFB1714FF64656EF84F57C2C5E123F3EF612169FB1E125F78E82EF49E9BAFAB6B67F38F8DE58CFE2FB7EF4FF98FCDCD84FEABFE6DE9DF87678EFF2F27DF5DFEBFB7B6EAFB5F6D6DE6F8EFF525C3F31F39153FF3BF38B8D9F98FA494BFFC2F2C14ABF88BE
+:802F8000F2CCEFBFD4FC69619F84B658FDD8D84F25F53E3C8B898F86F9BC884F41FB3E3C4FC7F36CBE1FD34EF37375EF61F13E2E7FF1F14FCEEFE6F766726F67F67274DFF6F61B1F1F31F35173EB88CF49F9848F6F69F98686FF5FDFFDF95EDCEFC8F8FDFDDFF8F8CECCDFF6F25E5CFFD4F27DFD9FBDFB3F2BAFB5F6DED45BDD3FD7F656AA
+:80300000F69F39F59F9BBFDEFA8DEFBFBCD4BBF4EFEEBF28FECFEFBF9CF869699F94F6D8D8CFE9FD6A6EAF81F19888CFCBF9B89CDAFF1C3CCFC6F2ECAE1FF70C41100663022A41280240088608842008400410111811180288810018421C011C082D110000004001A041A04181001228F05C56E012242142F8481150221E44D081849821B2
+:8030800021482918C421824E21482D21C021821C02282A61412342C14242A4C22413010015988210022F12084280891422088CA484414243F25E7FC0431F4152381F417248F11164A7161D64EF16D141F64A931B68AF1419F54A914B42AF14B9A4F44297478A2D914F82C4914FA2C4814FA264114FA264192E4A96E5A2E449F2224A1F491C
+:80310000F222421F49F228121F497268F29124A7261F48F26A121F48F24A921B29AF243985AF2439A4AF243BA42F247BA498B24F8A84F9A44ADB9AC04A1E648D421F4112E8413662CCF422121FC1E464F891684CF21468AF24B8B4D428A84B744B4B29B1B6D442B824C5956F82EC11F8264A922A24F82259922F827C91FC22421FC9E42249
+:8031800065498B8617492366482B9617482F44A1294ABB81A294822BB4824A6389286F8A94984FAAF5DEED0082000080040044000000000000188008000014008480040000004004280000000014F0C8E100002200850411100112148C28180813812888243828A22C844218822408218118286100E022A42422008414420020C54400006D
+:8032000080F4D484803484102204214489C42427893088402401160A22428C024C140210243224000088A08120080088208299828908213081284241001C08579200C604224250829041444D11A08211450840082AC8C20016862818420444821140B81828F252840080B44222082247812D8189082902138582042440A1412F3407484010
+:80328000020041448128A9088901889281122D11002E48882E48284828A4282A0424000000828002280088200400884904410088F08DCD0011001011BA11042004218285012841892288020042004812241220342444002C01814420E822288808852208908280088820042F8C4DF14431224CC2158216C814225722852161899252905431
+:803300008684813C42828A210B8604478210249A248604208212842288E6240845115124486A3992248425458A82D428D4840488F06658A025803215608125882412A814B082811C012644A44A422A88A983100422604186A2128094244428802248E8480415C42344C0E2811018422A2224D4480C48241D24504119120482114C913115A6
+:8033800014038C0918814C85281198820000C8408C042244430820024416026224202828B84228E12188181295822018180282F0E8CD408414044880428102A0428A040010220912800148810000C80081219044448B810020240100830200A242C04C9022488CF236234088145814104448345146024120944488120010D242082A8988CD
+:8034000008418A2101428C28460848902212411028282212642200268281A8422A9112218074B246924144120018100243220CC0821228844200004064820000200121822442128820A484002014282128080085024008006FB30471104804188431133524C2488200A881211A08234104493AA881108401400283143242496148890B4625
+:803480000442822A942818248820A212B022C41C1688028CB42D0B8C449414114244224422482128428AF442148081040082182004008218D24883A8820040024A210884180090880090828E48A042212024F2B83310210490611931411504B01188C84400419E2800809442C8904400122A644D80840421469482822514240C2008201414
+:8035000012A286424121435C82691CA284F0797480042218444144422820248539542008C298821A28414244080082103C3882D8182A0180290E874192468A4808418825948825881888022648C822DFC7032001282800284828280000800448200226A48480E44221840318000010140480314210022304824440A4845042448100F04E50
+:803580006700105881812881901815081902485A08008302812001880000810018201822810418008418828800608288284481001012F85BBA9022544C92442120024400281A0880B88882084141002012044482004110840100824110241844042002004008004024F1D7EB14162402124301430142921882C01141128094141AA8144B28
+:803600001C42444A011816B844B11408184624091A88812411C24418448810820410880400A04245E82482F2F8D5004012813815A0422A0180058298414C81810888208114040020648184922888408252846081830222202402C7284C4448C8842111805282811DE12486244804212800444901400880014C110441902412283024100454
+:80368000001004800400001004008002000000501444DE3B4018888402844A5284C0A14A4824942C44604420222182988A8029840810181454188314C4889044425882828484C088444E8828882048886AA2815022F0913E24281F880117214F48C43149C2445AE44928A9C1C85B414321C1884B41001E68DAB888259448A0224AA148CAF4
+:80370000012E144CE548D522A89C6D824D84AB9845E444D8CC7B986EE88A2864248AE84838C6874C848696441D2C2F8CD486F26C4916D8BB4E7114A56845E442711221621147864D148F12C1112287414C81E548F114148AF9243C82451466424F41B8843A44167414781474147814745828F154A8302452D044A415121A04C942748A08FB
+:803780008516DC88048D868C586A604240312EE74C3042442E2A8F14E2827215ECC6C4212E2819A2E4CE31CAE184E84898848B6E429ABC14A99E584BA52964464849016ADB48DC8811B4C8089E1412182816A2C28F2805881A4C828C2646E242CACAAA14EC887A2812382886C622AF654A811204E5018581142851141A048C0482A04B4441
+:803800003648648246648242266844264804428012A4244582C2922881684128498152248A0640A248204A224882448444F4BD1A34411F125288C559CA8F11C14C1E1C4185A9C8C04C5F19A91128CFCB8FE243F328388FC3F388A8AEAC8F8ABAACBA28E343F318BC8F83B354F114144B318F83F23438BAFB94A66F62FA3AB88FAB93268FE4
+:803880008BFB2C288F829314AF82A22A8F88E84E5CAC4FC8F62C284F8262A24B2815A2446AB64CF45848AF3148011D49E01151CCC5C54C1E5C85E818F8C4C41AE1C6F795819AEB43F2A8FC3AF738288F82E127B372E78FFBFCDC8B268BCE3AF338B88F87B35461411D318F87E3B5F58A8A6F48F224EC4F61B992F15878BAFF18188D182AF2
+:80390000F32A284F4EFE88C88FCC5EA88FC8FE8C48CF887824FE84AC8FB2F24848AF82B648E483F7B99B347B335F53F714367F31F11B141F91F145448F43B154D5DDD841ADD98BF99F99FD9494188F8FFE9C9C8FCAFBA484FEB46F4DFCF8B4EED84F8EFA64C48FC3E341F3BCBC8F8DFD14144753CFCDFBD4DE6FE879A2E449FF94944F69AA
+:80398000F1E644CFC9F79C1CCF49F83CACE7E8AFCCF42868CA7E8EFACE48C7C8CFC878A2FA8E286F22F266686D4C4F44F42C7E1F294D5147DF53F31416FFF111FD35195B558B55CFC7F595851F4EAFD5CBFDDFDDFDB4944D34CFC7FFDCFC4F43FB8C9CCFC7FB56F4CF47FBC4DC4FCEFA44C4CFC3F3B424CFCFFE58D81E1436FDDC3C1FCFF5
+:803A0000FF848CAE848F69FBB6B2EF89F1F84C4F49F7B82CCFC9F8988CEFEAFACACC8F82F6CCC8EFA8F8EEC8CFCCF4ACAC2FEAF882ACEFA2B246F42C2C6E644FE2F3DB8700003024100420280220412441241108811028180881188011880118100449490884188400000040480444100881F02DB7208822321110A1121A26B48186A14129
+:803A80004A2808B048280882189A24148488042088440482488218861428A8148688280882232488287842348444908245D84222826222EF1A0D3CF4112485F2112C87141FC1764AF1116CAF14F1112CAF149961AF14B985B44AB9B4F44A914B432F14F924482F14F924484E914FA2E414F8244A56F1244AD6E1A2645D2E4ADE242E4A1F23
+:803B00004DF222421F49F22A921F49726AF29164A7261F49F66A121F48F66A9219F64A9253F84A924B4AAF24BBA4F442B24F8A94924F8A84F9A44A6FF709AC8486F51128421FC136421E6C23F41168AD84682DB44F88B64AB1B4744AA1432D812E482F147922F842914FA2F148912E828F15E82274D8E122645DB48F1D021F8D52821D64A5
+:803B8000A9FD9124A11B6983B491A6141F88D642F181686E945F88B64AB1A4A4144F8AB442F1A44829F9A24818AE5A67D740081200000000448002000000100200000000140084000000000044800200000040014F67058200548022041241822048010020088084080000800242004308128001904200A084210040820121004C0481EF47
+:803C00006A0220080016042024020080180400228002440080120400000000004302444220010010040011824081D46E046084400112001A14948420128118048028022A04630182204224021304308CA01480016C0200B01418028052240021142C884411F8FF51000044C02442002800880000000080080000000000000000204424040C
+:803C80004200008001001004485F9306C02400000000008811880000008400280000000000000000100180010088800900608200C727001850412081041A048220914800001028088242200428000080A41224A882182180A1120082000000000000F01193001A02512021044A0188801188080000888188482842800200002001828812A4
+:803D00002100190380080082800800302800BFBC0A1004000000002098410000400800000000000042222428000018002001000018000000F0457A3024000010180200000000000000510040080000002100120000301800000000820000F051FE00224100180000824200800800208108000041000000000028002440080080081004441A
+:803D800044400428CF8109000029021100420000400281004008002400000080022400002009822008000000008002F066C41004412480410B2024080040028100128C08540021840000800210020020190218820088000049088002B0490622280022000000480020080000000000410000001002A02100008948080000400410044120C0
+:803E000072E302410044001484000000400400000000400400000088000000008480020020022001008430AC000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000E6
+:803E800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000001002000000000000000000000000000000000000F04C5F00000000000000000000000000000000001002180010080000000000A0120000F0DCFF00000000000000000000000000000000000027
+:803F0000000000000000000000000000FFE40F001008000000000000000000000000000000000000000000000000000000DFDF04000000810000000000000000004002200100000000000000000000000000007F5D010000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000077
+:803F800000000000000000000000000000000000FFE40F0000008100000000000010020000100218000021800100000000000000200300006F2A0D004008000000000000000000000000000000000040080000000000000000701A0D0000000000000000000000000000000000000000000000000000000000F04FFE0000000000540000EF
+:804000000044001002400400218001882810021880088400008042080000280000F0147B004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A21140C43500000014000048400500800444000000440000000028000080080000002884000000006F940900000000400517
+:8040800000004004002100440010021880880221800188400840088042080000280000F095BF000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0010024001008004002810820400280000002800480000004840042810D3
+:8041000082044400108204440010F28F41000000000000000000000000000000000000000000000000000000000000FFE40F000000004001400400004004000040040000280000000088000028004008000000F0DF1C000000000000000000000000000000000000000000000000000000000000FFE40F000000004001000000000000008C
+:66418000000000800200000000000028000000000000F7A10000000000004004000040040000400400000000000080080000004008000000F08FE8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3
:00000001FF
diff --git a/kernel/xpp/firmwares/USB_FW.hex b/kernel/xpp/firmwares/USB_FW.hex
index aaa784e..0d33657 100644
--- a/kernel/xpp/firmwares/USB_FW.hex
+++ b/kernel/xpp/firmwares/USB_FW.hex
@@ -1,10 +1,10 @@
#
-# $Id: USB_FW.hex 6245 2008-10-19 16:16:50Z dima $
+# $Id: USB_FW.hex 6885 2009-03-16 11:52:52Z dima $
#
:03004300020E00AA
:03005300020E009A
-:100E0000020E3000020EBB00020EA500020E4800CA
-:080E1000020C7000020C33001B
+:100E0000020D2800020D8500020D6F00020D40004A
+:080E1000020BC000020B83007D
:100700001201000200000040E4E451110000010267
:1007100003010A0600020000004001000902370040
:10072000020100C0000904000002FFFFFF040705EA
@@ -23,199 +23,159 @@
:1007F000650072000A0346005000470041001203E2
:100800004D006E0067002000500072006F00630012
:020810000000E6
-:1006CE00AC0790E678E020E6F9E51E702390E67818
-:1006DE00E04480F0EC25E090E679F08D19AF03A9A7
-:1006EE0007751A018A1B891CE4F51D751E01D3229C
-:0206FE00C32215
-:100CA600AC0790E678E020E6F9E51E702590E67838
-:100CB600E04480F0EC25E0440190E679F08D19AF30
-:100CC60003A907751A018A1B891CE4F51D751E0305
-:040CD600D322C32240
-:100E6000120CA6E51E24FA6009146006240770F32C
-:070E7000D322E4F51ED3229A
-:100E77001206CEE51E24FA6009146006240770F3F3
-:070E8700D322E4F51ED32283
-:080F2D00E4F51ED2E9D2AF2267
-:03004B0002081296
-:10081200C0E0C083C082C0D075D000C000C001C09B
-:1008220002C003C006C00790E678E030E206751EFB
-:10083200060208F090E678E020E10CE51E64026012
-:1008420006751E070208F0E51E24FE605F1460367E
-:1008520024FE70030208E424FC70030208ED24085D
-:1008620060030208F0AB1AAA1BA91CAF1D051D8F5D
-:10087200827583001205BE90E679F0E51D65197058
-:100882006D751E05806890E679E0AB1AAA1BA91C5B
-:10089200AE1D8E827583001205EB751E02E519648A
-:1008A20001704B90E678E04420F08042E51924FE86
-:1008B200B51D0790E678E04420F0E51914B51D0A4D
-:1008C20090E678E04440F0751E0090E679E0AB1ABD
-:1008D200AA1BA91CAE1D8E827583001205EB051D95
-:1008E200800C90E678E04440F08000751E00539141
-:1008F200DFD007D006D003D002D001D000D0D0D0B4
-:0609020082D083D0E03238
-:020F47000000A8
-:100DDB0041100100411014004110000042100200AC
-:010DEB000007
-:100DBB00E490E670F075B5E653B5EE43B28053B2EE
-:100DCB00FCC2B3C2B5C2B67F32FE120ED1D2B6226E
-:100E8E00538EF75389FB5389F74389015389FDE448
-:070E9E00F58AF58CD2A922B0
-:100AFF0078187C107D017BFF7A0F79477E007F028B
-:100B0F0012059890E678E0541824F0601E240870BF
-:100B1F003AE4901018F07A107B187D017F50120E76
-:100B2F00777A107B047D107F50801D901018741FF2
-:100B3F00F0A374EFF07A107B187D027F51120E77BD
-:0B0B4F007A107B047D107F51120E60B5
-:010B5A002278
-:100CDA007F03120D68EF2402FFE43EFEE525C3946C
-:100CEA0008501F740C2525F582E43410F583E0FDC5
-:100CFA008F828E8375F002E52512061FEDF0052519
-:020D0A0080DA8D
-:010D0C0022C4
-:100BF000901001EFF0E50B240AFDE4350AFC90109B
-:100C000007E02FFBA3E0FF0DED8C8370010C14F5C2
-:100C100082EBF08D828C83EFF0EFFFAD03ED90104F
-:100C200002CFF0A3EFF0D209120D0D90E680E05450
-:020C3000F7F0DB
-:010C3200229F
-:1009940090E600E054E74410F090E60174C0F09053
-:1009A400E6107420F000000090E611F000000090C2
-:1009B400E6047480F0000000740FF0000000E4F01E
-:1009C40000000090E6187410F0000000E490E619AE
-:1009D400F000000090E61A7408F0000000E490E6CD
-:1009E4001BF000000090E6497482F0000000F00063
-:1009F400000090E6247402F0000000E490E625F084
-:100A040000000090E6957480F0000000F000000003
-:040A140043AF0122C9
-:100ED1007C007D1812060DEF1FAC0670011E4C70D0
-:020EE100F622F7
-:0A0B5B008E278F288B298A2A892B08
-:100B6500E4F52CF52DC3E52D9528E52C9527503377
-:100B7500AB29AA2AA92B852D82852C831205BEFFB8
-:100B8500E4FEC2B2EF1392B7EFC313FFD2B20EBEAB
-:100B950008F0C2B220B002C322052DE52D70C605AE
-:040BA5002C80C2D30B
-:010BA9002229
-:100E180090E60174C0F0C2B67F327E00120ED1D2C5
-:080E2800B67F327E00020ED1FC
-:10062B00901014E0FF901000F0901002E0FCA3E09B
-:10063B0054F064607003EC641160030206CC300864
-:10064B0022EFB52702D322208104E5276008208002
-:10065B0007E527B40102C322E4F510901014E52737
-:10066B00F0803B30810C208009E4F510901014F0E1
-:10067B00802C30800D20810AE4F51090101404F0CA
-:10068B00801CE510B40117200014E4F51090101431
-:10069B00E060047F0080027F01901014EFF0901057
-:1006AB0014E0FF901000E06F600FA3E0D3940040C4
-:1006BB0008120E187F01120BF0901014E024FF9219
-:0306CB00B5D32282
-:10007000E4901018F0F525F526C207E5AA5484602F
+:020E24000000CC
+:100CF0004110010041101400411000004210020098
+:010D000000F2
+:100CD000E490E670F075B5E653B5EE43B28053B2DA
+:100CE000FCC2B3C2B5C2B67F32FE120D9BD2B62291
+:100D5800538EF75389FB5389F74389015389FDE47F
+:070D6800F58AF58CD2A922E7
+:100A9E0078187C107D017BFF7A0E79247E007F0210
+:100AAE0012059890E678E0541824F0601E24087021
+:100ABE003AE4901018F07C107D187B017F50120ADA
+:100ACE00387C107D047B107F50801D901018741F91
+:100ADE00F0A374EFF07C107D187B027F51120A3860
+:0B0AEE007C107D047B107F5112060974
+:010AF90022DA
+:100C25007F03120C7DEF2402FFE43EFEE4FD740C0D
+:100C35002DF582E43410F583E0FC8F828E8375F008
+:0B0C450002ED1205FDECF00DBD08E310
+:010C50002281
+:100B4000901001EFF0E50B240AFDE4350AFC90104B
+:100B500007E02FFBA3E0FF0DED8C8370010C14F573
+:100B600082EBF08D828C83EFF0EFFFAD03ED901000
+:100B700002CFF0A3EFF0D207120BF690E680E0541C
+:020B8000F7F08C
+:010B82002250
+:1009410090E600E054E74410F090E60174C0F090A6
+:10095100E6107420F000000090E611F00000009015
+:10096100E6047480F0000000740FF0000000E4F071
+:1009710000000090E6187410F0000000E490E61901
+:10098100F000000090E61A7408F0000000E490E620
+:100991001BF000000090E6497482F0000000F000B6
+:1009A100000090E6247402F0000000E490E625F0D7
+:1009B10000000090E6957480F0000000F000000057
+:0409C10043AF01221D
+:100D9B007C007D181205EBEF1FAC0670011E4C702A
+:020DAB00F6222E
+:0A06AE008E198F1A8B1B8A1C891D00
+:1006B800E4F51EF51FC3E51F951AE51E951950337D
+:1006C800AB1BAA1CA91D851F82851E831205BEFFB0
+:1006D800E4FEC2B2EF1392B7EFC313FFD2B20EBE5D
+:1006E80008F0C2B220B002C322051FE51F70C6057C
+:0406F8001E80C2D3CB
+:0106FC0022DB
+:100D100090E60174C0F0C2B67F327E00120D9BD205
+:080D2000B67F327E00020D9B3C
+:10081200901014E0FF901000F0901002E0FCA3E0B2
+:1008220054F064607003EC641160030208B3300694
+:1008320022EFB51902D322208104E5196008208035
+:1008420007E519B40102C322E4F510901014E5196A
+:10085200F0803B30810C208009E4F510901014F0F8
+:10086200802C30800D20810AE4F51090101404F0E1
+:10087200801CE510B40117200014E4F51090101448
+:10088200E060047F0080027F01901014EFF090106E
+:1008920014E0FF901000E06F600FA3E0D3940040DB
+:1008A20008120D107F01120B40901014E024FF92E9
+:0308B200B5D32299
+:10007000E4901018F0F517F518C205E5AA5484604D
:100080000302029F90F400E024FE70030201452465
:10009000FA700302016924F8700302019624F070DB
:1000A0000302019A24F070030201A924F0700302F4
:1000B00001B424C8700302025D2477600302027257
-:1000C00075250075260490FC007401F090F401E0A1
+:1000C00075170075180490FC007401F090F401E0BD
:1000D00090FC01F090F402E090FC02F090F401E05A
-:1000E000700AA3E0700630B003120E1820B003307F
+:1000E000700AA3E0700630B003120D1020B0033088
:1000F000B44A90E694E0FE90E695E07C002400FF90
:10010000EC3ECF24FCCF34FFFE7B017AF47904125D
-:100110000B5B501F90FC0330B4137408F07FE87E33
-:1001200003120ED190E6017403F002027E7404F013
+:1001100006AE501F90FC0330B4137408F07FE87EE5
+:1001200003120D9B90E6017403F002027E7404F04A
:1001300002027E90FC037402F002027E90FC0374C3
-:1001400001F002027E75250075260490FC00740201
+:1001400001F002027E75170075180490FC0074021D
:10015000F0E4A3F0A3F030B407A37410F002027E21
-:1001600090FC037420F002027E7525007526119024
+:1001600090FC037420F002027E7517007518119040
:10017000FC007408F0E4FF74042FF582E43410F5F9
:1001800083E0FE74012FF582E434FCF583EEF00F7A
-:10019000BF10E402027E7F028014D208E4F5271229
-:1001A000062B120E18E4FF8005120E187F01120BA9
-:1001B000F002027E75250075260490F400E090FCA4
+:10019000BF10E402027E7F028014D206E4F5191239
+:1001A0000812120D10E4FF8005120D107F01120BD2
+:1001B0004002027E75170075180490F400E090FC70
:1001C00000F090F401E090FC01F0E4A3F0A3F090C3
:1001D000F401E014B40A00400302027E9001EA75C3
:1001E000F003A4C58325F0C5837302020802021040
:1001F00002027E02021802022002027E020226028F
:10020000024502027E02024B90F402E0F5108047A4
:1002100090FC02E510F08066D200A200E433803743
-:10022000A200E4338031E4F510D20890F402E0F546
-:100230002712062B5007E4F525F526804190FC0295
+:10022000A200E4338031E4F510D20690F402E0F548
+:10023000191208125007E4F517F518804190FC02D6
:1002400074FFF08039901014E0800CA280E4332514
-:10025000E0FFA281E4334F90FC02F08021E4F52519
-:10026000F52690FC007478F0E4A3F0A3F000000001
-:10027000800C75250075260190FC0074AAF0E52617
-:1002800045256012E52590E69CF0000000E52690EB
+:10025000E0FFA281E4334F90FC02F08021E4F51727
+:10026000F51890FC007478F0E4A3F0A3F00000000F
+:10027000800C75170075180190FC0074AAF0E51841
+:1002800045176012E51790E69CF0000000E5189015
:0F029000E69DF000000090E6957480F0000000FD
:01029F00223C
-:020F4500D322B5
-:080F350090E6BAE0F52FD3228B
-:100EE30090E740E52FF0E490E68AF090E68B04F07B
-:020EF300D32208
-:080F3D0090E6BAE0F52ED32284
-:100EF50090E740E52EF0E490E68AF090E68B04F06A
-:020F0500D322F5
-:100D930090E6B9E0242F600D04701990E604E0FF9B
-:100DA300430780800890E604E0FF53077F000000BC
-:070DB300EFF08002D322C320
-:010DBA002216
-:100E3000C0E0C083C082D2025391EF90E65D74019E
-:080E4000F0D082D083D0E03233
-:100EA500C0E0C083C0825391EF90E65D7404F0D03A
-:060EB50082D083D0E03280
-:100EBB00C0E0C083C0825391EF90E65D7402F0D026
-:060ECB0082D083D0E0326A
-:100C7000C0E0C083C08285110C85120D850D828570
-:100C80000C83A37402F085080E85090F850F8285F9
-:100C90000E83A37407F05391EF90E65D7410F0D0CB
-:060CA00082D083D0E03297
-:100E4800C0E0C083C082D2045391EF90E65D74087D
-:080E5800F0D082D083D0E0321B
-:100C3300C0E0C083C08290E680E030E72085080CE6
-:100C430085090D850D82850C83A37402F085110E31
-:100C530085120F850F82850E83A37407F05391EFDE
-:0D0C630090E65D7420F0D082D083D0E032A6
-:0A0F230000010202030304040505A7
-:0E0DEC00011000C10042101500004110170058
-:03000B00020A8C5A
-:100A8C00C0E0C0F0C083C082C0D075D000C000C030
-:100A9C0001C002C003C004C005C006C007901015F9
-:100AAC00E07002A3E07021C208F52712062B90100B
-:100ABC0015E4F0A37482F0A3E0FF24FF9287C287B1
-:100ACC00EF6401F0C200800E901016E024FFF0904D
-:100ADC001015E034FFF0D28CD007D006D005D0042E
-:100AEC00D003D002D001D000D0D0D082D083D0F0AF
-:030AFC00D0E03215
-:100A1800C204C201D203C202120DBB120E8E120909
-:100A280094120F2D120AFF750A07750B007513072C
-:100A380075141275080775091C75110775127085EC
-:100A4800110E85120F7515077516B4D2E843D82014
-:100A580090E668E04409F090E65CE0443DF0D2AFEF
-:100A6800D28C120CDA7F01120BF0538EF8C20412EA
-:100A780000703002051202A0C2023004F2C2041251
-:040A88000D3C80EBB6
-:0B0F180090E50DE030E402C322D3227C
+:0206FD00D32206
+:080DF70090E6BAE0F522D322D8
+:100DAD0090E740E522F0E490E68AF090E68B04F0BF
+:020DBD00D3223F
+:080E180090E6BAE0F521D322B7
+:100DBF0090E740E521F0E490E68AF090E68B04F0AE
+:020DCF00D3222D
+:100CA80090E6B9E0242F600D04701990E604E0FF87
+:100CB800430780800890E604E0FF53077F000000A8
+:070CC800EFF08002D322C30C
+:010CCF002202
+:100D2800C0E0C083C082D2025391EF90E65D7401A7
+:080D3800F0D082D083D0E0323C
+:100D6F00C0E0C083C0825391EF90E65D7404F0D071
+:060D7F0082D083D0E032B7
+:100D8500C0E0C083C0825391EF90E65D7402F0D05D
+:060D950082D083D0E032A1
+:100BC000C0E0C083C08285110C85120D850D828521
+:100BD0000C83A37402F085080E85090F850F8285AA
+:100BE0000E83A37407F05391EF90E65D7410F0D07C
+:060BF00082D083D0E03248
+:100D4000C0E0C083C082D2045391EF90E65D740886
+:080D5000F0D082D083D0E03224
+:100B8300C0E0C083C08290E680E030E72085080C97
+:100B930085090D850D82850C83A37402F085110EE2
+:100BA30085120F850F82850E83A37407F05391EF8F
+:0D0BB30090E65D7420F0D082D083D0E03257
+:0A0DED0000010202030304040505DF
+:0E0D0100011000C10042101500004110170043
+:1009C500C204C201D203C202120CD0120D58120980
+:1009D50041120A9E750A07750B00751307751412E7
+:1009E50075080775091C75110775127085110E8537
+:1009F500120F7515077516B4D2E843D82090E6682E
+:100A0500E04409F090E65CE0443DF0120C257F01DE
+:100A1500120B40D2AF538EF8C204C2AF120070D28F
+:100A2500AF3002051202A0C2023004EEC204120C5D
+:030A35005180E706
+:0B0DE20090E50DE030E402C322D322B4
:1002A00090E6B9E070030203651470030203DA24D8
:1002B000FE700302045524FB700302035F147003F5
:1002C00002035914700302034D14700302035324F4
-:1002D0000560030204B4120F4540030204C090E617
+:1002D0000560030204B41206FD40030204C090E668
:1002E000BBE024FE602714603E24FD6011146027EB
-:1002F00024067056E50A90E6B3F0E50B8042120F33
-:10030000185044E51390E6B3F0E5148033E50C9003
+:1002F00024067056E50A90E6B3F0E50B8042120D35
+:10030000E25044E51390E6B3F0E5148033E50C9039
:10031000E6B3F0E50D802985110E85120FE50E90EC
-:10032000E6B3F0E50F801990E6BAE0FF120D68AA77
+:10032000E6B3F0E50F801990E6BAE0FF120C7DAA63
:1003300006A9077B01EA494B600DEE90E6B3F0EFAA
-:1003400090E6B4F00204C00204AF0204AF120EF54E
-:100350000204C0120F3D0204C0120F350204C01285
-:100360000EE30204C090E6B8E0247F601514601923
+:1003400090E6B4F00204C00204AF0204AF120DBF85
+:100350000204C0120E180204C0120DF70204C012EB
+:100360000DAD0204C090E6B8E0247F60151460195A
:1003700024027063A201E43325E0FFA203E4334FBB
:100380008041E490E740F0803F90E6BCE0547EFF7F
:100390007E00E0D394807C0040047D0180027D00DB
-:1003A000EC4EFEED4F2423F582740F3EF583E4936B
+:1003A000EC4EFEED4F24EDF582740D3EF583E493A3
:1003B000FF3395E0FEEF24A1FFEE34E68F82F58354
:1003C000E0540190E740F0E4A3F090E68AF090E674
:1003D0008B7402F00204C00204AF90E6B8E024FE81
:1003E0006016240260030204C090E6BAE0B401057E
:1003F000C2010204C00204AF90E6BAE0705590E674
:10040000BCE0547EFF7E00E0D394807C0040047DFD
-:100410000180027D00EC4EFEED4F2423F582740F27
+:100410000180027D00EC4EFEED4F24EDF582740D5F
:100420003EF583E493FF3395E0FEEF24A1FFEE3425
:10043000E68F82F583E054FEF090E6BCE054801332
:100440001313541FFFE0540F2F90E683F0E0442075
@@ -223,33 +183,53 @@
:100460004E90E6BAE0B40104D201805490E6BAE0BE
:100470006402604C803990E6BCE0547EFF7E00E070
:10048000D394807C0040047D0180027D00EC4EFE10
-:10049000ED4F2423F582740F3EF583E493FF3395EB
+:10049000ED4F24EDF582740D3EF583E493FF339523
:1004A000E0FEEF24A1FFEE34E68F82F583800D900D
-:1004B000E6A08008120D93500790E6A0E04401F0FA
+:1004B000E6A08008120CA8500790E6A0E04401F0E6
:0704C00090E6A0E04480F08B
:0104C7002212
-:03003300020DFBC0
-:040DFB0053D8EF32A8
-:100D3C0090E682E030E004E020E60B90E682E030C2
-:100D4C00E119E030E71590E680E04401F07F147E75
-:0C0D5C0000120BAA90E680E054FEF0228A
-:100D0D0030090990E680E0440AF0800790E680E023
-:100D1D004408F07FDC7E05120BAA90E65D74FFF0AF
-:0F0D2D0090E65FF05391EF90E680E054F7F022EC
-:020D6800A907D9
-:100D6A00AE15AF168F828E83A3E064037017AD01B0
-:100D7A0019ED7001228F828E83E07C002FFDEC3EFC
-:080D8A00FEAF0580DFE4FEFF6F
-:010D9200223E
-:100BAA008E288F2990E600E054187012E529240156
-:100BBA00FFE43528C313F528EF13F529801590E6CD
-:100BCA0000E05418FFBF100BE52925E0F529E528B8
-:100BDA0033F528E5291529AE28700215284E600537
-:060BEA00120F0780EE224D
-:100F07007400F58690FDA57C05A3E582458370F9FD
-:010F170022B7
-:03000000020908EA
-:0C090800787FE4F6D8FD75812F02094FBE
+:03003300020E209A
+:040E200053D8EF3282
+:100C510090E682E030E004E020E60B90E682E030AE
+:100C6100E119E030E71590E680E04401F07F147E61
+:0C0C710000120AFA90E680E054FEF02227
+:100BF60030070990E680E0440AF0800790E680E03E
+:100C06004408F07FDC7E05120AFA90E65D74FFF078
+:0F0C160090E65FF05391EF90E680E054F7F02204
+:060609008C178D18AE07EE
+:10060F00EB70037F012290E678E020E6F990E67820
+:10061F007480F0EE25E0440190E679F090E678E002
+:10062F0030E0F990E678E020E26BE030E167BB0163
+:10063F000790E678E04420F090E679E0F5191BEB9F
+:10064F00603090E678E030E0F990E678E020E2451F
+:10065F00BB010790E678E04420F090E679E0FF05D3
+:10066F0018E518AC177002051714F5828C83EFF09C
+:10067F0080CC90E678E030E0F990E678E020E21563
+:10068F0090E678E04440F090E679E085188285178F
+:0E069F0083F07F012290E678E04440F07F0077
+:0106AD00222A
+:100A380090E678E020E6F990E6787480F0EF25E01B
+:100A480090E679F090E678E030E0F990E678E020FA
+:100A5800E23AE030E136EBD3940040260DEDAE04E7
+:100A680070010C14F5828E83E090E679F01B90E615
+:100A780078E030E0F990E678E020E210E020E1D676
+:100A8800800A90E678E04440F07F012290E678E022
+:050A98004440F07F0066
+:010A9D002236
+:020C7D00A907C5
+:100C7F00AE15AF168F828E83A3E064037017AD019C
+:100C8F0019ED7001228F828E83E07C002FFDEC3EE8
+:080C9F00FEAF0580DFE4FEFF5B
+:010CA700222A
+:100AFA008E1A8F1B90E600E054187012E51B240131
+:100B0A00FFE4351AC313F51AEF13F51B801590E6A7
+:100B1A0000E05418FFBF100BE51B25E0F51BE51A92
+:100B2A0033F51AE51B151BAE1A7002151A4E60052D
+:060B3A00120DD180EE2235
+:100DD1007400F58690FDA57C05A3E582458370F935
+:010DE10022EF
+:030000000208B53E
+:0C08B500787FE4F6D8FD7581220208FC73
:1004C800E709F608DFFA8046E709F208DFFA803E16
:1004D80088828C83E709F0A3DFFA8032E309F60803
:1004E800DFFA8078E309F208DFFA807088828C836B
@@ -269,20 +249,17 @@
:1005BE00BB010CE58229F582E5833AF583E02250F2
:1005CE0006E92582F8E622BBFE06E92582F8E2223C
:0D05DE00E58229F582E5833AF583E4932256
-:1005EB00F8BB010DE58229F582E5833AF583E8F046
-:1005FB00225006E92582C8F622BBFE05E92582C8F2
-:02060B00F222D9
-:10060D00EF8DF0A4A8F0CF8CF0A428CE8DF0A42E01
-:02061D00FE22BB
-:0C061F00A42582F582E5F03583F58322E6
-:10091400020A18E493A3F8E493A34003F68001F2D7
-:1009240008DFF48029E493A3F85407240CC8C333E4
-:10093400C4540F4420C8834004F456800146F6DFB3
-:10094400E4800B0102040810204080900DDBE47E5B
-:10095400019360BCA3FF543F30E509541FFEE493A8
-:10096400A360010ECF54C025E060A840B8E493A36F
-:10097400FAE493A3F8E493A3C8C582C8CAC583CA9A
-:10098400F0A3C8C582C8CAC583CADFE9DEE780BE52
-:010DFA0000F8
+:1005EB00EF8DF0A4A8F0CF8CF0A428CE8DF0A42E24
+:0205FB00FE22DE
+:0C05FD00A42582F582E5F03583F5832209
+:1008C1000209C5E493A3F8E493A34003F68001F27F
+:1008D10008DFF48029E493A3F85407240CC8C33338
+:1008E100C4540F4420C8834004F456800146F6DF07
+:1008F100E4800B0102040810204080900CF0E47E9B
+:10090100019360BCA3FF543F30E509541FFEE493FB
+:10091100A360010ECF54C025E060A840B8E493A3C2
+:10092100FAE493A3F8E493A3C8C582C8CAC583CAED
+:10093100F0A3C8C582C8CAC583CADFE9DEE780BEA5
+:010D0F0000E3
:00000001FF
 \ No newline at end of file
diff --git a/kernel/xpp/init_card_1_30 b/kernel/xpp/init_card_1_30
index 9b01ec8..fafd2c1 100755
--- a/kernel/xpp/init_card_1_30
+++ b/kernel/xpp/init_card_1_30
@@ -1,6 +1,9 @@
#! /usr/bin/perl -w
use strict;
+# Make warnings fatal
+local $SIG{__WARN__} = sub { die @_ };
+
#
# Written by Oron Peled <oron@actcom.co.il>
# Copyright (C) 2006, Xorcom
@@ -44,36 +47,57 @@ use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
-BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir", "$init_dir/zconf"); }
-use Zaptel::Config::Defaults;
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir"); }
+use XppConfig $init_dir;
my $unit_id;
my %opts;
-$ENV{XPP_BASE} = '/proc/xpp';
getopts('o:', \%opts);
-my $debug;
-my $skip_calib;
-
-my $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
-my $chipregs = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+my %settings;
+$settings{debug} = 0;
+$settings{fxs_skip_calib} = 0;
+my $chipregs;
sub logit {
print STDERR "$unit_id: @_\n";
}
sub debug {
- logit @_ if $debug;
+ logit @_ if $settings{debug};
}
# Arrange for error logging
if (-t STDERR) {
$unit_id = 'Interactive';
- logit "Interactive startup";
+ main::debug "Interactive startup";
} else {
$unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
open (STDERR, "| logger -t $program -p kern.info") || die;
- logit "Non Interactive startup";
+ main::debug "Non Interactive startup";
+ foreach my $k (qw(
+ XBUS_NAME
+ XBUS_NUMBER
+ UNIT_NUMBER
+ UNIT_TYPE
+ UNIT_SUBUNITS
+ UNIT_SUBUNITS_DIR
+ XBUS_REVISION
+ XBUS_CONNECTOR
+ XBUS_LABEL)) {
+ unless(defined $ENV{$k}) {
+ logit "Missing ENV{$k}\n";
+ die;
+ }
+ }
+ $chipregs = sprintf "/sys/bus/xpds/devices/%02d:%1d:0/chipregs",
+ $ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER};
+ if(! -f $chipregs) {
+ my $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
+ $chipregs = "/proc/xpp/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ logit "OLD DRIVER: does not use /sys chipregs. Falling back to /proc"
+ if -f $chipregs;
+ }
}
sub set_output() {
@@ -87,7 +111,7 @@ sub set_output() {
}
open(REG, ">$output") || die "Failed to open '$output': $!\n";
my $oldfh = select REG;
- print "# Setting output\n" if $opts{o};
+ main::logit "# Setting output" if $opts{o};
return $oldfh;
}
@@ -372,18 +396,11 @@ sub calibrate_slics() {
}
sub read_defaults() {
- # For lab tests
- my $labfile = "$init_dir/genzaptelconf.env";
-
- # Source default files
- $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
- my $var_debug = 'DEBUG_INIT_FXS';
- my $var_skip_calib = 'INIT_FXS_SKIP_CALIB';
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars($var_debug, $var_skip_calib);
- $debug = $source_defaults{$var_debug};
- $skip_calib = $source_defaults{$var_skip_calib};
- main::logit "From $default_file: $var_debug=$debug $var_skip_calib=$skip_calib";
+ if(XppConfig::read_config(\%settings)) {
+ main::logit "Defaults from $settings{xppconf}";
+ } else {
+ main::logit "No defaults file, use hard-coded defaults.";
+ }
}
package main;
@@ -396,7 +413,7 @@ FXS::init_indirect_registers();
main::debug "after init_indirect_registers";
FXS::init_early_direct_regs();
main::debug "after init_early_direct_regs";
-if($skip_calib) {
+if($settings{fxs_skip_calib}) {
main::logit "==== WARNING: SKIPPED SLIC CALIBRATION =====";
} else {
FXS::calibrate_slics;
diff --git a/kernel/xpp/init_card_2_30 b/kernel/xpp/init_card_2_30
index ec2ea80..34f8a0b 100755
--- a/kernel/xpp/init_card_2_30
+++ b/kernel/xpp/init_card_2_30
@@ -1,6 +1,9 @@
#! /usr/bin/perl -w
use strict;
+# Make warnings fatal
+local $SIG{__WARN__} = sub { die @_ };
+
#
# Written by Oron Peled <oron@actcom.co.il>
# Copyright (C) 2006, Xorcom
@@ -44,17 +47,15 @@ use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
-BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir", "$init_dir/zconf", "$init_dir/utils/zconf"); }
-use Zaptel::Config::Defaults;
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir"); }
+use XppConfig $init_dir;
my $unit_id;
my %opts;
-$ENV{XPP_BASE} = '/proc/xpp';
getopts('o:v:', \%opts);
-my $debug;
-
-my $xpd_name;
+my %settings;
+$settings{debug} = 0;
my $chipregs;
sub logit {
@@ -62,7 +63,7 @@ sub logit {
}
sub debug {
- logit @_ if $debug;
+ logit @_ if $settings{debug};
}
# Arrange for error logging
@@ -71,10 +72,31 @@ if (-t STDERR || $opts{v}) {
main::debug "Interactive startup";
} else {
$unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
- $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
- $chipregs = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
open (STDERR, "| logger -t $program -p kern.info") || die;
main::debug "Non Interactive startup";
+ foreach my $k (qw(
+ XBUS_NAME
+ XBUS_NUMBER
+ UNIT_NUMBER
+ UNIT_TYPE
+ UNIT_SUBUNITS
+ UNIT_SUBUNITS_DIR
+ XBUS_REVISION
+ XBUS_CONNECTOR
+ XBUS_LABEL)) {
+ unless(defined $ENV{$k}) {
+ logit "Missing ENV{$k}\n";
+ die;
+ }
+ }
+ $chipregs = sprintf "/sys/bus/xpds/devices/%02d:%1d:0/chipregs",
+ $ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER};
+ if(! -f $chipregs) {
+ my $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
+ $chipregs = "/proc/xpp/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ logit "OLD DRIVER: does not use /sys chipregs. Falling back to /proc"
+ if -f $chipregs;
+ }
}
sub set_output() {
@@ -312,27 +334,22 @@ sub opermode_verify($) {
}
sub read_defaults() {
- # For lab tests
- my $labfile = "$init_dir/genzaptelconf.env";
-
- # Source default files
- $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
- my $var_debug = 'DEBUG_INIT_FXO';
- my $var_opermode = 'opermode';
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars($var_debug, $var_opermode);
- $debug = $source_defaults{$var_debug};
- my $tmp_opermode = $source_defaults{$var_opermode};
- if(defined($tmp_opermode) and $tmp_opermode) {
- # Verify
- my $mode = $opermode_table{$tmp_opermode};
- if(! defined $mode) {
- main::logit "Unknown opermode='$tmp_opermode'";
- die;
+ if(XppConfig::read_config(\%settings)) {
+ main::logit "Defaults from $settings{xppconf}";
+ my $o = $settings{opermode};
+ if(defined($o)) {
+ # Verify
+ my $mode = $opermode_table{$o};
+ if(! defined $mode) {
+ main::logit "Unknown opermode='$o'";
+ die;
+ }
+ $OPERMODE = $o;
+ main::logit "Set OPERMODE = $o";
}
- $OPERMODE = $tmp_opermode;
+ } else {
+ main::logit "No defaults file, use hard-coded defaults.";
}
- main::logit "From $default_file: $var_debug=$debug $var_opermode=$tmp_opermode";
}
package main;
diff --git a/kernel/xpp/init_card_3_30 b/kernel/xpp/init_card_3_30
index cbcd550..9e72089 100755
--- a/kernel/xpp/init_card_3_30
+++ b/kernel/xpp/init_card_3_30
@@ -1,6 +1,9 @@
#! /usr/bin/perl -w
use strict;
+# Make warnings fatal
+local $SIG{__WARN__} = sub { die @_ };
+
#
# $Id$
#
@@ -57,9 +60,10 @@ use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir"); }
+use XppConfig $init_dir;
my $unit_id;
my %opts;
-$ENV{XPP_BASE} = '/proc/xpp';
getopts('o:', \%opts);
@@ -75,6 +79,21 @@ if (-t STDERR) {
$unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
open (STDERR, "| logger -t $program -p kern.info") || die;
logit "Non Interactive startup";
+ foreach my $k (qw(
+ XBUS_NAME
+ XBUS_NUMBER
+ UNIT_NUMBER
+ UNIT_TYPE
+ UNIT_SUBUNITS
+ UNIT_SUBUNITS_DIR
+ XBUS_REVISION
+ XBUS_CONNECTOR
+ XBUS_LABEL)) {
+ unless(defined $ENV{$k}) {
+ logit "Missing ENV{$k}\n";
+ die;
+ }
+ }
}
sub select_subunit($) {
@@ -85,8 +104,14 @@ sub select_subunit($) {
if($opts{o}) {
$output = $opts{o};
} else {
- my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
- $output = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ $output = sprintf "/sys/bus/xpds/devices/%02d:%1d:%1d/chipregs",
+ $ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER}, $subunit;
+ if(! -f $output) {
+ my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
+ $output = "/proc/xpp/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ logit "OLD DRIVER: does not use /sys chipregs. Falling back to /proc"
+ if -f $output;
+ }
}
open(REG, ">$output") || die "Failed to open '$output': $!\n";
my $oldfh = select REG;
@@ -368,13 +393,15 @@ sub init_xhfc($) {
# (C4IO, F0IO are inputs)
BRI::gen "$portnum WD 14 98"; # R_PCM_MD0: Index value to select
- # the register at address 15
+ # the register at address 15
BRI::gen "$portnum WD 15 20"; # R_PCM_MD1: V_PLL_ADJ (DPLL adjust speed),
# in the last slot of PCM frame
# V_PCM_DR, C4IO is 16.384MHz(128 time slots)
- BRI::gen "$portnum WD 4C 03"; # GPIOGPIO function (not PWM) on GPIO0 and GPIO1 pins
- BRI::gen "$portnum WD 4A 03"; # Output enable for GPIO0 and GPIO1 pins
+ BRI::gen "$portnum WD 4C 07"; # GPIOGPIO function (not PWM) on GPIO0, GPIO1 and GPIO2 pins
+ BRI::gen "$portnum WD 4A 07"; # Output enable for GPIO0, GPIO1 and GPIO2 pins
+ BRI::gen "$portnum WD 48 01"; # GPIO output data bits
+
}
my @port_type = (
diff --git a/kernel/xpp/init_card_4_30 b/kernel/xpp/init_card_4_30
index 38c1911..6d56398 100755
--- a/kernel/xpp/init_card_4_30
+++ b/kernel/xpp/init_card_4_30
@@ -1,6 +1,9 @@
#! /usr/bin/perl -w
use strict;
+# Make warnings fatal
+local $SIG{__WARN__} = sub { die @_ };
+
#
# $Id$
#
@@ -33,6 +36,7 @@ use strict;
# 4 - PRI
# XBUS_REVISION - xbus revision number
# XBUS_CONNECTOR - xbus connector string
+# XBUS_LABEL - xbus label string
#
# Output data format:
# - An optional comment start with ';' or '#' until the end of line
@@ -54,13 +58,15 @@ use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir"); }
+use XppConfig $init_dir;
my $unit_id;
my %opts;
-$ENV{XPP_BASE} = '/proc/xpp';
-my @pri_specs;
getopts('o:', \%opts);
+my %settings;
+
sub logit {
print STDERR "$unit_id: @_\n";
}
@@ -73,6 +79,21 @@ if (-t STDERR) {
$unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
open (STDERR, "| logger -t $program -p kern.info") || die;
logit "Non Interactive startup";
+ foreach my $k (qw(
+ XBUS_NAME
+ XBUS_NUMBER
+ UNIT_NUMBER
+ UNIT_TYPE
+ UNIT_SUBUNITS
+ UNIT_SUBUNITS_DIR
+ XBUS_REVISION
+ XBUS_CONNECTOR
+ XBUS_LABEL)) {
+ unless(defined $ENV{$k}) {
+ logit "Missing ENV{$k}\n";
+ die;
+ }
+ }
}
sub select_subunit($) {
@@ -83,8 +104,14 @@ sub select_subunit($) {
if($opts{o}) {
$output = $opts{o};
} else {
- my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
- $output = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ $output = sprintf "/sys/bus/xpds/devices/%02d:%1d:%1d/chipregs",
+ $ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER}, $subunit;
+ if(! -f $output) {
+ my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
+ $output = "/proc/xpp/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ logit "OLD DRIVER: does not use /sys chipregs. Falling back to /proc"
+ if -f $output;
+ }
}
open(REG, ">$output") || die "Failed to open '$output': $!\n";
my $oldfh = select REG;
@@ -141,24 +168,12 @@ sub finish_quad() {
# PRI::gen "0 WD 80 00"; # PC1 (Port configuration 1): RPB_1.SYPR , XPB_1.SYPX
}
-sub read_pri_specs() {
- # For lab tests
- my $labfile = "${0}.setup";
-
- # Source default files
- $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
- my $setup_var = 'XPP_PRI_SETUP';
- my $setup_string;
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars($setup_var);
- $setup_string = $source_defaults{$setup_var};
- $setup_string =~ s/^\s+//; # trim
- $setup_string =~ s/\s+$//; # trim
- $setup_string =~ s/\s+/\n/g; # cannonical spaces
- #main::logit "From $default_file: $setup_var=\n$setup_string";
- @pri_specs = split(/\s+/, $setup_string);
- push(@pri_specs, 'NUM/*=TE,E1'); # Fall back default (last)
- main::logit "pri_specs: @pri_specs";
+sub read_defaults() {
+ if(XppConfig::read_config(\%settings)) {
+ main::logit "Defaults from $settings{xppconf}";
+ } else {
+ main::logit "No defaults file, use hard-coded defaults.";
+ }
}
package PRI::Port;
@@ -167,57 +182,52 @@ sub new {
my $pack = shift;
my $port = { @_ };
bless $port, $pack;
- $port->process_pri_spec;
return $port;
}
-sub write_pri_info {
+sub get_pri_protocol {
my $port = shift;
my $subunit = $port->{PORT_NUM};
- my @pri_setup = @{$port->{PRI_SETUP}};
- my $pri_type = $pri_setup[0] || die "Missing pri_type parameter";
- my $pri_proto = $pri_setup[1] || die "Missing pri_proto parameter";
my $xpd_name = "XPD-$ENV{UNIT_NUMBER}$subunit";
- my $info = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/pri_info";
-
- main::logit "$xpd_name: PRI_SETUP $pri_type $pri_proto";
- open(INFO, ">$info") || die "Failed to open '$info': $!\n";
- print INFO "$pri_type $pri_proto\n" || die "Failed writing to '$info': $!\n";
- close INFO || die "Failed during close of '$info': $!\n";
+ my $pri_protocol;
+ my @keys = (
+ "pri_protocol/connector:$ENV{XBUS_CONNECTOR}/$xpd_name",
+ "pri_protocol/label:$ENV{XBUS_LABEL}/$xpd_name",
+ "pri_protocol/$ENV{XBUS_NAME}/$xpd_name",
+ "pri_protocol"
+ );
+ foreach my $k (@keys) {
+ $k = lc($k); # Lowercase
+ $pri_protocol = $settings{$k};
+ if(defined $pri_protocol) {
+ $port->{pri_protocol} = $pri_protocol;
+ return $pri_protocol;
+ }
+ }
+ return undef;
}
-sub process_pri_spec($) {
+sub write_pri_info {
my $port = shift;
my $subunit = $port->{PORT_NUM};
- my $xpd_name = "XPD-$ENV{UNIT_NUMBER}$subunit";
- my $match;
- my $setup;
- my @pri_setup;
-SPEC:
- for(my $i = 0; $i < @pri_specs; $i++) {
- my $spec = $pri_specs[$i];
- ($match, $setup) = split(/=/, $spec);
- next unless defined $match and defined $setup;
- # Convert "globs" to regex
- $match =~ s/\*/.*/g;
- $match =~ s/\?/./g;
- #logit "match: $match";
- my @patlist = (
- "CONNECTOR/$ENV{XBUS_CONNECTOR}/$xpd_name",
- "NUM/$ENV{XBUS_NAME}/$xpd_name"
- );
- foreach my $pattern (@patlist) {
- #logit "testmatch: $pattern =~ $match";
- if($pattern =~ $match) {
- main::logit "$xpd_name: MATCH '$pattern' ~ '$match' setup=$setup";
- last SPEC;
- }
+ my $pri_protocol = $port->get_pri_protocol;
+ my $xpd_name = sprintf("XPD-%1d%1d", $ENV{UNIT_NUMBER}, $subunit);
+
+ if(defined $pri_protocol) {
+ main::logit "$xpd_name: pri_protocol $pri_protocol";
+ my $file = sprintf "/sys/bus/xpds/devices/%02d:%1d:%1d/pri_protocol",
+ $ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER}, $subunit;
+ if(! -f $file) {
+ $file = "/proc/xpp/$ENV{XBUS_NAME}/$xpd_name/pri_info";
+ main::logit "OLD DRIVER: does not use /sys chipregs. Falling back to /proc"
+ if -f $file;
}
+ open(INFO, ">$file") || die "Failed to open '$file': $!\n";
+ print INFO "$pri_protocol\n" || die "Failed writing '$pri_protocol' to '$file': $!\n";
+ close INFO || die "Failed during close of '$file': $!\n";
+ } else {
+ main::logit "$xpd_name: Skip setting pri protocol -- non given";
}
- die "No setup matching $ENV{XBUS_NAME}/$xpd_name\n" unless defined $setup;
- @pri_setup = split(/,/, $setup);
- die "Bad setup string '$setup'\n" unless @pri_setup;
- $port->{'PRI_SETUP'} = \@pri_setup;
}
sub port_setup($) {
@@ -348,12 +358,10 @@ sub port_setup($) {
}
package main;
-BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
-use Zaptel::Config::Defaults;
logit "Starting '$0'";
-PRI::read_pri_specs;
+PRI::read_defaults;
sub main() {
my @ports;
@@ -363,12 +371,9 @@ sub main() {
PRI::init_quad;
# Must initialize all 4 ports, regardless how much there are
for($subunit = 0; $subunit < 4; $subunit++) {
- my $is_nt = 0;
-
- #logit "main(): Initializing subunit $subunit is_nt=$is_nt";
+ #logit "main(): Initializing subunit $subunit";
my $p = PRI::Port->new(
'PORT_NUM' => $subunit,
- 'PRI_NT' => $is_nt,
'EXIST' => ($subunit < $ENV{UNIT_SUBUNITS})
);
$p->port_setup;
diff --git a/kernel/xpp/utils/Makefile b/kernel/xpp/utils/Makefile
index 2a12166..b88bb75 100644
--- a/kernel/xpp/utils/Makefile
+++ b/kernel/xpp/utils/Makefile
@@ -1,6 +1,5 @@
PEDANTIC = -ansi -pedantic -std=c99
-RANLIB = ranlib
INSTALL = install
INSTALL_DATA = install -m 644
@@ -36,8 +35,8 @@ PERL_MODS_PAT := *.pm $(PERL_DIRS:%=%/*.pm)
PERL_MODS := $(shell cd zconf; echo $(PERL_MODS_PAT))
XPD_FIRMWARE = $(wildcard ../firmwares/*.hex)
-XPD_INIT_DATA = $(XPD_FIRMWARE) init_fxo_modes
-XPD_INIT = $(wildcard ../init_card_?_*) xpp_fxloader
+XPD_INIT_DATA = $(XPD_FIRMWARE) init_fxo_modes ../XppConfig.pm
+XPD_INIT = $(wildcard ../init_card_?_*) xpp_fxloader waitfor_xpds zaptel_drivers
# Variables that should be defined above, but need sane defaults:
# FIXME: Are those values really sane?
@@ -49,7 +48,7 @@ ifeq (,$(PBX_LIBUSB))
PBX_LIBUSB = $(shell if [ -r /usr/include/usb.h ]; then echo 1; else echo 0; fi)
endif
-WCTDM=$(shell for i in $(ZAP_KERNEL)/wctdm.c $(ZAP_KERNEL)/fxo_modes.h; do [ -f "$$i" ] && echo "$$i"; done)
+WCTDM=$(shell for i in $(ZAP_KERNEL)/wctdm.c $(ZAP_KERNEL)/fxo_modes.h fxo_modes.h; do [ -f "$$i" ] && echo "$$i"; done)
CFLAGS = -g -Wall $(EXTRA_CFLAGS)
@@ -70,7 +69,8 @@ TARGETS = init_fxo_modes print_modes perlcheck
PROG_INSTALL = genzaptelconf
MAN_INSTALL = $(PROG_INSTALL:%=%.8)
ifeq (1,$(PBX_LIBUSB))
-TARGETS += libhexfile.a fpga_load test_parse
+TARGETS += fpga_load \
+ test_parse
PROG_INSTALL += fpga_load
endif
ifneq (,$(PERLLIBDIR))
@@ -108,28 +108,19 @@ ifneq (,$(PERLLIBDIR))
done
endif
-libhexfile.a: hexfile.o
- $(AR) cru $@ $^
- $(RANLIB) $@
-
-fpga_load: fpga_load.o libhexfile.a
- $(CC) -L. -o $@ $@.o $(EXTRA_LIBS) -lhexfile -lusb
+fpga_load: fpga_load.o hexfile.o
+ $(CC) -L. -o $@ $^ $(EXTRA_LIBS) -lusb
fpga_load.o: CFLAGS+=-D_GNU_SOURCE # We use memrchr()
-hexfile.o: hexfile.c hexfile.h
- $(CC) $(CFLAGS) $(PEDANTIC) -c $<
-
-test_parse.o: test_parse.c hexfile.h
- $(CC) $(CFLAGS) $(PEDANTIC) -c $<
-
-test_parse: test_parse.o libhexfile.a
- $(CC) -L. -o $@ $@.o $(EXTRA_LIBS) -lhexfile -lusb
+test_parse: test_parse.o hexfile.o
+ $(CC) -L. -o $@ $^ $(EXTRA_LIBS) -lusb
print_modes: print_modes.c wctdm_fxomodes.h
$(HOSTCC) -o $@ $(CFLAGS) $<
wctdm_fxomodes.h: $(WCTDM)
+ @if [ "$(WCTDM)" = "" ]; then echo 1>&2 "WCTDM is not defined. Aborting."; exit 1; fi
@echo Building FXO modes from: $(WCTDM)
perl -n -e 'print if (/^static struct fxo_mode {$$/ .. /};$$/)' $(WCTDM) >$@ || rm -f $@
@@ -141,4 +132,11 @@ perlcheck: $(PERL_SCRIPTS)
touch $@
clean:
- $(RM) *.o $(TARGETS) wctdm_fxomodes.h
+ $(RM) .depend *.o $(TARGETS) wctdm_fxomodes.h
+
+.PHONY: depend
+depend: .depend
+.depend: *.c *.h wctdm_fxomodes.h
+ @$(CC) -MM *.c > $@ || rm -f $@
+
+include .depend
diff --git a/kernel/xpp/utils/astribank_hook b/kernel/xpp/utils/astribank_hook
index 8dd13c9..9510f7b 100755
--- a/kernel/xpp/utils/astribank_hook
+++ b/kernel/xpp/utils/astribank_hook
@@ -1,57 +1,42 @@
#! /bin/sh
-# This is an example of an Astribank device hook. The xpp.rules file
-# calls /usr/share/zaptel/astribank_hook after a new Astribank is ready
-# and after and old Astribank device has been destroyed.
-#
-
-set -e
-
me=`basename $0`
-INIT_DIR=`dirname $0`
-XPP_BASE=/proc/xpp
-export XPP_BASE
-LOGGER="logger -s -t $me"
-
-ZAPTEL_BOOT_DEBIAN=${ZAPTEL_BOOT_DEBIAN:-/etc/default/zaptel}
-ZAPTEL_BOOT_FEDORA=${ZAPTEL_BOOT_FEDORA:-/etc/sysconfig/zaptel}
-
-# read default configuration from /etc/default/zaptel
-if [ -r $ZAPTEL_BOOT_DEBIAN ]; then . $ZAPTEL_BOOT_DEBIAN; fi
-if [ -r $ZAPTEL_BOOT_FEDORA ]; then . $ZAPTEL_BOOT_FEDORA; fi
-
-if [ "$ASTRIBANK_HOOK_DISABLED" != '' ]; then
- $LOGGER -p kern.info "Exiting... ASTRIBANK_HOOK_DISABLED"
- exit 0
-fi
+dir=`dirname $0`
+LOGGER="logger -i -t '$me'"
# Always redirect stderr somewhere, otherwise the shell script will die
# when it tries to do I/O related stuff on closed file descriptor.
# Our default is to throw it down the bit-bucket.
#exec 2> /dev/console
## If you wish to trace this script:
-#exec 2> "/tmp/astribank_hook_$XBUS_NAME"
+#exec 2> "/tmp/${me}_$XBUS_NAME" 1>&2
-# Maybe add some logging
-#$LOGGER -p kern.info "$0: $ACTION: $*."
+PATH="$dir:/usr/sbin:/sbin:/usr/bin:/bin"
+
+set -e
+
+echo "starting($ACTION): '$*'" | $LOGGER
case "$ACTION" in
add)
- # An Astribank was added and is initialized and ready.
- # Put your shell commands bellow
- :
;;
remove)
- # An Astribank was Removed.
- # Put your shell commands bellow
- # You should not access /proc/xpp/... or run related utilities
- # like xpp_sync, since this is likely to cause very bad race
- # conditions during driver removal.
- :
;;
-*)
+online)
+ if [ -x "$dir/twinstar_hook" ]; then
+ "$dir/twinstar_hook"
+ fi
+ ;;
+offline)
+ if [ -x "$dir/twinstar_hook" ]; then
+ "$dir/twinstar_hook"
+ fi
;;
+*)
+ echo "$0: Unknown ACTION='$ACTION'" | $LOGGER
+ echo "$0: ARGS='$*'" | $LOGGER
+ echo "$0: ENV:" | $LOGGER
+ env | $LOGGER
+ exit 1
esac
-# Maybe add some logging
-#$LOGGER -p kern.info "$0: Done: $ACTION: $*."
diff --git a/kernel/xpp/utils/genconf_parameters b/kernel/xpp/utils/genconf_parameters
new file mode 100644
index 0000000..d1b8f62
--- /dev/null
+++ b/kernel/xpp/utils/genconf_parameters
@@ -0,0 +1,114 @@
+#
+# /etc/dahdi/genconf_parameters
+#
+# This file contains parameters that affect the
+# dahdi_genconf configurator generator.
+#
+# Syntax:
+# * A comment from '#' to end of line
+# * Blank lines ignored
+# * Whitespace at end of line trimmed
+# * Single valued items:
+# key <whitespaces...> value
+# * List valued items:
+# key
+# <whitespaces...>value1
+# <whitespaces...>value2
+# ...
+#
+
+# When generating extensions for zapata.conf or users.conf etc: the
+# extension number will be channel_number+base_exten . The default is:
+#base_exten 4000
+#
+# Make FXS (analog phones) extentions answer immediately (sets
+# 'immediate = yes' for them in zapata.conf). Don't enable this before
+# you're read documentation about this option.
+#fxs_immediate yes
+#
+# For FXS (analog phones) - use KS or LS? ks is the only method for
+# Asterisk to provide disconnect supervision and thus it would normally
+# be preffered and is the default.
+#fxs_default_start ls
+#
+# For FXO (analog lines) - use KS or LS? KS is the default and is
+# normally the better choice as it allows detecting handups on many
+# lines.
+#fxo_default_start ls
+
+# Set tone zone values. This is used for playing tones (busy, dialtone
+# and such). The default is 'us'. This sets the value for both loadzone
+# and defaultzone in zaptel.conf .
+#lc_country il
+
+# The dialplan contenxt into which to send trunks in zapata.conf or
+# users.conf. The default value is:
+#context_lines from-pstn
+#
+# The dialplan context into which to send extensions in zapata.conf or
+# users.conf. The default value is:
+#context_phones from-internal
+#
+# Two extea contexts for the input ports and output ports of an
+# Astribank. Default values are:
+#context_input astbank-input
+#context_output astbank-output
+
+# A group to put all analog phones in. By default 0, so you can dial to
+# the 'first phone available' using Zap/g5 .
+#group_phones 5
+#
+# A group in which to put all the channels belonging to some trunk.
+# Thus you can dial through "some trunk" using Zap/G0/NUMBER
+#group_lines 0
+
+# Channels of digital trunk of span N are also added to group 10+N (that
+# is: 14 for channels of span 4).
+
+# Do we want to use PtP ('bri') or PtMP ('bri_ptmp') for BRI? PtMP
+# allows connecting several CPE devices on the same network device
+# (several BRI phones on the same line, kind of like several analog
+# phones on the same analog line). However it is generally brings
+# unnecessary complexity for a pbx-pbx connection. It is still the
+# default as this is normally what you get for a BRI PSTN connection.
+#bri_sig_style bri
+#
+# If this option is set (that is: not remmed-out), BRI NT ports will
+# also be set as overlap. This is useful if you want to connect ISDN
+# phones.
+#brint_overlap
+
+# bri_hardhdlc: If this parameter is set to 'yes', in the entries for
+# BRI cards 'hardhdlc' will be used instead of 'dchan' (an alias for
+# 'fcshdlc').
+#bri_hardhdlc yes
+
+# For MFC/R2 Support: 'R2' will make E1 spans CAS and with the
+# 'r2_idle_bits' bit in zaptel.conf . It will also make zapconf default
+# to generating the channels of this card in unicall.conf rather than in
+# zapata.conf . The meaning of this may be extended somehow to support
+# R2 through openr2/chan_dahdi later on.
+#pri_connection_type R2
+#r2_idle_bits 1101
+
+# pri_termtype contains a list of settings:
+# Currently the only setting is for TE or NT (the default is TE). This
+# sets two different but normally related configuration items:
+#
+# A TE span will have *_cpe signalling in Asterisk and will also get
+# timing from the remote party.
+#
+# A NT span will have *_new signalling in Asterisk and will provide
+# timing to the remote party.
+#
+# pri_termtype is a list if span specs and configuration (TE/NT) for
+# them. The first spec that matches is used. The matching is of perl
+# regular expressions, but with '*' and '?' have their meaning from
+# basic regular expressions.
+#pri_termtype
+# SPAN/2 NT
+# SPAN/4 NT
+#
+#pri_termtype
+# SPAN/* NT
+#
diff --git a/kernel/xpp/utils/genzaptelconf b/kernel/xpp/utils/genzaptelconf
index 163f595..5f28c50 100755
--- a/kernel/xpp/utils/genzaptelconf
+++ b/kernel/xpp/utils/genzaptelconf
@@ -79,6 +79,11 @@ SPAN_GROUP_BASE=10
# and other devices).
brint_overlap=no
+# Wait for all the Astribanks to load.
+# If you don't have latest zaptel, you may need to set this to
+# 'waitfor_xpds_internal'
+WAITFOR_XPDS=${WAITFOR_XPDS:-/usr/share/zaptel/waitfor_xpds}
+
# a temporary directory to store whatever we need to remember.
#
# The main loop of genconf is run in a sub-process.
@@ -265,6 +270,10 @@ zap_reg_xpp() {
done
}
+waitfor_xpds_internal() {
+ cat /proc/xpp/XBUS-[0-9]*/waitfor_xpds 2>/dev/null || true
+}
+
# Initialize the Xorcom Astribank (xpp/)
xpp_startup() {
# do nothing if the module xpp was not loaded, or if no
@@ -273,7 +282,7 @@ xpp_startup() {
if ! grep -q 'STATUS=connected' /proc/xpp/xbuses; then return 0; fi
echo "Waiting for Astribank devices to initialize:"
- cat /proc/xpp/XBUS-[0-9]*/waitfor_xpds 2>/dev/null || true
+ $WAITFOR_XPDS
# overriding locales for the above two, as perl can be noisy
# when locales are missing.
diff --git a/kernel/xpp/utils/migrate_xpp b/kernel/xpp/utils/migrate_xpp
new file mode 100755
index 0000000..98d45e7
--- /dev/null
+++ b/kernel/xpp/utils/migrate_xpp
@@ -0,0 +1,102 @@
+#! /usr/bin/perl -w
+use strict;
+use POSIX;
+#
+# Migrate the information from XPP_PRI_SETUP variable in
+# /etc/sysconig/zaptel or /etc/default/zaptel into the
+# modern configuration:
+# - pri_protocol defined in /etc/xpp.conf
+# - pri_termtype defined in /etc/genconf_parameters
+#
+
+my $conf_rh="/etc/sysconfig/zaptel";
+my $conf_debian="/etc/default/zaptel";
+my $conf;
+my $marker = '##';
+my @origlines;
+my @lines;
+
+if (-f "$conf_rh") {
+ $conf="$conf_rh";
+} elsif (-f "$conf_debian") {
+ $conf="$conf_debian";
+} else {
+ warn "$0: No '$conf_rh' and no '$conf_debian'. Skipping";
+ exit 0;
+}
+
+print STDERR "$0: Reading old config from '$conf'\n";
+open(F, ". $conf; echo \$XPP_PRI_SETUP |") || die "$0: Failed: $!";
+my $line = <F>;
+close F;
+
+sub write_file($@) {
+ my $fname = shift;
+ my @lines = @_;
+
+ open(G, ">$fname.new") || die "$0: Failed opening $fname.new: $!\n";
+ print G @lines;
+ close G;
+ rename($fname, "$fname.backup") ||
+ die "$0: rename($fname, $fname.backup): $!";
+ rename("$fname.new", $fname) ||
+ die "$0: rename($fname.new, $fname): $!";
+}
+
+my @wordlist = split(/\s+/, $line);
+my @spans;
+my $global_pri_protocol;
+foreach my $w (@wordlist) {
+ my ($span, $val) = split(/=/, $w);
+ my ($termtype, $pri_protocol) = split(/,/, $val);
+ if(! defined $global_pri_protocol) {
+ $global_pri_protocol = $pri_protocol;
+ } elsif($global_pri_protocol ne $pri_protocol) {
+ die "different pri_protocol (E1/T1/J1) in different spans\n";
+ }
+ push(@spans, "$span\t$termtype");
+}
+
+my $xppconf = '/etc/xpp.conf';
+print STDERR "$0: Updating PRI protocol in $xppconf\n";
+open(F, "$xppconf") || die "$0: Failed opening $xppconf: $!\n";
+@origlines = <F>;
+close F;
+undef @lines;
+foreach (@origlines) {
+ next if /^#$marker:/;
+ if(s/^pri_protocol.*/pri_protocol\t$global_pri_protocol/) {
+ $_ =
+ "#$marker: Automatically copied from '$conf'\n" .
+ sprintf("#$marker: On %s", ctime(time)) .
+ $_;
+ }
+ push(@lines, $_);
+}
+write_file($xppconf, @lines);
+
+my $genconf = '/etc/genconf_parameters';
+undef @origlines;
+undef @lines;
+print STDERR "$0: Updating PRI termtypes in '$genconf'\n";
+open(F, "$genconf") || die "$0: Failed opening $genconf: $!\n";
+my $in_termtype_block = 0;
+while(<F>) {
+ next if /^#$marker:/;
+ next if $in_termtype_block && /^\s+/;
+ if(/^pri_termtype/) {
+ $in_termtype_block = 1;
+ next;
+ }
+ push(@lines, $_);
+}
+close F;
+my $pri_termtype =
+ "#$marker: Automatically copied from '$conf'\n" .
+ sprintf("#$marker: On %s", ctime(time)) .
+ "pri_termtype\n";
+foreach my $span (@spans) {
+ $pri_termtype .= "\t$span\n";
+}
+push(@lines, $pri_termtype);
+write_file($genconf, @lines);
diff --git a/kernel/xpp/utils/print_modes.c b/kernel/xpp/utils/print_modes.c
index 77e0e33..e6586f0 100644
--- a/kernel/xpp/utils/print_modes.c
+++ b/kernel/xpp/utils/print_modes.c
@@ -1,3 +1,25 @@
+/*
+ * Written by Oron Peled <oron@actcom.co.il>
+ * Copyright (C) 2006, 2007, 2008, Xorcom
+ *
+ * All rights reserved.
+ *
+ * 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 <stdio.h>
#include "wctdm_fxomodes.h"
diff --git a/kernel/xpp/utils/test_parse.c b/kernel/xpp/utils/test_parse.c
index 8ac2023..700a0f7 100644
--- a/kernel/xpp/utils/test_parse.c
+++ b/kernel/xpp/utils/test_parse.c
@@ -1,3 +1,25 @@
+/*
+ * Written by Oron Peled <oron@actcom.co.il>
+ * Copyright (C) 2006, 2007, 2008, Xorcom
+ *
+ * All rights reserved.
+ *
+ * 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 <stdio.h>
#include <stdarg.h>
#include "hexfile.h"
diff --git a/kernel/xpp/utils/waitfor_xpds b/kernel/xpp/utils/waitfor_xpds
new file mode 100755
index 0000000..ebac3a0
--- /dev/null
+++ b/kernel/xpp/utils/waitfor_xpds
@@ -0,0 +1,54 @@
+#! /bin/sh
+
+# waitfor_xpds: wait until all Astribanks were initialized
+
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2008, Xorcom
+#
+# All rights reserved.
+#
+# 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.
+#
+
+
+set -e
+
+ab_list() {
+ ab=`find /sys/bus/astribanks/devices/xbus-*/ -name waitfor_xpds 2> /dev/null || :`
+ if [ "$ab" = "" ]; then
+ ab=`find /proc/xpp/XBUS-[0-9]*/ -name waitfor_xpds 2> /dev/null || :`
+ procfiles=1
+ fi
+ if [ "$ab" = "" ]; then
+ echo 1>&2 "$0: No XBUSES to wait for. Aborting..."
+ exit 1
+ fi
+ if [ -n "$procfiles" ]; then
+ echo 1>&2 "$0: No /sys attributes, fallback to /proc interface..."
+ fi
+ echo $ab
+}
+
+
+while
+ if ! ab=`ab_list`; then
+ exit 1
+ fi
+ test "$oldab" != "$ab"
+do
+ oldab="$ab"
+ echo 1>&2 "Waiting for XPDS"
+ cat $ab
+done
diff --git a/kernel/xpp/utils/xpp_sync b/kernel/xpp/utils/xpp_sync
index d5b340a..2840271 100755
--- a/kernel/xpp/utils/xpp_sync
+++ b/kernel/xpp/utils/xpp_sync
@@ -51,21 +51,9 @@ sub get_sorted_xpds() {
push(@good_xpds, $xpd);
}
}
- my @pri_nt_xpds = grep { $_->type =~ /(E1|T1|J1)_NT/; } @good_xpds;
- my @pri_te_xpds = grep { $_->type =~ /(E1|T1|J1)_TE/; } @good_xpds;
- my @bri_nt_xpds = grep { $_->type eq 'BRI_NT'; } @good_xpds;
- my @bri_te_xpds = grep { $_->type eq 'BRI_TE'; } @good_xpds;
- my @fxo_xpds = grep { $_->type eq 'FXO'; } @good_xpds;
- my @fxs_xpds = grep { $_->type eq 'FXS'; } @good_xpds;
-
- # Sync Priority
- return
- @pri_te_xpds,
- @bri_te_xpds,
- @fxo_xpds,
- @pri_nt_xpds,
- @bri_nt_xpds,
- @fxs_xpds;
+ my @xpd_prio = Zaptel::Xpp::Xpd::xpds_by_rank(@good_xpds);
+ #Zaptel::Xpp::Xpd::show_xpd_rank(@xpd_prio);
+ return @xpd_prio;
}
sub do_select(@) {
@@ -108,7 +96,7 @@ sub show_sync() {
my $xpdstr = '[ ' . $xbus->pretty_xpds . ' ]';
my $label = '[' . $xbus->label() . ']';
my $connector = '(' . $xbus->connector . ')';
- my $mark = ($curr_sync =~ /\d+/ and $xbus->num == $curr_sync)?"+":"";
+ my $mark = ($curr_sync =~ /^\d+$/ and $xbus->num == $curr_sync)?"+":"";
my $padding = ' ' x (40 - length $xpdstr);
printf " %1s %s %-25s %-14s %s\n", $mark, $xbus->name, $connector, $label, $xpdstr;
}
@@ -131,7 +119,7 @@ END
}
}
-if($sync) {
+if(defined $sync) {
if($autoselect) {
do_select(@sync_xpds);
} else {
@@ -207,8 +195,8 @@ In this example we see that the recommended xpp sync master is XBUS-02 -
it is the first on the list. It is also the actual syncer, as we can see
from the '+' beside it.
-xpp_sync is normally called from both the zaptel init.d script and the
-the Astribank udev script. The parameter it is called with defaults to
+xpp_sync is normally called from the zaptel init.d script.
+The parameter it is called with defaults to
I<auto>, but it is possible to override that parameter (e.g: set it to
I<zaptel>) through the value of XPP_SYNC in either /etc/defualt/zaptel
or /etc/sysconfig/zaptel .
diff --git a/kernel/xpp/utils/zapconf b/kernel/xpp/utils/zapconf
index 78a20b9..ac1af0b 100755
--- a/kernel/xpp/utils/zapconf
+++ b/kernel/xpp/utils/zapconf
@@ -11,555 +11,101 @@ use strict;
use File::Basename;
BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
+use Getopt::Std;
use Zaptel;
use Zaptel::Xpp;
-use Zaptel::Config::Defaults;
-
-my %default_context = (
- FXO => 'from-pstn',
- FXS => 'from-internal',
- IN => 'astbank-input',
- OUT => 'astbank-output',
- BRI_TE => 'from-pstn',
- BRI_NT => 'from-internal',
- E1_TE => 'from-pstn',
- T1_TE => 'from-pstn',
- J1_TE => 'from-pstn',
- E1_NT => 'from-internal',
- T1_NT => 'from-internal',
- J1_NT => 'from-internal',
- );
-
-my %default_group = (
- FXO => 0,
- FXS => "5",
- IN => '',
- OUT => '',
- BRI_TE => 0,
- BRI_NT => 6,
- E1_TE => 0,
- T1_TE => 0,
- J1_TE => 0,
- E1_NT => 6,
- T1_NT => 6,
- J1_NT => 6,
- );
-
-my $fxs_default_start = 'ls';
-
-my %default_zaptel_signalling = (
- FXO => 'fxsks',
- FXS => "fxo{fxs_default_start}",
- IN => "fxo{fxs_default_start}",
- OUT => "fxo{fxs_default_start}",
- );
-
-my %default_zapata_signalling = (
- FXO => 'fxs_ks',
- FXS => "fxo_{fxs_default_start}",
- IN => "fxo_{fxs_default_start}",
- OUT => "fxo_{fxs_default_start}",
- );
-
-my $base_exten = 4000;
-my $fxs_immediate = 'no';
-my $lc_country = 'us';
-my $loadzone = $lc_country;
-my $defaultzone = $lc_country;
-my $bri_sig_style = 'bri_ptmp';
-my $brint_overlap = 'no';
-
-my %zaptel_default_vars = (
- base_exten => \$base_exten,
- fxs_immediate => \$fxs_immediate,
- fxs_default_start => \$fxs_default_start,
- lc_country => [
- \$loadzone,
- \$defaultzone,
- ],
- context_lines => \$default_context{FXO},
- context_phones => \$default_context{FXS},
- context_input => \$default_context{IN},
- context_output => \$default_context{OUT},
- group_phones => [
- \$default_group{FXS},
- \$default_group{IN},
- \$default_group{OUT},
- ],
- group_lines => \$default_group{FXO},
- ZAPBRI_SIGNALLING => \$bri_sig_style,
- brint_overlap => \$brint_overlap,
- );
-
-sub map_zaptel_defaults {
- my %defaults = @_;
- foreach my $name (keys %defaults) {
- my $val = $defaults{$name};
- my $ref = $zaptel_default_vars{$name};
- my $type = ref $ref;
- my @vars = ();
- # Some broken shells (msh) export even variables
- # That where not defined. Work around that.
- next unless defined $val && $val ne '';
- if($type eq 'SCALAR') {
- @vars = ($ref);
- } elsif($type eq 'ARRAY') {
- @vars = @$ref;
- } else {
- die "$0: Don't know how to map '$name' (type=$type)\n";
- }
- foreach my $v (@vars) {
- $$v = $val;
- }
- }
-}
-
-
-my $zapconf_file;
-my $zapatachannels_file;
-my $users_file;
-my $zapataconf_file;
-
-my %files = (
- zaptel => { file => \$zapconf_file, func => \&gen_zaptelconf },
- zapata => { file => \$zapatachannels_file, func => \&gen_zapatachannelsconf },
- users => { file => \$users_file, func => \&gen_usersconf },
- zapataconf => { file => \$zapataconf_file, func => \&gen_zapataconf },
-);
-
-my @default_files = ("zaptel", "zapata");
-
-my @spans = Zaptel::spans();
+use Zaptel::Config::Gen;
+use Zaptel::Config::Params;
-sub bchan_range($) {
- my $span = shift || die;
- my $first_chan = ($span->chans())[0];
- my $first_num = $first_chan->num();
- my $range_start = $first_num;
- my @range;
- my $prev = undef;
-
- die unless $span->is_digital();
- foreach my $c (@{$span->bchan_list()}) {
- my $curr = $c + $first_num;
- if(!defined($prev)) {
- $prev = $curr;
- } elsif($curr != $prev + 1) {
- push(@range, sprintf("%d-%d", $range_start, $prev));
- $range_start = $curr;
- }
- $prev = $curr;
- }
- if($prev >= $first_num) {
- push(@range, sprintf("%d-%d", $range_start, $prev));
- }
- return join(',', @range);
-}
+my $version = '1'; # Functionality version (integer)
+my $revision = '$Revision$';
-sub gen_zaptel_signalling($) {
- my $chan = shift || die;
- my $type = $chan->type;
- my $num = $chan->num;
-
- die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
- if($type eq 'EMPTY') {
- printf "# channel %d, %s, no module.\n", $num, $chan->fqn;
- return;
- }
- my $sig = $default_zaptel_signalling{$type} || die "unknown default zaptel signalling for chan $num type $type";
- if ($type eq 'IN') {
- printf "# astbanktype: input\n";
- } elsif ($type eq 'OUT') {
- printf "# astbanktype: output\n";
- }
- printf "$sig=$num\n";
-}
+my %opts;
-my $bri_te_last_timing = 1;
-
-sub gen_zaptel_digital($) {
- my $span = shift || die;
- my $num = $span->num() || die;
- die "Span #$num is analog" unless $span->is_digital();
- my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
- my $timing;
- my $lbo = 0;
- my $framing = $span->framing() || die "$0: No framing information for span #$num\n";
- my $coding = $span->coding() || die "$0: No coding information for span #$num\n";
- my $span_crc4 = $span->crc4();
- $span_crc4 = (defined $span_crc4) ? ",$span_crc4" : '';
- my $span_yellow = $span->yellow();
- $span_yellow = (defined $span_yellow) ? ",$span_yellow" : '';
-
- $timing = ($termtype eq 'NT') ? 0 : $bri_te_last_timing++;
- printf "span=%d,%d,%d,%s,%s%s%s\n",
- $num,
- $timing,
- $lbo,
- $framing,
- $coding,
- $span_crc4,
- $span_yellow;
- printf "# termtype: %s\n", lc($termtype);
- printf "bchan=%s\n", bchan_range($span);
- my $dchan = $span->dchan();
- printf "dchan=%d\n", $dchan->num();
+sub set_defaults {
+ my $default_file = $ENV{GENCONF_PARAMETERS} || "/etc/genconf_parameters";
+ my $params = Zaptel::Config::Params->new($default_file);
+ #$params->dump;
+ if($opts{v}) {
+ print "Default parameters from ", $params->{GENCONF_FILE}, "\n";
+ }
+ my $gconfig = Zaptel::Config::Gen->new($params);
+ #$gconfig->dump;
+ return $gconfig;
}
-sub gen_zaptelconf($) {
- my $file = shift || die;
- rename "$file", "$file.bak"
- or $! == 2 # ENOENT (No dependency on Errno.pm)
- or die "Failed to backup old config: $!\n";
- open(F, ">$file") || die "$0: Failed to open $file: $!\n";
- my $old = select F;
- printf "# Autogenerated by %s on %s -- do not hand edit\n", $0, scalar(localtime);
- print <<"HEAD";
-# Zaptel Configuration File
-#
-# This file is parsed by the Zaptel Configurator, ztcfg
-#
-HEAD
+sub spans_prep($@) {
+ my $gconfig = shift || die;
+ my @spans = @_;
foreach my $span (@spans) {
- printf "# Span %d: %s %s\n", $span->num, $span->name, $span->description;
- if($span->is_digital()) {
- gen_zaptel_digital($span);
- } else {
- foreach my $chan ($span->chans()) {
- if(1 || !defined $chan->type) {
- my $type = $chan->probe_type;
- my $num = $chan->num;
- die "Failed probing type for channel $num"
- unless defined $type;
- $chan->type($type);
- }
- gen_zaptel_signalling($chan);
- }
+ if($span->is_pri) {
+ $span->pri_set_fromconfig($gconfig);
}
- print "\n";
}
- print <<"TAIL";
-# Global data
-
-loadzone = $loadzone
-defaultzone = $defaultzone
-TAIL
- close F;
- select $old;
}
-my %DefaultConfigs = (
- context => 'default',
- group => '63', # FIXME: should not be needed.
- overlapdial => 'no',
- busydetect => 'no',
- rxgain => 0,
- txgain => 0,
-);
-
-sub reset_zapata_values {
- foreach my $arg (@_) {
- if (exists $DefaultConfigs{$arg}) {
- print "$arg = $DefaultConfigs{$arg}\n";
- } else {
- print "$arg =\n";
- }
- }
-}
+sub generator_list($) {
+ my $gconfig = shift || die;
+ my @genlist;
-sub gen_zapata_digital($) {
- my $span = shift || die;
- my $num = $span->num() || die;
- die "Span #$num is analog" unless $span->is_digital();
- my $type = $span->type() || die "$0: Span #$num -- unkown type\n";
- my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
- my $group = $default_group{"$type"};
- my $context = $default_context{"$type"};
- my @to_reset = qw/context group/;
-
- die "$0: missing default group (termtype=$termtype)\n" unless defined($group);
- die "$0: missing default context\n" unless $context;
-
- my $sig = $span->signalling || die "missing signalling info for span #$num type $type";
- grep($bri_sig_style eq $_, 'bri', 'bri_ptmp', 'pri') or die "unknown signalling style for BRI";
- if($span->is_bri() and $bri_sig_style eq 'bri_ptmp') {
- $sig .= '_ptmp';
- }
- if ($span->is_bri() && $termtype eq 'NT' && $brint_overlap eq 'yes') {
- print "overlapdial = yes\n";
- push(@to_reset, qw/overlapdial/);
- }
-
- $group .= "," . (10 + $num); # Invent unique group per span
- printf "group=$group\n";
- printf "context=$context\n";
- printf "switchtype = %s\n", $span->switchtype;
- printf "signalling = %s\n", $sig;
- printf "channel => %s\n", bchan_range($span);
- reset_zapata_values(@to_reset);
-}
-
-sub gen_zapata_channel($) {
- my $chan = shift || die;
- my $type = $chan->type;
- my $num = $chan->num;
- die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
- my $exten = $base_exten + $num;
- my $sig = $default_zapata_signalling{$type};
- my $context = $default_context{$type};
- my $group = $default_group{$type};
- my $callerid;
- my $immediate;
-
- return if $type eq 'EMPTY';
- die "missing default_zapata_signalling for chan #$num type $type" unless $sig;
- $callerid = ($type eq 'FXO')
- ? 'asreceived'
- : sprintf "\"Channel %d\" <%04d>", $num, $exten;
- if($type eq 'IN') {
- $immediate = 'yes';
- }
- # FIXME: $immediage should not be set for 'OUT' channels, but meanwhile
- # it's better to be compatible with genzaptelconf
- $immediate = 'yes' if $fxs_immediate eq 'yes' and $sig =~ /^fxo_/;
- my $signalling = $chan->signalling;
- $signalling = " " . $signalling if $signalling;
- my $info = $chan->info;
- $info = " " . $info if $info;
- printf ";;; line=\"%d %s%s%s\"\n", $num, $chan->fqn, $signalling, $info;
- printf "signalling=$sig\n";
- printf "callerid=$callerid\n";
- printf "mailbox=%04d\n", $exten unless $type eq 'FXO';
- if(defined $group) {
- printf "group=$group\n";
- }
- printf "context=$context\n";
- printf "immediate=$immediate\n" if defined $immediate;
- printf "channel => %d\n", $num;
- # Reset following values to default
- printf "callerid=\n";
- printf "mailbox=\n" unless $type eq 'FXO';
- if(defined $group) {
- printf "group=\n";
- }
- printf "context=default\n";
- printf "immediate=no\n" if defined $immediate;
- print "\n";
-}
-
-sub gen_zapatachannelsconf($) {
- my $file = shift || die;
- rename "$file", "$file.bak"
- or $! == 2 # ENOENT (No dependency on Errno.pm)
- or die "Failed to backup old config: $!\n";
- open(F, ">$file") || die "$0: Failed to open $file: $!\n";
- my $old = select F;
- printf "; Autogenerated by %s on %s -- do not hand edit\n", $0, scalar(localtime);
- print <<"HEAD";
-; Zaptel Channels Configurations (zapata.conf)
-;
-; This is not intended to be a complete zapata.conf. Rather, it is intended
-; to be #include-d by /etc/zapata.conf that will include the global settings
-;
-
-HEAD
- foreach my $span (@spans) {
- printf "; Span %d: %s %s\n", $span->num, $span->name, $span->description;
- if($span->is_digital()) {
- gen_zapata_digital($span);
- } else {
- foreach my $chan ($span->chans()) {
- gen_zapata_channel($chan);
- }
+ if (@ARGV) {
+ for my $gen (@ARGV) {
+ push @genlist, $gen;
+ }
+ } else {
+ # No files given. Use the defaults.
+ @genlist = ('zaptel', 'zapata');
+ if($gconfig->{'pri_connection_type'} eq 'R2') {
+ push @genlist, 'unicall';
}
- print "\n";
}
- close F;
- select $old;
+ return @genlist;
}
-sub gen_users_channel($) {
- my $chan = shift || die;
- my $type = $chan->type;
- my $num = $chan->num;
- die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
- my $exten = $base_exten + $num;
- my $sig = $default_zapata_signalling{$type};
- my $full_name = "$type $num";
-
- die "missing default_zapata_signalling for chan #$num type $type" unless $sig;
- print << "EOF";
-[$exten]
-callwaiting = yes
-context = numberplan-custom-1
-fullname = $full_name
-cid_number = $exten
-hasagent = no
-hasdirectory = no
-hasiax = no
-hasmanager = no
-hassip = no
-hasvoicemail = yes
-host = dynamic
-mailbox = $exten
-threewaycalling = yes
-vmsecret = 1234
-secret = 1234
-signalling = $sig
-zapchan = $num
-registeriax = no
-registersip = no
-canreinvite = no
-nat = no
-dtmfmode = rfc2833
-disallow = all
-allow = all
-
-EOF
-}
+sub parse_genopts($) {
+ my $optstr = shift;
+ my %genopts;
-# generate users.conf . The specific users.conf is strictly oriented
-# towards using with the asterisk-gui .
-#
-# This code could have generated a much simpler and smaller
-# configuration file, had there been minimal level of support for
-# configuration templates in the asterisk configuration rewriting. Right
-# now Asterisk's configuration rewriting simply freaks out in the face
-# of templates: http://bugs.digium.com/11442 .
-sub gen_usersconf($) {
- my $file = shift || die;
- rename "$file", "$file.bak"
- or $! == 2 # ENOENT (No dependency on Errno.pm)
- or die "Failed to backup old config: $!\n";
- open(F, ">$file") || die "$0: Failed to open $file: $!\n";
- my $old = select F;
- print <<"HEAD";
-;!
-;! Automatically generated configuration file
-;! Filename: @{[basename($file)]} ($file)
-;! Generator: $0
-;! Creation Date: @{[scalar(localtime)]}
-;!
-[general]
-;
-; Full name of a user
-;
-fullname = New User
-;
-; Starting point of allocation of extensions
-;
-userbase = @{[$base_exten+1]}
-;
-; Create voicemail mailbox and use use macro-stdexten
-;
-hasvoicemail = yes
-;
-; Set voicemail mailbox @{[$base_exten+1]} password to 1234
-;
-vmsecret = 1234
-;
-; Create SIP Peer
-;
-hassip = no
-;
-; Create IAX friend
-;
-hasiax = no
-;
-; Create Agent friend
-;
-hasagent = no
-;
-; Create H.323 friend
-;
-;hash323 = yes
-;
-; Create manager entry
-;
-hasmanager = no
-;
-; Remaining options are not specific to users.conf entries but are general.
-;
-callwaiting = yes
-threewaycalling = yes
-callwaitingcallerid = yes
-transfer = yes
-canpark = yes
-cancallforward = yes
-callreturn = yes
-callgroup = 1
-pickupgroup = 1
-localextenlength = @{[length($base_exten)]}
-
-
-HEAD
- foreach my $span (@spans) {
- next unless grep { $_ eq $span->type} ( 'FXS', 'IN', 'OUT' );
- printf "; Span %d: %s %s\n", $span->num, $span->name, $span->description;
- foreach my $chan ($span->chans()) {
- gen_users_channel($chan);
- }
- print "\n";
+ $optstr = '' unless defined $optstr;
+ foreach my $o (split(/,/, $optstr)) {
+ my ($k, $v) = split(/=/, $o, 2);
+ $v = 1 unless defined $v and $v;
+ $genopts{$k} = $v;
}
- close F;
- select $old;
+ return %genopts;
}
-sub gen_zapataconf($) {
- my $file = shift || die;
- open(F, ">>$file") || die "$0: Failed to open $file: $!\n";
- my $old = select F;
- foreach my $span (@spans) {
- next unless $span->type eq 'FXO';
- my $current_sig = "";
- for my $chan ($span->chans()) {
- my $chan_num = $chan->num;
- if ($default_zapata_signalling{$chan->type} ne $current_sig) {
- $current_sig = $default_zapata_signalling{$chan->type};
- print "\nsignalling = $current_sig";
- print "\nchannel => $chan_num";
- } else {
- print ",$chan_num";
- }
+sub generate_files($@) {
+ my $gconfig = shift || die;
+ my @spans = @_;
+ my @generators = generator_list($gconfig);
+
+ for my $gen (@generators) {
+ my ($name, $optstr) = split(/=/, $gen, 2);
+ die "Illegal name '$name'\n" unless $name =~ /^\w+$/;
+ $name =~ s/(.)(.*)/\u$1\L$2/;
+ my %genopts = parse_genopts($optstr);
+ $genopts{'freepbx'} = 'yes' if $opts{'F'};
+ if(defined $opts{'v'}) {
+ $genopts{'verbose'} = $opts{v};
}
- print "\n";
- }
- close F;
- select $old;
-}
-
-sub set_defaults {
- # Source default files
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars(keys(%zaptel_default_vars));
- map_zaptel_defaults(%source_defaults);
- # Fixups
- foreach my $val (values %default_zaptel_signalling, values %default_zapata_signalling) {
- $val =~ s/{fxs_default_start}/$fxs_default_start/g;
+ $gconfig->run_generator($name, \%genopts, @spans);
}
- $zapconf_file = $ENV{ZAPCONF_FILE} || "/etc/zaptel.conf";
- $zapatachannels_file = $ENV{ZAPATA_FILE} || "/etc/asterisk/zapata-channels.conf";
- $users_file = $ENV{USERS_FILE} || "/etc/asterisk/users.conf";
- $zapataconf_file = $ENV{ZAPATACONF_FILE} || "/etc/asterisk/zapata.conf";
}
-sub parse_args {
- return if @ARGV == 0;
- @default_files = ();
- for my $file (@ARGV) {
- die "$0: Unknown file '$file'" unless defined $files{$file};
- push @default_files, $file;
- }
+getopts('vVF', \%opts) || die "$0: Bad option\n";
+if($opts{'V'}) {
+ my $revstr = $revision;
+ $revstr =~ s/[^$]*\$[^:]+:\s*//;
+ $revstr =~ s/\s*\$.*//;
+ print "$0: version=$version revision=$revstr\n";
+ exit 0;
}
-sub generate_files {
- for my $file (@default_files) {
- &{$files{$file}->{func}}(${$files{$file}->{file}});
- }
-}
-set_defaults;
-parse_args;
-generate_files;
+my $gconfig = set_defaults;
+my @spans = Zaptel::spans();
+spans_prep($gconfig, @spans);
+generate_files($gconfig, @spans);
__END__
@@ -569,35 +115,82 @@ zapconf - Generate configuration for zaptel channels.
=head1 SYNOPSIS
-zapconf [FILES...]
+zapconf [options] [generator...]
=head1 DESCRIPTION
This script generate configuration files for Zaptel hardware.
-Currently it can generate three files: zaptel, zapata, users and zapataconf (see below).
-Without arguments, it generates only zaptel and zapata.
+It uses two information sources:
=over 4
-=item zaptel - /etc/zaptel.conf
+=item Hardware
+
+ The actual zaptel hardware is automatically detected on the host.
+
+=item /etc/genconf_params
+
+A configuration file that supplements the hardware information.
+Its location may be overriden via the C<GENCONF_PARAMETERS> environment
+variable.
+
+=back
-Configuration for ztcfg(1). It's location may be overriden by the
-environment variable ZAPCONF_FILE.
+The zapconf script can generate various kinds of configuration files
+as specificed by the generator arguments. Each generator is a perl classes
+in Zaptel::Config::Gen namespace. The generator names on the command line
+are the class names in lowercase.
-=item zapata - /etc/asterisk/zapata-channels.conf
+The following generators are currently implemented: zaptel, zapata, unicall, users.
+For further documentation on each, please user perldoc on the relevant
+class. E.g: C<perldoc Zaptel::Config::Gen::Zapata>
+
+Each generator on the command line may be passed custom options by assigning
+a comma separated list of options to the generator name. E.g:
+
+ zapconf zaptel zapata=verbose unicall
+
+=head2 Global options:
+
+=over 4
+
+=item -V
+
+Version -- print version string and exit.
+
+=item -v
+
+Verbose -- sets the C<'verbose'> option for all generators.
+
+=item -F
+
+Freepbx -- sets the C<'freepbx'> option for all generators.
+Currently, zapata is affected.
+
+
+=back
+
+=head2 Implementation notes:
+
+=over 4
-Configuration for asterisk(1). It should be included in the main /etc/asterisk/zapata.conf.
-It's location may be overriden by the environment variable ZAPATA_FILE.
+=item *
-=item users - /etc/asterisk/users.conf
+F<genconf_parameters> parsing is done via C<Zaptel::Config::Params>.
+An object representing the parsed data is instanciated by:
+C<Zaptel::Config::Params-E<gt>new()>.
+The C<item()> method of this object contains all the hard coded
+defaults of the configuration directives.
-Configuration for asterisk(1) and AsteriskGUI.
-It's location may be overriden by the environment variable USERS_FILE.
+=item *
-=item zapataconf - /etc/asterisk/zapata.conf
+A configuration object is instanciated by C<Zaptel::Config::Gen-E<gt>new($params)>.
+The mapping of configuration directives into semantic configuration is
+done in the constructor.
-Configuration for asterisk(1) and AsteriskGUI.
-It's location may be overriden by the environment variable ZAPATACONF_FILE.
+=item *
+A single generator is run via the the C<run_generator()> method of the
+configuration object.
=back
diff --git a/kernel/xpp/utils/zaptel_drivers b/kernel/xpp/utils/zaptel_drivers
index d7904c0..5ace08b 100755
--- a/kernel/xpp/utils/zaptel_drivers
+++ b/kernel/xpp/utils/zaptel_drivers
@@ -3,7 +3,156 @@ use strict;
use File::Basename;
BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
+use Errno;
+use Getopt::Std;
use Zaptel::Hardware;
+my %opts;
+my $etc_modules = '/etc/modules';
+my $zaptel_redhat = '/etc/sysconfig/zaptel';
+my $zaptel_debian = '/etc/default/zaptel';
+my $zaptel_conffile;
+
+getopts('vdM', \%opts) || die "$0: Bad options\n";
+
+if(-f $zaptel_redhat) {
+ $zaptel_conffile = $zaptel_redhat;
+} elsif(-f $zaptel_debian) {
+ $zaptel_conffile = $zaptel_debian;
+ $opts{'d'} = 1 if $opts{'M'};
+} else {
+ die "$0: Could not find '$zaptel_redhat' nor '$zaptel_debian'\n";
+}
+
my $hardware = Zaptel::Hardware->scan;
-print join("\n", $hardware->drivers),"\n";
+
+sub update_zaptel_distro(@) {
+ my @driver_list = @_;
+ my $varname = 'MODULES';
+ my $newfile = "${zaptel_conffile}.new";
+ my $backupfile = "${zaptel_conffile}.bak";
+
+ print "Updating $zaptel_conffile\n" if $opts{'v'};
+ open(NEWFILE, ">$newfile") || die "$0: Failed to open '$newfile': $!\n";
+ open(BACKUPFILE, ">$backupfile") || die "$0: Failed to open '$backupfile': $!\n";
+ if(open(IN, $zaptel_conffile)) {
+ while(my $line = <IN>) {
+ print BACKUPFILE $line;
+ chomp $line;
+ next if $line =~ /^${varname}=/; # Skip old defs.
+ print NEWFILE "$line\n";
+ }
+ close IN;
+ } elsif(defined($!{ENOENT})) {
+ print "Creating $zaptel_conffile\n" if $opts{'v'};
+ } else {
+ die "$0: Failed opening '$zaptel_conffile': $!\n";
+ }
+ print NEWFILE "${varname}='@driver_list'\n";
+ close NEWFILE;
+ close BACKUPFILE;
+ rename($newfile, $zaptel_conffile) ||
+ die "$0: rename($newfile, $zaptel_conffile) failed: $!\n";
+}
+
+# This is for Debian.
+sub update_etc_modules(@) {
+ my @driver_list = @_;
+ my $newfile = "${etc_modules}.new";
+ my $backupfile = "${etc_modules}.bak";
+ # Just to make module loading order deterministic.
+ my @module_order = qw(
+ wct4xxp
+ wcte12xp
+ wcte11xp
+ wct1xxp
+ wanpipe
+ tor2
+ torisa
+ qozap
+ vzaphfc
+ zaphfc
+ ztgsm
+ wctdm24xxp
+ wctdm
+ opvxa1200
+ wcfxo
+ pciradio
+ wcusb
+ xpp_usb
+ ystdm8xx
+ zma8xx
+ );
+
+ open(NEWFILE, ">$newfile") || die "$0: Failed to open '$newfile': $!\n";
+ open(BACKUPFILE, ">$backupfile") || die "$0: Failed to open '$backupfile': $!\n";
+ if(open(IN, $etc_modules)) {
+ print "Updating $etc_modules\n" if $opts{'v'};
+ while(my $line = <IN>) {
+ print BACKUPFILE $line;
+ chomp $line;
+ next if grep(/^\s*${line}\s*$/, @module_order, @driver_list);
+ print NEWFILE "$line\n";
+ }
+ close IN;
+ } elsif(defined($!{ENOENT})) {
+ print "Creating $etc_modules\n" if $opts{'v'};
+ } else {
+ die "$0: Failed opening '$etc_modules': $!\n";
+ }
+ foreach my $d (@module_order) {
+ print NEWFILE "$d\n" if grep($d eq $_, @driver_list);
+ }
+ close NEWFILE;
+ close BACKUPFILE;
+ rename($newfile, $etc_modules) ||
+ die "$0: rename($newfile, $etc_modules) failed: $!\n";
+}
+
+if($opts{'d'}) {
+ update_etc_modules($hardware->drivers);
+}
+if($opts{'M'}) {
+ update_zaptel_distro($hardware->drivers);
+}
+
+if(!$opts{'d'} && !$opts{'M'}) {
+ print join("\n", $hardware->drivers),"\n";
+}
+
+__END__
+
+=head1 NAME
+
+zaptel_drivers - Show drivers required for installed zaptel devices.
+
+=head1 SYNOPSIS
+
+zaptel_drivers [-vdM]
+
+=head1 DESCRIPTION
+
+This script shows by default the list of drivers required for currently
+installed zaptel devices.
+
+Options:
+
+=over 4
+
+=item -v
+
+Verbose
+
+=item -d
+
+Generate /etc/modules for Debian systems.
+
+=item -M
+
+Generate distribution dependent module configuration file:
+ /etc/sysconfig/zaptel # For RedHat like systems
+ /etc/default/zaptel # For Debian like systems
+
+On debian systems, specifying this option turns on the '-d' option as well.
+
+=back
diff --git a/kernel/xpp/utils/zconf/Zaptel.pm b/kernel/xpp/utils/zconf/Zaptel.pm
index 431689e..1b73d5b 100644
--- a/kernel/xpp/utils/zconf/Zaptel.pm
+++ b/kernel/xpp/utils/zconf/Zaptel.pm
@@ -25,7 +25,7 @@ hardware and loaded Zaptel devices.
my @spans = Zaptel::spans();
for my $span (@spans) {
next if ($span->is_digital);
- $span->num. " - [". $span->type ."] ". $span->name. "\n";
+ $span->num. " - [". $span->type ."] ". $span->name. "\n";
for my $chan ($span->chans) {
print " - ".$chan->num . " - [". $chan->type. "] ". $chan->fqn". \n";
}
diff --git a/kernel/xpp/utils/zconf/Zaptel/Chans.pm b/kernel/xpp/utils/zconf/Zaptel/Chans.pm
index 53ed277..aa58d1d 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Chans.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Chans.pm
@@ -149,18 +149,19 @@ sub new($$$$$$) {
# WP[TE]1: Sangoma. TODO: this one tells us if it is TE or NT.
# cwain: Junghanns E1 card.
$type = "PRI";
- } elsif ($fqn =~ m{\b(ZTHFC%d*|ztqoz\d*)/.*}) {
+ } elsif ($fqn =~ m{\b(B4|ZTHFC\d*|ztqoz\d*)/.*}) {
+ # B4: The Digium wcb4xxp ZAPTEL driver
# ZTHFC: HFC-s single-port card (zaphfc/vzaphfc)
# ztqoz: qozap (Junghanns) multi-port HFC card
$type = "BRI";
} elsif ($fqn =~ m{\bztgsm/.*}) {
# Junghanns GSM card
$type = "GSM";
- } elsif(defined $signalling) {
+ } elsif($signalling ne '') {
$type = 'FXO' if $signalling =~ /^FXS/;
$type = 'FXS' if $signalling =~ /^FXO/;
} else {
- $type = undef;
+ $type = $self->probe_type();
}
$self->type($type);
$self->span()->type($type)
@@ -216,8 +217,7 @@ sub battery($) {
my $self = shift or die;
my $span = $self->span or die;
- return undef if (not defined $self->type);
- return undef unless $self->type eq 'FXO';
+ return undef unless defined $self->type && $self->type eq 'FXO';
return $self->{BATTERY} if defined $self->{BATTERY};
my $xpd = $span->xpd;
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm
index 360ca0a..9a3dec9 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Defaults.pm
@@ -1,4 +1,16 @@
package Zaptel::Config::Defaults;
+
+#
+# !!!! DEPRECATION WARNING!!!
+#
+# This module is used by older versions of init_card_* scripts and
+# their related drivers.
+#
+# Zaptel drivers *after* 1.4.12.1 and DAHDI drivers do not use it.
+# Their configuration is read via XppConfig.pm which is always
+# bundled with the init_card_* scripts.
+#
+
#
# Written by Oron Peled <oron@actcom.co.il>
# Copyright (C) 2007, Xorcom
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Gen.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Gen.pm
new file mode 100644
index 0000000..05bb9be
--- /dev/null
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Gen.pm
@@ -0,0 +1,212 @@
+package Zaptel::Config::Gen;
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2009, Xorcom
+# This program is free software; you can redistribute and/or
+# modify it under the same terms as Perl itself.
+#
+# $Id$
+#
+
+=head1 NAME
+
+Zaptel::Config::Gen -- Wrapper class for configuration generators.
+
+=head1 SYNOPSIS
+
+ use Zaptel::Config::Gen qw(is_true);
+ my $params = Zaptel::Config::Params->new('the-config-file');
+ my $gconfig = Zaptel::Config::Gen->new($params);
+ my $num = $gconfig->{'base_exten'};
+ my $overlap = is_true($gconfig->{'brint_overlap'});
+ $gconfig->dump; # For debugging
+ $gconfig->run_generator('system', {}, @spans);
+
+=head1 DESCRIPTION
+
+The constructor must be given an C<Zaptel::Config::Params> object.
+The returned object contains all data required for generation in the
+form of a hash.
+
+The constructor maps the C<item()>s from the parameter object into semantic
+configuration keys. E.g: the C<lc_country> item is mapped to C<loadzone> and
+C<defaultzone> keys.
+
+The actual generation is done by delegation to one of the generators.
+This is done via the C<run_generator()> method which receive the
+generator name, a generator specific options hash and a list of
+span objects (from C<Zaptel::Span>) for which to generate configuration.
+
+This module contains few helper functions. E.g: C<is_true()>, C<bchan_range()>.
+
+=cut
+
+require Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(is_true);
+
+use strict;
+
+# Parse values as true/false
+sub is_true($) {
+ my $val = shift;
+ return undef unless defined $val;
+ return $val =~ /^(1|y|yes)$/i;
+}
+
+# Generate channel range strings from span objects
+# E.g: "63-77,79-93"
+sub bchan_range($) {
+ my $span = shift || die;
+ my $first_chan = ($span->chans())[0];
+ my $first_num = $first_chan->num();
+ my $range_start = $first_num;
+ my @range;
+ my $prev = undef;
+
+ die unless $span->is_digital();
+ foreach my $c (@{$span->bchan_list()}) {
+ my $curr = $c + $first_num;
+ if(!defined($prev)) {
+ $prev = $curr;
+ } elsif($curr != $prev + 1) {
+ push(@range, sprintf("%d-%d", $range_start, $prev));
+ $range_start = $curr;
+ }
+ $prev = $curr;
+ }
+ if($prev >= $first_num) {
+ push(@range, sprintf("%d-%d", $range_start, $prev));
+ }
+ return join(',', @range);
+}
+
+sub new($) {
+ my $pack = shift || die "$0: Missing package argument";
+ my $p = shift || die "$0: Missing parameters argument";
+
+ # Set defaults
+ my $fxs_default_start = $p->item('fxs_default_start');
+ my $fxo_default_start = $p->item('fxo_default_start');
+
+ my %default_context = (
+ FXO => $p->item('context_lines'),
+ FXS => $p->item('context_phones'),
+ IN => $p->item('context_input'),
+ OUT => $p->item('context_output'),
+ BRI_TE => $p->item('context_lines'),
+ BRI_NT => $p->item('context_phones'),
+ E1_TE => $p->item('context_lines'),
+ T1_TE => $p->item('context_lines'),
+ J1_TE => $p->item('context_lines'),
+ E1_NT => $p->item('context_phones'),
+ T1_NT => $p->item('context_phones'),
+ J1_NT => $p->item('context_phones'),
+ );
+ my %default_group = (
+ FXO => $p->item('group_lines'),
+ FXS => $p->item('group_phones'),
+ IN => '',
+ OUT => '',
+ BRI_TE => $p->item('group_lines'),
+ BRI_NT => $p->item('group_lines'),
+ E1_TE => $p->item('group_lines'),
+ T1_TE => $p->item('group_lines'),
+ J1_TE => $p->item('group_lines'),
+ E1_NT => $p->item('group_lines'),
+ T1_NT => $p->item('group_lines'),
+ J1_NT => $p->item('group_lines'),
+ );
+ my %default_zaptel_signalling = (
+ FXO => "fxs$fxo_default_start",
+ FXS => "fxo$fxs_default_start",
+ IN => "fxo$fxs_default_start",
+ OUT => "fxo$fxs_default_start",
+ );
+ my %default_zapata_signalling = (
+ FXO => "fxs_$fxo_default_start",
+ FXS => "fxo_$fxs_default_start",
+ IN => "fxo_$fxs_default_start",
+ OUT => "fxo_$fxs_default_start",
+ );
+
+ # First complex mapping
+ my $gconfig = {
+ PARAMETERS => $p,
+ 'loadzone' => $p->item('lc_country'),
+ 'defaultzone' => $p->item('lc_country'),
+ 'context' => \%default_context,
+ 'group' => \%default_group,
+ 'zaptel_signalling' => \%default_zaptel_signalling,
+ 'zapata_signalling' => \%default_zapata_signalling,
+ };
+ # Now add trivial mappings
+ my @trivial = qw(
+ base_exten
+ freepbx
+ fxs_immediate
+ bri_hardhdlc
+ bri_sig_style
+ r2_idle_bits
+ brint_overlap
+ pri_termtype
+ pri_connection_type
+ );
+ foreach my $k (@trivial) {
+ $gconfig->{$k} = $p->item($k);
+ }
+ bless $gconfig,$pack;
+
+ return $gconfig;
+}
+
+sub run_generator($$@) {
+ my $gconfig = shift || die;
+ my $name = shift || die "$0: Missing generator name argument";
+ my $genopts = shift || die "$0: Missing genopts argument";
+ ref($genopts) eq 'HASH' or die "$0: Bad genopts argument";
+ my @spans = @_;
+
+ my $module = "Zaptel::Config::Gen::$name";
+ #print STDERR "DEBUG: $module\n";
+ eval "use $module";
+ if($@) {
+ die "Failed to load configuration generator for '$name'\n";
+ }
+ my $cfg = $module->new($gconfig, $genopts);
+ $cfg->generate(@spans);
+}
+
+sub dump($) {
+ my $self = shift || die;
+ printf STDERR "%s dump:\n", ref $self;
+ my $width = 30;
+ foreach my $k (sort keys %$self) {
+ my $val = $self->{$k};
+ my $ref = ref $val;
+ #print STDERR "DEBUG: '$k', '$ref', '$val'\n";
+ if($ref eq '') {
+ printf STDERR "%-${width}s %s\n", $k, $val;
+ } elsif($ref eq 'SCALAR') {
+ printf STDERR "%-${width}s %s\n", $k, ${$val};
+ } elsif($ref eq 'ARRAY') {
+ #printf STDERR "%s:\n", $k;
+ my $i = 0;
+ foreach my $v (@{$val}) {
+ printf STDERR "%-${width}s %s\n", "$k\->[$i]", $v;
+ $i++;
+ }
+ } elsif($ref eq 'HASH') {
+ #printf STDERR "%s:\n", $k;
+ foreach my $k1 (keys %{$val}) {
+ printf STDERR "%-${width}s %s\n", "$k\->\{$k1\}", ${$val}{$k1};
+ }
+ } else {
+ printf STDERR "%-${width}s (-> %s)\n", $k, $ref;
+ }
+ }
+}
+
+
+1;
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Unicall.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Unicall.pm
new file mode 100644
index 0000000..3e1048d
--- /dev/null
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Unicall.pm
@@ -0,0 +1,70 @@
+package Zaptel::Config::Gen::Unicall;
+use strict;
+
+use Zaptel::Config::Gen qw(is_true);
+
+sub new($$$) {
+ my $pack = shift || die;
+ my $gconfig = shift || die;
+ my $genopts = shift || die;
+ my $file = $ENV{UNICALL_CHANNELS_FILE} || "/etc/asterisk/unicall-channels.conf";
+ my $self = {
+ FILE => $file,
+ GCONFIG => $gconfig,
+ GENOPTS => $genopts,
+ };
+ bless $self, $pack;
+ return $self;
+}
+
+sub generate($) {
+ my $self = shift || die;
+ my $file = $self->{FILE};
+ my $gconfig = $self->{GCONFIG};
+ my $genopts = $self->{GENOPTS};
+ #$gconfig->dump;
+ my @spans = @_;
+ warn "Empty configuration -- no spans\n" unless @spans;
+ die "Only for R2" unless $gconfig->{'pri_connection_type'} eq 'R2';
+ rename "$file", "$file.bak"
+ or $! == 2 # ENOENT (No dependency on Errno.pm)
+ or die "Failed to backup old config: $!\n";
+ print "Generating $file\n" if $genopts->{verbose};
+ open(F, ">$file") || die "$0: Failed to open $file: $!\n";
+ my $old = select F;
+ printf "; Autogenerated by %s on %s -- do not hand edit\n", $0, scalar(localtime);
+ print "; This file should be #included in unicall.conf\n\n";
+ foreach my $span (@spans) {
+ next unless $span->is_digital();
+ printf "; Span %d: %s %s\n", $span->num, $span->name, $span->description;
+ my $idle_bits = $gconfig->{'r2_idle_bits'};
+ printf "protocolend=%s\n", ($span->termtype() eq 'TE') ? 'cpe' : 'co';
+ printf "channel=%s\n", Zaptel::Config::Gen::bchan_range($span);
+ print "\n";
+ }
+ close F;
+ select $old;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+unicall - Generate configuration for unicall channels.
+
+=head1 SYNOPSIS
+
+ use Zaptel::Config::Gen::Unicall;
+
+ my $cfg = new Zaptel::Config::Gen::Unicall(\%global_config, \%genopts);
+ $cfg->generate(@span_list);
+
+=head1 DESCRIPTION
+
+Generate the F</etc/asterisk/unicall-channels.conf> to be included in
+F</etc/asterisk/unicall.conf>
+
+Its location may be overriden via the environment variable
+C<UNICALL_CHANNELS_FILE>.
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Users.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Users.pm
new file mode 100644
index 0000000..7c9e937
--- /dev/null
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Users.pm
@@ -0,0 +1,177 @@
+package Zaptel::Config::Gen::Users;
+use strict;
+
+use File::Basename;
+use Zaptel::Config::Gen qw(is_true);
+
+sub new($$$) {
+ my $pack = shift || die;
+ my $gconfig = shift || die;
+ my $genopts = shift || die;
+ my $file = $ENV{USERS_FILE} || "/etc/asterisk/users.conf";
+ my $self = {
+ FILE => $file,
+ GCONFIG => $gconfig,
+ GENOPTS => $genopts,
+ };
+ bless $self, $pack;
+ return $self;
+}
+
+sub gen_channel($) {
+ my $self = shift || die;
+ my $chan = shift || die;
+ my $gconfig = $self->{GCONFIG};
+ my $type = $chan->type;
+ my $num = $chan->num;
+ die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
+ my $exten = $gconfig->{'base_exten'} + $num;
+ my $sig = $gconfig->{'zapata_signalling'}{$type};
+ my $full_name = "$type $num";
+
+ die "missing default_zapata_signalling for chan #$num type $type" unless $sig;
+ print << "EOF";
+[$exten]
+callwaiting = yes
+context = numberplan-custom-1
+fullname = $full_name
+cid_number = $exten
+hasagent = no
+hasdirectory = no
+hasiax = no
+hasmanager = no
+hassip = no
+hasvoicemail = yes
+host = dynamic
+mailbox = $exten
+threewaycalling = yes
+vmsecret = 1234
+secret = 1234
+signalling = $sig
+zapchan = $num
+registeriax = no
+registersip = no
+canreinvite = no
+nat = no
+dtmfmode = rfc2833
+disallow = all
+allow = all
+
+EOF
+}
+
+# generate users.conf . The specific users.conf is strictly oriented
+# towards using with the asterisk-gui .
+#
+# This code could have generated a much simpler and smaller
+# configuration file, had there been minimal level of support for
+# configuration templates in the asterisk configuration rewriting. Right
+# now Asterisk's configuration rewriting simply freaks out in the face
+# of templates: http://bugs.digium.com/11442 .
+sub generate($) {
+ my $self = shift || die;
+ my $file = $self->{FILE};
+ my $gconfig = $self->{GCONFIG};
+ my $genopts = $self->{GENOPTS};
+ #$gconfig->dump;
+ my @spans = @_;
+ warn "Empty configuration -- no spans\n" unless @spans;
+ rename "$file", "$file.bak"
+ or $! == 2 # ENOENT (No dependency on Errno.pm)
+ or die "Failed to backup old config: $!\n";
+ print "Generating $file\n" if $genopts->{verbose};
+ open(F, ">$file") || die "$0: Failed to open $file: $!\n";
+ my $old = select F;
+ print <<"HEAD";
+;!
+;! Automatically generated configuration file
+;! Filename: @{[basename($file)]} ($file)
+;! Generator: $0
+;! Creation Date: @{[scalar(localtime)]}
+;!
+[general]
+;
+; Full name of a user
+;
+fullname = New User
+;
+; Starting point of allocation of extensions
+;
+userbase = @{[$gconfig->{'base_exten'}+1]}
+;
+; Create voicemail mailbox and use use macro-stdexten
+;
+hasvoicemail = yes
+;
+; Set voicemail mailbox @{[$gconfig->{'base_exten'}+1]} password to 1234
+;
+vmsecret = 1234
+;
+; Create SIP Peer
+;
+hassip = no
+;
+; Create IAX friend
+;
+hasiax = no
+;
+; Create Agent friend
+;
+hasagent = no
+;
+; Create H.323 friend
+;
+;hash323 = yes
+;
+; Create manager entry
+;
+hasmanager = no
+;
+; Remaining options are not specific to users.conf entries but are general.
+;
+callwaiting = yes
+threewaycalling = yes
+callwaitingcallerid = yes
+transfer = yes
+canpark = yes
+cancallforward = yes
+callreturn = yes
+callgroup = 1
+pickupgroup = 1
+localextenlength = @{[length($gconfig->{'base_exten'})]}
+
+
+HEAD
+ foreach my $span (@spans) {
+ next unless grep { $_ eq $span->type} ( 'FXS', 'IN', 'OUT' );
+ printf "; Span %d: %s %s\n", $span->num, $span->name, $span->description;
+ foreach my $chan ($span->chans()) {
+ $self->gen_channel($chan);
+ }
+ print "\n";
+ }
+ close F;
+ select $old;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+users - Generate configuration for users.conf.
+
+=head1 SYNOPSIS
+
+ use Zaptel::Config::Gen::Users;
+
+ my $cfg = new Zaptel::Config::Gen::Users(\%global_config, \%genopts);
+ $cfg->generate(@span_list);
+
+=head1 DESCRIPTION
+
+Generate the F</etc/asterisk/users.conf> which is used by asterisk(1)
+and AsteriskGUI.
+
+Its location may be overriden via the environment variable F<USERS_FILE>.
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zapata.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zapata.pm
new file mode 100644
index 0000000..e8fd733
--- /dev/null
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zapata.pm
@@ -0,0 +1,213 @@
+package Zaptel::Config::Gen::Zapata;
+use strict;
+
+use Zaptel::Config::Gen qw(is_true);
+
+sub new($$$) {
+ my $pack = shift || die;
+ my $gconfig = shift || die;
+ my $genopts = shift || die;
+ my $file = $ENV{ZAPATA_FILE} || "/etc/asterisk/zapata-channels.conf";
+ my $self = {
+ FILE => $file,
+ GCONFIG => $gconfig,
+ GENOPTS => $genopts,
+ };
+ bless $self, $pack;
+ return $self;
+}
+
+# Since zapata definitions "leak" to the next ones, we try
+# To reset some important definitions to their chan_zap defaults.
+my %chan_zap_defaults = (
+ context => 'default',
+ group => '63', # FIXME: should not be needed.
+ overlapdial => 'no',
+ busydetect => 'no',
+ rxgain => 0,
+ txgain => 0,
+);
+
+sub reset_zapata_values {
+ foreach my $arg (@_) {
+ if (exists $chan_zap_defaults{$arg}) {
+ print "$arg = $chan_zap_defaults{$arg}\n";
+ } else {
+ print "$arg =\n";
+ }
+ }
+}
+
+sub gen_digital($$) {
+ my $self = shift || die;
+ my $span = shift || die;
+ my $gconfig = $self->{GCONFIG};
+ my $num = $span->num() || die;
+ die "Span #$num is analog" unless $span->is_digital();
+ if($span->is_pri && $gconfig->{'pri_connection_type'} eq 'R2') {
+ printf "; Skipped: $gconfig->{'pri_connection_type'}\n\n";
+ return;
+ }
+ my $type = $span->type() || die "$0: Span #$num -- unkown type\n";
+ my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
+ my $group = $gconfig->{'group'}{"$type"};
+ my $context = $gconfig->{'context'}{"$type"};
+ my @to_reset = qw/context group/;
+
+ die "$0: missing default group (termtype=$termtype)\n" unless defined($group);
+ die "$0: missing default context\n" unless $context;
+
+ my $sig = $span->signalling || die "missing signalling info for span #$num type $type";
+ grep($gconfig->{'bri_sig_style'} eq $_, 'bri', 'bri_ptmp', 'pri') or die "unknown signalling style for BRI";
+ if($span->is_bri() and $gconfig->{'bri_sig_style'} eq 'bri_ptmp') {
+ $sig .= '_ptmp';
+ }
+ if ($span->is_bri() && $termtype eq 'NT' && is_true($gconfig->{'brint_overlap'})) {
+ print "overlapdial = yes\n";
+ push(@to_reset, qw/overlapdial/);
+ }
+
+ $group .= "," . (10 + $num); # Invent unique group per span
+ printf "group=$group\n";
+ printf "context=$context\n";
+ printf "switchtype = %s\n", $span->switchtype;
+ printf "signalling = %s\n", $sig;
+ printf "channel => %s\n", Zaptel::Config::Gen::bchan_range($span);
+ reset_zapata_values(@to_reset);
+}
+
+sub gen_channel($$) {
+ my $self = shift || die;
+ my $chan = shift || die;
+ my $gconfig = $self->{GCONFIG};
+ my $type = $chan->type;
+ my $num = $chan->num;
+ die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
+ my $exten = $gconfig->{'base_exten'} + $num;
+ my $sig = $gconfig->{'zapata_signalling'}{$type};
+ my $context = $gconfig->{'context'}{$type};
+ my $group = $gconfig->{'group'}{$type};
+ my $callerid;
+ my $immediate;
+
+ return if $type eq 'EMPTY';
+ die "missing default_zapata_signalling for chan #$num type $type" unless $sig;
+ $callerid = ($type eq 'FXO')
+ ? 'asreceived'
+ : sprintf "\"Channel %d\" <%04d>", $num, $exten;
+ if($type eq 'IN') {
+ $immediate = 'yes';
+ }
+ # FIXME: $immediage should not be set for 'OUT' channels, but meanwhile
+ # it's better to be compatible with genzaptelconf
+ $immediate = 'yes' if $gconfig->{'fxs_immediate'} eq 'yes' and $sig =~ /^fxo_/;
+ my $signalling = $chan->signalling;
+ $signalling = " " . $signalling if $signalling;
+ my $info = $chan->info;
+ $info = " " . $info if $info;
+ printf ";;; line=\"%d %s%s%s\"\n", $num, $chan->fqn, $signalling, $info;
+ printf "signalling=$sig\n";
+ printf "callerid=$callerid\n";
+ printf "mailbox=%04d\n", $exten unless $type eq 'FXO';
+ if(defined $group) {
+ printf "group=$group\n";
+ }
+ printf "context=$context\n";
+ printf "immediate=$immediate\n" if defined $immediate;
+ printf "channel => %d\n", $num;
+ # Reset following values to default
+ printf "callerid=\n";
+ printf "mailbox=\n" unless $type eq 'FXO';
+ if(defined $group) {
+ printf "group=\n";
+ }
+ printf "context=default\n";
+ printf "immediate=no\n" if defined $immediate;
+ print "\n";
+}
+
+sub generate($) {
+ my $self = shift || die;
+ my $file = $self->{FILE};
+ my $gconfig = $self->{GCONFIG};
+ my $genopts = $self->{GENOPTS};
+ #$gconfig->dump;
+ my @spans = @_;
+ warn "Empty configuration -- no spans\n" unless @spans;
+ rename "$file", "$file.bak"
+ or $! == 2 # ENOENT (No dependency on Errno.pm)
+ or die "Failed to backup old config: $!\n";
+ print "Generating $file\n" if $genopts->{verbose};
+ open(F, ">$file") || die "$0: Failed to open $file: $!\n";
+ my $old = select F;
+ printf "; Autogenerated by %s on %s -- do not hand edit\n", $0, scalar(localtime);
+ print <<"HEAD";
+; Zaptel Channels Configurations (zapata.conf)
+;
+; This is not intended to be a complete zapata.conf. Rather, it is intended
+; to be #include-d by /etc/zapata.conf that will include the global settings
+;
+
+HEAD
+ foreach my $span (@spans) {
+ printf "; Span %d: %s %s\n", $span->num, $span->name, $span->description;
+ if($span->is_digital()) {
+ $self->gen_digital($span);
+ } else {
+ foreach my $chan ($span->chans()) {
+ if(is_true($genopts->{'freepbx'}) || is_true($gconfig->{'freepbx'})) {
+ # Freepbx has its own idea about channels
+ my $type = $chan->type;
+ if($type eq 'FXS' || $type eq 'OUT' || $type eq 'IN') {
+ printf "; Skip channel=%s($type) -- freepbx option.\n",
+ $chan->num;
+ next;
+ }
+ }
+ $self->gen_channel($chan);
+ }
+ }
+ print "\n";
+ }
+ close F;
+ select $old;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+zapata - Generate configuration for zapata channels.
+
+=head1 SYNOPSIS
+
+ use Zaptel::Config::Gen::Zapata;
+
+ my $cfg = new Zaptel::Config::Gen::Zapata(\%global_config, \%genopts);
+ $cfg->generate(@span_list);
+
+=head1 DESCRIPTION
+
+Generate the F</etc/asterisk/zapata-channels.conf>
+This is used as a configuration for asterisk(1).
+It should be included in the main F</etc/asterisk/zapata.conf>.
+
+Its location may be overriden via the environment variable
+C<ZAPATA_FILE>.
+
+=head1 OPTIONS
+
+=over 4
+
+=item freepbx
+
+With this option we do not generate channel definitions for FXS, Input and
+Output ports. This is done because these channel definitions need to be
+generated and inserted into I<freepbx> database anyway.
+
+=back
+
+The I<freepbx> option may be activated also by adding a C<freepbx yes> line
+to the C<genconf_parameters> file.
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zaptel.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zaptel.pm
new file mode 100644
index 0000000..2c30c33
--- /dev/null
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Gen/Zaptel.pm
@@ -0,0 +1,158 @@
+package Zaptel::Config::Gen::Zaptel;
+use strict;
+
+use Zaptel::Config::Gen qw(is_true);
+
+sub new($$$) {
+ my $pack = shift || die;
+ my $gconfig = shift || die;
+ my $genopts = shift || die;
+ my $file = $ENV{ZAPCONF_FILE} || "/etc/zaptel.conf";
+ my $self = {
+ FILE => $file,
+ GCONFIG => $gconfig,
+ GENOPTS => $genopts,
+ };
+ bless $self, $pack;
+ return $self;
+}
+
+my $bri_te_last_timing = 1;
+
+sub gen_digital($$) {
+ my $gconfig = shift || die;
+ my $span = shift || die;
+ my $num = $span->num() || die;
+ die "Span #$num is analog" unless $span->is_digital();
+ my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
+ my $timing;
+ my $lbo = 0;
+ my $framing = $span->framing() || die "$0: No framing information for span #$num\n";
+ my $coding = $span->coding() || die "$0: No coding information for span #$num\n";
+ my $span_crc4 = $span->crc4();
+ $span_crc4 = (defined $span_crc4) ? ",$span_crc4" : '';
+ my $span_yellow = $span->yellow();
+ $span_yellow = (defined $span_yellow) ? ",$span_yellow" : '';
+ # "MFC/R2 does not normally use CRC4"
+ # FIXME: a finer way to override:
+ if ($gconfig->{'pri_connection_type'} eq 'R2') {
+ $span_crc4 = '';
+ $framing = 'cas';
+ }
+ my $dchan_type = 'dchan';
+ if ($span->is_bri() && is_true($gconfig->{'bri_hardhdlc'})) {
+ $dchan_type = 'hardhdlc';
+ }
+
+ $timing = ($termtype eq 'NT') ? 0 : $bri_te_last_timing++;
+ printf "span=%d,%d,%d,%s,%s%s%s\n",
+ $num,
+ $timing,
+ $lbo,
+ $framing,
+ $coding,
+ $span_crc4,
+ $span_yellow;
+ printf "# termtype: %s\n", lc($termtype);
+ if ($gconfig->{'pri_connection_type'} eq 'PRI') {
+ printf "bchan=%s\n", Zaptel::Config::Gen::bchan_range($span);
+ my $dchan = $span->dchan();
+ printf "$dchan_type=%d\n", $dchan->num();
+ } elsif ($gconfig->{'pri_connection_type'} eq 'R2' ) {
+ my $idle_bits = $gconfig->{'r2_idle_bits'};
+ printf "cas=%s:$idle_bits\n", Zaptel::Config::Gen::bchan_range($span);
+ printf "dchan=%d\n", $span->dchan()->num();
+ }
+}
+
+sub gen_signalling($$) {
+ my $gconfig = shift || die;
+ my $chan = shift || die;
+ my $type = $chan->type;
+ my $num = $chan->num;
+
+ die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
+ if($type eq 'EMPTY') {
+ printf "# channel %d, %s, no module.\n", $num, $chan->fqn;
+ return;
+ }
+ my $signalling = $gconfig->{'zaptel_signalling'};
+ my $sig = $signalling->{$type} || die "unknown default zaptel signalling for chan $num type $type";
+ if ($type eq 'IN') {
+ printf "# astbanktype: input\n";
+ } elsif ($type eq 'OUT') {
+ printf "# astbanktype: output\n";
+ }
+ printf "$sig=$num\n";
+}
+
+sub generate($$$) {
+ my $self = shift || die;
+ my $file = $self->{FILE};
+ my $gconfig = $self->{GCONFIG};
+ my $genopts = $self->{GENOPTS};
+ my @spans = @_;
+ warn "Empty configuration -- no spans\n" unless @spans;
+ rename "$file", "$file.bak"
+ or $! == 2 # ENOENT (No dependency on Errno.pm)
+ or die "Failed to backup old config: $!\n";
+ #$gconfig->dump;
+ print "Generating $file\n" if $genopts->{verbose};
+ open(F, ">$file") || die "$0: Failed to open $file: $!\n";
+ my $old = select F;
+ printf "# Autogenerated by %s on %s -- do not hand edit\n", $0, scalar(localtime);
+ print <<"HEAD";
+# Zaptel Configuration File
+#
+# This file is parsed by the Zaptel Configurator, ztcfg
+#
+HEAD
+ foreach my $span (@spans) {
+ printf "# Span %d: %s %s\n", $span->num, $span->name, $span->description;
+ if($span->is_digital()) {
+ gen_digital($gconfig, $span);
+ } else {
+ foreach my $chan ($span->chans()) {
+ if(1 || !defined $chan->type) {
+ my $type = $chan->probe_type;
+ my $num = $chan->num;
+ die "Failed probing type for channel $num"
+ unless defined $type;
+ $chan->type($type);
+ }
+ gen_signalling($gconfig, $chan);
+ }
+ }
+ print "\n";
+ }
+ print <<"TAIL";
+# Global data
+
+loadzone = $gconfig->{'loadzone'}
+defaultzone = $gconfig->{'defaultzone'}
+TAIL
+ close F;
+ select $old;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+zaptel - Generate configuration for zaptel drivers.
+
+=head1 SYNOPSIS
+
+ use Zaptel::Config::Gen::Zaptel;
+
+ my $cfg = new Zaptel::Config::Gen::Zaptel(\%global_config, \%genopts);
+ $cfg->generate(@span_list);
+
+=head1 DESCRIPTION
+
+Generate the F</etc/zaptel.conf>.
+This is the configuration for ztcfg(1).
+
+Its location may be overriden via the environment variable F<ZAPCONF_FILE>.
diff --git a/kernel/xpp/utils/zconf/Zaptel/Config/Params.pm b/kernel/xpp/utils/zconf/Zaptel/Config/Params.pm
new file mode 100644
index 0000000..7f6ae80
--- /dev/null
+++ b/kernel/xpp/utils/zconf/Zaptel/Config/Params.pm
@@ -0,0 +1,149 @@
+package Zaptel::Config::Params;
+#
+# Written by Oron Peled <oron@actcom.co.il>
+# Copyright (C) 2009, Xorcom
+# This program is free software; you can redistribute and/or
+# modify it under the same terms as Perl itself.
+#
+# $Id$
+#
+use strict;
+
+=head1 NAME
+
+Zaptel::Config::Params -- Object oriented representation of F<genconf_parameters> file.
+
+=head1 SYNOPSIS
+
+ use Zaptel::Config::Params;
+ my $params = Zaptel::Config::Params->new('the-config-file');
+ print $params->item{'some-key'};
+ $params->dump; # For debugging
+
+=head1 DESCRIPTION
+
+The constructor must be given a configuration file name:
+
+=over 4
+
+=item * Missing file is B<not> an error.
+
+=item * Other opening errors cause a C<die> to be thrown.
+
+=item * The file name is saved as the value of C<GENCONF_FILE> key.
+
+=back
+
+The access to config keys should only be done via the C<item()> method:
+
+=over 4
+
+=item * It contains all hard-coded defaults.
+
+=item * All these values are overriden by directives in the config file.
+
+=back
+
+=cut
+
+sub new($$) {
+ my $pack = shift || die;
+ my $cfg_file = shift || die;
+ my $self = {
+ GENCONF_FILE => $cfg_file,
+ };
+ bless $self, $pack;
+ if(!open(F, $cfg_file)) {
+ if(defined($!{ENOENT})) {
+ #print STDERR "No $cfg_file. Assume empty config\n";
+ return $self; # Empty configuration
+ }
+ die "$pack: Failed to open '$cfg_file': $!\n";
+ }
+ #print STDERR "$pack: $cfg_file\n";
+ my $array_key;
+ while(<F>) {
+ my ($key, $val);
+ chomp;
+ s/#.*$//;
+ s/\s+$//; # trim tail whitespace
+ next unless /\S/;
+ if(defined $array_key && /^\s+/) {
+ s/^\s+//; # trim beginning whitespace
+ push(@{$self->{$array_key}}, $_);
+ next;
+ }
+ undef $array_key;
+ ($key, $val) = split(/\s+/, $_, 2);
+ $key = lc($key);
+ if(! defined $val) {
+ $array_key = $key;
+ next;
+ }
+ die "$cfg_file:$.: Duplicate key '$key'\n", if exists $self->{$key};
+ $self->{$key} = $val;
+ }
+ close F;
+ return $self;
+}
+
+sub item($$) {
+ my $self = shift || die;
+ my $key = shift || die;
+ my %defaults = (
+ base_exten => '4000',
+ freepbx => 'no', # Better via -F command line
+ fxs_immediate => 'no',
+ fxs_default_start => 'ks',
+ fxo_default_start => 'ks',
+ lc_country => 'us',
+ context_lines => 'from-pstn',
+ context_phones => 'from-internal',
+ context_input => 'astbank-input',
+ context_output => 'astbank-output',
+ group_phones => '5',
+ group_lines => '0',
+ brint_overlap => 'no',
+ bri_sig_style => 'bri_ptmp',
+ echo_can => 'mg2',
+ bri_hardhdlc => 'no',
+ pri_connection_type => 'PRI',
+ r2_idle_bits => '1101',
+ 'pri_termtype' => [ 'SPAN/* TE' ],
+ );
+
+ return (exists($self->{$key})) ? $self->{$key} :$defaults{$key};
+}
+
+sub dump($) {
+ my $self = shift || die;
+ printf STDERR "%s dump:\n", ref $self;
+ my $width = 30;
+ foreach my $k (sort keys %$self) {
+ my $val = $self->{$k};
+ my $ref = ref $val;
+ #print STDERR "DEBUG: '$k', '$ref', '$val'\n";
+ if($ref eq '') {
+ printf STDERR "%-${width}s %s\n", $k, $val;
+ } elsif($ref eq 'SCALAR') {
+ printf STDERR "%-${width}s %s\n", $k, ${$val};
+ } elsif($ref eq 'ARRAY') {
+ #printf STDERR "%s:\n", $k;
+ my $i = 0;
+ foreach my $v (@{$val}) {
+ printf STDERR "%-${width}s %s\n", "$k\->[$i]", $v;
+ $i++;
+ }
+ } elsif($ref eq 'HASH') {
+ #printf STDERR "%s:\n", $k;
+ foreach my $k1 (keys %{$val}) {
+ printf STDERR "%-${width}s %s\n", "$k\->\{$k1\}", ${$val}{$k1};
+ }
+ } else {
+ printf STDERR "%-${width}s (-> %s)\n", $k, $ref;
+ }
+ }
+}
+
+1;
+
diff --git a/kernel/xpp/utils/zconf/Zaptel/Hardware/PCI.pm b/kernel/xpp/utils/zconf/Zaptel/Hardware/PCI.pm
index c03b0d1..e9166c7 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Hardware/PCI.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Hardware/PCI.pm
@@ -84,10 +84,13 @@ my %pci_ids = (
'd161:8000' => { DRIVER => 'wcte12xp', DESCRIPTION => 'Wildcard TE121' },
'd161:8001' => { DRIVER => 'wcte12xp', DESCRIPTION => 'Wildcard TE122' },
+ # from wcb4xxp
+ 'd161:b410' => { DRIVER => 'wcb4xxp', DESCRIPTION => 'Digium Wildcard B410P' },
+
# from tor2
'10b5:9030' => { DRIVER => 'tor2', DESCRIPTION => 'PLX 9030' },
'10b5:3001' => { DRIVER => 'tor2', DESCRIPTION => 'PLX Development Board' },
- '10b5:D00D' => { DRIVER => 'tor2', DESCRIPTION => 'Tormenta 2 Quad T1/PRI or E1/PRA' },
+ '10b5:d00d' => { DRIVER => 'tor2', DESCRIPTION => 'Tormenta 2 Quad T1/PRI or E1/PRA' },
'10b5:4000' => { DRIVER => 'tor2', DESCRIPTION => 'Tormenta 2 Quad T1/E1 (non-Digium clone)' },
# Cologne Chips:
@@ -97,6 +100,8 @@ my %pci_ids = (
'1397:16b8' => { DRIVER => 'qozap', DESCRIPTION => 'Junghanns OctoBRI ISDN card' },
'1397:30b1' => { DRIVER => 'cwain', DESCRIPTION => 'HFC-E1 ISDN E1 card' },
'1397:2bd0' => { DRIVER => 'zaphfc', DESCRIPTION => 'HFC-S ISDN BRI card' },
+ # Has three submodels. Tested with 0675:1704:
+ '1043:0675' => { DRIVER => 'zaphfc', DESCRIPTION => 'ASUSTeK Computer Inc. ISDNLink P-IN100-ST-D' },
'1397:f001' => { DRIVER => 'ztgsm', DESCRIPTION => 'HFC-GSM Cologne Chips GSM' },
# Rhino cards (based on pci.ids)
diff --git a/kernel/xpp/utils/zconf/Zaptel/Span.pm b/kernel/xpp/utils/zconf/Zaptel/Span.pm
index be49c28..c771a26 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Span.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Span.pm
@@ -133,12 +133,13 @@ my @bri_strings = (
'BRI_(NT|TE)',
'(?:quad|octo)BRI PCI ISDN Card.* \[(NT|TE)\]\ ',
'octoBRI \[(NT|TE)\] ',
- 'HFC-S PCI A ISDN.* \[(NT|TE)\] '
+ 'HFC-S PCI A ISDN.* \[(NT|TE)\] ',
+ '(B4XXP) \(PCI\) Card', # Does not expose NT/TE type
);
my @pri_strings = (
- '(E1|T1|J1)_(NT|TE)',
'Tormenta 2 .*Quad (E1|T1)', # tor2.
+ 'Xorcom XPD.*: (E1|T1)', # Astribank PRI
'Digium Wildcard .100P (T1|E1)/', # wct1xxp
'ISA Tormenta Span 1', # torisa
'TE110P T1/E1', # wcte11xp
@@ -189,10 +190,12 @@ sub new($$) {
$self->{IS_PRI} = 0;
foreach my $cardtype (@bri_strings) {
if($head =~ m/$cardtype/) {
+ my $termtype = $1;
+ $termtype = 'TE' if ( $1 eq 'B4XXP' );
$self->{IS_DIGITAL} = 1;
$self->{IS_BRI} = 1;
- $self->{TERMTYPE} = $1;
- $self->{TYPE} = "BRI_$1";
+ $self->{TERMTYPE} = $termtype;
+ $self->{TYPE} = "BRI_$termtype";
$self->{DCHAN_IDX} = 2;
$self->{BCHAN_LIST} = [ 0, 1 ];
last;
@@ -207,7 +210,7 @@ sub new($$) {
my ($proto) = grep(/(E1|T1|J1)/, @info);
$proto = 'UNKNOWN' unless defined $proto;
my ($termtype) = grep(/(NT|TE)/, @info);
- $termtype = 'TE' unless defined $termtype;
+ $termtype = 'UNKNOWN' unless defined $termtype;
$self->{IS_DIGITAL} = 1;
$self->{IS_PRI} = 1;
@@ -216,8 +219,6 @@ sub new($$) {
last;
}
}
- die "$0: Unkown TERMTYPE [NT/TE]\n"
- if $self->is_digital and !defined $self->{TERMTYPE};
($self->{NAME}, $self->{DESCRIPTION}) = (split(/\s+/, $head, 4))[2, 3];
$self->{IS_ZAPTEL_SYNC_MASTER} =
($self->{DESCRIPTION} =~ /\(MASTER\)/) ? 1 : 0;
@@ -262,7 +263,7 @@ sub new($$) {
# Infer some info from channel name:
my $first_chan = ($self->chans())[0] || die "$0: No channels in span #$num\n";
my $chan_fqn = $first_chan->fqn();
- if($chan_fqn =~ m(ZTHFC.*/|ztqoz.*/|XPP_BRI_.*/)) { # BRI
+ if($chan_fqn =~ m(ZTHFC.*/|ztqoz.*/|XPP_BRI_.*|B4/.*)) { # BRI
$self->{FRAMING} = 'ccs';
$self->{SWITCHTYPE} = 'euroisdn';
$self->{SIGNALLING} = ($self->{TERMTYPE} eq 'NT') ? $ZAPBRI_NET : $ZAPBRI_CPE ;
@@ -286,7 +287,6 @@ sub new($$) {
} else {
die "'$self->{PROTO}' unsupported yet";
}
- $self->{SIGNALLING} = ($self->{TERMTYPE} eq 'NT') ? $ZAPPRI_NET : $ZAPPRI_CPE ;
}
return $self;
}
@@ -297,4 +297,57 @@ sub bchans($) {
return @{$self->{BCHANS}};
}
+sub set_termtype($$) {
+ my $span = shift || die;
+ my $termtype = shift || die;
+ $span->{TERMTYPE} = $termtype;
+ $span->{SIGNALLING} = ($termtype eq 'NT') ? $ZAPPRI_NET : $ZAPPRI_CPE ;
+ $span->{TYPE} = $span->proto . "_$termtype";
+}
+
+sub pri_set_fromconfig($$) {
+ my $span = shift || die;
+ my $genconf = shift || die;
+ my $name = $span->name;
+# if(defined $termtype) {
+# die "Termtype for $name already defined as $termtype\n";
+# }
+ my $pri_termtype = $genconf->{pri_termtype};
+ my @pri_specs;
+ if(defined $pri_termtype) {
+ @pri_specs = @{$pri_termtype};
+ }
+ push(@pri_specs , 'SPAN/* TE'); # Default
+ my @patlist = ( "SPAN/" . $span->num );
+ my ($xbus_name, $xpd_name) = ($name =~ m|(XBUS-\d+)/(XPD-\d+)|);
+ if(defined $xbus_name) {
+ push(@patlist, "NUM/$xbus_name/$xpd_name");
+# push(@patlist, "CONNECTOR/$ENV{XBUS_CONNECTOR}/$xpd_name");
+ }
+ #print STDERR "PATLIST=@patlist\n";
+ my $match_termtype;
+SPEC:
+ for(my $i = 0; $i < @pri_specs; $i++) {
+ my $spec = $pri_specs[$i];
+ #print STDERR "spec: $spec\n";
+ my ($match, $termtype) = split(/\s+/, $spec);
+ next unless defined $match and defined $termtype;
+ # Convert "globs" to regex
+ $match =~ s/\*/.*/g;
+ $match =~ s/\?/./g;
+ #print STDERR "match: $match\n";
+ foreach my $pattern (@patlist) {
+ #print STDERR "testmatch: $pattern =~ $match\n";
+ if($pattern =~ $match) {
+ #print STDERR "$xpd_name: MATCH '$pattern' ~ '$match' termtype=$termtype\n";
+ $match_termtype = $termtype;
+ last SPEC;
+ }
+ }
+ }
+ die "Unknown pri_termtype" unless defined $match_termtype;
+ $span->set_termtype($match_termtype);
+}
+
+
1;
diff --git a/kernel/xpp/utils/zconf/Zaptel/Xpp.pm b/kernel/xpp/utils/zconf/Zaptel/Xpp.pm
index 8b7458f..b626bfa 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Xpp.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Xpp.pm
@@ -30,6 +30,9 @@ Zaptel::Xpp - Perl interface to the Xorcom Astribank drivers.
my $proc_base = "/proc/xpp";
+our $sysfs_astribanks = "/sys/bus/astribanks/devices";
+our $sysfs_xpds = "/sys/bus/xpds/devices";
+our $sysfs_ab_driver = "/sys/bus/astribanks/drivers/xppdrv";
# Nominal sorters for xbuses
sub by_name {
@@ -46,12 +49,46 @@ sub by_label {
return $a->connector cmp $b->connector;
}
+sub score_type {
+ my $score;
+
+ return 1 if grep(/\b[ETJ]1/, @_);
+ return 2 if grep(/\bBRI/, @_);
+ return 3 if grep(/\bFXO/, @_);
+ return 4; # FXS
+}
+
+sub by_type {
+ my @a_types = map { $_->type } $a->xpds();
+ my @b_types = map { $_->type } $b->xpds();
+ my $res;
+
+ my $a_score = score_type(@a_types);
+ my $b_score = score_type(@b_types);
+ #printf STDERR "DEBUG-a: %s %s %s\n", $a->name, $a_score, join(',',@a_types);
+ #printf STDERR "DEBUG-b: %s %s %s\n", $b->name, $b_score, join(',',@b_types);
+ $res = $a_score <=> $b_score;
+ $res = $a->connector cmp $b->connector if $res == 0;
+ return $res;
+}
+
+
=head1 xbuses([sort_order])
Scans system (/proc and /sys) and returns a list of Astribank (Xbus)
objects. The optional parameter sort_order is the order in which
the Astribanks will be returns:
+
+=head1 sorters([sort_order])
+
+With no parameters, returns the names of built in sorters.
+With a single parameter, returns a reference to the requested built in sorter.
+Also, for convenience, a reference to a custom sorter function may be passed
+and returned as is.
+
+The built in sorters are:
+
=over
=item SORT_CONNECTOR
@@ -63,13 +100,20 @@ the device through controllers, hubs etc.
Sorts by the label of the Astribank. The label field is unique to the
Astribank. It can also be viewed through 'lsusb -v' without the drivers
-loaded (the iSerial field in the Device Descriptor).
+loaded (the iSerial field in the Device Descriptor). This is normally
+relieble, but some older Astribanks have an empty label.
=item SORT_NAME
Sort by the "name". e.g: "XBUS-00". The order of Astribank names depends
on the load order, and hence may change between different runs.
+=item SORT_TYPE
+
+Sort by XPD types. First Astribanks with E1/T1/J1 XPDs, then with BRI,
+then with FXO, then ones with only FXS ports. Within each type they
+are sorted by the connector field (as in SORT_CONNECTOR above).
+
=item custom function
Instead of using a predefined sorter, you can pass your own sorting
@@ -79,39 +123,36 @@ function. See the example sorters in the code of this module.
=cut
+sub sorters {
+ my %sorter_table = (
+ SORT_CONNECTOR => \&by_connector,
+ SORT_NAME => \&by_name,
+ SORT_LABEL => \&by_label,
+ SORT_TYPE => \&by_type,
+ # Aliases
+ connector => \&by_connector,
+ name => \&by_name,
+ label => \&by_label,
+ type => \&by_type,
+ );
+ my $which_sorter = shift || return sort keys %sorter_table;
+ return $which_sorter if ref($which_sorter) eq 'CODE';
+ return $sorter_table{$which_sorter};
+}
+
sub xbuses {
my $optsort = shift || 'SORT_CONNECTOR';
my @xbuses;
- -d "$proc_base" or return ();
- my @lines;
- local $/ = "\n";
- open(F, "$proc_base/xbuses") ||
- die "$0: Failed to open $proc_base/xbuses: $!\n";
- @lines = <F>;
- close F;
- foreach my $line (@lines) {
- chomp $line;
- my ($name, @attr) = split(/\s+/, $line);
- $name =~ s/://;
- $name =~ /XBUS-(\d\d)/ or die "Bad XBUS number: $name";
- my $num = $1;
- @attr = map { split(/=/); } @attr;
- my $xbus = Zaptel::Xpp::Xbus->new(NAME => $name, NUM => $num, @attr);
+ opendir(D, $sysfs_astribanks) || return();
+ while(my $entry = readdir D) {
+ next unless $entry =~ /xbus-(\d+)/;
+ my $xbus = Zaptel::Xpp::Xbus->new($1);
push(@xbuses, $xbus);
}
- my $sorter;
- if($optsort eq "SORT_CONNECTOR") {
- $sorter = \&by_connector;
- } elsif($optsort eq "SORT_NAME") {
- $sorter = \&by_name;
- } elsif($optsort eq "SORT_LABEL") {
- $sorter = \&by_label;
- } elsif(ref($optsort) eq 'CODE') {
- $sorter = $optsort;
- } else {
- die "Unknown optional sorter '$optsort'";
- }
+ closedir D;
+ my $sorter = sorters($optsort);
+ die "Unknown optional sorter '$optsort'" unless defined $sorter;
@xbuses = sort $sorter @xbuses;
return @xbuses;
}
@@ -137,7 +178,7 @@ For more information read that file and see README.Astribank .
=cut
-sub sync {
+sub sync_via_proc {
my $newsync = shift;
my $result;
my $newapi = 0;
@@ -171,6 +212,32 @@ sub sync {
return $result;
}
+sub sync {
+ my ($newsync) = @_;
+ my $result;
+ my $file = "$sysfs_ab_driver/sync";
+ if(! -f $file) { # Old /proc interface
+ return sync_via_proc(@_);
+ }
+ open(F, "$file") or die "Failed to open $file for reading: $!";
+ $result = <F>;
+ close F;
+ chomp $result;
+ $result =~ s/^SYNC=\D*//;
+ if(defined $newsync) { # Now change
+ $newsync =~ s/.*/\U$&/;
+ if($newsync =~ /^(\d+)$/) {
+ $newsync = "SYNC=$1";
+ } elsif($newsync ne 'ZAPTEL') {
+ die "Bad sync parameter '$newsync'";
+ }
+ open(F, ">$file") or die "Failed to open $file for writing: $!";
+ print F $newsync;
+ close(F) or die "Failed in closing $file: $!";
+ }
+ return $result;
+}
+
=head1 SEE ALSO
=over
diff --git a/kernel/xpp/utils/zconf/Zaptel/Xpp/Line.pm b/kernel/xpp/utils/zconf/Zaptel/Xpp/Line.pm
index 2472c3b..895e4f2 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Xpp/Line.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Xpp/Line.pm
@@ -10,8 +10,6 @@ package Zaptel::Xpp::Line;
use strict;
use Zaptel::Utils;
-my $proc_base = "/proc/xpp";
-
sub new($$$) {
my $pack = shift or die "Wasn't called as a class method\n";
my $xpd = shift or die;
@@ -28,30 +26,15 @@ sub blink($$) {
my $self = shift;
my $on = shift;
my $xpd = $self->xpd;
- my $result;
-
- my $file = "$proc_base/" . $xpd->fqn . "/blink";
- die "$file is missing" unless -f $file;
- # First query
- open(F, "$file") or die "Failed to open $file for reading: $!";
- $result = <F>;
- chomp $result;
- close F;
+ my $result = $xpd->xpd_getattr("blink");
+ $result = hex($result);
if(defined($on)) { # Now change
my $onbitmask = 1 << $self->index;
my $offbitmask = $result & ~$onbitmask;
$result = $offbitmask;
$result |= $onbitmask if $on;
- open(F, ">$file") or die "Failed to open $file for writing: $!";
- print F "$result";
- if(!close(F)) {
- if($! == 17) { # EEXISTS
- # good
- } else {
- undef $result;
- }
- }
+ $result = $xpd->xpd_setattr("blink", $result);
}
return $result;
}
@@ -67,25 +50,36 @@ sub create_all($$) {
push(@lines, $line);
}
$xpd->{LINES} = \@lines;
- my ($infofile) = glob "$procdir/*_info";
- die "Failed globbing '$procdir/*_info'" unless defined $infofile;
- my $type = $xpd->type;
- open(F, "$infofile") || die "Failed opening '$infofile': $!";
- my $battery_info = 0;
- while (<F>) {
- chomp;
- if($type eq 'FXO') {
- $battery_info = 1 if /^Battery:/;
- if($battery_info && s/^\s*on\s*:\s*//) {
- my @batt = split;
- foreach my $l (@lines) {
- die unless @batt;
- my $state = shift @batt;
- $l->{BATTERY} = ($state eq '+') ? 1 : 0;
+ if($xpd->type eq 'FXO') {
+ my $battery = $xpd->xpd_getattr("fxo_battery");
+ if(defined $battery) {
+ my @batt = split(/\s+/, $battery);
+ foreach my $l (@lines) {
+ die unless @batt;
+ my $state = shift @batt;
+ $l->{BATTERY} = ($state eq '+') ? 1 : 0;
+ }
+ } else {
+ # Fallback to old interface
+ my ($infofile) = glob "$procdir/*_info";
+ die "Failed globbing '$procdir/*_info'" unless defined $infofile;
+ open(F, "$infofile") || die "Failed opening '$infofile': $!";
+ my $battery_info = 0;
+ while (<F>) {
+ chomp;
+ $battery_info = 1 if /^Battery:/;
+ if($battery_info && s/^\s*on\s*:\s*//) {
+ my @batt = split;
+ foreach my $l (@lines) {
+ die unless @batt;
+ my $state = shift @batt;
+ $l->{BATTERY} = ($state eq '+') ? 1 : 0;
+ }
+ $battery_info = 0;
+ die if @batt;
}
- $battery_info = 0;
- die if @batt;
}
+ close F;
}
}
close F;
diff --git a/kernel/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm b/kernel/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
index e840f14..f87e2aa 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
@@ -40,49 +40,135 @@ sub get_xpd_by_number($$) {
my $xbus = shift;
my $xpdid = shift;
die "Missing XPD id parameter" unless defined $xpdid;
+ $xpdid = sprintf("%02d", $xpdid);
my @xpds = $xbus->xpds;
my ($wanted) = grep { $_->id eq $xpdid } @xpds;
return $wanted;
}
+my %file_warned; # Prevent duplicate warnings about same file.
+
+sub xbus_attr_path($$) {
+ my ($busnum, @attr) = @_;
+ foreach my $attr (@attr) {
+ my $file = sprintf "$Zaptel::Xpp::sysfs_astribanks/xbus-%02d/$attr", $busnum;
+ unless(-f $file) {
+ my $procfile = sprintf "/proc/xpp/XBUS-%02d/$attr", $busnum;
+ warn "$0: warning - OLD DRIVER: missing '$file'. Fall back to '$procfile'\n"
+ unless $file_warned{$attr}++;
+ $file = $procfile;
+ }
+ next unless -f $file;
+ return $file;
+ }
+ return undef;
+}
+
+sub xbus_getattr($$) {
+ my $xbus = shift || die;
+ my $attr = shift || die;
+ $attr = lc($attr);
+ my $file = xbus_attr_path($xbus->num, lc($attr));
+
+ open(F, $file) || die "Failed opening '$file': $!";
+ my $val = <F>;
+ close F;
+ chomp $val;
+ return $val;
+}
+
+sub read_attrs() {
+ my $xbus = shift || die;
+ my @attrnames = qw(CONNECTOR LABEL STATUS);
+ my @attrs;
+
+ foreach my $attr (@attrnames) {
+ my $val = xbus_getattr($xbus, $attr);
+ if($attr eq 'STATUS') {
+ # Some values are in all caps as well
+ $val = uc($val);
+ } elsif($attr eq 'LABEL') {
+ # Fix badly burned labels.
+ $val =~ s/[[:^print:]]/_/g;
+ }
+ $xbus->{$attr} = $val;
+ }
+}
+
+sub read_xpdnames_old($) {
+ my $xbus_num = shift || die;
+ my $pat = sprintf "/proc/xpp/XBUS-%02d/XPD-[0-9][0-9]", $xbus_num;
+ my @xpdnames;
+
+ #print STDERR "read_xpdnames_old($xbus_num): $pat\n";
+ foreach (glob $pat) {
+ die "Bad /proc entry: '$_'" unless /^.*XPD-([0-9])([0-9])$/;
+ my $name = sprintf("%02d:%1d:%1d", $xbus_num, $1, $2);
+ #print STDERR "\t> $_ ($name)\n";
+ push(@xpdnames, $name);
+ }
+ return @xpdnames;
+}
+
+sub read_xpdnames($) {
+ my $xbus_num = shift || die;
+ my $xbus_dir = "$Zaptel::Xpp::sysfs_astribanks/xbus-$xbus_num";
+ my $pat = sprintf "%s/xbus-%02d/[0-9][0-9]:[0-9]:[0-9]", $Zaptel::Xpp::sysfs_astribanks, $xbus_num;
+ my @xpdnames;
+
+ #print STDERR "read_xpdnames($xbus_num): $pat\n";
+ foreach (glob $pat) {
+ die "Bad /sys entry: '$_'" unless m/^.*\/([0-9][0-9]):([0-9]):([0-9])$/;
+ my ($busnum, $unit, $subunit) = ($1, $2, $3);
+ my $name = sprintf("%02d:%1d:%1d", $1, $2, $3);
+ #print STDERR "\t> $_ ($name)\n";
+ push(@xpdnames, $name);
+ }
+ return @xpdnames;
+}
+
+my $warned_notransport = 0;
+
sub new($$) {
my $pack = shift or die "Wasn't called as a class method\n";
- my $self = {};
+ my $num = shift;
+ my $xbus_dir = "$Zaptel::Xpp::sysfs_astribanks/xbus-$num";
+ my $self = {
+ NUM => $num,
+ NAME => "XBUS-$num",
+ SYSFS_DIR => $xbus_dir,
+ };
bless $self, $pack;
- while(@_) {
- my ($k, $v) = @_;
- shift; shift;
- # Keys in all caps
- $k = uc($k);
- # Some values are in all caps as well
- if($k =~ /^(STATUS)$/) {
- $v = uc($v);
+ $self->read_attrs;
+ # Get transport related info
+ my $transport = "$xbus_dir/transport";
+ my ($usbdev) = glob("$transport/usb_device:*");
+ if(defined $usbdev) { # It's USB
+ if($usbdev =~ /.*usb_device:usbdev(\d+)\.(\d+)/) {
+ my $busnum = $1;
+ my $devnum = $2;
+ #printf STDERR "DEBUG: %03d/%03d\n", $busnum, $devnum;
+ $self->{USB_DEVNAME} = sprintf("%03d/%03d", $busnum, $devnum);
+ } else {
+ warn "Bad USB transport='$transport' usbdev='$usbdev'\n";
}
- $self->{$k} = $v;
- }
- # backward compat for drivers without labels.
- if(!defined $self->{LABEL}) {
- $self->{LABEL} = '[]';
}
- $self->{LABEL} =~ s/^\[(.*)\]$/$1/ or die "$self->{NAME}: Bad label";
- # Fix badly burned labels.
- $self->{LABEL} =~ s/[[:^print:]]/_/g;
- $self->{NAME} or die "Missing xbus name";
- my $prefix = "$proc_base/" . $self->{NAME};
- my $usbfile = "$prefix/xpp_usb";
- if(open(F, "$usbfile")) {
- my $head = <F>;
- chomp $head;
- close F;
- $head =~ s/^device: +([^, ]+)/$1/i or die;
- $self->{USB_DEVNAME} = $head;
+ my @xpdnames;
+ my @xpds;
+ if(-e $transport) {
+ @xpdnames = read_xpdnames($num);
+ } else {
+ @xpdnames = read_xpdnames_old($num);
+ warn "$0: warning - OLD DRIVER: missing '$transport'. Fall back to /proc\n"
+ unless $warned_notransport++;
}
- @{$self->{XPDS}} = ();
- foreach my $dir (glob "$prefix/XPD-??") {
- my $xpd = Zaptel::Xpp::Xpd->new($self, $dir);
- push(@{$self->{XPDS}}, $xpd);
+ foreach my $xpdstr (@xpdnames) {
+ my ($busnum, $unit, $subunit) = split(/:/, $xpdstr);
+ my $procdir = "/proc/xpp/XBUS-$busnum/XPD-$unit$subunit";
+ my $xpd = Zaptel::Xpp::Xpd->new($self, $unit, $subunit, $procdir, "$xbus_dir/$xpdstr");
+ push(@xpds, $xpd);
}
- @{$self->{XPDS}} = sort { $a->id <=> $b->id } @{$self->{XPDS}};
+ @{$self->{XPDS}} = sort { $a->id <=> $b->id } @xpds;
return $self;
}
diff --git a/kernel/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm b/kernel/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
index 1ddb5c8..30a0bad 100644
--- a/kernel/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
+++ b/kernel/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
@@ -12,31 +12,127 @@ use Zaptel::Utils;
use Zaptel::Xpp;
use Zaptel::Xpp::Line;
-my $proc_base = "/proc/xpp";
+my %file_warned; # Prevent duplicate warnings about same file.
-sub blink($$) {
- my $self = shift;
- my $on = shift;
- my $result;
+sub xpd_attr_path($@) {
+ my $self = shift || die;
+ my ($busnum, $unitnum, $subunitnum, @attr) = (
+ $self->xbus->num,
+ $self->unit,
+ $self->subunit,
+ @_);
+ foreach my $attr (@attr) {
+ my $file = sprintf "$Zaptel::Xpp::sysfs_xpds/%02d:%1d:%1d/$attr",
+ $busnum, $unitnum, $subunitnum;
+ unless(-f $file) {
+ my $procfile = sprintf "/proc/xpp/XBUS-%02d/XPD-%1d%1d/$attr",
+ $busnum, $unitnum, $subunitnum;
+ warn "$0: warning - OLD DRIVER: missing '$file'. Fall back to /proc\n"
+ unless $file_warned{$attr}++;
+ $file = $procfile;
+ }
+ next unless -f $file;
+ return $file;
+ }
+ return undef;
+}
- my $file = "$proc_base/" . $self->fqn . "/blink";
- die "$file is missing" unless -f $file;
- # First query
- open(F, "$file") or die "Failed to open $file for reading: $!";
- $result = <F>;
- chomp $result;
+# Backward compat plug for old /proc interface...
+sub xpd_old_gettype($) {
+ my $xpd = shift || die;
+ my $summary = "/proc/xpp/" . $xpd->fqn . "/summary";
+ open(F, $summary) or die "Failed to open '$summary': $!";
+ my $head = <F>;
close F;
- if(defined($on) and $on ne $result) { # Now change
- open(F, ">$file") or die "Failed to open $file for writing: $!";
- print F ($on)?"0xFFFF":"0";
- if(!close(F)) {
- if($! == 17) { # EEXISTS
- # good
- } else {
- undef $result;
- }
+ chomp $head;
+ $head =~ s/^XPD-\d+\s+\(//;
+ $head =~ s/,.*//;
+ return $head;
+}
+
+sub xpd_old_getspan($) {
+ my $xpd = shift || die;
+ my $zt_registration = "/proc/xpp/" . $xpd->fqn . "/zt_registration";
+ open(F, $zt_registration) or die "Failed to open '$zt_registration': $!";
+ my $head = <F>;
+ close F;
+ chomp $head;
+ return $head;
+}
+
+sub xpd_old_getoffhook($) {
+ my $xpd = shift || die;
+ my $summary = "/proc/xpp/" . $xpd->fqn . "/summary";
+ my $channels;
+
+ local $/ = "\n";
+ open(F, "$summary") || die "Failed opening $summary: $!\n";
+ my $head = <F>;
+ chomp $head; # "XPD-00 (BRI_TE ,card present, span 3)"
+ my $offhook;
+ while(<F>) {
+ chomp;
+ if(s/^\s*offhook\s*:\s*//) {
+ s/\s*$//;
+ $offhook = $_;
+ $offhook || die "No channels in '$summary'";
+ last;
}
}
+ close F;
+ return $offhook;
+}
+
+my %attr_missing_warned; # Prevent duplicate warnings
+
+sub xpd_getattr($$) {
+ my $xpd = shift || die;
+ my $attr = shift || die;
+ $attr = lc($attr);
+ my $file = $xpd->xpd_attr_path(lc($attr));
+
+ # Handle special cases for backward compat
+ return xpd_old_gettype($xpd) if $attr eq 'type' and !defined $file;
+ return xpd_old_getspan($xpd) if $attr eq 'span' and !defined $file;
+ return xpd_old_getoffhook($xpd) if $attr eq 'offhook' and !defined $file;
+ if(!defined($file)) {
+ warn "$0: xpd_getattr($attr) -- Missing attribute.\n" if
+ $attr_missing_warned{$attr};
+ return undef;
+ }
+ open(F, $file) || return undef;
+ my $val = <F>;
+ close F;
+ chomp $val;
+ return $val;
+}
+
+sub xpd_setattr($$$) {
+ my $xpd = shift || die;
+ my $attr = shift || die;
+ my $val = shift;
+ $attr = lc($attr);
+ my $file = xpd_attr_path($xpd, $attr);
+ my $oldval = $xpd->xpd_getattr($attr);
+ open(F, ">$file") or die "Failed to open $file for writing: $!";
+ print F "$val";
+ if(!close(F)) {
+ if($! == 17) { # EEXISTS
+ # good
+ } else {
+ return undef;
+ }
+ }
+ return $oldval;
+}
+
+sub blink($$) {
+ my $self = shift;
+ my $on = shift;
+ my $result = $self->xpd_getattr("blink");
+ if(defined($on)) { # Now change
+ $self->xpd_setattr("blink", ($on)?"0xFFFF":"0");
+ }
return $result;
}
@@ -44,8 +140,7 @@ sub zt_registration($$) {
my $self = shift;
my $on = shift;
my $result;
-
- my $file = "$proc_base/" . $self->fqn . "/zt_registration";
+ my $file = $self->xpd_attr_path("span", "zt_registration");
die "$file is missing" unless -f $file;
# First query
open(F, "$file") or die "Failed to open $file for reading: $!";
@@ -77,47 +172,86 @@ sub xpds_by_spanno() {
return @idx;
}
-sub new($$) {
+sub new($$$$$) {
my $pack = shift or die "Wasn't called as a class method\n";
my $xbus = shift || die;
+ my $unit = shift; # May be zero
+ my $subunit = shift; # May be zero
my $procdir = shift || die;
- my $self = {};
+ my $sysfsdir = shift || die;
+ my $self = {
+ XBUS => $xbus,
+ ID => "$unit$subunit",
+ FQN => $xbus->name . "/" . "XPD-$unit$subunit",
+ UNIT => $unit,
+ SUBUNIT => $subunit,
+ DIR => $procdir,
+ SYSFS_DIR => $sysfsdir,
+ };
bless $self, $pack;
- $self->{XBUS} = $xbus;
- $self->{DIR} = $procdir;
- local $/ = "\n";
- open(F, "$procdir/summary") || die "Missing summary file in $procdir";
- my $head = <F>;
- chomp $head; # "XPD-00 (BRI_TE ,card present, span 3)"
- # The driver does not export the number of channels...
- # Let's find it indirectly
- while(<F>) {
- chomp;
- if(s/^\s*offhook\s*:\s*//) {
- my @offhook = split;
- @offhook || die "No channels in '$procdir/summary'";
- $self->{CHANNELS} = @offhook;
- last;
- }
- }
- close F;
- $head =~ s/^(XPD-(\d\d))\s+// || die;
- $self->{ID} = $2;
- $self->{FQN} = $xbus->name . "/" . $1;
- $head =~ s/^.*\(// || die;
- $head =~ s/\) */, / || die;
- $head =~ s/\s*,\s*/,/g || die;
- my ($type,$present,$span,$rest) = split(/,/, $head);
- #warn "Garbage in '$procdir/summary': rest='$rest'\n" if $rest;
- if($span =~ s/span\s+(\d+)//) { # since changeset:5119
- $self->{SPANNO} = $1;
- }
+ my @offhook = split / /, ($self->xpd_getattr('offhook'));
+ $self->{CHANNELS} = @offhook;
+ my $type = $self->xpd_getattr('type');
+ my $span = $self->xpd_getattr('span');
+ $self->{SPANNO} = $span;
$self->{TYPE} = $type;
- $self->{IS_BRI} = ($type =~ /BRI_(NT|TE)/);
- $self->{IS_PRI} = ($type =~ /[ETJ]1_(NT|TE)/);
+ if($type =~ /BRI_(NT|TE)/) {
+ $self->{IS_BRI} = 1;
+ $self->{TERMTYPE} = $1;
+ }
+ $self->{IS_PRI} = ($type =~ /[ETJ]1/);
$self->{IS_DIGITAL} = ( $self->{IS_BRI} || $self->{IS_PRI} );
Zaptel::Xpp::Line->create_all($self, $procdir);
return $self;
}
+#------------------------------------
+# static xpd related helper functions
+#------------------------------------
+
+sub sync_priority_rank($) {
+ my $xpd = shift || die;
+ # The @rank array is ordered by priority of sync (good to bad)
+ my @rank = (
+ ($xpd->is_pri and defined($xpd->termtype) and $xpd->termtype eq 'TE'),
+ ($xpd->is_bri and defined($xpd->termtype) and $xpd->termtype eq 'TE'),
+ ($xpd->is_pri),
+ ($xpd->type eq 'FXO'),
+ ($xpd->is_bri),
+ ($xpd->type eq 'FXS'),
+ );
+ for(my $i = 0; $i < @rank; $i++) {
+ return $i if $rank[$i];
+ }
+ return @rank + 1;
+}
+
+# An XPD sync priority comparator for sort()
+sub sync_priority_compare() {
+ my $rank_a = sync_priority_rank($a);
+ my $rank_b = sync_priority_rank($b);
+ #print STDERR "DEBUG: $rank_a (", $a->fqn, ") $rank_b (", $b->fqn, ")\n";
+ return $a->fqn cmp $b->fqn if $rank_a == $rank_b;
+ return $rank_a <=> $rank_b;
+}
+
+# For debugging: show a list of XPD's with relevant sync info.
+sub show_xpd_rank(@) {
+ print STDERR "XPD's by rank\n";
+ foreach my $xpd (@_) {
+ my $type = $xpd->type;
+ my $rank = sync_priority_rank($xpd);
+ if($xpd->is_digital) {
+ $type .= " (TERMTYPE " . ($xpd->termtype || "UNKNOWN") . ")";
+ }
+ printf STDERR "%3d %-15s %s\n", $rank, $xpd->fqn, $type;
+ }
+}
+
+sub xpds_by_rank(@) {
+ my @xpd_prio = sort sync_priority_compare @_;
+ #show_xpd_rank(@xpd_prio);
+ return @xpd_prio;
+}
+
1;
diff --git a/kernel/xpp/utils/zt_registration b/kernel/xpp/utils/zt_registration
index 3bdc642..4ae5a66 100755
--- a/kernel/xpp/utils/zt_registration
+++ b/kernel/xpp/utils/zt_registration
@@ -15,11 +15,26 @@ use Zaptel;
use Zaptel::Span;
use Zaptel::Xpp;
use Zaptel::Xpp::Xbus;
+use Getopt::Std;
sub usage {
die "Usage: $0 [on|off|1|0]\n";
}
+my %opts;
+getopts('s:', \%opts);
+
+my $sort_order = $opts{s} || $ENV{XBUS_SORT} || 'SORT_CONNECTOR';
+my $sorter = Zaptel::Xpp::sorters($sort_order);
+
+if(!defined $sorter) {
+ my @sorter_names = Zaptel::Xpp::sorters;
+ print STDERR "Unknown sort order $sort_order. Select from:\n\t";
+ print STDERR join("\n\t", @sorter_names);
+ print STDERR "\n";
+ exit 1;
+}
+
@ARGV == 0 or @ARGV == 1 or usage;
my $on = shift;
my $verbose = 0;
@@ -42,7 +57,7 @@ sub myprintf {
my @spans = Zaptel::spans;
-foreach my $xbus (Zaptel::Xpp::xbuses('SORT_CONNECTOR')) {
+foreach my $xbus (Zaptel::Xpp::xbuses($sorter)) {
myprintf "%-10s\t%s\t%s\n", $xbus->name, $xbus->label, $xbus->connector;
next unless $xbus->status eq 'CONNECTED';
foreach my $xpd ($xbus->xpds()) {
@@ -61,6 +76,7 @@ foreach my $xbus (Zaptel::Xpp::xbuses('SORT_CONNECTOR')) {
myprintf "%3s ==> %3s\n", state2str($prev), state2str($on);
}
}
+myprintf "# Sorted: $sort_order\n";
__END__
@@ -70,7 +86,7 @@ zt_registration - Handle registration of Xorcom XPD modules in zaptel.
=head1 SYNOPSIS
-zt_registration [on|off]
+zt_registration [-s sortorder] [on|off]
=head1 DESCRIPTION
@@ -90,25 +106,46 @@ off -- deregisters all XPD's from zaptel.
on -- registers all XPD's to zaptel.
+=head2 Options
+
+=over
+
+=item -s I<sort_order>
+
+The sort order to use.
+
+=back
+
+If the option is not used, the sort order is taken from the environment
+variable XBUS_SORT and failing that: the hard-coded default of
+SORT_CONNECTOR.
+
+The available sorting orders are documented in Zaptel::Xpp manual.
+
+
+
=head2 Sample Output
An example of the output of zt_registration for some registered
Astribanks:
- $ zt_registration
- XBUS-02 [] usb-0000:00:1d.7-4
- XBUS-00/XPD-00: on Span 1
- XBUS-00/XPD-10: on Span 2
- XBUS-00 [usb:00000126] usb-0000:00:1d.7-2
- XBUS-02/XPD-00: on Span 3
- XBUS-02/XPD-10: on Span 4
- XBUS-02/XPD-20: on Span 5
- XBUS-02/XPD-30: on Span 6
- XBUS-01 [usb:00000128] usb-0000:00:1d.7-1
- XBUS-01/XPD-00: on Span 7
- XBUS-01/XPD-10: on Span 8
- XBUS-01/XPD-20: on Span 9
- XBUS-01/XPD-30: on Span 10
+ $ zt_registration -s type
+ XBUS-01 usb:0000153 usb-0000:00:10.4-2
+ XBUS-01/XPD-00: on Span 1
+ XBUS-01/XPD-01: on Span 2
+ XBUS-00 usb:0000157 usb-0000:00:10.4-4
+ XBUS-00/XPD-00: on Span 3
+ XBUS-00/XPD-01: on Span 4
+ XBUS-00/XPD-02: on Span 5
+ XBUS-00/XPD-03: on Span 6
+ XBUS-00/XPD-04: on Span 7
+ XBUS-00/XPD-05: on Span 8
+ XBUS-00/XPD-06: on Span 9
+ XBUS-00/XPD-07: on Span 10
+ XBUS-02 usb-0000:00:10.4-1
+ XBUS-02/XPD-00: on Span 11
+ XBUS-02/XPD-10: on Span 12
+ # Sorted: type
=head1 FILES
diff --git a/kernel/xpp/xbus-core.c b/kernel/xpp/xbus-core.c
index f458896..9a62f94 100644
--- a/kernel/xpp/xbus-core.c
+++ b/kernel/xpp/xbus-core.c
@@ -50,7 +50,9 @@ static const char rcsid[] = "$Id$";
#define INITIALIZATION_TIMEOUT (90*HZ) /* in jiffies */
#define PROC_XBUSES "xbuses"
#define PROC_XBUS_SUMMARY "summary"
+#ifdef OLD_PROC
#define PROC_XBUS_WAITFOR_XPDS "waitfor_xpds"
+#endif
#ifdef PROTOCOL_DEBUG
#define PROC_XBUS_COMMAND "command"
@@ -59,25 +61,41 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
/* Command line parameters */
extern int debug;
+static DEF_PARM(uint, command_queue_length, 800, 0444, "Maximal command queue length");
static DEF_PARM(uint, poll_timeout, 1000, 0644, "Timeout (in jiffies) waiting for units to reply");
static DEF_PARM_BOOL(rx_tasklet, 0, 0644, "Use receive tasklets");
static int xbus_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data);
+#ifdef OLD_PROC
static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count, int *eof, void *data);
-static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, void *priv);
+#endif
+static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, struct device *transport_device, void *priv);
static void transport_destroy(xbus_t *xbus);
/* Data structures */
static spinlock_t xbuses_lock = SPIN_LOCK_UNLOCKED;
-static int bus_count = 0;
static struct proc_dir_entry *proc_xbuses = NULL;
static struct xbus_desc {
xbus_t *xbus;
- atomic_t xbus_refcount;
- wait_queue_head_t can_release_xbus;
} xbuses_array[MAX_BUSES];
+const char *xbus_statename(enum xbus_state st)
+{
+ switch(st) {
+ case XBUS_STATE_START: return "START";
+ case XBUS_STATE_IDLE: return "IDLE";
+ case XBUS_STATE_SENT_REQUEST: return "SENT_REQUEST";
+ case XBUS_STATE_RECVD_DESC: return "RECVD_DESC";
+ case XBUS_STATE_READY: return "READY";
+ case XBUS_STATE_DEACTIVATING: return "DEACTIVATING";
+ case XBUS_STATE_DEACTIVATED: return "DEACTIVATED";
+ case XBUS_STATE_DISCONNECTED: return "DISCONNECTED";
+ case XBUS_STATE_FAIL: return "FAIL";
+ }
+ return NULL;
+}
+
static void init_xbus(uint num, xbus_t *xbus)
{
struct xbus_desc *desc;
@@ -85,72 +103,18 @@ static void init_xbus(uint num, xbus_t *xbus)
BUG_ON(num >= ARRAY_SIZE(xbuses_array));
desc = &xbuses_array[num];
desc->xbus = xbus;
- atomic_set(&desc->xbus_refcount, 0);
- init_waitqueue_head(&desc->can_release_xbus);
-}
-
-static int refcount_xbus(uint num)
-{
- BUG_ON(num >= ARRAY_SIZE(xbuses_array));
- return atomic_read(&xbuses_array[num].xbus_refcount);
}
-xbus_t *get_xbus(uint num)
+xbus_t *xbus_num(uint num)
{
struct xbus_desc *desc;
if(num >= ARRAY_SIZE(xbuses_array))
return NULL;
desc = &xbuses_array[num];
- atomic_inc(&desc->xbus_refcount);
- if(!desc->xbus)
- atomic_dec(&desc->xbus_refcount);
return desc->xbus;
}
-void put_xbus(xbus_t *xbus)
-{
- struct xbus_desc *desc;
- int num;
-
- BUG_ON(!xbus);
- num = xbus->num;
- BUG_ON(num >= ARRAY_SIZE(xbuses_array));
- desc = &xbuses_array[num];
- BUG_ON(desc->xbus != xbus);
- if(atomic_dec_and_test(&desc->xbus_refcount)) {
- static int rate_limit;
-
- if((rate_limit++ % 1003) == 0)
- XBUS_DBG(DEVICES, xbus,
- "wake_up(can_release_xbus) (%d)\n", rate_limit);
- wake_up(&desc->can_release_xbus);
- }
-}
-
-static bool __must_check wait_for_xbus_release(uint xbus_num)
-{
- xbus_t *xbus;
- int ret;
-
- xbus = get_xbus(xbus_num);
- if(!xbus) {
- ERR("%s: xbus #%d is already removed. Skip.\n",
- __FUNCTION__, xbus_num);
- return 0;
- }
- put_xbus(xbus);
- DBG(DEVICES, "Waiting... refcount_xbus=%d\n", refcount_xbus(xbus_num));
- ret = wait_event_interruptible(xbuses_array[xbus_num].can_release_xbus,
- refcount_xbus(xbus_num) == 0);
- if(ret) {
- ERR("%s: waiting for xbus #%d interrupted!!!\n",
- __FUNCTION__, xbus_num);
- } else
- DBG(DEVICES, "Waiting for refcount_xbus done.\n");
- return 1;
-}
-
static void initialize_xbuses_array(void)
{
int i;
@@ -171,6 +135,30 @@ static void finalize_xbuses_array(void)
}
}
+xbus_t *get_xbus(const char *msg, xbus_t *xbus)
+{
+ struct device *dev;
+
+ XBUS_DBG(DEVICES, xbus, "%s: refcount_xbus=%d\n",
+ msg, refcount_xbus(xbus));
+ dev = get_device(&xbus->astribank);
+ return dev_to_xbus(dev);
+}
+
+void put_xbus(const char *msg, xbus_t *xbus)
+{
+ XBUS_DBG(DEVICES, xbus, "%s: refcount_xbus=%d\n",
+ msg, refcount_xbus(xbus));
+ put_device(&xbus->astribank);
+}
+
+int refcount_xbus(xbus_t *xbus)
+{
+ struct kref *kref = &xbus->astribank.kobj.kref;
+
+ return atomic_read(&kref->refcount);
+}
+
/*------------------------- Debugfs Handling -----------------------*/
#ifdef XPP_DEBUGFS
@@ -245,7 +233,7 @@ static struct file_operations debugfs_operations = {
* a bit earlier (2.6.18). If you use such a kernel, Change the
* following test from 2,6,19 to 2,6,18.
*/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
#define I_PRIVATE(inode) ((inode)->u.generic_ip)
#else
#define I_PRIVATE(inode) ((inode)->i_private)
@@ -314,7 +302,7 @@ static int debugfs_release(struct inode *inode, struct file *file)
BUG_ON(!d->xbus);
XBUS_DBG(GENERAL, d->xbus, "\n");
d->xbus->debugfs_data = NULL;
- kfree(d);
+ KZFREE(d);
module_put(THIS_MODULE);
return 0;
}
@@ -455,23 +443,6 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe, i
spin_unlock_irqrestore(&serialize_dump_xframe, flags);
}
-static bool xbus_ready(const xbus_t *xbus, const char msg[])
-{
- if(!xbus) {
- ERR("null xbus: %s\n", msg);
- return 0;
- }
- if (!TRANSPORT_RUNNING(xbus)) {
- XBUS_ERR(xbus, "%s -- hardware is not ready.", msg);
- return 0;
- }
- if(!xbus->transport.ops) {
- XBUS_ERR(xbus, "%s -- hardware is gone.", msg);
- return 0;
- }
- return 1;
-}
-
/**
*
* Frame is freed:
@@ -484,7 +455,8 @@ int send_pcm_frame(xbus_t *xbus, xframe_t *xframe)
int ret = -ENODEV;
BUG_ON(!xframe);
- if(!xbus_ready(xbus, "Dropped a pcm frame")) {
+ if(!XBUS_IS(xbus, READY)) {
+ XBUS_ERR(xbus, "Dropped a pcm frame -- hardware is not ready.\n");
ret = -ENODEV;
goto error;
}
@@ -509,7 +481,9 @@ static int really_send_cmd_frame(xbus_t *xbus, xframe_t *xframe)
BUG_ON(!xbus);
BUG_ON(!xframe);
BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
- if(!xbus_ready(xbus, "Dropped command before sending")) {
+ if(XBUS_IS(xbus, DISCONNECTED)) {
+ XBUS_ERR(xbus, "Dropped command before sending -- hardware deactivated.\n");
+ dump_xframe("Dropped", xbus, xframe, DBG_ANY);
FREE_SEND_XFRAME(xbus, xframe);
return -ENODEV;
}
@@ -530,18 +504,30 @@ int xbus_command_queue_tick(xbus_t *xbus)
{
xframe_t *frm;
int ret = 0;
+ int packno;
- frm = xframe_dequeue(&xbus->command_queue);
- if(frm) {
+ xbus->command_tick_counter++;
+ xbus->usec_nosend -= 1000; /* That's our budget */
+ for(packno = 0; packno < 3; packno++) {
+ if(xbus->usec_nosend > 0)
+ break;
+ frm = xframe_dequeue(&xbus->command_queue);
+ if(!frm) {
+ wake_up(&xbus->command_queue_empty);
+ break;
+ }
BUG_ON(frm->xframe_magic != XFRAME_MAGIC);
+ xbus->usec_nosend += frm->usec_towait;
ret = really_send_cmd_frame(xbus, frm);
- if(ret < 0)
+ if(ret < 0) {
XBUS_ERR(xbus,
- "Failed to send from command_queue (ret=%d)\n",
- ret);
- XBUS_PUT(xbus);
- } else
- wake_up(&xbus->command_queue_empty);
+ "Failed to send from command_queue (ret=%d)\n",
+ ret);
+ xbus_setstate(xbus, XBUS_STATE_FAIL);
+ }
+ }
+ if(xbus->usec_nosend < 0)
+ xbus->usec_nosend = 0;
return ret;
}
@@ -550,10 +536,9 @@ static void xbus_command_queue_clean(xbus_t *xbus)
xframe_t *frm;
XBUS_DBG(DEVICES, xbus, "count=%d\n", xbus->command_queue.count);
- xframe_queue_disable(&xbus->command_queue);
+ xframe_queue_disable(&xbus->command_queue, 1);
while((frm = xframe_dequeue(&xbus->command_queue)) != NULL) {
FREE_SEND_XFRAME(xbus, frm);
- XBUS_PUT(xbus);
}
}
@@ -577,23 +562,21 @@ int send_cmd_frame(xbus_t *xbus, xframe_t *xframe)
BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
- if(!xbus_ready(xbus, "Dropped command before queueing")) {
- ret = -ENODEV;
- goto err;
- }
- if(!XBUS_GET(xbus)) {
- /* shutting down */
+ if(XBUS_IS(xbus, DISCONNECTED)) {
+ XBUS_ERR(xbus, "Dropped command before queueing -- hardware deactivated.\n");
ret = -ENODEV;
goto err;
}
+ if(debug & DBG_COMMANDS)
+ dump_xframe(__FUNCTION__, xbus, xframe, DBG_ANY);
if(!xframe_enqueue(&xbus->command_queue, xframe)) {
if((rate_limit++ % 1003) == 0) {
XBUS_ERR(xbus,
"Dropped command xframe. Cannot enqueue (%d)\n",
rate_limit);
- dump_xframe("send_cmd_frame", xbus, xframe, DBG_ANY);
+ dump_xframe(__FUNCTION__, xbus, xframe, DBG_ANY);
}
- XBUS_PUT(xbus);
+ xbus_setstate(xbus, XBUS_STATE_FAIL);
ret = -E2BIG;
goto err;
}
@@ -644,7 +627,7 @@ void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe)
if(rx_tasklet) {
xframe_enqueue_recv(xbus, xframe);
} else {
- if (likely(TRANSPORT_RUNNING(xbus)))
+ if(likely(!XBUS_IS(xbus, DISCONNECTED)))
xframe_receive(xbus, xframe);
else
FREE_RECV_XFRAME(xbus, xframe); /* return to receive_pool */
@@ -666,75 +649,71 @@ xpd_t *xpd_byaddr(const xbus_t *xbus, uint unit, uint subunit)
return xbus->xpds[XPD_IDX(unit,subunit)];
}
-int xbus_register_xpd(xbus_t *xbus, xpd_t *xpd)
+int xbus_xpd_bind(xbus_t *xbus, xpd_t *xpd, int unit, int subunit)
{
- unsigned int xpd_num = xpd->xbus_idx;
+ unsigned int xpd_num;
unsigned long flags;
- int ret = 0;
- xbus = get_xbus(xbus->num); /* until unregister */
BUG_ON(!xbus);
- XBUS_DBG(DEVICES, xbus, "XPD #%d (xbus_refcount=%d)\n",
- xpd_num, refcount_xbus(xbus->num));
+ xpd_num = XPD_IDX(unit,subunit);
+ XBUS_DBG(DEVICES, xbus, "XPD #%d\n", xpd_num);
spin_lock_irqsave(&xbus->lock, flags);
if(!VALID_XPD_NUM(xpd_num)) {
XBUS_ERR(xbus, "Bad xpd_num = %d\n", xpd_num);
- ret = -EINVAL;
- goto out;
+ BUG();
}
if(xbus->xpds[xpd_num] != NULL) {
xpd_t *other = xbus->xpds[xpd_num];
XBUS_ERR(xbus, "xpd_num=%d is occupied by %p (%s)\n",
xpd_num, other, other->xpdname);
- ret = -EINVAL;
- goto out;
+ BUG();
}
+ snprintf(xpd->xpdname, XPD_NAMELEN, "XPD-%1d%1d", unit, subunit);
+ MKADDR(&xpd->addr, unit, subunit);
+ xpd->xbus_idx = xpd_num;
xbus->xpds[xpd_num] = xpd;
xpd->xbus = xbus;
- xbus->num_xpds++;
-out:
+ atomic_inc(&xbus->num_xpds);
spin_unlock_irqrestore(&xbus->lock, flags);
- return ret;
+ /* Must be done out of atomic context */
+ if(xpd_device_register(xbus, xpd) < 0) {
+ XPD_ERR(xpd, "%s: xpd_device_register() failed\n", __FUNCTION__);
+ /* FIXME: What to do? */
+ }
+ return 0;
}
-int xbus_unregister_xpd(xbus_t *xbus, xpd_t *xpd)
+int xbus_xpd_unbind(xbus_t *xbus, xpd_t *xpd)
{
unsigned int xpd_num = xpd->xbus_idx;
unsigned long flags;
- int ret = -EINVAL;
- spin_lock_irqsave(&xbus->lock, flags);
- XBUS_DBG(DEVICES, xbus, "XPD #%d (xbus_refcount=%d)\n",
- xpd_num, refcount_xbus(xbus->num));
+ XBUS_DBG(DEVICES, xbus, "XPD #%d\n", xpd_num);
if(!VALID_XPD_NUM(xpd_num)) {
XBUS_ERR(xbus, "%s: Bad xpd_num = %d\n", __FUNCTION__, xpd_num);
- goto out;
+ BUG();
}
if(xbus->xpds[xpd_num] == NULL) {
XBUS_ERR(xbus, "%s: slot xpd_num=%d is empty\n", __FUNCTION__, xpd_num);
- goto out;
+ BUG();
}
if(xbus->xpds[xpd_num] != xpd) {
xpd_t *other = xbus->xpds[xpd_num];
XBUS_ERR(xbus, "%s: slot xpd_num=%d is occupied by %p (%s)\n",
__FUNCTION__, xpd_num, other, other->xpdname);
- goto out;
+ BUG();
}
- xbus->xpds[xpd_num] = NULL;
- xbus->num_xpds--;
+ spin_lock_irqsave(&xbus->lock, flags);
xpd->xbus = NULL;
- put_xbus(xbus); /* we got it in xbus_register_xpd() */
- ret = 0;
-out:
+ xbus->xpds[xpd_num] = NULL;
+ if(atomic_dec_and_test(&xbus->num_xpds))
+ xbus_setstate(xbus, XBUS_STATE_IDLE);
spin_unlock_irqrestore(&xbus->lock, flags);
- return ret;
+ return 0;
}
-/*
- * Called with xbus->worker locked.
- */
static int new_card(xbus_t *xbus,
int unit,
byte type,
@@ -773,7 +752,12 @@ static int new_card(xbus_t *xbus,
BUG_ON(!xops);
xbus->worker->num_units += subunits - 1;
for(i = 0; i < subunits; i++) {
- if(!TRANSPORT_RUNNING(xbus)) {
+ if(!XBUS_IS(xbus, RECVD_DESC)) {
+ XBUS_NOTICE(xbus,
+ "Cannot create XPD=%d%d in state %s\n",
+ unit,
+ i,
+ xbus_statename(XBUS_STATE(xbus)));
ret = -ENODEV;
goto out;
}
@@ -782,13 +766,13 @@ static int new_card(xbus_t *xbus,
i,
type,
subtype);
- if(!XBUS_GET(xbus)) {
- XBUS_ERR(xbus, "Aborting creation. Is shutting down.\n");
+ if(!XBUS_IS(xbus, RECVD_DESC)) {
+ XBUS_ERR(xbus, "Aborting creation -- In bad state %s\n",
+ xbus_statename(XBUS_STATE(xbus)));
ret = -ENODEV;
goto out;
}
ret = create_xpd(xbus, proto_table, unit, i, type, subtype, subunits, port_dir);
- XBUS_PUT(xbus);
if(ret < 0) {
XBUS_ERR(xbus, "Creation of XPD=%d%d failed %d\n",
unit, i, ret);
@@ -801,44 +785,86 @@ out:
return ret;
}
+static void xbus_release_xpds(xbus_t *xbus)
+{
+ int i;
+
+ XBUS_INFO(xbus, "[%s] Release XPDS\n", xbus->label);
+ for(i = 0; i < MAX_XPDS; i++) {
+ xpd_t *xpd = xpd_of(xbus, i);
+
+ if(xpd)
+ put_xpd(__FUNCTION__, xpd); /* taken in xbus_xpd_bind() */
+ }
+}
+
+static int xpd_initialize(xpd_t *xpd)
+{
+ int ret = -ENODEV;
+
+ if(CALL_XMETHOD(card_init, xpd->xbus, xpd) < 0) {
+ XPD_ERR(xpd, "Card Initialization failed\n");
+ goto out;
+ }
+ //CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 0); /* Turn off all channels */
+ xpd->card_present = 1;
+ CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 1); /* Turn on all channels */
+ if(!xpd_setstate(xpd, XPD_STATE_READY)) {
+ goto out;
+ }
+ XPD_INFO(xpd, "Initialized: %s\n", xpd->type_name);
+ xpd_post_init(xpd);
+ ret = 0;
+out:
+ return ret;
+}
+
static int xbus_initialize(xbus_t *xbus)
{
int unit;
int subunit;
xpd_t *xpd;
+ struct timeval time_start;
+ struct timeval time_end;
+ unsigned long timediff;
+ do_gettimeofday(&time_start);
+ XBUS_DBG(DEVICES, xbus, "refcount_xbus=%d\n",
+ refcount_xbus(xbus));
for(unit = 0; unit < MAX_UNIT; unit++) {
xpd = xpd_byaddr(xbus, unit, 0);
if(!xpd)
continue;
if(run_initialize_registers(xpd) < 0) {
- XPD_ERR(xpd, "Register Initialization failed\n");
+ XBUS_ERR(xbus, "Register Initialization of card #%d failed\n", unit);
goto err;
}
for(subunit = 0; subunit < MAX_SUBUNIT; subunit++) {
+ int ret;
+
xpd = xpd_byaddr(xbus, unit, subunit);
if(!xpd)
continue;
- if(CALL_XMETHOD(card_init, xpd->xbus, xpd) < 0) {
- XPD_ERR(xpd, "Card Initialization failed\n");
+ xpd = get_xpd(__FUNCTION__, xpd);
+ if(!xpd) {
+ XBUS_ERR(xbus,
+ "Aborting initialization. XPD-%d%d is gone.\n",
+ unit, subunit);
goto err;
}
- //CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 0); /* Turn off all channels */
- xpd->card_present = 1;
- CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 1); /* Turn on all channels */
- XPD_INFO(xpd, "Initialized: %s\n", xpd->type_name);
- xpd_post_init(xpd);
+ ret = xpd_initialize(xpd);
+ put_xpd(__FUNCTION__, xpd);
+ if(ret < 0)
+ goto err;
}
}
+ do_gettimeofday(&time_end);
+ timediff = usec_diff(&time_end, &time_start);
+ timediff /= 1000*100;
+ XBUS_INFO(xbus, "Initialized in %ld.%1ld sec\n", timediff/10, timediff%10);
return 0;
err:
- for(unit = 0; unit < MAX_UNIT; unit++) {
- for(subunit = 0; subunit < MAX_SUBUNIT; subunit++) {
- xpd = xpd_byaddr(xbus, unit, subunit);
- if(!xpd)
- xpd_free(xpd);
- }
- }
+ xbus_setstate(xbus, XBUS_STATE_FAIL);
return -EINVAL;
}
@@ -848,7 +874,7 @@ err:
* initialized.
*/
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-void xbus_populate(struct work_struct *work)
+static void xbus_populate(struct work_struct *work)
{
struct xbus_workqueue *worker = container_of(work, struct xbus_workqueue, xpds_init_work);
#else
@@ -863,10 +889,7 @@ void xbus_populate(void *data)
int ret = 0;
xbus = worker->xbus;
- if(!XBUS_GET(xbus)) {
- XBUS_NOTICE(xbus, "Shutting down, aboring initialization\n");
- return;
- }
+ XBUS_DBG(DEVICES, xbus, "Entering %s\n", __FUNCTION__);
spin_lock_irqsave(&worker->worker_lock, flags);
list_for_each_safe(card, next_card, &worker->card_list) {
struct card_desc_struct *card_desc = list_entry(card, struct card_desc_struct, card_list);
@@ -889,62 +912,127 @@ void xbus_populate(void *data)
break;
}
spin_unlock_irqrestore(&worker->worker_lock, flags);
- xbus_initialize(xbus);
- worker->xpds_init_done = 1;
- ret = xbus_sysfs_create(xbus);
- if(ret) {
- XBUS_ERR(xbus, "SYSFS creation failed: %d\n", ret);
+ if(xbus_initialize(xbus) < 0) {
+ XBUS_NOTICE(xbus, "Initialization failed. Leave unused. refcount_xbus=%d\n",
+ refcount_xbus(xbus));
+ goto failed;
}
- wake_up(&worker->wait_for_xpd_initialization);
+ if(!xbus_setstate(xbus, XBUS_STATE_READY)) {
+ XBUS_NOTICE(xbus, "Illegal transition. Leave unused. refcount_xbus=%d\n",
+ refcount_xbus(xbus));
+ goto failed;
+ }
+ worker->xpds_init_done = 1;
/*
* Now request Astribank to start self_ticking.
* This is the last initialization command. So
* all others will reach the device before it.
*/
xbus_request_sync(xbus, SYNC_MODE_PLL);
- elect_syncer("xbus_poll(end)"); /* FIXME: try to do it later */
- put_xbus(xbus); /* taken in AB_DESCRIPTION */
- XBUS_PUT(xbus);
+ elect_syncer("xbus_populate(end)"); /* FIXME: try to do it later */
+out:
+ XBUS_DBG(DEVICES, xbus, "Leaving\n");
+ wake_up(&worker->wait_for_xpd_initialization);
+ XBUS_DBG(DEVICES, xbus, "populate release\n");
+ up(&xbus->in_worker);
+ return;
+failed:
+ xbus_setstate(xbus, XBUS_STATE_FAIL);
+ goto out;
}
-static void worker_destroy(struct xbus_workqueue *worker)
+int xbus_process_worker(xbus_t *xbus)
{
- xbus_t *xbus;
+ struct xbus_workqueue *worker = xbus->worker;
+
+ if(!xbus) {
+ ERR("%s: xbus gone -- skip initialization\n", __FUNCTION__);
+ return 0;
+ }
+ if(down_trylock(&xbus->in_worker)) {
+ ERR("%s: xbus is disconnected -- skip initialization\n", __FUNCTION__);
+ return 0;
+ }
+ XBUS_DBG(DEVICES, xbus, "\n");
+ /* Initialize the work. (adapt to kernel API changes). */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
+ INIT_WORK(&worker->xpds_init_work, xbus_populate);
+#else
+ INIT_WORK(&worker->xpds_init_work, xbus_populate, worker);
+#endif
+ BUG_ON(!xbus);
+ /* Now send it */
+ if(!queue_work(worker->wq, &worker->xpds_init_work)) {
+ XBUS_ERR(xbus, "Failed to queue xpd initialization work\n");
+ up(&xbus->in_worker);
+ return 0;
+ }
+ return 1;
+}
+
+static void worker_reset(struct xbus_workqueue *worker)
+{
+
struct list_head *card;
struct list_head *next_card;
unsigned long flags;
+ xbus_t *xbus = worker->xbus;
+ char *name = (xbus) ? xbus->busname : "detached";
- if(!worker)
- return;
+ BUG_ON(!worker);
+ DBG(DEVICES, "%s\n", name);
+ if(!worker->xpds_init_done) {
+ NOTICE("%s: worker(%s)->xpds_init_done=%d\n",
+ __FUNCTION__, name, worker->xpds_init_done);
+ }
spin_lock_irqsave(&worker->worker_lock, flags);
- xbus = worker->xbus;
list_for_each_safe(card, next_card, &worker->card_list) {
struct card_desc_struct *card_desc = list_entry(card, struct card_desc_struct, card_list);
BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
list_del(card);
- kfree(card_desc);
+ KZFREE(card_desc);
}
+ worker->xpds_init_done = 0;
+ worker->num_units = 0;
+ worker->num_units_initialized = 0;
spin_unlock_irqrestore(&worker->worker_lock, flags);
+ wake_up(&worker->wait_for_xpd_initialization);
+}
+
+static void worker_destroy(struct xbus_workqueue *worker)
+{
+ xbus_t *xbus;
+
+ if(!worker)
+ return;
+ worker_reset(worker);
+ xbus = worker->xbus;
if(xbus) {
+ XBUS_DBG(DEVICES, xbus, "Waiting for worker to finish...\n");
+ down(&xbus->in_worker);
+ XBUS_DBG(DEVICES, xbus, "Waiting for worker to finish -- done\n");
+ if (worker->wq) {
+ XBUS_DBG(DEVICES, xbus, "destroying workqueue...\n");
+ flush_workqueue(worker->wq);
+ destroy_workqueue(worker->wq);
+ worker->wq = NULL;
+ XBUS_DBG(DEVICES, xbus, "destroying workqueue -- done\n");
+ }
#ifdef CONFIG_PROC_FS
+#ifdef OLD_PROC
if(xbus->proc_xbus_dir && worker->proc_xbus_waitfor_xpds) {
XBUS_DBG(PROC, xbus, "Removing proc '%s'\n", PROC_XBUS_WAITFOR_XPDS);
remove_proc_entry(PROC_XBUS_WAITFOR_XPDS, xbus->proc_xbus_dir);
worker->proc_xbus_waitfor_xpds = NULL;
}
#endif
+#endif
XBUS_DBG(DEVICES, xbus, "detach worker\n");
xbus->worker = NULL;
+ KZFREE(worker);
+ put_xbus(__FUNCTION__, xbus); /* got from worker_new() */
}
- if (worker->wq) {
- DBG(DEVICES, "XBUS #%d: destroy workqueue\n", worker->xbus->num);
- flush_workqueue(worker->wq);
- destroy_workqueue(worker->wq);
- worker->wq = NULL;
- }
- put_xbus(xbus); /* Taken in worker_new() */
- KZFREE(worker);
}
/*
@@ -952,29 +1040,27 @@ static void worker_destroy(struct xbus_workqueue *worker)
* May call blocking operations, but only briefly (as we are called
* from xbus_new() which is called from khubd.
*/
-static struct xbus_workqueue *worker_new(int xbus_num)
+static struct xbus_workqueue *worker_new(int xbusno)
{
struct xbus_workqueue *worker;
xbus_t *xbus;
- xbus = get_xbus(xbus_num); /* release in worker_destroy */
+ if((xbus = xbus_num(xbusno)) == NULL)
+ return NULL;
+ get_xbus(__FUNCTION__, xbus); /* return in worker_destroy() */
BUG_ON(xbus->busname[0] == '\0'); /* No name? */
- BUG_ON(xbus->worker != NULL); /* Hmmm... nested workers? */
+ BUG_ON(xbus->worker != NULL); /* Hmmm... nested workers? */
XBUS_DBG(DEVICES, xbus, "\n");
worker = KZALLOC(sizeof(*worker), GFP_KERNEL);
if(!worker)
goto err;
- worker->xbus = xbus;
/* poll related variables */
spin_lock_init(&worker->worker_lock);
INIT_LIST_HEAD(&worker->card_list);
init_waitqueue_head(&worker->wait_for_xpd_initialization);
- worker->wq = create_singlethread_workqueue(xbus->busname);
- if(!worker->wq) {
- XBUS_ERR(xbus, "Failed to create worker workqueue.\n");
- goto err;
- }
+ worker->xbus = xbus;
#ifdef CONFIG_PROC_FS
+#ifdef OLD_PROC
if(xbus->proc_xbus_dir) {
worker->proc_xbus_waitfor_xpds = create_proc_read_entry(
PROC_XBUS_WAITFOR_XPDS, 0444,
@@ -988,18 +1074,118 @@ static struct xbus_workqueue *worker_new(int xbus_num)
worker->proc_xbus_waitfor_xpds->owner = THIS_MODULE;
}
#endif
+#endif
+ worker->wq = create_singlethread_workqueue(xbus->busname);
+ if(!worker->wq) {
+ XBUS_ERR(xbus, "Failed to create worker workqueue.\n");
+ goto err;
+ }
return worker;
err:
worker_destroy(worker);
return NULL;
}
+bool xbus_setstate(xbus_t *xbus, enum xbus_state newstate)
+{
+ unsigned long flags;
+ bool ret = 0;
+ int state_flip = 0;
+
+ spin_lock_irqsave(&xbus->transport.state_lock, flags);
+ if(newstate == XBUS_STATE(xbus)) {
+ XBUS_DBG(DEVICES, xbus, "stay at %s\n",
+ xbus_statename(newstate));
+ goto out;
+ }
+ /* Sanity tests */
+ switch(newstate) {
+ case XBUS_STATE_START:
+ goto bad_state;
+ case XBUS_STATE_IDLE:
+ if(!XBUS_IS(xbus, START) &&
+ !XBUS_IS(xbus, DEACTIVATED))
+ goto bad_state;
+ break;
+ case XBUS_STATE_SENT_REQUEST:
+ if(!XBUS_IS(xbus, IDLE) &&
+ !XBUS_IS(xbus, SENT_REQUEST))
+ goto bad_state;
+ break;
+ case XBUS_STATE_RECVD_DESC:
+ if(!XBUS_IS(xbus, SENT_REQUEST))
+ goto bad_state;
+ break;
+ case XBUS_STATE_READY:
+ if(!XBUS_IS(xbus, RECVD_DESC))
+ goto bad_state;
+ state_flip = 1; /* We are good */
+ break;
+ case XBUS_STATE_DEACTIVATING:
+#if 0
+ if(XBUS_IS(xbus, DEACTIVATED) || XBUS_IS(xbus, DISCONNECTED))
+ goto bad_state;
+#endif
+ break;
+ case XBUS_STATE_DEACTIVATED:
+ if(!XBUS_IS(xbus, DEACTIVATING))
+ goto bad_state;
+ break;
+ case XBUS_STATE_DISCONNECTED:
+ break;
+ case XBUS_STATE_FAIL:
+ if(XBUS_IS(xbus, DEACTIVATING) || XBUS_IS(xbus, DEACTIVATED) || XBUS_IS(xbus, DISCONNECTED))
+ goto bad_state;
+ break;
+ default:
+ XBUS_NOTICE(xbus, "%s: unknown state %d\n", __FUNCTION__, newstate);
+ goto out;
+ }
+ /* All good */
+ XBUS_DBG(DEVICES, xbus, "%s -> %s\n",
+ xbus_statename(XBUS_STATE(xbus)),
+ xbus_statename(newstate));
+ if(xbus->transport.xbus_state == XBUS_STATE_READY && newstate != XBUS_STATE_READY)
+ state_flip = -1; /* We became bad */
+ xbus->transport.xbus_state = newstate;
+ ret = 1;
+out:
+ spin_unlock_irqrestore(&xbus->transport.state_lock, flags);
+ /* Should be sent out of spinlocks */
+ if(state_flip > 0)
+ astribank_uevent_send(xbus, KOBJ_ONLINE);
+ else if(state_flip < 0)
+ astribank_uevent_send(xbus, KOBJ_OFFLINE);
+ return ret;
+bad_state:
+ XBUS_NOTICE(xbus, "Bad state transition %s -> %s ignored.\n",
+ xbus_statename(XBUS_STATE(xbus)),
+ xbus_statename(newstate));
+ goto out;
+}
+
int xbus_activate(xbus_t *xbus)
{
+ XBUS_INFO(xbus, "[%s] Activating\n", xbus->label);
+ xpp_drift_init(xbus);
+ xbus_set_command_timer(xbus, 1);
+ xframe_queue_disable(&xbus->command_queue, 0);
+ xbus_setstate(xbus, XBUS_STATE_IDLE); /* must be done after transport is valid */
+ CALL_PROTO(GLOBAL, AB_REQUEST, xbus, NULL);
+ /*
+ * Make sure Astribank knows not to send us ticks.
+ */
+ xbus_request_sync(xbus, SYNC_MODE_NONE);
+ return 0;
+}
+
+int xbus_connect(xbus_t *xbus)
+{
struct xbus_ops *ops;
struct xbus_workqueue *worker;
BUG_ON(!xbus);
+ XBUS_DBG(DEVICES, xbus, "\n");
ops = transportops_get(xbus);
BUG_ON(!ops);
worker = xbus->worker;
@@ -1009,64 +1195,56 @@ int xbus_activate(xbus_t *xbus)
BUG_ON(!ops->xframe_send_cmd);
BUG_ON(!ops->alloc_xframe);
BUG_ON(!ops->free_xframe);
- xpp_drift_init(xbus);
- /*
- * We start with timer based ticking
- */
- xbus_set_command_timer(xbus, 1);
- xbus->transport.transport_running = 1; /* must be done after transport is valid */
- XBUS_INFO(xbus, "[%s] Activating\n", xbus->label);
- /*
- * Make sure Astribank knows not to send us ticks.
- */
- xbus_request_sync(xbus, SYNC_MODE_NONE);
- CALL_PROTO(GLOBAL, AB_REQUEST, xbus, NULL);
+ xbus_activate(xbus);
return 0;
}
-void xbus_disconnect(xbus_t *xbus)
+void xbus_deactivate(xbus_t *xbus, bool is_disconnected)
{
- int i;
-
BUG_ON(!xbus);
- XBUS_INFO(xbus, "[%s] Disconnecting\n", xbus->label);
- xbus_set_command_timer(xbus, 1);
+ XBUS_INFO(xbus, "[%s] Deactivating\n", xbus->label);
+ if(!xbus_setstate(xbus, XBUS_STATE_DEACTIVATING))
+ return;
xbus_request_sync(xbus, SYNC_MODE_NONE); /* no more ticks */
- xbus_sysfs_remove(xbus); /* Device-Model */
- for(i = 0; i < MAX_XPDS; i++) {
- xpd_t *xpd = xpd_of(xbus, i);
- if(!xpd)
- continue;
- if(xpd->xbus_idx != i) {
- XBUS_ERR(xbus, "BUG: xpd->xbus_idx=%d != i=%d\n", xpd->xbus_idx, i);
- continue;
- }
- xpd_disconnect(xpd);
- }
- XBUS_DBG(DEVICES, xbus, "Deactivating\n");
- tasklet_kill(&xbus->receive_tasklet);
- xframe_queue_clear(&xbus->receive_queue);
+ xbus_request_removal(xbus);
+ XBUS_DBG(DEVICES, xbus, "[%s] Waiting for queues\n", xbus->label);
xbus_command_queue_clean(xbus);
xbus_command_queue_waitempty(xbus);
- del_timer_sync(&xbus->command_timer);
+ xbus_setstate(xbus, XBUS_STATE_DEACTIVATED);
+ worker_reset(xbus->worker);
+ xbus_release_xpds(xbus);
+ if(!is_disconnected)
+ xbus_setstate(xbus, XBUS_STATE_IDLE);
+ elect_syncer("deactivate");
+}
+
+void xbus_disconnect(xbus_t *xbus)
+{
+ XBUS_INFO(xbus, "[%s] Disconnecting\n", xbus->label);
+ BUG_ON(!xbus);
+ xbus_deactivate(xbus, 1);
+ xbus_command_queue_clean(xbus);
+ xbus_command_queue_waitempty(xbus);
+ tasklet_kill(&xbus->receive_tasklet);
+ xframe_queue_clear(&xbus->receive_queue);
xframe_queue_clear(&xbus->send_pool);
xframe_queue_clear(&xbus->receive_pool);
xframe_queue_clear(&xbus->pcm_tospan);
+ xbus_setstate(xbus, XBUS_STATE_DISCONNECTED);
+ del_timer_sync(&xbus->command_timer);
transportops_put(xbus);
transport_destroy(xbus);
- elect_syncer("disconnect");
- XBUS_DBG(DEVICES, xbus, "Deactivated (refcount_xbus=%d)\n", refcount_xbus(xbus->num));
- if(atomic_dec_and_test(&xbus->xbus_ref_count)) {
- XBUS_DBG(DEVICES, xbus, "Going to remove XBUS\n");
- xbus_remove(xbus);
- }
+ worker_destroy(xbus->worker);
+ XBUS_DBG(DEVICES, xbus, "Deactivated refcount_xbus=%d\n",
+ refcount_xbus(xbus));
+ xbus_sysfs_remove(xbus); /* Device-Model */
}
static xbus_t *xbus_alloc(void)
{
unsigned long flags;
- xbus_t *xbus;
- int i;
+ xbus_t *xbus;
+ int i;
xbus = KZALLOC(sizeof(xbus_t), GFP_KERNEL);
if(!xbus) {
@@ -1079,28 +1257,27 @@ static xbus_t *xbus_alloc(void)
break;
if(i >= MAX_BUSES) {
ERR("%s: No free slot for new bus. i=%d\n", __FUNCTION__, i);
- kfree(xbus);
+ KZFREE(xbus);
xbus = NULL;
goto out;
}
/* Found empty slot */
xbus->num = i;
init_xbus(i, xbus);
- xbus = get_xbus(i);
- bus_count++;
out:
spin_unlock_irqrestore(&xbuses_lock, flags);
return xbus;
}
-static void xbus_free(xbus_t *xbus)
+void xbus_free(xbus_t *xbus)
{
unsigned long flags;
uint num;
if(!xbus)
return;
+ XBUS_DBG(DEVICES, xbus, "Free\n");
spin_lock_irqsave(&xbuses_lock, flags);
num = xbus->num;
BUG_ON(!xbuses_array[num].xbus);
@@ -1136,46 +1313,42 @@ static void xbus_free(xbus_t *xbus)
}
#endif
spin_lock_irqsave(&xbuses_lock, flags);
- /*
- * Return to xbus reference counts:
- * - One from our caller: transport disconnect or xpp_close()
- * - One from xbus_alloc()
- */
- put_xbus(xbus);
- put_xbus(xbus);
- if(!wait_for_xbus_release(xbus->num))
- BUG(); /* Let's see what happens next... */
- bus_count--;
- XBUS_DBG(DEVICES, xbus, "Going to free... refcount_xbus=%d\n", refcount_xbus(num));
- BUG_ON(refcount_xbus(num) != 0);
+ XBUS_DBG(DEVICES, xbus, "Going to free...\n");
init_xbus(num, NULL);
spin_unlock_irqrestore(&xbuses_lock, flags);
KZFREE(xbus);
}
-xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv)
+xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, struct device *transport_device, void *priv)
{
int err;
xbus_t *xbus = NULL;
BUG_ON(!ops);
- XBUS_DBG(GENERAL, xbus, "allocate new xbus\n");
xbus = xbus_alloc();
- if(!xbus)
+ if(!xbus) {
+ ERR("%s: Failed allocating new xbus\n", __FUNCTION__);
+ module_put(THIS_MODULE);
return NULL;
- transport_init(xbus, ops, max_send_size, priv);
- spin_lock_init(&xbus->lock);
- atomic_set(&xbus->xbus_ref_count, 1); /* a single ref */
+ }
snprintf(xbus->busname, XBUS_NAMELEN, "XBUS-%02d", xbus->num);
+ XBUS_DBG(DEVICES, xbus, "\n");
+ transport_init(xbus, ops, max_send_size, transport_device, priv);
+ spin_lock_init(&xbus->lock);
init_waitqueue_head(&xbus->command_queue_empty);
init_timer(&xbus->command_timer);
+ init_MUTEX(&xbus->in_worker);
atomic_set(&xbus->pcm_rx_counter, 0);
xbus->min_tx_sync = INT_MAX;
xbus->min_rx_sync = INT_MAX;
- xbus->num_xpds = 0;
+ atomic_set(&xbus->num_xpds, 0);
xbus->sync_mode = SYNC_MODE_NONE;
- init_rwsem(&xbus->in_use);
+ err = xbus_sysfs_create(xbus);
+ if(err) {
+ XBUS_ERR(xbus, "SYSFS creation failed: %d\n", err);
+ goto nobus;
+ }
xbus_reset_counters(xbus);
#ifdef CONFIG_PROC_FS
XBUS_DBG(PROC, xbus, "Creating xbus proc directory\n");
@@ -1219,9 +1392,9 @@ xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv)
goto nobus;
}
#endif
- xframe_queue_init(&xbus->command_queue, 10, 200, "command_queue", xbus);
+ xframe_queue_init(&xbus->command_queue, 10, command_queue_length, "command_queue", xbus);
xframe_queue_init(&xbus->receive_queue, 10, 50, "receive_queue", xbus);
- xframe_queue_init(&xbus->send_pool, 10, 200, "send_pool", xbus);
+ xframe_queue_init(&xbus->send_pool, 10, 100, "send_pool", xbus);
xframe_queue_init(&xbus->receive_pool, 10, 50, "receive_pool", xbus);
xframe_queue_init(&xbus->pcm_tospan, 5, 10, "pcm_tospan", xbus);
tasklet_init(&xbus->receive_tasklet, receive_tasklet_func, (unsigned long)xbus);
@@ -1240,31 +1413,6 @@ nobus:
return NULL;
}
-void xbus_remove(xbus_t *xbus)
-{
- int i;
-
- BUG_ON(TRANSPORT_RUNNING(xbus));
- down_write(&xbus->in_use);
-
- XBUS_INFO(xbus, "[%s] Removing\n", xbus->label);
- for(i = 0; i < MAX_XPDS; i++) {
- xpd_t *xpd = xpd_of(xbus, i);
-
- if(xpd) {
- if(xpd->xbus_idx != i) {
- XBUS_ERR(xbus, "BUG: xpd->xbus_idx=%d != i=%d\n", xpd->xbus_idx, i);
- continue;
- }
- XBUS_DBG(DEVICES, xbus, " Removing xpd #%d\n", i);
- xpd_remove(xpd);
- }
- xbus->xpds[i] = NULL;
- }
- worker_destroy(xbus->worker);
- xbus_free(xbus);
-}
-
/*------------------------- Proc handling --------------------------*/
void xbus_reset_counters(xbus_t *xbus)
@@ -1305,21 +1453,19 @@ static int xbus_read_proc(char *page, char **start, off_t off, int count, int *e
int len = 0;
int i = (int)((unsigned long)data);
- xbus = get_xbus(i);
+ xbus = xbus_num(i);
if(!xbus)
goto out;
+ xbus = get_xbus(__FUNCTION__, xbus); /* until end of xbus_read_proc */
spin_lock_irqsave(&xbus->lock, flags);
worker = xbus->worker;
len += sprintf(page + len, "%s: CONNECTOR=%s LABEL=[%s] STATUS=%s\n",
xbus->busname,
- xbus->location,
+ xbus->connector,
xbus->label,
- (TRANSPORT_RUNNING(xbus)) ? "connected" : "missing"
+ (!XBUS_IS(xbus, DISCONNECTED)) ? "connected" : "missing"
);
- len += sprintf(page + len, "\nxbus_ref_count=%d\n",
- atomic_read(&xbus->xbus_ref_count)
- );
len += xbus_fill_proc_queue(page + len, &xbus->send_pool);
len += xbus_fill_proc_queue(page + len, &xbus->receive_pool);
len += xbus_fill_proc_queue(page + len, &xbus->command_queue);
@@ -1336,6 +1482,8 @@ static int xbus_read_proc(char *page, char **start, off_t off, int count, int *e
}
len += sprintf(page + len, "self_ticking: %d (last_tick at %ld)\n",
xbus->self_ticking, xbus->ticker.last_sample.tv.tv_sec);
+ len += sprintf(page + len, "command_tick: %d\n", xbus->command_tick_counter);
+ len += sprintf(page + len, "usec_nosend: %d\n", xbus->usec_nosend);
len += sprintf(page + len, "xbus: pcm_rx_counter = %d, frag = %d\n",
atomic_read(&xbus->pcm_rx_counter), xbus->xbus_frag_count);
len += sprintf(page + len, "max_rx_process = %2ld.%ld ms\n",
@@ -1358,7 +1506,7 @@ static int xbus_read_proc(char *page, char **start, off_t off, int count, int *e
}
len += sprintf(page + len, "<-- len=%d\n", len);
spin_unlock_irqrestore(&xbus->lock, flags);
- put_xbus(xbus);
+ put_xbus(__FUNCTION__, xbus); /* from xbus_read_proc() */
out:
if (len <= off+count)
*eof = 1;
@@ -1372,59 +1520,86 @@ out:
}
-static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count, int *eof, void *data)
+static bool xpds_done(xbus_t *xbus)
{
- int len = 0;
- unsigned long flags;
- xbus_t *xbus = data;
struct xbus_workqueue *worker;
+
+ if(XBUS_IS(xbus, FAIL))
+ return 1; /* Nothing to wait for */
+ if(!XBUS_IS(xbus, RECVD_DESC))
+ return 1; /* We are not in the initialization phase */
+ worker = xbus->worker;
+ if(worker->xpds_init_done)
+ return 1; /* All good */
+ /* Keep waiting */
+ return 0;
+}
+
+int waitfor_xpds(xbus_t *xbus, char *buf)
+{
+ struct xbus_workqueue *worker;
+ unsigned long flags;
int ret;
+ int len = 0;
- if(!xbus)
- goto out;
- /* first handle special cases */
- if(!count || off)
- goto out;
/*
- * worker is created before /proc/XBUS-??
+ * FIXME: worker is created before ?????
* So by now it exists and initialized.
*/
+ xbus = get_xbus(__FUNCTION__, xbus); /* until end of waitfor_xpds_show() */
+ if(!xbus)
+ return -ENODEV;
worker = xbus->worker;
BUG_ON(!worker);
XBUS_DBG(DEVICES, xbus,
"Waiting for card initialization of %d XPD's max %d seconds\n",
worker->num_units,
INITIALIZATION_TIMEOUT/HZ);
- /*
- * when polling is finished xbus_poll():
- * - Unset worker->is_polling
- * - Sets worker->count_xpds_to_initialize.
- * So we wait until polling is finished (is_polling == 0) and:
- * - No poll answers from Astribank (e.g: defective firmware).
- * - Or no units to initialize (e.g: mini-AB with only main card).
- * - Or we finished initializing all existing units.
- * - Or A timeout passed.
- */
ret = wait_event_interruptible_timeout(
worker->wait_for_xpd_initialization,
- worker->xpds_init_done,
+ xpds_done(xbus),
INITIALIZATION_TIMEOUT);
if(ret == 0) {
XBUS_ERR(xbus, "Card Initialization Timeout\n");
- return ret;
+ len = -ETIMEDOUT;
+ goto out;
} else if(ret < 0) {
XBUS_ERR(xbus, "Card Initialization Interrupted %d\n", ret);
- return ret;
+ len = ret;
+ goto out;
} else
XBUS_DBG(DEVICES, xbus,
"Finished initialization of %d XPD's in %d seconds.\n",
worker->num_units_initialized,
(INITIALIZATION_TIMEOUT - ret)/HZ);
- spin_lock_irqsave(&xbus->lock, flags);
- len += sprintf(page + len, "XPDS_READY: %s: %d/%d\n",
+ if(XBUS_IS(xbus, FAIL)) {
+ len += sprintf(buf, "FAILED: %s\n", xbus->busname);
+ } else {
+ spin_lock_irqsave(&xbus->lock, flags);
+ len += sprintf(buf, "XPDS_READY: %s: %d/%d\n",
xbus->busname,
worker->num_units_initialized, worker->num_units);
- spin_unlock_irqrestore(&xbus->lock, flags);
+ spin_unlock_irqrestore(&xbus->lock, flags);
+ }
+out:
+ put_xbus(__FUNCTION__, xbus); /* from start of waitfor_xpds_show() */
+ return len;
+}
+
+#ifdef OLD_PROC
+static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+ int len = 0;
+ xbus_t *xbus = data;
+
+ if(!xbus)
+ goto out;
+ XBUS_NOTICE(xbus, "%s: DEPRECATED: %s[%d] read from /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
+ /* first handle special cases */
+ if(!count || off)
+ goto out;
+ len = waitfor_xpds(xbus, page);
out:
if (len <= off+count)
*eof = 1;
@@ -1437,6 +1612,7 @@ out:
return len;
}
+#endif
#ifdef PROTOCOL_DEBUG
static int proc_xbus_command_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
@@ -1526,17 +1702,15 @@ static int read_proc_xbuses(char *page, char **start, off_t off, int count, int
spin_lock_irqsave(&xbuses_lock, flags);
for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = get_xbus(i);
+ xbus_t *xbus = xbus_num(i);
if(xbus) {
- len += sprintf(page + len, "%s: CONNECTOR=%s LABEL=[%s] STATUS=%s REFCOUNT=%d\n",
+ len += sprintf(page + len, "%s: CONNECTOR=%s LABEL=[%s] STATUS=%s\n",
xbus->busname,
- xbus->location,
+ xbus->connector,
xbus->label,
- (TRANSPORT_RUNNING(xbus)) ? "connected" : "missing",
- refcount_xbus(i) - 1
+ (!XBUS_IS(xbus, DISCONNECTED)) ? "connected" : "missing"
);
- put_xbus(xbus);
}
}
#if 0
@@ -1556,7 +1730,7 @@ static int read_proc_xbuses(char *page, char **start, off_t off, int count, int
}
#endif
-static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, void *priv)
+static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, struct device *transport_device, void *priv)
{
BUG_ON(!xbus);
BUG_ON(!ops);
@@ -1566,7 +1740,10 @@ static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_s
BUG_ON(!ops->free_xframe);
xbus->transport.ops = ops;
xbus->transport.max_send_size = max_send_size;
+ xbus->transport.transport_device = transport_device;
xbus->transport.priv = priv;
+ xbus->transport.xbus_state = XBUS_STATE_START;
+ spin_lock_init(&xbus->transport.state_lock);
spin_lock_init(&xbus->transport.lock);
atomic_set(&xbus->transport.transport_refcount, 0);
init_waitqueue_head(&xbus->transport.transport_unused);
@@ -1577,7 +1754,6 @@ static void transport_destroy(xbus_t *xbus)
int ret;
BUG_ON(!xbus);
- xbus->transport.transport_running = 0;
XBUS_DBG(DEVICES, xbus, "Waiting... (transport_refcount=%d)\n",
atomic_read(&xbus->transport.transport_refcount));
ret = wait_event_interruptible(xbus->transport.transport_unused,
@@ -1660,7 +1836,7 @@ int __init xbus_core_init(void)
goto err;
}
#endif
- if((ret = register_xpp_bus()) < 0)
+ if((ret = xpp_driver_init()) < 0)
goto err;
return 0;
err:
@@ -1673,25 +1849,22 @@ void xbus_core_shutdown(void)
{
int i;
- for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = get_xbus(i);
-
- if(xbus) {
- xbus_remove(xbus);
- }
- }
- BUG_ON(bus_count);
- unregister_xpp_bus();
+ for(i = 0; i < MAX_BUSES; i++)
+ BUG_ON(xbus_num(i));
xbus_core_cleanup();
+ xpp_driver_exit();
}
EXPORT_SYMBOL(xpd_of);
EXPORT_SYMBOL(xpd_byaddr);
-EXPORT_SYMBOL(get_xbus);
-EXPORT_SYMBOL(put_xbus);
+EXPORT_SYMBOL(xbus_num);
+EXPORT_SYMBOL(xbus_setstate);
+EXPORT_SYMBOL(xbus_statename);
EXPORT_SYMBOL(xbus_new);
-EXPORT_SYMBOL(xbus_remove);
+EXPORT_SYMBOL(xbus_free);
+EXPORT_SYMBOL(xbus_connect);
EXPORT_SYMBOL(xbus_activate);
+EXPORT_SYMBOL(xbus_deactivate);
EXPORT_SYMBOL(xbus_disconnect);
EXPORT_SYMBOL(xbus_receive_xframe);
EXPORT_SYMBOL(xbus_reset_counters);
diff --git a/kernel/xpp/xbus-core.h b/kernel/xpp/xbus-core.h
index 85fac80..a24d76b 100644
--- a/kernel/xpp/xbus-core.h
+++ b/kernel/xpp/xbus-core.h
@@ -86,18 +86,35 @@ static struct xbus_counters {
#define XBUS_COUNTER_MAX ARRAY_SIZE(xbus_counters)
+enum xbus_state {
+ XBUS_STATE_START,
+ XBUS_STATE_IDLE,
+ XBUS_STATE_SENT_REQUEST,
+ XBUS_STATE_RECVD_DESC,
+ XBUS_STATE_READY,
+ XBUS_STATE_DEACTIVATING,
+ XBUS_STATE_DEACTIVATED,
+ XBUS_STATE_DISCONNECTED,
+ XBUS_STATE_FAIL,
+};
+
+const char *xbus_statename(enum xbus_state st);
+
struct xbus_transport {
struct xbus_ops *ops;
void *priv;
+ struct device *transport_device;
ushort max_send_size;
- bool transport_running; /* Hardware is functional */
+ enum xbus_state xbus_state;
+ spinlock_t state_lock;
atomic_t transport_refcount;
wait_queue_head_t transport_unused;
spinlock_t lock;
};
#define MAX_SEND_SIZE(xbus) ((xbus)->transport.max_send_size)
-#define TRANSPORT_RUNNING(xbus) ((xbus)->transport.transport_running)
+#define XBUS_STATE(xbus) ((xbus)->transport.xbus_state)
+#define XBUS_IS(xbus, st) (XBUS_STATE(xbus) == XBUS_STATE_ ## st)
#define TRANSPORT_EXIST(xbus) ((xbus)->transport.ops != NULL)
struct xbus_ops *transportops_get(xbus_t *xbus);
@@ -133,8 +150,10 @@ void put_xframe(struct xframe_queue *q, xframe_t *xframe);
#define FREE_SEND_XFRAME(xbus, xframe) put_xframe(&(xbus)->send_pool, (xframe))
#define FREE_RECV_XFRAME(xbus, xframe) put_xframe(&(xbus)->receive_pool, (xframe))
-xbus_t *get_xbus(uint num);
-void put_xbus(xbus_t *xbus);
+xbus_t *xbus_num(uint num);
+xbus_t *get_xbus(const char *msg, xbus_t *xbus);
+void put_xbus(const char *msg, xbus_t *xbus);
+int refcount_xbus(xbus_t *xbus);
/*
* An xbus is a transport layer for Xorcom Protocol commands
@@ -143,7 +162,7 @@ struct xbus {
char busname[XBUS_NAMELEN]; /* set by xbus_new() */
/* low-level bus drivers set these 2 fields */
- char location[XBUS_DESCLEN];
+ char connector[XBUS_DESCLEN];
char label[LABEL_SIZE];
byte revision; /* Protocol revision */
struct xbus_transport transport;
@@ -151,6 +170,8 @@ struct xbus {
int num;
struct xpd *xpds[MAX_XPDS];
+ int command_tick_counter;
+ int usec_nosend; /* Firmware flow control */
struct xframe_queue command_queue;
wait_queue_head_t command_queue_empty;
@@ -180,7 +201,6 @@ struct xbus {
#define dev_to_xbus(dev) container_of(dev, struct xbus, astribank)
spinlock_t lock;
- atomic_t xbus_ref_count; /* How many need this struct? */
/* PCM metrics */
struct timeval last_tx_sync;
@@ -198,6 +218,7 @@ struct xbus {
#endif
struct xbus_workqueue *worker;
+ struct semaphore in_worker;
/*
* Sync adjustment
@@ -206,11 +227,7 @@ struct xbus {
int sync_adjustment_offset;
long pll_updated_at;
- struct rw_semaphore in_use;
-#define XBUS_GET(xbus) down_read_trylock(&(xbus)->in_use)
-#define XBUS_PUT(xbus) up_read(&(xbus)->in_use)
-
- int num_xpds;
+ atomic_t num_xpds;
#ifdef XPP_DEBUGFS
struct dentry *debugfs_dir;
@@ -245,6 +262,7 @@ struct xframe {
size_t frame_maxlen;
byte *packets; /* max XFRAME_DATASIZE */
byte *first_free;
+ int usec_towait; /* prevent overflowing AB */
void *priv;
};
@@ -281,25 +299,43 @@ xpacket_t *xframe_next_packet(xframe_t *xframe, int len);
xpd_t *xpd_of(const xbus_t *xbus, int xpd_num);
xpd_t *xpd_byaddr(const xbus_t *xbus, uint unit, uint subunit);
-xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv);
-void xbus_remove(xbus_t *xbus);
-int xbus_activate(xbus_t *xbus);
-void xbus_disconnect(xbus_t *xbus);
-void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
-void xbus_populate(struct work_struct *work);
-#else
-void xbus_populate(void *data);
-#endif
-
-int xbus_register_xpd(xbus_t *xbus, xpd_t *xpd);
-int xbus_unregister_xpd(xbus_t *xbus, xpd_t *xpd);
+bool xbus_setstate(xbus_t *xbus, enum xbus_state newstate);
+xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, struct device *transport_device, void *priv);
+void xbus_free(xbus_t *xbus);
+int xbus_connect(xbus_t *xbus);
+int xbus_activate(xbus_t *xbus);
+void xbus_deactivate(xbus_t *xbus, bool is_disconnected);
+void xbus_disconnect(xbus_t *xbus);
+void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe);
+int xbus_process_worker(xbus_t *xbus);
+int waitfor_xpds(xbus_t *xbus, char *buf);
+
+int xbus_xpd_bind(xbus_t *xbus, xpd_t *xpd, int unit, int subunit);
+int xbus_xpd_unbind(xbus_t *xbus, xpd_t *xpd);
/* sysfs */
-int register_xpp_bus(void);
-void unregister_xpp_bus(void);
-int xbus_sysfs_create(xbus_t *xbus);
-void xbus_sysfs_remove(xbus_t *xbus);
+int xpd_device_register(xbus_t *xbus, xpd_t *xpd);
+void xpd_device_unregister(xpd_t *xpd);
+
+int xpp_driver_init(void);
+void xpp_driver_exit(void);
+int xbus_sysfs_create(xbus_t *xbus);
+void xbus_sysfs_remove(xbus_t *xbus);
+
+#ifdef OLD_HOTPLUG_SUPPORT_269
+/* Copy from new kernels lib/kobject_uevent.c */
+enum kobject_action {
+ KOBJ_ADD,
+ KOBJ_REMOVE,
+ KOBJ_CHANGE,
+ KOBJ_MOUNT,
+ KOBJ_UMOUNT,
+ KOBJ_OFFLINE,
+ KOBJ_ONLINE,
+};
+#endif
+
+void astribank_uevent_send(xbus_t *xbus, enum kobject_action act);
#endif /* XBUS_CORE_H */
diff --git a/kernel/xpp/xbus-pcm.c b/kernel/xpp/xbus-pcm.c
index ef92a88..4d75a43 100644
--- a/kernel/xpp/xbus-pcm.c
+++ b/kernel/xpp/xbus-pcm.c
@@ -36,10 +36,6 @@
static const char rcsid[] = "$Id$";
extern int debug;
-#ifdef XPP_EC_CHUNK
-#include "supress/ec_xpp.h"
-DEF_PARM_BOOL(xpp_ec, 0, 0444, "Do we use our own (1) or Zaptel's (0) echo canceller");
-#endif
#ifdef OPTIMIZE_CHANMUTE
static DEF_PARM_BOOL(optimize_chanmute, 1, 0644, "Optimize by muting inactive channels");
#endif
@@ -60,7 +56,7 @@ static struct xpp_ticker zaptel_ticker;
*/
static struct xpp_ticker *ref_ticker = NULL;
static spinlock_t ref_ticker_lock = SPIN_LOCK_UNLOCKED;
-static bool force_zaptel_sync = 0; /* from "/proc/xpp/sync" */
+static bool force_zaptel_sync = 0; /* from /sys/bus/astribanks/drivers/xppdrv/sync */
static xbus_t *global_ticker;
static struct xpp_ticker global_ticks_series;
@@ -84,13 +80,26 @@ static unsigned int zaptel_tick_count = 0;
static void send_drift(xbus_t *xbus, int drift);
+static void ticker_set_cycle(struct xpp_ticker *ticker, int cycle)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&ticker->lock, flags);
+ if(cycle < SYNC_ADJ_QUICK)
+ cycle = SYNC_ADJ_QUICK;
+ if(cycle > SYNC_ADJ_SLOW)
+ cycle = SYNC_ADJ_SLOW;
+ ticker->cycle = cycle;
+ spin_unlock_irqrestore(&ticker->lock, flags);
+}
+
static void xpp_ticker_init(struct xpp_ticker *ticker)
{
memset(ticker, 0, sizeof(*ticker));
+ spin_lock_init(&ticker->lock);
do_gettimeofday(&ticker->last_sample.tv);
ticker->first_sample = ticker->last_sample;
- ticker->cycle = SYNC_ADJ_QUICK;
- spin_lock_init(&ticker->lock);
+ ticker_set_cycle(ticker, SYNC_ADJ_QUICK);
}
static int xpp_ticker_step(struct xpp_ticker *ticker, const struct timeval *t)
@@ -131,7 +140,7 @@ static inline void xbus_drift_clear(xbus_t *xbus)
driftinfo_recalc(driftinfo);
driftinfo->calc_drift = 0;
- xbus->ticker.cycle = SYNC_ADJ_QUICK;
+ ticker_set_cycle(&xbus->ticker, SYNC_ADJ_QUICK);
}
void xpp_drift_init(xbus_t *xbus)
@@ -168,18 +177,23 @@ static void xpp_drift_step(xbus_t *xbus, const struct timeval *tv)
spin_lock_irqsave(&driftinfo->lock, flags);
cycled = xpp_ticker_step(&xbus->ticker, tv);
- if(ref_ticker && syncer && xbus->sync_mode == SYNC_MODE_PLL) {
+ if(ref_ticker && ref_ticker != &xbus->ticker && syncer && xbus->sync_mode == SYNC_MODE_PLL) {
int new_delta_tick = ticker->count - ref_ticker->count;
int lost_ticks = new_delta_tick - driftinfo->delta_tick;
driftinfo->delta_tick = new_delta_tick;
if(lost_ticks) {
+ static int rate_limit;
+
driftinfo->lost_ticks++;
driftinfo->lost_tick_count += abs(lost_ticks);
- XBUS_DBG(SYNC, xbus, "Lost %d tick%s\n",
- lost_ticks,
- (abs(lost_ticks) > 1) ? "s": "");
- ticker->cycle = SYNC_ADJ_QUICK;
+
+ if((rate_limit++ % 1003) == 0) {
+ XBUS_DBG(SYNC, xbus, "Lost %d tick%s\n",
+ lost_ticks,
+ (abs(lost_ticks) > 1) ? "s": "");
+ }
+ ticker_set_cycle(ticker, SYNC_ADJ_QUICK);
if(abs(lost_ticks) > 100)
ticker->count = ref_ticker->count;
} else {
@@ -198,13 +212,15 @@ static void xpp_drift_step(xbus_t *xbus, const struct timeval *tv)
*/
if(usec_delta > 0 && xbus->sync_adjustment > -SYNC_ADJ_MAX) {
XBUS_DBG(SYNC, xbus, "Pullback usec_delta=%ld\n", usec_delta);
+ driftinfo->kicks_down++;
send_drift(xbus, -SYNC_ADJ_MAX); /* emergency push */
}
if(usec_delta < 0 && xbus->sync_adjustment < SYNC_ADJ_MAX) {
XBUS_DBG(SYNC, xbus, "Pushback usec_delta=%ld\n", usec_delta);
+ driftinfo->kicks_up++;
send_drift(xbus, SYNC_ADJ_MAX); /* emergency push */
}
- ticker->cycle = SYNC_ADJ_QUICK;
+ ticker_set_cycle(ticker, SYNC_ADJ_QUICK);
nofix = 1;
} else {
/* good data, use it */
@@ -228,15 +244,13 @@ static void xpp_drift_step(xbus_t *xbus, const struct timeval *tv)
offset = driftinfo->calc_drift + factor;
/* for large median, push some more */
if(abs(driftinfo->median) >= 300) { /* more than 2 usb uframes */
- ticker->cycle = SYNC_ADJ_QUICK;
+ ticker_set_cycle(ticker, SYNC_ADJ_QUICK);
XBUS_NOTICE(xbus,
"Back to quick: median=%d\n",
driftinfo->median);
}
} else {
- ticker->cycle += 500;
- if(ticker->cycle >= SYNC_ADJ_SLOW)
- ticker->cycle = SYNC_ADJ_SLOW;
+ //ticker_set_cycle(ticker, ticker->cycle + 500);
}
driftinfo->calc_drift = offset;
XBUS_DBG(SYNC, xbus,
@@ -275,16 +289,30 @@ const char *sync_mode_name(enum sync_mode mode)
static void xpp_set_syncer(xbus_t *xbus, bool on)
{
+ unsigned long flags;
+
+ spin_lock_irqsave(&ref_ticker_lock, flags);
+ if(!xbus) { /* Special case, no more syncers */
+ DBG(SYNC, "No more syncers\n");
+ syncer = NULL;
+ if(ref_ticker != &zaptel_ticker)
+ ref_ticker = NULL;
+ goto out;
+ }
if(syncer != xbus && on) {
XBUS_DBG(SYNC, xbus, "New syncer\n");
syncer = xbus;
} else if(syncer == xbus && !on) {
XBUS_DBG(SYNC, xbus, "Lost syncer\n");
syncer = NULL;
+ if(ref_ticker != &zaptel_ticker)
+ ref_ticker = NULL;
} else
XBUS_DBG(SYNC, xbus, "ignore %s (current syncer: %s)\n",
(on)?"ON":"OFF",
(syncer) ? syncer->busname : "NO-SYNC");
+out:
+ spin_unlock_irqrestore(&ref_ticker_lock, flags);
}
static void xbus_command_timer(unsigned long param)
@@ -314,6 +342,7 @@ void xbus_set_command_timer(xbus_t *xbus, bool on)
XBUS_DBG(SYNC, xbus, "del_timer\n");
del_timer(&xbus->command_timer);
}
+ xbus->self_ticking = ! on;
}
/*
@@ -323,33 +352,30 @@ void got_new_syncer(xbus_t *xbus, enum sync_mode mode, int drift)
{
unsigned long flags;
- XBUS_DBG(SYNC, xbus, "Mode %s (%d), drift=%d (pcm_rx_counter=%d)\n",
- sync_mode_name(mode), mode, drift, atomic_read(&xbus->pcm_rx_counter));
spin_lock_irqsave(&xbus->lock, flags);
xbus->sync_adjustment = (signed char)drift;
if(xbus->sync_mode == mode) {
- XBUS_DBG(SYNC, xbus, "Already in mode '%s'. Ignored\n", sync_mode_name(mode));
+ /* XBUS_DBG(SYNC, xbus, "Already in mode '%s'. Ignored\n", sync_mode_name(mode)); */
goto out;
}
+ XBUS_DBG(SYNC, xbus, "Mode %s (%d), drift=%d (pcm_rx_counter=%d)\n",
+ sync_mode_name(mode), mode, drift, atomic_read(&xbus->pcm_rx_counter));
switch(mode) {
case SYNC_MODE_AB:
xbus->sync_mode = mode;
xbus_set_command_timer(xbus, 0);
- xbus->self_ticking = 1;
xpp_set_syncer(xbus, 1);
global_ticker = xbus;
break;
case SYNC_MODE_PLL:
xbus->sync_mode = mode;
xbus_set_command_timer(xbus, 0);
- xbus->self_ticking = 1;
xpp_set_syncer(xbus, 0);
global_ticker = xbus;
break;
case SYNC_MODE_NONE: /* lost sync source */
xbus->sync_mode = mode;
xbus_set_command_timer(xbus, 1);
- xbus->self_ticking = 0;
xpp_set_syncer(xbus, 0);
break;
case SYNC_MODE_QUERY: /* ignore */
@@ -366,6 +392,9 @@ void xbus_request_sync(xbus_t *xbus, enum sync_mode mode)
BUG_ON(!xbus);
XBUS_DBG(SYNC, xbus, "sent request (mode=%d)\n", mode);
CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, mode, 0);
+ if(mode == SYNC_MODE_NONE) {
+ xbus_set_command_timer(xbus, 1);
+ }
}
static void reset_sync_counters(void)
@@ -374,7 +403,7 @@ static void reset_sync_counters(void)
//DBG(SYNC, "%d\n", atomic_read(&xpp_tick_counter));
for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = get_xbus(i);
+ xbus_t *xbus = xbus_num(i);
if(!xbus)
continue;
@@ -384,20 +413,15 @@ static void reset_sync_counters(void)
* - Or maybe they didn't answer us in the first place
(e.g: wrong firmware version, etc).
*/
- if (TRANSPORT_RUNNING(xbus) && xbus->self_ticking) {
- if(XBUS_GET(xbus)) {
+ if(xbus->self_ticking) {
+ if(XBUS_IS(xbus, DISCONNECTED)) {
+ XBUS_DBG(GENERAL, xbus,
+ "Dropped packet. Is shutting down.\n");
+ } else {
/* Reset sync LEDs once in a while */
CALL_PROTO(GLOBAL, RESET_SYNC_COUNTERS, xbus, NULL);
- XBUS_PUT(xbus);
- } else {
- static int rate_limit;
-
- if((rate_limit++ % 1003) == 0)
- XBUS_DBG(GENERAL, xbus,
- "Dropped packet. Is shutting down. (%d)\n", rate_limit);
}
}
- put_xbus(xbus);
}
}
@@ -448,14 +472,8 @@ int zaptel_sync_tick(struct zt_span *span, int is_master)
if(is_master) {
static int rate_limit;
- if(xpd->xbus != syncer && ((rate_limit % 1003) == 0)) {
- XPD_ERR(xpd,
- "Zaptel master, but syncer=%s\n",
- xpd->xbus->busname);
- }
- if((rate_limit % 5003) == 0)
- XPD_NOTICE(xpd, "Zaptel master: ignore ZAPTEL sync\n");
- rate_limit++;
+ if((rate_limit++ % 1003) == 0)
+ XPD_NOTICE(xpd, "Is a ZAPTEL sync master: ignore sync from ZAPTEL\n");
goto noop;
}
/* Now we know for sure someone else is zaptel sync master */
@@ -464,7 +482,7 @@ int zaptel_sync_tick(struct zt_span *span, int is_master)
if((rate_limit++ % 5003) == 0)
XBUS_DBG(SYNC, syncer,
- "Already a syncer, ignore ZAPTEL sync\n");
+ "is a SYNCer: ignore sync from ZAPTEL\n");
goto noop;
}
/* ignore duplicate calls from all our registered spans */
@@ -491,12 +509,15 @@ noop:
* if new_syncer is NULL, than we move all to SYNC_MODE_PLL
* for ZAPTEL sync.
*/
-static void update_sync_master(xbus_t *new_syncer)
+static void update_sync_master(xbus_t *new_syncer, bool force_zaptel)
{
- const char *msg = (force_zaptel_sync) ? "ZAPTEL" : "NO-SYNC";
+ const char *msg;
int i;
unsigned long flags;
+ WARN_ON(new_syncer && force_zaptel); /* Ambigous */
+ force_zaptel_sync = force_zaptel;
+ msg = (force_zaptel_sync) ? "ZAPTEL" : "NO-SYNC";
DBG(SYNC, "%s => %s\n",
(syncer) ? syncer->busname : msg,
(new_syncer) ? new_syncer->busname : msg);
@@ -504,6 +525,12 @@ static void update_sync_master(xbus_t *new_syncer)
* This global locking protects:
* - The ref_ticker so it won't be used while we change it.
* - The xbus_drift_clear() from corrupting driftinfo data.
+ * It's important to set ref_ticker now:
+ * - We cannot make the new xbus a syncer yet (until we get
+ * a reply from AB). Maybe it's still not self_ticking, so
+ * we must keep the timer for the command_queue to function.
+ * - However, we must not send drift commands to it, because
+ * they'll revert it to PLL instead of AB.
*/
spin_lock_irqsave(&ref_ticker_lock, flags);
if(syncer)
@@ -524,16 +551,15 @@ static void update_sync_master(xbus_t *new_syncer)
DBG(SYNC, "stop unwanted syncers\n");
/* Shut all down except the wanted sync master */
for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = get_xbus(i);
+ xbus_t *xbus = xbus_num(i);
if(!xbus)
continue;
- if(TRANSPORT_RUNNING(xbus) && xbus != new_syncer) {
+ if(!XBUS_IS(xbus, DISCONNECTED) && xbus != new_syncer) {
if(xbus->self_ticking)
xbus_request_sync(xbus, SYNC_MODE_PLL);
else
XBUS_DBG(SYNC, xbus, "Not self_ticking yet. Ignore\n");
}
- put_xbus(xbus);
}
}
@@ -541,39 +567,41 @@ void elect_syncer(const char *msg)
{
int i;
int j;
- uint timing_priority = 0;
+ uint timing_priority = INT_MAX;
xpd_t *best_xpd = NULL;
xbus_t *the_xbus = NULL;
for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = get_xbus(i);
+ xbus_t *xbus = xbus_num(i);
if(!xbus)
continue;
- if(!the_xbus)
- the_xbus = xbus;
- if (TRANSPORT_RUNNING(xbus)) {
+ if(XBUS_IS(xbus, READY)) {
+ if(!the_xbus)
+ the_xbus = xbus; /* First candidate */
for(j = 0; j < MAX_XPDS; j++) {
xpd_t *xpd = xpd_of(xbus, j);
if(!xpd || !xpd->card_present)
continue;
- if(xpd->timing_priority > timing_priority) {
+ if(xpd->timing_priority > 0 && xpd->timing_priority < timing_priority) {
timing_priority = xpd->timing_priority;
best_xpd = xpd;
}
}
}
- put_xbus(xbus);
}
if(best_xpd) {
the_xbus = best_xpd->xbus;
XPD_DBG(SYNC, best_xpd, "%s: elected with priority %d\n", msg, timing_priority);
} else if(the_xbus) {
XBUS_DBG(SYNC, the_xbus, "%s: elected\n", msg);
- } else
+ } else {
DBG(SYNC, "%s: No more syncers\n", msg);
+ xpp_set_syncer(NULL, 0);
+ the_xbus = NULL;
+ }
if(the_xbus != syncer)
- update_sync_master(the_xbus);
+ update_sync_master(the_xbus, force_zaptel_sync);
}
/*
@@ -640,35 +668,10 @@ void fill_beep(u_char *buf, int num, int duration)
memcpy(buf, snd, ZT_CHUNKSIZE);
}
-#ifdef XPP_EC_CHUNK
-/*
- * Taken from zaptel.c
- */
-static inline void xpp_ec_chunk(struct zt_chan *chan, unsigned char *rxchunk, const unsigned char *txchunk)
-{
- int16_t rxlin;
- int x;
- unsigned long flags;
-
- /* Perform echo cancellation on a chunk if necessary */
- if (!chan->ec)
- return;
- spin_lock_irqsave(&chan->lock, flags);
- for (x=0;x<ZT_CHUNKSIZE;x++) {
- rxlin = ZT_XLAW(rxchunk[x], chan);
- rxlin = xpp_echo_can_update(chan->ec, ZT_XLAW(txchunk[x], chan), rxlin);
- rxchunk[x] = ZT_LIN2X((int)rxlin, chan);
- }
- spin_unlock_irqrestore(&chan->lock, flags);
-}
-#endif
-
static void do_ec(xpd_t *xpd)
{
-#ifdef WITH_ECHO_SUPPRESSION
- int i;
+ int i;
- /* FIXME: need to Echo cancel double buffered data */
for (i = 0;i < xpd->span.channels; i++) {
struct zt_chan *chan = XPD_CHAN(xpd, i);
@@ -676,17 +679,10 @@ static void do_ec(xpd_t *xpd)
continue;
if(!IS_SET(xpd->wanted_pcm_mask, i)) /* No ec for unwanted PCM */
continue;
-#ifdef XPP_EC_CHUNK
- /* even if defined, parameterr xpp_ec can override at run-time */
- if (xpp_ec)
- xpp_ec_chunk(chan, chan->readchunk, xpd->ec_chunk2[i]);
- else
-#endif
- zt_ec_chunk(chan, chan->readchunk, xpd->ec_chunk2[i]);
+ zt_ec_chunk(chan, chan->readchunk, xpd->ec_chunk2[i]);
memcpy(xpd->ec_chunk2[i], xpd->ec_chunk1[i], ZT_CHUNKSIZE);
memcpy(xpd->ec_chunk1[i], chan->writechunk, ZT_CHUNKSIZE);
}
-#endif
}
#if 0
@@ -711,29 +707,6 @@ int (*hooksig)(struct zt_chan *chan, zt_txsig_t hookstate);
int (*sethook)(struct zt_chan *chan, int hookstate);
#endif
-int xpp_echocan(struct zt_chan *chan, int len)
-{
-#ifdef XPP_EC_CHUNK
- if(len == 0) { /* shut down */
- /* zaptel calls this also during channel initialization */
- if(chan->ec) {
- xpp_echo_can_free(chan->ec);
- }
- return 0;
- }
- if(chan->ec) {
- ERR("%s: Trying to override an existing EC (%p)\n", __FUNCTION__, chan->ec);
- return -EINVAL;
- }
- chan->ec = xpp_echo_can_create(len, 0);
- if(!chan->ec) {
- ERR("%s: Failed creating xpp EC (len=%d)\n", __FUNCTION__, len);
- return -EINVAL;
- }
-#endif
- return 0;
-}
-
static bool pcm_valid(xpd_t *xpd, xpacket_t *pack)
{
xpp_line_t lines = RPACKET_FIELD(pack, GLOBAL, PCM_READ, lines);
@@ -776,7 +749,7 @@ static inline void pcm_frame_out(xbus_t *xbus, xframe_t *xframe)
spin_lock_irqsave(&xbus->lock, flags);
do_gettimeofday(&now);
- if(unlikely(disable_pcm || !TRANSPORT_RUNNING(xbus)))
+ if(unlikely(disable_pcm || !XBUS_IS(xbus, READY)))
goto dropit;
if(XPACKET_ADDR_SYNC((xpacket_t *)xframe->packets)) {
usec = usec_diff(&now, &xbus->last_tx_sync);
@@ -1124,7 +1097,50 @@ void xframe_receive_pcm(xbus_t *xbus, xframe_t *xframe)
xbus->xbus_frag_count++;
}
-#ifdef CONFIG_PROC_FS
+int exec_sync_command(const char *buf, size_t count)
+{
+ int ret = count;
+ int xbusno;
+ xbus_t *xbus;
+
+ if(strncmp("ZAPTEL", buf, 6) == 0) { /* Ignore the newline */
+ DBG(SYNC, "ZAPTEL");
+ update_sync_master(NULL, 1);
+ } else if(sscanf(buf, "SYNC=%d", &xbusno) == 1) {
+ DBG(SYNC, "SYNC=%d\n", xbusno);
+ if((xbus = xbus_num(xbusno)) == NULL) {
+ ERR("No bus %d exists\n", xbusno);
+ return -ENXIO;
+ }
+ update_sync_master(xbus, 0);
+ } else if(sscanf(buf, "QUERY=%d", &xbusno) == 1) {
+ DBG(SYNC, "QUERY=%d\n", xbusno);
+ if((xbus = xbus_num(xbusno)) == NULL) {
+ ERR("No bus %d exists\n", xbusno);
+ return -ENXIO;
+ }
+ CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_QUERY, 0);
+ } else {
+ ERR("%s: cannot parse '%s'\n", __FUNCTION__, buf);
+ ret = -EINVAL;
+ }
+ return ret;
+}
+
+int fill_sync_string(char *buf, size_t count)
+{
+ int len = 0;
+
+ if(!syncer) {
+ len += snprintf(buf, count, "%s\n",
+ (force_zaptel_sync) ? "ZAPTEL" : "NO-SYNC");
+ } else
+ len += snprintf(buf, count, "SYNC=%02d\n", syncer->num);
+ return len;
+}
+
+#ifdef OLD_PROC
+#ifdef CONFIG_PROC_FS
static int proc_sync_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
@@ -1133,17 +1149,13 @@ static int proc_sync_read(char *page, char **start, off_t off, int count, int *e
unsigned long usec;
do_gettimeofday(&now);
+ NOTICE("%s: DEPRECATED: %s[%d] read from /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
len += sprintf(page + len, "# To modify sync source write into this file:\n");
len += sprintf(page + len, "# ZAPTEL - Another zaptel device provide sync\n");
len += sprintf(page + len, "# SYNC=nn - XBUS-nn provide sync\n");
len += sprintf(page + len, "# QUERY=nn - Query XBUS-nn for sync information (DEBUG)\n");
- if(!syncer) {
- if(force_zaptel_sync)
- len += sprintf(page + len, "ZAPTEL\n");
- else
- len += sprintf(page + len, "NO-SYNC\n");
- } else
- len += sprintf(page + len, "SYNC=%02d\n", syncer->num);
+ len += fill_sync_string(page + len, PAGE_SIZE - len);
#ifdef ZAPTEL_SYNC_TICK
if(force_zaptel_sync) {
len += sprintf(page + len,
@@ -1177,86 +1189,31 @@ static int proc_sync_read(char *page, char **start, off_t off, int count, int *e
static int proc_sync_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
{
char buf[MAX_PROC_WRITE];
- int xbus_num;
- int xpd_num;
- xbus_t *xbus;
- xpd_t *xpd;
// DBG(SYNC, "%s: count=%ld\n", __FUNCTION__, count);
+ NOTICE("%s: DEPRECATED: %s[%d] write to /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
if(count >= MAX_PROC_WRITE)
return -EINVAL;
if(copy_from_user(buf, buffer, count))
return -EFAULT;
buf[count] = '\0';
- if(strncmp("ZAPTEL", buf, 6) == 0) {
- DBG(SYNC, "ZAPTEL\n");
- force_zaptel_sync=1;
- update_sync_master(NULL);
- } else if(sscanf(buf, "SYNC=%d", &xbus_num) == 1) {
- DBG(SYNC, "SYNC=%d\n", xbus_num);
- if((xbus = get_xbus(xbus_num)) == NULL) {
- ERR("No bus %d exists\n", xbus_num);
- return -ENXIO;
- }
- update_sync_master(xbus);
- put_xbus(xbus);
- } else if(sscanf(buf, "QUERY=%d", &xbus_num) == 1) {
- DBG(SYNC, "QUERY=%d\n", xbus_num);
- if((xbus = get_xbus(xbus_num)) == NULL) {
- ERR("No bus %d exists\n", xbus_num);
- return -ENXIO;
- }
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_QUERY, 0);
- put_xbus(xbus);
- } else if(sscanf(buf, "%d %d", &xbus_num, &xpd_num) == 2) {
- NOTICE("Using deprecated syntax to update %s file\n",
- PROC_SYNC);
- if(xpd_num != 0) {
- ERR("Currently can only set sync for XPD #0\n");
- return -EINVAL;
- }
- if((xbus = get_xbus(xbus_num)) == NULL) {
- ERR("No bus %d exists\n", xbus_num);
- return -ENXIO;
- }
- if((xpd = xpd_of(xbus, xpd_num)) == NULL) {
- XBUS_ERR(xbus, "No xpd %d exists\n", xpd_num);
- put_xbus(xbus);
- return -ENXIO;
- }
- update_sync_master(xbus);
- put_xbus(xbus);
- } else {
- ERR("%s: cannot parse '%s'\n", __FUNCTION__, buf);
- count = -EINVAL;
- }
- return count;
+ return exec_sync_command(buf, count);
}
static struct proc_dir_entry *top;
#endif
+#endif /* OLD_PROC */
int xbus_pcm_init(struct proc_dir_entry *toplevel)
{
int ret = 0;
-#ifdef CONFIG_PROC_FS
- struct proc_dir_entry *ent;
-#endif
#ifdef OPTIMIZE_CHANMUTE
INFO("FEATURE: with CHANMUTE optimization (%sactivated)\n",
(optimize_chanmute)?"":"de");
#endif
-#ifdef WITH_ECHO_SUPPRESSION
- INFO("FEATURE: with ECHO_SUPPRESSION\n");
-#else
- INFO("FEATURE: without ECHO_SUPPRESSION\n");
-#endif
- if(xpp_ec)
- INFO("FEATURE: with XPP_EC_CHUNK\n");
- else
- INFO("FEATURE: without XPP_EC_CHUNK\n");
#ifdef ZAPTEL_SYNC_TICK
INFO("FEATURE: with sync_tick() from ZAPTEL\n");
#else
@@ -1264,34 +1221,40 @@ int xbus_pcm_init(struct proc_dir_entry *toplevel)
#endif
xpp_ticker_init(&global_ticks_series);
xpp_ticker_init(&zaptel_ticker);
-#ifdef CONFIG_PROC_FS
- top = toplevel;
- ent = create_proc_entry(PROC_SYNC, 0644, top);
- if(!ent) {
- ret = -EFAULT;
- goto err;
+#ifdef OLD_PROC
+#ifdef CONFIG_PROC_FS
+ {
+ struct proc_dir_entry *ent;
+
+ top = toplevel;
+ ent = create_proc_entry(PROC_SYNC, 0644, top);
+ if(ent) {
+ ent->read_proc = proc_sync_read;
+ ent->write_proc = proc_sync_write;
+ ent->data = NULL;
+ } else {
+ ret = -EFAULT;
+ }
}
- ent->read_proc = proc_sync_read;
- ent->write_proc = proc_sync_write;
- ent->data = NULL;
#endif
-err:
+#endif /* OLD_PROC */
return ret;
}
void xbus_pcm_shutdown(void)
{
+#ifdef OLD_PROC
#ifdef CONFIG_PROC_FS
DBG(GENERAL, "Removing '%s' from proc\n", PROC_SYNC);
remove_proc_entry(PROC_SYNC, top);
#endif
+#endif /* OLD_PROC */
}
EXPORT_SYMBOL(xbus_request_sync);
EXPORT_SYMBOL(got_new_syncer);
EXPORT_SYMBOL(elect_syncer);
-EXPORT_SYMBOL(xpp_echocan);
#ifdef ZAPTEL_SYNC_TICK
EXPORT_SYMBOL(zaptel_sync_tick);
#endif
diff --git a/kernel/xpp/xbus-pcm.h b/kernel/xpp/xbus-pcm.h
index b4c0cf6..dbfecde 100644
--- a/kernel/xpp/xbus-pcm.h
+++ b/kernel/xpp/xbus-pcm.h
@@ -80,6 +80,8 @@ struct xpp_drift {
int median; /* (max + min) / 2 */
int jitter; /* max - min */
int calc_drift;
+ int kicks_up;
+ int kicks_down;
spinlock_t lock;
};
@@ -112,17 +114,12 @@ void got_new_syncer(xbus_t *xbus, enum sync_mode mode, int drift);
int xbus_command_queue_tick(xbus_t *xbus);
void xbus_reset_counters(xbus_t *xbus);
void elect_syncer(const char *msg);
-int xpp_echocan(struct zt_chan *chan, int len);
+int exec_sync_command(const char *buf, size_t count);
+int fill_sync_string(char *buf, size_t count);
#ifdef ZAPTEL_SYNC_TICK
int zaptel_sync_tick(struct zt_span *span, int is_master);
#endif
-#ifdef XPP_EC_CHUNK
-extern int xpp_ec;
-#else
-#define xpp_ec 0
-#endif
-
#ifdef DEBUG_PCMTX
extern int pcmtx;
extern int pcmtx_chan;
diff --git a/kernel/xpp/xbus-sysfs.c b/kernel/xpp/xbus-sysfs.c
index 87a58f1..ca24648 100644
--- a/kernel/xpp/xbus-sysfs.c
+++ b/kernel/xpp/xbus-sysfs.c
@@ -48,36 +48,243 @@ static const char rcsid[] = "$Id$";
/* Command line parameters */
extern int debug;
+/*--------- xpp driver attributes -*/
+static ssize_t sync_show(struct device_driver *driver, char *buf)
+{
+ DBG(SYNC, "\n");
+ return fill_sync_string(buf, PAGE_SIZE);
+}
+
+static ssize_t sync_store(struct device_driver *driver, const char *buf, size_t count)
+{
+ /* DBG(SYNC, "%s\n", buf); */
+ return exec_sync_command(buf, count);
+}
+
+static struct driver_attribute xpp_attrs[] = {
+ __ATTR(sync, S_IRUGO | S_IWUSR, sync_show, sync_store),
+ __ATTR_NULL,
+};
+
+/*--------- Sysfs Bus handling ----*/
+static DEVICE_ATTR_READER(xbus_state_show, dev, buf)
+{
+ xbus_t *xbus;
+ int ret;
-/* Kernel versions... */
+ xbus = dev_to_xbus(dev);
+ ret = XBUS_STATE(xbus);
+ ret = snprintf(buf, PAGE_SIZE, "%s (%d)\n",
+ xbus_statename(ret), ret);
+ return ret;
+}
+
+static DEVICE_ATTR_WRITER(xbus_state_store, dev, buf, count)
+{
+ xbus_t *xbus;
+
+ xbus = dev_to_xbus(dev);
+ XBUS_DBG(GENERAL, xbus, "%s\n", buf);
+ if(strncmp(buf, "stop", 4) == 0)
+ xbus_deactivate(xbus, 0);
+ else if(XBUS_IS(xbus, IDLE) && strncmp(buf, "start", 5) == 0)
+ xbus_activate(xbus);
+ else {
+ XBUS_NOTICE(xbus, "%s: Illegal action %s in state %s. Ignored.\n",
+ __FUNCTION__, buf,
+ xbus_statename(XBUS_STATE(xbus)));
+ return -EINVAL;
+ }
+ return count;
+}
+
+static DEVICE_ATTR_READER(status_show, dev, buf)
+{
+ xbus_t *xbus;
+ int ret;
+
+ xbus = dev_to_xbus(dev);
+ ret = snprintf(buf, PAGE_SIZE, "%s\n", (!XBUS_IS(xbus, DISCONNECTED))?"connected":"missing");
+ return ret;
+}
+
+static DEVICE_ATTR_READER(timing_show, dev, buf)
+{
+ xbus_t *xbus;
+ struct xpp_drift *driftinfo;
+ int len = 0;
+ struct timeval now;
+
+ do_gettimeofday(&now);
+ xbus = dev_to_xbus(dev);
+ driftinfo = &xbus->drift;
+ len += snprintf(buf + len, PAGE_SIZE - len, "DRIFT: %-3s", sync_mode_name(xbus->sync_mode));
+ if(xbus->sync_mode == SYNC_MODE_PLL) {
+ len += snprintf(buf + len, PAGE_SIZE - len,
+ " %5d: jitter %4d median %4d calc_drift %3d lost (%4d,%4d) : ",
+ xbus->ticker.cycle,
+ driftinfo->jitter, driftinfo->median,
+ driftinfo->calc_drift,
+ driftinfo->lost_ticks, driftinfo->lost_tick_count);
+ len += snprintf(buf + len, PAGE_SIZE - len,
+ "DRIFT %3d %ld sec ago",
+ xbus->sync_adjustment,
+ (xbus->pll_updated_at == 0) ? 0 : now.tv_sec - xbus->pll_updated_at);
+ }
+ len += snprintf(buf + len, PAGE_SIZE - len, "\n");
+ return len;
+}
+
+#ifdef SAMPLE_TICKS
/*
- * Hotplug replaced with uevent in 2.6.16
+ * tick sampling: Measure offset from reference ticker:
+ * - Recording start when writing to:
+ * /sys/bus/astribanks/devices/xbus-??/samples
+ * - Recording ends when filling SAMPLE_SIZE ticks
+ * - Results are read from the same sysfs file.
+ * - Trying to read/write during recording, returns -EBUSY.
*/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
-#define OLD_HOPLUG_SUPPORT // for older kernels
+static DEVICE_ATTR_READER(samples_show, dev, buf)
+{
+ xbus_t *xbus;
+ int len = 0;
+ int i;
+
+ xbus = dev_to_xbus(dev);
+ if(xbus->sample_running)
+ return -EBUSY;
+ for(i = 0; i < SAMPLE_SIZE; i++) {
+ if(len > PAGE_SIZE - 20)
+ break;
+ len += snprintf(buf + len, PAGE_SIZE - len, "%d\n", xbus->sample_ticks[i]);
+ }
+ return len;
+}
+
+static DEVICE_ATTR_WRITER(samples_store, dev, buf, count)
+{
+ xbus_t *xbus;
+
+ xbus = dev_to_xbus(dev);
+ if(xbus->sample_running)
+ return -EBUSY;
+ memset(xbus->sample_ticks, 0, sizeof(*xbus->sample_ticks));
+ xbus->sample_pos = 0;
+ xbus->sample_running = 1;
+ return count;
+}
#endif
+/*
+ * Clear statistics
+ */
+static DEVICE_ATTR_WRITER(cls_store, dev, buf, count)
+{
+ xbus_t *xbus;
+ struct xpp_drift *driftinfo;
+
+ xbus = dev_to_xbus(dev);
+ driftinfo = &xbus->drift;
+ driftinfo->lost_ticks = 0;
+ driftinfo->lost_tick_count = 0;
+ xbus->min_tx_sync = INT_MAX;
+ xbus->max_tx_sync = 0;
+ xbus->min_rx_sync = INT_MAX;
+ xbus->max_rx_sync = 0;
+#ifdef SAMPLE_TICKS
+ memset(xbus->sample_ticks, 0, sizeof(*xbus->sample_ticks));
+#endif
+ return count;
+}
+
+static DEVICE_ATTR_READER(waitfor_xpds_show, dev, buf)
+{
+ xbus_t *xbus;
+ int len;
+
+ xbus = dev_to_xbus(dev);
+ len = waitfor_xpds(xbus, buf);
+ return len;
+}
+
+static DEVICE_ATTR_READER(driftinfo_show, dev, buf)
+{
+ xbus_t *xbus;
+ struct xpp_drift *di;
+ struct xpp_ticker *ticker;
+ int len = 0;
+
+ xbus = dev_to_xbus(dev);
+ di = &xbus->drift;
+ ticker = &xbus->ticker;
+#define SHOW(ptr,item) len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %d\n", #item, (ptr)->item)
+ SHOW(xbus, sync_adjustment);
+ SHOW(di, wanted_offset);
+ SHOW(di, delta_tick);
+ SHOW(di, lost_ticks);
+ SHOW(di, kicks_up);
+ SHOW(di, kicks_down);
+ SHOW(di, delta_min);
+ SHOW(di, delta_max);
+ SHOW(di, median);
+ SHOW(di, jitter);
+ SHOW(di, calc_drift);
+ SHOW(ticker, cycle);
+ SHOW(ticker, tick_period);
+#undef SHOW
+ return len;
+}
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
-#define DEVICE_ATTR_READER(name,dev,buf) \
- ssize_t name(struct device *dev, struct device_attribute *attr, char *buf)
-#define DEVICE_ATTR_WRITER(name,dev,buf, count) \
- ssize_t name(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+#define xbus_attr(field, format_string) \
+static ssize_t \
+field##_show(struct device *dev, struct device_attribute *attr, char *buf) \
+{ \
+ xbus_t *xbus; \
+ \
+ xbus = dev_to_xbus(dev); \
+ return sprintf (buf, format_string, xbus->field); \
+}
#else
-#define DEVICE_ATTR_READER(name,dev,buf) \
- ssize_t name(struct device *dev, char *buf)
-#define DEVICE_ATTR_WRITER(name,dev,buf, count) \
- ssize_t name(struct device *dev, const char *buf, size_t count)
+#define xbus_attr(field, format_string) \
+static ssize_t \
+field##_show(struct device *dev, char *buf) \
+{ \
+ xbus_t *xbus; \
+ \
+ xbus = dev_to_xbus(dev); \
+ return sprintf (buf, format_string, xbus->field); \
+}
#endif
-/*--------- Sysfs Bus handling ----*/
-static int xpp_bus_match(struct device *dev, struct device_driver *driver)
+xbus_attr(connector, "%s\n");
+xbus_attr(label, "%s\n");
+
+static struct device_attribute xbus_dev_attrs[] = {
+ __ATTR_RO(connector),
+ __ATTR_RO(label),
+ __ATTR_RO(status),
+ __ATTR_RO(timing),
+ __ATTR_RO(waitfor_xpds),
+ __ATTR_RO(driftinfo),
+ __ATTR(cls, S_IWUSR, NULL, cls_store),
+ __ATTR(xbus_state, S_IRUGO | S_IWUSR, xbus_state_show, xbus_state_store),
+#ifdef SAMPLE_TICKS
+ __ATTR(samples, S_IWUSR | S_IRUGO, samples_show, samples_store),
+#endif
+ __ATTR_NULL,
+};
+
+
+static int astribank_match(struct device *dev, struct device_driver *driver)
{
- DBG(GENERAL, "dev->bus_id = %s, driver->name = %s\n", dev->bus_id, driver->name);
+ DBG(DEVICES, "SYSFS MATCH: dev->bus_id = %s, driver->name = %s\n",
+ dev->bus_id, driver->name);
return 1;
}
-#ifdef OLD_HOPLUG_SUPPORT
-static int xpp_bus_hotplug(struct device *dev, char **envp, int envnum, char *buff, int bufsize)
+#ifdef OLD_HOTPLUG_SUPPORT
+static int astribank_hotplug(struct device *dev, char **envp, int envnum, char *buff, int bufsize)
{
xbus_t *xbus;
@@ -109,7 +316,7 @@ static int xpp_bus_hotplug(struct device *dev, char **envp, int envnum, char *bu
return err; \
} while (0)
-static int xpp_bus_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
+static int astribank_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
{
xbus_t *xbus;
int i = 0;
@@ -119,11 +326,12 @@ static int xpp_bus_uevent(struct device *dev, char **envp, int num_envp, char *b
if(!dev)
return -ENODEV;
xbus = dev_to_xbus(dev);
- DBG(GENERAL, "bus_id=%s xbus=%s\n", dev->bus_id, xbus->busname);
+ DBG(GENERAL, "SYFS bus_id=%s xbus=%s\n", dev->bus_id, xbus->busname);
XBUS_VAR_BLOCK;
envp[i] = NULL;
return 0;
}
+
#else
#define XBUS_ADD_UEVENT_VAR(fmt, val...) \
do { \
@@ -132,7 +340,7 @@ static int xpp_bus_uevent(struct device *dev, char **envp, int num_envp, char *b
return err; \
} while (0)
-static int xpp_bus_uevent(struct device *dev, struct kobj_uevent_env *kenv)
+static int astribank_uevent(struct device *dev, struct kobj_uevent_env *kenv)
{
xbus_t *xbus;
extern char *initdir;
@@ -140,232 +348,403 @@ static int xpp_bus_uevent(struct device *dev, struct kobj_uevent_env *kenv)
if(!dev)
return -ENODEV;
xbus = dev_to_xbus(dev);
- DBG(GENERAL, "bus_id=%s xbus=%s\n", dev->bus_id, xbus->busname);
+ DBG(GENERAL, "SYFS bus_id=%s xbus=%s\n", dev->bus_id, xbus->busname);
XBUS_VAR_BLOCK;
return 0;
}
+
#endif
-#endif /* OLD_HOPLUG_SUPPORT */
+#endif /* OLD_HOTPLUG_SUPPORT */
-static void xpp_bus_release(struct device *dev)
+void astribank_uevent_send(xbus_t *xbus, enum kobject_action act)
{
- DBG(GENERAL, "\n");
+ struct kobject *kobj;
+
+ kobj = &xbus->astribank.kobj;
+ XBUS_DBG(DEVICES, xbus, "SYFS bus_id=%s action=%d\n",
+ xbus->astribank.bus_id, act);
+
+#if defined(OLD_HOTPLUG_SUPPORT_269)
+ {
+ /* Copy from new kernels lib/kobject_uevent.c */
+ static const char *str[] = {
+ [KOBJ_ADD] "add",
+ [KOBJ_REMOVE] "remove",
+ [KOBJ_CHANGE] "change",
+ [KOBJ_MOUNT] "mount",
+ [KOBJ_UMOUNT] "umount",
+ [KOBJ_OFFLINE] "offline",
+ [KOBJ_ONLINE] "online"
+ };
+ kobject_hotplug(str[act], kobj);
+ }
+#elif defined(OLD_HOTPLUG_SUPPORT)
+ kobject_hotplug(kobj, act);
+#else
+ kobject_uevent(kobj, act);
+#endif
}
-static void xpp_dev_release(struct device *dev)
+static void astribank_release(struct device *dev)
{
xbus_t *xbus;
BUG_ON(!dev);
xbus = dev_to_xbus(dev);
- XBUS_DBG(GENERAL, xbus, "\n");
+ if(!XBUS_IS(xbus, DISCONNECTED)) {
+ XBUS_ERR(xbus, "Try to release in state %s\n",
+ xbus_statename(XBUS_STATE(xbus)));
+ BUG();
+ }
+ XBUS_INFO(xbus, "[%s] Astribank Release\n", xbus->label);
+ xbus_free(xbus);
}
-static struct bus_type xpp_bus_type = {
+static struct bus_type toplevel_bus_type = {
.name = "astribanks",
- .match = xpp_bus_match,
-#ifdef OLD_HOPLUG_SUPPORT
- .hotplug = xpp_bus_hotplug,
+ .match = astribank_match,
+#ifdef OLD_HOTPLUG_SUPPORT
+ .hotplug = astribank_hotplug,
#else
- .uevent = xpp_bus_uevent,
+ .uevent = astribank_uevent,
#endif
+ .dev_attrs = xbus_dev_attrs,
+ .drv_attrs = xpp_attrs,
};
-static struct device xpp_bus = {
- .bus_id = "xppbus",
- .release = xpp_bus_release
-};
+static int astribank_probe(struct device *dev)
+{
+ xbus_t *xbus;
+
+ xbus = dev_to_xbus(dev);
+ XBUS_DBG(DEVICES, xbus, "SYSFS\n");
+ return 0;
+}
+
+static int astribank_remove(struct device *dev)
+{
+ xbus_t *xbus;
+
+ xbus = dev_to_xbus(dev);
+ XBUS_INFO(xbus, "[%s] Atribank Remove\n", xbus->label);
+ return 0;
+}
static struct device_driver xpp_driver = {
.name = "xppdrv",
- .bus = &xpp_bus_type,
-#ifndef OLD_HOPLUG_SUPPORT
+ .bus = &toplevel_bus_type,
+ .probe = astribank_probe,
+ .remove = astribank_remove,
+#ifndef OLD_HOTPLUG_SUPPORT
.owner = THIS_MODULE
#endif
};
-int register_xpp_bus(void)
+/*--------- Sysfs XPD handling ----*/
+
+static DEVICE_ATTR_READER(chipregs_show, dev, buf)
{
- int ret;
+ xpd_t *xpd;
+ unsigned long flags;
+ reg_cmd_t *regs;
+ bool do_datah;
+ char datah_str[50];
+ int len = 0;
- if((ret = bus_register(&xpp_bus_type)) < 0) {
- ERR("%s: bus_register failed. Error number %d", __FUNCTION__, ret);
- goto failed_bus;
- }
- if((ret = device_register(&xpp_bus)) < 0) {
- ERR("%s: registration of xpp_bus failed. Error number %d",
- __FUNCTION__, ret);
- goto failed_busdevice;
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ spin_lock_irqsave(&xpd->lock, flags);
+ regs = &xpd->last_reply;
+ len += sprintf(buf + len, "# Writing bad data into this file may damage your hardware!\n");
+ len += sprintf(buf + len, "# Consult firmware docs first\n");
+ len += sprintf(buf + len, "#\n");
+ do_datah = REG_FIELD(regs, do_datah) ? 1 : 0;
+ if(do_datah) {
+ snprintf(datah_str, ARRAY_SIZE(datah_str), "\t%02X",
+ REG_FIELD(regs, data_high));
+ } else
+ datah_str[0] = '\0';
+ if(REG_FIELD(regs, do_subreg)) {
+ len += sprintf(buf + len, "#CH\tOP\tReg.\tSub\tDL%s\n",
+ (do_datah) ? "\tDH" : "");
+ len += sprintf(buf + len, "%2d\tRS\t%02X\t%02X\t%02X%s\n",
+ regs->portnum,
+ REG_FIELD(regs, regnum), REG_FIELD(regs, subreg),
+ REG_FIELD(regs, data_low), datah_str);
+ } else {
+ len += sprintf(buf + len, "#CH\tOP\tReg.\tDL%s\n",
+ (do_datah) ? "\tDH" : "");
+ len += sprintf(buf + len, "%2d\tRD\t%02X\t%02X%s\n",
+ regs->portnum,
+ REG_FIELD(regs, regnum),
+ REG_FIELD(regs, data_low), datah_str);
}
- if((ret = driver_register(&xpp_driver)) < 0) {
- ERR("%s: driver_register failed. Error number %d", __FUNCTION__, ret);
- goto failed_driver;
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
+}
+
+static DEVICE_ATTR_WRITER(chipregs_store, dev, buf, count)
+{
+ xpd_t *xpd;
+ const char *p;
+ char tmp[MAX_PROC_WRITE];
+ int i;
+ int ret;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ //XPD_DBG(GENERAL, xpd, "%s\n", buf);
+ if(!xpd)
+ return -ENODEV;
+ p = buf;
+ while((p - buf) < count) {
+ i = strcspn(p, "\r\n");
+ if(i > 0) {
+ if(i >= MAX_PROC_WRITE) {
+ XPD_NOTICE(xpd, "Command too long (%d chars)\n", i);
+ return -E2BIG;
+ }
+ memcpy(tmp, p, i);
+ tmp[i] = '\0';
+ ret = parse_chip_command(xpd, tmp);
+ if(ret < 0) {
+ XPD_NOTICE(xpd, "Failed writing command: '%s'\n", tmp);
+ return ret;
+ }
+ }
+ p += i + 1;
+ /* Don't flood command_queue */
+ if(xframe_queue_count(&xpd->xbus->command_queue) > 5)
+ msleep(6);
}
- return 0;
-failed_driver:
- device_unregister(&xpp_bus);
-failed_busdevice:
- bus_unregister(&xpp_bus_type);
-failed_bus:
- return ret;
+ return count;
}
-void unregister_xpp_bus(void)
+static DEVICE_ATTR_READER(blink_show, dev, buf)
{
- driver_unregister(&xpp_driver);
- device_unregister(&xpp_bus);
- bus_unregister(&xpp_bus_type);
+ xpd_t *xpd;
+ unsigned long flags;
+ int len = 0;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ spin_lock_irqsave(&xpd->lock, flags);
+ len += sprintf(buf, "0x%lX\n", xpd->blink_mode);
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
}
-/*--------- Sysfs Device handling ----*/
-static DEVICE_ATTR_READER(connector_show, dev, buf)
+static DEVICE_ATTR_WRITER(blink_store, dev, buf, count)
{
- xbus_t *xbus;
- int ret;
+ xpd_t *xpd;
+ char *endp;
+ unsigned long blink;
- xbus = dev_to_xbus(dev);
- ret = snprintf(buf, PAGE_SIZE, "%s\n", xbus->location);
- return ret;
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ //XPD_DBG(GENERAL, xpd, "%s\n", buf);
+ if(!xpd)
+ return -ENODEV;
+ blink = simple_strtoul(buf, &endp, 0);
+ if(*endp != '\0' && *endp != '\n' && *endp != '\r')
+ return -EINVAL;
+ if(blink > 0xFFFF)
+ return -EINVAL;
+ XPD_DBG(GENERAL, xpd, "BLINK channels: 0x%lX\n", blink);
+ xpd->blink_mode = blink;
+ return count;
}
-static DEVICE_ATTR_READER(label_show, dev, buf)
+static DEVICE_ATTR_READER(span_show, dev, buf)
{
- xbus_t *xbus;
- int ret;
+ xpd_t *xpd;
+ unsigned long flags;
+ int len = 0;
- xbus = dev_to_xbus(dev);
- ret = snprintf(buf, PAGE_SIZE, "%s\n", xbus->label);
- return ret;
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ spin_lock_irqsave(&xpd->lock, flags);
+ len += sprintf(buf, "%d\n", SPAN_REGISTERED(xpd) ? xpd->span.spanno : 0);
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return len;
}
-static DEVICE_ATTR_READER(status_show, dev, buf)
+static DEVICE_ATTR_WRITER(span_store, dev, buf, count)
{
- xbus_t *xbus;
- int ret;
+ xpd_t *xpd;
+ int zt_reg;
+ int ret;
- xbus = dev_to_xbus(dev);
- ret = snprintf(buf, PAGE_SIZE, "%s\n", (TRANSPORT_RUNNING(xbus))?"connected":"missing");
- return ret;
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ ret = sscanf(buf, "%d", &zt_reg);
+ if(ret != 1)
+ return -EINVAL;
+ if(!XBUS_IS(xpd->xbus, READY))
+ return -ENODEV;
+ XPD_DBG(GENERAL, xpd, "%s\n", (zt_reg) ? "register" : "unregister");
+ if(zt_reg)
+ ret = zaptel_register_xpd(xpd);
+ else
+ ret = zaptel_unregister_xpd(xpd);
+ return (ret < 0) ? ret : count;
}
-static DEVICE_ATTR_READER(timing_show, dev, buf)
+static DEVICE_ATTR_READER(type_show, dev, buf)
{
- xbus_t *xbus;
- struct xpp_drift *driftinfo;
- int len = 0;
- struct timeval now;
+ xpd_t *xpd;
+ int len = 0;
- do_gettimeofday(&now);
- xbus = dev_to_xbus(dev);
- driftinfo = &xbus->drift;
- len += snprintf(buf + len, PAGE_SIZE - len, "DRIFT: %-3s", sync_mode_name(xbus->sync_mode));
- if(xbus->sync_mode == SYNC_MODE_PLL) {
- len += snprintf(buf + len, PAGE_SIZE - len,
- " %5d: jitter %4d median %4d calc_drift %3d lost (%4d,%4d) : ",
- xbus->ticker.cycle,
- driftinfo->jitter, driftinfo->median,
- driftinfo->calc_drift,
- driftinfo->lost_ticks, driftinfo->lost_tick_count);
- len += snprintf(buf + len, PAGE_SIZE - len,
- "DRIFT %3d %ld sec ago",
- xbus->sync_adjustment,
- (xbus->pll_updated_at == 0) ? 0 : now.tv_sec - xbus->pll_updated_at);
- }
- len += snprintf(buf + len, PAGE_SIZE - len, "\n");
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ len += sprintf(buf, "%s\n", xpd->type_name);
return len;
}
-#ifdef SAMPLE_TICKS
-/*
- * tick sampling: Measure offset from reference ticker:
- * - Recording start when writing to:
- * /sys/bus/astribanks/devices/xbus-??/samples
- * - Recording ends when filling SAMPLE_SIZE ticks
- * - Results are read from the same sysfs file.
- * - Trying to read/write during recording, returns -EBUSY.
- */
-static DEVICE_ATTR_READER(samples_show, dev, buf)
+static DEVICE_ATTR_READER(offhook_show, dev, buf)
{
- xbus_t *xbus;
- int len = 0;
- int i;
+ xpd_t *xpd;
+ int len = 0;
+ int i;
- xbus = dev_to_xbus(dev);
- if(xbus->sample_running)
- return -EBUSY;
- for(i = 0; i < SAMPLE_SIZE; i++) {
- if(len > PAGE_SIZE - 20)
- break;
- len += snprintf(buf + len, PAGE_SIZE - len, "%d\n", xbus->sample_ticks[i]);
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ if(!xpd)
+ return -ENODEV;
+ for_each_line(xpd, i) {
+ len += sprintf(buf + len, "%d ", IS_OFFHOOK(xpd, i));
+ }
+ if(len) {
+ len--; /* backout last space */
+ len += sprintf(buf + len, "\n");
}
return len;
}
-static DEVICE_ATTR_WRITER(samples_store, dev, buf, count)
+static int xpd_match(struct device *dev, struct device_driver *driver)
{
- xbus_t *xbus;
+ struct xpd_driver *xpd_driver;
+ xpd_t *xpd;
+
+ xpd_driver = driver_to_xpd_driver(driver);
+ xpd = dev_to_xpd(dev);
+ if(xpd_driver->type != xpd->type) {
+ XPD_DBG(DEVICES, xpd, "SYSFS match fail: xpd->type = %d, xpd_driver->type = %d\n",
+ xpd->type, xpd_driver->type);
+ return 0;
+ }
+ XPD_DBG(DEVICES, xpd, "SYSFS MATCH: type=%d dev->bus_id = %s, driver->name = %s\n",
+ xpd->type, dev->bus_id, driver->name);
+ return 1;
+}
- xbus = dev_to_xbus(dev);
- if(xbus->sample_running)
- return -EBUSY;
- memset(xbus->sample_ticks, 0, sizeof(*xbus->sample_ticks));
- xbus->sample_pos = 0;
- xbus->sample_running = 1;
- return count;
+static struct device_attribute xpd_dev_attrs[] = {
+ __ATTR(chipregs, S_IRUGO | S_IWUSR, chipregs_show, chipregs_store),
+ __ATTR(blink, S_IRUGO | S_IWUSR, blink_show, blink_store),
+ __ATTR(span, S_IRUGO | S_IWUSR, span_show, span_store),
+ __ATTR_RO(type),
+ __ATTR_RO(offhook),
+ __ATTR_NULL,
+};
+
+static struct bus_type xpd_type = {
+ .name = "xpds",
+ .match = xpd_match,
+ .dev_attrs = xpd_dev_attrs,
+};
+
+int xpd_driver_register(struct device_driver *driver)
+{
+ int ret;
+
+ DBG(DEVICES, "%s\n", driver->name);
+ driver->bus = &xpd_type;
+ if((ret = driver_register(driver)) < 0) {
+ ERR("%s: driver_register(%s) failed. Error number %d",
+ __FUNCTION__, driver->name, ret);
+ }
+ return ret;
}
-#endif
-/*
- * Clear statistics
- */
-static DEVICE_ATTR_WRITER(cls_store, dev, buf, count)
+void xpd_driver_unregister(struct device_driver *driver)
{
- xbus_t *xbus;
- struct xpp_drift *driftinfo;
+ DBG(DEVICES, "%s\n", driver->name);
+ driver_unregister(driver);
+}
- xbus = dev_to_xbus(dev);
- driftinfo = &xbus->drift;
- driftinfo->lost_ticks = 0;
- driftinfo->lost_tick_count = 0;
- xbus->min_tx_sync = INT_MAX;
- xbus->max_tx_sync = 0;
- xbus->min_rx_sync = INT_MAX;
- xbus->max_rx_sync = 0;
-#ifdef SAMPLE_TICKS
- memset(xbus->sample_ticks, 0, sizeof(*xbus->sample_ticks));
-#endif
- return count;
+static void xpd_release(struct device *dev)
+{
+ xpd_t *xpd;
+
+ BUG_ON(!dev);
+ xpd = dev_to_xpd(dev);
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ xpd_remove(xpd);
}
-static DEVICE_ATTR(connector, S_IRUGO, connector_show, NULL);
-static DEVICE_ATTR(label, S_IRUGO, label_show, NULL);
-static DEVICE_ATTR(status, S_IRUGO, status_show, NULL);
-static DEVICE_ATTR(timing, S_IRUGO, timing_show, NULL);
-static DEVICE_ATTR(cls, S_IWUSR, NULL, cls_store);
-#ifdef SAMPLE_TICKS
-static DEVICE_ATTR(samples, S_IWUSR | S_IRUGO, samples_show, samples_store);
-#endif
+int xpd_device_register(xbus_t *xbus, xpd_t *xpd)
+{
+ struct device *dev = &xpd->xpd_dev;
+ int ret;
+
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ dev->bus = &xpd_type;
+ dev->parent = &xbus->astribank;
+ snprintf(dev->bus_id, BUS_ID_SIZE, "%02d:%1x:%1x",
+ xbus->num, xpd->addr.unit, xpd->addr.subunit);
+ dev->driver_data = xpd;
+ dev->release = xpd_release;
+ ret = device_register(dev);
+ if(ret) {
+ XPD_ERR(xpd, "%s: device_register failed: %d\n", __FUNCTION__, ret);
+ return ret;
+ }
+ get_xpd(__FUNCTION__, xpd);
+ BUG_ON(!xpd);
+ return 0;
+}
+
+void xpd_device_unregister(xpd_t *xpd)
+{
+ xbus_t *xbus;
+ struct device *dev;
+
+ xbus = xpd->xbus;
+ BUG_ON(!xbus);
+ XPD_DBG(DEVICES, xpd, "SYSFS\n");
+ dev = &xpd->xpd_dev;
+ if(!dev->driver_data)
+ return;
+ BUG_ON(dev->driver_data != xpd);
+ device_unregister(dev);
+ dev->driver_data = NULL;
+}
+
+/*--------- Sysfs Device handling ----*/
void xbus_sysfs_remove(xbus_t *xbus)
{
struct device *astribank;
BUG_ON(!xbus);
- XBUS_DBG(GENERAL, xbus, "\n");
+ XBUS_DBG(DEVICES, xbus, "\n");
astribank = &xbus->astribank;
BUG_ON(!astribank);
+ sysfs_remove_link(&astribank->kobj, "transport");
if(!astribank->driver_data)
return;
BUG_ON(astribank->driver_data != xbus);
-#ifdef SAMPLE_TICKS
- device_remove_file(&xbus->astribank, &dev_attr_samples);
-#endif
- device_remove_file(&xbus->astribank, &dev_attr_cls);
- device_remove_file(&xbus->astribank, &dev_attr_timing);
- device_remove_file(&xbus->astribank, &dev_attr_status);
- device_remove_file(&xbus->astribank, &dev_attr_label);
- device_remove_file(&xbus->astribank, &dev_attr_connector);
device_unregister(&xbus->astribank);
}
@@ -377,51 +756,64 @@ int xbus_sysfs_create(xbus_t *xbus)
BUG_ON(!xbus);
astribank = &xbus->astribank;
BUG_ON(!astribank);
- XBUS_DBG(GENERAL, xbus, "\n");
- device_initialize(astribank);
- astribank->bus = &xpp_bus_type;
- astribank->parent = &xpp_bus;
+ XBUS_DBG(DEVICES, xbus, "\n");
+ astribank->bus = &toplevel_bus_type;
+ astribank->parent = xbus->transport.transport_device;
snprintf(astribank->bus_id, BUS_ID_SIZE, "xbus-%02d", xbus->num);
- astribank->driver_data = NULL; /* override below */
- astribank->release = xpp_dev_release;
+ astribank->driver_data = xbus;
+ astribank->release = astribank_release;
ret = device_register(astribank);
if(ret) {
- XBUS_ERR(xbus, "%s: device_add failed: %d\n", __FUNCTION__, ret);
+ XBUS_ERR(xbus, "%s: device_register failed: %d\n", __FUNCTION__, ret);
+ astribank->driver_data = NULL;
goto out;
}
- ret = device_create_file(astribank, &dev_attr_connector);
- if(ret) {
- XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
- goto out;
- }
- ret = device_create_file(astribank, &dev_attr_label);
- if(ret) {
- XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
+ ret = sysfs_create_link(&astribank->kobj, &astribank->parent->kobj, "transport");
+ if(ret < 0) {
+ XBUS_ERR(xbus, "%s: sysfs_create_link failed: %d\n", __FUNCTION__, ret);
+ astribank->driver_data = NULL;
goto out;
}
- ret = device_create_file(astribank, &dev_attr_status);
- if(ret) {
- XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
- goto out;
- }
- ret = device_create_file(astribank, &dev_attr_timing);
- if(ret) {
- XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
- goto out;
+out:
+ return ret;
+}
+
+int __init xpp_driver_init(void)
+{
+ int ret;
+
+ DBG(DEVICES, "SYSFS\n");
+ if((ret = bus_register(&toplevel_bus_type)) < 0) {
+ ERR("%s: bus_register(%s) failed. Error number %d",
+ __FUNCTION__, toplevel_bus_type.name, ret);
+ goto failed_bus;
}
- ret = device_create_file(astribank, &dev_attr_cls);
- if(ret) {
- XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
- goto out;
+ if((ret = driver_register(&xpp_driver)) < 0) {
+ ERR("%s: driver_register(%s) failed. Error number %d",
+ __FUNCTION__, xpp_driver.name, ret);
+ goto failed_xpp_driver;
}
-#ifdef SAMPLE_TICKS
- ret = device_create_file(astribank, &dev_attr_samples);
- if(ret) {
- XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
- goto out;
+ if((ret = bus_register(&xpd_type)) < 0) {
+ ERR("%s: bus_register(%s) failed. Error number %d",
+ __FUNCTION__, xpd_type.name, ret);
+ goto failed_xpd_bus;
}
-#endif
- astribank->driver_data = xbus; /* Everything is good */
-out:
+ return 0;
+failed_xpd_bus:
+ driver_unregister(&xpp_driver);
+failed_xpp_driver:
+ bus_unregister(&toplevel_bus_type);
+failed_bus:
return ret;
}
+
+void xpp_driver_exit(void)
+{
+ DBG(DEVICES, "SYSFS\n");
+ bus_unregister(&xpd_type);
+ driver_unregister(&xpp_driver);
+ bus_unregister(&toplevel_bus_type);
+}
+
+EXPORT_SYMBOL(xpd_driver_register);
+EXPORT_SYMBOL(xpd_driver_unregister);
diff --git a/kernel/xpp/xdefs.h b/kernel/xpp/xdefs.h
index 9e6b783..ca6e964 100644
--- a/kernel/xpp/xdefs.h
+++ b/kernel/xpp/xdefs.h
@@ -101,6 +101,7 @@ typedef char *charp;
typedef unsigned char byte;
#ifdef __KERNEL__
+/* Kernel versions... */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
#define KMEM_CACHE_T kmem_cache_t
#else
@@ -113,6 +114,28 @@ typedef unsigned char byte;
kfree(p); \
} while(0);
+/*
+ * Hotplug replaced with uevent in 2.6.16
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
+#define OLD_HOTPLUG_SUPPORT // for older kernels
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
+#define OLD_HOTPLUG_SUPPORT_269// for way older kernels
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
+#define DEVICE_ATTR_READER(name,dev,buf) \
+ ssize_t name(struct device *dev, struct device_attribute *attr, char *buf)
+#define DEVICE_ATTR_WRITER(name,dev,buf, count) \
+ ssize_t name(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+#else
+#define DEVICE_ATTR_READER(name,dev,buf) \
+ ssize_t name(struct device *dev, char *buf)
+#define DEVICE_ATTR_WRITER(name,dev,buf, count) \
+ ssize_t name(struct device *dev, const char *buf, size_t count)
+#endif
+
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
/* Also don't define this for later RHEL >= 5.2 . hex_asc is from the
* same linux-2.6-net-infrastructure-updates-to-mac80211-iwl4965.patch
diff --git a/kernel/xpp/xframe_queue.c b/kernel/xpp/xframe_queue.c
index 5d11600..17632df 100644
--- a/kernel/xpp/xframe_queue.c
+++ b/kernel/xpp/xframe_queue.c
@@ -25,10 +25,34 @@ void xframe_queue_clearstats(struct xframe_queue *q)
q->worst_lag_usec = 0L;
}
+static void __xframe_dump_queue(struct xframe_queue *q)
+{
+ xframe_t *xframe;
+ int i = 0;
+ char prefix[30];
+ struct timeval now;
+
+ do_gettimeofday(&now);
+ printk(KERN_DEBUG "%s: dump queue '%s' (first packet in each frame)\n",
+ THIS_MODULE->name,
+ q->name);
+ list_for_each_entry_reverse(xframe, &q->head, frame_list) {
+ xpacket_t *pack = (xpacket_t *)&xframe->packets[0];
+ long usec = usec_diff(&now, &xframe->tv_queued);
+ snprintf(prefix, ARRAY_SIZE(prefix), " %3d> %5ld.%03ld msec",
+ i++, usec / 1000, usec % 1000);
+ dump_packet(prefix, pack, 1);
+ }
+}
+
static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
{
int ret = 1;
+ if(unlikely(q->disabled)) {
+ ret = 0;
+ goto out;
+ }
if(q->count >= q->max_count) {
q->overflows++;
NOTICE("Overflow of %-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02ld.%ld ms\n",
@@ -40,6 +64,7 @@ static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
q->overflows,
q->worst_lag_usec / 1000,
q->worst_lag_usec % 1000);
+ __xframe_dump_queue(q);
ret = 0;
goto out;
}
@@ -95,9 +120,9 @@ xframe_t *xframe_dequeue(struct xframe_queue *q)
spin_unlock_irqrestore(&q->lock, flags);
return frm;
}
-void xframe_queue_disable(struct xframe_queue *q)
+void xframe_queue_disable(struct xframe_queue *q, bool disabled)
{
- q->max_count = 0;
+ q->disabled = disabled;
}
void xframe_queue_clear(struct xframe_queue *q)
@@ -106,7 +131,7 @@ void xframe_queue_clear(struct xframe_queue *q)
xbus_t *xbus = q->priv;
int i = 0;
- xframe_queue_disable(q);
+ xframe_queue_disable(q, 1);
while((xframe = xframe_dequeue(q)) != NULL) {
transport_free_xframe(xbus, xframe);
i++;
diff --git a/kernel/xpp/xframe_queue.h b/kernel/xpp/xframe_queue.h
index 5612d65..eba94dd 100644
--- a/kernel/xpp/xframe_queue.h
+++ b/kernel/xpp/xframe_queue.h
@@ -9,6 +9,7 @@
struct xframe_queue {
struct list_head head;
+ bool disabled;
unsigned int count;
unsigned int max_count;
unsigned int steady_state_count;
@@ -27,7 +28,7 @@ void xframe_queue_init(struct xframe_queue *q,
__must_check bool xframe_enqueue(struct xframe_queue *q, xframe_t *xframe);
__must_check xframe_t *xframe_dequeue(struct xframe_queue *q);
void xframe_queue_clearstats(struct xframe_queue *q);
-void xframe_queue_disable(struct xframe_queue *q);
+void xframe_queue_disable(struct xframe_queue *q, bool disabled);
void xframe_queue_clear(struct xframe_queue *q);
uint xframe_queue_count(struct xframe_queue *q);
diff --git a/kernel/xpp/xpd.h b/kernel/xpp/xpd.h
index 7f85890..717e68d 100644
--- a/kernel/xpp/xpd.h
+++ b/kernel/xpp/xpd.h
@@ -29,6 +29,7 @@
#ifdef __KERNEL__
#include <linux/kernel.h>
#include <linux/device.h>
+#include <linux/version.h>
#include <asm/atomic.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)
#include <linux/semaphore.h>
@@ -138,6 +139,16 @@ static struct xpd_counters {
#define XPD_COUNTER_MAX (sizeof(xpd_counters)/sizeof(xpd_counters[0]))
+enum xpd_state {
+ XPD_STATE_START,
+ XPD_STATE_INIT_REGS,
+ XPD_STATE_READY,
+ XPD_STATE_NOHW,
+};
+
+bool xpd_setstate(xpd_t *xpd, enum xpd_state newstate);
+const char *xpd_statename(enum xpd_state st);
+
/*
* An XPD is a single Xorcom Protocol Device
*/
@@ -162,6 +173,10 @@ struct xpd {
xpp_line_t digital_signalling; /* BRI signalling channels */
uint timing_priority; /* from 'span' directives in zapata.conf */
+ enum xpd_state xpd_state;
+ struct device xpd_dev;
+#define dev_to_xpd(dev) container_of(dev, struct xpd, xpd_dev)
+
/* Assure atomicity of changes to pcm_len and wanted_pcm_mask */
spinlock_t lock_recompute_pcm;
/* maintained by card drivers */
@@ -185,10 +200,12 @@ struct xpd {
#ifdef CONFIG_PROC_FS
struct proc_dir_entry *proc_xpd_dir;
struct proc_dir_entry *proc_xpd_summary;
+#ifdef OLD_PROC
struct proc_dir_entry *proc_xpd_ztregister;
struct proc_dir_entry *proc_xpd_blink;
struct proc_dir_entry *proc_xpd_chipregs;
#endif
+#endif
int counters[XPD_COUNTER_MAX];
@@ -229,6 +246,18 @@ static inline void *my_kzalloc(size_t size, gfp_t flags)
return p;
}
+struct xpd_driver {
+ xpd_type_t type;
+
+ struct device_driver driver;
+#define driver_to_xpd_driver(driver) container_of(driver, struct xpd_driver, driver)
+};
+
+int xpd_driver_register(struct device_driver *driver);
+void xpd_driver_unregister(struct device_driver *driver);
+xpd_t *get_xpd(const char *msg, xpd_t *xpd);
+void put_xpd(const char *msg, xpd_t *xpd);
+
#endif
#endif /* XPD_H */
diff --git a/kernel/xpp/xpp.conf b/kernel/xpp/xpp.conf
new file mode 100644
index 0000000..e5aeb7c
--- /dev/null
+++ b/kernel/xpp/xpp.conf
@@ -0,0 +1,30 @@
+# /etc/dahdi/xpp.conf
+#
+# This file is used to configure the operation
+# of init_card_* initialization scripts.
+#
+
+# pri_protocol: is an XPP PRI device E1 (default) or T1?
+# This parameter is REQUIRED for the PRI module
+pri_protocol E1
+#
+# Alternatively you can set this on a port basis is you have a strange
+# setup where some of the ports are E1 and some are T1. These specific
+# settings will override the default set above.
+#pri_protocol/xbus-00/xpd-02 T1
+#pri_protocol/connector:usb-0000:00:1d.7-7/xpd-03 T1
+#pri_protocol/label:usb:0000183/xpd-03 T1
+
+# International settings for the XPP FXO module. This is similar to the
+# 'opermode' kernel module of wctdm and wctdm24xxp . The default value
+# is 'FCC' (US settings). You can find the full list of countries in
+# the script /usr/share/zaptel/init_card_1_30 .
+#opermode UK
+
+# Set this to enable debug mode for the scripts:
+#debug 1
+#
+# Skip the long calibration of the FXS modules. This saves time, but
+# makes the units consume much more power and hence highly unreocmmended
+# and unsupported.
+#fxs_skip_calib 1
diff --git a/kernel/xpp/xpp_usb.c b/kernel/xpp/xpp_usb.c
index 2b633c6..0340768 100644
--- a/kernel/xpp/xpp_usb.c
+++ b/kernel/xpp/xpp_usb.c
@@ -439,7 +439,7 @@ static int xframe_send_cmd(xbus_t *xbus, xframe_t *xframe)
*/
static bool xusb_listen(xusb_t *xusb)
{
- xbus_t *xbus = get_xbus(xusb->xbus_num);
+ xbus_t *xbus = xbus_num(xusb->xbus_num);
xframe_t *xframe;
struct uframe *uframe;
int ret = 0;
@@ -465,7 +465,6 @@ static bool xusb_listen(xusb_t *xusb)
atomic_inc(&xusb->pending_reads);
ret = 1;
out:
- put_xbus(xbus);
return ret;
}
@@ -710,7 +709,7 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
xusb->present = 1;
/* we can register the device now, as it is ready */
- usb_set_intfdata (interface, xusb);
+ usb_set_intfdata(interface, xusb);
retval = usb_register_dev (interface, &xusb_class);
if (retval) {
/* something prevented us from registering this driver */
@@ -722,7 +721,7 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
/* let the user know what node this device is now attached to */
DBG(DEVICES, "USB XPP device now attached to minor %d\n", xusb->minor);
- xbus = xbus_new(&xusb_ops, min(xusb->endpoints[XUSB_SEND].max_size, xusb->endpoints[XUSB_RECV].max_size), xusb);
+ xbus = xbus_new(&xusb_ops, min(xusb->endpoints[XUSB_SEND].max_size, xusb->endpoints[XUSB_RECV].max_size), &udev->dev, xusb);
if(!xbus) {
retval = -ENOMEM;
goto probe_failed;
@@ -739,12 +738,12 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
goto probe_failed;
}
usb_make_path(udev, xusb->path, XBUS_DESCLEN); // May trunacte... ignore
- snprintf(xbus->location, XBUS_DESCLEN, "%s", xusb->path);
+ snprintf(xbus->connector, XBUS_DESCLEN, "%s", xusb->path);
if(xusb->serial && xusb->serial[0])
snprintf(xbus->label, LABEL_SIZE, "usb:%s", xusb->serial);
xusb->index = i;
xusb_array[i] = xusb;
- XUSB_DBG(DEVICES, xusb, "GOT XPP USB BUS: %s\n", xbus->location);
+ XUSB_DBG(DEVICES, xusb, "GOT XPP USB BUS: %s\n", xbus->connector);
#ifdef CONFIG_PROC_FS
DBG(PROC, "Creating proc entry " PROC_USBXPP_SUMMARY " in bus proc dir.\n");
@@ -763,11 +762,11 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
/* prepare several pending frames for receive side */
for(i = 0; i < 10; i++)
xusb_listen(xusb);
- xbus_activate(xbus);
+ xbus_connect(xbus);
return retval;
probe_failed:
ERR("Failed to initialize xpp usb bus: %d\n", retval);
- usb_set_intfdata (interface, NULL);
+ usb_set_intfdata(interface, NULL);
if(xusb) {
if(xusb->minor) { // passed registration phase
ERR("Calling usb_deregister_dev()\n");
@@ -801,18 +800,20 @@ probe_failed:
*/
static void xusb_disconnect(struct usb_interface *interface)
{
+ struct usb_host_interface *iface_desc = usb_altnum_to_altsetting(interface, 0);
xusb_t *xusb;
xbus_t *xbus;
int minor;
int i;
- DBG(DEVICES, "CALLED\n");
+ DBG(DEVICES, "CALLED on interface #%d\n", iface_desc->desc.bInterfaceNumber);
/* prevent races with open() */
down (&disconnect_sem);
- xusb = usb_get_intfdata (interface);
+ xusb = usb_get_intfdata(interface);
+ usb_set_intfdata(interface, NULL);
xusb->present = 0;
- xbus = get_xbus(xusb->xbus_num);
+ xbus = xbus_num(xusb->xbus_num);
/* find our xusb */
for(i = 0; i < MAX_BUSES; i++) {
@@ -828,17 +829,13 @@ static void xusb_disconnect(struct usb_interface *interface)
remove_proc_entry(PROC_USBXPP_SUMMARY, xbus->proc_xbus_dir);
}
#endif
- /*
- * put_xbus() would be called during xbus_disconnect()
- */
xbus_disconnect(xbus); // Blocking until fully deactivated!
- usb_set_intfdata (interface, NULL);
down (&xusb->sem);
minor = xusb->minor;
/* give back our minor */
- usb_deregister_dev (interface, &xusb_class);
+ usb_deregister_dev(interface, &xusb_class);
up (&xusb->sem);
DBG(DEVICES, "Semaphore released\n");
@@ -853,7 +850,7 @@ static void xpp_send_callback(USB_PASS_CB(urb))
struct uframe *uframe = urb_to_uframe(urb);
xframe_t *xframe = &uframe->xframe;
xusb_t *xusb = uframe->xusb;
- xbus_t *xbus = get_xbus(xusb->xbus_num);
+ xbus_t *xbus = xbus_num(xusb->xbus_num);
struct timeval now;
long usec;
int writes = atomic_read(&xusb->pending_writes);
@@ -904,7 +901,6 @@ static void xpp_send_callback(USB_PASS_CB(urb))
FREE_SEND_XFRAME(xbus, xframe);
if(!xusb->present)
XUSB_ERR(xusb, "A urb from non-connected device?\n");
- put_xbus(xbus);
}
static void xpp_receive_callback(USB_PASS_CB(urb))
@@ -912,7 +908,7 @@ static void xpp_receive_callback(USB_PASS_CB(urb))
struct uframe *uframe = urb_to_uframe(urb);
xframe_t *xframe = &uframe->xframe;
xusb_t *xusb = uframe->xusb;
- xbus_t *xbus = get_xbus(xusb->xbus_num);
+ xbus_t *xbus = xbus_num(xusb->xbus_num);
size_t size;
bool do_resubmit = 1;
bool is_inuse = 0;
@@ -924,11 +920,6 @@ static void xpp_receive_callback(USB_PASS_CB(urb))
XUSB_ERR(xusb, "Received URB does not belong to a valid xbus anymore...\n");
return;
}
- if(!XBUS_GET(xbus)) {
- XUSB_ERR(xusb, "Dropping urb. Is shutting down.\n");
- do_resubmit = 0;
- goto err;
- }
is_inuse = 1;
if(!xusb->present) {
do_resubmit = 0;
@@ -957,11 +948,8 @@ static void xpp_receive_callback(USB_PASS_CB(urb))
/* Send UP */
xbus_receive_xframe(xbus, xframe);
end:
- if(is_inuse)
- XBUS_PUT(xbus);
if(do_resubmit)
xusb_listen(xusb);
- put_xbus(xbus);
return;
err:
FREE_RECV_XFRAME(xbus, xframe);
diff --git a/kernel/xpp/xpp_zap.c b/kernel/xpp/xpp_zap.c
index b1a1bbe..9e39b01 100644
--- a/kernel/xpp/xpp_zap.c
+++ b/kernel/xpp/xpp_zap.c
@@ -49,8 +49,10 @@ static const char rcsid[] = "$Id$";
#ifdef CONFIG_PROC_FS
struct proc_dir_entry *xpp_proc_toplevel = NULL;
#define PROC_DIR "xpp"
+#ifdef OLD_PROC
#define PROC_XPD_ZTREGISTER "zt_registration"
#define PROC_XPD_BLINK "blink"
+#endif
#define PROC_XPD_SUMMARY "summary"
#endif
@@ -107,26 +109,53 @@ int total_registered_spans(void)
return atomic_read(&num_registered_spans);
}
-static int zaptel_register_xpd(xpd_t *xpd);
-static int zaptel_unregister_xpd(xpd_t *xpd);
static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data);
+#ifdef OLD_PROC
static int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_ztregister_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
static int proc_xpd_blink_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_blink_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
+#endif
/*------------------------- XPD Management -------------------------*/
+static atomic_t *refcount_xpd(xpd_t *xpd)
+{
+ struct kref *kref = &xpd->xpd_dev.kobj.kref;
+
+ return &kref->refcount;
+}
+
+xpd_t *get_xpd(const char *msg, xpd_t *xpd)
+{
+ struct device *dev;
+
+ XPD_DBG(DEVICES, xpd, "%s: refcount_xpd=%d\n",
+ msg, atomic_read(refcount_xpd(xpd)));
+ dev = get_device(&xpd->xpd_dev);
+ return dev_to_xpd(dev);
+}
+
+void put_xpd(const char *msg, xpd_t *xpd)
+{
+ XPD_DBG(DEVICES, xpd, "%s: refcount_xpd=%d\n",
+ msg, atomic_read(refcount_xpd(xpd)));
+ put_device(&xpd->xpd_dev);
+}
+
static void xpd_proc_remove(xbus_t *xbus, xpd_t *xpd)
{
#ifdef CONFIG_PROC_FS
if(xpd->proc_xpd_dir) {
+#ifdef OLD_PROC
chip_proc_remove(xbus, xpd);
+#endif
if(xpd->proc_xpd_summary) {
XPD_DBG(PROC, xpd, "Removing proc '%s'\n", PROC_XPD_SUMMARY);
remove_proc_entry(PROC_XPD_SUMMARY, xpd->proc_xpd_dir);
xpd->proc_xpd_summary = NULL;
}
+#ifdef OLD_PROC
if(xpd->proc_xpd_ztregister) {
XPD_DBG(PROC, xpd, "Removing proc '%s'\n", PROC_XPD_ZTREGISTER);
remove_proc_entry(PROC_XPD_ZTREGISTER, xpd->proc_xpd_dir);
@@ -137,6 +166,7 @@ static void xpd_proc_remove(xbus_t *xbus, xpd_t *xpd)
remove_proc_entry(PROC_XPD_BLINK, xpd->proc_xpd_dir);
xpd->proc_xpd_blink = NULL;
}
+#endif
XPD_DBG(PROC, xpd, "Removing %s/%s proc directory\n",
xbus->busname, xpd->xpdname);
remove_proc_entry(xpd->xpdname, xbus->proc_xbus_dir);
@@ -161,6 +191,7 @@ static int xpd_proc_create(xbus_t *xbus, xpd_t *xpd)
goto err;
}
xpd->proc_xpd_summary->owner = THIS_MODULE;
+#ifdef OLD_PROC
xpd->proc_xpd_ztregister = create_proc_entry(PROC_XPD_ZTREGISTER, 0644, xpd->proc_xpd_dir);
if (!xpd->proc_xpd_ztregister) {
XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_XPD_ZTREGISTER);
@@ -182,6 +213,7 @@ static int xpd_proc_create(xbus_t *xbus, xpd_t *xpd)
if(chip_proc_create(xbus, xpd) < 0)
goto err;
#endif
+#endif
return 0;
err:
xpd_proc_remove(xbus, xpd);
@@ -202,40 +234,17 @@ void xpd_free(xpd_t *xpd)
return;
XPD_DBG(DEVICES, xpd, "\n");
xpd_proc_remove(xbus, xpd);
- xbus_unregister_xpd(xbus, xpd);
+ xbus_xpd_unbind(xbus, xpd);
+ if (xpd->chans)
+ KZFREE(xpd->chans);
KZFREE(xpd);
-}
-
-
-__must_check int xpd_common_init(xbus_t *xbus, xpd_t *xpd, int unit, int subunit, int subtype, int subunits)
-{
- int ret;
-
- MKADDR(&xpd->addr, unit, subunit);
- xpd->xbus_idx = XPD_IDX(unit,subunit);
- snprintf(xpd->xpdname, XPD_NAMELEN, "XPD-%1d%1d", unit, subunit);
- xpd->subtype = subtype;
- xpd->subunits = subunits;
- xpd->offhook_state = 0;
-
- /* For USB-1 disable some channels */
- if(MAX_SEND_SIZE(xbus) < RPACKET_SIZE(GLOBAL, PCM_WRITE)) {
- xpp_line_t no_pcm;
-
- no_pcm = 0x7F | xpd->digital_outputs | xpd->digital_inputs;
- xpd->no_pcm = no_pcm;
- XBUS_NOTICE(xbus, "max xframe size = %d, disabling some PCM channels. no_pcm=0x%04X\n",
- MAX_SEND_SIZE(xbus), xpd->no_pcm);
- }
- if((ret = xpd_proc_create(xbus, xpd)) < 0)
- return ret;
- xbus_register_xpd(xbus, xpd);
- return 0;
+ DBG(DEVICES, "refcount_xbus=%d\n", refcount_xbus(xbus));
+ put_xbus(__FUNCTION__, xbus); /* was taken in xpd_alloc() */
}
/*
* Synchronous part of XPD detection.
- * Called from xbus_poll()
+ * Called from new_card()
*/
int create_xpd(xbus_t *xbus, const xproto_table_t *proto_table,
int unit,
@@ -247,7 +256,6 @@ int create_xpd(xbus_t *xbus, const xproto_table_t *proto_table,
{
xpd_t *xpd = NULL;
bool to_phone;
- int ret = -EINVAL;
BUG_ON(type == XPD_TYPE_NOMODULE);
to_phone = BIT(subunit) & port_dir;
@@ -256,20 +264,15 @@ int create_xpd(xbus_t *xbus, const xproto_table_t *proto_table,
if(xpd) {
XPD_NOTICE(xpd, "XPD at %d%d already exists\n",
unit, subunit);
- goto out;
+ return 0;
}
xpd = proto_table->xops.card_new(xbus, unit, subunit, proto_table, subtype, subunits, to_phone);
if(!xpd) {
XBUS_NOTICE(xbus, "card_new(%d,%d,%d,%d,%d) failed. Ignored.\n",
unit, subunit, proto_table->type, subtype, to_phone);
- goto err;
+ return -EINVAL;
}
-out:
return 0;
-err:
- if(xpd)
- xpd_free(xpd);
- return ret;
}
void xpd_post_init(xpd_t *xpd)
@@ -311,6 +314,10 @@ static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eo
xpd->timing_priority,
xpd->timer_count, xpd->span.mainttimer
);
+ len += sprintf(page + len, "xpd_state: %s (%d)\n",
+ xpd_statename(xpd->xpd_state), xpd->xpd_state);
+ len += sprintf(page + len, "open_counter=%d refcount=%d\n",
+ atomic_read(&xpd->open_counter), atomic_read(refcount_xpd(xpd)));
len += sprintf(page + len, "Address: U=%d S=%d\n", xpd->addr.unit, xpd->addr.subunit);
len += sprintf(page + len, "Subunits: %d\n", xpd->subunits);
len += sprintf(page + len, "Type: %d.%d\n\n", xpd->type, xpd->subtype);
@@ -412,37 +419,93 @@ out:
#endif
+const char *xpd_statename(enum xpd_state st)
+{
+ switch(st) {
+ case XPD_STATE_START: return "START";
+ case XPD_STATE_INIT_REGS: return "INIT_REGS";
+ case XPD_STATE_READY: return "READY";
+ case XPD_STATE_NOHW: return "NOHW";
+ }
+ return NULL;
+}
+
+bool xpd_setstate(xpd_t *xpd, enum xpd_state newstate)
+{
+ BUG_ON(!xpd);
+ XPD_DBG(DEVICES, xpd, "%s: %s (%d) -> %s (%d)\n", __FUNCTION__,
+ xpd_statename(xpd->xpd_state), xpd->xpd_state,
+ xpd_statename(newstate), newstate);
+ switch(newstate) {
+ case XPD_STATE_START:
+ goto badstate;
+ case XPD_STATE_INIT_REGS:
+ if(xpd->xpd_state != XPD_STATE_START)
+ goto badstate;
+ if(xpd->addr.subunit != 0) {
+ XPD_NOTICE(xpd,
+ "%s: Moving to %s allowed only for subunit 0\n",
+ __FUNCTION__, xpd_statename(newstate));
+ goto badstate;
+ }
+ break;
+ case XPD_STATE_READY:
+ if(xpd->addr.subunit == 0) {
+ /* Unit 0 script initialize registers of all subunits */
+ if(xpd->xpd_state != XPD_STATE_INIT_REGS)
+ goto badstate;
+ } else {
+ if(xpd->xpd_state != XPD_STATE_START)
+ goto badstate;
+ }
+ break;
+ case XPD_STATE_NOHW:
+ break;
+ default:
+ XPD_ERR(xpd, "%s: Unknown newstate=%d\n", __FUNCTION__, newstate);
+ }
+ xpd->xpd_state = newstate;
+ return 1;
+badstate:
+ XPD_NOTICE(xpd, "%s: cannot transition: %s (%d) -> %s (%d)\n",
+ __FUNCTION__,
+ xpd_statename(xpd->xpd_state), xpd->xpd_state,
+ xpd_statename(newstate), newstate);
+ return 0;
+}
+
+
/*
* xpd_alloc - Allocator for new XPD's
*
*/
-xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channels)
+__must_check xpd_t *xpd_alloc(xbus_t *xbus,
+ int unit, int subunit,
+ int subtype, int subunits,
+ size_t privsize, const xproto_table_t *proto_table, int channels)
{
xpd_t *xpd = NULL;
size_t alloc_size = sizeof(xpd_t) + privsize;
int type = proto_table->type;
BUG_ON(!proto_table);
- DBG(DEVICES, "type=%d channels=%d (alloc_size=%zd)\n",
+ XBUS_DBG(DEVICES, xbus, "type=%d channels=%d (alloc_size=%zd)\n",
type, channels, alloc_size);
if(channels > CHANNELS_PERXPD) {
- ERR("%s: type=%d: too many channels %d\n",
+ XBUS_ERR(xbus, "%s: type=%d: too many channels %d\n",
__FUNCTION__, type, channels);
goto err;
}
if((xpd = KZALLOC(alloc_size, GFP_KERNEL)) == NULL) {
- ERR("%s: type=%d: Unable to allocate memory\n",
+ XBUS_ERR(xbus, "%s: type=%d: Unable to allocate memory\n",
__FUNCTION__, type);
goto err;
}
xpd->priv = (byte *)xpd + sizeof(xpd_t);
spin_lock_init(&xpd->lock);
spin_lock_init(&xpd->lock_recompute_pcm);
- xpd->xbus = NULL;
- xpd->xbus_idx = -1;
xpd->channels = channels;
- xpd->chans = NULL;
xpd->card_present = 0;
xpd->offhook_state = 0x0; /* ONHOOK */
xpd->type = proto_table->type;
@@ -450,6 +513,9 @@ xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channel
xpd->xops = &proto_table->xops;
xpd->digital_outputs = 0;
xpd->digital_inputs = 0;
+ xpd->xpd_state = XPD_STATE_START;
+ xpd->subtype = subtype;
+ xpd->subunits = subunits;
atomic_set(&xpd->zt_registered, 0);
atomic_set(&xpd->open_counter, 0);
@@ -459,13 +525,27 @@ xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channel
ERR("%s: Unable to allocate channels\n", __FUNCTION__);
goto err;
}
- xproto_get(type); /* will be returned in xpd_free() */
+ /* For USB-1 disable some channels */
+ if(MAX_SEND_SIZE(xbus) < RPACKET_SIZE(GLOBAL, PCM_WRITE)) {
+ xpp_line_t no_pcm;
+
+ no_pcm = 0x7F | xpd->digital_outputs | xpd->digital_inputs;
+ xpd->no_pcm = no_pcm;
+ XBUS_NOTICE(xbus, "max xframe size = %d, disabling some PCM channels. no_pcm=0x%04X\n",
+ MAX_SEND_SIZE(xbus), xpd->no_pcm);
+ }
+ xbus_xpd_bind(xbus, xpd, unit, subunit);
+ if(xpd_proc_create(xbus, xpd) < 0)
+ goto err;
+ xbus = get_xbus(__FUNCTION__, xbus); /* returned in xpd_free() */
+ xproto_get(type); /* will be returned in xpd_free() */
return xpd;
err:
if(xpd) {
+ xpd_proc_remove(xbus, xpd);
if(xpd->chans)
kfree((void *)xpd->chans);
- kfree(xpd);
+ KZFREE(xpd);
}
return NULL;
}
@@ -477,31 +557,50 @@ err:
#define ZT_EVENT_REMOVED (20)
#endif
-void xpd_disconnect(xpd_t *xpd)
+/*
+ * Try our best to make asterisk close all channels related to
+ * this Astribank:
+ * - Set span state to ZT_ALARM_NOTOPEN in all relevant spans.
+ * - Notify zaptel afterwards about spans (so it can see all changes at once).
+ * - Also send ZT_EVENT_REMOVED on all channels.
+ */
+void xbus_request_removal(xbus_t *xbus)
{
unsigned long flags;
+ int i;
- BUG_ON(!xpd);
-
- spin_lock_irqsave(&xpd->lock, flags);
- XPD_DBG(DEVICES, xpd, "(%p)\n", xpd->xproto);
- if(!xpd->card_present) /* Multiple reports */
- goto out;
- xpd->card_present = 0;
- if(SPAN_REGISTERED(xpd)) {
- int i;
-
- update_xpd_status(xpd, ZT_ALARM_NOTOPEN);
- /* TODO: Should this be done before releasing the spinlock? */
- XPD_DBG(DEVICES, xpd, "Queuing ZT_EVENT_REMOVED on all channels to ask user to release them\n");
- for (i=0; i<xpd->span.channels; i++) {
- zt_qevent_lock(XPD_CHAN(xpd, i),ZT_EVENT_REMOVED);
+ for(i = 0; i < MAX_XPDS; i++) {
+ xpd_t *xpd = xpd_of(xbus, i);
+ if(xpd) {
+ XPD_DBG(DEVICES, xpd, "\n");
+ spin_lock_irqsave(&xpd->lock, flags);
+ xpd->card_present = 0;
+ xpd_setstate(xpd, XPD_STATE_NOHW);
+ xpd->span.alarms = ZT_ALARM_NOTOPEN;
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ }
+ }
+ /* Now notify zaptel */
+ for(i = 0; i < MAX_XPDS; i++) {
+ xpd_t *xpd = xpd_of(xbus, i);
+ if(xpd) {
+ if(SPAN_REGISTERED(xpd)) {
+ int i;
+
+ zt_alarm_notify(&xpd->span);
+ XPD_DBG(DEVICES, xpd, "Queuing ZT_EVENT_REMOVED on all channels to ask user to release them\n");
+ for (i=0; i<xpd->span.channels; i++) {
+ zt_qevent_lock(XPD_CHAN(xpd, i),ZT_EVENT_REMOVED);
+ }
+ }
+ xpd_device_unregister(xpd);
}
}
-out:
- spin_unlock_irqrestore(&xpd->lock, flags);
}
+/*
+ * The xpd isn't open by anyone, we can unregister it and free it
+ */
void xpd_remove(xpd_t *xpd)
{
xbus_t *xbus;
@@ -532,9 +631,9 @@ void update_xpd_status(xpd_t *xpd, int alarm_flag)
}
if(span->alarms == alarm_flag)
return;
+ XPD_DBG(GENERAL, xpd, "Update XPD alarms: %s -> %02X\n", xpd->span.name, alarm_flag);
span->alarms = alarm_flag;
zt_alarm_notify(span);
- XPD_DBG(GENERAL, xpd, "Update XPD alarms: %s -> %02X\n", xpd->span.name, alarm_flag);
}
/*
@@ -608,6 +707,7 @@ void hookstate_changed(xpd_t *xpd, int pos, bool to_offhook)
}
#ifdef CONFIG_PROC_FS
+#ifdef OLD_PROC
static int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
@@ -615,8 +715,9 @@ static int proc_xpd_ztregister_read(char *page, char **start, off_t off, int cou
xpd_t *xpd = data;
BUG_ON(!xpd);
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] read from /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
spin_lock_irqsave(&xpd->lock, flags);
-
len += sprintf(page + len, "%d\n", SPAN_REGISTERED(xpd) ? xpd->span.spanno : 0);
spin_unlock_irqrestore(&xpd->lock, flags);
if (len <= off+count)
@@ -638,6 +739,8 @@ static int proc_xpd_ztregister_write(struct file *file, const char __user *buffe
int ret;
BUG_ON(!xpd);
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] wrote to /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
if(count >= MAX_PROC_WRITE)
return -EINVAL;
if(copy_from_user(buf, buffer, count))
@@ -646,6 +749,8 @@ static int proc_xpd_ztregister_write(struct file *file, const char __user *buffe
ret = sscanf(buf, "%d", &zt_reg);
if(ret != 1)
return -EINVAL;
+ if(!XBUS_IS(xpd->xbus, READY))
+ return -ENODEV;
XPD_DBG(GENERAL, xpd, "%s\n", (zt_reg) ? "register" : "unregister");
if(zt_reg)
ret = zaptel_register_xpd(xpd);
@@ -661,8 +766,9 @@ static int proc_xpd_blink_read(char *page, char **start, off_t off, int count, i
xpd_t *xpd = data;
BUG_ON(!xpd);
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] read from /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
spin_lock_irqsave(&xpd->lock, flags);
-
len += sprintf(page + len, "0x%lX\n", xpd->blink_mode);
spin_unlock_irqrestore(&xpd->lock, flags);
if (len <= off+count)
@@ -685,6 +791,8 @@ static int proc_xpd_blink_write(struct file *file, const char __user *buffer, un
BUG_ON(!xpd);
+ XPD_NOTICE(xpd, "%s: DEPRECATED: %s[%d] wrote to /proc interface instead of /sys\n",
+ __FUNCTION__, current->comm, current->tgid);
if(count >= MAX_PROC_WRITE)
return -EINVAL;
if(copy_from_user(buf, buffer, count))
@@ -699,6 +807,7 @@ static int proc_xpd_blink_write(struct file *file, const char __user *buffer, un
xpd->blink_mode = blink;
return count;
}
+#endif
#endif
@@ -730,23 +839,28 @@ int xpp_open(struct zt_chan *chan)
return -EINVAL;
}
xpd = chan->pvt;
+ xpd = get_xpd(__FUNCTION__, xpd); /* Returned in xpp_close() */
if (!xpd) {
NOTICE("open called on a chan with no pvt (xpd)\n");
- return -EINVAL;
+ BUG();
}
xbus = xpd->xbus;
if (!xbus) {
NOTICE("open called on a chan with no xbus\n");
- return -EINVAL;
+ BUG();
}
pos = chan->chanpos - 1;
+ if(!xpd->card_present) {
+ LINE_NOTICE(xpd, pos, "Cannot open -- device not ready\n");
+ put_xpd(__FUNCTION__, xpd);
+ return -ENODEV;
+ }
#endif
-
spin_lock_irqsave(&xbus->lock, flags);
- atomic_inc(&xbus->xbus_ref_count);
atomic_inc(&xpd->open_counter);
- DBG(DEVICES, "chan=%d (xbus_ref_count=%d)\n",
- pos, atomic_read(&xbus->xbus_ref_count));
+ LINE_DBG(DEVICES, xpd, pos, "%s[%d]: open_counter=%d\n",
+ current->comm, current->pid,
+ atomic_read(&xpd->open_counter));
spin_unlock_irqrestore(&xbus->lock, flags);
if(xpd->xops->card_open)
xpd->xops->card_open(xpd, pos);
@@ -761,14 +875,14 @@ int xpp_close(struct zt_chan *chan)
unsigned long flags;
spin_lock_irqsave(&xbus->lock, flags);
- atomic_dec(&xpd->open_counter);
spin_unlock_irqrestore(&xbus->lock, flags);
if(xpd->xops->card_close)
xpd->xops->card_close(xpd, pos);
- XPD_DBG(GENERAL, xpd, "pid=%d: chan=%d (xbus_ref_count=%d)\n",
- current->pid, pos, atomic_read(&xbus->xbus_ref_count));
- if(atomic_dec_and_test(&xbus->xbus_ref_count))
- xbus_remove(xbus);
+ LINE_DBG(DEVICES, xpd, pos, "%s[%d]: open_counter=%d\n",
+ current->comm, current->pid,
+ atomic_read(&xpd->open_counter));
+ atomic_dec(&xpd->open_counter); /* from xpp_open() */
+ put_xpd(__FUNCTION__, xpd); /* from xpp_open() */
return 0;
}
@@ -841,23 +955,23 @@ int xpp_maint(struct zt_span *span, int cmd)
DBG(GENERAL, "span->mainttimer=%d\n", span->mainttimer);
switch(cmd) {
case ZT_MAINT_NONE:
- printk("XXX Turn off local and remote loops XXX\n");
+ INFO("XXX Turn off local and remote loops XXX\n");
break;
case ZT_MAINT_LOCALLOOP:
- printk("XXX Turn on local loopback XXX\n");
+ INFO("XXX Turn on local loopback XXX\n");
break;
case ZT_MAINT_REMOTELOOP:
- printk("XXX Turn on remote loopback XXX\n");
+ INFO("XXX Turn on remote loopback XXX\n");
break;
case ZT_MAINT_LOOPUP:
- printk("XXX Send loopup code XXX\n");
+ INFO("XXX Send loopup code XXX\n");
// CALL_XMETHOD(LOOPBACK_AX, xpd->xbus, xpd, loopback_data, ARRAY_SIZE(loopback_data));
break;
case ZT_MAINT_LOOPDOWN:
- printk("XXX Send loopdown code XXX\n");
+ INFO("XXX Send loopdown code XXX\n");
break;
case ZT_MAINT_LOOPSTOP:
- printk("XXX Stop sending loop codes XXX\n");
+ INFO("XXX Stop sending loop codes XXX\n");
break;
default:
ERR("XPP: Unknown maint command: %d\n", cmd);
@@ -895,7 +1009,7 @@ static int xpp_watchdog(struct zt_span *span, int cause)
* - User action through /proc
* - During xpd_remove()
*/
-static int zaptel_unregister_xpd(xpd_t *xpd)
+int zaptel_unregister_xpd(xpd_t *xpd)
{
unsigned long flags;
@@ -908,6 +1022,7 @@ static int zaptel_unregister_xpd(xpd_t *xpd)
return -EIDRM;
}
update_xpd_status(xpd, ZT_ALARM_NOTOPEN);
+ /* We should now have only a ref from the xbus (from create_xpd()) */
if(atomic_read(&xpd->open_counter)) {
XPD_NOTICE(xpd, "Busy (open_counter=%d). Skipping.\n", atomic_read(&xpd->open_counter));
spin_unlock_irqrestore(&xpd->lock, flags);
@@ -925,7 +1040,7 @@ static int zaptel_unregister_xpd(xpd_t *xpd)
return 0;
}
-static int zaptel_register_xpd(xpd_t *xpd)
+int zaptel_register_xpd(xpd_t *xpd)
{
struct zt_span *span;
xbus_t *xbus;
@@ -985,7 +1100,7 @@ static int zaptel_register_xpd(xpd_t *xpd)
* - The modern "/sys/bus/astribanks/devices/xbus-??/connector" attribute
* So let's also export it via the newfangled "location" field.
*/
- snprintf(span->location, sizeof(span->location) - 1, "%s", xbus->location);
+ snprintf(span->location, sizeof(span->location) - 1, "%s", xbus->connector);
/*
* Who said a span and irq have 1-1 relationship?
* Also exporting this low-level detail isn't too wise.
@@ -996,8 +1111,6 @@ static int zaptel_register_xpd(xpd_t *xpd)
#ifdef ZAPTEL_SYNC_TICK
span->sync_tick = zaptel_sync_tick;
#endif
- if (xpp_ec)
- span->echocan = xpp_echocan;
#ifdef CONFIG_ZAPTEL_WATCHDOG
span->watchdog = xpp_watchdog;
#endif
@@ -1025,22 +1138,10 @@ static int zaptel_register_xpd(xpd_t *xpd)
for_each_line(xpd, cn) {
if(IS_OFFHOOK(xpd, cn))
notify_rxsig(xpd, cn, ZT_RXSIG_OFFHOOK);
- }
+ }
return 0;
}
-/*------------------------- Proc debugging interface ---------------*/
-
-#ifdef CONFIG_PROC_FS
-
-#if 0
-static int xpp_zap_write_proc(struct file *file, const char __user *buffer, unsigned long count, void *data)
-{
-}
-#endif
-
-#endif
-
/*------------------------- Initialization -------------------------*/
static void do_cleanup(void)
@@ -1097,12 +1198,13 @@ static void __exit xpp_zap_cleanup(void)
}
EXPORT_SYMBOL(debug);
-EXPORT_SYMBOL(xpd_common_init);
EXPORT_SYMBOL(create_xpd);
EXPORT_SYMBOL(xpd_post_init);
+EXPORT_SYMBOL(get_xpd);
+EXPORT_SYMBOL(put_xpd);
EXPORT_SYMBOL(xpd_alloc);
EXPORT_SYMBOL(xpd_free);
-EXPORT_SYMBOL(xpd_disconnect);
+EXPORT_SYMBOL(xbus_request_removal);
EXPORT_SYMBOL(update_xpd_status);
EXPORT_SYMBOL(oht_pcm);
EXPORT_SYMBOL(mark_offhook);
diff --git a/kernel/xpp/xpp_zap.h b/kernel/xpp/xpp_zap.h
index 8a4ffad..6eece7b 100644
--- a/kernel/xpp/xpp_zap.h
+++ b/kernel/xpp/xpp_zap.h
@@ -25,12 +25,13 @@
#include "xpd.h"
#include "xproto.h"
-void xpd_disconnect(xpd_t *xpd);
-int xpd_common_init(xbus_t *xbus, xpd_t *xpd, int unit, int subunit, int subtype, int subunits);
+int zaptel_register_xpd(xpd_t *xpd);
+int zaptel_unregister_xpd(xpd_t *xpd);
+void xbus_request_removal(xbus_t *xbus);
int create_xpd(xbus_t *xbus, const xproto_table_t *proto_table,
int unit, int subunit, byte type, byte subtype, int subunits, byte port_dir);
void xpd_post_init(xpd_t *xpd);
-xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channels);
+xpd_t *xpd_alloc(xbus_t *xbus, int unit, int subunit, int subtype, int subunits, size_t privsize, const xproto_table_t *proto_table, int channels);
void xpd_free(xpd_t *xpd);
void xpd_remove(xpd_t *xpd);
void update_xpd_status(xpd_t *xpd, int alarm_flag);
diff --git a/kernel/xpp/xproto.c b/kernel/xpp/xproto.c
index 05735e9..348b4b6 100644
--- a/kernel/xpp/xproto.c
+++ b/kernel/xpp/xproto.c
@@ -93,9 +93,7 @@ const xproto_table_t *xproto_get(xpd_type_t cardtype)
}
if(xtable) {
BUG_ON(!xtable->owner);
-#ifdef CONFIG_MODULE_UNLOAD
DBG(GENERAL, "%s refcount was %d\n", xtable->name, module_refcount(xtable->owner));
-#endif
if(!try_module_get(xtable->owner)) {
ERR("%s: try_module_get for %s failed.\n", __FUNCTION__, xtable->name);
return NULL;
@@ -107,10 +105,8 @@ const xproto_table_t *xproto_get(xpd_type_t cardtype)
void xproto_put(const xproto_table_t *xtable)
{
BUG_ON(!xtable);
-#ifdef CONFIG_MODULE_UNLOAD
DBG(GENERAL, "%s refcount was %d\n", xtable->name, module_refcount(xtable->owner));
BUG_ON(module_refcount(xtable->owner) <= 0);
-#endif
module_put(xtable->owner);
}
@@ -266,7 +262,7 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe)
FREE_RECV_XFRAME(xbus, xframe);
return -EPROTO;
}
- if(!XBUS_GET(xbus)) {
+ if(XBUS_IS(xbus, DISCONNECTED)) {
XBUS_DBG(GENERAL, xbus, "Dropped xframe. Is shutting down.\n");
return -ENODEV;
}
@@ -274,9 +270,12 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe)
/*
* We want to check that xframes do not mix PCM and other commands
*/
- if(XPACKET_IS_PCM((xpacket_t *)xframe->packets))
- xframe_receive_pcm(xbus, xframe);
- else {
+ if(XPACKET_IS_PCM((xpacket_t *)xframe->packets)) {
+ if(!XBUS_IS(xbus, READY))
+ FREE_RECV_XFRAME(xbus, xframe);
+ else
+ xframe_receive_pcm(xbus, xframe);
+ } else {
XBUS_COUNTER(xbus, RX_CMD)++;
ret = xframe_receive_cmd(xbus, xframe);
}
@@ -286,7 +285,6 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe)
now.tv_usec - tv_received.tv_usec;
if(usec > xbus->max_rx_process)
xbus->max_rx_process = usec;
- XBUS_PUT(xbus);
return ret;
}
diff --git a/kernel/xpp/xproto.h b/kernel/xpp/xproto.h
index cbf0726..f889b3a 100644
--- a/kernel/xpp/xproto.h
+++ b/kernel/xpp/xproto.h
@@ -147,15 +147,16 @@ bool valid_xpd_addr(const struct xpd_addr *addr);
do { \
int pack_len = RPACKET_SIZE(card,op); \
\
- if(!TRANSPORT_RUNNING(xbus)) \
+ if(XBUS_IS(xbus, DISCONNECTED)) \
return -ENODEV; \
- frm = ALLOC_SEND_XFRAME(xbus); \
- if(!frm) \
+ (frm) = ALLOC_SEND_XFRAME(xbus); \
+ if(!(frm)) \
return -ENOMEM; \
(p) = xframe_next_packet(frm, pack_len); \
if(!(p)) \
return -ENOMEM; \
XPACKET_INIT(p, card, op, to, 0, 0); \
+ (frm)->usec_towait = 0; \
} while(0)
#endif
diff --git a/kernel/xpp/zap_debug.h b/kernel/xpp/zap_debug.h
index 79aefdf..ba863ff 100644
--- a/kernel/xpp/zap_debug.h
+++ b/kernel/xpp/zap_debug.h
@@ -154,7 +154,7 @@ static inline char *hookstate2str(int hookstate)
return "Unknown hookstate";
}
-/* From zaptel.c */
+/* From zaptel-base.c */
static inline char *sig2str(int sig)
{
switch (sig) {