diff --git a/examples/osd/wirelessplug/Makefile b/examples/osd/wirelessplug/Makefile new file mode 100644 index 000000000..ea3722d59 --- /dev/null +++ b/examples/osd/wirelessplug/Makefile @@ -0,0 +1,88 @@ +all: er-example-server er-example-client +# Use this target explicitly if requried: er-plugtest-server + +CONTIKI=../../.. +CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\" + +# for static routing, if enabled +ifneq ($(TARGET), minimal-net) +ifneq ($(TARGET), native) +ifneq ($(findstring avr,$(TARGET)), avr) +PROJECT_SOURCEFILES += static-routing.c +endif +endif +endif + +# variable for root Makefile.include +WITH_UIP6=1 +# for some platforms +UIP_CONF_IPV6=1 + +# variable for this Makefile +# configure CoAP implementation (3|7) (er-coap-07 also supports CoAP draft 08) +WITH_COAP=7 + +# new variable since slip-radio +ifneq ($(TARGET), minimal-net) +UIP_CONF_RPL=1 +else +# minimal-net does not support RPL under Linux and is mostly used to test CoAP only +${info INFO: compiling without RPL} +UIP_CONF_RPL=0 +CFLAGS += -DUIP_CONF_ND6_DEF_MAXDADNS=0 +CFLAGS += -DHARD_CODED_ADDRESS=\"fdfd::10\" +CFLAGS += -DUIP_CONF_BUFFER_SIZE=1280 +endif + +# linker optimizations +SMALL=1 + +# REST framework, requires WITH_COAP +ifeq ($(WITH_COAP), 7) +${info INFO: compiling with CoAP-08} +CFLAGS += -DWITH_COAP=7 +CFLAGS += -DREST=coap_rest_implementation +CFLAGS += -DUIP_CONF_TCP=0 +APPS += er-coap-07 +else ifeq ($(WITH_COAP), 3) +${info INFO: compiling with CoAP-03} +CFLAGS += -DWITH_COAP=3 +CFLAGS += -DREST=coap_rest_implementation +CFLAGS += -DUIP_CONF_TCP=0 +APPS += er-coap-03 +else +${info INFO: compiling with HTTP} +CFLAGS += -DWITH_HTTP +CFLAGS += -DREST=http_rest_implementation +CFLAGS += -DUIP_CONF_TCP=1 +APPS += er-http-engine +endif + +APPS += erbium + +# optional rules to get assembly +#CUSTOM_RULE_C_TO_OBJECTDIR_O = 1 +#CUSTOM_RULE_S_TO_OBJECTDIR_O = 1 + +include $(CONTIKI)/Makefile.include + +# optional rules to get assembly +#$(OBJECTDIR)/%.o: asmdir/%.S +# $(CC) $(CFLAGS) -MMD -c $< -o $@ +# @$(FINALIZE_DEPENDENCY) +# +#asmdir/%.S: %.c +# $(CC) $(CFLAGS) -MMD -S $< -o $@ + +# border router rules +$(CONTIKI)/tools/tunslip6: $(CONTIKI)/tools/tunslip6.c + (cd $(CONTIKI)/tools && $(MAKE) tunslip6) + +connect-router: $(CONTIKI)/tools/tunslip6 + sudo $(CONTIKI)/tools/tunslip6 aaaa::1/64 + +connect-router-cooja: $(CONTIKI)/tools/tunslip6 + sudo $(CONTIKI)/tools/tunslip6 -a 127.0.0.1 aaaa::1/64 + +tap0up: + sudo ip address add fdfd::1/64 dev tap0 diff --git a/examples/osd/wirelessplug/README b/examples/osd/wirelessplug/README new file mode 100644 index 000000000..06283dc5e --- /dev/null +++ b/examples/osd/wirelessplug/README @@ -0,0 +1,88 @@ +A Quick Introduction to the Erbium (Er) REST Engine +=================================================== + +sudo avrdude -pm128rfa1 -c arduino -P/dev/ttyUSB0 -b57600 -e -U flash:w:er-example-server.osd-er-lp24.hex:a -U eeprom:w:er-example-server.osd-er-lp24.eep:a + +EXAMPLE FILES +------------- +er-example-server.c: A RESTful server example showing how to use the REST layer to develop server-side applications (at the moment only CoAP is implemented for the REST Engine). +er-example-client.c: A CoAP client that polls the /actuators/toggle resource every 10 seconds and cycles through 4 resources on button press (target address is hard-coded). +er-plugtest-server.c: The server used for draft compliance testing at ETSI IoT CoAP Plugtest in Paris, France, March 2012 (configured for minimal-net). + +PRELIMINARIES +------------- +- Make sure rpl-border-router has the same stack and fits into mote memory: + You can disable RDC in border-router project-conf.h (not really required as BR keeps radio turned on). + #undef NETSTACK_CONF_RDC + #define NETSTACK_CONF_RDC nullrdc_driver +- For convenience, define the Cooja addresses in /etc/hosts + aaaa::0212:7401:0001:0101 cooja1 + aaaa::0212:7402:0002:0202 cooja2 + ... +- Get the Copper (Cu) CoAP user-agent from https://addons.mozilla.org/en-US/firefox/addon/copper-270430/ +- Optional: Save your target as default target + $ make TARGET=sky savetarget + +COOJA HOWTO +----------- +Server only: +1) $ make TARGET=cooja server-only.csc +2) Open new terminal +3) $ make connect-router-cooja +4) Start Copper and discover resources at coap://cooja2:5683/ +- Choose "Click button on Sky 2" from the context menu of mote 2 (server) after requesting /test/separate +- Do the same when observing /test/event + +With client: +1) $ make TARGET=cooja server-client.csc +2) Open new terminal +3) $ make connect-router-cooja +4) Wait until red LED toggles on mote 2 (server) +5) Choose "Click button on Sky 3" from the context menu of mote 3 (client) and watch serial output + +TMOTES HOWTO +------------ +Server: +1) Connect two Tmote Skys (check with $ make TARGET=sky sky-motelist) +2) $ make TARGET=sky er-example-server.upload MOTE=2 +3) $ make TARGET=sky login MOTE=2 +4) Press reset button, get address, abort with Ctrl+C: + Line: "Tentative link-local IPv6 address fe80:0000:0000:0000:____:____:____:____" +5) $ cd ../ipv6/rpl-border-router/ +6) $ make TARGET=sky border-router.upload MOTE=1 +7) $ make connect-router + For a BR tty other than USB0: $ make connect-router-port PORT=X +8) Start Copper and discover resources at coap://[aaaa::____:____:____:____]:5683/ + +Add a client: +1) Change the hard-coded server address in er-example-client.c to aaaa::____:____:____:____ +2) Connect a third Tmote Sky +3) $ make TARGET=sky er-example-client.upload MOTE=3 + +DETAILS +------- +Erbium currently implements draft 08 (name "er-coap-07" stems from last technical draft changes). +Central features are commented in er-example-server.c. +In general, apps/er-coap-07 supports: +* All draft 08 header options +* CON Retransmissions (note COAP_MAX_OPEN_TRANSACTIONS) +* Blockwise Transfers (note REST_MAX_CHUNK_SIZE, see er-plugtest-server.c for Block1 uploads) +* Separate Responses (no rest_set_pre_handler() required anymore, note coap_separate_accept(), _reject(), and _resume()) +* Resource Discovery +* Observing Resources (see EVENT_ and PRERIODIC_RESOURCE, note COAP_MAX_OBSERVERS) + +REST IMPLEMENTATIONS +-------------------- +The Makefile uses WITH_COAP to configure different implementations for the Erbium (Er) REST Engine. +* WITH_COAP=7 uses Erbium CoAP 08 apps/er-coap-07/. + The default port for coap-07/-08 is 5683. +* WITH_COAP=3 uses Erbium CoAP 03 apps/er-coap-03/. + The default port for coap-03 is 61616. + er-coap-03 produces some warnings, as it not fully maintained anymore. +* WITH_COAP=0 is a stub to link an Erbium HTTP engine that uses the same resource abstraction (REST.x() functions and RESOURCE macros. + +TODOs +----- +* Observe client +* Multiple If-Match ETags +* (Message deduplication) diff --git a/examples/osd/wirelessplug/er-example-client.c b/examples/osd/wirelessplug/er-example-client.c new file mode 100644 index 000000000..d1d543cf0 --- /dev/null +++ b/examples/osd/wirelessplug/er-example-client.c @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2011, Matthias Kovatsch and other contributors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +/** + * \file + * Erbium (Er) CoAP client example + * \author + * Matthias Kovatsch + */ + +#include +#include +#include + +#include "contiki.h" +#include "contiki-net.h" + +#if !UIP_CONF_IPV6_RPL && !defined (CONTIKI_TARGET_MINIMAL_NET) && !defined (CONTIKI_TARGET_NATIVE) +#warning "Compiling with static routing!" +#include "static-routing.h" +#endif + +#include "dev/button-sensor.h" + +#if WITH_COAP == 3 +#include "er-coap-03-engine.h" +#elif WITH_COAP == 6 +#include "er-coap-06-engine.h" +#elif WITH_COAP == 7 +#include "er-coap-07-engine.h" +#else +#error "CoAP version defined by WITH_COAP not implemented" +#endif + + +#define DEBUG 0 +#if DEBUG +#define PRINTF(...) printf(__VA_ARGS__) +#define PRINT6ADDR(addr) PRINTF("[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15]) +#define PRINTLLADDR(lladdr) PRINTF("[%02x:%02x:%02x:%02x:%02x:%02x]",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5]) +#else +#define PRINTF(...) +#define PRINT6ADDR(addr) +#define PRINTLLADDR(addr) +#endif + +/* TODO: This server address is hard-coded for Cooja. */ +#define SERVER_NODE(ipaddr) uip_ip6addr(ipaddr, 0xaaaa, 0, 0, 0, 0x0212, 0x7402, 0x0002, 0x0202) /* cooja2 */ + +#define LOCAL_PORT UIP_HTONS(COAP_DEFAULT_PORT+1) +#define REMOTE_PORT UIP_HTONS(COAP_DEFAULT_PORT) + +#define TOGGLE_INTERVAL 10 + +PROCESS(coap_client_example, "COAP Client Example"); +AUTOSTART_PROCESSES(&coap_client_example); + + +uip_ipaddr_t server_ipaddr; +static struct etimer et; + +/* Example URIs that can be queried. */ +#define NUMBER_OF_URLS 4 +/* leading and ending slashes only for demo purposes, get cropped automatically when setting the Uri-Path */ +char* service_urls[NUMBER_OF_URLS] = {".well-known/core", "/actuators/toggle", "battery/", "error/in//path"}; +#if PLATFORM_HAS_BUTTON +static int uri_switch = 0; +#endif + +/* This function is will be passed to COAP_BLOCKING_REQUEST() to handle responses. */ +void +client_chunk_handler(void *response) +{ + uint8_t *chunk; + + int len = coap_get_payload(response, &chunk); + printf("|%.*s", len, (char *)chunk); +} + + +PROCESS_THREAD(coap_client_example, ev, data) +{ + PROCESS_BEGIN(); + + static coap_packet_t request[1]; /* This way the packet can be treated as pointer as usual. */ + SERVER_NODE(&server_ipaddr); + + /* receives all CoAP messages */ + coap_receiver_init(); + + etimer_set(&et, TOGGLE_INTERVAL * CLOCK_SECOND); + +#if PLATFORM_HAS_BUTTON + SENSORS_ACTIVATE(button_sensor); + printf("Press a button to request %s\n", service_urls[uri_switch]); +#endif + + while(1) { + PROCESS_YIELD(); + + if (etimer_expired(&et)) { + printf("--Toggle timer--\n"); + + /* prepare request, TID is set by COAP_BLOCKING_REQUEST() */ + coap_init_message(request, COAP_TYPE_CON, COAP_POST, 0 ); + coap_set_header_uri_path(request, service_urls[1]); + + const char msg[] = "Toggle!"; + coap_set_payload(request, (uint8_t *)msg, sizeof(msg)-1); + + + PRINT6ADDR(&server_ipaddr); + PRINTF(" : %u\n", UIP_HTONS(REMOTE_PORT)); + + COAP_BLOCKING_REQUEST(&server_ipaddr, REMOTE_PORT, request, client_chunk_handler); + + printf("\n--Done--\n"); + + etimer_reset(&et); + +#if PLATFORM_HAS_BUTTON + } else if (ev == sensors_event && data == &button_sensor) { + + /* send a request to notify the end of the process */ + + coap_init_message(request, COAP_TYPE_CON, COAP_GET, 0); + coap_set_header_uri_path(request, service_urls[uri_switch]); + + printf("--Requesting %s--\n", service_urls[uri_switch]); + + PRINT6ADDR(&server_ipaddr); + PRINTF(" : %u\n", UIP_HTONS(REMOTE_PORT)); + + COAP_BLOCKING_REQUEST(&server_ipaddr, REMOTE_PORT, request, client_chunk_handler); + + printf("\n--Done--\n"); + + uri_switch = (uri_switch+1) % NUMBER_OF_URLS; +#endif + + } + } + + PROCESS_END(); +} diff --git a/examples/osd/wirelessplug/er-example-client.osd-er-lp24 b/examples/osd/wirelessplug/er-example-client.osd-er-lp24 new file mode 100755 index 000000000..75f76b867 Binary files /dev/null and b/examples/osd/wirelessplug/er-example-client.osd-er-lp24 differ diff --git a/examples/osd/wirelessplug/er-example-server.c b/examples/osd/wirelessplug/er-example-server.c new file mode 100644 index 000000000..f72739fe0 --- /dev/null +++ b/examples/osd/wirelessplug/er-example-server.c @@ -0,0 +1,1078 @@ +/* + * Copyright (c) 2011, Matthias Kovatsch and other contributors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +/** + * \file + * Erbium (Er) REST Engine example (with CoAP-specific code) + * \author + * Matthias Kovatsch + */ + +#include +#include +#include +#include "contiki.h" +#include "contiki-net.h" + + +/* Define which resources to include to meet memory constraints. */ +#define REST_RES_INFO 1 +#define REST_RES_DS1820 0 +#define REST_RES_HELLO 0 +#define REST_RES_MIRROR 0 /* causes largest code size */ +#define REST_RES_CHUNKS 0 +#define REST_RES_SEPARATE 0 +#define REST_RES_PUSHING 0 +#define REST_RES_EVENT 0 +#define REST_RES_SUB 0 +#define REST_RES_LEDS 0 +#define REST_RES_TOGGLE 0 +#define REST_RES_LIGHT 0 +#define REST_RES_BATTERY 0 +#define REST_RES_RADIO 0 + + + +#if !UIP_CONF_IPV6_RPL && !defined (CONTIKI_TARGET_MINIMAL_NET) && !defined (CONTIKI_TARGET_NATIVE) +#warning "Compiling with static routing!" +#include "static-routing.h" +#endif + +#include "erbium.h" + +// todo OSD-Testboard move to platform/dev +#include "dev/led.h" +#if REST_RES_DS1820 +#include "dev/ds1820.h" +#endif + +#if defined (PLATFORM_HAS_BUTTON) +#include "dev/button-sensor.h" +#endif +#if defined (PLATFORM_HAS_LEDS) +#include "dev/leds.h" +#endif +#if defined (PLATFORM_HAS_LIGHT) +#include "dev/light-sensor.h" +#endif +#if defined (PLATFORM_HAS_BATTERY) +#include "dev/battery-sensor.h" +#endif +#if defined (PLATFORM_HAS_SHT11) +#include "dev/sht11-sensor.h" +#endif +#if defined (PLATFORM_HAS_RADIO) +#include "dev/radio-sensor.h" +#endif + + +/* For CoAP-specific example: not required for normal RESTful Web service. */ +#if WITH_COAP == 3 +#include "er-coap-03.h" +#elif WITH_COAP == 7 +#include "er-coap-07.h" +#else +#warning "Erbium example without CoAP-specifc functionality" +#endif /* CoAP-specific example */ + +#define DEBUG 0 +#if DEBUG +#define PRINTF(...) printf(__VA_ARGS__) +#define PRINT6ADDR(addr) PRINTF("[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15]) +#define PRINTLLADDR(lladdr) PRINTF("[%02x:%02x:%02x:%02x:%02x:%02x]",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5]) +#else +#define PRINTF(...) +#define PRINT6ADDR(addr) +#define PRINTLLADDR(addr) +#endif + + +// todo: move platform /dev +#include "dev/led.c" +#if REST_RES_DS1820 +#include "dev/ds1820.c" +#endif + +/******************************************************************************/ + +#if REST_RES_INFO +/* + * Resources are defined by the RESOURCE macro. + * Signature: resource name, the RESTful methods it handles, and its URI path (omitting the leading slash). + */ +RESOURCE(info, METHOD_GET, "info", "title=\"Info\";rt=\"Text\""); + +/* + * A handler function named [resource name]_handler must be implemented for each RESOURCE. + * A buffer for the response payload is provided through the buffer pointer. Simple resources can ignore + * preferred_size and offset, but must respect the REST_MAX_CHUNK_SIZE limit for the buffer. + * If a smaller block size is requested for CoAP, the REST framework automatically splits the data. + */ +void +info_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + char message[100]; + int index = 0; + int length = 0; /* |<-------->| */ + + /* Some data that has the length up to REST_MAX_CHUNK_SIZE. For more, see the chunk resource. */ + // jSON Format + index += sprintf(message + index,"{\n \"version\" : \"V0.3\",\n"); + index += sprintf(message + index," \"name\" : \"wireless-plug\"\n"); + index += sprintf(message + index,"}\n"); + + length = strlen(message); + memcpy(buffer, message,length ); + + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + REST.set_response_payload(response, buffer, length); +} +#endif + + +/*A simple actuator example, post variable mode, relay is activated or deactivated*/ +RESOURCE(plug1, METHOD_GET | METHOD_PUT , "plug1", "title=\"plug1\";rt=\"Text\""); +void +plug1_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + char mode[10]; + static uint8_t led2 = 0; + static char name[17]="plug1"; + int success = 1; + + char temp[100]; + int index = 0; + size_t len = 0; + + const char *pmode = NULL; + const char *pname = NULL; + + switch(REST.get_method_type(request)){ + case METHOD_GET: + // jSON Format + index += sprintf(temp + index,"{\n \"name\" : \"%s\",\n",name); + if(led2 == 0) + index += sprintf(temp + index," \"mode\" : \"off\"\n"); + if(led2 == 1) + index += sprintf(temp + index," \"mode\" : \"on\"\n"); + index += sprintf(temp + index,"}\n"); + + len = strlen(temp); + memcpy(buffer, temp,len ); + + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + REST.set_response_payload(response, buffer, len); + break; + case METHOD_POST: + success = 0; + break; + case METHOD_PUT: + if (success && (len=REST.get_post_variable(request, "mode", &pmode))) { + PRINTF("name %s\n", mode); + memcpy(mode, pmode,len); + mode[len]=0; + if (!strcmp(mode, "on")) { + led2_on(); + led2 = 1; + } else if (!strcmp(mode, "off")) { + led2_off(); + led2 = 0; + } else { + success = 0; + } + } else if (success && (len=REST.get_post_variable(request, "name", &pname))) { + PRINTF("name %s\n", name); + memcpy(name, pname,len); + name[len]=0; + } else { + success = 0; + } + break; + default: + success = 0; + } + + if (!success) { + REST.set_response_status(response, REST.status.BAD_REQUEST); + } +} + +#if REST_RES_DS1820 +/*A simple getter example. Returns the reading from ds1820 sensor*/ +RESOURCE(ds1820, METHOD_GET, "DS1820", "title=\"Temperatur\";rt=\"Temperatur\""); +void +ds1820_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + + char message[100]; + int length = 0; /* |<-------->| */ + int ret=0; + int grad=0; + int kgrad=0; +// ret=ds1820_temp(); + if(ds1820_ok[0] & 0x01){ + kgrad=5; + } + grad = (int)((ds1820_ok[1] << 8) | (ds1820_ok[0])) >> 1; + + uint16_t *accept = NULL; + int num = REST.get_header_accept(request, &accept); + + if ((num==0) || (num && accept[0]==REST.type.TEXT_PLAIN)) + { + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + snprintf(message, REST_MAX_CHUNK_SIZE, "%2d.%d °C",grad,kgrad); + + length = strlen(message); + memcpy(buffer, message,length ); + + REST.set_response_payload(response, buffer, length); + } + else if (num && (accept[0]==REST.type.APPLICATION_JSON)) + { + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + snprintf(message, REST_MAX_CHUNK_SIZE, "{\"temp\":\"%d.%d °C\"}",grad,kgrad); + + length = strlen(message); + memcpy(buffer, message,length ); + + REST.set_response_payload(response, buffer, length); + } + else + { + REST.set_response_status(response, REST.status.UNSUPPORTED_MADIA_TYPE); + REST.set_response_payload(response, (uint8_t *)"Supporting content-types text/plain and application/json", 56); + } +} +#endif //REST_RES_DS1820 + +#if REST_RES_HELLO +/* + * Resources are defined by the RESOURCE macro. + * Signature: resource name, the RESTful methods it handles, and its URI path (omitting the leading slash). + */ +RESOURCE(helloworld, METHOD_GET, "hello", "title=\"Hello world: ?len=0..\";rt=\"Text\""); + +/* + * A handler function named [resource name]_handler must be implemented for each RESOURCE. + * A buffer for the response payload is provided through the buffer pointer. Simple resources can ignore + * preferred_size and offset, but must respect the REST_MAX_CHUNK_SIZE limit for the buffer. + * If a smaller block size is requested for CoAP, the REST framework automatically splits the data. + */ +void +helloworld_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + const char *len = NULL; + /* Some data that has the length up to REST_MAX_CHUNK_SIZE. For more, see the chunk resource. */ + char const * const message = "Hello World! ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy"; + int length = 12; /* |<-------->| */ + + /* The query string can be retrieved by rest_get_query() or parsed for its key-value pairs. */ + if (REST.get_query_variable(request, "len", &len)) { + length = atoi(len); + if (length<0) length = 0; + if (length>REST_MAX_CHUNK_SIZE) length = REST_MAX_CHUNK_SIZE; + memcpy(buffer, message, length); + } else { + memcpy(buffer, message, length); + } + + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); /* text/plain is the default, hence this option could be omitted. */ + REST.set_header_etag(response, (uint8_t *) &length, 1); + REST.set_response_payload(response, buffer, length); +} +#endif + +/******************************************************************************/ +#if REST_RES_MIRROR +/* This resource mirrors the incoming request. It shows how to access the options and how to set them for the response. */ +RESOURCE(mirror, METHOD_GET | METHOD_POST | METHOD_PUT | METHOD_DELETE, "debug/mirror", "title=\"Returns your decoded message\";rt=\"Debug\""); + +void +mirror_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + /* The ETag and Token is copied to the header. */ + uint8_t opaque[] = {0x0A, 0xBC, 0xDE}; + + /* Strings are not copied, so use static string buffers or strings in .text memory (char *str = "string in .text";). */ + static char location[] = {'/','f','/','a','?','k','&','e', 0}; + + /* Getter for the header option Content-Type. If the option is not set, text/plain is returned by default. */ + unsigned int content_type = REST.get_header_content_type(request); + + /* The other getters copy the value (or string/array pointer) to the given pointers and return 1 for success or the length of strings/arrays. */ + uint32_t max_age = 0; + const char *str = NULL; + uint32_t observe = 0; + const uint8_t *bytes = NULL; + uint32_t block_num = 0; + uint8_t block_more = 0; + uint16_t block_size = 0; + const char *query = ""; + int len = 0; + + /* Mirror the received header options in the response payload. Unsupported getters (e.g., rest_get_header_observe() with HTTP) will return 0. */ + + int strpos = 0; + /* snprintf() counts the terminating '\0' to the size parameter. + * The additional byte is taken care of by allocating REST_MAX_CHUNK_SIZE+1 bytes in the REST framework. + * Add +1 to fill the complete buffer. */ + strpos += snprintf((char *)buffer, REST_MAX_CHUNK_SIZE+1, "CT %u\n", content_type); + + /* Some getters such as for ETag or Location are omitted, as these options should not appear in a request. + * Max-Age might appear in HTTP requests or used for special purposes in CoAP. */ + if (strpos<=REST_MAX_CHUNK_SIZE && REST.get_header_max_age(request, &max_age)) + { + strpos += snprintf((char *)buffer+strpos, REST_MAX_CHUNK_SIZE-strpos+1, "MA %lu\n", max_age); + } + + if (strpos<=REST_MAX_CHUNK_SIZE && (len = REST.get_header_host(request, &str))) + { + strpos += snprintf((char *)buffer+strpos, REST_MAX_CHUNK_SIZE-strpos+1, "UH %.*s\n", len, str); + } + +/* CoAP-specific example: actions not required for normal RESTful Web service. */ +#if WITH_COAP > 1 + if (strpos<=REST_MAX_CHUNK_SIZE && coap_get_header_observe(request, &observe)) + { + strpos += snprintf((char *)buffer+strpos, REST_MAX_CHUNK_SIZE-strpos+1, "Ob %lu\n", observe); + } + if (strpos<=REST_MAX_CHUNK_SIZE && (len = coap_get_header_token(request, &bytes))) + { + strpos += snprintf((char *)buffer+strpos, REST_MAX_CHUNK_SIZE-strpos+1, "To 0x"); + int index = 0; + for (index = 0; index 03 */ +#endif /* CoAP-specific example */ + + if (strpos<=REST_MAX_CHUNK_SIZE && (len = REST.get_query(request, &query))) + { + strpos += snprintf((char *)buffer+strpos, REST_MAX_CHUNK_SIZE-strpos+1, "Qu %.*s\n", len, query); + } + if (strpos<=REST_MAX_CHUNK_SIZE && (len = REST.get_request_payload(request, &bytes))) + { + strpos += snprintf((char *)buffer+strpos, REST_MAX_CHUNK_SIZE-strpos+1, "%.*s", len, bytes); + } + + if (strpos >= REST_MAX_CHUNK_SIZE) + { + buffer[REST_MAX_CHUNK_SIZE-1] = 0xBB; /* '»' to indicate truncation */ + } + + REST.set_response_payload(response, buffer, strpos); + + PRINTF("/mirror options received: %s\n", buffer); + + /* Set dummy header options for response. Like getters, some setters are not implemented for HTTP and have no effect. */ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_header_max_age(response, 10); /* For HTTP, browsers will not re-request the page for 10 seconds. CoAP action depends on the client. */ + REST.set_header_etag(response, opaque, 2); + REST.set_header_location(response, location); /* Initial slash is omitted by framework */ + +/* CoAP-specific example: actions not required for normal RESTful Web service. */ +#if WITH_COAP > 1 + coap_set_header_uri_host(response, "tiki"); + coap_set_header_observe(response, 10); +#if WITH_COAP == 3 + coap_set_header_block(response, 42, 0, 64); /* The block option might be overwritten by the framework when blockwise transfer is requested. */ +#else + coap_set_header_proxy_uri(response, "ftp://x"); + coap_set_header_block2(response, 42, 0, 64); /* The block option might be overwritten by the framework when blockwise transfer is requested. */ + coap_set_header_block1(response, 23, 0, 16); + coap_set_header_accept(response, TEXT_PLAIN); + coap_set_header_if_none_match(response); +#endif /* CoAP > 03 */ +#endif /* CoAP-specific example */ +} +#endif /* REST_RES_MIRROR */ + +/******************************************************************************/ +#if REST_RES_CHUNKS +/* + * For data larger than REST_MAX_CHUNK_SIZE (e.g., stored in flash) resources must be aware of the buffer limitation + * and split their responses by themselves. To transfer the complete resource through a TCP stream or CoAP's blockwise transfer, + * the byte offset where to continue is provided to the handler as int32_t pointer. + * These chunk-wise resources must set the offset value to its new position or -1 of the end is reached. + * (The offset for CoAP's blockwise transfer can go up to 2'147'481'600 = ~2047 M for block size 2048 (reduced to 1024 in observe-03.) + */ +RESOURCE(chunks, METHOD_GET, "test/chunks", "title=\"Blockwise demo\";rt=\"Data\""); + +#define CHUNKS_TOTAL 2050 + +void +chunks_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + int32_t strpos = 0; + + /* Check the offset for boundaries of the resource data. */ + if (*offset>=CHUNKS_TOTAL) + { + REST.set_response_status(response, REST.status.BAD_OPTION); + /* A block error message should not exceed the minimum block size (16). */ + + const char *error_msg = "BlockOutOfScope"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + + /* Generate data until reaching CHUNKS_TOTAL. */ + while (strpos preferred_size) + { + strpos = preferred_size; + } + + /* Truncate if above CHUNKS_TOTAL bytes. */ + if (*offset+(int32_t)strpos > CHUNKS_TOTAL) + { + strpos = CHUNKS_TOTAL - *offset; + } + + REST.set_response_payload(response, buffer, strpos); + + /* IMPORTANT for chunk-wise resources: Signal chunk awareness to REST engine. */ + *offset += strpos; + + /* Signal end of resource representation. */ + if (*offset>=CHUNKS_TOTAL) + { + *offset = -1; + } +} +#endif + +/******************************************************************************/ +#if REST_RES_SEPARATE && defined (PLATFORM_HAS_BUTTON) && WITH_COAP > 3 +/* Required to manually (=not by the engine) handle the response transaction. */ +#include "er-coap-07-separate.h" +#include "er-coap-07-transactions.h" +/* + * CoAP-specific example for separate responses. + * Note the call "rest_set_pre_handler(&resource_separate, coap_separate_handler);" in the main process. + * The pre-handler takes care of the empty ACK and updates the MID and message type for CON requests. + * The resource handler must store all information that required to finalize the response later. + */ +RESOURCE(separate, METHOD_GET, "test/separate", "title=\"Separate demo\""); + +/* A structure to store the required information */ +typedef struct application_separate_store { + /* Provided by Erbium to store generic request information such as remote address and token. */ + coap_separate_t request_metadata; + /* Add fields for addition information to be stored for finalizing, e.g.: */ + char buffer[16]; +} application_separate_store_t; + +static uint8_t separate_active = 0; +static application_separate_store_t separate_store[1]; + +void +separate_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + /* + * Example allows only one open separate response. + * For multiple, the application must manage the list of stores. + */ + if (separate_active) + { + coap_separate_reject(); + } + else + { + separate_active = 1; + + /* Take over and skip response by engine. */ + coap_separate_accept(request, &separate_store->request_metadata); + /* Be aware to respect the Block2 option, which is also stored in the coap_separate_t. */ + + /* + * At the moment, only the minimal information is stored in the store (client address, port, token, MID, type, and Block2). + * Extend the store, if the application requires additional information from this handler. + * buffer is an example field for custom information. + */ + snprintf(separate_store->buffer, sizeof(separate_store->buffer), "StoredInfo"); + } +} + +void +separate_finalize_handler() +{ + if (separate_active) + { + coap_transaction_t *transaction = NULL; + if ( (transaction = coap_new_transaction(separate_store->request_metadata.mid, &separate_store->request_metadata.addr, separate_store->request_metadata.port)) ) + { + coap_packet_t response[1]; /* This way the packet can be treated as pointer as usual. */ + + /* Restore the request information for the response. */ + coap_separate_resume(response, &separate_store->request_metadata, CONTENT_2_05); + + coap_set_payload(response, separate_store->buffer, strlen(separate_store->buffer)); + + /* + * Be aware to respect the Block2 option, which is also stored in the coap_separate_t. + * As it is a critical option, this example resource pretends to handle it for compliance. + */ + coap_set_header_block2(response, separate_store->request_metadata.block2_num, 0, separate_store->request_metadata.block2_size); + + /* Warning: No check for serialization error. */ + transaction->packet_len = coap_serialize_message(response, transaction->packet); + coap_send_transaction(transaction); + /* The engine will clear the transaction (right after send for NON, after acked for CON). */ + + separate_active = 0; + } + else + { + /* + * Set timer for retry, send error message, ... + * The example simply waits for another button press. + */ + } + } /* if (separate_active) */ +} +#endif + +/******************************************************************************/ +#if REST_RES_PUSHING +/* + * Example for a periodic resource. + * It takes an additional period parameter, which defines the interval to call [name]_periodic_handler(). + * A default post_handler takes care of subscriptions by managing a list of subscribers to notify. + */ +PERIODIC_RESOURCE(pushing, METHOD_GET, "test/push", "title=\"Periodic demo\";obs", 5*CLOCK_SECOND); + +void +pushing_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + + /* Usually, a CoAP server would response with the resource representation matching the periodic_handler. */ + const char *msg = "It's periodic!"; + REST.set_response_payload(response, msg, strlen(msg)); + + /* A post_handler that handles subscriptions will be called for periodic resources by the REST framework. */ +} + +/* + * Additionally, a handler function named [resource name]_handler must be implemented for each PERIODIC_RESOURCE. + * It will be called by the REST manager process with the defined period. + */ +void +pushing_periodic_handler(resource_t *r) +{ + static uint16_t obs_counter = 0; + static char content[11]; + + ++obs_counter; + + PRINTF("TICK %u for /%s\n", obs_counter, r->url); + + /* Build notification. */ + coap_packet_t notification[1]; /* This way the packet can be treated as pointer as usual. */ + coap_init_message(notification, COAP_TYPE_NON, CONTENT_2_05, 0 ); + coap_set_payload(notification, content, snprintf(content, sizeof(content), "TICK %u", obs_counter)); + + /* Notify the registered observers with the given message type, observe option, and payload. */ + REST.notify_subscribers(r, obs_counter, notification); +} +#endif + +/******************************************************************************/ +#if REST_RES_EVENT && defined (PLATFORM_HAS_BUTTON) +/* + * Example for an event resource. + * Additionally takes a period parameter that defines the interval to call [name]_periodic_handler(). + * A default post_handler takes care of subscriptions and manages a list of subscribers to notify. + */ +EVENT_RESOURCE(event, METHOD_GET, "sensors/button", "title=\"Event demo\";obs"); + +void +event_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + /* Usually, a CoAP server would response with the current resource representation. */ + const char *msg = "It's eventful!"; + REST.set_response_payload(response, (uint8_t *)msg, strlen(msg)); + + /* A post_handler that handles subscriptions/observing will be called for periodic resources by the framework. */ +} + +/* Additionally, a handler function named [resource name]_event_handler must be implemented for each PERIODIC_RESOURCE defined. + * It will be called by the REST manager process with the defined period. */ +void +event_event_handler(resource_t *r) +{ + static uint16_t event_counter = 0; + static char content[12]; + + ++event_counter; + + PRINTF("TICK %u for /%s\n", event_counter, r->url); + + /* Build notification. */ + coap_packet_t notification[1]; /* This way the packet can be treated as pointer as usual. */ + coap_init_message(notification, COAP_TYPE_CON, CONTENT_2_05, 0 ); + coap_set_payload(notification, content, snprintf(content, sizeof(content), "EVENT %u", event_counter)); + + /* Notify the registered observers with the given message type, observe option, and payload. */ + REST.notify_subscribers(r, event_counter, notification); +} +#endif /* PLATFORM_HAS_BUTTON */ + +/******************************************************************************/ +#if REST_RES_SUB +/* + * Example for a resource that also handles all its sub-resources. + * Use REST.get_url() to multiplex the handling of the request depending on the Uri-Path. + */ +RESOURCE(sub, METHOD_GET | HAS_SUB_RESOURCES, "test/path", "title=\"Sub-resource demo\""); + +void +sub_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + + const char *uri_path = NULL; + int len = REST.get_url(request, &uri_path); + int base_len = strlen(resource_sub.url); + + if (len==base_len) + { + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "Request any sub-resource of /%s", resource_sub.url); + } + else + { + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, ".%s", uri_path+base_len); + } + + REST.set_response_payload(response, buffer, strlen((char *)buffer)); +} +#endif + +/******************************************************************************/ +#if defined (PLATFORM_HAS_LEDS) +/******************************************************************************/ +#if REST_RES_LEDS +/*A simple actuator example, depending on the color query parameter and post variable mode, corresponding led is activated or deactivated*/ +RESOURCE(leds, METHOD_POST | METHOD_PUT , "actuators/leds", "title=\"LEDs: ?color=r|g|b, POST/PUT mode=on|off\";rt=\"Control\""); + +void +leds_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + size_t len = 0; + const char *color = NULL; + const char *mode = NULL; + uint8_t led = 0; + int success = 1; + + if ((len=REST.get_query_variable(request, "color", &color))) { + PRINTF("color %.*s\n", len, color); + + if (strncmp(color, "r", len)==0) { + led = LEDS_RED; + } else if(strncmp(color,"g", len)==0) { + led = LEDS_GREEN; + } else if (strncmp(color,"b", len)==0) { + led = LEDS_BLUE; + } else { + success = 0; + } + } else { + success = 0; + } + + if (success && (len=REST.get_post_variable(request, "mode", &mode))) { + PRINTF("mode %s\n", mode); + + if (strncmp(mode, "on", len)==0) { + leds_on(led); + } else if (strncmp(mode, "off", len)==0) { + leds_off(led); + } else { + success = 0; + } + } else { + success = 0; + } + + if (!success) { + REST.set_response_status(response, REST.status.BAD_REQUEST); + } +} +#endif + +/******************************************************************************/ +#if REST_RES_TOGGLE +/* A simple actuator example. Toggles the red led */ +RESOURCE(toggle, METHOD_GET | METHOD_PUT | METHOD_POST, "actuators/toggle", "title=\"Red LED\";rt=\"Control\""); +void +toggle_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + leds_toggle(LEDS_RED); +} +#endif +#endif /* PLATFORM_HAS_LEDS */ + +/******************************************************************************/ +#if REST_RES_LIGHT && defined (PLATFORM_HAS_LIGHT) +/* A simple getter example. Returns the reading from light sensor with a simple etag */ +RESOURCE(light, METHOD_GET, "sensors/light", "title=\"Photosynthetic and solar light (supports JSON)\";rt=\"LightSensor\""); +void +light_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + uint16_t light_photosynthetic = light_sensor.value(LIGHT_SENSOR_PHOTOSYNTHETIC); + uint16_t light_solar = light_sensor.value(LIGHT_SENSOR_TOTAL_SOLAR); + + const uint16_t *accept = NULL; + int num = REST.get_header_accept(request, &accept); + + if ((num==0) || (num && accept[0]==REST.type.TEXT_PLAIN)) + { + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "%u;%u", light_photosynthetic, light_solar); + + REST.set_response_payload(response, (uint8_t *)buffer, strlen((char *)buffer)); + } + else if (num && (accept[0]==REST.type.APPLICATION_XML)) + { + REST.set_header_content_type(response, REST.type.APPLICATION_XML); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "", light_photosynthetic, light_solar); + + REST.set_response_payload(response, buffer, strlen((char *)buffer)); + } + else if (num && (accept[0]==REST.type.APPLICATION_JSON)) + { + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "{'light':{'photosynthetic':%u,'solar':%u}}", light_photosynthetic, light_solar); + + REST.set_response_payload(response, buffer, strlen((char *)buffer)); + } + else + { + REST.set_response_status(response, REST.status.UNSUPPORTED_MADIA_TYPE); + const char *msg = "Supporting content-types text/plain, application/xml, and application/json"; + REST.set_response_payload(response, msg, strlen(msg)); + } +} +#endif /* PLATFORM_HAS_LIGHT */ + +/******************************************************************************/ +#if REST_RES_BATTERY && defined (PLATFORM_HAS_BATTERY) +/* A simple getter example. Returns the reading from light sensor with a simple etag */ +RESOURCE(battery, METHOD_GET, "sensors/battery", "title=\"Battery status\";rt=\"Battery\""); +void +battery_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + int battery = battery_sensor.value(0); + + const uint16_t *accept = NULL; + int num = REST.get_header_accept(request, &accept); + + if ((num==0) || (num && accept[0]==REST.type.TEXT_PLAIN)) + { + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "%d", battery); + + REST.set_response_payload(response, (uint8_t *)buffer, strlen((char *)buffer)); + } + else if (num && (accept[0]==REST.type.APPLICATION_JSON)) + { + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "{'battery':%d}", battery); + + REST.set_response_payload(response, buffer, strlen((char *)buffer)); + } + else + { + REST.set_response_status(response, REST.status.UNSUPPORTED_MADIA_TYPE); + const char *msg = "Supporting content-types text/plain and application/json"; + REST.set_response_payload(response, msg, strlen(msg)); + } +} +#endif /* PLATFORM_HAS_BATTERY */ + + +#if defined (PLATFORM_HAS_RADIO) && REST_RES_RADIO +/* A simple getter example. Returns the reading of the rssi/lqi from radio sensor */ +RESOURCE(radio, METHOD_GET, "sensor/radio", "title=\"RADIO: ?p=lqi|rssi\";rt=\"RadioSensor\""); + +void +radio_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + size_t len = 0; + const char *p = NULL; + uint8_t param = 0; + int success = 1; + + const uint16_t *accept = NULL; + int num = REST.get_header_accept(request, &accept); + + if ((len=REST.get_query_variable(request, "p", &p))) { + PRINTF("p %.*s\n", len, p); + if (strncmp(p, "lqi", len)==0) { + param = RADIO_SENSOR_LAST_VALUE; + } else if(strncmp(p,"rssi", len)==0) { + param = RADIO_SENSOR_LAST_PACKET; + } else { + success = 0; + } + } else { + success = 0; + } + + if (success) { + if ((num==0) || (num && accept[0]==REST.type.TEXT_PLAIN)) + { + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "%d", radio_sensor.value(param)); + + REST.set_response_payload(response, (uint8_t *)buffer, strlen((char *)buffer)); + } + else if (num && (accept[0]==REST.type.APPLICATION_JSON)) + { + REST.set_header_content_type(response, REST.type.APPLICATION_JSON); + + if (param == RADIO_SENSOR_LAST_VALUE) { + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "{'lqi':%d}", radio_sensor.value(param)); + } else if (param == RADIO_SENSOR_LAST_PACKET) { + snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "{'rssi':%d}", radio_sensor.value(param)); + } + + REST.set_response_payload(response, buffer, strlen((char *)buffer)); + } + else + { + REST.set_response_status(response, REST.status.UNSUPPORTED_MADIA_TYPE); + const char *msg = "Supporting content-types text/plain and application/json"; + REST.set_response_payload(response, msg, strlen(msg)); + } + } else { + REST.set_response_status(response, REST.status.BAD_REQUEST); + } +} +#endif + +void +hw_init() +{ + led1_off(); + led2_off(); +#if REST_RES_DS1820 + ds1820_temp(); +#endif +} +#define MESURE_INTERVAL (10 * CLOCK_SECOND) +#define READ_TIME ( 2 * CLOCK_SECOND) + +PROCESS(rest_server_example, "Erbium Example Server"); +AUTOSTART_PROCESSES(&rest_server_example); + +PROCESS_THREAD(rest_server_example, ev, data) +{ +#if REST_RES_DS1820 + static struct etimer ds_periodic_timer; + static struct etimer ds_read_timer; +#endif + + PROCESS_BEGIN(); + + + + PRINTF("Starting Erbium Example Server\n"); + +#ifdef RF_CHANNEL + PRINTF("RF channel: %u\n", RF_CHANNEL); +#endif +#ifdef IEEE802154_PANID + PRINTF("PAN ID: 0x%04X\n", IEEE802154_PANID); +#endif + + PRINTF("uIP buffer: %u\n", UIP_BUFSIZE); + PRINTF("LL header: %u\n", UIP_LLH_LEN); + PRINTF("IP+UDP header: %u\n", UIP_IPUDPH_LEN); + PRINTF("REST max chunk: %u\n", REST_MAX_CHUNK_SIZE); + +/* if static routes are used rather than RPL */ +#if !UIP_CONF_IPV6_RPL && !defined (CONTIKI_TARGET_MINIMAL_NET) && !defined (CONTIKI_TARGET_NATIVE) + set_global_address(); + configure_routing(); +#endif + + /* Initialize the OSD Hardware. */ + hw_init(); + + /* Initialize the REST engine. */ + rest_init_engine(); + + /* Activate the application-specific resources. */ + rest_activate_resource(&resource_plug1); + /* Activate the application-specific resources. */ +#if REST_RES_DS1820 + rest_activate_resource(&resource_ds1820); +#endif +#if REST_RES_INFO + rest_activate_resource(&resource_info); +#endif +#if REST_RES_HELLO + rest_activate_resource(&resource_helloworld); +#endif +#if REST_RES_MIRROR + rest_activate_resource(&resource_mirror); +#endif +#if REST_RES_CHUNKS + rest_activate_resource(&resource_chunks); +#endif +#if REST_RES_PUSHING + rest_activate_periodic_resource(&periodic_resource_pushing); +#endif +#if defined (PLATFORM_HAS_BUTTON) && REST_RES_EVENT + rest_activate_event_resource(&resource_event); +#endif +#if defined (PLATFORM_HAS_BUTTON) && REST_RES_SEPARATE && WITH_COAP > 3 + /* No pre-handler anymore, user coap_separate_accept() and coap_separate_reject(). */ + rest_activate_resource(&resource_separate); +#endif +#if defined (PLATFORM_HAS_BUTTON) && (REST_RES_EVENT || (REST_RES_SEPARATE && WITH_COAP > 3)) + SENSORS_ACTIVATE(button_sensor); +#endif +#if REST_RES_SUB + rest_activate_resource(&resource_sub); +#endif +#if defined (PLATFORM_HAS_LEDS) +#if REST_RES_LEDS + rest_activate_resource(&resource_leds); +#endif +#if REST_RES_TOGGLE + rest_activate_resource(&resource_toggle); +#endif +#endif /* PLATFORM_HAS_LEDS */ +#if defined (PLATFORM_HAS_LIGHT) && REST_RES_LIGHT + SENSORS_ACTIVATE(light_sensor); + rest_activate_resource(&resource_light); +#endif +#if defined (PLATFORM_HAS_BATTERY) && REST_RES_BATTERY + SENSORS_ACTIVATE(battery_sensor); + rest_activate_resource(&resource_battery); +#endif +#if defined (PLATFORM_HAS_RADIO) && REST_RES_RADIO + SENSORS_ACTIVATE(radio_sensor); + rest_activate_resource(&resource_radio); +#endif + + /* Define application-specific events here. */ +#if REST_RES_DS1820 + etimer_set(&ds_periodic_timer, MESURE_INTERVAL); +#endif + while(1) { + PROCESS_WAIT_EVENT(); +#if defined (PLATFORM_HAS_BUTTON) + if (ev == sensors_event && data == &button_sensor) { + PRINTF("BUTTON\n"); +#if REST_RES_EVENT + /* Call the event_handler for this application-specific event. */ + event_event_handler(&resource_event); +#endif +#if REST_RES_SEPARATE && WITH_COAP>3 + /* Also call the separate response example handler. */ + separate_finalize_handler(); +#endif + } +#endif /* PLATFORM_HAS_BUTTON */ +#if REST_RES_DS1820 + if(etimer_expired(&ds_periodic_timer)) { + PRINTF("DS1820_Periodic\n"); + etimer_reset(&ds_periodic_timer); + if(ds1820_convert()){ + etimer_set(&ds_read_timer, READ_TIME); + } + } + if(etimer_expired(&ds_read_timer)) { + PRINTF("DS1820_Read\n"); + ds1820_read(); + } +#endif + } /* while (1) */ + + PROCESS_END(); +} diff --git a/examples/osd/wirelessplug/er-example-server.osd-er-lp24 b/examples/osd/wirelessplug/er-example-server.osd-er-lp24 new file mode 100755 index 000000000..506f86046 Binary files /dev/null and b/examples/osd/wirelessplug/er-example-server.osd-er-lp24 differ diff --git a/examples/osd/wirelessplug/er-example-server.osd-er-lp24.eep b/examples/osd/wirelessplug/er-example-server.osd-er-lp24.eep new file mode 100644 index 000000000..f61ebc7fd --- /dev/null +++ b/examples/osd/wirelessplug/er-example-server.osd-er-lp24.eep @@ -0,0 +1,4 @@ +:10000000020000FFFE00000341544D4547413132DC +:100010003872666131006C6F63616C686F73740075 +:0900200000001AE5CDAB00000060 +:00000001FF diff --git a/examples/osd/wirelessplug/er-example-server.osd-er-lp24.hex b/examples/osd/wirelessplug/er-example-server.osd-er-lp24.hex new file mode 100644 index 000000000..eec03fab4 --- /dev/null +++ b/examples/osd/wirelessplug/er-example-server.osd-er-lp24.hex @@ -0,0 +1,4668 @@ +:100000000C941B020C943A020C943A020C943A029F +:100010000C943A020C943A020C943A020C943A0270 +:100020000C943A020C943A020C943A020C943A0260 +:100030000C943A020C94A9430C943A020C943A02A0 +:100040000C943A020C943A020C943A020C943A0240 +:100050000C943A020C943A020C943A020C943A0230 +:100060000C943A020C941E440C943A020C943A02FA +:100070000C943A020C943A020C943A020C943A0210 +:100080000C9450840C943A020C943A020C943A0268 +:100090000C944D440C943A020C943A020C943A029B +:1000A0000C943A020C943A020C943A020C943A02E0 +:1000B0000C943A020C943A020C943A020C943A02D0 +:1000C0000C943A020C943A020C943A020C943A02C0 +:1000D0000C943A020C943A020C943A020C943A02B0 +:1000E0000C943A020C94234C0C942D4C0C94194C07 +:1000F0000C94654C0C94594C0C944F4C0C94434C00 +:100100000C94374C0C943A020C943A020C943A0238 +:100110000C943A020C943A020C943A020C943A026F +:10012000573350339433A333B133B8334933D833CF +:10013000E2334233033415344A34173556340C3520 +:100140003B330C3534330C350835257325730A00E1 +:100150004E657665722D7573656420737461636B8B +:10016000203E2025642062797465730A000A2D2DD3 +:100170002D2D2D2D2D2D2D0A0020203C6E6F6E650E +:100180003E002920256C75730A002F2575202876DE +:10019000696120000A526F75746573205B257520B4 +:1001A0006D61785D0A0020203C6E6F6E653E000A2E +:1001B000000A4E65696768626F7273205B2575205F +:1001C0006D61785D0A000A000A41646472657373A8 +:1001D0006573205B2575206D61785D0A00257800C8 +:1001E0003A003A3A004F6E6C696E650A00526F75BC +:1001F00074696E6720456E61626C65640A005250D6 +:100200004C20456E61626C65640A0025732025737D +:100210002C206368616E6E656C202575202C206330 +:100220006865636B207261746520257520487A20AB +:10023000747820706F7765722025750A00455549DE +:100240002D3634204D41433A2025782D25782D2513 +:10025000782D25782D25782D25782D25782D257834 +:100260000A0052616E646F6D204555493634206135 +:100270006464726573732067656E6572617465642A +:100280000A000A2A2A2A2A2A2A2A426F6F74696EC9 +:10029000672025732A2A2A2A2A2A2A0A000200000D +:1002A000FFFE00000341544D45474131323872662C +:1002B0006131006C6F63616C686F73740045455009 +:1002C000524F4D20697320636F72727570742C20C9 +:1002D000726577726974696E6720776974682064E3 +:1002E000656661756C74732E0A00452025642E25A1 +:1002F0006420636C6F636B20256C752063707520C0 +:10030000256C75206C706D20256C752069727120CC +:10031000256C7520676C656420256C7520796C658B +:100320006420256C7520726C656420256C752074C2 +:100330007820256C75206C697374656E20256C754A +:100340002073656E736F727320256C7520736572F0 +:1003500069616C20256C750A00532025642E256484 +:1003600020636C6F636B20256C7520747820256C7E +:100370007520727820256C752072747820256C7534 +:100380002072727820256C75207265786D697420F2 +:10039000256C752061636B747820256C75206E6FF9 +:1003A00061636B747820256C752061636B727820B3 +:1003B000256C752074696D65646F757420256C7586 +:1003C0002062616461636B727820256C7520746FA4 +:1003D0006F6C6F6E6720256C7520746F6F73686F1C +:1003E000727420256C752062616473796E63682075 +:1003F000256C752062616463726320256C752063CF +:100400006F6E74656E74696F6E64726F7020256CA8 +:10041000752073656E64696E6764726F7020256CF9 +:1004200075206C6C747820256C75206C6C7278204B +:10043000256C750A000011241FBECFEFD1E4DEBF8A +:10044000CDBF16E0A0E0B2E0E4EAFEE101E00BBFC0 +:1004500002C007900D92AC3EB107D9F711E3ACEEA4 +:10046000B6E001C01D92A531B107E1F70E945B40E3 +:100470000C94508F0C9400006D9A759808956D9AA5 +:10048000759A08956C9A749808956C9A749A089560 +:100490006D9A759A6C9A749A0895CF93DF93EC01D4 +:1004A00088819981009721F08851944099F40CC07B +:1004B0000E9448020E94463E87EC92E00E94FF3D67 +:1004C00087E992E00E94FF3D88E194E09983888368 +:1004D00081E003C01982188283E0DF91CF910895F3 +:1004E000AF92BF92CF92DF92EF92FF920F931F9342 +:1004F000DF93CF93CDB7DEB7C456D0400FB6F89494 +:10050000DEBF0FBECDBF6B01B42EA52E7E010894B9 +:10051000E11CF11CC70160E072E00E944C8BCE012F +:10052000489668E172E00E944C8BCE01C29663E36C +:1005300072E00E944C8BF70101900020E9F78F01D7 +:10054000015010400E191F098B2D9A2DB701A801DB +:100550000E94168B6091B8047091B904E091460432 +:10056000F0914704C6010995E0915A04F0915B04AB +:10057000C6016B2D7A2DA8010995CC59DF4F0FB616 +:10058000F894DEBF0FBECDBFCF91DF911F910F91C9 +:10059000FF90EF90DF90CF90BF90AF900895AF9213 +:1005A000BF92CF92DF92EF92FF920F931F93DF9350 +:1005B000CF93CDB7DEB7C257D0400FB6F894DEBFA9 +:1005C0000FBECDBF7C015B01D42EC52E1A821982CD +:1005D0001C821B82E0914004F09141040995813016 +:1005E000910521F0049709F0C4C06EC000D000D07E +:1005F00000D0EDB7FEB731962FE0E22EF12CEC0ED5 +:10060000FD1EADB7BEB71296FC92EE92119786E32F +:1006100092E0938382838DEF92E0958384830E949E +:10062000238C8C01EDB7FEB736960FB6F894FEBF5B +:100630000FBEEDBF8091EC06882349F4C701800FFF +:10064000911F69E472E00E944C8B005F1F4F809104 +:10065000EC06813051F4CE010F96800F911F6AE5B0 +:1006600072E00E944C8B015F1F4F9FE0E92EF12C3E +:10067000EC0EFD1EC701800F911F63E372E00E9424 +:100680004C8BD7010D900020E9F78D0101501040EF +:100690000E191F098D2D9C2DB701A8010E94168BE4 +:1006A0006091B8047091B904E0914604F091470458 +:1006B000C5010995E0915A04F0915B04C5016D2DC7 +:1006C0007C2DA80109955FC0C0906004D0906104A2 +:1006D000C7016AE672E0AE014F5F5F4FF601099510 +:1006E000592F082F192F0115110541F185E0E82E2A +:1006F000F12CEC0EFD1E69817A81C701402F0E940A +:10070000168B0E0D1F1DF8011082C7016FE672E0F7 +:100710000E94438B009731F46C9A749881E0809327 +:10072000EC0631C0C70162E772E00E94438B00977C +:1007300001F56C9A749A1092EC0625C0C70166E721 +:1007400072E0AE014D5F5F4FF6010995592F082FFA +:10075000192F0115110569F02DEF32E06B817C81B5 +:10076000C901402F0E94168B03501D4FD8011C92C7 +:100770000AC06091740470917504E0914204F09194 +:100780004304C5010995CE58DF4F0FB6F894DEBF7C +:100790000FBECDBFCF91DF911F910F91FF90EF90D2 +:1007A000DF90CF90BF90AF900895019797FD11C053 +:1007B0008530910570F4FC01EE0FFF1FE80FF91F63 +:1007C000EE0FFF1FEA59FC4F208131814281538196 +:1007D00004C020E030E040E050E0B901CA010895D3 +:1007E000AB01BC01E6E6F3E020E030E080819181DE +:1007F000A281B3813696481759076A077B0769F4C7 +:10080000F901EE0FFF1FE20FF31FEE0FFF1FEC5970 +:10081000FC4F0190F081E02D07C02F5F3F4F253046 +:10082000310521F7E0E0F0E0CF0108950F931F9329 +:10083000DF93CF93CDB7DEB7A0970FB6F894DEBFA6 +:100840000FBECDBF8C016150704077FD11C0653087 +:10085000710570F4FB01EE0FFF1FE60FF71FEE0F9F +:10086000FF1FEA59FC4F208131814281538104C02E +:1008700020E030E040E050E08EEF90E89A8B898BEA +:100880001C8A1B8A1E8A1D8A188E1F8A82E092E1AA +:100890009A8F898F84E790E09C8F8B8FCA01AA275B +:1008A000BB279D8F8E8F3F8F28A38AEA9AEA9A836F +:1008B00089831C821B821E821D8218861F821A86D3 +:1008C00019861C861B861E861D861F87088BCE01F7 +:1008D000019660E8AE014F5E5F4F20E00E94EB2082 +:1008E000A0960FB6F894DEBF0FBECDBFCF91DF91BB +:1008F0001F910F910895AF92BF92CF92DF92EF9226 +:10090000FF920F931F93DF93CF93CDB7DEB7A097DE +:100910000FB6F894DEBF0FBECDBF019797FD11C093 +:100920008530910570F4FC01EE0FFF1FE80FF91FF1 +:10093000EE0FFF1FEA59FC4FA080B180C280D38028 +:1009400003C0AA24BB2465016150704077FD11C02B +:100950006530710570F4FB01EE0FFF1FE60FF71F06 +:10096000EE0FFF1FEA59FC4FE080F18002811381F6 +:1009700003C0EE24FF2487018AEA9AEA9A838983D6 +:100980001C821B821E821D8218861F8242E052E159 +:100990005A87498724E730E03C872B87C601AA277E +:1009A000BB279D878E87BF86A88A8EEF90E89A8B9B +:1009B000898B1C8A1B8A1E8A1D8A188E1F8A5A8F51 +:1009C000498F3C8F2B8FC801AA27BB279D8F8E8F05 +:1009D000FF8EE8A2CE01019660E8AE014F5E5F4F48 +:1009E00020E00E94EB20A0960FB6F894DEBF0FBE69 +:1009F000CDBFCF91DF911F910F91FF90EF90DF90CE +:100A0000CF90BF90AF900895CF93DF938FEF9FEF7C +:100A100090933123809330234091D6135091D71374 +:100A2000E4E6F3E020E030E08081918136962F5FAC +:100A30003F4F4817590729F430933123209330232F +:100A400003C02530310581F72091302330913123C7 +:100A50008FEF2F3F3807A9F400D000D08EE093E04D +:100A6000ADB7BEB712969C938E93119714965C9374 +:100A70004E9313970E947B8B0F900F900F900F90C7 +:100A80008DC000D000D000D0EDB7FEB7319687E31F +:100A900093E0ADB7BEB712969C938E931197538394 +:100AA0004283358324830E947B8B60913023709135 +:100AB0003123EDB7FEB736960FB6F894FEBF0FBEE2 +:100AC000EDBF61307105E9F482E090E062E070E032 +:100AD0000E94160482E090E062E070E00E947B04D5 +:100AE00083E090E062E070E00E947B0484E090E0AC +:100AF00062E070E00E947B0485E090E062E070E0DC +:100B00004BC0653071054CF56150704081E090E05C +:100B10000E94160460913023709131236F5F7F4FE4 +:100B200082E090E00E941604C1E0D0E060913023A2 +:100B300070913123C617D7071CF46150704005C06F +:100B40006C177D072CF46F5F7F4FCE010E947B04F2 +:100B50002196C630D10551F721C065307105F1F4F9 +:100B600081E090E064E070E00E94160481E090E093 +:100B700064E070E00E947B0482E090E064E070E05A +:100B80000E947B0483E090E064E070E00E947B04BC +:100B900084E090E064E070E00E947B04DF91CF91FC +:100BA00008950F931F93DF93CF93CDB7DEB7609770 +:100BB0000FB6F894DEBF0FBECDBF8AEA9AEA9A83D9 +:100BC00089831C821B821E821D8218861F821A86C0 +:100BD00019861C861B861E861D86188A1F868E0116 +:100BE0000F5F1F4FC8016AE373E20E94031EC80132 +:100BF00040E050E060E070E021E00E944E2160960D +:100C00000FB6F894DEBF0FBECDBFCF91DF911F911D +:100C10000F910895FC015381560F50933923272FCC +:100C200033274281420F40933823A181A093372379 +:100C3000E081E0933623842F90E08217930748F4F5 +:100C40008A2F8F5F80933723882319F4EF5FE09317 +:100C50003623852F90E070708617970790F4842FC5 +:100C60008F5F80933823882361F4809137238F5FCF +:100C700080933723882329F4809136238F5F8093D4 +:100C8000362308959C0141505040460F571FFB01E9 +:100C90000EC0708160E08181DB01A80FB11D2A0FB9 +:100CA0003B1F2A173B0710F42F5F3F4F3296E41784 +:100CB000F50778F3E417F50749F4908180E0280FF1 +:100CC000391F2817390710F42F5F3F4FC9010895C6 +:100CD0009C01AB0180E090E0B9010E944206282F00 +:100CE000892F922F0895DF93CF9300D0CDB7DEB731 +:100CF0003091462320E09091EE06291B3109909116 +:100D00004723290F311D3A83298329813A81A9017B +:100D1000480F511DCA016AE473E240E250E00E94AC +:100D2000420649815A816091EE0670E066597C4D19 +:100D30000E944206009719F42FEF3FEF02C0382FB0 +:100D4000292FC9010F900F90CF91DF9108958AE369 +:100D50000E947306089586E00E947306089581E15B +:100D60000E94730608950F931F93CF93DF93182F5C +:100D7000092F4091F1065091F206BCE24F5F5F4FA0 +:100D80008DE74030580710F040E050E1342F252F18 +:100D9000A0E00EC0AB9FF0011124E55BF74D85A1EB +:100DA000882329F0808991898217930739F3AF5FEF +:100DB000A23081F74093F1065093F2061092F006AC +:100DC000E0E0F0E020E03CE21AC0239FD0011124D3 +:100DD000A55BB74D95968C919597882321F4209328 +:100DE000F006FD0110C0873049F4309731F0969637 +:100DF0009C91969786A1891708F4FD012F5F2230F8 +:100E000020F32093F006309791F182E085A3809142 +:100E1000F306808F8091F406818F8091F506828F92 +:100E20008091F606838F148A158A168A178A84ECB5 +:100E300094E0978F868F91A380A381E090E0958FB7 +:100E4000848F17A281E086A383E084A312A280E1AD +:100E500083A3508B418B738B628BEF01212F302F3B +:100E6000C901DC0180E10D9009928150E1F7CF01C9 +:100E7000DF91CF911F910F910895AC011092F00670 +:100E800020E013C0E22FF0E0322F3F5FEE0FFF1F94 +:100E9000E955F74D808191818417950729F42093B6 +:100EA000F006118210820895232F243058F32093E6 +:100EB000F0060895AC011092F00620E012C0E22F77 +:100EC000F0E0322F3F5FEE0FFF1FE955F74D8081B5 +:100ED0009181892B29F42093F00651834083089552 +:100EE000232F243060F32093F0060895BC018091F5 +:100EF000492890914A2844960E940A06E091492880 +:100F0000F0914A2880913623848BE0914928F09112 +:100F10004A2880913723858BE0914928F0914A280F +:100F200080913823868BE0914928F0914A2880915E +:100F30003923878B0895282F892F922F0895EF92B8 +:100F4000FF920F931F939C0144275527F22EE32E07 +:100F500000E010E0362F272F40E050E0A9013327B2 +:100F60002227E22AF32A042B152BB701C8011F916F +:100F70000F91FF90EF900895FC0140913423509120 +:100F8000352322E438E2241B350B621773070CF477 +:100F90009B011216130664F42093AF283093B028F7 +:100FA000E417F50729F0CA01BF01A9010E94168BB9 +:100FB00008951F9382E08093EF061091EE06612F53 +:100FC00070E0DB01A659BC4D4DC0FA01E60FF71FDA +:100FD000E659FC4D8081813009F43FC0813018F022 +:100FE0008336C9F402C02F5F3BC0CA010E948569E5 +:100FF000892B09F04BC09091EF068091EE06E92F06 +:10100000F0E0E80FF11DE659FC4D8181980F9E5FDD +:101010009093EF0639C090E0807C90708038910505 +:1010200059F0803C910521F080349105B1F42EC037 +:1010300080915A238F3F51F130E040E050E0210F82 +:10104000311D411D511D285D3F4F4F4F5F4F84E0C3 +:1010500062E00E945A1782E01AC08181280F2E5F39 +:101060002093EF062091EF06422F50E011968C91CD +:10107000119790E0F3E0880F991FFA95E1F7079632 +:10108000841795070CF0A1CF80E001C081E01F918B +:1010900008950F931F93CF93DF938C012091F10656 +:1010A0003091F206C9E1D0E02F5F3F4F8DE720304D +:1010B000380710F020E030E1522F432FA0E011C09C +:1010C0008A2F90E08C9FF0018D9FF00D9C9FF00D7A +:1010D0001124EF54F74D80899189AF5F84179507EC +:1010E00019F3A53069F72093F1063093F2061092B8 +:1010F000F00640E0A9E1B0E01CC0542F5F5F842FF0 +:1011000090E08A9FF0018B9FF00D9A9FF00D1124C3 +:10111000EF54F74D80899189892B51F44093F00663 +:1011200089E1489FD0011124AF54B74D49F427C03D +:10113000452F453010F34093F006A0E0B0E01FC00B +:1011400050963C93509751962C93519753967C937D +:101150006E9352970115110531F480E1ED0119925A +:101160008A95E9F707C0ED01F80180E10190099245 +:101170008150E1F780913C2954968C935497CD018E +:10118000DF91CF911F910F9108958091EE068823F2 +:1011900089F1409132235091332390E0BC01685D86 +:1011A0007F4F4617570738F41092EE0610923323FC +:1011B0001092322308956E5B7C4D48525040481B7C +:1011C000590B8AE693E20E941F8B2091EE068091D4 +:1011D000322390913323821B910990933323809380 +:1011E000322388979093462388968852809347238A +:1011F0001092EE060895EF92FF920F931F93CF93F4 +:10120000DF93C0914928D0914A28843009F4A8C3BB +:101210002EE733E230934828209347283093352334 +:1012200020933423833099F48DA1282F30E02F7040 +:1012300030702330310529F48C8D9D8D892B09F474 +:1012400096C02230310511F00C94E31182C0823037 +:1012500009F091C010923323109232231092B028DB +:101260001092AF288091F6068F5F8093F606882350 +:1012700099F48091F5068F5F8093F506882361F4D9 +:101280008091F4068F5F8093F406882329F480917F +:10129000F3068F5F8093F3062DA1273011F02530E0 +:1012A00051F48EA18F5F8EA3883711F00C94E31157 +:1012B0001DA20C94E311222311F40C94E3118C8DE4 +:1012C0009D8D892B09F44EC08EA181508EA38F5F16 +:1012D00011F00C94E3113FA1383029F02150223055 +:1012E00048F4353039F41DA280E8809342280E94EA +:1012F0009C1240C7353010F080E307C083E090E0D7 +:1013000002C0880F991F3A95E2F78EA38FA18F5FD5 +:101310008FA38DA190E08F70907083309105E1F0E4 +:10132000843091054CF48130910509F4FAC4029798 +:1013300011F00C94E3110DC08630910509F429C712 +:101340008830910509F425C7049711F00C94E31136 +:1013500020C710927723E8C484E0809342280E943B +:101360009C1240C72F70233011F00C94E31188E0D9 +:1013700080934228F3C6853021F5E0914528F0910D +:10138000462880899189892B11F40C94E3111092DD +:101390004A2810924928C9010C97909348288093B5 +:1013A000472890933523809334231092B0281092CD +:1013B000AF28109233231092322388E08093422882 +:1013C000CDC2E901EC9780914223807F803611F0F5 +:1013D0000C94E3119091462380E020914723AC01C7 +:1013E000420F511D9A01809132239091332384172B +:1013F000950708F4E8C7285D3F4F309333232093C7 +:10140000322380914A238F3F09F4DDC7CE0106962F +:1014100090934428809343281092EE061092ED0694 +:1014200080914823882309F581E08093ED060E948E +:10143000D907813009F4C7C7813018F08230A9F488 +:10144000CAC72091EE06E22FF0E0CF0186599C4DED +:101450009093442880934328285FFC018181880F62 +:10146000880F880F280F2093EE068AE593E20E94EA +:101470001620892B09F01CC18AE593E20E94851F82 +:10148000892B09F015C120915A232F3F09F495C0EB +:101490002E3F29F480915B23803809F48EC080911F +:1014A0004A238E3F29F480914B23803809F485C06C +:1014B00080914A2390914B23892B59F580914C239D +:1014C00090914D23892B29F580914E2390914F23A4 +:1014D000892BF9F48091502390915123892BC9F4E1 +:1014E0008091522390915323892B99F48091542316 +:1014F00090915523892B69F480915623909157231D +:10150000892B39F48091582390915923892B09F420 +:1015100054C080915A2390915B23892B61F580916F +:101520005C2390915D23892B31F580915E2390910E +:101530005F23892B01F58091602390916123892B92 +:10154000D1F48091622390916323892BA1F480913F +:10155000642390916523892B71F480916623909187 +:101560006723892B41F480916823882321F480919B +:101570006923813011F1809132239091332381507E +:10158000954038F082E060E020E035E040E050E057 +:101590000AC080914923823048F483E060E020E073 +:1015A00030E040E050E00E945A1715C70E946B6A75 +:1015B0008091492381508F830EC780914A238E3FAB +:1015C00009F001C780914B23803809F0FCC6809157 +:1015D0004A2390914B23892B59F580914C2390916C +:1015E0004D23892B29F580914E2390914F23892BF0 +:1015F000F9F48091502390915123892BC9F4809163 +:10160000522390915323892B99F4809154239091E4 +:101610005523892B69F48091562390915723892B68 +:1016200039F48091582390915923892B09F4CBC622 +:1016300080915A2390915B23892B69F580915C23DB +:1016400090915D23892B39F580915E2390915F23E2 +:10165000892B09F58091602390916123892BD9F41E +:101660008091622390916323892BA9F48091642354 +:1016700090916523892B79F480916623909167235B +:10168000892B49F480916823882329F48091692368 +:10169000813009F498C62F3F09F495C68AE593E294 +:1016A0000E94841E882309F08EC681E062E077CF15 +:1016B000E0914328F091442880818B3209F44BC09B +:1016C0008C3248F4863009F4A3C1813109F4B6C0E4 +:1016D000882389F06BC08A3309F472C08B3320F4FD +:1016E0008C3209F063C06FC68B3309F46CC68C333F +:1016F00009F05CC006C08091ED0680FD57C0816096 +:1017000009C08091ED0681FF04C086FD4FC0806452 +:1017100001C082608093ED060E94D907813009F4F0 +:1017200052C6813018F0823019F655C62091EE0667 +:10173000E22FF0E0CF0186599C4D9093442880938E +:101740004328285FFC018181880F880F880F280FAC +:101750002093EE06ADCF8091ED0682FD27C0846018 +:101760008093ED069091EE06E92FF0E0DF01A65997 +:10177000BC4D13968C911397882349F0BA969F011C +:10178000442737FD4095542F84E060E00CCFB093A0 +:101790004428A0934328985FE659FC4D8181880F27 +:1017A000880F880F980F9093EE0682CFE254F34291 +:1017B0009F01442737FD4095542F84E061E0F3CE2C +:1017C0000E94A7068F5F9F4F09F0FDC5E091EE06CE +:1017D000F0E0EE5BFC4D80A50E94ED12E091EE067C +:1017E000F0E0EE5BFC4D80A58638E1F0873838F4F8 +:1017F0008138C1F08538B1F08038A1F410C0883844 +:1018000041F0883818F08B3969F406C00E949F1A9D +:101810000DC00E9449180AC00E944F6207C00E9472 +:10182000A51604C0109233231092322380913223E4 +:1018300090913323892B09F4C6C5CDC50E94C508F4 +:101840008091322390913323C097909333238093D8 +:10185000322382E793E2909348288093472880912F +:10186000702390917123892B31F00E94AF068F5F16 +:101870009F4F09F0A8C580916C2390916D23892B0F +:1018800009F4A1C581EB98E29093462880934528FE +:1018900046C02889398921153105E1F180916C23F1 +:1018A00090916D2382179307A9F52A893B89211509 +:1018B000310539F080916A2390916B238217930749 +:1018C00049F588819981892BE1F48A819B81892B53 +:1018D000C1F48C819D81892BA1F48E819F81892BFC +:1018E00081F488859985892B61F48A859B85892B6C +:1018F00041F48C859D85892B21F48E859F85892BCC +:10190000C1F08AE493E2BE0140E150E00E94098BFD +:10191000009779F06996D0934628C0934528C091E6 +:101920004528D091462829E2CE32D20708F4B1CF1B +:101930004AC510924A281092492882E08093422892 +:1019400082E793E290934828809347289093352329 +:10195000809334231092B0281092AF280E949C12DA +:101960002091AF283091B0282115310509F42BC5FD +:10197000C901C096909333238093322342E453E20B +:10198000285F3F4F30934623885280934723E0914E +:101990004528F091462884898093492381E18093EA +:1019A0004823EA01A8963C832D831F821E828089EA +:1019B000918990936B2380936A23828993899B8377 +:1019C0008A83DA0158962091452830914628C9012A +:1019D000FC0180E101900D928150E1F78AE493E2ED +:1019E0006AE573E20E94641D8EE793E290934828B3 +:1019F000809347280E94AF06809590959F838E83A1 +:101A0000892B09F0D6C48FEF9FEF9F838E83D1C4BB +:101A10000E94C5080E94AB068F5F9F4F09F0D3C498 +:101A200000916C2310916D230115110509F4CBC4AD +:101A3000E0906A23F0906B23E114F10409F4C3C42D +:101A4000CBE4D8E28DA18823A1F088899989081771 +:101A5000190779F48A899B89E816F90651F48AE412 +:101A600093E2BE0140E150E00E94098B009709F427 +:101A700073C1AC9658E2C737D50721F318F38091AC +:101A800077238F738230F1F41093F9060093F806F0 +:101A90001092F00613C0E42FF0E0EE0FFF1FE9559F +:101AA000F74D2091F8063091F90680819181281731 +:101AB000390709F46FC04F5F4093F0064091F0067C +:101AC000443048F38091772382FD7DC484E1809384 +:101AD00077238CE390E0909333238093322380E547 +:101AE0008093762390917123809175238093712345 +:101AF00030917023809174238093702330937423EA +:101B000040916F238091732380936F2340937323BD +:101B100020916E232093F0068091722380936E2390 +:101B2000209372239F5F90937523992379F4832FD9 +:101B30008F5F80937423882349F4842F8F5F809371 +:101B40007323882319F42F5F2093722320916A2333 +:101B500030916B233093F9062093F80680916C2323 +:101B600090916D2390936B2380936A2330936D2320 +:101B700020936C23EAE5F3E2DF01509780E10D90BA +:101B800001928150E1F78AE493E26AE573E20E94F0 +:101B9000641DF1C31092F006C0E0D0E04CE250E0CA +:101BA0003CE225C0822F90E0849FF001859FF00DDC +:101BB000949FF00D1124E55BF74D85A1882339F43E +:101BC0008CE2289FE0011124C55BD74D14C08730FB +:101BD00059F4209721F096A18EA1891728F4239F0C +:101BE000E0011124C55BD74D2F5F2093F0062091B3 +:101BF000F0062230B8F2209709F4E5C3D0934A28C2 +:101C0000C093492883E08EA38CA31AA284E08BA3FF +:101C10001FA280916C2390916D23998B888B80916A +:101C20006A2390916B239B8B8A8BDE01EAE4F3E2BB +:101C300080E101900D928150E1F781E08DA38091C8 +:101C4000F306888F8091F406898F8091F5068A8F3C +:101C50008091F6068B8F81E090E09D8F8C8F809134 +:101C600071238F8B809170238E8B80916F238D8B4E +:101C700080916E238C8B81E090E00E9476078091AA +:101C8000762390E0807F9070813591050CF449C0F7 +:101C90001092F00634C0F901EE5BFC4D84AD8093E8 +:101CA000F7068823F1F1813021F44F5F4093F0066D +:101CB00026C08230C1F485AD8430A9F436AD20E071 +:101CC00087AD90E0822B932B9093F9068093F806D2 +:101CD000E4E0853C9E0710F084EC94E09F8F8E8FAB +:101CE00099A388A31EC08091F006E82FF0E0E15888 +:101CF000FC4DE081EE23A9F0E80FE093F00640915F +:101D0000F006242F30E08091762382958F7090E04A +:101D10000597880F991F880F991F281739070CF40A +:101D2000BACF80E18093772380917723826080937C +:101D3000772382E080937E2384E080937F238093C7 +:101D4000802384EC8093812380E490E0909333237C +:101D50008093322380E6CAC2D0934A28C093492890 +:101D60001092422880917723282F30E082FF03C011 +:101D70001DA280E264C28091762382958F70880FC5 +:101D8000880F8093F00640913223509133234852BC +:101D90005040481B510950933323409332238DA167 +:101DA00090E08F7090708230910531F42F73307015 +:101DB0002231310541F429C0019729F42F73307085 +:101DC0002230310511F1452B39F48091772390E0D1 +:101DD00083709070892BC9F090916E238C8998172D +:101DE00079F490916F238D89981751F49091702315 +:101DF0008E89981729F4909171238F89981729F06B +:101E00008091772381FD8DCF67C28091772384FFF6 +:101E100051C06C8D7D8D6115710509F44BC0CE01EB +:101E200048960E940A062091722380913623281733 +:101E300009F040C090917323809137239817D1F512 +:101E400090917423809138239817A1F59091752370 +:101E500080913923981771F5288F80913723898FC6 +:101E6000809138238A8F809139238B8F8FA188238B +:101E7000D1F42AA19CA18EA1981B822F86958695CC +:101E80008695981B392F320F3AA38BA1282F2695C0 +:101E90002695821B97FD9195890F8BA336953695D4 +:101EA0003695830F8CA381E0809342288CA18EA36A +:101EB0001D8E1C8E8DA1282F30E0C9018F7090706F +:101EC0008430910509F4C0C1853091055CF48230FD +:101ED0009105D9F1833091050CF0BAC0019709F052 +:101EE00072C210C08630910509F4EEC186309105AA +:101EF0000CF4CAC18730910509F4EEC1089709F0C6 +:101F000062C297C18091422880FF18C083E08DA3F0 +:101F100080E4809342281D8E1C8E209132233091C4 +:101F200033232115310509F415C1809142288260BF +:101F300080934228C9010E9476070CC180917723C3 +:101F40008F73823009F03FC2ECCE8091422880FF2F +:101F500074C0809177238F73823109F06EC08091B5 +:101F6000762390E0807F9070813591050CF449C014 +:101F70001092F00634C0F901EE5BFC4D84AD809305 +:101F8000F7068823F1F1813021F44F5F4093F0068A +:101F900026C08230C1F485AD8430A9F436AD20E08E +:101FA00087AD90E0822B932B9093F9068093F806EF +:101FB000F4E0853C9F0710F084EC94E09F8F8E8FB7 +:101FC00099A388A31EC08091F006E82FF0E0E158A5 +:101FD000FC4DE081EE23A9F0E80FE093F00640917C +:101FE000F006242F30E08091762382958F7090E068 +:101FF0000597880F991F880F991F281739070CF428 +:10200000BACF83E08DA380916E238C8B80916F2358 +:102010008D8B809170238E8B809171238F8B81E0CB +:1020200090E00E94760782E4809342281D8E1C8EE9 +:1020300010923323109232238DC080E28093422885 +:102040000E949C12E0914928F0914A2815A23ACDAD +:102050008091772380FF25C024FD23C08C8D9D8D2A +:10206000892B09F0B0C180913223909133230196DE +:102070000E94760720914228822F80618093422817 +:102080008091322390913323892B19F02261209380 +:1020900042280E949C1281E090E09D8F8C8F88E006 +:1020A00076C085FF21C060917C23362F20E04091CF +:1020B0007D2350E0242B352B809147289091482890 +:1020C000820F931F9093482880934728962F80E093 +:1020D000842B952B2091322330913323281B390BED +:1020E00030933323209332232091322330913323B2 +:1020F0002115310559F08DA184FD08C08091422839 +:10210000826080934228C9010E94760790917823CB +:1021100080E020917923820F911D9093F90680939E +:10212000F80628A139A12817390710F0892B21F4C6 +:102130003093F9062093F8068091F8069091F906FD +:102140009F8F8E8F8091422890E083709070892BB2 +:1021500009F439C11092B0281092AF280E949C1245 +:1021600080914228282F85FF07C01092B028109236 +:10217000AF281DA284E1B1C084FF0DC01092B02829 +:102180001092AF2881E090E09D8F8C8F84E08DA32A +:102190001FA281E1A2C08091AF289091B028892B25 +:1021A00001F120FF02C01D8E1C8E8C8D9D8D00972D +:1021B000A1F42E8D3F8D8091AF289091B0282817E3 +:1021C000390720F43093B0282093AF288091AF28AE +:1021D0009091B0289D8F8C8F04C09093B0288093ED +:1021E000AF281FA2809134239091352390934828E3 +:1021F000809347288091AF289091B028892B59F07F +:102200008C8D9D8D009739F0CC96909333238093DD +:10221000322388E10BC08091422881FFD4C08CE337 +:1022200090E0909333238093322380E1809377234F +:102230005CC08091422880FFC6C01DA280E18093CF +:1022400042280E949C12BFC0809132239091332378 +:10225000009711F00E947607809177239091422891 +:1022600080FF0BC090FF06C087E08DA31EA21D8ECD +:102270001C8E19C086E08DA316C090FF1EC085E09D +:102280008DA31D8E1C8E9FC080913223909133238D +:10229000009711F00E9476078091772380FF0DC090 +:1022A00087E08DA31EA281E090E00E94760780E186 +:1022B000809342280E949C120FC0809132239091FB +:1022C0003323892B49F47FC08091422880FF7BC053 +:1022D00087E08DA31EA277C080E1809377238CE3F3 +:1022E00090E0909333238093322380E5809376238C +:1022F0008C89809372238D89809373238E89809338 +:1023000074238F8980937523888D80936E23898DA4 +:1023100080936F238A8D809370238B8D809371239C +:10232000E2E4F3E286E086838889998990936B23BF +:1023300080936A238A899B8990936D2380936C2371 +:102340007896DE0180E10D9001928150E1F78AE4F8 +:1023500093E26AE573E20E94641D8DA184FF05C0CB +:10236000109279231092782306C084E0809378231A +:1023700084EC8093792380913C2980934923809138 +:102380003223909133238897909346238091322370 +:102390008852809347230AE613E2F801138A128ACF +:1023A000118A108A0E94AB0680959095F801918B56 +:1023B000808B80E680934223109243231092452322 +:1023C0001092442308C010923323109232231092AB +:1023D000EE061092ED0610924228DF91CF911F91E8 +:1023E0000F91FF90EF9008950E948D2480E009C026 +:1023F000E82FF0E0EE0FFF1FE955F74D1182108234 +:102400008F5F8430A8F320E04CE250E00DC0822FB3 +:1024100090E0849FF001859FF00D949FF00D1124B2 +:10242000E55BF74D15A22F5F223088F380E094E042 +:102430009093F2068093F10620E049E150E00EC04F +:10244000822F90E0849FF001859FF00D949FF00D06 +:102450001124EF54F74D118A108A2F5F253080F335 +:102460002093F0060895E0911907F0911A0730972C +:1024700011F480E008950995089590931A078093C8 +:1024800019070895FC018091C7179091C81791A76B +:1024900080A773A762A70895FC018091C717909148 +:1024A000C817968B858B708F678B08959C018091E0 +:1024B000A3289091A428892B11F081E008958091A0 +:1024C000C7179091C8179093A4288093A32830939E +:1024D000A6282093A52880E00895AC011092FE065E +:1024E0006091C7177091C817E7E0F7E020E014C0CB +:1024F000808191818417950769F482819381861781 +:10250000970741F42093FE0611821082CA010E94AF +:102510003D07089534962F5F243050F32093FE0634 +:1025200008958FEF96E00E941D6F892B21F08FEFA9 +:1025300096E00E946E700895CF93DF93A091492892 +:10254000B0914A28109719F0ED01A89605C0C091E6 +:102550004528D091462865968091422886FF22C062 +:102560001092FC06E7E0F7E040E016C020813181E0 +:1025700050968D919C9151972817390759F4828173 +:102580009381009739F04093FC06998388831B82DE +:102590001A8206C034964F5F443040F34093FC06E5 +:1025A0000E94911288819981009731F04A815B8164 +:1025B00060912E290E946E6CDF91CF9108958FE873 +:1025C00093E062E040E050E00E946E6C1092332392 +:1025D000109232231092EE060895DF93CF930F925C +:1025E000CDB7DEB789838091A3289091A428009766 +:1025F00039F060912F29AE014F5F5F4F0E946E6CE2 +:102600000F90CF91DF910895AC018FE893E060E0E7 +:102610000E944A6C0895AC018FE893E061E00E944B +:102620004A6C08950F931F93CF93DF9380913223C9 +:1026300090913323009709F411C18150954008F01F +:10264000FEC00AE513E280915A2390915B23892B07 +:1026500059F580915C2390915D23892B29F5809118 +:102660005E2390915F23892BF9F4809160239091F0 +:102670006123892BC9F48091622390916323892B74 +:1026800099F48091642390916523892B69F480915A +:10269000662390916723892B39F480916823909168 +:1026A0006923892B09F4CBC080915A238F3F09F409 +:1026B000CBC08AE593E20E94841E882379F48AE5E0 +:1026C00093E20E94431E009731F40E945A228C012B +:1026D000009721F4B4C08C010D5E1F4FC8010E9409 +:1026E000006A892B09F0ABC0C8010E943122EC01BD +:1026F000009709F051C0C80160E070E040E020E0C0 +:102700000E94A4228C01009709F499C0EC01AE96B6 +:10271000CE0160E072E00E94AF1C892B99F0CE01DF +:102720000E94621C22E433E2409132235091332311 +:10273000B9010E94168B6091322370913323CE0130 +:102740000E947E1C8AE493E20E941620A8014F5F3B +:102750005F4F892B19F08AE493E202C080E090E099 +:1027600060E070E00E94B619609145297091462999 +:10277000809147299091482928EE33E040E050E0CD +:102780000E946F8AC8018196BA01A9010E94317323 +:1027900081E0F80183A758C08DA58823E9F4AE969F +:1027A000CE0160E072E00E94AF1C892B09F447C0A3 +:1027B000CE010E94621C22E433E240913223509108 +:1027C0003323B9010E94168B609132237091332319 +:1027D000CE010E947E1C33C0823059F483E08DA765 +:1027E000CE01499645E050E060E070E00E94317310 +:1027F0001BA68E010F5E1F4FC8010E943312AE96BA +:10280000CE010E946E1C892BD1F0CE010E946E1C5D +:102810009093332380933223CE010E94621CBC012B +:1028200022E433E24091322350913323C9010E94C4 +:10283000168BCE010E94891CC8010E94331210928F +:102840003323109232230AC080E090E00E943312BA +:1028500010923323109232231092EE06DF91CF9123 +:102860001F910F910895DF92EF92FF920F931F93A4 +:10287000CF93DF937C018A01FC01808191810097D5 +:1028800029F08050934009F003C132C080E00BC0B2 +:10289000E82FF0E0EE0FFF1FEE0FFF1FE95FF84F8C +:1028A000118210828F5F843098F38093FA068091B2 +:1028B000C7179091C81790931807809317070E9425 +:1028C000006B80932E290E94006B80932F298FEF3D +:1028D00096E060E470E00E9484700E94F4110E940F +:1028E0006D5380E093E0F7019183808381E0D4C051 +:1028F000623009F4AFC0633030F4662309F48CC051 +:10290000613079F799C0673819F0683851F73CC0E1 +:102910001092FB06C7E0D7E013C08A819B81801725 +:10292000910741F4888199810E943D07198218829C +:102930001B821A8224968091FB068F5F8093FB0690 +:102940008091FB06843048F3E0E7F8E283819481CC +:102950008017910719F4148213821082BC96CF015C +:102960008597835A984290F3E1EBF8E208C0858995 +:1029700096898017910711F4118A108A799689E255 +:10298000EE32F807A1F7ADCFE6E04F3F5E07B1F5B5 +:10299000CA010E941D6F892B89F11092FB06CCE2BF +:1029A000D0E08CE2D82E26C090E08C9FF0018D9F65 +:1029B000F00D9C9FF00D1124E55BF74D85A1882358 +:1029C000A1F08FEF96E00E946E708091FB068D9DC6 +:1029D000C0011124855B974D90934A288093492824 +:1029E00082E00E94FB080E9412138091FB068F5F19 +:1029F0008093FB068091FB068230B0F2FAE2053C40 +:102A00001F0709F06ECFC8010E941D6F892B09F4C2 +:102A100068CF0E946B231BC04115510509F461CF9B +:102A200050934A284093492883E00E94FB080E9463 +:102A300012130E94911255CF4115510509F451CF3F +:102A4000509346284093452885E00E94FB080E9449 +:102A5000121347CF8091322390913323892B09F4AD +:102A600040CF80914823863031F48091772381FFD5 +:102A700002C00E94911281E00E94FB0880913223E3 +:102A800090913323892B09F42CCF0E94E01529CF94 +:102A9000F7011182108283E0DF91CF911F910F9196 +:102AA000FF90EF90DF900895CF93DF93EA010E94AB +:102AB0004908FC01009741F08091C7179091C81711 +:102AC000968B858BD08FC78BCF01DF91CF910895E7 +:102AD0000F931F93DF93CF93CDB7DEB760970FB6F9 +:102AE000F894DEBF0FBECDBF8C01AB018FEF92E03B +:102AF0009A8389831C821B821E821D8218861F82F4 +:102B00001A8619861C861B861E861D8680E091E02B +:102B1000988B8F87CE010196B8010E945415FC0155 +:102B2000009711F0118B008BCF0160960FB6F894CF +:102B3000DEBF0FBECDBFCF91DF911F910F910895E2 +:102B4000AC011092FD06E7E0F7E020E016C0322F5E +:102B50003F5F80819181892B71F42093FD06518321 +:102B600040838091C7179091C81793838283CA01CD +:102B70000E945A0708953496232F243040F320935F +:102B8000FD0608950F931F93CF93DF938A010E9450 +:102B9000B306EC01009771F08091C7179091C817A8 +:102BA00099A788A71BA70AA78FE893E060E0AE016A +:102BB0000E944A6CCE01DF91CF911F910F91089531 +:102BC000EF92FF920F931F9380914823863009F074 +:102BD0005DC080913223909133238050954009F05D +:102BE00055C00EE912E0109333230093322392E094 +:102BF000E92EE092462386E7F82EF09247231092C2 +:102C00007B2310927A230E94AB0680959095909337 +:102C10007B2380937A230E94121310933323009313 +:102C20003223E0924623F0924723209147283091A7 +:102C30004828C901FC01DC01AE59BD4F82E692E093 +:102C40000D9001920197E1F78EE693E262E672E061 +:102C50000E940A068091362380936E238091372349 +:102C600080936F2380913823809370238091392340 +:102C70008093712310927B2310927A230E94AB06DB +:102C80008095909590937B2380937A230E941213D2 +:102C90001F910F91FF90EF9008950F931F93CF9383 +:102CA000DF93162F042FE90120E620934223109290 +:102CB000432310924523109244232AE32093482370 +:102CC00020913C292093492324962D2F332727FD3B +:102CD0003A95249720934623AE014C5F40934723B7 +:102CE000AAE5B3E2FC0180E101900D928150E1F789 +:102CF0008AE493E26AE573E20E94641DE091EE06C5 +:102D00008E2F90E0FC01EE5BFC4DDF01989610A742 +:102D100011960C93119713961C921E9212978C0188 +:102D200006591C4D0E94A70680959095F801938343 +:102D30008283AC96D0933323C09332230E94121324 +:102D4000DF91CF911F910F9108951F93CF93DF9340 +:102D500022E433E280913C298093492380915A23D5 +:102D60008F3F81F4D9015896F901389680E101909E +:102D70000D928150E1F78AE493E26AE573E20E94E2 +:102D8000641D1BC0ABE1B7E0F901389680E101900A +:102D90000D928150E1F7EAE4F3E2DF01509680E121 +:102DA0000D9001928150E1F7AAE5B3E2EBE1F7E083 +:102DB00080E101900D928150E1F78091EE06882329 +:102DC00009F459C00E945A69182F6091EE068823B1 +:102DD00081F18AE380936A23611741F1E12FF0E0EA +:102DE00070E0CF01861B970B409132235091332323 +:102DF000480F591F50933323409332234852504079 +:102E000050934623485D5F4F242F28522093472339 +:102E1000645D7F4F860F971F6E5B7C4D4E1B5F0B73 +:102E20004C5250408E5B9C4D0E941F8B1093EE06BF +:102E300022C08AE38093482370E04091322350916E +:102E40003323461B570B509333234093322348526E +:102E5000504050934623485D5F4F842F88528093A3 +:102E6000472362597C4D4C5250408EE693E20E94BB +:102E70001F8B1092EE06E091EE062E2F30E0F90146 +:102E8000EE5BFC4DDF01989681E880A711961C92BD +:102E9000119713961C921E921297E901C659DC4DA8 +:102EA0000E94A706809590959B838A83DF91CF919E +:102EB0001F910895CF92DF92EF92FF920F931F938D +:102EC000CF93DF93D82EC62E79018A01E091EE06CA +:102ED000EE2339F0F0E0E659FC4D80818A3349F465 +:102EE00095C0809148238A3321F480916A2387FF1B +:102EF0008DC00E945A69282F8093EE06ABE1B7E09F +:102F0000EAE5F3E280E101900D928150E1F78091D2 +:102F1000322390913323C0969093332380933223AE +:102F20008150954030F080E095E09093332380937A +:102F30003223822F90E0409132235091332340532B +:102F40005040481B590B880F991F8E589C4D62E4C6 +:102F500073E20E941F8B80E68093422310924323EA +:102F600010924523109244238091EE06882321F08D +:102F70008AE380936A2303C08AE380934823809185 +:102F80003C298093492380914A2390914B23892B9C +:102F900051F580914C2390914D23892B21F58091FF +:102FA0004E2390914F23892BF1F4809150239091DF +:102FB0005123892BC1F48091522390915323892B63 +:102FC00091F48091542390915523892B61F4809141 +:102FD000562390915723892B31F480915823909157 +:102FE0005923892B99F0EAE5F3E2DF01509780E15C +:102FF0000D9001928150E1F780911B078F3F59F4AA +:1030000084E0D81619F432E0C31629F01092332365 +:103010001092322335C08AE493E26BE177E00E949C +:10302000641DE091EE068E2F90E0FC01EE5BFC4DFE +:10303000D0A6C1A6EC01C259DC4DC801B7010E945F +:103040009F07688379838A839B8380913223909141 +:1030500033238897909346238896885280934723FA +:10306000E091EE068E2F90E0FC01E659FC4D1382B4 +:103070001282EF010E94A706809590959B838A8318 +:10308000DF91CF911F910F91FF90EF90DF90CF9044 +:103090000895DF92EF92FF920F931F93CF93DF93E8 +:1030A0009091EE06E92FF0E0DF01A259BC4DFC90B3 +:1030B000809149238F3F09F033C1E659FC4D81814E +:1030C000882309F02DC114968C9114978F3F09F431 +:1030D00027C120E4D22EDF20F6FE05C080915A23BE +:1030E0008F3F09F41DC184E180932B0710922D07B7 +:1030F00010922C07C0913223D091332340E050E04E +:1031000064E1292F30E0245D3F4F0FC0FC01EE5BEE +:10311000FC4D9181992309F4FDC08081823009F42E +:10312000AF01990F990F990F690FC901860F911D72 +:103130008C179D0758F350932D0740932C076093ED +:103140002B07CD0104960E9416209093330780939D +:103150003207892B09F0E4C08091EE0690E08E588A +:103160009C4D0E9431228C0190932F0780932E0753 +:10317000009709F4D5C0C0912C07D0912D07209756 +:1031800011F420E00AC0BC016F5E7F4FCE010296B1 +:1031900048E050E00E94098B282F80E8E82EEF20BD +:1031A000F80185A5882369F5209709F4B9C0D801ED +:1031B0005196FE01329688E001900D928150E1F720 +:1031C000C0912E07D0912F07DD20C1F081E08DA79F +:1031D0001BA66091412970914229809143299091C9 +:1031E000442928EE33E040E050E00E946F8ACE018F +:1031F0004996BA01A9010E9431735AC082E08DA795 +:1032000057C0F5FC09C0222339F0813009F088C08D +:1032100082E0F80185A784C0209749F0D801519633 +:10322000FE01329688E001900D928150E1F7DD2099 +:10323000E1F000912E0710912F0781E0F80185A79A +:1032400060914129709142298091432990914429AC +:1032500028EE33E040E050E00E946F8AC8014996B2 +:10326000BA01A9010E9431730EC080912C07909180 +:103270002D07892B41F0222331F0E0912E07F091A8 +:103280002F0782E085A7E0912E07F0912F0784A5F4 +:10329000882371F0EE2061F48AE493E20E94CD204D +:1032A0009093310780933007009711F00E94D41C4F +:1032B000E0912E07F0912F07E4A680912E079091C0 +:1032C0002F078E960E946E1C892B51F180912E073C +:1032D00090912F078E960E946E1C909333238093BB +:1032E000322380912E0790912F078E960E94621CA8 +:1032F000BC0122E433E24091322350913323C901CF +:103300000E94168B80912E0790912F078E960E9417 +:10331000891C0AC050932D0740932C0760932B07FC +:103320001092332310923223DF91CF911F910F918E +:10333000FF90EF90DF900895CF93DF93FC016083BF +:1033400082E08183EF012296AAE3B3E288E00D9048 +:1033500009928150E1F7CF010A96FC0186E0DF0176 +:103360001D928A95E9F7DF91CF9108950F931F93EE +:10337000CF93DF938C01EA011092EE0680E68093F2 +:1033800042231092432310924523109244238AE350 +:10339000809348239FEF90934923EAE5F3E2611578 +:1033A0007105B9F490935A2382E0818313821282CB +:1033B000158214821782168211861086128681E089 +:1033C000838794878D8585878E859F859787868758 +:1033D00007C0DF01FB0180E101900D928150E1F710 +:1033E00087E880936A23E091EE06F0E0EE5BFC4D07 +:1033F00011A614A615A616A617A6F096DE0180E162 +:103400000D9001928150E1F710924623CE010E9467 +:103410001620892B09F055C00115110549F0AAE4C1 +:10342000B3E2F80180E101900D928150E1F706C00E +:103430008AE493E26AE573E20E94641D80914A2364 +:1034400090914B23892B79F580914C2390914D23BA +:10345000892B49F580914E2390914F23892B19F5A3 +:103460008091502390915123892BE9F4809152232C +:1034700090915323892BB9F4809154239091552333 +:10348000892B89F48091562390915723892B59F4E5 +:103490008091582390915923892B29F4109233233A +:1034A0001092322347C088E2809347238091EE0632 +:1034B00090E08E579C4D61E00E949C1980E590E061 +:1034C00025C010924B2310924A2310924D23109244 +:1034D0004C2310924F2310924E231092512310929E +:1034E000502310925323109252231092552310927E +:1034F000542310925723109256231092592310925E +:10350000582388E18093472380E490E0909333230D +:1035100080933223E091EE068E2F90E0FC01E65975 +:10352000FC4D13821282EF010E94A70680959095B0 +:103530009B838A83DF91CF911F910F910895DF9232 +:10354000EF92FF920F931F93CF93DF9380914923C4 +:103550008F3F09F0A7C18091EE06E82FF0E0EE5B07 +:10356000FC4D80A98F3F09F49DC181A5882309F0F6 +:1035700099C110922D0710922C0784E180932B079C +:1035800042E0D42E89C0F901EE5BFC4D8181882395 +:1035900009F488C18081813009F06EC0F0932D0755 +:1035A000E0932C0780914A2390914B23892B59F566 +:1035B00080914C2390914D23892B29F580914E23A6 +:1035C00090914F23892BF9F48091502390915123AE +:1035D000892BC9F48091522390915323892B99F41C +:1035E0008091542390915523892B69F4809156231F +:1035F00090915723892B39F4809158239091592326 +:10360000892B09F44FC18AE493E20E943122EC0134 +:1036100090932F0780932E0760912C0770912D07B0 +:10362000009749F46E5F7F4F8AE493E240E022E026 +:103630000E94A42221C032E0E32EF12CE60EF71EF8 +:103640008C010F5E1F4FC701B80148E050E00E9497 +:10365000098B009769F0D801F70188E001900D927D +:103660008150E1F7E0912E07F0912F07D5A604C015 +:103670008DA5882309F4DDA680912B07E091EE0645 +:10368000F0E0EE5BFC4DE80FF11D95A5990F990F49 +:10369000990F980F90932B078091EE06482F50E0DA +:1036A00080912B079A01280F311D245D3F4F809197 +:1036B0003223909133232817390708F464CFCA01C5 +:1036C0008E589C4D0E9416209093330780933207AA +:1036D000892B09F4E7C080914A2390914B23892BD1 +:1036E00059F580914C2390914D23892B29F5809198 +:1036F0004E2390914F23892BF9F480915023909180 +:103700005123892BC9F48091522390915323892B03 +:1037100099F48091542390915523892B69F48091D9 +:10372000562390915723892B39F4809158239091F7 +:103730005923892B09F4B6C08AE493E20E9416202B +:10374000892B09F0AFC080915A238F3F09F03FC009 +:1037500080915B238230D9F580915C2390915D2329 +:10376000892BA9F580915E2390915F23892B79F5B0 +:103770008091602390916123892B49F58091622388 +:1037800090916323892B19F5809164238823F9F4A0 +:10379000809165238130D9F4809166238F3FB9F4FD +:1037A000EAE5F3E2DF01509780E10D90019281504C +:1037B000E1F78091EE06E82FF0E0AAE4B3E2EE58DC +:1037C000FC4D80E101900D928150E1F722C08AE525 +:1037D00093E20E9416202091320730913307281778 +:1037E000390709F05FC0EAE5F3E2DF01509780E1B5 +:1037F0000D9001928150E1F78091EE06E82FF0E004 +:10380000AAE4B3E2EE58FC4D80E101900D928150A4 +:10381000E1F71092EE0680E6809342231092432354 +:1038200010924523109244231092462388E28093FD +:1038300047238AE3809348238FEF8093492388E8C6 +:1038400080936A2310926B2380EE80936E23E09125 +:103850003207F0913307A2E7B3E2319680E101909D +:103860000D928150E1F78091EE0690E08E579C4DCD +:1038700062E00E949C19E091EE068E2F90E0FC0120 +:10388000E659FC4D13821282EF010E94A706809533 +:1038900090959B838A8380E590E090933323809377 +:1038A000322304C01092332310923223DF91CF9140 +:1038B0001F910F91FF90EF90DF900895FC0111820E +:1038C00010820895FC0180819181009719F4E0E055 +:1038D000F0E002C0FC013296CF010895FC01019096 +:1038E000F081E02D309719F4E0E0F0E005C0EE5FE4 +:1038F000FA4F0190F081E02DCF010895FC01019075 +:10390000F081E02D309721F0EE5FFA4F71836083F4 +:103910000895CF93DF93EC0188819981009761F03E +:103920008C5F9A4F0E941A716881798189E993E0CE +:103930000E94CE6D19821882DF91CF9108950F9366 +:103940001F938C01FC016081718189E993E00E94E1 +:10395000CE6DF801118210821F910F9108950F937F +:103960001F93CF93DF93EC018B0188819981892B81 +:1039700019F020E030E012C089E993E00E94A06DC8 +:1039800099838883009741F08C5F9A4FB8014FE983 +:103990005CE19E010E945C7128813981C901DF913F +:1039A000CF911F910F910895FC01009709F01082AB +:1039B0000895FC01009709F010820895482F8AE4C9 +:1039C00099E29093751180937411242F332727FD6A +:1039D000309515C08081882369F04F3F29F0818997 +:1039E00090E08217930731F481818E3F19F4828130 +:1039F000803879F07C96F0937511E0937411E09122 +:103A00007411F091751189E2EA3BF80718F3E0E0D0 +:103A1000F0E0CF010895482F8AE499E29093751160 +:103A200080937411242F332727FD309515C0808192 +:103A3000882369F04F3F29F0818990E0821793072E +:103A400031F481818E3F91F48281803879F47C96C3 +:103A5000F0937511E0937411E0917411F091751168 +:103A600089E2EA3BF80718F3E0E0F0E0CF010895BF +:103A7000FC01009709F010820895FC01009709F0FD +:103A800010820895FC011082089540E020E030E0AB +:103A9000FC01E20FF31F5081FB01E20FF31FE081F5 +:103AA0005E1731F4485F2F5F3F4F403889F70AC0F7 +:103AB000E527842F885FE7FD05C04F5F481711F0A9 +:103AC000EE0FF9CF842F0895DF92EF92FF920F93BC +:103AD0001F93CF93DF93EC017B01FB0180818E3F2D +:103AE00021F48181803819F436C08F3FA1F18AE436 +:103AF00099E29093751180937411DD2400E010E039 +:103B000021C080818823A9F08189813091F481814D +:103B10008E3F19F48281803861F03196C701BF0170 +:103B20000E94451D8D1528F000917411109175119A +:103B3000D82E80917411909175114C9690937511B7 +:103B400080937411E0917411F091751189E2EA3B50 +:103B5000F807B8F204C081E00E94DE1C8C01011558 +:103B6000110589F4198218821B821A821D821C8217 +:103B70001F821E82198618861B861A861D861C8641 +:103B80001F861E8608C0DE01F801319680E1019093 +:103B90000D928150E1F7DF91CF911F910F91FF902E +:103BA000EF90DF900895DF92EF92FF920F931F93B3 +:103BB0000E940275D82E0E940275E0903D29F09077 +:103BC0003E2900913F29109140293D2D20E0280FEA +:103BD000391F40E050E0CA01B901A80197010E94D5 +:103BE0006F8A9B01AC0116950795F794E7942E0D0B +:103BF0003F1D401F511FB901CA011F910F91FF9036 +:103C0000EF90DF900895CF93DF93DC01EC012896CD +:103C1000FB0188E0019009928150E1F718968C91A0 +:103C2000189792E0892718968C93DF91CF91089589 +:103C30000F931F93CF93DF938C0181EE9CE212C010 +:103C40008881882351F0CE014396B80140E150E0CD +:103C50000E94098B009709F418828091801190913D +:103C600081118E969093811180938011C091801163 +:103C7000D09181118EE2CD3AD80710F3DF91CF9128 +:103C80001F910F910895CF92DF92EF92FF920F93C1 +:103C90001F93CF93DF936C0181EE9CE2909381118F +:103CA0008093801100E010E0EE241CC088818823FE +:103CB00091F0F988FE1478F0BE016F5F7F4F4F2DB1 +:103CC000469546954695C60150E00E94098B00979F +:103CD00011F48E0101C0FE2CAE96D0938111C093D9 +:103CE0008011EF2CC0918011D09181118EE2CD3ADC +:103CF000D807E0F2C801DF91CF911F910F91FF909B +:103D0000EF90DF90CF9008950F931F93CF93DF93A1 +:103D10008C0185E59AE290937B1180937A1116C00D +:103D20008881882371F04989469546954695CE014C +:103D30000196B80150E00E94098B009711F481E0D0 +:103D40000EC06C96D0937B11C0937A11C0917A11FA +:103D5000D0917B118AE2C53CD80710F380E0DF9157 +:103D6000CF911F910F9108950F931F93CF93DF93DE +:103D70008C0181E09BE290937D1180937C1112C0B5 +:103D80008881882351F0BE016F5E7F4FC80148E0F3 +:103D900050E00E94098B009779F0E096D0937D1156 +:103DA000C0937C11C0917C11D0917D118CE2C13EF9 +:103DB000D80730F3C0E0D0E0CE01DF91CF911F9162 +:103DC0000F9108958F929F92AF92BF92DF92EF92E0 +:103DD000FF920F931F93CF93DF935A014901D02E87 +:103DE000F7011182108270E0469F8001479F100DFD +:103DF000569F100D1124080F191FD694D694D694EF +:103E0000EC0116C08881882371F0CE010196B401BF +:103E10004D2D50E00E94098B009741F4F701D183AA +:103E2000C08380E010C0F701D183C083CA0DDB1DC1 +:103E3000C017D10738F3F70180819181892B11F4E4 +:103E400082E001C081E0DF91CF911F910F91FF903F +:103E5000EF90DF90BF90AF909F908F900895EF927A +:103E6000FF920F939C018AEB99E263E041E150E0FD +:103E700000E878E7E72E71E1F72E0E94E21E882322 +:103E800019F020E030E004C02091781130917911D0 +:103E9000C9010F91FF90EF900895DF92EF92FF928A +:103EA0000F931F93182FD92E8AEB99E263E041E11B +:103EB00050E0212F3D2D00E8E8E7EE2EE1E1FE2E57 +:103EC0000E94E21E813019F020E030E017C0E0913E +:103ED0007811F09179118083E0917811F091791146 +:103EE0003196212F3D2DC901DC0180E10D90019219 +:103EF0008150E1F72091781130917911C9011F911A +:103F00000F91FF90EF90DF900895EF92FF920F9343 +:103F10009C018DEE99E266E041E150E000E8F6E7B1 +:103F2000EF2EF1E1FF2E0E94E21E882319F020E01F +:103F300030E004C02091761130917711C9010F91C2 +:103F4000FF90EF900895CF93DF93EC01009799F1E4 +:103F50009FEF9093621182E080936311109265113C +:103F600010926411109267111092661110926911EB +:103F70001092681110926B1110926A1110926C11CC +:103F800081E080936D1190936E118E8580936F11F7 +:103F90008F859889909371118093701182E691E1D9 +:103FA0000E94851FFC0190937711809376110097F2 +:103FB00009F010821882DF91CF910895DF92EF927D +:103FC000FF920F931F93182FD92E8DEE99E266E082 +:103FD00041E150E0212F3D2D00E8A6E7EA2EA1E1C6 +:103FE000FA2E0E94E21E813019F020E030E017C066 +:103FF000E0917611F09177118083E0917611F09144 +:1040000077113196212F3D2DC901DC0180E10D9002 +:1040100001928150E1F72091761130917711C90119 +:104020001F910F91FF90EF90DF900895EF92FF9214 +:104030000F939C018AE499E264E04CE150E000E8CF +:10404000B4E7EB2EB1E1FB2E0E94E21E882319F0AB +:1040500020E030E004C02091741130917511C90145 +:104060000F91FF90EF900895EF92FF920F939C01B4 +:10407000062F85E59AE264E04CE150E07AE7E72E0E +:1040800071E1F72E0E94E21E882319F020E030E053 +:1040900004C020917A1130917B11C9010F91FF90DA +:1040A000EF9008952F923F924F925F926F927F927E +:1040B0008F929F92AF92BF92CF92DF92EF92FF9238 +:1040C0000F931F93DF93CF930F92CDB7DEB7582E88 +:1040D000492E362E242E29833701480185E59AE2A0 +:1040E00064E04CE150E0252D342D032DEAE7EE2E5F +:1040F000E1E1FE2E0E94E21E813019F020E030E066 +:1041000037C0E0917A11F0917B118083E0917A11B0 +:10411000F0917B113196252D342DC901DC0180E110 +:104120000D9001928150E1F7E0917A11F0917B11AD +:10413000318AE0917A11F0917B11228AE0917A1113 +:10414000F0917B118981838FE0917A11F0917B113D +:10415000638A748A858A968AE0917A11F0917B113C +:10416000A78AB08EC18ED28E20917A1130917B11A8 +:10417000C9010F90CF91DF911F910F91FF90EF90A8 +:10418000DF90CF90BF90AF909F908F907F906F9077 +:104190005F904F903F902F900895EF92FF920F9372 +:1041A0009C018DEC9AE262E04AE150E000E8FEE713 +:1041B000EF2EF1E1FF2E0E94E21E882319F020E08D +:1041C00030E004C020917E1130917F11C9010F9120 +:1041D000FF90EF9008959F92AF92BF92CF92DF929F +:1041E000EF92FF920F931F93182FD92EC62EB42E45 +:1041F000A52E922E81EE9CE26AE04EE250E0212F45 +:104200003D2D0C2DA0E8EA2EA1E1FA2E0E94E21E1F +:104210008130B1F5E0918011F09181118083E091BE +:104220008011F09181113196212F3D2DC901DC01C2 +:1042300080E10D9001928150E1F7E0918011F091C1 +:104240008111C18AE0918011F091811173962B2D1B +:104250003A2DC901DC0180E10D9001928150E1F716 +:10426000E0918011F0918111928A8091801190915A +:1042700081118396FC018BE0DF011D928A95E9F79D +:1042800080918011909181111F910F91FF90EF907B +:10429000DF90CF90BF90AF909F900895AF92BF9264 +:1042A000CF92DF92EF92FF920F931F93CF93DF9302 +:1042B000EC015A016B01122F8AE499E264E04CE1AF +:1042C00050E09E0100E8B4E7EB2EB1E1FB2E0E9426 +:1042D000E21E813019F020E030E05EC0E091741100 +:1042E000F09175118083E0917411F0917511319600 +:1042F000DE0180E10D9001928150E1F7E0917411AF +:10430000F0917511128BE0917411F0917511A11457 +:10431000B104C104D10419F481E0838B0AC0138A6B +:1043200080917411909175114496B601A5010E9477 +:104330003173E0917411F091751121E0218B9FEFA1 +:104340009093621182E08093631110926511109234 +:1043500064111092671110926611109269111092F7 +:10436000681110926B1110926A1110926C112093C7 +:104370006D1190936E118D8580936F118E859F8541 +:10438000909371118093701182E691E10E94DE1F7B +:104390002091741130917511C901DF91CF911F9156 +:1043A0000F91FF90EF90DF90CF90BF90AF90089566 +:1043B0009F92AF92BF92CF92DF92EF92FF920F93B4 +:1043C0001F93182F992E5A016B018DEC9AE262E02F +:1043D0004AE150E0212F392D00E87EE7E72E71E118 +:1043E000F72E0E94E21E813019F020E030E02EC04E +:1043F000E0917E11F0917F118083E0917E11F09128 +:104400007F113196212F392DC901DC0180E10D90FA +:1044100001928150E1F7E0917E11F0917F11A1149A +:10442000B104C104D10461F0CF014196B601A501E8 +:104430000E943173E0917E11F0917F11118E02C0C4 +:1044400081E0818F20917E1130917F11C9011F91F0 +:104450000F91FF90EF90DF90CF90BF90AF909F9023 +:104460000895EF92FF920F931F939C0181E09BE2CE +:104470006AE040E350E000E8ECE7EE2EE1E1FE2EDA +:104480000E94E21E882319F020E030E00DC0009168 +:104490007C1110917D110E94D842F80192A781A74A +:1044A00020917C1130917D11C9011F910F91FF90D6 +:1044B000EF90089510927311109272118DEC9AE2A0 +:1044C00022C080818823D1F0CF0101960E94312241 +:1044D000FC01009751F085A5882339F020917E11C9 +:1044E00030917F112F5F3F4F1EC080917E119091C0 +:1044F0007F110196909373118093721180917E11B8 +:1045000090917F114A9690937F1180937E11E09154 +:104510007E11F0917F118BE2E130F80790F220914B +:10452000721130917311C9010895CF93DF93EC019B +:10453000009739F018828E960E94891CCE010E9445 +:10454000A253DF91CF9108958F929F92AF92BF9225 +:10455000CF92DF92EF92FF920F931F93CF93DF934F +:10456000B82EA92E6B01942E822E81E09BE26AE088 +:1045700040E350E02B2D3A2D00E8FCE7EF2EF1E16F +:10458000FF2E0E94E21E90E08130910509F06BC081 +:10459000E0917C11F0917D1181E08083E0917C11AC +:1045A000F0917D1131962B2D3A2DC901DC0180E16E +:1045B0000D9001928150E1F780917C1190917D11D5 +:1045C000C114D10449F0DC015196F60188E0019054 +:1045D0000D928150E1F707C04196FC0188E0DF01B0 +:1045E0001D928A95E9F7E0917C11F0917D1194A6D6 +:1045F000E0917C11F0917D1185A680917C119091C4 +:104600007D118E960E945E1C80917C1190917D118F +:10461000499640E050E060E070E00E943173809184 +:104620007C1190917D11819640E050E060E070E057 +:104630000E943173E0917C11F0917D1113A680915D +:104640007C1190917D110E94A25300917C111091D8 +:104650007D110E94D842F80192A781A720917C1178 +:1046600030917D112AC0029731F50E94D8427C0119 +:10467000C1E0DBE200E010E013C08881882369F02C +:10468000CE0101960E94CD20892B39F489A59AA5E7 +:104690008E159F0510F48E0101C0C701E0967C01C4 +:1046A000FCE2C13EDF0749F70115110521F0C80101 +:1046B0000E9495225ACF20E030E0C901DF91CF91CE +:1046C0001F910F91FF90EF90DF90CF90BF90AF9030 +:1046D0009F908F900895EF92FF920F931F938AE41B +:1046E00099E217C08081882379F08389882361F457 +:1046F000CF0144960E94FB72892B31F08091741196 +:10470000909175110E94A31F809174119091751161 +:104710004C969093751180937411E0917411F091FF +:10472000751189E2EA3BF807E8F28DEC9AE218C0CD +:104730008081882381F0818D882369F4CF0141969F +:104740000E94FB72892B39F0E0917E11F0917F116C +:10475000309709F0108280917E1190917F114A96D6 +:1047600090937F1180937E11E0917E11F0917F11E3 +:104770008BE2E130F807E0F281E09BE290937D115B +:1047800080937C11B2E0EB2EA4E0FA2EB4C08081BD +:10479000882309F4A7C085A5813069F1813030F004 +:1047A0008330B1F1843009F09DC04DC083A58330C2 +:1047B00010F0CF015EC0CF0181960E94FB72892B61 +:1047C00009F490C08091322390913323892B09F012 +:1047D00089C0E0917C11F0917D1183A58F5F83A743 +:1047E00040917C1150917D114F5F5F4F80E090E0D0 +:1047F00060E070E05DC0CF0149960E94FB72892B9A +:1048000009F470C0E0917C11F0917D11E5A66AC0B9 +:10481000CF0149960E94FB72892B09F463C0E09195 +:104820007C11F0917D11F5A6E0917C11F0917D1144 +:1048300013A680917C1190917D11819640E050E00B +:1048400060E070E04DC083A58330B0F0CF010196E9 +:104850000E94CD20FC0190937F1180937E110097E0 +:1048600021F0818D882309F4108280917C11909130 +:104870007D110E94952236C0CF0181960E94FB7265 +:10488000892B81F18091322390913323892B51F52B +:10489000E0917C11F0917D1183A58F5F83A74091FA +:1048A0007C1150917D114F5F5F4F80E090E0BA0125 +:1048B0000E94B61900917C1110917D1160914529DB +:1048C00070914629809147299091482928EE33E03C +:1048D00040E050E00E946F8AC8018196BA01A901A8 +:1048E0000E94317380917C1190917D11C0969093BC +:1048F0007D1180937C11E0917C11F0917D118CE20F +:10490000E13EF80708F443CF85EC9AE20E94797003 +:104910001F910F91FF90EF900895AF92BF92CF92A9 +:10492000DF92EF92FF920F931F9380EE91E0E1E010 +:10493000FBE2DF019C011D9221503040E1F784E34E +:10494000EDECFAE2DF011D928A95E9F780E7E5E5F3 +:10495000FAE2DF011D928A95E9F78BE191E0E8E345 +:10496000F9E2DF019C011D9221503040E1F78CEC0F +:1049700091E0E1EEFCE2DF019C011D92215030400C +:10498000E1F78CE18093542A82E18093532A80E0FE +:1049900095E0A0E0B0E08093382990933929A09366 +:1049A0003A29B0933B2980E480933C2980EC97E23C +:1049B000A9E0B0E080933D2990933E29A0933F2940 +:1049C000B09340290E94D31D6093412970934229DE +:1049D000809343299093442980E197E2A0E0B0E0DE +:1049E0008093452990934629A0934729B09348295D +:1049F000109249298EEF90E8909363118093621191 +:104A00001092651110926411109267111092661144 +:104A1000109269111092681182E691E160E440E021 +:104A200020E0EE24FF248701AA24BB2465010E9414 +:104A30005220AAE6B1E1EAE3F3E288E001900D92A8 +:104A40008150E1F780916A1192E0892780936A1181 +:104A500082E691E140E050E060E070E021E00E94F9 +:104A60004E210FEF12E01093631100936211109228 +:104A700065111092641110926711109266111092D4 +:104A800069111092681110926B1110926A111092B4 +:104A90006D1110926C1110926F1110926E1180E0D6 +:104AA00091E0909371118093701182E691E10E94E0 +:104AB000DE1F109363110093621110926511109222 +:104AC0006411109267111092661110926911109280 +:104AD000681110926B1110926A1110926D11109260 +:104AE0006C1110926F1110926E1180E092E0909311 +:104AF00071118093701182E691E10E94DE1F85ECB6 +:104B00009AE26CE070E00E9484701F910F91FF9018 +:104B1000EF90DF90CF90BF90AF9008959093831166 +:104B2000809382110895FC01868190E0019721E035 +:104B300030E002C0220F331F8A95E2F7C9010895C1 +:104B40008F929F92AF92BF92CF92DF92EF92FF929D +:104B50000F931F93CF93DF93EC015A014901680132 +:104B600088819981009729F08B5E914009F099C066 +:104B700052C0188619861A861B861F821E82809153 +:104B8000C7179091C8179B838A8310925F12109267 +:104B90005B1210925C1210925D1210925E121092D3 +:104BA0005A120E94722CF60190878783B501A401E6 +:104BB0000E94023AFC019D838C83009709F464C033 +:104BC0008CE299E290A3878FEC81FD81D2A3C1A3EF +:104BD000488559856A857B854115510561057105B3 +:104BE00031F0C60120E000E410E00E944B2E0C8161 +:104BF0001D81B8016B5D7F4FC6010E946C35F801C5 +:104C000094A383A38C819D810E9481398BEE91E0D6 +:104C10009983888302C0623811F081E045C08E819B +:104C20009F81009789F16BE572E14FE552E120E049 +:104C300030E000E010E00E94012E20915B123091E4 +:104C40005C1240915D1250915E1288859985AA850B +:104C5000BB85281739074A075B0781F48E819F813E +:104C6000F701099588859985AA85BB850196A11DBF +:104C7000B11D88879987AA87BB870AC080915A127D +:104C80008F5F80935A1204C01982188282E00CC090 +:104C900080915F12882329F080915A12843008F4A1 +:104CA00080CF1982188283E0DF91CF911F910F91FD +:104CB000FF90EF90DF90CF90BF90AF909F908F903C +:104CC00008956F927F929F92AF92BF92CF92DF92A0 +:104CD000EF92FF920F931F93DF93CF93CDB7DEB781 +:104CE0002E970FB6F894DEBF0FBECDBF3C01FC017E +:104CF00080819181009729F0835B914009F094C2F3 +:104D000011C08CE194E00E94FF3D0E944C3986E185 +:104D100093E30E94313983EB91E0F3019183808327 +:104D200081E086C280912E29681709F077C210921F +:104D30006112109260128091422881FFECCF609145 +:104D4000472870914828409132235091332380EFB7 +:104D500091E10E940D329093611280936012892B31 +:104D600009F0FDC18091F6118150843008F0C0C176 +:104D7000E091EE06F0E0E659FC4D408151818091D2 +:104D8000F7119091F8116AE473E20E94023A90934D +:104D9000851180938411892B09F49DC11B821C828B +:104DA0001D821E8280E490E09A8389831F82188688 +:104DB00019861A861B861C861D861E868091F31115 +:104DC0009091F411892B49F42091F7113091F81149 +:104DD00086E891E162E070E007C00E94722C9C01BD +:104DE00086E891E161E070E045E40E94D031809175 +:104DF000F9119091FA11A091FB11B091FC1193FF60 +:104E00001AC04091241286E891E165E272E150E017 +:104E10000E94243080918F1190919011A091911156 +:104E2000B0919211986080938F1190939011A093FC +:104E30009111B093921180EF91E1BE016D5F7F4FB0 +:104E400040E050E09E012F5F3F4F8E01095F1F4FF2 +:104E50000E94012E892B89F089819A8181349105E4 +:104E600010F080E490E09A8389838F819885A985EA +:104E7000BA858B879C87AD87BE87E0918211F091C0 +:104E80008311309709F41EC140918411509185110E +:104E90004C5A5F4F29813A8180EF91E166E871E1D8 +:104EA0008E01055F1F4F0995892B09F4ECC0809195 +:104EB000601290916112892B09F0E5C02091F911DF +:104EC0003091FA114091FB115091FC1143FF1BC02E +:104ED00080918C1187FD17C080918F119091901156 +:104EE000A0919111B0919211A3FD0DC081EA90E0C3 +:104EF000909361128093601281EA93E0909347054A +:104F000080934605C0C0EB84FC840D851E8541FF5F +:104F10008FC08F819885A985BA85E816F9060A079A +:104F20001B0709F056C08091EC119091ED119C0186 +:104F300040E050E0E216F3060407150750F082E85F +:104F400080938C1186E891E161EB73E04FE050E0D3 +:104F500098C0E981FA81AB80BC80CD80DE80992445 +:104F60002E193F09400B510BCF01A0E0B0E0821792 +:104F70009307A407B50710F49924939486E891E168 +:104F8000B601A501292D8F010E944B2E8F81988596 +:104F9000A985BA856091EE117091EF11680F791FA4 +:104FA0002091EC113091ED1140E050E0281B390BBD +:104FB0004A0B5B0B89819A81A0E0B0E082179307CE +:104FC000A407B50710F49C01AD0186E891E1A901A1 +:104FD00058C04B815C816D817E81FFEFEF16FFEF42 +:104FE000FF06FFEF0F07FFEF1F0759F4E0E0F0E0C7 +:104FF0002091EC113091ED1189819A8182179307EC +:1050000010F4E1E0F0E009811A8186E891E12E2FA9 +:105010000E944B2E49815A818091EC119091ED11A3 +:105020004817590780F56091EE117091EF1127C074 +:10503000E114F1040105110531F120E08FEFE816CC +:105040008FEFF8068FEF08078FEF180709F021E0C0 +:1050500086E891E140E050E060E070E000E410E0BC +:105060000E944B2E6091EE117091EF114091EC1166 +:105070005091ED114134510510F040E450E086E8C4 +:1050800091E10E94152F8091601290916112892BFD +:1050900009F065C00091841110918511B8016B5D14 +:1050A0007F4F86E891E10E946C35F80194A383A3B9 +:1050B000892B09F054C081EC90E0909361128093A9 +:1050C00060124DC081EA90E090936112809360126B +:1050D00081EC93E008C083EA90E0909361128093A2 +:1050E000601282ED93E0909347058093460537C0A8 +:1050F0008091F3119091F4118230910589F003971A +:1051000079F4E091EE06F0E0E659FC4D60817181A2 +:105110004091F7115091F8118AE493E20E94C13A4C +:105120008091F7119091F8110E945539FC019093EC +:10513000851180938411009771F0078D10A1E1A073 +:10514000F2A00E946C390115110529F0C70160EF2A +:1051500071E1F80109951092851110928411209146 +:105160006012309161122115310551F48091841142 +:1051700090918511009709F4CECD0E948139CBCD55 +:105180008091841190918511223C310519F40E947F +:105190006C39C1CD0E946C3980916012909161127E +:1051A000803C910530F080EA90E09093611280930A +:1051B00060122091F7113091F81180EF91E162E0D7 +:1051C00070E0409160120E94D0316091460570916C +:1051D0004705FB01DF010D900020E9F71197AE1B99 +:1051E000BF0B80EF91E1AD010E94152FE091EE061B +:1051F000F0E0E659FC4DE080F180009147281091E5 +:10520000482880EF91E1B8010E946C359C018AE446 +:1052100093E2B701A8010E9406397DCD683809F0F4 +:105220007ACD0E94E63977CDF3011182108283E0B6 +:105230002E960FB6F894DEBF0FBECDBFCF91DF9193 +:105240001F910F91FF90EF90DF90CF90BF90AF90A4 +:105250009F907F906F900895FC0177836683828191 +:1052600093810E94AA6C08952F923F924F925F9271 +:105270006F927F928F929F92AF92BF92CF92DF9266 +:10528000EF92FF920F931F93DF93CF93CDB7DEB7CB +:1052900062970FB6F894DEBF0FBECDBF78876F83DD +:1052A0005A874987190128011A82198262EE73E030 +:1052B000AE014F5F5F4F0E94B8319C838B830E9489 +:1052C000A03C0E94466E9E838D83AA24BB24EE24BC +:1052D000FF2491012F5F3F4F3C872B874B815C81DF +:1052E000415050405E874D87BBC18B819C81892B8B +:1052F00071F1AD81BE8116968D919C91179765EEE7 +:1053000073E00E94618B8C01009709F4A2C1C980EF +:10531000DA800496B6014D855E850E94098B009760 +:1053200009F097C1EB81FC81CE0EDF1E0894C10805 +:10533000D108D6016C916A3251F0E00FF11F8381E0 +:10534000681709F086C18481823209F082C1950113 +:1053500040E050E0F20180819181A281B381281761 +:1053600039074A075B076CF0E214F30450F4E9854F +:10537000FA85EE0DFF1D5CE3652E60820894E11C4A +:10538000F11CB5016F5F7F4F9B0140E050E0F201DF +:1053900080819181A281B381281739074A075B0771 +:1053A0006CF0E214F30450F4E985FA85EE0DFF1D6C +:1053B0004FE2642E60820894E11CF11C5B010894AA +:1053C000A11CB11CAD81BE8114966D917C91159785 +:1053D000DB010D900020E9F78D0101501040061B04 +:1053E000170B0A0D1B1D380188249924D2012D9119 +:1053F0003D914D915C912F87388B498B5A8B2615A7 +:105400003705480559050CF045C0EDB7FEB738978C +:105410000FB6F894FEBF0FBEEDBF319689859A8511 +:105420008E0D9F1DADB7BEB712969C938E931197AC +:105430008B859C858E199F09938382832AEE33E0A6 +:1054400035832483C501A0E0B0E02F8538894989E0 +:105450005A89281B390B4A0B5B0BDA01C90157FF2C +:1054600004C080E090E0A0E0B0E0680F791F77838F +:1054700066830E94E58BE80EF91E4DB75EB7485F64 +:105480005F4F0FB6F8945EBF0FBE4DBFE214F3043A +:1054900008F0EBC0F20180819181A281B38168168E +:1054A00079068A069B066CF0E214F30450F4E98551 +:1054B000FA85EE0DFF1D3EE3632E60820894E11C29 +:1054C000F11C58010894A11CB11CAD81BE81169637 +:1054D000ED91FC9117978081882309F485C095018F +:1054E00040E050E0F20180819181A281B3812817D0 +:1054F00039074A075B076CF0E214F30450F4E985BE +:10550000FA85EE0DFF1D2BE3622E60820894E11CEC +:10551000F11C85010F5F1F4FAD81BE8116966D9105 +:105520007C911797DB010D900020E9F75D0108944D +:10553000A108B108A61AB70AA00EB11EF201208177 +:10554000318142815381C501A0E0B0E028173907BD +:105550004A075B070CF048C08DB79EB708970FB697 +:10556000F8949EBF0FBE8DBFEDB7FEB7319689850B +:105570009A858E0D9F1DADB7BEB712969C938E93E4 +:1055800011978B859C858E199F09938382839AEE50 +:10559000692E93E0792E75826482C801A0E0B0E0A4 +:1055A00039014A01681A790A8A0A9B0AD401C3019F +:1055B00097FE04C080E090E0A0E0B0E0680F791FA3 +:1055C000778366830E94E58BE80EF91E2DB73EB700 +:1055D000285F3F4F0FB6F8943EBF0FBE2DBFE214B9 +:1055E000F30410F0580141C0AD81BE818D919C91B2 +:1055F000892BE9F0950140E050E0F2018081918132 +:10560000A281B381281739074A075B076CF0E214BF +:10561000F30450F4E985FA85EE0DFF1D8CE2682E47 +:1056200060820894E11CF11C0894A11CB11CE214D6 +:10563000F30478F0C5018E199F09A0E0B0E0F201F3 +:105640002081318142815381281739074A075B073E +:1056500064F0AD81BE810D90BC91A02DBE83AD8361 +:10566000ED81FE81EF2B09F040CEE114F10471F0E1 +:105670008F81988569857A85A7010E94152F8F8172 +:10568000988568E270E00E94962C10C0AB2871F0FB +:105690008F81988562E870E00E947E2C8F819885CA +:1056A00061EB73E04FE050E00E94152F6D807E802B +:1056B000672831F48FEF9FEFAFEFBFEFF2010CC01F +:1056C000910140E050E0F20180819181A281B3819B +:1056D000820F931FA41FB51F80839183A283B3837E +:1056E00062960FB6F894DEBF0FBECDBFCF91DF91AB +:1056F0001F910F91FF90EF90DF90CF90BF90AF90F0 +:105700009F908F907F906F905F904F903F902F90E1 +:1057100008958BEF93E060E070E00E947D6C089547 +:105720009C01FA016F30710550F4862F8F70922F13 +:105730009295907F892B808321E030E00DC084E03A +:10574000220F331F8A95E1F7822F8F608083862F87 +:105750008F50818322E030E0C90108959F92AF927B +:10576000BF92CF92DF92EF92FF920F931F93CF934E +:10577000DF935C017B016A01C0E0D0E09EE0992EDE +:1057800018C0C9016EE070E00E945C8A092D081BF8 +:1057900010E0A6014C0F5D1F2196C80160E070E08B +:1057A0000E94902BF70180819181800F911F91833E +:1057B0008083F70120813181C501821B930B4097C3 +:1057C00004F7CE01DF91CF911F910F91FF90EF90E1 +:1057D000DF90CF90BF90AF909F9008958F929F924F +:1057E000AF92BF92CF92DF92EF92FF920F931F93EF +:1057F000DF93CF9300D0CDB7DEB74C017A836983B6 +:105800005A0178018901BE016F5F7F4F0E94AE2B64 +:105810009C01D801C70180709070A0700097A1050D +:10582000B10511F469010CC069010894C11CD11CB7 +:10583000F501EC0DFD1D812F9927AA27BB27808339 +:10584000D801C701807090700097A105B10551F093 +:105850000894C11CD11CF501EC0DFD1DC801AA273F +:10586000BB278083D801C70180700097A105B105CF +:1058700061F00894C11CD11CF501EC0DFD1DBB2786 +:10588000A12F902F8F2D808305C0E114F104010515 +:10589000110539F00894C11CD11CF501EC0DFD1D5A +:1058A000E08289819A81B601621B730BA20EB31E3E +:1058B0009401281B390BC901A5010E94902B9C0162 +:1058C0002C0D3D1DC9010F900F90CF91DF911F91BD +:1058D0000F91FF90EF90DF90CF90BF90AF909F908F +:1058E0008F90089520916412309165122F5F3F4F81 +:1058F0003093651220936412C9010895FC016F3F33 +:10590000710521F018F020E030E003C0668321E04B +:1059100030E0C9010895FC01818581FD03C02FEFAE +:105920003FEF02C025853685C9010895FC017687C1 +:10593000658781859285A385B485826081879287FA +:10594000A387B48781E090E00895CF93DF93EB01C4 +:10595000FC0181859285A385B48594FD03C020E078 +:1059600030E007C0FE96F983E883FE9785AD282FC7 +:1059700030E0C901DF91CF910895CF93DF93EC011F +:10598000EDADE230A0F4F0E07F96EE0FFF1FE80FE0 +:10599000F91F718360838DAD8F5F8DAF89859A8587 +:1059A000AB85BC85906189879A87AB87BC878DADB5 +:1059B00090E0DF91CF910895CF93DF93EB01FC014D +:1059C000818582FD05C08CE390E0A0E0B0E004C0DA +:1059D00087859089A189B28988839983AA83BB83AB +:1059E00081E090E0DF91CF910895FC014787508BD3 +:1059F000618B728B81859285A385B4858460818754 +:105A00009287A387B48781E090E00895DB01FC01D1 +:105A1000818584FD03C020E030E007C07896ED93D7 +:105A2000FC9378978789282F30E0C9010895CF9398 +:105A3000DF93EB01FC0181859285A385B48595FDFB +:105A400003C020E030E007C0ED5BFF4FF983E8833F +:105A50008291282F30E0C901DF91CF910895FC0198 +:105A60002185328543855485B5E15695479537950F +:105A70002795BA95D1F721703070C9010895FC01BE +:105A800081859285A385B485A06281879287A3874B +:105A9000B48781E090E00895CF93DF93EB01FC01A0 +:105AA00081859285A385B48593FD03C020E030E015 +:105AB00007C0F596F983E883F59784A9282F30E08D +:105AC000C901DF91CF910895DB01FC01818583FD40 +:105AD00003C020E030E006C0858996898D939C93B1 +:105AE00023893489C9010895DB01FC01818585FD85 +:105AF00003C020E030E006C082A193A18D939C9367 +:105B000020A131A1C9010895CF93DF93EB01FC01DE +:105B100081859285A385B48591FD03C020E030E0A6 +:105B200006C080A991A99983888326A537A5C901B4 +:105B3000DF91CF910895DB01FC0181859285807012 +:105B40009078892B19F420E030E008C0ED59FF4F20 +:105B5000808191818D939C9332912291C901089506 +:105B6000DB01FC01818586FD03C020E030E006C03A +:105B700086A197A18D939C9324A135A1C901089575 +:105B8000CF93DF93EB01FC0181859285A385B485DA +:105B900090FD03C020E030E006C084A595A5998360 +:105BA000888322A533A5C901DF91CF910895CF93B2 +:105BB000DF93EB01FC0181859285A385B48592FD7D +:105BC00003C020E030E00AC082A993A9A0E0B0E0C1 +:105BD00088839983AA83BB8321E030E0C901DF91E8 +:105BE000CF910895FC0153AB42AB81859285A3858B +:105BF000B485946081879287A387B48781E090E021 +:105C000008950F931F93CF93DF93EB01B801FC012D +:105C100081859285A385B485A1FD03C020E030E095 +:105C200034C0209761F0E55BFF4F80819181A281B4 +:105C3000B381EB54F04088839983AA83BB834115D9 +:105C4000510539F0E15BFF4F8081EF54F040DA01FC +:105C50008C932115310549F0E05BFF4F80819181E4 +:105C6000E055F040D9018D939C936115710559F071 +:105C7000EE5AFF4F80819181A281B381FB01808325 +:105C80009183A283B38321E030E0C901DF91CF91FA +:105C90001F910F9108950F931F930031110578F113 +:105CA00038E00130130758F5403030E0530730E159 +:105CB000630730E0730718F5FC01E55BFF4F408395 +:105CC000518362837383EB54F040DF01A15BBF4FCC +:105CD0001C92222311F081E08C93E05BFF4F118333 +:105CE0000083E055F04081859285A385B485A2604C +:105CF00081879287A387B48721E030E002C020E04B +:105D000030E0C9011F910F9108950F931F93CF9316 +:105D1000DF93EB01B801FC0181859285A385B485F1 +:105D2000A3FD03C020E030E034C0209761F0EA5AC0 +:105D3000FF4F80819181A281B381E655F040888335 +:105D40009983AA83BB834115510539F0E65AFF4F69 +:105D50008081EA55F040DA018C932115310549F034 +:105D6000E55AFF4F80819181EB55F040D9018D9329 +:105D70009C936115710559F0E35AFF4F8081918121 +:105D8000A281B381FB0180839183A283B38321E04D +:105D900030E0C901DF91CF911F910F9108950F93CA +:105DA0001F930031110520F138E00130130700F591 +:105DB000403030E0530730E1630730E07307C0F450 +:105DC000FC01EA5AFF4F41935193619371932193E0 +:105DD00011830083EB55F04081859285A385B485BE +:105DE000A86081879287A387B48721E030E002C052 +:105DF00020E030E0C9011F910F910895DB01FC0103 +:105E0000E859FF4F80819181E856F040009739F0C2 +:105E10008D939C93EA59FF4F2081318104C01D92DC +:105E20001C9220E030E0C9010895FC01E859FF4FC1 +:105E300071836083E856F0409A014134510510F0B7 +:105E400020E430E0EA59FF4F31832083C9010895EF +:105E5000CF93DF93DB01EC0101C011968C918F335E +:105E6000E1F3BDA7ACA7FD010D900020E9F79D016E +:105E7000215030402E1B3F0B3BA72AA789859A85CE +:105E8000AB85BC85916089879A87AB87BC87822F59 +:105E90009BA5DF91CF910895CF93DF93FB01EC0198 +:105EA00001C0319680818F33E1F3CD59DF4FF98303 +:105EB000E883C356D040DF0101900020E9F7319715 +:105EC000EA1BFB0B9E012F593F4FD901ED93FC9329 +:105ED00089859A85AB85BC85906889879A87AB87C9 +:105EE000BC87F90180819181DF91CF910895CF9393 +:105EF000DF93DB01EC0101C011968C918F32E1F34D +:105F0000B9ABA8ABFD010D900020E9F79D01215030 +:105F100030402E1B3F0B3FA72EA789859A85AB8566 +:105F2000BC85926089879A87AB87BC87822F9FA5A3 +:105F3000DF91CF910895DC0192966C93929793969E +:105F40007C93DB010D900020E9F7AD0141505040FA +:105F5000461B570BFC0151A340A381859285A38565 +:105F6000B485806281879287A387B487842F91A1AB +:105F70000895DC0155966C93559756967C93DB01FA +:105F80000D900020E9F7AD0141505040461B570BE2 +:105F9000FC01548B438B81859285A385B4858860F1 +:105FA00081879287A387B487842F94890895CF929D +:105FB000DF92EF92FF920F931F93CF93DF93D82E30 +:105FC000C92E7B01082F192F03C00894E11CF11C76 +:105FD000D7018C918F32C9F3C7016FE370E00E9443 +:105FE000388BEC01009769F0BC016F5F7F4F8D2DFE +:105FF0009C2D0E94282FCE19DF09F801D5A3C4A338 +:106000000CC0F70101900020E9F73197EE19FF0964 +:10601000D8019596FC93EE939497F801F7A2E6A227 +:1060200081859285A385B485806481879287A387C3 +:10603000B48784A195A1DF91CF911F910F91FF901B +:10604000EF90DF90CF900895CF93DF93EC0149302C +:10605000510510F048E050E04CAB9E012B5C3F4FE7 +:10606000C90150E00E94168B89859A85AB85BC8555 +:10607000986089879A87AB87BC878CA990E0DF916D +:10608000CF9108950F931F93CF93DF93EC01493085 +:10609000510510F048E050E08E010E5B1F4FF801F3 +:1060A00040839E012D5B3F4FC90150E00E94168B3B +:1060B00089859A85AB85BC85906289879A87AB87ED +:1060C000BC87F801808190E0DF91CF911F910F9103 +:1060D0000895CF93DF93EC014930510510F048E06B +:1060E00050E04F8B9E01285E3F4FC90150E00E9457 +:1060F000168B89859A85AB85BC85806189879A874F +:10610000AB87BC878F8990E0DF91CF9108952F9264 +:106110003F924F925F926F927F928F929F92AF9237 +:10612000BF92CF92DF92EF92FF920F931F93DF9374 +:10613000CF9300D000D000D0CDB7DEB79C838B8347 +:106140007A8369832A01190138014701BE016F5F13 +:106150007F4F0E94AE2B7C018114910409F454C03E +:10616000F40180811082610100E010E0282F3327C4 +:1061700027FD30953E832D8342C0F101E00FF11FD2 +:10618000808190E02D813E818217930719F00615DA +:10619000170599F55F01AC18BD0889819A81A201A4 +:1061A0004E0D5F1DEB81FC81E81BF90BCF01B501A2 +:1061B0000E94902BE80EF91E92012E0D3F1DC90181 +:1061C000B601A5010E94168BF40180818F5F808348 +:1061D0000F5F1F4F2B813C813A8329839101200F50 +:1061E000311F02C00F5F1F4F6901F90180812F5FCE +:1061F0003F4F8F32B9F3EA0CFB1C0F5F1F4F601645 +:10620000710608F0BACF1BC089819A81A2014E0D98 +:106210005F1D2B813C81281B390BC901B8010E94ED +:10622000902B8C010E0D1F1D9201200F311FC901F3 +:10623000B101A3010E94168B7801E60CF71CC7017F +:1062400026960FB6F894DEBF0FBECDBFCF91DF917B +:106250001F910F91FF90EF90DF90CF90BF90AF9084 +:106260009F908F907F906F905F904F903F902F9076 +:1062700008956F927F928F929F92AF92BF92CF922A +:10628000DF92EF92FF920F931F93CF93DF936C01F6 +:106290005B013A014901D9011D921C92DA010D906E +:1062A0000020E9F78D0101501040041B150BA80ECA +:1062B000B91E7C01E00EF11EEC012CC0CC15DD05F1 +:1062C00021F08A912196863209F5F70180818D337C +:1062D000E9F4C301BE01A8010E94538B0097B1F4F9 +:1062E0000F5F1F4F0C0F1D1FA501401B510BC80155 +:1062F00066E270E00E94FC8A009709F4C501D401AF +:106300000D931C93AC01401B510B09C021960894BE +:10631000E11CF11CEA14FB0488F240E050E0CA01E1 +:10632000DF91CF911F910F91FF90EF90DF90CF9071 +:10633000BF90AF909F908F907F906F900895DB01FA +:106340009A01FC01EA59FF4F60817181E656F040E5 +:106350006115710519F420E030E008C0E859FF4FDD +:1063600080819181AD010E9439319C01C90108955C +:10637000DB019A01FC018185928580709078892BE0 +:1063800019F420E030E00AC0EF59FF4F619171919C +:1063900080819181AD010E9439319C01C90108952C +:1063A000FC018AE6DF011D928A95E9F77483638315 +:1063B0004683308727830895EF92FF920F93CF9300 +:1063C000DF93DC01EB017901888199810097D9F095 +:1063D000ED91FC911197E80FF91F00832881398115 +:1063E0002F5F3F4F398328838D919C91820F931F9C +:1063F000BA01A7010E941F8B888199818E0D9F1D74 +:106400009983888304C04D935C9339832883DF91FB +:10641000CF910F91FF90EF9008952F923F924F925E +:106420005F926F927F928F929F92AF92BF92CF9224 +:10643000DF92EF92FF920F931F93DF93CF93CDB72D +:10644000DEB7A8970FB6F894DEBF0FBECDBF5B01D5 +:106450005E8B4D8B8FA398A78AE6AFA1B8A51D923E +:106460008A95E9F7EFA1F8A571836083DB014C9170 +:10647000429546954695437042838C9190E0807397 +:10648000907024E0959587952A95E1F7948383830E +:106490005C915F70558311968C911197868312964B +:1064A0009C91129780E013962C9130E0822B932BD5 +:1064B00090878783413049F08CEB94E090934705B7 +:1064C0008093460520E830E0EDC2EFA1F8A51186E3 +:1064D000128613861486FB013496552309F4B2C242 +:1064E0002FA138A5285E3F4F3C8B2B8B8FA198A501 +:1064F00086969A8B898BAFA1B8A59496B88BAF87F7 +:106500002FA138A5245D3F4F3E872D878FA198A5E9 +:106510008A969C878B87AFA1B8A5D096BA87A987A2 +:106520002FA138A5225D3F4F38872F838FA198A5D3 +:10653000C5969E838D8383E4282E312CAFA1B8A508 +:106540002A0E3B1EAD59BF4FBC83AB832FA138A58C +:106550002F593F4F3A832983552410E08FA198A5E6 +:106560008B599F4F988F8F8B44244394AFA1B8A52C +:10657000AE5BBF4FBA8FA98F0BE4602E712C2FA199 +:1065800038A5620E731E215B3F4F3C8F2B8F8FA16E +:1065900098A5805B9F4F9E8F8D8FAFA1B8A5AE5AF7 +:1065A000BF4FB8A3AF8FB6E58B2E912C2FA138A586 +:1065B000820E931E265A3F4F3AA329A38FA198A576 +:1065C000855A9F4F9CA38BA3AFA1B8A5A35ABF4FD9 +:1065D000BEA3ADA330C29081892F82958F70180F12 +:1065E000292F30E02F7030702F30310531F07901D4 +:1065F0006F010894C11CD11C0CC08181E82EFF24BE +:106600002FE030E0E20EF31EA2E0CA2ED12CCE0E17 +:10661000DF1E612F81E090E0A0E0B0E0012E04C019 +:10662000880F991FAA1FBB1F0A94D2F7EFA1F8A5E4 +:106630002185328543855485282B392B4A2B5B2BAA +:106640002187328743875487812F90E0FC0131975F +:10665000E531F10508F0E0C1E057FF4FEE0FFF1FF5 +:106660000590F491E02D099460E070E020E030E0C6 +:1066700040E050E080C160E070E020E030E040E0C9 +:1066800050E02AC160E070E020E030E040E050E0FF +:10669000B2C060E070E020E030E040E050E07EC05A +:1066A00060E070E020E030E040E050E031C060E0C9 +:1066B00070E020E030E040E050E011C0542F432F64 +:1066C000322F2227F601E60FF71F808190E0A0E02D +:1066D000B0E0282B392B4A2B5B2B6F5F7F4F6E1559 +:1066E0007F0560F3EFA1F8A536872587A0C1542F59 +:1066F000432F322F2227F601E60FF71F808190E00B +:10670000A0E0B0E0282B392B4A2B5B2B6F5F7F4F2B +:106710006E157F0560F3AFA1B8A51F962D933D932D +:106720004D935C93529783C1EFA1F8A5D68AC58A91 +:10673000F48AE38A83ED94E09093470580934605BD +:1067400025EA30E0AFC1A701F9E0EF16F10410F03F +:1067500048E050E0AFA1B8A557964C938B899C892F +:106760005FC0EFA1F8A5D3A2C2A2F1A2E0A25FC1CF +:1067700089899A896F85788929C0542F432F322FB0 +:106780002227F601E60FF71F808190E0A0E0B0E03D +:10679000282B392B4A2B5B2B6F5F7F4F6E157F05A4 +:1067A00060F3AFA1B8A599963C932E9398973FC1FB +:1067B0008D859E856B857C85A601970106E20E94EA +:1067C000DC3135C189859A856F817885A60197016D +:1067D0000FE2F5CF542F432F322F2227F601E60F79 +:1067E000F71F808190E0A0E0B0E0282B392B4A2BE6 +:1067F0005B2B6F5F7F4F6E157F0560F3EFA1F8A5F0 +:1068000033AB22AB14C1A701F9E0EF16F10410F08D +:1068100048E050E0AFA1B8A5D4964C938D819E81FD +:10682000B60150E00E94168B02C1EFA1F8A505AD9C +:10683000023008F0FCC060E070E020E030E040E0B2 +:1068400050E011C0542F432F322F2227F601E60FBC +:10685000F71F808190E0A0E0B0E0282B392B4A2B75 +:106860005B2B6F5F7F4F6E157F0560F3E02FF0E0CD +:106870007F96EE0FFF1F8FA198A5E80FF91F3183B8 +:106880002083AFA1B8A5DD968C91DD978F5FDD9653 +:106890008C93CDC0A701B9E0EB16F10410F048E0ED +:1068A00050E0E98DFA8D4083C101BACF8B819C8184 +:1068B00069817A8181CF542F432F322F2227F6010D +:1068C000E60FF71F808190E0A0E0B0E0282B392B85 +:1068D0004A2B5B2B6F5F7F4F6E157F0560F3D301F3 +:1068E0002D933D934D935C931397287030704070B7 +:1068F000507063E056954795379527956A95D1F77F +:10690000EB8DFC8D20838D919C918770907020E1A0 +:1069100030E002C0220F331F8A95E2F7AD8DBE8DA5 +:106920002D933C93F30180819181A281B3819C01DD +:1069300027703070807F04C0880F991FAA1FBB1F6B +:106940002A95D2F7EF8DF8A180839183A283B38338 +:10695000F3014EC0542F432F322F2227F601E60FAA +:10696000F71F808190E0A0E0B0E0282B392B4A2B64 +:106970005B2B6F5F7F4F6E157F0560F3D4012D9306 +:106980003D934D935C931397287030704070507016 +:1069900083E056954795379527958A95D1F7E9A1D4 +:1069A000FAA120838D919C918770907020E130E056 +:1069B00002C0220F331F8A95E2F7ABA1BCA12D9331 +:1069C0003C93F40180819181A281B3819C01277065 +:1069D0003070807F04C0880F991FAA1FBB1F2A95A3 +:1069E000D2F7EDA1FEA180839183A283B383F4014A +:1069F00080819181A281B38104E0B695A795979596 +:106A000087950A95D1F780839183A283B3830FC0C2 +:106A1000AF89B88D4C920BC060FF09C08AEF94E03B +:106A2000909347058093460522E830E03BC0F6018D +:106A3000EE0DFF1D5394AFA1B8A515968C91581675 +:106A400008F4C9CD2FA138A528593F4FD901119677 +:106A5000FC93EE93A856B040B8A7AFA3C5018E1B18 +:106A60009F0BED89FE898E0F9F1FFD01EA59FF4F95 +:106A7000918380838134910520F080E490E09183BC +:106A800080832FA138A528593F4F38A72FA3D901BC +:106A9000ED91FC9111979E918E91E80FF91F108254 +:106AA00020E030E0C901A8960FB6F894DEBF0FBE13 +:106AB000CDBFCF91DF911F910F91FF90EF90DF90AD +:106AC000CF90BF90AF909F908F907F906F905F908E +:106AD0004F903F902F9008952F923F924F925F9248 +:106AE0006F927F928F929F92AF92BF92CF92DF92DE +:106AF000EF92FF920F931F93DF93CF930F92CDB737 +:106B0000DEB71B016C01DC0111967C936E9381E072 +:106B100012968C93129715961C92159744E0442E6A +:106B2000512C460E571E19968C9181FD03C0AA2444 +:106B3000BB2418C0F6010585168520E030E081E011 +:106B400090E060E070E0A2010E94EE2B480E591E1A +:106B5000D60115968C9115978F5F15968C9331E021 +:106B6000A32EB12CF601818582FF16C007851089FE +:106B70002189328982E090E0B501A2010E94EE2BCA +:106B8000480E591ED60115968C9115978F5F159654 +:106B90008C9322E0A22EB12CF601818583FF30C0B8 +:106BA000838894886624772428C0D60155962D9131 +:106BB0003C915697260D371D8401BFE08B16B1E03E +:106BC0009B0614F00EE011E083E090E0B501A20115 +:106BD000EE24FF240E948730480E591EF60185815D +:106BE0008F5F858322EF3EEF820E931E8EE091E051 +:106BF000680E791E93E0A92EB12C18141904ACF27A +:106C0000D60119968C91199784FF17C09601285EBA +:106C10003F4F57960C9184E090E0B501A20110E03F +:106C2000EE24FF240E948730480E591EF60185810C +:106C30008F5F858384E0A82EB12CD60119968C91A4 +:106C4000199785FF19C092962D913C919397909634 +:106C50000D911C91919785E090E0B501A201EE2481 +:106C6000FF240E948730480E591EF60185818F5FF0 +:106C7000858305E0A02EB12CD60119968C91199729 +:106C800086FF1EC08FE2898396962D913C9197973F +:106C900094960D911C91959786E090E0B501A20124 +:106CA0007E010894E11CF11C0E948730480E591E99 +:106CB000F60185819981890F858316E0A12EB12C7B +:106CC000D60119968C91199787FF15C098960D914A +:106CD0001C91999720E030E087E090E0B501A20197 +:106CE0000E94EE2B480E591EF60185818F5F858329 +:106CF000B7E0AB2EB12CF60181859285A385B485D2 +:106D000090FF1DC086E2898324A535A502A513A5A1 +:106D100088E090E0B501A2017E010894E11CF11C1D +:106D20000E948730480E591ED60115968C911597F2 +:106D30009981890F15968C93A8E0AA2EB12CF601A3 +:106D400081859285A385B48591FF1DC08FE28983DB +:106D500020A931A906A517A589E090E0B501A201F7 +:106D60007E010894E11CF11C0E948730480E591ED8 +:106D7000D60115968C9115979981890F15968C934C +:106D8000F9E0AF2EB12CF60181859285A385B485FB +:106D900092FF16C002A913A920E030E08AE090E03B +:106DA000B501A2010E94EE2B480E591ED601159680 +:106DB0008C9115978F5F15968C93EAE0AE2EB12CCF +:106DC000F60181859285A385B48593FF19C096014C +:106DD0002B5C3F4F04A98BE090E0B501A20110E0CD +:106DE000EE24FF240E948730480E591ED6011596C6 +:106DF0008C9115978F5F15968C937BE0A72EB12C05 +:106E0000F60181859285A385B48594FF27C06EE342 +:106E1000862E912C8C0C9D1CEE24FF2418C0D401CE +:106E20000D911D914D0120E030E08CE090E0B50126 +:106E3000A2010E94EE2B480E591EF60185818F5F3C +:106E400085830894E11CF11C5CE0A52EB12CD601D1 +:106E5000DD968C9190E0E816F9060CF3F601818539 +:106E60009285A385B48595FF22C096012D5B3F4F87 +:106E700082E490E0C80ED91ED6010C91EEEBFFEF34 +:106E8000CE0EDF1E8DE090E0B501A20110E0EE24F1 +:106E9000FF240E948730480E591ED60115968C910A +:106EA00015978F5F15968C934DE0A42EB12CF601AB +:106EB0008185928580709078892B81F186E2898323 +:106EC00023E630E0C20ED31ED6012D913C91F6018F +:106ED000129102916F018FE99FEFC80ED91E8FE0CA +:106EE00090E0B501A2017E010894E11CF11C0E9412 +:106EF0008730480E591E2981D60115968C91280F8E +:106F00008FE090E08A199B096EE070E00E945C8A35 +:106F1000260FF60125833FE0A32EB12CF6018185D3 +:106F20009285A385B485A1FF63C02BE430E0C20E37 +:106F3000D31ED6016D907D908D909D906D0124E0C3 +:106F4000660C771C881C991C2A95D1F78C91E1EB73 +:106F5000FFEFCE0EDF1E882341F088E090E0A0E036 +:106F6000B0E0682A792A8A2A9B2AA0E5B0E0CA0EF6 +:106F7000DB1EF6016081718120EB3FEFC20ED31E54 +:106F800094E0769567959A95E1F740E050E0769524 +:106F90006795CA010196FA01AC0161157105B9F74F +:106FA000009709F0CF018C0120E030E00F701070E5 +:106FB00020703070062917292829392981E190E0AD +:106FC000B501A2010E94EE2B480E591ED60115965E +:106FD0002C912F5F81E190E08A199B096EE070E0AF +:106FE0000E945C8A260FF601258301E1A02EB12CB8 +:106FF000F60181859285A385B485A3FF63C026E54C +:1070000030E0C20ED31ED6016D907D908D909D9084 +:107010006D0114E0660C771C881C991C1A95D1F739 +:107020008C91E6EAFFEFCE0EDF1E882341F088E068 +:1070300090E0A0E0B0E0682A792A8A2A9B2AABE592 +:10704000B0E0CA0EDB1EF6016081718125EA3FEFD8 +:10705000C20ED31EF4E076956795FA95E1F740E00D +:1070600050E076956795CA010196FA01AC01611569 +:107070007105B9F7009709F0CF018C0120E030E0ED +:107080000F701070207030700629172928293929AF +:1070900083E190E0B501A2010E94EE2B480E591E3B +:1070A000D60115962C912F5F83E190E08A199B09F8 +:1070B0006EE070E00E945C8A260FF601258333E1C2 +:1070C000A32EB12CF60181859285A385B485A5FFF9 +:1070D0001BC085E190E0B501A20100E010E020E0D6 +:1070E00030E00E94EE2B480E591ED60115962C91C9 +:1070F0002F5F85E190E08A199B096EE070E00E94A5 +:107100005C8A260FF6012583D6018D919C91F201B0 +:10711000E81BF90BE033F1050CF058C028E630E02D +:10712000C20ED31ED6016D917C91E8E9FFEFCE0E21 +:10713000DF1E86010A591F4FD8014D915C91C20193 +:107140000E941F8BD601ED91FC9111971082ED9159 +:10715000FC91119712968C9112978295880F880F47 +:10716000807C9081892B8083ED91FC9111971396FF +:107170009C911397929590738081892B8083ED91D8 +:10718000FC91119715969C9115979F708081892B82 +:107190008083ED91FC91119716968C9116978183BF +:1071A000ED91FC91119718968C9118978283ED912F +:1071B000FC91119717968C918383A2014219530970 +:1071C000F80180819181480F591F0BC0D6011D9293 +:1071D0001C9286E195E0909347058093460540E038 +:1071E00050E0CA010F90CF91DF911F910F91FF9056 +:1071F000EF90DF90CF90BF90AF909F908F907F9057 +:107200006F905F904F903F902F9008950F931F9332 +:10721000CF93DF938901E0916212F0916312EF0145 +:10722000DC0180E10D9009928150E1F7738B628B54 +:10723000CF01BA01A8010E940578E0916212F09195 +:10724000631280E1DF011D928A95E9F7E0916212F5 +:10725000F0916312138A128ADF91CF911F910F91DF +:1072600008950F931F938C0180E090E060E070E040 +:1072700040E050E00E945415FC019093631280930B +:107280006212118B008B0E9402759093651280939D +:1072900064121F910F9108958091C7179091C8179C +:1072A00090936912809368120895CF93DF93EC0155 +:1072B00086E692E10E94466EFC0108C082819381BD +:1072C0008C179D0729F00190F081E02D3097B1F7E0 +:1072D000CF01DF91CF910895CF93DF93EC01009719 +:1072E00069F004960E94826F86E692E1BE010E94D8 +:1072F000946E88E495E0BE010E94CE6DDF91CF913F +:107300000895CF92DF92EF92FF920F931F93CF9346 +:10731000DF93EC013DE0C32ED12CC80ED91E6D8D3C +:107320007E8DAC014B5D5F4F2BA13CA1C6010E943D +:1073300006398DA18073F1F58C85843030F5882372 +:1073400049F40E94027561E870E00E94488A80500A +:107350009F4F04C08E819F81880F991F9F838E83CA +:107360000091C7171091C817809168129091691207 +:107370009093C8178093C717CE0104960E946E7031 +:107380001093C8170093C71718C00F8D18A1E9A054 +:10739000FAA06D8D7E8DC6010E94953BCE010E94A4 +:1073A0006C390115110549F0C70160E070E0F80182 +:1073B000099503C0CE010E946C39DF91CF911F91D6 +:1073C0000F91FF90EF90DF90CF900895CF93DF93D0 +:1073D00086E692E10E94466EEC010FC0CE01049653 +:1073E0000E941D6F892B31F08C858F5F8C87CE01B9 +:1073F0000E9481390990D881C02D209779F7DF91BB +:10740000CF910895CF92DF92EF92FF920F931F9347 +:10741000CF93DF938C01D62EC72E7A0188E495E0B6 +:107420000E94A06DEC010097A9F01B830A831C86C3 +:10743000DC011D968D2D9C2D9C01F90180E10190B0 +:107440000D928150E1F7FE8EED8E86E692E1BE014F +:107450000E94CF6ECE01DF91CF911F910F91FF90CF +:10746000EF90DF90CF9008955F926F927F928F920E +:107470009F92AF92BF92CF92DF92EF92FF920F93C3 +:107480001F93CF93DF933C018B017A01FA01538064 +:1074900086EA93E10E94466EEC014801AA24BB24CF +:1074A0004DC02A813B81F3018481958128173907DA +:1074B00009F041C00E94722CBE016C5F7F4F4C8965 +:1074C0005D890E94023A6C010097A9F1FC0182815A +:1074D000938198A38F8F82819381F701908787830F +:1074E000C701B501A4010E94F22DBE01695E7F4F64 +:1074F0004E89C70150E00E9424308E010F5D1F4F5E +:10750000C8010E94FB72892B39F0F70114821382A3 +:10751000C8010E94247303C0F70153821482B6018C +:107520006B5D7F4FC7010E946C35F60194A383A366 +:10753000C6010E9481390990D881C02D209709F099 +:10754000B0CFDF91CF911F910F91FF90EF90DF901F +:10755000CF90BF90AF909F908F907F906F905F90F3 +:1075600008950F931F938C018DE695E0B8010E945A +:10757000CE6D86EA93E1B8010E94946E1F910F913F +:107580000895AF92BF92CF92DF92EF92FF920F9346 +:107590001F93CF93DF935C016B017A0186EA93E13D +:1075A0000E94466EEC0100E010E01BC0CE01049684 +:1075B000B50140E150E00E94098B009779F48C8975 +:1075C0009D898C159D0551F48F8D98A18E159F0571 +:1075D00029F4CE010E94B13A0F5F1F4F0990D88164 +:1075E000C02D209719F7C801DF91CF911F910F91FE +:1075F000FF90EF90DF90CF90BF90AF900895AF9243 +:10760000BF92CF92DF92EF92FF920F931F93CF938F +:10761000DF935C016B017A0186EA93E10E94466E7A +:10762000EC0100E010E028C0CE010496B50140E175 +:1076300050E00E94098B0097E1F48C899D898C159C +:107640009D05B9F48A819B818E159F0569F0DC0147 +:107650000D900020E9F71197A81BB90BB701AD01F8 +:107660000E94098B009729F4CE010E94B13A0F5F66 +:107670001F4F0990D881C02D2097B1F6C801DF9126 +:10768000CF911F910F91FF90EF90DF90CF90BF901F +:10769000AF9008958F929F92AF92BF92CF92DF9258 +:1076A000EF92FF920F931F93CF93DF934C015B01F7 +:1076B0006A01790186EA93E10E94466EEC0100E0DE +:1076C00010E023C0CE010496B40140E150E00E94D6 +:1076D000098B0097B9F48C899D898A159B0591F4D3 +:1076E0008E8990E08E159F0569F4CE014796B6010C +:1076F000A7010E94098B009729F4CE010E94B13A9C +:107700000F5F1F4F0990D881C02D2097D9F6C8016F +:10771000DF91CF911F910F91FF90EF90DF90CF906D +:10772000BF90AF909F908F900895CF92DF92EF928D +:10773000FF920F931F93CF93DF936C017B0186EA37 +:1077400093E10E94466EEC0100E010E016C0CE010D +:107750000496B60140E150E00E94098B009751F475 +:107760008C899D898E159F0529F4CE010E94B13A1E +:107770000F5F1F4F0990D881C02D209741F7C80196 +:10778000DF91CF911F910F91FF90EF90DF90CF90FD +:1077900008958F929F92AF92BF92CF92DF92EF9215 +:1077A000FF920F931F93CF93DF93D82EC92E7B01A7 +:1077B000A42E952EB22E832EA8010E94FF3A8DE6AC +:1077C00095E00E94A06DEC01009749F11B830A83AC +:1077D000DC0114968D2D9C2D9C01F90180E1019016 +:1077E0000D928150E1F7FD8AEC8ABE8A9E01295EE6 +:1077F0003F4FC9016A2D792D4B2D582D0E94168BB4 +:1078000018A21F8ECE0181964CE350E060E070E03C +:107810000E94317386EA93E1BE010E94CF6ECE01D1 +:10782000DF91CF911F910F91FF90EF90DF90CF905C +:10783000BF90AF909F908F900895EF92FF920F931B +:107840001F93CF93DF939C01EB018E81813009F070 +:1078500070C07A01DA0116968C9187FD6AC049855D +:107860005A856B857C85E091EE06D90114960D91C1 +:107870001C91159752FF53C0F0E0E659FC4D608112 +:1078800071812CA98AE493E2E596AE0130E00E9472 +:10789000C93B892BC1F1C70140E050E060E070E0D6 +:1078A0000E94F22D86EA93E10E94F26EEDB7FEB7D8 +:1078B0003A970FB6F894FEBF0FBEEDBF319606E9BA +:1078C00013E1ADB7BEB712961C930E93119720E14A +:1078D00030E03383228320E535E0358324839783AA +:1078E000868381E090E0918780870E94E58BAC01E0 +:1078F000EDB7FEB73A960FB6F894FEBF0FBEEDBFD8 +:10790000C701B80109C083EAD70116968C93C70155 +:107910006CE575E040E150E00E94152F0AC0F0E0F0 +:10792000E659FC4D608171818AE493E2A8010E94CE +:10793000FF3ADF91CF911F910F91FF90EF90089543 +:1079400084ED93E10895FC01868597850895FC01F7 +:10795000778766870895FC01738762870895FC0125 +:10796000758764870895FC0182819381862B972B0C +:10797000938382830895EF92FF920F931F93CF9387 +:10798000DF937C01FC01808191818D3C910591F018 +:10799000893D910589F1892B09F056C08091C7175F +:1079A0009091C81765E840E050E00E944A6C8DEC69 +:1079B00090E01DC06538F1F482ED93E10E94466EBF +:1079C000EC0111C02C813D814E815F812115310573 +:1079D0004105510529F0CE010896B9010E94847035 +:1079E0000990D881C02D209769F789ED90E0F701C3 +:1079F0009183808381E02CC06838B9F782ED93E1F0 +:107A00000E94466EEC011DC08C819D81AE81BF81BC +:107A10000097A105B10591F08E01085F1F4FC801C5 +:107A20000E941D6F892B51F0E889F989309719F070 +:107A30008A819B810995C8010E9479700990D8813B +:107A4000C02D209709F7D1CFF7011182108283E072 +:107A5000DF91CF911F910F91FF90EF9008952F929A +:107A60003F924F925F926F927F928F929F92AF92CE +:107A7000BF92CF92DF92EF92FF920F931F93DF930B +:107A8000CF9300D0CDB7DEB76C015B013A0129017D +:107A900018011A82198284ED93E10E94466E7C01DE +:107AA00000913C0410913D044E010894811C911CEE +:107AB0007BC0C601B401F8010995F701A481B58125 +:107AC000FD0101900020E9F73197EA1BFB0B8E17AF +:107AD0009F07B9F0C601B401F8010995F701A48127 +:107AE000B581FD0101900020E9F73197EA1BFB0BFE +:107AF000E817F90708F055C0D70112968C9187FF57 +:107B000050C0F70184819581FC01DF010D900020B8 +:107B1000E9F71197AE1BBF0B69817A81AD010E9415 +:107B2000538B0097F1F5E0914004F0914104C601B8 +:107B30000995D70112962D913C911397282339234B +:107B4000232B19F11A96ED91FC911B97309731F088 +:107B5000C701B601A5010995892B59F1D7011896DE +:107B6000ED91FC911997C601B501A3019201810124 +:107B70000995D7011C96ED91FC911D973097C9F09E +:107B8000C701B601A501099514C060917E047091EA +:107B90007F04E0914204F0914304C501099580E01F +:107BA00009C0F701E080F180E114F10409F081CF10 +:107BB00019C081E091E0892390E00F900F90CF9160 +:107BC000DF911F910F91FF90EF90DF90CF90BF90CA +:107BD000AF909F908F907F906F905F904F903F906D +:107BE0002F90089560917C0470917D04E09142048F +:107BF000F0914304C501099590E080E0DCCFFC01E1 +:107C000082859385892B31F4809166049091670475 +:107C10009387828784859585892B31F480916804C8 +:107C2000909169049587848784ED93E1BF010E9458 +:107C3000CF6E08950F931F938C010E94FF3D80919A +:107C4000640490916504F801958784871F910F91D2 +:107C500008950F931F938C0182ED93E1B8010E9468 +:107C6000CF6ED80112968D919C9113970E94FF3D83 +:107C7000D8011296ED91FC91139780916404909134 +:107C80006504958784871F910F91089584ED93E192 +:107C90000E94426EE0913A04F0913B048FE29DE332 +:107CA0000995E0913804F0913904099582E895E04E +:107CB00060E070E00E947D6C0895E6E4F1E02081D0 +:107CC0009081308180818295869586958370207C15 +:107CD000820F969596959073890F32953C70830F1D +:107CE000089500D000D000D0EDB7FEB731962AE459 +:107CF00031E0ADB7BEB712963C932E9311979383A4 +:107D00008283758364830E948D8B8DB79EB70696A0 +:107D10000FB6F8949EBF0FBE8DBF08954F925F922D +:107D20006F927F928F929F92BF92CF92DF92EF924B +:107D3000FF920F931F93CF93DF937C01BB2410E03E +:107D40002DED422E21E0522E90EE692E91E0792EFB +:107D500082EE882E81E0982EF701D081C0E08181EB +:107D60006E01C80ED11CC114D10499F417FD11C0C5 +:107D7000012F0F5F112311F0102F28C000D0EDB795 +:107D8000FEB7928281820E948D8B102F0F900F90F0 +:107D90001DC0111614F41FEF0BC0BB2049F000D01A +:107DA000EDB7FEB7728261820E948D8B0F900F90AB +:107DB00000D000D0EDB7FEB752824182D482C38298 +:107DC0000E948D8B0F900F900F900F90F2E0BF0EDE +:107DD00082E090E0E80EF91E90E1B91609F0BCCF00 +:107DE000DF91CF911F910F91FF90EF90DF90CF9097 +:107DF000BF909F908F907F906F905F904F9008956D +:107E0000BF92CF92DF92EF92FF920F931F93DF9377 +:107E1000CF93CDB7DEB728970FB6F894DEBF0FBE6D +:107E2000CDBF0E94F9440E94054580E069E146E02B +:107E30000E947C4481E060E146E00E947C4480E056 +:107E40000E94F0440E94C44284B784B784B784B7C8 +:107E500084B7E5E1F1E322E432E4318320833A960A +:107E60008DB79EB70A97E817F907B8F300D000D08E +:107E700082E892E0ADB7BEB712969C938E931197AD +:107E80008CE895E014969C938E9313970E948D8BAB +:107E90000F900F900F900F900E94AB720E94A96BF1 +:107EA0008CE696E060E070E00E947D6C0E94BD71FF +:107EB000E091BD05F091BE0509950E945D3E90E000 +:107EC0000E940575CE0101960E941642882359F042 +:107ED00000D082E692E0EDB7FEB7928381830E94E4 +:107EE0008D8B0F900F90AAE3B3E2FE01319688E0EC +:107EF00001900D928150E1F77E010894E11CF11C84 +:107F0000C7010E94C74C0E9411428C010E940C4282 +:107F1000BC01C801A7010E942F450E9420420E9477 +:107F200004480E9407420E9401482DB73EB72251E3 +:107F300030400FB6F8943EBF0FBE2DBFEDB7FEB771 +:107F400031968DE392E0ADB7BEB712969C938E93B7 +:107F500011978981828313828A81848315828B8120 +:107F6000868317828C81808711868D818287138614 +:107F70008E81848715868F81868717868885808B7A +:107F8000118A0E948D8BEDB7FEB772960FB6F894EA +:107F9000FEBF0FBEEDBF0E94F877E0913B06F09167 +:107FA0003C060995E091E005F091E1050995E09125 +:107FB000C406F091C5060995C090DE05D090DF0596 +:107FC000E0903906F0903A060E942C45B82E0091B8 +:107FD000470610914806F8010995892B19F400E825 +:107FE00010E008C0F8010995BC0180E890E00E940B +:107FF000488A8B010E94A7452DB73EB72C503040D0 +:108000000FB6F8943EBF0FBE2DBFEDB7FEB7319649 +:108010002BE032E0ADB7BEB712963C932E9311978A +:10802000D382C282F582E482B682178211870087EA +:10803000828713860E948D8BEDB7FEB73A960FB6F6 +:10804000F894FEBF0FBEEDBF8EEF91E09283818367 +:108050000E948D8B8DEE91E0ADB7BEB712969C93CA +:108060008E9311970E948D8B0F900F908FE893E065 +:1080700060E070E00E947D6C89EF92E00E94CD6C20 +:1080800000D085EE91E0EDB7FEB7928381830E9428 +:108090008D8B0F900F9028960FB6F894DEBF0FBE11 +:1080A000CDBFCF91DF911F910F91FF90EF90DF90A7 +:1080B000CF90BF9008952F923F924F925F926F9210 +:1080C0007F928F929F92AF92BF92CF92DF92EF9268 +:1080D000FF920F931F93CF93DF930E94003FFEE226 +:1080E0002F2E312CEAE84E2EE1E05E2E72E8672E4C +:1080F00071E0772E6DE6862E61E0962E59E7A52E6B +:1081000051E0B52E46EAC42E41E0D42E0E94D86B31 +:108110000E9411458091AD2E9091AE2E009729F0CE +:1081200001979093AE2E8093AD2EE090AF2EF090FD +:10813000B02E0091B12E1091B22E0E94E542E616AB +:10814000F7060807190711F30E94E5426093AF2E66 +:108150007093B02E8093B12E9093B22E2CE330E02A +:1081600040E050E00E946F8A61157105810591051C +:1081700011F40E9443736091AF2E7091B02E8091E4 +:10818000B12E9091B22E28E532E040E050E00E94FE +:108190006F8A623071058105910509F004C100D034 +:1081A00000D0E8ECF1E0ADB7BEB71296FC93EE93C9 +:1081B000119784E090E014969C938E9313970E94FD +:1081C0008D8B0AE419E2C0E0D0E00F900F900F9081 +:1081D0000F903CE1E32EF12CD8018C918823B1F073 +:1081E000CE9DC001CF9D900DDE9D900D1124855B2D +:1081F000964D0E948E3E00D026EC31E0EDB7FEB7E2 +:10820000328321830E948D8B0F900F902196045E04 +:108210001F4FC430D10501F700D000D0E1EBF1E0F1 +:10822000ADB7BEB71296FC93EE9311978AE090E03B +:1082300014969C938E9313970E948D8B01E01BE202 +:1082400091E0C0E0D0E00F900F900F900F90D80118 +:108250008C918823D9F0E0E3F0E0CE9FC001CF9F5E +:10826000900DDE9F900D11248E5F944D0E948E3EE6 +:1082700000D0EFEAF1E0ADB7BEB71296FC93EE93F3 +:1082800011970E948D8B90E00F900F902196005DCA +:108290001F4FCA30D105D9F6992359F000D0ADB798 +:1082A000BEB71296DC92CE9211970E948D8B0F90E2 +:1082B0000F9000D000D024E931E0EDB7FEB7328353 +:1082C00021838AE090E0948383830E948D8BC1EEAA +:1082D000DCE291E0EE24FF240F900F900F900F90BE +:1082E0008881882309F440C0E29C8001E39C100D42 +:1082F000F29C100D1124C8018E51934D0E948E3EA8 +:1083000000D000D0EDB7FEB73196ADB7BEB712962C +:108310005C924E9211978989828313820E948D8B81 +:108320000F900F900F900F90C8018C50934D0E94AA +:108330008E3E00D000D000D0EDB7FEB772826182D1 +:108340008BA19CA1ADA1BEA183839483A583B68399 +:108350000E948D8B90E02DB73EB72A5F3F4F0FB63E +:10836000F8943EBF0FBE2DBF0894E11CF11CAE96E1 +:108370003AE0E316F10409F0B3CF992359F000D0A5 +:10838000ADB7BEB71296BC92AE9211970E948D8B7C +:108390000F900F9000D0EDB7FEB7928281820E94BD +:1083A0008D8B0F900F908091AF2E9091B02EA09159 +:1083B000B12EB091B22E9370A070B0700397A1054A +:1083C000B10509F0A3CEE5E1F1E38081918182540A +:1083D0009244B9F000D000D020E531E0ADB7BEB78F +:1083E00012963C932E931197E551F1431496FC930A +:1083F000EE9313970E948D8B0F900F900F900F901C +:1084000085CE3A9631E4E53FF307F8F27FCE88E275 +:1084100090E00E946A8E089586E290E00E94728E3B +:10842000089584E290E00E94728E0895F89460E0CE +:1084300070E048E050E00E945A8E789480E0089501 +:108440000F931F93DF93CF93CDB7DEB7A2970FB6ED +:10845000F894DEBF0FBECDBF82E290E00E94728E24 +:1084600089839A83982F8B50803108F09A838A8170 +:108470008095981709F476C000D08DEB92E0EDB7A7 +:10848000FEB7928381830E948D8B80E090E00F90F5 +:108490000F909E012D5F3F4FFC01E356FD4FE4918D +:1084A000D901A80FB91FEC93019688309105A1F767 +:1084B000F8948E010D5F1F4FC80160E070E048E046 +:1084C00050E00E94788E20E030E0C801F901EB55C1 +:1084D000FD4FE491DC01A20FB31FEC932F5F3F4FE0 +:1084E0002E30310599F768E070E04EE050E00E94D0 +:1084F000788E20E030E0CE010396F901ED54FD4F77 +:10850000E491DC01A20FB31FEC932F5F3F4F2A30A1 +:10851000310599F766E170E04AE050E00E94788EFC +:1085200084E290E06DEC7BEA0E94908E86E290E01F +:1085300060E070E00E94908E88E290E060E00E942F +:10854000828E80E290E060E070E00E94908E8AE18E +:10855000898385EE8A8369817A8182E290E00E9434 +:10856000908E78948981A2960FB6F894DEBF0FBEE4 +:10857000CDBFCF91DF911F910F9108951092D71326 +:108580001092D61308950895F89480E28093B6006F +:108590001092B2008FE18093B30092E09093B0000C +:1085A0009093B10087B387BB90937000789408953F +:1085B0002091D8133091D9138091D8139091D91369 +:1085C00028173907A9F7C90108952091BB2E3091CA +:1085D000BC2E4091BD2E5091BE2E8091BB2E90910D +:1085E000BC2EA091BD2EB091BE2E281739074A0788 +:1085F0005B0759F7B901CA0108956093BB2E7093C8 +:10860000BC2E8093BD2E9093BE2E0895AC01209178 +:10861000D8133091D9138091D8139091D91328177A +:108620003907A9F7420F531F2091D8133091D9135E +:108630008091D8139091D91328173907A9F7241BD3 +:10864000350B37FDF1CF0895009731F0880F991F52 +:10865000880F991F0197F1F7089520EA3FE004C0C1 +:10866000F9013197F1F701970097D1F70895EF924B +:10867000FF920F931F937FB7F8942091D8133091F6 +:10868000D913280F391F3093D9132093D813209171 +:10869000DA13AC01420F511D6091562FE090B72EB6 +:1086A000F090B82E0091B92E1091BA2E9A012AC0DE +:1086B0008091BB2E9091BC2EA091BD2EB091BE2E6C +:1086C0000196A11DB11D8093BB2E9093BC2EA0934B +:1086D000BD2EB093BE2E662399F08091B32E90915B +:1086E000B42EA091B52EB091B62E0196A11DB11D4C +:1086F0008093B32E9093B42EA093B52EB093B62E44 +:10870000205830402038310598F69A01220F232F47 +:10871000221F330B3195C901A0E0B0E08E0D9F1DE3 +:10872000A01FB11F8093B72E9093B82EA093B92E9F +:10873000B093BA2E3695322F222737952795421BB4 +:10874000530B4093DA137FBF1F910F91FF90EF906F +:1087500008951F920F920FB60F920BB60F9211242D +:108760002F933F934F935F936F937F938F939F9339 +:10877000AF93BF93EF93FF938091D8139091D91348 +:1087800001969093D9138093D8138091DA138F5F59 +:108790008093DA138091DA1387FF15C01092DA13F1 +:1087A0008091BB2E9091BC2EA091BD2EB091BE2E7B +:1087B0000196A11DB11D8093BB2E9093BC2EA0935A +:1087C000BD2EB093BE2E8091562F8823F1F080915C +:1087D000DB138F5F8093DB138091DB1387FF15C062 +:1087E0001092DB138091B32E9091B42EA091B52EF0 +:1087F000B091B62E0196A11DB11D8093B32E90931A +:10880000B42EA093B52EB093B62E0E94356F892B4F +:1088100011F00E94B46FFF91EF91BF91AF919F91C2 +:108820008F917F916F915F914F913F912F910F9019 +:108830000BBE0F900FBE0F901F9018951F920F92B6 +:108840000FB60F920BB60F9211242F933F934F93B5 +:108850005F936F937F938F939F93AF93BF93EF93A8 +:10886000FF938091C600E091C12EF091C22E309707 +:1088700009F00995FF91EF91BF91AF919F918F9171 +:108880007F916F915F914F913F912F910F900BBE10 +:108890000F900FBE0F901F9018951F920F920FB65A +:1088A0000F920BB60F9211242F933F934F935F9328 +:1088B0006F937F938F939F93AF93BF93EF93FF93A8 +:1088C0008091CE00E091BF2EF091C02E309709F03C +:1088D0000995FF91EF91BF91AF919F918F917F91FA +:1088E0006F915F914F913F912F910F900BBE0F9021 +:1088F0000FBE0F901F901895882371F41092C50039 +:108900006093C40088E98093C1004093C200109234 +:10891000C22E1092C12E0895813069F41092CD00BC +:108920006093CC0088E98093C9004093CA001092FC +:10893000C02E1092BF2E0895882339F48091C00074 +:1089400085FFFCCF6093C6000895813031F480919B +:10895000C80085FFFCCF6093CE000895882329F4DA +:108960007093C22E6093C12E0895813021F47093CC +:10897000C02E6093BF2E08951F93CF93DF93182FBF +:10898000EB010DC08A3021F4812F6DE00E949C44E0 +:1089900068816D3019F0812F0E949C442196888156 +:1089A000882381F7DF91CF911F910895682F80E090 +:1089B0000E949C4408951F93182F8A3031F48091AF +:1089C000DC136DE00E949C4402C08D3029F0809140 +:1089D000DC13612F0E949C4480E090E01F91089579 +:1089E0008093DC1388E995E09093123180931131E4 +:1089F000089584B7877F84BF88E10FB6F894809389 +:108A00006000109260000FBE08952FE088E190E0B2 +:108A10000FB6F894A895809360000FBE2093600075 +:108A20000895A895089588E10FB6F89480936000A2 +:108A3000109260000FBE0895F89428E088E190E05D +:108A40000FB6F894A895809360000FBE2093600045 +:108A5000FFCF8093DD1308958091DE130895DA012E +:108A60008093620190936301609360017093610150 +:108A70004115510521F1FA01819180936B01119605 +:108A80008C9180936A01DF01119681818093690145 +:108A9000FD01319611968C9180936801DF0111964A +:108AA000818180936701FD01319611968C918093AD +:108AB00066018181809365018281809364010895BC +:108AC0008091C82E90E008958091390181FF02C005 +:108AD00091E016C081E491E06FE140E00E94BE4B5E +:108AE000282F8151823058F02F3149F0213039F050 +:108AF00090E0223009F491E081E0982701C090E0F5 +:108B0000892F08958091390181FD04C00E94644538 +:108B10008823C1F308958091390181FF03C020E0CB +:108B200030E013C081E491E06FE140E00E94BE4B71 +:108B3000282F813019F421E030E007C080E090E078 +:108B4000213111F481E090E09C01C90108958091E8 +:108B5000390181FF02C080E1089585E491E06FE072 +:108B600040E00E94BE4B089581E491E06FE140E057 +:108B70000E94BE4B089581E491E06FE140E00E94C5 +:108B8000BE4B823021F0823111F081E0089580E007 +:108B900008958091390181FF09C0809139018D7F4D +:108BA0008093390189E190E00197F1F782E491E047 +:108BB0006FE140E023E00E94C84B85E090E0019720 +:108BC000F1F708951092562F8091390181FD8FC0E1 +:108BD0000E9482458091390181FD89C00E94C9456A +:108BE0008091390182608093390180919830882387 +:108BF000E9F180919400909195002091A9303091F5 +:108C0000AA3082179307A0F4809175309091763046 +:108C1000A0917730B0917830875F924CAF4FBF4FC3 +:108C20008093753090937630A0937730B0937830FE +:108C30008091940090919500821B930BA0E0B0E08E +:108C40002091753030917630409177305091783066 +:108C5000820F931FA41FB51F8093753090937630B9 +:108C6000A0937730B09378301092983080919A30FA +:108C70008823E9F180919400909195002091AD3086 +:108C80003091AE3082179307A0F480917D3090919F +:108C90007E30A0917F30B0918030875F924CAF4F93 +:108CA000BF4F80937D3090937E30A0937F30B09300 +:108CB00080308091940090919500821B930BA0E0EE +:108CC000B0E020917D3030917E3040917F305091E6 +:108CD0008030820F931FA41FB51F80937D30909327 +:108CE0007E30A0937F30B093803010929A300895F8 +:108CF0008091562F882321F00E9464450E94E2450E +:108D000080E090E008950F931F93182F883059F05A +:108D1000863049F0893039F0863129F0893119F0EF +:108D200022E430E054C08091390181FF03C024E483 +:108D300030E04DC00E94824581E491E06FE140E067 +:108D40000E94BE4B082F181709F43CC0183029F4B4 +:108D5000809139010E94C94524C0193119F4863126 +:108D600081F404C0163169F4893159F482E491E048 +:108D70006FE140E029E00E94C84B85E090E0019758 +:108D8000F1F782E491E06FE140E0212F0E94C84BAF +:108D9000083019F481ED92E002C085E090E001977F +:108DA000F1F781E491E06FE140E00E94BE4B811752 +:108DB00049F0163019F4813041F404C0163129F419 +:108DC000813119F420E430E002C023E430E0C9012D +:108DD0001F910F9108958091940090919500909328 +:108DE000AE308093AD3021E020939A302093562FFF +:108DF0008091390181FF22C080919400909195006B +:108E00009093AA308093A930209398302093512FCB +:108E10009FB7789480913901809139018D7F80933B +:108E2000390120E030E08091512F882331F02F5F0D +:108E30003F4F87E220313807B1F79FBF86E10E949C +:108E400083460E94824508958091562F882311F40D +:108E50000E94EB4681E090E008950F931F9380916C +:108E6000562F882311F000E003C00E94244701E040 +:108E700081E491E06FE140E00E94BE4B863111F049 +:108E8000813119F4109147010AC086E491E06FE145 +:108E900040E00E94BE4B93E0899F102D11240023D7 +:108EA00011F00E947846812F1F910F9108950F9322 +:108EB0001F93DF93CF930F92CDB7DEB78091562FDC +:108EC000882359F08091390181FD83C00E94644557 +:108ED000882309F47EC000E003C00E94244701E01B +:108EE00080919400909195009093A8308093A73042 +:108EF00011E01093973080E88093550186E00E943E +:108F000083461093C92E8FB78983789410924701B6 +:108F10008091C92E8823E1F789818FBF8091470115 +:108F20008E3010F41FEF01C010E086E10E948346EE +:108F300010925501809197308823E9F18091940037 +:108F4000909195002091A7303091A8308217930717 +:108F5000A0F48091713090917230A0917330B091F3 +:108F60007430875F924CAF4FBF4F809371309093B6 +:108F70007230A0937330B0937430809194009091CC +:108F80009500821B930BA0E0B0E0209171303091EE +:108F900072304091733050917430820F931FA41F30 +:108FA000B51F8093713090937230A0937330B0935B +:108FB000743010929730002311F00E947846212FD0 +:108FC00030E086E0369527958A95E1F7217030707C +:108FD00002C020E030E0C9010F90CF91DF911F91D6 +:108FE0000F910895282F8091390181FD09C020310A +:108FF00008F02FE085E491E06FE040E00E94C84B6C +:1090000008950E94F24708951F93182F0E948245E9 +:109010001093DE1388E491E06FE140E0212F0E947D +:10902000C84B1F9108950E94044886E00E94834621 +:1090300008958FEF80934E018CE691E060EF44E05D +:1090400020E00E94C84B8CE691E06EE041E025E014 +:109050000E94C84B80E880936F0180914601809305 +:109060006D0184E491E060E245E021E00E94C84B9C +:109070000895282F8EE691E060E245E00E94C84BFB +:109080000895FC01AB0180915F2F9091602FA0911A +:10909000612FB091622F0196A11DB11D80935F2FAA +:1090A0009093602FA093612FB093622F862F8E5FD5 +:1090B00087FF0CC08091542F9091552F019690936B +:1090C000552F8093542F2FEF3FEF08C02FED33E142 +:1090D000C901BF010E94168B20E030E0C90108954C +:1090E000EF92FF921F93DF93CF930F92CDB7DEB72E +:1090F000182F8091390181FF1EC0809194009091BA +:1091000095009093AA308093A93081E080939830A5 +:109110008093512F809139018D7F8093390120E018 +:1091200030E08091512F882331F02F5F3F4F87E24D +:1091300020313807B1F70E9482458091562F88234D +:1091400009F441C080919A308823E9F1809194001C +:10915000909195002091AD303091AE3082179307F9 +:10916000A0F480917D3090917E30A0917F30B091BD +:109170008030875F924CAF4FBF4F80937D3090938C +:109180007E30A0937F30B093803080919400909196 +:109190009500821B930BA0E0B0E020917D303091D0 +:1091A0007E3040917F3050918030820F931FA41FFA +:1091B000B51F80937D3090937E30A0937F30B09325 +:1091C000803010929A3089E10E94834686E00E94A6 +:1091D000A475892B19F4EE24FF2409C00E94A74529 +:1091E000E82E86E00E94A47581500E94F24780918B +:1091F0009400909195009093AC308093AB3081E0D7 +:10920000809399308FB78983F89480913901826077 +:1092100080933901809139018D7F809339011E5FE0 +:109220008FED93E1612F0E940A4C89818FBF80915D +:10923000522F9091532F01969093532F8093522F3A +:109240000E94824582E491E060EE45E00E94BE4BC0 +:10925000182F86E00E94A475892B19F08E2D0E948C +:10926000F247809199308823E9F1809194009091A0 +:1092700095002091AB303091AC3082179307A0F469 +:109280008091793090917A30A0917B30B0917C3090 +:10929000875F924CAF4FBF4F8093793090937A3075 +:1092A000A0937B30B0937C30809194009091950096 +:1092B000821B930BA0E0B0E02091793030917A309E +:1092C00040917B3050917C30820F931FA41FB51FBB +:1092D0008093793090937A30A0937B30B0937C3038 +:1092E000109299308091562F882371F080919400CC +:1092F000909195009093AE308093AD3081E0809353 +:109300009A300E94EB4602C00E94E245113011F0F3 +:10931000112369F580919F2F9091A02FA091A12FEB +:10932000B091A22F0196A11DB11D80939F2F909304 +:10933000A02FA093A12FB093A22F8CE00E94A47520 +:10934000892B99F080917B2F90917C2FA0917D2F7C +:10935000B0917E2F0196A11DB11D80937B2F90931C +:109360007C2FA0937D2FB0937E2F10E031C013305F +:10937000A9F48091972F9091982FA091992FB09157 +:109380009A2F0196A11DB11D8093972F9093982F2E +:10939000A093992FB0939A2F12E01AC01530A9F418 +:1093A0008091832F9091842FA091852FB091862F4B +:1093B0000196A11DB11D8093832F9093842FA093BC +:1093C000852FB093862F13E003C0173009F411E006 +:1093D000812F90E00F90CF91DF911F91FF90EF9040 +:1093E0000895CF93DF93EB010E9441489C010097C1 +:1093F00031F4CE010E9470489C01009749F08091A1 +:10940000542F9091552F01969093552F8093542F60 +:10941000C901DF91CF91089583EB95E00E94AA6C7A +:1094200081E08093C82E8091CA2E9091CB2E019618 +:109430009093CB2E8093CA2E8091A32F9091A42F2E +:10944000A091A52FB091A62F0196A11DB11D8093CB +:10945000A32F9093A42FA093A52FB093A62F81E0C4 +:1094600090E00895CF93DF93582FA92F2091CE2E0F +:10947000822F90E0FC01F695FE2FEE27F795E795F9 +:10948000880F991FE80FF91FE153F14D40814423E4 +:1094900021F147FF25C0822F90E0FC01F695FE2FB9 +:1094A000EE27F795E795880F991FE80FF91FE1530D +:1094B000F14D108280918F2F9091902FA091912F3C +:1094C000B091922F0196A11DB11D80938F2F909383 +:1094D000902FA093912FB093922FC0E0D0E0C5C001 +:1094E000433018F5822F90E0FC01F695FE2FEE2711 +:1094F000F795E795880F991FE80FF91FE153F14D94 +:10950000108280918B2F90918C2FA0918D2FB091F4 +:109510008E2F0196A11DB11D80938B2F90938C2FC0 +:10952000A0938D2FB0938E2FD8CFC42FD0E0229749 +:109530006C177D0718F5822F90E0FC01F695FE2F41 +:10954000EE27F795E795880F991FE80FF91FE1536C +:10955000F14D10828091872F9091882FA091892FB3 +:10956000B0918A2F0196A11DB11D8093872F9093F2 +:10957000882FA093892FB0938A2FAFCF822F90E0AE +:109580009C013695322F222737952795880F991FF2 +:10959000280F391F2053314D852F9A2FB90150E0E4 +:1095A0000E94168B2091CE2E822F90E0FC01F69522 +:1095B000FE2FEE27F795E795880F991FE80FF91F03 +:1095C000E15BF04D80818093C32E822F90E0FC01FF +:1095D000F695FE2FEE27F795E795880F991FE80F70 +:1095E000F91FE153F14D10821092CE2E80E090E0F1 +:1095F000FC01F695FE2FEE27F795E795880F991F4A +:10960000E80FF91FE153F14D8081882319F00E9482 +:109610000C4A02C01092C82E609147016093C42E7C +:109620008091C72E882311F0681710F46093C72E1D +:1096300084E070E00E9499756091C32E83E070E031 +:109640000E9499758091632F9091642FA091652F4E +:10965000B091662F0196A11DB11D8093632F909349 +:10966000642FA093652FB093662FCE01DF91CF9129 +:1096700008950F931F93DF93CF930F92CDB7DEB76B +:109680008C01FC0180819181009721F08A539540E3 +:1096900079F506C08AE395E0F8019183808302C0E2 +:1096A000623811F081E028C00E94E6758FB7898387 +:1096B000F8940E94557560E870E00E94324A9C015F +:1096C00089818FBF121613064CF4C9010E94507590 +:1096D000E0914106F09142060995DCCF8091C52EBC +:1096E0009091C62E01969093C62E8093C52ED2CF10 +:1096F000F8011182108283E00F90CF91DF911F91CA +:109700000F9108950F931F9309EF17E0C801019778 +:10971000F1F70E94BD4B1092CF2E1092CE2E1092D8 +:10972000CD2EE9E3F1E080818E7F808380818D7F83 +:10973000808381E89BE10197F1F7808181608083DC +:1097400082E491E06FE140E023E00E94C84BC80151 +:109750000197F1F780915D0180915E010E941948A7 +:1097600083EB95E060E070E00E947D6C0E94EB4628 +:1097700081E090E01F910F9108950895FC01808190 +:10978000862390E002C0959587954A95E2F7089563 +:10979000DF93CF930F92CDB7DEB75FB75983F894BD +:1097A000FC019081862F8095892330E002C0220F32 +:1097B000331F4A95E2F76223862B808389818FBF0E +:1097C0000F90CF91DF910895CF93DF93FC0190919B +:1097D0007B01892F83508D3730F01082E058FF4F86 +:1097E0001192108214C0EF019993A0E8B1E091505A +:1097F000292F30E02F573E4F8D918993A217B30741 +:10980000D9F7E058FF4F8C91819381E08083DF91FD +:10981000CF910895DC0160938001E1E8F1E06350AD +:1098200070E06E577E4F8D918193E617F707D9F759 +:1098300008951F920F920FB60F9211240F900FBE32 +:109840000F901F9018951F920F920FB60F92112430 +:109850000F900FBE0F901F9018951F920F920FB68A +:109860000F9211240F900FBE0F901F9018951F920A +:109870000F920FB60F9211241092512F0F900FBE1E +:109880000F901F9018951F920F920FB60F921124F0 +:109890001092CC2E0F900FBE0F901F9018951F9214 +:1098A0000F920FB60F9211240F900FBE0F901F90C2 +:1098B00018951F920F920FB60F9211241092C92E75 +:1098C0000F900FBE0F901F9018951F920F920FB61A +:1098D0000F920BB60F9211242F933F934F935F93E8 +:1098E0006F937F938F939F93AF93BF93EF93FF9368 +:1098F000809147018093C42E8091CD2E22E8829FD3 +:10990000C00111248153914D0E94E44B1092CD2E41 +:109910000E940C4AFF91EF91BF91AF919F918F915F +:109920007F916F915F914F913F912F910F900BBE5F +:109930000F900FBE0F901F901895AC0120E030E003 +:10994000FA01E20FF31FDB01A20FB31F8C9180839A +:109950002F5F3F4F2830310599F70895AC0120E083 +:1099600030E0FA01E20FF31FDB01A20FB31F908179 +:109970008C91981719F020E030E007C02F5F3F4F1F +:109980002830310571F721E030E0C9010895AC01BC +:1099900020E030E0F901E95AF04DDA01A20FB31FDF +:1099A0008C9180832F5F3F4F2830310599F70895C0 +:1099B000E091C606F091C70609950895E091430627 +:1099C000F091440609950895E0914506F091460608 +:1099D00009950895E0914706F0914806309719F4EB +:1099E00020E030E002C009959C01C9010895CF93A1 +:1099F000DF93EC01009779F08F8D98A10E94466E5D +:109A0000AC01009741F0E0913F06F091400680E400 +:109A10009EE4BE010995DF91CF910895AF92BF9268 +:109A2000CF92DF92EF92FF920F931F93CF93DF932A +:109A30006C015B0160916014709161146F5F7F4FE6 +:109A40007093611460936014615070408AE00E94CA +:109A5000997589E10E94AD7561ED75E00E94AE4C8B +:109A6000892B09F09EC089E10E94AD757C0182E6D8 +:109A700094E10E94466E0AC0C8010296B7010E9496 +:109A8000AE4C892BE1F4C8010E94136F8C01009742 +:109A900099F78FC0C8010296B7010E949D4C1A8E9B +:109AA0001B8E1C8EC8014D9698A38F8F1E8E1D8E07 +:109AB0000E94426E82E694E1B8010E94CF6E84EF6C +:109AC00095E00E94A06DEC01009709F450C08CEF66 +:109AD00095E00E94A06D9D838C83892B09F442C080 +:109AE0000E94AE779B838A83EC80FD80892BA9F14D +:109AF00089E00E94A475892B11F483E003C089E0FA +:109B00000E94A475F7018483F701D182C082B382D9 +:109B1000A2828EE00E94A475F801278D30A10197E2 +:109B200029F4C901BE010E94B96E04C0C901BE0179 +:109B30000E94CF6EF801878D90A10E94466E8C170F +:109B40009D0709F040C0C8010A9660E070E047EF49 +:109B50005CE498010E945C7136C08CEF95E0B7011F +:109B60000E94CE6D84EF95E0BE010E94CE6DF8019B +:109B7000878D90A10E94F26E892B51F482E694E1C8 +:109B8000B8010E94946E8CEE95E0B8010E94CE6DF3 +:109B9000C601B50144E050E021E030E00E94CA84F3 +:109BA00012C0E0913D06F0913E06C601B50109954F +:109BB0000AC08CEE95E00E94A06DEC018C0100972C +:109BC00009F068CFE5CFDF91CF911F910F91FF9002 +:109BD000EF90DF90CF90BF90AF9008950F931F93B9 +:109BE000CF93DF938C01FC01878D90A10E94466E7C +:109BF000EC01009709F43FC08A819B810E94817724 +:109C0000F801878D90A10E94886E6C817D818CEF18 +:109C100095E00E94CE6D84EF95E0BE010E94CE6D6E +:109C2000F801878D90A10E94466E892BB1F0F80152 +:109C3000128E138E148EE0914706F0914806099516 +:109C4000BC01009711F460E170E0C8010A9647EF8B +:109C50005CE498010E945C710EC0C8010A960E94E3 +:109C60001A7182E694E1B8010E94946E8CEE95E040 +:109C7000B8010E94CE6DDF91CF911F910F91089591 +:109C80004F925F926F927F928F929F92AF92BF920C +:109C9000CF92DF92EF92FF920F931F93CF93DF93B8 +:109CA0008B01EC018F8D98A10E94466E6C01FC0126 +:109CB000A480B5800130110591F00230110524F423 +:109CC0000115110541F012C00230110521F00330D9 +:109CD000110561F408C08A8D8F5F8A8F07C08B8D54 +:109CE0008F5F8B8F03C08C8D8F5F8C8FF5016080B1 +:109CF0007180428053808A8CC80101970297B0F529 +:109D0000E0914706F091480609957C01009719F407 +:109D100080E1E82EF12C9A8C0E9402759C019A8DAC +:109D2000F5018481981710F5892D90E00196843013 +:109D3000910514F083E090E0E89EB001E99E700D7B +:109D4000F89E700D1124C9010E94488ABC016E0D55 +:109D50007F1DCE010A9647EF5CE49E010E945C7174 +:109D6000F601828193810E94A3770AC0CE010E94EE +:109D7000EE4DC301B201A801282D30E00E94CA8433 +:109D8000DF91CF911F910F91FF90EF90DF90CF90D7 +:109D9000BF90AF909F908F907F906F905F904F900B +:109DA000089584EF95E00E941F6E8CEF95E00E946D +:109DB0001F6E8CEE95E00E941F6E08958091DC145A +:109DC000882379F08091DE14882359F08091DD1486 +:109DD000882339F41092DE14E091CF05F091D0057C +:109DE000099508950E94DE4E1092E1141092E0143D +:109DF00008951092DC148093DD14892B49F081E0E2 +:109E00008093DE14E091CD05F091CE05099508957B +:109E10001092DE14E091CF05F091D00509950895D8 +:109E20008FE090E0089580E090E008950F931F93F5 +:109E30008091DC148823A9F481E08093DC141092D3 +:109E4000DD1460919400709195006F55784F80E01B +:109E500095E141E050E028E93FE400E010E00E9495 +:109E6000907281E090E01F910F9108950F931F93DE +:109E70001092DE141092071510920615609194004E +:109E8000709195006F55784F80E095E141E050E08A +:109E900028E93FE400E010E00E94907281E08093A6 +:109EA000DC141F910F9108950F931F939C018091D3 +:109EB000DC148823F9F080919400909195008095AE +:109EC0009095860F971F97FF06C060919400709140 +:109ED00095006F5F7F4FC90141E050E028E93FE402 +:109EE00000E010E00E949072892B21F084E096E05F +:109EF0000E94B08B1F910F9108951F931091DE1453 +:109F00008091DF14882391F48091E0149091E11402 +:109F1000892B61F40E94DE4E112341F08091DE1402 +:109F2000882321F489E590E30E94466D1F910895EE +:109F30000F931F93CF93DF93EC01809106159091BF +:109F4000071521E08F39920709F496C021E0803A85 +:109F5000920718F4892B59F081C121E0813D9207C5 +:109F600009F409C1885E914009F078C108C0809168 +:109F70009400909195009093ED148093EC1480914F +:109F8000EB148F5F8093EB1481508830A9F410920A +:109F9000EB148091EC149091ED14875F924C9093A8 +:109FA000ED148093EC148091EC149091ED14909347 +:109FB000A1158093A0151CC00091EC141091ED1414 +:109FC0006091EB1470E080E090E029E03DE340E038 +:109FD00050E00E94298A23E09695879577956795AA +:109FE0002A95D1F7060F171F1093A1150093A015FE +:109FF0001092EA141092E71444C08091940090915A +:10A0000095009093E9148093E8148091DF148823DD +:10A0100039F58091E0149091E114892B09F5809134 +:10A02000DF14882381F48091DC14882361F080910F +:10A03000DE14882341F481E08093DE14E091CD05A5 +:10A04000F091CE050995E091C705F091C8050995F5 +:10A05000892B21F481E08093EA1418C00E947D4F7F +:10A060006091940070919500695F7F4FCE010E94CE +:10A07000544F8FE991E079C08091E7148F5F80930E +:10A08000E7148091E714823008F4B7CF8091EA1486 +:10A09000882309F4A8C08091940090919500909332 +:10A0A000E6148093E5141092E4141092E31463C054 +:10A0B0008091E3148F5F8093E314E091C905F091E0 +:10A0C000CA050995892B11F01092E4148091E414CB +:10A0D000863090F48091E3148B3088F0E091C905CC +:10A0E000F091CA050995892B51F4E091CB05F091C7 +:10A0F000CC050995892B19F40E947D4F52C0E0913F +:10A10000CB05F091CC050995892B09F04AC08091C7 +:10A11000DC14882341F148815981209194003091C9 +:10A120009500CA010696821B930B97FD03C068E059 +:10A1300070E008C060919400709195006E5F7F4F51 +:10A14000641B750B640F751FCE0141E050E028E9D8 +:10A150003FE400E010E00E949072892B21F084E03F +:10A1600096E00E94B08B81ED91E09093071580936B +:10A17000061581E078C08091DF14882391F48091E6 +:10A18000DE14882371F08091940090919500835C97 +:10A1900090402091E5143091E614821B930B97FDBB +:10A1A00087CF8091DE148823F1F0E091C905F0910A +:10A1B000CA050995892B39F4E091CB05F091CC05BE +:10A1C0000995892B71F08091940090919500835CA2 +:10A1D00090402091E5143091E614821B930B97FD7B +:10A1E00002C00E947D4F8091940090919500209133 +:10A1F000A0153091A11581569740821B930B97FFB4 +:10A20000BECE8091E2148F5F8093E2148150803142 +:10A21000B8F48091DF14882399F48091DE148823A8 +:10A2200079F48091A0159091A1152091940030911E +:10A2300095008F55984F821B930B0E947A839FCE77 +:10A240001092E2146091A0157091A1156F55784F8E +:10A25000CE010E94544F88EE91E087CF10920715EF +:10A260001092061583E0DF91CF911F910F91089511 +:10A270000F931F93CF93DF938091E0149091E1149B +:10A28000892B11F40E94DE4E0E948D75892B09F4F2 +:10A290009DC0E091DE06F091DF06099597FD96C01E +:10A2A0000E948375892B09F491C00E948D75892BBA +:10A2B00009F48CC089E10E94AD7567E57FE20E94D8 +:10A2C000AE4C892B51F489E10E94AD7561ED75E0CA +:10A2D0000E94AE4C892B09F479C082E10E94A475DA +:10A2E0009093E1148093E0140097D9F08091DC14EE +:10A2F000882361F08091DE14882341F481E080930B +:10A30000DE14E091CD05F091CE0509958EEE94E135 +:10A3100064E070E042EF5EE420E030E00E945C71B7 +:10A3200006C00E94DE4E8EEE94E10E941A7108E192 +:10A3300015E1C0E0D0E08DE00E94A475F801208115 +:10A3400030E08217930789F488E10E94AD75BE0161 +:10A3500033E0660F771F3A95E1F76C0F7D1F605F62 +:10A360007A4E0E94AE4C892B89F52196075F1F4FCC +:10A37000C031D10501F7C7E9D5E1DE01FE0139970A +:10A3800089E001900D928150E1F72997F5E1C03104 +:10A39000DF0799F78DE00E94A475888788E10E9405 +:10A3A000AD75BC01CE010E949D4C88E095E10E94F4 +:10A3B000466D88E095E10E942A6D88E095E10E9453 +:10A3C000ED6CE091E405F091E5050995DF91CF9101 +:10A3D0001F910F910895AF92BF92CF92DF92EF92AB +:10A3E000FF920F931F93CF93DF938091DC14882308 +:10A3F00029F48091DD14882309F4E4C00E948D754E +:10A40000892B09F4DFC088E167E57FE20E94B87517 +:10A4100089E10E94AD7561ED75E00E94AE4CBB24F0 +:10A42000892B11F0BB24B3948CE00E94A475892B76 +:10A4300019F487E10E94A4758BE061E070E00E944E +:10A440009975E091DC06F091DD0609956C0197FDA8 +:10A45000B9C00E948D75EC0189319105B4F40E9458 +:10A4600055758C010E9483757C010E948D7529E1D0 +:10A4700030E0281B390B0E0D1F1DC80160E070E095 +:10A48000A9010E94318BC9E1D0E00E949E76009123 +:10A49000BF051091C0050E946275AC2EFD2EBE0155 +:10A4A000F8010995C6010E942B7511E01093DF1485 +:10A4B000E091C905F091CA050995892B39F4E0911D +:10A4C000CB05F091CC050995892B19F01092DF147A +:10A4D0006FC00E94DE4EE090DC141093DC140E94EA +:10A4E0001145C0919400D09195008AE00E94A47516 +:10A4F0000091C1051091C2053BC00E941145809199 +:10A50000FE149091FF14892B51F08091940090914A +:10A510009500845091408C1B9D0B97FF33C0809118 +:10A520009400909195008A2D9F2DF8010995009730 +:10A5300021F4BB2051F411E026C08330910529F0AD +:10A5400040E0029719F441E001C040E020919400FE +:10A550003091950080919400909195000397821B13 +:10A56000930B97FDF7CF442319F010E001E00CC0E6 +:10A570008091940090919500815C97408C1B9D0B7D +:10A5800097FDBBCF10E000E00E94DE4E88E095E131 +:10A590000E94466D88E095E10E942A6D88E095E171 +:10A5A0000E94ED6CE092DC141092DF14002319F08D +:10A5B00021E030E00CC0BB2041F4112331F422E053 +:10A5C00030E005C025E030E002C020E030E0C90105 +:10A5D000DF91CF911F910F91FF90EF90DF90CF907F +:10A5E000BF90AF900895CF92DF92EF92FF920F93BA +:10A5F0001F93CF93DF937C016B01FA014115510545 +:10A6000009F449C08091E0149091E114892B69F01C +:10A61000828193810E944177C701B60141E050E0F9 +:10A6200021E030E00E94CA8436C01092FF141092DC +:10A63000FE14EA01CE010E94136F8C018A819B8176 +:10A640000E9441770115110529F082E161E070E077 +:10A650000E949975C701B601AE010E94EB51EC0151 +:10A6600083309105A1F0C701B601AE0121E030E0D1 +:10A670000E94CA84CD2B59F40115110541F081E0E7 +:10A6800090E09093FF148093FE14E801D3CF1092D2 +:10A69000FF141092FE14DF91CF911F910F91FF9044 +:10A6A000EF90DF90CF9008950F931F93CF93DF9398 +:10A6B000EC018B0140E050E00E94EB51AC01833093 +:10A6C000910531F0CE01B80121E030E00E94CA844A +:10A6D000DF91CF911F910F910895DF93CF93CDB765 +:10A6E000DEB760970FB6F894DEBF0FBECDBF1092F5 +:10A6F000A82F1092A72F0E94706785ED93E50E9406 +:10A700008F828FEF92E09A8389831C821B821E8244 +:10A710001D8218861F821A8619861C861B861E8635 +:10A720001D8680E09AE1988B8F87CE0101960E946A +:10A73000DE1F60960FB6F894DEBF0FBECDBFCF917F +:10A74000DF910895CF92DF92EF92FF921F93CF9304 +:10A75000DF93FC018081882301F57F010894E11CCF +:10A76000F11CC9EADFE2CC24CA94DC2CC458DF4FC8 +:10A770001881CC57D040113051F4CE01B7010E945E +:10A780009156FC01009719F0D48EC38E178FC055D7 +:10A79000DF4F80E3C935D80748F3DF91CF911F9190 +:10A7A000FF90EF90DF90CF9008955F926F927F922D +:10A7B0008F929F92AF92BF92CF92DF92EF92FF92D1 +:10A7C0000F931F93DF93CF93CDB7DEB760970FB68C +:10A7D000F894DEBF0FBECDBF9C016B01642E552ED9 +:10A7E0008EEF90E89A8389831C821B821E821D82D1 +:10A7F00018861F821A8619861C861B861E861D8651 +:10A80000188A1F868E010F5F1F4FC801B9010E9471 +:10A81000031E89EAE82E8FE2F82E702EA12E8824DE +:10A820008A94982C8CE790E0E80EF91ED701BC9032 +:10A83000E4E8FFEFEE0EFF1EF1E0BF1611F5C701D1 +:10A84000672D7A2D0E9491568C010097D1F0DC0182 +:10A850005F96BC925F975D966C92D7011796ED91CB +:10A86000FC9118970280F381E02D309721F0B6011A +:10A87000462D552D0995C114D10419F4F801948E73 +:10A88000838E80EB90E0E80EF91E99E5E91690E3DF +:10A89000F90640F2CD2821F4CE0101960E94181E3F +:10A8A00060960FB6F894DEBF0FBECDBFCF91DF919B +:10A8B0001F910F91FF90EF90DF90CF90BF90AF90DE +:10A8C0009F908F907F906F905F900895AF92BF920E +:10A8D000DF92EF92FF920F931F93CF93DF935C0170 +:10A8E0008B01E42EF22ED32ECB010E94431EEC01ED +:10A8F000009759F4C8016E2D4F2D5D2D20E00E9468 +:10A90000EB20EC01009761F424C0DC0153968F2DFD +:10A910009D2D9C01F90180E101900D928150E1F79C +:10A92000BCA6ABA6D5015B96ED91FC915C97EE576A +:10A93000FF4F608170E080E090E0389620813181A7 +:10A9400040E050E00E94298A6BA37CA38DA39EA3C4 +:10A950001DA6CE01DF91CF911F910F91FF90EF9037 +:10A96000DF90BF90AF900895EF92FF920F931F93E7 +:10A97000CF93DF937C018B01C1EEDCE213C08881B1 +:10A98000882379F0CE014396B70140E150E00E9460 +:10A99000098B009731F48BA59CA58017910709F4CA +:10A9A0001882AE968EE2CD3AD80749F7DF91CF9163 +:10A9B0001F910F91FF90EF9008950F931F93CF93E6 +:10A9C000DF938C01C1EEDCE28BA59CA5801791077B +:10A9D00019F4CE010E94421DAE968EE2CD3AD80700 +:10A9E00099F7DF91CF911F910F9108950F931F93C6 +:10A9F000CF93DF93C1EEDCE28E010D5D1F4F8881A6 +:10AA00008823B1F0F80180819181A281B3818230E5 +:10AA10009105A105B10520F4CE010E94421D08C098 +:10AA20000197A109B109F80180839183A283B383BF +:10AA3000AE96025D1F4FFEE2CD3ADF0701F7DF91D0 +:10AA4000CF911F910F910895803891056CF0603877 +:10AA5000710554F420E030E0681B790B60507F4FA3 +:10AA600061317105D4F017C0681779073CF420E014 +:10AA700030E0861B970B409784F40DC0861797072C +:10AA80001CF020E030E009C020E030E0681B790BCA +:10AA90006137710514F021E030E0C9010895EF92AB +:10AAA000FF920F931F93CF93DF937C018FEF6F3F44 +:10AAB000780719F420E030E02BC0D7015B96ED91C8 +:10AAC000FC915C97EA57FF4FC081D181E658F04076 +:10AAD000209719F421E030E01BC0E857FF4F208198 +:10AAE000318100E010E0CB01B9010E94488AFB01EE +:10AAF000D70150968D919C9151978C0F9D1FB90154 +:10AB00000E94488A6E177F0710F001E010E098015C +:10AB1000C901DF91CF911F910F91FF90EF900895A0 +:10AB20009093A82F8093A72F089580912530882394 +:10AB300039F0E091B22FF091B32F8689882311F478 +:10AB4000E0E0F0E0CF010895982F80912530882330 +:10AB500039F080912430891719F429EA3FE202C0C4 +:10AB600020E030E0C901089520915E0630915F0633 +:10AB70002817390719F020E030E002C022E536E05E +:10AB8000C90108950E94A455DC010097F9F01996B7 +:10AB9000ED91FC911A97A857BF4F218D328D8D9161 +:10ABA0009C911197A858B0402817390779F48289E9 +:10ABB0008F5F828BFD01E358FF4F80818F5F808321 +:10ABC000CD010E94566721E030E002C020E030E075 +:10ABD000C9010895EF92FF920F931F93CF93DF93D4 +:10ABE0007B010E94A455EC010097F1F08C01055FF8 +:10ABF0001F4F88A1882341F0C801B70140E150E010 +:10AC00000E94098B009791F08E010E5B1F4FC95A6D +:10AC1000DF4F8881882341F0C801B70140E150E04F +:10AC20000E94098B009711F000E010E0C801DF914D +:10AC3000CF911F910F91FF90EF900895CF92DF92E7 +:10AC4000EF92FF920F931F93CF93DF936B01EC0171 +:10AC50002B9629E7E22EF12CE80EF91E19C08D89FA +:10AC60008823A9F08F8D98A10E94466E8C010CC09C +:10AC7000C8010B96B60140E150E00E94098B009795 +:10AC800061F0F801008111810115110589F7E7963E +:10AC9000CE15DF0520F3C0E0D0E0CE01DF91CF91EB +:10ACA0001F910F91FF90EF90DF90CF9008950F9339 +:10ACB0001F93CF93DF938C01DC015F968D919C9164 +:10ACC00090970E94466EEC0120E030E01CC08B8D16 +:10ACD0009C8D8F5F9F4FA1F02115310511F49E01CE +:10ACE0000FC0D8015B96ED91FC915C970780F085D1 +:10ACF000E02D0480F581E02DC901BE0109959C017C +:10AD00000990D881C02D209711F72115310519F030 +:10AD1000F801308F278BC901DF91CF911F910F91DF +:10AD20000895CF92DF92EF92FF920F931F93CF93EC +:10AD3000DF936B018C01055F1F4F39E7E32EF12C88 +:10AD4000E80EF91E1AC0F80185898823A1F0878DC5 +:10AD500090A10E94466EEC010CC0CE010B96B6018C +:10AD600040E150E00E94098B009761F00990D88182 +:10AD7000C02D209791F7095C1F4F0E151F0518F382 +:10AD8000C0E0D0E0CE01DF91CF911F910F91FF90F5 +:10AD9000EF90DF90CF9008950F931F93CF93DF93A1 +:10ADA0008B01FC01878D90A10E94466EEC010CC0C6 +:10ADB000CE010B96B80140E150E00E94098B00974C +:10ADC00029F00990D881C02D209791F7CE01DF910D +:10ADD000CF911F910F910895CF93DF93982FE9EAB8 +:10ADE000FFE2DF01A458BF4F8C91882379F480EBF8 +:10ADF000EF0119928A95E9F7E558FF4F9083129277 +:10AE00001292E957F04081E08C9308C0E055FF4F63 +:10AE100080E3E935F80728F3E0E0F0E0CF01DF91C7 +:10AE2000CF9108950F931F93CF93DF93182F092F7E +:10AE3000DB01E82FF92F80E1EF0119928A95E9F7FC +:10AE400054962C9130E0295F3F4F43E0359527958C +:10AE50004A95E1F7812FA9010E94168B812F902F2F +:10AE60006AE373E20E94031EDF91CF911F910F915D +:10AE70000895CF92DF92EF92FF920F931F93DF938B +:10AE8000CF93CDB7DEB760970FB6F894DEBF0FBE95 +:10AE9000CDBF7C016B01009731F161157105A9F0FF +:10AEA000FC014489FB018489481779F4469546954D +:10AEB0004695C70150E00E94098B009731F4F701D5 +:10AEC0009589F6018589981729F18E010F5F1F4F2B +:10AED000C801B7010E941257C8010E9416200097AE +:10AEE00011F00E94A31FC114D104A1F08E010F5FC5 +:10AEF0001F4FC801B6010E941257C8010E941620B8 +:10AF0000892B41F4C80140E050E060E070E021E0AE +:10AF10000E944E2160960FB6F894DEBF0FBECDBFE3 +:10AF2000CF91DF911F910F91FF90EF90DF90CF9025 +:10AF30000895EF92FF920F931F93CF93DF937C01BD +:10AF4000EA014138510518F020E030E01FC08C01C3 +:10AF50000F5D1F4F80E1F80111928A95E9F727965E +:10AF60009E0153E0369527955A95E1F72797C8013A +:10AF7000A9010E94168BF701C5AB80E486AB80E087 +:10AF800090E0B8010E94395721E030E0C901DF911B +:10AF9000CF911F910F91FF90EF900895EF92FF9244 +:10AFA0000F931F93CF93DF93EC017B018A018F896D +:10AFB000988D2E8948175907F1F4188E1F8A8FEF44 +:10AFC0009FEF9A8F898F2223E9F0EB8DFC8DE75854 +:10AFD000FF4F0190F081E02D3097A1F08081882310 +:10AFE00019F0CF010E94D41CEB8DFC8DE758FF4F68 +:10AFF0001182108207C0222329F0CA010B96BE01DC +:10B000000E94B4548F8D98A1B8010E94946EF801EB +:10B01000F382E282F701878D90A1B8010E94CF6E82 +:10B02000DF91CF911F910F91FF90EF9008950F93B3 +:10B030001F93CF93DF93EC018B018F89988D681755 +:10B04000790711F5188E1F8A8FEF9FEF9A8F898FDE +:10B050008E898823C9F0EB8DFC8DE758FF4F019056 +:10B06000F081E02D309761F08081882319F0CF01C5 +:10B070000E94D41CEB8DFC8DE758FF4F118210828B +:10B08000C80160E00E94EA5FDF91CF911F910F91AC +:10B0900008956F927F928F929F92AF92BF92CF92BC +:10B0A000DF92EF92FF920F931F93CF93DF935C0198 +:10B0B00070E2E72EF12CE80EF91ECC24DD24662484 +:10B0C0006A94762C67E3862E912CF7018081882381 +:10B0D000F1F075826482C89CE001C99CD00DD89CB7 +:10B0E000D00D11242B96CA0DDB1D828593850E94FD +:10B0F000466E9C0108C010810181CE01BF010E94F3 +:10B100001758212F302FF90121153105A1F7089487 +:10B11000C11CD11C87E390E0E80EF91E92E0C9162D +:10B12000D10499F6C5010E945667DF91CF911F9116 +:10B130000F91FF90EF90DF90CF90BF90AF909F90D6 +:10B140008F907F906F900895EF92FF920F931F93CF +:10B150007C018B010E941758F701878D90A1B801DF +:10B160000E94946E89E496E0B8010E94CE6D1F9112 +:10B170000F91FF90EF900895EF92FF920F931F931E +:10B18000CF93DF93EC017B018F8D98A10E94466ED7 +:10B19000FC010FC010810181838D948D8E159F0558 +:10B1A00020F0CE01BF010E94A458812F902F9C0156 +:10B1B000F901309779F7DF91CF911F910F91FF90AF +:10B1C000EF900895CF93DF93EC018E89882391F05F +:10B1D0001E8ACE010E94DD548EA986FF06C0CE01D4 +:10B1E000819660E070E00E943957CE0160E070E027 +:10B1F0000E94BC581D8ADF91CF910895AF92BF92F3 +:10B20000CF92DF92EF92FF920F931F93CF93DF9332 +:10B210006C018B01B42EA52EDC015F968D919C9163 +:10B2200090970E94F26E089719F4EE24FF2433C021 +:10B2300089E496E00E94A06DFC017C01009759F121 +:10B24000EC012B968B2D9A2D9C01D90180E10D905C +:10B2500009928150E1F7D382C282D80152968D9132 +:10B260009C915397948F838F59968C915997868F81 +:10B2700080E5858FEF012496A05BBF4F87E00D909E +:10B2800009928150E1F7D6015F968D919C9190973C +:10B29000BF010E94CF6EC701DF91CF911F910F9127 +:10B2A000FF90EF90DF90CF90BF90AF9008950F93F5 +:10B2B0001F93CF93DF93EC018B01C758DF4FE881D9 +:10B2C000F981C957D040309761F08081882319F007 +:10B2D000CF010E94D41CC758DF4F19821882C9576A +:10B2E000D0400115110519F421E030E01CC0CE5703 +:10B2F000DF4F688170E080E090E0289628813981F6 +:10B3000040E050E00E94298AAB01BC01C8010E94C4 +:10B31000D82161979983888320E0892B09F421E063 +:10B3200081E0282730E0C901DF91CF911F910F9173 +:10B330000895AF92BF92CF92DF92EF92FF920F9358 +:10B340001F93CF93DF938C01EB01DC011996ED90F5 +:10B35000FC901A97F701C788D08C08571F4F218D92 +:10B36000328DD8018D919C910858104028173907CB +:10B3700009F44FC08A819B810E9457566A817B8164 +:10B38000892B89F0EB016E157F0509F443C0D801C4 +:10B390001796ED91FC9118970680F781E02DC70173 +:10B3A0000995EC0137C06E157F0599F5FBE0EF2E8E +:10B3B000F12CE00EF11EE9E7AE2EB12CA00EB11E6D +:10B3C000C0E0D0E022C0F70185898823D1F007884A +:10B3D000F08DE02D3097A9F0838D948D8F5F9F4F76 +:10B3E00081F0209711F4E7010CC0D8011796ED9178 +:10B3F000FC9118970680F781E02DCE01B7010995E1 +:10B40000EC01E7E3F0E0EE0EFF1EEA14FB04D8F2D5 +:10B4100001C0E701209709F491C0D80119968D91D8 +:10B420009C911A978C179D0729F10E94DD548EA9D3 +:10B43000D8011996ED91FC911A9786FF06C0BE01BE +:10B440006F5D7F4FCF01819607C086A986FF06C03A +:10B45000CF01819660E070E00E94395781E08E8BC9 +:10B46000D8011996ED91FC911A97168A1A96DC93D9 +:10B47000CE931997D8011796ED91FC9118970284F5 +:10B48000F385E02DC8010995D8011796ED91FC913F +:10B4900018970084F185E02D8F89988D60E070E029 +:10B4A0000995BC019A8F898F8889998968177907CE +:10B4B00018F4798B688B1AC0CE010E944F55892BE6 +:10B4C000A9F4D8011996ED91FC911A97108E178A5C +:10B4D00002581F4FF8018081882371F1C114D104F3 +:10B4E00059F1C60160E00E94EA5F26C06F89788D3D +:10B4F0006C157D0519F1655F7F4FC8010E94575992 +:10B5000002581F4FD8018C910E571040882381F0AC +:10B51000C114D10421F0C60160E00E94EA5FF80185 +:10B52000E358FF4F80818F5F8083C8010E94B5661A +:10B53000C8010E94566702C0C0E0D0E0CE01DF9192 +:10B54000CF911F910F91FF90EF90DF90CF90BF9020 +:10B55000AF900895EF92FF920F931F93CF93DF93D5 +:10B560007C018B01DB011296CD91DC9113975B96E8 +:10B570006D917C915C97CE010E944F55892B19F0FB +:10B58000C1E0D0E015C0D7011996ED91FC911A9752 +:10B590008789908D0817190729F0CE01B8010E94FC +:10B5A00017580FC0CE01B8010E941758C0E0D0E074 +:10B5B000C701B8010E949959892B29F4C7010E943B +:10B5C0004958C0E0D0E0CE01DF91CF911F910F919B +:10B5D000FF90EF900895EF92FF920F931F93CF93F8 +:10B5E000DF93C9EADFE2C458DF4F8881CC57D040EF +:10B5F000882329F18E01005E1F4FAEE8EA2EF12C60 +:10B60000EC0EFD1EF80180818823A1F082859385D0 +:10B610000E94466EFC010CC0878D882331F0178E86 +:10B62000CE01BF010E94AA5A05C00190F081E02D11 +:10B63000309791F7095C1F4F0E151F0519F7C0557C +:10B64000DF4FF0E3C935DF0770F2DF91CF911F9133 +:10B650000F91FF90EF900895EF92FF920F931F9339 +:10B66000CF93DF93EC018C01055F1F4FB9E7EB2E01 +:10B67000F12CE80EF91E09C0F8018589882319F01C +:10B68000C8010E94E258095C1F4F0E151F05A0F368 +:10B69000CE0160E070E00E945759CE0180579F4F65 +:10B6A0000E941A71CE0180569F4F0E941A7180919C +:10B6B000A72F9091A82F8C179D0721F41092A82FE7 +:10B6C0001092A72FC458DF4F1882DF91CF911F919E +:10B6D0000F91FF90EF900895FF920F931F93CF93D8 +:10B6E000DF93F82E0E94A4558C01009731F48F2D22 +:10B6F0000E94EC568C01009741F1E8012B969801CD +:10B7000027583F4F1CC08D898823C1F487E3FE0171 +:10B7100011928A95E9F7CE014D9698A38F8F1E8ED0 +:10B720001D8E0E94426E81E08D8B8FEF9FEF9A8F6E +:10B73000898F998B888B1C8F0B8F09C0E796C21756 +:10B74000D30708F3C8010E942C5BC0E0D0E0CE0113 +:10B75000DF91CF911F910F91FF9008958F929F924B +:10B76000AF92BF92CF92DF92EF92FF920F931F930F +:10B77000CF93DF935C017B01962E8F2CFB01808D94 +:10B780000E946C5B6C01009709F4C0C0FC01C38D82 +:10B79000D48DCE01B5010E941E568C01009749F44C +:10B7A000C601B701A5010E94FE585C01009761F433 +:10B7B0006FC0B5010E94CC565C01009729F0C8010A +:10B7C000B601A5010E94CE5720915E0630915F061A +:10B7D000F701808991892817390719F020E030E0B6 +:10B7E00002C022E536E08F8198852817390709F0D5 +:10B7F0004BC0C258DF4F9881CE57D040F7018589A2 +:10B80000981709F041C0CA57DF4F28813981C658BF +:10B81000D04080A191A128173907B1F5C857DF4F53 +:10B8200028813981C858D04082A193A128173907AF +:10B8300059F5C158DF4F9881CF57D040828D981766 +:10B8400019F5C058DF4F9881C058D040838D9817A4 +:10B85000D9F4CF57DF4F9881C158D040848D9817C5 +:10B8600099F4CE57DF4F9881C258D040858D9817F4 +:10B8700059F4C657DF4F28813981CA58D040868D88 +:10B88000978D2817390739F0C601B5010E94A458D1 +:10B89000F601158A3BC081E0F601858BF7018489AA +:10B8A000F601838BF7018689F601848BF70187897E +:10B8B000F601828BD601292D382DC901FC0180E1CA +:10B8C00001900D928150E1F7D6019196F701FA9619 +:10B8D00086E101900D928150E1F7F601B08EA78AC2 +:10B8E000EF81F8850084F185E02DC50160E070E00E +:10B8F0000995F601928F818F918B808BCE01B501D6 +:10B900000E94AA5AF701818DF501868FDF91CF91B0 +:10B910001F910F91FF90EF90DF90CF90BF90AF906D +:10B920009F908F900895DF92EF92FF920F931F9355 +:10B93000CF93DF93182FE62ED72E0E94EA55FC01F5 +:10B94000009719F400EFF02E12C0F288F394A38D43 +:10B95000B48D19968D919C911A97E817F90721F4E7 +:10B960001A961C921E921997CF010E94E258812FBD +:10B970006E2D7D2D0E946C5B8C01009709F461C0D7 +:10B98000FC01C38DD48DF28A81E0868B138AC25864 +:10B99000DF4F82E08883CE57D04082E596E09887DB +:10B9A0008F83108E178AD8012E2D3D2DC901FC01E1 +:10B9B00080E101900D928150E1F7C158DF4F88E09E +:10B9C00089938CE08883239684E1888322978AE098 +:10B9D0008883259680E097E08993999320E031E071 +:10B9E0003983288326978FEF888328968FEF9FEFE0 +:10B9F00099838883CA58D040F801328F218F898576 +:10BA00009A858017910739F0009729F00E94DD543C +:10BA1000E985FA85168A1A870987C358DF4F80EFB0 +:10BA20008883CD57D040EF81F8850284F385E02DDF +:10BA3000CE010995D093A82FC093A72FCE010E94C5 +:10BA40005667C801DF91CF911F910F91FF90EF9042 +:10BA5000DF9008958F929F92AF92BF92CF92DF9224 +:10BA6000EF92FF920F931F93CF93DF935C018B01B3 +:10BA7000962E812EDB0158968C910E946C5B7C0186 +:10BA8000009709F4D0C0FC01C38DD48DB801A50185 +:10BA90000E94FE586C010097A9F0D80159968C912C +:10BAA0005997F601868F20915E0630915F06509679 +:10BAB0008D919C9151972817390741F0C701B60124 +:10BAC0000E94A458C458DF4F1882ADC0015B1F4FBD +:10BAD000D8018C910F54104086FF07C0B801665CF6 +:10BAE0007F4F80E090E00E94395781E0F701868B1C +:10BAF000D80156968C915697848B54968C91549776 +:10BB0000838B57968C915797828B82E596E0988726 +:10BB10008F83C258DF4F55968C9155978883CE57A7 +:10BB2000D040FA86E986C358DF4F80EF8883299694 +:10BB300090968D919C9191978993999392968D91DE +:10BB40009C91939799838883C858D040FE01E1580F +:10BB5000FF4F5A968C915A9780835B969C915B9786 +:10BB6000C058DF4F988323968081890F888322975E +:10BB70005C968C915C9789935D968C915D97888398 +:10BB800028965E968D919C915F9799838883CA5879 +:10BB9000D040D701292D382DC901FC0180E1019049 +:10BBA0000D928150E1F7D7019196F801FA9686E15E +:10BBB00001900D928150E1F7F701D08EC78AEF8195 +:10BBC000F8850284F385E02DCE010995EF81F88593 +:10BBD0000084F185E02DC60160E070E00995D70191 +:10BBE0005A969C938E93599751969C938E93509707 +:10BBF0008091A72F9091A82F892B21F4D093A82F63 +:10BC0000C093A72FCE010E945667CE01B5010E94B6 +:10BC10005759C258DF4F8881CE57D040882319F03A +:10BC2000CE010E94B566DF91CF911F910F91FF90D9 +:10BC3000EF90DF90CF90BF90AF909F908F9008953E +:10BC40008F929F92AF92BF92CF92DF92EF92FF922C +:10BC50000F931F93CF93DF934C015B01DB0155964C +:10BC60008C915597823009F091C152968D919C919B +:10BC700053978F5F9F4F09F489C1FB01808D0E940C +:10BC8000A4558C01009729F4C401B5010E942A5DD6 +:10BC90007DC1D50158968C91B5010E94EA557C0171 +:10BCA000009729F4C401B5010E94AE5B6FC1F50194 +:10BCB000D788DC015296CC908D2D90E06C2D70E0F1 +:10BCC0000E942455892B09F45BC008571F4FF701C8 +:10BCD000218D328DD8018D919C91085810402817E4 +:10BCE000390719F4D394D28A58C0C70160E070E0D4 +:10BCF0000E94BC58F5018789D70152968C935297C0 +:10BD00005B96ED91FC915C970780F085E02D0190AA +:10BD1000F081E02DC70109950FEF1FEFF701118B9F +:10BD2000008B038CF48DE02DE358FF4F80818F5FF3 +:10BD30008083C701B501A4010E94FE58EC01009761 +:10BD400031F4D7015A961C930E9359971FC1D7010E +:10BD50005B96ED91FC915C970780F085E02D008467 +:10BD6000F185E02D60E070E00995F701928F818FF9 +:10BD7000918B808B838D948DBE010E94AA5A06C13F +:10BD80008C2D90E06D2D70E00E942455892B49F098 +:10BD9000D70156968C91882321F0C8010E945667DE +:10BDA000F5C0F5012289338908571F4FD8018D91BD +:10BDB0009C91085810402817390708F4E7C02F5FF6 +:10BDC0003F4F39F4F7018689882319F0C8010E9492 +:10BDD000566708571F4FD70159962D913C915A9796 +:10BDE000F80180819181085810402817390781F4A3 +:10BDF000D50152968D919C9153978F5F9F4F09F477 +:10BE0000C5C0F801EB57FF4F80818F5F8083BEC0B4 +:10BE1000C701B4010E94CC566C01009709F055C0CF +:10BE2000C801B4010E941E56EC01009709F041C000 +:10BE3000F701878D90A10E94F26E089789F5D501D0 +:10BE40005296CD90DC905397F701878D90A10E9478 +:10BE5000466EFC01C0E0D0E016C0D70157968D9128 +:10BE60009C915897E817F90751F0209739F0238DE6 +:10BE7000348D8B8D9C8D8217930708F4EF01CF01D1 +:10BE80000E94136FFC01309741F7209749F08B8D8A +:10BE90009C8DC816D90620F4C701BE010E94A45883 +:10BEA000C701B501A4010E94FE586C01009741F53D +:10BEB0006DC0B4010E94CC566C01009709F1CE010F +:10BEC000B701A6010E94CE571BC0F5012289338914 +:10BED000DC015B968D919C915C978217930759F4D6 +:10BEE000F7018689882361F0F801EB57FF4F8081C5 +:10BEF0008F5F808305C0D6015C963C932E935B9741 +:10BF0000D6011496F501E05BFF4F87E001900D929A +:10BF10008150E1F7C801B6010E94AA5A892BB1F1FC +:10BF2000F7018689882311F18789908DC816D90673 +:10BF3000E9F402581F4FD8018C910E571040882306 +:10BF4000A9F0D8011996ED91FC911A978789908DE7 +:10BF5000C816D90659F4F601668DD50159968C910B +:10BF600090E070E00E942455892B31F4F501818D19 +:10BF7000D6015E968C930AC0F801E358FF4F80818A +:10BF80008F5F8083C8010E94B566F0CFDF91CF91AB +:10BF90001F910F91FF90EF90DF90CF90BF90AF90E7 +:10BFA0009F908F900895E091EE06F0E0E259FC4DED +:10BFB000DC01A558BF4F8C9180831182428313828C +:10BFC000CB016BE970E043E050E024E030E00E94F8 +:10BFD0004D1608950F931F93DF93CF93CDB7DEB720 +:10BFE00060970FB6F894DEBF0FBECDBF8C01EAE4B8 +:10BFF000F9E220E030E0918980818823D9F1923004 +:10C00000C8F581818E3F19F48281803899F18CE1E5 +:10C0100090E0289FF001299FF00D389FF00D11242A +:10C02000DE011196E55BF64D80E101900D928150A5 +:10C03000E1F7F801A281B3815B96ED91FC915C97E9 +:10C040008091EE06282F30E022593C4D9091510608 +:10C050009F5F90935106E558FF4F8081F9018083DF +:10C0600080E4818312829383A9014C5F5F4FFD01BD +:10C0700080E108C02F5F3F4F7C962430310509F0E6 +:10C08000BACF35C00190DA010D92AD018150D1F7E0 +:10C0900085E0F901848B82E1858B168A80E8878BA5 +:10C0A000D9015896FE01319680E101900D928150A0 +:10C0B000E1F786E0D90198968C93989784E0999659 +:10C0C0008C9399979A961C929A979B961C929B9701 +:10C0D0009C961C929C979D966C93C8010B966BE95D +:10C0E00070E042E050E02EE230E00E944D16609693 +:10C0F0000FB6F894DEBF0FBECDBFCF91DF911F9179 +:10C100000F910895AF92BF92CF92DF92EF92FF927C +:10C110000F931F93DF93CF93CDB7DEB760970FB622 +:10C12000F894DEBF0FBECDBF8C015B01DC01199618 +:10C13000CD90DC901A978091EE06E82EFF24EEE673 +:10C14000F3E2EE0EFF1E05581F4FD8018C910B57DE +:10C150001040F7018083D60152968C9152978183CB +:10C1600059969C9159975A968C915A9782839383AA +:10C17000148253968C91882311F080E884830258AE +:10C180001F4FF80190810E571040990F990F990F8A +:10C19000D70114968C911497982B14969C9314970E +:10C1A000F60184898770982B14969C931497F80154 +:10C1B000E358FF4F808115968C93159780818F5F90 +:10C1C000808316961C92169717961C9217971896AE +:10C1D000F60180E101900D928150E1F7D8018C9138 +:10C1E000882319F428E130E047C0D8011796ED9173 +:10C1F000FC9118970284F385E02DC801099542E06F +:10C20000F701408F86E0818FD8018C91828F119643 +:10C210008C9111978695838F11962C91119730E010 +:10C220003695322F222737952795248F12968C9199 +:10C2300012978295807F13969C911397892B822B5E +:10C24000848F8C91873049F4458F15969C91159772 +:10C2500016968C91868F978F0DC0823009F00EC193 +:10C26000F701858FD80115968C911597868F1696B4 +:10C270008C91878F20E230E0F701E20FF31F84E01A +:10C280008083C9010196F701E80FF91F2EE0208392 +:10C290000196F701E80FF91F10820196F701E80FE8 +:10C2A000F91F01581F4FD8012D912083BC016F5FEA +:10C2B0007F4FF701E60FF71F2D918D012083FB01C2 +:10C2C0003196A7014E0F5F1F2C9101581040DA01E3 +:10C2D0002C933196D801AA57BF4F3C9111962C91BF +:10C2E000EE0DFF1D208331830596F801E857FF4FBF +:10C2F00030812181F701E80FF91F208331830296F5 +:10C30000D8011796ED91FC91189734852585F70192 +:10C31000E80FF91F079720833183F701E80FF91F12 +:10C320001186F701E80FF91F0E571F4FD8012C9106 +:10C3300022870B96F801389630812181F701E80FAA +:10C34000F91F20833183FC013296D601D5968C915A +:10C35000D597882309F470C0EE0DFF1D88E0808317 +:10C36000F701E60FF71F8EE18587F701E60FF71F4C +:10C37000D5968C91D5978687F701E60FF71FD6964D +:10C380008C91D6978787D1962D913D914D915C9157 +:10C39000D497F701E60FF71F852F9927AA27BB2708 +:10C3A000808BF701E60FF71FCA01AA27BB27818BF5 +:10C3B0006E5E7F4FF701E60FF71F62517040BB279B +:10C3C000A52F942F832F80832183F60121A932A9E1 +:10C3D00043A954A9F701E60FF71F852F9927AA272C +:10C3E000BB27848BF701E60FF71FCA01AA27BB27DB +:10C3F000858B6A5E7F4FF701E60FF71F665170402D +:10C40000BB27A52F942F832F80832183F701E60F6D +:10C41000F71F108E118E128E138E9B01245E3F4FDC +:10C42000D701A20FB31FF601B19640E101900D9222 +:10C430004150E1F7F9017096A114B104B9F48FEFFE +:10C4400092E09A8389831C821B821E821D82188639 +:10C450001F821A8619861C861B861E861D8680E012 +:10C460009AE1988B8F87CE01019601C0C5016BE9D7 +:10C4700070E041E050E09F010E944D1660960FB6BB +:10C48000F894DEBF0FBECDBFCF91DF911F910F910A +:10C49000FF90EF90DF90CF90BF90AF9008952F92D4 +:10C4A0003F924F925F926F927F928F929F92AF9244 +:10C4B000BF92CF92DF92EF92FF920F931F93DF9381 +:10C4C000CF93CDB7DEB7CF58D0400FB6F894DEBFCC +:10C4D0000FBECDBFE091EE06F0E0E659FC4D818144 +:10C4E000813039F0813008F481C2823009F0DAC33A +:10C4F0009CC287E5FE01F196DF011D928A95E9F75E +:10C5000088E0FE01E55BFF4F80838CE0FE01E45B89 +:10C51000FF4F80838AE0FE01E35BFF4F808380E072 +:10C5200091E0FE01ED5AFF4F9183808380E097E018 +:10C53000FE01EF5AFF4F9183808380915E069091B8 +:10C540005F06FE01EF5BFF4F918380838FEFFE015B +:10C55000E25BFF4F80838FEF9FEFFE01E15BFF4FB8 +:10C5600091838083DE011196EAE4F3E280E1019099 +:10C570000D928150E1F78E010F5F1F4FC8010E949D +:10C580003122892B91F488E10E94AD75BC01C8016C +:10C5900040E021E00E94A422009739F0499648E546 +:10C5A00052E060E070E00E9431738091EE064091AD +:10C5B0003223481B4C52E82EFF24EEE6F3E2EE0E47 +:10C5C000FF1ED7018C91FE01E75BFF4F8083119620 +:10C5D0008C911197FE01E85BFF4F808312963C918E +:10C5E000129720E013968C91139790E0282B392B0B +:10C5F000FE01ED5BFF4F3183208314962C9114973D +:10C60000822F8078FE01EB5BFF4F8083822F90E0CA +:10C610008C73907033E0959587953A95E1F7FE011C +:10C62000EA5BFF4F80832770FE01E95BFF4F2083A9 +:10C6300015968C91FE01E65BFF4F8083DE01D1965B +:10C64000F701389680E101900D928150E1F768E1A1 +:10C6500070E0E42FF0E0C457DF4FF983E883CC5853 +:10C66000D04021E330E02C0F3D1F265C3F4FC257E6 +:10C67000DF4F39832883CE58D040A6C1F701E60F9B +:10C68000F71F9081992319F401E010E005C0818122 +:10C69000082F10E00E5F1F4FA801460F571FC85705 +:10C6A000DF4F59834883C858D040C457DF4FA88113 +:10C6B000B981CC58D040A417B5070CF4F3C293301D +:10C6C00009F468C0943020F4923009F077C107C0B3 +:10C6D000943009F4C5C0983009F070C11BC1063010 +:10C6E00011050CF4DFC2D701A60FB71F12963C91BB +:10C6F0001297CF57DF4F3883C158D04013969C9183 +:10C700001397990FFD012481822F881F8827881F86 +:10C71000892BCE57DF4F8883C258D040822F829515 +:10C720008370CD57DF4F8883C358D0402F70CC57CC +:10C73000DF4F2883C458D04015968C911597CB575E +:10C74000DF4F8883C558D040373089F4FB013696D7 +:10C75000EE0DFF1D818190E03080222482299329F3 +:10C76000CA57DF4F99838883C658D04027C13230DB +:10C7700009F098C216968C911697CA57DF4F888396 +:10C78000C658D04017968C91C957DF4F8883C75839 +:10C79000D04014C1093011050CF484C2F701E60F32 +:10C7A000F71FD280AA96DFAEAA978381AB968FAF90 +:10C7B000AB976C5F7F4FF701E60FF71F6450704037 +:10C7C000238130E040E050E0808190E0A0E0B0E0E4 +:10C7D000B82FAA2799278827282B392B4A2B5B2B80 +:10C7E000818190E0A0E0B0E0DC0199278827282B28 +:10C7F000392B4A2B5B2B828190E0A0E0B0E0BA2F6E +:10C80000A92F982F8827282B392B4A2B5B2BA996E9 +:10C810002CAF3DAF4EAF5FAFA997ED2DF0E037964F +:10C8200083E0F595E7958A95E1F7CF0107968017A4 +:10C8300091070CF037C2B0E8BD1508F433C241E3EC +:10C8400050E04C0F5D1F4C5D5F4F9B01285F3F4FD9 +:10C850002E0D3F1DCA01B901AF010E94168BAEC05B +:10C860000031110509F01EC2D701A60FB71F13969C +:10C870008C9113972C968FAF2C9714968C911497BC +:10C880002D968FAF2D9715968C9115972E968FAF6D +:10C890002E976A5F7F4FF701E60FF71F818190E0C7 +:10C8A000508044248429952963969FAF8EAF639767 +:10C8B0006E5F7F4FF701E60FF71F818190E0708078 +:10C8C00066248629972965969FAF8EAF65976E5F20 +:10C8D0007F4FF701E60FF71F818190E09080882459 +:10C8E0008829992923969FAF8EAF23971D968C9107 +:10C8F0002F968FAF2F97FB013496EE0DFF1D818190 +:10C9000090E0B080AA248A299B2961969FAF8EAFC0 +:10C91000619754C00032110509F0C4C1F701E60F58 +:10C92000F71F8281C158DF4F8883CF57D040838162 +:10C93000C058DF4F8883C058D040685F7F4FF701F1 +:10C94000E60FF71F238130E040E050E0808190E067 +:10C95000A0E0B0E0B82FAA2799278827282B392BE9 +:10C960004A2B5B2B818190E0A0E0B0E0DC019927AD +:10C970008827282B392B4A2B5B2B828190E0A0E063 +:10C98000B0E0BA2FA92F982F8827282B392B4A2BB4 +:10C990005B2BEF962CAF3DAF4EAF5FAFEF97FB0138 +:10C9A0003896C257DF4FA881B981CE58D040EE0DDE +:10C9B000FF1D80E101900D928150E1F7C857DF4FD4 +:10C9C00068817981C858D040C457DF4FE881F98128 +:10C9D000CC58D0406E177F070CF450CECE01019694 +:10C9E000BE016F5C7F4F0E94205E5CC109EA1FE2BE +:10C9F00004581F4FD8018C910C571040813069F4B6 +:10CA000080915A238F3F21F4C8010E94566705C0C8 +:10CA1000C8016AE473E20E94826000551F4FB0E3D0 +:10CA200009351B0708F03EC1E3CFDE015196EAE469 +:10CA3000F3E280E101900D928150E1F78091EE06E2 +:10CA4000C82EDD24EEE6F3E2CE0EDF1EB0903223D8 +:10CA5000B81AF4EDBF0ED6018C910E94A4557C014A +:10CA6000009709F41FC1E2E8F0E0EE0EFF1ED701C7 +:10CA70004C90EEE7FFEFEE0EFF1ED6011196BC9133 +:10CA8000C557DF4FB883CB58D040F601F381C65766 +:10CA9000DF4FF883CA58D040D70119966D907C902B +:10CAA0001A97C557DF4FB881CB58D040B6FD03C0A9 +:10CAB00004E010E00DC0B6016C5F7F4FC30140E1A0 +:10CAC00050E00E94098B009709F0ECC004E110E0EF +:10CAD00055242B2C332461E2862E912C8C0E9D1E26 +:10CAE00035C0F601E00FF11F9081992321F451E048 +:10CAF000A52EB12C29C08181A82EBB2422E030E0D4 +:10CB0000A20EB31E953019F09630F1F41CC053807C +:10CB1000D401E0E11D92EA95E9F7252D30E0295F87 +:10CB20003F4F43E0359527954A95E1F70C5F1F4F3E +:10CB3000A601400F511F04501040C401BA01A901C1 +:10CB40000E94168B01C045800A0D1B1D021513059E +:10CB500044F2CE0181960E94431EFC01442009F557 +:10CB6000009709F49FC087A190A5A1A5B2A5009741 +:10CB7000A105B10509F096C08189851509F092C01B +:10CB800083A194A1A5A1B6A187A390A7A1A7B2A7AD +:10CB90008CE390E0A0E0B0E083A394A3A5A3B6A3A8 +:10CBA00081C089898F3F09F09BC027C028E830E009 +:10CBB000E20EF31ED7012D913C91E8E7FFEFEE0E58 +:10CBC000FF1ED8015B968D919C915C97B9010E94E4 +:10CBD000488AFB01D30159968D919C915A97B901CE +:10CBE0000E94488AE617F70760F48FEF9FEFF8017D +:10CBF000948F838F81E0878F55C022E0C22ED12C85 +:10CC000003C091E0C92ED12CC301BE016F5D7F4FDF +:10CC1000452D50E09E012F5E3F4F0E9466548C01CF +:10CC2000009709F43FC0642D70E080E090E02AE8AE +:10CC300030E0E20EF31ED7012D913C91E6E7FFEFC5 +:10CC4000EE0EFF1E40E050E00E94298AD801939624 +:10CC50006D937D938D939C9396979D96CC92B1E026 +:10CC6000CB16D104F9F4F3018789908D009741F038 +:10CC70000B966BE970E042E050E091010E944D1686 +:10CC8000C557DF4FF881CB58D040F7FF0BC0C70125 +:10CC9000BE016F5E7F4FC657DF4F4881CA58D040F4 +:10CCA0000E94D35F1092332310923223C157DF4F7B +:10CCB0000FB6F894DEBF0FBECDBFCF91DF911F91AD +:10CCC0000F91FF90EF90DF90CF90BF90AF909F902B +:10CCD0008F907F906F905F904F903F902F9008952E +:10CCE000C301BE016F5E7F4F0E94CC568C0100973E +:10CCF00009F05CCF86CFDF93CF93CDB7DEB76097D7 +:10CD00000FB6F894DEBF0FBECDBFE091EE06F0E0A7 +:10CD1000E259FC4D118210820097B1F48FEF92E03E +:10CD20009A8389831C821B821E821D8218861F8221 +:10CD30001A8619861C861B861E861D8680E09AE14F +:10CD4000988B8F87CE0101966BE970E040E050E050 +:10CD500022E030E00E944D1660960FB6F894DEBFD8 +:10CD60000FBECDBFCF91DF9108950F931F93CF9347 +:10CD7000DF93EC018C010E551F4FC8010E94286FF4 +:10CD8000C8010E941D6F892B71F00E940275BC01C1 +:10CD9000717060507F4FCE0180569F4F41E857E63B +:10CDA0009E010E945C71DF91CF911F910F910895B8 +:10CDB0006F927F928F929F92AF92BF92CF92DF92AB +:10CDC000EF92FF920F931F934C0123E830E0820E05 +:10CDD000931E60E870E080E090E0F401008004C001 +:10CDE000660F771F881F991F0A94D2F72DE73FEF30 +:10CDF000820E931E28EE33E040E050E00E946F8ADE +:10CE000059016A019CE8692E712C680C791CF301A8 +:10CE1000A082B182C282D382D694C794B794A794D9 +:10CE20000E940275A0E0B0E0BC01CD01A601950111 +:10CE30000E94298A2FEF3FEF40E050E00E946F8A66 +:10CE400079018A01EA0CFB1C0C1D1D1DF301808178 +:10CE50009181A281B3818E199F09A00BB10B8083B0 +:10CE60009183A283B38324E830E0820E931E81E095 +:10CE7000F40181934F0110822BE73FEF820E931E46 +:10CE8000C40180579F4FB7014CEA57E694010E94B6 +:10CE90005C711F910F91FF90EF90DF90CF90BF904A +:10CEA000AF909F908F907F906F900895CF93DF9376 +:10CEB000FC01EC01CD57DF4FDC01A058BF4F98813A +:10CEC0008C91891750F4EB57FF4F1082E558F040D2 +:10CED0008C918883CF010E94D866DF91CF9108950D +:10CEE00087E390E09093C3178093C21782EB97E19A +:10CEF00060E870E044E058E620E030E00E945C71B9 +:10CF00000895CF93DF93EC018091C417882381F4B7 +:10CF100081E00E94DE1C892B59F4CE0180569F4F80 +:10CF200060E870E041E857E69E010E945C7111C024 +:10CF3000E985FA858789908D009731F0FE01EE57DB +:10CF4000FF4F60810E94EA5FCE0180569F4F0E9492 +:10CF50001A71DF91CF910895CF93DF93EC01809107 +:10CF6000C417882379F481E00E94DE1C892B21F00C +:10CF700081E08093C41706C0CE0180579F4F60E8C0 +:10CF800070E022C0CC57DF4F8881C458D04088233E +:10CF900009F1FE01EB57FF4FCF57DF4F908188819A +:10CFA000C158D040981728F4CE0160E070E00E948C +:10CFB0008260CC57DF4F1882289668817981CC58DF +:10CFC000D040CE0180579F4F4CEA57E69E010E9409 +:10CFD0005C7117C0FE01ED57FF4F5081852F90E027 +:10CFE000C158DF4F49912881C058D04030E0240F0C +:10CFF000311D8217930714F45F5F5083CE010E94A6 +:10D00000D866DF91CF9108950E94F6540E94EB5AA2 +:10D010008091C2179091C31701969093C317809384 +:10D02000C2170E949555892B71F48091C217909177 +:10D03000C317CC9740F01092C3171092C21780E02C +:10D0400090E00E947B6682EB97E10E9493710895C5 +:10D0500008950895DC01AB01009731F46115710565 +:10D0600059F160E075E022C05D962C915D9730E04B +:10D070001296ED91FC911397038CF48DE02DE857F7 +:10D08000FF4F80819181289FB001299F700D389FAB +:10D09000700D112484E0769567958A95E1F7411526 +:10D0A000510521F45B964D915C915C97CA01809586 +:10D0B00090958617970718F42FEF3FEF03C09A015A +:10D0C000260F371FC9010895FC01DB019389539690 +:10D0D0008C915397981719F0992399F013C094895C +:10D0E00054968C915497981719F0891750F40AC0E8 +:10D0F000218D328D59968D919C915A972817390719 +:10D1000008F0FD01CF010895EF92FF920F931F9356 +:10D11000CF93DF938C01EB01DC011296ED90FC9034 +:10D120001397009741F119964D915C911A9741150B +:10D13000510589F4D7015B96ED91FC915C97E85716 +:10D14000FF4FDC015B962D913C915C978081918132 +:10D150008217930780F0F801858D90E0A0E0B0E0A1 +:10D1600033E0880F991FAA1FBB1F3A95D1F7BA0168 +:10D17000680F791F02C060E072E3209709F14985CA +:10D180005A854115510571F4EA81FB81038CF48DB8 +:10D19000E02DE857FF4F2B8D3C8D808191818217C8 +:10D1A000930770F08D8D90E0A0E0B0E023E0880F51 +:10D1B000991FAA1FBB1F2A95D1F7480F591F02C0FC +:10D1C00040E052E3D70157962D913C9158970217B2 +:10D1D000130719F0C217D30761F4CA01805C9F4F8F +:10D1E0006817790730F4CA01805490408617970772 +:10D1F00030F06417750710F09E0101C09801C90155 +:10D20000DF91CF911F910F91FF90EF900895CF93F1 +:10D21000DF93EC0188E089831A821B82E985FA8515 +:10D220008689882309F443C0C857DF4F218D328D8A +:10D2300088819981C858D0402817390719F420E00F +:10D2400030E02FC0A789B08D109749F119964D9104 +:10D250005C911A974115510591F41296ED91FC914C +:10D260001397038CF48DE02DE857FF4F5B962D91BB +:10D270003C915C97808191818217930780F05D9645 +:10D280008C9190E0A0E0B0E063E0880F991FAA1FA6 +:10D29000BB1F6A95D1F79A01280F391F02C020E001 +:10D2A00032E387E0888382E08C833E832D83DF91A5 +:10D2B000CF9108951F931091EE061092EE06809183 +:10D2C00048238823E9F480916C238336C9F4809144 +:10D2D0006E238078805880936E2380916F230E9404 +:10D2E000A455DC011996ED91FC911A97818D928DD0 +:10D2F00090937123809370231093EE0688E003C00F +:10D300001093EE0680E01F910895CF93DF93EC0118 +:10D310008091EE06FE01E80FF11DE659FC4D81817A +:10D320008430A9F5828185FF03C022E030E034C05B +:10D3300083810E94A455FC01009749F1A185B28523 +:10D3400056968C915697882311F18091EE06FE0136 +:10D35000E80FF11DE659FC4D528140E024813581F2 +:10D3600059968D919C915A972817390708F441E0F6 +:10D3700057FF03C0442319F00DC0442359F056FF52 +:10D3800003C023E030E008C05064528303C021E0B2 +:10D3900030E002C020E030E0C901DF91CF91089574 +:10D3A0001092EE0680914823882349F580916A23E4 +:10D3B0008093482380914723409132235091332317 +:10D3C0004850504090916B23491B5109509333238F +:10D3D000409332238850282F291B885F20934723AE +:10D3E000821728F480914623815080934623485227 +:10D3F00050408AE693E262E773E20E941F8B089531 +:10D400001F93BC011091EE061092EE068091482306 +:10D41000882309F05BC080916B23882309F050C0FA +:10D4200080916C23833609F051C0809170239091D4 +:10D430007123892B09F04AC0E091A72FF091A82F02 +:10D44000309709F440C0E458FF4F8081EC57F0401A +:10D450008823C9F10184F285E02D8689882399F11A +:10D46000CF010E94CC56DC01009749F01296ED9155 +:10D47000FC9113978789908DA817B90739F0E0912F +:10D48000EE06F0E0E459FC4D80E88283A091EE06C0 +:10D49000B0E0A459BC4DE091A72FF091A82FE5581A +:10D4A000FF4F8081EB57F04013968C9313970184C4 +:10D4B000F285E02D818D928D15969C938E93149715 +:10D4C0001093EE0603C021E030E002C020E030E01F +:10D4D000C9011F9108951F931091EE061092EE0658 +:10D4E00062E473E2809148238823F1F480916B23F6 +:10D4F000882309F081C080916F230E94A455FC010C +:10D50000009709F47BC0E458FF4F8081EC57F0404E +:10D51000882309F473C0A185B28556968C915697DD +:10D52000882309F05AC06AC04091322350913323B6 +:10D53000CA0108968150954008F05EC0485250409C +:10D54000CB01C096685D7F4F0E941F8B8091EE06D5 +:10D5500090E086599C4DFC0188E0DF011D928A9580 +:10D56000E9F7E091EE06F0E0EE5BFC4D9F01285DEF +:10D570003F4F8091482380A710924823D9011196EC +:10D580001C92DF019A9683E682A784E011968C9321 +:10D59000119712961C92129713961C921397159638 +:10D5A0001C921E92149780913223909133230896F7 +:10D5B000909333238093322390914723F901818103 +:10D5C000890F885F80934723891728F48091462329 +:10D5D0008F5F80934623185F0FC08091EE06E82F7F +:10D5E000F0E0E459FC4D8081833631F459968D91F9 +:10D5F0009C915A97958384831093EE061F9108950A +:10D600008091D1178F5F8093D117815008951F9318 +:10D61000CF93DF93EC01162F888580FF1EC08C818D +:10D620009D81892BD1F0D093C817C093C71782E092 +:10D630008887EC81FD81CE0106960995992787FDA3 +:10D6400090950297029710F0133829F4CE01BE018D +:10D650000E94316B02C081E08887DF91CF911F91DA +:10D660000895CF92DF92EF92FF920F931F93CF9383 +:10D67000DF93EC017B01C090C717D090C817E091F1 +:10D68000C517F091C61703C00190F081E02DEC178B +:10D69000FD0719F03097C1F74CC0209709F449C035 +:10D6A0008885882339F118860091C5171091C6170F +:10D6B0000BC0C017D10729F0C80167E8AE010E946E +:10D6C000076BF801008111810115110591F78C811B +:10D6D0009D81892B79F0CE15DF0561F0D093C817B5 +:10D6E000C093C717EC81FD81CE01069663E840E048 +:10D6F00050E00995E091C517F091C617CE17DF07E6 +:10D7000091F4888199819093C6178093C5170DC0B5 +:10D71000808191818C179D0729F48881998191835B +:10D72000808303C0FC01309799F7D092C817C0924C +:10D73000C717DF91CF911F910F91FF90EF90DF906E +:10D74000CF9008956091C7177091C8170E94316BF0 +:10D7500008958AE88093D1171092D3171092D217A8 +:10D760001092C6171092C5171092C8171092C717BB +:10D7700008951F93CF93DF9310927418C091C5172B +:10D78000D091C61711E00EC08985882341F0188713 +:10D790001986CE0162E840E050E00E94076B0990D4 +:10D7A000D881C02D209781F7DF91CF911F910895E7 +:10D7B00080917418882311F00E94B96B2091D217C0 +:10D7C000222309F455C08091D31790E0FC01EE0F9D +:10D7D000FF1FEE0FFF1FE80FF91FEC52F84E60819C +:10D7E0006093D017418152815093CF174093CE1749 +:10D7F0000380F481E02DF093CD17E093CC170196D0 +:10D800008F7190708093D31721502093D217309747 +:10D8100041F58091C5179091C61718C08091741872 +:10D82000882311F00E94B96B4091CE175091CF1709 +:10D830008091CA179091CB176091D0170E94076B07 +:10D84000E091CA17F091CB17808191819093CB170B +:10D850008093CA178091CA179091CB17892BF1F644 +:10D8600007C0613811F481E08087CF010E94076B07 +:10D87000809174182091D21730E0280F311DC90112 +:10D880000895809174182091D21730E0280F311D2F +:10D89000C9010895DC012091D217203219F421E04A +:10D8A00030E01AC08091D317820F8F718093C9170F +:10D8B00090E0FC01EE0FFF1FEE0FFF1FE80FF91FB6 +:10D8C000EC52F84E608352834183B483A3832F5F6D +:10D8D0002093D21720E030E0C90108950F931F93E1 +:10D8E0000091C7171091C8170E94076B1093C817B3 +:10D8F0000093C7171F910F910895CF93DF93DC0119 +:10D90000EB016091C5174091C617862F942F9C019B +:10D91000F90103C00190F081E02DEA17FB07B9F08F +:10D920003097C1F76C9311964C931197B093C6172B +:10D93000A093C51781E018968C93189717961C92A0 +:10D940001E921697CD0161E8AE010E946E6CDF91C8 +:10D95000CF910895FC01009741F08085815082307D +:10D9600020F481E0818780937418089520E030E0EE +:10D97000FC018085882311F021E030E0C901089581 +:10D98000CF93DF93EC0102C00E94A26B8991999121 +:10D990000097D1F7DF91CF910895CF93DF93EC01FA +:10D9A00004C060E070E00E947D6C899199910097BD +:10D9B000C1F7DF91CF91089510925D3010925E30E3 +:10D9C00010925F30109260301092593010925A309D +:10D9D00010925B3010925C300895FC011482158225 +:10D9E0001682178210821182128213820895CF92BA +:10D9F000DF92EF92FF920F931F936C01FC01E08086 +:10DA0000F1800281138187E00E94A475A0E0B0E05C +:10DA10008E0D9F1DA01FB11FF60180839183A283ED +:10DA2000B383E480F5800681178188E00E94A475A5 +:10DA3000A0E0B0E08E0D9F1DA01FB11FF6018483F2 +:10DA40009583A683B7831F910F91FF90EF90DF908E +:10DA5000CF9008950F931F938C0187E00E94A475C7 +:10DA6000F80160817181680F791F87E00E949975C4 +:10DA700088E00E94A475F80164817581680F791FA0 +:10DA800088E00E9499751F910F910895CF92DF92BF +:10DA9000EF92FF920F931F936C010E943D7287E0FB +:10DAA00090E00E94E071F601208131814281538132 +:10DAB000E0907918F0907A1800917B1810917C18FA +:10DAC0002E193F09400B510B260F371F481F591FB6 +:10DAD00020833183428353836093791870937A183B +:10DAE00080937B1890937C1886E090E00E94E07110 +:10DAF000F6012481358146815781E0907518F090B8 +:10DB0000761800917718109178182E193F09400B5C +:10DB1000510B260F371F481F591F24833583468317 +:10DB20005783609375187093761880937718909345 +:10DB300078181F910F91FF90EF90DF90CF9008958C +:10DB4000DC0112964D915C91139720E030E01FC0EC +:10DB50001496ED91FC911597E20FF31F80818823B5 +:10DB6000A1F481E080838D919C911197AC01249F59 +:10DB7000C001259F900D349F900D112416962D9174 +:10DB80003C911797280F391F07C02F5F3F4F24176D +:10DB90003507F0F220E030E0C9010895DC01169667 +:10DBA0002D913C9117971296ED91FC91139740E0BF +:10DBB00050E01DC02617370799F41496ED91FC919B +:10DBC0001597E40FF51F8081181614F48150808397 +:10DBD0001496ED91FC911597E40FF51F808108953F +:10DBE0008D919C911197280F391F4F5F5F4F4E17F2 +:10DBF0005F0700F38FEF0895FC01AB016681778129 +:10DC00004617570718F420E030E017C0A0E08081E5 +:10DC1000918122813381FC01E29FC001E39F900D3D +:10DC2000F29F900D1124680F791F4617570708F0CF +:10DC3000A1E081E0A8272A2F30E0C90108950F93C1 +:10DC40001F938C01FC01428153818481958160E0A6 +:10DC500070E00E94318BF8012281338180819181B3 +:10DC6000A901489F9001499F300D589F300D112404 +:10DC70008681978160E070E0A9010E94318B1F913D +:10DC80000F910895FC01118210820895FC0180819A +:10DC900091810895FC01DB018D919C91918380839A +:10DCA0000895FC010190F081E02D309731F08081E2 +:10DCB0009181009721F0FC01FACFE0E0F0E0CF0184 +:10DCC0000895CF93DF93EC01E881F981309719F43F +:10DCD00020E030E019C0DF0180819181892B21F49F +:10DCE000198218829F0110C02C9111963C911197B6 +:10DCF000AD01C901DC018D919C911197892BA1F790 +:10DD0000FA01118210829D01C901DF91CF9108951E +:10DD1000DC01ED91FC911197309721F08081918188 +:10DD20008D939C93CF010895CF93DF93EC012881CD +:10DD3000398121153105D1F0F901A0E0B0E014C01E +:10DD4000E617F70761F480819181109719F49983A0 +:10DD5000888302C08D939C931182108207C0DF01DB +:10DD6000808191819C01F901309751F7DF91CF912A +:10DD70000895EF92FF920F931F937C018B010E94F5 +:10DD8000946EF70180819181F80191838083F7017E +:10DD9000118300831F910F91FF90EF9008950F93CF +:10DDA0001F93CF93DF93EC01162F072F0E94946EE1 +:10DDB000A12FB02F11961C921E92888199810097F5 +:10DDC00039F0FC01808191810097D9F7309719F4DF +:10DDD0001883098302C0B183A083DF91CF911F9183 +:10DDE0000F910895FC010190F081E02D20E030E0DA +:10DDF00005C02F5F3F4F0190F081E02D3097C9F7AC +:10DE0000C9010895DB016115710521F4BA010E9471 +:10DE1000B96E0895FA018D919C9111979183808339 +:10DE20004D935C930895FC01009719F420E030E0D5 +:10DE300002C020813181C901089520E030E0FC0159 +:10DE400086819781892B11F421E030E0C901089582 +:10DE5000FC012281338180819181280F391FC90102 +:10DE60000895FC0180819181089520917D18309161 +:10DE70007E182115310511F021E030E0C901089527 +:10DE800080917D1890917E18892B19F420E030E064 +:10DE900004C020917F1830918018C90108958091A5 +:10DEA0007D1890917E18892B29F410928018109279 +:10DEB0007F1808950E94D842BC01E0917D18F0912E +:10DEC0007E184281538180819181480F591F461BE2 +:10DED000570B0CC02281338180819181280F391F1B +:10DEE000261B370B2417350708F4A9010480F58198 +:10DEF000E02D309779F7460F571F509380184093C5 +:10DF00007F180895CF93DF93EC01E0917D18F09195 +:10DF10007E188E179F0741F48C819D8190937E1807 +:10DF200080937D1814C0FC01309731F08481958175 +:10DF30008C179D07C1F707C01D821C821F821E829D +:10DF4000DF91CF9108958C819D81958384830E9478 +:10DF50004F6FF2CFFC0180819181860F971F9183D3 +:10DF600080830E944F6F08958CE696E00E94AA6C11 +:10DF70000895EF92FF920F931F93CF93DF937C014D +:10DF8000FC0180819181009729F08935910509F084 +:10DF90006DC00BC010927E1810927D1889E590E03C +:10DFA000F7019183808381E065C0673849F59A0164 +:10DFB000E0917D18F0917E1803C00480F581E02D7A +:10DFC000309741F38681978182179307B1F3E093ED +:10DFD0007D18F0937E180FC016968D919C9117971F +:10DFE0008217930711F0FD0106C014968D919C9144 +:10DFF000159795838483A481B581109769F7CECF57 +:10E00000623861F6C0917D18D0917E1800E010E072 +:10E010002AC0CE010E940286892B01F18E819F8148 +:10E0200068E8AE010E944A6C892BA1F41F821E820F +:10E030008C819D810115110521F0F8019583848360 +:10E0400004C090937E1880937D181D821C820E94CC +:10E050004F6FD8CF8CE696E00E94AA6C8E018C811F +:10E060009D819C01E9012097A1F698CFF7011182CB +:10E07000108283E0DF91CF911F910F91FF90EF907D +:10E080000895CF93DF93EC018CE696E00E94AA6C92 +:10E090008E819F81892B69F0E0917D18F0917E1827 +:10E0A00006C0EC17FD07A9F00480F581E02D30973C +:10E0B000C1F78091C7179091C8179F838E83809175 +:10E0C0007D1890917E189D838C83D0937E18C09389 +:10E0D0007D180E944F6FDF91CF9108950F931F938A +:10E0E0008C010E941A86C8010E9441701F910F91F5 +:10E0F00008950F931F938C010E94E385C8010E942D +:10E1000041701F910F9108950F931F938C010E94EE +:10E110002586C8010E9441701F910F910895EF92CA +:10E12000FF920F931F93CF93DF937C018A01FC0131 +:10E1300080819181009729F08A34910509F04BC0C4 +:10E140001AC081E898E10E94466EEC0109C06C811A +:10E150007D81CE0102960E9484700990D881C02DE5 +:10E160002097A9F781E0809383188AE490E0F70173 +:10E170009183808302C0683811F081E030C081E86B +:10E1800098E10E94466EEC0123C0CE01029608176A +:10E190001907D9F481E898E1BE010E94946E0091BC +:10E1A000C7171091C8178A859B859093C8178093CD +:10E1B000C717EC85FD85309719F08E859F850995E9 +:10E1C0001093C8170093C717D0CF0990D881C02DDE +:10E1D0002097D9F6CACFF7011182108283E0DF9130 +:10E1E000CF911F910F91FF90EF900895CF93DF9300 +:10E1F000EC0180918318882331F0CE0102960E94B1 +:10E200001D6F9C0113C081E898E10E94466EFC01DD +:10E2100009C0EC17FD0719F420E030E007C00190B9 +:10E22000F081E02D3097A9F721E030E0C901DF91BE +:10E23000CF910895CF93DF93EC01809183188823C9 +:10E2400029F0CE0102960E94826F04C01F821E82B6 +:10E250001986188681E898E1BE010E94946EDF91CC +:10E26000CF9108950F931F93CF93DF93EC0180918B +:10E270008318882391F00091C7171091C81785E87B +:10E2800096E09093C8178093C717CE0102960E941C +:10E290006E701093C8170093C71781E898E1BE010C +:10E2A0000E94946E81E898E1BE010E94CF6EDF91DA +:10E2B000CF911F910F9108950F931F93CF93DF93E9 +:10E2C000EC018091C7179091C8179B878A875D875B +:10E2D0004C873F872E8780918318882399F000917F +:10E2E000C7171091C81785E896E09093C8178093D8 +:10E2F000C717CE0102960E9484701093C81700932E +:10E30000C71702C07D836C8381E898E1BE010E943B +:10E31000946E81E898E1BE010E94CF6EDF91CF91AB +:10E320001F910F9108950F931F93CF93DF93EC01EB +:10E3300080918318882391F00091C7171091C81716 +:10E3400085E896E09093C8178093C717CE01029690 +:10E350000E9479701093C8170093C71781E898E15D +:10E36000BE010E94946E81E898E1BE010E94CF6ECA +:10E37000DF91CF911F910F9108951092831881E83A +:10E3800098E10E94426E85E896E060E070E00E94AD +:10E390007D6C0895CF93DF93EFE9F0E3C1E6D0E31E +:10E3A000A3E9B0E31192119219921992199219925C +:10E3B0001D9280E3E73BF807A9F7DF91CF9108951D +:10E3C000CF92DF92EF92FF920F931F93CF93DF9341 +:10E3D000EC01FC01ED56FF4C8081882349F100914E +:10E3E000940010919500BE01660F771F660F771F8E +:10E3F0006F597F4CFE01EE0FFF1FE156FF4C8081ED +:10E4000091819801281B390B6901EE24FF24DB015F +:10E410002D913D914D915C911397C20ED31EE41E38 +:10E42000F51ECD92DD92ED92FC921397118300833D +:10E43000FE01EE0FFF1FEE0FFF1FEF59FF4C608133 +:10E44000718182819381DF91CF911F910F91FF9014 +:10E45000EF90DF90CF90089560E070E080E090E072 +:10E460000895FC01EE0FFF1FEE0FFF1FEF59FF4C49 +:10E47000408351836283738308950F931F93CF93D7 +:10E48000DF9303E910E3C1E6D0E3EFE9F0E3D8015D +:10E490008C918823C9F060919400709195008081DF +:10E4A00091819B01281B390B40E050E088819981C4 +:10E4B000AA81BB81820F931FA41FB51F88839983F4 +:10E4C000AA83BB83718360830F5F1F4F24963296AC +:10E4D000B0E30F391B07D9F6DF91CF911F910F9150 +:10E4E0000895A0918418B09185181097C1F01092EA +:10E4F00085181092841814966D917C911597129638 +:10E50000ED91FC911397CD010995E0918418F0915C +:10E510008518309721F0808191810E946A83089547 +:10E520000F931F93FC018091841890918518338379 +:10E5300022831583048371836083F0938518E093AD +:10E540008418892B19F4CB010E946A8380E090E043 +:10E550001F910F9108950E9450830895FC018081BE +:10E560009181A281B3812481358146815781820FB7 +:10E57000931FA41FB51F80839183A283B383089543 +:10E580000F931F938C010E94E5429B01AC01F8019F +:10E5900080819181A281B381281B390B4A0B5B0BCF +:10E5A000B901CA011F910F910895AF92BF92CF9206 +:10E5B000DF92EF92FF920F931F93FC01A080B18036 +:10E5C000C280D380E480F580068117810E94E542F5 +:10E5D000EA0CFB1C0C1D1D1DE61AF70A080B190B93 +:10E5E000B701C8011F910F91FF90EF90DF90CF907E +:10E5F000BF90AF900895EF92FF920F931F938C01FD +:10E600000E94E542E0E0F0E0D80114962D913D91A2 +:10E610004D915C911797ED90FD900D911C91621BAF +:10E62000730B840B950B6E197F09800B910B6F5F39 +:10E630007F4F8F4F9F4710F4E1E0F0E0CF011F9133 +:10E640000F91FF90EF9008950F931F938C010E94FC +:10E65000E542F80160837183828393831F910F9158 +:10E6600008950F931F938C01FC01448355836683A7 +:10E6700077830E94E542F8016083718382839383EC +:10E680001F910F9108950F931F931091572F009191 +:10E69000582F0E94E5422DB73EB7225530400FB6A5 +:10E6A000F8943EBF0FBE2DBFEDB7FEB7319629E5FA +:10E6B00033E0ADB7BEB712963C932E9311971283F9 +:10E6C0001382048315826683778380879187809184 +:10E6D0005F2F9091602FA091612FB091622F828760 +:10E6E0009387A487B5878091632F9091642FA09121 +:10E6F000652FB091662F86879787A08BB18B80910D +:10E70000672F9091682FA091692FB0916A2F828B0B +:10E71000938BA48BB58B80916B2F90916C2FA091D4 +:10E720006D2FB0916E2F868B978BA08FB18F8091BC +:10E730006F2F9091702FA091712FB091722F828FB7 +:10E74000938FA48FB58F8091732F9091742FA09188 +:10E75000752FB091762F868F978FA0A3B1A380914C +:10E76000772F9091782FA091792FB0917A2F82A353 +:10E7700093A3A4A3B5A380917B2F90917C2FA0910C +:10E780007D2FB0917E2F86A397A3A0A7B1A78091DC +:10E790007F2F9091802FA091812FB091822F82A7FF +:10E7A00093A7A4A7B5A78091832F9091842FA091C0 +:10E7B000852FB091862F86A797A7A0ABB1AB80918C +:10E7C000872F9091882FA091892FB0918A2F82ABAB +:10E7D00093ABA4ABB5AB80918B2F90918C2FA09174 +:10E7E0008D2FB0918E2F86AB97ABA0AFB1AF80913C +:10E7F0008F2F9091902FA091912FB091922F82AF57 +:10E8000093AFA4AFB5AFEDB7FEB7FF968091932F4E +:10E810009091942FA091952FB091962F8083918302 +:10E82000A283B383EDB7FEB7ED5BFF4F8091972FC7 +:10E830009091982FA091992FB0919A2F80839183D6 +:10E84000A283B383EDB7FEB7E95BFF4F80919B2FA7 +:10E8500090919C2FA0919D2FB0919E2F80839183AA +:10E86000A283B383EDB7FEB7E55BFF4F80919F2F87 +:10E870009091A02FA091A12FB091A22F808391837E +:10E88000A283B383EDB7FEB7E15BFF4F8091A32F67 +:10E890009091A42FA091A52FB091A62F8083918352 +:10E8A000A283B3830E948D8B1091572F0091582F14 +:10E8B0002DB73EB72E5A3F4F0FB6F8943EBF0FBE4E +:10E8C0002DBF0E94E542ADB7BEB7D2970FB6F89400 +:10E8D000BEBF0FBEADBFEDB7FEB731962AEE32E038 +:10E8E00012963C932E931197128313820483158200 +:10E8F00066837783808791878091613090916230C1 +:10E90000A0916330B091643082879387A487B587E4 +:10E910008091653090916630A0916730B0916830F9 +:10E9200086879787A08BB18B8091693090916A30F0 +:10E93000A0916B30B0916C30828B938BA48BB58B94 +:10E9400080916D3090916E30A0916F30B0917030A9 +:10E95000868B978BA08FB18F8091713090917230A0 +:10E96000A0917330B0917430828F938FA48FB58F44 +:10E970008091753090917630A0917730B091783059 +:10E98000868F978FA0A3B1A38091793090917A3030 +:10E99000A0917B30B0917C3082A393A3A4A3B5A3B4 +:10E9A00080917D3090917E30A0917F30B091803009 +:10E9B00086A397A3A0A7B1A78091893090918A30B0 +:10E9C000A0918B30B0918C3082A793A7A4A7B5A754 +:10E9D00080918D3090918E30A0918F30B091903099 +:10E9E00086A797A7A0ABB1AB0E948D8B2DB73EB782 +:10E9F0002E5C3F4F0FB6F8943EBF0FBE2DBF1F9148 +:10EA00000F9108950E94EC8A08950E94F18A08955A +:10EA100080E380938A180895AC0130918A18832F7F +:10EA200090E0841795079CF020E3231B80918618C3 +:10EA300090918718820F911D840F951F8138910541 +:10EA400030F4341B30938A1821E030E002C020E01B +:10EA500030E0C901089590918A18980F90938A1810 +:10EA6000089540918618509187189C0148175907BE +:10EA700018F420E030E012C0809188189091891835 +:10EA8000820F931F9093891880938818421B530B11 +:10EA9000509387184093861821E030E0C90108950B +:10EAA0009093871880938618089580918818909184 +:10EAB0008918C09620918F0630919006280F391F33 +:10EAC000C901089580918A1820918F06309190068F +:10EAD000280F311DC901089540E050E080918F0654 +:10EAE00090919006C09620918B1830918C18281721 +:10EAF000390711F041E050E0CA01089580918B1868 +:10EB000090918C1808958091861890918718089597 +:10EB100090918A1880E3891B089580E390918A1868 +:10EB2000891B2091861830918718280F311DC90143 +:10EB30000895E82FF0E0EE0FFF1FE952FF4C7183BC +:10EB4000608381E090E00895E82FF0E0EE0FFF1F72 +:10EB5000E952FF4C808191810895282F30E043E0F5 +:10EB6000220F331F4A95E1F72950304DC90108950E +:10EB700090E053E0880F991F5A95E1F78950904D26 +:10EB80000E949D4C81E090E00895E7EDF0E3119242 +:10EB9000119281E3E730F807D1F787EB90E361ED5D +:10EBA00075E00E949D4C8FEB90E361ED75E00E9453 +:10EBB0009D4C87EC90E361ED75E00E949D4C8FECDD +:10EBC00090E361ED75E00E949D4C089510928918C4 +:10EBD00010928818109287181092861880E38093FC +:10EBE0008A1880918F0690919006C09690938C1809 +:10EBF00080938B180E94C5750895EF92FF920F9332 +:10EC00001F938C017B010E94E67510938C18009372 +:10EC10008B18F0928718E09286181F910F91FF9041 +:10EC2000EF900895A7EDB0E3FC0180E301900D9211 +:10EC30008150E1F7A7EBB0E3FB0180E201900D9278 +:10EC40008150E1F70895DC01E7EDF0E380E3019006 +:10EC50000D928150E1F7DB01E7EBF0E380E20190F8 +:10EC60000D928150E1F708950F931F93CF93DF9397 +:10EC7000EC0180918A18482F50E08091861890917D +:10EC80008718C096841B950B8138910518F020E0F9 +:10EC900030E032C000E310E0F801E41BF50B2091F6 +:10ECA0008F0630919006240F351FCE01B901AF01B8 +:10ECB0000E94168B80918A18081B11090C0F1D1FCA +:10ECC00020918B1830918C18809188189091891818 +:10ECD000280F391F4091861850918718C801B90133 +:10ECE0000E94168B2091861830918718205D3F4F27 +:10ECF00080918A18281B3109C901DF91CF911F919A +:10ED00000F9108950F931F9340918A1850E000E3EC +:10ED100010E0F801E41BF50B20918F06309190066E +:10ED2000240F351FB901AF010E94168B80918A18FC +:10ED3000081B1109C8011F910F910895E0918B18CC +:10ED4000F0918C1860918F06709190069B01205D68 +:10ED50003F4FE217F30749F040918618509187180A +:10ED6000C901BF010E94168B089580918818909167 +:10ED700089180097D9F04091861850918718405D06 +:10ED80005F4FDC01D096A60FB71F20E330E007C02D +:10ED9000FB01E20FF31F8D9180832F5F3F4F2417FC +:10EDA0003507B4F310928918109288180895EF92DD +:10EDB000FF920F931F93F82EE92E162F072F0E9414 +:10EDC000E675212F302FC9018C018138910510F093 +:10EDD00000E810E080918B1890918C186F2D7E2D9B +:10EDE000A8010E94168B1093871800938618C801FB +:10EDF0001F910F91FF90EF900895FC010190F08119 +:10EE0000E02D808191810895FC0170E083E0660F20 +:10EE1000771F8A95E1F76E50704020813181260F6F +:10EE2000371FC9010895FC010190F081E02D70E0C9 +:10EE30006F5B7F4F660F771FE60FF71F8081918111 +:10EE400008950895CF93DF93EC0181E996E0BE0128 +:10EE50000E94FC6D892B29F0688179816E5F7F4F5C +:10EE60000CC089E996E0BE010E94FC6D892B19F463 +:10EE700060E070E002C06A817B81CB01DF91CF91BD +:10EE800008950F931F93CF93DF93EC0181E996E0F0 +:10EE9000BE010E94FC6D892B91F008811981F80157 +:10EEA00060817181C80102960E94D776C8018E5791 +:10EEB0009F4F0E541F4FB8010E9412761DC089E962 +:10EEC00096E0BE010E94FC6D892BB1F00E94E675B0 +:10EED000688179818A819B810E94D7768CA990E094 +:10EEE0000E940C750E9462754CA99E012C5F3F4FD9 +:10EEF000B90150E00E94168BDF91CF911F910F91C5 +:10EF00000895CF93DF93EC0181E996E0BE010E9462 +:10EF1000FC6D892B49F06881798181EA96E00E9435 +:10EF2000CE6D81E996E009C089E996E0BE010E94B4 +:10EF3000FC6D892B29F089E996E0BE010E94CE6D17 +:10EF4000DF91CF910895FC0160817181CB018E57D3 +:10EF50009F4F6E547F4F0E9423760895EF92FF9249 +:10EF60000F931F93CF93DF930E946C75892BB1F0A1 +:10EF700089E996E00E94A06DEC01009769F00E947B +:10EF80008375998388830E947E759B838A83CE01D3 +:10EF900004960E9482768CAB7E0122C081E996E0C5 +:10EFA0000E94A06D8C017C010097D1F081EA96E06F +:10EFB0000E94A06DEC01F80191838083009719F401 +:10EFC000EE24FF240DC002960E9434769983888334 +:10EFD000CE018E579F4FCE54DF4FBE010E94237645 +:10EFE000C701DF91CF911F910F91FF90EF9008958E +:10EFF00081EA96E00E941F6E81E996E00E941F6EF2 +:10F0000089E996E00E941F6E0895FB016115710564 +:10F01000D9F090934628809345284093AF28509389 +:10F02000B02862E773E29A0185E04130580714F096 +:10F0300020E035E0CB01BF01A9010E94168B84E0DE +:10F040000E94FB080E9412131092B0281092AF2861 +:10F050000895CF92DF92EF92FF920F931F93DF9369 +:10F06000CF93CDB7DEB760970FB6F894DEBF0FBE73 +:10F07000CDBF7C012115310519F1DE011196FC018E +:10F0800080E101900D928150E1F7F701C288D388A9 +:10F09000D701F90180E101900D928150E1F7F7016C +:10F0A000138B028BC7010E940578D701FE013196B0 +:10F0B00080E101900D928150E1F7F701D38AC28A75 +:10F0C00060960FB6F894DEBF0FBECDBFCF91DF9133 +:10F0D0001F910F91FF90EF90DF90CF900895909344 +:10F0E000041D8093031D08951092041D1092031DAA +:10F0F00008951F93CF93DF93182FDB01FA018081CE +:10F1000092E0892718969C911897981769F5199697 +:10F110009C9119978181981739F51A969C911A97A5 +:10F120008281981709F51B969C911B9783819817EC +:10F13000D9F41C969C911C9784819817A9F41D966C +:10F140009C911D978581981779F41E969C911E9726 +:10F150008681981749F41F969C911F97878198176D +:10F1600019F483E090E048C018968D919C9119970E +:10F17000892B51F51A968C911A97882329F51B969D +:10F180008C911B978F3F01F51C968C911C978E3F9D +:10F19000D9F41D968C911D978823B1F4E091242217 +:10F1A000F09125221E968D919C911F9791838083CB +:10F1B000809124229091252202969093252280937B +:10F1C000242282E090E018C0809124229091252290 +:10F1D0009C01E901FD01389688E001900992815077 +:10F1E000E1F7809124229091252208969093252280 +:10F1F0008093242281E090E002C0880F991F1A9525 +:10F20000E2F7DF91CF911F910895CF92DF92EF92B5 +:10F21000FF920F931F93CF93DF93EC016901142F9B +:10F2200012951F70042F0F701F3009F410E10F307A +:10F2300009F400E1112329F0CE01412F50E00E9492 +:10F24000168BE02EFF24212F30E0C701820F931F81 +:10F250008031910564F4E0E1F0E0E81BF90B2C0F3C +:10F260003D1FC90160E070E0AF010E94318B0023B7 +:10F2700019F1C02EDD249E012E193F09205F3F4F5A +:10F280006091242270912522C901402F50E00E94F4 +:10F29000168B023031F41B3020F48FEF8B878EEF0A +:10F2A0008C8780912422909125228C0D9D1D909316 +:10F2B00025228093242206C0112321F0CE01B6011D +:10F2C0000E94031EDF91CF911F910F91FF90EF904D +:10F2D000DF90CF9008956091482382E070E00E9413 +:10F2E000997580914823813111F0863069F420911D +:10F2F0006A2330916B2360916C2370916D236217A8 +:10F30000730780F0B9010EC08A3319F060E070E035 +:10F3100009C090916A2380E020916B23622F70E0F6 +:10F32000682B792B81E00E94997508955F926F9206 +:10F330007F928F929F92AF92BF92CF92DF92EF9285 +:10F34000FF920F931F93DF93CF9300D0CDB7DEB71B +:10F350001092091D1092071D0E9455759093061D6D +:10F360008093051D84E192E20E940286892B41F080 +:10F3700010920D1D10920C1D10920F2210920E2251 +:10F38000E091051DF091061D908180E02181422FC2 +:10F3900050E0482B592BCA018070987F892F9927FC +:10F3A000803C910549F0803E9105E1F0AA24BB2400 +:10F3B0005524EE24FF243CC0AFEFAA2EA7E0BA2EBE +:10F3C000A422B522928180E02381E22EFF24E82A44 +:10F3D000F92A8091071D8C5F8093071D552477249F +:10F3E000739427C05480928180E02381E22EFF2411 +:10F3F000E82AF92AFFEFAF2EF7E0BF2EA422B522AC +:10F400008091071D8B5F8093071D00910E22109144 +:10F410000F220E9483752091071D021B1109080FFE +:10F42000191F0A151B0520F077246624639402C077 +:10F430007724662480910E2290910F22892BF9F077 +:10F44000A114B10409F43CC380910C1D90910D1DD1 +:10F45000A816B90609F034C38091122290911322A4 +:10F460008E159F0509F02CC388E10E94AD75BC0183 +:10F4700087E091E30E94AE4C892BE1F421C3C501E2 +:10F48000019780509540B0F4B0920D1DA0920C1DD4 +:10F49000F0921322E092122284E192E260E871E09D +:10F4A0000E94258688E10E94AD75BC0187E091E34A +:10F4B0000E949D4C9091071D953009F463C22091E4 +:10F4C000051D3091061D492F50E0F901E40FF51F8D +:10F4D0006081862F807E803609F039C2CA0102968B +:10F4E000820F931F909325228093242220810181F3 +:10F4F00007FF05C001969093252280932422422F76 +:10F5000050E0CA018870907024FD41C0E09124222F +:10F51000F0912522892B39F5AFE0BDE1319683E0EA +:10F5200001900D928150E1F7E0912422F091252283 +:10F5300090813496F0932522E0932422292F26955A +:10F540002695822F8F70806680930E1D2073929572 +:10F55000990F990F907C922B80910F1D8F70982B93 +:10F5600090930F1D3FC080E680930E1D9081892FE0 +:10F570008695869580739F70892B80930F1D81815E +:10F5800092819093111D8093101D33961DC0892B7D +:10F5900001F5E0912422F0912522808186958695BF +:10F5A0008F70806680930E1D8191982F9695969509 +:10F5B00090738295880F880F807C892B80930F1D14 +:10F5C0001092111D1092101DF0932522E093242219 +:10F5D00009C080E680930E1D10920F1D1092111D20 +:10F5E0001092101DE4E08E2E912C8422952242FD73 +:10F5F0000BC0E0912422F091252281918093141D6B +:10F60000F0932522E0932422FA01E370F070309702 +:10F6100031F0E853F94F80818093151D0BC0E091C4 +:10F620002422F091252281918093151DF0932522AB +:10F63000E0932422C02EDD24C6018073907074E014 +:10F64000959587957A95E1F7282F237006FF36C0A8 +:10F6500007FD02C090E00BC08091071DE091051DE1 +:10F66000F091061DE80FF11D928192959F70222363 +:10F67000B1F080911822813039F4809119228917D4 +:10F6800019F468E172E202C060E070E07093232236 +:10F69000609322226115710509F00CC273C1EE243A +:10F6A000FF24E22FF0E0E355F94F108188E10E943A +:10F6B000AD759C0186E19DE1B7010DC0E22FF0E040 +:10F6C000E755F94F108188E10E94AD759C0186E1F4 +:10F6D0009DE165EB76E0412F0E940579202F237094 +:10F6E000C60184709070C3FE22C0892B09F067C0E8 +:10F6F0008FEF898382E08A83822F8150823050F499 +:10F70000E0912422F091252281918A83F093252291 +:10F71000E0932422E22FF0E0EF54F94F86E29DE1DE +:10F72000BE016F5F7F4F408120E030E046C0892BF3 +:10F73000B1F107FD02C090E00AC08091071DE09181 +:10F74000051DF091061DE80FF11D92819F708091BB +:10F750001822813049F480911922891729F468E12F +:10F76000E62E62E2F62E02C0EE24FF24F09223225F +:10F77000E0922222E114F10409F404C1E22FF0E046 +:10F78000E355F94F108189E10E94AD759C0182E03B +:10F7900090E0E80EF91E86E29DE1B7010DC0E22F70 +:10F7A000F0E0E755F94F108189E10E94AD759C01A9 +:10F7B00086E29DE165EB76E0412F0E94057980911C +:10F7C000091D885D8093091D892809F48DC0A091C9 +:10F7D0002422B09125228C91887F803F09F084C03B +:10F7E000EEE0FDE181E18093141D2C91822F90E0E9 +:10F7F000837F9070813F910511F1823F91052CF438 +:10F80000803F910509F0BEC008C0823F910549F1D3 +:10F81000833F910509F0B6C037C011968D919C9138 +:10F8200012979093371D8093361D13968D919C915E +:10F8300014979093391D8093381D15963CC0B89647 +:10F8400011968D919C9112979093371D8093361D40 +:10F8500013968C91139790E080509041928383830C +:10F8600011C011968C91119790E080509041909327 +:10F87000361D81A712968D919C9113979093391DF7 +:10F880008093381D149617C0B89611968C911197D5 +:10F8900082958F7090E080559F409093361D8183B4 +:10F8A00011968C91119790E08F70907080559F40C9 +:10F8B000928383831296B0932522A093242222FD63 +:10F8C0000EC0E0912422F091252281919191909394 +:10F8D0003D1D80933C1DF0932522E09324228091CE +:10F8E000091D885F8093091D809124229091051D38 +:10F8F000891B8093071DA114B10471F41092121D8D +:10F900000E9483759091091D98522091071D921BAA +:10F91000980F9093131D0EC088ED9FEFA80EB91E8F +:10F92000B092121D88E290E0A80EB91E8A2D88526E +:10F930008093131D8091141D813121F58091121D3A +:10F940009091131D90933B1D80933A1D1BC0613411 +:10F9500009F0B6C0892F8F5F8093071DAEE0BDE12F +:10F96000F901E80FF11D88E201900D928150E1F755 +:10F970008091071D885D8093071D8091091D885D1A +:10F980008093091D0E9483752091071D30E0821726 +:10F99000930708F495C00E9483759091071D482F26 +:10F9A000491B4093081D252D30E053E0220F331FE3 +:10F9B0005A95E1F78091091D280F311D225F324EC3 +:10F9C000E091051DF091061DE90FF11DC901BF0170 +:10F9D00050E00E94168BA114B10411F1772061F060 +:10F9E0002091091D80910E2290910F22820F911D6E +:10F9F00090930F2280930E22662029F0B0920F225E +:10FA0000A0920E2218C02091081D80910E22909184 +:10FA10000F22820F911D90930F2280930E220BC014 +:10FA20002091091D8091081D90E0820F911D9093F7 +:10FA30000D1D80930C1D20910E2230910F22211557 +:10FA4000310539F080910C1D90910D1D2817390753 +:10FA5000B9F522E433E2EEE0FDE140910C1D509156 +:10FA60000D1DC901BF010E94168B80910C1D909144 +:10FA70000D1D909333238093322310920D1D10920D +:10FA80000C1D10920F2210920E220E94AD828091C6 +:10FA9000031D9091041D892B51F00E946B79E09118 +:10FAA000031DF091041D0280F381E02D09950E9451 +:10FAB000DF1206C082E0E82EF12CE60EF71EF1CD33 +:10FAC0000F900F90CF91DF911F910F91FF90EF90CA +:10FAD000DF90CF90BF90AF909F908F907F906F906E +:10FAE0005F90089585EA9DE70E943D1281E0809332 +:10FAF0001822109219228AEA80931A2280931B22DC +:10FB00000895BC0180911822813059F48AE192E273 +:10FB100048E050E00E94098B009719F428E132E296 +:10FB200002C020E030E0C9010895BC0189E10E94D3 +:10FB3000B875E091E205F091E3058AE692E860E0AD +:10FB400070E009950E9411450895AF92BF92DF922F +:10FB5000EF92FF920F931F93DF93CF93CDB7DEB752 +:10FB600028970FB6F894DEBF0FBECDBF8C01109260 +:10FB7000091D1092071D0E94E6750E94557590930D +:10FB8000061D8093051D89E064E070E00E94997570 +:10FB90008091031D9091041D892B11F00E946B79B7 +:10FBA00080914823863091F48091772390E080FD06 +:10FBB00008C08F739070409749F08EE062E070E06B +:10FBC00003C08EE063E070E00E949975CE0101965B +:10FBD0000115110519F461ED75E001C0B8010E942D +:10FBE0009D4CE091051DF091061D3296F093252263 +:10FBF000E093242232978091071DE80FF11D1282B5 +:10FC00008AE593E20E94817D892B41F48AE493E2A4 +:10FC10000E94817D892B11F410E00AC0809124227A +:10FC2000909125220196909325228093242210E81A +:10FC300080914223482F50E0709143239A0184E041 +:10FC4000220F331F8A95E1F7872F82958F70822BC1 +:10FC5000682F669566958295880F880F807C682B43 +:10FC6000272F30E0C9018F709070892BF9F48091B3 +:10FC7000442390914523892BC9F44F705070452B34 +:10FC800029F4872F807F11F408E753C0E0912422E4 +:10FC9000F091252260838091242290912522019663 +:10FCA000909325228093242200E743C04F70507028 +:10FCB000452B01F5822F807FE9F4E0912422F09119 +:10FCC0002522607C7F70672B6083E0912422F09175 +:10FCD00025228091442390914523928381838091B2 +:10FCE000242290912522039690932522809324220A +:10FCF00008E61FC0E0912422F09125228091422342 +:10FD000090914323A0914423B09145238083918314 +:10FD1000A283B383E0912422F09125226083809115 +:10FD200024229091252204969093252280932422C8 +:10FD300000E680914823813109F4046002FD0EC081 +:10FD4000E0912422F09125228083809124229091B9 +:10FD50002522019690932522809324228091492385 +:10FD6000803431F08F3F31F0813031F4016012C0C6 +:10FD7000026010C003600EC0E0912422F0912522A1 +:10FD800080838091242290912522019690932522B0 +:10FD90008093242280914A2390914B23892B61F5F3 +:10FDA00080914C2390914D23892B31F580914E23E6 +:10FDB00090914F23892B01F58091502390915123ED +:10FDC000892BD1F48091522390915323892BA1F454 +:10FDD0008091542390915523892B71F4809156235F +:10FDE00090915723892B41F4809158239091592366 +:10FDF000892B11F410645EC08AE493E20E94817D35 +:10FE0000DC0190932322809322220097D1F08091ED +:10FE1000071D90E00296E091051DF091061DE80F88 +:10FE2000F91F11968C918295807F9081892B808318 +:10FE300084E06AE473E24AE353E20E947978106C4A +:10FE400021C080914A238E3FF9F480914B23803862 +:10FE5000D9F480915C2390915D23892BA9F4809142 +:10FE60005E2390915F23892B79F480916023909198 +:10FE70006123892B49F484E06AE473E24AE353E2A4 +:10FE80000E947978182B16C0809124229091252207 +:10FE90009C01D901EAE4F3E280E101900D928150E6 +:10FEA000E1F780912422909125224096909325227B +:10FEB0008093242280915A238F3F09F0ACC01860B0 +:10FEC00080915B238230B1F580915C2390915D231A +:10FED000892B81F580915E2390915F23892B51F5C9 +:10FEE0008091602390916123892B21F58091622379 +:10FEF00090916323892BF1F4809164239091652381 +:10FF0000892BC1F48091662390916723892B91F40A +:10FF100080916823882371F41360E0912422F0918A +:10FF2000252280916923808380912422909125222B +:10FF30000196CBC080915C2390915D23892B09F0C1 +:10FF40005CC080915E2390915F23892B09F055C09E +:10FF50008091602390916123892B09F04EC080919C +:10FF6000622390916323892B21F5809164239091E2 +:10FF70006523892BF1F4809166238823D1F41260E4 +:10FF8000E0912422F091252280915B238083E091EF +:10FF90002422F09125223196A7E6B3E283E00D906A +:10FFA00001928150E1F780912422909125220496BC +:10FFB0008CC08091622390916323892BF1F480910E +:10FFC00064238823D1F41160E0912422F09125224A +:10FFD00080915B238083E0912422F0912522319649 +:10FFE000A5E6B3E285E00D9001928150E1F78091A2 +:10FFF000242290912522069668C080912422909117 +:020000021000EC +:1000000025229C01D901EAE5F3E280E101900D92FD +:100010008150E1F755C08AE593E20E94817DDC01C1 +:1000200090932322809322220097C9F08091071D8C +:1000300090E00296E091051DF091061DE80FF91F72 +:10004000808111969C91892B808380E06AE573E220 +:10005000AE014F5F5F4F0E947978146022C080919B +:100060005A238E3F01F580915B238038E1F4809123 +:100070005C2390915D23892BB1F480915E23909154 +:100080005F23892B81F48091602390916123892BD8 +:1000900051F480E06AE573E2AE014F5F5F4F0E946A +:1000A0007978182B16C080912422909125229C01EA +:1000B000D901EAE5F3E280E101900D928150E1F788 +:1000C000809124229091252240969093252280931E +:1000D000242288E28093091D80914823813109F010 +:1000E0009EC030916A2320916B23C901807F805B81 +:1000F000904F09F590916C2380916D23807F805BF8 +:10010000904FC9F4E0912422F091252283EF80835F +:10011000E0912422F091252290916D23905B8091B3 +:100120006B238295807F980F9183809124229091F8 +:100130002522029658C090916C2380916D23807087 +:100140008050904FC1F4E0912422F091252281EF5C +:100150008083E0912422F091252280916A2390915E +:100160006B2392838183E0912422F0912522809158 +:100170006D2383831BC02070E0912422F0912522FF +:100180002050304FC9F482EF8083E0912422F09117 +:10019000252280916B238183E0912422F0912522F6 +:1001A00080916C2390916D2393838283809124228C +:1001B00090912522049617C080EF8083E09124223D +:1001C000F091252280916A2390916B23A0916C235A +:1001D000B0916D2381839283A383B4838091242281 +:1001E0009091252205969093252280932422E091D8 +:1001F0002422F09125228091702390917123918384 +:10020000808380912422909125220296909325222A +:10021000809324228091091D885F8093091D80911D +:10022000071DE091051DF091061DE80FF11D0083EB +:100230008091071DE091051DF091061DE80FF11D4D +:100240001183A09124228091051DA81BA093071D56 +:100250008091091D482F50E0E0913223F091332323 +:10026000E41BF50B2A2F30E086E690E0821B930B0F +:100270006091051D7091061D8E179F0708F0FCC048 +:10028000CB0104964A2F50E00E941F8BE091051D80 +:10029000F091061D8091322390913323906C9083CE +:1002A000E091051DF091061D809132238183E0913C +:1002B000051DF091061D809111228283E091051D9C +:1002C000F091061D809110228383809110229091DD +:1002D0001122019690931122809310228091071D84 +:1002E0008C5F8093071D06E6D02E4D2D481B487F5E +:1002F0004093081D6091051D7091061D680F711DCA +:100300002091091D30E02E5B3C4DCB01B90150E03E +:100310000E94168B2091071D8091081D90E0820F8E +:10032000911D0E9450750E94AE778C01009709F4D0 +:10033000C0C05E010894A11CB11CC5010E94957D3E +:10034000C8010E944177C8010E94817780910A1DEF +:1003500090910B1D8130910509F4ABC0843091055B +:1003600009F4A7C0059709F4A4C09091091D8091D4 +:10037000081DE82EFF24E90EF11C85E08093071D7F +:10038000E091051DF091061D809132239091332359 +:10039000906E9083E091051DF091061D80913223AF +:1003A00081838091071DD81A48EFD422D092081D6E +:1003B000C501BA2CD92E57C0E091051DF091061D3C +:1003C000C70113E0969587951A95E1F784834091CC +:1003D0003223509133239A012E193F098091081D31 +:1003E00090E02817390720F4842F8E198093081D78 +:1003F0008091071D2091051D3091061D280F311D8C +:100400004091081DF701EE5BFC4DC901BF0150E0B2 +:100410000E94168B2091071D8091081D90E0820F8D +:10042000911D0E9450750E94AE778C01009709F4CF +:1004300040C08B2D9D2D0E94957DC8010E94417763 +:10044000C8010E9481772091081D80910A1D90911A +:100450000B1D8130910569F18430910551F10597AB +:1004600041F1E20EF11C8091322390913323E81682 +:10047000F90608F4A1CF1BC0260F371F4E5B5C4D59 +:10048000C901BA01AF010E94168B2091071D80910E +:10049000322390913323820F911D2091091D821BDD +:1004A00091090E945075CE0101960E94957D81E0D0 +:1004B00001C080E028960FB6F894DEBF0FBECDBF16 +:1004C000CF91DF911F910F91FF90EF90DF90BF9040 +:1004D000AF900895CF93DF93EB01CB01BA010E9457 +:1004E000BF82E091031DF091041D309729F0048034 +:1004F000F581E02DCE010995D0930B1DC0930A1D07 +:10050000DF91CF910895BC018CEC96E00E94D486D7 +:10051000FC01009711F48FE0089580810895CF9336 +:10052000DF93EC018091262290912722892B19F0EC +:1005300020E030E00EC08CEC96E00E94D48784ED81 +:1005400096E00E94D487D0932722C093262221E0F0 +:1005500030E0C901DF91CF910895CF93DF9388E117 +:100560000E94AD75EC0161ED75E00E94AE4C892BE7 +:1005700019F4CE010E944087DF91CF910895DF9258 +:10058000EF92FF920F931F93DF93CF9300D000D091 +:100590000F92CDB7DEB77C01D62E89E10E94AD75F2 +:1005A0008C0161ED75E00E94AE4C892B09F06BC0A7 +:1005B000E114F10441F082E0E816F10409F063C0AF +:1005C000BFE0FB2E04C0FD2CC8010E9440878CECCC +:1005D00096E0B8010E94D486FC016F2D70E0A4E083 +:1005E000660F771FAA95E1F7009719F0D080DD20FC +:1005F00039F4698351E0E52EF12C40EFD42E17C079 +:10060000CB0133E0880F991F3A95E1F7660F771F0A +:10061000860F971F2AE5D29E90011124820F931F07 +:1006200064E670E00E94488A6983EE24FF24C801D2 +:100630000E940E87892B39F10E94E5426A837B83F1 +:100640008C839D838CEC96E0B801AE014F5F5F4FC9 +:100650000E948F8784ED96E0B801AE014E5F5F4F38 +:100660000E948F87EF2819F489818D1561F0E09140 +:100670002622F0912722309731F04981C80161E0AC +:1006800070E050E009950F900F900F900F900F9031 +:10069000CF91DF911F910F91FF90EF90DF90089520 +:1006A0009FB7F894E1E7F0E08081807D808388B394 +:1006B0008F6288BB10929000E1E9F0E01082109206 +:1006C0009200109295001092940080818560808342 +:1006D0009FBF08952FB7F894909399008093980046 +:1006E00088B38F6288BBE1E7F0E08081826080831D +:1006F0002FBF0895AF92BF92CF92DF92EF92FF92F9 +:100700000F931F93CF93DF93EC01A090B200B090B2 +:10071000B000C090B100D090B300F8940E9413458F +:1007200083B7817F866083BF8091B60080628093AB +:10073000B60082E08093B00083E08093B1007E0138 +:1007400000E010E0C801B7012AE0660F771F881F9C +:10075000991F2A95D1F729E03DE340E050E00E943F +:100760006F8A2093B3001092B2008091B60084FD8E +:10077000FCCF8091700082608093700083B78160AD +:1007800083BF7894809193308823E9F1809194001D +:100790009091950020919F303091A030821793075F +:1007A000A0F48091613090916230A0916330B0915B +:1007B0006430875F924CAF4FBF4F8093613090930E +:1007C0006230A0936330B093643080919400909134 +:1007D0009500821B930BA0E0B0E020916130309136 +:1007E00062304091633050916430820F931FA41F98 +:1007F000B51F8093613090936230A0936330B093C3 +:100800006430109293308091B300882339F083B71D +:10081000816083BF889583B78E7F83BF83B78E7FC8 +:1008200083BF80919400909195008C0F9D1F9093B1 +:1008300095008093940080919400909195009093FE +:10084000A03080939F3081E080939330F894B092F1 +:10085000B000C092B100D092B300A092B2007894E0 +:100860000E94054587E0EE0CFF1C001F111F8A95B2 +:10087000D1F7C801B70129E03DE340E050E00E9414 +:100880006F8ADA01C9010E943743DF91CF911F912E +:100890000F91FF90EF90DF90CF90BF90AF900895B1 +:1008A0001F920F920FB60F920BB60F9211242F9337 +:1008B0003F934F935F936F937F938F939F93AF93E8 +:1008C000BF93EF93FF938091940090919500909344 +:1008D000A4308093A33081E08093953080917100A3 +:1008E000807D8093710078940E9471728091953020 +:1008F0008823E9F180919400909195002091A33094 +:100900003091A43082179307A0F4809169309091C0 +:100910006A30A0916B30B0916C30875F924CAF4FD2 +:10092000BF4F8093693090936A30A0936B30B0933F +:100930006C308091940090919500821B930BA0E005 +:10094000B0E02091693030916A3040916B30509125 +:100950006C30820F931FA41FB51F80936930909352 +:100960006A30A0936B30B0936C3010929530FF9149 +:10097000EF91BF91AF919F918F917F916F915F9117 +:100980004F913F912F910F900BBE0F900FBE0F9084 +:100990001F901895FC01009721F0CB01BA01A90125 +:1009A000099508950F931F93DF93CF93CDB7DEB7CB +:1009B000E0970FB6F894DEBF0FBECDBF0E948375DF +:1009C0008C010E945575602FAE014F5F5F4F0E94F2 +:1009D000F587882309F444C088A99801281B3109A8 +:1009E000C9010E943175892BD9F12E81222319F179 +:1009F0008A859B853BEA8D3C930719F08F5F9F4F5B +:100A000079F5223071F028E030E0BE01645F7F4F5D +:100A100021503040FB01E20FF31F80818F3F21F016 +:100A200007C022E030E0F1CF121613068CF303C0AA +:100A300089E10E94B87588E1BE016A5E7F4F0E941D +:100A4000B8756B8182E170E00E94997569858DE0CF +:100A500070E00E94997588A9B801681B710902C0ED +:100A60006FEF7FEFCB01E0960FB6F894DEBF0FBEBD +:100A7000CDBFCF91DF911F910F910895CF92DF925B +:100A8000FF920F931F93DF93CF93CDB7DEB7E0971D +:100A90000FB6F894DEBF0FBECDBFFE01319680E3E6 +:100AA000DF011D928A95E9F780916422882339F449 +:100AB00081E0809364220E9402758093652281E028 +:100AC00089831A8282E10E94A4758B8389E10E9446 +:100AD000AD7561ED75E00E94AE4C892B11F01C8262 +:100AE00004C08BE00E94A4758C831D821F828AE063 +:100AF0000E94A475892B29F08AE00E94A475898739 +:100B00000BC06091652269876F5F609365226150B9 +:100B10008AE070E00E94997513E018878DEC9BEADB +:100B20009B878A8789E10E94AD7561ED75E00E941F +:100B3000AE4C892B31F082E08E838FEF8C878D87CE +:100B400009C089E10E94AD75BC01CE010C960E94DE +:100B50009D4C1E838DEC9BEA9D8B8C8BCE01469623 +:100B600067E57FE20E949D4C0E9455759FA78EA766 +:100B70000E94837588AB6E010894C11CD11CC6010C +:100B80000E940B8AF82E082F10E0C8010E940C75F5 +:100B9000892B19F40FEF1FEF07C00E946275BC018B +:100BA000C6014F2D0E943589C801E0960FB6F89412 +:100BB000DEBF0FBECDBFCF91DF911F910F91FF9090 +:100BC000DF90CF900895FC01808191812281338153 +:100BD000820F931F918380830895EF92FF920F936A +:100BE0001F93FC01E080F180028113810E94D842B2 +:100BF0000E0D1F1D081B190BC8011F910F91FF90AF +:100C0000EF9008950F931F938C010E94D84240E00B +:100C100050E0F80120813181821B930B01962281E3 +:100C200033812817390710F441E050E0CA011F91C1 +:100C30000F9108950F931F938C010E94D842F801E1 +:100C4000918380831F910F9108950F931F938C01BF +:100C5000FC01738362830E94D842F80191838083F0 +:100C60001F910F91089580916622909167220895B7 +:100C7000CF93DF93EC018091662290916722892BBC +:100C800069F4209789F08CE692E260E872E040E631 +:100C900056E820E030E00E945C7106C0209721F405 +:100CA0008CE692E20E941A71D0936722C09366226A +:100CB000DF91CF91089588E692E20E94466E0895F2 +:100CC000EF92FF920F931F93CF93DF937C0180915C +:100CD000662290916722892B81F188E692E20E9438 +:100CE000466E9C011AC08A859B8505969B878A87DC +:100CF00020916622309167228217930780F0188135 +:100D0000098188E692E2BE010E94946E80EE96E030 +:100D1000BE010E94CE6D212F302FE90103C0099042 +:100D2000D881C02D2097F9F68CE692E260E872E057 +:100D300040E656E897010E945C71DF91CF911F91C8 +:100D40000F91FF90EF9008950F931F93CF93DF9330 +:100D50008C0180EE96E0B8010E94FC6D892B19F0A1 +:100D6000E801229713C088E692E20E94466EEC01E9 +:100D70000BC0BE016E5F7F4FC8010E94AE4C892B35 +:100D800029F40990D881C02D209799F7CE01DF91E1 +:100D9000CF911F910F9108950E94A486FC010097A6 +:100DA00011F0138612860895CF93DF93EC01CB01E7 +:100DB0000E94A486FC01009719F420E030E010C0E6 +:100DC0008A819B8124853585AC01429FC001439F68 +:100DD000900D529F900D11242E813F81280F391FB5 +:100DE000C901DF91CF910895CF93DF930E94A4862C +:100DF000EC01009719F42FEF3FEF0CC088E692E268 +:100E0000BE010E94946E80EE96E0BE010E94CE6DFF +:100E100020E030E0C901DF91CF9108950E94A486BF +:100E20009C01009711F021E030E0C9010895FC0118 +:100E300044815581A281B3818681978141155105F5 +:100E400079F06A9F90016B9F300D7A9F300D1124CD +:100E5000280F391FC901BA01AD010E94168B0895F0 +:100E60006A9F90016B9F300D7A9F300D1124280FDF +:100E7000391FC90160E070E0AD010E94318B089517 +:100E80000F931F93CF93DF938C010E940E87892BC2 +:100E900019F020E030E03DC080EE96E00E94A06DA9 +:100EA000EC01009719F42FEF3FEF33C088E692E290 +:100EB000BE010E94B96E1B861A86CE010296B80149 +:100EC0000E949D4C2091E2063091E3068091E60657 +:100ED0009091E70600E010E006C0C817D90731F08E +:100EE0000F5F1F4F0E9602171307B8F31D870C876D +:100EF0008AE692E20E94466EEC0107C0CE01B8017C +:100F00000E9417870990D881C02D2097B9F721E05A +:100F100030E0C901DF91CF911F910F910895EF92B9 +:100F2000FF920F931F93CF93DF938C01EB01F42E6D +:100F3000E52ECB010E94A486DC01009759F4CE0176 +:100F40000E944087892B31F1CE010E94A486DC01EA +:100F5000009701F11B961C921E921A97E801EA81F4 +:100F6000FB811C968D919C911D979C01E29FC00175 +:100F7000E39F900DF29F900D11242E813F81280F49 +:100F8000391FC9016F2D7E2DAF010E94168B21E004 +:100F900030E002C020E030E0C901DF91CF911F9125 +:100FA0000F91FF90EF9008950F931F93CF93DF93CE +:100FB0008C018AE692E2B8010E94B96E88E692E25C +:100FC0000E94466EEC0108C06C857D85C8010E94B8 +:100FD00017870990D881C02D2097B1F781E090E064 +:100FE000DF91CF911F910F910895BF92CF92DF9221 +:100FF000EF92FF920F931F93DF93CF93CDB7DEB79E +:1010000028970FB6F894DEBF0FBECDBF6C01B62E89 +:101010007A0182E0861708F0C3C0F6019081892F1B +:1010200087708983892F86958695869581708A83B6 +:10103000892F829581708B83929596959770892FD1 +:1010400081708C83969591709D839181892F86956F +:10105000869583708E8392959F70892F83708F837E +:10106000969596959887DA01FE01319688E0019071 +:101070000D928150E1F7F6018281F70180878601A8 +:101080000D5F1F4F3E813323A1F1F801918180E074 +:10109000F6012381820F911DF701928781878601D6 +:1010A0000B5F1F4F323091F4C7010B9661ED75E075 +:1010B0000E949D4CF8018181F7018387F6018581AB +:1010C000F70184878601095F1F4F1CC03330D1F4BC +:1010D000F601D70196012850304084851B968C93E9 +:1010E0001B9731971196E217F307B9F7085F1F4F67 +:1010F00009C0C7010B9661ED75E00E949D4CF70198 +:101100001286118638853323C1F18D81882361F4DD +:10111000F801918180E02081820F911DF701948B6D +:10112000838B0E5F1F4F05C0F70181859285948BDD +:10113000838B323089F4C701459661ED75E00E94DA +:101140009D4CF8018181F701858BF8018081F701C1 +:10115000868B0E5F1F4F1AC03330C1F4D801F701E0 +:1011600090E017968C911797858B9F5F119731961A +:101170009830B9F7085F1F4F09C0C701459661ED68 +:1011800075E00E949D4CF701148A138A902F9C19D8 +:101190008B2D891BF70187A716A705A7B91608F499 +:1011A00090E0892F28960FB6F894DEBF0FBECDBF12 +:1011B000CF91DF911F910F91FF90EF90DF90CF9033 +:1011C000BF900895CF93DF93FC01DB0185E0EB0135 +:1011D00019928A95E9F7858190E083709070892B48 +:1011E00011F082E08C93878190E083709070892B5E +:1011F00021F082E012968C931297858190E08370A3 +:101200009070892B99F0878190E083709070892B82 +:1012100069F023893489818592852817390731F44B +:1012200081E0848312961C92129701C014828581FA +:101230008370823021F0833021F488E003C082E0A3 +:1012400001C080E011968C93119787818370823062 +:1012500021F0833021F488E003C082E001C080E007 +:1012600013968C93DF91CF910895CF92DF92EF92F6 +:10127000FF920F931F93DF93CF9300D000D00F9274 +:10128000CDB7DEB77C016B01042FBE016F5F7F4FCE +:101290000E94E28849818A8190E0840F911D039623 +:1012A0002B81820F911D2C81820F911D2D81820F28 +:1012B000911D10E00817190714F480E09EC0D701B3 +:1012C00011962C91119730E021703070F3E0220FCD +:1012D000331FFA95E1F712968C91129790E0817086 +:1012E0009070E4E0880F991FEA95E1F7282B8C9124 +:1012F0008770282B13968C91139790E081709070D3 +:1013000075E0880F991F7A95E1F7282B14968C9138 +:10131000149790E08170907066E0880F991F6A952D +:10132000E1F7282BF601208315962C91159730E0D4 +:1013300023703070220F331F220F331F16968C91AB +:10134000169790E08370907034E0880F991F3A955B +:10135000E1F7282B17968C9117978295880F880FA5 +:10136000807C822B818318968C918283423011F08D +:1013700043E00AC0D70119968C911997F60183832F +:101380001A968C91848345E03A81A32FB0E01A9697 +:10139000AE0DBF1D20E007C0F601E90FF11D8C91D5 +:1013A00080832F5F1197922F940F2317A9F78B81BA +:1013B000823081F4F601E90FF11DD70153968C912B +:1013C000539780839F5FF601E90FF11D54968C912E +:1013D00080839F5F3C81A32FB0E05496AE0DBF1D6C +:1013E00020E007C0F601E80FF11D8C9180832F5F8C +:1013F0001197822F890F2317A9F70F900F900F9045 +:101400000F900F90CF91DF911F910F91FF90EF9070 +:10141000DF90CF900895DF93CF9300D000D00F924C +:10142000CDB7DEB7BE016F5F7F4F0E94E288898132 +:101430009A81890F8D5F9B81890F9C81890F9D8186 +:10144000890F0F900F900F900F900F90CF91DF9119 +:101450000895629FD001739FF001829FE00DF11DFE +:10146000649FE00DF11D929FF00D839FF00D749F1E +:10147000F00D659FF00D9927729FB00DE11DF91FCA +:10148000639FB00DE11DF91FBD01CF011124089527 +:10149000AA1BBB1B51E107C0AA1FBB1FA617B7079A +:1014A00010F0A61BB70B881F991F5A95A9F78095B6 +:1014B0009095BC01CD01089597FB092E07260AD00F +:1014C00077FD04D0E5DF06D000201AF47095619511 +:1014D0007F4F0895F6F7909581959F4F0895A1E26B +:1014E0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F9E +:1014F000FF1FA217B307E407F50720F0A21BB30BE9 +:10150000E40BF50B661F771F881F991F1A9469F764 +:1015100060957095809590959B01AC01BD01CF01C0 +:101520000895AF92BF92CF92DF92EF92FF920F9306 +:101530001F93CF93DF93EC01A880B980CA80DB8032 +:10154000A114B104C104D10441F484E2A82E89EDB0 +:10155000B82E8BE5C82E87E0D82EC601B5012DE147 +:1015600033EF41E050E00E94358F27EA31E440E05C +:1015700050E00E94298A7B018C01C601B5012DE152 +:1015800033EF41E050E00E94358FCA01B9012CEEE3 +:1015900034EF4FEF5FEF0E94298A6E0D7F1D801F91 +:1015A000911F97FF04C0615070408040904868834D +:1015B00079838A839B839B013F77C901DF91CF9118 +:1015C0001F910F91FF90EF90DF90CF90BF90AF9061 +:1015D00008950E94918A089588EE96E00E94918A6B +:1015E0000895A0E0B0E08093E8069093E906A09308 +:1015F000EA06B093EB060895FC014150504030F0EC +:1016000001900616D1F73197CF01089588279927C1 +:101610000895FB01DC0104C08D910190801921F433 +:1016200041505040C8F7881B990B0895FB01DC011D +:1016300002C001900D9241505040D8F708956817AC +:10164000790768F4FB01DC01E40FF51FA40FB51F57 +:1016500002C002900E9241505040D8F708950C9469 +:10166000168BDC0101C06D9341505040E0F70895A6 +:10167000FC018191861721F08823D9F799270895D5 +:101680003197CF010895FB01DC018D910190801904 +:101690000110D9F3990B0895FB01DC0101900D9223 +:1016A0000020E1F70895FB01DC014150504030F08B +:1016B0008D910190801919F40020B9F7881B990BBE +:1016C0000895FB0151915523A9F0BF01DC014D9113 +:1016D00045174111E1F759F4CD010190002049F07F +:1016E0004D9140154111C9F3FB014111EFCF81E04C +:1016F00090E001970895DF93CF93CDB7DEB7FE0159 +:101700003596619171918091113190911231AF01B3 +:101710000E94548CCF91DF910895DF93CF93CDB782 +:10172000DEB7FE01359661917191A0911131B091B2 +:10173000123113968C911397886013968C93809135 +:10174000113190911231AF010E94548CE09111310E +:10175000F09112312381277F2383CF91DF91089568 +:101760000F931F93CF93DF938C01E0911131F09190 +:101770001231838181FF21C0C0E0D0E00DC0E09133 +:101780001131F091123120853185BF01F9010995A0 +:10179000892B11F0CFEFDFEFF80181918F018823C2 +:1017A00071F7E0911131F0911231208531858AE095 +:1017B000BF01F9010995892B11F0CFEFDFEFCE01C1 +:1017C000DF91CF911F910F9108950F931F93DF9396 +:1017D000CF93CDB7DEB72E970FB6F894DEBF0FBE0E +:1017E000CDBF0D891E898F89988D97FF02C080E03B +:1017F00090E801979E838D831A83098386E08C830A +:101800009E01255E3F4FCE010196698D7A8DA9011B +:101810000E94548C4D815E8157FD0AC02F8138850E +:10182000421753070CF49A01020F131FF80110829C +:101830002E960FB6F894DEBF0FBECDBFCF91DF91CD +:101840001F910F9108950F931F93DF93CF93CDB7FF +:10185000DEB72E970FB6F894DEBF0FBECDBF0D8951 +:101860001E8986E08C831A8309838FEF9FE79E830E +:101870008D839E01275E3F4FCE0101966F89788D43 +:10188000A9010E94548C2F813885020F131FF80183 +:1018900010822E960FB6F894DEBF0FBECDBFCF914B +:1018A000DF911F910F9108952F923F924F925F9277 +:1018B0006F927F928F929F92AF92BF92CF92DF9260 +:1018C000EF92FF920F931F93DF93CF93CDB7DEB7C5 +:1018D0002B970FB6F894DEBF0FBECDBF3C012B0196 +:1018E0005A01FC0117821682838181FD03C06FEFCC +:1018F0007FEFC6C19AE0892E1E010894211C311C7D +:10190000F3012381F20123FD859123FF81912F01B2 +:10191000882309F4B2C1853239F423FD859123FF70 +:1019200081912F01853229F490E0B3010E94AB8EA2 +:10193000E7CF982FFF24EE249924FFE1FF15D0F084 +:101940009B3269F09C3228F4903259F0933291F432 +:101950000EC09D3249F0903369F441E024C052E05A +:10196000F52A84E0F82A28C098E0F92A25C0E0E1A9 +:10197000FE2A22C0F7FC29C0892F80538A3070F4D8 +:10198000F6FE05C0989C902C1124980E15C0E89C7A +:10199000E02C1124E80EF0E2FF2A0EC09E3229F45A +:1019A000F6FC6BC140E4F42A07C09C3619F450E8F9 +:1019B000F52A02C0983649F4F20123FD959123FFE0 +:1019C00091912F01992309F0B8CF892F8554833045 +:1019D00018F08052833038F444E050E0A40EB51E75 +:1019E0005FE359830FC0933631F0933779F0933525 +:1019F00009F056C020C0F5018081898342E050E0A3 +:101A0000A40EB51E610101E010E012C0F501C08016 +:101A1000D180F6FC03C06FEF7FEF02C0692D70E04C +:101A200042E050E0A40EB51EC6010E94A08E8C01BB +:101A30005FE7F52214C0F501C080D180F6FC03C039 +:101A40006FEF7FEF02C0692D70E042E050E0A40E1E +:101A5000B51EC6010E94958E8C0150E8F52AF3FE52 +:101A600007C01AC080E290E0B3010E94AB8EEA94F6 +:101A70008E2D90E008171907A8F30EC0F601F7FCA9 +:101A80008591F7FE81916F0190E0B3010E94AB8ECA +:101A9000E110EA94015010400115110579F7EAC0F0 +:101AA000943611F0993669F5F7FE08C0F5012081EA +:101AB00031814281538184E090E00AC0F501808148 +:101AC00091819C01442737FD4095542F82E090E09E +:101AD000A80EB91E9FE6F92257FF09C05095409500 +:101AE000309521953F4F4F4F5F4FE0E8FE2ACA01E6 +:101AF000B901A1012AE030E00E94D78ED82ED21879 +:101B000040C0953729F41F2D1F7E2AE030E01DC00C +:101B10001F2D197F9F3661F0903720F4983509F01A +:101B2000ACC00FC0903739F0983709F0A6C004C098 +:101B300028E030E00AC0106114FD146020E130E0BC +:101B400004C014FD166020E132E017FF08C0F50163 +:101B5000608171818281938144E050E008C0F50189 +:101B600080819181BC0180E090E042E050E0A40ED1 +:101B7000B51EA1010E94D78ED82ED2188FE7F82E5D +:101B8000F122F6FE0BC05EEFF522D91438F4F4FE14 +:101B900007C0F2FC05C08FEEF82202C01D2D01C067 +:101BA000192DF4FE0DC0FE01ED0DF11D8081803375 +:101BB00019F499EEF92208C01F5FF2FE05C003C0B8 +:101BC0008F2D867809F01F5F0F2DF3FC14C0F0FEF7 +:101BD0000FC01E1510F09D2C0BC09D2C9E0C911A51 +:101BE0001E2D06C080E290E0B3010E94AB8E1F5F05 +:101BF0001E15C0F304C01E1510F4E11A01C0EE2436 +:101C000004FF0FC080E390E0B3010E94AB8E02FF9F +:101C10001DC001FD03C088E790E00EC088E590E09C +:101C20000BC0802F867891F001FF02C08BE201C0CB +:101C300080E2F7FC8DE290E0B3010E94AB8E06C01B +:101C400080E390E0B3010E94AB8E9A94D914C0F364 +:101C5000DA94F101ED0DF11D808190E0B3010E9455 +:101C6000AB8EDD20A9F706C080E290E0B3010E94B0 +:101C7000AB8EEA94EE20C1F743CEF3016681778103 +:101C8000CB012B960FB6F894DEBF0FBECDBFCF9120 +:101C9000DF911F910F91FF90EF90DF90CF90BF9059 +:101CA000AF909F908F907F906F905F904F903F90FC +:101CB0002F900895DC01CB01FC01F999FECF06C0FD +:101CC000F2BDE1BDF89A319600B40D9241505040FA +:101CD000B8F70895F999FECF92BD81BDF89A99277A +:101CE00080B50895A8E1B0E042E050E00C945C8E2D +:101CF000DC01CB0103C02D910E94838E41505040E6 +:101D0000D0F70895262FF999FECF1FBA92BD81BD55 +:101D100020BD0FB6F894FA9AF99A0FBE019608956D +:101D20000E94828E272F0C94838EFC0105906150B7 +:101D300070400110D8F7809590958E0F9F1F0895E1 +:101D4000FC016150704001900110D8F7809590958A +:101D50008E0F9F1F08950F931F93CF93DF938C01D6 +:101D6000EB018B8181FF1BC082FF0DC02E813F8163 +:101D70008C819D812817390764F4E881F9810193EA +:101D8000F983E88306C0E885F985802F0995892BBA +:101D900031F48E819F8101969F838E8302C00FEF65 +:101DA0001FEFC801DF91CF911F910F910895FA01A4 +:101DB000AA27283051F1203181F1E8946F936E7F8A +:101DC0006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E07B +:101DD0003CD0670F781F891F9A1FA11D680F791FBC +:101DE0008A1F911DA11D6A0F711D811D911DA11DCD +:101DF00020D009F468943F912AE0269F11243019DD +:101E0000305D3193DEF6CF010895462F4770405D77 +:101E10004193B3E00FD0C9F7F6CF462F4F70405D26 +:101E20004A3318F0495D31FD4052419302D0A9F781 +:101E3000EACFB4E0A6959795879577956795BA957B +:101E4000C9F700976105710508959B01AC010A2E41 +:101E500006945795479537952795BA95C9F7620F18 +:101E6000731F841F951FA01D089597FB092E05263B +:101E70000ED057FD04D033DB0AD0001C38F4509547 +:101E80004095309521953F4F4F4F5F4F0895F6F79E +:101E900090958095709561957F4F8F4F9F4F0895D6 +:041EA000F894FFCFE4 +:101EA4007B0A202276657273696F6E22203A2022A3 +:101EB40056302E33222C0A0020226E616D652220BA +:101EC4003A2022776972656C6573732D706C75673F +:101ED400220A007D0A007B0A20226E616D652220A1 +:101EE4003A20222573222C0A0020226D6F64652279 +:101EF400203A20226F6666220A0020226D6F6465F4 +:101F040022203A20226F6E220A006D6F6465006FF2 +:101F14006E006F6666006E616D6500696E666F00C7 +:101F24007469746C653D22496E666F223B72743D20 +:101F340022546578742200000001007B0280027044 +:101F4400020000000000000000706C75673100742E +:101F540069746C653D22706C756731223B72743D07 +:101F64002254657874220000000500A902AF02CF54 +:101F740002000000000000000045726269756D20D7 +:101F84004578616D706C65205365727665720000EA +:101F940000D9024D0200000000EF020000706C75D1 +:101FA4006731000000000000000000000000756EB2 +:101FB40061626C6520746F20636F6E666967757209 +:101FC4006520726F7574696E672C206E6F64655F2F +:101FD40069643D25640A00636F6E6669677572659E +:101FE4005F726F7574696E672C206E6F64655F69CC +:101FF400643D25642C206E6F64655F72616E6B2096 +:1020040025640A0001002DF66011020048D7A00DD6 +:10201400030025C36E11040044C46E11050017B7F4 +:102024005E115443502F495020737461636B000058 +:102034000082033314000000001605020034073642 +:10204400074E6F426C6F636B31537570706F7274AF +:1020540000426C6F636B4F75744F6653636F7065AA +:10206400004E6F5365727669636543616C6C62639D +:102074006B004E6F467265655472614275666665A3 +:10208400720072740072743D2200257300436F4124 +:1020940050205265636569766572000000ED036146 +:1020A40026000000002E77656C6C2D6B6E6F776ECA +:1020B4002F636F72650063743D34300000000100CB +:1020C4000504160434290000000000000000436FDA +:1020D40041502D3037002E04892B8E25842D772FE7 +:1020E40093257E2C8B2C962CA52CDC2CF52C69307E +:1020F400172D2F2D742DD72FFE2E152F9B2DB83174 +:102104009F31343A1D3C000000004500410044006A +:102114004200430080008100820083008400850027 +:102124008D008F00A000A100A200A300A400A500C0 +:10213400000001000200030015001600170018003B +:1021440019001A00280029002A002B002C002D0059 +:102154002E002F003000310032003300436F415015 +:102164002076657273696F6E206D75737420626575 +:1021740020310054686973206973206120636F6E95 +:1021840073747261696E656420736572766572201A +:1021940028436F6E74696B692900556E737570708E +:1021A4006F7274656420637269746963616C206F13 +:1021B4007074696F6E0053657269616C697A6564E5 +:1021C4002068656164657220657863656564732061 +:1021D400434F41505F4D41585F4845414445525F2C +:1021E40053495A4500004505950002006A126C12D5 +:1021F40041646465642025752F257500546F6F4D07 +:10220400616E794F6273657276657273002900019D +:1022140000A813A913526573742050726F63657319 +:10222400730000007505BB3C00000000436F6E7432 +:10223400696B6920322E36000000000200000000A5 +:10224400DB44000000005246323330206472697669 +:102254006572000000A605394B00000000824B4166 +:10226400487048F149324A57478B456045244778BE +:1022740046000000000000000043534D4100D90512 +:10228400D14E0E4DD84CDE4CE44CEA4C21000200F9 +:102294006414661406000400A814AC1405000400B9 +:1022A400C414C8147363686564756C655F706F7774 +:1022B40065726379636C653A20636F756C64206E34 +:1022C4006F7420736574207274696D657200436F56 +:1022D4006E74696B694D4143002E06364F5453F3B7 +:1022E400523851164FF94E104F20001000A215B26B +:1022F40015F028682968846864682A6807690100F9 +:102304004576656E742074696D6572000000600620 +:10231400B96F000000004374696D65722070726FBC +:102324006365737300000076068F70000000008DF3 +:1023340018020004003F194319350002004B194DDF +:1023440019D2000400B719BB190F28222000888273 +:10235400800F252321FE80736963736C6F7770612E +:102364006E00B706727D9679000140FF00000100FF +:102374000000282200000400000034223E85D2849C +:0C2384000E000C007C22882201000000EA +:00000001FF diff --git a/examples/osd/wirelessplug/er-plugtest-server.c b/examples/osd/wirelessplug/er-plugtest-server.c new file mode 100644 index 000000000..051b44be0 --- /dev/null +++ b/examples/osd/wirelessplug/er-plugtest-server.c @@ -0,0 +1,561 @@ +/* + * Copyright (c) 2011, Matthias Kovatsch and other contributors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file is part of the Contiki operating system. + */ + +/** + * \file + * Server for the ETSI IoT CoAP Plugtests, Paris, France, 24 - 25 March 2012 + * \author + * Matthias Kovatsch + */ + +#include +#include +#include +#include "contiki.h" +#include "contiki-net.h" + +#define MAX_PLUGFEST_PAYLOAD 64+1 /* +1 for the terminating zero, which is not transmitted */ + +/* Define which resources to include to meet memory constraints. */ +#define REST_RES_TEST 1 +#define REST_RES_LONG 1 +#define REST_RES_QUERY 1 +#define REST_RES_SEPARATE 1 +#define REST_RES_LARGE 1 +#define REST_RES_LARGE_UPDATE 1 +#define REST_RES_LARGE_CREATE 1 +#define REST_RES_OBS 1 + + +#if !defined (CONTIKI_TARGET_MINIMAL_NET) +#warning "Should only be compiled for minimal-net!" +#endif + + +#if !UIP_CONF_IPV6_RPL && !defined (CONTIKI_TARGET_MINIMAL_NET) && !defined (CONTIKI_TARGET_NATIVE) +#warning "Compiling with static routing!" +#include "static-routing.h" +#endif + +#include "erbium.h" + +/* For CoAP-specific example: not required for normal RESTful Web service. */ +#if WITH_COAP==7 +#include "er-coap-07.h" +#else +#error "Plugtests server without CoAP" +#endif /* CoAP-specific example */ + +#define DEBUG 1 +#if DEBUG +#define PRINTF(...) printf(__VA_ARGS__) +#define PRINT6ADDR(addr) PRINTF("[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15]) +#define PRINTLLADDR(lladdr) PRINTF("[%02x:%02x:%02x:%02x:%02x:%02x]",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5]) +#else +#define PRINTF(...) +#define PRINT6ADDR(addr) +#define PRINTLLADDR(addr) +#endif + + +#if REST_RES_TEST +/* + * Default test resource + */ +RESOURCE(test, METHOD_GET|METHOD_POST|METHOD_PUT|METHOD_DELETE, "test", "title=\"Default test resource\""); + +void +test_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + coap_packet_t *const coap_req = (coap_packet_t *) request; + + uint8_t method = REST.get_method_type(request); + + PRINTF("/test "); + if (method & METHOD_GET) + { + PRINTF("GET "); + /* Code 2.05 CONTENT is default. */ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, buffer, snprintf((char *)buffer, MAX_PLUGFEST_PAYLOAD, "Type: %u\nCode: %u\nMID: %u", coap_req->type, coap_req->code, coap_req->mid)); + } + else if (method & METHOD_POST) + { + PRINTF("POST "); + REST.set_response_status(response, REST.status.CREATED); + REST.set_header_location(response, "/nirvana"); + } + else if (method & METHOD_PUT) + { + PRINTF("PUT "); + REST.set_response_status(response, REST.status.CHANGED); + } + else if (method & METHOD_DELETE) + { + PRINTF("DELETE "); + REST.set_response_status(response, REST.status.DELETED); + } + + PRINTF("(%s %u)\n", coap_req->type==COAP_TYPE_CON?"CON":"NON", coap_req->mid); +} +#endif + +#if REST_RES_LONG +/* + * Long path resource + */ +RESOURCE(longpath, METHOD_GET, "seg1/seg2/seg3", "title=\"Long path resource\""); + +void +longpath_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + coap_packet_t *const coap_req = (coap_packet_t *) request; + + uint8_t method = REST.get_method_type(request); + + PRINTF("/seg1/seg2/seg3 "); + if (method & METHOD_GET) + { + PRINTF("GET "); + /* Code 2.05 CONTENT is default. */ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, buffer, snprintf((char *)buffer, MAX_PLUGFEST_PAYLOAD, "Type: %u\nCode: %u\nMID: %u", coap_req->type, coap_req->code, coap_req->mid)); + } + PRINTF("(%s %u)\n", coap_req->type==COAP_TYPE_CON?"CON":"NON", coap_req->mid); +} +#endif + +#if REST_RES_QUERY +/* + * Resource accepting query parameters + */ +RESOURCE(query, METHOD_GET, "query", "title=\"Resource accepting query parameters\""); + +void +query_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + coap_packet_t *const coap_req = (coap_packet_t *) request; + int len = 0; + const char *query = NULL; + + PRINTF("/query GET (%s %u)\n", coap_req->type==COAP_TYPE_CON?"CON":"NON", coap_req->mid); + + if ((len = REST.get_query(request, &query))) + { + PRINTF("Query: %.*s\n", len, query); + } + + /* Code 2.05 CONTENT is default. */ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_response_payload(response, buffer, snprintf((char *)buffer, MAX_PLUGFEST_PAYLOAD, "Type: %u\nCode: %u\nMID: %u\nQuery: %.*s", coap_req->type, coap_req->code, coap_req->mid, len, query)); +} +#endif + +#if REST_RES_SEPARATE +/* Required to manually (=not by the engine) handle the response transaction. */ +#include "er-coap-07-separate.h" +#include "er-coap-07-transactions.h" +/* + * Resource which cannot be served immediately and which cannot be acknowledged in a piggy-backed way + */ +PERIODIC_RESOURCE(separate, METHOD_GET, "separate", "title=\"Resource which cannot be served immediately and which cannot be acknowledged in a piggy-backed way\"", 3*CLOCK_SECOND); + +/* A structure to store the required information */ +typedef struct application_separate_store { + /* Provided by Erbium to store generic request information such as remote address and token. */ + coap_separate_t request_metadata; + /* Add fields for addition information to be stored for finalizing, e.g.: */ + char buffer[MAX_PLUGFEST_PAYLOAD]; +} application_separate_store_t; + +static uint8_t separate_active = 0; +static application_separate_store_t separate_store[1]; + +void +separate_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + coap_packet_t *const coap_req = (coap_packet_t *) request; + + PRINTF("/separate "); + if (separate_active) + { + PRINTF("REJECTED "); + coap_separate_reject(); + } + else + { + PRINTF("STORED "); + separate_active = 1; + + /* Take over and skip response by engine. */ + coap_separate_accept(request, &separate_store->request_metadata); + /* Be aware to respect the Block2 option, which is also stored in the coap_separate_t. */ + + snprintf(separate_store->buffer, MAX_PLUGFEST_PAYLOAD, "Type: %u\nCode: %u\nMID: %u", coap_req->type, coap_req->code, coap_req->mid); + } + + PRINTF("(%s %u)\n", coap_req->type==COAP_TYPE_CON?"CON":"NON", coap_req->mid); +} + +void +separate_periodic_handler(resource_t *resource) +{ + if (separate_active) + { + PRINTF("/separate "); + coap_transaction_t *transaction = NULL; + if ( (transaction = coap_new_transaction(separate_store->request_metadata.mid, &separate_store->request_metadata.addr, separate_store->request_metadata.port)) ) + { + PRINTF("RESPONSE (%s %u)\n", separate_store->request_metadata.type==COAP_TYPE_CON?"CON":"NON", separate_store->request_metadata.mid); + + coap_packet_t response[1]; /* This way the packet can be treated as pointer as usual. */ + + /* Restore the request information for the response. */ + coap_separate_resume(response, &separate_store->request_metadata, CONTENT_2_05); + + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + coap_set_payload(response, separate_store->buffer, strlen(separate_store->buffer)); + + /* + * Be aware to respect the Block2 option, which is also stored in the coap_separate_t. + * As it is a critical option, this example resource pretends to handle it for compliance. + */ + coap_set_header_block2(response, separate_store->request_metadata.block2_num, 0, separate_store->request_metadata.block2_size); + + /* Warning: No check for serialization error. */ + transaction->packet_len = coap_serialize_message(response, transaction->packet); + coap_send_transaction(transaction); + /* The engine will clear the transaction (right after send for NON, after acked for CON). */ + + separate_active = 0; + } else { + PRINTF("ERROR (transaction)\n"); + } + } /* if (separate_active) */ +} +#endif + +#if REST_RES_LARGE +/* + * Large resource + */ +RESOURCE(large, METHOD_GET, "large", "title=\"Large resource\";rt=\"block\""); + +#define CHUNKS_TOTAL 1280 + +void +large_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + int32_t strpos = 0; + + /* Check the offset for boundaries of the resource data. */ + if (*offset>=CHUNKS_TOTAL) + { + REST.set_response_status(response, REST.status.BAD_OPTION); + /* A block error message should not exceed the minimum block size (16). */ + + const char *error_msg = "BlockOutOfScope"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + + /* Generate data until reaching CHUNKS_TOTAL. */ + while (strpos preferred_size) + { + strpos = preferred_size; + } + + /* Truncate if above CHUNKS_TOTAL bytes. */ + if (*offset+(int32_t)strpos > CHUNKS_TOTAL) + { + strpos = CHUNKS_TOTAL - *offset; + } + + REST.set_response_payload(response, buffer, strpos); + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + + /* IMPORTANT for chunk-wise resources: Signal chunk awareness to REST engine. */ + *offset += strpos; + + /* Signal end of resource representation. */ + if (*offset>=CHUNKS_TOTAL) + { + *offset = -1; + } +} +#endif + +#if REST_RES_LARGE_UPDATE +/* + * Large resource that can be updated using PUT method + */ +RESOURCE(large_update, METHOD_GET|METHOD_PUT, "large-update", "title=\"Large resource that can be updated using PUT method\";rt=\"block\""); + +static int32_t large_update_size = 1280; +static uint8_t large_update_store[2048] = {0}; +static unsigned int large_update_ct = -1; + +void +large_update_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + coap_packet_t *const coap_req = (coap_packet_t *) request; + uint8_t method = REST.get_method_type(request); + + if (method & METHOD_GET) + { + /* Check the offset for boundaries of the resource data. */ + if (*offset>=large_update_size) + { + REST.set_response_status(response, REST.status.BAD_OPTION); + /* A block error message should not exceed the minimum block size (16). */ + + const char *error_msg = "BlockOutOfScope"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + + REST.set_response_payload(response, large_update_store+*offset, preferred_size); + REST.set_header_content_type(response, large_update_ct); + + /* IMPORTANT for chunk-wise resources: Signal chunk awareness to REST engine. */ + *offset += preferred_size; + + /* Signal end of resource representation. */ + if (*offset>=large_update_size) + { + *offset = -1; + } + } else { + uint8_t *incoming = NULL; + size_t len = 0; + + unsigned int ct = REST.get_header_content_type(request); + if (ct==-1) + { + REST.set_response_status(response, REST.status.BAD_REQUEST); + const char *error_msg = "NoContentType"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + + if ((len = REST.get_request_payload(request, &incoming))) + { + if (coap_req->block1_num*coap_req->block1_size+len <= sizeof(large_update_store)) + { + memcpy(large_update_store+coap_req->block1_num*coap_req->block1_size, incoming, len); + large_update_size = coap_req->block1_num*coap_req->block1_size+len; + large_update_ct = REST.get_header_content_type(request); + + REST.set_response_status(response, REST.status.CHANGED); + coap_set_header_block1(response, coap_req->block1_num, 0, coap_req->block1_size); + } + else + { + REST.set_response_status(response, REST.status.REQUEST_ENTITY_TOO_LARGE); + REST.set_response_payload(response, buffer, snprintf((char *)buffer, MAX_PLUGFEST_PAYLOAD, "%uB max.", sizeof(large_update_store))); + return; + } + } + else + { + REST.set_response_status(response, REST.status.BAD_REQUEST); + const char *error_msg = "NoPayload"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + } +} +#endif + +#if REST_RES_LARGE_CREATE +/* + * Large resource that can be created using POST method + */ +RESOURCE(large_create, METHOD_POST, "large-create", "title=\"Large resource that can be created using POST method\";rt=\"block\""); + +void +large_create_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + coap_packet_t *const coap_req = (coap_packet_t *) request; + + uint8_t *incoming = NULL; + size_t len = 0; + + unsigned int ct = REST.get_header_content_type(request); + if (ct==-1) + { + REST.set_response_status(response, REST.status.BAD_REQUEST); + const char *error_msg = "NoContentType"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + + if ((len = REST.get_request_payload(request, &incoming))) + { + if (coap_req->block1_num*coap_req->block1_size+len <= 2048) + { + REST.set_response_status(response, REST.status.CREATED); + REST.set_header_location(response, "/nirvana"); + coap_set_header_block1(response, coap_req->block1_num, 0, coap_req->block1_size); + } + else + { + REST.set_response_status(response, REST.status.REQUEST_ENTITY_TOO_LARGE); + const char *error_msg = "2048B max."; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } + } + else + { + REST.set_response_status(response, REST.status.BAD_REQUEST); + const char *error_msg = "NoPayload"; + REST.set_response_payload(response, error_msg, strlen(error_msg)); + return; + } +} +#endif + +#if REST_RES_OBS +/* + * Observable resource which changes every 5 seconds + */ +PERIODIC_RESOURCE(obs, METHOD_GET, "obs", "title=\"Observable resource which changes every 5 seconds\";obs;rt=\"observe\"", 5*CLOCK_SECOND); + +static uint16_t obs_counter = 0; +static char obs_content[16]; + +void +obs_handler(void* request, void* response, uint8_t *buffer, uint16_t preferred_size, int32_t *offset) +{ + REST.set_header_content_type(response, REST.type.TEXT_PLAIN); + REST.set_header_max_age(response, 5); + + REST.set_response_payload(response, obs_content, snprintf(obs_content, MAX_PLUGFEST_PAYLOAD, "TICK %lu", obs_counter)); + + /* A post_handler that handles subscriptions will be called for periodic resources by the REST framework. */ +} + +/* + * Additionally, a handler function named [resource name]_handler must be implemented for each PERIODIC_RESOURCE. + * It will be called by the REST manager process with the defined period. + */ +void +obs_periodic_handler(resource_t *r) +{ + ++obs_counter; + + PRINTF("TICK %u for /%s\n", obs_counter, r->url); + + /* Build notification. */ + /*TODO: REST.new_response() */ + coap_packet_t notification[1]; /* This way the packet can be treated as pointer as usual. */ + coap_init_message(notification, COAP_TYPE_NON, CONTENT_2_05, 0 ); + + /* Better use a generator function for both handlers that only takes *resonse. */ + obs_handler(NULL, notification, NULL, 0, NULL); + + /* Notify the registered observers with the given message type, observe option, and payload. */ + REST.notify_subscribers(r, obs_counter, notification); +} +#endif + +PROCESS(plugtest_server, "PlugtestServer"); +AUTOSTART_PROCESSES(&plugtest_server); + +PROCESS_THREAD(plugtest_server, ev, data) +{ + PROCESS_BEGIN(); + + PRINTF("ETSI IoT CoAP Plugtests Server\n"); + +#ifdef RF_CHANNEL + PRINTF("RF channel: %u\n", RF_CHANNEL); +#endif +#ifdef IEEE802154_PANID + PRINTF("PAN ID: 0x%04X\n", IEEE802154_PANID); +#endif + + PRINTF("uIP buffer: %u\n", UIP_BUFSIZE); + PRINTF("LL header: %u\n", UIP_LLH_LEN); + PRINTF("IP+UDP header: %u\n", UIP_IPUDPH_LEN); + PRINTF("REST max chunk: %u\n", REST_MAX_CHUNK_SIZE); + +/* if static routes are used rather than RPL */ +#if !UIP_CONF_IPV6_RPL && !defined (CONTIKI_TARGET_MINIMAL_NET) + set_global_address(); + configure_routing(); +#endif + + /* Initialize the REST engine. */ + rest_init_engine(); + + /* Activate the application-specific resources. */ +#if REST_RES_TEST + rest_activate_resource(&resource_test); +#endif +#if REST_RES_LONG + rest_activate_resource(&resource_longpath); +#endif +#if REST_RES_QUERY + rest_activate_resource(&resource_query); +#endif +#if REST_RES_SEPARATE + rest_activate_periodic_resource(&periodic_resource_separate); +#endif +#if REST_RES_LARGE + rest_activate_resource(&resource_large); +#endif +#if REST_RES_LARGE_UPDATE + large_update_ct = REST.type.APPLICATION_OCTET_STREAM; + rest_activate_resource(&resource_large_update); +#endif +#if REST_RES_LARGE_CREATE + rest_activate_resource(&resource_large_create); +#endif +#if REST_RES_OBS + rest_activate_periodic_resource(&periodic_resource_obs); +#endif + + /* Define application-specific events here. */ + while(1) { + PROCESS_WAIT_EVENT(); + + } /* while (1) */ + + PROCESS_END(); +} diff --git a/examples/osd/wirelessplug/project-conf.h b/examples/osd/wirelessplug/project-conf.h new file mode 100644 index 000000000..1c3dd8933 --- /dev/null +++ b/examples/osd/wirelessplug/project-conf.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2010, Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * + */ + +#ifndef __PROJECT_RPL_WEB_CONF_H__ +#define __PROJECT_RPL_WEB_CONF_H__ + +#define SICSLOWPAN_CONF_FRAG 1 + +/* Disabling RDC for demo purposes. Core updates often require more memory. */ +/* For projects, optimize memory and enable RDC again. */ +//#undef NETSTACK_CONF_RDC +//#define NETSTACK_CONF_RDC nullrdc_driver + +/* Save some memory for the sky platform. */ +#undef UIP_CONF_DS6_NBR_NBU +#define UIP_CONF_DS6_NBR_NBU 10 +#undef UIP_CONF_DS6_ROUTE_NBU +#define UIP_CONF_DS6_ROUTE_NBU 10 + +/* Increase rpl-border-router IP-buffer when using 128. */ +#ifndef REST_MAX_CHUNK_SIZE +#define REST_MAX_CHUNK_SIZE 64 +#endif + +/* Multiplies with chunk size, be aware of memory constraints. */ +#ifndef COAP_MAX_OPEN_TRANSACTIONS +#define COAP_MAX_OPEN_TRANSACTIONS 2 +#endif + +/* Must be <= open transaction number. */ +#ifndef COAP_MAX_OBSERVERS +#define COAP_MAX_OBSERVERS COAP_MAX_OPEN_TRANSACTIONS-1 +#endif + +/* Reduce 802.15.4 frame queue to save RAM. */ +#undef QUEUEBUF_CONF_NUM +#define QUEUEBUF_CONF_NUM 4 + +#endif /* __PROJECT_RPL_WEB_CONF_H__ */ diff --git a/examples/osd/wirelessplug/run.sh b/examples/osd/wirelessplug/run.sh new file mode 100755 index 000000000..02b03a5bb --- /dev/null +++ b/examples/osd/wirelessplug/run.sh @@ -0,0 +1,7 @@ +#!/bin/bash +make clean TARGET=osd-er-lp24 +make TARGET=osd-er-lp24 +avr-size -C --mcu=MCU=atmega128rfa1 er-example-server.osd-er-lp24 +avr-objcopy -j .text -j .data -O ihex er-example-server.osd-er-lp24 er-example-server.osd-er-lp24.hex +avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex er-example-server.osd-er-lp24 er-example-server.osd-er-lp24.eep + diff --git a/examples/osd/wirelessplug/server-client.csc b/examples/osd/wirelessplug/server-client.csc new file mode 100644 index 000000000..8c45fdf02 --- /dev/null +++ b/examples/osd/wirelessplug/server-client.csc @@ -0,0 +1,227 @@ + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + REST with RPL router + -2147483648 + 123456 + 1000000 + + se.sics.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + se.sics.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.SkyByteRadio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + se.sics.cooja.mspmote.SkyMoteType + server + Erbium Server + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c + make er-example-server.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.SkyByteRadio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + se.sics.cooja.mspmote.SkyMoteType + client + Erbium Client + [CONTIKI_DIR]/examples/er-rest-example/er-example-client.c + make er-example-client.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-client.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.SkyByteRadio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + + + se.sics.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + se.sics.cooja.interfaces.Position + 46.57186415376375 + 40.35946215910942 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 2 + + server + + + + + se.sics.cooja.interfaces.Position + 18.638049428485125 + 47.55034515769599 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 3 + + client + + + + se.sics.cooja.plugins.SimControl + 259 + 0 + 179 + 0 + 0 + + + se.sics.cooja.plugins.Visualizer + + se.sics.cooja.plugins.skins.IDVisualizerSkin + se.sics.cooja.plugins.skins.UDGMVisualizerSkin + se.sics.cooja.plugins.skins.MoteTypeVisualizerSkin + se.sics.cooja.plugins.skins.AttributeVisualizerSkin + se.sics.cooja.plugins.skins.LEDVisualizerSkin + se.sics.cooja.plugins.skins.AddressVisualizerSkin + 3.61568947862321 0.0 0.0 3.61568947862321 15.610600779367 -85.92728269158351 + + 300 + 2 + 178 + 261 + 1 + + + se.sics.cooja.plugins.LogListener + + + + + 762 + 3 + 491 + 2 + 182 + + + se.sics.cooja.plugins.RadioLogger + + 150 + + + 451 + -1 + 305 + 73 + 140 + true + + + SerialSocketServer + 0 + 422 + 4 + 74 + 578 + 18 + + + se.sics.cooja.plugins.TimeLine + + 0 + 1 + 2 + + + + + 125 + 25.49079397896416 + + 1624 + 5 + 252 + 6 + 712 + + + se.sics.cooja.plugins.MoteInterfaceViewer + 2 + + Serial port + 0,0 + + 853 + 1 + 491 + 765 + 182 + + + diff --git a/examples/osd/wirelessplug/server-only.csc b/examples/osd/wirelessplug/server-only.csc new file mode 100644 index 000000000..d5eee34d6 --- /dev/null +++ b/examples/osd/wirelessplug/server-only.csc @@ -0,0 +1,189 @@ + + + [CONTIKI_DIR]/tools/cooja/apps/mrm + [CONTIKI_DIR]/tools/cooja/apps/mspsim + [CONTIKI_DIR]/tools/cooja/apps/avrora + [CONTIKI_DIR]/tools/cooja/apps/serial_socket + [CONTIKI_DIR]/tools/cooja/apps/collect-view + + REST with RPL router + -2147483648 + 123456 + 1000000 + + se.sics.cooja.radiomediums.UDGM + 50.0 + 50.0 + 1.0 + 1.0 + + + 40000 + + + se.sics.cooja.mspmote.SkyMoteType + rplroot + Sky RPL Root + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.c + make border-router.sky TARGET=sky + [CONTIKI_DIR]/examples/ipv6/rpl-border-router/border-router.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.SkyByteRadio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + se.sics.cooja.mspmote.SkyMoteType + server + Erbium Server + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.c + make er-example-server.sky TARGET=sky + [CONTIKI_DIR]/examples/er-rest-example/er-example-server.sky + se.sics.cooja.interfaces.Position + se.sics.cooja.interfaces.RimeAddress + se.sics.cooja.interfaces.IPAddress + se.sics.cooja.interfaces.Mote2MoteRelations + se.sics.cooja.interfaces.MoteAttributes + se.sics.cooja.mspmote.interfaces.MspClock + se.sics.cooja.mspmote.interfaces.MspMoteID + se.sics.cooja.mspmote.interfaces.SkyButton + se.sics.cooja.mspmote.interfaces.SkyFlash + se.sics.cooja.mspmote.interfaces.SkyCoffeeFilesystem + se.sics.cooja.mspmote.interfaces.SkyByteRadio + se.sics.cooja.mspmote.interfaces.MspSerial + se.sics.cooja.mspmote.interfaces.SkyLED + se.sics.cooja.mspmote.interfaces.MspDebugOutput + se.sics.cooja.mspmote.interfaces.SkyTemperature + + + + + se.sics.cooja.interfaces.Position + 33.260163187353555 + 30.643217359962595 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 1 + + rplroot + + + + + se.sics.cooja.interfaces.Position + 35.100895239785295 + 39.70574552287428 + 0.0 + + + se.sics.cooja.mspmote.interfaces.MspMoteID + 2 + + server + + + + se.sics.cooja.plugins.SimControl + 259 + 5 + 179 + 0 + 0 + + + se.sics.cooja.plugins.Visualizer + + se.sics.cooja.plugins.skins.IDVisualizerSkin + se.sics.cooja.plugins.skins.UDGMVisualizerSkin + se.sics.cooja.plugins.skins.MoteTypeVisualizerSkin + se.sics.cooja.plugins.skins.AttributeVisualizerSkin + se.sics.cooja.plugins.skins.LEDVisualizerSkin + se.sics.cooja.plugins.skins.AddressVisualizerSkin + 7.9849281638410705 0.0 0.0 7.9849281638410705 -133.27812697619663 -225.04752569190535 + + 300 + 4 + 175 + 263 + 3 + + + se.sics.cooja.plugins.LogListener + + + + + 560 + 1 + 326 + 1 + 293 + + + se.sics.cooja.plugins.RadioLogger + + 150 + + + 451 + -1 + 305 + 73 + 140 + true + + + SerialSocketServer + 0 + 422 + 2 + 74 + 39 + 199 + + + se.sics.cooja.plugins.TimeLine + + 0 + 1 + + + + + 125 + 25.49079397896416 + + 1624 + 3 + 252 + 4 + 622 + + + se.sics.cooja.plugins.MoteInterfaceViewer + 1 + + Serial port + 0,0 + + 702 + 0 + 646 + 564 + 2 + + + diff --git a/examples/osd/wirelessplug/static-routing.c b/examples/osd/wirelessplug/static-routing.c new file mode 100644 index 000000000..628594892 --- /dev/null +++ b/examples/osd/wirelessplug/static-routing.c @@ -0,0 +1,155 @@ +/* + * static-routing.c + * + * Created on: Oct 12, 2010 + * Author: simonduq + */ + +#include +#include "static-routing.h" + +#define DEBUG 0 +#if DEBUG +#include +#define PRINTF(...) printf(__VA_ARGS__) +#define PRINT6ADDR(addr) PRINTF(" %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x ", ((uint8_t *)addr)[0], ((uint8_t *)addr)[1], ((uint8_t *)addr)[2], ((uint8_t *)addr)[3], ((uint8_t *)addr)[4], ((uint8_t *)addr)[5], ((uint8_t *)addr)[6], ((uint8_t *)addr)[7], ((uint8_t *)addr)[8], ((uint8_t *)addr)[9], ((uint8_t *)addr)[10], ((uint8_t *)addr)[11], ((uint8_t *)addr)[12], ((uint8_t *)addr)[13], ((uint8_t *)addr)[14], ((uint8_t *)addr)[15]) +#define PRINTLLADDR(lladdr) PRINTF(" %02x:%02x:%02x:%02x:%02x:%02x ",(lladdr)->addr[0], (lladdr)->addr[1], (lladdr)->addr[2], (lladdr)->addr[3],(lladdr)->addr[4], (lladdr)->addr[5]) +#else +#define PRINTF(...) +#define PRINT6ADDR(addr) +#define PRINTLLADDR(addr) +#endif + +#include "contiki-net.h" +#include "node-id.h" + +int node_rank; + +struct id_to_addrs { + int id; + uint32_t addr; +}; + +const struct id_to_addrs motes_addrs[] = { +/* + * Static routing requires a map nodeid => address. + * The nodeid can be programmed with the sky-shell. + * The addresses should also be added to /etc/hosts. + * + * aaaa::212:7400:1160:f62d sky1 + * aaaa::212:7400:0da0:d748 sky2 + * aaaa::212:7400:116e:c325 sky3 + * aaaa::212:7400:116e:c444 sky4 + * aaaa::212:7400:115e:b717 sky5 + * + * Add the nodeid and last 4 bytes of the address to the map. + */ + {1, 0x1160f62d}, + {2, 0x0da0d748}, + {3, 0x116ec325}, + {4, 0x116ec444}, + {5, 0x115eb717}, +}; +/* Define the size of the map. */ +#define NODES_IN_MAP 5 + +uint32_t get_mote_suffix(int rank) { + if(--rank >=0 && rank<(sizeof(motes_addrs)/sizeof(struct id_to_addrs))) { + return motes_addrs[rank].addr; + } + return 0; +} + +int get_mote_id(uint32_t suffix) { +#if IN_COOJA + return suffix & 0xff; +#else + int i; + for(i=0; i<(sizeof(motes_addrs)/sizeof(struct id_to_addrs)); i++) { + if(suffix == motes_addrs[i].addr) { + return motes_addrs[i].id; + } + } + return 0; +#endif +} + +void set_global_address(void) { + uip_ipaddr_t ipaddr; + + uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); + uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); + uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); +} + +static void add_route_ext(int dest, int next) { + PRINTF("add route ext %d %d\n", dest, next); + uip_ipaddr_t ipaddr_dest, ipaddr_next; + uip_ip6addr(&ipaddr_dest, 0xaaaa, 0, 0, 0, 0, 0, 0, dest); +#if IN_COOJA + uip_ip6addr(&ipaddr_next, 0xfe80, 0, 0, 0, 0x0212, 0x7400 | next, next, next<<8 | next); +#else + uint32_t next_suffix = get_mote_suffix(next); + uip_ip6addr(&ipaddr_next, 0xfe80, 0, 0, 0, 0x0212, 0x7400, (next_suffix >> 16) & 0xffff, next_suffix & 0xffff); +#endif + uip_ds6_route_add(&ipaddr_dest, 128, &ipaddr_next, 0); +} + +void add_route(int dest, int next) { + PRINTF("add route %d %d\n", dest, next); + uip_ipaddr_t ipaddr_dest, ipaddr_next; +#if IN_COOJA + uip_ip6addr(&ipaddr_dest, 0xaaaa, 0, 0, 0, 0x0212, 0x7400 | dest, dest, dest<<8 | dest); + uip_ip6addr(&ipaddr_next, 0xfe80, 0, 0, 0, 0x0212, 0x7400 | next, next, next<<8 | next); +#else + uint32_t dest_suffix = get_mote_suffix(dest); + uint32_t next_suffix = get_mote_suffix(next); + uip_ip6addr(&ipaddr_dest, 0xaaaa, 0, 0, 0, 0x0212, 0x7400, (dest_suffix >> 16) & 0xffff, dest_suffix & 0xffff); + uip_ip6addr(&ipaddr_next, 0xfe80, 0, 0, 0, 0x0212, 0x7400, (next_suffix >> 16) & 0xffff, next_suffix & 0xffff); +#endif + uip_ds6_route_add(&ipaddr_dest, 128, &ipaddr_next, 0); +} + +void configure_routing(void) { + int i; +#if IN_COOJA + node_rank = node_id; +#else + node_rank = -1; + for(i=0; i<(sizeof(motes_addrs)/sizeof(struct id_to_addrs)); ++i) { + if(node_id == motes_addrs[i].id) { + node_rank = i+1; + break; + } + } + + if(node_rank == -1) { + printf("unable to configure routing, node_id=%d\n", node_id); + return; + } +#endif + + printf("configure_routing, node_id=%d, node_rank %d\n", node_id, node_rank); + + if (node_rank == 1) { /* border router #1 */ + add_route_ext(2, 2); + for(i=2; i<=NODES_IN_MAP; ++i) { + add_route(i, 2); + } + } else if (node_rank < NODES_IN_MAP) { /* other node */ + add_route_ext(1, node_rank-1); + add_route_ext(2, node_rank+1); + for(i=1; i<=NODES_IN_MAP; ++i) { + if(inode_rank) { + add_route(i, node_rank+1); + } + } + } else if (node_rank == NODES_IN_MAP) { /* 2nd border router */ + add_route_ext(1, NODES_IN_MAP-1); + for(i=1; i<=NODES_IN_MAP-1; ++i) { + add_route(i, NODES_IN_MAP-1); + } + } +} diff --git a/examples/osd/wirelessplug/static-routing.h b/examples/osd/wirelessplug/static-routing.h new file mode 100644 index 000000000..0dff0b7ba --- /dev/null +++ b/examples/osd/wirelessplug/static-routing.h @@ -0,0 +1,20 @@ +/* + * static-routing.h + * + * Created on: Oct 12, 2010 + * Author: simonduq + */ + +#ifndef STATICROUTING_H_ +#define STATICROUTING_H_ + +#include "contiki.h" + +extern int node_rank; +extern uint32_t get_mote_suffix(int id); +extern int get_mote_id(uint32_t suffix); +extern void add_route(int dest, int next); +extern void set_global_address(void); +extern void configure_routing(void); + +#endif /* STATICROUTING_H_ */